caojunjie 3 лет назад
Родитель
Сommit
99c9e248cf
26 измененных файлов с 2035 добавлено и 67 удалено
  1. 0 0
      public/cdn/avue/2.8.18/avue.min.js
  2. 45 0
      src/api/boxManagement/buyContainer/index.js
  3. 10 1
      src/components/check/checkSchedule.vue
  4. 13 1
      src/components/port-info/index.vue
  5. 14 1
      src/views/approveData/configuration/mainList.json
  6. 12 0
      src/views/approveData/configuration/mainList2.json
  7. 13 1
      src/views/approveData/configuration/mainList3.json
  8. 12 0
      src/views/approveData/configuration/mainList4.json
  9. 172 21
      src/views/basicData/container/archives.vue
  10. 2 1
      src/views/basicData/customerInformation/detailsPageEdit.vue
  11. 6 0
      src/views/bidingDocument/issueTender/index.vue
  12. 248 38
      src/views/boxManagement/buyContainer/detailsPage.vue
  13. 1 1
      src/views/exportTrade/salesContract/detailsPage.vue
  14. 16 1
      src/views/generalLedger/accountsReceivable/index.vue
  15. 16 1
      src/views/generalLedger/ledgerPayable/index.vue
  16. 170 0
      src/views/wel/home/equipmentControl/components/audit-data.vue
  17. 44 0
      src/views/wel/home/equipmentControl/components/butCard.vue
  18. 63 0
      src/views/wel/home/equipmentControl/components/card.vue
  19. 148 0
      src/views/wel/home/equipmentControl/components/charge-today.vue
  20. 138 0
      src/views/wel/home/equipmentControl/components/pay-today.vue
  21. 181 0
      src/views/wel/home/equipmentControl/components/quick-launch.vue
  22. 293 0
      src/views/wel/home/equipmentControl/components/realtime-data.vue
  23. 145 0
      src/views/wel/home/equipmentControl/components/sales-reached.vue
  24. 186 0
      src/views/wel/home/equipmentControl/components/sales-trend.vue
  25. 84 0
      src/views/wel/home/equipmentControl/landTransportation.vue
  26. 3 0
      src/views/wel/index.vue

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
public/cdn/avue/2.8.18/avue.min.js


+ 45 - 0
src/api/boxManagement/buyContainer/index.js

@@ -1,4 +1,12 @@
 import request from '@/router/axios';
+//查询箱号
+export const selectArchivesList = (params) => {
+  return request({
+    url: '/api/blade-box-tube/archives/selectArchivesList',
+    method: 'get',
+    params: params
+  })
+}
 //查询列表
 export const getList = (params) => {
   return request({
@@ -35,6 +43,26 @@ export const tradingBoxFiles = (ids) => {
     }
   })
 }
+//删除明细
+export const tradingBoxItem = (ids) => {
+  return request({
+    url: '/api/blade-box-tube/tradingBoxItem/remove',
+    method: 'post',
+    params: {
+      ids,
+    }
+  })
+}
+//删除费用明细
+export const tradingBoxFees = (ids) => {
+  return request({
+    url: '/api/blade-box-tube/tradingBoxFees/remove',
+    method: 'post',
+    params: {
+      ids,
+    }
+  })
+}
 //新增删除
 export function submit(data){
   return request({
@@ -43,3 +71,20 @@ export function submit(data){
     data
   })
 }
+
+// 请核
+export function pleaseCheck(data) {
+  return request({
+    url: '/api/blade-box-tube/tradingBox/checkTradingBox',
+    method: 'post',
+    data: data
+  })
+}
+// 撤销
+export function repealCancel(data) {
+  return request({
+    url: '/api/blade-box-tube/tradingBox/withdrawTradingBox',
+    method: 'post',
+    data: data
+  })
+}

+ 10 - 1
src/components/check/checkSchedule.vue

@@ -1,6 +1,6 @@
 <template>
   <div>
-    <div style="height: 90%;margin-top:30px;margin-left: 20%">
+    <div style="height: 90%;margin-top:30px;margin-left: 20%" v-if="data.length>0">
       <el-steps direction="vertical"
                 :active="active"
                 space="150px"
@@ -36,6 +36,15 @@
         <el-button size="small" @click="$emit('choceScheduleFun')">关闭</el-button>
       </div>
     </div>
+    <div style="height: 90%;margin-top:30px;" v-else>
+      <div style="text-align: center">
+        <i class="el-icon-document" style="font-size: 60px;"></i>
+        <div style="margin: 10px auto">暂无记录</div>
+      </div>
+      <div class="dialogButton">
+        <el-button size="small" @click="$emit('choceScheduleFun')">关闭</el-button>
+      </div>
+    </div>
   </div>
 </template>
 

+ 13 - 1
src/components/port-info/index.vue

@@ -1,7 +1,7 @@
 <template>
   <div>
     <div style="display:flex">
-      <el-select v-model="value" placeholder="请选择" :disabled="disabled" @input="$emit('balabala', value)" filterable
+      <el-select v-model="value" placeholder="请选择" :disabled="disabled" @input="calculation(value)" @clear="calculation(value)" filterable
         clearable>
         <el-option v-for="item in portList" :key="item.id" :label="item.name" :value="type=='id'?item.id:item.name">
         </el-option>
@@ -130,12 +130,24 @@ export default {
     });
   },
   methods: {
+    calculation(value){
+      this.$emit('balabala', value)
+      if (!value){
+        this.$emit("balabalaTow", null);
+      }
+      for (let item of this.portList){
+        if (item.id == value){
+          this.$emit("balabalaTow", item);
+        }
+      }
+    },
     closed() {
       this.$refs.crud.toggleSelection();
     },
     importPort() {
       if (this.type == 'id') {
         this.$emit("balabala", this.selectionList[0].id);
+        this.$emit("balabalaTow", this.selectionList[0]);
       } else {
         this.$emit("balabala", this.selectionList[0].name);
       }

+ 14 - 1
src/views/approveData/configuration/mainList.json

@@ -114,6 +114,19 @@
       "width": 150
     },
     {
+      "label": "业务日期",
+      "prop": "billTime",
+      "type": "date",
+      "format": "yyyy-MM-dd HH:mm:ss",
+      "valueFormat": "yyyy-MM-dd HH:mm:ss",
+      "unlinkPanels": true,
+      "searchRange": true,
+      "search": true,
+      "overHidden": true,
+      "index": 8,
+      "width": 150
+    },
+    {
       "label": "数量",
       "prop": "orderQuantity",
       "overHidden": true,
@@ -142,4 +155,4 @@
       "index": 12
     }
   ]
-}
+}

+ 12 - 0
src/views/approveData/configuration/mainList2.json

@@ -95,6 +95,18 @@
       "overHidden": true,
       "index": 8,
       "width":200
+    },{
+      "label": "业务日期",
+      "prop": "billTime",
+      "type": "date",
+      "format": "yyyy-MM-dd HH:mm:ss",
+      "valueFormat": "yyyy-MM-dd HH:mm:ss",
+      "unlinkPanels": true,
+      "searchRange": true,
+      "search": true,
+      "overHidden": true,
+      "index": 8,
+      "width": 150
     }
   ]
 }

+ 13 - 1
src/views/approveData/configuration/mainList3.json

@@ -112,6 +112,18 @@
       "overHidden": true,
       "index": 8,
       "width": 150
+    },{
+      "label": "业务日期",
+      "prop": "billTime",
+      "type": "date",
+      "format": "yyyy-MM-dd HH:mm:ss",
+      "valueFormat": "yyyy-MM-dd HH:mm:ss",
+      "unlinkPanels": true,
+      "searchRange": true,
+      "search": true,
+      "overHidden": true,
+      "index": 8,
+      "width": 150
     },
     {
       "label": "数量",
@@ -156,4 +168,4 @@
       "index": 14
     }
   ]
-}
+}

+ 12 - 0
src/views/approveData/configuration/mainList4.json

@@ -112,6 +112,18 @@
       "overHidden": true,
       "index": 8,
       "width": 150
