Browse Source

feat: 预付款审核接口调通

lanjianrong 4 years ago
parent
commit
11d74cc6fa

+ 247 - 247
app/const/audit.js

@@ -1,4 +1,4 @@
-'use strict'
+'use strict';
 
 /**
  *
@@ -8,92 +8,92 @@
  * @version
  */
 // 台账审批流程
-const ledger = (function () {
+const ledger = (function() {
     const status = {
         uncheck: 1, // 待上报
         checking: 2, // 待审批|审批中
         checked: 3, // 审批通过
-        checkNo: 4 // 审批退回
-    }
+        checkNo: 4, // 审批退回
+    };
 
-    const statusString = []
-    statusString[status.uncheck] = ''
-    statusString[status.checking] = '审批中'
-    statusString[status.checked] = '审批完成'
-    statusString[status.checkNo] = '审批退回'
+    const statusString = [];
+    statusString[status.uncheck] = '';
+    statusString[status.checking] = '审批中';
+    statusString[status.checked] = '审批完成';
+    statusString[status.checkNo] = '审批退回';
 
-    const statusClass = []
-    statusClass[status.uncheck] = ''
-    statusClass[status.checking] = ''
-    statusClass[status.checked] = 'text-success'
-    statusClass[status.checkNo] = 'text-warning'
+    const statusClass = [];
+    statusClass[status.uncheck] = '';
+    statusClass[status.checking] = '';
+    statusClass[status.checked] = 'text-success';
+    statusClass[status.checkNo] = 'text-warning';
 
     // 标段概况页
     // 描述文本
-    const auditString = []
-    auditString[status.uncheck] = ''
-    auditString[status.checking] = '审批中'
-    auditString[status.checked] = '审批通过'
-    auditString[status.checkNo] = '审批退回'
+    const auditString = [];
+    auditString[status.uncheck] = '';
+    auditString[status.checking] = '审批中';
+    auditString[status.checked] = '审批通过';
+    auditString[status.checkNo] = '审批退回';
     // 文字样式
-    const auditStringClass = []
-    auditStringClass[status.uncheck] = ''
-    auditStringClass[status.checking] = 'text-warning'
-    auditStringClass[status.checked] = 'text-success'
-    auditStringClass[status.checkNo] = 'text-warning'
-    return { status, statusString, statusClass, auditString, auditStringClass }
-})()
+    const auditStringClass = [];
+    auditStringClass[status.uncheck] = '';
+    auditStringClass[status.checking] = 'text-warning';
+    auditStringClass[status.checked] = 'text-success';
+    auditStringClass[status.checkNo] = 'text-warning';
+    return { status, statusString, statusClass, auditString, auditStringClass };
+})();
 
 // 台账修订 审批流程
-const revise = (function () {
+const revise = (function() {
     const status = {
         uncheck: 1, // 待上报
         checking: 2, // 待审批|审批中
         checked: 3, // 审批通过
-        checkNo: 4 // 审批退回
-    }
-    const statusString = []
-    statusString[status.uncheck] = '草稿'
-    statusString[status.checking] = '审批中'
-    statusString[status.checked] = '审批通过'
-    statusString[status.checkNo] = '审批退回'
-
-    const statusClass = []
-    statusClass[status.uncheck] = ''
-    statusClass[status.checking] = ''
-    statusClass[status.checked] = 'text-success'
-    statusClass[status.checkNo] = 'text-warning'
+        checkNo: 4, // 审批退回
+    };
+    const statusString = [];
+    statusString[status.uncheck] = '草稿';
+    statusString[status.checking] = '审批中';
+    statusString[status.checked] = '审批通过';
+    statusString[status.checkNo] = '审批退回';
+
+    const statusClass = [];
+    statusClass[status.uncheck] = '';
+    statusClass[status.checking] = '';
+    statusClass[status.checked] = 'text-success';
+    statusClass[status.checkNo] = 'text-warning';
 
     // 标段概况页
     // 描述文本
-    const auditString = []
-    auditString[status.uncheck] = ''
-    auditString[status.checking] = '审批中'
-    auditString[status.checked] = '审批通过'
-    auditString[status.checkNo] = '审批退回'
+    const auditString = [];
+    auditString[status.uncheck] = '';
+    auditString[status.checking] = '审批中';
+    auditString[status.checked] = '审批通过';
+    auditString[status.checkNo] = '审批退回';
     // 文字样式
-    const auditStringClass = []
-    auditStringClass[status.uncheck] = ''
-    auditStringClass[status.checking] = 'text-warning'
-    auditStringClass[status.checked] = 'text-success'
-    auditStringClass[status.checkNo] = 'text-warning'
+    const auditStringClass = [];
+    auditStringClass[status.uncheck] = '';
+    auditStringClass[status.checking] = 'text-warning';
+    auditStringClass[status.checked] = 'text-success';
+    auditStringClass[status.checkNo] = 'text-warning';
     // 描述文本
-    const auditProgress = []
-    auditProgress[status.uncheck] = '草稿'
-    auditProgress[status.checking] = '审批中'
-    auditProgress[status.checked] = '审批通过'
-    auditProgress[status.checkNo] = '审批退回'
+    const auditProgress = [];
+    auditProgress[status.uncheck] = '草稿';
+    auditProgress[status.checking] = '审批中';
+    auditProgress[status.checked] = '审批通过';
+    auditProgress[status.checkNo] = '审批退回';
     // 样式
-    const auditProgressClass = []
-    auditProgressClass[status.uncheck] = ''
-    auditProgressClass[status.checking] = 'text-warning'
-    auditProgressClass[status.checked] = 'text-success'
-    auditProgressClass[status.checkNo] = 'text-warning'
-    return { status, statusString, statusClass, auditString, auditStringClass, auditProgress, auditProgressClass }
-})()
+    const auditProgressClass = [];
+    auditProgressClass[status.uncheck] = '';
+    auditProgressClass[status.checking] = 'text-warning';
+    auditProgressClass[status.checked] = 'text-success';
+    auditProgressClass[status.checkNo] = 'text-warning';
+    return { status, statusString, statusClass, auditString, auditStringClass, auditProgress, auditProgressClass };
+})();
 
 // 期审批流程
-const stage = (function () {
+const stage = (function() {
     // 流程状态
     const status = {
         uncheck: 1, // 待上报
@@ -101,89 +101,89 @@ const stage = (function () {
         checked: 3, // 审批通过
         checkNo: 4, // 审批退回原报
         checkNoPre: 5, // 审批退回上一人
-        checkAgain: 6 // 重新审批 // 该状态仅可用于,终审退回时,修改原终审的审批状态,并同时新增一条新的终审审批中记录
-    }
+        checkAgain: 6, // 重新审批 // 该状态仅可用于,终审退回时,修改原终审的审批状态,并同时新增一条新的终审审批中记录
+    };
 
     // 流程状态提示
-    const statusString = []
-    statusString[status.uncheck] = '待上报'
-    statusString[status.checking] = '审批中'
-    statusString[status.checked] = '审批通过'
-    statusString[status.checkNo] = '审批退回'
-    statusString[status.checkNoPre] = '审批退回'
-    statusString[status.checkAgain] = '重新审批'
+    const statusString = [];
+    statusString[status.uncheck] = '待上报';
+    statusString[status.checking] = '审批中';
+    statusString[status.checked] = '审批通过';
+    statusString[status.checkNo] = '审批退回';
+    statusString[status.checkNoPre] = '审批退回';
+    statusString[status.checkAgain] = '重新审批';
 
     // 流程状态样式
-    const statusClass = []
-    statusClass[status.uncheck] = ''
-    statusClass[status.checking] = ''
-    statusClass[status.checked] = 'text-success'
-    statusClass[status.checkNo] = 'text-warning'
-    statusClass[status.checkNoPre] = 'text-warning'
-    statusClass[status.checkAgain] = 'text-warning'
+    const statusClass = [];
+    statusClass[status.uncheck] = '';
+    statusClass[status.checking] = '';
+    statusClass[status.checked] = 'text-success';
+    statusClass[status.checkNo] = 'text-warning';
+    statusClass[status.checkNoPre] = 'text-warning';
+    statusClass[status.checkAgain] = 'text-warning';
 
     /**
      * 期列表,审批状态一列
      */
     // 按钮
-    const statusButton = []
-    statusButton[status.uncheck] = '待上报'
-    statusButton[status.checking] = '审批'
-    statusButton[status.checked] = ''
-    statusButton[status.checkNo] = '重新上报'
-    statusButton[status.checkNoPre] = '重新审批'
-    statusButton[status.checkAgain] = '重新审批'
+    const statusButton = [];
+    statusButton[status.uncheck] = '待上报';
+    statusButton[status.checking] = '审批';
+    statusButton[status.checked] = '';
+    statusButton[status.checkNo] = '重新上报';
+    statusButton[status.checkNoPre] = '重新审批';
+    statusButton[status.checkAgain] = '重新审批';
     // 按钮样式
-    const statusButtonClass = []
-    statusButtonClass[status.uncheck] = 'btn-primary'
-    statusButtonClass[status.checking] = 'btn-success'
-    statusButtonClass[status.checked] = ''
-    statusButtonClass[status.checkNo] = 'btn-warning'
-    statusButtonClass[status.checkNoPre] = 'btn-warning'
-    statusButtonClass[status.checkAgain] = 'btn-warning'
+    const statusButtonClass = [];
+    statusButtonClass[status.uncheck] = 'btn-primary';
+    statusButtonClass[status.checking] = 'btn-success';
+    statusButtonClass[status.checked] = '';
+    statusButtonClass[status.checkNo] = 'btn-warning';
+    statusButtonClass[status.checkNoPre] = 'btn-warning';
+    statusButtonClass[status.checkAgain] = 'btn-warning';
     // 描述文本
-    const auditString = []
-    auditString[status.uncheck] = ''
-    auditString[status.checking] = '审批中'
-    auditString[status.checked] = '审批通过'
-    auditString[status.checkNo] = '审批退回'
-    auditString[status.checkNoPre] = '审批退回'
-    auditString[status.checkAgain] = '重新审批'
+    const auditString = [];
+    auditString[status.uncheck] = '';
+    auditString[status.checking] = '审批中';
+    auditString[status.checked] = '审批通过';
+    auditString[status.checkNo] = '审批退回';
+    auditString[status.checkNoPre] = '审批退回';
+    auditString[status.checkAgain] = '重新审批';
     // 文字样式
-    const auditStringClass = []
-    auditStringClass[status.uncheck] = ''
-    auditStringClass[status.checking] = 'text-warning'
-    auditStringClass[status.checked] = 'text-success'
-    auditStringClass[status.checkNo] = 'text-warning'
-    auditStringClass[status.checkNoPre] = 'text-warning'
-    auditStringClass[status.checkAgain] = 'text-warning'
+    const auditStringClass = [];
+    auditStringClass[status.uncheck] = '';
+    auditStringClass[status.checking] = 'text-warning';
+    auditStringClass[status.checked] = 'text-success';
+    auditStringClass[status.checkNo] = 'text-warning';
+    auditStringClass[status.checkNoPre] = 'text-warning';
+    auditStringClass[status.checkAgain] = 'text-warning';
     /* ------------------------------------------------------- */
 
     /**
      * 期列表,审批进度一列
      */
     // 描述文本
-    const auditProgress = []
-    auditProgress[status.uncheck] = '待上报'
-    auditProgress[status.checking] = '审批中'
-    auditProgress[status.checked] = '审批通过'
-    auditProgress[status.checkNo] = '审批退回'
-    auditProgress[status.checkNoPre] = '审批退回'
-    auditProgress[status.checkAgain] = '重新审批'
+    const auditProgress = [];
+    auditProgress[status.uncheck] = '待上报';
+    auditProgress[status.checking] = '审批中';
+    auditProgress[status.checked] = '审批通过';
+    auditProgress[status.checkNo] = '审批退回';
+    auditProgress[status.checkNoPre] = '审批退回';
+    auditProgress[status.checkAgain] = '重新审批';
     // 样式
-    const auditProgressClass = []
-    auditProgressClass[status.uncheck] = ''
-    auditProgressClass[status.checking] = 'text-warning'
-    auditProgressClass[status.checked] = 'text-success'
-    auditProgressClass[status.checkNo] = 'text-warning'
-    auditProgressClass[status.checkNoPre] = 'text-warning'
-    auditProgressClass[status.checkAgain] = 'text-warning'
+    const auditProgressClass = [];
+    auditProgressClass[status.uncheck] = '';
+    auditProgressClass[status.checking] = 'text-warning';
+    auditProgressClass[status.checked] = 'text-success';
+    auditProgressClass[status.checkNo] = 'text-warning';
+    auditProgressClass[status.checkNoPre] = 'text-warning';
+    auditProgressClass[status.checkAgain] = 'text-warning';
     /* ------------------------------------------------------- */
 
     const backType = {
         org: 1,
-        pre: 2
-    }
+        pre: 2,
+    };
     return {
         status,
         statusString,
@@ -195,9 +195,9 @@ const stage = (function () {
         auditProgress,
         auditProgressClass,
         backType,
-        timesLen: 100
-    }
-})()
+        timesLen: 100,
+    };
+})();
 
 // 变更令状态
 const status = {
@@ -206,39 +206,39 @@ const status = {
     checked: 3, // 审批完成
     // checkNo: 4,     // 审批终止
     back: 5, // 重新上报
-    backnew: 6 // 退回
-}
-const statusButton = []
-statusButton[status.uncheck] = '上报'
-statusButton[status.checking] = '审批'
-statusButton[status.checked] = ''
+    backnew: 6, // 退回
+};
+const statusButton = [];
+statusButton[status.uncheck] = '上报';
+statusButton[status.checking] = '审批';
+statusButton[status.checked] = '';
 // statusButton[status.checkNo] = '';
-statusButton[status.back] = '重新上报'
-statusButton[status.backnew] = '审批'
+statusButton[status.back] = '重新上报';
+statusButton[status.backnew] = '审批';
 
-const statusButtonClass = []
-statusButtonClass[status.uncheck] = 'btn-primary'
-statusButtonClass[status.checking] = 'btn-success'
-statusButtonClass[status.checked] = ''
+const statusButtonClass = [];
+statusButtonClass[status.uncheck] = 'btn-primary';
+statusButtonClass[status.checking] = 'btn-success';
+statusButtonClass[status.checked] = '';
 // statusButtonClass[status.checkNo] = '';
-statusButtonClass[status.back] = 'btn-warning'
-statusButtonClass[status.backnew] = 'btn-success'
+statusButtonClass[status.back] = 'btn-warning';
+statusButtonClass[status.backnew] = 'btn-success';
 
-const statusString = []
-statusString[status.uncheck] = ''
-statusString[status.checking] = '审批中'
-statusString[status.checked] = '审批通过'
+const statusString = [];
+statusString[status.uncheck] = '';
+statusString[status.checking] = '审批中';
+statusString[status.checked] = '审批通过';
 // statusString[status.checkNo] = '终止';
-statusString[status.back] = '审批退回'
-statusString[status.backnew] = '审批退回'
+statusString[status.back] = '审批退回';
+statusString[status.backnew] = '审批退回';
 
-const statusClass = []
-statusClass[status.uncheck] = ''
-statusClass[status.checking] = 'text-warning'
-statusClass[status.checked] = 'text-success'
+const statusClass = [];
+statusClass[status.uncheck] = '';
+statusClass[status.checking] = 'text-warning';
+statusClass[status.checked] = 'text-success';
 // statusClass[status.checkNo] = 'text-danger';
-statusClass[status.back] = 'text-warning'
-statusClass[status.backnew] = 'text-warning'
+statusClass[status.back] = 'text-warning';
+statusClass[status.backnew] = 'text-warning';
 
 /* ------------------------------------------------------- */
 
@@ -250,26 +250,26 @@ const auditStatus = {
     // checkNo: 4,     // 审批终止
     back: 5, // 退回到原报人重新上报
     backnew: 6, // 退回到上一个审批人
-    checkAgain: 7 // 重新审批
-}
+    checkAgain: 7, // 重新审批
+};
 
