NvrList.vue 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. <template>
  2. <div class="nvr-page">
  3. <div class="nvr-list">
  4. <BasicTable
  5. :columns="columns"
  6. :data-source="tableData"
  7. :row-key="(row) => row.code"
  8. :action-column="actionColumn"
  9. :pagination="{
  10. total: total,
  11. pageSize: pagesize,
  12. currentPage: page,
  13. hideOnSinglePage: !tableData,
  14. }"
  15. :tableSetting="{
  16. size: false,
  17. redo: false,
  18. fullscreen: false,
  19. striped: false,
  20. setting: false,
  21. }"
  22. :striped="true"
  23. ref="tableRef"
  24. @page-num-change="handlePageNumChange"
  25. @page-size-change="handlePageSizeChange"
  26. >
  27. <template #tableTitle>
  28. <el-button type="primary" @click="openCreateDrawer" :icon="Plus">添加</el-button>
  29. </template>
  30. </BasicTable>
  31. </div>
  32. <CreateDrawer
  33. ref="createDrawerRef"
  34. :title="drawerTitle"
  35. @form-submit="handleFormSubmit"
  36. @form-edit="handleFormEdit"
  37. />
  38. </div>
  39. </template>
  40. <script lang="ts" setup>
  41. import { h, ref, reactive, onMounted } from 'vue';
  42. import { BasicTable, TableActionIcons, BasicColumn } from '@/components/Table';
  43. import { columns } from './overviewColumns';
  44. import useNvrStore from './store/useNvrList';
  45. import { Plus } from '@element-plus/icons-vue';
  46. import editIcon from '@/assets/images/table/table-edit.png';
  47. import deleteIcon from '@/assets/images/table/table-delete.png';
  48. import CreateDrawer from './components/CreateDrawer.vue';
  49. import { ElMessage, ElMessageBox } from 'element-plus';
  50. import { nvrData } from './type';
  51. import { storeToRefs } from 'pinia';
  52. import { conditions } from './constant';
  53. const nvrStore = useNvrStore();
  54. const { total, page, pagesize } = storeToRefs(nvrStore);
  55. const { getNvr, addNvr, deleteNvr, updateNvr } = nvrStore;
  56. const tableData = ref<nvrData[]>();
  57. const drawerTitle = ref('添加NVR');
  58. //列表操作
  59. const handleEdit = (record: Recordable) => {
  60. drawerTitle.value = '编辑NVR';
  61. const { openDrawer } = createDrawerRef.value;
  62. openDrawer(record.id);
  63. };
  64. const handleDelete = (record: Recordable) => {
  65. ElMessageBox.confirm(
  66. '请确认是否删除NVR设备信息?',
  67. '该NVR设备已添加相机,删除后将无法查看相关相机的视频回放',
  68. {
  69. confirmButtonText: '确定',
  70. cancelButtonText: '取消',
  71. },
  72. ).then(() => {
  73. deleteNvr(record.id);
  74. tableData.value = getNvr();
  75. ElMessage({
  76. message: '删除NVR设备成功.',
  77. type: 'success',
  78. });
  79. });
  80. };
  81. //添加数据
  82. const createDrawerRef = ref();
  83. const openCreateDrawer = () => {
  84. drawerTitle.value = '添加NVR';
  85. const { openDrawer } = createDrawerRef.value;
  86. openDrawer();
  87. };
  88. //操作列
  89. const actionColumn: BasicColumn = reactive({
  90. width: 200,
  91. title: '操作',
  92. prop: 'action',
  93. key: 'action',
  94. fixed: 'right',
  95. render(record) {
  96. return h(TableActionIcons as any, {
  97. space: 20,
  98. color: '#629bf9',
  99. style: 'img',
  100. size: 16,
  101. actionIcons: [
  102. {
  103. label: '修改',
  104. icon: editIcon,
  105. onClick: handleEdit.bind(null, record.row),
  106. },
  107. {
  108. label: '删除',
  109. icon: deleteIcon,
  110. onClick: handleDelete.bind(null, record.row),
  111. },
  112. ],
  113. });
  114. },
  115. });
  116. const handleFormSubmit = (newData) => {
  117. addNvr(newData);
  118. tableData.value = getNvr();
  119. };
  120. const handleFormEdit = (newData) => {
  121. updateNvr(newData);
  122. tableData.value = getNvr();
  123. };
  124. const handlePageNumChange = (pageNum) => {
  125. page.value = pageNum;
  126. tableData.value = getNvr();
  127. };
  128. const handlePageSizeChange = (size) => {
  129. pagesize.value = size;
  130. tableData.value = getNvr();
  131. };
  132. onMounted(() => {
  133. tableData.value = getNvr();
  134. });
  135. </script>
  136. <style lang="scss" scoped>
  137. .nvr-page {
  138. position: relative;
  139. height: calc(100vh - 64px - 12px);
  140. background-color: #ffffff;
  141. .nvr-list {
  142. padding: 35px 21px;
  143. }
  144. }
  145. </style>