继续重构模块列表前端样式

This commit is contained in:
2021-03-17 03:15:10 +08:00
parent 181fa17fdd
commit cd3a44340e
192 changed files with 3321 additions and 4596 deletions
@@ -25,13 +25,25 @@ class CategoryController extends DefaultController
$cols = $header['cols'];
$cols['sequence_sn']['hide'] = true;
$cols['name']['hide'] = true;
$cols['actions']['options'] = [[
'name' => '编辑',
'action' => 'edit',
'display' => $this->access['edit'],
]];
unset($cols['checkbox']);
$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'] = ProductCategory::$tabs;
$search = $header['search_form'];
$query = $search['query'];
@@ -51,20 +63,9 @@ class CategoryController extends DefaultController
$model->select($header['select']);
$rows = $model->get()->toNested();
$items = Grid::dataFilters($rows, $header);
return $this->json($items, true);
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'] = ProductCategory::$tabs;
$header['bys'] = ProductCategory::$bys;
$header['js'] = Grid::js($header);
return $this->display([
'header' => $header,
]);
@@ -44,6 +44,18 @@ class ProductController 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['right_buttons'] = [
['name' => '导入', 'color' => 'default', 'icon' => 'fa-mail-reply', 'action' => 'import', 'display' => $this->access['import']],
];
$header['cols'] = $cols;
$header['tabs'] = Product::$tabs;
$header['bys'] = Product::$bys;
$search = $header['search_form'];
$query = $search['query'];
@@ -72,19 +84,6 @@ class ProductController 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['right_buttons'] = [
['name' => '导入', 'color' => 'default', 'icon' => 'fa-mail-reply', 'action' => 'import', 'display' => $this->access['import']],
];
$header['cols'] = $cols;
$header['tabs'] = Product::$tabs;
$header['bys'] = Product::$bys;
$header['js'] = Grid::js($header);
return $this->display([
'header' => $header,
]);
@@ -30,6 +30,13 @@ class UnitController 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'] = ProductUnit::$tabs;
$search = $header['search_form'];
$query = $search['query'];
@@ -51,15 +58,6 @@ class UnitController 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'] = ProductUnit::$tabs;
$header['bys'] = ProductUnit::$bys;
$header['js'] = Grid::js($header);
return $this->display([
'header' => $header,
]);
@@ -12,17 +12,6 @@ class ProductCategory extends BaseModel
['value' => 'category.index', 'url' => 'product/category/index', 'name' => '产品类别'],
]
];
public static $bys = [
'name' => 'by',
'items' => [
['value' => '', 'name' => '全部'],
['value' => 'divider'],
['value' => 'day', 'name' => '今日创建'],
['value' => 'week', 'name' => '本周创建'],
['value' => 'month', 'name' => '本月创建'],
]
];
public function scopeType($query, $type = 1)
{
-13
View File
@@ -12,17 +12,4 @@ class ProductUnit extends BaseModel
['value' => 'unit.index', 'url' => 'product/unit/index', 'name' => '计量单位'],
]
];
public static $bys = [
'name' => 'by',
'items' => [
['value' => '', 'name' => '全部'],
['value' => 'enabled', 'name' => '启用'],
['value' => 'disabled', 'name' => '禁用'],
['value' => 'divider'],
['value' => 'day', 'name' => '今日创建'],
['value' => 'week', 'name' => '本周创建'],
['value' => 'month', 'name' => '本月创建'],
]
];
}
+33 -50
View File
@@ -1,26 +1,28 @@
{{$header["js"]}}
<div class="panel no-border" id="{{$header['table']}}-controller">
@include('headers')
<div class="list-jqgrid">
<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,
@@ -31,43 +33,24 @@
};
grid.treeData = true;
grid.groupDefaultExpanded = -1;
grid.getDataPath = function(data) {
return data.tree_path;
};
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) {
params.data.master_id = params.data.id;
action.edit(params.data);
}
};
var action = config.action;
// 双击行执行的方法
action.rowDoubleClick = action.edit;
new agGrid.Grid(gridDiv, grid);
var setup = config.setup;
// 读取数据
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(101);
// 初始化数据
grid.remoteData({page: 1}, function(res) {
config.init(res);
});
});
config.grid = grid;
})(jQuery);
</script>
@include('footers')
return setup;
}
}).mount("#{{$header['master_table']}}-page");
</script>
@@ -5,7 +5,7 @@
</div>
<div class="col-xs-3">
<div class="list-jqgrid">
<div class="gdoo-list-grid">
<div id="dialog-{{$search['query']['id']}}-tree" style="width:100%;height:380px;" class="ag-theme-balham abc"></div>
</div>
</div>
+73 -102
View File
@@ -1,38 +1,24 @@
{{$header["js"]}}
<div class="panel no-border m-b-sm" id="{{$header['table']}}-controller">
@include('headers')
<div class="col-xs-4 col-sm-2">
<div id="{{$header['master_table']}}-tree" style="width:100%;" class="tree-grid ag-theme-balham"></div>
</div>
<div class="col-xs-8 col-sm-10">
<div class="list-jqgrid">
<div id="{{$header['master_table']}}-grid" style="width:100%;" class="list-grid 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 class="col-xs-4 col-sm-2">
<div id="{{$header['master_table']}}-tree" class="tree-grid ag-theme-balham"></div>
</div>
<div class="col-xs-8 col-sm-10">
<div id="{{$header['master_table']}}-grid" class="list-grid ag-theme-balham"></div>
</div>
</div>
<div class="clearfix"></div>
</div>
<div class="clearfix"></div>
</div>
<style>
/*
.list-grid.ag-theme-balham .ag-ltr .ag-cell {
vertical-align: middle;
line-height: 42px;
}
.thumb-sm {
vertical-align: middle;
margin-top: 3px;
}
*/
.tree-grid.ag-theme-balham {
border-right: 1px solid #BDC3C7;
}
.tree-grid.ag-theme-balham .ag-ltr .ag-cell {
border-width: 0 0 0 0;
border-right-color: #d9dcde;
@@ -53,6 +39,7 @@
.tree-box .ul {
margin-bottom: 0;
}
.col-xs-4 {
padding-right: 0;
padding-left: 5px;
@@ -75,85 +62,69 @@
</style>
<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"]}}';
action.dialogType = 'layer';
var tree = new agGridOptions();
tree.rowSelection = 'single';
tree.autoGroupColumnDef = {
headerName: '类别名称',
width: 250,
sortable: false,
suppressMenu: true,
cellRendererParams: {
suppressCount: true,
}
};
tree.treeData = true;
tree.groupDefaultExpanded = -1;
tree.getDataPath = function(data) {
return data.tree_path;
};
tree.columnDefs = [];
tree.rowSelection = 'single';
tree.enableCellTextSelection = false;
tree.onRowClicked = function (params) {
var query = {};
query['category_id'] = params.data.id;
query['page'] = 1;
config.grid.remoteData(query);
};
tree.remoteDataUrl = "{{url('category')}}";
var height = getPanelHeight(140);
var treeOptions = new agGridOptions();
treeOptions.rowSelection = 'single';
var treeDiv = document.querySelector("#{{$header['master_table']}}-tree");
treeDiv.style.height = height;
var config = new gdoo.grid(table);
treeOptions.autoGroupColumnDef = {
headerName: '类别名称',
width: 250,
sortable: false,
suppressMenu: true,
cellRendererParams: {
suppressCount: true,
}
};
treeOptions.treeData = true;
treeOptions.groupDefaultExpanded = -1;
treeOptions.getDataPath = function(data) {
return data.tree_path;
};
treeOptions.columnDefs = [];
treeOptions.rowSelection = 'single';
treeOptions.enableCellTextSelection = false;
treeOptions.onRowClicked = function (params) {
var query = {};
query['category_id'] = params.data.id;
query['page'] = 1;
config.grid.remoteData(query);
};
treeOptions.remoteDataUrl = "{{url('category')}}";
new agGrid.Grid(treeDiv, treeOptions);
// 读取数据
treeOptions.remoteData();
var options = new agGridOptions();
var gridDiv = document.querySelector("#{{$header['table']}}-grid");
gridDiv.style.height = height;
var grid = config.grid;
grid.autoColumnsToFit = true;
grid.remoteDataUrl = '{{url()}}';
options.remoteDataUrl = '{{url()}}';
options.remoteParams = search.advanced.query;
options.columnDefs = config.cols;
//options.rowHeight = 47;
options.autoColumnsToFit = false;
options.onRowDoubleClicked = function (params) {
if (params.node.rowPinned) {
return;
}
if (params.data == undefined) {
return;
}
if (params.data.master_id > 0) {
action.show(params.data);
}
};
var action = config.action;
// 详情页打开方式
action.dialogType = 'layer';
// 双击行执行的方法
action.rowDoubleClick = action.show;
new agGrid.Grid(gridDiv, options);
var setup = config.setup;
// 读取数据
options.remoteData({page: 1});
Vue.onMounted(function() {
var height = 136;
var treeDiv = document.querySelector('#' + table + '-tree');
treeDiv.style.height = config.getPanelHeight(height);
new agGrid.Grid(treeDiv, tree);
tree.remoteData();
// 绑定自定义事件
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 = options;
})(jQuery);
</script>
@include('footers')
var gridDiv = config.div(height);
// 初始化数据
grid.remoteData({page: 1}, function(res) {
config.init(res);
});
});
return setup;
}
}).mount("#{{$header['master_table']}}-page");
</script>
@@ -5,7 +5,7 @@
</div>
<div class="col-xs-3">
<div class="list-jqgrid">
<div class="gdoo-list-grid">
<div id="dialog-{{$search['query']['id']}}-tree" style="width:100%;height:380px;" class="ag-theme-balham abc"></div>
</div>
</div>
+35 -45
View File
@@ -1,52 +1,42 @@
{{$header["js"]}}
<div class="panel no-border" id="{{$header['table']}}-controller">
@include('headers')
<div class='list-jqgrid'>
<div id="{{$header['table']}}-grid" style="width:100%;" 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;
var options = new agGridOptions();
var gridDiv = document.querySelector("#{{$header['table']}}-grid");
gridDiv.style.height = getPanelHeight(48);
// 双击行执行的方法
action.rowDoubleClick = action.edit;
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.id > 0) {
action.edit(params.data);
}
};
var setup = config.setup;
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>