Quellcode durchsuchen

添加审批功能

xgb vor 2 Tagen
Ursprung
Commit
b34461b8b7

+ 8 - 0
src/api/store/statistics.js

@@ -31,3 +31,11 @@ export function exportStorePayment(query) {
   })
 }
 
+export function storeProduct(query) {
+  return request({
+    url: '/store/statistics/storeProduct',
+    method: 'get',
+    params: query
+  })
+}
+

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

@@ -17,3 +17,12 @@ export const audit = (data) => {
     data: data
   })
 }
+
+// 批量审核
+export const auditBatch = (data) => {
+  return request({
+    url: '/store/storeOrderAudit/auditBatch',
+    method: 'get',
+    params: data
+  })
+}

+ 6 - 0
src/views/store/components/productOrder.vue

@@ -136,6 +136,12 @@
                   {{customerInfo.registerDate }}
                 </span>
             </el-descriptions-item>
+            <!-- 剩余积分integral -->
+            <el-descriptions-item v-if="user!=null " label="剩余积分"  >
+                <span >
+                  {{user.integral }}
+                </span>
+            </el-descriptions-item>
 
       </el-descriptions>
       <div style="margin: 20px 0px"  v-if="order!=null">

+ 476 - 285
src/views/store/statistics/storeOrder.vue

@@ -1,25 +1,44 @@
 <template>
   <div class="app-container">
-      <div class="app-content">
-           <div class="title">
-             商城订单统计
-          </div>
-         <el-form class="search-form" :inline="true" >
-          <el-form-item >
-            <el-select v-model="value" placeholder="请选择日期">
-              <el-option
-                v-for="item in options"
-                :key="item.value"
-                :label="item.label"
-                :value="item.value">
-              </el-option>
-            </el-select>
-          </el-form-item>
-          <el-form-item >
-            <treeselect :clearable="false"  v-model="deptId"  :options="deptOptions" :show-count="true" placeholder="请选择归属部门" />
-          </el-form-item>
-          <el-form-item>
-            <el-select filterable v-model="userIds" placeholder="请选择员工" clearable size="small">
+    <div class="app-content">
+      <div class="title">
+        商城订单统计
+      </div>
+               <el-form class="search-form" :inline="true" >
+        
+        <el-row :gutter="20">
+          <el-col :span="6">
+            <el-form-item label="时间:">
+              <el-select v-model="value" placeholder="请选择日期">
+                <el-option
+                  v-for="item in options"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value">
+                </el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+             <el-form-item label="公司名:" prop="companyId">
+              <el-select filterable v-model="companyId" @change="companyChange" placeholder="请选择公司名" clearable size="small">
+                <el-option
+                  v-for="item in companys"
+                  :key="item.companyId"
+                  :label="item.companyName"
+                  :value="item.companyId"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="部门:">
+              <treeselect :clearable="false"  v-model="deptId"  :options="deptOptions" :show-count="true" placeholder="请选择归属部门" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="员工:">
+              <el-select filterable v-model="userIds" placeholder="请选择员工" clearable size="small">
                 <el-option
                   v-for="item in users"
                   :key="item.userId"
@@ -27,321 +46,493 @@
                   :value="item.userId">
                 </el-option>
               </el-select>
-          </el-form-item>
-          <el-form-item label="筛选日期" prop="createTime">
-                  <el-date-picker clearable size="small"
-                    v-model="dateRange"
-                    type="daterange"
-                    value-format="yyyy-MM-dd"
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-row :gutter="20">
+          <el-col :span="6">
+            <el-form-item label="订单类型:">
+              <el-select v-model="orderType" placeholder="请选择订单类型" clearable size="small">
+                <el-option
+                  v-for="item in orderTypeOptions"
+                  :key="item.dictLabel"
+                  :label="item.dictLabel"
+                  :value="item.dictValue">
+                </el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="媒体来源:">
+              <el-select v-model="orderMedium" placeholder="请选择媒体来源" clearable size="small">
+                <el-option
+                  v-for="item in orderMediumOptions"
+                  :key="item.dictLabel"
+                  :label="item.dictLabel"
+                  :value="item.dictValue">
+                </el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        
+       
+    
+        
+
+
+                
+        <el-form-item label="筛选日期" prop="createTime">
+          <el-date-picker clearable size="small" style="width: 205.4px"
+            v-model="dateRange"
+            type="daterange"
+            value-format="yyyy-MM-dd"
                     start-placeholder="开始日期" end-placeholder="结束日期"
                     >
