Ver Fonte

MAJOR_BUSINESS CODE

wucl há 1 ano atrás
pai
commit
050b02e179
47 ficheiros alterados com 12225 adições e 32 exclusões
  1. 1 1
      package.json
  2. 1 2
      src/App.vue
  3. 0 2
      src/api/modules/business.js
  4. 21 0
      src/api/modules/businessProduction.js
  5. 25 0
      src/api/modules/businessProductionPerformance.js
  6. 24 0
      src/api/modules/customerCompany.js
  7. 24 0
      src/api/modules/customerLinkman.js
  8. 3 0
      src/api/modules/department.js
  9. 28 0
      src/api/modules/financeClaim.js
  10. 30 0
      src/api/modules/financeInvoice.js
  11. 24 0
      src/api/modules/financeRealFund.js
  12. 30 0
      src/api/modules/major.js
  13. 61 0
      src/api/modules/majorProduction.js
  14. 30 0
      src/api/modules/majorTarget.js
  15. 25 0
      src/api/modules/orderFund.js
  16. 25 0
      src/api/modules/productionFund.js
  17. 30 0
      src/api/modules/productionOutWarehouse.js
  18. 3 0
      src/api/modules/user.js
  19. 3 0
      src/api/modules/workNode.js
  20. 30 0
      src/api/modules/workNodeInstance.js
  21. 17 0
      src/api/modules/workNodeTaskRecord.js
  22. 3 0
      src/api/modules/workflow.js
  23. 13 0
      src/api/modules/workflowLog.js
  24. BIN
      src/assets/images/approve.png
  25. 10 1
      src/components/BaseTable/parentTable.vue
  26. 162 0
      src/components/ScanEntry.vue
  27. 208 0
      src/components/workflowBoard.vue
  28. 5 6
      src/components/workflowNode.vue
  29. 3 3
      src/router/index.js
  30. 33 1
      src/router/urlMap.js
  31. 742 0
      src/views/finance/fundList.vue
  32. 503 0
      src/views/finance/invoiceCheck.vue
  33. 288 0
      src/views/finance/outWarehouseCheck.vue
  34. 5 1
      src/views/home/index.vue
  35. 2590 0
      src/views/major/detail.vue
  36. 153 0
      src/views/major/doneList.vue
  37. 466 0
      src/views/major/index.vue
  38. 303 0
      src/views/major/list.vue
  39. 1174 0
      src/views/major/myOrder.vue
  40. 1023 0
      src/views/major/myOrderDetail.vue
  41. 137 0
      src/views/major/productionIn.vue
  42. 155 0
      src/views/major/saveFileDoneList.vue
  43. 226 0
      src/views/major/saveFileTodoList.vue
  44. 3333 0
      src/views/major/todoDetail.vue
  45. 216 0
      src/views/major/todoList.vue
  46. 30 6
      src/views/set/workflow/detail.vue
  47. 9 9
      vue.config.js

+ 1 - 1
package.json

@@ -28,7 +28,7 @@
     "cross-env": "^7.0.2",
     "e-vue-contextmenu": "^0.1.3",
     "echarts": "^4.8.0",
-    "element-ui": "^2.15.7",
+    "element-ui": "^2.15.14",
     "format": "^0.2.2",
     "fuse.js": "^6.2.0",
     "html2canvas": "^1.0.0-rc.7",

+ 1 - 2
src/App.vue

@@ -22,8 +22,7 @@
         this.$nextTick(function(){
           this.isRouterAlive = true
         })
-
-        this.noreadCounts()
+        //this.noreadCounts()
       },
     },
     components:{

+ 0 - 2
src/api/modules/business.js

@@ -1,6 +1,4 @@
 import request from '@/utils/request'
-import { fileDown } from '../../utils/file'
-import md5 from 'js-md5'
 /*
 * 商机
 */

+ 21 - 0
src/api/modules/businessProduction.js

@@ -0,0 +1,21 @@
+import request from '@/utils/request'
+/*
+* 订单应收款
+*/
+export default {
+   bag(params){
+    return request.get(`businessProduction/bag/major/${params}`)
+   },
+   orderReports(params){
+      return request.post(`businessProduction/report/major`,params)
+   },
+   allotRealAmount(params){
+      return request.post(`businessProduction/allotRealAmount/major`,params)
+   },
+   getProductionByOrderFundId(params){
+      return request.get(`businessProduction/major/${params}`)
+   },
+   allotMajorProduction(params){
+      return request.post(`businessProduction/major/allot`,params)
+   }
+}

+ 25 - 0
src/api/modules/businessProductionPerformance.js

@@ -0,0 +1,25 @@
+import request from '@/utils/request'
+/*
+* 业务产品绩效分配
+*/
+export default {
+  list(params) {
+    return request.get(`businessProductionPerformance`, { params: params })
+  },
+  detail(params) {
+    return request.get(`businessProductionPerformance/${params}`)
+  },
+  simpleAll() {
+    return request.get(`businessProductionPerformance/simpleAll`)
+  },
+  add(params) {
+    return request.post(`businessProductionPerformance`, params)
+  },
+  edit(params) {
+    return request.put(`businessProductionPerformance`, params)
+  },
+   delete(params) {
+     return request.delete(`businessProductionPerformance/${params}`)
+   },
+
+}

+ 24 - 0
src/api/modules/customerCompany.js

@@ -0,0 +1,24 @@
+import request from '@/utils/request'
+/*
+* 企业客户
+*/
+export default {
+  list(params) {
+    return request.get(`customerCompany`,{ params: params })
+  },
+  detail(params) {
+    return request.get(`customerCompany/${params}`)
+  },
+  simpleAll(params) {
+    return request.post(`customerCompany/simpleAll`,params)
+  },
+  add(params) {
+    return request.post(`customerCompany`, params)
+  },
+  edit(params) {
+    return request.put(`customerCompany`, params)
+  },
+   delete(params) {
+     return request.delete(`customerCompany/${params}`)
+   },
+}

+ 24 - 0
src/api/modules/customerLinkman.js

@@ -0,0 +1,24 @@
+import request from '@/utils/request'
+/*
+* 企业客户联系人
+*/
+export default {
+  list(params) {
+    return request.get(`customerLinkman`,{ params: params })
+  },
+  detail(params) {
+    return request.get(`customerLinkman/${params}`)
+  },
+  simpleAll(params) {
+    return request.post(`customerLinkman/simpleAll`,params)
+  },
+  add(params) {
+    return request.post(`customerLinkman`, params)
+  },
+  edit(params) {
+    return request.put(`customerLinkman`, params)
+  },
+   delete(params) {
+     return request.delete(`customerLinkman/${params}`)
+   },
+}

+ 3 - 0
src/api/modules/department.js

@@ -37,4 +37,7 @@ export default {
   permissionPage(params) {
     return request.get(`department/permission/page`, { params: params })
   },
+  allot() { // 下拉
+    return request.get(`department/allot`)
+  },
 }

+ 28 - 0
src/api/modules/financeClaim.js

@@ -0,0 +1,28 @@
+import request from '@/utils/request'
+/*
+* 实收款认领
+*/
+export default {
+  list(params) {
+    return request.get(`financeClaim`, { params: params })
+  },
+  detail(params) {
+    return request.get(`financeClaim/${params}`)
+  },
+  simpleAll() {
+    return request.get(`financeClaim/simpleAll`)
+  },
+  add(params) {
+    return request.post(`financeClaim`, params)
+  },
+  edit(params) {
+    return request.put(`financeClaim`, params)
+  },
+   delete(params) {
+     return request.delete(`financeClaim/${params}`)
+   },
+   getList(params){
+    return request.get(`financeClaim/list/${params}`)
+   },
+
+}

+ 30 - 0
src/api/modules/financeInvoice.js

@@ -0,0 +1,30 @@
+import request from '@/utils/request'
+/*
+* 财务开票
+*/
+export default {
+  list(params) {
+    return request.get(`financeInvoice`, { params: params })
+  },
+  detail(params) {
+    return request.get(`financeInvoice/${params}`)
+  },
+  simpleAll() {
+    return request.get(`financeInvoice/simpleAll`)
+  },
+  add(params) {
+    return request.post(`financeInvoice`, params)
+  },
+  edit(params) {
+    return request.put(`financeInvoice`, params)
+  },
+   delete(params) {
+     return request.delete(`financeInvoice/${params}`)
+   },
+   getList(params){
+    return request.get(`financeInvoice/fund/${params}`)
+   },
+   cancellation(params){
+    return request.get(`financeInvoice/cancellation/${params}`)
+   }
+}

+ 24 - 0
src/api/modules/financeRealFund.js

@@ -0,0 +1,24 @@
+import request from '@/utils/request'
+/*
+* 财务实收款
+*/
+export default {
+  list(params) {
+    return request.get(`financeRealFund`, { params: params })
+  },
+  detail(params) {
+    return request.get(`financeRealFund/${params}`)
+  },
+  simpleAll() {
+    return request.get(`financeRealFund/simpleAll`)
+  },
+  add(params) {
+    return request.post(`financeRealFund`, params)
+  },
+  edit(params) {
+    return request.put(`financeRealFund`, params)
+  },
+   delete(params) {
+     return request.delete(`financeRealFund/${params}`)
+   },
+}

+ 30 - 0
src/api/modules/major.js

@@ -0,0 +1,30 @@
+import request from '@/utils/request'
+/*
+* 大中型业务
+*/
+export default {
+  list(params) {
+    return request.get(`major`, { params: params })
+  },
+  detail(params) {
+    return request.get(`major/${params}`)
+  },
+  simpleAll() {
+    return request.get(`major/simpleAll`)
+  },
+  add(params) {
+    return request.post(`major`, params)
+  },
+  edit(params) {
+    return request.put(`major`, params)
+  },
+   delete(params) {
+     return request.delete(`major/${params}`)
+   },
+   allocation(params) {
+    return request.post(`major/allocation`, params)
+  },
+  feedback(params) {
+    return request.post(`major/priceFeedback`, params)
+  },
+}

+ 61 - 0
src/api/modules/majorProduction.js

@@ -0,0 +1,61 @@
+import request from '@/utils/request'
+/*
+* 大中型土地产品
+*/
+export default {
+  list(params) {
+    return request.get(`majorProduction`,{ params: params })
+  },
+  detail(params) {
+    return request.get(`majorProduction/${params}`)
+  },
+  simpleAll() {
+    return request.get(`majorProduction/simpleAll`)
+  },
+  add(params) {
+    return request.post(`majorProduction`, params)
+  },
+  edit(params) {
+    return request.put(`majorProduction`, params)
+  },
+   delete(params) {
+     return request.delete(`majorProduction/${params}`)
+   },
+   update(params){
+    return request.put(`majorProduction/update`, params)
+   },
+   firstCheck(params){
+    return request.post(`majorProduction/first/check`, params)
+   },
+   secondCheck(params){
+    return request.post(`majorProduction/second/check`, params)
+   },
+   thirdCheck(params){
+    return request.post(`majorProduction/third/check`, params)
+   },
+   saveDone(params) {
+    return request.get(`majorProduction/saveDone`,{ params: params })
+  },
+  warehouse(params){
+    return request.post(`majorProduction/warehouse`, params)
+  },
+  house(params) {
+    return request.get(`majorProduction/house`,{ params: params })
+  },
+  myOrder(params){
+    return request.get(`majorProduction/myOrder`,{ params: params })
+  },
+  waitingClaim(params){
+    return request.get(`majorProduction/waiting/claim`,{ params: params })
+  },
+  confirmDelivery(params){
+    return request.get(`majorProduction/confirmDelivery/${params}`)
+  },
+  saveFileTodo(params){
+    return request.get(`majorProduction/todoSaveFile`,{ params: params })
+  },
+  batchSaveFile(params){
+    return request.post(`majorProduction/batchSaveFile`, params)
+  }
+
+}

+ 30 - 0
src/api/modules/majorTarget.js

@@ -0,0 +1,30 @@
+import request from '@/utils/request'
+/*
+* 大中型土地估价对象
+*/
+export default {
+  list(params1,params2) {
+    return request.get(`majorTarget/majorId/${params1}/${params2}`)
+  },
+  detail(params) {
+    return request.get(`majorTarget/${params}`)
+  },
+  simpleAll() {
+    return request.get(`majorTarget/simpleAll`)
+  },
+  add(params) {
+    return request.post(`majorTarget`, params)
+  },
+  edit(params) {
+    return request.put(`majorTarget`, params)
+  },
+   delete(params) {
+     return request.put(`majorTarget/delete`,params)
+   },
+   doTask(params){
+    return request.put(`majorTarget/doTask`, params)
+   },
+   takeNumber(params){
+    return request.post(`majorTarget/takeNumber`, params)
+   }
+}

+ 25 - 0
src/api/modules/orderFund.js

@@ -0,0 +1,25 @@
+import request from '@/utils/request'
+/*
+* 订单应收款
+*/
+export default {
+  list(params) {
+    return request.get(`orderFund`, { params: params })
+  },
+  detail(params) {
+    return request.get(`orderFund/${params}`)
+  },
+  simpleAll() {
+    return request.get(`orderFund/simpleAll`)
+  },
+  add(params) {
+    return request.post(`orderFund`, params)
+  },
+  edit(params) {
+    return request.put(`orderFund`, params)
+  },
+   delete(params) {
+     return request.delete(`orderFund/${params}`)
+   },
+
+}

+ 25 - 0
src/api/modules/productionFund.js

@@ -0,0 +1,25 @@
+import request from '@/utils/request'
+/*
+* 业务产品收款表
+*/
+export default {
+  list(params) {
+    return request.get(`productionFund`, { params: params })
+  },
+  detail(params) {
+    return request.get(`productionFund/${params}`)
+  },
+  simpleAll() {
+    return request.get(`productionFund/simpleAll`)
+  },
+  add(params) {
+    return request.post(`productionFund`, params)
+  },
+  edit(params) {
+    return request.put(`productionFund`, params)
+  },
+   delete(params) {
+     return request.delete(`productionFund/${params}`)
+   },
+
+}

+ 30 - 0
src/api/modules/productionOutWarehouse.js

@@ -0,0 +1,30 @@
+import request from '@/utils/request'
+/*
+* 产品提前出库申请
+*/
+export default {
+  list(params) {
+    return request.get(`productionOutWarehouse`, { params: params })
+  },
+  detail(params) {
+    return request.get(`productionOutWarehouse/${params}`)
+  },
+  simpleAll() {
+    return request.get(`productionOutWarehouse/simpleAll`)
+  },
+  add(params) {
+    return request.post(`productionOutWarehouse`, params)
+  },
+  edit(params) {
+    return request.put(`productionOutWarehouse`, params)
+  },
+   delete(params) {
+     return request.delete(`productionOutWarehouse/${params}`)
+   },
+   getList(params){
+    return request.get(`productionOutWarehouse/apply/${params}`)
+   },
+   cancel(params){
+    return request.get(`productionOutWarehouse/cancel/${params}`)
+   }
+}

+ 3 - 0
src/api/modules/user.js

@@ -61,4 +61,7 @@ export default {
       repeatPassword: md5(params.repeatPassword)
     })
   },
+  usersByDepartmentId(params){
+    return request.get(`user/departmentId/${params}`)
+  }
 }

+ 3 - 0
src/api/modules/workNode.js

@@ -26,5 +26,8 @@ export default {
    },
    flow(params){
     return request.get(`workNode/flow/${params}`)
+   },
+   nodesByBusiness(params){
+    return request.get(`workNode/by/${params}`)
    }
 }

+ 30 - 0
src/api/modules/workNodeInstance.js

@@ -0,0 +1,30 @@
+import request from '@/utils/request'
+/*
+* 工作流节点
+*/
+export default {
+  list(params) {
+    return request.get(`workFlowNodeInstance`, { params: params })
+  },
+  detail(params) {
+    return request.get(`workFlowNodeInstance/${params}`)
+  },
+  simpleAll() {
+    return request.get(`workFlowNodeInstance/simpleAll`)
+  },
+  add(params) {
+    return request.post(`workFlowNodeInstance`, params)
+  },
+  edit(params) {
+    return request.put(`workFlowNodeInstance`, params)
+  },
+   delete(params) {
+     return request.delete(`workFlowNodeInstance/${params}`)
+   },
+   queue(params){
+    return request.post(`workFlowNodeInstance/queue`, params)
+   },
+   currentNode(params){
+    return request.post(`workFlowNodeInstance/current`, params)
+   }
+}

+ 17 - 0
src/api/modules/workNodeTaskRecord.js

@@ -0,0 +1,17 @@
+import request from '@/utils/request'
+/*
+* 工作流节点任务
+*/
+export default {
+  instanceTask(params) {
+    return request.get(`workTaskRecord/instance/${params}`)
+  },
+
+  majorTaskTodoList(params){
+    return request.get(`workTaskRecord/major/todo`,{ params: params })
+  },
+
+  majorTaskDoneList(params){
+    return request.get(`workTaskRecord/major/done`,{ params: params })
+  }
+}

+ 3 - 0
src/api/modules/workflow.js

@@ -23,5 +23,8 @@ export default {
   },
   enum(){
     return request.get(`workFlow/enum`)
+  },
+  commit(params){
+    return request.post(`workFlow/commit`, params)
   }
 }

+ 13 - 0
src/api/modules/workflowLog.js

@@ -0,0 +1,13 @@
+import request from '@/utils/request'
+/*
+* 工作流日志
+*/
+export default {
+  list(params) {
+    return request.get(`workFlowLog`, { params: params })
+  },
+  detail(params) {
+    return request.get(`workFlowLog/${params}`)
+  }
+
+}

