Kaynağa Gözat

外部订单财务管理

wangxy 1 gün önce
ebeveyn
işleme
3fc166ed6e

+ 9 - 0
src/api/store/storeOrder.js

@@ -137,6 +137,15 @@ export function updateOrder(data) {
   })
 }
 
+// 订单修改(销售端弹窗,与外部订单一致)
+export function editStoreOrder(data) {
+  return request({
+    url: '/store/storeOrder/edit',
+    method: 'post',
+    data: data
+  })
+}
+
 // 修改订单
 export function updateStoreOrder(data) {
   return request({

+ 265 - 47
src/views/store/externalOrder/index.vue

@@ -9,62 +9,170 @@
       <el-tab-pane label="已取消" name="-3"></el-tab-pane>
     </el-tabs>
 
-    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="100px">
-      <el-form-item label="订单号" prop="orderCode">
-        <el-input
-          v-model="queryParams.orderCode"
-          placeholder="请输入订单号"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="100px" size="small">
+      <el-form-item label="订单编号" prop="orderCode">
+        <el-input v-model="queryParams.orderCode" placeholder="请输入订单号" clearable @keyup.enter.native="handleQuery" />
+      </el-form-item>
+      <el-form-item label="所属部门" prop="deptId">
+        <treeselect style="width:220px" v-model="queryParams.deptId" :options="deptOptions" :show-count="true" placeholder="请选择所属部门" />
+      </el-form-item>
+      <el-form-item label="会员ID" prop="userId">
+        <el-input v-model="queryParams.userId" placeholder="请输入会员ID" clearable @keyup.enter.native="handleQuery" />
+      </el-form-item>
+      <el-form-item label="会员姓名" prop="memberName">
+        <el-input v-model="queryParams.memberName" placeholder="请输入会员姓名" clearable @keyup.enter.native="handleQuery" />
+      </el-form-item>
+      <el-form-item label="会员电话" prop="memberPhone">
+        <el-input v-model="queryParams.memberPhone" placeholder="请输入会员电话" clearable @keyup.enter.native="handleQuery" />
+      </el-form-item>
+      <el-form-item label="销售ID" prop="companyUserId">
+        <el-input v-model="queryParams.companyUserId" placeholder="请输入销售ID" clearable @keyup.enter.native="handleQuery" />
+      </el-form-item>
+      <el-form-item label="销售姓名" prop="companyUserName">
+        <el-input v-model="queryParams.companyUserName" placeholder="请输入销售姓名" clearable @keyup.enter.native="handleQuery" />
+      </el-form-item>
+      <el-form-item label="下单日期" prop="createTime">
+        <el-date-picker
+          v-model="createTime"
+          style="width: 220px"
+          value-format="yyyy-MM-dd"
+          type="daterange"
+          range-separator="-"
+          start-placeholder="开始日期"
+          end-placeholder="结束日期"
+          @change="handleCreateTimeChange"
         />
       </el-form-item>
-      <el-form-item label="用户ID" prop="userId">
-        <el-input
-          v-model="queryParams.userId"
-          placeholder="请输入用户ID"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
+      <el-form-item label="签收状态" prop="deliveryStatus">
+        <el-select v-model="queryParams.deliveryStatus" placeholder="请选择签收状态" clearable style="width:200px">
+          <el-option
+            v-for="item in deliveryStatusOptions"
+            :key="item.dictValue"
+            :label="item.dictLabel"
+            :value="Number(item.dictValue)"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="订购产品" prop="productName">
+        <el-input v-model="queryParams.productName" placeholder="请输入产品名称" clearable @keyup.enter.native="handleQuery" />
+      </el-form-item>
+      <el-form-item label="地址" prop="address">
+        <el-input v-model="queryParams.address" placeholder="请输入地址" clearable @keyup.enter.native="handleQuery" />
+      </el-form-item>
+      <el-form-item label="定金" prop="payPrice">
+        <el-input-number v-model="queryParams.payPrice" :precision="2" :min="0" placeholder="请输入定金" style="width:200px" controls-position="right" />
+      </el-form-item>
+      <el-form-item label="定金回款时间" prop="depositReturnTime">
+        <el-date-picker
+          v-model="depositReturnTime"
+          style="width: 220px"
+          value-format="yyyy-MM-dd"
+          type="daterange"
+          range-separator="-"
+          start-placeholder="开始日期"
+          end-placeholder="结束日期"
+          @change="handleDepositReturnTimeChange"
         />
       </el-form-item>
-      <el-form-item label="收货人" prop="userName">
-        <el-input
-          v-model="queryParams.userName"
-          placeholder="请输入收货人"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
+      <el-form-item label="商品总额" prop="totalPrice">
+        <el-input-number v-model="queryParams.totalPrice" :precision="2" :min="0" placeholder="请输入商品总额" style="width:200px" controls-position="right" />
+      </el-form-item>
+      <el-form-item label="代收金额" prop="collectionPrice">
+        <el-input-number v-model="queryParams.collectionPrice" :precision="2" :min="0" placeholder="请输入代收金额" style="width:200px" controls-position="right" />
+      </el-form-item>
+      <el-form-item label="备注" prop="remark">
+        <el-input v-model="queryParams.remark" placeholder="请输入备注" clearable @keyup.enter.native="handleQuery" />
+      </el-form-item>
+      <el-form-item label="快递单号" prop="deliverySn">
+        <el-input v-model="queryParams.deliverySn" placeholder="请输入快递单号" clearable @keyup.enter.native="handleQuery" />
+      </el-form-item>
+      <el-form-item label="发货日期" prop="deliveryTime">
+        <el-date-picker
+          v-model="deliveryTime"
+          style="width: 220px"
+          value-format="yyyy-MM-dd"
+          type="daterange"
+          range-separator="-"
+          start-placeholder="开始日期"
+          end-placeholder="结束日期"
+          @change="handleDeliveryTimeChange"
         />
       </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 label="快递公司" prop="deliveryCode">
+        <el-input v-model="queryParams.deliveryCode" placeholder="请输入快递公司" clearable @keyup.enter.native="handleQuery" />
+      </el-form-item>
+      <el-form-item label="快递类型" prop="deliveryName">
+        <el-input v-model="queryParams.deliveryName" placeholder="请输入快递类型" clearable @keyup.enter.native="handleQuery" />
+      </el-form-item>
+      <el-form-item label="跟单时间" prop="followTime">
+        <el-date-picker
+          v-model="followTime"
+          style="width: 220px"
+          value-format="yyyy-MM-dd"
+          type="daterange"
+          range-separator="-"
+          start-placeholder="开始日期"
+          end-placeholder="结束日期"
+          @change="handleFollowTimeChange"
         />
       </el-form-item>
-      <el-form-item label="是否支付" prop="isPay">
-        <el-select v-model="queryParams.isPay" placeholder="请选择是否支付" clearable size="small">
-          <el-option label="是" value="1" />
-          <el-option label="否" value="0" />
-        </el-select>
+      <el-form-item label="退款金额" prop="refundPrice">
+        <el-input-number v-model="queryParams.refundPrice" :precision="2" :min="0" placeholder="请输入退款金额" style="width:200px" controls-position="right" />
       </el-form-item>
-      <el-form-item label="创建时间" prop="createTime">
+      <el-form-item label="退款日期" prop="refundTime">
         <el-date-picker
-          v-model="createTime"
-          size="small"
+          v-model="refundTime"
           style="width: 220px"
           value-format="yyyy-MM-dd"
           type="daterange"
           range-separator="-"
           start-placeholder="开始日期"
           end-placeholder="结束日期"
-          @change="handleCreateTimeChange"
+          @change="handleRefundTimeChange"
         />
       </el-form-item>
+      <el-form-item label="审核人" prop="auditor">
+        <el-input v-model="queryParams.auditor" placeholder="请输入审核人" clearable @keyup.enter.native="handleQuery" />
+      </el-form-item>
+      <el-form-item label="审核时间" prop="auditTime">
+        <el-date-picker
+          v-model="auditTime"
+          style="width: 220px"
+          value-format="yyyy-MM-dd"
+          type="daterange"
+          range-separator="-"
+          start-placeholder="开始日期"
+          end-placeholder="结束日期"
+          @change="handleAuditTimeChange"
+        />
+      </el-form-item>
+      <el-form-item label="复购次数" prop="memberBuyCountMin">
+        <el-input-number v-model="queryParams.memberBuyCountMin" :min="0" placeholder="最小次数" style="width:120px" controls-position="right" />
+      </el-form-item>
+      <el-form-item label="会员年龄" prop="memberAge">
+        <el-input-number v-model="queryParams.memberAge" :min="0" placeholder="请输入年龄" style="width:200px" controls-position="right" />
+      </el-form-item>
+      <el-form-item label="会员性别" prop="memberSex">
+        <el-select v-model="queryParams.memberSex" placeholder="请选择性别" clearable style="width:120px">
+          <el-option label="男" :value="1" />
+          <el-option label="女" :value="2" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="病名" prop="diseaseName">
+        <el-input v-model="queryParams.diseaseName" placeholder="请输入病名" clearable @keyup.enter.native="handleQuery" />
+      </el-form-item>
+      <el-form-item label="省市" prop="province">
+        <el-input v-model="queryParams.province" placeholder="请输入省市" clearable @keyup.enter.native="handleQuery" />
+      </el-form-item>
+      <el-form-item label="二级市" prop="city">
+        <el-input v-model="queryParams.city" placeholder="请输入二级市" clearable @keyup.enter.native="handleQuery" />
+      </el-form-item>
+      <el-form-item label="区县" prop="district">
+        <el-input v-model="queryParams.district" placeholder="请输入区县" clearable @keyup.enter.native="handleQuery" />
+      </el-form-item>
+      <el-form-item label="乡镇" prop="township">
+        <el-input v-model="queryParams.township" placeholder="请输入乡镇" clearable @keyup.enter.native="handleQuery" />
+      </el-form-item>
       <el-form-item>
         <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
@@ -583,13 +691,16 @@ import { listExternalOrder, createExternalOrder, getExternalOrder, auditExternal
 import { getCompanyList } from "@/api/company/company";
 import { listUserAddress } from "@/api/store/userAddress";
 import { listStoreProduct, listStore } from "@/api/store/storeProduct";
+import { treeselect } from "@/api/company/companyDept";
+import Treeselect from "@riophae/vue-treeselect";
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
 import addExternalUserAddress from "@/views/store/components/addExternalUserAddress.vue";
 import addExternalUser from "@/views/store/components/addExternalUser.vue";
 import request from '@/utils/request';
 
 export default {
   name: "ExternalOrder",
-  components: { addExternalUserAddress, addExternalUser },
+  components: { addExternalUserAddress, addExternalUser, Treeselect },
   data() {
     return {
       activeStatus: "all",
@@ -599,7 +710,6 @@ export default {
       total: 0,
       orderList: [],
       companyList: [],
-      createTime: null,
       open: false,
       title: "",
       detailOpen: false,
@@ -639,15 +749,51 @@ export default {
         pageNum: 1,
         pageSize: 10,
         orderCode: null,
+        deptId: null,
         userId: null,
-        userName: null,
-        userPhone: null,
-        isPay: null,
-        companyId: null,
-        status: null,
+        memberName: null,
+        memberPhone: null,
+        memberSex: null,
+        memberAge: null,
+        memberBuyCountMin: null,
+        companyUserId: null,
+        companyUserName: null,
+        address: null,
+        productName: null,
+        payPrice: null,
+        totalPrice: null,
+        collectionPrice: null,
+        refundPrice: null,
+        deliverySn: null,
+        deliveryCode: null,
+        deliveryName: null,
+        deliveryStatus: null,
+        auditor: null,
+        diseaseName: null,
+        remark: null,
+        province: null,
+        city: null,
+        district: null,
+        township: null,
         sTime: null,
-        eTime: null
+        eTime: null,
+        deliveryStartTime: null,
+        deliveryEndTime: null,
+        depositReturnTimeStart: null,
+        depositReturnTimeEnd: null,
+        followTimeStart: null,
+        followTimeEnd: null,
+        refundTimeStart: null,
+        refundTimeEnd: null,
+        auditTimeStart: null,
+        auditTimeEnd: null
       },
+      createTime: null,
+      deliveryTime: null,
+      depositReturnTime: null,
+      followTime: null,
+      refundTime: null,
+      auditTime: null,
       form: {
         addressId: null,
         userId: null,
@@ -695,6 +841,7 @@ export default {
       deliveryStatusOptions: [],
       deliveryTypeOptions: [],
       userStatusOptions: [],
+      deptOptions: [],
       editOpen: false,
       editConfirmOpen: false,
       editForm: {
@@ -749,6 +896,7 @@ export default {
     this.getDicts("sys_company_status").then(response => {
       this.userStatusOptions = response.data;
     });
+    this.getTreeselect();
   },
   methods: {
     handleTabClick(tab) {
@@ -761,7 +909,11 @@ export default {
     },
     getList() {
       this.loading = true;
-      listExternalOrder(this.queryParams).then(response => {
+      const params = { ...this.queryParams };
+      // el-input-number 清空后默认值为0,需转为null避免作为筛选条件传给后端
+      const numFields = ['memberAge', 'memberBuyCountMin', 'payPrice', 'totalPrice', 'collectionPrice', 'refundPrice'];
+      numFields.forEach(f => { if (params[f] === 0) params[f] = null; });
+      listExternalOrder(params).then(response => {
         this.orderList = response.rows;
         this.total = response.total;
         this.loading = false;
@@ -774,6 +926,12 @@ export default {
         this.companyList = response.data || [];
       });
     },
+    /** 查询部门下拉树结构 */
+    getTreeselect() {
+      treeselect().then((response) => {
+        this.deptOptions = response.data;
+      });
+    },
     handleCreateTimeChange(val) {
       if (val) {
         this.queryParams.sTime = val[0];
@@ -783,6 +941,51 @@ export default {
         this.queryParams.eTime = null;
       }
     },
+    handleDeliveryTimeChange(val) {
+      if (val) {
+        this.queryParams.deliveryStartTime = val[0];
+        this.queryParams.deliveryEndTime = val[1];
+      } else {
+        this.queryParams.deliveryStartTime = null;
+        this.queryParams.deliveryEndTime = null;
+      }
+    },
+    handleDepositReturnTimeChange(val) {
+      if (val) {
+        this.queryParams.depositReturnTimeStart = val[0];
+        this.queryParams.depositReturnTimeEnd = val[1];
+      } else {
+        this.queryParams.depositReturnTimeStart = null;
+        this.queryParams.depositReturnTimeEnd = null;
+      }
+    },
+    handleFollowTimeChange(val) {
+      if (val) {
+        this.queryParams.followTimeStart = val[0];
+        this.queryParams.followTimeEnd = val[1];
+      } else {
+        this.queryParams.followTimeStart = null;
+        this.queryParams.followTimeEnd = null;
+      }
+    },
+    handleRefundTimeChange(val) {
+      if (val) {
+        this.queryParams.refundTimeStart = val[0];
+        this.queryParams.refundTimeEnd = val[1];
+      } else {
+        this.queryParams.refundTimeStart = null;
+        this.queryParams.refundTimeEnd = null;
+      }
+    },
+    handleAuditTimeChange(val) {
+      if (val) {
+        this.queryParams.auditTimeStart = val[0];
+        this.queryParams.auditTimeEnd = val[1];
+      } else {
+        this.queryParams.auditTimeStart = null;
+        this.queryParams.auditTimeEnd = null;
+      }
+    },
     handleQuery() {
       this.queryParams.pageNum = 1;
       this.getList();
@@ -790,8 +993,23 @@ export default {
     resetQuery() {
       this.resetForm("queryForm");
       this.createTime = null;
+      this.deliveryTime = null;
+      this.depositReturnTime = null;
+      this.followTime = null;
+      this.refundTime = null;
+      this.auditTime = null;
       this.queryParams.sTime = null;
       this.queryParams.eTime = null;
+      this.queryParams.deliveryStartTime = null;
+      this.queryParams.deliveryEndTime = null;
+      this.queryParams.depositReturnTimeStart = null;
+      this.queryParams.depositReturnTimeEnd = null;
+      this.queryParams.followTimeStart = null;
+      this.queryParams.followTimeEnd = null;
+      this.queryParams.refundTimeStart = null;
+      this.queryParams.refundTimeEnd = null;
+      this.queryParams.auditTimeStart = null;
+      this.queryParams.auditTimeEnd = null;
       this.handleQuery();
     },
     handleAdd() {

+ 131 - 9
src/views/store/financeOrder/index.vue

@@ -8,18 +8,81 @@
           <el-option label="已回款" value="1" />
         </el-select>
       </el-form-item>
+      <el-form-item label="所属部门" prop="deptId">
+        <treeselect style="width:220px" v-model="queryParams.deptId" :options="deptOptions" :show-count="true" placeholder="请选择所属部门" />
+      </el-form-item>
       <el-form-item label="订单编号" prop="orderCode">
         <el-input v-model="queryParams.orderCode" placeholder="请输入订单编号" clearable size="small" @keyup.enter.native="handleQuery" />
       </el-form-item>
+      <el-form-item label="订单日期" prop="createTime">
+        <el-date-picker
+          v-model="createTime"
+          size="small"
+          style="width: 220px"
+          value-format="yyyy-MM-dd"
+          type="daterange"
+          range-separator="-"
+          start-placeholder="开始日期"
+          end-placeholder="结束日期"
+          @change="handleCreateTimeChange"
+        />
+      </el-form-item>
+      <el-form-item label="回款日期" prop="returnTime">
+        <el-date-picker
+          v-model="returnTime"
+          size="small"
+          style="width: 220px"
+          value-format="yyyy-MM-dd"
+          type="daterange"
+          range-separator="-"
+          start-placeholder="开始日期"
+          end-placeholder="结束日期"
+          @change="handleReturnTimeChange"
+        />
+      </el-form-item>
+      <el-form-item label="回款人" prop="returnUser">
+        <el-input v-model="queryParams.returnUser" placeholder="请输入回款人" clearable size="small" @keyup.enter.native="handleQuery" />
+      </el-form-item>
       <el-form-item label="会员姓名" prop="userName">
         <el-input v-model="queryParams.userName" 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 label="收件人电话1" prop="userPhone">
+        <el-input v-model="queryParams.userPhone" placeholder="请输入收件人电话1" clearable size="small" @keyup.enter.native="handleQuery" />
+      </el-form-item>
+      <el-form-item label="快递公司" prop="deliveryName">
+        <el-input v-model="queryParams.deliveryName" placeholder="请输入快递公司" clearable size="small" @keyup.enter.native="handleQuery" />
       </el-form-item>
       <el-form-item label="快递单号" prop="deliverySn">
         <el-input v-model="queryParams.deliverySn" placeholder="请输入快递单号" clearable size="small" @keyup.enter.native="handleQuery" />
       </el-form-item>
+      <el-form-item label="订单金额" prop="totalPrice">
+        <el-input-number v-model="queryParams.totalPrice" :precision="2" :min="0" placeholder="请输入订单金额" size="small" style="width:200px" controls-position="right" />
+      </el-form-item>
+      <el-form-item label="代收金额" prop="collectionPrice">
+        <el-input-number v-model="queryParams.collectionPrice" :precision="2" :min="0" placeholder="请输入代收金额" size="small" style="width:200px" controls-position="right" />
+      </el-form-item>
+      <el-form-item label="收件人电话2" prop="receiverPhone">
+        <el-input v-model="queryParams.receiverPhone" placeholder="请输入收件人电话2" 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="remark">
+        <el-input v-model="queryParams.remark" placeholder="请输入备注" clearable size="small" @keyup.enter.native="handleQuery" />
+      </el-form-item>
+      <el-form-item label="销售姓名" prop="companyUserName">
+        <el-input v-model="queryParams.companyUserName" placeholder="请输入销售姓名" clearable size="small" @keyup.enter.native="handleQuery" />
+      </el-form-item>
+      <el-form-item label="付款方式" prop="payType">
+        <el-select v-model="queryParams.payType" placeholder="请选择付款方式" clearable size="small" style="width:140px;">
+          <el-option
+            v-for="item in payTypeOptions"
+            :key="item.dictValue"
+            :label="item.dictLabel"
+            :value="Number(item.dictValue)"
+          />
+        </el-select>
+      </el-form-item>
       <el-form-item label="发货时间" prop="deliveryTime">
         <el-date-picker
           v-model="deliveryTime"
@@ -182,10 +245,14 @@
 
 <script>
 import { listFinanceOrder, editFinanceOrder, exportFinanceOrder, downloadFinanceImportTemplate, importFinanceOrder } from '@/api/store/financeOrder'
+import { treeselect } from '@/api/company/companyDept'
+import Treeselect from '@riophae/vue-treeselect'
+import '@riophae/vue-treeselect/dist/vue-treeselect.css'
 import { getToken } from '@/utils/auth'
 
 export default {
   name: 'FinanceOrder',
+  components: { Treeselect },
   data() {
     return {
       loading: false,
@@ -194,15 +261,35 @@ export default {
       total: 0,
       orderList: [],
       deliveryTime: null,
+      createTime: null,
+      returnTime: null,
       queryParams: {
         pageNum: 1,
         pageSize: 10,
+        deptId: null,
         orderCode: null,
         userName: null,
         userPhone: null,
-        deliverySn: null
+        deliverySn: null,
+        deliveryName: null,
+        returnUser: null,
+        totalPrice: null,
+        collectionPrice: null,
+        receiverPhone: null,
+        productName: null,
+        remark: null,
+        companyUserName: null,
+        payType: null,
+        returnStatus: null,
+        sTime: null,
+        eTime: null,
+        returnTimeStart: null,
+        returnTimeEnd: null,
+        deliveryStartTime: null,
+        deliveryEndTime: null
       },
       payTypeOptions: [],
+      deptOptions: [],
       editOpen: false,
       editTitle: '',
       editForm: {
@@ -229,11 +316,22 @@ export default {
     this.getDicts('sys_package_pay_type').then(response => {
       this.payTypeOptions = response.data
     })
+    this.getTreeselect()
   },
   methods: {
+    /** 查询部门下拉树结构 */
+    getTreeselect() {
+      treeselect().then((response) => {
+        this.deptOptions = response.data
+      })
+    },
     getList() {
       this.loading = true
-      listFinanceOrder(this.queryParams).then(response => {
+      const params = { ...this.queryParams }
+      if (params.totalPrice === 0) params.totalPrice = null
+      if (params.collectionPrice === 0) params.collectionPrice = null
+      if (params.returnStatus === '' || params.returnStatus === null || params.returnStatus === undefined) delete params.returnStatus
+      listFinanceOrder(params).then(response => {
         this.orderList = response.rows || []
         this.total = response.total || 0
         this.loading = false
@@ -244,10 +342,28 @@ export default {
     handleDeliveryTimeChange(val) {
       if (val) {
         this.queryParams.deliveryStartTime = val[0]
-        this.queryParams.deliveryEndTime = val[1]
+        this.queryParams.deliveryEndTime = val[1] + ' 23:59:59'
+      } else {
+        this.queryParams.deliveryStartTime = null
+        this.queryParams.deliveryEndTime = null
+      }
+    },
+    handleCreateTimeChange(val) {
+      if (val) {
+        this.queryParams.sTime = val[0]
+        this.queryParams.eTime = val[1] + ' 23:59:59'
+      } else {
+        this.queryParams.sTime = null
+        this.queryParams.eTime = null
+      }
+    },
+    handleReturnTimeChange(val) {
+      if (val) {
+        this.queryParams.returnTimeStart = val[0]
+        this.queryParams.returnTimeEnd = val[1] + ' 23:59:59'
       } else {
-        delete this.queryParams.deliveryStartTime
-        delete this.queryParams.deliveryEndTime
+        this.queryParams.returnTimeStart = null
+        this.queryParams.returnTimeEnd = null
       }
     },
     handleQuery() {
@@ -257,8 +373,14 @@ export default {
     resetQuery() {
       this.resetForm('queryForm')
       this.deliveryTime = null
-      delete this.queryParams.deliveryStartTime
-      delete this.queryParams.deliveryEndTime
+      this.createTime = null
+      this.returnTime = null
+      this.queryParams.sTime = null
+      this.queryParams.eTime = null
+      this.queryParams.deliveryStartTime = null
+      this.queryParams.deliveryEndTime = null
+      this.queryParams.returnTimeStart = null
+      this.queryParams.returnTimeEnd = null
       this.handleQuery()
     },
     handleExport() {

+ 47 - 7
src/views/store/rejectNoReturn/index.vue

@@ -27,6 +27,25 @@
           @change="handleDeliveryTimeChange"
         />
       </el-form-item>
+      <el-form-item label="金额" prop="totalPrice">
+        <el-input-number v-model="queryParams.totalPrice" :precision="2" :min="0" placeholder="请输入金额" size="small" style="width:200px" controls-position="right" />
+      </el-form-item>
+      <el-form-item label="跟单时间" prop="followTime">
+        <el-date-picker
+          v-model="followTime"
+          size="small"
+          style="width: 220px"
+          value-format="yyyy-MM-dd"
+          type="daterange"
+          range-separator="-"
+          start-placeholder="开始日期"
+          end-placeholder="结束日期"
+          @change="handleFollowTimeChange"
+        />
+      </el-form-item>
+      <el-form-item label="快递公司" prop="deliveryName">
+        <el-input v-model="queryParams.deliveryName" placeholder="请输入快递公司" clearable size="small" @keyup.enter.native="handleQuery" />
+      </el-form-item>
       <el-form-item>
         <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">查询</el-button>
         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
@@ -82,13 +101,20 @@ export default {
       total: 0,
       tableList: [],
       deliveryTime: null,
+      followTime: null,
       queryParams: {
         pageNum: 1,
         pageSize: 10,
         orderCode: null,
         deliverySn: null,
         userName: null,
-        userAddress: null
+        userAddress: null,
+        totalPrice: null,
+        deliveryName: null,
+        deliveryStartTime: null,
+        deliveryEndTime: null,
+        followTimeStart: null,
+        followTimeEnd: null
       }
     }
   },
@@ -98,7 +124,9 @@ export default {
   methods: {
     getList() {
       this.loading = true
-      listRejectNoReturn(this.queryParams).then(response => {
+      const params = { ...this.queryParams }
+      if (params.totalPrice === 0) params.totalPrice = null
+      listRejectNoReturn(params).then(response => {
         this.tableList = response.rows || []
         this.total = response.total || 0
         this.loading = false
@@ -109,10 +137,19 @@ export default {
     handleDeliveryTimeChange(val) {
       if (val) {
         this.queryParams.deliveryStartTime = val[0]
-        this.queryParams.deliveryEndTime = val[1]
+        this.queryParams.deliveryEndTime = val[1] + ' 23:59:59'
+      } else {
+        this.queryParams.deliveryStartTime = null
+        this.queryParams.deliveryEndTime = null
+      }
+    },
+    handleFollowTimeChange(val) {
+      if (val) {
+        this.queryParams.followTimeStart = val[0]
+        this.queryParams.followTimeEnd = val[1] + ' 23:59:59'
       } else {
-        delete this.queryParams.deliveryStartTime
-        delete this.queryParams.deliveryEndTime
+        this.queryParams.followTimeStart = null
+        this.queryParams.followTimeEnd = null
       }
     },
     handleQuery() {
@@ -121,9 +158,12 @@ export default {
     },
     resetQuery() {
       this.deliveryTime = null
-      delete this.queryParams.deliveryStartTime
-      delete this.queryParams.deliveryEndTime
+      this.followTime = null
       this.resetForm('queryForm')
+      this.queryParams.deliveryStartTime = null
+      this.queryParams.deliveryEndTime = null
+      this.queryParams.followTimeStart = null
+      this.queryParams.followTimeEnd = null
       this.handleQuery()
     },
     handleExport() {

+ 119 - 16
src/views/store/rejectReport/index.vue

@@ -6,18 +6,28 @@
     </el-tabs>
 
     <!-- 拒收时间维度查询条件 -->
-    <el-form v-show="activeTab === 'order'" :model="orderQuery" ref="orderQueryForm" :inline="true" label-width="80px">
+    <el-form v-show="activeTab === 'order'" :model="orderQuery" ref="orderQueryForm" :inline="true" label-width="90px">
       <el-form-item label="订单编号" prop="orderCode">
         <el-input v-model="orderQuery.orderCode" placeholder="请输入订单编号" clearable size="small" @keyup.enter.native="handleOrderQuery" />
       </el-form-item>
-      <el-form-item label="单号" prop="deliverySn">
-        <el-input v-model="orderQuery.deliverySn" placeholder="请输入单号" clearable size="small" @keyup.enter.native="handleOrderQuery" />
+      <el-form-item label="快递单号" prop="deliverySn">
+        <el-input v-model="orderQuery.deliverySn" placeholder="请输入快递单号" clearable size="small" @keyup.enter.native="handleOrderQuery" />
       </el-form-item>
       <el-form-item label="会员姓名" prop="userName">
         <el-input v-model="orderQuery.userName" placeholder="请输入会员姓名" clearable size="small" @keyup.enter.native="handleOrderQuery" />
       </el-form-item>
-      <el-form-item label="地址" prop="userAddress">
-        <el-input v-model="orderQuery.userAddress" placeholder="请输入地址" clearable size="small" @keyup.enter.native="handleOrderQuery" />
+      <el-form-item label="订单日期" prop="createTime">
+        <el-date-picker
+          v-model="orderCreateTime"
+          size="small"
+          style="width: 220px"
+          value-format="yyyy-MM-dd"
+          type="daterange"
+          range-separator="-"
+          start-placeholder="开始日期"
+          end-placeholder="结束日期"
+          @change="handleOrderCreateTimeChange"
+        />
       </el-form-item>
       <el-form-item label="发货日期" prop="deliveryTime">
         <el-date-picker
@@ -32,6 +42,43 @@
           @change="handleOrderDeliveryTimeChange"
         />
       </el-form-item>
+      <el-form-item label="金额" prop="totalPrice">
+        <el-input-number v-model="orderQuery.totalPrice" :precision="2" :min="0" placeholder="请输入金额" size="small" style="width:200px" controls-position="right" />
+      </el-form-item>
+      <el-form-item label="快递公司" prop="deliveryName">
+        <el-input v-model="orderQuery.deliveryName" placeholder="请输入快递公司" clearable size="small" @keyup.enter.native="handleOrderQuery" />
+      </el-form-item>
+      <el-form-item label="拒收退回日期" prop="rejectReturnTime">
+        <el-date-picker
+          v-model="orderRejectReturnTime"
+          size="small"
+          style="width: 220px"
+          value-format="yyyy-MM-dd"
+          type="daterange"
+          range-separator="-"
+          start-placeholder="开始日期"
+          end-placeholder="结束日期"
+          @change="handleOrderRejectReturnTimeChange"
+        />
+      </el-form-item>
+      <el-form-item label="拒收人" prop="returnUser">
+        <el-input v-model="orderQuery.returnUser" placeholder="请输入拒收人" clearable size="small" @keyup.enter.native="handleOrderQuery" />
+      </el-form-item>
+      <el-form-item label="电话1" prop="userPhone">
+        <el-input v-model="orderQuery.userPhone" placeholder="请输入电话1" clearable size="small" @keyup.enter.native="handleOrderQuery" />
+      </el-form-item>
+      <el-form-item label="电话2" prop="memberPhone">
+        <el-input v-model="orderQuery.memberPhone" placeholder="请输入电话2" clearable size="small" @keyup.enter.native="handleOrderQuery" />
+      </el-form-item>
+      <el-form-item label="销售姓名" prop="companyUserName">
+        <el-input v-model="orderQuery.companyUserName" placeholder="请输入销售姓名" clearable size="small" @keyup.enter.native="handleOrderQuery" />
+      </el-form-item>
+      <el-form-item label="订购产品" prop="productName">
+        <el-input v-model="orderQuery.productName" placeholder="请输入产品名称" clearable size="small" @keyup.enter.native="handleOrderQuery" />
+      </el-form-item>
+      <el-form-item label="地址" prop="userAddress">
+        <el-input v-model="orderQuery.userAddress" placeholder="请输入地址" clearable size="small" @keyup.enter.native="handleOrderQuery" />
+      </el-form-item>
       <el-form-item>
         <el-button type="primary" icon="el-icon-search" size="mini" @click="handleOrderQuery">查询</el-button>
         <el-button icon="el-icon-refresh" size="mini" @click="resetOrderQuery">重置</el-button>
@@ -89,8 +136,17 @@
 
     <!-- 拒收产品维度查询条件 -->
     <el-form v-show="activeTab === 'product'" :model="productQuery" ref="productQueryForm" :inline="true" label-width="80px">
-      <el-form-item label="产品名" prop="productName">
-        <el-input v-model="productQuery.productName" placeholder="请输入产品名" clearable size="small" @keyup.enter.native="handleProductQuery" />
+      <el-form-item label="产品名称" prop="productName">
+        <el-input v-model="productQuery.productName" placeholder="请输入产品名称" clearable size="small" @keyup.enter.native="handleProductQuery" />
+      </el-form-item>
+      <el-form-item label="快递公司" prop="deliveryName">
+        <el-input v-model="productQuery.deliveryName" placeholder="请输入快递公司" clearable size="small" @keyup.enter.native="handleProductQuery" />
+      </el-form-item>
+      <el-form-item label="数量" prop="totalNum">
+        <el-input-number v-model="productQuery.totalNum" :min="0" placeholder="请输入数量" size="small" style="width:200px" controls-position="right" />
+      </el-form-item>
+      <el-form-item label="金额" prop="totalPrice">
+        <el-input-number v-model="productQuery.totalPrice" :precision="2" :min="0" placeholder="请输入金额" size="small" style="width:200px" controls-position="right" />
       </el-form-item>
       <el-form-item>
         <el-button type="primary" icon="el-icon-search" size="mini" @click="handleProductQuery">查询</el-button>
@@ -136,13 +192,28 @@ export default {
       orderTotal: 0,
       orderList: [],
       orderDeliveryTime: null,
+      orderCreateTime: null,
+      orderRejectReturnTime: null,
       orderQuery: {
         pageNum: 1,
         pageSize: 10,
         orderCode: null,
         deliverySn: null,
         userName: null,
-        userAddress: null
+        userAddress: null,
+        totalPrice: null,
+        deliveryName: null,
+        returnUser: null,
+        userPhone: null,
+        memberPhone: null,
+        companyUserName: null,
+        productName: null,
+        sTime: null,
+        eTime: null,
+        rejectReturnTimeStart: null,
+        rejectReturnTimeEnd: null,
+        deliveryStartTime: null,
+        deliveryEndTime: null
       },
       // 产品维度
       productLoading: false,
@@ -152,7 +223,10 @@ export default {
       productQuery: {
         pageNum: 1,
         pageSize: 10,
-        productName: null
+        productName: null,
+        deliveryName: null,
+        totalNum: null,
+        totalPrice: null
       }
     }
   },
@@ -170,7 +244,9 @@ export default {
     // ========== 订单维度 ==========
     getOrderList() {
       this.orderLoading = true
-      listRejectOrderReport(this.orderQuery).then(response => {
+      const params = { ...this.orderQuery }
+      if (params.totalPrice === 0) params.totalPrice = null
+      listRejectOrderReport(params).then(response => {
         this.orderList = response.rows || []
         this.orderTotal = response.total || 0
         this.orderLoading = false
@@ -181,10 +257,28 @@ export default {
     handleOrderDeliveryTimeChange(val) {
       if (val) {
         this.orderQuery.deliveryStartTime = val[0]
-        this.orderQuery.deliveryEndTime = val[1]
+        this.orderQuery.deliveryEndTime = val[1] + ' 23:59:59'
+      } else {
+        this.orderQuery.deliveryStartTime = null
+        this.orderQuery.deliveryEndTime = null
+      }
+    },
+    handleOrderCreateTimeChange(val) {
+      if (val) {
+        this.orderQuery.sTime = val[0]
+        this.orderQuery.eTime = val[1] + ' 23:59:59'
+      } else {
+        this.orderQuery.sTime = null
+        this.orderQuery.eTime = null
+      }
+    },
+    handleOrderRejectReturnTimeChange(val) {
+      if (val) {
+        this.orderQuery.rejectReturnTimeStart = val[0]
+        this.orderQuery.rejectReturnTimeEnd = val[1] + ' 23:59:59'
       } else {
-        delete this.orderQuery.deliveryStartTime
-        delete this.orderQuery.deliveryEndTime
+        this.orderQuery.rejectReturnTimeStart = null
+        this.orderQuery.rejectReturnTimeEnd = null
       }
     },
     handleOrderQuery() {
@@ -193,9 +287,15 @@ export default {
     },
     resetOrderQuery() {
       this.orderDeliveryTime = null
-      delete this.orderQuery.deliveryStartTime
-      delete this.orderQuery.deliveryEndTime
+      this.orderCreateTime = null
+      this.orderRejectReturnTime = null
       this.resetForm('orderQueryForm')
+      this.orderQuery.sTime = null
+      this.orderQuery.eTime = null
+      this.orderQuery.deliveryStartTime = null
+      this.orderQuery.deliveryEndTime = null
+      this.orderQuery.rejectReturnTimeStart = null
+      this.orderQuery.rejectReturnTimeEnd = null
       this.handleOrderQuery()
     },
     handleOrderExport() {
@@ -217,7 +317,10 @@ export default {
     // ========== 产品维度 ==========
     getProductList() {
       this.productLoading = true
-      listRejectProductReport(this.productQuery).then(response => {
+      const params = { ...this.productQuery }
+      if (params.totalNum === 0) params.totalNum = null
+      if (params.totalPrice === 0) params.totalPrice = null
+      listRejectProductReport(params).then(response => {
         this.productList = response.rows || []
         this.productTotal = response.total || 0
         this.productLoading = false

+ 160 - 14
src/views/store/returnReport/index.vue

@@ -10,15 +10,68 @@
       <el-form-item label="订单编号" prop="orderCode">
         <el-input v-model="orderQuery.orderCode" placeholder="请输入订单编号" clearable size="small" @keyup.enter.native="handleOrderQuery" />
       </el-form-item>
-      <el-form-item label="单号" prop="deliverySn">
-        <el-input v-model="orderQuery.deliverySn" placeholder="请输入单号" clearable size="small" @keyup.enter.native="handleOrderQuery" />
+      <el-form-item label="快递单号" prop="deliverySn">
+        <el-input v-model="orderQuery.deliverySn" placeholder="请输入快递单号" clearable size="small" @keyup.enter.native="handleOrderQuery" />
       </el-form-item>
-      <el-form-item label="会员姓名" prop="userName">
-        <el-input v-model="orderQuery.userName" placeholder="请输入会员姓名" clearable size="small" @keyup.enter.native="handleOrderQuery" />
+      <el-form-item label="姓名" prop="userName">
+        <el-input v-model="orderQuery.userName" placeholder="请输入姓名" clearable size="small" @keyup.enter.native="handleOrderQuery" />
       </el-form-item>
       <el-form-item label="地址" prop="userAddress">
         <el-input v-model="orderQuery.userAddress" placeholder="请输入地址" clearable size="small" @keyup.enter.native="handleOrderQuery" />
       </el-form-item>
+      <el-form-item label="订单日期" prop="createTime">
+        <el-date-picker
+          v-model="orderCreateTime"
+          size="small"
+          style="width: 220px"
+          value-format="yyyy-MM-dd"
+          type="daterange"
+          range-separator="-"
+          start-placeholder="开始日期"
+          end-placeholder="结束日期"
+          @change="handleOrderCreateTimeChange"
+        />
+      </el-form-item>
+      <el-form-item label="定金" prop="payPrice">
+        <el-input-number v-model="orderQuery.payPrice" :precision="2" :min="0" placeholder="请输入定金" size="small" style="width:200px" controls-position="right" />
+      </el-form-item>
+      <el-form-item label="金额" prop="totalPrice">
+        <el-input-number v-model="orderQuery.totalPrice" :precision="2" :min="0" placeholder="请输入金额" size="small" style="width:200px" controls-position="right" />
+      </el-form-item>
+      <el-form-item label="快递公司" prop="deliveryName">
+        <el-input v-model="orderQuery.deliveryName" placeholder="请输入快递公司" clearable size="small" @keyup.enter.native="handleOrderQuery" />
+      </el-form-item>
+      <el-form-item label="回款人" prop="returnUser">
+        <el-input v-model="orderQuery.returnUser" placeholder="请输入回款人" clearable size="small" @keyup.enter.native="handleOrderQuery" />
+      </el-form-item>
+      <el-form-item label="回款日期" prop="returnTime">
+        <el-date-picker
+          v-model="orderReturnTime"
+          size="small"
+          style="width: 220px"
+          value-format="yyyy-MM-dd"
+          type="daterange"
+          range-separator="-"
+          start-placeholder="开始日期"
+          end-placeholder="结束日期"
+          @change="handleOrderReturnTimeChange"
+        />
+      </el-form-item>
+      <el-form-item label="电话1" prop="userPhone">
+        <el-input v-model="orderQuery.userPhone" placeholder="请输入电话1" clearable size="small" @keyup.enter.native="handleOrderQuery" />
+      </el-form-item>
+      <el-form-item label="电话2" prop="memberPhone">
+        <el-input v-model="orderQuery.memberPhone" placeholder="请输入电话2" clearable size="small" @keyup.enter.native="handleOrderQuery" />
+      </el-form-item>
+      <el-form-item label="销售" prop="companyUserName">
+        <el-input v-model="orderQuery.companyUserName" placeholder="请输入销售" clearable size="small" @keyup.enter.native="handleOrderQuery" />
+      </el-form-item>
+      <el-form-item label="部门" prop="deptId">
+        <treeselect style="width:220px" v-model="orderQuery.deptId" :options="deptOptions" :show-count="true" placeholder="请选择部门" />
+      </el-form-item>
+      <el-form-item label="订购产品" prop="productName">
+        <el-input v-model="orderQuery.productName" placeholder="请输入产品名称" clearable size="small" @keyup.enter.native="handleOrderQuery" />
+      </el-form-item>
       <el-form-item label="发货日期" prop="deliveryTime">
         <el-date-picker
           v-model="orderDeliveryTime"
@@ -86,8 +139,27 @@
 
     <!-- 回款产品维度查询条件 -->
     <el-form v-show="activeTab === 'product'" :model="productQuery" ref="productQueryForm" :inline="true" label-width="80px">
-      <el-form-item label="产品名" prop="productName">
-        <el-input v-model="productQuery.productName" placeholder="请输入产品名" clearable size="small" @keyup.enter.native="handleProductQuery" />
+      <el-form-item label="回款时间" prop="returnTime">
+        <el-date-picker
+          v-model="productReturnTime"
+          size="small"
+          style="width: 220px"
+          value-format="yyyy-MM-dd"
+          type="daterange"
+          range-separator="-"
+          start-placeholder="开始日期"
+          end-placeholder="结束日期"
+          @change="handleProductReturnTimeChange"
+        />
+      </el-form-item>
+      <el-form-item label="产品名称" prop="productName">
+        <el-input v-model="productQuery.productName" placeholder="请输入产品名称" clearable size="small" @keyup.enter.native="handleProductQuery" />
+      </el-form-item>
+      <el-form-item label="部门" prop="deptId">
+        <treeselect style="width:220px" v-model="productQuery.deptId" :options="deptOptions" :show-count="true" placeholder="请选择部门" />
+      </el-form-item>
+      <el-form-item label="快递公司" prop="deliveryName">
+        <el-input v-model="productQuery.deliveryName" placeholder="请输入快递公司" clearable size="small" @keyup.enter.native="handleProductQuery" />
       </el-form-item>
       <el-form-item>
         <el-button type="primary" icon="el-icon-search" size="mini" @click="handleProductQuery">查询</el-button>
@@ -122,39 +194,68 @@
 
 <script>
 import { listReturnOrderReport, exportReturnOrderReport, listReturnProductReport, exportReturnProductReport } from '@/api/store/returnReport'
+import { treeselect } from '@/api/company/companyDept'
+import Treeselect from '@riophae/vue-treeselect'
+import '@riophae/vue-treeselect/dist/vue-treeselect.css'
 
 export default {
   name: 'ReturnReport',
+  components: { Treeselect },
   data() {
     return {
       activeTab: 'order',
+      // 部门树
+      deptOptions: [],
       // 订单维度
       orderLoading: false,
       orderExportLoading: false,
       orderTotal: 0,
       orderList: [],
       orderDeliveryTime: null,
+      orderCreateTime: null,
+      orderReturnTime: null,
       orderQuery: {
         pageNum: 1,
         pageSize: 10,
         orderCode: null,
         deliverySn: null,
         userName: null,
-        userAddress: null
+        userAddress: null,
+        payPrice: null,
+        totalPrice: null,
+        deliveryName: null,
+        returnUser: null,
+        userPhone: null,
+        memberPhone: null,
+        companyUserName: null,
+        deptId: null,
+        productName: null,
+        sTime: null,
+        eTime: null,
+        returnTimeStart: null,
+        returnTimeEnd: null,
+        deliveryStartTime: null,
+        deliveryEndTime: null
       },
       // 产品维度
       productLoading: false,
       productExportLoading: false,
       productTotal: 0,
       productList: [],
+      productReturnTime: null,
       productQuery: {
         pageNum: 1,
         pageSize: 10,
-        productName: null
+        productName: null,
+        deptId: null,
+        deliveryName: null,
+        returnTimeStart: null,
+        returnTimeEnd: null
       }
     }
   },
   created() {
+    this.getTreeselect()
     this.getOrderList()
   },
   watch: {
@@ -165,10 +266,19 @@ export default {
     }
   },
   methods: {
+    /** 查询部门下拉树结构 */
+    getTreeselect() {
+      treeselect().then((response) => {
+        this.deptOptions = response.data
+      })
+    },
     // ========== 订单维度 ==========
     getOrderList() {
       this.orderLoading = true
-      listReturnOrderReport(this.orderQuery).then(response => {
+      const params = { ...this.orderQuery }
+      if (params.payPrice === 0) params.payPrice = null
+      if (params.totalPrice === 0) params.totalPrice = null
+      listReturnOrderReport(params).then(response => {
         this.orderList = response.rows || []
         this.orderTotal = response.total || 0
         this.orderLoading = false
@@ -179,10 +289,28 @@ export default {
     handleOrderDeliveryTimeChange(val) {
       if (val) {
         this.orderQuery.deliveryStartTime = val[0]
-        this.orderQuery.deliveryEndTime = val[1]
+        this.orderQuery.deliveryEndTime = val[1] + ' 23:59:59'
       } else {
-        delete this.orderQuery.deliveryStartTime
-        delete this.orderQuery.deliveryEndTime
+        this.orderQuery.deliveryStartTime = null
+        this.orderQuery.deliveryEndTime = null
+      }
+    },
+    handleOrderCreateTimeChange(val) {
+      if (val) {
+        this.orderQuery.sTime = val[0]
+        this.orderQuery.eTime = val[1] + ' 23:59:59'
+      } else {
+        this.orderQuery.sTime = null
+        this.orderQuery.eTime = null
+      }
+    },
+    handleOrderReturnTimeChange(val) {
+      if (val) {
+        this.orderQuery.returnTimeStart = val[0]
+        this.orderQuery.returnTimeEnd = val[1] + ' 23:59:59'
+      } else {
+        this.orderQuery.returnTimeStart = null
+        this.orderQuery.returnTimeEnd = null
       }
     },
     handleOrderQuery() {
@@ -191,9 +319,15 @@ export default {
     },
     resetOrderQuery() {
       this.orderDeliveryTime = null
-      delete this.orderQuery.deliveryStartTime
-      delete this.orderQuery.deliveryEndTime
+      this.orderCreateTime = null
+      this.orderReturnTime = null
       this.resetForm('orderQueryForm')
+      this.orderQuery.sTime = null
+      this.orderQuery.eTime = null
+      this.orderQuery.deliveryStartTime = null
+      this.orderQuery.deliveryEndTime = null
+      this.orderQuery.returnTimeStart = null
+      this.orderQuery.returnTimeEnd = null
       this.handleOrderQuery()
     },
     handleOrderExport() {
@@ -223,12 +357,24 @@ export default {
         this.productLoading = false
       })
     },
+    handleProductReturnTimeChange(val) {
+      if (val) {
+        this.productQuery.returnTimeStart = val[0]
+        this.productQuery.returnTimeEnd = val[1] + ' 23:59:59'
+      } else {
+        this.productQuery.returnTimeStart = null
+        this.productQuery.returnTimeEnd = null
+      }
+    },
     handleProductQuery() {
       this.productQuery.pageNum = 1
       this.getProductList()
     },
     resetProductQuery() {
+      this.productReturnTime = null
       this.resetForm('productQueryForm')
+      this.productQuery.returnTimeStart = null
+      this.productQuery.returnTimeEnd = null
       this.handleProductQuery()
     },
     handleProductExport() {

+ 22 - 1
src/views/store/signDetailReport/index.vue

@@ -18,6 +18,18 @@
       <el-form-item label="部门" prop="deptId">
         <treeselect v-model="queryParams.deptId" :options="deptOptions" :show-count="true" placeholder="请选择部门" clearable style="width: 200px" />
       </el-form-item>
+      <el-form-item label="发货数量" prop="deliveryCount">
+        <el-input-number v-model="queryParams.deliveryCount" :min="0" placeholder="请输入发货数量" size="small" style="width:200px" controls-position="right" />
+      </el-form-item>
+      <el-form-item label="发货金额" prop="deliveryAmount">
+        <el-input-number v-model="queryParams.deliveryAmount" :precision="2" :min="0" placeholder="请输入发货金额" size="small" style="width:200px" controls-position="right" />
+      </el-form-item>
+      <el-form-item label="签收数量" prop="signCount">
+        <el-input-number v-model="queryParams.signCount" :min="0" placeholder="请输入签收数量" size="small" style="width:200px" controls-position="right" />
+      </el-form-item>
+      <el-form-item label="签收金额" prop="signAmount">
+        <el-input-number v-model="queryParams.signAmount" :precision="2" :min="0" placeholder="请输入签收金额" size="small" style="width:200px" controls-position="right" />
+      </el-form-item>
       <el-form-item label="订单时间" prop="orderTime">
         <el-date-picker
           v-model="orderTime"
@@ -103,6 +115,10 @@ export default {
         companyId: null,
         orderType: null,
         deptId: null,
+        deliveryCount: null,
+         deliveryAmount: null,
+         signCount: null,
+         signAmount: null,
         sTime: null,
         eTime: null
       }
@@ -115,7 +131,12 @@ export default {
   methods: {
     getList() {
       this.loading = true
-      listSignDetailReport(this.queryParams).then(response => {
+      const params = { ...this.queryParams }
+      if (params.deliveryCount === 0) params.deliveryCount = null
+      if (params.deliveryAmount === 0) params.deliveryAmount = null
+      if (params.signCount === 0) params.signCount = null
+      if (params.signAmount === 0) params.signAmount = null
+      listSignDetailReport(params).then(response => {
         this.tableList = response.rows || []
         this.total = response.total || 0
         this.loading = false

+ 73 - 8
src/views/store/signReport/index.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="app-container">
     <!-- 查询条件 -->
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="80px">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="90px">
       <el-form-item label="订单编号" prop="orderCode">
         <el-input v-model="queryParams.orderCode" placeholder="请输入订单编号" clearable size="small" @keyup.enter.native="handleQuery" />
       </el-form-item>
@@ -27,6 +27,34 @@
           @change="handleDeliveryTimeChange"
         />
       </el-form-item>
+      <el-form-item label="定金" prop="payPrice">
+        <el-input-number v-model="queryParams.payPrice" :precision="2" :min="0" placeholder="请输入定金" size="small" style="width:200px" controls-position="right" />
+      </el-form-item>
+      <el-form-item label="代收金额" prop="collectionPrice">
+        <el-input-number v-model="queryParams.collectionPrice" :precision="2" :min="0" placeholder="请输入代收金额" size="small" style="width:200px" controls-position="right" />
+      </el-form-item>
+      <el-form-item label="订单总金额" prop="totalPrice">
+        <el-input-number v-model="queryParams.totalPrice" :precision="2" :min="0" placeholder="请输入订单总金额" size="small" style="width:200px" controls-position="right" />
+      </el-form-item>
+      <el-form-item label="跟单时间" prop="followTime">
+        <el-date-picker
+          v-model="followTime"
+          size="small"
+          style="width: 220px"
+          value-format="yyyy-MM-dd"
+          type="daterange"
+          range-separator="-"
+          start-placeholder="开始日期"
+          end-placeholder="结束日期"
+          @change="handleFollowTimeChange"
+        />
+      </el-form-item>
+      <el-form-item label="快递公司" prop="deliveryName">
+        <el-input v-model="queryParams.deliveryName" placeholder="请输入快递公司" clearable size="small" @keyup.enter.native="handleQuery" />
+      </el-form-item>
+      <el-form-item label="部门" prop="deptId">
+        <treeselect style="width:220px" v-model="queryParams.deptId" :options="deptOptions" :show-count="true" placeholder="请选择部门" />
+      </el-form-item>
       <el-form-item>
         <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">查询</el-button>
         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
@@ -76,9 +104,13 @@
 
 <script>
 import { listSignOrderReport, exportSignOrderReport } from '@/api/store/signReport'
+import { treeselect } from '@/api/company/companyDept'
+import Treeselect from '@riophae/vue-treeselect'
+import '@riophae/vue-treeselect/dist/vue-treeselect.css'
 
 export default {
   name: 'SignReport',
+  components: { Treeselect },
   data() {
     return {
       loading: false,
@@ -86,23 +118,44 @@ export default {
       total: 0,
       tableList: [],
       deliveryTime: null,
+      followTime: null,
+      deptOptions: [],
       queryParams: {
         pageNum: 1,
         pageSize: 10,
         orderCode: null,
         deliverySn: null,
         userName: null,
-        userAddress: null
+        userAddress: null,
+        payPrice: null,
+        collectionPrice: null,
+        totalPrice: null,
+        deliveryName: null,
+        deptId: null,
+        deliveryStartTime: null,
+        deliveryEndTime: null,
+        followTimeStart: null,
+        followTimeEnd: null
       }
     }
   },
   created() {
+    this.getTreeselect()
     this.getList()
   },
   methods: {
+    getTreeselect() {
+      treeselect().then((response) => {
+        this.deptOptions = response.data
+      })
+    },
     getList() {
       this.loading = true
-      listSignOrderReport(this.queryParams).then(response => {
+      const params = { ...this.queryParams }
+      if (params.payPrice === 0) params.payPrice = null
+      if (params.collectionPrice === 0) params.collectionPrice = null
+      if (params.totalPrice === 0) params.totalPrice = null
+      listSignOrderReport(params).then(response => {
         this.tableList = response.rows || []
         this.total = response.total || 0
         this.loading = false
@@ -113,10 +166,19 @@ export default {
     handleDeliveryTimeChange(val) {
       if (val) {
         this.queryParams.deliveryStartTime = val[0]
-        this.queryParams.deliveryEndTime = val[1]
+        this.queryParams.deliveryEndTime = val[1] + ' 23:59:59'
+      } else {
+        this.queryParams.deliveryStartTime = null
+        this.queryParams.deliveryEndTime = null
+      }
+    },
+    handleFollowTimeChange(val) {
+      if (val) {
+        this.queryParams.followTimeStart = val[0]
+        this.queryParams.followTimeEnd = val[1] + ' 23:59:59'
       } else {
-        delete this.queryParams.deliveryStartTime
-        delete this.queryParams.deliveryEndTime
+        this.queryParams.followTimeStart = null
+        this.queryParams.followTimeEnd = null
       }
     },
     handleQuery() {
@@ -125,9 +187,12 @@ export default {
     },
     resetQuery() {
       this.deliveryTime = null
-      delete this.queryParams.deliveryStartTime
-      delete this.queryParams.deliveryEndTime
+      this.followTime = null
       this.resetForm('queryForm')
+      this.queryParams.deliveryStartTime = null
+      this.queryParams.deliveryEndTime = null
+      this.queryParams.followTimeStart = null
+      this.queryParams.followTimeEnd = null
       this.handleQuery()
     },
     handleExport() {

+ 155 - 2
src/views/store/storeOrder/list.vue

@@ -293,7 +293,7 @@
             <dict-tag :options="deliveryPayStatusOptions" :value="scope.row.deliveryPayStatus"/>
        </template>
     </el-table-column>
-      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right" width="150px">
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right" width="200px">
       <template slot-scope="scope">
           <el-button
               size="mini"
@@ -310,6 +310,13 @@
               @click="handleApprove(scope.row)"
             >申请审核
             </el-button>
+          <el-button
+              size="mini"
+              type="text"
+              v-hasPermi="['store:storeOrder:edit']"
+              @click="handleEdit(scope.row)"
+            >订单修改
+            </el-button>
       </template>
       </el-table-column>
     </el-table>
@@ -543,6 +550,78 @@
         <el-button type="primary" @click="submitApprove">确 定</el-button>
       </div>
     </el-dialog>
+
+    <el-dialog title="订单修改" v-if="editOpen" :visible.sync="editOpen" width="600px" append-to-body :close-on-click-modal="false">
+      <el-form ref="editForm" :model="editForm" label-width="120px">
+        <el-form-item label="订单状态">
+          <el-select v-model="editForm.status" placeholder="请选择订单状态" clearable size="small" style="width:200px;">
+            <el-option label="未审核" :value="1" />
+            <el-option label="审核通过" :value="2" />
+            <el-option label="已发货" :value="3" />
+            <el-option label="已回款" :value="4" />
+            <el-option label="已取消" :value="-3" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="跟单时间">
+          <el-date-picker v-model="editForm.followTime" type="datetime" placeholder="请选择跟单时间" size="small" style="width:200px;" value-format="yyyy-MM-dd HH:mm:ss" />
+        </el-form-item>
+        <el-form-item label="快递类型">
+          <el-input v-model="editForm.deliveryName" placeholder="请输入快递类型" clearable size="small" style="width:200px;" />
+        </el-form-item>
+        <el-form-item label="签收状态">
+          <el-select v-model="editForm.deliveryStatus" placeholder="请选择签收状态" clearable size="small" style="width:200px;">
+            <el-option
+              v-for="item in deliveryStatusOptions"
+              :key="item.dictValue"
+              :label="item.dictLabel"
+              :value="Number(item.dictValue)"
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="代收金额">
+          <el-input-number v-model="editForm.collectionPrice" :precision="2" :min="0" size="small" style="width:200px;" />
+        </el-form-item>
+        <el-form-item label="定金回款时间" v-if="editForm.status == 4">
+          <el-date-picker v-model="editForm.depositReturnTime" type="datetime" placeholder="请选择回款时间" size="small" style="width:200px;" value-format="yyyy-MM-dd HH:mm:ss" />
+        </el-form-item>
+        <el-form-item label="备注">
+          <el-input v-model="editForm.remark" type="textarea" :rows="3" placeholder="请输入备注" style="width:350px;" />
+        </el-form-item>
+        <el-form-item label="快递公司">
+          <el-input v-model="editForm.deliveryCode" placeholder="请输入快递公司编号" clearable size="small" style="width:200px;" />
+        </el-form-item>
+        <el-form-item label="退款金额">
+          <el-input-number v-model="editForm.refundPrice" :precision="2" :min="0" size="small" style="width:200px;" />
+        </el-form-item>
+        <el-form-item label="退款日期">
+          <el-date-picker v-model="editForm.refundTime" type="datetime" placeholder="请选择退款日期" size="small" style="width:200px;" value-format="yyyy-MM-dd HH:mm:ss" />
+        </el-form-item>
+        <el-form-item label="拒收回退时间" v-if="showRejectReturnTime">
+          <el-date-picker v-model="editForm.rejectReturnTime" type="datetime" placeholder="请选择拒收回退时间" size="small" style="width:200px;" value-format="yyyy-MM-dd HH:mm:ss" />
+        </el-form-item>
+        <el-form-item label="是否还货" v-if="showReturnGoods">
+          <el-select v-model="editForm.isReturnGoods" placeholder="请选择是否还货" clearable size="small" style="width:200px;">
+            <el-option label="是" :value="1" />
+            <el-option label="否" :value="2" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="病名">
+          <el-input v-model="editForm.diseaseName" placeholder="请输入病名" clearable size="small" style="width:200px;" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="editOpen = false">取 消</el-button>
+        <el-button type="primary" @click="submitEditConfirm">确 定</el-button>
+      </div>
+    </el-dialog>
+
+    <el-dialog title="确认修改" :visible.sync="editConfirmOpen" width="360px" append-to-body>
+      <span>确认修改该订单信息吗?</span>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="editConfirmOpen = false">取 消</el-button>
+        <el-button type="primary" @click="submitEdit">确 认</el-button>
+      </div>
+    </el-dialog>
   </div>
 </template>
 
@@ -556,7 +635,8 @@ import {
   exportOrder,
   importTemplate,
   createOrderByManually,
-  approveOrder
+  approveOrder,
+  editStoreOrder
 } from "@/api/store/storeOrder";
 import storeOrderDetails from '../components/storeOrderDetails.vue';
 import { getTcmScheduleList } from "@/api/company/tcmScheduleReport";
@@ -761,8 +841,46 @@ export default {
        deliveryStatusOptions:[],
        orderBuyTypeOptions:[],
        scheduleOptions:[],
+      // 订单修改弹窗
+      editOpen: false,
+      editConfirmOpen: false,
+      editForm: {
+        orderId: null,
+        status: null,
+        followTime: null,
+        deliveryName: null,
+        deliveryStatus: null,
+        collectionPrice: null,
+        depositReturnTime: null,
+        remark: null,
+        deliveryCode: null,
+        refundPrice: null,
+        refundTime: null,
+        rejectReturnTime: null,
+        diseaseName: null,
+        isReturnGoods: null
+      }
     };
   },
+  computed: {
+    showRejectReturnTime() {
+      if (this.editForm.deliveryStatus == null) return false;
+      const statusItem = this.deliveryStatusOptions.find(item => Number(item.dictValue) === this.editForm.deliveryStatus);
+      if (statusItem) {
+        const label = statusItem.dictLabel;
+        return ['已拒收', '已退回', '退回签收'].includes(label);
+      }
+      return false;
+    },
+    showReturnGoods() {
+      if (this.editForm.deliveryStatus == null) return false;
+      const statusItem = this.deliveryStatusOptions.find(item => Number(item.dictValue) === this.editForm.deliveryStatus);
+      if (statusItem) {
+        return statusItem.dictLabel === '已拒收';
+      }
+      return false;
+    }
+  },
   watch: {
     // 根据名称筛选部门树
     deptName(val) {
@@ -1336,6 +1454,41 @@ export default {
           });
         }
       });
+    },
+    handleEdit(row) {
+      getOrder(row.orderId).then(response => {
+        const d = response.data;
+        this.editForm = {
+          orderId: d.orderId,
+          status: d.status,
+          followTime: d.followTime || null,
+          deliveryName: d.deliveryName || null,
+          deliveryStatus: d.deliveryStatus != null ? d.deliveryStatus : null,
+          collectionPrice: d.collectionPrice != null ? Number(d.collectionPrice) : null,
+          depositReturnTime: d.depositReturnTime || null,
+          remark: d.remark || null,
+          deliveryCode: d.deliveryCode || null,
+          refundPrice: d.refundPrice != null ? Number(d.refundPrice) : null,
+          refundTime: d.refundTime || null,
+          rejectReturnTime: d.rejectReturnTime || null,
+          diseaseName: d.diseaseName || null,
+          isReturnGoods: d.isReturnGoods != null ? d.isReturnGoods : null
+        };
+        this.editOpen = true;
+      });
+    },
+    submitEditConfirm() {
+      this.editConfirmOpen = true;
+    },
+    submitEdit() {
+      editStoreOrder(this.editForm).then(response => {
+        if (response.code === 200) {
+          this.msgSuccess("修改成功");
+          this.editConfirmOpen = false;
+          this.editOpen = false;
+          this.getList();
+        }
+      });
     }
   }
 };