地图筛选新增区域选择、小区统计筛选、投放计划新增区域选择

This commit is contained in:
cloud 2020-12-30 20:31:51 +08:00
parent a4b7260db8
commit 9a84951490
10 changed files with 231 additions and 55 deletions

View File

@ -37,7 +37,14 @@ class ajax extends appadmin
// 省市区
if (!empty($_M['form']['province'])) $where .= " AND v_province= '{$_M['form']['province']}' ";
if (!empty($_M['form']['city'])) $where .= " AND v_city= '{$_M['form']['city']}' ";
// if (!empty($_M['form']['district'])) $where .= " AND v_district= '{$_M['form']['district']}'";
if (!empty($_M['form']['district'])) $where .= " AND v_district= '{$_M['form']['district']}'";
// 其他条件
if (!empty($_M['form']['vtype']) || $_M['form']['vtype'] === '0' || $_M['form']['vtype'] === 0) {
$vtype = stringto_array($_M['form']['vtype'], ',');
// 社区类型,分类
$where .= " AND " . $this->tsql->where_arr(['v_type' => $vtype]);
}
$qfield = $_M['form']['allinfo'] === 'all' ? '*' : 'id,v_maplng,v_maplat';
$array = $this->tsql->table('village')

File diff suppressed because one or more lines are too long

View File