-const auditStatusString = []
-auditStatusString[auditStatus.uncheck] = '待上报'
-auditStatusString[auditStatus.checking] = '审批中'
-auditStatusString[auditStatus.checked] = '审批通过'
+const auditStatusString = [];
+auditStatusString[auditStatus.uncheck] = '待上报';
+auditStatusString[auditStatus.checking] = '审批中';
+auditStatusString[auditStatus.checked] = '审批通过';
 // auditStatusString[auditStatus.checkNo] = '审批终止';
-auditStatusString[auditStatus.back] = '退回'
-auditStatusString[auditStatus.backnew] = '审批退回'
-auditStatusString[auditStatus.checkAgain] = '重新审批'
-
-const auditStatusClass = []
-auditStatusClass[auditStatus.uncheck] = ''
-auditStatusClass[auditStatus.checking] = 'text-warning'
-auditStatusClass[auditStatus.checked] = 'text-success'
+auditStatusString[auditStatus.back] = '退回';
+auditStatusString[auditStatus.backnew] = '审批退回';
+auditStatusString[auditStatus.checkAgain] = '重新审批';
+
+const auditStatusClass = [];
+auditStatusClass[auditStatus.uncheck] = '';
+auditStatusClass[auditStatus.checking] = 'text-warning';
+auditStatusClass[auditStatus.checked] = 'text-success';
 // auditStatusClass[auditStatus.checkNo] = 'text-danger';
-auditStatusClass[auditStatus.back] = 'text-warning'
-auditStatusClass[auditStatus.backnew] = 'text-warning'
-auditStatusClass[auditStatus.checkAgain] = 'text-warning'
+auditStatusClass[auditStatus.back] = 'text-warning';
+auditStatusClass[auditStatus.backnew] = 'text-warning';
+auditStatusClass[auditStatus.checkAgain] = 'text-warning';
 
 /* ------------------------------------------------------- */
 
@@ -278,116 +278,116 @@ const filter = {
         pending: 1,
         uncheck: 5,
         checking: 2,
-        checked: 3
+        checked: 3,
         // checkNo: 4,
     },
-    statusString: []
-}
-filter.statusString[filter.status.pending] = '待处理'
-filter.statusString[filter.status.uncheck] = '待上报'
-filter.statusString[filter.status.checking] = '进行中'
-filter.statusString[filter.status.checked] = '已完成'
+    statusString: [],
+};
+filter.statusString[filter.status.pending] = '待处理';
+filter.statusString[filter.status.uncheck] = '待上报';
+filter.statusString[filter.status.checking] = '进行中';
+filter.statusString[filter.status.checked] = '已完成';
 // filter.statusString[filter.status.checkNo] = '终止';
 
 // 材料调差审批流程
-const material = (function () {
+const material = (function() {
     const status = {
         uncheck: 1, // 待上报
         checking: 2, // 待审批|审批中
         checked: 3, // 审批通过
         checkNo: 4, // 审批退回原报
         checkNoPre: 5, // 审批退回上一人
-        checkAgain: 6 // 终审退回  --该状态仅可用于,终审退回时,修改原终审的审批状态,并同时新增一条新的终审审批中记录
-    }
+        checkAgain: 6, // 终审退回  --该状态仅可用于,终审退回时,修改原终审的审批状态,并同时新增一条新的终审审批中记录
+    };
     // 流程状态提示
-    const statusString = []
-    statusString[status.uncheck] = '待上报'
-    statusString[status.checking] = '审批中'
-    statusString[status.checked] = '审批通过'
-    statusString[status.checkNo] = '审批退回'
-    statusString[status.checkNoPre] = '审批退回'
-    statusString[status.checkAgain] = '重新审批'
+    const statusString = [];
+    statusString[status.uncheck] = '待上报';
+    statusString[status.checking] = '审批中';
+    statusString[status.checked] = '审批通过';
+    statusString[status.checkNo] = '审批退回';
+    statusString[status.checkNoPre] = '审批退回';
+    statusString[status.checkAgain] = '重新审批';
 
     // 流程状态样式
-    const statusClass = []
-    statusClass[status.uncheck] = ''
-    statusClass[status.checking] = ''
-    statusClass[status.checked] = 'text-success'
-    statusClass[status.checkNo] = 'text-warning'
-    statusClass[status.checkNoPre] = 'text-warning'
-    statusClass[status.checkAgain] = 'text-warning'
+    const statusClass = [];
+    statusClass[status.uncheck] = '';
+    statusClass[status.checking] = '';
+    statusClass[status.checked] = 'text-success';
+    statusClass[status.checkNo] = 'text-warning';
+    statusClass[status.checkNoPre] = 'text-warning';
+    statusClass[status.checkAgain] = 'text-warning';
 
     // 按钮
-    const statusButton = []
-    statusButton[status.uncheck] = '待上报'
-    statusButton[status.checking] = '审批'
-    statusButton[status.checked] = ''
-    statusButton[status.checkNo] = '重新上报'
+    const statusButton = [];
+    statusButton[status.uncheck] = '待上报';
+    statusButton[status.checking] = '审批';
+    statusButton[status.checked] = '';
+    statusButton[status.checkNo] = '重新上报';
 
     // 按钮样式
-    const statusButtonClass = []
-    statusButtonClass[status.uncheck] = 'btn-primary'
-    statusButtonClass[status.checking] = 'btn-success'
-    statusButtonClass[status.checked] = ''
-    statusButtonClass[status.checkNo] = 'btn-warning'
+    const statusButtonClass = [];
+    statusButtonClass[status.uncheck] = 'btn-primary';
+    statusButtonClass[status.checking] = 'btn-success';
+    statusButtonClass[status.checked] = '';
+    statusButtonClass[status.checkNo] = 'btn-warning';
 
     // 描述文本
-    const auditProgress = []
-    auditProgress[status.uncheck] = '待上报'
-    auditProgress[status.checking] = '审批中'
-    auditProgress[status.checked] = '审批通过'
-    auditProgress[status.checkNo] = '审批退回'
+    const auditProgress = [];
+    auditProgress[status.uncheck] = '待上报';
+    auditProgress[status.checking] = '审批中';
+    auditProgress[status.checked] = '审批通过';
+    auditProgress[status.checkNo] = '审批退回';
     // 样式
-    const auditProgressClass = []
-    auditProgressClass[status.uncheck] = ''
-    auditProgressClass[status.checking] = 'text-warning'
-    auditProgressClass[status.checked] = 'text-success'
-    auditProgressClass[status.checkNo] = 'text-warning'
-    return { status, statusString, statusClass, statusButton, statusButtonClass, auditProgress, auditProgressClass }
-})()
+    const auditProgressClass = [];
+    auditProgressClass[status.uncheck] = '';
+    auditProgressClass[status.checking] = 'text-warning';
+    auditProgressClass[status.checked] = 'text-success';
+    auditProgressClass[status.checkNo] = 'text-warning';
+    return { status, statusString, statusClass, statusButton, statusButtonClass, auditProgress, auditProgressClass };
+})();
 
 // 预付款审批流程
-const advance = (function () {
+const advance = (function() {
     const type = {
         start: 0,
-        material: 1
-    }
+        material: 1,
+    };
 
     const status = {
         uncheck: 1, // 待上报
         checking: 2, // 待审批|审批中
         checked: 3, // 审批通过
         checkNo: 4, // 审批退回原报
-        checkNoPre: 5 // 审批退回上一人
-    }
+        checkNoPre: 5, // 审批退回上一人
+    };
 
-    const statusString = []
-    statusString[status.uncheck] = '未上报'
-    statusString[status.checking] = '审批中'
-    statusString[status.checked] = '审批通过'
-    statusString[status.checkNo] = '审批退回'
+    const statusString = [];
+    statusString[status.uncheck] = '未上报';
+    statusString[status.checking] = '审批中';
+    statusString[status.checked] = '审批通过';
+    statusString[status.checkNo] = '审批退回';
 
-    const statusClass = []
-    statusClass[status.uncheck] = ''
-    statusClass[status.checking] = ''
-    statusClass[status.checked] = 'text-success'
-    statusClass[status.checkNo] = 'text-warning'
+    const statusClass = [];
+    statusClass[status.uncheck] = '';
+    statusClass[status.checking] = 'text-warning';
+    statusClass[status.checked] = 'text-success';
+    statusClass[status.checkNo] = 'text-warning';
 
     // 标段概况页
     // 描述文本
-    const auditString = []
-    auditString[status.uncheck] = ''
-    auditString[status.checking] = '审批中'
-    auditString[status.checked] = '审批通过'
-    auditString[status.checkNo] = '审批退回'
+    const auditString = [];
+    auditString[status.uncheck] = '';
+    auditString[status.checking] = '审批中';
+    auditString[status.checked] = '审批通过';
+    auditString[status.checkNo] = '审批退回';
     // 文字样式
-    const auditStringClass = []
-    auditStringClass[status.uncheck] = ''
-    auditStringClass[status.checking] = 'text-warning'
-    auditStringClass[status.checked] = 'text-success'
-    auditStringClass[status.checkNo] = 'text-warning'
-    return { type, status, statusString, statusClass, auditString, auditStringClass }
-})()
+    const auditStringClass = [];
+    auditStringClass[status.uncheck] = '';
+    auditStringClass[status.checking] = 'text-warning';
+    auditStringClass[status.checked] = 'text-success';
+    auditStringClass[status.checkNo] = 'text-warning';
+    return { type, status, statusString, statusClass, auditString, auditStringClass };
+})();
 // 推送类型
 const pushType = {
     material: 1,
@@ -395,8 +395,8 @@ const pushType = {
     change: 3,
     revise: 4,
     ledger: 5,
-    advance: 6
-}
+    advance: 6,
+};
 
 module.exports = {
     ledger,
@@ -411,9 +411,9 @@ module.exports = {
         statusClass,
         auditStatus,
         auditStatusString,
-        auditStatusClass
+        auditStatusClass,
     },
     filter,
     pushType,
-    advance
-}
+    advance,
+};

+ 114 - 89
app/controller/advance_controller.js

