Browse Source

提交配件中电

caojunjie 2 years ago
parent
commit
b18af673c9
25 changed files with 2791 additions and 76 deletions
  1. 8 0
      src/api/bidingDocument/issueTender.js
  2. 150 0
      src/api/financialManagement/zpaymentRequest.js
  3. 156 0
      src/components/bill/billDetails.vue
  4. 155 0
      src/components/bill/config/details.json
  5. 4 0
      src/enums/column-name.js
  6. 13 0
      src/router/views/index.js
  7. 10 0
      src/store/modules/ifdetail.js
  8. 1 0
      src/views/approveData/index.vue
  9. 37 4
      src/views/bidingDocument/issueTender/detailsPageEdit.vue
  10. 34 23
      src/views/boxManagement/buyContainer/detailsPage.vue
  11. 16 3
      src/views/boxManagement/exportShipment/detailsPage.vue
  12. 16 3
      src/views/boxManagement/importReturnTrip/detailsPage.vue
  13. 21 5
      src/views/boxManagement/sellingContainers/detailsPage.vue
  14. 6 4
      src/views/businessManagement/receipt/index.vue
  15. 71 15
      src/views/financialManagement/collectionSettlement/configuration/detailsPage.json
  16. 1 1
      src/views/financialManagement/collectionSettlement/receiptSettleDetailsPage.vue
  17. 72 16
      src/views/financialManagement/paymentSettlement/configuration/detailsPage.json
  18. 1 1
      src/views/financialManagement/paymentSettlement/paymentSettleDetailsPage.vue
  19. 242 0
      src/views/financialManagement/zbillDetails/billDetails.vue
  20. 149 0
      src/views/financialManagement/zbillDetails/configuration/mainList.json
  21. 155 0
      src/views/salesOrderTwo/components/feeInfo.vue
  22. 832 0
      src/views/salesOrderTwo/detailsPage.vue
  23. 346 0
      src/views/salesOrderTwo/index.vue
  24. 294 0
      src/views/salesOrderTwo/js/optionList.js
  25. 1 1
      vue.config.js

+ 8 - 0
src/api/bidingDocument/issueTender.js

@@ -89,3 +89,11 @@ export function confirmWinningTheBid(data) {
         data: data
     })
 }
+//查询系统参数
+export function paramList(data) {
+    return request({
+        url: '/api/blade-system/param/list',
+        method: 'get',
+        params: data
+    })
+}

+ 150 - 0
src/api/financialManagement/zpaymentRequest.js

@@ -0,0 +1,150 @@
+import request from '@/router/axios';
+
+//申请货款
+export const applyLoan = (data) => {
+  return request({
+    url: '/api/trade-finance/settlement/apply',
+    method: 'post',
+    data: data
+  })
+}
+
+//付款申请列表
+export function getList(current,size,params) {
+  return request({
+    url: '/api/trade-finance/settlement/list',
+    method: 'get',
+    params: {
+      ...params,
+      current,
+      size,
+    }
+  })
+}
+
+//删除
+export function remove(id) {
+  return request({
+    url: '/api/trade-finance/settlement/remove',
+    method: 'post',
+    params:{
+      ids:id
+    }
+  })
+}
+
+//明细
+export const getDetails = (id) => {
+  return request({
+    url: '/api/trade-finance/settlement/detail',
+    method: 'get',
+    params: {
+      id:id
+    }
+  })
+}
+
+export const submit = (data) => {
+  return request({
+    url: '/api/trade-finance/settlement/submit',
+    method: 'post',
+    data: data
+  })
+}
+
+//明细
+export const modify = (data) => {
+  return request({
+    url: '/api/trade-finance/settlement/modify',
+    method: 'post',
+    data: data
+  })
+}
+export const cancelModify = (data) => {
+  return request({
+    url: '/api/trade-finance/settlement/cancelModify',
+    method: 'post',
+    data: data
+  })
+}
+
+//结算新增修改
+export const saveOrEdit = (data) => {
+  return request({
+    url: '/api/trade-finance/settlement/saveOrEdit',
+    method: 'post',
+    data: data
+  })
+}
+
+
+
+//付款申请 - 请核
+export const paymentCheck = (data) => {
+  return request({
+    url: '/api/trade-finance/settlement/check',
+    method: 'post',
+    data: data
+  })
+}
+
+//账单明细列表
+export function getBillList(current,size,params) {
+  return request({
+    url: '/api/trade-finance/acc/listLandOrder',
+    // url: '/api/trade-finance/acc/billList',
+    method: 'get',
+    params: {
+      ...params,
+      current,
+      size,
+    }
+  })
+}
+
+// 销售订单到账单明细
+export const paymentApply = (data) => {
+  return request({
+    url: '/api/trade-finance/settlement/paymentApply',
+    method: 'post',
+    data: data
+  })
+}
+
+// 查询客户银行list
+export const getlistBankBy = (corpsId) => {
+  return request({
+    url: '/api/blade-client/client/listBankByCorpId',
+    method: 'get',
+    params: {
+      corpsId:corpsId
+    }
+  })
+}
+
+// 明细删除
+export function deleteDetail(data) {
+  return request({
+    url: '/api/trade-finance/items/remove',
+    method: 'post',
+    params: data
+  })
+}
+
+// 账单明细删除
+export function removeDetail(data) {
+  return request({
+    url: '/api/trade-finance/acc/remove',
+    method: 'post',
+    params: data
+  })
+}
+
+// 查询客户银行list
+export function getlistAll(data){
+  return request({
+    url: '/api/blade-client/corpsdesc/listAll',
+    method: 'get',
+    params:data
+  })
+}

+ 156 - 0
src/components/bill/billDetails.vue

@@ -0,0 +1,156 @@
+<template>
+  <div>
+    <avue-crud :option="option"
+               :table-loading="loading"
+               :data="data"
+               :search.sync="search"
+               ref="crud"
+               @refresh-change="refreshChange"
+               @selection-change="selectionChange"
+               @search-change="searchChange"
+               @saveColumn="saveColumn"
+               @resetColumn="resetColumn"
+               :page.sync="page"
+               @on-load="onLoad">
+      <template slot="costTypeSearch">
+        <breakdown-select
+            v-model="search.costType"
+            :configuration="breakConfiguration"
+        ></breakdown-select>
+      </template>
+      <template slot-scope="scope" slot="costType">
+        <span>{{ scope.row.itemName }}</span>
+      </template>
+    </avue-crud>
+    <div class="dialogButton">
+       <span slot="footer" class="dialog-footer" >
+           <el-button @click="$emit('closeFun')">取 消</el-button>
+           <el-button type="primary" @click="importProMent" :disabled="selectList.length == 0">导入</el-button>
+       </span>
+    </div>
+  </div>
+</template>
+
+<script>
+import option from './config/details.json'
+import { getBillList } from "@/api/financialManagement/zpaymentRequest";
+
+export default {
+  name: "index",
+  props: {
+    billType:{
+      type: String
+    },
+    flag:{
+      type: Number
+    },
+    params:{
+      type: Object
+    },
+    itemId: {
+      type: String
+    },
+    closeFun: {
+      type: Function
+    }
+  },
+  data(){
+    return {
+      option:option,
+      loading:false,
+      search:{},
+      data:[],
+      selectList:[],
+      page: {
+        pageSize: 10,
+        pagerCount: 5,
+        total: 0,
+      },
+      breakConfiguration:{
+        multipleChoices:false,
+        multiple:false,
+        disabled:false,
+        searchShow:true,
+        collapseTags:false,
+        clearable:true,
+        placeholder:'请点击右边按钮选择',
+        dicData:[]
+      },
+    }
+  },
+  watch:{
+    'params.corpId' (newVal,oldVal){
+      if(newVal != oldVal){
+        this.onLoad(this.page, this.search)
+      }
+    }
+  },
+  async created() {
+    // this.option = await this.getColumnData(this.getColumnName(45), option);
+  },
+  methods:{
+    refreshChange(){
+      this.onLoad(this.page);
+    },
+    searchChange(params,done){
+      if (params.createStart){
+        params.createStartDate = params.createStart[0]
+        params.createEndDate = params.createStart[1]
+      }
+      this.onLoad(this.page, params);
+      done()
+    },
+    selectionChange(row){
+      this.selectList = row
+    },
+    onLoad(page, params){
+      this.loading = true;
+      params = {
+        ...params,
+        ...this.params
+      }
+      params.billType = this.billType
+      if (this.$store.getters.userInfo.tenant_id === "673511") {
+        params.type = "CMY"
+      }
+      params.flag = this.flag
+      getBillList(page.currentPage, page.pageSize,params).then(res=>{
+        this.data = res.data.data.records
+        this.page.total = res.data.data.total
+      }).finally(()=>{
+        this.loading = false;
+      })
+    },
+    importProMent(){
+      this.$emit('importProMent',this.selectList);
+    },
+    async resetColumn() {
+      const inSave = await this.delColumnData(
+          this.getColumnName(45),
+          option
+      );
+      if (inSave) {
+        this.$message.success("重置成功");
+        this.option = option;
+        //关闭窗口
+        this.$refs.crud.$refs.dialogColumn.columnBox = false;
+      }
+    },
+    //列保存触发
+    async saveColumn() {
+      const inSave = await this.saveColumnData(
+          this.getColumnName(45),
+          this.option
+      );
+      if (inSave) {
+        this.$message.success("保存成功");
+        //关闭窗口
+        this.$refs.crud.$refs.dialogColumn.columnBox = false;
+      }
+    },
+  }
+}
+</script>
+<style scoped>
+
+</style>

+ 155 - 0
src/components/bill/config/details.json

@@ -0,0 +1,155 @@
+{
+  "lazy": true,
+  "tip": false,
+  "simplePage": false,
+  "searchShow": true,
+  "addBtn":false,
+  "editBtn":false,
+  "addRowBtn":false,
+  "cellBtn":false,
+  "cancelBtn":false,
+  "refreshBtn": false,
+  "searchMenuPosition": "right",
+  "searchMenuSpan": 24,
+  "searchSpan": 8,
+  "align": "center",
+  "delBtn":true,
+  "dialogWidth": "60%",
+  "tree": true,
+  "border": true,
+  "index": true,
+  "selection": true,
+  "menu": false,
+  "menuWidth": 0,
+  "searchIcon": true,
+  "searchIndex": 2,
+  "dialogClickModal": false,
+  "showSummary": true,
+  "summaryText": "合计",
+  "sumColumnList": [
+    {
+      "name": "amount",
+      "type": "sum"
+    },
+    {
+      "name": "settlementAmount",
+      "type": "sum"
+    },
+    {
+      "name": "invoiceAmount",
+      "type": "sum"
+    }
+  ],
+  "column": [
+    {
+      "label": "单据来源",
+      "prop": "billType",
+      "type": "select",
+      "search": true,
+      "overHidden": true,
+      "width": 120,
+      "dicData": [
+        {
+          "label": "付费",
+          "value": "申请"
+        },
+        {
+          "label": "收费",
+          "value": "收费"
+        }
+      ]
+    },{
+      "label": "费用名称",
+      "prop": "costType",
+      "search": true,
+      "overHidden": true,
+      "width": 150
+    },
+    {
+      "label": "车队",
+      "prop": "fleetName",
+      "overHidden": true,
+      "width": 120
+    },
+    {
+      "label": "车号",
+      "prop": "plateNo",
+      "search": true,
+      "overHidden": true,
+      "width": 120
+    },
+    {
+      "label": "箱型",
+      "prop": "ctnType",
+      "overHidden": true,
+      "width": 120
+    },
+    {
+      "label": "场站",
+      "prop": "departureHarbor",
+      "overHidden": true,
+      "width": 120
+    },
+    {
+      "label": "货运地点",
+      "prop": "objectiveHarbor",
+      "search": true,
+      "overHidden": true,
+      "width": 120
+    },
+    {
+      "label": "运输调度",
+      "prop": "shipName",
+      "overHidden": true,
+      "width": 120
+    },
+    {
+      "label": "货运日期",
+      "prop": "srcDate",
+      "searchProp": "srcDateList",
+      "search": true,
+      "overHidden": true,
+      "type": "date",
+      "searchRange": true,
+      "searchDefaultTime": [
+        "00:00:00",
+        "23:59:59"
+      ],
+      "format": "yyyy-MM-dd",
+      "valueFormat": "yyyy-MM-dd HH:mm:ss",
+      "width": 120
+    },
+    {
+      "label": "提单号",
+      "prop": "accSysNo",
+      "search": true,
+      "overHidden": true,
+      "width": 120
+    },
+    {
+      "label": "平台号",
+      "prop": "srcBillNo",
+      "overHidden": true,
+      "search": true,
+      "width": 120
+    },
+    {
+      "label": "费用",
+      "prop": "amount",
+      "overHidden": true,
+      "width": 120
+    },
+    {
+      "label": "客户",
+      "prop": "corpName",
+      "overHidden": true,
+      "width": 120
+    },
+    {
+      "label": "业务员",
+      "prop": "createUserName",
+      "overHidden": true,
+      "width": 120
+    }
+  ]
+}

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

