mirror of
https://gitee.com/ulthon/ulthon_admin.git
synced 2026-07-07 18:42:49 +08:00
增加菜单到导出和导入;增加粘贴全局操作;优化表单错误表现;
This commit is contained in:
@@ -10,6 +10,7 @@ use app\admin\service\TriggerService;
|
||||
use app\common\constants\MenuConstant;
|
||||
use app\common\controller\AdminController;
|
||||
use think\App;
|
||||
use think\facade\Db;
|
||||
|
||||
/**
|
||||
* Class Menu.
|
||||
@@ -216,4 +217,68 @@ class MenuBase extends AdminController
|
||||
'type' => 'success',
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @NodeAnotation(title="导出")
|
||||
*/
|
||||
public function export()
|
||||
{
|
||||
$list_menu_json = SystemMenu::select()->hidden([
|
||||
'create_time',
|
||||
'update_time',
|
||||
'delete_time',
|
||||
])->toJson();
|
||||
|
||||
$download = $this->request->param('download');
|
||||
if ($download == 1) {
|
||||
$file_name = 'admin_menu.json';
|
||||
$file_name = $this->request->host() . '_' . $file_name;
|
||||
|
||||
return download($list_menu_json, $file_name, true, 0);
|
||||
}
|
||||
|
||||
$this->assign('list_menu_json', $list_menu_json);
|
||||
|
||||
return $this->fetch();
|
||||
}
|
||||
|
||||
/**
|
||||
* @NodeAnotation(title="import")
|
||||
*/
|
||||
public function import()
|
||||
{
|
||||
if ($this->request->isPost()) {
|
||||
$data = $this->request->post('data');
|
||||
$data_arr = json_decode($data, true);
|
||||
|
||||
$rule = [
|
||||
'pid|上级菜单' => 'require',
|
||||
'title|菜单名称' => 'require',
|
||||
'icon|菜单图标' => 'require',
|
||||
];
|
||||
foreach ($data_arr as $data_item) {
|
||||
$this->validate($data_item, $rule);
|
||||
}
|
||||
|
||||
Db::startTrans();
|
||||
try {
|
||||
$list_old_menu = SystemMenu::withTrashed()->select();
|
||||
foreach ($list_old_menu as $menu) {
|
||||
$menu->force()->delete();
|
||||
}
|
||||
|
||||
foreach ($data_arr as $data_item) {
|
||||
$menu = new SystemMenu();
|
||||
$menu->save($data_item);
|
||||
}
|
||||
Db::commit();
|
||||
} catch (\Throwable $th) {
|
||||
Db::rollback();
|
||||
$this->error('导入失败:' . $th->getMessage());
|
||||
}
|
||||
$this->success('导入成功');
|
||||
}
|
||||
|
||||
return $this->fetch();
|
||||
}
|
||||
}
|
||||
|
||||
15
extend/base/admin/view/system/menu/export.html
Normal file
15
extend/base/admin/view/system/menu/export.html
Normal file
@@ -0,0 +1,15 @@
|
||||
<div class="layuimini-container">
|
||||
<form id="app-form" class="layui-form layuimini-form">
|
||||
<div class="layui-form-item layui-row layui-col-xs12">
|
||||
<label class="layui-form-label ">数据预览</label>
|
||||
<div class="layui-input-block">
|
||||
<textarea id="data" class="layui-textarea" readonly>{$list_menu_json}</textarea>
|
||||
<div class="layui-btn-container" style="margin-top: 5px;">
|
||||
<div class="layui-btn layui-btn-sm" data-toggle="copy-text" data-clipboard-target="#data">复制</div>
|
||||
<a href="{:url('export',['download'=>1])}" class="layui-btn layui-btn-sm">下载</a>
|
||||
</div>
|
||||
<tip>可以通过复制或下载的方式导出配置,然后在另一个系统中导入。</tip>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
3
extend/base/admin/view/system/menu/export.js
Normal file
3
extend/base/admin/view/system/menu/export.js
Normal file
@@ -0,0 +1,3 @@
|
||||
$(function () {
|
||||
ua.listen();
|
||||
});
|
||||
22
extend/base/admin/view/system/menu/import.html
Normal file
22
extend/base/admin/view/system/menu/import.html
Normal file
@@ -0,0 +1,22 @@
|
||||
<div class="layuimini-container">
|
||||
<form id="app-form" class="layui-form layuimini-form">
|
||||
<div class="layui-form-item layui-row layui-col-xs12">
|
||||
<label class="layui-form-label">数据预览</label>
|
||||
<div class="layui-input-block">
|
||||
<textarea id="data" name="data" class="layui-textarea"></textarea>
|
||||
<div class="layui-btn-container" style="margin-top: 5px;">
|
||||
<div class="layui-btn layui-btn-sm" data-toggle="paste-text" data-paste-target="#data">复制</div>
|
||||
<div class="layui-btn layui-btn-sm " id="process-json-file">上传</div>
|
||||
<input id="json-file-input" type="file" accept=".json" style="display: none;"/>
|
||||
</div>
|
||||
<tip>从另一个系统中复制或下载,导出配置文件,在本页面导入或上传即可。请不要随意编辑内容,否则可能导致出错。</tip>
|
||||
<tip style="color: red;">注意:这将覆盖当前系统的配置文件,请注意导出备份。</tip>
|
||||
</div>
|
||||
</div>
|
||||
<div class="hr-line"></div>
|
||||
<div class="layui-form-item text-center">
|
||||
<button type="submit" class="layui-btn layui-btn-normal layui-btn-sm" lay-submit>确认</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary layui-btn-sm">重置</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
38
extend/base/admin/view/system/menu/import.js
Normal file
38
extend/base/admin/view/system/menu/import.js
Normal file
@@ -0,0 +1,38 @@
|
||||
$(function () {
|
||||
var fileInput = document.getElementById('json-file-input');
|
||||
fileInput.addEventListener('change', function (e) {
|
||||
var files = e.target.files;
|
||||
if (files.length > 0) {
|
||||
var file = files[0];
|
||||
var reader = new FileReader();
|
||||
reader.onload = function (e) {
|
||||
var jsonStr = e.target.result;
|
||||
// 解析json字符串,判断是否出错
|
||||
try {
|
||||
var jsonData = JSON.parse(jsonStr);
|
||||
|
||||
} catch (error) {
|
||||
layer.msg('JSON 解析出错,请检查 JSON 格式是否正确。');
|
||||
return;
|
||||
}
|
||||
$('#data').val(jsonStr);
|
||||
};
|
||||
reader.readAsText(file);
|
||||
}
|
||||
});
|
||||
$('#process-json-file').click(function () {
|
||||
|
||||
|
||||
fileInput.click();
|
||||
});
|
||||
|
||||
ua.listen(function (data) {
|
||||
return data;
|
||||
}, function (res) {
|
||||
ua.msg.success(res.msg, function () {
|
||||
var index = parent.layer.getFrameIndex(window.name);
|
||||
parent.layer.close(index);
|
||||
parent.$('[data-treetable-refresh]').trigger("click");
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -21,4 +21,6 @@
|
||||
<button class="layui-btn layui-btn-sm layuimini-btn-primary" data-treetable-refresh><i class="fa fa-refresh"></i> </button>
|
||||
<button class="layui-btn layui-btn-normal layui-btn-sm {if !auth('system.menu/add')}layui-hide{/if}" data-open="system.menu/add" data-title="添加" data-full="true"><i class="fa fa-plus"></i> 添加</button>
|
||||
<button class="layui-btn layui-btn-sm layui-btn-danger {if !auth('system.menu/del')}layui-hide{/if}" data-url="system.menu/del" data-treetable-delete="currentTableRenderId"><i class="fa fa-trash-o"></i> 删除</button>
|
||||
<button class="layui-btn layui-btn-sm {if !auth('system.menu/export')}layui-hide{/if}" data-open="system.menu/export" data-title="导出"> 导出</button>
|
||||
<button class="layui-btn layui-btn-primary layui-btn-sm {if !auth('system.menu/import')}layui-hide{/if}" data-open="system.menu/import" data-title="导入"> 导入</button>
|
||||
</script>
|
||||
|
||||
Reference in New Issue
Block a user