|
|
@@ -1,85 +1,99 @@
|
|
|
<template>
|
|
|
<div class="p-2">
|
|
|
- <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
|
|
|
- <div v-show="showSearch" class="mb-[10px]">
|
|
|
+ <el-row :gutter="20">
|
|
|
+ <!-- 平台选择 -->
|
|
|
+ <el-col :lg="4" :xs="24" style="">
|
|
|
<el-card shadow="hover">
|
|
|
- <el-form ref="queryFormRef" :model="queryParams" :inline="true">
|
|
|
- <el-form-item label="菜单名称" prop="menuName">
|
|
|
- <el-input v-model="queryParams.menuName" placeholder="请输入菜单名称" clearable @keyup.enter="handleQuery" />
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="状态" prop="status">
|
|
|
- <el-select v-model="queryParams.status" placeholder="菜单状态" clearable>
|
|
|
- <el-option v-for="dict in sys_normal_disable" :key="dict.value" :label="dict.label" :value="dict.value" />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item>
|
|
|
- <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
|
|
- <el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
|
|
- </el-form-item>
|
|
|
- </el-form>
|
|
|
+ <el-select v-model="selectedPlatform" placeholder="请选择平台" @change="handlePlatformChange" style="width: 100%">
|
|
|
+ <el-option v-for="dict in sys_platform_code" :key="dict.value" :label="dict.label" :value="dict.value" />
|
|
|
+ </el-select>
|
|
|
</el-card>
|
|
|
- </div>
|
|
|
- </transition>
|
|
|
-
|
|
|
- <el-card shadow="hover">
|
|
|
- <template #header>
|
|
|
- <el-row :gutter="10">
|
|
|
- <el-col :span="1.5">
|
|
|
- <el-button v-hasPermi="['system:menu:add']" type="primary" plain icon="Plus" @click="handleAdd()">新增</el-button>
|
|
|
- </el-col>
|
|
|
- <el-col :span="1.5">
|
|
|
- <el-button v-hasPermi="['system:menu:remove']" type="danger" plain icon="Delete" @click="handleCascadeDelete" :loading="deleteLoading">级联删除</el-button>
|
|
|
- </el-col>
|
|
|
- <right-toolbar v-model:show-search="showSearch" @query-table="getList"></right-toolbar>
|
|
|
- </el-row>
|
|
|
- </template>
|
|
|
+ </el-col>
|
|
|
+ <el-col :lg="20" :xs="24">
|
|
|
+ <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
|
|
|
+ <div v-show="showSearch" class="mb-[10px]">
|
|
|
+ <el-card shadow="hover">
|
|
|
+ <el-form ref="queryFormRef" :model="queryParams" :inline="true">
|
|
|
+ <el-form-item label="菜单名称" prop="menuName">
|
|
|
+ <el-input v-model="queryParams.menuName" placeholder="请输入菜单名称" clearable @keyup.enter="handleQuery" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="状态" prop="status">
|
|
|
+ <el-select v-model="queryParams.status" placeholder="菜单状态" clearable>
|
|
|
+ <el-option v-for="dict in sys_normal_disable" :key="dict.value" :label="dict.label" :value="dict.value" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item>
|
|
|
+ <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
|
|
+ <el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ </el-card>
|
|
|
+ </div>
|
|
|
+ </transition>
|
|
|
|
|
|
- <el-table
|
|
|
- ref="menuTableRef"
|
|
|
- v-loading="loading"
|
|
|
- :data="menuList"
|
|
|
- row-key="menuId"
|
|
|
- border
|
|
|
- :tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
|
|
|
- :default-expand-all="false"
|
|
|
- lazy
|
|
|
- :load="getChildrenList"
|
|
|
- :expand-change="expandMenuHandle"
|
|
|
- >
|
|
|
- <el-table-column prop="menuName" label="菜单名称" :show-overflow-tooltip="true" width="160"></el-table-column>
|
|
|
- <el-table-column prop="icon" label="图标" align="center" width="100">
|
|
|
- <template #default="scope">
|
|
|
- <svg-icon :icon-class="scope.row.icon" />
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="orderNum" label="排序" width="60"></el-table-column>
|
|
|
- <el-table-column prop="perms" label="权限标识" :show-overflow-tooltip="true"></el-table-column>
|
|
|
- <el-table-column prop="component" label="组件路径" :show-overflow-tooltip="true"></el-table-column>
|
|
|
- <el-table-column prop="status" label="状态" width="80">
|
|
|
- <template #default="scope">
|
|
|
- <dict-tag :options="sys_normal_disable" :value="scope.row.status" />
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column label="创建时间" align="center" prop="createTime">
|
|
|
- <template #default="scope">
|
|
|
- <span>{{ scope.row.createTime }}</span>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column fixed="right" label="操作" width="180">
|
|
|
- <template #default="scope">
|
|
|
- <el-tooltip content="修改" placement="top">
|
|
|
- <el-button v-hasPermi="['system:menu:edit']" link type="primary" icon="Edit" @click="handleUpdate(scope.row)" />
|
|
|
- </el-tooltip>
|
|
|
- <el-tooltip content="新增" placement="top">
|
|
|
- <el-button v-hasPermi="['system:menu:add']" link type="primary" icon="Plus" @click="handleAdd(scope.row)" />
|
|
|
- </el-tooltip>
|
|
|
- <el-tooltip content="删除" placement="top">
|
|
|
- <el-button v-hasPermi="['system:menu:remove']" link type="primary" icon="Delete" @click="handleDelete(scope.row)" />
|
|
|
- </el-tooltip>
|
|
|
+ <el-card shadow="hover">
|
|
|
+ <template #header>
|
|
|
+ <el-row :gutter="10">
|
|
|
+ <el-col :span="1.5">
|
|
|
+ <el-button v-hasPermi="['system:menu:add']" type="primary" plain icon="Plus" @click="handleAdd()">新增</el-button>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="1.5">
|
|
|
+ <el-button v-hasPermi="['system:menu:remove']" type="danger" plain icon="Delete" @click="handleCascadeDelete" :loading="deleteLoading"
|
|
|
+ >级联删除</el-button
|
|
|
+ >
|
|
|
+ </el-col>
|
|
|
+ <right-toolbar v-model:show-search="showSearch" @query-table="getList"></right-toolbar>
|
|
|
+ </el-row>
|
|
|
</template>
|
|
|
- </el-table-column>
|
|
|
- </el-table>
|
|
|
- </el-card>
|
|
|
+
|
|
|
+ <el-table
|
|
|
+ ref="menuTableRef"
|
|
|
+ v-loading="loading"
|
|
|
+ :data="menuList"
|
|
|
+ row-key="menuId"
|
|
|
+ border
|
|
|
+ :tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
|
|
|
+ :default-expand-all="false"
|
|
|
+ lazy
|
|
|
+ :load="getChildrenList"
|
|
|
+ :expand-change="expandMenuHandle"
|
|
|
+ >
|
|
|
+ <el-table-column prop="menuName" label="菜单名称" :show-overflow-tooltip="true" width="160"></el-table-column>
|
|
|
+ <el-table-column prop="icon" label="图标" align="center" width="100">
|
|
|
+ <template #default="scope">
|
|
|
+ <svg-icon :icon-class="scope.row.icon" />
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="orderNum" label="排序" width="60"></el-table-column>
|
|
|
+ <el-table-column prop="perms" label="权限标识" :show-overflow-tooltip="true"></el-table-column>
|
|
|
+ <el-table-column prop="component" label="组件路径" :show-overflow-tooltip="true"></el-table-column>
|
|
|
+ <el-table-column prop="status" label="状态" width="80">
|
|
|
+ <template #default="scope">
|
|
|
+ <dict-tag :options="sys_normal_disable" :value="scope.row.status" />
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="创建时间" align="center" prop="createTime">
|
|
|
+ <template #default="scope">
|
|
|
+ <span>{{ scope.row.createTime }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column fixed="right" label="操作" width="180">
|
|
|
+ <template #default="scope">
|
|
|
+ <el-tooltip content="修改" placement="top">
|
|
|
+ <el-button v-hasPermi="['system:menu:edit']" link type="primary" icon="Edit" @click="handleUpdate(scope.row)" />
|
|
|
+ </el-tooltip>
|
|
|
+ <el-tooltip content="新增" placement="top">
|
|
|
+ <el-button v-hasPermi="['system:menu:add']" link type="primary" icon="Plus" @click="handleAdd(scope.row)" />
|
|
|
+ </el-tooltip>
|
|
|
+ <el-tooltip content="删除" placement="top">
|
|
|
+ <el-button v-hasPermi="['system:menu:remove']" link type="primary" icon="Delete" @click="handleDelete(scope.row)" />
|
|
|
+ </el-tooltip>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ </el-card>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
|
|
|
<el-dialog v-model="dialog.visible" :title="dialog.title" destroy-on-close append-to-bod width="750px">
|
|
|
<el-form ref="menuFormRef" :model="form" :rules="rules" label-width="100px">
|
|
|
@@ -288,6 +302,7 @@
|
|
|
import { addMenu, cascadeDelMenu, delMenu, getMenu, listMenu, updateMenu } from '@/api/system/menu';
|
|
|
import { MenuForm, MenuQuery, MenuVO } from '@/api/system/menu/types';
|
|
|
import { MenuTypeEnum } from '@/enums/MenuTypeEnum';
|
|
|
+import { getPlatformCode } from '@/utils/platform';
|
|
|
|
|
|
interface MenuOptionsType {
|
|
|
menuId: number;
|
|
|
@@ -296,7 +311,9 @@ interface MenuOptionsType {
|
|
|
}
|
|
|
|
|
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
|
|
-const { sys_show_hide, sys_normal_disable } = toRefs<any>(proxy?.useDict('sys_show_hide', 'sys_normal_disable'));
|
|
|
+const { sys_show_hide, sys_normal_disable, sys_platform_code } = toRefs<any>(
|
|
|
+ proxy?.useDict('sys_show_hide', 'sys_normal_disable', 'sys_platform_code')
|
|
|
+);
|
|
|
|
|
|
const menuList = ref<MenuVO[]>([]);
|
|
|
const menuChildrenListMap = ref({});
|
|
|
@@ -323,13 +340,23 @@ const initFormData = {
|
|
|
isFrame: '1',
|
|
|
isCache: '0',
|
|
|
visible: '0',
|
|
|
- status: '0'
|
|
|
+ status: '0',
|
|
|
+ platformCode: ''
|
|
|
};
|
|
|
+const selectedPlatform = ref<string>(getPlatformCode());
|
|
|
+/** 平台选择变化处理 */
|
|
|
+const handlePlatformChange = (value: string) => {
|
|
|
+ queryParams.value.platformCode = value;
|
|
|
+ selectedPlatform.value = value;
|
|
|
+ handleQuery();
|
|
|
+};
|
|
|
+
|
|
|
const data = reactive<PageData<MenuForm, MenuQuery>>({
|
|
|
form: { ...initFormData },
|
|
|
queryParams: {
|
|
|
menuName: undefined,
|
|
|
- status: undefined
|
|
|
+ status: undefined,
|
|
|
+ platformCode: selectedPlatform.value
|
|
|
},
|
|
|
rules: {
|
|
|
menuName: [{ required: true, message: '菜单名称不能为空', trigger: 'blur' }],
|
|
|
@@ -461,6 +488,7 @@ const handleUpdate = async (row: MenuVO) => {
|
|
|
const submitForm = () => {
|
|
|
menuFormRef.value?.validate(async (valid: boolean) => {
|
|
|
if (valid) {
|
|
|
+ form.value.platformCode = selectedPlatform.value;
|
|
|
form.value.menuId ? await updateMenu(form.value) : await addMenu(form.value);
|
|
|
proxy?.$modal.msgSuccess('操作成功');
|
|
|
dialog.visible = false;
|