|
@@ -364,6 +364,152 @@ module.exports = app => {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ async indexForPaymentSafe(ctx) {
|
|
|
+ // 安全生产费入口
|
|
|
+ try {
|
|
|
+ await this._getStageAuditViewData(ctx);
|
|
|
+ const pageShow = ctx.session.sessionProject.page_show;
|
|
|
+ pageShow.showArchive = 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)
|
|
|
+ // 没有计量期的概念!!!
|
|
|
+ const paymentAuditorList = await ctx.service.paymentDetailAudit.getAuditors(paymentDetail_id);
|
|
|
+ const tender = ctx.paymentTender;
|
|
|
+ // const treeNodes = await ctx.service.rptTreeNode.getNodesByProjectId([-1, tender.pid]);
|
|
|
+ const treeNodes = await ctx.service.rptTreeNode.getNodesBySourceType([tender.pid], 101); //
|
|
|
+ // 加一个dummy的通用报表
|
|
|
+ const dummyCommonRptNode = { id: 1, name: '通用报表', pid: -1, rpt_type: 0, items: '[]', hidden: true };
|
|
|
+ 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 = await ctx.service.stage.getValidStagesShort(tender.id);
|
|
|
+ const stageList = [];
|
|
|
+ const unitList = await ctx.service.constructionUnit.getAllDataByCondition({ where: { pid: tender.pid } }); // 找公司章用的
|
|
|
+ const isAdmin = ctx.session.sessionUser.is_admin;
|
|
|
+ const lastAuditor = null;
|
|
|
+ const archiveList = [];
|
|
|
+ let prjAccList = await ctx.service.projectAccount.getAllAccountByProjectId(tender.pid);
|
|
|
+ const roleList = await ctx.service.signatureRole.getSignatureRolesByTenderId(tender.id);
|
|
|
+ const usedList = await ctx.service.signatureUsed.getSignatureUsedByTenderId(tender.id);
|
|
|
+ // 根据需求,如果开启了‘开启个人「签字」’功能,则只能是本身用户签名,管理员例外
|
|
|
+ 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 = await this.ctx.service.tender.getList('', userPermission);
|
|
|
+ for (const t of tenderList) {
|
|
|
+ if (t.ledger_status === auditConst.ledger.status.checked) {
|
|
|
+ t.lastStage = await this.ctx.service.stage.getLastestStage(t.id, true);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ 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 = -100;
|
|
|
+ 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 rpt_tpl_items = '{ customize: [], common: [] }';
|
|
|
+ // if (custTreeNodes.length > 0) {
|
|
|
+ // rpt_tpl_items = custTreeNodes[0].rpt_tpl_items;
|
|
|
+ // }
|
|
|
+
|
|
|
+ // 获取所有项目参与者
|
|
|
+ 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: rpt_tpl_items,
|
|
|
+ cust_cfg: JSON.stringify(custCfg),
|
|
|
+ project_id: tender.pid,
|
|
|
+ tender_id: tenderId,
|
|
|
+ tender_name: tender.name,
|
|
|
+ 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),
|
|
|
+ };
|
|
|
+ /*
|
|
|
+ //*/
|
|
|
+ await this.layout('report/index.ejs', renderData, 'report/rpt_all_popup.ejs');
|
|
|
+ } catch (err) {
|
|
|
+ this.log(err);
|
|
|
+ // ctx.redirect('/tender/' + ctx.tender.id + '/measure/stage');
|
|
|
+ }
|
|
|
+ }
|
|
|
/**
|
|
|
* 报表打印页面
|
|
|
*
|
|
@@ -1508,7 +1654,6 @@ async function _chkRawPicSizeOSS(ctx, picPath) {
|
|
|
return rst;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
function _resetPageDataByBreaks(pageDataArr, breakAmt, rpt_names, newRptNames) {
|
|
|
const rst = [];
|
|
|
for (let pi = 0; pi < pageDataArr.length; pi++) {
|