潘志宝
2024-08-22 8056c420566768c74bf3b75a5d2e6b46a0636742
提交 | 用户 | 时间
8056c4 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     >
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="IP地址" prop="address">
21         <el-input
22           v-model="queryParams.address"
23           placeholder="请输入IP地址"
24           clearable
25           @keyup.enter="handleQuery"
26           class="!w-240px"
27         />
28       </el-form-item>
29       <el-form-item>
30         <el-button @click="handleQuery">
31           <Icon icon="ep:search" class="mr-5px" />
32           搜索
33         </el-button>
34         <el-button @click="resetQuery">
35           <Icon icon="ep:refresh" class="mr-5px" />
36           重置
37         </el-button>
38         <el-button
39           type="primary"
40           plain
41           @click="openForm('create')"
42           v-hasPermi="['system:tenant:create']"
43         >
44           <Icon icon="ep:plus" class="mr-5px" />
45           新增
46         </el-button>
47       </el-form-item>
48     </el-form>
49   </ContentWrap>
50
51   <!-- 列表 -->
52   <ContentWrap>
53     <el-table v-loading="loading" :data="list">
54       <el-table-column label="设备名称" align="center" prop="name" />
55       <el-table-column label="IP地址" align="center" prop="address" />
56       <el-table-column label="端口" align="center" prop="port" />
57       <el-table-column label="不活动超时(ms)" align="center" prop="connectInactivityTimeout" />
58       <el-table-column label="重连超时(ms)" align="center" prop="reconnectInterval" />
59       <el-table-column label="重试次数" align="center" prop="attemptsBeforeTimeout" />
60       <el-table-column label="加载类型" align="center" prop="loadType" />
61       <el-table-column label=" 重试间隔(ms)" align="center" prop="waitToRetryMilliseconds" />
62       <el-table-column label="读超时(ms)" align="center" prop="readTimeout" />
63       <el-table-column label="写超时(ms)" align="center" prop="writeTimeout" />
64       <el-table-column label="读超时(ms)" align="center" prop="readTimeout" />
65       <el-table-column label="操作" align="center" min-width="110" fixed="right">
66         <template #default="scope">
67           <el-button
68             link
69             type="primary"
70             @click="openForm('update', scope.row.id)"
71             v-hasPermi="['system:tenant:update']"
72           >
73             编辑
74           </el-button>
75           <el-button
76             link
77             type="danger"
78             @click="handleDelete(scope.row.id)"
79             v-hasPermi="['system:tenant:delete']"
80           >
81             删除
82           </el-button>
83         </template>
84       </el-table-column>
85     </el-table>
86     <!-- 分页 -->
87     <Pagination
88       :total="total"
89       v-model:page="queryParams.pageNo"
90       v-model:limit="queryParams.pageSize"
91       @pagination="getList"
92     />
93   </ContentWrap>
94
95   <!-- 表单弹窗:添加/修改 -->
96   <ModBusDeviceForm ref="formRef" @success="getList" />
97
98 </template>
99 <script lang="ts" setup>
100   import {DICT_TYPE, getIntDictOptions} from '@/utils/dict'
101   import {dateFormatter} from '@/utils/formatTime'
102   import download from '@/utils/download'
103   import * as ModbusApi from '@/api/data/channel/modbus'
104   import ModBusDeviceForm from './ModBusDeviceForm.vue'
105
106   defineOptions({name: 'DataModbus'})
107
108   const message = useMessage() // 消息弹窗
109   const {t} = useI18n() // 国际化
110
111   const loading = ref(true) // 列表的加载中
112   const total = ref(0) // 列表的总页数
113   const list = ref([]) // 列表的数据
114   const queryParams = reactive({
115     pageNo: 1,
116     pageSize: 10,
117     name: undefined,
118     address: undefined
119   })
120   const queryFormRef = ref() // 搜索的表单
121   const exportLoading = ref(false) // 导出的加载中
122
123   /** 查询列表 */
124   const getList = async () => {
125     loading.value = true
126     try {
127       const page = await ModbusApi.getModBusDevicePage(queryParams)
128       list.value = page.list
129       total.value = page.total
130     } finally {
131       loading.value = false
132     }
133   }
134
135   /** 搜索按钮操作 */
136   const handleQuery = () => {
137     queryParams.pageNo = 1
138     getList()
139   }
140
141   /** 重置按钮操作 */
142   const resetQuery = () => {
143     queryFormRef.value.resetFields()
144     handleQuery()
145   }
146
147   /** 添加/修改操作 */
148   const formRef = ref()
149   const openForm = (type: string, id?: number) => {
150     formRef.value.open(type, id)
151   }
152
153   /** 删除按钮操作 */
154   const handleDelete = async (id: number) => {
155     try {
156       // 删除的二次确认
157       await message.delConfirm()
158       // 发起删除
159       await ModbusApi.deleteModBusDevice(id)
160       message.success(t('common.delSuccess'))
161       // 刷新列表
162       await getList()
163     } catch {
164     }
165   }
166
167   /** 初始化 **/
168   onMounted(async () => {
169     await getList()
170   })
171 </script>