dengzedong
2024-11-06 0c184a7a974f83fae30d925a3b3ed30dcdb7f8d2
提交 | 用户 | 时间
afc4d5 1 <template>
D 2   <el-drawer
3     v-model="drawer"
4     size="40%"
5     title="分组列表"
6     :direction="direction"
7     :before-close="handleClose"
8   >
9     <!-- 搜索工作栏 -->
10     <ContentWrap>
11       <el-form
12         class="-mb-15px"
13         :model="queryParams"
14         ref="queryFormRef"
15         :inline="true"
16         label-width="68px"
17       >
18         <el-form-item label="参数名称" prop="paramName">
19           <el-input
20             v-model="queryParams.paramName"
0c184a 21             placeholder="请输入参数名称"
afc4d5 22             clearable
D 23             class="!w-240px"
24           />
25         </el-form-item>
26 <!--        <el-form-item label="参数编码" prop="paramCode">-->
27 <!--          <el-input-->
28 <!--            v-model="queryParams.paramCode"-->
29 <!--            placeholder="请输入"-->
30 <!--            clearable-->
31 <!--            class="!w-240px"-->
32 <!--          />-->
33 <!--        </el-form-item>-->
34         <el-form-item>
35           <el-button @click="handleQuery">
36             <Icon icon="ep:search" class="mr-5px"/>
37             搜索
38           </el-button>
39           <el-button @click="resetQuery">
40             <Icon icon="ep:refresh" class="mr-5px"/>
41             重置
42           </el-button>
43           <el-button
44             type="primary"
45             plain
46             @click="openForm('create')"
47           >
48             <Icon icon="ep:plus" class="mr-5px" />
49             新增
50           </el-button>
51
52         </el-form-item>
53       </el-form>
54     </ContentWrap>
55
56     <!-- 列表 -->
57     <ContentWrap>
58       <el-table
59         v-loading="loading"
60         :data="list"
61         row-key="id"
62       >
63         <el-table-column prop="paramName" label="参数名称"/>
64         <el-table-column prop="paramCode" label="参数编码"/>
65         <el-table-column prop="paramValue" label="参数值"/>
66         <el-table-column label="操作" align="center" width="150px">
67           <template #default="scope">
68             <div class="flex items-center justify-center">
69               <el-button
70                 link
71                 type="primary"
72                 @click="openForm('update', scope.row.id)"
73               >
74                 编辑
75               </el-button>
76               <el-button link type="danger" @click="handleDelete(scope.row.id)">
77                 删除
78               </el-button>
79             </div>
80           </template>
81         </el-table-column>
82       </el-table>
83       <!-- 分页 -->
84       <Pagination
85         v-model:limit="queryParams.limit"
86         v-model:page="queryParams.page"
87         :total="total"
88         @pagination="getList"
89       />
90     </ContentWrap>
91
92     <!-- 表单弹窗:添加/修改 -->
93     <ChartParamForm ref="formRef" @success="getList" />
94   </el-drawer>
95 </template>
96 <script lang="ts" setup>
97 import {dateFormatter} from '@/utils/formatTime'
98 import * as ChartParamApi from '@/api/model/mpk/chartParam'
99 import ChartParamForm from './ChartParamForm.vue'
100
101 import type {DrawerProps} from "element-plus";
102
103 defineOptions({name: 'ChartParam'})
104
105 const message = useMessage() // 消息弹窗
106 const {t} = useI18n() // 国际化
107
108 const drawer = ref(false)
109 const direction = ref<DrawerProps['direction']>('rtl')
110 const loading = ref(true) // 列表的加载中
111 const total = ref(0) // 列表的总页数
112 const list = ref([]) // 字典表格数据
113 const queryParams = reactive({
114   page: 1,
115   limit: 10,
116   chartId: undefined,
117   paramName: undefined,
118   paramCode: undefined,
119 })
120 const queryFormRef = ref() // 搜索的表单
121
122 const getList = async () => {
123   loading.value = true
124   try {
125     const data = await ChartParamApi.getPage(queryParams)
126     list.value = data.list
127     total.value = data.total
128   } finally {
129     loading.value = false
130   }
131 }
132
133 /** 搜索按钮操作 */
134 const handleQuery = () => {
135   getList()
136 }
137
138 /** 重置按钮操作 */
139 const resetQuery = () => {
140   queryFormRef.value.resetFields()
141   handleQuery()
142 }
143
144 /** 添加/修改操作 */
145 const formRef = ref()
146 const openForm = (type: string, id?: string) => {
147   formRef.value.open(type, id, queryParams.chartId)
148 }
149
150 /** 删除按钮操作 */
151 const handleDelete = async (id: string) => {
152   try {
153     // 删除的二次确认
154     await message.delConfirm()
155     // 发起删除
156     await ChartParamApi.del(id)
157     message.success(t('common.delSuccess'))
158     // 刷新列表
159     await getList()
160   } catch {
161   }
162 }
163
164 /** 打开弹窗 */
165 const open = async (chartId?: string) => {
166   resetForm()
167   drawer.value = true
168   queryParams.chartId = chartId
169   if (chartId) {
170     getList()
171   }
172 }
173 defineExpose({open}) // 提供 open 方法,用于打开弹窗
174
175 /** 重置表单 */
176 const resetForm = () => {
177   queryParams.chartId = ''
178   queryParams.name = ''
179 }
180
181 const handleClose = (done: () => void) => {
182   drawer.value = false
183 }
184 </script>