Browse Source

变更令新建及auit文件调整

laiguoran 3 years ago
parent
commit
2751ac47b7

+ 80 - 1
app/const/audit.js

@@ -509,7 +509,7 @@ const changeProject = (function() {
     return { status, statusString, statusClass, auditString, auditStringClass, auditProgress, auditProgressClass, filter, statusButton, statusButtonClass };
     return { status, statusString, statusClass, auditString, auditStringClass, auditProgress, auditProgressClass, filter, statusButton, statusButtonClass };
 })();
 })();
 
 
-// 变更申请,变更方案 审批流程
+// 变更申请 审批流程
 const changeApply = (function() {
 const changeApply = (function() {
     const status = {
     const status = {
         uncheck: 1, // 待上报
         uncheck: 1, // 待上报
@@ -587,6 +587,84 @@ const changeApply = (function() {
     return { status, statusString, statusClass, auditString, auditStringClass, auditProgress, auditProgressClass, filter, statusButton, statusButtonClass };
     return { status, statusString, statusClass, auditString, auditStringClass, auditProgress, auditProgressClass, filter, statusButton, statusButtonClass };
 })();
 })();
 
 
+// 变更方案 审批流程
+const changePlan = (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] = '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 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 auditProgressClass = [];
+    auditProgressClass[status.uncheck] = '';
+    auditProgressClass[status.checking] = 'text-warning';
+    auditProgressClass[status.checked] = 'text-success';
+    auditProgressClass[status.checkNo] = 'text-warning';
+
+    const filter = {
+        status: {
+            pending: 1,
+            uncheck: 5,
+            checking: 2,
+            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] = '已通过';
+    // filter.statusString[filter.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';
+    return { status, statusString, statusClass, auditString, auditStringClass, auditProgress, auditProgressClass, filter, statusButton, statusButtonClass };
+})();
+
 // 推送类型
 // 推送类型
 const pushType = {
 const pushType = {
     material: 1,
     material: 1,
@@ -620,4 +698,5 @@ module.exports = {
     advance,
     advance,
     changeProject,
     changeProject,
     changeApply,
     changeApply,
+    changePlan,
 };
 };

+ 2 - 0
app/const/change.js

@@ -48,6 +48,7 @@ module.exports = {
             value: 5, name: 'E类变更',
             value: 5, name: 'E类变更',
         },
         },
     },
     },
+    className: ['', 'A类变更', 'B类变更', 'C类变更', 'D类变更', 'E类变更'],
     // 变更性质
     // 变更性质
     quality: {
     quality: {
         common: {
         common: {
@@ -60,6 +61,7 @@ module.exports = {
             value: 3, name: '重大设计变更',
             value: 3, name: '重大设计变更',
         },
         },
     },
     },
+    qualityName: ['', '一般设计变更', '较大设计变更', '重大设计变更'],
     // 费用承担方
     // 费用承担方
     charge: {
     charge: {
         partyA: {
         partyA: {

+ 24 - 13
app/controller/change_controller.js

@@ -138,6 +138,15 @@ module.exports = app => {
                 }
                 }
             }
             }
 
 
+            const changePlanList = await ctx.service.changePlan.getAllDataByCondition({ where: { tid: tender.id, status: audit.changePlan.status.checked } });
+            const allPlanCodes = await ctx.service.change.getAllDataByCondition({
+                columns: ['plan_code'],
+                where: {
+                    tid: tender.id,
+                },
+            });
+            const apLists = allPlanCodes.length > 0 ? ctx.app._.uniq(ctx.app._.map(allPlanCodes, 'plan_code')) : [];
+
             const renderData = {
             const renderData = {
                 uid: ctx.session.sessionUser.accountId,
                 uid: ctx.session.sessionUser.accountId,
                 moment,
                 moment,
@@ -158,6 +167,8 @@ module.exports = app => {
                 tenderMenu: this.menu.tenderMenu,
                 tenderMenu: this.menu.tenderMenu,
                 preUrl: '/tender/' + tenderId,
                 preUrl: '/tender/' + tenderId,
                 tpUnit: ctx.tender.info.decimal.tp,
                 tpUnit: ctx.tender.info.decimal.tp,
+                changePlanList,
+                apLists,
             };
             };
             await this.layout('change/index.ejs', renderData, 'change/modal.ejs');
             await this.layout('change/index.ejs', renderData, 'change/modal.ejs');
         }
         }
@@ -259,11 +270,11 @@ module.exports = app => {
                     throw '当前未打开标段';
                     throw '当前未打开标段';
                 }
                 }
                 const data = JSON.parse(ctx.request.body.data);
                 const data = JSON.parse(ctx.request.body.data);
-                if (!data.code || data.code === '' || !data.name || data.name === '') {
+                if (!data.code || data.code === '') {
                     throw '变更令号不能为空';
                     throw '变更令号不能为空';
                 }
                 }
 
 
-                const change = await ctx.service.change.add(tenderId, ctx.session.sessionUser.accountId, data.code, data.name);
+                const change = await ctx.service.change.add(tenderId, ctx.session.sessionUser.accountId, data.code, data.plan_code, data.name);
 
 
                 ctx.body = { err: 0, msg: '', data: change };
                 ctx.body = { err: 0, msg: '', data: change };
             } catch (err) {
             } catch (err) {
@@ -3039,7 +3050,7 @@ module.exports = app => {
                 queryData: JSON.stringify(ctx.urlInfo.query),
                 queryData: JSON.stringify(ctx.urlInfo.query),
             };
             };
 
 
