|
|
@@ -67,113 +67,6 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
</el-form-item>
|
|
|
-
|
|
|
- <el-form-item label="运单号" prop="deliveryId">
|
|
|
- <el-input
|
|
|
- v-model="queryParams.deliveryId"
|
|
|
- clearable
|
|
|
- placeholder="请输入运单号"
|
|
|
- size="small"
|
|
|
- @keyup.enter.native="handleQuery"
|
|
|
- />
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="银行交易流水号" prop="bankTransactionId">
|
|
|
- <el-input
|
|
|
- v-model="queryParams.bankTransactionId"
|
|
|
- placeholder="请输入银行交易流水号"
|
|
|
- clearable
|
|
|
- size="small"
|
|
|
- @keyup.enter.native="handleQuery"
|
|
|
- />
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- <el-form-item label="产品名称" prop="productName">
|
|
|
- <el-input
|
|
|
- v-model="queryParams.productName"
|
|
|
- placeholder="请输入产品名称"
|
|
|
- clearable
|
|
|
- size="small"
|
|
|
- @keyup.enter.native="handleQuery"
|
|
|
- />
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- <el-form-item label="手机号" prop="userPhone">
|
|
|
- <el-input
|
|
|
- v-model="queryParams.userPhone"
|
|
|
- placeholder="请输入手机号"
|
|
|
- clearable
|
|
|
- size="small"
|
|
|
- @keyup.enter.native="handleQuery"
|
|
|
- />
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="收件人" prop="realName">
|
|
|
- <el-input
|
|
|
- v-model="queryParams.realName"
|
|
|
- placeholder="请输入收件人姓名"
|
|
|
- clearable
|
|
|
- size="small"
|
|
|
- @keyup.enter.native="handleQuery"/>
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- <el-form-item label="销售名称" prop="companyUserNickName">
|
|
|
- <el-input
|
|
|
- v-model="queryParams.companyUserNickName"
|
|
|
- placeholder="请输入销售名称"
|
|
|
- clearable
|
|
|
- size="small"
|
|
|
- @keyup.enter.native="handleQuery"
|
|
|
- />
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="订单类型" prop="orderType">
|
|
|
- <el-select v-model="queryParams.orderType" placeholder="请选择订单类型" clearable size="small" >
|
|
|
- <el-option
|
|
|
- v-for="item in orderTypeOptions"
|
|
|
- :key="item.dictValue"
|
|
|
- :label="item.dictLabel"
|
|
|
- :value="item.dictValue"
|
|
|
- />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="支付方式" prop="payType">
|
|
|
- <el-select v-model="queryParams.payType" placeholder="请选择支付方式" clearable size="small" >
|
|
|
- <el-option
|
|
|
- v-for="item in payTypeOptions"
|
|
|
- :key="item.dictValue"
|
|
|
- :label="item.dictLabel"
|
|
|
- :value="item.dictValue"
|
|
|
- />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="上传凭证" prop="isUpload">
|
|
|
- <el-select v-model="queryParams.isUpload" placeholder="请选择" clearable size="small" >
|
|
|
- <el-option key="0" label="未上传" value="0" />
|
|
|
- <el-option key="1" label="已上传" value="1" />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- <el-form-item label="物流状态" prop="deliveryStatus">
|
|
|
- <el-select v-model="queryParams.deliveryStatus" placeholder="请选择物流状态" clearable size="small" >
|
|
|
- <el-option
|
|
|
- v-for="item in deliveryStatusOptions"
|
|
|
- :key="item.dictValue"
|
|
|
- :label="item.dictLabel"
|
|
|
- :value="item.dictValue"
|
|
|
- />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="结算状态" prop="deliveryPayStatus">
|
|
|
- <el-select v-model="queryParams.deliveryPayStatus" placeholder="请选择物流结算状态" clearable size="small" >
|
|
|
- <el-option
|
|
|
- v-for="item in deliveryPayStatusOptions"
|
|
|
- :key="item.dictValue"
|
|
|
- :label="item.dictLabel"
|
|
|
- :value="item.dictValue"
|
|
|
- />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
<el-form-item label="小程序" prop="appId">
|
|
|
<el-select v-model="queryParams.appId" placeholder="请选择所属小程序" clearable size="small">
|
|
|
<el-option
|
|
|
@@ -184,90 +77,14 @@
|
|
|
/>
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
-
|
|
|
- <el-form-item label="下单时间" prop="createTimeRange">
|
|
|
- <el-date-picker
|
|
|
- v-model="createTimeRange"
|
|
|
- clearable end-placeholder="结束日期"
|
|
|
- size="small"
|
|
|
- start-placeholder="开始日期"
|
|
|
- style="width:205.4px"
|
|
|
- type="daterange"
|
|
|
- value-format="yyyy-MM-dd"
|
|
|
- >
|
|
|
- </el-date-picker>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="支付时间" prop="payTimeRange">
|
|
|
- <el-date-picker
|
|
|
- v-model="payTimeRange"
|
|
|
- clearable end-placeholder="结束日期"
|
|
|
- size="small"
|
|
|
- start-placeholder="开始日期"
|
|
|
- style="width:205.4px"
|
|
|
- type="daterange"
|
|
|
- value-format="yyyy-MM-dd"
|
|
|
- >
|
|
|
- </el-date-picker>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="发货时间" prop="deliverySendTimeRange">
|
|
|
- <el-date-picker
|
|
|
- v-model="deliverySendTimeRange"
|
|
|
- clearable end-placeholder="结束日期"
|
|
|
- size="small"
|
|
|
- start-placeholder="开始日期"
|
|
|
- style="width:205.4px"
|
|
|
- type="daterange"
|
|
|
- value-format="yyyy-MM-dd"
|
|
|
- >
|
|
|
- </el-date-picker>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="回单时间" prop="deliveryImportTimeRange">
|
|
|
- <el-date-picker
|
|
|
- v-model="deliveryImportTimeRange"
|
|
|
- clearable end-placeholder="结束日期"
|
|
|
- size="small"
|
|
|
- start-placeholder="开始日期"
|
|
|
- style="width:205.4px"
|
|
|
- type="daterange"
|
|
|
- value-format="yyyy-MM-dd"
|
|
|
- >
|
|
|
- </el-date-picker>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="档期归属" prop="scheduleId" >
|
|
|
- <el-select filterable style="width: 215px" v-model="queryParams.scheduleId" placeholder="请选择档期" clearable size="small" >
|
|
|
- <el-option
|
|
|
- v-for="item in scheduleOptions"
|
|
|
- :key="item.id"
|
|
|
- :label="item.name"
|
|
|
- :value="item.id"
|
|
|
- />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="代服账户" prop="erpAccount" v-if="SFDFopen">
|
|
|
- <el-select v-model="queryParams.erpAccount" style="width: 215px" placeholder="ERP账户" clearable size="small">
|
|
|
- <el-option
|
|
|
- v-for="dict in erpAccountQueryList"
|
|
|
- :key="dict"
|
|
|
- :label="dict"
|
|
|
- :value="dict"
|
|
|
- />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="代服电话" prop="erpPhoneNumber" v-if="SFDFopen">
|
|
|
- <el-input
|
|
|
- v-model="queryParams.erpPhoneNumber"
|
|
|
- placeholder="ERP电话"
|
|
|
- clearable
|
|
|
- size="small"
|
|
|
- @keyup.enter.native="handleQuery"
|
|
|
- />
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="是否审核" prop="isAudit">
|
|
|
- <el-select v-model="queryParams.isAudit" placeholder="请选择" clearable size="small" >
|
|
|
- <el-option key="1" label="是" value="1" />
|
|
|
- <el-option key="0" label="否" value="0" />
|
|
|
+ <el-form-item label="下单方式" prop="orderCreateWay">
|
|
|
+ <el-select v-model="queryParams.orderCreateWay" placeholder="请选择下单方式" clearable size="small">
|
|
|
+ <el-option :value="null" label="全部" />
|
|
|
+ <el-option :value="1" label="用户下单" />
|
|
|
+ <el-option :value="2" label="销售制单" />
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
+
|
|
|
<el-form-item>
|
|
|
<el-button icon="el-icon-search" size="mini" type="cyan" @click="handleQuery">搜索</el-button>
|
|
|
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
|
|
@@ -305,6 +122,16 @@
|
|
|
>{{ orderUpload.isUploading ? '导入中...' : '导入发货单' }}
|
|
|
</el-button>
|
|
|
</el-col>
|
|
|
+ <el-col :span="1.5">
|
|
|
+ <el-button
|
|
|
+ icon="el-icon-truck"
|
|
|
+ plain
|
|
|
+ size="mini"
|
|
|
+ type="warning"
|
|
|
+ @click="handleBatchDelivery"
|
|
|
+ >一键自提
|
|
|
+ </el-button>
|
|
|
+ </el-col>
|
|
|
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
|
|
</el-row>
|
|
|
<el-tabs v-model="activeName" type="card" @tab-click="handleClick">
|
|
|
@@ -325,6 +152,16 @@
|
|
|
<el-table-column label="ERP电话" align="center" prop="erpPhone" width="120px" v-if="SFDFopen "/>
|
|
|
<el-table-column label="ERP账号" align="center" prop="erpAccount" width="120px" v-if="SFDFopen"/>
|
|
|
<el-table-column label="所属公司" align="center" prop="companyName" />
|
|
|
+ <el-table-column label="下单方式" align="center" width="120px">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ {{
|
|
|
+ scope.row.companyUserNickName &&
|
|
|
+ scope.row.companyUserNickName.toString().trim() !== ''
|
|
|
+ ? '销售制单'
|
|
|
+ : '用户下单'
|
|
|
+ }}
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
<el-table-column label="小程序名称" width="120px" align="center" prop="miniProgramName"/>
|
|
|
<el-table-column label="手机号" align="center" prop="nickname" width="150px" >
|
|
|
<template slot-scope="scope">
|
|
|
@@ -1119,6 +956,7 @@ import {
|
|
|
exportStoreOrderItems,
|
|
|
createUserOrder,
|
|
|
listStoreOrder,
|
|
|
+ listAllStoreOrder,
|
|
|
getStoreOrder,
|
|
|
delStoreOrder,
|
|
|
exportStoreOrder,
|
|
|
@@ -1384,7 +1222,13 @@ export default {
|
|
|
productId:null,
|
|
|
productName:null,
|
|
|
isAudit:null,
|
|
|
+ orderCreateWay: null,
|
|
|
},
|
|
|
+ // 下单方式筛选(用户/销售)缓存:用于前端过滤 + 分页切片
|
|
|
+ orderCreateWayCacheKey: null,
|
|
|
+ orderCreateWayCacheFilteredRows: [],
|
|
|
+ // 拉取“全部”用的临时 pageSize(用于前端过滤后保证分页可用)
|
|
|
+ orderCreateWayFetchPageSize: 50000,
|
|
|
// 表单参数
|
|
|
form: {
|
|
|
addressId:null,
|
|
|
@@ -2284,26 +2128,81 @@ export default {
|
|
|
this.queryParams.orderCodeList = null;
|
|
|
}
|
|
|
|
|
|
- listStoreOrder(this.queryParams).then(response => {
|
|
|
- this.storeOrderList = response.rows;
|
|
|
- this.total = response.total;
|
|
|
- if(this.total>0){
|
|
|
- this.payPriceTotal = response.payPriceTotal;
|
|
|
- this.payMoneyTotal = response.payMoneyTotal;
|
|
|
- this.payRemainTotal = response.payRemainTotal;
|
|
|
- this.productInfo = response.productInfo;
|
|
|
+ const orderCreateWay = this.queryParams.orderCreateWay;
|
|
|
+ const isOrderCreateWayFilter =
|
|
|
+ orderCreateWay !== null && orderCreateWay !== undefined && orderCreateWay !== '';
|
|
|
+
|
|
|
+ // 没选择“下单方式”筛选:走原接口分页逻辑
|
|
|
+ if (!isOrderCreateWayFilter) {
|
|
|
+ listStoreOrder(this.queryParams).then(response => {
|
|
|
+ this.storeOrderList = response.rows;
|
|
|
+ this.total = response.total;
|
|
|
+ if(this.total>0){
|
|
|
+ this.payPriceTotal = response.payPriceTotal;
|
|
|
+ this.payMoneyTotal = response.payMoneyTotal;
|
|
|
+ this.payRemainTotal = response.payRemainTotal;
|
|
|
+ this.productInfo = response.productInfo;
|
|
|
+ } else {
|
|
|
+ this.payPriceTotal = "0"
|
|
|
+ this.payMoneyTotal = "0"
|
|
|
+ this.payRemainTotal = "0"
|
|
|
+ this.productInfo = response.productInfo;
|
|
|
+ }
|
|
|
+ this.loading = false;
|
|
|
+ if(response.msg == 'knt'){
|
|
|
+ this.SFDFopen = true;
|
|
|
+ } else{
|
|
|
+ this.SFDFopen = false;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 如果有排序,显示排序结果提示
|
|
|
+ if (this.currentSort.prop) {
|
|
|
+ const fieldLabel = this.getSortLabel(this.currentSort.prop);
|
|
|
+ const orderLabel = this.currentSort.order === 'ascending' ? '升序' : '降序';
|
|
|
+ console.log(`数据已按${fieldLabel}${orderLabel}加载`);
|
|
|
+ }
|
|
|
+ }).catch(error => {
|
|
|
+ console.error('查询失败:', error);
|
|
|
+ this.loading = false;
|
|
|
+ this.$message.error('查询数据失败');
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 选择了“下单方式”筛选:按 companyUserNickName 是否为空做过滤,并按当前页切片展示
|
|
|
+ // 缓存 key:不包含分页 pageNum/pageSize(避免分页切换导致重复拉取)
|
|
|
+ const cacheKeyObj = { ...this.queryParams };
|
|
|
+ cacheKeyObj.pageNum = 0;
|
|
|
+ cacheKeyObj.pageSize = 0;
|
|
|
+ const cacheKey = JSON.stringify(cacheKeyObj);
|
|
|
+
|
|
|
+ const sliceAndSetTable = (filteredRows) => {
|
|
|
+ this.total = filteredRows.length;
|
|
|
+ const pageNum = this.queryParams.pageNum || 1;
|
|
|
+ const pageSize = this.queryParams.pageSize || 10;
|
|
|
+ const start = (pageNum - 1) * pageSize;
|
|
|
+ const end = start + pageSize;
|
|
|
+ this.storeOrderList = filteredRows.slice(start, end);
|
|
|
+
|
|
|
+ if (this.total > 0) {
|
|
|
+ // 这里尽量复用原列表展示的统计字段(若字段不存在就保持 0)
|
|
|
+ const sumField = (arr, key) => arr.reduce((acc, cur) => {
|
|
|
+ const val = cur && cur[key];
|
|
|
+ const num = val === null || val === undefined || val === '' ? 0 : Number(val);
|
|
|
+ return acc + (Number.isFinite(num) ? num : 0);
|
|
|
+ }, 0);
|
|
|
+ this.payPriceTotal = sumField(filteredRows, 'payPrice');
|
|
|
+ this.payMoneyTotal = sumField(filteredRows, 'payMoney');
|
|
|
+ this.payRemainTotal = sumField(filteredRows, 'payRemain');
|
|
|
+ this.productInfo = filteredRows.length;
|
|
|
} else {
|
|
|
this.payPriceTotal = "0"
|
|
|
this.payMoneyTotal = "0"
|
|
|
this.payRemainTotal = "0"
|
|
|
- this.productInfo = response.productInfo;
|
|
|
+ this.productInfo = 0;
|
|
|
}
|
|
|
+
|
|
|
this.loading = false;
|
|
|
- if(response.msg == 'knt'){
|
|
|
- this.SFDFopen = true;
|
|
|
- } else{
|
|
|
- this.SFDFopen = false;
|
|
|
- }
|
|
|
|
|
|
// 如果有排序,显示排序结果提示
|
|
|
if (this.currentSort.prop) {
|
|
|
@@ -2311,6 +2210,42 @@ export default {
|
|
|
const orderLabel = this.currentSort.order === 'ascending' ? '升序' : '降序';
|
|
|
console.log(`数据已按${fieldLabel}${orderLabel}加载`);
|
|
|
}
|
|
|
+ };
|
|
|
+
|
|
|
+ if (this.orderCreateWayCacheKey === cacheKey) {
|
|
|
+ sliceAndSetTable(this.orderCreateWayCacheFilteredRows);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 拉取“全部”用于过滤(pageSize 取一个较大的值)
|
|
|
+ const requestParams = { ...this.queryParams };
|
|
|
+ requestParams.pageNum = 1;
|
|
|
+ requestParams.pageSize = this.orderCreateWayFetchPageSize;
|
|
|
+ // 前端筛选字段不必传后端,避免接口对未知参数处理异常
|
|
|
+ delete requestParams.orderCreateWay;
|
|
|
+
|
|
|
+ listAllStoreOrder(requestParams).then(response => {
|
|
|
+ const allRows = response && response.rows ? response.rows : [];
|
|
|
+
|
|
|
+ const filteredRows = allRows.filter(row => {
|
|
|
+ const v = row ? row.companyUserNickName : null;
|
|
|
+ const normalized = v === null || v === undefined ? '' : v.toString().trim();
|
|
|
+ if (orderCreateWay == 1) return normalized === ''; // 用户下单:companyUserNickName 为空
|
|
|
+ if (orderCreateWay == 2) return normalized !== ''; // 销售制单:companyUserNickName 不为空
|
|
|
+ return true;
|
|
|
+ });
|
|
|
+
|
|
|
+ this.orderCreateWayCacheKey = cacheKey;
|
|
|
+ this.orderCreateWayCacheFilteredRows = filteredRows;
|
|
|
+
|
|
|
+ // SFDFopen(ERP展示)仍按接口返回的 msg 处理
|
|
|
+ if(response && response.msg == 'knt'){
|
|
|
+ this.SFDFopen = true;
|
|
|
+ } else{
|
|
|
+ this.SFDFopen = false;
|
|
|
+ }
|
|
|
+
|
|
|
+ sliceAndSetTable(filteredRows);
|
|
|
}).catch(error => {
|
|
|
console.error('查询失败:', error);
|
|
|
this.loading = false;
|
|
|
@@ -2381,6 +2316,9 @@ export default {
|
|
|
this.deliverySendTimeRange = []
|
|
|
this.deliveryImportTimeRange = []
|
|
|
this.resetForm("queryForm");
|
|
|
+ // 清空下单方式筛选缓存
|
|
|
+ this.orderCreateWayCacheKey = null;
|
|
|
+ this.orderCreateWayCacheFilteredRows = [];
|
|
|
// 清除排序
|
|
|
this.currentSort = {
|
|
|
prop: null,
|