Browse Source

Merge branch 'dev' of http://git.echepei.com/caojunjie/Smart_platform_ui into dev

QuKatie 3 years ago
parent
commit
1d072d3e7d
43 changed files with 1515 additions and 97 deletions
  1. 56 0
      src/api/application/application.js
  2. 8 0
      src/components/fee-info/config/feeInfo.json
  3. 33 1
      src/components/fee-info/main.vue
  4. 8 0
      src/enums/column-name.js
  5. 15 0
      src/router/views/index.js
  6. 0 1
      src/views/businessManagement/deliveryNotice/configuration/mainList.json
  7. 13 1
      src/views/businessManagement/deliveryNotice/index.vue
  8. 0 1
      src/views/businessManagement/purchaseOrder/configuration/mainList.json
  9. 13 1
      src/views/businessManagement/purchaseOrder/index.vue
  10. 0 1
      src/views/businessManagement/receipt/configuration/mainList.json
  11. 13 1
      src/views/businessManagement/receipt/index.vue
  12. 0 1
      src/views/businessManagement/salesOrder/configuration/mainList.json
  13. 12 0
      src/views/businessManagement/salesOrder/index.vue
  14. 12 0
      src/views/financialManagement/billDetails/billDetails.vue
  15. 0 1
      src/views/financialManagement/billDetails/configuration/mainList.json
  16. 0 1
      src/views/financialManagement/incomeInvoice/configuration/mainList.json
  17. 13 2
      src/views/financialManagement/incomeInvoice/incomeInvoice.vue
  18. 0 1
      src/views/financialManagement/outputInvoice/configuration/mainList.json
  19. 13 2
      src/views/financialManagement/outputInvoice/outputInvoice.vue
  20. 0 1
      src/views/financialManagement/paymentSettle/configuration/mainList.json
  21. 13 1
      src/views/financialManagement/paymentSettle/paymentSettle.vue
  22. 0 1
      src/views/financialManagement/receiptSettle/configuration/mainList.json
  23. 13 1
      src/views/financialManagement/receiptSettle/receiptSettle.vue
  24. 42 12
      src/views/importTrade/invoice/detailsPageEdit.vue
  25. 15 5
      src/views/importTrade/receipt/detailsPageEdit.vue
  26. 1 1
      src/views/maintenance/integral/index.vue
  27. 1 1
      src/views/maintenance/overpayment/index.vue
  28. 0 1
      src/views/maintenance/panicBuyingInformation/configuration/mainList.json
  29. 3 1
      src/views/maintenance/priceManagement/configuration/mainList.json
  30. 24 1
      src/views/maintenance/priceManagement/index.vue
  31. 1 1
      src/views/maintenance/rebate/index.vue
  32. 0 1
      src/views/maintenance/salesPolicy/configuration/mainList.json
  33. 13 1
      src/views/maintenance/salesPolicy/index.vue
  34. 39 13
      src/views/purchase/contract/config/customerContact.json
  35. 127 26
      src/views/purchase/contract/detailsPage.vue
  36. 2 2
      src/views/purchase/contract/index.vue
  37. 2 12
      src/views/salesManagement/salesContract/detailsPage.vue
  38. 170 0
      src/views/statisticAnalysis/royalty/config/mainList.json
  39. 187 0
      src/views/statisticAnalysis/royalty/index.vue
  40. 91 0
      src/views/system/application/config/detailsPage.json
  41. 66 0
      src/views/system/application/config/mainList.json
  42. 291 0
      src/views/system/application/detailsPage.vue
  43. 205 0
      src/views/system/application/index.vue

+ 56 - 0
src/api/application/application.js

@@ -0,0 +1,56 @@
+import request from '@/router/axios';
+
+// 锁定列表查询
+export const appList = (current, size, params) => {
+  return request({
+    url: '/api/store-goods/app/list',
+    method: 'get',
+    params: {
+      ...params,
+      current,
+      size,
+    }
+  })
+}
+export function appSave(data) {
+  return request({
+    url: '/api/store-goods/app/save',
+    method: 'post',
+    data: data
+  })
+}
+export function appUpdate(data) {
+  return request({
+    url: '/api/store-goods/app/update',
+    method: 'post',
+    data: data
+  })
+}
+export function appDetail(id) {
+  return request({
+    url: '/api/store-goods/app/detail',
+    method: 'get',
+    params: {
+      id:id
+    }
+  })
+}
+export function appRemove(id) {
+  return request({
+    url: '/api/store-goods/app/remove',
+    method: 'post',
+    params:{
+      ids:id
+    }
+  })
+}
+export function appDetailRemove(id) {
+  return request({
+    url: '/api/store-goods/appversion/remove',
+    method: 'post',
+    params:{
+      ids:id
+    }
+  })
+}
+

+ 8 - 0
src/components/fee-info/config/feeInfo.json

