Bladeren bron

fix:修改任务详情-工作流程、消息通知

luzhixia 1 week geleden
bovenliggende
commit
d5d62348d9
1 gewijzigde bestanden met toevoegingen van 225 en 0 verwijderingen
  1. 225 0
      src/components/task/mounTaskComponents/messageNotify.vue

+ 225 - 0
src/components/task/mounTaskComponents/messageNotify.vue

@@ -0,0 +1,225 @@
+<template>
+  <div class="message-notify-container">
+    <el-table
+      style="width: 100%; margin-top: 20px"
+      border
+      :data="localFormData"
+    >
+      <el-table-column prop="id" label="序号" width="80" align="center">
+        <template slot-scope="scope">
+          {{ scope.$index + 1 }}
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="noticeTitle"
+        label="消息主题"
+        width="200"
+        align="center"
+      ></el-table-column>
+      <el-table-column
+        prop="noticeSource"
+        label="消息来源"
+        width="220"
+        align="center"
+        show-overflow-tooltip
+      ></el-table-column>
+      <el-table-column
+        prop="auditObject"
+        label="发送对象"
+        width="150"
+        align="center"
+        show-overflow-tooltip
+      ></el-table-column>
+      <el-table-column
+        prop="noticeContent"
+        label="消息内容"
+        min-width="350"
+        header-align="center"
+        align="left"
+        show-overflow-tooltip
+      ></el-table-column>
+      <el-table-column
+        prop="createTime"
+        label="发送时间"
+        width="100"
+        align="center"
+      ></el-table-column>
+    </el-table>
+    <el-pagination
+      background
+      layout="total, sizes, prev, pager, next"
+      :current-page="internalPagination.currentPage"
+      :page-sizes="[10, 20, 30, 50]"
+      :page-size="internalPagination.pageSize"
+      :total="internalPagination.total"
+      style="margin-top: 20px; text-align: right"
+      @current-change="handleCurrentChange"
+      @size-change="handleSizeChange"
+    />
+  </div>
+</template>
+<script>
+  import { sendMessage } from '@/api/auditTaskProcessing'
+  export default {
+    name: 'MessageNoticeTab',
+    props: {
+      id: {
+        type: String,
+        default: '',
+      },
+      formData: {
+        type: Array,
+        default: () => [],
+      },
+      pagination: {
+        type: Object,
+        default: () => ({ currentPage: 1, pageSize: 10, total: 0 }),
+      },
+      selectedProject: {
+        type: Object,
+        default: () => ({}),
+      },
+    },
+    data() {
+      return {
+        internalPagination: {
+          currentPage: 1,
+          pageSize: 10,
+          total: 0,
+        },
+        localFormData: [],
+      }
+    },
+    watch: {
+      pagination: {
+        handler(newVal) {
+          if (newVal) {
+            this.internalPagination = {
+              currentPage: newVal.currentPage || 1,
+              pageSize: newVal.pageSize || 10,
+              total: newVal.total || 0,
+            }
+          }
+        },
+        immediate: true,
+        deep: true,
+      },
+      formData: {
+        handler(newVal) {
+          this.localFormData = newVal || []
+        },
+        immediate: true,
+        deep: true,
+      },
+      // id: {
+      //   handler(newVal) {
+      //     if (newVal) {
+      //       // 重置到第一页并重新加载
+      //       this.internalPagination.currentPage = 1
+      //       this.getNoticeList()
+      //     }
+      //   },
+      //   immediate: false,
+      // },
+    },
+    mounted() {
+      // 初始化分页数据
+      // if (this.pagination) {
+      //   this.internalPagination = {
+      //     currentPage: this.pagination.currentPage || 1,
+      //     pageSize: this.pagination.pageSize || 10,
+      //     total: this.pagination.total || 0,
+      //   }
+      // }
+      // if (this.formData) {
+      //   this.localFormData = this.formData
+      // }
+      // this.getNoticeList()
+    },
+    methods: {
+      // 处理页码变化
+      handleCurrentChange(page) {
+        this.internalPagination.currentPage = page
+        this.getNoticeList()
+      },
+      // 处理每页条数变化
+      handleSizeChange(size) {
+        this.internalPagination.pageSize = size
+        this.internalPagination.currentPage = 1 // 重置到第一页
+        this.getNoticeList()
+      },
+      // 获取消息通知列表
+      async getNoticeList() {
+        // 检查是否有子项目
+        if (
+          !this.selectedProject ||
+          !this.selectedProject.children ||
+          !Array.isArray(this.selectedProject.children) ||
+          this.selectedProject.children.length === 0
+        ) {
+          this.localFormData = []
+          this.internalPagination.total = 0
+          return
+        }
+
+        try {
+          // 获取所有子项目(包含id和auditObject)
+          const children = this.selectedProject.children.filter(
+            (child) => child.id
+          )
+
+          // 为每个子项目发送请求,并保存对应的auditObject
+          const promises = children.map((child) => {
+            const params = {
+              taskId: child.id,
+              pageNum: this.internalPagination.currentPage,
+              pageSize: this.internalPagination.pageSize,
+            }
+            // 发送请求并返回结果和对应的auditObject
+            return sendMessage(params).then((res) => ({
+              res,
+              auditObject: child.auditObject,
+            }))
+          })
+
+          // 并行处理所有请求
+          const results = await Promise.all(promises)
+
+          // 合并所有结果,并为每条记录添加auditObject
+          let allRecords = []
+          let totalCount = 0
+
+          results.forEach(({ res, auditObject }) => {
+            if (res && res.code === 200 && res.value) {
+              // 为每条记录添加auditObject
+              const recordsWithAuditObject = (res.value.records || []).map(
+                (record) => ({
+                  ...record,
+                  auditObject,
+                })
+              )
+              allRecords = allRecords.concat(recordsWithAuditObject)
+              totalCount += res.value.total || 0
+            }
+          })
+
+          // 更新表格数据
+          this.localFormData = allRecords
+          this.internalPagination.total = totalCount
+        } catch (err) {
+          console.error('获取消息通知失败', err)
+          this.localFormData = []
+          this.internalPagination.total = 0
+        } finally {
+        }
+      },
+    },
+  }
+</script>
+
+<style scoped>
+  /* 移除最外层容器的 padding */
+  div {
+    padding: 0;
+  }
+</style>