Browse Source

修改bug

Qukatie 3 years ago
parent
commit
5bf0908281

+ 13 - 0
src/api/basicData/salesOrder.js

@@ -65,3 +65,16 @@ export const getGoodsList = (current, size, params) => {
       }
   })
 }
+export const getCorpType = (data) => {
+  return request({
+    url: '/api/blade-client/corpstype/tree',
+    method: 'get',
+    params:data
+  })
+}
+export function getAllgoodstype() {
+  return request({
+    url: '/api/blade-client/goodsdesc/descListAll',
+    method: 'get',
+  })
+}

+ 13 - 0
src/api/statisticAnalysis/AmtAmount.js

@@ -0,0 +1,13 @@
+import request from '@/router/axios';
+
+export const getList = (current, size, params) => {
+  return request({
+    url: '/api/blade-purchase-sales/exportOrder/totalSummary',
+    method: 'get',
+    params: {
+      ...params,
+      current,
+      size
+    }
+  })
+}

+ 13 - 0
src/api/statisticAnalysis/brandProfit.js

@@ -0,0 +1,13 @@
+import request from '@/router/axios';
+
+export const getList = (current, size, params) => {
+  return request({
+    url: '/api/blade-purchase-sales/exportOrder/brandProfit',
+    method: 'get',
+    params: {
+      ...params,
+      current,
+      size
+    }
+  })
+}

+ 13 - 0
src/api/statisticAnalysis/customerDelivery.js

@@ -0,0 +1,13 @@
+import request from '@/router/axios';
+
+export const getList = (current, size, params) => {
+  return request({
+    url: '/api/blade-purchase-sales/exportOrder/corpStatistics',
+    method: 'get',
+    params: {
+      ...params,
+      current,
+      size
+    }
+  })
+}

+ 13 - 0
src/api/statisticAnalysis/customerProfit.js

@@ -0,0 +1,13 @@
+import request from '@/router/axios';
+
+export const getList = (current, size, params) => {
+  return request({
+    url: '/api/blade-purchase-sales/exportOrder/customerProfit',
+    method: 'get',
+    params: {
+      ...params,
+      current,
+      size
+    }
+  })
+}

+ 13 - 0
src/api/statisticAnalysis/salesmanDelivery.js

@@ -0,0 +1,13 @@
+import request from '@/router/axios';
+
+export const getList = (current, size, params) => {
+  return request({
+    url: '/api/blade-purchase-sales/exportOrder/salesmanStatistics',
+    method: 'get',
+    params: {
+      ...params,
+      current,
+      size
+    }
+  })
+}

+ 13 - 0
src/api/statisticAnalysis/salesmanProfit.js

@@ -0,0 +1,13 @@
+import request from '@/router/axios';
+
+export const getList = (current, size, params) => {
+  return request({
+    url: '/api/blade-purchase-sales/exportOrder/salesmanProfit',
+    method: 'get',
+    params: {
+      ...params,
+      current,
+      size
+    }
+  })
+}

+ 13 - 0
src/api/statisticAnalysis/specificationsDelivery.js

@@ -0,0 +1,13 @@
+import request from '@/router/axios';
+
+export const getList = (current, size, params) => {
+  return request({
+    url: '/api/blade-purchase-sales/exportOrder/specificationsProfit',
+    method: 'get',
+    params: {
+      ...params,
+      current,
+      size
+    }
+  })
+}

+ 1 - 1
src/components/selectComponent/userSelect.vue

@@ -47,7 +47,7 @@
         <div class="box">
           <el-scrollbar>
             <basic-container>
-              <avue-tree :option="treeOption" :data="treeData" @node-click="nodeClick"/>
+              <avue-tree :option="treeOption" :data="treeData" @node-click="nodeClick" style="height: 40vh;"/>
             </basic-container>
           </el-scrollbar>
         </div>

+ 21 - 0
src/enums/column-name.js

@@ -931,6 +931,27 @@ const columnName = [{
 },{
   code: 224,
   name: '配件系统-收费明细'
+},{
+  code: 225,
+  name: '内贸-数量金额汇总'
+},{
+  code: 226,
+  name: '内贸-发货客户统计'
+},{
+  code: 227,
+  name: '内贸-发货业务员统计'
+},{
+  code: 228,
+  name: '内贸-业务员利润统计'
+},{
+  code: 229,
+  name: '内贸-品牌利润对比统计'
+},{
+  code: 230,
+  name: '内贸-发货规格统计'
+},{
+  code: 231,
+  name: '内贸-客户利润统计'
 }
 ]
 export const getColumnName = (key) => {

+ 163 - 72
src/router/views/index.js

@@ -1870,82 +1870,173 @@ export default [{
     component: () => import( /* webpackChunkName: "views" */ '@/views/InventoryManagement/inventoryAccount/index')
   }]
 }, {
+  path: '/salesManagement/outStock/index',
+  component: Layout,
+  hidden: true,
+  children: [{
     path: '/salesManagement/outStock/index',
-    component: Layout,
-    hidden: true,
-    children: [{
-      path: '/salesManagement/outStock/index',
-      name: '出库管理',
-      meta: {
-        i18n: '/salesManagement/outStock/index',
-        keepAlive: true,
-      },
-      component: () => import( /* webpackChunkName: "views" */ '@/views/salesManagement/outStock/index')
-    }]
-  }, {
+    name: '出库管理',
+    meta: {
+      i18n: '/salesManagement/outStock/index',
+      keepAlive: true,
+    },
+    component: () => import( /* webpackChunkName: "views" */ '@/views/salesManagement/outStock/index')
+  }]
+}, {
+  path: '/client/index',
+  component: Layout,
+  hidden: true,
+  children: [{
     path: '/client/index',
-    component: Layout,
-    hidden: true,
-    children: [{
-      path: '/client/index',
-      name: '客户(Y)',
-      meta: {
-        i18n: '/client/index',
-        keepAlive: true,
-      },
-      component: () => import( /* webpackChunkName: "views" */ '@/views/client/index')
-    }]
-  }, {
+    name: '客户(Y)',
+    meta: {
+      i18n: '/client/index',
+      keepAlive: true,
+    },
+    component: () => import( /* webpackChunkName: "views" */ '@/views/client/index')
+  }]
+}, {
+  path: '/client/index',
+  component: Layout,
+  hidden: true,
+  children: [{
     path: '/client/index',
-    component: Layout,
-    hidden: true,
-    children: [{
-      path: '/client/index',
-      name: '客户(Y)',
-      meta: {
-        i18n: '/client/index',
-        keepAlive: true,
-      },
-      component: () => import( /* webpackChunkName: "views" */ '@/views/client/index')
-    }]
-  }, {
+    name: '客户(Y)',
+    meta: {
+      i18n: '/client/index',
+      keepAlive: true,
+    },
+    component: () => import( /* webpackChunkName: "views" */ '@/views/client/index')
+  }]
+}, {
+  path: '/salesOrder/index',
+  component: Layout,
+  hidden: true,
+  children: [{
     path: '/salesOrder/index',
-    component: Layout,
-    hidden: true,
-    children: [{
-      path: '/salesOrder/index',
-      name: '销售单',
-      meta: {
-        i18n: '/salesOrder/index',
-        keepAlive: true,
-      },
-      component: () => import( /* webpackChunkName: "views" */ '@/views/salesOrder/index')
-    }]
-  }, {
+    name: '销售单',
+    meta: {
+      i18n: '/salesOrder/index',
+      keepAlive: true,
+    },
+    component: () => import( /* webpackChunkName: "views" */ '@/views/salesOrder/index')
+  }]
+}, {
+  path: '/product/index',
+  component: Layout,
+  hidden: true,
+  children: [{
     path: '/product/index',
-    component: Layout,
-    hidden: true,
-    children: [{
-      path: '/product/index',
-      name: '产品',
-      meta: {
-        i18n: '/product/index',
-        keepAlive: true,
-      },
-      component: () => import( /* webpackChunkName: "views" */ '@/views/product/index')
-    }]
-  }, {
+    name: '产品',
+    meta: {
+      i18n: '/product/index',
+      keepAlive: true,
+    },
+    component: () => import( /* webpackChunkName: "views" */ '@/views/product/index')
+  }]
+}, {
+  path: '/Inventory/index',
+  component: Layout,
+  hidden: true,
+  children: [{
     path: '/Inventory/index',
-    component: Layout,
-    hidden: true,
-    children: [{
-      path: '/Inventory/index',
-      name: '库存',
-      meta: {
-        i18n: '/Inventory/index',
-        keepAlive: true,
-      },
-      component: () => import( /* webpackChunkName: "views" */ '@/views/Inventory/index')
-    }]
-  }
+    name: '库存',
+    meta: {
+      i18n: '/Inventory/index',
+      keepAlive: true,
+    },
+    component: () => import( /* webpackChunkName: "views" */ '@/views/Inventory/index')
+  }]
+}, {
+  path: '/statisticAnalysis/AmtAmount/index',
+  component: Layout,
+  hidden: true,
+  children: [{
+    path: '/statisticAnalysis/AmtAmount/index',
+    name: '数量金额汇总',
+    meta: {
+      i18n: '/statisticAnalysis/AmtAmount/index',
+      keepAlive: true,
+    },
+    component: () => import( /* webpackChunkName: "views" */ '@/views/statisticAnalysis/AmtAmount/index')
+  }]
+}, {
+  path: '/statisticAnalysis/customerDelivery/index',
+  component: Layout,
+  hidden: true,
+  children: [{
+    path: '/statisticAnalysis/customerDelivery/index',
+    name: '发货客户统计',
+    meta: {
+      i18n: '/statisticAnalysis/customerDelivery/index',
+      keepAlive: true,
+    },
+    component: () => import( /* webpackChunkName: "views" */ '@/views/statisticAnalysis/customerDelivery/index')
+  }]
+}, {
+  path: '/statisticAnalysis/salesmanDelivery/index',
+  component: Layout,
+  hidden: true,
+  children: [{
+    path: '/statisticAnalysis/salesmanDelivery/index',
+    name: '发货业务员统计',
+    meta: {
+      i18n: '/statisticAnalysis/salesmanDelivery/index',
+      keepAlive: true,
+    },
+    component: () => import( /* webpackChunkName: "views" */ '@/views/statisticAnalysis/salesmanDelivery/index')
+  }]
+}, {
+  path: '/statisticAnalysis/specificationsDelivery/index',
+  component: Layout,
+  hidden: true,
+  children: [{
+    path: '/statisticAnalysis/specificationsDelivery/index',
+    name: '发货规格统计',
+    meta: {
+      i18n: '/statisticAnalysis/specificationsDelivery/index',
+      keepAlive: true,
+    },
+    component: () => import( /* webpackChunkName: "views" */ '@/views/statisticAnalysis/specificationsDelivery/index')
+  }]
+}, {
+  path: '/statisticAnalysis/customerProfit/index',
+  component: Layout,
+  hidden: true,
+  children: [{
+    path: '/statisticAnalysis/customerProfit/index',
+    name: '客户利润统计',
+    meta: {
+      i18n: '/statisticAnalysis/customerProfit/index',
+      keepAlive: true,
+    },
+    component: () => import( /* webpackChunkName: "views" */ '@/views/statisticAnalysis/customerProfit/index')
+  }]
+}, {
+  path: '/statisticAnalysis/salesmanProfit/index',
+  component: Layout,
+  hidden: true,
+  children: [{
+    path: '/statisticAnalysis/salesmanProfit/index',
+    name: '业务员利润统计',
+    meta: {
+      i18n: '/statisticAnalysis/salesmanProfit/index',
+      keepAlive: true,
+    },
+    component: () => import( /* webpackChunkName: "views" */ '@/views/statisticAnalysis/salesmanProfit/index')
+  }]
+}, {
+  path: '/statisticAnalysis/brandProfit/index',
+  component: Layout,
+  hidden: true,
+  children: [{
+    path: '/statisticAnalysis/brandProfit/index',
+    name: '品牌利润对比统计',
+    meta: {
+      i18n: '/statisticAnalysis/brandProfit/index',
+      keepAlive: true,
+    },
+    component: () => import( /* webpackChunkName: "views" */ '@/views/statisticAnalysis/brandProfit/index')
+  }]
+}
 ]

