Kaynağa Gözat

fix: 修改bug

shiyanyu 6 gün önce
ebeveyn
işleme
f54c15ec7a

+ 5 - 3
src/components/task/taskComponents/discussionTab.vue

@@ -111,8 +111,8 @@
           </el-col>
         </el-row>
 
-        <el-row :gutter="20">
-          <el-col :span="12">
+        <el-row>
+          <el-col :span="24">
             <el-form-item label="主持人">
               <el-select
                 v-model="meetingForm.hostPerson"
@@ -128,7 +128,9 @@
               </el-select>
             </el-form-item>
           </el-col>
-          <el-col :span="12">
+        </el-row>
+        <el-row>
+          <el-col :span="24">
             <el-form-item label="记录人">
               <el-select
                 v-model="meetingForm.recordPerson"

+ 5 - 1
src/views/costAudit/auditInfo/auditManage/collectiveMain.vue

@@ -180,7 +180,11 @@
               show-word-limit
               class="form-input"
             ></el-input>
-            <label class="required">记录人</label>
+          </div>
+        </div>
+        <div class="form-row">
+          <div class="form-item">
+            <label class="form-label">记录人</label>
             <el-input
               v-model="formData.recordPerson"
               placeholder="请输入记录人"

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

@@ -112,7 +112,9 @@
                 任务详情
               </el-button>
               <el-button
-                v-if="scope.row.status != '300' && scope.row.currentNode != 'gd'"
+                v-if="
+                  scope.row.status != '300' && scope.row.currentNode != 'gd'
+                "
                 type="text"
                 @click="handleOpenMainDetails(scope.row)"
               >
@@ -322,6 +324,7 @@
             pageNum: this.pageNum,
             pageSize: this.pageSize,
             projectName: this.searchQuery,
+            nCurrentNode: 'gd',
           }
           const response = await getReviewTaskList(params)
 

+ 2 - 1
src/views/costAudit/baseInfo/auditReviewDocManage/index.vue

@@ -112,7 +112,8 @@
             prop="documentName"
             label="监审文书名称"
             show-overflow-tooltip
-            align="center"
+            align="left"
+            header-align="center"
           >
             <template slot-scope="scope">
               <div class="text-ellipsis">{{ scope.row.documentName }}</div>

+ 2 - 2
src/views/costAudit/baseInfo/catalogManage/index.vue

@@ -633,7 +633,7 @@
 
         <el-tab-pane label="成本调查表" name="costSurvey">
           <div class="tab-content">
-            <div class="operation-bar">
+            <!-- <div class="operation-bar">
               <el-button
                 plain
                 type="primary"
@@ -653,7 +653,7 @@
               >
                 取消关联成本调查表
               </el-button>
-            </div>
+            </div> -->
             <cost-audit-table
               :table-data="costSurveyData"
               :columns="costSurveyColumns"

+ 2 - 0
src/views/costAudit/baseInfo/costFormManage/index.vue

@@ -459,6 +459,8 @@
             prop: 'surveyTemplateName',
             label: '调查表名称',
             slotName: 'surveyTemplateName',
