operationModal.vue 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. <template>
  2. <div class="operation-modal">
  3. <a-modal v-model:visible="Visible" width="1200px" title="操作日志" :footer="null" centered destroyOnClose
  4. @cancel="handleCancel">
  5. <a-tabs v-model:activeKey="activeKey" @change="tabChange">
  6. <a-tab-pane key="0" tab="读取规则日志">
  7. <a-form :model="formState" layout="inline" :label-col="{ span: 6 }" :wrapper-col="{ span: 18 }"
  8. autocomplete="off">
  9. <a-form-item label="操作类型">
  10. <a-select v-model:value="formState.operationType" style="width: 220px">
  11. <a-select-option v-for="(item, index) in OptionList" :key="index" :value="item.value">{{ item.label
  12. }}</a-select-option>
  13. </a-select>
  14. </a-form-item>
  15. <a-button type="primary" preIcon="ant-design:search-outlined" @click="getSearch">查询</a-button>
  16. <a-button type="primary" preIcon="ant-design:sync-outlined" @click="getReset">重置</a-button>
  17. </a-form>
  18. <a-table size="small" :dataSource="tableData" :columns="columns" :scroll="{ y: 420 }" :pagination="pagination"
  19. @change="pageChange">
  20. </a-table>
  21. </a-tab-pane>
  22. <a-tab-pane key="1" tab="读取集控风门日志">
  23. <a-form :model="formState" layout="inline" :label-col="{ span: 6 }" :wrapper-col="{ span: 18 }"
  24. autocomplete="off">
  25. <a-form-item label="操作类型">
  26. <a-select v-model:value="formState.nctrltype" style="width: 220px">
  27. <a-select-option v-for="(item, index) in controlOptionList" :key="index" :value="item.value">{{
  28. item.label
  29. }}</a-select-option>
  30. </a-select>
  31. </a-form-item>
  32. <a-button type="primary" preIcon="ant-design:search-outlined" @click="getSearch">查询</a-button>
  33. <a-button type="primary" preIcon="ant-design:sync-outlined" @click="getReset">重置</a-button>
  34. </a-form>
  35. <a-table size="small" :dataSource="controlTableData" :columns="controlColumns" :scroll="{ y: 420 }"
  36. :pagination="pagination" @change="pageChange">
  37. <template #action="{ record }">
  38. <a class="table-action-link" @click="handleSpDetail(record)">详情</a>
  39. </template>
  40. </a-table>
  41. </a-tab-pane>
  42. </a-tabs>
  43. <!-- 集控风门详情 -->
  44. <a-modal v-model:visible="visibleDetail" width="800px" title="详情信息" :footer="null" centered destroyOnClose>
  45. <a-table size="small" :dataSource="detailTableData" :columns="detailColumns" :scroll="{ y: 420 }"
  46. :pagination="false"></a-table>
  47. </a-modal>
  48. </a-modal>
  49. </div>
  50. </template>
  51. <script setup lang="ts">
  52. import { ref, reactive, watchEffect } from 'vue'
  53. import { pagination, columns, controlColumns, detailColumns, OptionList, controlOptionList } from '../airdoor.data'
  54. import { GetSyncRuleOperationLog, GetSyncRuleExecLog } from '../airdoor.api'
  55. let props = defineProps({
  56. visible: {
  57. type: Boolean,
  58. default: false
  59. },
  60. })
  61. let Visible = ref(false)
  62. let activeKey = ref('0')
  63. let tableData = ref<any[]>([])
  64. let controlTableData = ref<any[]>([])
  65. //集控风门详情弹窗
  66. let visibleDetail = ref(false)
  67. let detailTableData = ref<any[]>([])
  68. //操作类型
  69. let formState = reactive({
  70. operationType: '',
  71. nctrltype: "",
  72. })
  73. let $emit = defineEmits(['handleCancel'])
  74. //tabs选项切换
  75. function tabChange(val) {
  76. activeKey.value = val
  77. pagination.current = 1
  78. pagination.total = 0
  79. formState.nctrltype = ''
  80. formState.operationType = ''
  81. switch (activeKey.value) {
  82. case '0':
  83. getTableData()
  84. break;
  85. case '1':
  86. getControlTableData()
  87. break;
  88. }
  89. }
  90. //读写规则日志列表
  91. async function getTableData() {
  92. let res = await GetSyncRuleOperationLog({ pageNo: pagination.current, pageSize: pagination.pageSize, operationType: formState.operationType })
  93. console.log(res, '读写规则日志列表---')
  94. tableData.value = res.records || []
  95. pagination.total = res.total
  96. }
  97. //集控风门日志列表
  98. async function getControlTableData() {
  99. let res = await GetSyncRuleExecLog({ pageNo: pagination.current, pageSize: pagination.pageSize, nctrltype: formState.nctrltype })
  100. console.log(res, '集控风门列表---')
  101. controlTableData.value = res.records || []
  102. pagination.total = res.total
  103. }
  104. //集控风门详情
  105. function handleSpDetail(record) {
  106. visibleDetail.value = true
  107. let detailData = JSON.parse(record.failedDetailJson)
  108. console.log(detailData, '详情数据---')
  109. detailTableData.value = detailData
  110. }
  111. //切换分页
  112. function pageChange(val) {
  113. pagination.current = val.current;
  114. pagination.pageSize = val.pageSize;
  115. if (activeKey.value == '0') {
  116. getTableData();
  117. } else {
  118. getControlTableData()
  119. }
  120. }
  121. //查询
  122. function getSearch() {
  123. pagination.current = 1
  124. if (activeKey.value == '0') {
  125. getTableData();
  126. } else {
  127. getControlTableData()
  128. }
  129. }
  130. //重置
  131. function getReset() {
  132. pagination.current = 1
  133. if (activeKey.value == '0') {
  134. formState.operationType = ''
  135. getTableData();
  136. } else {
  137. formState.nctrltype = ''
  138. getControlTableData()
  139. }
  140. }
  141. function handleCancel() {
  142. formState.nctrltype = ''
  143. formState.operationType = ''
  144. $emit('handleCancel', false)
  145. }
  146. watchEffect(() => {
  147. Visible.value = props.visible
  148. activeKey.value = '0'
  149. if (Visible.value) {
  150. getTableData()
  151. }
  152. })
  153. </script>
  154. <style lang="less" scoped>
  155. .zxm-tabs {
  156. margin: 0px 10px;
  157. }
  158. .zxm-form {
  159. margin-bottom: 15px;
  160. }
  161. .zxm-btn {
  162. margin: 0px 10px;
  163. }
  164. ::v-deep .zxm-table-small {
  165. margin: 10px !important;
  166. }
  167. </style>