|
@@ -311,6 +311,7 @@ module.exports = app => {
|
|
|
viewPmData: PermissionCheck.viewPmData(this.ctx.session.sessionUser.permission),
|
|
|
auditType: auditConst.auditType,
|
|
|
source_type: 1,
|
|
|
+ changes: 'null',
|
|
|
};
|
|
|
await this.layout('report/index.ejs', renderData, 'report/rpt_all_popup.ejs');
|
|
|
// await this.layout('report/index.ejs', renderData);
|
|
@@ -337,9 +338,9 @@ module.exports = app => {
|
|
|
try {
|
|
|
await this._getStageAuditViewData(ctx);
|
|
|
const pageShow = ctx.session.sessionProject.page_show;
|
|
|
- pageShow.showArchive = 1;
|
|
|
- // pageShow.closeWatermark = 1;
|
|
|
+ // pageShow.showArchive = 1;
|
|
|
pageShow.showArchive = 0;
|
|
|
+ // pageShow.closeWatermark = 1;
|
|
|
const tenderId = ctx.params.id;
|
|
|
const paymentDetail_id = ctx.params.did;
|
|
|
// 支付审批: ctx.params.did 是 zh_payment_detail表的id, 通过这个did在 zh_payment_detail_audit表里找审核信息(td_id = ctx.params.did)
|
|
@@ -416,7 +417,6 @@ module.exports = app => {
|
|
|
for (const prjAcc of prjAccList) {
|
|
|
prjAcc.account_group = accountGroup[prjAcc.account_group];
|
|
|
}
|
|
|
- // const rpt_tpl_items = '{ customize: [], common: [] }';
|
|
|
const cust_select_keys = JSON.stringify(['common_safe', 'customize_safe']); // 因其他地方也有可能保存用户报表的显示选择项,因当初设计问题,不好改数据库结构了,但可以调节内部json来满足需求,安全生产费没有这个,就过了
|
|
|
const rpt_tpl_items = { customize: [], common: [] };
|
|
|
commonArrs.forEach(item => {
|
|
@@ -450,7 +450,6 @@ module.exports = app => {
|
|
|
tender: null,
|
|
|
tenderInfo: null,
|
|
|
rpt_tpl_data: JSON.stringify(treeNodes),
|
|
|
- // cust_tpl_data: rpt_tpl_items,
|
|
|
cust_tpl_data: JSON.stringify(rpt_tpl_items),
|
|
|
cust_select_keys,
|
|
|
cust_cfg: JSON.stringify(custCfg),
|
|
@@ -493,6 +492,7 @@ module.exports = app => {
|
|
|
OSS_PATH: ctx.app.config.fujianOssPath,
|
|
|
viewPmData: PermissionCheck.viewPmData(this.ctx.session.sessionUser.permission),
|
|
|
source_type: 101,
|
|
|
+ changes: 'null',
|
|
|
};
|
|
|
/*
|
|
|
//*/
|
|
@@ -622,7 +622,6 @@ module.exports = app => {
|
|
|
tender: null,
|
|
|
tenderInfo: null,
|
|
|
rpt_tpl_data: JSON.stringify(treeNodes),
|
|
|
- // cust_tpl_data: rpt_tpl_items,
|
|
|
cust_tpl_data: JSON.stringify(rpt_tpl_items),
|
|
|
cust_select_keys,
|
|
|
cust_cfg: JSON.stringify(custCfg),
|
|
@@ -665,6 +664,7 @@ module.exports = app => {
|
|
|
OSS_PATH: ctx.app.config.fujianOssPath,
|
|
|
viewPmData: PermissionCheck.viewPmData(this.ctx.session.sessionUser.permission),
|
|
|
source_type: 200,
|
|
|
+ changes: 'null',
|
|
|
};
|
|
|
await this.layout('report/index.ejs', renderData, 'report/rpt_all_popup.ejs');
|
|
|
|
|
@@ -673,6 +673,206 @@ module.exports = app => {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ async _createNodes(ctx, source_type, pid) {
|
|
|
+ const treeNodes = await ctx.service.rptTreeNode.getNodesBySourceType([pid], source_type); // 这个查定制的
|
|
|
+ const commonTreeNodes = await ctx.service.rptTreeNode.getNodesByProjectId([-1]); // 这个查通用的
|
|
|
+ const nodeItems = JSON.parse(commonTreeNodes[0].items);
|
|
|
+ const commonArrs = [];
|
|
|
+ nodeItems.forEach(nodeItem => {
|
|
|
+ if (nodeItem.source_type === source_type) {
|
|
|
+ commonArrs.push(nodeItem);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ // 加一个dummy的通用报表
|
|
|
+ const dummyCommonRptNode = { id: 1, name: '通用报表', pid: -1, rpt_type: 0, items: JSON.stringify(commonArrs) };
|
|
|
+ treeNodes.push(dummyCommonRptNode);
|
|
|
+ const custCfg = await ctx.service.rptCustomizeCfg.getCustomizeCfgByUserId('Administrator');
|
|
|
+ return { treeNodes, commonArrs, custCfg };
|
|
|
+ }
|
|
|
+
|
|
|
+ async _indexForBGL(ctx, source_type) {
|
|
|
+ // 变更令、变更方案、变更立项、变更申请 报表入口
|
|
|
+ try {
|
|
|
+ await this._getStageAuditViewData(ctx);
|
|
|
+ const pageShow = ctx.session.sessionProject.page_show;
|
|
|
+ // pageShow.closeWatermark = 1;
|
|
|
+ pageShow.showArchive = 1;
|
|
|
+ pageShow.closeShowAllCustomized = 0;
|
|
|
+ const tenderId = ctx.params.id;
|
|
|
+ const paymentDetail_id = -1;
|
|
|
+ const pid = ctx.session.sessionProject.id;
|
|
|
+ const budget_id = -1;
|
|
|
+ const sp_id = -1;
|
|
|
+ const { treeNodes, commonArrs, custCfg } = await this._createNodes(ctx, source_type, tenderId);
|
|
|
+ const sorts = ctx.query.sort ? ctx.query.sort : 0;
|
|
|
+ const orders = ctx.query.order ? ctx.query.order : 0;
|
|
|
+ const state = ctx.session.sessionProject.page_show.openChangeState && ctx.query.state ? parseInt(ctx.query.state) : 0;
|
|
|
+ const changes = await ctx.service.change.getListByStatus(tenderId, 0, 1, sorts, orders, state);
|
|
|
+ // console.log(changes);
|
|
|
+ // 加一个dummy的通用报表
|
|
|
+ // const dummyCommonRptNode = { id: 1, name: '通用报表', pid: -1, rpt_type: 0, items: JSON.stringify(commonArrs) };
|
|
|
+ // treeNodes.push(dummyCommonRptNode);
|
|
|
+ // const custTreeNodes = await ctx.service.rptTreeNodeCust.getCustFoldersByUserId(this.ctx.session.sessionUser.accountId);
|
|
|
+ // const custCfg = await ctx.service.rptCustomizeCfg.getCustomizeCfgByUserId('Administrator');
|
|
|
+ const stageList = [];
|
|
|
+ const unitList = await ctx.service.constructionUnit.getAllDataByCondition({ where: { pid } }); // 找公司章用的
|
|
|
+ const isAdmin = ctx.session.sessionUser.is_admin;
|
|
|
+ const lastAuditor = null;
|
|
|
+ const archiveList = [];
|
|
|
+ let prjAccList = await ctx.service.projectAccount.getAllAccountByProjectId(pid);
|
|
|
+ const roleList = [];
|
|
|
+ const usedList = [];
|
|
|
+ // 根据需求,如果开启了‘开启个人「签字」’功能,则只能是本身用户签名,管理员例外
|
|
|
+ if (!ctx.session.sessionUser.is_admin && pageShow.individualSign === 1) {
|
|
|
+ // 削减其他account
|
|
|
+ const newAccList = [];
|
|
|
+ for (const acc of prjAccList) {
|
|
|
+ if (acc.id === this.ctx.session.sessionUser.accountId) {
|
|
|
+ newAccList.push(acc);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ prjAccList = newAccList;
|
|
|
+ }
|
|
|
+ // 分类列表
|
|
|
+ const categoryData = await this.ctx.service.category.getAllCategory(this.ctx.session.sessionProject.id);
|
|
|
+ // 获取用户权限
|
|
|
+ const accountInfo = await this.ctx.service.projectAccount.getDataById(this.ctx.session.sessionUser.accountId);
|
|
|
+ const userPermission = accountInfo !== undefined && accountInfo.permission !== '' ? JSON.parse(accountInfo.permission) : null;
|
|
|
+ // 获取用户可查看的标段
|
|
|
+ // ...
|
|
|
+ const tenderList = [];
|
|
|
+ const cid = this.ctx.helper._.map(treeNodes, 'id');
|
|
|
+ const customSelects = null;
|
|
|
+ const dataSelects = {};
|
|
|
+ dataSelects.material_select = await ctx.service.rptCustomDefine.getDataSelectByRpt(cid,
|
|
|
+ reportConst.rptDataType[JV.NODE_CUS_MATERIAL_SELECT]);
|
|
|
+
|
|
|
+ const materialList = await ctx.service.material.getValidMaterials();
|
|
|
+
|
|
|
+ const stage_id = -300;
|
|
|
+ const stage_order = -1;
|
|
|
+ const sorder = -1;
|
|
|
+ const stage_times = -1;
|
|
|
+ const stage_status = -1;
|
|
|
+
|
|
|
+ for (const prjAcc of prjAccList) {
|
|
|
+ prjAcc.account_group = accountGroup[prjAcc.account_group];
|
|
|
+ }
|
|
|
+ const cust_select_keys = JSON.stringify(['common_dynamic', 'customize_dynamic']); // 因其他地方也有可能保存用户报表的显示选择项,因当初设计问题,不好改数据库结构了,但可以调节内部json来满足需求
|
|
|
+ const rpt_tpl_items = { customize: [], common: [] };
|
|
|
+ const custTreeNodes = await ctx.service.rptTreeNodeCust.getCustFoldersByUserId(this.ctx.session.sessionUser.accountId);
|
|
|
+ if (custTreeNodes.length > 0) {
|
|
|
+ const cust_select_item = JSON.parse(custTreeNodes[0].rpt_tpl_items);
|
|
|
+ if (cust_select_item.common_dynamic) rpt_tpl_items.common = cust_select_item.common_dynamic;
|
|
|
+ if (cust_select_item.customize_dynamic) rpt_tpl_items.customize = cust_select_item.customize_dynamic;
|
|
|
+ if (!cust_select_item.hasOwnProperty('common_dynamic') && !cust_select_item.hasOwnProperty('customize_dynamic')) {
|
|
|
+ commonArrs.forEach(item => {
|
|
|
+ rpt_tpl_items.common.push(item.name);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ commonArrs.forEach(item => {
|
|
|
+ rpt_tpl_items.common.push(item.name);
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取所有项目参与者
|
|
|
+ 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', 'mobile'],
|
|
|
+ });
|
|
|
+ const newAccountGroup = accountGroup.map((item, idx) => {
|
|
|
+ const groupList = accountList.filter(item => item.account_group === idx);
|
|
|
+ return { groupName: item, groupList };
|
|
|
+ });
|
|
|
+ const where = { tid: tenderId };
|
|
|
+ const advance = await ctx.service.advance.getAllDataByCondition({
|
|
|
+ columns: ['id', 'order', 'status', 'selected', 'type'],
|
|
|
+ where,
|
|
|
+ orders: [['type', 'asc'], ['create_time', 'desc']],
|
|
|
+ });
|
|
|
+ advance.forEach(x => {
|
|
|
+ x.statusStr = auditConst.advance.statusString[x.status];
|
|
|
+ x.typeStr = advanceConst.typeColMap[x.type].text;
|
|
|
+ });
|
|
|
+
|
|
|
+ const renderData = {
|
|
|
+ accountGroup: newAccountGroup,
|
|
|
+ accountList,
|
|
|
+ unitList: JSON.stringify(unitList),
|
|
|
+ tender: null,
|
|
|
+ tenderInfo: null,
|
|
|
+ rpt_tpl_data: JSON.stringify(treeNodes),
|
|
|
+ cust_tpl_data: JSON.stringify(rpt_tpl_items),
|
|
|
+ cust_select_keys,
|
|
|
+ cust_cfg: JSON.stringify(custCfg),
|
|
|
+ project_id: pid,
|
|
|
+ tender_id: tenderId,
|
|
|
+ budget_id,
|
|
|
+ sp_id,
|
|
|
+ tender_name: '',
|
|
|
+ detail_id: paymentDetail_id,
|
|
|
+ stg_id: stage_id,
|
|
|
+ stg_order: stage_order,
|
|
|
+ cur_order: sorder,
|
|
|
+ stg_times: stage_times,
|
|
|
+ stg_status: stage_status,
|
|
|
+ stage_list: JSON.stringify(stageList),
|
|
|
+ prj_account_list: JSON.stringify(prjAccList),
|
|
|
+ role_list: JSON.stringify(roleList),
|
|
|
+ used_list: JSON.stringify(usedList),
|
|
|
+ tenderMenu,
|
|
|
+ preUrl: '/tender/' + tenderId + '/measure/stage/' + ctx.params.order,
|
|
|
+ measureType,
|
|
|
+ categoryData,
|
|
|
+ tenderList,
|
|
|
+ auditConst: auditConst.stage,
|
|
|
+ ledgerAuditConst: auditConst.ledger,
|
|
|
+ jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.report.main),
|
|
|
+ customSelects,
|
|
|
+ rptCustomType: reportConst.rptCustomType,
|
|
|
+ materialList,
|
|
|
+ stages: stageList,
|
|
|
+ dataSelects,
|
|
|
+ pageShow,
|
|
|
+ authMobile: accountInfo.auth_mobile,
|
|
|
+ shenpiConst,
|
|
|
+ archiveList,
|
|
|
+ lastAuditor,
|
|
|
+ rpt_id: ctx.query.rpt_id,
|
|
|
+ isAdmin,
|
|
|
+ prePay: JSON.stringify(advance),
|
|
|
+ OSS_PATH: ctx.app.config.fujianOssPath,
|
|
|
+ viewPmData: PermissionCheck.viewPmData(this.ctx.session.sessionUser.permission),
|
|
|
+ source_type,
|
|
|
+ changes: JSON.stringify(changes),
|
|
|
+ };
|
|
|
+ await this.layout('report/index.ejs', renderData, 'report/rpt_all_popup.ejs');
|
|
|
+ } catch (err) {
|
|
|
+ this.log(err);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ async indexForChange(ctx) {
|
|
|
+ // 变更令报表入口
|
|
|
+ await this._indexForBGL(ctx, 20);
|
|
|
+ }
|
|
|
+
|
|
|
+ async indexForChangePlan(ctx) {
|
|
|
+ // 变更方案报表入口
|
|
|
+ await this._indexForBGL(ctx, 21);
|
|
|
+ }
|
|
|
+
|
|
|
+ async indexForChangeProject(ctx) {
|
|
|
+ // 变更立项报表入口
|
|
|
+ await this._indexForBGL(ctx, 22);
|
|
|
+ }
|
|
|
+
|
|
|
+ async indexForChangeApply(ctx) {
|
|
|
+ // 变更申请报表入口
|
|
|
+ await this._indexForBGL(ctx, 23);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 报表打印页面
|
|
|
*
|