@@ -1,6 +1,6 @@
-'use strict'
-const accountGroup = require('../const/account_group').group
-const auditConst = require('../const/audit').advance
+'use strict';
+const accountGroup = require('../const/account_group').group;
+const auditConst = require('../const/audit').advance;
 
 module.exports = app => {
     class advanceController extends app.BaseController {
@@ -9,9 +9,9 @@ module.exports = app => {
          * @param {Object} ctx 全局上下文
          */
         async index(ctx) {
-            const type = auditConst.type.start
-            const advanceList = await ctx.service.advance.getAdvanceList(ctx.tender.id, type)
-            const latestOrder = await ctx.service.advance.getLastestAdvance(ctx.tender.id, type, true)
+            const type = auditConst.type.start;
+            const advanceList = await ctx.service.advance.getAdvanceList(ctx.tender.id, type);
+            const latestOrder = await ctx.service.advance.getLastestAdvance(ctx.tender.id, type, true);
             const renderData = {
                 type,
                 advanceList,
@@ -19,9 +19,9 @@ module.exports = app => {
                 auditConst,
                 preUrl: `/tender/${ctx.tender.id}/advance/${type}/create`,
                 jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.advance.main),
-                advancePayTotal: ctx.tender.info.deal_param.startAdvance
-            }
-            await this.layout('advance/index.ejs', renderData, 'advance/modal.ejs')
+                advancePayTotal: ctx.tender.info.deal_param.startAdvance,
+            };
+            await this.layout('advance/index.ejs', renderData, 'advance/modal.ejs');
         }
 
         /**
@@ -29,9 +29,9 @@ module.exports = app => {
          * @param {Object} ctx 全局上下文
          */
         async materialList(ctx) {
-            const type = auditConst.type.material
-            const advanceList = await ctx.service.advance.getAdvanceList(ctx.tender.id, type)
-            const latestOrder = await ctx.service.advance.getLastestAdvance(ctx.tender.id, type, true)
+            const type = auditConst.type.material;
+            const advanceList = await ctx.service.advance.getAdvanceList(ctx.tender.id, type);
+            const latestOrder = await ctx.service.advance.getLastestAdvance(ctx.tender.id, type, true);
             const renderData = {
                 type,
                 advanceList,
@@ -39,9 +39,9 @@ module.exports = app => {
                 auditConst,
                 preUrl: `/tender/${ctx.tender.id}/advance/${type}/create`,
                 jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.advance.main),
-                advancePayTotal: ctx.tender.info.deal_param.materialAdvance
-            }
-            await this.layout('advance/index.ejs', renderData, 'advance/modal.ejs')
+                advancePayTotal: ctx.tender.info.deal_param.materialAdvance,
+            };
+            await this.layout('advance/index.ejs', renderData, 'advance/modal.ejs');
         }
 
         /**
@@ -54,30 +54,52 @@ module.exports = app => {
             const data = {
                 auditConst,
                 jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.advance.info),
-                preUrl: `/tender/${ctx.tender.id}/advance/${ctx.advance.id}`
-            }
+                preUrl: `/tender/${ctx.tender.id}/advance/${ctx.advance.id}`,
+            };
             // 获取所有项目参与者
             if ((ctx.advance.status === auditConst.status.uncheck || ctx.advance.status === auditConst.status.checkNo) && ctx.session.sessionUser.accountId === ctx.advance.uid) {
-                data.accountGroup = accountGroup
+                data.accountGroup = accountGroup;
                 // 获取所有项目参与者
                 const accountList = await ctx.service.projectAccount.getAllDataByCondition({
                     where: { project_id: ctx.session.sessionProject.id, enable: 1 },
-                    columns: ['id', 'name', 'company', 'role', 'enable', 'is_admin', 'account_group']
-                })
-                data.accountList = accountList
+                    columns: ['id', 'name', 'company', 'role', 'enable', 'is_admin', 'account_group'],
+                });
+                data.accountList = accountList;
             }
             // 获取审核人左边列表
-            data.auditors = await ctx.service.advanceAudit.getAuditorsWithOwner(ctx.advance.id, ctx.advance.times)
+            data.auditors = await ctx.service.advanceAudit.getAuditorsWithOwner(ctx.advance.id, ctx.advance.times);
             // 获取审批流程中右边列表
-            const auditHistory = []
-            const times = ctx.advance.status === auditConst.status.checkNo ? ctx.advance.times - 1 : ctx.advance.times
+            const auditHistory = [];
+            const times = ctx.advance.status === auditConst.status.checkNo ? ctx.advance.times - 1 : ctx.advance.times;
             if (times >= 1) {
                 for (let i = 1; i <= times; i++) {
-                    auditHistory.push(await ctx.service.advanceAudit.getAuditors(ctx.advance.id, i))
+                    auditHistory.push(await ctx.service.advanceAudit.getAuditors(ctx.advance.id, i));
                 }
             }
-            data.auditHistory = auditHistory
-            return data
+            console.log('auditHistory', auditHistory);
+            data.auditHistory = auditHistory;
+            return data;
+        }
+
+        /**
+         * 获取审批界面所需的 原报、审批人数据等
+         * @param {Object} ctx 全局上下文
+         * @private
+         */
+        async _getAdvanceAuditViewData(ctx) {
+            const times = ctx.advance.status === auditConst.status.checkNo ? ctx.advance.times - 1 : ctx.advance.times;
+            ctx.advance.user = await ctx.service.projectAccount.getAccountInfoById(ctx.advance.uid);
+            ctx.advance.auditHistory = [];
+            if (ctx.advance.times > 1) {
+                for (let i = 1; i < ctx.advance.times; i++) {
+                    ctx.advance.auditHistory.push(await ctx.service.advanceAudit.getAuditors(ctx.advance.id, i));
+                }
+            }
+            // 获取审批流程中左边列表
+            ctx.advance.auditors2 = await ctx.service.advanceAudit.getAuditGroupByList(ctx.advance.id, times);
+            if (ctx.advance.status === auditConst.status.uncheck || ctx.advance.status === auditConst.status.checkNo) {
+                ctx.advance.auditorList = await ctx.service.advanceAudit.getAuditors(ctx.advance.id, ctx.advance.times);
+            }
         }
 
         /**
@@ -85,21 +107,22 @@ module.exports = app => {
          * @param {Object} ctx 全局上下文
          */
         async detail(ctx) {
-            const advancePayTotal = ctx.advance.type === 0 ? ctx.tender.info.deal_param.startAdvance : ctx.tender.info.deal_param.materialAdvance
+            const advancePayTotal = ctx.advance.type === 0 ? ctx.tender.info.deal_param.startAdvance : ctx.tender.info.deal_param.materialAdvance;
             try {
-                const renderData = await this._getDefaultRenderData(ctx)
-                const { uncheck, checkNo } = auditConst.status
-                const { status } = ctx.advance
+                const renderData = await this._getDefaultRenderData(ctx);
+                await this._getAdvanceAuditViewData(ctx);
+                const { uncheck, checkNo } = auditConst.status;
+                const { status } = ctx.advance;
                 // 获取上一期预付款记录
-                const prevAdvance = await ctx.service.advance.getPreviousRecord(ctx.tender.id, ctx.advance.type)
-                renderData.isEdited = status === uncheck || status === checkNo
-                renderData.advance = ctx.advance
-                renderData.advancePayTotal = advancePayTotal
-                renderData.prevAdvance = prevAdvance
-                await this.layout('advance/detail.ejs', renderData, 'advance/modal_audit.ejs')
+                const prevAdvance = await ctx.service.advance.getPreviousRecord(ctx.tender.id, ctx.advance.type);
+                renderData.isEdited = status === uncheck || status === checkNo;
+                renderData.advance = ctx.advance;
+                renderData.advancePayTotal = advancePayTotal;
+                renderData.prevAdvance = prevAdvance;
+                await this.layout('advance/detail.ejs', renderData, 'advance/modal_audit.ejs');
             } catch (error) {
-                this.log(error)
-                ctx.redirect('/tender/' + ctx.tender.id + '/advance')
+                this.log(error);
+                ctx.redirect('/tender/' + ctx.tender.id + '/advance');
             }
         }
 
@@ -108,16 +131,17 @@ module.exports = app => {
          * @param {Object} ctx 全局上下文
          */
         async create(ctx) {
-            const response = { err: 0, msg: '', data: {} }
-            const type = parseInt(ctx.params.type)
+            const type = parseInt(ctx.params.type);
             try {
-                const record = await ctx.service.advance.createRecord(type)
-                response.data = record
+                const record = await ctx.service.advance.createRecord(type);
+                if (!record) {
+                    throw '数据错误';
+                }
+                ctx.redirect(`/tender/${ctx.tender.id}/advance/${record.id}/detail`);
             } catch (error) {
-                response.err = 1
-                response.msg = error
+                this.log(error);
+                ctx.redirect(`/tender/${ctx.tender.id}/advance`);
             }
-            ctx.body = response
         }
 
         /**
@@ -126,57 +150,58 @@ module.exports = app => {
          */
         async addAudit(ctx) {
             try {
-                const data = JSON.parse(ctx.request.body.data)
-                const audit_id = data && this.app._.toInteger(data.auditorId)
+                const data = JSON.parse(ctx.request.body.data);
+                const audit_id = data && this.app._.toInteger(data.auditorId);
                 if (isNaN(audit_id) || audit_id <= 0) {
-                    throw '参数错误'
+                    throw '参数错误';
                 }
                 // 检查权限等
                 if (ctx.advance.uid !== ctx.session.sessionUser.accountId) {
-                    throw '您无权添加审核人'
+                    throw '您无权添加审核人';
                 }
                 if (ctx.advance.status === auditConst.status.checking || ctx.advance.status === auditConst.status.checked) {
-                    throw '当前不允许添加审核人'
+                    throw '当前不允许添加审核人';
                 }
                 // 检查审核人是否已存在
-                const exist = this.app._.find(ctx.advance.auditors, { audit_id })
+                const exist = this.app._.find(ctx.advance.auditors, { audit_id });
                 if (exist) {
-                    throw '该审核人已存在,请勿重复添加'
+                    throw '该审核人已存在,请勿重复添加';
                 }
 
-                const result = await ctx.service.advanceAudit.addAuditor(ctx.advance.id, audit_id, ctx.advance.times)
+                const result = await ctx.service.advanceAudit.addAuditor(ctx.tender.id, ctx.advance.id, audit_id, ctx.advance.times);
                 if (!result) {
-                    throw '添加审核人失败'
+                    throw '添加审核人失败';
                 }
 
-                const audit = await ctx.service.advanceAudit.getAuditor(ctx.advance.id, audit_id, ctx.advance.times)
-                ctx.body = { err: 0, msg: '', data: audit }
+                const audit = await ctx.service.advanceAudit.getAuditor(ctx.advance.id, audit_id, ctx.advance.times);
+                ctx.body = { err: 0, msg: '', data: audit };
             } catch (err) {
-                this.log(err)
-                ctx.body = { err: 1, msg: err.toString(), data: null }
+                this.log(err);
+                ctx.body = { err: 1, msg: err.toString(), data: null };
             }
         }
+
         /**
          * 移除审批人
          * @param {Object} ctx 全局上下文
          */
         async deleteAudit(ctx) {
             try {
-                const data = JSON.parse(ctx.request.body.data)
-                const id = data && data.auditorId instanceof Number ? data.auditorId : this.app._.toNumber(data.auditorId)
+                const data = JSON.parse(ctx.request.body.data);
+                const id = data && data.auditorId instanceof Number ? data.auditorId : this.app._.toNumber(data.auditorId);
                 if (isNaN(id) || id <= 0) {
-                    throw '参数错误'
+                    throw '参数错误';
                 }
 
-                const result = await ctx.service.advanceAudit.deleteAuditor(ctx.advance.id, id, ctx.advance.times)
+                const result = await ctx.service.advanceAudit.deleteAuditor(ctx.advance.id, id, ctx.advance.times);
                 if (!result) {
-                    throw '移除审核人失败'
+                    throw '移除审核人失败';
                 }
 
-                const auditors = await ctx.service.advanceAudit.getAuditGroupByList(ctx.advance.id, ctx.advance.times)
-                ctx.body = { err: 0, msg: '', data: auditors }
+                const auditors = await ctx.service.advanceAudit.getAuditGroupByList(ctx.advance.id, ctx.advance.times);
+                ctx.body = { err: 0, msg: '', data: auditors };
             } catch (err) {
-                ctx.body = { err: 1, msg: err.toString(), data: null }
+                ctx.body = { err: 1, msg: err.toString(), data: null };
             }
         }
 
@@ -185,24 +210,24 @@ module.exports = app => {
          * @param {Object} ctx 全局上下文
          */
         async start(ctx) {
-            const data = JSON.parse(ctx.request.body.data)
+            const data = JSON.parse(ctx.request.body.data);
             try {
                 // 检查权限等
                 if (!ctx.advance) {
-                    throw '数据错误'
+                    throw '数据错误';
                 }
                 if (ctx.advance.uid !== ctx.session.sessionUser.accountId) {
-                    throw '您无权上报该期数据'
+                    throw '您无权上报该期数据';
                 }
                 if (ctx.advance.status === auditConst.status.checking || ctx.advance.status === auditConst.status.checked) {
-                    throw '该预付款期数据当前无法上报'
+                    throw '该预付款期数据当前无法上报';
                 }
-                await ctx.service.advanceAudit.start(ctx.advance.id, ctx.advance.times, data)
-                ctx.body = { err: 0, msg: '' }
+                await ctx.service.advanceAudit.start(ctx.advance.id, ctx.advance.times, data);
+                ctx.body = { err: 0, msg: '' };
             } catch (error) {
-                this.log(error)
-                ctx.session.postError = error.toString()
-                ctx.body = { err: 1, msg: error.toString() }
+                this.log(error);
+                ctx.session.postError = error.toString();
+                ctx.body = { err: 1, msg: error.toString() };
             }
         }
 
@@ -213,33 +238,33 @@ module.exports = app => {
         async checkAudit(ctx) {
             try {
                 if (!ctx.advance || ctx.advance.status !== auditConst.status.checking) {
-                    throw '当前材料调差期数据有误'
+                    throw '当前材料调差期数据有误';
                 }
                 if (!ctx.advance.curAuditor || ctx.advance.curAuditor.audit_id !== ctx.session.sessionUser.accountId) {
-                    throw '您无权进行该操作'
+                    throw '您无权进行该操作';
                 }
                 const data = {
                     checkType: parseInt(ctx.request.body.checkType),
-                    opinion: ctx.request.body.opinion
-                }
+                    opinion: ctx.request.body.opinion,
+                };
                 if (!data.checkType || isNaN(data.checkType)) {
-                    throw '提交数据错误'
+                    throw '提交数据错误';
                 }
                 if (data.checkType === auditConst.status.checkNo) {
                     if (!data.checkType || isNaN(data.checkType)) {
-                        throw '提交数据错误'
+                        throw '提交数据错误';
                     }
                 }
 
-                await ctx.service.advanceAudit.check(ctx.advance.id, data, ctx.advance.times)
+                await ctx.service.advanceAudit.check(ctx.advance.id, data, ctx.advance.times);
 
-                ctx.redirect(ctx.request.header.referer)
+                ctx.redirect(ctx.request.header.referer);
             } catch (err) {
-                this.log(err)
-                ctx.session.postError = err.toString()
-                ctx.redirect(ctx.request.header.referer)
+                this.log(err);
+                ctx.session.postError = err.toString();
+                ctx.redirect(ctx.request.header.referer);
             }
         }
     }
-    return advanceController
-}
+    return advanceController;
+};

