去掉无用的模板文件
封装ajax提示方法
This commit is contained in:
@@ -21,6 +21,7 @@ Vue.createApp({
|
||||
|
||||
var grid = config.grid;
|
||||
grid.remoteDataUrl = '{{url()}}';
|
||||
grid.autoColumnsToFit = true;
|
||||
|
||||
var action = config.action;
|
||||
// 双击行执行的方法
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
|
||||
gdoo.grids[table] = {grid: grid};
|
||||
|
||||
var action = new grid(table, '客户销售进度');
|
||||
var action = new gridAction(table, '客户销售进度');
|
||||
var panel = $('#' + table + '-controller');
|
||||
|
||||
panel.on('click', '[data-toggle="' + table + '"]', function() {
|
||||
|
||||
@@ -110,11 +110,7 @@ var params = {customer_id: customer_id};
|
||||
text: '提交',
|
||||
'class': 'btn-info',
|
||||
click: function () {
|
||||
|
||||
var loading = layer.msg('数据提交中...', {
|
||||
icon: 16, shade: 0.1, time: 1000 * 120
|
||||
});
|
||||
|
||||
var loading = showLoading();
|
||||
var rows = refer_customer.api.getSelectedRows();
|
||||
for (var i = 0; i < rows.length; i++) {
|
||||
let row = rows[i];
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
|
||||
gdoo.grids[table] = {grid: grid};
|
||||
|
||||
var action = new grid(table, '区域销售进度');
|
||||
var action = new gridAction(table, '区域销售进度');
|
||||
var panel = $('#' + table + '-controller');
|
||||
|
||||
panel.on('click', '[data-toggle="' + table + '"]', function() {
|
||||
|
||||
@@ -31,9 +31,7 @@ var form_action = '{{$form["action"]}}';
|
||||
var file = document.querySelector("#import_file").files[0];
|
||||
var formData = new FormData();
|
||||
formData.append('file', file);
|
||||
var loading = layer.msg('数据提交中...', {
|
||||
icon: 16, shade: 0.1, time: 1000 * 120
|
||||
});
|
||||
var loading = showLoading();
|
||||
$.ajax(url, {
|
||||
method: "post",
|
||||
data: formData,
|
||||
|
||||
@@ -88,7 +88,7 @@
|
||||
|
||||
gdoo.grids[table] = {grid: grid};
|
||||
|
||||
var action = new grid(table, '客户销售进度');
|
||||
var action = new gridAction(table, '客户销售进度');
|
||||
var panel = $('#' + table + '-controller');
|
||||
|
||||
panel.on('click', '[data-toggle="' + table + '"]', function() {
|
||||
|
||||
@@ -17,7 +17,7 @@ class ReportController extends DefaultController
|
||||
$sdate = date('Y-m-01');
|
||||
$edate = date('Y-m-d');
|
||||
$search = search_form([],
|
||||
[['form_type' => 'date2', 'name' => '日期', 'field' => 'date', 'value' => [$sdate, $edate], 'options' => []],
|
||||
[['form_type' => 'date2', 'name' => '订单日期', 'field' => 'date', 'value' => [$sdate, $edate], 'options' => []],
|
||||
['form_type' => 'text', 'name' => '订单编号', 'field' => 'm.sn', 'options' => []],
|
||||
['form_type' => 'text', 'name' => '单据编号', 'field' => 'd.fee_src_sn', 'options' => []],
|
||||
[
|
||||
@@ -52,10 +52,10 @@ class ReportController extends DefaultController
|
||||
c.code as customer_code,
|
||||
c.name as customer_name,
|
||||
ccc.name as category_name,
|
||||
".sql_year_month('l.audit_date', 'ts')." as [ym]
|
||||
".sql_year_month('m.created_at', 'ts')." as [ym]
|
||||
")
|
||||
->whereRaw('d.fee_src_sn is not null')
|
||||
->groupBy(DB::raw('c.code,c.name,ccc.name,m.sn,d.fee_src_sn,d.fee_src_type_id,'.sql_year_month('l.audit_date', 'ts')));
|
||||
->groupBy(DB::raw('c.code,c.name,ccc.name,m.sn,d.fee_src_sn,d.fee_src_type_id,'.sql_year_month('m.created_at', 'ts')));
|
||||
|
||||
foreach ($search['where'] as $where) {
|
||||
if ($where['active']) {
|
||||
|
||||
@@ -34,9 +34,7 @@ var table = '{{$form["table"]}}';
|
||||
var file = document.querySelector("#import_file").files[0];
|
||||
var formData = new FormData();
|
||||
formData.append('file', file);
|
||||
var loading = layer.msg('数据提交中...', {
|
||||
icon: 16, shade: 0.1, time: 1000 * 120
|
||||
});
|
||||
var loading = showLoading();
|
||||
$.ajax(url, {
|
||||
method: "post",
|
||||
data: formData,
|
||||
|
||||
@@ -35,9 +35,7 @@ var table = '{{$form["table"]}}';
|
||||
var file = document.querySelector("#import_file").files[0];
|
||||
var formData = new FormData();
|
||||
formData.append('file', file);
|
||||
var loading = layer.msg('数据提交中...', {
|
||||
icon: 16, shade: 0.1, time: 1000 * 120
|
||||
});
|
||||
var loading = showLoading();
|
||||
$.ajax(url, {
|
||||
method: "post",
|
||||
data: formData,
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
|
||||
gdoo.grids[table] = {grid: grid};
|
||||
|
||||
var action = new grid(table, '销售订单费用明细表');
|
||||
var action = new gridAction(table, '销售订单费用明细表');
|
||||
var panel = $('#' + table + '-controller');
|
||||
|
||||
panel.on('click', '[data-toggle="' + table + '"]', function() {
|
||||
|
||||
@@ -32,9 +32,7 @@
|
||||
formData.append('file', file);
|
||||
formData.append('name', name);
|
||||
|
||||
var loading = layer.msg('数据提交中...', {
|
||||
icon: 16, shade: 0.1, time: 1000 * 120
|
||||
});
|
||||
var loading = showLoading();
|
||||
$.ajax(url, {
|
||||
method: "post",
|
||||
data: formData,
|
||||
|
||||
@@ -32,9 +32,7 @@
|
||||
formData.append('file', file);
|
||||
formData.append('name', name);
|
||||
|
||||
var loading = layer.msg('数据提交中...', {
|
||||
icon: 16, shade: 0.1, time: 1000 * 120
|
||||
});
|
||||
var loading = showLoading();
|
||||
$.ajax(url, {
|
||||
method: "post",
|
||||
data: formData,
|
||||
|
||||
@@ -75,9 +75,9 @@ class Controller extends BaseController
|
||||
'upload_url' => URL::to('/uploads'),
|
||||
'static_url' => URL::to('/static'),
|
||||
'asset_url' => URL::to('/assets'),
|
||||
'version' => $this->version,
|
||||
'licenseType' => env('LICENSE_TYPE'),
|
||||
'resVersion' => $this->resVersion,
|
||||
'version' => $this->version,
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
@@ -37,6 +37,7 @@ class ModelController extends DefaultController
|
||||
], 'model');
|
||||
|
||||
$header['cols'] = [
|
||||
/*
|
||||
'checkbox' => [
|
||||
'width' => 40,
|
||||
'suppressSizeToFit' => true,
|
||||
@@ -70,6 +71,7 @@ class ModelController extends DefaultController
|
||||
'form_type' => 'text',
|
||||
'width' => 100,
|
||||
],
|
||||
*/
|
||||
'user' => [
|
||||
'field' => 'table',
|
||||
'headerName' => '表名',
|
||||
@@ -128,6 +130,13 @@ class ModelController extends DefaultController
|
||||
'filter' => false,
|
||||
],
|
||||
];
|
||||
|
||||
$header['buttons'] = [
|
||||
['name' => '删除', 'icon' => 'fa-remove', 'action' => 'delete', 'display' => $this->access['delete']],
|
||||
['name' => '导出', 'icon' => 'fa-share', 'action' => 'export', 'display' => 1],
|
||||
];
|
||||
|
||||
$header['search_form'] = $search;
|
||||
$query = $search['query'];
|
||||
|
||||
if (Request::method() == 'POST') {
|
||||
@@ -149,19 +158,12 @@ class ModelController extends DefaultController
|
||||
$items = $rows->items();
|
||||
array_nest($items);
|
||||
$rows->items($items);
|
||||
|
||||
return $rows;
|
||||
|
||||
$ret = $rows->toArray();
|
||||
$ret['header'] = Grid::getColumns($header);
|
||||
return $ret;
|
||||
}
|
||||
|
||||
$header['buttons'] = [
|
||||
['name' => '删除', 'icon' => 'fa-remove', 'action' => 'delete', 'display' => $this->access['delete']],
|
||||
['name' => '导出', 'icon' => 'fa-share', 'action' => 'export', 'display' => 1],
|
||||
];
|
||||
|
||||
$header['search_form'] = $search;
|
||||
$header['js'] = Grid::js($header);
|
||||
|
||||
// 配置权限
|
||||
return $this->display([
|
||||
'header' => $header,
|
||||
]);
|
||||
|
||||
@@ -107,6 +107,19 @@ class ModuleController extends DefaultController
|
||||
'filter' => false,
|
||||
],
|
||||
];
|
||||
|
||||
$header['buttons'] = [
|
||||
['name' => '删除', 'icon' => 'fa-remove', 'action' => 'delete', 'display' => $this->access['delete']],
|
||||
['name' => '导出', 'icon' => 'fa-share', 'action' => 'export', 'display' => 1],
|
||||
];
|
||||
|
||||
$header['left_buttons'] = [
|
||||
['name' => '更新', 'color' => 'default', 'icon' => 'fa-refresh', 'action' => 'refresh', 'display' => 1],
|
||||
['name' => '安装', 'color' => 'default', 'icon' => 'fa-cloud-download', 'action' => 'install', 'display' => 1],
|
||||
['name' => '打包', 'color' => 'default', 'icon' => 'fa-cube', 'action' => 'package', 'display' => 1],
|
||||
];
|
||||
|
||||
$header['search_form'] = $search;
|
||||
$query = $search['query'];
|
||||
|
||||
if (Request::method() == 'POST') {
|
||||
@@ -126,23 +139,11 @@ class ModuleController extends DefaultController
|
||||
}
|
||||
return $row;
|
||||
});
|
||||
return $rows->toJson();
|
||||
$ret = $rows->toArray();
|
||||
$ret['header'] = Grid::getColumns($header);
|
||||
return $ret;
|
||||
}
|
||||
|
||||
$header['buttons'] = [
|
||||
['name' => '删除', 'icon' => 'fa-remove', 'action' => 'delete', 'display' => $this->access['delete']],
|
||||
['name' => '导出', 'icon' => 'fa-share', 'action' => 'export', 'display' => 1],
|
||||
];
|
||||
|
||||
$header['left_buttons'] = [
|
||||
['name' => '更新', 'color' => 'default', 'icon' => 'fa-refresh', 'action' => 'refresh', 'display' => 1],
|
||||
['name' => '安装', 'color' => 'default', 'icon' => 'fa-cloud-download', 'action' => 'install', 'display' => 1],
|
||||
['name' => '打包', 'color' => 'default', 'icon' => 'fa-cube', 'action' => 'package', 'display' => 1],
|
||||
];
|
||||
|
||||
$header['search_form'] = $search;
|
||||
$header['js'] = Grid::js($header);
|
||||
|
||||
return $this->display([
|
||||
'header' => $header,
|
||||
]);
|
||||
|
||||
@@ -1145,7 +1145,7 @@ class Grid
|
||||
];
|
||||
|
||||
$js = "gdoo.grids.$table = ".json_encode($search, JSON_UNESCAPED_UNICODE).";";
|
||||
$js .= "gdoo.grids.$table.action = new grid('".$table."', '".$header['master_name']."');";
|
||||
$js .= "gdoo.grids.$table.action = new gridAction('".$table."', '".$header['master_name']."');";
|
||||
$js .= "gdoo.grids.$table.action.routes = ".json_encode($routes, JSON_UNESCAPED_UNICODE).';';
|
||||
$js .= "gdoo.grids.$table.action.bill_url = '{$mc}';";
|
||||
$res = '<script>'.$js.'</script>';
|
||||
|
||||
@@ -263,11 +263,7 @@ const vueData = {
|
||||
},mounted() {
|
||||
this.changeDataType();
|
||||
$('#form_type').off('change').on('change', function() {
|
||||
var loading = layer.msg('数据提交中...', {
|
||||
icon: 16,
|
||||
shade: 0.1,
|
||||
time: 1000 * 30
|
||||
});
|
||||
var loading = showLoading();
|
||||
$.get("{{url('type')}}?type=" + this.value + '&model_id=' + model_id, function(data) {
|
||||
$("#content").html(data);
|
||||
}).complete(function() {
|
||||
|
||||
@@ -1,19 +1,48 @@
|
||||
{{$header["js"]}}
|
||||
<div class="gdoo-list-page" id="{{$header['master_table']}}-page">
|
||||
|
||||
<div class="panel no-border" id="{{$header['master_table']}}-controller">
|
||||
@include('headers')
|
||||
<div class='gdoo-list-grid'>
|
||||
<div id="{{$header['master_table']}}-grid" style="width:100%;" class="ag-theme-balham"></div>
|
||||
<div class="gdoo-list panel">
|
||||
<div class="gdoo-list-header">
|
||||
<gdoo-grid-header :header="header" :grid="grid" :action="action" />
|
||||
</div>
|
||||
|
||||
<div class='gdoo-list-grid'>
|
||||
<div id="{{$header['master_table']}}-grid" class="ag-theme-balham"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
(function ($) {
|
||||
var table = '{{$header["master_table"]}}';
|
||||
var config = gdoo.grids[table];
|
||||
var action = config.action;
|
||||
var search = config.search;
|
||||
|
||||
action.dialogType = 'dialog';
|
||||
</div>
|
||||
|
||||
<script>
|
||||
Vue.createApp({
|
||||
components: {
|
||||
gdooGridHeader,
|
||||
},
|
||||
setup(props, ctx) {
|
||||
var table = '{{$header["master_table"]}}';
|
||||
|
||||
var config = new gdoo.grid(table);
|
||||
|
||||
var grid = config.grid;
|
||||
grid.autoColumnsToFit = true;
|
||||
grid.remoteDataUrl = '{{url()}}';
|
||||
|
||||
grid.autoGroupColumnDef = {
|
||||
headerName: '名称',
|
||||
width: 120,
|
||||
cellRendererParams: {
|
||||
checkbox: true,
|
||||
suppressCount: true,
|
||||
}
|
||||
};
|
||||
grid.treeData = true;
|
||||
grid.groupDefaultExpanded = -1;
|
||||
grid.getDataPath = function(data) {
|
||||
return data.tree_path;
|
||||
};
|
||||
|
||||
var action = config.action;
|
||||
// 双击行执行的方法
|
||||
action.rowDoubleClick = action.edit;
|
||||
|
||||
action.field = function(data) {
|
||||
var me = this;
|
||||
@@ -31,55 +60,16 @@
|
||||
});
|
||||
}
|
||||
|
||||
var options = new agGridOptions();
|
||||
var gridDiv = document.querySelector("#{{$header['master_table']}}-grid");
|
||||
gridDiv.style.height = getPanelHeight(48);
|
||||
var setup = config.setup;
|
||||
|
||||
config.cols[0]['hide'] = true;
|
||||
config.cols[1]['hide'] = true;
|
||||
config.cols[2]['hide'] = true;
|
||||
options.autoGroupColumnDef = {
|
||||
headerName: '名称',
|
||||
width: 120,
|
||||
cellRendererParams: {
|
||||
checkbox: true,
|
||||
suppressCount: true,
|
||||
}
|
||||
};
|
||||
options.treeData = true;
|
||||
options.groupDefaultExpanded = -1;
|
||||
options.getDataPath = function(data) {
|
||||
return data.tree_path;
|
||||
};
|
||||
|
||||
options.remoteDataUrl = '{{url()}}';
|
||||
options.remoteParams = search.advanced.query;
|
||||
options.columnDefs = config.cols;
|
||||
options.onRowDoubleClicked = function (params) {
|
||||
if (params.node.rowPinned) {
|
||||
return;
|
||||
}
|
||||
if (params.data == undefined) {
|
||||
return;
|
||||
}
|
||||
if (params.data.master_id > 0) {
|
||||
action.edit(params.data);
|
||||
}
|
||||
};
|
||||
|
||||
new agGrid.Grid(gridDiv, options);
|
||||
options.remoteData({page: 1});
|
||||
|
||||
// 绑定自定义事件
|
||||
var $gridDiv = $(gridDiv);
|
||||
$gridDiv.on('click', '[data-toggle="event"]', function () {
|
||||
var data = $(this).data();
|
||||
if (data.master_id > 0) {
|
||||
action[data.action](data);
|
||||
}
|
||||
Vue.onMounted(function() {
|
||||
var gridDiv = config.div(136);
|
||||
// 初始化数据
|
||||
grid.remoteData({page: 1}, function(res) {
|
||||
config.init(res);
|
||||
});
|
||||
});
|
||||
config.grid = options;
|
||||
})(jQuery);
|
||||
|
||||
</script>
|
||||
@include('footers')
|
||||
return setup;
|
||||
}
|
||||
}).mount("#{{$header['master_table']}}-page");
|
||||
</script>
|
||||
@@ -1,28 +1,41 @@
|
||||
{{$header["js"]}}
|
||||
<div class="gdoo-list-page" id="{{$header['master_table']}}-page">
|
||||
|
||||
<div class="panel no-border" id="{{$header['master_table']}}-controller">
|
||||
@include('headers')
|
||||
<div class='gdoo-list-grid'>
|
||||
<div id="{{$header['master_table']}}-grid" style="width:100%;" class="ag-theme-balham"></div>
|
||||
<div class="gdoo-list panel">
|
||||
<div class="gdoo-list-header">
|
||||
<gdoo-grid-header :header="header" :grid="grid" :action="action" />
|
||||
</div>
|
||||
|
||||
<div class='gdoo-list-grid'>
|
||||
<div id="{{$header['master_table']}}-grid" class="ag-theme-balham"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
(function ($) {
|
||||
var table = '{{$header["master_table"]}}';
|
||||
var config = gdoo.grids[table];
|
||||
var action = config.action;
|
||||
var search = config.search;
|
||||
|
||||
action.dialogType = 'dialog';
|
||||
</div>
|
||||
|
||||
<script>
|
||||
Vue.createApp({
|
||||
components: {
|
||||
gdooGridHeader,
|
||||
},
|
||||
setup(props, ctx) {
|
||||
var table = '{{$header["master_table"]}}';
|
||||
|
||||
var config = new gdoo.grid(table);
|
||||
|
||||
var grid = config.grid;
|
||||
grid.autoColumnsToFit = true;
|
||||
grid.remoteDataUrl = '{{url()}}';
|
||||
|
||||
var action = config.action;
|
||||
// 双击行执行的方法
|
||||
action.rowDoubleClick = null;
|
||||
|
||||
action.refresh = function() {
|
||||
var me = this;
|
||||
var loading = layer.msg('模块更新中...', {
|
||||
icon: 16, shade: 0.1, time: 1000 * 120
|
||||
});
|
||||
var loading = showLoading();
|
||||
$.post(app.url('model/module/refresh'), function(res) {
|
||||
if (res.status) {
|
||||
options.remoteData({page: 1});
|
||||
grid.remoteData({page: 1});
|
||||
toastrSuccess(res.data);
|
||||
} else {
|
||||
toastrError(res.data);
|
||||
@@ -32,62 +45,16 @@
|
||||
});
|
||||
}
|
||||
|
||||
action.test = function() {
|
||||
var me = this;
|
||||
var grid = config.grid;
|
||||
var rows = grid.api.getSelectedRows();
|
||||
if (rows.length == 1) {
|
||||
formDialog({
|
||||
title: '测试邮件',
|
||||
url: app.url('system/mail/test', {id: rows[0].id}),
|
||||
storeUrl: app.url('system/mail/test'),
|
||||
id: 'mail_test',
|
||||
dialogClass:'modal-sm',
|
||||
success: function(res) {
|
||||
toastrSuccess(res.data);
|
||||
$(this).dialog("close");
|
||||
},
|
||||
error: function(res) {
|
||||
toastrError(res.data);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
toastrError('只能选择一条数据。');
|
||||
}
|
||||
}
|
||||
var setup = config.setup;
|
||||
|
||||
var options = new agGridOptions();
|
||||
var gridDiv = document.querySelector("#{{$header['master_table']}}-grid");
|
||||
gridDiv.style.height = getPanelHeight(48);
|
||||
|
||||
options.remoteDataUrl = '{{url()}}';
|
||||
options.remoteParams = search.advanced.query;
|
||||
options.columnDefs = config.cols;
|
||||
options.onRowDoubleClicked = function (params) {
|
||||
if (params.node.rowPinned) {
|
||||
return;
|
||||
}
|
||||
if (params.data == undefined) {
|
||||
return;
|
||||
}
|
||||
if (params.data.master_id > 0) {
|
||||
action.show(params.data);
|
||||
}
|
||||
};
|
||||
|
||||
new agGrid.Grid(gridDiv, options);
|
||||
options.remoteData({page: 1});
|
||||
|
||||
// 绑定自定义事件
|
||||
var $gridDiv = $(gridDiv);
|
||||
$gridDiv.on('click', '[data-toggle="event"]', function () {
|
||||
var data = $(this).data();
|
||||
if (data.master_id > 0) {
|
||||
action[data.action](data);
|
||||
}
|
||||
Vue.onMounted(function() {
|
||||
var gridDiv = config.div(136);
|
||||
// 初始化数据
|
||||
grid.remoteData({page: 1}, function(res) {
|
||||
config.init(res);
|
||||
});
|
||||
});
|
||||
config.grid = options;
|
||||
})(jQuery);
|
||||
|
||||
</script>
|
||||
@include('footers')
|
||||
return setup;
|
||||
}
|
||||
}).mount("#{{$header['master_table']}}-page");
|
||||
</script>
|
||||
@@ -1,454 +0,0 @@
|
||||
<script src="{{$asset_url}}/vendor/jquery.plumb.min.js" type="text/javascript"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
var intervalTimer = null;
|
||||
var nowStepId = null;
|
||||
var normalStepSelector = ".wf-step:not(.wf-step-end)";
|
||||
// var normalStepSelector = ".wf-step:not(.wf-step-start,.wf-step-end)";
|
||||
|
||||
// 判断连接器是否指向了自己
|
||||
var isConnectToSelf = function(param) {
|
||||
return param.sourceId === param.targetId
|
||||
},
|
||||
isFromStartToEnd = function(param) {
|
||||
return param.sourceId === "step_1" && param.targetId === "step_0"
|
||||
},
|
||||
// 判断连接步骤是否重复
|
||||
stepIsRepeat = function(param){
|
||||
// 获取同一scope下的链接器,判断当前链接是否有重复
|
||||
var cnts = jsPlumb.getConnections(param.scope);
|
||||
if(cnts.length > 0) {
|
||||
for(var i = 0, len = cnts.length; i < len; i++) {
|
||||
// 如果有链接器 sourceId 及 targetId 都相等,那大概也许可能就相等了。
|
||||
if(param.sourceId === cnts[i].sourceId && param.targetId === cnts[i].targetId) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
// 连接前的事件
|
||||
var beforeDropHandler = function(param) {
|
||||
|
||||
if (isConnectToSelf(param)) {
|
||||
toastrError('连接点不能是自己。');
|
||||
return false;
|
||||
}
|
||||
// 连接步骤是否重复
|
||||
if (stepIsRepeat(param)) {
|
||||
toastrError('连接点已经存在。');
|
||||
return false;
|
||||
}
|
||||
// 连接步骤是结束
|
||||
if (isFromStartToEnd(param)) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
};
|
||||
|
||||
$(document).ready(function()
|
||||
{
|
||||
// 获取步骤图
|
||||
workStep.init();
|
||||
|
||||
$('#graph').contextmenu({'target':'#graph-menu'});
|
||||
|
||||
// 阻止非空白处的右键事件,不出现菜单
|
||||
//$container.on("contextmenu", "*", function(evt) {
|
||||
//evt.stopPropagation();
|
||||
//});
|
||||
|
||||
// 点击或双击事件,这里进行了一个单击事件延迟,因为同时绑定了双击事件
|
||||
$("#rows").on('click', 'div', function() {
|
||||
clearTimeout(intervalTimer);
|
||||
intervalTimer = setTimeout(function() {
|
||||
workStep.click();
|
||||
},300);
|
||||
|
||||
}).on('dblclick', 'div', function(e) {
|
||||
nowStepId = $(e.target).attr('step_id');
|
||||
clearTimeout(intervalTimer);
|
||||
workStep.dblClick('base');
|
||||
});
|
||||
});
|
||||
|
||||
var workStep = {
|
||||
|
||||
init:function() {
|
||||
|
||||
jsPlumb.reset();
|
||||
|
||||
jsPlumb.bind("beforeDrop", beforeDropHandler);
|
||||
|
||||
$.post("{{url('index2')}}",{model_id:'{{$model_id}}'},function(res)
|
||||
{
|
||||
$('#rows').empty();
|
||||
var nLastStepId = 0;
|
||||
|
||||
if(res.status == true) {
|
||||
jsPlumb.importDefaults({
|
||||
DragOptions:{cursor:'pointer'},
|
||||
ConnectionOverlays:[
|
||||
["Arrow",{location:1,id:"arrow",width:10,length:8}]
|
||||
],
|
||||
Anchor:'Continuous',
|
||||
Endpoint :"Blank",
|
||||
EndpointStyle:{radius:3,strokeStyle:'#1e8151'},
|
||||
HoverPaintStyle:{radius:3,strokeStyle:'#999'},
|
||||
ConnectorZIndex:5,
|
||||
HoverPaintStyle:workStep.connectorHoverStyle
|
||||
});
|
||||
|
||||
if(!$.support.leadingWhitespace) {
|
||||
// ie9以下,用VML画图
|
||||
jsPlumb.setRenderMode(jsPlumb.VML);
|
||||
} else {
|
||||
// 其他浏览器用SVG
|
||||
jsPlumb.setRenderMode(jsPlumb.SVG);
|
||||
}
|
||||
|
||||
// 第一次循环,生成页面元素div
|
||||
var left = 20;
|
||||
var top = 20;
|
||||
|
||||
var rows = res.data;
|
||||
var setd = {};
|
||||
|
||||
$.each(rows, function(id, row) {
|
||||
var title = '<span class="ep">' + (row.option == 1 ? '审核' : '知会') + '</span> ' + row.name;
|
||||
if (row.type == 'start') {
|
||||
title = '<span class="ep"><i class="icon icon-play"></i></span> ' + row.name;
|
||||
} else if(row.type == 'end') {
|
||||
title = '<span class="ep"><i class="icon icon-stop"></i></span> ' + row.name;
|
||||
}
|
||||
|
||||
var css = 'wf-step';
|
||||
if (row.type == 'start') {
|
||||
css = 'wf-step wf-step-start';
|
||||
} else if(row.type == 'end') {
|
||||
css = 'wf-step wf-step-end';
|
||||
}
|
||||
|
||||
var nodeDiv = document.createElement('div');
|
||||
var $node = $(nodeDiv);
|
||||
|
||||
$node.attr("id", "step_" + row.id)
|
||||
.attr("join", row.join)
|
||||
.attr("step_id", row.id)
|
||||
.css({"left":row.left+'px',"top":row.top+'px',"cursor":"move"})
|
||||
.addClass(css)
|
||||
.html(title);
|
||||
|
||||
/*
|
||||
$(normalStepSelector).on('mousedown', function(e) {
|
||||
|
||||
//if(row.number > 0) {
|
||||
nowStepId = $(e.target).attr('step_id');
|
||||
// $(this).contextmenu({'target':'#step-menu'});
|
||||
//}
|
||||
//e.stopPropagation();
|
||||
});
|
||||
*/
|
||||
|
||||
$("#rows").append($node);
|
||||
|
||||
// 索引变量
|
||||
nLastStepId++;
|
||||
|
||||
});
|
||||
|
||||
// 绑定右键操作菜单
|
||||
$(normalStepSelector).on('mousedown', function(e) {
|
||||
nowStepId = $(e.target).attr('step_id');
|
||||
$(this).contextmenu({'target':'#step-menu'});
|
||||
// e.stopPropagation();
|
||||
});
|
||||
|
||||
// 使之可拖动
|
||||
jsPlumb.draggable($(".wf-step"));
|
||||
|
||||
$(".ep").each(function(i,e) {
|
||||
var p = $(e).parent();
|
||||
jsPlumb.makeSource($(e), {
|
||||
parent:p,
|
||||
anchor:"Continuous",
|
||||
endpoint:"Blank",
|
||||
paintStyle:{
|
||||
strokeStyle:"#3399cc",
|
||||
fillStyle:"transparent",
|
||||
radius:2,
|
||||
lineWidth:2
|
||||
},
|
||||
// stub 线条弯曲角度 gap 距离节点位置 cornerRadius 线条圆角
|
||||
connector:["Flowchart",{stub:[10, 30], gap:0, cornerRadius:3, alwaysRespectStubs:true}],
|
||||
connectorStyle:workStep.connectorPaintStyle,
|
||||
hoverPaintStyle:workStep.endpointHoverStyle,
|
||||
connectorHoverStyle:workStep.connectorHoverStyle,
|
||||
dragOptions:{},
|
||||
maxConnections:-1
|
||||
});
|
||||
});
|
||||
|
||||
// 绑定删除确认操作
|
||||
jsPlumb.bind("click", function(e) {
|
||||
jsPlumb.detach(e);
|
||||
});
|
||||
|
||||
// 连接关联的步骤
|
||||
$('.wf-step').each(function(i) {
|
||||
var id = $(this).attr('id');
|
||||
var join = $(this).attr('join') || '';
|
||||
var joinArray = join.split(",");
|
||||
$.each(joinArray,function(j, n) {
|
||||
if(n > 0) {
|
||||
jsPlumb.connect({source:id, target:"step_"+n});
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
jsPlumb.makeTarget($('.wf-step'), {
|
||||
dropOptions: {hoverClass:"dragHover", activeClass:"active"},
|
||||
anchor: "Continuous",
|
||||
maxConnections: 5
|
||||
});
|
||||
}
|
||||
},'json');
|
||||
},
|
||||
connectorPaintStyle:{
|
||||
lineWidth:2,
|
||||
strokeStyle:"#3399cc",
|
||||
joinstyle:"round",
|
||||
outlineColor:"white",
|
||||
dashstyle:"0",
|
||||
outlineWidth:2
|
||||
},
|
||||
connectorHoverStyle:{
|
||||
lineWidth:2,
|
||||
strokeStyle:"#999999",
|
||||
outlineWidth:2,
|
||||
dashstyle:"4 1",
|
||||
outlineColor:"white"
|
||||
},
|
||||
endpointHoverStyle:{
|
||||
strokeStyle:"#216477"
|
||||
},
|
||||
// 清空所有连接
|
||||
clear:function() {
|
||||
jsPlumb.detachEveryConnection();
|
||||
jsPlumb.deleteEveryEndpoint();
|
||||
},
|
||||
// 单击事件
|
||||
click:function() {
|
||||
if (nowStepId > 0) {
|
||||
$('#tree').hide();
|
||||
$.post('{{url("show")}}',{id:nowStepId, model_id:'{{$model_id}}'}, function(res) {
|
||||
$('#tree').html(res.data).show();
|
||||
})
|
||||
}
|
||||
},
|
||||
// 删除步骤
|
||||
deleted:function() {
|
||||
$.messager.confirm('操作警告','确认要删除该步骤吗?',function(btn) {
|
||||
if (btn) {
|
||||
$.post('{{url("delete")}}',{id:nowStepId, model_id:'{{$model_id}}'}, function(res) {
|
||||
if (res.status) {
|
||||
workStep.init();
|
||||
toastrSuccess('操作成功');
|
||||
}
|
||||
},'json');
|
||||
}
|
||||
|
||||
});
|
||||
},
|
||||
// 克隆步骤
|
||||
clone:function() {
|
||||
$.messager.confirm('操作警告','确认要克隆该步骤吗?',function(btn) {
|
||||
if (btn) {
|
||||
$.post('{{url("add")}}',{id:nowStepId,model_id:'{{$model_id}}'},function(data) {
|
||||
if(data.status) {
|
||||
workStep.init();
|
||||
toastrSuccess('操作成功');
|
||||
}
|
||||
},'json');
|
||||
}
|
||||
});
|
||||
},
|
||||
dblClick:function(tab) {
|
||||
if (nowStepId > 0) {
|
||||
if(tab == 'base') {
|
||||
$.dialog({
|
||||
title:'基本设置',
|
||||
url:'{{url("create")}}?model_id={{$model_id}}&id='+nowStepId+'&tab='+tab,
|
||||
dialogClass: 'modal-lg',
|
||||
buttons:[{
|
||||
class: 'btn-info',
|
||||
text:'<i class="fa fa-check-circle"></i> 提交',
|
||||
click: function() {
|
||||
var formData = $('#mystep').serialize();
|
||||
$.post('{{url("create")}}', formData, function(res) {
|
||||
if (res.status) {
|
||||
workStep.init();
|
||||
toastrSuccess('保存当前视图成功');
|
||||
}
|
||||
},'json');
|
||||
$(this).dialog("close");
|
||||
}
|
||||
},{
|
||||
text:'<i class="fa fa-times"></i> 取消',
|
||||
click: function() {
|
||||
$(this).dialog("close");
|
||||
}
|
||||
}]
|
||||
});
|
||||
}
|
||||
if (tab == 'condition') {
|
||||
$.dialog({
|
||||
title:'条件设置',
|
||||
url:'{{url("condition")}}?model_id={{$model_id}}&id='+nowStepId+'&tab='+tab,
|
||||
dialogClass: 'modal-lg',
|
||||
buttons:[{
|
||||
class: 'btn-info',
|
||||
text:'<i class="fa fa-check-circle"></i> 提交',
|
||||
click: function() {
|
||||
var formData = $('#conditionform').serialize();
|
||||
$.post('{{url("condition")}}', formData, function(res) {
|
||||
if (res.status) {
|
||||
workStep.init();
|
||||
toastrSuccess('保存当前视图成功');
|
||||
}
|
||||
},'json');
|
||||
$(this).dialog("close");
|
||||
}
|
||||
},{
|
||||
text:'<i class="fa fa-times"></i> 取消',
|
||||
click: function() {
|
||||
$(this).dialog("close");
|
||||
}
|
||||
}]
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
add:function() {
|
||||
$.post('{{url("add")}}',{model_id:'{{$model_id}}'},function(res) {
|
||||
if (res.status) {
|
||||
workStep.init();
|
||||
toastrSuccess('操作成功');
|
||||
}
|
||||
},'json');
|
||||
},
|
||||
save:function() {
|
||||
var join = [],position = [];
|
||||
var rows = jsPlumb.getConnections();
|
||||
|
||||
if (rows.length == 0) {
|
||||
toastrError('请先建立连接');
|
||||
return;
|
||||
}
|
||||
|
||||
for (var i = 0; i < rows.length; i++) {
|
||||
var sourceId = rows[i].sourceId.substring(5);
|
||||
var targetId = rows[i].targetId.substring(5);
|
||||
join[i] = {id:sourceId,target:targetId};
|
||||
}
|
||||
|
||||
$('#rows div').each(function(i) {
|
||||
if(this.id.substring(0,5) == 'step_') {
|
||||
var stepId = this.id.substring(5);
|
||||
var left = $(this).css('left');
|
||||
var top = $(this).css('top');
|
||||
position[i] = {'id':stepId,'posX':left,'posY':top};
|
||||
}
|
||||
});
|
||||
|
||||
$.post('{{url("save")}}', {join:join,position:position,model_id:'{{$model_id}}'},function(result) {
|
||||
if(result.status) {
|
||||
toastrSuccess('保存当前视图成功');
|
||||
}
|
||||
},'json');
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.content-body {
|
||||
margin: 0;
|
||||
}
|
||||
.col-sm-10 {
|
||||
padding-left: 10px;
|
||||
padding-right: 10px;
|
||||
}
|
||||
.col-sm-2 {
|
||||
padding-left: 10px;
|
||||
padding-right: 10px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="panel">
|
||||
|
||||
<div class="panel-header">
|
||||
<a class="btn btn-sm btn-info" onclick="workStep.add();" href="javascript:;">新建步骤</a>
|
||||
<a class="btn btn-sm btn-default" onclick="workStep.init();" href="javascript:;">重新加载</a>
|
||||
<a href="javascript:;" onclick="workStep.clear();" class="btn btn-sm btn-default"><i class="fa fa-ban"></i> 清空连接</a>
|
||||
</div>
|
||||
|
||||
<div class="panel-body">
|
||||
<div class="m-t-sm">
|
||||
<div class="col-sm-10 m-b">
|
||||
<div class="graph" id="graph" data-toggle="context" data-target="#graph-menu">
|
||||
<div id="rows"></div>
|
||||
</div>
|
||||
|
||||
<div id="graph-menu">
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li role="presentation"><a role="menuitem" onclick="workStep.add();" href="javascript:;">新建步骤</a></li>
|
||||
<li role="presentation" class="divider"></li>
|
||||
<li role="presentation"><a role="menuitem" onclick="workStep.save();" href="javascript:;">保存视图</a></li>
|
||||
<li role="presentation"><a role="menuitem" onclick="workStep.init();" href="javascript:;">重新加载</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div id="step-menu">
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li role="presentation"><a role="menuitem" onclick="workStep.dblClick('base');" href="javascript:;">基本设置</a></li>
|
||||
<!--
|
||||
<li role="presentation"><a role="menuitem" onclick="workStep.dblClick('handle');" href="javascript:;">经办权限</a></li>
|
||||
<li role="presentation"><a role="menuitem" onclick="workStep.dblClick('field');" href="javascript:;">表单字段</a></li>
|
||||
-->
|
||||
<li role="presentation"><a role="menuitem" onclick="workStep.dblClick('condition');" href="javascript:;">条件设置</a></li>
|
||||
<li role="presentation" class="divider"></li>
|
||||
<li role="presentation"><a role="menuitem" onclick="workStep.clone();" href="javascript:;">克隆该步骤</a></li>
|
||||
<li role="presentation"><a role="menuitem" onclick="workStep.deleted();" href="javascript:;">删除该步骤</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="col-sm-2">
|
||||
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">基本信息</div>
|
||||
<div class="panel-body">
|
||||
<div id="tree"></div>
|
||||
</div>
|
||||
<div class="panel-heading b-t">表单字段</div>
|
||||
<div class="panel-body">
|
||||
<div id="tree"></div>
|
||||
</div>
|
||||
<div class="panel-heading b-t">办理人员</div>
|
||||
<div class="panel-body">
|
||||
<div id="tree"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="m-b">
|
||||
<a href="javascript:;" onclick="workStep.save();" class="btn btn-lg btn-block btn-info"><i class="fa fa-random"></i> 保存连接和视图</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -99,9 +99,7 @@ Vue.createApp({
|
||||
onSubmit: function() {
|
||||
var me = this;
|
||||
var form = $('#plan_delivery_date').serialize();
|
||||
var loading = layer.msg('数据提交中...', {
|
||||
icon: 16, shade: 0.1, time: 1000 * 120
|
||||
});
|
||||
var loading = showLoading();
|
||||
$.post(app.url('order/order/deliveryPlanDate'), form, function(res) {
|
||||
if (res.status) {
|
||||
grid.remoteData();
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
|
||||
gdoo.grids[table] = {grid: grid};
|
||||
|
||||
var action = new grid(table, '外销生产进度表');
|
||||
var action = new gridAction(table, '外销生产进度表');
|
||||
var panel = $('#' + table + '-controller');
|
||||
|
||||
// 过滤数据
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
|
||||
gdoo.grids[table] = {grid: grid};
|
||||
|
||||
var action = new grid(table, '生产计划总表');
|
||||
var action = new gridAction(table, '生产计划总表');
|
||||
var panel = $('#' + table + '-controller');
|
||||
|
||||
panel.on('click', '[data-toggle="' + table + '"]', function() {
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
|
||||
gdoo.grids[table] = {grid: grid};
|
||||
|
||||
var action = new grid(table, '生产计划');
|
||||
var action = new gridAction(table, '生产计划');
|
||||
var panel = $('#' + table + '-controller');
|
||||
|
||||
var producePlan = function() {
|
||||
@@ -103,9 +103,7 @@
|
||||
onSubmit: function() {
|
||||
var me = this;
|
||||
var form = $('#plan_delivery_date').serialize();
|
||||
var loading = layer.msg('数据提交中...', {
|
||||
icon: 16, shade: 0.1, time: 1000 * 120
|
||||
});
|
||||
var loading = showLoading();
|
||||
$.post(app.url('order/order/deliveryPlanDate'), form, function(res) {
|
||||
if (res.status) {
|
||||
grid.remoteData();
|
||||
|
||||
@@ -71,9 +71,7 @@ var planDialog = function () {
|
||||
toastrError('请选选择计划日期。');
|
||||
return;
|
||||
}
|
||||
var loading = layer.msg('数据提取中...', {
|
||||
icon: 16, shade: 0.1, time: 1000 * 120
|
||||
});
|
||||
var loading = showLoading('数据提取中...');
|
||||
$.get('{{url("produce/plan/orderPlan")}}', {plan_date: plan_date}, function(res) {
|
||||
layer.close(loading);
|
||||
if (res.status) {
|
||||
|
||||
@@ -210,15 +210,12 @@
|
||||
return;
|
||||
}
|
||||
|
||||
var index = layer.msg('照片压缩中...', {
|
||||
icon: 16,
|
||||
shade: 0.1,
|
||||
time: 6000 * 10
|
||||
});
|
||||
var loading = showLoading('照片压缩中...');
|
||||
|
||||
$.post('{{url("archive")}}', {
|
||||
id: ids
|
||||
}, function(res) {
|
||||
layer.close(index);
|
||||
layer.close(loading);
|
||||
if (res.status) {
|
||||
$.messager.alert('照片下载', '<div class="text-center"><a href="' + app.url('promotion/material/download', {
|
||||
sn: '{{$promotion->sn}}'
|
||||
|
||||
@@ -166,9 +166,7 @@ var grid = null;
|
||||
products[row.product_id] += parseFloat(row.wf_num);
|
||||
}
|
||||
|
||||
var loading = layer.msg('数据提交中...', {
|
||||
icon: 16, shade: 0.1, time: 1000 * 120
|
||||
});
|
||||
var loading = showLoading();
|
||||
|
||||
var product_ids = Object.keys(products).join(',');
|
||||
var batch_ids = Object.keys(batchs).join(',');
|
||||
|
||||
@@ -118,9 +118,7 @@ var grid = null;
|
||||
products[row.product_id] += parseFloat(row.wf_num);
|
||||
}
|
||||
|
||||
var loading = layer.msg('数据提交中...', {
|
||||
icon: 16, shade: 0.1, time: 1000 * 120
|
||||
});
|
||||
var loading = showLoading();
|
||||
|
||||
var product_ids = Object.keys(products).join(',');
|
||||
var batch_ids = Object.keys(batchs).join(',');
|
||||
@@ -228,9 +226,7 @@ var grid = null;
|
||||
return;
|
||||
}
|
||||
|
||||
var loading = layer.msg('数据提交中...', {
|
||||
icon: 16, shade: 0.1, time: 1000 * 120
|
||||
});
|
||||
var loading = showLoading();
|
||||
$.post(app.url('stock/delivery/autoSave'), query + '&' + $.param(gets), function (res) {
|
||||
if (res.status) {
|
||||
toastrSuccess(res.data);
|
||||
|
||||
@@ -47,9 +47,7 @@ var grid = null;
|
||||
var formData = new FormData();
|
||||
formData.append('file', file);
|
||||
formData.append('customer_id', get_customer_id());
|
||||
var loading = layer.msg('数据提交中...', {
|
||||
icon: 16, shade: 0.1, time: 1000 * 120
|
||||
});
|
||||
var loading = showLoading();
|
||||
$.ajax(url, {
|
||||
method: "post",
|
||||
data: formData,
|
||||
@@ -120,9 +118,7 @@ var grid = null;
|
||||
|
||||
var warehouse_id = $('#stock_direct_warehouse_id').val();
|
||||
|
||||
var loading = layer.msg('数据提交中...', {
|
||||
icon: 16, shade: 0.1, time: 1000 * 120
|
||||
});
|
||||
var loading = showLoading();
|
||||
|
||||
var product_ids = Object.keys(product_ids).join(',');
|
||||
getBatchSelect(warehouse_id, product_ids, '', function(res) {
|
||||
|
||||
@@ -32,9 +32,7 @@ function importExcel() {
|
||||
var file = document.querySelector("#import_file").files[0];
|
||||
var formData = new FormData();
|
||||
formData.append('file', file);
|
||||
var loading = layer.msg('数据提交中...', {
|
||||
icon: 16, shade: 0.1, time: 1000 * 120
|
||||
});
|
||||
var loading = showLoading();
|
||||
$.ajax(url, {
|
||||
method: "post",
|
||||
data: formData,
|
||||
|
||||
@@ -243,9 +243,7 @@ var sampleDialog = function () {
|
||||
}
|
||||
});
|
||||
|
||||
var loading = layer.msg('数据提交中...', {
|
||||
icon: 16, shade: 0.1, time: 1000 * 120
|
||||
});
|
||||
var loading = showLoading();
|
||||
var warehouse_id = $('#stock_record09_warehouse_id').val();
|
||||
var rows = $ref_sample_apply_data.api.getSelectedRows();
|
||||
for (var i = 0; i < rows.length; i++) {
|
||||
|
||||
@@ -29,9 +29,7 @@ Vue.createApp({
|
||||
|
||||
action.refresh = function() {
|
||||
var me = this;
|
||||
var loading = layer.msg('部件更新中...', {
|
||||
icon: 16, shade: 0.1, time: 1000 * 120
|
||||
});
|
||||
var loading = showLoading('部件更新中...');
|
||||
$.post(app.url('system/widget/refresh'), function(res) {
|
||||
if (res.status) {
|
||||
grid.remoteData({page: 1});
|
||||
|
||||
@@ -41,8 +41,20 @@ class DepartmentController extends DefaultController
|
||||
'display' => $display['edit'],
|
||||
]];
|
||||
unset($cols['checkbox']);
|
||||
unset($cols['seq_sn']);
|
||||
unset($cols['name']);
|
||||
|
||||
$header['buttons'] = [
|
||||
['name' => '删除','icon' => 'fa-remove','action' => 'delete','display' => $display['delete']],
|
||||
['name' => '导出', 'icon' => 'fa-share', 'action' => 'export', 'display' => 1],
|
||||
];
|
||||
$header['cols'] = $cols;
|
||||
$header['tabs'] = User::$tabs;
|
||||
$header['bys'] = Department::$bys;
|
||||
|
||||
//config.cols[0]['hide'] = true;
|
||||
//config.cols[1]['hide'] = true;
|
||||
|
||||
$search = $header['search_form'];
|
||||
$query = $search['query'];
|
||||
|
||||
@@ -62,21 +74,11 @@ class DepartmentController extends DefaultController
|
||||
->addSelect(DB::raw('(select count(id) from [user] where department_id = department.id) as user_count'));
|
||||
|
||||
$items = $model->get()->toNested('name');
|
||||
$items = Grid::dataFilters($items, $header, function($item) {
|
||||
return Grid::dataFilters($items, $header, function($item) {
|
||||
return $item;
|
||||
});
|
||||
return $this->json($items, true);
|
||||
}
|
||||
|
||||
$header['buttons'] = [
|
||||
['name' => '删除','icon' => 'fa-remove','action' => 'delete','display' => $display['delete']],
|
||||
['name' => '导出', 'icon' => 'fa-share', 'action' => 'export', 'display' => 1],
|
||||
];
|
||||
$header['cols'] = $cols;
|
||||
$header['tabs'] = User::$tabs;
|
||||
$header['bys'] = Department::$bys;
|
||||
$header['js'] = Grid::js($header);
|
||||
|
||||
return $this->display([
|
||||
'header' => $header,
|
||||
]);
|
||||
|
||||
@@ -33,6 +33,13 @@ class GroupController extends DefaultController
|
||||
'display' => $this->access['edit'],
|
||||
]];
|
||||
|
||||
$header['buttons'] = [
|
||||
['name' => '删除', 'icon' => 'fa-remove', 'action' => 'delete', 'display' => $this->access['delete']],
|
||||
['name' => '导出', 'icon' => 'fa-share', 'action' => 'export', 'display' => 1],
|
||||
];
|
||||
$header['cols'] = $cols;
|
||||
$header['tabs'] = User::$tabs;
|
||||
|
||||
$search = $header['search_form'];
|
||||
$query = $search['query'];
|
||||
|
||||
@@ -55,13 +62,6 @@ class GroupController extends DefaultController
|
||||
return Grid::dataFilters($rows, $header);
|
||||
}
|
||||
|
||||
$header['buttons'] = [
|
||||
['name' => '删除', 'icon' => 'fa-remove', 'action' => 'delete', 'display' => $this->access['delete']],
|
||||
['name' => '导出', 'icon' => 'fa-share', 'action' => 'export', 'display' => 1],
|
||||
];
|
||||
$header['cols'] = $cols;
|
||||
$header['tabs'] = User::$tabs;
|
||||
$header['js'] = Grid::js($header);
|
||||
return $this->display([
|
||||
'header' => $header,
|
||||
]);
|
||||
|
||||
@@ -36,6 +36,16 @@ class MessageController extends Controller
|
||||
'display' => 1,
|
||||
]];
|
||||
|
||||
$header['buttons'] = [
|
||||
['name' => '删除', 'icon' => 'fa-remove', 'action' => 'delete', 'display' => 1],
|
||||
['action' => 'divider'],
|
||||
['name' => '标记已读', 'icon' => '', 'action' => 'read', 'display' => 1],
|
||||
['name' => '标记未读', 'icon' => '', 'action' => 'unread', 'display' => 1],
|
||||
];
|
||||
$header['cols'] = $cols;
|
||||
$header['tabs'] = Message::$tabs;
|
||||
$header['bys'] = Message::$bys;
|
||||
|
||||
$search = $header['search_form'];
|
||||
$query = $search['query'];
|
||||
|
||||
@@ -65,17 +75,6 @@ class MessageController extends Controller
|
||||
return Grid::dataFilters($rows, $header);
|
||||
}
|
||||
|
||||
$header['buttons'] = [
|
||||
['name' => '删除', 'icon' => 'fa-remove', 'action' => 'delete', 'display' => 1],
|
||||
['action' => 'divider'],
|
||||
['name' => '标记已读', 'icon' => '', 'action' => 'read', 'display' => 1],
|
||||
['name' => '标记未读', 'icon' => '', 'action' => 'unread', 'display' => 1],
|
||||
];
|
||||
$header['cols'] = $cols;
|
||||
$header['tabs'] = Message::$tabs;
|
||||
$header['bys'] = Message::$bys;
|
||||
$header['js'] = Grid::js($header);
|
||||
|
||||
return $this->display([
|
||||
'header' => $header,
|
||||
]);
|
||||
|
||||
@@ -33,6 +33,13 @@ class PositionController extends DefaultController
|
||||
'display' => $this->access['edit'],
|
||||
]];
|
||||
|
||||
$header['buttons'] = [
|
||||
['name' => '删除', 'icon' => 'fa-remove', 'action' => 'delete', 'display' => $this->access['delete']],
|
||||
['name' => '导出', 'icon' => 'fa-share', 'action' => 'export', 'display' => 1],
|
||||
];
|
||||
$header['cols'] = $cols;
|
||||
$header['tabs'] = User::$tabs;
|
||||
|
||||
$search = $header['search_form'];
|
||||
$query = $search['query'];
|
||||
|
||||
@@ -55,14 +62,6 @@ class PositionController extends DefaultController
|
||||
return Grid::dataFilters($rows, $header);
|
||||
}
|
||||
|
||||
$header['buttons'] = [
|
||||
['name' => '删除', 'icon' => 'fa-remove', 'action' => 'delete', 'display' => $this->access['delete']],
|
||||
['name' => '导出', 'icon' => 'fa-share', 'action' => 'export', 'display' => 1],
|
||||
];
|
||||
$header['cols'] = $cols;
|
||||
$header['tabs'] = User::$tabs;
|
||||
$header['js'] = Grid::js($header);
|
||||
|
||||
return $this->display([
|
||||
'header' => $header,
|
||||
]);
|
||||
|
||||
@@ -60,6 +60,12 @@ class RoleController extends DefaultController
|
||||
'display' => $this->access['edit'],
|
||||
]];
|
||||
|
||||
$header['buttons'] = [
|
||||
['name' => '删除', 'icon' => 'fa-remove', 'action' => 'delete', 'display' => $this->access['delete']],
|
||||
];
|
||||
$header['cols'] = $cols;
|
||||
$header['tabs'] = User::$tabs;
|
||||
|
||||
$search = $header['search_form'];
|
||||
$query = $search['query'];
|
||||
|
||||
@@ -83,14 +89,6 @@ class RoleController extends DefaultController
|
||||
return Grid::dataFilters($rows, $header);
|
||||
}
|
||||
|
||||
$header['buttons'] = [
|
||||
['name' => '删除', 'icon' => 'fa-remove', 'action' => 'delete', 'display' => $this->access['delete']],
|
||||
];
|
||||
$header['cols'] = $cols;
|
||||
$header['tabs'] = User::$tabs;
|
||||
$header['bys'] = Role::$bys;
|
||||
$header['js'] = Grid::js($header);
|
||||
|
||||
return $this->display([
|
||||
'header' => $header,
|
||||
]);
|
||||
|
||||
@@ -41,15 +41,33 @@ class UserController extends DefaultController
|
||||
}
|
||||
|
||||
$cols['actions']['options'] = [[
|
||||
'name' => '显示',
|
||||
'action' => 'show',
|
||||
'name' => '显示',
|
||||
'action' => 'show',
|
||||
'display' => $this->access['show'],
|
||||
],[
|
||||
'name' => '编辑',
|
||||
'action' => 'edit',
|
||||
'name' => '编辑',
|
||||
'action' => 'edit',
|
||||
'display' => $this->access['edit'],
|
||||
]];
|
||||
|
||||
$header['buttons'] = [
|
||||
['name' => '删除', 'icon' => 'fa-remove', 'action' => 'delete', 'display' => $this->access['delete']],
|
||||
['name' => '导出', 'icon' => 'fa-share', 'action' => 'export', 'display' => 1],
|
||||
];
|
||||
|
||||
$header['left_buttons'] = [
|
||||
['name' => '角色权限', 'color' => 'default', 'action' => 'user_role', 'display' => 1],
|
||||
['name' => '仓库权限', 'color' => 'default', 'action' => 'user_warehouse', 'display' => 1],
|
||||
];
|
||||
|
||||
$header['right_buttons'] = [
|
||||
['name' => '导入', 'color' => 'default', 'icon' => 'fa-mail-reply', 'action' => 'import', 'display' => $this->access['import']],
|
||||
];
|
||||
|
||||
$header['cols'] = $cols;
|
||||
$header['tabs'] = User::$tabs;
|
||||
$header['bys'] = User::$bys;
|
||||
|
||||
$search = $header['search_form'];
|
||||
$query = $search['query'];
|
||||
|
||||
@@ -74,25 +92,6 @@ class UserController extends DefaultController
|
||||
return Grid::dataFilters($rows, $header);
|
||||
}
|
||||
|
||||
$header['buttons'] = [
|
||||
['name' => '删除', 'icon' => 'fa-remove', 'action' => 'delete', 'display' => $this->access['delete']],
|
||||
['name' => '导出', 'icon' => 'fa-share', 'action' => 'export', 'display' => 1],
|
||||
];
|
||||
|
||||
$header['left_buttons'] = [
|
||||
['name' => '角色权限', 'color' => 'default', 'action' => 'user_role', 'display' => 1],
|
||||
['name' => '仓库权限', 'color' => 'default', 'action' => 'user_warehouse', 'display' => 1],
|
||||
];
|
||||
|
||||
$header['right_buttons'] = [
|
||||
['name' => '导入', 'color' => 'default', 'icon' => 'fa-mail-reply', 'action' => 'import', 'display' => $this->access['import']],
|
||||
];
|
||||
|
||||
$header['cols'] = $cols;
|
||||
$header['tabs'] = User::$tabs;
|
||||
$header['bys'] = User::$bys;
|
||||
$header['js'] = Grid::js($header);
|
||||
|
||||
return $this->display([
|
||||
'header' => $header,
|
||||
]);
|
||||
|
||||
@@ -6,17 +6,6 @@ class Role extends BaseModel
|
||||
{
|
||||
protected $table = 'role';
|
||||
|
||||
static public $bys = [
|
||||
'name' => 'by',
|
||||
'items' => [
|
||||
['value' => '', 'name' => '全部'],
|
||||
['value' => 'divider'],
|
||||
['value' => 'day', 'name' => '今日创建'],
|
||||
['value' => 'week', 'name' => '本周创建'],
|
||||
['value' => 'month', 'name' => '本月创建'],
|
||||
]
|
||||
];
|
||||
|
||||
public function scopeDialog($q, $value)
|
||||
{
|
||||
return $q->whereIn('id', $value)
|
||||
|
||||
@@ -22,11 +22,11 @@ class User extends BaseModel implements
|
||||
static public $tabs = [
|
||||
'name' => 'tab',
|
||||
'items' => [
|
||||
['value' => 'user', 'url' => 'user/user/index', 'name' => '用户'],
|
||||
['value' => 'role', 'url' => 'user/role/index', 'name' => '角色'],
|
||||
['value' => 'department', 'url' => 'user/department/index', 'name' => '部门'],
|
||||
['value' => 'group', 'url' => 'user/group/index', 'name' => '用户组'],
|
||||
['value' => 'position', 'url' => 'user/position/index', 'name' => '职位'],
|
||||
['value' => 'user', 'type' => 'a', 'url' => 'user/user/index', 'name' => '用户'],
|
||||
['value' => 'role', 'type' => 'a', 'url' => 'user/role/index', 'name' => '角色'],
|
||||
['value' => 'department', 'type' => 'a', 'url' => 'user/department/index', 'name' => '部门'],
|
||||
['value' => 'group', 'type' => 'a', 'url' => 'user/group/index', 'name' => '用户组'],
|
||||
['value' => 'position', 'type' => 'a', 'url' => 'user/position/index', 'name' => '职位'],
|
||||
]
|
||||
];
|
||||
|
||||
|
||||
@@ -1,26 +1,31 @@
|
||||
{{$header["js"]}}
|
||||
<div class="panel no-border" id="{{$header['table']}}-controller">
|
||||
@include('headers')
|
||||
<div class="gdoo-list-grid">
|
||||
<div id="{{$header['table']}}-grid" class="ag-theme-balham"></div>
|
||||
<div class="ag-theme-balham" id="ag-pagination"></div>
|
||||
<div class="clearfix"></div>
|
||||
<div class="gdoo-list-page" id="{{$header['master_table']}}-page">
|
||||
|
||||
<div class="gdoo-list panel">
|
||||
<div class="gdoo-list-header">
|
||||
<gdoo-grid-header :header="header" :grid="grid" :action="action" />
|
||||
</div>
|
||||
|
||||
<div class='gdoo-list-grid'>
|
||||
<div id="{{$header['master_table']}}-grid" class="ag-theme-balham"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
(function ($) {
|
||||
var table = '{{$header["table"]}}';
|
||||
var config = gdoo.grids[table];
|
||||
var action = config.action;
|
||||
var search = config.search;
|
||||
Vue.createApp({
|
||||
components: {
|
||||
gdooGridHeader,
|
||||
},
|
||||
setup(props, ctx) {
|
||||
var table = '{{$header["master_table"]}}';
|
||||
|
||||
var grid = new agGridOptions();
|
||||
var config = new gdoo.grid(table);
|
||||
|
||||
var gridDiv = document.querySelector("#{{$header['table']}}-grid");
|
||||
gridDiv.style.height = getPanelHeight(11);
|
||||
var grid = config.grid;
|
||||
grid.autoColumnsToFit = true;
|
||||
grid.remoteDataUrl = '{{url()}}';
|
||||
|
||||
config.cols[0]['hide'] = true;
|
||||
config.cols[1]['hide'] = true;
|
||||
grid.autoGroupColumnDef = {
|
||||
headerName: '名称',
|
||||
width: 250,
|
||||
@@ -36,25 +41,21 @@
|
||||
grid.getDataPath = function(data) {
|
||||
return data.tree_path;
|
||||
};
|
||||
|
||||
grid.remoteDataUrl = '{{url()}}';
|
||||
grid.remoteParams = search.advanced.query;
|
||||
grid.columnDefs = config.cols;
|
||||
new agGrid.Grid(gridDiv, grid);
|
||||
|
||||
grid.remoteData();
|
||||
var action = config.action;
|
||||
// 双击行执行的方法
|
||||
action.rowDoubleClick = action.edit;
|
||||
|
||||
// 绑定自定义事件
|
||||
var $gridDiv = $(gridDiv);
|
||||
$gridDiv.on('click', '[data-toggle="event"]', function () {
|
||||
var data = $(this).data();
|
||||
if (data.master_id > 0) {
|
||||
action[data.action](data);
|
||||
}
|
||||
var setup = config.setup;
|
||||
|
||||
Vue.onMounted(function() {
|
||||
var gridDiv = config.div(136);
|
||||
// 初始化数据
|
||||
grid.remoteData({page: 1}, function(res) {
|
||||
config.init(res);
|
||||
});
|
||||
});
|
||||
|
||||
config.grid = grid;
|
||||
|
||||
})(jQuery);
|
||||
</script>
|
||||
@include('footers')
|
||||
return setup;
|
||||
}
|
||||
}).mount("#{{$header['master_table']}}-page");
|
||||
</script>
|
||||
@@ -1,52 +1,45 @@
|
||||
{{$header["js"]}}
|
||||
<div class="panel no-border" id="{{$header['table']}}-controller">
|
||||
@include('headers')
|
||||
<div class="gdoo-list-grid">
|
||||
<div id="{{$header['table']}}-grid" class="ag-theme-balham"></div>
|
||||
<div class="gdoo-list-page" id="{{$header['master_table']}}-page">
|
||||
|
||||
<div class="gdoo-list panel">
|
||||
<div class="gdoo-list-header">
|
||||
<gdoo-grid-header :header="header" :grid="grid" :action="action" />
|
||||
</div>
|
||||
|
||||
<div class='gdoo-list-grid'>
|
||||
<div id="{{$header['master_table']}}-grid" class="ag-theme-balham"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
(function ($) {
|
||||
var table = '{{$header["table"]}}';
|
||||
var config = gdoo.grids[table];
|
||||
var action = config.action;
|
||||
var search = config.search;
|
||||
Vue.createApp({
|
||||
components: {
|
||||
gdooGridHeader,
|
||||
},
|
||||
setup(props, ctx) {
|
||||
var table = '{{$header["master_table"]}}';
|
||||
|
||||
var grid = new agGridOptions();
|
||||
|
||||
var gridDiv = document.querySelector("#{{$header['table']}}-grid");
|
||||
gridDiv.style.height = getPanelHeight(48);
|
||||
var config = new gdoo.grid(table);
|
||||
|
||||
var grid = config.grid;
|
||||
grid.autoColumnsToFit = true;
|
||||
grid.remoteDataUrl = '{{url()}}';
|
||||
grid.remoteParams = search.advanced.query;
|
||||
grid.columnDefs = config.cols;
|
||||
grid.onRowDoubleClicked = function (params) {
|
||||
if (params.node.rowPinned) {
|
||||
return;
|
||||
}
|
||||
if (params.data == undefined) {
|
||||
return;
|
||||
}
|
||||
if (params.data.id > 0) {
|
||||
action.edit(params.data);
|
||||
}
|
||||
};
|
||||
|
||||
new agGrid.Grid(gridDiv, grid);
|
||||
var action = config.action;
|
||||
// 双击行执行的方法
|
||||
action.rowDoubleClick = action.edit;
|
||||
|
||||
grid.remoteData({page: 1});
|
||||
var setup = config.setup;
|
||||
|
||||
// 绑定自定义事件
|
||||
var $gridDiv = $(gridDiv);
|
||||
$gridDiv.on('click', '[data-toggle="event"]', function () {
|
||||
var data = $(this).data();
|
||||
if (data.master_id > 0) {
|
||||
action[data.action](data);
|
||||
}
|
||||
Vue.onMounted(function() {
|
||||
var gridDiv = config.div(136);
|
||||
// 初始化数据
|
||||
grid.remoteData({page: 1}, function(res) {
|
||||
config.init(res);
|
||||
});
|
||||
});
|
||||
|
||||
config.grid = grid;
|
||||
|
||||
})(jQuery);
|
||||
</script>
|
||||
@include('footers')
|
||||
return setup;
|
||||
}
|
||||
}).mount("#{{$header['master_table']}}-page");
|
||||
</script>
|
||||
@@ -1,80 +1,75 @@
|
||||
{{$header["js"]}}
|
||||
<div class="panel no-border" id="{{$header['master_table']}}-controller">
|
||||
@include('headers')
|
||||
<div class="gdoo-list-grid">
|
||||
<div id="{{$header['master_table']}}-grid" class="ag-theme-balham"></div>
|
||||
<div class="gdoo-list-page" id="{{$header['master_table']}}-page">
|
||||
|
||||
<div class="gdoo-list panel">
|
||||
<div class="gdoo-list-header">
|
||||
<gdoo-grid-header :header="header" :grid="grid" :action="action" />
|
||||
</div>
|
||||
|
||||
<div class='gdoo-list-grid'>
|
||||
<div id="{{$header['master_table']}}-grid" class="ag-theme-balham"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
(function($) {
|
||||
var table = '{{$header["master_table"]}}';
|
||||
var config = gdoo.grids[table];
|
||||
var action = config.action;
|
||||
var search = config.search;
|
||||
Vue.createApp({
|
||||
components: {
|
||||
gdooGridHeader,
|
||||
},
|
||||
setup(props, ctx) {
|
||||
var table = '{{$header["master_table"]}}';
|
||||
|
||||
var config = new gdoo.grid(table);
|
||||
|
||||
var statusAction = function(type) {
|
||||
var grid = config.grid;
|
||||
var selections = grid.jqGrid('getSelections');
|
||||
var ids = [];
|
||||
$.each(selections, function(i, selection) {
|
||||
ids.push(selection.id);
|
||||
grid.autoColumnsToFit = true;
|
||||
grid.remoteDataUrl = '{{url()}}';
|
||||
|
||||
var action = config.action;
|
||||
// 双击行执行的方法
|
||||
action.rowDoubleClick = action.show;
|
||||
|
||||
var status = function(type) {
|
||||
var grid = config.grid;
|
||||
var selections = grid.jqGrid('getSelections');
|
||||
var ids = [];
|
||||
$.each(selections, function(i, selection) {
|
||||
ids.push(selection.id);
|
||||
});
|
||||
if (ids.length > 0) {
|
||||
$.post('{{url("status")}}', {type: type, id: ids}, function(res) {
|
||||
if(res.status) {
|
||||
toastrSuccess(res.data);
|
||||
grid.remoteData({page: 1});
|
||||
} else {
|
||||
toastrError(res.data);
|
||||
}
|
||||
},'json');
|
||||
} else {
|
||||
toastrError('最少选择一行记录。');
|
||||
}
|
||||
}
|
||||
|
||||
// 标记已读
|
||||
action.read = function() {
|
||||
status('read');
|
||||
};
|
||||
// 标记未读
|
||||
action.unread = function() {
|
||||
status('unread');
|
||||
};
|
||||
|
||||
var setup = config.setup;
|
||||
|
||||
Vue.onMounted(function() {
|
||||
var gridDiv = config.div(136);
|
||||
// 初始化数据
|
||||
grid.remoteData({page: 1}, function(res) {
|
||||
config.init(res);
|
||||
});
|
||||
});
|
||||
if(ids.length > 0) {
|
||||
$.post('{{url("status")}}', {type: type, id: ids}, function(res) {
|
||||
if(res.status) {
|
||||
toastrSuccess(res.data);
|
||||
grid.trigger('reloadGrid');
|
||||
} else {
|
||||
toastrError(res.data);
|
||||
}
|
||||
},'json');
|
||||
} else {
|
||||
toastrError('最少选择一行记录。');
|
||||
}
|
||||
return setup;
|
||||
}
|
||||
|
||||
// 标记已读
|
||||
action.read = function() {
|
||||
status('read');
|
||||
};
|
||||
// 标记未读
|
||||
action.unread = function() {
|
||||
status('unread');
|
||||
};
|
||||
|
||||
var grid = new agGridOptions();
|
||||
grid.remoteDataUrl = '{{url()}}';
|
||||
grid.remoteParams = search.advanced.query;
|
||||
grid.columnDefs = config.cols;
|
||||
grid.onRowDoubleClicked = function (params) {
|
||||
if (params.node.rowPinned) {
|
||||
return;
|
||||
}
|
||||
if (params.data == undefined) {
|
||||
return;
|
||||
}
|
||||
if (params.data.master_id > 0) {
|
||||
action.show(params.data);
|
||||
}
|
||||
};
|
||||
|
||||
var gridDiv = document.querySelector("#{{$header['master_table']}}-grid");
|
||||
gridDiv.style.height = getPanelHeight(48);
|
||||
new agGrid.Grid(gridDiv, grid);
|
||||
|
||||
grid.remoteData({page: 1});
|
||||
|
||||
// 绑定自定义事件
|
||||
var $gridDiv = $(gridDiv);
|
||||
$gridDiv.on('click', '[data-toggle="event"]', function () {
|
||||
var data = $(this).data();
|
||||
if (data.master_id > 0) {
|
||||
action[data.action](data);
|
||||
}
|
||||
});
|
||||
|
||||
config.grid = grid;
|
||||
|
||||
})(jQuery);
|
||||
</script>
|
||||
@include('footers')
|
||||
}).mount("#{{$header['master_table']}}-page");
|
||||
</script>
|
||||
@@ -1,52 +1,45 @@
|
||||
{{$header["js"]}}
|
||||
<div class="panel no-border" id="{{$header['table']}}-controller">
|
||||
@include('headers')
|
||||
<div class="gdoo-list-grid">
|
||||
<div id="{{$header['table']}}-grid" class="ag-theme-balham"></div>
|
||||
<div class="gdoo-list-page" id="{{$header['master_table']}}-page">
|
||||
|
||||
<div class="gdoo-list panel">
|
||||
<div class="gdoo-list-header">
|
||||
<gdoo-grid-header :header="header" :grid="grid" :action="action" />
|
||||
</div>
|
||||
|
||||
<div class='gdoo-list-grid'>
|
||||
<div id="{{$header['master_table']}}-grid" class="ag-theme-balham"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
(function ($) {
|
||||
var table = '{{$header["table"]}}';
|
||||
var config = gdoo.grids[table];
|
||||
var action = config.action;
|
||||
var search = config.search;
|
||||
Vue.createApp({
|
||||
components: {
|
||||
gdooGridHeader,
|
||||
},
|
||||
setup(props, ctx) {
|
||||
var table = '{{$header["master_table"]}}';
|
||||
|
||||
var grid = new agGridOptions();
|
||||
|
||||
var gridDiv = document.querySelector("#{{$header['table']}}-grid");
|
||||
gridDiv.style.height = getPanelHeight(48);
|
||||
var config = new gdoo.grid(table);
|
||||
|
||||
var grid = config.grid;
|
||||
grid.autoColumnsToFit = true;
|
||||
grid.remoteDataUrl = '{{url()}}';
|
||||
grid.remoteParams = search.advanced.query;
|
||||
grid.columnDefs = config.cols;
|
||||
grid.onRowDoubleClicked = function (params) {
|
||||
if (params.node.rowPinned) {
|
||||
return;
|
||||
}
|
||||
if (params.data == undefined) {
|
||||
return;
|
||||
}
|
||||
if (params.data.id > 0) {
|
||||
action.edit(params.data);
|
||||
}
|
||||
};
|
||||
|
||||
new agGrid.Grid(gridDiv, grid);
|
||||
var action = config.action;
|
||||
// 双击行执行的方法
|
||||
action.rowDoubleClick = action.edit;
|
||||
|
||||
grid.remoteData({page: 1});
|
||||
var setup = config.setup;
|
||||
|
||||
// 绑定自定义事件
|
||||
var $gridDiv = $(gridDiv);
|
||||
$gridDiv.on('click', '[data-toggle="event"]', function () {
|
||||
var data = $(this).data();
|
||||
if (data.master_id > 0) {
|
||||
action[data.action](data);
|
||||
}
|
||||
Vue.onMounted(function() {
|
||||
var gridDiv = config.div(136);
|
||||
// 初始化数据
|
||||
grid.remoteData({page: 1}, function(res) {
|
||||
config.init(res);
|
||||
});
|
||||
});
|
||||
|
||||
config.grid = grid;
|
||||
|
||||
})(jQuery);
|
||||
</script>
|
||||
@include('footers')
|
||||
return setup;
|
||||
}
|
||||
}).mount("#{{$header['master_table']}}-page");
|
||||
</script>
|
||||
@@ -1,43 +1,49 @@
|
||||
{{$header["js"]}}
|
||||
<div class="panel no-border" id="{{$header['table']}}-controller">
|
||||
@include('headers')
|
||||
<div class="gdoo-list-grid">
|
||||
<div id="{{$header['table']}}-grid" class="ag-theme-balham"></div>
|
||||
<div class="gdoo-list-page" id="{{$header['master_table']}}-page">
|
||||
|
||||
<div class="gdoo-list panel">
|
||||
<div class="gdoo-list-header">
|
||||
<gdoo-grid-header :header="header" :grid="grid" :action="action" />
|
||||
</div>
|
||||
|
||||
<div class='gdoo-list-grid'>
|
||||
<div id="{{$header['master_table']}}-grid" class="ag-theme-balham"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
(function ($) {
|
||||
var table = '{{$header["table"]}}';
|
||||
var config = gdoo.grids[table];
|
||||
Vue.createApp({
|
||||
components: {
|
||||
gdooGridHeader,
|
||||
},
|
||||
setup(props, ctx) {
|
||||
var table = '{{$header["master_table"]}}';
|
||||
|
||||
var config = new gdoo.grid(table);
|
||||
|
||||
var grid = config.grid;
|
||||
grid.autoColumnsToFit = true;
|
||||
grid.remoteDataUrl = '{{url()}}';
|
||||
|
||||
var action = config.action;
|
||||
var search = config.search;
|
||||
// 双击行执行的方法
|
||||
action.rowDoubleClick = action.edit;
|
||||
|
||||
action.config = function(data) {
|
||||
top.addTab('user/role/config?role_id=' + data.master_id, 'role_config', '权限配置');
|
||||
}
|
||||
|
||||
var grid = new agGridOptions();
|
||||
var gridDiv = document.querySelector("#{{$header['table']}}-grid");
|
||||
gridDiv.style.height = getPanelHeight(48);
|
||||
grid.remoteDataUrl = '{{url()}}';
|
||||
grid.remoteParams = search.advanced.query;
|
||||
grid.columnDefs = config.cols;
|
||||
var setup = config.setup;
|
||||
|
||||
new agGrid.Grid(gridDiv, grid);
|
||||
|
||||
grid.remoteData({page: 1});
|
||||
|
||||
// 绑定自定义事件
|
||||
var $gridDiv = $(gridDiv);
|
||||
$gridDiv.on('click', '[data-toggle="event"]', function () {
|
||||
var data = $(this).data();
|
||||
if (data.master_id > 0) {
|
||||
action[data.action](data);
|
||||
}
|
||||
Vue.onMounted(function() {
|
||||
var gridDiv = config.div(136);
|
||||
// 初始化数据
|
||||
grid.remoteData({page: 1}, function(res) {
|
||||
config.init(res);
|
||||
});
|
||||
});
|
||||
|
||||
config.grid = grid;
|
||||
|
||||
})(jQuery);
|
||||
</script>
|
||||
@include('footers')
|
||||
return setup;
|
||||
}
|
||||
}).mount("#{{$header['master_table']}}-page");
|
||||
</script>
|
||||
@@ -1,18 +1,36 @@
|
||||
{{$header["js"]}}
|
||||
<div class="panel no-border" id="{{$header['table']}}-controller">
|
||||
@include('headers')
|
||||
<div class="gdoo-list-grid">
|
||||
<div id="{{$header['table']}}-grid" class="ag-theme-balham"></div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
(function ($) {
|
||||
var table = '{{$header["table"]}}';
|
||||
var config = gdoo.grids[table];
|
||||
var action = config.action;
|
||||
var search = config.search;
|
||||
<div class="gdoo-list-page" id="{{$header['master_table']}}-page">
|
||||
|
||||
<div class="gdoo-list panel">
|
||||
<div class="gdoo-list-header">
|
||||
<gdoo-grid-header :header="header" :grid="grid" :action="action" />
|
||||
</div>
|
||||
|
||||
<div class='gdoo-list-grid'>
|
||||
<div id="{{$header['master_table']}}-grid" class="ag-theme-balham"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
Vue.createApp({
|
||||
components: {
|
||||
gdooGridHeader,
|
||||
},
|
||||
setup(props, ctx) {
|
||||
var table = '{{$header["master_table"]}}';
|
||||
|
||||
var config = new gdoo.grid(table);
|
||||
|
||||
var grid = config.grid;
|
||||
grid.autoColumnsToFit = true;
|
||||
grid.remoteDataUrl = '{{url()}}';
|
||||
|
||||
var action = config.action;
|
||||
// 详情页打开方式
|
||||
action.dialogType = 'layer';
|
||||
// 双击行执行的方法
|
||||
action.rowDoubleClick = action.show;
|
||||
|
||||
action.user_warehouse = function(data) {
|
||||
var me = this;
|
||||
@@ -30,9 +48,7 @@
|
||||
var me = this;
|
||||
var form = gdoo.dialogs['user_warehouse'];
|
||||
var selectedRows = form.api.getSelectedRows();
|
||||
var loading = layer.msg('数据提交中...', {
|
||||
icon: 16, shade: 0.1, time: 1000 * 120
|
||||
});
|
||||
var loading = showLoading();
|
||||
$.post(app.url('stock/warehouse/permission', {user_id: user_id}), {rows: selectedRows}, function(res) {
|
||||
if (res.status) {
|
||||
toastrSuccess(res.data);
|
||||
@@ -66,9 +82,7 @@
|
||||
var me = this;
|
||||
var form = gdoo.dialogs['user_role'];
|
||||
var selectedRows = form.api.getSelectedRows();
|
||||
var loading = layer.msg('数据提交中...', {
|
||||
icon: 16, shade: 0.1, time: 1000 * 120
|
||||
});
|
||||
var loading = showLoading();
|
||||
$.post(app.url('user/role/permission', {user_id: user_id}), {rows: selectedRows}, function(res) {
|
||||
if (res.status) {
|
||||
toastrSuccess(res.data);
|
||||
@@ -86,37 +100,16 @@
|
||||
}
|
||||
}
|
||||
|
||||
var grid = new agGridOptions();
|
||||
grid.remoteDataUrl = '{{url()}}';
|
||||
grid.remoteParams = search.advanced.query;
|
||||
grid.columnDefs = config.cols;
|
||||
grid.onRowDoubleClicked = function (params) {
|
||||
if (params.node.rowPinned) {
|
||||
return;
|
||||
}
|
||||
if (params.data == undefined) {
|
||||
return;
|
||||
}
|
||||
if (params.data.master_id > 0) {
|
||||
action.show(params.data);
|
||||
}
|
||||
};
|
||||
var setup = config.setup;
|
||||
|
||||
var gridDiv = document.querySelector("#{{$header['table']}}-grid");
|
||||
gridDiv.style.height = getPanelHeight(48);
|
||||
new agGrid.Grid(gridDiv, grid);
|
||||
|
||||
grid.remoteData({page: 1});
|
||||
|
||||
// 绑定自定义事件
|
||||
var $gridDiv = $(gridDiv);
|
||||
$gridDiv.on('click', '[data-toggle="event"]', function () {
|
||||
var data = $(this).data();
|
||||
if (data.master_id > 0) {
|
||||
action[data.action](data);
|
||||
}
|
||||
Vue.onMounted(function() {
|
||||
var gridDiv = config.div(136);
|
||||
// 初始化数据
|
||||
grid.remoteData({page: 1}, function(res) {
|
||||
config.init(res);
|
||||
});
|
||||
});
|
||||
config.grid = grid;
|
||||
})(jQuery);
|
||||
</script>
|
||||
@include('footers')
|
||||
return setup;
|
||||
}
|
||||
}).mount("#{{$header['master_table']}}-page");
|
||||
</script>
|
||||
@@ -84,7 +84,9 @@
|
||||
var form = layui.form;
|
||||
form.on('submit(sbm)', function () {
|
||||
var data = $('#myform').serialize();
|
||||
var loading = showLoading();
|
||||
$.post('{{url()}}', data, function (res) {
|
||||
layer.close(loading);
|
||||
if (res.status == '1') {
|
||||
toastrSuccess(res.data);
|
||||
}
|
||||
|
||||
@@ -367,11 +367,11 @@ $(function () {
|
||||
}
|
||||
});
|
||||
var data = (data == '') ? '' : data;
|
||||
var load = layer.load(2);
|
||||
$.post('{{url("wechat/mp/menuedit")}}', {data: data}, function (res) {
|
||||
layer.close(load);
|
||||
var loading = showLoading();
|
||||
$.post('{{url()}}', {data: data}, function (res) {
|
||||
layer.close(loading);
|
||||
if (res.status) {
|
||||
layer.msg(res.data, {time: 1000}, function () {});
|
||||
layer.msg(res.data, {time: 1000});
|
||||
} else {
|
||||
layer.alert(res.data);
|
||||
}
|
||||
|
||||
@@ -1,145 +0,0 @@
|
||||
<script src="{{$asset_url}}/vendor/zclip/jquery.zclip.min.js" type="text/javascript"></script>
|
||||
<div class="panel">
|
||||
|
||||
@include('tabs', ['tabKey' => 'mp'])
|
||||
|
||||
<div class="panel-heading tabs-box">
|
||||
<ul class="nav nav-tabs">
|
||||
<li class="@if($type == 'list') active @endif">
|
||||
<a class="text-sm" href="{{url('wechat/mp/qrcode',['type'=>'list'])}}">二维码列表</a>
|
||||
</li>
|
||||
<li class="@if($type == 'statistics') active @endif">
|
||||
<a class="text-sm" href="{{url('wechat/mp/qrcode',['type'=>'statistics'])}}">二维码扫描统计</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="wrapper-sm">
|
||||
<a href="{{url('qrcodeadd')}}" id="addkw" class="btn btn-info btn-sm">增加二维码</a>
|
||||
</div>
|
||||
|
||||
<div class="table-responsive">
|
||||
<table class="table table-hover m-b-none b-t table-hover">
|
||||
@if($type == 'list')
|
||||
<tr>
|
||||
<th>二维码</th>
|
||||
<th>场景名称</th>
|
||||
<th>对应关键字</th>
|
||||
<th>类型</th>
|
||||
<th>到期时间</th>
|
||||
<th>链接</th>
|
||||
<th>操作</th>
|
||||
</tr>
|
||||
@foreach($data as $vo)
|
||||
<tr>
|
||||
<td class="text-center">
|
||||
<div style="padding: 1px; border: #e6e6e6 solid 1px; width:50px; float: left; ">
|
||||
<img class="form_logo" src="{{$vo['qrcode_url']}}" width="50" height="50">
|
||||
</div>
|
||||
</td>
|
||||
<td class="text-center">{{$vo['scene_name']}}</td>
|
||||
<td class="text-center">{{$vo['keyword']}}</td>
|
||||
<td class="text-center">@if($vo['qr_type'] == 0) 临时 @else 永久 @endif
|
||||
</td>
|
||||
<td class="text-center">@if($vo['qr_type'] == 0) @datetime($vo['create_time']) @else 长期有效 @endif
|
||||
</td>
|
||||
<td class="text-center">
|
||||
{{$vo['url']}}
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<a class="option" href="javascript:;" onclick="delQrcode('{{$vo['id']}}')">删除</a>
|
||||
<a target="_blank" href="{{$vo['qrcode_url']}}" class="option">查看</a>
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
@endif
|
||||
|
||||
@if($type == 'statistics')
|
||||
<tr>
|
||||
<th>二维码</th>
|
||||
<th>场景名称</th>
|
||||
<th>触发关键字</th>
|
||||
<th>类型</th>
|
||||
<th>被扫总数</th>
|
||||
<th>粉丝增加</th>
|
||||
<th>操作</th>
|
||||
</tr>
|
||||
@foreach($data as $vo)
|
||||
<tr>
|
||||
<td>
|
||||
<div style="padding: 1px; border: #e6e6e6 solid 1px; width:50px; float: left; ">
|
||||
<img class="form_logo" src="{{$vo['qrcode_url']}}" width="50" height="50">
|
||||
</div>
|
||||
</td>
|
||||
<td>{{$vo['scene_name']}}</td>
|
||||
<td>{{$vo['keyword']}}</td>
|
||||
<td>@if($vo['qr_type'] == 0) 临时 @else 永久 @endif
|
||||
</td>
|
||||
<td>{{$vo['scan_count']}}</td>
|
||||
<td>{{$vo['gz_count']}}</td>
|
||||
<td>
|
||||
<a href="{{url('qrcode',['scene_id'=>$vo['scene_id'],'type'=>'friend'])}}" class="rha-bt-a">查看增加粉丝</a>
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
|
||||
@endif
|
||||
|
||||
@if($type == 'friend')
|
||||
<tr>
|
||||
<th>场景 ID</th>
|
||||
<th>呢称</th>
|
||||
<th>头像</th>
|
||||
<th>扫码次数</th>
|
||||
<th>扫码时间</th>
|
||||
</tr>
|
||||
@foreach($data as $vo)
|
||||
<tr>
|
||||
<td>{$vo['scene_id']}</td>
|
||||
<td>{$vo['nickname']}</td>
|
||||
<td>
|
||||
<img height="38" width="38" style="border-radius: 3px;" src="{{$vo['headimgurl']}}">
|
||||
</td>
|
||||
<td>{$vo['scan_count']}</td>
|
||||
<td>{{date('Y-m-d H:i', $vo['create_time'])}}</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
@endif
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<footer class="panel-footer">
|
||||
<div class="row">
|
||||
<div class="col-sm-1 hidden-xs">
|
||||
</div>
|
||||
<div class="col-sm-11 text-right text-center-xs">
|
||||
{{$data->render()}}
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
function delQrcode(id) {
|
||||
layui.use('layer', function () {
|
||||
var layer = layui.layer;
|
||||
layer.confirm('你确定需要删除吗?', {
|
||||
btn: ['是', '不'] //按钮
|
||||
}, function () {
|
||||
$.post("{{url('wechat/mp/delQrcode')}}", { 'id': id }, function (res) {
|
||||
if (res.status == 1) {
|
||||
layer.alert(res.msg, function (index) {
|
||||
window.location.reload();
|
||||
layer.close(index);
|
||||
})
|
||||
|
||||
} else {
|
||||
layer.alert(res.msg)
|
||||
}
|
||||
})
|
||||
}, function () {
|
||||
|
||||
});
|
||||
});
|
||||
}
|
||||
</script>
|
||||
@@ -1,79 +0,0 @@
|
||||
<form class="layui-form" action="" style="padding-right:10px; ">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">场景名称</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="name" required lay-verify="required" placeholder="请输入名称" autocomplete="off"
|
||||
class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">关联关键词</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="keyword" required lay-verify="required" placeholder="请输入关键词" autocomplete="off"
|
||||
class="layui-input">
|
||||
<p class="tip_for_p">扫描此二维码的同时也会触发此关键词。</p>
|
||||
</div>
|
||||
</div>
|
||||
<div id="qrcodes" class="layui-form-item">
|
||||
<label class="layui-form-label">类型</label>
|
||||
<div id="replyType" class="layui-input-block">
|
||||
<input type="radio" checked name="qr_type" value="2" title="永久">
|
||||
<input type="radio" name="qr_type" value="0" title="临时">
|
||||
<p class="tip_for_p">注:目前腾讯规定了永久二维码只能生成10万个,请悠着点使用永久类型二维码。</p>
|
||||
</div>
|
||||
</div>
|
||||
<div id="qrcode">
|
||||
<div class="qr_2 layui-form-item layui-show layui-tab-item">
|
||||
<label class="layui-form-label">场景值ID</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="scene_str" placeholder="请输入场景值字符串" autocomplete="off"
|
||||
class="layui-input">
|
||||
<p class="tip_for_p">场景值ID(字符串形式的ID),字符串类型,长度限制为1到64。</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="qr_0 layui-form-item layui-tab-item">
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">有效时间/秒</label>
|
||||
<div class="layui-input-inline">
|
||||
<input name="time" required lay-verify="required" autocomplete="off" value="2592000" class="layui-input" type="tel">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">临时二维码过期时间, 最大为30天(2592000秒)</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-block">
|
||||
<button class="layui-btn" lay-submit lay-filter="formDemo">立即提交</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<script>
|
||||
$(function () {
|
||||
$("#qrcodes").click(function () {
|
||||
var class_a = 'qr_' + $("input[name='qr_type']:checked").val();
|
||||
$('#qrcode div').removeClass('layui-show')
|
||||
$('.' + class_a).addClass('layui-show')
|
||||
});
|
||||
})
|
||||
layui.use('form', function () {
|
||||
var form = layui.form;
|
||||
|
||||
//监听提交
|
||||
form.on('submit(formDemo)', function (data) {
|
||||
// layer.msg(JSON.stringify(data.field));
|
||||
$.post('',data.field,function (res) {
|
||||
if (res.status=='0') {
|
||||
layer.msg(res.msg);
|
||||
}
|
||||
if (res.status=='1') {
|
||||
layer.msg(res.msg);
|
||||
window.location.href = res.url;
|
||||
}
|
||||
})
|
||||
return false;
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -1,59 +0,0 @@
|
||||
<div class="panel">
|
||||
|
||||
@include('tabs', ['tabKey' => 'mp'])
|
||||
|
||||
<div class="panel-body">
|
||||
|
||||
<form class="form-horizontal" id="myform" method="POST" action="{{url()}}">
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-2">开始ID</label>
|
||||
<div class="col-sm-6">
|
||||
<input type="text" name="start_id" value="{{(int)$qrcode['scene_id'] + 1}}" required lay-verify="required" placeholder="请输入开始ID"
|
||||
autocomplete="off" class="form-control input-sm">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-2">结束ID</label>
|
||||
<div class="col-sm-6">
|
||||
<input type="text" name="end_id" value="{{(int)$qrcode['scene_id'] + $max}}" required lay-verify="required" placeholder="请输入结束ID"
|
||||
autocomplete="off" class="form-control input-sm">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group m-b-none">
|
||||
<label class="control-label col-sm-2"></label>
|
||||
<div class="col-sm-6">
|
||||
<button class="btn btn-success" lay-submit lay-filter="formDemo">保存</button>
|
||||
<button type="reset" class="btn btn-default">重置</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
$(function () {
|
||||
layui.use('form', function () {
|
||||
var form = layui.form;
|
||||
// 监听提交
|
||||
form.on('submit(formDemo)', function () {
|
||||
var data = $('#myform').serialize();
|
||||
var load = layer.load(2);
|
||||
$.post('{{url()}}', data, function (res) {
|
||||
layer.close(load);
|
||||
if (res.status == '0') {
|
||||
layer.msg(res.msg);
|
||||
}
|
||||
if (res.status == '1') {
|
||||
layer.msg(res.msg);
|
||||
window.location.href = res.url;
|
||||
}
|
||||
})
|
||||
return false;
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -1,94 +0,0 @@
|
||||
<div class="panel">
|
||||
|
||||
@include('tabs', ['tabKey' => 'mp'])
|
||||
<!--
|
||||
<div class="panel-heading tabs-box">
|
||||
<ul class="nav nav-tabs">
|
||||
<li class="@if($type == 'list') active @endif">
|
||||
<a class="text-sm" href="{{url('wechat/mp/qrcode',['type'=>'list'])}}">二维码列表</a>
|
||||
</li>
|
||||
<li class="@if($type == 'statistics') active @endif">
|
||||
<a class="text-sm" href="{{url('wechat/mp/qrcode',['type'=>'statistics'])}}">二维码扫描统计</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
-->
|
||||
<div class="wrapper">
|
||||
<form id="search-form" class="form-inline" name="mysearch" action="{{url()}}" method="get">
|
||||
<div class="pull-right">
|
||||
@if(isset($access['showdelete']))
|
||||
<a class="btn btn-sm btn-danger" href="javascript:optionDelete('#myform','{{url('showdelete')}}');">
|
||||
<i class="icon icon-remove"></i> 删除</a>
|
||||
@endif
|
||||
</div>
|
||||
@include('searchForm')
|
||||
</form>
|
||||
<script type="text/javascript">
|
||||
$(function () {
|
||||
$('#search-form').searchForm({
|
||||
data: {{ json_encode($search['forms'])}},
|
||||
init: function (e) {
|
||||
var self = this;
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
|
||||
<div class="table-responsive">
|
||||
<table class="table table-hover m-b-none table-hover">
|
||||
<tr>
|
||||
<th align="center">
|
||||
<input type="checkbox" class="select-all">
|
||||
</th>
|
||||
<th>场景ID</th>
|
||||
<th>类型</th>
|
||||
<th>到期时间</th>
|
||||
<th>二维码链接</th>
|
||||
<th>ID</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
@foreach($rows as $vo)
|
||||
<tr>
|
||||
<td align="center">
|
||||
<input type="checkbox" class="select-row" value="{{$vo['id']}}" name="id[]">
|
||||
</td>
|
||||
<td class="text-center">{{$vo['scene_id']}}</td>
|
||||
<td class="text-center">
|
||||
@if($vo['qr_type'] == 0)
|
||||
临时
|
||||
@else
|
||||
永久
|
||||
@endif
|
||||
</td>
|
||||
<td class="text-center">
|
||||
@if($vo['qr_type'] == 0)
|
||||
@datetime($vo['created_at'] + $vo['expire'])
|
||||
@else
|
||||
长期有效
|
||||
@endif
|
||||
</td>
|
||||
<td class="text-center">
|
||||
{{$vo['url']}}
|
||||
</td>
|
||||
<td class="text-center">
|
||||
{{$vo['id']}}
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<a target="_blank" href="{{$vo['qrcode_url']}}" class="option">查看</a>
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<footer class="panel-footer">
|
||||
<div class="row">
|
||||
<div class="col-sm-1 hidden-xs">
|
||||
</div>
|
||||
<div class="col-sm-11 text-right text-center-xs">
|
||||
{{$rows->render()}}
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</div>
|
||||
@@ -145,6 +145,13 @@ class BillController extends DefaultController
|
||||
'filter' => false,
|
||||
],
|
||||
];
|
||||
|
||||
$header['buttons'] = [
|
||||
['name' => '删除', 'icon' => 'fa-remove', 'action' => 'delete', 'display' => $this->access['delete']],
|
||||
['name' => '导出', 'icon' => 'fa-share', 'action' => 'export', 'display' => 1],
|
||||
];
|
||||
|
||||
$header['search_form'] = $search;
|
||||
$query = $search['query'];
|
||||
|
||||
if (Request::method() == 'POST') {
|
||||
@@ -171,18 +178,11 @@ class BillController extends DefaultController
|
||||
$row['sn_rule'] = $row['sn_prefix'].$row['sn_rule'].($row['sn_length'] > 0 ? $row['sn_length'] : '');
|
||||
return $row;
|
||||
});
|
||||
return $rows;
|
||||
$ret = $rows->toArray();
|
||||
$ret['header'] = Grid::getColumns($header);
|
||||
return $ret;
|
||||
}
|
||||
|
||||
$header['buttons'] = [
|
||||
['name' => '删除', 'icon' => 'fa-remove', 'action' => 'delete', 'display' => $this->access['delete']],
|
||||
['name' => '导出', 'icon' => 'fa-share', 'action' => 'export', 'display' => 1],
|
||||
];
|
||||
|
||||
$header['search_form'] = $search;
|
||||
$header['js'] = Grid::js($header);
|
||||
|
||||
// 配置权限
|
||||
return $this->display([
|
||||
'header' => $header,
|
||||
]);
|
||||
|
||||
@@ -116,6 +116,13 @@ class CategoryController extends DefaultController
|
||||
'filter' => false,
|
||||
],
|
||||
];
|
||||
|
||||
$header['buttons'] = [
|
||||
['name' => '删除', 'icon' => 'fa-remove', 'action' => 'delete', 'display' => $this->access['delete']],
|
||||
['name' => '导出', 'icon' => 'fa-share', 'action' => 'export', 'display' => 1],
|
||||
];
|
||||
|
||||
$header['search_form'] = $search;
|
||||
$query = $search['query'];
|
||||
|
||||
if (Request::method() == 'POST') {
|
||||
@@ -135,18 +142,11 @@ class CategoryController extends DefaultController
|
||||
$row['updated_dt'] = format_datetime($row['updated_at']);
|
||||
return $row;
|
||||
});
|
||||
return $rows;
|
||||
$ret = $rows->toArray();
|
||||
$ret['header'] = Grid::getColumns($header);
|
||||
return $ret;
|
||||
}
|
||||
|
||||
$header['buttons'] = [
|
||||
['name' => '删除', 'icon' => 'fa-remove', 'action' => 'delete', 'display' => $this->access['delete']],
|
||||
['name' => '导出', 'icon' => 'fa-share', 'action' => 'export', 'display' => 1],
|
||||
];
|
||||
|
||||
$header['search_form'] = $search;
|
||||
$header['js'] = Grid::js($header);
|
||||
|
||||
// 配置权限
|
||||
return $this->display([
|
||||
'header' => $header,
|
||||
]);
|
||||
|
||||
@@ -1,19 +1,34 @@
|
||||
{{$header["js"]}}
|
||||
<div class="gdoo-list-page" id="{{$header['master_table']}}-page">
|
||||
|
||||
<div class="panel no-border" id="{{$header['master_table']}}-controller">
|
||||
@include('headers')
|
||||
<div class='gdoo-list-grid'>
|
||||
<div id="{{$header['master_table']}}-grid" style="width:100%;" class="ag-theme-balham"></div>
|
||||
<div class="gdoo-list panel">
|
||||
<div class="gdoo-list-header">
|
||||
<gdoo-grid-header :header="header" :grid="grid" :action="action" />
|
||||
</div>
|
||||
|
||||
<div class='gdoo-list-grid'>
|
||||
<div id="{{$header['master_table']}}-grid" class="ag-theme-balham"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
(function ($) {
|
||||
var table = '{{$header["master_table"]}}';
|
||||
var config = gdoo.grids[table];
|
||||
var action = config.action;
|
||||
var search = config.search;
|
||||
|
||||
action.dialogType = 'dialog';
|
||||
</div>
|
||||
|
||||
<script>
|
||||
Vue.createApp({
|
||||
components: {
|
||||
gdooGridHeader,
|
||||
},
|
||||
setup(props, ctx) {
|
||||
var table = '{{$header["master_table"]}}';
|
||||
|
||||
var config = new gdoo.grid(table);
|
||||
|
||||
var grid = config.grid;
|
||||
grid.autoColumnsToFit = true;
|
||||
grid.remoteDataUrl = '{{url()}}';
|
||||
|
||||
var action = config.action;
|
||||
// 双击行执行的方法
|
||||
action.rowDoubleClick = action.edit;
|
||||
|
||||
action.view = function(data) {
|
||||
var me = this;
|
||||
@@ -51,39 +66,16 @@
|
||||
});
|
||||
}
|
||||
|
||||
var options = new agGridOptions();
|
||||
var gridDiv = document.querySelector("#{{$header['master_table']}}-grid");
|
||||
gridDiv.style.height = getPanelHeight(48);
|
||||
var setup = config.setup;
|
||||
|
||||
options.remoteDataUrl = '{{url()}}';
|
||||
options.remoteParams = search.advanced.query;
|
||||
options.columnDefs = config.cols;
|
||||
options.onRowDoubleClicked = function (params) {
|
||||
if (params.node.rowPinned) {
|
||||
return;
|
||||
}
|
||||
if (params.data == undefined) {
|
||||
return;
|
||||
}
|
||||
if (params.data.master_id > 0) {
|
||||
action.edit(params.data);
|
||||
}
|
||||
};
|
||||
|
||||
new agGrid.Grid(gridDiv, options);
|
||||
|
||||
options.remoteData({page: 1});
|
||||
|
||||
// 绑定自定义事件
|
||||
var $gridDiv = $(gridDiv);
|
||||
$gridDiv.on('click', '[data-toggle="event"]', function () {
|
||||
var data = $(this).data();
|
||||
if (data.master_id > 0) {
|
||||
action[data.action](data);
|
||||
}
|
||||
Vue.onMounted(function() {
|
||||
var gridDiv = config.div(136);
|
||||
// 初始化数据
|
||||
grid.remoteData({page: 1}, function(res) {
|
||||
config.init(res);
|
||||
});
|
||||
});
|
||||
config.grid = options;
|
||||
})(jQuery);
|
||||
|
||||
</script>
|
||||
@include('footers')
|
||||
return setup;
|
||||
}
|
||||
}).mount("#{{$header['master_table']}}-page");
|
||||
</script>
|
||||
@@ -1,53 +1,45 @@
|
||||
{{$header["js"]}}
|
||||
<div class="gdoo-list-page" id="{{$header['master_table']}}-page">
|
||||
|
||||
<div class="panel no-border" id="{{$header['master_table']}}-controller">
|
||||
@include('headers')
|
||||
<div class='gdoo-list-grid'>
|
||||
<div id="{{$header['master_table']}}-grid" style="width:100%;" class="ag-theme-balham"></div>
|
||||
<div class="gdoo-list panel">
|
||||
<div class="gdoo-list-header">
|
||||
<gdoo-grid-header :header="header" :grid="grid" :action="action" />
|
||||
</div>
|
||||
|
||||
<div class='gdoo-list-grid'>
|
||||
<div id="{{$header['master_table']}}-grid" class="ag-theme-balham"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
(function ($) {
|
||||
Vue.createApp({
|
||||
components: {
|
||||
gdooGridHeader,
|
||||
},
|
||||
setup(props, ctx) {
|
||||
var table = '{{$header["master_table"]}}';
|
||||
var config = gdoo.grids[table];
|
||||
|
||||
var config = new gdoo.grid(table);
|
||||
|
||||
var grid = config.grid;
|
||||
grid.autoColumnsToFit = true;
|
||||
grid.remoteDataUrl = '{{url()}}';
|
||||
|
||||
var action = config.action;
|
||||
var search = config.search;
|
||||
// 双击行执行的方法
|
||||
action.rowDoubleClick = action.edit;
|
||||
|
||||
action.dialogType = 'dialog';
|
||||
var setup = config.setup;
|
||||
|
||||
var options = new agGridOptions();
|
||||
var gridDiv = document.querySelector("#{{$header['master_table']}}-grid");
|
||||
gridDiv.style.height = getPanelHeight(48);
|
||||
|
||||
options.remoteDataUrl = '{{url()}}';
|
||||
options.remoteParams = search.advanced.query;
|
||||
options.columnDefs = config.cols;
|
||||
options.onRowDoubleClicked = function (params) {
|
||||
if (params.node.rowPinned) {
|
||||
return;
|
||||
}
|
||||
if (params.data == undefined) {
|
||||
return;
|
||||
}
|
||||
if (params.data.master_id > 0) {
|
||||
action.edit(params.data);
|
||||
}
|
||||
};
|
||||
|
||||
new agGrid.Grid(gridDiv, options);
|
||||
|
||||
options.remoteData({page: 1});
|
||||
|
||||
// 绑定自定义事件
|
||||
var $gridDiv = $(gridDiv);
|
||||
$gridDiv.on('click', '[data-toggle="event"]', function () {
|
||||
var data = $(this).data();
|
||||
if (data.master_id > 0) {
|
||||
action[data.action](data);
|
||||
}
|
||||
Vue.onMounted(function() {
|
||||
var gridDiv = config.div(136);
|
||||
// 初始化数据
|
||||
grid.remoteData({page: 1}, function(res) {
|
||||
config.init(res);
|
||||
});
|
||||
});
|
||||
config.grid = options;
|
||||
})(jQuery);
|
||||
|
||||
</script>
|
||||
@include('footers')
|
||||
return setup;
|
||||
}
|
||||
}).mount("#{{$header['master_table']}}-page");
|
||||
</script>
|
||||
Reference in New Issue
Block a user