hurx пре 3 дана
родитељ
комит
ad68bd8327
2 измењених фајлова са 45 додато и 72 уклоњено
  1. 17 23
      src/views/order/saleOrder/OrderTreeNode.vue
  2. 28 49
      src/views/order/saleOrder/sendDetail.vue

+ 17 - 23
src/views/order/saleOrder/OrderTreeNode.vue

@@ -7,7 +7,9 @@
     <el-card class="node-card" shadow="hover">
       <template #header>
         <div class="card-header">
-          <el-tag :type="levelTagType" size="small">{{ levelLabel }}</el-tag>
+          <el-tag :type="levelTagType(orderData.currentLevel || 1)" size="small">
+            {{ levelLabel(orderData.currentLevel || 1) }}
+          </el-tag>
           <span class="order-no">{{ orderData.orderNo }}</span>
           <dict-tag v-if="orderData.orderStatus" :options="orderStatusDict" :value="orderData.orderStatus" />
           <span v-if="orderData.totalAmount" class="amount">¥{{ orderData.totalAmount }}</span>
@@ -26,14 +28,13 @@
         <el-descriptions-item label="下单时间">{{ orderData.orderTime || '--' }}</el-descriptions-item>
         <el-descriptions-item label="确认时间">{{ orderData.confirmTime || '--' }}</el-descriptions-item>
         <el-descriptions-item label="签收时间">{{ orderData.receivingTime || '--' }}</el-descriptions-item>
-        <el-descriptions-item v-if="orderData.purchaseReason" label="采购事由">{{ orderData.purchaseReason }}</el-descriptions-item>
         <el-descriptions-item v-if="orderData.remark" label="备注">{{ orderData.remark }}</el-descriptions-item>
       </el-descriptions>
 
       <!-- 商品列表 -->
-      <div v-if="products.length" class="section">
-        <h4 class="section-title">商品明细({{ products.length }}种)</h4>
-        <el-table :data="products" border style="width: 100%" size="small">
+      <div v-if="orderData.productList && orderData.productList.length" class="section">
+        <h4 class="section-title">商品明细({{ orderData.productList.length }}种)</h4>
+        <el-table :data="orderData.productList" border style="width: 100%" size="small">
           <el-table-column label="产品图片" width="100">
             <template #default="scope">
               <el-image v-if="scope.row.productImage" :src="scope.row.productImage" style="width: 60px; height: 60px" fit="cover" />
@@ -69,36 +70,29 @@
 </template>
 
 <script setup lang="ts">
-import { ref, computed, inject } from 'vue';
+import { ref, inject } from 'vue';
 import type { OrderTreeVo } from '@/api/order/orderMain/types';
 
 defineOptions({ name: 'OrderTreeNode' });
 
