瀏覽代碼

1. 报表数据预设
2. 报表,变更立项,变更申请数据

MaiXinRong 3 年之前
父節點
當前提交
f24815c57c

+ 5 - 0
app/base/base_service.js

@@ -126,6 +126,11 @@ class BaseService extends Service {
         return result;
     }
 
+    async defaultUpdateRows(data) {
+        const result = await this.db.updateRows(this.tableName, data);
+        return result;
+    }
+
     /**
      * 更新数据
      *

+ 30 - 1
app/controller/tender_controller.js

@@ -1371,11 +1371,25 @@ module.exports = app => {
                     switch (f) {
                         case 'change':
                             responseData.data[f] = await ctx.service.change.getAllDataByCondition({
-                                columns: [ 'cid', 'code', 'name' ],
+                                columns: [ 'cid', 'code', 'name', 'selected' ],
                                 where: { tid: this.ctx.tender.id, valid: 1, status: auditConst.flow.status.checked },
                                 orders: [['sin_time', 'desc']],
                             });
                             break;
+                        case 'change_project':
+                            responseData.data[f] = await ctx.service.changeProject.getAllDataByCondition({
+                                columns: [ 'id', 'code', 'name', 'selected' ],
+                                where: { tid: this.ctx.tender.id, status: auditConst.changeProject.status.checked },
+                                orders: [['in_time', 'desc']],
+                            });
+                            break;
+                        case 'change_apply':
+                            responseData.data[f] = await ctx.service.changeApply.getAllDataByCondition({
+                                columns: [ 'id', 'code', 'name', 'selected' ],
+                                where: { tid: this.ctx.tender.id, status: auditConst.changeApply.status.checked },
+                                orders: [['in_time', 'desc']],
+                            });
+                            break;
                         default:
                             throw '未知数据类型';
                     }
@@ -1386,6 +1400,21 @@ module.exports = app => {
                 ctx.ajaxErrorBody(err, '加载数据错误');
             }
         }
+
+        async saveRelaData(ctx) {
+            try {
+                const data = JSON.parse(ctx.request.body.data);
+                console.log(data);
+                const responseData = { err: 0, msg: '', data: {} };
+                if (data.change) await this.ctx.service.change.updateChangeSelect(data.change);
+                if (data.change_apply) await this.ctx.service.changeApply.defaultUpdateRows(data.change_apply);
+                if (data.change_project) this.ctx.service.changeProject.defaultUpdateRows(data.change_project);
+                ctx.body = responseData;
+            } catch (err) {
+                ctx.log(err);
+                ctx.ajaxErrorBody(err, '保存数据错误');
+            }
+        }
     }
 
     return TenderController;

+ 72 - 0
app/public/report/js/rpt_change_rela.js

@@ -0,0 +1,72 @@
+const rptChangeRela = (function (){
+    const info = {
+        change: { title: '请选择变更令' },
+        change_project: { title: '请选择变更立项' },
+        change_apply: { title: '请选择变更申请' },
+    };
+    const data = {};
+    let curType = '';
+    const initList = function () {
+        const html = [], arr = data[curType];
+        for (const a of arr) {
+            const checked = a.selected ? 'checked' : '';
+            html.push('<tr>', `<td class="text-center"><input type="checkbox" name="scr-check" ${checked} value="${a.cid || a.id}"></td>`, `<td>${a.code}</td>`, `<td>${a.name}</td>`, '</tr>');
+        }
+        $('#scr-list').html(html.join(''));
+    };
+    const showChangeRela = async function (type) {
+        curType = type;
+        document.getElementById('scr-title').innerText = info[type].title;
+        if (!data[type]) {
+            const result = await postDataAsync(`/tender/${window.location.pathname.split('/')[2]}/load`, { filter: curType });
+            data[curType] = result[curType];
+        }
+        initList();
+        $('#select-change-rela').modal('show');
+        $('#scr-all').change(function () {
+            const check = this.checked;
+            $('[name=scr-check]').each((i, c) => { c.checked = check });
+        })
+    };
+    const updateChangeRela = async function () {
+        const updateData = {};
+        updateData[curType] = [];
+        if (curType === 'change') {
+            $('[name=scr-check]').each((i, c) => {
+                const ci = data[curType].find(x => { return x.cid === c.value });
+                const checked = c.checked ? 1 : 0;
+                if (ci && ci.selected !== checked) {
+                    updateData[curType].push({ cid: c.value, selected: c.checked });
+                }
+            });
+        } else {
+            $('[name=scr-check]').each((i, c) => {
+                const ci = data[curType].find(x => { return x.id == c.value });
+                const checked = c.checked ? 1 : 0;
+                if (ci && ci.selected !== checked) {
+                    updateData[curType].push({id: c.value, selected: c.checked})
+                }
+            });
+        }
+        if (updateData[curType].length > 0) {
+            await postData(`/tender/${window.location.pathname.split('/')[2]}/saveRela`, updateData);
+            if (curType === 'change') {
+                $('[name=scr-check]').each((i, c) => {
+                    const ci = data[curType].find(x => {
+                        return x.cid === c.value
+                    });
+                    if (ci) ci.selected = c.checked ? 1 : 0;
+                });
+            } else {
+                $('[name=scr-check]').each((i, c) => {
+                    const ci = data[curType].find(x => {
+                        return x.id == c.value
+                    });
+                    if (ci) ci.selected = c.checked ? 1 : 0;
+                });
+            }
+        }
+        $('#select-change-rela').modal('hide');
+    };
+    return { showChangeRela, updateChangeRela }
+})();

+ 1 - 0
app/router.js

@@ -157,6 +157,7 @@ module.exports = app => {
     app.post('/tender/:id/tourist/audit/save', sessionAuth, tenderCheck, uncheckTenderCheck, 'tenderController.saveTourist');
     app.post('/tender/:id/map/save', sessionAuth, tenderCheck, uncheckTenderCheck, 'tenderController.saveMap');
     app.post('/tender/:id/load', sessionAuth, tenderCheck, 'tenderController.loadData');
+    app.post('/tender/:id/saveRela', sessionAuth, tenderCheck, 'tenderController.saveRelaData');
 
     // 预付款
     app.get('/tender/:id/advance/:type', sessionAuth, tenderCheck, 'advanceController.index');

+ 13 - 0
app/service/change.js

@@ -1644,6 +1644,19 @@ module.exports = app => {
                 throw err;
             }
         }
+
+        async updateChangeSelect(data) {
+            const conn = await this.db.beginTransaction();
+            try {
+                for (const d of data) {
+                    await conn.update(this.tableName, { selected: d.selected }, { where: { cid: d.cid } });
+                }
+                await conn.commit();
+            } catch (err) {
+                await conn.rollback();
+                throw err;
+            }
+        }
     }
 
     return Change;

+ 8 - 0
app/service/report.js

@@ -246,6 +246,14 @@ module.exports = app => {
                             runnableRst.push(service.stageRelaImBills.getAllDataByCondition({ where: { tid: params.tender_id, sid: params.stage_id } }));
                             runnableKey.push(filter);
                             break;
+                        case 'mem_change_apply':
+                            runnableRst.push(service.changeApply.getAllDataByCondition({ where: { tid: params.tender_id } }));
+                            runnableKey.push(filter);
+                            break;
+                        case 'mem_change_project':
+                            runnableRst.push(service.changeProject.getAllDataByCondition({ where: { tid: params.tender_id } }));
+                            runnableKey.push(filter);
+                            break;
                         default:
                             break;
                     }

+ 10 - 0
app/view/report/index.ejs

@@ -26,6 +26,16 @@
                         -->
                     </ul>
                 </div>
+                <div class="d-inline-block">
+                    <div class="dropdown">
+                        <button class="btn btn-sm btn-light dropdown-toggle text-primary" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">报表数据预设</button>
+                        <div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
+                            <a class="dropdown-item" href="javascript: void(0)" onclick="rptChangeRela.showChangeRela('change_project');">变更立项</a>
+                            <a class="dropdown-item" href="javascript: void(0)" onclick="rptChangeRela.showChangeRela('change_apply');">变更申请</a>
+                            <a class="dropdown-item" href="javascript: void(0)" onclick="rptChangeRela.showChangeRela('change');">变更令</a>
+                        </div>
+                    </div>
+                </div>
             </div>
             <div>
             </div>

+ 27 - 0
app/view/report/rpt_all_popup.ejs

@@ -513,6 +513,33 @@
         </div>
     </div>
 </div>
+<div class="modal" id="select-change-rela" data-backdrop="static">
+    <div class="modal-dialog" role="document">
+        <div class="modal-content">
+            <div class="modal-header">
+                <h5 class="modal-title" id="scr-title">请选择变更令</h5>
+                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                    <span aria-hidden="true">&times;</span>
+                </button>
+            </div>
+            <div class="modal-body">
+                <table class="table table-bordered">
+                    <tr class="text-center"><th>选择</th><th>变更令号</th><th>工程名称</th></tr>
+                    <tbody id="scr-list">
+                    </tbody>
+                </table>
+            </div>
+            <div class="modal-footer">
+                <div class="form-check form-check-inline mr-auto">
+                    <input class="form-check-input" type="checkbox" id="scr-all">
+                    <label class="form-check-label" for="scr-all">全选</label>
+                </div>
+                <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal">取消</button>
+                <button class="btn btn-sm btn-primary" id="scr-ok" onclick="rptChangeRela.updateChangeRela();">确定</button>
+            </div>
+        </div>
+    </div>
+</div>
 <!--管理推荐报表-->
 <div class="modal fade" id="man-c" data-backdrop="static">
     <div class="modal-dialog" role="document">

+ 108 - 0
builder_report_index_define.js

@@ -254,6 +254,7 @@ const change = {
         { name: '金额_8', field: 'tp_8', type: dataType.currency, tag: { type: 'tp' } },
         { name: '金额_9', field: 'tp_9', type: dataType.currency, tag: { type: 'tp' } },
         { name: '附件名称列表', field: 'attNames', type: dataType.currency },
+        { name: '报表用,是否选择', field: 'selected', type: dataType.int },
     ],
 };
 const change_bills = {
@@ -322,6 +323,112 @@ const change_audit = {
         { name: '审批顺序', field: 'usort', type: dataType.str },
     ],
 };
+
+const change_project = {
+    name: '变更立项(mem_change_project)',
+    remark: '',
+    id: 75,
+    key: 'mem_change_project',
+    prefix: '变更立项',
+    cols: [
+        { name: 'id', field: 'id', type: dataType.int },
+        { name: '标段id', field: 'tid', type: dataType.int },
+        { name: '报表用,是否选择', field: 'selected', type: dataType.int },
+        { name: '发起人', field: 'uid', type: dataType.int },
+        { name: '立项书编号', field: 'code', type: dataType.str },
+        { name: '立项书名称', field: 'name', type: dataType.str },
+        { name: '发起时间', field: 'in_time', type: dataType.str },
+        { name: '立项状态', field: 'status', type: dataType.int },
+        { name: '审批次数', field: 'times', type: dataType.int },
+        { name: '立项书类型', field: 'type', type: dataType.int },
+        { name: '原设计图名称', field: 'org_name', type: dataType.str },
+        { name: '桩号', field: 'peg', type: dataType.str },
+        { name: '图号', field: 'new_code', type: dataType.str },
+        { name: '变更类别', field: 'class', type: dataType.str },
+        { name: '变更性质', field: 'quality', type: dataType.str },
+        { name: '原工程造价(元)', field: 'org_price', type: dataType.currency },
+        { name: '预计变更造价(元)', field: 'change_price', type: dataType.currency },
+        { name: '预计造价增减(元)', field: 'crease_price', type: dataType.currency },
+        { name: '变更原因', field: 'reason', type: dataType.str },
+        { name: '内容摘要', field: 'content', type: dataType.str },
+
+    ],
+};
+const change_project_audit = {
+    name: '变更立项 审批(mem_change_project_audit)',
+    remark: '',
+    id: 76,
+    key: 'mem_change_project_audit',
+    prefix: '变更立项 审批',
+    cols: [
+        { name: 'id', field: 'id', type: dataType.int },
+        { name: '标段id', field: 'tid', type: dataType.int },
+        { name: '立项id', field: 'cpid', type: dataType.int },
+        { name: '审批人id', field: 'aid', type: dataType.int },
+        { name: '审批顺序', field: 'order', type: dataType.int },
+        { name: '审批次数', field: 'times', type: dataType.int },
+        { name: '审批状态', field: 'status', type: dataType.int },
+        { name: '开始审批时间', field: 'begin_time', type: dataType.time },
+        { name: '结束审批时间', field: 'end_time', type: dataType.time },
+        { name: '审批意见', field: 'opinion', type: dataType.str },
+    ],
+};
+
+const change_apply = {
+    name: '变更申请(mem_change_apply)',
+    remark: '',
+    id: 77,
+    key: 'mem_change_apply',
+    prefix: '变更申请',
+    cols: [
+        { name: 'id', field: 'id', type: dataType.int },
+        { name: '标段id', field: 'tid', type: dataType.int },
+        { name: '报表用,是否选择', field: 'selected', type: dataType.int },
+        { name: '发起人', field: 'uid', type: dataType.int },
+        { name: '申请编号', field: 'code', type: dataType.str },
+        { name: '申请名称(变更工程名称)', field: 'name', type: dataType.str },
+        { name: '创建时间', field: 'in_time', type: dataType.time },
+        { name: '申请状态', field: 'status', type: dataType.int },
+        { name: '申请次数', field: 'times', type: dataType.int },
+        { name: '变更意向编号', field: 'project_code', type: dataType.str },
+        { name: '通知书编号', field: 'notice_code', type: dataType.str },
+        { name: '通知书发起人', field: 'notice_uid', type: dataType.int },
+        { name: '原设计图名称', field: 'org_name', type: dataType.str },
+        { name: '桩号', field: 'peg', type: dataType.str },
+        { name: '图号', field: 'new_code', type: dataType.str },
+        { name: '变更图号', field: 'c_new_code', type: dataType.str },
+        { name: '变更设计名称', field: 'design_name', type: dataType.str },
+        { name: '变更类别', field: 'class', type: dataType.str },
+        { name: '变更性质', field: 'quality', type: dataType.str },
+        { name: '原工程造价(元)', field: 'org_price', type: dataType.currency },
+        { name: '预计变更造价(元)', field: 'change_price', type: dataType.currency },
+        { name: '预计造价增减(元)', field: 'crease_price', type: dataType.currency },
+        { name: '变更原因', field: 'reason', type: dataType.str },
+        { name: '原设计情况描述', field: 'org_content', type: dataType.str },
+        { name: '现场实际情况描述', field: 'site_content', type: dataType.str },
+        { name: '内容摘要', field: 'content', type: dataType.str },
+    ],
+};
+const change_apply_audit = {
+    name: '变更申请 审批(mem_change_apply_audit)',
+    remark: '',
+    id: 78,
+    key: 'mem_change_apply_audit',
+    prefix: '变更申请 审批',
+    cols: [
+        { name: 'id', field: 'id', type: dataType.int },
+        { name: '标段id', field: 'tid', type: dataType.int },
+        { name: '立项id', field: 'caid', type: dataType.int },
+        { name: '审批人id', field: 'aid', type: dataType.int },
+        { name: '审批顺序', field: 'order', type: dataType.int },
+        { name: '审批次数', field: 'times', type: dataType.int },
+        { name: '审批状态', field: 'status', type: dataType.int },
+        { name: '开始审批时间', field: 'begin_time', type: dataType.time },
+        { name: '结束审批时间', field: 'end_time', type: dataType.time },
+        { name: '审批意见', field: 'opinion', type: dataType.str },
+    ],
+};
+
 // 期 - 清单
 const stage_bills = {
     name: '期-清单 数据表(mem_stage_bills)',
@@ -2256,6 +2363,7 @@ const defines = [
     stage_bills, stage_bills_compare,
     stage_jgcl, stage_bonus, stage_other, stage_safe_prod, stage_temp_land,
     change, change_bills, change_audit,
+    change_apply, change_apply_audit, change_project, change_project_audit,
     stage_pos, stage_pos_compare,
     stage_pay,
     stage_im_zl, stage_im_tz, stage_im_tz_bills,

+ 1 - 0
config/web.js

@@ -767,6 +767,7 @@ const JsFiles = {
                     '/public/js/shares/tenders2tree.js',
                     '/public/report/js/rpt_custom.js',
                     '/public/js/stage_audit.js',
+                    '/public/report/js/rpt_change_rela.js',
                 ],
                 mergeFile: 'report_main',
             },

+ 10 - 0
sql/update.sql

@@ -328,3 +328,13 @@ ALTER TABLE `zh_change` ADD `up_decimal` TINYINT(2) NULL DEFAULT NULL COMMENT '
 
 ALTER TABLE `zh_rpt_custom_define`
 ADD COLUMN `material_sum_select`  text CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL COMMENT '用户定制信息 - 材差 - 多期汇总表' AFTER `stage_select`;
+
+ALTER TABLE `zh_change`
+ADD COLUMN `selected`  tinyint(4) UNSIGNED NOT NULL DEFAULT 0 COMMENT '报表用,是否选择' AFTER `tid`;
+
+ALTER TABLE `zh_change_project`
+ADD COLUMN `selected`  tinyint(4) UNSIGNED NOT NULL DEFAULT 0 COMMENT '报表用,是否选择' AFTER `tid`;
+
+ALTER TABLE `zh_change_apply`
+ADD COLUMN `selected`  tinyint(4) UNSIGNED NOT NULL DEFAULT 0 COMMENT '报表用,是否选择' AFTER `tid`;
+