Commit 56e2f21d by YunaiV

Vue3 重构:REVIEW 菜单

parent d72101b1
...@@ -18,18 +18,13 @@ export interface MenuVO { ...@@ -18,18 +18,13 @@ export interface MenuVO {
createTime: Date createTime: Date
} }
export interface MenuPageReqVO {
name?: string
status?: number
}
// 查询菜单(精简)列表 // 查询菜单(精简)列表
export const listSimpleMenusApi = () => { export const getSimpleMenusList = () => {
return request.get({ url: '/system/menu/list-all-simple' }) return request.get({ url: '/system/menu/list-all-simple' })
} }
// 查询菜单列表 // 查询菜单列表
export const getMenuListApi = (params: MenuPageReqVO) => { export const getMenuList = (params) => {
return request.get({ url: '/system/menu/list', params }) return request.get({ url: '/system/menu/list', params })
} }
...@@ -39,16 +34,16 @@ export const getMenuApi = (id: number) => { ...@@ -39,16 +34,16 @@ export const getMenuApi = (id: number) => {
} }
// 新增菜单 // 新增菜单
export const createMenuApi = (data: MenuVO) => { export const createMenu = (data: MenuVO) => {
return request.post({ url: '/system/menu/create', data }) return request.post({ url: '/system/menu/create', data })
} }
// 修改菜单 // 修改菜单
export const updateMenuApi = (data: MenuVO) => { export const updateMenu = (data: MenuVO) => {
return request.put({ url: '/system/menu/update', data }) return request.put({ url: '/system/menu/update', data })
} }
// 删除菜单 // 删除菜单
export const deleteMenuApi = (id: number) => { export const deleteMenu = (id: number) => {
return request.delete({ url: '/system/menu/delete?id=' + id }) return request.delete({ url: '/system/menu/delete?id=' + id })
} }
...@@ -6,7 +6,7 @@ import { useForm } from '@/hooks/web/useForm' ...@@ -6,7 +6,7 @@ import { useForm } from '@/hooks/web/useForm'
import { FormSchema } from '@/types/form' import { FormSchema } from '@/types/form'
import { CodegenTableVO } from '@/api/infra/codegen/types' import { CodegenTableVO } from '@/api/infra/codegen/types'
import { getIntDictOptions } from '@/utils/dict' import { getIntDictOptions } from '@/utils/dict'
import { listSimpleMenusApi } from '@/api/system/menu' import { getSimpleMenusList } from '@/api/system/menu'
import { handleTree, defaultProps } from '@/utils/tree' import { handleTree, defaultProps } from '@/utils/tree'
import { PropType } from 'vue' import { PropType } from 'vue'
...@@ -21,7 +21,7 @@ const templateTypeOptions = getIntDictOptions(DICT_TYPE.INFRA_CODEGEN_TEMPLATE_T ...@@ -21,7 +21,7 @@ const templateTypeOptions = getIntDictOptions(DICT_TYPE.INFRA_CODEGEN_TEMPLATE_T
const sceneOptions = getIntDictOptions(DICT_TYPE.INFRA_CODEGEN_SCENE) const sceneOptions = getIntDictOptions(DICT_TYPE.INFRA_CODEGEN_SCENE)
const menuOptions = ref<any>([]) // 树形结构 const menuOptions = ref<any>([]) // 树形结构
const getTree = async () => { const getTree = async () => {
const res = await listSimpleMenusApi() const res = await getSimpleMenusList()
menuOptions.value = handleTree(res) menuOptions.value = handleTree(res)
} }
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
ref="formRef" ref="formRef"
:model="formData" :model="formData"
:rules="formRules" :rules="formRules"
label-width="80px" label-width="100px"
v-loading="formLoading" v-loading="formLoading"
> >
<el-form-item label="上级菜单"> <el-form-item label="上级菜单">
...@@ -12,16 +12,14 @@ ...@@ -12,16 +12,14 @@
node-key="id" node-key="id"
v-model="formData.parentId" v-model="formData.parentId"
:props="defaultProps" :props="defaultProps"
:data="menuOptions" :data="menuTree"
:default-expanded-keys="[0]" :default-expanded-keys="[0]"
check-strictly check-strictly
/> />
</el-form-item> </el-form-item>
<el-col :span="16"> <el-form-item label="菜单名称" prop="name">
<el-form-item label="菜单名称" prop="name"> <el-input v-model="formData.name" placeholder="请输入菜单名称" clearable />
<el-input v-model="formData.name" placeholder="请输入菜单名称" clearable /> </el-form-item>
</el-form-item>
</el-col>
<el-form-item label="菜单类型" prop="type"> <el-form-item label="菜单类型" prop="type">
<el-radio-group v-model="formData.type"> <el-radio-group v-model="formData.type">
<el-radio-button <el-radio-button
...@@ -33,124 +31,84 @@ ...@@ -33,124 +31,84 @@
</el-radio-button> </el-radio-button>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<template v-if="formData.type !== 3"> <el-form-item label="菜单图标" v-if="formData.type !== 3">
<el-form-item label="菜单图标"> <IconSelect v-model="formData.icon" clearable />
<IconSelect v-model="formData.icon" clearable /> </el-form-item>
</el-form-item> <el-form-item label="路由地址" prop="path" v-if="formData.type !== 3">
<el-col :span="16"> <template #label>
<el-form-item label="路由地址" prop="path"> <Tooltip
<template #label> titel="路由地址"
<Tooltip message="访问的路由地址,如:`user`。如需外网地址时,则以 `http(s)://` 开头"
titel="路由地址" />
message="访问的路由地址,如:`user`。如需外网地址时,则以 `http(s)://` 开头" </template>
/> <el-input v-model="formData.path" placeholder="请输入路由地址" clearable />
</template> </el-form-item>
<el-input v-model="formData.path" placeholder="请输入路由地址" clearable /> <el-form-item label="组件地址" prop="component" v-if="formData.type === 2">
</el-form-item> <el-input v-model="formData.component" placeholder="例如说:system/user/index" clearable />
</el-col> </el-form-item>
</template> <el-form-item label="组件名字" prop="componentName" v-if="formData.type === 2">
<template v-if="formData.type === 2"> <el-input v-model="formData.componentName" placeholder="例如说:SystemUser" clearable />
<el-col :span="16"> </el-form-item>
<el-form-item label="组件地址" prop="component"> <el-form-item label="权限标识" prop="permission" v-if="formData.type !== 1">
<el-input <template #label>
v-model="formData.component" <Tooltip
placeholder="例如说:system/user/index" titel="权限标识"
clearable message="Controller 方法上的权限字符,如:@PreAuthorize(`@ss.hasPermission('system:user:list')`)"
/> />
</el-form-item> </template>
</el-col> <el-input v-model="formData.permission" placeholder="请输入权限标识" clearable />
<el-col :span="16"> </el-form-item>
<el-form-item label="组件名字" prop="componentName"> <el-form-item label="显示排序" prop="sort">
<el-input v-model="formData.componentName" placeholder="例如说:SystemUser" clearable /> <el-input-number v-model="formData.sort" controls-position="right" :min="0" clearable />
</el-form-item> </el-form-item>
</el-col> <el-form-item label="菜单状态" prop="status">
</template> <el-radio-group v-model="formData.status">
<template v-if="formData.type !== 1"> <el-radio
<el-col :span="16"> v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
<el-form-item label="权限标识" prop="permission"> :key="dict.label"
<template #label> :label="dict.value"
<Tooltip >
titel="权限标识" {{ dict.label }}
message="Controller 方法上的权限字符,如:@PreAuthorize(`@ss.hasPermission('system:user:list')`)" </el-radio>
/> </el-radio-group>
</template> </el-form-item>
<el-input v-model="formData.permission" placeholder="请输入权限标识" clearable /> <el-form-item label="显示状态" prop="visible" v-if="formData.type !== 3">
</el-form-item> <template #label>
</el-col> <Tooltip titel="显示状态" message="选择隐藏时,路由将不会出现在侧边栏,但仍然可以访问" />
</template> </template>
<el-col :span="16"> <el-radio-group v-model="formData.visible">
<el-form-item label="显示排序" prop="sort"> <el-radio border key="true" :label="true">显示</el-radio>
<el-input-number v-model="formData.sort" controls-position="right" :min="0" clearable /> <el-radio border key="false" :label="false">隐藏</el-radio>
</el-form-item> </el-radio-group>
</el-col> </el-form-item>
<el-col :span="16"> <el-form-item label="总是显示" prop="alwaysShow" v-if="formData.type !== 3">
<el-form-item label="菜单状态" prop="status"> <template #label>
<el-radio-group v-model="formData.status"> <Tooltip
<el-radio titel="总是显示"
border message="选择不是时,当该菜单只有一个子菜单时,不展示自己,直接展示子菜单"
v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)" />
:key="dict.label" </template>
:label="dict.value" <el-radio-group v-model="formData.alwaysShow">
> <el-radio border key="true" :label="true">总是</el-radio>
{{ dict.label }} <el-radio border key="false" :label="false">不是</el-radio>
</el-radio> </el-radio-group>
</el-radio-group> </el-form-item>
</el-form-item> <el-form-item label="缓存状态" prop="keepAlive" v-if="formData.type === 2">
</el-col> <template #label>
<template v-if="formData.type !== 3"> <Tooltip
<el-col :span="16"> titel="缓存状态"
<el-form-item label="显示状态" prop="visible"> message="选择缓存时,则会被 `keep-alive` 缓存,必须填写「组件名称」字段"
<template #label> />
<Tooltip </template>
titel="显示状态" <el-radio-group v-model="formData.keepAlive">
message="选择隐藏时,路由将不会出现在侧边栏,但仍然可以访问" <el-radio border key="true" :label="true">缓存</el-radio>
/> <el-radio border key="false" :label="false">不缓存</el-radio>
</template> </el-radio-group>
<el-radio-group v-model="formData.visible"> </el-form-item>
<el-radio border key="true" :label="true">显示</el-radio>
<el-radio border key="false" :label="false">隐藏</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</template>
<template v-if="formData.type !== 3">
<el-col :span="16">
<el-form-item label="总是显示" prop="alwaysShow">
<template #label>
<Tooltip
titel="总是显示"
message="选择不是时,当该菜单只有一个子菜单时,不展示自己,直接展示子菜单"
/>
</template>
<el-radio-group v-model="formData.alwaysShow">
<el-radio border key="true" :label="true">总是</el-radio>
<el-radio border key="false" :label="false">不是</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</template>
<template v-if="formData.type === 2">
<el-col :span="16">
<el-form-item label="缓存状态" prop="keepAlive">
<template #label>
<Tooltip
titel="缓存状态"
message="选择缓存时,则会被 `keep-alive` 缓存,必须填写「组件名称」字段"
/>
</template>
<el-radio-group v-model="formData.keepAlive">
<el-radio border key="true" :label="true">缓存</el-radio>
<el-radio border key="false" :label="false">不缓存</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</template>
</el-form> </el-form>
<template #footer> <template #footer>
<div class="dialog-footer"> <el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button> <el-button @click="modelVisible = false">取 消</el-button>
<el-button @click="modelVisible = false">取 消</el-button>
</div>
</template> </template>
</Dialog> </Dialog>
</template> </template>
...@@ -173,7 +131,7 @@ const formData = ref({ ...@@ -173,7 +131,7 @@ const formData = ref({
name: '', name: '',
permission: '', permission: '',
type: SystemMenuTypeEnum.DIR, type: SystemMenuTypeEnum.DIR,
sort: 1, sort: Number(undefined),
parentId: 0, parentId: 0,
path: '', path: '',
icon: '', icon: '',
...@@ -182,10 +140,8 @@ const formData = ref({ ...@@ -182,10 +140,8 @@ const formData = ref({
status: CommonStatusEnum.ENABLE, status: CommonStatusEnum.ENABLE,
visible: true, visible: true,
keepAlive: true, keepAlive: true,
alwaysShow: true, alwaysShow: true
createTime: new Date()
}) })
const formRules = reactive({ const formRules = reactive({
name: [{ required: true, message: '菜单名称不能为空', trigger: 'blur' }], name: [{ required: true, message: '菜单名称不能为空', trigger: 'blur' }],
sort: [{ required: true, message: '菜单顺序不能为空', trigger: 'blur' }], sort: [{ required: true, message: '菜单顺序不能为空', trigger: 'blur' }],
...@@ -195,26 +151,27 @@ const formRules = reactive({ ...@@ -195,26 +151,27 @@ const formRules = reactive({
const formRef = ref() // 表单 Ref const formRef = ref() // 表单 Ref
/** 打开弹窗 */ /** 打开弹窗 */
const openModal = async (type: string, id?: number) => { const open = async (type: string, id?: number, parentId?: number) => {
modelVisible.value = true modelVisible.value = true
modelTitle.value = t('action.' + type) modelTitle.value = t('action.' + type)
formType.value = type formType.value = type
resetForm() resetForm()
await getTree() if (parentId) {
formData.value.parentId = parentId
}
// 修改时,设置数据 // 修改时,设置数据
if (id) { if (id) {
formLoading.value = true formLoading.value = true
try { try {
formData.value = await MenuApi.getMenuApi(id) formData.value = await MenuApi.getMenuApi(id)
// TODO 芋艿:这块要优化下,部分字段未重置,无法修改
// formData.value.componentName = res.componentName || ''
// formData.value.alwaysShow = res.alwaysShow !== undefined ? res.alwaysShow : true
} finally { } finally {
formLoading.value = false formLoading.value = false
} }
} }
// 获得菜单列表
await getTree()
} }
defineExpose({ openModal }) // 提供 openModal 方法,用于打开弹窗 defineExpose({ open }) // 提供 open 方法,用于打开弹窗
/** 提交表单 */ /** 提交表单 */
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调 const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
...@@ -240,12 +197,12 @@ const submitForm = async () => { ...@@ -240,12 +197,12 @@ const submitForm = async () => {
} }
} }
} }
const data = formData.value const data = formData.value as unknown as MenuApi.MenuVO
if (formType.value === 'create') { if (formType.value === 'create') {
await MenuApi.createMenuApi(data) await MenuApi.createMenu(data)
message.success(t('common.createSuccess')) message.success(t('common.createSuccess'))
} else { } else {
await MenuApi.updateMenuApi(data) await MenuApi.updateMenu(data)
message.success(t('common.updateSuccess')) message.success(t('common.updateSuccess'))
} }
modelVisible.value = false modelVisible.value = false
...@@ -253,19 +210,19 @@ const submitForm = async () => { ...@@ -253,19 +210,19 @@ const submitForm = async () => {
emit('success') emit('success')
} finally { } finally {
formLoading.value = false formLoading.value = false
// 清空,从而触发刷新
wsCache.delete(CACHE_KEY.ROLE_ROUTERS) wsCache.delete(CACHE_KEY.ROLE_ROUTERS)
} }
} }
// ========== 下拉框[上级菜单] ========== /** 获取下拉框[上级菜单]的数据 */
const menuOptions = ref<any[]>([]) // 树形结构 const menuTree = ref<Tree[]>([]) // 树形结构
// 获取下拉框[上级菜单]的数据
const getTree = async () => { const getTree = async () => {
menuOptions.value = [] menuTree.value = []
const res = await MenuApi.listSimpleMenusApi() const res = await MenuApi.getSimpleMenusList()
let menu: Tree = { id: 0, name: '主类目', children: [] } let menu: Tree = { id: 0, name: '主类目', children: [] }
menu.children = handleTree(res) menu.children = handleTree(res)
menuOptions.value.push(menu) menuTree.value.push(menu)
} }
/** 重置表单 */ /** 重置表单 */
...@@ -275,7 +232,7 @@ const resetForm = () => { ...@@ -275,7 +232,7 @@ const resetForm = () => {
name: '', name: '',
permission: '', permission: '',
type: SystemMenuTypeEnum.DIR, type: SystemMenuTypeEnum.DIR,
sort: 1, sort: Number(undefined),
parentId: 0, parentId: 0,
path: '', path: '',
icon: '', icon: '',
...@@ -284,13 +241,12 @@ const resetForm = () => { ...@@ -284,13 +241,12 @@ const resetForm = () => {
status: CommonStatusEnum.ENABLE, status: CommonStatusEnum.ENABLE,
visible: true, visible: true,
keepAlive: true, keepAlive: true,
alwaysShow: true, alwaysShow: true
createTime: new Date()
} }
formRef.value?.resetFields() formRef.value?.resetFields()
} }
// 判断 path 是不是外部的 HTTP 等链接 /** 判断 path 是不是外部的 HTTP 等链接 */
const isExternal = (path: string) => { const isExternal = (path: string) => {
return /^(https?:|mailto:|tel:)/.test(path) return /^(https?:|mailto:|tel:)/.test(path)
} }
......
<template> <template>
<!-- 搜索工作栏 -->
<ContentWrap> <ContentWrap>
<!-- 搜索工作栏 --> <el-form
<el-form :model="queryParams" ref="queryFormRef" :inline="true"> class="-mb-15px"
:model="queryParams"
ref="queryFormRef"
:inline="true"
label-width="68px"
>
<el-form-item label="菜单名称" prop="name"> <el-form-item label="菜单名称" prop="name">
<el-input <el-input
v-model="queryParams.name" v-model="queryParams.name"
placeholder="请输入菜单名称" placeholder="请输入菜单名称"
clearable clearable
@keyup.enter="handleQuery" @keyup.enter="handleQuery"
class="!w-240px"
/> />
</el-form-item> </el-form-item>
<el-form-item label="状态" prop="status"> <el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="菜单状态" clearable> <el-select
v-model="queryParams.status"
placeholder="请选择菜单状态"
clearable
class="!w-240px"
>
<el-option <el-option
v-for="dict in getDictOptions(DICT_TYPE.COMMON_STATUS)" v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
:key="parseInt(dict.value)" :key="dict.value"
:label="dict.label" :label="dict.label"
:value="parseInt(dict.value)" :value="dict.value"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button> <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button> <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
<el-button type="primary" @click="openModal('create')" v-hasPermi="['system:menu:create']"> <el-button
type="primary"
plain
@click="openForm('create')"
v-hasPermi="['system:menu:create']"
>
<Icon icon="ep:plus" class="mr-5px" /> 新增 <Icon icon="ep:plus" class="mr-5px" /> 新增
</el-button> </el-button>
<el-button type="danger" plain @click="toggleExpandAll">
<Icon icon="ep:sort" class="mr-5px" /> 展开/折叠
</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</ContentWrap>
<el-row :gutter="10" class="mb8"> <!-- 列表 -->
<el-col :span="1.5"> <ContentWrap>
<el-button type="info" plain icon="el-icon-sort" @click="toggleExpandAll"
>展开/折叠</el-button
>
</el-col>
</el-row>
<el-table <el-table
v-loading="loading" v-loading="loading"
:data="list" :data="list"
v-if="refreshTable"
row-key="id" row-key="id"
v-if="refreshTable"
:default-expand-all="isExpandAll" :default-expand-all="isExpandAll"
:tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
> >
<el-table-column prop="name" label="菜单名称" :show-overflow-tooltip="true" width="250" /> <el-table-column prop="name" label="菜单名称" :show-overflow-tooltip="true" width="250" />
<el-table-column prop="icon" label="图标" align="center" width="100"> <el-table-column prop="icon" label="图标" align="center" width="100">
...@@ -60,62 +74,63 @@ ...@@ -60,62 +74,63 @@
<dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status" /> <dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center">
<template #default="scope"> <template #default="scope">
<el-button <el-button
link link
type="primary" type="primary"
@click="openModal('update', scope.row.id)" @click="openForm('update', scope.row.id)"
v-hasPermi="['system:menu:update']" v-hasPermi="['system:menu:update']"
>修改</el-button
> >
修改
</el-button>
<el-button <el-button
link link
type="primary" type="primary"
@click="openModal('create', scope.row.id)" @click="openForm('create', undefined, scope.row.id)"
v-hasPermi="['system:menu:create']" v-hasPermi="['system:menu:create']"
>新增</el-button
> >
新增
</el-button>
<el-button <el-button
link link
type="primary" type="danger"
@click="handleDelete(scope.row.id)" @click="handleDelete(scope.row.id)"
v-hasPermi="['system:menu:delete']" v-hasPermi="['system:menu:delete']"
>删除</el-button
> >
删除
</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</ContentWrap> </ContentWrap>
<!-- 表单弹窗:添加/修改 --> <!-- 表单弹窗:添加/修改 -->
<menu-form ref="modalRef" @success="getList" /> <MenuForm ref="formRef" @success="getList" />
</template> </template>
<script setup lang="ts" name="Menu"> <script setup lang="ts" name="Menu">
// 业务相关的 import import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
import { DICT_TYPE, getDictOptions } from '@/utils/dict'
import { handleTree } from '@/utils/tree' import { handleTree } from '@/utils/tree'
import * as MenuApi from '@/api/system/menu' import * as MenuApi from '@/api/system/menu'
import MenuForm from './form.vue' import MenuForm from './MenuForm.vue'
const { t } = useI18n() // 国际化 const { t } = useI18n() // 国际化
const message = useMessage() // 消息弹窗 const message = useMessage() // 消息弹窗
const loading = ref(true) // 列表的加载中 const loading = ref(true) // 列表的加载中
const list = ref<any>([]) // 列表的数据 const list = ref<any>([]) // 列表的数据
const isExpandAll = ref(false) // 是否展开,默认全部折叠
const refreshTable = ref(true) // 重新渲染表格状态
const queryParams = reactive({ const queryParams = reactive({
name: undefined, name: undefined,
status: undefined status: undefined
}) })
const queryFormRef = ref() // 搜索的表单 const queryFormRef = ref() // 搜索的表单
const isExpandAll = ref(false) // 是否展开,默认全部折叠
const refreshTable = ref(true) // 重新渲染表格状态
/** 查询参数列表 */ /** 查询参数列表 */
const getList = async () => { const getList = async () => {
loading.value = true loading.value = true
try { try {
const data = await MenuApi.getMenuListApi(queryParams) const data = await MenuApi.getMenuList(queryParams)
list.value = handleTree(data) list.value = handleTree(data)
} finally { } finally {
loading.value = false loading.value = false
...@@ -134,9 +149,9 @@ const resetQuery = () => { ...@@ -134,9 +149,9 @@ const resetQuery = () => {
} }
/** 添加/修改操作 */ /** 添加/修改操作 */
const modalRef = ref() const formRef = ref()
const openModal = async (type: string, id?: number) => { const openForm = (type: string, id?: number, parentId?: number) => {
modalRef.value.openModal(type, id) formRef.value.open(type, id, parentId)
} }
/** 展开/折叠操作 */ /** 展开/折叠操作 */
...@@ -154,7 +169,7 @@ const handleDelete = async (id: number) => { ...@@ -154,7 +169,7 @@ const handleDelete = async (id: number) => {
// 删除的二次确认 // 删除的二次确认
await message.delConfirm() await message.delConfirm()
// 发起删除 // 发起删除
await MenuApi.deleteMenuApi(id) await MenuApi.deleteMenu(id)
message.success(t('common.delSuccess')) message.success(t('common.delSuccess'))
// 刷新列表 // 刷新列表
await getList() await getList()
......
...@@ -164,7 +164,7 @@ import { SystemDataScopeEnum } from '@/utils/constants' ...@@ -164,7 +164,7 @@ import { SystemDataScopeEnum } from '@/utils/constants'
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict' import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
import { rules, allSchemas } from './role.data' import { rules, allSchemas } from './role.data'
import * as RoleApi from '@/api/system/role' import * as RoleApi from '@/api/system/role'
import { listSimpleMenusApi } from '@/api/system/menu' import { getSimpleMenusList } from '@/api/system/menu'
import { getSimpleDeptList } from '@/api/system/dept' import { getSimpleDeptList } from '@/api/system/dept'
import * as PermissionApi from '@/api/system/permission' import * as PermissionApi from '@/api/system/permission'
...@@ -269,7 +269,7 @@ const handleScope = async (type: string, row: RoleApi.RoleVO) => { ...@@ -269,7 +269,7 @@ const handleScope = async (type: string, row: RoleApi.RoleVO) => {
actionScopeType.value = type actionScopeType.value = type
dialogScopeVisible.value = true dialogScopeVisible.value = true
if (type === 'menu') { if (type === 'menu') {
const menuRes = await listSimpleMenusApi() const menuRes = await getSimpleMenusList()
treeOptions.value = handleTree(menuRes) treeOptions.value = handleTree(menuRes)
const role = await PermissionApi.listRoleMenusApi(row.id) const role = await PermissionApi.listRoleMenusApi(row.id)
if (role) { if (role) {
......
...@@ -71,7 +71,7 @@ import type { ElTree } from 'element-plus' ...@@ -71,7 +71,7 @@ import type { ElTree } from 'element-plus'
// 业务相关的 import // 业务相关的 import
import { rules, allSchemas } from './tenantPackage.data' import { rules, allSchemas } from './tenantPackage.data'
import * as TenantPackageApi from '@/api/system/tenantPackage' import * as TenantPackageApi from '@/api/system/tenantPackage'
import { listSimpleMenusApi } from '@/api/system/menu' import { getSimpleMenusList } from '@/api/system/menu'
const { t } = useI18n() // 国际化 const { t } = useI18n() // 国际化
const message = useMessage() // 消息弹窗 const message = useMessage() // 消息弹窗
...@@ -102,7 +102,7 @@ const validateCategory = (rule: any, value: any, callback: any) => { ...@@ -102,7 +102,7 @@ const validateCategory = (rule: any, value: any, callback: any) => {
rules.menuIds = [{ required: true, validator: validateCategory, trigger: 'blur' }] rules.menuIds = [{ required: true, validator: validateCategory, trigger: 'blur' }]
const getTree = async () => { const getTree = async () => {
const res = await listSimpleMenusApi() const res = await getSimpleMenusList()
menuOptions.value = handleTree(res) menuOptions.value = handleTree(res)
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment