去掉无用的模板文件

封装ajax提示方法
This commit is contained in:
乐风 2021-03-20 05:06:27 +08:00
parent bd9c315d7e
commit c564147f20
68 changed files with 664 additions and 21421 deletions

View File

@ -21,6 +21,7 @@ Vue.createApp({
var grid = config.grid;
grid.remoteDataUrl = '{{url()}}';
grid.autoColumnsToFit = true;
var action = config.action;
// 双击行执行的方法

View File

@ -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() {

View File

@ -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];

View File

@ -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() {

View File

@ -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,

View File

@ -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() {

View File

@ -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']) {

View File

@ -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,

View File

@ -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,

View File

@ -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() {

View File

@ -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,

View File

@ -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,

View File

@ -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,
]);
}

View File

@ -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') {
@ -150,18 +159,11 @@ class ModelController extends DefaultController
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,
]);

View File

@ -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,
]);

View File

@ -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>';

View File

@ -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() {

View File

@ -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);
return setup;
}
}).mount("#{{$header['master_table']}}-page");
</script>
@include('footers')

View File

@ -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);
return setup;
}
}).mount("#{{$header['master_table']}}-page");
</script>
@include('footers')

View File

@ -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>&nbsp;' + row.name;
if (row.type == 'start') {
title = '<span class="ep"><i class="icon icon-play"></i></span>&nbsp;' + row.name;
} else if(row.type == 'end') {
title = '<span class="ep"><i class="icon icon-stop"></i></span>&nbsp;' + 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>

View File

@ -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();

View File

@ -56,7 +56,7 @@
gdoo.grids[table] = {grid: grid};
var action = new grid(table, '外销生产进度表');
var action = new gridAction(table, '外销生产进度表');
var panel = $('#' + table + '-controller');
// 过滤数据

View File

@ -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() {

View File

@ -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();

View File

@ -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) {

View File

@ -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}}'

View File

@ -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(',');

View File

@ -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);

View File

@ -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) {

View File

@ -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,

View File

@ -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++) {

View File

@ -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});

View File

@ -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,
]);

View File

@ -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,
]);

View File

@ -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,
]);

View File

@ -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,
]);

View File

@ -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,
]);

View File

@ -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,
]);

View File

@ -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)

View File

@ -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' => '职位'],
]
];

View File

@ -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,
@ -37,24 +42,20 @@
return data.tree_path;
};
grid.remoteDataUrl = '{{url()}}';
grid.remoteParams = search.advanced.query;
grid.columnDefs = config.cols;
new agGrid.Grid(gridDiv, grid);
var action = config.action;
// 双击行执行的方法
action.rowDoubleClick = action.edit;
grid.remoteData();
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);
return setup;
}
}).mount("#{{$header['master_table']}}-page");
</script>
@include('footers')

View File

@ -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);
return setup;
}
}).mount("#{{$header['master_table']}}-page");
</script>
@include('footers')

View File

@ -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);
}).mount("#{{$header['master_table']}}-page");
</script>
@include('footers')

View File

@ -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);
return setup;
}
}).mount("#{{$header['master_table']}}-page");
</script>
@include('footers')

View File

@ -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);
return setup;
}
}).mount("#{{$header['master_table']}}-page");
</script>
@include('footers')

View File

@ -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);
return setup;
}
}).mount("#{{$header['master_table']}}-page");
</script>
@include('footers')

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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,
]);

View File

@ -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,
]);

View File

@ -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);
return setup;
}
}).mount("#{{$header['master_table']}}-page");
</script>
@include('footers')

View File

@ -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);
return setup;
}
}).mount("#{{$header['master_table']}}-page");
</script>
@include('footers')

View File

