提交 | 用户 | 时间
820397 1 <template>
H 2   <!-- 搜索 -->
3   <ContentWrap>
4     <el-form
5       class="-mb-15px"
6       :model="queryParams"
7       ref="queryFormRef"
8       :inline="true"
9       label-width="68px"
10     >
11       <el-form-item label="参数名称" prop="name">
12         <el-input
13           v-model="queryParams.name"
14           placeholder="请输入参数名称"
15           clearable
16           @keyup.enter="handleQuery"
17           class="!w-240px"
18         />
19       </el-form-item>
20       <el-form-item label="参数键名" prop="key">
21         <el-input
22           v-model="queryParams.key"
23           placeholder="请输入参数键名"
24           clearable
25           @keyup.enter="handleQuery"
26           class="!w-240px"
27         />
28       </el-form-item>
29       <el-form-item label="系统内置" prop="type">
30         <el-select
31           v-model="queryParams.type"
32           placeholder="请选择系统内置"
33           clearable
34           class="!w-240px"
35         >
36           <el-option
37             v-for="dict in getIntDictOptions(DICT_TYPE.INFRA_CONFIG_TYPE)"
38             :key="dict.value"
39             :label="dict.label"
40             :value="dict.value"
41           />
42         </el-select>
43       </el-form-item>
44       <el-form-item label="创建时间" prop="createTime">
45         <el-date-picker
46           v-model="queryParams.createTime"
47           value-format="YYYY-MM-DD HH:mm:ss"
48           type="daterange"
49           start-placeholder="开始日期"
50           end-placeholder="结束日期"
51           :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
52           class="!w-240px"
53         />
54       </el-form-item>
55       <el-form-item>
56         <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
57         <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
58         <el-button
59           type="primary"
60           plain
61           @click="openForm('create')"
62           v-hasPermi="['infra:config:create']"
63         >
64           <Icon icon="ep:plus" class="mr-5px" /> 新增
65         </el-button>
66         <el-button
67           type="success"
68           plain
69           @click="handleExport"
70           :loading="exportLoading"
71           v-hasPermi="['infra:config:export']"
72         >
73           <Icon icon="ep:download" class="mr-5px" /> 导出
74         </el-button>
75       </el-form-item>
76     </el-form>
77   </ContentWrap>
78
79   <!-- 列表 -->
80   <ContentWrap>
81     <el-table v-loading="loading" :data="list">
9259c2 82       <el-table-column label="参数主键" align="center" prop="id" width="80"/>
H 83       <el-table-column label="参数分类" align="center" prop="category" width="80"/>
820397 84       <el-table-column label="参数名称" align="center" prop="name" :show-overflow-tooltip="true" />
9259c2 85       <el-table-column label="参数键名" align="center" prop="key" :show-overflow-tooltip="true"/>
H 86       <el-table-column label="参数键值" align="center" prop="value" width="350"/>
87       <el-table-column label="是否可见" align="center" prop="visible" width="80">
820397 88         <template #default="scope">
H 89           <dict-tag :type="DICT_TYPE.INFRA_BOOLEAN_STRING" :value="scope.row.visible" />
90         </template>
91       </el-table-column>
9259c2 92       <el-table-column label="系统内置" align="center" prop="type" width="80">
820397 93         <template #default="scope">
H 94           <dict-tag :type="DICT_TYPE.INFRA_CONFIG_TYPE" :value="scope.row.type" />
95         </template>
96       </el-table-column>
97       <el-table-column label="备注" align="center" prop="remark" :show-overflow-tooltip="true" />
98       <el-table-column
99         label="创建时间"
100         align="center"
101         prop="createTime"
102         width="180"
103         :formatter="dateFormatter"
104       />
9259c2 105       <el-table-column label="操作" align="center" width="120">
820397 106         <template #default="scope">
H 107           <el-button
108             link
109             type="primary"
110             @click="openForm('update', scope.row.id)"
111             v-hasPermi="['infra:config:update']"
112           >
113             编辑
114           </el-button>
115           <el-button
116             link
117             type="danger"
118             @click="handleDelete(scope.row.id)"
119             v-hasPermi="['infra:config:delete']"
120           >
121             删除
122           </el-button>
123         </template>
124       </el-table-column>
125     </el-table>
126     <!-- 分页 -->
127     <Pagination
128       :total="total"
129       v-model:page="queryParams.pageNo"
130       v-model:limit="queryParams.pageSize"
131       @pagination="getList"
132     />
133   </ContentWrap>
134
135   <!-- 表单弹窗:添加/修改 -->
136   <ConfigForm ref="formRef" @success="getList" />
137 </template>
138 <script lang="ts" setup>
139 import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
140 import { dateFormatter } from '@/utils/formatTime'
141 import download from '@/utils/download'
142 import * as ConfigApi from '@/api/infra/config'
143 import ConfigForm from './ConfigForm.vue'
144
145 defineOptions({ name: 'InfraConfig' })
146
147 const message = useMessage() // 消息弹窗
148 const { t } = useI18n() // 国际化
149
150 const loading = ref(true) // 列表的加载中
151 const total = ref(0) // 列表的总页数
152 const list = ref([]) // 列表的数据
153 const queryParams = reactive({
154   pageNo: 1,
155   pageSize: 10,
156   name: undefined,
157   key: undefined,
158   type: undefined,
159   createTime: []
160 })
161 const queryFormRef = ref() // 搜索的表单
162 const exportLoading = ref(false) // 导出的加载中
163
164 /** 查询列表 */
165 const getList = async () => {
166   loading.value = true
167   try {
168     const data = await ConfigApi.getConfigPage(queryParams)
169     list.value = data.list
170     total.value = data.total
171   } finally {
172     loading.value = false
173   }
174 }
175
176 /** 搜索按钮操作 */
177 const handleQuery = () => {
178   queryParams.pageNo = 1
179   getList()
180 }
181
182 /** 重置按钮操作 */
183 const resetQuery = () => {
184   queryFormRef.value.resetFields()
185   handleQuery()
186 }
187
188 /** 添加/修改操作 */
189 const formRef = ref()
190 const openForm = (type: string, id?: number) => {
191   formRef.value.open(type, id)
192 }
193
194 /** 删除按钮操作 */
195 const handleDelete = async (id: number) => {
196   try {
197     // 删除的二次确认
198     await message.delConfirm()
199     // 发起删除
200     await ConfigApi.deleteConfig(id)
201     message.success(t('common.delSuccess'))
202     // 刷新列表
203     await getList()
204   } catch {}
205 }
206
207 /** 导出按钮操作 */
208 const handleExport = async () => {
209   try {
210     // 导出的二次确认
211     await message.exportConfirm()
212     // 发起导出
213     exportLoading.value = true
214     const data = await ConfigApi.exportConfig(queryParams)
215     download.excel(data, '参数配置.xls')
216   } catch {
217   } finally {
218     exportLoading.value = false
219   }
220 }
221
222 /** 初始化 **/
223 onMounted(() => {
224   getList()
225 })
226 </script>