suhp 1 месяц назад
Родитель
Сommit
fa7e95d687

+ 834 - 0
src/views/costAudit/auditInfo/auditManage/auditDocumentsMain.vue

@@ -0,0 +1,834 @@
+<template>
+  <div class="catalog-manage">
+    <div class="documents-layout">
+      <!-- 左侧文书类型列表 -->
+      <div class="documents-type-list">
+        <h3>监审文书类型:</h3>
+        <div
+          v-for="type in documentData.documentTypes"
+          :key="type.id"
+          class="type-item"
+        >
+          {{ type.documentName }}
+        </div>
+      </div>
+
+      <!-- 右侧文书列表表格 -->
+      <div class="documents-content">
+        <div class="operation-bar">
+          <el-button
+            plain
+            type="success"
+            icon="el-icon-circle-plus"
+            :disabled="isView"
+            @click="handleGenerateDocument"
+          >
+            生成文书
+          </el-button>
+        </div>
+        <CostAuditTable
+          :table-data="documentData.list"
+          :columns="documentData.documentColumns"
+          :show-index="true"
+          :show-pagination="true"
+          :show-action-column="true"
+          :pagination="documentData.pagination"
+          @pagination-change="handlePaginationChange"
+        >
+          <template #documentId="{ row }">
+            {{ getDocumenType(row) }}
+          </template>
+          <template #enterpriseId="{ row }">
+            {{ getEnterpriseName(row) }}
+          </template>
+          <template #scanDocumentUrl="scope">
+            <el-button
+              type="text"
+              size="mini"
+              :disabled="isView"
+              @click="handleUploadScan(scope.row, 'scanDocumentUrl')"
+            >
+              上传附件
+            </el-button>
+            <el-button
+              type="text"
+              size="mini"
+              @click="
+                handleViewScan(scope.row.scanDocumentUrl, 'scanDocumentUrl')
+              "
+            >
+              查看附件
+            </el-button>
+          </template>
+          <template #feedbackDocumentUrl="scope">
+            <!-- <el-button
+              type="text"
+              size="mini"
+              :disabled="isView"
+              @click="handleUploadScan(scope.row, 'feedbackDocumentUrl')"
+            >
+              上传附件
+            </el-button> -->
+            <el-button
+              type="text"
+              size="mini"
+              @click="
+                handleViewScan(
+                  scope.row.feedbackDocumentUrl,
+                  'feedbackDocumentUrl'
+                )
+              "
+            >
+              查看附件
+            </el-button>
+          </template>
+          <template #electronicDocumentUrl="scope">
+            <el-button
+              type="text"
+              size="mini"
+              :disabled="isView"
+              @click="handleEditDocument(scope.row)"
+            >
+              修改
+            </el-button>
+            <el-button
+              type="text"
+              size="mini"
+              :disabled="isView"
+              @click="handleSignDocument(scope.row)"
+            >
+              签章
+            </el-button>
+            <el-button
+              type="text"
+              size="mini"
+              :disabled="isView"
+              @click="handleDeleteDocument(scope.row)"
+            >
+              删除
+            </el-button>
+            <el-button
+              type="text"
+              size="mini"
+              @click="handleDownloadDocument(scope.row)"
+            >
+              下载
+            </el-button>
+          </template>
+        </CostAuditTable>
+      </div>
+    </div>
+    <div style="margin-top: 20px; font-size: 14px" class="table-description">
+      说明:此处只能生成各被监审单位的《成本监审通知书》和《送达回证》,同时接收或上传被监审单位的反馈的《送达回证》。
+    </div>
+
+    <!-- 编辑监审通知书 -->
+    <CostAuditDialog
+      :title="documentDialogTitle"
+      :visible="documentDialogVisible"
+      :width="dialogWidth"
+      :close-on-click-modal="false"
+      @cancel="handleCancel"
+      @confirm="handleConfirm"
+    >
+      <div class="document-edit-container">
+        <!-- 左侧:文书参数设置 -->
+        <div class="document-params">
+          <h4>文书参数设置:</h4>
+          <el-form
+            v-loading="loading.saveDocument"
+            :model="document"
+            label-width="160px"
+            size="small"
+          >
+            <el-form-item label="选择模板:">
+              <el-select
+                v-model="document.documentId"
+                placeholder="请选择模板"
+                style="width: 100%"
+                @change="handleTemplateChange"
+              >
+                <el-option
+                  v-for="item in documentData.documentTypes"
+                  :key="item.id"
+                  :label="item.documentName"
+                  :value="item.id"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="通知书文号:" prop="documentWhId">
+              <el-input
+                v-model="document.documentNumber"
+                placeholder="请选择通知书文号"
+                style="width: 74%"
+              ></el-input>
+              <!-- disabled -->
+              <el-button
+                type="primary"
+                size="small"
+                class="ml10"
+                @click="selectClick"
+              >
+                选择文号
+              </el-button>
+            </el-form-item>
+            <el-form-item label="被监审单位:">
+              <el-select
+                v-model="document.enterpriseId"
+                placeholder="请选择被监审单位"
+                style="width: 100%"
+                clearable
+                multiple
+              >
+                <el-option
+                  v-for="item in allUnits"
+                  :key="item.unitId"
+                  :label="item.unitName"
+                  :value="item.unitId"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="是否推送被监审单位:">
+              <!-- 是否推送被监审单位 -->
+              <el-radio-group v-model="document.isPush">
+                <el-radio label="1">是</el-radio>
+                <el-radio label="0">否</el-radio>
+              </el-radio-group>
+            </el-form-item>
+            <!-- <el-form-item label="被监审单位:">
+              <el-select
+                v-model="document.enterpriseId"
+                placeholder="请选择被监审单位"
+                style="width: 100%"
+                clearable
+              >
+                <el-option
+                  v-for="item in allUnits"
+                  :key="item.unitId"
+                  :label="item.unitName"
+                  :value="item.unitId"
+                ></el-option>
+              </el-select>
+            </el-form-item> -->
+
+            <!-- 数据内容区域 -->
+            <div style="margin-top: 20px">
+              <h4 style="margin-bottom: 10px">数据内容:</h4>
+              <el-table
+                :data="costDocumentTemplateFiles"
+                style="
+                  width: 100%;
+                  border: 1px solid #dcdfe6;
+                  border-radius: 4px;
+                "
+              >
+                <el-table-column
+                  prop="originalText"
+                  label="数据项"
+                  width="120"
+                  align="center"
+                ></el-table-column>
+                <el-table-column
+                  prop="label"
+                  label="标签"
+                  width="100"
+                  align="center"
+                ></el-table-column>
+                <el-table-column
+                  prop="originalText"
+                  label="描述"
+                  min-width="120"
+                  align="left"
+                ></el-table-column>
+                <el-table-column
+                  prop="dataValue"
+                  label="数据值"
+                  min-width="150"
+                  align="left"
+                ></el-table-column>
+              </el-table>
+              <div style="margin-top: 10px; font-size: 12px; color: #909399">
+                说明:数据内容不可修改,已在监审文书管理中配置完成,数据值为本次监审项目的相关数据。
+              </div>
+            </div>
+          </el-form>
+        </div>
+
+        <!-- 右侧:模板预览和编辑区 -->
+        <div class="document-preview">
+          <!-- 预览/修改标签页 -->
+          <TemplatePreviewEdit :active-tab="activeTab" :file-url="fileUrl" />
+        </div>
+      </div>
+    </CostAuditDialog>
+    <CostAuditDialog
+      :title="dialogTitle"
+      :visible="dialogVisible"
+      :width="dialogWidth"
+      :close-on-click-modal="false"
+      @cancel="handleCancel"
+      @confirm="handleConfirm"
+    >
+      <cost-audit-table
+        :table-data="selectDocumentWhData"
+        :columns="selectDocumentWhColumns"
+        :show-selection="true"
+        :show-pagination="true"
+        :pagination="selectDocumentWhPagination"
+        @pagination-change="selectDocumentWhPaginationChange"
+        @selection-change="selectDocumentWhSelectionChange"
+      >
+        <!-- 创建时间自定义单元格 -->
+        <template #createTime="{ row }">
+          <div>{{ row.createTime ? row.createTime.split(' ')[0] : '-' }}</div>
+          <div>{{ row.createTime ? row.createTime.split(' ')[1] : '-' }}</div>
+        </template>
+      </cost-audit-table>
+    </CostAuditDialog>
+  </div>
+</template>
+<script>
+  // import { taskMixin } from './index.js'
+  import CostAuditTable from '@/components/costAudit/CostAuditTable.vue'
+  import CostAuditDialog from '@/components/costAudit/CostAuditDialog.vue'
+  import TemplatePreviewEdit from '@/components/costAudit/TemplatePreviewEdit.vue'
+  import { getAllUnitList } from '@/api/auditEntityManage'
+  import {
+    getWhCateList,
+    queryByDocumentId,
+  } from '@/api/auditReviewDocManage.js'
+  import { getData } from '@/api/auditDocNoManage.js'
+  import {
+    addCostProjectDocument,
+    updateCostProjectDocument,
+    deleteCostProjectDocument,
+  } from '@/api/taskCustomizedRelease.js'
+  import { dictMixin, regionMixin } from '@/mixins/useDict'
+  import { uploadFile } from '@/api/file'
+  export default {
+    components: { CostAuditTable, CostAuditDialog, TemplatePreviewEdit },
+    mixins: [dictMixin, regionMixin],
+    props: {
+      // 父组件传递的参数
+      project: {
+        type: Object,
+        default: () => {},
+      },
+      isView: {
+        type: Boolean,
+        default: false,
+      },
+      documentData: {
+        type: Object,
+        default: () => ({
+          documentTypes: [],
+          list: [],
+          pagination: {},
+          dataList: [],
+          documentColumns: [],
+        }),
+      },
+    },
+    data() {
+      return {
+        dictData: {
+          whGenerateType: [],
+        },
+        document: {
+          documentId: '',
+          documentWhId: '',
+          documentNumber: '',
+          enterpriseId: [],
+          dataList: [],
+        },
+        loading: {
+          saveDocument: false,
+        },
+        activeView: 'list', // list edit
+        activeTab: 'preview', // 当前标签页,preview:预览,edit:修改
+        // 所有单位列表
+        allUnits: [],
+        dialogVisible: false,
+        dialogTitle: '选择文号',
+        documentDialogVisible: false,
+        documentDialogTitle: '编辑监审通知书',
+        dialogWidth: '70%',
+        fileUrl: '',
+        selectDocumentWhData: [],
+        selectDocumentWhPagination: {
+          currentPage: 1,
+          pageSize: 10,
+          total: 0,
+        },
+        selectDocumentWhSelection: [],
+        costDocumentTemplateFiles: [],
+      }
+    },
+    computed: {
+      selectDocumentWhColumns() {
+        return [
+          {
+            prop: 'whType',
+            label: '文号分类',
+            showOverflowTooltip: true,
+            align: 'center',
+            formatter: (row) => {
+              let documentName =
+                this.documentData.documentTypes.find(
+                  (item) => item.id == row.whType
+                )?.documentName || '-'
+              return documentName
+            },
+          },
+          {
+            prop: 'whName',
+            label: '文号名称',
+            showOverflowTooltip: true,
+            align: 'center',
+          },
+          {
+            prop: 'areaCode',
+            label: '适用区域',
+            showOverflowTooltip: true,
+            align: 'center',
+            formatter: (row) => this.regionNameMap[row.areaCode] || '-',
+          },
+          {
+            prop: 'generateType',
+            label: '生成类型',
+            showOverflowTooltip: true,
+            align: 'center',
+            width: 120,
+            formatter: (row) =>
+              this.getDictName('whGenerateType', row.generateType),
+          },
+        ]
+      },
+    },
+    // 添加watch监听project变化,确保项目数据更新时重新加载数据
+    watch: {
+      project: {
+        handler(newVal) {
+          if (newVal && newVal.projectId) {
+            // 通知父组件需要加载数据
+            this.$emit('refresh', newVal.projectId)
+          }
+        },
+        deep: true,
+        immediate: true,
+      },
+    },
+    mounted() {
+      this.loadOpts()
+    },
+    methods: {
+      getEnterpriseName(row) {
+        // 处理enterpriseId,无论是数组还是逗号分隔的字符串
+        let enterpriseIds = []
+        if (Array.isArray(row.enterpriseId)) {
+          enterpriseIds = row.enterpriseId
+        } else if (typeof row.enterpriseId === 'string') {
+          // 处理逗号分隔的字符串
+          enterpriseIds = row.enterpriseId
+            .split(',')
+            .map((id) => id.trim())
+            .filter((id) => id)
+        } else if (row.enterpriseId) {
+          // 处理其他可能的非空值
+          enterpriseIds = [row.enterpriseId]
+        }
+
+        if (enterpriseIds.length > 0) {
+          // 返回多个企业名称,用逗号分隔
+          return enterpriseIds
+            .map(
+              (id) => this.allUnits.find((item) => item.unitId == id)?.unitName
+            )
+            .filter((name) => name)
+            .join(', ')
+        }
+        return '-'
+      },
+      getDocumenType(row) {
+        return this.documentData.documentTypes.find(
+          (item) => item.id == row.documentId
+        )?.documentName
+      },
+      handlePaginationChange({ currentPage, pageSize }) {
+        this.$emit('paginationChange', { currentPage, pageSize })
+      },
+
+      // 加载选项数据
+      loadOpts() {
+        // 加载所有单位列表
+        getAllUnitList().then((res) => {
+          this.allUnits = res.value || []
+          // 过滤掉状态为停用的数据
+          this.allUnits = this.allUnits.filter((item) => item.status == 1)
+        })
+      },
+
+      // 生成文书
+      handleGenerateDocument() {
+        this.documentDialogVisible = true
+        this.activeView = 'form'
+        this.document = {
+          documentId: '',
+          documentWhId: '',
+          documentNumber: '',
+          enterpriseId: [],
+        }
+        this.costProjectDocumentFiles = []
+      },
+      selectClick() {
+        this.dialogVisible = true
+        this.activeView = 'table'
+        this.getWhListData()
+      },
+      getWhListData() {
+        getData({
+          pageNum: this.selectDocumentWhPagination.currentPage,
+          pageSize: this.selectDocumentWhPagination.pageSize,
+          whType: this.document.documentId,
+        }).then((res) => {
+          this.selectDocumentWhData = res.value.records || []
+          this.selectDocumentWhPagination.total = res.value.total || 0
+        })
+      },
+      selectDocumentWhPaginationChange({ currentPage, pageSize }) {
+        this.selectDocumentWhPagination.currentPage = currentPage
+        this.selectDocumentWhPagination.pageSize = pageSize
+      },
+      selectDocumentWhSelectionChange(selection) {
+        if (selection.length > 1) {
+          this.$message.error('只能选择一个文号!')
+          return
+        } else {
+          this.selectDocumentWhSelection = selection
+        }
+      },
+      // 选择文档类型
+      selectDocumentType(doc) {
+        // this.documentData.selectedDoc = doc.value
+      },
+      handleTemplateChange() {
+        this.fileUrl = this.documentData.documentTypes.find(
+          (item) => item.id === this.document.documentId
+        ).fileUrl
+        this.getDocumentData(this.document.documentId)
+      },
+      getDocumentData(documentId) {
+        if (documentId) {
+          queryByDocumentId({ documentId }).then((res) => {
+            this.costDocumentTemplateFiles = res.value || []
+          })
+        }
+      },
+      handleConfirm() {
+        switch (this.activeView) {
+          case 'table':
+            this.handleConfirmSelect()
+            break
+          case 'form':
+            this.handleSaveDocument()
+            break
+          default:
+            break
+        }
+      },
+      handleConfirmSelect() {
+        if (this.selectDocumentWhSelection.length !== 1) {
+          this.$message.error('请选择一个文号!')
+          return
+        }
+
+        this.document.documentNumber = this.selectDocumentWhSelection[0].whNo
+        this.document.documentWhId = this.selectDocumentWhSelection[0].id // 假设这是正确的字段名
+        this.dialogVisible = false
+        this.activeView = 'form'
+      },
+      // 保存文档
+      handleSaveDocument() {
+        // 验证是否选择了企业
+        if (
+          !this.document.enterpriseId ||
+          this.document.enterpriseId.length === 0
+        ) {
+          this.$message.error('请至少选择一个被监审单位!')
+          return
+        }
+
+        this.loading.saveDocument = true
+        if (this.document.id) {
+          updateCostProjectDocument({
+            id: this.document.id,
+            // documentAlias: this.document.documentAlias,
+            documentId: this.document.documentId,
+            documentNumber: this.document.documentNumber,
+            documentWhId: this.document.documentWhId,
+            costProjectDocumentFiles: this.costProjectDocumentFiles || [],
+            // isPushed: this.document.isPushed,
+            projectId: this.project.projectId,
+            // electronicDocumentUrl: '',
+            enterpriseId: this.document.enterpriseId.join(','), // 保存时转换为逗号分隔的字符串
+            // feedbackDocumentUrl: '',
+            // feedbackTime: '',
+            // generateTime: '',
+          })
+            .then((res) => {
+              this.loading.saveDocument = false
+              this.$message.success('保存成功!')
+              this.documentDialogVisible = false
+              this.activeView = ''
+              this.$emit('refresh', this.project.projectId)
+            })
+            .catch((err) => {
+              this.loading.saveDocument = false
+            })
+        } else {
+          // 处理多选逻辑,如果选择了多个单位,为每个单位创建一个文档记录
+          const promises = this.document.enterpriseId.map((enterpriseId) => {
+            return addCostProjectDocument({
+              // documentAlias: this.document.documentAlias,
+              projectId: this.project.projectId,
+              documentId: this.document.documentId,
+              documentNumber: this.document.documentNumber,
+              documentWhId: this.document.documentWhId,
+              costProjectDocumentFiles: this.costProjectDocumentFiles || [],
+              enterpriseId: enterpriseId,
+              // electronicDocumentUrl: '',
+              // feedbackDocumentUrl: '',
+              // feedbackTime: '',
+              // generateTime: '',
+              isPushed: this.document.isPushed,
+              // orderNum: 0,
+              // pushTime: '',
+              // scanDocumentUrl: '',
+            })
+          })
+
+          Promise.all(promises)
+            .then(() => {
+              this.loading.saveDocument = false
+              this.$message.success('保存成功!')
+              this.dialogVisible = false
+              this.activeView = ''
+              this.$emit('refresh', this.project.projectId)
+            })
+            .catch((err) => {
+              this.loading.saveDocument = false
+            })
+        }
+      },
+      // 处理取消
+      handleCancel() {
+        if (this.activeView === 'form') {
+          this.documentDialogVisible = false
+        } else {
+          this.activeView = 'form'
+          this.dialogVisible = false
+        }
+      },
+
+      // 上传扫描件
+      handleUploadScan(row, type) {
+        let loading = null
+        // 第一步:创建文件选择器
+        const input = document.createElement('input')
+        input.type = 'file'
+        input.accept = '.pdf,.doc,.docx,.xls,.xlsx,.csv' // 允许的文件类型
+
+        input.onchange = async (event) => {
+          const file = event.target.files[0]
+          if (!file) return
+
+          try {
+            // 校验文件大小(50MB)
+            const maxSize = 50 * 1024 * 1024 // 50MB
+            if (file.size > maxSize) {
+              this.$message.error('文件大小不能超过50MB!')
+              return
+            }
+
+            // 校验文件格式
+            const allowedFormats = [
+              '.pdf',
+              '.doc',
+              '.docx',
+              '.xls',
+              '.xlsx',
+              'csv',
+            ]
+            const fileName = file.name.toLowerCase()
+            const isValidFormat = allowedFormats.some((format) =>
+              fileName.endsWith(format)
+            )
+
+            if (!isValidFormat) {
+              this.$message.error(
+                '只允许上传.pdf,.doc,.docx,.xls,.xlsx,.csv格式的文件!'
+              )
+              return
+            }
+
+            // 显示遮罩层
+            loading = this.$baseLoading(1, '文件上传中...')
+
+            // 第三步:创建FormData并上传文件
+            const formData = new FormData()
+            formData.append('file', file)
+
+            // 先调用上传API
+            const uploadRes = await uploadFile('/api/file/v1/upload', formData)
+
+            // 第四步:检查上传结果
+            if (!uploadRes || !uploadRes.value) {
+              // this.$message.error('文件上传失败!');
+              return
+            }
+
+            // 第五步:文件上传成功后,再更新数据
+            const fileInfo = uploadRes.value
+            // 创建更新数据对象
+            const updateData = {
+              ...row,
+              scanDocumentUrl: fileInfo?.savePath, // 更新扫描件URL
+            }
+
+            // 第六步:调用更新API
+            await updateCostProjectDocument(updateData)
+
+            // 第七步:更新成功,显示提示并刷新
+            this.$message.success('文件上传成功并更新数据!')
+            this.$emit('refresh', this.project.projectId) // 通知父组件刷新
+          } catch (error) {
+            // 错误处理
+            this.$message.error('操作失败:' + (error.message || '未知错误'))
+          } finally {
+            // 关闭遮罩层
+            loading.close()
+          }
+        }
+        // 触发文件选择
+        input.click()
+      },
+      // 查看扫描件
+      handleViewScan(fileUrl, type) {
+        if (!fileUrl) {
+          this.$message.error('暂无文件!')
+          return
+        }
+        // 对文件URL进行Base64编码
+        const encodedUrl = encodeURIComponent(
+          Base64.encode(window.context.form + fileUrl)
+        )
+
+        // 构建 kkFileView 预览URL
+        // onlinePreview - 在线预览
+        // onlinePreview?type=pdf - 强制使用PDF模式预览
+        window.open(`${host}:8012/onlinePreview?url=${encodedUrl}`)
+      },
+      // 编辑文档
+      handleEditDocument(row) {
+        this.documentDialogVisible = true
+        this.activeView = 'form'
+        this.loadOpts()
+        // 确保enterpriseId是数组格式,处理可能的逗号分隔字符串
+        const enterpriseId = row.enterpriseId
+          ? Array.isArray(row.enterpriseId)
+            ? row.enterpriseId
+            : typeof row.enterpriseId === 'string'
+            ? row.enterpriseId
+                .split(',')
+                .map((id) => id.trim())
+                .filter((id) => id) // 将逗号分隔字符串转换为数组
+            : [row.enterpriseId]
+          : []
+        this.document = {
+          ...row,
+          enterpriseId,
+        }
+      },
+
+      // 签章
+      handleSignDocument(row) {},
+
+      // 删除文档
+      handleDeleteDocument(row) {
+        this.$confirm('确定要删除该数据吗?', '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning',
+        }).then(() => {
+          deleteCostProjectDocument(row.id).then((res) => {
+            this.$message.success('删除成功!')
+            this.$emit('refresh', this.project.projectId)
+          })
+        })
+      },
+
+      // 下载文档
+      handleDownloadDocument(row) {},
+    },
+  }
+</script>
+<style lang="scss" scoped>
+  @import '@/styles/costAudit.scss';
+  .documents-layout {
+    display: flex;
+    margin-bottom: 20px;
+  }
+
+  .documents-type-list {
+    width: 200px;
+    border: 1px solid #ebeef5;
+    border-radius: 5px;
+    padding: 10px;
+    margin-right: 20px;
+  }
+
+  .documents-type-list h3 {
+    margin-bottom: 10px;
+    font-size: 14px;
+    font-weight: bold;
+  }
+
+  .type-item {
+    padding: 5px 0;
+    cursor: pointer;
+    font-size: 12px;
+  }
+
+  .type-item:hover {
+    color: #409eff;
+  }
+
+  .documents-content {
+    flex: 1;
+  }
+
+  .generate-btn {
+    margin-bottom: 10px;
+  }
+
+  .cursor-pointer {
+    cursor: pointer;
+  }
+
+  .mt10 {
+    margin-top: 10px;
+  }
+
+  .mt20 {
+    margin-top: 20px;
+  }
+  .document-edit-container {
+    display: flex;
+    .document-params {
+      width: 50%;
+    }
+    .document-preview {
+      width: 50%;
+    }
+  }
+</style>