+ 1 - 0
app/controller/material_controller.js

@@ -212,6 +212,7 @@ module.exports = app => {
             if (ctx.material.status === auditConst.status.uncheck || ctx.material.status === auditConst.status.checkNo) {
                 ctx.material.auditorList = await ctx.service.materialAudit.getAuditors(ctx.material.id, ctx.material.times);
             }
+            console.log(ctx.material.auditHistory);
         }
 
         /**

+ 30 - 4
app/extend/helper.js

@@ -612,7 +612,7 @@ module.exports = {
      * @param {Object} Obj - 检查的数据
      * @param {Array} fields - 检查的属性
      * @param {Number} precision - 精度
-     * @constructor
+     * @class
      */
     checkFieldPrecision(Obj, fields, precision = 2) {
         if (Obj) {
@@ -787,7 +787,7 @@ module.exports = {
                     }
                 }
             }
-        }
+        };
         for (const m of main) {
             index[indexPre + m.id] = m;
             for (const r of rela) {
@@ -824,7 +824,7 @@ module.exports = {
     formatMoney(s, dot = ',') {
         if (!s) return '0.00';
         s = parseFloat((s + '').replace(/[^\d\.-]/g, '')).toFixed(2) + '';
-        let l = s.split('.')[0].split('').reverse(),
+        const l = s.split('.')[0].split('').reverse(),
             r = s.split('.')[1];
         let t = '';
         for (let i = 0; i < l.length; i++) {
@@ -912,6 +912,32 @@ module.exports = {
         return moment(time).format('YYYY-MM-DD HH:mm:ss');
     },
 
+    // 预付款详情页时间线所需格式
+    formatDate(date) {
+        const year = date.getFullYear();
+        let mon = date.getMonth() + 1;
+        let day = date.getDate();
+        let hour = date.getHours() + 1;
+        let minute = date.getMinutes() + 1;
+        let scond = date.getSeconds() + 1;
+        if (mon < 10) {
+            mon = '0' + mon.toString();
+        }
+        if (day < 10) {
+            day = '0' + day.toString();
+        }
+        if (hour < 10) {
+            hour = '0' + hour.toString();
+        }
+        if (minute < 10) {
+            minute = '0' + minute.toString();
+        }
+        if (scond < 10) {
+            scond = '0' + scond.toString();
+        }
+        return `${year}<span>${mon}-${day}</span><span>${hour}:${minute}:${scond}</span>`;
+    },
+
     timeAdd(duration) {
         const d = parseInt(duration);
         let time = 0;
@@ -1010,7 +1036,7 @@ module.exports = {
      *
      * @param setting
      * @param data
-     * @returns {{} & any & {"!ref": string} & {"!cols"}}
+     * @return {{} & any & {"!ref": string} & {"!cols"}}
      */
     simpleXlsxSheetData(setting, data) {
         const headerStyle = {

+ 18 - 21
app/middleware/advance_check.js

@@ -1,4 +1,4 @@
-'use strict'
+'use strict';
 
 /**
  * 预付款中间件
@@ -7,7 +7,7 @@
  * @version
  */
 
-const status = require('../const/audit').advance.status
+const status = require('../const/audit').advance.status;
 // const _ = require('lodash')
 
 module.exports = () => {
@@ -32,45 +32,42 @@ module.exports = () => {
     return function* advanceCheck(next) {
         try {
             // 读取预付款id
-            const id = parseInt(this.params.order)
+            const id = parseInt(this.params.order);
             if (!id || id <= 0) {
-                throw '您访问的预付款期不存在'
+                throw '您访问的预付款期不存在';
             }
-            const advance = yield this.service.advance.getDataByCondition({
-                tid: this.tender.id,
-                id
-            })
+            const advance = yield this.service.advance.getDataById(id);
             if (!advance) {
-                throw '预付款数据错误'
+                throw '预付款数据错误';
             }
 
             // 读取审核人列表数据
-            advance.auditors = yield this.service.advanceAudit.getAuditors(advance.id, advance.times)
-            advance.curAuditor = yield this.service.advanceAudit.getCurAuditor(advance.id, advance.times)
+            advance.auditors = yield this.service.advanceAudit.getAuditors(advance.id, advance.times);
+            advance.curAuditor = yield this.service.advanceAudit.getCurAuditor(advance.id, advance.times);
 
             // 获取最新的期
             // advance.highOrder = yield this.service.advance.getLastestAdvance(this.tender.id, type, true)
 
-            this.advance = advance
-            yield next
+            this.advance = advance;
+            yield next;
         } catch (err) {
-            console.log('err:', err)
-            this.helper.log(err)
+            console.log('err:', err);
+            this.helper.log(err);
             // 输出错误到日志
             if (err.stack) {
-                this.logger.error(err)
+                this.logger.error(err);
             } else {
                 this.getLogger('fail').info(
                     JSON.stringify({
                         error: err,
                         project: this.session.sessionProject,
                         user: this.session.sessionUser,
-                        body: this.session.body
+                        body: this.session.body,
                     })
-                )
+                );
             }
             // 重定向值标段管理
-            this.redirect(this.request.headers.referer)
+            this.redirect(this.request.headers.referer);
         }
-    }
-}
+    };
+};

+ 2 - 2
app/public/js/advance_audit.js

@@ -95,7 +95,6 @@ $(document).ready(function () {
                     checkModal(false)
                 }
                 break;
-
             default:
                 break;
         }
@@ -113,7 +112,6 @@ $(document).ready(function () {
             window.location.reload()
         }, () => {
             window.location.reload()
-
         })
     })
 
@@ -171,5 +169,7 @@ $(document).ready(function () {
         }
         return t.split('').reverse().join('') + '.' + r;
     }
+
+
 })
 

+ 44 - 52
app/service/advance.js

@@ -1,47 +1,39 @@
-'use strict'
+'use strict';
 
-const auditConst = require('../const/audit').advance
+const auditConst = require('../const/audit').advance;
 
 module.exports = app => {
     class Advance extends app.BaseService {
         constructor(ctx) {
-            super(ctx)
-            this.tableName = 'advance_pay'
+            super(ctx);
+            this.tableName = 'advance_pay';
         }
-
         /**
          * 获取预付款列表
          * @param {Number} tid 标段id
          * @param {Number} type 预付款类型
          */
         async getAdvanceList(tid, type) {
-            this.initSqlBuilder()
+            this.initSqlBuilder();
             this.sqlBuilder.setAndWhere('tid', {
                 value: tid,
-                operate: '='
-            })
+                operate: '=',
+            });
             this.sqlBuilder.setAndWhere('type', {
                 value: type,
-                operate: '='
-            })
-            this.sqlBuilder.orderBy = [['order', 'desc']]
-            const [sql, sqlParam] = this.sqlBuilder.build(this.tableName)
-            const advance = await this.db.query(sql, sqlParam)
+                operate: '=',
+            });
+            this.sqlBuilder.orderBy = [['order', 'desc']];
+            const [sql, sqlParam] = this.sqlBuilder.build(this.tableName);
+            const advance = await this.db.query(sql, sqlParam);
             for (const item of advance) {
-                item.curAuditor = await this.ctx.service.advanceAudit.getAuditorByStatus(item.id, item.status, item.times)
+                item.curAuditor = await this.ctx.service.advanceAudit.getAuditorByStatus(item.id, item.status, item.times);
                 if (item.status === auditConst.status.checkNoPre) {
-                    item.curAuditor2 = await this.ctx.service.advanceAudit.getAuditorByStatus(item.id, auditConst.status.checking)
+                    item.curAuditor2 = await this.ctx.service.advanceAudit.getAuditorByStatus(item.id, auditConst.status.checking);
                 }
             }
-            // const newRecord = advance.map(async item => {
-            //     item.curAuditor = await this.ctx.service.advanceAudit.getAuditorByStatus(item.id, item.status, item.times)
-            //     if (item.status === auditConst.status.checkNoPre) {
-            //         item.curAuditor2 = await this.ctx.service.advanceAudit.getAuditorByStatus(item.id, auditConst.status.checking)
-            //     }
-            //     return item
-            // })
-            // console.log('newRecord', newRecord)
-            return advance
+            console.log(advance);
+            return advance;
         }
 
         /**
@@ -52,25 +44,25 @@ module.exports = app => {
          * @return {Promise<*>} 实例结果集
          */
         async getLastestAdvance(tid, type, includeUnCheck = false) {
-            this.initSqlBuilder()
+            this.initSqlBuilder();
             this.sqlBuilder.setAndWhere('tid', {
                 value: tid,
-                operate: '='
-            })
+                operate: '=',
+            });
             this.sqlBuilder.setAndWhere('type', {
                 value: type,
-                operate: '='
-            })
+                operate: '=',
+            });
             if (!includeUnCheck) {
                 this.sqlBuilder.setAndWhere('status', {
                     value: auditConst.status.uncheck,
-                    operate: '!='
-                })
+                    operate: '!=',
+                });
             }
-            this.sqlBuilder.orderBy = [['order', 'desc']]
-            const [sql, sqlParam] = this.sqlBuilder.build(this.tableName)
-            const advance = await this.db.queryOne(sql, sqlParam)
-            return advance
+            this.sqlBuilder.orderBy = [['order', 'desc']];
+            const [sql, sqlParam] = this.sqlBuilder.build(this.tableName);
+            const advance = await this.db.queryOne(sql, sqlParam);
+            return advance;
         }
 
         /**
@@ -79,13 +71,13 @@ module.exports = app => {
          * @return {Promise<*>} 插入结果集
          */
         async createRecord(type) {
-            const { ctx } = this
-            const uid = ctx.session.sessionUser.accountId
-            const tid = ctx.tender.id
-            const latestOrder = await this.getLastestAdvance(tid, type)
-            const order = !latestOrder ? 1 : latestOrder.order + 1
-            const record = await this.db.insert(this.tableName, { type, uid, tid, status: auditConst.status.uncheck, order })
-            return await this.getDataById(record.insertId)
+            const { ctx } = this;
+            const uid = ctx.session.sessionUser.accountId;
+            const tid = ctx.tender.id;
+            const latestOrder = await this.getLastestAdvance(tid, type);
+            const order = !latestOrder ? 1 : latestOrder.order + 1;
+            const record = await this.db.insert(this.tableName, { type, uid, tid, status: auditConst.status.uncheck, order });
+            return await this.getDataById(record.insertId);
         }
 
         /**
@@ -94,19 +86,19 @@ module.exports = app => {
          * @param {Number} type 预付款类型
          */
         async getPreviousRecord(tid, type) {
-            this.initSqlBuilder()
+            this.initSqlBuilder();
             this.sqlBuilder.setAndWhere('tid', {
                 value: tid,
-                operate: '='
-            })
+                operate: '=',
+            });
             this.sqlBuilder.setAndWhere('type', {
                 value: type,
-                operate: '='
-            })
-            this.sqlBuilder.orderBy = [['order', 'desc']]
-            const [sql, sqlParam] = this.sqlBuilder.build(this.tableName)
-            return await this.db.queryOne(sql, sqlParam)
+                operate: '=',
+            });
+            this.sqlBuilder.orderBy = [['order', 'desc']];
+            const [sql, sqlParam] = this.sqlBuilder.build(this.tableName);
+            return await this.db.queryOne(sql, sqlParam);
         }
     }
-    return Advance
-}
+    return Advance;
+};

+ 179 - 177
app/service/advance_audit.js

@@ -1,12 +1,12 @@
-'use strict'
+'use strict';
 