BIN
src/assets/images/approve.png


+ 10 - 1
src/components/BaseTable/parentTable.vue

@@ -7,6 +7,7 @@
     :isBoard="isBoard"
     :show-summary="showSummary"
     :summary-method="summaryMethod"
+    :row-key="getRowKeys"
     fit
     highlight-current-row
     :header-row-style="{ color: '#333333' }"
@@ -18,9 +19,10 @@
     @selection-change="selectionChange"
     @sort-change="sortChange"
     @row-click="goToDetail"
+    @row-dblclick="expandRow"
   >
 
-    //@row-dblclick="goToDetail"
+    
     <slot></slot>
   </el-table>
 </template>
@@ -80,6 +82,10 @@
       goToDetail(){
         this.$emit("goToDetail");
       },
+      expandRow(row){
+        row.expand = !row.expand
+        this.$refs.table.toggleRowExpansion(row, row.expend);
+      },
       sortChange(val) {
         let sortParam = {};
         if (val.order === "ascending") {
@@ -95,6 +101,9 @@
 
         this.$emit("sortTable", sortParam);
       },
+      getRowKeys(row){
+          return row.id;
+      }
     },
   };
 </script>

+ 162 - 0
src/components/ScanEntry.vue

@@ -0,0 +1,162 @@
+<template>
+    <div class="BarCodeScannerDiv">
+        <input required="" type="text" class="input" v-model.trim="scanEntryData" ref="scanInput">
+        <span class="highlight"></span>
+        <span class="bar"></span>
+        <label>{{label}}</label>
+    </div>
+</template>
+  
+  <script>
+  export default {
+        name: 'scanEntry',
+        data() {
+            return {
+                scanEntryData: null,
+            };
+        },
+        props: {
+            label:{
+                type: String,
+                default: '',
+            }
+        },
+
+        mounted() {
+            this.setFocus();
+            this.$refs.scanInput.addEventListener('keydown', this.handleScanInput);
+        },
+
+        beforeDestroy() {
+            this.$refs.scanInput.removeEventListener('keydown', this.handleScanInput);
+        },
+        methods: {
+            setFocus() {
+                this.$nextTick(() => {
+                this.$refs.scanInput.focus();
+                });
+            },
+
+            handleScanInput(event) {
+
+            const input = event.target;
+
+            const inputValue = input.value;
+
+            this.scanEntryData = input.value;
+
+
+            if (event.key === 'Enter') {
+
+                setTimeout(() => {
+
+                    input.value = '';
+
+                    this.scanEntryData = '';
+
+                }, 100);
+
+                this.$emit('scanEntryFun', inputValue);
+
+            }
+
+            },
+    },
+  
+}
+  
+</script>
+
+<style lang="css" scoped>
+.BarCodeScannerDiv {
+ position: relative;
+}
+
+.input {
+ font-size: 20px;
+ padding: 10px 10px 10px 5px;
+ display: block;
+ width: 100%;
+ border: none;
+ border-bottom: 1px solid #515151;
+ background: transparent;
+}
+
+.input:focus {
+ outline: none;
+}
+
+label {
+ color: #999;
+ font-size: 18px;
+ font-weight: normal;
+ position: absolute;
+ pointer-events: none;
+ left: 5px;
+ top: 10px;
+ transition: 0.2s ease all;
+ -moz-transition: 0.2s ease all;
+ -webkit-transition: 0.2s ease all;
+}
+
+.input:focus ~ label, .input:valid ~ label {
+ top: -20px;
+ font-size: 14px;
+ color: #5264AE;
+}
+
+.bar {
+ position: relative;
+ display: block;
+ width: 100%;
+}
+
+.bar:before, .bar:after {
+ content: '';
+ height: 2px;
+ width: 0;
+ bottom: 1px;
+ position: absolute;
+ background: #5264AE;
+ transition: 0.2s ease all;
+ -moz-transition: 0.2s ease all;
+ -webkit-transition: 0.2s ease all;
+}
+
+.bar:before {
+ left: 50%;
+}
+
+.bar:after {
+ right: 50%;
+}
+
+.input:focus ~ .bar:before, .input:focus ~ .bar:after {
+ width: 50%;
+}
+
+.highlight {
+ position: absolute;
+ height: 60%;
+ width: 100px;
+ top: 25%;
+ left: 0;
+ pointer-events: none;
+ opacity: 0.5;
+}
+
+.input:focus ~ .highlight {
+ animation: inputHighlighter 0.3s ease;
+}
+
+@keyframes inputHighlighter {
+ from {
+  background: #5264AE;
+ }
+
+ to {
+  width: 0;
+  background: transparent;
+ }
+}
+</style>

+ 208 - 0
src/components/workflowBoard.vue

@@ -0,0 +1,208 @@
+<template>
+    <div class="contanier">
+        <el-card shadow="always" style="margin-bottom:20px;">
+          <div class="button-area">
+          <el-button v-if="nodeBusinessInfo.currentNodePermission.commit" class="y-save"  type="success" round @click="commit('PASS')" :disabled="!nodeBusinessInfo.doWorkflow">提交</el-button>
+          <el-button v-if="nodeBusinessInfo.currentNodePermission.reversible" class="y-save"  type="info" round @click="commit('REVERSE')" :disabled="!nodeBusinessInfo.doWorkflow">退回</el-button>
+          <el-button v-if="nodeBusinessInfo.currentNodePermission.skippable" class="y-save"  type="warning" round @click="commit('SKIP')" :disabled="!nodeBusinessInfo.doWorkflow">跳过</el-button>
+          <el-button v-if="nodeBusinessInfo.currentNodePermission.terminable" class="y-save"  type="danger" round @click="commit('TERMINATE')" :disabled="!nodeBusinessInfo.doWorkflow">终止</el-button>
+          <el-button v-if="nodeBusinessInfo.currentNodePermission.restartable" class="y-save"  type="danger" round @click="commit('RESTART')" :disabled="!nodeBusinessInfo.doWorkflow">重置</el-button>
+        </div>
+        <div class="node-area" >
+          <div class="node-seq">
+            <WrokflowNode name="开始" state="START" />
+          </div>
+          <div class="node-seq"  v-for="(n,index) in queue" :key="index">
+            <WrokflowNode :key="index" :name="n.nodeName" :state="n.state"  @openCurrentNodeDialog="openCurrentNodeDialog(n)" />
+          </div>
+          <div class="node-seq" v-if="nodeBusinessInfo.production.length==0">
+            <WrokflowNode name="待定"  state="WAITING" :last=true />
+          </div>
+          <div class="node-seq" v-else>
+            <WrokflowNode name="结束" state="END" :last=true />
+          </div>
+        </div>
+      </el-card>
+      <el-dialog custom-class="nodeDialog" :title="dialogTitle" :visible.sync="dialogVisible" width="40%">
+          <el-table :data="taskPageData"  border style="width:100%">
+            <el-table-column label="任务" align="center"  prop="taskName" />
+            <el-table-column label="处理人" align="center"   prop="handler" />
+            <el-table-column label="任务状态" align="center"   prop="finished" />
+            <el-table-column label="处理时间" align="center"   prop="finishTime" />
+        </el-table>
+      </el-dialog>
+    </div>
+</template>
+
+<script>
+  import WrokflowNode from '@/components/workflowNode'
+
+  export default {
+    components: {
+      WrokflowNode
+    },
+    name: 'workflowBoard',
+    props: {
+      nodeBusinessInfo:{
+        type: Object
+      },
+    },
+    data() {
+      return {
+        queue:[
+        {
+            flowId:null,
+            pnodeId:null,
+            nodeId:null,
+            flowCode:null,
+            nodeName:"业务下单",
+            nodeCode:null,
+            state:"PENDING",
+            instanceId:null
+          }
+        ],
+        instance:{
+          mainBusiness:null,
+          businessId:null,
+          businessSubId:null,
+          production:[]
+        },
+        dialogVisible:false,
+        taskPageData:[],
+        dialogTitle:null,
+        workNodeCommit:{
+          instanceNodeId:null,
+          state:null,
+          comments:null,
+          production:[],
+          reportNos:[],
+          ifCheckTask:true,
+          businessSubId:null,
+          doSecondCheck:null,
+          doThirdCheck:null
+        }
+      }
+    },
+
+    created(){
+      //this.getInstanceQueue();
+    },
+    methods: {
+      openCurrentNodeDialog(node){
+        this.dialogVisible = true;
+        this.dialogTitle = node.nodeName;
+        if (node.instanceId){
+          this.$api.workNodeTaskRecord.instanceTask(node.instanceId).then(res=>{
+            if (res.code === 200 ){
+              this.taskPageData = res.data;
+            }
+          })
+        }
+        
+      },
+      getInstanceQueue(){
+        if (this.nodeBusinessInfo.mainBusiness!=null && this.nodeBusinessInfo.businessId!=null){
+          this.instance.mainBusiness = this.nodeBusinessInfo.mainBusiness;
+          this.instance.businessId = this.nodeBusinessInfo.businessId;
+          this.instance.businessSubId = this.nodeBusinessInfo.businessSubId;
+          this.instance.production = this.nodeBusinessInfo.production;
+          this.$api.workNodeInstance.queue(this.instance).then(res =>{
+            if (res.code ===200){
+              this.queue = res.data;
+            }
+          })
+        }
+      },
+      commit(state){
+        let commit = this.workNodeCommit
+        let handldType = "提交";
+        let type = "success"
+        if (state ==='REVERSE'){
+          handldType= "退回"
+          type = "info"
+        }
+        if (state ==='SKIP'){
+          handldType= "跳过"
+          type = "warning"
+        }
+        if (state ==='TERMINATE'){
+          handldType= "终止"
+          type = "error"
+        }
+        if (state ==='RESTART'){
+          handldType= "重置"
+          type = "error"
+        }
+        //需要把必要的业务信息提交给流程
+        commit.state = state;
+        commit.instanceNodeId = this.nodeBusinessInfo.currentInstanceNodeId;
+        commit.production = this.nodeBusinessInfo.production;
+        commit.reportNos = this.nodeBusinessInfo.reportNos;
+        commit.ifCheckTask = this.nodeBusinessInfo.ifCheckTask;
+        commit.businessSubId = this.nodeBusinessInfo.businessSubId;
+        commit.doSecondCheck = this.nodeBusinessInfo.doSecondCheck;
+        commit.doThirdCheck = this.nodeBusinessInfo.doThirdCheck;
+        let isOk = true
+        this.$emit('workflowCommitVerify',{"commit":commit},val =>{if (!val){isOk = false;}});
+        if (isOk){
+            this.$prompt('请填写处理意见,若无可直接点击确认按钮。',handldType,{
+                confirmButtonText: '确认',
+                cancelButtonText: '取消',
+                type: type,
+            }).then(({value})=>{
+              commit.comments = value;
+              this.$api.workflow.commit(commit).then(res=>{
+              if (res.code === 200 && res.data){
+                this.$notify({
+                    title: '成功',
+                    message: '工作流节点提交成功。',
+                    type: 'success',
+                    duration: 2000
+                  });
+                  //更新节点board
+                  // this.getInstanceQueue();
+                  // this.$emit('getCurrentNodeInfo');
+                  this.goBack();
+              }else{
+                this.$notify({
+                    title: '失败',
+                    message: '工作流节点提交失败,请联系管理员。',
+                    type: 'error',
+                    duration: 2000
+                  });
+              }
+            })
+          })
+        }
+      },
+
+      goBack(){
+        const back = this.$route.query.back;
+        if (back) {
+          this.$router.push({path:back, query:this.listQuery})
+        }
+      }
+    }
+  }
+</script>
+
+<style lang="scss" scoped>
+  .contanier{
+    width:100%;
+    height:auto;
+  }
+  .node-area{
+    width:100%;
+  }
+  .node-seq{
+    display:flex;
+    float:left
+  }
+  .button-area{
+    text-align: right;
+  }
+  /deep/.nodeDialog {
+  border-radius: 20px;
+}
+</style>
+

+ 5 - 6
src/components/workflowNode.vue

@@ -5,8 +5,8 @@
                 <img :src=img alt="" class="node-img-class">
                 <div class="node-name-class">{{name}}</div>
             </div>
-            <img v-if="!last" src="../assets/images/right-arrow.png" alt="" class="arrow">
         </div>
+        <img v-if="!last" src="../assets/images/right-arrow.png" alt="" class="arrow">
     </div>
 </template>
 