@ -475,8 +475,8 @@ ul.panel-actions > li:first-child {
}
.panel > .panel-collapse > .table caption, .panel > .table caption, .panel > .table-responsive > .table caption {
padding-left: 30px 30px;
padding-right: 30px 30px
padding-left: 30px;
padding-right: 30px;
}
.panel > .table-responsive:first-child > .table:first-child, .panel > .table:first-child {
@ -1149,7 +1149,7 @@ html, body {
/*在帮脑残修复一下*/
table .form-inline .form-group {
margin-right: 0px;
margin-right: 0;
}
@media (min-width: 480px) {
@ -1180,7 +1180,7 @@ table .form-inline .form-group {
.launch_affix_save {
position: fixed;
bottom: 0px;
bottom: 0;
z-index: 999999;
height: 60px;
margin-left: -15px;
@ -1212,14 +1212,14 @@ table .form-inline .form-group {
}
.page-profile .card-footer {
padding: 0px;
padding: 0;
border-radius: .215rem;
background-color: #f6f9fd;
border-top: none;
}
.page-profile .card-footer > div > div {
padding: 10px 0px;
padding: 10px 0;
}
.page-profile .profile-stat-count {
@ -1263,7 +1263,7 @@ li.village-list-item > button.close {
outline: none;
}
.filterList, .villageList{
.filterList, .villageList {
overflow-y: auto;
}
@ -1299,3 +1299,24 @@ li.village-list-item > p {
display: inherit;
border-radius: 0;
}
.tag-purple.tag-outline {
color: #926dde;
border-color: #926dde;
background-color: transparent;
}
.city-js .input-group > .form-control {
width: auto;
}
.maskbj {
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
background: rgba(206, 206, 206, 0.7);
z-index: 9;
display: none;
}

View File

@ -5,7 +5,7 @@ $met_title = $data['app']['appname'];
?>
<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="appcheck" data-ckitem="{$data.ckitem}" >
<div class="row">
<div class="col-xs-12 col-md-4 offset-md-4">
@ -14,8 +14,7 @@ $met_title = $data['app']['appname'];
<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">
<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">
@ -34,8 +33,7 @@ $met_title = $data['app']['appname'];
</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 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">

View File

@ -36,7 +36,7 @@
*/
$(function () {
var myDate = new Date().getTime()
$.include(M.url.own_tem + 'js/appcheck.min.js?' + myDate);
$.include(M.url.own_tem + 'js/appcheck.min.js?'+myDate);
$.ajax({
type : "GET",
@ -61,12 +61,12 @@ $(function () {
})
// 表格数据加载状态
$('#tableslist').on('processing.dt', function (e, settings, processing) {
if (processing) {
if(processing) {
$self.tableProcessing(this)
}
})
$('#tables-list').on('processing.dt', function (e, settings, processing) {
if (processing) {
if(processing) {
$self.tableProcessing(this)
}
})
@ -120,7 +120,7 @@ $(function () {
};
appfun.prototype = {
isEmpty : function (val) {
isEmpty : function (val) {
switch (typeof val) {
case 'undefined':
return true;
@ -146,7 +146,7 @@ $(function () {
}
return false;
},
select2 : function (drawdt) {
select2 : function (drawdt) {
// drawdt true 执行默认操作 false 不执行
var $self = this,
select = [];
@ -211,7 +211,7 @@ $(function () {
});
});
},
datepicker : function () {
datepicker: function () {
var $self = this;
M['plugin']['datetimepicker'] = [
M['url']['epl'] + 'time/jquery.datetimepicker.css',
@ -250,7 +250,7 @@ $(function () {
});
})
},
alonetime : function () {
alonetime : function () {
var $self = this;
M['plugin']['datetimepicker'] = [
M['url']['epl'] + 'time/jquery.datetimepicker.css',
@ -268,7 +268,7 @@ $(function () {
});
});
},
tableaajx : function (timedom) {
tableaajx : function (timedom) {
if (typeof datatable != 'undefined') {
var $this_datatable = timedom.parents('.dataTable'),
datatable_index = $this_datatable.index('.dataTable');
@ -276,7 +276,7 @@ $(function () {
datatable[datatable_index].ajax.reload();
}
},
orders : function () {
orders : function () {
var $self = this;
$(document).on('click', 'a.orderby-link', function (event) {
var $this = $(this),
@ -303,7 +303,7 @@ $(function () {
dom.next().val(type);
$self.tableaajx(dom);
},
ownsubmit : function ($form, typestr) {
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);
@ -319,11 +319,11 @@ $(function () {
$form.find('[name="all_id"]').val(all_id);
}
},
tableProcessing: function (_this_) {
tableProcessing:function (_this_){
// 表格数据加载状态
var tbody = $(_this_).find('tbody')
var tbody = $(_this_).find('tbody')
var colspan = tbody.data('colspan')
var html = `<tr>
var html= `<tr>
<td colspan="${colspan}">
<div class="h-50 vertical-align text-xs-center"><div class="loader vertical-align-middle loader-default"></div></div>
</td>

View File

@ -282,7 +282,7 @@ class table_theme
}
// 输入框搜索
protected function input_select_search()
protected function input_select_search($maxWidth = 260)
{
global $_M, $_YW;
$url = $this->select2['url'] ?: $_YW['url']['select'];
@ -290,7 +290,7 @@ class table_theme
return '<div class="form-group m-t-5">
<div class="input-group">
<div class="input-group-addon">' . $title . '</div>
<select name="' . $name . '" style="max-width:260px;" data-table-search class="form-control" data-plugin="select2"
<select name="' . $name . '" style="max-width:' . $maxWidth . 'px;" data-table-search class="form-control" data-plugin="select2"
data-select2-url="' . $url . '"
data-tname="' . $this->select2['tname'] . '"
data-fiend="' . $this->select2['fiend'] . '"
@ -305,7 +305,7 @@ class table_theme
}
// 输入框搜索
protected function input_select_search_multiple()
protected function input_select_search_multiple($maxWidth = 260)
{
global $_M, $_YW;
$url = $this->select2['url'] ?: $_YW['url']['select'];
@ -314,7 +314,7 @@ class table_theme
return '<div class="form-group m-t-5">
<div class="input-group">
<div class="input-group-addon">' . $title . '</div>
<select name="' . $name . '" multiple style="max-width:260px;" data-table-search class="form-control" data-plugin="select2"
<select name="' . $name . '" multiple style="max-width:' . $maxWidth . 'px;" data-table-search class="form-control" data-plugin="select2"
data-select2-url="' . $url . '"
data-tname="' . $this->select2['tname'] . '"
data-fiend="' . $this->select2['fiend'] . '"
@ -437,7 +437,7 @@ class table_theme
}
// 地图选择
protected function th_toolmap($title)
protected function th_toolmap($title, $html = '<h4>选择小区</h4>')
{
global $_M, $_YW;
return '<div class="form-group m-t-5">
@ -459,7 +459,7 @@ class table_theme
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
<h4 class="modal-title">选择小区</h4>
<div class="modal-title font-size-14">' . $html . '</div>
</div>
<div class="modal-body p-t-0 p-l-15">
<div class="row">
@ -521,6 +521,63 @@ class table_theme
<!-- End Modal -->';
}
// 公用城市选择
private $selctCityConfig = [
// 1 为通用 0为模态框样式
'type' => 1,
// true 开启值的变化触发table筛选false则不触发
'tableSearch' => true,
'class' => 'city-js'
];
/**
* @param false[] $display 是否显示
* @param string[] $name name值
* @param array $defaults 默认值
* @return string
*/
protected function th_select_city($display = [false, false], $name = ['v_province', 'v_city', 'v_district'], $defaults = [])
{
global $_M, $_YW;
$cityUrl = load::own_class('cloud', 'new')->city_url();
$title = '选择区域';
$select = function ($mr = 5) use ($_YW, $defaults, $display, $name) {
list($provName, $cityName, $distName) = is_array($name) ? $name : [$name];
list($prov, $city, $dist) = is_array($defaults) ? $defaults : [$defaults];
list($provhd, $cityhd) = is_array($display) ? $display : [$display];
$provhd = $provhd ? '' : 'hidden-xs-up';
$cityhd = $cityhd ? '' : 'hidden-xs-up';
$tableSearch = $this->selctCityConfig['tableSearch'] ? 'data-table-search' : '';
$class = $mr > 0 ? 'm-r-' . $mr : '';
return '<select name="' . $provName . '" class="form-control ' . $class . ' prov ' . $provhd . '"
data-checked="' . ($prov ?: $_YW['c']['mapprov']) . '" ' . $tableSearch . '>
</select>
<select name="' . $cityName . '" class="form-control ' . $class . ' city ' . $cityhd . '"
data-checked="' . ($city ?: $_YW['c']['mapcity']) . '" ' . $tableSearch . '>
</select>
<select name="' . $distName . '" class="form-control ' . $class . ' dist"
data-checked="' . ($dist ?: $_YW['c']['mapdist']) . '" ' . $tableSearch . '>
</select>';
};
$htmla = '<div class="form-group m-t-5 ' . $this->selctCityConfig['class'] . '">
<div class="input-group" data-plugin="select-linkage" data-select-url="' . $cityUrl . '">
<div class="input-group-addon">' . $title . '</div>
' . $select(0) . '
</div>
</div>';
$htmlb = '<div class="' . $this->selctCityConfig['class'] . '">
<div class="form-group" data-plugin="select-linkage" data-select-url="' . $cityUrl . '">
<label class="form-control-label font-weight-600"><h4>选择区域</h4></label>
' . $select(5) . '
</div>
</div>';
return $this->selctCityConfig['type'] ? $htmla : $htmlb;
}
// +----------------------------------------------------------------------
// | 各表处理
// +----------------------------------------------------------------------
@ -832,7 +889,18 @@ class table_theme
//搜索
if ($this->search_bool) {
$this->search['left'][] = self::th_toolmap('地图筛选');
$html = '';
// 地图区域
$this->selctCityConfig['type'] = 1;
$this->selctCityConfig['class'] = 'city-js';
$html .= self::th_select_city();
$this->search['left'][] = self::th_toolmap('地图筛选',$html);
// 区域
$this->selctCityConfig['class'] = 'search-city-js';
$this->search['left'][] = self::th_select_city();
$para = [['正常-按照广告位置排序', 0], ['推荐-将适合投放的提前排序', 1], ['选中-将选择中广告位提前排序', 2]];
$this->search['left'][] = self::para_select($para, ['eaps_order', '广告位排序', $_M['form']['eaps_order']], true, false);
$tsql = load::own_class('tsql', 'new');
@ -854,7 +922,7 @@ class table_theme
'allnone' => 0,
'condition' => 'p_type|||6'
];
$this->search['left'][] = self::input_select_search_multiple();
$this->search['left'][] = self::input_select_search_multiple(160);
//门口方位
$para = $tsql->table('para')->where(['p_type' => 3])->all();
$this->search['left'][] = self::para_select($para, ['e_bno', '门口方位']);
@ -868,7 +936,7 @@ class table_theme
'allnone' => 0,
'condition' => 'p_type|||0'
];
$this->search['left'][] = self::input_select_search_multiple();
$this->search['left'][] = self::input_select_search_multiple(160);
$this->search['left'][] = self::input_search('e_number', '输入广告位编号');
//状态
// $this->search[] = self::para_select([['禁用',0],['启用',1]],['e_enable','状态'],true);
@ -1026,7 +1094,16 @@ class table_theme
];
$this->search[] = self::input_select_search_multiple();
$this->search[] = self::th_toolmap('地图筛选');
// 区域
$this->selctCityConfig['class'] = 'search-city-js';
$this->search['left'][] = self::th_select_city();
$html = '';
// 地图区域
$this->selctCityConfig['type'] = 1;
$this->selctCityConfig['class'] = 'city-js';
$html .= self::th_select_city();
$this->search[] = self::th_toolmap('地图筛选',$html);
}
//底部按钮

View File

@ -5,13 +5,13 @@ 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; //采用分组才会采用子查询计算总数
private $debugging = true;
public function __construct()
{
@ -19,10 +19,18 @@ class tsql
self::table_unset();
}
# 禁止执行sql只用于SQL语句返回 FALSE 不执行sql语句true 执行sql
public function debugging($sign = false)
{
$this->debugging = $sign;
return $this;
}
# 清空
public function table_unset()
{
global $_M;
$this->debugging = true;
unset($this->sql, $this->special, $this->ufield);
return $this;
}
@ -51,6 +59,15 @@ class tsql
return $this;
}
# 多表联合查询专用,满足多语句联合
# $table 为需要联合的语句,必须为数组
public function tablejoin($table = [], $join = ''){
global $_M;
list($name, $ab) = $table;
$this->sql['table'] .= $name . " AS {$ab} {$join} ";
return $this;
}
# 需要特殊处理的值例如counts+1 等类似的 或者执行函数
# 传入的为特殊处理的值,并 非字段名
public function special($_special)
@ -93,10 +110,9 @@ class tsql
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) {
if (!empty($_group)) $this->sql['group'] = " GROUP BY " . $_group;
if (!empty($_group) && !empty($_having)) {
$this->multi_table = true;
if (is_array($_having)) $_having = self::where_arr($_having);
if (!empty($_having)) $this->sql['group'] .= " HAVING " . $_having;
@ -158,7 +174,7 @@ class tsql
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);
if ($this->debugging) DB::query($this->query);
return $this;
}
@ -169,7 +185,7 @@ class tsql
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);
if ($this->debugging) DB::query($this->query);
return $this;
}
@ -181,7 +197,7 @@ class tsql
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);
if ($this->debugging) DB::query($this->query);
return $this;
}
@ -213,7 +229,7 @@ class tsql
}
$this->query = "INSERT INTO {$this->sql['table']} ({$this->sql['field']}) VALUES {$this->sql['values']} {$this->sql['unique']} ";
unset($this->sql);
DB::query($this->query);
if ($this->debugging) DB::query($this->query);
return $this;
}
@ -225,7 +241,7 @@ class tsql
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);
return $this->debugging ? DB::get_one($this->query) : $this;
}
# 查询更多条数
@ -236,6 +252,7 @@ class tsql
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);
if ($this->debugging === false) return $this;
$res = [];
$result = DB::query($this->query);
while ($val = DB::fetch_array($result)) {
@ -251,6 +268,7 @@ class tsql
if (empty($this->sql['table'])) return false;
$this->query = "SHOW FULL COLUMNS FROM .{$this->sql['table']}";
unset($this->sql);
if ($this->debugging === false) return $this;
$res = [];
$rescolumns = DB::query($this->query);
while ($row = DB::fetch_array($rescolumns)) {
@ -270,6 +288,7 @@ class tsql
$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 ";
if ($this->debugging === false) return $this;
$result = DB::query($this->query);
$fetch_row = DB::fetch_row($result);
return $fetch_row[0];

File diff suppressed because one or more lines are too long

View File

@ -47,6 +47,26 @@ trait tdata
$idArr = $vidArr;
}
}
$funWhere = function ($idArr, &$where) {
if (count($idArr) > 0) {
$strId = arrayto_string($idArr, ',');
$where .= " AND id IN({$strId}) ";
}
};
//区域
$v_province = $this->form['v_province'] && $this->form['v_province'] != '请选择' ? $this->form['v_province'] : '';
$v_city = $this->form['v_city'] && $this->form['v_city'] != '请选择' ? $this->form['v_city'] : '';
$v_district = $this->form['v_district'] && $this->form['v_district'] != '请选择' ? $this->form['v_district'] : '';
if ($v_district && $v_province && $v_city) {
$where = " v_province = '{$this->form['v_province']}' AND v_city = '{$this->form['v_city']}' AND v_district = '{$v_district}' ";
$funWhere($idArr, $where);
$vid = $this->tsql->table('village')->qfield('id')->where($where)->all();
$idArr = array_column($vid, 'id');
if (count($idArr) == 0) $idArr = [-1];
}
return $idArr;
}

View File

@ -525,9 +525,24 @@ namespace APPMAP {
constructor() {
super();
// 在地图弹窗内进行小区条件筛选
$(document).on('change', 'select[name="vtype"]', () => {
this.filter()
})
this.watch(this, 'selectProv', () => {
this.filter()
})
this.watch(this, 'selectCity', () => {
this.filter()
})
this.watch(this, 'selectDist', () => {
this.filter()
})
//模态框
$('#selectMapId').on('shown.bs.modal', () => {
if(this.selectMapInitType) return false
if (this.selectMapInitType) return false
// 设置地图高度,达到满屏效果
this.setHeight()
// 延迟效果可以让模态框加载时看起来没有卡的感觉
@ -886,6 +901,26 @@ namespace APPMAP {
inputVid.trigger('change')
}
// 根据条件筛选小区
filter() {
// 获取指定的值
let vtype = $('select[name="vtype"]').val()
vtype = vtype ? vtype.join(',') : ''
// 需要将缓存全部删除掉
$('#selectMapId .mapreset').trigger('click')
//清除标注
this.selectMap.clearOverlays()
// 提交后端
this.ajaxlnglatList(this.selectMap, {
id: '',
province: this.selectProv,
city: this.selectCity,
district: this.selectDist,
vtype: vtype,
allinfo: 'all'
}, true)
}
}
// @ts-ignore
@ -900,7 +935,6 @@ namespace APPMAP {
new showMap()
} else if ($('#selectMap').length) {
// 地图选择形式
console.log('-------------')
// $('button[data-target="#selectMapId"]').on('click', () => {})
// 目前的形式地图只初始化一次,模态框关闭不影响二次打开继续之前的操作
new selectMap()