Kaynağa Gözat

修改发货部分

hurx 1 hafta önce
ebeveyn
işleme
9a5b3f3c15

+ 2 - 0
src/api/order/orderDeliver/types.ts

@@ -82,6 +82,8 @@ export interface OrderDeliverVO {
   remark: string;
 
   deliverProductList: any[];
+
+  deliverCode?: string;
 }
 
 export interface OrderDeliverForm extends BaseEntity {

+ 2 - 2
src/views/order/saleOrder/deliverDialog.vue

@@ -256,7 +256,7 @@ const loadProductList = async () => {
   try {
     const res = await getOrderMain(props.orderId);
     // 为每个商品添加发货数量字段,默认为未发货数量
-    productList.value = (res.data.orderProductList || []).map((item: OrderProductVO) => ({
+    productList.value = (res.data.orderProductList.filter((item) => item.unsentQuantity != 0) || []).map((item: OrderProductVO) => ({
       ...item,
       deliverNum: 0,
       productNo: item.productNo,
@@ -265,7 +265,7 @@ const loadProductList = async () => {
       productUnit: item.productUnit,
       productUnitId: item.productUnitId
     }));
-    total.value = res.data.orderProductList.length || 0;
+    total.value = res.data.orderProductList.filter((item) => item.unsentQuantity != 0).length || 0;
   } catch (error) {
     console.error('加载商品列表失败:', error);
     ElMessage.error('加载商品列表失败');

+ 50 - 25
src/views/order/saleOrder/logisticsDetail.vue

@@ -9,8 +9,8 @@
             <el-option
               v-for="item in logisticsList"
               :key="item.id"
-              :label="`${item.logisticNo},${getDictLabel(deliver_method, item.deliverMethod)}`"
-              :value="item.logisticNo"
+              :label="`${item.logisticNo || item.deliverCode},${getDictLabel(deliver_method, item.deliverMethod)}`"
+              :value="item.logisticNo || item.deliverCode"
             />
           </el-select>
         </el-form-item>
@@ -39,7 +39,7 @@
 <script setup lang="ts">
 import { listOrderDeliver, queryTrack } from '@/api/order/orderDeliver';
 import { OrderDeliverVO } from '@/api/order/orderDeliver/types';
-
+import { listOrderStatusLog } from '@/api/order/orderStatusLog';
 interface Props {
   modelValue: boolean;
   orderId?: string | number;
@@ -88,7 +88,7 @@ const loadLogisticsList = async () => {
     logisticsList.value = res.rows || [];
 
     if (logisticsList.value.length > 0) {
-      form.value.selectedLogisticNo = logisticsList.value[0].logisticNo;
+      form.value.selectedLogisticNo = logisticsList.value[0].logisticNo || logisticsList.value[0].deliverCode;
       handleLogisticNoChange(form.value.selectedLogisticNo);
     }
   } catch (error) {
@@ -98,29 +98,54 @@ const loadLogisticsList = async () => {
 
 const handleLogisticNoChange = async (logisticNo: string) => {
   const selected = logisticsList.value.find((item) => item.logisticNo === logisticNo);
-  if (!selected) return;
-
   try {
-    const res = await queryTrack({
-      logisticNo: logisticNo,
-      pageNum: 1,
-      pageSize: 100
-    });
-
-    if (res.data && Array.isArray(res.data) && res.data.length > 0) {
-      logisticsInfo.value = res.data.map((item: any) => ({
-        time: item.acceptTime || item.time || '',
-        location: selected.orderCode ? `${selected.orderCode}` : '',
-        status: item.context || ''
-      }));
+    if (selected) {
+      const res = await queryTrack({
+        logisticNo: logisticNo,
+        pageNum: 1,
+        pageSize: 100
+      });
+      // 1. 兼容处理:有些接口返回在 res.data,有些可能直接是 res
+      const dataList = res.data || [];
+      if (Array.isArray(dataList) && dataList.length > 0) {
+        logisticsInfo.value = dataList.map((item: any) => {
+          // 2. 核心修复:精准匹配时间字段
+          // 顺丰用 'time',韵达用 'ftime'。
+          // 优先取 ftime (韵达标准),如果没有则取 time (顺丰标准)
+          const displayTime = item.ftime || item.time || item.acceptTime || '';
+
+          return {
+            time: displayTime,
+            // 3. 建议:保留原始状态字段,方便后续筛选(如“已签收”)
+            status: item.context || item.content || '',
+            // 4. 建议:如果有地址字段,也可以映射进来,没有则保持订单号
+            location: item.location || (selected.orderCode ? `${selected.orderCode}` : '')
+          };
+        });
+      }
     } else {
-      logisticsInfo.value = [
-        {
-          time: (selected as any).createTime || '',
-          location: selected.orderCode ? `${selected.orderCode}` : '',
-          status: '已下单'
-        }
-      ];
+      await listOrderStatusLog({
+        orderId: props.orderId,
+        logisticNos: form.value.selectedLogisticNo,
+        pageNum: 1,
+        pageSize: 100
+      }).then((res) => {
+        logisticsInfo.value = res.rows.map((item: any) => {
+          return {
+            time: item.createTime,
+            location: item.orderCode ? `${item.orderCode}` : '',
+            status: item.statusName
+          };
+        });
+      });
+
+      // logisticsInfo.value = [
+      //   {
+      //     time: (selected as any).createTime || '',
+      //     location: selected.orderCode ? `${selected.orderCode}` : '',
+      //     status: '已下单'
+      //   }
+      // ];
     }
   } catch (error) {
     console.error('Failed to query track:', error);

+ 3 - 1
src/views/order/saleOrder/sendDetail.vue

@@ -315,7 +315,9 @@ const logisticsOrderId = ref<string | number>();
 const statusLogDrawerRef = ref<any>(null);
 
 /** 发货成功回调 */
-const handleDeliverSuccess = () => {};
+const handleDeliverSuccess = () => {
+  getOrderDetail();
+};
 
 // 计算商品总数(所有商品的采购数量之和)
 const totalQuantity = computed(() => {

+ 42 - 16
src/views/partner/merchant/components/ContractDialog.vue

@@ -1,39 +1,46 @@
 <template>
   <el-dialog v-model="dialogVisible" title="合同管理" width="700px" append-to-body @close="handleClose">
-    <el-form ref="formRef" :model="formData" :rules="rules" label-width="130px">
+    <el-form ref="formRef" :model="form" :rules="rules" label-width="130px">
       <el-row :gutter="20">
         <el-col :span="12">
           <el-form-item label="合同编号" prop="contractNo">
-            <el-input v-model="formData.contractNo" placeholder="请输入" />
+            <el-input v-model="form.contractNo" placeholder="请输入" />
           </el-form-item>
         </el-col>
         <el-col :span="12">
-          <el-form-item label="合作项目名称">
-            <el-input v-model="formData.cooperativeName" placeholder="请输入" />
+          <el-form-item label="合作项目名称" prop="cooperationId">
+            <el-select v-model="form.cooperationId" placeholder="请选择" class="w-full" filterable @change="handleCooperationChange">
+              <el-option
+                v-for="project in projectInfoList"
+                :key="project.id"
+                :label="`${project.projectNo} , ${project.projectName}`"
+                :value="project.id"
+              />
+            </el-select>
           </el-form-item>
         </el-col>
       </el-row>
       <el-row :gutter="20">
         <el-col :span="12">
           <el-form-item label="合作开始时间">
-            <el-date-picker v-model="formData.startTime" type="date" placeholder="请选择日期" value-format="YYYY-MM-DD" style="width: 100%" />
+            <el-date-picker v-model="form.startTime" type="date" placeholder="请选择日期" value-format="YYYY-MM-DD" style="width: 100%" />
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="合作结束时间">
-            <el-date-picker v-model="formData.endTime" type="date" placeholder="请选择日期" value-format="YYYY-MM-DD" style="width: 100%" />
+            <el-date-picker v-model="form.endTime" type="date" placeholder="请选择日期" value-format="YYYY-MM-DD" style="width: 100%" />
           </el-form-item>
         </el-col>
       </el-row>
       <el-row :gutter="20">
         <el-col :span="12">
           <el-form-item label="合作费用">
-            <el-input v-model="formData.fee" placeholder="请输入" type="number" />
+            <el-input v-model="form.fee" placeholder="请输入" type="number" />
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="合同类型">
-            <el-select v-model="formData.contractType" placeholder="请选择" style="width: 100%">
+            <el-select v-model="form.contractType" placeholder="请选择" style="width: 100%">
               <el-option label="战略合作" :value="1" />
               <el-option label="项目合作" :value="2" />
             </el-select>
@@ -43,31 +50,31 @@
       <el-row :gutter="20">
         <el-col :span="12">
           <el-form-item label="结算周期">
-            <el-input v-model="formData.settlementCycle" placeholder="请输入" />
+            <el-input v-model="form.settlementCycle" placeholder="请输入" />
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="销售目标(万)">
-            <el-input v-model="formData.salesTarget" placeholder="请输入" />
+            <el-input v-model="form.salesTarget" placeholder="请输入" />
           </el-form-item>
         </el-col>
       </el-row>
       <el-row :gutter="20">
         <el-col :span="12">
           <el-form-item label="合作区域">
-            <el-input v-model="formData.area" placeholder="请输入" />
+            <el-input v-model="form.area" placeholder="请输入" />
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="联系人">
-            <el-input v-model="formData.contacts" placeholder="请输入" />
+            <el-input v-model="form.contacts" placeholder="请输入" />
           </el-form-item>
         </el-col>
       </el-row>
       <el-row :gutter="20">
         <el-col :span="12">
           <el-form-item label="联系电话">
-            <el-input v-model="formData.phone" placeholder="请输入" />
+            <el-input v-model="form.phone" placeholder="请输入" />
           </el-form-item>
         </el-col>
       </el-row>
@@ -86,7 +93,7 @@
       <el-row>
         <el-col :span="24">
           <el-form-item label="重要条款">
-            <el-input v-model="formData.importantTerms" type="textarea" :rows="3" placeholder="请输入" />
+            <el-input v-model="form.importantTerms" type="textarea" :rows="3" placeholder="请输入" />
           </el-form-item>
         </el-col>
       </el-row>
@@ -101,12 +108,13 @@
 <script setup lang="ts">
 import { ref, computed } from 'vue';
 import type { PartnerContractForm } from '@/api/partner/contract/types';
-
+import { listProjectInfo } from '@/api/project/projectInfo';
 interface Props {
   visible: boolean;
   formData: PartnerContractForm;
 }
 
+const projectInfoList = ref<any[]>([]);
 interface Emits {
   (e: 'update:visible', value: boolean): void;
   (e: 'update:formData', value: PartnerContractForm): void;
@@ -126,17 +134,35 @@ const rules = {
 };
 
 const formRef = ref();
+const form = ref<PartnerContractForm>({
+  ...props.formData,
+  cooperationId: props.formData.cooperationId || null
+});
 
 const handleClose = () => {
   emit('update:visible', false);
   formRef.value?.resetFields();
 };
 
+/** 查询项目信息列表 */
+const getProjectList = async () => {
+  const res = await listProjectInfo();
+  projectInfoList.value = res.rows;
+};
+
+const handleCooperationChange = (cooperationId: string | number) => {
+  const cooperative = projectInfoList.value.find((b) => b.id === cooperationId);
+  form.value.cooperativeName = cooperative?.projectName || '';
+};
+
 const handleSubmit = () => {
   formRef.value?.validate((valid: boolean) => {
     if (valid) {
-      emit('submit', props.formData);
+      emit('submit', form.value);
     }
   });
 };
+onMounted(() => {
+  getProjectList();
+});
 </script>