dzadsod/admin/select.class.php

289 lines
9.4 KiB
PHP

<?php
defined('IN_MET') or exit('No permission');
load::own_class('appadmin');
load::own_func('appcmp');
/*
* 配置
* 包含其他功能初始化
*/
class select extends appadmin {
/*
* @$querys string 搜索内容
* @$tname string 指定的查询表
* @$fiend string 作为返回ID的值
* @$source string 查询来源页面,用于区分用哪个页面来查询的好做一些特殊处理
* @$allnone string 是否显示默认值全部,或者当没有搜索结果时将搜索内容当作值返回
* @$condition string 页面查询限制条件,采用$$$作为多条件分割,|||作为字段名和值的分割
* @$default string 默认值
* @$division string 默认值分隔符
*
* @$where string sql判断语句
*/
//搜索内容
private $querys = '';
//指定字段为值
private $fiend;
//来源页面标记
private $source;
//是否显示默认值全部
private $allnone;
//判断条件
private $condition;
//默认值
private $default;
//默认值分隔符
private $division;
//sql判断条件
private $where = '';
//返回的数组
private $data = [];
public function __construct() {
global $_M,$_YW;
parent::__construct();
//指定表
$this->tname = $_M['form']['tname'];
//搜索内容
$this->querys = $_M['form']['querys'];
//以指定字段为值
$this->fiend = $_M['form']['fiend']?:'id';
//来源
$this->source = $_M['form']['source'];
//是否显示全部
$this->allnone = $_M['form']['allnone'];
//判断条件
$this->condition = $_M['form']['condition'];
//默认值
$this->default = $_M['form']['default'];
//默认值分隔符
$this->division = $_M['form']['division'];
}
# select2 选项字段处理
private function select_fiend($val) {
global $_M,$_YW;
$strarr = stringto_array($this->fiend,'|');
foreach ($strarr as $value) {
$arrstr[] = $val[$value];
}
return arrayto_string($arrstr,'|');
}
# allnone 默认选项全部处理
private function allnone() {
global $_M,$_YW;
// 若不需要显示‘全部’值,则直接返回空
// 0 为不显示‘全部’,同时也在未搜索到结果的情况下 不 设置为可选值
// 1 为显示 显示‘全部’,同时也在未搜索结果的情况下 设置可选值
// 2 只显示‘全部’
// 3 只将未搜索到结果的情况下设置为可选值
if(empty($this->allnone) || $this->allnone == '3') return false;
//然后可根据来源标记进行处理
switch ($this->source) {
// case 'githooks':
// $initial[] = ['id' => 'newver','text'=>'自动部署至最新版本'];
// break;
default:
$initial[] = [ 'id' => '','text' => '全部' ];
break;
}
$this->data[] = ["text" => '',"children" => $initial ];
}
# 当未搜索到值是否将搜索结果设置为可选值
private function children() {
global $_M,$_YW;
// 判断是否要将搜索内容设置为可选值
if(empty($this->allnone) || $this->allnone == '2' || strlen($this->querys) == 0) return false;
// 要注意id的是否为可写入数据库 误区,若有些字段为数字 则会导致无法录入成功
// 后期可增加一个判断方式来处理这个误区
$this->data[] = [
"text" => '',
"children" => [
['id'=> $this->querys,'text' => $this->querys]
]
];
}
# querys 处理
private function querys() {
global $_M,$_YW;
if(strlen($this->querys) == 0) return false;
switch ($this->tname) {
case 'village':
$this->where = " v_name LIKE '%{$this->querys}%' ";
break;
case 'customer':
$this->where = " c_allname LIKE '%{$this->querys}%' ";
break;
case 'workers':
$this->where = " w_name LIKE '%{$this->querys}%' OR w_tel LIKE '%{$this->querys}%' ";
break;
case 'contract':
$this->where = " h_number LIKE '%{$this->querys}%' ";
break;
case 'launch':
$this->where = " l_title LIKE '%{$this->querys}%' ";
break;
case 'weuser':
$nickname = urlencode($this->querys);
$this->where = " nickname LIKE '%{$nickname}%' ";
break;
case 'para':
$this->where = " p_name LIKE '%{$this->querys}%' OR p_value LIKE '%{$this->querys}%' ";
break;
default:
break;
}
}
# condition 处理
private function condition() {
global $_M,$_YW;
if(empty($this->condition)) return false;
// 进行处理
$condition = stringto_array($this->condition,'|||','$$$');
foreach ($condition as $value) {
list($key,$val) = $value;
$valstr[] = " {$key} = '{$val}' ";
}
$valstr = arrayto_string($valstr,' AND ');
if(strlen($valstr) > 0){
if(!empty($this->where)) $this->where = " ({$this->where}) AND ";
$this->where .= $valstr;
}
}
# 选项值的组成样式
private function valuet($val) {
global $_M,$_YW;
switch ($this->tname) {
case 'village':
$fiend = [$val['v_name'],$val['v_province'].$val['v_city'].$val['v_district'].$val['v_address']];
break;
case 'customer':
$fiend = [$val['c_name'],$val['c_allname'],$val['c_province'].$val['c_city'].$val['c_district'].$val['c_address']];
break;
case 'workers':
$fiend = [$val['w_name'],$val['w_tel']];
break;
case 'contract':
$fiend = [$val['h_number']];
break;
case 'launch':
$fiend = [$val['l_title'],$val['l_hnumber']];
break;
case 'weuser':
$sex = ['未知','男','女'];
$fiend = [$val['nickname'],$sex[$val['sex']] ];
break;
case 'para':
$fiend = [$val['p_name']];
// $fiend = [$val['p_value']];
break;
default:
break;
}
$text = arrayto_string($fiend,' / ');
return $text;
}
//编号字段,根据此字段进行编号处理
private function charter() {
global $_M,$_YW;
switch ($this->tname) {
case 'village':
$fiend = 'v_name';
break;
case 'customer':
$fiend = 'c_name';
break;
case 'workers':
$fiend = 'w_name';
break;
case 'contract':
$fiend = 'h_number';
break;
case 'launch':
$fiend = 'l_title';
break;
case 'weuser':
$fiend = 'nickname';
break;
case 'para':
$fiend = 'p_name';
break;
default:
break;
}
return $fiend;
}
// 查看小区名称列表
public function doselect() {
global $_M,$_YW;
//判断条件
self::querys();
//带入的判断条件
self::condition();
//编号的字段
$fiend = self::charter();
//查询
$array = $this->tsql->table($this->tname)->where($this->where)->order('id DESC')->all('id');
// $sqltsr = $this->tsql->query();
foreach ($array as $val) {
if($this->tname == 'weuser'){
$val['nickname'] = urldecode($val['nickname']);
}
$letter = getstrcharter($val[$fiend]);
$selectlist[$letter][] = $val;
}
//是否显示全部
self::allnone();
//是否将搜索内容作为结果
self::children();
//处理结果
foreach ($selectlist as $key => $val){
$arr = [];
foreach ($val as $v) {
$valid = self::select_fiend($v);
//判断是否只输出默认值
if(strlen($this->default) > 0){
$default = stringto_array($this->default, $this->division);
if(!in_array($valid, $default,true)) continue;
}
//组成选项
$arr[] = ['id' => $valid, 'text' => self::valuet($v)];
}
$this->data[] = ["text" => $key,"children" => $arr];
}
//当值不存在时
if(!count($this->data)){
//输出没有搜索到结果
$this->data = [["text" => $this->querys == ''?'检索不到相关信息':"检索不到 {$this->querys} 相关信息","children" => [] ]];
}else{
//对数组排序A-ZZ
$text = array_column($this->data, 'text');
array_multisort($text,SORT_ASC,$this->data);
}
echo jsoncallback(['results' => $this->data]);
}
}
?>