Li Jun
2022-04-19 2f183a6b0a83ec3f7d35375d5d25d200efc2a3e1
force-app/main/default/pages/NewAndEditLead.page
@@ -1,49 +1,55 @@
<apex:page standardController="Lead" extensions="NewAndEditLeadController">
<apex:page standardController="Lead" extensions="NewAndEditLeadController" id="page">
    <apex:stylesheet value="{!URLFOR($Resource.blockUIcss)}" />
    <apex:includeScript value="{! URLFOR($Resource.AWSService, 'AWSService.js') }" />
    <apex:includeScript value="{!URLFOR($Resource.jquery183minjs)}" />
    <apex:includeScript value="{!URLFOR($Resource.PleaseWaitDialog)}" />
    <script src="../../soap/ajax/53.0/connection.js" type="text/javascript"></script>
    <style>
        .disabledbutton {
            pointer-events: none;
            opacity: 0.4;
        }
    </style>
    <script>
        var TestToken = 'eyJhbGciOiJIUzUxMiJ9.eyJjcmVhdGVkIjoxNjQzMDk5NDgyNjA2LCJhcHBpZCI6IjZMeml6Y1JmN2g4eUx4MjgiLCJleHAiOjE2NDM3MDQyODJ9.V_94zxiDwEa1jZpOphw9W4QfjmqqKQcjCZ4z31KsDe7SjCF9sxKSKiZe6rp8ML6-namlVSyzqpTeZQ6NJi88Og';
        var AWSAppId = '6LzizcRf7h8yLx28';
        var AWSAppSecret = 'UkLohQcHNjg164SdRc7gnS4rgu4d7FjINM3mtzRbyTS6IrUP5V';
        var NewLeadURL = 'https://52.83.101.205/api/lead/insert';
        var UpdateLeadURL = '';
        var QueryLeadURL = 'https://52.83.101.205/api/lead/query';
        var TransactionURL = "https://52.83.101.205/api/tx/confirm";
        var VLookUpFields = new Set(['Hospital_Name__c', 'Department_Class__c', 'Contact_Name__c', 'Campaign__c']);
        var LeadIdPage = "https://ocsm--stagefull--c.visualforce.com/apex/NewAndEditLead?RecordType=01210000000QiRa";
        // function ProcessPI(payloadForNewPI) {
        //     let TokenURL = "https://52.83.101.205/api/token/getToken?app_id=" + AWSAppId + "&app_secret=" + AWSAppSecret;
        //     console.log('Get Token Process');
        //     fetch(TokenURL, {
        //         method: 'GET',
        //         mode: 'no-cors',
        //         headers: {
        //             'Content-Type': 'application/json'
        //         }
        //     }).then((data) => {
        //         console.log(data.text())
        //         return data.text()
        //     }).then((awsToken) => {
        //         if({!isNewMode}){
        //             NewPIToAWS(awsToken, payloadForNewPI)
        //         }else{
        //             UpdatePIToAWS(awsToken, payloadForNewPI)
        //         }
        //     });
        // }
        AWSService.sfSessionId = '{!GETSESSIONID()}';
        var staticResources = JSON.parse('{!staticResource}');
        var staticResourcesContact = JSON.parse('{!staticResourceContact}');
        var staticResourceInquiryForm = JSON.parse('{!staticResourceInquiryForm}');
        var requiredFieldAPIList = JSON.parse('{!requiredFieldAPIListStr}');
        var fieldAPIToLabelMap = JSON.parse('{!fieldAPIToLabelMapStr}');
        var redirectMode = 'Save';//1. Save 2. SaveAndNew
        var requiredAPIToChangedLabelMap = new Map();
        requiredAPIToChangedLabelMap.set('LastName', '{!PIPL_Name_Label}');
        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} || {!isCloneMode}) {
            NewPIToAWS(leadJson, payloadForNewPI)
        }else {
            UpdatePIToAWS(leadJson, payloadForNewPI)
        }
        }
        function loadAWSAuthentication() {
            console.log('Get Sesion Session');
            sforce.connection.sessionId = '{!GETSESSIONID()}';
            let awsConfiguration = "SELECT App_Id__c,App_Secret__c,New_Lead_URL__c FROM AWS_Integration_Info__mdt  WHERE DeveloperName = 'AWS_Integration_Configuration'";
            let awsConfigurationResult = sforce.connection.query(awsConfiguration);
            let recordsAWSConfiguration = awsConfigurationResult.getArray("records");
            if (recordsAWSConfiguration && recordsAWSConfiguration.length > 0) {
                recordAWSConfiguration = recordsAWSConfiguration[0];
                AWSAppId = recordAWSConfiguration.App_Id__c;
                AWSAppSecret = recordAWSConfiguration.App_Secret__c;
                NewLeadURL = recordAWSConfiguration.New_Lead_URL__c;
        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]);
            }
            console.log('AWS Configuration:' + AWSAppId + '----- APP Secret:' + AWSAppSecret);
        }
        function enableButtonStatus() {
            let btnList = document.getElementsByClassName('btn');
            for (let i = 0; i < btnList.length; i++) {
                enableButton(btnList[i]);
            }
        }
        function getPIPayload(leadJson) {
@@ -63,44 +69,44 @@
        }
        function validateFieldValueFormate() {
            let error_msg = '';
            let textEmail = "[data-id='Email']";
            let textPhone = "[data-id='Phone']";
            //Email
            let email = document.querySelector(textEmail).value;
            let phone = document.querySelector(textPhone).value;
            // let email = document.querySelector(textEmail);
            // if (email.value != '' && !/^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$/.test(email.value)) {
            //     error_msg += ';邮件格式错误';
            // }
            // let phone = document.querySelector(textPhone);
            let regEmail = /^[\w-]{3,12}@[\da-zA-Z]{2,6}\.[a-zA-Z]+$/;
            let regPhone = /^1[3|5|8|7][0-9]\d{4,8}$/;
            // if (phone.value != '' && !/^1[3|5|8|7][0-9]\d{4,8}$/.test(phone.value)) {
            //     error_msg += ';电话号码错误';
            // }
            let emailFormate = regEmail.test(email);
            let phoneFormate = regPhone.test(phone);
            console.log(emailFormate);
            console.log(phoneFormate);
            email.oninput = function () {
                //email
                if (emailFormate) {
                    //phone
                    phone.oninput = function () {
                        if (phoneFormate) {
                            return true;
                        } else {
                            return false;
                        }
            let es = document.getElementsByTagName('select')
            for(let ei in es){
                let e = es[ei];
                for(let opi in e.options){
                    let op = e.options[opi];
                    if(!op)continue;
                    if(op.value == "*****" && op.selected){
                        error_msg += ';下拉框不能主动选择密文选项';
                    }
                } else {
                    return false;
                }
            }
            return true;
            if (error_msg.length > 0 && error_msg[0] == ';') {
                error_msg = error_msg.substring(1);
            }
            return error_msg;
        }
        function getLeadInformation() {
            let nodelist = document.querySelectorAll("[data-id]");
            let result = {}
            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'));
@@ -109,220 +115,272 @@
                        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;
                } else if (nodelist[index].type == 'select-multiple') {
                    //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);
                        }
                    }
                    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;
                }
                let x = index + 1;
                if (x <= nodelist.length - 1 && (nodelist[x].getAttribute("data-id") == nodelist[index].getAttribute("data-id"))) {
                    index++;
                }
            }
            console.log(JSON.stringify(result));
            console.log('lead Number:' + result.Lead_No__c);
            let leadJson = JSON.stringify(result);
            let transId = "11111";
            let AWSDataId = "22222";
            // Visualforce.remoting.Manager.invokeAction(
            //     '{!$RemoteAction.NewAndEditLeadController.saveLead}',
            //     leadJson, transId,{!isNewMode},
            //     function (result, event) {
            //         console.log("result: " + result);
            //         window.open('/' + result.recordId, "_self");
            //     },
            //     { escape: true }
            // );
            return result;
            //第二种
            // let leadJson = {};
            // let fieldApiList = '{!fieldApiListStr}'.substring(1, '{!fieldApiListStr}'.length - 1).replace(/\"/g, "").split(',');
            // for (var i in fieldApiList) {
            //     if(document.querySelector("[data-id=\"" + fieldApiList[i] + "\"]") != null){
            //         leadJson[fieldApiList[i]] = document.querySelector("[data-id=\"" + fieldApiList[i] + "\"]").value;
            //     }else{
            //         leadJson[fieldApiList[i]] = '';
            //     }
            // }
            // return leadJson;
        }
        function QueryLeadFromAWS(awsDataId) {
            fetch(QueryLeadURL + '?dataId=' + awsDataId, {
                method: 'GET',
                headers: {
                    'Content-Type': 'application/json',
                    'pi_token': TestToken
                }
            }).then((data) => {
                console.log('data = ' + data);
                document.querySelector("[data-id='LastName']").value = data.object[0].lastName;
                document.querySelector("[data-id='phone']").value = data.object[0].phone;
                document.querySelector("[data-id='email']").value = data.object[0].email;
            })
        function QueryLeadFromAWS() {
            AWSService.query(staticResources.queryUrl, '{!AWSDataId}', queryBack, staticResources.token);
        }
        function UpdatePIToAWS(awsToken, payloadForNewPI) {
            fetch(UpdateLeadURL, {
                method: 'POST',
                body: payloadForNewPI,
                headers: {
                    'Content-Type': 'application/json',
                    //'token': awsToken
        function QueryLeadFromAWSIFS() {
            //staticResourceInquiryForm
            AWSService.query(staticResourceInquiryForm.queryUrl, '{!AWSDataIdInquiryForm}', queryBackIFS, staticResourceInquiryForm.token);
        }
        var queryBack = function queryBack(data) {
            console.log('data = ' + data);
            document.querySelector("[data-id='LastName']").value = data.object.lastName == null ? '' : data.object.lastName;
            document.querySelector("[data-id='Phone']").value = data.object.phone == null ? '' : data.object.phone;
            document.querySelector("[data-id='Email']").value = data.object.email == null ? '' : data.object.email;
            unblockUI();
        };
        var queryBackIFS = function queryBackIFS(data) {
            console.log('data = ' + data);
            //document.querySelector("[data-id='LastName']").value = document.querySelector("[data-id='Contact_Name__c']").value
            document.querySelector("[data-id='Phone']").value = data.object.phone == null ? '' : data.object.phone;
            document.querySelector("[data-id='Email']").value = data.object.email == null ? '' : data.object.email;
            unblockUI();
        };
        var insertOrUpdateBack = function insertOrUpdateBack(payloadJson, result, isNewMode) {
            console.log(result);
            let r = result;
            console.log('Result from AWS' + r);
            console.log('payloadJson=' + payloadJson);
            payloadJson.LastName = r.object[0].lastName;
            payloadJson.Phone = r.object[0].phone;
            payloadJson.Email = r.object[0].email;
            payloadJson.Name_Encrypted__c = r.object[0].lastNameEncrypt;
            payloadJson.Phone_Encrypted__c = r.object[0].phoneEncrypt;
            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 || {!isCloneMode}) {
                payloadJson.AWS_Data_Id__c = r.object[0].dataId;
                delete payloadJson.OwnerId;
            } else {
                payloadJson.AWS_Data_Id__c = '{!AWSDataId}';
            }
            return payloadJson;
        }
        var redirectCallBack = function redirectCallBack(sfId, errorMessage) {
            if (sfId) {
                if (redirectMode == 'Save') {
                    window.open('/' + sfId, '_self');
                } else if (redirectMode == 'SaveAndNew') {
                    window.open('/setup/ui/recordtypeselect.jsp?ent=' + '{!sobjecttypeForFrontEnd}' + '&retURL=/' + '{!sobjectPrefix}' + '/o&save_new_url=/' + '{!sobjectPrefix}' + '/e?retURL=%2F' + '{!sobjectPrefix}' + '%2Fo', '_self');
                }
            }).then((data) => { return data.json() }).then((result) => {
                let r = JSON.parse(result);
                console.log('Result from AWS' + r);
                leadJson.lastName = r.object[0].lastName;
                leadJson.phone = r.object[0].phone;
                leadJson.email = r.object[0].email;
                leadJson.Name_Encrypted__c = r.object[0].lastNameEncrypt;
                leadJson.Phone_Encrypted__c = r.object[0].phoneEncrypt;
                leadJson.Email_Encrypted__c = r.object[0].emailEncrypt;
                leadJson.AWS_Data_Id__c = '{!AWSDataId}';
                let transId = result.txId;
                let AWSDataId = r.object[0].dataId;
            } else {
                // alert(errorMessage);
                alertErrorMessage(errorMessage);
            }
        }
                // Assign the value to NonPII Data Payload
                //7. New NonPII Data To Salesforce
                Visualforce.remoting.Manager.invokeAction(
                    '{!$RemoteAction.NewAndEditLeadController.saveLead}',
                    leadJson, transId, {!isNewMode},
                function (result, event) {
                    if (event.status) {
                        if (result.stauts == 'success') {
                            //get Lead Id from sf backend
                            let leadId = result.recordId;
                            //8. Confirm Trans to AWS
                            transParameters = {
                                txId: transId,
                                isSuccess: event.status
                            };
                            fetch(TransactionURL, {
                                method: 'POST',
                                body: JSON.stringify(transParameters),
                                headers: {
                                    'Content-Type': 'application/json',
                                    // 'token': awsToken
                                }
                            }).then((result) => {
                                if (JSON.parse(result).status == 0) {
                                    //9. Redirect to lead Id page.
                                    window.location.href = LeadIdPage;
                                    // let data = {
                                    //     transId:result.txId,
                                    //     dataId:dataId,
                                    //     status:result.status
                                    // }
                                    // return JSON.stringify(data);
                                }
                            })
                            // window.open(LeadIdPage);
                            // console.log(result);
                            // window.location.href = LeadIdPage;
                        } else {
                            //result.stauts == 'fail'
                        }
        function UpdatePIToAWS(leadJson, payloadForNewPI) {
            let controllerSaveMethod = '{!$RemoteAction.NewAndEditLeadController.saveLead}';
            let obj = JSON.parse(payloadForNewPI);
            obj[0].dataId = '{!AWSDataId}';
            let payloadForNewPIJson = JSON.stringify(obj);
            AWSService.update(staticResources.updateUrl, leadJson, payloadForNewPIJson, controllerSaveMethod, staticResources.token, staticResources.transactionUrl, false, insertOrUpdateBack, redirectCallBack);
        }
        function NewPIToAWS(leadJson, payloadForNewPI) {
            let controllerSaveMethod = '{!$RemoteAction.NewAndEditLeadController.saveLead}';
            AWSService.insert(staticResources.newUrl, leadJson, payloadForNewPI, controllerSaveMethod, staticResources.token, staticResources.transactionUrl, true, insertOrUpdateBack, redirectCallBack);
        }
        function checkRequiredFieldMsg(formData) {
            let blankRequiredFields = '';
            for (i = 0; i < requiredFieldAPIList.length; i++) {
                if (formData[requiredFieldAPIList[i]]) {
                    continue;
                } else {
                    let fieldAPIValue = requiredFieldAPIList[i]
                    let fieldLabelValue = fieldAPIToLabelMap[fieldAPIValue];
                    if (requiredAPIToChangedLabelMap.has(fieldAPIValue)) {
                        fieldLabelValue = requiredAPIToChangedLabelMap.get(fieldAPIValue);
                    }
                },
                { escape: true }
            );
        }).catch (error => {
            console.log(error);
        });
        }
        function NewPIToAWS(leadJson,awsToken, payloadForNewPI) {
            console.log('Process New PI Data');
            console.log(JSON.stringify(payloadForNewPI));
            fetch(NewLeadURL, {
                method: 'POST',
                body: payloadForNewPI,
                headers: {
                    'Content-Type': 'application/json',
                    'pi_token': awsToken
                }
            }).then((data) => { console.log('data='+data);return data.json() }).then((result) => {
                console.log(result);
                let r = result;
                console.log('Result from AWS' + r);
                console.log('leadJson='+leadJson);
                leadJson.lastName = r.object[0].lastName;
                leadJson.phone = r.object[0].phone;
                leadJson.email = r.object[0].email;
                leadJson.Name_Encrypted__c = r.object[0].lastNameEncrypt;
                leadJson.Phone_Encrypted__c = r.object[0].phoneEncrypt;
                leadJson.Email_Encrypted__c = r.object[0].emailEncrypt;
                leadJson.AWS_Data_Id__c = 'testAWSID';
                let transId = result.txId + '';
                let AWSDataId = r.object[0].dataId;
                // Assign the value to NonPII Data Payload
                //7. New NonPII Data To Salesforce
                Visualforce.remoting.Manager.invokeAction(
                    '{!$RemoteAction.NewAndEditLeadController.saveLead}',
                    JSON.stringify(leadJson), transId, {!isNewMode},
                function (result, event) {
                    if (event.status) {
                        console.log('Lead Id from SF Backend:'+JSON.stringify(result));
                        if (result.status == 'success') {
                            //get Lead Id from sf backend
                            let leadId = result.recordId;
                            window.open('/'+leadId,'_self');
                            //8. Confirm Trans to AWS
                            // transParameters = {
                            //     txId: transId,
                            //     isSuccess: result.status
                            // };
                            // fetch(TransactionURL, {
                            //     method: 'POST',
                            //     body: JSON.stringify(transParameters),
                            //     headers: {
                            //         'Content-Type': 'application/json',
                            //         'pi_token': TestToken
                            //     }
                            // }).then((result) => {
                            //     if (JSON.parse(result).status == 0) {
                            //         //9. Redirect to lead Id page.
                            //         window.location.href = LeadIdPage;
                            //         // let data = {
                            //         //     transId:result.txId,
                            //         //     dataId:dataId,
                            //         //     status:result.status
                            //         // }
                            //         // return JSON.stringify(data);
                            //     }
                            // })
                            // window.open(LeadIdPage);
                            // console.log(result);
                            // window.location.href = LeadIdPage;
                        } else {
                            //result.stauts == 'fail'
                        }
                    if (blankRequiredFields == '') {
                        blankRequiredFields = blankRequiredFields + fieldLabelValue;
                    } else {
                        blankRequiredFields = blankRequiredFields + ',' + fieldLabelValue;
                    }
                },
                { escape: true }
            );
        }).catch (error => {
            console.log(error);
        });
                }
            }
            return blankRequiredFields;
        }
        function saveLeadProcess() {
        function saveLeadProcess(saveMode) {
            disableButtonStatus();
            redirectMode = saveMode;
            console.log('redirectMode' + redirectMode);
            hiddenErrorMsgNode();
            //1. Get Lead Information from Form
            let leadJson = getLeadInformation();
            //2. Validate the Lead field value formate, for example the email formate or phone formate
            // let validationResultMessage = validateFieldValueFormate();
            // console.log(validationResultMessage);
            // if (!validationResultMessage) {
            //     //Popup error message.  - To Do After POC
            //     alert('邮箱或电话号码格式有误');
            // }
            // //3. Prepare the payload for New PI API To AWS - To Do
            let validationResultMessage = validateFieldValueFormate();
            console.log(validationResultMessage);
            if (validationResultMessage) {
                //Popup error message.  - To Do After POC
                alertErrorMessage(validationResultMessage);
                return
            }
            // Check Required Field
            let checkRequiredFieldMsgResult = checkRequiredFieldMsg(leadJson);
            if (checkRequiredFieldMsgResult) {
                alertErrorMessage('{!Input_Required_Field_Msg}' + checkRequiredFieldMsgResult);
                return
            }
            //3. Prepare the payload for New PI API To AWS - To Do
            let payloadForNewPI = getPIPayload(leadJson);
            // //4. Get Authentication Information for AWS
            // loadAWSAuthentication();
            //4. lead to AWS
            ProcessPI(leadJson, payloadForNewPI);
        }
            // //5. lead to AWS
            //ProcessPI(payloadForNewPI);
            awsToken = TestToken;
            NewPIToAWS(leadJson,awsToken, payloadForNewPI)
        function alertErrorMessage(errorMsg) {
            enableButtonStatus();
            let errorMsgNode = document.getElementById("page:form:block:msgContent");
            errorMsg = '错误:无效数据。' + '\n' + errorMsg;
            errorMsgNode.innerText = errorMsg;
            errorMsgNode.className = 'pbError';
            unblockUI();
        }
        function hiddenErrorMsgNode() {
            let errorMsgNode = document.getElementById("page:form:block:msgContent");
            errorMsgNode.innerText = '';
            errorMsgNode.className = '';
        }
        var newSearchContactWindow = null;
        var contactHtmlString = '<img src="/img/s.gif" onclick="searchContact(\'page:form:contactId\')" alt="Reference Document Number Lookup" class="lookupIcon"  title="Reference Document Number Lookup (New Window)"/>';
        function htmlToElement(html) {
            var template = document.createElement('template');
            html = html.trim(); // Never return a text node of whitespace as the result
            template.innerHTML = html;
            return template.content.firstChild;
        }
        function searchContact(contactNodeId) {
            //1. Check account value
            let accountNodeId = document.querySelector("[data-id='Hospital_Name__c']").id + '_lkid';
            let accountValue = document.getElementById(accountNodeId).value;
            let searchContactKeyWord = document.querySelector("[data-id='Contact_Name__c']").value;
            console.log(accountValue);
            if (accountValue != '000000000000000') {
                let baseUrl = "/apex/SearchContactPage";
                let suffixUrl = "?contactId=" + contactNodeId + "&accountId=" + accountValue+"&searchContactKeyWord=" + searchContactKeyWord;
                let newSearchContactParam = 'height=600,width=800,left=100,top=100,dialogHide=true,resizable=no,scrollbars=yes,toolbar=no,status=no';
                newSearchContactWindow = window.open(baseUrl + suffixUrl, 'Popup', newSearchContactParam);
                if (window.focus) {
                    newSearchContactWindow.focus();
                }
                return false;
            } else {
                //alertErrorMessage('{!PIPL_Input_Account_Error_Msg}');
                alertErrorMessage('请先选择医院名');
            }
        }
        function closePopupWindow() {
            if (null != newSearchContactWindow) {
                newSearchContactWindow.close();
            }
            let contactInfoStr = document.getElementById('page:form:contactId').value;
            console.log('closePopup:' + contactInfoStr);
            let contactInfo = JSON.parse(contactInfoStr);
            let contactNodeId = document.querySelector("[data-id='Contact_Name__c']").id + '_lkid';
            document.getElementById(contactNodeId).value = contactInfo.ContactId;
            document.querySelector("[data-id='Contact_Name__c']").value = contactInfo.Name;
            document.querySelector("[data-id='LastName']").value = contactInfo.Name;
        }
        function replaceSearchContactLookup() {
            let lookUpNode = htmlToElement(contactHtmlString);
            console.log(lookUpNode);
            if (!{!isNewMode}) {
                //1. Query Contact from AWS by AWSDataId
                queryContactName()
                //document.querySelector("[data-id='Contact_Name__c']").value = '王奎';
            }
        let parentNode = document.querySelector("[data-id='Contact_Name__c']").parentNode;
        document.querySelector("[data-id='Contact_Name__c']").removeAttribute("onchange");
        parentNode.replaceChild(lookUpNode, document.querySelector("[data-id='Contact_Name__c']").parentNode.children[2]);
        }
        function queryContactName() {
            let sfId = document.getElementById(document.querySelector("[data-id='Contact_Name__c']").id + '_lkid').value;
            let dataId = '';
            if ('{!contactsInfo}' != '') {
                let contactsInfo = JSON.parse('{!contactsInfo}');
                dataId = contactsInfo[sfId];
            } else if ('{!contactDataId}' != '') {
                dataId = '{!contactDataId}';
            }
            let queryBackContactName = function queryBackContactName(result){
                document.querySelector("[data-id='Contact_Name__c']").value = result.object.lastName;
                //document.querySelector("[data-id='LastName']").value = result.object.lastName;
            };
            AWSService.query(staticResourcesContact.queryUrl, dataId, queryBackContactName, staticResourcesContact.token);
            // let url = staticResourcesContact.queryUrl + '?dataId=' + dataId;
            // fetch(url, {
            //     method: 'GET',
            //     headers: {
            //         'Content-Type': 'application/json',
            //         'pi-token': staticResources.token
            //     }
            // }).then((data) => {
            //     return data.json();
            // }).then((result) => {
            //     document.querySelector("[data-id='Contact_Name__c']").value = result.object.lastName;
            // })
        }
        function queryContactName2() {
            let sfId = document.getElementById(document.querySelector("[data-id='Contact_Name__c']").id + '_lkid').value;
            let dataId = '';
            if ('{!contactsInfo}' != '') {
                let contactsInfo = JSON.parse('{!contactsInfo}');
                dataId = contactsInfo[sfId];
            } else if ('{!contactDataId}' != '') {
                dataId = '{!contactDataId}';
            }else{
                //没有进行加密
                document.querySelector("[data-id='LastName']").value = document.querySelector("[data-id='Contact_Name__c']").value;
                return;
            }
            let queryBackContactName = function queryBackContactName(result){
                document.querySelector("[data-id='Contact_Name__c']").value = result.object.lastName;
                document.querySelector("[data-id='LastName']").value = result.object.lastName;
            };
            AWSService.query(staticResourcesContact.queryUrl, dataId, queryBackContactName, staticResourcesContact.token);
        }
    </script>
    <div class="bPageTitle">
@@ -345,10 +403,9 @@
        </div>
        <div class="ptBreadcrumb"></div>
    </div>
    <apex:form >
        <!-- Error Msg-->
        <apex:pageMessages />
        <apex:pageblock >
    <apex:form id="form">
        <apex:inputHidden value="{!contactId}" id="contactId" />
        <apex:pageblock id="block">
            <div class="pbHeader">
                <table cellspacing="0" cellpadding="0" border="0">
                    <tbody>
@@ -357,23 +414,32 @@
                                <img src="/img/s.gif" alt="" class="minWidth" title="" width="1" height="1" />
                                <h2 class="mainTitle">意向编辑</h2>
                            </td>
                            <td class="pbButton" id="topButtonRow">
                                <input class="btn" type="Button" value="保存" onclick="saveLeadProcess()" />
                                <input class="btn" type="Button" value="保存并新建" onclick="saveLeadProcess()" />
                            <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="取消" />
                            </td>
                        </tr>
                    </tbody>
                </table>
            </div>
            <!-- Error Msg-->
            <div style="text-align: center;">
                <apex:outputPanel id="errorMsg">
                    <apex:pageMessages id="msgContent" escape="false" />
                </apex:outputPanel>
            </div>
            <br/>
            <!-- Iterate the layoutSections, which is a list of sections -->
            <apex:repeat value="{!layoutSections}" var="layoutSection">
                <apex:pageBlockSection title="{!layoutSection.name}" collapsible="{!layoutSection.allowCollapse}" columns="{!layoutSection.columns}">
                <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="{!Lead[layoutField.fieldAPI]}" rendered="{!not(layoutField.isPlaceHOlder)}"
                            required="{!layoutField.isRequired}" />
                        <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:pageblocksectionitem rendered="{!layoutField.isPlaceHolder}">
                        </apex:pageblocksectionitem>
                    </apex:repeat>
@@ -382,17 +448,256 @@
            </apex:repeat>
            <script>
                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) {
                                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");
                                    }
                                }
                            }
                        }
                    }
                    //1. Set Last Name label
                    document.querySelector("[data-id='LastName']").parentNode.parentNode.parentNode.children[2].children[0].innerText = '姓名';
                    console.log('NameLabel = ' + '{!PIPL_Name_Label}')
                    document.querySelector("[data-id='LastName']").parentNode.parentNode.parentNode.children[0].children[0].innerText = '{!PIPL_Name_Label}';
                    //2. Query AWS Data by dataId 
                    console.log('Mode for Lead Page:' + {!isNewMode});
                if (!{!isNewMode}) {
                    //2.1. Query AWS Data by
                    let leadPIData = QueryLeadFromAWS({!awsDataId});
                        //2.2. Update the value to Front-End
                        //document.querySelector("[data-id='LastName']").value = '234234';
                    }
                    blockme();//for loading search by Li Jun 20220218
                    QueryLeadFromAWS();
                }
                //Replace Vlookup Field
                replaceSearchContactLookup();
                //3. Set Readonly Attribute
                document.querySelector("[data-id='OwnerId']").classList.add("disabledbutton");
                //是否解密联系人
                if('{!isDecryptContact}' == '1'){
                    queryContactName2();
                }
                //如果是产品咨询单过来的
                if ('{!ifc}' != '') {
                    blockme();
                    //状态
                    document.querySelector("[data-id='Status']").value = '未跟进'
                    //会议询问单
                    if ('{!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}'
                    //客户姓名
                    if ('{!ifc.Contact_Id__c}')
                        document.getElementById(document.querySelector("[data-id='Contact_Name__c']").id + '_lkid').value = '{!ifc.Contact_Id__c}'
                    //医院
                    if ('{!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(document.querySelector("[data-id='Hospital_Name__c']").id+'_lkid').value = '{!ifc.Hospital_ID__c}'
                    //战略科室分类
                    if ('{!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(document.querySelector("[data-id='Department_Class__c']").id+'_lkid').value = '{!ifc.Department_ID__c}'
                    //已有询价名称
                    if ('{!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(document.querySelector("[data-id='Campaign__c']").id +'_lkold').value = '{!ifc.Campaign__c}'
                    if ('{!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}'
                    //电话
                    if ('{!ifc.Phone__c}')
                        document.querySelector("[data-id='Phone']").value = '{!ifc.Phone__c}'
                    //邮件
                    if ('{!ifc.Email__c}')
                        document.querySelector("[data-id='Email']").value = '{!ifc.Email__c}'
                    //咨询单来源
                    if ('{!ifc.LeadSource__c}' && document.querySelector("[data-id='LeadSource']"))
                        document.querySelector("[data-id='LeadSource']").value = '{!ifc.LeadSource__c}'
                    //意向区分
                    if ('{!ifc.Opportunity_Division__c}')
                        document.querySelector("[data-id='Opportunity_Division__c']").value = '{!ifc.Opportunity_Division__c}'
                    //委托事项
                    if ('{!ifc.Request1__c}') {
                        var Request1__c = '{!ifc.Request1__c}';
                        //赋值给第二个多选框
                        var array = Request1__c.split(';');
                        //赋值给第二个多选框
                        for (var i = 0; i < array.length; i++) {
                            for (var j = document.querySelector("[data-id='Request__c']").parentNode.children[1].children[0].children[1].children[0].children[0].options.length - 1; j >= 0; j--) {
                                if (array[i] == document.querySelector("[data-id='Request__c']").parentNode.children[1].children[0].children[1].children[0].children[0].options[j].innerHTML) {
                                    var option = new Option();
                                    option.text = array[i];
                                    option.value = j;
                                    document.querySelector("[data-id='Request__c']").parentNode.children[1].children[0].children[1].children[2].children[0].add(option);
                                }
                            }
                        }
                        //删除第一个多选框的重复值
                        for (var i = 0; i < array.length; i++) {
                            for (var j = document.querySelector("[data-id='Request__c']").parentNode.children[1].children[0].children[1].children[0].children[0].options.length - 1; j >= 0; j--) {
                                if (array[i] == document.querySelector("[data-id='Request__c']").parentNode.children[1].children[0].children[1].children[0].children[0].options[j].innerHTML) {
                                    document.querySelector("[data-id='Request__c']").parentNode.children[1].children[0].children[1].children[0].children[0].options[j] = null;
                                }
                            }
                        }
                    }
                    //紧急
                    if ('{!ifc.Urgent__c}')
                        document.querySelector("[data-id='urgent__c']").checked = '{!ifc.Urgent__c}' == 'false' ? false : true;
                    //公司(科室) = 科室名称
                    if(document.querySelector("[data-id='Company']") && document.querySelector("[data-id='Hospital_Name__c']").value != ''){
                        document.querySelector("[data-id='Company']").value = document.querySelector("[data-id='Hospital_Name__c']").value;
                    }
                    //查找客户姓名
                    queryContactName2();
                    //解密
                    QueryLeadFromAWSIFS();
                    unblockUI();
                }
                document.getElementById('topButtonRow').style = '';
           document.getElementById('bottomButtonRow').style = '';
                let previous_value = {};
                    jQuery(".lookupInput input").each(function(i,e){
                        let je =jQuery(e);
                        let dataid = je.attr('data-id');
                        if(['Contact_Name__c'].indexOf(dataid) < 0) return;
                        jQuery(e).focus(function(){
                            previous_value[this.id] = this.value;
                        })
                        jQuery(e).change(function(){
                            if (previous_value[this.id] != jQuery(this).val()) {
                                document.getElementById(this.id+'_lkid').value = '';
                            }
                        })
                    })
                    jQuery("body").on("change","input[data-id='Hospital_Name__c']",function(){
                        setTimeout(() => {
                            console.log(document.getElementById(this.id+'_lkid').value);
                            var hospitalNameValue = document.getElementById(this.id+'_lkid').value;
                            if (hospitalNameValue != "000000000000000" && hospitalNameValue != '') {
                                console.log("hospitalNameValue = " + hospitalNameValue);
                                var ls = ['Department_Class__c'];
                                setVlookup(ls,hospitalNameValue);
                            }else{
                                clearVlookup('Department_Class__c');
                            }
                        }, 50);
                    });
                //Updated by Li Jun 20220323 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 (['Contact_Name__c'].indexOf(dataid) > -1)
                //     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 = '';
                //         }
                //     }
                // });
                //Updated by Li Jun 20220323 Start
                });
                function setVlookup(lookups, lookup_id){
                    //公司(科室)
                    document.querySelector("[data-id='Company']").value = document.querySelector("[data-id='Hospital_Name__c']").value;
                    let controllerSaveMethod = '{!$RemoteAction.NewAndEditLeadController.queryAccount}';
                    Visualforce.remoting.Manager.invokeAction(
                        controllerSaveMethod,
                        JSON.stringify(lookups), lookup_id,
                        function (result, event) {
                            console.log("result = " + result);
                            if (result != null ){
                                var obj = JSON.parse(result.replaceAll('&'+'quot;','"'));
                                for (let i = 0; i < lookups.length; i++) {
                                    let lookup = lookups[i];
                                    if (!obj[lookup]) {
                                        continue;
                                    }
                                    let ele = document.querySelector("[data-id='"+lookup+"']");
                                    let elei1 = document.getElementById(ele.id + '_lkid');
                                    let elei2 = document.getElementById(ele.id + '_lkold');
                                    ele.value=obj[lookup].Name;
                                    elei1.value = obj[lookup].Id;
                                    elei2.value = obj[lookup].Name;
                                    let inputele = document.querySelector("[data-id='"+lookup+"']").parentNode;
                                    if (inputele.childNodes.length > 4){
                                        inputele.childNodes[0].style = "";
                                        inputele.childNodes[1].style = "display: inline-block;";
                                        inputele.childNodes[2].style = "display: none;";
                                    }
                                }
                            }
                        },
                        { escape: true }
                    );
                };
                function clearVlookup(lookup){
                    let ele = document.querySelector("[data-id='"+lookup+"']");
                    let elei1 = document.getElementById(ele.id + '_lkid');
                    let elei2 = document.getElementById(ele.id + '_lkold');
                    ele.value='';
                    elei1.value = '';
                    elei2.value = '';
                    let inputele = document.querySelector("[data-id='"+lookup+"']").parentNode;
                    if (inputele.childNodes.length > 4){
                        inputele.childNodes[0].style = "display: none;";
                        inputele.childNodes[1].style = "display: none;";
                        inputele.childNodes[2].style = "";
                    }
                }
            </script>
            <div class="pbBottomButtons">
                <table cellspacing="0" cellpadding="0" border="0">
@@ -400,9 +705,9 @@
                        <tr>
                            <td class="pbTitle">
                                <img src="/img/s.gif" alt="" class="minWidth" title="" width="1" height="1" />&nbsp;</td>
                            <td class="pbButtonb" id="bottomButtonRow">
                                <input class="btn" type="Button" value="保存" onclick="saveLeadProcess()" />
                                <input class="btn" type="Button" value="保存并新建" onclick="saveLeadProcess()" />
                            <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="取消" />
                            </td>
                        </tr>