dengzedong
2024-11-28 5c475d3ac8ee98713e0f0962dd9464daccfb9eb1
提交 | 用户 | 时间
aff5c9 1 <template>
2   <!-- 搜索工作栏 -->
3   <ContentWrap>
4     <el-form
5       class="-mb-15px"
6       :model="queryParams"
7       ref="queryFormRef"
8       :inline="true"
9       label-width="68px"
10     >
1c5af8 11       <el-form-item label="菜单名称" prop="name">
aff5c9 12         <el-input
1c5af8 13           v-model="queryParams.name"
aff5c9 14           placeholder="请输入名称"
15           clearable
16           class="!w-240px"
17         />
18       </el-form-item>
19       <el-form-item>
20         <el-button @click="handleQuery">
21           <Icon icon="ep:search" class="mr-5px"/>
22           搜索
23         </el-button>
24         <el-button @click="resetQuery">
25           <Icon icon="ep:refresh" class="mr-5px"/>
26           重置
27         </el-button>
28         <el-button
29           type="primary"
30           plain
31           @click="openForm('create')"
32           v-hasPermi="['mpk:menu:create']"
33         >
34           <Icon icon="ep:plus" class="mr-5px" />
35           新增
36         </el-button>
37
38       </el-form-item>
39     </el-form>
40   </ContentWrap>
41
42   <!-- 列表 -->
43   <ContentWrap>
44     <el-table
45       v-loading="loading"
46       :data="list"
47       row-key="id"
48     >
1c5af8 49       <el-table-column prop="name" label="菜单名称"/>
aff5c9 50       <el-table-column prop="sort" label="排序"/>
51       <el-table-column label="操作" align="center" width="200px">
52         <template #default="scope">
53           <div class="flex items-center justify-center">
54             <el-button
55               link
56               type="primary"
57               @click="openForm('update', scope.row.id)"
58               v-hasPermi="['mpk:menu:update']"
59             >
60               编辑
61             </el-button>
62             <el-button
63               link
64               type="primary"
65               @click="openGroupList(scope.row.id)"
66               v-hasPermi="['mpk:menu:update']"
67             >
68               分组
69             </el-button>
70             <el-button link type="danger" @click="handleDelete(scope.row.id)" v-hasPermi="['mpk:menu:delete']">
71               <Icon icon="ep:delete"/>删除
72             </el-button>
73           </div>
74         </template>
75       </el-table-column>
76     </el-table>
77   </ContentWrap>
78
79   <!-- 表单弹窗:添加/修改 -->
80   <MenuForm ref="formRef" @success="getList" />
81
82   <!-- 分组列表 -->
83   <GroupList ref="listRef" />
84
85 </template>
86 <script lang="ts" setup>
87 import {dateFormatter} from '@/utils/formatTime'
88 import * as MpkMenuApi from '@/api/model/mpk/menu'
89 import MenuForm from './MenuForm.vue'
90 import GroupList from './group/index.vue'
91
92 defineOptions({name: 'MpkMenu'})
93
94 const message = useMessage() // 消息弹窗
95 const {t} = useI18n() // 国际化
96
97 const loading = ref(true) // 列表的加载中
98 const list = ref([]) // 字典表格数据
99 const queryParams = reactive({
100   name: ''
101 })
102 const queryFormRef = ref() // 搜索的表单
103
104 const getList = async () => {
105   loading.value = true
106   try {
107     const data = await MpkMenuApi.getList(queryParams)
1c5af8 108     list.value = data
aff5c9 109   } finally {
110     loading.value = false
111   }
112 }
113
114 /** 搜索按钮操作 */
115 const handleQuery = () => {
116   getList()
117 }
118
119 /** 重置按钮操作 */
120 const resetQuery = () => {
121   queryFormRef.value.resetFields()
122   handleQuery()
123 }
124
125 /** 添加/修改操作 */
126 const formRef = ref()
127 const openForm = (type: string, id?: string) => {
128   formRef.value.open(type, id)
129 }
130
131 /** 删除按钮操作 */
132 const handleDelete = async (id: string) => {
133   try {
134     // 删除的二次确认
135     await message.delConfirm()
136     // 发起删除
137     await MpkMenuApi.deleteMenu(id)
138     message.success(t('common.delSuccess'))
139     // 刷新列表
140     await getList()
141   } catch {
142   }
143 }
144
145 /** List操作 */
146 const listRef = ref()
147 const openGroupList = (id?: string) => {
148   listRef.value.open(id)
149 }
150
151 /** 初始化 **/
152 onMounted(async () => {
153   await getList()
154 })
155 </script>