shiyanyu 1 месяц назад
Родитель
Сommit
52c3fefa4c

+ 5 - 1
src/api/audit/survey.js

@@ -59,7 +59,11 @@ export function addDynamicTableData(data) {
 //动态表删除数据
 export function deleteDynamicTableData(data) {
   return request({
-    url: url + '/api/surveyTemplate/v1/deletePeriodRecord?id=' + data.id,
+    url:
+      url +
+      '/api/surveyTemplate/v1/deletePeriodRecord?id=' +
+      data.id +
+      (data && data.type != null ? '&type=' + data.type : ''),
     method: 'post',
   })
 }

+ 3 - 8
src/views/EntDeclaration/auditTaskManagement/components/CostSurveyTab.vue

@@ -191,14 +191,6 @@
             >
               数据下载
             </el-button>
-            <el-button
-              type="text"
-              size="small"
-              :disabled="isViewMode"
-              @click="handleDataUpload(scope.row)"
-            >
-              数据上传
-            </el-button>
           </template>
 
           <!-- 固定表:模版下载、数据上传 -->
@@ -567,6 +559,9 @@
           //   return
           // }
           const params = { surveyTemplateId, versionId, type: 1 }
+          // 追加 taskId(来自行或页面 props)
+          const taskId = (row && (row.taskId || row.taskID)) || this.taskId
+          if (taskId) params.taskId = taskId
           const res = await downloadTemplate(params)
           loading.close()
           // 处理响应数据(可能是 axios 响应或直接 Blob)

+ 13 - 2
src/views/EntDeclaration/auditTaskManagement/components/DataRequirementsTab.vue

@@ -259,6 +259,10 @@
                 在线填报
               </el-button>
               <el-button
+                v-if="
+                  scope.row.formatRequired === '3' &&
+                  scope.row.templateType !== '1'
+                "
                 type="text"
                 size="small"
                 @click="handleTemplateDownload(scope.row)"
@@ -268,7 +272,9 @@
               <el-button
                 v-if="
                   scope.row.auditedStatus !== '1' &&
-                  (currentNode === 'clcs' || currentNode === 'tjcl')
+                  (currentNode === 'clcs' || currentNode === 'tjcl') &&
+                  scope.row.formatRequired === '3' &&
+                  scope.row.templateType !== '1'
                 "
                 type="text"
                 size="small"
@@ -660,7 +666,7 @@
         formData.append('surveyTemplateId', surveyTemplateId)
         formData.append('materialId', materialId)
         // const auditedUnitId =this.pendingUploadRow.auditedUnitId
-        const taskId = this.pendingUploadRow.taskId
+        const taskId = this.pendingUploadRow.taskId || this.taskId
         // formData.append('auditedUnitId', auditedUnitId)
         formData.append('taskId', taskId)
         formData.append('type', '2')
@@ -722,6 +728,11 @@
           if (surveyTemplateId) {
             params.surveyTemplateId = surveyTemplateId
           }
+          // 追加 taskId(来自行或页面 props)
+          const taskId = row && (row.taskId || row.taskID)
+          if (taskId || this.taskId) {
+            params.taskId = taskId || this.taskId
+          }
           // if (row.materialId) {
           //   params.materialId = row.materialId
           // }

+ 64 - 2
src/views/EntDeclaration/auditTaskManagement/components/DynamicTableDialog.vue

@@ -79,7 +79,7 @@
       </el-table-column>
 
       <!-- 操作列 -->
-      <el-table-column label="操作" width="200" align="center" fixed="right">
+      <el-table-column label="操作" width="260" align="center" fixed="right">
         <template slot-scope="scope">
           <el-button
             type="text"
@@ -105,10 +105,27 @@
           >
             删除
           </el-button>
+          <el-button
+            type="text"
+            size="small"
+            :disabled="isViewMode"
+            @click="triggerRowUpload(scope.row)"
+          >
+            数据上传
+          </el-button>
         </template>
       </el-table-column>
     </el-table>
 
+    <!-- 行内复用的隐藏上传输入框 -->
+    <input
+      ref="dynamicUploadInput"
+      type="file"
+      accept=".xls,.xlsx"
+      style="display: none"
+      @change="handleDynamicDataFileChange"
+    />
+
     <!-- 分页 -->
     <el-pagination
       background
@@ -229,6 +246,7 @@
     getDynamicTableData,
     deleteDynamicTableData,
     addDynamicTableData,
+    importData,
     getSingleRecordSurveyList,
     getSurveyDetail,
   } from '@/api/audit/survey'