+ 7 - 5
src/views/client/detailsPage.vue

@@ -17,9 +17,9 @@
         <avue-form ref="form" class="trading-form" v-model="form" :option="option">
           <template slot="corpsTypeId">
             <div style="display:flex;">
-              <avue-cascader :emit-path="false" check-strictly :show-all-levels="false" v-model="form.corpsTypeId"
+              <avue-input-tree default-expand-all v-model="form.corpsTypeId"
                 placeholder="请选择客户分类" :dic="corpTypeList" :props="props">
-              </avue-cascader>
+              </avue-input-tree>
               <i class="el-icon-circle-plus-outline" style="font-size:18px;line-height: 32px;margin-left:4px"
                 @click="corpTypeVisible = true"></i>
             </div>
@@ -240,7 +240,8 @@ export default {
       getDetails({ id: id })
         .then(res => {
           this.form = res.data.data;
-          this.data = res.data.data.corpsAddrList;
+          this.data1 = res.data.data.corpsAddrList.filter(e => e.type == 0);
+          this.data2 = res.data.data.corpsAddrList.filter(e => e.type == 1);
         })
         .finally(() => {
           this.loadingBtn = false;
@@ -345,11 +346,12 @@ export default {
         done();
         if (valid) {
           this.loadingBtn = true;
-          submit({ ...this.form, code: this.form.cname, corpType: "KH", corpsAddrList: this.data })
+          submit({ ...this.form, code: this.form.cname, corpType: "KH", corpsAddrList: this.data1.concat(this.data2) })
             .then(res => {
               this.$message.success("保存成功");
               this.form = res.data.data;
-              this.data = res.data.data.corpsAddrList;
+              this.data1 = res.data.data.corpsAddrList.filter(e => e.type == 0);
+              this.data2 = res.data.data.corpsAddrList.filter(e => e.type == 1);
             })
             .finally(() => {
               this.loadingBtn = false;

+ 4 - 19
src/views/salesOrder/detailsPage.vue

@@ -33,7 +33,7 @@
           </template>
         </avue-form>
         <avue-crud ref="crud" :option="optionList" :data="data" :table-loading="loading" @saveColumn="saveColumn"
-          @resetColumn="resetColumn" :cell-style="cellStyle" @row-save="rowSave" @row-update="addUpdate">
+          @resetColumn="resetColumn" :cell-style="cellStyle">
           <template slot="headerSerial">
             <el-button type="primary" icon="el-icon-plus" size="mini" @click.stop="addRow"
               :disabled="detailData.status == 1" circle></el-button>
@@ -99,7 +99,7 @@
 
 <script>
 import { optionList } from "./js/optionList";
-import { getDetails, submit, getCorpDetails, remove, getGoodsList } from "@/api/basicData/salesOrder";
+import { getDetails, submit, getCorpDetails, remove, getAllgoodstype } from "@/api/basicData/salesOrder";
 import feeInfo from "./components/feeInfo.vue";
 import { multiply, sum, subtract } from "@/util/calculate";
 export default {
@@ -341,17 +341,8 @@ export default {
       this.option.disabled = true;
     }
     this.getAllWorkDicts()
-    getGoodsList(1, 10).then(res => {
-      if (res.data.data.total > 0) {
-        this.goodsoptions = res.data.data.records;
-        if (Math.ceil(res.data.data.total / 10) > 1) {
-          for (let i = 2; i <= Math.ceil(res.data.data.total / 10); i++) {
-            getGoodsList(i, 10).then(e => {
-              this.goodsoptions = this.goodsoptions.concat(e.data.data.records);
-            });
-          }
-        }
-      }
+    getAllgoodstype().then(res => {
+      this.goodsoptions = res.data.data
     });
   },
   methods: {
@@ -430,12 +421,6 @@ export default {
     rowCell(row, index) {
       this.$refs.crud.rowCell(row, index)
     },
-    rowSave(form, done) {
-      done()
-    },
-    addUpdate(form, index, done, loading) {
-      done()
-    },
     rowDel(row, index) {
       this.$confirm("确定删除数据?", {
         confirmButtonText: "确定",

+ 9 - 3
src/views/salesOrder/index.vue

@@ -57,7 +57,7 @@
 <script>
 import detailsPage from "./detailsPage";
 import { option } from "./js/optionList";
-import { getList, getCorpsAll, gainUser } from "@/api/basicData/salesOrder";
+import { getList, getCorpsAll, gainUser,getCorpType,getAllgoodstype } from "@/api/basicData/salesOrder";
 export default {
   name: "index",
   data() {
@@ -163,13 +163,19 @@ export default {
       gainUser().then(res => {
         this.findObject(this.option.column, "createUser").dicData = res.data.data;
       })
+      getCorpType({ corpType: 'KH' }).then(res => {
+        this.findObject(this.option.column, "corpType").dicData= res.data.data
+      });
+      getAllgoodstype().then(res => {
+        this.findObject(this.option.column, "cname").dicData= res.data.data
+      });
       this.$refs.crud.init();
     },
     searchCriteriaSwitch(type) {
       if (type) {
-        this.option.height = this.option.height - 189;
+        this.option.height = this.option.height - 138;
       } else {
-        this.option.height = this.option.height + 189;
+        this.option.height = this.option.height + 138;
       }
       this.$refs.crud.getTableHeight();
     },

+ 20 - 10
src/views/salesOrder/js/optionList.js

@@ -2,7 +2,7 @@ import { number } from "echarts"
 
 export const option = {
   searchShow: true,
-  searchMenuSpan: 24,
+  searchMenuSpan: 8,
   align: "center",
   searchSpan: 8,
   tip: false,
@@ -95,34 +95,41 @@ export const option = {
       type: "select",
       dicData: [],
       search: true,
+      filterable:true,
+      props: {
+        label: "cname",
+        value: "id"
+      },
       index: 11
     },
     {
       label: "客户分类",
       prop: "corpType",
-      type: "select",
+      type: "tree",
       dicData: [],
+      filterable:true,
+      props: {
+        label: "title",
+        value: "id"
+      },
+      hide: true,
       search: true,
+      showColumn: false,
       index: 12
     },
     {
-      label: "客户分类",
-      prop: "corpType",
-      type: "select",
-      dicData: [],
-      search: true,
-      index: 13
-    },
-    {
       label: "制单人",
       prop: "createUser",
       type: "select",
+      filterable:true,
       props: {
         label: "name",
         value: "id"
       },
       dicData: [],
+      hide: true,
       search: true,
+      showColumn: false,
       index: 14
     }
   ]
@@ -241,6 +248,9 @@ export const feeOption = {
     {
       label: "收款日期",
       prop: "a",
+      type: "date",
+      format: "yyyy-MM-dd",
+      valueFormat: "yyyy-MM-dd",
       cell: true,
       overHidden: true
     },

+ 413 - 0
src/views/statisticAnalysis/AmtAmount/index.vue

@@ -0,0 +1,413 @@
+<template>
+  <div>
+    <basic-container class="page-crad">
+      <avue-crud ref="crud" :option="option" :data="dataList" :page.sync="page" :search.sync="search"
+        :cell-style="cellStyle" @search-change="searchChange" @current-change="currentChange" @size-change="sizeChange"
+        @refresh-change="refreshChange" @on-load="onLoad" :table-loading="loading" @saveColumn="saveColumn"
+        @resetColumn="resetColumn" @search-criteria-switch="searchCriteriaSwitch">
+        <template slot="statusSearch">
+          <el-radio v-model="search.status" label="1">是</el-radio>
+          <el-radio v-model="search.status" label="0">否</el-radio>
+        </template>
+      </avue-crud>
+    </basic-container>
+  </div>
+</template>
+
+<script>
+import { getToken } from "@/util/auth";
+import { getList } from "@/api/statisticAnalysis/AmtAmount"
+export default {
+  name: "index",
+  data() {
+    return {
+      UConfiguration: {
+        multipleChoices: false,
+        multiple: false,
+        disabled: false,
+        searchShow: true,
+        collapseTags: false,
+        placeholder: '请点击右边按钮选择',
+        dicData: []
+      },
+      form: {},
+      search: {
+        status: "1"
+      },
+      dataList: [],
+      loading: false,
+      detailData: {},
+      page: {
+        pageSize: 20,
+        currentPage: 1,
+        total: 0,
+        pageSizes: [10, 20, 30, 40, 50, 100, 200, 300, 400, 500]
+      },
+      option: {},
+      optionBack: {
+        searchShow: true,
+        align: "center",
+        searchMenuPosition: "right",
+        searchSpan: 8,
+        searchMenuSpan: 24,
+        searchLabelWidth: 100,
+        border: true,
+        index: true,
+        addBtn: false,
+        viewBtn: false,
+        editBtn: false,
+        delBtn: false,
+        searchIcon: true,
+        menu: false,
+        showSummary: true,
+        sumColumnList: [
+          {
+            name: "quantity1",
+            type: "sum"
+          },
+          {
+            name: "amount1",
+            type: "sum"
+          },
+          {
+            name: "quantity2",
+            type: "sum"
+          },
+          {
+            name: "amount2",
+            type: "sum"
+          },
+          {
+            name: "quantity3",
+            type: "sum"
+          },
+          {
+            name: "amount3",
+            type: "sum"
+          },
+          {
+            name: "quantity4",
+            type: "sum"
+          },
+          {
+            name: "amount4",
+            type: "sum"
+          },
+          {
+            name: "quantity5",
+            type: "sum"
+          },
+          {
+            name: "amount5",
+            type: "sum"
+          },
+          {
+            name: "quantity6",
+            type: "sum"
+          },
+          {
+            name: "amount6",
+            type: "sum"
+          },
+          {
+            name: "quantity7",
+            type: "sum"
+          },
+          {
+            name: "amount7",
+            type: "sum"
+          },
+          {
+            name: "quantity8",
+            type: "sum"
+          },
+          {
+            name: "amount8",
+            type: "sum"
+          },
+          {
+            name: "quantity9",
+            type: "sum"
+          },
+          {
+            name: "amount9",
+            type: "sum"
+          },
+          {
+            name: "quantity10",
+            type: "sum"
+          },
+          {
+            name: "amount10",
+            type: "sum"
+          },
+          {
+            name: "quantity11",
+            type: "sum"
+          },
+          {
+            name: "amount11",
+            type: "sum"
+          },
+          {
+            name: "quantity12",
+            type: "sum"
+          },
+          {
+            name: "amount12",
+            type: "sum"
+          }
+        ],
+        column: [
+          {
+            label: "品牌",
+            prop: "brand",
+            filterable: true,
+            multiple: true,
+            type: "select",
+            props: {
+              label: "dictValue",
+              value: "dictValue"
+            },
+            dicData: [],
+            dataType: "string",
+            overHidden: true,
+            search: true
+          },
+          {
+            label: "年份",
+            prop: "year",
+            type: "year",
+            format: "yyyy",
+            valueFormat: "yyyy",
+            overHidden: true,
+            hide: true,
+            showColumn: false,
+            search: true
+          },
+          {
+            label: "含未发货订单",
+            prop: "status",
+            overHidden: true,
+            hide: true,
+            showColumn: false,
+            search: true
+          },
+          {
+            label: '月份',
+            children: [
+              {
+                label: "1月数量",
+                prop: "quantity1",
+                overHidden: true,
+              },
+              {
+                label: "1月金额",
+                prop: "amount1",
+                overHidden: true,
+              },
+              {
+                label: "2月数量",
+                prop: "quantity2",
+                overHidden: true,
+              },
+              {
+                label: "2月金额",
+                prop: "amount2",
+                overHidden: true,
+              },
+              {
+                label: "3月数量",
+                prop: "quantity3",
+                overHidden: true,
+              },
+              {
+                label: "3月金额",
+                prop: "amount3",
+                overHidden: true,
+              },
+              {
+                label: "4月数量",
+                prop: "quantity4",
+                overHidden: true,
+              },
+              {
+                label: "4月金额",
+                prop: "amount4",
+                overHidden: true,
+              },
+              {
+                label: "5月数量",
+                prop: "quantity5",
+                overHidden: true,
+              },
+              {
+                label: "5月金额",
+                prop: "amount5",
+                overHidden: true,
+              },
+              {
+                label: "6月数量",
+                prop: "quantity6",
+                overHidden: true,
+              },
+              {
+                label: "6月金额",
+                prop: "amount6",
+                overHidden: true,
+              },
+              {
+                label: "7月数量",
+                prop: "quantity7",
+                overHidden: true,
+              },
+              {
+                label: "7月金额",
+                prop: "amount7",
+                overHidden: true,
+              },
+              {
+                label: "8月数量",
+                prop: "quantity8",
+                overHidden: true,
+              },
+              {
+                label: "8月金额",
+                prop: "amount8",
+                overHidden: true,
+              },
+              {
+                label: "9月数量",
+                prop: "quantity9",
+                overHidden: true,
+              },
+              {
+                label: "9月金额",
+                prop: "amount9",
+                overHidden: true,
+              },
+              {
+                label: "10月数量",
+                prop: "quantity10",
+                overHidden: true,
+              },
+              {
+                label: "10月金额",
+                prop: "amount10",
+                overHidden: true,
+              },
+              {
+                label: "11月数量",
+                prop: "quantity11",
+                overHidden: true,
+              },
+              {
+                label: "11月金额",
+                prop: "amount11",
+                overHidden: true,
+              },
+              {
+                label: "12月数量",
+                prop: "quantity12",
+                overHidden: true,
+              },
+              {
+                label: "12月金额",
+                prop: "amount12",
+                overHidden: true,
+              }
+            ]
+          },
+        ]
+      }
+    };
+  },
+  async created() {
+    this.option = await this.getColumnData(this.getColumnName(225), this.optionBack);
+    this.getAllWorkDicts()
+  },
+  methods: {
+    getAllWorkDicts() {
+      this.option.height = window.innerHeight - 210;
+      this.getWorkDicts('brand').then(res => {
+        this.findObject(this.option.column, "brand").dicData =
+          res.data.data;
+      })
+    },
+    cellStyle() {
+      return "padding:0;height:40px;";
+    },
+    searchCriteriaSwitch(type) {
+      if (type) {
+        this.option.height = this.option.height - 46;
+      } else {
+        this.option.height = this.option.height + 46;
+      }
+      this.$refs.crud.getTableHeight();
+    },
+    //点击搜索按钮触发
+    searchChange(params, done) {
+      this.page.currentPage = 1;
+      this.onLoad(this.page, params);
+      done();
+    },
+    refreshChange() {
+      this.onLoad(this.page, this.search);
+    },
+    currentChange(val) {
+      this.page.currentPage = val;
+    },
+    sizeChange(val) {
+      this.page.currentPage = 1;
+      this.page.pageSize = val;
+    },
+    onLoad(page, params = {}) {
+      let data = this.deepClone(Object.assign({}, params, this.search));
+      this.loading = true;
+      getList(
+        page.currentPage,
+        page.pageSize,
+        Object.assign(data)
+      ).then(res => {
+        this.dataList = res.data.data.records ? res.data.data.records : [];
+        this.page.total = res.data.data.total;
+      }).finally(() => {
+        this.loading = false;
+      });
+    },
+
+    //列保存触发
+    async saveColumn() {
+      const inSave = await this.saveColumnData(this.getColumnName(225), this.option);
+      if (inSave) {
+        this.$message.success("保存成功");
+        //关闭窗口
+        this.$refs.crud.$refs.dialogColumn.columnBox = false;
+      }
+    },
+    async resetColumn() {
+      this.option = this.optionBack;
+      const inSave = await this.delColumnData(this.getColumnName(225), this.optionBack);
+      this.getAllWorkDicts()
+      if (inSave) {
+        this.$message.success("重置成功");
+        this.$refs.crud.$refs.dialogColumn.columnBox = false;
+      }
+    }
+  }
+};
+</script>
+
+<style scoped>
+.page-crad ::v-deep .basic-container__card {
+  height: 94.2vh;
+}
+
+::v-deep .el-table__expanded-cell[class*="cell"] {
+  padding: 0px;
+}
+
+.itemTable ::v-deep .el-table {
+  width: 100%;
+}
+</style>

+ 301 - 0
src/views/statisticAnalysis/brandProfit/index.vue

@@ -0,0 +1,301 @@
+<template>
+  <div>
+    <basic-container class="page-crad">
+      <avue-crud ref="crud" :option="option" :data="dataList" :page.sync="page" :search.sync="search"
+        :cell-style="cellStyle" @search-change="searchChange" @current-change="currentChange" @size-change="sizeChange"
+        @refresh-change="refreshChange" @on-load="onLoad" :table-loading="loading" @saveColumn="saveColumn"
+        @resetColumn="resetColumn" @search-criteria-switch="searchCriteriaSwitch">
+        <template slot="menuLeft">
+          <el-button type="info" size="small" @click="outExport">导出
+          </el-button>
+        </template>
+        <template slot="businesDateSearch">
+          <el-date-picker v-model="search.businesDate" type="daterange" start-placeholder="开始日期" end-placeholder="结束日期"
+            format="yyyy-MM-dd" value-format="yyyy-MM-dd HH:mm:ss" :default-time="['00:00:00', '23:59:59']">
+          </el-date-picker>
+        </template>
+      </avue-crud>
+    </basic-container>
+  </div>
+</template>
+
+<script>
+import { getToken } from "@/util/auth";
+import { getList } from "@/api/statisticAnalysis/brandProfit"
+import { gainUser } from "@/api/basicData/customerInquiry";
+export default {
+  name: "index",
+  data() {
+    return {
+      UConfiguration: {
+        multipleChoices: false,
+        multiple: false,
+        disabled: false,
+        searchShow: true,
+        collapseTags: false,
+        placeholder: '请点击右边按钮选择',
+        dicData: []
+      },
+      form: {},
+      search: {},
+      dataList: [],
+      loading: false,
+      detailData: {},
+      page: {
+        pageSize: 20,
+        currentPage: 1,
+        total: 0,
+        pageSizes: [10, 20, 30, 40, 50, 100, 200, 300, 400, 500]
+      },
+      option: {},
+      optionBack: {
+        align: "center",
+        searchShow: true,
+        searchMenuPosition: "right",
+        searchSpan: 8,
+        searchMenuSpan: 8,
+        border: true,
+        index: true,
+        addBtn: false,
+        viewBtn: false,
+        editBtn: false,
+        delBtn: false,
+        searchIcon: true,
+        menu: false,
+        showSummary: true,
+        sumColumnList: [
+          {
+            name: "quantity",
+            type: "sum"
+          },
+          {
+            name: "grossProfit",
+            type: "sum"
+          },
+          {
+            name: "amount",
+            type: "sum"
+          },
+          {
+            name: "thisUsedProfit",
+            type: "sum"
+          },
+          {
+            name: "grossProfit",
+            type: "sum"
+          },
+          {
+            name: "predictOceanFreight",
+            type: "sum"
+          },
+          {
+            name: "netGrossProfit",
+            type: "sum"
+          },
+          {
+            name: "grossProfitRate",
+            type: "sum"
+          }
+        ],
+        column: [
+          {
+            label: "业务日期",
+            prop: "date",
+            type: "date",
+            format: 'yyyy-MM-dd',
+            valueFormat: 'yyyy-MM-dd',
+            searchRange: true,
+            overHidden: true,
+            hide: true,
+            showColumn: false,
+            search: true,
+          },
+          {
+            label: "品牌",
+            prop: "brand",
+            filterable: true,
+            multiple: true,
+            type: "select",
+            props: {
+              label: "dictValue",
+              value: "dictValue"
+            },
+            dicData: [],
+            dataType: "string",
+            overHidden: true,
+            search: true
+          },
+          {
+            label: "销售收入",
+            prop: "amount",
+            overHidden: true,
+          },
+          {
+            label: "销售成本",
+            prop: "purchaseAmount",
+            overHidden: true,
+          },
+          {
+            label: "发货数量",
+            prop: "quantity",
+            overHidden: true,
+          },
+          {
+            label: "返利",
+            prop: "thisUsedProfit",
+            overHidden: true,
+          },
+          {
+            label: "平均单价",
+            prop: "price",
+            overHidden: true,
+          },
+          {
+            label: "单条毛利",
+            prop: "singleGrossProfit",
+            overHidden: true,
+          },
+          {
+            label: "订单运费",
+            prop: "predictOceanFreight",
+            overHidden: true,
+          },
+          {
+            label: "毛利额(不含返利)",
+            prop: "netGrossProfit",
+            overHidden: true,
+          },
+          {
+            label: "毛利额(含返利)",
+            prop: "grossProfit",
+            overHidden: true,
+          },
+          {
+            label: "订单毛利率",
+            prop: "grossProfitRate",
+            overHidden: true,
+          }
+        ]
+      }
+    };
+  },
+  async created() {
+    this.option = await this.getColumnData(this.getColumnName(229), this.optionBack);
+    this.getAllWorkDicts()
+  },
+  methods: {
+    getAllWorkDicts() {
+      this.option.height = window.innerHeight - 210;
+      this.getWorkDicts('brand').then(res => {
+        this.findObject(this.option.column, "brand").dicData =
+          res.data.data;
+      })
+      // gainUser().then(res => {
+      //   this.findObject(this.option.column, "chargeMember").dicData =
+      //     res.data.data;
+      // })
+    },
+    cellStyle() {
+      return "padding:0;height:40px;";
+    },
+    searchCriteriaSwitch(type) {
+      if (type) {
+        this.option.height = this.option.height - 46;
+      } else {
+        this.option.height = this.option.height + 46;
+      }
+      this.$refs.crud.getTableHeight();
+    },
+    //点击搜索按钮触发
+    searchChange(params, done) {
+      this.page.currentPage = 1;
+      this.onLoad(this.page, params);
+      done();
+    },
+    refreshChange() {
+      this.onLoad(this.page, this.search);
+    },
+    currentChange(val) {
+      this.page.currentPage = val;
+    },
+    sizeChange(val) {
+      this.page.currentPage = 1;
+      this.page.pageSize = val;
+    },
+    onLoad(page, params = {}) {
+      let data = this.deepClone(Object.assign({}, params, this.search));
+      if (data.date) {
+        data.beginTime = data.date[0]
+        data.endTime = data.date[1]
+        delete data.date
+      }
+      this.loading = true;
+      getList(
+        page.currentPage,
+        page.pageSize,
+        data
+      ).then(res => {
+        this.dataList = res.data.data.records ? res.data.data.records : [];
+        this.page.total = res.data.data.total;
+      }).finally(() => {
+        this.loading = false;
+      });
+    },
+
+    //列保存触发
+    async saveColumn() {
+      const inSave = await this.saveColumnData(this.getColumnName(229), this.option);
+      if (inSave) {
+        this.$message.success("保存成功");
+        //关闭窗口
+        this.$refs.crud.$refs.dialogColumn.columnBox = false;
+      }
+    },
+    async resetColumn() {
+      this.option = this.optionBack;
+      const inSave = await this.delColumnData(this.getColumnName(229), this.optionBack);
+      this.getAllWorkDicts()
+      if (inSave) {
+        this.$message.success("重置成功");
+        this.$refs.crud.$refs.dialogColumn.columnBox = false;
+      }
+    },
+    editOpen(row) {
+    },
+    outExport() {
+      let params = { ...this.search }
+      if (params.date && params.date.length > 0) {
+        params = {
+          ...params,
+          beginTime: params.date[0],
+          endTime: params.date[1],
+        }
+      } else {
+        params = {
+          ...params,
+          beginTime: '',
+          endTime: '',
+        }
+      }
+      window.open(
+        `/api/blade-purchase-sales/exportOrder/brandProfitExport?${this.website.tokenHeader
+        }=${getToken()}&beginTime=${params.beginTime}&endTime=${params.endTime}&brand=${params.brand? params.brand : ''}`
+      );
+    }
+  }
+};
+</script>
+
+<style scoped>
+.page-crad ::v-deep .basic-container__card {
+  height: 94.2vh;
+}
+
+::v-deep .el-table__expanded-cell[class*="cell"] {
+  padding: 0px;
+}
+
+.itemTable ::v-deep .el-table {
+  width: 100%;
+}
+</style>

+ 265 - 0
src/views/statisticAnalysis/customerDelivery/index.vue

@@ -0,0 +1,265 @@
+<template>
+  <div>
+    <basic-container class="page-crad">
+      <avue-crud ref="crud" :option="option" :data="dataList" :page.sync="page" :search.sync="search"
+        :cell-style="cellStyle" @search-change="searchChange" @current-change="currentChange" @size-change="sizeChange"
+        @refresh-change="refreshChange" @on-load="onLoad" :table-loading="loading" @saveColumn="saveColumn"
+        @resetColumn="resetColumn" @search-criteria-switch="searchCriteriaSwitch">
+        <template slot="menuLeft">
+          <el-button type="info" size="small" @click="outExport">导出
+          </el-button>
+        </template>
+        <template slot="businesDateSearch">
+          <el-date-picker v-model="search.businesDate" type="daterange" start-placeholder="开始日期" end-placeholder="结束日期"
+            format="yyyy-MM-dd" value-format="yyyy-MM-dd HH:mm:ss" :default-time="['00:00:00', '23:59:59']">
+          </el-date-picker>
+        </template>
+      </avue-crud>
+    </basic-container>
+  </div>
+</template>
+
+<script>
+import { getToken } from "@/util/auth";
+import { getList } from "@/api/statisticAnalysis/customerDelivery"
+import { gainUser } from "@/api/basicData/customerInquiry";
+export default {
+  name: "index",
+  data() {
+    return {
+      UConfiguration: {
+        multipleChoices: false,
+        multiple: false,
+        disabled: false,
+        searchShow: true,
+        collapseTags: false,
+        placeholder: '请点击右边按钮选择',
+        dicData: []
+      },
+      form: {},
+      search: {},
+      dataList: [],
+      loading: false,
+      detailData: {},
+      page: {
+        pageSize: 20,
+        currentPage: 1,
+        total: 0,
+        pageSizes: [10, 20, 30, 40, 50, 100, 200, 300, 400, 500]
+      },
+      option: {},
+      optionBack: {
+        align: "center",
+        searchShow: true,
+        searchMenuPosition: "right",
+        searchSpan: 8,
+        searchMenuSpan: 24,
+        border: true,
+        index: true,
+        addBtn: false,
+        viewBtn: false,
+        editBtn: false,
+        delBtn: false,
+        searchIcon: true,
+        menu: false,
+        showSummary: true,
+        sumColumnList: [
+          {
+            name: "quantity",
+            type: "sum"
+          },
+          {
+            name: "amount",
+            type: "sum"
+          }
+        ],
+        column: [
+          {
+            label: "业务日期",
+            prop: "date",
+            type: "date",
+            format: 'yyyy-MM-dd',
+            valueFormat: 'yyyy-MM-dd',
+            searchRange: true,
+            overHidden: true,
+            hide: true,
+            showColumn: false,
+            search: true,
+          },
+          {
+            label: "品牌",
+            prop: "brand",
+            filterable: true,
+            multiple: true,
+            type: "select",
+            props: {
+              label: "dictValue",
+              value: "dictValue"
+            },
+            dicData: [],
+            dataType: "string",
+            overHidden: true,
+            hide: true,
+            showColumn: false,
+            search: true
+          },
+          {
+            label: "省份",
+            prop: "belongtoarea",
+            overHidden: true
+          },
+          {
+            label: "客户",
+            prop: "corpName",
+            overHidden: true
+          },
+          {
+            label: "业务员",
+            prop: "chargeMember",
+            type: "select",
+            dicUrl: "",
+            filterable: true,
+            multiple: true,
+            props: {
+              label: "name",
+              value: "name"
+            },
+            dicData:[],
+            dataType: "string",
+            overHidden: true,
+            search: true
+          },
+          {
+            label: "发货数量",
+            prop: "quantity",
+            overHidden: true,
+          },
+          {
+            label: "销售收入",
+            prop: "amount",
+            overHidden: true,
+          }
+        ]
+      }
+    };
+  },
+  async created() {
+    this.option = await this.getColumnData(this.getColumnName(226), this.optionBack);
+    this.getAllWorkDicts()
+  },
+  methods: {
+    getAllWorkDicts() {
+      this.option.height = window.innerHeight - 210;
+      this.getWorkDicts('brand').then(res => {
+        this.findObject(this.option.column, "brand").dicData =
+          res.data.data;
+      })
+      gainUser().then(res => {
+        this.findObject(this.option.column, "chargeMember").dicData =
+          res.data.data;
+      })
+    },
+    cellStyle() {
+      return "padding:0;height:40px;";
+    },
+    searchCriteriaSwitch(type) {
+      if (type) {
+        this.option.height = this.option.height - 46;
+      } else {
+        this.option.height = this.option.height + 46;
+      }
+      this.$refs.crud.getTableHeight();
+    },
+    //点击搜索按钮触发
+    searchChange(params, done) {
+      this.page.currentPage = 1;
+      this.onLoad(this.page, params);
+      done();
+    },
+    refreshChange() {
+      this.onLoad(this.page, this.search);
+    },
+    currentChange(val) {
+      this.page.currentPage = val;
+    },
+    sizeChange(val) {
+      this.page.currentPage = 1;
+      this.page.pageSize = val;
+    },
+    onLoad(page, params = {}) {
+      let data = this.deepClone(Object.assign({}, params, this.search));
+      if (data.date) {
+        data.beginTime = data.date[0]
+        data.endTime = data.date[1]
+        delete data.date
+      }
+      this.loading = true;
+      getList(
+        page.currentPage,
+        page.pageSize,
+        data
+      ).then(res => {
+        this.dataList = res.data.data.records ? res.data.data.records : [];
+        this.page.total = res.data.data.total;
+      }).finally(() => {
+        this.loading = false;
+      });
+    },
+
+    //列保存触发
+    async saveColumn() {
+      const inSave = await this.saveColumnData(this.getColumnName(226), this.option);
+      if (inSave) {
+        this.$message.success("保存成功");
+        //关闭窗口
+        this.$refs.crud.$refs.dialogColumn.columnBox = false;
+      }
+    },
+    async resetColumn() {
+      this.option = this.optionBack;
+      const inSave = await this.delColumnData(this.getColumnName(226), this.optionBack);
+      this.getAllWorkDicts()
+      if (inSave) {
+        this.$message.success("重置成功");
+        this.$refs.crud.$refs.dialogColumn.columnBox = false;
+      }
+    },
+    editOpen(row) {
+    },
+    outExport() {
+      let params = { ...this.search }
+      if (params.date && params.date.length > 0) {
+        params = {
+          ...params,
+          beginTime: params.date[0],
+          endTime: params.date[1],
+        }
+      } else {
+        params = {
+          ...params,
+          beginTime: '',
+          endTime: '',
+        }
+      }
+      window.open(
+        `/api/blade-purchase-sales/exportOrder/corpStatisticsExport?${this.website.tokenHeader
+        }=${getToken()}&beginTime=${params.beginTime}&endTime=${params.endTime}&chargeMember=${params.chargeMember}&brand=${params.brand? params.brand : ''}`
+      );
+    }
+  }
+};
+</script>
+
+<style scoped>
+.page-crad ::v-deep .basic-container__card {
+  height: 94.2vh;
+}
+
+::v-deep .el-table__expanded-cell[class*="cell"] {
+  padding: 0px;
+}
+
+.itemTable ::v-deep .el-table {
+  width: 100%;
+}
+</style>

+ 298 - 0
src/views/statisticAnalysis/customerProfit/index.vue

@@ -0,0 +1,298 @@
+<template>
+  <div>
+    <basic-container class="page-crad">
+      <avue-crud ref="crud" :option="option" :data="dataList" :page.sync="page" :search.sync="search"
+        :cell-style="cellStyle" @search-change="searchChange" @current-change="currentChange" @size-change="sizeChange"
+        @refresh-change="refreshChange" @on-load="onLoad" :table-loading="loading" @saveColumn="saveColumn"
+        @resetColumn="resetColumn" @search-criteria-switch="searchCriteriaSwitch">
+        <template slot="menuLeft">
+          <el-button type="info" size="small" @click="outExport">导出
+          </el-button>
+        </template>
+        <template slot="businesDateSearch">
+          <el-date-picker v-model="search.businesDate" type="daterange" start-placeholder="开始日期" end-placeholder="结束日期"
+            format="yyyy-MM-dd" value-format="yyyy-MM-dd HH:mm:ss" :default-time="['00:00:00', '23:59:59']">
+          </el-date-picker>
+        </template>
+      </avue-crud>
+    </basic-container>
+  </div>
+</template>
+
+<script>
+import { getToken } from "@/util/auth";
+import { getList } from "@/api/statisticAnalysis/customerProfit"
+import { gainUser } from "@/api/basicData/customerInquiry";
+export default {
+  name: "index",
+  data() {
+    return {
+      UConfiguration: {
+        multipleChoices: false,
+        multiple: false,
+        disabled: false,
+        searchShow: true,
+        collapseTags: false,
+        placeholder: '请点击右边按钮选择',
+        dicData: []
+      },
+      form: {},
+      search: {},
+      dataList: [],
+      loading: false,
+      detailData: {},
+      page: {
+        pageSize: 20,
+        currentPage: 1,
+        total: 0,
+        pageSizes: [10, 20, 30, 40, 50, 100, 200, 300, 400, 500]
+      },
+      option: {},
+      optionBack: {
+        align: "center",
+        searchShow: true,
+        searchMenuPosition: "right",
+        searchSpan: 8,
+        searchMenuSpan: 8,
+        border: true,
+        index: true,
+        addBtn: false,
+        viewBtn: false,
+        editBtn: false,
+        delBtn: false,
+        searchIcon: true,
+        menu: false,
+        showSummary: true,
+        sumColumnList: [
+          {
+            name: "quantity",
+            type: "sum"
+          },
+          {
+            name: "grossProfit",
+            type: "sum"
+          },
+          {
+            name: "amount",
+            type: "sum"
+          },
+          {
+            name: "thisUsedProfit",
+            type: "sum"
+          },
+          {
+            name: "grossProfit",
+            type: "sum"
+          },
+          {
+            name: "predictOceanFreight",
+            type: "sum"
+          },
+          {
+            name: "netGrossProfit",
+            type: "sum"
+          },
+          {
+            name: "grossProfitRate",
+            type: "sum"
+          }
+        ],
+        column: [
+          {
+            label: "业务日期",
+            prop: "date",
+            type: "date",
+            format: 'yyyy-MM-dd',
+            valueFormat: 'yyyy-MM-dd',
+            searchRange: true,
+            overHidden: true,
+            hide: true,
+            showColumn: false,
+            search: true,
+          },
+          {
+            label: "品牌",
+            prop: "brand",
+            filterable: true,
+            multiple: true,
+            type: "select",
+            props: {
+              label: "dictValue",
+              value: "dictValue"
+            },
+            dicData: [],
+            dataType: "string",
+            overHidden: true,
+            hide: true,
+            showColumn: false,
+            search: true
+          },
+          {
+            label: "客户",
+            prop: "corpName",
+            overHidden: true
+          },
+          {
+            label: "销售收入",
+            prop: "amount",
+            overHidden: true,
+          },
+          {
+            label: "数量",
+            prop: "quantity",
+            overHidden: true,
+          },
+          {
+            label: "销售成本",
+            prop: "purchaseAmount",
+            overHidden: true,
+          },
+          {
+            label: "返利",
+            prop: "thisUsedProfit",
+            overHidden: true,
+          },
+          {
+            label: "毛利额",
+            prop: "grossProfit",
+            overHidden: true,
+          },
+          {
+            label: "订单运费",
+            prop: "predictOceanFreight",
+            overHidden: true,
+          },
+          {
+            label: "营业净利润",
+            prop: "netGrossProfit",
+            overHidden: true,
+          },
+          {
+            label: "订毛利率",
+            prop: "grossProfitRate",
+            overHidden: true,
+          }
+        ]
+      }
+    };
+  },
+  async created() {
+    this.option = await this.getColumnData(this.getColumnName(231), this.optionBack);
+    this.getAllWorkDicts()
+  },
+  methods: {
+    getAllWorkDicts() {
+      this.option.height = window.innerHeight - 210;
+      this.getWorkDicts('brand').then(res => {
+        this.findObject(this.option.column, "brand").dicData =
+          res.data.data;
+      })
+      // gainUser().then(res => {
+      //   this.findObject(this.option.column, "chargeMember").dicData =
+      //     res.data.data;
+      // })
+    },
+    cellStyle() {
+      return "padding:0;height:40px;";
+    },
+    searchCriteriaSwitch(type) {
+      if (type) {
+        this.option.height = this.option.height - 46;
+      } else {
+        this.option.height = this.option.height + 46;
+      }
+      this.$refs.crud.getTableHeight();
+    },
+    //点击搜索按钮触发
+    searchChange(params, done) {
+      this.page.currentPage = 1;
+      this.onLoad(this.page, params);
+      done();
+    },
+    refreshChange() {
+      this.onLoad(this.page, this.search);
+    },
+    currentChange(val) {
+      this.page.currentPage = val;
+    },
+    sizeChange(val) {
+      this.page.currentPage = 1;
+      this.page.pageSize = val;
+    },
+    onLoad(page, params = {}) {
+      let data = this.deepClone(Object.assign({}, params, this.search));
+      if (data.date) {
+        data.beginTime = data.date[0]
+        data.endTime = data.date[1]
+        delete data.date
+      }
+      this.loading = true;
+      getList(
+        page.currentPage,
+        page.pageSize,
+        data
+      ).then(res => {
+        this.dataList = res.data.data.records ? res.data.data.records : [];
+        this.page.total = res.data.data.total;
+      }).finally(() => {
+        this.loading = false;
+      });
+    },
+
+    //列保存触发
+    async saveColumn() {
+      const inSave = await this.saveColumnData(this.getColumnName(231), this.option);
+      if (inSave) {
+        this.$message.success("保存成功");
+        //关闭窗口
+        this.$refs.crud.$refs.dialogColumn.columnBox = false;
+      }
+    },
+    async resetColumn() {
+      this.option = this.optionBack;
+      const inSave = await this.delColumnData(this.getColumnName(231), this.optionBack);
+      this.getAllWorkDicts()
+      if (inSave) {
+        this.$message.success("重置成功");
+        this.$refs.crud.$refs.dialogColumn.columnBox = false;
+      }
+    },
+    editOpen(row) {
+    },
+    outExport() {
+      let params = { ...this.search }
+      if (params.date && params.date.length > 0) {
+        params = {
+          ...params,
+          beginTime: params.date[0],
+          endTime: params.date[1],
+        }
+      } else {
+        params = {
+          ...params,
+          beginTime: '',
+          endTime: '',
+        }
+      }
+      window.open(
+        `/api/blade-purchase-sales/exportOrder/customerProfitExport?${this.website.tokenHeader
+        }=${getToken()}&beginTime=${params.beginTime}&endTime=${params.endTime}&brand=${params.brand? params.brand : ''}`
+      );
+    }
+  }
+};
+</script>
+
+<style scoped>
+.page-crad ::v-deep .basic-container__card {
+  height: 94.2vh;
+}
+
+::v-deep .el-table__expanded-cell[class*="cell"] {
+  padding: 0px;
+}
+
+.itemTable ::v-deep .el-table {
+  width: 100%;
+}
+</style>

+ 264 - 0
src/views/statisticAnalysis/salesmanDelivery/index.vue

@@ -0,0 +1,264 @@
+<template>
+  <div>
+    <basic-container class="page-crad">
+      <avue-crud ref="crud" :option="option" :data="dataList" :page.sync="page" :search.sync="search"
+        :cell-style="cellStyle" @search-change="searchChange" @current-change="currentChange" @size-change="sizeChange"
+        @refresh-change="refreshChange" @on-load="onLoad" :table-loading="loading" @saveColumn="saveColumn"
+        @resetColumn="resetColumn" @search-criteria-switch="searchCriteriaSwitch">
+        <template slot="menuLeft">
+          <el-button type="info" size="small" @click="outExport">导出
+          </el-button>
+        </template>
+        <template slot="businesDateSearch">
+          <el-date-picker v-model="search.businesDate" type="daterange" start-placeholder="开始日期" end-placeholder="结束日期"
+            format="yyyy-MM-dd" value-format="yyyy-MM-dd HH:mm:ss" :default-time="['00:00:00', '23:59:59']">
+          </el-date-picker>
+        </template>
+      </avue-crud>
+    </basic-container>
+  </div>
+</template>
+
+<script>
+import { getToken } from "@/util/auth";
+import { getList } from "@/api/statisticAnalysis/salesmanDelivery"
+import { gainUser } from "@/api/basicData/customerInquiry";
+export default {
+  name: "index",
+  data() {
+    return {
+      UConfiguration: {
+        multipleChoices: false,
+        multiple: false,
+        disabled: false,
+        searchShow: true,
+        collapseTags: false,
+        placeholder: '请点击右边按钮选择',
+        dicData: []
+      },
+      form: {},
+      search: {},
+      dataList: [],
+      loading: false,
+      detailData: {},
+      page: {
+        pageSize: 20,
+        currentPage: 1,
+        total: 0,
+        pageSizes: [10, 20, 30, 40, 50, 100, 200, 300, 400, 500]
+      },
+      option: {},
+      optionBack: {
+        align: "center",
+        searchShow: true,
+        searchMenuPosition: "right",
+        searchSpan: 8,
+        searchMenuSpan: 24,
+        border: true,
+        index: true,
+        addBtn: false,
+        viewBtn: false,
+        editBtn: false,
+        delBtn: false,
+        searchIcon: true,
+        menu: false,
+        showSummary: true,
+        sumColumnList: [
+          {
+            name: "quantity",
+            type: "sum"
+          },
+          {
+            name: "grossProfit",
+            type: "sum"
+          },
+          {
+            name: "amount",
+            type: "sum"
+          }
+        ],
+        column: [
+          {
+            label: "业务日期",
+            prop: "date",
+            type: "date",
+            format: 'yyyy-MM-dd',
+            valueFormat: 'yyyy-MM-dd',
+            searchRange: true,
+            overHidden: true,
+            hide: true,
+            showColumn: false,
+            search: true,
+          },
+          {
+            label: "品牌",
+            prop: "brand",
+            filterable: true,
+            multiple: true,
+            type: "select",
+            props: {
+              label: "dictValue",
+              value: "dictValue"
+            },
+            dicData: [],
+            dataType: "string",
+            overHidden: true,
+            hide: true,
+            showColumn: false,
+            search: true
+          },
+          {
+            label: "业务员",
+            prop: "chargeMember",
+            type: "select",
+            dicUrl: "",
+            filterable: true,
+            multiple: true,
+            props: {
+              label: "name",
+              value: "name"
+            },
+            dicData: [],
+            dataType: "string",
+            overHidden: true,
+            search: true
+          },
+          {
+            label: "发货数量",
+            prop: "quantity",
+            overHidden: true,
+          },
+          {
+            label: "毛利额",
+            prop: "grossProfit",
+            overHidden: true,
+          },
+          {
+            label: "销售收入",
+            prop: "amount",
+            overHidden: true,
+          }
+        ]
+      }
+    };
+  },
+  async created() {
+    this.option = await this.getColumnData(this.getColumnName(227), this.optionBack);
+    this.getAllWorkDicts()
+  },
+  methods: {
+    getAllWorkDicts() {
+      this.option.height = window.innerHeight - 210;
+      this.getWorkDicts('brand').then(res => {
+        this.findObject(this.option.column, "brand").dicData =
+          res.data.data;
+      })
+      gainUser().then(res => {
+        this.findObject(this.option.column, "chargeMember").dicData =
+          res.data.data;
+      })
+    },
+    cellStyle() {
+      return "padding:0;height:40px;";
+    },
+    searchCriteriaSwitch(type) {
+      if (type) {
+        this.option.height = this.option.height - 46;
+      } else {
+        this.option.height = this.option.height + 46;
+      }
+      this.$refs.crud.getTableHeight();
+    },
+    //点击搜索按钮触发
+    searchChange(params, done) {
+      this.page.currentPage = 1;
+      this.onLoad(this.page, params);
+      done();
+    },
+    refreshChange() {
+      this.onLoad(this.page, this.search);
+    },
+    currentChange(val) {
+      this.page.currentPage = val;
+    },
+    sizeChange(val) {
+      this.page.currentPage = 1;
+      this.page.pageSize = val;
+    },
+    onLoad(page, params = {}) {
+      let data = this.deepClone(Object.assign({}, params, this.search));
+      if (data.date) {
+        data.beginTime = data.date[0]
+        data.endTime = data.date[1]
+        delete data.date
+      }
+      this.loading = true;
+      getList(
+        page.currentPage,
+        page.pageSize,
+        data
+      ).then(res => {
+        this.dataList = res.data.data.records ? res.data.data.records : [];
+        this.page.total = res.data.data.total;
+      }).finally(() => {
+        this.loading = false;
+      });
+    },
+
+    //列保存触发
+    async saveColumn() {
+      const inSave = await this.saveColumnData(this.getColumnName(227), this.option);
+      if (inSave) {
+        this.$message.success("保存成功");
+        //关闭窗口
+        this.$refs.crud.$refs.dialogColumn.columnBox = false;
+      }
+    },
+    async resetColumn() {
+      this.option = this.optionBack;
+      const inSave = await this.delColumnData(this.getColumnName(227), this.optionBack);
+      this.getAllWorkDicts()
+      if (inSave) {
+        this.$message.success("重置成功");
+        this.$refs.crud.$refs.dialogColumn.columnBox = false;
+      }
+    },
+    editOpen(row) {
+    },
+    outExport() {
+      let params = { ...this.search }
+      if (params.date && params.date.length > 0) {
+        params = {
+          ...params,
+          beginTime: params.date[0],
+          endTime: params.date[1],
+        }
+      } else {
+        params = {
+          ...params,
+          beginTime: '',
+          endTime: '',
+        }
+      }
+      window.open(
+        `/api/blade-purchase-sales/exportOrder/salesmanStatisticsExport?${this.website.tokenHeader
+        }=${getToken()}&beginTime=${params.beginTime}&endTime=${params.endTime}&chargeMember=${params.chargeMember}&brand=${params.brand ? params.brand : ''}`
+      );
+    }
+  }
+};
+</script>
+
+<style scoped>
+.page-crad ::v-deep .basic-container__card {
+  height: 94.2vh;
+}
+
+::v-deep .el-table__expanded-cell[class*="cell"] {
+  padding: 0px;
+}
+
+.itemTable ::v-deep .el-table {
+  width: 100%;
+}
+</style>

+ 298 - 0
src/views/statisticAnalysis/salesmanProfit/index.vue

@@ -0,0 +1,298 @@
+<template>
+  <div>
+    <basic-container class="page-crad">
+      <avue-crud ref="crud" :option="option" :data="dataList" :page.sync="page" :search.sync="search"
+        :cell-style="cellStyle" @search-change="searchChange" @current-change="currentChange" @size-change="sizeChange"
+        @refresh-change="refreshChange" @on-load="onLoad" :table-loading="loading" @saveColumn="saveColumn"
+        @resetColumn="resetColumn" @search-criteria-switch="searchCriteriaSwitch">
+        <template slot="menuLeft">
+          <el-button type="info" size="small" @click="outExport">导出
+          </el-button>
+        </template>
+        <template slot="businesDateSearch">
+          <el-date-picker v-model="search.businesDate" type="daterange" start-placeholder="开始日期" end-placeholder="结束日期"
+            format="yyyy-MM-dd" value-format="yyyy-MM-dd HH:mm:ss" :default-time="['00:00:00', '23:59:59']">
+          </el-date-picker>
+        </template>
+      </avue-crud>
+    </basic-container>
+  </div>
+</template>
+
+<script>
+import { getToken } from "@/util/auth";
+import { getList } from "@/api/statisticAnalysis/salesmanProfit"
+import { gainUser } from "@/api/basicData/customerInquiry";
+export default {
+  name: "index",
+  data() {
+    return {
+      UConfiguration: {
+        multipleChoices: false,
+        multiple: false,
+        disabled: false,
+        searchShow: true,
+        collapseTags: false,
+        placeholder: '请点击右边按钮选择',
+        dicData: []
+      },
+      form: {},
+      search: {},
+      dataList: [],
+      loading: false,
+      detailData: {},
+      page: {
+        pageSize: 20,
+        currentPage: 1,
+        total: 0,
+        pageSizes: [10, 20, 30, 40, 50, 100, 200, 300, 400, 500]
+      },
+      option: {},
+      optionBack: {
+        align: "center",
+        searchShow: true,
+        searchMenuPosition: "right",
+        searchSpan: 8,
+        searchMenuSpan: 8,
+        border: true,
+        index: true,
+        addBtn: false,
+        viewBtn: false,
+        editBtn: false,
+        delBtn: false,
+        searchIcon: true,
+        menu: false,
+        showSummary: true,
+        sumColumnList: [
+          {
+            name: "quantity",
+            type: "sum"
+          },
+          {
+            name: "grossProfit",
+            type: "sum"
+          },
+          {
+            name: "amount",
+            type: "sum"
+          },
+          {
+            name: "thisUsedProfit",
+            type: "sum"
+          },
+          {
+            name: "grossProfit",
+            type: "sum"
+          },
+          {
+            name: "predictOceanFreight",
+            type: "sum"
+          },
+          {
+            name: "netGrossProfit",
+            type: "sum"
+          },
+          {
+            name: "grossProfitRate",
+            type: "sum"
+          }
+        ],
+        column: [
+          {
+            label: "业务日期",
+            prop: "date",
+            type: "date",
+            format: 'yyyy-MM-dd',
+            valueFormat: 'yyyy-MM-dd',
+            searchRange: true,
+            overHidden: true,
+            hide: true,
+            showColumn: false,
+            search: true,
+          },
+          {
+            label: "品牌",
+            prop: "brand",
+            filterable: true,
+            multiple: true,
+            type: "select",
+            props: {
+              label: "dictValue",
+              value: "dictValue"
+            },
+            dicData: [],
+            dataType: "string",
+            overHidden: true,
+            hide: true,
+            showColumn: false,
+            search: true
+          },
+          {
+            label: "业务员",
+            prop: "chargeMember",
+            overHidden: true,
+          },
+          {
+            label: "销售收入",
+            prop: "amount",
+            overHidden: true,
+          },
+          {
+            label: "数量",
+            prop: "quantity",
+            overHidden: true,
+          },
+          {
+            label: "销售成本",
+            prop: "purchaseAmount",
+            overHidden: true,
+          },
+          {
+            label: "返利",
+            prop: "thisUsedProfit",
+            overHidden: true,
+          },
+          {
+            label: "毛利额",
+            prop: "grossProfit",
+            overHidden: true,
+          },
+          {
+            label: "订单运费",
+            prop: "predictOceanFreight",
+            overHidden: true,
+          },
+          {
+            label: "营业净利润",
+            prop: "netGrossProfit",
+            overHidden: true,
+          },
+          {
+            label: "订毛利率",
+            prop: "grossProfitRate",
+            overHidden: true,
+          }
+        ]
+      }
+    };
+  },
+  async created() {
+    this.option = await this.getColumnData(this.getColumnName(228), this.optionBack);
+    this.getAllWorkDicts()
+  },
+  methods: {
+    getAllWorkDicts() {
+      this.option.height = window.innerHeight - 210;
+      this.getWorkDicts('brand').then(res => {
+        this.findObject(this.option.column, "brand").dicData =
+          res.data.data;
+      })
+      // gainUser().then(res => {
+      //   this.findObject(this.option.column, "chargeMember").dicData =
+      //     res.data.data;
+      // })
+    },
+    cellStyle() {
+      return "padding:0;height:40px;";
+    },
+    searchCriteriaSwitch(type) {
+      if (type) {
+        this.option.height = this.option.height - 46;
+      } else {
+        this.option.height = this.option.height + 46;
+      }
+      this.$refs.crud.getTableHeight();
+    },
+    //点击搜索按钮触发
+    searchChange(params, done) {
+      this.page.currentPage = 1;
+      this.onLoad(this.page, params);
+      done();
+    },
+    refreshChange() {
+      this.onLoad(this.page, this.search);
+    },
+    currentChange(val) {
+      this.page.currentPage = val;
+    },
+    sizeChange(val) {
+      this.page.currentPage = 1;
+      this.page.pageSize = val;
+    },
+    onLoad(page, params = {}) {
+      let data = this.deepClone(Object.assign({}, params, this.search));
+      if (data.date) {
+        data.beginTime = data.date[0]
+        data.endTime = data.date[1]
+        delete data.date
+      }
+      this.loading = true;
+      getList(
+        page.currentPage,
+        page.pageSize,
+        data
+      ).then(res => {
+        this.dataList = res.data.data.records ? res.data.data.records : [];
+        this.page.total = res.data.data.total;
+      }).finally(() => {
+        this.loading = false;
+      });
+    },
+
+    //列保存触发
+    async saveColumn() {
+      const inSave = await this.saveColumnData(this.getColumnName(228), this.option);
+      if (inSave) {
+        this.$message.success("保存成功");
+        //关闭窗口
+        this.$refs.crud.$refs.dialogColumn.columnBox = false;
+      }
+    },
+    async resetColumn() {
+      this.option = this.optionBack;
+      const inSave = await this.delColumnData(this.getColumnName(228), this.optionBack);
+      this.getAllWorkDicts()
+      if (inSave) {
+        this.$message.success("重置成功");
+        this.$refs.crud.$refs.dialogColumn.columnBox = false;
+      }
+    },
+    editOpen(row) {
+    },
+    outExport() {
+      let params = { ...this.search }
+      if (params.date && params.date.length > 0) {
+        params = {
+          ...params,
+          beginTime: params.date[0],
+          endTime: params.date[1],
+        }
+      } else {
+        params = {
+          ...params,
+          beginTime: '',
+          endTime: '',
+        }
+      }
+      window.open(
+        `/api/blade-purchase-sales/exportOrder/salesmanProfitExport?${this.website.tokenHeader
+        }=${getToken()}&beginTime=${params.beginTime}&endTime=${params.endTime}&brand=${params.brand? params.brand : ''}`
+      );
+    }
+  }
+};
+</script>
+
+<style scoped>
+.page-crad ::v-deep .basic-container__card {
+  height: 94.2vh;
+}
+
+::v-deep .el-table__expanded-cell[class*="cell"] {
+  padding: 0px;
+}
+
+.itemTable ::v-deep .el-table {
+  width: 100%;
+}
+</style>

+ 275 - 0
src/views/statisticAnalysis/specificationsDelivery/index.vue

@@ -0,0 +1,275 @@
+<template>
+  <div>
+    <basic-container class="page-crad">
+      <avue-crud ref="crud" :option="option" :data="dataList" :page.sync="page" :search.sync="search"
+        :cell-style="cellStyle" @search-change="searchChange" @current-change="currentChange" @size-change="sizeChange"
+        @refresh-change="refreshChange" @on-load="onLoad" :table-loading="loading" @saveColumn="saveColumn"
+        @resetColumn="resetColumn" @search-criteria-switch="searchCriteriaSwitch">
+        <template slot="menuLeft">
+          <el-button type="info" size="small" @click="outExport">导出
+          </el-button>
+        </template>
+        <template slot="businesDateSearch">
+          <el-date-picker v-model="search.businesDate" type="daterange" start-placeholder="开始日期" end-placeholder="结束日期"
+            format="yyyy-MM-dd" value-format="yyyy-MM-dd HH:mm:ss" :default-time="['00:00:00', '23:59:59']">
+          </el-date-picker>
+        </template>
+      </avue-crud>
+    </basic-container>
+  </div>
+</template>
+
+<script>
+import { getToken } from "@/util/auth";
+import { getList } from "@/api/statisticAnalysis/specificationsDelivery"
+import { gainUser } from "@/api/basicData/customerInquiry";
+export default {
+  name: "index",
+  data() {
+    return {
+      UConfiguration: {
+        multipleChoices: false,
+        multiple: false,
+        disabled: false,
+        searchShow: true,
+        collapseTags: false,
+        placeholder: '请点击右边按钮选择',
+        dicData: []
+      },
+      form: {},
+      search: {},
+      dataList: [],
+      loading: false,
+      detailData: {},
+      page: {
+        pageSize: 20,
+        currentPage: 1,
+        total: 0,
+        pageSizes: [10, 20, 30, 40, 50, 100, 200, 300, 400, 500]
+      },
+      option: {},
+      optionBack: {
+        align: "center",
+        searchShow: true,
+        searchMenuPosition: "right",
+        searchSpan: 8,
+        searchMenuSpan: 24,
+        border: true,
+        index: true,
+        addBtn: false,
+        viewBtn: false,
+        editBtn: false,
+        delBtn: false,
+        searchIcon: true,
+        menu: false,
+        showSummary: true,
+        sumColumnList: [
+          {
+            name: "quantity",
+            type: "sum"
+          },
+          {
+            name: "amount",
+            type: "sum"
+          }
+        ],
+        column: [
+          {
+            label: "业务日期",
+            prop: "date",
+            type: "date",
+            format: 'yyyy-MM-dd',
+            valueFormat: 'yyyy-MM-dd',
+            searchRange: true,
+            overHidden: true,
+            hide: true,
+            showColumn: false,
+            search: true,
+          },
+          {
+            label: "业务员",
+            prop: "chargeMember",
+            type: "select",
+            dicUrl: "",
+            filterable: true,
+            multiple: true,
+            props: {
+              label: "name",
+              value: "name"
+            },
+            dicData:[],
+            dataType: "string",
+            overHidden: true,
+            hide: true,
+            showColumn: false,
+            search: true
+          },
+          {
+            label: "品号",
+            prop: "code",
+            overHidden: true
+          },
+          {
+            label: "规格",
+            prop: "typeNo",
+            overHidden: true
+          },
+          {
+            label: "品牌",
+            prop: "brand",
+            filterable: true,
+            multiple: true,
+            type: "select",
+            props: {
+              label: "dictValue",
+              value: "dictValue"
+            },
+            dicData: [],
+            dataType: "string",
+            overHidden: true,
+            search: true
+          },
+          {
+            label: "花纹",
+            prop: "brandItem",
+            overHidden: true,
+          },
+          {
+            label: "数量",
+            prop: "quantity",
+            overHidden: true,
+          },
+          {
+            label: "数量占比排名",
+            prop: "rankNo",
+            overHidden: true,
+          },
+          {
+            label: "金额",
+            prop: "amount",
+            overHidden: true,
+          }
+        ]
+      }
+    };
+  },
+  async created() {
+    this.option = await this.getColumnData(this.getColumnName(230), this.optionBack);
+    this.getAllWorkDicts()
+  },
+  methods: {
+    getAllWorkDicts() {
+      this.option.height = window.innerHeight - 210;
+      this.getWorkDicts('brand').then(res => {
+        this.findObject(this.option.column, "brand").dicData =
+          res.data.data;
+      })
+      gainUser().then(res => {
+        this.findObject(this.option.column, "chargeMember").dicData =
+          res.data.data;
+      })
+    },
+    cellStyle() {
+      return "padding:0;height:40px;";
+    },
+    searchCriteriaSwitch(type) {
+      if (type) {
+        this.option.height = this.option.height - 46;
+      } else {
+        this.option.height = this.option.height + 46;
+      }
+      this.$refs.crud.getTableHeight();
+    },
+    //点击搜索按钮触发
+    searchChange(params, done) {
+      this.page.currentPage = 1;
+      this.onLoad(this.page, params);
+      done();
+    },
+    refreshChange() {
+      this.onLoad(this.page, this.search);
+    },
+    currentChange(val) {
+      this.page.currentPage = val;
+    },
+    sizeChange(val) {
+      this.page.currentPage = 1;
+      this.page.pageSize = val;
+    },
+    onLoad(page, params = {}) {
+      let data = this.deepClone(Object.assign({}, params, this.search));
+      if (data.date) {
+        data.beginTime = data.date[0]
+        data.endTime = data.date[1]
+        delete data.date
+      }
+      this.loading = true;
+      getList(
+        page.currentPage,
+        page.pageSize,
+        data
+      ).then(res => {
+        this.dataList = res.data.data.records ? res.data.data.records : [];
+        this.page.total = res.data.data.total;
+      }).finally(() => {
+        this.loading = false;
+      });
+    },
+
+    //列保存触发
+    async saveColumn() {
+      const inSave = await this.saveColumnData(this.getColumnName(230), this.option);
+      if (inSave) {
+        this.$message.success("保存成功");
+        //关闭窗口
+        this.$refs.crud.$refs.dialogColumn.columnBox = false;
+      }
+    },
+    async resetColumn() {
+      this.option = this.optionBack;
+      const inSave = await this.delColumnData(this.getColumnName(230), this.optionBack);
+      this.getAllWorkDicts()
+      if (inSave) {
+        this.$message.success("重置成功");
+        this.$refs.crud.$refs.dialogColumn.columnBox = false;
+      }
+    },
+    editOpen(row) {
+    },
+    outExport() {
+      let params = { ...this.search }
+      if (params.date && params.date.length > 0) {
+        params = {
+          ...params,
+          beginTime: params.date[0],
+          endTime: params.date[1],
+        }
+      } else {
+        params = {
+          ...params,
+          beginTime: '',
+          endTime: '',
+        }
+      }
+      window.open(
+        `/api/blade-purchase-sales/exportOrder/specificationsProfitExport?${this.website.tokenHeader
+        }=${getToken()}&beginTime=${params.beginTime}&endTime=${params.endTime}&chargeMember=${params.chargeMember}&brand=${params.brand? params.brand : ''}`
+      );
+    }
+  }
+};
+</script>
+
+<style scoped>
+.page-crad ::v-deep .basic-container__card {
+  height: 94.2vh;
+}
+
+::v-deep .el-table__expanded-cell[class*="cell"] {
+  padding: 0px;
+}
+
+.itemTable ::v-deep .el-table {
+  width: 100%;
+}
+</style>