Forráskód Böngészése

修改伙伴商对账

hurx 3 hete
szülő
commit
55be96a855

+ 17 - 0
src/api/order/orderMain/index.ts

@@ -169,3 +169,20 @@ export function getCustomerOrderProductList(orderIds: (string | number)[]) {
     method: 'get'
   });
 }
+
+/**
+ * 修改回款状态
+ * @param ids
+ * @param returnedStatus
+ */
+export function changeReturnedStatus(ids: (string | number)[], returnedStatus: string) {
+  const data = {
+    ids,
+    returnedStatus
+  };
+  return request({
+    url: '/order/orderMain/changeReturnedStatus',
+    method: 'put',
+    data: data
+  });
+}

+ 4 - 4
src/views/bill/statementInvoice/index.vue

@@ -56,11 +56,11 @@
 
     <el-card shadow="never">
       <template #header>
-        <el-row :gutter="10" class="mb8">
-          <el-col :span="22"> 销售发票信息列表 </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" plain icon="Plus" @click="handleAdd" v-hasPermi="['bill:statementInvoice:add']">新增</el-button>
-          </el-col>
+          </div>
         </el-row>
       </template>
 

+ 62 - 11
src/views/bill/statementOrder/addDrawer.vue

@@ -26,20 +26,20 @@
             </el-form-item>
           </el-col>
           <el-col :span="8">
-            <el-form-item label="客户名称" prop="customerId">
+            <el-form-item label="伙伴商名称" prop="customerId">
               <el-select
                 v-model="form.customerId"
                 filterable
                 remote
                 reserve-keyword
-                placeholder="请输入客户名称"
-                :remote-method="remoteSearchCustomer"
+                placeholder="请输入伙伴商名称"
+                :remote-method="remoteSearchPartner"
                 :loading="customerLoading"
                 clearable
                 style="width: 100%"
-                @change="handleCustomerChange"
+                @change="handlePartnerChange"
               >
-                <el-option v-for="item in customerOptions" :key="item.id" :label="item.customerName" :value="item.id" />
+                <el-option v-for="item in partnerOptions" :key="item.id" :label="item.partnerName" :value="item.id" />
               </el-select>
             </el-form-item>
           </el-col>
@@ -114,7 +114,7 @@
         <el-table :data="form.detailList" border style="width: 100%; margin-bottom: 20px">
           <el-table-column type="index" label="序号" width="60" align="center" />
           <el-table-column prop="orderNo" label="订单编号" min-width="150" align="center" />
-          <el-table-column prop="deliverCode" label="发货单编号" min-width="150" align="center" />
+          <!-- <el-table-column prop="deliverCode" label="发货单编号" min-width="150" align="center" /> -->
           <el-table-column prop="amount" label="金额" min-width="120" align="center" />
           <el-table-column prop="orderTime" label="下单日期" min-width="120" align="center" />
           <el-table-column prop="userName" label="下单人" min-width="100" align="center" />
@@ -244,6 +244,8 @@ import { StatementOrderForm } from '@/api/bill/statementOrder/types';
 import { StatementDetailForm } from '@/api/bill/statementDetail/types';
 import { getListBycustomerName } from '@/api/customer/customerFile/customerInfo';
 import { CustomerInfoVO } from '@/api/customer/customerFile/customerInfo/types';
+import { getListByPartnerName } from '@/api/partner/merchant';
+import { PartnerMerchantVO } from '@/api/partner/merchant/types';
 import { listOrderMain, getOrderMain } from '@/api/order/orderMain';
 import { OrderMainVO, OrderMainQuery, OrderMainForm } from '@/api/order/orderMain/types';
 import { OrderDeliverVO } from '@/api/order/orderDeliver/types';
@@ -319,11 +321,13 @@ const isEdit = ref(false); // 是否为编辑模式
 
 const customerLoading = ref(false);
 const customerOptions = ref<CustomerInfoVO[]>([]);
+const partnerOptions = ref<PartnerMerchantVO[]>([]);
 const staffOptions = ref<ComStaffVO[]>([]);
 const orderMainDrawerRef = ref<any>();
 const uploadAction = import.meta.env.VITE_APP_BASE_API + '/resource/oss/upload';
 const currentSelectedOrders = ref<OrderDeliverVO[]>([]);
-const preloadedOrders = ref<OrderDeliverVO[]>([]); // 预加载的订单列表
+const preloadedOrders = ref<OrderDeliverVO[]>([]); // 预加载的发货单列表
+const preloadedOrderList = ref<OrderMainVO[]>([]); // 预加载的发货单列表
 const productTableRef = ref<any>(); // 商品表格引用
 const selectedProductIds = ref<Set<string>>(new Set()); // 选中的商品ID集合
 const isProductSelectMode = ref(false); // 是否处于商品选择模式