-                  </el-date-picker>
-                </el-form-item>
-          <el-form-item>
-              <el-button type="cyan" icon="el-icon-search"   @click="storeOrder">搜索</el-button>
-          </el-form-item>
-        </el-form>
-         <div class="data-box">
-            <div class="echart-box">
-              <div id="echart-customer"></div>
-            </div>
-            <div class="table-box">
-                  <el-button class="export" size="small"  @click="handleExport"   v-hasPermi="['statistics:customer:index']">导出</el-button>
-                  <el-table
-                  :data="list"
-                  border
-                  :summary-method="getSummaries"
-                  show-summary
-                  max-height="500"
-                  style="width: 100%;">
-                  <el-table-column
-                    prop="nickName"
-                    label="员工姓名">
-                  </el-table-column>
-                  <el-table-column
-                    prop="orderCount"
-                    label="订单数">
-                  </el-table-column>
-                  <el-table-column
-                    prop="payPrice"
-                    label="订单金额">
-                  </el-table-column>
-
-                </el-table>
-            </div>
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item>
+                    <el-button type="primary" icon="el-icon-search" plain   @click="storeOrder">搜索</el-button>
+        </el-form-item>
+      </el-form>
+      <div class="data-box">
+        <div class="echart-box">
+          <div id="echart-customer"></div>
+        </div>
+        
+        <!-- 新增的数据表格 -->
+        <div class="table-container">
+          <h3 class="table-title">员工下单汇总</h3>
+          <el-table
+            :data="tableData" 
+            border 
+            stripe 
+            style="width: 100%; margin-top: 20px;"
+            :row-class-name="tableRowClassName"
+            :span-method="objectSpanMethod"
+            >
+            <el-table-column prop="name" label="姓名/工号" width="150" class-name="sticky-column">
+              <template slot-scope="scope">
+                <span :class="{'group-name': scope.row.isGroup}">{{ scope.row.name }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column prop="totalCalls" label="总单数" width="80" align="center"></el-table-column>
+            <el-table-column prop="totalAmount" label="总金额" width="100" align="center">
+              <template slot-scope="scope">
+                {{ scope.row.totalAmount ? scope.row.totalAmount.toFixed(2) : '0.00' }}
+              </template>
+            </el-table-column>
+            <el-table-column prop="validAmount" label="成单金额" width="100" align="center">
+              <template slot-scope="scope">
+                {{ scope.row.validAmount ? scope.row.validAmount.toFixed(2) : '0.00' }}
+              </template>
+            </el-table-column>
+            <el-table-column prop="waitingOrders" label="待付数" width="80" align="center"></el-table-column>
+            <el-table-column prop="waitingAmount" label="待付金额" width="100" align="center">
+              <template slot-scope="scope">
+                {{ scope.row.waitingAmount ? scope.row.waitingAmount.toFixed(2) : '0.00' }}
+              </template>
+            </el-table-column>
+            <el-table-column prop="unPassedOrders" label="未过数" width="80" align="center"></el-table-column>
+            <el-table-column prop="unPassedAmount" label="未过金额" width="100" align="center">
+              <template slot-scope="scope">
+                {{ scope.row.unpassedAmount ? scope.row.unpassedAmount.toFixed(2) : '0.00' }}
+              </template>
+            </el-table-column>
+            <el-table-column prop="cancelOrders" label="取消数" width="80" align="center"></el-table-column>
+            <el-table-column prop="cancelAmount" label="取消金额" width="100" align="center">
+              <template slot-scope="scope">
+                {{ scope.row.cancelAmount ? scope.row.cancelAmount.toFixed(2) : '0.00' }}
+              </template>
+            </el-table-column>
+            <el-table-column prop="unshippedOrders" label="成交未发货数" width="120" align="center"></el-table-column>
+            <el-table-column prop="unshippedAmount" label="成交未发货金额" width="130" align="center">
+              <template slot-scope="scope">
+                {{ scope.row.unshippedAmount ? scope.row.unshippedAmount.toFixed(2) : '0.00' }}
+              </template>
+            </el-table-column>
+            <el-table-column prop="shippedOrders" label="发货数" width="80" align="center"></el-table-column>
+            <el-table-column prop="shippedAmount" label="发货金额" width="100" align="center">
+              <template slot-scope="scope">
+                {{ scope.row.shippedAmount ? scope.row.shippedAmount.toFixed(2) : '0.00' }}
+              </template>
+            </el-table-column>
+            <el-table-column prop="transitOrders" label="在途数" width="80" align="center"></el-table-column>
+            <el-table-column prop="transitAmount" label="在途金额" width="100" align="center">
+              <template slot-scope="scope">
+                {{ scope.row.transitAmount ? scope.row.transitAmount.toFixed(2) : '0.00' }}
+              </template>
+            </el-table-column>
+            <el-table-column prop="receivedOrders" label="签收数" width="80" align="center"></el-table-column>
+            <el-table-column prop="receivedAmount" label="签收金额" width="100" align="center">
+              <template slot-scope="scope">
+                {{ scope.row.receivedAmount ? scope.row.receivedAmount.toFixed(2) : '0.00' }}
+              </template>
+            </el-table-column>
+            <el-table-column prop="returnOrders" label="退货数" width="80" align="center"></el-table-column>
+            <el-table-column prop="returnAmount" label="退货金额" width="100" align="center">
+              <template slot-scope="scope">
+                {{ scope.row.returnAmount ? scope.row.returnAmount.toFixed(2) : '0.00' }}
+              </template>
+            </el-table-column>
+            <el-table-column prop="paybackOrders" label="回款数" width="80" align="center"></el-table-column>
+            <el-table-column prop="paybackAmount" label="回款金额" width="100" align="center">
+              <template slot-scope="scope">
+                {{ scope.row.paybackAmount ? scope.row.paybackAmount.toFixed(2) : '0.00' }}
+              </template>
+            </el-table-column>
+          </el-table>
         </div>
       </div>
-
     </div>
+
+  </div>
 </template>
 
 <script>
-import { storeOrder,exportStoreOrder } from "@/api/store/statistics";
+import { storeOrder } from "@/api/store/statistics";
 import { getUserListByDeptId} from "@/api/company/companyUser";
-import echarts from 'echarts'
-import resize from '../../dashboard/mixins/resize'
+import echarts from 'echarts';
+import resize from '../../dashboard/mixins/resize';
 import { treeselect } from "@/api/company/companyDept";
 import Treeselect from "@riophae/vue-treeselect";
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
-
+import { getCompanyList } from "@/api/company/company";
 export default {
-name: 'Index',
-mixins: [resize],
-components: { Treeselect },
-watch: {
-// 监听deptId
-'deptId': 'currDeptChange'
-},
-data() {
-return {
- deptOptions:[],
- deptId:undefined,
- userIds:undefined,
- users:[],
- dateRange:[],
- chart: null,
- options: [{
-    value: '1',
-    label: '今天'
-  }, {
-    value: '2',
-    label: '昨天'
-  }, {
-    value: '3',
-    label: '本周'
-  }, {
-    value: '4',
-    label: '上周'
-  }, {
-    value: '5',
-    label: '本月'
-  }
-  , {
-    value: '6',
-    label: '上月'
-  }
-  , {
-    value: '7',
-    label: '本季度'
-  }
-  , {
-    value: '8',
-    label: '上季度'
-  }
-  , {
-    value: '9',
-    label: '本年'
-  }
-  , {
-    value: '10',
-    label: '上年'
-  }],
-  value: '5',
-  list:[],
-  dates:[],
-  orderCount:[],
-  payPrice:[],
-
-}
-},
-created() {
-this.getTreeselect();
-},
-methods: {
-  currDeptChange(val){
-  console.log(val)
-  this.deptId=val;
-  this.getUserListByDeptId();
-},
-/** 查询部门下拉树结构 */
-getTreeselect() {
-var that=this;
-treeselect().then((response) => {
-  this.deptOptions = response.data;
-  console.log(this.deptOptions)
-  if(response.data!=null&&response.data.length>0){
-    this.deptId=response.data[0].id;
-    that.storeOrder()
-  }
-});
-},
-handleExport(){
-  var data;
-  if(this.userIds!=undefined){
-      data={type:this.value,userIds:this.userIds+"",deptId:this.deptId}
-  }
-  else{
-      data={type:this.value,deptId:this.deptId}
-  }
-  exportStoreOrder(data).then((response) => {
-      console.log(response)
-     this.download(response.msg);
-  });
-
-},
-getUserListByDeptId() {
-  this.userIds=undefined;
-  var data={deptId:this.deptId};
-  getUserListByDeptId(data).then(response => {
-    this.users = response.data;
-
-  });
-},
-storeOrder(){
-    var data;
-    if(this.userIds!=undefined){
-        data={type:this.value,userIds:this.userIds+"",deptId:this.deptId}
+  name: 'Index',
+ mixins: [resize],
+  components: { Treeselect },
+  watch: {
+    // 监听deptId
+    'deptId': 'currDeptChange'
+  },
+  data() {
+    return {
+      companys: [],
+      deptOptions: [],
+      companyId: undefined,
+      deptId: undefined,
+      userIds: undefined,
+      users: [],
+      dateRange: [],
+      chart: null,
+      orderTypeOptions:[],// 订单类型
+      orderType:'',
+      orderMediumOptions:[], // 媒体来源
+      orderMedium:'',
+      options: [{
+        value: '1',
+        label: '今天'
+      }, {
+        value: '2',
+        label: '昨天'
+      }, {
+        value: '3',
+        label: '本周'
+      }, {
+        value: '4',
+        label: '上周'
+      }, {
+        value: '5',
+        label: '本月'
+      }, {
+        value: '6',
+        label: '上月'
+      }, {
+        value: '7',
+        label: '本季度'
+      }, {
+        value: '8',
+        label: '上季度'
+      }, {
+        value: '9',
+        label: '本年'
+      }, {
+        value: '10',
+        label: '上年'
+      }],
+      value: '5',
+      list: [],
+      dates: [],
+      orderCount: [],
+      payPrice: [],
+      // 新增表格数据
+      tableData: []
     }
-    else{
-        data={type:this.value,deptId:this.deptId}
-    }
-    storeOrder(data).then((response) => {
-     this.list=response.list;
-     this.dates=response.dates;
-     this.orderCount=response.orderCount;
-     this.payPrice=response.payPrice;
-      setTimeout(() => {
-        this.initEchart();
-      }, 500);
-  });
-},
-initEchart(){
-  var option = {
-    tooltip: {
-        trigger: 'axis',
-        axisPointer: {            // 坐标轴指示器,坐标轴触发有效
-            type: 'shadow'        // 默认为直线,可选为:'line' | 'shadow'
+  },
+  created() {
+    getCompanyList().then(response => {
+      this.companys = response.data;
+      if (this.companys != null && this.companys.length > 0) {
+        this.companyId = this.companys[0].companyId;
+        this.getTreeselect();
+      }
+    });
+    // 获取订单类型
+    this.getDicts("store_order_type").then((response) => {
+      this.orderTypeOptions = response.data;
+    });
+    // 媒体来源
+    this.getDicts("crm_customer_source").then((response) => {
+      this.orderMediumOptions = response.data;
+    });
+  },
+  methods: {
+    companyChange(val) {
+      console.log(val);
+      console.log("+++++++++++++++++++++++");
+      this.companyId = val;
+      this.getTreeselect();
+    },
+    currDeptChange(val) {
+      console.log(val)
+      this.deptId = val;
+      this.getUserListByDeptId();
+    },
+    /** 查询部门下拉树结构 */
+    getTreeselect() {
+      var that = this;
+      var param = { companyId: this.companyId }
+      treeselect(param).then((response) => {
+        this.deptOptions = response.data;
+        console.log(this.deptOptions)
+        if (response.data != null && response.data.length > 0) {
+          this.deptId = response.data[0].id;
+          that.storeOrder()
         }
+      });
     },
-    legend: {
-        data: ['订单数', '订单金额' ]
+    handleExport() {
+      var data;
+      if (this.userIds != undefined) {
+        data = { type: this.value, userIds: this.userIds + "", deptId: this.deptId }
+      }
+      else {
+        data = { type: this.value, deptId: this.deptId }
+      }
+      exportVoiceLogs(data).then((response) => {
+        console.log(response)
+        this.download(response.msg);
+      });
     },
-    grid: {
-        left: '3%',
-        right: '4%',
-        bottom: '3%',
-        containLabel: true
+    getUserListByDeptId() {
+      this.userIds = undefined;
+      var data = { deptId: this.deptId };
+      getUserListByDeptId(data).then(response => {
+        this.users = response.data;
+      });
     },
-    xAxis: [
-        {
+    storeOrder() {
+      var data;
+      if (this.userIds != undefined) {
+        data = { type: this.value, userIds: this.userIds + "", deptId: this.deptId }
+      }
+      else {
+        data = { type: this.value, deptId: this.deptId }
+      }
+      if(this.dateRange && this.dateRange.length>0){
+        data.type = null
+        data.startTime = this.dateRange[0]
+        data.endTime = this.dateRange[1]
+      }
+      if(this.orderType){
+        data.orderType = this.orderType
+      }
+      if(this.orderMedium){
+        data.orderMedium = this.orderMedium
+      }
+      storeOrder(data).then((response) => {
+        this.dates = response.dates;
+        this.orderCount = response.orderCount;
+        this.payPrice = response.payPrice;
+        //表格数据
+        this.tableData = response.tableData || this.tableData;
+        
+        setTimeout(() => {
+          this.initEchart();
+        }, 500);
+      });
+    },
+    initEchart() {
+      var option = {
+        tooltip: {
+          trigger: 'axis',
+          axisPointer: {
+            // 坐标轴指示器,坐标轴触发有效
+            type: 'shadow'        // 默认为直线,可选为:'line' | 'shadow'
+          }
+        },
+        legend: {
+          data: ['订单数', '订单金额']
+        },
+        grid: {
+          left: '3%',
+          right: '4%',
+          bottom: '3%',
+          containLabel: true
+        },
+        xAxis: [
+          {
             type: 'category',
             data: this.dates
-        }
-    ],
-    yAxis: [
-        {
+          }
+        ],
+        yAxis: [
+          {
             type: 'value',
-            axisLabel:{
-              formatter:'{value}'
+            axisLabel: {
+              formatter: '{value}'
             }
-        }
-    ],
-    series: [
-        {
-
+          }
+        ],
+        series: [
+          {
             name: '订单数',
             type: 'bar',
             emphasis: {
-                focus: 'series'
+              focus: 'series'
             },
             data: this.orderCount
-        },
-        {
-
+          },
+          {
             name: '订单金额',
             type: 'bar',
             emphasis: {
-                focus: 'series'
+              focus: 'series'
             },
             data: this.payPrice
-        }
+          }
+        ]
+      };
+      this.chart = echarts.init(document.getElementById("echart-customer"));
+      this.chart.setOption(option, true);
+    },
+    // 表格行样式
+    tableRowClassName({ row, rowIndex }) {
+      if (row.isGroup) {
+        return 'group-row';
+      }
+      return '';
+    },
+    // 表格合并方法(如果需要的话)
+    objectSpanMethod({ row, column, rowIndex, columnIndex }) {
+      // 可以在这里实现单元格合并逻辑
+      return {
+        rowspan: 1,
+        colspan: 1
+      };
+    }
+  }
+}
+</script>
 
-    ]
-  };
-  this.chart=echarts.init(document.getElementById("echart-customer"));
-  this.chart.setOption(option,true);
-},
- getSummaries(param) {
-  const { columns, data } = param;
-  const sums = [];
-  columns.forEach((column, index) => {
-    if (index === 0) {
-      sums[index] = '总计';
-      return;
+<style lang="scss" scoped>
+.app-container {
+  border: 1px solid #e6e6e6;
+  padding: 12px;
+  .app-content {
+    background-color: white;
+    .title {
+      padding: 20px 30px 0px 30px;
+      font-size: 18px;
+      font-weight: bold;
+      color: black;
+    }
+    .search-form {
+      margin: 20px 30px 0px 30px;
     }
-    const values = data.map(item => Number(item[column.property]));
-    if (!values.every(value => isNaN(value))) {
-      sums[index] = values.reduce((prev, curr) => {
-        const value = Number(curr);
-        if (!isNaN(value)) {
-          return prev + curr;
-        } else {
-          return prev;
+    .data-box {
+      padding: 30px;
+      background-color: rgb(255, 255, 255);
+      height: 100%;
+      .echart-box {
+        margin: 0 auto;
+        text-align: center;
+      }
+      .el-select {
+        margin: 5px 10px;
+      }
+      .table-box {
+        margin-top: 15px;
+        .export {
+          float: right;
+          margin: 10px 0px;
         }
-      }, 0);
-      sums[index] += ' ';
-    } else {
-      sums[index] = '';
+      }
+      // 新增表格样式
+      .table-container {
+        margin-top: 30px;
+        .table-title {
+          font-size: 16px;
+          font-weight: bold;
+          color: #333;
+          margin-bottom: 10px;
+        }
+      }
     }
-  });
-
-  return sums;
-}
+  }
 }
+
+#echart-customer {
+  width: 100%;
+  height: 320px
 }
-</script>
 
-<style lang="scss" scoped>
-.app-container{
-border: 1px solid #e6e6e6;
-padding: 12px;
+.vue-treeselect {
+  width: 217px;
+  height: 36px;
+}
 
-.app-content{
-background-color: white;
-.title{
-  padding: 20px 30px 0px 30px;
-  font-size: 18px;
+// 表格相关样式
+::v-deep .group-row {
+  background-color: #e8f5e8 !important;
   font-weight: bold;
-  color: black;
-
 }
-.search-form{
-  margin: 20px 30px 0px 30px;
+
+::v-deep .group-name {
+  font-weight: bold;
+  color: #333;
 }
-.data-box{
-  padding: 30px;
-  background-color:  rgb(255, 255, 255);
-  height: 100%;
 
-  .echart-box{
-    margin: 0 auto;
-    text-align: center;
-  }
-  .el-select{
-    margin: 5px 10px;
+::v-deep .el-table {
+  font-size: 12px;
+  
+  .el-table__header-wrapper {
+    th {
+      background-color: #f5f7fa;
+      font-weight: bold;
+      color: #333;
+    }
   }
-  .table-box{
-    margin-top: 15px;
-    .export{
-      float: right;
-      margin: 10px 0px;
+  
+  .el-table__body-wrapper {
+    td {
+      padding: 8px 0;
     }
   }
 }
-}
-}
-#echart-customer{
-width:100%;
-height:320px
-}
-.vue-treeselect{
-width: 217px;
-height: 36px;
+
+::v-deep .sticky-column {
+  position: sticky;
+  left: 0;
+  z-index: 2;
+  background-color: white;
+  
+  // 为表头也添加样式
+  &.is-header-column {
+    background-color: #f5f7fa;
+  }
 }
 
+// 确保表格容器允许sticky定位
+::v-deep .el-table__body-wrapper {
+  overflow-x: auto;
+}
 </style>
+
 <style>
-.vue-treeselect__control{
-display: block;
+.vue-treeselect__control {
+  display: block;
 }
-</style>
+</style>

+ 512 - 0
src/views/store/statistics/storeProduct.vue

@@ -0,0 +1,512 @@
+<template>
+  <div class="app-container">
+    <div class="app-content">
+      <div class="title">
+        产品销售统计
+      </div>
+      
+      <el-form class="search-form" :inline="true">
+        <el-row :gutter="20">
+          <el-col :span="6">
+            <el-form-item label="时间:">
+              <el-select v-model="value" placeholder="请选择日期">
+                <el-option
+                  v-for="item in options"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value">
+                </el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+             <el-form-item label="公司名:" prop="companyId">
+              <el-select filterable v-model="companyId" @change="companyChange" placeholder="请选择公司名" clearable size="small">
+                <el-option
+                  v-for="item in companys"
+                  :key="item.companyId"
+                  :label="item.companyName"
+                  :value="item.companyId"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="部门:">
+              <treeselect :clearable="false" v-model="deptId" :options="deptOptions" :show-count="true" placeholder="请选择归属部门" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item label="员工:">
+              <el-select filterable v-model="userIds" placeholder="请选择员工" clearable size="small">
+                <el-option
+                  v-for="item in users"
+                  :key="item.userId"
+                  :label="item.nickName"
+                  :value="item.userId">
+                </el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row> 
+        
+       
+        
+    
+        
+        
+        <el-form-item label="筛选日期" prop="createTime">
+          <el-date-picker clearable size="small" style="width: 205.4px"
+            v-model="dateRange"
+            type="daterange"
+            value-format="yyyy-MM-dd"
+            start-placeholder="开始日期" end-placeholder="结束日期">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item>
+          <el-button type="cyan" icon="el-icon-search" @click="storeProduct">搜索</el-button>
+        </el-form-item>
+      </el-form>
+      
+      <div class="data-box">
+        <div class="echart-box">
+          <div id="echart-customer"></div>
+        </div>
+        
+        <!-- 产品销售统计数据表格 -->
+        <div class="table-container">
+          <h3 class="table-title">产品销售汇总</h3>
+          <!-- <div class="export">
+            <el-button type="primary" @click="handleExport">导出数据</el-button>
+          </div> -->
+          <el-table 
+            :data="tableData"
+            border
+            stripe
+            style="width: 100%; margin-top: 20px;"
+            :row-class-name="tableRowClassName"
+            :span-method="objectSpanMethod">
+            
+            <!-- 产品名称列 -->
+            <el-table-column prop="name" label="产品名称" width="100" align="center" class-name="sticky-column">
+              <template slot-scope="scope">
+                <span :class="{'group-name': scope.row.isGroup}">{{ scope.row.name }}</span>
+              </template>
+            </el-table-column>
+            
+            <!-- 动态生成订单类型列 - 使用多级表头 -->
+            <el-table-column 
+              v-for="orderType in orderTypeOptions" 
+              :key="orderType.dictValue"
+              :label="orderType.dictLabel" 
+              align="center">
+              
+              <!-- 数量子列 -->
+              <el-table-column 
+                label="数量" 
+                width="60" 
+                align="center">
+                <template slot-scope="scope">
+                  {{ getOrderData(scope.row, orderType.dictValue, 'count') }}
+                </template>
+              </el-table-column>
+              
+              <!-- 金额子列 -->
+              <el-table-column 
+                label="金额" 
+                width="80" 
+                align="center">
+                <template slot-scope="scope">
+                  {{ getOrderData(scope.row, orderType.dictValue, 'amount') }}
+                </template>
+              </el-table-column>
+              
+            </el-table-column>
+            
+          </el-table>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import { storeProduct } from "@/api/store/statistics";
+import { getUserListByDeptId } from "@/api/company/companyUser";
+import echarts from 'echarts';
+import resize from '../../dashboard/mixins/resize';
+import { treeselect } from "@/api/company/companyDept";
+import Treeselect from "@riophae/vue-treeselect";
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+import { getCompanyList } from "@/api/company/company";
+
+export default {
+  name: 'ContentStatistics',
+  mixins: [resize],
+  components: { Treeselect },
+  watch: {
+    // 监听deptId
+    'deptId': 'currDeptChange'
+  },
+  data() {
+    return {
+      companys: [],
+      deptOptions: [],
+      companyId: undefined,
+      deptId: undefined,
+      userIds: undefined,
+      users: [],
+      dateRange: [],
+      chart: null,
+      options: [{
+        value: '1',
+        label: '今天'
+      }, {
+        value: '2',
+        label: '昨天'
+      }, {
+        value: '3',
+        label: '本周'
+      }, {
+        value: '4',
+        label: '上周'
+      }, {
+        value: '5',
+        label: '本月'
+      }, {
+        value: '6',
+        label: '上月'
+      }, {
+        value: '7',
+        label: '本季度'
+      }, {
+        value: '8',
+        label: '上季度'
+      }, {
+        value: '9',
+        label: '本年'
+      }, {
+        value: '10',
+        label: '上年'
+      }],
+      value: '5',
+      list: [],
+      dates: [],
+      orderCount: [], // 修改变量名
+      payPrice: [], // 修改变量名
+      // 订单类型选项 - 用作表头
+      orderTypeOptions: [],
+      // 产品销售统计表格数据
+      tableData: []
+    }
+  },
+  created() {
+    getCompanyList().then(response => {
+      this.companys = response.data;
+      if (this.companys != null && this.companys.length > 0) {
+        this.companyId = this.companys[0].companyId;
+        this.getTreeselect();
+      }
+    });
+    
+    // 获取订单类型字典
+    this.getDicts("store_order_type").then((response) => {
+      this.orderTypeOptions = response.data;
+    });
+  },
+  methods: {
+    companyChange(val) {
+      console.log(val);
+      this.companyId = val;
+      this.getTreeselect();
+    },
+    currDeptChange(val) {
+      console.log(val)
+      this.deptId = val;
+      this.getUserListByDeptId();
+    },
+    /** 查询部门下拉树结构 */
+    getTreeselect() {
+      var that = this;
+      var param = { companyId: this.companyId }
+      treeselect(param).then((response) => {
+        this.deptOptions = response.data;
+        console.log(this.deptOptions)
+        if (response.data != null && response.data.length > 0) {
+          this.deptId = response.data[0].id;
+          that.storeProduct()
+        }
+      });
+    },
+    handleExport() {
+      var data;
+      if (this.userIds != undefined) {
+        data = { type: this.value, userIds: this.userIds + "", deptId: this.deptId }
+      }
+      else {
+        data = { type: this.value, deptId: this.deptId }
+      }
+      // 导出产品销售统计数据
+      console.log('导出产品销售统计数据', data);
+    },
+    getUserListByDeptId() {
+      this.userIds = undefined;
+      var data = { deptId: this.deptId };
+      getUserListByDeptId(data).then(response => {
+        this.users = response.data;
+      });
+    },
+    storeProduct() {
+      var data;
+      if (this.userIds != undefined) {
+        data = { type: this.value, userIds: this.userIds + "", deptId: this.deptId }
+      }
+      else {
+        data = { type: this.value, deptId: this.deptId }
+      }
+      if(this.dateRange && this.dateRange.length > 0){
+        data.type = null
+        data.startTime = this.dateRange[0]
+        data.endTime = this.dateRange[1]
+      }
+      
+      storeProduct(data).then((response) => {
+        this.dates = response.dates;
+        this.orderCount = response.orderCount;
+        this.payPrice = response.payPrice;
+        
+        // 处理表格数据,补全缺失的订单类型数据
+        this.tableData = this.processTableData(response.tableData || []);
+        
+        setTimeout(() => {
+          this.initEchart();
+        }, 500);
+      });
+    },
+    
+    // 新增方法:处理表格数据,为每个产品补全所有订单类型的数据
+    processTableData(rawTableData) {
+      return rawTableData.map(item => {
+        // 创建一个新的 productCounts 对象,包含所有订单类型
+        const processedProductCounts = {};
+        
+        // 遍历所有订单类型选项,为每个类型设置默认值
+        this.orderTypeOptions.forEach(orderType => {
+          const dictValue = orderType.dictValue;
+          if (item.productCounts && item.productCounts[dictValue]) {
+            // 如果原数据中存在该订单类型的数据,使用原数据
+            processedProductCounts[dictValue] = item.productCounts[dictValue];
+          } else {
+            // 如果原数据中不存在该订单类型的数据,设置默认值
+            processedProductCounts[dictValue] = {
+              count: 0,
+              amount: 0.0
+            };
+          }
+        });
+        
+        return {
+          ...item,
+          productCounts: processedProductCounts
+        };
+      });
+    },
+    
+    initEchart() {
+      var option = {
+        tooltip: {
+          trigger: 'axis',
+          axisPointer: {
+            type: 'shadow'
+          }
+        },
+        legend: {
+          data: ['订单数量', '金额']
+        },
+        grid: {
+          left: '3%',
+          right: '4%',
+          bottom: '3%',
+          containLabel: true
+        },
+        xAxis: [
+          {
+            type: 'category',
+            data: this.dates
+          }
+        ],
+        yAxis: [
+          {
+            type: 'value',
+            axisLabel: {
+              formatter: '{value}'
+            }
+          }
+        ],
+        series: [
+          {
+            name: '订单数量',
+            type: 'bar',
+            emphasis: {
+              focus: 'series'
+            },
+            data: this.orderCount // 修改为正确的变量名
+          },
+          {
+            name: '金额',
+            type: 'bar',
+            emphasis: {
+              focus: 'series'
+            },
+            data: this.payPrice // 修改为正确的变量名
+          }
+        ]
+      };
+      this.chart = echarts.init(document.getElementById("echart-customer"));
+      this.chart.setOption(option, true);
+    },
+    
+    // 修改获取订单数据的方法,适配新的数据结构
+    getOrderData(row, orderType, dataType) {
+      // 使用 productCounts 而不是 orderData
+      if (row.productCounts && row.productCounts[orderType]) {
+        const value = row.productCounts[orderType][dataType] || 0;
+        if (dataType === 'amount') {
+          return value.toFixed(2);
+        }
+        return value;
+      }
+      return dataType === 'amount' ? '0.00' : 0;
+    },
+    
+    // 表格行样式
+    tableRowClassName({ row, rowIndex }) {
+      if (row.isGroup) {
+        return 'group-row';
+      }
+      return '';
+    },
+    // 表格合并方法
+    objectSpanMethod({ row, column, rowIndex, columnIndex }) {
+      return {
+        rowspan: 1,
+        colspan: 1
+      };
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.app-container {
+  border: 1px solid #e6e6e6;
+  padding: 12px;
+  .app-content {
+    background-color: white;
+    .title {
+      padding: 20px 30px 0px 30px;
+      font-size: 18px;
+      font-weight: bold;
+      color: black;
+    }
+    .search-form {
+      margin: 20px 30px 0px 30px;
+    }
+    .data-box {
+      padding: 30px;
+      background-color: rgb(255, 255, 255);
+      height: 100%;
+      .echart-box {
+        margin: 0 auto;
+        text-align: center;
+      }
+      .el-select {
+        margin: 5px 10px;
+      }
+      .table-box {
+        margin-top: 15px;
+        .export {
+          float: right;
+          margin: 10px 0px;
+        }
+      }
+      // 表格样式
+      .table-container {
+        margin-top: 30px;
+        .table-title {
+          font-size: 16px;
+          font-weight: bold;
+          color: #333;
+          margin-bottom: 10px;
+        }
+        .export {
+          float: right;
+          margin: 10px 0px;
+        }
+      }
+    }
+  }
+}
+
+#echart-customer {
+  width: 100%;
+  height: 320px;
+}
+
+.vue-treeselect {
+  width: 217px;
+  height: 36px;
+}
+
+// 表格相关样式
+::v-deep .group-row {
+  background-color: #e8f5e8 !important;
+  font-weight: bold;
+}
+
+::v-deep .group-name {
+  font-weight: bold;
+  color: #333;
+}
+
+::v-deep .el-table {
+  font-size: 12px;
+  
+  .el-table__header-wrapper {
+    th {
+      background-color: #f5f7fa;
+      font-weight: bold;
+      color: #333;
+    }
+  }
+  
+  .el-table__body-wrapper {
+    td {
+      padding: 8px 0;
+    }
+  }
+}
+
+::v-deep .sticky-column {
+  position: sticky;
+  left: 0;
+  z-index: 2;
+  background-color: white;
+  
+  // 为表头也添加样式
+  &.is-header-column {
+    background-color: #f5f7fa;
+  }
+}
+
+// 确保表格容器允许sticky定位
+::v-deep .el-table__body-wrapper {
+  overflow-x: auto;
+}
+</style>
+
+<style>
+.vue-treeselect__control {
+  display: block;
+}
+</style>

+ 25 - 3
src/views/store/storeOrder/list.vue

@@ -133,6 +133,27 @@
               end-placeholder="结束日期">
             </el-date-picker>
           </el-form-item>
+          <!-- 添加实收金额查询条件 -->
+          <el-form-item label="实收金额" prop="payPrice">
+            <el-input
+            style="width:220px"
+              v-model="queryParams.payPrice"
+              placeholder="请输入实收金额"
+              clearable
+              size="small"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+          <el-form-item label="媒体来源">
+            <el-select v-model="queryParams.orderMedium" placeholder="请选择媒体来源" clearable size="small">
+              <el-option
+                v-for="item in orderMediumOptions"
+                :key="item.dictLabel"
+                :label="item.dictLabel"
+                :value="item.dictValue">
+              </el-option>
+            </el-select>
+          </el-form-item>
           <el-form-item label="回单时间" prop="deliveryImportTimeRange">
             <el-date-picker
             style="width:220px"
@@ -231,7 +252,7 @@
                   <span v-if="scope.row.totalPrice!=null">{{scope.row.totalPrice.toFixed(2)}}</span>
               </template>
           </el-table-column>
-          <el-table-column label="应付金额" align="center" prop="payPrice" >
+          <el-table-column label="实收金额" align="center" prop="payPrice" >
               <template slot-scope="scope">
                   <span v-if="scope.row.payPrice!=null">{{scope.row.payPrice.toFixed(2)}}</span>
               </template>
@@ -498,7 +519,7 @@ export default {
       deliveryPayStatusOptions:[],
       deliveryStatusOptions:[],
       dateRange: [],
-      orderMediumOptions:[],
+      orderMediumOptions:[], // 媒体来源
       orderTypeOptions:[],
       payTypeOptions:[],
       payQr:{
@@ -603,7 +624,8 @@ export default {
         shippingType: null,
         isChannel: null,
         isRemind: null,
-        isSysDel: null
+        isSysDel: null,
+        orderMedium:null
       },
       // 表单参数
       form: {

+ 73 - 2
src/views/store/storeOrder/myList.vue

@@ -77,6 +77,18 @@
               />
         </el-select>
       </el-form-item>
+      <!-- 审核状态 -->
+      <el-form-item label="审核状态" prop="auditStatus">
+         <el-select style="width:220px" v-model="queryParams.auditStatus" placeholder="请选择审核状态" clearable size="small" >
+         <el-option
+                v-for="item in auditStatusOptions"
+                :key="item.dictValue"
+                :label="item.dictLabel"
+                :value="item.dictValue"
+         />
+         </el-select>
+      </el-form-item>
+
       <el-form-item label="下单时间" prop="createTimeRange">
         <el-date-picker
         style="width:220px"
@@ -99,6 +111,27 @@
           end-placeholder="结束日期">
         </el-date-picker>
       </el-form-item>
+      <!-- 添加实收金额查询条件 -->
+      <el-form-item label="实收金额" prop="payPrice">
+        <el-input
+        style="width:220px"
+          v-model="queryParams.payPrice"
+          placeholder="请输入实收金额"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="媒体来源">
+        <el-select v-model="queryParams.orderMedium" placeholder="请选择媒体来源" clearable size="small">
+          <el-option
+            v-for="item in orderMediumOptions"
+            :key="item.dictLabel"
+            :label="item.dictLabel"
+            :value="item.dictValue">
+          </el-option>
+        </el-select>
+      </el-form-item>
       <el-form-item label="回单时间" prop="deliveryImportTimeRange">
         <el-date-picker
         style="width:220px"
@@ -179,7 +212,7 @@
               <span v-if="scope.row.totalPrice!=null">{{scope.row.totalPrice.toFixed(2)}}</span>
           </template>
       </el-table-column>
-       <el-table-column label="应付金额" align="center" prop="payPrice" >
+       <el-table-column label="实收金额" align="center" prop="payPrice" >
           <template slot-scope="scope">
               <span v-if="scope.row.payPrice!=null">{{scope.row.payPrice.toFixed(2)}}</span>
           </template>
@@ -198,11 +231,22 @@
               <el-tag prop="status" v-for="(item, index) in orderTypeOptions"    v-if="scope.row.orderType==item.dictValue">{{item.dictLabel}}</el-tag>
           </template>
       </el-table-column>
+      <el-table-column label="媒体来源" align="center" prop="orderMedium" >
+        <template slot-scope="scope">
+            <el-tag prop="orderMedium" v-for="(item, index) in orderMediumOptions"    v-if="scope.row.orderMedium==item.dictValue">{{item.dictLabel}}</el-tag>
+        </template>
+      </el-table-column>
       <el-table-column label="状态" align="center" prop="status" >
           <template slot-scope="scope">
               <el-tag prop="status" v-for="(item, index) in statusOptions"    v-if="scope.row.status==item.dictValue">{{item.dictLabel}}</el-tag>
           </template>
       </el-table-column>
+      <!-- 审核状态 -->
+      <el-table-column label="审核状态" align="center" prop="auditStatus" >
+          <template slot-scope="scope">
+              <el-tag prop="status" v-for="(item, index) in auditStatusOptions"    v-if="scope.row.auditStatus==item.dictValue">{{item.dictLabel}}</el-tag>
+          </template>
+      </el-table-column>
       <el-table-column label="物流状态" align="center" prop="deliveryStatus" >
           <template slot-scope="scope">
               <el-tag prop="status" v-for="(item, index) in deliveryStatusOptions"    v-if="scope.row.deliveryStatus==item.dictValue">{{item.dictLabel}}</el-tag>
@@ -213,6 +257,9 @@
               <el-tag prop="status" v-for="(item, index) in deliveryPayStatusOptions"    v-if="scope.row.deliveryPayStatus==item.dictValue">{{item.dictLabel}}</el-tag>
           </template>
       </el-table-column>
+      <!-- 发货时间deliverySendTime -->
+      <el-table-column label="发货时间" align="center" prop="deliverySendTime" width="180">
+      </el-table-column>
       <el-table-column label="操作" fixed="right" width="100px" align="center" class-name="small-padding fixed-width">
         <template slot-scope="scope">
           <el-button
@@ -263,11 +310,29 @@ export default {
   name: "StoreOrder",
   data() {
     return {
+      auditStatusOptions : [
+      {
+        dictLabel: "待审批",
+        dictValue: 0,
+        type: ''
+      },
+      {
+        dictLabel: "审批拒绝",
+        dictValue: 1,
+        type: 'danger'
+      },
+      {
+        dictLabel: "审核通过",
+        dictValue: 4,
+        type: 'success'
+      }
+      ],
       deliveryPayStatusOptions:[],
       deliveryStatusOptions:[],
       dateRange: [],
       orderTypeOptions:[],
       payTypeOptions:[],
+      orderMediumOptions:[], // 媒体来源
       payQr:{
         open:false,
         title:"付款二维码"
@@ -369,7 +434,9 @@ export default {
         shippingType: null,
         isChannel: null,
         isRemind: null,
-        isSysDel: null
+        isSysDel: null,
+        orderMedium:'',
+        auditStatus:null, // 审批状态
       },
       // 表单参数
       form: {
@@ -412,6 +479,10 @@ export default {
     this.getDicts("store_delivery_pay_status").then((response) => {
       this.deliveryPayStatusOptions = response.data;
     });
+      // 媒体来源
+    this.getDicts("crm_customer_source").then((response) => {
+      this.orderMediumOptions = response.data;
+    });
     
     this.getList();
   },

+ 274 - 39
src/views/store/storeOrderAudit/index.vue

@@ -1,34 +1,166 @@
 <template>
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
-      <el-form-item label="所属员工" prop="companyUserName">
-        <el-input
-          v-model="queryParams.companyUserName"
-          placeholder="请输入所属员工昵称"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
+      <el-row :gutter="20">
+        <el-col :span="6">
+          <el-form-item label="所属员工" prop="companyUserName">
+            <el-input
+              v-model="queryParams.companyUserName"
+              placeholder="请输入所属员工昵称"
+              clearable
+              size="small"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="6">
+          <el-form-item label="收件人" prop="realName">
+            <el-input
+            style="width:220px"
+              v-model="queryParams.realName"
+              placeholder="请输入收件人"
+              clearable
+              size="small"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="6">
+          <el-form-item label="手机号" prop="userPhone">
+            <el-input
+            style="width:220px"
+              v-model="queryParams.userPhone"
+              placeholder="请输入收件人手机号"
+              clearable
+              size="small"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="6">
+          <el-form-item label="创建时间" prop="createTimeRange">
+            <el-date-picker
+            style="width:220px"
+              clearable size="small"
+              v-model="createTimeRange"
+              type="daterange"
+              value-format="yyyy-MM-dd"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期">
+            </el-date-picker>
+          </el-form-item>
+        </el-col>
+
+      </el-row>
+
+       <el-row :gutter="20">
+        <el-col :span="6">
+          <el-form-item label="订单金额" prop="orderAmountRange">
+            <el-input
+            style="width:100px"
+              v-model="queryParams.orderAmountSmall"
+              placeholder="请输入订单金额"
+              clearable
+              size="small"
+              @keyup.enter.native="handleQuery"
+            />
+            <span>-</span>
+            <el-input
+            style="width:100px"
+              v-model="queryParams.orderAmountBig"
+              placeholder="请输入订单金额"
+              clearable
+              size="small"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="6">
+          <el-form-item label="订单类型" prop="orderType">
+            <el-select style="width:220px"  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-col>
+        <el-col :span="6">
+          <el-form-item label="审核时间" prop="auditRange">
+            <el-date-picker
+            style="width:220px"
+              clearable size="small"
+              v-model="auditRange"
+              type="daterange"
+              value-format="yyyy-MM-dd"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期">
+            </el-date-picker>
+          </el-form-item>
+        </el-col>
+        <el-col :span="6">
+          
+        </el-col>
+
+      </el-row>
+      
+      
+      
+      
+      <!-- 订单金额 范围两个输入 -->
+      
       <el-form-item>
         <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
       </el-form-item>
     </el-form>
 
-    <el-tabs type="card" v-model="activeName" @tab-click="handleClick">
-      <el-tab-pane label="全部" name="00"></el-tab-pane>
-      <el-tab-pane label="待销售审批" name="0"></el-tab-pane>
-      <el-tab-pane label="销售审批拒绝" name="1"></el-tab-pane>
-      <el-tab-pane label="待总后台审核" name="2"></el-tab-pane>
-      <el-tab-pane label="总后台审核拒绝" name="3"></el-tab-pane>
-      <el-tab-pane label="审核通过" name="4"></el-tab-pane>
-    </el-tabs>
-    <el-table height="500" border v-loading="loading" :data="storeOrderAuditList" :key="tableKey">
-      <el-table-column label="订单号" align="center" prop="orderCode" width="200" />
+    <!-- 使用 el-row 布局将 tabs 和 批量操作按钮放在同一行 -->
+    <el-row :gutter="10" style="margin-bottom: 10px;">
+      <el-col :span="16">
+        <el-tabs type="card" v-model="activeName" @tab-click="handleClick">
+          <el-tab-pane label="全部" name="00"></el-tab-pane>
+          <el-tab-pane label="待审批" name="0"></el-tab-pane>
+          <el-tab-pane label="审批拒绝" name="1"></el-tab-pane>
+          <!-- <el-tab-pane label="待总后台审核" name="2"></el-tab-pane>
+          <el-tab-pane label="总后台审核拒绝" name="3"></el-tab-pane> -->
+          <el-tab-pane label="审核通过" name="4"></el-tab-pane>
+        </el-tabs>
+      </el-col>
+      <el-col :span="8" style="text-align: right;">
+        <div style="margin-top: 5px;">
+          <el-button 
+            type="primary" 
+            icon="el-icon-check" 
+            size="mini" 
+            :disabled="selectedRows.length === 0"
+            @click="handleBatchAudit"
+            v-hasPermi="['store:storeOrderAudit:audit']"
+          >
+            批量审核
+          </el-button>
+          <span style="margin-left: 10px; color: #999;">
+            已选择 {{ selectedRows.length }} 项
+          </span>
+        </div>
+      </el-col>
+    </el-row>
+
+    <el-table height="500" 
+    border 
+    v-loading="loading" 
+    :data="storeOrderAuditList" 
+    :key="tableKey"
+    class="scrollable-table"
+    @selection-change="handleSelectionChange"
+    >
+      <el-table-column type="selection" width="55" fixed="left"></el-table-column>
+      <el-table-column label="订单号" align="center" prop="orderCode" width="200" fixed="left" />
       <el-table-column label="所属公司" align="center" prop="companyName" />
       <el-table-column label="所属员工" align="center" prop="companyUserName" />
-      <el-table-column label="审核状态" align="center" prop="status" >
+      <el-table-column label="审核状态" align="center" prop="status" width="150">
         <template slot-scope="scope">
           <el-tag prop="status" v-for="item in statusOptions"
                   :type="item.type"
@@ -37,12 +169,31 @@
           </el-tag>
         </template>
       </el-table-column>
-      <el-table-column label="销售审核时间" align="center" prop="companyAuditTime" />
-      <el-table-column label="销售审核人" align="center" prop="companyAuditUserName" />
-      <el-table-column label="总后台审核时间" align="center" prop="adminAuditTime" />
-      <el-table-column label="总后台审核人" align="center" prop="adminAuditUserName" />
+      <el-table-column label="订单类型" align="center" prop="orderType" width="150" >
+          <template slot-scope="scope">
+              <el-tag prop="status" v-for="(item, index) in orderTypeOptions"    v-if="scope.row.orderType==item.dictValue">{{item.dictLabel}}</el-tag>
+          </template>
+      </el-table-column>
+      <el-table-column label="收件人" align="center" prop="realName" />
+      <el-table-column label="送货地址" align="center" prop="userAddress" show-overflow-tooltip/>
+      <el-table-column label="实收金额" align="center" prop="payPrice">
+        <template slot-scope="scope">
+          {{ scope.row.payPrice ? parseFloat(scope.row.payPrice).toFixed(2) : '0.00' }}
+        </template>
+      </el-table-column>
+      <el-table-column label="订单金额" align="center" prop="totalPrice">
+        <template slot-scope="scope">
+          {{ scope.row.totalPrice ? parseFloat(scope.row.totalPrice).toFixed(2) : '0.00' }}
+        </template>
+      </el-table-column>
+      <el-table-column label="手机号" align="center" prop="userPhone"  width="150"/>
+      <el-table-column label="审核时间" align="center" prop="companyAuditTime"  width="180"/>
+      <el-table-column label="审核人" align="center" prop="companyAuditUserName" />
+      <!-- <el-table-column label="总后台审核时间" align="center" prop="adminAuditTime" />
+      <el-table-column label="总后台审核人" align="center" prop="adminAuditUserName" /> -->
       <el-table-column label="被拒原因" align="center" prop="reason" show-overflow-tooltip />
-      <el-table-column label="提交时间" align="center" prop="createTime" />
+      <!-- <el-table-column label="提交时间" align="center" prop="createTime" /> -->
+      <el-table-column label="创建时间" align="center" prop="orderCreateTime" width="180"/>
       <el-table-column label="操作" fixed="right" align="center" width="80" class-name="small-padding fixed-width">
         <template slot-scope="scope">
           <el-popover
@@ -86,37 +237,42 @@
         <el-button @click="cancelAudit">关闭</el-button>
       </div>
     </el-dialog>
+
+    <!-- 添加批量审核确认对话框 -->
+    <el-dialog 
+      title="批量审核确认" 
+      :visible.sync="batchAuditDialogVisible" 
+      width="500px" 
+      append-to-body
+    >
+      <p>确定要审核通过选中的 {{ selectedRows.length }} 个订单吗?</p>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="batchAuditDialogVisible = false">取 消</el-button>
+        <el-button type="primary" @click="confirmBatchAudit"
+        v-hasPermi="['store:storeOrderAudit:auditBatch']">确 定</el-button>
+      </div>
+    </el-dialog>
   </div>
 </template>
 
 <script>
 import { getCompanyList } from "@/api/company/company";
-import {list, audit} from "@/api/store/storeOrderAudit";
+import {list, audit,auditBatch} from "@/api/store/storeOrderAudit";
 
 export default {
   name: "StoreOrderAudit",
   data() {
     const statusOptions = [
       {
-        dictLabel: "待销售审批",
+        dictLabel: "待审批",
         dictValue: 0,
         type: ''
       },
       {
-        dictLabel: "销售审批拒绝",
+        dictLabel: "审批拒绝",
         dictValue: 1,
         type: 'danger'
       },
-      {
-        dictLabel: "待总后台审核",
-        dictValue: 2,
-        type: ''
-      },
-      {
-        dictLabel: "总后台审核拒绝",
-        dictValue: 3,
-        type: 'danger'
-      },
       {
         dictLabel: "审核通过",
         dictValue: 4,
@@ -125,6 +281,7 @@ export default {
     ]
 
     return {
+      
       tableKey: 0,
       showSearch: true,
       companys: [],
@@ -133,8 +290,22 @@ export default {
         pageNum: 1,
         pageSize: 10,
         companyUserName: null,
-        auditStatus: null
+        auditStatus: null,
+        realName:null,
+        userPhone: null,
+        orderAmountSmall: null,
+        orderAmountBig: null,
+        beginTime:null,// 审单日期
+        endTime:null,
+        orderType: null,
+        auditBeginTime:null,
+        auditEndTime:null,
       },
+      selectedRows: [], // 添加这行来存储选中的行
+       batchAuditDialogVisible: false, // 批量审核对话框显示控制
+      createTimeRange:[],
+      auditRange:[], // 审核时间
+      orderTypeOptions:[], // 订单类型
       activeName: '00',
       loading: false,
       storeOrderAuditList: [],
@@ -157,6 +328,9 @@ export default {
     }
   },
   created() {
+    this.getDicts("store_order_type").then((response) => {
+      this.orderTypeOptions = response.data;
+    });
     this.getCompanyOptions()
     this.handleQuery()
   },
@@ -164,6 +338,38 @@ export default {
     this.tableKey = Date.now()
   },
   methods: {
+    // 确认批量审核
+    confirmBatchAudit() {
+      // 这里需要调用批量审核接口,假设有一个批量审核的API
+      
+        const ids = this.selectedRows.map(item => item.id).join(",");
+  
+      // 示例:调用批量审核API
+      auditBatch({ids}).then(response => {
+        this.$message.success("批量审核完成");
+        this.batchAuditDialogVisible = false;
+        this.getList(); // 刷新列表
+      }).catch(error => {
+        this.$message.error("批量审核失败");
+      });
+      
+      // 由于没有提供批量审核API,这里只是演示逻辑
+      console.log("批量审核订单IDs:", auditIds);
+      this.batchAuditDialogVisible = false;
+      this.getList(); // 实际使用时需要刷新列表
+    },
+     // 批量审核处理
+    handleBatchAudit() {
+      if (this.selectedRows.length === 0) {
+        this.$message.warning("请至少选择一条数据");
+        return;
+      }
+      this.batchAuditDialogVisible = true;
+    },
+    // 多选
+    handleSelectionChange(selection) {
+      this.selectedRows = selection;
+    },
     getCompanyOptions() {
       getCompanyList().then(response => {
         this.companys = response.data
@@ -174,11 +380,27 @@ export default {
       this.getList()
     },
     resetQuery() {
+      // 手动重置时间范围
+      this.createTimeRange = [];
+      this.queryParams.beginTime = null;
+      this.queryParams.endTime = null;
+      
+      // 手动重置订单金额范围
+      this.queryParams.orderAmountSmall = null;
+      this.queryParams.orderAmountBig = null;
       this.resetForm("queryForm");
       this.handleQuery();
     },
     getList() {
       this.loading = true
+      if(this.createTimeRange!=null&&this.createTimeRange.length==2){
+        this.queryParams.beginTime=this.createTimeRange[0]
+        this.queryParams.endTime=this.createTimeRange[1]
+      }
+      if(this.auditRange!=null&&this.auditRange.length==2){
+        this.queryParams.auditBeginTime=this.auditRange[0]
+        this.queryParams.auditEndTime=this.auditRange[1]
+      }
       list(this.queryParams).then(response => {
         const {rows, total} = response
         this.storeOrderAuditList = rows
@@ -236,5 +458,18 @@ export default {
 </script>
 
 <style scoped>
+.scrollable-table {
+  display: block;
+  width: 100%;
+}
+
+.scrollable-table ::v-deep .el-table__body-wrapper {
+  overflow-x: auto;
+  overflow-y: auto;
+}
 
+.scrollable-table ::v-deep .el-table__header-wrapper {
+  overflow-x: auto;
+  overflow-y: hidden;
+}
 </style>