|
|
@@ -2,26 +2,69 @@
|
|
|
<div class="camera-page">
|
|
|
<ConditionQuery />
|
|
|
<div class="camera-list">
|
|
|
- <BasicTable :columns="columns" :data-source="cameraItems" :row-key="(row) => row.code"
|
|
|
+ <div v-if="showActionBar" class="action-bar">
|
|
|
+ <span class="num-text">已选{{ chooseNum }}项</span>
|
|
|
+ <el-button :class="isActiveExport ? 'btn-active' : 'btn-normal'" @click="handleBatchExport"
|
|
|
+ >导出</el-button
|
|
|
+ >
|
|
|
+ <el-button :class="isActiveDelete ? 'btn-active' : 'btn-normal'" @click="handleBatchDelete"
|
|
|
+ >删除</el-button
|
|
|
+ >
|
|
|
+ <span class="close-btn" @click="handleSelectNone"></span>
|
|
|
+ </div>
|
|
|
+ <BasicTable
|
|
|
+ :columns="columns"
|
|
|
+ :data-source="cameraItems"
|
|
|
+ :row-key="(row) => row.code"
|
|
|
:action-column="actionColumn"
|
|
|
- :pagination="{ total: total, currentPage: page, pageSize: size, hideOnSinglePage: !cameraItems.length }"
|
|
|
- :loading="loading" :tableSetting="{
|
|
|
+ :pagination="{
|
|
|
+ total: total,
|
|
|
+ currentPage: page,
|
|
|
+ pageSize: size,
|
|
|
+ hideOnSinglePage: !cameraItems.length,
|
|
|
+ }"
|
|
|
+ :loading="loading"
|
|
|
+ :tableSetting="{
|
|
|
size: false,
|
|
|
redo: false,
|
|
|
fullscreen: false,
|
|
|
striped: false,
|
|
|
setting: false,
|
|
|
- }" :striped="true" ref="tableRef" @order-change="orderByItem" @page-num-change="handlePageNumChange"
|
|
|
- @page-size-change="handlePageSizeChange">
|
|
|
+ }"
|
|
|
+ :striped="true"
|
|
|
+ ref="tableRef"
|
|
|
+ @order-change="orderByItem"
|
|
|
+ @selection-change="handleSelectionChange"
|
|
|
+ @page-num-change="handlePageNumChange"
|
|
|
+ @page-size-change="handlePageSizeChange"
|
|
|
+ >
|
|
|
<template #tableTitle>
|
|
|
<el-button type="primary" :icon="Plus" @click="showAddPopover = true">添加</el-button>
|
|
|
- <el-button color="#1890FF" @click="showBatchImportPopover = true" style="margin-left: 18px" plain>
|
|
|
+ <el-button
|
|
|
+ color="#1890FF"
|
|
|
+ @click="showBatchImportPopover = true"
|
|
|
+ style="margin-left: 18px"
|
|
|
+ plain
|
|
|
+ >
|
|
|
<template #icon>
|
|
|
<el-icon>
|
|
|
<DocumentAdd />
|
|
|
</el-icon>
|
|
|
</template>
|
|
|
- 批量导入
|
|
|
+ 批量添加
|
|
|
+ </el-button>
|
|
|
+ <el-button
|
|
|
+ color="#1890FF"
|
|
|
+ @click="showBatchEditPopover = true"
|
|
|
+ style="margin-left: 18px"
|
|
|
+ plain
|
|
|
+ >
|
|
|
+ <template #icon>
|
|
|
+ <el-icon>
|
|
|
+ <Edit />
|
|
|
+ </el-icon>
|
|
|
+ </template>
|
|
|
+ 批量修改
|
|
|
</el-button>
|
|
|
<el-badge :value="totalRow" :hidden="totalRow < 1" class="item">
|
|
|
<el-button color="#1890FF" @click="showSharedPopover = true" plain>共享相机</el-button>
|
|
|
@@ -36,249 +79,442 @@
|
|
|
</BasicTable>
|
|
|
</div>
|
|
|
<AddCamera class="add-popover" v-model="showAddPopover" />
|
|
|
- <BatchImportCamera class="batch-import" v-if="showBatchImportPopover" @update="handleUpdateBatchImport"
|
|
|
- @close="handleCloseBatchImport" />
|
|
|
+ <BatchImportCamera
|
|
|
+ class="batch-import"
|
|
|
+ v-if="showBatchImportPopover"
|
|
|
+ @update="handleUpdateBatchImport"
|
|
|
+ @close="handleCloseBatchImport"
|
|
|
+ />
|
|
|
+ <BatchEditCamera
|
|
|
+ class="batch-import"
|
|
|
+ v-if="showBatchEditPopover"
|
|
|
+ @update="handleUpdateBatchEdit"
|
|
|
+ @close="handleCloseBatchEdit"
|
|
|
+ />
|
|
|
<EditCamera class="add-popover" v-model="showEditPopover" :edit-data="editCameraData" />
|
|
|
<EditSRSCamera class="add-popover" v-model="showEditSRSPopover" :edit-data="editCameraData!" />
|
|
|
- <EditNVRCamera class="add-popover" v-model="showEditNVRPopover"
|
|
|
- :edit-data="editCameraData! as any as CameraNVRItem" />
|
|
|
+ <EditNVRCamera
|
|
|
+ class="add-popover"
|
|
|
+ v-model="showEditNVRPopover"
|
|
|
+ :edit-data="editCameraData! as any as CameraNVRItem"
|
|
|
+ />
|
|
|
<ShareCamera class="add-popover" v-model="addSharedPopover" :share-data="shareCameraData" />
|
|
|
- <EditSharedCamera class="add-popover" v-model="showSharedPopover" @update-unadd="updateUnaddAmount" />
|
|
|
+ <EditSharedCamera
|
|
|
+ class="add-popover"
|
|
|
+ v-model="showSharedPopover"
|
|
|
+ @update-unadd="updateUnaddAmount"
|
|
|
+ />
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<script setup lang="ts">
|
|
|
-import { h, onBeforeUnmount, onMounted, reactive, ref } from 'vue';
|
|
|
-import { BasicTable, TableActionIcons } from '@/components/Table';
|
|
|
-import { BasicColumn } from '@/components/Table';
|
|
|
-import { columns } from './overviewColumns';
|
|
|
-import ConditionQuery from './components/ConditionQuery.vue';
|
|
|
-import AddCamera from './components/CameraAddPopover.vue';
|
|
|
-import BatchImportCamera from './components/BatchImportCamera.vue'
|
|
|
-import ShareCamera from './components/CameraSharePopover.vue';
|
|
|
-import EditCamera from './components/CameraEditPopover.vue';
|
|
|
-import EditSRSCamera from './components/CameraEditSRSPopover.vue';
|
|
|
-import EditNVRCamera from './components/CameraEditNVRPopover.vue';
|
|
|
-import EditSharedCamera from './components/CameraSharedEdit.vue';
|
|
|
-import emptyImg from '@/assets/images/table/table-empty.png';
|
|
|
-import { Plus, DocumentAdd } from '@element-plus/icons-vue';
|
|
|
-import shareIcon from '@/assets/images/table/table-share.png';
|
|
|
-import previewIcon from '@/assets/images/table/table-preview.png';
|
|
|
-import editIcon from '@/assets/images/table/table-edit.png';
|
|
|
-import deleteIcon from '@/assets/images/table/table-delete.png';
|
|
|
-import useCameraOverview from './stores/useCameraOverview';
|
|
|
-import { storeToRefs } from 'pinia';
|
|
|
-import { CameraIPItem, CameraNVRItem, CameraShowItem } from './type';
|
|
|
-import { deleteCameraItem } from '@/api/camera/camera-overview';
|
|
|
-import { ElMessage, ElMessageBox } from 'element-plus';
|
|
|
-import useCameraShare from './stores/useCameraShare';
|
|
|
-import router from '@/router';
|
|
|
-import { AddType } from './constant';
|
|
|
-
|
|
|
-const useShare = useCameraShare();
|
|
|
-const { totalRow, queryToTenantId, isAddState, conditionSearch } = useShare;
|
|
|
-
|
|
|
-onMounted(() => {
|
|
|
- isAddState.value = false;
|
|
|
- console.log('isAddState', isAddState.value);
|
|
|
- queryToTenantId.value = -10;
|
|
|
- conditionSearch();
|
|
|
-});
|
|
|
-
|
|
|
-const cameraOverview = useCameraOverview();
|
|
|
-const { cameraItems, loading, total, page, size } = storeToRefs(cameraOverview);
|
|
|
-const { getCameraItems, openInterval, closeInterval, reset } = cameraOverview;
|
|
|
-
|
|
|
-// 添加弹窗相关
|
|
|
-const showAddPopover = ref(false);
|
|
|
-// 批量导入弹窗
|
|
|
-const showBatchImportPopover = ref(false);
|
|
|
-const showSharedPopover = ref(false);
|
|
|
-const addSharedPopover = ref(false);
|
|
|
-
|
|
|
-const showEditPopover = ref(false);
|
|
|
-const showEditSRSPopover = ref(false);
|
|
|
-const showEditNVRPopover = ref(false);
|
|
|
-const editCameraData = ref<CameraIPItem | null>();
|
|
|
-const shareCameraData = ref<CameraShowItem | null>();
|
|
|
-
|
|
|
-const updateUnaddAmount = () => {
|
|
|
- isAddState.value = false;
|
|
|
- console.log('isAddState', isAddState.value);
|
|
|
- queryToTenantId.value = -10;
|
|
|
- conditionSearch();
|
|
|
-};
|
|
|
-
|
|
|
-//操作列
|
|
|
-const actionColumn: BasicColumn = reactive({
|
|
|
- width: 200,
|
|
|
- title: '操作',
|
|
|
- prop: 'action',
|
|
|
- key: 'action',
|
|
|
- fixed: 'right',
|
|
|
- render(record) {
|
|
|
- return h(TableActionIcons as any, {
|
|
|
- space: 20,
|
|
|
- color: '#629bf9',
|
|
|
- style: 'img',
|
|
|
- size: 16,
|
|
|
- actionIcons: [
|
|
|
- {
|
|
|
- label: '分享',
|
|
|
- icon: shareIcon,
|
|
|
- onClick: handleShare.bind(null, record.row),
|
|
|
- },
|
|
|
- {
|
|
|
- label: '预览',
|
|
|
- icon: previewIcon,
|
|
|
- onClick: handlePreview.bind(null, record.row),
|
|
|
- },
|
|
|
- {
|
|
|
- label: '编辑',
|
|
|
- icon: editIcon,
|
|
|
- onClick: handleEdit.bind(null, record.row),
|
|
|
- },
|
|
|
- {
|
|
|
- label: '删除',
|
|
|
- icon: deleteIcon,
|
|
|
- onClick: handleDelete.bind(null, record.row),
|
|
|
- },
|
|
|
- ],
|
|
|
+ import { h, onBeforeUnmount, onMounted, reactive, ref } from 'vue';
|
|
|
+ import { BasicTable, TableActionIcons } from '@/components/Table';
|
|
|
+ import { BasicColumn } from '@/components/Table';
|
|
|
+ import { columns } from './overviewColumns';
|
|
|
+ import ConditionQuery from './components/ConditionQuery.vue';
|
|
|
+ import AddCamera from './components/CameraAddPopover.vue';
|
|
|
+ import BatchImportCamera from './components/BatchImportCamera.vue';
|
|
|
+ import BatchEditCamera from './components/BatchEditCamera.vue';
|
|
|
+ import ShareCamera from './components/CameraSharePopover.vue';
|
|
|
+ import EditCamera from './components/CameraEditPopover.vue';
|
|
|
+ import EditSRSCamera from './components/CameraEditSRSPopover.vue';
|
|
|
+ import EditNVRCamera from './components/CameraEditNVRPopover.vue';
|
|
|
+ import EditSharedCamera from './components/CameraSharedEdit.vue';
|
|
|
+ import emptyImg from '@/assets/images/table/table-empty.png';
|
|
|
+ import { Plus, DocumentAdd, Edit } from '@element-plus/icons-vue';
|
|
|
+ import shareIcon from '@/assets/images/table/table-share.png';
|
|
|
+ import previewIcon from '@/assets/images/table/table-preview.png';
|
|
|
+ import editIcon from '@/assets/images/table/table-edit.png';
|
|
|
+ import deleteIcon from '@/assets/images/table/table-delete.png';
|
|
|
+ import useCameraOverview from './stores/useCameraOverview';
|
|
|
+ import { storeToRefs } from 'pinia';
|
|
|
+ import { CameraIPItem, CameraNVRItem, CameraShowItem } from './type';
|
|
|
+ import { deleteCameraItem, deleteCameraItems } from '@/api/camera/camera-overview';
|
|
|
+ import { ElMessage, ElMessageBox } from 'element-plus';
|
|
|
+ import useCameraShare from './stores/useCameraShare';
|
|
|
+ import router from '@/router';
|
|
|
+ import { AddType } from './constant';
|
|
|
+ import axios, { AxiosRequestConfig } from 'axios';
|
|
|
+ import { getHeaders } from '@/utils/http/axios';
|
|
|
+ import { useGlobSetting } from '@/hooks/setting';
|
|
|
+
|
|
|
+ const { urlPrefix } = useGlobSetting();
|
|
|
+
|
|
|
+ const useShare = useCameraShare();
|
|
|
+ const { totalRow, queryToTenantId, isAddState, conditionSearch } = useShare;
|
|
|
+
|
|
|
+ onMounted(() => {
|
|
|
+ isAddState.value = false;
|
|
|
+ console.log('isAddState', isAddState.value);
|
|
|
+ queryToTenantId.value = -10;
|
|
|
+ conditionSearch();
|
|
|
+ });
|
|
|
+
|
|
|
+ const cameraOverview = useCameraOverview();
|
|
|
+ const { cameraItems, loading, total, page, size } = storeToRefs(cameraOverview);
|
|
|
+ const { getCameraItems, openInterval, closeInterval, reset } = cameraOverview;
|
|
|
+
|
|
|
+ const tableRef = ref();
|
|
|
+ // 添加弹窗相关
|
|
|
+ const showAddPopover = ref(false);
|
|
|
+ // 批量添加弹窗
|
|
|
+ const showBatchImportPopover = ref(false);
|
|
|
+ // 批量删除弹窗
|
|
|
+ const showBatchEditPopover = ref(false);
|
|
|
+ const showSharedPopover = ref(false);
|
|
|
+ const addSharedPopover = ref(false);
|
|
|
+ const showEditPopover = ref(false);
|
|
|
+ const showEditSRSPopover = ref(false);
|
|
|
+ const showEditNVRPopover = ref(false);
|
|
|
+ const editCameraData = ref<CameraIPItem | null>();
|
|
|
+ const shareCameraData = ref<CameraShowItem | null>();
|
|
|
+ // 多选操作
|
|
|
+ const showActionBar = ref(false);
|
|
|
+ const chooseNum = ref(0);
|
|
|
+ const chooseId = ref<number[]>([]);
|
|
|
+ const isActiveExport = ref(false);
|
|
|
+ const isActiveDelete = ref(false);
|
|
|
+
|
|
|
+ const updateUnaddAmount = () => {
|
|
|
+ isAddState.value = false;
|
|
|
+ console.log('isAddState', isAddState.value);
|
|
|
+ queryToTenantId.value = -10;
|
|
|
+ conditionSearch();
|
|
|
+ };
|
|
|
+
|
|
|
+ //操作列
|
|
|
+ const actionColumn: BasicColumn = reactive({
|
|
|
+ width: 200,
|
|
|
+ title: '操作',
|
|
|
+ prop: 'action',
|
|
|
+ key: 'action',
|
|
|
+ fixed: 'right',
|
|
|
+ render(record) {
|
|
|
+ return h(TableActionIcons as any, {
|
|
|
+ space: 20,
|
|
|
+ color: '#629bf9',
|
|
|
+ style: 'img',
|
|
|
+ size: 16,
|
|
|
+ actionIcons: [
|
|
|
+ {
|
|
|
+ label: '分享',
|
|
|
+ icon: shareIcon,
|
|
|
+ onClick: handleShare.bind(null, record.row),
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: '预览',
|
|
|
+ icon: previewIcon,
|
|
|
+ onClick: handlePreview.bind(null, record.row),
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: '编辑',
|
|
|
+ icon: editIcon,
|
|
|
+ onClick: handleEdit.bind(null, record.row),
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: '删除',
|
|
|
+ icon: deleteIcon,
|
|
|
+ onClick: handleDelete.bind(null, record.row),
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ });
|
|
|
+ },
|
|
|
+ });
|
|
|
+
|
|
|
+ // 列排序操作
|
|
|
+ const orderByItem = () => {};
|
|
|
+
|
|
|
+ // 多选操作
|
|
|
+ const handleSelectionChange = (selection) => {
|
|
|
+ chooseNum.value = selection.length;
|
|
|
+ showActionBar.value = chooseNum.value > 0 ? true : false;
|
|
|
+ chooseId.value = [];
|
|
|
+ selection.forEach((item) => {
|
|
|
+ if (chooseId.value.indexOf(item.id) === -1) chooseId.value.push(item.id);
|
|
|
});
|
|
|
- },
|
|
|
-});
|
|
|
-
|
|
|
-// 列排序操作
|
|
|
-const orderByItem = () => { };
|
|
|
-
|
|
|
-const handlePageNumChange = (pageNum) => {
|
|
|
- page.value = pageNum;
|
|
|
- getCameraItems();
|
|
|
-};
|
|
|
-
|
|
|
-const handlePageSizeChange = (pageSize) => {
|
|
|
- page.value = 1;
|
|
|
- size.value = pageSize;
|
|
|
- getCameraItems();
|
|
|
-};
|
|
|
-
|
|
|
-const handleShare = (row) => {
|
|
|
- addSharedPopover.value = true;
|
|
|
- shareCameraData.value = row;
|
|
|
-};
|
|
|
-
|
|
|
-const handlePreview = (_row) => {
|
|
|
- router.push(`/cameras/preview?cameraId=${_row.id}`);
|
|
|
-};
|
|
|
-
|
|
|
-const handleDelete = (row) => {
|
|
|
- ElMessageBox.confirm(`您想删除相机${row.code}`, '提示', {
|
|
|
- confirmButtonText: '确定',
|
|
|
- cancelButtonText: '取消',
|
|
|
- type: 'warning',
|
|
|
- draggable: true,
|
|
|
- })
|
|
|
- .then(() => {
|
|
|
- deleteCameraItem({ cameraId: row.id }).then(() => {
|
|
|
- ElMessage.success('删除成功');
|
|
|
-
|
|
|
- getCameraItems();
|
|
|
+ };
|
|
|
+
|
|
|
+ const handleBatchExport = async () => {
|
|
|
+ try {
|
|
|
+ const requestBody = {
|
|
|
+ cameraIdList: chooseId.value,
|
|
|
+ };
|
|
|
+
|
|
|
+ const config: AxiosRequestConfig = {
|
|
|
+ headers: getHeaders(),
|
|
|
+ responseType: 'blob',
|
|
|
+ };
|
|
|
+ const response = await axios.post(
|
|
|
+ urlPrefix + '/addCameraList/downloadCameraList',
|
|
|
+ requestBody,
|
|
|
+ config,
|
|
|
+ );
|
|
|
+ const blob = new Blob([response.data], {
|
|
|
+ type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
|
|
});
|
|
|
+ // 创建下载链接
|
|
|
+ let downloadLink: HTMLAnchorElement | null = document.createElement('a');
|
|
|
+ const url = window.URL.createObjectURL(blob);
|
|
|
+ downloadLink.href = url;
|
|
|
+ downloadLink.download = '相机导出信息.xlsx';
|
|
|
+ downloadLink.click();
|
|
|
+ // 移除下载链接
|
|
|
+ window.URL.revokeObjectURL(url);
|
|
|
+ downloadLink = null;
|
|
|
+ } catch (error) {
|
|
|
+ console.error('Error downloading file:', error);
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ const handleBatchDelete = () => {
|
|
|
+ if (showActionBar.value) isActiveDelete.value = !isActiveDelete.value;
|
|
|
+ ElMessageBox.confirm('删除后,相机数据无法恢复', '请确认是否删除相机数据', {
|
|
|
+ confirmButtonText: '确定',
|
|
|
+ cancelButtonText: '取消',
|
|
|
+ type: 'warning',
|
|
|
+ customClass: 'deleteMessage',
|
|
|
+ center: true,
|
|
|
})
|
|
|
- .catch(() => { });
|
|
|
-};
|
|
|
-
|
|
|
-const handleEdit = (row) => {
|
|
|
- if (row.sourceType === AddType.srs) {
|
|
|
- showEditSRSPopover.value = true;
|
|
|
- } else if (row.sourceType === AddType.ip) {
|
|
|
- showEditPopover.value = true;
|
|
|
- } else {
|
|
|
- showEditNVRPopover.value = true;
|
|
|
- }
|
|
|
- editCameraData.value = row;
|
|
|
-};
|
|
|
-
|
|
|
-// 批量导入相关事件
|
|
|
-const handleUpdateBatchImport = () => {
|
|
|
- showBatchImportPopover.value = false;
|
|
|
- page.value = 1;
|
|
|
- size.value = 10;
|
|
|
- getCameraItems();
|
|
|
-};
|
|
|
-
|
|
|
-const handleCloseBatchImport = () => {
|
|
|
- showBatchImportPopover.value = false;
|
|
|
-};
|
|
|
-
|
|
|
-onMounted(() => {
|
|
|
- getCameraItems();
|
|
|
- openInterval();
|
|
|
-});
|
|
|
-
|
|
|
-onBeforeUnmount(() => {
|
|
|
- closeInterval();
|
|
|
- reset();
|
|
|
-});
|
|
|
+ .then(() => {
|
|
|
+ deleteCameraItems(chooseId.value).then(() => {
|
|
|
+ ElMessage({
|
|
|
+ type: 'success',
|
|
|
+ message: '删除成功',
|
|
|
+ });
|
|
|
+ page.value = 1;
|
|
|
+ getCameraItems();
|
|
|
+ handleSelectNone();
|
|
|
+ isActiveDelete.value = !isActiveDelete.value;
|
|
|
+ });
|
|
|
+ })
|
|
|
+ .catch(() => {
|
|
|
+ ElMessage({
|
|
|
+ type: 'info',
|
|
|
+ message: '取消删除',
|
|
|
+ });
|
|
|
+ isActiveDelete.value = !isActiveDelete.value;
|
|
|
+ });
|
|
|
+ };
|
|
|
+
|
|
|
+ // 清除多选
|
|
|
+ const handleSelectNone = () => {
|
|
|
+ chooseId.value = [];
|
|
|
+ chooseNum.value = 0;
|
|
|
+ tableRef.value?.clearAll();
|
|
|
+ showActionBar.value = false;
|
|
|
+ };
|
|
|
+
|
|
|
+ const handlePageNumChange = (pageNum) => {
|
|
|
+ page.value = pageNum;
|
|
|
+ getCameraItems();
|
|
|
+ };
|
|
|
+
|
|
|
+ const handlePageSizeChange = (pageSize) => {
|
|
|
+ page.value = 1;
|
|
|
+ size.value = pageSize;
|
|
|
+ getCameraItems();
|
|
|
+ };
|
|
|
+
|
|
|
+ const handleShare = (row) => {
|
|
|
+ addSharedPopover.value = true;
|
|
|
+ shareCameraData.value = row;
|
|
|
+ };
|
|
|
+
|
|
|
+ const handlePreview = (_row) => {
|
|
|
+ router.push(`/cameras/preview?cameraId=${_row.id}`);
|
|
|
+ };
|
|
|
+
|
|
|
+ const handleDelete = (row) => {
|
|
|
+ ElMessageBox.confirm(`您想删除相机${row.code}`, '提示', {
|
|
|
+ confirmButtonText: '确定',
|
|
|
+ cancelButtonText: '取消',
|
|
|
+ type: 'warning',
|
|
|
+ draggable: true,
|
|
|
+ })
|
|
|
+ .then(() => {
|
|
|
+ deleteCameraItem({ cameraId: row.id }).then(() => {
|
|
|
+ ElMessage.success('删除成功');
|
|
|
+
|
|
|
+ getCameraItems();
|
|
|
+ });
|
|
|
+ })
|
|
|
+ .catch(() => {});
|
|
|
+ };
|
|
|
+
|
|
|
+ const handleEdit = (row) => {
|
|
|
+ if (row.sourceType === AddType.srs) {
|
|
|
+ showEditSRSPopover.value = true;
|
|
|
+ } else if (row.sourceType === AddType.ip) {
|
|
|
+ showEditPopover.value = true;
|
|
|
+ } else {
|
|
|
+ showEditNVRPopover.value = true;
|
|
|
+ }
|
|
|
+ editCameraData.value = row;
|
|
|
+ };
|
|
|
+
|
|
|
+ // 批量导入相关事件
|
|
|
+ const handleUpdateBatchImport = () => {
|
|
|
+ showBatchImportPopover.value = false;
|
|
|
+ page.value = 1;
|
|
|
+ size.value = 10;
|
|
|
+ getCameraItems();
|
|
|
+ };
|
|
|
+ const handleCloseBatchImport = () => {
|
|
|
+ showBatchImportPopover.value = false;
|
|
|
+ };
|
|
|
+
|
|
|
+ // 批量修改相关事件
|
|
|
+ const handleUpdateBatchEdit = () => {
|
|
|
+ showBatchEditPopover.value = false;
|
|
|
+ page.value = 1;
|
|
|
+ size.value = 10;
|
|
|
+ getCameraItems();
|
|
|
+ };
|
|
|
+ const handleCloseBatchEdit = () => {
|
|
|
+ showBatchEditPopover.value = false;
|
|
|
+ };
|
|
|
+
|
|
|
+ onMounted(() => {
|
|
|
+ getCameraItems();
|
|
|
+ openInterval();
|
|
|
+ });
|
|
|
+
|
|
|
+ onBeforeUnmount(() => {
|
|
|
+ closeInterval();
|
|
|
+ reset();
|
|
|
+ });
|
|
|
</script>
|
|
|
|
|
|
-<style scoped>
|
|
|
-.camera-page {
|
|
|
- position: relative;
|
|
|
- height: calc(100vh - 64px - 12px);
|
|
|
- background-color: #ffffff;
|
|
|
-}
|
|
|
-
|
|
|
-.camera-list {
|
|
|
- padding: 0 21px;
|
|
|
-}
|
|
|
-
|
|
|
-.empty-content {
|
|
|
- margin: auto;
|
|
|
- padding: 125px 0;
|
|
|
-}
|
|
|
-
|
|
|
-.empty-img {
|
|
|
- width: 396px;
|
|
|
-}
|
|
|
-
|
|
|
-.empty-text {
|
|
|
- font-size: 22px;
|
|
|
- color: #8e8e8e;
|
|
|
- line-height: 30px;
|
|
|
- text-align: center;
|
|
|
-}
|
|
|
-
|
|
|
-.add-tip {
|
|
|
- position: absolute;
|
|
|
- left: 187px;
|
|
|
- top: 64px;
|
|
|
- font-size: 16px;
|
|
|
- color: red;
|
|
|
-}
|
|
|
-
|
|
|
-.add-popover {
|
|
|
- position: absolute;
|
|
|
- width: calc(100% - 21px);
|
|
|
- height: 622px;
|
|
|
- top: 0;
|
|
|
- bottom: 0;
|
|
|
- margin: auto;
|
|
|
- z-index: 99;
|
|
|
-}
|
|
|
-
|
|
|
-.batch-import {
|
|
|
- position: absolute;
|
|
|
- width: 593px;
|
|
|
- height: 435px;
|
|
|
- left: 50%;
|
|
|
- top: 50%;
|
|
|
- margin-top: -218px;
|
|
|
- margin-left: -297px;
|
|
|
- z-index: 99;
|
|
|
-}
|
|
|
-
|
|
|
-.item {
|
|
|
- margin: 0px 40px 0px 15px;
|
|
|
-}
|
|
|
+<style scoped lang="less">
|
|
|
+ .action-bar {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ position: absolute;
|
|
|
+ top: 48px;
|
|
|
+ min-width: calc(100vw - 266px);
|
|
|
+ height: 50px;
|
|
|
+ border-radius: 4px 4px 0px 0px;
|
|
|
+ background-color: #ddefff;
|
|
|
+ z-index: 10;
|
|
|
+
|
|
|
+ .num-text {
|
|
|
+ margin: 0 34px 0 25px;
|
|
|
+ color: rgba(0, 0, 0, 0.85);
|
|
|
+ font-weight: 500;
|
|
|
+ }
|
|
|
+
|
|
|
+ .btn-normal {
|
|
|
+ color: #1890ff;
|
|
|
+ background: transparent;
|
|
|
+ border: 1px solid #1890ff;
|
|
|
+ border-radius: 2px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .btn-active {
|
|
|
+ color: #ffffff;
|
|
|
+ background-color: #1890ff;
|
|
|
+ }
|
|
|
+
|
|
|
+ .close-btn {
|
|
|
+ margin-left: auto;
|
|
|
+ margin-right: 20px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .close-btn:before {
|
|
|
+ content: '\2716';
|
|
|
+ color: #000;
|
|
|
+ cursor: pointer;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .camera-page {
|
|
|
+ position: relative;
|
|
|
+ height: calc(100vh - 64px - 12px);
|
|
|
+ background-color: #ffffff;
|
|
|
+ }
|
|
|
+
|
|
|
+ .camera-list {
|
|
|
+ padding: 0 21px;
|
|
|
+ position: relative;
|
|
|
+ }
|
|
|
+
|
|
|
+ .empty-content {
|
|
|
+ margin: auto;
|
|
|
+ padding: 125px 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ .empty-img {
|
|
|
+ width: 396px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .empty-text {
|
|
|
+ font-size: 22px;
|
|
|
+ color: #8e8e8e;
|
|
|
+ line-height: 30px;
|
|
|
+ text-align: center;
|
|
|
+ }
|
|
|
+
|
|
|
+ .add-tip {
|
|
|
+ position: absolute;
|
|
|
+ left: 187px;
|
|
|
+ top: 64px;
|
|
|
+ font-size: 16px;
|
|
|
+ color: red;
|
|
|
+ }
|
|
|
+
|
|
|
+ .add-popover {
|
|
|
+ position: absolute;
|
|
|
+ width: calc(100% - 21px);
|
|
|
+ height: 622px;
|
|
|
+ top: 0;
|
|
|
+ bottom: 0;
|
|
|
+ margin: auto;
|
|
|
+ z-index: 99;
|
|
|
+ }
|
|
|
+
|
|
|
+ .batch-import {
|
|
|
+ position: absolute;
|
|
|
+ width: 593px;
|
|
|
+ height: 435px;
|
|
|
+ left: 50%;
|
|
|
+ top: 50%;
|
|
|
+ margin-top: -218px;
|
|
|
+ margin-left: -297px;
|
|
|
+ z-index: 99;
|
|
|
+ }
|
|
|
+
|
|
|
+ .item {
|
|
|
+ margin: 0px 40px 0px 15px;
|
|
|
+ }
|
|
|
+</style>
|
|
|
+<style lang="less">
|
|
|
+ .deleteMessage {
|
|
|
+ padding: 20px 24px;
|
|
|
+ box-shadow: 0px 12px 48px 16px rgba(0, 0, 0, 0.03), 0px 9px 28px 0px rgba(0, 0, 0, 0.05),
|
|
|
+ 0px 6px 16px -8px rgba(0, 0, 0, 0.08);
|
|
|
+ border-radius: 8px;
|
|
|
+
|
|
|
+ .el-message-box__headerbtn {
|
|
|
+ margin-top: 12px;
|
|
|
+ margin-right: 12px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .el-message-box__title {
|
|
|
+ justify-content: start;
|
|
|
+ color: rgba(0, 0, 0, 0.88);
|
|
|
+ font-size: 16px;
|
|
|
+ font-weight: 500;
|
|
|
+ }
|
|
|
+
|
|
|
+ .el-message-box__container {
|
|
|
+ justify-content: start;
|
|
|
+ margin-left: 23px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .el-message-box__btns {
|
|
|
+ display: block;
|
|
|
+ float: right;
|
|
|
+ }
|
|
|
+ }
|
|
|
</style>
|