+            align: 'left',
+            headerAlign: 'center',
           },
           {
             prop: 'templateType',

+ 49 - 3
src/views/costAudit/baseInfo/costFormManage/infoMaintain.vue

@@ -922,11 +922,16 @@
                     ></el-input>
                   </template>
                 </el-table-column>
-                <el-table-column label="计算公式" width="100" align="center">
+                <el-table-column
+                  label="计算公式"
+                  :class="{ 'custom-width': showCustomWidth }"
+                  align="center"
+                >
                   <template slot-scope="scope">
                     <el-input
                       v-model="scope.row.calculationFormula"
                       size="small"
+                      :title="scope.row.calculationFormula"
                       readonly
                       :disabled="viewDetail"
                       @click.native="
@@ -1602,6 +1607,8 @@
     mixins: [commonMixin],
     data() {
       return {
+        columnWidth: '150px', // 初始列宽字符串表示
+        showCustomWidth: false, // 控制是否应用自定义宽度样式
         surveyTemplateName: '',
         loading: false,
         searchForm: {
@@ -1817,6 +1824,9 @@
       this.isAutoGeneratedFormula = false
     },
     methods: {
+      updateColumnWidth() {
+        this.showCustomWidth = true // 触发样式更新
+      },
       /**
        * 从公式文本中解析出 “模板名.指标编号” 的引用,用于回显勾选。
        * 支持:TemplateA.C1 + (TemplateB.C2)
@@ -4179,7 +4189,7 @@
         }
       },
       //保存动态表项目数据
-      saveDynamicTableData() {
+      saveDynamicTableData(action = '') {
         try {
           // 获取拆分后的数据
           const splitData = this.splitDynamicTableDataForSave()
@@ -4193,10 +4203,17 @@
           getBatchSaveOrUpdate(saveData)
             .then((res) => {
               if (res.code === 200) {
-                if (action != 'delete') {
+                // 如果是删除操作,不显示成功提示且不关闭对话框
+                if (action !== 'delete') {
                   this.$message.success('动态表数据保存成功')
                   this.contentEditDialogVisible = false
                 }
+
+                // 刷新数据以确保UI更新
+                this.getListBySurveyTemplateIdAndVersion(
+                  this.surveyTemplateId,
+                  this.versionId
+                )
               } else {
                 this.$message.error(`保存失败:${res.message || '未知错误'}`)
               }
@@ -4574,6 +4591,11 @@
 </script>
 
 <style lang="scss" scoped>
+  .custom-width {
+    width: v-bind(
+      columnWidth
+    ); /* 注意:这里不能直接使用Vue表达式,需要用JavaScript动态设置 */
+  }
   @import '@/styles/costAudit.scss';
   .top-wrapper {
     display: flex;
@@ -4656,4 +4678,28 @@
       }
     }
   }
+  .el-input__inner {
+    max-width: 150px; /* 限制输入框宽度 */
+    white-space: nowrap; /* 防止文本换行 */
+    overflow: hidden; /* 超出部分隐藏 */
+    text-overflow: ellipsis; /* 显示省略号 */
+  }
+  .el-input__inner:hover {
+    cursor: pointer;
+  }
+  .el-input__inner[title]:hover {
+    position: relative;
+  }
+  .el-input__inner[title]:hover::after {
+    content: attr(title); /* 显示 title 内容 */
+    position: absolute;
+    top: 30px;
+    left: 0; /* tooltip 位置 */
+    background: #333;
+    color: white;
+    padding: 5px 10px; /* 样式 */
+    border-radius: 4px;
+    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2); /* 阴影 */
+    z-index: 100; /* 确保在最上层 */
+  }
 </style>

+ 2 - 1
src/views/costAudit/baseInfo/costVerifyManage/index.vue

@@ -119,7 +119,8 @@
           prop="surveyTemplateName"
           label="核定模板名称"
           show-overflow-tooltip
-          align="center"
+          align="left"
+          header-align="center"
         ></el-table-column>
         <el-table-column
           prop="versionNo"

+ 2 - 0
src/views/costAudit/baseInfo/financeSheetManage/index.vue

@@ -452,6 +452,8 @@
             prop: 'surveyTemplateName',
             label: '财务表名称',
             slotName: 'surveyTemplateName',
+            align: 'left',
+            headerAlign: 'center',
           },
           {
             prop: 'templateType',

+ 1 - 1
src/views/costAudit/projectInfo/auditProjectManage/initiation/index.vue

@@ -115,7 +115,7 @@
           prop="projectName"
           label="成本监审项目名称"
           header-align="center"
-          align="center"
+          align="left"
           show-overflow-tooltip
         >
           <template slot-scope="scope">

+ 160 - 80
src/views/costAudit/projectInfo/auditTaskManage/taskCustomizedRelease/auditNoticeTab.vue

@@ -408,6 +408,7 @@
           documentWhId: '',
           electronicDocumentUrl: '',
           enterpriseId: [],
+          enterpriseName: '',
           feedbackDocumentUrl: '',
           feedbackTime: '',
           generateTime: '',
@@ -538,24 +539,45 @@
         this.activeDocumentTypeId = data.id
         this.$emit('refresh', data)
       },
