buli
2022-04-06 2d4a8d2dcad5a17127d2c73c48ddc4b67ec79448
force-app/main/default/pages/StraightBackAddress.page
@@ -1,31 +1,278 @@
<!--
  @description       :
  @author            : ChangeMeIn@UserSettingsUnder.SFDoc
  @group             :
  @last modified on  : 03-30-2022
  @last modified by  : ChangeMeIn@UserSettingsUnder.SFDoc
-->
<apex:page controller="StraightBackAddressController"  action="{!init}"  showHeader="false"   sidebar="true" id="allPage"  title="直返收货地址">
    <apex:stylesheet value="{!URLFOR($Resource.blockUIcss)}"/>
    <apex:includeScript value="{!URLFOR($Resource.jquery183minjs)}"/>
    <apex:includeScript value="{!URLFOR($Resource.PleaseWaitDialog)}"/>
    <apex:includeScript value="{!URLFOR($Resource.CommonUtilJs)}"/>
    <apex:includeScript value="{! URLFOR($Resource.AWSService, 'AWSService.js') }" />
    <apex:includeScript value="/soap/ajax/40.0/connection.js"/>
    <script type="text/javascript">
        var checkedTrue;
        window.onload = () => {
        var tableDataStr = '';
        var staticResource = JSON.parse('{!staticResource}');
        var staticResourceContact = JSON.parse('{!staticResourceContact}');
        var staticResourceRepair = JSON.parse('{!staticResourceRepair}');
        var PIData = {};
        var contactDataIds = [];
        var ObjIdDecrypt = '';
        var closeField = '';
        var add_aws_result = '';
        var con_aws_result = '';
        var isAddCon = false;
        var contactInfoStr = '';
        var addressAwsData = {};
        var isBlocking = false;
        function b(){
            if (!isBlocking) {
                blockme();
                isBlocking = true;
            }
        }
        function ub(){
            if (isBlocking) {
                unblockUI();
                isBlocking = false;
            }
        }
        //替换vlookup
        var newSearchContactWindow = null;
        window.onload = function () {
            document.getElementById("tab01").style.height  =  screen.availHeight*0.07+'px';
            document.getElementById("tab02").style.height  =  screen.availHeight*0.53+'px';
            document.getElementById("tab03").style.height  =  screen.availHeight*0.25+'px';
        }
         //编辑按钮
         function onEditorJs(ObjId){
            ObjIdDecrypt = ObjId;
            onEditor(ObjId); 
         }
        //复制按钮
        function onCopyJs(ObjId){
            ObjIdDecrypt = ObjId;
            if(ObjId == ''){
                onCopy('空');//设置为空,便于后端做数据处理
            }else{
                onCopy(ObjId);
            }
        }
        //aws 确认
        function Trans(){
            let b = HasError();
            if(b){
                //清空电话地址邮编
                document.getElementById('allPage:allForm:oppBlock2:UpdAddressId:Telephone__c').value=''
                document.getElementById('allPage:allForm:oppBlock2:UpdAddressId:ZipCode__c').value=''
                document.getElementById('allPage:allForm:oppBlock2:UpdAddressId:Detailed_Address__c').value=''
            }
            //{!IF(isSearchBtn,'searchBtnJs()',false)};
            let b1= false;
            let b2= false;
            let Foo = function(){
                if (b1 && b2 && !b) {
                    window.location.reload();
                }
            }
            AWSService.post(staticResource.transactionUrl, JSON.stringify({
                "txId":add_aws_result.txId,
                "isSuccess":b ? 0 : 1
            }), function(result){
                b1 = true;
                Foo();
            }, staticResource.token);
            if(isAddCon){
                AWSService.post(staticResourceContact.transactionUrl, JSON.stringify({
                    "txId":con_aws_result.txId,
                    "isSuccess":b ? 0 : 1
                }), function(result){
                    b2 = true;
                    Foo();
                }, staticResourceContact.token);
            }else{
                b2 = true;
                Foo();
            }
        }
        function HasError(){
            // if (IsAddmessage) {
            //     return true;
            // }
            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){
                        if (cls.indexOf('error')>-1) {
                            return true;
                        }
                    }
                }
            }
            return false;
        }
        //解密
        function decrypt(){
            if(PIData[ObjIdDecrypt] == null){
                document.getElementById('allPage:allForm:oppBlock2:UpdAddressId:Contacts__c').value = '';
                //document.getElementById('allPage:allForm:oppBlock2:UpdAddressId:contactIdValue').value = '000000000000000';
                document.getElementById('allPage:allForm:oppBlock2:UpdAddressId:Telephone__c').value = '';
                document.getElementById('allPage:allForm:oppBlock2:UpdAddressId:ZipCode__c').value = '';
                document.getElementById('allPage:allForm:oppBlock2:UpdAddressId:Detailed_Address__c').value = '';
            }else{
                document.getElementById('allPage:allForm:oppBlock2:UpdAddressId:Contacts__c').value = PIData[ObjIdDecrypt].lastName!=null?PIData[ObjIdDecrypt].lastName:'';
                document.getElementById('allPage:allForm:oppBlock2:UpdAddressId:Telephone__c').value = PIData[ObjIdDecrypt].telephone;
                document.getElementById('allPage:allForm:oppBlock2:UpdAddressId:ZipCode__c').value = PIData[ObjIdDecrypt].zipCode;
                document.getElementById('allPage:allForm:oppBlock2:UpdAddressId:Detailed_Address__c').value = PIData[ObjIdDecrypt].detailedAddress;
            }
        }
        function getPIPayload() {
            let leadPayloadList = [];
            var telePhone = document.getElementById('allPage:allForm:oppBlock2:UpdAddressId:Telephone__c').value;
            var zipCode = document.getElementById('allPage:allForm:oppBlock2:UpdAddressId:ZipCode__c').value;
            var detailedAddress = document.getElementById('allPage:allForm:oppBlock2:UpdAddressId:Detailed_Address__c').value;
            let leadPIData = new Object();
            leadPIData.telePhone = telePhone;
            leadPIData.zipCode = zipCode;
            leadPIData.detailedAddress = detailedAddress;
            leadPIData.sfRecordId = '';
            leadPayloadList.push(leadPIData);
            console.log(JSON.stringify(leadPayloadList));
            return JSON.stringify(leadPayloadList);
        }
        //保存方法
        function savaJs(){
            blockme();
            save();
            //b();
            if(document.getElementById('allPage:allForm:oppBlock2:UpdAddressId:Create_Contacts__c').value != ''){
                isAddCon = true;
            }
            document.getElementById("errorMsg").innerHTML = '';
            if(!document.getElementById("allPage:allForm:oppBlock2:UpdAddressId:Contacts__c").value&&!document.getElementById("allPage:allForm:oppBlock2:UpdAddressId:Create_Contacts__c").value){
                document.getElementById("errorMsg").innerHTML = '<strong>【联系人】和【联系人(新建)】不能同时为空!</strong> ';
                return;
            }else if(document.getElementById("allPage:allForm:oppBlock2:UpdAddressId:Contacts__c").value&&document.getElementById("allPage:allForm:oppBlock2:UpdAddressId:Create_Contacts__c").value){
                document.getElementById("errorMsg").innerHTML = '<strong>【联系人】和【联系人(新建)】不能同时有值!</strong> ';
                return;
            }
            b();
            console.log('{!insUpdData}')
            if(document.getElementById("allPage:allForm:oppBlock2:UpdAddressId:Create_Contacts__c").value){
                //new contact
                ProcessPI({},GetEditObj('contact'),'contact',function(){
                    //new address
                    ProcessPI({},
                    GetEditObj('address'),'address',function(){
                        save();
                    });
                });
            }else{
                //new address
                ProcessPI({},GetEditObj('address'),'address',function(){
                    save();
                });
            }
        }
        function ProcessPI(sobjJson, payloadForNewPI,type,callback) {
            var sr = ''
            if(type == 'contact'){
                sr = staticResourceContact
            }
            if(type == 'address'){
                sr = staticResource
            }
            let url = sr.newUrl
            /*if (now_edit_id) {
                url = sr.updateUrl
            }*/
            AWSService.post(url, payloadForNewPI, function(result){
                if(type == 'contact'){
                    con_aws_result = result
                }if(type == 'address'){
                    add_aws_result = result
                }
                SetEditObj(type);
                if(callback){
                    callback();
                }
            }, sr.token);
        }
        function SetEditObj(type){
            let obj = GetAWSResultObj(type);
            if(obj){
                if(type=='contact'){
                    document.getElementById("allPage:allForm:oppBlock2:UpdAddressId:Con_AWS_Data_Id__c").value      = obj.dataId;
                    document.getElementById("allPage:allForm:oppBlock2:UpdAddressId:Create_Contacts__c").value      = obj.lastName;
                    document.getElementById("allPage:allForm:oppBlock2:UpdAddressId:LastName_Encrypted__c").value   = obj.lastNameEncrypt;
                }
                if(type=='address'){
                    document.getElementById("allPage:allForm:oppBlock2:UpdAddressId:Add_AWS_Data_Id__c").value              = obj.dataId;
                    document.getElementById("allPage:allForm:oppBlock2:UpdAddressId:Telephone__c").value                    = obj.telephone;
                    document.getElementById("allPage:allForm:oppBlock2:UpdAddressId:Telephone_Encrypted__c").value          = obj.telephoneEncrypt;
                    document.getElementById("allPage:allForm:oppBlock2:UpdAddressId:ZipCode__c").value                      = obj.zipCode;
                    document.getElementById("allPage:allForm:oppBlock2:UpdAddressId:ZipCode_Encrypted__c").value            = obj.zipCodeEncrypt;
                    document.getElementById("allPage:allForm:oppBlock2:UpdAddressId:Detailed_Address__c").value             = obj.detailedAddress;
                    document.getElementById("allPage:allForm:oppBlock2:UpdAddressId:Detailed_Address_Encrypted__c").value   = obj.detailedAddressEncrypt;
                }
            }
        }
        function GetAWSResultObj(type){
            if(type == 'contact'){
                if(con_aws_result && con_aws_result.object && con_aws_result.object.length > 0){
                    return con_aws_result.object[0];
                }
            }
            if(type == 'address'){
                if(add_aws_result && add_aws_result.object && add_aws_result.object.length > 0){
                    return add_aws_result.object[0];
                }
            }
            return null;
        }
        function GetEditObj(type){
            if(type=='contact'){
                //new contact
                return JSON.stringify([{
                    lastName : document.getElementById("allPage:allForm:oppBlock2:UpdAddressId:Create_Contacts__c").value,
                    dataId : document.getElementById("allPage:allForm:oppBlock2:UpdAddressId:Con_AWS_Data_Id__c").value,
                }]);
            }
            if(type == 'address'){
                //new address
                return JSON.stringify([{
                    dataId : document.getElementById("allPage:allForm:oppBlock2:UpdAddressId:Add_AWS_Data_Id__c").value,
                    telephone : document.getElementById("allPage:allForm:oppBlock2:UpdAddressId:Telephone__c").value,
                    zipCode : document.getElementById("allPage:allForm:oppBlock2:UpdAddressId:ZipCode__c").value,
                    detailedAddress : document.getElementById("allPage:allForm:oppBlock2:UpdAddressId:Detailed_Address__c").value,
                }]);
            }
        }
        //复选框选中触发事件
