xzc пре 6 дана
родитељ
комит
cb569e9dfc

+ 7 - 0
yudao-ui-admin-vue3/src/views/pressure2/boilerconnectrecordreport/BoilerConnectRecordReportForm.vue

@@ -250,8 +250,12 @@ const qualityInspectionList = ref([]) // 质量部检验项目列表
 const acceptOrderTemplateList = ref() // 受理单模板列表
 const showFeeCalculator = ref(false) // 是否显示费用计算器
 
+// 数据加载中标记,防止 watch 在加载数据时覆盖服务器返回的值
+let isLoadingData = false
+
 // 监听是否收费变化,切换时重置费用相关字段
 watch(() => formData.value.isFee, (val) => {
+  if (isLoadingData) return
   if (val === '1') {
     formData.value.feeCalcType = '1'
     formData.value.fee = 0
@@ -267,11 +271,14 @@ const open = async (type: string, id?: string) => {
     formLoading.value = true
     try {
       const data = await BoilerConnectRecordReportApi.getBoilerConnectRecordReport(id)
+      isLoadingData = true
       formData.value = {
         ...formData.value,
         ...data,
         feeTypes: data.feeTypes ? data.feeTypes.split(',') : [],
       }
+      await nextTick()
+      isLoadingData = false
     } finally {
       formLoading.value = false
     }

+ 3 - 1
yudao-ui-admin-vue3/src/views/pressure2/boilertaskorder/components/AddOrEditCheckItemForEquipment.vue

@@ -547,7 +547,8 @@ const handleSaveCalcFee = (templateInfo) => {
     if (checkItem.inspectionNature !== templateInfo.inspectionNature) continue
     for (const item of checkItem.itemList) {
       if (item.templateId !== templateInfo.templateId) continue
-      item.fee = templateInfo.fee
+      item.fee = templateInfo.fee,
+      item.feeCalculateJson = templateInfo.feeCalculateJson
     }
   }
   calculateAmounts()
@@ -838,6 +839,7 @@ const handleConfirm = async () => {
             type: x.type,
             orderItemId,
             sort: x.sort || 0,
+            feeCalculateJson: x.feeCalculateJson
           }
           if (x.name?.includes('壁厚测定')) {
             result.wallThicknessList = x.wallThicknessList

+ 5 - 3
yudao-ui-admin-vue3/src/views/pressure2/pipetaskorder/components/AddOrEditCheckItemForEquipment.vue

@@ -260,7 +260,7 @@
 <script setup lang="ts">
 import CustomDialog from '@/components/CustomDialog/index.vue'
 import { ArrowDown } from '@element-plus/icons-vue'
-import calcCheckItemFee from './calcCheckItemFee.vue'
+import calcCheckItemFee from '@/views/pressure2/boilertaskorder/components/calcCheckItemFee.vue'
 import CheckerSelectBox from '@/views/pressure2/equipboilerscheduling/components/CheckerSelectBox.vue'
 import AddWallThickTemplate from '@/views/pressure2/pipechecker/components/addWallThickTemplate.vue'
 import {
@@ -380,7 +380,7 @@ const handleCheckItemSelectedChange = (checkItem, selected) => {
   ) {
     selectedCheckItem.value.push(checkItem)
     // 如果是壁厚测定,则需要立即录入壁厚测定模板
-    if (checkItem.name?.includes('壁厚测定')) {
+    if (checkItem.name?.includes('壁厚测定') && !checkItem.name?.includes('压力管道')) {
       thickReport.value = cloneDeep(checkItem)
       showAddWallThickTemplateDialog.value = true
     }
@@ -572,6 +572,7 @@ const handleSaveCalcFee = (templateInfo) => {
     for (const item of checkItem.itemList) {
       if (item.templateId !== templateInfo.templateId) continue
       item.fee = templateInfo.fee
+      item.feeCalculateJson = templateInfo.feeCalculateJson
     }
   }
   calculateAmounts()
@@ -855,7 +856,8 @@ const handleConfirm = async () => {
         fee: x.fee,
         type: x.type,
         quantity: x.quantity || 1,
-        sort: x.sort
+        sort: x.sort,
+        feeCalculateJson: x.feeCalculateJson
       }
       if (x.name?.includes('壁厚测定')) {
         result.wallThicknessList = x.wallThicknessList

+ 43 - 13
yudao-ui-admin-vue3/src/views/pressure2/pipetaskorder/components/calcCheckItemFee.vue

@@ -141,20 +141,29 @@
   // 费用模板初始化
   const handleDesignerInit = async (instance) => {
     designer = instance
-    console.log('葡萄城初始化了!!!')
+    console.log('[calcCheckItemFee] 葡萄城初始化了!!!')
+    console.log('[calcCheckItemFee] props:', { equipmentId: props.equipmentId, templateInfo: props.templateInfo, isBatch: props.isBatch })
     await handleGetPressureReportTemplateInfo()
+    console.log('[calcCheckItemFee] fetchTemplateData 加载完成:', fetchTemplateData.value)
+    console.log('[calcCheckItemFee] combineTemplateInfo:', combineTemplateInfo.value)
+    console.log('[calcCheckItemFee] isManualInput:', isManualInput.value)
     // 加载费用计算模板
     await handleRenderFormulaTemplate()
     // 获取费用计算字段
     if (props.equipmentId) {
+      console.log('[calcCheckItemFee] equipmentId 存在,开始获取费用计算字段')
       await handleQueryCheckItemCalcPreFillField()
+    } else {
+      console.warn('[calcCheckItemFee] equipmentId 为空,跳过获取费用计算字段!')
     }
 
     // 优先从已保存的 feeCalculateJson 中回显实际费用
+    console.log('[calcCheckItemFee] feeCalculateJson:', feeCalculateJson.value)
     feeForm.value = {
       actualFee: feeCalculateJson.value['actualFee'] || combineTemplateInfo.value.fee || 0,
       totalCost: feeCalculateJson.value['totalCost'] || combineTemplateInfo.value.fee || 0
     }
+    console.log('[calcCheckItemFee] 初始化完成,feeForm:', feeForm.value)
   }
   
   // 获取费用模板信息
@@ -163,16 +172,29 @@
   const feeCalculateJson = computed(() => !props.templateInfo.feeCalculateJson ? {} : JSON.parse(props.templateInfo.feeCalculateJson))
 
   // 是否手动录入 true是,false否
-  const isManualInput = computed(() => combineTemplateInfo.value.isAutoAmount === '0')
+  const isManualInput = computed(() => {
+    const result = combineTemplateInfo.value.isAutoAmount === '0'
+    console.log('[calcCheckItemFee] isManualInput 计算:', { isAutoAmount: combineTemplateInfo.value.isAutoAmount, result })
+    return result
+  })
   const handleGetPressureReportTemplateInfo = async () => {
+    console.log('[calcCheckItemFee] 开始获取模板信息,templateId:', props.templateInfo.templateId)
     fetchTemplateData.value = await getPressureReportTemplateInfo({id: props.templateInfo.templateId})
+    console.log('[calcCheckItemFee] 模板信息获取结果:', fetchTemplateData.value)
   }
 
   // 渲染费用计算模板
   const handleRenderFormulaTemplate = async () => {
     const spread = designer?.getWorkbook()
-    if(!combineTemplateInfo.value.formulaTemplateUrl) return
+    console.log('[calcCheckItemFee] handleRenderFormulaTemplate 开始')
+    console.log('[calcCheckItemFee] formulaTemplateUrl:', combineTemplateInfo.value.formulaTemplateUrl)
+    console.log('[calcCheckItemFee] combineTemplateInfo.keys:', Object.keys(combineTemplateInfo.value))
+    if(!combineTemplateInfo.value.formulaTemplateUrl) {
+      console.warn('[calcCheckItemFee] formulaTemplateUrl 为空,无法渲染公式模板!')
+      return
+    }
     const response = await axios.get(buildFileUrl(combineTemplateInfo.value.formulaTemplateUrl), { responseType: 'blob' })
+    console.log('[calcCheckItemFee] 公式模板文件获取成功,status:', response.status)
 
     const blob = new Blob([response.data], { type: response.headers['content-type'] })
     spread.open(
@@ -180,10 +202,10 @@
       function () {
         // 让活动工作表的单元格全部失焦
         spread.getActiveSheet().setActiveCell(null);
-        console.log('费用计算模板加载成功')
+        console.log('[calcCheckItemFee] 费用计算模板加载成功')
       },
       function () {
-        console.log('费用计算模板加载失败')
+        console.error('[calcCheckItemFee] 费用计算模板加载失败')
       }
     )
   }
@@ -201,7 +223,9 @@
         equipId: props.equipmentId,
         templateId: combineTemplateInfo.value.templateId
       }
+      console.log('[calcCheckItemFee] queryCheckItemCalcPreFillField 请求参数:', params)
       const fieldResult = await queryCheckItemCalcPreFillField(params)
+      console.log('[calcCheckItemFee] queryCheckItemCalcPreFillField 返回结果:', fieldResult)
 
       allCalcPreFillField.value = fieldResult
       // 保存所有的输入项
@@ -211,36 +235,39 @@
       // 获取所有需要field的code,转成{[code]: ''}格式,set到费用模板中
       allCalcPreFillFieldKeyValue.value = Object.fromEntries(enterDataList.value.map(item => ([item.code, feeCalculateJson.value[item.code] || ''])))
       
+      console.log('[calcCheckItemFee] enterDataList:', enterDataList.value.length, '项')
+      console.log('[calcCheckItemFee] outputDataList:', outputDataList.value.length, '项')
+      console.log('[calcCheckItemFee] allCalcPreFillFieldKeyValue:', allCalcPreFillFieldKeyValue.value)
+      
       // 检验费用数据回显
       feeForm.value = {
         actualFee: feeCalculateJson.value['actualFee'] || 0,
         totalCost: feeCalculateJson.value['totalCost'] || 0
       }
     } catch(error) {
-
-      console.error('获取费用计算字段报错了', error)
-
+      console.error('[calcCheckItemFee] 获取费用计算字段报错了', error)
     } finally {
-
       loading.value = false
-
     }
   }
   // 自动计算费用
   const handleCalcFee = () => {
+    console.log('[calcCheckItemFee] handleCalcFee 开始计算')
     const spread = designer?.getWorkbook()
     const entryData = Object.fromEntries(enterDataList.value.map(item => ([item.code, item.inputText])))
     const combineDataSource = {
       ...allCalcPreFillFieldKeyValue.value,
       ...entryData
     }
-    // console.log('combineDataSource', combineDataSource)
+    console.log('[calcCheckItemFee] combineDataSource:', combineDataSource)
+    console.log('[calcCheckItemFee] bindingPathSchema:', combineTemplateInfo.value.bindingPathSchema)
     // set数据
     spreadDesignerRef.value.newSetDataSource(combineTemplateInfo.value.bindingPathSchema, combineDataSource)
 
     // get数据
     nextTick(() => {
       const getDataSource = spreadDesignerRef.value.getDataSource()
+      console.log('[calcCheckItemFee] getDataSource:', getDataSource)
       // 输出项的值
       outputDataList.value = outputDataList.value.map(item => {
         if(is(getDataSource[item.code], 'Null') || is(getDataSource[item.code], 'Undefined')) return item
@@ -249,11 +276,12 @@
           inputText: getDataSource[item.code]
         }
       })
-      // console.log('输出项', outputDataList.value)
       const totalCostCode = allCalcPreFillField.value.find(x => x.type === '3')?.code || 'totalCost'
+      console.log('[calcCheckItemFee] totalCostCode:', totalCostCode, '值:', getDataSource[totalCostCode])
       // 自动计算总费用
       feeForm.value.totalCost = getDataSource[totalCostCode]
       feeForm.value.actualFee = getDataSource[totalCostCode]
+      console.log('[calcCheckItemFee] 计算完成 feeForm:', feeForm.value)
     })
   }
 
@@ -261,7 +289,9 @@
   const handleSave = () => {
     const inputParams = Object.fromEntries(enterDataList.value.map(item => ([item.code, item.inputText])))
     const outputParams = Object.fromEntries(outputDataList.value.map(item => ([item.code, item.inputText])))
-    emit('save', {...props.templateInfo, fee: feeForm.value.actualFee || 0, feeCalculateJson: JSON.stringify({...inputParams, ...feeForm.value, ...outputParams})})
+    const saveData = {...props.templateInfo, fee: feeForm.value.actualFee || 0, feeCalculateJson: JSON.stringify({...inputParams, ...feeForm.value, ...outputParams})}
+    console.log('[calcCheckItemFee] handleSave emit save:', saveData)
+    emit('save', saveData)
     handleClose()
   }