@@ -203,6 +203,10 @@ const columnName = [{
   name: '财务账单明细'
 },
 {
+  code: 60.2,
+  name: '财务账单明细(Z)'
+},
+{
   code: 61,
   name: '财务付费申请'
 },

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

@@ -1922,6 +1922,19 @@ export default [{
     component: () => import( /* webpackChunkName: "views" */ '@/views/salesOrder/index')
   }]
 }, {
+  path: '/salesOrderTwo/index',
+  component: Layout,
+  hidden: true,
+  children: [{
+    path: '/salesOrderTwo/index',
+    name: '销售计划单',
+    meta: {
+      i18n: '/salesOrderTwo/index',
+      keepAlive: true,
+    },
+    component: () => import( /* webpackChunkName: "views" */ '@/views/salesOrderTwo/index')
+  }]
+}, {
   path: '/purchaseOrder/index',
   component: Layout,
   hidden: true,

+ 10 - 0
src/store/modules/ifdetail.js

@@ -28,6 +28,7 @@ const ifdetail = {
     xsjhStatus: false,
     ckglStatus: false, //出口报价
     pjxsStatus:false,
+    pjxsStatusTwo:false,
     pjcgStatus:false
   },
   actions: {},
@@ -93,6 +94,9 @@ const ifdetail = {
     IN_PJXS_STATUS(state) {
       state.pjxsStatus = true;
     },
+    IN_PJXS_STATUS_TWO(state) {
+      state.pjxsStatusTwo = true;
+    },
     IN_PJCG_STATUS(state) {
       state.pjcgStatus = true;
     },
@@ -106,6 +110,9 @@ const ifdetail = {
     OUT_PJXS_STATUS(state) {
       state.pjxsStatus = false;
     },
+    OUT_PJXS_STATUS_TWO(state) {
+      state.pjxsStatusTwo = false;
+    },
     OUT_PJCG_STATUS(state) {
       state.pjcgStatus = false;
     },
@@ -291,6 +298,9 @@ const ifdetail = {
       if(tag.label=='销售单'){
         state.pjxsStatus = true;
       }
+      if(tag.label=='销售计划单'){
+        state.pjxsStatusTwo = true;
+      }
       if(tag.label=='采购单'){
         state.pjcgStatus = true;
       }

+ 1 - 0
src/views/approveData/index.vue

@@ -38,6 +38,7 @@
         <span v-else-if="scope.row.checkType == 'BGCK'">报关出口</span>
         <span v-else-if="scope.row.checkType == 'YPJ-XS'">易配件销售</span>
         <span v-else-if="scope.row.checkType == 'YPJ-CG'">易配件采购</span>
+        <span v-else-if="scope.row.checkType == 'YPJ-XSJH'">销售计划</span>
       </template>
       <template slot="menuLeft">
         <el-button size="small" type="success" :disabled="selectionList.length == 0" @click.stop="batchCheck">批量审批

+ 37 - 4
src/views/bidingDocument/issueTender/detailsPageEdit.vue

@@ -11,7 +11,12 @@
         </el-button>
       </div>
       <div>
-        <div class="el-button&#45;&#45;small-yh add-customer-btn">
+        <div class="el-button&#45;&#45;small-yh add-customer-btn" v-if="param.paramValue == 1">
+          <el-button type="success" size="small" @click="release()" :disabled="form.status !== 0">发布</el-button>
+          <el-button type="warning" size="small" @click="toVoid()" :disabled="form.status !== 4">取消发布</el-button>
+          <el-button type="primary" size="small" @click="storage()">保存</el-button>
+        </div>
+        <div class="el-button&#45;&#45;small-yh add-customer-btn" v-else>
           <el-button type="success" size="small" @click="release()" :disabled="form.status !== 3">发布</el-button>
           <el-button type="warning" size="small" @click="pleaseCheck()" :disabled="form.status !== 0">请核</el-button>
           <el-button type="warning" size="small" @click.stop="checkDialog = true,checkData = detailData.check" v-if="checkDisabled">审批</el-button>
@@ -224,7 +229,7 @@ import {
   saveSaveList,
   boxDelete,
   agentDelete,
-  confirmRelease, confirmVoid, confirmPleaseCheck, confirmWinningTheBid,allList
+  confirmRelease, confirmVoid, confirmPleaseCheck, confirmWinningTheBid,allList,paramList
 } from "@/api/bidingDocument/issueTender";
 import check from "@/components/check/check";
 import checkSchedule from "@/components/check/checkSchedule";
@@ -232,6 +237,7 @@ import {dateFormat} from "@/util/date";
 import option from "@/components/selectComponent/configuration/mainList.json";
 import {customerList, getDeptLazyTree} from "@/api/basicData/customerInformation";
 import {customerParameter} from "@/enums/management-type";
+import {getDictionary} from "@/api/system/dictbiz";
 export default {
   name: "detailsPageEdit",
   components:{
@@ -730,6 +736,7 @@ export default {
       dataListBox: [],
       dataListAgent: [],
       dataListBid: [],
+      param:{},
       checkDisabled:false
     }
   },
@@ -742,6 +749,17 @@ export default {
     }
   },
   async created() {
+    paramList({
+      paramKey:"release.approval",
+      current:1,
+      size:10
+    }).then(res=>{
+      for (let item of res.data.data.records){
+        if (item.paramKey === "release.approval"){
+          this.param = item
+        }
+      }
+    })
     this.option = await this.getColumnData(this.getColumnName(47), option);
     if (this.id) {
       this.refreshData(this.id)
@@ -980,6 +998,12 @@ export default {
               contrastList: this.dataListBid
             }
             this.fullscreenLoading = true
+            const loading = this.$loading({
+              lock: true,
+              text: '发布中',
+              spinner: 'el-icon-loading',
+              background: 'rgba(255,255,255,0.7)'
+            });
             saveSaveList(form).then(res => {
               const data = {
                 id: res.data.data.id,
@@ -992,10 +1016,12 @@ export default {
                   type: 'success',
                   message: '请核成功!'
                 });
+                loading.close();
                 this.refreshData(this.form.id)
               })
-            }).finally(() => {
-              this.fullscreenLoading = false
+            }).catch(()=>{
+              loading.close();
+              this.fullscreenLoading = false;
             })
           }).catch(() => {
             this.$message({
@@ -1064,7 +1090,14 @@ export default {
         cancelButtonText: '取消',
         type: 'warning'
       }).then(() => {
+        const loading = this.$loading({
+          lock: true,
+          text: '发布中',
+          spinner: 'el-icon-loading',
+          background: 'rgba(255,255,255,0.7)'
+        });
         confirmRelease({id:this.form.id}).then(res=>{
+          loading.close();
           this.$message({
             type: 'success',
             message: '发布成功!'

+ 34 - 23
src/views/boxManagement/buyContainer/detailsPage.vue

@@ -19,9 +19,10 @@
           </el-button>
           <el-dropdown-menu slot="dropdown">
             <el-dropdown-item @click.native="pleaseCheck" :disabled="form.status>0">请核数据</el-dropdown-item>
-            <el-dropdown-item @click.native="checkScheduleDialog = true,checkId = form.id">审核进度</el-dropdown-item>
+            <el-dropdown-item @click.native="checkScheduleDialog = true,checkId = form.id" :disabled="!form.id">审核进度</el-dropdown-item>
             <el-dropdown-item @click.native="repealCancel" :disabled="form.status === 0 || !form.status" v-if="!detailData.id">撤销请核</el-dropdown-item>
-            <!--            <el-dropdown-item @click.native="changeApproveOpen">特殊审批</el-dropdown-item>-->
+            <el-dropdown-item @click.native="checkDialog = true,checkData = detailData.check;" v-if="detailData.id">特殊审批
+            </el-dropdown-item>
           </el-dropdown-menu>
         </el-dropdown>
         <el-button class="el-button--small-yh" type="primary" size="small" :disabled="form.status>0"
@@ -124,6 +125,11 @@
           @choceScheduleFun="choceScheduleFun"
       ></check-schedule>
     </el-dialog>
+    <el-dialog append-to-body title="审批" class="el-dialogDeep" :visible.sync="checkDialog" width="50%"
+               :close-on-click-modal="false" :destroy-on-close="true" :close-on-press-escape="false" v-dialog-drag>
+      <check :checkData="checkData" :checkDetail="false" :idList="[]" @choceCheckFun="choceCheckFun">
+      </check>
+    </el-dialog>
   </div>
 </template>
 
@@ -144,42 +150,42 @@ import checkSchedule from "@/components/check/checkSchedule";
 import {selectByName} from "@/api/boxManagement";
 import {getToken} from "@/util/auth";
 import {itemDetails} from "@/api/boxManagement/leaseIn";
+import check from "@/components/check/check";
 export default {
   name: "detailsPage",
   props: {
     onLoad: Object,
     detailData: Object
   },
-  components:{checkSchedule,reportDialog},
+  components:{checkSchedule,reportDialog,check},
   data() {
     return {
       key: 0,
+      checkData: {},
+      checkDialog: false,
       switchDialog: false,
       excelBox: false,
       excelOption: {
         submitBtn: false,
         emptyBtn: false,
-        column: [
-          {
-            label: "模板下载",
-            prop: "excelTemplate",
-            formslot: true,
-            span: 24
+        column: [{
+          label: "模板下载",
+          prop: "excelTemplate",
+          formslot: true,
+          span: 24
+        }, {
+          label: "模板上传",
+          prop: "excelFile",
+          type: "upload",
+          drag: true,
+          loadText: "模板上传中,请稍等",
+          span: 24,
+          propsHttp: {
+            res: "data"
           },
-          {
-            label: "模板上传",
-            prop: "excelFile",
-            type: "upload",
-            drag: true,
-            loadText: "模板上传中,请稍等",
-            span: 24,
-            propsHttp: {
-              res: "data"
-            },
-            tip: "请上传 .xls,.xlsx 标准格式文件",
-            action: "/api/blade-box-tube/tradingBoxRent/import-tradingBox-info"
-          }
-        ]
+          tip: "请上传 .xls,.xlsx 标准格式文件",
+          action: "/api/blade-box-tube/tradingBoxRent/import-tradingBox-info"
+        }]
       },
       excelForm: {},
       checkScheduleDialog: false,
@@ -572,6 +578,10 @@ export default {
     }
   },
   methods: {
+    //关闭审核
+    choceCheckFun() {
+      this.checkDialog = false;
+    },
     // 报表
     openReport() {
       this.switchDialog = !this.switchDialog;
@@ -639,6 +649,7 @@ export default {
         //附件和顶部按钮
         this.disabled = false
       }
+      this.key++
     },
     // 明细删除
     rowDel(row, index, type) {

+ 16 - 3
src/views/boxManagement/exportShipment/detailsPage.vue

@@ -19,11 +19,12 @@
           </el-button>
           <el-dropdown-menu slot="dropdown">
             <el-dropdown-item @click.native="pleaseCheck" :disabled="form.status>0">请核数据</el-dropdown-item>
-            <el-dropdown-item @click.native="checkScheduleDialog = true,checkId = form.id">审核进度</el-dropdown-item>
+            <el-dropdown-item @click.native="checkScheduleDialog = true,checkId = form.id" :disabled="!form.id">审核进度</el-dropdown-item>
             <el-dropdown-item @click.native="repealCancel" :disabled="form.status === 0 || !form.status"
                               v-if="!detailData.id">撤销请核
             </el-dropdown-item>
-            <!--            <el-dropdown-item @click.native="changeApproveOpen">特殊审批</el-dropdown-item>-->
+            <el-dropdown-item @click.native="checkDialog = true,checkData = detailData.check;" v-if="detailData.id">特殊审批
+            </el-dropdown-item>
           </el-dropdown-menu>
         </el-dropdown>
         <el-button class="el-button--small-yh" type="primary" size="small" :disabled="form.status>0"
@@ -231,6 +232,11 @@
         </avue-crud>
       </span>
     </el-dialog>
+    <el-dialog append-to-body title="审批" class="el-dialogDeep" :visible.sync="checkDialog" width="50%"
+               :close-on-click-modal="false" :destroy-on-close="true" :close-on-press-escape="false" v-dialog-drag>
+      <check :checkData="checkData" :checkDetail="false" :idList="[]" @choceCheckFun="choceCheckFun">
+      </check>
+    </el-dialog>
   </div>
 </template>
 
@@ -251,15 +257,18 @@ import {dateFormat} from "@/util/date";
 import {getToken} from "@/util/auth";
 import reportDialog from "@/components/report-dialog/main.vue";
 
+import check from "@/components/check/check";
 export default {
   name: "detailsPage",
   props: {
     onLoad: Object,
     detailData: Object
   },
-  components: {checkSchedule,reportDialog},
+  components: {checkSchedule,reportDialog,check},
   data() {
     return {
+      checkData: {},
+      checkDialog: false,
       switchDialog: false,
       excelBox: false,
       excelOption: {
@@ -782,6 +791,10 @@ export default {
     this.key++
   },
   methods: {
+    //关闭审核
+    choceCheckFun() {
+      this.checkDialog = false;
+    },
     // 报表
     openReport() {
       this.switchDialog = !this.switchDialog;

+ 16 - 3
src/views/boxManagement/importReturnTrip/detailsPage.vue

@@ -19,10 +19,11 @@
           </el-button>
           <el-dropdown-menu slot="dropdown">
             <el-dropdown-item @click.native="pleaseCheck" :disabled="form.status>0">请核数据</el-dropdown-item>
-            <el-dropdown-item @click.native="checkScheduleDialog = true,checkId = form.id">审核进度</el-dropdown-item>
+            <el-dropdown-item @click.native="checkScheduleDialog = true,checkId = form.id" :disabled="!form.id">审核进度</el-dropdown-item>
             <el-dropdown-item @click.native="repealCancel" :disabled="form.status === 0 || !form.status" v-if="!detailData.id">撤销请核
             </el-dropdown-item>
-            <!--            <el-dropdown-item @click.native="changeApproveOpen">特殊审批</el-dropdown-item>-->
+            <el-dropdown-item @click.native="checkDialog = true,checkData = detailData.check;" v-if="detailData.id">特殊审批
+            </el-dropdown-item>
           </el-dropdown-menu>
         </el-dropdown>
         <el-button class="el-button--small-yh" type="primary" size="small" :disabled="form.status>0"
@@ -230,6 +231,11 @@
         </avue-crud>
       </span>
     </el-dialog>
+    <el-dialog append-to-body title="审批" class="el-dialogDeep" :visible.sync="checkDialog" width="50%"
+               :close-on-click-modal="false" :destroy-on-close="true" :close-on-press-escape="false" v-dialog-drag>
+      <check :checkData="checkData" :checkDetail="false" :idList="[]" @choceCheckFun="choceCheckFun">
+      </check>
+    </el-dialog>
   </div>
 </template>
 
@@ -249,6 +255,7 @@ import {selectArchivesList} from "@/api/boxManagement/buyContainer";
 import {dateFormat} from "@/util/date";
 import {getToken} from "@/util/auth";
 import reportDialog from "@/components/report-dialog/main.vue";
+import check from "@/components/check/check.vue";
 
 export default {
   name: "detailsPage",
@@ -256,9 +263,11 @@ export default {
     onLoad: Object,
     detailData: Object
   },
-  components: {checkSchedule,reportDialog},
+  components: {checkSchedule,reportDialog,check},
   data() {
     return {
+      checkData: {},
+      checkDialog: false,
       excelBox: false,
       switchDialog: false,
       excelOption: {
@@ -786,6 +795,10 @@ export default {
     this.key++
   },
   methods: {
+    //关闭审核
+    choceCheckFun() {
+      this.checkDialog = false;
+    },
     // 报表
     openReport() {
       this.switchDialog = !this.switchDialog;

+ 21 - 5
src/views/boxManagement/sellingContainers/detailsPage.vue

@@ -19,9 +19,10 @@
           </el-button>
           <el-dropdown-menu slot="dropdown">
             <el-dropdown-item @click.native="pleaseCheck" :disabled="form.status>0">请核数据</el-dropdown-item>
-            <el-dropdown-item @click.native="checkScheduleDialog = true,checkId = form.id">审核进度</el-dropdown-item>
+            <el-dropdown-item @click.native="checkScheduleDialog = true,checkId = form.id" :disabled="!form.id">审核进度</el-dropdown-item>
             <el-dropdown-item @click.native="repealCancel" :disabled="form.status === 0 || !form.status" v-if="!detailData.id">撤销请核</el-dropdown-item>
-            <!--            <el-dropdown-item @click.native="changeApproveOpen">特殊审批</el-dropdown-item>-->
+            <el-dropdown-item @click.native="checkDialog = true,checkData = detailData.check;" v-if="detailData.id">特殊审批
+            </el-dropdown-item>
           </el-dropdown-menu>
         </el-dropdown>
         <el-button class="el-button--small-yh" type="primary" size="small" :disabled="form.status>0"
@@ -32,8 +33,11 @@
     <trade-card title="基础资料" style="margin-top: 50px">
       <avue-form :option="optionForm" v-model="form" ref="form">
         <template slot="purchaseCompanyId" slot-scope="scope">
-          <crop-select v-model="form.purchaseCompanyId" @getCorpData="(row)=>{getGSData(row,['form','purchaseCompanyName'])}" :disabled="scope.disabled"
-                       corpType="KH"/>
+          <crop-select
+              v-model="form.purchaseCompanyId"
+              @getCorpData="(row)=>{getGSData(row,['form','purchaseCompanyName'])}"
+              :disabled="scope.disabled"
+              corpType="KH"/>
         </template>
       </avue-form>
     </trade-card>
@@ -123,6 +127,11 @@
           @choceScheduleFun="choceScheduleFun"
       ></check-schedule>
     </el-dialog>
+    <el-dialog append-to-body title="审批" class="el-dialogDeep" :visible.sync="checkDialog" width="50%"
+               :close-on-click-modal="false" :destroy-on-close="true" :close-on-press-escape="false" v-dialog-drag>
+      <check :checkData="checkData" :checkDetail="false" :idList="[]" @choceCheckFun="choceCheckFun">
+      </check>
+    </el-dialog>
   </div>
 </template>
 
@@ -143,15 +152,18 @@ import {selectByName} from "@/api/boxManagement";
 import reportDialog from "@/components/report-dialog/main.vue";
 import {getToken} from "@/util/auth";
 import {itemDetails} from "@/api/boxManagement/leaseIn";
+import check from "@/components/check/check";
 export default {
   name: "detailsPage",
   props: {
     onLoad: Object,
     detailData: Object
   },
-  components:{checkSchedule,reportDialog},
+  components:{checkSchedule,reportDialog,check},
   data() {
     return {
+      checkData: {},
+      checkDialog: false,
       switchDialog: false,
       excelBox: false,
       excelOption: {
@@ -579,6 +591,10 @@ export default {
     }
   },
   methods: {
+    //关闭审核
+    choceCheckFun() {
+      this.checkDialog = false;
+    },
     // 报表
     openReport() {
       this.switchDialog = !this.switchDialog;

+ 6 - 4
src/views/businessManagement/receipt/index.vue

@@ -360,16 +360,18 @@ export default {
       this.onLoad(this.page, this.search);
     },
     openExport() {
-      let queryParams = this.search
+      let queryParams = {...this.search}
       if (queryParams.createTime) {
         queryParams.createStartTime = queryParams.createTime[0]
         queryParams.createEndTime = queryParams.createTime[1]
         delete queryParams.createTime
       }
       if (queryParams.businessDate) {
-        this.$set(queryParams, 'businessStartDate', queryParams.businessDate[0] + " " + "00:00:00")
-        this.$set(queryParams, 'businessEndDate', queryParams.businessDate[1] + " " + "23:59:59")
-        this.$delete(queryParams, 'businessDate')
+        if (queryParams.businessDate.length > 0){
+          this.$set(queryParams, 'businessStartDate', queryParams.businessDate[0] + " " + "00:00:00")
+          this.$set(queryParams, 'businessEndDate', queryParams.businessDate[1] + " " + "23:59:59")
+          this.$delete(queryParams, 'businessDate')
+        }
       }
       const routeData = this.$router.resolve({
         path: '/api/blade-deliver-goods/reCeVing/exportOutFactoryDelivery',      //跳转目标窗口的地址

+ 71 - 15
src/views/financialManagement/collectionSettlement/configuration/detailsPage.json

@@ -34,51 +34,107 @@
   ],
   "column": [
     {
-      "label": "合同号",
-      "prop": "srcOrderno",
+      "label": "车队",
+      "prop": "fleetName",
       "overHidden": true,
-      "width": 200,
-      "index": 2
+      "width": 120
+    },
+    {
+      "label": "车号",
+      "prop": "plateNo",
+      "overHidden": true,
+      "width": 120
+    },
+    {
+      "label": "箱型",
+      "prop": "ctnType",
+      "overHidden": true,
+      "width": 120
+    },
+    {
+      "label": "场站",
+      "prop": "departureHarbor",
+      "overHidden": true,
+      "width": 120
+    },
+    {
+      "label": "货运地点",
+      "prop": "objectiveHarbor",
+      "overHidden": true,
+      "width": 120
+    },
+    {
+      "label": "运输调度",
+      "prop": "shipName",
+      "overHidden": true,
+      "width": 120
+    },
+    {
+      "label": "货运日期",
+      "prop": "srcDate",
+      "searchProp": "srcDateList",
+      "overHidden": true,
+      "type": "date",
+      "searchRange": true,
+      "searchDefaultTime": [
+        "00:00:00",
+        "23:59:59"
+      ],
+      "format": "yyyy-MM-dd",
+      "valueFormat": "yyyy-MM-dd HH:mm:ss",
+      "width": 120
     },
     {
       "label": "提单号",
-      "prop": "billNo",
+      "prop": "accSysNo",
+      "overHidden": true,
+      "width": 120
+    },
+    {
+      "label": "平台号",
+      "prop": "srcBillNo",
       "overHidden": true,
-      "width": 200,
-      "index": 3
+      "width": 120
+    },
+    {
+      "label": "客户",
+      "prop": "corpName",
+      "overHidden": true,
+      "width": 120
+    },
+    {
+      "label": "业务员",
+      "prop": "createUserName",
+      "overHidden": true,
+      "width": 120
     },
     {
       "label": "费用名称",
       "prop": "itemName",
       "overHidden": true,
-      "width": 150,
-      "index": 4
+      "width": 150
     },
     {
       "label": "金额",
       "prop": "amount",
       "overHidden": true,
-      "width": 150,
-      "index": 7
+      "width": 150
     },
     {
       "label": "本次金额",
       "prop": "thisAmount",
       "overHidden": true,
-      "width": 150,
-      "index": 7
+      "width": 150
     },
     {
       "label": "币别",
       "prop": "currency",
-      "index": 7,
       "width": 120
     },
     {
       "label": "备注",
       "prop": "remarks",
       "overHidden": true,
-      "index": 13,
       "cell": true,
       "width": 540
     }

+ 1 - 1
src/views/financialManagement/collectionSettlement/receiptSettleDetailsPage.vue

@@ -209,7 +209,7 @@
   import option from "./configuration/detailsPage.json";
   import { getDetail } from "@/api/financialManagement/financialManagement"
   import { getDetails,modify,cancelModify,saveOrEdit } from "@/api/financialManagement/paymentRequest";
-  import  billDetail from "@/components/bill/billDetailList";
+  import billDetail from "@/components/bill/billDetails";
   import _ from "lodash";
   import { getlistBankBy,deleteDetail } from "@/api/financialManagement/paymentRequest";
   import { contrastObj,contrastList } from "@/util/contrastData";

+ 72 - 16
src/views/financialManagement/paymentSettlement/configuration/detailsPage.json

@@ -34,53 +34,109 @@
   ],
   "column": [
     {
-      "label": "合同号",
-      "prop": "srcOrderno",
+      "label": "车队",
+      "prop": "fleetName",
       "overHidden": true,
-      "width": 200,
-      "index": 2
+      "width": 120
+    },
+    {
+      "label": "车号",
+      "prop": "plateNo",
+      "overHidden": true,
+      "width": 120
+    },
+    {
+      "label": "箱型",
+      "prop": "ctnType",
+      "overHidden": true,
+      "width": 120
+    },
+    {
+      "label": "场站",
+      "prop": "departureHarbor",
+      "overHidden": true,
+      "width": 120
+    },
+    {
+      "label": "货运地点",
+      "prop": "objectiveHarbor",
+      "overHidden": true,
+      "width": 120
+    },
+    {
+      "label": "运输调度",
+      "prop": "shipName",
+      "overHidden": true,
+      "width": 120
+    },
+    {
+      "label": "货运日期",
+      "prop": "srcDate",
+      "searchProp": "srcDateList",
+      "overHidden": true,
+      "type": "date",
+      "searchRange": true,
+      "searchDefaultTime": [
+        "00:00:00",
+        "23:59:59"
+      ],
+      "format": "yyyy-MM-dd",
+      "valueFormat": "yyyy-MM-dd HH:mm:ss",
+      "width": 120
     },
     {
       "label": "提单号",
-      "prop": "billNo",
+      "prop": "accSysNo",
+      "overHidden": true,
+      "width": 120
+    },
+    {
+      "label": "平台号",
+      "prop": "srcBillNo",
       "overHidden": true,
-      "width": 200,
-      "index": 3
+      "width": 120
+    },
+    {
+      "label": "客户",
+      "prop": "corpName",
+      "overHidden": true,
+      "width": 120
+    },
+    {
+      "label": "业务员",
+      "prop": "createUserName",
+      "overHidden": true,
+      "width": 120
     },
     {
       "label": "费用名称",
       "prop": "itemName",
       "overHidden": true,
-      "width": 200,
-      "index": 4
+      "width": 150
     },
     {
       "label": "金额",
       "prop": "amount",
       "overHidden": true,
-      "width": 150,
-      "index": 7
+      "width": 150
     },
     {
       "label": "本次金额",
       "prop": "thisAmount",
       "overHidden": true,
-      "width": 150,
-      "index": 7
+      "width": 150
     },
     {
       "label": "币别",
       "prop": "currency",
-      "index": 7,
       "width": 120
     },
     {
       "label": "备注",
       "prop": "remarks",
       "overHidden": true,
-      "index": 13,
       "cell": true,
-      "width": 500
+      "width": 540
     }
   ]
 }

+ 1 - 1
src/views/financialManagement/paymentSettlement/paymentSettleDetailsPage.vue

@@ -110,7 +110,7 @@ import option from "./configuration/detailsPage.json";
 import { getDetail} from "@/api/financialManagement/financialManagement"
 import { getDetails, modify, cancelModify, saveOrEdit, deleteDetail  } from "@/api/financialManagement/paymentRequest";
 import { contrastObj, contrastList } from "@/util/contrastData";
-import billDetail from "@/components/bill/billDetailList";
+import billDetail from "@/components/bill/billDetails";
 import { getlistBankBy } from "@/api/financialManagement/paymentRequest";
 import { getlistBankBy as GYSGetBank } from "@/api/basicData/configuration"
 import _ from "lodash";

+ 242 - 0
src/views/financialManagement/zbillDetails/billDetails.vue

@@ -0,0 +1,242 @@
+<template>
+  <basic-container>
+    <avue-crud :option="option"
+               :data="dataList"
+               ref="crud"
+               v-model="form"
+               :page.sync="page"
+               :search.sync="search"
+               :table-loading="loading"
+               :cell-style="cellStyle"
+               @search-change="searchChange"
+               @search-reset="searchReset"
+               @selection-change="selectionChange"
+               @current-change="currentChange"
+               @size-change="sizeChange"
+               @refresh-change="refreshChange"
+               :row-style="rowStyle"
+               :key="key"
+               v-if="key>0"
+               @on-load="onLoad"
+               @saveColumn="saveColumn"
+               @resetColumn="resetColumn"
+               @search-criteria-switch="searchCriteriaSwitch"
+    >
+      <template slot="costTypeSearch">
+        <breakdown-select
+            v-model="search.costType"
+            :configuration="breakConfiguration"
+        ></breakdown-select>
+      </template>
+      <template slot-scope="scope" slot="costType">
+        <span>{{ scope.row.itemName }}</span>
+      </template>
+      <template slot-scope="{type,size,row,$index}" slot="menuLeft">
+        <el-button class="el-icon-download" type="warning" size="small" @click="outExport">导出</el-button>
+      </template>
+      <template slot-scope="scope" slot="menu">
+        <el-button
+            type="text"
+            icon="el-icon-delete"
+            size="small"
+            :disabled="scope.row.billType === '申请' ||  scope.row.settlementAmount != 0"
+            @click.stop="rowDel(scope.row)"
+        >删除
+        </el-button>
+      </template>
+    </avue-crud>
+  </basic-container>
+</template>
+
+<script>
+import option from "./configuration/mainList.json";
+import {getBillList, removeDetail} from "@/api/financialManagement/zpaymentRequest";
+import _ from "lodash";
+import {getToken} from "@/util/auth";
+
+export default {
+  data() {
+    return {
+      loading: false,
+      form: {},
+      search: {},
+      detailData: {},
+      option: {},
+      parentId: 0,
+      dataList: [],
+      page: {
+        pageSize: 10,
+        pagerCount: 5,
+        total: 0,
+      },
+      key: 0,
+      query: {},
+      configuration: {
+        multipleChoices: false,
+        multiple: false,
+        disabled: false,
+        searchShow: true,
+        collapseTags: false,
+        clearable: true,
+        placeholder: '请点击右边按钮选择',
+        dicData: []
+      },
+      breakConfiguration: {
+        multipleChoices: false,
+        multiple: false,
+        disabled: false,
+        searchShow: true,
+        collapseTags: false,
+        clearable: true,
+        placeholder: '请点击右边按钮选择',
+        dicData: []
+      },
+    }
+  },
+  async created() {
+    this.option = await this.getColumnData(this.getColumnName(60.2), option);
+    this.key++
+  },
+  mounted() {
+    // option.height = window.innerHeight - 200 ;
+  },
+  methods: {
+    rowStyle(data) {
+      if (_.subtract(data.row.settlementAmount, data.row.amount) < 0) {
+        return {
+          color: "rgba(220,0,0,0.56)"
+        }
+      }
+    },
+    //新单打开
+    addReceipt(row) {
+      console.log(1)
+    },
+    //编辑打开
+    editOpen(row) {
+      console.log(1)
+    },
+    searchReset() {
+      console.log('1')
+    },
+    selectionChange() {
+      console.log('1')
+    },
+    sizeChange() {
+      console.log('1')
+    },
+    currentChange(val) {
+      this.page.currentPage = val
+    },
+    refreshChange(params) {
+      this.onLoad(this.page, params);
+    },
+    //点击搜索按钮触发
+    searchChange(params, done) {
+      this.query = params;
+      this.page.currentPage = 1;
+      this.onLoad(this.page, params);
+      done()
+    },
+    paramsAdjustment(params) {
+      params = Object.assign({}, this.search);
+      if (params.createTime && params.createTime.length !== 0) {  //合同
+        params.createStartDate = params.createTime[0] + " " + "00:00:00";
+        params.createEndDate = params.createTime[1] + " " + "23:59:59";
+        this.$delete(params, 'createTime')
+      }
+      return params
+    },
+    outExport() {
+      let params = {...this.search}
+      if (params.createTime && params.createTime.length !== 0) {  //合同
+        params.createStartDate = params.createTime[0] + " " + "00:00:00";
+        params.createEndDate = params.createTime[1] + " " + "23:59:59";
+        this.$delete(params, 'createTime')
+      }
+      const routeData = this.$router.resolve({
+        path: '/api/trade-finance/acc/exportAccOut',      //跳转目标窗口的地址
+        query: {
+          ...params    //括号内是要传递给新窗口的参数
+        }
+      })
+      window.open(routeData.href.slice(1, routeData.href.length) + '&' + `${this.website.tokenHeader}=${getToken()}`);
+    },
+    onLoad(page, params = {}) {
+      this.loading = true;
+      params = this.paramsAdjustment(params)
+      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()
+    },
+    cellStyle() {
+      return "padding:0;height:40px;";
+    },
+    //列保存触发
+    async saveColumn() {
+      const inSave = await this.saveColumnData(
+          this.getColumnName(60.2),
+          this.option
+      );
+      if (inSave) {
+        this.$message.success("保存成功");
+        //关闭窗口
+        this.$refs.crud.$refs.dialogColumn.columnBox = false;
+      }
+    },
+    async resetColumn() {
+      const inSave = await this.delColumnData(
+          this.getColumnName(60.2),
+          option
+      );
+      if (inSave) {
+        this.$message.success("重置成功");
+        this.option = option;
+        //关闭窗口
+        this.$refs.crud.$refs.dialogColumn.columnBox = false;
+      }
+    },
+    rowDel(row) {
+      this.$confirm("确定删除数据?", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(() => {
+        if (row.id) {
+          removeDetail({ids: row.id}).then(res => {
+            this.$message({
+              type: 'success',
+              message: '删除成功!'
+            })
+            this.dataList.splice(row.$index, 1);
+          })
+        } else {
+          this.$message({
+            type: "success",
+            message: "删除成功!"
+          });
+          this.dataList.splice(row.$index, 1);
+        }
+      });
+    },
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 149 - 0
src/views/financialManagement/zbillDetails/configuration/mainList.json

@@ -0,0 +1,149 @@
+{
+  "lazy": true,
+  "tip": false,
+  "searchShow": true,
+  "searchMenuSpan": 24,
+  "dialogWidth": "60%",
+  "align": "center",
+  "searchSpan": 8,
+  "searchMenuPosition": "right",
+  "border": true,
+  "index": true,
+  "selection": false,
+  "viewBtn": false,
+  "editBtn": false,
+  "delBtn": false,
+  "menuWidth": 80,
+  "stripe": true,
+  "dialogClickModal": false,
+  "searchLabelWidth": 120,
+  "searchIcon": true,
+  "searchIndex": 2,
+  "addBtn": false,
+  "menu": false,
+  "headerAlign": "center",
+  "showSummary": true,
+  "summaryText": "合计",
+  "sumColumnList": [
+    {
+      "name": "amount",
+      "type": "sum"
+    },
+    {
+      "name": "settlementAmount",
+      "type": "sum"
+    }
+  ],
+  "column": [
+    {
+      "label": "单据来源",
+      "prop": "billType",
+      "type": "select",
+      "search": true,
+      "overHidden": true,
+      "width": 120,
+      "dicData": [
+        {
+          "label": "付费",
+          "value": "申请"
+        },
+        {
+          "label": "收费",
+          "value": "收费"
+        }
+      ]
+    },{
+      "label": "费用名称",
+      "prop": "costType",
+      "search": true,
+      "overHidden": true,
+      "width": 150
+    },
+    {
+      "label": "车队",
+      "prop": "fleetName",
+      "overHidden": true,
+      "width": 120
+    },
+    {
+      "label": "车号",
+      "prop": "plateNo",
+      "search": true,
+      "overHidden": true,
+      "width": 120
+    },
+    {
+      "label": "箱型",
+      "prop": "ctnType",
+      "overHidden": true,
+      "width": 120
+    },
+    {
+      "label": "场站",
+      "prop": "departureHarbor",
+      "overHidden": true,
+      "width": 120
+    },
+    {
+      "label": "货运地点",
+      "prop": "objectiveHarbor",
+      "search": true,
+      "overHidden": true,
+      "width": 120
+    },
+    {
+      "label": "运输调度",
+      "prop": "shipName",
+      "overHidden": true,
+      "width": 120
+    },
+    {
+      "label": "货运日期",
+      "prop": "srcDate",
+      "searchProp": "srcDateList",
+      "search": true,
+      "overHidden": true,
+      "type": "date",
+      "searchRange": true,
+      "searchDefaultTime": [
+        "00:00:00",
+        "23:59:59"
+      ],
+      "format": "yyyy-MM-dd",
+      "valueFormat": "yyyy-MM-dd HH:mm:ss",
+      "width": 120
+    },
+    {
+      "label": "提单号",
+      "prop": "accSysNo",
+      "search": true,
+      "overHidden": true,
+      "width": 120
+    },
+    {
+      "label": "平台号",
+      "prop": "srcBillNo",
+      "overHidden": true,
+      "search": true,
+      "width": 120
+    },
+    {
+      "label": "费用",
+      "prop": "amount",
+      "overHidden": true,
+      "width": 120
+    },
+    {
+      "label": "客户",
+      "prop": "corpName",
+      "overHidden": true,
+      "width": 120
+    },
+    {
+      "label": "业务员",
+      "prop": "createUserName",
+      "overHidden": true,
+      "width": 120
+    }
+  ]
+}

+ 155 - 0
src/views/salesOrderTwo/components/feeInfo.vue

@@ -0,0 +1,155 @@
+<template>
+    <trade-card title="收款信息">
+        <avue-crud ref="crud" :data="data" :option="feeOption" @saveColumn="saveColumn" @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>
+            </template>
+            <template slot="menu" slot-scope="{ row, index }">
+                <el-button size="small" type="text" v-if="!row.id" @click="rowCell(row, index)">保存</el-button>
+            </template>
+            <template slot="accountHeader" slot-scope="{column}">
+                <span style="color: #409EFF;cursor: pointer" @click.stop="$refs.dictbiz.open()">收款账户
+          </span>
+            </template>
+        </avue-crud>
+        <dictbiz-dialog ref="dictbiz" title="添加账户" code="account" parentId="1587970253894307841"
+            @closed="getAllWorkDicts"></dictbiz-dialog>
+    </trade-card>
+</template>
+  
+<script>
+import { feeOption } from "../js/optionList";
+import { collectPayment } from "@/api/basicData/salesOrder";
+export default {
+    data() {
+        return {
+            feeOption: {}
+        };
+    },
+    props: {
+        data: {
+            type: Array
+        },
+        detailData: {
+            type: Object
+        },
+        form: {
+            type: Object
+        }
+    },
+    async created() {
+        this.feeOption = await this.getColumnData(
+            this.getColumnName(224),
+            feeOption
+        );
+        this.getAllWorkDicts()
+    },
+    methods: {
+        refreshTable() {
+            this.$refs.crud.refreshTable();
+        },
+        getAllWorkDicts() {
+            this.getWorkDicts("account").then(res => {
+                this.findObject(this.feeOption.column, "account").dicData = res.data.data;
+            });
+            this.$refs.crud.init();
+        },
+        cellStyle() {
+            return "padding:0;height:40px;";
+        },
+        addRow() {
+            // if (!this.form.corpId) {
+            //     return this.$message.error("请选择客户名称");
+            // }
+            if(!this.form.id){
+                return this.$message.error("请保存数据");
+            }
+            this.data.push({ $cellEdit: true })
+        },
+        rowCell(row, index) {
+            collectPayment({ ...this.form, orderItemsList: [], settlementList: [], currentAmount: row.amount, account: row.account }).then(res => {
+                this.$emit('getPay', res.data.data)
+                this.$message.success("保存成功");
+            })
+
+        },
+        rowDel(row, index) {
+            this.$confirm("确定删除数据?", {
+                confirmButtonText: "确定",
+                cancelButtonText: "取消",
+                type: "warning"
+            }).then(() => {
+                if (row.id) {
+                    //   remove(row.id).then(res => {
+                    //     this.$message({
+                    //       type: "success",
+                    //       message: "删除成功!"
+                    //     });
+                    //     this.data.splice(index, 1);
+                    //   });
+                } else {
+                    this.$message({
+                        type: "success",
+                        message: "删除成功!"
+                    });
+                    this.data.splice(index, 1);
+                }
+            });
+        },
+        async saveColumn() {
+            const inSave = await this.saveColumnData(
+                this.getColumnName(224),
+                this.feeOption
+            );
+            if (inSave) {
+                this.$nextTick(() => {
+                    this.$refs.crud.doLayout();
+                });
+                this.$message.success("保存成功");
+                //关闭窗口
+                this.$refs.crud.$refs.dialogColumn.columnBox = false;
+            }
+        },
+        async resetColumn() {
+            this.feeOption = feeOption;
+            const inSave = await this.delColumnData(
+                this.getColumnName(224),
+                feeOption
+            );
+            if (inSave) {
+                this.$nextTick(() => {
+                    this.$refs.crud.doLayout();
+                });
+                this.getAllWorkDicts()
+                this.$message.success("重置成功");
+                //关闭窗口
+                setTimeout(() => {
+                    this.$refs.crud.$refs.dialogColumn.columnBox = false;
+                }, 1000);
+            }
+        }
+    }
+};
+</script>
+  
+<style scoped>
+::v-deep .select-component {
+    display: flex;
+}
+
+.page-crad ::v-deep .basic-container__card {
+    height: 94.2vh;
+}
+
+.itemTable ::v-deep .el-table {
+    width: 738px;
+}
+
+::v-deep .el-input-group__append,
+.el-input-group__prepend {
+    padding: 0 5px;
+}
+</style>
+  

+ 832 - 0
src/views/salesOrderTwo/detailsPage.vue

@@ -0,0 +1,832 @@
+<template>
+  <div>
+    <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>
+        <div class="add-customer-btn">
+          <el-button v-if="detailData.check" type="primary" size="small" class="el-button--small-yh"
+                     @click.stop="openCheckDialog">
+            审批
+          </el-button>
+          <el-button type="info" icon="el-icon-printer" size="small" @click.stop="openReport()">报表打印
+          </el-button>
+          <el-button type="primary" size="small" v-if="detailData.status == 1 && form.confirmStatus == 0"
+                     class="el-button--small-yh " @click.stop="openEdit">编辑
+          </el-button>
+          <el-button type="primary" size="small" v-if="!form.id && detailData.status != 1" @click="editCustomer">
+            保存数据
+          </el-button>
+          <el-button type="primary" size="small" v-if="form.id && detailData.status != 1 && form.confirmStatus == 0"
+                     @click="fixSave">
+            保存数据
+          </el-button>
+          <el-button type="primary" size="small" v-if="form.id && detailData.status != 1 && form.confirmStatus == 0"
+            @click="submit">
+            提交
+          </el-button>
+          <el-button type="primary" size="small" v-if="form.confirmStatus == 1" @click="revokeOrder">
+            撤销
+          </el-button>
+
+        </div>
+      </div>
+      <!-- <containerTitle title="基础资料" style="margin-top: 60px"></containerTitle> -->
+      <trade-card title="基础资料" style="margin-top: 60px" v-loading="loadingBtn">
+        <avue-form ref="form" class="trading-form" v-model="form" :option="option">
+          <template slot="corpId">
+            <crop-select v-model="form.corpId" corpType="KH" :disabled="detailData.status == 1"
+              @getCorpData="getCorpData"></crop-select>
+          </template>
+          <template slot="storageId">
+            <el-select v-model="form.storageId" placeholder="请选择" size="small" filterable @change="storageChange"
+              :disabled="detailData.status == 1 || data.length > 0">
+              <el-option v-for="item in storageoptions" :key="item.id" :label="item.cname" :value="item.id">
+              </el-option>
+            </el-select>
+          </template>
+        </avue-form>
+      </trade-card>
+      <trade-card title="商品信息" v-loading="loadingBtn">
+        <avue-form class="trading-form" v-model="form" :option="option2">
+          <template slot="thisUsedProfit">
+            <el-input-number v-model="form.thisUsedProfit" :disabled="detailData.status == 1" @change="amountChange"
+              placeholder="请输入" size="small" :controls="false" style="width:100%;"></el-input-number>
+          </template>
+        </avue-form>
+        <avue-crud ref="crud" :option="optionList" :data="data" :table-loading="loading" @saveColumn="saveColumn"
+          @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>
+          </template>
+          <template slot="cname" slot-scope="{ row, index }">
+            <el-select v-if="row.$cellEdit" v-model="row.cname" placeholder="请选择" size="small" filterable
+              @change="cnameChange(row, index)">
+              <el-option v-for="item in goodsoptions" :key="item.itemId" :label="item.cname" :value="item.cname"
+                :disabled="item.status == 1">
+              </el-option>
+            </el-select>
+            <span v-else>{{ row.cname }}</span>
+          </template>
+          <template slot="unitHeader" slot-scope="{column}">
+            <span style="color: #409EFF;cursor: pointer" @click.stop="$refs.dictbiz.open()">单位
+            </span>
+          </template>
+          <template slot="storageInQuantity" slot-scope="{ row, index }">
+            <el-input-number v-if="row.$cellEdit" v-model="row.storageInQuantity" @change="countChange(row)"
+              placeholder="请输入" size="small" :controls="false" style="width:100%;"></el-input-number>
+            <span v-else>{{ row.storageInQuantity }}</span>
+          </template>
+          <template slot="price" slot-scope="{ row, index }">
+            <el-input-number v-if="row.$cellEdit" v-model="row.price" @change="countChange(row)" placeholder="请输入"
+              size="small" :controls="false" style="width:100%;"></el-input-number>
+            <span v-else>{{ row.price }}</span>
+          </template>
+          <template slot="purchaseAmount" slot-scope="{ row, index }">
+            <el-input-number v-if="row.$cellEdit" v-model="row.purchaseAmount" @change="countChange(row)"
+              placeholder="请输入" size="small" :controls="false" style="width:100%;"></el-input-number>
+            <span v-else>{{ row.purchaseAmount }}</span>
+          </template>
+          <template slot="menu" slot-scope="{ row, index }">
+            <el-button size="small" type="text" :disabled="detailData.status == 1" @click="rowCell(row, index)">{{
+                row.$cellEdit ? "保存" : "修改"
+            }}</el-button>
+            <el-button size="small" type="text" :disabled="detailData.status == 1" @click="rowDel(row, index)">删除
+            </el-button>
+          </template>
+        </avue-crud>
+      </trade-card>
+      <fee-info ref="feeInfo" :data="settlementList" :form="form" :detailData="detailData" @getPay="getPay"
+        v-loading="loadingBtn">
+      </fee-info>
+      <containerTitle title="上传附件"></containerTitle>
+      <c-upload v-loading="loadingBtn" typeUpload="CD"
+        deleteUrl="/api/trade-purchase/woodHarvestingCloud/removeByFileId" :data="orderFilesList" display
+        :enumerationValue="35.1" :disabled="detailData.status == 1"></c-upload>
+      <el-dialog :title="addressTitle" v-dialogDrag :visible.sync="addressVisible" class="avue-dialog avue-dialog--top"
+        width="50%" append-to-body>
+        <span>
+          <el-tabs v-model="activeName">
+            <el-tab-pane label="客户地址" name="first">
+              <avue-form class="trading-form" v-model="form2" :option="optiontabs1"></avue-form>
+            </el-tab-pane>
+            <el-tab-pane label="物流地址" name="second">
+              <avue-form class="trading-form" v-model="form3" :option="optiontabs2"></avue-form>
+            </el-tab-pane>
+          </el-tabs>
+        </span>
+        <div class="avue-dialog__footer">
+          <el-button @click="addressVisible = false">取 消</el-button>
+          <el-button @click="addressVisible = false" type="primary">确 定</el-button>
+        </div>
+      </el-dialog>
+      <dictbiz-dialog ref="dictbiz" title="添加单位" code="unit" parentId="1585962784498225154"
+                      @closed="getAllWorkDicts">
+      </dictbiz-dialog>
+      <report-dialog :switchDialog="switchDialog" :reportId="form.id" reportName="配件系统-销售单" @onClose="onClose()">
+      </report-dialog>
+    </div>
+    <el-dialog append-to-body title="审批" class="el-dialogDeep" :visible.sync="checkDialog" width="50%"
+               :close-on-click-modal="false" :destroy-on-close="true" :close-on-press-escape="false" v-dialog-drag>
+      <check :checkData="checkData" :checkDetail="false" :idList="[]" @choceCheckFun="choceCheckFun">
+      </check>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {optionList} from "./js/optionList";
+import {
+  getDetails,
+  submit,
+  getCorpDetails,
+  remove,
+  getAllgoods,
+  save,
+  fixSave,
+  revoke,
+  collectPayment,
+  getStoragelist,
+  offset
+} from "@/api/basicData/salesOrder";
+import feeInfo from "./components/feeInfo.vue";
+import reportDialog from "@/components/report-dialog/main";
+import { multiply, sum, subtract } from "@/util/calculate";
+import {fdatasync} from "fs";
+import check from "@/components/check/check";
+export default {
+  name: "index",
+  data() {
+    return {
+      checkDialog: false,
+      checkData: {},
+      switchDialog: false,
+      activeName: 'first',
+      loadingBtn: false,
+      addressTitle: null,
+      addressVisible: false,
+      form: {},
+      form2: {},
+      form3: {
+
+      },
+      data: [],
+      option: {
+        menuBtn: false,
+        labelWidth: 90,
+        disabled: false,
+        column: [
+          {
+            label: "客户名称",
+            prop: "corpId",
+            rules: [
+              {
+                required: true,
+                message: "",
+                trigger: "blur"
+              }
+            ],
+            span: 8,
+          },
+          {
+            label: "送货地址",
+            prop: "arrivalAddress",
+            type: 'select',
+            dicData: [],
+            props: {
+              label: 'detailedAddress',
+              value: 'detailedAddress'
+            },
+            allowCreate: true,
+            filterable: true,
+            span: 16,
+          },
+          {
+            label: "销售日期",
+            prop: "businesDate",
+            type: "date",
+            format: "yyyy-MM-dd",
+            valueFormat: "yyyy-MM-dd 00:00:00",
+            span: 8,
+          },
+          {
+            label: "计划收款日期",
+            prop: "advanceCollectionDate",
+            type: "date",
+            format: "yyyy-MM-dd",
+            valueFormat: "yyyy-MM-dd 00:00:00",
+            span: 8,
+          },
+          {
+            label: "送货日期",
+            prop: "requiredDeliveryDate",
+            type: "date",
+            format: "yyyy-MM-dd",
+            valueFormat: "yyyy-MM-dd 00:00:00",
+            span: 8,
+          },
+          {
+            label: "仓库",
+            prop: "storageId",
+            rules: [
+              {
+                required: true,
+                message: "",
+                trigger: "blur"
+              }
+            ],
+            span: 8,
+          },
+          {
+            label: "备注",
+            prop: "orderRemark",
+            placeholder: "打印时显示",
+            type: "textarea",
+            minRows: 3,
+            span: 16,
+          }
+        ]
+      },
+      option2: {
+        menuBtn: false,
+        labelWidth: 80,
+        disabled: false,
+        column: [
+          {
+            label: "税率",
+            prop: "exchangeRate",
+            type: "select",
+            props: {
+              label: "dictValue",
+              value: "dictKey"
+            },
+            dicUrl: "/api/blade-system/dict-biz/dictionary?code=tax_rate",
+            span: 4,
+          },
+          {
+            label: "销售总数量",
+            prop: "storageQuantity",
+            disabled: true,
+            span: 4,
+          },
+          {
+            label: "成本",
+            prop: "costAmount",
+            disabled: true,
+            span: 4,
+          },
+          {
+            label: "毛利",
+            prop: "grossProfit",
+            disabled: true,
+            span: 4,
+          },
+          {
+            label: "订单金额",
+            prop: "purchaseAmount",
+            disabled: true,
+            span: 4,
+          },
+          {
+            label: "优惠金额",
+            prop: "thisUsedProfit",
+            span: 4,
+          },
+          {
+            label: "合同金额",
+            prop: "orderAmount",
+            disabled: true,
+            span: 8,
+          },
+          {
+            label: "应收金额",
+            prop: "balanceAmount",
+            disabled: true,
+            span: 8,
+          },
+          {
+            label: "已收金额",
+            prop: "settlmentAmount",
+            disabled: true,
+            span: 8,
+          }
+        ]
+      },
+      optiontabs1: {
+        menuBtn: false,
+        labelWidth: 90,
+        column: [
+          {
+            label: "简称",
+            prop: "a",
+            type: "select",
+            span: 24,
+          },
+          {
+            label: "地址",
+            prop: "b",
+            type: "select",
+            span: 24,
+          },
+          {
+            label: "详细地址",
+            prop: "c",
+            span: 24,
+          },
+          {
+            label: "邮编",
+            prop: "d",
+            span: 24,
+          },
+          {
+            label: "备注",
+            prop: "e",
+            type: 'textarea',
+            minRows: 3,
+            span: 24,
+          },
+          {
+            label: "地址智能识别",
+            prop: "ad",
+            placeholder: "例:上海市徐汇区枫林街道斜土路100号",
+            type: "textarea",
+            minRows: 3,
+            span: 24,
+          }
+        ]
+      },
+      optiontabs2: {
+        menuBtn: false,
+        labelWidth: 80,
+        column: [
+          {
+            label: "目的地",
+            prop: "a",
+            type: "select",
+            rules: [
+              {
+                required: true,
+                message: "",
+                trigger: "blur"
+              }
+            ],
+            span: 24,
+          },
+          {
+            label: "物流公司",
+            prop: "b",
+            span: 24,
+          },
+          {
+            label: "电话",
+            prop: "c",
+            span: 24,
+          },
+          {
+            label: "地址",
+            prop: "d",
+            span: 24,
+          },
+          {
+            label: "详细地址",
+            prop: "e",
+            span: 24,
+          },
+          {
+            label: "邮编",
+            prop: "f",
+            span: 24,
+          },
+          {
+            label: "备注",
+            prop: "remarks",
+            type: "textarea",
+            minRows: 3,
+            span: 24,
+          },
+          {
+            label: "地址智能识别",
+            prop: "g",
+            type: "textarea",
+            minRows: 3,
+            span: 24,
+          }
+        ]
+      },
+      optionList: {},
+      goodsoptions: [],
+      settlementList: [],
+      orderFilesList: [],
+      storageoptions: []
+    };
+  },
+  props: {
+    detailData: {
+      type: Object
+    }
+  },
+  components: {
+    feeInfo,
+    check,
+    reportDialog
+  },
+  async created() {
+    // console.log(this.detailData)
+    this.optionList = await this.getColumnData(
+      this.getColumnName(212),
+      optionList
+    );
+    if (this.detailData.id) {
+      this.getDetail(this.detailData.id);
+    }
+    if (this.detailData.status == 1) {
+      this.option.disabled = true;
+      this.option2.disabled = true;
+    }
+    this.getAllWorkDicts()
+    getAllgoods().then(res => {
+      this.goodsoptions = res.data.data
+    });
+  },
+  methods: {
+    //打开审核
+    openCheckDialog() {
+      offset({id: this.form.id}).then(res => {
+        if (res.data.data == '操作成功') {
+          this.checkData = this.detailData.check;
+          this.checkDialog = true;
+        } else {
+          this.$confirm(res.data.data, {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(() => {
+            this.checkData = this.detailData.check;
+            this.checkDialog = true;
+          })
+        }
+      })
+    },
+    //关闭审核
+    choceCheckFun() {
+      this.checkDialog = false;
+    },
+    openReport() {
+      this.switchDialog = !this.switchDialog;
+    },
+    onClose(val) {
+      this.switchDialog = val;
+    },
+    getAllWorkDicts() {
+      this.getWorkDicts("unit").then(res => {
+        this.findObject(this.optionList.column, "unit").dicData = res.data.data;
+      });
+      getStoragelist().then(res => {
+        this.storageoptions = res.data;
+        this.findObject(this.optionList.column, "storageId").dicData = res.data;
+      })
+      this.$refs.crud.init();
+    },
+    cellStyle() {
+      return "padding:0;height:40px;";
+    },
+    cnameChange(row) {
+      if (row.cname) {
+        this.goodsoptions.forEach(e => {
+          if (e.cname == row.cname) {
+            row.itemId = e.id
+            row.unit = e.unit
+            row.price = e.standardPrice
+            row.storageInQuantity = 1
+            row.amount = e.standardPrice
+            row.purchasePrice = e.purchasePrice
+            row.storageAmount = e.purchasePrice
+          }
+        })
+      } else {
+        row.itemId = null
+        row.unit = null
+        row.price = null
+        row.storageInQuantity = null
+        row.amount = null
+        row.purchasePrice = null
+        row.storageAmount = null
+      }
+      this.countChange(row)
+    },
+    amountChange() {
+      let val = 0
+      this.data.forEach(e => {
+        val = sum(val, e.amount)
+        this.form.purchaseAmount = val
+        this.form.orderAmount = subtract(this.form.purchaseAmount, this.form.thisUsedProfit)
+      })
+    },
+    countChange(row) {
+      row.amount = multiply(row.price, row.storageInQuantity)
+      row.storageAmount = multiply(row.purchaseAmount, row.storageInQuantity)
+      let val = 0
+      this.data.forEach(e => {
+        val = sum(val, e.amount)
+        this.form.purchaseAmount = val
+        this.form.orderAmount = subtract(this.form.purchaseAmount, this.form.thisUsedProfit)
+      })
+      this.$refs.crud.refreshTable();
+    },
+    getDetail(id) {
+      this.loadingBtn = true
+      getDetails({ id: id })
+        .then(res => {
+          this.form = res.data.data;
+          this.data = res.data.data.orderItemsList;
+          this.settlementList = res.data.data.settlementList;
+          this.orderFilesList = res.data.data.orderFilesList ? res.data.data.orderFilesList : [];
+          this.getAddress(res.data.data)
+        })
+        .finally(() => {
+          this.loadingBtn = false;
+        });
+    },
+    getCorpData(row) {
+      if (row) {
+        this.form.corpsName = row.cname
+        this.form.corpTel = row.tel
+        getCorpDetails({ id: row.id }).then(res => {
+          this.findObject(this.option.column, "arrivalAddress").dicData = res.data.data.corpsAddrList;
+        })
+      } else {
+        this.form.corpsName = null
+        this.form.corpTel = null
+        this.findObject(this.option.column, "arrivalAddress").dicData = []
+      }
+    },
+    storageChange(row) {
+      // console.log(row)
+
+    },
+    getAddress(row) {
+      getCorpDetails({ id: row.corpId }).then(res => {
+        this.findObject(this.option.column, "arrivalAddress").dicData = res.data.data.corpsAddrList;
+      })
+    },
+    addRow() {
+      this.$refs["form"].validate((valid, done) => {
+        done();
+        if (valid) {
+          this.data.push({ $cellEdit: true, storageId: this.form.storageId })
+        } else {
+          return false;
+        }
+      });
+    },
+    rowCell(row, index) {
+      if (row.$cellEdit == true) {
+        this.$set(row, "$cellEdit", false);
+      } else {
+        this.$set(row, "$cellEdit", true);
+      }
+    },
+    rowDel(row, index) {
+      this.$confirm("确定删除数据?", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(() => {
+        if (row.id) {
+          remove(row.id).then(res => {
+            this.$message({
+              type: "success",
+              message: "删除成功!"
+            });
+            this.data.splice(index, 1);
+          });
+        } else {
+          this.$message({
+            type: "success",
+            message: "删除成功!"
+          });
+          this.data.splice(index, 1);
+        }
+      });
+    },
+    getPay(row) {
+      // this.form = row;
+      // this.data = row.orderItemsList;
+      // this.settlementList = row.settlementList
+      this.getDetail(row.id);
+    },
+    //修改提交触发
+    editCustomer() {
+      this.$refs["form"].validate((valid, done) => {
+        done();
+        if (valid) {
+          if (this.data.length == 0) {
+            return this.$message.error('请添加一条商品信息');
+          }
+          if (this.settlementList.length > 0) {
+            for (let i = 0; i < this.settlementList.length; i++) {
+              if (!this.settlementList[i].id) {
+                return this.$message.error(`请保存第${i + 1}行的费用明细`);
+              }
+            }
+          }
+          this.loadingBtn = true;
+          save({ ...this.form, billType: 'XSJH', tradeType: 'YPJ', orderItemsList: this.data, settlementList: this.settlementList, orderFilesList: this.orderFilesList })
+            .then(res => {
+              this.$message.success("保存成功");
+              this.form = res.data.data;
+              this.data = res.data.data.orderItemsList;
+              this.settlementList = res.data.data.settlementList;
+              this.orderFilesList = res.data.data.orderFilesList ? res.data.data.orderFilesList : [];
+              this.detailData.status = 1
+              this.option.disabled = true;
+              this.option2.disabled = true;
+              this.$refs.crud.refreshTable();
+              this.$refs.feeInfo.refreshTable();
+            })
+            .finally(() => {
+              this.loadingBtn = false;
+            });
+        } else {
+          return false;
+        }
+      });
+    },
+    fixSave() {
+      this.$refs["form"].validate((valid, done) => {
+        done();
+        if (valid) {
+          if (this.data.length == 0) {
+            return this.$message.error('请添加一条商品信息');
+          }
+          if (this.settlementList.length > 0) {
+            for (let i = 0; i < this.settlementList.length; i++) {
+              if (!this.settlementList[i].id) {
+                return this.$message.error(`请保存第${i + 1}行的费用明细`);
+              }
+            }
+          }
+          this.loadingBtn = true;
+          fixSave({ ...this.form, billType: 'XSJH', tradeType: 'YPJ', orderItemsList: this.data, settlementList: this.settlementList, orderFilesList: this.orderFilesList })
+            .then(res => {
+              this.$message.success("修改成功");
+              this.form = res.data.data;
+              this.data = res.data.data.orderItemsList;
+              this.settlementList = res.data.data.settlementList
+              this.orderFilesList = res.data.data.orderFilesList ? res.data.data.orderFilesList : [];
+            })
+            .finally(() => {
+              this.loadingBtn = false;
+            });
+        } else {
+          return false;
+        }
+      });
+    },
+    submit() {
+      this.$refs["form"].validate((valid, done) => {
+        done();
+        if (valid) {
+          if (this.data.length == 0) {
+            return this.$message.error('请添加一条商品信息');
+          }
+          if (this.settlementList.length > 0) {
+            for (let i = 0; i < this.settlementList.length; i++) {
+              if (!this.settlementList[i].id) {
+                return this.$message.error(`请保存第${i + 1}行的费用明细`);
+              }
+            }
+          }
+          this.loadingBtn = true;
+          submit({ ...this.form, billType: 'XSJH', tradeType: 'YPJ', orderItemsList: this.data, settlementList: this.settlementList, orderFilesList: this.orderFilesList })
+            .then(res => {
+              this.$message.success("提交成功");
+              this.form = res.data.data;
+              this.data = res.data.data.orderItemsList;
+              this.settlementList = res.data.data.settlementList;
+              this.orderFilesList = res.data.data.orderFilesList ? res.data.data.orderFilesList : [];
+              this.$emit("goBack");
+            })
+            .finally(() => {
+              this.loadingBtn = false;
+            });
+        } else {
+          return false;
+        }
+      });
+    },
+    revokeOrder() {
+      this.$confirm('此操作将会撤销单子, 是否继续?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.loadingBtn = true;
+        revoke({ ...this.form, billType: 'XSJH', tradeType: 'YPJ', orderItemsList: this.data, settlementList: this.settlementList })
+          .then(res => {
+            this.$message.success("撤销成功");
+            this.form = res.data.data;
+            this.data = res.data.data.orderItemsList;
+            this.settlementList = res.data.data.settlementList
+            this.openEdit()
+          })
+          .finally(() => {
+            this.loadingBtn = false;
+          });
+      }).catch(() => {
+      });
+    },
+    async saveColumn() {
+      const inSave = await this.saveColumnData(
+        this.getColumnName(212),
+        this.optionList
+      );
+      if (inSave) {
+        this.$nextTick(() => {
+          this.$refs.crud.doLayout();
+        });
+        this.$message.success("保存成功");
+        //关闭窗口
+        this.$refs.crud.$refs.dialogColumn.columnBox = false;
+      }
+    },
+    async resetColumn() {
+      this.optionList = optionList;
+      const inSave = await this.delColumnData(
+        this.getColumnName(212),
+        optionList
+      );
+      if (inSave) {
+        this.$nextTick(() => {
+          this.$refs.crud.doLayout();
+        });
+        this.getAllWorkDicts()
+        this.$message.success("重置成功");
+        this.$refs.crud.$refs.dialogColumn.columnBox = false;
+      }
+    },
+    openEdit() {
+      this.detailData.status = 2
+      this.option = this.$options.data().option;
+      this.option2 = this.$options.data().option2;
+      this.$refs.crud.refreshTable();
+      this.$refs.feeInfo.refreshTable();
+    },
+    //返回列表
+    backToList() {
+      this.$emit("goBack");
+    }
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.trading-form ::v-deep .el-form-item {
+  margin-bottom: 8px !important;
+}
+
+::v-deep .el-dialog__body {
+  padding: 0px 20px 15px 20px;
+}
+
+::v-deep .el-form-item__error {
+  display: none !important;
+}
+
+.img-form ::v-deep .el-form-item {
+  height: 150px;
+  line-height: 150px;
+  margin-bottom: 8px !important;
+}
+
+.img-form ::v-deep .avue-upload__icon {
+  font-size: 20px;
+  width: 150px;
+  height: 150px;
+  line-height: 150px;
+}
+
+::v-deep .el-table .cell {
+  padding: 0 2px !important;
+}
+
+::v-deep .avue-crud .el-table .el-form-item__label {
+  left: -1px;
+}
+
+.addressTabs {
+  display: flex;
+  justify-content: center;
+
+  span {
+    width: 100px;
+    font-size: 18px;
+    font-weight: 600;
+    text-align: center;
+  }
+}
+</style>

+ 346 - 0
src/views/salesOrderTwo/index.vue

@@ -0,0 +1,346 @@
+<template>
+  <div>
+    <basic-container v-show="show" class="page-crad">
+      <avue-crud ref="crud" :option="option" :data="dataList" :page.sync="page" :search.sync="search"
+        @search-change="searchChange" @current-change="currentChange" @size-change="sizeChange"
+        @refresh-change="refreshChange" @on-load="onLoad" :table-loading="loading" @saveColumn="saveColumn"
+        @resetColumn="resetColumn" :cell-style="cellStyle" @search-criteria-switch="searchCriteriaSwitch">
+        <template slot="menuLeft">
+          <el-button type="primary" size="mini" @click.stop="newAdd()">新建销售单
+          </el-button>
+        </template>
+        <template slot="corpIdSearch">
+          <crop-select v-model="search.corpId" corpType="KH"></crop-select>
+        </template>
+        <template slot-scope="{ row, index }" slot="corpId">
+          <span style="color: #409EFF;cursor: pointer" @click.stop="editOpen(row, 1)">{{ row.corpsName }}
+          </span>
+        </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']"
+            :picker-options="pickerOptions">
+          </el-date-picker>
+        </template>
+        <template slot-scope="{ row, index }" slot="menu">
+          <!-- <el-tooltip class="item" effect="dark" content="新建销售订单" placement="top">
+            <i class="tradingIcon icon-add" />
+          </el-tooltip> -->
+          <el-tooltip class="item" effect="dark" content="删除" placement="top">
+            <i class="tradingIcon icon-del" v-if="row.confirmStatus == 0" @click.stop="rowDel(row, index)" />
+          </el-tooltip>
+          <!-- <el-tooltip class="item" effect="dark" content="编辑" placement="top">
+            <i class="tradingIcon icon-edit" />
+          </el-tooltip>
+          <el-tooltip class="item" effect="dark" content="收款" placement="top">
+            <i class="tradingIcon icon-proceeds" />
+          </el-tooltip>
+          <el-tooltip class="item" effect="dark" content="发货" placement="top">
+            <i class="tradingIcon icon-deliver" />
+          </el-tooltip>
+          <el-tooltip class="item" effect="dark" content="对账" placement="top">
+            <i class="tradingIcon icon-reconciliation" />
+          </el-tooltip> -->
+          <!-- <el-button type="text" size="small" @click.stop="editOpen(row, 2)">
+            查看
+          </el-button>
+          <el-button type="text" size="small" @click.stop="rowDel(row, index)">
+            删除
+          </el-button> -->
+        </template>
+      </avue-crud>
+    </basic-container>
+    <details-page v-if="!show" @goBack="goBack()" :detailData="detailData" />
+  </div>
+</template>
+
+<script>
+import detailsPage from "./detailsPage";
+import { option } from "./js/optionList";
+import { getList, getCorpsAll, gainUser, getCorpType, orderRemove } from "@/api/basicData/salesOrder";
+export default {
+  name: "index",
+  data() {
+    return {
+      src: '',
+      show: true,
+      loading: false,
+      search: {},
+      detailData: {},
+      dataList: [],
+      selectionList: [],
+      page: {
+        pageSize: 20,
+        currentPage: 1,
+        total: 0,
+        pageSizes: [10, 20, 30, 40, 50, 100, 200, 300, 400, 500]
+      },
+      option: {},
+      pickerOptions: {
+        shortcuts: [
+          {
+            text: '当天',
+            onClick(picker) {
+              const date = new Date();
+              const start = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);
+              const end = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59);
+              picker.$emit('pick', [start, end]);
+            }
+          },
+          {
+            text: '昨天',
+            onClick(picker) {
+              const date = new Date();
+              const start = new Date(date.getFullYear(), date.getMonth(), date.getDate() - 1, 0, 0, 0);
+              const end = new Date(date.getFullYear(), date.getMonth(), date.getDate() - 1, 23, 59, 59);
+              picker.$emit('pick', [start, end]);
+            }
+          }, {
+            text: '当月',
+            onClick(picker) {
+              const date = new Date();
+              const start = new Date(date.getFullYear(), date.getMonth(), 1, 0, 0, 0);
+              const end = new Date(date.getFullYear(), date.getMonth() + 1, 0, 23, 59, 59);
+              picker.$emit('pick', [start, end]);
+            }
+          }, {
+            text: '当季',
+            onClick(picker) {
+              const date = new Date();
+              const start = new Date(date.getFullYear(), parseInt(date.getMonth() / 3) * 3, 1, 0, 0, 0);
+              const end = new Date(date.getFullYear(), parseInt(date.getMonth() / 3) * 3 + 3, 0, 23, 59, 59);
+              picker.$emit('pick', [start, end]);
+            }
+          }, {
+            text: '当年',
+            onClick(picker) {
+              const date = new Date();
+              const start = new Date(date.getFullYear(), date.getMonth(), 1, 0, 0, 0);
+              const end = new Date(date.getFullYear() + 1, 0, 0, 23, 59, 59);
+              picker.$emit('pick', [start, end]);
+            }
+          }, {
+            text: '最近一周',
+            onClick(picker) {
+              const date = new Date();
+              const start = new Date(date.getFullYear(), date.getMonth(), date.getDate() - 7, 0, 0, 0);
+              const end = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59);
+              picker.$emit('pick', [start, end]);
+            }
+          }, {
+            text: '最近二周',
+            onClick(picker) {
+              const date = new Date();
+              const start = new Date(date.getFullYear(), date.getMonth(), date.getDate() - 7 * 2, 0, 0, 0);
+              const end = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59);
+              picker.$emit('pick', [start, end]);
+            }
+          }, {
+            text: '最近三周',
+            onClick(picker) {
+              const date = new Date();
+              const start = new Date(date.getFullYear(), date.getMonth(), date.getDate() - 7 * 3, 0, 0, 0);
+              const end = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59);
+              picker.$emit('pick', [start, end]);
+            }
+          }]
+      },
+    };
+  },
+  components: {
+    detailsPage
+  },
+  async created() {
+    this.option = await this.getColumnData(this.getColumnName(211), option);
+    this.option.height = window.innerHeight - 210;
+    this.getAllWorkDicts()
+  },
+  activated() {
+    this.$refs.crud.refreshTable();
+    if (!this.$store.getters.pjxsStatus && !this.show) {
+      this.show = true;
+    }
+    if (this.$route.query.orderId) {
+      setTimeout(() => {
+        this.editOpen({ id: this.$route.query.orderId }, 1);
+      }, 100);
+    }
+    if (this.$route.query.check) {
+      this.show = true
+      this.detailData = {
+        id: this.$route.query.check.billId,
+        check: this.$route.query.check,
+        auditId: this.$route.query.check.id,
+      };
+      this.show = false;
+      this.$store.commit("IN_PJXS_STATUS_TWO");
+    }
+  },
+  methods: {
+    getAllWorkDicts() {
+      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
+      });
+      this.$refs.crud.init();
+    },
+    searchCriteriaSwitch(type) {
+      if (type) {
+        this.option.height = this.option.height - 138;
+      } else {
+        this.option.height = this.option.height + 138;
+      }
+      this.$refs.crud.getTableHeight();
+    },
+    cellStyle() {
+      return "padding:0;height:40px;";
+    },
+    //点击搜索按钮触发
+    searchChange(params, done) {
+      this.page.currentPage = 1;
+      this.onLoad(this.page, params);
+      done();
+    },
+    refreshChange() {
+      this.onLoad(this.page, this.search);
+    },
+    newAdd() {
+      this.show = false;
+      this.$store.commit("IN_PJXS_STATUS");
+    },
+    onLoad(page, params = {}) {
+      let data = this.deepClone(Object.assign(params, this.search));
+      data.billType = 'XSJH';
+      data.tradeType = 'YPJ';
+      if (data.businesDate) {
+        data.orderStartDate = data.businesDate[0];
+        data.orderEndDate = data.businesDate[1];
+      }
+      delete data.businesDate
+      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;
+        });
+    },
+    editOpen(row, status) {
+      this.detailData = {
+        id: row.id,
+        status: status
+      };
+      this.show = false;
+      this.$store.commit("IN_PJXS_STATUS");
+    },
+    currentChange(val) {
+      this.page.currentPage = val;
+    },
+    sizeChange(val) {
+      this.page.currentPage = 1;
+      this.page.pageSize = val;
+    },
+    rowDel(row, index, done) {
+      this.$confirm("确定删除数据?", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(() => {
+        orderRemove(row.id).then(res => {
+          if (res.data.code == 200) {
+            this.$message({
+              type: "success",
+              message: "删除成功!"
+            });
+            this.onLoad(this.page, this.search);
+          }
+        });
+      });
+    },
+    async saveColumn() {
+      const inSave = await this.saveColumnData(
+        this.getColumnName(211),
+        this.option
+      );
+      if (inSave) {
+        this.$nextTick(() => {
+          this.$refs.crud.doLayout();
+        });
+        this.$message.success("保存成功");
+        //关闭窗口
+        this.$refs.crud.$refs.dialogColumn.columnBox = false;
+      }
+    },
+    async resetColumn() {
+      this.option = option;
+      const inSave = await this.delColumnData(this.getColumnName(211), option);
+      if (inSave) {
+        this.$nextTick(() => {
+          this.$refs.crud.doLayout();
+        });
+        this.getAllWorkDicts()
+        this.$message.success("重置成功");
+        this.$refs.crud.$refs.dialogColumn.columnBox = false;
+      }
+    },
+    //返回列表
+    goBack() {
+      if (this.$route.query.orderId || this.$route.query.check) {
+        this.$router.$avueRouter.closeTag(this.$route.fullPath);
+        this.$router.push({
+          path: "/salesOrder/index"
+        });
+      }
+      this.detailData = this.$options.data().detailData;
+      this.show = true;
+      this.onLoad(this.page, this.search);
+      this.$store.commit("OUT_PJXS_STATUS_TWO");
+    },
+  }
+}
+</script>
+
+<style  lang="scss"  scoped>
+.page-crad ::v-deep .basic-container__card {
+  height: 94.2vh;
+}
+
+.stat-td {
+  text-align: center;
+  position: relative;
+}
+
+.stat-img {
+  width: 95%;
+  height: 100px;
+}
+
+.stat-tip {
+  position: absolute;
+  left: 15px;
+  top: 5px;
+
+  .money {
+    color: #fff;
+    font-size: 28px;
+    text-align: left;
+    font-weight: 600;
+  }
+
+  .title {
+    color: #fff;
+    font-size: 14px;
+    text-align: left;
+    margin-top: 5px;
+    margin-bottom: 0px;
+  }
+}
+</style>

+ 294 - 0
src/views/salesOrderTwo/js/optionList.js

@@ -0,0 +1,294 @@
+import { number } from "echarts"
+
+export const option = {
+  searchShow: true,
+  searchMenuSpan: 8,
+  align: "center",
+  searchSpan: 8,
+  tip: false,
+  border: true,
+  index: true,
+  addBtn: false,
+  viewBtn: false,
+  editBtn: false,
+  delBtn: false,
+  menuWidth: 70,
+  searchIcon: true,
+  searchIndex: 2,
+  showSummary: true,
+  summaryText: "合计",
+  sumColumnList: [
+    {
+      name: "debitAmount",
+      type: "sum"
+    },
+    {
+      name: "deliveringAmount",
+      type: "sum"
+    },
+    {
+      name: "balanceAmount",
+      type: "sum"
+    },
+    {
+      name: "settlmentAmount",
+      type: "sum"
+    }
+  ],
+  column: [
+    {
+      label: "单号",
+      prop: "sysNo",
+      overHidden: true,
+      search: true,
+      index: 1
+    },
+    {
+      label: "客户名称",
+      prop: "corpId",
+      type: 'select',
+      dicData: [],
+      search: true,
+      overHidden: true,
+      index: 2
+    },
+    {
+      label: "电话",
+      prop: "corpTel",
+      // search: true,
+      overHidden: true,
+      index: 3
+    },
+    {
+      label: "日期",
+      prop: "businesDate",
+      search: true,
+      overHidden: true,
+      index: 4
+    },
+    {
+      label: "合同金额",
+      prop: "debitAmount",
+      overHidden: true,
+      index: 5
+    },
+    {
+      label: "已送货",
+      prop: "deliveringAmount",
+      overHidden: true,
+      // search: true,
+      index: 6
+    },
+    {
+      label: "未收款",
+      prop: "balanceAmount",
+      overHidden: true,
+      // search: true,
+      index: 7
+    },
+    {
+      label: "已收款",
+      prop: "settlmentAmount",
+      overHidden: true,
+      // search: true,
+      index: 8
+    },
+    {
+      label: "收款状态",
+      prop: "status",
+      type: 'select',
+      index: 9
+    },
+    {
+      label: "送货状态",
+      prop: "status",
+      type: 'select',
+      // search: true,
+      index: 10
+    },
+    {
+      label: "客户分类",
+      prop: "corpType",
+      type: "tree",
+      dicData: [],
+      filterable: true,
+      props: {
+        label: "title",
+        value: "id"
+      },
+      hide: true,
+      search: true,
+      showColumn: false,
+      index: 12
+    },
+    {
+      label: "制单人",
+      prop: "createUser",
+      type: "select",
+      filterable: true,
+      props: {
+        label: "name",
+        value: "id"
+      },
+      dicData: [],
+      hide: true,
+      search: true,
+      showColumn: false,
+      index: 14
+    }
+  ]
+}
+export const optionList = {
+  align: "center",
+  addBtn: false,
+  refreshBtn: false,
+  editBtn: false,
+  delBtn: false,
+  border: true,
+  menuWidth: 120,
+  stripe: true,
+  index: true,
+  indexSlot: true,
+  showSummary: true,
+  summaryText: "合计",
+  sumColumnList: [
+    {
+      name: "amount",
+      type: "sum"
+    },
+    {
+      name: "storageAmount",
+      type: "sum"
+    },
+    {
+      name: "storageInQuantity",
+      type: "sum"
+    },
+    {
+      name: "actualQuantity",
+      type: "sum"
+    }
+  ],
+  column: [
+    {
+      label: "产品",
+      prop: "cname",
+      width: '250px',
+      overHidden: true
+    },
+    {
+      label: "图片",
+      prop: "img",
+      overHidden: true
+    },
+    {
+      label: "仓库",
+      prop: "storageId",
+      overHidden: true,
+      type: "select",
+      props: {
+        label: "cname",
+        value: "id"
+      },
+      dicData: []
+    },
+    {
+      label: "数量",
+      prop: "storageInQuantity",
+      overHidden: true
+    },
+    {
+      label: "单位",
+      prop: "unit",
+      type: "select",
+      props: {
+        label: "dictValue",
+        value: "dictValue"
+      },
+      dicData: [],
+      cell: true,
+      overHidden: true
+    },
+    {
+      label: "单价",
+      prop: "price",
+      overHidden: true
+    },
+    {
+      label: "金额",
+      prop: "amount",
+      overHidden: true
+    },
+    {
+      label: "送货数量",
+      prop: "actualQuantity",
+      type: 'number',
+      controls: false,
+      cell: true,
+      overHidden: true
+    },
+    {
+      label: "备注",
+      prop: "remarks",
+      cell: true,
+      overHidden: true
+    },
+    {
+      label: "进价",
+      prop: "purchasePrice",
+      overHidden: true
+    }
+  ]
+}
+
+export const feeOption = {
+  align: "center",
+  addBtn: false,
+  refreshBtn: false,
+  editBtn: false,
+  delBtn: false,
+  border: true,
+  menuWidth: 120,
+  stripe: true,
+  index: true,
+  indexSlot: true,
+  column: [
+    {
+      label: "收款单号",
+      prop: "sysNo",
+      overHidden: true
+    },
+    {
+      label: "收款日期",
+      prop: "settlementDate",
+      type: "datetime",
+      format: "yyyy-MM-dd HH:mm:ss",
+      valueFormat: "yyyy-MM-dd HH:mm:ss",
+      overHidden: true
+    },
+    {
+      label: "收款金额",
+      prop: "amount",
+      cell: true,
+      overHidden: true
+    },
+    {
+      label: "收款账户",
+      prop: "account",
+      type: "select",
+      props: {
+        label: "dictValue",
+        value: "dictValue"
+      },
+      dicData: [],
+      cell: true,
+      overHidden: true
+    },
+    {
+      label: "备注",
+      prop: "remark",
+      cell: true,
+      overHidden: true
+    }
+  ]
+}

+ 1 - 1
vue.config.js

@@ -32,7 +32,7 @@ module.exports = {
       '/api': {
         //本地服务接口地址
         // target: 'http://192.168.3.64:1080',
-        target: 'http://192.168.1.111:1080',
+        target: 'http://192.168.0.101:1080',
         // target: 'http://124.222.119.174:1080',
         // 打包地址
         // target: 'http://121.37.83.47:10004',//服务器ip