Răsfoiți Sursa

612弹窗异步问题

tangjunhao 3 luni în urmă
părinte
comite
813a6cd446
1 a modificat fișierele cu 83 adăugiri și 83 ștergeri
  1. 83 83
      src/views/model/vueflow/aside/asideData.vue

+ 83 - 83
src/views/model/vueflow/aside/asideData.vue

@@ -393,102 +393,102 @@ const getcomdata = async (pcId) => {
   }
 }
 
-const getbtnvalue = (pcaId, dataType) => {
+const getbtnvalue = async (pcaId, dataType) => {
   const params = {
     transCode: "ES0010",
     pcaId: pcaId
   }
 
-  request(params)
-    .then(async (res) => {
-      if (dataType === 1) {
-        // 遍历 headers,初始化单位值
-        for (const header of res.headers) {
-          if (header.unitType !== "无") {
-            // 调用 getlistopt 获取单位选项并设置默认值
-            await getlistopt(header, "unit")
-          } else {
-            // 如果不需要单位,直接设置为"无"
-            header.unit = "无"
-            header.unitoptions = [] // 保持选项列表为空
-          }
+  try {
+    const res = await request(params)
+
+    if (dataType === 1) {
+      // 处理 headers - 使用 Promise.all 确保所有异步操作完成
+      await Promise.all(res.headers?.map(async (header) => {
+        if (header?.unitType !== "无") {
+          await getlistopt(header, "unit")
+        } else {
+          header.unit = "无"
+          header.unitoptions = []
         }
+      }))
 
-        // 设置表格列
-        tableColumns.value = res.headers || []
+      // 设置表格列
+      tableColumns.value = res.headers || []
 
-        // 将 datas 按行号(pcadgId)分组,每行是一个对象
-        const rowMap = new Map()
+      // 将 datas 按行号分组
+      const rowMap = new Map()
 
-        res.datas?.forEach(async (item) => {
-          // 添加 async
-          const rowId = item.pcadgId
-          if (!rowMap.has(rowId)) {
-            rowMap.set(rowId, { pcadgId: rowId })
-          }
+      // 使用 Promise.all 确保所有数据项处理完成
+      await Promise.all(res.datas?.map(async (item) => {
+        if (!item?.pcadgId) return
+        
+        const rowId = item.pcadgId
+        if (!rowMap.has(rowId)) {
+          rowMap.set(rowId, { pcadgId: rowId })
+        }
 
-          const header = res.headers.find((h) => h.cdvId === item.cdvId)
-          if (header) {
-            const row = rowMap.get(rowId)
-
-            // 如果是下拉类型,调用 getlistopt 获取选项
-            if (header.valueType === 1) {
-              await getlistopt(header, "value") // 获取选项并设置默认值
-              // 使用从 getlistopt 获取的 value(如果 item.value 为空)
-              row[header.code] = {
-                value: item.value || header.value, // 优先使用 item.value
-                unit: item.unit,
-                options: header.options, // 添加 options 到行数据
-                pcadgId: item.pcadgId,
-                pcadId: item.pcadId,
-                cdvId: item.cdvId
-              }
-            } else {
-              // 非下拉类型保持原样
-              row[header.code] = {
-                value: item.value,
-                unit: item.unit,
-                pcadgId: item.pcadgId,
-                pcadId: item.pcadId,
-                cdvId: item.cdvId
-              }
-            }
+        const header = res.headers?.find((h) => h?.cdvId === item?.cdvId)
+        if (!header) return
+
+        const row = rowMap.get(rowId)
+        
+        // 处理下拉类型
+        if (header?.valueType === 1) {
+          await getlistopt(header, "value")
+          row[header.code] = {
+            value: item?.value || header?.value || '',
+            unit: item?.unit || '无',
+            options: header?.options || [],
+            pcadgId: item.pcadgId,
+            pcadId: item.pcadId,
+            cdvId: item.cdvId
           }
+        } else {
+          // 非下拉类型
+          row[header.code] = {
+            value: item?.value || '',
+            unit: item?.unit || '无',
+            pcadgId: item.pcadgId,
+            pcadId: item.pcadId,
+            cdvId: item.cdvId
+          }
+        }
+      }))
+
+      // 确保所有数据处理完成后再设置 tableData
+      tableData.value = Array.from(rowMap.values())
+      console.log("tableData.value", tableData.value)
+
+    } else if (dataType === 2) {
+      // 处理属性-值对形式
+      const kvData = []
+      let rowCount = 0
+
+      res.headers?.forEach((header) => {
+        if (!header?.cdvId) return
+        
+        const dataItem = res.datas?.find(
+          (item) => item?.cdvId === header.cdvId
+        )
+        rowCount++
+
+        kvData.push({
+          cdvId: header.cdvId,
+          property: header?.name || "",
+          value: dataItem?.value || "",
+          pcadgId: dataItem?.pcadgId || "",
+          pcadId: rowCount,
+          unit: dataItem?.unit || "无"
         })
+      })
 
-        tableData.value = Array.from(rowMap.values())
-        console.log("tableData.value", tableData.value)
-      } else if (dataType === 2) {
-        // 处理属性-值对形式
-        const kvData = []
-        // 记录行号
-        let rowCount = 0
-
-        res.headers?.forEach((header) => {
-          // 找到对应的数据项
-          const dataItem = res.datas?.find(
-            (item) => item.cdvId === header.cdvId
-          )
-          rowCount++
-
-          kvData.push({
-            cdvId: header.cdvId,
-            property: header.name, // 属性名称
-            value: dataItem ? dataItem.value : "",
-            pcadgId: dataItem ? dataItem.pcadgId : "",
-            pcadId: rowCount,
-            unit: dataItem ? dataItem.unit : "无"
-          })
-        })
-
-        tableKVData.value = kvData
-        // console.log("tableKVData.value", tableKVData.value)
-      }
-    })
-    .catch((err) => {
-      console.error("err", err)
-      ElMessage.error("值初始化失败")
-    })
+      tableKVData.value = kvData
+    }
+  } catch (err) {
+    console.error("值初始化失败:", err)
+    ElMessage.error("值初始化失败")
+  }
 }
 
 const getlistopt = async (item, gettype) => {