@@ -436,8 +440,10 @@ const reset = () => {
   productPage.pageSize = 10;
   productPage.total = 0;
   customerOptions.value = [];
+  partnerOptions.value = [];
   currentSelectedOrders.value = [];
   preloadedOrders.value = [];
+  preloadedOrderList.value = [];
   preloadedTotal.value = 0;
   formRef.value?.clearValidate();
 };
@@ -473,6 +479,43 @@ const handleCustomerChange = async (customerId: string | number) => {
     form.value.customerName = undefined;
     form.value.customerNo = undefined;
     preloadedOrders.value = [];
+    preloadedOrderList.value = [];
+    preloadedTotal.value = 0;
+  }
+};
+
+/** 远程搜索伙伴商 */
+const remoteSearchPartner = async (query: string) => {
+  if (query) {
+    customerLoading.value = true;
+    try {
+      const res = await getListByPartnerName(query);
+      partnerOptions.value = res.data;
+    } catch (error) {
+      console.error(error);
+    } finally {
+      customerLoading.value = false;
+    }
+  } else {
+    customerOptions.value = [];
+  }
+};
+
+/** 伙伴商变更 */
+const handlePartnerChange = async (customerId: string | number) => {
+  if (customerId) {
+    const partner = partnerOptions.value.find((item) => item.id === customerId);
+    if (partner) {
+      form.value.customerName = partner.partnerName;
+      form.value.customerNo = partner.partnerNo;
+    }
+    // 预加载订单列表
+    await preloadOrders(customerId);
+  } else {
+    form.value.customerName = undefined;
+    form.value.customerNo = undefined;
+    preloadedOrders.value = [];
+    preloadedOrderList.value = [];
     preloadedTotal.value = 0;
   }
 };