-const auditConst = require('../const/audit').advance
-const pushType = require('../const/audit').pushType
+const auditConst = require('../const/audit').advance;
+const pushType = require('../const/audit').pushType;
 module.exports = app => {
     class AdvanceAudit extends app.BaseService {
         constructor(ctx) {
-            super(ctx)
-            this.tableName = 'advance_audit'
+            super(ctx);
+            this.tableName = 'advance_audit';
         }
 
         /**
@@ -19,9 +19,9 @@ module.exports = app => {
             const sql =
                 'SELECT la.`audit_id`, pa.`name`, pa.`company`, pa.`role`, la.`times`, la.`vid`, la.`order` ' +
                 'FROM ?? AS la, ?? AS pa ' +
-                'WHERE la.`vid` = ? and la.`times` = ? and la.`audit_id` = pa.`id` GROUP BY la.`audit_id` ORDER BY la.`order`'
-            const sqlParam = [this.tableName, this.ctx.service.projectAccount.tableName, vid, times]
-            return await this.db.query(sql, sqlParam)
+                'WHERE la.`vid` = ? and la.`times` = ? and la.`audit_id` = pa.`id` GROUP BY la.`audit_id` ORDER BY la.`order`';
+            const sqlParam = [this.tableName, this.ctx.service.projectAccount.tableName, vid, times];
+            return await this.db.query(sql, sqlParam);
         }
 
         /**
@@ -31,9 +31,9 @@ module.exports = app => {
          * @return {Promise<Array>} 查询结果集(包括原报)
          */
         async getAuditorsWithOwner(vid, times = 1) {
-            const result = await this.getAuditGroupByList(vid, times)
+            const result = await this.getAuditGroupByList(vid, times);
             const sql =
-                'SELECT pa.`id` As aid, pa.`name`, pa.`company`, pa.`role`, ? As times, ? As vid, 0 As `order`' +
+                'SELECT pa.`id` As audit_id, pa.`name`, pa.`company`, pa.`role`, ? As times, ? As vid, 0 As `order`' +
                 '  FROM ' +
                 this.ctx.service.advance.tableName +
                 ' As s' +
@@ -41,11 +41,11 @@ module.exports = app => {
                 this.ctx.service.projectAccount.tableName +
                 ' As pa' +
                 '  ON s.uid = pa.id' +
-                '  WHERE s.id = ?'
-            const sqlParam = [times, vid, vid]
-            const user = await this.db.queryOne(sql, sqlParam)
-            result.unshift(user)
-            return result
+                '  WHERE s.id = ?';
+            const sqlParam = [times, vid, vid];
+            const user = await this.db.queryOne(sql, sqlParam);
+            result.unshift(user);
+            return result;
         }
 
         /**
@@ -55,30 +55,32 @@ module.exports = app => {
          * @return {Number} 审核顺序
          */
         async getNewOrder(vid, times = 1) {
-            const sql = 'SELECT Max(??) As max_order FROM ?? Where `vid` = ? and `times` = ?'
-            const sqlParam = ['order', this.tableName, vid, times]
-            const result = await this.db.queryOne(sql, sqlParam)
-            return result && result.max_order ? result.max_order + 1 : 1
+            const sql = 'SELECT Max(??) As max_order FROM ?? Where `vid` = ? and `times` = ?';
+            const sqlParam = ['order', this.tableName, vid, times];
+            const result = await this.db.queryOne(sql, sqlParam);
+            return result && result.max_order ? result.max_order + 1 : 1;
         }
 
         /**
          * 新增审核人
+         * @param {Number} tid - 标段id
          * @param {Number} vid - 预付款id
          * @param {Number} audit_id - 审核人id
          * @param {Number} times - 第几次审批
          * @return {Boolean} 是否插入成功
          */
-        async addAuditor(vid, audit_id, times = 1) {
-            const newOrder = await this.getNewOrder(vid, times)
+        async addAuditor(tid, vid, audit_id, times = 1) {
+            const newOrder = await this.getNewOrder(vid, times);
             const record = {
+                tid,
                 vid,
                 audit_id,
                 times,
                 order: newOrder,
-                status: auditConst.status.uncheck
-            }
-            const result = await this.db.insert(this.tableName, record)
-            return result && result.affectedRows === 1
+                status: auditConst.status.uncheck,
+            };
+            const result = await this.db.insert(this.tableName, record);
+            return result && result.affectedRows === 1;
         }
 
         /**
@@ -89,21 +91,21 @@ module.exports = app => {
          * @return {Promise<boolean>}
          */
         async deleteAuditor(vid, audit_id, times = 1) {
-            const transaction = await this.db.beginTransaction()
+            const transaction = await this.db.beginTransaction();
             try {
-                const condition = { vid, audit_id, times }
-                const auditor = await this.getDataByCondition(condition)
+                const condition = { vid, audit_id, times };
+                const auditor = await this.getDataByCondition(condition);
                 if (!auditor) {
-                    throw '该审核人不存在'
+                    throw '该审核人不存在';
                 }
-                await this._syncOrderByDelete(transaction, vid, auditor.order, times)
-                await transaction.delete(this.tableName, condition)
-                await transaction.commit()
+                await this._syncOrderByDelete(transaction, vid, auditor.order, times);
+                await transaction.delete(this.tableName, condition);
+                await transaction.commit();
             } catch (err) {
-                await transaction.rollback()
-                throw err
+                await transaction.rollback();
+                throw err;
             }
-            return true
+            return true;
         }
 
         /**
@@ -116,26 +118,26 @@ module.exports = app => {
          * @private
          */
         async _syncOrderByDelete(transaction, vid, order, times) {
-            this.initSqlBuilder()
+            this.initSqlBuilder();
             this.sqlBuilder.setAndWhere('vid', {
                 value: this.db.escape(vid),
-                operate: '='
-            })
+                operate: '=',
+            });
             this.sqlBuilder.setAndWhere('order', {
                 value: order,
-                operate: '>='
-            })
+                operate: '>=',
+            });
             this.sqlBuilder.setAndWhere('times', {
                 value: times,
-                operate: '='
-            })
+                operate: '=',
+            });
             this.sqlBuilder.setUpdateData('order', {
                 value: 1,
-                selfOperate: '-'
-            })
-            const [sql, sqlParam] = this.sqlBuilder.build(this.tableName, 'update')
-            const data = await transaction.query(sql, sqlParam)
-            return data
+                selfOperate: '-',
+            });
+            const [sql, sqlParam] = this.sqlBuilder.build(this.tableName, 'update');
+            const data = await transaction.query(sql, sqlParam);
+            return data;
         }
 
         /**
@@ -149,9 +151,9 @@ module.exports = app => {
                 'SELECT la.`audit_id`, pa.`name`, pa.`company`, pa.`role`, pa.`mobile`, pa.`telephone`, la.`times`, la.`order`, la.`status`, la.`opinion`, la.`create_time`, la.`end_time` ' +
                 'FROM ?? AS la, ?? AS pa ' +
                 'WHERE la.`vid` = ? and la.`status` = ? and la.`times` = ?' +
-                '    and la.`audit_id` = pa.`id`'
-            const sqlParam = [this.tableName, this.ctx.service.projectAccount.tableName, vid, auditConst.status.checking, times]
-            return await this.db.queryOne(sql, sqlParam)
+                '    and la.`audit_id` = pa.`id`';
+            const sqlParam = [this.tableName, this.ctx.service.projectAccount.tableName, vid, auditConst.status.checking, times];
+            return await this.db.queryOne(sql, sqlParam);
         }
 
         /**
@@ -164,16 +166,16 @@ module.exports = app => {
             const sql =
                 'SELECT la.`audit_id`, pa.`name`, pa.`company`, pa.`role`, pa.`mobile`, pa.`telephone`, la.`times`, la.`order`, la.`status`, la.`opinion`, la.`create_time`, la.`end_time`, g.`sort` ' +
                 'FROM ?? AS la, ?? AS pa, (SELECT `audit_id`,(@i:=@i+1) as `sort` FROM ??, (select @i:=0) as it WHERE `vid` = ? AND `times` = ? GROUP BY `audit_id`) as g ' +
-                'WHERE la.`vid` = ? and la.`times` = ? and la.`audit_id` = pa.`id` and g.`audit_id` = la.`audit_id` order by la.`order`'
-            const sqlParam = [this.tableName, this.ctx.service.projectAccount.tableName, this.tableName, vid, times, vid, times]
-            const result = await this.db.query(sql, sqlParam)
-            const sql2 = 'SELECT COUNT(a.`audit_id`) as num FROM (SELECT `audit_id` FROM ?? WHERE `vid` = ? AND `times` = ? GROUP BY `audit_id`) as a'
-            const sqlParam2 = [this.tableName, vid, times]
-            const count = await this.db.queryOne(sql2, sqlParam2)
+                'WHERE la.`vid` = ? and la.`times` = ? and la.`audit_id` = pa.`id` and g.`audit_id` = la.`audit_id` order by la.`order`';
+            const sqlParam = [this.tableName, this.ctx.service.projectAccount.tableName, this.tableName, vid, times, vid, times];
+            const result = await this.db.query(sql, sqlParam);
+            const sql2 = 'SELECT COUNT(a.`audit_id`) as num FROM (SELECT `audit_id` FROM ?? WHERE `vid` = ? AND `times` = ? GROUP BY `audit_id`) as a';
+            const sqlParam2 = [this.tableName, vid, times];
+            const count = await this.db.queryOne(sql2, sqlParam2);
             for (const i in result) {
-                result[i].max_sort = count.num
+                result[i].max_sort = count.num;
             }
-            return result
+            return result;
         }
 
         /**
@@ -188,9 +190,9 @@ module.exports = app => {
                 'SELECT la.`audit_id`, pa.`name`, pa.`company`, pa.`role`, pa.`mobile`, pa.`telephone`, la.`times`, la.`order`, la.`status`, la.`opinion`, la.`create_time`, la.`end_time` ' +
                 'FROM ?? AS la, ?? AS pa ' +
                 'WHERE la.`vid` = ? and la.`audit_id` = ? and la.`times` = ?' +
-                '    and la.`audit_id` = pa.`id`'
-            const sqlParam = [this.tableName, this.ctx.service.projectAccount.tableName, vid, audit_id, times]
-            return await this.db.queryOne(sql, sqlParam)
+                '    and la.`audit_id` = pa.`id`';
+            const sqlParam = [this.tableName, this.ctx.service.projectAccount.tableName, vid, audit_id, times];
+            return await this.db.queryOne(sql, sqlParam);
         }
 
         /**
@@ -200,150 +202,150 @@ module.exports = app => {
          * @param {Object} data - 载荷
          */
         async start(vid, times = 1, data) {
-            const audit = await this.getDataByCondition({ vid, times, order: 1 })
+            const audit = await this.getDataByCondition({ vid, times, order: 1 });
             if (!audit) {
-                throw '请先选择审批人,再上报数据'
+                throw '请先选择审批人,再上报数据';
             }
-            const transaction = await this.db.beginTransaction()
+            const transaction = await this.db.beginTransaction();
             try {
-                await transaction.update(this.tableName, { id: audit.id, status: auditConst.status.checking, create_time: new Date() })
+                await transaction.update(this.tableName, { id: audit.id, status: auditConst.status.checking, create_time: new Date() });
                 await transaction.update(this.ctx.service.advance.tableName, {
                     id: audit.vid,
-                    ...data
-                })
-                await transaction.commit()
+                    ...data,
+                });
+                await transaction.commit();
             } catch (err) {
-                await transaction.rollback()
-                throw err
+                await transaction.rollback();
+                throw err;
             }
-            return true
+            return true;
         }
 
         async _checked(pid, advanceId, checkData, times) {
-            const time = new Date()
+            const time = new Date();
 
             // 整理当前流程审核人状态更新
-            const audit = await this.getDataByCondition({ vid: advanceId, times, status: auditConst.status.checking })
+            const audit = await this.getDataByCondition({ vid: advanceId, times, status: auditConst.status.checking });
             if (!audit) {
-                throw '审核数据错误'
+                throw '审核数据错误';
             }
 
             // 获取审核人列表
-            const sql = 'SELECT `tid`, `vid`, `audit_id`, `order` FROM ?? WHERE `vid` = ? and `times` = ? GROUP BY `audit_id` ORDER BY `id` ASC'
-            const sqlParam = [this.tableName, advanceId, times]
-            const auditors = await this.db.query(sql, sqlParam)
+            const sql = 'SELECT `tid`, `vid`, `audit_id`, `order` FROM ?? WHERE `vid` = ? and `times` = ? GROUP BY `audit_id` ORDER BY `id` ASC';
+            const sqlParam = [this.tableName, advanceId, times];
+            const auditors = await this.db.query(sql, sqlParam);
 
-            const nextAudit = await this.getDataByCondition({ vid: advanceId, times, order: audit.order + 1 })
+            const nextAudit = await this.getDataByCondition({ vid: advanceId, times, order: audit.order + 1 });
 
-            const transaction = await this.db.beginTransaction()
+            const transaction = await this.db.beginTransaction();
             try {
-                await transaction.update(this.tableName, { id: audit.id, status: checkData.checkType, opinion: checkData.opinion, end_time: time })
+                await transaction.update(this.tableName, { id: audit.id, status: checkData.checkType, opinion: checkData.opinion, end_time: time });
                 // 获取推送必要信息
-                const noticeContent = await this.getNoticeContent(pid, audit.tid, advanceId, audit.audit_id)
+                const noticeContent = await this.getNoticeContent(pid, audit.tid, advanceId, audit.audit_id);
                 // 添加推送
-                const records = [{ pid, type: pushType.advance, uid: this.ctx.advance.uid, status: auditConst.status.checked, content: noticeContent }]
+                const records = [{ pid, type: pushType.advance, uid: this.ctx.advance.uid, status: auditConst.status.checked, content: noticeContent }];
                 auditors.forEach(audit => {
-                    records.push({ pid, type: pushType.advance, uid: audit.aid, status: auditConst.status.checked, content: noticeContent })
-                })
-                await transaction.insert(this.ctx.service.notice.tableName, records)
+                    records.push({ pid, type: pushType.advance, uid: audit.audit_id, status: auditConst.status.checked, content: noticeContent });
+                });
+                await transaction.insert(this.ctx.service.noticePush.tableName, records);
                 // 无下一审核人表示,审核结束
                 if (nextAudit) {
                     // 流程至下一审批人
-                    await transaction.update(this.tableName, { id: nextAudit.id, status: auditConst.status.checking, create_time: time })
+                    await transaction.update(this.tableName, { id: nextAudit.id, status: auditConst.status.checking, create_time: time });
 
                     // 同步期信息
                     await transaction.update(this.ctx.service.advance.tableName, {
                         id: advanceId,
-                        status: auditConst.status.checking
-                    })
+                        status: auditConst.status.checking,
+                    });
                 } else {
                     await transaction.update(this.ctx.service.advance.tableName, {
                         id: advanceId,
-                        status: checkData.checkType
-                    })
+                        status: checkData.checkType,
+                    });
                 }