-const props = defineProps<{
+defineProps<{
   orderData: OrderTreeVo;
 }>();
 
+const LEVEL_LABELS = ['', '一级订单', '二级订单', '三级订单', '四级订单', '五级订单'];
+const LEVEL_TYPES = ['primary', 'success', 'warning', 'info', 'danger'] as const;
+
 const orderStatusDict = inject<any[]>('orderStatusDict', []);
 
 const activeChildNames = ref<string[]>([]);
 
-const products = computed(() => {
-  return props.orderData.productList || [];
-});
-
-const currentLevel = computed(() => props.orderData.currentLevel || 1);
-
-const levelLabel = computed(() => {
-  const labels = ['', '一级订单', '二级订单', '三级订单', '四级订单', '五级订单'];
-  const lv = currentLevel.value;
-  return lv <= 5 ? labels[lv] : `${lv}级订单`;
-});
+function levelLabel(lv: number) {
+  return lv <= 5 ? LEVEL_LABELS[lv] : `${lv}级订单`;
+}
 
-const levelTagType = computed<'primary' | 'success' | 'warning' | 'info' | 'danger'>(() => {
-  const types = ['primary', 'success', 'warning', 'info', 'danger'] as const;
-  const lv = currentLevel.value;
-  return lv <= 5 ? types[lv - 1] || 'primary' : 'info';
-});
+function levelTagType(lv: number) {
+  return lv <= 5 ? LEVEL_TYPES[lv - 1] || 'primary' : 'info';
+}
 </script>
 
 <style scoped lang="scss">

+ 28 - 49
src/views/order/saleOrder/sendDetail.vue

@@ -47,7 +47,6 @@ import { getOrderMainAndSubOrder } from '@/api/order/orderMain';
 import { OrderMainVO, OrderTreeVo } from '@/api/order/orderMain/types';
 import OrderTreeNode from './OrderTreeNode.vue';
 import { OrderProductVO } from '@/api/order/orderProduct/types';
-import { DeliverProductVO } from '@/api/order/deliverProduct/types';
 import { listOrderDeliver } from '@/api/order/orderDeliver';
 import { OrderDeliverVO } from '@/api/order/orderDeliver/types';
 import { listDeliverProduct } from '@/api/order/deliverProduct';
@@ -103,7 +102,6 @@ const productList = ref<OrderProductVO[]>([]);
 
 // 发货包裹列表
 const orderDeliverList = ref<OrderDeliverVO[]>([]);
-const deliverProductList = ref<DeliverProductVO[]>([]);
 
 // 收货地址信息
 const shippingAddress = ref<ShippingAddressVO>({} as ShippingAddressVO);
@@ -182,74 +180,55 @@ const getOrderDetail = async () => {
     const res = await getOrderMainAndSubOrder(orderId as any);
     orderDetail.value = res.data;
     orderTreeData.value = res.data;
+  } catch (error) {
+    console.error('获取订单详情失败:', error);
+    proxy?.$modal.msgError('获取订单详情失败');
+  } finally {
+    loading.value = false;
+  }
 
-    // 获取商品明细(优先从树接口的 productList,其次从 orderProductList)
+  // 以下辅助数据异步加载,不阻塞树结构渲染
+  loadAuxiliaryData();
+};
+
+const loadAuxiliaryData = async () => {
+  try {
     if ((orderDetail.value as any).productList) {
       productList.value = (orderDetail.value as any).productList;
-    } else if (orderDetail.value.orderProductList) {
-      productList.value = orderDetail.value.orderProductList;
-    }
-
-    // 获取发货商品明细
-    if (orderDetail.value.deliverProductList) {
-      deliverProductList.value = orderDetail.value.deliverProductList;
     }
 
-    // 获取发货单及关联的物流商品信息
     if (orderDetail.value.id) {
-      await getOrderDeliverListData(orderDetail.value.id);
+      getOrderDeliverListData(orderDetail.value.id);
     }
 
-    // 获取收货地址
     if (orderDetail.value.shippingAddressId) {
-      await getShippingAddressDetail(orderDetail.value.shippingAddressId);
+      getShippingAddressDetail(orderDetail.value.shippingAddressId);
     }
-
-    // 获取仓库信息
     if (orderDetail.value.warehouseId) {
-      await getWarehouseDetail(orderDetail.value.warehouseId);
+      getWarehouseDetail(orderDetail.value.warehouseId);
     }
-
-    // 获取公司信息
     if (orderDetail.value.companyId) {
-      await getCompanyDetail(orderDetail.value.companyId);
+      getCompanyDetail(orderDetail.value.companyId);
     }
-
-    // 获取客户信息
     if (orderDetail.value.customerId) {
-      await getCustomerDetail(orderDetail.value.customerId);
+      getCustomerDetail(orderDetail.value.customerId);
     }
     if (orderDetail.value.userDept) {
-      orderDetail.value.userDeptName = await getDeptDetail(orderDetail.value.userDept);
+      getDeptDetail(orderDetail.value.userDept).then((name) => {
+        orderDetail.value.userDeptName = name;
+      });
     }
 
-    // 获取中车订单扩展信息
-    //如果data.parentOrderId存在,则使用data.parentOrderId查询,否则使用data.id查询
-    if (orderDetail.value.parentOrderId) {
-      try {
-        const extRes = await getOrderMainCrrcExt(orderDetail.value.parentOrderId);
-        crrcExtInfo.value = extRes.data || ({} as OrderMainCrrcExtVO);
-      } catch (error) {
-        console.error('获取中车订单扩展信息失败:', error);
-      }
-    } else if (orderDetail.value.id) {
-      try {
-        const extRes = await getOrderMainCrrcExt(orderDetail.value.id);
-        crrcExtInfo.value = extRes.data || ({} as OrderMainCrrcExtVO);
-      } catch (error) {
-        console.error('获取中车订单扩展信息失败:', error);
-      }
+    const crrcId = orderDetail.value.parentOrderId || orderDetail.value.id;
+    if (crrcId) {
+      getOrderMainCrrcExt(crrcId)
+        .then((extRes) => {
+          crrcExtInfo.value = extRes.data || ({} as OrderMainCrrcExtVO);
+        })
+        .catch(() => {});
     }
-
-    // 获取发票类型信息
-    // if (orderDetail.value.invoiceType) {
-    //   await getInvoiceTypeDetail(orderDetail.value.invoiceType);
-    // }
   } catch (error) {
-    console.error('获取订单详情失败:', error);
-    proxy?.$modal.msgError('获取订单详情失败');
-  } finally {
-    loading.value = false;
+    console.error('加载辅助数据失败:', error);
   }
 };