CamerasOverview.vue 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. <template>
  2. <div class="camera-page">
  3. <ConditionQuery />
  4. <div class="camera-list">
  5. <BasicTable
  6. :columns="columns"
  7. :data-source="cameraItems"
  8. :row-key="(row) => row.code"
  9. :action-column="actionColumn"
  10. :pagination="{ total: total, pageSize: size, hideOnSinglePage: !cameraItems.length }"
  11. :loading="loading"
  12. :tableSetting="{
  13. size: false,
  14. redo: false,
  15. fullscreen: false,
  16. striped: false,
  17. setting: false,
  18. }"
  19. :striped="true"
  20. ref="tableRef"
  21. @order-change="orderByItem"
  22. @page-num-change="handlePageNumChange"
  23. @page-size-change="handlePageSizeChange"
  24. >
  25. <template #tableTitle>
  26. <el-button type="primary" :icon="Plus" @click="showAddPopover = true">添加</el-button>
  27. </template>
  28. <template #empty>
  29. <div class="empty-content flex flex-col items-center">
  30. <img :src="emptyImg" class="empty-img" />
  31. <span class="empty-text">目前无内容,请先添加相机</span>
  32. </div>
  33. </template>
  34. </BasicTable>
  35. </div>
  36. <AddCamera class="add-popover" v-model="showAddPopover" />
  37. <EditCamera class="add-popover" v-model="showEditPopover" :edit-data="editCameraData" />
  38. </div>
  39. </template>
  40. <script setup lang="ts">
  41. import { h, onMounted, reactive, ref } from 'vue';
  42. import { BasicTable, TableActionIcons } from '@/components/Table';
  43. import { BasicColumn } from '@/components/Table';
  44. import { columns } from './overviewColumns';
  45. import ConditionQuery from './components/ConditionQuery.vue';
  46. import AddCamera from './components/CameraAddPopover.vue';
  47. import EditCamera from './components/CameraEditPopover.vue';
  48. import emptyImg from '@/assets/images/table/table-empty.png';
  49. import { Plus } from '@element-plus/icons-vue';
  50. import previewIcon from '@/assets/images/table/table-preview.png';
  51. import editIcon from '@/assets/images/table/table-edit.png';
  52. import deleteIcon from '@/assets/images/table/table-delete.png';
  53. import useCameraOverview from './stores/useCameraOverview';
  54. import { storeToRefs } from 'pinia';
  55. import { CameraIPItem } from './type';
  56. const cameraOverview = useCameraOverview();
  57. const { cameraItems, loading, total, page, size } = storeToRefs(cameraOverview);
  58. const { getCameraItems } = cameraOverview;
  59. // 添加弹窗相关
  60. const showAddPopover = ref(false);
  61. const showEditPopover = ref(false);
  62. const editCameraData = ref<CameraIPItem | null>();
  63. //操作列
  64. const actionColumn: BasicColumn = reactive({
  65. width: 150,
  66. title: '操作',
  67. prop: 'action',
  68. key: 'action',
  69. fixed: 'right',
  70. render(record) {
  71. return h(TableActionIcons as any, {
  72. space: 20,
  73. color: '#629bf9',
  74. style: 'img',
  75. size: 16,
  76. actionIcons: [
  77. {
  78. label: '预览',
  79. icon: previewIcon,
  80. onClick: handlePreview.bind(null, record.row),
  81. },
  82. {
  83. label: '编辑',
  84. icon: editIcon,
  85. onClick: handleEdit.bind(null, record.row),
  86. },
  87. {
  88. label: '删除',
  89. icon: deleteIcon,
  90. onClick: handleDelete.bind(null, record.row),
  91. },
  92. ],
  93. });
  94. },
  95. });
  96. // 列排序操作
  97. const orderByItem = () => {};
  98. const handlePageNumChange = (pageNum) => {
  99. page.value = pageNum;
  100. getCameraItems();
  101. };
  102. const handlePageSizeChange = (pageSize) => {
  103. size.value = pageSize;
  104. getCameraItems();
  105. };
  106. const handlePreview = () => {};
  107. const handleDelete = () => {};
  108. const handleEdit = (row) => {
  109. showEditPopover.value = true;
  110. editCameraData.value = row;
  111. };
  112. onMounted(() => {
  113. getCameraItems();
  114. });
  115. </script>
  116. <style scoped>
  117. .camera-page {
  118. position: relative;
  119. height: calc(100vh - 64px - 12px);
  120. background-color: #ffffff;
  121. }
  122. .camera-list {
  123. padding: 0 21px;
  124. }
  125. .empty-content {
  126. margin: auto;
  127. padding: 125px 0;
  128. }
  129. .empty-img {
  130. width: 396px;
  131. }
  132. .empty-text {
  133. font-size: 22px;
  134. color: #8e8e8e;
  135. line-height: 30px;
  136. text-align: center;
  137. }
  138. .add-popover {
  139. position: absolute;
  140. width: calc(100% - 21px);
  141. height: 622px;
  142. top: 0;
  143. bottom: 0;
  144. margin: auto;
  145. z-index: 99;
  146. }
  147. </style>