false, 'add' => false, 'del' => false]; // 调用类 public $tsql; public $cloud; # 初始化 public function __construct() { global $_M, $_YW; parent::__construct(); //调试使用 ini_set("display_errors", "On"); error_reporting(E_ERROR); $this->tsql = load::own_class('tsql', 'new'); self::cmp_load(); self::adminop(); $this->cloud = load::own_class('cloud', 'new'); } use appcmp; //调试使用 public function bug() { $this->destruct = false; } # 后台导航 /* * @$select string 最终菜单选项 * @$title string 当前页面标题 */ public function appnav($select = '', $title = '') { global $_M, $_YW; if (is_array($select)) list($select, $title) = $select; //当前的CA组合 $select = empty($select) ? $_M['form']['c'] . '__' . $_M['form']['a'] : $select; //导航公用参数 $glpara = [ 'navon' => $_M['form']['navon'], ]; /* * 导航规则 */ //key 为c值和a值组成,可实现自动选择 //val 第一位是导航名称,第二位为传递的参数(array) 若第三位跳转的外链 $nav = [ 'dzadsod__dodzadsod' => [ ['统计中心'], [ 'dzadsod__dodzadsod' => ['总计界面'], 'table_on__dovillages' => ['场所统计'], 'table_on__doelevators' => ['广告位统计'], 'table_on__doschedule' => ['排期查询'], ] ], 'table_on__docontract' => [ ['运营中心'], [ 'table_on__docontract' => ['订单管理'], 'table_on__dolaunch' => ['投放计划'], // 'info_on__douplaunch' => ['调整投放'], 'table_on__docustomer' => ['合作企业'], 'table_on__doworkers' => ['企业联系人'], 'table_on__dokeylist' => ['巡查人员'], ] ], 'table_on__doelevator' => [ ['资源管理'], [ 'table_on__doelevator' => ['广告位'], 'table_on__dovillage' => ['合作场所'] ] ], 'table_on__dopara' => [ ['配置参数'], [ 'config__doindex' => ['基础配置'], 'table_on__dopara' => ['参数列表'] ] ], 'index__doindex' => [ ['更新检测', ['check' => 1]] ] ]; $i = 0; foreach ($nav as $key => $val) { list($info, $sub) = $val; //判断是否执行当前二级目录 $li = ''; if (is_array($info) && ($select == $key || array_key_exists($select, $sub))) { //执行二级目录的操作 $sub = array_merge([$key => $info], $sub); foreach ($sub as $skey => $sval) { if ($key == $skey) $sval = array_replace($info, $sval); //执行一级目录的操作 list($sname, $surl) = self::nav_para($skey, $sval, $glpara); //二级选项和页面title $active = ''; if ($select == $skey) { $select = $key; $active = 'active'; $this->input['met_title'] = empty($title) ? $sname : $title; } //二级导航HTML $li .= ""; } $this->input['nav_sub'] = empty($li) ? '' : '
'; } //执行一级目录的操作 if (!is_array($info)) $info = $val; list($name, $url) = self::nav_para($key, $info, $glpara); //填充HTML nav::set_nav($i, $name, $url); $select_nav[ $key ] = $i; //页面title if ($select == $key && empty($this->input['met_title'])) $this->input['met_title'] = empty($title) ? $name : $title; $i++; } //指定当前方法属于哪个主导航 if (array_key_exists($select, $nav)) nav::select_nav($select_nav[ $select ]); } //导航NAME和URL private function nav_para($key, $info, $glpara) { global $_M, $_YW; //合并c和a list($c, $a) = stringto_array($key, '__'); //合并默认参数值 $arr = array_merge(['c' => $c, 'a' => $a], $glpara); list($name, $para, $links) = $info; //判断是否有设置单独的参数,有则增加 if (is_array($para)) $arr = array_merge($arr, $para); //生成URL $url = empty($links) ? $_M['url']['own_name'] : $links; return [$name, self::http_build_query($url, $arr)]; } #URL上c的值 a的值 #$appshow 全局模板文件,指整个文件的模板 public function point($c, $a, $appshow = '') { global $_M, $_YW; $this->u_urlc = $c; $this->u_urla = $a; if (!empty($appshow)) $this->appshow = 'app/' . $appshow; } #URL处理 #$appshow 单独定义模板 某个方法内定义 public function appurl($tname = '', $query = [], $appshow = '') { global $_M, $_YW; //数据库表简写 $this->tname = empty($tname) ? self::tname() : $tname; //URL参数 if (!is_array($query)) $query = [$query]; $query['tname'] = $this->tname; $this->u_para = '&' . http_build_query($query); //URL $this->input['url'] = [ 'action' => $_M['url']['own_name'] . "c={$this->u_urlc}&a={$this->u_urla}" . $this->u_para, // 表单提交URL 'ajaxurl' => $_M['url']['own_name'] . "c=table_ajax&a={$this->u_urla}" . $this->u_para, // table数据获取URL 'addlist' => $_M['url']['own_name'] . 'c=table_ajax&a=do_table_add_list' . $this->u_para, // table新增行URL 'backup' => $_M['url']['own_name'] . 'c=backups&a=doindex' . $this->u_para, // table备份URL 'select' => $_M['url']['own_name'] . 'c=select&a=doselect' // 下拉选择器 ]; $this->input['tname'] = $this->tname; $_YW['url'] = $this->input['url']; if (!empty($appshow)) $this->appshow = 'app/' . $appshow; } //权限 private function adminop() { global $_M, $_YW; $admin_op = background_privilege(); $adminop = array_filter(explode('-', $admin_op['admin_op'])); //1查看 【不勾选任何的操作即可实现】 //2编辑 不含删除 【不勾选删除权限即可实现】 //3不限制权限 【全部勾选即可】 if (in_array('metinfo', $adminop)) { $this->adop = ['met' => true, 'add' => true, 'del' => true]; } else { if (in_array('add', $adminop) || in_array('editor', $adminop)) { $this->adop['add'] = true; } if (in_array('del', $adminop)) { $this->adop['del'] = true; } if ($this->adop['add'] && $this->adop['del']) { $this->adop['met'] = true; } } $_YW['aop'] = $this->adop; } //添加设置参数HTML public function setparahtml($ptype = 0, &$html) { global $_M, $_YW; $addparaurl = $_M['url']['own_name'] . 'c=table_on&a=dopara&p_type=' . $ptype; $html .= '设置选项'; } //参数单选组成 public function para_radio($para, $name, $checked, &$html, $exists = false) { global $_M, $_YW; $html = ''; $first = 'data-checked="' . $checked . '" required data-fv-notEmpty-message="不能为空"'; foreach ($para as $key => $val) { if ($exists) { list($p_name, $p_value, $p_text) = $val; } else { extract($val); } $html .= '
' . $p_text . '
'; $first = ''; } return $this; } //参数多选组成 public function para_checkbox($para, $name, $checked, &$html, $exists = false) { global $_M, $_YW; $html = ''; $first = 'data-checked="' . $checked . '" required data-fv-notEmpty-message="不能为空" '; // data-delimiter="," 因为暂时无效 foreach ($para as $key => $val) { if ($exists) { list($p_name, $p_value, $p_text) = $val; } else { extract($val); } $html .= '
' . $p_text . '
'; $first = ''; } return $this; } //参数处理 public function translate($p_type = 0) { global $_M, $_YW; $para = self::paralist($p_type); return array_combine(array_column($para, 'p_value'), array_column($para, 'p_name')); } //场所名称 public function villagelist($id, $key = 'v_name') { global $_M, $_YW; $village = $this->tsql->table('village')->where(['id' => $id])->one(); if (is_array($key)) { $arr = []; foreach ($key as $val) { $arr[ $val ] = $village[ $val ]; } return $arr; } else { return $village[ $key ]; } } //公司名称 public function customerlist($id, $key = 'c_allname') { global $_M, $_YW; $customer = $this->tsql->table('customer')->where(['id' => $id])->one(); return $customer[ $key ]; } //相关人员 public function workerslist($id, $key = 'w_name') { global $_M, $_YW; $workers = $this->tsql->table('workers')->where(['id' => $id])->one(); return $key == false ? $workers : $workers[ $key ]; } //返回广告位对照地址 public function e_address($elevator) { global $_M, $_YW; //门口方位 $e_bno = self::paralist(['p_type' => 3, 'p_value' => $elevator['e_bno']]); //广告位置 $e_aps = self::paralist(['p_type' => 0, 'p_value' => $elevator['e_aps']]); //场所 $e_vid = self::villagelist($elevator['e_vid']); return "({$elevator['e_number']})" . $e_vid . $e_bno['p_name'] . $e_aps['p_name']; } //字段颜色 public function state_color($state, $array = []) { global $_M, $_YW; $color = ['red-600', 'green-600', 'purple-600']; $str = count($array) > 0 ? $array : ['无效', '有效']; return '' . $str[ $state ] . ''; } //字体颜色 public function str_color($state, $str, $weight = 'unset') { global $_M, $_YW; $color = ['red-600', 'green-600', 'cyan-600', 'blue-600', 'orange-600', 'purple-600']; return '' . $str . ''; } //标签形式的分割显示 public function tab_tokenfield($ver, $type = 0, $decollator = ',', $length = 0) { global $_M, $_YW; $class = ['tag-default', 'tag-primary', 'tag-warning']; $array = stringto_array($ver, $decollator); $i = 0; foreach ($array as $val) { $html .= '' . $val . ' '; $i++; if ($length > 0 && $length == $i) break; } return $html; } //广告位的合同编号 public function e_state($title) { global $_M, $_YW; $class = ['tag-danger', 'tag-primary']; $title = $title > 0 ? '已租赁' : '空置'; $type = $title > 0 ? 1 : 0; return '' . $title . ' '; } //参数的对应值获取 public function paralist($p_type = 0) { global $_M, $_YW; $this->tsql->table('para') ->where(is_array($p_type) ? $p_type : ['p_type' => $p_type]) ->order('p_order DESC'); return is_array($p_type) ? $this->tsql->one() : $this->tsql->all(); } //转化字符串形式 public function strchange($strarr = []) { global $_M, $_YW; foreach ($strarr as $val) { if ($val != null) $idstr[] = "'{$val}'"; } return arrayto_string($idstr, ','); } //广告位状态变更 public function type_onoff($field, $value, $id, $array = ['无效', '有效']) { global $_M, $_YW; $color = ['tag-danger', 'tag-success']; $url = $_M['url']['own_name'] . "c=table_off&a=doindex&submit_type=typeonoff&field={$field}&all_id={$id}&tname={$this->tname}&method=ajax"; return '' . $array[ $value ] . ''; } //处理多选的ID public function where_id(&$where) { global $_M, $_YW; $allid = array_filter(stringto_array($_M['form']['all_id'], ',')); if ($allid) { if ($where) $where .= " AND "; $idstr = self::strchange($allid); switch ($this->tname) { case 'elevators': $where .= " el.e_number IN({$idstr}) "; break; case 'villages': $where .= " vi.id IN({$idstr}) "; break; default: break; } } } // 对现有广告位进行裂变,已经不再需要 public function fission() { global $_M, $_YW; //获取所有广告位 $elevator = $this->tsql->table('elevator')->all(); //划定什么位置裂变成什么 1裂变出2 $e_aps = [ '1' => 4, '2' => 5, '3' => 6, ]; //拼装数据 foreach ($elevator as $val) { //计算广告位编号 $neweaps = $e_aps[ $val['e_aps'] ]; self::e_number($val['e_number'], $neweaps); $field = [ 'e_number' => $val['e_number'], 'e_vid' => $val['e_vid'], 'e_bno' => $val['e_bno'], 'e_aps' => $neweaps, 'e_size' => $val['e_size'], 'e_enable' => $val['e_enable'], 'e_label' => $val['e_label'], 'e_text' => $val['e_text'] ]; $this->tsql->table('elevator') ->field($field) ->add(); } } //对字符串处理 public function e_number(&$num, $neweaps, $type = false) { global $_M, $_YW; if ($type) $neweaps++; //新的编号 $enum = $num . $neweaps; //验证 $elevator = $this->tsql->table('elevator')->where(['e_number' => $enum])->one(); if ($elevator == false) { $num = $enum; } else { self::e_number($num, $neweaps, true); } } } ?>