-                await transaction.commit()
+                await transaction.commit();
             } catch (err) {
-                await transaction.rollback()
-                throw err
+                await transaction.rollback();
+                throw err;
             }
         }
 
         async _checkNo(pid, advanceId, checkData, times) {
-            const time = new Date()
+            const time = new Date();
             // 整理当前流程审核人状态更新
-            const audit = await this.getDataByCondition({ vid: advanceId, times, status: auditConst.status.checking })
+            const audit = await this.getDataByCondition({ vid: advanceId, times, status: auditConst.status.checking });
             if (!audit) {
-                throw '审核数据错误'
+                throw '审核数据错误';
             }
-            const sql = 'SELECT `tid`, `vid`, `audit_id`, `order` FROM ?? WHERE `vid` = ? and `times` = ? GROUP BY `audit_id` ORDER BY `id` ASC'
-            const sqlParam = [this.tableName, advanceId, times]
-            const auditors = await this.db.query(sql, sqlParam)
-            let order = 1
+            const sql = 'SELECT `tid`, `vid`, `audit_id`, `order` FROM ?? WHERE `vid` = ? and `times` = ? GROUP BY `audit_id` ORDER BY `id` ASC';
+            const sqlParam = [this.tableName, advanceId, times];
+            const auditors = await this.db.query(sql, sqlParam);
+            let order = 1;
             for (const a of auditors) {
-                a.times = times + 1
-                a.order = order
-                a.status = auditConst.status.uncheck
-                order++
+                a.times = times + 1;
+                a.order = order;
+                a.status = auditConst.status.uncheck;
+                order++;
             }
-            const transaction = await this.db.beginTransaction()
+            const transaction = await this.db.beginTransaction();
             try {
-                await transaction.update(this.tableName, { id: audit.id, status: checkData.checkType, opinion: checkData.opinion, end_time: time })
+                await transaction.update(this.tableName, { id: audit.id, status: checkData.checkType, opinion: checkData.opinion, end_time: time });
 
                 // 添加到消息推送表
-                const noticeContent = await this.getNoticeContent(pid, audit.tid, advanceId, audit.aid)
-                const records = [{ pid, type: pushType.advance, uid: this.ctx.advance.uid, status: auditConst.status.checkNo, content: noticeContent }]
+                const noticeContent = await this.getNoticeContent(pid, audit.tid, advanceId, audit.audit_id);
+                const records = [{ pid, type: pushType.advance, uid: this.ctx.advance.uid, status: auditConst.status.checkNo, content: noticeContent }];
                 auditors.forEach(audit => {
-                    records.push({ pid, type: pushType.advance, uid: audit.aid, status: auditConst.status.checkNo, content: noticeContent })
-                })
-                await transaction.insert(this.ctx.service.notice.tableName, records)
+                    records.push({ pid, type: pushType.advance, uid: audit.audit_id, status: auditConst.status.checkNo, content: noticeContent });
+                });
+                await transaction.insert(this.ctx.service.noticePush.tableName, records);
 
                 // 同步期信息
                 await transaction.update(this.ctx.service.advance.tableName, {
                     id: advanceId,
                     status: checkData.checkType,
-                    times: times + 1
-                })
+                    times: times + 1,
+                });
                 // 拷贝新一次审核流程列表
-                await transaction.insert(this.tableName, auditors)
-                await transaction.commit()
+                await transaction.insert(this.tableName, auditors);
+                await transaction.commit();
             } catch (err) {
-                await transaction.rollback()
-                throw err
+                await transaction.rollback();
+                throw err;
             }
         }
 
         async _checkNoPre(pid, advanceId, checkData, times) {
-            const time = new Date()
+            const time = new Date();
             // 整理当前流程审核人状态更新
-            const audit = await this.getDataByCondition({ vid: advanceId, times, status: auditConst.status.checking })
+            const audit = await this.getDataByCondition({ vid: advanceId, times, status: auditConst.status.checking });
             if (!audit || audit.order <= 1) {
-                throw '审核数据错误'
+                throw '审核数据错误';
             }
             // 添加重新审批后,不能用order-1,取groupby值里的上一个才对
-            const auditors2 = await this.getAuditGroupByList(advanceId, times)
-            const auditorIndex = await auditors2.findIndex(function (item) {
-                return item.audit_id === audit.audit_id
-            })
-            const preAuditor = auditors2[auditorIndex - 1]
-            const noticeContent = await this.getNoticeContent(pid, audit.tid, advanceId, audit.aid)
-            const transaction = await this.db.beginTransaction()
+            const auditors2 = await this.getAuditGroupByList(advanceId, times);
+            const auditorIndex = await auditors2.findIndex(function(item) {
+                return item.audit_id === audit.audit_id;
+            });
+            const preAuditor = auditors2[auditorIndex - 1];
+            const noticeContent = await this.getNoticeContent(pid, audit.tid, advanceId, audit.audit_id);
+            const transaction = await this.db.beginTransaction();
             try {
                 // 添加到消息推送表
-                const records = [{ pid, type: pushType.advance, uid: this.ctx.advance.uid, status: auditConst.status.checkNoPre, content: noticeContent }]
+                const records = [{ pid, type: pushType.advance, uid: this.ctx.advance.uid, status: auditConst.status.checkNoPre, content: noticeContent }];
                 auditors2.forEach(audit => {
-                    records.push({ pid, type: pushType.advance, uid: audit.aid, status: auditConst.status.checkNoPre, content: noticeContent })
-                })
-                await transaction.insert(this.ctx.service.notice.tableName, records)
-                await transaction.update(this.tableName, { id: audit.id, status: checkData.checkType, opinion: checkData.opinion, end_time: time })
+                    records.push({ pid, type: pushType.advance, uid: audit.audit_id, status: auditConst.status.checkNoPre, content: noticeContent });
+                });
+                await transaction.insert(this.ctx.service.noticePush.tableName, records);
+                await transaction.update(this.tableName, { id: audit.id, status: checkData.checkType, opinion: checkData.opinion, end_time: time });
                 // 顺移气候审核人流程顺序
-                this.initSqlBuilder()
-                this.sqlBuilder.setAndWhere('vid', { value: advanceId, operate: '=' })
-                this.sqlBuilder.setAndWhere('order', { value: audit.order, operate: '>' })
-                this.sqlBuilder.setUpdateData('order', { value: 2, selfOperate: '+' })
-                const [sql, sqlParam] = this.sqlBuilder.build(this.tableName, 'update')
-                await transaction.query(sql, sqlParam)
-                const newAuditors = []
+                this.initSqlBuilder();
+                this.sqlBuilder.setAndWhere('vid', { value: advanceId, operate: '=' });
+                this.sqlBuilder.setAndWhere('order', { value: audit.order, operate: '>' });
+                this.sqlBuilder.setUpdateData('order', { value: 2, selfOperate: '+' });
+                const [sql, sqlParam] = this.sqlBuilder.build(this.tableName, 'update');
+                await transaction.query(sql, sqlParam);
+                const newAuditors = [];
                 newAuditors.push({
                     tid: audit.tid,
                     vid: audit.vid,
@@ -351,22 +353,22 @@ module.exports = app => {
                     times: audit.times,
                     order: audit.order + 1,
                     status: auditConst.status.checking,
-                    create_time: time
-                })
+                    create_time: time,
+                });
                 newAuditors.push({
                     tid: audit.tid,
                     vid: audit.vid,
                     audit_id: audit.audit_id,
                     times: audit.times,
                     order: audit.order + 2,
-                    status: auditConst.status.uncheck
-                })
+                    status: auditConst.status.uncheck,
+                });
 
-                await transaction.insert(this.tableName, newAuditors)
-                await transaction.commit()
+                await transaction.insert(this.tableName, newAuditors);
+                await transaction.commit();
             } catch (error) {
-                await transaction.rollback()
-                throw error
+                await transaction.rollback();
+                throw error;
             }
         }
 
