| <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> | 
|         AWSService.sfSessionId = '{!GETSESSIONID()}'; | 
|         var staticResources = JSON.parse('{!staticResource}'); | 
|         var staticResourcesContact = JSON.parse('{!staticResourceContact}'); | 
|         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}'); | 
|         console.log('{!contactsInfo}'); | 
|         var VLookUpFields = new Set(['Hospital_Name__c', 'Department_Class__c', 'Contact_Name__c', 'Campaign__c']); | 
|         function ProcessPI(leadJson, payloadForNewPI) { | 
|             blockme(); | 
|             if ({!isNewMode}) { | 
|             NewPIToAWS(leadJson, payloadForNewPI) | 
|         }else { | 
|             UpdatePIToAWS(leadJson, payloadForNewPI) | 
|         } | 
|         } | 
|   | 
|         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]); | 
|             } | 
|         } | 
|   | 
|         function getPIPayload(leadJson) { | 
|             let leadPayloadList = []; | 
|             let LastName = leadJson.LastName; | 
|             let Email = leadJson.Email; | 
|             let Phone = leadJson.Phone; | 
|             let leadPIData = new Object(); | 
|             leadPIData.lastName = LastName; | 
|             leadPIData.email = Email; | 
|             leadPIData.phone = Phone; | 
|             leadPIData.sfRecordId = ''; | 
|             console.log('Lead PI Data:' + leadPIData); | 
|             leadPayloadList.push(leadPIData); | 
|             console.log(JSON.stringify(leadPayloadList)); | 
|             return JSON.stringify(leadPayloadList); | 
|         } | 
|   | 
|         function validateFieldValueFormate() { | 
|             let error_msg = ''; | 
|             let textEmail = "[data-id='Email']"; | 
|             let textPhone = "[data-id='Phone']"; | 
|             //Email | 
|             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); | 
|   | 
|             if(phone.value!='' && !/^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){ | 
|                     if(op.value == "*****" && op.selected){ | 
|                         error_msg += ';下拉框不能主动选择密文选项'; | 
|                     } | 
|                 } | 
|             } | 
|   | 
|             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')); | 
|                     if (nodelist[index].id.indexOf('lkwgt') == -1) { | 
|                         let vlookUpNodeId = nodelist[index].id + '_lkid'; | 
|                         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') { | 
|                     //nodelist[index].getAttribute("data-id") | 
|                     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; | 
|                 } 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++; | 
|                 } | 
|             } | 
|             return result; | 
|         } | 
|         function QueryLeadFromAWS() { | 
|             AWSService.query(staticResources.queryUrl, '{!AWSDataId}', queryBack, staticResources.token); | 
|         } | 
|         var queryBack = function queryBack(data) { | 
|             console.log('data = ' + data); | 
|             document.querySelector("[data-id='LastName']").value = data.object.lastName.replace(/"/g,""); | 
|             document.querySelector("[data-id='Phone']").value = data.object.phone.replace(/"/g,""); | 
|             document.querySelector("[data-id='Email']").value = data.object.email.replace(/"/g,""); | 
|             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) { | 
|                 payloadJson.AWS_Data_Id__c = r.object[0].dataId; | 
|             } 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'); | 
|                 } | 
|             } else { | 
|                 // alert(errorMessage); | 
|                 alertErrorMessage(errorMessage); | 
|             } | 
|         } | 
|   | 
|   | 
|         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); | 
|                     } | 
|                     if (blankRequiredFields == '') { | 
|                         blankRequiredFields = blankRequiredFields + fieldLabelValue; | 
|                     } else { | 
|                         blankRequiredFields = blankRequiredFields + ',' + fieldLabelValue; | 
|                     } | 
|   | 
|                 } | 
|             } | 
|             return blankRequiredFields; | 
|         } | 
|         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 | 
|                 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. lead to AWS  | 
|             ProcessPI(leadJson, 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; | 
|             console.log(accountValue); | 
|             if (accountValue != '000000000000000') { | 
|                 let baseUrl = "/apex/SearchContactPage"; | 
|                 let suffixUrl = "?contactId=" + contactNodeId + "&accountId=" + accountValue; | 
|                 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; | 
|         } | 
|         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 contactsInfo = JSON.parse('{!contactsInfo}'); | 
|             let dataId = contactsInfo[sfId]; | 
|             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; | 
|             }) | 
|         } | 
|     </script> | 
|     <div class="bPageTitle"> | 
|         <div class="ptBody"> | 
|             <div class="content"> | 
|                 <img src="/img/s.gif" alt="意向" class="pageTitleIcon" title="意向" /> | 
|                 <h1 class="pageType">潜在客户编辑 | 
|                     <span class="titleSeparatingColon">:</span> | 
|                 </h1> | 
|                 <h2 class="pageDescription"> 新建意向</h2> | 
|                 <div class="blank"> </div> | 
|             </div> | 
|             <div class="links"> | 
|                 <a href="javascript:openPopupFocusEscapePounds(%27https://help.salesforce.com/apex/htdoor?loc=help&target=leads_edit.htm&section=Leads&language=zh_CN&release=234.18.8&instance=CS117&showSplash=true%27, %27Help%27, 700, 600, %27width=700,height=600,resizable=yes,toolbar=yes,status=no,scrollbars=yes,menubar=yes,directories=no,location=no,dependant=no%27, false, false);" | 
|                     title="此页面的帮助 (新窗口)"> | 
|                     <span class="helpLink">此页面的帮助</span> | 
|                     <img src="/img/s.gif" alt="" class="helpIcon" /> | 
|                 </a> | 
|             </div> | 
|         </div> | 
|         <div class="ptBreadcrumb"></div> | 
|     </div> | 
|     <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> | 
|                         <tr> | 
|                             <td class="pbTitle"> | 
|                                 <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('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}" 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:pageblocksectionitem rendered="{!layoutField.isPlaceHolder}"> | 
|                         </apex:pageblocksectionitem> | 
|                     </apex:repeat> | 
|   | 
|                 </apex:pageBlockSection> | 
|             </apex:repeat> | 
|             <script> | 
|                 sfdcPage.appendToOnloadQueue(function () { | 
|                     //1. Set Last Name label | 
|                     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}) { | 
|                         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"); | 
|                 }); | 
|             </script> | 
|             <div class="pbBottomButtons"> | 
|                 <table cellspacing="0" cellpadding="0" border="0"> | 
|                     <tbody> | 
|                         <tr> | 
|                             <td class="pbTitle"> | 
|                                 <img src="/img/s.gif" alt="" class="minWidth" title="" width="1" height="1" /> </td> | 
|                             <td class="pbButton" id="bottomButtonRow"> | 
|                                 <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> | 
|         </apex:pageblock> | 
|   | 
|     </apex:form> | 
| </apex:page> |