初始版本
This commit is contained in:
parent
bc4121cadf
commit
76a0de12dc
|
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"notes":[
|
||||
"skipfile 需要跳过的文件,不分目录",
|
||||
"skipdir 需要跳过的文件,需要路径正确",
|
||||
"skipdl 指定的目录仅下载dllist内所有,这里设置的目录 只能是相对应用版本的根目录也就是一级目录",
|
||||
"coredir 需要检出的核心目录,按照目录来跳过",
|
||||
"endirfile 需要加密的文件",
|
||||
"sourcefile 源文件需要删除,不提供给客户端下载的"
|
||||
],
|
||||
"skipfile": [],
|
||||
"skipdir": [],
|
||||
"skipdl": [],
|
||||
"coredir": [],
|
||||
"endirfile": [],
|
||||
"sourcefile": []
|
||||
}
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
# ---> NetBeans
|
||||
nbproject/private/
|
||||
build/
|
||||
nbbuild/
|
||||
dist/
|
||||
nbdist/
|
||||
.nb-gradle/
|
||||
/config/
|
||||
|
|
@ -0,0 +1,211 @@
|
|||
<?php
|
||||
|
||||
defined('IN_MET') or exit('No permission');
|
||||
|
||||
load::own_class('appadmin');
|
||||
|
||||
/*
|
||||
* 配置
|
||||
* 包含其他功能初始化
|
||||
*/
|
||||
class ajax extends appadmin {
|
||||
|
||||
public function __construct() {
|
||||
global $_M,$_YW;
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
//own.JS lang语言数组调用
|
||||
public function doajaxcl() {
|
||||
global $_M,$_YW;
|
||||
parent::loadp('cmp_a,cmp_ac');
|
||||
unset($_YW['aop']);
|
||||
unset($_YW['c']['ac_cache']);
|
||||
echo parent::jsoncallback($_YW);
|
||||
}
|
||||
|
||||
//城市选择
|
||||
public function docitys() {
|
||||
global $_M,$_YW;
|
||||
$this->cloud->citydata();
|
||||
}
|
||||
|
||||
//查询广告位编号是否重复
|
||||
public function doenumber() {
|
||||
global $_M,$_YW;
|
||||
$array = $this->tsql->table('elevator')->where(['e_number' => $_M['form']['e_number'] ])->one();
|
||||
$result['valid'] = $array == false?true:($array['id'] == $_M['form']['id']?true:false);
|
||||
//再判断一个排期内是否存在此编号
|
||||
echo parent::jsoncallback($result);
|
||||
}
|
||||
|
||||
//查询广告位编号是否重复
|
||||
public function dohnumber() {
|
||||
global $_M,$_YW;
|
||||
$array = $this->tsql->table('contract')->where(['h_number' => $_M['form']['h_number'] ])->one();
|
||||
$result['valid'] = $array == false?true:($array['id'] == $_M['form']['id']?true:false);
|
||||
echo parent::jsoncallback($result);
|
||||
}
|
||||
|
||||
//查询投放标题
|
||||
public function dolatitle() {
|
||||
global $_M,$_YW;
|
||||
$ids = stringto_array($_M['form']['ids'],',');
|
||||
if(count($ids)){
|
||||
$url = $_M['url']['own_name'].'c=table_on&a=doschedule&s_lid=';
|
||||
$strid = arrayto_string($ids,',');
|
||||
$launch = $this->tsql->table('launch')->where(" id IN({$strid}) ")->all('id');
|
||||
list($eid,$nid) = $ids;
|
||||
$eslid = $eid?'<a href="'.$url.$eid.'" title="查看排期">'.$launch[$eid]['l_title'].'</a>':'';
|
||||
$ntslid = $nid?'<a href="'.$url.$nid.'" title="查看排期">'.$launch[$nid]['l_title'].'</a>':'';
|
||||
}
|
||||
echo parent::jsoncallback(['eslid' => $eslid,'ntslid' => $ntslid ]);
|
||||
}
|
||||
|
||||
//广告位排期入库【重要】
|
||||
public function doapplan() {
|
||||
global $_M,$_YW;
|
||||
$form = $_M['form'];
|
||||
$ap_enumber = $_M['form']['ap_enumber'];
|
||||
$slid = $form['slid'];
|
||||
//检查投放订单是否存在
|
||||
$retarray = ['code' => false,'text' => '投放计划不存在!'];
|
||||
$launch = $this->tsql->table('launch')
|
||||
->where(['id' => $slid])
|
||||
->one();
|
||||
if($launch == false) {
|
||||
echo parent::jsoncallback($retarray);
|
||||
exit;
|
||||
}
|
||||
//检查广告位排期时间是否可用,是否合法
|
||||
$l_starttime = strtotime($form['l_starttime']);
|
||||
$l_endtime = strtotime($form['l_endtime']);
|
||||
$daystr = strtotime(date('Y-m-d',time()));
|
||||
if($l_starttime > $l_endtime && (empty($l_starttime) || empty($l_endtime)) ){
|
||||
$retarray['text'] = "【{$ap_enumber}】投放结束时间({$form['l_starttime']})不能小于开始时间({$form['l_endtime']})!";
|
||||
echo parent::jsoncallback($retarray);
|
||||
exit;
|
||||
}
|
||||
|
||||
//根据广告位编号查询对应广告位信息 e_enable
|
||||
$elevator = $this->tsql->table('elevator')
|
||||
->where(['e_number' => $ap_enumber])
|
||||
->one();
|
||||
$elstr = $error = false;
|
||||
// 判断广告位是否存在
|
||||
if($elevator != false){
|
||||
//进行排期处理
|
||||
$field = [
|
||||
's_lid' => $slid,
|
||||
's_enumber' => $ap_enumber,
|
||||
's_hnumber' => $form['l_hnumber'],
|
||||
's_starttime' => $form['l_starttime'],
|
||||
's_endtime' => $form['l_endtime'],
|
||||
];
|
||||
|
||||
// 不可通过唯一索引新增和更新数据,因为他会先触发新增的触发器
|
||||
// 先查询是否存在相应的广告位排期,存在则修改,相反为新增
|
||||
$enum = $this->tsql->table('schedule')
|
||||
->qfield('id')
|
||||
->where(['s_lid' => $slid, 's_enumber' => $ap_enumber ])
|
||||
->one();
|
||||
$query1 = $this->tsql->query();
|
||||
if($enum == false){
|
||||
//判断广告位是否停用
|
||||
if($elevator['e_enable']){
|
||||
//新增
|
||||
$field['id'] = 'UUID()';
|
||||
$this->tsql->table('schedule')
|
||||
->special('UUID()')
|
||||
->field($field)
|
||||
->add();
|
||||
$query = $this->tsql->query();
|
||||
}else{
|
||||
//表示广告位已停用
|
||||
$elstr = '已禁用';
|
||||
}
|
||||
}else{
|
||||
//修改
|
||||
$this->tsql->table('schedule')
|
||||
->field($field)
|
||||
->where(['id' => $enum['id']])
|
||||
->upd();
|
||||
$query = $this->tsql->query();
|
||||
}
|
||||
//获取sql执行结果,查看是否存在错误
|
||||
$elstr = $this->tsql->error();
|
||||
|
||||
//广告位地址
|
||||
$e_address = parent::e_address($elevator);
|
||||
}else{
|
||||
// 删除此广告位之前保存的排期记录
|
||||
$this->tsql->table('schedule')
|
||||
->where(['s_enumber' => $ap_enumber ])
|
||||
->del();
|
||||
// 记录不存在的广告位,保留到最后删除掉相关的选择广告位
|
||||
$session = load::sys_class('session','new');
|
||||
$senumber = $session->get('schedule_eid'.$slid);
|
||||
$senumber[] = $ap_enumber;
|
||||
$session->set('schedule_eid'.$slid,$senumber);
|
||||
$e_address = "({$ap_enumber})";
|
||||
$elstr = '广告位不存在或者已删除,';
|
||||
}
|
||||
|
||||
$array = $error || $elstr
|
||||
?['code' => false,'text' => "{$e_address},{$elstr}排期失败。",'eid' =>$ap_enumber,$query,$enum,$field,$query1,$senumber]
|
||||
:['code' => true,'text' => "{$e_address},排期成功。",'eid' =>$ap_enumber,$senumber];
|
||||
|
||||
echo parent::jsoncallback($array);
|
||||
exit;
|
||||
}
|
||||
|
||||
//选中排期的成功广告位保存
|
||||
public function dolenumber() {
|
||||
global $_M,$_YW;
|
||||
|
||||
$slid = $_M['form']['slid'];
|
||||
// 删除不存在的已选择广告位
|
||||
$session = load::sys_class('session','new');
|
||||
$schedule_eid = $session->get('schedule_eid'.$slid)?:[];
|
||||
$session->del('schedule_eid');
|
||||
$session->del('schedule_eid'.$slid);
|
||||
$launch = $this->tsql->table('launch')
|
||||
->where(['id' => $slid])
|
||||
->one();
|
||||
$l_selectenum = arrayto_string(array_unique(array_diff(stringto_array($launch['l_selectenum'],','),$schedule_eid)),',');
|
||||
// 排期保存
|
||||
//查询出所有的
|
||||
$schedule = $this->tsql->table('schedule')
|
||||
->where(['s_lid' => $slid])
|
||||
->all();
|
||||
$idarr = array_column($schedule, 's_enumber');
|
||||
$idstr = arrayto_string($idarr,',');
|
||||
$this->tsql->table('launch')
|
||||
->field(['l_selectenum' => $l_selectenum,'l_enumber' => $idstr ])
|
||||
->where(['id' => $slid])
|
||||
->upd();
|
||||
$error = $this->tsql->error();
|
||||
$num = count($idarr);
|
||||
$array = $error
|
||||
?['code' => false,'text' => "选中广告位保存失败,导致排期失败!",'idstr' => $idstr,$schedule_eid]
|
||||
:['code' => true,'text' => "选中的({$num})个广告位排期记录保存成功。",'idstr' => $idstr,$schedule_eid];
|
||||
echo parent::jsoncallback($array);
|
||||
}
|
||||
|
||||
//处理序列表,让他始终大于广告位的总个数
|
||||
public function dosequence() {
|
||||
global $_M,$_YW;
|
||||
$counta = $this->tsql->table('elevator')->count();
|
||||
$countb = $this->tsql->table('sequence')->count();
|
||||
$count = $counta + 10 - $countb;
|
||||
if($count > 0){
|
||||
for($i = 0; $i < $count; $i++){
|
||||
$this->tsql->table('sequence')->field(['seq' => null])->add();
|
||||
}
|
||||
}
|
||||
echo parent::jsoncallback([$counta,$countb,$count]);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
|
|
@ -0,0 +1,196 @@
|
|||
<?php
|
||||
defined('IN_MET') or exit ('No permission');
|
||||
|
||||
load::own_class('appadmin');
|
||||
load::own_class('../traits/tdata');
|
||||
load::own_class('../traits/tlist');
|
||||
load::own_class('../traits/tfield');
|
||||
|
||||
//表格
|
||||
class backups extends appadmin {
|
||||
|
||||
//备份字段
|
||||
private $bsign = true;
|
||||
|
||||
//列表
|
||||
private $list = [];
|
||||
//当前执行表名
|
||||
private $sqlk;
|
||||
//form数组
|
||||
private $form = [];
|
||||
|
||||
//info_on 快速URL
|
||||
private $own_name_info;
|
||||
|
||||
private $bacname = ''; //默认开头
|
||||
private $csvname = ''; //文件名
|
||||
|
||||
private $title = []; //表格标头
|
||||
private $keys = []; //表格标头对应的键值
|
||||
|
||||
private $bactable = ''; //数据库名
|
||||
private $bacconds = ''; //查询项以及排序
|
||||
private $bacfield = ''; //查询字段
|
||||
private $bacpages = 500; //每页查询条数
|
||||
|
||||
public function __construct() {
|
||||
global $_M,$_YW;
|
||||
parent::__construct();
|
||||
$this->form = $_M['form'];
|
||||
if($this->form['tname']){
|
||||
$this->tname = $this->form['tname'];
|
||||
$this->sqlk = $_YW['k'][$this->tname];
|
||||
}
|
||||
$this->own_name_info = $_M['url']['own_name'].'c=info_on&a=do';
|
||||
}
|
||||
|
||||
use tdata;
|
||||
use tfield;
|
||||
use tlist;
|
||||
|
||||
//表格数据
|
||||
public function doindex() {
|
||||
global $_M;
|
||||
self::csvtitle();
|
||||
$this->bacname = '广告位';
|
||||
self::csvname();
|
||||
|
||||
//输出头部
|
||||
header("Content-type:text/csv");
|
||||
header("Content-Disposition:attachment;filename=" . $this->csvname);
|
||||
header('Cache-Control:must-revalidate,post-check=0,pre-check=0');
|
||||
header('Expires:0');
|
||||
header('Pragma:public');
|
||||
//刷新buffer
|
||||
ob_flush();
|
||||
flush();
|
||||
$file = fopen('php://output', 'a');
|
||||
|
||||
//先将标题写入文件
|
||||
$title = self::arrzbm($this->title, 'utf-8', 'GBK');
|
||||
fputcsv($file, $title);
|
||||
ob_flush();
|
||||
flush();
|
||||
|
||||
# 初始化mysql需要的参数
|
||||
self::bactable();
|
||||
# 获取数据总条数
|
||||
$total = self::tabletotal();
|
||||
$pages = ceil($total/$this->bacpages);
|
||||
for ($i = 0; $i < $pages; $i++){
|
||||
$data = self::tabledata($i);
|
||||
$y = 0;
|
||||
$listnum = 1000;
|
||||
foreach ($data as $val) {
|
||||
//返回数据
|
||||
$y++;
|
||||
# 每隔$listnum行,刷新一下输出buffer,大数据量时处理
|
||||
# 刷新一下输出buffer,防止由于数据过多造成问题
|
||||
if ($listnum == $y) {
|
||||
ob_flush();
|
||||
# 刷新buffer
|
||||
flush();
|
||||
$y = 0;
|
||||
}
|
||||
$arr = self::arrzbm($val,'utf-8' , 'GBK');
|
||||
fputcsv($file, $arr);
|
||||
}
|
||||
}
|
||||
fclose($file);
|
||||
}
|
||||
|
||||
//判断语句组合
|
||||
protected function bactable() {
|
||||
global $_M;
|
||||
$this->bactable = self::td_sqlk();
|
||||
$this->bacfield = self::td_field();
|
||||
|
||||
$where = self::td_where();
|
||||
parent::where_id($where);
|
||||
|
||||
if($where){
|
||||
$where = trim($where);
|
||||
if (strtolower(substr($where, 0, 5)) != 'where' && $where) $this->bacconds = " WHERE {$where} ";
|
||||
}
|
||||
//排序
|
||||
if($this->bacconds){
|
||||
$order = self::td_order();
|
||||
$this->bacconds .= " ORDER BY {$order} ";
|
||||
}
|
||||
return $this;
|
||||
}
|
||||
|
||||
//计算总数
|
||||
protected function tabletotal() {
|
||||
global $_M;
|
||||
$countsql = " SELECT COUNT(*) FROM {$this->bactable} {$this->bacconds} ";
|
||||
if($this->multi_table) $countsql = " SELECT count(*) FROM (SELECT {$this->bacfield} FROM {$this->bactable} {$this->bacconds}) num ";
|
||||
$result = DB::query($countsql);
|
||||
$fetch_row = DB::fetch_row($result);
|
||||
return $fetch_row[0];
|
||||
}
|
||||
|
||||
//获取获取
|
||||
protected function tabledata($pages) {
|
||||
global $_M;
|
||||
$cursize = $pages* $this->bacpages;
|
||||
//SQL查询
|
||||
$result = DB::query("SELECT {$this->bacfield} FROM {$this->bactable} {$this->bacconds} LIMIT {$cursize},{$this->bacpages}");
|
||||
while($val = DB::fetch_array($result)){
|
||||
$data[] = $val;
|
||||
}
|
||||
|
||||
//处理数组结果
|
||||
foreach ($data as $val) {
|
||||
$lists = self::{$this->tname}($val);
|
||||
$baclist[] = array_intersect_key(self::striptags($lists),$this->title);
|
||||
}
|
||||
return $baclist;
|
||||
}
|
||||
|
||||
/* * *******************************************************************************
|
||||
*
|
||||
* 导入导出公用函数
|
||||
*
|
||||
* ****************************************************************************** */
|
||||
|
||||
|
||||
# 导入导出数组(保持和导入格式一样)
|
||||
protected function csvtitle() {
|
||||
global $_M, $_YW;
|
||||
$this->title = self::{'tf_'.$this->tname}();
|
||||
$this->keys = array_keys($this->title);
|
||||
return $this;
|
||||
}
|
||||
|
||||
//生成文件名
|
||||
public function csvname() {
|
||||
global $_M, $_YW;
|
||||
$date = date('Ymd', time());
|
||||
$filename = iconv("utf-8", "GBK", $this->bacname . $_M['lang'] . $date);
|
||||
$this->csvname = $filename . '.csv';
|
||||
return $this;
|
||||
}
|
||||
|
||||
//对数组的值进行转码并返回(一维数组)
|
||||
public function arrzbm($arr, $u, $g) {
|
||||
global $_M, $_YW;
|
||||
foreach ($arr as $k => $v) {
|
||||
$newarr[$k] = iconv($u, $g, $v);
|
||||
}
|
||||
return $newarr;
|
||||
}
|
||||
|
||||
//删除html元素
|
||||
public function striptags($array = []) {
|
||||
global $_M, $_YW;
|
||||
$ret = [];
|
||||
foreach ($array as $key => $str) {
|
||||
$ret[$key] = strip_tags($str);
|
||||
}
|
||||
return $ret;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
|
|
@ -0,0 +1,68 @@
|
|||
<?php
|
||||
|
||||
defined('IN_MET') or exit('No permission');
|
||||
|
||||
load::own_class('appadmin');
|
||||
|
||||
/*
|
||||
* 配置
|
||||
* 包含其他功能初始化
|
||||
*/
|
||||
class config extends appadmin {
|
||||
|
||||
public function __construct() {
|
||||
global $_M,$_YW;
|
||||
parent::__construct();
|
||||
$this->tname = $_M['form']['tname'];
|
||||
}
|
||||
|
||||
public function __destruct() {
|
||||
global $_M,$_YW;
|
||||
if($this->destruct){
|
||||
if(empty($this->appshow)) $this->appshow = 'app/'.$this->tname;
|
||||
require $this->show($this->appshow,$this->input);
|
||||
}
|
||||
}
|
||||
|
||||
//页初始化
|
||||
public function doindex(){
|
||||
global $_M,$_YW;
|
||||
parent::point('config','doconfig','config');
|
||||
parent::appurl('index');
|
||||
parent::appnav(['config__doindex','基础配置']);
|
||||
$this->input = $this->input + $_YW;
|
||||
}
|
||||
|
||||
//API配置信息保存
|
||||
public function doconfig(){
|
||||
global $_M,$_YW;
|
||||
$form = $_M['form'];
|
||||
$form['openid'] = arrayto_string($form['openids'],',');
|
||||
|
||||
self::configsql($form);
|
||||
$this->destruct = false;
|
||||
turnover($_M['url']['own_form'] . 'a=do'.$this->tname, '操作成功');
|
||||
}
|
||||
|
||||
//配置信息保存
|
||||
private function configsql($form = [],$lang = '') {
|
||||
global $_M;
|
||||
if(empty($lang)) $lang = $_M['lang'];
|
||||
//程序运行必备
|
||||
$para_a = ['tem_ida','tem_idb','tem_idc','openid'];
|
||||
$para_b = [];
|
||||
$para = array_merge($para_a,$para_b);
|
||||
$arrs = array_intersect_key($form, array_combine($para,$para)); //对比数组
|
||||
foreach ($arrs as $k => $v) {
|
||||
$array[] = [$k,$_M['form']['n'],$v,$lang];
|
||||
}
|
||||
$this->tsql->table('cloud_config',false)
|
||||
->qfield('name,m_name,value,lang')
|
||||
->unique('value=VALUES(value)')
|
||||
->adup($array);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
<?php
|
||||
defined('IN_MET') or exit('No permission');
|
||||
load::own_class('appadmin');
|
||||
//接口初始化
|
||||
class dzadsod extends appadmin {
|
||||
|
||||
public function __construct() {
|
||||
global $_M,$_YW;
|
||||
parent::__construct();
|
||||
parent::appnav();
|
||||
parent::point('dzadsod','dodzadsod');
|
||||
|
||||
}
|
||||
|
||||
public function __destruct() {
|
||||
global $_M,$_YW;
|
||||
if($this->destruct){
|
||||
if(empty($this->appshow)) $this->appshow = 'app/'.$this->tname;
|
||||
require $this->show($this->appshow,$this->input);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 综合设置
|
||||
*/
|
||||
public function dodzadsod() {
|
||||
global $_M;
|
||||
//统计总数
|
||||
$this->input['num'] = $this->cloud->summary();
|
||||
//到期数据
|
||||
parent::point('table_off','doindex','table');
|
||||
parent::appurl('noticeday');//endcontract
|
||||
$this->input['table'] = load::own_class('table_theme','new')->start($this->tname)->send_all(1);
|
||||
$this->appshow = 'app/dzadsod';
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,354 @@
|
|||
<?php
|
||||
defined('IN_MET') or exit ('No permission');
|
||||
|
||||
load::own_class('appadmin');
|
||||
|
||||
class info_off extends appadmin {
|
||||
|
||||
private $form;
|
||||
|
||||
// 文字提示
|
||||
private $tips = '';
|
||||
//跳转URL
|
||||
private $returl = '';
|
||||
//当前时间
|
||||
private $timedate;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
global $_M,$_YW;
|
||||
parent::__construct();
|
||||
$this->form = $_M['form'];
|
||||
$this->tname = $_M['form']['tname'];
|
||||
$this->timedate = date('Y-m-d H:i:s', time());
|
||||
}
|
||||
|
||||
public function __destruct()
|
||||
{
|
||||
global $_M,$_YW;
|
||||
if($this->destruct){
|
||||
turnover(empty($this->returl)?$_M['url']['own_name'] . 'c=table_on&a=do'.$this->tname:$this->returl, $this->tips);
|
||||
}
|
||||
}
|
||||
|
||||
public function doindex() {
|
||||
global $_M,$_YW;
|
||||
switch ($this->tname) {
|
||||
case 'village':
|
||||
self::village();
|
||||
case 'elevator':
|
||||
$e_bno = stringto_array($this->form['e_bno'],'#@met@#');
|
||||
$e_uno = stringto_array($this->form['e_uno'],'#@met@#');
|
||||
$e_eno = stringto_array($this->form['e_eno'],'#@met@#');
|
||||
$e_aps = stringto_array($this->form['e_aps'],'#@met@#');
|
||||
foreach ($e_bno as $bno) {
|
||||
foreach ($e_uno as $uno) {
|
||||
foreach ($e_eno as $eno) {
|
||||
foreach ($e_aps as $aps) {
|
||||
self::elevator($bno,$uno,$eno,$aps);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
self::{$this->tname}();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//小区
|
||||
private function village() {
|
||||
global $_M,$_YW;
|
||||
|
||||
$field = [
|
||||
'v_name' => $this->form['v_name'],
|
||||
'v_type' => $this->form['v_type'],
|
||||
'v_province' => $this->form['v_province'],
|
||||
'v_city' => $this->form['v_city'],
|
||||
'v_district' => $this->form['v_district'],
|
||||
'v_address' => $this->form['v_address'],
|
||||
'v_wid' => arrayto_string($this->form['v_wid'],','),
|
||||
'v_price' => $this->form['v_price'],
|
||||
'v_psize' => $this->form['v_psize'],
|
||||
'v_text' => $this->form['v_text']
|
||||
];
|
||||
|
||||
if($this->form['id']){
|
||||
$field['v_updatetime'] = $this->timedate;
|
||||
$this->tsql->table($this->tname)
|
||||
->field($field)
|
||||
->where(['id'=>$this->form['id']])
|
||||
->upd();
|
||||
$this->tips = '更新成功';
|
||||
}else{
|
||||
$field['v_addtime'] = $this->timedate;
|
||||
$this->tsql->table($this->tname)
|
||||
->field($field)
|
||||
->add();
|
||||
$this->tips = '新增成功';
|
||||
}
|
||||
// 检测sql是否有错误
|
||||
$error = $this->tsql->error();
|
||||
if($error) $this->tips = '操作失败:'.$error;
|
||||
}
|
||||
|
||||
//企业
|
||||
private function customer() {
|
||||
global $_M,$_YW;
|
||||
|
||||
$field = [
|
||||
'c_allname' => $this->form['c_allname'],
|
||||
'c_name' => $this->form['c_name'],
|
||||
'c_province' => $this->form['c_province'],
|
||||
'c_city' => $this->form['c_city'],
|
||||
'c_district' => $this->form['c_district'],
|
||||
'c_address' => $this->form['c_address'],
|
||||
'c_wid' => arrayto_string($this->form['c_wid'],','),
|
||||
'c_text' => $this->form['c_text']
|
||||
];
|
||||
|
||||
if($this->form['id']){
|
||||
$field['c_updatetime'] = $this->timedate;
|
||||
$this->tsql->table($this->tname)
|
||||
->field($field)
|
||||
->where(['id'=>$this->form['id']])
|
||||
->upd();
|
||||
$this->tips = '更新成功';
|
||||
}else{
|
||||
$field['c_addtime'] = $this->timedate;
|
||||
$this->tsql->table($this->tname)
|
||||
->field($field)
|
||||
->add();
|
||||
$this->tips = '新增成功';
|
||||
}
|
||||
// 检测sql是否有错误
|
||||
$error = $this->tsql->error();
|
||||
if($error) $this->tips = '操作失败:'.$error;
|
||||
}
|
||||
|
||||
//企业联系人
|
||||
private function workers() {
|
||||
global $_M,$_YW;
|
||||
|
||||
$field = [
|
||||
'w_jid' => $this->form['w_jid'],
|
||||
'w_name' => $this->form['w_name'],
|
||||
'w_tel' => $this->form['w_tel'],
|
||||
'w_text' => $this->form['w_text']
|
||||
];
|
||||
|
||||
if($this->form['id']){
|
||||
$field['w_updatetime'] = $this->timedate;
|
||||
$this->tsql->table($this->tname)
|
||||
->field($field)
|
||||
->where(['id'=>$this->form['id']])
|
||||
->upd();
|
||||
$this->tips = '更新成功';
|
||||
}else{
|
||||
$field['w_addtime'] = $this->timedate;
|
||||
$this->tsql->table($this->tname)
|
||||
->field($field)
|
||||
->add();
|
||||
$this->tips = '新增成功';
|
||||
}
|
||||
// 检测sql是否有错误
|
||||
$error = $this->tsql->error();
|
||||
if($error) $this->tips = '操作失败:'.$error;
|
||||
}
|
||||
|
||||
//广告位
|
||||
private function elevator($e_bno,$e_uno,$e_eno,$e_aps) {
|
||||
global $_M,$_YW;
|
||||
$e_number = $this->form['e_number'];
|
||||
if(!$this->form['id']) parent::e_number($e_number,$e_bno.$e_uno.$e_eno.$e_aps);
|
||||
$field = [
|
||||
'e_number' => $e_number,
|
||||
'e_vid' => $this->form['e_vid'],
|
||||
'e_bno' => $e_bno,
|
||||
'e_uno' => $e_uno,
|
||||
'e_eno' => $e_eno,
|
||||
'e_aps' => $e_aps,
|
||||
'e_size' => $this->form['e_size'],
|
||||
'e_enable' => $this->form['e_enable'],
|
||||
'e_label' => $this->form['e_label'],
|
||||
'e_text' => $this->form['e_text']
|
||||
];
|
||||
|
||||
if($this->form['id']){
|
||||
$this->tsql->table($this->tname)
|
||||
->field($field)
|
||||
->where(['id'=>$this->form['id']])
|
||||
->upd();
|
||||
$this->tips = '更新成功';
|
||||
}else{
|
||||
$this->tsql->table($this->tname)
|
||||
->field($field)
|
||||
->add();
|
||||
$this->tips = '新增成功';
|
||||
}
|
||||
// 检测sql是否有错误
|
||||
$error = $this->tsql->error();
|
||||
|
||||
//判断为修改编号则需要清理掉旧的编号
|
||||
$olde_number = $this->form['olde_number'];
|
||||
$enumber = $this->form['e_number'];
|
||||
if(!$error && $this->form['id'] && $olde_number != $enumber ){
|
||||
$this->tsql->table('schedule')->where(['s_enumber' => $olde_number ])->del();
|
||||
//清理掉缓存排期表 met_dzadsod_
|
||||
// olde_number
|
||||
//替换掉旧的投放表内的编号 met_dzadsod_
|
||||
// ['l_enumber' => '','l_selectenum']
|
||||
$launch = $this->tsql->table('launch')->where(" find_in_set( '{$olde_number}', l_enumber ) OR find_in_set( '{$olde_number}', l_selectenum ) ")->all();
|
||||
foreach ($launch as $val) {
|
||||
$lenumber = arrayto_string(array_unique(stringto_array($val['l_enumber'],',')),',');
|
||||
$l_enumber = preg_replace(["/^{$olde_number}$/","/^{$olde_number},/","/,{$olde_number},/","/,{$olde_number}$/"],[$enumber,"{$enumber},",",{$enumber},",",{$enumber}"],$lenumber);
|
||||
$lselectenum = arrayto_string(array_unique(stringto_array($val['l_selectenum'],',')),',');
|
||||
$l_selectenum = preg_replace(["/^{$olde_number}$/","/^{$olde_number},/","/,{$olde_number},/","/,{$olde_number}$/"],[$enumber,"{$enumber},",",{$enumber},",",{$enumber}"],$lselectenum);
|
||||
//修改
|
||||
$this->tsql->table('launch')->field(['l_enumber' => $l_enumber, 'l_selectenum' => $l_selectenum ])->where(['id' => $val['id'] ])->upd();
|
||||
}
|
||||
}
|
||||
|
||||
if($error) $this->tips = '操作失败:'.$error;
|
||||
}
|
||||
|
||||
//合同录入
|
||||
private function contract() {
|
||||
global $_M,$_YW;
|
||||
//报错
|
||||
if(strtotime($this->form['h_starttime']) > strtotime($this->form['h_endtime'])){
|
||||
$this->destruct = false;
|
||||
parent::scriptgo("投放结束时间({$this->form['h_starttime']})不能小于开始时间({$this->form['h_endtime']})!");
|
||||
}
|
||||
|
||||
$field = [
|
||||
'h_number' => $this->form['h_number'],
|
||||
'h_signtime' => $this->form['h_signtime'],
|
||||
'h_cid' => $this->form['h_cid'],
|
||||
'h_wid' => arrayto_string($this->form['h_wid'],','),
|
||||
'h_tprice' => $this->form['h_tprice'],
|
||||
'h_starttime' => $this->form['h_starttime'],
|
||||
'h_endtime' => $this->form['h_endtime'],
|
||||
'h_noticeday' => arrayto_string(array_unique(stringto_array($this->form['h_noticeday'],',')),','), //对数组进行去重处理
|
||||
'h_text' => $this->form['h_text']
|
||||
];
|
||||
|
||||
if($this->form['id']){
|
||||
$field['h_updatetime'] = $this->timedate;
|
||||
$this->tsql->table($this->tname)
|
||||
->field($field)
|
||||
->where(['id'=>$this->form['id']])
|
||||
->upd();
|
||||
$this->tips = '更新成功';
|
||||
}else{
|
||||
$field['h_addtime'] = $this->timedate;
|
||||
$this->tsql->table($this->tname)
|
||||
->field($field)
|
||||
->add();
|
||||
$this->tips = '新增成功';
|
||||
}
|
||||
// 检测sql是否有错误
|
||||
$error = $this->tsql->error();
|
||||
if($error) $this->tips = '操作失败:'.$error;
|
||||
}
|
||||
|
||||
//投放计划保存
|
||||
private function launch() {
|
||||
global $_M,$_YW;
|
||||
$this->destruct = false;
|
||||
|
||||
// 每次保存都要计算时间是否合法
|
||||
if(strtotime($this->form['l_starttime']) > strtotime($this->form['l_endtime'])){
|
||||
echo parent::jsoncallback([
|
||||
'slid' => $this->form['slid'],
|
||||
'code' => false,
|
||||
'text' => "投放结束时间({$this->form['l_starttime']})不能小于开始时间({$this->form['l_endtime']})!"]);
|
||||
exit;
|
||||
}
|
||||
//不让他包含广告位选中字符
|
||||
//l_enable 状态字符也暂时不采用
|
||||
$field = [
|
||||
'l_hnumber' => $this->form['l_hnumber'],
|
||||
'l_title' => $this->form['l_title'],
|
||||
'l_schedule' => $this->form['l_schedule'],
|
||||
'l_starttime' => $this->form['l_starttime'],
|
||||
'l_endtime' => $this->form['l_endtime'],
|
||||
'l_selectenum' => $this->form['l_selectenum'],
|
||||
'l_type' => $this->form['l_type'],
|
||||
'l_text' => $this->form['l_text']
|
||||
];
|
||||
|
||||
if($this->form['slid']){
|
||||
$field['l_updatetime'] = $this->timedate;
|
||||
$this->tsql->table($this->tname)
|
||||
->field($field)
|
||||
->where(['id' => $this->form['slid']])
|
||||
->upd();
|
||||
// $query = $this->tsql->query();
|
||||
$slid = $this->form['slid'];
|
||||
}else{
|
||||
$field['l_addtime'] = $this->timedate;
|
||||
$this->tsql->table($this->tname)
|
||||
->field($field)
|
||||
->add();
|
||||
|
||||
// $query = $this->tsql->query();
|
||||
$slid = $this->tsql->id();
|
||||
}
|
||||
//查看是否执行错误
|
||||
$error = $this->tsql->error();
|
||||
|
||||
//清理掉非选中的广告位排期,实际执行的是广告位选中后的删除操作,其他地方执行的只有新增和修改
|
||||
$schedule = $this->tsql->table('schedule')
|
||||
->where(['s_lid' => $slid])
|
||||
->all();
|
||||
$enumber = stringto_array($this->form['l_selectenum'],',');
|
||||
foreach ($schedule as $val) {
|
||||
if(!in_array($val['s_enumber'], $enumber)){
|
||||
$this->tsql->table('schedule')
|
||||
->where(['id' => $val['id'] ])
|
||||
->del();
|
||||
}
|
||||
}
|
||||
|
||||
//返回结果
|
||||
$array = $error || $slid == 0
|
||||
?['slid' => $slid,'code' => false,'text' => "投放信息处理失败,广告位没有执行排期!错误提示({$error})",$this->form]
|
||||
:['slid' => $slid,'code' => true,'text' => '投放信息处理成功。'];
|
||||
echo parent::jsoncallback($array);
|
||||
exit;
|
||||
}
|
||||
|
||||
private function keylist() {
|
||||
global $_M,$_YW;
|
||||
$field = [
|
||||
'k_passkey' => md5($this->form['k_passkey']),
|
||||
'k_basekey' => base64_encode($this->form['k_passkey']),
|
||||
'k_wid' => $this->form['k_wid'],
|
||||
'k_state' => $this->form['k_state'],
|
||||
'k_text' => $this->form['k_text']
|
||||
];
|
||||
|
||||
if($this->form['id']){
|
||||
$field['k_updatetime'] = $this->timedate;
|
||||
$this->tsql->table($this->tname)
|
||||
->field($field)
|
||||
->where(['id'=>$this->form['id']])
|
||||
->upd();
|
||||
$this->tips = '更新成功';
|
||||
}else{
|
||||
$field['k_addtime'] = $this->timedate;
|
||||
$this->tsql->table($this->tname)
|
||||
->field($field)
|
||||
->add();
|
||||
$this->tips = '新增成功';
|
||||
}
|
||||
// 检测sql是否有错误
|
||||
$error = $this->tsql->error();
|
||||
if($error) $this->tips = '操作失败:'.$error;
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
|
|
@ -0,0 +1,259 @@
|
|||
<?php
|
||||
defined('IN_MET') or exit ('No permission');
|
||||
|
||||
load::own_class('appadmin');
|
||||
|
||||
class info_on extends appadmin
|
||||
{
|
||||
|
||||
//设置参数
|
||||
protected $addparaurl = '';
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
global $_M,$_YW;
|
||||
parent::__construct();
|
||||
parent::point('info_off','doindex');
|
||||
}
|
||||
|
||||
public function __destruct()
|
||||
{
|
||||
global $_M,$_YW;
|
||||
if($this->destruct){
|
||||
if(empty($this->appshow)) $this->appshow = 'app/'.$this->tname;
|
||||
require $this->show($this->appshow,$this->input);
|
||||
}
|
||||
}
|
||||
|
||||
//小区
|
||||
public function dovillage()
|
||||
{
|
||||
global $_M,$_YW;
|
||||
parent::appnav(['table_on__dovillage','小区资料']);
|
||||
parent::appurl(parent::tname(),['id'=>$_M['form']['id']]);
|
||||
if($_M['form']['id']){
|
||||
$this->input['data'] = $this->tsql->table($this->tname)
|
||||
->where(['id'=>$_M['form']['id']])
|
||||
->one();
|
||||
}else{
|
||||
//默认值
|
||||
$this->input['data']['v_province'] = '山东省';
|
||||
$this->input['data']['v_city'] = '泰安市';
|
||||
$this->input['data']['v_district'] = '泰山区';
|
||||
}
|
||||
//小区分类
|
||||
$para = $this->tsql->table('para')->where(['p_type' => 6])->all();
|
||||
parent::para_radio($para,'v_type',$this->input['data']['v_type'],$this->input['para']['v_type_radio'])
|
||||
->setparahtml(6,$this->input['para']['v_type_radio']);
|
||||
|
||||
//城市json
|
||||
$this->input['url']['city'] = $this->cloud->city_url();
|
||||
}
|
||||
|
||||
//企业
|
||||
public function docustomer()
|
||||
{
|
||||
global $_M,$_YW;
|
||||
parent::appnav(['table_on__docustomer','企业资料']);
|
||||
parent::appurl(parent::tname(),['id'=>$_M['form']['id']]);
|
||||
if($_M['form']['id']){
|
||||
$this->input['data'] = $this->tsql->table($this->tname)
|
||||
->where(['id'=>$_M['form']['id']])
|
||||
->one();
|
||||
}else{
|
||||
//默认值
|
||||
$this->input['data']['c_province'] = '山东省';
|
||||
$this->input['data']['c_city'] = '泰安市';
|
||||
$this->input['data']['c_district'] = '泰山区';
|
||||
}
|
||||
|
||||
//城市json
|
||||
$this->input['url']['city'] = $this->cloud->city_url();
|
||||
}
|
||||
|
||||
//企业
|
||||
public function doworkers()
|
||||
{
|
||||
global $_M,$_YW;
|
||||
parent::appnav(['table_on__doworkers','企业资料']);
|
||||
parent::appurl(parent::tname(),['id'=>$_M['form']['id']]);
|
||||
if($_M['form']['id']){
|
||||
$this->input['data'] = $this->tsql->table($this->tname)
|
||||
->where(['id'=>$_M['form']['id']])
|
||||
->one();
|
||||
}
|
||||
|
||||
//职务选择
|
||||
$para = $this->tsql->table('para')->where(['p_type' => 1])->all();
|
||||
parent::para_radio($para,'w_jid',$this->input['data']['w_jid'],$this->input['para']['radio'])
|
||||
->setparahtml(1,$this->input['para']['radio']);
|
||||
}
|
||||
|
||||
//广告位
|
||||
public function doelevator()
|
||||
{
|
||||
global $_M,$_YW;
|
||||
parent::appnav(['table_on__doelevator','广告位']);
|
||||
parent::appurl(parent::tname(),['id'=>$_M['form']['id']]);
|
||||
if($_M['form']['id']){
|
||||
$this->input['data'] = $this->tsql->table($this->tname)
|
||||
->where(['id'=>$_M['form']['id']])
|
||||
->one();
|
||||
$this->input['data']['e_number_readonly'] = 'readonly';
|
||||
|
||||
// 二次编辑时采用单选
|
||||
//楼号
|
||||
$para = $this->tsql->table('para')->where(['p_type' => 3])->all();
|
||||
parent::para_radio($para,'e_bno',$this->input['data']['e_bno'],$this->input['para']['e_bno_radio'])
|
||||
->setparahtml(3,$this->input['para']['e_bno_radio']);
|
||||
//单元号
|
||||
$para = $this->tsql->table('para')->where(['p_type' => 4])->all();
|
||||
parent::para_radio($para,'e_uno',$this->input['data']['e_uno'],$this->input['para']['e_uno_radio'])
|
||||
->setparahtml(4,$this->input['para']['e_uno_radio']);
|
||||
//电梯号
|
||||
$para = $this->tsql->table('para')->where(['p_type' => 5])->all();
|
||||
parent::para_radio($para,'e_eno',$this->input['data']['e_eno'],$this->input['para']['e_eno_radio'])
|
||||
->setparahtml(5,$this->input['para']['e_eno_radio']);
|
||||
//广告位置
|
||||
$para = $this->tsql->table('para')->where(['p_type' => 0])->all();
|
||||
parent::para_radio($para,'e_aps',$this->input['data']['e_aps'],$this->input['para']['e_aps_radio'])
|
||||
->setparahtml(0,$this->input['para']['e_aps_radio']);
|
||||
|
||||
}else{
|
||||
//默认值
|
||||
$this->input['data']['e_vid'] = $_M['form']['e_vid'];
|
||||
$this->input['data']['e_enable'] = 1;
|
||||
|
||||
// 新增编辑时采用多选
|
||||
//楼号
|
||||
$para = $this->tsql->table('para')->where(['p_type' => 3])->all();
|
||||
parent::para_checkbox($para,'e_bno',$this->input['data']['e_bno'],$this->input['para']['e_bno_radio'])
|
||||
->setparahtml(3,$this->input['para']['e_bno_radio']);
|
||||
//单元号
|
||||
$para = $this->tsql->table('para')->where(['p_type' => 4])->all();
|
||||
parent::para_checkbox($para,'e_uno',$this->input['data']['e_uno'],$this->input['para']['e_uno_radio'])
|
||||
->setparahtml(4,$this->input['para']['e_uno_radio']);
|
||||
//电梯号
|
||||
$para = $this->tsql->table('para')->where(['p_type' => 5])->all();
|
||||
parent::para_checkbox($para,'e_eno',$this->input['data']['e_eno'],$this->input['para']['e_eno_radio'])
|
||||
->setparahtml(5,$this->input['para']['e_eno_radio']);
|
||||
//广告位置
|
||||
$para = $this->tsql->table('para')->where(['p_type' => 0])->all();
|
||||
parent::para_checkbox($para,'e_aps',$this->input['data']['e_aps'],$this->input['para']['e_aps_radio'])
|
||||
->setparahtml(0,$this->input['para']['e_aps_radio']);
|
||||
}
|
||||
|
||||
//小区名称URL
|
||||
$this->input['remote_url'] = $_M['url']['own_name'].'c=ajax&a=doenumber&id='.$_M['form']['id'];
|
||||
|
||||
}
|
||||
|
||||
//录入合同
|
||||
public function docontract()
|
||||
{
|
||||
global $_M,$_YW;
|
||||
parent::appnav(['table_on__docontract','合同详情']);
|
||||
parent::appurl(parent::tname(),['id'=>$_M['form']['id']]);
|
||||
if($_M['form']['id']){
|
||||
$this->input['data'] = $this->tsql->table($this->tname)
|
||||
->where(['id'=>$_M['form']['id']])
|
||||
->one();
|
||||
$this->input['data']['h_number_readonly'] = 'readonly';
|
||||
}else{
|
||||
//默认值
|
||||
$this->input['data']['e_vid'] = $_M['form']['e_vid'];
|
||||
$this->input['data']['h_noticeday'] = 7;
|
||||
}
|
||||
|
||||
$this->input['remote_url'] = $_M['url']['own_name'].'c=ajax&a=dohnumber&id='.$_M['form']['id'];
|
||||
}
|
||||
|
||||
//广告投放
|
||||
public function dolaunch()
|
||||
{
|
||||
global $_M,$_YW;
|
||||
$slid = $_M['form']['slid'];
|
||||
parent::appnav(['table_on__dolaunch','广告投放']);
|
||||
parent::appurl(parent::tname(),['slid'=>$slid]);
|
||||
|
||||
if($slid){
|
||||
$this->input['data'] = $this->tsql->table($this->tname)
|
||||
->where(['id'=>$slid])
|
||||
->one();
|
||||
$contract = $this->tsql->table('contract')
|
||||
->where(['h_number' => $this->input['data']['l_hnumber']])
|
||||
->one();
|
||||
}else{
|
||||
//获取合同的值
|
||||
$contract = $this->tsql->table('contract')
|
||||
->where(['id' => $_M['form']['cid']])
|
||||
->one();
|
||||
//默认值
|
||||
$this->input['data']['l_hnumber'] = $contract['h_number'];
|
||||
$this->input['data']['l_starttime'] = $contract['h_starttime'];
|
||||
$this->input['data']['l_endtime'] = $contract['h_endtime'];
|
||||
}
|
||||
|
||||
//合同订单的时间
|
||||
$this->input['data']['h_starttime'] = $contract['h_starttime'];
|
||||
$this->input['data']['h_endtime'] = $contract['h_endtime'];
|
||||
//获取公司名称
|
||||
$this->input['data']['h_cid'] = parent::customerlist($contract['h_cid']);
|
||||
|
||||
//合同状态
|
||||
$para = parent::paralist(2);
|
||||
parent::para_radio($para,'l_schedule',$this->input['data']['l_schedule'],$this->input['para']['l_schedule_radio'])
|
||||
->setparahtml(2,$this->input['para']['l_schedule_radio']);
|
||||
|
||||
//广告分类
|
||||
$para = parent::paralist(7);
|
||||
parent::para_radio($para,'l_type',$this->input['data']['l_type'],$this->input['para']['l_type_radio'])
|
||||
->setparahtml(7,$this->input['para']['l_type_radio']);
|
||||
|
||||
//表格数据
|
||||
// ap_plan
|
||||
$this->input['table'] = load::own_class('table_theme','new')->start('applan')->send_all();
|
||||
$this->input['table']['ajaxurl'] = $_M['url']['own_name']."c=table_ajax&a=doindex&tname=applan&slid=".$slid;
|
||||
|
||||
}
|
||||
|
||||
//新增巡查人员
|
||||
public function dokeylist()
|
||||
{
|
||||
global $_M,$_YW;
|
||||
parent::appnav(['table_on__dokeylist','巡查人员']);
|
||||
parent::appurl(parent::tname(),['id'=>$_M['form']['id']]);
|
||||
if($_M['form']['id']){
|
||||
$this->input['data'] = $this->tsql->table($this->tname)
|
||||
->where(['id'=>$_M['form']['id']])
|
||||
->one();
|
||||
|
||||
$this->input['data']['k_passkey'] = base64_decode($this->input['data']['k_basekey']);
|
||||
}else{
|
||||
$this->input['data']['k_state'] = 1;
|
||||
}
|
||||
}
|
||||
|
||||
// 调整广告位投放计划
|
||||
public function douplaunch()
|
||||
{
|
||||
global $_M,$_YW;
|
||||
parent::appnav(['info_on__douplaunch','调整投放计划']);
|
||||
// parent::appnav(['info_on__doelevators','调整投放计划']);
|
||||
parent::appurl(parent::tname(),['e_number'=>$_M['form']['e_number']]);
|
||||
// 先获取广告位编号,获取对应的位置信息
|
||||
// 再获取 前 中 后排期
|
||||
// 过期的只要最后一期,当前排期的,按照当天计算,然后罗列出预排的排期
|
||||
// 选择目标排期计划
|
||||
|
||||
// 先查询是否满足对应条件
|
||||
// 满足入库前先删除原有计划,再新增到目标计划(要清除排期缓存表,以及投放计划表,防止冲突)
|
||||
// 不满足条件,则返回对应提示,是否要强制修改,若是强制修改,可给予修改建议,供管理选择
|
||||
|
||||
// 广告位编号,采用下拉选择
|
||||
// 订单,采用下拉选择
|
||||
// 投放计划采用下拉选择
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
|
|
@ -0,0 +1,106 @@
|
|||
<?php
|
||||
defined('IN_MET') or exit ('No permission');
|
||||
//2.0
|
||||
class install
|
||||
{
|
||||
private $appno;
|
||||
private $appver;
|
||||
private $m_name;
|
||||
private $m_class;
|
||||
private $m_action;
|
||||
private $appname;
|
||||
private $info;
|
||||
private $depend;
|
||||
private $target;
|
||||
private $display;
|
||||
private $mlangok;
|
||||
|
||||
public function __construct() {
|
||||
global $_M;
|
||||
do{
|
||||
$this->appno = mt_rand(2001,9999); //应用编号
|
||||
} while (self::sqlone('applist') != false);
|
||||
|
||||
$this->appver = '1.0'; //应用版本号
|
||||
$this->m_name = 'dzadsod';
|
||||
$this->m_class = 'index';
|
||||
$this->m_action = 'doindex';
|
||||
$this->appname = '道闸广告位管理'; //应用名称
|
||||
$this->info = '场所门口道闸广告位运营管理'; //应用描述
|
||||
$this->depend = ''; //应用依赖
|
||||
$this->target = 1; //是否支新窗口打开
|
||||
$this->display = 1; //是否显示应用图标
|
||||
$this->mlangok = 1; //是否支持多语言
|
||||
}
|
||||
|
||||
//安装主方法
|
||||
public function dosql() {
|
||||
global $_M;
|
||||
$stall = self::sqlone('applist'," m_name='{$this->m_name}' ");
|
||||
if(!$stall){
|
||||
//系统表
|
||||
self::appsql();
|
||||
}else{
|
||||
|
||||
}
|
||||
return 'complete';
|
||||
}
|
||||
|
||||
//执行APP相关的表数据插入
|
||||
private function appsql() {
|
||||
global $_M;
|
||||
$time = time();
|
||||
//注册应用
|
||||
$field = "
|
||||
`no`='{$this->appno}',
|
||||
`ver` = {$this->appver},
|
||||
`m_name` = '{$this->m_name}',
|
||||
`m_class`='{$this->m_class}',
|
||||
`m_action`='{$this->m_action}',
|
||||
`appname`='{$this->appname}',
|
||||
`info`='{$this->info}',
|
||||
`addtime`='{$time}',
|
||||
`updatetime`='{$time}',
|
||||
`target`='{$this->target}',
|
||||
`display`='{$this->display}',
|
||||
`depend`='{$this->depend}',
|
||||
`mlangok`='{$this->mlangok}' ";
|
||||
self::addsql('applist',$field);
|
||||
|
||||
/**
|
||||
* 1、增加新表
|
||||
* name 配置名称
|
||||
* id 添加信息自动增加,
|
||||
* value 配置名称值
|
||||
* lang 语言[后台]
|
||||
**/
|
||||
$field = " `id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`name` varchar(150) NOT NULL,
|
||||
`m_name` varchar(100) NOT NULL,
|
||||
`value` text,
|
||||
`lang` varchar(50) NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `name_lang` (`name`,`m_name`,`lang`)";
|
||||
DB::query("CREATE TABLE `".$_M['config']['tablepre']."cloud_config` ( {$field} ) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8");
|
||||
add_table('cloud_config');
|
||||
}
|
||||
|
||||
//公共查询方法
|
||||
private function sqlone($tname,$where = '') {
|
||||
global $_M;
|
||||
$table = $_M['table'][$tname];
|
||||
if(!$where){
|
||||
$where = "no='{$this->appno}'";
|
||||
}
|
||||
return DB::get_one("select * from {$table} where {$where}");
|
||||
}
|
||||
|
||||
//公共写入方法
|
||||
private function addsql($tname,$field = '') {
|
||||
global $_M;
|
||||
$table = $_M['table'][$tname];
|
||||
DB::query("INSERT INTO {$table} SET {$field}");
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
|
|
@ -0,0 +1,289 @@
|
|||
<?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]);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
|
|
@ -0,0 +1,126 @@
|
|||
<?php
|
||||
defined('IN_MET') or exit ('No permission');
|
||||
|
||||
load::own_class('appadmin');
|
||||
load::own_class('../traits/tdata');
|
||||
load::own_class('../traits/tlist');
|
||||
load::own_class('../traits/tfield');
|
||||
|
||||
//表格
|
||||
class table_ajax extends appadmin {
|
||||
|
||||
//非备份,正常字段即可
|
||||
private $bsign = false;
|
||||
|
||||
//列表
|
||||
private $list = [];
|
||||
//当前执行表名
|
||||
private $sqlk;
|
||||
//form数组
|
||||
private $form = [];
|
||||
|
||||
//info_on 快速URL
|
||||
private $own_name_info;
|
||||
private $own_name_table;
|
||||
|
||||
public function __construct() {
|
||||
global $_M,$_YW;
|
||||
parent::__construct();
|
||||
$this->form = $_M['form'];
|
||||
if($this->form['tname']){
|
||||
$this->tname = $this->form['tname'];
|
||||
$this->sqlk = $_YW['k'][$this->tname];
|
||||
}
|
||||
$this->own_name_info = $_M['url']['own_name'].'c=info_on&a=do';
|
||||
$this->own_name_table = $_M['url']['own_name'].'c=table_on&a=do';
|
||||
}
|
||||
|
||||
//表格数据
|
||||
public function doindex() {
|
||||
global $_M;
|
||||
//加载表格数据获取类
|
||||
$table = load::own_class('tabledata', 'new');
|
||||
|
||||
$field = self::td_field();
|
||||
$sqlk = self::td_sqlk();
|
||||
$where = self::td_where();
|
||||
$order = self::td_order();
|
||||
/*查询表*/
|
||||
if($where){
|
||||
$conds .= " WHERE {$where} ";
|
||||
}
|
||||
if($order){
|
||||
$conds .= " ORDER BY {$order} ";
|
||||
}
|
||||
//整理查询条件
|
||||
$query = "SELECT {$field} FROM {$sqlk} {$conds} ";
|
||||
|
||||
//获取数据
|
||||
$data = $table->getdata($sqlk, $field, $where, $order,$query,$this->multi_table);
|
||||
//数据整理
|
||||
$array = self::sqlarr($data);
|
||||
//返回数据
|
||||
$table->rdata($array);
|
||||
}
|
||||
|
||||
use tdata;
|
||||
|
||||
/*
|
||||
* 【列出】
|
||||
* 返回数据数组
|
||||
*/
|
||||
private function sqlarr($data = []) {
|
||||
global $_M;
|
||||
// if(in_array($this->tname,$this->k_name)){
|
||||
foreach ($data as $val) {
|
||||
self::output($val);
|
||||
$array[] = $this->list;
|
||||
}
|
||||
return $array;
|
||||
// }else{
|
||||
// return false;
|
||||
// }
|
||||
}
|
||||
|
||||
/*
|
||||
* 【新行】
|
||||
* 新增行分发
|
||||
*/
|
||||
public function do_table_add_list(){
|
||||
global $_M;
|
||||
$val = ['id' => 'new-'.$this->form['new_id'], 'p_type' => $this->form['p_type']];
|
||||
if(in_array($this->tname,$this->k_name)){
|
||||
self::output($val,'checked=""');
|
||||
}
|
||||
self::addlist($val);
|
||||
}
|
||||
|
||||
/*
|
||||
* 【新行】
|
||||
* 生成文件新增行
|
||||
*/
|
||||
private function addlist($val) {
|
||||
global $_M;
|
||||
$metinfo = '';
|
||||
foreach ($this->list as $v){
|
||||
$metinfo .= '<td class=" text-xs-center">'.$v.'</td>';
|
||||
}
|
||||
echo "<tr>{$metinfo}</tr>";
|
||||
}
|
||||
|
||||
use tfield;
|
||||
use tlist;
|
||||
|
||||
//公用的输出
|
||||
protected function output($val,$checked = '') {
|
||||
global $_M,$_YW;
|
||||
$array = self::{$this->tname}($val,$checked);
|
||||
$this->list = array();
|
||||
foreach ($array as $value) {
|
||||
$this->list[] = $value;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
|
|
@ -0,0 +1,286 @@
|
|||
<?php
|
||||
defined('IN_MET') or exit ('No permission');
|
||||
|
||||
load::own_class('appadmin');
|
||||
|
||||
//表格
|
||||
class table_off extends appadmin {
|
||||
|
||||
//获取的ID
|
||||
private $allid;
|
||||
|
||||
//表名
|
||||
private $sqlk;
|
||||
|
||||
// 文字提示
|
||||
private $tips = '';
|
||||
//跳转URL
|
||||
private $returl = '';
|
||||
//参数
|
||||
private $para = [];
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
global $_M,$_YW;
|
||||
parent::__construct();
|
||||
$this->tname = $_M['form']['tname'];
|
||||
$this->sqlk = $_YW['k'][$this->tname];
|
||||
}
|
||||
|
||||
public function __destruct()
|
||||
{
|
||||
global $_M,$_YW;
|
||||
if($this->destruct){
|
||||
switch ($this->tname) {
|
||||
case 'para':
|
||||
$this->para = [
|
||||
'p_type' => $_M['form']['p_type']
|
||||
];
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if(count($this->para)) $para = '&'.http_build_query($this->para);
|
||||
turnover($this->returl?:$_M['url']['own_name'] . 'c=table_on&a=do'.$this->tname.$para, $this->tips);
|
||||
}
|
||||
}
|
||||
|
||||
//主方法
|
||||
public function doindex(){
|
||||
global $_M,$_YW;
|
||||
$this->allid = array_filter(explode(',', $_M['form']['all_id']));
|
||||
switch ($_M['form']['submit_type']) {
|
||||
case 'delet':
|
||||
self::delet();
|
||||
break;
|
||||
case 'save':
|
||||
self::save();
|
||||
break;
|
||||
case 'enableon':
|
||||
case 'enableoff':
|
||||
self::enable();
|
||||
break;
|
||||
case 'enable_on':
|
||||
case 'enable_off':
|
||||
self::enable(false);
|
||||
break;
|
||||
case 'typeonoff':
|
||||
self::typeonoff();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if($_M['form']['method'] == 'ajax') {
|
||||
$this->destruct = false;
|
||||
echo jsoncallback(['code' => $this->tsql->error()?1:0 ]);
|
||||
}
|
||||
}
|
||||
|
||||
//保存
|
||||
private function save() {
|
||||
global $_M,$_YW;
|
||||
foreach ($this->allid as $id) {
|
||||
if($id){
|
||||
$field = self::info($id);
|
||||
if(is_number($id)){
|
||||
$this->tsql->table($this->tname)
|
||||
->field($field)
|
||||
->where(" id = '{$id}' ")
|
||||
->upd();
|
||||
} else {
|
||||
$this->tsql->table($this->tname)
|
||||
->field($field)
|
||||
->add();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//删除
|
||||
private function delet() {
|
||||
global $_M,$_YW;
|
||||
foreach ($this->allid as $id) {
|
||||
if($id){
|
||||
//删除关联表
|
||||
$ret = self::todel($id);
|
||||
if($ret == false) continue;
|
||||
//删除本表
|
||||
$where = " id = '{$id}' ";
|
||||
$this->tsql->table($this->tname)
|
||||
->where($where)
|
||||
->del();
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//调整广告位状态
|
||||
private function enable($type = true) {
|
||||
global $_M,$_YW;
|
||||
$enable = $_M['form']['submit_type'] == 'enableon' || $_M['form']['submit_type'] == 'enable_on'?1:0;
|
||||
$fid = $type?'e_vid':'id';
|
||||
foreach ($this->allid as $id) {
|
||||
if($id){
|
||||
$this->tsql->table('elevator')
|
||||
->field(['e_enable' => $enable])
|
||||
->where([$fid => $id])
|
||||
->upd();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//ajax单独调整
|
||||
private function typeonoff() {
|
||||
global $_M,$_YW;
|
||||
$field = $_M['form']['field'];
|
||||
$special = "ABS({$field}-1)";
|
||||
|
||||
$array = [$field => $special];
|
||||
$field_id = 'id';
|
||||
foreach ($this->allid as $id) {
|
||||
if($id){
|
||||
$this->tsql->table($this->tname)
|
||||
->special($special)
|
||||
->field($array)
|
||||
->where([$field_id => $id])
|
||||
->upd();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//保存信息
|
||||
private function info($id) {
|
||||
global $_M,$_YW;
|
||||
$lang = '';
|
||||
switch ($this->tname) {
|
||||
case 'para':
|
||||
$info = [
|
||||
'p_type' => $_M['form']['p_type-'.$id],
|
||||
'p_order' => $_M['form']['p_order-'.$id],
|
||||
'p_name' => $_M['form']['p_name-'.$id],
|
||||
'p_value' => $_M['form']['p_value-'.$id],
|
||||
'p_text' => $_M['form']['p_text-'.$id]
|
||||
];
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return $info;
|
||||
}
|
||||
|
||||
//删除其他的关联表
|
||||
private function todel($id) {
|
||||
global $_M,$_YW;
|
||||
$ret = true;
|
||||
switch ($this->tname) {
|
||||
case 'contract':
|
||||
//获取合同编号
|
||||
$contract = $this->tsql->table('contract')
|
||||
->where(['id' => $id])
|
||||
->one();
|
||||
//删除相关计划
|
||||
$this->tsql->table('launch')
|
||||
->where(['l_hnumber' => $contract['h_number'] ])
|
||||
->del();
|
||||
//删除相关排期
|
||||
$this->tsql->table('schedule')
|
||||
->where(['s_hnumber' => $contract['h_number'] ])
|
||||
->del();
|
||||
break;
|
||||
case 'launch':
|
||||
//删除相关排期
|
||||
$this->tsql->table('schedule')
|
||||
->where(['s_lid' => $id ])
|
||||
->del();
|
||||
break;
|
||||
case 'para':
|
||||
//删除相关的光广告位
|
||||
if($_M['form']['p_num-'.$id] > 0) $ret = false;
|
||||
break;
|
||||
case 'village':
|
||||
//查询需要删除的广告位编号
|
||||
$elevator = $this->tsql->table('elevator')
|
||||
->where(['e_vid' => $id])
|
||||
->all();
|
||||
|
||||
$e_number = array_column($elevator, 'e_number');
|
||||
self::del_elevator($e_number);
|
||||
break;
|
||||
case 'elevator':
|
||||
$elevator = $this->tsql->table('elevator')
|
||||
->where(['id' => $id])
|
||||
->one();
|
||||
//删除相关排期广告位编号
|
||||
self::del_elevator($elevator['e_number']);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return $ret;
|
||||
}
|
||||
|
||||
// 删除排期广告位编号
|
||||
private function del_elevator($num) {
|
||||
$dellist = [];
|
||||
if(!is_array($num)) $num = [$num];
|
||||
$num = array_unique($num);
|
||||
if(count($num) == 0) return false;
|
||||
// 广告位数组
|
||||
|
||||
foreach ($num as $e_number){
|
||||
// 删除广告位
|
||||
$this->tsql->table('elevator')
|
||||
->where(['e_number' => $e_number ])
|
||||
->del();
|
||||
//删除相关排期缓存
|
||||
$this->tsql->table('schedule')
|
||||
->where(['s_enumber' => $e_number ])
|
||||
->del();
|
||||
// 整理数据
|
||||
$launch = false;
|
||||
|
||||
// 选择的广告位
|
||||
$launch = $this->tsql->table('launch')
|
||||
->where(" find_in_set( '{$e_number}', l_selectenum ) ")
|
||||
->all();
|
||||
|
||||
// 处理的核心函数
|
||||
$col = function($launch,$field) use(&$dellist,$e_number){
|
||||
foreach ($launch as $val){
|
||||
$dellist[$val['id']]['info'] = $val;
|
||||
$dellist[$val['id']][$field][] = $e_number;
|
||||
}
|
||||
};
|
||||
if($launch != false) $col($launch,'l_selectenum');
|
||||
|
||||
// 排期成功的广告位
|
||||
$launch = $this->tsql->table('launch')
|
||||
->where(" find_in_set( '{$e_number}', l_enumber ) ")
|
||||
->all();
|
||||
if($launch != false) $col($launch,'l_enumber');
|
||||
}
|
||||
|
||||
if(count($dellist) == 0) return false;
|
||||
// 对值进行统计并修改
|
||||
foreach ($dellist as $id => $la){
|
||||
// 处理的核心函数
|
||||
$enum = function($field) use($la){
|
||||
// 拿到la内需要去掉的值 数组
|
||||
// 再通过对比获得差异值,并去重,再转成字符串
|
||||
return is_array($la[$field])?arrayto_string(array_unique(array_diff(stringto_array($la['info'][$field],','),$la[$field])),','):$la['info'][$field];
|
||||
};
|
||||
|
||||
//mysql
|
||||
$this->tsql->table('launch')
|
||||
->field(['l_selectenum' => $enum('l_selectenum'), 'l_enumber' => $enum('l_enumber')])
|
||||
->where(['id' => $id])
|
||||
->upd();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
|
|
@ -0,0 +1,135 @@
|
|||
<?php
|
||||
defined('IN_MET') or exit ('No permission');
|
||||
|
||||
load::own_class('appadmin');
|
||||
|
||||
class table_on extends appadmin {
|
||||
|
||||
// 表格标题
|
||||
private $table_theme; // 等待完善
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
global $_M,$_YW;
|
||||
parent::__construct();
|
||||
parent::appnav();
|
||||
parent::point('table_off','doindex','table');
|
||||
$this->table_theme = load::own_class('table_theme','new');
|
||||
}
|
||||
|
||||
|
||||
//输出模板内容
|
||||
public function __destruct()
|
||||
{
|
||||
global $_M,$_YW;
|
||||
if($this->destruct){
|
||||
if(empty($this->appshow)) $this->appshow = 'app/'.$this->tname;
|
||||
require $this->show($this->appshow,$this->input);
|
||||
}
|
||||
}
|
||||
|
||||
//广告位统计
|
||||
public function doelevator()
|
||||
{
|
||||
global $_M,$_YW;
|
||||
parent::appurl(parent::tname());
|
||||
$this->input['table'] = $this->table_theme->start($this->tname)->send_all(1);
|
||||
}
|
||||
|
||||
//小区统计
|
||||
public function dovillage()
|
||||
{
|
||||
global $_M,$_YW;
|
||||
parent::appurl(parent::tname());
|
||||
$this->input['table'] = $this->table_theme->start($this->tname)->send_all(1);
|
||||
}
|
||||
|
||||
//广告合同关联表
|
||||
public function doschedule()
|
||||
{
|
||||
global $_M,$_YW;
|
||||
parent::appurl(parent::tname());
|
||||
$this->input['table'] = $this->table_theme->start($this->tname)->send_all();
|
||||
}
|
||||
|
||||
//合同统计
|
||||
public function docontract()
|
||||
{
|
||||
global $_M,$_YW;
|
||||
parent::appurl(parent::tname());
|
||||
$this->input['table'] = $this->table_theme->start($this->tname)->send_all();
|
||||
}
|
||||
|
||||
//企业资料
|
||||
public function docustomer()
|
||||
{
|
||||
global $_M,$_YW;
|
||||
parent::appurl(parent::tname());
|
||||
$this->input['table'] = $this->table_theme->start($this->tname)->send_all(1);
|
||||
}
|
||||
|
||||
//企业联系人
|
||||
public function doworkers()
|
||||
{
|
||||
global $_M,$_YW;
|
||||
parent::appurl(parent::tname());
|
||||
$this->input['table'] = $this->table_theme->start($this->tname)->send_all(1);
|
||||
}
|
||||
|
||||
//投放计划单
|
||||
public function dolaunch()
|
||||
{
|
||||
global $_M,$_YW;
|
||||
parent::appurl(parent::tname());
|
||||
$this->input['table'] = $this->table_theme->start($this->tname)->send_all(1);
|
||||
}
|
||||
|
||||
//参数配置
|
||||
public function dopara()
|
||||
{
|
||||
global $_M,$_YW;
|
||||
parent::appurl(parent::tname());
|
||||
$this->input['table'] = $this->table_theme->start($this->tname)->send_all();
|
||||
}
|
||||
|
||||
// 小区统计
|
||||
public function dovillages()
|
||||
{
|
||||
global $_M,$_YW;
|
||||
parent::appurl(parent::tname());
|
||||
$vs_daytime = date('Y-m-d',time());
|
||||
$this->input['top']['tips'] = '
|
||||
<div class="alert dark alert-primary radius0 m-b-5">
|
||||
<p><mark>闲置个数、排期中的个数、到期个数、预排的个数计算说明</mark></p>
|
||||
<ol>
|
||||
<li>若选择时间区段,若两者缺少其中一个则自动补全为当天时间(<span class="tag tag-danger">'.$vs_daytime.'</span>)</li>
|
||||
<li><span class="tag tag-danger">闲置:</span>默认计算当天('.$vs_daytime.')的广告位闲置个数,选择时间区段后,计算的可以满足时间区段的广告位个数。(<span class="tag tag-danger">仅计算启用的广告位</span>)</li>
|
||||
<li><span class="tag tag-danger">排期中:</span>默认计算当天('.$vs_daytime.')排期中的个数,选择时间区段后,计算的在时间区段内有排期的广告位个数。</li>
|
||||
<li><span class="tag tag-danger">到期:</span>默认以当天('.$vs_daytime.')为准,计算<span class="tag tag-danger">7</span>天后到期的个数,选择时间区段后,计算的在时间区段内到期的广告位个数。</li>
|
||||
<li><span class="tag tag-danger">预排:</span>默认计算当天('.$vs_daytime.')以后才开始的排期广告位个数,选择时间区段后,计算的是时间区段内排期状态为预排的广告位个数。</li>
|
||||
</ol>
|
||||
</div>';
|
||||
$this->input['table'] = $this->table_theme->start($this->tname)->send_all(1);
|
||||
}
|
||||
|
||||
// 小区统计
|
||||
public function doelevators()
|
||||
{
|
||||
global $_M,$_YW;
|
||||
parent::appurl(parent::tname());
|
||||
$this->input['table'] = $this->table_theme->start($this->tname)->send_all(1);
|
||||
}
|
||||
|
||||
// 巡查密钥列表
|
||||
public function dokeylist()
|
||||
{
|
||||
global $_M,$_YW;
|
||||
parent::appurl(parent::tname());
|
||||
$this->input['table'] = $this->table_theme->start($this->tname)->send_all();
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
|
|
@ -0,0 +1,79 @@
|
|||
<?php
|
||||
defined('IN_MET') or exit('No permission');
|
||||
$met_title = $data['met_title'];
|
||||
?>
|
||||
<include file='sys_admin/head_v2'/>
|
||||
<div class="appmain">
|
||||
<form method="POST" action="{$data.url.action}">
|
||||
<!--二级导航-->
|
||||
{$data.nav_sub}
|
||||
<div class="metadmin-fmbx">
|
||||
<h3 class='example-title'>微信通知</h3>
|
||||
<dl>
|
||||
<dt><label class='form-control-label'>合同预约提醒模板ID</label></dt>
|
||||
<dd class="form-group">
|
||||
<div class="input-group">
|
||||
<input type="text" name="tem_ida"
|
||||
value="{$data.c.tem_ida}"
|
||||
class="form-control"
|
||||
placeholder='输入微信模板ID'
|
||||
required data-fv-notEmpty-message='不能为空'>
|
||||
</div>
|
||||
<span class="text-help m-l-10">IT科技-互联网|电子商务-预约提醒,推送为模板为那些还未到期的合同</span>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label class='form-control-label'>合同到期提醒模板ID</label></dt>
|
||||
<dd class="form-group">
|
||||
<div class="input-group">
|
||||
<input type="text" name="tem_idb"
|
||||
value="{$data.c.tem_idb}"
|
||||
class="form-control"
|
||||
placeholder='输入微信模板ID'
|
||||
required data-fv-notEmpty-message='不能为空'>
|
||||
</div>
|
||||
<span class="text-help m-l-10">IT科技-互联网|电子商务-合同到期提醒,合同已经到期的</span>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label class='form-control-label'>合同提醒汇总模板ID</label></dt>
|
||||
<dd class="form-group">
|
||||
<div class="input-group">
|
||||
<input type="text" name="tem_idc"
|
||||
value="{$data.c.tem_idc}"
|
||||
class="form-control"
|
||||
placeholder='输入微信模板ID'
|
||||
required data-fv-notEmpty-message='不能为空'>
|
||||
</div>
|
||||
<span class="text-help m-l-10">IT科技-互联网|电子商务-统计结果通知,合同提醒汇总结果</span>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label class='form-control-label'>合同到期通知的微信</label></dt>
|
||||
<dd class="form-group">
|
||||
<select name='openids[]' multiple class="form-control" data-plugin="select2"
|
||||
data-select2-url="{$data.url.select}"
|
||||
data-tname="weuser"
|
||||
data-fiend="openid"
|
||||
data-allnone="0"
|
||||
data-source="con_weuser"
|
||||
data-default="{$data.c.openid}"
|
||||
data-division=","
|
||||
data-placeholder="输入微信昵称"
|
||||
required data-fv-notEmpty-message='不能为空'>
|
||||
<option value=""></option>
|
||||
</select>
|
||||
<span class="text-help m-l-10">可设置多个管理员微信,设置后每个合同到期都会收到微信通知</span>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<dl>
|
||||
<dt></dt>
|
||||
<dd>
|
||||
<button type="submit" class="btn btn-primary">保存</button>
|
||||
</dd>
|
||||
</dl>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<include file='sys_admin/foot_v2'/>
|
||||
|
|
@ -0,0 +1,129 @@
|
|||
<?php
|
||||
defined('IN_MET') or exit('No permission');
|
||||
$met_title = $data['met_title'];
|
||||
?>
|
||||
<include file='sys_admin/head_v2'/>
|
||||
<div class="appmain">
|
||||
<form method="POST" action="{$data.url.action}" target="_self" enctype="multipart/form-data">
|
||||
<!--二级导航-->
|
||||
{$data.nav_sub}
|
||||
<div class="metadmin-fmbx">
|
||||
<h3 class='example-title'>{$data.met_title}</h3>
|
||||
<dl>
|
||||
<dt><label class='form-control-label'>合同编号</label></dt>
|
||||
<dd class="form-group">
|
||||
<input type="text" name="h_number"
|
||||
value="{$data.data.h_number}"
|
||||
class="form-control"
|
||||
placeholder='输入合同唯一编号'
|
||||
required data-fv-notEmpty-message='不能为空'
|
||||
data-fv-remote="true" data-fv-remote-url="{$data.remote_url}"
|
||||
data-fv-remote-message="广告编号不能重复"
|
||||
{$data.data.h_number_readonly}
|
||||
>
|
||||
<span class="text-help m-l-10"><foot class="red-600">保存后不可二次修改</foot>,合同唯一编号,方便后期查询处理</span>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label class='form-control-label'>签订日期</label></dt>
|
||||
<dd>
|
||||
<input type="text" name="h_signtime"
|
||||
value="{$data.data.h_signtime}"
|
||||
class="form-control" data-plugin='datetimepicker' data-day-type="2">
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label class='form-control-label'>签订企业</label></dt>
|
||||
<dd class="form-group">
|
||||
<select name='h_cid' class="form-control" data-plugin="select2"
|
||||
data-select2-url="{$data.url.select}"
|
||||
data-tname="customer"
|
||||
data-fiend="id"
|
||||
data-allnone="0"
|
||||
data-source="add_contract"
|
||||
data-default="{$data.data.h_cid}"
|
||||
data-placeholder="输入企业全称"
|
||||
required data-fv-notEmpty-message='不能为空'>
|
||||
<option value=""></option>
|
||||
</select>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label class='form-control-label'>签订相关人员</label></dt>
|
||||
<dd class="form-group">
|
||||
<select name='h_wid[]' class="form-control" multiple data-plugin="select2"
|
||||
data-select2-url="{$data.url.select}"
|
||||
data-tname="workers"
|
||||
data-fiend="id"
|
||||
data-allnone="0"
|
||||
data-source="add_contract_workers"
|
||||
data-default="{$data.data.h_wid}"
|
||||
data-placeholder="输入联系人姓名/电话"
|
||||
data-division=","
|
||||
required data-fv-notEmpty-message='不能为空'>
|
||||
<option value=""></option>
|
||||
</select>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label class='form-control-label'>广告时间段</label></dt>
|
||||
<dd class="form-group">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon">开始时间</span>
|
||||
<input type="text" name="h_starttime" value="{$data.data.h_starttime}"
|
||||
class="form-control w-150"
|
||||
id="date_timepicker_start"
|
||||
data-day-type="1"
|
||||
data-table-search
|
||||
data-plugin="datetosearch"
|
||||
autocomplete="off">
|
||||
<span class="input-group-addon">结束时间</span>
|
||||
<input type="text" name="h_endtime" value="{$data.data.h_endtime}"
|
||||
class="form-control w-150"
|
||||
id="date_timepicker_end"
|
||||
data-day-type="1"
|
||||
data-table-search
|
||||
data-plugin="datetosearch"
|
||||
autocomplete="off">
|
||||
</div>
|
||||
<span class="text-help m-l-10">影响后期的投放计划时间区间</span>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label class='form-control-label'>合同到期通知</label></dt>
|
||||
<dd>
|
||||
<input type="text" name="h_noticeday" placeholder="输入天数,限于数字" value="{$data.data.h_noticeday}" data-plugin='tokenfield' data-delimiter=','/>
|
||||
<span class="text-help m-l-10">可设置多个通知天数,输入完成一个回车后再输入下一个</span>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label class='form-control-label'>合同总额</label></dt>
|
||||
<dd class="form-group">
|
||||
<div class="input-group">
|
||||
<input type="text" name="h_tprice"
|
||||
value="{$data.data.h_tprice}"
|
||||
class="form-control"
|
||||
placeholder='输入合同总额'
|
||||
required data-fv-notEmpty-message='不能为空'>
|
||||
<span class="input-group-addon">元</span>
|
||||
</div>
|
||||
<span class="text-help m-l-10">合同总额方便后期统计</span>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label class='form-control-label'>合同备注</label></dt>
|
||||
<dd class="form-group">
|
||||
<textarea name="h_text" rows="5" placeholder='备注描述' class='form-control m-r-10'>{$data.data.h_text}</textarea>
|
||||
<span class="text-help">简短文字描述备注。</span>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt></dt>
|
||||
<dd>
|
||||
<button type="submit" class='btn btn-primary'>保存</button>
|
||||
</dd>
|
||||
</dl>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<include file='sys_admin/foot_v2'/>
|
||||
|
|
@ -0,0 +1 @@
|
|||
@charset "UTF-8";.appcheck .panel-info{border:1px solid #57c7d4;}.appcheck .topimg{text-align:left;display:inline-block;}.appcheck .topimg>div{float:left;}.appcheck .topimg .topimg-image{position:relative;margin-right:10px;}.appcheck .topimg .topimg-image .avatar{width:100px;}.appcheck .topimg .topimg-image .avatar img{border-radius:50%;border:1px solid #e4eaec;}.appcheck .img-bordered-info{border-color:#79D1C9!important;}.appcheck .topimg .topimg-body>span{display:block;font-size:1rem;}.appcheck .topimg .topimg-body .topimg-author{font-size:20px;font-weight:600;}.appcheck .topimg .topimg-body .topimg-company{opacity:.8;}.appcheck .list-group .media .media-heading{font-size:1.1rem;color:#37474f;}.appcheck .list-group li h4{font-weight:600;}.appcheck .media-body small{font-size:98%;color:#76838f;}.appcheck .loader-circle{width:0.45em;height:0.45em;border-width:.08em;}.appcheck .icon{margin-right:0px;font-size:20px;}.appcheck .icon.fa-check-circle{color:#46be8a;}.appcheck .icon.fa-times-circle{color:#f96868;}.appcheck .icon.fa-exclamation-circle{color:#f2a654;}.appcheck .icon.fa-clock-o{color:#ccd5db;}.appcheck .modal{background:rgba(0,0,0,.8);}.appcheck .modal .close{opacity:1;font-weight:900;font-size:1.9rem;}.appcheck .modal .close:focus,.appcheck .modal .close:hover{cursor:pointer;text-decoration:none;opacity:.5;}.appcheck .modal .modal-header{border-bottom:1px solid #e4eaec;}.appcheck .modal .modal-footer{padding:15px 20px;border-top:1px solid #e4eaec;}.appcheck .modal .modal-body .ov-body{overflow-y:auto;}.appcheck .modal .ov-body span{color:#76838f;}
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,87 @@
|
|||
<?php
|
||||
defined('IN_MET') or exit('No permission');
|
||||
$met_title = $data['met_title'];
|
||||
?>
|
||||
<include file='sys_admin/head_v2'/>
|
||||
<div class="appmain">
|
||||
<form method="POST" action="{$data.url.action}" target="_self" enctype="multipart/form-data">
|
||||
<!--二级导航-->
|
||||
{$data.nav_sub}
|
||||
<div class="metadmin-fmbx">
|
||||
<h3 class='example-title'>{$data.met_title}</h3>
|
||||
<dl>
|
||||
<dt><label class='form-control-label'>企业全称</label></dt>
|
||||
<dd class="form-group">
|
||||
<select name='c_allname' class="form-control" data-plugin="select2"
|
||||
data-select2-url="{$data.url.select}"
|
||||
data-tname="{$data.tname}"
|
||||
data-fiend="c_allname"
|
||||
data-allnone="3"
|
||||
data-source="add_customer"
|
||||
data-default="{$data.data.c_allname}"
|
||||
data-placeholder="输入企业全称"
|
||||
required data-fv-notEmpty-message='不能为空'>
|
||||
<option value=""></option>
|
||||
</select>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label class='form-control-label'>企业简称</label></dt>
|
||||
<dd class="form-group">
|
||||
<input type="text" name="c_name"
|
||||
value="{$data.data.c_name}"
|
||||
class="form-control"
|
||||
placeholder='输入企业简称'>
|
||||
<span class="text-help m-l-10">企业简短名称</span>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label class='form-control-label'>企业地址</label></dt>
|
||||
<dd>
|
||||
<div data-plugin="select-linkage" data-select-url="{$data.url.city}" class="city-css form-group">
|
||||
<select name="c_province" class="form-control m-r-5 prov" data-checked="{$data.data.c_province}"
|
||||
required data-fv-notEmpty-message="不能为空"></select>
|
||||
<select name="c_city" class="form-control m-r-5 city" data-checked="{$data.data.c_city}"
|
||||
required data-fv-notEmpty-message="不能为空"></select>
|
||||
<select name="c_district" class="form-control m-r-5 dist" data-checked="{$data.data.c_district}"
|
||||
required data-fv-notEmpty-message="不能为空"></select>
|
||||
</div>
|
||||
<div class="form-group clearfix">
|
||||
<input type="text" name="c_address" value="{$data.data.c_address}" placeholder="请输入详细地址" class="form-control"
|
||||
required data-fv-notEmpty-message="不能为空">
|
||||
</div>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label class='form-control-label'>相关联系人</label></dt>
|
||||
<dd class="form-group">
|
||||
<select name='c_wid[]' class="form-control" multiple data-plugin="select2"
|
||||
data-select2-url="{$data.url.select}"
|
||||
data-tname="workers"
|
||||
data-fiend="id"
|
||||
data-allnone="0"
|
||||
data-source="add_customer_workers"
|
||||
data-default="{$data.data.c_wid}"
|
||||
data-placeholder="输入联系人姓名/电话"
|
||||
data-division="," >
|
||||
<option value=""></option>
|
||||
</select>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label class='form-control-label'>备注</label></dt>
|
||||
<dd class="form-group">
|
||||
<textarea name="c_text" rows="5" placeholder='备注描述' class='form-control m-r-10'>{$data.data.c_text}</textarea>
|
||||
<span class="text-help">简短文字描述备注。</span>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt></dt>
|
||||
<dd>
|
||||
<button type="submit" class='btn btn-primary'>保存</button>
|
||||
</dd>
|
||||
</dl>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<include file='sys_admin/foot_v2'/>
|
||||
|
|
@ -0,0 +1,119 @@
|
|||
<?php
|
||||
defined('IN_MET') or exit('No permission');
|
||||
$met_title = $data['met_title'];
|
||||
?>
|
||||
<include file='sys_admin/head_v2'/>
|
||||
<!--二级导航-->
|
||||
{$data.nav_sub}
|
||||
<div class="page-profile">
|
||||
<div class="card card-shadow text-xs-center">
|
||||
<div class="card-footer">
|
||||
<div class="row no-space">
|
||||
<div class="col-xs-1">
|
||||
<strong class="profile-stat-count">{$data.num.village}</strong>
|
||||
<span>小区总数</span>
|
||||
</div>
|
||||
<div class="col-xs-1">
|
||||
<strong class="profile-stat-count">{$data.num.elevator}</strong>
|
||||
<span>广告位总数</span>
|
||||
</div>
|
||||
<div class="col-xs-1">
|
||||
<strong class="profile-stat-count">{$data.num.vfree}</strong>
|
||||
<span data-toggle="tooltip"
|
||||
data-placement="bottom"
|
||||
data-trigger="hover"
|
||||
data-original-title="今天空闲的广告位总数,包含禁用的广告位">广告位空闲数 <i class="icon fa-question-circle" aria-hidden="true"></i></span>
|
||||
</div>
|
||||
<div class="col-xs-1">
|
||||
<strong class="profile-stat-count">{$data.num.vlease}</strong>
|
||||
<span data-toggle="tooltip"
|
||||
data-placement="bottom"
|
||||
data-trigger="hover"
|
||||
data-original-title="今天正在排期中的广告位">广告位排期中 <i class="icon fa-question-circle" aria-hidden="true"></i></span>
|
||||
</div>
|
||||
<div class="col-xs-1">
|
||||
<strong class="profile-stat-count">{$data.num.vendday}</strong>
|
||||
<span data-toggle="tooltip"
|
||||
data-placement="bottom"
|
||||
data-trigger="hover"
|
||||
data-original-title="7天内即将到期的广告位总数">7天内到期 <i class="icon fa-question-circle" aria-hidden="true"></i></span>
|
||||
</div>
|
||||
<div class="col-xs-1">
|
||||
<strong class="profile-stat-count">{$data.num.vprerow}</strong>
|
||||
<span data-toggle="tooltip"
|
||||
data-placement="bottom"
|
||||
data-trigger="hover"
|
||||
data-original-title="投放开始时间大于今天的广告位">广告位预排数 <i class="icon fa-question-circle" aria-hidden="true"></i></span>
|
||||
</div>
|
||||
<div class="col-xs-1">
|
||||
<strong class="profile-stat-count">{$data.num.contract}</strong>
|
||||
<span>订单总数</span>
|
||||
</div>
|
||||
<div class="col-xs-1">
|
||||
<strong class="profile-stat-count">{$data.num.summoney}</strong>
|
||||
<span>合同总额</span>
|
||||
</div>
|
||||
<div class="col-xs-1">
|
||||
<strong class="profile-stat-count">{$data.num.endcontract}</strong>
|
||||
<span>到期订单数</span>
|
||||
</div>
|
||||
<div class="col-xs-1">
|
||||
<strong class="profile-stat-count">{$data.num.launch}</strong>
|
||||
<span>投放总数</span>
|
||||
</div>
|
||||
<div class="col-xs-1">
|
||||
<strong class="profile-stat-count">{$data.num.endlaunch}</strong>
|
||||
<span>投放结束数</span>
|
||||
</div>
|
||||
<div class="col-xs-1">
|
||||
<strong class="profile-stat-count">{$data.num.customer}</strong>
|
||||
<span>企业总数</span>
|
||||
</div>
|
||||
<!--<div class="col-xs-1">
|
||||
<strong class="profile-stat-count">{$data.num.workers}</strong>
|
||||
<span>联系人总数</span>
|
||||
</div>-->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row dzadsod_list">
|
||||
<!--
|
||||
<div class="col-md-4 col-lg-4 col-4">
|
||||
<div class="panel panel-info ">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title">签定的最新合同</h3>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<ol class="list-group list-group-dividered list-group-full">
|
||||
<li class="list-group-item active">XXXXXXX</li>
|
||||
<li class="list-group-item">XXXXXXX</li>
|
||||
<li class="list-group-item">XXXXXXX</li>
|
||||
<li class="list-group-item disabled">XXXXXXX</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
-->
|
||||
<div class="col-md-12 col-lg-12 col-12">
|
||||
<div class="panel panel-info panel-line ">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title">订单到期提醒
|
||||
<small>包含根据设置的到期提醒天数内的订单,以及订单投放结束到期的订单,符合条件的数据展示3天</small>
|
||||
</h3>
|
||||
</div>
|
||||
<table class="dataTable table table-bordered table-hover table-striped w-full m-t-10" id="tableslist" data-table-ajaxurl="{$data.url.ajaxurl}" data-table-pagelength='15' data-plugin="selectable">
|
||||
<thead>{$data.table.thead}</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td colspan="{$data.table.tdcol}">
|
||||
<div class="h-50 vertical-align text-xs-center"><div class="loader vertical-align-middle loader-default"></div></div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tfoot>{$data.table.tfoot}</tfoot>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<include file='sys_admin/foot_v2'/>
|
||||
|
|
@ -0,0 +1,117 @@
|
|||
<?php
|
||||
defined('IN_MET') or exit('No permission');
|
||||
$met_title = $data['met_title'];
|
||||
?>
|
||||
<include file='sys_admin/head_v2'/>
|
||||
<div class="appmain">
|
||||
<form method="POST" action="{$data.url.action}" target="_self" enctype="multipart/form-data">
|
||||
<!--二级导航-->
|
||||
{$data.nav_sub}
|
||||
<div class="metadmin-fmbx">
|
||||
<h3 class='example-title'>{$data.met_title}</h3>
|
||||
<dl>
|
||||
<dt><label class='form-control-label'>广告位编号</label></dt>
|
||||
<dd class="form-group">
|
||||
<input type="text" name="e_number"
|
||||
value="{$data.data.e_number}"
|
||||
class="form-control"
|
||||
placeholder='输入广告位唯一编号'
|
||||
required data-fv-notEmpty-message="不能为空"
|
||||
data-fv-remote="true" data-fv-remote-url="{$data.remote_url}"
|
||||
data-fv-remote-message="广告编号不能重复"
|
||||
>
|
||||
<input type="hidden" name="olde_number" value="{$data.data.e_number}">
|
||||
<span class="text-help m-l-10">广告位唯一编号,方便后期查询处理。</span>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label class='form-control-label'>选择小区</label></dt>
|
||||
<dd class="form-group">
|
||||
<select name='e_vid' class="form-control" data-plugin="select2"
|
||||
data-select2-url="{$data.url.select}"
|
||||
data-tname="village"
|
||||
data-fiend="id"
|
||||
data-allnone="0"
|
||||
data-source="add_elevator"
|
||||
data-default="{$data.data.e_vid}"
|
||||
data-placeholder="输入小区名"
|
||||
required data-fv-notEmpty-message='不能为空'>
|
||||
<option value=""></option>
|
||||
</select>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<dl>
|
||||
<dt><label class='form-control-label'>选择楼号</label></dt>
|
||||
<dd class="form-group">
|
||||
{$data.para.e_bno_radio}
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label class='form-control-label'>选择单元号</label></dt>
|
||||
<dd class="form-group">
|
||||
{$data.para.e_uno_radio}
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label class='form-control-label'>选择电梯号</label></dt>
|
||||
<dd class="form-group">
|
||||
{$data.para.e_eno_radio}
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label class='form-control-label'>选择广告位置</label></dt>
|
||||
<dd class="form-group">
|
||||
{$data.para.e_aps_radio}
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<dl>
|
||||
<dt><label class='form-control-label'>广告规格</label></dt>
|
||||
<dd class="form-group">
|
||||
<input type="text" name="e_size"
|
||||
value="{$data.data.e_size}"
|
||||
class="form-control"
|
||||
placeholder='输入广告规格'
|
||||
required data-fv-notEmpty-message='不能为空'>
|
||||
<span class="text-help m-l-10">示例:300*500。</span>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label class='form-control-label'>是否启用</label></dt>
|
||||
<dd class="form-group">
|
||||
<div class="radio-custom radio-primary radio-inline">
|
||||
<input type="radio" id="e_enable0" name="e_enable" value='0' data-checked='{$data.data.e_enable}'
|
||||
required data-fv-notEmpty-message='不能为空' />
|
||||
<label for="e_enable0">禁用</label>
|
||||
</div>
|
||||
<div class="radio-custom radio-primary radio-inline">
|
||||
<input type="radio" id="e_enable1" name="e_enable" value='1'/>
|
||||
<label for="e_enable1">启用</label>
|
||||
</div>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label class='form-control-label'>自主标签</label></dt>
|
||||
<dd>
|
||||
<input type="text" name="e_label" placeholder="输入标签" value="{$data.data.e_label}" data-plugin='tokenfield' data-delimiter=','/>
|
||||
<span class="text-help m-l-10">自定义广告位相关标签,可设置多个</span>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label class='form-control-label'>备注</label></dt>
|
||||
<dd class="form-group">
|
||||
<textarea name="e_text" rows="5" placeholder='备注描述' class='form-control m-r-10'>{$data.data.e_text}</textarea>
|
||||
<span class="text-help">简短文字描述备注。</span>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt></dt>
|
||||
<dd>
|
||||
<button type="submit" class='btn btn-primary'>保存</button>
|
||||
</dd>
|
||||
</dl>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<include file='sys_admin/foot_v2'/>
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
<?php
|
||||
defined('IN_MET') or exit('No permission');
|
||||
$met_title = $data['app']['appname'];
|
||||
//2.0
|
||||
?>
|
||||
<include file='sys_admin/head_v2'/>
|
||||
<link href="{$_M['url']['own_tem']}css/appcheck.min.css" rel='stylesheet' type='text/css'>
|
||||
<div class="appcheck" data-ckitem="{$data.ckitem}" >
|
||||
<div class="row">
|
||||
<div class="col-xs-12 col-md-4 offset-md-4">
|
||||
|
||||
<div class="panel panel-info m-t-35">
|
||||
<div class="panel-heading p-y-20 text-xs-center">
|
||||
<div class="topimg">
|
||||
<div class="topimg-image">
|
||||
<div class="avatar">
|
||||
<img class="img-circle img-bordered img-bordered-info" src="{$data.app.icon}" alt="image">
|
||||
</div>
|
||||
</div>
|
||||
<div class="topimg-body p-10 p-l-5">
|
||||
<span class="topimg-author">{$data.app.appname}</span>
|
||||
<span class="topimg-company">版本号:{$data.app.ver}</span>
|
||||
<span class="topimg-company">{$data.app.addtime}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<ul class="list-group list-group-bordered"></ul>
|
||||
<div class="panel-body text-xs-center">
|
||||
应用进行逐项检测,状态:<i class="icon fa-times-circle"></i> 时会暂停检测,待处理问题后再继续执行检测。
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<!-- Modal -->
|
||||
<div class="modal fade" id="appmodal" aria-hidden="true" data-keyboard="false" data-backdrop="false" role="dialog" tabindex="-1">
|
||||
<div class="modal-dialog modal-center">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close blue-600" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
<h4 class="modal-title"></h4>
|
||||
</div>
|
||||
<div class="modal-body"></div>
|
||||
<div class="modal-footer text-xs-center collapse"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- End Modal -->
|
||||
</div>
|
||||
<include file='sys_admin/foot_v2'/>
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
//应用JS后期语法框架
|
||||
(function($){
|
||||
|
||||
//内部初始化入口
|
||||
var appmap = function(){
|
||||
|
||||
};
|
||||
|
||||
//扩展方法
|
||||
appmap.prototype = {
|
||||
|
||||
};
|
||||
|
||||
//外部入口
|
||||
$.fn.maps = function () {
|
||||
|
||||
};
|
||||
})(jQuery);
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,243 @@
|
|||
//应用JS后期语法框架
|
||||
(function($){
|
||||
|
||||
//内部初始化入口
|
||||
var applan = function(){
|
||||
var $self = this,
|
||||
strArr = $self.aparr();
|
||||
//计算选中广告位个数
|
||||
$self.addnum(strArr);
|
||||
|
||||
//提交处理
|
||||
$(document).on('submit', '.add_ap_list form', function(event) {
|
||||
event.preventDefault(); //阻止默认提交
|
||||
})
|
||||
|
||||
//修改form提交方式
|
||||
$(document).on('click', '.add_ap_list form button[type="submit"]', function(event) {
|
||||
event.preventDefault(); //阻止默认提交
|
||||
var $form = $(this).parents('form');
|
||||
//手动触发全部验证
|
||||
// $form.data('formValidation').resetForm();
|
||||
$form.data('formValidation').validate({debug:true});
|
||||
//查看验证结果,若为false 则阻止
|
||||
var flag = $form.data("formValidation").isValid();
|
||||
//验证时间是否合法
|
||||
if(flag != false){
|
||||
//执行入库操作,返回ID
|
||||
$self.laaajx($form.attr('action'),$self.formdata($form));
|
||||
}
|
||||
//修改表格按钮禁止操作
|
||||
// $(this).attr("disabled",true);
|
||||
});
|
||||
|
||||
//解决被禁用前选中的,点击取消后则不能再勾选
|
||||
$('table tbody').on('click', '.ap-one-disabled', function(event) {
|
||||
$(this).removeClass('ap-one-disabled');
|
||||
$(this).find('input').attr("disabled",true);
|
||||
})
|
||||
// $(document).on('change',"[data-table-search]",function(){
|
||||
// return false;
|
||||
// })
|
||||
|
||||
//全选
|
||||
$(document).on('click','.ap-all input',function(){
|
||||
var idArr = [];
|
||||
//选中值
|
||||
var table = $(this).parents('table').find('tbody');
|
||||
table.find('.ap-one').each(function(index,element){
|
||||
var oneid = $(this).find('input[name="id"]').val(),
|
||||
disabled = $(this).find('input[name="id"]').prop('disabled');
|
||||
if(APPFUN.isEmpty(disabled)) idArr.push(oneid);
|
||||
})
|
||||
this.checked === true?$self.addap(idArr):$self.apdelall(idArr);
|
||||
});
|
||||
|
||||
//必须定位到 table tbody on方法才生效
|
||||
$('table tbody').on('click','.ap-one input',function(){
|
||||
var idStr = $(this).val();
|
||||
this.checked === true?$self.addap(idStr):$self.delap(idStr);
|
||||
});
|
||||
};
|
||||
|
||||
//扩展方法
|
||||
applan.prototype = {
|
||||
addnum:function(strArr){
|
||||
var $self = this;
|
||||
strArr = $.unique(strArr);
|
||||
$('.addnum').text(strArr.length);
|
||||
},
|
||||
apdelall:function(idArr){
|
||||
var $self = this;
|
||||
$.each(idArr,function(i,idStr){
|
||||
$self.delap(idStr);
|
||||
})
|
||||
},
|
||||
addap:function(idStrArr){
|
||||
//新增选中值
|
||||
var $self = this,
|
||||
strArr = $self.aparr();
|
||||
//新增选中的元素
|
||||
strArr = strArr.concat(idStrArr);
|
||||
//排序
|
||||
strArr.sort();
|
||||
//去重
|
||||
strArr =$.unique(strArr);
|
||||
$self.apinput(strArr.join(","),true);
|
||||
//选中个数
|
||||
$self.addnum(strArr);
|
||||
},
|
||||
delap:function(idStr){
|
||||
//删除选中值
|
||||
var $self = this,
|
||||
strArr = $self.aparr(),
|
||||
strlen = $.inArray(idStr, strArr);
|
||||
//删除选中值
|
||||
if(strlen != '-1') strArr.splice(strlen, 1);
|
||||
//排序
|
||||
strArr.sort();
|
||||
//重新写会
|
||||
$self.apinput(strArr.join(","),true);
|
||||
//选中个数
|
||||
$self.addnum(strArr);
|
||||
},
|
||||
apinput:function(str,type){
|
||||
//获取或者写入
|
||||
//true 为写入 false为获取
|
||||
var input = $('input[name="l_selectenum"]');
|
||||
return APPFUN.isEmpty(type)?input.val():input.val(str);
|
||||
},
|
||||
aparr:function(){
|
||||
//选中广告位编号
|
||||
var $self = this,
|
||||
str = $self.apinput();
|
||||
return !APPFUN.isEmpty(str)?str.split(","):[];
|
||||
},
|
||||
formdata:function(form){
|
||||
var Array = form.serializeArray(),
|
||||
dataOjb = {};
|
||||
//转成一对一
|
||||
$.each(Array,function(key,val){
|
||||
dataOjb[val.name] = val.value;
|
||||
});
|
||||
return dataOjb;
|
||||
},
|
||||
laaajx:function(url,data){
|
||||
var $self = this,
|
||||
scrollable_this = $('[data-plugin="scrollable"]');
|
||||
//点击保存后,先处理保存,再执行点位
|
||||
$.post(url,data,function(json){
|
||||
if(json.code){
|
||||
// // 执行成功,则自动跳转到下一步
|
||||
window.location.replace(window.location.href + '&slid='+json.slid+'&nextstep=1');
|
||||
}else{
|
||||
$self.addappend(scrollable_this,json.text,0);
|
||||
$self.alerthtml(false,json.text);
|
||||
}
|
||||
},'json');
|
||||
},
|
||||
nextstep:function(){
|
||||
var $self = this,
|
||||
scrollable_this = $('[data-plugin="scrollable"]'),
|
||||
//获取广告位数组
|
||||
strArr = $self.aparr(),
|
||||
//提交的URL
|
||||
url = M.url.own_name + 'c=ajax&a=doapplan&lang=' + M.lang,
|
||||
//获取form数据
|
||||
data = $self.formdata($('form')),
|
||||
falsei = 0,
|
||||
truei = 0;
|
||||
|
||||
$self.scrollable(scrollable_this); //先重新初始化显示
|
||||
//去重
|
||||
strArr =$.unique(strArr);
|
||||
$.each(strArr,function(i,idStr){
|
||||
data['ap_enumber'] = idStr;
|
||||
$.post(url,data,function(json){
|
||||
// 将操作结果反馈给页面
|
||||
$self.addappend(scrollable_this,json.text,json.code?1:2);
|
||||
var inputid = $('input[value="'+json.eid+'"]').parent('.ap-one');
|
||||
if(json.code){
|
||||
truei++;
|
||||
inputid.removeClass('checkbox-danger').addClass('checkbox-success');
|
||||
}else{
|
||||
falsei++;
|
||||
inputid.removeClass('checkbox-success').addClass('checkbox-danger');
|
||||
}
|
||||
//输出最终结果
|
||||
if(strArr.length == truei*1 + falsei*1){
|
||||
//再执行,将最终的结果保存到对应的投放ID内
|
||||
var urls = M.url.own_name + 'c=ajax&a=dolenumber&lang=' + M.lang;
|
||||
// 将缓存表内保存的排期成功数据保存到表内
|
||||
$.post(urls,data,function(dajson){
|
||||
var text = '本次广告投放计划共涉及('+strArr.length+')个广告位,排期成功的('+truei+')个广告位,排期失败的('+falsei+')个广告位。',
|
||||
falseicode = falsei == 0?true:false;
|
||||
if(dajson.code == false){
|
||||
falseicode = false;
|
||||
text += dajson.text;
|
||||
}
|
||||
//同步给排期成功的字段
|
||||
if(dajson.code) $('input[name="l_enumber"]').val(dajson.idstr);
|
||||
//信息反馈页面
|
||||
$self.addappend(scrollable_this,dajson.text,dajson.code?0:2);
|
||||
$self.addappend(scrollable_this,text,0);
|
||||
$self.alerthtml(falseicode,text);
|
||||
scrollable_this.asScrollable('scrollTo','vertical','100%');
|
||||
},'json');
|
||||
}
|
||||
},'json');
|
||||
});
|
||||
},
|
||||
alerthtml:function(bool,text){
|
||||
var color = bool?'alert-success':'alert-danger',
|
||||
url = M.url.own_name + 'c=table_on&a=dolaunch',
|
||||
alert = '<div class="launch_affix_save alert dark alert-icon alert-dismissible text-xs-center ' + color + '" role="alert"><button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button><span><i class="icon wb-bell p-r-10" aria-hidden="true"></i>'+text+'</span><button class="btn btn-sm btn-danger btn-inverse btn-outline launchlist" type="button">返回列表</button></div>';
|
||||
$('.launch_affix_save').remove();
|
||||
$('form').append(alert);
|
||||
$(document).on('click','.launchlist',function(e){
|
||||
window.location.replace(url);
|
||||
})
|
||||
},
|
||||
addappend:function(_this_,text,code){
|
||||
var color = ['blue-600','green-600','red-600'],
|
||||
icon = ['wb-bell','wb-check','wb-close'],
|
||||
litext = '<li class="' + color[code] + '"><i class="' + icon[code] + '" aria-hidden="true"></i>' + text + '</li>';
|
||||
$('.launchshow').append(litext);
|
||||
_this_.asScrollable('scrollTo','vertical','100%');
|
||||
},
|
||||
scrollable:function(_this_){
|
||||
M['plugin']['asscrollable']=[
|
||||
// M['url']['static2_vendor']+'asscrollable/asScrollable.min.css',
|
||||
M['url']['static2_vendor']+'asscrollbar/jquery-asScrollbar.min.js',
|
||||
M['url']['static2_vendor']+'asscrollable/jquery-asScrollable.min.js',
|
||||
];
|
||||
$.include(M['plugin']['asscrollable'], function () {
|
||||
_this_.asScrollable('destroy');
|
||||
_this_.asScrollable({
|
||||
namespace: "scrollable",
|
||||
contentSelector: "> [data-role='content']",
|
||||
containerSelector: "> [data-role='container']"
|
||||
});
|
||||
});
|
||||
},
|
||||
scrollToEnd:function(){
|
||||
//滚动到底部
|
||||
var h = $(document).height()-$(window).height();
|
||||
$(document).scrollTop(h);
|
||||
}
|
||||
};
|
||||
|
||||
//外部入口
|
||||
$.fn.aplist = function () {
|
||||
var naplan = new applan();
|
||||
if( !APPFUN.isEmpty($('input[name="nextstep"]').val()) ) {
|
||||
$('#tables-list').on( 'draw.dt', function ( e,settings ) {
|
||||
naplan.scrollToEnd();
|
||||
})
|
||||
naplan.nextstep();
|
||||
}
|
||||
};
|
||||
//启动
|
||||
$(".add_ap_list").aplist();
|
||||
|
||||
})(jQuery);
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
//用来阻止广告位重复添加的
|
||||
(function($){
|
||||
|
||||
//内部初始化入口
|
||||
var appmap = function(){
|
||||
|
||||
};
|
||||
|
||||
//扩展方法
|
||||
appmap.prototype = {
|
||||
|
||||
};
|
||||
|
||||
//外部入口
|
||||
$.fn.maps = function () {
|
||||
|
||||
};
|
||||
})(jQuery);
|
||||
|
|
@ -0,0 +1,311 @@
|
|||
/*!
|
||||
* M['weburl'] 网站网址
|
||||
* M['lang'] 网站语言
|
||||
* M['tem'] 模板目录路径
|
||||
* M['user_name'] 页面登录用户名
|
||||
* met_prevarrow,
|
||||
met_nextarrow slick插件翻页按钮自定义html
|
||||
* M['device_type'] 客户端判断(d:PC端,t:平板端,m:手机端)
|
||||
* M['n'] 当前模块名称
|
||||
* M['c'] 当前类
|
||||
* M['a'] 当前方法
|
||||
* M['langtxt'] 当前语言文字
|
||||
* M['langset'] 当前后台语言
|
||||
* M['anyid'] 当前模块id
|
||||
* M['met_editor'] 当前系统编辑器名称
|
||||
* M['met_keywords'] 页面关键词
|
||||
* M['url']['admin'] 后台文件夹路径
|
||||
* M['url']['static']
|
||||
* M['url']['static_vendor']
|
||||
* M['url']['static2']
|
||||
* M['url']['static2_vendor']
|
||||
* M['url']['static2_plugin']
|
||||
* M['url']['uiv2'] 模板框架v2路径
|
||||
* M['url']['uiv2_css']
|
||||
* M['url']['uiv2_js']
|
||||
* M['url']['app'] 应用文件夹路径
|
||||
* M['url']['pub'] 后台模块公用文件夹路径
|
||||
* M['url']['epl'] 后台模块公用示例文件夹路径
|
||||
* M['url']['ui'] 应用前后台公用UI文件app/system/include/piblic/ui/里面
|
||||
* M['url']['own_form'] 当前页面程序地址
|
||||
* M['url']['own_name'] 当前模块地址
|
||||
* M['url']['own'] 当前模块后台路径
|
||||
* M['url']['own_tem'] 当前页面模板路径
|
||||
* M['url']['api'] app站点地址
|
||||
* M['url']['editor'] 当前编辑器应用文件夹路径
|
||||
*/
|
||||
$(function(){
|
||||
var myDate=new Date().getTime()
|
||||
$.include(M.url.own_tem + 'js/appcheck.min.js?'+myDate);
|
||||
|
||||
$.ajax({
|
||||
type: "GET",
|
||||
url: M.url.own_name + 'c=ajax&a=doajaxcl&lang=' + M['langset'],
|
||||
dataType: "jsonp",
|
||||
async: false
|
||||
}).done(function (data) {
|
||||
CL = data;
|
||||
});
|
||||
|
||||
var appfun = function () {
|
||||
var $self = this;
|
||||
//有序表处理
|
||||
$.getJSON(M.url.own_name + 'c=ajax&a=dosequence&lang=' + M['langset'],{},function(json){});
|
||||
//select2
|
||||
if($('[data-plugin="select2"]').length) $self.select2(true);
|
||||
//排期广告位选择
|
||||
if($('.add_ap_list').length) $.include(M.url.own_tem + 'js/applan.js?'+myDate);
|
||||
//表格重绘后回调
|
||||
$('#tableslist').on( 'draw.dt', function ( e,settings ) {
|
||||
if($('[data-plugin="alertify"]').length) $self.select2(false);
|
||||
})
|
||||
//单个时间初始化
|
||||
if($('[data-plugin="alonetime"]').length) $self.alonetime();
|
||||
//时间区段选择
|
||||
if($('[data-plugin="datetosearch"]').length) $self.datepicker();
|
||||
//导出功能
|
||||
$(document).on('click','.backups',function (event) {
|
||||
var my = $(this);
|
||||
event.preventDefault();
|
||||
my.parents('form').metSubmit(0);
|
||||
var obj = my.parents("form").serialize(),href = my.data('url'),veaps = $('select[name="veaps"]').val();
|
||||
// 单独给get传递增加veaps的值
|
||||
if(!$self.isEmpty(veaps)) obj += '&jsadd_veaps=' + veaps.join(',');
|
||||
window.location.href = href + '&' + obj;
|
||||
})
|
||||
//表格底部自定义按钮
|
||||
$(document).on('click','[table-zdybtn]',function (event) {
|
||||
var my = $(this),
|
||||
$form = my.parents('form'),
|
||||
typestr = my.data('submit_type');
|
||||
event.preventDefault();
|
||||
$self.ownsubmit($form,typestr);
|
||||
if(my.data('plugin') != 'alertify'){
|
||||
$form.submit();
|
||||
return true;
|
||||
}
|
||||
})
|
||||
//排序功能
|
||||
if($('a.orderby-link').length) $self.orders();
|
||||
//状态更改
|
||||
// http://bsify.admui.com/alertify/ 中文说明
|
||||
$(document).on('click','.btn-cursor-pointer', function () {
|
||||
var self = $(this);
|
||||
$.include(M['url']['static2_vendor'] + 'alertify/alertify.js', function () {
|
||||
alertify
|
||||
.okBtn("确定")
|
||||
.cancelBtn("取消")
|
||||
.confirm('确定更改状态吗?',function () {
|
||||
$.getJSON(self.data('href'), function(json){
|
||||
window.location.reload();
|
||||
})
|
||||
})
|
||||
})
|
||||
});
|
||||
};
|
||||
|
||||
appfun.prototype = {
|
||||
isEmpty: function (val) {
|
||||
switch (typeof val) {
|
||||
case 'undefined':
|
||||
return true;
|
||||
case 'string':
|
||||
if (val.replace(/(^[ \t\n\r]*)|([ \t\n\r]*$)/g, '').length == 0)
|
||||
return true;
|
||||
break;
|
||||
case 'boolean':
|
||||
if (!val)
|
||||
return true;
|
||||
break;
|
||||
case 'number':
|
||||
if (0 === val || isNaN(val))
|
||||
return true;
|
||||
break;
|
||||
case 'object':
|
||||
if (null === val || val.length === 0)
|
||||
return true;
|
||||
for (var i in val) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
select2:function(drawdt){
|
||||
// drawdt true 执行默认操作 false 不执行
|
||||
var $self = this,select = [];
|
||||
//选择器
|
||||
M['plugin']['select2'] = [
|
||||
M['url']['static2_vendor'] + 'select2/select2.min.css',
|
||||
M['url']['static2_vendor'] + 'select2/select2.full.min.js',
|
||||
M['url']['static2_vendor'] + 'select2/i18n/zh-CN.js',
|
||||
];
|
||||
$.include(M['plugin']['select2'],function(){
|
||||
$('[data-plugin="select2"]').each(function(indexs,item){
|
||||
var _self = $(this),
|
||||
defaults = _self.data('default'),
|
||||
select2url = _self.data('select2-url') + '&'+ myDate;
|
||||
|
||||
select[indexs] = _self.select2({
|
||||
placeholder: '输入搜索内容', //提示语
|
||||
ajax: {
|
||||
url: select2url,
|
||||
dataType: 'jsonp',
|
||||
delay: 500,
|
||||
data: function (params) {
|
||||
return {
|
||||
querys: params.term, //search term
|
||||
tname: _self.data('tname'), //指定简短表
|
||||
fiend: _self.data('fiend'), //指定字段值
|
||||
allnone: _self.data('allnone'), //是否只显示应用的值
|
||||
source: _self.data('source'), //查看来源标记
|
||||
condition: _self.data('condition') //查询限制条件
|
||||
};
|
||||
},
|
||||
results: function (data, page) {
|
||||
return {results: data.results};
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
//默认值处理
|
||||
if(!$self.isEmpty(defaults) && drawdt == true){
|
||||
$.getJSON(
|
||||
select2url,
|
||||
{
|
||||
tname: _self.data('tname'), //指定简短表
|
||||
fiend: _self.data('fiend'), //指定字段值
|
||||
allnone: _self.data('allnone'), //是否只显示应用的值
|
||||
source: _self.data('source'), //查看来源标记
|
||||
condition: _self.data('condition'), //查询限制条件
|
||||
default: defaults, //默认值
|
||||
division: _self.data('division') //默认值分隔符
|
||||
},
|
||||
function(obj){
|
||||
$.each(obj.results, function(index, ele) {
|
||||
$.each(ele.children, function(indexop, eleop) {
|
||||
var option = new Option(eleop.text, eleop.id, true, true);
|
||||
select[indexs].append(option).trigger('change');
|
||||
})
|
||||
});
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
});
|
||||
});
|
||||
},
|
||||
datepicker:function(){
|
||||
var $self = this;
|
||||
M['plugin']['datetimepicker']=[
|
||||
M['url']['epl']+'time/jquery.datetimepicker.css',
|
||||
M['url']['epl']+'time/jquery.datetimepicker.js'
|
||||
];
|
||||
$.include(M['plugin']['datetimepicker'], function () {
|
||||
var starttime = $('#date_timepicker_start'),
|
||||
endtime = $('#date_timepicker_end');
|
||||
starttime.datetimepicker({
|
||||
lang:M.synchronous=='cn'?'ch':'en',
|
||||
timepicker:starttime.attr("data-day-type")==2?true:false,
|
||||
format:starttime.attr("data-day-type")==2?'Y-m-d H:i:s':'Y-m-d',
|
||||
// value:starttime.val()?starttime.val():'',
|
||||
// onShow:function( ct ){
|
||||
// this.setOptions({
|
||||
// maxDate:endtime.val()?endtime.val():false
|
||||
// })
|
||||
// },
|
||||
onSelectDate:function(ct,$i){
|
||||
$self.tableaajx(starttime);
|
||||
}
|
||||
});
|
||||
endtime.datetimepicker({
|
||||
lang:M.synchronous=='cn'?'ch':'en',
|
||||
timepicker:endtime.attr("data-day-type")==2?true:false,
|
||||
format:endtime.attr("data-day-type")==2?'Y-m-d H:i:s':'Y-m-d',
|
||||
// value:endtime.val()?endtime.val():'',
|
||||
// onShow:function( ct ){
|
||||
// this.setOptions({
|
||||
// minDate:starttime.val()?starttime.val():false
|
||||
// })
|
||||
// },
|
||||
onSelectDate:function(ct,$i){
|
||||
$self.tableaajx(endtime);
|
||||
}
|
||||
});
|
||||
})
|
||||
},
|
||||
alonetime:function(){
|
||||
var $self = this;
|
||||
M['plugin']['datetimepicker']=[
|
||||
M['url']['epl']+'time/jquery.datetimepicker.css',
|
||||
M['url']['epl']+'time/jquery.datetimepicker.js'
|
||||
];
|
||||
$.include(M['plugin']['datetimepicker'], function () {
|
||||
var alonetime = $('[data-plugin="alonetime"]');
|
||||
alonetime.datetimepicker({
|
||||
lang:M.synchronous=='cn'?'ch':'en',
|
||||
timepicker:alonetime.attr("data-day-type")==2?true:false,
|
||||
format:alonetime.attr("data-day-type")==2?'Y-m-d H:i:s':'Y-m-d',
|
||||
onSelectDate:function(ct,$i){
|
||||
$self.tableaajx(alonetime);
|
||||
}
|
||||
});
|
||||
});
|
||||
},
|
||||
tableaajx:function(timedom){
|
||||
if(typeof datatable != 'undefined'){
|
||||
var $this_datatable=timedom.parents('.dataTable'),
|
||||
datatable_index=$this_datatable.index('.dataTable');
|
||||
if(datatable_index<0) datatable_index=0;
|
||||
datatable[datatable_index].ajax.reload();
|
||||
}
|
||||
},
|
||||
orders:function(){
|
||||
var $self = this;
|
||||
$(document).on('click','a.orderby-link',function (event) {
|
||||
var $this = $(this), arrow = $this.find(".orderby-arrow");
|
||||
if(arrow.length){
|
||||
if($this.find(".desc").length){
|
||||
$self.orderby($this,'asc');
|
||||
}else{
|
||||
//还原
|
||||
$self.orderby($this,'');
|
||||
}
|
||||
}else{
|
||||
$self.orderby($this,'desc');
|
||||
}
|
||||
});
|
||||
},
|
||||
orderby(dom,type){
|
||||
var $self = this;
|
||||
//清楚所有排序
|
||||
$("a.orderby-link").find(".orderby-arrow").remove();
|
||||
$("a.orderby-link").next().val('');
|
||||
//操作当前排序
|
||||
if(type) dom.append('<span class="orderby-arrow '+type+'"></span>');
|
||||
dom.next().val(type);
|
||||
$self.tableaajx(dom);
|
||||
},
|
||||
ownsubmit:function($form,typestr){
|
||||
// 插入submit_type字段
|
||||
if($form.find('[name="submit_type"]').length) $form.append('<input type="hidden" name="submit_type" value=""/>');
|
||||
$form.find('[name="submit_type"]').val(typestr);
|
||||
// 插入表格的all_id字段
|
||||
if($form.find('.dataTable').length){
|
||||
var $table = $form.find('.dataTable'),
|
||||
$checkbox = $table.find('tbody input[type="checkbox"][name="id"]:checked'),
|
||||
all_id='';
|
||||
$checkbox.each(function(index, el) {
|
||||
all_id += all_id?','+$(this).val():$(this).val();
|
||||
})
|
||||
if(!$form.find('[name="all_id"]').length) $form.append('<input type="hidden" name="all_id"/>');
|
||||
$form.find('[name="all_id"]').val(all_id);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
APPFUN = new appfun();
|
||||
|
||||
//缓存
|
||||
$.ajaxSetup({cache:false});
|
||||
});
|
||||
|
|
@ -0,0 +1,72 @@
|
|||
<?php
|
||||
defined('IN_MET') or exit('No permission');
|
||||
$met_title = $data['met_title'];
|
||||
?>
|
||||
<include file='sys_admin/head_v2'/>
|
||||
<div class="appmain">
|
||||
<form method="POST" action="{$data.url.action}" target="_self" enctype="multipart/form-data">
|
||||
<!--二级导航-->
|
||||
{$data.nav_sub}
|
||||
<div class="metadmin-fmbx">
|
||||
<h3 class='example-title'>{$data.met_title}</h3>
|
||||
<dl>
|
||||
<dt><label class='form-control-label'>密码密钥</label></dt>
|
||||
<dd class="form-group">
|
||||
<div class="input-group">
|
||||
<input type="text" name="k_passkey"
|
||||
value="{$data.data.k_passkey}"
|
||||
class="form-control"
|
||||
placeholder='输入密码密钥'
|
||||
required data-fv-notEmpty-message='不能为空'>
|
||||
</div>
|
||||
<span class="text-help m-l-10">巡查人员密钥验证凭证</span>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label class='form-control-label'>签订相关人员</label></dt>
|
||||
<dd class="form-group">
|
||||
<select name='k_wid' class="form-control" data-plugin="select2"
|
||||
data-select2-url="{$data.url.select}"
|
||||
data-tname="workers"
|
||||
data-fiend="id"
|
||||
data-allnone="0"
|
||||
data-source="add_contract_workers"
|
||||
data-default="{$data.data.k_wid}"
|
||||
data-placeholder="输入联系人姓名/电话"
|
||||
data-division=","
|
||||
required data-fv-notEmpty-message='不能为空'>
|
||||
<option value=""></option>
|
||||
</select>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label class='form-control-label'>是否启用</label></dt>
|
||||
<dd class="form-group">
|
||||
<div class="radio-custom radio-primary radio-inline">
|
||||
<input type="radio" id="k_state0" name="k_state" value='0' data-checked='{$data.data.k_state}'
|
||||
required data-fv-notEmpty-message='不能为空' />
|
||||
<label for="k_state0">禁用</label>
|
||||
</div>
|
||||
<div class="radio-custom radio-primary radio-inline">
|
||||
<input type="radio" id="k_state1" name="k_state" value='1'/>
|
||||
<label for="k_state1">启用</label>
|
||||
</div>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label class='form-control-label'>备注</label></dt>
|
||||
<dd class="form-group">
|
||||
<textarea name="k_text" rows="5" placeholder='备注描述' class='form-control m-r-10'>{$data.data.k_text}</textarea>
|
||||
<span class="text-help">简短文字描述备注。</span>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt></dt>
|
||||
<dd>
|
||||
<button type="submit" class='btn btn-primary'>保存</button>
|
||||
</dd>
|
||||
</dl>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<include file='sys_admin/foot_v2'/>
|
||||
|
|
@ -0,0 +1,117 @@
|
|||
<?php
|
||||
defined('IN_MET') or exit('No permission');
|
||||
$met_title = $data['met_title'];
|
||||
?>
|
||||
<include file='sys_admin/head_v2'/>
|
||||
<div class="add_ap_list">
|
||||
<form method="POST" action="{$data.url.action}" enctype="multipart/form-data">
|
||||
<!--二级导航-->
|
||||
{$data.nav_sub}
|
||||
<div class="metadmin-fmbx">
|
||||
<h3 class='example-title'>订单信息:<span class="text-help">{$data.data.h_cid}({$data.data.l_hnumber})</span></h3>
|
||||
<dl class="col-md-6 col-lg-6 col-6">
|
||||
<dt><label class='form-control-label'>投放计划名称</label></dt>
|
||||
<dd class="form-group">
|
||||
<input type="text" name="l_title"
|
||||
value="{$data.data.l_title}"
|
||||
class="form-control"
|
||||
required data-fv-notEmpty-message='不能为空'
|
||||
placeholder='输入投放计划标题'>
|
||||
<span class="text-help m-l-10">主要用来做标记区别</span>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<dl class="col-md-6 col-lg-6 col-6">
|
||||
<dt><label class='form-control-label'>广告时间段</label></dt>
|
||||
<dd class="form-group">
|
||||
<!--合同开始时间-->
|
||||
<input type="hidden" name="h_starttime" value="{$data.data.h_starttime}" data-table-search>
|
||||
<!--合同结束时间-->
|
||||
<input type="hidden" name="h_endtime" value="{$data.data.h_endtime}" data-table-search>
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon">开始时间</span>
|
||||
<input type="text" name="l_starttime" value="{$data.data.l_starttime}"
|
||||
class="form-control w-150"
|
||||
id="date_timepicker_start"
|
||||
data-day-type="1"
|
||||
data-table-search
|
||||
data-plugin="datetosearch"
|
||||
autocomplete="off">
|
||||
<span class="input-group-addon">结束时间</span>
|
||||
<input type="text" name="l_endtime" value="{$data.data.l_endtime}"
|
||||
class="form-control w-150"
|
||||
id="date_timepicker_end"
|
||||
data-day-type="1"
|
||||
data-table-search
|
||||
data-plugin="datetosearch"
|
||||
autocomplete="off">
|
||||
</div>
|
||||
<span class="text-help m-l-10">广告时间段不能超过订单时间段</span>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<dl class="col-md-4 col-lg-4 col-4">
|
||||
<dt><label class='form-control-label'>广告进度状态</label></dt>
|
||||
<dd class="form-group">
|
||||
{$data.para.l_schedule_radio}
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="col-md-4 col-lg-4 col-4">
|
||||
<dt><label class='form-control-label'>广告类型</label></dt>
|
||||
<dd class="form-group">
|
||||
{$data.para.l_type_radio}
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="col-md-4 col-lg-4 col-4">
|
||||
<dt><label class='form-control-label'>投放计划备注</label></dt>
|
||||
<dd class="form-group">
|
||||
<textarea name="l_text" rows="3" placeholder='备注描述' class='form-control m-r-10'>{$data.data.l_text}</textarea>
|
||||
<span class="text-help">简短文字描述备注。</span>
|
||||
</dd>
|
||||
</dl>
|
||||
<h3 class='example-title'>广告位选择</h3>
|
||||
</div>
|
||||
<!-- 广告位-->
|
||||
<div class="row m-t-5">
|
||||
<div class="col-md-9 col-lg-9 col-9">
|
||||
<div class="m-t-10 clearfix">
|
||||
<!--广告位选择是否入库-->
|
||||
<input type="hidden" name="nextstep" value="{$_M.form.nextstep}" data-table-search>
|
||||
<input type="hidden" name="slid" value="{$_M.form.slid}" data-table-search>
|
||||
<!--合同编号-->
|
||||
<input type="hidden" name="l_hnumber" value="{$data.data.l_hnumber}" data-table-search>
|
||||
<!--选择的广告位-->
|
||||
<input type="hidden" name="l_enumber" value="{$data.data.l_enumber}" data-table-search>
|
||||
<input type="hidden" name="l_selectenum" value="{$data.data.l_selectenum}" data-table-search>
|
||||
<!--头部搜索-->
|
||||
{$data.table.search}
|
||||
</div>
|
||||
<table class="dataTable table table-bordered table-hover table-striped w-full m-t-10" id="tables-list" data-table-ajaxurl="{$data.table.ajaxurl}" data-table-pagelength='15' data-plugin="selectable">
|
||||
<thead>{$data.table.thead}</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td colspan="{$data.table.tdcol}">
|
||||
<div class="h-50 vertical-align text-xs-center"><div class="loader vertical-align-middle loader-default"></div></div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tfoot>{$data.table.tfoot}</tfoot>
|
||||
</table>
|
||||
</div>
|
||||
<div class="col-md-3 col-lg-3 col-3">
|
||||
<!--显示选中项-->
|
||||
<div class="metadmin-fmbx m-t-15 p-b-10">
|
||||
<h3 class='example-title'>广告投放结果</h3>
|
||||
<div class="h-700" data-plugin="scrollable" data-skin="scrollable-shadow">
|
||||
<div data-role="container">
|
||||
<div data-role="content">
|
||||
<ul class="list-icons p-y-10 launchshow"></ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<include file='sys_admin/foot_v2'/>
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
<?php
|
||||
defined('IN_MET') or exit('No permission');
|
||||
$met_title = $data['met_title'];
|
||||
?>
|
||||
<include file='sys_admin/head_v2'/>
|
||||
<form method="POST" action="{$data.url.action}" enctype="multipart/form-data">
|
||||
<!--二级导航-->
|
||||
{$data.nav_sub}
|
||||
<div class="clearfix">
|
||||
{$data.top.tips}
|
||||
<!--头部搜索-->
|
||||
{$data.table.search}
|
||||
</div>
|
||||
<table class="dataTable table table-bordered table-hover table-striped w-full m-t-10" id="tableslist" data-table-ajaxurl="{$data.url.ajaxurl}" data-table-pagelength='15' data-plugin="selectable">
|
||||
<thead>{$data.table.thead}</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td colspan="{$data.table.tdcol}">
|
||||
<div class="h-50 vertical-align text-xs-center"><div class="loader vertical-align-middle loader-default"></div></div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tfoot>{$data.table.tfoot}</tfoot>
|
||||
</table>
|
||||
</form>
|
||||
<include file='sys_admin/foot_v2'/>
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
<?php
|
||||
defined('IN_MET') or exit('No permission');
|
||||
$met_title = $data['met_title'];
|
||||
?>
|
||||
<include file='sys_admin/head_v2'/>
|
||||
<div class="appmain">
|
||||
<form method="POST" action="{$data.url.action}" target="_self" enctype="multipart/form-data">
|
||||
<!--二级导航-->
|
||||
{$data.nav_sub}
|
||||
<div class="metadmin-fmbx">
|
||||
<h3 class='example-title'>{$data.met_title}</h3>
|
||||
|
||||
<dl>
|
||||
<dt></dt>
|
||||
<dd>
|
||||
<button type="submit" class='btn btn-primary'>提交</button>
|
||||
</dd>
|
||||
</dl>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<include file='sys_admin/foot_v2'/>
|
||||
|
|
@ -0,0 +1,101 @@
|
|||
<?php
|
||||
defined('IN_MET') or exit('No permission');
|
||||
$met_title = $data['met_title'];
|
||||
?>
|
||||
<include file='sys_admin/head_v2'/>
|
||||
<div class="appmain">
|
||||
<form method="POST" action="{$data.url.action}" target="_self" enctype="multipart/form-data">
|
||||
<!--二级导航-->
|
||||
{$data.nav_sub}
|
||||
<div class="metadmin-fmbx">
|
||||
<h3 class='example-title'>{$data.met_title}</h3>
|
||||
<dl>
|
||||
<dt><label class='form-control-label'>选择小区</label></dt>
|
||||
<dd class="form-group">
|
||||
<select name='v_name' class="form-control" data-plugin="select2"
|
||||
data-select2-url="{$data.url.select}"
|
||||
data-tname="{$data.tname}"
|
||||
data-fiend="v_name"
|
||||
data-allnone="3"
|
||||
data-source="add_village"
|
||||
data-default="{$data.data.v_name}"
|
||||
data-placeholder="输入小区名"
|
||||
required data-fv-notEmpty-message='不能为空'>
|
||||
<option value=""></option>
|
||||
</select>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label class='form-control-label'>选择分类</label></dt>
|
||||
<dd class="form-group">
|
||||
{$data.para.v_type_radio}
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label class='form-control-label'>小区地址</label></dt>
|
||||
<dd>
|
||||
<div data-plugin="select-linkage" data-select-url="{$data.url.city}" class="city-css form-group">
|
||||
<select name="v_province" class="form-control m-r-5 prov" data-checked="{$data.data.v_province}"
|
||||
required data-fv-notEmpty-message="不能为空"></select>
|
||||
<select name="v_city" class="form-control m-r-5 city" data-checked="{$data.data.v_city}"
|
||||
required data-fv-notEmpty-message="不能为空"></select>
|
||||
<select name="v_district" class="form-control m-r-5 dist" data-checked="{$data.data.v_district}"
|
||||
required data-fv-notEmpty-message="不能为空"></select>
|
||||
</div>
|
||||
<div class="form-group clearfix">
|
||||
<input type="text" name="v_address" value="{$data.data.v_address}" placeholder="请输入详细地址" class="form-control"
|
||||
required data-fv-notEmpty-message="不能为空">
|
||||
</div>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label class='form-control-label'>相关联系人</label></dt>
|
||||
<dd class="form-group">
|
||||
<select name='v_wid[]' class="form-control" multiple data-plugin="select2"
|
||||
data-select2-url="{$data.url.select}"
|
||||
data-tname="workers"
|
||||
data-fiend="id"
|
||||
data-allnone="0"
|
||||
data-source="add_village_workers"
|
||||
data-default="{$data.data.v_wid}"
|
||||
data-placeholder="输入联系人姓名/电话"
|
||||
data-division="," >
|
||||
<option value=""></option>
|
||||
</select>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label class='form-control-label'>小区均价</label></dt>
|
||||
<dd class="form-group">
|
||||
<input type="text" name="v_price"
|
||||
value="{$data.data.v_price}"
|
||||
class="form-control"
|
||||
required data-fv-notEmpty-message='不能为空'>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label class='form-control-label'>社区居住规模</label></dt>
|
||||
<dd class="form-group">
|
||||
<input type="text" name="v_psize"
|
||||
value="{$data.data.v_psize}"
|
||||
class="form-control"
|
||||
required data-fv-notEmpty-message='不能为空'>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label class='form-control-label'>备注</label></dt>
|
||||
<dd class="form-group">
|
||||
<textarea name="v_text" rows="5" placeholder='备注描述' class='form-control m-r-10'>{$data.data.v_text}</textarea>
|
||||
<span class="text-help">简短文字描述备注。</span>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt></dt>
|
||||
<dd>
|
||||
<button type="submit" class='btn btn-primary'>保存</button>
|
||||
</dd>
|
||||
</dl>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<include file='sys_admin/foot_v2'/>
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
<?php
|
||||
defined('IN_MET') or exit('No permission');
|
||||
$met_title = $data['met_title'];
|
||||
?>
|
||||
<include file='sys_admin/head_v2'/>
|
||||
<div class="appmain">
|
||||
<form method="POST" action="{$data.url.action}" target="_self" enctype="multipart/form-data">
|
||||
<!--二级导航-->
|
||||
{$data.nav_sub}
|
||||
<div class="metadmin-fmbx">
|
||||
<h3 class='example-title'>{$data.met_title}</h3>
|
||||
<dl>
|
||||
<dt><label class='form-control-label'>职位</label></dt>
|
||||
<dd class="form-group">
|
||||
{$data.para.radio}
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label class='form-control-label'>姓名</label></dt>
|
||||
<dd class="form-group">
|
||||
<input type="text" name="w_name"
|
||||
value="{$data.data.w_name}"
|
||||
class="form-control"
|
||||
required data-fv-notEmpty-message='不能为空'>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label class='form-control-label'>联系电话</label></dt>
|
||||
<dd>
|
||||
<input type="text" name="w_tel" value="{$data.data.w_tel}" data-plugin='tokenfield' data-delimiter=','/>
|
||||
<span class="text-help m-l-10">可备注多个联系电话,输入完成一个回车后再输入下一个</span>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><label class='form-control-label'>备注</label></dt>
|
||||
<dd class="form-group">
|
||||
<textarea name="w_text" rows="5" placeholder='备注描述' class='form-control m-r-10'>{$data.data.w_text}</textarea>
|
||||
<span class="text-help">简短文字描述备注。</span>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt></dt>
|
||||
<dd>
|
||||
<button type="submit" class='btn btn-primary'>保存</button>
|
||||
</dd>
|
||||
</dl>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<include file='sys_admin/foot_v2'/>
|
||||
|
|
@ -0,0 +1,168 @@
|
|||
<?php
|
||||
defined('IN_MET') or exit ('No permission');
|
||||
|
||||
load::sys_func('file');
|
||||
|
||||
class uninstall {
|
||||
|
||||
private $appno; //应用NO值
|
||||
private $m_name; //应用文件夹
|
||||
private $del_dirs = []; //需要删除的文件夹,以根目录为准
|
||||
|
||||
public function __construct() {
|
||||
global $_M;
|
||||
|
||||
$this->appno = $_M['form']['no']; //获取NO
|
||||
|
||||
//需要删除的文件名
|
||||
$this->del_dirs[] = self::firstsql();
|
||||
$this->del_dirs[] = $this->m_name?'app/app/'.$this->m_name:'';
|
||||
|
||||
//判断是否允许卸载
|
||||
if(file_exists(PATH_ALL_APP. $this->m_name."/config/uninstall.lock")){
|
||||
turnover("{$_M['url']['own_form']}a=doindex","禁止卸载");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function dodel() {
|
||||
global $_M;
|
||||
//删除一些提前删除的内容
|
||||
|
||||
//删除自定义表
|
||||
self::zdysql();
|
||||
|
||||
//删除固定的app表
|
||||
self::appsql();
|
||||
|
||||
//删除应用文件
|
||||
// $this->delfile();
|
||||
}
|
||||
|
||||
//优先执行代码[推荐]
|
||||
private function firstsql() {
|
||||
global $_M;
|
||||
//查询应用的文件夹
|
||||
$mname = self::sqlone('applist');
|
||||
$this->m_name = $mname['m_name'];
|
||||
//查询应用是否使用栏目
|
||||
$file = self::sqlone('column'," module='{$this->appno}' ");
|
||||
return $file['foldername'];
|
||||
}
|
||||
|
||||
//删除自定义表
|
||||
private function zdysql() {
|
||||
global $_M;
|
||||
//公用表
|
||||
$cloud = ['cloud_config'];
|
||||
//自定义表
|
||||
$table = file_get_contents(PATH_ALL_APP.$this->m_name.'/config/table');
|
||||
$table = stringto_array($table,',');
|
||||
//自定义表删除
|
||||
$zdy = array_diff($table,$cloud);
|
||||
$zdys = [];
|
||||
foreach ($zdy as $val){
|
||||
$zdys[] = $this->m_name.'_'.$val;
|
||||
}
|
||||
//删除公用表对应应用数据,并查询是否符合删除表的要求
|
||||
foreach ($cloud as $val) {
|
||||
//判断是否要删除
|
||||
if(in_array($val, $table)) $zdys[] = self::cloud($val);
|
||||
}
|
||||
//删除表
|
||||
foreach ($zdys as $val){
|
||||
self::deltablesql($val);
|
||||
}
|
||||
//删除配置文件
|
||||
del_table(arrayto_string($zdys,'|'));
|
||||
}
|
||||
|
||||
//删除固定的app表
|
||||
private function appsql() {
|
||||
global $_M;
|
||||
//删除栏目接口表
|
||||
self::delsql('ifcolumn');
|
||||
|
||||
//删除应用生成文件所调用事件的信息表
|
||||
self::delsql('ifcolumn_addfile');
|
||||
|
||||
//删除会员侧导航信息表
|
||||
self::delsql('ifmember_left');
|
||||
|
||||
//删除应用插件表
|
||||
self::delsql('app_plugin');
|
||||
|
||||
//删除网站后台栏目信息表
|
||||
$where = "field='{$this->appno}'";
|
||||
self::delsql('admin_column',$where);
|
||||
|
||||
//删除网站栏目信息表
|
||||
$where = "module='{$this->appno}'";
|
||||
self::delsql('column',$where);
|
||||
|
||||
//删除语言表
|
||||
$where = "app='{$this->appno}'";
|
||||
self::delsql('language',$where);
|
||||
|
||||
//删除应用注册表
|
||||
self::delsql('applist');
|
||||
}
|
||||
|
||||
//删除应用文件夹
|
||||
private function delfile() {
|
||||
foreach ($this->del_dirs as $dir){
|
||||
if(file_exists(PATH_WEB.$dir) && $dir != null) deldir(PATH_WEB.$dir);
|
||||
}
|
||||
}
|
||||
|
||||
//对公用配置表卸载处理
|
||||
private function cloud($tname) {
|
||||
global $_M;
|
||||
$where = "m_name='{$this->m_name}'";
|
||||
if(self::sqlcounter($tname,$where) > 0){
|
||||
self::delsql($tname,$where);
|
||||
}
|
||||
if(self::sqlcounter($tname) == 0){
|
||||
return $tname;
|
||||
}
|
||||
}
|
||||
|
||||
//公共查询方法
|
||||
private function sqlone($tname,$where = '') {
|
||||
global $_M;
|
||||
$table = $_M['table'][$tname];
|
||||
if(!$where){
|
||||
$where = "no='{$this->appno}'";
|
||||
}
|
||||
return DB::get_one("select * from {$table} where {$where}");
|
||||
}
|
||||
|
||||
//公共查询方法
|
||||
private function sqlcounter($tname,$where = '') {
|
||||
global $_M;
|
||||
$table = $_M['table'][$tname];
|
||||
if($where){
|
||||
$where = 'WHERE '.$where;
|
||||
}
|
||||
return DB::counter("{$table} {$where}");
|
||||
}
|
||||
|
||||
//公共删除数据
|
||||
private function delsql($tname,$where = '') {
|
||||
global $_M;
|
||||
$table = $_M['table'][$tname];
|
||||
if(!$where){
|
||||
$where = "no='{$this->appno}'";
|
||||
}
|
||||
DB::query("DELETE FROM {$table} WHERE {$where}");
|
||||
}
|
||||
|
||||
//公共删除表
|
||||
private function deltablesql($tname) {
|
||||
global $_M;
|
||||
$table = $_M['table'][$tname];
|
||||
DB::query("DROP TABLE `{$table}`");
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
|
|
@ -0,0 +1,454 @@
|
|||
<?php
|
||||
|
||||
defined('IN_MET') or exit('No permission');
|
||||
|
||||
load::sys_class('admin');
|
||||
load::own_func('appcmp');
|
||||
load::own_class('../traits/appcmp');
|
||||
|
||||
//后台类
|
||||
class appadmin extends admin{
|
||||
|
||||
# URL上c的值
|
||||
public $u_urlc;
|
||||
# URL上a的值
|
||||
public $u_urla;
|
||||
# URL上的参数
|
||||
public $u_para;
|
||||
|
||||
# 管理员权限
|
||||
public $adop = ['met'=>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 .= "<li class='nav-item'><a class='nav-link {$active}' href='{$surl}'>{$sname}</a></li>";
|
||||
}
|
||||
$this->input['nav_sub'] = empty($li)?'':'<div class="m-t-10 app-sub-nav"><ul class="p-b-10 nav nav-tabs nav-tabs-line">'.$li.'</ul></div>';
|
||||
}
|
||||
|
||||
//执行一级目录的操作
|
||||
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 .= '<span class="text-help m-l-10"><a target="_blank" href="'.$addparaurl.'">设置选项</a></span>';
|
||||
}
|
||||
|
||||
//参数单选组成
|
||||
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 .= '<div class="radio-custom radio-primary radio-inline">
|
||||
<input type="radio" id="'.$name.$key.'" name="'.$name.'" value="'.$p_value.'" '.$first.' />
|
||||
<label for="'.$name.$key.'">'.$p_name.'</label>
|
||||
<span class="text-help m-l-10">'.$p_text.'</span>
|
||||
</div>';
|
||||
$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 .= '<div class="checkbox-custom checkbox-primary checkbox-inline">
|
||||
<input type="checkbox" id="'.$name.$key.'" name="'.$name.'" value="'.$p_value.'" '.$first.' />
|
||||
<label for="'.$name.$key.'">'.$p_name.'</label>
|
||||
<span class="text-help m-l-10">'.$p_text.'</span>
|
||||
</div>';
|
||||
$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_uno = self::paralist(['p_type' => 4, 'p_value' => $elevator['e_uno'] ]);
|
||||
//电梯号
|
||||
$e_eno = self::paralist(['p_type' => 5, 'p_value' => $elevator['e_eno'] ]);
|
||||
//广告位置
|
||||
$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_uno['p_name'].$e_eno['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 '<font class="'.$color[$state].'">'.$str[$state].'</font>';
|
||||
}
|
||||
|
||||
//字体颜色
|
||||
public function str_color($state,$str,$weight = 'unset') {
|
||||
global $_M,$_YW;
|
||||
$color = ['red-600','green-600','cyan-600','blue-600'];
|
||||
return '<font class="'.$color[$state].' font-weight-'.$weight.'">'.$str.'</font>';
|
||||
}
|
||||
|
||||
//标签形式的分割显示
|
||||
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 .= '<span class="tag tag-sm '.$class[$type].'">'.$val.'</span> ';
|
||||
$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 '<span class="tag tag-sm '.$class[$type].'">'.$title.'</span> ';
|
||||
}
|
||||
|
||||
//参数的对应值获取
|
||||
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 '<span data-href="'.$url.'" class="btn-cursor-pointer tag tag-sm tag-outline '.$color[$value].'" >'.$array[$value].'</span>';
|
||||
}
|
||||
|
||||
//处理多选的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_uno' => $val['e_uno'],
|
||||
'e_eno' => $val['e_eno'],
|
||||
'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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
|
|
@ -0,0 +1,365 @@
|
|||
<?php
|
||||
|
||||
defined('IN_MET') or exit('No permission');
|
||||
|
||||
load::sys_class('web');
|
||||
load::own_class('../traits/appcmp');
|
||||
|
||||
//前台类
|
||||
class appweb extends web {
|
||||
|
||||
//开始时间
|
||||
public $time;
|
||||
public $datetime;
|
||||
|
||||
// 调用类
|
||||
public $tsql;
|
||||
public $cloud;
|
||||
|
||||
|
||||
public $href;
|
||||
public $sign = true;
|
||||
|
||||
//微信通知参数
|
||||
public $webase;
|
||||
public $postdata = [];
|
||||
public $tem_id = '';
|
||||
|
||||
public function __construct() {
|
||||
global $_M, $_YW;
|
||||
parent::__construct();
|
||||
self::cmp_load();
|
||||
self::loadp('cmp_a,cmp_ac');
|
||||
//开始时间
|
||||
$this->time = time();
|
||||
$this->datetime = self::data_time($this->time);
|
||||
$this->tsql = load::own_class('tsql','new');
|
||||
$this->cloud = load::own_class('cloud','new');
|
||||
// self::basics();
|
||||
|
||||
ini_set("display_errors", "On");
|
||||
error_reporting(E_ERROR);
|
||||
}
|
||||
|
||||
use appcmp;
|
||||
|
||||
//生成CSS
|
||||
public function metcss() {
|
||||
global $_M,$_YW;
|
||||
$metcss = PATH_APP_FILE.'web/templates/met/css/metinfo.css';
|
||||
if(!file_exists($metcss)) self::merge_css();
|
||||
}
|
||||
|
||||
//前台常用信息
|
||||
protected function basics() {
|
||||
global $_M,$_YW;
|
||||
$this->input['appcore'] .= ' data-m_name="'.$this->m_name.'" ';
|
||||
$this->input['appcore'] .= ' data-own_name="'.$_M['url']['own_name'].'" ';
|
||||
}
|
||||
|
||||
//合同内容
|
||||
public function postdata($type,$arr) {
|
||||
global $_M, $_YW;
|
||||
//清理缓存
|
||||
$this->postdata = [];
|
||||
$this->tem_id = '';
|
||||
//微信模板
|
||||
switch ($type) {
|
||||
case 1:
|
||||
//预约到期提醒
|
||||
//模板ID
|
||||
$this->tem_id = $_YW['c']['tem_ida'];
|
||||
//内容
|
||||
$this->postdata = [
|
||||
//开头 提醒的内容
|
||||
'first' => ['value' => $arr['first']['value'], 'color' => $arr['first']['color'] ],
|
||||
// 合同开始日期
|
||||
'keyword1' => ['value' => $arr['h_starttime'] ],
|
||||
// 合同结束日期
|
||||
'keyword2' => ['value' => $arr['h_endtime'] ],
|
||||
//结尾
|
||||
'remark' => ['value' =>
|
||||
"合同编号:{$arr['h_number']}".PHP_EOL
|
||||
."签定企业:{$arr['c_allname']}".PHP_EOL
|
||||
."相关人员:{$arr['wnamestr']}".PHP_EOL
|
||||
."提醒时间:{$this->datetime}"
|
||||
],
|
||||
];
|
||||
break;
|
||||
case 2:
|
||||
//合同到期提醒
|
||||
//模板ID
|
||||
$this->tem_id = $_YW['c']['tem_idb'];
|
||||
//内容
|
||||
$this->postdata = [
|
||||
//开头 提醒的内容
|
||||
'first' => ['value' => $arr['first']['value'], 'color' => $arr['first']['color'] ],
|
||||
// 合同编号
|
||||
'keyword1' => ['value' => $arr['h_number'] ],
|
||||
// 合同开始日期
|
||||
'keyword2' => ['value' => $arr['h_starttime'] ],
|
||||
// 合同结束日期
|
||||
'keyword3' => ['value' => $arr['h_endtime'] ],
|
||||
//结尾
|
||||
'remark' => ['value' =>
|
||||
"签定企业:{$arr['c_allname']}".PHP_EOL
|
||||
."相关人员:{$arr['wnamestr']}".PHP_EOL
|
||||
."通知时间:{$this->datetime}"
|
||||
],
|
||||
];
|
||||
break;
|
||||
case 3:
|
||||
//汇总数据通知
|
||||
//模板ID
|
||||
$this->tem_id = $_YW['c']['tem_idc'];
|
||||
//内容
|
||||
$this->postdata = [
|
||||
//开头 提醒的内容
|
||||
'first' => ['value' => '合同提醒汇总结果,请登录后台查看详情', 'color' => '#BDBDBD'],
|
||||
// 合同编号
|
||||
'keyword1' => ['value' => '山东梯美广告有限公司' ],
|
||||
// 合同开始日期
|
||||
'keyword2' => ['value' => $this->datetime ],
|
||||
// 合同结束日期
|
||||
'keyword3' => ['value' => array_sum($arr) ],
|
||||
//结尾
|
||||
'remark' => ['value' =>
|
||||
"定时提醒:{$arr['daya']}".PHP_EOL
|
||||
."三天到期:{$arr['dayb']}".PHP_EOL
|
||||
."今天到期:{$arr['dayc']}".PHP_EOL
|
||||
."今天投放开始总数:{$arr['dayd']}"
|
||||
],
|
||||
];
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return $this;
|
||||
|
||||
}
|
||||
|
||||
|
||||
//微信模板消息发送wesend
|
||||
public function openid($openid = '')
|
||||
{
|
||||
global $_M, $_YW;
|
||||
$openid .= ','.$_YW['c']['openid'];
|
||||
$openid = stringto_array($openid,',');
|
||||
foreach ($openid as $id) {
|
||||
if($id) self::temmsg($id);
|
||||
}
|
||||
return $this;
|
||||
}
|
||||
|
||||
//微信合同到期提醒
|
||||
private function temmsg($openid)
|
||||
{
|
||||
global $_M, $_YW;
|
||||
$return = ['errcode' => -1, 'errmsg' => "系统错误,用户openid:{$openid},消息模板Tem_id:{$this->tem_id}"];
|
||||
if($openid && $this->tem_id){
|
||||
$return = $this->webase->post_template_msg($openid, $this->tem_id, '', $this->postdata);
|
||||
}
|
||||
$json = is_array($return)?json_encode($return,JSON_UNESCAPED_UNICODE):$return;
|
||||
//发送记录
|
||||
$field = [
|
||||
'openid' => $openid,
|
||||
'text' => $this->postdata['first']['value'],
|
||||
'content' => json_encode($this->postdata,JSON_UNESCAPED_UNICODE),
|
||||
'returntext' => $json,
|
||||
'state' => $return['errcode'] == 0?1:0,
|
||||
'exetime' => $this->datetime,
|
||||
'addtime' => $this->datetime
|
||||
];
|
||||
$this->tsql->table('welog')->field($field)->add();
|
||||
return $return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//参数处理
|
||||
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_uno = self::paralist(['p_type' => 4, 'p_value' => $elevator['e_uno'] ]);
|
||||
//电梯号
|
||||
$e_eno = self::paralist(['p_type' => 5, 'p_value' => $elevator['e_eno'] ]);
|
||||
//广告位置
|
||||
$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_uno['p_name'].$e_eno['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 '<font class="'.$color[$state].'">'.$str[$state].'</font>';
|
||||
}
|
||||
|
||||
//字体颜色
|
||||
public function str_color($state,$str,$weight = 'unset') {
|
||||
global $_M,$_YW;
|
||||
$color = ['red-600','green-600','cyan-600','blue-600'];
|
||||
return '<font class="'.$color[$state].' font-weight-'.$weight.'">'.$str.'</font>';
|
||||
}
|
||||
|
||||
//标签形式的分割显示
|
||||
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 .= '<span class="tag tag-sm '.$class[$type].'">'.$val.'</span> ';
|
||||
$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 '<span class="tag tag-sm '.$class[$type].'">'.$title.'</span> ';
|
||||
}
|
||||
|
||||
//参数的对应值获取
|
||||
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 '<span data-href="'.$url.'" class="btn-cursor-pointer tag tag-sm tag-outline '.$color[$value].'" >'.$array[$value].'</span>';
|
||||
}
|
||||
|
||||
//处理多选的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_uno' => $val['e_uno'],
|
||||
'e_eno' => $val['e_eno'],
|
||||
'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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
|
|
@ -0,0 +1,121 @@
|
|||
<?php
|
||||
|
||||
defined('IN_MET') or exit('No permission');
|
||||
|
||||
//所有公用方法
|
||||
class cloud{
|
||||
|
||||
public $tsql;
|
||||
|
||||
public function __construct() {
|
||||
global $_M, $_YW;
|
||||
$this->tsql = load::own_class('tsql','new');
|
||||
}
|
||||
|
||||
/*
|
||||
* 把数组转成JSON,用于ajax返回,可以用于普通json请求返回,也可以用于跨域的ajax的jsonp格式的数据请求返回。
|
||||
* @param array $back 输出字符串或数组
|
||||
* @param string $callback ajax的回调函数的名称
|
||||
*/
|
||||
public function jsoncallback($back, $callback = 'callback') {
|
||||
global $_M;
|
||||
header('Content-type: application/x-javascript');
|
||||
$callback = $_M['form'][$callback];
|
||||
$json = json_encode($back,JSON_UNESCAPED_UNICODE);
|
||||
echo $callback?$callback . '(' . $json . ')':$json;
|
||||
}
|
||||
|
||||
//城市信息
|
||||
public function citydata() {
|
||||
global $_M,$_YW;
|
||||
$dirfile = PATH_APP_FILE.'public/js/city/city.min.json';
|
||||
if (!file_exists($dirfile)){
|
||||
$citys = json_decode(file_get_contents(PATH_SYS."include/static2/vendor/select-linkage/citydata.min.json"),true);
|
||||
$i = 0;
|
||||
$array = [];
|
||||
foreach ($citys['citylist'] as $key => $val) {
|
||||
if(version_compare($_M['config']['metcms_v'],'6.2.0','>=')){
|
||||
$val['p'] = substr($val['p'],0,stripos($val['p'],'('));
|
||||
$array[$key] = $val;
|
||||
}else{
|
||||
foreach ($val as $pkey => $pval) {
|
||||
array_unshift($pval,['n'=>'请选择']);
|
||||
if(array_level($pval) == 4){
|
||||
foreach ($pval as $akey => $aval) {
|
||||
if(array_level($aval['a']) == 2) array_unshift($aval['a'],['s'=>'请选择']);
|
||||
$array[$key][$pkey][$akey] = $aval;
|
||||
}
|
||||
//跳过
|
||||
continue;
|
||||
}
|
||||
$array[$key][$pkey] = $pval;
|
||||
}
|
||||
}
|
||||
}
|
||||
$citydata = ['citylist'=>$array];
|
||||
//生成缓存
|
||||
$jsonstr = json_encode($citydata,JSON_UNESCAPED_UNICODE);
|
||||
load::sys_func('file');
|
||||
makefile($dirfile);
|
||||
file_put_contents($dirfile, $jsonstr);
|
||||
$citystr = self::jsoncallback($citydata);
|
||||
}else{
|
||||
$citystr = file_get_contents($dirfile);
|
||||
}
|
||||
//返回信息
|
||||
echo $citystr;
|
||||
}
|
||||
|
||||
public function city_url() {
|
||||
global $_M,$_YW;
|
||||
$dirfile = PATH_APP_FILE.'public/js/city/city.min.json';
|
||||
if(file_exists($dirfile)){
|
||||
$url = $_M['url']['app']."{$_YW['n']}/public/js/city/city.min.json";
|
||||
}else{
|
||||
$url = class_exists('appadmin')?$_M['url']['own_name']."c=ajax&a=docitys":$_M['url']['own_name']."c=index&a=docitys";
|
||||
}
|
||||
return $url;
|
||||
}
|
||||
|
||||
//计算时间相差天数
|
||||
public function summary() {
|
||||
global $_M,$_YW;
|
||||
$summoney = $this->tsql->table('contract')->qfield(" Sum(h_tprice) as tprice ")->where(" h_tprice IS NOT NULL ")->one();
|
||||
return [
|
||||
'village' => $this->tsql->table('village')->count(),
|
||||
'elevator' => $this->tsql->table('elevator')->count(),
|
||||
'vfree' => $this->tsql->table_unset()
|
||||
->tables(['elevator','el'], 'LEFT JOIN')
|
||||
->tables(['launch','la'], 'ON find_in_set( el.e_number, la.l_enumber )')
|
||||
->where(" la.l_endtime < CURDATE() OR la.l_starttime > CURDATE() OR la.id IS NULL ")
|
||||
->count(" distinct e_number "),
|
||||
'vlease' => $this->tsql->table_unset()
|
||||
->tables(['elevator','el'], 'LEFT JOIN')
|
||||
->tables(['launch','la'], 'ON find_in_set( el.e_number, la.l_enumber )')
|
||||
->where(" NOT(la.l_endtime < CURDATE() OR la.l_starttime > CURDATE() ) ")
|
||||
->count(" distinct e_number "),
|
||||
'vendday' => $this->tsql->table_unset()
|
||||
->tables(['elevator','el'], 'LEFT JOIN')
|
||||
->tables(['launch','la'], 'ON find_in_set( el.e_number, la.l_enumber )')
|
||||
->where(" la.l_endtime BETWEEN CURDATE( ) AND date_add( CURDATE( ), INTERVAL 7 DAY ) ")
|
||||
->count(" distinct e_number "),
|
||||
'vprerow' => $this->tsql->table_unset()
|
||||
->tables(['elevator','el'], 'LEFT JOIN')
|
||||
->tables(['launch','la'], 'ON find_in_set( el.e_number, la.l_enumber )')
|
||||
->where(" la.l_starttime > CURDATE() ")
|
||||
->count(" distinct e_number "),
|
||||
'contract' => $this->tsql->table('contract')->count(),
|
||||
'launch' => $this->tsql->table('launch')->count(),
|
||||
'endcontract' => $this->tsql->table('contract')->where(" h_endtime < CURDATE() ")->count(),
|
||||
'endlaunch' => $this->tsql->table('launch')->where(" l_endtime < CURDATE() ")->count(),
|
||||
'customer' => $this->tsql->table('customer')->count(),
|
||||
// 'workers' => $this->tsql->table('workers')->count(),
|
||||
'summoney' => intval($summoney['tprice']),
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,111 @@
|
|||
<?php
|
||||
|
||||
# MetInfo Enterprise Content Management System
|
||||
# Copyright (C) MetInfo Co.,Ltd (http://www.metinfo.cn). All rights reserved.
|
||||
|
||||
defined('IN_MET') or exit('No permission');
|
||||
|
||||
/**
|
||||
* 表格数据获取类
|
||||
* @param array $rearray 表格数组返回数组
|
||||
*/
|
||||
class tabledata {
|
||||
|
||||
protected $rearray;
|
||||
public $error;
|
||||
|
||||
/**
|
||||
* 获取表查询数据
|
||||
* @param string $table 表名
|
||||
* @param string $field 表字段
|
||||
* @param string $where where条件
|
||||
* @param string $order order by条件
|
||||
* @param string $sql 自定义SQL语句
|
||||
* @return array 查询数据
|
||||
*/
|
||||
public function getdata($table, $field = '*', $where = '', $order = '', $sql = '',$multi_table = false) {
|
||||
global $_M;
|
||||
//dump( $_M['form']);
|
||||
/* 获取表格ajax传递的参数 */
|
||||
$length = $_M['form']['length']; //每页显示数量
|
||||
$start = $_M['form']['start']; //读取数据的起点
|
||||
$draw = $_M['form']['draw']; //累计执行次数,无作用但必须回传
|
||||
// if($_M['form']['tablepage_json']&&$start==0&&$draw!=1){
|
||||
// $cook = explode("|",$_M['form']['tablepage_json']) ;
|
||||
// $u = "{$_M['form']['n']},{$_M['form']['c']},{$_M['form']['a']}";
|
||||
// if($cook[1]==$u){
|
||||
// $start = $cook[0]*$_M['form']['length'];
|
||||
// }
|
||||
// }else{
|
||||
// met_setcookie('tablepage_json', $_M['form']['start']/$_M['form']['length']."|{$_M['form']['n']},{$_M['form']['c']},{$_M['form']['a']}");
|
||||
// }
|
||||
|
||||
if (!$sql) {
|
||||
/* 查询表 */
|
||||
if ($where) {
|
||||
$conds .= " WHERE {$where} ";
|
||||
}
|
||||
if ($order) {
|
||||
$conds .= " ORDER BY {$order} ";
|
||||
}
|
||||
//整理查询条件
|
||||
|
||||
$query = "SELECT {$field} FROM {$table} {$conds} LIMIT {$start},{$length}"; //mysql语句
|
||||
$array = DB::get_all($query); //执行查询,获得数组
|
||||
$error = DB::error();
|
||||
if ($error) {
|
||||
$this->error = $query . "<br />" . $error;
|
||||
} else {
|
||||
$this->error = '';
|
||||
}
|
||||
$total = DB::counter($table, $conds, '*'); //获取总数量,计算总页数
|
||||
} else {
|
||||
//用来解决sql语句复杂的情况下 无法正确计算总条数的BUG
|
||||
$query = $sql . " LIMIT {$start},{$length}";
|
||||
$array = DB::get_all($query);
|
||||
$error = DB::error();
|
||||
$this->error = $error?$query . "<br />" . $error:0;
|
||||
//总数
|
||||
$where = trim($where);
|
||||
if (strtolower(substr($where, 0, 5)) != 'where' && $where) $where = "WHERE " . $where;
|
||||
$countsql = " SELECT COUNT(*) FROM {$table} {$where} ";
|
||||
if($multi_table) $countsql = " SELECT count(*) FROM ($sql) num ";
|
||||
$result = DB::query($countsql);
|
||||
$fetch_row = DB::fetch_row($result);
|
||||
$total = $fetch_row[0];
|
||||
}
|
||||
|
||||
/* 回传数组处理 */
|
||||
$this->rarray = array();
|
||||
$this->rarray['draw'] = $draw; //回传执行次数
|
||||
$this->rarray['recordsTotal'] = $total; //回传总数量
|
||||
$this->rarray['recordsFiltered'] = $total; //回传筛选过的总数量,暂无作用,但必须回传
|
||||
|
||||
// if(class_exists('admin') || class_exists('app')){
|
||||
$this->rarray['sql'] = $query; //返回sql语句
|
||||
$this->rarray['array'] = $array; //返回sql语句
|
||||
$this->rarray['form'] = $_M['form']; //返回sql语句
|
||||
$this->rarray['sqlse'] = $sql; //返回sql语句
|
||||
$this->rarray['sqltotal'] = $countsql; //返回sql语句
|
||||
// }
|
||||
return $array;
|
||||
}
|
||||
|
||||
/**
|
||||
* 把处理后的数组已json方式输出到页面上,供AJAX读取。
|
||||
* @param array $rdata 需要转成json的数组
|
||||
*/
|
||||
public function rdata($rdata) {
|
||||
if ($rdata) {
|
||||
$this->rarray['data'] = $rdata;
|
||||
} else {
|
||||
$this->rarray['data'][''] = '';
|
||||
}
|
||||
jsoncallback($this->rarray); //回传json格式
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
# This program is an open source system, commercial use, please consciously to purchase commercial license.
|
||||
# Copyright (C) MetInfo Co., Ltd. (http://www.metinfo.cn). All rights reserved.
|
||||
?>
|
||||
|
|
@ -0,0 +1,387 @@
|
|||
<?php
|
||||
|
||||
defined('IN_MET') or exit('No permission');
|
||||
|
||||
# 数据结构处理
|
||||
class tsql {
|
||||
|
||||
private $sql = [];
|
||||
private $m_name = M_NAME;
|
||||
private $special = [];
|
||||
private $ufield = [];
|
||||
private $query;
|
||||
private $multi_table = false; //采用分组才会采用子查询计算总数
|
||||
|
||||
public function __construct() {
|
||||
global $_M;
|
||||
self::table_unset();
|
||||
}
|
||||
|
||||
# 清空
|
||||
public function table_unset() {
|
||||
global $_M;
|
||||
unset($this->sql, $this->special,$this->ufield);
|
||||
return $this;
|
||||
}
|
||||
|
||||
# 数据库
|
||||
# $sign false 不添加应用文件名前缀
|
||||
public function table($tname,$sign = true) {
|
||||
global $_M;
|
||||
self::table_unset();
|
||||
$this->sql['table'] = self::full_table_name($tname,$sign);
|
||||
return $this;
|
||||
}
|
||||
|
||||
# 多表联合查询数据库,制作表的联合方式,通过多次调用来实现
|
||||
# $tname 包含缩写数据名和 缩写名
|
||||
# $join 数据库连接方式
|
||||
# $sign false 不添加应用文件名前缀
|
||||
#
|
||||
public function tables($tname = [],$join = '',$sign = true) {
|
||||
global $_M;
|
||||
list($name,$ab) = $tname;
|
||||
$table = self::full_table_name($name,$sign);
|
||||
$this->sql['table'] .= $table." AS {$ab} {$join} ";
|
||||
return $this;
|
||||
}
|
||||
|
||||
# 需要特殊处理的值,例如:counts+1 等类似的 或者执行函数
|
||||
# 传入的为特殊处理的值,并 非字段名
|
||||
public function special($_special) {
|
||||
global $_M;
|
||||
$this->special = is_array($_special)?$_special:[$_special];
|
||||
return $this;
|
||||
}
|
||||
|
||||
# 需要删除的字段,仅支持约束条件下
|
||||
# 目前仅用于adup()时的 unique() 方法
|
||||
public function ufield($_field = '') {
|
||||
global $_M;
|
||||
$this->ufield = is_array($_field)?$_field:[$_field];
|
||||
return $this;
|
||||
}
|
||||
|
||||
# 查询字段
|
||||
# 查询或者多条插入信息
|
||||
public function qfield($_field = '*') {
|
||||
global $_M;
|
||||
if(is_array($_field)) $_field = arrayto_string($_field, ',');
|
||||
$this->sql['field'] = $_field;
|
||||
return $this;
|
||||
}
|
||||
|
||||
# 插入更新字段
|
||||
# $sign 单条插入或者更新设置其他值,查询或者多条插入信息时使用qfield()
|
||||
public function field($_field = '') {
|
||||
global $_M;
|
||||
if(is_array($_field)) $_field = self::field_arr($_field);
|
||||
$this->sql['field'] = $_field;
|
||||
return $this;
|
||||
}
|
||||
|
||||
# 分组查询 $_having 同where 一样
|
||||
public function group($_group = '',$_having = '') {
|
||||
global $_M;
|
||||
|
||||
if(is_array($_group)) $_group = arrayto_string($_group, ',');
|
||||
if(!empty($_group)) $this->sql['group'] = " GROUP BY " . $_where;
|
||||
if($_group){
|
||||
$this->multi_table = true;
|
||||
if(is_array($_having)) $_having = self::where_arr($_having);
|
||||
if(!empty($_having)) $this->sql['group'] .= " HAVING " . $_having;
|
||||
}
|
||||
return $this;
|
||||
}
|
||||
|
||||
# 查询条件
|
||||
public function where($_where = '1=1') {
|
||||
global $_M;
|
||||
if(is_array($_where)) $_where = self::where_arr($_where);
|
||||
if(!empty($_where)) $this->sql['where'] = " WHERE " . $_where;
|
||||
return $this;
|
||||
}
|
||||
|
||||
# 排序条件
|
||||
public function order($_order = 'id DESC') {
|
||||
global $_M;
|
||||
$this->sql['order'] = " ORDER BY " . $_order;
|
||||
return $this;
|
||||
}
|
||||
|
||||
# 单独值,用于 多条信息插入,或者约束插入更新
|
||||
public function values($_values = '') {
|
||||
global $_M;
|
||||
if(is_array($_values)) $_values = self::values_arr($_values);
|
||||
$this->sql['values'] = $_values;
|
||||
return $this;
|
||||
}
|
||||
|
||||
# 约束条件下的UPDATE
|
||||
public function unique($_unique = '') {
|
||||
global $_M;
|
||||
if(is_array($_unique)) {
|
||||
$_unique = self::field_del($_unique);
|
||||
$_unique = self::unique_arr($_unique);
|
||||
}
|
||||
$this->sql['unique'] = " ON DUPLICATE KEY UPDATE " . $_unique;
|
||||
return $this;
|
||||
}
|
||||
|
||||
# 查询条数限制
|
||||
public function limit($_limit = '30',$_start = '0') {
|
||||
global $_M;
|
||||
$this->sql['limit'] = " LIMIT {$_start}," . $_limit;
|
||||
return $this;
|
||||
}
|
||||
|
||||
# 删除
|
||||
public function del($_where) {
|
||||
global $_M;
|
||||
if(empty($this->sql['table'])) return false;
|
||||
if(!empty($_where) && empty($this->sql['where'])) self::where($_where);
|
||||
$this->query = "DELETE FROM {$this->sql['table']} {$this->sql['where']} ";
|
||||
unset($this->sql);
|
||||
DB::query($this->query);
|
||||
return $this;
|
||||
}
|
||||
|
||||
# 单条修改
|
||||
public function upd() {
|
||||
global $_M;
|
||||
if(empty($this->sql['table']) || empty($this->sql['field'])) return false;
|
||||
$this->query = "UPDATE {$this->sql['table']} SET {$this->sql['field']} {$this->sql['where']} ";
|
||||
unset($this->sql);
|
||||
DB::query($this->query);
|
||||
return $this;
|
||||
}
|
||||
|
||||
# 单条新增
|
||||
public function add($_field) {
|
||||
global $_M;
|
||||
if(!empty($_field) && empty($this->sql['field'])) self::field($_field);
|
||||
if(empty($this->sql['table']) || empty($this->sql['field'])) return false;
|
||||
$this->query = "INSERT INTO {$this->sql['table']} SET {$this->sql['field']} ";
|
||||
unset($this->sql);
|
||||
DB::query($this->query);
|
||||
return $this;
|
||||
}
|
||||
|
||||
# 约束字段新增,更新,unique 值不存在即可实现多条信息插入
|
||||
# field 字段需要查询类型的 qfield()
|
||||
# $data 一维二维都可以,key = field
|
||||
# $sign false 并且也没有单独调用unique()是多条信息插入, true 为是约束更新插入
|
||||
public function adup($data = [],$sign = true) {
|
||||
global $_M;
|
||||
if(empty($this->sql['table'])) return false;
|
||||
if(is_array($data)){
|
||||
$arr = array_level($data) == 1?$data:reset($data);
|
||||
$qfield = array_keys($arr);
|
||||
if(empty($this->sql['field'])) self::qfield($qfield);
|
||||
if(empty($this->sql['values'])) self::values($data);
|
||||
if($sign == true && empty($this->sql['unique'])) {
|
||||
$unique = [];
|
||||
$arr = self::field_del($arr);
|
||||
foreach ($arr as $key => $val) {
|
||||
if(in_array($val, $this->special,true)){
|
||||
$unique[$key] = $val;
|
||||
}else{
|
||||
$unique[] = $key;
|
||||
}
|
||||
}
|
||||
self::unique($unique);
|
||||
}
|
||||
}
|
||||
$this->query = "INSERT INTO {$this->sql['table']} ({$this->sql['field']}) VALUES {$this->sql['values']} {$this->sql['unique']} ";
|
||||
unset($this->sql);
|
||||
DB::query($this->query);
|
||||
return $this;
|
||||
}
|
||||
|
||||
# 查询单条
|
||||
public function one() {
|
||||
global $_M;
|
||||
if(empty($this->sql['table'])) return false;
|
||||
if(empty($this->sql['field'])) $this->sql['field'] = '*';
|
||||
$this->query = "SELECT {$this->sql['field']} FROM {$this->sql['table']} {$this->sql['where']} {$this->sql['group']} {$this->sql['order']} {$this->sql['limit']} ";
|
||||
unset($this->sql);
|
||||
return DB::get_one($this->query);
|
||||
}
|
||||
|
||||
# 查询更多条数
|
||||
public function all($key = 'id') {
|
||||
global $_M;
|
||||
if(empty($this->sql['table'])) return false;
|
||||
if(empty($this->sql['field'])) $this->sql['field'] = '*';
|
||||
$this->query = "SELECT {$this->sql['field']} FROM {$this->sql['table']} {$this->sql['where']} {$this->sql['group']} {$this->sql['order']} {$this->sql['limit']} ";
|
||||
unset($this->sql);
|
||||
$res = [];
|
||||
$result = DB::query($this->query);
|
||||
while ($val = DB::fetch_array($result)) {
|
||||
$res[$val[$key]] = $val;
|
||||
}
|
||||
return $res;
|
||||
}
|
||||
|
||||
# 获取表结构
|
||||
public function show() {
|
||||
global $_M;
|
||||
if(empty($this->sql['table'])) return false;
|
||||
$this->query = "SHOW FULL COLUMNS FROM .{$this->sql['table']}";
|
||||
unset($this->sql);
|
||||
$res = [];
|
||||
$rescolumns = DB::query($this->query) ;
|
||||
while($row = DB::fetch_array($rescolumns)){
|
||||
$res[] = $row;
|
||||
}
|
||||
return $res;
|
||||
}
|
||||
|
||||
# 条数统计
|
||||
# field 采用查询方法 qfield
|
||||
# $multi_table 若是采用分组了计算方式要调整为 子查询计算总条数
|
||||
public function count($_field = '*') {
|
||||
global $_M;
|
||||
if(empty($this->sql['table'])) return 0;
|
||||
if(empty($this->sql['field'])) $this->sql['field'] = "COUNT({$_field})";
|
||||
|
||||
$this->query = " SELECT {$this->sql['field']} FROM {$this->sql['table']} {$this->sql['where']} ";
|
||||
if($this->multi_table) $this->query = " SELECT count(*) FROM ($this->query) num ";
|
||||
$result = DB::query($this->query);
|
||||
$fetch_row = DB::fetch_row($result);
|
||||
return $fetch_row[0];
|
||||
}
|
||||
|
||||
# 获取刚才插入的信息ID
|
||||
public function id() {
|
||||
global $_M;
|
||||
return DB::insert_id();
|
||||
}
|
||||
|
||||
# 错误信息(对查询是无效的)
|
||||
public function error() {
|
||||
global $_M;
|
||||
return DB::error();
|
||||
}
|
||||
|
||||
# 返回完整数据库名
|
||||
public function full_table_name($tname,$sign = true) {
|
||||
global $_M;
|
||||
return $sign == true?$_M['table'][$this->m_name.'_'.$tname]:$_M['table'][$tname];
|
||||
}
|
||||
|
||||
# 字段删除方法
|
||||
public function field_del($array = []) {
|
||||
global $_M;
|
||||
foreach ($this->ufield as $val) {
|
||||
unset($array[$val]);
|
||||
}
|
||||
return $array;
|
||||
}
|
||||
|
||||
# where条件的转换
|
||||
# 仅是值等于的处理,例如某个字段判断为不等于或者其他的方法,切勿使用数组传递
|
||||
public function where_arr($arr) {
|
||||
global $_M;
|
||||
$and = [];
|
||||
foreach ($arr as $key => $val) {
|
||||
// 函数的使用 数字键名采用函数模式
|
||||
if(is_numeric($key)) {
|
||||
$and[] = $val;
|
||||
continue;
|
||||
}
|
||||
// 仅是值等于的处理
|
||||
if(is_array($val)){
|
||||
$or = [];
|
||||
foreach ($val as $ky => $kv) {
|
||||
$or[] = " {$key} = '{$kv}' ";
|
||||
// 函数的使用,非数字则采用函数模式
|
||||
if(!is_numeric($ky)) {
|
||||
$or[] = $val;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
$orstr = arrayto_string($or, ' OR ');
|
||||
$and[] = " ({$orstr}) ";
|
||||
}else{
|
||||
$and[] = " {$key} = '{$val}' ";
|
||||
}
|
||||
}
|
||||
return arrayto_string($and, ' AND ');
|
||||
}
|
||||
|
||||
# 入库字段转换
|
||||
public function field_arr($arr) {
|
||||
global $_M;
|
||||
$str = [];
|
||||
foreach ($arr as $k => $v) {
|
||||
if (strstr($v, "'")) $v = str_replace("'", "\'", $v);
|
||||
if(in_array($v, $this->special,true)){
|
||||
$str[] = " {$k} = {$v} ";
|
||||
}else{
|
||||
$str[] = " {$k} = '{$v}' ";
|
||||
}
|
||||
}
|
||||
return arrayto_string($str, ',');
|
||||
}
|
||||
|
||||
# 单独值的字符串转换
|
||||
public function values_arr($arr) {
|
||||
global $_M;
|
||||
$str = [];
|
||||
foreach ($arr as $val) {
|
||||
if(is_array($val)){
|
||||
$str[] = self::values_arr($val);
|
||||
}else{
|
||||
if(in_array($val, $this->special,true)){
|
||||
$str[] = " $val ";
|
||||
}else{
|
||||
$str[] = " '$val' ";
|
||||
}
|
||||
}
|
||||
}
|
||||
$arrtostr = arrayto_string($str, ',');
|
||||
return array_level($arr) == 1?"({$arrtostr})":$arrtostr;
|
||||
}
|
||||
|
||||
# 约束条件新增的语句更新值的规则(最后一段)
|
||||
# 数组key值为字段名非数字 说明是要单独处理的值
|
||||
public function unique_arr($arr) {
|
||||
global $_M;
|
||||
$str = [];
|
||||
foreach ($arr as $k => $v) {
|
||||
if(is_numeric($k)){
|
||||
$str[] = " $v = VALUES($v) ";
|
||||
}else{
|
||||
$str[] = " $k = $v ";
|
||||
}
|
||||
}
|
||||
return arrayto_string($str, ',');
|
||||
}
|
||||
|
||||
# 通过数据库整理出该数据库的字段一般是净化form提交的字段,避免一个一个组装
|
||||
public function tfield($form,$tablename = '') {
|
||||
global $_M;
|
||||
if(!empty($tablename)){
|
||||
if(is_array($tablename)) $tablename = [$tablename,true];
|
||||
list($name,$sign) = array_values($tablename);
|
||||
self::table($name,$sign);
|
||||
}
|
||||
$karr = DB::get_all("DESC {$this->sql['table']}");
|
||||
foreach ($karr as $v) {
|
||||
$arr[$v['Field']] = $v['Field'];
|
||||
}
|
||||
#根据数据库字段提炼
|
||||
return array_intersect_key($form, $arr);
|
||||
}
|
||||
|
||||
# 查看刚才执行过的sql语句,方便核查sql语句
|
||||
public function query() {
|
||||
global $_M;
|
||||
return $this->query;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
|
|
@ -0,0 +1,124 @@
|
|||
<?php
|
||||
|
||||
//兼容函数array_column PHP5.5+
|
||||
if (!function_exists('array_column')) {
|
||||
function array_column($input, $columnKey, $indexKey = NULL) {
|
||||
$columnKeyIsNumber = (is_numeric($columnKey)) ? TRUE : FALSE;
|
||||
$indexKeyIsNull = (is_null($indexKey)) ? TRUE : FALSE;
|
||||
$indexKeyIsNumber = (is_numeric($indexKey)) ? TRUE : FALSE;
|
||||
$result = array();
|
||||
foreach ((array) $input AS $key => $row) {
|
||||
if ($columnKeyIsNumber) {
|
||||
$tmp = array_slice($row, $columnKey, 1);
|
||||
$tmp = (is_array($tmp) && !empty($tmp)) ? current($tmp) : NULL;
|
||||
} else {
|
||||
$tmp = isset($row[$columnKey]) ? $row[$columnKey] : NULL;
|
||||
}
|
||||
if (!$indexKeyIsNull) {
|
||||
if ($indexKeyIsNumber) {
|
||||
$key = array_slice($row, $indexKey, 1);
|
||||
$key = (is_array($key) && !empty($key)) ? current($key) : NULL;
|
||||
$key = is_null($key) ? 0 : $key;
|
||||
} else {
|
||||
$key = isset($row[$indexKey]) ? $row[$indexKey] : 0;
|
||||
}
|
||||
}
|
||||
$result[$key] = $tmp;
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
||||
# 计算时间差
|
||||
# $begin_time 起始日期
|
||||
# $end_time 结束日期 一般指当前日期
|
||||
function timediff($begin_time, $end_time,$type) {
|
||||
$time = $end_time - $begin_time;
|
||||
switch ($type) {
|
||||
case 'year':
|
||||
//总的年
|
||||
$timestr = intval($time / 60 / 60 / 24 / 365);
|
||||
break;
|
||||
case 'month':
|
||||
//总的月
|
||||
$timestr = intval($time / 60 / 60 / 24 / 30);
|
||||
break;
|
||||
case 'week':
|
||||
$timestr = intval($time / 60 / 60 / 24 / 7);
|
||||
break;
|
||||
case 'day':
|
||||
$timestr = intval($time / 60 / 60 / 24);
|
||||
break;
|
||||
case 'hour':
|
||||
$timestr = intval($time / 60 / 60);
|
||||
break;
|
||||
case 'min':
|
||||
$timestr = intval($time / 60);
|
||||
break;
|
||||
case 'sec':
|
||||
$timestr = $time;
|
||||
break;
|
||||
default:
|
||||
//总的年
|
||||
$year = intval($time / 60 / 60 / 24 / 365);
|
||||
//总的月
|
||||
$month = intval($time / 60 / 60 / 24 / 30);
|
||||
//总的周
|
||||
$week = intval($time / 60 / 60 / 24 / 7);
|
||||
//总的天数
|
||||
$day = intval($time / 60 / 60 / 24);
|
||||
//总的小时
|
||||
$hour = intval($time / 60 / 60);
|
||||
//总的分钟数
|
||||
$minute = intval($time / 60);
|
||||
//总的秒数
|
||||
$second = $time;
|
||||
$timestr = [
|
||||
'year' =>$year, //总的年
|
||||
'month'=>$month, //总的月
|
||||
'week'=>$week, //总的周
|
||||
'day'=>$day, //总的天数
|
||||
'hour'=>$hour, //总的小时
|
||||
'min'=>$minute, //总的分钟数
|
||||
'sec'=>$second //总的秒数
|
||||
];
|
||||
break;
|
||||
}
|
||||
return $timestr;
|
||||
}
|
||||
|
||||
//获取汉子的首字母
|
||||
function getstrcharter($str) {
|
||||
global $_M, $_YW;
|
||||
if (empty($str)) return '';
|
||||
$fchar = ord($str{0});
|
||||
if ($fchar >= ord('A') && $fchar <= ord('z')) return strtoupper($str{0});
|
||||
$s1 = iconv('UTF-8', 'gb2312', $str);
|
||||
$s2 = iconv('gb2312', 'UTF-8', $s1);
|
||||
$s = $s2 == $str ? $s1 : $str;
|
||||
$asc = ord($s{0}) * 256 + ord($s{1}) - 65536;
|
||||
if ($asc >= -20319 && $asc <= -20284) return 'A';
|
||||
if ($asc >= -20283 && $asc <= -19776) return 'B';
|
||||
if ($asc >= -19775 && $asc <= -19219) return 'C';
|
||||
if ($asc >= -19218 && $asc <= -18711) return 'D';
|
||||
if ($asc >= -18710 && $asc <= -18527) return 'E';
|
||||
if ($asc >= -18526 && $asc <= -18240) return 'F';
|
||||
if ($asc >= -18239 && $asc <= -17923) return 'G';
|
||||
if ($asc >= -17922 && $asc <= -17418) return 'H';
|
||||
if ($asc >= -17417 && $asc <= -16475) return 'J';
|
||||
if ($asc >= -16474 && $asc <= -16213) return 'K';
|
||||
if ($asc >= -16212 && $asc <= -15641) return 'L';
|
||||
if ($asc >= -15640 && $asc <= -15166) return 'M';
|
||||
if ($asc >= -15165 && $asc <= -14923) return 'N';
|
||||
if ($asc >= -14922 && $asc <= -14915) return 'O';
|
||||
if ($asc >= -14914 && $asc <= -14631) return 'P';
|
||||
if ($asc >= -14630 && $asc <= -14150) return 'Q';
|
||||
if ($asc >= -14149 && $asc <= -14091) return 'R';
|
||||
if ($asc >= -14090 && $asc <= -13319) return 'S';
|
||||
if ($asc >= -13318 && $asc <= -12839) return 'T';
|
||||
if ($asc >= -12838 && $asc <= -12557) return 'W';
|
||||
if ($asc >= -12556 && $asc <= -11848) return 'X';
|
||||
if ($asc >= -11847 && $asc <= -11056) return 'Y';
|
||||
if ($asc >= -11055 && $asc <= -10247) return 'Z';
|
||||
return 'ZZ';
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,530 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* 表格数据显示,以及数据导出公用处理方案
|
||||
*/
|
||||
|
||||
trait tdata {
|
||||
|
||||
//sql语句采用分组查询后调整为true 使用子查询计算总条数
|
||||
public $multi_table = false;
|
||||
//搜索的input字段,用来处理表数据显示时的颜色加重问题
|
||||
private $search_input = [];
|
||||
//搜索的select字段,不用考虑搜索结果
|
||||
private $search_other = [];
|
||||
//带有表前缀的搜索字段,主要用于跨表联合查询,要对照上面数组合并后的顺序
|
||||
private $search_field = [];
|
||||
//搜索的LIKE字段
|
||||
private $search_link = [];
|
||||
//跳过替换为突出显示的字段
|
||||
private $skip_field = [];
|
||||
|
||||
// 小区统计查询内的公用where
|
||||
private $villages_where = '';
|
||||
|
||||
|
||||
//表名
|
||||
public function td_sqlk() {
|
||||
global $_M,$_YW;
|
||||
//当天日期时间
|
||||
$curdate = date('Y-m-d',time());
|
||||
switch ($this->tname) {
|
||||
case 'applan':
|
||||
//判断是否可选的依据
|
||||
if(!empty($this->form['slid'])) $where = " AND nla.id != '{$this->form['slid']}' ";
|
||||
//表
|
||||
$sqlk = " {$_YW['k']['elevator']} AS el "
|
||||
. "LEFT JOIN (SELECT * FROM( SELECT DISTINCT( nel.e_number ) AS nowe_number,ANY_VALUE ( nla.id ) AS nowid,ANY_VALUE ( nla.l_title ) AS nowtitle,ANY_VALUE ( nla.l_starttime ) AS nowstime,ANY_VALUE ( nla.l_endtime ) AS nowetime,if(NOT ( nla.l_endtime < '{$curdate}' OR nla.l_starttime > '{$curdate}' ) OR nla.l_starttime > '{$curdate}',1,0) AS estate FROM {$_YW['k']['elevator']} AS nel LEFT JOIN {$_YW['k']['launch']} AS nla ON find_in_set( nel.e_number, nla.l_enumber ) WHERE NOT ( nla.l_endtime < '{$curdate}' OR nla.l_starttime > '{$curdate}' ) AND nla.id IS NOT NULL ORDER BY nowstime ASC ) eala GROUP BY nowe_number ) ala ON ala.nowe_number = el.e_number "
|
||||
. "LEFT JOIN (SELECT nel.e_number AS ende_number, max( nla.l_endtime ) AS endtime FROM {$_YW['k']['elevator']} AS nel LEFT JOIN {$_YW['k']['launch']} AS nla ON find_in_set( nel.e_number, nla.l_enumber ) WHERE nla.id IS NOT NULL GROUP BY ende_number) cla ON cla.ende_number = el.e_number "
|
||||
. "LEFT JOIN ( SELECT * FROM( SELECT DISTINCT( nel.e_number ) AS nexte_number,ANY_VALUE ( nla.id ) AS nextid,ANY_VALUE ( nla.l_title ) AS nexttitle,ANY_VALUE ( nla.l_starttime ) AS nextstime,ANY_VALUE ( nla.l_endtime ) AS nextetime FROM {$_YW['k']['elevator']} AS nel LEFT JOIN {$_YW['k']['launch']} AS nla ON find_in_set( nel.e_number, nla.l_enumber ) WHERE nla.l_starttime > '{$curdate}' AND nla.id IS NOT NULL ORDER BY nextstime ASC ) eala GROUP BY nexte_number ) bla ON bla.nexte_number = el.e_number "
|
||||
. "LEFT JOIN (SELECT * FROM( SELECT DISTINCT( nel.e_number ) AS nend_number,ANY_VALUE ( nla.id ) AS endid,ANY_VALUE ( nla.l_title ) AS endtitle,ANY_VALUE ( nla.l_starttime ) AS endstime,ANY_VALUE ( nla.l_endtime ) AS endetime FROM {$_YW['k']['elevator']} AS nel LEFT JOIN {$_YW['k']['launch']} AS nla ON find_in_set( nel.e_number, nla.l_enumber ) WHERE nla.l_endtime < '{$curdate}' AND nla.id IS NOT NULL ORDER BY endetime DESC ) eala GROUP BY nend_number ) dla ON dla.nend_number = el.e_number "
|
||||
. "LEFT JOIN (SELECT nel.e_number AS lde_number,count(nel.e_number) AS lanum FROM {$_YW['k']['elevator']} AS nel LEFT JOIN {$_YW['k']['launch']} AS nla ON find_in_set( nel.e_number, nla.l_enumber ) WHERE NOT ( nla.l_endtime < '{$this->form['l_starttime']}' OR nla.l_starttime > '{$this->form['l_endtime']}' ) {$where} GROUP BY lde_number) AS ela ON ela.lde_number = el.e_number ";
|
||||
break;
|
||||
case 'elevators':
|
||||
$sqlk = " {$_YW['k']['elevator']} AS el LEFT JOIN {$_YW['k']['launch']} AS la ON find_in_set( el.e_number, la.l_enumber ) "
|
||||
. "LEFT JOIN (SELECT * FROM( SELECT DISTINCT( nel.e_number ) AS nowe_number,ANY_VALUE ( nla.id ) AS nowid,ANY_VALUE ( nla.l_title ) AS nowtitle,ANY_VALUE ( nla.l_starttime ) AS nowstime,ANY_VALUE ( nla.l_endtime ) AS nowetime,if(NOT ( nla.l_endtime < '{$curdate}' OR nla.l_starttime > '{$curdate}' ) OR nla.l_starttime > '{$curdate}',1,0) AS estate FROM {$_YW['k']['elevator']} AS nel LEFT JOIN {$_YW['k']['launch']} AS nla ON find_in_set( nel.e_number, nla.l_enumber ) WHERE NOT ( nla.l_endtime < '{$curdate}' OR nla.l_starttime > '{$curdate}' ) AND nla.id IS NOT NULL ORDER BY nowstime ASC ) eala GROUP BY nowe_number ) ala ON ala.nowe_number = el.e_number "
|
||||
. "LEFT JOIN ( SELECT * FROM( SELECT DISTINCT( nel.e_number ) AS nexte_number,ANY_VALUE ( nla.id ) AS nextid,ANY_VALUE ( nla.l_title ) AS nexttitle,ANY_VALUE ( nla.l_starttime ) AS nextstime,ANY_VALUE ( nla.l_endtime ) AS nextetime FROM {$_YW['k']['elevator']} AS nel LEFT JOIN {$_YW['k']['launch']} AS nla ON find_in_set( nel.e_number, nla.l_enumber ) WHERE nla.l_starttime > '{$curdate}' AND nla.id IS NOT NULL ORDER BY nextstime ASC ) eala GROUP BY nexte_number ) bla ON bla.nexte_number = el.e_number "
|
||||
. "LEFT JOIN (SELECT * FROM( SELECT DISTINCT( nel.e_number ) AS nend_number,ANY_VALUE ( nla.id ) AS endid,ANY_VALUE ( nla.l_title ) AS endtitle,ANY_VALUE ( nla.l_starttime ) AS endstime,ANY_VALUE ( nla.l_endtime ) AS endetime FROM {$_YW['k']['elevator']} AS nel LEFT JOIN {$_YW['k']['launch']} AS nla ON find_in_set( nel.e_number, nla.l_enumber ) WHERE nla.l_endtime < '{$curdate}' AND nla.id IS NOT NULL ORDER BY endetime DESC ) eala GROUP BY nend_number ) cla ON cla.nend_number = el.e_number ";
|
||||
break;
|
||||
case 'patrol':
|
||||
$sqlk = " {$_YW['k']['elevator']} AS el LEFT JOIN {$_YW['k']['launch']} AS la ON find_in_set( el.e_number, la.l_enumber ) "
|
||||
. "LEFT JOIN (SELECT * FROM( SELECT DISTINCT( nel.e_number ) AS nowe_number,ANY_VALUE ( nla.id ) AS nowid,ANY_VALUE ( nla.l_title ) AS nowtitle,ANY_VALUE ( nla.l_starttime ) AS nowstime,ANY_VALUE ( nla.l_endtime ) AS nowetime,if(NOT ( nla.l_endtime < '{$curdate}' OR nla.l_starttime > '{$curdate}' ) OR nla.l_starttime > '{$curdate}',1,0) AS estate FROM {$_YW['k']['elevator']} AS nel LEFT JOIN {$_YW['k']['launch']} AS nla ON find_in_set( nel.e_number, nla.l_enumber ) WHERE nla.l_starttime <= '{$curdate}' AND nla.id IS NOT NULL ORDER BY nowstime DESC ) eala GROUP BY nowe_number ) ala ON ala.nowe_number = el.e_number ";
|
||||
break;
|
||||
case 'villages':
|
||||
$son = " FROM {$_YW['k']['countela']} AS el WHERE ";
|
||||
//判断执行默认还是时间区段
|
||||
$bool = false;
|
||||
if($this->form['vs_starttime'] || $this->form['vs_endtime']){
|
||||
$bool = true;
|
||||
$this->form['vs_starttime'] = $this->form['vs_starttime']?:$curdate;
|
||||
$this->form['vs_endtime'] = $this->form['vs_endtime']?:$curdate;
|
||||
if(strtotime($this->form['vs_starttime']) > strtotime($this->form['vs_endtime'])){
|
||||
$vs_starttime = $this->form['vs_endtime'];
|
||||
$vs_endtime = $this->form['vs_starttime'];
|
||||
}else{
|
||||
$vs_starttime = $this->form['vs_starttime'];
|
||||
$vs_endtime = $this->form['vs_endtime'];
|
||||
}
|
||||
}
|
||||
|
||||
// 计算是否区分广告位
|
||||
// 检测是否通过JS传递的广告位参数,也就是导出
|
||||
if(isset($this->form['jsadd_veaps'])) $this->form['veaps'] = stringto_array($this->form['jsadd_veaps'],',');
|
||||
if(is_array($this->form['veaps'])){
|
||||
$veaps = parent::strchange(array_filter($this->form['veaps']));
|
||||
$this->villages_where = " el.e_aps IN($veaps) ";
|
||||
$son .= " {$this->villages_where} AND ";
|
||||
}
|
||||
|
||||
// 空置计算要排除当前排期中的广告位
|
||||
if($bool){
|
||||
//加上时间区块 那就是查看在区段内的情况
|
||||
//增加 s_enable 判断是为了防止过去时间
|
||||
//空置
|
||||
$fwhere = " {$son} NOT EXISTS (SELECT ela.e_number FROM {$_YW['k']['countela']} AS ela WHERE NOT ( ela.l_endtime < '{$vs_starttime}' OR ela.l_starttime > '{$vs_endtime}' ) AND ela.e_number = el.e_number) AND ( (el.l_endtime < '{$vs_starttime}' OR el.l_starttime > '{$vs_endtime}' ) OR el.l_id IS NULL ) AND el.e_enable = 1 ";
|
||||
// 之前的旧代码
|
||||
// $fwhere = " {$son} NOT EXISTS (SELECT ela.e_number FROM {$_YW['k']['countela']} AS ela WHERE NOT ( ela.l_endtime < '{$vs_starttime}' OR ela.l_starttime > '{$vs_endtime}' ) AND NOT(ela.l_endtime < '{$curdate}' OR ela.l_starttime > '{$curdate}' ) AND ela.e_number = el.e_number) AND ( ((el.l_endtime < '{$vs_starttime}' OR el.l_starttime > '{$vs_endtime}') AND el.l_endtime < '{$curdate}' ) OR el.l_id IS NULL ) AND el.e_enable = 1 ";
|
||||
//排期中的
|
||||
$lwhere = " {$son} NOT(el.l_endtime < '{$vs_starttime}' OR el.l_starttime > '{$vs_endtime}') ";
|
||||
// 之前的旧代码
|
||||
// $lwhere = " {$son} NOT(el.l_endtime < '{$vs_starttime}' OR el.l_starttime > '{$vs_endtime}') AND NOT(el.l_endtime < '{$curdate}' OR el.l_starttime > '{$curdate}' ) ";
|
||||
//多少天到期的
|
||||
$dwhere = " {$son} el.l_endtime BETWEEN '{$vs_starttime}' AND '{$vs_endtime}' ";
|
||||
//预排
|
||||
$pwhere = " {$son} NOT(el.l_endtime < '{$vs_starttime}' OR el.l_starttime > '{$vs_endtime}') AND el.l_starttime > '{$curdate}' ";
|
||||
}else{
|
||||
//没有时间区段,则按照当天为准则,默认值
|
||||
//空置,其他不包含当天的
|
||||
$fwhere = " {$son} NOT EXISTS (SELECT ela.e_number FROM {$_YW['k']['countela']} AS ela WHERE NOT ( ela.l_endtime < '{$curdate}' OR ela.l_starttime > '{$curdate}' ) AND ela.e_number = el.e_number) AND (el.l_endtime < '{$curdate}' OR el.l_starttime > '{$curdate}' OR el.l_id IS NULL) AND el.e_enable = 1 ";
|
||||
//排期中的,日期包含当天的
|
||||
$lwhere = " {$son} NOT(el.l_endtime < '{$curdate}' OR el.l_starttime > '{$curdate}' ) ";
|
||||
//多少天到期的
|
||||
$dwhere = " {$son} el.l_endtime BETWEEN '{$curdate}' AND date_add( '{$curdate}', INTERVAL 7 DAY ) ";
|
||||
//预排,开始时间大于当天的
|
||||
$pwhere = " {$son} el.l_starttime > '{$curdate}' ";
|
||||
}
|
||||
|
||||
$sqlk = "{$_YW['k']['village']} AS vi LEFT JOIN {$_YW['k']['elevator']} AS el ON vi.id = el.e_vid "
|
||||
. "LEFT JOIN (SELECT el.e_vid AS ae_vid,COUNT( DISTINCT el.e_number ) AS v_free,COUNT( DISTINCT el.e_vid, el.e_bno ) AS v_bno,COUNT( DISTINCT el.e_vid, el.e_bno,el.e_uno ) AS v_uno,COUNT( DISTINCT el.e_vid, el.e_bno,el.e_uno,el.e_eno ) AS v_eno {$fwhere} GROUP BY ae_vid ) AS anum ON anum.ae_vid = vi.id "
|
||||
. "LEFT JOIN (SELECT el.e_vid AS be_vid,COUNT( DISTINCT el.e_number ) AS v_lease {$lwhere} GROUP BY be_vid ) AS bnum ON bnum.be_vid = vi.id "
|
||||
. "LEFT JOIN (SELECT el.e_vid AS ce_vid,COUNT( DISTINCT el.e_number ) AS v_endday {$dwhere} GROUP BY ce_vid ) AS cnum ON cnum.ce_vid = vi.id "
|
||||
. "LEFT JOIN (SELECT el.e_vid AS de_vid,COUNT( DISTINCT el.e_number ) AS v_prerow {$pwhere} GROUP BY de_vid ) AS dnum ON dnum.de_vid = vi.id ";
|
||||
|
||||
break;
|
||||
case 'contract':
|
||||
$sqlk = "{$_YW['k']['contract']} AS ch LEFT JOIN {$_YW['k']['launch']} AS la ON ch.h_number = la.l_hnumber ";
|
||||
break;
|
||||
case 'schedule':
|
||||
$sqlk = "{$_YW['k']['elevator']} AS el LEFT JOIN {$_YW['k']['launch']} AS la ON find_in_set( el.e_number, la.l_enumber ) LEFT JOIN {$_YW['k']['contract']} AS ct ON la.l_hnumber = ct.h_number";
|
||||
break;
|
||||
case 'village':
|
||||
$sqlk = "{$_YW['k']['village']} AS vi LEFT JOIN {$_YW['k']['elevator']} AS el ON vi.id = el.e_vid ";
|
||||
break;
|
||||
|
||||
default:
|
||||
$sqlk = $_YW['k'][$this->tname];
|
||||
break;
|
||||
}
|
||||
return $sqlk;
|
||||
}
|
||||
|
||||
//字段
|
||||
public function td_field() {
|
||||
global $_M,$_YW;
|
||||
switch ($this->tname) {
|
||||
case 'applan':
|
||||
$field = '*';
|
||||
break;
|
||||
case 'elevators':
|
||||
$field = ' el.*,max( la.l_endtime ) AS endtime,count( DISTINCT la.id ) AS e_totalnum,ala.*,if(ala.estate,1,0) AS etypes,bla.*,cla.* ';
|
||||
break;
|
||||
case 'patrol':
|
||||
$field = ' el.*,la.l_hnumber,ala.* ';
|
||||
break;
|
||||
case 'contract':
|
||||
$field = 'ch.*, count(la.id) AS h_totalnum ';
|
||||
break;
|
||||
case 'schedule':
|
||||
$field = 'el.e_enable,el.e_number,el.e_vid,el.e_bno,el.e_uno,el.e_eno,el.e_aps,la.*,ct.h_cid';
|
||||
break;
|
||||
case 'villages':
|
||||
$field = " vi.*, COUNT( DISTINCT el.e_number) AS v_enum,COUNT(DISTINCT el.e_vid, el.e_bno) AS v_ebnonum,COUNT(DISTINCT el.e_vid, el.e_bno,el.e_uno) AS v_eunonum,COUNT(DISTINCT el.e_vid, el.e_bno,el.e_uno,el.e_eno) AS v_eenonum,COUNT( el.e_enable = 0 OR NULL ) AS noban,ANY_VALUE(anum.v_free) AS v_free,ANY_VALUE ( anum.v_bno ) AS v_bno,ANY_VALUE ( anum.v_uno ) AS v_uno,ANY_VALUE ( anum.v_eno ) AS v_eno,ANY_VALUE(bnum.v_lease) AS v_lease,ANY_VALUE(cnum.v_endday) AS v_endday,ANY_VALUE(dnum.v_prerow) AS v_prerow ";
|
||||
break;
|
||||
case 'village':
|
||||
$field = " vi.*, count( el.e_number ) AS total,count( el.e_enable = 0 OR NULL ) AS noban,count( el.e_enable = 1 OR NULL ) AS normal ";
|
||||
break;
|
||||
|
||||
default:
|
||||
$field = '*';
|
||||
break;
|
||||
}
|
||||
return $field;
|
||||
}
|
||||
|
||||
/*
|
||||
* 【列出】
|
||||
* 同时满足条件的,非OR
|
||||
*/
|
||||
public function td_search($link = true) {
|
||||
global $_M,$_YW;
|
||||
//默认input字段为link搜索
|
||||
if($link) $this->search_link = array_unique(array_merge($this->search_input,$this->search_link));
|
||||
//合成得带搜索字段
|
||||
$field = array_unique(array_merge($this->search_input,$this->search_other));
|
||||
//判断是否为链表查询
|
||||
$join_field = array_combine($field,count($this->search_field) > 0?$this->search_field:$field);
|
||||
|
||||
//相对独立的搜索
|
||||
$arrwhere = [];
|
||||
foreach ($field as $val) {
|
||||
$search = trim(strtoupper($this->form[$val]));
|
||||
if(strlen($search) > 0) {
|
||||
$str = $join_field[$val];
|
||||
if(in_array($val, $this->search_link)){
|
||||
$arrwhere[] = " {$str} LIKE '%{$search}%' ";
|
||||
continue;
|
||||
}
|
||||
$arrwhere[] = " {$str} = '{$search}' ";
|
||||
}
|
||||
}
|
||||
|
||||
//返回内容
|
||||
$where = '';
|
||||
if(count($arrwhere) > 0){
|
||||
$where = ' AND ';
|
||||
$where .= arrayto_string($arrwhere,' AND ');
|
||||
}
|
||||
return $where;
|
||||
}
|
||||
|
||||
//OR 内容搜索
|
||||
public function td_search_or($orfield,$search_field = []) {
|
||||
global $_M,$_YW;
|
||||
//判断是否为链表查询
|
||||
$join_field = array_combine($orfield,count($search_field) > 0?$search_field:$orfield);
|
||||
//相对独立的搜索
|
||||
$arrwhere = [];
|
||||
foreach ($orfield as $val) {
|
||||
$search = trim(strtoupper($this->form[$val]));
|
||||
if(strlen($search) > 0) {
|
||||
$str = $join_field[$val];
|
||||
if(in_array($val, $this->search_link)){
|
||||
$arrwhere[] = " {$str} LIKE '%{$search}%' ";
|
||||
continue;
|
||||
}
|
||||
$arrwhere[] = " {$str} = '{$search}' ";
|
||||
}
|
||||
}
|
||||
|
||||
//返回内容
|
||||
$where = '';
|
||||
if(count($arrwhere) > 0){
|
||||
$where .= arrayto_string($arrwhere,' OR ');
|
||||
}
|
||||
return strlen($where) > 0 ?" AND ({$where}) ":'';
|
||||
}
|
||||
|
||||
//时间区间
|
||||
public function td_time_search($field,$search_field = []) {
|
||||
global $_M,$_YW;
|
||||
list($start,$end) = $field;
|
||||
//判断是否为链表查询
|
||||
$join_field = array_combine($field,count($search_field) > 0?$search_field:$field);
|
||||
//相对独立的搜索
|
||||
$arrwhere = [];
|
||||
foreach ($field as $val) {
|
||||
$search = trim(strtoupper($this->form[$val]));
|
||||
if(strlen($search) > 0) {
|
||||
$str = $join_field[$val];
|
||||
if($val == $start){
|
||||
$arrwhere[] = " {$str} >= '{$search}' ";
|
||||
}else{
|
||||
$arrwhere[] = " {$str} <= '{$search}' ";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//返回内容
|
||||
$where = '';
|
||||
if(count($arrwhere) > 0){
|
||||
$where .= arrayto_string($arrwhere," AND ");
|
||||
}
|
||||
return strlen($where) > 0 ?" AND ({$where}) ":'';
|
||||
}
|
||||
|
||||
//获取重叠的时间区间
|
||||
// $search_field 开始时间和结束时间的字段互相调换,结束的字段在前面
|
||||
public function td_time_orsearch($field,$search_field = []) {
|
||||
global $_M,$_YW;
|
||||
list($start,$end) = $field;
|
||||
//判断是否为链表查询
|
||||
$join_field = array_combine($field,count($search_field) > 0?$search_field:$field);
|
||||
//相对独立的搜索
|
||||
$arrwhere = [];
|
||||
foreach ($field as $val) {
|
||||
$search = trim(strtoupper($this->form[$val]));
|
||||
if(strlen($search) > 0) {
|
||||
$str = $join_field[$val];
|
||||
if($val == $start){
|
||||
$arrwhere[] = " {$str} < '{$search}' "; //结束字段,搜索为开始时间
|
||||
}else{
|
||||
$arrwhere[] = " {$str} > '{$search}' "; //开始字段,搜索为结束时间
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//返回内容
|
||||
$where = '';
|
||||
if(count($arrwhere) > 0){
|
||||
$where .= arrayto_string($arrwhere," OR ");
|
||||
}
|
||||
return strlen($where) > 0 ?" AND NOT({$where}) ":'';
|
||||
}
|
||||
|
||||
/*
|
||||
* 【列出】
|
||||
* SQL判断语句$where .= $this->search();
|
||||
*/
|
||||
public function td_where() {
|
||||
global $_M,$_YW;
|
||||
$where = " 1=1 ";
|
||||
switch ($this->tname) {
|
||||
case 'applan':
|
||||
$this->search_input = ['e_number'];
|
||||
$this->search_other = ['e_aps','e_eno','e_uno','e_bno','e_vid','e_enable'];
|
||||
$where .= self::td_search();
|
||||
break;
|
||||
case 'elevators':
|
||||
$this->search_input = ['e_number'];
|
||||
$this->search_other = ['e_aps','e_eno','e_uno','e_bno','e_vid','e_enable','endid','nowid','nextid'];
|
||||
$this->search_field = ['el.e_number','el.e_aps','el.e_eno','el.e_uno','el.e_bno','el.e_vid','el.e_enable','cla.endid','ala.nowid','bla.nextid'];
|
||||
$where .= self::td_search();
|
||||
//判断是否为备份
|
||||
if($this->bsign) parent::where_id($where);
|
||||
self::td_groupby($where);
|
||||
break;
|
||||
case 'patrol':
|
||||
$this->search_input = ['e_number'];
|
||||
$this->search_other = ['e_aps','e_eno','e_uno','e_bno','e_vid','e_enable','nowid','l_hnumber'];
|
||||
$this->search_field = ['el.e_number','el.e_aps','el.e_eno','el.e_uno','el.e_bno','el.e_vid','el.e_enable','ala.nowid','la.l_hnumber'];
|
||||
$where .= self::td_search();
|
||||
|
||||
//不看空位
|
||||
$where .= " AND ala.nowid IS NOT NULL ";
|
||||
|
||||
self::td_groupby($where);
|
||||
break;
|
||||
case 'elevator':
|
||||
$this->search_input = ['e_number','e_label','e_text'];
|
||||
$this->search_other = ['e_aps','e_eno','e_uno','e_bno','e_vid','e_enable'];
|
||||
$where .= self::td_search();
|
||||
case 'village':
|
||||
$this->search_input = ['v_name','v_text'];
|
||||
$where .= self::td_search();
|
||||
|
||||
$this->search_link = ['v_province','v_city','v_district','v_address'];
|
||||
$this->search_field = ['vi.v_name','vi.v_text','vi.v_province','vi.v_city','vi.v_district','vi.v_address'];
|
||||
$this->form['v_province'] = $this->form['v_address'];
|
||||
$this->form['v_city'] = $this->form['v_address'];
|
||||
$this->form['v_district'] = $this->form['v_address'];
|
||||
|
||||
$where .= self::td_search_or($this->search_link,['vi.v_province','vi.v_city','vi.v_district','vi.v_address']);
|
||||
self::td_groupby($where);
|
||||
break;
|
||||
case 'customer':
|
||||
$this->search_input = ['c_text'];
|
||||
$this->search_link = ['c_allname','c_name','c_province','c_city','c_district','c_address'];
|
||||
//名称
|
||||
$this->form['c_name'] = $this->form['c_allname'];
|
||||
$where .= self::td_search_or(['c_allname','c_name']);
|
||||
//地址
|
||||
$this->form['c_province'] = $this->form['c_address'];
|
||||
$this->form['c_city'] = $this->form['c_address'];
|
||||
$this->form['c_district'] = $this->form['c_address'];
|
||||
$where .= self::td_search_or(['c_province','c_city','c_district','c_address']);
|
||||
$where .= self::td_search();
|
||||
break;
|
||||
case 'workers':
|
||||
$this->search_input = ['w_name','w_tel','w_text'];
|
||||
$where .= self::td_search();
|
||||
break;
|
||||
case 'contract':
|
||||
$this->search_input = ['h_number','h_text'];
|
||||
$this->search_other = ['h_cid','h_wid'];
|
||||
$this->search_link = ['h_wid'];
|
||||
$this->search_field = ['ch.h_number','ch.h_text','ch.h_cid','ch.h_wid'];
|
||||
$where .= self::td_time_orsearch(['h_starttime','h_endtime'],['ch.h_endtime','ch.h_starttime']);
|
||||
$where .= self::td_search();
|
||||
self::td_groupby($where);
|
||||
break;
|
||||
case 'para':
|
||||
$this->search_other = ['p_type'];
|
||||
$where .= self::td_search();
|
||||
break;
|
||||
case 'launch':
|
||||
$this->search_input = ['l_title','l_enumber','l_text'];
|
||||
$this->search_other = ['l_hnumber'];
|
||||
$where .= self::td_time_orsearch(['l_starttime','l_endtime'],['l_endtime','l_starttime']);
|
||||
$where .= self::td_search();
|
||||
break;
|
||||
case 'villages':
|
||||
$this->search_input = ['v_name','v_text'];
|
||||
$this->search_link = ['v_province','v_city','v_district','v_address'];
|
||||
$this->form['v_province'] = $this->form['v_address'];
|
||||
$this->form['v_city'] = $this->form['v_address'];
|
||||
$this->form['v_district'] = $this->form['v_address'];
|
||||
|
||||
if(is_array($this->form['veaps'])) $where .= " AND {$this->villages_where} ";
|
||||
$where .= self::td_search_or($this->search_link);
|
||||
$where .= self::td_search();
|
||||
//判断是否为备份
|
||||
if($this->bsign) parent::where_id($where);
|
||||
self::td_groupby($where);
|
||||
break;
|
||||
case 'schedule':
|
||||
$where .= " AND la.id IS NOT NULL ";
|
||||
$this->search_input = ['e_number','l_hnumber'];
|
||||
$this->search_other = ['id','e_vid'];
|
||||
$this->search_field = ['el.e_number','la.l_hnumber','la.id','el.e_vid'];
|
||||
$where .= self::td_time_orsearch(['l_starttime','l_endtime'],['la.l_endtime','la.l_starttime']);
|
||||
$where .= self::td_search();
|
||||
break;
|
||||
case 'noticeday':
|
||||
$where .= ' AND ( (endtime BETWEEN DATE_SUB( CURDATE(), INTERVAL 3 DAY ) AND CURDATE()) OR ' //到期提醒 展示3天 // DATE_SUB
|
||||
. '(h_endtime BETWEEN DATE_SUB( CURDATE(), INTERVAL 3 DAY ) AND DATE_ADD( CURDATE(), INTERVAL 3 DAY ) ) )'; //订单到期前后展示3天 // DATE_ADD
|
||||
break;
|
||||
default:
|
||||
// 如果$where 没有值 会导致计算结果出错,导致前台表格无法获取正确的值,分页显示异常
|
||||
$where = "1=1";
|
||||
break;
|
||||
}
|
||||
|
||||
return $where;
|
||||
}
|
||||
|
||||
//分组查询
|
||||
public function td_groupby(&$where) {
|
||||
global $_M;
|
||||
$this->multi_table = true;
|
||||
switch ($this->tname) {
|
||||
case 'elevators':
|
||||
$where .= " GROUP BY el.e_number ";
|
||||
if($this->form['endtime']) $where .= " HAVING endtime < '{$this->form['endtime']}' ";
|
||||
break;
|
||||
case 'patrol':
|
||||
$where .= " GROUP BY el.e_number ";
|
||||
break;
|
||||
case 'contract':
|
||||
$where .= " GROUP BY ch.id ";
|
||||
break;
|
||||
case 'villages':
|
||||
$where .= " GROUP BY vi.id ";
|
||||
break;
|
||||
case 'village':
|
||||
$where .= " GROUP BY vi.id ";
|
||||
break;
|
||||
default:
|
||||
$this->multi_table = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* 【列出】
|
||||
* SQL排序方式语句
|
||||
*/
|
||||
public function td_order() {
|
||||
global $_M;
|
||||
switch ($this->tname) {
|
||||
case 'applan':
|
||||
$order = " `e_enable` DESC ";
|
||||
//按照正常排序,对比相邻广告位的投放广告品类
|
||||
// order_e_types 按照是否可投放进行排序
|
||||
if($this->form['eaps_order'] || $this->form['order_e_types']){
|
||||
if(!$this->form['order_e_types']) $this->form['order_e_types'] = ' ASC ';
|
||||
$order .= ", `lanum` {$this->form['order_e_types']} ";
|
||||
}
|
||||
if($this->form['eaps_order'] == 2){
|
||||
// 传递进来的编号,不直接查数据是因为有些可能会出现错误,所以直接使用传递进来的,进行排序
|
||||
$array = array_filter(stringto_array($this->form['l_selectenum'],','));
|
||||
$idstr = parent::strchange($array);
|
||||
if(strlen($idstr)) $order = " `e_number` IN({$idstr}) DESC, ".$order;
|
||||
}
|
||||
$order .= ", `e_vid` ASC, `e_bno` ASC, `e_uno` ASC, `e_eno` ASC, `e_aps` ASC ";
|
||||
break;
|
||||
case 'elevators':
|
||||
$order = " `etypes` DESC, endtime DESC, el.`e_vid` ASC, el.`e_bno` ASC, el.`e_uno` ASC, el.`e_eno` ASC, el.`e_aps` ASC ";
|
||||
if($this->form['order_e_number']) $order = " el.e_number {$this->form['order_e_number']} ";
|
||||
if($this->form['order_endtime']) $order = " endtime {$this->form['order_endtime']} ";
|
||||
if($this->form['order_e_totalnum']) $order = " e_totalnum {$this->form['order_e_totalnum']} ";
|
||||
if($this->form['order_etypes']) $order = " `etypes` {$this->form['order_etypes']} ";
|
||||
if($this->form['order_nowstime']) $order = " nowstime {$this->form['order_nowstime']} ";
|
||||
if($this->form['order_nowetime']) $order = " nowetime {$this->form['order_nowetime']} ";
|
||||
if($this->form['order_nextstime']) $order = " nextstime {$this->form['order_nextstime']} ";
|
||||
if($this->form['order_nextetime']) $order = " nextetime {$this->form['order_nextetime']} ";
|
||||
if($this->form['order_endstime']) $order = " endstime {$this->form['order_endstime']} ";
|
||||
if($this->form['order_endetime']) $order = " endetime {$this->form['order_endetime']} ";
|
||||
if($this->form['order_e_address']) {
|
||||
$e_address = $this->form['order_e_address'];
|
||||
$order = " el.e_vid {$e_address}, el.e_bno {$e_address}, el.e_uno {$e_address}, el.e_eno {$e_address}, el.e_aps {$e_address} ";
|
||||
}
|
||||
break;
|
||||
case 'patrol':
|
||||
$order = " el.`e_vid` ASC, el.`e_bno` ASC, el.`e_uno` ASC, el.`e_eno` ASC, el.`e_aps` ASC ";
|
||||
break;
|
||||
case 'elevator':
|
||||
$order = " `id` DESC ";
|
||||
break;
|
||||
case 'launch':
|
||||
$order = " `id` DESC ";
|
||||
if($this->form['order_l_starttime']) $order = " l_starttime {$this->form['order_l_starttime']} ";
|
||||
if($this->form['order_l_endtime']) $order = " l_endtime {$this->form['order_l_endtime']} ";
|
||||
break;
|
||||
case 'contract':
|
||||
$order = ' ch.`id` DESC';
|
||||
if($this->form['order_h_starttime']) $order = " ch.h_starttime {$this->form['order_h_starttime']} ";
|
||||
if($this->form['order_h_endtime']) $order = " ch.h_endtime {$this->form['order_h_endtime']} ";
|
||||
break;
|
||||
case 'schedule':
|
||||
$order = ' la.l_starttime DESC,la.`id` DESC';
|
||||
//备份 按照小区排序
|
||||
if($this->bsign){
|
||||
$order = " el.`e_vid` ASC, el.`e_bno` ASC, el.`e_uno` ASC, el.`e_eno` ASC, el.`e_aps` ASC ";
|
||||
}
|
||||
if($this->form['order_l_starttime']) $order = " la.l_starttime {$this->form['order_l_starttime']} ";
|
||||
if($this->form['order_l_endtime']) $order = " la.l_endtime {$this->form['order_l_endtime']} ";
|
||||
break;
|
||||
case 'villages':
|
||||
$order = ' vi.`id` DESC';
|
||||
if($this->form['order_v_enum']) $order = " v_enum {$this->form['order_v_enum']} ";
|
||||
if($this->form['order_v_free']) $order = " v_free {$this->form['order_v_free']} ";
|
||||
if($this->form['order_v_lease']) $order = " v_lease {$this->form['order_v_lease']} ";
|
||||
if($this->form['order_v_endday']) $order = " v_endday {$this->form['order_v_endday']} ";
|
||||
if($this->form['order_v_prerow']) $order = " v_prerow {$this->form['order_v_prerow']} ";
|
||||
if($this->form['order_v_ebnonum']) $order = " v_ebnonum {$this->form['order_v_ebnonum']} ";
|
||||
if($this->form['order_v_eunonum']) $order = " v_eunonum {$this->form['order_v_eunonum']} ";
|
||||
if($this->form['order_v_eenonum']) $order = " v_eenonum {$this->form['order_v_eenonum']} ";
|
||||
if($this->form['order_v_bno']) $order = " v_bno {$this->form['order_v_bno']} ";
|
||||
if($this->form['order_v_uno']) $order = " v_uno {$this->form['order_v_uno']} ";
|
||||
if($this->form['order_v_eno']) $order = " v_eno {$this->form['order_v_eno']} ";
|
||||
break;
|
||||
case 'para':
|
||||
$order = ' `id` DESC';
|
||||
if($this->form['order_p_type']) $order = " `p_type` {$this->form['order_p_type']} ";
|
||||
if($this->form['order_p_order']) $order = " `p_order` {$this->form['order_p_order']} ";
|
||||
break;
|
||||
case 'noticeday':
|
||||
$order = ' `endtime` ASC, `h_endtime` ASC ';
|
||||
break;
|
||||
case 'village':
|
||||
$order = ' vi.`id` DESC';
|
||||
break;
|
||||
default:
|
||||
$order = ' `id` DESC';
|
||||
break;
|
||||
}
|
||||
|
||||
return $order;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,277 @@
|
|||
<?php
|
||||
|
||||
//表对应字段
|
||||
trait tfield {
|
||||
|
||||
//广告位统计
|
||||
protected function tf_elevator($sign = true) {
|
||||
global $_M,$_YW;
|
||||
return [
|
||||
'e_enable' => '状态',
|
||||
'e_number' => '广告位编号',
|
||||
'e_vid' => '小区名称',
|
||||
'e_bno' => '楼号',
|
||||
'e_uno' => '单元号',
|
||||
'e_eno' => '电梯号',
|
||||
'e_aps' => '广告位位置',
|
||||
'e_size' => '广告位规格',
|
||||
'e_label' => '相关标签',
|
||||
'e_text' => '备注'
|
||||
];
|
||||
}
|
||||
|
||||
//小区统计
|
||||
protected function tf_village($sign = true) {
|
||||
global $_M,$_YW;
|
||||
return [
|
||||
'v_name' => '小区名称',
|
||||
'v_type' => '小区分类',
|
||||
'v_totalstr' => '广告状态',
|
||||
'v_address' => '小区地址',
|
||||
'v_wid' => '联系人',
|
||||
'v_price' => '小区均价',
|
||||
'v_psize' => '居住规模',
|
||||
'v_addtime' => '录入时间',
|
||||
'v_updatetime' => '修改时间',
|
||||
'v_text' => '备注'
|
||||
];
|
||||
}
|
||||
|
||||
//广告合同关联表
|
||||
protected function tf_schedule($sign = '') {
|
||||
global $_M,$_YW;
|
||||
//Table
|
||||
$array = [
|
||||
'e_enable' => '状态',
|
||||
'e_number' => '广告位编号',
|
||||
'l_address' => '广告位地址',
|
||||
'h_cid' => '签定的公司',
|
||||
'l_hnumber' => '合同编号',
|
||||
'l_title' => '投放名称',
|
||||
'l_starttime' => '开始时间',
|
||||
'l_endtime' => '结束时间',
|
||||
'ltype' => '投放状态' //标记是否已经结束
|
||||
];
|
||||
// 导出专用
|
||||
$barray = [
|
||||
'e_enable' => '状态',
|
||||
'e_number' => '广告位编号',
|
||||
'e_vid' => '小区名称',
|
||||
'e_bno' => '楼号',
|
||||
'e_uno' => '单元号',
|
||||
'e_eno' => '电梯号',
|
||||
'e_aps' => '广告位位置',
|
||||
'h_cid' => '签定的公司',
|
||||
'l_hnumber' => '合同编号',
|
||||
'l_title' => '投放名称',
|
||||
'l_starttime' => '开始时间',
|
||||
'l_endtime' => '结束时间',
|
||||
'ltype' => '投放状态' //标记是否已经结束
|
||||
];
|
||||
return $sign || $this->bsign?$barray:$array;
|
||||
}
|
||||
|
||||
//合同
|
||||
protected function tf_contract($sign = true) {
|
||||
global $_M,$_YW;
|
||||
return [
|
||||
'h_number' => '合同编号',
|
||||
'h_signtime' => '签订日期',
|
||||
'h_cid' => '签定公司',
|
||||
'h_tprice' => '合同总额',
|
||||
'h_wid' => '签定人员',
|
||||
'h_totalnum' => '投放次数',
|
||||
'h_starttime' => '订单开始时间',
|
||||
'h_endtime' => '订单结束时间',
|
||||
'h_noticeday' => '提前通知天数',
|
||||
'h_addtime' => '录入时间',
|
||||
'h_updatetime' => '修改时间',
|
||||
'h_text' => '备注'
|
||||
];
|
||||
}
|
||||
|
||||
//企业资料
|
||||
protected function tf_customer($sign = true) {
|
||||
global $_M,$_YW;
|
||||
return [
|
||||
'c_allname' => '公司名称',
|
||||
'c_name' => '公司简称',
|
||||
'c_address' => '公司地址',
|
||||
'c_wid' => '联系人',
|
||||
'c_addtime' => '录入时间',
|
||||
'c_updatetime' => '修改时间',
|
||||
'c_text' => '备注',
|
||||
];
|
||||
}
|
||||
|
||||
//企业联系人
|
||||
protected function tf_workers($sign = true) {
|
||||
global $_M,$_YW;
|
||||
return [
|
||||
// 'w_cid' => '隶属公司',
|
||||
'w_jid' => '职务id',
|
||||
'w_name' => '姓名',
|
||||
'w_tel' => '联系电话',
|
||||
'w_addtime' => '录入时间',
|
||||
'w_updatetime' => '修改时间',
|
||||
'w_text' => '备注',
|
||||
];
|
||||
}
|
||||
|
||||
//参数
|
||||
protected function tf_para($sign = true) {
|
||||
global $_M,$_YW;
|
||||
return [
|
||||
'p_type' => '参数分类',
|
||||
'p_value' => '参数值',
|
||||
'p_name' => '参数名',
|
||||
'p_num' => '有多少数据在使用',
|
||||
'p_order' => '排序',
|
||||
'p_text' => '备注'
|
||||
];
|
||||
}
|
||||
|
||||
// 投放页面选择广告位
|
||||
protected function tf_launch($sign = true) {
|
||||
global $_M,$_YW;
|
||||
return [
|
||||
'l_title' => '名称',
|
||||
'l_hnumber' => '合同编号',
|
||||
'l_schedule' => '投放进度',
|
||||
'l_totalnum' => '广告位个数',
|
||||
'l_starttime' => '广告开始时间',
|
||||
'l_endtime' => '广告结束时间',
|
||||
'l_type' => '广告类型',
|
||||
'l_text' => '备注',
|
||||
'l_enumber' => '广告位编组(最多显示6个)',
|
||||
'l_addtime' => '录入时间',
|
||||
'l_updatetime' => '修改时间'
|
||||
];
|
||||
}
|
||||
|
||||
// 投放页面选择广告位
|
||||
protected function tf_applan($sign = true) {
|
||||
global $_M,$_YW;
|
||||
return [
|
||||
'e_enable' => '状态',
|
||||
'e_number' => '广告位编号',
|
||||
'e_address' => '广告位地址', //虚拟字段
|
||||
'endtitle' => '上个计划名称',
|
||||
'endstime' => '上个开始时间',
|
||||
'endetime' => '上个结束时间',
|
||||
'nowtitle' => '当前计划名称',
|
||||
'nowstime' => '当前开始时间',
|
||||
'nowetime' => '当前结束时间',
|
||||
'nexttitle' => '下个计划名称',
|
||||
'nextstime' => '下个开始时间',
|
||||
'nextetime' => '下个结束时间',
|
||||
'endtime' => '最大结束时间',
|
||||
'e_types' => '状态提示'
|
||||
];
|
||||
}
|
||||
|
||||
//广告位查询统计
|
||||
protected function tf_elevators($sign = true) {
|
||||
global $_M,$_YW;
|
||||
return [
|
||||
'e_enable' => '状态',
|
||||
'e_number' => '广告位编号',
|
||||
'e_address' => '广告位地址', //虚拟字段
|
||||
'e_size' => '广告位规格',
|
||||
'endtitle' => '上个计划名称',
|
||||
'endstime' => '上个开始时间',
|
||||
'endetime' => '上个结束时间',
|
||||
'nowtitle' => '当前计划名称',
|
||||
'nowstime' => '当前开始时间',
|
||||
'nowetime' => '当前结束时间',
|
||||
'nexttitle' => '下个计划名称',
|
||||
'nextstime' => '下个开始时间',
|
||||
'nextetime' => '下个结束时间',
|
||||
'endtime' => '最大结束时间',
|
||||
'e_totalnum' => '投放次数',
|
||||
'etypes' => '排期状态'
|
||||
];
|
||||
}
|
||||
|
||||
//广告位查询统计
|
||||
protected function tf_villages($sign = true) {
|
||||
global $_M,$_YW;
|
||||
$array = [
|
||||
'v_name' => '小区名称',
|
||||
'v_type' => '小区分类',
|
||||
'v_district' => '所属区域',
|
||||
'v_address' => '小区地址',
|
||||
'v_enum' => '广告位',
|
||||
'v_ebnonum' => '楼号',
|
||||
'v_eunonum' => '单元',
|
||||
'v_eenonum' => '电梯',
|
||||
'v_free' => '广告位',
|
||||
'v_bno' => '楼号',
|
||||
'v_uno' => '单元',
|
||||
'v_eno' => '电梯',
|
||||
'v_lease' => '排期中的个数',
|
||||
'v_endday' => '到期个数',
|
||||
'v_prerow' => '预排的个数',
|
||||
'v_text' => '备注'
|
||||
];
|
||||
if($this->bsign){
|
||||
$array['v_free'] = '闲置广告位总数';
|
||||
$array['v_bno'] = '闲置楼号';
|
||||
$array['v_uno'] = '闲置单元';
|
||||
$array['v_eno'] = '闲置电梯';
|
||||
$array['v_enum'] = '广告位总数';
|
||||
$array['v_ebnonum'] = '楼号总数';
|
||||
$array['v_eunonum'] = '单元总数';
|
||||
$array['v_eenonum'] = '电梯总数';
|
||||
$array['v_price'] = '小区均价';
|
||||
$array['v_psize'] = '居住规模';
|
||||
}else{
|
||||
unset($array['v_district']);
|
||||
}
|
||||
return $array;
|
||||
}
|
||||
|
||||
//广告位查询统计
|
||||
protected function tf_noticeday($sign = true) {
|
||||
global $_M,$_YW;
|
||||
return [
|
||||
'h_number' => '合同编号',
|
||||
'h_signtime' => '签订日期',
|
||||
'h_cid' => '签定公司',
|
||||
'h_tprice' => '合同总额',
|
||||
'h_wid' => '签定人员',
|
||||
'h_starttime' => '投放开始时间',
|
||||
'h_endtime' => '投放结束时间',
|
||||
'h_text' => '备注',
|
||||
// 'endtime' => '提醒时间',
|
||||
'htypes' => '提示说明'
|
||||
];
|
||||
}
|
||||
|
||||
//前台巡查页面
|
||||
protected function tf_patrol($sign = true) {
|
||||
global $_M,$_YW;
|
||||
return [
|
||||
'e_number' => '编号',
|
||||
'e_address' => '地址', //虚拟字段
|
||||
'nowtitle' => '名称',
|
||||
// 'nowstime' => '开始时间',
|
||||
// 'nowetime' => '剩余',
|
||||
];
|
||||
}
|
||||
|
||||
//巡查列表
|
||||
protected function tf_keylist($sign = true) {
|
||||
global $_M,$_YW;
|
||||
return [
|
||||
// 'k_passkey' => '密钥密码',
|
||||
'k_basekey' => '密文密码',
|
||||
'k_wid' => '相关联系人',
|
||||
'k_state' => '密钥状态',
|
||||
'k_addtime' => '新增时间',
|
||||
'k_updatetime' => '修改时间',
|
||||
'k_text' => '备注'
|
||||
];
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,716 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* 表格列表的结果处理
|
||||
*/
|
||||
|
||||
trait tlist {
|
||||
|
||||
//按钮组
|
||||
protected $btn = [];
|
||||
//禁用最后的按钮
|
||||
protected $banbtn = false;
|
||||
//相关参数缓存
|
||||
protected static $para = [];
|
||||
//相关公司缓存
|
||||
protected static $customer = [];
|
||||
//相关联系人缓存
|
||||
protected static $workers = [];
|
||||
//小区缓存
|
||||
protected static $village = [];
|
||||
|
||||
//公用删除
|
||||
//$query 主要用来替换删除按钮的值
|
||||
protected function btn_group($val,$checked,$query = []) {
|
||||
global $_M,$_YW;
|
||||
if(empty($checked)){
|
||||
if($query !== false){
|
||||
$para = [
|
||||
'c' => 'table_off',
|
||||
'a' => 'doindex',
|
||||
'submit_type' => 'delet',
|
||||
'all_id' => $val['id'],
|
||||
'tname' => $this->tname,
|
||||
];
|
||||
$query = array_merge($para,$query);
|
||||
$href = parent::http_build_query($_M['url']['own_name'],$query);
|
||||
$this->btn[] = '<a
|
||||
class="btn btn-danger btn-sm"
|
||||
table-delet
|
||||
data-plugin="alertify"
|
||||
data-type="confirm"
|
||||
data-label-ok="确定"
|
||||
data-label-cancel="取消"
|
||||
data-confirm-title="确定要删除选中的信息吗?一旦删除将不能恢复!"
|
||||
href="'.$href.'"
|
||||
>删除</a>';
|
||||
}
|
||||
}else{
|
||||
$this->btn[] = '<button type="button" class="btn btn-default btn-outline m-l-5" table-cancel>撤销</button>';
|
||||
|
||||
}
|
||||
if(count($this->btn) > 0){
|
||||
$btnstr = arrayto_string($this->btn,'');
|
||||
unset($this->btn);
|
||||
return '<div class="btn-group" role="group" >'.$btnstr.'</div>';
|
||||
}
|
||||
}
|
||||
|
||||
//整合
|
||||
private function assemble($key,$base,$val,$checked,$query = []) {
|
||||
global $_M,$_YW;
|
||||
//搜索处理
|
||||
foreach ($this->search_input as $vs){
|
||||
if(in_array($vs, $this->skip_field,true)) continue;
|
||||
$search = trim(strtoupper($this->form[$vs]));
|
||||
if($search != null) $val[$vs] = str_ireplace($search, '<font color="#FF0000">'.$search.'</font>', $val[$vs]);
|
||||
}
|
||||
//按钮组处理
|
||||
$operation = [];
|
||||
if($this->banbtn == false) $operation['__operation'] = self::btn_group($val,$checked,$query);
|
||||
//结果整合处理
|
||||
return array_merge($base,$key,array_intersect_key($val,$key),$operation);
|
||||
}
|
||||
|
||||
//广告位详细地址转换
|
||||
protected function eaddress(&$val,$_address = 'e_address',$sign = false){
|
||||
global $_M,$_YW;
|
||||
//楼号
|
||||
if(empty(self::$para['e_bno'])) self::$para['e_bno'] = parent::translate(3);
|
||||
//单元号
|
||||
if(empty(self::$para['e_uno'])) self::$para['e_uno'] = parent::translate(4);
|
||||
//电梯号
|
||||
if(empty(self::$para['e_eno'])) self::$para['e_eno'] = parent::translate(5);
|
||||
//广告位置
|
||||
if(empty(self::$para['e_aps'])) self::$para['e_aps'] = parent::translate();
|
||||
//小区
|
||||
if(empty(self::$village[$val['e_vid']])) self::$village[$val['e_vid']] = parent::villagelist($val['e_vid']);
|
||||
|
||||
if($sign){
|
||||
$val['e_vid'] = self::$village[$val['e_vid']];
|
||||
$val['e_bno'] = self::$para['e_bno'][$val['e_bno']];
|
||||
$val['e_uno'] = self::$para['e_uno'][$val['e_uno']];
|
||||
$val['e_eno'] = self::$para['e_eno'][$val['e_eno']];
|
||||
$val['e_aps'] = self::$para['e_aps'][$val['e_aps']];
|
||||
}else{
|
||||
$villages = [
|
||||
self::$village[$val['e_vid']],
|
||||
self::$para['e_bno'][$val['e_bno']],
|
||||
self::$para['e_uno'][$val['e_uno']],
|
||||
self::$para['e_eno'][$val['e_eno']],
|
||||
self::$para['e_aps'][$val['e_aps']]
|
||||
];
|
||||
$val[$_address] = arrayto_string($villages,' ');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
// +----------------------------------------------------------------------
|
||||
// | 各表处理
|
||||
// +----------------------------------------------------------------------
|
||||
|
||||
//广告位统计
|
||||
protected function elevator($val,$checked = '') {
|
||||
global $_M,$_YW;
|
||||
//获取字段
|
||||
$key = self::tf_elevator();
|
||||
|
||||
//列表前段
|
||||
$base[] = '<span class="checkbox-custom checkbox-primary">
|
||||
<input class="selectable-item" type="checkbox" name="id" value="'.$val['id'].'">
|
||||
<label></label>
|
||||
</span>';
|
||||
//对字段处理
|
||||
//楼号
|
||||
if(empty(self::$para['e_bno'])) self::$para['e_bno'] = parent::translate(3);
|
||||
//单元号
|
||||
if(empty(self::$para['e_uno'])) self::$para['e_uno'] = parent::translate(4);
|
||||
//电梯号
|
||||
if(empty(self::$para['e_eno'])) self::$para['e_eno'] = parent::translate(5);
|
||||
//广告位置
|
||||
if(empty(self::$para['e_aps'])) self::$para['e_aps'] = parent::translate();
|
||||
//小区
|
||||
if(empty(self::$village[$val['e_vid']])) self::$village[$val['e_vid']] = parent::villagelist($val['e_vid']);
|
||||
|
||||
$scheduleurl = $this->own_name_table.'elevators&e_number='.$val['e_number'];
|
||||
|
||||
$val['e_number'] = '<a href="'.$scheduleurl.'"> '.$val['e_number'].'</a>';
|
||||
$val['e_enable'] = parent::type_onoff('e_enable',$val['e_enable'],$val['id'],['禁用','启用']);
|
||||
|
||||
$val['e_vid'] = self::$village[$val['e_vid']];
|
||||
$val['e_bno'] = self::$para['e_bno'][$val['e_bno']];
|
||||
$val['e_uno'] = self::$para['e_uno'][$val['e_uno']];
|
||||
$val['e_eno'] = self::$para['e_eno'][$val['e_eno']];
|
||||
$val['e_aps'] = self::$para['e_aps'][$val['e_aps']];
|
||||
$val['e_state'] = parent::e_state();
|
||||
$val['e_label'] = parent::tab_tokenfield($val['e_label'],2);
|
||||
|
||||
//执行操作按钮
|
||||
if(empty($checked)){
|
||||
$addtourl = $this->own_name_info.__FUNCTION__.'&id='.$val['id'];
|
||||
$this->btn[] = '<a href="'.$addtourl.'" class="btn btn-success btn-sm">编辑</a>';
|
||||
}
|
||||
//跳过标记突出处理
|
||||
$this->skip_field = ['e_number'];
|
||||
return self::assemble($key,$base,$val,$checked);
|
||||
}
|
||||
|
||||
//小区统计
|
||||
protected function village($val,$checked = '') {
|
||||
global $_M,$_YW;
|
||||
//获取字段
|
||||
$key = self::tf_village();
|
||||
|
||||
//列表前段
|
||||
$base[] = '<span class="checkbox-custom checkbox-primary">
|
||||
<input class="selectable-item" type="checkbox" name="id" value="'.$val['id'].'">
|
||||
<label></label>
|
||||
</span>';
|
||||
//对字段处理
|
||||
$workerswid = stringto_array($val['v_wid'],',');
|
||||
foreach ($workerswid as $vwid) {
|
||||
if(empty(self::$workers[$vwid])) self::$workers[$vwid] = parent::workerslist($vwid);
|
||||
$workersstr[] = self::$workers[$vwid];
|
||||
}
|
||||
|
||||
//小区分类
|
||||
if(empty(self::$para['v_type'])) self::$para['v_type'] = parent::translate(6);
|
||||
|
||||
$vnameurl = $this->own_name_table.'elevator&e_vid='.$val['id'];
|
||||
$totalstr = arrayto_string([$val['total'],$val['noban'],$val['normal']],' / ');
|
||||
|
||||
$val['v_name'] = '<a href="'.$vnameurl.'"> '.$val['v_name'].'</a>';
|
||||
$val['v_type'] = self::$para['v_type'][$val['v_type']];
|
||||
$val['v_wid'] = parent::tab_tokenfield(arrayto_string($workersstr),1);
|
||||
$val['v_address'] = $val['v_province'].$val['v_city'].$val['v_district'].$val['v_address'];
|
||||
|
||||
$val['v_totalstr'] = $val['noban'] > 0?parent::str_color(0,$totalstr,600):$totalstr;
|
||||
|
||||
//执行操作按钮
|
||||
if(empty($checked)){
|
||||
$this->btn[] = '<a href="'.$vnameurl.'" class="btn btn-primary btn-sm">查看广告位</a>';
|
||||
$addtourl = $this->own_name_info.__FUNCTION__.'&id='.$val['id'];
|
||||
$this->btn[] = '<a href="'.$addtourl.'" class="btn btn-success btn-sm">编辑</a>';
|
||||
}
|
||||
|
||||
return self::assemble($key,$base,$val,$checked);
|
||||
}
|
||||
|
||||
//广告合同关联表
|
||||
protected function schedule($val,$checked = '',$base = []) {
|
||||
global $_M,$_YW;
|
||||
//获取字段
|
||||
$key = self::tf_schedule();
|
||||
//对字段处理
|
||||
//公司名称
|
||||
if(empty(self::$customer[$val['h_cid']])) self::$customer[$val['h_cid']] = parent::customerlist($val['h_cid']);
|
||||
|
||||
$s_type = strtotime($val['l_endtime']) >= strtotime(date('Y-m-d',time()))?1:0;
|
||||
if(empty(self::$para['ltype']) && $s_type) self::$para['ltype'] = parent::translate(2);
|
||||
|
||||
$val['ltype'] = parent::state_color($s_type,['已经结束',self::$para['ltype'][$val['l_schedule']]]);
|
||||
$val['h_cid'] = self::$customer[$val['h_cid']];
|
||||
$val['e_enable'] = $val['e_enable'] == 0 || $this->bsign == false?parent::state_color($val['e_enable'],['禁用','启用']):'';
|
||||
self::eaddress($val,'l_address',$this->bsign);
|
||||
return self::assemble($key,$base,$val,$checked,false);
|
||||
}
|
||||
|
||||
//合同归档
|
||||
protected function contract($val,$checked = '') {
|
||||
global $_M,$_YW;
|
||||
//获取字段
|
||||
$key = self::tf_contract();
|
||||
|
||||
//列表前段
|
||||
$base[] = '<span class="checkbox-custom checkbox-primary">
|
||||
<input class="selectable-item" type="checkbox" name="id" value="'.$val['id'].'">
|
||||
<label></label>
|
||||
</span>';
|
||||
//对字段处理
|
||||
//公司名称
|
||||
if(empty(self::$customer[$val['h_cid']])) self::$customer[$val['h_cid']] = parent::customerlist($val['h_cid']);
|
||||
|
||||
//相关人员
|
||||
$workerswid = stringto_array($val['h_wid'],',');
|
||||
foreach ($workerswid as $hwid) {
|
||||
if(empty(self::$workers[$hwid])) self::$workers[$hwid] = parent::workerslist($hwid);
|
||||
$workersstr[] = self::$workers[$hwid];
|
||||
}
|
||||
//内连接
|
||||
$h_number = $val['h_number']; //避免后面采用
|
||||
$launchurl = $this->own_name_table.'launch&l_hnumber='.$h_number;
|
||||
$curdate = date('Y-m-d',time());
|
||||
|
||||
$val['h_number'] = '<a href="'.$launchurl.'"> '.$h_number.'</a>';
|
||||
$val['h_cid'] = self::$customer[$val['h_cid']];
|
||||
$val['h_wid'] = parent::tab_tokenfield(arrayto_string($workersstr),1);
|
||||
$val['h_noticeday'] = parent::tab_tokenfield($val['h_noticeday'],2);
|
||||
|
||||
$val['h_starttime'] = strtotime($val['h_starttime']) > strtotime($curdate)?parent::str_color(2,$val['h_starttime'],600):$val['h_starttime'];
|
||||
$val['h_endtime'] = strtotime($val['h_endtime']) < strtotime($curdate)?parent::str_color(0,$val['h_endtime'],600):$val['h_endtime'];
|
||||
|
||||
//执行操作按钮
|
||||
if(empty($checked)){
|
||||
$addtourl = $this->own_name_info.'launch&cid='.$val['id'];
|
||||
$this->btn[] = '<a href="'.$addtourl.'" class="btn btn-primary btn-sm">新增投放</a>';
|
||||
$this->btn[] = '<a href="'.$launchurl.'" class="btn btn-info btn-sm">查看投放</a>';
|
||||
$addtourl = $_M['url']['own_name'].'c=backups&a=doindex&tname=schedule&l_hnumber='.$h_number;
|
||||
$this->btn[] = '<a href="'.$addtourl.'" class="btn btn-warning btn-sm">导出排期</a>';
|
||||
$addtourl = $this->own_name_info.__FUNCTION__.'&id='.$val['id'];
|
||||
$this->btn[] = '<a href="'.$addtourl.'" class="btn btn-success btn-sm">编辑</a>';
|
||||
}
|
||||
//跳过标记突出处理
|
||||
$this->skip_field = ['h_number'];
|
||||
return self::assemble($key,$base,$val,$checked);
|
||||
}
|
||||
|
||||
//公司资料
|
||||
protected function customer($val,$checked = '') {
|
||||
global $_M,$_YW;
|
||||
//获取字段
|
||||
$key = self::tf_customer();
|
||||
|
||||
//列表前段
|
||||
$base[] = '<span class="checkbox-custom checkbox-primary">
|
||||
<input class="selectable-item" type="checkbox" name="id" value="'.$val['id'].'">
|
||||
<label></label>
|
||||
</span>';
|
||||
//对字段处理
|
||||
//相关人员
|
||||
$workerswid = stringto_array($val['c_wid'],',');
|
||||
foreach ($workerswid as $cwid) {
|
||||
if(empty(self::$workers[$cwid])) self::$workers[$cwid] = parent::workerslist($cwid);
|
||||
$workersstr[] = self::$workers[$cwid];
|
||||
}
|
||||
|
||||
$hcidurl = $this->own_name_table.'contract&h_cid='.$val['id'];
|
||||
$val['c_allname'] = '<a href="'.$hcidurl.'"> '.$val['c_allname'].'</a>';
|
||||
$val['c_wid'] = parent::tab_tokenfield(arrayto_string($workersstr),1);
|
||||
$val['c_address'] = $val['c_province'].$val['c_city'].$val['c_district'].$val['c_address'];
|
||||
|
||||
//执行操作按钮
|
||||
if(empty($checked)){
|
||||
$addtourl = $this->own_name_info.__FUNCTION__.'&id='.$val['id'];
|
||||
$this->btn[] = '<a href="'.$addtourl.'" class="btn btn-success btn-sm">编辑</a>';
|
||||
}
|
||||
return self::assemble($key,$base,$val,$checked);
|
||||
}
|
||||
|
||||
//企业联系人
|
||||
protected function workers($val,$checked = '') {
|
||||
global $_M,$_YW;
|
||||
//获取字段
|
||||
$key = self::tf_workers();
|
||||
|
||||
//列表前段
|
||||
$base[] = '<span class="checkbox-custom checkbox-primary">
|
||||
<input class="selectable-item" type="checkbox" name="id" value="'.$val['id'].'">
|
||||
<label></label>
|
||||
</span>';
|
||||
|
||||
//拿到对应的ID
|
||||
//职务
|
||||
if(empty(self::$para)) self::$para = parent::translate(1);
|
||||
|
||||
//对字段处理
|
||||
$val['w_jid'] = self::$para[$val['w_jid']];
|
||||
$val['w_tel'] = parent::tab_tokenfield($val['w_tel'],1);
|
||||
|
||||
//执行操作按钮
|
||||
if(empty($checked)){
|
||||
$addtourl = $this->own_name_info.__FUNCTION__.'&id='.$val['id'];
|
||||
$this->btn[] = '<a href="'.$addtourl.'" class="btn btn-success btn-sm">编辑</a>';
|
||||
}
|
||||
return self::assemble($key,$base,$val,$checked);
|
||||
}
|
||||
|
||||
//参数统计
|
||||
protected function para($val,$checked = '') {
|
||||
global $_M,$_YW;
|
||||
//获取字段
|
||||
$key = self::tf_para();
|
||||
|
||||
//列表前段
|
||||
$base[] = '<span class="checkbox-custom checkbox-primary">
|
||||
<input class="selectable-item" type="checkbox" name="id" value="'.$val['id'].'" '.$checked.'>
|
||||
<label></label>
|
||||
</span>';
|
||||
|
||||
//对字段处理
|
||||
//优先计算
|
||||
switch ($val['p_type']) {
|
||||
case 0:
|
||||
$p_num = $this->tsql->table('elevator')->where(['e_aps' => $val['p_value']])->count();
|
||||
break;
|
||||
case 1:
|
||||
$p_num = $this->tsql->table('workers')->where(['w_jid' => $val['p_value']])->count();
|
||||
break;
|
||||
case 2:
|
||||
$p_num = $this->tsql->table('launch')->where(['l_schedule' => $val['p_value']])->count();
|
||||
break;
|
||||
case 3:
|
||||
$p_num = $this->tsql->table('elevator')->where(['e_bno' => $val['p_value']])->count();
|
||||
break;
|
||||
case 4:
|
||||
$p_num = $this->tsql->table('elevator')->where(['e_uno' => $val['p_value']])->count();
|
||||
break;
|
||||
case 5:
|
||||
$p_num = $this->tsql->table('elevator')->where(['e_eno' => $val['p_value']])->count();
|
||||
break;
|
||||
case 6:
|
||||
$p_num = $this->tsql->table('village')->where(['v_type' => $val['p_value']])->count();
|
||||
break;
|
||||
case 7:
|
||||
$p_num = $this->tsql->table('launch')->where(['l_type' => $val['p_value']])->count();
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
//有数据后不允许再修改参数值,可修改参数名,且不是在新增情况下
|
||||
if($p_num > 0 && empty($checked)){
|
||||
$readonly = ' readonly="readonly" ';
|
||||
}
|
||||
|
||||
$inputp_num = '<input type="hidden" name="p_num-'.$val['id'].'" value="'.$p_num.'">';
|
||||
$val['p_num'] = $checked?$inputp_num:$p_num.' 条'.$inputp_num;
|
||||
$val['p_type'] = '<div class="form-group">
|
||||
<select class="form-control" name="p_type-'.$val['id'].'" data-checked="'.$val['p_type'].'" required >
|
||||
<option value="0">广告位置</option>
|
||||
<option value="1">企业职位</option>
|
||||
<option value="2">投放进度</option>
|
||||
<option value="3">小区楼号</option>
|
||||
<option value="4">单元号</option>
|
||||
<option value="5">电梯编号</option>
|
||||
<option value="6">小区分类</option>
|
||||
<option value="7">广告类型</option>
|
||||
</select>
|
||||
</div>';
|
||||
$val['p_order'] = '<div class="form-group">
|
||||
<input type="text" name="p_order-'.$val['id'].'" value="'.$val['p_order'].'" placeholder="仅支持数字" data-fv-integer="true" data-fv-integer-message="请输入有效的整数数字" class="form-control">
|
||||
</div>';
|
||||
$val['p_name'] = '<div class="form-group">
|
||||
<input type="text" name="p_name-'.$val['id'].'" value="'.$val['p_name'].'" required class="form-control">
|
||||
</div>';
|
||||
$val['p_value'] = '<div class="form-group">
|
||||
<input type="text" name="p_value-'.$val['id'].'" value="'.$val['p_value'].'" placeholder="仅支持数字" data-fv-integer="true" data-fv-integer-message="请输入有效的整数数字" class="form-control" '.$readonly.'>
|
||||
</div>';
|
||||
$val['p_text'] = '<input type="text" name="p_text-'.$val['id'].'" value="'.$val['p_text'].'" class="form-control">';
|
||||
|
||||
//执行操作按钮
|
||||
return self::assemble($key,$base,$val,$checked,$p_num > 0?false:[]);
|
||||
}
|
||||
|
||||
//投放计划
|
||||
protected function launch($val,$checked = '') {
|
||||
global $_M,$_YW;
|
||||
//获取字段
|
||||
$key = self::tf_launch();
|
||||
|
||||
//列表前段
|
||||
$base[] = '<span class="checkbox-custom checkbox-primary ap-one">
|
||||
<input class="selectable-item" type="checkbox" name="id" value="'.$val['id'].'" '.$checked.'>
|
||||
<label></label>
|
||||
</span>';
|
||||
//对字段处理
|
||||
if(empty(self::$para['l_schedule'])) self::$para['l_schedule'] = parent::translate(2);
|
||||
if(empty(self::$para['l_type'])) self::$para['l_type'] = parent::translate(7);
|
||||
$enum = count(array_filter(stringto_array($val['l_enumber'],',')));
|
||||
$snum = count(array_filter(stringto_array($val['l_selectenum'],',')));
|
||||
$esstr = " {$enum} / {$snum} ";
|
||||
$curdate = date('Y-m-d',time());
|
||||
|
||||
$l_titleurl = $this->own_name_table.'schedule&l_id='.$val['id'];
|
||||
$val['l_totalnum'] = $enum == $snum?$esstr:parent::state_color(0,[$esstr]); //放在最前面,防止后面对l_enumber 字段的处理
|
||||
$val['l_title'] = '<a href="'.$l_titleurl.'"> '.$val['l_title'].'</a>';
|
||||
$val['l_enumber'] = parent::tab_tokenfield($val['l_enumber'],1,',',6);
|
||||
$val['l_schedule'] = parent::tab_tokenfield(self::$para['l_schedule'][$val['l_schedule']],1);
|
||||
$val['l_type'] = self::$para['l_type'][$val['l_type']];
|
||||
|
||||
$val['l_starttime'] = strtotime($val['l_starttime']) > strtotime($curdate)?parent::str_color(2,$val['l_starttime'],600):$val['l_starttime'];
|
||||
$val['l_endtime'] = strtotime($val['l_endtime']) < strtotime($curdate)?parent::str_color(0,$val['l_endtime'],600):$val['l_endtime'];
|
||||
|
||||
//执行操作按钮
|
||||
if(empty($checked)){
|
||||
$this->btn[] = '<a href="'.$l_titleurl.'" class="btn btn-info btn-sm">查看排期</a>';
|
||||
$addtourl = $_M['url']['own_name'].'c=backups&a=doindex&tname=schedule&id='.$val['id'];
|
||||
$this->btn[] = '<a href="'.$addtourl.'" class="btn btn-warning btn-sm">导出排期</a>';
|
||||
$addtourl = $this->own_name_info.__FUNCTION__.'&slid='.$val['id'];
|
||||
$this->btn[] = '<a href="'.$addtourl.'" class="btn btn-success btn-sm">编辑</a>';
|
||||
}
|
||||
return self::assemble($key,$base,$val,$checked);
|
||||
}
|
||||
|
||||
//广告位统计
|
||||
protected function applan($val,$checked = '') {
|
||||
global $_M,$_YW;
|
||||
//获取字段
|
||||
$key = self::tf_applan();
|
||||
|
||||
//列表前段
|
||||
$e_number = $val['e_number'];
|
||||
//判断之前是否已经选中
|
||||
$ebool = in_array($e_number, array_filter(stringto_array($this->form['l_selectenum'],',')),true);
|
||||
//给予选中标识
|
||||
$class = ' checkbox-primary '; //刚选择默认颜色
|
||||
//$val['lanum'] 大于0 说明重复,不可投放
|
||||
if($ebool) {
|
||||
$apchecked = ' checked ';
|
||||
$slid = $this->form['slid'];
|
||||
//判断排期表内是否存在
|
||||
if(!empty($this->form['slid'])){
|
||||
if(empty(self::$para[$slid])) self::$para[$slid] = $this->tsql->table('launch')->where(['id' => $slid])->one();
|
||||
$l_hnumber = stringto_array(self::$para[$slid]['l_enumber'],',');
|
||||
$class = in_array($e_number,$l_hnumber,true)?' checkbox-success ':' checkbox-danger '; //刚选择默认颜色
|
||||
}
|
||||
}
|
||||
|
||||
// 判断广告位是否可排期
|
||||
if(empty($val['e_enable'])){
|
||||
$e_types = parent::str_color(0,'禁止投放');
|
||||
if($apchecked) {
|
||||
$class .= ' ap-one-disabled ';
|
||||
}else{
|
||||
$disabled = ' disabled ';
|
||||
}
|
||||
}else{
|
||||
$s_starttime = $_M['form']['l_starttime'];
|
||||
$s_endtime = $_M['form']['l_endtime'];
|
||||
if($s_starttime && $s_endtime && strtotime($s_starttime) <= strtotime($s_endtime)){
|
||||
//判断是否可排期成功
|
||||
if($val['lanum'] > 0){
|
||||
$e_types = parent::str_color(0,'禁止投放');
|
||||
if($apchecked) {
|
||||
$class .= ' ap-one-disabled ';
|
||||
}else{
|
||||
$disabled = ' disabled ';
|
||||
}
|
||||
}else{
|
||||
$e_types = parent::str_color(1,'可投放');
|
||||
}
|
||||
}else{
|
||||
$e_types = parent::str_color(3,'无法判断');
|
||||
}
|
||||
}
|
||||
|
||||
// checkbox-danger 没有在排期库的显示为红色 checkbox-primary 正常的显示蓝色 checkbox-success 绿色
|
||||
$base[] = '<span class="checkbox-custom '.$class.' ap-one">
|
||||
<input class="selectable-item" type="checkbox" name="id" value="'.$e_number.'" '.$apchecked.$disabled.'>
|
||||
<label></label>
|
||||
</span>';
|
||||
|
||||
//对字段处理
|
||||
$curtime = strtotime(date('Y-m-d',time()));
|
||||
//上个排期
|
||||
if(strtotime($val['endetime']) < $curtime){
|
||||
$val['endtitle'] = '<span class="blue-grey-400">'.$val['endtitle'].'</span>';
|
||||
$val['endstime'] = '<span class="blue-grey-400">'.$val['endstime'].'</span>';
|
||||
$val['endetime'] = '<span class="blue-grey-400">'.$val['endetime'].'</span>';
|
||||
}
|
||||
|
||||
$val['endtime'] = strtotime($val['endtime']) < $curtime
|
||||
?'<span class="line_through blue-grey-400">'.$val['endtime'].'</span>'
|
||||
:$val['endtime'];
|
||||
$val['e_types'] = $e_types;
|
||||
$val['e_enable'] = parent::state_color($val['e_enable'],['禁用','启用']);
|
||||
self::eaddress($val,'e_address');
|
||||
//比较每个广告位的结束时间 和 现在设置的投放订单的开始时间 大小
|
||||
|
||||
//禁用最后的按钮
|
||||
$this->banbtn = true;
|
||||
return self::assemble($key,$base,$val,$checked,false);
|
||||
}
|
||||
|
||||
//广告位统计
|
||||
protected function elevators($val,$checked = '') {
|
||||
global $_M,$_YW;
|
||||
//获取字段
|
||||
$key = self::tf_elevators();
|
||||
|
||||
//列表前段
|
||||
$base[] = '<span class="checkbox-custom checkbox-primary ap-one">
|
||||
<input class="selectable-item" type="checkbox" name="id" value="'.$val['e_number'].'" '.$checked.'>
|
||||
<label></label>
|
||||
</span>';
|
||||
//对字段处理
|
||||
$curtime = strtotime(date('Y-m-d',time()));
|
||||
$scheduleurl = $this->own_name_table.'schedule&e_number='.$val['e_number'];
|
||||
$uplaunchurl = $this->own_name_info.'uplaunch&e_number='.$val['e_number'];
|
||||
|
||||
$val['e_number'] = '<a href="'.$scheduleurl.'"> '.$val['e_number'].'</a>';
|
||||
$val['etypes'] = parent::state_color($val['etypes'],[$val['e_enable']?'空位':'已禁用','排期中']);
|
||||
$val['e_enable'] = parent::state_color($val['e_enable'],['禁用','启用']);
|
||||
|
||||
$scheduleurlid = $this->own_name_table.'schedule&l_id=';
|
||||
$val['endtitle'] = $val['endtitle']?'<a href="'.$scheduleurlid.$val['endid'].'">'.$val['endtitle'].'</a>':'';
|
||||
$val['nowtitle'] = $val['nowtitle']?'<a href="'.$scheduleurlid.$val['nowid'].'">'.$val['nowtitle'].'</a>':'';
|
||||
$val['nexttitle'] = $val['nexttitle']?'<a href="'.$scheduleurlid.$val['nextid'].'">'.$val['nexttitle'].'</a>':'';
|
||||
self::eaddress($val,'e_address');
|
||||
|
||||
$val['endtime'] = strtotime($val['endtime']) < $curtime
|
||||
?'<span class="line_through blue-grey-400">'.$val['endtime'].'</span>'
|
||||
:$val['endtime'];
|
||||
//上个排期
|
||||
if(strtotime($val['endetime']) < $curtime){
|
||||
$val['endstime'] = '<span class="blue-grey-400">'.$val['endstime'].'</span>';
|
||||
$val['endetime'] = '<span class="blue-grey-400">'.$val['endetime'].'</span>';
|
||||
}
|
||||
|
||||
//执行操作按钮
|
||||
if(empty($checked)){
|
||||
// $this->btn[] = '<a href="'.$uplaunchurl.'" class="btn btn-success btn-sm">调整排期</a>';
|
||||
$this->btn[] = '<a href="'.$scheduleurl.'" class="btn btn-primary btn-sm">查看排期</a>';
|
||||
}
|
||||
//跳过标记突出处理
|
||||
$this->skip_field = ['e_number'];
|
||||
return self::assemble($key,$base,$val,$checked,false);
|
||||
}
|
||||
|
||||
//小区统计展示
|
||||
protected function villages($val,$checked = '') {
|
||||
global $_M,$_YW;
|
||||
//获取字段
|
||||
$key = self::tf_villages();
|
||||
|
||||
//列表前段
|
||||
$base[] = '<span class="checkbox-custom checkbox-primary">
|
||||
<input class="selectable-item" type="checkbox" name="id" value="'.$val['id'].'">
|
||||
<label></label>
|
||||
</span>';
|
||||
|
||||
//小区分类
|
||||
if(empty(self::$para['v_type'])) self::$para['v_type'] = parent::translate(6);
|
||||
//对字段处理
|
||||
$scheduleurl = $this->own_name_table.'schedule&e_vid='.$val['id'];
|
||||
|
||||
$val['v_name'] = '<a href="'.$scheduleurl.'" title="查看排期"> '.$val['v_name'].'</a>';
|
||||
$val['v_type'] = self::$para['v_type'][$val['v_type']];
|
||||
$val['v_free'] = $val['v_free']?'<span class="tag tag-sm tag-pill tag-info">'.$val['v_free'].'</span>':$val['v_free'];
|
||||
$val['v_lease'] = $val['v_lease']?'<span class="tag tag-sm tag-pill tag-warning">'.$val['v_lease'].'</span>':$val['v_lease'];
|
||||
$val['v_endday'] = $val['v_endday']?'<span class="tag tag-sm tag-pill tag-success">'.$val['v_endday'].'</span>':$val['v_endday'];
|
||||
$val['v_prerow'] = $val['v_prerow']?'<span class="tag tag-sm tag-pill tag-primary">'.$val['v_prerow'].'</span>':$val['v_prerow'];
|
||||
if($val['noban'] > 0){
|
||||
$val['v_enum'] = '<span class="tag tag-sm tag-pill tag-dark">'.$val['v_enum'].'</span>';
|
||||
if($this->bsign) $val['v_enum'] .= ' -- ';
|
||||
$val['v_enum'] .= '<span class="tag tag-sm tag-pill tag-danger m-l-10">'.$val['noban'].'</span>';
|
||||
}else{
|
||||
$val['v_enum'] = $val['v_enum']?:'<span class="tag tag-sm tag-pill tag-danger">'.$val['v_enum'].'</span>';
|
||||
}
|
||||
// $val['v_province'].$val['v_city'] 去掉省市
|
||||
if(!$this->bsign) $val['v_address'] = $val['v_district'].' '.$val['v_address'];
|
||||
|
||||
//执行操作按钮
|
||||
if(empty($checked)){
|
||||
$addtourl = $this->own_name_table.'elevators&e_vid='.$val['id'];
|
||||
$this->btn[] = '<a href="'.$addtourl.'" class="btn btn-primary btn-sm">广告位统计</a>';
|
||||
}
|
||||
return self::assemble($key,$base,$val,$checked,false);
|
||||
}
|
||||
|
||||
//小区统计展示
|
||||
protected function noticeday($val,$checked = '',$base = []) {
|
||||
global $_M,$_YW;
|
||||
//获取字段
|
||||
$key = self::tf_noticeday();
|
||||
|
||||
//列表前段
|
||||
|
||||
//对字段处理
|
||||
//公司
|
||||
if(empty(self::$customer[$val['h_cid']])) self::$customer[$val['h_cid']] = parent::customerlist($val['h_cid']);
|
||||
|
||||
//相关人员
|
||||
$workerswid = stringto_array($val['h_wid'],',');
|
||||
foreach ($workerswid as $hwid) {
|
||||
if(empty(self::$workers[$hwid])) self::$workers[$hwid] = parent::workerslist($hwid);
|
||||
$workersstr[] = self::$workers[$hwid];
|
||||
}
|
||||
|
||||
$h_endtime = strtotime($val['h_endtime']);
|
||||
$curdate = strtotime(date('Y-m-d',time()));
|
||||
//首先判断当前这条信息是属于到期前台3天的 还是属于设置的提醒
|
||||
//那就是判断订单结束时间和今天的相差天数
|
||||
$day = abs(($h_endtime - $curdate) / 86400);
|
||||
if($day > 3){
|
||||
//按照设置的提醒来计算
|
||||
$str = parent::str_color(0,$val['noticeday'],800);
|
||||
$htypes = "{$str} 天后到期提醒";
|
||||
}else{
|
||||
//按照前后3天来设置
|
||||
if($h_endtime > $curdate){
|
||||
$str = parent::str_color(0,$day,800);
|
||||
//说明还没到期
|
||||
$htypes = "{$str} 天后到期";
|
||||
}else{
|
||||
//说明已经到期或者过期
|
||||
$htypes = $day == 0?parent::str_color(0,'今天到期',800):parent::str_color(0,"已过期 {$day} 天",800);
|
||||
}
|
||||
}
|
||||
|
||||
//设置的到期提醒
|
||||
//订单到期前后3天提醒
|
||||
|
||||
$val['h_cid'] = self::$customer[$val['h_cid']];
|
||||
$val['h_wid'] = parent::tab_tokenfield(arrayto_string($workersstr),1);
|
||||
$val['htypes'] = $htypes;
|
||||
|
||||
$numberurl = $this->own_name_table.'contract&h_number='.$val['h_number'];
|
||||
$val['h_number'] = '<a href="'.$numberurl.'" title="查看排期"> '.$val['h_number'].'</a>';
|
||||
|
||||
return self::assemble($key,$base,$val,$checked,false);
|
||||
}
|
||||
|
||||
//前台巡查
|
||||
protected function patrol($val,$checked = '') {
|
||||
global $_M,$_YW;
|
||||
//获取字段
|
||||
$key = self::tf_patrol();
|
||||
|
||||
//列表前段
|
||||
//对字段处理
|
||||
//计算剩余时间
|
||||
$nowetime = strtotime($val['nowetime']);
|
||||
$curdate = strtotime(date('Y-m-d',time()));
|
||||
$day = $val['nowetime']?abs(($nowetime - $curdate) / 86400):0;
|
||||
|
||||
$val['e_number'] = parent::state_color($val['e_enable'],[$val['e_number'],$val['e_number']]);
|
||||
self::eaddress($val,'e_address');
|
||||
$val['nowtitle'] = parent::state_color($curdate > $nowetime ?0:($day > 2?1:2),[$val['nowtitle'],$val['nowtitle'],$val['nowtitle']]);
|
||||
|
||||
return self::assemble($key,[],$val,$checked,false);
|
||||
}
|
||||
|
||||
//参数统计
|
||||
protected function keylist($val,$checked = '') {
|
||||
global $_M,$_YW;
|
||||
//获取字段
|
||||
$key = self::tf_keylist();
|
||||
|
||||
//列表前段
|
||||
$base[] = '<span class="checkbox-custom checkbox-primary">
|
||||
<input class="selectable-item" type="checkbox" name="id" value="'.$val['id'].'" '.$checked.'>
|
||||
<label></label>
|
||||
</span>';
|
||||
|
||||
//对字段处理
|
||||
if(empty(self::$workers[$val['k_wid']])) {
|
||||
$k_wid = parent::workerslist($val['k_wid'],false);
|
||||
self::$workers[$val['k_wid']] = $k_wid['w_name'].','.$k_wid['w_tel'];
|
||||
}
|
||||
|
||||
$val['k_basekey'] = base64_decode($val['k_basekey']);
|
||||
$val['k_state'] = parent::state_color($val['k_state'],['禁用','启用']);
|
||||
$val['k_wid'] = parent::tab_tokenfield(self::$workers[$val['k_wid']],1);
|
||||
|
||||
//执行操作按钮
|
||||
if(empty($checked)){
|
||||
$addtourl = $this->own_name_info.__FUNCTION__.'&id='.$val['id'];
|
||||
$this->btn[] = '<a href="'.$addtourl.'" class="btn btn-success btn-sm">编辑</a>';
|
||||
}
|
||||
//执行操作按钮
|
||||
return self::assemble($key,$base,$val,$checked);
|
||||
}
|
||||
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,4 @@
|
|||
# 城市JSON
|
||||
根据系统城市JSON优化后的城市JSON
|
||||
1、在米拓6.2之前的版本时,二级城市和三级城市不存在‘请选择’选项,优化后新增此项
|
||||
2、在米拓6.2版本时系统二级城市和三级城市增加了‘请选择’选项,但又给一级城市增加了简称,优化去掉一级城市的简称
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,196 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* 核心方法
|
||||
* 应用支持php5.4+
|
||||
*/
|
||||
|
||||
trait appcmp {
|
||||
|
||||
# 应用文件名
|
||||
public $m_name = M_NAME;
|
||||
# 应用数据库名简写
|
||||
public $k_name;
|
||||
# 数据库简写名
|
||||
public $tname;
|
||||
# 模板路径
|
||||
public $appshow = '';
|
||||
#是否要执行析构方法
|
||||
public $destruct = true;
|
||||
|
||||
protected function show($file, $data)
|
||||
{
|
||||
global $_M, $_YW;
|
||||
$view =load::sys_class('engine','new');
|
||||
require_once $view->dodisplay($file, $data);
|
||||
}
|
||||
|
||||
protected function check_auth() {
|
||||
global $_M, $_YW;
|
||||
self::cmp_a();
|
||||
$exetime = time();
|
||||
$bool = false;
|
||||
//解密后的数组
|
||||
$cache = json_decode(authcode($_YW['c']['ac_cache'],'DECODE',md5($_M['config']['met_weburl'])),true);
|
||||
//查看本地是否存在禁止更新锁
|
||||
if(file_exists(PATH_APP_FILE."config/update.lock")) $cache['update'] = 1;
|
||||
//需要对比数据
|
||||
if( $cache['time'] > $exetime || ($cache['time'] > $cache['exetime'] && $cache['time'] < $exetime) ){
|
||||
$check = json_decode(authcode($cache['check'],'DECODE', md5(self::parse_url($_M['config']['met_weburl']).md5($this->m_name.$_YW['app']['addtime']))),true);
|
||||
$state = $check['state'] && $check['app']['v_m_name'] == $this->m_name?true:false;
|
||||
if($state){
|
||||
if($check['vatime']['minute'] > 0){
|
||||
//对有效时间计算
|
||||
$time = date('Y-m-d H:i:s',$check['vatime']['stime']);
|
||||
$endtime = strtotime("{$time} +{$check['vatime']['minute']} minute");
|
||||
if($endtime <= $exetime ) $state = false;
|
||||
}
|
||||
//最终结果判断
|
||||
$bool = $state && !empty($cache['wechat']) && !empty($cache['update'])?true:false;
|
||||
}
|
||||
}
|
||||
if(!$bool) turnover($_M['url']['own_name'].'c=index&a=doindex&check=1','No prompt');
|
||||
}
|
||||
|
||||
# 加载方法
|
||||
public function loadp($str = '') {
|
||||
global $_M, $_YW;
|
||||
$arr = explode(",",$str);
|
||||
foreach ($arr as $val) {
|
||||
self::$val();
|
||||
}
|
||||
}
|
||||
|
||||
# 批量加载
|
||||
public function cmp_load() {
|
||||
global $_M, $_YW;
|
||||
self::loadp('cmp_k,cmp_c,cmp_t');
|
||||
}
|
||||
|
||||
# 获取完整数据库
|
||||
public function cmp_k() {
|
||||
global $_M, $_YW;
|
||||
//全局
|
||||
$globaltablename = ['cloud_config'];
|
||||
//应用独有表名
|
||||
$tablename = file_get_contents(PATH_ALL_APP.$this->m_name.'/config/table');
|
||||
$this->k_name = array_diff(stringto_array($tablename,','),$globaltablename);
|
||||
foreach ($this->k_name as $val) {
|
||||
$_YW['k'][$val] = $_M['table'][$this->m_name . '_' . $val];
|
||||
}
|
||||
foreach ($globaltablename as $val) {
|
||||
$_YW['k'][$val] = $_M['table'][$val];
|
||||
}
|
||||
}
|
||||
|
||||
# 配置信息
|
||||
public function cmp_c($lang = '') {
|
||||
global $_M, $_YW;
|
||||
$_YW['n'] = $this->m_name;
|
||||
if (empty($lang)) $lang = $_M['lang'];
|
||||
$result = DB::query("select name,value from {$_M['table']['cloud_config']} where m_name = '{$this->m_name}' AND (lang = '{$lang}' OR lang = 'cloud') ");
|
||||
while ($val = DB::fetch_array($result)) {
|
||||
$_YW['c'][$val['name']] = $val['value'];
|
||||
}
|
||||
if(class_exists('admin') || class_exists('app')) self::check_auth();
|
||||
}
|
||||
|
||||
# 应用信息
|
||||
public function cmp_a() {
|
||||
global $_M, $_YW;
|
||||
$_YW['app'] = DB::get_one("SELECT * FROM {$_M['table']['applist']} WHERE m_name='{$this->m_name}' ");
|
||||
}
|
||||
|
||||
# 栏目信息
|
||||
public function cmp_ac() {
|
||||
global $_M, $_YW;
|
||||
$_YW['app']['column'] = DB::get_one("SELECT * FROM {$_M['table']['column']} WHERE module='{$_YW['app']['no']}' AND lang='{$_M['lang']}' ");
|
||||
}
|
||||
|
||||
# 语言文字
|
||||
public function cmp_t() {
|
||||
global $_M, $_YW;
|
||||
$file = PATH_APP_FILE . 'lang/' . $_M['lang'] . '.php';
|
||||
if (!file_exists($file)) {
|
||||
$file = PATH_APP_FILE . 'lang/cn.php';
|
||||
}
|
||||
if (file_exists($file)) require_once($file);
|
||||
}
|
||||
|
||||
# 单条配置语句入库
|
||||
public function addconsql($name, $val = '',$lang) {
|
||||
global $_M, $_YW;
|
||||
if (empty($lang)) $lang = $_M['lang'];
|
||||
DB::query("INSERT INTO {$_M['table']['cloud_config']} (name,lang,m_name,value) VALUES ('{$name}','{$lang}','{$this->m_name}','{$val}') ON DUPLICATE KEY UPDATE value='{$val}' ");
|
||||
}
|
||||
|
||||
# 信息JQ弹出并刷新当前页面
|
||||
public function scriptgo($info) {
|
||||
global $_M;
|
||||
$this->destruct = false;
|
||||
echo "<script>alert('{$info}');history.go(-1);</script>";
|
||||
exit(0);
|
||||
}
|
||||
|
||||
//表简称
|
||||
public function tname() {
|
||||
global $_M, $_YW;
|
||||
return substr($_M['form']['a'],2);
|
||||
}
|
||||
|
||||
//时间格式化
|
||||
public function data_time($time) {
|
||||
global $_M,$_YW;
|
||||
return $time?date('Y-m-d H:i:s', $time):'';
|
||||
}
|
||||
|
||||
//字符截取
|
||||
public function sub_str($str) {
|
||||
global $_M,$_YW;
|
||||
return strlen($str) > 0?substr($str,0, 8).'...':'';
|
||||
}
|
||||
|
||||
/*
|
||||
* 把数组转成JSON,用于ajax返回,可以用于普通json请求返回,也可以用于跨域的ajax的jsonp格式的数据请求返回。
|
||||
* @param array $back 输出字符串或数组
|
||||
* @param string $callback ajax的回调函数的名称
|
||||
*/
|
||||
public function jsoncallback($back, $callback = 'callback') {
|
||||
global $_M;
|
||||
header('Content-type: application/x-javascript');
|
||||
$callback = $_M['form'][$callback];
|
||||
$json = json_encode($back,JSON_UNESCAPED_UNICODE);
|
||||
echo $callback?$callback . '(' . $json . ')':$json;
|
||||
}
|
||||
|
||||
# 分析网址
|
||||
public function parse_url($url,$type = 'host') {
|
||||
global $_M;
|
||||
$url = url_standard($url);
|
||||
$array = parse_url($url);
|
||||
return $type == 'arr'?$array:$array[$type];
|
||||
}
|
||||
|
||||
//URL参数处理,防止URL拼接错误
|
||||
public function http_build_query($url,$arr) {
|
||||
global $_M, $_YW;
|
||||
if(!in_array(substr($url,-1), ['&','?'])) $url .= '&';
|
||||
return $url.http_build_query($arr);
|
||||
}
|
||||
|
||||
//前端CSS合并
|
||||
public function merge_css($addcss = '') {
|
||||
global $_M, $_YW;
|
||||
$cssfile = PATH_APP_FILE.'public/css/webcss.css';
|
||||
if(!file_exists($cssfile)) return false;
|
||||
$css = file_get_contents($cssfile);
|
||||
//自定义新增CSS文件
|
||||
$diycss = PATH_APP_FILE.'public/css/diycss.css';
|
||||
if(file_exists($diycss)) $css .= PHP_EOL.file_get_contents($diycss);
|
||||
//通过后台新增的CSS
|
||||
if(empty($addcss)) $addcss = $_YW['c']['diycss'];
|
||||
return file_put_contents(PATH_APP_FILE.'web/templates/met/css/metinfo.css', $css.PHP_EOL.$addcss);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
# basic_admin.js
|
||||
basic_admin.js 替换米拓6.2版本之前的系统文件 public\ui\v2\static\js\basic_admin.js
|
||||
替换修复以下BUG
|
||||
1、修复表格新增行时,传递给后台的new_id值不能自增BUG
|
||||
2、修复表格新增行时,后台新增的下拉、单选、多选存在默认值不能采用默认值的BUG
|
||||
3、此文件只是修复后台的BUG,前端也存在同样BUG
|
||||
4、米拓6.2版本时系统已修复,第一个BUG,第二个BUG依旧存在
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,640 @@
|
|||
<?php
|
||||
defined('IN_MET') or exit('No permission');
|
||||
//更新文件的模板
|
||||
load::sys_class('admin');
|
||||
load::sys_func('file');
|
||||
//不继承APP
|
||||
class update extends admin{
|
||||
|
||||
//应用信息
|
||||
private $app;
|
||||
//应用NO
|
||||
private $appno;
|
||||
//应用文件名
|
||||
private $m_name;
|
||||
//应用新版本号
|
||||
private $newver;
|
||||
//当前版本号
|
||||
private $oldver;
|
||||
//安装锁信息,应用入口信息
|
||||
private $appinfo = [];
|
||||
|
||||
//应用数据库
|
||||
private $sqlk;
|
||||
private $fixed_name;
|
||||
|
||||
# 初始化
|
||||
public function __construct() {
|
||||
global $_M;
|
||||
parent::__construct();
|
||||
//安装锁信息,应用入口信息
|
||||
$this->appinfo = [
|
||||
'url' => '',
|
||||
'c' => 'dzadsod',
|
||||
'a' => 'dodzadsod',
|
||||
'lang' => $_M['lang'],
|
||||
'time' => date('Y-m-d H:i:s',time())
|
||||
];
|
||||
$this->sqlk = $_M['table']['cloud_config'];
|
||||
}
|
||||
|
||||
//需要传递值
|
||||
public function set($app) {
|
||||
global $_M;
|
||||
$this->app = $app;
|
||||
$this->appno = $app['no'];
|
||||
$this->m_name = $app['m_name'];
|
||||
$this->newver = $app['ver'];
|
||||
$this->oldver = $app['oldver'];
|
||||
return $this;
|
||||
}
|
||||
|
||||
//修改数据库版本
|
||||
public function start() {
|
||||
global $_M;
|
||||
if(file_exists(INS_LOCK_FILE)){
|
||||
switch ($this->newver) {
|
||||
case 1.1:
|
||||
//更新数据库
|
||||
self::inssql();
|
||||
//更新版本内容
|
||||
self::update_1_1();
|
||||
break;
|
||||
case 1.2:
|
||||
//更新版本内容
|
||||
self::update_1_2();
|
||||
break;
|
||||
case 1.3:
|
||||
//更新版本内容
|
||||
self::update_1_3();
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
//更新版本号
|
||||
self::upver();
|
||||
}else{
|
||||
//创建数据表
|
||||
self::inssql();
|
||||
//默认系统表处理
|
||||
self::systable();
|
||||
//默认数据
|
||||
self::default_config();
|
||||
//创建栏目 [前端页面时才需要,API也不需要]
|
||||
// self::column();
|
||||
//安装锁
|
||||
self::install_lock();
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
+ 应用新安装操作
|
||||
+-------------------------------------------------------------------------------------------
|
||||
+ up1.1 : 更新版本
|
||||
+-------------------------------------------------------------------------------------------
|
||||
+ default_config : 默认的应用配置信息方法
|
||||
+-------------------------------------------------------------------------------------------
|
||||
+ systable : 当前应用版本针对数据库表的信息
|
||||
+-------------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
// 1.1 版本
|
||||
public function update_1_1() {
|
||||
global $_M;
|
||||
//执行SQL其他操作
|
||||
$tview = self::tview();
|
||||
foreach ($tview as $key => $val){
|
||||
$tname[] = $key;
|
||||
$table_name = self::split_table_name($key);
|
||||
$table[] = $table_name;
|
||||
DB::query($val);
|
||||
}
|
||||
|
||||
//记录表名
|
||||
add_table(arrayto_string($table,'|'));
|
||||
$filetable = PATH_ALL_APP.$this->m_name.'/config/table';
|
||||
//先获取之前已经存在的简短表名
|
||||
if(file_exists($filetable)) {
|
||||
$tnamestr = file_get_contents($filetable);
|
||||
$tname = array_merge($tname,stringto_array($tnamestr,','));
|
||||
}else{
|
||||
//创建
|
||||
makefile($filetable);
|
||||
}
|
||||
//写入
|
||||
file_put_contents($filetable,arrayto_string($tname,','));
|
||||
}
|
||||
|
||||
// 1.2 版本
|
||||
public function update_1_2() {
|
||||
global $_M;
|
||||
//执行SQL其他操作
|
||||
$tables = self::table_field();
|
||||
$table = $tname = [];
|
||||
foreach ($tables as $key => $val) {
|
||||
$tname[] = $key;
|
||||
$table_name = self::split_table_name($key);
|
||||
$table[] = $table_name;
|
||||
if($val) DB::query("CREATE TABLE `{$_M['config']['tablepre']}{$table_name}` ( {$val} ) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8");
|
||||
}
|
||||
|
||||
//记录表名
|
||||
add_table(arrayto_string($table,'|'));
|
||||
$filetable = PATH_ALL_APP.$this->m_name.'/config/table';
|
||||
//先获取之前已经存在的简短表名
|
||||
if(file_exists($filetable)) {
|
||||
$tnamestr = file_get_contents($filetable);
|
||||
$tname = array_merge($tname,stringto_array($tnamestr,','));
|
||||
}else{
|
||||
//创建
|
||||
makefile($filetable);
|
||||
}
|
||||
//写入
|
||||
file_put_contents($filetable,arrayto_string($tname,','));
|
||||
}
|
||||
|
||||
// 1.3 版本
|
||||
public function update_1_3() {
|
||||
global $_M;
|
||||
//执行SQL其他操作
|
||||
$tview = self::tview();
|
||||
foreach ($tview as $key => $val){
|
||||
$tname[] = $key;
|
||||
$table_name = self::split_table_name($key);
|
||||
$table[] = $table_name;
|
||||
DB::query($val);
|
||||
}
|
||||
|
||||
//记录表名
|
||||
add_table(arrayto_string($table,'|'));
|
||||
$filetable = PATH_ALL_APP.$this->m_name.'/config/table';
|
||||
//先获取之前已经存在的简短表名
|
||||
if(file_exists($filetable)) {
|
||||
$tnamestr = file_get_contents($filetable);
|
||||
$tname = array_merge($tname,stringto_array($tnamestr,','));
|
||||
}else{
|
||||
//创建
|
||||
makefile($filetable);
|
||||
}
|
||||
//写入
|
||||
file_put_contents($filetable,arrayto_string($tname,','));
|
||||
}
|
||||
/*
|
||||
+ 应用新安装操作
|
||||
+-------------------------------------------------------------------------------------------
|
||||
+ table_field : 当前应用数据创建依据
|
||||
+-------------------------------------------------------------------------------------------
|
||||
+ default_config : 默认的应用配置信息方法
|
||||
+-------------------------------------------------------------------------------------------
|
||||
+ systable : 当前应用版本针对数据库表的信息
|
||||
+-------------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
//数据库创建
|
||||
protected function table_field() {
|
||||
global $_M;
|
||||
// 小区资料库
|
||||
$zdytable['village'] = " `id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`v_name` varchar(255) NOT NULL COMMENT '小区名称',
|
||||
`v_type` varchar(255) NOT NULL COMMENT '分类',
|
||||
`v_province` varchar(255) NOT NULL COMMENT '省',
|
||||
`v_city` varchar(255) NOT NULL COMMENT '市',
|
||||
`v_district` varchar(255) NOT NULL COMMENT '区',
|
||||
`v_address` varchar(255) NOT NULL COMMENT '详细地址',
|
||||
`v_wid` varchar(255) COMMENT '相关联系人',
|
||||
`v_price` decimal(10,2) DEFAULT NULL COMMENT '小区均价',
|
||||
`v_psize` int(11) COMMENT '居住人口规模',
|
||||
`v_text` text COMMENT '备注',
|
||||
`v_updatetime` datetime DEFAULT NULL,
|
||||
`v_addtime` datetime DEFAULT NULL,
|
||||
UNIQUE KEY `vname` (`v_name`),
|
||||
PRIMARY KEY (`id`)";
|
||||
|
||||
// 公司资料库
|
||||
// 公司地址填写采用选择城市联动的方式填写,方便后期数据查询处理筛选
|
||||
$zdytable['customer'] = " `id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`c_allname` varchar(255) NOT NULL COMMENT '公司全称名称',
|
||||
`c_name` varchar(255) NOT NULL COMMENT '公司简称名称',
|
||||
`c_province` varchar(255) NOT NULL COMMENT '省',
|
||||
`c_city` varchar(255) NOT NULL COMMENT '市',
|
||||
`c_district` varchar(255) NOT NULL COMMENT '区',
|
||||
`c_address` varchar(255) NOT NULL COMMENT '详细地址',
|
||||
`c_wid` varchar(255) COMMENT '相关联系人',
|
||||
`c_text` text COMMENT '备注',
|
||||
`c_updatetime` datetime DEFAULT NULL,
|
||||
`c_addtime` datetime DEFAULT NULL,
|
||||
UNIQUE KEY `cname` (`c_name`),
|
||||
PRIMARY KEY (`id`)";
|
||||
|
||||
//公司负责人联系方式
|
||||
//负责人姓名,电话,职位分类,备注
|
||||
// w_tel 可做成标签,总之要满足多个录入的要求
|
||||
$zdytable['workers'] = " `id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`w_jid` int(11) NOT NULL COMMENT '职务id',
|
||||
`w_name` varchar(150) NOT NULL COMMENT '姓名',
|
||||
`w_tel` text COMMENT '联系电话',
|
||||
`w_text` text COMMENT '备注',
|
||||
`w_updatetime` datetime DEFAULT NULL,
|
||||
`w_addtime` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`id`)";
|
||||
|
||||
// 小区电梯
|
||||
// 同一个广告位置 不可重复
|
||||
$zdytable['elevator'] = " `id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`e_vid` int(11) COMMENT '小区ID',
|
||||
`e_number` varchar(100) NOT NULL COMMENT '广告位编号,用于后期各表操作',
|
||||
`e_bno` int(11) NOT NULL COMMENT '楼号',
|
||||
`e_uno` int(11) NOT NULL COMMENT '单元号',
|
||||
`e_eno` int(11) NOT NULL COMMENT '电梯号',
|
||||
`e_aps` int(11) NOT NULL COMMENT '广告位置',
|
||||
`e_size` varchar(255) NOT NULL COMMENT '广告位尺寸大小',
|
||||
`e_enable` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否启用 0 不启用,1 为启用',
|
||||
`e_label` text COMMENT '自主标签',
|
||||
`e_text` text COMMENT '备注',
|
||||
UNIQUE KEY `elidno` (`e_vid`,`e_bno`,`e_uno`,`e_eno`,`e_aps`),
|
||||
UNIQUE KEY `enumber` (`e_number`),
|
||||
PRIMARY KEY (`id`)";
|
||||
|
||||
// 合同资料库
|
||||
// h_cid h_wid 采用联动菜单方式
|
||||
// h_noticeday 可做成tab 标签形式满足多个通知天数
|
||||
$zdytable['contract'] = " `id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`h_number` varchar(100) NOT NULL COMMENT '合同编号,用于后期各表操作',
|
||||
`h_signtime` varchar(255) COMMENT '签订日期',
|
||||
`h_cid` int(11) COMMENT '签定公司',
|
||||
`h_wid` varchar(255) COMMENT '签定相关公司人员',
|
||||
`h_tprice` decimal(10,2) DEFAULT NULL COMMENT '总价格',
|
||||
`h_starttime` varchar(255) COMMENT '广告开始时间',
|
||||
`h_endtime` varchar(255) COMMENT '广告结束时间',
|
||||
`h_noticeday` varchar(255) COMMENT '提前通知天数',
|
||||
`h_text` text COMMENT '备注',
|
||||
`h_updatetime` datetime DEFAULT NULL COMMENT '修改时间',
|
||||
`h_addtime` datetime DEFAULT NULL COMMENT '录入时间',
|
||||
UNIQUE KEY `elidno` (`h_number`),
|
||||
PRIMARY KEY (`id`)";
|
||||
|
||||
// 广告投放计划单 //将合同的进度状态调整到投放计划内
|
||||
$zdytable['launch'] = " `id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`l_title` varchar(255) COMMENT '投放计划标题',
|
||||
`l_hnumber` varchar(100) NOT NULL COMMENT '合同编号',
|
||||
`l_enumber` text COMMENT '排期成功的广告位编号',
|
||||
`l_selectenum` text COMMENT '选择的广告位编号',
|
||||
`l_schedule` int(11) COMMENT '投放进度',
|
||||
`l_starttime` varchar(255) COMMENT '广告开始时间',
|
||||
`l_endtime` varchar(255) COMMENT '广告结束时间',
|
||||
`l_enable` tinyint(1) NOT NULL DEFAULT '1' COMMENT '广告排期状态 0预选,1正常 2预排',
|
||||
`l_type` varchar(255) NOT NULL COMMENT '分类',
|
||||
`l_text` text COMMENT '备注',
|
||||
`l_updatetime` datetime DEFAULT NULL COMMENT '修改时间',
|
||||
`l_addtime` datetime DEFAULT NULL COMMENT '录入时间',
|
||||
PRIMARY KEY (`id`)";
|
||||
|
||||
// 广告时间段排期表,广告位编号,合同编号,开始时间,结束时间,状态
|
||||
// 排期的缓存表
|
||||
$zdytable['schedule'] = "
|
||||
`id` char(36) NOT NULL COMMENT 'uuid',
|
||||
`s_lid` int(11) COMMENT '广告投放ID',
|
||||
`s_enumber` varchar(100) NOT NULL COMMENT '广告位编号',
|
||||
`s_hnumber` varchar(100) NOT NULL COMMENT '合同编号',
|
||||
`s_starttime` varchar(255) COMMENT '广告开始时间',
|
||||
`s_endtime` varchar(255) COMMENT '广告结束时间',
|
||||
UNIQUE KEY `slidse` (`s_lid`,`s_enumber`),
|
||||
PRIMARY KEY (`id`)
|
||||
";
|
||||
|
||||
// 参数配置
|
||||
$zdytable['para'] = " `id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`p_type` tinyint(1) NOT NULL DEFAULT '0' COMMENT '参数分类 0广告位置,1职位,2合同状态,3楼号,4单元号,5电梯编号',
|
||||
`p_order` int(11) DEFAULT '0' COMMENT '排序',
|
||||
`p_name` varchar(255) COMMENT '名称',
|
||||
`p_value` int(11) COMMENT '参数值,必须为数字',
|
||||
`p_text` varchar(255) COMMENT '备注',
|
||||
UNIQUE KEY `ptypevalue` (`p_type`,`p_value`),
|
||||
PRIMARY KEY (`id`)";
|
||||
|
||||
// 有序表,处理分割字段
|
||||
$zdytable['sequence'] = " `seq` int(11) NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`seq`)";
|
||||
|
||||
// 公司资料库
|
||||
// 公司地址填写采用选择城市联动的方式填写,方便后期数据查询处理筛选
|
||||
$zdytable['welog'] = " `id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`openid` varchar(45) NOT NULL COMMENT '微信用户ID',
|
||||
`text` text COMMENT '核心内容',
|
||||
`content` text COMMENT '微信模板信息',
|
||||
`returntext` text COMMENT '返回信息',
|
||||
`state` tinyint(1) COMMENT '记录状态',
|
||||
`exetime` varchar(255) COMMENT '处理时间',
|
||||
`addtime` varchar(255) COMMENT '录入时间',
|
||||
PRIMARY KEY (`id`)";
|
||||
|
||||
//前台巡查人员的验证密钥密码
|
||||
$zdytable['keylist'] = " `id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`k_passkey` varchar(45) NOT NULL COMMENT '密钥密码',
|
||||
`k_basekey` text COMMENT '明密',
|
||||
`k_wid` varchar(255) COMMENT '相关联系人',
|
||||
`k_state` tinyint(1) COMMENT '密钥状态',
|
||||
`k_text` text COMMENT '备注',
|
||||
`k_addtime` varchar(255) COMMENT '新增时间',
|
||||
`k_updatetime` varchar(255) COMMENT '修改时间',
|
||||
PRIMARY KEY (`id`)";
|
||||
|
||||
/**
|
||||
* 1、增加新表
|
||||
* name 配置名称
|
||||
* id 添加信息自动增加,
|
||||
* value 配置名称值
|
||||
* lang 语言[后台]
|
||||
**/
|
||||
$zdytable['cloud_config'] = " `id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`name` varchar(100) NOT NULL,
|
||||
`m_name` varchar(50) NOT NULL,
|
||||
`value` text,
|
||||
`lang` varchar(50) NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `name_lang` (`name`,`m_name`,`lang`)";
|
||||
|
||||
//执行
|
||||
return $zdytable;
|
||||
}
|
||||
|
||||
//mysql 触发器
|
||||
protected function trigger() {
|
||||
global $_M;
|
||||
//新增schedule 表的更新触发器
|
||||
$table_name = self::split_table_name('schedule',true);
|
||||
$launch_name = self::split_table_name('launch',true);
|
||||
//更新触发器并没有排除两个时间字段为空的排查
|
||||
$array[] = " CREATE TRIGGER `add` BEFORE INSERT ON `{$table_name}` FOR EACH ROW
|
||||
BEGIN
|
||||
IF
|
||||
EXISTS (
|
||||
SELECT
|
||||
`id`
|
||||
FROM
|
||||
`{$table_name}`
|
||||
WHERE
|
||||
NOT ( s_endtime < new.s_starttime OR s_starttime > new.s_endtime ) AND s_enumber = new.s_enumber)
|
||||
OR
|
||||
EXISTS (
|
||||
SELECT
|
||||
`id`
|
||||
FROM
|
||||
`{$launch_name}`
|
||||
WHERE
|
||||
NOT ( l_endtime < new.s_starttime OR l_starttime > new.s_endtime ) AND find_in_set( new.s_enumber, l_enumber ) AND id != new.s_lid )
|
||||
THEN
|
||||
SIGNAL SQLSTATE 'SC001' SET MESSAGE_TEXT = '排期时间区间重复';
|
||||
END IF;
|
||||
END; ";
|
||||
// 加入为空排查其他字段就无法实现更新
|
||||
$array[] = " CREATE TRIGGER `up` BEFORE UPDATE ON `{$table_name}` FOR EACH ROW
|
||||
BEGIN
|
||||
IF
|
||||
EXISTS (
|
||||
SELECT
|
||||
`id`
|
||||
FROM
|
||||
`{$table_name}`
|
||||
WHERE
|
||||
NOT ( s_endtime < new.s_starttime OR s_starttime > new.s_endtime ) AND s_enumber = new.s_enumber AND id != new.id )
|
||||
OR
|
||||
EXISTS (
|
||||
SELECT
|
||||
`id`
|
||||
FROM
|
||||
`{$launch_name}`
|
||||
WHERE
|
||||
NOT ( l_endtime < new.s_starttime OR l_starttime > new.s_endtime ) AND find_in_set( new.s_enumber, l_enumber ) AND id != new.s_lid )
|
||||
THEN
|
||||
SIGNAL SQLSTATE 'SC002' SET MESSAGE_TEXT = '排期时间区间重复';
|
||||
END IF;
|
||||
END; ";
|
||||
return $array;
|
||||
}
|
||||
|
||||
//mysql 视图
|
||||
protected function tview() {
|
||||
global $_M;
|
||||
//查询到期合同以及根据设置的到期天数提醒
|
||||
$sequence = self::split_table_name('sequence',true);
|
||||
$contract = self::split_table_name('contract',true);
|
||||
$noticeday = self::split_table_name('noticeday',true);
|
||||
$array['noticeday'] = " CREATE VIEW {$noticeday} AS
|
||||
SELECT
|
||||
ct.*,
|
||||
substring_index( substring_index( ct.h_noticeday, ',', sq.seq ), ',',- ( 1 ) ) AS noticeday,
|
||||
DATE_SUB(ct.h_endtime,INTERVAL substring_index( substring_index( ct.h_noticeday, ',', sq.seq ), ',',- ( 1 ) ) DAY) AS endtime,
|
||||
sq.seq
|
||||
FROM
|
||||
{$sequence} AS sq INNER JOIN {$contract} AS ct
|
||||
ON sq.seq <= ( ( 1 + length( ct.h_noticeday ) ) - length( REPLACE ( ct.h_noticeday, ',', '' ) ) ) ";
|
||||
|
||||
//查询微信关注用户,排除非关注的用户
|
||||
$weuser = self::split_table_name('weuser',true);
|
||||
$nwechat_user = self::split_table_name('nwechat_user',true);
|
||||
$array['weuser'] = " CREATE VIEW {$weuser} AS
|
||||
SELECT * FROM {$nwechat_user} WHERE subscribe = 1 ";
|
||||
|
||||
// 广告位排期统计,计算广告位的空闲,到期,投放中
|
||||
$elevator = self::split_table_name('elevator',true);
|
||||
$launch = self::split_table_name('launch',true);
|
||||
$countela = self::split_table_name('countela',true);
|
||||
$array['countela'] = " CREATE VIEW {$countela} AS
|
||||
SELECT
|
||||
e.id,
|
||||
e.e_vid,
|
||||
e.e_number,
|
||||
e.e_bno,
|
||||
e.e_uno,
|
||||
e.e_eno,
|
||||
e.e_aps,
|
||||
e.e_enable,
|
||||
l.id AS l_id,
|
||||
l.l_title,
|
||||
l.l_hnumber,
|
||||
l.l_schedule,
|
||||
l.l_starttime,
|
||||
l.l_endtime,
|
||||
l.l_enable,
|
||||
l.l_type
|
||||
FROM
|
||||
{$elevator} AS e
|
||||
LEFT JOIN {$launch} AS l ON find_in_set( e.e_number, l.l_enumber ) ";
|
||||
return $array;
|
||||
}
|
||||
|
||||
//默认配置
|
||||
protected function default_config() {
|
||||
global $_M;
|
||||
//正常升级
|
||||
$config = [
|
||||
'tem_ida','tem_idb','tem_idc','openid'
|
||||
];
|
||||
$lang = $_M['lang'];
|
||||
foreach ($config as $key => $val){
|
||||
DB::query("INSERT INTO {$this->sqlk} (name,lang,m_name,value) VALUES ('{$key}','{$lang}','{$this->m_name}','{$val}') ON DUPLICATE KEY UPDATE value='{$val}' ");
|
||||
}
|
||||
}
|
||||
|
||||
//系统表
|
||||
protected function systable() {
|
||||
global $_M;
|
||||
//访问入口固定为app/index.php?n=XXX&c=XXX&a=XXX
|
||||
//定时处理入口
|
||||
// $field = "no='{$this->appno}',m_name='{$this->m_name}',filename='timing.php',m_module='web',m_class='timing',m_action='@\$_GET[a]'";
|
||||
// self::addsql('ifcolumn_addfile',$field);
|
||||
}
|
||||
|
||||
/*
|
||||
+ 公用安装升级方法
|
||||
+-------------------------------------------------------------------------------------------
|
||||
+ inssql : 应用数据表创建
|
||||
+-------------------------------------------------------------------------------------------
|
||||
+ upver : 修改应用版本号
|
||||
+-------------------------------------------------------------------------------------------
|
||||
+ install_lock : 创建安装锁
|
||||
+-------------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
//应用数据表创建
|
||||
protected function inssql() {
|
||||
global $_M;
|
||||
$tables = self::table_field();
|
||||
$table = $tname = [];
|
||||
foreach ($tables as $key => $val) {
|
||||
$tname[] = $key;
|
||||
$table_name = self::split_table_name($key);
|
||||
$table[] = $table_name;
|
||||
if($val) DB::query("CREATE TABLE `{$_M['config']['tablepre']}{$table_name}` ( {$val} ) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8");
|
||||
}
|
||||
|
||||
//建立触发器
|
||||
$trigger = self::trigger();
|
||||
foreach ($trigger as $val){
|
||||
DB::query($val);
|
||||
}
|
||||
|
||||
//执行SQL其他操作
|
||||
$tview = self::tview();
|
||||
foreach ($tview as $key => $val){
|
||||
$tname[] = $key;
|
||||
$table_name = self::split_table_name($key);
|
||||
$table[] = $table_name;
|
||||
DB::query($val);
|
||||
}
|
||||
|
||||
//记录表名
|
||||
add_table(arrayto_string($table,'|'));
|
||||
$filetable = PATH_ALL_APP.$this->m_name.'/config/table';
|
||||
//先获取之前已经存在的简短表名
|
||||
if(file_exists($filetable)) {
|
||||
$tnamestr = file_get_contents($filetable);
|
||||
$tname = array_merge($tname,stringto_array($tnamestr,','));
|
||||
}else{
|
||||
//创建
|
||||
makefile($filetable);
|
||||
}
|
||||
//写入
|
||||
file_put_contents($filetable,arrayto_string(array_unique($tname),','));
|
||||
}
|
||||
|
||||
//修改版本号
|
||||
protected function upver() {
|
||||
global $_M;
|
||||
DB::query("UPDATE {$_M['table']['applist']} SET ver='{$this->newver}' WHERE no='{$this->appno}' AND m_name='{$this->m_name}' ");
|
||||
}
|
||||
|
||||
//创建安装锁
|
||||
protected function install_lock() {
|
||||
global $_M;
|
||||
if(!file_exists(INS_LOCK_FILE)) makefile(INS_LOCK_FILE);
|
||||
file_put_contents(INS_LOCK_FILE, json_encode($this->appinfo,JSON_UNESCAPED_UNICODE) );
|
||||
}
|
||||
|
||||
/*
|
||||
+ 公用SQL方法
|
||||
+-------------------------------------------------------------------------------------------
|
||||
+ sqlone : 单条查询方法
|
||||
+-------------------------------------------------------------------------------------------
|
||||
+ sqlall : 批量查询方法
|
||||
+-------------------------------------------------------------------------------------------
|
||||
+ addsql : 入库方法
|
||||
+-------------------------------------------------------------------------------------------
|
||||
+ split_table_name : 拼接完整数据库名
|
||||
+-------------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
//公共查询方法
|
||||
private function sqlone($tname,$where = '') {
|
||||
global $_M;
|
||||
$table = $_M['table'][$tname];
|
||||
if(!$where) $where = "no='{$this->appno}'";
|
||||
return DB::get_one("select * from {$table} where {$where}");
|
||||
}
|
||||
|
||||
//公共查询方法
|
||||
private function sqlall($tname,$where = '') {
|
||||
global $_M;
|
||||
$table = $_M['table'][$tname];
|
||||
if(!$where) $where = "no='{$this->appno}'";
|
||||
return DB::get_all("select * from {$table} where {$where}");
|
||||
}
|
||||
|
||||
//公共写入方法
|
||||
private function addsql($tname,$field = '') {
|
||||
global $_M;
|
||||
$table = $_M['table'][$tname];
|
||||
DB::query("INSERT INTO {$table} SET {$field}");
|
||||
}
|
||||
|
||||
//拼接完整数据库名
|
||||
private function split_table_name($name,$all = false) {
|
||||
global $_M;
|
||||
//公用表
|
||||
$global_table = ['cloud_config','nwechat_user'];
|
||||
$tablename = in_array($name, $global_table)?$name:$this->m_name.'_'.$name;
|
||||
return $all?$_M['config']['tablepre'].$tablename:$tablename;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
+ 前端入口的创建。
|
||||
+-------------------------------------------------------------------------------------------
|
||||
+ column : 创建栏目信息 //目前的方法不适合最新版本 后期等待更正
|
||||
+-------------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
//创建前台入口API形式
|
||||
protected function column_api() {
|
||||
global $_M;
|
||||
$file = self::sqlall('ifcolumn_addfile');
|
||||
$dir = PATH_WEB.$this->fixed_name;
|
||||
if(makedir($dir)){
|
||||
if(getdirpower($dir) == false) modifydirpower($dir,0777);
|
||||
}
|
||||
foreach ($file as $val) {
|
||||
$dirfile = $dir.'/'.$val['filename'];
|
||||
$action = strstr($val['m_action'],'@$_')?$val['m_action']:"'{$val['m_action']}'";
|
||||
$phpstr = "<?php".PHP_EOL
|
||||
. "define('M_NAME', '{$val['m_name']}');".PHP_EOL
|
||||
. "define('M_MODULE', '{$val['m_module']}');".PHP_EOL
|
||||
. "define('M_CLASS', '{$val['m_class']}');".PHP_EOL
|
||||
. "define('M_ACTION', {$action});".PHP_EOL
|
||||
. "require_once '../app/app/entrance.php';".PHP_EOL
|
||||
. "?>";
|
||||
file_put_contents($dirfile, $phpstr);
|
||||
}
|
||||
}
|
||||
|
||||
//创建栏目信息
|
||||
protected function column() {
|
||||
global $_M;
|
||||
$name = array('cn'=>'加盟店','en'=>'Join store query','tc'=>'加盟店');
|
||||
foreach (array('cn','en','tc') as $k => $v) {
|
||||
DB::query("INSERT INTO {$_M['table']['column']} SET name='{$name[$v]}',foldername='{$this->fixed_name}',module='{$this->appno}',no_order='100',if_in='1',classtype='1',out_url='{$_M['url']['site']}{$this->fixed_name}',isshow='1',lang='{$v}',nav='1'");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,69 @@
|
|||
<?php
|
||||
|
||||
defined('IN_MET') or exit('No permission');
|
||||
//用来处理定时执行排期处理
|
||||
//访问入口固定为app/index.php?n=dzadsod
|
||||
|
||||
load::own_class('appweb');
|
||||
|
||||
class index extends appweb
|
||||
{
|
||||
|
||||
# 过滤方法名
|
||||
private $ado = ['doindex','dotable','dotableto','doajaxcl'];
|
||||
|
||||
private $urls;
|
||||
|
||||
//初始化
|
||||
public function __construct()
|
||||
{
|
||||
global $_M, $_YW;
|
||||
parent::__construct();
|
||||
// 过滤
|
||||
if (!in_array(M_ACTION, $this->ado,true)) {
|
||||
//报错
|
||||
exit(0);
|
||||
}
|
||||
$this->urls = $_M['url']['site'].'app/index.php?n=dzadsod';
|
||||
$this->input['page_title'] = '广告位巡查';
|
||||
}
|
||||
|
||||
//广告位排期中的巡查,验证码校验
|
||||
public function doindex()
|
||||
{
|
||||
global $_M, $_YW;
|
||||
//进入密码输入页面
|
||||
$this->input['url'] = $this->urls.'&a=dotable';
|
||||
$this->show('app/index', $this->input);
|
||||
}
|
||||
|
||||
//数据列表
|
||||
public function dotable()
|
||||
{
|
||||
global $_M, $_YW;
|
||||
//校验验证码
|
||||
$mdck = $this->tsql->table('keylist')
|
||||
->where(['k_passkey' => md5($_M['form']['check']), 'k_state' => 1 ])
|
||||
->one();
|
||||
if($mdck == false) parent::scriptgo('密钥错误!');
|
||||
okinfo($this->urls.'&a=dotableto');
|
||||
}
|
||||
|
||||
//数据列表
|
||||
public function dotableto()
|
||||
{
|
||||
global $_M, $_YW;
|
||||
$this->input['url'] = $this->urls.'&c=table_ajax&a=doindex&tname=patrol';
|
||||
$this->input['table'] = load::own_class('table_theme','new')->start('patrol')->send_all(1);
|
||||
$this->show('app/table', $this->input);
|
||||
}
|
||||
|
||||
//获取doajaxcl
|
||||
public function doajaxcl() {
|
||||
global $_M, $_YW;
|
||||
parent::jsoncallback([]);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
|
|
@ -0,0 +1,311 @@
|
|||
<?php
|
||||
|
||||
defined('IN_MET') or exit('No permission');
|
||||
|
||||
load::own_class('appweb');
|
||||
load::own_func('appcmp');
|
||||
|
||||
/*
|
||||
* 配置
|
||||
* 包含其他功能初始化
|
||||
*/
|
||||
class select extends appweb {
|
||||
|
||||
/*
|
||||
* @$querys string 搜索内容
|
||||
* @$tname string 指定的查询表
|
||||
* @$fiend string 作为返回ID的值
|
||||
* @$source string 查询来源页面,用于区分用哪个页面来查询的好做一些特殊处理
|
||||
* @$allnone string 是否显示默认值全部,或者当没有搜索结果时将搜索内容当作值返回
|
||||
* @$condition string 页面查询限制条件,采用$$$作为多条件分割,|||作为字段名和值的分割
|
||||
* @$default string 默认值
|
||||
* @$division string 默认值分隔符
|
||||
*
|
||||
* @$where string sql判断语句
|
||||
*/
|
||||
# 过滤方法名
|
||||
private $ado = ['doselect'];
|
||||
|
||||
//搜索内容
|
||||
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();
|
||||
// 过滤
|
||||
if (!in_array(M_ACTION, $this->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]);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
|
|
@ -0,0 +1,135 @@
|
|||
<?php
|
||||
defined('IN_MET') or exit ('No permission');
|
||||
|
||||
load::own_class('appweb');
|
||||
load::own_class('../traits/tdata');
|
||||
load::own_class('../traits/tlist');
|
||||
load::own_class('../traits/tfield');
|
||||
|
||||
//表格
|
||||
class table_ajax extends appweb {
|
||||
|
||||
# 过滤方法名
|
||||
private $ado = ['doindex'];
|
||||
|
||||
//非备份,正常字段即可
|
||||
private $bsign = false;
|
||||
|
||||
//列表
|
||||
private $list = [];
|
||||
//当前执行表名
|
||||
private $sqlk;
|
||||
//form数组
|
||||
private $form = [];
|
||||
|
||||
//info_on 快速URL
|
||||
private $own_name_info;
|
||||
private $own_name_table;
|
||||
|
||||
public function __construct() {
|
||||
global $_M,$_YW;
|
||||
parent::__construct();
|
||||
// 过滤
|
||||
if (!in_array(M_ACTION, $this->ado,true)) {
|
||||
//报错
|
||||
exit(0);
|
||||
}
|
||||
$this->form = $_M['form'];
|
||||
if($this->form['tname']){
|
||||
$this->tname = $this->form['tname'];
|
||||
$this->sqlk = $_YW['k'][$this->tname];
|
||||
}
|
||||
//地址要换算成前台的,目前是后台的
|
||||
// $this->own_name_info = $_M['url']['own_name'].'c=info_on&a=do';
|
||||
// $this->own_name_table = $_M['url']['own_name'].'c=table_on&a=do';
|
||||
}
|
||||
|
||||
//表格数据
|
||||
public function doindex() {
|
||||
global $_M;
|
||||
//加载表格数据获取类
|
||||
$table = load::own_class('tabledata', 'new');
|
||||
|
||||
$field = self::td_field();
|
||||
$sqlk = self::td_sqlk();
|
||||
$where = self::td_where();
|
||||
$order = self::td_order();
|
||||
/*查询表*/
|
||||
if($where){
|
||||
$conds .= " WHERE {$where} ";
|
||||
}
|
||||
if($order){
|
||||
$conds .= " ORDER BY {$order} ";
|
||||
}
|
||||
//整理查询条件
|
||||
$query = "SELECT {$field} FROM {$sqlk} {$conds} ";
|
||||
|
||||
//获取数据
|
||||
$data = $table->getdata($sqlk, $field, $where, $order,$query,$this->multi_table);
|
||||
//数据整理
|
||||
$array = self::sqlarr($data);
|
||||
//返回数据
|
||||
$table->rdata($array);
|
||||
}
|
||||
|
||||
use tdata;
|
||||
|
||||
/*
|
||||
* 【列出】
|
||||
* 返回数据数组
|
||||
*/
|
||||
private function sqlarr($data = []) {
|
||||
global $_M;
|
||||
// if(in_array($this->tname,$this->k_name)){
|
||||
foreach ($data as $val) {
|
||||
self::output($val);
|
||||
$array[] = $this->list;
|
||||
}
|
||||
return $array;
|
||||
// }else{
|
||||
// return false;
|
||||
// }
|
||||
}
|
||||
|
||||
/*
|
||||
* 【新行】
|
||||
* 新增行分发
|
||||
*/
|
||||
public function do_table_add_list(){
|
||||
global $_M;
|
||||
$val = ['id' => 'new-'.$this->form['new_id'], 'p_type' => $this->form['p_type']];
|
||||
if(in_array($this->tname,$this->k_name)){
|
||||
self::output($val,'checked=""');
|
||||
}
|
||||
self::addlist($val);
|
||||
}
|
||||
|
||||
/*
|
||||
* 【新行】
|
||||
* 生成文件新增行
|
||||
*/
|
||||
private function addlist($val) {
|
||||
global $_M;
|
||||
$metinfo = '';
|
||||
foreach ($this->list as $v){
|
||||
$metinfo .= '<td class=" text-xs-center">'.$v.'</td>';
|
||||
}
|
||||
echo "<tr>{$metinfo}</tr>";
|
||||
}
|
||||
|
||||
use tfield;
|
||||
use tlist;
|
||||
|
||||
//公用的输出
|
||||
protected function output($val,$checked = '') {
|
||||
global $_M,$_YW;
|
||||
$array = self::{$this->tname}($val,$checked);
|
||||
$this->list = array();
|
||||
foreach ($array as $value) {
|
||||
$this->list[] = $value;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
@charset "UTF-8";
|
||||
/*把脑残替换的恢复过来*/
|
||||
.form-inline .form-group {
|
||||
margin-right: 20px;
|
||||
}
|
||||
@media (min-width: 480px){
|
||||
.form-inline .form-group, .form-inline .form-control {
|
||||
display: inline-block;
|
||||
margin-bottom: 0;
|
||||
width: auto;
|
||||
vertical-align: middle;
|
||||
}
|
||||
}
|
||||
/*在帮脑残修复一下*/
|
||||
table .form-inline .form-group {
|
||||
margin-right: 0px;
|
||||
}
|
||||
@media (min-width: 480px){
|
||||
table .form-inline .form-group, table .form-inline .form-control {
|
||||
display: block;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
.cloudweb input[name="gotopage"]{
|
||||
display: inline-block!important;
|
||||
}
|
||||
.cloudweb .gotopage{
|
||||
display: none;
|
||||
}
|
||||
|
||||
@media (max-width: 767px){
|
||||
.cloudweb div.m-y-80{margin-top: 0px!important;}
|
||||
div.dataTables_paginate .paginate_button>a{padding: .429rem .780rem;}
|
||||
.form-inline .form-group{margin-right: 0px;}
|
||||
.cloudweb select[name="e_vid"]{max-width: auto;}
|
||||
.cloudweb .input-group .select2-container--default{width: 100%!important;}
|
||||
}
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
<?php
|
||||
# MetInfo Enterprise Content Management System
|
||||
# Copyright (C) MetInfo Co.,Ltd (http://www.metinfo.cn). All rights reserved.
|
||||
defined('IN_MET') or exit('No permission');
|
||||
?>
|
||||
<script>
|
||||
var MET=[];
|
||||
MET['url']=[];
|
||||
MET['langtxt'] = {
|
||||
"jsx15":"{$_M['word']['jsx15']}",
|
||||
"js35":"{$_M['word']['js35']}",
|
||||
"jsx17":"{$_M['word']['jsx17']}",
|
||||
"formerror1":"{$_M['word']['formerror1']}",
|
||||
"formerror2":"{$_M['word']['formerror2']}",
|
||||
"formerror3":"{$_M['word']['formerror3']}",
|
||||
"formerror4":"{$_M['word']['formerror4']}",
|
||||
"formerror5":"{$_M['word']['formerror5']}",
|
||||
"formerror6":"{$_M['word']['formerror6']}",
|
||||
"formerror7":"{$_M['word']['formerror7']}",
|
||||
"formerror8":"{$_M['word']['formerror8']}",
|
||||
"js46":"{$_M['word']['js46']}",
|
||||
"js23":"{$_M['word']['js23']}",
|
||||
"checkupdatetips":"{$_M['word']['checkupdatetips']}",
|
||||
"detection":"{$_M['word']['detection']}",
|
||||
"try_again":"{$_M['word']['try_again']}",
|
||||
"fileOK":"{$_M['word']['fileOK']}",
|
||||
};
|
||||
MET['met_editor']="{$_M['config']['met_editor']}";
|
||||
MET['met_keywords']="{$_M['config']['met_keywords']}";
|
||||
MET['url']['ui']="{$_M['url']['ui']}";
|
||||
MET['url']['own']="{$_M['url']['own']}";
|
||||
MET['url']['own_tem']="{$_M['url']['own_tem']}";
|
||||
MET['url']['api']="{$_M['url']['api']}";
|
||||
</script>
|
||||
<met_foot />
|
||||
<if value="!$c['shopv2_open']">
|
||||
<?php $app_js_time = filemtime(PATH_WEB.'public/ui/v2/static/js/app.js'); ?>
|
||||
<script src="{$_M['url']['site']}public/ui/v2/static/js/app.js?{$app_js_time}"></script>
|
||||
</if>
|
||||
<?php if(file_exists(PATH_OWN_FILE."templates/met/js/own.js") && !((M_NAME=='product' || M_NAME=='shop') && $_M['config']['shopv2_open'])){
|
||||
$own_js_time = filemtime(PATH_OWN_FILE.'templates/met/js/own.js');
|
||||
?>
|
||||
<script src="{$_M['url']['own_tem']}js/own.js?{$own_js_time}"></script><?php } ?>
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
# MetInfo Enterprise Content Management System
|
||||
# Copyright (C) MetInfo Co.,Ltd (http://www.metinfo.cn). All rights reserved.
|
||||
defined('IN_MET') or exit('No permission');
|
||||
?>
|
||||
<include file="metinfo.inc.php"/>
|
||||
<?php $met_page=$template_type=='ui'?'index':''; ?>
|
||||
<met_meta page="$met_page" />
|
||||
<?php
|
||||
if(file_exists(PATH_OWN_FILE."templates/met/css/metinfo.css")){
|
||||
$own_metinfo_css_filemtime = filemtime(PATH_OWN_FILE.'templates/met/css/metinfo.css');
|
||||
?>
|
||||
<link href="{$_M['url']['own_tem']}css/metinfo.css?{$own_metinfo_css_filemtime}" rel='stylesheet' type='text/css'>
|
||||
<?php } ?>
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
<?php
|
||||
defined('IN_MET') or exit('No permission');
|
||||
$data['page_title'] = $data['app']['column']['name'] . $data['page_title'];
|
||||
?>
|
||||
<include file="app/head"/>
|
||||
<div class="metadmin-main container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-xs-12 m-t-80">
|
||||
<form method="POST" action="{$data.url}">
|
||||
<div class="metadmin-fmbx">
|
||||
<div class="form-group">
|
||||
<h3 class="text-xs-center">巡查人员身份验证</h3>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon">密钥</span>
|
||||
<input type="password" class="form-control" placeholder="输入身份密钥" name="check" autocomplete="off">
|
||||
<span class="input-group-btn">
|
||||
<button type="submit" class="btn btn-primary">提交</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<include file="app/foot"/>
|
||||
|
|
@ -0,0 +1,158 @@
|
|||
/*!
|
||||
* M['weburl'] 网站网址
|
||||
* M['lang'] 网站语言
|
||||
* M['tem'] 模板目录路径
|
||||
* M['user_name'] 页面登录用户名
|
||||
* met_prevarrow,
|
||||
met_nextarrow slick插件翻页按钮自定义html
|
||||
* M['device_type'] 客户端判断(d:PC端,t:平板端,m:手机端)
|
||||
* M['n'] 当前模块名称
|
||||
* M['c'] 当前类
|
||||
* M['a'] 当前方法
|
||||
* M['langtxt'] 当前语言文字
|
||||
* M['langset'] 当前后台语言
|
||||
* M['anyid'] 当前模块id
|
||||
* M['met_editor'] 当前系统编辑器名称
|
||||
* M['met_keywords'] 页面关键词
|
||||
* M['url']['admin'] 后台文件夹路径
|
||||
* M['url']['static']
|
||||
* M['url']['static_vendor']
|
||||
* M['url']['static2']
|
||||
* M['url']['static2_vendor']
|
||||
* M['url']['static2_plugin']
|
||||
* M['url']['uiv2'] 模板框架v2路径
|
||||
* M['url']['uiv2_css']
|
||||
* M['url']['uiv2_js']
|
||||
* M['url']['app'] 应用文件夹路径
|
||||
* M['url']['pub'] 后台模块公用文件夹路径
|
||||
* M['url']['epl'] 后台模块公用示例文件夹路径
|
||||
* M['url']['ui'] 应用前后台公用UI文件app/system/include/piblic/ui/里面
|
||||
* M['url']['own_form'] 当前页面程序地址
|
||||
* M['url']['own_name'] 当前模块地址
|
||||
* M['url']['own'] 当前模块后台路径
|
||||
* M['url']['own_tem'] 当前页面模板路径
|
||||
* M['url']['api'] app站点地址
|
||||
* M['url']['editor'] 当前编辑器应用文件夹路径
|
||||
*/
|
||||
$(function () {
|
||||
var myDate=new Date().getTime();
|
||||
|
||||
var appfun = function () {
|
||||
var $self = this;
|
||||
if($self.isEmpty(M['n'])) M['n'] = $('div[data-m_name]').data('m_name');
|
||||
$self.own_name = M['weburl'] + 'app/index.php?n=' + M['n'];
|
||||
$self.config();
|
||||
//select2
|
||||
if($('[data-plugin="select2"]').length) $self.select2(true);
|
||||
};
|
||||
|
||||
appfun.prototype = {
|
||||
config:function(){
|
||||
var $self = this;
|
||||
$.ajax({
|
||||
type: "GET",
|
||||
url: $self.own_name + '&c=index&a=doajaxcl&lang=' + M['lang'],
|
||||
dataType: "jsonp",
|
||||
async: false
|
||||
}).done(function (data) {
|
||||
CL = data;
|
||||
});
|
||||
},
|
||||
select2:function(drawdt){
|
||||
// drawdt true 执行默认操作 false 不执行
|
||||
var $self = this,select = [];
|
||||
//选择器
|
||||
M['plugin']['select2'] = [
|
||||
M['url']['static2_vendor'] + 'select2/select2.min.css',
|
||||
M['url']['static2_vendor'] + 'select2/select2.full.min.js',
|
||||
M['url']['static2_vendor'] + 'select2/i18n/zh-CN.js',
|
||||
];
|
||||
$.include(M['plugin']['select2'],function(){
|
||||
$('[data-plugin="select2"]').each(function(indexs,item){
|
||||
var _self = $(this),
|
||||
defaults = _self.data('default'),
|
||||
select2url = _self.data('select2-url') + '&'+ myDate;
|
||||
|
||||
select[indexs] = _self.select2({
|
||||
placeholder: '输入搜索内容', //提示语
|
||||
ajax: {
|
||||
url: select2url,
|
||||
dataType: 'jsonp',
|
||||
delay: 500,
|
||||
data: function (params) {
|
||||
return {
|
||||
querys: params.term, //search term
|
||||
tname: _self.data('tname'), //指定简短表
|
||||
fiend: _self.data('fiend'), //指定字段值
|
||||
allnone: _self.data('allnone'), //是否只显示应用的值
|
||||
source: _self.data('source'), //查看来源标记
|
||||
condition: _self.data('condition') //查询限制条件
|
||||
};
|
||||
},
|
||||
results: function (data, page) {
|
||||
return {results: data.results};
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
//默认值处理
|
||||
if(!$self.isEmpty(defaults) && drawdt == true){
|
||||
$.getJSON(
|
||||
select2url,
|
||||
{
|
||||
tname: _self.data('tname'), //指定简短表
|
||||
fiend: _self.data('fiend'), //指定字段值
|
||||
allnone: _self.data('allnone'), //是否只显示应用的值
|
||||
source: _self.data('source'), //查看来源标记
|
||||
condition: _self.data('condition'), //查询限制条件
|
||||
default: defaults, //默认值
|
||||
division: _self.data('division') //默认值分隔符
|
||||
},
|
||||
function(obj){
|
||||
$.each(obj.results, function(index, ele) {
|
||||
$.each(ele.children, function(indexop, eleop) {
|
||||
var option = new Option(eleop.text, eleop.id, true, true);
|
||||
select[indexs].append(option).trigger('change');
|
||||
})
|
||||
});
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
});
|
||||
});
|
||||
},
|
||||
isEmpty: function (val) {
|
||||
switch (typeof val) {
|
||||
case 'undefined':
|
||||
return true;
|
||||
case 'string':
|
||||
if (val.replace(/(^[ \t\n\r]*)|([ \t\n\r]*$)/g, '').length == 0)
|
||||
return true;
|
||||
break;
|
||||
case 'boolean':
|
||||
if (!val)
|
||||
return true;
|
||||
break;
|
||||
case 'number':
|
||||
if (0 === val || isNaN(val))
|
||||
return true;
|
||||
break;
|
||||
case 'object':
|
||||
if (null === val || val.length === 0)
|
||||
return true;
|
||||
for (var i in val) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
APPFUN = new appfun();
|
||||
|
||||
//缓存
|
||||
$.ajaxSetup({cache: false});
|
||||
|
||||
});
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
<?php
|
||||
defined('IN_MET') or exit('No permission');
|
||||
$data['page_title'] = $data['app']['column']['name'] . $data['page_title'];
|
||||
?>
|
||||
<include file="app/head"/>
|
||||
<div class="metadmin-main container-fluid cloudweb">
|
||||
<div class="row">
|
||||
<div class="col-xs-12 m-y-80">
|
||||
<div class="form-group">
|
||||
<h3 class="text-xs-center">广告位投放状态</h3>
|
||||
</div>
|
||||
<div class="clearfix">
|
||||
{$data.top.tips}
|
||||
<!--头部搜索-->
|
||||
{$data.table.search}
|
||||
</div>
|
||||
<table class="dataTable table table-bordered table-hover table-striped w-full m-t-5" id='test-table' data-table-ajaxurl="{$data.url}" data-table-pagelength='15'>
|
||||
<thead>{$data.table.thead}</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td colspan="{$data.table.tdcol}">
|
||||
<div class="h-50 vertical-align text-xs-center"><div class="loader vertical-align-middle loader-default"></div></div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<include file="app/foot"/>
|
||||
|
|
@ -0,0 +1,122 @@
|
|||
<?php
|
||||
|
||||
defined('IN_MET') or exit('No permission');
|
||||
//用来处理定时执行排期处理
|
||||
//访问入口固定为app/index.php?n=dzadsod&c=timing&a=doindex
|
||||
|
||||
load::own_class('appweb');
|
||||
|
||||
class timing extends appweb
|
||||
{
|
||||
|
||||
# 过滤方法名
|
||||
private $ado = ['doindex'];
|
||||
|
||||
//初始化
|
||||
public function __construct()
|
||||
{
|
||||
global $_M, $_YW;
|
||||
parent::__construct();
|
||||
//----------------------------------加快信息响应------开始---------------------------
|
||||
set_time_limit(0);
|
||||
ob_end_clean();
|
||||
header("Connection: close");
|
||||
header("HTTP/1.1 200 OK");
|
||||
header("Content-type:text/html;charset=utf-8");
|
||||
header('Access-Control-Allow-Methods:post');
|
||||
ob_start();
|
||||
//Windows服务器需要加上这行。
|
||||
echo 'API响应时间:'.date('Y-m-d H:i:s', $this->time).str_repeat(" ",4096);
|
||||
//----------------------------------加快信息响应------中段---------------------------
|
||||
// 过滤
|
||||
if (!in_array(M_ACTION, $this->ado,true)) {
|
||||
//报错
|
||||
exit(0);
|
||||
}
|
||||
//----------------------------------加快信息响应------中段---------------------------
|
||||
$size = ob_get_length();
|
||||
header("Content-Length: $size");
|
||||
ob_end_flush();
|
||||
flush();
|
||||
if (function_exists("fastcgi_finish_request")) {
|
||||
fastcgi_finish_request();
|
||||
}
|
||||
ignore_user_abort(true);
|
||||
set_time_limit(0);
|
||||
//----------------------------------加快信息响应------结束---------------------------
|
||||
}
|
||||
|
||||
# 每天凌晨后或者早上6点之前进行广告位排期处理
|
||||
# 主要计算排期是否过期,是否已经提到开始排期了
|
||||
public function doindex()
|
||||
{
|
||||
global $_M, $_YW;
|
||||
$this->webase = load::own_class('../met_wechat/include/class/LW_BASE', 'new');
|
||||
//当天日期时间
|
||||
$curdate = date('Y-m-d',$this->time);
|
||||
$strdate = strtotime($curdate);
|
||||
$num = ['daya' => 0,'dayb' => 0,'dayc' => 0];
|
||||
//查询到期订单
|
||||
//查询的是设置的提醒天数,以及订单结束日期的前后3天数
|
||||
$where = " endtime = CURDATE() OR (h_endtime BETWEEN CURDATE() AND DATE_ADD( CURDATE(), INTERVAL 3 DAY ) ) ";
|
||||
$noticeday = $this->tsql->table('noticeday')->where($where)->all();
|
||||
foreach ($noticeday as $val) {
|
||||
//延时2秒
|
||||
sleep(3);
|
||||
$h_endtime = strtotime($val['h_endtime']);
|
||||
//首先判断当前这条信息是属于到期前台3天的 还是属于设置的提醒
|
||||
//那就是判断订单结束时间和今天的相差天数
|
||||
$day = abs(($h_endtime - $strdate) / 86400);
|
||||
if($day > 3){
|
||||
//按照设置的提醒来计算
|
||||
$htypes = "合同 {$val['noticeday']} 天后到期提醒";
|
||||
//蓝色
|
||||
$color = "#57c7d4";
|
||||
$type = 1;
|
||||
$num['daya']++;
|
||||
}else{
|
||||
//说明还没到期
|
||||
if($h_endtime > $strdate){
|
||||
$htypes = "合同 {$day} 天后到期";
|
||||
//黄色
|
||||
$color = "#f2a654";
|
||||
$type = 1;
|
||||
$num['dayb']++;
|
||||
}else{
|
||||
$htypes = "合同今天到期";
|
||||
//红色
|
||||
$color = "#F96868";
|
||||
$type = 2;
|
||||
$num['dayc']++;
|
||||
}
|
||||
}
|
||||
|
||||
//公司名称
|
||||
$customer = $this->tsql->table('customer')->where(['id' => $val['h_cid']])->one();
|
||||
//签定人员
|
||||
$w_name = [];
|
||||
$workerswid = stringto_array($val['h_wid'],',');
|
||||
foreach ($workerswid as $hwid) {
|
||||
$workers = $this->tsql->table('workers')->where(['id' => $hwid])->one();
|
||||
$w_name[] = $workers['w_name'];
|
||||
}
|
||||
|
||||
//整理内容
|
||||
$val['first'] = ['value' => $htypes, 'color' => $color];
|
||||
$val['c_allname'] = $customer['c_allname'];
|
||||
$val['wnamestr'] = arrayto_string($w_name,',');
|
||||
|
||||
//发送通知
|
||||
parent::postdata($type,$val)->openid();
|
||||
}
|
||||
|
||||
//以上为定时通知或者到期通知
|
||||
//增加一个今天要上架的投放
|
||||
$num['dayd'] = $this->tsql->table('launch')->where(" l_starttime = CURDATE() ")->count();
|
||||
parent::postdata(3,$num)->openid();
|
||||
die();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
Loading…
Reference in New Issue