@@ -34,6 +34,14 @@
       "overHidden": true
     },
     {
+      "label": "提单号",
+      "prop": "billNo",
+      "index": 3,
+      "hide": true,
+      "overHidden": true,
+      "width": 150
+    },
+    {
       "label": "单价",
       "prop": "price",
       "index": 4,

+ 33 - 1
src/components/fee-info/main.vue

@@ -87,6 +87,26 @@
           </breakdown-select>
           <span v-else>{{ row.feeName }}</span>
         </template>
+        <template slot="billNo" slot-scope="{ row }">
+          <el-select
+            v-if="row.$cellEdit"
+            v-model="row.billNo"
+            size="small"
+            filterable
+            allow-create
+            default-first-option
+            clearable
+          >
+            <el-option
+              v-for="(item,index) in billNoList"
+              :key="index"
+              :label="item"
+              :value="item"
+            >
+            </el-option>
+          </el-select>
+          <span v-else>{{ row.billNo }}</span>
+        </template>
         <template slot="price" slot-scope="{ row }">
           <el-input
             v-if="row.$cellEdit"
@@ -329,6 +349,9 @@ export default {
     corpId: {
       type: String
     },
+    billNoList:{
+      type:Array
+    }
   },
   filters: {
     isPercentage(val) {
@@ -343,6 +366,13 @@ export default {
       this.getColumnName(33),
       feeOption
     );
+    if(this.$store.getters.userInfo.tenant_id === '888390'){
+      this.feeOption.column.forEach(item =>{
+        if(item.prop === 'billNo'){
+          item.hide = false
+        }
+      })
+    }
     this.getWorkDicts("currency").then(res => {
       this.currencyList = res.data.data;
     });
@@ -397,7 +427,6 @@ export default {
   methods: {
     //选择费用
     selectValue(value,row){
-      console.log(value)
       this.$set(row,"feeName",value.cname)
       this.$set(row,"ename",value.ename)
       this.currencyChange(row)
@@ -525,6 +554,9 @@ export default {
     //新增
     rowAdd() {
       if (!this.corpId) return this.$message.error('请选择往来单位')
+      if(this.$store.getters.userInfo.tenant_id === '888390'){
+        this.$emit("getBillNo")
+      }
       let corpName = this.corpList.find(item => this.corpId == item.id).cname
       const params = {
         feesType:this.selectTab,

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

@@ -247,6 +247,14 @@ const columnName = [{
     code: 73,
     name: '锁定管理'
   },
+  {
+    code: 74,
+    name: '模块加锁'
+  },
+  {
+    code: 75,
+    name: 'APP应用'
+  },
 ]
 export const getColumnName = (key) => {
   for (let index = 0; index < columnName.length; index++) {

+ 15 - 0
src/router/views/index.js

@@ -626,6 +626,21 @@ export default [{
       component: () => import( /* webpackChunkName: "views" */ '@/views/statisticAnalysis/profit/index')
     }]
   },
+  //利润分析
+  {
+    path: '/statisticAnalysis/royalty/index',
+    component: Layout,
+    hidden: true,
+    children: [{
+      path: '/statisticAnalysis/royalty/index',
+      name: "提成统计",
+      meta: {
+        i18n: '/statisticAnalysis/royalty/index',
+        keepAlive: true,
+      },
+      component: () => import( /* webpackChunkName: "views" */ '@/views/statisticAnalysis/royalty/index')
+    }]
+  },
   // 订单详情
   {
     path: '/orderManagement/orderDetail/index',

+ 0 - 1
src/views/businessManagement/deliveryNotice/configuration/mainList.json

@@ -4,7 +4,6 @@
   "tip": false,
   "stripe": true,
   "addBtnText": "创建单据",
-  "simplePage": true,
   "searchShow": true,
   "searchMenuPosition": "right",
   "dialogWidth": "60%",

+ 13 - 1
src/views/businessManagement/deliveryNotice/index.vue

@@ -22,7 +22,8 @@
                  @on-load="onLoad"
                  @tree-load="treeLoad"
                  @saveColumn="saveColumn"
-                 @resetColumn="resetColumn">
+                 @resetColumn="resetColumn"
+                 @search-criteria-switch="searchCriteriaSwitch">
         <template slot="menuLeft" slot-scope="{size}">
           <el-button type="success" :size="size" @click="copyOrder" :disabled="single">复制单据</el-button>
           <el-button type="info" :size="size" icon="el-icon-printer">报 表</el-button>
@@ -194,6 +195,14 @@ export default {
     }, 100);
   },
   methods: {
+    searchCriteriaSwitch(type){
+      if (type){
+        this.option.height = this.option.height - 140
+      }else {
+        this.option.height = this.option.height + 140
+      }
+      this.$refs.crud.getTableHeight()
+    },
     //删除列表后面的删除按钮触发触发(row, index, done)
     rowDel(row, index, done) {
       this.$confirm("确定将选择数据删除?", {
@@ -359,6 +368,9 @@ export default {
       customerList(queryParams).then(res => {
         this.dataList = res.data.data.records
         this.page.total = res.data.data.total
+        if (this.page.total) {
+          this.option.height = window.innerHeight - 240;
+        }
       }).finally(() => {
         this.loading = false;
       })

+ 0 - 1
src/views/businessManagement/purchaseOrder/configuration/mainList.json

@@ -4,7 +4,6 @@
   "tip": false,
   "stripe": true,
   "addBtnText": "创建单据",
-  "simplePage": true,
   "searchShow": true,
   "searchMenuPosition": "right",
   "dialogWidth": "60%",

+ 13 - 1
src/views/businessManagement/purchaseOrder/index.vue

@@ -20,7 +20,8 @@
                  @on-load="onLoad"
                  @tree-load="treeLoad"
                  @saveColumn="saveColumn"
-                 @resetColumn="resetColumn">
+                 @resetColumn="resetColumn"
+                 @search-criteria-switch="searchCriteriaSwitch">
         <template slot="menuLeft" slot-scope="{size}">
           <el-button type="success" :size="size" icon="el-icon-copy-document" @click="copyOrder" :disabled="single">复制单据</el-button>
           <el-button type="info" :size="size" icon="el-icon-printer">报 表</el-button>
@@ -238,6 +239,14 @@ export default {
     }
   },
   methods: {
+    searchCriteriaSwitch(type){
+      if (type){
+        this.option.height = this.option.height - 90
+      }else {
+        this.option.height = this.option.height + 90
+      }
+      this.$refs.crud.getTableHeight()
+    },
     //删除列表后面的删除按钮触发触发(row, index, done)
     rowDel(row, index, done) {
       this.$confirm("确定将选择数据删除?", {
@@ -396,6 +405,9 @@ export default {
       customerList(queryParams).then(res => {
         this.dataList = res.data.data.records
         this.page.total = res.data.data.total
+        if (this.page.total) {
+          this.option.height = window.innerHeight - 240;
+        }
       }).finally(() => {
         this.loading = false;
       })

+ 0 - 1
src/views/businessManagement/receipt/configuration/mainList.json

@@ -4,7 +4,6 @@
   "tip": false,
   "stripe": true,
   "addBtnText": "创建单据",
-  "simplePage": true,
   "searchShow": true,
   "searchMenuPosition": "right",
   "dialogWidth": "60%",

+ 13 - 1
src/views/businessManagement/receipt/index.vue

@@ -22,7 +22,8 @@
                  @on-load="onLoad"
                  @tree-load="treeLoad"
                  @saveColumn="saveColumn"
-                 @resetColumn="resetColumn">
+                 @resetColumn="resetColumn"
+                 @search-criteria-switch="searchCriteriaSwitch">
         <template slot="menuLeft" slot-scope="{size}">
           <el-button type="success" :size="size" @click="copyOrder" :disabled="single">复制单据</el-button>
           <el-button type="info" :size="size" icon="el-icon-printer">报 表</el-button>
@@ -196,6 +197,14 @@ export default {
     }, 100);
   },
   methods: {
+    searchCriteriaSwitch(type){
+      if (type){
+        this.option.height = this.option.height - 190
+      }else {
+        this.option.height = this.option.height + 190
+      }
+      this.$refs.crud.getTableHeight()
+    },
     //删除列表后面的删除按钮触发触发(row, index, done)
     rowDel(row, index, done) {
       this.$confirm("确定将选择数据删除?", {
@@ -354,6 +363,9 @@ export default {
       customerList(queryParams).then(res => {
         this.dataList = res.data.data.records
         this.page.total = res.data.data.total
+        if (this.page.total) {
+          this.option.height = window.innerHeight - 240;
+        }
       }).finally(() => {
         this.loading = false;
       })

+ 0 - 1
src/views/businessManagement/salesOrder/configuration/mainList.json

@@ -6,7 +6,6 @@
   "lazy": true,
   "tip": false,
   "searchMenuPosition": "right",
-  "simplePage": true,
   "searchShow": true,
   "dialogWidth": "60%",
   "tree": true,

+ 12 - 0
src/views/businessManagement/salesOrder/index.vue

@@ -26,6 +26,7 @@
                  :table-loading="loading"
                  @expand-change="expandChange"
                  @resetColumn="resetColumn"
+                 @search-criteria-switch="searchCriteriaSwitch"
       >
         <template slot-scope="scope" slot="expand">
           <el-table :data="scope.row.insideList" v-loading="scope.row.loading">
@@ -202,6 +203,14 @@ export default {
     }, 100)
   },
   methods: {
+    searchCriteriaSwitch(type){
+      if (type){
+        this.option.height = this.option.height - 190
+      }else {
+        this.option.height = this.option.height + 190
+      }
+      this.$refs.crud.getTableHeight()
+    },
     tableRowClassName({row, column, rowIndex, columnIndex}) {
       if (row.orderStatus == '录入' && columnIndex == 19){
         return {
@@ -415,6 +424,9 @@ export default {
           this.$set(item,'loading', true)
         })
         this.page.total = res.data.data.total
+        if (this.page.total) {
+          this.option.height = window.innerHeight - 240;
+        }
       }).finally(() => {
         this.loading = false;
       })

+ 12 - 0
src/views/financialManagement/billDetails/billDetails.vue

@@ -17,6 +17,7 @@
                @on-load="onLoad"
                @saveColumn="saveColumn"
                @resetColumn="resetColumn"
+               @search-criteria-switch="searchCriteriaSwitch"
     >
       <template slot="corpIdSearch">
         <select-component
@@ -154,10 +155,21 @@
         getBillList(page.currentPage, page.pageSize,params).then(res=>{
           this.dataList = res.data.data.records
           this.page.total = res.data.data.total
+          if (this.page.total) {
+            this.option.height = window.innerHeight - 240;
+          }
         }).finally(()=>{
           this.loading = false;
         })
       },
+      searchCriteriaSwitch(type){
+        if (type){
+          this.option.height = this.option.height - 96
+        }else {
+          this.option.height = this.option.height + 96
+        }
+        this.$refs.crud.getTableHeight()
+      },
       //列保存触发
       async saveColumn() {
         const inSave = await this.saveColumnData(

+ 0 - 1
src/views/financialManagement/billDetails/configuration/mainList.json

@@ -1,7 +1,6 @@
 {
   "lazy": true,
   "tip": false,
-  "simplePage": true,
   "searchShow": true,
   "searchMenuSpan": 24,
   "dialogWidth": "60%",

+ 0 - 1
src/views/financialManagement/incomeInvoice/configuration/mainList.json

@@ -1,7 +1,6 @@
 {
   "lazy": true,
   "tip": false,
-  "simplePage": true,
   "searchShow": true,
   "searchMenuSpan": 16,
   "dialogWidth": "60%",

+ 13 - 2
src/views/financialManagement/incomeInvoice/incomeInvoice.vue

@@ -15,7 +15,8 @@
                @refresh-change="refreshChange"
                @saveColumn="saveColumn"
                @resetColumn="resetColumn"
-               @on-load="onLoad">
+               @on-load="onLoad"
+               @search-criteria-switch="searchCriteriaSwitch">
       <template slot="corpIdSearch">
         <select-component
           v-model="search.corpId"
@@ -190,11 +191,21 @@
         getList(page.currentPage, page.pageSize,params).then(res =>{
           this.dataList = res.data.data.records
           this.page.total = res.data.data.total
+          if (this.page.total) {
+            this.option.height = window.innerHeight - 240;
+          }
         }).finally(()=>{
           this.loading = false
         })
       },
-
+      searchCriteriaSwitch(type){
+        if (type){
+          this.option.height = this.option.height - 96
+        }else {
+          this.option.height = this.option.height + 96
+        }
+        this.$refs.crud.getTableHeight()
+      },
       goBack() {
         this.detailData=this.$options.data().detailData
         this.show = true;

+ 0 - 1
src/views/financialManagement/outputInvoice/configuration/mainList.json

@@ -1,7 +1,6 @@
 {
   "lazy": true,
   "tip": false,
-  "simplePage": true,
   "searchShow": true,
   "searchMenuSpan": 16,
   "dialogWidth": "60%",

+ 13 - 2
src/views/financialManagement/outputInvoice/outputInvoice.vue

@@ -15,7 +15,8 @@
                @refresh-change="refreshChange"
                @saveColumn="saveColumn"
                @resetColumn="resetColumn"
-               @on-load="onLoad">
+               @on-load="onLoad"
+               @search-criteria-switch="searchCriteriaSwitch">
       <template slot="corpIdSearch">
         <select-component
           v-model="search.corpId"
@@ -196,11 +197,21 @@
         getList(page.currentPage, page.pageSize,params).then(res =>{
           this.dataList = res.data.data.records
           this.page.total = res.data.data.total
+          if (this.page.total) {
+            this.option.height = window.innerHeight - 240;
+          }
         }).finally(()=>{
           this.loading = false
         })
       },
-
+      searchCriteriaSwitch(type){
+        if (type){
+          this.option.height = this.option.height - 96
+        }else {
+          this.option.height = this.option.height + 96
+        }
+        this.$refs.crud.getTableHeight()
+      },
       goBack() {
         this.detailData=this.$options.data().detailData
         this.show = true;

+ 0 - 1
src/views/financialManagement/paymentSettle/configuration/mainList.json

@@ -1,7 +1,6 @@
 {
   "lazy": true,
   "tip": false,
-  "simplePage": true,
   "searchShow": true,
   "searchMenuSpan": 16,
   "dialogWidth": "60%",

+ 13 - 1
src/views/financialManagement/paymentSettle/paymentSettle.vue

@@ -15,7 +15,8 @@
                @refresh-change="refreshChange"
                @saveColumn="saveColumn"
                @resetColumn="resetColumn"
-               @on-load="onLoad">
+               @on-load="onLoad"
+               @search-criteria-switch="searchCriteriaSwitch">
       <template slot="corpIdSearch">
         <select-component
           v-model="search.corpId"
@@ -208,10 +209,21 @@
         getList(page.currentPage, page.pageSize,params).then(res =>{
           this.dataList = res.data.data.records
           this.page.total = res.data.data.total
+          if (this.page.total) {
+            this.option.height = window.innerHeight - 240;
+          }
         }).finally(()=>{
           this.loading = false
         })
       },
+      searchCriteriaSwitch(type){
+        if (type){
+          this.option.height = this.option.height - 90
+        }else {
+          this.option.height = this.option.height + 90
+        }
+        this.$refs.crud.getTableHeight()
+      },
 
       goBack() {
         this.detailData=this.$options.data().detailData

+ 0 - 1
src/views/financialManagement/receiptSettle/configuration/mainList.json

@@ -1,7 +1,6 @@
 {
   "lazy": true,
   "tip": false,
-  "simplePage": true,
   "searchShow": true,
   "searchMenuSpan": 16,
   "dialogWidth": "60%",

+ 13 - 1
src/views/financialManagement/receiptSettle/receiptSettle.vue

@@ -15,7 +15,8 @@
                @refresh-change="refreshChange"
                @saveColumn="saveColumn"
                @resetColumn="resetColumn"
-               @on-load="onLoad">
+               @on-load="onLoad"
+               @search-criteria-switch="searchCriteriaSwitch">
       <template slot="corpIdSearch">
         <select-component
           v-model="search.corpId"
@@ -105,6 +106,14 @@
       // this.option.height = window.innerHeight - 200;
     },
     methods: {
+      searchCriteriaSwitch(type){
+        if (type){
+          this.option.height = this.option.height - 90
+        }else {
+          this.option.height = this.option.height + 90
+        }
+        this.$refs.crud.getTableHeight()
+      },
       //新单打开
       addReceipt(row){
         this.detailData = {
@@ -193,6 +202,9 @@
         getList(page.currentPage, page.pageSize,params).then(res =>{
           this.dataList = res.data.data.records
           this.page.total = res.data.data.total
+          if (this.page.total) {
+            this.option.height = window.innerHeight - 240;
+          }
         }).finally(()=>{
           this.loading = false
         })

+ 42 - 12
src/views/importTrade/invoice/detailsPageEdit.vue

@@ -398,7 +398,7 @@ export default {
             ]
           },
           {
-            label: '货日期',
+            label: '货日期',
             prop: 'businessDate',
             type: 'datetime',
             rules: [
@@ -410,7 +410,7 @@ export default {
             ]
           },
           {
-            label: '货人',
+            label: '货人',
             prop: 'arrivalContact',
             rules: [
               {
@@ -421,7 +421,7 @@ export default {
             ]
           },
           {
-            label: '货电话',
+            label: '货电话',
             prop: 'arrivalTel',
             rules: [
               {
@@ -432,7 +432,7 @@ export default {
             ]
           },
           {
-            label: '货地址',
+            label: '货地址',
             prop: 'arrivalAddress',
             rules: [
               {
@@ -455,6 +455,28 @@ export default {
             ]
           },
           {
+            label: '提成标准',
+            prop: 'commissionRate',
+            rules: [
+              {
+                required: false,
+                message: ' ',
+                trigger: 'blur'
+              }
+            ]
+          },
+          {
+            label: '操作提成',
+            prop: 'operatingCommissionRate',
+            rules: [
+              {
+                required: false,
+                message: ' ',
+                trigger: 'blur'
+              }
+            ]
+          },
+          {
             label: '发票重量',
             prop: 'invoiceWeight',
             disabled: true,
@@ -553,10 +575,10 @@ export default {
           delete item.id
         })
         this.contactsData = this.form.orderItemsList
-        this.contractDicList() //合同下拉列
-        this.sumOrderNo();
         delete this.form.orderItemsList
       }).finally(()=>{
+        this.contractDicList() //合同下拉列
+        this.sumOrderNo();
         this.buttonLoading = false
       })
     }
@@ -618,20 +640,24 @@ export default {
     //提单号带出合同号
     bingOut(row) {
       getOrgOrderNo(row.billNo).then(res => {
-        this.contractDic.push(res.data)
         if(res.data.length !== 0){
           row.contractNumber = res.data[0].orderNo
+          res.data.forEach(item =>{
+            this.contractDic.push(item)
+          })
         }else{
-          row.contractNumber = ''
+          this.$set(row,'contractNumber','')
         }
+      }).finally(()=>{
+        this.contractDicList() //合同下拉列
+        this.sumOrderNo(row); //明细列表合成主表合同
+        this.checkCntrNoList(row) //箱号 仓库下拉列表
+        this.selectInventory(row) //查询库存
       })
-      this.contractDicList() //合同下拉列
-      this.sumOrderNo(row); //明细列表合成主表合同
-      this.checkCntrNoList(row) //箱号 仓库下拉列表
-      this.selectInventory(row) //查询库存
     },
     //合同号下拉合计
     contractDicList(){
+      //数组内 对象的某个属性 去重
       this.contractDic = this.contractDic.reduce((all, next) => all.some((atom) => atom['orderNo'] == next['orderNo']) ? all : [...all, next],[]);
     },
     //查询 箱号 仓库list
@@ -658,6 +684,10 @@ export default {
           //再次去重
           this.storageList = this.storageList.reduce((all, next) => all.some((atom) => atom['storageId'] == next['storageId']) ? all : [...all, next],[]);
           this.cntrNoList = this.cntrNoList.reduce((all, next) => all.some((atom) => atom['cntrNo'] == next['cntrNo']) ? all : [...all, next],[]);
+          //默认
+          if(!item.cntrNo){
+            item.cntrNo = this.cntrNoList[0].cntrNo
+          }
         })
       }
     },

+ 15 - 5
src/views/importTrade/receipt/detailsPageEdit.vue

@@ -384,7 +384,7 @@ export default {
               }
             ]
           },{
-            label: '货日期',
+            label: '货日期',
             prop: 'businessDate',
             type:'datetime',
             rules: [
@@ -396,7 +396,7 @@ export default {
             ]
           },
           {
-            label: '货人',
+            label: '货人',
             prop: 'arrivalContact',
             rules: [
               {
@@ -407,7 +407,7 @@ export default {
             ]
           },
           {
-            label: '货电话',
+            label: '货电话',
             prop: 'arrivalTel',
             rules: [
               {
@@ -418,7 +418,7 @@ export default {
             ]
           },
           {
-            label: '货地址',
+            label: '货地址',
             prop: 'arrivalAddress',
             rules: [
               {
@@ -538,7 +538,17 @@ export default {
           //   IQ : _.divide(item.invoiceWeight, item.orderQuantity)
           // }
           delete item.id
-          this.$refs.crudContact.rowCellAdd(item);
+          item.cntrLiang = 2
+          //如果箱量大于1  则根据箱量生成几条收货单明细  并均分发票重量
+          if(item.cntrLiang > 1){
+            let receiptInvoiceWeight =  item.invoiceWeight/item.cntrLiang;
+            for(let i=0;i<item.cntrLiang;i++){
+              item.invoiceWeight = receiptInvoiceWeight
+              this.$refs.crudContact.rowCellAdd(item);
+            }
+          }else{
+            this.$refs.crudContact.rowCellAdd(item);
+          }
           this.$refs.crudContact.rowCell(item,this.contactsData.length - 1)
         })
         this.$set(this.form,'orderNo', Array.from(new Set(orderNoList)).join(","))  // 数组去重逗号隔开 那合同总

+ 1 - 1
src/views/maintenance/integral/index.vue

@@ -157,7 +157,7 @@ export default {
           this.dataList = res.data.data.records ? res.data.data.records : [];
           this.page.total = res.data.data.total;
           if (this.page.total) {
-            this.option.height = window.innerHeight - 260;
+            this.option.height = window.innerHeight - 240;
           }
           this.dataList.forEach(item => {
             this.$set(item,'insideList',[])

+ 1 - 1
src/views/maintenance/overpayment/index.vue

@@ -108,7 +108,7 @@ export default {
           this.dataList = res.data.data.records ? res.data.data.records : [];
           this.page.total = res.data.data.total;
           if (this.page.total) {
-            this.option.height = window.innerHeight - 260;
+            this.option.height = window.innerHeight - 240;
           }
           this.dataList.forEach(item => {
             this.$set(item,'insideList',[])

+ 0 - 1
src/views/maintenance/panicBuyingInformation/configuration/mainList.json

@@ -2,7 +2,6 @@
     "lazy": true,
     "tip": false,
     "stripe": true,
-    "simplePage": true,
     "searchShow": true,
     "searchMenuSpan": 6,
     "dialogWidth": "60%",

+ 3 - 1
src/views/maintenance/priceManagement/configuration/mainList.json

@@ -3,7 +3,9 @@
     "tip": false,
     "stripe": true,
     "searchMenuPosition": "right",
-    "simplePage": true,
+  "searchIcon": true,
+  "searchIndex": 2,
+  "searchSpan": 8,
     "searchShow": true,
     "dialogWidth": "60%",
     "addBtn": false,

+ 24 - 1
src/views/maintenance/priceManagement/index.vue

@@ -7,7 +7,8 @@
         :page.sync="page"
         @search-change="searchChange"
         @on-load="onLoad"
-        @row-update="rowUpdate">
+        @row-update="rowUpdate"
+        @search-criteria-switch="searchCriteriaSwitch">
       <template slot-scope="{ row, index }" slot="salesPrice">
         <el-input
           v-if="row.$cellEdit"
@@ -130,6 +131,17 @@ export default {
       }
     }
   },
+  created() {
+    let i = 0;
+    this.option.column.forEach(item => {
+      if (item.search) i++
+    })
+    if (i % 3 !== 0){
+      const num = 3 - Number(i % 3)
+      this.option.searchMenuSpan = num * 8;
+      this.option.searchMenuPosition = "right";
+    }
+  },
   methods: {
     derivation() {
       this.$confirm("是否下载模板?", "提示", {
@@ -184,8 +196,19 @@ export default {
       customerList(queryParams).then(res => {
         this.data = res.data.data.records
         this.page.total = res.data.data.total
+        if (this.page.total) {
+          this.option.height = window.innerHeight - 240;
+        }
       })
     },
+    searchCriteriaSwitch(type){
+      if (type){
+        this.option.height = this.option.height - 90
+      }else {
+        this.option.height = this.option.height + 90
+      }
+      this.$refs.crud.getTableHeight()
+    },
     rowUpdate(form, index, done) {
       console.log(form)
       typeSave(form).then(res => {

+ 1 - 1
src/views/maintenance/rebate/index.vue

@@ -144,7 +144,7 @@ export default {
         this.dataList = res.data.data.records;
         this.page.total = res.data.data.total;
         if (this.page.total) {
-          this.option.height = window.innerHeight - 260;
+          this.option.height = window.innerHeight - 240;
         }
         this.dataList.forEach(item => {
           this.$set(item,'insideList',[])

+ 0 - 1
src/views/maintenance/salesPolicy/configuration/mainList.json

@@ -2,7 +2,6 @@
   "lazy": true,
   "tip": false,
   "stripe": true,
-  "simplePage": true,
   "searchShow": true,
   "searchIcon": true,
   "searchIndex": 2,

+ 13 - 1
src/views/maintenance/salesPolicy/index.vue

@@ -19,7 +19,8 @@
                  @size-change="sizeChange"
                  @refresh-change="refreshChange"
                  @on-load="onLoad"
-                 @tree-load="treeLoad">
+                 @tree-load="treeLoad"
+                 @search-criteria-switch="searchCriteriaSwitch">
         <template slot-scope="{}" slot="startTimeSearchLabel">
           <span>有效日期:</span>
         </template>
@@ -113,6 +114,14 @@ export default {
     }
   },
   methods: {
+    searchCriteriaSwitch(type){
+      if (type){
+        this.option.height = this.option.height - 95
+      }else {
+        this.option.height = this.option.height + 95
+      }
+      this.$refs.crud.getTableHeight()
+    },
     //删除列表后面的删除按钮触发触发(row, index, done)
     rowDel(row, index, done) {
       this.$confirm("确定将选择数据删除?", {
@@ -246,6 +255,9 @@ export default {
       customerList(queryParams).then(res => {
         this.dataList = res.data.data.records
         this.page.total = res.data.data.total
+        if (this.page.total) {
+          this.option.height = window.innerHeight - 240;
+        }
       })
     },
     //树桩列点击展开触发

+ 39 - 13
src/views/purchase/contract/config/customerContact.json

@@ -101,17 +101,43 @@
       ]
     },
     {
+      "label": "箱量",
+      "prop": "cntrNum",
+      "type": "number",
+      "overHidden": true,
+      "value": 1,
+      "cell": true,
+      "index": 5,
+      "width":120,
+      "rules": [
+        {
+          "required": true,
+          "message": " ",
+          "trigger": "blur"
+        }
+      ]
+    },
+    {
+      "label": "箱型",
+      "prop": "cntrType",
+      "type": "select",
+      "overHidden": true,
+      "cell": true,
+      "index": 6,
+      "width":120
+    },
+    {
       "label": "件数",
       "prop": "orderQuantity",
       "overHidden": true,
-      "index": 5,
+      "index": 7,
       "width":120
     },
     {
       "label": "发票重量(吨)",
       "prop": "invoiceWeight",
       "overHidden": true,
-      "index": 6,
+      "index": 8,
       "width":120,
       "rules": [
         {
@@ -125,21 +151,21 @@
       "label": "码单重量(吨)",
       "prop": "billWeight",
       "overHidden": true,
-      "index": 7,
+      "index": 9,
       "width":120
     },
     {
       "label": "单价",
       "prop": "price",
       "overHidden": true,
-      "index": 8,
+      "index": 10,
       "width":120
     },
     {
       "label": "发票金额",
       "prop": "amount",
       "overHidden": true,
-      "index": 9,
+      "index": 11,
       "width":120,
       "rules": [
         {
@@ -153,7 +179,7 @@
       "label": "已收件数",
       "prop": "actualQuantity",
       "overHidden": true,
-      "index": 10,
+      "index": 12,
       "width":100,
       "rules": [
         {
@@ -167,7 +193,7 @@
       "label": "已收发票重量(吨)",
       "prop": "actualWeight",
       "overHidden": true,
-      "index": 11,
+      "index": 13,
       "width":120,
       "rules": [
         {
@@ -181,7 +207,7 @@
       "label": "税率",
       "prop": "taxRate",
       "overHidden": true,
-      "index": 12,
+      "index": 14,
       "width":120,
       "rules": [
         {
@@ -195,7 +221,7 @@
       "label": "备注",
       "prop": "remarks",
       "overHidden": true,
-      "index": 13,
+      "index": 15,
       "width":200,
       "cell": true,
       "rules": [
@@ -210,7 +236,7 @@
       "label": "创建人",
       "prop": "createUserName",
       "overHidden": true,
-      "index": 14,
+      "index": 16,
       "width":100
     },
     {
@@ -219,14 +245,14 @@
       "type": "date",
       "format": "yyyy-MM-dd HH:mm:ss",
       "overHidden": true,
-      "index": 15,
+      "index": 17,
       "width":160
     },
     {
       "label": "修改人",
       "prop": "updateUserName",
       "overHidden": true,
-      "index": 16,
+      "index": 18,
       "width":100
     },
     {
@@ -235,7 +261,7 @@
       "type": "date",
       "format": "yyyy-MM-dd HH:mm:ss",
       "overHidden": true,
-      "index": 17,
+      "index": 19,
       "width":160
     }
   ]

+ 127 - 26
src/views/purchase/contract/detailsPage.vue

@@ -30,7 +30,7 @@
           </el-dropdown-menu>
         </el-dropdown>
 
-        <el-dropdown style="padding: 0 6px;line-height: 0">
+        <el-dropdown style="padding: 0 6px;line-height: 0" v-if="false">
           <el-button
             type="warning"
             :loading="buttonLoading"
@@ -324,8 +324,10 @@
           :optionType="'JK'"
           @beforeFinance="beforeFinance"
           @afterFinance="afterFinance"
+          @getBillNo="getBillNo"
           feeUrl=""
           :corpId="form.corpId"
+          :billNoList="billNoList"
         />
         <upload-file
           ref="uploadFile"
@@ -477,10 +479,11 @@ export default {
     return {
       form: {},
       disabled: false,
-      customerContact: {},
+      customerContact: customerContact,
       contactsForm: {},
       contactsData: [],
       itemTypeList:[],
+      billNoList:[],
       buttonLoading:false,
       buttonDisabled:false,
       applyPaymentDialog:false,
@@ -804,7 +807,7 @@ export default {
     }
   },
   async created() {
-    this.customerContact = await this.getColumnData(this.getColumnName(37), customerContact);
+    // this.customerContact = await this.getColumnData(this.getColumnName(37), customerContact);
 
     //币别
     this.getWorkDicts("currency").then(res =>{
@@ -910,6 +913,13 @@ export default {
       this.$set(this.form,"billWeight",billList.reduce((n,m) => n + m))
     },
 
+    //获取明细列表提单号list
+    getBillNo(){
+      this.contactsData.forEach(item =>{
+        this.billNoList.push(item.billNo)
+      })
+      this.billNoList = Array.from(new Set(this.billNoList))
+    },
     //费用明细回调
     beforeFinance(feesData,callback){
       let params = {}
@@ -966,6 +976,9 @@ export default {
             if (this.contactsData[j].orderQuantity === (null || "")) {
               return this.$message.error(`请输入采购明细第${j + 1}行的件数`);
             }
+            if (this.contactsData[j].cntrNum === (null || 0)) {
+              return this.$message.error(`采购明细第${j + 1}行的箱量不能为空`);
+            }
             if (this.contactsData[j].invoiceWeight === (null || "")) {
               return this.$message.error(`请输入采购明细第${j + 1}行的发票重量`);
             }
@@ -1024,6 +1037,7 @@ export default {
             item.disabled = this.takeDisabled
           }
         })
+        this.getBillNo()
       }
       if(form.orderFeesList){
         this.orderFeesList = form.orderFeesList
@@ -1100,31 +1114,117 @@ export default {
     //请核
     auditCheck(){
       if(this.verificationData()){
-        this.$confirm("确定审核此订单?", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning"
-        }).then(()=>{
-          this.buttonLoading = true
-          const data = {
-            id : this.form.id,
-            checkType: 'cgqh',
-            url: '/purchase/contract/index',
-            pageStatus:"this.$store.getters.entranceCgStatus",
-            pageLabel:"采购订单",
-            checkFlag: 1,
+        let orderFeesList = this.$refs.feeInfo.submitData();
+        let receivableList = []; //应收
+        let copeWithList = []; //应付
+        orderFeesList.forEach(item =>{
+          if(item.isCheck == "0" && item.feesType == "1"){
+            receivableList.push(item)
           }
-
-          pleaseCheck(data).then(res=>{
-            if(res.data.success){
-              this.$message.success("操作成功!")
-              this.viewDisabled = true
-              this.approverDisabled = true
+          if(item.isCheck == "0" && item.feesType == "2"){
+            copeWithList.push(item)
+          }
+        })
+        // if(receivableList.length!=0 || copeWithList.length!=0 ){
+        //   this.$confirm("有未提交的费用,系统将自动提交,确定要提交吗??", {
+        //     confirmButtonText: "确定",
+        //     cancelButtonText: "取消",
+        //     type: "warning"
+        //   }).then(()=>{
+        //     for(let i=0;i<receivableList.length;i++){
+        //       if(receivableList[i].corpId != this.selectionList[0].corpId){
+        //         return this.$message.error('批量操作结算单位必须一致')
+        //       }
+        //     }
+        //     for(let i=0;i<copeWithList.length;i++){
+        //       if(copeWithList[i].corpId != this.selectionList[0].corpId){
+        //         return this.$message.error('批量操作结算单位必须一致')
+        //       }
+        //     }
+        //
+        //     this.selectionList.map(item =>{
+        //       // item.url = this.billUrl
+        //       item.srcOrderno = params.srcOrderno
+        //       item.srcParentId = params.parentId
+        //       item.corpsName = item.corpName
+        //       item.srcFeesId = item.id
+        //       item.costType = item.itemId
+        //       item.itemType = this.itemType
+        //       item.optionType = this.optionType
+        //       item.srcType = this.srcType   //费用明细申请
+        //       item.tradeType = this.optionType
+        //     })
+        //     let data = {
+        //       billType: type,
+        //       itemsList : this.selectionList,
+        //     }
+        //     if(type === '申请'){
+        //       this.$confirm("您确定申请付费吗?", "提示", {
+        //         confirmButtonText: "确定",
+        //         cancelButtonText: "取消",
+        //         type: "warning",
+        //       }).then(()=>{
+        //         this.buttonLoading = true
+        //
+        //         data.checkType = 'ffsq'
+        //         data.url = '/financialManagement/paymentRequest/index'
+        //         data.pageStatus = 'this.$store.getters.pqStatus'
+        //         data.pageLabel = '付费申请'
+        //
+        //         applyLoan(data).then(res=>{
+        //           if(res.data.success){
+        //             this.$message.success("操作成功!")
+        //             this.$emit("afterFinance")
+        //           }
+        //         }).finally(()=>{
+        //           this.buttonLoading = false
+        //         })
+        //       })
+        //     }else{
+        //       this.$confirm("您确定生成账单吗?", "提示", {
+        //         confirmButtonText: "确定",
+        //         cancelButtonText: "取消",
+        //         type: "warning",
+        //       }).then(()=>{
+        //         this.buttonLoading = true
+        //         paymentApply(data).then(res=>{
+        //           if(res.data.success){
+        //             this.$message.success("操作成功!")
+        //             this.$emit("afterFinance")
+        //           }
+        //         }).finally(()=>{
+        //           this.buttonLoading = false
+        //         })
+        //       })
+        //     }
+        //   })
+        // }else{
+          this.$confirm("确定审核此订单?", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(()=>{
+            this.buttonLoading = true
+            const data = {
+              id : this.form.id,
+              checkType: 'cgqh',
+              url: '/purchase/contract/index',
+              pageStatus:"this.$store.getters.entranceCgStatus",
+              pageLabel:"采购订单",
+              checkFlag: 1,
             }
+
+            pleaseCheck(data).then(res=>{
+              if(res.data.success){
+                this.$message.success("操作成功!")
+                this.viewDisabled = true
+                this.approverDisabled = true
+              }
+            })
+          }).finally(()=>{
+            this.buttonLoading = false
           })
-        }).finally(()=>{
-          this.buttonLoading = false
-        })
+        // }
       }
     },
     //新增商品明细保存触发
@@ -1182,7 +1282,8 @@ export default {
     //录入明细
     commoditySelection() {
       const params = {
-        price:this.form.salesPrice
+        price:this.form.salesPrice,
+        cntrNum:1,
       }
       this.$refs.crudContact.rowCellAdd(params);
     },

+ 2 - 2
src/views/purchase/contract/index.vue

@@ -92,7 +92,7 @@ export default {
   data() {
     return {
       loading:false,
-      option: {},
+      option: option,
       detailData:{},
       dataList: [],
       selectionList:[],
@@ -125,7 +125,7 @@ export default {
     detailPage
   },
   async created() {
-    this.option = await this.getColumnData(this.getColumnName(36), option);
+    // this.option = await this.getColumnData(this.getColumnName(36), option);
   },
   activated() {
     if(!this.show && !this.$store.getters.entranceCgStatus){

+ 2 - 12
src/views/salesManagement/salesContract/detailsPage.vue

@@ -31,7 +31,7 @@
           </el-dropdown-menu>
         </el-dropdown>
 
-        <el-dropdown style="padding: 0 6px;line-height: 0">
+        <el-dropdown style="padding: 0 6px;line-height: 0" v-if="false">
           <el-button
             type="warning"
             :loading="buttonLoading"
@@ -738,16 +738,6 @@ export default {
             ]
           },
           {
-            label: '提成标准',
-            prop: 'commissionRate',
-            rules: [
-              {
-                required: false,
-                message: ' ',
-                trigger: 'blur'
-              }
-            ]
-          },{
             label: "备注",
             span: 24,
             prop: "orderRemark",
@@ -1005,7 +995,7 @@ export default {
     generateShipmentD(){
       if(this.verificationData()) {
         if (this.$store.getters.goStatus) {
-          this.$alert("发货单已存在,请保存发货单再进行操作", "温馨提示", {
+          this.$alert("发货单页面已存在,请关闭发货单再进行操作", "温馨提示", {
             confirmButtonText: "确定",
             type: 'warning',
             callback: action => {

+ 170 - 0
src/views/statisticAnalysis/royalty/config/mainList.json

@@ -0,0 +1,170 @@
+{
+  "lazy": true,
+  "tip": false,
+  "simplePage": true,
+  "searchShow": true,
+  "searchMenuSpan": 8,
+  "dialogWidth": "60%",
+  "align": "center",
+  "searchSpan": 8,
+  "height": "auto",
+  "searchMenuPosition": "right",
+  "border": true,
+  "index": false,
+  "selection": false,
+  "viewBtn": false,
+  "editBtn": false,
+  "delBtn": false,
+  "menuWidth": 170,
+  "dialogClickModal": false,
+  "searchLabelWidth": 120,
+  "searchIcon": true,
+  "searchIndex": 2,
+  "addBtn":false,
+  "menu": false,
+  "headerAlign": "center",
+  "showSummary": true,
+  "summaryText": "合计",
+  "sumColumnList": [
+    {
+      "name": "customDutyMoney",
+      "type": "sum"
+    },
+    {
+      "name": "gstMoney",
+      "type": "sum"
+    },
+    {
+      "name": "quotaMoney",
+      "type": "sum"
+    },
+    {
+      "name": "itemMoney",
+      "type": "sum"
+    },
+    {
+      "name": "unitPrice",
+      "type": "sum"
+    },
+    {
+      "name": "saleBillWeight",
+      "type": "sum"
+    },
+    {
+      "name": "price",
+      "type": "sum"
+    },
+    {
+      "name": "amount",
+      "type": "sum"
+    },
+    {
+      "name": "saleBillWeight",
+      "type": "sum"
+    },
+    {
+      "name": "invoiceAmount",
+      "type": "sum"
+    },
+    {
+      "name": "unitPrice",
+      "type": "sum"
+    },
+    {
+      "name": "costAmount",
+      "type": "sum"
+    },
+    {
+      "name": "deliverMoney",
+      "type": "sum"
+    },
+    {
+      "name": "profit",
+      "type": "sum"
+    }
+  ],
+  "column": [
+    {
+      "label": "姓名",
+      "prop": "name",
+      "width": 170,
+      "search": true
+    },
+    {
+      "label": "销售数量",
+      "children": [
+        {
+          "label": "第一月",
+          "prop": "corpName",
+          "overHidden": true,
+          "width": 170,
+          "index": 1
+        },
+        {
+          "label": "第二月",
+          "prop": "orderNo",
+          "width": 170,
+          "index": 2,
+          "overHidden": true
+        },
+        {
+          "label": "第三月",
+          "prop": "invoiceWeight",
+          "width": 170,
+          "index": 3,
+          "overHidden": true
+        },
+        {
+          "label": "合计",
+          "prop": "customDutyMoney",
+          "width": 170,
+          "index": 4,
+          "overHidden": true
+        }
+      ]
+    },
+    {
+      "label": "提成单价",
+      "prop": "name",
+      "search": true,
+      "width": 170
+    },
+    {
+      "label": "提成金额",
+      "prop": "name",
+      "search": true,
+      "width": 170
+    },
+    {
+      "label": "实领比",
+      "children": [
+        {
+          "label": "60%",
+          "prop": "saleCorpName",
+          "overHidden": true,
+          "width": 170,
+          "index": 10
+        }
+      ]
+    },
+    {
+      "label": "结算金额",
+      "children": [
+        {
+          "label": "已领金额",
+          "prop": "createUserName",
+          "width": 170,
+          "index": 17,
+          "overHidden": true
+        },
+        {
+          "label": "留存金额",
+          "prop": "createUserName",
+          "width": 170,
+          "index": 17,
+          "overHidden": true
+        }
+      ]
+    }
+  ]
+}

+ 187 - 0
src/views/statisticAnalysis/royalty/index.vue

@@ -0,0 +1,187 @@
+<template>
+  <basic-container>
+    <avue-crud :option="option"
+               :data="dataList"
+               ref="crud"
+               v-model="form"
+               :page.sync="page"
+               :search.sync="search"
+               :table-loading="loading"
+               :span-method="spanMethod"
+               @search-change="searchChange"
+               @search-reset="searchReset"
+               @selection-change="selectionChange"
+               @current-change="currentChange"
+               @size-change="sizeChange"
+               @refresh-change="refreshChange"
+               @saveColumn="saveColumn"
+               @resetColumn="resetColumn"
+               @on-load="onLoad">
+      <template slot="menuLeft">
+        <el-button size="small"
+                   type="info"
+                   icon="el-icon-download"
+                   :loading="exportLoading"
+                   @click.stop="downFile"
+        >报表
+        </el-button>
+      </template>
+    </avue-crud>
+  </basic-container>
+</template>
+
+<script>
+  import option from "./config/mainList.json";
+  import { getProfitList } from "@/api/statisticAnalysis/profit";
+  import { contrastList } from "@/util/contrastData";
+
+  export default {
+    data() {
+      return {
+        loading : false,
+        exportLoading:false,
+        form: {},
+        search:{},
+        show:true,
+        detailData:{},
+        option: option,
+        spanArr:[],
+        position:0,
+        parentId:0,
+        dataList: [],
+        page: {
+          pageSize: 10,
+          pagerCount: 5,
+          total: 0,
+        },
+        query:{},
+        configuration:{
+          multipleChoices:false,
+          multiple:false,
+          disabled:false,
+          searchShow:true,
+          collapseTags:false,
+          clearable:true,
+          placeholder:'请点击右边按钮选择',
+          dicData:[]
+        },
+      }
+    },
+    async created() {
+      // this.option = await this.getColumnData(this.getColumnName(66), option);
+    },
+    mounted() {
+
+    },
+    methods: {
+      addReceipt(){
+        console.log('1')
+      },
+      editOpen(){
+        console.log('1')
+      },
+      rowspan() {
+        //记录原始
+        let oldList = [this.dataList[0].name]
+        this.dataList.forEach((item,index)=>{
+          let newList = [item.name]
+          if(index===0){
+            this.spanArr.push(1)
+            this.position=0;
+          }else{
+            //如果循环数据与原始数据相等  那么合并
+            if(!contrastList(oldList,newList)){
+              this.spanArr[this.position] +=1;
+              this.spanArr.push(0)
+            }else{
+              //如果不等 更新原始数据  循环在比较
+              oldList = newList
+              this.spanArr.push(1)
+              this.position = index
+            }
+          }
+        })
+      },
+      spanMethod({ row, column, rowIndex, columnIndex }) {
+        if (column.property === "name") {
+          const _row=this.spanArr[rowIndex];
+          const _col=_row>0?1:0;
+          return {
+            rowspan:_row,
+            colspan:_col
+          }
+        }
+      },
+      //点击搜索按钮触发
+      searchChange(params, done) {
+        this.query = params;
+        this.page.currentPage = 1;
+        this.onLoad(this.page, params);
+        done()
+      },
+      searchReset() {
+        console.log('1')
+      },
+      selectionChange() {
+        console.log('1')
+      },
+      currentChange(val) {
+        this.page.currentPage = val
+      },
+      sizeChange() {
+        console.log('1')
+      },
+      refreshChange() {
+        this.onLoad(this.page);
+      },
+      paramsAdjustment(params) {
+        params = Object.assign({}, this.search);
+        if (params.createTime &&  params.createTime.length !==0 ) {  //发货
+          params.startTime = params.createTime[0]+ " " + "00:00:00";
+          params.endTime = params.createTime[1] + " " + "23:59:59";
+          this.$delete(params,'createTime')
+        }
+        return params
+      },
+      onLoad(page, params) {
+        // this.loading = true;
+        // params = this.paramsAdjustment(params)
+        // getProfitList(page.currentPage, page.pageSize,params).then(res=>{
+        //   this.dataList = res.data.data.records
+        //   this.page.total = res.data.data.total
+        //   this.rowspan()
+        // }).finally(()=>{
+        //   this.loading = false;
+        // })
+      },
+      //列保存触发
+      async saveColumn() {
+        const inSave = await this.saveColumnData(
+          this.getColumnName(66),
+          this.option
+        );
+        if (inSave) {
+          this.$message.success("保存成功");
+          //关闭窗口
+          this.$refs.crud.$refs.dialogColumn.columnBox = false;
+        }
+      },
+      async resetColumn() {
+        const inSave = await this.delColumnData(
+          this.getColumnName(66),
+          option
+        );
+        if (inSave) {
+          this.$message.success("重置成功");
+          this.option = option;
+          //关闭窗口
+          this.$refs.crud.$refs.dialogColumn.columnBox = false;
+        }
+      },
+    }
+  }
+</script>
+
+<style scoped>
+
+</style>

+ 91 - 0
src/views/system/application/config/detailsPage.json

@@ -0,0 +1,91 @@
+{
+  "lazy": true,
+  "tip": false,
+  "simplePage": true,
+  "searchShow": true,
+  "addBtn":false,
+  "editBtn":false,
+  "addRowBtn":false,
+  "cellBtn":false,
+  "cancelBtn":false,
+  "refreshBtn": false,
+  "searchMenuSpan": 6,
+  "align": "center",
+  "delBtn":false,
+  "dialogWidth": "60%",
+  "tree": true,
+  "border": true,
+  "index": true,
+  "selection": false,
+  "menuWidth": 150,
+  "dialogClickModal": false,
+  "column": [
+    {
+      "label": "版本名称",
+      "prop": "versionName",
+      "overHidden": true,
+      "cell":true,
+      "width": 250,
+      "index": 1,
+      "rules": [
+        {
+          "required": true,
+          "message": "请输入版本名称",
+          "trigger": "blur"
+        }
+      ]
+    },
+    {
+      "label": "版本号",
+      "prop": "versionCode",
+      "overHidden": true,
+      "cell":true,
+      "width": 120,
+      "type": "number",
+      "index": 2,
+      "rules": [
+        {
+          "required": true,
+          "message": "请输入版本号",
+          "trigger": "blur"
+        }
+      ]
+    },
+    {
+      "label": "版本描述",
+      "prop": "versionDesc",
+      "overHidden": true,
+      "cell":true,
+      "width": 300,
+      "index": 3
+    },
+    {
+      "label": "下载地址",
+      "prop": "downloadUrl",
+      "overHidden": true,
+      "cell":true,
+      "width": 300,
+      "index": 4
+    },
+    {
+      "label": "是否发布",
+      "prop": "isRelease",
+      "cell": true,
+      "type": "select",
+      "value": 1,
+      "dicData": [
+        {
+        "label": "是",
+        "value": 1
+      },
+        {
+          "label": "否",
+          "value": 0
+        }
+      ],
+      "overHidden": true,
+      "width": 120,
+      "index": 5
+    }
+  ]
+}

+ 66 - 0
src/views/system/application/config/mainList.json

@@ -0,0 +1,66 @@
+{
+  "searchShow": true,
+  "searchMenuSpan": 8,
+  "searchSpan": 8,
+  "border": true,
+  "index": true,
+  "viewBtn": false,
+  "editBtn": false,
+  "delBtn": false,
+  "addBtn": true,
+  "addBtnText": "新单",
+  "align": "center",
+  "menuWidth": "120",
+  "menu": true,
+  "showSummary": true,
+  "searchIcon": true,
+  "searchIndex": 2,
+  "selection": false,
+  "tip":false,
+  "expand": false,
+  "expandWidth": 38,
+  "column": [
+    {
+      "label": "app名称",
+      "prop": "appName",
+      "index": 1,
+      "overHidden": true
+    },
+    {
+      "label": "app应用描述",
+      "prop": "appDesc",
+      "index": 2,
+      "overHidden": true
+    },
+    {
+      "label": "类型",
+      "prop": "type",
+      "type": "select",
+      "search": true,
+      "overHidden": true,
+      "index": 3,
+      "width": 120,
+      "dicData": [
+        {
+          "label": "安卓",
+          "value": "0"
+        },
+        {
+          "label": "苹果",
+          "value": "1"
+        }]
+    },
+    {
+      "label": "苹果appStoreId",
+      "prop": "appStoreId",
+      "index": 4,
+      "overHidden": true
+    },
+    {
+      "label": "苹果bundleId",
+      "prop": "bundleId",
+      "index": 5,
+      "overHidden": true
+    }
+  ]
+}

+ 291 - 0
src/views/system/application/detailsPage.vue

@@ -0,0 +1,291 @@
+<template>
+  <div class="borderless">
+    <div class="customer-head">
+      <div class="customer-back">
+        <el-button type="danger" style="border: none;background: none;color: red" icon="el-icon-arrow-left"
+                   @click="backToList">返回列表
+        </el-button>
+        <div class="upper_right_button">
+          <el-button class="el-button--small-yh"
+                     type="primary"
+                     size="small"
+                     :loading="buttonLoading"
+                     @click.stop="saveData"
+          >保存数据
+          </el-button>
+        </div>
+      </div>
+    </div>
+    <div class="customer-main">
+      <containerTitle title="基础信息"></containerTitle>
+      <basic-container>
+        <avue-form class="trading-form" ref="form" v-model="form" :option="option">
+          <template slot="remark">
+            <el-input type="textarea"
+                      v-model="form.remark"
+                      size="small"
+                      rows="2"
+                      autocomplete="off"
+                      placeholder="">
+            </el-input>
+          </template>
+        </avue-form>
+      </basic-container>
+      <containerTitle title="明细列表"></containerTitle>
+      <basic-container>
+        <avue-crud :option="itemsOption"
+                   :data="dataList"
+                   ref="crud"
+                   v-model="itemsForm"
+                   @search-reset="searchReset"
+                   @row-update="rowUpdate"
+                   @selection-change="selectionChange"
+                   @current-change="currentChange"
+                   @size-change="sizeChange"
+                   @refresh-change="refreshChange">
+          <template slot="menuLeft">
+            <el-button type="primary"
+                       size="small"
+                       :loading="buttonLoading"
+                       @click="addDetail"
+            >录入明细
+            </el-button>
+          </template>
+          <template slot-scope="scope" slot="menu">
+            <el-button
+              type="text"
+              size="small"
+              icon="el-icon-edit"
+              @click.stop="rowCell(scope.row,scope.index)"
+            > {{ scope.row.$cellEdit ? '修改完成' : '修改' }}
+            </el-button>
+            <el-button
+              type="text"
+              size="small"
+              icon="el-icon-delete"
+              @click.stop="rowDel(scope.row,scope.index)"
+            >删除
+            </el-button>
+          </template>
+        </avue-crud>
+      </basic-container>
+    </div>
+  </div>
+</template>
+
+<script>
+  import option from "./config/detailsPage.json";
+  import { contrastObj,contrastList } from "@/util/contrastData";
+  import {appSave  ,appDetail,appDetailRemove} from "@/api/application/application";
+
+  export default {
+    name: "receiptDetailsPage",
+    props: {
+      detailData: {
+        type: Object
+      }
+    },
+    components:{
+
+    },
+    data() {
+      return {
+        buttonLoading:false,
+        form: {},
+        itemsForm:{},
+        dataList: [],
+        itemsOption: option,
+        option: {
+          menuBtn: false,
+          labelWidth: 100,
+          column: [
+            {
+              label: 'app名称',
+              prop: 'appName',
+              span: 8,
+              rules: [
+                {
+                  required: true,
+                  message: ' ',
+                  trigger: 'blur'
+                }
+              ]
+            },{
+              label: '应用描述',
+              prop: 'appDesc',
+              span: 8,
+            },
+            {
+              label: '类型',
+              prop: 'type',
+              type:'select',
+              dicData:[{
+                label:'安卓',
+                value:0,
+              },
+                {
+                  label:'苹果',
+                  value:1,
+                }],
+              span: 8,
+            },
+            {
+              label: '苹果appStoreId',
+              prop: 'appStoreId',
+              span: 8,
+            },
+            {
+              label: '苹果bundleId',
+              prop: 'bundleId',
+              span: 8,
+            },
+            {
+              label: '安卓包名',
+              prop: 'packageName',
+              span: 8,
+            },
+          ],
+        },
+        oldForm:{},
+        oldDataList:[],
+      }
+    },
+    created() {
+      if(this.detailData.id){
+        this.buttonLoading = true
+        appDetail(this.detailData.id).then(res=>{
+          this.afterEcho(res.data.data)
+        }).finally(()=>{
+          this.buttonLoading = false
+        })
+      }
+    },
+    mounted() {
+
+    },
+    methods: {
+      rowUpdate(row, index, done) {
+        done(row);
+      },
+      rowCell(row,index){
+        this.$refs.crud.rowCell(row, index)
+      },
+      rowDel(row,index){
+        this.$confirm("确定将选择数据删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(() => {
+          if(row.id){
+            appDetailRemove(row.id).then(res=>{
+              if(res.data.success){
+                this.$message.success("操作成功!")
+                this.dataList.splice(index, 1);
+              }
+            })
+          }else{
+            this.dataList.splice(index, 1);
+          }
+        })
+      },
+      addDetail(){
+        this.$refs.crud.rowCellAdd();
+      },
+      searchReset() {
+        console.log('1')
+      },
+      selectionChange() {
+        console.log('1')
+      },
+      currentChange() {
+        console.log('1')
+      },
+      sizeChange() {
+        console.log('1')
+      },
+      refreshChange() {
+        console.log('1')
+      },
+      saveData(type){
+        this.buttonLoading = true
+        let params = {
+          ...this.form,
+          appVersionList: this.dataList
+        }
+        appSave(params).then(res =>{
+          if(res.data.success){
+            this.$message.success("操作成功!")
+            this.afterEcho(res.data.data)
+          }
+        }).finally(()=>{
+          this.buttonLoading = false
+          if(type === true){
+            this.$emit("goBack");
+          }
+        })
+      },
+      afterEcho(data){
+        this.form = data
+        this.oldForm = Object.assign({},data);
+
+        if(data.appVersionList){
+          this.dataList = data.appVersionList
+          this.oldDataList = this.deepClone(data.appVersionList)
+        }
+      },
+      verificationData(){
+        if(contrastObj(this.form,this.oldForm) || contrastList(this.dataList,this.oldDataList)
+        ){
+          this.$confirm("数据发生变化,请先提交保存!", "提示", {
+            confirmButtonText: "保存",
+            cancelButtonText: "取消",
+            type: "warning",
+          }).then(() => {
+            this.saveData()
+          }).catch(()=>{
+            return false
+          })
+        }else{
+          return true
+        }
+      },
+      backToList(){
+        if(contrastObj(this.form,this.oldForm) || contrastList(this.dataList,this.oldDataList)
+        ){
+          this.$confirm("是否保存当前页面?", "提示", {
+            confirmButtonText: "保存",
+            cancelButtonText: "取消",
+            type: "warning",
+          }).then(() => {
+            this.saveData(true)
+          }).catch(()=>{
+            this.$emit("goBack");
+          })
+        }else{
+          this.$emit("goBack");
+        }
+      },
+    }
+  }
+</script>
+
+<style lang="scss" scoped>
+::v-deep .el-form-item {
+  margin-bottom: 0;
+}
+
+.trading-form ::v-deep .el-form-item {
+  margin-bottom: 8px !important;
+}
+.required_fields{
+  color: #F56C6C;
+  display:inline-block;
+  width: 7%
+}
+.upper_right_button{
+  display: flex;
+  position: fixed;
+  right: 12px;
+  top: 47px;
+}
+</style>

+ 205 - 0
src/views/system/application/index.vue

@@ -0,0 +1,205 @@
+<template>
+  <div>
+    <basic-container v-if="show">
+      <avue-crud :option="option"
+                 :data="dataList"
+                 ref="crud"
+                 v-model="form"
+                 :page.sync="page"
+                 :search.sync="search"
+                 :table-loading="loading"
+                 :before-open="beforeOpen"
+                 @row-update="rowUpdate"
+                 @row-save="rowSave"
+                 @search-change="searchChange"
+                 @search-reset="searchReset"
+                 @selection-change="selectionChange"
+                 @current-change="currentChange"
+                 @size-change="sizeChange"
+                 @refresh-change="refreshChange"
+                 @saveColumn="saveColumn"
+                 @resetColumn="resetColumn"
+                 @on-load="onLoad">
+        <template slot-scope="scope" slot="menu">
+          <el-button
+            type="text"
+            size="small"
+            @click.stop="editOpen(scope.row)"
+          >编辑
+          </el-button>
+          <el-button
+            type="text"
+            size="small"
+            @click.stop="rowDel(scope.row,scope.index)"
+          >删除
+          </el-button>
+        </template>
+        <template slot-scope="scope" slot="type">
+          <span>{{ scope.row.type === 0?'安卓':'苹果'}}</span>
+        </template>
+      </avue-crud>
+    </basic-container>
+    <detail-page
+      ref="detail"
+      @goBack="goBack"
+      :detailData="detailData"
+      v-else
+    ></detail-page>
+  </div>
+</template>
+
+<script>
+  import option from "./config/mainList.json";
+  import detailPage from "./detailsPage.vue";
+  import {appList, appSave ,appUpdate ,appRemove} from "@/api/application/application";
+
+  export default {
+    data() {
+      return {
+        loading : false,
+        form: {},
+        search:{},
+        show:true,
+        detailData:{},
+        option: option,
+        parentId:0,
+        dataList: [],
+        page: {
+          currentPage: 1,
+          total: 0,
+          pageSize: 10,
+          pageSizes: [10, 50, 100, 200, 300, 400, 500,1000]
+        },
+        query:{},
+      }
+    },
+    components:{
+      detailPage
+    },
+    async created() {
+      // this.option = await this.getColumnData(this.getColumnName(75), option);
+    },
+    mounted() {
+    },
+    methods: {
+      beforeOpen() {
+        this.show = false;
+      },
+      rowSave(row, done, loading) {
+        appSave(row).then(() => {
+          this.onLoad(this.page,this.search);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          done();
+        });
+      },
+      rowUpdate(row, index, done, loading) {
+        appUpdate(row).then(() => {
+          this.onLoad(this.page,this.search);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          done();
+        });
+      },
+      rowDel(row, index, done) {
+        if(row.id){
+          this.$confirm("确定将选择数据删除?", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(() => {
+            appRemove(row.id).then(res =>{
+              if(res.data.success){
+                this.$message.success('操作成功!')
+                this.onLoad(this.page,this.search)
+              }
+            })
+          });
+        }
+      },
+      editOpen(row){
+        this.detailData = {
+          id: row.id
+        };
+        this.show = false;
+      },
+
+      //点击搜索按钮触发
+      searchChange(params, done) {
+        this.query = params;
+        this.page.currentPage = 1;
+        this.onLoad(this.page, params);
+        done()
+      },
+      searchReset() {
+        console.log('1')
+      },
+      selectionChange() {
+        console.log('1')
+      },
+      sizeChange(val) {
+        this.page.currentPage = 1;
+        this.page.pageSize = val;
+      },
+      currentChange(val) {
+        this.page.currentPage = val;
+        this.onLoad(this.page);
+      },
+      refreshChange() {
+        this.onLoad(this.page);
+      },
+      paramsAdjustment(params) {
+        params = Object.assign({}, this.search);
+        return params
+      },
+
+      onLoad(page, params) {
+        this.loading = true;
+        params =  this.paramsAdjustment(params)
+
+        appList(page.currentPage,page.pageSize,params).then(res=>{
+          this.dataList = res.data.data.records
+          this.page.total = res.data.data.total
+          this.loading = false;
+        })
+      },
+      goBack() {
+        this.detailData=this.$options.data().detailData
+        this.show = true;
+        this.onLoad(this.page, this.search)
+      },
+      //列保存触发
+      async saveColumn() {
+        const inSave = await this.saveColumnData(
+          this.getColumnName(75),
+          this.option
+        );
+        if (inSave) {
+          this.$message.success("保存成功");
+          //关闭窗口
+          this.$refs.crud.$refs.dialogColumn.columnBox = false;
+        }
+      },
+      async resetColumn() {
+        const inSave = await this.delColumnData(
+          this.getColumnName(75),
+          option
+        );
+        if (inSave) {
+          this.$message.success("重置成功");
+          this.option = option;
+          //关闭窗口
+          this.$refs.crud.$refs.dialogColumn.columnBox = false;
+        }
+      },
+    }
+  }
+</script>
+
+<style scoped>
+
+</style>