-            const filter = JSON.parse(JSON.stringify(audit.changeApply.filter));
+            const filter = JSON.parse(JSON.stringify(audit.changePlan.filter));
             filter.count = [];
             filter.count = [];
             filter.count[filter.status.pending] = await ctx.service.changePlan.getCountByStatus(tender.id, filter.status.pending);// await ctx.service.change.pendingDatas(tender.id, ctx.session.sessionUser.accountId);
             filter.count[filter.status.pending] = await ctx.service.changePlan.getCountByStatus(tender.id, filter.status.pending);// await ctx.service.change.pendingDatas(tender.id, ctx.session.sessionUser.accountId);
             filter.count[filter.status.uncheck] = await ctx.service.changePlan.getCountByStatus(tender.id, filter.status.uncheck);// await ctx.service.change.checkingDatas(tender.id, ctx.session.sessionUser.accountId);
             filter.count[filter.status.uncheck] = await ctx.service.changePlan.getCountByStatus(tender.id, filter.status.uncheck);// await ctx.service.change.checkingDatas(tender.id, ctx.session.sessionUser.accountId);
@@ -3099,7 +3110,7 @@ module.exports = app => {
                 plan_username: tender_userInfo ? tender_userInfo.name : null,
                 plan_username: tender_userInfo ? tender_userInfo.name : null,
                 ruleType: codeRuleConst.ruleType[rule_type],
                 ruleType: codeRuleConst.ruleType[rule_type],
                 dealCode: ctx.tender.info.deal_info.dealCode,
                 dealCode: ctx.tender.info.deal_info.dealCode,
-                auditConst: audit.changeApply,
+                auditConst: audit.changePlan,
                 ruleConst: codeRuleConst.measure,
                 ruleConst: codeRuleConst.measure,
                 changeConst,
                 changeConst,
                 changeApplyList,
                 changeApplyList,
@@ -3194,7 +3205,7 @@ module.exports = app => {
          * @private
          * @private
          */
          */
         async _getChangePlanAuditViewData(ctx) {
         async _getChangePlanAuditViewData(ctx) {
-            const auditConst = audit.changeApply;
+            const auditConst = audit.changePlan;
             const times = ctx.change.status === auditConst.status.checkNo ? ctx.change.times - 1 : ctx.change.times;
             const times = ctx.change.status === auditConst.status.checkNo ? ctx.change.times - 1 : ctx.change.times;
             ctx.change.user = await ctx.service.projectAccount.getAccountInfoById(ctx.change.uid);
             ctx.change.user = await ctx.service.projectAccount.getAccountInfoById(ctx.change.uid);
             ctx.change.auditHistory = [];
             ctx.change.auditHistory = [];
@@ -3221,7 +3232,7 @@ module.exports = app => {
                 const fileList = await ctx.service.changePlanAtt.getAllChangePlanAtt(ctx.tender.id, ctx.change.id);
                 const fileList = await ctx.service.changePlanAtt.getAllChangePlanAtt(ctx.tender.id, ctx.change.id);
                 // 获取清单列表
                 // 获取清单列表
                 const changeList = await ctx.service.changePlanList.getList(ctx.change.id);
                 const changeList = await ctx.service.changePlanList.getList(ctx.change.id);
-                if (ctx.change.status === audit.changeApply.status.checking || ctx.change.status === audit.changeApply.status.checked) {
+                if (ctx.change.status === audit.changePlan.status.checking || ctx.change.status === audit.changePlan.status.checked) {
                     const listAudits = await ctx.service.changePlanAudit.getAuditGroupByList(ctx.change.id, ctx.change.times);
                     const listAudits = await ctx.service.changePlanAudit.getAuditGroupByList(ctx.change.id, ctx.change.times);
                     ctx.change.listAudits = listAudits;
                     ctx.change.listAudits = listAudits;
                     for (const cl of changeList) {
                     for (const cl of changeList) {
@@ -3238,7 +3249,7 @@ module.exports = app => {
                     listRule: tender.c_plan_list_rule ? JSON.parse(tender.c_plan_list_rule) : { source: 1, rule: ['unit', 'unit_price'] },
                     listRule: tender.c_plan_list_rule ? JSON.parse(tender.c_plan_list_rule) : { source: 1, rule: ['unit', 'unit_price'] },
                     changeList,
                     changeList,
                     changeConst,
                     changeConst,
-                    auditConst: audit.changeApply,
+                    auditConst: audit.changePlan,
                     fileList,
                     fileList,
                     whiteList,
                     whiteList,
                     tpUnit: ctx.change.decimal ? ctx.change.decimal.tp : ctx.tender.info.decimal.tp,
                     tpUnit: ctx.change.decimal ? ctx.change.decimal.tp : ctx.tender.info.decimal.tp,
@@ -3249,7 +3260,7 @@ module.exports = app => {
                     jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.change.plan_information),
                     jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.change.plan_information),
                     preUrl: '/tender/' + ctx.tender.id + '/change/plan/' + ctx.change.id + '/information',
                     preUrl: '/tender/' + ctx.tender.id + '/change/plan/' + ctx.change.id + '/information',
                 };
                 };
-                if ((ctx.change.status === audit.changeApply.status.uncheck || ctx.change.status === audit.changeApply.status.checkNo) && (ctx.session.sessionUser.accountId === ctx.change.uid || ctx.tender.isTourist)) {
+                if ((ctx.change.status === audit.changePlan.status.uncheck || ctx.change.status === audit.changePlan.status.checkNo) && (ctx.session.sessionUser.accountId === ctx.change.uid || ctx.tender.isTourist)) {
                     // data.accountGroup = accountGroup;
                     // data.accountGroup = accountGroup;
                     // 获取所有项目参与者
                     // 获取所有项目参与者
                     const accountList = await ctx.service.projectAccount.getAllDataByCondition({
                     const accountList = await ctx.service.projectAccount.getAllDataByCondition({
@@ -3278,7 +3289,7 @@ module.exports = app => {
          */
          */
         async addPlanAudit(ctx) {
         async addPlanAudit(ctx) {
             try {
             try {
-                const auditConst = audit.changeApply;
+                const auditConst = audit.changePlan;
                 const data = JSON.parse(ctx.request.body.data);
                 const data = JSON.parse(ctx.request.body.data);
                 const id = this.app._.toInteger(data.auditorId);
                 const id = this.app._.toInteger(data.auditorId);
                 if (isNaN(id) || id <= 0) {
                 if (isNaN(id) || id <= 0) {
@@ -3345,7 +3356,7 @@ module.exports = app => {
         async uploadPlanFile(ctx) {
         async uploadPlanFile(ctx) {
             let stream;
             let stream;
             try {
             try {
-                const auditConst = audit.changeApply;
+                const auditConst = audit.changePlan;
                 // this._checkAdvanceFileCanModify(ctx);
                 // this._checkAdvanceFileCanModify(ctx);
                 const parts = this.ctx.multipart({
                 const parts = this.ctx.multipart({
                     autoFields: true,
                     autoFields: true,
@@ -3492,7 +3503,7 @@ module.exports = app => {
          */
          */
         async startPlanAudit(ctx) {
         async startPlanAudit(ctx) {
             try {
             try {
-                const auditConst = audit.changeApply;
+                const auditConst = audit.changePlan;
                 // 检查权限等
                 // 检查权限等
                 if (!ctx.change) {
                 if (!ctx.change) {
                     throw '数据错误';
                     throw '数据错误';
@@ -3521,7 +3532,7 @@ module.exports = app => {
          */
          */
         async checkPlanAudit(ctx) {
         async checkPlanAudit(ctx) {
             try {
             try {
-                const auditConst = audit.changeApply;
+                const auditConst = audit.changePlan;
                 if (!ctx.change || ctx.change.status !== auditConst.status.checking) {
                 if (!ctx.change || ctx.change.status !== auditConst.status.checking) {
                     throw '当前材料调差期数据有误';
                     throw '当前材料调差期数据有误';
                 }
                 }
@@ -3585,7 +3596,7 @@ module.exports = app => {
                         await ctx.service.changePlanList.saveDatas(data.updateData);
                         await ctx.service.changePlanList.saveDatas(data.updateData);
                         // 取所有工料表
                         // 取所有工料表
                         responseData.data = await ctx.service.changePlanList.getList(ctx.change.id);
                         responseData.data = await ctx.service.changePlanList.getList(ctx.change.id);
-                        if (ctx.change.status === audit.changeApply.status.checking || ctx.change.status === audit.changeApply.status.checked) {
+                        if (ctx.change.status === audit.changePlan.status.checking || ctx.change.status === audit.changePlan.status.checked) {
                             const listAudits = await ctx.service.changePlanAudit.getAuditGroupByList(ctx.change.id, ctx.change.times);
                             const listAudits = await ctx.service.changePlanAudit.getAuditGroupByList(ctx.change.id, ctx.change.times);
                             for (const cl of responseData.data) {
                             for (const cl of responseData.data) {
                                 const audit_amount = cl.audit_amount !== null && cl.audit_amount !== '' ? cl.audit_amount.split(',') : '';
                                 const audit_amount = cl.audit_amount !== null && cl.audit_amount !== '' ? cl.audit_amount.split(',') : '';

+ 1 - 1
app/middleware/change_plan_check.js

@@ -8,7 +8,7 @@
  * @version
  * @version
  */
  */
 
 
-const status = require('../const/audit').changeApply.status;
+const status = require('../const/audit').changePlan.status;
 const _ = require('lodash');
 const _ = require('lodash');
 
 
 module.exports = options => {
 module.exports = options => {

+ 12 - 2
app/public/js/change.js

@@ -227,7 +227,7 @@ $(document).ready(() => {
     // 新增变更令 确认
     // 新增变更令 确认
     $('#addOk').click(function () {
     $('#addOk').click(function () {
         $(this).attr('disabled', true);
         $(this).attr('disabled', true);
-        if ($('#bj-name').val().length === 0) {
+        if (!openChangePlan && $('#bj-name').val().length === 0) {
             $('#bj-name').addClass('is-invalid');
             $('#bj-name').addClass('is-invalid');
             $('#name_error_msg').show();
             $('#name_error_msg').show();
             $('#name_error_msg').text('变更工程名称不能为空。');
             $('#name_error_msg').text('变更工程名称不能为空。');
@@ -238,7 +238,7 @@ $(document).ready(() => {
             }, 2000);
             }, 2000);
             return;
             return;
         }
         }
-        if ($('#bj-name').val().length > 100) {
+        if (!openChangePlan && $('#bj-name').val().length > 100) {
             $('#bj-name').addClass('is-invalid');
             $('#bj-name').addClass('is-invalid');
             $('#name_error_msg').show();
             $('#name_error_msg').show();
             $('#name_error_msg').text('名称超过100个字,请缩减名称。');
             $('#name_error_msg').text('名称超过100个字,请缩减名称。');
@@ -251,6 +251,7 @@ $(document).ready(() => {
         }
         }
         const data = {
         const data = {
             code: $('#bj-code').val(),
             code: $('#bj-code').val(),
+            plan_code: $('#plan-code').val(),
             name: $('#bj-name').val(),
             name: $('#bj-name').val(),
         };
         };
         if (data.code || data.code !== '' || data.name || data.name !== '') {
         if (data.code || data.code !== '' || data.name || data.name !== '') {
@@ -267,6 +268,15 @@ $(document).ready(() => {
         }
         }
     });
     });
 
 
+    $('#plan-code').change(function () {
+        if ($(this).val() === '') {
+            $('#bj-name').val('');
+        } else {
+            const info = _.find(changePlanList, { code: $(this).val() });
+            $('#bj-name').val(info.name);
+        }
+    });
+
     //状态切换
     //状态切换
     $('#status_select a').on('click', function () {
     $('#status_select a').on('click', function () {
        const status = $(this).data('val');
        const status = $(this).data('val');

+ 17 - 1
app/service/change.js

@@ -81,7 +81,7 @@ module.exports = app => {
             }
             }
         }
         }
 
 
-        async add(tenderId, userId, code, name) {
+        async add(tenderId, userId, code, plan_code, name) {
             const sql = 'SELECT COUNT(*) as count FROM ?? WHERE `tid` = ? AND ((`code` = ? AND `status` != ?) OR (`p_code` = ? AND `status` = ?))';
             const sql = 'SELECT COUNT(*) as count FROM ?? WHERE `tid` = ? AND ((`code` = ? AND `status` != ?) OR (`p_code` = ? AND `status` = ?))';
             const sqlParam = [this.tableName, tenderId, code, audit.flow.status.checked, code, audit.flow.status.checked];
             const sqlParam = [this.tableName, tenderId, code, audit.flow.status.checked, code, audit.flow.status.checked];
             const codeCount = await this.db.queryOne(sql, sqlParam);
             const codeCount = await this.db.queryOne(sql, sqlParam);
@@ -105,9 +105,25 @@ module.exports = app => {
                     in_time: new Date(),
                     in_time: new Date(),
                     code,
                     code,
                     name,
                     name,
+                    plan_code,
                     // tp_decimal: this.ctx.tender.info.decimal.tp,
                     // tp_decimal: this.ctx.tender.info.decimal.tp,
                     // up_decimal: this.ctx.tender.info.decimal.up,
                     // up_decimal: this.ctx.tender.info.decimal.up,
                 };
                 };
+                if (plan_code) {
+                    const planInfo = await this.ctx.service.changePlan.getDataByCondition({ tid: tenderId, code: plan_code });
+                    if (planInfo) {
+                        change.org_name = planInfo.org_name;
+                        change.peg = planInfo.peg;
+                        change.org_code = planInfo.new_code;
+                        change.new_code = planInfo.c_new_code;
+                        change.new_name = planInfo.design_name;
+                        const classIndex = planInfo.class && this._.indexOf(changeConst.className, planInfo.class) !== -1 ? this._.indexOf(changeConst.className, planInfo.class) : 0;
+                        change.class = classIndex ? classIndex : changeConst.class.A.value;
+                        const qualityIndex = planInfo.quality && this._.indexOf(changeConst.qualityName, planInfo.quality) !== -1 ? this._.indexOf(changeConst.qualityName, planInfo.quality) : 0;
+                        change.quality = qualityIndex ? qualityIndex : changeConst.quality.common.value;
+                        change.content = planInfo.reason;
+                    }
+                }
                 const operate = await this.transaction.insert(this.tableName, change);
                 const operate = await this.transaction.insert(this.tableName, change);
 
 
                 if (operate.affectedRows <= 0) {
                 if (operate.affectedRows <= 0) {

+ 1 - 2
app/service/change_plan.js

@@ -8,7 +8,7 @@
  * @version
  * @version
  */
  */
 
 
-const audit = require('../const/audit').changeApply;
+const audit = require('../const/audit').changePlan;
 // const smsTypeConst = require('../const/sms_type');
 // const smsTypeConst = require('../const/sms_type');
 // const SMS = require('../lib/sms');
 // const SMS = require('../lib/sms');
 // const SmsAliConst = require('../const/sms_alitemplate');
 // const SmsAliConst = require('../const/sms_alitemplate');
@@ -58,7 +58,6 @@ module.exports = app => {
                 let caid = null;
                 let caid = null;
                 if (apply_code) {
                 if (apply_code) {
                     const applyInfo = await this.ctx.service.changeApply.getDataByCondition({ tid: tenderId, code: apply_code });
                     const applyInfo = await this.ctx.service.changeApply.getDataByCondition({ tid: tenderId, code: apply_code });
-                    console.log(applyInfo);
                     if (applyInfo) {
                     if (applyInfo) {
                         caid = applyInfo.id;
                         caid = applyInfo.id;
                         change.org_name = applyInfo.org_name;
                         change.org_name = applyInfo.org_name;

+ 1 - 1
app/service/change_plan_audit.js

@@ -8,7 +8,7 @@
  * @version
  * @version
  */
  */
 
 
-const auditConst = require('../const/audit').changeApply;
+const auditConst = require('../const/audit').changePlan;
 const pushType = require('../const/audit').pushType;
 const pushType = require('../const/audit').pushType;
 const shenpiConst = require('../const/shenpi');
 const shenpiConst = require('../const/shenpi');
 const smsTypeConst = require('../const/sms_type');
 const smsTypeConst = require('../const/sms_type');

+ 2 - 0
app/view/change/index.ejs

@@ -151,5 +151,7 @@
             autoFlashHeight();
             autoFlashHeight();
         }
         }
     });
     });
+    const openChangePlan = parseInt('<%- ctx.session.sessionProject.page_show.openChangePlan %>');
+    const changePlanList = JSON.parse(unescape('<%- escape(JSON.stringify(changePlanList)) %>'));
 </script>
 </script>
 <script src="/public/js/change.js"></script>
 <script src="/public/js/change.js"></script>

+ 21 - 5
app/view/change/modal.ejs

@@ -37,11 +37,27 @@
                         <div class="invalid-feedback" style="display: none" id="bjHint">您输入的编号已存在。</div>
                         <div class="invalid-feedback" style="display: none" id="bjHint">您输入的编号已存在。</div>
                     </div>
                     </div>
                 </div>
                 </div>
-                <div class="form-group">
-                    <label>变更工程名称<b class="text-danger">*</b></label>
-                    <input class="form-control form-control-sm" value="" type="text" id="bj-name">
-                    <div class="invalid-feedback" style="display: none" id="name_error_msg">名称超过100个字,请缩减名称。</div>
-                </div>
+                <% if (ctx.session.sessionProject.page_show.openChangePlan) { %>
+                    <div class="form-group">
+                        <label>关联变更方案</label>
+                        <select class="form-control form-control-sm" id="plan-code">
+                            <option></option>
+                            <% for (const cp of changePlanList) { %>
+                                <% if (ctx.helper._.indexOf(apLists, cp.code) === -1) { %>
+                                    <option><%- cp.code %></option>
+                                <% } %>
+                            <% } %>
+                        </select>
+                    </div>
+                    <input value="" type="hidden" id="bj-name">
+                <% } else { %>
+                    <div class="form-group">
+                        <label>变更工程名称<b class="text-danger">*</b></label>
+                        <input class="form-control form-control-sm" value="" type="text" id="bj-name">
+                        <div class="invalid-feedback" style="display: none" id="name_error_msg">名称超过100个字,请缩减名称。</div>
+                    </div>
+                    <input type="hidden" value="" id="plan-code">
+                <% } %>
             </div>
             </div>
             <div class="modal-footer">
             <div class="modal-footer">
                 <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal" id="addCancel">关闭</button>
                 <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal" id="addCancel">关闭</button>

+ 2 - 0
sql/update.sql

@@ -236,3 +236,5 @@ ALTER TABLE `zh_tender`
 ADD `c_apply_list_rule` VARCHAR(255) NULL DEFAULT NULL COMMENT '变更申请统一原设计数量读取规则' AFTER `pos_file`,
 ADD `c_apply_list_rule` VARCHAR(255) NULL DEFAULT NULL COMMENT '变更申请统一原设计数量读取规则' AFTER `pos_file`,
 ADD `c_plan_list_rule` VARCHAR(255) NULL DEFAULT NULL COMMENT '变更方案统一原设计数量读取规则' AFTER `c_apply_list_rule`;
 ADD `c_plan_list_rule` VARCHAR(255) NULL DEFAULT NULL COMMENT '变更方案统一原设计数量读取规则' AFTER `c_apply_list_rule`;
 
 
+ALTER TABLE `zh_change` ADD `plan_code` VARCHAR(255) NULL DEFAULT NULL COMMENT '变更方案编号' AFTER `name`;
+