潘志宝
2024-10-31 13c97d76348b5451381320aa54efa0706f38ecb6
提交 | 用户 | 时间
30566d 1 <template>
H 2   <!-- 搜索 -->
3   <el-drawer
4     direction="rtl"
5     v-model="visible"
6     @close="handleClose"
7     size="60%">
8     <div class="mod-dev__camera" style="padding: 10px;">
9     <el-form
10       class="-mb-15px"
11       :model="queryParams"
12       ref="queryFormRef"
13       :inline="true"
14       label-width="68px"
15     >
16       <el-form-item label="监控区域" prop="code">
17         <el-input
18           v-model="queryParams.location"
19           placeholder="请输入监控区域"
20           clearable
21           @keyup.enter="handleQuery"
22           class="!w-240px"
23         />
24       </el-form-item>
25       <el-form-item>
26         <el-button @click="handleQuery">
27           <Icon icon="ep:search" class="mr-5px" />
28           搜索
29         </el-button>
30         <el-button @click="resetQuery">
31           <Icon icon="ep:refresh" class="mr-5px" />
32           重置
33         </el-button>
34         <el-button
35           type="primary"
36           plain
37           @click="openForm('create')"
38         >
39           <Icon icon="ep:plus" class="mr-5px" />
40           新增
41         </el-button>
42         <el-button
43           type="success"
44           plain
45           @click="handleExport"
46           :loading="exportLoading"
47           v-hasPermi="['dev:camera:export']"
48         >
49           <Icon icon="ep:download" class="mr-5px" />
50           导出
51         </el-button>
52       </el-form-item>
53     </el-form>
54
55   <!-- 列表 -->
56     <el-table v-loading="loading" :data="list">
57       <el-table-column label="编码" align="center" prop="code" />
58       <el-table-column label="通道" align="center" prop="channel" />
59       <el-table-column label="监控区域" align="center" prop="location" />
60       <el-table-column label="备注" align="center" prop="remark" width="200" />
61       <el-table-column label="操作" align="center" min-width="110" fixed="right">
62         <template #default="scope">
63           <el-button
64             link
65             type="primary"
66             @click="openForm('update', scope.row.id)"
67           >
68             编辑
69           </el-button>
70           <el-button
71             link
72             type="danger"
73             @click="handleDelete(scope.row.id)"
74           >
75             删除
76           </el-button>
77         </template>
78       </el-table-column>
79     </el-table>
80     <!-- 分页 -->
81     <Pagination
82       :total="total"
83       v-model:page="queryParams.pageNo"
84       v-model:limit="queryParams.pageSize"
85       @pagination="getList"
86     />
87     </div>
88   </el-drawer>
89
90   <!-- 表单弹窗:添加/修改 -->
91   <CameraForm ref="formRef" @success="getList" />
92
93
94 </template>
95 <script lang="ts" setup>
96 import download from '@/utils/download'
97 import * as CameraApi from '@/api/data/dev/camera'
98 import CameraForm from './CameraForm.vue'
99
100 defineOptions({name: 'Camera'})
101
102 const message = useMessage() // 消息弹窗
103 const {t} = useI18n() // 国际化
104
105 const loading = ref(true) // 列表的加载中
106 const total = ref(0) // 列表的总页数
107 const list = ref([]) // 列表的数据
108
109 const nvrId = ref('') //录像机id
110
111 const queryParams = reactive({
112   pageNo: 1,
113   pageSize: 10,
114   nvrId: '',
115   location: undefined,
116   status: undefined
117 })
118 const queryFormRef = ref() // 搜索的表单
119 const exportLoading = ref(false) // 导出的加载中
120
121 const visible = ref(false)
122
123 /** 打开弹窗 */
124 const open = async (nvr_id: string) => {
125   visible.value = true
126   nvrId.value = nvr_id
127   queryParams.nvrId = nvr_id
128   await getList()
129 }
130
131 defineExpose({ open }) // 提供 open 方法,用于打开弹窗
132
133 /** 查询列表 */
134 const getList = async () => {
135   loading.value = true
136   try {
137     const data = await CameraApi.getCameraPage(queryParams)
138     list.value = data.list
139     total.value = data.total
140   } finally {
141     loading.value = false
142   }
143 }
144
145 /** 搜索按钮操作 */
146 const handleQuery = () => {
147   queryParams.pageNo = 1
148   getList()
149 }
150
151 /** 重置按钮操作 */
152 const resetQuery = () => {
153   queryFormRef.value.resetFields()
154   handleQuery()
155 }
156
157 /** 添加/修改操作 */
158 const formRef = ref()
159 const openForm = (type: string, id?: number) => {
160   formRef.value.open(type, id, nvrId.value)
161 }
162
163 /** 删除按钮操作 */
164 const handleDelete = async (id: number) => {
165   try {
166     // 删除的二次确认
167     await message.delConfirm()
168     // 发起删除
169     await CameraApi.deleteCamera(id)
170     message.success(t('common.delSuccess'))
171     // 刷新列表
172     await getList()
173   } catch {
174   }
175 }
176
177 /** 导出按钮操作 */
178 const handleExport = async () => {
179   try {
180     // 导出的二次确认
181     await message.exportConfirm()
182     // 发起导出
183     exportLoading.value = true
184     const data = await CameraApi.exportCamera(queryParams)
185     download.excel(data, '摄像头列表.xls')
186   } catch {
187   } finally {
188     exportLoading.value = false
189   }
190 }
191
192 const handleClose = () => {
193   queryFormRef.value.resetFields()
194   visible.value = false
195 }
196
197 /** 初始化 **/
198 onMounted(async () => {
199   await getList()
200 })
201 </script>