houzhongjian
2024-10-18 d916dfba2efa2d9359f5b432350a15e5ed1a0af4
提交 | 用户 | 时间
24d32b 1 <template>
2   <el-drawer
3     v-model="drawer"
4     size="50%"
5     title="Kio Tag"
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="Tag名称" prop="tagName">
19           <el-input
20             v-model="queryParams.tagName"
21             placeholder="请输入Tag名称"
22             clearable
23             @keyup.enter="handleQuery"
24             class="!w-240px"
25           />
26         </el-form-item>
27         <el-form-item>
28           <el-button @click="handleQuery">
29             <Icon icon="ep:search" class="mr-5px" />
30             搜索
31           </el-button>
32           <el-button @click="resetQuery">
33             <Icon icon="ep:refresh" class="mr-5px" />
34             重置
35           </el-button>
36           <el-button
37             type="primary"
38             plain
39             @click="openForm('create')"
40             v-hasPermi="['data:channel-kio:create']"
41           >
42             <Icon icon="ep:plus" class="mr-5px" />
43             新增
44           </el-button>
45         </el-form-item>
46       </el-form>
47     </ContentWrap>
48     <!-- 列表 -->
49     <ContentWrap>
50       <el-table v-loading="loading" :data="list">
51         <el-table-column
52           prop="tagName"
53           label="Tag名称"
54           header-align="center"
55           align="left"
56           min-width="150"
57         />
58         <el-table-column
59           prop="tagDesc"
60           label="Tag描述"
61           header-align="center"
62           align="left"
63           min-width="150"
64         />
65         <el-table-column
66           prop="dataType"
67           label="数据类型"
68           header-align="center"
69           align="center"
70         />
71         <el-table-column
72           prop="enabled"
73           label="是否启用"
74           header-align="center"
75           align="center"
76         >
77           <template #default="scope">
78             <el-tag v-if="scope.row.enabled === true" size="small">是</el-tag>
79             <el-tag v-else size="small" type="danger">否</el-tag>
80           </template>
81         </el-table-column>
82         <el-table-column label="操作" align="center" min-width="110" fixed="right">
83           <template #default="scope">
84             <el-button
85               link
86               type="primary"
87               @click="openForm('update', scope.row.id)"
88               v-hasPermi="['data:channel-kio:update']"
89             >
90               编辑
91             </el-button>
92             <el-button
93               link
94               type="danger"
95               @click="handleDelete(scope.row.id)"
96               v-hasPermi="['data:channel-kio:delete']"
97             >
98               删除
99             </el-button>
100           </template>
101         </el-table-column>
102       </el-table>
103       <!-- 分页 -->
104       <Pagination
105         :total="total"
106         v-model:page="queryParams.pageNo"
107         v-model:limit="queryParams.pageSize"
108         @pagination="getList"
109       />
110     </ContentWrap>
111     <!-- 表单弹窗:添加/修改 -->
112     <TagForm ref="formRef" @success="getList" />
113   </el-drawer>
114 </template>
115 <script lang="ts" setup>
116   import type { DrawerProps } from 'element-plus'
117   import * as KioTagApi from "@/api/data/channel/kio/tag";
118   import TagForm from './TagForm.vue'
119
120   defineOptions({name: 'KioTag'})
121
122   const message = useMessage() // 消息弹窗
123   const {t} = useI18n() // 国际化
124
125   const drawer = ref(false)
126   const direction = ref<DrawerProps['direction']>('rtl')
127   const loading = ref(true) // 列表的加载中
128   const total = ref(0) // 列表的总页数
129   const list = ref([]) // 列表的数据
130   const queryParams = reactive({
131     pageNo: 1,
132     pageSize: 10,
133     device: undefined,
134     tagName: undefined
135   })
136   const queryFormRef = ref() // 搜索的表单
137   const exportLoading = ref(false) // 导出的加载中
138
139   /** 查询列表 */
140   const getList = async () => {
141     loading.value = true
142     try {
143       const page = await KioTagApi.getKioTagPage(queryParams)
144       list.value = page.list
145       total.value = page.total
146     } finally {
147       loading.value = false
148     }
149   }
150
151   /** 搜索按钮操作 */
152   const handleQuery = () => {
153     queryParams.pageNo = 1
154     getList()
155   }
156
157   /** 重置按钮操作 */
158   const resetQuery = () => {
159     queryFormRef.value.resetFields()
160     handleQuery()
161   }
162
163   /** 添加/修改操作 */
164   const formRef = ref()
165   const openForm = (type: string, id?: number) => {
166     formRef.value.open(type, id, queryParams.device)
167   }
168
169   /** 删除按钮操作 */
170   const handleDelete = async (id: number) => {
171     try {
172       // 删除的二次确认
173       await message.delConfirm()
174       // 发起删除
175       await KioTagApi.deleteKioTag(id)
176       message.success(t('common.delSuccess'))
177       // 刷新列表
178       await getList()
179     } catch {
180     }
181   }
182
183   /** 打开弹窗 */
184   const open = async (device?: string) => {
185     resetForm()
186     drawer.value = true
187     queryParams.device = device
188     if (device) {
189       getList()
190     }
191   }
192   defineExpose({open}) // 提供 open 方法,用于打开弹窗
193
194   /** 重置表单 */
195   const resetForm = () => {
196     queryParams.pageNo = 1
197     queryParams.pageSize = 10
198     queryParams.device = ''
199     queryParams.tagName = ''
200   }
201
202   const handleClose = (done: () => void) => {
203     drawer.value = false
204   }
205 </script>