ado, true)) { //报错 exit(0); } //指定表 $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; $curdate = date('Y-m-d', time()); switch ($this->source) { case 'weblaunchsearch': $this->where = " l_starttime <= '{$curdate}' "; // $this->where = " NOT ( l_endtime < '{$curdate}' OR l_starttime > '{$curdate}' ) "; break; case 'webcontractsearch': $this->where = " h.h_starttime <= '{$curdate}' "; break; default: $this->where = false; break; } 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 .= " AND ( h.h_number LIKE '%{$this->querys}%' OR c.c_allname LIKE '%{$this->querys}%' OR c.c_name LIKE '%{$this->querys}%' ) "; break; case 'launch': $this->where .= " AND l_title LIKE '%{$this->querys}%' "; break; case 'weuser': $nickname = urlencode($this->querys); $this->where = " nickname LIKE '%{$nickname}%' "; 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'], $val['c_allname']]; break; case 'launch': $fiend = [$val['l_title'], $val['l_hnumber']]; break; case 'weuser': $sex = ['未知', '男', '女']; $fiend = [$val['nickname'], $sex[ $val['sex'] ]]; 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; default: break; } return $fiend; } // 查看场所名称列表 public function doselect() { global $_M, $_YW; //判断条件 self::querys(); //带入的判断条件 self::condition(); //编号的字段 $fiend = self::charter(); //查询 if ($this->tname != 'contract') { $array = $this->tsql->table($this->tname)->where($this->where)->order('id DESC')->all('id'); } else { $array = $this->tsql->table_unset() ->tables([$this->tname, 'h'], 'LEFT JOIN') ->tables(['customer', 'c'], 'ON h.h_cid = c.id') ->where($this->where) ->qfield(" h.*,c.c_allname ") ->order('h.id DESC')->all('id'); } // dump($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]); } } ?>