+ 0 - 1
src/views/costAudit/auditInfo/auditManage/auditOpinion.vue

@@ -131,7 +131,6 @@
     </div>
   </div>
 </template>
-
 <script>
   import {
     getPreliminaryOpinion,

+ 59 - 0
src/views/costAudit/auditInfo/auditManage/collectiveMain.vue

@@ -0,0 +1,59 @@
+<template>
+  <div class="collective">
+    <div class="collective-header">
+      <div class="collective-header-left">
+        <span>集体审议</span>
+      </div>
+    </div>
+  </div>
+</template>
+<script>
+  export default {
+    name: 'Collective',
+    components: {},
+    props: {
+      visible: {
+        type: Boolean,
+        default: true,
+      },
+      id: {
+        type: [String, Number],
+        default: null,
+      },
+      currentNode: {
+        type: String,
+        default: '',
+      },
+      currentStatus: {
+        type: String,
+        default: '',
+      },
+    },
+    data() {
+      return {
+        buttonData: [], //集体审议按钮数据
+        activeTab: 'submitData', // 默认选中集体审议标签页
+        // 弹窗显示状态
+        showSupplementDialog: false,
+        showAbortDialog: false,
+        showRejectDialog: false,
+        // 弹窗数据
+        additionalParams: {},
+        // 当前操作按钮信息
+        currentButton: null,
+      }
+    },
+    computed: {
+      dialogTitle() {
+        // 根据节点类型设置标题
+        if (
+          this.currentNode === 'sdshenhe' &&
+          this.currentStatus === '审核中'
+        ) {
+          return '集体审议详情'
+        }
+        return '集体审议详情'
+      },
+    },
+  }
+</script>

+ 59 - 0
src/views/costAudit/auditInfo/auditManage/conclusionMain.vue

@@ -0,0 +1,59 @@
+<template>
+  <div class="collective">
+    <div class="collective-header">
+      <div class="collective-header-left">
+        <span>出具结论</span>
+      </div>
+    </div>
+  </div>
+</template>
+<script>
+  export default {
+    name: 'Collective',
+    components: {},
+    props: {
+      visible: {
+        type: Boolean,
+        default: true,
+      },
+      id: {
+        type: [String, Number],
+        default: null,
+      },
+      currentNode: {
+        type: String,
+        default: '',
+      },
+      currentStatus: {
+        type: String,
+        default: '',
+      },
+    },
+    data() {
+      return {
+        buttonData: [], //集体审议按钮数据
+        activeTab: 'submitData', // 默认选中集体审议标签页
+        // 弹窗显示状态
+        showSupplementDialog: false,
+        showAbortDialog: false,
+        showRejectDialog: false,
+        // 弹窗数据
+        additionalParams: {},
+        // 当前操作按钮信息
+        currentButton: null,
+      }
+    },
+    computed: {
+      dialogTitle() {
+        // 根据节点类型设置标题
+        if (
+          this.currentNode === 'sdshenhe' &&
+          this.currentStatus === '审核中'
+        ) {
+          return '集体审议详情'
+        }
+        return '集体审议详情'
+      },
+    },
+  }
+</script>

+ 0 - 2
src/views/costAudit/auditInfo/auditManage/costAudit.vue

@@ -113,10 +113,8 @@
 </template>
 
 <script>
-  import taskMixins from './taskMixins.js'
   export default {
     name: 'CostAudit',
-    mixins: [taskMixins],
     data() {
       return {
         auditForm: {

+ 1 - 4
src/views/costAudit/auditInfo/auditManage/costSurvey.vue

@@ -47,8 +47,5 @@
   </div>
 </template>
 <script>
-  import taskMixins from './taskMixins.js'
-  export default {
-    mixins: [taskMixins],
-  }
+  export default {}
 </script>

+ 1 - 4
src/views/costAudit/auditInfo/auditManage/dataRequirements.vue

@@ -51,8 +51,5 @@
   </div>
 </template>
 <script>
-  import taskMixins from './taskMixins.js'
-  export default {
-    mixins: [taskMixins],
-  }
+  export default {}
 </script>

+ 0 - 1
src/views/costAudit/auditInfo/auditManage/details.vue

@@ -161,7 +161,6 @@
     </el-dialog>
   </div>
 </template>
-
 <script>
   import costAudit from './costAudit.vue'
   import costSurvey from './costSurvey.vue'

+ 0 - 2
src/views/costAudit/auditInfo/auditManage/index.vue

@@ -200,7 +200,6 @@
   import { doProcessBtn } from '@/api/dataPreliminaryReview'
   import detailsDialog from './details.vue'
   import mainDetailsDialog from './mainDetails.vue'
-  import taskMixins from './taskMixins.js'
   // 成本监审任务列表API
   import { getReviewTaskList } from '@/api/audit/auditIndex'
   import taskInfo from '@/components/task/taskInfo.vue'
@@ -211,7 +210,6 @@
       taskInfo,
       mainDetailsDialog,
     },
-    mixins: [taskMixins],
     data() {
       return {
         // 分页相关

+ 39 - 13
src/views/costAudit/auditInfo/auditManage/mainDetails.vue

@@ -8,37 +8,63 @@
     >
       <!-- 操作按钮区域 -->
       <div class="btn-group">
-        <el-button
-          v-for="item in buttonData"
-          :key="item.id"
-          type="primary"
-          @click="handleAuditPass(item)"
-        >
-          {{ item.value }}
-        </el-button>
+        <div class="process-actions">
+          <el-button type="primary" @click="handleNextStep">
+            流转下一步
+          </el-button>
+          <el-button type="primary" @click="handlePrevStep">
+            退回上一步
+          </el-button>
+          <el-button type="primary" @click="handleAddTask">办结任务</el-button>
+          <el-button type="primary" @click="handleAssign">退回</el-button>
+        </div>
       </div>
       <!-- 标签页面 -->
       <el-tabs v-model="activeTab" type="card" class="audit-tabs">
-        <el-tab-pane label="监审文书" name="submitData"></el-tab-pane>
-        <el-tab-pane label="集体审议" name="costSurvey"></el-tab-pane>
+        <el-tab-pane label="监审文书" name="submitData">
+          <auditDocumentsMain
+            :id="id"
+            :current-node="currentNode"
+            :current-status="currentStatus"
+          />
+        </el-tab-pane>
+        <el-tab-pane label="集体审议" name="costSurvey">
+          <collectiveMain
+            :id="id"
+            :current-node="currentNode"
+            :current-status="currentStatus"
+          />
+        </el-tab-pane>
         <el-tab-pane
           v-if="currentNode !== 'clcs'"
           label="出具结论"
           name="costAudit"
-        ></el-tab-pane>
+        >
+          <conclusionMain
+            :id="id"
+            :current-node="currentNode"
+            :current-status="currentStatus"
+          />
+        </el-tab-pane>
       </el-tabs>
     </el-drawer>
   </div>
 </template>
-
 <script>
+  import auditDocumentsMain from './auditDocumentsMain.vue'
+  import collectiveMain from './collectiveMain.vue'
+  import conclusionMain from './conclusionMain.vue'
   import {
     getDataPreliminaryReviewButton,
     doProcessBtn,
   } from '@/api/dataPreliminaryReview'
   export default {
     name: 'Details',
-    components: {},
+    components: {
+      auditDocumentsMain,
+      collectiveMain,
+      conclusionMain,
+    },
     props: {
       visible: {
         type: Boolean,

+ 0 - 3
src/views/costAudit/auditInfo/auditManage/taskDetail.vue

@@ -443,16 +443,13 @@
   </div>
 </template>
 <script>
-  import taskMixins from './taskMixins.js'
   import dataRequirements from './dataRequirements.vue'
   import costSurvey from './costSurvey.vue'
-
   export default {
     components: {
       dataRequirements,
       costSurvey,
     },
-    mixins: [taskMixins],
     data() {
       return {
         // 流程相关

+ 0 - 168
src/views/costAudit/auditInfo/auditManage/taskMixins.js

@@ -1,168 +0,0 @@
-export default {
-  data() {
-    return {
-      workflowList: [],
-      // 所有表单数据聚合
-      formData: {
-        // 监审立项信息表单
-        basicInfo: {
-          projectName: '',
-          relatedCatalog: '',
-          province: '',
-          city: '',
-          district: '',
-          auditedUnit: '',
-          auditBody: '',
-          planYear: '',
-          initiationType: '',
-          auditForm: '',
-          costYears: [{ value: '2022' }, { value: '2023' }, { value: '2024' }],
-          needAudit: false,
-          needEvaluation: false,
-          initiationReason: '',
-          // 修改为与图片一致的立项依据文件列表
-          initiationBasisFiles: [
-            { name: '太原市电力公司关于电网输配电价格调整申请表.pdf' },
-            { name: '******依据文件.pdf' },
-          ],
-          // 修改为与图片一致的其他材料文件列表
-          otherFiles: [{ name: '立项审批表.pdf' }],
-          auditLeader: '',
-          auditTeamMembers: '',
-          otherRequirements: '',
-        },
-
-        // 监审工作方案表单
-        workPlan: {
-          basicInfo: '',
-          stepsMethods: '',
-          otherContent: '',
-        },
-
-        // 材料表单(弹窗用)
-        material: {
-          category: '综合性材料',
-          name: '',
-          requirements: '',
-          format: '文档文件',
-          sort: '',
-          required: '否',
-        },
-
-        // 当前流程环节(弹窗用)
-        currentStep: {
-          manager: '',
-          deadline: '',
-        },
-
-        // 监审工作流程表单
-        workflow: {
-          startDate: '2025-01-20',
-          endDate: '2025-03-30',
-        },
-
-        // 文档表单(弹窗用)
-        document: {
-          template: 'costAuditNotice',
-          documentNumber: '晋成审(2025)11号',
-          auditedUnit: 'A公司',
-          auditProject: '',
-          auditMatters: '',
-          auditPeriod: '',
-          auditTeam: '',
-          teamLeader: '',
-          noticeDate: '',
-        },
-      },
-      // 数据列表聚合
-      materialData: {
-        list: [
-          {
-            id: 1,
-            index: 1,
-            category: '综合性材料',
-            name: '企业基本情况介绍',
-            requirements: '包括企业名称、企业地址、企业员工数量、……',
-            format: '文档文件',
-            sort: 1,
-          },
-          {
-            id: 2,
-            index: 2,
-            category: '综合性材料',
-            name: '组织结构图',
-            requirements: '……',
-            format: '文档文件',
-            sort: 2,
-          },
-          {
-            id: 3,
-            index: 3,
-            category: '综合性材料',
-            name: '营业执照',
-            requirements: '……',
-            format: '文档文件',
-            sort: 3,
-          },
-          {
-            id: 4,
-            index: 4,
-            category: '财务会计资料',
-            name: '财务会计报表',
-            requirements: '……',
-            format: 'excel文件',
-            sort: 4,
-          },
-          {
-            id: 5,
-            index: 5,
-            category: '财务会计资料',
-            name: '资产卡片',
-            requirements: '……',
-            format: '预置模板',
-            sort: 5,
-          },
-        ],
-      },
-      surveyData: {
-        list: [
-          {
-            id: 1,
-            index: 1,
-            name: '封面',
-            type: '模板定制',
-            required: '是',
-          },
-          {
-            id: 2,
-            index: 2,
-            name: '企业基本情况调查表',
-            type: '模板定制',
-            required: '是',
-          },
-          {
-            id: 3,
-            index: 3,
-            name: '企业成本费用调查表',
-            type: '模板定制',
-            required: '是',
-          },
-          {
-            id: 4,
-            index: 4,
-            name: '企业期间费用调查表',
-            type: '模板定制',
-            required: '是',
-          },
-          {
-            id: 5,
-            index: 5,
-            name: '企业职工薪酬调查表',
-            type: '模板定制',
-            required: '是',
-          },
-        ],
-      },
-    }
-  },
-}

+ 0 - 881
src/views/costAudit/auditInfo/auditManage/taskProcess.vue

@@ -1,881 +0,0 @@
-<template>
-  <div class="task-process">
-    <!-- 操作按钮 -->
-    <div class="process-actions">
-      <el-button type="primary" @click="handleNextStep">流转下一步</el-button>
-      <el-button type="primary" @click="handlePrevStep">退回上一步</el-button>
-      <el-button type="primary" @click="handleAddTask">办结任务</el-button>
-      <el-button type="primary" @click="handleAssign">退回</el-button>
-    </div>
-
-    <!-- 监审文书标签页 -->
-    <el-tabs v-model="documentTab" style="margin-top: 20px">
-      <el-tab-pane label="监审文书" name="documents">
-        <div class="documents-layout">
-          <!-- 左侧文书类型列表 -->
-          <div class="documents-type-list">
-            <h3>监审文书类型:</h3>
-            <div v-for="type in documentTypes" :key="type.id" class="type-item">
-              {{ type.documentName }}
-            </div>
-          </div>
-
-          <!-- 右侧文书列表 -->
-          <div class="documents-content">
-            <el-button
-              type="primary"
-              class="generate-btn"
-              @click="handleGenerateDocument"
-            >
-              生成文书
-            </el-button>
-
-            <el-table
-              :data="documentsList"
-              style="width: 100%"
-              border
-              class="mt10"
-            >
-              <el-table-column
-                type="index"
-                label="序号"
-                width="60"
-                align="center"
-              />
-              <el-table-column prop="type" label="文书类型" align="left" />
-              <el-table-column prop="docNo" label="文书文号" align="center" />
-              <el-table-column
-                prop="auditUnit"
-                label="被监审单位"
-                align="center"
-              />
-              <el-table-column
-                prop="createTime"
-                label="生成时间"
-                align="center"
-                width="150"
-              />
-              <el-table-column label="电子文书" align="center">
-                <template slot-scope="scope">
-                  <el-button type="text" @click="handleViewDoc(scope.row)">
-                    修改
-                  </el-button>
-                  <el-button type="text" @click="handleViewDoc(scope.row)">
-                    签章
-                  </el-button>
-                  <el-button type="text" @click="handleCheckDoc(scope.row)">
-                    删除
-                  </el-button>
-                  <el-button type="text" @click="handleDownloadDoc(scope.row)">
-                    下载
-                  </el-button>
-                </template>
-              </el-table-column>
-              <el-table-column label="上传扫描件" align="center">
-                <template slot-scope="scope">
-                  <el-button
-                    type="text"
-                    @click="handleUploadAttachment(scope.row)"
-                  >
-                    上传附件
-                  </el-button>
-                  <el-button
-                    type="text"
-                    @click="handleViewAttachment(scope.row)"
-                  >
-                    查看附件
-                  </el-button>
-                </template>
-              </el-table-column>
-              <el-table-column label="是否推送被监审单位" align="center">
-                <template slot-scope="scope">
-                  {{ scope.row ? '是' : '否' }}
-                </template>
-              </el-table-column>
-              <el-table-column label="被监审单位反馈资料" align="center">
-                <template slot-scope="scope">
-                  <el-button
-                    type="text"
-                    @click="handleUploadAttachment(scope.row)"
-                  >
-                    上传附件
-                  </el-button>
-                  <el-button
-                    type="text"
-                    @click="handleViewAttachment(scope.row)"
-                  >
-                    查看附件
-                  </el-button>
-                </template>
-              </el-table-column>
-            </el-table>
-            <el-pagination
-              background
-              layout="total, sizes, prev, pager, next"
-              :current-page="currentPage"
-              :page-sizes="[10, 20, 30, 40]"
-              :page-size="pageSize"
-              :total="total"
-              @current-change="handleCurrentChange"
-              @size-change="handleSizeChange"
-            />
-          </div>
-        </div>
-      </el-tab-pane>
-
-      <el-tab-pane label="集体审议" name="meeting">
-        <!-- 集体审议内容 -->
-        <div class="meeting-section">
-          <!-- 系统记录 -->
-          <div class="system-records">
-            <el-button class="mb10" type="primary">添加记录</el-button>
-            <el-table :data="meetingRecords" style="width: 100%" border>
-              <el-table-column
-                type="index"
-                label="序号"
-                width="60"
-                align="center"
-              />
-              <el-table-column
-                prop="auditForm"
-                label="审议形式"
-                align="left"
-                width="100"
-              />
-              <el-table-column prop="location" label="地点" align="left" />
-              <el-table-column
-                prop="host"
-                label="主持人"
-                align="center"
-                width="120"
-              />
-              <el-table-column
-                prop="auditTime"
-                label="审议时间"
-                align="center"
-                width="150"
-              />
-              <el-table-column
-                prop="attachments"
-                label="附件"
-                align="center"
-                width="60"
-              >
-                <template slot-scope="scope">
-                  <el-button
-                    type="text"
-                    size="small"
-                    @click="viewMeetingAttachment(scope.row)"
-                  >
-                    查看
-                  </el-button>
-                </template>
-              </el-table-column>
-              <el-table-column label="操作" align="center" width="100">
-                <template slot-scope="scope">
-                  <el-button
-                    type="text"
-                    size="small"
-                    @click="editMeetingRecord(scope.row)"
-                  >
-                    修改
-                  </el-button>
-                  <el-button
-                    type="text"
-                    size="small"
-                    style="color: #f56c6c"
-                    @click="deleteMeetingRecord(scope.row.id)"
-                  >
-                    删除
-                  </el-button>
-                </template>
-              </el-table-column>
-            </el-table>
-          </div>
-          <!-- 集体审议记录表单 -->
-          <el-dialog
-            title="集体审议记录"
-            :visible.sync="meetingDialogVisible"
-            width="60%"
-            class="meeting-form-section"
-          >
-            <h3>集体审议记录</h3>
-            <el-form
-              ref="meetingForm"
-              :model="meetingForm"
-              label-width="80px"
-              class="meeting-form"
-            >
-              <el-row :gutter="20">
-                <el-col :span="8">
-                  <el-form-item label="审议形式">
-                    <el-input
-                      v-model="meetingForm.auditForm"
-                      placeholder="请填写"
-                    />
-                  </el-form-item>
-                </el-col>
-                <el-col :span="6">
-                  <el-form-item label="时间">
-                    <el-date-picker
-                      v-model="meetingForm.year"
-                      type="year"
-                      placeholder="选择年份"
-                      style="width: 80px; margin-right: 5px"
-                    />
-                    <el-date-picker
-                      v-model="meetingForm.month"
-                      type="month"
-                      placeholder="月"
-                      format="MM"
-                      value-format="MM"
-                      style="width: 60px; margin-right: 5px"
-                    />
-                    <el-date-picker
-                      v-model="meetingForm.day"
-                      type="date"
-                      placeholder="日"
-                      format="DD"
-                      value-format="DD"
-                      style="width: 60px; margin-right: 5px"
-                    />
-                    <el-time-select
-                      v-model="meetingForm.hour"
-                      placeholder="时"
-                      :picker-options="{
-                        start: '08:00',
-                        step: '01:00',
-                        end: '18:00',
-                      }"
-                      format="HH"
-                      value-format="HH"
-                      style="width: 60px; margin-right: 5px"
-                    />
-                    <el-time-select
-                      v-model="meetingForm.minute"
-                      placeholder="分"
-                      :picker-options="{ start: '00', step: '30', end: '59' }"
-                      format="mm"
-                      value-format="mm"
-                      style="width: 60px"
-                    />
-                  </el-form-item>
-                </el-col>
-                <el-col :span="10">
-                  <el-form-item label="地点">
-                    <el-input
-                      v-model="meetingForm.location"
-                      placeholder="请填写"
-                      style="width: 100%"
-                    />
-                  </el-form-item>
-                </el-col>
-              </el-row>
-
-              <el-row :gutter="20">
-                <el-col :span="10">
-                  <el-form-item label="主持人">
-                    <el-select
-                      v-model="meetingForm.host"
-                      placeholder="请选择人员"
-                      style="width: 150px; margin-right: 10px"
-                    >
-                      <el-option
-                        v-for="person in personList"
-                        :key="person.id"
-                        :label="person.name"
-                        :value="person.name"
-                      ></el-option>
-                    </el-select>
-                    <span class="text-primary cursor-pointer">选择人员</span>
-                  </el-form-item>
-                </el-col>
-                <el-col :span="14">
-                  <el-form-item label="记录人">
-                    <el-select
-                      v-model="meetingForm.recorder"
-                      placeholder="请选择人员"
-                      style="width: 150px; margin-right: 10px"
-                    >
-                      <el-option
-                        v-for="person in personList"
-                        :key="person.id"
-                        :label="person.name"
-                        :value="person.name"
-                      ></el-option>
-                    </el-select>
-                    <span class="text-primary cursor-pointer">选择人员</span>
-                  </el-form-item>
-                </el-col>
-              </el-row>
-
-              <el-row>
-                <el-col :span="24">
-                  <el-form-item label="参与人员">
-                    <el-input
-                      v-model="meetingForm.participants"
-                      placeholder="请填写"
-                      style="width: 100%"
-                    />
-                  </el-form-item>
-                </el-col>
-              </el-row>
-
-              <el-row>
-                <el-col :span="24">
-                  <el-form-item label="审议项目">
-                    <el-input
-                      v-model="meetingForm.projectName"
-                      placeholder="自动获取项目名称"
-                      style="width: 100%"
-                    />
-                  </el-form-item>
-                </el-col>
-              </el-row>
-
-              <el-row>
-                <el-col :span="24">
-                  <el-form-item label="被审单位">
-                    <el-input
-                      v-model="meetingForm.auditUnit"
-                      placeholder="自动获取被审单位名称"
-                      style="width: 100%"
-                    />
-                  </el-form-item>
-                </el-col>
-              </el-row>
-
-              <el-row>
-                <el-col :span="24">
-                  <el-form-item label="审议情况">
-                    <el-input
-                      v-model="meetingForm.auditSituation"
-                      type="textarea"
-                      :rows="4"
-                      placeholder="填写"
-                      style="width: 100%"
-                    />
-                  </el-form-item>
-                </el-col>
-              </el-row>
-
-              <el-row>
-                <el-col :span="24">
-                  <el-form-item label="审议结论意见">
-                    <el-input
-                      v-model="meetingForm.conclusion"
-                      type="textarea"
-                      :rows="4"
-                      placeholder="填写"
-                      style="width: 100%"
-                    />
-                  </el-form-item>
-                </el-col>
-              </el-row>
-
-              <el-row>
-                <el-col :span="24">
-                  <el-form-item label="审议记录附件">
-                    <div
-                      v-if="meetingForm.attachmentName"
-                      class="attachment-name"
-                    >
-                      {{ meetingForm.attachmentName }}
-                    </div>
-                    <el-upload
-                      :before-upload="beforeMeetingFileUpload"
-                      :on-success="onMeetingFileSuccess"
-                      :show-file-list="false"
-                      style="display: inline-block"
-                    >
-                      <el-button type="primary">选择文件</el-button>
-                    </el-upload>
-                  </el-form-item>
-                </el-col>
-              </el-row>
-
-              <el-row style="margin-top: 20px">
-                <el-col :span="24" style="text-align: center">
-                  <el-button type="primary" @click="saveMeetingRecord">
-                    保存
-                  </el-button>
-                  <el-button @click="cancelMeetingRecord">取消</el-button>
-                </el-col>
-              </el-row>
-            </el-form>
-          </el-dialog>
-        </div>
-      </el-tab-pane>
-
-      <el-tab-pane label="出具结论" name="conclusion">
-        <!-- 出具结论内容 -->
-        <div class="conclusion-section">
-          <el-button
-            type="primary"
-            style="margin-bottom: 20px"
-            @click="saveConclusion"
-          >
-            保存
-          </el-button>
-
-          <el-form
-            ref="conclusionForm"
-            :model="conclusionForm"
-            label-width="150px"
-            class="conclusion-form"
-          >
-            <el-row>
-              <el-col :span="24">
-                <el-form-item label="定价成本构成">
-                  <el-input
-                    v-model="conclusionForm.costStructure"
-                    type="textarea"
-                    :rows="4"
-                    placeholder="填写 (非必填)"
-                    style="width: 100%"
-                  />
-                </el-form-item>
-              </el-col>
-            </el-row>
-
-            <el-row>
-              <el-col :span="24">
-                <el-form-item label="审核的内容和方法">
-                  <el-input
-                    v-model="conclusionForm.auditContent"
-                    type="textarea"
-                    :rows="4"
-                    placeholder="填写 (非必填)"
-                    style="width: 100%"
-                  />
-                </el-form-item>
-              </el-col>
-            </el-row>
-
-            <el-row>
-              <el-col :span="24">
-                <el-form-item label="成本费用项目调整(增)情况及理由">
-                  <el-input
-                    v-model="conclusionForm.costIncrease"
-                    type="textarea"
-                    :rows="4"
-                    placeholder="填写 (非必填)"
-                    style="width: 100%"
-                  />
-                </el-form-item>
-              </el-col>
-            </el-row>
-
-            <el-row>
-              <el-col :span="24">
-                <el-form-item label="成本审核结论">
-                  <el-input
-                    v-model="conclusionForm.auditConclusion"
-                    type="textarea"
-                    :rows="4"
-                    placeholder="填写 (非必填)"
-                    style="width: 100%"
-                  />
-                </el-form-item>
-              </el-col>
-            </el-row>
-
-            <el-row>
-              <el-col :span="24">
-                <el-form-item label="其他需要说明的事项">
-                  <el-input
-                    v-model="conclusionForm.otherNotes"
-                    type="textarea"
-                    :rows="4"
-                    placeholder="填写 (非必填)"
-                    style="width: 100%"
-                  />
-                </el-form-item>
-              </el-col>
-            </el-row>
-          </el-form>
-        </div>
-      </el-tab-pane>
-    </el-tabs>
-    <!-- 流转下一步弹窗 -->
-    <el-dialog
-      title="流转下一步"
-      :visible.sync="nextStepDialogVisible"
-      width="40%"
-      :before-close="handleDialogClose"
-    >
-      <el-form :model="nextStepForm" label-width="120px">
-        <el-form-item label="操作下一步环节">
-          <el-select v-model="nextStepForm.nextStep" placeholder="请选择">
-            <el-option label="意见告知" value="inform"></el-option>
-            <el-option label="反馈意见" value="feedback"></el-option>
-            <el-option label="集体审议" value="review"></el-option>
-            <el-option label="出具报告" value="report"></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="下一步办理人员">
-          <el-input
-            v-model="nextStepForm.nextHandler"
-            placeholder="请输入"
-            style="width: 200px; display: inline-block"
-          />
-          <el-button type="primary" style="margin-left: 10px">
-            选择人员
-          </el-button>
-        </el-form-item>
-        <el-form-item label="办理意见">
-          <el-input
-            v-model="nextStepForm.handleOpinion"
-            type="textarea"
-            :rows="4"
-            placeholder="请输入办理意见"
-          />
-        </el-form-item>
-        <el-form-item>
-          <el-checkbox v-model="nextStepForm.sendMessage">站内消息</el-checkbox>
-          <el-checkbox v-model="nextStepForm.sendNotice">短信通知</el-checkbox>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button @click="handleDialogClose">取消</el-button>
-        <el-button type="primary" @click="submitNextStep">确定</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-<script>
-  import { getWhCateList, getSupervisoryAuditing } from '@/api/auditManage'
-  export default {
-    name: 'TaskProcess',
-    props: {},
-    data() {
-      return {
-        // 监审文书类型
-        documentTypes: [],
-        // 监审文书列表
-        documentsList: [],
-        // 监审文书分页
-        supervisoryAuditingForm: {
-          pageNum: 1,
-          pageSize: 10,
-          total: 0,
-        },
-        // 集体审议相关数据
-        meetingRecords: [
-          {
-            id: '1',
-            auditForm: '现场会议',
-            location: '******会议室',
-            host: '张****',
-            auditTime: '2025-5-21 16:30',
-            hasAttachment: true,
-          },
-          {
-            id: '2',
-            auditForm: '现场会议',
-            location: '**********',
-            host: '***********',
-            auditTime: '***********',
-            hasAttachment: true,
-          },
-          {
-            id: '3',
-            auditForm: '**********',
-            location: '**********',
-            host: '***********',
-            auditTime: '***********',
-            hasAttachment: true,
-          },
-        ],
-
-        // 集体审议表单数据
-        meetingForm: {
-          auditForm: '',
-          year: '',
-          month: '',
-          day: '',
-          hour: '',
-          minute: '',
-          location: '',
-          host: '',
-          recorder: '',
-          participants: '',
-          projectName: '',
-          auditUnit: '',
-          auditSituation: '',
-          conclusion: '',
-          attachmentName: '**********审议记录.doc',
-        },
-        // 人员选择列表
-        personList: [
-          { id: '1', name: '张**' },
-          { id: '2', name: '李**' },
-          { id: '3', name: '王**' },
-        ],
-        // 出具结论表单数据
-        conclusionForm: {
-          costStructure: '',
-          auditContent: '',
-          costIncrease: '',
-          auditConclusion: '',
-          otherNotes: '',
-        },
-        // 下一步表单数据
-        nextStepForm: {
-          nextStep: '',
-          nextHandler: '',
-          handleOpinion: '',
-          sendMessage: true,
-          sendNotice: false,
-        },
-        // 弹窗可见性
-        nextStepDialogVisible: false,
-        documentTab: 'documents', // 办理页标签页
-        meetingDialogVisible: false,
-      }
-    },
-    created() {
-      this.getWhCateList()
-      this.loadDocumentsList()
-    },
-    methods: {
-      // 获取监审文书类型
-      getWhCateList() {
-        try {
-          getWhCateList()
-            .then((res) => {
-              this.documentTypes = res.value
-            })
-            .catch(() => {})
-        } catch (error) {
-          this.$message.error('加载监审文书类型失败')
-          console.error('加载监审文书类型失败:', error)
-        }
-      },
-      // 获取监审文书列表
-      loadDocumentsList() {
-        try {
-          getSupervisoryAuditing({
-            pageNum: this.supervisoryAuditingForm.pageNum,
-            pageSize: this.supervisoryAuditingForm.pageSize,
-          })
-            .then((res) => {
-              this.documentsList = res.value.records
-              this.supervisoryAuditingForm.total = res.value.total
-            })
-            .catch(() => {})
-        } catch (error) {
-          this.$message.error('加载文书列表失败')
-          console.error('加载文书列表失败:', error)
-        }
-      },
-      // 下一步 - 打开弹窗
-      handleNextStep() {
-        this.nextStepDialogVisible = true
-      },
-
-      // 上一步
-      handlePrevStep() {
-        this.$message.info('上一步操作')
-      },
-
-      // 加任务
-      handleAddTask() {
-        this.$message.info('添加任务操作')
-      },
-
-      // 退回
-      handleAssign() {
-        this.$message.info('退回操作')
-      },
-      // 提交下一步
-      submitNextStep() {
-        // 这里应该有表单验证和提交逻辑
-        this.$message.success('提交成功')
-        this.nextStepDialogVisible = false
-      },
-      // 关闭弹窗
-      handleDialogClose() {
-        this.nextStepDialogVisible = false
-      },
-      // 生成文书
-      handleGenerateDocument() {
-        this.$message.info('生成文书操作')
-      },
-      // 查看文书
-      handleViewDoc(row) {
-        this.$message.info('修改文书操作')
-      },
-
-      // 检查文书
-      handleCheckDoc(row) {
-        this.$message.info('查看文书操作')
-      },
-
-      // 下载文书
-      handleDownloadDoc(row) {
-        this.$message.info('下载文书操作')
-      },
-      // 上传附件
-      handleUploadAttachment(row) {
-        this.$message.info('上传附件操作')
-      },
-
-      // 查看附件
-      handleViewAttachment(row) {
-        this.$message.info('查看附件操作')
-      },
-      // 推送单位
-      handlePushToUnit(row) {
-        this.$message.info('推送单位操作')
-      },
-      // 查看单位文件
-      handleViewUnitDoc(row) {
-        this.$message.info('查看单位文件操作')
-      },
-      viewMeetingAttachment(row) {
-        // 查看集体审议附件
-        this.$message.info('查看附件')
-      },
-      cancelMeetingRecord() {
-        // 取消操作,清空表单
-        this.$refs.meetingForm.resetFields()
-      },
-      // 出具结论相关方法
-      saveConclusion() {
-        // 保存出具结论
-        this.$message.success('保存成功')
-      },
-      editMeetingRecord(row) {
-        // 修改集体审议记录
-        this.$message.info('修改集体审议记录')
-      },
-      deleteMeetingRecord(id) {
-        // 删除集体审议记录
-        this.$confirm('确定要删除这条记录吗?', '提示', {
-          confirmButtonText: '确定',
-          cancelButtonText: '取消',
-          type: 'warning',
-        })
-          .then(() => {
-            // 执行删除操作
-            this.$message.success('删除成功')
-          })
-          .catch(() => {
-            // 取消删除
-          })
-      },
-      // 集体审议相关方法
-      saveMeetingRecord() {
-        // 保存集体审议记录
-        this.$message.success('保存成功')
-      },
-      beforeMeetingFileUpload(file) {
-        // 文件上传前的验证
-        return true
-      },
-      onMeetingFileSuccess(response, file) {
-        // 文件上传成功后的处理
-        this.meetingForm.attachmentName = file.name
-        this.$message.success('文件上传成功')
-      },
-    },
-  }
-</script>
-<style scoped>
-  /* 监审文书布局样式 */
-  .documents-layout {
-    display: flex;
-    margin-bottom: 20px;
-  }
-
-  .documents-type-list {
-    width: 200px;
-    border: 1px solid #ebeef5;
-    border-radius: 5px;
-    padding: 10px;
-    margin-right: 20px;
-  }
-
-  .documents-type-list h3 {
-    margin-bottom: 10px;
-    font-size: 14px;
-    font-weight: bold;
-  }
-
-  .type-item {
-    padding: 5px 0;
-    cursor: pointer;
-    font-size: 12px;
-  }
-
-  .type-item:hover {
-    color: #409eff;
-  }
-
-  .documents-content {
-    flex: 1;
-  }
-
-  .generate-btn {
-    margin-bottom: 10px;
-  }
-
-  .cursor-pointer {
-    cursor: pointer;
-  }
-
-  .mt10 {
-    margin-top: 10px;
-  }
-
-  .mt20 {
-    margin-top: 20px;
-  }
-
-  /* 集体审议样式 */
-
-  .system-records {
-    margin-bottom: 20px;
-  }
-
-  .system-records h3 {
-    margin-bottom: 10px;
-    font-size: 14px;
-    font-weight: bold;
-  }
-
-  .meeting-form-section h3 {
-    margin-bottom: 15px;
-    font-size: 14px;
-    font-weight: bold;
-  }
-
-  .meeting-form {
-    background-color: #fff;
-    padding: 20px;
-    border-radius: 5px;
-  }
-
-  .attachment-name {
-    display: inline-block;
-    padding: 5px 10px;
-    background-color: #f0f9ff;
-    border: 1px solid #91d5ff;
-    color: #1890ff;
-    border-radius: 4px;
-    margin-right: 10px;
-  }
-
-  /* 出具结论样式 */
-
-  .conclusion-form {
-    background-color: #fff;
-    padding: 20px;
-    border-radius: 5px;
-  }
-
-  .conclusion-form .el-form-item {
-    margin-bottom: 15px;
-  }
-</style>