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' => ['合作场所']
]
],
'config__doindex' => [
['配置参数'],
[
'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 .= "
{$sname}";
}
$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();
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'];
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);
}
}
}
?>