hurx 4 天之前
父節點
當前提交
42a6e2fa0f

+ 4 - 0
src/api/order/orderMain/types.ts

@@ -275,6 +275,10 @@ export interface OrderMainVO {
 
   assignmentStatus: string;
 
+  assigneeRemark: string;
+
+  assigneeName: string;
+
   orderProductList: any[];
 
   deliverProductList: any[];

+ 13 - 2
src/views/order/orderAssignment/splitAssignDialog.vue

@@ -121,6 +121,7 @@
               </template>
             </el-table-column>
             <el-table-column label="分配人" prop="assigneeName" min-width="200" align="left" />
+            <!-- <el-table-column label="分配备注" prop="remark" align="left" /> -->
           </el-table>
         </el-tab-pane>
 
@@ -130,6 +131,7 @@
             <el-table-column label="分配时间" prop="createTime" align="center" />
             <el-table-column label="分配人" prop="createName" align="center" />
             <el-table-column label="分配目标" prop="assigneeName" align="center" />
+            <el-table-column label="分配备注" prop="remark" align="center" />
             <el-table-column label="报备单号" prop="preparedOrderNo" align="center">
               <template #default="scope">
                 {{ scope.row.preparedOrderNo || '-' }}
@@ -201,7 +203,14 @@
             </div>
           </el-col>
         </el-row>
-
+        <el-row :gutter="20" style="margin-top: 20px">
+          <el-col :span="24">
+            <div class="target-input-wrapper">
+              <span class="label">分配备注: </span>
+              <el-input v-model="assignForm.remark"></el-input>
+            </div>
+          </el-col>
+        </el-row>
         <el-row :gutter="20" style="margin-top: 20px" v-show="assignForm.targetType === 'bp'">
           <el-col :span="12">
             <div class="target-input-wrapper">
@@ -337,6 +346,7 @@ const orderInfo = ref<any>({
 const assignForm = reactive({
   targetType: 'bp', // 分配对象类型:bp-伙伴商
   targetId: '', // 分配目标ID
+  remark: '',
   productList: [] as any[],
   preparedStatus: '0',
   preparedOrderId: undefined,
@@ -454,6 +464,7 @@ const loadAssignRecords = async (orderId: string | number) => {
 const reset = () => {
   assignForm.targetType = '';
   assignForm.targetId = '';
+  assignForm.remark = '';
   assignForm.productList = [];
   selectedPendingProducts.value = [];
   selectedAssignProducts.value = [];
@@ -588,7 +599,7 @@ const submitAssign = async () => {
           assigneeType: assignForm.targetType // "mkt" 或 "bp"
         })
       ),
-      remark: '' // 分配备注(可选)
+      remark: assignForm.remark // 分配备注
     };
 
     // 调用拆单分配接口

+ 51 - 19
src/views/order/orderDeliver/index.vue

@@ -23,12 +23,12 @@
                 <el-option v-for="dict in order_status" :key="dict.value" :label="dict.label" :value="dict.value" />
               </el-select>
             </el-form-item> -->
-            <el-form-item label="业务员" prop="">
+            <!-- <el-form-item label="业务员" prop="">
               <el-select v-model="queryParams.orderStatus" placeholder="请选择业务员" clearable> </el-select>
             </el-form-item>
             <el-form-item label="部门" prop="">
               <el-select v-model="queryParams.orderStatus" placeholder="请选择部门" clearable> </el-select>
-            </el-form-item>
+            </el-form-item> -->
             <el-form-item label="提交时间" prop="createTime">
               <el-date-picker
                 v-model="dateRange"
@@ -50,30 +50,29 @@
 
     <el-card shadow="never">
       <template #header>
-        <el-row :gutter="10" class="mb8">
-          <el-col :span="19"> 发货单信息列表 </el-col>
-          <el-col :span="1.5">
+        <el-row :gutter="10" class="mb8" type="flex" justify="space-between" align="middle">
+          <!-- 左侧标题 -->
+          <span style="font-size: 16px; font-weight: 500">发货单信息列表</span>
+          <div style="display: flex; flex-wrap: nowrap; gap: 10px">
             <el-button type="primary" @click="handleCloseOrder()" :disabled="!ids.length" plain>关闭订单</el-button>
-          </el-col>
-          <el-col :span="1.5">
             <el-button type="primary" @click="handleDelete()" :disabled="!ids.length" plain>删除订单</el-button>
-          </el-col>
-          <el-col :span="1.5">
             <el-button type="primary" :disabled="!ids.length" plain>导出订单</el-button>
-          </el-col>
+          </div>
         </el-row>
       </template>
 
       <el-table v-loading="loading" border :data="orderMainList" @selection-change="handleSelectionChange">
         <el-table-column type="selection" width="55" align="center" />
         <el-table-column label="发货单编号" align="center" prop="shipmentNo" />
-        <el-table-column label="订单编号" align="center" prop="orderNo" />
-        <el-table-column label="客户名称" align="center" prop="customerName" />
-        <el-table-column label="发货时间" align="center" prop="deliverTime" />
-        <el-table-column label="签收时间" align="center" prop="deliverTime" />
-        <el-table-column label="发货方式" align="center" prop="deliverMethod">
+        <el-table-column label="关联单号" align="center" prop="parentOrderNo" />
+        <el-table-column label="平台\项目订单号" align="center" prop="projectOrderNo">
+          <template #default="scope">
+            <span>{{ scope.row._crrcOrderNo || '' }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="客户名称" align="center" prop="customerName">
           <template #default="scope">
-            <dict-tag :options="deliver_method" :value="scope.row.deliverMethod" />
+            <span>{{ scope.row.customerName || '--' }}</span>
           </template>
         </el-table-column>
         <el-table-column label="订单状态" align="center" prop="orderStatus">
@@ -83,7 +82,12 @@
         </el-table-column>
         <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
           <template #default="scope">
-            <!-- <el-button link type="primary" v-if="scope.row.orderStatus != '4'" @click="handleDeliver(scope.row)">发货</el-button> -->
+            <el-button link type="primary" v-if="scope.row.orderStatus == '0' || scope.row.orderStatus == '1'" @click="handleAffirm(scope.row)"
+              >确认订单</el-button
+            >
+            <el-button link type="primary" v-if="scope.row.orderStatus == '2' || scope.row.orderStatus == '3'" @click="handleDeliver(scope.row)"
+              >发货</el-button
+            >
             <el-button link type="primary" @click="handleReview(scope.row)">查看发货信息</el-button>
             <el-button
               link
@@ -118,6 +122,7 @@ import {
   queryOrderStatusStats,
   closeOrderMain
 } from '@/api/order/orderMain';
+import { getOrderMainCrrcExt } from '@/api/order/orderMainCrrcExt';
 import { OrderMainVO, OrderMainQuery, OrderMainForm } from '@/api/order/orderMain/types';
 import DeliverDialog from '../saleOrder/deliverDialog.vue';
 import LogisticsDetail from '../saleOrder/logisticsDetail.vue';
@@ -125,7 +130,6 @@ const { proxy } = getCurrentInstance() as ComponentInternalInstance;
 const { order_status, fee_type, pay_method, order_source, deliver_method } = toRefs<any>(
   proxy?.useDict('order_status', 'fee_type', 'pay_method', 'order_source', 'deliver_method')
 );
-
 const orderMainList = ref<OrderMainVO[]>([]);
 const buttonLoading = ref(false);
 const loading = ref(true);
@@ -238,7 +242,7 @@ const data = reactive<PageData<OrderMainForm, OrderMainQuery>>({
     paymentStatus: undefined,
     orderSource: undefined,
     orderStatus: undefined,
-    orderStatuses: '2,3,4',
+    orderStatuses: '1,2,3,4',
     orderTime: undefined,
     confirmTime: undefined,
     shippingTime: undefined,
@@ -276,6 +280,8 @@ const { queryParams, form, rules } = toRefs(data);
 const getList = async () => {
   loading.value = true;
   const res = await listOrderMain(proxy?.addDateRange(queryParams.value, dateRange.value));
+  const rows = res.rows;
+  await fetchCrrcOrderNos(rows);
   orderMainList.value = res.rows;
   total.value = res.total;
   loading.value = false;
@@ -298,6 +304,13 @@ const queryOrderStatusStatsMethod = async () => {
   orderStatusStats.value = res as any;
 };
 
+const handleAffirm = (row?: OrderMainVO) => {
+  router.push({
+    path: '/order-manage/order-affirm',
+    query: { id: row.id }
+  });
+};
+
 /** 关闭订单操作 */
 const handleCloseOrder = async (row?: OrderMainVO) => {
   const _ids = row?.id || ids.value;
@@ -307,6 +320,25 @@ const handleCloseOrder = async (row?: OrderMainVO) => {
   await getList();
 };
 
+// 批量获取平台订单号
+const fetchCrrcOrderNos = async (rows: OrderMainVO[]) => {
+  const results = await Promise.allSettled(
+    rows.map((row) => {
+      const id = row.parentOrderId || row.id;
+      if (!id) return Promise.resolve(null);
+      return getOrderMainCrrcExt(id);
+    })
+  );
+  rows.forEach((row, i) => {
+    const result = results[i];
+    if (result.status === 'fulfilled') {
+      (row as any)._crrcOrderNo = result.value?.data?.crrcOrderNo || '';
+    } else {
+      (row as any)._crrcOrderNo = '';
+    }
+  });
+};
+
 /** 取消按钮 */
 const cancel = () => {
   reset();

+ 4 - 6
src/views/order/saleOrder/index.vue

@@ -695,7 +695,10 @@ const getButtonsByStatus = (orderStatus: string, checkStatus: string): ActionBut
   // if (orderStatus === OrderStatus.PENDING_SHIPMENT || orderStatus === OrderStatus.PARTIAL_SHIPMENT) {
   //   buttons.push({ label: '发货', handler: handleDeliver });
   // }
-
+  // 发货完成或已完成:显示查看物流按钮
+  if (orderStatus === OrderStatus.PARTIAL_SHIPMENT || orderStatus === OrderStatus.SHIPMENT_COMPLETED || orderStatus === OrderStatus.COMPLETED) {
+    buttons.push({ label: '查看物流', handler: handleViewLogistics });
+  }
   // 待发货、部分发货、发货完成、已完成:显示查看订单信息按钮
   if (
     [OrderStatus.PENDING_SHIPMENT, OrderStatus.PARTIAL_SHIPMENT, OrderStatus.SHIPMENT_COMPLETED, OrderStatus.COMPLETED].includes(
@@ -705,11 +708,6 @@ const getButtonsByStatus = (orderStatus: string, checkStatus: string): ActionBut
     buttons.push({ label: '查看订单信息', handler: handleReview });
   }
 
-  // 发货完成或已完成:显示查看物流按钮
-  if (orderStatus === OrderStatus.PARTIAL_SHIPMENT || orderStatus === OrderStatus.SHIPMENT_COMPLETED || orderStatus === OrderStatus.COMPLETED) {
-    buttons.push({ label: '查看物流', handler: handleViewLogistics });
-  }
-
   // 非已取消和已关闭状态:显示取消订单按钮
   if (orderStatus !== OrderStatus.CANCELLED && orderStatus !== OrderStatus.CLOSED && orderStatus !== OrderStatus.SHIPMENT_COMPLETED) {
     buttons.push({ label: '取消订单', handler: handleCancel });

+ 54 - 13
src/views/order/saleOrder/orderAffirm.vue

@@ -17,8 +17,7 @@
       </template>
 
       <el-form ref="orderMainFormRef" :model="orderInfo" label-width="100px">
-        <el-row :gutter="20">
-          <!-- 第一行 -->
+        <!-- <el-row :gutter="20">
           <el-col :span="8">
             <el-form-item label="归属公司">
               <el-input :value="orderInfo.companyName || orderInfo.companyId" disabled />
@@ -32,7 +31,6 @@
         </el-row>
 
         <el-row :gutter="20">
-          <!-- 第二行 -->
           <el-col :span="8">
             <el-form-item label="信用额度">
               <el-input v-model="orderInfo.creditLimit" placeholder="0" disabled />
@@ -51,7 +49,6 @@
         </el-row>
 
         <el-row :gutter="20">
-          <!-- 第三行 -->
           <el-col :span="8">
             <el-form-item label="业务人员">
               <el-input v-model="orderInfo.businessStaff" disabled />
@@ -70,7 +67,6 @@
         </el-row>
 
         <el-row :gutter="20">
-          <!-- 第四行 -->
           <el-col :span="8">
             <el-form-item label="发票类型">
               <el-select v-model="orderInfo.invoiceType" placeholder="请选择" style="width: 100%" disabled>
@@ -101,7 +97,6 @@
         </el-row>
 
         <el-row :gutter="20">
-          <!-- 第五行 -->
           <el-col :span="8">
             <el-form-item label="发货仓库">
               <el-input :value="orderInfo.warehouseName || orderInfo.warehouseId" disabled />
@@ -119,10 +114,9 @@
               <el-input :value="orderInfo.userDeptName || orderInfo.userDept" disabled />
             </el-form-item>
           </el-col>
-        </el-row>
+        </el-row> -->
 
         <el-row :gutter="20">
-          <!-- 第六行 -->
           <el-col :span="24">
             <el-form-item label="采购事由">
               <el-input v-model="orderInfo.purchaseReason" placeholder="请输入采购事由" type="textarea" :rows="2" disabled />
@@ -131,7 +125,6 @@
         </el-row>
 
         <el-row :gutter="20">
-          <!-- 第七行 -->
           <el-col :span="24">
             <el-form-item label="订单备注">
               <el-input v-model="orderInfo.remark" placeholder="请输入订单备注" type="textarea" :rows="2" disabled />
@@ -142,7 +135,7 @@
     </el-card>
 
     <!-- 收货地址 -->
-    <el-card shadow="never" class="mb-2">
+    <el-card shadow="never" class="mb-2" v-if="!orderInfo.dataSource">
       <template #header>
         <div class="card-header">
           <span>收货地址</span>
@@ -176,7 +169,36 @@
         </el-row>
       </el-form>
     </el-card>
-
+    <!-- 分配信息 -->
+    <el-card shadow="never" class="mb-2">
+      <template #header>
+        <span>分配信息</span>
+      </template>
+      <el-descriptions :column="2" border class="custom-descriptions">
+        <el-descriptions-item label="伙伴商名称">{{ orderInfo.assigneeName }}</el-descriptions-item>
+        <el-descriptions-item label="分配备注">{{ orderInfo.assigneeRemark }}</el-descriptions-item>
+      </el-descriptions>
+    </el-card>
+    <!-- 项目订单扩展信息 -->
+    <el-card v-if="orderInfo.dataSource" shadow="never" class="mb-2">
+      <template #header>
+        <span>项目订单扩展信息</span>
+      </template>
+      <el-descriptions :column="3" border class="custom-descriptions">
+        <el-descriptions-item label="收货人">{{ crrcExtInfo.receiverName || '--' }}</el-descriptions-item>
+        <el-descriptions-item label="收货人手机号" :span="2">{{ crrcExtInfo.mobile || '--' }}</el-descriptions-item>
+        <el-descriptions-item label="收货人邮箱">{{ crrcExtInfo.email || '--' }}</el-descriptions-item>
+        <el-descriptions-item label="收货地址" :span="2">
+          {{ crrcExtInfo.provinceName || '' }}-{{ crrcExtInfo.cityName || '' }}-{{ crrcExtInfo.countyName || '' }}-{{ crrcExtInfo.townName || '' }}-{{
+            crrcExtInfo.detailAddress || ''
+          }}
+        </el-descriptions-item>
+        <el-descriptions-item label="下单人姓名">{{ crrcExtInfo.buyerName || '--' }}</el-descriptions-item>
+        <el-descriptions-item label="下单人手机号" :span="2">{{ crrcExtInfo.buyerMobile || '--' }}</el-descriptions-item>
+        <el-descriptions-item label="采购单位名称" :span="3">{{ crrcExtInfo.purchaserName || '--' }}</el-descriptions-item>
+        <el-descriptions-item label="采购部门名称" :span="3">{{ crrcExtInfo.purchaserDeptName || '--' }}</el-descriptions-item>
+      </el-descriptions>
+    </el-card>
     <!-- 商品明细 -->
     <el-card shadow="never" class="mb-2">
       <template #header>
@@ -262,7 +284,8 @@ import { getWarehouse } from '@/api/company/warehouse';
 import { getCustomerInfo } from '@/api/customer/customerFile/customerInfo';
 import { getDept } from '@/api/system/dept';
 import { useRoute, useRouter } from 'vue-router';
-
+import { getOrderMainCrrcExt } from '@/api/order/orderMainCrrcExt';
+import { OrderMainCrrcExtVO } from '@/api/order/orderMainCrrcExt/types';
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
 const { pay_method, fee_type } = toRefs<any>(proxy?.useDict('pay_method', 'fee_type'));
 
@@ -277,7 +300,8 @@ const orderInfo = ref<any>({});
 const addressInfo = ref<any>({});
 // 商品列表
 const productList = ref<any[]>([]);
-
+// 中车订单扩展信息
+const crrcExtInfo = ref<OrderMainCrrcExtVO>({} as OrderMainCrrcExtVO);
 // 计算商品总数
 const totalQuantity = computed(() => {
   return productList.value.reduce((sum, item) => {
@@ -428,6 +452,23 @@ const getOrderDetail = async (orderId: string | number) => {
         addressInfo.value = { ...addressInfo.value, id: data.shippingAddressId };
       }
     }
+    // 获取中车订单扩展信息
+    //如果data.parentOrderId存在,则使用data.parentOrderId查询,否则使用data.id查询
+    if (data?.parentOrderId) {
+      try {
+        const extRes = await getOrderMainCrrcExt(data.parentOrderId);
+        crrcExtInfo.value = extRes.data || ({} as OrderMainCrrcExtVO);
+      } catch (error) {
+        console.error('获取中车订单扩展信息失败:', error);
+      }
+    } else if (data?.id) {
+      try {
+        const extRes = await getOrderMainCrrcExt(data.id);
+        crrcExtInfo.value = extRes.data || ({} as OrderMainCrrcExtVO);
+      } catch (error) {
+        console.error('获取中车订单扩展信息失败:', error);
+      }
+    }
 
     // 设置商品列表 - 支持多种可能的字段名
     let products = [];

+ 22 - 4
src/views/order/saleOrder/sendDetail.vue

@@ -4,7 +4,7 @@
       <!-- 订单信息 -->
       <el-descriptions title="订单信息" :column="2" border class="custom-descriptions">
         <el-descriptions-item label="订单编号">{{ orderDetail.orderNo }}</el-descriptions-item>
-       <el-descriptions-item label="关联单号">{{ orderDetail.parentOrderNo }}</el-descriptions-item>
+        <el-descriptions-item label="关联单号">{{ orderDetail.parentOrderNo }}</el-descriptions-item>
         <el-descriptions-item label="项目/平台订单号" v-if="crrcExtInfo.crrcOrderNo">{{ crrcExtInfo.crrcOrderNo }}</el-descriptions-item>
         <el-descriptions-item label="发货单编号">{{ orderDetail.shipmentNo }}</el-descriptions-item>
         <el-descriptions-item label="订单总金额">{{ orderDetail.totalAmount }}</el-descriptions-item>
@@ -22,7 +22,7 @@
     </el-card>
 
     <!-- 订单详情信息 -->
-    <el-card shadow="never" class="mb-2">
+    <!-- <el-card shadow="never" class="mb-2">
       <template #header>
         <span>订单基本信息</span>
       </template>
@@ -94,10 +94,10 @@
           </div>
         </el-col>
       </el-row>
-    </el-card>
+    </el-card> -->
 
     <!-- 收货信息 -->
-    <el-card shadow="never" class="mb-2">
+    <el-card shadow="never" class="mb-2" v-if="!orderDetail.dataSource">
       <template #header>
         <span>收货信息</span>
       </template>
@@ -107,6 +107,15 @@
         <el-descriptions-item label="收货地址">{{ shippingAddress.provincialCityCountry }} {{ shippingAddress.address }}</el-descriptions-item>
       </el-descriptions>
     </el-card>
+    <el-card shadow="never" class="mb-2">
+      <template #header>
+        <span>分配信息</span>
+      </template>
+      <el-descriptions :column="2" border class="custom-descriptions">
+        <el-descriptions-item label="伙伴商名称">{{ orderDetail.assigneeName }}</el-descriptions-item>
+        <el-descriptions-item label="分配备注">{{ orderDetail.assigneeRemark }}</el-descriptions-item>
+      </el-descriptions>
+    </el-card>
 
     <!-- 项目订单扩展信息 -->
     <el-card v-if="orderDetail.dataSource" shadow="never" class="mb-2">
@@ -676,6 +685,15 @@ const handlePrint = () => {
 onMounted(() => {
   getOrderDetail();
 });
+// 监听路由 query 中的 id 变化
+watch(
+  () => route.query.id, // 监听 id 的变化
+  (newOrderId) => {
+    if (newOrderId) {
+      getOrderDetail();
+    }
+  }
+);
 </script>
 
 <style scoped lang="scss">