Просмотр исходного кода

修复订单和红包记录小节搜索

xw 2 месяцев назад
Родитель
Сommit
991c5a1dd9
2 измененных файлов с 152 добавлено и 206 удалено
  1. 11 3
      src/views/course/courseRedPacketLog/index.vue
  2. 141 203
      src/views/hisStore/storeOrder/storeList.vue

+ 11 - 3
src/views/course/courseRedPacketLog/index.vue

@@ -58,6 +58,7 @@
           remote
           :remote-method="remoteMethod"
           :loading="loadingPeriod"
+          @change="handlePeriodChange"
           @focus="handleFocus"
         >
           <el-option
@@ -219,7 +220,7 @@
 </template>
 
 <script>
-import { courseList,videoList,listCourseRedPacketLog,retryCourseRedPacketLog, myListCourseRedPacketLogNew, getCourseRedPacketLog, delCourseRedPacketLog, addCourseRedPacketLog, updateCourseRedPacketLog, exportCourseRedPacketLog } from "@/api/course/courseRedPacketLog";
+import { courseList,videoList,qwVideoList,listCourseRedPacketLog,retryCourseRedPacketLog, myListCourseRedPacketLogNew, getCourseRedPacketLog, delCourseRedPacketLog, addCourseRedPacketLog, updateCourseRedPacketLog, exportCourseRedPacketLog } from "@/api/course/courseRedPacketLog";
 import { getCompanyList } from "@/api/company/company";
 import { periodList } from "@/api/course/userCoursePeriod";
 export default {
@@ -366,13 +367,20 @@ export default {
 			this.videoList=[]
 			this.queryParams.videoId=null
 		}else{
-			videoList(row).then(response => {
-
+      const requestApi = this.queryParams.periodId ? videoList : qwVideoList;
+      requestApi(row).then(response => {
 				this.videoList=response.list
 			});
 		}
 
 	},
+    handlePeriodChange() {
+      this.videoList = [];
+      this.queryParams.videoId = null;
+      if (this.queryParams.courseId) {
+        this.courseChange(this.queryParams.courseId);
+      }
+    },
     // 取消按钮
     cancel() {
       this.open = false;

+ 141 - 203
src/views/hisStore/storeOrder/storeList.vue

@@ -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,