@@ -74,9 +74,9 @@ export default {
 </script>
 <style scoped lang="css">
 .node-class{
-    width:180px;
+    width:170px;
     height:120px;
-    margin:10px 10px 10px 10px;
+    margin-top:30px;
     float:left
 }
  .node-img-class{
@@ -89,7 +89,7 @@ export default {
     position:relative;
     font-size:20px;
     color:white;
-    top:-75px;
+    top:-85px;
     text-align: center;
     font-weight:bold;
     letter-spacing:1px;
@@ -101,8 +101,7 @@ export default {
     width:30px;
     height:30px;
     position:relative;
-    right:-180px;
-    top:-100px;
+    top:75px;
  }
  .node-main-class :hover{
     cursor:pointer

+ 3 - 3
src/router/index.js

@@ -70,7 +70,7 @@ VueRouter.prototype.push = function push(location, onResolve, onReject) {
     {
       path: '/document/window',
       component: () => import('@/components/DocumentWindow')
-    }
+    },
   ];
 
 const files = require.context('./modules', false, /\.js$/);
@@ -81,8 +81,8 @@ requireAll(files);
 
 const createRouter = () => new VueRouter({
   mode: 'hash', // require service support
-  base: '/admin',
-  //base: '/admin-test',
+  //base: '/admin',
+  base: '/admin-test',
   scrollBehavior: () => ({ y: 0 }),
   routes: routes
 });

+ 33 - 1
src/router/urlMap.js

@@ -69,6 +69,22 @@ import _views_report_land_city_base from '@/views/reports/land/cityBasePrice'
 import _views_report_city_base_edit from '@/views/reports/CommonEditReport'
 import _views_workflow_list from '@/views/set/workflow/list'
 import _views_workflow_detail from '@/views/set/workflow/detail'
+import _views_major_list from '@/views/major/list'
+import _views_major_order from '@/views/major/detail'
+import _views_major_todo from '@/views/major/todoList'
+import _views_major_todo_detail from '@/views/major/todoDetail'
+import _views_major_done from '@/views/major/saveFileDoneList'
+import _views_major_my_done from '@/views/major/doneList'
+import _views_major_detail from '@/views/major/detail'
+import _views_major_production_in from '@/views/major/productionIn'
+import _views_major_my_order from '@/views/major/myOrder'
+import _views_finance_real_fund from '@/views/finance/fundList'
+import _views_finance_real_fund_create from '@/views/finance/fundList'
+import _views_out_apply_check from '@/views/finance/outWarehouseCheck'
+import _views_finance_invoice_check from '@/views/finance/invoiceCheck'
+import _views_myOrder_detail from '@/views/major/myOrderDetail'
+import _views_save_file_waiting from '@/views/major/saveFileTodoList'
+import _views_major_index from '@/views/major/index'
 
 export default {
   _views_set_menu,
@@ -126,5 +142,21 @@ export default {
   _views_report_land_city_base,
   _views_report_city_base_edit,
   _views_workflow_list,
-  _views_workflow_detail
+  _views_workflow_detail,
+  _views_major_list,
+  _views_major_order,
+  _views_major_todo,
+  _views_major_todo_detail,
+  _views_major_done,
+  _views_major_my_done,
+  _views_major_detail,
+  _views_major_production_in,
+  _views_major_my_order,
+  _views_finance_real_fund,
+  _views_finance_real_fund_create,
+  _views_out_apply_check,
+  _views_finance_invoice_check,
+  _views_myOrder_detail,
+  _views_save_file_waiting,
+  _views_major_index
 }

+ 742 - 0
src/views/finance/fundList.vue

@@ -0,0 +1,742 @@
+<template>
+  <div class="app-container">
+    <div class="title-container">
+      <breadcrumb id="breadcrumb-container" class="breadcrumb-container" />
+    </div>
+    <y-page-list-layout :page-list="pageData" :page-para="listQuery" :get-page-list="getList">
+      <template slot="left">
+        <PermissionButton menu-code="_views_finance_real_fund_create" class-name="filter-item" type="success" icon="el-icon-circle-plus-outline"
+          :page-jump="false" round style="float: left" @click="createdRealFundDialog = true" />
+        <el-input v-model="listQuery.name" placeholder="项目名称" clearable
+          style="margin-left: 20px;width: 270px;float: left;">
+        </el-input>
+        <el-input v-model="listQuery.orderId" placeholder="项目编号" clearable
+          style="margin-left: 20px;width: 200px;float: left;">
+        </el-input>
+        <el-input v-model="listQuery.clientManager" placeholder="客户经理" clearable
+          style="margin-left: 20px;width: 100px;float: left;">
+        </el-input>
+        <el-input v-model="listQuery.principal" placeholder="项目负责人" clearable
+          style="margin-left: 20px;width: 150px;float: left;">
+        </el-input>
+        <el-button class="filter-item" style="margin-left: 10px;float: left;" type="primary" @click="searchList" round>搜索
+        </el-button>
+        <el-button class="filter-item" style="float: left;" round type="success" @click="resetSearch()">重置
+        </el-button>
+      </template>
+      <parentTable  :data="pageData.records" slot="table" style="width: 100%;">
+        <el-table-column label="付款方" align="center" width='200' >
+          <template slot-scope="{row}">
+            <span>{{ row.payer }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="付款银行" align="center" width='130'  >
+          <template slot-scope="{row}">
+            <span>{{ row.payerBank }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="付款账号" align="center" width='200'>
+          <template slot-scope="{row}">
+            <span>{{ row.payerAccount }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="付款金额(元)" align="center" >
+          <template slot-scope="{row}">
+            <span>{{ row.amount }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="到账时日" align="center">
+          <template slot-scope="{row}">
+            <span>{{ row.payDatetime }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="已认领(元)" align="center">
+          <template slot-scope="{row}">
+            <span  style="color:green">{{ row.claimAmount }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="未认领(元)" align="center">
+          <template slot-scope="{row}">
+            <span style="color:red">{{ row.notClaimAmount }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="录入人" align="center">
+          <template slot-scope="{row}">
+            <span>{{ row.creator}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="录入时间" align="center" width='160'>
+          <template slot-scope="{row}">
+            <span>{{ row.created}}</span> 
+          </template>
+        </el-table-column>
+        <el-table-column label="全部认领" align="center" show-overflow-tooltip>
+          <template slot-scope="{row}">
+            <i v-if="row.notClaimAmount<=0" style="font-size:20px; color:green" class="el-icon-success"></i>
+            <i v-else style="font-size:20px; color:RGB(255,106,106)" class="el-icon-warning"></i>
+          </template>
+        </el-table-column>
+        <el-table-column label="操作" align="center" width="300" fixed="right">
+          <template slot-scope="{row}">
+              <PermissionButton :disabled="row.notClaimAmount<=0" menu-code="_views_claim_real_fund" class-name="filter-item" type="success"
+              :page-jump="false" round size="mini" @click="openMyOrderDialog(row)" />
+              <PermissionButton menu-code="_views_claim_list" class-name="filter-item" type="primary"
+              :page-jump="false" round size="mini" @click="clamiList(row.id,row.notClaimAmount,row.payer,row.amount)" />
+              <PermissionButton menu-code="_views_real_fund_edit" class-name="filter-item" type="warning"
+              :page-jump="false" round size="mini" @click="detail(row.id)" />
+              <PermissionButton menu-code="_views_real_fund_remove" class-name="filter-item" type="danger"
+              :page-jump="false" round size="mini" @click="remove(row.id)" />
+          </template>
+        </el-table-column>
+      </parentTable>
+    </y-page-list-layout>
+    <el-dialog :visible.sync="createdRealFundDialog" width="45%" center  custom-class="doWarehouseClass" @closed="cleanFund">
+      <el-form ref="realFund" :model="realFund" >
+        <el-divider content-position="left">实收款信息</el-divider>
+          <el-row>
+            <el-col :xs="24" :sm="12" :lg="24" :span="6">
+              <el-form-item
+                label="付款方名称:"
+                prop="payer"
+                :rules="{required: true, message: '付款方名称不能为空', trigger: 'blur'}"
+                label-width="140px"
+                class="postInfo-container-item"
+              >
+                <el-input v-model.trim="realFund.payer" class="filter-item" />
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-col :xs="24" :sm="12" :lg="12" :span="6">
+              <el-form-item
+                label="付款金额(元):"
+                prop="amount"
+                :rules="{required: true, message: '付款金额不能为空', trigger: 'blur'}"
+                label-width="140px"
+                class="postInfo-container-item"
+              >
+              <el-input-number :precision="2" :min="0" :value-on-clear="0" v-model.number="realFund.amount" type="number" 
+                style="width:100%" class="filter-item" :disabled="realFund.amount>0" :readonly="realFund.amount>0"/>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="12" :span="6">
+              <el-form-item
+                label="到账时间:"
+                prop="payDatetime"
+                :rules="{required: true, message: '到账时间不能为空', trigger: 'blur'}"
+                label-width="140px"
+                class="postInfo-container-item"
+              >
+                <el-date-picker
+                  v-model="realFund.payDatetime" type="date" placeholder="选择日期" style="width:100%">
+                </el-date-picker>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-col :xs="24" :sm="12" :lg="12" :span="6">
+              <el-form-item
+                label="付款银行:"
+                prop="payerBank"
+                label-width="140px"
+                class="postInfo-container-item"
+              >
+                <el-input v-model.trim="realFund.payerBank" class="filter-item" />
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="12" :span="6">
+              <el-form-item
+                label="付款银行账号:"
+                prop="payerAccount"
+                label-width="140px"
+                class="postInfo-container-item"
+              >
+              <el-input v-model.trim="realFund.payerAccount" class="filter-item" />
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-col :xs="24" :sm="12" :lg="24" :span="6">
+              <el-form-item
+                label="备注:"
+                prop="remark"
+                label-width="140px"
+                class="postInfo-container-item"
+              >
+                <el-input v-model.trim="realFund.remark" class="filter-item" type="textarea" />
+              </el-form-item>
+            </el-col>
+          </el-row>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="createdRealFundDialog = false">取 消</el-button>
+        <el-button type="primary" @click="saveRealFund()">确 定</el-button>
+      </span>
+    </el-dialog>
+    <el-dialog :visible.sync="claimListDialog" width="80%" center  custom-class="doWarehouseClass">
+      <div style="margin-bottom:20px;font-size:20px;">
+        <span>付款方:</span><span style="color:red;font-weight:bold">{{payer}}</span><span style="margin-left:20px">付款金额:</span><span style="color:red;font-weight:bold">{{amount}}¥</span><span style="margin-left:20px">的认领记录:</span>
+      </div>
+      <el-table
+        :data="claimListData"
+        style="width: 100%">
+        <el-table-column
+          align = "center"
+          prop="businessType"
+          label="业务类型"
+          width="180">
+        </el-table-column>
+        <el-table-column show-overflow-tooltip
+        align = "center"
+          prop="orderName" 
+          label="订单名称"
+          width="300">
+        </el-table-column>
+        <el-table-column show-overflow-tooltip
+        align = "center"
+          prop="orderId"
+          label="订单号"
+          width="250">
+        </el-table-column>
+        <el-table-column
+        align = "center"
+          prop="shouldAmount"
+          label="应收金额(元)">
+        </el-table-column>
+        <el-table-column
+        align = "center"
+          prop="claimAmount"
+          label="认领金额(元)">
+        </el-table-column>
+        <el-table-column
+        align = "center"
+          prop="claimName"
+          label="认领人">
+        </el-table-column>
+        <el-table-column
+        align = "center"
+          prop="created" width="180"
+          label="认领时间">
+        </el-table-column>
+        <!-- <el-table-column
+        align = "center"
+          label="操作">
+          <template slot-scope="scope">
+            <el-button @click="updateClaim(scope.row)" type="text" size="small">修改</el-button>
+            <el-button @click="removeClaim(scope.row.id)" type="text" size="small">删除</el-button>
+          </template>
+        </el-table-column> -->
+      </el-table>
+    </el-dialog>
+    <el-dialog :visible.sync="myOrderDialog" width="80%" center  custom-class="doWarehouseClass" @closed="getList">
+      <el-tabs v-model="activeName" @tab-click="handleClick">
+        <el-tab-pane label="我的大中型订单" name="MAJOR_BUSINESS">
+          <y-page-list-layout :page-list="myMajorPageData" :page-para="orderListQuery" :get-page-list="getMyMajorOrder">
+            <template slot="left">
+              <el-input v-model="listQuery.name" placeholder="项目名称" clearable
+                style="margin-left: 20px;width: 270px;float: left;">
+              </el-input>
+              <el-input v-model="listQuery.orderId" placeholder="项目编号" clearable
+                style="margin-left: 20px;width: 200px;float: left;">
+              </el-input>
+              <el-input v-model="listQuery.clientManager" placeholder="客户经理" clearable
+                style="margin-left: 20px;width: 100px;float: left;">
+              </el-input>
+              <el-input v-model="listQuery.principal" placeholder="项目负责人" clearable
+                style="margin-left: 20px;width: 150px;float: left;">
+              </el-input>
+              <el-button class="filter-item" style="margin-left: 10px;float: left;" type="primary" @click="searchList" round>搜索
+              </el-button>
+              <el-button class="filter-item" style="float: left;" round type="success" @click="resetSearch()">重置
+              </el-button>
+            </template>
+            <parentTable  :data="myMajorPageData.records" slot="table" style="width: 100%;" :selectionChange="handleSelectionChange">
+              <el-table-column
+                align="center"
+                type="selection"
+                claimOrders
+                width="100" border="true">
+              </el-table-column>
+              <el-table-column label="订单名称" align="center" show-overflow-tooltip  >
+                <template slot-scope="{row}">
+                  <span>{{ row.orderName }}</span>
+                </template>
+              </el-table-column>
+              <el-table-column label="订单号" align="center" show-overflow-tooltip width='200'  >
+                <template slot-scope="{row}">
+                  <span>{{row.orderId }}</span>
+                </template>
+              </el-table-column>
+              <el-table-column label="委托人" align="center" show-overflow-tooltip width='100'>
+                <template slot-scope="{row}">
+                  <span>{{ row.bailor }}</span>
+                </template>
+              </el-table-column>
+              <el-table-column label="产权人" align="center" show-overflow-tooltip width='100'>
+                <template slot-scope="{row}">
+                  <span>{{ row.owner }}</span>
+                </template>
+              </el-table-column>
+              <el-table-column label="客户名称" align="center" width='120' show-overflow-tooltip>
+                <template slot-scope="{row}">
+                  <span>{{ row.clienteleName }}</span>
+                </template>
+              </el-table-column>
+              <el-table-column label="业务来源" align="center" width='120' show-overflow-tooltip>
+                <template slot-scope="{row}">
+                  <span>{{ row.clienteleSubName }}</span>
+                </template>
+              </el-table-column>
+              <el-table-column label="客户联系人" align="center" width='120' show-overflow-tooltip>
+                <template slot-scope="{row}">
+                  <span>{{ row.clienteleContactName }}</span>
+                </template>
+              </el-table-column>
+              <el-table-column label="应收款(元)" align="center" width='120'>
+                <template slot-scope="{row}">
+                  <span>{{ row.shouldAmount }}</span>
+                </template>
+              </el-table-column>
+              <el-table-column label="实收款(元)" align="center" width='120'>
+                <template slot-scope="{row}">
+                  <span>{{ row.realAmount }}</span>
+                </template>
+              </el-table-column>
+              <el-table-column
+                align = "center" show-overflow-tooltip width='120' label="备注">
+                  <template slot-scope="{row}">
+                  <span>{{ row.remark }}</span>
+                </template>
+              </el-table-column>
+            </parentTable>
+          </y-page-list-layout>
+        </el-tab-pane>
+        <el-tab-pane label="我的个贷订单" name="second">个贷业务</el-tab-pane>
+        <el-tab-pane label="我的资产订单" name="third">资产业务</el-tab-pane>
+      </el-tabs>
+      <el-button  style="display:flex; position:absolute;right:50px;top:50px" type="danger" @click="openClaimDialog()">认领</el-button>
+    </el-dialog>
+    <el-dialog :visible.sync="allotAmountDialog" width="55%" center  custom-class="doWarehouseClass"  @closed="cleanClaimDTO">
+      <el-form v-model="claimOrders" ref="claimOrders">
+        <el-row>
+            <el-col :xs="24" :sm="12" :lg="21" :span="6">
+              <div style="font-size:20px;">
+                <span>此笔实收款剩余:</span><span style="color:red;font-weight:bold">{{notClaimAmount}}¥</span>
+              </div>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="3" :span="6">
+              <el-button style="float:right" type="success" @click="claim()">确认认领</el-button>
+            </el-col>
+        </el-row>
+        <el-card style="margin-top:20px" v-for="(p,id) in claimOrders" shadow="hover">
+          <div slot="header" class="clearfix">
+            <el-row>
+              <el-col :xs="24" :sm="12" :lg="12" :span="6">
+                <el-form-item label="订单名称:" prop="orderName"   label-width="140px" class="postInfo-container-item">
+                  <el-input :value="p.orderName" type="text" class="filter-item" disabled readonly />
+                </el-form-item >
+              </el-col>
+              <el-col :xs="24" :sm="12" :lg="12" :span="6">
+                <el-form-item label="订单号:" prop="orderId"   label-width="140px" class="postInfo-container-item">
+                  <el-input :value="p.orderId" type="text" class="filter-item" disabled readonly />
+                </el-form-item >
+              </el-col>
+            </el-row>
+            <el-row>
+              <el-col :xs="24" :sm="12" :lg="12" :span="6">
+                <el-form-item label="本次认领金额:" prop="thisTimeAmount"  label-width="140px" class="postInfo-container-item">
+                  <el-input-number  :precision="2" :min="0" :value-on-clear="0" v-model.number="p.thisTimeAmount" type="number" 
+                        style="width:100%" class="filter-item" />
+                </el-form-item >
+              </el-col>
+              <el-col :xs="24" :sm="12" :lg="12" :span="6">
+                <el-form-item label="订单应收金额:"  prop="shouldAmount" label-width="140px" class="postInfo-container-item">
+                  <el-input :value="p.shouldAmount" type="text" class="filter-item" disabled readonly>
+                    <template slot="append">元</template>
+                  </el-input>
+                </el-form-item >
+              </el-col>
+            </el-row>
+            <el-row>
+              <el-col :xs="24" :sm="12" :lg="12" :span="6">
+                <el-form-item label="已认领金额:"  prop="realAmount" label-width="140px" class="postInfo-container-item">
+                  <el-input :value="p.realAmount" type="text" class="filter-item" disabled readonly>
+                    <template slot="append">元</template>
+                  </el-input>
+                </el-form-item >
+              </el-col>
+            </el-row>
+          </div>
+          <el-row>
+            <el-col :xs="24" :sm="12" :lg="12" :span="6">
+              <el-form-item label="产品列表:" prop="orderName"   label-width="140px" class="postInfo-container-item" />
+            </el-col>
+            <!-- <el-col :xs="24" :sm="12" :lg="6" :span="6">
+                  <el-button v-if="p.reports.length>0" type="primary" style="width:100%" class="filter-item" >自动分配到报告</el-button>
+            </el-col> -->
+          </el-row>
+          <div v-if="p.reports!=null && p.reports.length>0">
+            <el-row v-for="(r,index) in p.reports">
+              <div  style="margin-left:75px">
+                <el-col :xs="24" :sm="12" :lg="8" :span="6">
+                  <el-form-item :label="productionLabel+(index+1)+':'" prop="productionType"   label-width="120px" class="postInfo-container-item">
+                    <el-input :value="r.productionType" type="text" class="filter-item" disabled readonly style="width:130px"/>
+                  </el-form-item >
+                </el-col>
+                <el-col :xs="24" :sm="12" :lg="8" :span="6">
+                  <el-form-item label="报告号:" prop="businessSubId"   label-width="80px" class="postInfo-container-item">
+                    <el-input :value="r.businessSubId" type="text" class="filter-item" disabled readonly style="width:220px" />
+                  </el-form-item >
+                </el-col>
+                <el-col :xs="24" :sm="12" :lg="8" :span="6">
+                  <el-form-item label="分配金额:" prop="productionRealAmount"   label-width="120px" class="postInfo-container-item">
+                  <el-input-number  :precision="2" :min="0" :value-on-clear="0" v-model.number="r.realAmount" type="number" 
+                        style="width:100%" class="filter-item" />
+                  </el-form-item >
+                </el-col>
+              </div>
+             </el-row>
+          </div>
+          <span v-else style="margin-left:140px;color:RGB(153,153,153)">暂无产品</span>
+        </el-card>
+      </el-form>
+    </el-dialog>
+  </div>
+</template>
+<script>
+import YPageListLayout from '@/components/YPageListLayout'
+import Breadcrumb from '@/components/Breadcrumb'
+
+
+export default {
+  name: 'financeRealFund',
+  components: {
+    Breadcrumb,
+    YPageListLayout
+  },
+
+  data() {
+    return {
+      pageData: { records: [] },
+      listQuery: {
+        page: 1,
+        size: 10,
+        descs: 'id',
+      },
+      createdRealFundDialog: false,
+      claimListDialog:false,
+      myOrderDialog:false,
+      allotAmountDialog:false,
+      realFund:{
+        id:null,
+        payer:null,
+        payerBank:null,
+        payerAccount:null,
+        amount:null,
+        claimAmount:null,
+        notClaimAmount:null,
+        payDatetime:null,
+        remark:null,
+        created:null,
+        creator:null
+      },
+      claimListData:[],
+      activeName:"MAJOR_BUSINESS",
+      orderListQuery: {
+        page: 1,
+        size: 10,
+        descs: 'id',
+      },
+      myMajorPageData: { records: [] },
+      notClaimAmount:0,
+      notInfo:"此笔实收款剩余:",
+      claimOrders:[],
+      financeFundId:null,
+      payer:null,
+      amount:null,
+      productionLabel:"产品"
+    }
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+  
+    resetSearch() {
+      this.$router.push({ query: {} });
+      this.listQuery = {
+        current: 1,
+        size: 10,
+        descs: 'id',
+      }
+      this.getList()
+    },
+   
+    searchList() {
+      // 重置分页
+      this.listQuery.page = 1
+      this.listQuery.size = 10
+      this.getList()
+    },
+    getList() {
+      this.$api.financeRealFund.list(Object.assign({}, this.listQuery)).then(res=>{
+        if (res.code ===200){
+            this.pageData = res.data;
+        }
+      })
+    },
+    openCreatedRealFund(){
+
+    },
+    saveRealFund(){
+      this.$refs.realFund.validate(valid=>{
+        if (valid){
+          if (this.realFund.id){
+              this.$api.financeRealFund.edit(this.realFund).then(res=>{
+                if (res.code ===200 && res.data){
+                    this.$notify({
+                      title: '成功',
+                      message: '修改实收款信息成功',
+                      type: 'success',
+                      duration: 2000
+                    });
+                    this.getList();
+                    this.createdRealFundDialog = false;
+                }else {
+                  this.$notify({
+                      title: '失败',
+                      message: '修改实收款信息失败',
+                      type: 'error',
+                      duration: 2000
+                  });
+                }
+            })
+          }else{
+            this.$api.financeRealFund.add(this.realFund).then(res=>{
+              if (res.code ===200 && res.data){
+                  this.$notify({
+                    title: '成功',
+                    message: '录入实收款信息成功',
+                    type: 'success',
+                    duration: 2000
+                  });
+                  this.getList();
+                  this.createdRealFundDialog = false;
+              }else {
+                this.$notify({
+                    title: '失败',
+                    message: '录入实收款信息失败',
+                    type: 'error',
+                    duration: 2000
+                });
+              }
+            })
+          }
+        }
+      })
+    },
+    clamiList(id,notClaimAmount,payer,amount){
+      this.claimListDialog = true;
+      this.notClaimAmount = notClaimAmount;
+      this.payer=payer;
+      this.amount = amount;
+      this.$api.financeClaim.getList(id).then(res=>{
+        if (res.code ===200){
+          this.claimListData = res.data;
+        }
+      })
+    },
+    detail(id){
+      this.createdRealFundDialog = true;
+      this.$api.financeRealFund.detail(id).then(res=>{
+        if (res.code === 200 ){
+          this.realFund = res.data
+        }
+      })
+    },
+    remove(id){
+      this.$confirm('请确认是否删除此回款记录?','提示',{
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning',
+          center: true
+      }).then(()=>{
+          this.$api.financeRealFund.delete(id).then(res=>{
+            if (res.code === 200 && res.data){
+                this.$notify({
+                    title: '成功',
+                    message: '实收款信息已删除',
+                    type: 'success',
+                    duration: 2000
+                  });
+                this.getList();
+            }else {
+                this.$notify({
+                    title: '失败',
+                    message: '实收款信息删除失败',
+                    type: 'error',
+                    duration: 2000
+                });
+            }
+          })
+      })
+    },
+    handleClick(tab, event) {
+        if (tab.name === 'MAJOR_BUSINESS'){
+            this.getMyMajorOrder();
+        }
+    },
+    openMyOrderDialog(row){
+      this.myOrderDialog = true;
+      this.notClaimAmount = row.notClaimAmount;
+      this.financeFundId = row.id;
+      this.getMyMajorOrder();
+    },
+    getMyMajorOrder(){
+      this.$api.majorProduction.waitingClaim(Object.assign({}, this.orderListQuery)).then(res=>{
+          if (res.code ===200){
+              this.myMajorPageData = res.data;
+          }
+      })
+    },
+    cleanClaimDTO(){
+      this.notInfo = "此笔实收款剩余:";
+    },
+    claim(){
+      this.$api.businessProduction.allotRealAmount(this.claimOrders).then(res=>{
+        if (res.code === 200 && res.data){
+          this.$notify({
+            title: '成功',
+            message: '实收款认领成功',
+            type: 'success',
+            duration: 2000
+          });
+          this.getMyMajorOrder();
+          this.allotAmountDialog = false;
+        }else {
+          this.$notify({
+            title: '失败',
+            message: '实收款认领失败',
+            type: 'error',
+            duration: 2000
+          });
+        }
+      })
+    },
+    updateClaim(row){
+      this.doClaimDialog = true;
+      this.claimDTO = row;
+      this.notInfo = this.notInfo + this.notClaimAmount + '¥'
+    },
+    // doUpdateClaim(){
+    //   if (this.claimDTO.id){
+    //     this.$api.financeClaim.edit(this.claimDTO).then(res=>{
+    //       if (res.code === 200 && res.data){
+    //         this.$notify({
+    //                 title: '成功',
+    //                 message: '修改认领金额成功',
+    //                 type: 'success',
+    //                 duration: 2000
+    //               });
+    //         this.clamiList(this.claimDTO.realFundId);
+    //         this.getList();
+    //         this.allotAmountDialog = false;
+    //       }else {
+    //         this.$notify({
+    //                 title: '失败',
+    //                 message: '修改认领金额失败',
+    //                 type: 'error',
+    //                 duration: 2000
+    //           });
+    //       }
+    //     })
+    //   }
+    // },
+    // removeClaim(id){
+    //   this.$confirm('请确认是否删除此条认领记录?','提示',{
+    //     confirmButtonText: '确定',
+    //     cancelButtonText: '取消',
+    //     type: 'warning',
+    //     center: true       
+    //   }).then(()=>{
+    //     if (id){
+    //       this.$api.financeClaim.delete(id).then(res=>{
+    //         if (res.code ===200 && res.data){
+    //           this.$notify({
+    //                 title: '成功',
+    //                 message: '删除认领记录成功',
+    //                 type: 'success',
+    //                 duration: 2000
+    //               });
+    //           this.clamiList(this.claimDTO.realFundId);
+    //           this.getList();
+    //         }else {
+    //           this.$notify({
+    //                 title: '失败',
+    //                 message: '删除认领记录失败',
+    //                 type: 'error',
+    //                 duration: 2000
+    //           });
+    //         }
+    //       })
+    //     }
+    //   })
+      
+    // },
+    handleSelectionChange(val){
+        let pickeds = [];
+        console.log(val)
+        for (let i in val){
+          let picked = new Object();
+          picked.id = val[i].id;
+          picked.orderName = val[i].orderName;
+          picked.orderId = val[i].orderId;
+          picked.shouldAmount = val[i].shouldAmount;
+          picked.orderFundId = val[i].orderFundId;
+          picked.realAmount = val[i].realAmount;
+          picked.financeFundId = this.financeFundId;
+          pickeds.push(picked);
+        }
+        this.claimOrders = pickeds;
+      },
+      openClaimDialog(){
+        if (this.claimOrders.length===0){
+          this.$notify({
+                    title: '提示',
+                    message: '请先选择订单,然后认领。',
+                    type: 'info',
+                    duration: 2000
+                });
+                return ;
+        }
+        this.allotAmountDialog = true;
+        this.notInfo = this.notInfo + this.notClaimAmount + '¥'
+          if (this.activeName === 'MAJOR_BUSINESS'){
+              this.$api.businessProduction.orderReports(this.claimOrders).then(res=>{
+                if (res.code ===200){
+                    this.claimOrders = res.data;
+                }
+              })
+          }
+      },
+      cleanFund(){
+        this.realFund.id=null;
+        this.realFund.payer=null;
+        this.realFund.payerBank=null;
+        this.realFund.payerAccount=null;
+        this.realFund.amount=null;
+        this.realFund.claimAmount=null;
+        this.realFund.payDatetime=null;
+        this.realFund.remark=null;
+        this.realFund.created=null;
+        this.realFund.creator=null;
+      },
+  },
+  
+}
+</script>
+<style lang="scss" scoped>
+    /deep/.doWarehouseClass {
+      border-radius: 10px;
+    }
+</style>

+ 503 - 0
src/views/finance/invoiceCheck.vue

@@ -0,0 +1,503 @@
+<template>
+  <div class="app-container">
+    <div class="title-container">
+      <breadcrumb id="breadcrumb-container" class="breadcrumb-container" />
+    </div>
+    <y-page-list-layout :page-list="pageData" :page-para="listQuery" :get-page-list="getList">
+      <template slot="left">
+        <el-input v-model="listQuery.name" placeholder="项目名称" clearable
+          style="margin-left: 20px;width: 270px;float: left;">
+        </el-input>
+        <el-input v-model="listQuery.orderId" placeholder="项目编号" clearable
+          style="margin-left: 20px;width: 200px;float: left;">
+        </el-input>
+        <el-input v-model="listQuery.clientManager" placeholder="客户经理" clearable
+          style="margin-left: 20px;width: 100px;float: left;">
+        </el-input>
+        <el-input v-model="listQuery.principal" placeholder="项目负责人" clearable
+          style="margin-left: 20px;width: 150px;float: left;">
+        </el-input>
+        <el-button class="filter-item" style="margin-left: 10px;float: left;" type="primary" @click="searchList" round>搜索
+        </el-button>
+        <el-button class="filter-item" style="float: left;" round type="success" @click="resetSearch()">重置
+        </el-button>
+      </template>
+      <parentTable  :data="pageData.records" slot="table" style="width: 100%;">
+        <el-table-column label="业务类型" align="center">
+          <template slot-scope="{row}">
+            <span>{{ businessTypeAlias(row.businessType) }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="订单名称" align="center" width="300" show-overflow-tooltip>
+          <template slot-scope="{row}">
+            <span>{{ row.orderName }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="订单号" align="center" width="200">
+          <template slot-scope="{row}">
+            <span>{{ row.orderId }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="发票抬头" align="center">
+          <template slot-scope="{row}">
+            <span>{{ row.title }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="税号" align="center">
+          <template slot-scope="{row}">
+            <span>{{ row.taxNo }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="发票类型" align="center">
+          <template slot-scope="{row}">
+            <span>{{ row.type }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="待开金额" align="center">
+          <template slot-scope="{row}">
+            <span>{{ row.planAmount }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="计划开票时间" align="center">
+          <template slot-scope="{row}">
+            <span>{{ row.planMakeDate}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="备注" align="center" show-overflow-tooltip>
+          <template slot-scope="{row}">
+            <span>{{ row.remark==null?'-':row.remark}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="申请人" align="center">
+          <template slot-scope="{row}">
+            <span>{{ row.applyName }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="申请时间" align="center" width="250">
+          <template slot-scope="{row}">
+            <span>{{ row.created }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="开票状态" align="center">
+          <template slot-scope="{row}">
+            <span style="color:red;font-weight:bold">{{ row.state }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="操作" align="center" width="150" fixed="right">
+          <template slot-scope="{row}">
+              <PermissionButton  menu-code="_views_make_invoice_check" class-name="filter-item" type="success"
+              :page-jump="false" round size="mini" @click="openMakeDialog(row)" />
+          </template>
+        </el-table-column>
+      </parentTable>
+    </y-page-list-layout>
+    <el-dialog :visible.sync="newInvoiceDialog" width="75%" center  custom-class="doWarehouseClass">
+      <el-form ref="invoice" :model="invoice" >
+        <el-divider content-position="left">开票信息</el-divider>
+          <el-row>
+            <el-col :xs="24" :sm="12" :lg="6" :span="6">
+              <el-form-item
+                label="发票抬头:"
+                :rules="{required: true, message: '发票抬头不能为空', trigger: 'blur'}"
+                prop="title"
+                label-width="140px"
+                class="postInfo-container-item"
+              >
+                <el-input v-model.trim="invoice.title" class="filter-item" readonly disabled />
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6" :span="6">
+              <el-form-item
+                label="发票类型:"
+                :rules="{required: true, message: '发票类型不能为空', trigger: 'blur'}"
+                prop="type"
+                label-width="140px"
+                class="postInfo-container-item"
+              >
+                <el-select v-model="invoice.type"  style="width:206px" readonly disabled>
+                  <el-option label="普票" value="普票"></el-option> 
+                  <el-option label="专票" value="专票"></el-option> 
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6" :span="6">
+              <el-form-item
+                label="税号:"
+                :rules="{required: true, message: '税号不能为空', trigger: 'blur'}"
+                prop="taxNo"
+                label-width="140px"
+                class="postInfo-container-item"
+              >
+                <el-input v-model.trim="invoice.taxNo" class="filter-item" readonly disabled />
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-col :xs="24" :sm="12" :lg="6" :span="6">
+              <el-form-item
+                label="计划开票金额(元):"
+                prop="planAmount"
+                :rules="{required: true, message: '使用权面积不能为空', trigger: 'blur'}"
+                label-width="140px"
+                class="postInfo-container-item"
+              >
+              <el-input-number :precision="2" :min="0" :value-on-clear="0" v-model.number="invoice.planAmount" type="number"  readonly disabled
+                style="width:206px" class="filter-item" />
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6" :span="6">
+              <el-form-item
+                label="计划开票日期:"
+                prop="planMakeDate"
+                :rules="{required: true, message: '计划开票日期不能为空', trigger: 'blur'}"
+                label-width="140px"
+                class="postInfo-container-item"
+              >
+                <el-date-picker
+                  v-model="invoice.planMakeDate" type="date" placeholder="选择日期" style="width:206px" readonly disabled>
+                </el-date-picker>
+              </el-form-item>
+            </el-col>
+          </el-row> 
+          <el-row>
+            <el-col :xs="24" :sm="12" :lg="6" :span="6">
+              <el-form-item
+                label="实开金额:"
+                :rules="{required: true, message: '实际开票金额不能为空', trigger: 'blur'}"
+                prop="realAmount"
+                label-width="140px"
+                class="postInfo-container-item"
+              >
+              <el-input-number :precision="2" :min="0" :value-on-clear="0" v-model.number="invoice.realAmount" type="number" 
+                style="width:206px" class="filter-item" />
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6" :span="6">
+              <el-form-item
+                label="实开日期:"
+                prop="realMakeDate"
+                :rules="{required: true, message: '实际开票日期不能为空', trigger: 'blur'}"
+                label-width="140px"
+                class="postInfo-container-item"
+              >
+                <el-date-picker
+                  v-model="invoice.realMakeDate" type="date" placeholder="选择日期" style="width:206px">
+                </el-date-picker>
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6" :span="6">
+              <el-form-item
+                label="全额收款:"
+                prop="isPayAll"
+                label-width="140px"
+                class="postInfo-container-item"
+              >
+                <el-radio  :value="invoice.isPayAll" :label="false||null" border size="medium" readonly>否</el-radio>
+                <el-radio  :value="invoice.isPayAll" :label="true" border size="medium" readonly>是</el-radio>
+              </el-form-item>
+            </el-col>
+          </el-row> 
+          <el-row>
+            <el-col :xs="24" :sm="12" :lg="6" :span="6">
+              <el-form-item
+                label="业务类型:"
+                prop="businessType"
+                label-width="140px"
+                class="postInfo-container-item"
+              >
+                <el-input :value="businessTypeAlias(invoice.businessType)" class="filter-item" readonly disabled />
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="12" :span="6">
+              <el-form-item
+                label="报告号:"
+                prop="reprotNo"
+                label-width="140px"
+                class="postInfo-container-item"
+              >
+              <el-input v-model.trim="invoice.reportNo" class="filter-item" readonly disabled />
+              </el-form-item>
+            </el-col>
+          </el-row>
+        <el-divider content-position="left">银行信息</el-divider>
+          <el-row>
+            <el-col :xs="24" :sm="12" :lg="6" :span="6">
+              <el-form-item
+                label="开户行:"
+                prop="bankName"
+                label-width="140px"
+                class="postInfo-container-item"
+              >
+                <el-input v-model.trim="invoice.bankName" class="filter-item" />
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6" :span="6">
+              <el-form-item
+                label="银行账号:"
+                prop="bankAccount"
+                label-width="140px"
+                class="postInfo-container-item"
+              >
+              <el-input v-model.trim="invoice.bankAccount" class="filter-item" />
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-col :xs="24" :sm="12" :lg="6" :span="6">
+              <el-form-item
+                label="地址:"
+                prop="bankAddress"
+                label-width="140px"
+                class="postInfo-container-item"
+              >
+                <el-input v-model.trim="invoice.bankAddress" class="filter-item" />
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6" :span="6">
+              <el-form-item
+                label="电话:"
+                prop="bankTel"
+                label-width="140px"
+                class="postInfo-container-item"
+              >
+              <el-input v-model.trim="invoice.bankTel" class="filter-item" />
+              </el-form-item>
+            </el-col>
+          </el-row>
+        <el-divider content-position="left">发票信息</el-divider>
+          <el-row>
+            <el-col :xs="24" :sm="12" :lg="6" :span="6">
+              <el-form-item
+                label="开票项目:"
+                prop="makeItem"
+                label-width="140px"
+                class="postInfo-container-item"
+              >
+                <el-input v-model.trim="invoice.makeItem" class="filter-item" />
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6" :span="6">
+              <el-form-item
+                label="项目数量:"
+                prop="itemQuantity"
+                label-width="140px"
+                class="postInfo-container-item"
+              >
+              <el-input v-model.trim="invoice.itemQuantity" class="filter-item" />
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6" :span="6">
+              <el-form-item
+                label="计量单位:"
+                prop="itemUnit"
+                label-width="140px"
+                class="postInfo-container-item"
+              >
+              <el-input v-model.trim="invoice.itemUnit" class="filter-item" placeholder="个/套/箱/次/斤/公斤/..."/>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-col :xs="24" :sm="12" :lg="6" :span="6">
+              <el-form-item
+                label="税点:"
+                prop="taxRate"
+                label-width="140px"
+                class="postInfo-container-item"
+              >
+              <el-input-number :precision="2" :min="0" :value-on-clear="0" v-model.number="invoice.taxRate" type="number" 
+                style="width:206px" class="filter-item" />
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="12" :lg="6" :span="6">
+              <el-form-item
+                label="税额:"
+                prop="taxAmount"
+                label-width="140px"
+                class="postInfo-container-item"
+              >
+              <el-input-number :precision="2" :min="0" :value-on-clear="0" v-model.number="invoice.taxAmount" type="number" 
+                style="width:206px" class="filter-item" />
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-col :xs="24" :sm="12" :lg="18" :span="6">
+              <el-form-item
+                label="备注:"
+                prop="remark"
+                label-width="140px"
+                class="postInfo-container-item"
+              >
+                <el-input v-model.trim="invoice.remark" type="textarea" class="filter-item" />
+              </el-form-item>
+            </el-col>
+          </el-row>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="newInvoiceDialog = false">取 消</el-button>
+        <el-button type="primary" @click="makeInvoice()" :disabled="this.invoice.state!='审核中'">确认开票</el-button>
+        <el-button type="danger" @click="refuseApply()" :disabled="this.invoice.state!='审核中'">拒绝申请</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+<script>
+import YPageListLayout from '@/components/YPageListLayout'
+import Breadcrumb from '@/components/Breadcrumb'
+
+export default {
+  name: 'invoiceCheck',
+  components: {
+    Breadcrumb,
+    YPageListLayout,
+  },
+  filters: {
+    
+  },
+  data() {
+    return {
+      pageData: { records: [] },
+      listQuery: {
+        page: 1,
+        size: 10,
+        descs: 'id',
+      },
+      newInvoiceDialog:false,
+      invoice:{
+        id:null,
+        productionFundId:null,
+        title:null,
+        type:null,
+        taxNo:null,
+        planAmount:null,
+        planMakeDate:null,
+        bankName:null,
+        bankAccount:null,
+        bankAddress:null,
+        bankTel:null,
+        makeItem:null,
+        itemQuantity:null,
+        itemUnit:null,
+        taxRate:null,
+        taxAmount:null,
+        remark:null,
+        businessType:null,
+        reportNo:null
+      },
+    }
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+  
+    resetSearch() {
+      this.$router.push({ query: {} });
+      this.listQuery = {
+        current: 1,
+        size: 10,
+        descs: 'id',
+      }
+      this.getList()
+    },
+   
+    searchList() {
+      // 重置分页
+      this.listQuery.page = 1
+      this.listQuery.size = 10
+      this.getList()
+    },
+    getList() {
+      this.$api.financeInvoice.list(Object.assign({}, this.listQuery)).then(res=>{
+        if (res.code ===200){
+            this.pageData = res.data;
+        }
+      })
+    },
+    businessTypeAlias(code){
+      return '大中型'
+    },
+    openMakeDialog(row){
+      this.newInvoiceDialog= true;
+      this.invoice = row;
+    },
+    makeInvoice(){
+      this.$refs.invoice.validate(valid=>{
+        if(valid){
+          this.$confirm('请确认开票信息是否正确操作后无法修改!','提示',{
+            confirmButtonText: '确定',
+            cancelButtonText: '取消',
+            type: 'warning',
+            center: true
+          }).then(()=>{
+            if (this.invoice.realAmount===0){
+              this.$notify({
+                  title: '提示',
+                  message: '实开金额不能为0.00',
+                  type: 'info',
+                  duration: 2000
+                });
+                return;
+            }
+            this.$api.financeInvoice.edit(this.invoice).then(res=>{
+              if (res.code === 200 && res.data){
+                this.$notify({
+                  title: '成功',
+                  message: '操作成功',
+                  type: 'success',
+                  duration: 2000
+                });
+                this.newInvoiceDialog= false;
+                this.getList();
+              }else {
+                this.$notify({
+                  title: '失败',
+                  message: '操作失败',
+                  type: 'error',
+                  duration: 2000
+                });
+              }
+            })
+          })
+        }
+      })
+    },
+    refuseApply(){
+      this.$prompt('请填写拒绝理由,若无可直接点击确认按钮。','提示',{
+                confirmButtonText: '确认',
+                cancelButtonText: '取消',
+                type: "warning",
+      }).then(({value})=>{
+          this.invoice.reason = value;
+          this.invoice.state = '驳回';
+          this.$api.financeInvoice.edit(this.invoice).then(res=>{
+              if (res.code === 200 && res.data){
+                this.$notify({
+                  title: '成功',
+                  message: '操作成功',
+                  type: 'success',
+                  duration: 2000
+                });
+                this.newInvoiceDialog= false;
+                this.getList();
+              }else {
+                this.$notify({
+                  title: '失败',
+                  message: '操作失败',
+                  type: 'error',
+                  duration: 2000
+                });
+              }
+            })
+      })
+    }
+  },
+  
+}
+</script>
+<style lang="scss" scoped>
+ /deep/.doWarehouseClass {
+     border-radius: 10px;
+    }
+</style>

+ 288 - 0
src/views/finance/outWarehouseCheck.vue

@@ -0,0 +1,288 @@
+<template>
+  <div class="app-container">
+    <div class="title-container">
+      <breadcrumb id="breadcrumb-container" class="breadcrumb-container" />
+    </div>
+    <y-page-list-layout :page-list="pageData" :page-para="listQuery" :get-page-list="getList">
+      <template slot="left">
+        <el-input v-model="listQuery.name" placeholder="项目名称" clearable
+          style="margin-left: 20px;width: 270px;float: left;">
+        </el-input>
+        <el-input v-model="listQuery.orderId" placeholder="项目编号" clearable
+          style="margin-left: 20px;width: 200px;float: left;">
+        </el-input>
+        <el-input v-model="listQuery.clientManager" placeholder="客户经理" clearable
+          style="margin-left: 20px;width: 100px;float: left;">
+        </el-input>
+        <el-input v-model="listQuery.principal" placeholder="项目负责人" clearable
+          style="margin-left: 20px;width: 150px;float: left;">
+        </el-input>
+        <el-button class="filter-item" style="margin-left: 10px;float: left;" type="primary" @click="searchList" round>搜索
+        </el-button>
+        <el-button class="filter-item" style="float: left;" round type="success" @click="resetSearch()">重置
+        </el-button>
+      </template>
+      <parentTable  :data="pageData.records" slot="table" style="width: 100%;">
+        <el-table-column label="业务类型" align="center">
+          <template slot-scope="{row}">
+            <span>{{ businessTypeAlias(row.businessType) }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="报告号" align="center" width='200' >
+          <template slot-scope="{row}">
+            <span>{{ row.reportNo }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="当前实收款(¥)" align="center" width='150'>
+          <template slot-scope="{row}">
+            <span>{{ row.xrealAmount }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="收费标准(¥)" align="center" width='120'>
+          <template slot-scope="{row}">
+            <span>{{ row.standardAmount }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="申请原因" align="center" width='150' show-overflow-tooltip>
+          <template slot-scope="{row}">
+            <span>{{ row.remark==null?'-':row.remark}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="申请人" align="center">
+          <template slot-scope="{row}">
+            <span>{{ row.applyName}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="部门审核状态" align="center" width='150'>
+          <template slot-scope="{row}">
+            <span>{{ row.departmentCheckState}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="部门审核人" align="center" width='150'>
+          <template slot-scope="{row}">
+            <span>{{ row.departmentChecker}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="部门审核时间" align="center" width="160">
+          <template slot-scope="{row}">
+            <span>{{ row.departmentCheckTime}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="部门审核意见" align="center" width='150' show-overflow-tooltip>
+          <template slot-scope="{row}">
+            <span>{{ row.departmentReply==null?'-':row.departmentReply}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="财务审核状态" align="center" width='150'>
+          <template slot-scope="{row}">
+            <span>{{ row.financeCheckState}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="财务审核人" align="center" width='150'>
+          <template slot-scope="{row}">
+            <span>{{ row.financeChecker}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="财务审核时间" align="center" width="160">
+          <template slot-scope="{row}">
+            <span>{{ row.financeCheckTime}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="财务审核意见" align="center" width='150' show-overflow-tooltip>
+          <template slot-scope="{row}">
+            <span>{{ row.financeReply==null?'-':row.departmentReply}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column
+        align = "center" fixed="right"  width='120'
+          label="操作">
+          <template slot-scope="{row}">
+            <PermissionButton menu-code="_views_do_out_warehouse_check" class-name="filter-item" type="success"
+              :page-jump="false" round size="mini" @click="doCheck(row.id)" />
+          </template>
+        </el-table-column>
+      </parentTable>
+    </y-page-list-layout>
+    <el-dialog :visible.sync="checkDialog" width="35%" center top="35vh" custom-class="doWarehouseClass">
+      <el-form ref="checkDTO" :model="checkDTO" style="margin-left:40px">
+          <el-row>
+            <el-col :xs="24" :sm="12" :lg="24" :span="12">
+              <el-form-item label="审核结果:" prop="state"   label-width="160px" class="postInfo-container-item"
+              :rules="{required: true, message: '审核结果不能为空', trigger: 'blur'}">
+                    <el-select v-model="checkDTO.state" placeholder="请选择" style="width:300px">
+                      <el-option label="审核通过" value="审核通过" />
+                      <el-option label="审核拒绝" value="审核拒绝" />
+                    </el-select>
+              </el-form-item >
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-col :xs="24" :sm="12" :lg="24" :span="12">
+                <el-form-item label="审核意见:" prop="reply"  label-width="160px" class="postInfo-container-item">
+                    <el-input style="width:300px" type="textarea" v-model="checkDTO.reply"></el-input>
+                </el-form-item>
+            </el-col>
+          </el-row>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="checkDialog = false">取 消</el-button>
+        <el-button type="primary" @click="saveCheck()">确 定</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+<script>
+import YPageListLayout from '@/components/YPageListLayout'
+import Breadcrumb from '@/components/Breadcrumb'
+
+export default {
+  name: 'outWarehouseCheck',
+  components: {
+    Breadcrumb,
+    YPageListLayout,
+  },
+  filters: {
+    
+  },
+  data() {
+    return {
+      pageData: { records: [] },
+      listQuery: {
+        page: 1,
+        size: 10,
+        descs: 'id',
+      },
+      checkDialog:false,
+      checkDTO:{
+        id:null,
+        state:null,
+        reply:null,
+        checkType:0
+      },
+      todoBusinessId:null,
+      taskId:null,
+      nodeCode:null
+      
+    }
+  },
+  created() {
+    this.getList();
+    this.todoBusinessId = this.$route.query.todoBusinessId;
+    this.taskId = this.$route.query.tId;
+    this.currentNodeId = this.$route.query.cId;
+    this.reportNo = this.$route.query.rNo;
+    this.nodeCode = this.$route.query.nCode;
+  },
+  methods: {
+  
+    resetSearch() {
+      this.$router.push({ query: {} });
+      this.listQuery = {
+        current: 1,
+        size: 10,
+        descs: 'id',
+      }
+      this.getList()
+    },
+   
+    searchList() {
+      // 重置分页
+      this.listQuery.page = 1
+      this.listQuery.size = 10
+      this.getList()
+    },
+    getList() {
+      this.$api.productionOutWarehouse.list(Object.assign({}, this.listQuery)).then(res=>{
+        if (res.code ===200){
+            this.pageData = res.data;
+        }
+      })
+    },
+    businessTypeAlias(code){
+      return '大中型'
+    },
+    doCheck(id){
+        this.checkDialog = true;
+        this.checkDTO.id= id;
+    },
+    saveCheck(){
+      if (this.checkDTO.id){
+        this.$refs.checkDTO.validate(valid=>{
+          if (valid){
+            let taskRecordDTO = new Object();
+            if (!this.taskId){
+              this.$notify({
+                    title: '警告',
+                    message: '节点任务未找到,暂时无法审核。请查看“我的待办”列表。',
+                    type: 'warning',
+                    duration: 3000
+                  });
+                  return ;
+            }
+            if (this.nodeCode.indexOf("FINANCE")!=-1){
+                this.checkDTO.checkType = 1;
+            }
+            taskRecordDTO.recordId = this.taskId;
+            taskRecordDTO.taskData = this.checkDTO;
+              this.$api.productionOutWarehouse.edit(taskRecordDTO).then(res=>{
+                if (res.code === 200 && res.data){
+                    this.$notify({
+                      title: '成功',
+                      message: '申请处理成功',
+                      type: 'success',
+                      duration: 2000
+                    });
+                    this.commitNode();
+                    this.getList();
+                    this.checkDialog = false;
+                }else {
+                  this.$notify({
+                    title: '失败',
+                    message: '申请处理失败',
+                    type: 'error',
+                    duration: 2000
+                  });
+                }
+              })
+          }
+        })
+      }
+    },
+    commitNode(){
+      let commit = new Object;
+      commit.instanceNodeId = this.currentNodeId;
+      if (this.checkDTO.state==='审核通过'){
+        commit.state = 'PASS';
+      }
+      else{
+        commit.state = 'REVERSE';
+      }
+      commit.comments = this.checkDTO.reply;
+      commit.businessSubId = this.reportNo;
+      this.$api.workflow.commit(commit).then(res=>{
+        if (res.code === 200 && res.data){
+          this.$notify({
+              title: '成功',
+              message: '工作流节点提交成功。',
+              type: 'success',
+              duration: 2000
+            });
+        }else{
+          this.$notify({
+              title: '失败',
+              message: '工作流节点提交失败,请联系管理员。',
+              type: 'error',
+              duration: 2000
+            });
+        }
+      })
+    }
+  },
+  
+}
+</script>
+<style lang="scss" scoped>
+    /deep/.doWarehouseClass {
+     border-radius: 10px;
+    }
+</style>

+ 5 - 1
src/views/home/index.vue

@@ -22,7 +22,7 @@
         </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
-        <el-button @click="dialogFormVisible = false">暂不修改</el-button>
+        <el-button @click="notChagePsw()">暂不修改</el-button>
         <el-button type="primary" @click="savePass('dialogForm')">修 改</el-button>
       </div>
     </el-dialog>
@@ -168,6 +168,10 @@
         // this.$router.push(`/login?redirect=${this.$route.fullPath}`)
         this.$router.push(`/login`);
       },
+      notChagePsw(){
+        this.dialogFormVisible = false;
+        this.jumpMenu(this.activeItem)
+      }
     }
   }
 </script>

Diff do ficheiro suprimidas por serem muito extensas
+ 2590 - 0
src/views/major/detail.vue


+ 153 - 0
src/views/major/doneList.vue

@@ -0,0 +1,153 @@
+<template>
+  <div class="app-container">
+    <div class="title-container">
+      <breadcrumb id="breadcrumb-container" class="breadcrumb-container" />
+    </div>
+    <y-page-list-layout :page-list="pageData" :page-para="listQuery" :get-page-list="getList">
+      <template slot="left">
+        <el-input v-model="listQuery.name" placeholder="项目名称" clearable
+          style="margin-left: 20px;width: 270px;float: left;">
+        </el-input>
+        <el-input v-model="listQuery.orderId" placeholder="项目编号" clearable
+          style="margin-left: 20px;width: 200px;float: left;">
+        </el-input>
+        <el-input v-model="listQuery.clientManager" placeholder="客户经理" clearable
+          style="margin-left: 20px;width: 100px;float: left;">
+        </el-input>
+        <el-input v-model="listQuery.principal" placeholder="项目负责人" clearable
+          style="margin-left: 20px;width: 150px;float: left;">
+        </el-input>
+        <el-button class="filter-item" style="margin-left: 10px;float: left;" type="primary" @click="searchList" round>搜索
+        </el-button>
+        <el-button class="filter-item" style="float: left;" round type="success" @click="resetSearch()">重置
+        </el-button>
+      </template>
+      <parentTable  :data="pageData.records" slot="table" style="width: 100%;">
+        <el-table-column label="业务类型" align="center">
+          <template slot-scope="{row}">
+            <span>{{ businessTypeAlias(row.businessType) }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="订单名称" align="center" width='300' show-overflow-tooltip >
+          <template slot-scope="{row}">
+            <span>{{ row.majorName }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="订单号" align="center">
+          <template slot-scope="{row}">
+            <span>{{ row.orderId }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="处理人" align="center">
+          <template slot-scope="{row}">
+            <span>{{ row.handler }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="处理节点" align="center">
+          <template slot-scope="{row}">
+            <span>{{ row.nodeName }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="处理时间" align="center">
+          <template slot-scope="{row}">
+            <span>{{ row.finishTime }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="处理时长" align="center">
+          <template slot-scope="{row}">
+            <span>{{ row.handingTime }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="节点状态" align="center">
+          <template slot-scope="{row}">
+            <span>{{ nodeStateAlias(row.state)}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="处理意见" align="center" show-overflow-tooltip>
+          <template slot-scope="{row}">
+            <span>{{ row.comments==null?'-':row.comments}}</span>
+          </template>
+        </el-table-column>
+      </parentTable>
+    </y-page-list-layout>
+  </div>
+</template>
+<script>
+import YPageListLayout from '@/components/YPageListLayout'
+import Breadcrumb from '@/components/Breadcrumb'
+
+export default {
+  name: 'doneList',
+  components: {
+    Breadcrumb,
+    YPageListLayout,
+  },
+  filters: {
+    
+  },
+  data() {
+    return {
+      pageData: { records: [] },
+      listQuery: {
+        page: 1,
+        size: 10,
+        descs: 'id',
+      },
+    }
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+  
+    resetSearch() {
+      this.$router.push({ query: {} });
+      this.listQuery = {
+        current: 1,
+        size: 10,
+        descs: 'id',
+      }
+      this.getList()
+    },
+   
+    searchList() {
+      // 重置分页
+      this.listQuery.page = 1
+      this.listQuery.size = 10
+      this.getList()
+    },
+    getList() {
+      this.$api.workNodeTaskRecord.majorTaskDoneList(Object.assign({}, this.listQuery)).then(res=>{
+        if (res.code ===200){
+            this.pageData = res.data;
+        }
+      })
+    },
+    aliasProductionType(code){
+        if (code === 'STATEMENT'){
+            return '价值意见书';
+        }
+        if (code === 'LETTER'){
+            return '复评函';
+        }
+        return '报告';
+    },
+    businessTypeAlias(code){
+      return '大中型'
+    },
+    nodeStateAlias(code){
+      if (code === 'PASS'){
+          return '提交';
+      }
+      if (code === 'REVERSE'){
+        return '退回';
+      }
+      return '-'
+    }
+  },
+  
+}
+</script>
+<style lang="scss" scoped>
+
+</style>

+ 466 - 0
src/views/major/index.vue

@@ -0,0 +1,466 @@
+<template>
+  <div class="app-container">
+    <y-data-view-page-layout title="市场管理首页" class="staff-admin-index">
+      <y-data-view-module>
+        <div style="width: 1660px">
+          <y-d-v-over-view style="width: 220px" title="本年签约目标" :typeId="1" :ico="require('@/assets/statics/pg8.png')" :data="[{text:marketStaticsInfo.yearSaleTarget,value:'元'}]" @click.native="openSet('本年签约目标')"></y-d-v-over-view>
+          <y-d-v-over-view style="width: 220px" title="本年回款目标" :typeId="2" :ico="require('@/assets/statics/pg8.png')" :data="[{text:marketStaticsInfo.yearPaymentTarget,value:'元'}]" @click.native="openSet('本年回款目标')"></y-d-v-over-view>
+          <y-d-v-over-view style="width: 220px" title="潜在商机" :typeId="3" :ico="require('@/assets/statics/pg8.png')" :data="[{text:marketStaticsInfo.businessNum,value:'个'}]" @click.native="toBusinessPage()"></y-d-v-over-view>
+          <y-d-v-over-view style="width: 220px" title="预计签约金额" :typeId="6" :ico="require('@/assets/statics/pg9.png')" :data="[{text:marketStaticsInfo.estimateAmount,value:'元'}]" @click.native="toBusinessPage()"></y-d-v-over-view>
+          <y-d-v-over-view style="width: 220px" title="本年已签约" :typeId="4" :ico="require('@/assets/statics/pg9.png')" :data="[{text:marketStaticsInfo.yearSaleDone,value:'元'}]" @click.native="toItemPage()"></y-d-v-over-view>
+          <y-d-v-over-view style="width: 220px" title="本年已回款" :typeId="5" :ico="require('@/assets/statics/pg9.png')" :data="[{text:marketStaticsInfo.yearPaymentDone,value:'元'}]" @click.native="toPaymentPage('year')"></y-d-v-over-view>
+          <y-d-v-over-view style="width: 220px" title="本月已回款" :typeId="6" :ico="require('@/assets/statics/pg9.png')" :data="[{text:marketStaticsInfo.monthPaymentDone,value:'元'}]" @click.native="toPaymentPage('month')"></y-d-v-over-view>
+          <el-tooltip class="item" effect="dark" content="当月回款完成率" placement="bottom">
+            <el-progress  style=" margin-left:12px ;width: 91%" :text-inside="true" :stroke-width="24" :percentage=percentage status="success" />
+          </el-tooltip>
+        </div>
+      </y-data-view-module>
+      <div class="calendar-class">
+        <span style="margin-left: 20px">工作台历</span>
+        <el-calendar v-model="value">
+          <div class="cell"
+            slot="dateCell"
+            slot-scope="{date, data}" @click="openDrawer(data)" style="width: 100%;height: 100%">
+            <span :class="data.isSelected ? 'is-selected' : ''" >
+              {{ data.day.split('-').slice(1).join('-') }} {{ data.isSelected ? '✔️' : ''}}
+            </span>
+            <el-icon v-if="checkStar(data.day)"  class="el-icon-star-on" style="color: #ffdf1a;font-size: 30px "/>
+          </div>
+        </el-calendar>
+      </div>
+      <el-drawer
+        :title="title"
+        :before-close="handleClose"
+        :visible.sync="dialog"
+        direction="rtl"
+        custom-class="demo-drawer"
+        ref="drawer"
+      >
+        <div class="demo-drawer__content">
+          <el-form :model="form">
+            <el-col :span="10" style="padding-right: 10px">
+              <y-data-view-module>
+                <el-button type="warning" style="position: absolute;top:20px;right:60px;font-weight: bolder;cursor: pointer" @click="dialogVisible = true" >添加内容</el-button>
+                <div class="plan-class">
+                  <div style="width: 530px;display: flex " v-for="(item,index) in dynamicTags">
+                    <span style="display:inline-block;width:500px;word-break: break-all; white-space:normal;margin: 10px 10px 10px 10px;line-height: 25px;">
+                      {{ index+1 }}、{{ item.content }}
+                    </span>
+                    <el-icon class="el-icon-edit-outline" style="color: red;cursor:pointer; margin-left: 5px" @click.native="editNote(item)"/>
+                    <el-icon class="el-icon-circle-close" style="color: red;cursor:pointer; margin-left: 5px" @click.native="deltag(item.id)"/>
+                  </div>
+                  <span v-if="dynamicTags.length<8 & dynamicTags.length!=0" style="display:inline-block;width:530px;height:400px;word-break: break-all; white-space:normal;margin: 10px 10px 10px 10px;line-height: 25px;" >
+                  </span>
+                  <div class="plan-class" v-if="dynamicTags.length===0">
+                    <span style="display:inline-block;width:530px;height:500px;word-break: break-all; white-space:normal;margin: 10px 10px 10px 10px;line-height: 25px;">
+                    </span>
+                  </div>
+                </div>
+              </y-data-view-module>
+              <el-dialog
+                title="便签内容"
+                :visible.sync="dialogVisible"
+                width="30%"
+                custom-class="tag-class"
+              >
+                <el-input
+                  type="textarea"
+                  :rows="2"
+                  placeholder="请输入内容"
+                  v-model="textareadata"
+                />
+                <span slot="footer" class="dialog-footer">
+                  <el-button @click="dialogVisible = false">取 消</el-button>
+                  <el-button type="primary" @click="addtag">确 定</el-button>
+                </span>
+              </el-dialog>
+            </el-col>
+          </el-form>
+        </div>
+      </el-drawer>
+      <el-dialog
+        :title="setName"
+        width="600px"
+        :visible.sync="setDialogFormVisible"
+        :close-on-click-modal="false"
+      >
+        <template>
+          <el-table
+            :data="tableData"
+            border
+            style="width: 100%">
+            <el-table-column
+              prop="date"
+              label="姓名"
+              align="center"
+              width="280px">
+              <template slot-scope="{row}">
+                <span>{{ row.userName }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column v-if="setName==='本年签约目标' "
+              prop="name"
+              label="签约目标"
+              align="center"
+              width="278px">
+              <template slot-scope="{row}">
+                <span>{{ row.saleTarget }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column v-if="setName==='本年回款目标' "
+              prop="name"
+              label="回款目标"
+              align="center"
+              width="278px">
+              <template slot-scope="{row}">
+                <span>{{ row.paymentTarget }}</span>
+              </template>
+            </el-table-column>
+          </el-table>
+        </template>
+        <br>
+        <el-form
+          ref="setForm"
+          :model="temp"
+          label-position="right"
+          label-width="110px"
+          style="width: 400px; margin-left:50px;"
+        >
+          <el-form-item label="我的目标:" prop="amount">
+            <el-input v-model.number="temp.amount" class="filter-item" type="number"/>
+          </el-form-item>
+          <el-form-item label="">
+            <el-button @click="setDialogFormVisible = false">
+              取消
+            </el-button>
+            <el-button type="primary" @click="saveSet()">
+              保存
+            </el-button>
+          </el-form-item>
+        </el-form>
+      </el-dialog>
+    </y-data-view-page-layout>
+  </div>
+</template>
+<script>
+  import YDVOverView from '@/components/YDataViewPageLayout/YDVOverView'
+  import YDataViewModule from '@/components/YDataViewPageLayout/YDataViewModule'
+  import YDataViewPageLayout from '@/components/YDataViewPageLayout'
+
+  export default {
+    name: 'logIndex',
+    components: {
+      YDVOverView,
+      YDataViewModule,
+      YDataViewPageLayout
+    },
+    data() {
+      return {
+        value: new Date(),
+        marketStaticsInfo:{},
+        table: false,
+        dialog: false,
+        loading: false,
+        form: {
+          name: '',
+          region: '',
+          date1: '',
+          date2: '',
+          delivery: false,
+          type: [],
+          resource: '',
+          desc: ''
+        },
+        formLabelWidth: '80px',
+        timer: null,
+        currentDate:'',
+        editId:'',
+        textareadata:'',
+        dialogVisible:false,
+        dynamicTags: [],
+        calandarList:[],
+        setDialogFormVisible:false,
+        temp:{
+          saleTarget:null,
+          paymentTarget:null,
+          amount:null
+        },
+        setName:'',
+        tableData:[],
+        noteId:null,
+      }
+    },
+    created() {
+      this.getCanlendarList();
+      this.getMarketStat();
+      
+    },
+    computed:{
+      title(){
+        return this.currentDate +" 工作计划";
+      },
+      percentage(){
+          const date = new Date();
+        const month = date.getMonth() + 1;
+        const target = this.marketStaticsInfo.yearPaymentTarget;
+        const paymentDone = this.marketStaticsInfo.yearPaymentDone;
+        const currentTarget = target/10 * month===0?1:target/10 * month;
+        const percent = Math.round((paymentDone/currentTarget) * 100)
+        if (!isNaN(percent)){
+          return Math.round((paymentDone/currentTarget) * 100);
+        }
+      }
+    },
+    methods: {
+      editNote(item){
+        this.dialogVisible = true;
+        this.textareadata = item.content;
+        this.noteId = item.id;
+      },
+      toItemPage(){
+        this.$router.push(`/item/list/mine?isCurYear=true`);
+      },
+      toBusinessPage() {
+        this.$router.push(`/market/business`)
+      },
+      toPaymentPage(val) {
+        const date = new Date();
+        if (val === 'year'){
+          this.$router.push(`/market/payment/list?isCurYear=true`)
+        }
+        if (val === 'month'){
+          this.$router.push(`/market/payment/list?isCurMonth=true`)
+        }
+      },
+      saveSet(){
+        if (isNaN(this.temp.amount) || this.temp.amount===null){
+          this.$notify({
+            title: '失败',
+            message: '请输入数字',
+            type: 'error',
+            duration: 2000
+          });
+          return
+        }
+        if (this.setName === '本年签约目标'){
+          this.temp.saleTarget = this.temp.amount;
+        }
+        if (this.setName === '本年回款目标'){
+          this.temp.paymentTarget = this.temp.amount;
+        }
+        let data = {
+          saleTarget:this.temp.saleTarget,
+          paymentTarget:this.temp.paymentTarget
+        };
+        this.$api.userTarget.add(data).then(data => {
+            if (data.code === 200) {
+              this.setDialogFormVisible = false;
+              this.$notify({
+                title: '成功',
+                message: '修改成功',
+                type: 'success',
+                duration: 2000
+              });
+              this.getMarketStat();
+          }else{
+            this.$message.success(data.msg)
+          }
+        })
+      },
+      openSet(key){
+        this.$api.userTarget.list().then(data=>{
+          if (data.code ===200){
+            this.tableData = data.data
+          }else{
+            this.$message.success(data.msg)
+          }
+        });
+        this.temp.amount = null;
+        this.setName = key;
+        this.setDialogFormVisible = true;
+      },
+      getCanlendarList(){
+
+        let userId = this.$store.getters.userInfo.id;
+
+        this.$api.note.countByDate(userId).then(data => {
+          if (data.code ===200){
+            this.calandarList = data.data
+          }else{
+            this.$message.success(data.msg)
+          }
+
+        })
+      },
+      checkStar(day){
+        this.flag = false;
+        for(let item of this.calandarList){
+          if (item.noteDate === day){
+            this.flag = true;
+          }
+        }
+        return this.flag;
+      },
+      addtag(){
+        let data = {
+          noteDate:this.currentDate,
+          content:this.textareadata,
+          userId: this.$store.getters.userInfo.id,
+          id:this.noteId
+        };
+        if(data.id){
+          this.$api.note.edit(data).then(data => {
+            if (data.code ===200){
+              this.$message.success('修改成功');
+              this.dialogVisible=false
+              this.textareadata = '';
+              this.tagdata();
+              this.editId = '';
+              this.getCanlendarList();
+            }else{
+              this.$message.success(data.msg)
+            }
+            this.noteId = null;
+          })
+        }else{
+          this.$api.note.add(data).then(data => {
+            if (data.code ===200){
+              this.$message.success('保存成功');
+              this.dialogVisible=false;
+              this.textareadata = '';
+              this.tagdata();
+              this.editId = '';
+              this.getCanlendarList();
+            }else{
+              this.$message.success(data.msg)
+            }
+
+          })
+        }
+      },
+      tagdata(){
+        let data = {
+          noteDate:this.currentDate,
+          userId: this.$store.getters.userInfo.id
+        }
+        this.$api.note.listByDate(data).then(data => {
+          if (data.code ===200){
+            this.dynamicTags = data.data
+          }else{
+            this.$message.success(data.msg)
+          }
+
+        })
+      },
+      deltag(val){
+        this.$api.note.delete(val).then(data => {
+          if (data.code ===200){
+            this.$message.success('删除成功')
+            this.tagdata()
+            this.getCanlendarList();
+          }else{
+            this.$message.success(data.msg)
+          }
+
+        })
+      },
+      handleClose(done) {
+        if (this.loading) {
+          return;
+        }
+          done();
+          // 动画关闭需要一定的时间
+          setTimeout(() => {
+            this.loading = false;
+          }, 400);
+      },
+      cancelForm() {
+        this.loading = false;
+        this.dialog = false;
+        clearTimeout(this.timer);
+      },
+      openDrawer(date){
+        this.dialog = true
+        this.currentDate = date.day;
+        this.tagdata();
+      },
+      getMarketStat(){
+        this.$api.marketStat.getMarketStat().then(res => {
+          if (res.code === 200){
+            this.marketStaticsInfo = res.data;
+          }
+        });
+      },
+    }
+    }
+</script>
+<style lang="css" scoped>
+
+  .calendar-class{
+    margin-left: 20px;
+    height: 500px;
+  }
+  .plan-class{
+    /*width: 540px;*/
+    /*border: 1px solid darkgray;*/
+    /*box-shadow: 10px 10px 5px #888888;;*/
+    /*border-radius: 10px;*/
+    /*overflow: auto;*/
+    width: 540px;
+    -moz-box-shadow: 0 2px 10px 1px rgba(0, 0, 0, 0.2);
+    -webkit-box-shadow: 0 2px 10px 1px rgba(0, 0, 0, 0.2);
+    box-shadow: 0 2px 10px 1px rgba(0, 0, 0, 0.2);
+    background:
+      -moz-repeating-linear-gradient(
+        top,
+        #fcf59b,
+        #fcf59b 29px,
+        #81cbbc 30px
+      );
+
+    background:
+      -webkit-gradient(
+        linear,
+        left top, left bottom,
+        from(#81cbbc),
+        color-stop(2%, #fcf59b)
+      );
+
+    background:
+      repeating-linear-gradient(
+        top,
+        #fcf59b,
+        #fcf59b 29px,
+        #81cbbc 30px
+      );
+
+    -webkit-background-size: 100% 30px;
+  }
+  .plan-class:after {
+    width: 180px;
+    height: 30px;
+    content: " ";
+    margin-left: -90px;
+    border: 1px solid rgba(200, 200, 200, .8);
+    background: rgba(254, 254, 254, .6);
+
+    -moz-box-shadow: 0px 0 3px rgba(0, 0, 0, 0.1);
+    -webkit-box-shadow: 0px 0 3px rgba(0, 0, 0, 0.1);
+    box-shadow: 0px 0 3px rgba(0, 0, 0, 0.1);
+
+    -moz-transform: rotate(-5deg);
+    -webkit-transform: rotate(-5deg);
+    -o-transform: rotate(-5deg);
+    transform: rotate(-5deg);
+
+    position: absolute;
+    left: 50%;
+    top: 95px;
+  }
+  /deep/.tag-class{
+    border-radius: 20px;
+  }
+  div.cell{
+    float: right;
+  }
+</style>

+ 303 - 0
src/views/major/list.vue

@@ -0,0 +1,303 @@
+<template>
+  <div class="app-container">
+    <div class="title-container">
+      <breadcrumb id="breadcrumb-container" class="breadcrumb-container" />
+    </div>
+    <y-page-list-layout :page-list="pageData" :page-para="listQuery" :get-page-list="getList">
+      <template slot="left">
+        <el-input v-model="listQuery.name" placeholder="项目名称" clearable
+          style="margin-left: 20px;width: 270px;float: left;">
+        </el-input>
+        <el-input v-model="listQuery.orderId" placeholder="项目编号" clearable
+          style="margin-left: 20px;width: 200px;float: left;">
+        </el-input>
+        <el-input v-model="listQuery.clientManager" placeholder="客户经理" clearable
+          style="margin-left: 20px;width: 100px;float: left;">
+        </el-input>
+        <el-input v-model="listQuery.principal" placeholder="项目负责人" clearable
+          style="margin-left: 20px;width: 150px;float: left;">
+        </el-input>
+        <el-button class="filter-item" style="margin-left: 10px;float: left;" type="primary" @click="searchList" round>搜索
+        </el-button>
+        <el-button class="filter-item" style="float: left;" round type="success" @click="resetSearch()">重置
+        </el-button>
+      </template>
+      <parentTable ref="table" v-loading="listLoading" :data="pageData.records" slot="table" style="width: 100%;" @expandRow=expandRow >
+        <el-table-column type="expand" style="margin-left:100px">
+          <template slot-scope="{row}">
+            <parentTable style="font-size: 14px;color: #8c939d" v-loading="listLoading" inline :data="row.productions">
+              <el-table-column align="center" width="100">
+              </el-table-column>
+              <el-table-column label="项目名称" align="center" show-overflow-tooltip>
+                <template slot-scope="{row}">
+                  <span>{{ row.name }}</span>
+                </template>
+              </el-table-column>
+              <el-table-column label="报告号" align="center" width="300">
+                <template slot-scope="{row}">
+                  <span>{{ row.reportNo }}</span>
+                </template>
+              </el-table-column>
+              <!-- <el-table-column label="产品类型" align="center">
+                <template slot-scope="{row}">
+                  <span>{{ aliasProductionType(row.production)}}</span>
+                </template>
+              </el-table-column> -->
+              <el-table-column label="委托方" align="center" width="150" show-overflow-tooltip>
+                <template slot-scope="{row}">
+                  <span>{{ row.clientName}}</span>
+                </template>
+              </el-table-column>
+              <el-table-column label="委托方电话" align="center" width="150">
+                <template slot-scope="{row}">
+                  <span>{{ row.clientTel}}</span>
+                </template>
+              </el-table-column>
+              <el-table-column label="评估面积(m²)" align="center" width="120">
+                <template slot-scope="{row}">
+                  <span>{{ row.evaluateAcreage }}</span>
+                </template>
+              </el-table-column>
+              <el-table-column label="评估总价(W)" align="center" width="120">
+                <template slot-scope="{row}">
+                  <span>{{ row.evaluateAmount }}</span>
+                </template>
+              </el-table-column>
+              <!-- <el-table-column label="库存状态" align="center">
+                <template slot-scope="{row}">
+                  <span>{{ row.repertoryState===null?'未入库':(row.repertoryState?'已出库':'已入库') }}</span>
+                </template>
+              </el-table-column> -->
+              <el-table-column label="当前节点" align="center" width="130">
+                <template slot-scope="{row}">
+                  <span>{{ row.ifSaveFile?'已结束':row.currentNodeName }}</span>
+                </template>
+              </el-table-column>
+              <el-table-column label="实收款" align="center" width="130">
+                <template slot-scope="{row}">
+                  <span>{{ row.realAmount }}</span>
+                </template>
+              </el-table-column>
+              <el-table-column label="是否归档" align="center" width="100">
+                <template slot-scope="{row}">
+                  <span>{{ row.ifSaveFile?'是':'否' }}</span>
+                </template>
+              </el-table-column>
+              <el-table-column label="操作" align="center" width="80" fixed="right">
+                <template slot-scope="{row}">
+                  <el-button round type="primary" @click="reportDetail(row)">详情</el-button>
+                </template>
+              </el-table-column>
+            </parentTable>
+          </template>
+        </el-table-column>
+        <el-table-column label="订单名称" align="center" width="300" show-overflow-tooltip >
+          <template slot-scope="{row}">
+            <span>{{ row.name }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="订单号" align="center" width="150">
+          <template slot-scope="{row}">
+            <span>{{ row.orderId }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="金融类型" align="center" width="130">
+          <template slot-scope="{row}">
+            <span>{{ row.financial?'金融':'非金融' }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="分单类型" align="center">
+          <template slot-scope="{row}">
+            <span>{{ row.allotType }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="客户经理" align="center">
+          <template slot-scope="{row}">
+            <span>{{ row.clientManager }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="负责人" align="center">
+          <template slot-scope="{row}">
+            <span>{{ row.principal }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="接单部门" align="center" width="130">
+          <template slot-scope="{row}">
+            <span>{{ row.departmentName }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="评估对象类型" align="center" width="130">
+          <template slot-scope="{row}">
+            <span>{{ row.businessObjectType }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="客户名称" align="center" width="130">
+          <template slot-scope="{row}">
+            <span>{{ row.cclienteleName }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="业务来源" align="center" width="130">
+          <template slot-scope="{row}">
+            <span>{{ row.cclienteleSubName }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="客户联系人" align="center" width="130">
+          <template slot-scope="{row}">
+            <span>{{ row.cclienteleContactName }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="客户联系人电话" align="center" width="130">
+          <template slot-scope="{row}">
+            {{ row.cmobile }}
+          </template>
+        </el-table-column>
+        <el-table-column label="下单时间" align="center" width="130">
+          <template slot-scope="{row}">
+            {{ row.created }}
+          </template>
+        </el-table-column>
+        <el-table-column label="操作" align="center" width="80" fixed="right">
+          <template slot-scope="{row}">
+            <el-button round type="primary" @click="orderDetail(row)">详情</el-button>
+          </template>
+        </el-table-column>
+      </parentTable>
+    </y-page-list-layout>
+  </div>
+</template>
+<script>
+import YPageListLayout from '@/components/YPageListLayout'
+import Breadcrumb from '@/components/Breadcrumb'
+import PermissionButton from '@/components/PermissionButton/PermissionButton'
+
+export default {
+  name: 'MajorList',
+  components: {
+    Breadcrumb,
+    YPageListLayout,
+    PermissionButton,
+  },
+  filters: {
+    
+  },
+  data() {
+    return {
+      pageData: { records: [] },
+      listLoading: false,
+      listQuery: {
+        page: 1,
+        size: 10,
+        descs: 'id',
+      },
+    }
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+  
+    resetSearch() {
+      this.$router.push({ query: {} });
+      this.listQuery = {
+        current: 1,
+        size: 10,
+        descs: 'id',
+      }
+      this.getList()
+    },
+   
+    removeHandle(row) {
+      // console.log(data)
+      const that = this
+      that
+        .$confirm('确认删除当前记录吗?', '警告', {
+          confirmButtonText: '确认',
+          cancelButtonText: '取消',
+          type: 'warning',
+        })
+        .then(async () => {
+          this.$api.term.delete(row.id).then((res) => {
+            if (res.code === 200) {
+              this.$message({
+                type: 'success',
+                message: '删除成功',
+              })
+              this.getList()
+            }
+          })
+        })
+        .catch((err) => {
+          console.error(err)
+        })
+    },
+    searchList() {
+      // 重置分页
+      this.listQuery.page = 1
+      this.listQuery.size = 10
+      this.getList()
+    },
+    getList() {
+      this.$api.major.list(this.listQuery).then(res=>{
+        if (res.code ===200){
+            this.pageData = res.data;
+        }
+      })
+    },
+    deleteInfo(id) {
+      const that = this
+      that.$confirm('请确认是否删除该数据?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning',
+        center: true
+      }).then(() => {
+        that.$api.item.delete(id).then(data => {
+          that.loading = false
+          if (data.code === 200) {
+            that.getList()
+          } else {
+            this.$message({
+              type: 'error',
+              message: data.msg
+            })
+          }
+        })
+      }).catch(() => {
+      })
+    },
+    
+    reportDetail(row){
+      let reportNo = row.reportNo;
+      let name = row.name;
+      if (reportNo && name){
+        this.$router.push(`/major/detail?id=${row.majorId}&couldEdit=${false}&reportNo=${reportNo}&currentNodeId=${row.currentNodeId}&back=${'/major/list'}`)
+      }else if(reportNo && !name){
+        this.$router.push(`/major/detail?id=${row.majorId}&couldEdit=${false}&currentNodeId=${row.currentNodeId}&back=${'/major/list'}`)
+      }
+    },
+    orderDetail(row){
+      if (row.productions.length>0){
+        this.$refs.table.expandRow(row);
+      }else {
+        this.$router.push(`/major/detail?id=${row.id}&couldEdit=${false}&currentNodeId=${row.currentNodeId}&back=${'/major/list'}`)
+      }
+    },
+    expandRow(row){
+        //console.log(row)
+    },
+    aliasProductionType(code){
+        if (code === 'STATEMENT'){
+            return '价值意见书';
+        }
+        if (code === 'LETTER'){
+            return '复评函';
+        }
+        return '报告';
+    },
+  },
+  
+}
+</script>
+<style lang="scss" scoped>
+
+</style>

Diff do ficheiro suprimidas por serem muito extensas
+ 1174 - 0
src/views/major/myOrder.vue


Diff do ficheiro suprimidas por serem muito extensas
+ 1023 - 0
src/views/major/myOrderDetail.vue


+ 137 - 0
src/views/major/productionIn.vue

@@ -0,0 +1,137 @@
+<template>
+  <div class="app-container">
+    <div class="title-container">
+      <breadcrumb id="breadcrumb-container" class="breadcrumb-container" />
+    </div>
+    <y-page-list-layout :page-list="pageData" :page-para="listQuery" :get-page-list="getList">
+      <template slot="left">
+        <el-input v-model="listQuery.name" placeholder="项目名称" clearable
+          style="margin-left: 20px;width: 270px;float: left;">
+        </el-input>
+        <el-input v-model="listQuery.orderId" placeholder="项目编号" clearable
+          style="margin-left: 20px;width: 200px;float: left;">
+        </el-input>
+        <el-input v-model="listQuery.clientManager" placeholder="客户经理" clearable
+          style="margin-left: 20px;width: 100px;float: left;">
+        </el-input>
+        <el-input v-model="listQuery.principal" placeholder="项目负责人" clearable
+          style="margin-left: 20px;width: 150px;float: left;">
+        </el-input>
+        <el-button class="filter-item" style="margin-left: 10px;float: left;" type="primary" @click="searchList" round>搜索
+        </el-button>
+        <el-button class="filter-item" style="float: left;" round type="success" @click="resetSearch()">重置
+        </el-button>
+      </template>
+      <parentTable  :data="pageData.records" slot="table" style="width: 100%;">
+        <el-table-column label="产品报告号" align="center" width='300' >
+          <template slot-scope="{row}">
+            <span>{{ row.reportNo }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="产品类型" align="center" width='120'  >
+          <template slot-scope="{row}">
+            <span>{{ aliasProductionType(row.production) }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="负责人" align="center" width='120'>
+          <template slot-scope="{row}">
+            <span>{{ row.principal }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="项目名称" align="center" width='300' show-overflow-tooltip>
+          <template slot-scope="{row}">
+            <span>{{ row.name }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="评估总价(万元)" align="center">
+          <template slot-scope="{row}">
+            <span>{{ row.evaluateAmount/10000 }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="委托方名称" align="center">
+          <template slot-scope="{row}">
+            <span>{{ row.clientName }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="库存状态" align="center">
+          <template slot-scope="{row}">
+            <span>{{ row.repertoryState==null?'未入库':(row.repertoryState == false?'已入库':'已出库')}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="入库时间" align="center">
+          <template slot-scope="{row}">
+            <span>{{ row.repertoryInTime}}</span>
+          </template>
+        </el-table-column>
+      </parentTable>
+    </y-page-list-layout>
+  </div>
+</template>
+<script>
+import YPageListLayout from '@/components/YPageListLayout'
+import Breadcrumb from '@/components/Breadcrumb'
+
+
+export default {
+  name: 'productionIn',
+  components: {
+    Breadcrumb,
+    YPageListLayout
+  },
+  filters: {
+    
+  },
+  data() {
+    return {
+      pageData: { records: [] },
+      listQuery: {
+        page: 1,
+        size: 10,
+        descs: 'id',
+      },
+    }
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+  
+    resetSearch() {
+      this.$router.push({ query: {} });
+      this.listQuery = {
+        current: 1,
+        size: 10,
+        descs: 'id',
+      }
+      this.getList()
+    },
+   
+    searchList() {
+      // 重置分页
+      this.listQuery.page = 1
+      this.listQuery.size = 10
+      this.getList()
+    },
+    getList() {
+      this.$api.majorProduction.house(Object.assign({}, this.listQuery)).then(res=>{
+        if (res.code ===200){
+            this.pageData = res.data;
+        }
+      })
+    },
+    aliasProductionType(code){
+        if (code === 'STATEMENT'){
+            return '价值意见书';
+        }
+        if (code === 'LETTER'){
+            return '复评函';
+        }
+        return '报告';
+    },
+  },
+  
+}
+</script>
+<style lang="scss" scoped>
+
+</style>

+ 155 - 0
src/views/major/saveFileDoneList.vue

@@ -0,0 +1,155 @@
+<template>
+  <div class="app-container">
+    <div class="title-container">
+      <breadcrumb id="breadcrumb-container" class="breadcrumb-container" />
+    </div>
+    <y-page-list-layout :page-list="pageData" :page-para="listQuery" :get-page-list="getList">
+      <template slot="left">
+        <el-input v-model="listQuery.name" placeholder="项目名称" clearable
+          style="margin-left: 20px;width: 270px;float: left;">
+        </el-input>
+        <el-input v-model="listQuery.orderId" placeholder="项目编号" clearable
+          style="margin-left: 20px;width: 200px;float: left;">
+        </el-input>
+        <el-input v-model="listQuery.clientManager" placeholder="客户经理" clearable
+          style="margin-left: 20px;width: 100px;float: left;">
+        </el-input>
+        <el-input v-model="listQuery.principal" placeholder="项目负责人" clearable
+          style="margin-left: 20px;width: 150px;float: left;">
+        </el-input>
+        <el-button class="filter-item" style="margin-left: 10px;float: left;" type="primary" @click="searchList" round>搜索
+        </el-button>
+        <el-button class="filter-item" style="float: left;" round type="success" @click="resetSearch()">重置
+        </el-button>
+      </template>
+      <parentTable  :data="pageData.records" slot="table" style="width: 100%;">
+        <el-table-column label="订单名称" align="center" width="200" show-overflow-tooltip >
+          <template slot-scope="{row}">
+            <span>{{ row.orderName }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="订单号" align="center" width="200" show-overflow-tooltip>
+          <template slot-scope="{row}">
+            <span>{{ row.orderId }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="报告号" align="center" width="200">
+          <template slot-scope="{row}">
+            <span>{{ row.reportNo==null?'-':row.reportNo}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="项目名称" align="center" width="200" show-overflow-tooltip>
+          <template slot-scope="{row}">
+            <span>{{ row.name}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="产品类型" align="center" width="130">
+          <template slot-scope="{row}">
+            <span>{{ aliasProductionType(row.production)}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="库存状态" align="center" width="130">
+          <template slot-scope="{row}">
+            <span>{{ row.repertoryState==null?'未入库':(row.repertoryState?'已出库':'未出库')}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="实收款(¥)" align="center" width=100>
+          <template slot-scope="{row}">
+            <span>{{ row.realAmount}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="客户经理" align="center" >
+          <template slot-scope="{row}">
+            <span>{{ row.clientManager }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="负责人" align="center" >
+          <template slot-scope="{row}">
+            <span>{{ row.principal }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="归档日期" align="center" width="160">
+          <template slot-scope="{row}">
+            <span>{{ row.saveFileDate }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="操作" align="center" width="130">
+          <template slot-scope="{row}">
+            <el-button type="danger" round @click="toDetail(row)">产品详情</el-button>
+          </template>
+        </el-table-column>
+      </parentTable>
+    </y-page-list-layout>
+  </div>
+</template>
+<script>
+import YPageListLayout from '@/components/YPageListLayout'
+import Breadcrumb from '@/components/Breadcrumb'
+
+export default {
+  name: 'saveFileDoneList',
+  components: {
+    Breadcrumb,
+    YPageListLayout,
+  },
+  filters: {
+    
+  },
+  data() {
+    return {
+      pageData: { records: [] },
+      listQuery: {
+        page: 1,
+        size: 10,
+        descs: 'id',
+      },
+    }
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+  
+    resetSearch() {
+      this.$router.push({ query: {} });
+      this.listQuery = {
+        current: 1,
+        size: 10,
+        descs: 'id',
+      }
+      this.getList()
+    },
+   
+    searchList() {
+      // 重置分页
+      this.listQuery.page = 1
+      this.listQuery.size = 10
+      this.getList()
+    },
+    getList() {
+      this.$api.majorProduction.saveDone(this.listQuery).then(res=>{
+        if (res.code ===200){
+            this.pageData = res.data;
+        }
+      })
+    },
+   
+    toDetail(row){
+      this.$router.push(`/major/detail?id=${row.majorId}&couldEdit=${false}&reportNo=${row.reportNo}&currentNodeId=${row.currentNodeId}&back=${'/major/saveFileDone'}`)
+    },
+    aliasProductionType(code){
+        if (code === 'STATEMENT'){
+            return '价值意见书';
+        }
+        if (code === 'LETTER'){
+            return '复评函';
+        }
+        return '报告';
+    }
+  },
+  
+}
+</script>
+<style lang="scss" scoped>
+
+</style>

+ 226 - 0
src/views/major/saveFileTodoList.vue

@@ -0,0 +1,226 @@
+<template>
+  <div class="app-container">
+    <div class="title-container">
+      <breadcrumb id="breadcrumb-container" class="breadcrumb-container" />
+    </div>
+    <y-page-list-layout :page-list="pageData" :page-para="listQuery" :get-page-list="getList">
+      <template slot="left">
+        <el-input v-model="listQuery.name" placeholder="项目名称" clearable
+          style="margin-left: 20px;width: 270px;float: left;">
+        </el-input>
+        <el-input v-model="listQuery.orderId" placeholder="项目编号" clearable
+          style="margin-left: 20px;width: 200px;float: left;">
+        </el-input>
+        <el-input v-model="listQuery.clientManager" placeholder="客户经理" clearable
+          style="margin-left: 20px;width: 100px;float: left;">
+        </el-input>
+        <el-input v-model="listQuery.principal" placeholder="项目负责人" clearable
+          style="margin-left: 20px;width: 150px;float: left;">
+        </el-input>
+        <el-button class="filter-item" style="margin-left: 10px;float: left;" type="primary" @click="searchList" round>搜索
+        </el-button>
+        <el-button class="filter-item" style="float: left;" round type="success" @click="resetSearch()">重置
+        </el-button>
+        <el-tooltip class="item" effect="light" content="请先勾选需归档的报告" placement="top-start">
+          <PermissionButton menu-code="_views_major_batch_save_file" class-name="filter-item" type="danger" icon="el-icon-paperclip"
+            :page-jump="false" round style="float: left" @click="saveFileDialog = true"  :disabled="(!saveFileProduction.length>0)" />
+        </el-tooltip>
+      </template>
+      <parentTable v-loading="listLoading" :data="pageData.records" slot="table" style="width: 100%;" :selectionChange="selectionProductionChange">
+        <el-table-column
+          align="center"
+          type="selection"
+          saveFileProduction
+          width="100" border="true">
+        </el-table-column>
+        <el-table-column label="订单名称" align="center" width="200" show-overflow-tooltip >
+          <template slot-scope="{row}">
+            <span>{{ row.orderName }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="订单号" align="center"  width="200" >
+          <template slot-scope="{row}">
+            <span>{{ row.orderId }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="项目名称" align="center"  width="200" show-overflow-tooltip>
+          <template slot-scope="{row}">
+            <span>{{ row.name }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="报告号" align="center" width="200">
+          <template slot-scope="{row}">
+            <span>{{ row.businessSubId }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="产品类型" align="center">
+          <template slot-scope="{row}">
+            <span>{{ aliasProductionType(row.production)}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="库存状态" align="center">
+          <template slot-scope="{row}">
+            <span>{{ row.repertoryState===null?'未入库':(row.repertoryState?'已出库':'已入库') }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="是否归档" align="center">
+          <template slot-scope="{row}">
+            <span>{{ row.ifSaveFile?'是':'否' }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="实收款(¥)" align="center" width=100>
+          <template slot-scope="{row}">
+            <span>{{ row.realAmount}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="客户经理" align="center">
+          <template slot-scope="{row}">
+            <span>{{ row.clientManager }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="负责人" align="center">
+          <template slot-scope="{row}">
+            <span>{{ row.principal }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="接单部门" align="center" >
+          <template slot-scope="{row}">
+            <span>{{ row.departmentName }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="下单日期" align="center" width=150>
+          <template slot-scope="{row}">
+            {{ row.created }}
+          </template>
+        </el-table-column>
+      </parentTable>
+    </y-page-list-layout>
+    <el-dialog :visible.sync="saveFileDialog" width="55%" center  custom-class="doWarehouseClass">
+        <el-result icon="warning" subTitle="请确认将以下报告进行归档操作?"></el-result>
+        <div style="width:100%;text-align:center;">
+            <el-tag v-for="(p,productionId) in saveFileProduction"   style="font-size:18px;" type="success" effect="plain" :key="p.businessSubId"> 
+              {{p.businessSubId}}</el-tag>
+        </div>
+        <div style="width:100%;text-align:center;margin-top:20px">
+          <el-button type="success" @click="batchSaveFile()">确认归档</el-button>
+        </div>
+    </el-dialog>
+  </div>
+</template>
+<script>
+import YPageListLayout from '@/components/YPageListLayout'
+import Breadcrumb from '@/components/Breadcrumb'
+import PermissionButton from '@/components/PermissionButton/PermissionButton'
+
+export default {
+  name: 'MajorList',
+  components: {
+    Breadcrumb,
+    YPageListLayout,
+    PermissionButton,
+  },
+  filters: {
+    
+  },
+  data() {
+    return {
+      pageData: { records: [] },
+      listLoading: false,
+      listQuery: {
+        page: 1,
+        size: 10,
+        descs: 'id',
+      },
+      saveFileProduction:[],
+      saveFileDialog:false
+    }
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+  
+    resetSearch() {
+      this.$router.push({ query: {} });
+      this.listQuery = {
+        current: 1,
+        size: 10,
+        descs: 'id',
+      }
+      this.getList()
+    },
+   
+    searchList() {
+      // 重置分页
+      this.listQuery.page = 1
+      this.listQuery.size = 10
+      this.getList()
+    },
+    getList() {
+      this.$api.majorProduction.saveFileTodo(this.listQuery).then(res=>{
+        if (res.code ===200){
+            this.pageData = res.data;
+        }
+      })
+    },
+    
+    aliasProductionType(code){
+        if (code === 'STATEMENT'){
+            return '价值意见书';
+        }
+        if (code === 'LETTER'){
+            return '复评函';
+        }
+        return '报告';
+    },
+    selectionProductionChange(val){
+      let pickeds = [];
+        for (let i in val){
+          let picked = new Object();
+          picked.taskId = val[i].taskId;
+          picked.currentNodeId = val[i].currentNodeId;
+          picked.businessId = val[i].businessId;
+          picked.businessSubId = val[i].businessSubId;
+          picked.state = "PASS";
+          picked.productionId = val[i].productionId;
+          picked.orderId = val[i].orderId;
+          picked.name = val[i].name;
+          picked.taskCreated = val[i].taskCreated;
+          pickeds.push(picked);
+        }
+        this.saveFileProduction = pickeds;
+
+    },
+    batchSaveFile(){
+      if (this.saveFileProduction.length>0){
+          this.$api.majorProduction.batchSaveFile(this.saveFileProduction).then(res=>{
+            if (res.code ===200 && res.data){
+              this.$notify({
+                title: '成功',
+                message: '归档成功',
+                type: 'success',
+                duration: 2000
+              });
+              this.saveFileDialog = false;
+              this.getList();
+            }else {
+              this.$notify({
+                title: '失败',
+                message: '归档失败,请联系系统管理员。',
+                type: 'error',
+                duration: 2000
+              });
+            }
+          })
+      }
+    }
+
+  },
+  
+}
+</script>
+<style lang="scss" scoped>
+      /deep/.doWarehouseClass {
+      border-radius: 10px;
+    }
+</style>

Diff do ficheiro suprimidas por serem muito extensas
+ 3333 - 0
src/views/major/todoDetail.vue


+ 216 - 0
src/views/major/todoList.vue

@@ -0,0 +1,216 @@
+<template>
+  <div class="app-container">
+    <div class="title-container">
+      <breadcrumb id="breadcrumb-container" class="breadcrumb-container" />
+    </div>
+    <y-page-list-layout :page-list="pageData" :page-para="listQuery" :get-page-list="getList">
+      <template slot="left">
+        <el-input v-model="listQuery.keyword" placeholder="订单名称/订单号/报告号" clearable
+          style="margin-left: 20px;width: 270px;float: left;">
+        </el-input>
+        <el-input v-model="listQuery.clientManager" placeholder="客户经理" clearable
+          style="margin-left: 20px;width: 150px;float: left;">
+        </el-input>
+        <el-input v-model="listQuery.principal" placeholder="项目负责人" clearable
+          style="margin-left: 20px;width: 150px;float: left;">
+        </el-input>
+        <el-select v-model="listQuery.nodeName" placeholder="当前节点" style="margin-left: 20px;width: 200px;float: left;" clearable
+            filterable>
+          <el-option
+            v-for="item in majorNodes"
+            :key="item.code"
+            :label="item.name"
+            :value="item.name">
+          </el-option>
+        </el-select>
+        <el-button class="filter-item" style="margin-left: 10px;float: left;" type="primary" @click="searchList" round>搜索
+        </el-button>
+        <el-button class="filter-item" style="float: left;" round type="success" @click="resetSearch()">重置
+        </el-button>
+      </template>
+      <parentTable  :data="pageData.records" slot="table" style="width: 100%;">
+        <el-table-column label="订单名称" align="center"  show-overflow-tooltip>
+          <template slot-scope="{row}">
+            <span>{{ row.orderName }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="订单号" align="center" width="150">
+          <template slot-scope="{row}">
+            <span>{{ row.orderId }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="报告号" align="center" width="300">
+          <template slot-scope="{row}">
+            <span>{{ row.businessSubId==null?'-':row.businessSubId}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="评估对象类型" align="center" width="130">
+          <template slot-scope="{row}">
+            <span>{{ row.businessObjectType}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="待办人" align="center" width="130">
+          <template slot-scope="{row}">
+            <span>{{ row.handler }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="当前节点" align="center" width="140">
+          <template slot-scope="{row}">
+            <span>{{ row.nodeName }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="客户经理" align="center" width="130">
+          <template slot-scope="{row}">
+            <span>{{ row.clientManager }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="负责人" align="center" width="130">
+          <template slot-scope="{row}">
+            <span>{{ row.principal }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="下单时间" align="center" width="160">
+          <template slot-scope="{row}">
+            <span>{{ row.created }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="操作" align="center" width="130">
+          <template slot-scope="{row}">
+            <el-button type="danger" round @click="toDetail(row)">办理</el-button>
+          </template>
+        </el-table-column>
+      </parentTable>
+    </y-page-list-layout>
+  </div>
+</template>
+<script>
+import YPageListLayout from '@/components/YPageListLayout'
+import Breadcrumb from '@/components/Breadcrumb'
+
+export default {
+  name: 'MajorTaskTodoList',
+  components: {
+    Breadcrumb,
+    YPageListLayout,
+  },
+  filters: {
+    
+  },
+  data() {
+    return {
+      pageData: { records: [] },
+      listQuery: {
+        page: 1,
+        size: 10,
+        keyword:null
+      },
+      majorNodes:[]
+    }
+  },
+  created() {
+    this.getList();
+    this.getMajorNodes();
+  },
+  methods: {
+  
+    resetSearch() {
+      this.$router.push({ query: {} });
+      this.listQuery = {
+        current: 1,
+        size: 10,
+        descs: 'id',
+      }
+      this.getList()
+    },
+   
+    removeHandle(row) {
+      // console.log(data)
+      this.$confirm('确认删除当前记录吗?', '警告', {
+          confirmButtonText: '确认',
+          cancelButtonText: '取消',
+          type: 'warning',
+        })
+        .then(async () => {
+          this.$api.term.delete(row.id).then((res) => {
+            if (res.code === 200) {
+              this.$message({
+                type: 'success',
+                message: '删除成功',
+              })
+              this.getList()
+            }
+          })
+        })
+        .catch((err) => {
+          console.error(err)
+        })
+    },
+    searchList() {
+      // 重置分页
+      this.listQuery.page = 1
+      this.listQuery.size = 10
+      this.getList()
+    },
+    getList() {
+      this.$api.workNodeTaskRecord.majorTaskTodoList(this.listQuery).then(res=>{
+        if (res.code ===200){
+            this.pageData = res.data;
+        }
+      })
+    },
+    deleteInfo(id) {
+      const that = this
+      that.$confirm('请确认是否删除该数据?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning',
+        center: true
+      }).then(() => {
+        that.$api.item.delete(id).then(data => {
+          that.loading = false
+          if (data.code === 200) {
+            that.getList()
+          } else {
+            this.$message({
+              type: 'error',
+              message: data.msg
+            })
+          }
+        })
+      }).catch(() => {
+      })
+    },
+    getMajorNodes(){
+        this.$api.workNode.nodesByBusiness('MAJOR_BUSINESS').then(res=>{
+          if (res.code === 200){
+              this.majorNodes = res.data
+          }
+        })
+    },
+    toDetail(row){
+      let reportNo = row.businessSubId;
+      if (row.nodeCode === 'REPORT_OUT_APPLY' || row.nodeCode === 'LETTER_OUT_APPLY'){
+         this.$router.push(`/major/my/order?todoBusinessId=${row.businessId}&rNo=${reportNo}&tId=${row.taskId}&cId=${row.currentNodeId}`)
+         return;
+      }
+      if (row.nodeCode === 'REPORT_OUT_FINANCE_CHECK' || row.nodeCode === 'REPORT_OUT_DEPARTMENT_CHECK' || row.nodeCode === 'LETTER_OUT_FINANCE_CHECK' || row.nodeCode === 'LETTER_OUT_DEPARTMENT_CHECK'){
+         this.$router.push(`/out/warehouse/check?todoBusinessId=${row.businessId}&rNo=${reportNo}&tId=${row.taskId}&cId=${row.currentNodeId}&nCode=${row.nodeCode}`)
+         return;
+      }
+      if (row.nodeCode === 'BUSINESS_ARCHIVING'){
+          this.$router.push(`/major/saveFile/waiting`)
+         return;
+      }
+      if (reportNo){
+        this.$router.push(`/major/todo/detail?id=${row.businessId}&reportNo=${reportNo}&couldEdit=${true}&currentNodeId=${row.currentNodeId}&back=${'/major/todo'}`)
+      }else{
+        this.$router.push(`/major/todo/detail?id=${row.businessId}&couldEdit=${true}&currentNodeId=${row.currentNodeId}&back=${'/major/todo'}`)
+      }
+    }
+  },
+  
+}
+</script>
+<style lang="scss" scoped>
+
+</style>

+ 30 - 6
src/views/set/workflow/detail.vue

@@ -137,7 +137,21 @@
               <el-option key="2" label="状态节点" value="STATE"/>
             </el-select>
         </el-form-item>
-          <el-form-item label="节点任务:" prop="tasks">
+        <el-form-item label="校验业务数据:" prop="verify" >
+          <el-select
+              v-model="editNode.verify"
+              placeholder="请选择"
+              clearable
+              filterable
+              class="filter-item"
+              style="width: 100%"
+            >
+              <el-option key="1" label="评估对象价值校验" value="CHECK_PRODUCTION_CHECK"/>
+              <el-option key="2" label="出具产品类型校验" value="CHECK_PRODUCTION_TYPE"/>
+              <el-option key="3" label="产品已收款校验" value="CHECK_PRODUCTION_FUND"/>
+            </el-select>
+        </el-form-item>
+        <el-form-item label="节点任务:" prop="tasks">
         <el-checkbox-group v-model="editNode.taskItems" :disabled = "editNode.type === null || editNode.type ==='STATE'" >
           <el-checkbox v-for="(t,index) in taksEnums" :key="index" :label="t.description"	  name="tasks" @change="addToTasks(t)">{{t.description}}
           </el-checkbox>
@@ -145,12 +159,21 @@
       </el-form-item>
       <el-form-item :label="t.description+':'" :prop="t.description" v-for="(t,index) in editNode.tasks" :key="index">
           <el-select
+              v-model="editNode.tasks[index].businessHandle"
+              placeholder="业务操作"
+              class="filter-item"
+              style="width: 27%"
+            >
+            <el-option  label="需要业务操作" :value=true />
+            <el-option  label="不需要业务操作" :value=false />
+          </el-select>
+          <el-select
               v-model="editNode.tasks[index].name"
               placeholder="处理人类型"
               clearable
               filterable
               class="filter-item"
-              style="width: 47.5%"
+              style="width: 27% ;margin-left:10px"
               @change="getOptions(editNode.tasks[index].name,editNode.tasks[index])"
             >
             <el-option v-for="(permission, index) in permissionEnum" :key="index" :label="permission.name" :value="permission.code"/>
@@ -162,7 +185,7 @@
               clearable
               filterable
               class="filter-item"
-              style="width: 50%;margin-left:10px"
+              style="width: 41%;margin-left:10px"
             >
             <el-option v-for="(user, index) in allUser" :key="index" :label="user.name" :value="user.id"/>
           </el-select>
@@ -173,7 +196,7 @@
               clearable
               filterable
               class="filter-item"
-              style="width: 50%;margin-left:10px"
+              style="width: 41%;margin-left:10px"
             >
             <el-option v-for="(post, index) in allPost" :key="index" :label="post.name" :value="post.id"/>
           </el-select>
@@ -290,6 +313,7 @@
           {
             description:null,
             taskType:null,
+            businessHandle:null
           }
         ],
         workflow:{
@@ -548,9 +572,9 @@
 <style lang="scss" scoped>
 .node-area{
   padding-left:130px;
-  padding-top:20px;
+  padding-top:40px;
   width:100%;
-  height:650px;
+  height:850px;
 }
 .add-icom :hover{
   cursor:pointer

+ 9 - 9
vue.config.js

@@ -28,7 +28,7 @@ module.exports = {
    */
   // publicPath: '/',
   publicPath: process.env.NODE_ENV === 'production'
-    ? '/admin' // [通过 ip:port/admin 访问,并注意配置route 的base] ??history模式下打包有问题, 只能使用'/' 不能是'./'否则静态资源会报错,要直接点访问只能使用hash模式('./')?? https://cli.vuejs.org/zh/config/#publicpath
+    ? '/admin-test' // [通过 ip:port/admin 访问,并注意配置route 的base] ??history模式下打包有问题, 只能使用'/' 不能是'./'否则静态资源会报错,要直接点访问只能使用hash模式('./')?? https://cli.vuejs.org/zh/config/#publicpath
     : '/',
   outputDir: 'dist',
   assetsDir: 'static',
@@ -42,18 +42,18 @@ module.exports = {
       errors: true
     },
     proxy: {
-      '/api': {
-        // prod
-        target: 'http://127.0.0.1:8088',
-        changeOrigin: true,
-        pathRewrite: {}
-      },
       // '/api': {
-      //   // test (docker)
-      //   target: 'http://127.0.0.1:8089',
+      //   // prod
+      //   target: 'http://127.0.0.1:8088',
       //   changeOrigin: true,
       //   pathRewrite: {}
       // },
+      '/api': {
+        // test (docker)
+        target: 'http://127.0.0.1:8089',
+        changeOrigin: true,
+        pathRewrite: {}
+      },
       '/dfs': {
         target: 'http://127.0.0.1:80',
         changeOrigin: true,