| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272 |
- <template>
- <div class="camera-page">
- <ConditionQuery />
- <div class="camera-list">
- <BasicTable
- :columns="columns"
- :data-source="cameraItems"
- :row-key="(row) => row.code"
- :action-column="actionColumn"
- :pagination="{ total: total, 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"
- >
- <template #tableTitle>
- <el-button type="primary" :icon="Plus" @click="showAddPopover = true">添加</el-button>
- <el-badge :value="totalRow" :hidden="totalRow < 1" class="item">
- <el-button color="#1890FF" @click="showSharedPopover = true" plain>共享相机</el-button>
- </el-badge>
- </template>
- <template #empty>
- <div class="empty-content flex flex-col items-center">
- <img :src="emptyImg" class="empty-img" />
- <span class="empty-text">目前无内容,请先添加相机</span>
- </div>
- </template>
- </BasicTable>
- </div>
- <AddCamera class="add-popover" v-model="showAddPopover" />
- <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"
- />
- <ShareCamera class="add-popover" v-model="addSharedPopover" :share-data="shareCameraData" />
- <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 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 } 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 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),
- },
- ],
- });
- },
- });
- // 列排序操作
- const orderByItem = () => {};
- const handlePageNumChange = (pageNum) => {
- page.value = pageNum;
- getCameraItems();
- };
- const handlePageSizeChange = (pageSize) => {
- 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) => {
- console.log('ROW', row.sourceType);
- if (row.sourceType === AddType.srs) {
- console.log('RSTP');
- showEditSRSPopover.value = true;
- } else if (row.sourceType === AddType.ip) {
- console.log('IP');
- showEditPopover.value = true;
- } else {
- console.log('NVR');
- showEditNVRPopover.value = true;
- }
- editCameraData.value = row;
- };
- 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;
- }
- .item {
- margin: 0px 40px 0px 15px;
- }
- </style>
|