+    },{
+      "label": "业务日期",
+      "prop": "billTime",
+      "type": "date",
+      "format": "yyyy-MM-dd HH:mm:ss",
+      "valueFormat": "yyyy-MM-dd HH:mm:ss",
+      "unlinkPanels": true,
+      "searchRange": true,
+      "search": true,
+      "overHidden": true,
+      "index": 8,
+      "width": 150
     },
     {
       "label": "数量",

+ 172 - 21
src/views/basicData/container/archives.vue

@@ -7,6 +7,7 @@
         :table-loading="loading"
         :data="dataList"
         ref="crud"
+        :key="key"
         @on-load="onLoad"
         @row-save="rowSave"
         @row-update="(row,index,done,loading)=>{rowSave(row,done,loading,index)}"
@@ -17,30 +18,66 @@
         @refresh-change="refreshChange"
         @resetColumn="resetColumnTwo('crud','option','optionList',234)"
         @saveColumn="saveColumnTwo('crud','option','optionList',234)"
-      :page.sync="page">
+        :page.sync="page">
+      <template slot-scope="scope" slot="menuLeft">
+        <el-button type="success" size="small" icon="el-icon-bottom" @click="excelBox = true">导入
+        </el-button>
+        <el-button type="warning"
+                   icon="el-icon-download"
+                   size="small"
+                   @click="outExport">导出
+        </el-button>
+      </template>
       <template slot="leasingCompanyIdForm">
         <crop-select v-model="form.leasingCompanyId" @getCorpData="getGSData" corpType="GS"/>
       </template>
+      <template slot="addressIdForm">
+        <port-info v-model="form.addressId" type="id" @balabalaTow="balabala"/>
+      </template>
+      <template slot="addressIdSearch">
+        <port-info v-model="search.addressId" type="id"/>
+      </template>
+      <template slot="addressId" slot-scope="{row}">
+        {{ row.address }}
+      </template>
       <template slot="leasingCompanyIdSearch">
         <crop-select v-model="search.leasingCompanyId" corpType="GS"/>
       </template>
       <template slot="leasingCompanyId" slot-scope="{row}">
-        {{row.leasingCompany}}
+        {{ row.leasingCompany }}
       </template>
     </avue-crud>
+    <el-dialog title="导入客户" append-to-body :visible.sync="excelBox" width="555px" :close-on-click-modal="false"
+               v-dialog-drag>
+      <avue-form :option="excelOption" v-model="excelForm" table-loading="excelLoading"
+                 :upload-before="uploadBefore" :upload-after="uploadAfter">
+        <template slot="excelTemplate">
+          <el-button type="primary" @click="derivation">
+            点击下载<i class="el-icon-download el-icon--right"></i>
+          </el-button>
+        </template>
+      </avue-form>
+      <p style="text-align: center;color: #DC0505">
+        温馨提示 第一次导入时请先下载模板
+      </p>
+    </el-dialog>
   </basic-container>
 </template>
 
 <script>
 import {addUpdate, boxRemove, getList, remove} from "@/api/box/archives";
+import {getToken} from "@/util/auth";
+import {getAllBoxs} from "@/api/basicData/portinformation";
 
 export default {
   name: "archives",
   data() {
     return {
+      excelBox: false,
       loading: false,
       search: {},
       form: {},
+      excelForm: {},
       dataList: [],
       page: {
         pageSize: 20,
@@ -48,13 +85,39 @@ export default {
         total: 0,
         pageSizes: [10, 20, 30, 40, 50, 100, 200, 300, 400, 500]
       },
-      option:{},
+      excelOption: {
+        submitBtn: false,
+        emptyBtn: false,
+        column: [
+          {
+            label: "模板下载",
+            prop: "excelTemplate",
+            formslot: true,
+            span: 24
+          },
+          {
+            label: "模板上传",
+            prop: "excelFile",
+            type: "upload",
+            drag: true,
+            loadText: "模板上传中,请稍等",
+            span: 24,
+            propsHttp: {
+              res: "data"
+            },
+            tip: "请上传 .xls,.xlsx 标准格式文件",
+            action: "/api/blade-box-tube/archives/import-descParts-info"
+          }
+        ]
+      },
+      key: 0,
+      option: {},
       optionList: {
         index: true,
         span: 8,
         border: true,
         searchMenuPosition: "right",
-        align:"center",
+        align: "center",
         searchSpan: 8,
         searchIcon: true,
         searchIndex: 2,
@@ -64,19 +127,23 @@ export default {
           label: '合同号',
           prop: 'contractNo',
           width: 100,
+          overHidden: true,
           search: true,
         }, {
           label: '箱号',
           prop: 'code',
           width: 100,
+          overHidden: true,
           search: true,
         }, {
           label: '箱类型',
-          prop: 'name',
+          prop: 'typeId',
           width: 100,
+          overHidden: true,
           search: true,
           filterable: true,
           type: 'select',
+          dataType: 'number',
           props: {
             label: 'name',
             value: 'id'
@@ -86,6 +153,7 @@ export default {
           label: '最新地点',
           prop: 'addressId',
           width: 100,
+          overHidden: true,
           search: true,
         }, {
           label: '最新日期',
@@ -103,11 +171,13 @@ export default {
           label: '租赁公司',
           prop: 'leasingCompanyId',
           width: 100,
+          overHidden: true,
           search: true,
         }, {
           label: '箱来源',
           prop: 'boxSource',
           width: 100,
+          overHidden: true,
           search: true,
           filterable: true,
           type: 'select',
@@ -120,6 +190,7 @@ export default {
           label: '箱状态',
           prop: 'boxStatus',
           width: 100,
+          overHidden: true,
           search: true,
           filterable: true,
           type: 'select',
@@ -132,6 +203,7 @@ export default {
           label: '租赁方式',
           prop: 'leaseMethod',
           width: 100,
+          overHidden: true,
           filterable: true,
           type: 'select',
           dicUrl: "/api/blade-system/dict-biz/dictionary?code=lease_method",
@@ -140,32 +212,49 @@ export default {
             value: "dictKey"
           }
         }, {
-          label: '空重',
+          label: '空重(kg)',
           prop: 'emptyWeight',
           width: 100,
+          overHidden: true,
+          type: 'number',
+          controls: false,
         }, {
-          label: '毛重',
-          prop: 'gorssweight',
+          label: '毛重(kg)',
+          prop: 'gorssWeight',
           width: 100,
+          overHidden: true,
+          type: 'number',
+          controls: false,
         }, {
-          label: '皮重',
+          label: '皮重(kg)',
           prop: 'tare',
           width: 100,
+          overHidden: true,
+          type: 'number',
+          controls: false,
         }, {
-          label: '装载重量',
+          label: '装载重量(kg)',
           prop: 'loadingWeight',
-          width: 100
+          width: 100,
+          overHidden: true,
+          type: 'number',
+          controls: false,
         }, {
-          label: '容积',
+          label: '容积(m³)',
           prop: 'volume',
+          type: 'number',
+          controls: false,
+          overHidden: true,
           width: 100
         }, {
           label: '状态',
-          disabled: true,
           width: 100,
+          overHidden: true,
+          search: true,
           filterable: true,
           prop: 'status',
           type: 'select',
+          dataType: 'number',
           dicUrl: "/api/blade-system/dict-biz/dictionary?code=box_archives_status",
           props: {
             label: "dictValue",
@@ -173,12 +262,14 @@ export default {
           }
         }, {
           label: '造箱公司',
-          prop: 'boxMakingCompanyId',
+          prop: 'boxMakingCompany',
           width: 100,
+          overHidden: true,
           search: true,
         }, {
           label: '造箱日期',
-          prop: 'boxMakingDateList',
+          prop: 'boxMakingDate',
+          searchProp: 'boxMakingDateList',
           width: 100,
           overHidden: true,
           search: true,
@@ -189,7 +280,8 @@ export default {
           valueFormat: "yyyy-MM-dd HH:mm:ss"
         }, {
           label: '起租日期',
-          prop: 'leaseCommencementDateList',
+          prop: 'leaseCommencementDate',
+          searchProp: 'leaseCommencementDateList',
           width: 100,
           overHidden: true,
           search: true,
@@ -200,7 +292,7 @@ export default {
           valueFormat: "yyyy-MM-dd HH:mm:ss"
         }, {
           label: '购入日期',
-          prop: 'purchaseDateList',
+          prop: 'purchaseDate',
           width: 100,
           overHidden: true,
           type: "date",
@@ -211,11 +303,13 @@ export default {
         }, {
           label: '箱龄',
           prop: 'boxAge',
+          overHidden: true,
           width: 100,
         }, {
           label: '照片',
           prop: 'filesList',
           width: 200,
+          overHidden: true,
           type: 'upload',
           span: 24,
           listType: 'picture-card',
@@ -232,6 +326,16 @@ export default {
   },
   async created() {
     this.option = await this.getColumnData(this.getColumnName(234), this.optionList);
+    this.key++
+    this.findObject(this.option.column, "typeId").change = ({value, column}) => {
+      getAllBoxs().then(res => {
+        for (let item of res.data.data){
+          if (value == item.id){
+            this.form.name = item.name
+          }
+        }
+      })
+    }
     let i = 0;
     this.option.column.forEach(item => {
       if (item.search) i++
@@ -243,17 +347,64 @@ export default {
     }
   },
   methods: {
+    //导出
+    outExport() {
+      this.$confirm('是否导出当前所有箱档案?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        let queryParams = this.search
+        const routeData = this.$router.resolve({
+          path: '/api/blade-box-tube/archives/export-archives-out',      //跳转目标窗口的地址
+          query: {
+            'Blade-Auth': getToken(),
+            ...queryParams    //括号内是要传递给新窗口的参数
+          }
+        })
+        window.open(routeData.href.slice(1, routeData.href.length));
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '已取消' //
+        });
+      })
+    },
+    derivation() {
+      window.open(
+          `/api/blade-box-tube/archives/export-archives-info?${this.website.tokenHeader
+          }=${getToken()}`
+      );
+    },
+    uploadBefore(file, done, loading) {
+      done();
+      loading = true;
+    },
+    uploadAfter(res, done, loading, column) {
+      this.excelBox = false;
+      this.$message.success("导入成功!");
+      this.onLoad(this.page, this.search);
+      loading = false;
+      done();
+    },
+    balabala(val) {
+      if (val === null) {
+        this.form.address = ''
+      } else {
+        this.form.address = val.name
+      }
+    },
     getGSData(row) {
       this.form.leasingCompany = row.cname
     },
     //关闭弹窗前
-    beforeClose(done,type){
-      this.onLoad(this.page,this.search)
+    beforeClose(done, type) {
+      this.onLoad(this.page, this.search)
       done()
     },
     //刷新
-    refreshChange(){
-      this.onLoad(this.page,this.search)
+    refreshChange() {
+      this.onLoad(this.page, this.search)
     },
     rowDel(form, index) {
       this.$confirm('此操作将永久删除该行, 是否继续?', '提示', {

+ 2 - 1
src/views/basicData/customerInformation/detailsPageEdit.vue

@@ -172,7 +172,7 @@
       </span>
     </el-dialog>
     <el-dialog title="创建用户" :visible.sync="dialogVisibleBt" append-to-body width="60%">
-      <avue-form ref="formDataTwo" v-model="formDataTwo" :option="optionData">
+      <avue-form v-if="dialogVisibleBt" ref="formDataTwo" v-model="formDataTwo" :option="optionData">
       </avue-form>
       <span slot="footer" class="dialog-footer">
         <el-button @click="dialogVisibleBt = false">取 消</el-button>
@@ -1030,6 +1030,7 @@ export default {
             id: this.formRow.id
           }).then(res => {
             this.dialogVisibleBt = false;
+            this.formDataTwo = {}
             this.$message.success(
               "创建用户成功,默认帐号:手机号。默认密码:123456"
             );

+ 6 - 0
src/views/bidingDocument/issueTender/index.vue

@@ -68,6 +68,12 @@ export default {
         selection: true,
         height: "auto",
         column: [{
+          label: '合同号',
+          prop: 'contractNo',
+          search: true,
+          width:150,
+          index:0,
+        },{
           label: '发布日期',
           prop: 'releaseTime',
           search: true,

+ 248 - 38
src/views/boxManagement/buyContainer/detailsPage.vue

@@ -7,6 +7,17 @@
         </el-button>
       </div>
       <div class="add-customer-btn">
+        <el-dropdown style="margin-right: 10px">
+          <el-button type="primary" size="small">
+            审核处理<i class="el-icon-arrow-down el-icon--right"></i>
+          </el-button>
+          <el-dropdown-menu slot="dropdown">
+            <el-dropdown-item @click.native="pleaseCheck">请核数据</el-dropdown-item>
+            <el-dropdown-item @click.native="checkScheduleDialog = true,checkId = form.id">审核进度</el-dropdown-item>
+            <el-dropdown-item @click.native="repealCancel">撤销请核</el-dropdown-item>
+            <el-dropdown-item @click.native="changeApproveOpen">特殊审批</el-dropdown-item>
+          </el-dropdown-menu>
+        </el-dropdown>
         <el-button class="el-button--small-yh" type="primary" size="small" @click="editCustomer">
           {{ form.id ? "确认修改" : "确认新增" }}
         </el-button>
@@ -27,15 +38,16 @@
           ref="crud"
           :upload-delete="uploadDelete"
           @row-save="rowSave"
-          @row-update="(row,index,done,loading)=>{rowSave(row,done,loading,index)}"
+          @row-update="rowUpdate"
           @resetColumn="resetColumnTwo('crud','option','optionList',235.1)"
           @saveColumn="saveColumnTwo('crud','option','optionList',235.1)">
-        <template slot-scope="{type,size,row,$index}" slot="menu">
-          <el-button icon="el-icon-edit" :size="size" :type="type" @click="$refs.crud.rowEdit(row,$index)">编辑</el-button>
-          <el-button icon="el-icon-delete" :size="size" :type="type">删除</el-button>
+        <template slot-scope="{type,size,row,index}" slot="menu">
+          <el-button icon="el-icon-edit" :size="size" :type="type" @click="$refs.crud.rowEdit(row,index)">编辑
+          </el-button>
+          <el-button icon="el-icon-delete" :size="size" :type="type" @click="rowDel(row,index,'MX')">删除</el-button>
         </template>
-        <template slot="addressIdForm">
-          <port-info v-model="formTwo.addressId" type="id"/>
+        <template slot="addressForm">
+          <port-info v-model="formTwo.addressId" type="id" @balabalaTow="balabala"/>
         </template>
         <template slot="boxMakingCompanyIdForm">
           <crop-select v-model="formTwo.boxMakingCompanyId" :refresh="false" @getCorpData="getGSData" corpType="GS"/>
@@ -47,17 +59,18 @@
           :option="optionTwo"
           :data="dataListTwo"
           v-model="formThree"
-          ref="crudTwo"
           @row-save="rowSave"
-          @row-update="(row,index,done,loading)=>{rowSave(row,done,loading,index)}"
+          ref="crudTwo"
+          @row-update="rowUpdate"
           @resetColumn="resetColumnTwo('crudTwo','option','optionList',235.2)"
           @saveColumn="saveColumnTwo('crudTwo','option','optionList',235.2)">
-        <template slot-scope="{type,size,row,$index}" slot="menu">
-          <el-button icon="el-icon-edit" :size="size" :type="type" @click="$refs.crudTwo.rowEdit(row,$index)">编辑</el-button>
-          <el-button icon="el-icon-delete" :size="size" :type="type">删除</el-button>
+        <template slot-scope="{type,size,row,index}" slot="menu">
+          {{index}}
+          <el-button icon="el-icon-edit" :size="size" :type="type" @click="$refs.crudTwo.rowEdit(row,index)">编辑</el-button>
+          <el-button icon="el-icon-delete" :size="size" :type="type" @click="rowDel(row,index,'FY')">删除</el-button>
         </template>
         <template slot="itemIdForm">
-          <breakdown-select v-model="formThree.itemId" @selectValue="selectValue(value)"
+          <breakdown-select v-model="formThree.itemId" @selectValue="selectValue"
                             :configuration="breakConfiguration"></breakdown-select>
         </template>
       </avue-crud>
@@ -71,19 +84,50 @@
           display
       />
     </trade-card>
+    <el-dialog
+        append-to-body
+        title="审批进度"
+        class="el-dialogDeep"
+        :visible.sync="checkScheduleDialog"
+        width="40%"
+        :close-on-click-modal="false"
+        :destroy-on-close="true"
+        :close-on-press-escape="false"
+        v-dialog-drag
+    >
+      <check-schedule
+          :checkId="checkId"
+          :batchNo="batchNo"
+          @choceScheduleFun="choceScheduleFun"
+      ></check-schedule>
+    </el-dialog>
   </div>
 </template>
 
 <script>
-import {detail, submit, tradingBoxFiles} from "@/api/boxManagement/buyContainer";
+import {
+  detail,
+  submit,
+  tradingBoxFiles,
+  selectArchivesList,
+  tradingBoxItem,
+  tradingBoxFees,
+  pleaseCheck,
+  repealCancel
+} from "@/api/boxManagement/buyContainer";
 
+import checkSchedule from "@/components/check/checkSchedule";
 export default {
   name: "detailsPage",
   props: {
     onLoad: Object
   },
+  components:{checkSchedule},
   data() {
     return {
+      checkScheduleDialog: false,
+      checkId: '',
+      batchNo: '',
       breakConfiguration: {
         multipleChoices: false,
         multiple: false,
@@ -140,11 +184,38 @@ export default {
         column: [{
           label: '箱号',
           prop: 'code',
-          width: 100
+          width: 100,
+          overHidden: true,
+          filterable: true,
+          remote: true,
+          type: "select",
+          dicUrl: "/api/blade-box-tube/archives/selectArchivesList?size=10&current=1&code={{key}}",
+          props: {
+            label: "code",
+            value: "code"
+          },
+          change: ({value, column}) => {
+            selectArchivesList({code: value}).then(res => {
+              for (let item of res.data.data) {
+                if (value == item.code) {
+                  this.formTwo = {
+                    boxSource: item.boxSource,
+                    boxStatus: item.boxStatus,
+                    emptyWeight: item.emptyWeight,
+                    grossWeight: item.gorssWeight,
+                    tare: item.tare,
+                    loadingWeight: item.loadingWeight,
+                    volume: item.volume,
+                  }
+                }
+              }
+            })
+          }
         }, {
           label: '币别',
           prop: 'currency',
           width: 100,
+          overHidden: true,
           filterable: true,
           type: "select",
           dicUrl: "/api/blade-system/dict-biz/dictionary?code=currency",
@@ -155,11 +226,13 @@ export default {
         }, {
           label: '金额',
           prop: 'amount',
+          overHidden: true,
           width: 100
         }, {
           label: '箱类型',
           prop: 'boxTypeId',
           width: 100,
+          overHidden: true,
           filterable: true,
           type: 'select',
           props: {
@@ -169,11 +242,14 @@ export default {
           dicUrl: '/api/blade-client/container/listMessage'
         }, {
           label: '最新地点',
-          prop: 'addressId',
+          prop: 'address',
+          overHidden: true,
+          formProp: 'addressId',
           width: 100
         }, {
           label: '最新日期',
           prop: 'newDate',
+          overHidden: true,
           width: 100,
           type: "date",
           format: "yyyy-MM-dd",
@@ -182,6 +258,7 @@ export default {
           label: '箱来源',
           prop: 'boxSource',
           width: 100,
+          overHidden: true,
           filterable: true,
           type: 'select',
           dicUrl: "/api/blade-system/dict-biz/dictionary?code=box_source",
@@ -193,6 +270,7 @@ export default {
           label: '箱状态',
           prop: 'boxStatus',
           width: 100,
+          overHidden: true,
           filterable: true,
           type: 'select',
           dicUrl: "/api/blade-system/dict-biz/dictionary?code=box_status",
@@ -201,30 +279,46 @@ export default {
             value: "dictKey"
           }
         }, {
-          label: '空重',
+          label: '空重(kg)',
           prop: 'emptyWeight',
+          type: 'number',
+          overHidden: true,
+          controls: false,
           width: 100
         }, {
-          label: '毛重',
+          label: '毛重(kg)',
           prop: 'grossWeight',
+          type: 'number',
+          overHidden: true,
+          controls: false,
           width: 100
         }, {
-          label: '皮重',
+          label: '皮重(kg)',
           prop: 'tare',
+          overHidden: true,
+          type: 'number',
+          controls: false,
           width: 100
         }, {
-          label: '装载重量',
+          label: '装载重量(kg)',
           prop: 'loadingWeight',
+          type: 'number',
+          overHidden: true,
+          controls: false,
           width: 100
         }, {
-          label: '容积',
+          label: '容积(m³)',
           prop: 'volume',
+          type: 'number',
+          overHidden: true,
+          controls: false,
           width: 100
         }, {
           label: '状态',
           prop: 'status',
           width: 100,
-          dataType:'number',
+          overHidden: true,
+          dataType: 'number',
           filterable: true,
           type: 'select',
           dicUrl: "/api/blade-system/dict-biz/dictionary?code=approval_status",
@@ -235,11 +329,13 @@ export default {
         }, {
           label: '造箱公司',
           prop: 'boxMakingCompanyId',
+          overHidden: true,
           width: 100
         }, {
           label: '造箱日期',
           prop: 'boxMakingDate',
           width: 100,
+          overHidden: true,
           type: "date",
           format: "yyyy-MM-dd",
           valueFormat: "yyyy-MM-dd HH:mm:ss"
@@ -247,17 +343,20 @@ export default {
           label: '起租日期',
           prop: 'leaseCommencementDate',
           width: 100,
+          overHidden: true,
           type: "date",
           format: "yyyy-MM-dd",
           valueFormat: "yyyy-MM-dd HH:mm:ss"
         }, {
           label: '箱龄',
           prop: 'boxAge',
+          overHidden: true,
           width: 100
         }, {
           label: '照片',
           prop: 'tradingBoxFilesList',
           width: 200,
+          overHidden: true,
           type: 'upload',
           span: 24,
           listType: 'picture-card',
@@ -271,10 +370,11 @@ export default {
         }, {
           label: '备注',
           prop: 'remarks',
+          overHidden: true,
           type: 'textarea',
           minRows: 3,
           span: 24,
-          width: 100
+          width: 200
         }]
       },
       optionBack: {},
@@ -296,19 +396,30 @@ export default {
         column: [{
           label: '收款对象',
           prop: 'corpId',
+          overHidden: true,
           width: 100
         }, {
           label: '箱号',
           prop: 'code',
-          width: 100
+          width: 100,
+          overHidden: true,
+          filterable: true,
+          type: "select",
+          dicUrl: "/api/blade-box-tube/archives/selectArchivesList",
+          props: {
+            label: "code",
+            value: "code"
+          },
         }, {
           label: '费用名称',
           prop: 'itemId',
+          overHidden: true,
           width: 100
         }, {
           label: '币别',
           prop: 'currency',
           width: 100,
+          overHidden: true,
           filterable: true,
           type: "select",
           dicUrl: "/api/blade-system/dict-biz/dictionary?code=currency",
@@ -319,19 +430,29 @@ export default {
         }, {
           label: '单价',
           prop: 'price',
+          type: 'number',
+          overHidden: true,
+          controls: false,
           width: 100
         }, {
           label: '数量',
           prop: 'quantity',
+          type: 'number',
+          controls: false,
+          overHidden: true,
           width: 100
         }, {
           label: '金额',
           prop: 'amount',
+          type: 'number',
+          controls: false,
+          overHidden: true,
           width: 100
         }, {
           label: '备注',
           prop: 'remarks',
           type: 'textarea',
+          overHidden: true,
           minRows: 3,
           span: 24,
           width: 100
@@ -340,23 +461,109 @@ export default {
       optionTwoBack:{},
       dataListTwo:[],
       dataList: [],
-      tradingBoxFilesList:[]
+      tradingBoxFilesList: []
     }
   },
   created() {
-    if (this.onLoad.id){
+    if (this.onLoad.id) {
       this.refresh(this.onLoad.id)
     }
   },
   methods: {
+    // 明细删除
+    rowDel(row, index, type) {
+      this.$confirm("确定将选择数据删除?", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(() => {
+            if (row.id) {
+              if (type == "MX") {
+                tradingBoxItem(row.id).then(res => {
+                  if (res.data.success) {
+                    this.$message.success("操作成功!");
+                    this.dataList.splice(index, 1);
+                  }
+                });
+              } else if (type == "FY") {
+                tradingBoxFees(row.id).then(res => {
+                  if (res.data.success) {
+                    this.$message.success("操作成功!");
+                    this.dataListTwo.splice(index, 1);
+                  }
+                });
+              }
+            } else {
+              if (type == "MX") {
+                this.dataList.splice(index, 1);
+                this.$message.success("操作成功!");
+              } else if (type == "FY") {
+                this.dataListTwo.splice(index, 1);
+                this.$message.success("操作成功!");
+              }
+            }
+          }
+      )
+      ;
+    },
+    balabala(val) {
+      if (val === null) {
+        this.formTwo.address = ''
+      } else {
+        this.formTwo.address = val.name
+      }
+    },
     //选择费用名称
-    selectValue(value){
+    selectValue(value) {
       console.log(value)
     },
-    refresh(id){
-      console.log(id)
-      detail({id:id}).then(res=>{
-        console.log(res)
+    //撤销
+    repealCancel(){
+      this.$confirm("您确定撤回此次申请吗?", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(() => {
+        const data = {
+          id : this.form.id,
+          pageLabel:"买箱",
+          checkFlag: 1,
+        }
+        repealCancel(data).then(res => {
+          this.$message.success('撤回成功')
+        })
+      })
+    },
+    // 请核
+    pleaseCheck() {
+      this.$confirm("您确定提交请核申请吗?", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(() => {
+        const data = {
+          id : this.form.id,
+          url: '/boxManagement/buyContainer/index',
+          pageStatus:"this.$store.getters.domSaleStatus",
+          pageLabel:"买箱",
+          checkFlag: 1,
+        }
+        this.pageLoading = true
+        this.saveLoading = true
+        pleaseCheck({
+          ...data,
+          type: "buy"
+        }).then(res => {
+          this.$message.success('请核成功')
+        })
+      })
+    },
+    //审核关闭
+    choceScheduleFun(){
+      this.checkScheduleDialog = false
+    },
+    refresh(id) {
+      detail({id: id}).then(res => {
         this.form = res.data.data
         this.dataList = res.data.data.tradingBoxItemsList
         this.dataListTwo = res.data.data.tradingBoxFeesList
@@ -367,20 +574,23 @@ export default {
       })
     },
     //新增修改
-    editCustomer(){
+    editCustomer() {
       let data = {
         ...this.form,
-        tradingBoxItemsList:this.dataList,
-        tradingBoxFeesList:this.dataListTwo,
-        tradingBoxFilesList:this.tradingBoxFilesList,
-        type:"buy"
+        tradingBoxItemsList: this.dataList,
+        tradingBoxFeesList: this.dataListTwo,
+        tradingBoxFilesList: this.tradingBoxFilesList,
+        type: "buy"
       }
-      submit(data).then(res=>{
+      submit(data).then(res => {
         console.log(res)
       })
     },
-    rowSave(form, done, loading, index) {
-      console.log(form)
+    rowSave(form,done,loading) {
+      done(form)
+    },
+    rowUpdate(form,index,done,loading) {
+      console.log(index)
       done(form)
     },
     //删除图片

+ 1 - 1
src/views/exportTrade/salesContract/detailsPage.vue

@@ -335,7 +335,7 @@
           </template>
         </avue-crud>
       </trade-card> -->
-      <fee-info ref="feeInfo" :tabShow="2"  :orderFeesList="orderFeesList" :disabled="detailData.status == 1"
+      <fee-info ref="feeInfo" :tabShow="1" :orderFeesList="orderFeesList" :disabled="detailData.status == 1"
         feeUrl="/blade-purchase-sales/orderfees/update" optionType="CK" itemType="销售" @beforeFinance="beforeFinance"
         :inCropId="true" />
       <containerTitle title="合同附件"></containerTitle>

+ 16 - 1
src/views/generalLedger/accountsReceivable/index.vue

@@ -50,7 +50,7 @@ export default {
         menu: false,
         searchIndex: 2,
         searchIcon: true,
-        searchMenuSpan: 6,
+        searchMenuSpan: 24,
         searchSpan: 8,
         height: "auto",
         searchMenuPosition: "right",
@@ -117,6 +117,21 @@ export default {
           label: "本期未收金额",
           prop: "outstandingAmount",
           overHidden: true,
+        },{
+          label: '显示0金额',
+          prop: 'whether',
+          type: 'select',
+          hide: true,
+          showColumn: false,
+          // searchValue: 3,
+          dicData: [{
+            label: "是",
+            value: 0
+          }, {
+            label: "否",
+            value: 1
+          }],
+          search: true
         }]
       }
     }

+ 16 - 1
src/views/generalLedger/ledgerPayable/index.vue

@@ -50,7 +50,7 @@ export default {
         menu: false,
         searchIndex: 2,
         searchIcon: true,
-        searchMenuSpan: 6,
+        searchMenuSpan: 24,
         searchSpan: 8,
         height: "auto",
         searchMenuPosition: "right",
@@ -117,6 +117,21 @@ export default {
           label: "本期未付金额",
           prop: "outstandingAmount",
           overHidden: true,
+        },{
+          label: '显示0金额',
+          prop: 'whether',
+          type: 'select',
+          hide: true,
+          showColumn: false,
+          // searchValue: 3,
+          dicData: [{
+            label: "是",
+            value: 0
+          }, {
+            label: "否",
+            value: 1
+          }],
+          search: true
         }]
       }
     }

+ 170 - 0
src/views/wel/home/equipmentControl/components/audit-data.vue

@@ -0,0 +1,170 @@
+<template>
+  <div class="home-container">
+    <el-card class="home-container__card">
+      <div class="title">
+        <span>
+          审核数据
+        </span>
+        <span>
+          <i
+              class="el-icon-refresh-right"
+              style="cursor: pointer;font-size:20px"
+              @click="refresh"
+          ></i>
+        </span>
+      </div>
+      <div class="content" v-loading="loading">
+        <div class="content-item" v-for="(item, index) in list" :key="index">
+          <div class="card">
+            <i :class="item.icon" style="font-size:30px;color:#409EFF"></i>
+            <div class="card-content">
+              <span class="card-content-num">{{ item.qty }}</span>
+              <span class="card-content-text">{{ item.text }}</span>
+            </div>
+          </div>
+        </div>
+      </div>
+    </el-card>
+  </div>
+</template>
+
+<script>
+import {
+  checkDate,
+  shipCheckDate,
+  financeCheck
+} from "@/api/wel";
+
+export default {
+  name: "basicContainer",
+  props: {
+    sysType: Number
+  },
+  data() {
+    return {
+      loading: false,
+      list: [
+        {icon: "el-icon-s-goods", qty: "0", text: "买箱/待审核"},
+        {icon: "el-icon-s-home", qty: "0", text: "卖箱/待审核"}
+      ],
+      tradeType: null
+    };
+  },
+  created() {
+    this.getSysType();
+  },
+  mounted() {
+    this.init();
+  },
+  methods: {
+    init() {
+      // if(this.sysType === 3){
+
+      // }
+      if (this.sysType === 5) {
+        this.list = [
+          {icon: "el-icon-s-order", qty: "0", text: "主营业务/待审核"}
+        ];
+      }
+      this.getCheckDate();
+    },
+    getSysType() {
+      const sysType = localStorage.getItem("sysitemType");
+      if (sysType == 6) {
+        this.tradeType = "JXS";
+      } else if (sysType == 5) {
+        this.tradeType = "SW";
+      } else if (sysType == 4) {
+        this.tradeType = "CK";
+      } else if (sysType == 3) {
+        this.tradeType = "JK";
+      } else if (sysType == 2) {
+        this.tradeType = "GN";
+      } else if (sysType == 1) {
+        this.tradeType = "XX";
+      } else if (sysType == 10) {
+        this.tradeType = "XG";
+      } else if (sysType == 999) {
+        this.tradeType = "ADMIN";
+      }
+    },
+    getCheckDate() {
+      this.loading = true;
+      checkDate({tradeType: this.tradeType}).then(res => {
+        this.list.forEach(e => {
+          if (e.text == "买箱/待审核") {
+            e.qty = res.data.data.purchaseNumber;
+          }
+          if (e.text == "卖箱/待审核") {
+            e.qty = res.data.data.sellNumber;
+          }
+        });
+      }).finally(() => {
+        this.loading = false;
+      });
+    },
+    refresh() {
+      this.getCheckDate();
+    }
+  }
+};
+</script>
+
+<style lang="scss" scoped>
+.home-container {
+  padding: 0px 5px 5px 5px;
+  box-sizing: border-box;
+  height: 100%;
+
+  ::v-deep .el-card__body {
+    padding: 10px 15px;
+    font-size: 14px;
+  }
+
+  &__card {
+    width: 100%;
+    height: 100%;
+  }
+
+  .title {
+    display: flex;
+    justify-content: space-between;
+  }
+}
+
+.content {
+  display: flex;
+  justify-content: space-around;
+
+  &-item {
+    background-color: #f4f8ff;
+    margin-top: 0.5vh;
+    margin-right: 0.5vw;
+    height: 13vh;
+    width: 15vw;
+    display: flex;
+    align-items: center;
+    padding-left: 1.5vw;
+
+    .card {
+      display: flex;
+      align-items: center;
+
+      &-content {
+        padding-left: 1vw;
+        display: flex;
+        flex-direction: column;
+
+        &-num {
+          font-size: 20px;
+          font-weight: 600;
+        }
+
+        &-text {
+          color: #909399;
+        }
+      }
+    }
+  }
+}
+</style>

+ 44 - 0
src/views/wel/home/equipmentControl/components/butCard.vue

@@ -0,0 +1,44 @@
+<template>
+  <div style="padding:5px">
+    <div class="card el-button--primary">
+      <div class="card-content">
+        <i :class="iconName"></i>
+        <div>{{ name }}</div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {};
+  },
+  props: {
+    name: {
+      type: String
+    },
+    iconName: {
+      type: String
+    }
+  },
+  methods: {}
+};
+</script>
+
+<style lang="scss" scoped>
+.card{
+  //background: #ff7d13;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  height: 14vh;
+  .card-content{
+    text-align: center;
+    color: #fff;
+    i{
+      font-size: 30px;
+    }
+  }
+}
+</style>

+ 63 - 0
src/views/wel/home/equipmentControl/components/card.vue

@@ -0,0 +1,63 @@
+<template>
+  <div style="width: 100%;">
+    <div class="card">
+      <div class="card-head">
+        <span> <i :class="iconName" class="index-icon"></i>{{ title }}</span>
+      </div>
+      <div class="card-select">
+        <slot name="select"></slot>
+      </div>
+      <div class="card-content">
+        <slot name="content"></slot>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {};
+  },
+  props: {
+    title: {
+      type: String
+    },
+    iconName: {
+      type: String
+    }
+  },
+  methods: {}
+};
+</script>
+
+<style lang="scss" scoped>
+.card {
+  margin: 5px;
+  .card-head {
+    height: 28px;
+    font-size: 12px;
+    background: #f4f4f4;
+    border: 1px solid #d6d6d6;
+    display: flex;
+    align-items: center;
+  }
+  .card-select {
+    padding: 10px;
+    display: flex;
+    justify-content: right;
+    border-left: 1px solid #d6d6d6;
+    border-right: 1px solid #d6d6d6;
+  }
+  .card-content {
+    border-left: 1px solid #d6d6d6;
+    border-right: 1px solid #d6d6d6;
+    border-bottom: 1px solid #d6d6d6;
+    padding: 10px;
+    height: 100%;
+  }
+}
+.index-icon {
+  margin: 0 10px;
+}
+</style>

+ 148 - 0
src/views/wel/home/equipmentControl/components/charge-today.vue

@@ -0,0 +1,148 @@
+<template>
+  <div class="home-container">
+    <el-card class="home-container__card">
+      <div class="title">
+        <span>
+          今日收款
+        </span>
+        <span>
+          <i
+              class="el-icon-refresh-right"
+              style="cursor: pointer;font-size:20px"
+              @click="refresh"
+          ></i>
+        </span>
+      </div>
+      <div v-loading="loading">
+        <div class="content">
+          <div class="content_item divider">
+            <div>
+              <div class="content_item_num">{{ data.received }}</div>
+              <div class="content_item_text">已收金额</div>
+            </div>
+          </div>
+          <div class="content_item divider">
+            <div>
+              <div class="content_item_num">{{ data.toBeReceived }}</div>
+              <div class="content_item_text">待收金额</div>
+            </div>
+          </div>
+          <div class="content_item">
+            <div>
+              <div class="content_item_num">{{data.unsettledDocuments}}</div>
+              <div class="content_item_text">未结单据</div>
+            </div>
+          </div>
+        </div>
+        <div id="chargeData" ref="chargeData" style="width:45vw;height:30vh"/>
+      </div>
+    </el-card>
+  </div>
+</template>
+
+<script>
+import {monthSalesTwo} from "@/api/wel";
+
+export default {
+  name: "basicContainer",
+  data() {
+    return {
+      loading: false,
+      data:{}
+    };
+  },
+  mounted() {
+    this.getmonthSales()
+  },
+  methods: {
+    refresh() {
+      this.getmonthSales()
+    },
+    getmonthSales() {
+      this.loading = true;
+      monthSalesTwo({billType: '收费'}).then(res => {
+        this.data = res.data.data;
+        this.loading = false;
+      })
+    },
+    chargeData() {
+      let chargeData = this.$echarts.init(
+          document.getElementById("chargeData")
+      );
+      chargeData.setOption({
+        tooltip: {
+          trigger: "axis",
+          axisPointer: {
+            type: "line"
+          }
+        },
+        xAxis: {
+          type: "category",
+          data: []
+        },
+        yAxis: {
+          type: "value"
+        },
+        series: [
+          {
+            data: [0.1, 0.4, 0.6, 0.7, 0.8, 0.9, 1],
+            type: "line",
+            smooth: true
+          }
+        ]
+      });
+    }
+  }
+};
+</script>
+
+<style lang="scss" scoped>
+.home-container {
+  padding: 0px 5px 5px 5px;
+  box-sizing: border-box;
+  height: 100%;
+
+  ::v-deep .el-card__body {
+    padding: 10px 15px;
+    font-size: 14px;
+  }
+
+  &__card {
+    width: 100%;
+    height: 100%;
+  }
+
+  .title {
+    display: flex;
+    justify-content: space-between;
+    margin-bottom: 5px;
+  }
+}
+
+.content {
+  display: flex;
+  background-color: #fafafa;
+  justify-content: space-around;
+
+  .divider {
+    border-right: 1px dashed #dcdfe6;
+  }
+
+  &_item {
+    margin: 20px 0px 20px 20px;
+    height: 5vh;
+    width: 33.3%;
+    display: flex;
+    align-items: center;
+
+    &_num {
+      font-size: 18px;
+      font-weight: 600;
+    }
+
+    &_text {
+      color: #909399;
+    }
+  }
+}
+</style>

+ 138 - 0
src/views/wel/home/equipmentControl/components/pay-today.vue

@@ -0,0 +1,138 @@
+<template>
+  <div class="home-container">
+    <el-card class="home-container__card">
+      <div class="title">
+        <span>
+          今日付款
+        </span>
+        <span>
+          <i
+            class="el-icon-refresh-right"
+            style="cursor: pointer;font-size:20px"
+            @click="refresh"
+          ></i>
+        </span>
+      </div>
+      <div v-loading="loading">
+        <div class="content">
+          <div class="content_item divider">
+            <div>
+              <div class="content_item_num">{{ data.received }}</div>
+              <div class="content_item_text">已付金额</div>
+            </div>
+          </div>
+          <div class="content_item divider">
+            <div>
+              <div class="content_item_num">{{ data.toBeReceived }}</div>
+              <div class="content_item_text">待付金额</div>
+            </div>
+          </div>
+          <div class="content_item">
+            <div>
+              <div class="content_item_num">{{data.unsettledDocuments}}</div>
+              <div class="content_item_text">未结单据</div>
+            </div>
+          </div>
+        </div>
+        <div id="payData" ref="payData" style="width:45vw;height:30vh" />
+      </div>
+    </el-card>
+  </div>
+</template>
+
+<script>
+import {monthSalesTwo} from "@/api/wel";
+
+export default {
+  name: "basicContainer",
+  data() {
+    return {
+      loading: false,
+      data:{}
+    };
+  },
+  mounted() {
+    this.getmonthSales()
+  },
+  methods: {
+    refresh() {
+      this.getmonthSales()
+    },
+    getmonthSales() {
+      this.loading = true;
+      monthSalesTwo({billType: '付费'}).then(res => {
+        this.loading = false;
+        this.data = res.data.data;
+      })
+    },
+    payData() {
+      let payData = this.$echarts.init(document.getElementById("payData"));
+      payData.setOption({
+        tooltip: {
+          trigger: "axis",
+          axisPointer: {
+            type: "line"
+          }
+        },
+        xAxis: {
+          type: "category",
+          data: []
+        },
+        yAxis: {
+          type: "value"
+        },
+        series: [
+          {
+            data: [0.1, 0.3, 0.4, 0.5, 0.6, 0.7, 1],
+            type: "line",
+            smooth: true
+          }
+        ]
+      });
+    }
+  }
+};
+</script>
+
+<style lang="scss" scoped>
+.home-container {
+  padding: 0px 5px 5px 0px;
+  box-sizing: border-box;
+  height: 100%;
+  ::v-deep .el-card__body {
+    padding: 10px 15px;
+    font-size: 14px;
+  }
+  &__card {
+    width: 100%;
+    height: 100%;
+  }
+  .title {
+    display: flex;
+    justify-content: space-between;
+    margin-bottom: 5px;
+  }
+}
+.content {
+  display: flex;
+  background-color: #fafafa;
+  justify-content: space-around;
+  .divider {
+    border-right: 1px dashed #dcdfe6;
+  }
+  &_item {
+    margin: 20px 0px 20px 20px;
+    height: 5vh;
+    width: 33.3%;
+    display: flex;
+    align-items: center;
+    &_num {
+      font-size: 18px;
+      font-weight: 600;
+    }
+    &_text {
+      color: #909399;
+    }
+  }
+}
+</style>

+ 181 - 0
src/views/wel/home/equipmentControl/components/quick-launch.vue

@@ -0,0 +1,181 @@
+<template>
+  <div class="home-container">
+    <el-card class="home-container__card">
+      <div class="title">
+        <span>
+          快速发起
+        </span>
+      </div>
+      <div class="content">
+        <div class="content-icon" @click="inPage('064132_DA')">
+          <i class="el-icon-tickets" style="color:#FFFFFF;background-color: #409EFF;border-radius: 5px;font-size: 22px;padding: 8px;"></i>
+          <span>箱档案</span>
+        </div>
+        <div class="content-icon" @click="inPage('064132')">
+          <i class="el-icon-sold-out" style="color:#FFFFFF;background-color: #18e6e8;border-radius: 5px;font-size: 22px;padding: 8px;"></i>
+          <span>买箱</span>
+        </div>
+        <div class="content-icon" @click="inPage('064132')">
+          <i class="el-icon-sell" style="color:#FFFFFF;background-color: #ff1111;border-radius: 5px;font-size: 22px;padding: 8px;"></i>
+          <span>卖箱</span>
+        </div>
+        <div class="content-icon" @click="inPage('064132')">
+          <i class="el-icon-top" style="color:#FFFFFF;background-color: #ecbf1a;border-radius: 5px;font-size: 22px;padding: 8px;"></i>
+          <span>出口装运</span>
+        </div>
+        <div class="content-icon" @click="inPage('064132')">
+          <i class="el-icon-bottom" style="color:#FFFFFF;background-color: #1eff11;border-radius: 5px;font-size: 22px;padding: 8px;"></i>
+          <span>进口返程</span>
+        </div>
+      </div>
+    </el-card>
+  </div>
+</template>
+
+<script>
+import { getToken } from "@/util/auth";
+export default {
+  name: "basicContainer",
+  data() {
+    return {
+      largeScreenToken: '',
+      roleName:''
+    };
+  },
+  props: {
+    sysType: Number
+  },
+  created() {
+    if (this.sysType == 2) {
+      this.getWorkDicts('large_screen').then(res => {
+        this.largeScreenToken = res.data.data[0].dictKey;
+      })
+    }
+    this.roleName=localStorage.getItem("roleName")
+  },
+  methods: {
+    inPage(type) {
+      //出口
+      switch (type) {
+        case "064132_DA":
+          this.$router.push("/basicData/container/archives");
+          break;
+      }
+    }
+  }
+};
+</script>
+
+<style lang="scss" scoped>
+.home-container {
+  padding: 5px;
+  box-sizing: border-box;
+  height: 100%;
+
+  ::v-deep .el-card__body {
+    padding: 10px 15px;
+    font-size: 14px;
+  }
+
+  &__card {
+    width: 100%;
+    height: 100%;
+  }
+
+  .title {
+    display: flex;
+    justify-content: space-between;
+  }
+}
+
+.tradingIcon {
+  font-size: 36px;
+}
+
+.content {
+  display: flex;
+
+  &-icon {
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    margin: 1.5vh 1vw 0vh 1vw;
+
+    span {
+      margin-top: 0.2vh;
+    }
+  }
+}
+
+.content2 {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  height: 10vh;
+  width: 80vw;
+
+  .divider {
+    display: block;
+    height: 0px;
+    width: 100%;
+    margin-top: -20px;
+    border-top: 1px dashed #dcdfe6;
+  }
+
+  &-item {
+    margin-left: 1vw;
+
+    .card {
+      width: 100px;
+      display: flex;
+      flex-direction: column;
+      align-items: center;
+
+      &-title {
+        width: 40px;
+        height: 40px;
+        text-align: center;
+        border-radius: 50%;
+        font-size: 20px;
+        font-weight: 600;
+        display: flex;
+        justify-content: center;
+        align-items: center;
+
+        span {
+          line-height: 20px;
+        }
+      }
+
+      &-title1 {
+        color: #037fe1;
+        background-color: rgba(3, 127, 225, 0.15);
+      }
+
+      &-title2 {
+        color: #ffa21e;
+        background-color: rgba(255, 162, 30, 0.15);
+      }
+
+      &-title3 {
+        color: #fb5b60;
+        background-color: rgba(251, 91, 96, 0.15);
+      }
+
+      &-title4 {
+        color: #42bc6f;
+        background-color: rgba(66, 188, 111, 0.15);
+      }
+
+      &-content {
+        display: flex;
+        flex-direction: column;
+        margin-top: 4px;
+        &-text {
+          color: #909399;
+        }
+      }
+    }
+  }
+}
+</style>

+ 293 - 0
src/views/wel/home/equipmentControl/components/realtime-data.vue

@@ -0,0 +1,293 @@
+<template>
+  <div class="home-container">
+    <el-card class="home-container__card">
+      <div class="title">
+        <span>
+          实时数据
+        </span>
+        <span class="right">
+          <div class="right_but">
+            <div
+              class="right_but_left"
+              :class="{ right_but_active: isActive == 1 }"
+              @click="inDay"
+            >
+              本日
+            </div>
+            <div
+              class="right_but_right"
+              :class="{ right_but_active: isActive == 2 }"
+              @click="inMoon"
+            >
+              本月
+            </div>
+          </div>
+          <el-date-picker
+            v-model="realDate"
+            type="daterange"
+            size="mini"
+            start-placeholder="开始日期"
+            end-placeholder="结束日期"
+            style="margin-right:10px;width:240px"
+          >
+          </el-date-picker>
+          <el-button
+            type="primary"
+            size="mini"
+            icon="el-icon-search"
+            style="margin-right:10px;"
+            @click="search"
+            circle
+          ></el-button>
+          <i
+            class="el-icon-refresh-right"
+            style="cursor: pointer;font-size:20px;line-height: 15px;"
+            @click="refresh"
+          ></i>
+        </span>
+      </div>
+      <div style="display: flex;justify-content: center;">
+        <div class="content" v-loading="loading">
+          <div class="content-item">
+            <div class="card">
+              <div class="card-title card-title1">
+                <span>
+                  入
+                </span>
+              </div>
+              <div class="card-content">
+                <span class="card-content-num">{{ data1.purchaseNumber || '0' }}立方</span>
+                <span class="card-content-text">入库</span>
+              </div>
+            </div>
+          </div>
+          <div class="divider" />
+          <div class="content-item">
+            <div class="card">
+              <div class="card-title card-title1">
+                <span>
+                  出
+                </span>
+              </div>
+              <div class="card-content">
+                <span class="card-content-num">{{ data1.sellNumber || '0' }}立方</span>
+                <span class="card-content-text">出库</span>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </el-card>
+  </div>
+</template>
+
+<script>
+import { defaultDate2, defaultDate3 } from "@/util/date";
+import { realTimeData, shipRealTimeData } from "@/api/wel";
+export default {
+  name: "basicContainer",
+  props: {
+    sysType: Number
+  },
+  data() {
+    return {
+      isActive: 1,
+      loading: false,
+      realDate: [],
+      data1: {},
+      data2: {},
+      tradeType: null
+    };
+  },
+  created() {
+    this.getSysType();
+    this.realDate = defaultDate2();
+  },
+  mounted() {
+    this.getrealTimeData();
+    this.getshipRealTimeData();
+  },
+  methods: {
+    init() {
+      if (this.realDate == null) {
+        return this.$message.error("请选择日期");
+      }
+      this.getrealTimeData();
+      this.getshipRealTimeData();
+    },
+    refresh() {
+      this.init();
+    },
+    getSysType() {
+      const sysType = localStorage.getItem("sysitemType");
+      if (sysType == 6) {
+        this.tradeType = "JXS";
+      } else if (sysType == 5) {
+        this.tradeType = "SW";
+      } else if (sysType == 4) {
+        this.tradeType = "CK";
+      } else if (sysType == 3) {
+        this.tradeType = "JK";
+      } else if (sysType == 2) {
+        this.tradeType = "GN";
+      } else if (sysType == 1) {
+        this.tradeType = "XX";
+      } else if (sysType == 999) {
+        this.tradeType = "ADMIN";
+      }
+    },
+    getrealTimeData() {
+      this.loading = true;
+      realTimeData({
+        tradeType: this.tradeType,
+        orderStartDate: this.realDate[0],
+        orderEndDate: this.realDate[1]
+      })
+        .then(res => {
+          this.data2 = res.data.data;
+        })
+        .finally(() => {
+          this.loading = false;
+        });
+    },
+    getshipRealTimeData() {
+      this.loading = true;
+      shipRealTimeData({
+        tradeType: this.tradeType,
+        orderStartDate: this.realDate[0],
+        orderEndDate: this.realDate[1]
+      })
+        .then(res => {
+          this.data1 = res.data.data;
+        })
+        .finally(() => {
+          this.loading = false;
+        });
+    },
+    inDay() {
+      this.isActive = 1;
+      this.realDate = defaultDate2();
+      this.init();
+    },
+    inMoon() {
+      this.isActive = 2;
+      this.realDate = defaultDate3();
+      this.init();
+    },
+    search() {
+      this.isActive = 3;
+      this.init();
+    }
+  }
+};
+</script>
+
+<style lang="scss" scoped>
+.home-container {
+  padding: 0px 5px 5px 5px;
+  box-sizing: border-box;
+  height: 100%;
+  ::v-deep .el-card__body {
+    padding: 10px 15px;
+    font-size: 14px;
+  }
+  &__card {
+    width: 100%;
+    height: 100%;
+  }
+  .title {
+    display: flex;
+    justify-content: space-between;
+    .right {
+      display: flex;
+      align-items: center;
+      &_but {
+        margin-right: 10px;
+        border: 1px solid #409eff;
+        width: 80px;
+        border-radius: 3px;
+        display: flex;
+        &_left {
+          width: 40px;
+          text-align: center;
+          color: #409eff;
+          border-right: 1px solid #409eff;
+          cursor: pointer;
+        }
+        &_right {
+          width: 40px;
+          text-align: center;
+          color: #409eff;
+          cursor: pointer;
+        }
+        &_active {
+          color: #fff;
+          background-color: #409eff;
+        }
+      }
+    }
+  }
+}
+.content {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  height: 15vh;
+  width: 60vw;
+  .divider {
+    display: block;
+    height: 0px;
+    width: 100%;
+    border-top: 1px dashed #dcdfe6;
+  }
+  &-item {
+    margin-left: 1vw;
+    .card {
+      width: 180px;
+      display: flex;
+      align-items: center;
+      &-title {
+        width: 40px;
+        height: 40px;
+        text-align: center;
+        border-radius: 50%;
+        font-size: 20px;
+        font-weight: 600;
+        display: flex;
+        justify-content: center;
+        align-items: center;
+        span {
+          line-height: 20px;
+        }
+      }
+      &-title1 {
+        color: #037fe1;
+        background-color: rgba(3, 127, 225, 0.15);
+      }
+      &-title2 {
+        color: #ffa21e;
+        background-color: rgba(255, 162, 30, 0.15);
+      }
+      &-title3 {
+        color: #fb5b60;
+        background-color: rgba(251, 91, 96, 0.15);
+      }
+      &-title4 {
+        color: #42bc6f;
+        background-color: rgba(66, 188, 111, 0.15);
+      }
+      &-content {
+        display: flex;
+        flex-direction: column;
+        &-num {
+          font-size: 20px;
+          font-weight: 600;
+        }
+        &-text {
+          color: #909399;
+        }
+      }
+    }
+  }
+}
+</style>

+ 145 - 0
src/views/wel/home/equipmentControl/components/sales-reached.vue

@@ -0,0 +1,145 @@
+<template>
+  <div class="home-container">
+    <el-card class="home-container__card">
+      <div class="title">
+        <span>
+          箱分布
+        </span>
+        <span>
+          <i class="el-icon-refresh-right"
+             style="cursor: pointer;font-size:20px"
+             @click="refresh"
+          ></i>
+        </span>
+      </div>
+      <div class="content" v-loading="loading">
+        <div style="width: 100%;height: 300px;display: flex;justify-content: space-around;flex-wrap: wrap">
+          <div id="totalContainer" style="width: 100%;height: 350px;"></div>
+        </div>
+      </div>
+    </el-card>
+  </div>
+</template>
+
+<script>
+import {bizCount, frequency} from "@/api/wel";
+
+export default {
+  name: "basicContainer",
+  data() {
+    return {
+      loading: false,
+      tradeType: null,
+      entrustTimer: null,
+      tableData: []
+    };
+  },
+  created() {
+    this.getSysType();
+  },
+  mounted() {
+    // frequency().then(res => {
+      let this_ = this
+    //   this_.entrustTimer = setInterval(function () {
+    //     if (JSON.parse(localStorage.getItem("saber-token")).content) {
+          this_.getSysType();
+    //     }
+    //   }, Number(res.data.data[0].dictKey) * 1000)
+    // })
+  },
+  beforeDestroy() {
+    clearInterval(this.entrustTimer); //关闭
+  },
+  methods: {
+    //点击获取图表数据
+    handleMousedown(params) {
+      this.$emit('handleMousedown', params.data)
+    },
+    //箱分布图表
+    rankingTwo(id, name, data) {
+      // 基于准备好的dom,初始化echarts实例,所以只能在mounted中调用
+      let myChart = this.$echarts.init(document.getElementById(id));
+      // 绘制图表
+      myChart.setOption({
+        xAxis: {
+          type: 'category',
+          data: ['京唐', '新疆铁路', '威海', '青岛大港', '烟台', '在船']
+        },
+        yAxis: {
+          type: 'value'
+        },
+        series: [
+          {
+            data: [150, 230, 224, 218, 135, 260],
+            type: 'line'
+          }
+        ]
+      });
+      myChart.on("click", this.handleMousedown);
+    },
+    init() {
+      this.getSysType();
+    },
+    getSysType() {
+      this.loading = true
+      // bizCount({mold: 1}).then(res => {
+        // this.rankingTwo('totalContainer', '集装箱:' + res.data.data.flow.all, res.data.data.flow.list)
+      // })
+
+      this.rankingTwo('totalContainer', '集装箱:' + 21, [])
+      this.loading = false
+    },
+    //刷新按钮
+    refresh() {
+      this.init();
+    },
+  }
+};
+</script>
+
+<style lang="scss" scoped>
+.home-container {
+  padding: 0px 5px 5px 5px;
+  box-sizing: border-box;
+  height: 100%;
+
+  ::v-deep .el-card__body {
+    padding: 10px 15px;
+    font-size: 14px;
+  }
+
+  &__card {
+    width: 100%;
+    height: 100%;
+  }
+
+  .title {
+    display: flex;
+    justify-content: space-between;
+  }
+}
+
+.content {
+  display: flex;
+
+  &_item {
+    margin-top: 20px;
+
+    .divider {
+      display: block;
+      height: 0px;
+      width: 12vw;
+      border-top: 1px dashed #dcdfe6;
+    }
+
+    &_num {
+      font-size: 18px;
+      font-weight: 600;
+    }
+
+    &_text {
+      color: #909399;
+    }
+  }
+}
+</style>

+ 186 - 0
src/views/wel/home/equipmentControl/components/sales-trend.vue

@@ -0,0 +1,186 @@
+<template>
+  <div class="home-container">
+    <el-card class="home-container__card">
+      <div v-if="sysType !== 5">
+        <div class="title">
+          <span>
+            销售趋势
+          </span>
+          <span>
+            <i
+              class="el-icon-refresh-right"
+              style="cursor: pointer;font-size:20px"
+              @click="refresh"
+            ></i>
+          </span>
+        </div>
+
+        <div class="content" v-loading="loading">
+          <div class="content-year">
+            <el-date-picker
+              v-model="annual"
+              type="year"
+              size="mini"
+              placeholder="选择年"
+              value-format="yyyy"
+              style="margin-right:10px"
+              @change="getsalesTrend"
+            />
+          </div>
+
+          <div
+            id="polylineData"
+            ref="polylineData"
+            style="width:55vw;height:33vh"
+          />
+        </div>
+      </div>
+      <div v-if="sysType === 5">
+        <div class="title">
+          <span>
+            业绩趋势
+          </span>
+          <span>
+            <i
+              class="el-icon-refresh-right"
+              style="cursor: pointer;font-size:20px"
+              @click="refresh"
+            ></i>
+          </span>
+        </div>
+        <div class="content" v-loading="loading">
+          <div
+            id="polylineDatas"
+            ref="polylineData"
+            style="width:60vw;height:33vh"
+          />
+        </div>
+      </div>
+    </el-card>
+  </div>
+</template>
+
+<script>
+import { getYearDate } from "@/util/date";
+import { salesTrendTow } from "@/api/wel";
+export default {
+  name: "basicContainer",
+  props: {
+    sysType: Number
+  },
+  data() {
+    return {
+      loading: false,
+      annual: "",
+      tradeType: null,
+      moneyList: [],
+      xAxisData:[]
+    };
+  },
+  created() {
+    this.annual = getYearDate().toString();
+    this.getSysType();
+  },
+  mounted() {
+    this.init();
+  },
+  methods: {
+    init() {
+      this.getsalesTrend();
+    },
+    getSysType() {
+      const sysType = localStorage.getItem("sysitemType");
+      if (sysType == 6) {
+        this.tradeType = "JXS";
+      } else if (sysType == 5) {
+        this.tradeType = "SW";
+      } else if (sysType == 4) {
+        this.tradeType = "CK";
+      } else if (sysType == 3) {
+        this.tradeType = "JK";
+      } else if (sysType == 2) {
+        this.tradeType = "GN";
+      } else if (sysType == 1) {
+        this.tradeType = "XX";
+      } else if (sysType == 999) {
+        this.tradeType = "ADMIN";
+      }
+    },
+    getsalesTrend() {
+      this.loading = true;
+      this.moneyList = [];
+      this.xAxisData = [];
+      salesTrendTow({
+        year: this.annual
+      }).then(res => {
+          res.data.data.forEach(e => {
+            this.moneyList.push(Number(e.money));
+            this.xAxisData.push(e.moon)
+          });
+        })
+        .finally(() => {
+          this.loading = false;
+          this.polylineData();
+        });
+    },
+    refresh() {
+      this.init();
+    },
+    polylineData() {
+      let polylineData = this.$echarts.init(
+        document.getElementById("polylineData")
+      );
+      polylineData.setOption({
+        tooltip: {
+          trigger: "axis",
+          axisPointer: {
+            type: "line"
+          }
+        },
+        xAxis: {
+          type: "category",
+          data: this.xAxisData
+        },
+        yAxis: {
+          type: "value"
+        },
+        series: [
+          {
+            data: this.moneyList,
+            type: "line",
+            smooth: true
+          }
+        ]
+      });
+    }
+  }
+};
+</script>
+
+<style lang="scss" scoped>
+.home-container {
+  padding: 0px 5px 5px 0px;
+  box-sizing: border-box;
+  height: 100%;
+  ::v-deep .el-card__body {
+    padding: 10px 15px;
+    font-size: 14px;
+  }
+  &__card {
+    width: 100%;
+    height: 100%;
+  }
+  .title {
+    display: flex;
+    justify-content: space-between;
+  }
+}
+.content {
+  display: flex;
+  flex-direction: column;
+  &-year {
+    display: flex;
+    justify-content: right;
+  }
+}
+</style>

+ 84 - 0
src/views/wel/home/equipmentControl/landTransportation.vue

@@ -0,0 +1,84 @@
+<template>
+  <div class="container">
+    <quick-launch class="item1" :sysType="sysType" />
+    <audit-data class="item2" :sysType="sysType"/>
+    <sales-reached class="item3" :sysType="sysType"/>
+<!--    <realtime-data class="item3" :sysType="sysType"/>-->
+<!--    <sales-reached class="item4" :sysType="sysType" v-if="sysType!=4||roleName!='采购'"/>-->
+<!--    <sales-trend class="item5" :sysType="sysType" v-if="sysType!=4||roleName!='采购'"/>-->
+<!--    <charge-today class="item6" :sysType="sysType" v-if="sysType!=4||roleName!='采购'"/>-->
+<!--    <pay-today class="item7" :sysType="sysType" v-if="sysType!=4||roleName!='采购'"/>-->
+  </div>
+</template>
+
+<script>
+import quickLaunch from "./components/quick-launch";
+import auditData from "./components/audit-data";
+import realtimeData from "./components/realtime-data";
+import salesReached from "./components/sales-reached";
+import salesTrend from "./components/sales-trend";
+import chargeToday from "./components/charge-today";
+import payToday from "./components/pay-today";
+export default {
+  name: "wel",
+  data() {
+    return {
+      roleName:''
+    };
+  },
+  props:{
+    sysType:Number
+  },
+  created() {
+    this.roleName=localStorage.getItem("roleName")
+  },
+  components: {
+    quickLaunch,
+    auditData,
+    realtimeData,
+    salesReached,
+    salesTrend,
+    chargeToday,
+    payToday
+  },
+  computed: {},
+  methods: {}
+};
+</script>
+<style lang="scss" scoped>
+.item1 {
+  grid-area: a;
+}
+.item2 {
+  grid-area: b;
+}
+.item3 {
+  grid-area: c;
+}
+.item4 {
+  grid-area: d;
+}
+.item5 {
+  grid-area: e;
+}
+.item6 {
+  grid-area: f;
+}
+.item7 {
+  grid-area: g;
+}
+.container {
+  display: grid;
+  width: 100%;
+  height: 95.5vh;
+  grid-template-columns: repeat(auto-fill, 10%);
+  grid-template-rows: 140px 180px 380px;
+  //grid-template-rows: 140px 180px 380px 350px 140px;
+  grid-template-areas:
+    "a a a a a a a a a a"
+    "b b b b b b b b b b"
+    "c c c c c c c c c c"
+    //"d d d d e e e e e e"
+    //"f f f f f g g g g g";
+}
+</style>

+ 3 - 0
src/views/wel/index.vue

@@ -4,6 +4,7 @@
     <landTransportation v-else-if="billType == 7"></landTransportation>
     <jiatongPage v-else-if="billType == 8"></jiatongPage>
     <noctite v-else-if="billType == 9"></noctite>
+    <equipment-control v-else-if="billType == 10"></equipment-control>
     <defaultPage v-else :sysType="billType"></defaultPage>
   </div>
 </template>
@@ -14,6 +15,7 @@ import tongjiSchool from "@/views/wel/home/tongjiSchool";
 import landTransportation from "@/views/wel/home/landTransportation/landTransportation";
 import jiatongPage from "@/views/wel/home/jiatongPage/landTransportation";
 import noctite from "@/views/wel/home/noctite/landTransportation";
+import equipmentControl from "@/views/wel/home/equipmentControl/landTransportation";
 import { getUserInfo } from "@/api/system/user";
 import { setStore } from "@/util/store";
 import { areaTypeTree } from "@/api/basicData/customerInformation";
@@ -42,6 +44,7 @@ export default {
     defaultPage,
     jiatongPage,
     noctite,
+    equipmentControl,
     landTransportation
   },
   methods: {}

Некоторые файлы не были показаны из-за большого количества измененных файлов