houzhongjian
2024-11-06 1ae890a97b92470ad7c163615873091622c1c8ae
提交 | 用户 | 时间
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">
c3e84e 57       <el-table-column label="编码" align="center" prop="code" width="80" />
H 58       <el-table-column label="抓图方式" align="center" prop="captureType" width="80">
59         <template #default="scope">
60           <dict-tag :type="DICT_TYPE.CAPTURE_TYPE" :value="scope.row.captureType" />
61         </template>
62       </el-table-column>
63       <el-table-column label="通道" align="center" prop="channel" width="80"  />
30566d 64       <el-table-column label="监控区域" align="center" prop="location" />
H 65       <el-table-column label="备注" align="center" prop="remark" width="200" />
66       <el-table-column label="操作" align="center" min-width="110" fixed="right">
67         <template #default="scope">
68           <el-button
69             link
70             type="primary"
71             @click="openForm('update', scope.row.id)"
72           >
73             编辑
74           </el-button>
75           <el-button
76             link
77             type="danger"
78             @click="handleDelete(scope.row.id)"
79           >
80             删除
81           </el-button>
82         </template>
83       </el-table-column>
84     </el-table>
85     <!-- 分页 -->
86     <Pagination
87       :total="total"
88       v-model:page="queryParams.pageNo"
89       v-model:limit="queryParams.pageSize"
90       @pagination="getList"
91     />
92     </div>
93   </el-drawer>
94
95   <!-- 表单弹窗:添加/修改 -->
1ae890 96   <NvrCameraForm ref="formRef" @success="getList" />
30566d 97
H 98
99 </template>
100 <script lang="ts" setup>
101 import download from '@/utils/download'
1ae890 102 import * as CameraApi from '@/api/data/video/camera'
H 103 import NvrCameraForm from './NvrCameraForm.vue'
c3e84e 104 import {DICT_TYPE} from "@/utils/dict";
30566d 105
1ae890 106 defineOptions({name: 'NvrCamera'})
30566d 107
H 108 const message = useMessage() // 消息弹窗
109 const {t} = useI18n() // 国际化
110
111 const loading = ref(true) // 列表的加载中
112 const total = ref(0) // 列表的总页数
113 const list = ref([]) // 列表的数据
114
115 const nvrId = ref('') //录像机id
116
117 const queryParams = reactive({
118   pageNo: 1,
119   pageSize: 10,
120   nvrId: '',
121   location: undefined,
122   status: undefined
123 })
124 const queryFormRef = ref() // 搜索的表单
125 const exportLoading = ref(false) // 导出的加载中
126
127 const visible = ref(false)
128
129 /** 打开弹窗 */
130 const open = async (nvr_id: string) => {
131   visible.value = true
132   nvrId.value = nvr_id
133   queryParams.nvrId = nvr_id
134   await getList()
135 }
136
137 defineExpose({ open }) // 提供 open 方法,用于打开弹窗
138
139 /** 查询列表 */
140 const getList = async () => {
141   loading.value = true
142   try {
143     const data = await CameraApi.getCameraPage(queryParams)
144     list.value = data.list
145     total.value = data.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, nvrId.value)
167 }
168
169 /** 删除按钮操作 */
170 const handleDelete = async (id: number) => {
171   try {
172     // 删除的二次确认
173     await message.delConfirm()
174     // 发起删除
175     await CameraApi.deleteCamera(id)
176     message.success(t('common.delSuccess'))
177     // 刷新列表
178     await getList()
179   } catch {
180   }
181 }
182
183 /** 导出按钮操作 */
184 const handleExport = async () => {
185   try {
186     // 导出的二次确认
187     await message.exportConfirm()
188     // 发起导出
189     exportLoading.value = true
190     const data = await CameraApi.exportCamera(queryParams)
191     download.excel(data, '摄像头列表.xls')
192   } catch {
193   } finally {
194     exportLoading.value = false
195   }
196 }
197
198 const handleClose = () => {
199   queryFormRef.value.resetFields()
200   visible.value = false
201 }
202
203 /** 初始化 **/
204 onMounted(async () => {
205   await getList()
206 })
207 </script>