@@ -480,12 +523,19 @@ const handleCustomerChange = async (customerId: string | number) => {
 /** 预加载订单列表 */
 const preloadOrders = async (customerId: string | number) => {
   try {
-    const res = await getCustomerDeliverOrders(customerId);
-    preloadedOrders.value = res.rows || [];
+    const query: any = {
+      assigneeId: customerId,
+      pageNum: 1,
+      pageSize: 1000,
+      returnedStatus: '2',
+      assigneeType: 'bp'
+    };
+    const res = await listOrderMain(query);
+    preloadedOrderList.value = res.rows || [];
     preloadedTotal.value = res.total || 0;
   } catch (error) {
     console.error('预加载订单列表失败:', error);
-    preloadedOrders.value = [];
+    preloadedOrderList.value = [];
     preloadedTotal.value = 0;
   }
 };
@@ -551,7 +601,7 @@ const handleOrderSelected = (data: any) => {
       const detail: any = {
         id: undefined,
         statementOrderId: undefined,
-        orderNo: order.orderCode,
+        orderNo: order.orderNo,
         deliverCode: order.deliverCode || '',
         orderTime: order.orderTime || '',
         amount: order.totalAmount,
@@ -606,6 +656,7 @@ const handleAddDetail = () => {
     currentSelectedOrders.value,
     form.value.productList,
     preloadedOrders.value,
+    preloadedOrderList.value,
     preloadedTotal.value
   );
 };

+ 6 - 6
src/views/bill/statementOrder/index.vue

@@ -45,11 +45,11 @@
 
     <el-card shadow="never">
       <template #header>
-        <el-row :gutter="10" class="mb8">
-          <el-col :span="22"> 对账管理信息列表 </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" plain icon="Plus" @click="handleAdd" v-hasPermi="['bill:statementOrder:add']">新增</el-button>
-          </el-col>
+          </div>
         </el-row>
       </template>
 
@@ -62,8 +62,8 @@
           </template>
         </el-table-column>
         <el-table-column label="对账金额" align="center" prop="amount" />
-        <el-table-column label="客户编号" align="center" prop="customerNo" />
-        <el-table-column label="客户名称" align="center" prop="customerName" />
+        <el-table-column label="伙伴商编号" align="center" prop="customerNo" />
+        <el-table-column label="伙伴商名称" align="center" prop="customerName" />
         <el-table-column label="对账状态" align="center" prop="statementStatus">
           <template #default="scope">
             <dict-tag :options="statement_status" :value="scope.row.statementStatus" />

+ 11 - 18
src/views/bill/statementOrder/orderMainDrawer.vue

@@ -4,8 +4,8 @@
     <div class="drawer-content">
       <el-table ref="tableRef" v-loading="loading" :data="orderList" border @selection-change="handleSelectionChange">
         <el-table-column type="selection" width="55" align="center" />
-        <el-table-column prop="orderCode" label="订单编号" min-width="150" align="center" />
-        <el-table-column prop="deliverCode" label="发货单编号" min-width="150" align="center" />
+        <el-table-column prop="orderNo" label="订单编号" min-width="150" align="center" />
+        <!-- <el-table-column prop="deliverCode" label="发货单编号" min-width="150" align="center" /> -->
         <el-table-column prop="totalAmount" label="金额" min-width="100" align="center">
           <template #default="scope">
             {{ scope.row.totalAmount ? Number(scope.row.totalAmount).toFixed(2) : '0.00' }}
@@ -29,8 +29,7 @@
 </template>
 
 <script setup name="OrderMainDrawer" lang="ts">
-import { listOrderMain } from '@/api/order/orderMain';
-import { getCustomerDeliverOrders, getCustomerOrderProductList } from '@/api/order/orderDeliver';
+import { listOrderMain, getCustomerOrderProductList } from '@/api/order/orderMain';
 import { OrderMainVO, OrderMainQuery } from '@/api/order/orderMain/types';
 
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
@@ -101,10 +100,13 @@ const getList = async () => {
 
   loading.value = true;
   try {
-    const res = await getCustomerDeliverOrders(custId.value, {
+    const res = await listOrderMain({
       pageNum: queryParams.value.pageNum,
-      pageSize: queryParams.value.pageSize
-    });
+      pageSize: queryParams.value.pageSize,
+      assigneeId: custId.value,
+      returnedStatus: '2',
+      assigneeType: 'bp'
+    } as OrderMainQuery);
 
     // 解析数据 - 支持多种返回格式
     let rows: any[] = [];
@@ -113,15 +115,6 @@ const getList = async () => {
     if (res.rows) {
       rows = res.rows;
       totalCount = res.total || 0;
-    } else if (res.data && res.data.rows) {
-      rows = res.data.rows;
-      totalCount = res.data.total || 0;
-    } else if (res.data && Array.isArray(res.data)) {
-      rows = res.data;
-      totalCount = res.data.length;
-    } else if (Array.isArray(res)) {
-      rows = res;
-      totalCount = res.length;
     }
 
     orderList.value = rows;
@@ -194,13 +187,13 @@ const mergeProductList = async () => {
         productNo: item.productNo || item.skuNo || item.productCode || '',
         itemName: item.productName || item.skuName || item.itemName || item.productFullName || '',
         specifications: item.specifications || item.spec || item.model || item.specModel || '',
-        quantity: item.deliverNum,
+        quantity: item.orderQuantity,
         unitPrice: item.price || item.unitPrice || item.salePrice || item.orderPrice,
         productUnit: item.productUnit || item.unitName || '',
         subtotal: item.subtotal,
         unitName: item.productUnit || item.unitName || '',
         type: item.productType || item.type || '',
-        orderId: item.deliverId,
+        orderId: item.orderId,
         categoryId: item.categoryId,
         categoryNo: item.categoryNo || '',
         productId: item.productId || item.id,

+ 63 - 21
src/views/order/saleOrder/index.vue

@@ -46,50 +46,38 @@
 
     <el-card shadow="never">
       <template #header>
-        <el-row :gutter="10" class="mb8">
-          <el-col :span="13"> 销售订单信息列表 </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>
-          <el-col :span="1.5">
+            <el-button type="primary" :disabled="!ids.length" @click="handleOpenReturnStatusDialog" plain> 修改回款状态 </el-button>
             <el-button
               :type="queryParams.orderStatus === undefined ? 'primary' : ''"
               :plain="queryParams.orderStatus !== undefined"
               @click="handleQuery()"
               >全部订单{{ orderStatusStats.totalCount }}</el-button
             >
-          </el-col>
-          <el-col :span="1.5">
+
             <el-button :type="queryParams.orderStatus === '0' ? 'primary' : ''" :plain="queryParams.orderStatus !== '0'" @click="handleQuery('0')"
               >待付款{{ orderStatusStats.pendingPaymentCount }}</el-button
             >
-          </el-col>
-          <el-col :span="1.5">
             <el-button :type="queryParams.orderStatus === '2' ? 'primary' : ''" :plain="queryParams.orderStatus !== '2'" @click="handleQuery('2')"
               >待发货{{ orderStatusStats.pendingShipmentCount }}</el-button
             >
-          </el-col>
-          <el-col :span="1.5">
             <el-button :type="queryParams.orderStatus === '4' ? 'primary' : ''" :plain="queryParams.orderStatus !== '4'" @click="handleQuery('4')"
               >已发货{{ orderStatusStats.shippedCount }}</el-button
             >
-          </el-col>
-          <el-col :span="1.5">
             <el-button :type="queryParams.orderStatus === '5' ? 'primary' : ''" :plain="queryParams.orderStatus !== '5'" @click="handleQuery('5')"
               >已完成{{ orderStatusStats.completedCount }}</el-button
             >
-          </el-col>
-          <el-col :span="1.5">
             <el-button :type="queryParams.orderStatus === '6' ? 'primary' : ''" :plain="queryParams.orderStatus !== '6'" @click="handleQuery('6')"
               >已关闭{{ orderStatusStats.closedCount }}</el-button
             >
-          </el-col>
+          </div>
         </el-row>
       </template>
 
@@ -123,6 +111,11 @@
             <dict-tag :options="order_status" :value="scope.row.orderStatus" />
           </template>
         </el-table-column>
+        <el-table-column label="回款状态" align="center" prop="returnedStatus">
+          <template #default="scope">
+            <span>{{ scope.row.returnedStatus == '0' ? '未回款' : scope.row.returnedStatus == '1' ? '部分回款' : '全部回款' }}</span>
+          </template>
+        </el-table-column>
 
         <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
           <template #default="scope">
@@ -141,6 +134,22 @@
 
     <!-- 物流详情对话框 -->
     <LogisticsDetail v-model="showLogisticsDialog" :order-id="logisticsOrderId" />
+
+    <el-dialog v-model="returnStatusDialogVisible" title="选择回款状态" width="300px">
+      <el-form>
+        <el-form-item label="回款状态">
+          <el-select v-model="selectedReturnStatus" placeholder="请选择" style="width: 100%">
+            <el-option label="未回款" value="0" />
+            <el-option label="部分回款" value="1" />
+            <el-option label="全部回款" value="2" />
+          </el-select>
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <el-button @click="returnStatusDialogVisible = false">取消</el-button>
+        <el-button type="primary" @click="handleChangeReturn">确定</el-button>
+      </template>
+    </el-dialog>
   </div>
 </template>
 
@@ -154,7 +163,8 @@ import {
   closeOrderMain,
   queryOrderStatusStats,
   changeStatus,
-  changeCheckStatus
+  changeCheckStatus,
+  changeReturnedStatus
 } from '@/api/order/orderMain';
 import { OrderMainVO, OrderMainQuery, OrderMainForm } from '@/api/order/orderMain/types';
 import DeliverDialog from './deliverDialog.vue';
@@ -187,6 +197,10 @@ const dateRange = ref<[DateModelType, DateModelType]>(['', '']);
 const showLogisticsDialog = ref(false);
 const logisticsOrderId = ref<string | number>();
 
+// 1. 定义响应式数据
+const returnStatusDialogVisible = ref(false); // 控制对话框显示
+const selectedReturnStatus = ref(''); // 存储用户选择的回款状态
+
 const dialog = reactive<DialogOption>({
   visible: false,
   title: ''
@@ -503,6 +517,34 @@ const handleCancel = async (row?: OrderMainVO) => {
   }
 };
 
+/** 2. 修改按钮点击事件:只负责打开对话框 */
+const handleOpenReturnStatusDialog = () => {
+  selectedReturnStatus.value = ''; // 打开时重置选择
+  returnStatusDialogVisible.value = true;
+};
+
+/** 3. 完善操作函数:在对话框中点击“确定”后调用 */
+const handleChangeReturn = async () => {
+  // 校验是否选择了状态
+  if (!selectedReturnStatus.value) {
+    proxy?.$modal.msgWarning('请选择回款状态');
+    return;
+  }
+
+  try {
+    // 调用接口,传入 ids 和用户选择的状态值
+    await changeReturnedStatus(ids.value, selectedReturnStatus.value);
+    returnStatusDialogVisible.value = false; // 操作成功后关闭对话框
+    getList(); // 刷新列表
+    proxy?.$modal.msgSuccess('操作成功');
+  } catch (error) {
+    // 用户取消或操作失败
+    if (error !== 'cancel' && error !== 'close') {
+      proxy?.$modal.msgError('操作失败,请重试');
+    }
+  }
+};
+
 /** 发货按钮操作 */
 const handleDeliver = (row?: OrderMainVO) => {
   if (!row?.id) {