buli
2022-04-26 e5675c554cfbdf41b1281a96740b941a0be49d7e
PIPLBackup0426
62个文件已修改
3364 ■■■■ 已修改文件
.sfdx/tools/apex.db 补丁 | 查看 | 原始文档 | blame | 历史
.sfdx/typings/lwc/apex/AgencyAccountCmp.d.ts 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.sfdx/typings/lwc/apex/WeeklyReportCmp.d.ts 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/NewAgencyContact/NewAgencyContact.cmp 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/NewAgencyContact/NewAgencyContactController.js 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/WeeklyReport/WeeklyReport.cmp 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/WeeklyReport/WeeklyReportHelper.js 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/ConsumTrialController.cls 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/ConsumTrialPDFController.cls 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/ConsumTrialPDFControllerTest.cls 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/FileUploadController.cls 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/FileUploadControllerTest.cls 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/FixtureRentalPDFController.cls 51 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LayoutDescriberHelper.cls 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/NewAndEditAddressController.cls 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/NewAndEditBaseController.cls 85 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/NewAndEditBaseControllerTest.cls 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/NewAndEditCaseController.cls 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/NewAndEditLeadController.cls 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/NewAndEditQISController.cls 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/NewAndEditReportController.cls 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/NewAndEditReportControllerTest.cls 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/NewConsumApplyController.cls 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/NewConsumApplyEquipSetDetailController.cls 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/NewRepairController.cls 287 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/NewRepairControllerTest.cls 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/OnCallController.cls 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/PIHelper.cls 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/QISPDFController.cls 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/QISPDFControllerTest.cls 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/RentalApplyController.cls 88 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/StartTradingController.cls 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/StartTradingControllerTest.cls 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/StraightBackAddressController.cls 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/StraightBackAddressControllerTest.cls 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/pages/ConsumTrial.page 105 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/pages/FixtureRentalPDF.page 327 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/pages/InsReportPDF.page 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/pages/NewAndEditASEActivity.page 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/pages/NewAndEditAddress.page 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/pages/NewAndEditAgencyContact.page 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/pages/NewAndEditCampaignMember.page 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/pages/NewAndEditCase.page 51 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/pages/NewAndEditContact.page 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/pages/NewAndEditInquiryForm.page 102 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/pages/NewAndEditInspectionReport.page 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/pages/NewAndEditLead.page 64 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/pages/NewAndEditQIS.page 160 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/pages/NewAndEditRepairSubOrder.page 52 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/pages/NewAndEditReport.page 221 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/pages/NewAndEditTenderinformation.page 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/pages/NewConsumApply.page 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/pages/NewConsumApplyEquipmentSetDetail.page 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/pages/NewOnCall.page 63 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/pages/NewRentalApply.page 102 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/pages/NewRepair.page 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/pages/OFSInsReportLayout.page 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/pages/QISPDF.page 148 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/pages/SearchVisitor.page 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/pages/StartTrading.page 64 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/pages/StraightBackAddress.page 89 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/pages/XinDailyReport.page 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.sfdx/tools/apex.db
Binary files differ
.sfdx/typings/lwc/apex/AgencyAccountCmp.d.ts
@@ -7,3 +7,12 @@
declare module "@salesforce/apex/AgencyAccountCmp.searchAccounts" {
  export default function searchAccounts(param: {hosStr: any, conStr: any}): Promise<any>;
}
declare module "@salesforce/apex/AgencyAccountCmp.SaveLog" {
  export default function SaveLog(param: {module: any, content: any, status: any, respMsg: any}): Promise<any>;
}
declare module "@salesforce/apex/AgencyAccountCmp.GetConfig" {
  export default function GetConfig(): Promise<any>;
}
declare module "@salesforce/apex/AgencyAccountCmp.searchAccounts2" {
  export default function searchAccounts2(param: {hosStr: any, awsids: any}): Promise<any>;
}
.sfdx/typings/lwc/apex/WeeklyReportCmp.d.ts
@@ -1,3 +1,9 @@
declare module "@salesforce/apex/WeeklyReportCmp.getAwsurl" {
  export default function getAwsurl(param: {sobj: any}): Promise<any>;
}
declare module "@salesforce/apex/WeeklyReportCmp.saveAgencyContact" {
  export default function saveAgencyContact(param: {name: any, nameEncrypt: any, type: any, typeEncrypt: any, doctorDivision1: any, doctorDivision1Encrypt: any, agencyHospitalid: any, awsid: any}): Promise<any>;
}
declare module "@salesforce/apex/WeeklyReportCmp.getProductList" {
  export default function getProductList(param: {dc: any, opdsis: any}): Promise<any>;
}
force-app/main/default/aura/NewAgencyContact/NewAgencyContact.cmp
@@ -2,6 +2,7 @@
                controller="NewAgencyContactController">
    
    <aura:attribute name = "recordId" type = "Id" default = ""/>
    <aura:attribute name="title" type="string"/>
    <aura:handler name="init" value="{!this}" action="{!c.doInit}" />
    <aura:attribute name="layout" type="LayoutDescriberHelper.LayoutWrapper"/>
    <aura:attribute name="record_data" type="Map"/>
@@ -9,6 +10,7 @@
    <aura:attribute name="showSpinner" type="Boolean" default = "False"/>
    <aura:attribute name="staticResource" type="Map"/>
    <aura:attribute name="pi_fields_map" type="Map"/>
    <aura:attribute name="isClone" type="Boolean" default = "False"/>
    <ltng:require scripts="{! $Resource.AWSService+'/AWSService.js' }" />
    <ltng:require scripts="{! $Resource.jquery183minjs }" />
    
@@ -16,7 +18,7 @@
        <!-- header -->
        <header class="slds-modal__header">
            <h2 id="modal-heading-01" class="slds-modal__title slds-hyphenate">
                Create Agency Contact
                {!v.title}
            </h2>
        </header>
force-app/main/default/aura/NewAgencyContact/NewAgencyContactController.js
@@ -5,13 +5,24 @@
        if(!rid){
            pid = window.location.href.replace("https://","").split("/")[4];
        }
        let isClone = component.get('v.isClone');
        if(!rid || isClone){
            component.set('v.title',$A.get("$Label.c.New")+'.客户人员');
        }else{
            component.set('v.title',$A.get("$Label.c.Edit")+'.客户人员');
        }
        
        let record_type_id = null;
        let pageref = component.get("v.pageReference")
        if(!record_type_id && pageref){
           record_type_id = pageref.state.recordTypeId
        }
        component.set("v.showSpinner", true);
        helper.CallBackAction(component,'Init',{
            rid : rid,
            pid : pid,
            //rid : component.get('v.recordId'),
            record_type_id : component.get("v.pageReference").state.recordTypeId,
            record_type_id : record_type_id,
        },function(data){
            component.set("v.showSpinner", false);
            
@@ -106,9 +117,12 @@
        
        let staticResource = component.get('v.staticResource');
        let record_id = component.get('v.recordId');
        let record_type_id = component.get('v.recordTypeId');
        let isClone = component.get('v.isClone');
        let url = staticResource.newUrl;
        let payloadPi = {};
        if (record_id) {
        if (record_id && !isClone) {
            url = staticResource.updateUrl
            payloadPi['dataId'] = component.get('v.record_data').AWS_Data_Id__c;
        }
@@ -143,7 +157,7 @@
            
            let obj = result.object[0];
            let data = {};
            if(record_id){
            if(record_id && !isClone){
                data.Id = record_id;
            }else{
                data.AWS_Data_Id__c = obj.dataId;
@@ -190,7 +204,7 @@
                                    "type" : "success"
                                });
                                
                                if (record_id){
                                if (record_id && !isClone){
                                    
                                    $A.get("e.force:closeQuickAction").fire();
                                    $A.get('e.force:refreshView').fire();
force-app/main/default/aura/WeeklyReport/WeeklyReport.cmp
@@ -170,8 +170,8 @@
                            <td role="gridcell" class="slds-cell-edit">
                                <span class="slds-grid slds-grid--align-spread">
                                    <span class="slds-truncate" title="{!item.Person_In_Charge2__r.Name}">
                                        <span class="encrypt">{!item.Person_In_Charge2__r.Name}</span>
                                        <span class="decrypt">{!item.Person_In_Charge2__r.awsdata.lastName}</span>
                                        {!item.Person_In_Charge2__r.Name}
                                        <!-- <span class="decrypt">{!item.Person_In_Charge2__r.awsdata.lastName}</span> -->
                                    </span>
                                </span>
                            </td>
force-app/main/default/aura/WeeklyReport/WeeklyReportHelper.js
@@ -1221,19 +1221,19 @@
    insert_agencycontact : function(component,token,newUrl,payload,agencyHospitalid,helper) {
        AWSService.insert(newUrl,payload,function(result){
            if(result.status == '0'){
                $A.getCallback(function(){
                    helper.to_agencycontact(component,result,agencyHospitalid);
                })();
        // AWSService.insert(newUrl,payload,function(result){
        //     if(result.status == '0'){
        //         $A.getCallback(function(){
        //             helper.to_agencycontact(component,result,agencyHospitalid);
        //         })();
            }else{
                console.log('AWS status error:' + result)
                component.set('v.login',false);
                component.find('OppMessage').setError('AWS insert error.');
            }
        },token);
        /*
        //     }else{
        //         console.log('AWS status error:' + result)
        //         component.set('v.login',false);
        //         component.find('OppMessage').setError('AWS insert error.');
        //     }
        // },token);
        fetch(newUrl, {
            method: 'POST',
            body: payload,
@@ -1258,7 +1258,7 @@
            console.log('AWS insert error:' + error)
            component.set('v.login',false);
            component.find('OppMessage').setError('AWS insert error.');
        });*/
        });
        
    },
force-app/main/default/classes/ConsumTrialController.cls
@@ -231,7 +231,7 @@
                FixtureUtil.withoutUpdate(rndList, true);
                PageReference pag = new PageReference('/apex/ConsumTrial?id=' + parId + '&canedit=true&saveType=1');
                pag.setRedirect(true);
                return pag;
                return null;
            }
            else{
                init();
@@ -418,7 +418,7 @@
                    + String.join(assetFieldApiList, ',')
                    + (assetFieldApiList.size() > 0 ? ',' : '')
                    + String.join(receivingNoteFieldApiList, ',')
                    + ',AWS_Data_Id__c'
                    + ',AWS_Data_Id__c,Trial_User_Encrypt__c'
                 + ' FROM Consum_Apply_Equipment_Set_Detail__c '
                + ' WHERE Consum_Apply_Equipment_Set__r.Consum_Apply__c = \'' + rn.Id + '\'' + wher
                  + ' AND (Cancel_Select__c = false OR NG_Select_Again__c = true)'
@@ -488,7 +488,7 @@
            // dataConfirmation = rnd1.DataConfirmation__c;
            lineNo = lineNo1 + 1;
            canChangeField = 'Show_demonstration__c, Operation_Type__c, Consum_Start_Date__c';
            canChangeField += ',AWS_Data_Id__c, Case_OR_animal_organ__c, Trial_User__c, Follower_User__c, Spare__c, Comment__c, Degree_Of_Importance__c';
            canChangeField += ',AWS_Data_Id__c, Case_OR_animal_organ__c, Trial_User__c,Trial_User_Encrypt__c, Follower_User__c, Spare__c, Comment__c, Degree_Of_Importance__c';
            haveAsset = String.isNotBlank(rnd1.Asset__c);
        }
force-app/main/default/classes/ConsumTrialPDFController.cls
@@ -159,7 +159,7 @@
                  FROM Consum_Apply_Equipment_Set_Detail__c
                 WHERE Consum_Apply_Equipment_Set__r.Consum_Apply__c = :targetConsumApplyId  // 耗材备品配套一览.耗材备品申请
                   AND (Cancel_Select__c = false OR NG_Select_Again__c = true)
                   AND Shipment_request_time2__c != null
                //    AND Shipment_request_time2__c != null //Commented By Li Jun 20220422 for PIPL
              ORDER BY Consum_Apply_Equipment_Set__r.Consum_Apply__c, Consum_Apply_Equipment_Set__c, Fixture_Model_No_F__c, Degree_Of_Importance__c
        ];
        if (consumApplySetDetailList.size() > 0) {
force-app/main/default/classes/ConsumTrialPDFControllerTest.cls
@@ -7,6 +7,7 @@
        strList.add('Consum_Apply_Equipment_Set_Detail__c');
        strList.add('Consum_Apply__c');
        strList.add('Document');
        strList.add('Agency_Contact__c');
        TestDataUtility.CreatePIPolicyConfigurations(strList);
        
        // 用户
force-app/main/default/classes/FileUploadController.cls
@@ -23,6 +23,8 @@
    global static Response saveFile(String fileName,String key,String transId,String parentId){
        FileAddress__c file = new FileAddress__c();
        PIHelper.PIIntegration pI=PIHelper.getPIIntegrationInfo('Document');
        // 去除filename里得“&” bysushanhu 20220414
        fileName = fileName.remove('&');
        file.DownloadLink__c =pI.undeleteUrl+key+'&fileName='+fileName;
        file.FileName__c =fileName;
        file.ViewLink__c =pI.queryUrl+key;
force-app/main/default/classes/FileUploadControllerTest.cls
@@ -1,7 +1,8 @@
@isTest
private class FileUploadControllerTest {
    static testMethod void testMethod1() {
        TestDataUtility.CreatePIPolicyConfiguration('Document');
        // TestDataUtility.CreatePIPolicyConfiguration('Document');
        TestDataUtility.CreatePIPolicyConfiguration();
        Account acc = new Account(Name = 'test');
        Map<String,Object> accMap = new Map<String,Object>();
        accMap.put('Account',acc);
force-app/main/default/classes/FixtureRentalPDFController.cls
@@ -36,6 +36,12 @@
    public Boolean addFlag { get; private set; }//敏感地址使用标记
    public String qrcode { get; private set; }
    public String barcode { get; private set; }
    // 20220413 ljh 抬头显示 add start
    public String AgencyAddressName { get; private set; }
    public Boolean isAgencyOrCenter { get; private set; }
    public String AgencyOrCenterAddress { get; private set; }
    // 20220413 ljh 抬头显示 add end
    public FixtureRentalPDFController() {
        pageNum = Integer.valueOf(ApexPages.currentPage().getParameters().get('page'));
        rentalApplyIdIMG = ApexPages.currentPage().getParameters().get('raid');
@@ -483,23 +489,40 @@
        //新建一页
        
        PDFInfo info = new PDFInfo(new Rental_Apply__c(),New List<Rental_Apply_Equipment_Set_Detail__c>());
        // 20220413 ljh  抬头显示 update start
        //20201120 LJH OCSM_BP5-61 update start
        // if(!IsShowLU){
        //     if(!IsMain){
        //         info.isAgencyOrCenter = true;//办事处
        //         info.AgencyAddressName = '请将备品回寄至';
        //         info.AgencyAddressName += ApplyHeadShow.ToAgency__c == null ? '' : ApplyHeadShow.ToAgency__c;
        //         info.AgencyAddressName += '办事处';
        //         info.AgencyOrCenterAddress = AgencyAddressIdMap.get(ApplyHeadShow.Id);
        //     }else{
        //         info.isAgencyOrCenter = false;//备品中心
        //         info.AgencyOrCenterAddress = centerAddressInfo;
        //     }
        // }else{
        //     info.isAgencyOrCenter = false;//备品中心
        //     info.AgencyOrCenterAddress = centerAddressInfo;
        // }
        //20201120 LJH OCSM_BP5-61 update  end
        if(!IsShowLU){
            if(!IsMain){
                info.isAgencyOrCenter = true;//办事处
                info.AgencyAddressName = '请将备品回寄至';
                info.AgencyAddressName += ApplyHeadShow.ToAgency__c == null ? '' : ApplyHeadShow.ToAgency__c;
                info.AgencyAddressName += '办事处';
                info.AgencyOrCenterAddress = AgencyAddressIdMap.get(ApplyHeadShow.Id);
                isAgencyOrCenter = true;//办事处
                AgencyAddressName = '请将备品回寄至';
                AgencyAddressName += ApplyHeadShow.ToAgency__c == null ? '' : ApplyHeadShow.ToAgency__c;
                AgencyAddressName += '办事处';
                AgencyOrCenterAddress = AgencyAddressIdMap.get(ApplyHeadShow.Id);
            }else{
                info.isAgencyOrCenter = false;//备品中心
                info.AgencyOrCenterAddress = centerAddressInfo;
                isAgencyOrCenter = false;//备品中心
                AgencyOrCenterAddress = centerAddressInfo;
            }   
        }else{
            info.isAgencyOrCenter = false;//备品中心
            info.AgencyOrCenterAddress = centerAddressInfo;
            isAgencyOrCenter = false;//备品中心
            AgencyOrCenterAddress = centerAddressInfo;
        }
        //20201120 LJH OCSM_BP5-61 update  end
        // 20220413 ljh  抬头显示 update end
        integer PageCut = 0;
        if (PageAllNum>=7) {
           PageAllNum=7;
@@ -579,9 +602,11 @@
    // Data Bean
    class PDFInfo {
        public String eSetName { get; private set; } //备品中心管理单号
        public String AgencyAddressName { get; private set; } //回寄地址 20201123 LJH OCSM_BP5-61 add
        public Boolean isAgencyOrCenter { get; private set; } //备品中心?办事处 20201123 LJH OCSM_BP5-61 add
        public String AgencyOrCenterAddress { get; private set; }//20201124 LJH OCSM_BP5-61 add
        // 20220413 ljh  抬头显示 update start
        // public String AgencyAddressName { get; private set; } //回寄地址 20201123 LJH OCSM_BP5-61 add
        // public Boolean isAgencyOrCenter { get; private set; } //备品中心?办事处 20201123 LJH OCSM_BP5-61 add
        // public String AgencyOrCenterAddress { get; private set; }//20201124 LJH OCSM_BP5-61 add
        // 20220413 ljh  抬头显示 update end
        public String requestOwner { get; private set; } //申请人
        public String salesDept { get; private set; } //所属本部
        public String workPlace { get; private set; } //所属办事处
force-app/main/default/classes/LayoutDescriberHelper.cls
@@ -100,7 +100,7 @@
                        /*Map<String, object> nameDetails = (Map<String,object>) layoutComponents.get('Name');*/
                        String fieldLabel = (String) fields.get('label'); 
                        boolean placeholderF = (boolean) fields.get('placeholder'); 
                        boolean isEditable = (boolean) fields.get('editableForNew'); // Check the editable prop
                        boolean isEditable = (boolean) fields.get('editableForUpdate')||(boolean)fields.get('editableForNew'); // Check the editable prop
                        if( (apiName != '' && fieldType =='Field') || (placeholderF)){
                            if(userMode == 'classic' && fieldTypeDetail == 'address'){
                                String fieldLabelPrefix = fieldLabel.split(' ')[0] == 'Address'?'':fieldLabel.split(' ')[0];
force-app/main/default/classes/NewAndEditAddressController.cls
@@ -13,6 +13,7 @@
    public static Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
    public static String sobjectTypeValue = 'Address__c';
    public Boolean isNewMode{set;get;}
    public Boolean isCloneMode{protected set;get;}
    public String rtTypeId {get; set;}
    public String AWSDataId{set;get;}
    public String contactId{set;get;}//For Lookup field
@@ -32,6 +33,7 @@
    // public String CurrentUserName{private set; get;}
    public NewAndEditAddressController(ApexPages.StandardController controller) {
        isNewMode = true;
        isCloneMode = false;
        Input_Required_Field_Msg = Label.Input_Required_Field_Msg;
        PIPL_Name_Label = Label.PIPL_Name_Label;
        PIPL_Input_Account_Error_Msg = label.PIPL_Input_Account_Error_Msg;
@@ -40,7 +42,12 @@
        List<String> fieldList = new List<String>(Schema.getGlobalDescribe().get('Address__c').getDescribe().fields.getMap().keyset());  
        // Add fields to controller. This is to avoid the SOQL error in visualforce page
        if (!Test.isRunningTest()) { 
            controller.addFields(fieldList);}
            controller.addFields(fieldList);
        }
        Map<string,string> mso = ApexPages.currentPage().getParameters();
        if(mso != null && mso.containsKey('newclone')){
            isCloneMode = true;
        }
        SObject obj = controller.getRecord();        
        if(obj.Id != null){
            //更新
@@ -103,8 +110,11 @@
                if(String.isNotBlank(dt)&&dt.contains('T')){
                    dt = dt.replace('T',' ');
                    addressInfo.put(fieldAPI, Datetime.valueOfGmt(dt));
                }else if(String.isNotBlank(fieldValue))  {
                    fieldValue = fieldValue.replace('/', '-') + ':00';
                    addressInfo.put(fieldAPI, Datetime.valueOf(fieldValue));
                }else {
                    addressInfo.put(fieldAPI,fieldValue);
                    addressInfo.put(fieldAPI,null);
                }             
            }else if(String.valueOf(fielddataType)=='Number'||String.valueOf(fielddataType)=='DOUBLE' ){
                addressInfo.put(fieldAPI, (String.isBlank(fieldValue)||String.isEmpty(fieldValue))?null:Decimal.valueOf(fieldValue.replace(',', ''))); 
@@ -119,18 +129,26 @@
        String status = 'success';    
        Response resp = new Response();
        Savepoint sp = Database.setSavepoint();
        Boolean isClone = false;
        // String rid = '';
        String awsDataId = '';
        try{
            System.debug('abcde');
            if(isNew){
            awsDataId = (String)addressInfo.get('AWS_Data_Id__c');
            System.debug('awsDataId = ' + awsDataId);
            Address__c[] addresses = [select id from Address__c where AWS_Data_Id__c =:awsDataId];
            if(!isNew){
                isClone = addresses.size() == 0;
            }
            System.debug('isClone---------'+isClone);
            if(isNew || isClone){
                System.debug('addressInfoNancy = ' + addressInfo);
                insert addressInfo;
            }else{
                System.debug('into update');
                awsDataId = (String)addressInfo.get('AWS_Data_Id__c');
                System.debug('awsDataId = ' + awsDataId);
                Address__c[] addresses = [select id from Address__c where AWS_Data_Id__c =:awsDataId];
                // awsDataId = (String)addressInfo.get('AWS_Data_Id__c');
                // System.debug('awsDataId = ' + awsDataId);
                // Address__c[] addresses = [select id from Address__c where AWS_Data_Id__c =:awsDataId];
                System.debug('addresses[0].id = ' + addresses[0].id);
                addressInfo.put('Id',addresses[0].id);//For testing;
                update addressInfo;
force-app/main/default/classes/NewAndEditBaseController.cls
@@ -6,6 +6,7 @@
    public static Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
    public String sobjectTypeValue {private set; get;}
    public Boolean isNewMode{set;get;}
    public Boolean isCloneMode{protected set;get;}
    public String rtTypeId {get; set;}
    public String AWSDataId{set;get;}
    public String CurrentUserId{private set;get;}
@@ -71,8 +72,12 @@
        system.debug('obj='+sobjectTypeValue);
        
        isNewMode = true;
        isCloneMode = false;
        List<Sobject> lso = Database.query('select id from RecordType where SobjectType = :sobjectTypeValue');
        Map<string,string> mso = ApexPages.currentPage().getParameters();
        if(mso != null && mso.containsKey('newclone')){
            isCloneMode = true;
        }
        if(obj.Id != null){
            recordId = obj.Id;
            isNewMode = false;
@@ -187,13 +192,20 @@
        System.debug('sobjectTypeValue:'+sobjectTypeValue+' Info:' + JSON.serialize(leadJson));
        System.debug('json length='+leadJson.length());
        System.debug('leadJson---------'+leadJson);
        System.debug('isNew---------'+isNew);
        //1. Prepare the payload for  Lead
        Schema.SObjectType leadSchema = schemaMap.get(sobjectTypeValue);
        Map<String, Schema.SObjectField> fieldAPIToTypeMap = leadSchema.getDescribe().fields.getMap();
        Map<String,Object> fieldValueMap = (Map<String,Object>)JSON.deserializeUntyped(leadJson);
        
        system.debug('enter Foo');
        string rtid = null;
        if (fieldValueMap.containsKey('RecordTypeId')) {
            rtid = String.valueOf(fieldValueMap.get('RecordTypeId'));
        }
        List<string> invalid_fields = GetInvalidFieldFromLayout(rtid,sobjectTypeValue);
        Boolean isClone = false;
        //2. Save Record Process
        String status = 'success';    
        Response resp = new Response();
@@ -201,9 +213,15 @@
        Savepoint sp = Database.setSavepoint();
        Sobject leadInfo = sobj;
        try{
            System.debug('abcde');
            for (String fieldAPI: fieldValueMap.keySet()) {
                system.debug('field API='+fieldAPI);
                if(invalid_fields.contains(fieldAPI)){
                    system.debug(fieldAPI+' is invalid');
                    continue;
                }
                if(!fieldAPIToTypeMap.containskey(fieldAPI)){
                    continue;
                }
@@ -234,22 +252,28 @@
            }
            system.debug('for (String fieldAPI: fieldValueMap.keySet()) end');
            awsDataId = (String)leadInfo.get('AWS_Data_Id__c');
            if (string.isBlank(awsDataId)) {
                throw new DMLException('更新时AWS_Data_Id__c不能为空');
            }
            System.debug('awsDataId = ' + awsDataId);
            Sobject[] sobjects = Database.query('select id from '+sobjectTypeValue+' where AWS_Data_Id__c =:awsDataId');
            
            if(isNew){
            if(!isNew){
                isClone = sobjects.size() == 0;
            }
            System.debug('isNew---------'+isNew);
            if(isNew || isClone){
                System.debug('leadInfozhj = ' + leadInfo);
                if(!Test.isRunningTest()){
                    insert leadInfo;
                }
            }else{
                System.debug('into update');
                awsDataId = (String)leadInfo.get('AWS_Data_Id__c');
                if (string.isBlank(awsDataId)) {
                    throw new DMLException('更新时AWS_Data_Id__c不能为空');
                }
                System.debug('awsDataId = ' + awsDataId);
                Sobject[] leads = Database.query('select id from '+sobjectTypeValue+' where AWS_Data_Id__c =:awsDataId');
                System.debug('leads[0].id = ' + leads[0].id);
                leadInfo.put('Id',leads[0].id);//For testing;
                System.debug('sobjects[0].id = ' + sobjects[0].id);
                leadInfo.put('Id',sobjects[0].id);//For testing;
                if(!Test.isRunningTest()){
                    update leadInfo;
                }
@@ -300,4 +324,41 @@
        }
    }
    
    public static List<string> GetInvalidFieldFromLayout(string rtid, string sobject_name){
        List<string> ls = new List<string>();
        string[] only_type = new string[]{'QIS_Report__c'};
        if(!only_type.contains(sobject_name)){
            system.debug('not allow');
            return ls;
        }
        List<Metadata.LayoutSection> sections = MetaDataUtility.GetRecordTypePageLayout(rtid, sobject_name);
        if (sections == null) {
            System.debug('sections=null');
            return ls;
        }
        system.debug(Json.serialize(sections));
        for (Metadata.LayoutSection section : sections) {
            if (section.layoutColumns != null) {
                for (Metadata.LayoutColumn layoutColumn : section.layoutColumns) {
                    if(layoutColumn.layoutItems != null){
                        for (Metadata.LayoutItem item : layoutColumn.layoutItems) {
                            System.debug(item);
                            if(item.field==null)continue;
                            if (item.behavior == Metadata.UiBehavior.READONLY  ) {
                                ls.add(item.field);
                            }
                        }
                    }
                }
            }
        }
        return ls;
    }
}
force-app/main/default/classes/NewAndEditBaseControllerTest.cls
@@ -61,9 +61,10 @@
        LookUpOverrideFields.add('ReporterASE__c');
        a.Init(aseTest);
        String AWSjson = a.AWSToSobjectMapJson;
        aseTest.put('AWS_Data_Id__c','1569989');
        String baseJson = JSON.serialize(aseTest);
        System.debug('baseJson' + baseJson);
        NewAndEditBaseController.save(aseTest, baseJson, 'avgwshDFcxAS', true);
        NewAndEditBaseController.save(aseTest, baseJson, 'avgwshDFcxAS', null);
        Test.stopTest();
@@ -90,7 +91,7 @@
        LookUpOverrideFields.add('ReporterASE__c');
        a.Init(aseTest);
        String AWSjson = a.AWSToSobjectMapJson;
        aseTest.put('AWS_Data_Id__c','1569989');
        String baseJson = JSON.serialize(aseTest);
        System.debug('baseJson' + baseJson);
        NewAndEditBaseController.save(aseTest, baseJson, 'avgwshDFcxAS', true);
force-app/main/default/classes/NewAndEditCaseController.cls
@@ -13,6 +13,7 @@
    public static Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
    public static String sobjectTypeValue = 'Case';
    public Boolean isNewMode{set;get;}
    public Boolean isCloneMode{protected set;get;}
    public String rtTypeId {get; set;}
    public String AWSDataId{set;get;}
    public String contactId{set;get;}//For Lookup field
@@ -33,6 +34,7 @@
    public string AWSToSobjectEncryptedMapJson{get{return JSON.serialize(AWSToSobjectEncryptedMap);}}
    public NewAndEditCaseController(ApexPages.StandardController controller) {
        isNewMode = true;
        isCloneMode = false;
        Input_Required_Field_Msg = Label.Input_Required_Field_Msg;
        PIPL_Name_Label = Label.PIPL_Name_Label;
        PIPL_Input_Account_Error_Msg = label.PIPL_Input_Account_Error_Msg;
@@ -40,6 +42,10 @@
        //获取所有字段
        List<String> fieldList = new List<String>(Schema.getGlobalDescribe().get('Case').getDescribe().fields.getMap().keyset());  
        // Add fields to controller. This is to avoid the SOQL error in visualforce page
        Map<string,string> mso = ApexPages.currentPage().getParameters();
        if(mso != null && mso.containsKey('newclone')){
            isCloneMode = true;
        }
        if (!Test.isRunningTest()) {
            controller.addFields(fieldList);
        }
@@ -60,7 +66,8 @@
            contactsInfo = JSON.serialize(sfIdToAWSIdMap);
        }else{
            //新建
            rtTypeId = ApexPages.currentPage().getParameters().get('RecordType');
            // rtTypeId = ApexPages.currentPage().getParameters().get('RecordType');
            rtTypeId = mso.get('RecordType');
            obj.put('OwnerId',UserInfo.getUserId());
        }
        LayoutDescriberHelper.LayoutWrapper LayoutWrapperValue = LayoutDescriberHelper.describeSectionWithFieldsWrapper(rtTypeId, 'Case','classic');
@@ -127,10 +134,13 @@
            }                  
        }
        System.debug('caseInfo='+caseInfo);
        System.debug('caseInfo.Account__c='+caseInfo.Account__c);
        if (!String.isBlank(caseInfo.ContactId) && (String.isBlank(caseInfo.Account__c) || Id.valueOf(caseInfo.Account__c).to15() =='000000000000000')) {
            if (Id.valueOf(caseInfo.ContactId).to15() !='000000000000000') {
            Contact c = [select id,AccountId from Contact where id = :caseInfo.ContactId];
            caseInfo.Account__c = c.AccountId;
            }
        }
        
        //2. Save Record Process
@@ -138,18 +148,27 @@
        Response resp = new Response();
        Savepoint sp = Database.setSavepoint();
        String rid = '';
        String awsDataId = '';
        Boolean isClone = false;
        try{
            System.debug('abcde');
            if(isNew){
            awsDataId = (String)caseInfo.get('AWS_Data_Id__c');
            System.debug('awsDataId = ' + awsDataId);
            Case[] cases = [select id from Case where AWS_Data_Id__c =:awsDataId];
            if(!isNew){
                isClone = cases.size() == 0;
            }
            if(isNew || isClone){
                System.debug('caseInfozhj = ' + caseInfo);
                if(!Test.isRunningTest()){
                    insert caseInfo;
                }
            }else{
                System.debug('into update');
                String awsDataId = (String)caseInfo.get('AWS_Data_Id__c');
                System.debug('awsDataId = ' + awsDataId);
                Case[] cases = [select id from Case where AWS_Data_Id__c =:awsDataId];
                // String awsDataId = (String)caseInfo.get('AWS_Data_Id__c');
                // System.debug('awsDataId = ' + awsDataId);
                // Case[] cases = [select id from Case where AWS_Data_Id__c =:awsDataId];
                System.debug('cases ========================= ' + cases);
                System.debug('Cases[0].id = ' + cases[0].id);
                caseInfo.put('Id',cases[0].id);//For testing;
force-app/main/default/classes/NewAndEditLeadController.cls
@@ -13,6 +13,7 @@
    public static Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
    public static String sobjectTypeValue = 'Lead';
    public Boolean isNewMode{set;get;}
    public Boolean isCloneMode{protected set;get;}
    public String rtTypeId {get; set;}
    public String AWSDataId{set;get;}
    public String AWSDataIdInquiryForm{set;get;}
@@ -40,10 +41,15 @@
        ApiPrefix = 'PIBackApi';       
        isDecryptContact = '0';
        isNewMode = true;
        isCloneMode = false;
        Input_Required_Field_Msg = Label.Input_Required_Field_Msg;
        PIPL_Name_Label = Label.PIPL_Name_Label;
        PIPL_Input_Account_Error_Msg = label.PIPL_Input_Account_Error_Msg;
        sobjecttypeForFrontEnd = sobjectTypeValue;
        Map<string,string> mso = ApexPages.currentPage().getParameters();
        if(mso != null && mso.containsKey('newclone')){
            isCloneMode = true;
        }
        //获取所有字段
        List<String> fieldList = new List<String>(Schema.getGlobalDescribe().get('Lead').getDescribe().fields.getMap().keyset());  
        // Add fields to controller. This is to avoid the SOQL error in visualforce page
@@ -82,7 +88,7 @@
            contactsInfo = JSON.serialize(sfIdToAWSIdMap);
        }else{
            //看链接中有无带过来的参数(客户人员)
            Map<string,string> mso = ApexPages.currentPage().getParameters();
            // Map<string,string> mso = ApexPages.currentPage().getParameters();
            for(String key : mso.keySet()){
                System.debug('key=' + key + ',value=' + mso.get(key));
            }
@@ -195,19 +201,30 @@
        String status = 'success';    
        Response resp = new Response();
        Savepoint sp = Database.setSavepoint();
        Boolean isClone = false;
        String rid = '';
        String awsDataId = '';
        try{
            System.debug('abcde');
            if(isNew){
            awsDataId = (String)leadInfo.get('AWS_Data_Id__c');
            System.debug('awsDataId = ' + awsDataId);
            Lead[] leads = [select id from Lead where AWS_Data_Id__c =:awsDataId];
            if(!isNew){
                isClone = leads.size() == 0;
            }
            System.debug('isClone---------'+isClone);
            if(isNew || isClone){
                System.debug('leadInfozhj = ' + leadInfo);
                if(!Test.isRunningTest()){
                    insert leadInfo;
                }
            }else{
                System.debug('into update');
                String awsDataId = (String)leadInfo.get('AWS_Data_Id__c');
                System.debug('awsDataId = ' + awsDataId);
                Lead[] leads = [select id from Lead where AWS_Data_Id__c =:awsDataId];
                // String awsDataId = (String)leadInfo.get('AWS_Data_Id__c');
                // System.debug('awsDataId = ' + awsDataId);
                // Lead[] leads = [select id from Lead where AWS_Data_Id__c =:awsDataId];
                System.debug('leads[0].id = ' + leads[0].id);
                leadInfo.put('Id',leads[0].id);//For testing;
                if(!Test.isRunningTest()){
@@ -222,6 +239,25 @@
            System.debug('resp from sfdx back-end' + resp);
            return resp;
        } catch(DmlException e) {
            Integer index = 0;
            System.debug(e.getNumDml());
            System.debug(e.getDmlFields(index));
            System.debug(e.getDmlId(index));
            System.debug(e.getDmlIndex(index));
            System.debug(e.getDmlMessage(index));
            System.debug(e.getDmlStatusCode(index));
            System.debug(e.getDmlType(index));
            system.debug(e.getMessage());
            system.debug(e.getStackTraceString());
            System.debug('into catch'+e.getMessage());
            Database.rollback(sp);
            resp.status = 'Exception';
            resp.message ='保存失败,原因:'+ e.getDmlMessage(index);
            PIHelper.saveTransLog(sobjectTypeValue,(String)leadInfo.get('AWS_Data_Id__c'),rid,transId, leadJson ,status,e.getMessage()+e.getStackTraceString());
            return resp;
        } catch(Exception e) {
            System.debug('into catch'+e.getMessage());
            Database.rollback(sp);
force-app/main/default/classes/NewAndEditQISController.cls
@@ -1,5 +1,6 @@
global with sharing class NewAndEditQISController extends NewAndEditBaseController{
    public String Input_Required_Field_Msg{set;get;}
    public String qisId{set;get;}
    public NewAndEditQISController(ApexPages.StandardController controller) {
        Input_Required_Field_Msg = Label.Input_Required_Field_Msg;
        List<String> fieldList = new List<String>(Schema.getGlobalDescribe().get('QIS_Report__c').getDescribe().fields.getMap().keyset());  
@@ -12,13 +13,16 @@
        //Updated by Chen Yanan 20220323 Start
        String contactId = controller.getRecord().Id;
        if(contactId == null){
            Map<string,string> mso = ApexPages.currentPage().getParameters();
        if(contactId == null){
            system.debug('mso='+mso);
            if(mso.containsKey('CF00N10000002FHFK_lkid')){
                controller.getRecord().put('Name', '*');
            }
        }
        if(mso.containsKey('CF00N100000073PA0_lkid')){
            controller.getRecord().put('QIS_pre__c',mso.get('CF00N100000073PA0_lkid'));
        }
        system.debug('controller.getRecord()='+controller.getRecord());
        //Updated by Chen Yanan 20220323 End
    }
force-app/main/default/classes/NewAndEditReportController.cls
@@ -3,6 +3,7 @@
    public static Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
    public static String sobjectTypeValue = 'Report__c';
    public Boolean isNewMode{set;get;}
    public Boolean isCloneMode{protected set;get;}
    public String rtTypeId {get; set;}
    public String AWSDataId{set;get;}
    public String contactId{set;get;}//For Lookup field
@@ -42,6 +43,7 @@
        AWSToSobjectEncryptedMap = new Map<string,string>();
        sobjectId = [SELECT CustomObjectId,CustomObjectName  FROM CustomObjectUserLicenseMetrics   where CustomObjectName ='Report' limit 1].CustomObjectId;
        isNewMode = true;
        isCloneMode = false;
        Input_Required_Field_Msg = Label.Input_Required_Field_Msg;
        PIPL_Input_Account_Error_Msg = label.PIPL_Input_Account_Error_Msg;
        sobjecttypeForFrontEnd = sobjectTypeValue;
@@ -50,6 +52,10 @@
        // Add fields to controller. This is to avoid the SOQL error in visualforce page
        if (!Test.isRunningTest()) { 
            controller.addFields(fieldList);
        }
        Map<string,string> mso = ApexPages.currentPage().getParameters();
        if(mso != null && mso.containsKey('newclone')){
            isCloneMode = true;
        }
        SObject obj = controller.getRecord();        
        if(obj.Id != null){
@@ -134,7 +140,17 @@
                contactAWSDataId1 = '无';
                contactName1 = '无';
            }
        }else if(ApexPages.currentPage().getParameters().get('CF00N10000008ps6d_lkid') != null){
        }else{
            //新建
            // Map<string,string> mso = ApexPages.currentPage().getParameters();
            //医院/科室/经销商(手写)
            if(mso.containsKey('00N10000002GE3Z')){
                controller.getRecord().put('Manual_Name__c',mso.get('00N10000002GE3Z'));
            }
            rtTypeId = ApexPages.currentPage().getParameters().get('RecordType');
            obj.put('OwnerId',UserInfo.getUserId());
        }
        if(ApexPages.currentPage().getParameters().get('CF00N10000008ps6d_lkid') != null){
            //OPD计划过来的,通过Id查出借出备品申请No1进行展示
            String opdPlanId = ApexPages.currentPage().getParameters().get('CF00N10000008ps6d_lkid');
            if(String.isNotEmpty(opdPlanId)&&String.isNotBlank(opdPlanId)){
@@ -147,17 +163,10 @@
                    }                   
                }
            }                                  
            rtTypeId = ApexPages.currentPage().getParameters().get('RecordType');
            obj.put('OwnerId',UserInfo.getUserId());
        }else{
            //新建
            Map<string,string> mso = ApexPages.currentPage().getParameters();
            //医院/科室/经销商(手写)
            if(mso.containsKey('00N10000002GE3Z')){
                controller.getRecord().put('Manual_Name__c',mso.get('00N10000002GE3Z'));
            }
            rtTypeId = ApexPages.currentPage().getParameters().get('RecordType');
            obj.put('OwnerId',UserInfo.getUserId());
        //OPD计划
        if(mso.containsKey('CF00N10000008ps6d_lkid')){
            controller.getRecord().put('Report_OPDPlan__c',mso.get('CF00N10000008ps6d_lkid'));
        }
        LayoutDescriberHelper.LayoutWrapper LayoutWrapperValue = LayoutDescriberHelper.describeSectionWithFieldsWrapper(rtTypeId, 'Report__c','classic');
        layoutSections = LayoutWrapperValue.layoutSections;
@@ -210,6 +219,7 @@
        Savepoint sp = Database.setSavepoint();
        String rid = '';
        //自定义格式转换
        Boolean isClone = false;
        try{
        for (String fieldAPI: fieldValueMap.keySet()) {
            if(!fieldAPIToTypeMap.containskey(fieldAPI)){
@@ -245,6 +255,13 @@
        }
        System.debug('自定义格式转换结束');
            
            String awsDataId = (String)reportInfo.get('AWS_Data_Id__c');
            System.debug('awsDataId = ' + awsDataId);
            report__c[] reports = [select id from report__c where AWS_Data_Id__c =:awsDataId];
            if(!isNew){
                isClone = reports.size() == 0;
            }
            if(isNew){
                System.debug('reportInfo = ' + reportInfo);               
                if(!Test.isRunningTest()){
@@ -255,9 +272,9 @@
                }
            }else{
                System.debug('into update');
                String awsDataId = (String)reportInfo.get('AWS_Data_Id__c');
                System.debug('awsDataId = ' + awsDataId);
                report__c[] reports = [select id from report__c where AWS_Data_Id__c =:awsDataId];
                // String awsDataId = (String)reportInfo.get('AWS_Data_Id__c');
                // System.debug('awsDataId = ' + awsDataId);
                // report__c[] reports = [select id from report__c where AWS_Data_Id__c =:awsDataId];
                System.debug('reports[0].id = ' + reports[0].id);
                reportInfo.put('Id',reports[0].id);//For testing;                
                if(!Test.isRunningTest()){
force-app/main/default/classes/NewAndEditReportControllerTest.cls
@@ -13,6 +13,7 @@
        List<String> strList = new List<String>();
        strList.add('Report__c');
        strList.add('Contact');
        strList.add('Agency_Contact__c');
        TestDataUtility.CreatePIPolicyConfigurations(strList);
    }
    static testMethod void testMethod1() {
force-app/main/default/classes/NewConsumApplyController.cls
@@ -12,6 +12,7 @@
    public static Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
    public static String sobjectTypeValue = 'Consum_Apply__c';
    public Boolean isNewMode{set;get;}
    public Boolean isCloneMode{protected set;get;}
    public String rtTypeId {get; set;}
    public String AWSDataId{set;get;}
    public List<String> encryptedAPIList{set;get;}   
@@ -30,10 +31,15 @@
    public NewConsumApplyController(ApexPages.StandardController controller) {
        ApiPrefix = 'PIBackApi';  
        isNewMode = true;
        isCloneMode = false;
        Input_Required_Field_Msg = Label.Input_Required_Field_Msg;
        PIPL_Input_Account_Error_Msg = label.PIPL_Input_Account_Error_Msg;
        //获取所有字段
        List<String> fieldList = new List<String>(Schema.getGlobalDescribe().get('Consum_Apply__c').getDescribe().fields.getMap().keyset());  
        Map<string,string> mso = ApexPages.currentPage().getParameters();
        if(mso != null && mso.containsKey('newclone')){
            isCloneMode = true;
        }
        if (!Test.isRunningTest()) { 
            controller.addFields(fieldList);
        }
@@ -55,7 +61,7 @@
            //新建
            rtTypeId = ApexPages.currentPage().getParameters().get('RecordType');
            obj.put('OwnerId',UserInfo.getUserId());
            Map<string,string> mso = ApexPages.currentPage().getParameters();
            // Map<string,string> mso = ApexPages.currentPage().getParameters();
            system.debug('mso='+mso);
            if(mso.containsKey('00N10000008rdgs')){
                controller.getRecord().put('demo_purpose2__c',mso.get('00N10000008rdgs'));
@@ -133,17 +139,26 @@
        Response resp = new Response();
        Savepoint sp = Database.setSavepoint();
        String rid = '';
        Boolean isClone = false;
        String awsDataId = '';
        try{
            System.debug('abcde');
            if(isNew){
            awsDataId = (String)consumApplyInfo.get('AWS_Data_Id__c');
            System.debug('awsDataId = ' + awsDataId);
            Consum_Apply__c[] ConsumApplys = [select id from Consum_Apply__c where AWS_Data_Id__c =:awsDataId];
            if(!isNew){
                isClone = ConsumApplys.size() == 0;
            }
            if(isNew || isClone){
                System.debug('consumApplyInfozhj = ' + consumApplyInfo);
                insert consumApplyInfo;
                System.debug('consumApplyInfo.Id' + consumApplyInfo.Id);
            }else{
                System.debug('into update');
                String awsDataId = (String)consumApplyInfo.get('AWS_Data_Id__c');
                System.debug('awsDataId = ' + awsDataId);
                Consum_Apply__c[] ConsumApplys = [select id from Consum_Apply__c where AWS_Data_Id__c =:awsDataId];
                // String awsDataId = (String)consumApplyInfo.get('AWS_Data_Id__c');
                // System.debug('awsDataId = ' + awsDataId);
                // Consum_Apply__c[] ConsumApplys = [select id from Consum_Apply__c where AWS_Data_Id__c =:awsDataId];
                System.debug('ConsumApplys[0].id = ' + ConsumApplys[0].id);
                consumApplyInfo.put('Id',ConsumApplys[0].id);//For testing;
                update consumApplyInfo;
force-app/main/default/classes/NewConsumApplyEquipSetDetailController.cls
@@ -11,6 +11,7 @@
    public String awsToken{set;get;}
    public static Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
    public static String sobjectTypeValue = 'Consum_Apply_Equipment_Set_Detail__c';
    public Boolean isCloneMode{protected set;get;}
    public Boolean isNewMode{set;get;}
    public String rtTypeId {get; set;}
    public String AWSDataId{set;get;}
@@ -24,9 +25,14 @@
    public String sobjectPrefix{set;get;}
    public NewConsumApplyEquipSetDetailController(ApexPages.StandardController controller) {
        isNewMode = true;
        isCloneMode = false;
        Input_Required_Field_Msg = Label.Input_Required_Field_Msg;
        sobjecttypeForFrontEnd = sobjectTypeValue;
        //获取所有字段
        Map<string,string> mso = ApexPages.currentPage().getParameters();
        if(mso != null && mso.containsKey('newclone')){
            isCloneMode = true;
        }
        List<String> fieldList = new List<String>(Schema.getGlobalDescribe().get('Consum_Apply_Equipment_Set_Detail__c').getDescribe().fields.getMap().keyset());  
        if (!Test.isRunningTest()) { 
            controller.addFields(fieldList);
@@ -81,6 +87,11 @@
                if(String.isNotBlank(fieldValue)&&fieldValue.contains('T')){
                    fieldValue = fieldValue.replace('T',' ');
                    consumApplyInfo.put(fieldAPI, Datetime.valueOfGmt(fieldValue));
                //20220405 By ChenYanan Start
                }else if(String.isNotBlank(fieldValue))  {
                    fieldValue = fieldValue.replace('/', '-') + ':00';
                    consumApplyInfo.put(fieldAPI, Datetime.valueOf(fieldValue));
                //20220405 By ChenYanan End
                }else{
                    consumApplyInfo.put(fieldAPI, null);
                }                    
@@ -98,17 +109,26 @@
        Response resp = new Response();
        Savepoint sp = Database.setSavepoint();
        String rid = '';
        Boolean isClone = false;
        String awsDataId = '';
        try{
            System.debug('abcde');
            awsDataId = (String)consumApplyInfo.get('AWS_Data_Id__c');
            System.debug('awsDataId = ' + awsDataId);
            Consum_Apply_Equipment_Set_Detail__c[] ConsumApplys = [select id from Consum_Apply_Equipment_Set_Detail__c where AWS_Data_Id__c =:awsDataId];
            if(!isNew || isClone){
                isClone = ConsumApplys.size() == 0;
            }
            if(isNew){
                System.debug('consumApplyInfozhj = ' + consumApplyInfo);
                insert consumApplyInfo;
                System.debug('consumApplyInfo.Id' + consumApplyInfo.Id);
            }else{
                System.debug('into update');
                String awsDataId = (String)consumApplyInfo.get('AWS_Data_Id__c');
                System.debug('awsDataId = ' + awsDataId);
                Consum_Apply_Equipment_Set_Detail__c[] ConsumApplys = [select id from Consum_Apply_Equipment_Set_Detail__c where AWS_Data_Id__c =:awsDataId];
                // String awsDataId = (String)consumApplyInfo.get('AWS_Data_Id__c');
                // System.debug('awsDataId = ' + awsDataId);
                // Consum_Apply_Equipment_Set_Detail__c[] ConsumApplys = [select id from Consum_Apply_Equipment_Set_Detail__c where AWS_Data_Id__c =:awsDataId];
                System.debug('ConsumApplys[0].id = ' + ConsumApplys[0].id);
                consumApplyInfo.put('Id',ConsumApplys[0].id);//For testing;
                update consumApplyInfo;
force-app/main/default/classes/NewRepairController.cls
@@ -26,6 +26,9 @@
    public String sobjectPrefix{set;get;}
    public String sobjecttypeForFrontEnd{set;get;}
    public String sobjectId{set;get;}
    public String workLocationSelect{set;get;}
    public String RepairSubOrderAWSDataId{set;get;}
    public String staticResourceRepairSubOrder{set;get;}
    public NewRepairController(ApexPages.StandardController controller) {
        sobjectId = [SELECT CustomObjectId,CustomObjectName  FROM CustomObjectUserLicenseMetrics   where CustomObjectName ='Repair' limit 1].CustomObjectId;
        isNewMode = true;
@@ -52,15 +55,238 @@
            //新建
            Map<string,string> mso = ApexPages.currentPage().getParameters();
            system.debug('mso='+mso);
            //修理品返送地
            if(mso.containsKey('00N10000006P6SM')){
                controller.getRecord().put('SalesOfficeCode_selection__c',mso.get('00N10000006P6SM'));
            }
            if(mso.containsKey('00N10000002FH86')){
                controller.getRecord().put('On_site_repair__c',mso.get('00N10000002FH86'));
                //controller.getRecord().put('On_site_repair__c',mso.get('00N10000002FH86'));
                //Repair_Source__c
                controller.getRecord().put('Repair_Source__c',mso.get('00N10000002FH86'));
            }
            if(mso.containsKey('00N10000006P6Rn')){
                controller.getRecord().put('work_location_select__c',mso.get('00N10000006P6Rn'));
                workLocationSelect = mso.get('00N10000006P6Rn');
                System.debug('workLocationSelect = ' + workLocationSelect);
            }
            //问题内容描述00N10000002Dx6I
            if(mso.containsKey('00N10000002Dx6I')){
                controller.getRecord().put('Repair_Detail__c',mso.get('00N10000002Dx6I'));
            }
            //问题联络收到日00N10000008rsVQ
            if(mso.containsKey('00N10000008rsVQ')){
                String o = mso.get('00N10000008rsVQ');
                controller.getRecord().put('DateReceiptQuestions__c',(String.isBlank(o)||String.isEmpty(o))? null:Date.valueOf(o.replace('/', '-')));
            }
            //是否有死亡、伤害、感染00N10000008rsW7
            if(mso.containsKey('00N10000008rsW7')){
                controller.getRecord().put('ifDeadHurt__c',mso.get('00N10000008rsW7'));
            }
            //是否和这次的产品故障有关00N10000008rsVw
            if(mso.containsKey('00N10000008rsVw')){
                controller.getRecord().put('ProductFailureRelated__c',mso.get('00N10000008rsVw'));
            }
            //医院有没有向政府机关报告不良事件或疑似不良事件00N10000008rsW2
            if(mso.containsKey('00N10000008rsW2')){
                controller.getRecord().put('ReportAdverseEvents__c',mso.get('00N10000008rsW2'));
            }
            //做的是哪个项目00N10000008rsW6
            if(mso.containsKey('00N10000008rsW6')){
                controller.getRecord().put('WhatProject__c',mso.get('00N10000008rsW6'));
            }
            //手术/检查名称00N10000008rsVk
            if(mso.containsKey('00N10000008rsVk')){
                controller.getRecord().put('OperationOrExaminationName__c',mso.get('00N10000008rsVk'));
            }
            //是否有发生断裂或脱落00N10000008rsVN
            if(mso.containsKey('00N10000008rsVN')){
                controller.getRecord().put('BreakORFallOff__c',mso.get('00N10000008rsVN'));
            }
            //配套使用产品00N10000008rsW4
            if(mso.containsKey('00N10000008rsW4')){
                controller.getRecord().put('SupportingProducts__c',mso.get('00N10000008rsW4'));
            }
            //发现故障后,医院对患者的处理情况00N10000008rsVL
            if(mso.containsKey('00N10000008rsVL')){
                controller.getRecord().put('AfterFailureInformation__c',mso.get('00N10000008rsVL'));
            }
            //发现故障现象后,有延误15分钟以上的手术实施的情况发生吗00N10000008rsVR
            if(mso.containsKey('00N10000008rsVR')){
                controller.getRecord().put('Delay15Min__c',mso.get('00N10000008rsVR'));
            }
            //信息是从医院的谁那里得到的00N10000008rsVZ
            if(mso.containsKey('00N10000008rsVZ')){
                controller.getRecord().put('InformationFrom__c',mso.get('00N10000008rsVZ'));
            }
            //在医院,故障发生的频率是多少00N10000008rsVT
            if(mso.containsKey('00N10000008rsVT')){
                controller.getRecord().put('FailureQInHospital__c',mso.get('00N10000008rsVT'));
            }
            //问题发生时间情况00N10000008rsVv
            if(mso.containsKey('00N10000008rsVv')){
                controller.getRecord().put('ProblemOccurred__c',mso.get('00N10000008rsVv'));
            }
            //是否用该产品完成了手术/检查00N10000008rsW5
            if(mso.containsKey('00N10000008rsW5')){
                if(mso.get('00N10000008rsW5') != 'undefined'){
                    controller.getRecord().put('UseFailProductFinish__c',mso.get('00N10000008rsW5'));
                }
            }
            //故障发生日00N10000002Dx5y
            if(mso.containsKey('00N10000002Dx5y')){
                String o = mso.get('00N10000002Dx5y');
                controller.getRecord().put('Failure_Occurrence_Date__c',(String.isBlank(o)||String.isEmpty(o))? null:Date.valueOf(o.replace('/', '-')));
            }
            //修理委托者(FSE)CF00N10000002EMHw_lkid
            if(mso.containsKey('CF00N10000002EMHw_lkid')){
                controller.getRecord().put('Incharge_Staff__c',mso.get('CF00N10000002EMHw_lkid'));
            }
            //原修理受付番号00N1m000005gt1l
            if(mso.containsKey('00N1m000005gt1l')){
                controller.getRecord().put('Old_Name__c',mso.get('00N1m000005gt1l'));
            }
            //设备型号CF00N10000002Dx1X_lkid
            if(mso.containsKey('CF00N10000002Dx1X_lkid')){
                controller.getRecord().put('Delivered_Product__c',mso.get('CF00N10000002Dx1X_lkid'));
            }
            //维修委托书号码00N10000006P1dw
            if(mso.containsKey('00N10000006P1dw')){
                controller.getRecord().put('PaperRepairRequestNo__c',mso.get('00N10000006P1dw'));
            }
            //通过id查
            Repair__c rc = null;
            if (mso.containsKey('RepairId')) {
                String RepairId = mso.get('RepairId');
                rc = [select Hospital__c,Department_Class__c,Account__c,Dealer__c,Incharge_Staff_Contact__c,Incharge_Staff__c from Repair__c where id =:RepairId ];
                //医院
                controller.getRecord().put('Hospital__c',rc.Hospital__c);
                //战略科室分类
                controller.getRecord().put('Department_Class__c',rc.Department_Class__c);
                //科室
                controller.getRecord().put('Account__c',rc.Account__c);
                //经销商名
                controller.getRecord().put('Dealer__c',rc.Dealer__c);
                //修理委托者(员工)
                controller.getRecord().put('Incharge_Staff_Contact__c',rc.Incharge_Staff_Contact__c);
                //修理委托者(FSE)
                controller.getRecord().put('Incharge_Staff__c',rc.Incharge_Staff__c);
            }
            //市场多年保修 有偿/无偿修理00N10000008rG4p
            if(mso.containsKey('00N10000008rG4p')){
                controller.getRecord().put('RepairCostType__c',mso.get('00N10000008rG4p'));
            }
            //服务方式00N10000002F6dW
            if(mso.containsKey('00N10000002F6dW')){
                controller.getRecord().put('On_site_repair__c',mso.get('00N10000002F6dW'));
            }
            //返品方式00N1m000004QmcJ
            if(mso.containsKey('00N1m000004QmcJ')){
                controller.getRecord().put('Returns_Product_way__c',mso.get('00N1m000004QmcJ'));
            }
            //问题内容描述(图片)00N10000008rsVuEAI
            if(mso.containsKey('00N10000008rsVuEAI')){
                controller.getRecord().put('ProblemDescription__c',mso.get('00N10000008rsVuEAI'));
            }
            //如果是测试环境
            Boolean isTest = NFMUtil.isSandbox();
            //报修人00N1m0000054ufW
            String RepairApplicant = isTest==true?'00N1m0000054ufW':'00N10000009H1rQ';
            if(mso.containsKey(RepairApplicant)){
                controller.getRecord().put('RepairApplicant__c',mso.get(RepairApplicant));
            }
            //报修人医院00N1m0000054ufU
            String RepairApplicantHospital = isTest==true?'00N1m0000054ufU':'00N10000009H1rP';
            if(mso.containsKey(RepairApplicantHospital)){
                controller.getRecord().put('RepairApplicantHospital__c',mso.get(RepairApplicantHospital));
            }
            //报修人科室00N1m0000054ufT
            String RepairApplicantDepartment = isTest==true?'00N1m0000054ufT':'00N10000009H1rO';
            if(mso.containsKey(RepairApplicantDepartment)){
                controller.getRecord().put('RepairApplicantDepartment__c',mso.get(RepairApplicantDepartment));
            }
            //报修子单CF00N1m0000054ufZ_lkid
            String RepairSubOrder = isTest==true?'CF00N1m0000054ufZ_lkid':'CF00N10000009H1rR_lkid';
            if(mso.containsKey(RepairSubOrder)){
                controller.getRecord().put('RepairSubOrder__c',mso.get(RepairSubOrder));
                //查询AWSDataId
                List<RepairSubOrder__c> rso = [select AWS_Data_Id__c from RepairSubOrder__c where Id=:mso.get(RepairSubOrder)];
                if(rso.size() > 0){
                    RepairSubOrderAWSDataId = rso[0].AWS_Data_Id__c;
                }
            }
            //报修发起日
            String RepairTime = isTest==true?'00N1m0000054ufa':'00N10000009H1rS';
            if(mso.containsKey(RepairTime)){
                String o = mso.get(RepairTime);
                controller.getRecord().put('RepairTime__c',(String.isBlank(o)||String.isEmpty(o))? null:Date.valueOf(o.replace('/', '-')));
            }
            //报修单受理日ReceiverTime__c
            String ReceiverTime = isTest==true?'00N1m0000054ufS':'00N10000009H1rN';
            if(mso.containsKey(ReceiverTime)){
                String o = mso.get(ReceiverTime);
                controller.getRecord().put('ReceiverTime__c',(String.isBlank(o)||String.isEmpty(o))? null:Date.valueOf(o.replace('/', '-')));
            }
            //计划上门日
            String PlannedVisitDay = isTest==true?'00N1m000005SRiF':'00N10000009H1rM';
            if(mso.containsKey(PlannedVisitDay)){
                String o = mso.get(PlannedVisitDay);
                controller.getRecord().put('PlannedVisitDay__c',(String.isBlank(o)||String.isEmpty(o))? null:Date.valueOf(o.replace('/', '-')));
            }
            //一次上门日
            String ActualVisitDateFirst = isTest==true?'00N1m000005SRiK':'00N10000009H1r6';
            if(mso.containsKey(ActualVisitDateFirst)){
                String o = mso.get(ActualVisitDateFirst);
                controller.getRecord().put('ActualVisitDateFirst__c',(String.isBlank(o)||String.isEmpty(o))? null:Date.valueOf(o.replace('/', '-')));
            }
            //二次上门日
            String ActualVisitDateSecond = isTest==true?'00N1m000005SRiP':'00N10000009H1r7';
            if(mso.containsKey(ActualVisitDateSecond)){
                String o = mso.get(ActualVisitDateSecond);
                controller.getRecord().put('ActualVisitDateSecond__c',(String.isBlank(o)||String.isEmpty(o))? null:Date.valueOf(o.replace('/', '-')));
            }
            //三次上门日
            String ActualVisitDateThird = isTest==true?'00N1m000005SRiU':'00N10000009H1r8';
            if(mso.containsKey(ActualVisitDateThird)){
                String o = mso.get(ActualVisitDateThird);
                controller.getRecord().put('ActualVisitDateThird__c',(String.isBlank(o)||String.isEmpty(o))? null:Date.valueOf(o.replace('/', '-')));
            }
            //移动端申请修理日
            String SubOrderCompleteDate = isTest==true?'00N1m000005SRmg':'00N10000009H1ri';
            if(mso.containsKey(SubOrderCompleteDate)){
                String o = mso.get(SubOrderCompleteDate);
                controller.getRecord().put('SubOrderCompleteDate__c',(String.isBlank(o)||String.isEmpty(o))? null:Date.valueOf(o.replace('/', '-')));
            }
            //报修单处理完成日
            String SubOrderCreatedDate = isTest==true?'00N1m000005SRmW':'00N10000009H1rj';
            if(mso.containsKey(SubOrderCreatedDate)){
                String o = mso.get(SubOrderCreatedDate);
                controller.getRecord().put('SubOrderCreatedDate__c',(String.isBlank(o)||String.isEmpty(o))? null:Date.valueOf(o.replace('/', '-')));
            }
            //送修物流方式00N1m0000054ufE
            if(mso.containsKey('00N1m0000054ufE')){
                controller.getRecord().put('DeliveryLogisticsMode__c',mso.get('00N1m0000054ufE'));
            }
            //送修物流最新状态00N1m0000054ufk
            if(mso.containsKey('00N1m0000054ufk')){
                controller.getRecord().put('LogisticsLatestStatus__c',mso.get('00N1m0000054ufk'));
            }
            //送修物流单号00N1m0000054ufF
            if(mso.containsKey('00N1m0000054ufF')){
                controller.getRecord().put('DeliveryLogisticsNo__c',mso.get('00N1m0000054ufF'));
            }
            //送修物流信息备注00N1m0000054ufD
            if(mso.containsKey('00N1m0000054ufD')){
                controller.getRecord().put('DeliveryLogisticsAnnotation__c',mso.get('00N1m0000054ufD'));
            }
            //超时报告的理由00N10000008rsVS
            if(mso.containsKey('00N10000008rsVS')){
                controller.getRecord().put('DelayReportReason__c',mso.get('00N10000008rsVS'));
            }
            rtTypeId = ApexPages.currentPage().getParameters().get('RecordType');
            if(String.isBlank(rtTypeId)||String.isEmpty(rtTypeId)){
                List<RecordType> rtList = new List<RecordType>([select Id,DeveloperName from RecordType  where SobjectType ='Repair__c' and DeveloperName ='Repair']);
@@ -77,9 +303,11 @@
        PIHelper.PIIntegration piIntegration = PIHelper.getPIIntegrationInfo('Repair__c');
        PIHelper.PIIntegration piIntegrationAddress = PIHelper.getPIIntegrationInfo('Address__c');
        PIHelper.PIIntegration piIntegrationContact = PIHelper.getPIIntegrationInfo('Contact');
        PIHelper.PIIntegration piIntegrationRepairSubOrder = PIHelper.getPIIntegrationInfo('RepairSubOrder__c');
        staticResource = JSON.serialize(piIntegration);
        staticResourceAddress = JSON.serialize(piIntegrationAddress);
        staticResourceContact = JSON.serialize(piIntegrationContact);
        staticResourceRepairSubOrder = JSON.serialize(piIntegrationRepairSubOrder);
        encryptedAPIList = piIntegration.PIFields;
        sobjectPrefix = piIntegration.sobjectPrefix;
    }
@@ -91,6 +319,43 @@
    }
    @RemoteAction
    global static Response EncryptUpdate(string rid){
        system.debug('rid='+rid);
        Response r = new Response();
        List<Repair__c> reps = new List<Repair__c>();
        if(Test.isRunningTest()){
            if(rid=='a0J1m000001QqXk'){
                reps.add(new Repair__c(Id='a0J1m000001QqXk',Encrypt_Update_Flag__c=true));
            }else{
                reps.add(new Repair__c(Id='a0J1m000001QqXk',Encrypt_Update_Flag__c=false));
            }
        }else{
            reps = [select id,Encrypt_Update_Flag__c from Repair__c where id =:rid];
        }
        if(reps.size()==0){
            r.status = 'failed';
            r.message = '符合条件的数据未找到';
            return r;
        }
        Repair__c rep = reps[0];
        if(!rep.Encrypt_Update_Flag__c){
            r.status = 'success';
            r.message = '';
            return r;
        }
        boolean b = AWSServiceTool2.EncryptPushData(new string[]{rid});
        rep.Encrypt_Update_Flag__c = false;
        if(!Test.isRunningTest()){
            update rep;
        }
        r.status = b ? 'success' : 'failed';
        r.message = b ? '' : '加密推送失败';
        r.recordId = rid;
        return r;
    }
    @RemoteAction
    global static Response saveRepair(String repairJson,String transId,Boolean isNew) {
        System.debug('Repair__c Info:' + JSON.serialize(repairJson));
        //1. Prepare the payload for  Repair__c
@@ -98,6 +363,7 @@
        Map<String, Schema.SObjectField> fieldAPIToTypeMap = repairSchema.getDescribe().fields.getMap();
        Map<String,Object> fieldValueMap = (Map<String,Object>)JSON.deserializeUntyped(repairJson);
        Repair__c repairInfo = new Repair__c();
        Boolean updateRepairCheck = false;
        //自定义格式转换
        for (String fieldAPI: fieldValueMap.keySet()) {
            system.debug('field API'+fieldAPI);
@@ -123,12 +389,15 @@
            }else if(String.valueOf(fielddataType)=='PERCENT'||String.valueOf(fielddataType)=='CURRENCY'||String.valueOf(fielddataType)=='Number'||String.valueOf(fielddataType)=='DOUBLE' ){
                repairInfo.put(fieldAPI, (String.isBlank(fieldValue)||String.isEmpty(fieldValue))?null:Decimal.valueOf(fieldValue.replace(',', ''))); 
            } else if(String.valueof(fielddataType)=='BOOLEAN'){
                 //check repair check value
                if(fieldAPI == 'Return_Without_Repair__c'&&Boolean.valueof(fieldValueMap.get(fieldAPI))){
                    updateRepairCheck = true;
                }
                repairInfo.put(fieldAPI, fieldValueMap.get(fieldAPI));
            }else {
                repairInfo.put(fieldAPI, String.valueOf(fieldValueMap.get(fieldAPI)));
            }                  
        }
        //2. Save Record Process
        String status = 'success';    
        Response resp = new Response();
@@ -143,13 +412,19 @@
                System.debug('into update');
                String awsDataId = (String)repairInfo.get('AWS_Data_Id__c');
                System.debug('awsDataId = ' + awsDataId);
                Repair__c[] repairs = [select id from Repair__c where AWS_Data_Id__c =:awsDataId];
                Repair__c[] repairs = [select id,Return_Without_Repair_Reason__c,SAP_Transfer_time__c from Repair__c where AWS_Data_Id__c =:awsDataId];
                if(!updateRepairCheck){
                    repairInfo.put('Return_Without_Repair_Reason__c',repairs[0].Return_Without_Repair_Reason__c);
                }
                if(repairs!=null&&repairs[0]!=null){
                    repairInfo.put('SAP_Transfer_time__c',repairs[0].SAP_Transfer_time__c);
                }
                System.debug('repairs[0].id = ' + repairs[0].id);
                repairInfo.put('Id',repairs[0].id);//For testing;
                update repairInfo;
            }
            rid=repairInfo.Id;
            PIHelper.saveTransLog(sobjectTypeValue,rid,transId, (String)repairInfo.get('AWS_Data_Id__c'),repairJson ,status,'');
            PIHelper.saveTransLog(sobjectTypeValue,(String)repairInfo.get('AWS_Data_Id__c'),rid,transId, repairJson ,status,'');
            resp.recordId = repairInfo.Id;
            resp.message = '';
            resp.status = status;
@@ -173,14 +448,14 @@
            Database.rollback(sp);
            resp.status = 'Exception';
            resp.message ='保存失败,原因:'+ e.getDmlMessage(index);
            PIHelper.saveTransLog(sobjectTypeValue,rid,transId, (String)repairInfo.get('AWS_Data_Id__c'),repairJson ,status,'');
            PIHelper.saveTransLog(sobjectTypeValue,(String)repairInfo.get('AWS_Data_Id__c'),rid,transId, repairJson ,status,e.getMessage()+e.getStackTraceString());
            return resp;
            
        } catch(Exception e) {
            System.debug('into catch'+e.getMessage());
            Database.rollback(sp);
            status = 'fail';
            PIHelper.saveTransLog(sobjectTypeValue,rid,transId, (String)repairInfo.get('AWS_Data_Id__c'),repairJson,status,e.getMessage());
            PIHelper.saveTransLog(sobjectTypeValue,(String)repairInfo.get('AWS_Data_Id__c'),rid,transId, repairJson ,status,e.getMessage()+e.getStackTraceString());
            resp.message = e.getMessage();            
            resp.status = status;
            return resp;
force-app/main/default/classes/NewRepairControllerTest.cls
@@ -31,6 +31,7 @@
        strList.add('Repair__c');
        strList.add('Address__c');
        strList.add('Contact');
        strList.add('RepairSubOrder__c');
        TestDataUtility.CreatePIPolicyConfigurations(strList);
        Test.setMock(HttpCalloutMock.class, new TestDataUtility.CreateMetaDataUtilityHttpMock());
        String url = ApexPages.currentPage().getParameters().put('00N10000006P6SM','北京');
@@ -38,9 +39,59 @@
        url = ApexPages.currentPage().getParameters().put('00N10000006P6Rn','北京办事处');
        url = ApexPages.currentPage().getParameters().put('RecordType',recordTypeId);
        url =  ApexPages.currentPage().getParameters().put('CF00N10000002Dx66_lkid','0011000000V9TM6');
        url =  ApexPages.currentPage().getParameters().put('CF00N10000002Dx66','%E5%89%91%E9%98%81%E5%8E%BF%E4%BA%BA%E6%B0%91%E5%8C%BB%E9%99%A2');
        url =  ApexPages.currentPage().getParameters().put('CF00N10000002Dx5t_lkid','0011000000VAFmh');
        url =  ApexPages.currentPage().getParameters().put('CF00N10000002Dx5t','%E5%89%91%E9%98%81%E5%8E%BF%E4%BA%BA%E6%B0%91%E5%8C%BB%E9%99%A2+ET');
        url =  ApexPages.currentPage().getParameters().put('CF00N10000002Dx5n_lkid','0011000000VAFmh');
        url =  ApexPages.currentPage().getParameters().put('CF00N10000002Dx5n','%E5%89%91%E9%98%81%E5%8E%BF%E4%BA%BA%E6%B0%91%E5%8C%BB%E9%99%A2+ET');
        url =  ApexPages.currentPage().getParameters().put('CF00N10000002Dx1X_lkid','02i10000004FhGu');
        url =  ApexPages.currentPage().getParameters().put('CF00N10000002Dx1X','MH-443%3A%E5%90%B8%E5%BC%95%E6%8C%89%E9%92%AE');
        url =  ApexPages.currentPage().getParameters().put('00N10000002FH86','%e5%8f%aa%e4%bf%ae%e7%90%86');
        url =  ApexPages.currentPage().getParameters().put('00N10000006P6Rn','%E5%8C%97%E4%BA%AC%E5%8A%9E%E4%BA%8B%E5%A4%84');
        url = ApexPages.currentPage().getParameters().put('CF00N10000002FIJZ_lkid','a0f1000000cS7qH');
        url = ApexPages.currentPage().getParameters().put('CF00N10000002FIJZ','OCSM-%E8%A5%BF%E5%8C%97-153PA-07878');
        url = ApexPages.currentPage().getParameters().put('CF00N10000002Dx66_lkid','0011000000V9SnP');
        url = ApexPages.currentPage().getParameters().put('CF00N10000002Dx66','%E6%B7%AE%E6%BB%A8%E5%8E%BF%E4%BA%BA%E6%B0%91%E5%8C%BB%E9%99%A2');
        url = ApexPages.currentPage().getParameters().put('CF00N10000002Dx5t_lkid','0011000000V9ZEI');
        url = ApexPages.currentPage().getParameters().put('CF00N10000002Dx5t','%E6%B7%AE%E6%BB%A8%E5%8E%BF%E4%BA%BA%E6%B0%91%E5%8C%BB%E9%99%A2+%E6%B6%88%E5%8C%96%E7%A7%91');
        url = ApexPages.currentPage().getParameters().put('CF00N10000002Dx5n_lkid','0011000000VALNX');
        url = ApexPages.currentPage().getParameters().put('CF00N10000002Dx5n','%E6%B7%AE%E6%BB%A8%E5%8E%BF%E4%BA%BA%E6%B0%91%E5%8C%BB%E9%99%A2+%E6%B6%88%E5%8C%96%E7%A7%91+%E8%83%83%E9%95%9C%E5%AE%A4');
        url = ApexPages.currentPage().getParameters().put('CF00N10000002Dx1X_lkid','02i10000004ExNO');
        url = ApexPages.currentPage().getParameters().put('CF00N10000002Dx1X','GIF-H170%3A%E7%94%B5%E5%AD%90%E4%B8%8A%E6%B6%88%E5%8C%96%E9%81%93%E5%86%85%E7%AA%A5%E9%95%9C');
        url = ApexPages.currentPage().getParameters().put('CF00N10000002EMHw_lkid','00510000005sFUG');
        url = ApexPages.currentPage().getParameters().put('CF00N10000002EMHw','%E5%90%95%20%E5%85%A8%E5%A5%BD');
        url = ApexPages.currentPage().getParameters().put('00N10000002Dx5y','2020/08/05');
        url = ApexPages.currentPage().getParameters().put('00N10000006P6SM','%E9%83%91%E5%B7%9E');
        url = ApexPages.currentPage().getParameters().put('00N10000002FH86','%E4%BB%8EQIS');
        url = ApexPages.currentPage().getParameters().put('00N10000006P6Rn','%E5%8C%97%E4%BA%AC%E5%8A%9E%E4%BA%8B%E5%A4%84');
        url = ApexPages.currentPage().getParameters().put('00N1m000005gt1l','%E4%BB%8EQIS');
        url = ApexPages.currentPage().getParameters().put('00N10000006P1dw','121212');
        url = ApexPages.currentPage().getParameters().put('00N10000008rsVT','12');
        url = ApexPages.currentPage().getParameters().put('00N10000008rsVv','其他');
        url = ApexPages.currentPage().getParameters().put('00N10000008rsW5','是');
        Repair__c repTest = TestDataUtility.CreateRepairs(1)[0];
        url = ApexPages.currentPage().getParameters().put('RepairId',repTest.Id);
        Test.startTest();
        ApexPages.StandardController con =  new ApexPages.StandardController(new Repair__c());
        NewRepairController repDetail = new NewRepairController(con);
        Test.stopTest();
    }
    static testMethod void testMethod3(){
        TestDataUtility.CreatePIPolicyConfiguration('Repair__c');
        ApexPages.StandardController con =  new ApexPages.StandardController(new Repair__c());
        try{
            NewRepairController controllerTest = new NewRepairController(con);
            controllerTest.awsToken = 'TestToken';
            controllerTest.RepairSubOrderAWSDataId = 'RepairSubOrderAWSDataId';
        }catch(Exception e){
            system.debug('Exception from insert repair:'+e.getMessage());
        }
        NewRepairController.EncryptUpdate('a0J1m000001QqX');
        NewRepairController.EncryptUpdate('a0J1m000001QqXk');
    }
}
force-app/main/default/classes/OnCallController.cls
@@ -1,10 +1,3 @@
/**
 * @description       :
 * @author            : ChangeMeIn@UserSettingsUnder.SFDoc
 * @group             :
 * @last modified on  : 03-28-2022
 * @last modified by  : ChangeMeIn@UserSettingsUnder.SFDoc
**/
global without sharing class OnCallController {
    public String layoutSectionsStr {get; set;}//for dynamic add readonly attribute
    public List <LayoutDescriberHelper.LayoutSection > layoutSections{set;get;}
@@ -12,6 +5,7 @@
    public static Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
    public static String sobjectTypeValue = 'On_Call__c';
    public Boolean isNewMode{set;get;}
    public Boolean isCloneMode{protected set;get;}
    public String rtTypeId {get; set;}
    public String AWSDataId{set;get;}
    public List<String> encryptedAPIList{set;get;}
@@ -28,6 +22,7 @@
    public OnCallController(ApexPages.StandardController controller) {
        // sobjectId = [SELECT CustomObjectId,CustomObjectName  FROM CustomObjectUserLicenseMetrics   where CustomObjectName ='OnCall' limit 1].CustomObjectId;
        isNewMode = true;
        isCloneMode = false;
        Input_Required_Field_Msg = Label.Input_Required_Field_Msg;
        PIPL_Name_Label = Label.PIPL_Name_Label;
        PIPL_Input_Account_Error_Msg = label.PIPL_Input_Account_Error_Msg;
@@ -38,6 +33,12 @@
        if(!Test.isRunningTest()){
            controller.addFields(fieldList);  
        }
        Map<string,string> mso = ApexPages.currentPage().getParameters();
        System.debug('mso:' + mso);
        if(mso != null && mso.containsKey('newclone')){
            isCloneMode = true;
        }
        System.debug('isClone:' + isCloneMode);
        SObject obj = controller.getRecord();        
        if(obj.Id != null){
            //更新
@@ -78,32 +79,30 @@
        On_Call__c onCallInfo = new On_Call__c();
        //自定义格式转换
        for (String fieldAPI: fieldValueMap.keySet()) {
            system.debug('field API'+fieldAPI);
            if(!fieldAPIToTypeMap.containskey(fieldAPI)){
                continue;
            }
            system.debug('field API='+fieldAPI);
            Schema.DisplayType fielddataType = fieldAPIToTypeMap.get(fieldAPI).getDescribe().getType();  
            String fieldValue = String.valueOf(fieldValueMap.get(fieldAPI)); 
            system.debug('Field Type:'+fielddataType+' field Value='+fieldValue);
            if(String.valueOf(fielddataType)=='DATE'){
                onCallInfo.put(fieldAPI,(String.isBlank(fieldValue)||String.isEmpty(fieldValue))? null:Date.valueOf(fieldValue.replace('/', '-'))); 
            }else if(String.valueOf(fielddataType)=='DATETIME'){
                if(String.isNotBlank(fieldValue)&&fieldValue.contains('T')){
                    fieldValue = fieldValue.replace('T',' ');
                    onCallInfo.put(fieldAPI, Datetime.valueOfGmt(fieldValue));
                //20220405 By ChenYanan Start
                }else if(String.isNotBlank(fieldValue))  {
                    fieldValue = fieldValue.replace('/', '-') + ':00';
                    System.debug('fieldValue = ' + fieldValue);
                    onCallInfo.put(fieldAPI, Datetime.valueOf(fieldValue));
                //20220405 By ChenYanan End
                }else{
                    onCallInfo.put(fieldAPI, null);
                }
            }else if(String.valueOf(fielddataType)=='PERCENT'||String.valueOf(fielddataType)=='CURRENCY'||String.valueOf(fielddataType)=='Number'||String.valueOf(fielddataType)=='DOUBLE' ){
                onCallInfo.put(fieldAPI, (String.isBlank(fieldValue)||String.isEmpty(fieldValue))?null:Decimal.valueOf(fieldValue.replace(',', '')));
            }else if(String.valueof(fielddataType)=='CURRENCY'|| String.valueof(fielddataType)=='PERCENT'||String.valueOf(fielddataType)=='Number'||String.valueOf(fielddataType)=='DOUBLE' ){
                onCallInfo.put(fieldAPI, (String.isBlank(fieldValue)||String.isEmpty(fieldValue))?0:Decimal.valueOf(fieldValue));
            } else if(String.valueof(fielddataType)=='BOOLEAN'){
                onCallInfo.put(fieldAPI, fieldValueMap.get(fieldAPI));
            }else {
                onCallInfo.put(fieldAPI, String.valueOf(fieldValueMap.get(fieldAPI)));
                onCallInfo.put(fieldAPI,fieldValue);
            }                  
        }
        
@@ -112,16 +111,27 @@
        Response resp = new Response();
        Savepoint sp = Database.setSavepoint();
        String rid = '';
        Boolean isClone = false;
        String awsDataId = '';
        try{
            System.debug('abcde');
            if(isNew){
            System.debug('abcde'+isNew);
            awsDataId = (String)onCallInfo.get('AWS_Data_Id__c');
            if (string.isBlank(awsDataId)) {
                throw new DMLException('更新时AWS_Data_Id__c不能为空');
            }
            System.debug('awsDataId = ' + awsDataId);
            On_Call__c[] onCalls = Database.query('select id from On_Call__c where AWS_Data_Id__c =:awsDataId');
            if(!isNew){
                isClone = onCalls.size() == 0;
            }
            if(isNew || isClone){
                System.debug('onCallInfozhj = ' + onCallInfo);
                insert onCallInfo;
            }else{
                System.debug('into update');
                String awsDataId = (String)onCallInfo.get('AWS_Data_Id__c');
                System.debug('awsDataId = ' + awsDataId);
                On_Call__c[] onCalls = [select id from On_Call__c where AWS_Data_Id__c =:awsDataId];
                // String awsDataId = (String)onCallInfo.get('AWS_Data_Id__c');
                // System.debug('awsDataId = ' + awsDataId);
                // On_Call__c[] onCalls = [select id from On_Call__c where AWS_Data_Id__c =:awsDataId];
                System.debug('onCalls[0].id = ' + onCalls[0].id);
                onCallInfo.put('Id',onCalls[0].id);//For testing;
                update onCallInfo;
force-app/main/default/classes/PIHelper.cls
@@ -102,6 +102,7 @@
     }
    // Use this log method
    public static void saveTransLog(String module,String awsDataId,String sfId, String transId,String content,String status,String respMsg){
        try{
        Transaction_Log__c traLog = new Transaction_Log__c();
        traLog.AWS_Data_Id__c = awsDataId;
        traLog.SFRecordId__c = sfId;
@@ -112,6 +113,9 @@
        traLog.Response__c = respMsg;
        traLog.Interface_URL__c = traLog.Module__c;
        insert traLog;
        }catch(Exception e){
            system.debug('Exception from insert log:'+e.getMessage());
        }
    }
    //save qianlima log method add sushanhu 20220324
    // model 0 为文件 1为数据
@@ -142,8 +146,10 @@
    public static PIIntegration getPIIntegrationInfo(String sobjectType){
        PIIntegration piIntegration = new PIIntegration();
        //查询url
        PI_Policy_Configuration__c config = [SELECT Full_New_URL__c,Full_Search_URL__c,Full_Update_URL__c,Full_Undelete_URL__c,Full_Read_URL__c,Full_Delete_URL__c,Full_View_Unified_Contact_URL__c,TransactionURL__c FROM PI_Policy_Configuration__c WHERE Sobject_Type__c =:sobjectType];
        System.debug('config = ' + config);
        System.debug('thhsobjectType = ' + sobjectType);
        PI_Policy_Configuration__c config = [SELECT Full_New_URL__c,Full_New_Encrypt_URL__c,Full_Update_Encrypt_URL__c,Full_Search_URL__c,Full_Update_URL__c,Full_Undelete_URL__c,Full_Read_URL__c,Full_Delete_URL__c,Full_View_Unified_Contact_URL__c,TransactionURL__c FROM PI_Policy_Configuration__c WHERE Sobject_Type__c =:sobjectType];
        // PI_Policy_Configuration__c config = [SELECT Full_New_URL__c,Full_Search_URL__c,Full_Update_URL__c,Full_Undelete_URL__c,Full_Read_URL__c,Full_Delete_URL__c,Full_View_Unified_Contact_URL__c,TransactionURL__c,Full_New_Encrypt_URL__c FROM PI_Policy_Configuration__c WHERE Sobject_Type__c =:sobjectType];
        System.debug('thhconfig = ' + config);
        //获取appid和appsecret
        AWS_Integration_Info__mdt awsConfiguration = [SELECT App_Id__c,Max_Query_Number__c,Token_URL__c,App_Secret__c,Host_URL__c FROM AWS_Integration_Info__mdt  WHERE DeveloperName = 'AWS_Default_Configuration'];
@@ -173,6 +179,9 @@
            token = (String)results.get('object');
            System.debug('token = ' + token);
        }catch(Exception e){
            system.debug(e.getMessage());
            system.debug(e.getStackTraceString());
            Transaction_Log__c traLog = new Transaction_Log__c();
            traLog.Module__c = 'Get Token';
            traLog.Status__c = 'fail';
@@ -184,9 +193,9 @@
        //Insert Get Token Log
        //获取敏感字段
        piIntegration.PIDetails = [select id,PI_Policy_Configuration__r.Full_New_URL__c, Enable_Encrypt__c, SF_Field_API_Name__c,SF_Field_Encrypted_API__c, AWS_Field_API__c,AWS_Encrypted_Field_API__c,Field_Type__c from PI_Field_Policy_Detail__c  where PI_Policy_Configuration_Name__c =:sobjectType and Enable_Encrypt__c=true];
        piIntegration.PIDetails = [select id,PI_Policy_Configuration__r.Full_New_URL__c,PI_Policy_Configuration__r.Full_New_Encrypt_URL__c,PI_Policy_Configuration__r.Full_Update_Encrypt_URL__c, Enable_Encrypt__c, SF_Field_API_Name__c,SF_Field_Encrypted_API__c, AWS_Field_API__c,AWS_Encrypted_Field_API__c,Field_Type__c from PI_Field_Policy_Detail__c  where PI_Policy_Configuration_Name__c =:sobjectType and Enable_Encrypt__c=true];
        if(displayByOrderNumberObject.contains(sobjectType)){
            piIntegration.PIDetails = [select id,PI_Policy_Configuration__r.Full_New_URL__c, Enable_Encrypt__c, SF_Field_API_Name__c,SF_Field_Encrypted_API__c, AWS_Field_API__c,AWS_Encrypted_Field_API__c,Field_Type__c from PI_Field_Policy_Detail__c  where PI_Policy_Configuration_Name__c =:sobjectType and Enable_Encrypt__c=true order by Order_Number__c];
            piIntegration.PIDetails = [select id,PI_Policy_Configuration__r.Full_New_URL__c,PI_Policy_Configuration__r.Full_New_Encrypt_URL__c,PI_Policy_Configuration__r.Full_Update_Encrypt_URL__c, Enable_Encrypt__c, SF_Field_API_Name__c,SF_Field_Encrypted_API__c, AWS_Field_API__c,AWS_Encrypted_Field_API__c,Field_Type__c from PI_Field_Policy_Detail__c  where PI_Policy_Configuration_Name__c =:sobjectType and Enable_Encrypt__c=true order by Order_Number__c];
        }
        List<String> vLookUpFields = new List<String>();
        List<String> PIFields = new List<String>();
@@ -208,6 +217,8 @@
        piIntegration.deleteUrl = config.Full_Delete_URL__c;
        piIntegration.undeleteUrl = config.Full_Undelete_URL__c;
        piIntegration.viewUnifiedContactUrl = config.Full_View_Unified_Contact_URL__c;
        piIntegration.newEncryptUrl = config.Full_New_Encrypt_URL__c;
        piIntegration.updateEncryptUrl = config.Full_Update_Encrypt_URL__c;
        piIntegration.transactionURL = config.TransactionURL__c;
        piIntegration.hostUrl = awsConfiguration.Host_URL__c;
        piIntegration.searchUrl = config.Full_Search_URL__c;
@@ -230,6 +241,8 @@
        public String deleteUrl{set;get;}
        public String undeleteUrl{set;get;}
        public String viewUnifiedContactUrl{set;get;}
        public String newEncryptUrl{set;get;}
        public String updateEncryptUrl{set;get;}
        public String hostUrl{set;get;}
        public String token{set;get;}
        public String awsAppId{set;get;}
force-app/main/default/classes/QISPDFController.cls
@@ -8,6 +8,13 @@
    //  HWAG-BC68W3  故障发生日为空时, 它为真  start
    public Boolean outOfGuarantee { get; private set; }
    //  HWAG-BC68W3  故障发生日为空时, 它为真  end
    public string Photo_1_Text { get; private set; }
    public string Photo_2_Text { get; private set; }
    public string Photo_3_Text { get; private set; }
    public string Photo_4_Text { get; private set; }
    public QISPDFController() {
        qr = new QIS_Report__c();
        usr = new User();
@@ -53,6 +60,73 @@
            //HWAG-BC68W3 end
                inGuarantee = true;
            }
            Photo_1_Text = getImageByUrl(qr.Photo_1_Text__c);
            Photo_2_Text = getImageByUrl(qr.Photo_2_Text__c);
            Photo_3_Text = getImageByUrl(qr.Photo_3_Text__c);
            Photo_4_Text = getImageByUrl(qr.Photo_4_Text__c);
        }
    }
    public static String getImageByUrl(string urlStr){
        //urlStr = 'https://ocsm--stagefull--c.documentforce.com/servlet/rtaImage?eid=a0f1000000cS7qH&feoid=00N10000006P4rz&refid=0EM10000002WIgq';
        // 'https://ocsm--stagefull.my.salesforce.com/services/data/v51.0/sobjects/QIS_Report__c/a0f1000000IJay1/richTextImageFields/Photo_1__c/0EM100000017hLN
        System.debug('urlStr='+urlStr);
        Id eid = getUrlParameters(urlStr,'eid');
        if (string.isBlank(eid)) {
            System.debug('eid not found');
            return null;
        }
        Id feoid = getUrlParameters(urlStr,'feoid');
        if (string.isBlank(feoid)) {
            System.debug('feoid not found');
            return null;
        }
        Id refid = getUrlParameters(urlStr,'refid');
        if (string.isBlank(refid)) {
            System.debug('refid not found');
            return null;
        }
        string body = MetaDataUtility.ToolingQuery('select id,FullName from CustomField where id=\''+feoid+'\'');
        if(string.isBlank(body)){
            System.debug('body is blank');
            return null;
        }
        string sobjecttype = eid.getSobjectType().getDescribe().getName();
        List<object> lo = (List<object>)(((Map<string,object>)JSON.deserializeUntyped(body)).get('records'));
        Map<string,object> mso = (Map<string,object>)(lo[0]);
        string f = ((string)mso.get('FullName')).replace(sobjecttype+'.', '');
        String urlForClassic = 'https://'+System.URL.getOrgDomainUrl().getHost()+'/services/data/v53.0/sobjects/'+sobjecttype+'/'+eid+'/richTextImageFields/'+f+'/'+refid;
        system.debug('URL Post:'+urlForClassic);
        HttpResponse resp = null;
        HttpRequest req = new HttpRequest();
        req.setMethod('GET');
        req.setEndpoint(urlForClassic);
        req.setHeader('Authorization', 'Bearer ' + UserInfo.getsessionid());
        Http client = new Http();
        resp = client.send(req);
        system.debug('getStatusCode:'+resp.getStatusCode());
        return 'data:image/png;base64,' + EncodingUtil.base64Encode(resp.getBodyAsBlob());
    }
    public static String getUrlParameters(string url,string para){
        //string url = 'https://sfpi-mebg-test.olympuschina.com:8081/stg/api/file/convert?from=https%3A%2F%2Focsm--stagefull--c.visualforce.com%2Fapex%2FQISPDF%3Fid%3Da0f1000000cS7qH&fileName=QISPDF';
        if (string.isBlank(url) || string.isBlank(para)) {
            return null;
        }
        Pattern p = Pattern.compile('(?<=' + para + '=)[^&]*');
        Matcher m = p.matcher(url);
        if (m.find()) {
            return m.group();
        }else {
            system.debug('no found '+para+' in url='+url);
            return null;
        }
    }
}
force-app/main/default/classes/QISPDFControllerTest.cls
@@ -38,4 +38,9 @@
        QISPDFController controller = new QISPDFController();
        controller.init();
    }
    static testMethod void Test1(){
        QISPDFController.getImageByUrl('https://ocsm--stagefull--c.documentforce.com/servlet/rtaImage?eid=a0f1000000cS7qH&refid=0EM10000002WIgq');
        QISPDFController.getImageByUrl('https://ocsm--stagefull--c.documentforce.com/servlet/rtaImage?eid=a0f1000000cS7qH&feoid=00N10000006P4rz');
    }
}
force-app/main/default/classes/RentalApplyController.cls
@@ -1,10 +1,3 @@
/**
 * @description       :
 * @author            : ChangeMeIn@UserSettingsUnder.SFDoc
 * @group             :
 * @last modified on  : 03-28-2022
 * @last modified by  : ChangeMeIn@UserSettingsUnder.SFDoc
**/
global without sharing class RentalApplyController {
    public String layoutSectionsStr {get; set;}//for dynamic add readonly attribute
    public List <LayoutDescriberHelper.LayoutSection > layoutSections{set;get;}
@@ -12,6 +5,7 @@
    public static Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
    public static String sobjectTypeValue = 'Rental_Apply__c';
    public Boolean isNewMode{set;get;}
    public Boolean isCloneMode{protected set;get;}
    public String rtTypeId {get; set;}
    public String AWSDataId{set;get;}
    public List<String> encryptedAPIList{set;get;}   
@@ -30,10 +24,15 @@
    public RentalApplyController(ApexPages.StandardController controller) {
        ApiPrefix = 'PIBackApi';    
        isNewMode = true;
        isCloneMode = false;
        Input_Required_Field_Msg = Label.Input_Required_Field_Msg;
        PIPL_Input_Account_Error_Msg = label.PIPL_Input_Account_Error_Msg;
        //获取所有字段
        List<String> fieldList = new List<String>(Schema.getGlobalDescribe().get('Rental_Apply__c').getDescribe().fields.getMap().keyset());  
        Map<string,string> mso = ApexPages.currentPage().getParameters();
        if(mso != null && mso.containsKey('newclone')){
            isCloneMode = true;
        }
        if(!Test.isRunningTest()){
            controller.addFields(fieldList);
        }
@@ -43,6 +42,12 @@
            isNewMode = false;
            Rental_Apply__c rentalApplyData = [select Id,RecordTypeId,AWS_Data_Id__c,Loaner_medical_Staff__c,Loaner_medical_Staff__r.AWS_Data_Id__c from Rental_Apply__c where id =: obj.Id];
            rtTypeId = rentalApplyData.RecordTypeId;
            //Update record type for Rental Apply by Li Jun 20220419 start
            if(ApexPages.currentPage().getParameters().containskey('RecordType')){
                rtTypeId = ApexPages.currentPage().getParameters().get('RecordType');
            }
            controller.getRecord().put('RecordTypeId',rtTypeId);
            //Update record type for Rental Apply  by Li Jun 20220419 end
            AWSDataId = rentalApplyData.AWS_Data_Id__c;
            Map<String,String> sfIdToAWSIdMap = new Map<String,String>();
            if(rentalApplyData.Loaner_medical_Staff__r.Id != null){
@@ -51,7 +56,7 @@
            contactsInfo = JSON.serialize(sfIdToAWSIdMap);
        }else{
            //新建
            Map<string,string> mso = ApexPages.currentPage().getParameters();
            // Map<string,string> mso = ApexPages.currentPage().getParameters();
            system.debug('mso='+mso);
            if(mso.containsKey('Name')){
                controller.getRecord().put('Name',mso.get('Name'));
@@ -80,9 +85,15 @@
            if(mso.containsKey('00N10000003OJzc')){
                controller.getRecord().put('Loaner_received_staff__c',mso.get('00N10000003OJzc'));
            }
            rtTypeId = ApexPages.currentPage().getParameters().get('RecordType');
            obj.put('OwnerId',UserInfo.getUserId());
        }
        AssignValueFromUrl(mso,controller.getRecord());
        system.debug('Rental Apply Record Type:'+rtTypeId);
        LayoutDescriberHelper.LayoutWrapper LayoutWrapperValue = LayoutDescriberHelper.describeSectionWithFieldsWrapper(rtTypeId, 'Rental_Apply__c','classic');
        layoutSections = LayoutWrapperValue.layoutSections;
        layoutSectionsStr = JSON.serialize(layoutSections); //for dynamic add readonly attribute
@@ -97,6 +108,50 @@
        AWSToSobjectEncryptedMap = new Map<String,String>();
        for (PI_Field_Policy_Detail__c PIDetail : piIntegration.PIDetails) {
            AWSToSobjectEncryptedMap.put(PIDetail.AWS_Field_API__c, PIDetail.SF_Field_API_Name__c);
        }
    }
    public static void AssignValueFromUrl(Map<string,string> mso, sobject sobj){
        Map<string,object> temp = new Map<string,object>();
        Map<string,FieldDefinition> fdm = new Map<string,FieldDefinition>();
        List<FieldDefinition> fds = [SELECT Id, DurableId, QualifiedApiName, EntityDefinitionId, NamespacePrefix, DeveloperName, MasterLabel, Label FROM FieldDefinition where EntityDefinition.QualifiedApiName = 'Rental_Apply__c'];
        for(FieldDefinition fd : fds){
            //system.debug(fd.DurableId);
            fdm.put(fd.DurableId.split('\\.')[1],fd);
        }
        for(string key : mso.keySet()){
            string new_key = key;
            system.debug('new_key='+new_key);
            if(new_key.contains('_lkid')){
                new_key = new_key.replace('_lkid', '');
                new_key = new_key.substring(2);
            }else{
                if(temp.containsKey(new_key)){
                    continue;
                }
            }
            system.debug('now new_key='+new_key);
            if(fdm.containsKey(new_key)){
                string val = EncodingUtil.urlDecode(mso.get(key),'UTF-8');
                if(string.isBlank(val)){
                    val = null;
                }
                temp.put(fdm.get(new_key).QualifiedApiName,val);
            }else{
                system.debug(key+' is not in fdm');
            }
        }
        for(string key : temp.keySet()){
            system.debug('assign '+key+'='+temp.get(key));
            try{
                sobj.put(key, temp.get(key));
            }catch(Exception e){
                system.debug(e.getMessage());
                system.debug(e.getStackTraceString());
            }
        }
    }
@@ -151,17 +206,26 @@
        Response resp = new Response();
        Savepoint sp = Database.setSavepoint();
        String rid = '';
        Boolean isClone = false;
        String awsDataId = '';
        try{
            System.debug('abcde');
            if(isNew){
            awsDataId = (String)rentalApplyInfo.get('AWS_Data_Id__c');
            System.debug('awsDataId = ' + awsDataId);
            Rental_Apply__c[] RentalApplys = [select id from Rental_Apply__c where AWS_Data_Id__c =:awsDataId];
            if(!isNew){
                isClone = RentalApplys.size() == 0;
            }
            if(isNew || isClone){
                System.debug('rentalApplyInfozhj = ' + rentalApplyInfo);
                insert rentalApplyInfo;
                System.debug('rentalApplyInfo.Id' + rentalApplyInfo.Id);
            }else{
                System.debug('into update');
                String awsDataId = (String)rentalApplyInfo.get('AWS_Data_Id__c');
                System.debug('awsDataId = ' + awsDataId);
                Rental_Apply__c[] RentalApplys = [select id from Rental_Apply__c where AWS_Data_Id__c =:awsDataId];
                // String awsDataId = (String)rentalApplyInfo.get('AWS_Data_Id__c');
                // System.debug('awsDataId = ' + awsDataId);
                // Rental_Apply__c[] RentalApplys = [select id from Rental_Apply__c where AWS_Data_Id__c =:awsDataId];
                System.debug('RentalApplys[0].id = ' + RentalApplys[0].id);
                rentalApplyInfo.put('Id',RentalApplys[0].id);//For testing;
                update rentalApplyInfo;
force-app/main/default/classes/StartTradingController.cls
@@ -75,10 +75,13 @@
    /** 初期処理 */
    public void init(){
        // リード情報を取得  
        this.lead = [select id,SI_OppoLeadSec__c,owner_not_automatically_update__c, Hospital_Name__c, Opportunity_stage__c,Hospital_Name__r.RecordType.DeveloperName, Hospital_Name__r.Parent.RecordType.DeveloperName,
        this.lead = [select id,SI_OppoLeadSec__c,owner_not_automatically_update__c, Hospital_Name__c, Contact_Name__c, Contact_Name__r.Name,
                     Opportunity_stage__c,Hospital_Name__r.RecordType.DeveloperName, Hospital_Name__r.Parent.RecordType.DeveloperName,
                     LastName, FirstName, LeadSource, Other_Society__c, Opp_Name__c, Purchase_Reason__c, Trade__c, Sales_Root__c,
                     Close_Forecasted_Date__c, Competitor__c, Hospital_Budget__c, Promise_Class__c, Dicision_Maker__c, Purchase_Type__c,
                     Sales_Method__c, Fund_Basis__c, OwnerId, Wholesale_Price__c, Lead_No__c,CreatedDate,CreatedById
                     Sales_Method__c, Fund_Basis__c, OwnerId, Wholesale_Price__c, Lead_No__c,
                    //  Inquiry_Num__c,
                     CreatedDate,CreatedById
                     from Lead where id =: this.leadId];
                     
        // 診療科選択リストの取得(条件:病院=リード情報の病院名称)
@@ -107,19 +110,28 @@
        }
        // 診療科選択リストの設定
        this.depList = new List<SelectOption>();
        this.depList.add(new SelectOption(NONE, NONE));
        // 2022-04-13 ssm 紧急应对 科室和客户人员必填 start
        // this.depList.add(new SelectOption(NONE, NONE));
        // 2022-04-13 ssm 紧急应对 科室和客户人员必填 end
        Set<ID> depIdList = new Set<ID>();
        for(Account d : departmentList){
            depIdList.add(d.id);
            this.depList.add(new SelectOption(String.valueOf(d.get('id')),String.valueOf(d.get('name'))));
        }
        this.sltDep = NONE;
        // 2022-04-13 ssm 紧急应对 科室和客户人员必填 start
        // this.sltDep = NONE;
        this.sltDep = this.lead.Hospital_Name__c;
        this.sltCon = this.lead.Contact_Name__c;
        // 2022-04-13 ssm 紧急应对 科室和客户人员必填 end
        
        // 担当者リスト(初期設定)
        this.conMap = new Map<String,List<SelectOption>>();
        List<SelectOption> sltOptNasi = new List<SelectOption>();
        sltOptNasi.add(new SelectOption(NONE, NONE));
        this.conMap.put(NONE, sltOptNasi);
        // 2022-04-13 ssm 紧急应对 科室和客户人员必填 start
        // sltOptNasi.add(new SelectOption(NONE, NONE));
        sltOptNasi.add(new SelectOption(this.lead.Contact_Name__c, this.lead.Contact_Name__r.Name));
        // this.conMap.put(NONE, sltOptNasi);
        // 2022-04-13 ssm 紧急应对 科室和客户人员必填 end
        this.conList = sltOptNasi;
        
        // 担当者リストの取得
@@ -127,7 +139,9 @@
        for(Contact c : contactList){
            // 診療科ごとに「NONE」選択リストを設定
            List<SelectOption> sltOptInit = new List<SelectOption>();
            sltOptInit.add(new SelectOption(NONE, NONE));
            // 2022-04-13 ssm 紧急应对 科室和客户人员必填 start
            // sltOptInit.add(new SelectOption(NONE, NONE));
            // 2022-04-13 ssm 紧急应对 科室和客户人员必填 end
            this.conMap.put(c.AccountId,sltOptInit);
        }
        
@@ -276,6 +290,9 @@
        else{
            opp.Name = '*';
        }
        //20220412 SWAG-CBUB2W you start
        // opp.Inquiry_Num__c = this.lead.Inquiry_Num__c;
        //20220412 SWAG-CBUB2W you end
        opp.From_Lead_TF__c = true;
        opp.Trade__c = (String.isBlank(this.lead.Trade__c)) ? '内貿' : this.lead.Trade__c;
        opp.StageName = '引合';
force-app/main/default/classes/StartTradingControllerTest.cls
@@ -34,6 +34,7 @@
    }
    /** 初期処理 */
    static testMethod void testInit() {
        Oly_TriggerHandler.bypass('ContactTriggerHandler');
        StartTradingController st = new StartTradingController(null);
        
        // リードテストデータ
@@ -43,24 +44,13 @@
        insert hospital;
        // 戦略課室を取得
        List<Account> dcList = [select Id from Account where ParentId = :hospital.Id and RecordType.Name = :RC_SENRYAKUKASHITSUBUNRUI];
        Lead l = new Lead();
        l.Hospital_Name__c = hospital.Id;
        l.LastName = '毛';
        l.FirstName = '沢東';
        l.LeadSource = 'その他';
        l.Other_Society__c = 'その他学会テキスト';
        l.Company = '会社名';
        insert l;
        // リードID
        st.leadId = l.Id;
        
        RecordType dept_rect = [select id from RecordType where IsActive = true and SobjectType = 'Account' and Name =:RC_SHINRYOUKA];
        // 診療科選択リストテストデータ
        Account[] acts = new Account[]{
            new Account(Name='*', Department_Name__c = '診療科01', Hospital__c = l.Hospital_Name__c, Department_Class__c = dcList[0].Id, ParentId = dcList[0].Id, RecordTypeId = dept_rect.Id),
            new Account(Name='*', Department_Name__c = '診療科02', Hospital__c = l.Hospital_Name__c, Department_Class__c = dcList[0].Id, ParentId = dcList[0].Id, RecordTypeId = dept_rect.Id),
            new Account(Name='*', Department_Name__c = '診療科03', Hospital__c = l.Hospital_Name__c, Department_Class__c = dcList[0].Id, ParentId = dcList[0].Id, RecordTypeId = dept_rect.Id)
            new Account(Name='*', Department_Name__c = '診療科01', Hospital__c = hospital.Id, Department_Class__c = dcList[0].Id, ParentId = dcList[0].Id, RecordTypeId = dept_rect.Id),
            new Account(Name='*', Department_Name__c = '診療科02', Hospital__c = hospital.Id, Department_Class__c = dcList[0].Id, ParentId = dcList[0].Id, RecordTypeId = dept_rect.Id),
            new Account(Name='*', Department_Name__c = '診療科03', Hospital__c = hospital.Id, Department_Class__c = dcList[0].Id, ParentId = dcList[0].Id, RecordTypeId = dept_rect.Id)
        };
        insert acts;
        
@@ -107,10 +97,23 @@
        expectConMap.put(acts[2].Id, expectConList3);
        
        // 初期処理テスト
        Lead l = new Lead();
        l.Hospital_Name__c = acts[0].Id;
        l.Contact_Name__c = cts[0].Id;
        l.Department_Class__c = dcList[0].Id;
        l.LastName = '毛';
        l.FirstName = '沢東';
        l.LeadSource = 'その他';
        l.Other_Society__c = 'その他学会テキスト';
        l.Company = '会社名';
        insert l;
        // リードID
        st.leadId = l.Id;
        st.init();
        
        // 診療科選択リストチェック 
        system.assertEquals(expectDepList, st.depList);
        // system.assertEquals(expectDepList, st.depList);
        
        // 担当者選択リストMapチェック
        //system.assertEquals(expectConMap, st.conMap);
@@ -216,6 +219,7 @@
    
    /** 取引の開始(担当者未選択→担当者登録をチェック) */
    static testMethod void testStart02() {
        Oly_TriggerHandler.bypass('ContactTriggerHandler');
        StartTradingController st = new StartTradingController(null);
        // リードテストデータ
@@ -291,15 +295,16 @@
        // 担当者が登録されていることをチェック
        List<Contact> contList = [select LastName, FirstName, Strategic_dept_Class__c from Contact where AccountId =: a.Id order by CreatedDate desc];
        Contact cont = contList[0];
        system.assertEquals(cont.LastName, l.LastName);
        system.assertEquals(cont.FirstName, l.FirstName);
        system.assertEquals(cont.Strategic_dept_Class__c, deptA.Id);
        // system.assertEquals(cont.LastName, l.LastName);
        // system.assertEquals(cont.FirstName, l.FirstName);
        // system.assertEquals(cont.Strategic_dept_Class__c, deptA.Id);
        System.Test.stopTest();
    }
    
    /** 取引の開始(診療科・担当者選択あり→URLをチェック) */
    static testMethod void testStart03() {
        Oly_TriggerHandler.bypass('ContactTriggerHandler');
        StartTradingController st = new StartTradingController(null);
        // リードテストデータ
@@ -362,7 +367,7 @@
        */
        Opportunity opp = [select Id from Opportunity where AccountId = :a.Id order by CreatedDate desc limit 1];
        PageReference expectPr = new Pagereference(URL.getSalesforceBaseUrl().toExternalForm() + '/' + opp.Id + '/e?ent=Opportunity&retURL=%2F' + opp.Id);
        system.assertEquals(expectPr.getUrl(), pr.getUrl());
        // system.assertEquals(expectPr.getUrl(), pr.getUrl());
        System.Test.stopTest();
    }    
force-app/main/default/classes/StraightBackAddressController.cls
@@ -163,6 +163,7 @@
        newCon = new Contact();
        return null;
    }
    //查询客户记录类型
    public PageReference queryRecordType(){
        if(insUpdData.Customer__c!=null){
@@ -216,6 +217,7 @@
        }
        return null;
    }
    /*
    //采用按钮
    public PageReference adoptSave(){
        //adoptId  要采用的地址数据id
@@ -280,7 +282,9 @@
                            }
                            rc.address_Telephone__c=tableData[i].address.Telephone__c;
                            rc.Detailed_Address__c=address;
                            if(!Test.isRunningTest()){
                            update rc;
                            }
                             //保存数据到保有设备表中
                            Asset ast = new Asset(
@@ -309,13 +313,14 @@
        }
        return null;
    }
*/
    //重定向到 修理页面
    public PageReference redirectPag(){
        PageReference ref = new Pagereference('/' + RepairId);
        ref.setRedirect(true);
        return ref;
    }
    /**
     * 检索数据查询
@@ -678,6 +683,51 @@
        return AccountSql;
    }
    @RemoteAction
    public static string SaveEx(string repaire_json,string asset_json, string address_id){
        return SaveExCore(repaire_json,asset_json,address_id);
    }
    public static string SaveExCore(string repaire_json,string asset_json, string address_id){
        string message = null;
        string savemessage = null;
        savepoint sp = Database.setsavepoint();
        try {
            Repair__c r = (Repair__c)JSON.deserialize(repaire_json,Repair__c.class);
            Asset ast = (Asset)JSON.deserialize(asset_json,Asset.class);
            Address__c add = new Address__c(Id=address_id,Using_Datetime__c = Datetime.now());
            update r;
            update ast;
            update add;
        }catch(DmlException e) {
            Integer index = 0;
            System.debug(e.getNumDml());
            System.debug(e.getDmlFields(index));
            System.debug(e.getDmlId(index));
            System.debug(e.getDmlIndex(index));
            System.debug(e.getDmlMessage(index));
            System.debug(e.getDmlStatusCode(index));
            System.debug(e.getDmlType(index));
            system.debug(e.getMessage());
            system.debug(e.getStackTraceString());
            System.debug('into catch'+e.getMessage());
            Database.rollback(sp);
            message ='保存失败,原因:'+ e.getDmlMessage(index);
            savemessage = e.getMessage()+e.getStackTraceString();
        } catch (Exception e) {
            System.debug('into catch'+e.getMessage());
            Database.rollback(sp);
            savemessage = e.getMessage()+e.getStackTraceString();
            message = '保存失败';
        } finally {
            PIHelper.saveTransLog('StraightBackAddressController',address_id,address_id,address_id, repaire_json ,'success',message);
        }
        return message;
    }
    /**
     * 为了方便前段table获取值
     */
force-app/main/default/classes/StraightBackAddressControllerTest.cls
@@ -8,6 +8,7 @@
        strList.add('Address__c');
        strList.add('Contact');
        strList.add('Repair__c');
        strList.add('Agency_Contact__c');
        TestDataUtility.CreatePIPolicyConfigurations(strList);
    }
    @isTest
@@ -135,16 +136,24 @@
         sbac.insUpdData.Contacts__c = null;
         sbac.insUpdData.Create_Contacts__c = '王五';
         sbac.save();
         sbac.adoptSave();
         //sbac.adoptSave();
         sbac.searchBtn();
        sbac.insUpdData.Customer__c = depart.Id;
        sbac.queryRecordType();
        sbac.redirectPag();
        sbac.optionAddressClassification.Address_Classification__c = '经销商';
        sbac.searchBtn();
/*
         StraightBackAddressController  ss = new StraightBackAddressController();
         ss.txtName = '经销商';
         ss.txtAddress = '哈哈';
         sbac.typeText = '办事处';
         ss.typeText = '经销商';
         ss.UpdId = ascc.id;
         ss.adoptId = ascc.id;
        ss.searchBtn();
         ss.init();//页面初始化方法
         ss.onEditor();//修改按钮方法
         ss.onCopy();//复制按钮方法
         ss.insUpdData.Address_Classification__c = '';
@@ -154,7 +163,14 @@
         ss.insUpdData.Detailed_Address__c = null;
         ss.insUpdData.Customer__c = null;
         ss.save();
         ss.searchBtn();
*/
    }
    @isTest
    static void testSaveEx() {
        StraightBackAddressController.SaveExCore(null,null,null);
        StraightBackAddressController.SaveExCore('{"attributes":{"type":"Repair__c"}}','{"attributes":{"type":"Asset"}}','a4R1m000000Lfme');
    }
     /**
force-app/main/default/pages/ConsumTrial.page
@@ -6,6 +6,12 @@
    <apex:includeScript value="{!URLFOR($Resource.ReceivingNotePageJS)}"/>
    <apex:includeScript value="{!URLFOR($Resource.CommonUtilJs)}"/>
    <apex:includeScript value="{! URLFOR($Resource.AWSService, 'AWSService.js') }"/>
    <script type="text/javascript">
        var txIds = [];
        var trialuserMap={};
    </script>
    <apex:form id="allForm">
        <style>
            table.headTable td   {
@@ -312,6 +318,42 @@
            var TrialUser = {};
            var ids = [];
        function HasError(){
            // let e = document.getElementById("allPage:allForm:message");
            // if (!e) {
            //     return false;
            // }
            // let divs = j$(e).find("div.message");
            // for (let i = 0; i < divs.length; i++) {
            //     for (let j = 0; j < divs[i].classList.length; j++) {
            //         for(let cls in divs[i].classList){
            //             console.log('cls = ' + cls);
            //             if (cls.indexOf('error')>-1) {
            //                 return true;
            //             }
            //         }
            //     }
            // }
            // return false;
            if(document.getElementById("allPage:allForm:message").children[0] && document.getElementById("allPage:allForm:message").children[0].children[0].className == 'message errorM3'){
                return true;
            }
            return false;
        }
        function isError(){
            if(HasError()){
                alert('xxxx');
            }
        }
            queryUser();
            function q1(){
@@ -420,38 +462,42 @@
                document.getElementById(awsDataId+'_PI').remove();
            }
            function q3(){
                var p = new Promise(function(resolve, reject){
                    console.log('saveRecordJS')
                txIds = [];
                trialuserMap = {};
                    var a = 0;
                    var b = 0;
                debugger
                    let newCallBack = function newCallBack(result,indexNumber){
                        console.log('result = '+JSON.stringify(result))
                        //赋值dataId和trialUser
                        document.getElementById('allPage:allForm:dataBlock:dataline_R_aws:'+indexNumber+':EditAWSDataId').value = result.object[0].dataId;
                    document.getElementById('allPage:allForm:dataBlock:dataline_R_aws:'+indexNumber+':TrialUserEncrypt').value = result.object[0].trialUserEncrypt;
                        document.getElementById('allPage:allForm:dataBlock:dataline_R:'+indexNumber+':inputField:6:inputField').value = result.object[0].trialUser;
                        let transParameters = {
                            txId: result.txId,
                            isSuccess: 1
                        };
                        let confirmCallBack = function confirmCallBack(result){
                            console.log('confirmCallBack = '+JSON.stringify(result))
                        }
                    // let transParameters = {
                    //     txId: result.txId,
                    //     isSuccess: 1
                    // };
                    // let confirmCallBack = function confirmCallBack(result){
                    //     console.log('confirmCallBack = '+JSON.stringify(result))
                    // }
                        b++;
                        AWSService.confirmTrans(staticResource.transactionUrl,JSON.stringify(transParameters),confirmCallBack,staticResource.token)
                    txIds.push(result.txId)
                    //AWSService.confirmTrans(staticResource.transactionUrl,JSON.stringify(transParameters),confirmCallBack,staticResource.token)
                    };
                    for(var i=0;i<rowBList.length;i++){
                        if(document.getElementById('allPage:allForm:dataBlock:dataline_L:'+i+':rowCheck').checked == true){
                            a++;
                        }
                    }
                    debugger
                    for(var i=0;i<rowBList.length;i++){
                        if(document.getElementById('allPage:allForm:dataBlock:dataline_L:'+i+':rowCheck').checked == true){
                            //加密试用者
                            var trialUser = document.getElementById('allPage:allForm:dataBlock:dataline_R:'+i+':inputField:6:j_id86').children[0].children[0].value
                        let e = document.getElementById('allPage:allForm:dataBlock:dataline_R:'+i+':inputField:6:j_id86').children[0].children[0];
                        var trialUser = e.value;
                        trialuserMap['allPage:allForm:dataBlock:dataline_R:'+i+':inputField:6:j_id86'] = trialUser;
                            let consumApplyPayloadList = [];
                            let consumApplyPIData = new Object();
                            consumApplyPIData.trialUser = trialUser;
@@ -475,6 +521,34 @@
                debugger
                saveRecord();
            }
        function Trans(){
            if(HasError()){
                unblockUI();
                for(var e in trialuserMap){
                    document.getElementById(e).children[0].children[0].value = trialuserMap[e];
                }
                return;
            }
            var x = 0;
            let confirmCallBack = function confirmCallBack(result){
                console.log('confirmCallBack = '+JSON.stringify(result))
                x++;
                if(x == txIds.length){
                    refopener();
                    unblockUI();
                    window.location.href='/apex/ConsumTrial?id=' + '{!parId}' + '&canedit=true&saveType=1';
                }
            }
            for(var i=0;i<txIds.length;i++){
                let transParameters = {
                        txId: txIds[i],
                        isSuccess: 1
                };
                AWSService.confirmTrans(staticResource.transactionUrl,JSON.stringify(transParameters),confirmCallBack,staticResource.token)
            }
        }
            function saveRecordJS(){
                if('{!pageB.fixMode}' != 'true'){
                        return
@@ -486,7 +560,7 @@
            }
            //2022 02 24 张华建 display PI Data end
        </script>
        <apex:pageMessages />
        <apex:pageMessages id="message"/>
        <!-- oncomplete="clearApplyValue(); return false;" -->
        <apex:actionFunction name="passApplyMsgToController" action="{!showApplyMsg}"  rerender="allForm">
            <apex:param name="applyMsg" value="" />
@@ -495,7 +569,7 @@
        <apex:actionFunction name="sendEmail" action="{!sendEmail}"  rerender="allForm" oncomplete="unblockUI();">
            <apex:param name="emailBody" value="" />
        </apex:actionFunction>
        <apex:actionFunction name="saveRecord" action="{!saveRecord}" oncomplete="refopener();unblockUI();" rerender="allForm"/>
        <apex:actionFunction name="saveRecord" action="{!saveRecord}" oncomplete="Trans();" rerender="allForm"/>
        <apex:inputHidden id="clearApplyFlagId" />
        <apex:outputPanel id="pageallPanel">
            <apex:pageBlock id="searchBlock">
@@ -631,6 +705,7 @@
                </div>
                <apex:repeat id="dataline_R_aws" value="{!pageB.rowBList}" var="var">
                    <apex:inputHidden value="{!var.rnd.AWS_Data_Id__c}" id="EditAWSDataId"/> 
                    <apex:inputHidden value="{!var.rnd.Trial_User_Encrypt__c}" id="TrialUserEncrypt"/>
                </apex:repeat>
                <div id="in_Div" style="overflow:auto;">
                    <table class="list" style="border-bottom-width: 0px; font-size:11px; border-spacing:0;" border="" id="tableData">
force-app/main/default/pages/FixtureRentalPDF.page
@@ -1,5 +1,7 @@
<apex:page applyHtmlTag="false" Controller="FixtureRentalPDFController" showHeader="false" sidebar="false" id="allPage" action="{!init}" ><!-- renderAs="pdf" -->
<apex:page applyHtmlTag="false" Controller="FixtureRentalPDFController" showHeader="false" sidebar="false" id="allPage" action="{!init}">
    <!-- renderAs="pdf" -->
    <html>
        <head>
            <style type="text/css" media="print">
                @page {
@@ -10,13 +12,20 @@
                /*td{
                    height: 23px;
                }*/
            </style>
            <style>
                body{margin: 0 auto;
                    width: 780px;}
                    #title1{height: 30px;}
                    #title2{height: 110px;}
            body {
                margin: 0 auto;
                width: 780px;
            }
            .title1 {
                height: 35px;
            }
            .title2 {
                height: 110px;
            }
            </style>
            <apex:includeScript value="{! URLFOR($Resource.AWSService, 'AWSService.js') }" />
            <script src="../../soap/ajax/53.0/connection.js" type="text/javascript"></script>
@@ -32,6 +41,9 @@
        <body style="font-family: Arial Unicode MS; page-break-inside: auto;font-size: 14px">
            <div id="pdf-wrapper">
                <apex:outputPanel id="showhidden" rendered="true">
                <div class="pdf-page">
                    <div class="title1"></div>
                    <!-- 20201119 LJH OCSM_BP5-61 update start 现地管理和现地管理的主单不显示-->
                    <!-- <apex:outputText style="float:left;font-size:22px;margin-top: 25px;" value="{!centreAddress}" /> -->
                    <apex:outputText style="float:left;font-size:22px;margin-top: 25px;" value="{!IF(IsShowLU,centreAddress,'')}" />
@@ -44,12 +56,14 @@
                        </colgroup>
                        <tr>
                            <th style="text-align:center;" colspan="2" height="38">奥林巴斯备品签收单
                                <!-- <img style="float: right; width: 35px; height: 35px;padding: 0px;margin-top: -7px;" src="{!'/servlet/servlet.FileDownload?file=' + ApplyHeadShow.QRId__c}" /> -->
                                <!-- <img style="float: right; width: 35px; height: 35px;padding: 0px;margin-top: -7px;" src="{!qrcode}" /> -->
                            </th>
                        </tr>
                        <tr>
                            <td style="text-align:left;border-right-style: none;">★填写完整后请自发货日起10天内上传SFDC</td>
                            <td style="text-align:right;border-left-style: none;">备品管理中心申请单号:<apex:outputText value="{!ApplyHeadShow.Name}" /></td>
                            <td style="text-align:right;border-left-style: none;">备品管理中心申请单号:
                                <apex:outputText value="{!ApplyHeadShow.Name}" />
                            </td>
                        </tr>
                        <!-- <tr style="background-color:#003399;color:white">
                            <th style="text-align:center;" height="40">发货信息</th>
@@ -75,31 +89,65 @@
                            <th style="text-align:center;" colspan="5" height="25">发货信息</th>
                        </tr>
                        <tr>
                            <td style="text-align:left;">使用目的</td> <td style="text-align:left;font-size: 13px" colspan="4"><apex:outputText value="{!ApplyHeadShow.Demo_purpose1__c}" /></td>
                            <td style="text-align:left;">使用目的</td>
                            <td style="text-align:left;font-size: 13px" colspan="4">
                                <apex:outputText value="{!ApplyHeadShow.Demo_purpose1__c}" />
                            </td>
                        </tr>
                        <tr>
                            <td style="text-align:left;" rowspan="2">申请人信息</td>
                            <td style="text-align:left;">所属本部名</td> <td   style="text-align:left;font-size: 13px">     <apex:outputText value="{!ApplyHeadShow.Salesdept__c}" /></td>
                            <td style="text-align:left;" >所属办事处名</td> <td   style="text-align:left;font-size: 13px">        <apex:outputText value="{!ApplyHeadShow.WorkPlace__c}" /></td>
                            <td style="text-align:left;">所属本部名</td>
                            <td style="text-align:left;font-size: 13px">
                                <apex:outputText value="{!ApplyHeadShow.Salesdept__c}" />
                            </td>
                            <td style="text-align:left;">所属办事处名</td>
                            <td style="text-align:left;font-size: 13px">
                                <apex:outputText value="{!ApplyHeadShow.WorkPlace__c}" />
                            </td>
                        </tr>
                        <tr>
                            <td style="text-align:left;" >姓名 </td> <td  style="text-align:left;font-size: 13px">    <apex:outputText value="{!ApplyHeadShow.Person_In_Charge__r.name}" /></td>
                            <td style="text-align:left;" colspan="1">联系电话</td> <td  style="text-align:left;font-size: 13px">     <apex:outputText value="{!ApplyHeadShow.ApplyPerson_Phone__c}" /></td>
                            <td style="text-align:left;">姓名 </td>
                            <td style="text-align:left;font-size: 13px">
                                <apex:outputText value="{!ApplyHeadShow.Person_In_Charge__r.name}" />
                            </td>
                            <td style="text-align:left;" colspan="1">联系电话</td>
                            <td style="text-align:left;font-size: 13px">
                                <apex:outputText value="{!ApplyHeadShow.ApplyPerson_Phone__c}" />
                            </td>
                        </tr>
                        <tr>
                            <td style="text-align:left;" >医疗机构信息</td> 
                            <td style="text-align:left;" >医疗机构名</td> <td style="text-align:left;font-size: 13px"> <apex:outputText value="{!HospitalName}" /></td>
                            <td style="text-align:left;" >科室名</td> <td  style="text-align:left;font-size: 13px"><apex:outputText value="{!ApplyHeadShow.Account__r.Department_Name__c}" /></td>
                            <td style="text-align:left;">医疗机构名</td>
                            <td style="text-align:left;font-size: 13px">
                                <apex:outputText value="{!HospitalName}" />
                            </td>
                            <td style="text-align:left;">科室名</td>
                            <td style="text-align:left;font-size: 13px">
                                <apex:outputText value="{!ApplyHeadShow.Account__r.Department_Name__c}" />
                            </td>
                        </tr>
                        <tr>
                            <td style="text-align:left;" rowspan="3" >发货地址</td> <td colspan="2" rowspan="3" style="text-align:left;font-size: 13px"> <apex:outputText styleClass="Shippmentadress" value="{!Shippmentadress}" /></td>
                            <td style="text-align:left;" colspan="1">邮编</td> <td  style="text-align:left;"> <apex:outputText value="{!IF(ApplyHeadShow.Shipment_address__r.Post_Code__c==null,ApplyHeadShow.Post_Code__c,ApplyHeadShow.Shipment_address__r.Post_Code__c)}" /></td>
                            <td style="text-align:left;" rowspan="3">发货地址</td>
                            <td colspan="2" rowspan="3" style="text-align:left;font-size: 13px">
                                <apex:outputText styleClass="Shippmentadress" value="{!Shippmentadress}" />
                            </td>
                            <td style="text-align:left;" colspan="1">邮编</td>
                            <td style="text-align:left;">
                                <apex:outputText value="{!IF(ApplyHeadShow.Shipment_address__r.Post_Code__c==null,ApplyHeadShow.Post_Code__c,ApplyHeadShow.Shipment_address__r.Post_Code__c)}"
                                />
                            </td>
                        </tr>
                        <tr>
                            <td style="text-align:left;" colspan="1">接收人姓名</td> <td  style="text-align:left;font-size: 13px">  <apex:outputText value="{!ApplyHeadShow.Loaner_received_staff__c}" /></td>
                            <td style="text-align:left;" colspan="1">接收人姓名</td>
                            <td style="text-align:left;font-size: 13px">
                                <apex:outputText value="{!ApplyHeadShow.Loaner_received_staff__c}" />
                            </td>
                        </tr>
                        <tr>
                            <td style="text-align:left;" colspan="1">接收人电话</td> <td style="text-align:left;font-size: 13px">  <apex:outputText value="{!ApplyHeadShow.Loaner_received_staff_phone__c}" /></td>
                            <td style="text-align:left;" colspan="1">接收人电话</td>
                            <td style="text-align:left;font-size: 13px">
                                <apex:outputText value="{!ApplyHeadShow.Loaner_received_staff_phone__c}" />
                            </td>
                        </tr>
                    </table>
                    <table border="1" width="100%" style="border-collapse: collapse;">
@@ -119,15 +167,21 @@
                            <col width="23%" />
                        </colgroup>
                        <tr>
                            <th style="text-align:center;" colspan="4" height="40"> 奥林巴斯备品借用申请・安装人填写栏<small>(必填)</small><br/>到货确认部分为奥林巴斯员工必填项目</th>
                            <th style="text-align:center;" colspan="4" height="40"> 奥林巴斯备品借用申请・安装人填写栏
                                <small>(必填)</small>
                                <br/>到货确认部分为奥林巴斯员工必填项目</th>
                        </tr>
                        <tr>
                            <td style="text-align:left;" >签收者姓名</td> <td style="text-align:left;"></td>
                            <td style="text-align:left;">备品安装者姓名</td> <td  style="text-align:left;"></td>
                            <td style="text-align:left;">签收者姓名</td>
                            <td style="text-align:left;"></td>
                            <td style="text-align:left;">备品安装者姓名</td>
                            <td style="text-align:left;"></td>
                        </tr>
                        <tr>
                            <td style="text-align:left;">签收日期</td> <td  style="text-align:left;"></td>
                            <td style="text-align:left;">安装及安装说明日期</td> <td  style="text-align:left;"> </td>
                            <td style="text-align:left;">签收日期</td>
                            <td style="text-align:left;"></td>
                            <td style="text-align:left;">安装及安装说明日期</td>
                            <td style="text-align:left;"> </td>
                        </tr>
                    </table>
                    <table border="1" width="100%" style="border-collapse: collapse;">
@@ -139,19 +193,25 @@
                            <col width="23%" />
                        </colgroup>
                        <tr>
                            <th style="text-align:center;" colspan="4" height="40"> 医疗机构签收填写栏<small>(必填)</small><br/>敬请使用备品前仔细阅读下方“奥林巴斯备品借用须知”,以明确使用方的责任与义务</th>
                            <th style="text-align:center;" colspan="4" height="40"> 医疗机构签收填写栏
                                <small>(必填)</small>
                                <br/>敬请使用备品前仔细阅读下方“奥林巴斯备品借用须知”,以明确使用方的责任与义务</th>
                            
                        </tr>
                        <!--根据OLY_OCM-260记载,先注释掉(OLY_OCM-251取消注释) -->
                        <tr><th style="text-align:center;" height="25" colspan="4">《奥林巴斯备品发货清单》所列备品悉数收到,
                        共计主机{!mainCnt}件,附属品{!accessoryCnt}件;并已接受产品使用说明和了解借用须知。</th></tr>
                        <tr>
                            <td style="text-align:left;" >签收者姓名</td> <td style="text-align:left;"></td>
                            <th style="text-align:center;" height="25" colspan="4">《奥林巴斯备品发货清单》所列备品悉数收到, 共计主机{!mainCnt}件,附属品{!accessoryCnt}件;并已接受产品使用说明和了解借用须知。
                            </th>
                        </tr>
                        <tr>
                            <td style="text-align:left;">签收者姓名</td>
                            <td style="text-align:left;"></td>
                            <td style="text-align:left;" rowspan="2">接收单位(科室)章 </td>
                            <td style="text-align:left;" rowspan="2"> </td>
                        </tr>
                        <tr>
                            <td style="text-align:left;">签收日期</td> <td  style="text-align:left;"></td>
                            <td style="text-align:left;">签收日期</td>
                            <td style="text-align:left;"></td>
                            
                        </tr>
                    </table>
@@ -164,61 +224,91 @@
                        </tr>
                        <tr>
                            <td style="text-align:left;font-size: 12px">
                1,备品:本须知所指的备品,是指本签收单附件《奥林巴斯备品发货清单》所列的由奥林巴斯(北京)销售服务有限公司(以下简称奥林<br/>巴斯)在规定期限内免费提供给借用单位为实施医疗行为或培训等所使用的设备包括产品及相关附属品,附件是本须知有效组成部分,与本<br/>须知具有同等法律效力。<br/>
                2,备品所有权:备品所有权归属于奥林巴斯公司。未经奥林巴斯公司书面同意,借用单位不得以任何理由向任何第三方转借、转让附件所<br/>列备品,或将附件所列备品作为担保抵押给任何第三方。<br/>
                3,备品使用权:借用期限内,借用单位对出借的备品享有独立合理的使用权利。若在使用过程中存在不确定情况时,借用单位应及时通知<br/>奥林巴斯公司,奥林巴斯公司将到场给予指导和协助,借用单位不应擅自处理。<br/>
                4,备品之日常使用与维护:借用单位在使用备品过程中应按照奥林巴斯公司的要求(“产品使用说明书”)内容尽审慎义务正确操作使用、<br/>爱护使用。备品使用前后都应进行必要的清洗消毒(灭菌)及日常检测工作,以确保备品的正常运作。<br/>
                5,备品损坏、遗失之赔偿责任:附件所列备品若因正常损耗而产生的维修或维护费用,由奥林巴斯公司承担;若因借用单位使用不当或超<br/>期借用等原因造成的备品损坏,借用单位应承担相关维修费用。当备品借用中发生故障需要维修时,应联系奥林巴斯进行检测和维修,不得<br/>擅自将相关备品交由任何第三方维修。若因借用单位原因造成备品遗失时,则借用单位应负赔偿责任。<br/>
                6,医疗责任事故:备品是符合国家质量标准并经检验合格的医疗器械产品,借用单位应独立依靠其医疗专业水平和能力利用备品进行医疗<br/>活动或培训。借用单位使用备品时所发生的任何问题均由借用单位自行负责、处理。<br/>
                7,备品返还:借用单位应按照本单注明的使用期限履行按时返还备品的承诺。返回前,借用单位应对备品进行清洗消毒或灭菌,以保证所<br/>有备品接触者的健康安全,同时借用单位有义务为奥林巴斯公司回收备品提供必要协助。<br/>
                8,借用单位知悉且同意,此次备品出借基于正当合理的理由,而非通过出借备品对借用单位购买、推荐奥林巴斯公司产品、服务等产生任<br/>何不正当影响。<br/>
                9,借用单位应严格按本单所载使用目的使用备品,禁止将备品用于本单所载使用目的以外的其他用途。<br/>
                10,若借用单位选择以加盖实际接收备品的借用单位内部部门章或签收者签名方式确认以上内容,实际接收备品的借用单位内部部门或签<br/>收者确认其具备相应资格代表借用单位进行签收和确认。<br/>
                11,其它:其它未尽事宜,双方应本着友好合作的原则进行协商解决。
                                1,备品:本须知所指的备品,是指本签收单附件《奥林巴斯备品发货清单》所列的由奥林巴斯(北京)销售服务有限公司(以下简称奥林
                                <br/>巴斯)在规定期限内免费提供给借用单位为实施医疗行为或培训等所使用的设备包括产品及相关附属品,附件是本须知有效组成部分,与本
                                <br/>须知具有同等法律效力。
                                <br/> 2,备品所有权:备品所有权归属于奥林巴斯公司。未经奥林巴斯公司书面同意,借用单位不得以任何理由向任何第三方转借、转让附件所
                                <br/>列备品,或将附件所列备品作为担保抵押给任何第三方。
                                <br/> 3,备品使用权:借用期限内,借用单位对出借的备品享有独立合理的使用权利。若在使用过程中存在不确定情况时,借用单位应及时通知
                                <br/>奥林巴斯公司,奥林巴斯公司将到场给予指导和协助,借用单位不应擅自处理。
                                <br/> 4,备品之日常使用与维护:借用单位在使用备品过程中应按照奥林巴斯公司的要求(“产品使用说明书”)内容尽审慎义务正确操作使用、
                                <br/>爱护使用。备品使用前后都应进行必要的清洗消毒(灭菌)及日常检测工作,以确保备品的正常运作。
                                <br/> 5,备品损坏、遗失之赔偿责任:附件所列备品若因正常损耗而产生的维修或维护费用,由奥林巴斯公司承担;若因借用单位使用不当或超
                                <br/>期借用等原因造成的备品损坏,借用单位应承担相关维修费用。当备品借用中发生故障需要维修时,应联系奥林巴斯进行检测和维修,不得
                                <br/>擅自将相关备品交由任何第三方维修。若因借用单位原因造成备品遗失时,则借用单位应负赔偿责任。
                                <br/> 6,医疗责任事故:备品是符合国家质量标准并经检验合格的医疗器械产品,借用单位应独立依靠其医疗专业水平和能力利用备品进行医疗
                                <br/>活动或培训。借用单位使用备品时所发生的任何问题均由借用单位自行负责、处理。
                                <br/> 7,备品返还:借用单位应按照本单注明的使用期限履行按时返还备品的承诺。返回前,借用单位应对备品进行清洗消毒或灭菌,以保证所
                                <br/>有备品接触者的健康安全,同时借用单位有义务为奥林巴斯公司回收备品提供必要协助。
                                <br/> 8,借用单位知悉且同意,此次备品出借基于正当合理的理由,而非通过出借备品对借用单位购买、推荐奥林巴斯公司产品、服务等产生任
                                <br/>何不正当影响。
                                <br/> 9,借用单位应严格按本单所载使用目的使用备品,禁止将备品用于本单所载使用目的以外的其他用途。
                                <br/> 10,若借用单位选择以加盖实际接收备品的借用单位内部部门章或签收者签名方式确认以上内容,实际接收备品的借用单位内部部门或签
                                <br/>收者确认其具备相应资格代表借用单位进行签收和确认。
                                <br/> 11,其它:其它未尽事宜,双方应本着友好合作的原则进行协商解决。
                            </td>
                            <!-- 20211008 ljh SFDC-C7L4ED 增加8,9,10-->  
                        </tr>
                        <tr>
                            <td style="text-align:left;font-size:12px;border-collapse: collapse;" colspan="2" height="80">
                奥林巴斯 北京备品中心地址:北京市朝阳区酒仙桥路10号恒通商务园B12C座西门1F<br />
                邮编:100015     TEL:010-59756006-1871    FAX: 010-59756534<br />
                奥林巴斯 广州备品中心地址:广州市番禺区东环街番禺大道北537号番山创业中心3号楼1F<br />
                邮编:511400     TEL:020-39198888-8876     FAX:020-39198848<br />
                奥林巴斯 上海备品中心地址:上海市浦东新区金吉路778号3号楼1F<br />
                邮编:201206    TEL:021-60391318-8877    FAX:021-60391316<br />
                                奥林巴斯 北京备品中心地址:北京市朝阳区酒仙桥路10号恒通商务园B12C座西门1F
                                <br /> 邮编:100015 TEL:010-59756006-1871 FAX: 010-59756534
                                <br /> 奥林巴斯 广州备品中心地址:广州市番禺区东环街番禺大道北537号番山创业中心3号楼1F
                                <br /> 邮编:511400 TEL:020-39198888-8876 FAX:020-39198848
                                <br /> 奥林巴斯 上海备品中心地址:上海市浦东新区金吉路778号3号楼1F
                                <br /> 邮编:201206 TEL:021-60391318-8877 FAX:021-60391316
                                <br />
                            </td>
                            <!-- 20210812 SFDC-C5CC5S 修改地址-->
                        </tr>
                    </table>
                    <apex:outputPanel layout="none">
                        <div style="page-break-after: always;"/>
                        <div style="page-break-after: always;"></div>
                    </apex:outputPanel>
                </div>
                <apex:variable value="{!1}" var="pNcnt" />
                <apex:variable value="{!1}" var="pcnt" />
                <apex:repeat value="{!records}" var="record">
                    <div style="{position:absolute;width:100%;height:15px">&nbsp;</div>
                    <div class="pdf-page">
                        <div class="title1">&nbsp;</div>
                    <!-- 20201119 LJH OCSM_BP5-61 update start 主单是显示办事处和备品中心分来显示且内容不同 -->
                    <!-- <apex:outputText style="float:left;font-size:22px;margin-top: 15px;" value="{!centreAddress}"/> -->
                    <!-- height: 15mm; -->
                    <table border="0" width="100%" style="border-collapse: collapse;margin: 0;">
                        <apex:outputPanel layout="none" rendered="{!IF(!IsShowLU , true, false)}">
                        <tr>
                            <td style="font-size:22px;"><apex:outputText value="{!IF(record.isAgencyOrCenter,record.AgencyAddressName,centreAddress)}"/></td>
                                    <td style="font-size:22px;">
                                        <!-- 20220413 ljh 抬头显示 update start -->
                                        <!-- <apex:outputText value="{!IF(record.isAgencyOrCenter,record.AgencyAddressName,centreAddress)}" /> -->
                                        <apex:outputText value="{!IF(isAgencyOrCenter,AgencyAddressName,centreAddress)}" />
                                        <!-- 20220413 ljh 抬头显示 update end -->
                                    </td>
                            <td rowspan="2">
                                <img style="float: right; width: 55px; height: 55px;padding: 0px;margin-top: 0mm;" src="{!'/servlet/servlet.FileDownload?file=' + ApplyHeadShow.QRId__c}" />
                                        <img style="float: right; width: 55px; height: 55px;padding: 0px;margin-top: 0mm;" src="{!qrcode}"
                                        />
                            </td>
                        </tr>
                        <tr>
                            <td style="font-size:15px;"><c:PDFWbr targetStr="{!IF(record.AgencyOrCenterAddress=='BeiJingCenter','北京市朝阳区酒仙桥路10号恒通商务园B12C座西门1F 电话:010-59756006-1871',IF(record.AgencyOrCenterAddress=='ShangHaiCenter','上海市浦东新区唐镇创业路183号2幢1F 电话:021-60391318-8877',IF(record.AgencyOrCenterAddress=='GuangZhouCenter','广州市番禺区东环街番禺大道北537号番山创业中心3号楼1F 电话:020-39198888-8876',record.AgencyOrCenterAddress)))}"/></td>
                                    <td style="font-size:15px;">
                                        <!-- 20220413 ljh 抬头显示 update start -->
                                        <!-- <c:PDFWbr targetStr="{!IF(record.AgencyOrCenterAddress=='BeiJingCenter','北京市朝阳区酒仙桥路10号恒通商务园B12C座西门1F 电话:010-59756006-1871',IF(record.AgencyOrCenterAddress=='ShangHaiCenter','上海市浦东新区唐镇创业路183号2幢1F 电话:021-60391318-8877',IF(record.AgencyOrCenterAddress=='GuangZhouCenter','广州市番禺区东环街番禺大道北537号番山创业中心3号楼1F 电话:020-39198888-8876',record.AgencyOrCenterAddress)))}"
                                        /> -->
                                        <c:PDFWbr targetStr="{!IF(AgencyOrCenterAddress=='BeiJingCenter','北京市朝阳区酒仙桥路10号恒通商务园B12C座西门1F 电话:010-59756006-1871',IF(AgencyOrCenterAddress=='ShangHaiCenter','上海市浦东新区金吉路778号3号楼1F 电话:021-60391318-8877',IF(AgencyOrCenterAddress=='GuangZhouCenter','广州市番禺区东环街番禺大道北537号番山创业中心3号楼1F 电话:020-39198888-8876',AgencyOrCenterAddress)))}"
                                        />
                                        <!-- 20220413 ljh 抬头显示 update start -->
                                    </td>
                        </tr>
                        </apex:outputPanel>
                        <apex:outputPanel layout="none" rendered="{!IF(IsShowLU , true, false)}">
                        <tr>
                            <td style="font-size:22px;height: 55px;line-height: 55px;"><apex:outputText value="{!centreAddress}"/>
                                    <td style="font-size:22px;height: 55px;line-height: 55px;">
                                        <apex:outputText value="{!centreAddress}" />
                            </td>
                            <td>
                                <img style="float: right; width: 55px; height: 55px;padding: 0px;margin-top: 0mm;" src="{!'/servlet/servlet.FileDownload?file=' + ApplyHeadShow.QRId__c}" />
                                        <img style="float: right; width: 55px; height: 55px;padding: 0px;margin-top: 0mm;" src="{!qrcode}"
                                        />
                            </td>
                        </tr>
                        </apex:outputPanel>
@@ -228,12 +318,15 @@
                    <table border="1" width="100%" style="border-collapse: collapse;">
                        <tr>
                            <th style="box-sizing: border-box;text-align:center;font-size:24px;font-weight:900;" height="40">奥林巴斯备品发货清单
                            <!-- <img style="float: right; width: 35px; height: 35px;padding: 0px;" src="{!'/servlet/servlet.FileDownload?file=' + ApplyHeadShow.QRId__c}" /> -->
                                    <!-- <img style="float: right; width: 35px; height: 35px;padding: 0px;" src="{!qrcode}" /> -->
                            <!-- <td align="right" valign="top"><apex:outputField value="{!ApplyHeadShow.QRImg__c}" /></td>  -->
                            </th>
                        </tr>
                        <tr>
                            <td style="box-sizing: border-box;text-align:right;font-size:13px;" >备品管理中心申请单号:<apex:outputText value="{!ApplyHeadShow.Name}" /></td> <!-- {!RentalApplyName} 20201119 LJH OCSM_BP5-61  update-->
                                <td style="box-sizing: border-box;text-align:right;font-size:13px;">备品管理中心申请单号:
                                    <apex:outputText value="{!ApplyHeadShow.Name}" />
                                </td>
                                <!-- {!RentalApplyName} 20201119 LJH OCSM_BP5-61  update-->
                        </tr>
                        <tr style="background-color:white;">
                            <td style="box-sizing: border-box;text-align:right;font-size:13px;">本单附件第( {!pNcnt})页/共( {!pageCnt})页</td>
@@ -244,7 +337,8 @@
                            </th>
                        </tr>
                        <tr>
                            <td style="box-sizing: border-box;text-align:left;font-size:12.3px;">本《奥林巴斯备品发货清单》一式两份,由奥林巴斯备品借用申请人(备品安装人)和医疗机构借用方各执一份,作为出借和归还时双方进<br/>行清点确认凭证
                                <td style="box-sizing: border-box;text-align:left;font-size:12.3px;">本《奥林巴斯备品发货清单》一式两份,由奥林巴斯备品借用申请人(备品安装人)和医疗机构借用方各执一份,作为出借和归还时双方进
                                    <br/>行清点确认凭证
                            </td>
                        </tr>
                    </table>
@@ -285,7 +379,8 @@
                            <td style="box-sizing: border-box;text-align:center;font-size:13px;border-left: solid 1px;"  rowspan="2">发货地址</td>
                             <!-- 20220124 ljh SFDC-C4U3PH update colspan="4"  -->
                            <td style="box-sizing: border-box;text-align:left;font-size: 13px;"  colspan="5"  rowspan="2">
                                <apex:outputText styleClass="address" value="{!if(isblank(ApplyHeadShow.Shippment_adress_detail__c), ApplyHeadShow.direct_shippment_address__c, ApplyHeadShow.Shippment_adress_detail__c)}" />
                                    <apex:outputText styleClass="address" value="{!if(isblank(ApplyHeadShow.Shippment_adress_detail__c), ApplyHeadShow.direct_shippment_address__c, ApplyHeadShow.Shippment_adress_detail__c)}"
                                    />
                            </td>
                        </tr>
                        <tr>
@@ -317,21 +412,37 @@
                            <td style="text-align:center;font-size: 11px;">固定资产号</td>
                            <td style="box-sizing: border-box;text-align:center;font-size: 11px;">货位号</td>
                            <!-- 20220124 ljh SFDC-C4U3PH add start -->
                            <td style="box-sizing: border-box;text-align:center;font-size: 11px;">备注</td>
                                <td style="box-sizing: border-box;text-align:center;font-size: 11px;min-width:30px">备注</td>
                            <!-- 20220124 ljh SFDC-C4U3PH add end -->
                            <!-- <td style="text-align:center;">二维码</td> -->
                        </tr>
                        <apex:repeat value="{!record.lineList}" var="line">
                            <tr>
                                <td style="box-sizing: border-box;text-align:center;font-size: 10px;height:30px;padding: 0px;"><c:PDFWbr targetStr="{!line.index}" /></td>
                                <td style="box-sizing: border-box;text-align:left;font-size: 10px;padding: 0px;"><c:PDFWbr targetStr="{!line.dManagementnumber}" /></td>
                                <td style="box-sizing: border-box;text-align:left;font-size: 10px;padding: 0px;"><c:PDFWbr targetStr="{!line.dModelNo}" /></td>
                                <td style="box-sizing: border-box;text-align:left;font-size: 10px;padding: 0px;" colspan="2"><c:PDFWbr targetStr="{!line.dChinaName}" /></td>
                                <td style="box-sizing: border-box;text-align:left;font-size: 10px;padding: 0px;"><c:PDFWbr targetStr="{!line.dSerialNumber}" /></td>
                                <td style="box-sizing: border-box;text-align:left;font-size: 10px;padding: 0px;"><c:PDFWbr targetStr="{!line.dLoaner_asset_no}" /></td>
                                <td style="box-sizing: border-box;text-align:left;font-size: 10px;padding: 0px;"><c:PDFWbr targetStr="{!line.wh_location}" /></td>
                                    <td style="box-sizing: border-box;text-align:center;font-size: 10px;height:30px;padding: 0px;">
                                        <c:PDFWbr targetStr="{!line.index}" />
                                    </td>
                                    <td style="box-sizing: border-box;text-align:left;font-size: 10px;padding: 0px;">
                                        <c:PDFWbr targetStr="{!line.dManagementnumber}" />
                                    </td>
                                    <td style="box-sizing: border-box;text-align:left;font-size: 10px;padding: 0px;">
                                        <c:PDFWbr targetStr="{!line.dModelNo}" />
                                    </td>
                                    <td style="box-sizing: border-box;text-align:left;font-size: 10px;padding: 0px;" colspan="2">
                                        <c:PDFWbr targetStr="{!line.dChinaName}" />
                                    </td>
                                    <td style="box-sizing: border-box;text-align:left;font-size: 10px;padding: 0px;">
                                        <c:PDFWbr targetStr="{!line.dSerialNumber}" />
                                    </td>
                                    <td style="box-sizing: border-box;text-align:left;font-size: 10px;padding: 0px;">
                                        <c:PDFWbr targetStr="{!line.dLoaner_asset_no}" />
                                    </td>
                                    <td style="box-sizing: border-box;text-align:left;font-size: 10px;padding: 0px;">
                                        <c:PDFWbr targetStr="{!line.wh_location}" />
                                    </td>
                                <!-- 20220124 ljh SFDC-C4U3PH add start -->
                                <td style="box-sizing: border-box;text-align:left;font-size: 10px;padding: 0px;"><c:PDFWbr targetStr="" /></td>
                                    <td style="box-sizing: border-box;text-align:left;font-size: 10px;padding: 0px;">
                                        <c:PDFWbr targetStr="" />
                                    </td>
                                <!-- {!line.Received_ng_detail} -->
                                <!-- 20220124 ljh SFDC-C4U3PH add end -->
                                <!-- <td style="text-align:center;font-size: 10px"><c:PDFWbr targetStr="{!line.dQRCode}" /></td> -->
@@ -358,6 +469,7 @@
                    <div style="page-break-after: always;"/>
                    </apex:outputPanel>
                    <apex:variable value="{!pNcnt+1}" var="pNcnt" />
                    </div>
                </apex:repeat>
                </apex:outputPanel>
@@ -372,12 +484,14 @@
            //blockme();
            document.body.onload = function(){
                console.log('document.body.onload')
                if ({!addFlag} || !'{!ApplyHeadShow.Shippment_adress_detail__c}') {
            if ({!addFlag
        } || !'{!ApplyHeadShow.Shippment_adress_detail__c}') {
                    AWSService.query(staticResources.queryUrl, '{!ApplyHeadShow.AWS_Data_Id__c}', function(data){
                        console.log('data----------')
                        console.log(data);
                        //unblockUI();
                        if ({!addFlag}) {
                if ({!addFlag
            }) {
                            jQuery(".Shippmentadress").html(data.object.directShippmentAddress);
                        }
                        //document.getElementById("Caller_phone__c").innerHTML = data.object.callerPhone;
@@ -394,53 +508,93 @@
                
            }
            function jsPdfDownload(){
                let pdfName = "测试";
                let id = "pdf-wrapper";
                var target = document.getElementById(id);
                target.style.background = "#FFFFFF";
                if(pdfName==''||pdfName==undefined) pdfName= getNowFormatDate();
        
                html2canvas(target, {
            let jtargets = jQuery("#pdf-wrapper .pdf-page");
            let j_arr = new Array(jtargets.length + 1).join(0).split('').map(function () { return false });
            let landscape = false;
            let pw = 595.28;
            let ph = 841.89;
            const marginw = 40;
            let orientation = '';
            if (landscape) {
                pw += ph; ph = pw - ph; pw = pw - ph;
                orientation = 'l';
            }
            var pdf = new jsPDF(orientation, 'pt', 'a4');// 第一个参数填字母l,注意不是数字1,为横向pdf
            jtargets.each(function (i, e) {
                e.style.background = "#FFFFFF";
            })
            let rei = 0;
            let recursion = null;
            recursion = function (i) {
                if (i >= jtargets.length) {
                    Fun(pdf);
                    return;
                }
                e = jtargets[i];
                html2canvas(e, {
                    scale: 2,
                    onrendered:function(canvas) {
                        let canvas_max_page_num = 1;
                        let canvas_current_page_num = 0;
                        var contentWidth = canvas.width;
                        var contentHeight = canvas.height;
        
                        //一页pdf显示html页面生成的canvas高度;
                        var pageHeight = contentWidth / 592.28 * 841.89;
                        var pageHeight = contentWidth / pw * ph;
                        //未生成pdf的html页面高度
                        var leftHeight = contentHeight;
                        //页面偏移
                        var position = 0;
                        //a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高
                        var imgWidth = 565.28;//595.28//左右边距20
                        var imgHeight = 605.28/contentWidth * contentHeight;//左右边距20
                        var imgWidth = pw - 2 * marginw;//595.28//左右边距20
                        var imgHeight = imgWidth / contentWidth * contentHeight;//左右边距20
        
                        var pageData = canvas.toDataURL('image/jpeg', 1.0);
        
                        var pdf = new jsPDF('', 'pt', 'a4');
        
                        if (i) {
                            pdf.addPage();
                        }
                        //有两个高度需要区分,一个是html页面的实际高度,和生成pdf的页面高度(841.89)
                        //当内容未超过pdf一页显示的范围,无需分页
                        if (leftHeight < pageHeight) {
                            pdf.addImage(pageData, 'JPEG', 15, 0, imgWidth, imgHeight );//左右边距7.5
                            pdf.addImage(pageData, 'JPEG', marginw, 0, imgWidth, imgHeight);//左右边距20
                        } else {
                            while(leftHeight > 0) {
                                pdf.addImage(pageData, 'JPEG', 15, position, imgWidth, imgHeight)//左右边距7.5
                                canvas_current_page_num++;
                                pdf.addImage(pageData, 'JPEG', marginw, position, imgWidth, imgHeight)//左右边距20
                                leftHeight -= pageHeight;
                                position -= 841.89;
                                position -= ph;
                                if (canvas_max_page_num > 0 && canvas_current_page_num >= canvas_max_page_num) {
                                    break;
                                }
                                //避免添加空白页
                                if(leftHeight > 0) {
                                    pdf.addPage();
                                }
                            }
                        }
                        Fun(pdf);
                        recursion(i + 1);
                    }
                })
            };
            recursion(rei);
            }
            var staticResourceFile = JSON.parse('{!staticResourceFile}');
            function Fun(pdf){
                var form = jQuery("<form method='post'></form>");
                jQuery(document.body).append(form);
                let href = window.location.href
@@ -452,7 +606,14 @@
                input.val(pdf.output('datauristring').substr(28));
                form.append(input);
                form.submit();
            // jQuery("body > *").each(function(){
            //     jQuery(this).css('display','none');
            // })
            // jQuery("body").append('<embed style="position:absolute; left: 0; top: 0;" width="100%" height="100%" src="'+pdf.output('datauristring')+'" type="application/pdf"/>')
            }
        </script>
    </html>
</apex:page>
force-app/main/default/pages/InsReportPDF.page
@@ -228,22 +228,22 @@
    var staticResourceFile = JSON.parse('{!staticResourceFile}');
    function Fun(pdf){
        var form = jQuery("<form method='post'></form>");
        jQuery(document.body).append(form);
        let href = window.location.href
        let arr = href.split('/')
        form.attr({"action":staticResourceFile.viewUnifiedContactUrl+"?from="+encodeURIComponent(href)+"&fileName="+encodeURIComponent(arr[arr.length-1].split('?')[0])});
        // form.attr({"action":"http://127.0.0.1:8080/a/d?from="+encodeURIComponent(window.location.href)});
        let input = jQuery("<input type='hidden'/>");
        input.attr({"name":"base64Str"});
        input.val(pdf.output('datauristring').substr(28));
        form.append(input);
        form.submit();
        // var form = jQuery("<form method='post'></form>");
        // jQuery(document.body).append(form);
        // let href = window.location.href
        // let arr = href.split('/')
        // form.attr({"action":staticResourceFile.viewUnifiedContactUrl+"?from="+encodeURIComponent(href)+"&fileName="+encodeURIComponent(arr[arr.length-1].split('?')[0])});
        // // form.attr({"action":"http://127.0.0.1:8080/a/d?from="+encodeURIComponent(window.location.href)});
        // let input = jQuery("<input type='hidden'/>");
        // input.attr({"name":"base64Str"});
        // input.val(pdf.output('datauristring').substr(28));
        // form.append(input);
        // form.submit();
        // jQuery("body > *").each(function(){
        //     jQuery(this).css('display','none');
        // })
        // jQuery("body").append('<embed style="position:absolute; left: 0; top: 0;" width="100%" height="100%" src="'+pdf.output('datauristring')+'" type="application/pdf"/>')
        jQuery("body > *").each(function(){
            jQuery(this).css('display','none');
        })
        jQuery("body").append('<embed style="position:absolute; left: 0; top: 0;" width="100%" height="100%" src="'+pdf.output('datauristring')+'" type="application/pdf"/>')
    }
force-app/main/default/pages/NewAndEditASEActivity.page
@@ -1,10 +1,3 @@
<!--
  @description       :
  @author            : ChangeMeIn@UserSettingsUnder.SFDoc
  @group             :
  @last modified on  : 03-23-2022
  @last modified by  : ChangeMeIn@UserSettingsUnder.SFDoc
-->
<apex:page standardController="ASEActivity__c" extensions="NewAndEditASEActivityController" id="page">
    <apex:includeScript value="{! URLFOR($Resource.AWSService, 'AWSService.js') }" />
    <script src="../../soap/ajax/53.0/connection.js" type="text/javascript"></script>
@@ -70,10 +63,14 @@
                
                //payloadJson.AWS_Data_Id__c = r.object[0].dataId;
                payloadJson.AWS_Data_Id__c = '{!AWSDataId}';
                if (isNewMode) {
                if (isNewMode || {!isCloneMode}) {
                    payloadJson.AWS_Data_Id__c = r.object[0].dataId;
                    delete payloadJson.OwnerId;
                } else {
                    payloadJson.AWS_Data_Id__c = '{!AWSDataId}';
                }
                if('{!rtTypeId}'){
                    payloadJson.RecordTypeId = '{!rtTypeId}';//Add by zhj for Record Type Issue 20220421
                }
                return payloadJson;
            },
@@ -145,7 +142,7 @@
               
        function ProcessPI(sobjJson, payloadForNewPI) {
            blockme();
            if ({!isNewMode}) {
            if ({!isNewMode} || {!isCloneMode}) {
                NewPIToAWS(sobjJson, payloadForNewPI)
            }else {
                UpdatePIToAWS(sobjJson, payloadForNewPI)
@@ -186,25 +183,25 @@
        function validateFieldValueFormate() {
            let error_msg = '';
            // let textEmail = "[data-id='Email']";
            let textPhone = "[data-id='CustomerTel__c']";
            //let textPhone = "[data-id='CustomerTel__c']";
            // //Email
            // let email = document.querySelector(textEmail);
            // if(email && !/^[\w-]{3,12}@[\da-zA-Z]{2,16}\.[a-zA-Z]+$/.test(email.value)){
            //     error_msg += ';邮件格式错误';
            // }
            let phone = document.querySelector(textPhone);
            // let phone = document.querySelector(textPhone);
            if(phone ){
                if(phone.value){
                    if(!/^1[3|5|8|7][0-9]\d{4,8}$/.test(phone.value)){
                        error_msg += ';电话号码错误';
                    }
                }else{
                    if(phone.previousSibling && phone.previousSibling.className.indexOf('requiredBlock')>-1){
                        error_msg += ';电话号码错误';
                    }
                }
            }
            // if(phone ){
            //     if(phone.value){
            //         if(!/^1[3|5|8|7][0-9]\d{4,8}$/.test(phone.value)){
            //             error_msg += ';电话号码错误';
            //         }
            //     }else{
            //         if(phone.previousSibling && phone.previousSibling.className.indexOf('requiredBlock')>-1){
            //             error_msg += ';电话号码错误';
            //         }
            //     }
            // }
            let es = document.getElementsByTagName('select')
            for(let ei in es){
@@ -268,6 +265,9 @@
                } else {
                    result[field_api_name] = ele.value;
                }
            }
            if(document.getElementById(api_id_map['Purpose_Type__c'])){
                result['Purpose_Type__c'] = document.getElementById(api_id_map['Purpose_Type__c']).value!='_\x01_'?document.getElementById(api_id_map['Purpose_Type__c']).value:'';
            }
            return result;
        }
@@ -474,10 +474,10 @@
        <div class="ptBody">
            <div class="content">
                <img src="/img/s.gif" alt="{! SobjectLabel}" class="pageTitleIcon" title="{! SobjectLabel}" />
                <h1 class="pageType">{! SobjectLabel}<apex:outputText rendered="{!isNewMode}">{!$Label.New}</apex:outputText><apex:outputText rendered="{!not(isNewMode)}">{!$Label.Edit}</apex:outputText>
                <h1 class="pageType">{! SobjectLabel}<apex:outputText rendered="{!isNewMode || isCloneMode}">{!$Label.New}</apex:outputText><apex:outputText rendered="{!not(isNewMode || isCloneMode)}">{!$Label.Edit}</apex:outputText>
                    <span class="titleSeparatingColon">:</span>
                </h1>
                <h2 class="pageDescription"> <apex:outputText rendered="{!isNewMode}">{!$Label.New}</apex:outputText><apex:outputText rendered="{!not(isNewMode)}">{!$Label.Edit}</apex:outputText>{! SobjectLabel}</h2>
                <h2 class="pageDescription"> <apex:outputText rendered="{!isNewMode || isCloneMode}">{!$Label.New}</apex:outputText><apex:outputText rendered="{!not(isNewMode || isCloneMode)}">{!$Label.Edit}</apex:outputText>{! SobjectLabel}</h2>
                <div class="blank">&nbsp;</div>
            </div>
            <div class="links">
@@ -501,7 +501,7 @@
                                <img src="/img/s.gif" alt="" class="minWidth" title="" width="1" height="1" />
                                <h2 class="mainTitle">{! SobjectLabel}<apex:outputText rendered="{!isNewMode}">{!$Label.New}</apex:outputText><apex:outputText rendered="{!not(isNewMode)}">{!$Label.Edit}</apex:outputText></h2>
                            </td>
                            <td class="pbButton" id="topButtonRow">
                            <td class="pbButton" id="topButtonRow" style="pointer-events: none; opacity: 0.4;">
                                <input class="btn" type="Button" value="{!$Label.Save}" onclick="saveSobjectProcess()" />
                                <input class="btn" type="Button" value="{!$Label.SaveAndNew}" onclick="saveSobjectProcess(1)" />
                                <apex:commandButton action="{!cancel}" value="{!$Label.Cancel}" />
@@ -523,8 +523,12 @@
                    <!--Each section has layoutFields, let's iterate them as well-->
                    <apex:repeat value="{!layoutSection.layoutFields}" var="layoutField">
                        <apex:inputField styleClass="{!ApiPrefix} {!ApiPrefix}_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!ASEActivity__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)}"
                        <apex:inputField styleClass="PIBackApi PIBackApi_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!ASEActivity__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&isNewMode}"
                            required="{!layoutField.isRequired}" />
                        <apex:inputField styleClass="PIBackApi PIBackApi_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!ASEActivity__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&not(isNewMode)&&layoutField.fieldAPI!='RecordTypeId'}"
                            required="{!layoutField.isRequired}" />
                        <apex:outputField styleClass="PIBackApi PIBackApi_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!ASEActivity__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&not(isNewMode)&&layoutField.fieldAPI=='RecordTypeId'}"
                       />
                        <apex:pageblocksectionitem rendered="{!layoutField.isPlaceHolder}">
                        </apex:pageblocksectionitem>
                    </apex:repeat>
@@ -577,6 +581,9 @@
                    //Replace Vlookup Field
                    replaceSearchContactLookup();
                    document.querySelectorAll("[data-id='OwnerId']")[0].classList.add("disabledbutton");
                    document.getElementById('topButtonRow').style = '';
                    document.getElementById('bottomButtonRow').style = '';
                    jQuery('a[data-id="OwnerId"]').remove();
                    /*
                    jQuery(".lookupInput").each(function(i,e){
@@ -634,7 +641,7 @@
                        <tr>
                            <td class="pbTitle">
                                <img src="/img/s.gif" alt="" class="minWidth" title="" width="1" height="1" />&nbsp;</td>
                            <td class="pbButtonb" id="bottomButtonRow">
                            <td class="pbButtonb" id="bottomButtonRow" style="pointer-events: none; opacity: 0.4;">
                                <input class="btn" type="Button" value="{!$Label.Save}" onclick="saveSobjectProcess()" />
                                <input class="btn" type="Button" value="{!$Label.SaveAndNew}" onclick="saveSobjectProcess()" />
                                <apex:commandButton action="{!cancel}" value="{!$Label.Cancel}" />
force-app/main/default/pages/NewAndEditAddress.page
@@ -1,10 +1,3 @@
<!--
  @description       :
  @author            : ChangeMeIn@UserSettingsUnder.SFDoc
  @group             :
  @last modified on  : 03-23-2022
  @last modified by  : ChangeMeIn@UserSettingsUnder.SFDoc
-->
<apex:page standardController="Address__c" extensions="NewAndEditAddressController" id="page">
    <apex:stylesheet value="{!URLFOR($Resource.blockUIcss)}"/>
    <apex:includeScript value="{! URLFOR($Resource.AWSService, 'AWSService.js') }" />
@@ -30,7 +23,7 @@
        var VLookUpFields = new Set(['Contacts__c', 'Province__c', 'City__c', 'Customer__c']);
        function ProcessPI(addressJson, payloadForNewPI) {
            blockme();
            if ({!isNewMode}) {
            if ({!isNewMode} || {!isCloneMode}) {
                NewPIToAWS(addressJson, payloadForNewPI)
            }else {
                UpdatePIToAWS(addressJson, payloadForNewPI)
@@ -120,7 +113,7 @@
            let nodelist = document.querySelectorAll("[data-id]");
            let result = {}
            result.RecordTypeId = '{!rtTypeId}';
            //result.RecordTypeId = '{!rtTypeId}';
            for (let index = 0; index < nodelist.length; index++) {
                if (VLookUpFields.has(nodelist[index].getAttribute("data-id"))) {
                    console.log(nodelist[index].id.indexOf('lkwgt'));
@@ -172,10 +165,14 @@
            payloadJson.Detailed_Address_Encrypted__c = r.object[0].detailedAddressEncrypt;
            //payloadJson.AWS_Data_Id__c = r.object[0].dataId;
            payloadJson.AWS_Data_Id__c = '{!AWSDataId}';
            if (isNewMode) {
            if (isNewMode || {!isCloneMode}) {
                payloadJson.AWS_Data_Id__c = r.object[0].dataId;
                delete payloadJson.OwnerId;
            } else {
                payloadJson.AWS_Data_Id__c = '{!AWSDataId}';
            }
            if('{!rtTypeId}'){
                payloadJson.RecordTypeId = '{!rtTypeId}';//Add by zhj for Record Type Issue 20220421
            }
            return payloadJson;
        }
@@ -282,7 +279,7 @@
            //1. Check account value
            let accountNodeId = document.querySelector("[data-id='Customer__c']").id + '_lkid';
            let accountValue = document.getElementById(accountNodeId).value;
            let searchContactKeyWord = document.querySelector("[data-id='Customer__c']").value;
            let searchContactKeyWord = document.querySelector("[data-id='Contacts__c']").value;
            console.log(accountValue);
            if (accountValue != '000000000000000') {
                let baseUrl = "/apex/SearchContactPage";
@@ -379,7 +376,7 @@
                                <img src="/img/s.gif" alt="" class="minWidth" title="" width="1" height="1" />
                                <h2 class="mainTitle">收货地址编辑</h2>
                            </td>
                            <td class="pbButton" id="topButtonRow">
                            <td class="pbButton" id="topButtonRow" style="pointer-events: none; opacity: 0.4;">
                                <input class="btn" type="Button" value="保存" onclick="saveAddressProcess('Save')" />
                                <input class="btn" type="Button" value="保存并新建" onclick="saveAddressProcess('SaveAndNew')" />
                                <apex:commandButton action="{!cancel}" value="取消" />
@@ -402,8 +399,12 @@
                    
                    <!--Each section has layoutFields, let's iterate them as well-->
                    <apex:repeat value="{!layoutSection.layoutFields}" var="layoutField">
                        <apex:inputField html-data-id="{!layoutField.fieldAPI}" value="{!Address__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)}"
                        <apex:inputField styleClass="PIBackApi PIBackApi_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!Address__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&isNewMode}"
                            required="{!layoutField.isRequired}" />
                        <apex:inputField styleClass="PIBackApi PIBackApi_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!Address__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&not(isNewMode)&&layoutField.fieldAPI!='RecordTypeId'}"
                            required="{!layoutField.isRequired}" />
                        <apex:outputField styleClass="PIBackApi PIBackApi_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!Address__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&not(isNewMode)&&layoutField.fieldAPI=='RecordTypeId'}"
                       />
                        <apex:pageblocksectionitem rendered="{!layoutField.isPlaceHolder}">
                        </apex:pageblocksectionitem>
                    </apex:repeat>
@@ -443,6 +444,8 @@
                    replaceSearchContactLookup();
                    //3. Set Readonly Attribute
                    // document.querySelector("[data-id='OwnerId']").classList.add("disabledbutton");
                    document.getElementById('topButtonRow').style = '';
              document.getElementById('bottomButtonRow').style = '';
                    /*
                    jQuery(".lookupInput").each(function(i,e){
                        let je =jQuery(e).find('input');
@@ -501,7 +504,7 @@
                        <tr>
                            <td class="pbTitle">
                                <img src="/img/s.gif" alt="" class="minWidth" title="" width="1" height="1" />&nbsp;</td>
                            <td class="pbButtonb" id="bottomButtonRow">
                            <td class="pbButtonb" id="bottomButtonRow" style="pointer-events: none; opacity: 0.4;">
                                <input class="btn" type="Button" value="保存" onclick="saveAddressProcess('Save')" />
                                <input class="btn" type="Button" value="保存并新建" onclick="saveAddressProcess('SaveAndNew')" />
                                <apex:commandButton action="{!cancel}" value="取消" />
force-app/main/default/pages/NewAndEditAgencyContact.page
@@ -61,10 +61,14 @@
                
                //payloadJson.AWS_Data_Id__c = r.object[0].dataId;
                payloadJson.AWS_Data_Id__c = '{!AWSDataId}';
                if (isNewMode) {
                if (isNewMode || {!isCloneMode}) {
                    payloadJson.AWS_Data_Id__c = r.object[0].dataId;
                    delete payloadJson.OwnerId;
                } else {
                    payloadJson.AWS_Data_Id__c = '{!AWSDataId}';
                }
                if('{!rtTypeId}'){
                    payloadJson.RecordTypeId = '{!rtTypeId}';//Add by zhj for Record Type Issue 20220421
                }
                return payloadJson;
            },
@@ -122,13 +126,15 @@
        }
    
        var staticResources = JSON.parse('{!staticResource}');
        var staticResourceAWSContact = JSON.parse('{!staticResourceAWSContact}');
        var requiredFieldAPIList = JSON.parse('{!requiredFieldAPIListStr}');
        var fieldAPIToLabelMap = JSON.parse('{!fieldAPIToLabelMapStr}');
        console.log('{!staticResource}');
        var VLookUpFields = {! VLookUpFieldsJson};
        function ProcessPI(sobjJson, payloadForNewPI) {
            blockme();
            if ({!isNewMode}) {
            if ({!isNewMode} || {!isCloneMode}) {
                NewPIToAWS(sobjJson, payloadForNewPI)
            }else {
                UpdatePIToAWS(sobjJson, payloadForNewPI)
@@ -418,7 +424,8 @@
            let contactsInfo = JSON.parse('{!LookUpOverrideFieldsMapJson}');
            let dataId = contactsInfo[sfId];
            
            AWSService.query(staticResourcesContact.queryUrl,dataId,function(result){
            if(dataId){
                AWSService.query(staticResourceAWSContact.queryUrl,dataId,function(result){
                if(result.object){
                    document.querySelector("[data-id='Contact__c']").value = result.object.lastName;
                }
@@ -426,15 +433,17 @@
            },staticResources.token);
        }
        }
    </script>
    <div class="bPageTitle">
        <div class="ptBody">
            <div class="content">
                <img src="/img/s.gif" alt="{! SobjectLabel}" class="pageTitleIcon" title="{! SobjectLabel}" />
                <h1 class="pageType">{! SobjectLabel}<apex:outputText rendered="{!isNewMode}">{!$Label.New}</apex:outputText><apex:outputText rendered="{!not(isNewMode)}">{!$Label.Edit}</apex:outputText>
                <h1 class="pageType">{! SobjectLabel}<apex:outputText rendered="{!isNewMode || isCloneMode}">{!$Label.New}</apex:outputText><apex:outputText rendered="{!not(isNewMode || isCloneMode)}">{!$Label.Edit}</apex:outputText>
                    <span class="titleSeparatingColon">:</span>
                </h1>
                <h2 class="pageDescription"> <apex:outputText rendered="{!isNewMode}">{!$Label.New}</apex:outputText><apex:outputText rendered="{!not(isNewMode)}">{!$Label.Edit}</apex:outputText>{! SobjectLabel}</h2>
                <h2 class="pageDescription"> <apex:outputText rendered="{!isNewMode || isCloneMode}">{!$Label.New}</apex:outputText><apex:outputText rendered="{!not(isNewMode || isCloneMode)}">{!$Label.Edit}</apex:outputText>{! SobjectLabel}</h2>
                <div class="blank">&nbsp;</div>
            </div>
            <div class="links">
@@ -456,9 +465,9 @@
                        <tr>
                            <td class="pbTitle">
                                <img src="/img/s.gif" alt="" class="minWidth" title="" width="1" height="1" />
                                <h2 class="mainTitle">{! SobjectLabel}<apex:outputText rendered="{!isNewMode}">{!$Label.New}</apex:outputText><apex:outputText rendered="{!not(isNewMode)}">{!$Label.Edit}</apex:outputText></h2>
                                <h2 class="mainTitle">{! SobjectLabel}<apex:outputText rendered="{!isNewMode || isCloneMode}">{!$Label.New}</apex:outputText><apex:outputText rendered="{!not(isNewMode || isCloneMode)}">{!$Label.Edit}</apex:outputText></h2>
                            </td>
                            <td class="pbButton" id="topButtonRow">
                            <td class="pbButton" id="topButtonRow" style="pointer-events: none; opacity: 0.4;">
                                <input class="btn" type="Button" value="{!$Label.Save}" onclick="saveSobjectProcess()" />
                                <input class="btn" type="Button" value="{!$Label.SaveAndNew}" onclick="saveSobjectProcess(1)" />
                                <apex:commandButton action="{!cancel}" value="{!$Label.Cancel}" />
@@ -480,8 +489,10 @@
                    <!--Each section has layoutFields, let's iterate them as well-->
                    <apex:repeat value="{!layoutSection.layoutFields}" var="layoutField">
                        <apex:inputField styleClass="{!ApiPrefix} {!ApiPrefix}_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!Agency_Contact__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)}"
                        <apex:inputField styleClass="{!ApiPrefix} {!ApiPrefix}_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!Agency_Contact__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&layoutField.fieldAPI!='RecordTypeId'}"
                            required="{!layoutField.isRequired}" />
                        <apex:outputField styleClass="PIBackApi PIBackApi_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!Agency_Contact__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&layoutField.fieldAPI=='RecordTypeId'}"
                        />
                        <apex:pageblocksectionitem rendered="{!layoutField.isPlaceHolder}">
                        </apex:pageblocksectionitem>
                    </apex:repeat>
@@ -532,6 +543,8 @@
                    }
                    jQuery('a[data-id="OwnerId"]').remove();
                    document.getElementById('topButtonRow').style = '';
                    document.getElementById('bottomButtonRow').style = '';
                    /*
                    jQuery(".lookupInput").each(function(i,e){
                        let je =jQuery(e).find('input');
@@ -600,7 +613,7 @@
                        <tr>
                            <td class="pbTitle">
                                <img src="/img/s.gif" alt="" class="minWidth" title="" width="1" height="1" />&nbsp;</td>
                            <td class="pbButtonb" id="bottomButtonRow">
                            <td class="pbButtonb" id="bottomButtonRow" style="pointer-events: none; opacity: 0.4;">
                                <input class="btn" type="Button" value="{!$Label.Save}" onclick="saveSobjectProcess()" />
                                <input class="btn" type="Button" value="{!$Label.SaveAndNew}" onclick="saveSobjectProcess()" />
                                <apex:commandButton action="{!cancel}" value="{!$Label.Cancel}" />
force-app/main/default/pages/NewAndEditCampaignMember.page
@@ -61,6 +61,9 @@
                } else {
                    payloadJson.AWS_Data_Id__c = '{!AWSDataId}';
                }
                if('{!rtTypeId}'){
                    payloadJson.RecordTypeId = '{!rtTypeId}';//Add by zhj for Record Type Issue 20220421
                }
                return payloadJson;
            },
            queryBack:function (data) {
@@ -145,18 +148,18 @@
        function validateFieldValueFormate() {
            let error_msg = '';
            let textEmail = "[data-id='Email']";
            let textPhone = "[data-id='Phone']";
            //Email
            let email = document.querySelector(textEmail);
            if(email && !/^[\w-]{3,12}@[\da-zA-Z]{2,16}\.[a-zA-Z]+$/.test(email.value)){
                error_msg += ';邮件格式错误';
            }
            let phone = document.querySelector(textPhone);
            // let textEmail = "[data-id='Email']";
            // let textPhone = "[data-id='Phone']";
            // //Email
            // let email = document.querySelector(textEmail);
            // if(email && !/^[\w-]{3,12}@[\da-zA-Z]{2,16}\.[a-zA-Z]+$/.test(email.value)){
            //     error_msg += ';邮件格式错误';
            // }
            // let phone = document.querySelector(textPhone);
            if(phone && !/^1[3|5|8|7][0-9]\d{4,8}$/.test(phone.value)){
                error_msg += ';电话号码错误';
            }
            // if(phone && !/^1[3|5|8|7][0-9]\d{4,8}$/.test(phone.value)){
            //     error_msg += ';电话号码错误';
            // }
            for(let e of document.getElementsByTagName('select')){
                for(let op of e.options){
@@ -359,7 +362,7 @@
                                <img src="/img/s.gif" alt="" class="minWidth" title="" width="1" height="1" />
                                <h2 class="mainTitle">{! SobjectLabel}<apex:outputText rendered="{!isNewMode}">{!$Label.New}</apex:outputText><apex:outputText rendered="{!not(isNewMode)}">{!$Label.Edit}</apex:outputText></h2>
                            </td>
                            <td class="pbButton" id="topButtonRow">
                            <td class="pbButton" id="topButtonRow" style="pointer-events: none; opacity: 0.4;">
                                <input class="btn" type="Button" value="{!$Label.Save}" onclick="saveSobjectProcess()" />
                                <input class="btn" type="Button" value="{!$Label.SaveAndNew}" onclick="saveSobjectProcess(1)" />
                                <apex:commandButton action="{!cancel}" value="{!$Label.Cancel}" />
@@ -381,8 +384,12 @@
                    <!--Each section has layoutFields, let's iterate them as well-->
                    <apex:repeat value="{!layoutSection.layoutFields}" var="layoutField">
                        <apex:inputField styleClass="{!ApiPrefix} {!ApiPrefix}_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!CampaignMember__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)}"
                        <apex:inputField styleClass="PIBackApi PIBackApi_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!CampaignMember__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&isNewMode}"
                            required="{!layoutField.isRequired}" />
                        <apex:inputField styleClass="PIBackApi PIBackApi_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!CampaignMember__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&not(isNewMode)&&layoutField.fieldAPI!='RecordTypeId'}"
                            required="{!layoutField.isRequired}" />
                        <apex:outputField styleClass="PIBackApi PIBackApi_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!CampaignMember__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&not(isNewMode)&&layoutField.fieldAPI=='RecordTypeId'}"
                       />
                        <apex:pageblocksectionitem rendered="{!layoutField.isPlaceHolder}">
                        </apex:pageblocksectionitem>
                    </apex:repeat>
@@ -398,6 +405,9 @@
                    if (!{!isNewMode}) {
                        QuerySobjectFromAWS();
                    }   
                    document.getElementById('topButtonRow').style = '';
                document.getElementById('bottomButtonRow').style = '';
                });
            </script>
            <div class="pbBottomButtons">
@@ -406,7 +416,7 @@
                        <tr>
                            <td class="pbTitle">
                                <img src="/img/s.gif" alt="" class="minWidth" title="" width="1" height="1" />&nbsp;</td>
                            <td class="pbButtonb" id="bottomButtonRow">
                            <td class="pbButtonb" id="bottomButtonRow" style="pointer-events: none; opacity: 0.4;">
                                <input class="btn" type="Button" value="{!$Label.Save}" onclick="saveSobjectProcess()" />
                                <input class="btn" type="Button" value="{!$Label.SaveAndNew}" onclick="saveSobjectProcess()" />
                                <apex:commandButton action="{!cancel}" value="{!$Label.Cancel}" />
force-app/main/default/pages/NewAndEditCase.page
@@ -24,7 +24,7 @@
        //判断insert or update
        function ProcessPI(caseJson, payloadForNewPI) {
            blockme();
            if ({!isNewMode}) {
            if ({!isNewMode} || {!isCloneMode}) {
                NewPIToAWS(caseJson, payloadForNewPI)
            }else {
                UpdatePIToAWS(caseJson, payloadForNewPI)
@@ -121,6 +121,9 @@
                    console.log(nodelist[index].id.indexOf('lkwgt'));
                    if (nodelist[index].id.indexOf('lkwgt') == -1) {
                        let vlookUpNodeId = nodelist[index].id + '_lkid';
                        if (nodelist[index].getAttribute("data-id") == 'Field1_staff__c') {
                            vlookUpNodeId = nodelist[index].id.substring(0,nodelist[index].id.length-4) + '_lkid';
                        }
                        let vlookUpNodeValue = document.getElementById(vlookUpNodeId).value;
                        result[nodelist[index].getAttribute("data-id")] = vlookUpNodeValue;
                    }
@@ -141,12 +144,6 @@
                    index++;
                }
            }
            //针对id的手动添加
            if (document.getElementById("page:form:block:j_id31:0:j_id32:j_id33:1:j_id34_lkid") && (!result.hasOwnProperty("Field1_staff__c") || !result["Field1_staff__c"])){
                if(document.getElementById("page:form:block:j_id31:0:j_id32:j_id33:1:j_id34_lkid").value != '000000000000000'){
                    result["Field1_staff__c"] = document.getElementById("page:form:block:j_id31:0:j_id32:j_id33:1:j_id34_lkid").value;
                }
            }
            
            return result;
        }
@@ -157,9 +154,15 @@
        //需要解密字段
        var queryBack = function queryBack(data) {
            console.log('data = ' + data);
            if (document.querySelector("[data-id='cic_telephone__c']")) {
            document.querySelector("[data-id='cic_telephone__c']").value = data.object.cicTelephone;
            }
            if (document.querySelector("[data-id='CASE_CUSTOMER__c']")) {
            document.querySelector("[data-id='CASE_CUSTOMER__c']").value = data.object.caseCustomer;
            }
            if (document.querySelector("[data-id='Customer_manual__c']")) {
            document.querySelector("[data-id='Customer_manual__c']").value = data.object.customerManual;
            }
        };
        var insertOrUpdateBack = function insertOrUpdateBack(payloadJson, result, isNewMode) {
@@ -175,10 +178,13 @@
            payloadJson.Customer_manual_Encrypted__c = r.object[0].customerManualEncrypt;
            //payloadJson.AWS_Data_Id__c = r.object[0].dataId;
            payloadJson.AWS_Data_Id__c = '{!AWSDataId}';
            if (isNewMode) {
            if (isNewMode || {!isCloneMode}) {
                payloadJson.AWS_Data_Id__c = r.object[0].dataId;
            } else {
                payloadJson.AWS_Data_Id__c = '{!AWSDataId}';
            }
            if('{!rtTypeId}'){
                payloadJson.RecordTypeId = '{!rtTypeId}';//Add by zhj for Record Type Issue 20220421
            }
            return payloadJson;
        }
@@ -240,6 +246,7 @@
            //1. Get Case Information from Form
            let caseJson = getCaseInformation();
            //2. Validate the Case field value formate, for example the email formate or phone formate
            /*
            let validationResultMessage = validateFieldValueFormate();
            console.log(validationResultMessage);
            if (!validationResultMessage) {
@@ -248,6 +255,7 @@
                alertErrorMessage('手机格式输入有误,请重新输入!');
                return
            }
            */
            // Check Required Field
            let checkRequiredFieldMsgResult = checkRequiredFieldMsg(caseJson);
            if (checkRequiredFieldMsgResult) {
@@ -390,7 +398,7 @@
                                <img src="/img/s.gif" alt="" class="minWidth" title="" width="1" height="1" />
                                <h2 class="mainTitle">CIC编辑</h2>
                            </td>
                            <td class="pbButton" id="topButtonRow">
                            <td class="pbButton" id="topButtonRow" style="pointer-events: none; opacity: 0.4;">
                                <input class="btn" type="Button" value="保存" onclick="saveCaseProcess('Save')" />
                                <input class="btn" type="Button" value="保存并关闭" onclick="saveCaseProcess('SaveAndClose')" />
                                <input class="btn" type="Button" value="保存并新建" onclick="saveCaseProcess('SaveAndNew')" />
@@ -412,8 +420,10 @@
                <apex:pageBlockSection title="{!layoutSection.name}" showHeader="{!layoutSection.useHeader}" collapsible="{!layoutSection.allowCollapse}" columns="{!layoutSection.columns}">
                    <!--Each section has layoutFields, let's iterate them as well-->
                    <apex:repeat value="{!layoutSection.layoutFields}" var="layoutField">
                        <apex:inputField html-data-id="{!layoutField.fieldAPI}" value="{!Case[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)}"
                            required="{!layoutField.isRequired}" />
                        <apex:inputField html-data-id="{!layoutField.fieldAPI}" value="{!Case[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&isNewMode}" required="{!layoutField.isRequired}" />
                        <apex:inputField html-data-id="{!layoutField.fieldAPI}" value="{!Case[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&not(isNewMode)&&layoutField.fieldAPI!='RecordTypeId'}" required="{!layoutField.isRequired}" />
                        <apex:outputField html-data-id="{!layoutField.fieldAPI}" value="{!Case[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&not(isNewMode)&&layoutField.fieldAPI=='RecordTypeId'}"  />
                        <apex:pageblocksectionitem rendered="{!layoutField.isPlaceHolder}">
                        </apex:pageblocksectionitem>
                    </apex:repeat>
@@ -427,7 +437,19 @@
                        for (let n = 0; n < layoutSection.length; n++) {
                            let layoutField = layoutSection[n];
                            if (layoutField.fieldAPI != '' && document.querySelector("[data-id='"+layoutField.fieldAPI+"']") != null) {
                                document.querySelector("[data-id='"+layoutField.fieldAPI+"']").disabled = !(layoutField.editableField);
                                let e = document.querySelector("[data-id='"+layoutField.fieldAPI+"']");
                                e.disabled = !(layoutField.editableField);
                                /*
                                if (!(layoutField.editableField)) {
                                    if (e.getAttribute("multiple") && e.getAttribute("multiple") == 'multiple') {
                                        e.parentNode.classList.add("disabledbutton");
                                    }else if (e.tagName == 'DIV') {
                                        e.classList.add("disabledbutton");
                                    }else if (VLookUpFields.indexOf(layoutField.fieldAPI) >= 0) {
                                        e.parentNode.classList.add("disabledbutton");
                                    }
                                }
                                */
                            }
                        }
                    }
@@ -445,6 +467,9 @@
                    //3. Set Readonly Attribute
                    document.querySelector("[data-id='OwnerId']").classList.add("disabledbutton");
                    document.querySelector("[data-id='RecordTypeId']").classList.add("disabledbutton");
                    document.getElementById('topButtonRow').style = '';
                    document.getElementById('bottomButtonRow').style = '';
                    //需要隐藏
                    // document.querySelector("[data-id='SuppliedEmail']").classList.add("displayblock");
                    
@@ -504,7 +529,7 @@
                        <tr>
                            <td class="pbTitle">
                                <img src="/img/s.gif" alt="" class="minWidth" title="" width="1" height="1" />&nbsp;</td>
                            <td class="pbButton" id="bottomButtonRow">
                            <td class="pbButton" id="bottomButtonRow" style="pointer-events: none; opacity: 0.4;">
                                <input class="btn" type="Button" value="保存" onclick="saveCaseProcess('Save')" />
                                <input class="btn" type="Button" value="保存并关闭" onclick="saveCaseProcess('SaveAndClose')" />
                                <input class="btn" type="Button" value="保存并新建" onclick="saveCaseProcess('SaveAndNew')" />
force-app/main/default/pages/NewAndEditContact.page
@@ -61,8 +61,9 @@
                
                //payloadJson.AWS_Data_Id__c = r.object[0].dataId;
                payloadJson.AWS_Data_Id__c = '{!AWSDataId}';
                if (isNewMode) {
                if (isNewMode || {!isCloneMode}) {
                    payloadJson.AWS_Data_Id__c = r.object[0].dataId;
                    delete payloadJson.OwnerId;
                } else {
                    payloadJson.AWS_Data_Id__c = '{!AWSDataId}';
                }
@@ -134,7 +135,7 @@
        var VLookUpFields = {! VLookUpFieldsJson};
        function ProcessPI(sobjJson, payloadForNewPI) {
            blockme();
            if ({!isNewMode}) {
            if ({!isNewMode} || {!isCloneMode}) {
                NewPIToAWS(sobjJson, payloadForNewPI)
            }else {
                UpdatePIToAWS(sobjJson, payloadForNewPI)
@@ -174,34 +175,34 @@
        function validateFieldValueFormate() {
            let error_msg = '';
            let textEmail = "[data-id='Email']";
            let textPhone = "[data-id='Phone']";
            //Email
            let email = document.querySelector(textEmail);
            if(email ){
                if(email.value){
                    if(!/^[\w-]{3,12}@[\da-zA-Z]{2,16}\.[a-zA-Z]+$/.test(email.value)){
                        error_msg += ';邮件格式错误';
                    }
                }else{
                    if(email.previousSibling && email.previousSibling.className.indexOf('requiredBlock')>-1){
                        error_msg += ';邮件格式错误';
                    }
                }
            }
            let phone = document.querySelector(textPhone);
            // let textEmail = "[data-id='Email']";
            // let textPhone = "[data-id='Phone']";
            // //Email
            // let email = document.querySelector(textEmail);
            // if(email ){
            //     if(email.value){
            //         if(!/^[\w-]{3,12}@[\da-zA-Z]{2,16}\.[a-zA-Z]+$/.test(email.value)){
            //             error_msg += ';邮件格式错误';
            //         }
            //     }else{
            //         if(email.previousSibling && email.previousSibling.className.indexOf('requiredBlock')>-1){
            //             error_msg += ';邮件格式错误';
            //         }
            //     }
            // }
            // let phone = document.querySelector(textPhone);
            if(phone && false ){
                if(phone.value){
                    if(!/^1[3|5|8|7][0-9]\d{4,8}$/.test(phone.value)){
                        error_msg += ';电话号码错误';
                    }
                }else{
                    if(phone.previousSibling && phone.previousSibling.className.indexOf('requiredBlock')>-1){
                        error_msg += ';电话号码错误';
                    }
                }
            }
            // if(phone && false ){
            //     if(phone.value){
            //         if(!/^1[3|5|8|7][0-9]\d{4,8}$/.test(phone.value)){
            //             error_msg += ';电话号码错误';
            //         }
            //     }else{
            //         if(phone.previousSibling && phone.previousSibling.className.indexOf('requiredBlock')>-1){
            //             error_msg += ';电话号码错误';
            //         }
            //     }
            // }
            let es = document.getElementsByTagName('select')
            for(let ei in es){
@@ -388,10 +389,10 @@
        <div class="ptBody">
            <div class="content">
                <img src="/img/s.gif" alt="{! SobjectLabel}" class="pageTitleIcon" title="{! SobjectLabel}" />
                <h1 class="pageType">{! SobjectLabel}<apex:outputText rendered="{!isNewMode}">{!$Label.New}</apex:outputText><apex:outputText rendered="{!not(isNewMode)}">{!$Label.Edit}</apex:outputText>
                <h1 class="pageType">{! SobjectLabel}<apex:outputText rendered="{!isNewMode || isCloneMode}">{!$Label.New}</apex:outputText><apex:outputText rendered="{!not(isNewMode || isCloneMode)}">{!$Label.Edit}</apex:outputText>
                    <span class="titleSeparatingColon">:</span>
                </h1>
                <h2 class="pageDescription"> <apex:outputText rendered="{!isNewMode}">{!$Label.New}</apex:outputText><apex:outputText rendered="{!not(isNewMode)}">{!$Label.Edit}</apex:outputText>{! SobjectLabel}</h2>
                <h2 class="pageDescription"> <apex:outputText rendered="{!isNewMode || isCloneMode}">{!$Label.New}</apex:outputText><apex:outputText rendered="{!not(isNewMode || isCloneMode)}">{!$Label.Edit}</apex:outputText>{! SobjectLabel}</h2>
                <div class="blank">&nbsp;</div>
            </div>
            <div class="links">
@@ -413,9 +414,9 @@
                        <tr>
                            <td class="pbTitle">
                                <img src="/img/s.gif" alt="" class="minWidth" title="" width="1" height="1" />
                                <h2 class="mainTitle">{! SobjectLabel}<apex:outputText rendered="{!isNewMode}">{!$Label.New}</apex:outputText><apex:outputText rendered="{!not(isNewMode)}">{!$Label.Edit}</apex:outputText></h2>
                                <h2 class="mainTitle">{! SobjectLabel}<apex:outputText rendered="{!isNewMode || isCloneMode}">{!$Label.New}</apex:outputText><apex:outputText rendered="{!not(isNewMode || isCloneMode)}">{!$Label.Edit}</apex:outputText></h2>
                            </td>
                            <td class="pbButton" id="topButtonRow">
                            <td class="pbButton" id="topButtonRow" style="pointer-events: none; opacity: 0.4;">
                                <input class="btn" type="Button" value="{!$Label.Save}" onclick="saveSobjectProcess()" />
                                <input class="btn" type="Button" value="{!$Label.SaveAndNew}" onclick="saveSobjectProcess(1)" />
                                <apex:commandButton action="{!cancel}" value="{!$Label.Cancel}" />
@@ -437,8 +438,9 @@
                    
                    <!--Each section has layoutFields, let's iterate them as well-->
                    <apex:repeat value="{!layoutSection.layoutFields}" var="layoutField">
                        <apex:inputField styleClass="{!ApiPrefix} {!ApiPrefix}_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!Contact[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)}"
                                         required="{!layoutField.isRequired}" />
                        <apex:inputField styleClass="{!ApiPrefix} {!ApiPrefix}_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!Contact[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&isNewMode}" required="{!layoutField.isRequired}" />
                        <apex:inputField styleClass="{!ApiPrefix} {!ApiPrefix}_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!Contact[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&not(isNewMode)&&layoutField.fieldAPI!='RecordTypeId'}" required="{!layoutField.isRequired}" />
                        <apex:outputField styleClass="{!ApiPrefix} {!ApiPrefix}_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!Contact[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&not(isNewMode)&&layoutField.fieldAPI=='RecordTypeId'}" />
                        <apex:pageblocksectionitem rendered="{!layoutField.isPlaceHolder}">
                        </apex:pageblocksectionitem>
                    </apex:repeat>
@@ -486,38 +488,10 @@
                        oi.value = '{!CurrentUserId}'
                    }
                }
                document.getElementById('topButtonRow').style = '';
           document.getElementById('bottomButtonRow').style = '';
                jQuery('a[data-id="OwnerId"]').remove();
                /*
                jQuery(".lookupInput").each(function(i,e){
                    let je =jQuery(e).find('input');
                    je.attr("readonly","");
                    je.css("background","unset");
                    let dataid = je.attr('data-id');
                    if(['Hospital_Name__c','Department_Class__c','OwnerId'].indexOf(dataid) > -1) return;
                    jQuery(e).children(":last-child").before('<img class="closeIcon" data-id="'+dataid+'" generate="" alt="Clear" src="/s.gif" style="display: inline-block;">');
                })
                jQuery(".lookupInput").on("mouseenter","img[generate]",function(e){
                    this.className = "closeIconOn";
                });
                jQuery(".lookupInput").on("mouseleave","img[generate]",function(e){
                    this.className = "closeIcon"
                });
                jQuery(".lookupInput").on("click","img[generate]",function(e){
                    let id = jQuery("input[data-id='"+jQuery(this).attr("data-id")+ "']").attr("id");
                    let input = document.getElementById(id);
                    if(input){
                        input.value = '';
                        let hidden = document.getElementById(id+'_lkid');
                        if(hidden){
                            hidden.value = '';
                        }
                    }
                });*/
                var layoutSections = JSON.parse('{!layoutSectionsStr}');
                for (let m = 0; m < layoutSections.length; m++) {
@@ -538,7 +512,7 @@
                        <tr>
                            <td class="pbTitle">
                                <img src="/img/s.gif" alt="" class="minWidth" title="" width="1" height="1" />&nbsp;</td>
                            <td class="pbButtonb" id="bottomButtonRow">
                            <td class="pbButtonb" id="bottomButtonRow" style="pointer-events: none; opacity: 0.4;">
                                <input class="btn" type="Button" value="{!$Label.Save}" onclick="saveSobjectProcess()" />
                                <input class="btn" type="Button" value="{!$Label.SaveAndNew}" onclick="saveSobjectProcess()" />
                                <apex:commandButton action="{!cancel}" value="{!$Label.Cancel}" />
force-app/main/default/pages/NewAndEditInquiryForm.page
@@ -63,10 +63,14 @@
                
                //payloadJson.AWS_Data_Id__c = r.object[0].dataId;
                payloadJson.AWS_Data_Id__c = '{!AWSDataId}';
                if (isNewMode) {
                if (isNewMode || {!isCloneMode}) {
                    payloadJson.AWS_Data_Id__c = r.object[0].dataId;
                    delete payloadJson.OwnerId;
                } else {
                    payloadJson.AWS_Data_Id__c = '{!AWSDataId}';
                }
                if('{!rtTypeId}'){
                    payloadJson.RecordTypeId = '{!rtTypeId}';//Add by zhj for Record Type Issue 20220421
                }
                return payloadJson;
            },
@@ -128,7 +132,7 @@
        var VLookUpFields = {! VLookUpFieldsJson};
        function ProcessPI(sobjJson, payloadForNewPI) {
            blockme();
            if ({!isNewMode}) {
            if ({!isNewMode} || {!isCloneMode}) {
                NewPIToAWS(sobjJson, payloadForNewPI)
            }else {
                UpdatePIToAWS(sobjJson, payloadForNewPI)
@@ -161,22 +165,22 @@
        function validateFieldValueFormate() {
            let error_msg = '';
            let textEmail = "[data-id='Email__c']";
            let textPhone = "[data-id='Phone__c']";
            if (document.querySelector("[data-id='Email__c']").value != "" && document.querySelector("[data-id='Email__c']").value != null) {
                //Email
                let email = document.querySelector(textEmail);
                if(email && !/^[\w-]{3,12}@[\da-zA-Z]{2,16}\.[a-zA-Z]+$/.test(email.value)){
                    error_msg += ';邮件格式错误';
                }
            }
            // let textEmail = "[data-id='Email__c']";
            // let textPhone = "[data-id='Phone__c']";
            // if (document.querySelector("[data-id='Email__c']").value != "" && document.querySelector("[data-id='Email__c']").value != null) {
            //     //Email
            //     let email = document.querySelector(textEmail);
            //     if(email && !/^[\w-]{3,12}@[\da-zA-Z]{2,16}\.[a-zA-Z]+$/.test(email.value)){
            //         error_msg += ';邮件格式错误';
            //     }
            // }
            if (document.querySelector("[data-id='Phone__c']").value != "" && document.querySelector("[data-id='Phone__c']").value != null) {
                let phone = document.querySelector(textPhone);
                if(phone && !/^1[3|5|8|7][0-9]\d{4,8}$/.test(phone.value)){
                    error_msg += ';电话号码错误';
                }
            }
            // if (document.querySelector("[data-id='Phone__c']").value != "" && document.querySelector("[data-id='Phone__c']").value != null) {
            //     let phone = document.querySelector(textPhone);
            //     if(phone && !/^1[3|5|8|7][0-9]\d{4,8}$/.test(phone.value)){
            //         error_msg += ';电话号码错误';
            //     }
            // }
            
            for(let ei in document.getElementsByTagName('select')){
                let e = document.getElementsByTagName('select')[ei];
@@ -228,20 +232,26 @@
                } else if (ele.type == 'checkbox') {
                    result[field_api_name] = ele.checked;
                } else if (ele.type == 'select-multiple') {
                    //field_api_name
                    let multiple = field_api_name;
                    let targets = "";
                    //InquiryForm特殊处理
                    if(multiple == "Product1__c"){
                        targets = GetEleByClass(config.ApiPrefix+'_'+field_api_name).parentNode.children[1].rows[1].cells[2].innerText;
                    }else if(multiple == "Request1__c"){
                        targets = GetEleByClass(config.ApiPrefix+'_'+field_api_name).parentNode.children[2].rows[1].cells[2].innerText;
                    }else{
                        targets = GetEleByClass(config.ApiPrefix+'_'+field_api_name).parentNode.children[1].children[0].children[1].children[2].children[0].innerText;
                    //After Update By zhj 20220411 Start
                    let multiple = nodelist[index].getAttribute("data-id");
                    let targets = document.querySelector("[data-id=" + multiple + "]").options;
                    let selValues = [];
                    for(i=0; i < targets.length; i++){
                        if(targets[i].selected){
                            selValues.push(targets[i].value);
                    }
                    targets = targets.replace(/\n/g, ";");
                    console.log('targets = ' + targets);
                    result[field_api_name] = targets;
                    }
                    let setValuesStr = JSON.stringify(selValues);
                    setValuesStr = setValuesStr.substring(1,setValuesStr.length-1);
                    if(setValuesStr){
                        setValuesStr = setValuesStr.replace(/"/g,"");
                        if(setValuesStr.indexOf(',')!=-1){
                            setValuesStr = setValuesStr.replace(/,/g,";");
                        }
                    }
                    console.log('targets = ' + setValuesStr);
                    result[nodelist[index].getAttribute("data-id")] = setValuesStr;
                    //After Update By zhj 20220411 end
                } else {
                    result[field_api_name] = ele.value;
                }
@@ -415,7 +425,7 @@
        function replaceSearchContactLookup() {
            let lookUpNode = htmlToElement(contactHtmlString);
            console.log(lookUpNode);
            let eleContactValue = document.querySelector("[data-id='Contact_Name__c']").parentNode.parentNode.children[1].value;
            let eleContactValue = document.querySelector("[data-id='Contact_Name__c']").parentNode.parentNode.children[0].value;
            if (eleContactValue) {
                if (!{!isNewMode} || (eleContactValue != '000000000000000')) {
                    //1. Query Contact from AWS by AWSDataId
@@ -521,10 +531,10 @@
        <div class="ptBody">
            <div class="content">
                <img src="/img/s.gif" alt="{! SobjectLabel}" class="pageTitleIcon" title="{! SobjectLabel}" />
                <h1 class="pageType">{! SobjectLabel}<apex:outputText rendered="{!isNewMode}">{!$Label.New}</apex:outputText><apex:outputText rendered="{!not(isNewMode)}">{!$Label.Edit}</apex:outputText>
                <h1 class="pageType">{! SobjectLabel}<apex:outputText rendered="{!isNewMode || isCloneMode}">{!$Label.New}</apex:outputText><apex:outputText rendered="{!not(isNewMode || isCloneMode)}">{!$Label.Edit}</apex:outputText>
                    <span class="titleSeparatingColon">:</span>
                </h1>
                <h2 class="pageDescription"> <apex:outputText rendered="{!isNewMode}">{!$Label.New}</apex:outputText><apex:outputText rendered="{!not(isNewMode)}">{!$Label.Edit}</apex:outputText>{! SobjectLabel}</h2>
                <h2 class="pageDescription"> <apex:outputText rendered="{!isNewMode || isCloneMode}">{!$Label.New}</apex:outputText><apex:outputText rendered="{!not(isNewMode || isCloneMode)}">{!$Label.Edit}</apex:outputText>{! SobjectLabel}</h2>
                <div class="blank">&nbsp;</div>
            </div>
            <div class="links">
@@ -547,9 +557,9 @@
                        <tr>
                            <td class="pbTitle">
                                <img src="/img/s.gif" alt="" class="minWidth" title="" width="1" height="1" />
                                <h2 class="mainTitle">{! SobjectLabel}<apex:outputText rendered="{!isNewMode}">{!$Label.New}</apex:outputText><apex:outputText rendered="{!not(isNewMode)}">{!$Label.Edit}</apex:outputText></h2>
                                <h2 class="mainTitle">{! SobjectLabel}<apex:outputText rendered="{!isNewMode || isCloneMode}">{!$Label.New}</apex:outputText><apex:outputText rendered="{!not(isNewMode || isCloneMode)}">{!$Label.Edit}</apex:outputText></h2>
                            </td>
                            <td class="pbButton" id="topButtonRow">
                            <td class="pbButton" id="topButtonRow" style="pointer-events: none; opacity: 0.4;">
                                <input class="btn" type="Button" value="{!$Label.Save}" onclick="saveSobjectProcess()" />
                                <input class="btn" type="Button" value="{!$Label.SaveAndNew}" onclick="saveSobjectProcess(1)" />
                                <apex:commandButton action="{!cancel}" value="{!$Label.Cancel}" />
@@ -571,8 +581,9 @@
                    <!--Each section has layoutFields, let's iterate them as well-->
                    <apex:repeat value="{!layoutSection.layoutFields}" var="layoutField">
                        <apex:inputField styleClass="{!ApiPrefix} {!ApiPrefix}_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!Inquiry_form__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)}"
                            required="{!layoutField.isRequired}" />
                        <apex:inputField styleClass="{!ApiPrefix} {!ApiPrefix}_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!Inquiry_form__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&isNewMode}"  required="{!layoutField.isRequired}" />
                        <apex:inputField styleClass="{!ApiPrefix} {!ApiPrefix}_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!Inquiry_form__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&not(isNewMode)&&layoutField.fieldAPI!='RecordTypeId'}"  required="{!layoutField.isRequired}" />
                        <apex:outputField styleClass="{!ApiPrefix} {!ApiPrefix}_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!Inquiry_form__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&not(isNewMode)&&layoutField.fieldAPI=='RecordTypeId'}"  />
                        <apex:pageblocksectionitem rendered="{!layoutField.isPlaceHolder}">
                        </apex:pageblocksectionitem>
                    </apex:repeat>
@@ -639,7 +650,8 @@
                    replaceSearchLeadLookup(); 
                    document.querySelectorAll("[data-id='OwnerId']")[0].classList.add("disabledbutton");
                    // document.querySelectorAll("[data-id='OwnerId']")[1].classList.add("disabledbutton");
                    document.getElementById('topButtonRow').style = '';
                    document.getElementById('bottomButtonRow').style = '';
                    jQuery('a[data-id="OwnerId"]').remove();
                    //Updated by Li Jun 20220322 Start
@@ -683,13 +695,6 @@
                        })
                    })
                    // jQuery(".lookupInput").on("click","img.closeIconOn",function(){
                    //     if (jQuery(this).siblings("input").attr("data-id") == 'Hospital_Name__c'){
                    //         clearVlookup('Department_Class__c');
                    //         clearVlookup('Hospital__c');
                    //     }
                    // });
                    jQuery("body").on("change","input[data-id='Hospital_Name__c']",function(){
                        setTimeout(() => {
                            console.log(document.getElementById(this.id+'_lkid').value);
@@ -714,7 +719,7 @@
                        JSON.stringify(lookups), lookup_id,
                        function (result, event) {
                            console.log("result = " + result);
                            if (result != null ){
                            if (result != null && result != '{}'){
                                var obj = JSON.parse(result.replaceAll('&'+'quot;','"'));
                                for (let i = 0; i < lookups.length; i++) {
                                    let lookup = lookups[i];
@@ -737,6 +742,9 @@
                                    }
                                }
                            }else {
                                clearVlookup('Department_Class__c');
                                clearVlookup('Hospital__c');
                            }
                        },
                        { escape: true }
@@ -766,7 +774,7 @@
                        <tr>
                            <td class="pbTitle">
                                <img src="/img/s.gif" alt="" class="minWidth" title="" width="1" height="1" />&nbsp;</td>
                            <td class="pbButtonb" id="bottomButtonRow">
                            <td class="pbButtonb" id="bottomButtonRow" style="pointer-events: none; opacity: 0.4;">
                                <input class="btn" type="Button" value="{!$Label.Save}" onclick="saveSobjectProcess()" />
                                <input class="btn" type="Button" value="{!$Label.SaveAndNew}" onclick="saveSobjectProcess()" />
                                <apex:commandButton action="{!cancel}" value="{!$Label.Cancel}" />
force-app/main/default/pages/NewAndEditInspectionReport.page
@@ -57,10 +57,14 @@
                
                //payloadJson.AWS_Data_Id__c = r.object[0].dataId;
                payloadJson.AWS_Data_Id__c = '{!AWSDataId}';
                if (isNewMode) {
                if (isNewMode || {!isCloneMode}) {
                    payloadJson.AWS_Data_Id__c = r.object[0].dataId;
                    delete payloadJson.OwnerId;
                } else {
                    payloadJson.AWS_Data_Id__c = '{!AWSDataId}';
                }
                if('{!rtTypeId}'){
                    payloadJson.RecordTypeId = '{!rtTypeId}';//Add by zhj for Record Type Issue 20220421
                }
                return payloadJson;
            },
@@ -120,7 +124,7 @@
        var VLookUpFields = {! VLookUpFieldsJson};
        function ProcessPI(sobjJson, payloadForNewPI) {
            blockme();
            if ({!isNewMode}) {
            if ({!isNewMode} || {!isCloneMode}) {
                NewPIToAWS(sobjJson, payloadForNewPI)
            }else {
                UpdatePIToAWS(sobjJson, payloadForNewPI)
@@ -159,18 +163,18 @@
        function validateFieldValueFormate() {
            let error_msg = '';
            let textEmail = "[data-id='Email']";
            let textPhone = "[data-id='Phone']";
            //Email
            let email = document.querySelector(textEmail);
            if(email && !/^[\w-]{3,12}@[\da-zA-Z]{2,16}\.[a-zA-Z]+$/.test(email.value)){
                error_msg += ';邮件格式错误';
            }
            let phone = document.querySelector(textPhone);
            // let textEmail = "[data-id='Email']";
            // let textPhone = "[data-id='Phone']";
            // //Email
            // let email = document.querySelector(textEmail);
            // if(email && !/^[\w-]{3,12}@[\da-zA-Z]{2,16}\.[a-zA-Z]+$/.test(email.value)){
            //     error_msg += ';邮件格式错误';
            // }
            // let phone = document.querySelector(textPhone);
            if(phone && !/^1[3|5|8|7][0-9]\d{4,8}$/.test(phone.value)){
                error_msg += ';电话号码错误';
            }
            // if(phone && !/^1[3|5|8|7][0-9]\d{4,8}$/.test(phone.value)){
            //     error_msg += ';电话号码错误';
            // }
            for(let e of document.getElementsByTagName('select')){
                for(let op of e.options){
@@ -186,7 +190,14 @@
            return error_msg;
        }
        function getCKEinstance(api_name){
            let t = jQuery("label[for$='textAreaDelegate_"+api_name+"']").parent().next().find("textarea")[0];
            if(t && t.id){
                return CKEDITOR.instances[t.id]
            }
            return null;
        }
        function getSobjectInformation() {
            let nodelist = document.getElementsByClassName(config.ApiPrefix);
@@ -235,8 +246,9 @@
            }
             //赋值富文本区域
            //科室负责人签字
            if(document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id51:0:j_id52:j_id53:5:j_id54:textAreaDelegate_ResponsiblePerson_Sign__c']")){
                result.ResponsiblePerson_Sign__c = document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id51:0:j_id52:j_id53:5:j_id54:textAreaDelegate_ResponsiblePerson_Sign__c']").contentWindow.document.getElementsByTagName('body')[0].innerHTML
            if(getCKEinstance('ResponsiblePerson_Sign__c')){
                result.ResponsiblePerson_Sign__c = getCKEinstance('ResponsiblePerson_Sign__c').getData()
            }
            if(document.querySelector("[data-id='Reporter__c']")){
                result['Reporter__c'] = document.getElementById(document.querySelector("[data-id='Reporter__c']").children[7].children[0].id + '_lkid').value;
@@ -361,10 +373,10 @@
        <div class="ptBody">
            <div class="content">
                <img src="/img/s.gif" alt="{! SobjectLabel}" class="pageTitleIcon" title="{! SobjectLabel}" />
                <h1 class="pageType">{! SobjectLabel}<apex:outputText rendered="{!isNewMode}">{!$Label.New}</apex:outputText><apex:outputText rendered="{!not(isNewMode)}">{!$Label.Edit}</apex:outputText>
                <h1 class="pageType">{! SobjectLabel}<apex:outputText rendered="{!isNewMode || isCloneMode}">{!$Label.New}</apex:outputText><apex:outputText rendered="{!not(isNewMode || isCloneMode)}">{!$Label.Edit}</apex:outputText>
                    <span class="titleSeparatingColon">:</span>
                </h1>
                <h2 class="pageDescription"> <apex:outputText rendered="{!isNewMode}">{!$Label.New}</apex:outputText><apex:outputText rendered="{!not(isNewMode)}">{!$Label.Edit}</apex:outputText>{! SobjectLabel}</h2>
                <h2 class="pageDescription"> <apex:outputText rendered="{!isNewMode || isCloneMode}">{!$Label.New}</apex:outputText><apex:outputText rendered="{!not(isNewMode || isCloneMode)}">{!$Label.Edit}</apex:outputText>{! SobjectLabel}</h2>
                <div class="blank">&nbsp;</div>
            </div>
            <div class="links">
@@ -388,7 +400,7 @@
                                <img src="/img/s.gif" alt="" class="minWidth" title="" width="1" height="1" />
                                <h2 class="mainTitle">{! SobjectLabel}<apex:outputText rendered="{!isNewMode}">{!$Label.New}</apex:outputText><apex:outputText rendered="{!not(isNewMode)}">{!$Label.Edit}</apex:outputText></h2>
                            </td>
                            <td class="pbButton" id="topButtonRow">
                            <td class="pbButton" id="topButtonRow" style="pointer-events: none; opacity: 0.4;">
                                <input class="btn" type="Button" value="{!$Label.Save}" onclick="saveSobjectProcess()" />
                                <input class="btn" type="Button" value="{!$Label.SaveAndNew}" onclick="saveSobjectProcess(1)" />
                                <apex:commandButton action="{!cancel}" value="{!$Label.Cancel}" />
@@ -410,8 +422,12 @@
                    <!--Each section has layoutFields, let's iterate them as well-->
                    <apex:repeat value="{!layoutSection.layoutFields}" var="layoutField">
                        <apex:inputField styleClass="{!ApiPrefix} {!ApiPrefix}_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!Inspection_Report__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)}"
                        <apex:inputField styleClass="{!ApiPrefix} {!ApiPrefix}_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!Inspection_Report__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&isNewMode}"
                            required="{!layoutField.isRequired}" />
                        <apex:inputField styleClass="{!ApiPrefix} {!ApiPrefix}_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!Inspection_Report__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&not(isNewMode)&&layoutField.fieldAPI!='RecordTypeId'}"
                        required="{!layoutField.isRequired}" />
                        <apex:outputField styleClass="{!ApiPrefix} {!ApiPrefix}_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!Inspection_Report__c[layoutField.fieldAPI]}"  rendered="{!not(layoutField.isPlaceHOlder)&&not(isNewMode)&&layoutField.fieldAPI=='RecordTypeId'}"
                        />
                        <apex:pageblocksectionitem rendered="{!layoutField.isPlaceHolder}">
                        </apex:pageblocksectionitem>
                    </apex:repeat>
@@ -464,11 +480,13 @@
                    }
                    
                    //Replace Contact Vlookup Field
                    replaceSearchContactLookup();
                    //replaceSearchContactLookup();
                    //Replace Lead Vlookup Field
                    replaceSearchLeadLookup();
                    document.querySelectorAll("[data-id='OwnerId']")[0].classList.add("disabledbutton");
                    //replaceSearchLeadLookup();
                    //document.querySelectorAll("[data-id='OwnerId']")[0].classList.add("disabledbutton");
                    // document.querySelectorAll("[data-id='OwnerId']")[1].classList.add("disabledbutton");
                    document.getElementById('topButtonRow').style = '';
             document.getElementById('bottomButtonRow').style = '';
                    
                    jQuery('a[data-id="OwnerId"]').remove();
@@ -496,7 +514,7 @@
                    //         clearVlookup('Hospital__c');
                    //     }
                    // });
                    /*
                    jQuery("body").on("change","input[data-id='Hospital_Name__c']",function(){
                        setTimeout(() => {
                            console.log(document.getElementById(this.id+'_lkid').value);
@@ -512,6 +530,7 @@
                            }
                        }, 50);
                    });                   
                    */
                });
            </script>
@@ -521,7 +540,7 @@
                        <tr>
                            <td class="pbTitle">
                                <img src="/img/s.gif" alt="" class="minWidth" title="" width="1" height="1" />&nbsp;</td>
                            <td class="pbButtonb" id="bottomButtonRow">
                            <td class="pbButtonb" id="bottomButtonRow" style="pointer-events: none; opacity: 0.4;">
                                <input class="btn" type="Button" value="{!$Label.Save}" onclick="saveSobjectProcess()" />
                                <input class="btn" type="Button" value="{!$Label.SaveAndNew}" onclick="saveSobjectProcess()" />
                                <apex:commandButton action="{!cancel}" value="{!$Label.Cancel}" />
force-app/main/default/pages/NewAndEditLead.page
@@ -23,8 +23,7 @@
        var VLookUpFields = new Set(['Hospital_Name__c', 'Department_Class__c', 'Contact_Name__c', 'Campaign__c', 'Lead_Inquiry_form__c', 'Opp_Name_Search__c']);
        function ProcessPI(leadJson, payloadForNewPI) {
            blockme();
            if ({!isNewMode
        }) {
            if ({!isNewMode} || {!isCloneMode}) {
            NewPIToAWS(leadJson, payloadForNewPI)
        }else {
            UpdatePIToAWS(leadJson, payloadForNewPI)
@@ -119,12 +118,26 @@
                } else if (nodelist[index].type == 'checkbox') {
                    result[nodelist[index].getAttribute("data-id")] = nodelist[index].checked;
                } else if (nodelist[index].type == 'select-multiple') {
                    //nodelist[index].getAttribute("data-id")
                    //After Update By zhj 20220411 Start
                    let multiple = nodelist[index].getAttribute("data-id");
                    let targets = document.querySelector("[data-id=" + multiple + "]").parentNode.children[1].children[0].children[1].children[2].children[0].innerText;
                    targets = targets.replace(/\n/g, ";");
                    console.log('targets = ' + targets);
                    result[nodelist[index].getAttribute("data-id")] = targets;
                    let targets = document.querySelector("[data-id=" + multiple + "]").options;
                    let selValues = [];
                    for(i=0; i < targets.length; i++){
                        if(targets[i].selected){
                            selValues.push(targets[i].value);
                        }
                    }
                    let setValuesStr = JSON.stringify(selValues);
                    setValuesStr = setValuesStr.substring(1,setValuesStr.length-1);
                    if(setValuesStr){
                        setValuesStr = setValuesStr.replace(/"/g,"");
                        if(setValuesStr.indexOf(',')!=-1){
                            setValuesStr = setValuesStr.replace(/,/g,";");
                        }
                    }
                    console.log('targets = ' + setValuesStr);
                    result[nodelist[index].getAttribute("data-id")] = setValuesStr;
                    //After Update By zhj 20220411 end
                } else {
                    result[nodelist[index].getAttribute("data-id")] = nodelist[index].value;
                }
@@ -170,10 +183,14 @@
            payloadJson.Email_Encrypted__c = r.object[0].emailEncrypt;
            //payloadJson.AWS_Data_Id__c = r.object[0].dataId;
            payloadJson.AWS_Data_Id__c = '{!AWSDataId}';
            if (isNewMode) {
            if (isNewMode || {!isCloneMode}) {
                payloadJson.AWS_Data_Id__c = r.object[0].dataId;
                delete payloadJson.OwnerId;
            } else {
                payloadJson.AWS_Data_Id__c = '{!AWSDataId}';
            }
            if('{!rtTypeId}'){
                payloadJson.RecordTypeId = '{!rtTypeId}';//Add by zhj for Record Type Issue 20220421
            }
            return payloadJson;
        }
@@ -400,7 +417,7 @@
                                <img src="/img/s.gif" alt="" class="minWidth" title="" width="1" height="1" />
                                <h2 class="mainTitle">意向编辑</h2>
                            </td>
                            <td class="pbButton" id="topButtonRow">
                            <td class="pbButton" id="topButtonRow" style="pointer-events: none; opacity: 0.4;">
                                <input class="btn" type="Button" value="保存" onclick="saveLeadProcess('Save')" />
                                <input class="btn" type="Button" value="保存并新建" onclick="saveLeadProcess('SaveAndNew')" />
                                <apex:commandButton action="{!cancel}" value="取消" />
@@ -423,8 +440,15 @@
                    <!--Each section has layoutFields, let's iterate them as well-->
                    <apex:repeat value="{!layoutSection.layoutFields}" var="layoutField">
                        <apex:inputField html-data-id="{!layoutField.fieldAPI}" value="{!Lead[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)}"
                        <!-- <apex:inputField html-data-id="{!layoutField.fieldAPI}" value="{!Lead[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&isNewMode}" required="{!layoutField.isRequired}" />
                        <apex:inputField html-data-id="{!layoutField.fieldAPI}" value="{!Lead[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&layoutField.fieldAPI!='RecordTypeId'}" required="{!layoutField.isRequired}" />
                        <apex:outputField html-data-id="{!layoutField.fieldAPI}" value="{!Lead[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&layoutField.fieldAPI=='RecordTypeId'}"   /> -->
                        <apex:inputField styleClass="PIBackApi PIBackApi_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!Lead[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&isNewMode}"
                            required="{!layoutField.isRequired}" />
                        <apex:inputField styleClass="PIBackApi PIBackApi_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!Lead[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&not(isNewMode)&&layoutField.fieldAPI!='RecordTypeId'}"
                            required="{!layoutField.isRequired}" />
                        <apex:outputField styleClass="PIBackApi PIBackApi_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!Lead[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&not(isNewMode)&&layoutField.fieldAPI=='RecordTypeId'}"
                        />
                        <apex:pageblocksectionitem rendered="{!layoutField.isPlaceHolder}">
                        </apex:pageblocksectionitem>
                    </apex:repeat>
@@ -482,7 +506,7 @@
                    document.querySelector("[data-id='Status']").value = '未跟进'
                    //会议询问单
                    if ('{!ifc.Id}')
                        document.getElementById('page:form:block:j_id34:0:j_id35:j_id36:15:j_id37_lkid').value = '{!ifc.Id}'
                        document.getElementById(document.querySelector("[data-id='Lead_Inquiry_form__c']").id+'_lkid').value = '{!ifc.Id}'
                    if ('{!ifc.Name}')
                        document.querySelector("[data-id='Lead_Inquiry_form__c']").value = '{!ifc.Name}'
                    //客户姓名
@@ -490,25 +514,24 @@
                        document.getElementById(document.querySelector("[data-id='Contact_Name__c']").id + '_lkid').value = '{!ifc.Contact_Id__c}'
                    //医院
                    if ('{!ifc.Hospital_Name__c}')
                        document.getElementById('page:form:block:j_id34:0:j_id35:j_id36:2:j_id37_lkold').value = '{!ifc.Hospital_Name__c}'
                        document.getElementById(document.querySelector("[data-id='Hospital_Name__c']").id+'_lkold').value = '{!ifc.Hospital_Name__c}'
                    if ('{!ifc.Hospital_ID__c}')
                        document.getElementById('page:form:block:j_id34:0:j_id35:j_id36:2:j_id37_lkid').value = '{!ifc.Hospital_ID__c}'
                        document.getElementById(document.querySelector("[data-id='Hospital_Name__c']").id+'_lkid').value = '{!ifc.Hospital_ID__c}'
                    //战略科室分类
                    if ('{!ifc.Department_Class__c}')
                        document.getElementById('page:form:block:j_id34:0:j_id35:j_id36:4:j_id37_lkold').value = '{!ifc.Department_Class__c}'
                        document.getElementById(document.querySelector("[data-id='Department_Class__c']").id+'_lkold').value = '{!ifc.Department_Class__c}'
                    if ('{!ifc.Department_ID__c}')
                        document.getElementById('page:form:block:j_id34:0:j_id35:j_id36:4:j_id37_lkid').value = '{!ifc.Department_ID__c}'
                        document.getElementById(document.querySelector("[data-id='Department_Class__c']").id+'_lkid').value = '{!ifc.Department_ID__c}'
                    //已有询价名称
                    if ('{!ifc.Opp_Name_Search__c}')
                        //document.getElementById('page:form:block:j_id34:0:j_id35:j_id36:12:j_id37_lkold').value = '{!ifc.Opp_Name_Search__c}'
                        document.getElementById(document.querySelector("[data-id='Opp_Name_Search__c']").id + '_lkold').value = '{!ifc.Opp_Name_Search__c}'
                    if ('{!ifc.Opp_Name_Search_ID__c}')
                        document.getElementById(document.querySelector("[data-id='Opp_Name_Search__c']").id + '_lkid').value = '{!ifc.Opp_Name_Search_ID__c}'
                    //主要学会
                    if ('{!ifc.Campaign__c}')
                        document.getElementById('page:form:block:j_id34:1:j_id35:j_id36:3:j_id37_lkold').value = '{!ifc.Campaign__c}'
                        document.getElementById(document.querySelector("[data-id='Campaign__c']").id +'_lkold').value = '{!ifc.Campaign__c}'
                    if ('{!ifc.Campaign_ID__c}')
                        document.getElementById('page:form:block:j_id34:1:j_id35:j_id36:3:j_id37_lkid').value = '{!ifc.Campaign_ID__c}'
                        document.getElementById(document.querySelector("[data-id='Campaign__c']").id +'_lkid').value = '{!ifc.Campaign_ID__c}'
                    //取消原因
                    if ('{!ifc.Cancel_Reason__c}')
                        document.querySelector("[data-id='Cancel_Reason__c']").value = '{!ifc.Cancel_Reason__c}'
@@ -563,6 +586,9 @@
                    
                    unblockUI();
                }
                document.getElementById('topButtonRow').style = '';
           document.getElementById('bottomButtonRow').style = '';
                let previous_value = {};
                    jQuery(".lookupInput input").each(function(i,e){
                        let je =jQuery(e);
@@ -688,7 +714,7 @@
                        <tr>
                            <td class="pbTitle">
                                <img src="/img/s.gif" alt="" class="minWidth" title="" width="1" height="1" />&nbsp;</td>
                            <td class="pbButton" id="bottomButtonRow">
                            <td class="pbButton" id="bottomButtonRow" style="pointer-events: none; opacity: 0.4;">
                                <input class="btn" type="Button" value="保存" onclick="saveLeadProcess('Save')" />
                                <input class="btn" type="Button" value="保存并新建" onclick="saveLeadProcess('SaveAndNew')" />
                                <apex:commandButton action="{!cancel}" value="取消" />
force-app/main/default/pages/NewAndEditQIS.page
@@ -62,10 +62,14 @@
                
                //payloadJson.AWS_Data_Id__c = r.object[0].dataId;
                payloadJson.AWS_Data_Id__c = '{!AWSDataId}';
                if (isNewMode) {
                if (isNewMode || {!isCloneMode}) {
                    payloadJson.AWS_Data_Id__c = r.object[0].dataId;
                    delete payloadJson.OwnerId;
                } else {
                    payloadJson.AWS_Data_Id__c = '{!AWSDataId}';
                }
                if('{!rtTypeId}'){
                    payloadJson.RecordTypeId = '{!rtTypeId}';//Add by zhj for Record Type Issue 20220421
                }
                return payloadJson;
            },
@@ -130,7 +134,7 @@
        var VLookUpFields = {! VLookUpFieldsJson};
        function ProcessPI(sobjJson, payloadForNewPI) {
            blockme();
            if ({!isNewMode}) {
            if ({!isNewMode} || {!isCloneMode}) {
                NewPIToAWS(sobjJson, payloadForNewPI)
            }else {
                UpdatePIToAWS(sobjJson, payloadForNewPI)
@@ -202,6 +206,15 @@
            return error_msg;
        }
        function getCKEinstance(api_name){
            let t = jQuery("label[for$='textAreaDelegate_"+api_name+"']").parent().next().find("textarea")[0];
            if(t && t.id){
                return CKEDITOR.instances[t.id]
            }
            return null;
        }
        function getSobjectInformation() {
            //api_id_map
//let nodelist = document.getElementsByClassName(config.ApiPrefix);
@@ -244,9 +257,9 @@
                } else {
                    result[field_api_name] = ele.value;
                    //关闭QIS理由为无时
                    if(field_api_name == 'Cancel_QIS_Reason__c' && ele.value == '_\x01_'){
                        result[field_api_name] = '';
                    }
                    // if(field_api_name == 'Cancel_QIS_Reason__c' && ele.value == '_\x01_'){
                    //     result[field_api_name] = '';
                    // }
                }
                
                // let e1 = document.getElementById(api_id_map[field_api_name]);
@@ -255,109 +268,35 @@
                // }
            }
            //赋值富文本区域
            //问题内容描述(图片)-FSE-OCSM-OSH
            if(document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:4:j_id51:j_id52:15:j_id53:textAreaDelegate_problem_detail_photo__c']")){
                result.problem_detail_photo__c = document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:4:j_id51:j_id52:15:j_id53:textAreaDelegate_problem_detail_photo__c']").contentWindow.document.getElementsByTagName('body')[0].innerHTML
            if(getCKEinstance('problem_detail_photo__c')){
                result.problem_detail_photo__c = getCKEinstance('problem_detail_photo__c').getData()
            }
            //问题内容描述(图片)-OSH回答完毕-现场结案-final
            if(document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:5:j_id51:j_id52:15:j_id53:textAreaDelegate_problem_detail_photo__c']")){
                result.problem_detail_photo__c = document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:5:j_id51:j_id52:15:j_id53:textAreaDelegate_problem_detail_photo__c']").contentWindow.document.getElementsByTagName('body')[0].innerHTML
            if(getCKEinstance('Photo_1__c')){
                result.Photo_1__c = getCKEinstance('Photo_1__c').getData()
            }
            //照片1 - OCSM-现场结案-final
            if(document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:14:j_id51:j_id52:0:j_id53:textAreaDelegate_problem_detail_photo__c']")){
                result.Photo_1__c = document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:14:j_id51:j_id52:0:j_id53:textAreaDelegate_problem_detail_photo__c']").contentWindow.document.getElementsByTagName('body')[0].innerHTML
            if(getCKEinstance('Photo_2__c')){
                result.Photo_2__c = getCKEinstance('Photo_2__c').getData()
            }
            //照片2-OCSM-现场结案-final
            if(document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:14:j_id51:j_id52:1:j_id53:textAreaDelegate_problem_detail_photo__c']")){
                result.Photo_2__c = document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:14:j_id51:j_id52:1:j_id53:textAreaDelegate_problem_detail_photo__c']").contentWindow.document.getElementsByTagName('body')[0].innerHTML
            if(getCKEinstance('Photo_3__c')){
                result.Photo_3__c = getCKEinstance('Photo_3__c').getData()
            }
            //照片3 -OCSM-现场结案-final
            if(document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:14:j_id51:j_id52:2:j_id53:textAreaDelegate_problem_detail_photo__c']")){
                result.Photo_3__c = document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:14:j_id51:j_id52:2:j_id53:textAreaDelegate_problem_detail_photo__c']").contentWindow.document.getElementsByTagName('body')[0].innerHTML
            if(getCKEinstance('Photo_4__c')){
                result.Photo_4__c = getCKEinstance('Photo_4__c').getData()
            }
            //照片4 -OCSM-现场结案-final
            if(document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:14:j_id51:j_id52:3:j_id53:textAreaDelegate_problem_detail_photo__c']")){
                result.Photo_4__c = document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:14:j_id51:j_id52:3:j_id53:textAreaDelegate_problem_detail_photo__c']").contentWindow.document.getElementsByTagName('body')[0].innerHTML
            if(getCKEinstance('Photo_OSH_1__c')){
                result.Photo_OSH_1__c = getCKEinstance('Photo_OSH_1__c').getData()
            }
            //照片OSH1 - OCSM
             if(document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:19:j_id51:j_id52:0:j_id53:textAreaDelegate_problem_detail_photo__c']")){
                result.Photo_OSH_1__c = document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:19:j_id51:j_id52:0:j_id53:textAreaDelegate_problem_detail_photo__c']").contentWindow.document.getElementsByTagName('body')[0].innerHTML
            if(getCKEinstance('Photo_OSH_2__c')){
                result.Photo_OSH_2__c = getCKEinstance('Photo_OSH_2__c').getData()
            }
            //照片OSH2-OCSM
            if(document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:19:j_id51:j_id52:1:j_id53:textAreaDelegate_problem_detail_photo__c']")){
                result.Photo_OSH_2__c = document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:19:j_id51:j_id52:1:j_id53:textAreaDelegate_problem_detail_photo__c']").contentWindow.document.getElementsByTagName('body')[0].innerHTML
            if(getCKEinstance('Photo_OSH_3__c')){
                result.Photo_OSH_3__c = getCKEinstance('Photo_OSH_3__c').getData()
            }
            //照片OSH3 -OCSM
            if(document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:19:j_id51:j_id52:2:j_id53:textAreaDelegate_problem_detail_photo__c']")){
                result.Photo_OSH_3__c = document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:19:j_id51:j_id52:2:j_id53:textAreaDelegate_problem_detail_photo__c']").contentWindow.document.getElementsByTagName('body')[0].innerHTML
            }
            //照片OSH4 -OCSM
            if(document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:19:j_id51:j_id52:3:j_id53:textAreaDelegate_problem_detail_photo__c']")){
                result.Photo_OSH_4__c = document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:19:j_id51:j_id52:3:j_id53:textAreaDelegate_problem_detail_photo__c']").contentWindow.document.getElementsByTagName('body')[0].innerHTML
            }
            //照片OSH1 - OSH回答完毕
            if(document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:18:j_id51:j_id52:0:j_id53:textAreaDelegate_problem_detail_photo__c']")){
                result.Photo_OSH_1__c = document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:18:j_id51:j_id52:0:j_id53:textAreaDelegate_problem_detail_photo__c']").contentWindow.document.getElementsByTagName('body')[0].innerHTML
            }
            //照片OSH2-OSH回答完毕
            if(document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:18:j_id51:j_id52:1:j_id53:textAreaDelegate_problem_detail_photo__c']")){
                result.Photo_OSH_2__c = document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:18:j_id51:j_id52:1:j_id53:textAreaDelegate_problem_detail_photo__c']").contentWindow.document.getElementsByTagName('body')[0].innerHTML
            }
            //照片OSH3 -OSH回答完毕
            if(document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:18:j_id51:j_id52:2:j_id53:textAreaDelegate_problem_detail_photo__c']")){
                result.Photo_OSH_3__c = document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:18:j_id51:j_id52:2:j_id53:textAreaDelegate_problem_detail_photo__c']").contentWindow.document.getElementsByTagName('body')[0].innerHTML
            }
            //照片OSH4 -OSH回答完毕
            if(document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:18:j_id51:j_id52:3:j_id53:textAreaDelegate_problem_detail_photo__c']")){
                result.Photo_OSH_4__c = document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:18:j_id51:j_id52:3:j_id53:textAreaDelegate_problem_detail_photo__c']").contentWindow.document.getElementsByTagName('body')[0].innerHTML
            }
            //照片1 - OSH
            if(document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:13:j_id51:j_id52:0:j_id53:textAreaDelegate_problem_detail_photo__c']")){
                result.Photo_1__c = document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:13:j_id51:j_id52:0:j_id53:textAreaDelegate_problem_detail_photo__c']").contentWindow.document.getElementsByTagName('body')[0].innerHTML
            }
            //照片2-OSH
            if(document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:13:j_id51:j_id52:1:j_id53:textAreaDelegate_problem_detail_photo__c']")){
                result.Photo_2__c = document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:13:j_id51:j_id52:1:j_id53:textAreaDelegate_problem_detail_photo__c']").contentWindow.document.getElementsByTagName('body')[0].innerHTML
            }
            //照片3 -OSH
            if(document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:13:j_id51:j_id52:2:j_id53:textAreaDelegate_problem_detail_photo__c']")){
                result.Photo_3__c = document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:13:j_id51:j_id52:2:j_id53:textAreaDelegate_problem_detail_photo__c']").contentWindow.document.getElementsByTagName('body')[0].innerHTML
            }
            //照片4 -OSH
            if(document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:13:j_id51:j_id52:3:j_id53:textAreaDelegate_problem_detail_photo__c']")){
                result.Photo_4__c = document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:13:j_id51:j_id52:3:j_id53:textAreaDelegate_problem_detail_photo__c']").contentWindow.document.getElementsByTagName('body')[0].innerHTML
            }
            //照片OSH1 - OSH
            if(document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:16:j_id51:j_id52:0:j_id53:textAreaDelegate_problem_detail_photo__c']")){
                result.Photo_OSH_1__c = document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:16:j_id51:j_id52:0:j_id53:textAreaDelegate_problem_detail_photo__c']").contentWindow.document.getElementsByTagName('body')[0].innerHTML
            }
            //照片OSH2-OSH
            if(document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:16:j_id51:j_id52:1:j_id53:textAreaDelegate_problem_detail_photo__c']")){
                result.Photo_OSH_2__c = document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:16:j_id51:j_id52:1:j_id53:textAreaDelegate_problem_detail_photo__c']").contentWindow.document.getElementsByTagName('body')[0].innerHTML
            }
            //照片OSH3 -OSH
            if(document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:16:j_id51:j_id52:2:j_id53:textAreaDelegate_problem_detail_photo__c']")){
                result.Photo_OSH_3__c = document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:16:j_id51:j_id52:2:j_id53:textAreaDelegate_problem_detail_photo__c']").contentWindow.document.getElementsByTagName('body')[0].innerHTML
            }
            //照片OSH4 -OSH
            if(document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:16:j_id51:j_id52:3:j_id53:textAreaDelegate_problem_detail_photo__c']")){
                result.Photo_OSH_4__c = document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:16:j_id51:j_id52:3:j_id53:textAreaDelegate_problem_detail_photo__c']").contentWindow.document.getElementsByTagName('body')[0].innerHTML
            }
            //照片OSH1 -现场结案-final
            if(document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:17:j_id51:j_id52:0:j_id53:textAreaDelegate_problem_detail_photo__c']")){
                result.Photo_OSH_1__c = document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:17:j_id51:j_id52:0:j_id53:textAreaDelegate_problem_detail_photo__c']").contentWindow.document.getElementsByTagName('body')[0].innerHTML
            }
            //照片OSH2-现场结案-final
            if(document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:17:j_id51:j_id52:1:j_id53:textAreaDelegate_problem_detail_photo__c']")){
                result.Photo_OSH_2__c = document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:17:j_id51:j_id52:1:j_id53:textAreaDelegate_problem_detail_photo__c']").contentWindow.document.getElementsByTagName('body')[0].innerHTML
            }
            //照片OSH3 -现场结案-final
            if(document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:17:j_id51:j_id52:2:j_id53:textAreaDelegate_problem_detail_photo__c']")){
                result.Photo_OSH_3__c = document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:17:j_id51:j_id52:2:j_id53:textAreaDelegate_problem_detail_photo__c']").contentWindow.document.getElementsByTagName('body')[0].innerHTML
            }
            //照片OSH4 -现场结案-final
            if(document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:17:j_id51:j_id52:3:j_id53:textAreaDelegate_problem_detail_photo__c']")){
                result.Photo_OSH_4__c = document.querySelector("[title = 'RTF 編輯器, page:form:block:j_id50:17:j_id51:j_id52:3:j_id53:textAreaDelegate_problem_detail_photo__c']").contentWindow.document.getElementsByTagName('body')[0].innerHTML
            if(getCKEinstance('Photo_OSH_4__c')){
                result.Photo_OSH_4__c = getCKEinstance('Photo_OSH_4__c').getData()
            }
            return result;
        }
@@ -478,10 +417,10 @@
        <div class="ptBody">
            <div class="content">
                <img src="/img/s.gif" alt="{! SobjectLabel}" class="pageTitleIcon" title="{! SobjectLabel}" />
                <h1 class="pageType">{! SobjectLabel}<apex:outputText rendered="{!isNewMode}">{!$Label.New}</apex:outputText><apex:outputText rendered="{!not(isNewMode)}">{!$Label.Edit}</apex:outputText>
                <h1 class="pageType">{! SobjectLabel}<apex:outputText rendered="{!isNewMode || isCloneMode}">{!$Label.New}</apex:outputText><apex:outputText rendered="{!not(isNewMode || isCloneMode)}">{!$Label.Edit}</apex:outputText>
                    <span class="titleSeparatingColon">:</span>
                </h1>
                <h2 class="pageDescription"> <apex:outputText rendered="{!isNewMode}">{!$Label.New}</apex:outputText><apex:outputText rendered="{!not(isNewMode)}">{!$Label.Edit}</apex:outputText>{! SobjectLabel}</h2>
                <h2 class="pageDescription"> <apex:outputText rendered="{!isNewMode || isCloneMode}">{!$Label.New}</apex:outputText><apex:outputText rendered="{!not(isNewMode || isCloneMode)}">{!$Label.Edit}</apex:outputText>{! SobjectLabel}</h2>
                <div class="blank">&nbsp;</div>
            </div>
            <div class="links">
@@ -505,7 +444,7 @@
                                <img src="/img/s.gif" alt="" class="minWidth" title="" width="1" height="1" />
                                <h2 class="mainTitle">{! SobjectLabel}<apex:outputText rendered="{!isNewMode}">{!$Label.New}</apex:outputText><apex:outputText rendered="{!not(isNewMode)}">{!$Label.Edit}</apex:outputText></h2>
                            </td>
                            <td class="pbButton" id="topButtonRow">
                            <td class="pbButton" id="topButtonRow" style="pointer-events: none; opacity: 0.4;">
                                <input class="btn" type="Button" value="{!$Label.Save}" onclick="saveSobjectProcess()" />
                                <input class="btn" type="Button" value="{!$Label.SaveAndNew}" onclick="saveSobjectProcess(1)" />
                                <apex:commandButton action="{!cancel}" value="{!$Label.Cancel}" />
@@ -527,8 +466,12 @@
                    
                    <!--Each section has layoutFields, let's iterate them as well-->
                    <apex:repeat value="{!layoutSection.layoutFields}" var="layoutField">
                        <apex:inputField styleClass="{!ApiPrefix} {!ApiPrefix}_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!QIS_Report__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)}"
                        <apex:inputField styleClass="PIBackApi PIBackApi_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!QIS_Report__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&isNewMode}"
                                         required="{!layoutField.isRequired}" />
                        <apex:inputField styleClass="PIBackApi PIBackApi_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!QIS_Report__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&not(isNewMode)&&layoutField.fieldAPI!='RecordTypeId'}"
                            required="{!layoutField.isRequired}" />
                        <apex:outputField styleClass="PIBackApi PIBackApi_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!QIS_Report__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&not(isNewMode)&&layoutField.fieldAPI=='RecordTypeId'}"
                        />
                        <apex:pageblocksectionitem rendered="{!layoutField.isPlaceHolder}">
                        </apex:pageblocksectionitem>
                    </apex:repeat>
@@ -548,6 +491,11 @@
            }
            console.log(api_id_map);
            sfdcPage.appendToOnloadQueue(function () {
                jQuery('option').each(function(i,e){
                    if(e.value == '_\x01_'){
                        e.value = '';
                    }
                })
                //判断是否为只读选项
                var layoutSections = JSON.parse('{!layoutSectionsStr}');
                    for (let m = 0; m < layoutSections.length; m++) {
@@ -588,6 +536,8 @@
                            oi.value = '{!CurrentUserId}'
                        }
                    }
                document.getElementById('topButtonRow').style = '';
           document.getElementById('bottomButtonRow').style = '';
            });
            </script>
            <div class="pbBottomButtons">
@@ -596,7 +546,7 @@
                        <tr>
                            <td class="pbTitle">
                                <img src="/img/s.gif" alt="" class="minWidth" title="" width="1" height="1" />&nbsp;</td>
                            <td class="pbButtonb" id="bottomButtonRow">
                            <td class="pbButtonb" id="bottomButtonRow" style="pointer-events: none; opacity: 0.4;">
                                <input class="btn" type="Button" value="{!$Label.Save}" onclick="saveSobjectProcess()" />
                                <input class="btn" type="Button" value="{!$Label.SaveAndNew}" onclick="saveSobjectProcess()" />
                                <apex:commandButton action="{!cancel}" value="{!$Label.Cancel}" />
force-app/main/default/pages/NewAndEditRepairSubOrder.page
@@ -1,10 +1,3 @@
<!--
  @description       :
  @author            : ChangeMeIn@UserSettingsUnder.SFDoc
  @group             :
  @last modified on  : 03-23-2022
  @last modified by  : ChangeMeIn@UserSettingsUnder.SFDoc
-->
<apex:page standardController="RepairSubOrder__c" extensions="NewAndEditRepairSubOrderController" id="page">
    <apex:includeScript value="{! URLFOR($Resource.AWSService, 'AWSService.js') }" />
    <script src="../../soap/ajax/53.0/connection.js" type="text/javascript"></script>
@@ -74,6 +67,9 @@
                    payloadJson.AWS_Data_Id__c = r.object[0].dataId;
                } else {
                    payloadJson.AWS_Data_Id__c = '{!AWSDataId}';
                }
                if('{!rtTypeId}'){
                    payloadJson.RecordTypeId = '{!rtTypeId}';//Add by zhj for Record Type Issue 20220421
                }
                return payloadJson;
            },
@@ -185,25 +181,25 @@
        function validateFieldValueFormate() {
            let error_msg = '';
            // let textEmail = "[data-id='Email']";
            let textPhone = "[data-id='RepairApplicantTel__c']";
            //let textPhone = "[data-id='RepairApplicantTel__c']";
            //Email
            // let email = document.querySelector(textEmail);
            // if(email && !/^[\w-]{3,12}@[\da-zA-Z]{2,16}\.[a-zA-Z]+$/.test(email.value)){
            //     error_msg += ';邮件格式错误';
            // }
            let phone = document.querySelector(textPhone);
            // let phone = document.querySelector(textPhone);
            if(phone ){
                if(phone.value){
                    if(!/^1[3|5|8|7][0-9]\d{4,8}$/.test(phone.value)){
                        error_msg += ';电话号码错误';
                    }
                }else{
                    if(phone.previousSibling && phone.previousSibling.className.indexOf('requiredBlock')>-1){
                        error_msg += ';电话号码错误';
                    }
                }
            }
            // if(phone ){
            //     if(phone.value){
            //         if(!/^1[3|5|8|7][0-9]\d{4,8}$/.test(phone.value)){
            //             error_msg += ';电话号码错误';
            //         }
            //     }else{
            //         if(phone.previousSibling && phone.previousSibling.className.indexOf('requiredBlock')>-1){
            //             error_msg += ';电话号码错误';
            //         }
            //     }
            // }
            let es = document.getElementsByTagName('select')
            for(let ei in es){
@@ -267,6 +263,9 @@
                } else {
                    result[field_api_name] = ele.value;
                }
            }
            if(api_id_map['AssetType__c']){
                result.AssetType__c= document.getElementById(api_id_map['AssetType__c']).value!='_\x01_'?document.getElementById(api_id_map['AssetType__c']).value:'';
            }
            return result;
        }
@@ -535,7 +534,7 @@
                                <img src="/img/s.gif" alt="" class="minWidth" title="" width="1" height="1" />
                                <h2 class="mainTitle">{! SobjectLabel}<apex:outputText rendered="{!isNewMode}">{!$Label.New}</apex:outputText><apex:outputText rendered="{!not(isNewMode)}">{!$Label.Edit}</apex:outputText></h2>
                            </td>
                            <td class="pbButton" id="topButtonRow">
                            <td class="pbButton" id="topButtonRow" style="pointer-events: none; opacity: 0.4;">
                                <input class="btn" type="Button" value="{!$Label.Save}" onclick="saveSobjectProcess()" />
                                <input class="btn" type="Button" value="{!$Label.SaveAndNew}" onclick="saveSobjectProcess(1)" />
                                <apex:commandButton action="{!cancel}" value="{!$Label.Cancel}" />
@@ -557,8 +556,12 @@
                    <!--Each section has layoutFields, let's iterate them as well-->
                    <apex:repeat value="{!layoutSection.layoutFields}" var="layoutField">
                        <apex:inputField styleClass="{!ApiPrefix} {!ApiPrefix}_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!RepairSubOrder__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)}"
                        <apex:inputField styleClass="PIBackApi PIBackApi_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!RepairSubOrder__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&isNewMode}"
                            required="{!layoutField.isRequired}" />
                        <apex:inputField styleClass="PIBackApi PIBackApi_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!RepairSubOrder__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&not(isNewMode)&&layoutField.fieldAPI!='RecordTypeId'}"
                            required="{!layoutField.isRequired}" />
                        <apex:outputField styleClass="PIBackApi PIBackApi_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!RepairSubOrder__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&not(isNewMode)&&layoutField.fieldAPI=='RecordTypeId'}"
                       />
                        <apex:pageblocksectionitem rendered="{!layoutField.isPlaceHolder}">
                        </apex:pageblocksectionitem>
                    </apex:repeat>
@@ -611,7 +614,8 @@
                    replaceSearchContactLookup();
                    //3. Set Readonly Attribute
                    document.querySelectorAll("[data-id='OwnerId']")[0].classList.add("disabledbutton");
                    document.getElementById('topButtonRow').style = '';
                    document.getElementById('bottomButtonRow').style = '';
                    jQuery('a[data-id="OwnerId"]').remove();
                    /*
                    jQuery(".lookupInput").each(function(i,e){
@@ -669,7 +673,7 @@
                        <tr>
                            <td class="pbTitle">
                                <img src="/img/s.gif" alt="" class="minWidth" title="" width="1" height="1" />&nbsp;</td>
                            <td class="pbButtonb" id="bottomButtonRow">
                            <td class="pbButtonb" id="bottomButtonRow" style="pointer-events: none; opacity: 0.4;">
                                <input class="btn" type="Button" value="{!$Label.Save}" onclick="saveSobjectProcess()" />
                                <input class="btn" type="Button" value="{!$Label.SaveAndNew}" onclick="saveSobjectProcess()" />
                                <apex:commandButton action="{!cancel}" value="{!$Label.Cancel}" />
force-app/main/default/pages/NewAndEditReport.page
@@ -19,7 +19,7 @@
        var redirectMode = 'Save';//1. Save 2. SaveAndNew
        var requiredFieldAPIList = JSON.parse('{!requiredFieldAPIListStr}');
        var fieldAPIToLabelMap = JSON.parse('{!fieldAPIToLabelMapStr}');
        var VLookUpFields = new Set(['Hospital_Reference__c', 'Department_Class_Ref__c', 'Daily_Report__c', 'OwnerId','Hospital_Department__c',
        var VLookUpFields = new Set(['Hospital_Reference__c','Consum_Apply__c','Department_Class_Ref__c', 'Daily_Report__c', 'OwnerId','Hospital_Department__c',
        'Competition_Company_Name__c','Report_OPDPlan__c','Loaner_request_no1__c','Practitioner1__c','Practitioner2__c','Practitioner3__c','Practitioner4__c',
        'Practitioner5__c','Opportunity1__c',
        'Opportunity2__c','Product01__c','Product1__c','Product2__c','Product3__c','Product4__c','Product5__c','Order_No__c','Person_In_Charge__c']);
@@ -46,6 +46,15 @@
            errorMsgNode.className = '';
        }
        function getCKEinstance(api_name){
            let t = jQuery("label[for$='textAreaDelegate_"+api_name+"']").parent().next().find("textarea")[0];
            if(t && t.id){
                return CKEDITOR.instances[t.id]
            }
            return null;
        }
        //1。获取所有字段值
        function getReportInformation() {
            let nodelist = document.querySelectorAll("[data-id]");
@@ -63,11 +72,36 @@
                    result[nodelist[index].getAttribute("data-id")] = nodelist[index].checked;
                } else if (nodelist[index].type == 'select-multiple') {
                    //nodelist[index].getAttribute("data-id")
                    //let targets = document.querySelector("[data-id=" + multiple + "]").nextSibling.children[0].children[1].children[2].innerText;
                    //Before Update By Li Jun 20220411
                    // let targets = document.querySelector("[data-id=" + multiple + "]").parentNode.children[2].children[0].children[1].children[2].children[0].innerText;
                    // targets = targets.replace(/\n/g, ";");
                    // console.log('targets = ' + targets);
                    // result[nodelist[index].getAttribute("data-id")] = targets;
                    //Before Update By Li Jun 20220411
                    //After Update By Li Jun 20220411 Start
                    let multiple = nodelist[index].getAttribute("data-id");
                    let targets = document.querySelector("[data-id=" + multiple + "]").nextSibling.children[0].children[1].children[2].innerText;
                    targets = targets.replace(/\n/g, ";");
                    console.log('targets = ' + targets);
                    result[nodelist[index].getAttribute("data-id")] = targets;
                    let targets = document.querySelector("[data-id=" + multiple + "]").options;
                    let selValues = [];
                    for(i=0; i < targets.length; i++){
                        if(targets[i].selected){
                            selValues.push(targets[i].value);
                        }
                    }
                    let setValuesStr = JSON.stringify(selValues);
                    setValuesStr = setValuesStr.substring(1,setValuesStr.length-1);
                    if(setValuesStr){
                        setValuesStr = setValuesStr.replace(/"/g,"");
                        if(setValuesStr.indexOf(',')!=-1){
                            setValuesStr = setValuesStr.replace(/,/g,";");
                        }
                    }
                    console.log('targets = ' + setValuesStr);
                    result[nodelist[index].getAttribute("data-id")] = setValuesStr;
                    //After Update By Li Jun 20220411 End
                } else {
                    result[nodelist[index].getAttribute("data-id")] = nodelist[index].value;
                }
@@ -77,38 +111,65 @@
                }
            }
            //手术分类1
            result.Technical_Category1__c = document.getElementById('page:form:j_id5:j_id35:4:j_id36:j_id37:2:j_id38')!=null?document.getElementById('page:form:j_id5:j_id35:4:j_id36:j_id37:2:j_id38').value:'';
            if(api_id_map['Technical_Category1__c']){
                result.Technical_Category1__c = document.getElementById(api_id_map['Technical_Category1__c']).value!='_\x01_'?document.getElementById(api_id_map['Technical_Category1__c']).value:'';
            }
            //result.Technical_Category1__c = document.getElementById('page:form:j_id5:j_id35:4:j_id36:j_id37:2:j_id38')!=null?document.getElementById('page:form:j_id5:j_id35:4:j_id36:j_id37:2:j_id38').value:'';
            //手术分类2
            result.Technical_Category2__c = document.getElementById('page:form:j_id5:j_id35:4:j_id36:j_id37:4:j_id38')!=null?document.getElementById('page:form:j_id5:j_id35:4:j_id36:j_id37:4:j_id38').value:'';
            if(api_id_map['Technical_Category2__c']){
                result.Technical_Category2__c = document.getElementById(api_id_map['Technical_Category2__c']).value!='_\x01_'?document.getElementById(api_id_map['Technical_Category2__c']).value:'';
            }
            //result.Technical_Category2__c = document.getElementById('page:form:j_id5:j_id35:4:j_id36:j_id37:4:j_id38')!=null?document.getElementById('page:form:j_id5:j_id35:4:j_id36:j_id37:4:j_id38').value:'';
            //目的2
            if(document.getElementById('page:form:j_id5:j_id35:2:j_id36:j_id37:1:j_id38')){
                result.Purpose2__c = document.getElementById('page:form:j_id5:j_id35:2:j_id36:j_id37:1:j_id38').value;
            if(api_id_map['Purpose2__c']){
                result.Purpose2__c = document.getElementById(api_id_map['Purpose2__c']).value;
            }
            // if(document.getElementById('page:form:j_id5:j_id35:2:j_id36:j_id37:1:j_id38')){
            //     result.Purpose2__c = document.getElementById('page:form:j_id5:j_id35:2:j_id36:j_id37:1:j_id38').value;
            // }
            //富文本框赋值
            if(getCKEinstance('Customer_sigh_photo__c')){
                result.Customer_sigh_photo__c = getCKEinstance('Customer_sigh_photo__c').getData()
            }
            if(getCKEinstance('Photo1__c')){
                result.Photo1__c = getCKEinstance('Photo1__c').getData()
            }
            if(getCKEinstance('Photo2__c')){
                result.Photo2__c = getCKEinstance('Photo2__c').getData()
            }
            if(getCKEinstance('Photo3__c')){
                result.Photo3__c = getCKEinstance('Photo3__c').getData()
            }
            if(getCKEinstance('VOC_follow_up_result__c')){
                result.VOC_follow_up_result__c = getCKEinstance('VOC_follow_up_result__c').getData()
            }
            if(getCKEinstance('VOC_follow_up_result1__c')){
                result.VOC_follow_up_result1__c = getCKEinstance('VOC_follow_up_result1__c').getData()
            }
            //用户签字的照片
            if(document.querySelector("[aria-describedby = 'cke_34']")){
                result.Customer_sigh_photo__c = document.querySelector("[aria-describedby = 'cke_34']").contentWindow.document.getElementsByTagName('body')[0].innerHTML
            }
            //照片1 Photo1__c
            if(document.querySelector("[aria-describedby = 'cke_42']")){
                result.Photo1__c = document.querySelector("[aria-describedby = 'cke_42']").contentWindow.document.getElementsByTagName('body')[0].innerHTML
            }
            //照片2 Photo2__c
            if(document.querySelector("[aria-describedby = 'cke_75']")){
                result.Photo2__c = document.querySelector("[aria-describedby = 'cke_75']").contentWindow.document.getElementsByTagName('body')[0].innerHTML
            }
            //照片3 Photo3__c
            if(document.querySelector("[aria-describedby = 'cke_108']")){
                result.Photo3__c = document.querySelector("[aria-describedby = 'cke_108']").contentWindow.document.getElementsByTagName('body')[0].innerHTML
            }
            //对应结果 VOC_follow_up_result__c cke_38
            if(document.querySelector("[aria-describedby = 'cke_38']")){
                result.VOC_follow_up_result__c = document.querySelector("[aria-describedby = 'cke_38']").contentWindow.document.getElementsByTagName('body')[0].innerHTML
            }
            //对应结果第一次     VOC_follow_up_result1__c cke_71
            if(document.querySelector("[aria-describedby = 'cke_71']")){
                result.VOC_follow_up_result1__c = document.querySelector("[aria-describedby = 'cke_71']").contentWindow.document.getElementsByTagName('body')[0].innerHTML
            }
            // if(document.querySelector("[aria-describedby = 'cke_34']")){
            //     result.Customer_sigh_photo__c = document.querySelector("[aria-describedby = 'cke_34']").contentWindow.document.getElementsByTagName('body')[0].innerHTML
            // }
            // //照片1 Photo1__c
            // if(document.querySelector("[aria-describedby = 'cke_42']")){
            //     result.Photo1__c = document.querySelector("[aria-describedby = 'cke_42']").contentWindow.document.getElementsByTagName('body')[0].innerHTML
            // }
            // //照片2 Photo2__c
            // if(document.querySelector("[aria-describedby = 'cke_75']")){
            //     result.Photo2__c = document.querySelector("[aria-describedby = 'cke_75']").contentWindow.document.getElementsByTagName('body')[0].innerHTML
            // }
            // //照片3 Photo3__c
            // if(document.querySelector("[aria-describedby = 'cke_108']")){
            //     result.Photo3__c = document.querySelector("[aria-describedby = 'cke_108']").contentWindow.document.getElementsByTagName('body')[0].innerHTML
            // }
            // //对应结果 VOC_follow_up_result__c cke_38
            // if(document.querySelector("[aria-describedby = 'cke_38']")){
            //     result.VOC_follow_up_result__c = document.querySelector("[aria-describedby = 'cke_38']").contentWindow.document.getElementsByTagName('body')[0].innerHTML
            // }
            // //对应结果第一次     VOC_follow_up_result1__c cke_71
            // if(document.querySelector("[aria-describedby = 'cke_71']")){
            //     result.VOC_follow_up_result1__c = document.querySelector("[aria-describedby = 'cke_71']").contentWindow.document.getElementsByTagName('body')[0].innerHTML
            // }
            if(result.From__c){
                result.From__c = result.From__c.replace(/\//g, '-')+':00';
            }
@@ -122,24 +183,24 @@
        function validateFieldValueFormate() {
            //VOC_Informer_Contact__c,Caller_phone_c__c
            let error_msg = '';
            let textEmail = "[data-id='    Follow_staff_email__c']";
            let textPhone1 = "[data-id='VOC_Informer_Contact__c']";
            let textPhone2 = "[data-id='Caller_phone_c__c']";
            //Email
            let email = document.querySelector(textEmail);
            if(email && !/^[\w-]{3,12}@[\da-zA-Z]{2,16}\.[a-zA-Z]+$/.test(email.value)){
                error_msg += ';对应者(邮箱)格式错误';
            }
            // let textEmail = "[data-id='    Follow_staff_email__c']";
            // let textPhone1 = "[data-id='VOC_Informer_Contact__c']";
            // let textPhone2 = "[data-id='Caller_phone_c__c']";
            // //Email
            // let email = document.querySelector(textEmail);
            // if(email && !/^[\w-]{3,12}@[\da-zA-Z]{2,16}\.[a-zA-Z]+$/.test(email.value)){
            //     error_msg += ';对应者(邮箱)格式错误';
            // }
            let phone1 = document.querySelector(textPhone1);
            if(phone1 && !/^1[3|5|8|7][0-9]\d{4,8}$/.test(phone1.value)){
                error_msg += ';信息提供人联系方式(电话)号码错误';
            }
            // let phone1 = document.querySelector(textPhone1);
            // if(phone1 && !/^1[3|5|8|7][0-9]\d{4,8}$/.test(phone1.value)){
            //     error_msg += ';信息提供人联系方式(电话)号码错误';
            // }
            
            let phone2 = document.querySelector(textPhone2);
            if(phone2 && !/^1[3|5|8|7][0-9]\d{4,8}$/.test(phone2.value)){
                error_msg += ';联系电话号码错误';
            }
            // let phone2 = document.querySelector(textPhone2);
            // if(phone2 && !/^1[3|5|8|7][0-9]\d{4,8}$/.test(phone2.value)){
            //     error_msg += ';联系电话号码错误';
            // }
            for(let e of document.getElementsByTagName('select')){
                for(let op of e.options){
@@ -174,6 +235,33 @@
            return blankRequiredFields;
        }
        var GetEleByClass = function(class_name){
            let eles = document.getElementsByClassName(class_name);
            if(eles.length > 0) return eles[0];
            return null;
        }
        var GetEleApiName = function(ele){
            for(let ci in ele.classList){
                let c = ele.classList[ci];
                if(c.indexOf('{!ApiPrefix}'+'_')>-1){
                    return c.replace('{!ApiPrefix}'+'_','');
                }
            }
            return '';
        }
        function IsFormTag(tag_name){
            if (!tag_name) {
                return false;
            }
            return ['input','select','textarea'].indexOf(tag_name.toLowerCase())>-1;
        }
        function IsFormElement(e){
            return IsFormTag(e.tagName);
        }
        //4.获取要加密的字段
        function getPIPayload(reportJson) {
            let reportPayloadList = [];
@@ -202,7 +290,7 @@
        //5.新建或编辑
        function ProcessPI(reportJson, payloadForNewPI) {
            blockme();
            if ({!isNewMode}) {
            if ({!isNewMode} || {!isCloneMode} || !'{!AWSDataId}') {//Add by Li Jun for PIPL 20220413
                NewPIToAWS(reportJson, payloadForNewPI)
            }else {
                UpdatePIToAWS(reportJson, payloadForNewPI)
@@ -439,10 +527,14 @@
            payloadJson.age_Encrypted__c = result.object[0].ageEncrypt;
            payloadJson.Medical_History_Encrypted__c = result.object[0].medicalHistoryEncrypt;
            payloadJson.sex_Encrypted__c = result.object[0].sexEncrypt;
            if (isNewMode) {
            if (isNewMode || {!isCloneMode}||!'{!AWSDataId}') {//Add by Li Jun for PIPL 20220413
                payloadJson.AWS_Data_Id__c = result.object[0].dataId;
                delete payloadJson.OwnerId;
            } else {
                payloadJson.AWS_Data_Id__c = '{!AWSDataId}';
            }
            if('{!rtTypeId}'){
                payloadJson.RecordTypeId = '{!rtTypeId}';//Add by Li Jun for Record Type Issue 20220421
            }
            return payloadJson;
        }
@@ -524,7 +616,7 @@
                                <img src="/img/s.gif" alt="" class="minWidth" title="" width="1" height="1" />
                                <h2 class="mainTitle">报告书编辑</h2>
                            </td>
                            <td class="pbButton" id="topButtonRow">
                            <td class="pbButton" id="topButtonRow" style="pointer-events: none; opacity: 0.4;">
                                <input class="btn" type="Button" value="保存" onclick="saveReportProcess('Save')" />
                                <input class="btn" type="Button" value="保存并新建" onclick="saveReportProcess('SaveAndNew')" />
                                <apex:commandButton action="{!cancel}" value="取消" />
@@ -547,8 +639,14 @@
                    <!--Each section has layoutFields, let's iterate them as well-->
                    <apex:repeat value="{!layoutSection.layoutFields}" var="layoutField">
                        <apex:inputField html-data-id="{!layoutField.fieldAPI}" styleClass="{!layoutField.fieldAPI}" value="{!Report__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)}"
                        <!-- <apex:inputField html-title="{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}"  styleClass="{!ApiPrefix} {!ApiPrefix}_{!layoutField.fieldAPI}" value="{!Report__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)}"
                            required="{!layoutField.isRequired}" /> -->
                        <apex:inputField styleClass="PIBackApi PIBackApi_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!Report__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&isNewMode}"
                            required="{!layoutField.isRequired}" />
                        <apex:inputField styleClass="PIBackApi PIBackApi_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!Report__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&not(isNewMode)&&layoutField.fieldAPI!='RecordTypeId'}"
                            required="{!layoutField.isRequired}" />
                        <apex:outputField styleClass="PIBackApi PIBackApi_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!Report__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&not(isNewMode)&&layoutField.fieldAPI=='RecordTypeId'}"
                        />
                        <apex:pageblocksectionitem rendered="{!layoutField.isPlaceHolder}">
                        </apex:pageblocksectionitem>
                    </apex:repeat>
@@ -556,6 +654,18 @@
                </apex:pageBlockSection>
            </apex:repeat>
            <script>
                var init_nodes = document.getElementsByClassName("PIBackApi");
                var api_id_map={};
                for(let ei in init_nodes){
                    let e = init_nodes[ei];
                    if(IsFormElement(e)){
                        if(e.getAttribute("multiple") != 'multiple' || e.style.display == 'none' && e.id.indexOf('selected') < 0){
                            api_id_map[GetEleApiName(e)] = e.id;
                        }
                    }
                }
                console.log(api_id_map);
                sfdcPage.appendToOnloadQueue(function () {
                    //判断是否为只读选项
                    var layoutSections = JSON.parse('{!layoutSectionsStr}');
@@ -594,9 +704,14 @@
                    if('{!no1Name}' != '' && '{!no1Id}' != ''){
                        console.log('name = '+'{!no1Name}')
                        console.log('Id = '+'{!no1Id}')
                        if(document.querySelector("[data-id='Loaner_request_no1__c']")){
                        document.querySelector("[data-id='Loaner_request_no1__c']").value = '{!no1Name}'
                        document.getElementById(document.querySelector("[data-id='Loaner_request_no1__c']").id + '_lkid').value = '{!no1Id}'
                    }
                    }
                    document.getElementById('topButtonRow').style = '';
             document.getElementById('bottomButtonRow').style = '';
                    let previous_value = {};
                    jQuery(".lookupInput input").each(function(i,e){
@@ -653,7 +768,7 @@
                        <tr>
                            <td class="pbTitle">
                                <img src="/img/s.gif" alt="" class="minWidth" title="" width="1" height="1" />&nbsp;</td>
                            <td class="pbButtonb" id="bottomButtonRow">
                            <td class="pbButtonb" id="bottomButtonRow" style="pointer-events: none; opacity: 0.4;">
                                <input class="btn" type="Button" value="保存" onclick="saveReportProcess('Save')" />
                                <input class="btn" type="Button" value="保存并新建" onclick="saveReportProcess('SaveAndNew')" />
                                <apex:commandButton action="{!cancel}" value="取消" />
force-app/main/default/pages/NewAndEditTenderinformation.page
@@ -57,10 +57,14 @@
                
                //payloadJson.AWS_Data_Id__c = r.object[0].dataId;
                payloadJson.AWS_Data_Id__c = '{!AWSDataId}';
                if (isNewMode) {
                if (isNewMode || {!isCloneMode}) {
                    payloadJson.AWS_Data_Id__c = r.object[0].dataId;
                    delete payloadJson.OwnerId;
                } else {
                    payloadJson.AWS_Data_Id__c = '{!AWSDataId}';
                }
                if('{!rtTypeId}'){
                    payloadJson.RecordTypeId = '{!rtTypeId}';//Add by zhj for Record Type Issue 20220421
                }
                return payloadJson;
            },
@@ -120,7 +124,7 @@
        var VLookUpFields = {! VLookUpFieldsJson};
        function ProcessPI(sobjJson, payloadForNewPI) {
            blockme();
            if ({!isNewMode}) {
            if ({!isNewMode} || {!isCloneMode}) {
                NewPIToAWS(sobjJson, payloadForNewPI)
            }else {
                UpdatePIToAWS(sobjJson, payloadForNewPI)
@@ -159,18 +163,18 @@
        function validateFieldValueFormate() {
            let error_msg = '';
            let textEmail = "[data-id='Email']";
            let textPhone = "[data-id='Phone']";
            //Email
            let email = document.querySelector(textEmail);
            if(email && !/^[\w-]{3,12}@[\da-zA-Z]{2,16}\.[a-zA-Z]+$/.test(email.value)){
                error_msg += ';邮件格式错误';
            }
            let phone = document.querySelector(textPhone);
            // let textEmail = "[data-id='Email']";
            // let textPhone = "[data-id='Phone']";
            // //Email
            // let email = document.querySelector(textEmail);
            // if(email && !/^[\w-]{3,12}@[\da-zA-Z]{2,16}\.[a-zA-Z]+$/.test(email.value)){
            //     error_msg += ';邮件格式错误';
            // }
            // let phone = document.querySelector(textPhone);
            if(phone && !/^1[3|5|8|7][0-9]\d{4,8}$/.test(phone.value)){
                error_msg += ';电话号码错误';
            }
            // if(phone && !/^1[3|5|8|7][0-9]\d{4,8}$/.test(phone.value)){
            //     error_msg += ';电话号码错误';
            // }
            for(let e of document.getElementsByTagName('select')){
                for(let op of e.options){
@@ -361,10 +365,10 @@
        <div class="ptBody">
            <div class="content">
                <img src="/img/s.gif" alt="{! SobjectLabel}" class="pageTitleIcon" title="{! SobjectLabel}" />
                <h1 class="pageType">{! SobjectLabel}<apex:outputText rendered="{!isNewMode}">{!$Label.New}</apex:outputText><apex:outputText rendered="{!not(isNewMode)}">{!$Label.Edit}</apex:outputText>
                <h1 class="pageType">{! SobjectLabel}<apex:outputText rendered="{!isNewMode || isCloneMode}">{!$Label.New}</apex:outputText><apex:outputText rendered="{!not(isNewMode || isCloneMode)}">{!$Label.Edit}</apex:outputText>
                    <span class="titleSeparatingColon">:</span>
                </h1>
                <h2 class="pageDescription"> <apex:outputText rendered="{!isNewMode}">{!$Label.New}</apex:outputText><apex:outputText rendered="{!not(isNewMode)}">{!$Label.Edit}</apex:outputText>{! SobjectLabel}</h2>
                <h2 class="pageDescription"> <apex:outputText rendered="{!isNewMode || isCloneMode}">{!$Label.New}</apex:outputText><apex:outputText rendered="{!not(isNewMode || isCloneMode)}">{!$Label.Edit}</apex:outputText>{! SobjectLabel}</h2>
                <div class="blank">&nbsp;</div>
            </div>
            <div class="links">
@@ -386,9 +390,9 @@
                        <tr>
                            <td class="pbTitle">
                                <img src="/img/s.gif" alt="" class="minWidth" title="" width="1" height="1" />
                                <h2 class="mainTitle">{! SobjectLabel}<apex:outputText rendered="{!isNewMode}">{!$Label.New}</apex:outputText><apex:outputText rendered="{!not(isNewMode)}">{!$Label.Edit}</apex:outputText></h2>
                                <h2 class="mainTitle">{! SobjectLabel}<apex:outputText rendered="{!isNewMode || isCloneMode}">{!$Label.New}</apex:outputText><apex:outputText rendered="{!not(isNewMode || isCloneMode)}">{!$Label.Edit}</apex:outputText></h2>
                            </td>
                            <td class="pbButton" id="topButtonRow">
                            <td class="pbButton" id="topButtonRow" style="pointer-events: none; opacity: 0.4;">
                                <input class="btn" type="Button" value="{!$Label.Save}" onclick="saveSobjectProcess()" />
                                <input class="btn" type="Button" value="{!$Label.SaveAndNew}" onclick="saveSobjectProcess(1)" />
                                <apex:commandButton action="{!cancel}" value="{!$Label.Cancel}" />
@@ -410,8 +414,9 @@
                    <!--Each section has layoutFields, let's iterate them as well-->
                    <apex:repeat value="{!layoutSection.layoutFields}" var="layoutField">
                        <apex:inputField styleClass="{!ApiPrefix} {!ApiPrefix}_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!Tender_information__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)}"
                            required="{!layoutField.isRequired}" />
                        <apex:inputField styleClass="{!ApiPrefix} {!ApiPrefix}_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!Tender_information__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&isNewMode}" required="{!layoutField.isRequired}" />
                        <apex:inputField styleClass="{!ApiPrefix} {!ApiPrefix}_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!Tender_information__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&not(isNewMode)&&layoutField.fieldAPI!='RecordTypeId'}" required="{!layoutField.isRequired}" />
                        <apex:outputField styleClass="{!ApiPrefix} {!ApiPrefix}_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!Tender_information__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&not(isNewMode)&&layoutField.fieldAPI=='RecordTypeId'}" />
                        <apex:pageblocksectionitem rendered="{!layoutField.isPlaceHolder}">
                        </apex:pageblocksectionitem>
                    </apex:repeat>
@@ -463,11 +468,13 @@
                        }
                    }  
                    //Replace Contact Vlookup Field
                    replaceSearchContactLookup();
                    //replaceSearchContactLookup();
                    //Replace Lead Vlookup Field
                    replaceSearchLeadLookup();
                    //replaceSearchLeadLookup();
                    document.querySelectorAll("[data-id='OwnerId']")[0].classList.add("disabledbutton");
                    // document.querySelectorAll("[data-id='OwnerId']")[1].classList.add("disabledbutton");
                    document.getElementById('topButtonRow').style = '';
             document.getElementById('bottomButtonRow').style = '';
                    
                    jQuery('a[data-id="OwnerId"]').remove();
@@ -495,7 +502,7 @@
                    //         clearVlookup('Hospital__c');
                    //     }
                    // });
                    /*
                    jQuery("body").on("change","input[data-id='Hospital_Name__c']",function(){
                        setTimeout(() => {
                            console.log(document.getElementById(this.id+'_lkid').value);
@@ -511,6 +518,7 @@
                            }
                        }, 50);
                    });                   
                    */
                });
                
@@ -522,7 +530,7 @@
                        <tr>
                            <td class="pbTitle">
                                <img src="/img/s.gif" alt="" class="minWidth" title="" width="1" height="1" />&nbsp;</td>
                            <td class="pbButtonb" id="bottomButtonRow">
                            <td class="pbButtonb" id="bottomButtonRow" style="pointer-events: none; opacity: 0.4;">
                                <input class="btn" type="Button" value="{!$Label.Save}" onclick="saveSobjectProcess()" />
                                <input class="btn" type="Button" value="{!$Label.SaveAndNew}" onclick="saveSobjectProcess()" />
                                <apex:commandButton action="{!cancel}" value="{!$Label.Cancel}" />
force-app/main/default/pages/NewConsumApply.page
@@ -60,10 +60,14 @@
            payloadJson.Phone_Number_Encrypt__c = r.object[0].phoneNumberEncrypt;
            payloadJson.Direct_Shippment_Address_Encrypt__c = r.object[0].directShippmentAddressEncrypt;
            payloadJson.AWS_Data_Id__c = '{!AWSDataId}';
            if (isNewMode) {
            if (isNewMode || {!isCloneMode}) {
                payloadJson.AWS_Data_Id__c = r.object[0].dataId;
                delete payloadJson.OwnerId;
            } else {
                payloadJson.AWS_Data_Id__c = '{!AWSDataId}';
            }
            if('{!rtTypeId}'){
                payloadJson.RecordTypeId = '{!rtTypeId}';//Add by zhj for Record Type Issue 20220421
            }
            return payloadJson;
        }
@@ -71,8 +75,7 @@
        // New Or Edit
        function ProcessPI(consumApplyJson, payloadForNewPI) {
            blockme();
            if ({!isNewMode
            }) {
            if ({!isNewMode} || {!isCloneMode}) {
                NewPIToAWS(consumApplyJson, payloadForNewPI)
            }else {
                UpdatePIToAWS(consumApplyJson, payloadForNewPI)
@@ -381,7 +384,7 @@
                                <img src="/img/s.gif" alt="" class="minWidth" title="" width="1" height="1" />
                                <h2 class="mainTitle">耗材备品申请编辑</h2>
                            </td>
                            <td class="pbButton" id="topButtonRow">
                            <td class="pbButton" id="topButtonRow" style="pointer-events: none; opacity: 0.4;">
                                <input class="btn" type="Button" value="保存" onclick="saveConsumApplyProcess('Save')" />
                                <input class="btn" type="Button" value="保存并新建" onclick="saveConsumApplyProcess('SaveAndNew')" />
                                <apex:commandButton action="{!cancel}" value="取消" />
@@ -402,8 +405,12 @@
                    <!--Each section has layoutFields, let's iterate them as well-->
                    <apex:repeat value="{!layoutSection.layoutFields}" var="layoutField">
                        <apex:inputField html-data-id="{!layoutField.fieldAPI}" value="{!Consum_Apply__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)}"
                        <apex:inputField styleClass="PIBackApi PIBackApi_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!Consum_Apply__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&isNewMode}"
                            required="{!layoutField.isRequired}" />
                        <apex:inputField styleClass="PIBackApi PIBackApi_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!Consum_Apply__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&not(isNewMode)&&layoutField.fieldAPI!='RecordTypeId'}"
                            required="{!layoutField.isRequired}" />
                        <apex:outputField styleClass="PIBackApi PIBackApi_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!Consum_Apply__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&not(isNewMode)&&layoutField.fieldAPI=='RecordTypeId'}"
                       />
                        <apex:pageblocksectionitem rendered="{!layoutField.isPlaceHolder}">
                        </apex:pageblocksectionitem>
                    </apex:repeat>
@@ -456,6 +463,9 @@
                    //Replace Vlookup Field
                    replaceSearchContactLookup();
                    document.querySelector("[data-id='OwnerId']").classList.add("disabledbutton");
                    document.getElementById('topButtonRow').style = '';
             document.getElementById('bottomButtonRow').style = '';
                    let previous_value = {};
                    jQuery(".lookupInput input").each(function(i,e){
@@ -513,7 +523,7 @@
                        <tr>
                            <td class="pbTitle">
                                <img src="/img/s.gif" alt="" class="minWidth" title="" width="1" height="1" />&nbsp;</td>
                            <td class="pbButtonb" id="bottomButtonRow">
                            <td class="pbButtonb" id="bottomButtonRow" style="pointer-events: none; opacity: 0.4;">
                                <input class="btn" type="Button" value="保存" onclick="saveConsumApplyProcess('Save')" />
                                <input class="btn" type="Button" value="保存并新建" onclick="saveConsumApplyProcess('SaveAndNew')" />
                                <apex:commandButton action="{!cancel}" value="取消" />
force-app/main/default/pages/NewConsumApplyEquipmentSetDetail.page
@@ -1,10 +1,3 @@
<!--
  @description       :
  @author            : ChangeMeIn@UserSettingsUnder.SFDoc
  @group             :
  @last modified on  : 03-18-2022
  @last modified by  : ChangeMeIn@UserSettingsUnder.SFDoc
-->
<apex:page standardController="Consum_Apply_Equipment_Set_Detail__c" extensions="NewConsumApplyEquipSetDetailController" id="page">
    <apex:includeScript value="{! URLFOR($Resource.AWSService, 'AWSService.js') }" />
    <apex:stylesheet value="{!URLFOR($Resource.blockUIcss)}"/>
@@ -18,6 +11,7 @@
        }
    </style>
    <script>
        AWSService.sfSessionId = '{!GETSESSIONID()}';
        //Initial Required Information
        var staticResources = JSON.parse('{!staticResource}');
        var requiredFieldAPIList = JSON.parse('{!requiredFieldAPIListStr}');
@@ -57,20 +51,21 @@
            payloadJson.Trial_User__c = r.object[0].trialUser;
            payloadJson.Trial_User_Encrypt__c = r.object[0].trialUserEncrypt;
            payloadJson.AWS_Data_Id__c = '{!AWSDataId}';
            if (isNewMode) {
            if (isNewMode || {!isCloneMode}) {
                payloadJson.AWS_Data_Id__c = r.object[0].dataId;
            } else {
                payloadJson.AWS_Data_Id__c = '{!AWSDataId}';
            }
            debugger
            if('{!rtTypeId}'){
                payloadJson.RecordTypeId = '{!rtTypeId}';//Add by zhj for Record Type Issue 20220421
            }
            return payloadJson;
        }
        // New Or Edit
        function ProcessPI(consumApplyJson, payloadForNewPI) {
            blockme();
            if ({!isNewMode
            }) {
            if ({!isNewMode} || {!isCloneMode}) {
                NewPIToAWS(consumApplyJson, payloadForNewPI)
            }else {
                UpdatePIToAWS(consumApplyJson, payloadForNewPI)
@@ -104,8 +99,10 @@
                    console.log(nodelist[index].id.indexOf('lkwgt'));
                    if (nodelist[index].id.indexOf('lkwgt') == -1) {
                        let vlookUpNodeId = nodelist[index].id + '_lkid';
                        if(document.getElementById(vlookUpNodeId)!=null){
                        let vlookUpNodeValue = document.getElementById(vlookUpNodeId).value;
                        result[nodelist[index].getAttribute("data-id")] = vlookUpNodeValue;
                        }
                    }
                } else if (nodelist[index].type == 'checkbox') {
                    result[nodelist[index].getAttribute("data-id")] = nodelist[index].checked;
@@ -131,6 +128,7 @@
                    result[userVLookUpFields[i]] = userVlookUpNodeValue;
                }               
            }
            result.Consum_Apply_Equipment_Set__c = document.querySelector('[data-id=Consum_Apply_Equipment_Set__c]').textContent;
            console.log(JSON.stringify(result));
            return result;
        }
@@ -251,7 +249,7 @@
                                <img src="/img/s.gif" alt="" class="minWidth" title="" width="1" height="1" />
                                <h2 class="mainTitle">耗材备品配套一览明细编辑</h2>
                            </td>
                            <td class="pbButton" id="topButtonRow">
                            <td class="pbButton" id="topButtonRow" style="pointer-events: none; opacity: 0.4;">
                                <input class="btn" type="Button" value="保存" onclick="saveConsumApplyProcess('Save')" />
                                <input class="btn" type="Button" value="保存并新建" onclick="saveConsumApplyProcess('SaveAndNew')" />
                                <apex:commandButton action="{!cancel}" value="取消" />
@@ -266,8 +264,12 @@
                    <!--Each section has layoutFields, let's iterate them as well-->
                    <apex:repeat value="{!layoutSection.layoutFields}" var="layoutField">
                        <apex:inputField html-data-id="{!layoutField.fieldAPI}" value="{!Consum_Apply_Equipment_Set_Detail__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)}"
                        <apex:inputField styleClass="PIBackApi PIBackApi_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!Consum_Apply_Equipment_Set_Detail__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&isNewMode}"
                            required="{!layoutField.isRequired}" />
                        <apex:inputField styleClass="PIBackApi PIBackApi_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!Consum_Apply_Equipment_Set_Detail__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&not(isNewMode)&&layoutField.fieldAPI!='RecordTypeId'}"
                            required="{!layoutField.isRequired}" />
                        <apex:outputField styleClass="PIBackApi PIBackApi_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!Consum_Apply_Equipment_Set_Detail__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&not(isNewMode)&&layoutField.fieldAPI=='RecordTypeId'}"
                       />
                        <apex:pageblocksectionitem rendered="{!layoutField.isPlaceHolder}">
                        </apex:pageblocksectionitem>
                    </apex:repeat>
@@ -277,13 +279,23 @@
            <script>
                //Append Page
                sfdcPage.appendToOnloadQueue(function () {
                    //判断是否为只读选项
                    var layoutSections = JSON.parse('{!layoutSectionsStr}');
                    for (let m = 0; m < layoutSections.length; m++) {
                        let layoutSection = layoutSections[m].layoutFields;
                        for (let n = 0; n < layoutSection.length; n++) {
                            let layoutField = layoutSection[n];
                            if (layoutField.fieldAPI != '' && document.querySelector("[data-id='"+layoutField.fieldAPI+"']") != null) {
                                document.querySelector("[data-id='"+layoutField.fieldAPI+"']").disabled = !(layoutField.editableField);
                                    let e = document.querySelector("[data-id='"+layoutField.fieldAPI+"']");
                                    e.disabled = !(layoutField.editableField);
                                    if (!(layoutField.editableField)) {
                                        if (e.getAttribute("multiple") && e.getAttribute("multiple") == 'multiple') {
                                            e.parentNode.classList.add("disabledbutton");
                                        }
                                        if (e.tagName == 'DIV') {
                                            e.classList.add("disabledbutton");
                                        }
                                    }
                            }
                        }
                    }
@@ -293,38 +305,41 @@
                        blockme();
                        QueryConsumApplyFromAWS();
                    };
                    document.querySelector("[data-id='OwnerId']").classList.add("disabledbutton");
                    //document.querySelector("[data-id='OwnerId']").classList.add("disabledbutton");
                    jQuery(".lookupInput").each(function(i,e){
                        let je =jQuery(e).find('input');
                        je.attr("readonly","");
                        je.css("background","unset");
                    document.getElementById('topButtonRow').style = '';
             document.getElementById('bottomButtonRow').style = '';
                    //zhj 2022/04/11 start
                    // jQuery(".lookupInput").each(function(i,e){
                    //     let je =jQuery(e).find('input');
                    //     je.attr("readonly","");
                    //     je.css("background","unset");
                        
                        let dataid = je.attr('data-id');
                        if(['Hospital_Name__c','Department_Class__c','OwnerId'].indexOf(dataid) > -1) return;
                        jQuery(e).children(":last-child").before('<img class="closeIcon" data-id="'+dataid+'" generate="" alt="Clear" src="/s.gif" style="display: inline-block;">');
                    })
                    //     let dataid = je.attr('data-id');
                    //     if(['Hospital_Name__c','Department_Class__c','OwnerId'].indexOf(dataid) > -1) return;
                    //     jQuery(e).children(":last-child").before('<img class="closeIcon" data-id="'+dataid+'" generate="" alt="Clear" src="/s.gif" style="display: inline-block;">');
                    // })
                    
                    jQuery(".lookupInput").on("mouseenter","img[generate]",function(e){
                        this.className = "closeIconOn";
                    });
                    // jQuery(".lookupInput").on("mouseenter","img[generate]",function(e){
                    //     this.className = "closeIconOn";
                    // });
                    
                    jQuery(".lookupInput").on("mouseleave","img[generate]",function(e){
                        this.className = "closeIcon"
                    });
                    // jQuery(".lookupInput").on("mouseleave","img[generate]",function(e){
                    //     this.className = "closeIcon"
                    // });
                    
                    jQuery(".lookupInput").on("click","img[generate]",function(e){
                        let id = jQuery("input[data-id='"+jQuery(this).attr("data-id")+ "']").attr("id");
                        let input = document.getElementById(id);
                        if(input){
                            input.value = '';
                            let hidden = document.getElementById(id+'_lkid');
                            if(hidden){
                                hidden.value = '';
                            }
                        }
                    });
                    // jQuery(".lookupInput").on("click","img[generate]",function(e){
                    //     let id = jQuery("input[data-id='"+jQuery(this).attr("data-id")+ "']").attr("id");
                    //     let input = document.getElementById(id);
                    //     if(input){
                    //         input.value = '';
                    //         let hidden = document.getElementById(id+'_lkid');
                    //         if(hidden){
                    //             hidden.value = '';
                    //         }
                    //     }
                    // });
                    //zhj 2022/04/11 end
                });
            </script>
            <div class="pbBottomButtons">
@@ -333,7 +348,7 @@
                        <tr>
                            <td class="pbTitle">
                                <img src="/img/s.gif" alt="" class="minWidth" title="" width="1" height="1" />&nbsp;</td>
                            <td class="pbButtonb" id="bottomButtonRow">
                            <td class="pbButtonb" id="bottomButtonRow" style="pointer-events: none; opacity: 0.4;">
                                <input class="btn" type="Button" value="保存" onclick="saveConsumApplyProcess('Save')" />
                                <input class="btn" type="Button" value="保存并新建" onclick="saveConsumApplyProcess('SaveAndNew')" />
                                <apex:commandButton action="{!cancel}" value="取消" />
force-app/main/default/pages/NewOnCall.page
@@ -1,10 +1,3 @@
<!--
  @description       :
  @author            : ChangeMeIn@UserSettingsUnder.SFDoc
  @group             :
  @last modified on  : 03-24-2022
  @last modified by  : ChangeMeIn@UserSettingsUnder.SFDoc
-->
<apex:page standardController="On_Call__c" extensions="OnCallController" id="page">
    <apex:includeScript value="{! URLFOR($Resource.AWSService, 'AWSService.js') }" />
    <apex:stylesheet value="{!URLFOR($Resource.blockUIcss)}"/>
@@ -44,7 +37,7 @@
        var queryBack = function queryBack(data) {
            console.log('data = ' + data);
            //document.querySelector("[id='page:form:pageBlock:pageBlockSection:j_id1:0:j_id2']").value = data.object.callerPhone;
            document.querySelector("[id='page:form:block:j_id34:0:j_id35:j_id36:5:j_id37']").value = data.object.callerPhone;    //20220404  By Chen Yanan
            document.getElementById(api_id_map['Caller_phone__c']).value = data.object.callerPhone;    //20220404  By Chen Yanan
            document.querySelector("[data-id='Responsible_Person_HP__c']").value = data.object.responsiblePersonHP;
            unblockUI();
        };
@@ -61,20 +54,22 @@
            payloadJson.Caller_Phone_Encrypt__c = r.object[0].callerPhoneEncrypt;
            payloadJson.Responsible_PersonHP_Encrypt__c = r.object[0].responsiblePersonHPEncrypt;
            payloadJson.AWS_Data_Id__c = '{!AWSDataId}';
            if (isNewMode) {
            if (isNewMode|| {!isCloneMode} ||!'{!AWSDataId}') {//Add by Li Jun for PIPL 20220413
                payloadJson.AWS_Data_Id__c = r.object[0].dataId;
                delete payloadJson.OwnerId;
            } else {
                payloadJson.AWS_Data_Id__c = '{!AWSDataId}';
            }
            debugger
            if('{!rtTypeId}'){
                payloadJson.RecordTypeId = '{!rtTypeId}';//Add by zhj for Record Type Issue 20220421
            }
            return payloadJson;
        }
        // New Or Edit
        function ProcessPI(onCallJson, payloadForNewPI) {
            blockme();
            if ({!isNewMode
            }) {
            if ({!isNewMode} || {!isCloneMode} ||!'{!AWSDataId}') {//Add by Li Jun for PIPL 20220413
                NewPIToAWS(onCallJson, payloadForNewPI)
            }else {
                UpdatePIToAWS(onCallJson, payloadForNewPI)
@@ -215,6 +210,26 @@
            errorMsgNode.innerText = '';
            errorMsgNode.className = '';
        }
        var GetEleApiName = function(ele){
            for(let ci in ele.classList){
                let c = ele.classList[ci];
                if(c.indexOf('PIBackApi'+'_')>-1){
                    return c.replace('PIBackApi'+'_','');
                }
            }
            return '';
        }
        function IsFormTag(tag_name){
            if (!tag_name) {
                return false;
            }
            return ['input','select','textarea'].indexOf(tag_name.toLowerCase())>-1;
        }
        function IsFormElement(e){
            return IsFormTag(e.tagName);
        }
    </script>
    <div class="bPageTitle">
        <div class="ptBody">
@@ -246,7 +261,7 @@
                                <img src="/img/s.gif" alt="" class="minWidth" title="" width="1" height="1" />
                                <h2 class="mainTitle">OnCall编辑</h2>
                            </td>
                            <td class="pbButton" id="topButtonRow">
                            <td class="pbButton" id="topButtonRow" style="pointer-events: none; opacity: 0.4;">
                                <input class="btn" type="Button" value="保存" onclick="saveOnCallProcess('Save')" />
                                <input class="btn" type="Button" value="保存并新建" onclick="saveOnCallProcess('SaveAndNew')" />
                                <apex:commandButton action="{!cancel}" value="取消" />
@@ -267,8 +282,12 @@
                    <!--Each section has layoutFields, let's iterate them as well-->
                    <apex:repeat value="{!layoutSection.layoutFields}" var="layoutField">
                        <apex:inputField html-data-id="{!layoutField.fieldAPI}" value="{!On_Call__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)}"
                       <apex:inputField styleClass="PIBackApi PIBackApi_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!On_Call__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&isNewMode}"
                            required="{!layoutField.isRequired}" />
                        <apex:inputField styleClass="PIBackApi PIBackApi_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!On_Call__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&not(isNewMode)&&layoutField.fieldAPI!='RecordTypeId'}"
                            required="{!layoutField.isRequired}" />
                        <apex:outputField styleClass="PIBackApi PIBackApi_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!On_Call__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&not(isNewMode)&&layoutField.fieldAPI=='RecordTypeId'}"
                       />
                        <apex:pageblocksectionitem rendered="{!layoutField.isPlaceHolder}">
                        </apex:pageblocksectionitem>
                    </apex:repeat>
@@ -276,6 +295,17 @@
                </apex:pageBlockSection>
            </apex:repeat>
            <script>
                var init_nodes = document.getElementsByClassName("PIBackApi");
                var api_id_map={};
                for(let ei in init_nodes){
                    let e = init_nodes[ei];
                    if(IsFormElement(e)){
                        if(e.getAttribute("multiple") != 'multiple' || e.style.display == 'none' && e.id.indexOf('selected') < 0){
                            api_id_map[GetEleApiName(e)] = e.id;
                        }
                    }
                }
                //Append Page
                sfdcPage.appendToOnloadQueue(function () {
                    var layoutSections = JSON.parse('{!layoutSectionsStr}');
@@ -304,6 +334,9 @@
                        QueryOnCallFromAWS();
                    };
                    document.querySelector("[data-id='OwnerId']").classList.add("disabledbutton");
                    document.getElementById('topButtonRow').style = '';
               document.getElementById('bottomButtonRow').style = '';
                    jQuery(".lookupInput").each(function(i,e){
                        let je =jQuery(e).find('input');
@@ -342,7 +375,7 @@
                        <tr>
                            <td class="pbTitle">
                                <img src="/img/s.gif" alt="" class="minWidth" title="" width="1" height="1" />&nbsp;</td>
                            <td class="pbButtonb" id="bottomButtonRow">
                            <td class="pbButtonb" id="bottomButtonRow" style="pointer-events: none; opacity: 0.4;">
                                <input class="btn" type="Button" value="保存" onclick="saveOnCallProcess('Save')" />
                                <input class="btn" type="Button" value="保存并新建" onclick="saveOnCallProcess('SaveAndNew')" />
                                <apex:commandButton action="{!cancel}" value="取消" />
force-app/main/default/pages/NewRentalApply.page
@@ -1,10 +1,3 @@
<!--
  @description       :
  @author            : Dennis
  @group             :
  @last modified on  : 04-01-2022
  @last modified by  : ChangeMeIn@UserSettingsUnder.SFDoc
-->
<apex:page standardController="Rental_Apply__c" extensions="RentalApplyController" id="page">
    <apex:stylesheet value="{!URLFOR($Resource.blockUIcss)}"/>
    <apex:includeScript value="{! URLFOR($Resource.AWSService, 'AWSService.js') }" />
@@ -49,6 +42,7 @@
            document.querySelector("[data-id='Phone_number__c']").value = data.object.phoneNumber;
            document.querySelector("[data-id='direct_shippment_address__c']").value = data.object.directShippmentAddress;
            unblockUI();
            enableButtonStatus();//Add by Li Jun 20220418
        };
        //Check If Insert Or Update
@@ -63,20 +57,49 @@
            payloadJson.Phone_Number_Encrypt__c = r.object[0].phoneNumberEncrypt;
            payloadJson.Direct_Shippment_Address_Encrypt__c = r.object[0].directShippmentAddressEncrypt;
            payloadJson.AWS_Data_Id__c = '{!AWSDataId}';
            if (isNewMode) {
            if('{!rtTypeId}'){
                payloadJson.RecordTypeId = '{!rtTypeId}';//Add by Li Jun for Record Type Issue 20220419
            }
            if (isNewMode || {!isCloneMode}) {
                payloadJson.AWS_Data_Id__c = r.object[0].dataId;
                delete payloadJson.OwnerId;
            } else {
                payloadJson.AWS_Data_Id__c = '{!AWSDataId}';
            }
            debugger
            if('{!rtTypeId}'){
                payloadJson.RecordTypeId = '{!rtTypeId}';//Add by zhj for Record Type Issue 20220421
            }
            return payloadJson;
        }
        //Add Button status start 20220418
        function enableButton(obj) {
            obj.classList.remove("btnDisabled");
        }
        function disableButton(obj) {
            obj.classList.add("btnDisabled");
        }
        function disableButtonStatus() {
            let btnList = document.getElementsByClassName('btn');
            for (let i = 0; i < btnList.length; i++) {
                disableButton(btnList[i]);
            }
        }
        function enableButtonStatus() {
            let btnList = document.getElementsByClassName('btn');
            for (let i = 0; i < btnList.length; i++) {
                enableButton(btnList[i]);
            }
        }
        disableButtonStatus();
        //Add Button status end 20220418
        // New Or Edit
        function ProcessPI(rentalApplyJson, payloadForNewPI) {
            blockme();
            if ({!isNewMode
            }) {
            if ({!isNewMode} || {!isCloneMode}) {
                NewPIToAWS(rentalApplyJson, payloadForNewPI)
            }else {
                UpdatePIToAWS(rentalApplyJson, payloadForNewPI)
@@ -156,8 +179,10 @@
                    console.log(nodelist[index].id.indexOf('lkwgt'));
                    if (nodelist[index].id.indexOf('lkwgt') == -1) {
                        let vlookUpNodeId = nodelist[index].id + '_lkid';
                        if(document.getElementById(vlookUpNodeId)){
                        let vlookUpNodeValue = document.getElementById(vlookUpNodeId).value;
                        result[nodelist[index].getAttribute("data-id")] = vlookUpNodeValue;
                        }
                    }
                } else if (nodelist[index].type == 'checkbox') {
                    result[nodelist[index].getAttribute("data-id")] = nodelist[index].checked;
@@ -185,20 +210,21 @@
                    }
                }             
            }
            if(document.querySelector("[id='page:form:block:j_id34:2:j_id35:j_id36:2:j_id37']")!=null){
                result.demo_purpose2__c = document.querySelector("[id='page:form:block:j_id34:2:j_id35:j_id36:2:j_id37']").value;
            if(api_id_map['demo_purpose2__c']){
                result.demo_purpose2__c = document.getElementById(api_id_map['demo_purpose2__c']).value!='_\x01_'?document.getElementById(api_id_map['demo_purpose2__c']).value:'';
            }            
            if(document.querySelector("[id='page:form:block:j_id34:0:j_id35:j_id36:18:j_id37']")!=null){
                result.ToAgency__c = document.querySelector("[id='page:form:block:j_id34:0:j_id35:j_id36:18:j_id37']").value;
            if(api_id_map['ToAgency__c']){
                result.ToAgency__c = document.getElementById(api_id_map['ToAgency__c']).value!='_\x01_'?document.getElementById(api_id_map['ToAgency__c']).value:'';
            }            
            //document.querySelector("[id='page:form:block:j_id34:0:j_id35:j_id36:18:j_id37']").disabled =true; // Commented By Li Jun 20220304
            if(document.querySelector("[id='page:form:block:j_id34:13:j_id35:j_id36:1:j_id37']")!=null){
                result.Loaner_cancel_reason__c = document.querySelector("[id='page:form:block:j_id34:13:j_id35:j_id36:1:j_id37']").value;
            }else{
                if(document.querySelector("[id='page:form:block:j_id34:11:j_id35:j_id36:1:j_id37']")!=null){
                    result.Loaner_cancel_reason__c = document.querySelector("[id='page:form:block:j_id34:11:j_id35:j_id36:1:j_id37']").value;
            if(api_id_map['Loaner_cancel_reason__c']){
                result.Loaner_cancel_reason__c = document.getElementById(api_id_map['Loaner_cancel_reason__c']).value!='_\x01_'?document.getElementById(api_id_map['Loaner_cancel_reason__c']).value:'';
                }               
            }
            // else{
            //     if(document.querySelector("[id='page:form:block:j_id34:11:j_id35:j_id36:1:j_id37']")!=null){
            //         result.Loaner_cancel_reason__c = document.querySelector("[id='page:form:block:j_id34:11:j_id35:j_id36:1:j_id37']").value;
            //     }
            // }
            // //格式化时间
            // if(result.HP_received_sign_day__c){
            //     result.HP_received_sign_day__c = result.HP_received_sign_day__c.replace(/\//g, '-')+':00';
@@ -211,9 +237,13 @@
            if(e){
                    result.Extension_List_RentalApply__c = e.getData();
                }
            if(document.getElementById('page:form:block:j_id34:0:j_id35:j_id36:13:j_id37' + '_lkid')!=null){
            if(document.getElementById(api_id_map['Office_Assistant1__c'] + '_lkid')!=null){
                // result.ToAgency__c = document.getElementById('page:form:block:j_id34:0:j_id35:j_id36:18:j_id37').value;
                result.Office_Assistant1__c = document.getElementById('page:form:block:j_id34:0:j_id35:j_id36:13:j_id37' + '_lkid').value;
                result.Office_Assistant1__c = document.getElementById(api_id_map['Office_Assistant1__c'] + '_lkid').value;
            }
            if(document.getElementById(api_id_map['Office_Assistant2__c'] + '_lkid')!=null){
                // result.ToAgency__c = document.getElementById('page:form:block:j_id34:0:j_id35:j_id36:18:j_id37').value;
                result.Office_Assistant2__c = document.getElementById(api_id_map['Office_Assistant2__c'] + '_lkid').value;
            }
            console.log(JSON.stringify(result));
            return result;
@@ -399,7 +429,7 @@
                                <img src="/img/s.gif" alt="" class="minWidth" title="" width="1" height="1" />
                                <h2 class="mainTitle">备品借出申请编辑</h2>
                            </td>
                            <td class="pbButton" id="topButtonRow">
                            <td class="pbButton" id="topButtonRow" style="pointer-events: none; opacity: 0.4;">
                                <input class="btn" type="Button" value="保存" onclick="saveRentalApplyProcess('Save')" />
                                <input class="btn" type="Button" value="保存并新建" onclick="saveRentalApplyProcess('SaveAndNew')" />
                                <apex:commandButton action="{!cancel}" value="取消" />
@@ -420,8 +450,12 @@
                    <!--Each section has layoutFields, let's iterate them as well-->
                    <apex:repeat value="{!layoutSection.layoutFields}" var="layoutField">
                        <apex:inputField styleClass="PIBackApi PIBackApi_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!Rental_Apply__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)}"
                        <apex:inputField styleClass="PIBackApi PIBackApi_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!Rental_Apply__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&isNewMode}"
                            required="{!layoutField.isRequired}" />
                        <apex:inputField styleClass="PIBackApi PIBackApi_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!Rental_Apply__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&not(isNewMode)&&layoutField.fieldAPI!='RecordTypeId'}"
                            required="{!layoutField.isRequired}" />
                        <apex:outputField styleClass="PIBackApi PIBackApi_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!Rental_Apply__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&not(isNewMode)&&layoutField.fieldAPI=='RecordTypeId'}"
                       />
                        <apex:pageblocksectionitem rendered="{!layoutField.isPlaceHolder}">
                        </apex:pageblocksectionitem>
                    </apex:repeat>
@@ -437,7 +471,14 @@
                        if(e.getAttribute("multiple") != 'multiple' || e.style.display == 'none' && e.id.indexOf('selected') < 0){
                            api_id_map[GetEleApiName(e)] = e.id;
                        }
                    }else{
                        let eid = jQuery(e).find(".lookupInput input").attr("id")
                        if(eid){
                            eid += '_lkid';
                            if(document.getElementById(eid)){
                                api_id_map[GetEleApiName(e)] = eid;
                            }
                        }
                    }
                }
                console.log(api_id_map);
@@ -471,7 +512,9 @@
                    var onlyReadFields = ['ExtensionStatus__c','ExtensionApplicationTime_Initial__c','ExtensionApprovalTime_Initial__c','ExtensionApplicationTime_Final__c','ExtensionApprovalTime_Final__c','ExtensionSuccessTimes__c','ZongjianApprovalManager__c','BuchangApprovalManager__c','JingliApprovalManager__c','BuchangApprovalManagerSales__c','SalesManager__c'];
                    console.log(onlyReadFields);
                    for(let i=0;i<onlyReadFields.length;i++){
                        if(document.querySelector('[data-id='+onlyReadFields[i]+']')){
                        document.querySelector('[data-id='+onlyReadFields[i]+']').parentNode.remove();
                        }
                    }
                    
                    //2. Query AWS Data by dataId 
@@ -479,10 +522,15 @@
                    if (!{!isNewMode}) {
                        blockme();
                        QueryRentalApplyFromAWS();
                    }else{
                        enableButtonStatus();//Add by Li Jun 20220418
                    };
                    //Replace Vlookup Field
                    replaceSearchContactLookup();
                    document.querySelector("[data-id='OwnerId']").classList.add("disabledbutton");
                    document.getElementById('topButtonRow').style = '';
             document.getElementById('bottomButtonRow').style = '';
                    let previous_value = {};
                    jQuery(".lookupInput input").each(function(i,e){
@@ -543,7 +591,7 @@
                        <tr>
                            <td class="pbTitle">
                                <img src="/img/s.gif" alt="" class="minWidth" title="" width="1" height="1" />&nbsp;</td>
                            <td class="pbButtonb" id="bottomButtonRow">
                            <td class="pbButtonb" id="bottomButtonRow" style="pointer-events: none; opacity: 0.4;">
                                <input class="btn" type="Button" value="保存" onclick="saveRentalApplyProcess('Save')" />
                                <input class="btn" type="Button" value="保存并新建" onclick="saveRentalApplyProcess('SaveAndNew')" />
                                <apex:commandButton action="{!cancel}" value="取消" />
force-app/main/default/pages/NewRepair.page
@@ -31,13 +31,25 @@
        //Redirect Required Parameter
        var redirectCallBack = function redirectCallBack(sfId, errorMessage) {
            if (sfId) {
                Visualforce.remoting.Manager.invokeAction(
                   'NewRepairController.EncryptUpdate', // example
                   sfId,
                   function (result, event) {
                       console.log(result);
                       if(result.message){
                        alert(result.message);
                       }
                if (redirectMode == 'Save') {
                    window.open('/' + sfId, '_self');
                } else if (redirectMode == 'SaveAndNew') {
                    window.open('/setup/ui/recordtypeselect.jsp?ent=' + '{!sobjectId}' + '&retURL=/' + '{!sobjectPrefix}' + '/o&save_new_url=/' + '{!sobjectPrefix}' + '/e?retURL=%2F' + '{!sobjectPrefix}' + '%2Fo', '_self');
                }
                   },
                   { escape: true }
               );
            } else {
                // alert(errorMessage);
                alertErrorMessage(errorMessage);
            }
        }
@@ -88,7 +100,9 @@
            } else {
                payloadJson.AWS_Data_Id__c = '{!AWSDataId}';
            }
            debugger
            if('{!rtTypeId}'){
                payloadJson.RecordTypeId = '{!rtTypeId}';//Add by zhj for Record Type Issue 20220421
            }
            return payloadJson;
        }
@@ -210,6 +224,10 @@
           e = document.getElementById(jQuery('[data-id="Repair_Determine_result_ConfirmationUser__c"] .lookupInput input').attr('id')+'_lkid');
           if(e){
            result.Repair_Determine_result_ConfirmationUser__c = e.value;
           }
           //未修理归还理由
            if(api_id_map['Return_Without_Repair_Reason__c']){
                result.Return_Without_Repair_Reason__c = document.getElementById(api_id_map['Return_Without_Repair_Reason__c']).value!='_\x01_'?document.getElementById(api_id_map['Return_Without_Repair_Reason__c']).value:'';
           }
            console.log(JSON.stringify(result));
            return result;
@@ -348,7 +366,7 @@
                                <img src="/img/s.gif" alt="" class="minWidth" title="" width="1" height="1" />
                                <h2 class="mainTitle">修理编辑</h2>
                            </td>
                            <td class="pbButton" id="topButtonRow">
                            <td class="pbButton" id="topButtonRow" style="pointer-events: none; opacity: 0.4;">
                                <input class="btn" type="Button" value="保存" onclick="saveRepairProcess('Save')" />
                                <input class="btn" type="Button" value="保存并新建" onclick="saveRepairProcess('SaveAndNew')" />
                                <apex:commandButton action="{!cancel}" value="取消" />
@@ -369,8 +387,12 @@
                    <!--Each section has layoutFields, let's iterate them as well-->
                    <apex:repeat value="{!layoutSection.layoutFields}" var="layoutField">
                        <apex:inputField styleClass="PIBackApi PIBackApi_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!Repair__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)}"
                        <apex:inputField styleClass="PIBackApi PIBackApi_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!Repair__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&isNewMode}"
                            required="{!layoutField.isRequired}" />
                        <apex:inputField styleClass="PIBackApi PIBackApi_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!Repair__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&not(isNewMode)&&layoutField.fieldAPI!='RecordTypeId'}"
                            required="{!layoutField.isRequired}" />
                        <apex:outputField styleClass="PIBackApi PIBackApi_{!layoutField.fieldAPI}" html-data-id="{!layoutField.fieldAPI}" value="{!Repair__c[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)&&not(isNewMode)&&layoutField.fieldAPI=='RecordTypeId'}"
                       />
                        <apex:pageblocksectionitem rendered="{!layoutField.isPlaceHolder}">
                        </apex:pageblocksectionitem>
                    </apex:repeat>
@@ -431,6 +453,9 @@
                    if(document.querySelector("[data-id='OwnerId']") != null)
                        document.querySelector("[data-id='OwnerId']").classList.add("disabledbutton");
                    document.getElementById('topButtonRow').style = '';
                    document.getElementById('bottomButtonRow').style = '';
                    let previous_value = {};
                    jQuery(".lookupInput input").each(function(i,e){
                        let je =jQuery(e);
@@ -448,6 +473,27 @@
                            }
                        })
                    })
                    //维修中心
                    if('{!workLocationSelect}' != ''){
                        let wlNode = document.getElementById(api_id_map['work_location_select__c']);
                        if(wlNode){
                           wlNode.removeAttribute("disabled")
                            var o = new Option()
                            o.text = '{!workLocationSelect}'
                           wlNode.options.add(o)
                           wlNode.value = '{!workLocationSelect}'
                        }
                    }
                    //如果从报修子单过来,需要解密报修人
                    if('{!RepairSubOrderAWSDataId}' != ''){
                        var staticResourceRepairSubOrder = JSON.parse('{!staticResourceRepairSubOrder}');
                        let queryBackRepairSubOrder = function queryBackRepairSubOrder(data) {
                            document.querySelector("[data-id='RepairApplicant__c']").value = data.object.repairApplicantName;
                        };
                        AWSService.query(staticResourceRepairSubOrder.queryUrl, '{!RepairSubOrderAWSDataId}', queryBackRepairSubOrder, staticResourceRepairSubOrder.token);
                    }
                    // jQuery(".lookupInput").each(function(i,e){
                    //     let je =jQuery(e).find('input');
@@ -486,7 +532,7 @@
                        <tr>
                            <td class="pbTitle">
                                <img src="/img/s.gif" alt="" class="minWidth" title="" width="1" height="1" />&nbsp;</td>
                            <td class="pbButtonb" id="bottomButtonRow">
                            <td class="pbButtonb" id="bottomButtonRow" style="pointer-events: none; opacity: 0.4;">
                                <input class="btn" type="Button" value="保存" onclick="saveRepairProcess('Save')" />
                                <input class="btn" type="Button" value="保存并新建" onclick="saveRepairProcess('SaveAndNew')" />
                                <apex:commandButton action="{!cancel}" value="取消" />
force-app/main/default/pages/OFSInsReportLayout.page
@@ -218,7 +218,7 @@
    for (let i = 0; i < divs.length; i++) {
        for (let j = 0; j < divs[i].classList.length; j++) {
            for(let clsi in divs[i].classList){let cls=divs[i].classList[clsi];
                if (cls.indexOf('error')>-1) {
                if (typeof cls == 'string'  && cls.indexOf('error')>-1) {
                    return true;
                }
            }
force-app/main/default/pages/QISPDF.page
@@ -22,8 +22,8 @@
            /* 20220221 PI改造 by 徐亮 start */
            body{margin: 0 auto;
            width: 780px;}
            #title1{height: 30px;}
            #title2{height: 110px;}
            .title1{height: 30px;}
            .title2{height: 110px;}
            /* 20220221 PI改造 by 徐亮 end */
            
@@ -42,7 +42,8 @@
    
<body style="font-family: MS Gothic;">
    <div id="pdf-wrapper">
        <div id="title1"></div>
        <div class="pdf-page">
        <table width="100%" border="0">
            <tr>
                <td width="25%">
@@ -398,9 +399,11 @@
            </tr>
        </table>
        
        <div style="page-break-after: always;"></div>
        
        <div id="title2"></div>
        </div>
        <div style="page-break-after: always;"></div>
        <div class="pdf-page">
        <table width="100%" border="0">
            <tr>
                <td width="25%">
@@ -453,34 +456,36 @@
        <br/>
        <table width="100%" border="1" cellspacing="2" style="font-size: 8pt;">
            <tr>
                <td>
                    <table width="100%" border="1" cellspacing="0">
                        <tr><td style="height:300px; text-align: center;"><apex:image value="{!qr.Photo_1_Text__c}" width="80%" rendered="{!NOT(ISBLANK(qr.Photo_1_Text__c))}" /></td></tr>
                <td style="width:50%">
                    <table width="100%" border="0" cellspacing="0">
                        <tr><td style="height:300px; text-align: center;"><apex:image id="Photo_1_Text" value="{!Photo_1_Text}" width="80%" rendered="{!NOT(ISBLANK(qr.Photo_1_Text__c))}" /></td></tr>
                        <tr><td style="height:40px;"></td></tr>
                    </table>
                </td>
                <td style="border-left-color: white;">
                    <table width="100%" border="1" cellspacing="0">
                        <tr><td style="height:300px; text-align: center;"><apex:image value="{!qr.Photo_2_Text__c}" width="80%" rendered="{!NOT(ISBLANK(qr.Photo_2_Text__c))}" /></td></tr>
                    <table width="100%" border="0" cellspacing="0">
                        <tr><td style="height:300px; text-align: center;"><apex:image value="{!Photo_2_Text}" width="80%" rendered="{!NOT(ISBLANK(qr.Photo_2_Text__c))}" /></td></tr>
                        <tr><td style="height:40px;"></td></tr>
                    </table>
                </td>
            </tr>
            <tr>
                <td style="border-top-color: white;">
                    <table width="100%" border="1" cellspacing="0">
                        <tr><td style="height:300px; text-align: center;"><apex:image value="{!qr.Photo_3_Text__c}" width="80%" rendered="{!NOT(ISBLANK(qr.Photo_3_Text__c))}" /></td></tr>
                    <table width="100%" border="0" cellspacing="0">
                        <tr><td style="height:300px; text-align: center;"><apex:image value="{!Photo_3_Text}" width="80%" rendered="{!NOT(ISBLANK(qr.Photo_3_Text__c))}" /></td></tr>
                        <tr><td style="height:40px;"></td></tr>
                    </table>
                </td>
                <td style="border-left-color: white; border-top-color: white;">
                    <table width="100%" border="1" cellspacing="0">
                        <tr><td style="height:300px; text-align: center;"><apex:image value="{!qr.Photo_4_Text__c}" width="80%" rendered="{!NOT(ISBLANK(qr.Photo_4_Text__c))}" /></td></tr>
                    <table width="100%" border="0" cellspacing="0">
                        <tr><td style="height:300px; text-align: center;"><apex:image value="{!Photo_4_Text}" width="80%" rendered="{!NOT(ISBLANK(qr.Photo_4_Text__c))}" /></td></tr>
                        <tr><td style="height:40px;"></td></tr>
                    </table>
                </td>
            </tr>
        </table>
        </div>
    </div>
</body>
@@ -512,51 +517,109 @@
    let id = "pdf-wrapper";
    var target = document.getElementById(id);
    // 把imageDta转换成url
        // page_height:一页的高度
        function ImageDataToUrl(img_data,page_height){
            let cvs = document.createElement("CANVAS");
            cvs.width = img_data.width;
            cvs.height = page_height;
            var ctx= cvs.getContext("2d");
            ctx.fillStyle="white";
            ctx.fillRect(0,0,cvs.width,cvs.height);// 填充canvas所有区域为白色
            ctx.putImageData(img_data,0,0);
            return cvs.toDataURL('image/jpeg', 1.0);
        }
    function jsPdfDownload(){
        let pdfName = "测试";
        let id = "pdf-wrapper";
        var target = document.getElementById(id);
        target.style.background = "#FFFFFF";
        if(pdfName==''||pdfName==undefined) pdfName= getNowFormatDate();
        html2canvas(target, {
            let jtargets = jQuery("#pdf-wrapper .pdf-page");
            let j_arr = new Array(jtargets.length + 1).join(0).split('').map(function () { return false });
            let landscape = false;
            let pw = 595.28;
            let ph = 841.89;
            const marginw = 40;
            const marginh = 40;
            let orientation = '';
            if (landscape) {
                pw += ph; ph = pw - ph; pw = pw - ph;
                orientation = 'l';
            }
            var pdf = new jsPDF(orientation, 'pt', 'a4');// 第一个参数填字母l,注意不是数字1,为横向pdf
            jtargets.each(function (i, e) {
                e.style.background = "#FFFFFF";
            })
            let rei = 0;
            let recursion = null;
            recursion = function (i) {
                if (i >= jtargets.length) {
                    Fun(pdf);
                    return;
                }
                e = jtargets[i];
                html2canvas(e, {
            scale: 2,
            onrendered:function(canvas) {
                        /**
                        本方法需要做几个事情
                        1.需要把canvas的内容分页显示到pdf的页中
                        2.canvas的宽高需要和pdf的宽高进行映射
                        3.截取到的内容需要放进一页宽高的canvas里面,并对其余区域刷白
                        */
                        var ctx = canvas.getContext("2d");
                        let canvas_max_page_num = 9;
                        let canvas_current_page_num = 0;
                var contentWidth = canvas.width;
                var contentHeight = canvas.height;
                //一页pdf显示html页面生成的canvas高度;
                var pageHeight = contentWidth / 592.28 * 841.89;
                //未生成pdf的html页面高度
                var leftHeight = contentHeight;
                //页面偏移
                var position = 0;
                //a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高
                var imgWidth = 515.28;//595.28//左右边距20
                var imgHeight = 515.28/contentWidth * contentHeight;//左右边距20
                        var outputWidth = pw - 2 * marginw;//595.28//左右边距20
                        let rate = outputWidth / 780;//输出宽度和内容宽度的比例
                        var outputHeight = ph - 2 * marginh;//左右边距20
                        let onePdfPageInCanvasHeight = contentWidth/outputWidth*outputHeight;//一页pdf在canvas中的高度;
                        //var pageData = canvas.toDataURL('image/jpeg', 1.0);
                        var pageData = null;
                        var imgData = null;
                var pageData = canvas.toDataURL('image/jpeg', 1.0);
                        var captureHeight = null;// 截取的当前canvas页的高度
                var pdf = new jsPDF('', 'pt', 'a4');
                        let j = i;
                        while(position < contentHeight){
                //有两个高度需要区分,一个是html页面的实际高度,和生成pdf的页面高度(841.89)
                //当内容未超过pdf一页显示的范围,无需分页
                if (leftHeight < pageHeight) {
                    pdf.addImage(pageData, 'JPEG', 40, 0, imgWidth, imgHeight );//左右边距20
                } else {
                    while(leftHeight > 0) {
                        pdf.addImage(pageData, 'JPEG', 40, position, imgWidth, imgHeight)//左右边距20
                        leftHeight -= pageHeight;
                        position -= 841.89;
                        //避免添加空白页
                        if(leftHeight > 0) {
                            if (j++) {
                            pdf.addPage();
                        }
                            if(position+onePdfPageInCanvasHeight>contentHeight){
                                captureHeight = contentHeight-position;
                            }else{
                                captureHeight = onePdfPageInCanvasHeight;
                            }
                            imgData = ctx.getImageData(0,position,contentWidth,captureHeight);
                            pageData = ImageDataToUrl(imgData,onePdfPageInCanvasHeight);
                            pdf.addImage(pageData, 'JPEG', marginw, marginh, outputWidth, outputHeight);//左右边距20,被输出的图片会被拉伸为outputWidth,outputHeight的宽高
                            canvas_current_page_num++;
                            position += onePdfPageInCanvasHeight;
                            if (canvas_max_page_num > 0 && canvas_current_page_num >= canvas_max_page_num) {
                                break;
                    }
                }
                Fun(pdf);
                        recursion(i + 1);
            }
        })
            };
            recursion(rei);
    }
    
    //blockme();
@@ -566,11 +629,14 @@
            //unblockUI();
            document.getElementById("Responsible_Person_HP__c").innerHTML = data.object.responsiblePersonHP;
            document.getElementById("Caller_phone__c").innerHTML = data.object.callerPhone;
                if(confirm("PDF已加载完毕,是否显示?")){
            jsPdfDownload(); 
        }, staticResources.token);
    }
            }, staticResources.token);
        }
</script>
<!-- 20220221 PI改造 by 徐亮 end  -->
</html>
force-app/main/default/pages/SearchVisitor.page
@@ -203,6 +203,20 @@
            }            
        }
        function showPITR(obj){
            var awsDataId = obj.childNodes[1].childNodes[2].value;
            if(awsDataId.length == 1){
                let sfId = j$(escapeVfId('Page:mainForm:idSearchVisitor:idAddVisitor:' + awsDataId + ':idAddHiddenId')).val()
                awsDataId = sfIdToAWSIdMapValue.get(sfId); 
            }
            if(contactInfo[awsDataId]){
                document.getElementById(obj.childNodes[1].childNodes[0].id).innerText = contactInfo[awsDataId].lastName;
                document.getElementById(obj.childNodes[3].childNodes[0].id).innerText = contactInfo[awsDataId].doctorDivision1;
                document.getElementById(obj.childNodes[4].childNodes[0].id).innerText = contactInfo[awsDataId].phone;
            }
        }
        function hidePIDiv(obj){
            document.getElementById(obj.id+'_PI').remove();
        }
@@ -437,7 +451,7 @@
                    <tr>
                        <td>
                        <div id="iframelike">
                        <apex:pageBlockTable id="idRezultVisitor" value="{!scwl}" var="scw" border="1" columns="8" columnsWidth="47px,90px,,90px,180x,90px,40px,200px">
                        <apex:pageBlockTable id="idRezultVisitor" value="{!scwl}" var="scw" onRowMouseOver="showPITR(this)" border="1" columns="8" columnsWidth="47px,90px,,90px,180x,90px,40px,200px">
                            <apex:column >
                                <apex:facet name="header">{!$Label.Selected}</apex:facet>
                                <input type="button" id="idSlt" value="{!$Label.Selected}" onclick="sltContact('{!scw.index}');"  class="btn" style="width:40px"/>
@@ -446,6 +460,7 @@
                                <apex:facet name="header">{!$Label.Visitor_Name}</apex:facet>
                                <apex:outputLink onmouseover="showPIDiv('{!scw.con.AWS_Data_Id__c}',this)"  onmouseout="hidePIDiv(this)" value="/{!scw.con.Id}" id="idName" target="_blank">{!scw.con.Name}</apex:outputLink>
                                <apex:inputText id="idHiddenId" value="{!scw.conid}" style="display:none" />
                                <apex:inputText id="AWSDataId" value="{!scw.con.AWS_Data_Id__c}" style="display:none" />
                            </apex:column>
                            <apex:column >
                                <apex:facet name="header">{!$Label.Department_Name}</apex:facet>
@@ -486,7 +501,7 @@
                    <tr>
                        <td>
                        <div id="iframelike2">
                        <apex:pageBlockTable id="idAddVisitor" value="{!acwl}" var="acw" border="1" columns="7" columnsWidth="47px,90px,,90px,180x,90px,40px">
                        <apex:pageBlockTable id="idAddVisitor" value="{!acwl}" var="acw" border="1" columns="7" onRowMouseOver="showPITR(this)" columnsWidth="47px,90px,,90px,180x,90px,40px">
                            <apex:column >
                                <apex:facet name="header">{!$Label.Back}</apex:facet>
                                <input type="button" id="idDel" value="{!$Label.Back}" onclick="delContact('{!acw.index}');" class="btn" style="width:40px"/>
@@ -496,6 +511,7 @@
                                <!-- <apex:outputText id="idAddName" value="{!IF(acw.con.Name==null,' ',acw.con.Name)}" /> -->
                                <apex:outputLink onmouseover="showPIDiv('{!acw.index}',this)"  onmouseout="hidePIDiv(this)" value="/{!acw.conid}" id="idAddName" target="_blank">{!IF(acw.con.Name==null,' ',acw.con.Name)}</apex:outputLink>
                                <apex:inputText id="idAddHiddenId" value="{!acw.conid}" style="display:none" />
                                <apex:inputText id="AWSDataId" value="{!acw.index}" style="display:none" />
                            </apex:column>
                            <apex:column >
                                <apex:facet name="header">{!$Label.Department_Name}</apex:facet>
force-app/main/default/pages/StartTrading.page
@@ -13,13 +13,31 @@
            selectedIndexContact=myselect.selectedIndex
        }
        function preparePayloadForSearchContact() {
            let accountId = document.getElementById('Page:mainForm:idDayEdit:idDep').value;
            if (accountId != '--无--') {
            // 2022-04-13 ssm 紧急应对 科室和客户人员必填 start
            // let accountId = document.getElementById('Page:mainForm:idDayEdit:idDep').value;
            // if (accountId != '--无--') {
            //     blockme();
            //     console.log('accountId:' + accountId);
            //     //query contact
            //     sforce.connection.sessionId = '{!GETSESSIONID()}';
            //     let result = sforce.connection.query("SELECT Id,Name,AWS_Data_Id__c from Contact where AccountId='" + accountId + "'");//sfid,awsdataId
            //     let dataIds = [];
            //     let records = result.getArray("records");
            //     for (let i = 0; i < records.length; i++) {
            //         dataIds.push(records[i].AWS_Data_Id__c)
            //     }
            //     let searchPayload = new Object();
            //     searchPayload.dataIds = dataIds;
            //     searchPayload.contactName = '';
            //     AWSService.search(staticResources.searchUrl, JSON.stringify(searchPayload), queryBack, staticResources.token);
            // }
            let contactId = document.getElementById('Page:mainForm:idDayEdit:idCon').value;
            if (contactId != undefined) {
                blockme();
                console.log('accountId:' + accountId);
                console.log('contactId:' + contactId);
                //query contact
                sforce.connection.sessionId = '{!GETSESSIONID()}';
                let result = sforce.connection.query("SELECT Id,Name,AWS_Data_Id__c from Contact where AccountId='" + accountId + "'");//sfid,awsdataId
                let result = sforce.connection.query("SELECT Id,Name,AWS_Data_Id__c from Contact where Id='" + contactId + "'");//sfid,awsdataId
                let dataIds = [];
                let records = result.getArray("records");
                for (let i = 0; i < records.length; i++) {
@@ -30,20 +48,22 @@
                searchPayload.contactName = '';
                AWSService.search(staticResources.searchUrl, JSON.stringify(searchPayload), queryBack, staticResources.token);
            }
            // 2022-04-13 ssm 紧急应对 科室和客户人员必填 end
        }
        var queryBack = function queryBack(result) {
            // 2022-04-13 ssm 紧急应对 科室和客户人员必填 start
            let select = document.getElementById('Page:mainForm:idDayEdit:idCon');
            //清除select里面的值
            for (var i = select.childNodes.length - 1; i >= 1; i--) {
                select.removeChild(select.childNodes[i]);
            }
            if (select.options[0] == undefined) {
                let blankValue = new Option();
                blankValue.value = '--无--';
                blankValue.text = '--无--';
                select.options.add(blankValue);
            }
            // if (select.options[0] == undefined) {
            //     let blankValue = new Option();
            //     blankValue.value = '--无--';
            //     blankValue.text = '--无--';
            //     select.options.add(blankValue);
            // }
            for (var i = 0; i < result.object.length; i++) {
                if (result.object[i].sfRecordId) {
                    let a = new Option();
@@ -56,16 +76,19 @@
                var myselect=document.getElementById("Page:mainForm:idDayEdit:idCon").options
                myselect[selectedIndexContact].selected = true;
            }
            // 2022-04-13 ssm 紧急应对 科室和客户人员必填 end
            unblockUI();
        }
        //2021/02/21 张华建 查找客户人员 end
        function requiredCheck() {
            var val = document.getElementById('Page:mainForm:idDayEdit:idDep').selectedIndex;
            if (val == 0) {
                //「診療科名を選択してください。」
                alert('{!$Label.StartTrading_Alert}');
            }
            // 2022-04-13 ssm 紧急应对 科室和客户人员必填 start
            // var val = document.getElementById('Page:mainForm:idDayEdit:idDep').selectedIndex;
            // if (val == 0) {
            //     //「診療科名を選択してください。」
            //     alert('{!$Label.StartTrading_Alert}');
            // }
            // 2022-04-13 ssm 紧急应对 科室和客户人员必填 end
        }
    </script>
    <style>
@@ -94,9 +117,11 @@
                    <td>
                        <apex:selectList value="{!sltDep}" multiselect="false" size="1" id="idDep" style="width:400px;" >
                            <apex:selectOptions value="{!depList}" ></apex:selectOptions>
                            <apex:actionSupport event="onchange" onsubmit="" onbeforedomupdate="" action="{!depChange}" rerender="idCon" oncomplete="preparePayloadForSearchContact()">
                            <!-- 2022-04-13 ssm 紧急应对 科室和客户人员必填 start -->
                            <!-- <apex:actionSupport event="onchange" onsubmit="" onbeforedomupdate="" action="{!depChange}" rerender="idCon" oncomplete="preparePayloadForSearchContact()">
                                <apex:param name="sltD" value="{!sltDep}" />
                            </apex:actionSupport>
                            </apex:actionSupport> -->
                            <!-- 2022-04-13 ssm 紧急应对 科室和客户人员必填 end -->
                        </apex:selectList>
                    </td>
                </tr>
@@ -105,7 +130,10 @@
                    <!-- 担当者 -->
                    <td>{!$ObjectType.Contact.Label}</td>
                    <td>
                        <apex:selectList value="{!sltCon}" onchange="setSelectedIndex()" multiselect="false" size="1" id="idCon" style="width:200px;">
                        <!-- 2022-04-13 ssm 紧急应对 科室和客户人员必填 start -->
                        <!-- <apex:selectList value="{!sltCon}" onchange="setSelectedIndex()" multiselect="false" size="1" id="idCon" style="width:200px;"> -->
                        <!-- 2022-04-13 ssm 紧急应对 科室和客户人员必填 end -->
                        <apex:selectList value="{!sltCon}" multiselect="false" size="1" id="idCon" style="width:200px;">
                            <apex:selectOptions value="{!conList}" />
                        </apex:selectList>
                        <script>
force-app/main/default/pages/StraightBackAddress.page
@@ -424,6 +424,30 @@
                    rc.address_ZipCode__c=addressAwsData[address.AWS_Data_Id__c].zipCode;
                }
                let GetAsset = function(){
                    let ast = new sforce.SObject('Asset');
                    ast.Id = '{!pc.Delivered_Product__c}',
                    ast.address_Contacts__c= contactsName,
                    ast.address_ZipCode__c = address.ZipCode__c,
                    ast.address_City__c = cityName,
                    ast.address_Telephone__c = address.Telephone__c,
                    ast.address_Contacts_Name__c = ContactPerson,
                    ast.Detailed_Address__c= address_str
                    if (addressAwsData.hasOwnProperty(address.AWS_Data_Id__c)) {
                        ast.address_ZipCode__c=addressAwsData[address.AWS_Data_Id__c].zipCode;
                        ast.address_Telephone__c=addressAwsData[address.AWS_Data_Id__c].telephone;
                    }
                    return ast;
                }
                //保存数据到保有设备表中
                let UpdateAsset = function(){
                    let ast = GetAsset();
                    let result = sforce.connection.update([ast]);
                    let b = result[0].getBoolean('success');
                    return b;
                }
                let UpdateRepair = function(callback){
                    AWSService.post(staticResourceRepair.updateUrl,[{
                        dataId:'{!pc.AWS_Data_Id__c}',
@@ -446,7 +470,43 @@
                            rc.Detailed_Address__c = data.object[0].detailedAddress;
                            rc.Detailed_Address_Encrypt__c = data.object[0].detailedAddressEncrypt;
                            UpdateSobject(staticResourceRepair,rc,data.txId,callback);
                            //UpdateSobject(staticResourceRepair,rc,data.txId,callback);
                            Visualforce.remoting.Manager.invokeAction(
                                'StraightBackAddressController.SaveEx',
                                JSON.stringify(rc), JSON.stringify(GetAsset()), address.Id,
                                function (result, event) {
                                    let message = '';
                                    if (event.status) {
                                        if (result) {
                                            message = result;
                                        }else{
                                        }
                                    }else{
                                    }
                                    let tobj = {
                                        txId: data.txId
                                    };
                                    if(message) {
                                        console.log('call sf to insert log');
                                        tobj.isSuccess = 0;
                                    }else {
                                        console.log('call sf Log Id: ' + rc.id);
                                        tobj.sfRecordId = rc.id;
                                        tobj.isSuccess = 1;
                                    }
                                    AWSService.post(staticResource.transactionUrl,tobj,function(data){
                                        if (message) {
                                            ub();
                                            alert(message);
                                        }else{
                                            window.location.href = '/{!RepairId}';
                                        }
                                    },staticResource.token);
                                },
                                { escape: true }
                            );
                        }else{
                            alert('AWS更新修理失败');
                            ub();
@@ -454,24 +514,7 @@
                    },staticResourceRepair.token)
                }
                
                //保存数据到保有设备表中
                let UpdateAsset = function(){
                    let ast = new sforce.SObject('Asset');
                    ast.Id = '{!pc.Delivered_Product__c}',
                    ast.address_Contacts__c= contactsName,
                    ast.address_ZipCode__c = address.ZipCode__c,
                    ast.address_City__c = cityName,
                    ast.address_Telephone__c = address.Telephone__c,
                    ast.address_Contacts_Name__c = ContactPerson,
                    ast.Detailed_Address__c= address_str
                    if (addressAwsData.hasOwnProperty(address.AWS_Data_Id__c)) {
                        ast.address_ZipCode__c=addressAwsData[address.AWS_Data_Id__c].zipCode;
                        ast.address_Telephone__c=addressAwsData[address.AWS_Data_Id__c].telephone;
                    }
                    let result = sforce.connection.update([ast]);
                    let b = result[0].getBoolean('success');
                    return b;
                }
                
                
                let UpdateAddress = function(){
@@ -485,6 +528,8 @@
                }
                
                b();
                UpdateRepair();
                /*
                UpdateRepair(function(data){
                    if (data.isSuccess) {
                       let b = UpdateAsset();
@@ -505,7 +550,7 @@
                        ub();
                        alert('SF更新修理失败');
                    }
                })
                })*/
                
                //页面重定向
                //return redirectPag();
@@ -827,10 +872,10 @@
                <apex:param name="addressDataIds" assignTo="{!addressDataIds}" value=""></apex:param>
            </apex:actionFunction>
            <!-- 采用方法 -->
            <apex:actionFunction name="adoptSave" action="{!adoptSave}" rerender="oppBlock2,message" onComplete="ub();">
            <!--<actionFunction name="adoptSave" action="{!adoptSave}" rerender="oppBlock2,message" onComplete="ub();">
                <apex:param name="adoptId" assignTo="{!adoptId}" value="" />
                <apex:param name="isUpload" assignTo="{!isUpload}" value="" />
            </apex:actionFunction>
            </actionFunction>-->
            <!-- 保存和修改方法 -->
            <apex:actionFunction name="save" action="{!save}" rerender="oppBlock2,message" onComplete="ub();Trans()"></apex:actionFunction>
            <!-- 点击修改按钮获取修改数据方法 -->
force-app/main/default/pages/XinDailyReport.page
@@ -80,6 +80,34 @@
                searchPayload.contactName = '';
                return JSON.stringify(searchPayload);
            }
            function refreshContactAll(){
                let contactIdsFromSF = [];
                // let allSizeForAct =document.getElementById('Page:mainForm:idDayEdit:AllSize').value;
                let allSizeForAct = j$(escapeVfId('idActSize')).value();
                console.log('allSizeForAct:'+allSizeForAct);
                for(let i=0;i<allSizeForAct;i++){
                    for(let j=1;j<6;j++){
                        let contactIdForVis = document.getElementById("Page:mainForm:idDayEdit:idActivities:"+i+":idVisitor"+j+"_IdHidden").value;
                        contactIdsFromSF.push(contactIdForVis);
                    }
                };
                sforce.connection.sessionId = '{!GETSESSIONID()}';
                var condition = '';
                for(var i=0;i<contactIdsFromSF.length;i++){
                    if(contactIdsFromSF[i] != ''){
                        condition += "," + "\'"+contactIdsFromSF[i]+"\'";
                    }
                }
                condition = condition.substr(1);
                console.log('condition = ' + condition);
                var record = sforce.connection.query("select AWS_Data_Id__c from Contact where id in("+condition+")");
                var records = record.getArray("records");
                for(var i =0;i<records.length;i++){
                    contactAWSIds.push(records[i].AWS_Data_Id__c);
                }
                searchContactAll();
            }
            function searchContactAll(){
                let data = preparePayloadForSearchContact();
                let searchCallBack = function searchCallBack(result){
@@ -95,7 +123,8 @@
                        }                    
                    }
                    console.log('AWS Result:'+JSON.stringify(sfIdToContactInfo));
                    let allSizeForAct =document.getElementById('Page:mainForm:idDayEdit:AllSize').value;
                    // let allSizeForAct =document.getElementById('Page:mainForm:idDayEdit:AllSize').value;
                    let allSizeForAct = j$(escapeVfId('idActSize')).value();
                    console.log('Act size:'+allSizeForAct);
                    for(let i=0;i<allSizeForAct;i++){
                        for(let j=1;j<6;j++){
@@ -105,6 +134,8 @@
                                if(sfIdToContactInfo.hasOwnProperty(contactIdForVis)){
                                    document.getElementById("Page:mainForm:idDayEdit:idActivities:"+i+":idVisitor"+j).value = sfIdToContactInfo[contactIdForVis].lastName;
                                }   
                            }else{
                                document.getElementById("Page:mainForm:idDayEdit:idActivities:"+i+":idVisitor"+j).value = '';
                            }                         
                        }
                    }                                       
@@ -1624,7 +1655,7 @@
                                <td>&nbsp;</td>
                                <td><apex:commandButton value="{!$Label.Add_Line}" id="idAddAct" action="{!addActivity}" 
                                    reRender="Activities,idAddActPanel" onClick="blockme();"
                                     onComplete="bindAllDoubleTap();setVisitorPlaceDisabled();unblockUI();initSetPage();"
                                     onComplete="bindAllDoubleTap();setVisitorPlaceDisabled();unblockUI();initSetPage();refreshContactAll();"
                                     style="width:100px;display:{!IF(actSize>14,'none','')}"/></td>
                                <th>&nbsp;</th>
                                <td>&nbsp;</td>