@@ -47,28 +294,244 @@
            }
        }
        function searchBtnJs(){
            blockme();
            searchBtn();
            b();
            var addressDataIds = '';
            //查询地址
            if(document.getElementById('allPage:allForm:searchBlock:txtAddressId').value != ''){
                //发送aws请求,然后再发送给controller
                new Promise(function(resolve, reject){
                    let queryBack = function queryBack(result){
                        if(result.object==null || result.object.length==0){
                            searchBtn('\''+addressName+'\'');
                            return
                        }else{
                            for(var i=0;i<result.object.length;i++){
                                addressDataIds += ',\''+ result.object[i].dataId + '\'';
                                addressAwsData[result.object[i].dataId] = result.object[i];
                            }
                            addressDataIds = addressDataIds.substring(1);
                            resolve('success');
                        }
                    };
                    var addressName = document.getElementById('allPage:allForm:searchBlock:txtAddressId').value;
                    AWSService.post(staticResource.searchUrl,{
                        detailedAddress:addressName.trim()
                    },queryBack,staticResource.token);
                }).then(function(data){
                    console.log('data = '+data)
                    console.log('addressDataIds = '+addressDataIds)
                    searchBtn(addressDataIds);
                });
            }else{
                searchBtn(addressDataIds);
            }
        }
        //加密客户名字段
        // function encryptCustomer(e){
        //     let obj = JSON.parse(payloadForNewPI);
        //     let payloadForNewPIJson = JSON.stringify(obj);
        //     let payloadForNewPI = jQuery(e.target).closest("tr").find("a.cusmer__c");
        //     AWSService.update(staticResources.updateUrl, '', payloadForNewPI, updateMethod, staticResources.token, staticResources.transactionUrl, false, insertOrUpdateBack, redirectCallBack);
        // },
        sforce.connection.sessionId = '{!GETSESSIONID()}';
        function UpdateSobject(staticResource,sobj,transId,callback){
            let result = sforce.connection.update([sobj]);
            let tobj = {
                txId: transId
            };
            let b = result[0].getBoolean('success');
            if(b) {
                console.log('call sf Log Id: ' + result[0].id);
                tobj.sfRecordId = result[0].id;
                tobj.isSuccess = 1;
                //return result[0].id;
            }else {
                console.log('call sf to insert log');
                tobj.isSuccess = 0;
                //return '';
            }
            AWSService.post(staticResource.transactionUrl,tobj,function(data){
                if (callback) {
                    data.isSuccess = b;
                    callback(data)
                }
            },staticResource.token);
        }
        function adoptSaveJs(address,isUpload){
            //由于要把采用时间记录到地址表中,所以新建一个地址对象
            // Address__c DatetimeUpdate = new Address__c();
            // DatetimeUpdate = tableData[i].address;
            //详细地址
            let address_str = address.Detailed_Address__c.trim();
            if (addressAwsData.hasOwnProperty(address.AWS_Data_Id__c)) {
                address_str = addressAwsData[address.AWS_Data_Id__c].detailedAddress;
            }
            let cityName = '';//市
            //市不为空,因为要使用 __r.Name  如果为空,会报错
            if(address.City__c){
                cityName = address.City__r.Name.trim();
                //省 同上
                if(address.Province__c){
                    let ProvinceCity = address.Province__r.Name.trim()+cityName;
                    //防止详细地址里面带着省份和市
                    if(address_str.indexOf(ProvinceCity) < 0){
                        address_str = ProvinceCity + address_str;
                    }
                }
            }
            //联系人
            let contactsName = '';
            if(address.Contacts__c){
                contactsName = address.Contacts__r.Name;
            }
            if (addressAwsData.hasOwnProperty(address.Contacts__r.AWS_Data_Id__c)) {
                contactsName = addressAwsData[address.Contacts__r.AWS_Data_Id__c].lastName;
            }
            //客户
            let ContactPerson = '';
            if(address.Customer__c){
                ContactPerson = address.Customer__r.Name;
            }
            try{
                //保存数据到修理表中
                let rc = new sforce.SObject('Repair__c');
                rc.Id='{!RepairId}';
                rc.address_Contacts__c=contactsName;
                rc.address_ZipCode__c = address.ZipCode__c;
                rc.address_City__c = cityName;
                rc.address_Contacts_Name__c = ContactPerson;
                let AddressTypeIndex = {!AddressTypeIndex};
                //isUpload:是否上传SAP  FSEApplyForRepairTime:SAP修理申请时间
                if(isUpload && '{!pc.SAP_Transfer_time__c}'){
                    rc.Address_type__c = 'X';
                    rc.Address_Type_Index__c = AddressTypeIndex+1;
                }
                rc.address_Telephone__c=address.Telephone__c;
                rc.Detailed_Address__c=address_str;
                if (addressAwsData.hasOwnProperty(address.AWS_Data_Id__c)) {
                    rc.address_Telephone__c=addressAwsData[address.AWS_Data_Id__c].telephone;
                    rc.address_ZipCode__c=addressAwsData[address.AWS_Data_Id__c].zipCode;
                }
                let UpdateRepair = function(callback){
                    AWSService.post(staticResourceRepair.updateUrl,[{
                        dataId:'{!pc.AWS_Data_Id__c}',
                        addressContactsName:rc.address_Contacts_Name__c,
                        addressContacts:rc.address_Contacts__c,
                        addressTelephone:rc.address_Telephone__c,
                        addressZipCode:rc.address_ZipCode__c,
                        detailedAddress:rc.Detailed_Address__c
                    }],function(data){
                        if(data && data.object){
                            console.log(data);
                            rc.address_Contacts_Name__c = data.object[0].addressContactsName;
                            rc.Address_Contacts_Name_Encrypt__c = data.object[0].addressContactsNameEncrypt;
                            rc.address_Contacts__c = data.object[0].addressContacts;
                            rc.Address_Contacts_Encrypt__c = data.object[0].addressContactsEncrypt;
                            rc.address_Telephone__c = data.object[0].addressTelephone;
                            rc.Address_Telephone_Encrypt__c = data.object[0].addressTelephoneEncrypt;
                            rc.address_ZipCode__c = data.object[0].addressZipCode;
                            rc.Address_ZipCode_Encrypt__c = data.object[0].addressZipCodeEncrypt;
                            rc.Detailed_Address__c = data.object[0].detailedAddress;
                            rc.Detailed_Address_Encrypt__c = data.object[0].detailedAddressEncrypt;
                            UpdateSobject(staticResourceRepair,rc,data.txId,callback);
                        }else{
                            alert('AWS更新修理失败');
                            ub();
                        }
                    },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(){
                    let add = new sforce.SObject('Address__c');
                    add.Id = address.Id;
                    //最后把当前时间保存到地址表中,作为采用时间
                    add.Using_Datetime__c = new Date();
                    let result = sforce.connection.update([add]);
                    let b = result[0].getBoolean('success');
                    return b;
                }
                b();
                UpdateRepair(function(data){
                    if (data.isSuccess) {
                       let b = UpdateAsset();
                       if (b) {
                           b = UpdateAddress();
                           if (b) {
                               window.location.href = '/{!RepairId}';
                           }else{
                                ub();
                                alert('采用失败');
                           }
                       }else{
                                ub();
                                alert('采用失败');
                           }
                    }else{
                        ub();
                        alert('SF更新修理失败');
                    }
                })
                //页面重定向
                //return redirectPag();
            }catch( e){
                //失败提示
                //ApexPages.addMessages(e);
            }
        }
        //采用按钮
        function onAdoptJs(objId){
            if(objId != null){
                //判断当前修理单是否已经申请修理
                var uploadTime = '{!FSEApplyForRepairTime}';
                if(uploadTime != 'null'){
                    var prompt  = '由于当前修理单已申请修理,请问是否采用并上传数据到SAP?';
                    if(confirm(prompt)){
                        blockme();
                        adoptSave(objId+"",true);
                    }
                }else{
                    adoptSave(objId+"",false);
        function onAdoptJs(e, address){
            //判断当前修理单是否已经申请修理
            var uploadTime = '{!FSEApplyForRepairTime}';
            if(uploadTime != 'null' && uploadTime){
                var prompt  = '由于当前修理单已申请修理,请问是否采用并上传数据到SAP?';
                if(confirm(prompt)){
                    adoptSaveJs(address,true);
                }
            }
            }else{
                adoptSaveJs(address,false);
            }
        }
       /* function onAdoptJs(){
            if(checkedTrue != null){
                blockme();
                b();
                var lawtable = document.getElementById("tableHeader_L");//获取id为tableHeader_L的table
                var rows = lawtable.rows;//获取所有行 
                var InputObj = rows[checkedTrue].cells[0].getElementsByTagName("input")[0];
@@ -99,30 +562,287 @@
        function refreshJs(){
            window.location.reload();
        }
        //2022 02 28 张华建 display PI Data start
        //queryPI();
        function q1(){
            var index = 0;
            var correct = 0;
            var p = new Promise(function(resolve, reject){
                //查询地址的PI数据
                let searchCallBack = function searchCallBack(result,Id,awsDataId){
                    index++;
                    let contacts = result.object;
                    if(contacts == null){
                        console.log('contacts == null')
                        return;
                    }
                    let temp = {}
                    temp.telephone = result.object.telephone;
                    temp.zipCode = result.object.zipCode;
                    temp.detailedAddress = result.object.detailedAddress;
                    temp.awsDataId = awsDataId;
                    PIData[Id] = temp;
                };
                for(var i=0;i<tableDataStr.length;i++){
                    if(tableDataStr[i].address.AWS_Data_Id__c){
                        correct++;
                        AWSService.queryRepair(staticResource.queryUrl,
                                                tableDataStr[i].address.AWS_Data_Id__c,
                                                tableDataStr[i].address.Id,
                                                tableDataStr[i].address.Contacts__r.AWS_Data_Id__c,
                                                searchCallBack,
                                                staticResource.token);
                    }
                }
                var interval=self.setInterval(function (){
                    console.log('setInterval index= ' + index);
                    if(index == correct){
                        console.log('PIDATA = ' + JSON.stringify(PIData))
                        resolve('success')
                        clearInterval(interval)
                    }
                },1000);
            });
            return p;
        }
        function q2(){
            sforce.connection.sessionId = '{!GETSESSIONID()}';
            var p = new Promise(function(resolve, reject){
                //查询联系人的数据
                let queryBack = function queryBack(result) {
                    let contacts = result.object;
                    if(contacts == null){
                        return;
                    }
                    for(var i=0;i<result.object.length;i++){
                        for(let key in PIData){
                            if(result.object[i].dataId == PIData[key].awsDataId){
                                PIData[key].lastName = result.object[i].lastName;
                            }
                        }
                    }
                }
                var condition = ''
                for(var i=0;i<tableDataStr.length;i++){
                    if(tableDataStr[i].address.Contacts__c){
                        condition += "," + "\'"+tableDataStr[i].address.Contacts__c+"\'";
                    }
                }
                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++){
                    if(records[i].AWS_Data_Id__c){
                        contactDataIds.push(records[i].AWS_Data_Id__c);
                    }
                }
                let searchPayload = new Object();
                searchPayload.dataIds = contactDataIds;
                searchPayload.contactName = '';
                console.log('contactDataIds = ' + contactDataIds);
                AWSService.search(staticResourceContact.searchUrl, JSON.stringify(searchPayload), queryBack, staticResourceContact.token);
            });
        }
        //查询敏感字段
        function queryPI(){
            //b();
            tableDataStr = JSON.parse(document.getElementById('allPage:allForm:tableValueFrontEnd').value);
            PIData = {};
            contactDataIds = [];
            console.log(tableDataStr)
            q1().then(function(data){
                        return q2(data);
                    })
            //ub();
        }
        function showPIDiv(awsDataId){
            if(awsDataId.length == 0 || PIData[awsDataId]==null){
                return
            }
            console.log('awsDataId Value:'+awsDataId);
            let parentNode = document.getElementById(awsDataId);
            let createDiv = document.createElement("div");
            createDiv.id = awsDataId+"_PI";
            let piInformation = '';
            if(PIData[awsDataId].lastName){
                piInformation = '联系人: '+PIData[awsDataId].lastName+
                '\n电话: '+PIData[awsDataId].telephone+
                '\n邮编: '+PIData[awsDataId].zipCode+
                '\n详细地址: '+PIData[awsDataId].detailedAddress
            }else{
                piInformation = '联系人: null'+
                '\n电话: '+PIData[awsDataId].telephone+
                '\n邮编: '+PIData[awsDataId].zipCode+
                '\n详细地址: '+PIData[awsDataId].detailedAddress
            }
            //let piInformation = 'Name:'+contact['943114607025717249'].lastName +'\n' +'Phone:'+contact['943114607025717249'].phone
            createDiv.innerText = piInformation;
            let x=window.event.x;
            let y=window.event.y;
            createDiv.style.left=x;
            createDiv.style.top=y;
            createDiv.style.height='100px';
            createDiv.style.width='100px';
            createDiv.style.background="#dddddd";
            createDiv.style.position = "absolute";
            parentNode.appendChild(createDiv);
            parentNode.style.position = "relative";
        }
        function hidePIDiv(awsDataId){
            if(awsDataId.length == 0 || PIData[awsDataId]==null){
                return
            }
            document.getElementById(awsDataId+'_PI').remove();
        }
        function replaceSearchContactLookup() {
            if(document.getElementById('allPage:allForm:oppBlock2:UpdAddressId:Contacts__c') != null){
                let contactHtmlString = '<img src="/img/s.gif" onclick="searchContact(\'allPage:allForm:contactId\',\'allPage:allForm:oppBlock2:UpdAddressId:Contacts__c\')" alt="Reference Document Number Lookup" class="lookupIcon"  title="Reference Document Number Lookup (New Window)"/>';
                let lookUpNode = htmlToElement(contactHtmlString);
                console.log(lookUpNode);
                let parentNode = document.getElementById('allPage:allForm:oppBlock2:UpdAddressId:Contacts__c').parentNode;
                parentNode.appendChild(lookUpNode);
                if(contactInfoStr){
                    console.log('closePopup:'+contactInfoStr);
                    let contactInfo = JSON.parse(contactInfoStr);
                    let contactNodeId = 'allPage:allForm:oppBlock2:UpdAddressId:contactIdValue';
                    document.getElementById(contactNodeId).value = contactInfo.ContactId;
                    document.getElementById(closeField).value = contactInfo.Name;
                }
            }
        }
        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;
        }
        //自定义lookup查询
        function searchContact(contactNodeId,field){
            closeField = field;
            let accountValue = "";
            if (document.getElementById('allPage:allForm:oppBlock2:UpdAddressId:Customer__r_Name')!=null) {
                let accountNodeId = document.getElementById('allPage:allForm:oppBlock2:UpdAddressId:Customer__r_Name').id + '_lkid';
                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{
                console.log('请先选择客户再选择联系人')
            }
        }
        function closePopupWindow() {
            if (null != newSearchContactWindow) {
                newSearchContactWindow.close();
            }
            contactInfoStr = document.getElementById('allPage:allForm:contactId').value;
            console.log('closePopup:'+contactInfoStr);
            let contactInfo = JSON.parse(contactInfoStr);
            let contactNodeId = 'allPage:allForm:oppBlock2:UpdAddressId:contactIdValue';
            document.getElementById(contactNodeId).value = contactInfo.ContactId;
            document.getElementById(closeField).value = contactInfo.Name;
        }
        //2022 02 28 张华建 display PI Data end
    </script>
    <script type="text/javascript">
        function DecryptAddress(){
            let arr1 = [];let a1=false;
            let arr2 = [];let a2=false;
            j$('td.oraddress').each(function(i,e){
               let did = j$(e).attr('address-data-id');
               if (did) {
                   arr1.push(did);
               }
               did = j$(e).attr('contact-data-id');
               if (did) {
                   arr2.push(did);
               }
            })
            if (arr1.length) {
                b();
                AWSService.post(staticResource.searchUrl,{
                    dataIds:arr1
                },function(data){
                    ub();
                    if(data && data.object && data.object.length > 0){
                        for (let di in data.object) {
                            if (data.object[di] && data.object[di].dataId) {
                                addressAwsData[data.object[di].dataId] = data.object[di];
                            }
                        }
                    }
                },staticResource.token)
            }
            if (arr2.length) {
                b();
                AWSService.post(staticResourceContact.searchUrl,{
                    dataIds:arr2
                },function(data){
                    ub();
                    if(data && data.object && data.object.length > 0){
                        for (let di in data.object) {
                            if (data.object[di] && data.object[di].dataId) {
                                addressAwsData[data.object[di].dataId] = data.object[di];
                            }
                        }
                    }
                },staticResourceContact.token)
            }
        }
    </script>
    <apex:form id="allForm">
        <div id="tab01">
        <apex:inputHidden id="tableValueFrontEnd" value="{!tableDataStr}"/>
        <apex:inputHidden value="{!contactId}" id="contactId"/>
        <apex:inputHidden value="{!insUpdDataStr}" id="insUpdDataStr"/>
        <div id="tab01">
            <!-- 页面数据初始化方法 -->
            <apex:actionFunction name="init" action="{!init}" rerender="oppBlock1,message,checEventFrame" onComplete="unblockUI();"></apex:actionFunction>
            <apex:actionFunction name="init" action="{!init}" rerender="oppBlock1,message,checEventFrame" onComplete="ub();"></apex:actionFunction>
            <!-- 检索数据查询方法 -->
            <apex:actionFunction name="searchBtn" action="{!searchBtn}" rerender="oppBlock1,message,checEventFrame" onComplete="unblockUI();"></apex:actionFunction>
            <apex:actionFunction name="searchBtn" action="{!searchBtn}" rerender="oppBlock1,message,checEventFrame,tableValueFrontEnd" onComplete="ub();DecryptAddress();">
                <apex:param name="addressDataIds" assignTo="{!addressDataIds}" value=""></apex:param>
            </apex:actionFunction>
            <!-- 采用方法 -->
            <apex:actionFunction name="adoptSave" action="{!adoptSave}" rerender="oppBlock2,message" onComplete="unblockUI();">
            <apex: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>
            <!-- 保存和修改方法 -->
            <apex:actionFunction name="save" action="{!save}" rerender="oppBlock2,message" onComplete="unblockUI();{!IF(isSearchBtn,'searchBtnJs()',false)}"></apex:actionFunction>
            <apex:actionFunction name="save" action="{!save}" rerender="oppBlock2,message" onComplete="ub();Trans()"></apex:actionFunction>
            <!-- 点击修改按钮获取修改数据方法 -->
            <apex:actionFunction name="onEditor" action="{!onEditor}" rerender="oppBlock2,checEventFrame" onComplete="unblockUI();">
            <apex:actionFunction name="onEditor" action="{!onEditor}" rerender="oppBlock2,checEventFrame,insUpdDataStr" onComplete="decrypt();ub();">
                <apex:param name="UpdId" assignTo="{!UpdId}" value="" />
            </apex:actionFunction>
            <!-- 复制方法 -->
            <apex:actionFunction name="onCopy" action="{!onCopy}" rerender="oppBlock2,checEventFrame" onComplete="unblockUI();">
            <apex:actionFunction name="onCopy" action="{!onCopy}" rerender="oppBlock2,checEventFrame," onComplete="decrypt();ub();">
                <apex:param name="UpdId" assignTo="{!UpdId}" value="" />
            </apex:actionFunction>
            <!-- 返回父页面 -->
            <apex:actionFunction name="redirectPag" action="{!redirectPag}" rerender="true" onComplete="unblockUI();"></apex:actionFunction>
            <apex:actionFunction name="redirectPag" action="{!redirectPag}" rerender="true" onComplete="ub();"></apex:actionFunction>
        <apex:pageBlock id="searchBlock" tabStyle="Report">
            <table style="border-bottom-width: 0px; font-size:12px;width:100%">
                <tr>
@@ -148,7 +868,7 @@
                            </a>
                        </td>
                        <td style="width: 20%">
                            <apex:commandButton onclick="searchBtnJs();return false;"  rendered="true" value="检索" style="width:60px;"/>
                            <apex:commandButton onclick="searchBtnJs();return false;"  rendered="true" value="检索" style="width:60px;"  onComplete=""/>
                            &nbsp;&nbsp;
                            <!-- <apex:commandButton onclick="onAdoptJs();return false;"  rendered="true" value="采用" style="width:60px;background:#98c1fbf7"/>
                            &nbsp;&nbsp; -->
@@ -199,11 +919,12 @@
                                        <td  align="center"  style="vertical-align: inherit;border-width: 0px 1px 1px 0px;">
                                            <apex:outputText value="{!or.address.Address_Classification__c}" />
                                        </td>
                                        <td align="left"  style="vertical-align: inherit;border-width: 0px 1px 1px 0px;">
                                        <td align="left" class="Customer__c" style="vertical-align: inherit;border-width: 0px 1px 1px 0px;">
                                            <apex:outputfield value="{!or.address.Customer__c}" />
                                        </td>
                                        <td align="left"  style="vertical-align: inherit;border-width: 0px 1px 1px 0px;">
                                            <apex:outputfield value="{!or.address.Contacts__c}" />
                                        <td align="left" class="oraddress" style="vertical-align: inherit;border-width: 0px 1px 1px 0px;" address-data-id="{!or.address.AWS_Data_Id__c}" contact-data-id="{!or.address.Contacts__r.AWS_Data_Id__c}">
                                            <!-- <apex:outputfield value="{!or.address.Contacts__c}" id="{!or.address.Contacts__c}_{!or.address.Id}"/> -->
                                            <a href="#" id="{!or.address.Id}" onmouseover="showPIDiv('{!or.address.Id}')" onmouseout="hidePIDiv('{!or.address.Id}')"  aws-data-id="{!or.address.Contacts__r.AWS_Data_Id__c}">{!or.address.Contacts__r.Name}</a>
                                        </td>
                                        <td align="left" style="vertical-align: inherit;border-width: 0px 1px 1px 0px;">
                                            <apex:outputText value="{!or.address.Telephone__c}" />
@@ -227,23 +948,34 @@
                                            <apex:commandButton value=" 复制 " onclick="onCopyJs('{!or.address.id}');return false;" style="background: #98c1fbf7;display:{!or.canCopy};"/>
                                        </td>
                                        <td align="center" style="vertical-align: inherit;width:30px;">
                                            <apex:commandButton value=" 采用 " onclick="onAdoptJs('{!or.address.id}');return false;" style="background: #98c1fbf7;display:{!or.canAdopt};"/>
                                            <apex:commandButton value=" 采用 " onclick="onAdoptJs(event,JSON.parse('{!or.addressJson}'));return false;" style="background: #98c1fbf7;display:{!or.canAdopt};"/>
                                        </td>
                                    </tr>
                                    <apex:variable value="{!cnt + 1}" var="cnt" />
                                </apex:repeat>
                            </tbody>
                            <script>
                                console.log('queryPI();')
                                queryPI();
                            </script>
                        </table>
                    </apex:outputPanel>
                </apex:pageblocksection>
            </apex:pageBlock>
        </div>
        <div id="tab03">
            <apex:pageBlock id="oppBlock2" tabStyle="Report">
                <apex:pageblocksection title="编辑地址" id="UpdAddressId" rendered="true" columns="4">
                    <apex:inputfield value="{!insUpdData.Address_Classification__c}" id="Address_Classification__c" />
                    <apex:inputfield value="{!insUpdData.Customer__c}" id="Customer__r_Name" required="false" />
                    <apex:inputfield value="{!insUpdData.Contacts__c}" id="Contacts__c" required="false"/>
                    <!-- Before PIPL 20220308 -->
                    <!-- <apex:inputfield value="{!insUpdData.Contacts__c}" id="Contacts__c" required="false"/> -->
                    <!-- Add By Li Jun for PIPL 20220308 Start -->
                    <apex:inputText label="联系人" disabled="true" value="{!contactNameValue}" id="Contacts__c">
                    </apex:inputText>
                    <apex:inputHidden id="contactIdValue" value="{!contactIdValue}"/>
                     <!-- Add By Li Jun for PIPL 20220308 End -->
                    <apex:inputfield value="{!insUpdData.Create_Contacts__c}" id="Create_Contacts__c" required="false"/>
                    <apex:inputfield value="{!insUpdData.Province__c}" id="Province__r_Name" style="" />
@@ -253,20 +985,36 @@
                    <!-- <apex:pageblockSectionItem /> -->
                    <!-- <apex:inputTextarea value="{!insUpdData.Detailed_Address__c}" id="Detailed_Address__c" style="resize:vertical;width: 90%" rows="3" cols="3"/> -->
                    <apex:inputfield value="{!insUpdData.Detailed_Address__c}" id="Detailed_Address__c" style="resize:vertical;width: 98%"/>
                    <div id="errorMsg" class="errorMsg"></div>
                    <apex:inputHidden id="LastName_Encrypted__c"         value="{!newCon.LastName_Encrypted__c}"/>
                    <apex:inputHidden id="Con_AWS_Data_Id__c"            value="{!newCon.AWS_Data_Id__c}"/>
                    <apex:inputHidden id="Add_AWS_Data_Id__c"            value="{!insUpdData.AWS_Data_Id__c}"/>
                    <apex:inputHidden id="Telephone_Encrypted__c"        value="{!insUpdData.Telephone_Encrypted__c}"/>
                    <apex:inputHidden id="ZipCode_Encrypted__c"          value="{!insUpdData.ZipCode_Encrypted__c}"/>
                    <apex:inputHidden id="Detailed_Address_Encrypted__c" value="{!insUpdData.Detailed_Address_Encrypted__c}"/>
                </apex:pageblocksection>
                <div style="text-align: center;">
                    <apex:commandButton value="保存" onclick="savaJs();return false;" rendered="true" />
                    <apex:commandButton immediate="true" value="保存" onclick="savaJs();" rerender="dummy"  />
                </div>
                <script>
                    replaceSearchContactLookup();
                </script>
            </apex:pageBlock>
        </div>
        </div>
    </apex:form>
    <apex:outputPanel id="checEventFrame">
      <script type="text/javascript">
            j$("select option[value='办事处']")[1].remove();
            DecryptAddress();
        </script>
    </apex:outputPanel>
    <script type="javascript/text">
    </script>
</apex:page>