@@ -302,6 +320,8 @@
       return {
         dialogVisible: false,
         loading: false,
+        uploading: false,
+        pendingUploadRow: null,
         // 新增弹窗状态与表单
         addDialogVisible: false,
         adding: false,
@@ -387,6 +407,48 @@
       },
     },
     methods: {
+      triggerRowUpload(row) {
+        this.pendingUploadRow = row || null
+        const el = this.$refs.dynamicUploadInput
+        if (el && el.click) el.click()
+      },
+      async handleDynamicDataFileChange(e) {
+        const files = e && e.target && e.target.files
+        const file = files && files[0]
+        if (!file) return
+        const sd = this.surveyData || {}
+        const formData = new FormData()
+        formData.append('file', file)
+        const surveyTemplateId =
+          this.surveyTemplateId || sd.surveyTemplateId || ''
+        const auditedUnitId = this.auditedUnitId || sd.auditedUnitId || ''
+        const catalogId = this.catalogId || sd.catalogId || ''
+        const taskId = this.taskId || sd.taskId || ''
+        if (surveyTemplateId)
+          formData.append('surveyTemplateId', surveyTemplateId)
+        if (auditedUnitId) formData.append('auditedUnitId', auditedUnitId)
+        if (catalogId) formData.append('catalogId', catalogId)
+        if (taskId) formData.append('taskId', taskId)
+        formData.append('type', this.requestType)
+        try {
+          this.uploading = true
+          const res = await importData(formData)
+          if (res && res.code === 200) {
+            Message.success('上传成功')
+            this.$emit('refresh')
+            this.loadDynamicTableData()
+          } else {
+            Message.error(res && res.message ? res.message : '上传失败')
+          }
+        } catch (err) {
+          console.error('上传失败:', err)
+          // Message.error('上传失败')
+        } finally {
+          this.uploading = false
+          this.pendingUploadRow = null
+          if (e && e.target) e.target.value = ''
+        }
+      },
       // 加载动态表数据(对接接口)
       async loadDynamicTableData() {
         // 优先使用接口数据(需要 uploadId、auditedUnitId)
@@ -1365,7 +1427,7 @@
               Message.warning('该记录缺少可删除的ID')
               return
             }
-            deleteDynamicTableData({ id: row.id })
+            deleteDynamicTableData({ id: row.id, type: this.requestType })
               .then(() => {
                 Message.success('删除成功')
                 // 重新加载数据

+ 20 - 4
src/views/EntDeclaration/auditTaskManagement/components/FixedAssetsTable.vue

@@ -908,6 +908,22 @@
             newItem[column.prop] = ''
           })
 
+          // 若存在“序号”列,自动填入父项下的下一个序号
+          const seqCol = (this.dynamicColumns || []).find(
+            (c) =>
+              c &&
+              (String(c.label).includes('序号') ||
+                String(c.prop).includes('序号') ||
+                String(c.fieldId).toLowerCase() === 'seq')
+          )
+          if (seqCol && seqCol.prop) {
+            const siblings = Array.isArray(parentNode.children)
+              ? parentNode.children
+              : []
+            const nextSeq = siblings.length + 1
+            newItem[seqCol.prop] = String(nextSeq)
+          }
+
           // 在父项的 children 数组末尾添加新行
           if (!parentNode.children) {
             this.$set(parentNode, 'children', [])
@@ -1444,10 +1460,10 @@
       async saveData() {
         // 保存前校验
         const validationErrors = this.validateBeforeSave()
-        if (validationErrors && validationErrors.length > 0) {
-          Message.error('表单验证失败,请检查后再保存')
-          return false
-        }
+        // if (validationErrors && validationErrors.length > 0) {
+        //   Message.error('表单验证失败,请检查后再保存')
+        //   return false
+        // }
         try {
           // 格式化保存数据为接口需要的格式
           const saveData = []

+ 25 - 26
src/views/EntDeclaration/auditTaskManagement/components/FixedTableDialog.vue

@@ -44,32 +44,6 @@
         </template>
       </el-table-column>
 
-      <!-- 指标编号(cellCode,只读) -->
-      <el-table-column
-        prop="cellCode"
-        label="指标编号"
-        width="120"
-        align="center"
-      >
-        <template slot-scope="scope">
-          <span v-if="!scope.row.isCategory">{{ scope.row.cellCode }}</span>
-        </template>
-      </el-table-column>
-
-      <!-- 计算方式(calculationFormula,只读) -->
-      <el-table-column
-        prop="calculationFormula"
-        label="计算方式"
-        min-width="180"
-        align="left"
-      >
-        <template slot-scope="scope">
-          <span v-if="!scope.row.isCategory">
-            {{ scope.row.calculationFormula }}
-          </span>
-        </template>
-      </el-table-column>
-
       <!-- 动态年份列 -->
       <el-table-column
         v-for="year in yearColumns"
@@ -104,6 +78,31 @@
           />
         </template>
       </el-table-column>
+      <!-- 指标编号(cellCode,只读) -->
+      <el-table-column
+        prop="cellCode"
+        label="指标编号"
+        width="120"
+        align="center"
+      >
+        <template slot-scope="scope">
+          <span v-if="!scope.row.isCategory">{{ scope.row.cellCode }}</span>
+        </template>
+      </el-table-column>
+
+      <!-- 计算方式(calculationFormula,只读) -->
+      <el-table-column
+        prop="calculationFormula"
+        label="计算方式"
+        min-width="180"
+        align="left"
+      >
+        <template slot-scope="scope">
+          <span v-if="!scope.row.isCategory">
+            {{ scope.row.calculationFormula }}
+          </span>
+        </template>
+      </el-table-column>
     </el-table>
 
     <div slot="footer" class="dialog-footer">