@ -1883,12 +1883,6 @@ select.input-sm, select.form-group-sm .form-control {
.gdoo-list-page {
display: none;
}
.gdoo-list-page .search-inline-form .form-group {
margin-left: 4px;
}
.gdoo-list-page .btn-group {
margin-left: 4px;
}
.gdoo-list {
border-color: transparent;
border-width: 0;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -98,9 +98,7 @@
if(gets === false) {
return;
}
var loading = layer.msg('数据提交中...', {
icon: 16, shade: 0.1, time: 1000 * 120
});
var loading = showLoading();
$.post(app.url(uri + '/flowAudit'), query + '&' + $.param(gets), function (res) {
if (res.status) {
reloadGrid(table);
@ -126,9 +124,7 @@
return;
}
var loading = layer.msg('数据提交中...', {
icon: 16, shade: 0.1, time: 1000 * 120
});
var loading = showLoading();
var event = gdoo.event.get('grid.' + table);
@ -172,9 +168,9 @@
if(gets === false) {
return;
}
var loading = layer.msg('数据提交中...', {
icon: 16, shade: 0.1, time: 1000 * 120
});
var loading = showLoading();
$.post(app.url(uri + '/store'), query + '&' + $.param(gets), function (res) {
if (res.status) {
reloadGrid(table);
@ -192,9 +188,9 @@
}, read: function (table) {
var uri = $('#' + table).find('#master_uri').val();
var query = $('#' + table).serialize();
var loading = layer.msg('数据提交中...', {
icon: 16, shade: 0.1
});
var loading = showLoading();
$.post(app.url(uri + '/flowRead'), query, function (res) {
if (res.status) {
reloadGrid(table);
@ -212,9 +208,9 @@
if (btn == true) {
var uri = $('#' + table).find('#master_uri').val();
var query = $('#' + table).serialize();
var loading = layer.msg('数据提交中...', {
icon: 16, shade: 0.1
});
var loading = showLoading();
$.post(app.url(uri + '/flowReset'), query, function (res) {
if (res.status) {
location.reload();
@ -280,11 +276,10 @@
text: "提交",
'class': "btn-info",
click: function () {
var me = this;
var query = $('#myrecall').serialize();
var loading = layer.msg('数据提交中...', {
icon: 16, shade: 0.1, time: 1000 * 120
});
var loading = showLoading();
$.post(app.url(uri + '/recall'), query, function (res) {
if (res.status) {
reloadGrid(table);
@ -319,11 +314,10 @@
text: "提交",
'class': "btn-info",
click: function () {
var me = this;
var query = $('#myabort').serialize();
var loading = layer.msg('数据提交中...', {
icon: 16, shade: 0.1, time: 1000 * 120
});
var loading = showLoading();
$.post(app.url(uri + '/abort'), query, function (res) {
if (res.status) {
reloadGrid(table);
@ -346,9 +340,7 @@
var uri = $('#' + table).find('#master_uri').val();
$.messager.confirm('操作警告', '确定要审核单据吗', function(btn) {
if (btn == true) {
var loading = layer.msg('数据提交中...', {
icon: 16, shade: 0.1
});
var loading = showLoading();
$.post(app.url(uri + '/audit'), {key: key}, function (res) {
if (res.status) {
reloadGrid(table);
@ -370,9 +362,7 @@
var uri = $('#' + table).find('#master_uri').val();
$.messager.confirm('操作警告', '确定要弃审单据吗', function(btn) {
if (btn == true) {
var loading = layer.msg('数据提交中...', {
icon: 16, shade: 0.1, time: 1000 * 30
});
var loading = showLoading();
$.post(app.url(uri + '/abort'), {key: key}, function (res) {
if (res.status) {
reloadGrid(table);
@ -459,9 +449,7 @@
var id = rows[0].id;
top.$.messager.confirm('操作提醒', '是否要关闭选中的行数据?', function(btn) {
if (btn == true) {
var loading = layer.msg('数据提交中...', {
icon: 16, shade: 0.1, time: 1000 * 120
});
var loading = showLoading();
$.post(app.url(me.bill_url + '/closeRow'), {table: table,id: id}, function(res) {
if (res.status) {
toastrSuccess(res.data);
@ -490,9 +478,7 @@
if (ids.length > 0) {
top.$.messager.confirm('操作提醒', '是否要关闭所有行数据?', function(btn) {
if (btn == true) {
var loading = layer.msg('数据提交中...', {
icon: 16, shade: 0.1, time: 1000 * 120
});
var loading = showLoading();
$.post(app.url(me.bill_url + '/closeAllRow'), {table: table,ids: ids}, function(res) {
if (res.status) {
toastrSuccess(res.data);
@ -559,9 +545,7 @@
onSubmit: function() {
var fd = new FormData();
fd.append("file", $('#import_file')[0].files[0]);
var loading = layer.msg('数据提交中...', {
icon: 16, shade: 0.1, time: 1000 * 120
});
var loading = showLoading();
$.ajax({
url: app.url(me.bill_url + '/import'),
type: "POST",
@ -598,9 +582,7 @@
var content = ids.length + '个' + me.name + '将被删除?';
top.$.messager.confirm('删除' + me.name, content, function(btn) {
if (btn == true) {
var loading = layer.msg('数据提交中...', {
icon: 16, shade: 0.1, time: 1000 * 120
});
var loading = showLoading();
$.post(app.url(me.bill_url + '/delete'), {id: ids}, function(res) {
if (res.status) {
toastrSuccess(res.data);

View File

@ -554,9 +554,7 @@ function formDialog(options)
return;
}
var loading = layer.msg('数据提交中...', {
icon: 16, shade: 0.1, time: 1000 * 120
});
var loading = showLoading();
$.post(action, query + '&' + $.param(gets), function(res) {
if (res.status) {
@ -849,9 +847,7 @@ function ajaxSubmit(table, callback) {
data = data +'&'+ $.param(rows);
var loading = layer.msg('数据提交中...', {
icon: 16, shade: 0.1, time: 1000 * 120
});
var loading = showLoading();
$.post(url, data, function(res) {
if (typeof callback === 'function') {
@ -900,6 +896,18 @@ function getIframeDocument(iframe_id) {
return null;
}
/**
* 数据加载提示
*/
function showLoading(msg) {
var loading = layer.msg(msg || '数据提交中...', {
icon: 16,
shade: 0.1,
time: 1000 * 120
});
return loading;
}
/**
* 格式化文件大小
* @param {*} fileSize

View File

@ -462,7 +462,6 @@
});
content.html(iframe);
//layer.msg('页面加载中,请稍候...', {icon: 2,shade: 0, time: 1000 * 120});
layer.load(2);
iframe.load(function() {
layer.closeAll('loading');

View File

@ -1,9 +1,9 @@
{
"/assets/dist/bundle.min.js": "/assets/dist/bundle.min.js?id=b46cb4305a863944f84c",
"/assets/dist/bundle.min.js": "/assets/dist/bundle.min.js?id=91de744571d14310c12f",
"/assets/dist/vendor.min.js": "/assets/dist/vendor.min.js?id=29c59d13160c6607b4af",
"/assets/dist/gdoo.min.js": "/assets/dist/gdoo.min.js?id=a3923df9d79f567f2cf9",
"/assets/dist/index.min.js": "/assets/dist/index.min.js?id=9f7be548e55d993be518",
"/assets/dist/gdoo.min.js": "/assets/dist/gdoo.min.js?id=41c03fad45a93b2c4a16",
"/assets/dist/index.min.js": "/assets/dist/index.min.js?id=e68deaa21814b7ec0d1c",
"/assets/dist/vendor.min.css": "/assets/dist/vendor.min.css?id=99a58728a17257718260",
"/assets/dist/gdoo.min.css": "/assets/dist/gdoo.min.css?id=3817f9870ed3748aba46",
"/assets/dist/gdoo.min.css": "/assets/dist/gdoo.min.css?id=644acfd8367a5dd5a096",
"/assets/dist/index.min.css": "/assets/dist/index.min.css?id=ccde8d73c536940b91d9"
}

View File

@ -12,15 +12,15 @@
<div class="wrapper-xs">
<div class="pull-right">
<template v-for="button in header.right_buttons">
<a v-if="button.display" @click="linkBtn(button)" :class="'btn btn-sm btn-' + button.color"><i :class="'fa ' + button.icon"></i> {{button.name}}</a>
<a v-if="button.display" @click="linkBtn(button)" :class="'btn btn-sm btn-r-line btn-' + button.color"><i :class="'fa ' + button.icon"></i> {{button.name}}</a>
</template>
<a v-if="header.trash_btn" @click="actBtn('trash')" :class="'btn btn-sm btn-default ' + (header.search_form.query.by == 'trash' ? 'active' : '')"><i class="fa fa-trash"></i>回收站 ({{header.trash_count}})</a>
<a v-if="header.trash_btn" @click="actBtn('trash')" :class="'btn btn-sm btn-r-line btn-default ' + (header.search_form.query.by == 'trash' ? 'active' : '')"><i class="fa fa-trash"></i>回收站 ({{header.trash_count}})</a>
</div>
<a v-if="header.access.create && header.create_btn" @click="actBtn('create')" class="btn btn-sm btn-success hinted" :title="'新建' + header.name"><i class="icon icon-plus"></i> 新建</a>
<a v-if="header.access.create && header.create_btn" @click="actBtn('create')" class="btn btn-sm btn-l-line btn-success hinted" :title="'新建' + header.name"><i class="icon icon-plus"></i> 新建</a>
<div class="btn-group">
<div class="btn-group btn-l-line">
<a class="btn btn-info btn-sm" data-toggle="dropdown" aria-expanded="false"><i class="fa fa-bars"></i> 操作 <span class="caret"></span></a>
<ul class="dropdown-menu">
<template v-for="button in header.center_buttons">
@ -31,14 +31,14 @@
</div>
<span class="visible-xs">
<div class="btn-group">
<div class="btn-group btn-l-line">
<a @click="actBtn('filter')" class="btn btn-sm btn-default"><i class="fa fa-search"></i> 搜索</a>
</div>
</span>
<!-- 简单搜索表单 -->
<form v-if="header.search_form.simple_search" :id="header.table + '-search-form'" class="search-inline-form form-inline hidden-xs" name="mysearch" method="get">
<div class="form-group search-group">
<div class="form-group search-group btn-l-line">
<select name="field_0" id="search-field-0" class="form-control input-sm">
<option data-type="empty" value="">筛选条件</option>
<template v-for="column in header.search_form.columns">
@ -47,13 +47,13 @@
</select>
</div>
<div class="form-group" style="display:none;">
<div class="form-group btn-l-line" style="display:none;">
<select name="condition_0" id="search-condition-0" class="form-control input-sm"></select>
</div>
<div class="form-group" id="search-value-0"></div>
<div class="form-group btn-l-line" id="search-value-0"></div>
<div class="btn-group">
<div class="btn-group btn-l-line">
<button id="search-submit" type="submit" class="btn btn-sm btn-default">
<i class="fa fa-search"></i> 搜索</button>
<button type="button" class="btn btn-default btn-sm dropdown-toggle" data-toggle="dropdown">
@ -65,9 +65,9 @@
</ul>
</div>
</form>
<a v-else class="btn btn-sm btn-default" @click="actBtn('filter')"><i class="fa fa-search"></i> 筛选</a>
<a v-else class="btn btn-sm btn-l-line btn-default" @click="actBtn('filter')"><i class="fa fa-search"></i> 筛选</a>
<div v-if="header.bys.items.length" class="btn-group" role="group">
<div v-if="header.bys.items.length" class="btn-group btn-l-line" role="group">
<button type="button" class="btn btn-sm btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="fa fa-filter"></span> {{header.by_title}}
<span class="caret"></span>
@ -81,7 +81,7 @@
</div>
<template v-for="button in header.left_buttons">
<a v-if="button.display == 1" @click="linkBtn(button)" :class="'btn btn-sm btn-' + button.color"><i :class="'fa ' + button.icon"></i> {{button.name}}</a>
<a v-if="button.display == 1" @click="linkBtn(button)" :class="'btn btn-sm btn-l-line btn-' + button.color"><i :class="'fa ' + button.icon"></i> {{button.name}}</a>
</template>
<div style="display:none;">
@ -131,7 +131,11 @@ export default defineComponent({
setup(props) {
let tabBtn = (btn) => {
props.header.tabs.active = btn.value;
props.grid.remoteData({page:1, tab:btn.value});
if (btn.type == 'a') {
location.href = '/' + btn.url;
} else {
props.grid.remoteData({page:1, tab:btn.value});
}
}
let actBtn = (btn) => {
props.action[btn]();
@ -160,3 +164,12 @@ export default defineComponent({
}
});
</script>
<style scoped>
.btn-r-line {
margin-left: 4px;
}
.btn-l-line {
margin-right: 4px;
}
</style>

View File

@ -7,14 +7,18 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>{{$setting['title']}}</title>
<link href="{{mix('/assets/dist/vendor.min.css')}}" rel="stylesheet" type="text/css" />
<link href="{{mix('/assets/dist/gdoo.min.css')}}" rel="stylesheet" type="text/css" />
<link href="{{$asset_url}}/vendor/layui/css/layui.css" rel="stylesheet" type="text/css" />
<link href="{{$asset_url}}/css/wechat/console.css" rel="stylesheet" type="text/css" />
<link href="{{$asset_url}}/css/wechat/icon/icon.css" rel="stylesheet" type="text/css" />
<link href="{{mix('/assets/dist/app.min.css')}}" rel="stylesheet" type="text/css" />
<script src="{{$asset_url}}/vendor/layui/layui.js" type="text/javascript"></script>
<script src="{{$public_url}}/index/api/common?v={{time()}}" type="text/javascript"></script>
<script src="{{mix('/assets/dist/app.min.js')}}" type="text/javascript"></script>
<script type="text/javascript" src="{{mix('/assets/dist/vendor.min.js')}}"></script>
<script type="text/javascript" src="{{$asset_url}}/vendor/layui/layui.js"></script>
<script type="text/javascript" src="{{$asset_url}}/vendor/datepicker/datepicker.js"></script>
<script type="text/javascript" src="{{$public_url}}/common?s={{time()}}"></script>
<script type="text/javascript" src="{{mix('/assets/dist/gdoo.min.js')}}"></script>
</head>
<body>
<div class="content-body">