/** * Shopex OMS * * Copyright (c) 2025 Shopex (http://www.shopex.cn) * Licensed under Apache-2.0 with additional terms (See LICENSE file) */ /** * 加解密服务 * * * * * **/ (function(){ Security=new Class({ Implements:[Options,Events], options:{ url:'', clickElement:false, sensitiveBlock:false, showData:false, }, initialize:function(options){ this.setOptions(options); this.options.sensitiveBlock = this.options.clickElement; this.data = []; if (options.clickElement && options.clickElement.hasClass('data-hide')) { this.options.showData = true; } if (this.options.showData) this.getData(); }, getAsyncData:function(){ var _this = this; new Request.JSON({url:this.options.url,onComplete:function(resp){ var data = resp; _this.dealData(data); _this.fireEvent('asyncData',_this); }}).get({}); }, getData:function(){ var data = []; new Request.JSON({async: false,url:this.options.url,onComplete:function(resp){ data = resp; }}).get({}); this.dealData(data); }, dealData:function(data){ data['resp'] = {}; if ($defined(data['encrypt_body']) && typeof data['encrypt_body'] === 'object' && 0 < Object.getLength(data['encrypt_body']) ) { new Request({ async: false, url:data['encrypt_body']['url'], method:'POST', data:data['encrypt_body'], onComplete:function(resp){ resp = JSON.decode(resp); data['resp'] = resp; if (resp.rsp=='succ' && resp.data) { var decrypt = resp.data[data['encrypt_body']['tids']]; Object.each(JSON.decode(data['encrypt_body']['fields']), function(value, key){ if (decrypt[value]) data[key] = decrypt[value]; }); if(decrypt.virtual_number_type){ data['virtual_number_type'] = decrypt.virtual_number_type; } if(decrypt.ship_area && data['ship_addr'].indexOf(decrypt.ship_area) == -1) { data['ship_addr'] = decrypt.ship_area+data['ship_addr']; } } if(resp.order_info){ var decrypt = resp.order_info; Object.each(JSON.decode(data['encrypt_body']['fields']), function(value, key){ if (decrypt[value]) data[key] = decrypt[value]; }); if(decrypt.virtual_number_type){ data['virtual_number_type'] = decrypt.virtual_number_type; data['virtual_identify_number'] = decrypt.virtual_identify_number; } } } }).send(); } console.log(data); this.data = data; }, encrypt:function(){}, decrypt:function(field){ return this.data[field]; }, desHtml:function(){ var params = Array.flatten(arguments).link({ 'sensitiveBlock': Element.type }); if (params.sensitiveBlock) { this.options.sensitiveBlock = params.sensitiveBlock; } if (this.data.error) return MessageBox.error(this.data.error); if (this.options.showData) { this.showContent(); } else { this.hideContent(); } }, showContent:function(){ if (this.options.clickElement) this.options.clickElement.removeClass('data-hide').addClass('data-show'); this.options.sensitiveBlock.getElements(':sensitive-field').each(function(item){ var value = this.decrypt(item.get('sensitive-field')); if (!value) return ; switch (item.tagName){ case 'INPUT': item.value = value; break; default: item.retrieve(item.get('sensitive-field'),item.getText()); var virtualNumberType = this.decrypt('virtual_number_type'); var virtualIdentifyNumber = this.decrypt('virtual_identify_number'); if(virtualNumberType && value.length == 11 && virtualIdentifyNumber){ value = value + '#' + virtualIdentifyNumber; } item.setText(value); if(virtualNumberType){ var text = ' 隐私号可用于发货/联系买家,与真实手机号用法一致'; var desc = ''+'隐私号可用于'+"发货/联系买家"+',与真实手机号用法一致'+'
'+''+'直接联系买家'+''+'
'+'直接拨打隐私号,听到语音提示'+"输入姓名/地址后的4位分机号"+'
'+''+'直接发货'+''+'
'+'请务必复制完整的收件人信息'+"[含中括号及 4 位数字]"+'
'+''+'短信实时转发'+''+'
'+'物流派送后,取件提醒短信会实时转发至买家真实手机号'+'
'+''+'买家可查看取件提醒'+''+'
'+'用隐私号发货的包裹,买家可在拼多多/抖音 App 中订单物流详情页查看取件信息。'+'
'; var _this = this; item.adopt(new Element('span', { text: text, rel: desc, styles:{ 'font-style':'italic', 'color': 'gray' }, events:{ mouseover:function(e){ _this.noticeTips(e); } } })); } if(item.get('sensitive-field') == 'ship_mobile' && this.decrypt('privacy_protection')) { let text=" 默认有效期"+this.decrypt('secret_no_expire_time')+",但会因为消费者签收后提前失效 "+'了解虚拟号'; let _this = this; item.adopt(new Element('span', { html: text, styles:{ 'font-style':'italic', 'color': 'gray' }, })); } break; } },this); }, hideContent:function(){ this.options.clickElement.removeClass('data-show').addClass('data-hide'); this.options.sensitiveBlock.getElements(':sensitive-field').each(function(item){ item.setText(item.retrieve(item.get('sensitive-field'))); }); }, noticeTips:function(e){ var notice = new Tips({ onShow:function(tip,el){ el.addClass('active'); tip.setStyle('display','block'); }, text: function(element){ return element.get('title') || element.get('rel'); } }); var e = new Event(e), el = e.target; notice.attach(el); el.addEvent('mouseleave',function(){ el.removeClass('active'); }); el.fireEvent('mouseenter',e); } }); })();