Browse Source

标段概况,标段类型设置

MaiXinRong 1 năm trước cách đây
mục cha
commit
ecf833d6c7

+ 3 - 3
app/controller/setting_controller.js

@@ -1385,7 +1385,7 @@ module.exports = app => {
 
                 const sType = ctx.query.stype;
                 const code = ctx.query.code;
-                const projectSpread = await this.ctx.service.projectSpread.getProjectSpreadByCode(projectData.id, code);
+                const projectSpread = await this.ctx.service.projectSpread.getProjectSpread(projectData.id, code);
                 const renderData = {
                     BaseSetCol: sType.indexOf('stage') > 0 ? SpreadConst.BaseSetCol.Stage : SpreadConst.BaseSetCol.Ledger,
                     sType,
@@ -1405,7 +1405,7 @@ module.exports = app => {
                 const projectId = ctx.session.sessionProject.id;
                 const data = JSON.parse(ctx.request.body.data);
                 await this.ctx.service.projectSpread.updateProjectSet(projectId, data.code, data.sType, data.colSet);
-                const projectSpread = await this.ctx.service.projectSpread.getProjectSpreadByCode(projectId, data.code);
+                const projectSpread = await this.ctx.service.projectSpread.getProjectSpread(projectId, data.code);
                 ctx.body = { err: 0, msg: '', data: { colSet: projectSpread[data.sType] } };
             } catch (error) {
                 ctx.log(error);
@@ -1431,7 +1431,7 @@ module.exports = app => {
                 const spreadTemplate = SpreadConst.ProjectSpreadTemplate.find(x => { return x.code === data.code; });
                 const colSet = spreadTemplate.template[data.sType];
                 await this.ctx.service.projectSpread.updateProjectSet(projectId, data.code, data.sType, colSet);
-                const projectSpread = await this.ctx.service.projectSpread.getProjectSpreadByCode(projectId, data.code);
+                const projectSpread = await this.ctx.service.projectSpread.getProjectSpread(projectId, data.code);
                 ctx.body = { err: 0, msg: '', data: { colSet: projectSpread[data.sType] } };
             } catch (error) {
                 ctx.log(error);

+ 4 - 1
app/controller/tender_controller.js

@@ -515,6 +515,8 @@ module.exports = app => {
                 }
                 const canFinish = await this.ctx.service.tender.checkTenderCanFinish(tender);
 
+                const projectSpread  = await ctx.service.projectSpread.getProjectSpreadType(tender.project_id);
+
                 const renderData = {
                     tenders,
                     categoryData,
@@ -542,6 +544,7 @@ module.exports = app => {
                     fujianOssPath: ctx.app.config.fujianOssPath,
                     canFinish: canFinish,
                     buildStatus: tenderConst.buildStatus,
+                    projectSpread,
                 };
                 if (ctx.session.sessionUser.is_admin) {
                     renderData.tourists = await ctx.service.tenderTourist.getTourists(tender.id);
@@ -627,7 +630,7 @@ module.exports = app => {
         async saveTenderInfo2(ctx) {
             try {
                 const data = JSON.parse(ctx.request.body.data);
-                if (!data || (!data.ledger_check && !data.fun_rela)) throw '提交数据错误';
+                if (!data || (!data.ledger_check && !data.fun_rela && !data.s_type)) throw '提交数据错误';
                 if (!ctx.session.sessionUser.is_admin) throw '您无权修改该内容';
 
                 const updateData = {};

+ 5 - 6
app/lib/spread_setting.js

@@ -70,7 +70,7 @@ function refreshSpreadShow(sjsRela, sjsSetting) {
 const getLedgerSpreadSetting = async function(ctx, tid, readOnly) {
     let tender = tid ? await getCtxTender(ctx, tid) : ctx.tender;
 
-    const projectSpread = await ctx.service.projectSpread.getProjectSpread(ctx.session.sessionProject.id);
+    const projectSpread = await ctx.service.projectSpread.getProjectSpread(ctx.session.sessionProject.id, tender.s_type);
     const prefix = tender.data.measure_type === measureType.tz.value ? 'tz' : 'gcl';
     const ledger = projectSpread[`${prefix}_ledger_bills_spread`];
     const pos = projectSpread[`${prefix}_ledger_pos_spread`];
@@ -102,14 +102,13 @@ const getLedgerSpreadSetting = async function(ctx, tid, readOnly) {
 const getStageSpreadSetting = async function (ctx, tid, readOnly, funInfo) {
     const tender = tid ? await getCtxTender(ctx, tid) : ctx.tender;
 
-    const stageSetting = tender.data.measure_type === measureType.tz.value
-        ? spreadConst.stageTz
-        : (tender.info.display.ledger.clQty ? spreadConst.stageCl : spreadConst.stageNoCl);
-    const ledger = JSON.parse(JSON.stringify(stageSetting.ledger));
+    const projectSpread = await ctx.service.projectSpread.getProjectSpread(ctx.session.sessionProject.id, tender.s_type);
+    const prefix = tender.data.measure_type === measureType.tz.value ? 'tz' : 'gcl';
+    const ledger = projectSpread[`${prefix}_stage_bills_spread`];
+    const pos = projectSpread[`${prefix}_stage_pos_spread`];
     if (!tender.info.display.ledger.dgnQty) {
         removeFieldCols(ledger, spreadConst.filterCols.stageDgnCols);
     }
-    const pos = JSON.parse(JSON.stringify(stageSetting.pos));
     if (!tender.info.display.stage.realComplete) {
         removeFieldCols(pos, spreadConst.filterCols.realCompleteCols);
     }

+ 6 - 18
app/service/project_spread.js

@@ -36,14 +36,8 @@ module.exports = app => {
             JsonFields.forEach(jf => { if(data[jf]) data[jf] = JSON.parse(data[jf]); });
         }
 
-        async loadProjectSpread(id) {
-            const result = await this.getDataByCondition({ pid: id, is_default: 1 });
-            this._analysisData(result);
-            return result;
-        }
-
-        async loadProjectSpreadByCode(id, code) {
-            const result = await this.getDataByCondition({ pid: id, code });
+        async loadProjectSpread(id, code = '') {
+            const result = code ? await this.getDataByCondition({ pid: id, code }) : await this.getDataByCondition({ pid: id, is_default: 1 });
             this._analysisData(result);
             return result;
         }
@@ -99,19 +93,13 @@ module.exports = app => {
                 JsonFields.forEach(jf => { if (data[jf]) updateData[jf] = JSON.stringify(data[jf]) });
                 await this.db.insert(this.tableName, updateData);
             }
-            return await this.getProjectSpread(id);
         }
 
-        async getProjectSpread(id) {
-            const curSet = await this.loadProjectSpread(id);
+        async getProjectSpread(id, code) {
+            const curSet = await this.loadProjectSpread(id, code);
             if (curSet) return curSet;
-            return await this.initProjectSpread(id);
-        }
-
-        async getProjectSpreadByCode(id, code) {
-            const curSet = await this.loadProjectSpreadByCode(id, code);
-            if (curSet) return curSet;
-            return await this.initProjectSpread(id);
+            await this.initProjectSpread(id);
+            return await this.loadProjectSpread(id, code);
         }
 
         async getProjectSpreadType(id) {

+ 1 - 0
app/view/tender/detail.ejs

@@ -71,6 +71,7 @@
                             <a href="#bd-set-10" data-toggle="modal" data-target="#bd-set-10" class="dropdown-item">上报控制</a>
                             <a href="#bd-set-12" data-toggle="modal" data-target="#bd-set-12" class="dropdown-item">功能设置</a>
                             <a href="#bd-set-11" data-toggle="modal" data-target="#bd-set-11" class="dropdown-item">概况设置</a>
+                            <a href="#bd-set-13" data-toggle="modal" data-target="#bd-set-13" class="dropdown-item">标段类型</a>
                         </div>
                     </div>
                 <% } %>

+ 49 - 0
app/view/tender/detail_modal.ejs

@@ -1863,6 +1863,37 @@
     }
 </script>
 <% if (ctx.session.sessionUser.is_admin) { %>
+<!--标段类型-->
+<div class="modal fade" id="bd-set-13" data-backdrop="static">
+    <div class="modal-dialog" role="document">
+        <div class="modal-content">
+            <div class="modal-header">
+                <h5 class="modal-title">标段类型</h5>
+            </div>
+            <div class="modal-body">
+                <div class="row">
+                    <div class="col-6 mb-2">
+                        <div class="input-group input-group-sm">
+                            <div class="input-group-prepend">
+                                <span class="input-group-text" style="width:90px">标段类型</span>
+                            </div>
+                            <select class="form-control" id="tender-s-type">
+                                <option value="">请选择</option>
+                                <% for (const ps of projectSpread) { %>
+                                <option value="<%- ps.code %>"><%- ps.name %></option>
+                                <% } %>
+                            </select>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-sm btn-primary" onclick="post13();">确认修改</button>
+            </div>
+        </div>
+    </div>
+</div>
 <!--游客账号-->
 <div class="modal fade" id="bd-set-9" data-backdrop="static">
     <div class="modal-dialog" role="document">
@@ -2069,6 +2100,24 @@
             $('#bd-set-12').modal('hide');
         });
     }
+
+    const loadSTypeProperty = function () {
+        $('#tender-s-type').val(property.s_type);
+    };
+
+    $('#bd-set-13').on('show.bs.modal', function () {
+        loadSTypeProperty();
+    });
+    function post13() {
+        const prop = {
+            s_type: $('#tender-s-type').val(),
+        }
+        const tenderId = window.location.pathname.split('/')[2];
+        postData('/tender/' + tenderId + '/save2', prop, function (data) {
+            property.s_type = data.s_type;
+            $('#bd-set-13').modal('hide');
+        });
+    }
     $(function () {
         // 投资进度
         let timer2 = null;

+ 2 - 74
sql/update.sql

@@ -1,74 +1,2 @@
-ALTER TABLE `zh_tender`
-ADD COLUMN `settle_order` tinyint(4) NULL DEFAULT 0 COMMENT '结算期数(用于结算变更数据更新判断)' AFTER `material_col_show`;
-
-CREATE TABLE `zh_change_settle_list`  (
-  `id` int NOT NULL AUTO_INCREMENT,
-  `tid` int NULL COMMENT '标段id',
-  `cid` varchar(50) NULL COMMENT '变更id',
-  `gcl_id` varchar(255) NULL DEFAULT NULL COMMENT '项目节id',
-  `mx_id` varchar(255) NULL DEFAULT NULL COMMENT '计量单元id',
-  `amount` decimal(30, 8) NULL DEFAULT NULL COMMENT '终审数量',
-  PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT = '变更已结算清单表(用于修订和重审时生成,防止已结算变更清单被删除)';
-
-CREATE TABLE `zh_notice_again`  (
-  `id` int NOT NULL AUTO_INCREMENT,
-  `pid` int NOT NULL COMMENT '项目id',
-  `tid` int NOT NULL COMMENT '标段id',
-  `uid` int NOT NULL COMMENT '用户id',
-  `sp_type` varchar(30) NOT NULL COMMENT '审批类型',
-  `sp_id` int NOT NULL COMMENT '审批类型对应审核表的id',
-  `status` tinyint(2) NOT NULL DEFAULT 1 COMMENT '0为待执行,1为执行中,2为已审',
-  `table_name` varchar(255) NOT NULL COMMENT '对应的审批表名称',
-  `origin_url` json NOT NULL COMMENT 'url信息',
-  `sms_type` varchar(10) NOT NULL COMMENT '模版通知类型',
-  `template` tinyint(2) NOT NULL COMMENT '对应的微信通知模板id',
-  `wx_data` json NOT NULL COMMENT '微信通知的json',
-  `times` tinyint(3) NOT NULL DEFAULT 0 COMMENT '重复发送次数',
-  `in_time` datetime NULL COMMENT '添加时间',
-  `last_time` datetime NULL DEFAULT NULL COMMENT '上一次发送时间',
-  PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT = '审批信息重新发送表';
-
-ALTER TABLE `zh_project_account`
-ADD COLUMN `notice_again` json NULL DEFAULT NULL COMMENT '审批信息重新发送设置';
-
-ALTER TABLE `zh_project`
-ADD COLUMN `notice_setting` json NULL DEFAULT NULL COMMENT '重新发送通知设置';
-
-ALTER TABLE `zh_rpt_archive`
-ADD COLUMN `business_id` VARCHAR(45) NULL COMMENT '有其他业务情况,统一在这里标识(类uuid),要结合stage_id来看,如stage_id > 0,则是标段和期,< 0则是其他业务,如 -300 -> 变更令;-301 - 变更方案;-302 - 变更立项 -303 - 变更申请' AFTER `stage_id`,
-ADD COLUMN `tender_id` INT(11) NULL AFTER `business_id`,
-ADD INDEX `PRJ_STG_BZ` (`prj_id` ASC, `stage_id` ASC, `business_id` ASC);
-;
-
-ALTER TABLE `zh_rpt_archive_encryption`
-ADD COLUMN `business_id` VARCHAR(45) NULL COMMENT '有其他业务情况,统一在这里标识(类uuid),要结合stage_id来看,如stage_id > 0,则是标段和期,< 0则是其他业务,如 -300 -> 变更令;-301 - 变更方案;-302 - 变更立项 -303 - 变更申请' AFTER `stage_id`,
-ADD COLUMN `tender_id` INT(11) NULL AFTER `business_id`,
-ADD INDEX `PRJ_STG_BZ` (`prj_id` ASC, `stage_id` ASC, `business_id` ASC);
-;
-
-ALTER TABLE `zh_rpt_archive_encryption`
-ADD COLUMN `business_type` varchar(30) NOT NULL DEFAULT 'stage' COMMENT 'stage: 期;budget: 动态决算,payment_safe: 支付审批-安全生产费,change: 变更令,change_plan: 变更方案,change_project: 变更立项,change_apply: 变更申请' AFTER `stage_id`;
-
-ALTER TABLE `zh_rpt_archive`
-ADD COLUMN `business_type` varchar(30) NOT NULL DEFAULT 'stage' COMMENT 'stage: 期;budget: 动态决算,payment_safe: 支付审批-安全生产费,change: 变更令,change_plan: 变更方案,change_project: 变更立项,change_apply: 变更申请' AFTER `stage_id`;
-
-ALTER TABLE `zh_role_rpt_rel`
-ADD COLUMN `business_type` varchar(30) NOT NULL DEFAULT 'stage' COMMENT 'stage: 期;budget: 动态决算,payment_safe: 支付审批-安全生产费,change: 变更令,change_plan: 变更方案,change_project: 变更立项,change_apply: 变更申请' AFTER `sid`;
-
-ALTER TABLE `zh_role_rpt_rel`
-ADD COLUMN `business_id` VARCHAR(45) NULL AFTER `sid`,
-ADD INDEX `bz_idx` (`tender_id` ASC, `business_id` ASC);
-;
-
-update zh_rpt_archive A
-set A.tender_id = (select tid from zh_stage B where B.id = A.stage_id)
-where (A.stage_id is not null) && (A.stage_id > 0)
-;
-
-update zh_rpt_archive_encryption A
-set A.tender_id = (select tid from zh_stage B where B.id = A.stage_id)
-where (A.stage_id is not null) && (A.stage_id > 0)
-;
-
+ALTER TABLE `calculation`.`zh_tender_info`
+ADD COLUMN `s_type` varchar(20) NOT NULL DEFAULT '' COMMENT '标段类型(公路gl,房建fj,市政sz)' AFTER `dagl_info`;

+ 74 - 0
sql/update20240313.sql

@@ -0,0 +1,74 @@
+ALTER TABLE `zh_tender`
+ADD COLUMN `settle_order` tinyint(4) NULL DEFAULT 0 COMMENT '结算期数(用于结算变更数据更新判断)' AFTER `material_col_show`;
+
+CREATE TABLE `zh_change_settle_list`  (
+  `id` int NOT NULL AUTO_INCREMENT,
+  `tid` int NULL COMMENT '标段id',
+  `cid` varchar(50) NULL COMMENT '变更id',
+  `gcl_id` varchar(255) NULL DEFAULT NULL COMMENT '项目节id',
+  `mx_id` varchar(255) NULL DEFAULT NULL COMMENT '计量单元id',
+  `amount` decimal(30, 8) NULL DEFAULT NULL COMMENT '终审数量',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT = '变更已结算清单表(用于修订和重审时生成,防止已结算变更清单被删除)';
+
+CREATE TABLE `zh_notice_again`  (
+  `id` int NOT NULL AUTO_INCREMENT,
+  `pid` int NOT NULL COMMENT '项目id',
+  `tid` int NOT NULL COMMENT '标段id',
+  `uid` int NOT NULL COMMENT '用户id',
+  `sp_type` varchar(30) NOT NULL COMMENT '审批类型',
+  `sp_id` int NOT NULL COMMENT '审批类型对应审核表的id',
+  `status` tinyint(2) NOT NULL DEFAULT 1 COMMENT '0为待执行,1为执行中,2为已审',
+  `table_name` varchar(255) NOT NULL COMMENT '对应的审批表名称',
+  `origin_url` json NOT NULL COMMENT 'url信息',
+  `sms_type` varchar(10) NOT NULL COMMENT '模版通知类型',
+  `template` tinyint(2) NOT NULL COMMENT '对应的微信通知模板id',
+  `wx_data` json NOT NULL COMMENT '微信通知的json',
+  `times` tinyint(3) NOT NULL DEFAULT 0 COMMENT '重复发送次数',
+  `in_time` datetime NULL COMMENT '添加时间',
+  `last_time` datetime NULL DEFAULT NULL COMMENT '上一次发送时间',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT = '审批信息重新发送表';
+
+ALTER TABLE `zh_project_account`
+ADD COLUMN `notice_again` json NULL DEFAULT NULL COMMENT '审批信息重新发送设置';
+
+ALTER TABLE `zh_project`
+ADD COLUMN `notice_setting` json NULL DEFAULT NULL COMMENT '重新发送通知设置';
+
+ALTER TABLE `zh_rpt_archive`
+ADD COLUMN `business_id` VARCHAR(45) NULL COMMENT '有其他业务情况,统一在这里标识(类uuid),要结合stage_id来看,如stage_id > 0,则是标段和期,< 0则是其他业务,如 -300 -> 变更令;-301 - 变更方案;-302 - 变更立项 -303 - 变更申请' AFTER `stage_id`,
+ADD COLUMN `tender_id` INT(11) NULL AFTER `business_id`,
+ADD INDEX `PRJ_STG_BZ` (`prj_id` ASC, `stage_id` ASC, `business_id` ASC);
+;
+
+ALTER TABLE `zh_rpt_archive_encryption`
+ADD COLUMN `business_id` VARCHAR(45) NULL COMMENT '有其他业务情况,统一在这里标识(类uuid),要结合stage_id来看,如stage_id > 0,则是标段和期,< 0则是其他业务,如 -300 -> 变更令;-301 - 变更方案;-302 - 变更立项 -303 - 变更申请' AFTER `stage_id`,
+ADD COLUMN `tender_id` INT(11) NULL AFTER `business_id`,
+ADD INDEX `PRJ_STG_BZ` (`prj_id` ASC, `stage_id` ASC, `business_id` ASC);
+;
+
+ALTER TABLE `zh_rpt_archive_encryption`
+ADD COLUMN `business_type` varchar(30) NOT NULL DEFAULT 'stage' COMMENT 'stage: 期;budget: 动态决算,payment_safe: 支付审批-安全生产费,change: 变更令,change_plan: 变更方案,change_project: 变更立项,change_apply: 变更申请' AFTER `stage_id`;
+
+ALTER TABLE `zh_rpt_archive`
+ADD COLUMN `business_type` varchar(30) NOT NULL DEFAULT 'stage' COMMENT 'stage: 期;budget: 动态决算,payment_safe: 支付审批-安全生产费,change: 变更令,change_plan: 变更方案,change_project: 变更立项,change_apply: 变更申请' AFTER `stage_id`;
+
+ALTER TABLE `zh_role_rpt_rel`
+ADD COLUMN `business_type` varchar(30) NOT NULL DEFAULT 'stage' COMMENT 'stage: 期;budget: 动态决算,payment_safe: 支付审批-安全生产费,change: 变更令,change_plan: 变更方案,change_project: 变更立项,change_apply: 变更申请' AFTER `sid`;
+
+ALTER TABLE `zh_role_rpt_rel`
+ADD COLUMN `business_id` VARCHAR(45) NULL AFTER `sid`,
+ADD INDEX `bz_idx` (`tender_id` ASC, `business_id` ASC);
+;
+
+update zh_rpt_archive A
+set A.tender_id = (select tid from zh_stage B where B.id = A.stage_id)
+where (A.stage_id is not null) && (A.stage_id > 0)
+;
+
+update zh_rpt_archive_encryption A
+set A.tender_id = (select tid from zh_stage B where B.id = A.stage_id)
+where (A.stage_id is not null) && (A.stage_id > 0)
+;
+