-      getEnterpriseName(row) {
-        let unit = this.allUnits.find(
-          (item) => item.unitId === row.enterpriseId
-        )
-        // 处理enterpriseId,无论是数组还是逗号分隔的字符串
-        let enterpriseIds = []
-        if (Array.isArray(row.enterpriseId)) {
-          enterpriseIds = row.enterpriseId
-        } else if (typeof row.enterpriseId === 'string') {
-          // 处理逗号分隔的字符串
-          enterpriseIds = row.enterpriseId
+
+      // 安全 includes:避免字段为 null/undefined 时调用 includes 报错
+      strIncludes(val, keyword) {
+        return String(val || '').includes(keyword)
+      },
+
+      // 将 enterpriseId 统一转换为数组(兼容:数组 / 逗号分隔字符串 / 单值)
+      normalizeEnterpriseIds(enterpriseId) {
+        if (!enterpriseId) return []
+        if (Array.isArray(enterpriseId)) return enterpriseId.filter(Boolean)
+        if (typeof enterpriseId === 'string') {
+          return enterpriseId
             .split(',')
-            .map((id) => id.trim())
-            .filter((id) => id)
-        } else if (row.enterpriseId) {
-          // 处理其他可能的非空值
-          enterpriseIds = [row.enterpriseId]
+            .map((id) => String(id).trim())
+            .filter(Boolean)
         }
+        return [enterpriseId]
+      },
+
+      // 获取当前选择的被监审单位名称(多选用逗号拼接)
+      getSelectedEnterpriseNames() {
+        const ids = this.normalizeEnterpriseIds(this.document.enterpriseId)
+        if (!ids.length) return ''
+        return ids
+          .map((id) => this.allUnits.find((u) => u.unitId == id)?.unitName)
+          .filter(Boolean)
+          .join(', ')
+      },
+
+      // 获取第一个被监审单位(多选场景下,诸如联系人/地址等字段取第一个单位信息)
+      getPrimaryEnterpriseUnit() {
+        const ids = this.normalizeEnterpriseIds(this.document.enterpriseId)
+        if (!ids.length) return null
+        return this.allUnits.find((u) => u.unitId == ids[0]) || null
+      },
+
+      getEnterpriseName(row) {
+        // 处理enterpriseId,无论是数组还是逗号分隔的字符串
+        const enterpriseIds = this.normalizeEnterpriseIds(row.enterpriseId)
 
         if (enterpriseIds.length > 0) {
           // 返回多个企业名称,用逗号分隔
@@ -580,7 +602,7 @@
       // 加载选项数据
       loadOpts() {
         // 加载所有单位列表
-        getAllUnitList().then((res) => {
+        return getAllUnitList().then((res) => {
           this.allUnits = res.value || []
           // 过滤掉状态为停用的数据
           this.allUnits = this.allUnits.filter((item) => item.status == 1)
@@ -607,6 +629,7 @@
               auditedUnitIds.includes(item.unitId)
             )
           }
+          return this.allUnits
         })
       },
 
@@ -719,66 +742,96 @@
           JSON.parse(JSON.stringify(res.value || [])) || []
         this.resCostDocumentTemplateFiles =
           JSON.parse(JSON.stringify(res.value || [])) || []
-        let unit = this.allUnits.find(
-          (item) => item.unitId === this.document.enterpriseId
-        )
+
+        const primaryUnit = this.getPrimaryEnterpriseUnit()
+
         this.costDocumentTemplateFiles = this.costDocumentTemplateFiles.filter(
-          (row) => row.pinyin !== 'ChengBenXiangMu' && row.pinyin !== 'XingCi'
+          (row) =>
+            !this.strIncludes(row.pinyin, 'ChengBenXiangMu') &&
+            !this.strIncludes(row.pinyin, 'XingCi')
         )
         let document = this.documentData.documentTypes.find(
           (item) => item.id == this.document.documentId
         )
         let documenName =
           document.documentTypeName || document.documentName || ''
-        this.costDocumentTemplateFiles.forEach((item) => {
-          if (item.pinyin.includes('BeiJianShenDanWei')) {
-            item.dataValue = unit.unitName
+        ;(res.value || []).forEach((item) => {
+          if (this.strIncludes(item.pinyin, 'BeiJianShenDanWei')) {
+            item.dataValue = this.document.enterpriseName
           }
-          if (item.pinyin.includes('ShouSongDaRen')) {
-            item.dataValue = unit.contactName
-          }
-          if (item.pinyin.includes('BeiJianShenDanWeiBanGongDiDian')) {
-            item.dataValue = unit.address
+        })
+        this.costDocumentTemplateFiles.forEach((item) => {
+          // 被监审单位:无论是通过 pinyin 还是 originalText,只要匹配到就回填选中的单位名称
+          if (
+            this.strIncludes(item.pinyin, 'BeiJianShenDanWei') ||
+            this.strIncludes(item.originalText, '被监审单位')
+          ) {
+            item.dataValue = this.document.enterpriseName
           }
-          if (item.pinyin.includes('BeiJianShenDanWeiLianXiRenDianHua')) {
-            item.dataValue = unit.contactMobile
+
+          // 以下字段依赖单位详情,多选场景取第一个单位
+          if (primaryUnit) {
+            if (this.strIncludes(item.pinyin, 'ShouSongDaRen')) {
+              item.dataValue = primaryUnit.contactName
+            }
+            if (
+              this.strIncludes(item.pinyin, 'BeiJianShenDanWeiBanGongDiDian')
+            ) {
+              item.dataValue = primaryUnit.address
+            }
+            if (
+              this.strIncludes(item.pinyin, 'BeiJianShenDanWeiLianXiRenDianHua')
+            ) {
+              item.dataValue = primaryUnit.contactMobile
+            }
           }
-          if (item.originalText.includes('需要提供材料') && item.dataValue) {
+
+          if (
+            this.strIncludes(item.originalText, '需要提供材料') &&
+            item.dataValue
+          ) {
             this.dataUploadUrl = item.dataValue
           }
-          if (item.pinyin.includes('DiGaoNeiRong') && item.dataValue) {
+          if (this.strIncludes(item.pinyin, 'DiGaoNeiRong') && item.dataValue) {
             // 移除所有HTML标签
-            item.dataValue = item.dataValue.replace(/<[^>]+>/g, '')
+            // item.dataValue = item.dataValue.replace(/<[^>]+>/g, '')
+            item.dataValue = item.dataValue
           }
           if (
-            item.pinyin.includes('ShiJian') &&
+            this.strIncludes(item.pinyin, 'ShiJian') &&
             (item.dataValue == null || item.dataValue == '')
           ) {
             // 获取当前时间,格式为YYYY年MM月DD日
             item.dataValue = moment(new Date()).format('YYYY年MM月DD日')
-          } else if (item.pinyin.includes('ShiJian') && item.dataValue) {
-            item.dataValue = item.dataValue.includes('年')
+          } else if (
+            this.strIncludes(item.pinyin, 'ShiJian') &&
+            item.dataValue
+          ) {
+            item.dataValue = this.strIncludes(item.dataValue, '年')
               ? item.dataValue
               : moment(item.dataValue).format('YYYY年MM月DD日')
           }
-          if (item.pinyin.includes('RiQi') && item.dataValue) {
-            item.dataValue = item.dataValue.includes('年')
+          if (this.strIncludes(item.pinyin, 'RiQi') && item.dataValue) {
+            item.dataValue = this.strIncludes(item.dataValue, '年')
               ? item.dataValue
               : moment(item.dataValue).format('YYYY年MM月DD日')
           }
-          if (item.pinyin.includes('DiGaoNeiRong') && item.dataValue) {
+          if (this.strIncludes(item.pinyin, 'DiGaoNeiRong') && item.dataValue) {
             // 移除所有HTML标签
             item.dataValue = item.dataValue.replace(/<[^>]+>/g, '')
           }
-          if (documenName.includes('成本监审通知书')) {
-            if (item.pinyin.includes('DanWeiMingCheng')) {
-              item.dataValue = unit.unitName
-            }
-            if (item.pinyin.includes('FaRenDaiBiao')) {
-              item.dataValue = unit?.corporateRepresentative || ''
+          if (this.strIncludes(documenName, '成本监审通知书')) {
+            if (primaryUnit) {
+              if (this.strIncludes(item.pinyin, 'DanWeiMingCheng')) {
+                item.dataValue = primaryUnit.unitName
+              }
+              if (this.strIncludes(item.pinyin, 'FaRenDaiBiao')) {
+                item.dataValue = primaryUnit?.corporateRepresentative || ''
+              }
             }
             if (
-              item.pinyin.includes(
+              this.strIncludes(
+                item.pinyin,
                 'ChengBenJianShenTongZhiShuChuangJianRiQi'
               ) &&
               (item.dataValue == null || item.dataValue == '')
@@ -786,83 +839,93 @@
               // 获取当前时间
               item.dataValue = moment(new Date()).format('YYYY年MM月DD日')
             }
-            if (item.pinyin.includes('ChuangJianRiQi')) {
+            if (this.strIncludes(item.pinyin, 'ChuangJianRiQi')) {
               // 获取当前时间或使用有效日期
               item.dataValue =
-                item.dataValue && !item.dataValue.includes('年')
+                item.dataValue && !this.strIncludes(item.dataValue, '年')
                   ? moment(item.dataValue).format('YYYY年MM月DD日')
                   : moment(new Date()).format('YYYY年MM月DD日')
             }
           }
-          if (documenName.includes('成本监审提取资料登记表')) {
+          if (this.strIncludes(documenName, '成本监审提取资料登记表')) {
             if (
-              item.pinyin.includes('DengJiBiaoShengChengRiQi') &&
+              this.strIncludes(item.pinyin, 'DengJiBiaoShengChengRiQi') &&
               (item.dataValue == null || item.dataValue == '')
             ) {
               // 获取当前时间,格式为YYYY年MM月DD日
               item.dataValue = moment(new Date()).format('YYYY年MM月DD日')
             }
           }
-          if (documenName.includes('成本审核初步意见表')) {
+          if (this.strIncludes(documenName, '成本审核初步意见表')) {
             if (
-              item.pinyin.includes('YiJianBiaoShengChengRiQi') &&
+              this.strIncludes(item.pinyin, 'YiJianBiaoShengChengRiQi') &&
               (item.dataValue == null || item.dataValue == '')
             ) {
               // 获取当前时间,格式为YYYY年MM月DD日
               item.dataValue = moment(new Date()).format('YYYY年MM月DD日')
             }
           }
-          if (documenName.includes('政府定价成本监审结论报告')) {
+          if (this.strIncludes(documenName, '政府定价成本监审结论报告')) {
             if (
-              item.pinyin.includes('BaoGaoRiQi') &&
+              this.strIncludes(item.pinyin, 'BaoGaoRiQi') &&
               (item.dataValue == null || item.dataValue == '')
             ) {
               // 获取当前时间,格式为YYYY年MM月DD日
               item.dataValue = moment(new Date()).format('YYYY年MM月DD日')
             }
-            if (item.pinyin.includes('JieLunBaoGaoChuangJianRiQi')) {
+            if (this.strIncludes(item.pinyin, 'JieLunBaoGaoChuangJianRiQi')) {
               // 获取当前时间,格式为YYYY年MM月DD日
               item.dataValue = moment(new Date()).format('YYYY年MM月DD日')
             }
-            if (item.pinyin.includes('JianShenRenWuFaBuShiJian')) {
+            if (this.strIncludes(item.pinyin, 'JianShenRenWuFaBuShiJian')) {
               let dataValue = this.resCostDocumentTemplateFiles.find(
                 (item2) => item2.pinyin === 'JianShenRenWuFaBuShiJian'
-              ).dataValue
-              item.dataValue = !dataValue.includes('年')
-                ? moment(dataValue).format('YYYY年MM月DD日')
-                : dataValue
+              )?.dataValue
+              if (dataValue) {
+                item.dataValue = !this.strIncludes(dataValue, '年')
+                  ? moment(dataValue).format('YYYY年MM月DD日')
+                  : dataValue
+              }
             }
             if (
-              item.pinyin.includes(
+              this.strIncludes(
+                item.pinyin,
                 'ChengBenJianShenTongZhiShuShengChengShiJian'
               )
             ) {
               let dataValue = this.resCostDocumentTemplateFiles.find(
                 (item2) =>
                   item2.pinyin === 'ChengBenJianShenTongZhiShuShengChengShiJian'
-              ).dataValue
-              item.dataValue = !dataValue.includes('年')
-                ? moment(dataValue).format('YYYY年MM月DD日')
-                : dataValue
+              )?.dataValue
+              if (dataValue) {
+                item.dataValue = !this.strIncludes(dataValue, '年')
+                  ? moment(dataValue).format('YYYY年MM月DD日')
+                  : dataValue
+              }
             }
-            if (item.pinyin.includes('ChengBenZiLiaoShangBaoShiJian')) {
+            if (
+              this.strIncludes(item.pinyin, 'ChengBenZiLiaoShangBaoShiJian')
+            ) {
               let dataValue = this.resCostDocumentTemplateFiles.find(
                 (item2) => item2.pinyin === 'ChengBenZiLiaoShangBaoShiJian'
-              ).dataValue
-              item.dataValue = !dataValue.includes('年')
-                ? moment(dataValue).format('YYYY年MM月DD日')
-                : dataValue
+              )?.dataValue
+              if (dataValue) {
+                item.dataValue = !this.strIncludes(dataValue, '年')
+                  ? moment(dataValue).format('YYYY年MM月DD日')
+                  : dataValue
+              }
             }
           }
-          if (documenName.includes('成本审核初步意见告知书')) {
+          if (this.strIncludes(documenName, '成本审核初步意见告知书')) {
             if (
-              item.pinyin.includes(
+              this.strIncludes(
+                item.pinyin,
                 'ChengBenJianShenTongZhiShuChuangJianShiJian'
               ) &&
               item.dataValue
             ) {
               // 获取当前时间,格式为YYYY年MM月DD日
-              item.dataValue = !item.dataValue.includes('年')
+              item.dataValue = !this.strIncludes(item.dataValue, '年')
                 ? moment(item.dataValue).format('YYYY年MM月DD日')
                 : item.dataValue
             }
@@ -872,12 +935,12 @@
           const selectedDocument = this.selectDocumentWhSelection[0]
           if (selectedDocument) {
             if (
-              item.pinyin.includes('WenHao') ||
-              item.pinyin.includes('WenJianHao')
+              this.strIncludes(item.pinyin, 'WenHao') ||
+              this.strIncludes(item.pinyin, 'WenJianHao')
             ) {
               item.dataValue = selectedDocument.whNo
             }
-            if (item.pinyin.includes('SongDaWenShuMingCheng')) {
+            if (this.strIncludes(item.pinyin, 'SongDaWenShuMingCheng')) {
               item.dataValue = selectedDocument.whName
             }
           }
@@ -941,10 +1004,21 @@
         this.activeView = 'form'
       },
       handleEnterpriseChange(val) {
-        if (this.document.enterpriseId) {
-          // BeiJianShenDanWei
+        const selectedLabel = this.allUnits.find(
+          (item) => item.unitId === val
+        ).unitName
+        this.document.enterpriseName = selectedLabel
+        if (!this.document.enterpriseId) return
+
+        // 确保 allUnits 已经加载完成,再去取单位名称回填到“数据内容”里
+        const ensureUnitsLoaded =
+          this.allUnits && this.allUnits.length
+            ? Promise.resolve(this.allUnits)
+            : this.loadOpts()
+
+        ensureUnitsLoaded.then(() => {
           this.getDocumentData()
-        }
+        })
       },
       // 保存文档
       handleSaveDocument() {
@@ -1408,6 +1482,7 @@
 </script>
 <style lang="scss" scoped>
   @import '@/styles/costAudit.scss';
+
   .documents-layout {
     display: flex;
     margin-bottom: 20px;
@@ -1467,15 +1542,19 @@
   .mt20 {
     margin-top: 20px;
   }
+
   .document-edit-container {
     display: flex;
+
     .document-params {
       width: 50%;
     }
+
     .document-preview {
       width: 50%;
     }
   }
+
   // 响应式:小屏时左侧列表占满一行并堆叠到上方
   @media (max-width: 992px) {
     .documents-type-list {
@@ -1492,6 +1571,7 @@
       margin-right: 0;
       margin-bottom: 12px;
     }
+
     .documents-content {
       flex: 1 1 100%;
       width: 100%;