@@ -379,21 +381,21 @@ module.exports = app => {
          */
         async check(advanceId, checkData, times = 1) {
             if (checkData.checkType !== auditConst.status.checked && checkData.checkType !== auditConst.status.checkNo && checkData.checkType !== auditConst.status.checkNoPre) {
-                throw '提交数据错误'
+                throw '提交数据错误';
             }
-            const pid = this.ctx.session.sessionProject.id
+            const pid = this.ctx.session.sessionProject.id;
             switch (checkData.checkType) {
                 case auditConst.status.checked:
-                    await this._checked(pid, advanceId, checkData, times)
-                    break
+                    await this._checked(pid, advanceId, checkData, times);
+                    break;
                 case auditConst.status.checkNo:
-                    await this._checkNo(pid, advanceId, checkData, times)
-                    break
+                    await this._checkNo(pid, advanceId, checkData, times);
+                    break;
                 case auditConst.status.checkNoPre:
-                    await this._checkNoPre(pid, advanceId, checkData, times)
-                    break
+                    await this._checkNoPre(pid, advanceId, checkData, times);
+                    break;
                 default:
-                    throw '无效审批操作'
+                    throw '无效审批操作';
             }
         }
 
@@ -404,7 +406,7 @@ module.exports = app => {
          * @param {Number} vid 预付款id
          * @param {Number} uid 审批人id
          */
-        async getAdvanceContent(pid, tid, vid, uid) {
+        async getNoticeContent(pid, tid, vid, uid) {
             const noticeSql =
                 'SELECT * FROM (SELECT ' +
                 '  t.`id` As `tid`, ad.`vid`, t.`name`, m.`order`, pa.`name` As `su_name`, pa.role As `su_role`' +
@@ -412,7 +414,7 @@ module.exports = app => {
                 '  LEFT JOIN ?? As m On t.`id` = m.`tid` AND m.`id` = ?' +
                 '  LEFT JOIN ?? As ad ON m.`id` = ad.`vid`' +
                 '  LEFT JOIN ?? As pa ON pa.`id` = ?' +
-                '  WHERE  t.`project_id` = ? ) as new_t GROUP BY new_t.`tid`'
+                '  WHERE  t.`project_id` = ? ) as new_t GROUP BY new_t.`tid`';
             const noticeSqlParam = [
                 this.ctx.service.tender.tableName,
                 tid,
@@ -421,10 +423,10 @@ module.exports = app => {
                 this.tableName,
                 this.ctx.service.projectAccount.tableName,
                 uid,
-                pid
-            ]
-            const content = await this.db.query(noticeSql, noticeSqlParam)
-            return content.length ? JSON.stringify(content[0]) : ''
+                pid,
+            ];
+            const content = await this.db.query(noticeSql, noticeSqlParam);
+            return content.length ? JSON.stringify(content[0]) : '';
         }
 
         /**
@@ -435,9 +437,9 @@ module.exports = app => {
          * @return {Object} auditor 审核人信息
          */
         async getAuditorByStatus(vid, status, times = 1) {
-            let auditor = null
-            let sql = ''
-            let sqlParam = ''
+            let auditor = null;
+            let sql = '';
+            let sqlParam = '';
             switch (status) {
                 case auditConst.status.checking:
                 case auditConst.status.checked:
@@ -445,24 +447,24 @@ module.exports = app => {
                     sql =
                         'SELECT la.`audit_id`, pa.`name`, pa.`company`, pa.`role`, la.`times`, la.`vid`, la.`order` ' +
                         'FROM ?? AS la, ?? AS pa ' +
-                        'WHERE la.`vid` = ? and la.`status` = ? and la.`audit_id` = pa.`id` order by la.`times` desc, la.`order` desc'
-                    sqlParam = [this.tableName, this.ctx.service.projectAccount.tableName, vid, status]
-                    auditor = await this.db.queryOne(sql, sqlParam)
-                    break
+                        'WHERE la.`vid` = ? and la.`status` = ? and la.`audit_id` = pa.`id` order by la.`times` desc, la.`order` desc';
+                    sqlParam = [this.tableName, this.ctx.service.projectAccount.tableName, vid, status];
+                    auditor = await this.db.queryOne(sql, sqlParam);
+                    break;
                 case auditConst.status.checkNo:
                     sql =
                         'SELECT la.`audit_id`, pa.`name`, pa.`company`, pa.`role`, la.`times`, la.`vid`, la.`order` ' +
                         'FROM ?? AS la, ?? AS pa ' +
-                        'WHERE la.`vid` = ? and la.`status` = ? and la.`times` = ? and la.`audit_id` = pa.`id` order by la.`times` desc, la.`order` desc'
-                    sqlParam = [this.tableName, this.ctx.service.projectAccount.tableName, vid, auditConst.status.checkNo, parseInt(times) - 1]
-                    auditor = await this.db.queryOne(sql, sqlParam)
-                    break
+                        'WHERE la.`vid` = ? and la.`status` = ? and la.`times` = ? and la.`audit_id` = pa.`id` order by la.`times` desc, la.`order` desc';
+                    sqlParam = [this.tableName, this.ctx.service.projectAccount.tableName, vid, auditConst.status.checkNo, parseInt(times) - 1];
+                    auditor = await this.db.queryOne(sql, sqlParam);
+                    break;
                 case auditConst.status.uncheck:
                 default:
-                    break
+                    break;
             }
-            return auditor
+            return auditor;
         }
     }
-    return AdvanceAudit
-}
+    return AdvanceAudit;
+};

+ 4 - 0
app/service/tender.js

@@ -132,6 +132,9 @@ module.exports = app => {
                     // 参与审批 材料调差 的标段
                     '    OR (t.`ledger_status` = ' + auditConst.ledger.status.checked + ' AND ' +
                     '        t.id IN ( SELECT ma.`tid` FROM ?? AS ma WHERE ma.`aid` = ? GROUP BY ma.`tid`))' +
+                    // 参与审批 预付款 的标段
+                    '    OR (t.`ledger_status` = ' + auditConst.ledger.status.checked + ' AND ' +
+                    '        t.id IN ( SELECT ad.`tid` FROM ?? AS ad WHERE ad.`audit_id` = ? GROUP BY ad.`tid`))' +
                     // 未参与,但可见的标段
                     ') ORDER BY CONVERT(t.`name` USING GBK) ASC';
                 sqlParam = [this.tableName, this.ctx.service.projectAccount.tableName, session.sessionProject.id, session.sessionUser.accountId,
@@ -140,6 +143,7 @@ module.exports = app => {
                     this.ctx.service.changeAudit.tableName, session.sessionUser.accountId,
                     this.ctx.service.reviseAudit.tableName, session.sessionUser.accountId,
                     this.ctx.service.materialAudit.tableName, session.sessionUser.accountId,
+                    this.ctx.service.advanceAudit.tableName, session.sessionUser.accountId,
                 ];
             }
             const list = await this.db.query(sql, sqlParam);

+ 367 - 138
app/view/advance/detail.ejs

@@ -16,46 +16,48 @@
         <div class="c-body">
             <div class="sjs-height-0" style="height: 942px;">
                 <div class="col-8 mx-auto">
-                    <h4 class="mt-3 text-center">第<%- advance.order %>期 <%- advance.type === auditConst.type.start ? '开工' : '材料' %>预付款</h4>
+                    <h4 class="mt-3 text-center">第<%- advance.order %>期
+                        <%- advance.type === auditConst.type.start ? '开工' : '材料' %>预付款</h4>
                     <table class="table table-bordered">
                         <thead>
                             <tr>
                                 <th colspan="4" class="text-center">
-                                    <h5>签约<%- advance.type === auditConst.type.start ? '开工' : '材料' %>预付款:<%- ctx.helper.formatMoney(advancePayTotal) %> 元</h5>
+                                    <h5>签约<%- advance.type === auditConst.type.start ? '开工' : '材料' %>预付款:<%- ctx.helper.formatMoney(advancePayTotal) %>
+                                        元</h5>
                                 </th>
                             </tr>
                         </thead>
                         <tbody id="pay-content">
-                            <% if(isEdited) { %>
-                                <tr>
-                                    <th width="150">支付比例</th>
-                                    <td class="text-right">
-                                        <div class="input-group input-group-sm">
-                                            <input type="number" class="pay-input form-control nospin text-right" max="100" min="1"
-                                                placeholder="请填写支付比例,将自动计算本期金额" data-type="0">
-                                            <div class="input-group-append"><span class="input-group-text">%</span></div>
-                                        </div>
-                                    </td>
-                                    <th width="150">本期金额</th>
-                                    <td class="text-right">
-                                        <div class="input-group input-group-sm">
-                                            <input type="number"
-                                                class="pay-input form-control nospin text-right" min="1" placeholder="请填写本期金额,将自动计算支付比例" data-type="1">
-                                            <div class="input-group-append"><span class="input-group-text">元</span></div>
-                                        </div>
-                                    </td>
-                                </tr>
+                            <% if(isEdited && ctx.session.sessionUser.accountId === ctx.advance.uid) { %>
+                            <tr>
+                                <th width="150">支付比例</th>
+                                <td class="text-right">
+                                    <div class="input-group input-group-sm">
+                                        <input type="number" class="pay-input form-control nospin text-right" max="100"
+                                            min="1" placeholder="请填写支付比例,将自动计算本期金额" data-type="0">
+                                        <div class="input-group-append"><span class="input-group-text">%</span></div>
+                                    </div>
+                                </td>
+                                <th width="150">本期金额</th>
+                                <td class="text-right">
+                                    <div class="input-group input-group-sm">
+                                        <input type="number" class="pay-input form-control nospin text-right" min="1"
+                                            placeholder="请填写本期金额,将自动计算支付比例" data-type="1">
+                                        <div class="input-group-append"><span class="input-group-text">元</span></div>
+                                    </div>
+                                </td>
+                            </tr>
                             <% } else {%>
-                                <tr>
-                                    <th width="150">支付比例</th>
-                                    <td class="text-right">
-                                        <h5><%- advance.pay_ratio %>%</h5>
-                                    </td>
-                                    <th width="150">本期金额</th>
-                                    <td class="text-right">
-                                        <h5><%- ctx.helper.formatMoney(advance.cur_amount) %></h5>
-                                    </td>
-                                </tr>
+                            <tr>
+                                <th width="150">支付比例</th>
+                                <td class="text-right">
+                                    <h5><%- advance.pay_ratio %>%</h5>
+                                </td>
+                                <th width="150">本期金额</th>
+                                <td class="text-right">
+                                    <h5><%- ctx.helper.formatMoney(advance.cur_amount) %></h5>
+                                </td>
+                            </tr>
                             <% } %>
                             <tr>
                                 <th>截止上期</th>
@@ -70,8 +72,9 @@
                             <tr>
                                 <th>备注</th>
                                 <td colspan="3">
-                                    <textarea  id="ad-remark" class="form-control form-control-sm"
-                                    disabled="<%- isEdited ? false : true %>" value="<%- advance.remark %>"></textarea>
+                                    <textarea id="ad-remark" class="form-control form-control-sm"
+                                        <%- isEdited && ctx.session.sessionUser.accountId === ctx.advance.uid ? '' : 'disabled' %>
+                                        value="<%- advance.remark %>"></textarea>
                                 </td>
                             </tr>
                         </tbody>
@@ -97,81 +100,83 @@
                             </tr>
                         </tbody>
                     </table>
-                    <% if(isEdited) { %>
-                        <table class="table table-bordered mt-3">
-                            <thead>
-                                <tr>
-                                    <th colspan="2" class="text-center">审批流程</th>
-                                </tr>
-                            </thead>
-                            <tbody>
-                                <tr>
-                                    <td width="30%">
-                                        <div class="card">
-                                            <ul class="list-group list-group-flush" id="auditors2">
-                                                <% auditors.forEach((item, idx) => { %>
-                                                    <% if (idx === 0) { %>
-                                                        <li class="list-group-item" data-auditorId="<%- item.audit_id %>">
-                                                            <i class="fa fa fa-play-circle fa-rotate-90"></i> <%- item.name %>
-                                                            <small class="text-muted"><%- item.role %></small>
-                                                        </li>
-                                                    <% } else if(idx === auditors.length -1 && idx !== 0) { %>
-                                                        <li class="list-group-item" data-auditorId="<%- item.audit_id %>">
-                                                            <i class="fa fa fa-stop-circle"></i> <%- item.name %>
-                                                            <small class="text-muted"><%- item.role %></small>
-                                                        </li>
-                                                    <% } else {%>
-                                                        <li class="list-group-item" data-auditorId="<%- item.audit_id %>">
-                                                            <i class="fa fa-chevron-circle-down"></i> <%- item.name %>
-                                                            <small class="text-muted"><%- item.role %></small>
-                                                        </li>
-                                                    <% } %>
-                                                <% }) %>
-                                            </ul>
-                                        </div>
-                                    </td>
-                                    <td width="70%">
-                                        <div class="form-group">
-                                            <label>选择审批人</label>
-                                            <div class="input-group">
-                                                <div class="input-group-prepend">
-                                                    <select class="form-control" id="account_group">
-                                                        <% for (const dw in accountGroup) { %>
-                                                            <option value="<%= dw %>"><%= accountGroup[dw] %></option>
-                                                        <% } %>
-                                                    </select>
-                                                </div>
-                                                <select class="form-control" id="account_list">
-                                                    <option value="0">选择审批人</option>
-                                                    <% for (const account of accountList) { %>
-                                                        <% if (account.id !== ctx.session.sessionUser.accountId) { %>
-                                                            <option value="<%= account.id %>"><%= account.name %><% if (account.role !== '') { %>(<%= account.role %>)<% } %><% if (account.company !== '') { %> -<%= account.company %><% } %></option>
-                                                        <% } %>
+                    <% if(isEdited && ctx.session.sessionUser.accountId === ctx.advance.uid) { %>
+                    <table class="table table-bordered mt-3">
+                        <thead>
+                            <tr>
+                                <th colspan="2" class="text-center">审批流程</th>
+                            </tr>
+                        </thead>
+                        <tbody>
+                            <tr>
+                                <td width="30%">
+                                    <div class="card">
+                                        <ul class="list-group list-group-flush" id="auditors2">
+                                            <% auditors.forEach((item, idx) => { %>
+                                            <% if (idx === 0) { %>
+                                            <li class="list-group-item" data-auditorId="<%- item.audit_id %>">
+                                                <i class="fa fa fa-play-circle fa-rotate-90"></i> <%- item.name %>
+                                                <small class="text-muted"><%- item.role %></small>
+                                            </li>
+                                            <% } else if(idx === auditors.length -1 && idx !== 0) { %>
+                                            <li class="list-group-item" data-auditorId="<%- item.audit_id %>">
+                                                <i class="fa fa fa-stop-circle"></i> <%- item.name %>
+                                                <small class="text-muted"><%- item.role %></small>
+                                            </li>
+                                            <% } else {%>
+                                            <li class="list-group-item" data-auditorId="<%- item.audit_id %>">
+                                                <i class="fa fa-chevron-circle-down"></i> <%- item.name %>
+                                                <small class="text-muted"><%- item.role %></small>
+                                            </li>
+                                            <% } %>
+                                            <% }) %>
+                                        </ul>
+                                    </div>
+                                </td>
+                                <td width="70%">
+                                    <div class="form-group">
+                                        <label>选择审批人</label>
+                                        <div class="input-group">
+                                            <div class="input-group-prepend">
+                                                <select class="form-control" id="account_group">
+                                                    <% for (const dw in accountGroup) { %>
+                                                    <option value="<%= dw %>"><%= accountGroup[dw] %></option>
                                                     <% } %>
                                                 </select>
                                             </div>
+                                            <select class="form-control" id="account_list">
+                                                <option value="0">选择审批人</option>
+                                                <% for (const account of accountList) { %>
+                                                <% if (account.id !== ctx.session.sessionUser.accountId) { %>
+                                                <option value="<%= account.id %>">
+                                                    <%= account.name %><% if (account.role !== '') { %>(<%= account.role %>)<% } %><% if (account.company !== '') { %>
+                                                    -<%= account.company %><% } %></option>
+                                                <% } %>
+                                                <% } %>
+                                            </select>
                                         </div>
-                                        <div class="card mt-3">
-                                            <div class="card-header">
-                                                审批流程
-                                            </div>
-                                            <ul class="list-group list-group-flush" id="auditors">
-                                                <% auditHistory && auditHistory[0] && auditHistory[0].length && auditHistory[0].forEach((item, idx) => { %>
-                                                    <li class="list-group-item" auditorId="<%- item.audit_id %>">
-                                                        <a href="" class="text-danger pull-right">移除</a><%- idx+1 %> <%- item.name %>
-                                                        <small class="text-muted"><%- item.role %>  </small>
-                                                        <p class="m-0 ml-2">
-                                                            <small class="text-muted"><%- item.company %></small>
-                                                        </p>
-                                                    </li>
-
-                                                <% }) %>
-                                            </ul>
+                                    </div>
+                                    <div class="card mt-3">
+                                        <div class="card-header">
+                                            审批流程
                                         </div>
-                                    </td>
-                                </tr>
-                            </tbody>
-                        </table>
+                                        <ul class="list-group list-group-flush" id="auditors">
+                                            <% auditHistory && auditHistory[0] && auditHistory[0].length && auditHistory[0].forEach((item, idx) => { %>
+                                            <li class="list-group-item" auditorId="<%- item.audit_id %>">
+                                                <a href="" class="text-danger pull-right">移除</a><%- idx+1 %>
+                                                <%- item.name %>
+                                                <small class="text-muted"><%- item.role %> </small>
+                                                <p class="m-0 ml-2">
+                                                    <small class="text-muted"><%- item.company %></small>
+                                                </p>
+                                            </li>
+                                            <% }) %>
+                                        </ul>
+                                    </div>
+                                </td>
+                            </tr>
+                        </tbody>
+                    </table>
                     <% } else {%>
                     <table class="table table-bordered mt-3">
                         <thead>
@@ -185,42 +190,266 @@
                                     <div class="card">
                                         <ul class="list-group list-group-flush">
                                             <% auditors.forEach((item, idx) => { %>
-                                                <% if (idx === 0) { %>
-                                                    <li class="list-group-item" data-auditorId="<%- item.audit_id %>">
-                                                        <i class="fa fa fa-play-circle fa-rotate-90"></i> <%- item.name %>
-                                                        <small class="text-muted"><%- item.role %></small>
-                                                    </li>
-                                                <% } else if(idx === auditors.length -1 && idx !== 0) { %>
-                                                    <li class="list-group-item" data-auditorId="<%- item.audit_id %>">
-                                                        <i class="fa fa fa-stop-circle"></i> <%- item.name %>
-                                                        <small class="text-muted"><%- item.role %></small>
-                                                    </li>
-                                                <% } else {%>
-                                                    <li class="list-group-item" data-auditorId="<%- item.audit_id %>">
-                                                        <i class="fa fa-chevron-circle-down"></i> <%- item.name %>
-                                                        <small class="text-muted"><%- item.role %></small>
-                                                    </li>
-                                                <% } %>
+                                            <% if (idx === 0) { %>
+                                            <li class="list-group-item" data-auditorId="<%- item.audit_id %>">
+                                                <i class="fa fa fa-play-circle fa-rotate-90"></i> <%- item.name %>
+                                                <small class="text-muted"><%- item.role %></small>
+                                            </li>
+                                            <% } else if(idx === auditors.length -1 && idx !== 0) { %>
+                                            <li class="list-group-item" data-auditorId="<%- item.audit_id %>">
+                                                <i class="fa fa fa-stop-circle"></i> <%- item.name %>
+                                                <small class="text-muted"><%- item.role %></small>
+                                            </li>
+                                            <% } else {%>
+                                            <li class="list-group-item" data-auditorId="<%- item.audit_id %>">
+                                                <i class="fa fa-chevron-circle-down"></i> <%- item.name %>
+                                                <small class="text-muted"><%- item.role %></small>
+                                            </li>
+                                            <% } %>
                                             <% }) %>
                                         </ul>
                                     </div>
                                 </td>
                                 <td width="70%">
-                                    <% auditHistory.forEach(auditors => { %>
-                                        <div class="card mb-1">
-                                            <ul class="list-group list-group-flush">
-                                                <% auditors.forEach(auditor => { %>
-                                                    <li class="list-group-item">
-                                                        <span class="text-success pull-right">上报</span>
-                                                        <h5 class="card-title"><i
-                                                                class="fa fa-play-circle fa-rotate-90 text-success"></i> 布尔
-                                                            <small class="text-muted">施工</small></h5>
-                                                        <p class="card-text">2017-11-25</p>
+                                    <% auditHistory.forEach((auditors, idx) => { %>
+                                        <div class="text-center text-muted"><%- idx+1 %>#</div>
+                                        <ul class="timeline-list list-unstyled mt-2">
+                                            <% auditors.forEach((auditor, idx) => { %>
+                                                <% if (idx === 0) { %>
+                                                    <li class="timeline-list-item pb-2">
+                                                        <div class="timeline-item-date"><%- ctx.helper.formatDate(advance.create_time) %>
+                                                        </div>
+                                                        <div class="timeline-item-tail"></div>
+                                                        <div class="timeline-item-icon bg-success text-light">
+                                                            <i class="fa fa-caret-down"></i>
+                                                        </div>
+                                                        <div class="timeline-item-content">
+                                                            <div class="card">
+                                                                <div class="card-body p-3">
+                                                                    <div class="card-text">
+                                                                        <p class="mb-1"><span class="h5"><%- advance.user.name %></span><span
+                                                                                class="pull-right text-success">上报审批</span></p>
+                                                                        <p class="text-muted mb-0"><%- advance.user.role %></p>
+                                                                    </div>
+                                                                </div>
+                                                            </div>
+                                                        </div>
                                                     </li>
-                                                <% }) %>
-                                            </ul>
-                                        </div>
+                                                    <li class="timeline-list-item pb-2">
+                                                        <div class="timeline-item-date"><%- ctx.helper.formatDate(advance.create_time) %>
+                                                        </div>
+                                                        <div class="timeline-item-tail"></div>
+                                                        <div class="timeline-item-icon bg-success text-light">
+                                                            <i class="fa fa-check"></i>
+                                                        </div>
+                                                        <div class="timeline-item-content">
+                                                            <div class="card">
+                                                                <div class="card-body p-3">
+                                                                    <div class="card-text">
+                                                                        <p class="mb-1"><span class="h5"><%- auditor.name %></span><span
+                                                                                class="pull-right <%- auditConst.statusClass[auditor.status] %>"><%- auditConst.statusString[auditor.status] %></span></p>
+                                                                        <p class="text-muted mb-0"><%- auditor.role %></p>
+                                                                    </div>
+                                                                </div>
+                                                                <!--审批意见-->
+                                                                <% if (auditor.opinion) { %>
+                                                                    <div class="card-body p-3 border-top">
+                                                                        <p><%- auditor.opinion %></p>
+                                                                    </div>
+                                                                <% } %>
+                                                            </div>
+                                                        </div>
+                                                    </li>
+                                                <% } else if(idx === auditor.length -1 ) {%>
+
+                                                <% } %>
+
+                                            <% }) %>
+                                        </ul>
                                     <% }) %>
+                                    <!--审批次1-->
+                                    <div class="text-center text-muted">1#</div>
+                                    <ul class="timeline-list list-unstyled mt-2">
+                                        <li class="timeline-list-item pb-2">
+                                            <div class="timeline-item-date">2020<span>06-01</span><span>13:22:01</span>
+                                            </div>
+                                            <div class="timeline-item-tail"></div>
+                                            <div class="timeline-item-icon bg-success text-light">
+                                                <i class="fa fa-caret-down"></i>
+                                            </div>
+                                            <div class="timeline-item-content">
+                                                <div class="card">
+                                                    <div class="card-body p-3">
+                                                        <div class="card-text">
+                                                            <p class="mb-1"><span class="h5">布尔</span><span
+                                                                    class="pull-right text-success">上报审批</span></p>
+                                                            <p class="text-muted mb-0">合同计量工程师</p>
+                                                        </div>
+                                                    </div>
+                                                </div>
+                                            </div>
+                                        </li>
+                                        <li class="timeline-list-item pb-2">
+                                            <div class="timeline-item-date">2020<span>06-01</span><span>13:20:01</span>
+                                            </div>
+                                            <div class="timeline-item-tail"></div>
+                                            <div class="timeline-item-icon bg-success text-light">
+                                                <i class="fa fa-check"></i>
+                                            </div>
+                                            <div class="timeline-item-content">
+                                                <div class="card">
+                                                    <div class="card-body p-3">
+                                                        <div class="card-text">
+                                                            <p class="mb-1"><span class="h5">张三</span><span
+                                                                    class="pull-right text-success">审批通过</span></p>
+                                                            <p class="text-muted mb-0">总监理工程师</p>
+                                                        </div>
+                                                    </div>
+                                                    <!--审批意见-->
+                                                    <div class="card-body p-3 border-top">
+                                                        <div class="">
+                                                            这是审批意见文本,内容不算很长。
+                                                        </div>
+                                                    </div>
+                                                </div>
+                                            </div>
+                                        </li>
+                                        <li class="timeline-list-item pb-2">
+                                            <div class="timeline-item-date">2020<span>06-01</span><span>13:20:01</span>
+                                            </div>
+                                            <div class="timeline-item-tail"></div>
+                                            <div class="timeline-item-icon bg-warning text-light">
+                                                <i class="fa fa-level-up"></i>
+                                            </div>
+                                            <div class="timeline-item-content">
+                                                <div id="" class="card">
+                                                    <div class="card-body p-3">
+                                                        <div class="card-text">
+                                                            <p class="mb-1"><span class="h5">王五</span><span
+                                                                    class="pull-right text-warning">审批退回 布尔</span></p>
+                                                            <p class="text-muted mb-0">项目办总工</p>
+                                                        </div>
+                                                    </div>
+                                                    <!--审批意见-->
+                                                    <div class="card-body p-3 border-top">
+                                                        <div class="">
+                                                            这是审批意见文本,内容不算很长。
+                                                        </div>
+                                                    </div>
+                                                </div>
+                                            </div>
+                                        </li>
+                                        <li class="timeline-list-item pb-2">
+                                            <!-- <div class="timeline-item-tail"></div> -->
+                                            <div class="timeline-item-icon bg-secondary text-light">
+                                            </div>
+                                            <div class="timeline-item-content">
+                                                <div id="" class="card">
+                                                    <div class="card-body p-3">
+                                                        <div class="card-text">
+                                                            <p class="mb-1"><span class="h5">李四</span><span
+                                                                    class="pull-right text-warning"></span></p>
+                                                            <p class="text-muted mb-0">项目办主任</p>
+                                                        </div>
+                                                    </div>
+                                                </div>
+                                            </div>
+                                        </li>
+                                    </ul>
+                                    <!--收起历史流程-->
+                                    <div class="text-right"><a href="#">收起历史审批流程</a></div>
+                                    <!--审批次2-->
+                                    <div class="text-center text-muted">2#</div>
+                                    <ul class="timeline-list list-unstyled mt-2">
+                                        <li class="timeline-list-item pb-2">
+                                            <div class="timeline-item-date">2020<span>06-01</span><span>13:22:01</span>
+                                            </div>
+                                            <div class="timeline-item-tail"></div>
+                                            <div class="timeline-item-icon bg-success text-light">
+                                                <i class="fa fa-caret-down"></i>
+                                            </div>
+                                            <div class="timeline-item-content">
+                                                <div class="card">
+                                                    <div class="card-body p-3">
+                                                        <div class="card-text">
+                                                            <p class="mb-1"><span class="h5">布尔</span><span
+                                                                    class="pull-right text-success">上报审批</span></p>
+                                                            <p class="text-muted mb-0">合同计量工程师</p>
+                                                        </div>
+                                                    </div>
+                                                </div>
+                                            </div>
+                                        </li>
+                                        <li class="timeline-list-item pb-2">
+                                            <div class="timeline-item-date">2020<span>06-01</span><span>13:22:01</span>
+                                            </div>
+                                            <div class="timeline-item-tail"></div>
+                                            <div class="timeline-item-icon bg-success text-light">
+                                                <i class="fa fa-check"></i>
+                                            </div>
+                                            <div class="timeline-item-content">
+                                                <div class="card">
+                                                    <div class="card-body p-3">
+                                                        <div class="card-text">
+                                                            <p class="mb-1"><span class="h5">张三</span><span
+                                                                    class="pull-right text-success">审批通过</span></p>
+                                                            <p class="text-muted mb-0">总监理工程师</p>
+                                                        </div>
+                                                    </div>
+                                                    <!--审批意见-->
+                                                    <div class="card-body p-3 border-top">
+                                                        <div class="">
+                                                            这是审批意见文本,内容不算很长。
+                                                        </div>
+                                                    </div>
+                                                </div>
+                                            </div>
+                                        </li>
+                                        <li class="timeline-list-item pb-2">
+                                            <div class="timeline-item-date">2020<span>06-01</span><span>13:22:01</span>
+                                            </div>
+                                            <div class="timeline-item-tail"></div>
+                                            <div class="timeline-item-icon bg-success text-light">
+                                                <i class="fa fa-check"></i>
+                                            </div>
+                                            <div class="timeline-item-content">
+                                                <div id="" class="card">
+                                                    <div class="card-body p-3">
+                                                        <div class="card-text">
+                                                            <p class="mb-1"><span class="h5">王五</span><span
+                                                                    class="pull-right text-success">审批通过</span></p>
+                                                            <p class="text-muted mb-0">项目办总工</p>
+                                                        </div>
+                                                    </div>
+                                                    <!--审批意见-->
+                                                    <div class="card-body p-3 border-top">
+                                                        <div class="">
+                                                            这是审批意见文本,内容不算很长。
+                                                        </div>
+                                                    </div>
+                                                </div>
+                                            </div>
+                                        </li>
+                                        <li class="timeline-list-item pb-2">
+                                            <div class="timeline-item-date">2020<span>06-01</span><span>13:22:01</span>
+                                            </div>
+                                            <!-- <div class="timeline-item-tail"></div> -->
+                                            <div class="timeline-item-icon bg-success text-light">
+                                                <i class="fa fa-check"></i>
+                                            </div>
+                                            <div class="timeline-item-content">
+                                                <div id="" class="card">
+                                                    <div class="card-body p-3">
+                                                        <div class="card-text">
+                                                            <p class="mb-1"><span class="h5">李四</span><span
+                                                                    class="pull-right text-success">审批通过</span></p>
+                                                            <p class="text-muted mb-0">项目办主任</p>
+                                                        </div>
+                                                    </div>
+                                                </div>
+                                            </div>
+                                        </li>
+                                    </ul>
                                 </td>
                             </tr>
                         </tbody>
@@ -237,11 +466,11 @@
     const prevAdvance = JSON.parse('<%- JSON.stringify(prevAdvance) %>');
     const isEdited = JSON.parse('<%- isEdited %>');
     const advancePayTotal = parseInt('<%- advancePayTotal %>');
+    const preUrl = '<%- preUrl %>';
+</script>
+<% if(isEdited && ctx.session.sessionUser.accountId === ctx.advance.uid) { %>
+<script>
+    const accountGroup = JSON.parse('<%- JSON.stringify(accountGroup) %>');
+    const accountList = JSON.parse('<%- JSON.stringify(accountList) %>');
 </script>
-<% if(isEdited) { %>
-    <script>
-        const accountGroup = JSON.parse('<%- JSON.stringify(accountGroup) %>');
-        const accountList = JSON.parse('<%- JSON.stringify(accountList) %>');
-    </script>
 <% } %>
-

+ 10 - 6
app/view/advance/index.ejs

@@ -30,11 +30,11 @@
             </div>
             <div>
                 <% if(!latestOrder || latestOrder.status === auditConst.status.checked) { %>
-                    <form action="<%- preUrl %>">
-
-                        <button type="submit" class="btn btn-primary btn-sm pull-right"></button>
+                    <form action="<%- preUrl %>" method="POST">
+                        <input type="hidden" name="_csrf" value="<%= ctx.csrf %>">
+                        <button type="submit" class="btn btn-primary btn-sm pull-right">开始新一期</button>
                     </form>
-                    <a id="advance_add" href="" class="btn btn-primary btn-sm pull-right">开始新一期</a>
+                    <!-- <a id="advance_add" href="" class="btn btn-primary btn-sm pull-right"></a> -->
                 <% } %>
             </div>
         </div>
@@ -74,9 +74,13 @@
                                     </span>
                                 </td>
                                 <td>
-                                    <% if(item.status === auditConst.status.uncheck || item.status === auditConst.status.checkNo) { %>
+                                    <% if((item.status === auditConst.status.uncheck || item.status === auditConst.status.checkNo) && item.uid === ctx.session.sessionUser.accountId) { %>
                                         <a href="/tender/<%- ctx.tender.id %>/advance/<%- item.id %>/detail" class="btn btn-primary btn-sm">编辑</a>
-                                    <% }%>
+                                    <% } else if(item.status === auditConst.status.checking && item.curAuditor.audit_id === ctx.session.sessionUser.accountId) {%>
+                                        <a href="/tender/<%- ctx.tender.id %>/advance/<%- item.id %>/detail" class="btn btn-success btn-sm">审批</a>
+                                    <% } else {%>
+                                        <span class="<%- auditConst.statusClass[item.status] %>"><%- auditConst.statusString[item.status] %></span>
+                                    <% } %>
                                 </td>
                             </tr>
                         <% }) %>

File diff suppressed because it is too large
+ 781 - 77
app/view/advance/modal_audit.ejs