|  | @@ -172,7 +172,8 @@ let rptSignatureHelper = {
 | 
	
		
			
				|  |  |              roleRelObj.type = '流程';
 | 
	
		
			
				|  |  |              roleRelObj.flowOrder = order;
 | 
	
		
			
				|  |  |              roleRelObj.flow_name = `${assName}(协同)`;
 | 
	
		
			
				|  |  | -            roleRelObj.assFlowInfos = []; // 这里动态记录流程的协审信息(含:人名、单位、职位、签字签章、签字日期)
 | 
	
		
			
				|  |  | +            roleRelObj.assFlowInfos = []; // 这里动态记录流程的协审信息(含:人名、单位、职位、签字签章、签字日期, 其实相当于另一个完整的roleRel对象)
 | 
	
		
			
				|  |  | +            roleRelObj.sign_output = [];
 | 
	
		
			
				|  |  |              ROLE_REL_LIST.push(roleRelObj);
 | 
	
		
			
				|  |  |              STAGE_FLOW.forEach(sf => {
 | 
	
		
			
				|  |  |                  if (sf.audit_order === order) {
 | 
	
	
		
			
				|  | @@ -652,7 +653,7 @@ let rptSignatureHelper = {
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        resetStampSignature(zTreeOprObj.currentRptPageRst, ROLE_REL_LIST, getStageStatus() !== 3);
 | 
	
		
			
				|  |  | +        resetStampSignature(zTreeOprObj.currentRptPageRst, ROLE_REL_LIST, getStageStatus() !== 3, STAGE_AUDIT, LEDGER_LIST);
 | 
	
		
			
				|  |  |          rptSignatureHelper.mergeSignDate(zTreeOprObj.currentRptPageRst, ROLE_REL_LIST, true, getStageStatus() !== 3);
 | 
	
		
			
				|  |  |          rptSignatureHelper.mergeSignature(zTreeOprObj.currentRptPageRst, ROLE_REL_LIST, true, getStageStatus() !== 3);
 | 
	
		
			
				|  |  |          await rptSignatureHelper.resetDummySignature(zTreeOprObj.currentRptPageRst, ROLE_REL_LIST, getStageStatus() !== 3);
 | 
	
	
		
			
				|  | @@ -888,7 +889,8 @@ let rptSignatureHelper = {
 | 
	
		
			
				|  |  |          return rst;
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  |      mergeSignature: function (pageData, currRoleRelList, setPic = false, checkAudit = false) {
 | 
	
		
			
				|  |  | -        for (const page of pageData.items) {
 | 
	
		
			
				|  |  | +        for (let pageIdx = 0; pageIdx < pageData.items.length; pageIdx++) {
 | 
	
		
			
				|  |  | +            const page = pageData.items[pageIdx];
 | 
	
		
			
				|  |  |              if (page.signature_cells) {
 | 
	
		
			
				|  |  |                  // const adHocScells = [];
 | 
	
		
			
				|  |  |                  for (const sCell of page.signature_cells) {
 | 
	
	
		
			
				|  | @@ -897,38 +899,35 @@ let rptSignatureHelper = {
 | 
	
		
			
				|  |  |                          sCell.pre_path = null;
 | 
	
		
			
				|  |  |                          sCell.pic = null;
 | 
	
		
			
				|  |  |                      }
 | 
	
		
			
				|  |  | -                    for (const role_rel of currRoleRelList) {
 | 
	
		
			
				|  |  | -                        if (role_rel.type !== '流程') {
 | 
	
		
			
				|  |  | -                            if (!checkAudit || checkAudit && rptSignatureHelper._chkIfAudit(role_rel)) {
 | 
	
		
			
				|  |  | -                                // 如果签名者是在审核流程中并已审批通过(个人通过,非期通过),则也需要显示
 | 
	
		
			
				|  |  | -                                if (role_rel.signature_name === sCell.signature_name) {
 | 
	
		
			
				|  |  | -                                    // 处理签章
 | 
	
		
			
				|  |  | -                                    if (!Array.isArray(role_rel.sign_output)) {
 | 
	
		
			
				|  |  | -                                        role_rel.sign_output = [];
 | 
	
		
			
				|  |  | -                                        role_rel.sign_output.push(NORMAL_SIGN_STR);
 | 
	
		
			
				|  |  | -                                    }
 | 
	
		
			
				|  |  | -                                    for (const signType of role_rel.sign_output) {
 | 
	
		
			
				|  |  | -                                        switch (signType) {
 | 
	
		
			
				|  |  | -                                            case NORMAL_SIGN_STR:
 | 
	
		
			
				|  |  | -                                                sCell.path = role_rel.sign_path;
 | 
	
		
			
				|  |  | -                                                sCell.pre_path = role_rel.sign_path;
 | 
	
		
			
				|  |  | -                                                if (setPic) {
 | 
	
		
			
				|  |  | -                                                    sCell.pic = role_rel.sign_pic; // 有些场景(如:批量归档)需要直接设置签名数据
 | 
	
		
			
				|  |  | -                                                }
 | 
	
		
			
				|  |  | -                                                break;
 | 
	
		
			
				|  |  | -                                            case COMPANY_SIGN_STR:
 | 
	
		
			
				|  |  | -                                            case PRIVATE_SIGN_STR:
 | 
	
		
			
				|  |  | -                                                // 搬到了mergetStamp方法那去处理了
 | 
	
		
			
				|  |  | -                                            break;
 | 
	
		
			
				|  |  | -                                            default:
 | 
	
		
			
				|  |  | +                    for (const role of currRoleRelList) {
 | 
	
		
			
				|  |  | +                        const role_rel = getTheRightRole(role, pageIdx);
 | 
	
		
			
				|  |  | +                        if (!checkAudit || checkAudit && rptSignatureHelper._chkIfAudit(role_rel)) {
 | 
	
		
			
				|  |  | +                            // 如果签名者是在审核流程中并已审批通过(个人通过,非期通过),则也需要显示
 | 
	
		
			
				|  |  | +                            if (role_rel.signature_name === sCell.signature_name) {
 | 
	
		
			
				|  |  | +                                // 处理签章
 | 
	
		
			
				|  |  | +                                if (!Array.isArray(role_rel.sign_output)) {
 | 
	
		
			
				|  |  | +                                    role_rel.sign_output = [];
 | 
	
		
			
				|  |  | +                                    role_rel.sign_output.push(NORMAL_SIGN_STR);
 | 
	
		
			
				|  |  | +                                }
 | 
	
		
			
				|  |  | +                                for (const signType of role_rel.sign_output) {
 | 
	
		
			
				|  |  | +                                    switch (signType) {
 | 
	
		
			
				|  |  | +                                        case NORMAL_SIGN_STR:
 | 
	
		
			
				|  |  | +                                            sCell.path = role_rel.sign_path;
 | 
	
		
			
				|  |  | +                                            sCell.pre_path = role_rel.sign_path;
 | 
	
		
			
				|  |  | +                                            if (setPic) {
 | 
	
		
			
				|  |  | +                                                sCell.pic = role_rel.sign_pic; // 有些场景(如:批量归档)需要直接设置签名数据
 | 
	
		
			
				|  |  | +                                            }
 | 
	
		
			
				|  |  |                                              break;
 | 
	
		
			
				|  |  | -                                        }
 | 
	
		
			
				|  |  | +                                        case COMPANY_SIGN_STR:
 | 
	
		
			
				|  |  | +                                        case PRIVATE_SIGN_STR:
 | 
	
		
			
				|  |  | +                                            // 搬到了mergetStamp方法那去处理了
 | 
	
		
			
				|  |  | +                                        break;
 | 
	
		
			
				|  |  | +                                        default:
 | 
	
		
			
				|  |  | +                                        break;
 | 
	
		
			
				|  |  |                                      }
 | 
	
		
			
				|  |  | -                                    break;
 | 
	
		
			
				|  |  |                                  }
 | 
	
		
			
				|  |  | +                                break;
 | 
	
		
			
				|  |  |                              }
 | 
	
		
			
				|  |  | -                        } else {
 | 
	
		
			
				|  |  | -                            //
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  |                      }
 | 
	
		
			
				|  |  |                  }
 | 
	
	
		
			
				|  | @@ -936,7 +935,7 @@ let rptSignatureHelper = {
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  | -    resetDummySignature: async function(pageData, roleRel, ifPushRoleRel = false, checkAudit = false) {
 | 
	
		
			
				|  |  | +    resetDummySignature: async function(pageData, roleRels, ifPushRoleRel = false, checkAudit = false) {
 | 
	
		
			
				|  |  |          // 备注:计算草图等其他图形需要额外做些处理
 | 
	
		
			
				|  |  |          let dummySignIdx = 0;
 | 
	
		
			
				|  |  |          const stampPicKeys = [], stampPicFeatures = [];
 | 
	
	
		
			
				|  | @@ -948,18 +947,15 @@ let rptSignatureHelper = {
 | 
	
		
			
				|  |  |                          let passAuditChk = true;
 | 
	
		
			
				|  |  |                          if (checkAudit) {
 | 
	
		
			
				|  |  |                              passAuditChk = false;
 | 
	
		
			
				|  |  | -                            if (roleRel) {
 | 
	
		
			
				|  |  | -                                for (const role_rel of roleRel) {
 | 
	
		
			
				|  |  | -                                    if (role_rel.type !== '流程') {
 | 
	
		
			
				|  |  | -                                        if (role_rel.signature_name === signatureCell.signatureName) {
 | 
	
		
			
				|  |  | -                                            // signatureName(非signature_name)是印章cell特意给的属性,还有isStamp属性
 | 
	
		
			
				|  |  | -                                            if (rptSignatureHelper._chkIfAudit(role_rel)) {
 | 
	
		
			
				|  |  | -                                                passAuditChk = true;
 | 
	
		
			
				|  |  | -                                                break;
 | 
	
		
			
				|  |  | -                                            }
 | 
	
		
			
				|  |  | +                            if (roleRels) {
 | 
	
		
			
				|  |  | +                                for (const role of roleRels) {
 | 
	
		
			
				|  |  | +                                    const role_rel = getTheRightRole(role, pageIdx);
 | 
	
		
			
				|  |  | +                                    if (role_rel.signature_name === signatureCell.signatureName) {
 | 
	
		
			
				|  |  | +                                        // signatureName(非signature_name)是印章cell特意给的属性,还有isStamp属性
 | 
	
		
			
				|  |  | +                                        if (rptSignatureHelper._chkIfAudit(role_rel)) {
 | 
	
		
			
				|  |  | +                                            passAuditChk = true;
 | 
	
		
			
				|  |  | +                                            break;
 | 
	
		
			
				|  |  |                                          }
 | 
	
		
			
				|  |  | -                                    } else {
 | 
	
		
			
				|  |  | -                                        //
 | 
	
		
			
				|  |  |                                      }
 | 
	
		
			
				|  |  |                                  }
 | 
	
		
			
				|  |  |                              }
 | 
	
	
		
			
				|  | @@ -984,7 +980,7 @@ let rptSignatureHelper = {
 | 
	
		
			
				|  |  |                                  // 如果签章信息中存在位置信息,则不执行该方法
 | 
	
		
			
				|  |  |                                  if(!signatureCell.isSaveSignature) _resetStampArea(pageData[JV.NODE_CONTROL_COLLECTION][signatureCell[JV.PROP_CONTROL]], signatureCell, roleRelItem);
 | 
	
		
			
				|  |  |                              }
 | 
	
		
			
				|  |  | -                            if (ifPushRoleRel) roleRel.push(roleRelItem);
 | 
	
		
			
				|  |  | +                            if (ifPushRoleRel) roleRels.push(roleRelItem);
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  |                      }
 | 
	
		
			
				|  |  |                  }
 | 
	
	
		
			
				|  | @@ -998,84 +994,82 @@ let rptSignatureHelper = {
 | 
	
		
			
				|  |  |          const reg4 = new RegExp('\r', 'g');
 | 
	
		
			
				|  |  |          const reg5 = new RegExp('<br/>', 'g');
 | 
	
		
			
				|  |  |          const reg6 = new RegExp('<br>', 'g');
 | 
	
		
			
				|  |  | -        for (const page of pageData.items) {
 | 
	
		
			
				|  |  | +        for (let pageIdx = 0; pageIdx < pageData.items.length; pageIdx++) {
 | 
	
		
			
				|  |  | +            const page = pageData.items[pageIdx];
 | 
	
		
			
				|  |  |              if (page.signature_audit_cells) {
 | 
	
		
			
				|  |  |                  for (const sCell of page.signature_audit_cells) {
 | 
	
		
			
				|  |  |                      sCell.Value = ''; // 这里要先清除原有信息
 | 
	
		
			
				|  |  | -                    for (const role_rel of currRoleRelList) {
 | 
	
		
			
				|  |  | -                        if (role_rel.type !== '流程') {
 | 
	
		
			
				|  |  | -                            if (!checkAudit || checkAudit && rptSignatureHelper._chkIfAudit(role_rel)) {
 | 
	
		
			
				|  |  | -                                // 如果签名者是在审核流程中并已审批通过(个人通过,非期通过),则也需要显示
 | 
	
		
			
				|  |  | -                                if (sCell.signature_name === role_rel.signature_name + '_审核意见') {
 | 
	
		
			
				|  |  | -                                    let preDate = '';
 | 
	
		
			
				|  |  | -                                    sCell.Value = '同意'; // 只有选择了签名的,才需要初始化一个默认的意见(之前的逻辑在有多个签名,哪怕只选择了一个,其他的意见都会有默认意见)
 | 
	
		
			
				|  |  | -                                    for (const audit_rel of currAuditList) {
 | 
	
		
			
				|  |  | -                                        if (role_rel.acc_id === audit_rel.aid) {
 | 
	
		
			
				|  |  | -                                            const isOrAudit = this._chkOrAudit(role_rel.acc_id);
 | 
	
		
			
				|  |  | -                                            if (audit_rel.end_time > preDate && audit_rel.status === 3 || isOrAudit) {
 | 
	
		
			
				|  |  | -                                                sCell.Value = audit_rel.opinion;
 | 
	
		
			
				|  |  | -                                                if (typeof sCell.Value === 'string') {
 | 
	
		
			
				|  |  | -                                                    sCell.Value = sCell.Value.replace(reg1, '|').replace(reg2, '|').replace(reg3, '|').replace(reg4, '|').replace(reg5, '|').replace(reg6, '|');
 | 
	
		
			
				|  |  | -                                                }
 | 
	
		
			
				|  |  | -                                                sCell.Value = (sCell.Value === '' && isOrAudit) ? '同意' : sCell.Value;
 | 
	
		
			
				|  |  | -                                                preDate = audit_rel.end_time;
 | 
	
		
			
				|  |  | -                                            } else {
 | 
	
		
			
				|  |  | -                                                sCell.Value = ''; // 如有匹配,但又不能输出,则需要清空
 | 
	
		
			
				|  |  | +                    for (const role of currRoleRelList) {
 | 
	
		
			
				|  |  | +                        const role_rel = getTheRightRole(role, pageIdx);
 | 
	
		
			
				|  |  | +                        if (!checkAudit || checkAudit && rptSignatureHelper._chkIfAudit(role_rel)) {
 | 
	
		
			
				|  |  | +                            // 如果签名者是在审核流程中并已审批通过(个人通过,非期通过),则也需要显示
 | 
	
		
			
				|  |  | +                            if (sCell.signature_name === role_rel.signature_name + '_审核意见') {
 | 
	
		
			
				|  |  | +                                let preDate = '';
 | 
	
		
			
				|  |  | +                                sCell.Value = '同意'; // 只有选择了签名的,才需要初始化一个默认的意见(之前的逻辑在有多个签名,哪怕只选择了一个,其他的意见都会有默认意见)
 | 
	
		
			
				|  |  | +                                for (const audit_rel of currAuditList) {
 | 
	
		
			
				|  |  | +                                    if (role_rel.acc_id === audit_rel.aid) {
 | 
	
		
			
				|  |  | +                                        const isOrAudit = this._chkOrAudit(role_rel.acc_id);
 | 
	
		
			
				|  |  | +                                        if (audit_rel.end_time > preDate && audit_rel.status === 3 || isOrAudit) {
 | 
	
		
			
				|  |  | +                                            sCell.Value = audit_rel.opinion;
 | 
	
		
			
				|  |  | +                                            if (typeof sCell.Value === 'string') {
 | 
	
		
			
				|  |  | +                                                sCell.Value = sCell.Value.replace(reg1, '|').replace(reg2, '|').replace(reg3, '|').replace(reg4, '|').replace(reg5, '|').replace(reg6, '|');
 | 
	
		
			
				|  |  |                                              }
 | 
	
		
			
				|  |  | -                                            //不能break,实际会有多个审核意见,以最后一个为准
 | 
	
		
			
				|  |  | +                                            sCell.Value = (sCell.Value === '' && isOrAudit) ? '同意' : sCell.Value;
 | 
	
		
			
				|  |  | +                                            preDate = audit_rel.end_time;
 | 
	
		
			
				|  |  | +                                        } else {
 | 
	
		
			
				|  |  | +                                            sCell.Value = ''; // 如有匹配,但又不能输出,则需要清空
 | 
	
		
			
				|  |  |                                          }
 | 
	
		
			
				|  |  | +                                        //不能break,实际会有多个审核意见,以最后一个为准
 | 
	
		
			
				|  |  |                                      }
 | 
	
		
			
				|  |  | -                                    break;
 | 
	
		
			
				|  |  |                                  }
 | 
	
		
			
				|  |  | +                                break;
 | 
	
		
			
				|  |  |                              }
 | 
	
		
			
				|  |  | -                        } else {
 | 
	
		
			
				|  |  | -                            // 流程的处理还得看实际数据
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  |                      }
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  | +    _setDftDate: function (role_rel, isMergeOrgAlso = false) {
 | 
	
		
			
				|  |  | +        if (role_rel.acc_id && (role_rel.sign_date === undefined || role_rel.sign_date ===  null || role_rel.sign_date ===  '')) {
 | 
	
		
			
				|  |  | +            let dftDate = _getSignDateByAllScenarios(role_rel.acc_id);
 | 
	
		
			
				|  |  | +            if (dftDate !== '' && dftDate.length >= 10) {
 | 
	
		
			
				|  |  | +                dftDate = new Date(dftDate); // 不Format,保留时分秒
 | 
	
		
			
				|  |  | +            } else if (dftDate === '') {
 | 
	
		
			
				|  |  | +                if (current_stage_id <= -300 && current_stage_id > -400 && BGL_OBJ && BGL_OBJ.currentBz && BGL_OBJ.currentBz.status === 3) {
 | 
	
		
			
				|  |  | +                    if (STAGE_AUDIT && STAGE_AUDIT.length > 0) {
 | 
	
		
			
				|  |  | +                        dftDate = new Date(STAGE_AUDIT[STAGE_AUDIT.length - 1].end_time);
 | 
	
		
			
				|  |  | +                    } else {
 | 
	
		
			
				|  |  | +                        dftDate = new Date();
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                } else {
 | 
	
		
			
				|  |  | +                    dftDate = new Date();
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            role_rel.sign_date = dftDate;
 | 
	
		
			
				|  |  | +            if (isMergeOrgAlso) {
 | 
	
		
			
				|  |  | +                for (const orgRR of rptSignatureHelper.originalRoleRelList) {
 | 
	
		
			
				|  |  | +                    if (orgRR.signature_name === role_rel.signature_name) {
 | 
	
		
			
				|  |  | +                        orgRR.sign_date = dftDate;
 | 
	
		
			
				|  |  | +                        break;
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                // rptSignatureHelper.originalRoleRelList[rridx].sign_date = dftDate; // 这个在实际情况下originalRoleRelList不一定与currRoleRelList一致
 | 
	
		
			
				|  |  | +                //备注:在多选导出的情况下,originalRoleRelList不需要merge
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  |      mergeSignDate: function (pageData, currRoleRelList, isMergeOrgAlso, checkAudit = false) {
 | 
	
		
			
				|  |  |          if (currRoleRelList && currRoleRelList.length > 0 && STAGE_AUDIT && STAGE_AUDIT.length > 0) {
 | 
	
		
			
				|  |  |              for (let rridx = 0; rridx < currRoleRelList.length; rridx++) {
 | 
	
		
			
				|  |  |                  const role_rel = currRoleRelList[rridx];
 | 
	
		
			
				|  |  |                  if (role_rel.type !== '流程') {
 | 
	
		
			
				|  |  | -                    // if (role_rel.sign_date === undefined || role_rel.sign_date ===  null || role_rel.sign_date ===  '' || this._chkIfOrgRpt(role_rel.acc_id)) {
 | 
	
		
			
				|  |  | -                    // if (role_rel.sign_date === undefined || role_rel.sign_date ===  null || role_rel.sign_date ===  '') {
 | 
	
		
			
				|  |  | -                    if (role_rel.acc_id && (role_rel.sign_date === undefined || role_rel.sign_date ===  null || role_rel.sign_date ===  '')) {
 | 
	
		
			
				|  |  | -                        let dftDate = _getSignDateByAllScenarios(role_rel.acc_id);
 | 
	
		
			
				|  |  | -                        if (dftDate !== '' && dftDate.length >= 10) {
 | 
	
		
			
				|  |  | -                            dftDate = new Date(dftDate); // 不Format,保留时分秒
 | 
	
		
			
				|  |  | -                        } else if (dftDate === '') {
 | 
	
		
			
				|  |  | -                            if (current_stage_id <= -300 && current_stage_id > -400 && BGL_OBJ && BGL_OBJ.currentBz && BGL_OBJ.currentBz.status === 3) {
 | 
	
		
			
				|  |  | -                                if (STAGE_AUDIT && STAGE_AUDIT.length > 0) {
 | 
	
		
			
				|  |  | -                                    dftDate = new Date(STAGE_AUDIT[STAGE_AUDIT.length - 1].end_time);
 | 
	
		
			
				|  |  | -                                } else {
 | 
	
		
			
				|  |  | -                                    dftDate = new Date();
 | 
	
		
			
				|  |  | -                                }
 | 
	
		
			
				|  |  | -                            } else {
 | 
	
		
			
				|  |  | -                                dftDate = new Date();
 | 
	
		
			
				|  |  | -                            }
 | 
	
		
			
				|  |  | -                        }
 | 
	
		
			
				|  |  | -                        role_rel.sign_date = dftDate;
 | 
	
		
			
				|  |  | -                        if (isMergeOrgAlso) {
 | 
	
		
			
				|  |  | -                            for (const orgRR of rptSignatureHelper.originalRoleRelList) {
 | 
	
		
			
				|  |  | -                                if (orgRR.signature_name === role_rel.signature_name) {
 | 
	
		
			
				|  |  | -                                    orgRR.sign_date = dftDate;
 | 
	
		
			
				|  |  | -                                    break;
 | 
	
		
			
				|  |  | -                                }
 | 
	
		
			
				|  |  | -                            }
 | 
	
		
			
				|  |  | -                            // rptSignatureHelper.originalRoleRelList[rridx].sign_date = dftDate; // 这个在实际情况下originalRoleRelList不一定与currRoleRelList一致
 | 
	
		
			
				|  |  | -                            //备注:在多选导出的情况下,originalRoleRelList不需要merge
 | 
	
		
			
				|  |  | -                        }
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | -                } else {
 | 
	
		
			
				|  |  | -                    //
 | 
	
		
			
				|  |  | +                    rptSignatureHelper._setDftDate(role_rel, isMergeOrgAlso);
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        for (const page of pageData.items) {
 | 
	
		
			
				|  |  | +        for (let pageIdx = 0; pageIdx < pageData.items.length; pageIdx++) {
 | 
	
		
			
				|  |  | +            const page = pageData.items[pageIdx];
 | 
	
		
			
				|  |  |              if (page.signature_date_cells) {
 | 
	
		
			
				|  |  |                  for (const sCell of page.signature_date_cells) {
 | 
	
		
			
				|  |  |                      if (typeof sCell.Value === 'string' && sCell.Value.replace(/ /g, '') === '年月日') {
 | 
	
	
		
			
				|  | @@ -1083,7 +1077,9 @@ let rptSignatureHelper = {
 | 
	
		
			
				|  |  |                      } else {
 | 
	
		
			
				|  |  |                          sCell.Value = '';
 | 
	
		
			
				|  |  |                      }
 | 
	
		
			
				|  |  | -                    for (const role_rel of currRoleRelList) {
 | 
	
		
			
				|  |  | +                    for (const role of currRoleRelList) {
 | 
	
		
			
				|  |  | +                        const role_rel = getTheRightRole(role, pageIdx);
 | 
	
		
			
				|  |  | +                        if (role.type === '流程') rptSignatureHelper._setDftDate(role_rel, false);
 | 
	
		
			
				|  |  |                          if (sCell.signature_name === role_rel.signature_name + '_签字日期') {
 | 
	
		
			
				|  |  |                              if (!checkAudit || rptSignatureHelper._chkIfAudit(role_rel)) {
 | 
	
		
			
				|  |  |                                  // 如果签名者是在审核流程中并已审批通过(个人通过,非期通过),则也需要显示
 | 
	
	
		
			
				|  | @@ -1375,7 +1371,68 @@ function _createDummyCell() {
 | 
	
		
			
				|  |  |      return rst;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -function resetStampSignature(pageData, roleRelList, checkAudit = false) {
 | 
	
		
			
				|  |  | +function prepareRightFlowRoles(pageData, roleRelList = [], stg_audit = [], ledgerList = []) {
 | 
	
		
			
				|  |  | +    // 争取在这里一次过把所有页面的流程签名数据整理完毕,方便后面的工序能简单处理
 | 
	
		
			
				|  |  | +    const flowRole = roleRelList.find(role => { return role.type === '流程'; });
 | 
	
		
			
				|  |  | +    for (const role of roleRelList) {
 | 
	
		
			
				|  |  | +        if (role.type === '流程') role.flowAccList = []; // 这里直接清理流程签名信息
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    if (flowRole) {
 | 
	
		
			
				|  |  | +        const ledgerCache = {}; // 生成台账信息cache对象,提高查找效率
 | 
	
		
			
				|  |  | +        ledgerList.forEach(ledger => {
 | 
	
		
			
				|  |  | +            ledgerCache[ledger.id] = ledger;
 | 
	
		
			
				|  |  | +            ledgerCache[`_${ledger.ledger_id}`] = ledger;
 | 
	
		
			
				|  |  | +        })
 | 
	
		
			
				|  |  | +        const auditCache = {}; // 生成stage审核cache对象,提高查找效率
 | 
	
		
			
				|  |  | +        stg_audit.forEach(audit => {
 | 
	
		
			
				|  |  | +            if (audit.audit_type === 4) {
 | 
	
		
			
				|  |  | +                auditCache[`_${audit.aid}`] = `${audit.audit_ledger_id}`; // 统一用string类型来判断
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +        pageData.items.forEach((page, index) => {
 | 
	
		
			
				|  |  | +            if (page.extend_flow_options && page.extend_flow_options !== '') {
 | 
	
		
			
				|  |  | +                for (const role of roleRelList) {
 | 
	
		
			
				|  |  | +                    if (role.type === '流程') {
 | 
	
		
			
				|  |  | +                        role.flowAccList.push(-1); // !!! 每一页都要有一个流程签名指引,-1表示没有
 | 
	
		
			
				|  |  | +                        let preLen = -1; // 
 | 
	
		
			
				|  |  | +                        for (let assIdx = 0; assIdx < role.assFlowInfos.length; assIdx++) {
 | 
	
		
			
				|  |  | +                            const assRole = role.assFlowInfos[assIdx];
 | 
	
		
			
				|  |  | +                            if (auditCache[`_${assRole.acc_id}`]) {
 | 
	
		
			
				|  |  | +                                const ledgerIdStr = `_${auditCache[`_${assRole.acc_id}`]}`;
 | 
	
		
			
				|  |  | +                                const rootLedgerPath = ledgerCache[ledgerIdStr].full_path;
 | 
	
		
			
				|  |  | +                                const thisLedgerPath = ledgerCache[page.extend_flow_options].full_path || '';
 | 
	
		
			
				|  |  | +                                // 这里用了一个取巧的判断,就是子项的code一定完整包括父项的code,且父项code是在最前。
 | 
	
		
			
				|  |  | +                                // 万一以后设计有所变化或台账改了,那么得换判断逻辑,目前先让逻辑跑通
 | 
	
		
			
				|  |  | +                                if (thisLedgerPath.indexOf(rootLedgerPath) === 0) {
 | 
	
		
			
				|  |  | +                                    role.flowAccList[role.flowAccList.length - 1] = assIdx;
 | 
	
		
			
				|  |  | +                                    if (thisLedgerPath.length > preLen) {
 | 
	
		
			
				|  |  | +                                        preLen = thisLedgerPath.length; // 还要考虑到嵌套的情况
 | 
	
		
			
				|  |  | +                                    } else break;
 | 
	
		
			
				|  |  | +                                }
 | 
	
		
			
				|  |  | +                            }
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            // role.flowAccList
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +function getTheRightRole(role, pageIdx) {
 | 
	
		
			
				|  |  | +    let rst = role;
 | 
	
		
			
				|  |  | +    if (role.type === '流程') {
 | 
	
		
			
				|  |  | +        if (role.flowAccList && role.flowAccList.length > pageIdx) {
 | 
	
		
			
				|  |  | +            if (role.flowAccList[pageIdx] !== -1) {
 | 
	
		
			
				|  |  | +                rst = role.assFlowInfos[role.flowAccList[pageIdx]];
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    return rst;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +function resetStampSignature(pageData, roleRelList, checkAudit = false, stg_audit = [], ledgerList = []) {
 | 
	
		
			
				|  |  | +    prepareRightFlowRoles(pageData, roleRelList, stg_audit, ledgerList);
 | 
	
		
			
				|  |  |      const dupPicPaths = [];
 | 
	
		
			
				|  |  |      const _getMaxRect = function(page) {
 | 
	
		
			
				|  |  |          const rect = [100000000, 100000000, 0, 0];
 | 
	
	
		
			
				|  | @@ -1388,55 +1445,53 @@ function resetStampSignature(pageData, roleRelList, checkAudit = false) {
 | 
	
		
			
				|  |  |          return rect;
 | 
	
		
			
				|  |  |      };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    for (const page of pageData.items) {
 | 
	
		
			
				|  |  | +    for (let pageIdx = 0; pageIdx < pageData.items.length; pageIdx++) {
 | 
	
		
			
				|  |  | +        const page = pageData.items[pageIdx];
 | 
	
		
			
				|  |  |          const maxRect = _getMaxRect(page);
 | 
	
		
			
				|  |  |          if (page.signature_cells) {
 | 
	
		
			
				|  |  |              const newStampCells = [];
 | 
	
		
			
				|  |  |              for (let scIdx = 0; scIdx < page.signature_cells.length; scIdx++) {
 | 
	
		
			
				|  |  |                  const sCell = page.signature_cells[scIdx];
 | 
	
		
			
				|  |  | -                for (const role_rel of roleRelList) {
 | 
	
		
			
				|  |  | -                    if (role_rel.type !== '流程') {
 | 
	
		
			
				|  |  | -                        if (!checkAudit || rptSignatureHelper._chkIfAudit(role_rel)) {
 | 
	
		
			
				|  |  | -                            if (sCell.signature_name === role_rel.signature_name) {
 | 
	
		
			
				|  |  | -                                if (Array.isArray(role_rel.sign_output) && role_rel.sign_output.length > 0) {
 | 
	
		
			
				|  |  | -                                    for (const signType of role_rel.sign_output) {
 | 
	
		
			
				|  |  | -                                        switch (signType) {
 | 
	
		
			
				|  |  | -                                            case COMPANY_SIGN_STR:
 | 
	
		
			
				|  |  | -                                            case PRIVATE_SIGN_STR:
 | 
	
		
			
				|  |  | -                                                // 创建一个新的cell
 | 
	
		
			
				|  |  | -                                                let stampPath = (signType === COMPANY_SIGN_STR) ? role_rel.company_stamp_path : role_rel.private_stamp_path;
 | 
	
		
			
				|  |  | -                                                stampPath = OSS_PATH + stampPath;
 | 
	
		
			
				|  |  | -                                                if (dupPicPaths.indexOf(stampPath) < 0) {
 | 
	
		
			
				|  |  | -                                                    dupPicPaths.push(stampPath);
 | 
	
		
			
				|  |  | -                                                }
 | 
	
		
			
				|  |  | -                                                // 签字信息中如果有签章位置信息,则直接用位置信息
 | 
	
		
			
				|  |  | -                                                let signatureArea;
 | 
	
		
			
				|  |  | -                                                if (role_rel.areaData && role_rel.areaData[signType]){
 | 
	
		
			
				|  |  | -                                                    signatureArea =  role_rel.areaData[signType]
 | 
	
		
			
				|  |  | -                                                }
 | 
	
		
			
				|  |  | -                                                const newStampCell = {
 | 
	
		
			
				|  |  | -                                                    signature_name: JV.SIGNATURE_NAME_DUMMY,
 | 
	
		
			
				|  |  | -                                                    control: sCell.control,
 | 
	
		
			
				|  |  | -                                                    style: sCell.style,
 | 
	
		
			
				|  |  | -                                                    path: stampPath,
 | 
	
		
			
				|  |  | -                                                    isStamp: true,
 | 
	
		
			
				|  |  | -                                                    maxRect,
 | 
	
		
			
				|  |  | -                                                    orgArea: sCell.area,
 | 
	
		
			
				|  |  | -                                                    area: signatureArea || {Left: sCell.area.Left, Right: sCell.area.Right, Top: sCell.area.Top, Bottom: sCell.area.Bottom},
 | 
	
		
			
				|  |  | -                                                    signatureName: role_rel.signature_name, // 节点名称
 | 
	
		
			
				|  |  | -                                                    signType, // 签章信息
 | 
	
		
			
				|  |  | -                                                    isSaveSignature: !!signatureArea, // 是否有签章位置信息
 | 
	
		
			
				|  |  | -                                                };
 | 
	
		
			
				|  |  | -                                                newStampCells.push(newStampCell);
 | 
	
		
			
				|  |  | -                                                break;
 | 
	
		
			
				|  |  | -                                            default: break;
 | 
	
		
			
				|  |  | -                                        }
 | 
	
		
			
				|  |  | +                for (const role of roleRelList) {
 | 
	
		
			
				|  |  | +                    const role_rel = getTheRightRole(role, pageIdx);
 | 
	
		
			
				|  |  | +                    if (!checkAudit || rptSignatureHelper._chkIfAudit(role_rel)) {
 | 
	
		
			
				|  |  | +                        if (sCell.signature_name === role_rel.signature_name) {
 | 
	
		
			
				|  |  | +                            if (Array.isArray(role_rel.sign_output) && role_rel.sign_output.length > 0) {
 | 
	
		
			
				|  |  | +                                for (const signType of role_rel.sign_output) {
 | 
	
		
			
				|  |  | +                                    switch (signType) {
 | 
	
		
			
				|  |  | +                                        case COMPANY_SIGN_STR:
 | 
	
		
			
				|  |  | +                                        case PRIVATE_SIGN_STR:
 | 
	
		
			
				|  |  | +                                            // 创建一个新的cell
 | 
	
		
			
				|  |  | +                                            let stampPath = (signType === COMPANY_SIGN_STR) ? role_rel.company_stamp_path : role_rel.private_stamp_path;
 | 
	
		
			
				|  |  | +                                            stampPath = OSS_PATH + stampPath;
 | 
	
		
			
				|  |  | +                                            if (dupPicPaths.indexOf(stampPath) < 0) {
 | 
	
		
			
				|  |  | +                                                dupPicPaths.push(stampPath);
 | 
	
		
			
				|  |  | +                                            }
 | 
	
		
			
				|  |  | +                                            // 签字信息中如果有签章位置信息,则直接用位置信息
 | 
	
		
			
				|  |  | +                                            let signatureArea;
 | 
	
		
			
				|  |  | +                                            if (role_rel.areaData && role_rel.areaData[signType]){
 | 
	
		
			
				|  |  | +                                                signatureArea =  role_rel.areaData[signType]
 | 
	
		
			
				|  |  | +                                            }
 | 
	
		
			
				|  |  | +                                            const newStampCell = {
 | 
	
		
			
				|  |  | +                                                signature_name: JV.SIGNATURE_NAME_DUMMY,
 | 
	
		
			
				|  |  | +                                                control: sCell.control,
 | 
	
		
			
				|  |  | +                                                style: sCell.style,
 | 
	
		
			
				|  |  | +                                                path: stampPath,
 | 
	
		
			
				|  |  | +                                                isStamp: true,
 | 
	
		
			
				|  |  | +                                                maxRect,
 | 
	
		
			
				|  |  | +                                                orgArea: sCell.area,
 | 
	
		
			
				|  |  | +                                                area: signatureArea || {Left: sCell.area.Left, Right: sCell.area.Right, Top: sCell.area.Top, Bottom: sCell.area.Bottom},
 | 
	
		
			
				|  |  | +                                                signatureName: role_rel.signature_name, // 节点名称
 | 
	
		
			
				|  |  | +                                                signType, // 签章信息
 | 
	
		
			
				|  |  | +                                                isSaveSignature: !!signatureArea, // 是否有签章位置信息
 | 
	
		
			
				|  |  | +                                            };
 | 
	
		
			
				|  |  | +                                            newStampCells.push(newStampCell);
 | 
	
		
			
				|  |  | +                                            break;
 | 
	
		
			
				|  |  | +                                        default: break;
 | 
	
		
			
				|  |  |                                      }
 | 
	
		
			
				|  |  |                                  }
 | 
	
		
			
				|  |  |                              }
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  | -                    } else {
 | 
	
		
			
				|  |  | -                        // 流程数据不一样的判断处理
 | 
	
		
			
				|  |  |                      }
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |              }
 | 
	
	
		
			
				|  | @@ -1457,7 +1512,8 @@ function resetStampSignature(pageData, roleRelList, checkAudit = false) {
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  function resetTextSignature(pageData, checkAudit = false) {
 | 
	
		
			
				|  |  | -    for (const page of pageData.items) {
 | 
	
		
			
				|  |  | +    for (let pageIdx = 0; pageIdx < pageData.items.length; pageIdx++) {
 | 
	
		
			
				|  |  | +        const page = pageData.items[pageIdx];
 | 
	
		
			
				|  |  |          for (let sCell of page.signature_cells) {
 | 
	
		
			
				|  |  |              if (!sCell.isStamp) {
 | 
	
		
			
				|  |  |                  let fitCell = null;
 | 
	
	
		
			
				|  | @@ -1471,19 +1527,16 @@ function resetTextSignature(pageData, checkAudit = false) {
 | 
	
		
			
				|  |  |                  if (fitCell) {
 | 
	
		
			
				|  |  |                      fitCell.Value = '';
 | 
	
		
			
				|  |  |                      for (let role of ROLE_REL_LIST) {
 | 
	
		
			
				|  |  | -                        if (role_rel.type !== '流程') {
 | 
	
		
			
				|  |  | -                            if (!checkAudit || rptSignatureHelper._chkIfAudit(role)) {
 | 
	
		
			
				|  |  | -                                if (sCell.signature_name === role.signature_name) {
 | 
	
		
			
				|  |  | -                                    if (role.sign_output && role.sign_output.indexOf(NORMAL_SIGN_STR) >= 0) {
 | 
	
		
			
				|  |  | -                                        fitCell.Value = role.user_name;
 | 
	
		
			
				|  |  | -                                    } else {
 | 
	
		
			
				|  |  | -                                        fitCell.Value = '';
 | 
	
		
			
				|  |  | -                                    }
 | 
	
		
			
				|  |  | -                                    break;
 | 
	
		
			
				|  |  | +                        const role_rel = getTheRightRole(role, pageIdx);
 | 
	
		
			
				|  |  | +                        if (!checkAudit || rptSignatureHelper._chkIfAudit(role_rel)) {
 | 
	
		
			
				|  |  | +                            if (sCell.signature_name === role_rel.signature_name) {
 | 
	
		
			
				|  |  | +                                if (role_rel.sign_output && role_rel.sign_output.indexOf(NORMAL_SIGN_STR) >= 0) {
 | 
	
		
			
				|  |  | +                                    fitCell.Value = role_rel.user_name;
 | 
	
		
			
				|  |  | +                                } else {
 | 
	
		
			
				|  |  | +                                    fitCell.Value = '';
 | 
	
		
			
				|  |  |                                  }
 | 
	
		
			
				|  |  | +                                break;
 | 
	
		
			
				|  |  |                              }
 | 
	
		
			
				|  |  | -                        } else {
 | 
	
		
			
				|  |  | -                            //
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  |                      }
 | 
	
		
			
				|  |  |                  } else {
 | 
	
	
		
			
				|  | @@ -1497,15 +1550,12 @@ function resetTextSignature(pageData, checkAudit = false) {
 | 
	
		
			
				|  |  |                      };
 | 
	
		
			
				|  |  |                      if (ROLE_REL_LIST) {
 | 
	
		
			
				|  |  |                          for (let role of ROLE_REL_LIST) {
 | 
	
		
			
				|  |  | -                            if (role_rel.type !== '流程') {
 | 
	
		
			
				|  |  | -                                if (!checkAudit || rptSignatureHelper._chkIfAudit(role)) {
 | 
	
		
			
				|  |  | -                                    if (sCell.signature_name === role.signature_name && role.sign_output && role.sign_output.indexOf(NORMAL_SIGN_STR) >= 0) {
 | 
	
		
			
				|  |  | -                                        newCell.Value = role.user_name;
 | 
	
		
			
				|  |  | -                                        break;
 | 
	
		
			
				|  |  | -                                    }
 | 
	
		
			
				|  |  | +                            const role_rel = getTheRightRole(role, pageIdx);
 | 
	
		
			
				|  |  | +                            if (!checkAudit || rptSignatureHelper._chkIfAudit(role_rel)) {
 | 
	
		
			
				|  |  | +                                if (sCell.signature_name === role_rel.signature_name && role_rel.sign_output && role_rel.sign_output.indexOf(NORMAL_SIGN_STR) >= 0) {
 | 
	
		
			
				|  |  | +                                    newCell.Value = role_rel.user_name;
 | 
	
		
			
				|  |  | +                                    break;
 | 
	
		
			
				|  |  |                                  }
 | 
	
		
			
				|  |  | -                            } else {
 | 
	
		
			
				|  |  | -                                //
 | 
	
		
			
				|  |  |                              }
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  |                      }
 |