zhb 3 недель назад
Родитель
Сommit
71211d3ee2

+ 23 - 0
vu/assets/js/crypt-helper.js

@@ -0,0 +1,23 @@
+// crypt-helper.js
+
+// CryptoJS 已经由 cdn 引入,可直接使用
+(function () {
+    class CryptToJS {
+        constructor() {
+            this.crypt = CryptoJS;
+            this.secret = 'Believe in yourself.';
+        }
+
+        Encrypt(text) {
+            return this.crypt.AES.encrypt(text, this.secret).toString();
+        }
+
+        Decrypt(text) {
+            if (!text) return "";
+            return this.crypt.AES.decrypt(text, this.secret).toString(this.crypt.enc.Utf8);
+        }
+    }
+
+    // 关键:挂载到 window
+    window.CryptToJS = new CryptToJS();
+})();

Разница между файлами не показана из-за своего большого размера
+ 1 - 0
vu/assets/js/jquery.min.js


+ 28 - 0
vu/assets/js/jquery.qrcode.min.js

@@ -0,0 +1,28 @@
+(function(r){r.fn.qrcode=function(h){var s;function u(a){this.mode=s;this.data=a}function o(a,c){this.typeNumber=a;this.errorCorrectLevel=c;this.modules=null;this.moduleCount=0;this.dataCache=null;this.dataList=[]}function q(a,c){if(void 0==a.length)throw Error(a.length+"/"+c);for(var d=0;d<a.length&&0==a[d];)d++;this.num=Array(a.length-d+c);for(var b=0;b<a.length-d;b++)this.num[b]=a[b+d]}function p(a,c){this.totalCount=a;this.dataCount=c}function t(){this.buffer=[];this.length=0}u.prototype={getLength:function(){return this.data.length},
+write:function(a){for(var c=0;c<this.data.length;c++)a.put(this.data.charCodeAt(c),8)}};o.prototype={addData:function(a){this.dataList.push(new u(a));this.dataCache=null},isDark:function(a,c){if(0>a||this.moduleCount<=a||0>c||this.moduleCount<=c)throw Error(a+","+c);return this.modules[a][c]},getModuleCount:function(){return this.moduleCount},make:function(){if(1>this.typeNumber){for(var a=1,a=1;40>a;a++){for(var c=p.getRSBlocks(a,this.errorCorrectLevel),d=new t,b=0,e=0;e<c.length;e++)b+=c[e].dataCount;
+for(e=0;e<this.dataList.length;e++)c=this.dataList[e],d.put(c.mode,4),d.put(c.getLength(),j.getLengthInBits(c.mode,a)),c.write(d);if(d.getLengthInBits()<=8*b)break}this.typeNumber=a}this.makeImpl(!1,this.getBestMaskPattern())},makeImpl:function(a,c){this.moduleCount=4*this.typeNumber+17;this.modules=Array(this.moduleCount);for(var d=0;d<this.moduleCount;d++){this.modules[d]=Array(this.moduleCount);for(var b=0;b<this.moduleCount;b++)this.modules[d][b]=null}this.setupPositionProbePattern(0,0);this.setupPositionProbePattern(this.moduleCount-
+7,0);this.setupPositionProbePattern(0,this.moduleCount-7);this.setupPositionAdjustPattern();this.setupTimingPattern();this.setupTypeInfo(a,c);7<=this.typeNumber&&this.setupTypeNumber(a);null==this.dataCache&&(this.dataCache=o.createData(this.typeNumber,this.errorCorrectLevel,this.dataList));this.mapData(this.dataCache,c)},setupPositionProbePattern:function(a,c){for(var d=-1;7>=d;d++)if(!(-1>=a+d||this.moduleCount<=a+d))for(var b=-1;7>=b;b++)-1>=c+b||this.moduleCount<=c+b||(this.modules[a+d][c+b]=
+0<=d&&6>=d&&(0==b||6==b)||0<=b&&6>=b&&(0==d||6==d)||2<=d&&4>=d&&2<=b&&4>=b?!0:!1)},getBestMaskPattern:function(){for(var a=0,c=0,d=0;8>d;d++){this.makeImpl(!0,d);var b=j.getLostPoint(this);if(0==d||a>b)a=b,c=d}return c},createMovieClip:function(a,c,d){a=a.createEmptyMovieClip(c,d);this.make();for(c=0;c<this.modules.length;c++)for(var d=1*c,b=0;b<this.modules[c].length;b++){var e=1*b;this.modules[c][b]&&(a.beginFill(0,100),a.moveTo(e,d),a.lineTo(e+1,d),a.lineTo(e+1,d+1),a.lineTo(e,d+1),a.endFill())}return a},
+setupTimingPattern:function(){for(var a=8;a<this.moduleCount-8;a++)null==this.modules[a][6]&&(this.modules[a][6]=0==a%2);for(a=8;a<this.moduleCount-8;a++)null==this.modules[6][a]&&(this.modules[6][a]=0==a%2)},setupPositionAdjustPattern:function(){for(var a=j.getPatternPosition(this.typeNumber),c=0;c<a.length;c++)for(var d=0;d<a.length;d++){var b=a[c],e=a[d];if(null==this.modules[b][e])for(var f=-2;2>=f;f++)for(var i=-2;2>=i;i++)this.modules[b+f][e+i]=-2==f||2==f||-2==i||2==i||0==f&&0==i?!0:!1}},setupTypeNumber:function(a){for(var c=
+j.getBCHTypeNumber(this.typeNumber),d=0;18>d;d++){var b=!a&&1==(c>>d&1);this.modules[Math.floor(d/3)][d%3+this.moduleCount-8-3]=b}for(d=0;18>d;d++)b=!a&&1==(c>>d&1),this.modules[d%3+this.moduleCount-8-3][Math.floor(d/3)]=b},setupTypeInfo:function(a,c){for(var d=j.getBCHTypeInfo(this.errorCorrectLevel<<3|c),b=0;15>b;b++){var e=!a&&1==(d>>b&1);6>b?this.modules[b][8]=e:8>b?this.modules[b+1][8]=e:this.modules[this.moduleCount-15+b][8]=e}for(b=0;15>b;b++)e=!a&&1==(d>>b&1),8>b?this.modules[8][this.moduleCount-
+b-1]=e:9>b?this.modules[8][15-b-1+1]=e:this.modules[8][15-b-1]=e;this.modules[this.moduleCount-8][8]=!a},mapData:function(a,c){for(var d=-1,b=this.moduleCount-1,e=7,f=0,i=this.moduleCount-1;0<i;i-=2)for(6==i&&i--;;){for(var g=0;2>g;g++)if(null==this.modules[b][i-g]){var n=!1;f<a.length&&(n=1==(a[f]>>>e&1));j.getMask(c,b,i-g)&&(n=!n);this.modules[b][i-g]=n;e--; -1==e&&(f++,e=7)}b+=d;if(0>b||this.moduleCount<=b){b-=d;d=-d;break}}}};o.PAD0=236;o.PAD1=17;o.createData=function(a,c,d){for(var c=p.getRSBlocks(a,
+c),b=new t,e=0;e<d.length;e++){var f=d[e];b.put(f.mode,4);b.put(f.getLength(),j.getLengthInBits(f.mode,a));f.write(b)}for(e=a=0;e<c.length;e++)a+=c[e].dataCount;if(b.getLengthInBits()>8*a)throw Error("code length overflow. ("+b.getLengthInBits()+">"+8*a+")");for(b.getLengthInBits()+4<=8*a&&b.put(0,4);0!=b.getLengthInBits()%8;)b.putBit(!1);for(;!(b.getLengthInBits()>=8*a);){b.put(o.PAD0,8);if(b.getLengthInBits()>=8*a)break;b.put(o.PAD1,8)}return o.createBytes(b,c)};o.createBytes=function(a,c){for(var d=
+0,b=0,e=0,f=Array(c.length),i=Array(c.length),g=0;g<c.length;g++){var n=c[g].dataCount,h=c[g].totalCount-n,b=Math.max(b,n),e=Math.max(e,h);f[g]=Array(n);for(var k=0;k<f[g].length;k++)f[g][k]=255&a.buffer[k+d];d+=n;k=j.getErrorCorrectPolynomial(h);n=(new q(f[g],k.getLength()-1)).mod(k);i[g]=Array(k.getLength()-1);for(k=0;k<i[g].length;k++)h=k+n.getLength()-i[g].length,i[g][k]=0<=h?n.get(h):0}for(k=g=0;k<c.length;k++)g+=c[k].totalCount;d=Array(g);for(k=n=0;k<b;k++)for(g=0;g<c.length;g++)k<f[g].length&&
+(d[n++]=f[g][k]);for(k=0;k<e;k++)for(g=0;g<c.length;g++)k<i[g].length&&(d[n++]=i[g][k]);return d};s=4;for(var j={PATTERN_POSITION_TABLE:[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,
+78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],G15:1335,G18:7973,G15_MASK:21522,getBCHTypeInfo:function(a){for(var c=a<<10;0<=j.getBCHDigit(c)-j.getBCHDigit(j.G15);)c^=j.G15<<j.getBCHDigit(c)-j.getBCHDigit(j.G15);return(a<<10|c)^j.G15_MASK},getBCHTypeNumber:function(a){for(var c=a<<12;0<=j.getBCHDigit(c)-
+j.getBCHDigit(j.G18);)c^=j.G18<<j.getBCHDigit(c)-j.getBCHDigit(j.G18);return a<<12|c},getBCHDigit:function(a){for(var c=0;0!=a;)c++,a>>>=1;return c},getPatternPosition:function(a){return j.PATTERN_POSITION_TABLE[a-1]},getMask:function(a,c,d){switch(a){case 0:return 0==(c+d)%2;case 1:return 0==c%2;case 2:return 0==d%3;case 3:return 0==(c+d)%3;case 4:return 0==(Math.floor(c/2)+Math.floor(d/3))%2;case 5:return 0==c*d%2+c*d%3;case 6:return 0==(c*d%2+c*d%3)%2;case 7:return 0==(c*d%3+(c+d)%2)%2;default:throw Error("bad maskPattern:"+
+a);}},getErrorCorrectPolynomial:function(a){for(var c=new q([1],0),d=0;d<a;d++)c=c.multiply(new q([1,l.gexp(d)],0));return c},getLengthInBits:function(a,c){if(1<=c&&10>c)switch(a){case 1:return 10;case 2:return 9;case s:return 8;case 8:return 8;default:throw Error("mode:"+a);}else if(27>c)switch(a){case 1:return 12;case 2:return 11;case s:return 16;case 8:return 10;default:throw Error("mode:"+a);}else if(41>c)switch(a){case 1:return 14;case 2:return 13;case s:return 16;case 8:return 12;default:throw Error("mode:"+
+a);}else throw Error("type:"+c);},getLostPoint:function(a){for(var c=a.getModuleCount(),d=0,b=0;b<c;b++)for(var e=0;e<c;e++){for(var f=0,i=a.isDark(b,e),g=-1;1>=g;g++)if(!(0>b+g||c<=b+g))for(var h=-1;1>=h;h++)0>e+h||c<=e+h||0==g&&0==h||i==a.isDark(b+g,e+h)&&f++;5<f&&(d+=3+f-5)}for(b=0;b<c-1;b++)for(e=0;e<c-1;e++)if(f=0,a.isDark(b,e)&&f++,a.isDark(b+1,e)&&f++,a.isDark(b,e+1)&&f++,a.isDark(b+1,e+1)&&f++,0==f||4==f)d+=3;for(b=0;b<c;b++)for(e=0;e<c-6;e++)a.isDark(b,e)&&!a.isDark(b,e+1)&&a.isDark(b,e+
+2)&&a.isDark(b,e+3)&&a.isDark(b,e+4)&&!a.isDark(b,e+5)&&a.isDark(b,e+6)&&(d+=40);for(e=0;e<c;e++)for(b=0;b<c-6;b++)a.isDark(b,e)&&!a.isDark(b+1,e)&&a.isDark(b+2,e)&&a.isDark(b+3,e)&&a.isDark(b+4,e)&&!a.isDark(b+5,e)&&a.isDark(b+6,e)&&(d+=40);for(e=f=0;e<c;e++)for(b=0;b<c;b++)a.isDark(b,e)&&f++;a=Math.abs(100*f/c/c-50)/5;return d+10*a}},l={glog:function(a){if(1>a)throw Error("glog("+a+")");return l.LOG_TABLE[a]},gexp:function(a){for(;0>a;)a+=255;for(;256<=a;)a-=255;return l.EXP_TABLE[a]},EXP_TABLE:Array(256),
+LOG_TABLE:Array(256)},m=0;8>m;m++)l.EXP_TABLE[m]=1<<m;for(m=8;256>m;m++)l.EXP_TABLE[m]=l.EXP_TABLE[m-4]^l.EXP_TABLE[m-5]^l.EXP_TABLE[m-6]^l.EXP_TABLE[m-8];for(m=0;255>m;m++)l.LOG_TABLE[l.EXP_TABLE[m]]=m;q.prototype={get:function(a){return this.num[a]},getLength:function(){return this.num.length},multiply:function(a){for(var c=Array(this.getLength()+a.getLength()-1),d=0;d<this.getLength();d++)for(var b=0;b<a.getLength();b++)c[d+b]^=l.gexp(l.glog(this.get(d))+l.glog(a.get(b)));return new q(c,0)},mod:function(a){if(0>
+this.getLength()-a.getLength())return this;for(var c=l.glog(this.get(0))-l.glog(a.get(0)),d=Array(this.getLength()),b=0;b<this.getLength();b++)d[b]=this.get(b);for(b=0;b<a.getLength();b++)d[b]^=l.gexp(l.glog(a.get(b))+c);return(new q(d,0)).mod(a)}};p.RS_BLOCK_TABLE=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],
+[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,
+116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12],[5,122,98,1,123,99],[7,73,45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,
+43,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,
+3,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,
+55,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,
+45,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]];p.getRSBlocks=function(a,c){var d=p.getRsBlockTable(a,c);if(void 0==d)throw Error("bad rs block @ typeNumber:"+a+"/errorCorrectLevel:"+c);for(var b=d.length/3,e=[],f=0;f<b;f++)for(var h=d[3*f+0],g=d[3*f+1],j=d[3*f+2],l=0;l<h;l++)e.push(new p(g,j));return e};p.getRsBlockTable=function(a,c){switch(c){case 1:return p.RS_BLOCK_TABLE[4*(a-1)+0];case 0:return p.RS_BLOCK_TABLE[4*(a-1)+1];case 3:return p.RS_BLOCK_TABLE[4*
+(a-1)+2];case 2:return p.RS_BLOCK_TABLE[4*(a-1)+3]}};t.prototype={get:function(a){return 1==(this.buffer[Math.floor(a/8)]>>>7-a%8&1)},put:function(a,c){for(var d=0;d<c;d++)this.putBit(1==(a>>>c-d-1&1))},getLengthInBits:function(){return this.length},putBit:function(a){var c=Math.floor(this.length/8);this.buffer.length<=c&&this.buffer.push(0);a&&(this.buffer[c]|=128>>>this.length%8);this.length++}};"string"===typeof h&&(h={text:h});h=r.extend({},{render:"canvas",width:256,height:256,typeNumber:-1,
+correctLevel:2,background:"#ffffff",foreground:"#000000"},h);return this.each(function(){var a;if("canvas"==h.render){a=new o(h.typeNumber,h.correctLevel);a.addData(h.text);a.make();var c=document.createElement("canvas");c.width=h.width;c.height=h.height;for(var d=c.getContext("2d"),b=h.width/a.getModuleCount(),e=h.height/a.getModuleCount(),f=0;f<a.getModuleCount();f++)for(var i=0;i<a.getModuleCount();i++){d.fillStyle=a.isDark(f,i)?h.foreground:h.background;var g=Math.ceil((i+1)*b)-Math.floor(i*b),
+j=Math.ceil((f+1)*b)-Math.floor(f*b);d.fillRect(Math.round(i*b),Math.round(f*e),g,j)}}else{a=new o(h.typeNumber,h.correctLevel);a.addData(h.text);a.make();c=r("<table></table>").css("width",h.width+"px").css("height",h.height+"px").css("border","0px").css("border-collapse","collapse").css("background-color",h.background);d=h.width/a.getModuleCount();b=h.height/a.getModuleCount();for(e=0;e<a.getModuleCount();e++){f=r("<tr></tr>").css("height",b+"px").appendTo(c);for(i=0;i<a.getModuleCount();i++)r("<td></td>").css("width",
+d+"px").css("background-color",a.isDark(e,i)?h.foreground:h.background).appendTo(f)}}a=c;jQuery(a).appendTo(this)})}})(jQuery);

+ 72 - 0
vu/assets/js/main.js

@@ -0,0 +1,72 @@
+
+!(function($) {
+  "use strict";
+
+  // Toggle .header-scrolled class to #header when page is scrolled
+  $(window).scroll(function() {
+    if ($(this).scrollTop() > 100) {
+      $('#header').addClass('header-scrolled');
+    } else {
+      $('#header').removeClass('header-scrolled');
+    }
+  });
+
+  if ($(window).scrollTop() > 100) {
+    $('#header').addClass('header-scrolled');
+  }
+
+  // Smooth scroll for the navigation menu and links with .scrollto classes
+  $(document).on('click', '.nav-menu a, .mobile-nav a, .scrollto', function(e) {
+    if (location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '') && location.hostname == this.hostname) {
+      e.preventDefault();
+      var target = $(this.hash);
+      if (target.length) {
+
+        var scrollto = target.offset().top;
+        var scrolled = 20;
+
+        if ($('#header').length) {
+          scrollto -= $('#header').outerHeight()
+
+          if (!$('#header').hasClass('header-scrolled')) {
+            scrollto += scrolled;
+          }
+        }
+
+        if ($(this).attr("href") == '#header') {
+          scrollto = 0;
+        }
+
+        $('html, body').animate({
+          scrollTop: scrollto
+        }, 1500, 'easeInOutExpo');
+
+        if ($(this).parents('.nav-menu, .mobile-nav').length) {
+          $('.nav-menu .active, .mobile-nav .active').removeClass('active');
+          $(this).closest('li').addClass('active');
+        }
+
+        if ($('body').hasClass('mobile-nav-active')) {
+          $('body').removeClass('mobile-nav-active');
+          $('.mobile-nav-toggle i').toggleClass('');
+          $('.mobile-nav-overly').fadeOut();
+        }
+        return false;
+      }
+    }
+  });
+
+/* For Mobile navigation */
+  $(".mobNav, .close-btn").on('click',function() {    
+    $('.headerMenu').toggleClass('active');
+    $(this).find('i').toggleClass('fa-times');
+  });
+ 
+ $(".mobNav-footer, .close-btn2").on('click',function() {    
+    $('.headerMenu-footer').toggleClass('active');
+    $(this).find('i').toggleClass('fa-times');
+  });
+
+
+
+})(jQuery);

+ 438 - 0
vu/assets/js/onchainpay.js

@@ -0,0 +1,438 @@
+function safeDecrypt(encryptedData) {
+  try {
+    // 检查数据是否为空或无效
+    if (!encryptedData || encryptedData === 'undefined' || encryptedData === 'null') {
+      console.warn('Empty or invalid encrypted data provided');
+      return '';
+    }
+    // 尝试解密
+    const decrypted = CryptToJS.Decrypt(encryptedData);
+    return decrypted;
+  } catch (error) {
+    console.error('Decryption failed:', error.message);
+    // 返回空字符串而不是抛出错误
+    return '';
+  }
+}
+
+
+function setLang(that) {
+  var jsSrc = (navigator.language || navigator.browserLanguage);
+  // jsSrc = 'ko-IN'
+  if (jsSrc.indexOf('zh-C') >= 0) {
+    that.language = 'cn'
+    that.lang = content['cn'];
+  } else if (jsSrc.indexOf('es') >= 0) {
+    that.language = 'es'
+    that.lang = content['es'];
+  } else if (jsSrc.indexOf('zh-') >= 0) {
+    that.language = 'zhHant'
+    that.lang = content['zhHant'];
+  } else if (jsSrc.indexOf('ar') >= 0) {
+    that.language = 'ar'
+    that.lang = content['ar'];
+  } else if (jsSrc.indexOf('de') >= 0) {
+    that.language = 'de'
+    that.lang = content['de'];
+  } else if (jsSrc.indexOf('id') >= 0) {
+    that.language = 'id'
+    that.lang = content['id'];
+  } else if (jsSrc.indexOf('ko') >= 0 && jsSrc.indexOf('kok') == -1) {
+    that.language = 'ko'
+    that.lang = content['ko'];
+  } else if (jsSrc.indexOf('ms') >= 0) {
+    that.language = 'ms'
+    that.lang = content['ms'];
+  } else if (jsSrc.indexOf('th') >= 0) {
+    that.language = 'th'
+    that.lang = content['th'];
+  } else if (jsSrc.indexOf('vi') >= 0) {
+    that.language = 'vn'
+    that.lang = content['vn'];
+  } else if (jsSrc.indexOf('fa') >= 0) {
+    that.language = 'fa'
+    that.lang = content['fa'];
+  } else if (jsSrc.indexOf('pt') >= 0) {
+    that.language = 'pt'
+    that.lang = content['pt'];
+  } else if (jsSrc.indexOf('tr') >= 0) {
+    that.language = 'tr'
+    that.lang = content['tr'];
+  } else {
+    that.language = 'en'
+    that.lang = content['en'];
+  }
+  sessionStorage.setItem("lang", that.language);
+}
+
+function parseParams(str) {
+  const params = new URLSearchParams(str);
+  return {
+    addresses: params.get('addresses'),
+    successUrl: params.get('successUrl'),
+    amount: params.get('amount'),
+    blockchainEnName: params.get('blockchainEnName'),
+    blockchainName: params.get('blockchainName'),
+    currency: params.get('currency')
+  };
+}
+
+var content = {
+  cn: {
+    item1: "如果你没有任何",
+    item2: ", 可在",
+    item3: "得到",
+    item4: "送出",
+    item5: " (ㄧ次付款)到提供的地址!",
+    item6: "如果你送出任何其他金额,系统无论如何都会接受!",
+    item7: "地址已被复制",
+    item8: "复制",
+    item9: "已支付",
+    item10: "取消",
+    item11: "总计",
+    item12: "支付方式:",
+    item13: "扫码或者点击复制按钮,复制地址进行付款!",
+    item14: "请务必核对收款地址与金额,转账不可撤销",
+    item15: "转账完成后,通常需要1–5分钟 网络确认",
+    item16: "在网络拥堵时,确认时间可能延长,请耐心等待",
+    item17: "若长时间未到账,请保存 交易哈希(TxHash) 并联系客服",
+    item18: "交易确认后,系统将自动更新订单状态",
+    item19: "温馨提示:",
+  },
+  zhHant: {
+    item1: "如果你沒有任何",
+    item2: ", 可在",
+    item3: "得到",
+    item4: "送出",
+    item5: " (ㄧ次付款)到下列提供的地址!",
+    item6: "如果你送出任何其他金額,系統無論如何都會接受!",
+    item7: "地址已複製",
+    item8: "複製",
+    item9: "已支付",
+    item10: "取消",
+    item11: "总计",
+
+  },
+  en: {
+    item1: "If you don't have any",
+    item2: ", at",
+    item3: "you can get",
+    item4: "sent out",
+    item5: "(One payment) to the provided address!",
+    item6: "If you send any other amount, the system will accept it anyway!",
+    item7: "Address copied",
+    item8: "Copy",
+    item9: "Paid",
+    item10: "Cancel",
+    item11: "Total",
+    item12: "Pay with:",
+    item13: "Scan the code or click the copy button to copy the address for payment!",
+    item14: "Please carefully verify the recipient address and amount. Blockchain transactions are irreversible.",
+    item15: "After the transfer is completed, network confirmation usually takes 1–5 minutes.",
+    item16: "During periods of network congestion, confirmation times may be longer. Please wait patiently.",
+    item17: "If the funds are not credited for a long time, please save the transaction hash (TxHash) and contact customer support.",
+    item18: "Once the transaction is confirmed, the system will automatically update the order status.",
+    item19: "Friendly Reminder:",
+  },
+  vn: {
+    item1: "Nếu bạn không có bất kỳ",
+    item2: ", bạn có thể nhận được",
+    item3: "Nhận",
+    item4: "Gửi",
+    item5: " (Thanh toán một lần) đến địa chỉ được cung cấp dưới đây!",
+    item6: "Nếu bạn gửi bất kỳ số tiền khác, hệ thống sẽ chấp nhận mà không cần xác nhận!",
+    item7: "Địa chỉ đã được sao chép",
+    item8: "Sao chép",
+    item9: "Đã thanh toán",
+    item10: "Hủy",
+    item11: "Tổng cộng",
+  },
+  de: {
+    item1: "Wenn du keine hast",
+    item2: "haben, können Sie",
+    item3: "Erhalten",
+    item4: "Senden",
+    item5: " (Einmalzahlung) an die unten angegebene Adresse!",
+    item6: "Wenn Sie einen anderen Betrag senden, akzeptiert das System dies ohne Bestätigung!",
+    item7: "Adresse wurde kopiert",
+    item8: "Kopieren",
+    item9: "Bezahlt",
+    item10: "Abbrechen",
+    item11: "Insgesamt",
+  },
+  es: {
+    item1: "Si no tienes ninguno",
+    item2: ", puedes obtener",
+    item3: "Recibir",
+    item4: "Enviar",
+    item5: " (Pago único) a la dirección proporcionada a continuación!",
+    item6: "Si envías cualquier otra cantidad, el sistema la aceptará sin necesidad de confirmación!",
+    item7: "La dirección se ha copiado",
+    item8: "Copiar",
+    item9: "Pagado",
+    item10: "Cancelar",
+    item11: "Total",
+  },
+  id: {
+    item1: "Jika Anda tidak memiliki",
+    item2: ", Anda dapat mendapatkan",
+    item3: "Dapatkan",
+    item4: "Kirim",
+    item5: " (Pembayaran satu kali) ke alamat yang diberikan di bawah ini!",
+    item6: "Jika Anda mengirim jumlah lain, sistem akan menerimanya tanpa konfirmasi!",
+    item7: "Alamat telah disalin",
+    item8: "Salin",
+    item9: "Dibayar",
+    item10: "Batal",
+    item11: "Total",
+  },
+  ms: {
+    item1: "Jika anda tidak mempunyai",
+    item2: ", anda boleh mendapat",
+    item3: "Dapat",
+    item4: "Hantar",
+    item5: " (Pembayaran satu kali) ke alamat yang diberikan di bawah!",
+    item6: "Jika anda menghantar jumlah lain, sistem akan menerima tanpa pengesahan!",
+    item7: "Alamat telah disalin",
+    item8: "Salin",
+    item9: "Dibayar",
+    item10: "Batal",
+    item11: "Total",
+  },
+  th: {
+    item1: "ถ้าคุณไม่มี",
+    item2: ", คุณสามารถได้รับ",
+    item3: "ได้รับ",
+    item4: "ส่ง",
+    item5: " (การชำระเงินครั้งเดียว) ที่ที่ระบุด้านล่างนี้!",
+    item6: "หากคุณส่งจำนวนเงินอื่นๆ ระบบก็จะยอมรับโดยไม่ต้องยืนยัน!",
+    item7: "ที่อยู่ถูกคัดลอกแล้ว",
+    item8: "คัดลอก",
+    item9: "จ่ายแล้ว",
+    item10: "ยกเลิก",
+    item11: "ทั้งหมด",
+  },
+  ar: {
+    item1: " لم يكن لديك أي",
+    item2: "، يمكنك الحصول على",
+    item3: "احصل على",
+    item4: "إرسال",
+    item5: " (الدفع مرة واحدة) إلى العنوان المقدم أدناه!",
+    item6: "إذا قمت بإرسال أي مبلغ آخر، ستقبل النظام دون الحاجة إلى تأكيد!",
+    item7: "تم نسخ العنوان",
+    item8: "نسخ",
+    item9: "تم الدفع",
+    item10: "إلغاء",
+    item11: "مجموع",
+  },
+  ko: {
+    item1: "당신이 없으면",
+    item2: ", 당신은 받을 수 있습니다",
+    item3: "받기",
+    item4: "보내기",
+    item5: " (일시불) 아래 제공된 주소로!",
+    item6: "다른 금액을 보내도 시스템이 확인없이 받습니다!",
+    item7: "주소가 복사되었습니다",
+    item8: "복사",
+    item9: "지불 완료",
+    item10: "취소",
+    item11: "합계",
+  },
+  pt: {
+    item1: "Se você não tem nenhum",
+    item2: ", pode obter",
+    item3: "Obter",
+    item4: "Enviar",
+    item5: " (Pagamento único) para o endereço fornecido abaixo!",
+    item6: "Se enviar qualquer outro montante, o sistema aceitará sem confirmação!",
+    item7: "O endereço foi copiado",
+    item8: "Copiar",
+    item9: "Pago",
+    item10: "Cancelar",
+    item11: "Total",
+  },
+  fa: {
+    item1: "ااگر هیچ ندارید",
+    item2: "ندارید، می‌توانید",
+    item3: "دریافت",
+    item4: "ارسال",
+    item5: " (پرداخت یکباره) به آدرس زیر!",
+    item6: "اگر مقدار دیگری ارسال کنید، سیستم بدون تایید آن را قبول می‌کند!",
+    item7: "آدرس کپی شده است",
+    item8: "کپی",
+    item9: "پرداخت شده",
+    item10: "لغو",
+    item11: "جمع",
+  },
+  tr: {
+    item1: "Eğer hiç yoksa",
+    item2: ", xxx'te",
+    item3: "alabilirsiniz",
+    item4: "gönderebilirsiniz",
+    item5: " (tek seferlik ödeme) aşağıdaki adrese!",
+    item6: "Başka bir miktar gönderirseniz, sistem yine de kabul eder!",
+    item7: "Adres kopyalandı",
+    item8: "Kopyala",
+    item9: "Ödendi",
+    item10: "İptal",
+    item11: "Toplam",
+  },
+};
+let config = {
+  Pattern: {
+    Password:
+      /^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?!.*([~!@&%$^\\(\\)#_]).*\\1.*\\1.*\\1)[A-Za-z0-9~!@&%$^\\(\\)#_]{8,16}$/,
+  },
+};
+
+let vm = new Vue({
+  el: "#onchainpay",
+  data() {
+    return {
+      imgUrl: "",
+      ho: "",
+      //多语言
+      langList: {
+        en: "ENGLISH",
+        cn: "中文简体",
+        zhHant: "中文繁體",
+        vn: "Tiếng Việt",
+        de: "Deutsch",
+        es: "Español",
+        id: "Indonesian",
+        ms: "Melayu",
+        th: "ภาษาไทย",
+        ar: "العربية",
+        ko: "한국어",
+        pt: "Português",
+        fa: "زبان پارسی",
+        tr: "Türkçe",
+      },
+      language: "cn",
+      lang: {},
+      Host04: '',
+      addresses: "",
+      successUrl: "",
+      amount: "",
+      currency: "",
+      isShow: false,
+    };
+  },
+  computed: {
+    // AccessToken(){
+    //   return{
+    //     'Access-Token': window.location.search.split('?token=')[1]
+    //   }
+    // }
+    shortAddress() {
+      const addr = this.addresses || '';
+      if (addr.length > 16) {
+        return addr.slice(0, 8) + '...' + addr.slice(-8);
+      }
+      return addr;
+    },
+    name() {
+      return this.language == "en" ? this.blockchainEnName : this.blockchainName;
+    },
+  },
+  methods: {
+    // 语言切换函数
+    chooseLang(key) {
+      this.lang = content[key];
+      this.language = key;
+      sessionStorage.setItem("lang", this.language);
+    },
+
+    // 复制分享链接
+    CopyShareLink() {
+      // 优先使用现代API
+      if (navigator.clipboard) {
+        navigator.clipboard.writeText(this.addresses).then(() => {
+          this.$message.success(this.lang.item7 || '地址已复制');
+        }).catch(() => {
+          this.$message.error('复制失败');
+        });
+      } else {
+        // 兼容旧浏览器
+        const input = document.createElement('input');
+        input.value = this.addresses;
+        document.body.appendChild(input);
+        input.select();
+        try {
+          document.execCommand('copy');
+          this.$message.success(this.lang.item7 || '地址已复制');
+        } catch (e) {
+          this.$message.error('复制失败');
+        }
+        document.body.removeChild(input);
+      }
+    },
+    //成功跳转页面
+    Pay() {
+      window.location.href = this.Host04 + this.successUrl;
+    },
+    //取消关闭页面
+    Cancle() {
+      if (navigator.userAgent.indexOf("MSIE") > 0) {
+        // close IE
+        if (navigator.userAgent.indexOf("MSIE 6.0") > 0) {
+          window.opener = null;
+          window.close();
+        } else {
+          window.open("", "_top", "");
+          window.top.close();
+        }
+      } else {
+        // close chrome;It is effective when it is only one.
+        window.opener = null;
+        window.open("", "_self", "");
+        window.close();
+      }
+    },
+
+  },
+  mounted() {
+    let ht = window.location.protocol;
+    let ho = window.location.host.split('.')[1];
+    this.Host04 = ht + "//pay." + ho + ".com"
+    try {
+      const searchParams = new URLSearchParams(window.location.search);
+      let params = searchParams.get('params');
+      this.isShow = false
+      if (params) {
+        const str = parseParams(safeDecrypt(params));
+        this.addresses = str.addresses
+        this.successUrl = str.successUrl
+        // 去除末尾多余的0和小数点
+        if (str.amount) {
+          let amt = str.amount;
+          if (typeof amt === 'string') {
+            amt = amt.replace(/(\.\d*?[1-9])0+$/, '$1').replace(/\.0+$/, '').replace(/\.$/, '');
+          }
+          this.amount = amt;
+        } else {
+          this.amount = str.amount;
+        }
+        this.currency = str.currency
+        this.blockchainEnName = str.blockchainEnName
+        this.blockchainName = str.blockchainName
+        this.isShow = true;
+        this.$nextTick(() => {
+          if (sessionStorage.getItem("lang")) {
+            this.language = sessionStorage.getItem("lang");
+            this.lang = content[this.language];
+          } else {
+            if (!this.lang?.item1) {
+              setLang(this)
+            }
+          }
+          jQuery('#qrcode').qrcode({ width: 200, height: 200, correctLevel: 0, text: this.addresses });
+        });
+      } else {
+        this.isShow = false
+      }
+    } catch (error) {
+      console.error('解析URL参数时出错:', error);
+    }
+  },
+});

+ 302 - 0
vu/assets/js/payment.js

@@ -0,0 +1,302 @@
+
+var content = {
+  'cn':{
+    item1:'支付订单确认中...',
+    item2:'支付订单正在确认中,具体信息以',
+    item3:'个人专区',
+    item4:'中的订单为准。',
+    item5:'若有任何疑问或帮助,请致电',
+    item6:'400 842 4626',
+    item7:'或发送邮件至',
+    item8:'service@cwgmarkets.com',
+    item9:'与我们联系。我们的客服支持团队期待您的垂询。',
+    item10:'一般风险警告:',
+    item11:'差价合约 (CFD) 是杠杆产品。差价合约(CFD)交易存在较高风险,因此可能不适用于所有投资人。投资价值既可能增加也可能减少,而且投资人可能损失他们所有的投资。在任何情况下,本公司对任何个人或实体由差价合约(CFD)交易造成的或产生的或关联的全部或部分损失或损害,都不承担任何责任。',
+    item12:'www.cwgmarkets.com'
+  },
+  'en':{
+    item1:'Payment order confirming...',
+    item2:'Payment order is being confirmed, specific information is subject to',
+    item3:'Personal Area',
+    item4:'orders.',
+    item5:'If you have any questions or need assistance, please call',
+    item6:'400 842 4626',
+    item7:'or email',
+    item8:'service@cwgmarkets.com',
+    item9:'to contact us. Our customer support team looks forward to your inquiry.',
+    item10:'General Risk Warning:',
+    item11:'Contracts for Difference (CFDs) are leveraged products. CFD trading carries a high level of risk and may not be suitable for all investors. The value of investments can both increase and decrease, and investors may lose all their invested capital. In any case, the Company shall not be liable for any loss or damage, in whole or in part, arising from or related to Contracts for Difference (CFD) trading incurred or incurred by any individual or entity.',
+    item12:'www.cwgmarkets.com'
+  },
+  'zhHant':{
+    item1:'支付訂單確認中...',
+    item2:'支付訂單正在確認中,具體信息以',
+    item3:'個人專區',
+    item4:'中的訂單為準。 ',
+    item5:'若有任何疑問或幫助,請致電',
+    item6:'400 842 4626',
+    item7:'或寄郵件至',
+    item8:'service@cwgmarkets.com',
+    item9:'與我們聯絡。我們的客服支援團隊期待您的詢問。 ',
+    item10:'一般風險警告:',
+    item11:'差價合約 (CFD) 是槓桿產品。差價合約(CFD)交易有較高風險,因此可能不適用於所有投資人。投資價值既可能增加也可能減少,投資人可能損失他們所有的投資。在任何情況下,本公司對任何個人或實體由差價合約(CFD)交易造成的或產生的或關聯的全部或部分損失或損害,都不承擔任何責任。 ',
+    item12:'www.cwgmarkets.com'
+  },
+  'vn':{
+    item1:'Xác nhận đơn hàng thanh toán...',
+    item2:'Đơn hàng thanh toán đang được xác nhận, thông tin cụ thể tùy thuộc vào',
+    item3:'Khu vực cá nhân',
+    item4:'đơn hàng.',
+    item5:'Nếu bạn có bất kỳ câu hỏi hoặc cần hỗ trợ, vui lòng gọi',
+    item6:'400 842 4626',
+    item7:'hoặc email',
+    item8:'service@cwgmarkets.com',
+    item9:'để liên hệ với chúng tôi. Đội ngũ hỗ trợ khách hàng của chúng tôi rất mong đợi sự truy vấn của bạn.',
+    item10:'Cảnh báo Rủi ro Tổng quan:',
+    item11:'Hợp đồng Chênh lệch (CFDs) là các sản phẩm ký quỹ. Giao dịch CFD mang mức độ rủi ro cao và có thể không phù hợp cho tất cả các nhà đầu tư. Giá trị của các khoản đầu tư có thể tăng lên và giảm đi, và các nhà đầu tư có thể mất toàn bộ vốn đầu tư của họ. Trong mọi trường hợp, Công ty sẽ không chịu trách nhiệm cho bất kỳ tổn thất hoặc thiệt hại, toàn bộ hoặc một phần, phát sinh từ hoặc liên quan đến việc giao dịch Hợp đồng Chênh lệch (CFD) bị gây ra hoặc phát sinh bởi bất kỳ cá nhân hoặc thực thể nào.',
+    item12:'www.cwgmarkets.com'
+  },
+  'de':{
+    item1:'Zahlungsauftrag bestätigen...',
+    item2:'Der Zahlungsauftrag wird bestätigt, spezifische Informationen unterliegen',
+    item3:'dem persönlichen Bereich',
+    item4:'Bestellungen.',
+    item5:'Wenn Sie Fragen haben oder Unterstützung benötigen, rufen Sie bitte an',
+    item6:'400 842 4626',
+    item7:'oder E-Mail',
+    item8:'service@cwgmarkets.com',
+    item9:'um uns zu kontaktieren. Unser Kundensupport-Team freut sich auf Ihre Anfrage.',
+    item10:'Allgemeine Risikowarnung:',
+    item11:'Differenzkontrakte (CFDs) sind gehebelte Produkte. Der Handel mit CFDs birgt ein hohes Risiko und ist möglicherweise nicht für alle Anleger geeignet. Der Wert von Investitionen kann sowohl steigen als auch fallen, und Anleger können ihr gesamtes investiertes Kapital verlieren. In jedem Fall haftet das Unternehmen nicht für Verluste oder Schäden, ganz oder teilweise, die sich aus oder im Zusammenhang mit dem Handel mit Differenzkontrakten (CFD) ergeben oder entstanden sind, die von einer Einzelperson oder Einrichtung erlitten wurden oder entstanden sind.',
+    item12:'www.cwgmarkets.com'
+  },
+  'es':{
+    item1:'Confirmación del pedido de pago...',
+    item2:'El pedido de pago está siendo confirmado, la información específica está sujeta a',
+    item3:'el Área Personal',
+    item4:'órdenes.',
+    item5:'Si tiene alguna pregunta o necesita ayuda, llame al',
+    item6:'400 842 4626',
+    item7:'o envíe un correo electrónico a',
+    item8:'service@cwgmarkets.com',
+    item9:'para contactarnos. Nuestro equipo de soporte al cliente espera su consulta.',
+    item10:'Advertencia de Riesgo General:',
+    item11:'Los Contratos por Diferencia (CFDs) son productos apalancados. El trading de CFD conlleva un alto nivel de riesgo y puede no ser adecuado para todos los inversores. El valor de las inversiones puede tanto aumentar como disminuir, y los inversores pueden perder todo su capital invertido. En cualquier caso, la Empresa no será responsable de ninguna pérdida o daño, en su totalidad o en parte, derivados o relacionados con la negociación de Contratos por Diferencia (CFD) incurridos o sufridos por cualquier individuo o entidad.',
+    item12:'www.cwgmarkets.com'
+  },
+  'id':{
+    item1:'Konfirmasi pesanan pembayaran...',
+    item2:'Pesanan pembayaran sedang dikonfirmasi, informasi spesifik tunduk pada',
+    item3:'Area Personal',
+    item4:'pesanan.',
+    item5:'Jika Anda memiliki pertanyaan atau membutuhkan bantuan, silakan hubungi',
+    item6:'400 842 4626',
+    item7:'atau email',
+    item8:'service@cwgmarkets.com',
+    item9:'untuk menghubungi kami. Tim dukungan pelanggan kami menantikan pertanyaan Anda.',
+    item10:'Peringatan Risiko Umum:',
+    item11:'Kontrak untuk Perbedaan (CFD) adalah produk berleveraj. Perdagangan CFD membawa tingkat risiko yang tinggi dan mungkin tidak cocok untuk semua investor. Nilai investasi dapat meningkat dan menurun, dan investor dapat kehilangan seluruh modal yang diinvestasikan. Dalam setiap kasus, Perusahaan tidak bertanggung jawab atas kerugian atau kerusakan, sebagian atau seluruhnya, yang timbul dari atau terkait dengan perdagangan Kontrak untuk Perbedaan (CFD) yang terjadi atau diderita oleh individu atau entitas mana pun.',
+    item12:'www.cwgmarkets.com'
+  },
+  'ms':{
+    item1:'Mengesahkan pesanan pembayaran...',
+    item2:'Pesanan pembayaran sedang disahkan, maklumat tertentu tertakluk kepada',
+    item3:'Kawasan Peribadi',
+    item4:'pesanan.',
+    item5:'Jika anda mempunyai sebarang pertanyaan atau perlukan bantuan, sila hubungi',
+    item6:'400 842 4626',
+    item7:'atau e-mel',
+    item8:'service@cwgmarkets.com',
+    item9:'untuk menghubungi kami. Pasukan sokongan pelanggan kami mengharapkan pertanyaan anda.',
+    item10:'Amaran Risiko Am:',
+    item11:'Kontrak untuk Perbezaan (CFDs) adalah produk berleveraj. Perdagangan CFD membawa tahap risiko yang tinggi dan mungkin tidak sesuai untuk semua pelabur. Nilai pelaburan boleh meningkat dan menurun, dan pelabur boleh kehilangan semua modal yang dilaburkan. Dalam mana-mana kes, Syarikat tidak akan bertanggungjawab atas sebarang kerugian atau kerosakan, keseluruhannya atau sebahagiannya, yang timbul daripada atau berkaitan dengan perdagangan Kontrak untuk Perbezaan (CFD) yang ditanggung atau dialami oleh mana-mana individu atau entiti.',
+    item12:'www.cwgmarkets.com'
+  },
+  'th':{
+    item1:'ยืนยันคำสั่งการชำระเงิน...',
+    item2:'คำสั่งการชำระเงินกำลังรอการยืนยัน ข้อมูลเฉพาะอยู่ภายใต้',
+    item3:'พื้นที่ส่วนตัว',
+    item4:'รายการ',
+    item5:'หากคุณมีข้อสงสัยหรือต้องการความช่วยเหลือ โปรดโทร',
+    item6:'400 842 4626',
+    item7:'หรืออีเมล',
+    item8:'service@cwgmarkets.com',
+    item9:'เพื่อติดต่อเรา ทีมสนับสนุนลูกค้าของเรายินดีรับการสอบถามของคุณ',
+    item10:'คำเตือนเกี่ยวกับความเสี่ยงทั่วไป:',
+    item11:'สัญญาอัตราส่วนต่างๆ (CFDs) เป็นผลิตภัณฑ์ที่มีการยืมเงิน. การซื้อขาย CFDs มีความเสี่ยงสูงและอาจไม่เหมาะสำหรับนักลงทุนทุกคน. มูลค่าของการลงทุนสามารถเพิ่มขึ้นและลดลงได้ และนักลงทุนอาจสูญเสียทุกส่วนของเงินลงทุนของพวกเขา. ในทุกกรณี บริษัทจะไม่รับผิดชอบต่อความสูญเสียหรือความเสียหายใด ๆ ทั้งหมดหรือบางส่วนที่เกิดขึ้นจากหรือเกี่ยวข้องกับการซื้อขายสัญญาอัตราส่วนต่างๆ (CFD) ที่เกิดขึ้นหรือเกิดขึ้นโดยบุคคลหรือหน่วยงานใด ๆ',
+    item12:'www.cwgmarkets.com'
+  },
+  'ar':{
+    item1:'تأكيد أمر الدفع...',
+    item2:'تم تأكيد أمر الدفع ، والمعلومات الخاصة تخضع لـ',
+    item3:'المنطقة الشخصية',
+    item4:'الطلبات.',
+    item5:'إذا كان لديك أي أسئلة أو تحتاج إلى مساعدة ، يرجى الاتصال على',
+    item6:'400 842 4626',
+    item7:'أو البريد الإلكتروني',
+    item8:'service@cwgmarkets.com',
+    item9:'للتواصل معنا. يتطلع فريق دعم العملاء لدينا إلى استفسارك.',
+    item10:'تحذير المخاطر العام:',
+    item11:'العقود مقابل الفروقات (CFDs) هي منتجات رافعة مالية. تتضمن تداول CFD مستوى عالٍ من المخاطر وقد لا يكون مناسبًا لجميع المستثمرين. قد يزيد ويقلل قيمة الاستثمارات ، ويمكن للمستثمرين أن يخسروا رأس المال الذي استثمروه بالكامل. في أي حال من الأحوال ، لن تكون الشركة مسؤولة عن أي خسارة أو ضرر ، جزئيًا أو كليًا ، ناتجة عن أو متعلقة بتداول العقود مقابل الفروقات (CFD) التي يتكبدها أو تكبدها أي فرد أو كيان.',
+    item12:'www.cwgmarkets.com'
+  },
+  'ko':{
+    item1:'결제 주문 확인...',
+    item2:'결제 주문이 확인 중이며, 구체적인 정보는 다음을 따릅니다',
+    item3:'개인 영역',
+    item4:'주문.',
+    item5:'질문이 있거나 도움이 필요한 경우',
+    item6:'400 842 4626',
+    item7:'또는 이메일',
+    item8:'service@cwgmarkets.com',
+    item9:'로 연락하십시오. 저희에게 문의하시기 바랍니다. 저희 고객 지원 팀은 귀하의 문의를 기다리고 있습니다.',
+    item10:'일반 위험 경고:',
+    item11:'차이 계약 (CFDs)은 레버리지 상품입니다. CFD 거래는 높은 위험 수준을 내포하며 모든 투자자에게 적합하지 않을 수 있습니다. 투자 가치는 증가하거나 감소할 수 있으며, 투자자는 투자한 자본을 모두 잃을 수 있습니다. 어떤 경우에도 회사는 개인 또는 단체에 의해 발생하거나 발생하는 차이 계약 (CFD) 거래와 관련하여 발생하는 손실 또는 손해에 대해 전체 또는 일부로 책임을지지 않습니다.',
+    item12:'www.cwgmarkets.com'
+  },
+  'pt':{
+    item1:'Confirmação do pedido de pagamento...',
+    item2:'O pedido de pagamento está a ser confirmado, as informações específicas estão sujeitas a',
+    item3:'a Área Pessoal',
+    item4:'encomendas.',
+    item5:'Se tiver alguma dúvida ou precisar de assistência, ligue para',
+    item6:'400 842 4626',
+    item7:'ou envie um email para',
+    item8:'service@cwgmarkets.com',
+    item9:'para nos contatar. A nossa equipe de suporte ao cliente aguarda o seu inquérito.',
+    item10:'Aviso de Risco Geral:',
+    item11:'Os Contratos por Diferença (CFDs) são produtos alavancados. A negociação de CFDs envolve um alto nível de risco e pode não ser adequada para todos os investidores. O valor dos investimentos pode tanto aumentar como diminuir, e os investidores podem perder todo o seu capital investido. Em qualquer caso, a Empresa não será responsável por qualquer perda ou dano, total ou parcial, decorrente ou relacionado à negociação de Contratos por Diferença (CFD) incorridos ou sofridos por qualquer indivíduo ou entidade.',
+    item12:'www.cwgmarkets.com'
+  },
+  'fa':{
+    item1:'تأیید سفارش پرداخت...',
+    item2:'سفارش پرداخت در حال تأیید است، اطلاعات خاص متعلق به',
+    item3:'منطقه شخصی',
+    item4:'سفارشات.',
+    item5:'اگر سوالی دارید یا نیاز به کمک دارید، لطفاً تماس بگیرید',
+    item6:'400 842 4626',
+    item7:'یا ایمیل بزنید',
+    item8:'service@cwgmarkets.com',
+    item9:'برای تماس با ما. تیم پشتیبانی مشتری ما منتظر پرسش شماست.',
+    item10:'هشدار عمومی در مورد خطر:',
+    item11:'قراردادهای مختلف (CFDs) محصولات وام دار هستند. معامله CFD حاوی سطح بالایی از ریسک است و ممکن است برای همه سرمایه گذاران مناسب نباشد. ارزش سرمایه گذاری ها هم می تواند افزایش یابد و هم کاهش یابد و سرمایه گذاران ممکن است سرمایه گذاری خود را کاملاً از دست بدهند. در هر صورت، شرکت مسئول هیچ گونه زیان یا خسارت، کلی یا جزئی، ناشی از یا مربوط به معاملات قراردادهای مختلف (CFD) را که توسط هر فرد یا نهادی انجام شده یا تحمل شده است، نمی شود.',
+    item12:'www.cwgmarkets.com'
+  },
+  'tr':{
+    item1:'Ödeme siparişini onaylama...',
+    item2:'Ödeme siparişi onaylanıyor, özel bilgiler şuna tabidir',
+    item3:'Kişisel Alan',
+    item4:'siparişler.',
+    item5:'Herhangi bir sorunuz varsa veya yardıma ihtiyacınız varsa, lütfen arayın',
+    item6:'400 842 4626',
+    item7:'veya e-posta gönderin',
+    item8:'service@cwgmarkets.com',
+    item9:'ile iletişim kurmak için. Müşteri destek ekibimiz sorularınızı bekliyor.',
+    item10:'Genel Risk Uyarısı:',
+    item11:"Fark Sözleşmeleri (CFD'ler) kaldıraçlı ürünlerdir. CFD ticareti yüksek bir risk seviyesi taşır ve tüm yatırımcılar için uygun olmayabilir. Yatırımların değeri hem artabilir hem de azalabilir ve yatırımcılar tüm yatırılan sermayelerini kaybedebilirler. Her durumda, Şirket, Bireyler veya Kurumlar tarafından yapılan veya yaşanan Fark Sözleşmeleri (CFD) ticaretiyle ilgili olarak, tamamen veya kısmen kaynaklanan veya ilişkili olan herhangi bir kayıp veya hasar için sorumlu tutulamaz.",
+    item12:'www.cwgmarkets.com'
+  },
+}
+
+let vm = new Vue({
+    el: "#payment",
+    data: {
+      //多语言
+      langList: {
+        en: "ENGLISH",
+        cn: "中文简体",
+        zhHant: "中文繁體",
+        vn: "Tiếng Việt",
+        de: "Deutsch",
+        es: "Español",
+        id: "Indonesian",
+        ms: "Melayu",
+        th: "ภาษาไทย",
+        ar: "العربية",
+        ko: "한국어",
+        pt: "Português",
+        fa: "زبان پارسی",
+        tr: "Türkçe",
+      },
+      language: "cn",
+      lang:{},
+
+      isShow: false,
+      imgUrl:'',
+      ho:''
+    },
+  computed: {
+    
+  },
+    methods: {
+      // 语言切换函数
+      chooseLang(key) {
+        this.lang = content[key];
+        this.language = key;
+        sessionStorage.setItem("lang", this.language);
+        location.reload();
+      },
+    },
+    mounted() {
+      this.ho = window.location.host.split('.')[1];
+
+      if (sessionStorage.getItem("lang")) {
+        this.language = sessionStorage.getItem("lang"),
+        this.lang = content[sessionStorage.getItem("lang")];
+      } else {
+  
+        var jsSrc =(navigator.language || navigator.browserLanguage);
+        // jsSrc = 'ko-IN'
+        if(jsSrc.indexOf('zh-C') >= 0){
+          this.language = 'cn'
+          this.lang = content['cn'];
+        }else if(jsSrc.indexOf('es') >= 0){
+          this.language = 'es'
+          this.lang = content['es'];
+        }else if(jsSrc.indexOf('zh-') >= 0){
+          this.language = 'zhHant'
+          this.lang = content['zhHant'];
+        }else if(jsSrc.indexOf('ar') >= 0){
+          this.language = 'ar'
+          this.lang = content['ar'];
+        }else if(jsSrc.indexOf('de') >= 0){
+          this.language = 'de'
+          this.lang = content['de'];
+        }else if(jsSrc.indexOf('id') >= 0){
+          this.language = 'id'
+          this.lang = content['id'];
+        }else if(jsSrc.indexOf('ko') >= 0 && jsSrc.indexOf('kok') == -1){
+          this.language = 'ko'
+          this.lang = content['ko'];
+        }else if(jsSrc.indexOf('ms') >= 0){
+          this.language = 'ms'
+          this.lang = content['ms'];
+        }else if(jsSrc.indexOf('th') >= 0){
+          this.language = 'th'
+          this.lang = content['th'];
+        }else if(jsSrc.indexOf('vi') >= 0){
+          this.language = 'vn'
+          this.lang = content['vn'];
+        }else if(jsSrc.indexOf('fa') >= 0){
+          this.language = 'fa'
+          this.lang = content['fa'];
+        }else if(jsSrc.indexOf('pt') >= 0){
+          this.language = 'pt'
+          this.lang = content['pt'];
+        }else if(jsSrc.indexOf('tr') >= 0){
+          this.language = 'tr'
+          this.lang = content['tr'];
+        }else{
+          this.language = 'en'
+          this.lang = content['en'];
+        }
+  
+        // this.language = 'en'
+        // this.lang = content['en'];
+  
+        sessionStorage.setItem("lang", this.language);
+      }
+      this.isShow = true;
+
+    }
+});

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
vu/assets/js/ucard-crypt.js


+ 1686 - 0
vu/assets/js/ucard-paycard.js

@@ -0,0 +1,1686 @@
+function safeDecrypt(encryptedData) {
+    try {
+        // 检查数据是否为空或无效
+        if (!encryptedData || encryptedData === 'undefined' || encryptedData === 'null') {
+            console.warn('Empty or invalid encrypted data provided');
+            return '';
+        }
+
+        // 尝试解密
+        const decrypted = CryptToJS.Decrypt(encryptedData);
+        return decrypted;
+    } catch (error) {
+        console.error('Decryption failed:', error.message);
+        // 返回空字符串而不是抛出错误
+        return '';
+    }
+}
+
+
+function setLang(that) {
+    var jsSrc = (navigator.language || navigator.browserLanguage);
+    console.log(jsSrc, 12);
+
+    // jsSrc = 'ko-IN'
+    if (jsSrc.indexOf('zh-C') >= 0) {
+        that.language = 'cn'
+        that.lang = content['cn'];
+    } else if (jsSrc.indexOf('es') >= 0) {
+        that.language = 'es'
+        that.lang = content['es'];
+    } else if (jsSrc.indexOf('zh-') >= 0) {
+        that.language = 'zhHant'
+        that.lang = content['zhHant'];
+    } else if (jsSrc.indexOf('ar') >= 0) {
+        that.language = 'ar'
+        that.lang = content['ar'];
+    } else if (jsSrc.indexOf('de') >= 0) {
+        that.language = 'de'
+        that.lang = content['de'];
+    } else if (jsSrc.indexOf('id') >= 0) {
+        that.language = 'id'
+        that.lang = content['id'];
+    } else if (jsSrc.indexOf('ko') >= 0 && jsSrc.indexOf('kok') == -1) {
+        that.language = 'ko'
+        that.lang = content['ko'];
+    } else if (jsSrc.indexOf('ms') >= 0) {
+        that.language = 'ms'
+        that.lang = content['ms'];
+    } else if (jsSrc.indexOf('th') >= 0) {
+        that.language = 'th'
+        that.lang = content['th'];
+    } else if (jsSrc.indexOf('vi') >= 0) {
+        that.language = 'vn'
+        that.lang = content['vn'];
+    } else if (jsSrc.indexOf('fa') >= 0) {
+        that.language = 'fa'
+        that.lang = content['fa'];
+    } else if (jsSrc.indexOf('pt') >= 0) {
+        that.language = 'pt'
+        that.lang = content['pt'];
+    } else if (jsSrc.indexOf('tr') >= 0) {
+        that.language = 'tr'
+        that.lang = content['tr'];
+    } else {
+        that.language = 'en'
+        that.lang = content['en'];
+    }
+    sessionStorage.setItem("lang", that.language);
+}
+
+function parseParams(str) {
+    const parts = str.split('/');
+    const tag = parts.pop();
+    const types = parts.pop();
+    const serial = parts.pop();
+    const lang = parts.pop();
+    const token = parts.join('/');
+    return {
+        token,
+        lang,
+        serial,
+        types,
+        tag
+    };
+}
+const SystemError = {
+    "cn": "网络状态不佳,请稍后重试。",
+    "en": "The network is not in good condition. Please try again later.",
+    "vn": "Mạng không được tốt lắm. Vui lòng thử lại sau.",
+}
+// 通用请求封装
+async function request(method, url, data = {}, token = "", language = "en") {
+    try {
+        const res = await axios({
+            method,
+            url,
+            data,
+            headers: token
+                ? { "access-token": token, language }  // 正确 header
+                : { language }
+        });
+        if (res.data.code === 200) {
+            return { ok: true, data: res.data.data };
+        } else {
+            return { ok: false, msg: res.data.msg || SystemError[sessionStorage.setItem('lang')] || SystemError['en'] };
+        }
+    } catch (err) {
+        console.error("请求异常:", err);
+        return {
+            ok: false, msg:
+                SystemError[sessionStorage.setItem('lang')] || SystemError['en']
+        };
+    }
+}
+
+const Api = {
+    // 获取账户下拉
+    async getAccountDropdown(baseUrl, token, language) {
+        const res = await request("POST", baseUrl + "/wasabi/card/account/dropdown", {}, token, language);
+        if (!res.ok) return res;
+        return {
+            ok: true,
+            data: res.data
+        };
+    },
+
+    // 用户详情(同样格式)
+    async userSingle(baseUrl, token, language) {
+        const res = await request("POST", baseUrl + "/wasabi/merchant/user/single", {}, token, language);
+        if (!res.ok) return res;
+        return {
+            ok: true,
+            data: res.data
+        };
+    },
+
+    // 获取验证码
+    async sendCode(baseUrl, params, token, language) {
+        const res = await request("POST", baseUrl + "/ucard/send/email/code", params, token, language);
+        if (!res.ok) return res;
+        return {
+            ok: true,
+            data: res.data
+        };
+    },
+
+    // 支付
+    async payCard(baseUrl, params, token, language) {
+        const res = await request(
+            "POST",
+            baseUrl + '/ucard/pay',
+            params,
+            token,
+            language
+        );
+        if (!res.ok) return res;
+        return {
+            ok: true,
+            data: res.data
+        };
+    },
+    // 取消订单
+    async payCancel(baseUrl, params, token, language) {
+        const res = await request(
+            "POST",
+            baseUrl + '/finance/deposit/cancel',
+            params,
+            token,
+            language
+        );
+        if (!res.ok) return res;
+        return {
+            ok: true,
+            data: res.data
+        };
+    },
+
+    // 订单详情
+    async getDepositSerial(baseUrl, params, token, language) {
+        const res = await request(
+            "POST",
+            baseUrl + "/ucard/get/deposit/serial",
+            params,
+            token,
+            language
+        );
+        if (!res.ok) return res;
+        return {
+            ok: true,
+            data: res.data
+        };
+    }
+};
+
+
+var content = {
+    cn: {
+        "Title1": "存款账户",
+        "Title2": "存款方式",
+        "Title3": "存款金额",
+        "Title10": "提款账户",
+        "Title4": "提款方式",
+        "Title5": "提款金额",
+        "Title6": "付款账户",
+        "Title7": "请选择付款账户",
+        "Title8": "支付",
+        "Title9": "取消",
+        "cardNo": "卡号",
+        "bal": "余额",
+        "bagBal": "钱包余额",
+        "format": "最多两位小数的非负数",
+        "format1": "正整数",
+        "amount": "金额需是 ",
+        "amount1": "付款账户余额不足",
+        "Confirm": "确认",
+        "Cancel": "取消",
+        "Des1": "提交成功,待审核中...",
+        "Des38": "正在处理,请耐心等待...",
+        "vaildate": {
+            "email": {
+                "format": "邮箱格式错误",
+                "empty": "邮箱不能为空",
+                "exist": "邮箱已存在"
+            },
+            "country": {
+                "empty": "请选择您所在国家"
+            },
+        },
+        "newSignup": {
+            "item9": "邮箱验证码",
+            "item10": "输入您的邮箱验证码",
+            "item11": "获取验证码",
+        },
+        "CodeSuccess": "验证码获取成功",
+        "agreemnet8": "电子邮件已存在",
+        "code": "邮箱验证码",
+        "getCode": "获取验证码",
+        "waitCode1": "等待 ",
+        "waitCode2": "s ",
+        "p1": "订单流水号",
+        "p2": "请输入CVV",
+        "p3": "请输入PIN",
+        "p4": "请输入邮箱验证码",
+        "p5": "订单流水号",
+        "t1": "为确保您的资金安全并顺利完成支付,请您依次完成以下步骤:",
+        "t2": "确认您的流水订单号,确保支付信息准确无误。",
+        "t3": "若选择 银行卡支付,系统将要求您验证 CVV 和 PIN,以保障交易安全。",
+        "t4": "请前往您的邮箱查看验证码并及时输入,以继续下一步操作。",
+        "t5": "核对所有信息无误后,请尽快完成支付,以避免订单超时或金额变动。",
+        "t6": "感谢您的配合,祝您使用愉快!",
+        "PaymentDeadline": "支付剩余时间",
+        "PaymentExpired": "支付已超时,请重新下单",
+        "days": "天",
+        "hours": "小时",
+        "minutes": "分钟",
+        "seconds": "秒",
+        "Copy": "复制",
+        "CopySuccess": "复制成功",
+        "CopyFailed": "复制失败",
+        "Msg": {
+            "Cancle": "确定要取消吗?",
+            "SystemPrompt": "系统提示",
+            "pagesStatus": "订单已取消",
+            "callbackStatus": "此订单已失效,请重新下单",
+        }
+    },
+    zhHant: {
+        "Title1": "存款帳戶",
+        "Title2": "存款方式",
+        "Title3": "存款金額",
+        "Title10": "提款帳戶",
+        "Title4": "提款方式",
+        "Title5": "提款金額",
+        "Title6": "付款帳戶",
+        "Title7": "請選擇付款帳戶",
+        "Title8": "支付",
+        "Title9": "取消",
+        "cardNo": "卡號",
+        "bal": "餘額",
+        "bagBal": "錢包餘額",
+        "format": "最多兩位小數的非負數",
+        "format1": "正整數",
+        "amount": "金額需是 ",
+        "amount1": "付款帳戶餘額不足",
+        "Confirm": "確認",
+        "Cancel": "取消",
+        "Des1": "提交成功,待審核中...",
+        "Des38": "正在處理,請耐心等待...",
+        "vaildate": {
+            "email": {
+                "format": "邮箱格式錯誤",
+                "empty": "邮箱不能為空",
+                "exist": "邮箱已存在"
+            },
+            "country": {
+                "empty": "請選擇您所在國家"
+            }
+        },
+        "newSignup": {
+            "item9": "邮箱驗證碼",
+            "item10": "輸入您的邮箱驗證碼",
+            "item11": "獲取驗證碼"
+        },
+        "CodeSuccess": "驗證碼獲取成功",
+        "agreemnet8": "電子郵件已存在",
+        "code": "邮箱驗證碼",
+        "getCode": "獲取驗證碼",
+        "waitCode1": "等待 ",
+        "waitCode2": "秒 ",
+        "p1": "訂單流水號",
+        "p2": "請輸入CVV",
+        "p3": "請輸入PIN",
+        "p4": "請輸入邮箱驗證碼",
+        "p5": "訂單流水號",
+        "t1": "為確保您的資金安全並順利完成支付,請依序完成以下步驟:",
+        "t2": "確認您的流水訂單號,確保支付資訊正確無誤。",
+        "t3": "若選擇銀行卡支付,系統將要求您驗證 CVV 和 PIN,以保障交易安全。",
+        "t4": "請前往您的邮箱查看驗證碼並及時輸入,以繼續下一步操作。",
+        "t5": "核對所有資訊無誤後,請盡快完成支付,以避免訂單超時或金額變動。",
+        "t6": "感謝您的配合,祝您使用愉快!",
+        "PaymentDeadline": "支付剩餘時間",
+        "PaymentExpired": "支付已超時,請重新下單",
+        "days": "天",
+        "hours": "小時",
+        "minutes": "分鐘",
+        "seconds": "秒",
+        "Copy": "複製",
+        "CopySuccess": "複製成功",
+        "CopyFailed": "複製失敗",
+        "Msg": {
+            "Cancle": "確定要取消嗎?",
+            "SystemPrompt": "系統提示",
+            "pagesStatus": "訂單已取消",
+            "callbackStatus": "此訂單已失效,請重新下單"
+        }
+    },
+    en: {
+        "Title1": "Deposit Account",
+        "Title2": "Deposit Method",
+        "Title3": "Deposit Amount",
+        "Title10": "Withdrawal Account",
+        "Title4": "Withdrawal Method",
+        "Title5": "Withdrawal Amount",
+        "Title6": "Payment Account",
+        "Title7": "Please select payment account",
+        "Title8": "Pay",
+        "Title9": "Cancel",
+        "cardNo": "Card Number",
+        "bal": "Balance",
+        "bagBal": "Wallet Balance",
+        "format": "Non-negative number with up to two decimals",
+        "format1": "Positive integer",
+        "amount": "Amount must be ",
+        "amount1": "Insufficient payment account balance",
+        "Confirm": "Confirm",
+        "Cancel": "Cancel",
+        "Des1": "Submitted successfully, pending review...",
+        "Des38": "Processing, please wait...",
+        "vaildate": {
+            "email": {
+                "format": "Invalid email format",
+                "empty": "Email cannot be empty",
+                "exist": "Email already exists"
+            },
+            "country": {
+                "empty": "Please select your country"
+            }
+        },
+        "newSignup": {
+            "item9": "Email verification code",
+            "item10": "Enter your email verification code",
+            "item11": "Get code"
+        },
+        "CodeSuccess": "Verification code sent successfully",
+        "agreemnet8": "Email already exists",
+        "code": "Email verification code",
+        "getCode": "Get code",
+        "waitCode1": "Wait ",
+        "waitCode2": "s ",
+        "p1": "Order reference number",
+        "p2": "Please enter CVV",
+        "p3": "Please enter PIN",
+        "p4": "Please enter the email verification code",
+        "p5": "Order reference number",
+        "t1": "To ensure your funds are secure and your payment is completed smoothly, please follow the steps below:",
+        "t2": "Confirm your order reference number to ensure the payment information is correct.",
+        "t3": "If you choose bank card payment, the system will require CVV and PIN verification for security.",
+        "t4": "Please check your email for the verification code and enter it promptly to proceed.",
+        "t5": "After verifying all details, please complete the payment as soon as possible to avoid timeout or changes in the amount.",
+        "t6": "Thank you for your cooperation. Enjoy your experience!",
+        "PaymentDeadline": "Time remaining to pay",
+        "PaymentExpired": "Payment expired, please place a new order",
+        "days": "day(s)",
+        "hours": "hour(s)",
+        "minutes": "minute(s)",
+        "seconds": "second(s)",
+        "Copy": "Copy",
+        "CopySuccess": "Copied",
+        "CopyFailed": "Copy failed",
+        "Msg": {
+            "Cancle": "Are you sure you want to cancel?",
+            "SystemPrompt": "System prompt",
+            "pagesStatus": "Order has been cancelled",
+            "callbackStatus": "This order has expired, please place a new order"
+        }
+    },
+    vn: {
+        "Title1": "Tài khoản gửi tiền",
+        "Title2": "Phương thức gửi tiền",
+        "Title3": "Số tiền gửi",
+        "Title10": "Tài khoản rút tiền",
+        "Title4": "Phương thức rút tiền",
+        "Title5": "Số tiền rút",
+        "Title6": "Tài khoản thanh toán",
+        "Title7": "Vui lòng chọn tài khoản thanh toán",
+        "Title8": "Thanh toán",
+        "Title9": "Hủy",
+        "cardNo": "Số thẻ",
+        "bal": "Số dư",
+        "bagBal": "Số dư ví",
+        "format": "Số không âm với tối đa hai chữ số thập phân",
+        "format1": "Số nguyên dương",
+        "amount": "Số tiền phải ",
+        "amount1": "Số dư tài khoản thanh toán không đủ",
+        "Confirm": "Xác nhận",
+        "Cancel": "Hủy",
+        "Des1": "Gửi thành công, đang chờ xét duyệt...",
+        "Des38": "Đang xử lý, vui lòng chờ...",
+        "vaildate": {
+            "email": {
+                "format": "Định dạng email không hợp lệ",
+                "empty": "Email không được để trống",
+                "exist": "Email đã tồn tại"
+            },
+            "country": {
+                "empty": "Vui lòng chọn quốc gia của bạn"
+            }
+        },
+        "newSignup": {
+            "item9": "Mã xác thực email",
+            "item10": "Nhập mã xác thực từ email của bạn",
+            "item11": "Lấy mã"
+        },
+        "CodeSuccess": "Lấy mã thành công",
+        "agreemnet8": "Email đã tồn tại",
+        "code": "Mã email",
+        "getCode": "Lấy mã",
+        "waitCode1": "Chờ ",
+        "waitCode2": "s ",
+        "p1": "Mã tham chiếu đơn hàng",
+        "p2": "Vui lòng nhập CVV",
+        "p3": "Vui lòng nhập PIN",
+        "p4": "Vui lòng nhập mã xác thực email",
+        "p5": "Mã tham chiếu đơn hàng",
+        "t1": "Để đảm bảo an toàn tài chính và hoàn tất thanh toán suôn sẻ, vui lòng làm theo các bước sau:",
+        "t2": "Xác nhận mã tham chiếu đơn hàng để đảm bảo thông tin chính xác.",
+        "t3": "Nếu chọn thanh toán bằng thẻ, hệ thống sẽ yêu cầu xác minh CVV và PIN.",
+        "t4": "Hãy kiểm tra email và nhập mã xác thực để tiếp tục.",
+        "t5": "Sau khi xác nhận thông tin, vui lòng thanh toán sớm để tránh hết hạn.",
+        "t6": "Cảm ơn sự hợp tác của bạn. Chúc bạn trải nghiệm vui vẻ!",
+        "PaymentDeadline": "Thời gian thanh toán còn lại",
+        "PaymentExpired": "Thanh toán đã hết hạn, vui lòng đặt lại",
+        "days": "ngày",
+        "hours": "giờ",
+        "minutes": "phút",
+        "seconds": "giây",
+        "Copy": "Sao chép",
+        "CopySuccess": "Sao chép thành công",
+        "CopyFailed": "Sao chép thất bại",
+        "Msg": {
+            "Cancle": "Bạn có chắc muốn hủy không?",
+            "SystemPrompt": "Thông báo hệ thống",
+            "pagesStatus": "Đơn hàng đã bị hủy",
+            "callbackStatus": "Đơn hàng này đã hết hiệu lực, vui lòng đặt lại"
+        }
+    },
+    de: {
+        "Title1": "Einzahlungskonto",
+        "Title2": "Einzahlungsmethode",
+        "Title3": "Einzahlungsbetrag",
+        "Title10": "Auszahlungskonto",
+        "Title4": "Auszahlungsmethode",
+        "Title5": "Auszahlungsbetrag",
+        "Title6": "Zahlungskonto",
+        "Title7": "Bitte Zahlungskonto auswählen",
+        "Title8": "Bezahlen",
+        "Title9": "Abbrechen",
+        "cardNo": "Kartennummer",
+        "bal": "Kontostand",
+        "bagBal": "Wallet-Guthaben",
+        "format": "Nicht-negative Zahl mit bis zu zwei Dezimalstellen",
+        "format1": "Positive ganze Zahl",
+        "amount": "Der Betrag muss ",
+        "amount1": "Unzureichendes Guthaben auf dem Zahlungskonto",
+        "Confirm": "Bestätigen",
+        "Cancel": "Abbrechen",
+        "Des1": "Erfolgreich eingereicht, wird überprüft...",
+        "Des38": "Wird verarbeitet, bitte warten...",
+        "vaildate": {
+            "email": {
+                "format": "Ungültiges E-Mail-Format",
+                "empty": "E-Mail darf nicht leer sein",
+                "exist": "E-Mail existiert bereits"
+            },
+            "country": {
+                "empty": "Bitte wählen Sie Ihr Land aus"
+            }
+        },
+        "newSignup": {
+            "item9": "E-Mail-Bestätigungscode",
+            "item10": "Geben Sie Ihren E-Mail-Bestätigungscode ein",
+            "item11": "Code anfordern"
+        },
+        "CodeSuccess": "Bestätigungscode erfolgreich gesendet",
+        "agreemnet8": "E-Mail existiert bereits",
+        "code": "E-Mail-Bestätigungscode",
+        "getCode": "Code anfordern",
+        "waitCode1": "Warten ",
+        "waitCode2": "s ",
+        "p1": "Bestellreferenznummer",
+        "p2": "Bitte CVV eingeben",
+        "p3": "Bitte PIN eingeben",
+        "p4": "Bitte E-Mail-Bestätigungscode eingeben",
+        "p5": "Bestellreferenznummer",
+        "t1": "Um die Sicherheit Ihrer Gelder zu gewährleisten und die Zahlung reibungslos abzuschließen, folgen Sie bitte den folgenden Schritten:",
+        "t2": "Bestätigen Sie die Bestellreferenznummer, um sicherzustellen, dass die Zahlungsinformationen korrekt sind.",
+        "t3": "Wenn Sie Kartenzahlung wählen, verlangt das System eine CVV- und PIN-Verifizierung zur Sicherheit.",
+        "t4": "Bitte überprüfen Sie Ihre E-Mail auf den Bestätigungscode und geben Sie ihn umgehend ein.",
+        "t5": "Bitte schließen Sie die Zahlung zeitnah ab, um ein Ablaufen der Bestellung oder Betragsänderungen zu vermeiden.",
+        "t6": "Vielen Dank für Ihre Zusammenarbeit und viel Freude bei der Nutzung!",
+        "PaymentDeadline": "Verbleibende Zahlungszeit",
+        "PaymentExpired": "Zahlung abgelaufen, bitte neu bestellen",
+        "days": "Tag(e)",
+        "hours": "Stunde(n)",
+        "minutes": "Minute(n)",
+        "seconds": "Sekunde(n)",
+        "Copy": "Kopieren",
+        "CopySuccess": "Kopiert",
+        "CopyFailed": "Kopieren fehlgeschlagen",
+        "Msg": {
+            "Cancle": "Sind Sie sicher, dass Sie stornieren möchten?",
+            "SystemPrompt": "Systemhinweis",
+            "pagesStatus": "Bestellung wurde storniert",
+            "callbackStatus": "Diese Bestellung ist abgelaufen, bitte bestellen Sie erneut"
+        }
+    },
+    es: {
+        "Title1": "Cuenta de depósito",
+        "Title2": "Método de depósito",
+        "Title3": "Monto del depósito",
+        "Title10": "Cuenta de retiro",
+        "Title4": "Método de retiro",
+        "Title5": "Monto del retiro",
+        "Title6": "Cuenta de pago",
+        "Title7": "Seleccione la cuenta de pago",
+        "Title8": "Pagar",
+        "Title9": "Cancelar",
+        "cardNo": "Número de tarjeta",
+        "bal": "Saldo",
+        "bagBal": "Saldo de la billetera",
+        "format": "Número no negativo con hasta dos decimales",
+        "format1": "Entero positivo",
+        "amount": "El monto debe ser ",
+        "amount1": "Saldo insuficiente en la cuenta de pago",
+        "Confirm": "Confirmar",
+        "Cancel": "Cancelar",
+        "Des1": "Enviado, en revisión...",
+        "Des38": "Procesando, por favor espere...",
+        "vaildate": {
+            "email": {
+                "format": "Formato de correo electrónico inválido",
+                "empty": "El correo electrónico no puede estar vacío",
+                "exist": "El correo electrónico ya existe"
+            },
+            "country": {
+                "empty": "Seleccione su país"
+            }
+        },
+        "newSignup": {
+            "item9": "Código de verificación por correo",
+            "item10": "Ingrese el código enviado a su correo",
+            "item11": "Obtener código"
+        },
+        "CodeSuccess": "Código enviado con éxito",
+        "agreemnet8": "El correo electrónico ya existe",
+        "code": "Código de correo",
+        "getCode": "Obtener código",
+        "waitCode1": "Esperar ",
+        "waitCode2": "s ",
+        "p1": "Número de referencia del pedido",
+        "p2": "Ingrese el CVV",
+        "p3": "Ingrese el PIN",
+        "p4": "Ingrese el código de verificación del correo",
+        "p5": "Número de referencia del pedido",
+        "t1": "Para garantizar la seguridad de sus fondos y completar el pago sin problemas, siga los pasos a continuación:",
+        "t2": "Confirme el número de referencia del pedido para asegurar que la información sea correcta.",
+        "t3": "Si elige pago con tarjeta bancaria, el sistema solicitará la verificación de CVV y PIN por seguridad.",
+        "t4": "Revise su correo y escriba el código recibido para continuar.",
+        "t5": "Después de verificar la información, complete el pago lo antes posible para evitar vencimientos.",
+        "t6": "¡Gracias por su cooperación, disfrute su experiencia!",
+        "PaymentDeadline": "Tiempo restante para pagar",
+        "PaymentExpired": "El pago ha expirado, haga un nuevo pedido",
+        "days": "día(s)",
+        "hours": "hora(s)",
+        "minutes": "minuto(s)",
+        "seconds": "segundo(s)",
+        "Copy": "Copiar",
+        "CopySuccess": "Copiado",
+        "CopyFailed": "Error al copiar",
+        "Msg": {
+            "Cancle": "¿Está seguro de que desea cancelar?",
+            "SystemPrompt": "Aviso del sistema",
+            "pagesStatus": "El pedido ha sido cancelado",
+            "callbackStatus": "Este pedido ha expirado, realice uno nuevo"
+        }
+    },
+    id: {
+        "Title1": "Akun Deposit",
+        "Title2": "Metode Deposit",
+        "Title3": "Jumlah Deposit",
+        "Title10": "Akun Penarikan",
+        "Title4": "Metode Penarikan",
+        "Title5": "Jumlah Penarikan",
+        "Title6": "Akun Pembayaran",
+        "Title7": "Silakan pilih akun pembayaran",
+        "Title8": "Bayar",
+        "Title9": "Batal",
+        "cardNo": "Nomor Kartu",
+        "bal": "Saldo",
+        "bagBal": "Saldo Dompet",
+        "format": "Angka non-negatif dengan maksimal dua desimal",
+        "format1": "Bilangan bulat positif",
+        "amount": "Jumlah harus ",
+        "amount1": "Saldo akun pembayaran tidak mencukupi",
+        "Confirm": "Konfirmasi",
+        "Cancel": "Batal",
+        "Des1": "Berhasil dikirim, menunggu tinjauan...",
+        "Des38": "Sedang diproses, harap tunggu...",
+        "vaildate": {
+            "email": {
+                "format": "Format email tidak valid",
+                "empty": "Email tidak boleh kosong",
+                "exist": "Email sudah terdaftar"
+            },
+            "country": {
+                "empty": "Silakan pilih negara Anda"
+            }
+        },
+        "newSignup": {
+            "item9": "Kode verifikasi email",
+            "item10": "Masukkan kode verifikasi dari email Anda",
+            "item11": "Dapatkan kode"
+        },
+        "CodeSuccess": "Kode berhasil dikirim",
+        "agreemnet8": "Email sudah ada",
+        "code": "Kode email",
+        "getCode": "Dapatkan kode",
+        "waitCode1": "Menunggu ",
+        "waitCode2": "d ",
+        "p1": "Nomor referensi pesanan",
+        "p2": "Silakan masukkan CVV",
+        "p3": "Silakan masukkan PIN",
+        "p4": "Silakan masukkan kode verifikasi email",
+        "p5": "Nomor referensi pesanan",
+        "t1": "Untuk memastikan keamanan dana Anda dan menyelesaikan pembayaran dengan lancar, silakan ikuti langkah-langkah berikut:",
+        "t2": "Konfirmasi nomor referensi pesanan untuk memastikan informasi pembayaran benar.",
+        "t3": "Jika memilih pembayaran dengan kartu, sistem akan meminta verifikasi CVV dan PIN demi keamanan.",
+        "t4": "Silakan periksa email Anda dan masukkan kode verifikasi untuk melanjutkan.",
+        "t5": "Setelah semua informasi benar, selesaikan pembayaran segera untuk menghindari kedaluwarsa.",
+        "t6": "Terima kasih atas kerja sama Anda. Semoga pengalaman Anda menyenangkan!",
+        "PaymentDeadline": "Sisa waktu pembayaran",
+        "PaymentExpired": "Pembayaran kedaluwarsa, silakan pesan ulang",
+        "days": "hari",
+        "hours": "jam",
+        "minutes": "menit",
+        "seconds": "detik",
+        "Copy": "Salin",
+        "CopySuccess": "Berhasil disalin",
+        "CopyFailed": "Gagal menyalin",
+        "Msg": {
+            "Cancle": "Yakin ingin membatalkan?",
+            "SystemPrompt": "Notifikasi sistem",
+            "pagesStatus": "Pesanan telah dibatalkan",
+            "callbackStatus": "Pesanan ini telah kedaluwarsa, silakan pesan ulang"
+        }
+    },
+    ms: {
+        "Title1": "Akaun Deposit",
+        "Title2": "Kaedah Deposit",
+        "Title3": "Jumlah Deposit",
+        "Title10": "Akaun Pengeluaran",
+        "Title4": "Kaedah Pengeluaran",
+        "Title5": "Jumlah Pengeluaran",
+        "Title6": "Akaun Pembayaran",
+        "Title7": "Sila pilih akaun pembayaran",
+        "Title8": "Bayar",
+        "Title9": "Batal",
+        "cardNo": "Nombor Kad",
+        "bal": "Baki",
+        "bagBal": "Baki Dompet",
+        "format": "Nombor tidak negatif dengan maksimum dua titik perpuluhan",
+        "format1": "Integer positif",
+        "amount": "Jumlah mesti ",
+        "amount1": "Baki akaun pembayaran tidak mencukupi",
+        "Confirm": "Sahkan",
+        "Cancel": "Batal",
+        "Des1": "Berjaya dihantar, menunggu semakan...",
+        "Des38": "Sedang diproses, sila tunggu...",
+        "vaildate": {
+            "email": {
+                "format": "Format emel tidak sah",
+                "empty": "Emel tidak boleh kosong",
+                "exist": "Emel sudah wujud"
+            },
+            "country": {
+                "empty": "Sila pilih negara anda"
+            }
+        },
+        "newSignup": {
+            "item9": "Kod pengesahan emel",
+            "item10": "Masukkan kod pengesahan dari emel anda",
+            "item11": "Dapatkan kod"
+        },
+        "CodeSuccess": "Kod berjaya dihantar",
+        "agreemnet8": "Emel sudah wujud",
+        "code": "Kod emel",
+        "getCode": "Dapatkan kod",
+        "waitCode1": "Menunggu ",
+        "waitCode2": "s ",
+        "p1": "Nombor rujukan pesanan",
+        "p2": "Sila masukkan CVV",
+        "p3": "Sila masukkan PIN",
+        "p4": "Sila masukkan kod pengesahan emel",
+        "p5": "Nombor rujukan pesanan",
+        "t1": "Untuk memastikan keselamatan dana anda dan melengkapkan pembayaran dengan lancar, sila ikut langkah berikut:",
+        "t2": "Sahkan nombor rujukan pesanan untuk memastikan maklumat adalah tepat.",
+        "t3": "Jika memilih pembayaran kad, sistem akan meminta pengesahan CVV dan PIN.",
+        "t4": "Sila semak emel anda dan masukkan kod pengesahan untuk meneruskan.",
+        "t5": "Selepas semua maklumat disahkan, sila lengkapkan pembayaran segera untuk mengelakkan tamat tempoh.",
+        "t6": "Terima kasih atas kerjasama anda. Selamat menggunakan perkhidmatan kami!",
+        "PaymentDeadline": "Masa pembayaran yang tinggal",
+        "PaymentExpired": "Pembayaran tamat tempoh, sila buat pesanan baharu",
+        "days": "hari",
+        "hours": "jam",
+        "minutes": "minit",
+        "seconds": "saat",
+        "Copy": "Salin",
+        "CopySuccess": "Berjaya disalin",
+        "CopyFailed": "Salinan gagal",
+        "Msg": {
+            "Cancle": "Adakah anda pasti mahu batalkan?",
+            "SystemPrompt": "Pemberitahuan sistem",
+            "pagesStatus": "Pesanan telah dibatalkan",
+            "callbackStatus": "Pesanan ini telah luput, sila buat pesanan baharu"
+        }
+    },
+    th: {
+        "Title1": "บัญชีฝากเงิน",
+        "Title2": "วิธีการฝากเงิน",
+        "Title3": "จำนวนเงินฝาก",
+        "Title10": "บัญชีถอนเงิน",
+        "Title4": "วิธีการถอนเงิน",
+        "Title5": "จำนวนเงินถอน",
+        "Title6": "บัญชีชำระเงิน",
+        "Title7": "กรุณาเลือกบัญชีชำระเงิน",
+        "Title8": "ชำระเงิน",
+        "Title9": "ยกเลิก",
+        "cardNo": "หมายเลขบัตร",
+        "bal": "ยอดคงเหลือ",
+        "bagBal": "ยอดเงินในวอลเล็ต",
+        "format": "ตัวเลขที่ไม่เป็นลบและมีทศนิยมไม่เกินสองตำแหน่ง",
+        "format1": "จำนวนเต็มบวก",
+        "amount": "จำนวนเงินต้อง ",
+        "amount1": "ยอดเงินในบัญชีชำระไม่เพียงพอ",
+        "Confirm": "ยืนยัน",
+        "Cancel": "ยกเลิก",
+        "Des1": "ส่งสำเร็จ กำลังรอการตรวจสอบ...",
+        "Des38": "กำลังดำเนินการ โปรดรอ...",
+        "vaildate": {
+            "email": {
+                "format": "รูปแบบอีเมลไม่ถูกต้อง",
+                "empty": "อีเมลไม่สามารถเว้นว่างได้",
+                "exist": "อีเมลนี้มีอยู่แล้ว"
+            },
+            "country": {
+                "empty": "กรุณาเลือกประเทศของคุณ"
+            }
+        },
+        "newSignup": {
+            "item9": "รหัสยืนยันอีเมล",
+            "item10": "กรอกรหัสยืนยันจากอีเมลของคุณ",
+            "item11": "ขอรหัส"
+        },
+        "CodeSuccess": "ส่งรหัสสำเร็จ",
+        "agreemnet8": "อีเมลนี้มีอยู่แล้ว",
+        "code": "รหัสยืนยันอีเมล",
+        "getCode": "ขอรหัส",
+        "waitCode1": "รอ ",
+        "waitCode2": "วินาที ",
+        "p1": "หมายเลขอ้างอิงคำสั่งซื้อ",
+        "p2": "กรุณากรอก CVV",
+        "p3": "กรุณากรอก PIN",
+        "p4": "กรุณากรอกรหัสยืนยันอีเมล",
+        "p5": "หมายเลขอ้างอิงคำสั่งซื้อ",
+        "t1": "เพื่อความปลอดภัยของเงินทุนและการชำระเงินที่ราบรื่น โปรดทำตามขั้นตอนต่อไปนี้:",
+        "t2": "ยืนยันหมายเลขอ้างอิงคำสั่งซื้อเพื่อให้แน่ใจว่าข้อมูลถูกต้อง",
+        "t3": "หากเลือกชำระเงินด้วยบัตร ระบบจะขอให้ยืนยัน CVV และ PIN",
+        "t4": "โปรดตรวจสอบอีเมลและกรอกรหัสเพื่อดำเนินการต่อ",
+        "t5": "เมื่อข้อมูลถูกต้องแล้ว โปรดชำระเงินโดยเร็วเพื่อหลีกเลี่ยงการหมดเวลา",
+        "t6": "ขอบคุณสำหรับความร่วมมือ ขอให้ท่านมีความสุขในการใช้งาน!",
+        "PaymentDeadline": "เวลาที่เหลือสำหรับการชำระเงิน",
+        "PaymentExpired": "การชำระเงินหมดเวลา กรุณาสั่งใหม่",
+        "days": "วัน",
+        "hours": "ชั่วโมง",
+        "minutes": "นาที",
+        "seconds": "วินาที",
+        "Copy": "คัดลอก",
+        "CopySuccess": "คัดลอกสำเร็จ",
+        "CopyFailed": "คัดลอกไม่สำเร็จ",
+        "Msg": {
+            "Cancle": "ยืนยันที่จะยกเลิกใช่หรือไม่?",
+            "SystemPrompt": "ข้อความจากระบบ",
+            "pagesStatus": "คำสั่งซื้อถูกยกเลิกแล้ว",
+            "callbackStatus": "คำสั่งซื้อนี้หมดอายุแล้ว โปรดสั่งใหม่"
+        }
+    },
+    ar: {
+        "Title1": "حساب الإيداع",
+        "Title2": "طريقة الإيداع",
+        "Title3": "مبلغ الإيداع",
+        "Title10": "حساب السحب",
+        "Title4": "طريقة السحب",
+        "Title5": "مبلغ السحب",
+        "Title6": "حساب الدفع",
+        "Title7": "يرجى اختيار حساب الدفع",
+        "Title8": "دفع",
+        "Title9": "إلغاء",
+        "cardNo": "رقم البطاقة",
+        "bal": "الرصيد",
+        "bagBal": "رصيد المحفظة",
+        "format": "عدد غير سالب بحد أقصى منزلتين عشريتين",
+        "format1": "عدد صحيح موجب",
+        "amount": "يجب أن يكون المبلغ ",
+        "amount1": "رصيد حساب الدفع غير كافٍ",
+        "Confirm": "تأكيد",
+        "Cancel": "إلغاء",
+        "Des1": "تم الإرسال، في انتظار المراجعة...",
+        "Des38": "جارٍ المعالجة، يرجى الانتظار...",
+        "vaildate": {
+            "email": {
+                "format": "صيغة البريد الإلكتروني غير صحيحة",
+                "empty": "لا يمكن أن يكون البريد الإلكتروني فارغًا",
+                "exist": "البريد الإلكتروني موجود بالفعل"
+            },
+            "country": {
+                "empty": "يرجى اختيار دولتك"
+            }
+        },
+        "newSignup": {
+            "item9": "رمز التحقق من البريد الإلكتروني",
+            "item10": "أدخل رمز التحقق من بريدك الإلكتروني",
+            "item11": "الحصول على الرمز"
+        },
+        "CodeSuccess": "تم إرسال رمز التحقق بنجاح",
+        "agreemnet8": "البريد الإلكتروني موجود بالفعل",
+        "code": "رمز التحقق من البريد الإلكتروني",
+        "getCode": "الحصول على الرمز",
+        "waitCode1": "انتظار ",
+        "waitCode2": " ثانية ",
+        "p1": "رقم مرجع الطلب",
+        "p2": "يرجى إدخال CVV",
+        "p3": "يرجى إدخال PIN",
+        "p4": "يرجى إدخال رمز التحقق من البريد الإلكتروني",
+        "p5": "رقم مرجع الطلب",
+        "t1": "لضمان أمان أموالك وإتمام عملية الدفع بسلاسة، يرجى اتباع الخطوات التالية:",
+        "t2": "تحقق من رقم مرجع الطلب للتأكد من صحة معلومات الدفع.",
+        "t3": "إذا اخترت الدفع بواسطة البطاقة البنكية، سيطلب النظام التحقق من CVV و PIN لضمان أمان المعاملة.",
+        "t4": "يرجى التحقق من بريدك الإلكتروني للحصول على رمز التحقق وإدخاله فورًا للمتابعة.",
+        "t5": "بعد التأكد من صحة جميع المعلومات، يرجى إتمام الدفع في أسرع وقت لتجنب انتهاء المهلة.",
+        "t6": "شكرًا لتعاونكم، ونتمنى لكم تجربة ممتعة!",
+        "PaymentDeadline": "الوقت المتبقي لإتمام الدفع",
+        "PaymentExpired": "انتهت صلاحية الدفع، يرجى إعادة الطلب",
+        "days": "يوم",
+        "hours": "ساعة",
+        "minutes": "دقيقة",
+        "seconds": "ثانية",
+        "Copy": "نسخ",
+        "CopySuccess": "تم النسخ بنجاح",
+        "CopyFailed": "فشل النسخ",
+        "Msg": {
+            "Cancle": "هل أنت متأكد من الإلغاء؟",
+            "SystemPrompt": "تنبيه النظام",
+            "pagesStatus": "تم إلغاء الطلب",
+            "callbackStatus": "انتهت صلاحية هذا الطلب، يرجى تقديم طلب جديد"
+        }
+    },
+    ko: {
+        "Title1": "입금 계좌",
+        "Title2": "입금 방식",
+        "Title3": "입금 금액",
+        "Title10": "출금 계좌",
+        "Title4": "출금 방식",
+        "Title5": "출금 금액",
+        "Title6": "결제 계좌",
+        "Title7": "결제 계좌를 선택하세요",
+        "Title8": "결제",
+        "Title9": "취소",
+        "cardNo": "카드 번호",
+        "bal": "잔액",
+        "bagBal": "지갑 잔액",
+        "format": "최대 소수점 두 자리의 음이 아닌 숫자",
+        "format1": "양의 정수",
+        "amount": "금액은 ",
+        "amount1": "결제 계좌 잔액이 부족합니다",
+        "Confirm": "확인",
+        "Cancel": "취소",
+        "Des1": "제출 완료, 검토 중...",
+        "Des38": "처리 중입니다. 잠시만 기다려주세요...",
+        "vaildate": {
+            "email": {
+                "format": "잘못된 이메일 형식입니다",
+                "empty": "이메일은 비워둘 수 없습니다",
+                "exist": "이미 등록된 이메일입니다"
+            },
+            "country": {
+                "empty": "거주 국가를 선택해주세요"
+            }
+        },
+        "newSignup": {
+            "item9": "이메일 인증 코드",
+            "item10": "이메일로 받은 인증 코드를 입력하세요",
+            "item11": "코드 받기"
+        },
+        "CodeSuccess": "인증 코드가 성공적으로 전송되었습니다",
+        "agreemnet8": "이메일이 이미 존재합니다",
+        "code": "이메일 인증 코드",
+        "getCode": "코드 받기",
+        "waitCode1": "대기 ",
+        "waitCode2": "초 ",
+        "p1": "주문 조회 번호",
+        "p2": "CVV를 입력해주세요",
+        "p3": "PIN을 입력해주세요",
+        "p4": "이메일 인증 코드를 입력해주세요",
+        "p5": "주문 조회 번호",
+        "t1": "자금의 안전을 위해 아래 단계를 순서대로 진행해주세요:",
+        "t2": "결제 정보가 정확한지 주문 조회 번호를 확인하세요.",
+        "t3": "카드 결제를 선택하신 경우 CVV와 PIN 확인이 필요합니다.",
+        "t4": "이메일을 확인하여 인증 코드를 입력해주세요.",
+        "t5": "모든 정보 확인 후 가능한 빨리 결제를 완료해주세요.",
+        "t6": "협조해주셔서 감사합니다. 즐거운 이용 되세요!",
+        "PaymentDeadline": "남은 결제 시간",
+        "PaymentExpired": "결제가 만료되었습니다. 다시 주문해주세요",
+        "days": "일",
+        "hours": "시간",
+        "minutes": "분",
+        "seconds": "초",
+        "Copy": "복사",
+        "CopySuccess": "복사되었습니다",
+        "CopyFailed": "복사 실패",
+        "Msg": {
+            "Cancle": "취소하시겠습니까?",
+            "SystemPrompt": "시스템 알림",
+            "pagesStatus": "주문이 취소되었습니다",
+            "callbackStatus": "이 주문은 만료되었습니다. 새로 주문해 주세요"
+        }
+    },
+    pt: {
+        "Title1": "Conta de Depósito",
+        "Title2": "Método de Depósito",
+        "Title3": "Valor do Depósito",
+        "Title10": "Conta de Saque",
+        "Title4": "Método de Saque",
+        "Title5": "Valor do Saque",
+        "Title6": "Conta de Pagamento",
+        "Title7": "Selecione a conta de pagamento",
+        "Title8": "Pagar",
+        "Title9": "Cancelar",
+        "cardNo": "Número do Cartão",
+        "bal": "Saldo",
+        "bagBal": "Saldo da Carteira",
+        "format": "Número não negativo com até duas casas decimais",
+        "format1": "Número inteiro positivo",
+        "amount": "O valor deve ser ",
+        "amount1": "Saldo insuficiente na conta de pagamento",
+        "Confirm": "Confirmar",
+        "Cancel": "Cancelar",
+        "Des1": "Enviado com sucesso, aguardando revisão...",
+        "Des38": "Processando, por favor aguarde...",
+        "vaildate": {
+            "email": {
+                "format": "Formato de e-mail inválido",
+                "empty": "O e-mail não pode estar vazio",
+                "exist": "O e-mail já existe"
+            },
+            "country": {
+                "empty": "Por favor, selecione o seu país"
+            }
+        },
+        "newSignup": {
+            "item9": "Código de verificação por e-mail",
+            "item10": "Digite o código enviado para o seu e-mail",
+            "item11": "Obter código"
+        },
+        "CodeSuccess": "Código enviado com sucesso",
+        "agreemnet8": "O e-mail já existe",
+        "code": "Código de e-mail",
+        "getCode": "Obter código",
+        "waitCode1": "Aguarde ",
+        "waitCode2": "s ",
+        "p1": "Número de referência do pedido",
+        "p2": "Digite o CVV",
+        "p3": "Digite o PIN",
+        "p4": "Digite o código de verificação do e-mail",
+        "p5": "Número de referência do pedido",
+        "t1": "Para garantir a segurança dos seus fundos e concluir o pagamento, siga os passos abaixo:",
+        "t2": "Confirme o número de referência para garantir que as informações estão corretas.",
+        "t3": "Se optar por pagar com cartão, será necessário verificar o CVV e o PIN.",
+        "t4": "Verifique o seu e-mail e insira o código recebido.",
+        "t5": "Após confirmar todas as informações, conclua o pagamento o quanto antes.",
+        "t6": "Obrigado pela cooperação. Aproveite a sua experiência!",
+        "PaymentDeadline": "Tempo restante para pagar",
+        "PaymentExpired": "Pagamento expirou, faça um novo pedido",
+        "days": "dia(s)",
+        "hours": "hora(s)",
+        "minutes": "minuto(s)",
+        "seconds": "segundo(s)",
+        "Copy": "Copiar",
+        "CopySuccess": "Copiado",
+        "CopyFailed": "Falha ao copiar",
+        "Msg": {
+            "Cancle": "Tem certeza de que deseja cancelar?",
+            "SystemPrompt": "Aviso do sistema",
+            "pagesStatus": "O pedido foi cancelado",
+            "callbackStatus": "Este pedido expirou, faça um novo pedido"
+        }
+    },
+    fa: {
+        "Title1": "حساب واریز",
+        "Title2": "روش واریز",
+        "Title3": "مبلغ واریز",
+        "Title10": "حساب برداشت",
+        "Title4": "روش برداشت",
+        "Title5": "مبلغ برداشت",
+        "Title6": "حساب پرداخت",
+        "Title7": "لطفاً حساب پرداخت را انتخاب کنید",
+        "Title8": "پرداخت",
+        "Title9": "لغو",
+        "cardNo": "شماره کارت",
+        "bal": "موجودی",
+        "bagBal": "موجودی کیف پول",
+        "format": "عدد غیرمنفی با حداکثر دو رقم اعشار",
+        "format1": "عدد صحیح مثبت",
+        "amount": "مبلغ باید ",
+        "amount1": "موجودی حساب پرداخت کافی نیست",
+        "Confirm": "تأیید",
+        "Cancel": "لغو",
+        "Des1": "با موفقیت ارسال شد، در انتظار بررسی...",
+        "Des38": "در حال پردازش، لطفاً صبر کنید...",
+        "vaildate": {
+            "email": {
+                "format": "فرمت ایمیل نادرست است",
+                "empty": "ایمیل نمی‌تواند خالی باشد",
+                "exist": "ایمیل قبلاً ثبت شده است"
+            },
+            "country": {
+                "empty": "لطفاً کشور محل سکونت خود را انتخاب کنید"
+            }
+        },
+        "newSignup": {
+            "item9": "کد تأیید ایمیل",
+            "item10": "کد تأیید ارسال‌شده به ایمیل خود را وارد کنید",
+            "item11": "دریافت کد"
+        },
+        "CodeSuccess": "کد با موفقیت ارسال شد",
+        "agreemnet8": "ایمیل قبلاً موجود است",
+        "code": "کد تأیید ایمیل",
+        "getCode": "دریافت کد",
+        "waitCode1": "انتظار ",
+        "waitCode2": " ثانیه ",
+        "p1": "شماره پیگیری سفارش",
+        "p2": "لطفاً CVV را وارد کنید",
+        "p3": "لطفاً PIN را وارد کنید",
+        "p4": "لطفاً کد تأیید ایمیل را وارد کنید",
+        "p5": "شماره پیگیری سفارش",
+        "t1": "برای اطمینان از امنیت وجوه شما و تکمیل موفقیت‌آمیز پرداخت، لطفاً مراحل زیر را انجام دهید:",
+        "t2": "شماره پیگیری سفارش خود را بررسی کنید تا از صحت اطلاعات پرداخت اطمینان حاصل شود.",
+        "t3": "در صورت انتخاب پرداخت با کارت بانکی، سیستم از شما می‌خواهد CVV و PIN را برای افزایش امنیت وارد کنید.",
+        "t4": "لطفاً ایمیل خود را بررسی کرده و کد تأیید را وارد کنید تا بتوانید ادامه دهید.",
+        "t5": "پس از بررسی اطلاعات، لطفاً هرچه سریع‌تر پرداخت را تکمیل کنید تا از انقضا یا تغییر مبلغ جلوگیری شود.",
+        "t6": "از همکاری شما سپاسگزاریم. روز خوبی داشته باشید!",
+        "PaymentDeadline": "زمان باقی‌مانده برای پرداخت",
+        "PaymentExpired": "مهلت پرداخت به پایان رسیده، لطفاً دوباره سفارش دهید",
+        "days": "روز",
+        "hours": "ساعت",
+        "minutes": "دقیقه",
+        "seconds": "ثانیه",
+        "Copy": "کپی",
+        "CopySuccess": "کپی شد",
+        "CopyFailed": "کپی ناموفق بود",
+        "Msg": {
+            "Cancle": "آیا از لغو اطمینان دارید؟",
+            "SystemPrompt": "پیام سیستم",
+            "pagesStatus": "سفارش لغو شد",
+            "callbackStatus": "این سفارش منقضی شده است، لطفاً دوباره سفارش دهید"
+        }
+    },
+    tr: {
+        "Title1": "Mevduat Hesabı",
+        "Title2": "Mevduat Yöntemi",
+        "Title3": "Mevduat Tutarı",
+        "Title10": "Çekim Hesabı",
+        "Title4": "Çekim Yöntemi",
+        "Title5": "Çekim Tutarı",
+        "Title6": "Ödeme Hesabı",
+        "Title7": "Lütfen ödeme hesabını seçin",
+        "Title8": "Öde",
+        "Title9": "İptal",
+        "cardNo": "Kart Numarası",
+        "bal": "Bakiye",
+        "bagBal": "Cüzdan Bakiyesi",
+        "format": "En fazla iki ondalıklı negatif olmayan sayı",
+        "format1": "Pozitif tam sayı",
+        "amount": "Tutar ",
+        "amount1": "Ödeme hesabı bakiyesi yetersiz",
+        "Confirm": "Onayla",
+        "Cancel": "İptal",
+        "Des1": "Gönderildi, incelemede...",
+        "Des38": "İşleniyor, lütfen bekleyin...",
+        "vaildate": {
+            "email": {
+                "format": "Geçersiz e-posta formatı",
+                "empty": "E-posta boş olamaz",
+                "exist": "E-posta zaten mevcut"
+            },
+            "country": {
+                "empty": "Lütfen ülkenizi seçin"
+            }
+        },
+        "newSignup": {
+            "item9": "E-posta doğrulama kodu",
+            "item10": "E-posta doğrulama kodunu girin",
+            "item11": "Kod al"
+        },
+        "CodeSuccess": "Kod başarıyla gönderildi",
+        "agreemnet8": "E-posta zaten mevcut",
+        "code": "E-posta kodu",
+        "getCode": "Kod al",
+        "waitCode1": "Bekle ",
+        "waitCode2": "sn ",
+        "p1": "Sipariş referans numarası",
+        "p2": "Lütfen CVV girin",
+        "p3": "Lütfen PIN girin",
+        "p4": "Lütfen e-posta doğrulama kodunu girin",
+        "p5": "Sipariş referans numarası",
+        "t1": "Fon güvenliğiniz için ödeme işlemini aşağıdaki adımlarla tamamlayınız:",
+        "t2": "Ödeme bilgilerinin doğruluğu için sipariş referans numarasını kontrol edin.",
+        "t3": "Kartla ödeme seçtiğinizde sistem CVV ve PIN doğrulaması isteyecektir.",
+        "t4": "Lütfen e-postanızı kontrol ederek doğrulama kodunu girin.",
+        "t5": "Bilgileri doğruladıktan sonra zaman aşımını önlemek için ödemeyi hızlıca tamamlayın.",
+        "t6": "İşbirliğiniz için teşekkür ederiz. İyi kullanımlar!",
+        "PaymentDeadline": "Kalan ödeme süresi",
+        "PaymentExpired": "Ödeme süresi doldu, lütfen yeniden sipariş verin",
+        "days": "gün",
+        "hours": "saat",
+        "minutes": "dakika",
+        "seconds": "saniye",
+        "Copy": "Kopyala",
+        "CopySuccess": "Kopyalandı",
+        "CopyFailed": "Kopyalama başarısız",
+        "Msg": {
+            "Cancle": "İptal etmek istediğinize emin misiniz?",
+            "SystemPrompt": "Sistem uyarısı",
+            "pagesStatus": "Sipariş iptal edildi",
+            "callbackStatus": "Bu siparişin süresi doldu, lütfen yeniden sipariş verin"
+        }
+    }
+};
+let config = {
+    Pattern: {
+        Password:
+            /^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?!.*([~!@&%$^\\(\\)#_]).*\\1.*\\1.*\\1)[A-Za-z0-9~!@&%$^\\(\\)#_]{8,16}$/,
+        Email: /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/,
+    },
+
+};
+
+let vm = new Vue({
+    el: "#paycard",
+    data() {
+        return {
+            dialogCheck: false,
+            dialogCheckOK: false,
+            dialogCheckWait: false,
+            Host80: "",
+            Host04: "",
+            loginOptions: [],
+            //多语言
+            langList: {
+                en: "ENGLISH",
+                cn: "中文简体",
+                zhHant: "中文繁體",
+                vn: "Tiếng Việt",
+                de: "Deutsch",
+                es: "Español",
+                id: "Indonesian",
+                ms: "Melayu",
+                th: "ภาษาไทย",
+                ar: "العربية",
+                ko: "한국어",
+                pt: "Português",
+                fa: "زبان پارسی",
+                tr: "Türkçe",
+            },
+            tips: ['t2', 't3', 't4', 't5'],
+            language: "cn",
+            lang: {},
+            RES: '',
+            isShow: false,
+            rules: {},
+            form: { amount: "", deductionAccount: '' },
+            userInfo: {},
+            timer: 59,
+            interval: null,
+            getCodeString: "",
+            countdownInterval: null,
+            timeLeft: 0
+        };
+    },
+    computed: {
+        // 当前选择扣款账户余额
+        currentBalance() {
+            if (!this.form.deductionAccount || !this.loginOptions.length) {
+                return 0;
+            }
+            const target = this.loginOptions.find(
+                (item) => item.type + "/" + item.cardNumber === this.form.deductionAccount
+            );
+            return target ? Number(target.balance) || 0 : 0;
+        },
+        loginOptionsDisplay() {
+            return this.loginOptions.map(item => {
+                let label = "";
+                if (item.type == "1") {
+                    label = `${this.lang["cardNo"]} - ${item.cardNumber} ${this.lang["bal"]}: ${item.balance}`;
+                } else {
+                    label = `${this.lang["bagBal"]}: ${item.balance}`;
+                }
+                return {
+                    ...item,
+                    value: item.type + '/' + item.cardNumber,
+                    lable: label
+                };
+            });
+        },
+        // 余额是否不足
+        isBalanceInsufficient() {
+            const amount = Number(this.form.amount) || 0;
+            return amount > this.currentBalance;
+        },
+        countdownText() {
+            return this.timeLeft > 0
+                ? this.formatCountdown(this.timeLeft)
+                : this.lang.PaymentExpired;
+        },
+        pagesStatus() {
+            return this.form.status == "5";
+        },
+        callbackStatus() {
+            return this.form.callbackStatus == "2";
+        }
+    },
+    methods: {
+        //验证码
+        async getCode1(val) {
+            const { email, country } = this.userInfo;
+            if (val) {
+                let res = await Api.sendCode(this.Host04, {
+                    email, country
+                }, this.form.token, this.language);
+                if (res.ok) {
+                    this.$message({
+                        message: this.lang.CodeSuccess,
+                        type: 'success'
+                    });
+                } else {
+                    if (res.msg == "邮箱已存在" || res.msg == "Mailbox already exists") {
+                        this.$pigeon.MessageError(this.lang.agreemnet8);
+                    } else {
+                        this.$pigeon.MessageError(res.msg);
+                    }
+                }
+            }
+        },
+        // 获取验证码
+        getCode: async function (val) {
+            if (val) {
+                if (!this.userInfo.country) {
+                    this.$message.error(this.lang.vaildate.country.empty);
+                    return;
+                }
+                if (!this.userInfo.email) {
+                    this.$message.error(this.lang.vaildate.email.empty);
+                    return;
+                }
+                if (!config.Pattern.Email.test(this.userInfo.email)) {
+                    this.$message.error(this.lang.vaildate.email.format);
+                    return;
+                }
+            }
+            this.getCodeString =
+                this.lang.waitCode1 +
+                this.timer +
+                this.lang.waitCode2;
+            let that = this;
+            if (!this.interval) {
+                this.getCode1(val);
+                this.interval = setInterval(() => {
+                    that.timer--;
+                    sessionStorage.setItem("timer", that.timer);
+                    that.getCodeString =
+                        this.lang.waitCode1 +
+                        that.timer +
+                        this.lang.waitCode2;
+                    if (that.timer == 0) {
+                        this.getCodeString = this.lang.newSignup.item11;
+                        clearInterval(that.interval);
+                        that.interval = null;
+                        that.timer = 59;
+                        sessionStorage.setItem("timer", that.timer);
+                    }
+                }, 1000);
+            }
+        },
+        // 初始化定时器
+        initTimer: function () {
+            let t = sessionStorage.getItem("timer") || this.timer;
+            if (t == 59) {
+                this.getCodeString = this.lang.newSignup.item11;
+            } else {
+                this.timer = sessionStorage.getItem("timer");
+                this.getCode(0);
+            }
+        },
+        // 获取账户下拉
+        async getAccountDropdown() {
+            const res = await Api.getAccountDropdown(this.Host80, this.form.token, this.language);
+            if (res.ok) {
+                this.loginOptions = res.data.map((item) => ({
+                    type: item.type,
+                    cardNumber: item.cardNumber,
+                    balance: item.balance,
+                    disabled: item.balance == 0,
+                }));
+                this.userInfo = res.data[0]
+            } else {
+                this.loginOptions = []
+            }
+        },
+        changeAccount(e) {
+            let [type, cardNumber] = e.split("/");
+            this.form = { ...this.form, type, cardNumber };
+            // 触发余额校验
+            this.$nextTick(() => {
+                this.$refs.form.validateField('deductionAccount');
+            });
+        },
+        // 用户详情
+        async userSingle() {
+            const res = await Api.userSingle(this.Host80, this.form.token, this.language);
+            if (res.ok) {
+                this.userInfo = res.data
+            }
+        },
+        async payCard() {
+            try {
+                this.$refs.form.validate(async (valid) => {
+                    if (!valid) {
+                        return;
+                    }
+                    // 倒计时到期,禁止继续支付
+                    if (this.timeLeft == 0) {
+                        this.$message.error(this.lang.PaymentExpired || '支付已超时,请重新下单');
+                        return;
+                    }
+                    // 余额校验
+                    if (this.isBalanceInsufficient) {
+                        this.$message.error(this.lang.amount1);
+                        return;
+                    }
+                    const { type, cardNumber, cvv, pin, emailCode, serial } = this.form;
+                    const { email } = this.userInfo;
+                    this.dialogCheckWait = true;
+                    const res = await Api.payCard(this.Host04, { type, cardNumber, cvv, pin, emailCode, serial, email }, this.form.token, this.language);
+                    this.dialogCheckWait = false;
+                    if (res.ok && res.data.code == 200) {
+                        this.dialogCheckOK = true;
+                        this.form.submitStatus = 1
+                        if (this.countdownInterval) {
+                            clearInterval(this.countdownInterval);
+                            this.countdownInterval = null;
+                        }
+                    } else {
+                        this.RES = res.msg || res.data.msg;
+                        this.dialogCheck = true;
+                    }
+                });
+            } catch (err) {
+                console.log("校验失败或异常:", err);
+                return false;
+            }
+        },
+        // 订单详情
+        async getDepositSerial() {
+            try {
+                const res = await Api.getDepositSerial(this.Host04, { serial: this.form.serial }, this.form.token, this.language);
+                if (res.ok) {
+                    this.form = { ...this.form, ...res.data }
+                    // 启动倒计时更新定时器
+                    this.startCountdown();
+                    this.$nextTick(() => {
+                        if (this.form.callbackStatus == "2") {
+                            this.isShow = true
+                        } else if (this.form.submitStatus == 1) {
+                            this.Pay()
+                            this.isShow = false
+                        } else {
+                            this.isShow = true
+                        }
+                    });
+                }
+            } catch (err) {
+                console.log("校验失败或异常:", err);
+                return false;
+            }
+        },
+        // 语言切换函数
+        chooseLang(key) {
+            this.lang = content[key];
+            this.language = key;
+            sessionStorage.setItem("lang", this.language);
+            this.setRules();
+            // 切换语言后刷新 getCodeString,使按钮文案随语言变化
+            if (this.timer == 59 && !this.interval) {
+                this.getCodeString = this.lang.newSignup.item11;
+            } else {
+                this.getCodeString = this.lang.waitCode1 + this.timer + this.lang.waitCode2;
+            }
+            this.$nextTick(() => {
+                this.$refs.form.clearValidate();
+            });
+        },
+        closeDia() {
+            this.dialogCheckOK = false;
+            this.$nextTick(() => {
+                if (this.form.submitStatus == 1) {
+                    this.Pay()
+                }
+            });
+        },
+        closeDia1() { this.dialogCheck = false; this.getDepositSerial() },
+        //成功跳转页面
+        Pay() {
+            window.location.href = this.Host80 + "/payment.html";
+        },
+        //取消订单
+        async Cancle() {
+            try {
+                this.$confirm(this.lang.Msg.Cancle, this.lang.Msg.SystemPrompt, {
+                    confirmButtonText: this.lang.Confirm,
+                    cancelButtonText: this.lang.Cancel,
+                    type: 'warning'
+                }).then(async () => {
+                    const { id } = this.form;
+                    const res = await Api.payCancel(this.Host04, { id }, this.form.token, this.language);
+                    if (res.ok) {
+                        this.getDepositSerial()
+                        if (this.countdownInterval) {
+                            clearInterval(this.countdownInterval);
+                            this.countdownInterval = null;
+                        }
+                    }
+                }).catch(() => {
+                });
+            } catch (err) {
+                console.log("校验失败或异常:", err);
+                return false;
+            }
+        },
+        copySerial() {
+            const serial = this.form.serial;
+            if (!serial) return;
+            if (navigator.clipboard && window.isSecureContext) {
+                // 使用 Clipboard API
+                navigator.clipboard.writeText(serial).then(() => {
+                    this.$message.success(this.lang.CopySuccess || '复制成功');
+                }).catch(err => {
+                    console.error('复制失败:', err);
+                    this.copySerialFallback(serial);
+                });
+            } else {
+                // 降级方案
+                this.copySerialFallback(serial);
+            }
+        },
+
+        copySerialFallback(serial) {
+            const textarea = document.createElement('textarea');
+            textarea.value = serial;
+            textarea.setAttribute('readonly', '');
+            textarea.style.position = 'absolute';
+            textarea.style.left = '-9999px';
+            document.body.appendChild(textarea);
+            textarea.select();
+
+            try {
+                const successful = document.execCommand('copy');
+                if (successful) {
+                    this.$message.success(this.lang.CopySuccess || '复制成功');
+                } else {
+                    this.$message.error(this.lang.CopyFailed || '复制失败');
+                }
+            } catch (err) {
+                console.error('复制失败:', err);
+                this.$message.error(this.lang.CopyFailed || '复制失败');
+            }
+
+            document.body.removeChild(textarea);
+        },
+        initCountdown() {
+            if (!this.form.payTime || !this.form.nowTime) {
+                this.timeLeft = 0;
+                return;
+            }
+
+            // Safari / iOS 兼容
+            const expire = new Date(
+                this.form.payTime.replace(/-/g, '/')
+            ).getTime();
+
+            const serverNow = new Date(
+                this.form.nowTime.replace(/-/g, '/')
+            ).getTime();
+
+            const diff = Math.floor((expire - serverNow) / 1000);
+
+            this.timeLeft = diff > 0 ? diff : 0;
+        },
+
+        /* =============================
+         * 启动倒计时
+         * ============================= */
+        startCountdown() {
+            this.clearCountdown();
+
+            this.initCountdown();
+            if (this.timeLeft <= 0) return;
+
+            this.countdownInterval = setInterval(() => {
+                if (this.timeLeft <= 0) {
+                    this.clearCountdown();
+                    return;
+                }
+                this.timeLeft--;
+            }, 1000);
+        },
+
+        /* =============================
+         * 清理定时器
+         * ============================= */
+        clearCountdown() {
+            if (this.countdownInterval) {
+                clearInterval(this.countdownInterval);
+                this.countdownInterval = null;
+            }
+        },
+
+        /* =============================
+         * 格式化倒计时展示
+         * ============================= */
+        formatCountdown(seconds) {
+            const days = Math.floor(seconds / 86400);
+            const hours = Math.floor((seconds % 86400) / 3600);
+            const minutes = Math.floor((seconds % 3600) / 60);
+            const secs = seconds % 60;
+
+            const daysText = this.lang.days || '天';
+            const hoursText = this.lang.hours || '小时';
+            const minutesText = this.lang.minutes || '分钟';
+            const secondsText = this.lang.seconds || '秒';
+
+            if (days > 0) {
+                return `${days}${daysText} ${hours}${hoursText} ${minutes}${minutesText}`;
+            } else if (hours > 0) {
+                return `${hours}${hoursText} ${minutes}${minutesText} ${secs}${secondsText}`;
+            } else {
+                return `${String(minutes).padStart(2, '0')}:${String(secs).padStart(2, '0')}`;
+            }
+        },
+        setRules() {
+            this.rules = {
+                deductionAccount: [
+                    {
+                        required: true,
+                        message: this.lang['Title7'],
+                        trigger: "change",
+                    },
+                    {
+                        validator: (rule, value, callback) => {
+                            if (!value) {
+                                callback();
+                                return;
+                            }
+                            // 检查余额是否足够
+                            if (this.isBalanceInsufficient) {
+                                callback(new Error(this.lang.amount1));
+                            } else {
+                                callback();
+                            }
+                        },
+                        trigger: "change",
+                    },
+                ],
+                cvv: [
+                    {
+                        required: true,
+                        message: this.lang['p2'],
+                        trigger: "blur",
+                    },
+                ],
+                pin: [
+                    {
+                        required: true,
+                        message: this.lang['p3'],
+                        trigger: "blur",
+                    },
+                ],
+                emailCode: [
+                    {
+                        required: true,
+                        message: this.lang['p4'],
+                        trigger: "blur",
+                    },
+                ],
+            };
+        }
+
+    },
+    mounted() {
+        let ht = window.location.protocol;
+        let ho = window.location.host.split('.')[1];
+        // this.Host04 = 'http://192.168.0.18:8004'
+        // this.Host80 = 'http://192.168.0.18:8000'
+        // this.Host04 = 'https:' + "//pay." + '44a5c8109e4' + ".com"
+        // this.Host80 = 'https:' + "//secure." + '44a5c8109e4' + ".com"
+        this.Host04 = ht + "//pay." + ho + ".com"
+        this.Host80 = ht + "//secure." + ho + ".com"
+        try {
+            const searchParams = new URLSearchParams(window.location.search);
+            const params = searchParams.get('params');
+            this.isShow = false
+            if (params) {
+                const str = parseParams(safeDecrypt(params));
+                this.form = {
+                    ...this.form,
+                    ...str,
+                }
+                this.language = this.form.lang;
+                sessionStorage.setItem("lang", this.language);
+                this.lang = content[this.form.lang];
+                if (!this.lang) {
+                    setLang(this)
+                }
+                this.setRules()
+                this.getAccountDropdown()
+                // this.userSingle()
+                this.initTimer();
+                this.getDepositSerial()
+            }
+        } catch (error) {
+            console.error('解析URL参数时出错:', error);
+        }
+    },
+    beforeDestroy() {
+        this.clearCountdown();
+    },
+});

+ 1686 - 0
vu/assets/js/ucard-paycard1.js

@@ -0,0 +1,1686 @@
+function safeDecrypt(encryptedData) {
+    try {
+        // 检查数据是否为空或无效
+        if (!encryptedData || encryptedData === 'undefined' || encryptedData === 'null') {
+            console.warn('Empty or invalid encrypted data provided');
+            return '';
+        }
+
+        // 尝试解密
+        const decrypted = CryptToJS.Decrypt(encryptedData);
+        return decrypted;
+    } catch (error) {
+        console.error('Decryption failed:', error.message);
+        // 返回空字符串而不是抛出错误
+        return '';
+    }
+}
+
+
+function setLang(that) {
+    var jsSrc = (navigator.language || navigator.browserLanguage);
+    console.log(jsSrc, 12);
+
+    // jsSrc = 'ko-IN'
+    if (jsSrc.indexOf('zh-C') >= 0) {
+        that.language = 'cn'
+        that.lang = content['cn'];
+    } else if (jsSrc.indexOf('es') >= 0) {
+        that.language = 'es'
+        that.lang = content['es'];
+    } else if (jsSrc.indexOf('zh-') >= 0) {
+        that.language = 'zhHant'
+        that.lang = content['zhHant'];
+    } else if (jsSrc.indexOf('ar') >= 0) {
+        that.language = 'ar'
+        that.lang = content['ar'];
+    } else if (jsSrc.indexOf('de') >= 0) {
+        that.language = 'de'
+        that.lang = content['de'];
+    } else if (jsSrc.indexOf('id') >= 0) {
+        that.language = 'id'
+        that.lang = content['id'];
+    } else if (jsSrc.indexOf('ko') >= 0 && jsSrc.indexOf('kok') == -1) {
+        that.language = 'ko'
+        that.lang = content['ko'];
+    } else if (jsSrc.indexOf('ms') >= 0) {
+        that.language = 'ms'
+        that.lang = content['ms'];
+    } else if (jsSrc.indexOf('th') >= 0) {
+        that.language = 'th'
+        that.lang = content['th'];
+    } else if (jsSrc.indexOf('vi') >= 0) {
+        that.language = 'vn'
+        that.lang = content['vn'];
+    } else if (jsSrc.indexOf('fa') >= 0) {
+        that.language = 'fa'
+        that.lang = content['fa'];
+    } else if (jsSrc.indexOf('pt') >= 0) {
+        that.language = 'pt'
+        that.lang = content['pt'];
+    } else if (jsSrc.indexOf('tr') >= 0) {
+        that.language = 'tr'
+        that.lang = content['tr'];
+    } else {
+        that.language = 'en'
+        that.lang = content['en'];
+    }
+    sessionStorage.setItem("lang", that.language);
+}
+
+function parseParams(str) {
+    const parts = str.split('/');
+    const tag = parts.pop();
+    const types = parts.pop();
+    const serial = parts.pop();
+    const lang = parts.pop();
+    const token = parts.join('/');
+    return {
+        token,
+        lang,
+        serial,
+        types,
+        tag
+    };
+}
+const SystemError = {
+    "cn": "网络状态不佳,请稍后重试。",
+    "en": "The network is not in good condition. Please try again later.",
+    "vn": "Mạng không được tốt lắm. Vui lòng thử lại sau.",
+}
+// 通用请求封装
+async function request(method, url, data = {}, token = "", language = "en") {
+    try {
+        const res = await axios({
+            method,
+            url,
+            data,
+            headers: token
+                ? { "access-token": token, language }  // 正确 header
+                : { language }
+        });
+        if (res.data.code === 200) {
+            return { ok: true, data: res.data.data };
+        } else {
+            return { ok: false, msg: res.data.msg || SystemError[sessionStorage.setItem('lang')] || SystemError['en'] };
+        }
+    } catch (err) {
+        console.error("请求异常:", err);
+        return {
+            ok: false, msg:
+                SystemError[sessionStorage.setItem('lang')] || SystemError['en']
+        };
+    }
+}
+
+const Api = {
+    // 获取账户下拉
+    async getAccountDropdown(baseUrl, token, language) {
+        const res = await request("POST", baseUrl + "/wasabi/card/account/dropdown", {}, token, language);
+        if (!res.ok) return res;
+        return {
+            ok: true,
+            data: res.data
+        };
+    },
+
+    // 用户详情(同样格式)
+    async userSingle(baseUrl, token, language) {
+        const res = await request("POST", baseUrl + "/wasabi/merchant/user/single", {}, token, language);
+        if (!res.ok) return res;
+        return {
+            ok: true,
+            data: res.data
+        };
+    },
+
+    // 获取验证码
+    async sendCode(baseUrl, params, token, language) {
+        const res = await request("POST", baseUrl + "/ucard/send/email/code", params, token, language);
+        if (!res.ok) return res;
+        return {
+            ok: true,
+            data: res.data
+        };
+    },
+
+    // 支付
+    async payCard(baseUrl, params, token, language) {
+        const res = await request(
+            "POST",
+            baseUrl + '/ucard/pay',
+            params,
+            token,
+            language
+        );
+        if (!res.ok) return res;
+        return {
+            ok: true,
+            data: res.data
+        };
+    },
+    // 取消订单
+    async payCancel(baseUrl, params, token, language) {
+        const res = await request(
+            "POST",
+            baseUrl + '/finance/deposit/cancel',
+            params,
+            token,
+            language
+        );
+        if (!res.ok) return res;
+        return {
+            ok: true,
+            data: res.data
+        };
+    },
+
+    // 订单详情
+    async getDepositSerial(baseUrl, params, token, language) {
+        const res = await request(
+            "POST",
+            baseUrl + "/ucard/get/deposit/serial",
+            params,
+            token,
+            language
+        );
+        if (!res.ok) return res;
+        return {
+            ok: true,
+            data: res.data
+        };
+    }
+};
+
+
+var content = {
+    cn: {
+        "Title1": "存款账户",
+        "Title2": "存款方式",
+        "Title3": "存款金额",
+        "Title10": "提款账户",
+        "Title4": "提款方式",
+        "Title5": "提款金额",
+        "Title6": "付款账户",
+        "Title7": "请选择付款账户",
+        "Title8": "支付",
+        "Title9": "取消",
+        "cardNo": "卡号",
+        "bal": "余额",
+        "bagBal": "钱包余额",
+        "format": "最多两位小数的非负数",
+        "format1": "正整数",
+        "amount": "金额需是 ",
+        "amount1": "付款账户余额不足",
+        "Confirm": "确认",
+        "Cancel": "取消",
+        "Des1": "提交成功,待审核中...",
+        "Des38": "正在处理,请耐心等待...",
+        "vaildate": {
+            "email": {
+                "format": "邮箱格式错误",
+                "empty": "邮箱不能为空",
+                "exist": "邮箱已存在"
+            },
+            "country": {
+                "empty": "请选择您所在国家"
+            },
+        },
+        "newSignup": {
+            "item9": "邮箱验证码",
+            "item10": "输入您的邮箱验证码",
+            "item11": "获取验证码",
+        },
+        "CodeSuccess": "验证码获取成功",
+        "agreemnet8": "电子邮件已存在",
+        "code": "邮箱验证码",
+        "getCode": "获取验证码",
+        "waitCode1": "等待 ",
+        "waitCode2": "s ",
+        "p1": "订单流水号",
+        "p2": "请输入CVV",
+        "p3": "请输入PIN",
+        "p4": "请输入邮箱验证码",
+        "p5": "订单流水号",
+        "t1": "为确保您的资金安全并顺利完成支付,请您依次完成以下步骤:",
+        "t2": "确认您的流水订单号,确保支付信息准确无误。",
+        "t3": "若选择 银行卡支付,系统将要求您验证 CVV 和 PIN,以保障交易安全。",
+        "t4": "请前往您的邮箱查看验证码并及时输入,以继续下一步操作。",
+        "t5": "核对所有信息无误后,请尽快完成支付,以避免订单超时或金额变动。",
+        "t6": "感谢您的配合,祝您使用愉快!",
+        "PaymentDeadline": "支付剩余时间",
+        "PaymentExpired": "支付已超时,请重新下单",
+        "days": "天",
+        "hours": "小时",
+        "minutes": "分钟",
+        "seconds": "秒",
+        "Copy": "复制",
+        "CopySuccess": "复制成功",
+        "CopyFailed": "复制失败",
+        "Msg": {
+            "Cancle": "确定要取消吗?",
+            "SystemPrompt": "系统提示",
+            "pagesStatus": "订单已取消",
+            "callbackStatus": "此订单已失效,请重新下单",
+        }
+    },
+    zhHant: {
+        "Title1": "存款帳戶",
+        "Title2": "存款方式",
+        "Title3": "存款金額",
+        "Title10": "提款帳戶",
+        "Title4": "提款方式",
+        "Title5": "提款金額",
+        "Title6": "付款帳戶",
+        "Title7": "請選擇付款帳戶",
+        "Title8": "支付",
+        "Title9": "取消",
+        "cardNo": "卡號",
+        "bal": "餘額",
+        "bagBal": "錢包餘額",
+        "format": "最多兩位小數的非負數",
+        "format1": "正整數",
+        "amount": "金額需是 ",
+        "amount1": "付款帳戶餘額不足",
+        "Confirm": "確認",
+        "Cancel": "取消",
+        "Des1": "提交成功,待審核中...",
+        "Des38": "正在處理,請耐心等待...",
+        "vaildate": {
+            "email": {
+                "format": "邮箱格式錯誤",
+                "empty": "邮箱不能為空",
+                "exist": "邮箱已存在"
+            },
+            "country": {
+                "empty": "請選擇您所在國家"
+            }
+        },
+        "newSignup": {
+            "item9": "邮箱驗證碼",
+            "item10": "輸入您的邮箱驗證碼",
+            "item11": "獲取驗證碼"
+        },
+        "CodeSuccess": "驗證碼獲取成功",
+        "agreemnet8": "電子郵件已存在",
+        "code": "邮箱驗證碼",
+        "getCode": "獲取驗證碼",
+        "waitCode1": "等待 ",
+        "waitCode2": "秒 ",
+        "p1": "訂單流水號",
+        "p2": "請輸入CVV",
+        "p3": "請輸入PIN",
+        "p4": "請輸入邮箱驗證碼",
+        "p5": "訂單流水號",
+        "t1": "為確保您的資金安全並順利完成支付,請依序完成以下步驟:",
+        "t2": "確認您的流水訂單號,確保支付資訊正確無誤。",
+        "t3": "若選擇銀行卡支付,系統將要求您驗證 CVV 和 PIN,以保障交易安全。",
+        "t4": "請前往您的邮箱查看驗證碼並及時輸入,以繼續下一步操作。",
+        "t5": "核對所有資訊無誤後,請盡快完成支付,以避免訂單超時或金額變動。",
+        "t6": "感謝您的配合,祝您使用愉快!",
+        "PaymentDeadline": "支付剩餘時間",
+        "PaymentExpired": "支付已超時,請重新下單",
+        "days": "天",
+        "hours": "小時",
+        "minutes": "分鐘",
+        "seconds": "秒",
+        "Copy": "複製",
+        "CopySuccess": "複製成功",
+        "CopyFailed": "複製失敗",
+        "Msg": {
+            "Cancle": "確定要取消嗎?",
+            "SystemPrompt": "系統提示",
+            "pagesStatus": "訂單已取消",
+            "callbackStatus": "此訂單已失效,請重新下單"
+        }
+    },
+    en: {
+        "Title1": "Deposit Account",
+        "Title2": "Deposit Method",
+        "Title3": "Deposit Amount",
+        "Title10": "Withdrawal Account",
+        "Title4": "Withdrawal Method",
+        "Title5": "Withdrawal Amount",
+        "Title6": "Payment Account",
+        "Title7": "Please select payment account",
+        "Title8": "Pay",
+        "Title9": "Cancel",
+        "cardNo": "Card Number",
+        "bal": "Balance",
+        "bagBal": "Wallet Balance",
+        "format": "Non-negative number with up to two decimals",
+        "format1": "Positive integer",
+        "amount": "Amount must be ",
+        "amount1": "Insufficient payment account balance",
+        "Confirm": "Confirm",
+        "Cancel": "Cancel",
+        "Des1": "Submitted successfully, pending review...",
+        "Des38": "Processing, please wait...",
+        "vaildate": {
+            "email": {
+                "format": "Invalid email format",
+                "empty": "Email cannot be empty",
+                "exist": "Email already exists"
+            },
+            "country": {
+                "empty": "Please select your country"
+            }
+        },
+        "newSignup": {
+            "item9": "Email verification code",
+            "item10": "Enter your email verification code",
+            "item11": "Get code"
+        },
+        "CodeSuccess": "Verification code sent successfully",
+        "agreemnet8": "Email already exists",
+        "code": "Email verification code",
+        "getCode": "Get code",
+        "waitCode1": "Wait ",
+        "waitCode2": "s ",
+        "p1": "Order reference number",
+        "p2": "Please enter CVV",
+        "p3": "Please enter PIN",
+        "p4": "Please enter the email verification code",
+        "p5": "Order reference number",
+        "t1": "To ensure your funds are secure and your payment is completed smoothly, please follow the steps below:",
+        "t2": "Confirm your order reference number to ensure the payment information is correct.",
+        "t3": "If you choose bank card payment, the system will require CVV and PIN verification for security.",
+        "t4": "Please check your email for the verification code and enter it promptly to proceed.",
+        "t5": "After verifying all details, please complete the payment as soon as possible to avoid timeout or changes in the amount.",
+        "t6": "Thank you for your cooperation. Enjoy your experience!",
+        "PaymentDeadline": "Time remaining to pay",
+        "PaymentExpired": "Payment expired, please place a new order",
+        "days": "day(s)",
+        "hours": "hour(s)",
+        "minutes": "minute(s)",
+        "seconds": "second(s)",
+        "Copy": "Copy",
+        "CopySuccess": "Copied",
+        "CopyFailed": "Copy failed",
+        "Msg": {
+            "Cancle": "Are you sure you want to cancel?",
+            "SystemPrompt": "System prompt",
+            "pagesStatus": "Order has been cancelled",
+            "callbackStatus": "This order has expired, please place a new order"
+        }
+    },
+    vn: {
+        "Title1": "Tài khoản gửi tiền",
+        "Title2": "Phương thức gửi tiền",
+        "Title3": "Số tiền gửi",
+        "Title10": "Tài khoản rút tiền",
+        "Title4": "Phương thức rút tiền",
+        "Title5": "Số tiền rút",
+        "Title6": "Tài khoản thanh toán",
+        "Title7": "Vui lòng chọn tài khoản thanh toán",
+        "Title8": "Thanh toán",
+        "Title9": "Hủy",
+        "cardNo": "Số thẻ",
+        "bal": "Số dư",
+        "bagBal": "Số dư ví",
+        "format": "Số không âm với tối đa hai chữ số thập phân",
+        "format1": "Số nguyên dương",
+        "amount": "Số tiền phải ",
+        "amount1": "Số dư tài khoản thanh toán không đủ",
+        "Confirm": "Xác nhận",
+        "Cancel": "Hủy",
+        "Des1": "Gửi thành công, đang chờ xét duyệt...",
+        "Des38": "Đang xử lý, vui lòng chờ...",
+        "vaildate": {
+            "email": {
+                "format": "Định dạng email không hợp lệ",
+                "empty": "Email không được để trống",
+                "exist": "Email đã tồn tại"
+            },
+            "country": {
+                "empty": "Vui lòng chọn quốc gia của bạn"
+            }
+        },
+        "newSignup": {
+            "item9": "Mã xác thực email",
+            "item10": "Nhập mã xác thực từ email của bạn",
+            "item11": "Lấy mã"
+        },
+        "CodeSuccess": "Lấy mã thành công",
+        "agreemnet8": "Email đã tồn tại",
+        "code": "Mã email",
+        "getCode": "Lấy mã",
+        "waitCode1": "Chờ ",
+        "waitCode2": "s ",
+        "p1": "Mã tham chiếu đơn hàng",
+        "p2": "Vui lòng nhập CVV",
+        "p3": "Vui lòng nhập PIN",
+        "p4": "Vui lòng nhập mã xác thực email",
+        "p5": "Mã tham chiếu đơn hàng",
+        "t1": "Để đảm bảo an toàn tài chính và hoàn tất thanh toán suôn sẻ, vui lòng làm theo các bước sau:",
+        "t2": "Xác nhận mã tham chiếu đơn hàng để đảm bảo thông tin chính xác.",
+        "t3": "Nếu chọn thanh toán bằng thẻ, hệ thống sẽ yêu cầu xác minh CVV và PIN.",
+        "t4": "Hãy kiểm tra email và nhập mã xác thực để tiếp tục.",
+        "t5": "Sau khi xác nhận thông tin, vui lòng thanh toán sớm để tránh hết hạn.",
+        "t6": "Cảm ơn sự hợp tác của bạn. Chúc bạn trải nghiệm vui vẻ!",
+        "PaymentDeadline": "Thời gian thanh toán còn lại",
+        "PaymentExpired": "Thanh toán đã hết hạn, vui lòng đặt lại",
+        "days": "ngày",
+        "hours": "giờ",
+        "minutes": "phút",
+        "seconds": "giây",
+        "Copy": "Sao chép",
+        "CopySuccess": "Sao chép thành công",
+        "CopyFailed": "Sao chép thất bại",
+        "Msg": {
+            "Cancle": "Bạn có chắc muốn hủy không?",
+            "SystemPrompt": "Thông báo hệ thống",
+            "pagesStatus": "Đơn hàng đã bị hủy",
+            "callbackStatus": "Đơn hàng này đã hết hiệu lực, vui lòng đặt lại"
+        }
+    },
+    de: {
+        "Title1": "Einzahlungskonto",
+        "Title2": "Einzahlungsmethode",
+        "Title3": "Einzahlungsbetrag",
+        "Title10": "Auszahlungskonto",
+        "Title4": "Auszahlungsmethode",
+        "Title5": "Auszahlungsbetrag",
+        "Title6": "Zahlungskonto",
+        "Title7": "Bitte Zahlungskonto auswählen",
+        "Title8": "Bezahlen",
+        "Title9": "Abbrechen",
+        "cardNo": "Kartennummer",
+        "bal": "Kontostand",
+        "bagBal": "Wallet-Guthaben",
+        "format": "Nicht-negative Zahl mit bis zu zwei Dezimalstellen",
+        "format1": "Positive ganze Zahl",
+        "amount": "Der Betrag muss ",
+        "amount1": "Unzureichendes Guthaben auf dem Zahlungskonto",
+        "Confirm": "Bestätigen",
+        "Cancel": "Abbrechen",
+        "Des1": "Erfolgreich eingereicht, wird überprüft...",
+        "Des38": "Wird verarbeitet, bitte warten...",
+        "vaildate": {
+            "email": {
+                "format": "Ungültiges E-Mail-Format",
+                "empty": "E-Mail darf nicht leer sein",
+                "exist": "E-Mail existiert bereits"
+            },
+            "country": {
+                "empty": "Bitte wählen Sie Ihr Land aus"
+            }
+        },
+        "newSignup": {
+            "item9": "E-Mail-Bestätigungscode",
+            "item10": "Geben Sie Ihren E-Mail-Bestätigungscode ein",
+            "item11": "Code anfordern"
+        },
+        "CodeSuccess": "Bestätigungscode erfolgreich gesendet",
+        "agreemnet8": "E-Mail existiert bereits",
+        "code": "E-Mail-Bestätigungscode",
+        "getCode": "Code anfordern",
+        "waitCode1": "Warten ",
+        "waitCode2": "s ",
+        "p1": "Bestellreferenznummer",
+        "p2": "Bitte CVV eingeben",
+        "p3": "Bitte PIN eingeben",
+        "p4": "Bitte E-Mail-Bestätigungscode eingeben",
+        "p5": "Bestellreferenznummer",
+        "t1": "Um die Sicherheit Ihrer Gelder zu gewährleisten und die Zahlung reibungslos abzuschließen, folgen Sie bitte den folgenden Schritten:",
+        "t2": "Bestätigen Sie die Bestellreferenznummer, um sicherzustellen, dass die Zahlungsinformationen korrekt sind.",
+        "t3": "Wenn Sie Kartenzahlung wählen, verlangt das System eine CVV- und PIN-Verifizierung zur Sicherheit.",
+        "t4": "Bitte überprüfen Sie Ihre E-Mail auf den Bestätigungscode und geben Sie ihn umgehend ein.",
+        "t5": "Bitte schließen Sie die Zahlung zeitnah ab, um ein Ablaufen der Bestellung oder Betragsänderungen zu vermeiden.",
+        "t6": "Vielen Dank für Ihre Zusammenarbeit und viel Freude bei der Nutzung!",
+        "PaymentDeadline": "Verbleibende Zahlungszeit",
+        "PaymentExpired": "Zahlung abgelaufen, bitte neu bestellen",
+        "days": "Tag(e)",
+        "hours": "Stunde(n)",
+        "minutes": "Minute(n)",
+        "seconds": "Sekunde(n)",
+        "Copy": "Kopieren",
+        "CopySuccess": "Kopiert",
+        "CopyFailed": "Kopieren fehlgeschlagen",
+        "Msg": {
+            "Cancle": "Sind Sie sicher, dass Sie stornieren möchten?",
+            "SystemPrompt": "Systemhinweis",
+            "pagesStatus": "Bestellung wurde storniert",
+            "callbackStatus": "Diese Bestellung ist abgelaufen, bitte bestellen Sie erneut"
+        }
+    },
+    es: {
+        "Title1": "Cuenta de depósito",
+        "Title2": "Método de depósito",
+        "Title3": "Monto del depósito",
+        "Title10": "Cuenta de retiro",
+        "Title4": "Método de retiro",
+        "Title5": "Monto del retiro",
+        "Title6": "Cuenta de pago",
+        "Title7": "Seleccione la cuenta de pago",
+        "Title8": "Pagar",
+        "Title9": "Cancelar",
+        "cardNo": "Número de tarjeta",
+        "bal": "Saldo",
+        "bagBal": "Saldo de la billetera",
+        "format": "Número no negativo con hasta dos decimales",
+        "format1": "Entero positivo",
+        "amount": "El monto debe ser ",
+        "amount1": "Saldo insuficiente en la cuenta de pago",
+        "Confirm": "Confirmar",
+        "Cancel": "Cancelar",
+        "Des1": "Enviado, en revisión...",
+        "Des38": "Procesando, por favor espere...",
+        "vaildate": {
+            "email": {
+                "format": "Formato de correo electrónico inválido",
+                "empty": "El correo electrónico no puede estar vacío",
+                "exist": "El correo electrónico ya existe"
+            },
+            "country": {
+                "empty": "Seleccione su país"
+            }
+        },
+        "newSignup": {
+            "item9": "Código de verificación por correo",
+            "item10": "Ingrese el código enviado a su correo",
+            "item11": "Obtener código"
+        },
+        "CodeSuccess": "Código enviado con éxito",
+        "agreemnet8": "El correo electrónico ya existe",
+        "code": "Código de correo",
+        "getCode": "Obtener código",
+        "waitCode1": "Esperar ",
+        "waitCode2": "s ",
+        "p1": "Número de referencia del pedido",
+        "p2": "Ingrese el CVV",
+        "p3": "Ingrese el PIN",
+        "p4": "Ingrese el código de verificación del correo",
+        "p5": "Número de referencia del pedido",
+        "t1": "Para garantizar la seguridad de sus fondos y completar el pago sin problemas, siga los pasos a continuación:",
+        "t2": "Confirme el número de referencia del pedido para asegurar que la información sea correcta.",
+        "t3": "Si elige pago con tarjeta bancaria, el sistema solicitará la verificación de CVV y PIN por seguridad.",
+        "t4": "Revise su correo y escriba el código recibido para continuar.",
+        "t5": "Después de verificar la información, complete el pago lo antes posible para evitar vencimientos.",
+        "t6": "¡Gracias por su cooperación, disfrute su experiencia!",
+        "PaymentDeadline": "Tiempo restante para pagar",
+        "PaymentExpired": "El pago ha expirado, haga un nuevo pedido",
+        "days": "día(s)",
+        "hours": "hora(s)",
+        "minutes": "minuto(s)",
+        "seconds": "segundo(s)",
+        "Copy": "Copiar",
+        "CopySuccess": "Copiado",
+        "CopyFailed": "Error al copiar",
+        "Msg": {
+            "Cancle": "¿Está seguro de que desea cancelar?",
+            "SystemPrompt": "Aviso del sistema",
+            "pagesStatus": "El pedido ha sido cancelado",
+            "callbackStatus": "Este pedido ha expirado, realice uno nuevo"
+        }
+    },
+    id: {
+        "Title1": "Akun Deposit",
+        "Title2": "Metode Deposit",
+        "Title3": "Jumlah Deposit",
+        "Title10": "Akun Penarikan",
+        "Title4": "Metode Penarikan",
+        "Title5": "Jumlah Penarikan",
+        "Title6": "Akun Pembayaran",
+        "Title7": "Silakan pilih akun pembayaran",
+        "Title8": "Bayar",
+        "Title9": "Batal",
+        "cardNo": "Nomor Kartu",
+        "bal": "Saldo",
+        "bagBal": "Saldo Dompet",
+        "format": "Angka non-negatif dengan maksimal dua desimal",
+        "format1": "Bilangan bulat positif",
+        "amount": "Jumlah harus ",
+        "amount1": "Saldo akun pembayaran tidak mencukupi",
+        "Confirm": "Konfirmasi",
+        "Cancel": "Batal",
+        "Des1": "Berhasil dikirim, menunggu tinjauan...",
+        "Des38": "Sedang diproses, harap tunggu...",
+        "vaildate": {
+            "email": {
+                "format": "Format email tidak valid",
+                "empty": "Email tidak boleh kosong",
+                "exist": "Email sudah terdaftar"
+            },
+            "country": {
+                "empty": "Silakan pilih negara Anda"
+            }
+        },
+        "newSignup": {
+            "item9": "Kode verifikasi email",
+            "item10": "Masukkan kode verifikasi dari email Anda",
+            "item11": "Dapatkan kode"
+        },
+        "CodeSuccess": "Kode berhasil dikirim",
+        "agreemnet8": "Email sudah ada",
+        "code": "Kode email",
+        "getCode": "Dapatkan kode",
+        "waitCode1": "Menunggu ",
+        "waitCode2": "d ",
+        "p1": "Nomor referensi pesanan",
+        "p2": "Silakan masukkan CVV",
+        "p3": "Silakan masukkan PIN",
+        "p4": "Silakan masukkan kode verifikasi email",
+        "p5": "Nomor referensi pesanan",
+        "t1": "Untuk memastikan keamanan dana Anda dan menyelesaikan pembayaran dengan lancar, silakan ikuti langkah-langkah berikut:",
+        "t2": "Konfirmasi nomor referensi pesanan untuk memastikan informasi pembayaran benar.",
+        "t3": "Jika memilih pembayaran dengan kartu, sistem akan meminta verifikasi CVV dan PIN demi keamanan.",
+        "t4": "Silakan periksa email Anda dan masukkan kode verifikasi untuk melanjutkan.",
+        "t5": "Setelah semua informasi benar, selesaikan pembayaran segera untuk menghindari kedaluwarsa.",
+        "t6": "Terima kasih atas kerja sama Anda. Semoga pengalaman Anda menyenangkan!",
+        "PaymentDeadline": "Sisa waktu pembayaran",
+        "PaymentExpired": "Pembayaran kedaluwarsa, silakan pesan ulang",
+        "days": "hari",
+        "hours": "jam",
+        "minutes": "menit",
+        "seconds": "detik",
+        "Copy": "Salin",
+        "CopySuccess": "Berhasil disalin",
+        "CopyFailed": "Gagal menyalin",
+        "Msg": {
+            "Cancle": "Yakin ingin membatalkan?",
+            "SystemPrompt": "Notifikasi sistem",
+            "pagesStatus": "Pesanan telah dibatalkan",
+            "callbackStatus": "Pesanan ini telah kedaluwarsa, silakan pesan ulang"
+        }
+    },
+    ms: {
+        "Title1": "Akaun Deposit",
+        "Title2": "Kaedah Deposit",
+        "Title3": "Jumlah Deposit",
+        "Title10": "Akaun Pengeluaran",
+        "Title4": "Kaedah Pengeluaran",
+        "Title5": "Jumlah Pengeluaran",
+        "Title6": "Akaun Pembayaran",
+        "Title7": "Sila pilih akaun pembayaran",
+        "Title8": "Bayar",
+        "Title9": "Batal",
+        "cardNo": "Nombor Kad",
+        "bal": "Baki",
+        "bagBal": "Baki Dompet",
+        "format": "Nombor tidak negatif dengan maksimum dua titik perpuluhan",
+        "format1": "Integer positif",
+        "amount": "Jumlah mesti ",
+        "amount1": "Baki akaun pembayaran tidak mencukupi",
+        "Confirm": "Sahkan",
+        "Cancel": "Batal",
+        "Des1": "Berjaya dihantar, menunggu semakan...",
+        "Des38": "Sedang diproses, sila tunggu...",
+        "vaildate": {
+            "email": {
+                "format": "Format emel tidak sah",
+                "empty": "Emel tidak boleh kosong",
+                "exist": "Emel sudah wujud"
+            },
+            "country": {
+                "empty": "Sila pilih negara anda"
+            }
+        },
+        "newSignup": {
+            "item9": "Kod pengesahan emel",
+            "item10": "Masukkan kod pengesahan dari emel anda",
+            "item11": "Dapatkan kod"
+        },
+        "CodeSuccess": "Kod berjaya dihantar",
+        "agreemnet8": "Emel sudah wujud",
+        "code": "Kod emel",
+        "getCode": "Dapatkan kod",
+        "waitCode1": "Menunggu ",
+        "waitCode2": "s ",
+        "p1": "Nombor rujukan pesanan",
+        "p2": "Sila masukkan CVV",
+        "p3": "Sila masukkan PIN",
+        "p4": "Sila masukkan kod pengesahan emel",
+        "p5": "Nombor rujukan pesanan",
+        "t1": "Untuk memastikan keselamatan dana anda dan melengkapkan pembayaran dengan lancar, sila ikut langkah berikut:",
+        "t2": "Sahkan nombor rujukan pesanan untuk memastikan maklumat adalah tepat.",
+        "t3": "Jika memilih pembayaran kad, sistem akan meminta pengesahan CVV dan PIN.",
+        "t4": "Sila semak emel anda dan masukkan kod pengesahan untuk meneruskan.",
+        "t5": "Selepas semua maklumat disahkan, sila lengkapkan pembayaran segera untuk mengelakkan tamat tempoh.",
+        "t6": "Terima kasih atas kerjasama anda. Selamat menggunakan perkhidmatan kami!",
+        "PaymentDeadline": "Masa pembayaran yang tinggal",
+        "PaymentExpired": "Pembayaran tamat tempoh, sila buat pesanan baharu",
+        "days": "hari",
+        "hours": "jam",
+        "minutes": "minit",
+        "seconds": "saat",
+        "Copy": "Salin",
+        "CopySuccess": "Berjaya disalin",
+        "CopyFailed": "Salinan gagal",
+        "Msg": {
+            "Cancle": "Adakah anda pasti mahu batalkan?",
+            "SystemPrompt": "Pemberitahuan sistem",
+            "pagesStatus": "Pesanan telah dibatalkan",
+            "callbackStatus": "Pesanan ini telah luput, sila buat pesanan baharu"
+        }
+    },
+    th: {
+        "Title1": "บัญชีฝากเงิน",
+        "Title2": "วิธีการฝากเงิน",
+        "Title3": "จำนวนเงินฝาก",
+        "Title10": "บัญชีถอนเงิน",
+        "Title4": "วิธีการถอนเงิน",
+        "Title5": "จำนวนเงินถอน",
+        "Title6": "บัญชีชำระเงิน",
+        "Title7": "กรุณาเลือกบัญชีชำระเงิน",
+        "Title8": "ชำระเงิน",
+        "Title9": "ยกเลิก",
+        "cardNo": "หมายเลขบัตร",
+        "bal": "ยอดคงเหลือ",
+        "bagBal": "ยอดเงินในวอลเล็ต",
+        "format": "ตัวเลขที่ไม่เป็นลบและมีทศนิยมไม่เกินสองตำแหน่ง",
+        "format1": "จำนวนเต็มบวก",
+        "amount": "จำนวนเงินต้อง ",
+        "amount1": "ยอดเงินในบัญชีชำระไม่เพียงพอ",
+        "Confirm": "ยืนยัน",
+        "Cancel": "ยกเลิก",
+        "Des1": "ส่งสำเร็จ กำลังรอการตรวจสอบ...",
+        "Des38": "กำลังดำเนินการ โปรดรอ...",
+        "vaildate": {
+            "email": {
+                "format": "รูปแบบอีเมลไม่ถูกต้อง",
+                "empty": "อีเมลไม่สามารถเว้นว่างได้",
+                "exist": "อีเมลนี้มีอยู่แล้ว"
+            },
+            "country": {
+                "empty": "กรุณาเลือกประเทศของคุณ"
+            }
+        },
+        "newSignup": {
+            "item9": "รหัสยืนยันอีเมล",
+            "item10": "กรอกรหัสยืนยันจากอีเมลของคุณ",
+            "item11": "ขอรหัส"
+        },
+        "CodeSuccess": "ส่งรหัสสำเร็จ",
+        "agreemnet8": "อีเมลนี้มีอยู่แล้ว",
+        "code": "รหัสยืนยันอีเมล",
+        "getCode": "ขอรหัส",
+        "waitCode1": "รอ ",
+        "waitCode2": "วินาที ",
+        "p1": "หมายเลขอ้างอิงคำสั่งซื้อ",
+        "p2": "กรุณากรอก CVV",
+        "p3": "กรุณากรอก PIN",
+        "p4": "กรุณากรอกรหัสยืนยันอีเมล",
+        "p5": "หมายเลขอ้างอิงคำสั่งซื้อ",
+        "t1": "เพื่อความปลอดภัยของเงินทุนและการชำระเงินที่ราบรื่น โปรดทำตามขั้นตอนต่อไปนี้:",
+        "t2": "ยืนยันหมายเลขอ้างอิงคำสั่งซื้อเพื่อให้แน่ใจว่าข้อมูลถูกต้อง",
+        "t3": "หากเลือกชำระเงินด้วยบัตร ระบบจะขอให้ยืนยัน CVV และ PIN",
+        "t4": "โปรดตรวจสอบอีเมลและกรอกรหัสเพื่อดำเนินการต่อ",
+        "t5": "เมื่อข้อมูลถูกต้องแล้ว โปรดชำระเงินโดยเร็วเพื่อหลีกเลี่ยงการหมดเวลา",
+        "t6": "ขอบคุณสำหรับความร่วมมือ ขอให้ท่านมีความสุขในการใช้งาน!",
+        "PaymentDeadline": "เวลาที่เหลือสำหรับการชำระเงิน",
+        "PaymentExpired": "การชำระเงินหมดเวลา กรุณาสั่งใหม่",
+        "days": "วัน",
+        "hours": "ชั่วโมง",
+        "minutes": "นาที",
+        "seconds": "วินาที",
+        "Copy": "คัดลอก",
+        "CopySuccess": "คัดลอกสำเร็จ",
+        "CopyFailed": "คัดลอกไม่สำเร็จ",
+        "Msg": {
+            "Cancle": "ยืนยันที่จะยกเลิกใช่หรือไม่?",
+            "SystemPrompt": "ข้อความจากระบบ",
+            "pagesStatus": "คำสั่งซื้อถูกยกเลิกแล้ว",
+            "callbackStatus": "คำสั่งซื้อนี้หมดอายุแล้ว โปรดสั่งใหม่"
+        }
+    },
+    ar: {
+        "Title1": "حساب الإيداع",
+        "Title2": "طريقة الإيداع",
+        "Title3": "مبلغ الإيداع",
+        "Title10": "حساب السحب",
+        "Title4": "طريقة السحب",
+        "Title5": "مبلغ السحب",
+        "Title6": "حساب الدفع",
+        "Title7": "يرجى اختيار حساب الدفع",
+        "Title8": "دفع",
+        "Title9": "إلغاء",
+        "cardNo": "رقم البطاقة",
+        "bal": "الرصيد",
+        "bagBal": "رصيد المحفظة",
+        "format": "عدد غير سالب بحد أقصى منزلتين عشريتين",
+        "format1": "عدد صحيح موجب",
+        "amount": "يجب أن يكون المبلغ ",
+        "amount1": "رصيد حساب الدفع غير كافٍ",
+        "Confirm": "تأكيد",
+        "Cancel": "إلغاء",
+        "Des1": "تم الإرسال، في انتظار المراجعة...",
+        "Des38": "جارٍ المعالجة، يرجى الانتظار...",
+        "vaildate": {
+            "email": {
+                "format": "صيغة البريد الإلكتروني غير صحيحة",
+                "empty": "لا يمكن أن يكون البريد الإلكتروني فارغًا",
+                "exist": "البريد الإلكتروني موجود بالفعل"
+            },
+            "country": {
+                "empty": "يرجى اختيار دولتك"
+            }
+        },
+        "newSignup": {
+            "item9": "رمز التحقق من البريد الإلكتروني",
+            "item10": "أدخل رمز التحقق من بريدك الإلكتروني",
+            "item11": "الحصول على الرمز"
+        },
+        "CodeSuccess": "تم إرسال رمز التحقق بنجاح",
+        "agreemnet8": "البريد الإلكتروني موجود بالفعل",
+        "code": "رمز التحقق من البريد الإلكتروني",
+        "getCode": "الحصول على الرمز",
+        "waitCode1": "انتظار ",
+        "waitCode2": " ثانية ",
+        "p1": "رقم مرجع الطلب",
+        "p2": "يرجى إدخال CVV",
+        "p3": "يرجى إدخال PIN",
+        "p4": "يرجى إدخال رمز التحقق من البريد الإلكتروني",
+        "p5": "رقم مرجع الطلب",
+        "t1": "لضمان أمان أموالك وإتمام عملية الدفع بسلاسة، يرجى اتباع الخطوات التالية:",
+        "t2": "تحقق من رقم مرجع الطلب للتأكد من صحة معلومات الدفع.",
+        "t3": "إذا اخترت الدفع بواسطة البطاقة البنكية، سيطلب النظام التحقق من CVV و PIN لضمان أمان المعاملة.",
+        "t4": "يرجى التحقق من بريدك الإلكتروني للحصول على رمز التحقق وإدخاله فورًا للمتابعة.",
+        "t5": "بعد التأكد من صحة جميع المعلومات، يرجى إتمام الدفع في أسرع وقت لتجنب انتهاء المهلة.",
+        "t6": "شكرًا لتعاونكم، ونتمنى لكم تجربة ممتعة!",
+        "PaymentDeadline": "الوقت المتبقي لإتمام الدفع",
+        "PaymentExpired": "انتهت صلاحية الدفع، يرجى إعادة الطلب",
+        "days": "يوم",
+        "hours": "ساعة",
+        "minutes": "دقيقة",
+        "seconds": "ثانية",
+        "Copy": "نسخ",
+        "CopySuccess": "تم النسخ بنجاح",
+        "CopyFailed": "فشل النسخ",
+        "Msg": {
+            "Cancle": "هل أنت متأكد من الإلغاء؟",
+            "SystemPrompt": "تنبيه النظام",
+            "pagesStatus": "تم إلغاء الطلب",
+            "callbackStatus": "انتهت صلاحية هذا الطلب، يرجى تقديم طلب جديد"
+        }
+    },
+    ko: {
+        "Title1": "입금 계좌",
+        "Title2": "입금 방식",
+        "Title3": "입금 금액",
+        "Title10": "출금 계좌",
+        "Title4": "출금 방식",
+        "Title5": "출금 금액",
+        "Title6": "결제 계좌",
+        "Title7": "결제 계좌를 선택하세요",
+        "Title8": "결제",
+        "Title9": "취소",
+        "cardNo": "카드 번호",
+        "bal": "잔액",
+        "bagBal": "지갑 잔액",
+        "format": "최대 소수점 두 자리의 음이 아닌 숫자",
+        "format1": "양의 정수",
+        "amount": "금액은 ",
+        "amount1": "결제 계좌 잔액이 부족합니다",
+        "Confirm": "확인",
+        "Cancel": "취소",
+        "Des1": "제출 완료, 검토 중...",
+        "Des38": "처리 중입니다. 잠시만 기다려주세요...",
+        "vaildate": {
+            "email": {
+                "format": "잘못된 이메일 형식입니다",
+                "empty": "이메일은 비워둘 수 없습니다",
+                "exist": "이미 등록된 이메일입니다"
+            },
+            "country": {
+                "empty": "거주 국가를 선택해주세요"
+            }
+        },
+        "newSignup": {
+            "item9": "이메일 인증 코드",
+            "item10": "이메일로 받은 인증 코드를 입력하세요",
+            "item11": "코드 받기"
+        },
+        "CodeSuccess": "인증 코드가 성공적으로 전송되었습니다",
+        "agreemnet8": "이메일이 이미 존재합니다",
+        "code": "이메일 인증 코드",
+        "getCode": "코드 받기",
+        "waitCode1": "대기 ",
+        "waitCode2": "초 ",
+        "p1": "주문 조회 번호",
+        "p2": "CVV를 입력해주세요",
+        "p3": "PIN을 입력해주세요",
+        "p4": "이메일 인증 코드를 입력해주세요",
+        "p5": "주문 조회 번호",
+        "t1": "자금의 안전을 위해 아래 단계를 순서대로 진행해주세요:",
+        "t2": "결제 정보가 정확한지 주문 조회 번호를 확인하세요.",
+        "t3": "카드 결제를 선택하신 경우 CVV와 PIN 확인이 필요합니다.",
+        "t4": "이메일을 확인하여 인증 코드를 입력해주세요.",
+        "t5": "모든 정보 확인 후 가능한 빨리 결제를 완료해주세요.",
+        "t6": "협조해주셔서 감사합니다. 즐거운 이용 되세요!",
+        "PaymentDeadline": "남은 결제 시간",
+        "PaymentExpired": "결제가 만료되었습니다. 다시 주문해주세요",
+        "days": "일",
+        "hours": "시간",
+        "minutes": "분",
+        "seconds": "초",
+        "Copy": "복사",
+        "CopySuccess": "복사되었습니다",
+        "CopyFailed": "복사 실패",
+        "Msg": {
+            "Cancle": "취소하시겠습니까?",
+            "SystemPrompt": "시스템 알림",
+            "pagesStatus": "주문이 취소되었습니다",
+            "callbackStatus": "이 주문은 만료되었습니다. 새로 주문해 주세요"
+        }
+    },
+    pt: {
+        "Title1": "Conta de Depósito",
+        "Title2": "Método de Depósito",
+        "Title3": "Valor do Depósito",
+        "Title10": "Conta de Saque",
+        "Title4": "Método de Saque",
+        "Title5": "Valor do Saque",
+        "Title6": "Conta de Pagamento",
+        "Title7": "Selecione a conta de pagamento",
+        "Title8": "Pagar",
+        "Title9": "Cancelar",
+        "cardNo": "Número do Cartão",
+        "bal": "Saldo",
+        "bagBal": "Saldo da Carteira",
+        "format": "Número não negativo com até duas casas decimais",
+        "format1": "Número inteiro positivo",
+        "amount": "O valor deve ser ",
+        "amount1": "Saldo insuficiente na conta de pagamento",
+        "Confirm": "Confirmar",
+        "Cancel": "Cancelar",
+        "Des1": "Enviado com sucesso, aguardando revisão...",
+        "Des38": "Processando, por favor aguarde...",
+        "vaildate": {
+            "email": {
+                "format": "Formato de e-mail inválido",
+                "empty": "O e-mail não pode estar vazio",
+                "exist": "O e-mail já existe"
+            },
+            "country": {
+                "empty": "Por favor, selecione o seu país"
+            }
+        },
+        "newSignup": {
+            "item9": "Código de verificação por e-mail",
+            "item10": "Digite o código enviado para o seu e-mail",
+            "item11": "Obter código"
+        },
+        "CodeSuccess": "Código enviado com sucesso",
+        "agreemnet8": "O e-mail já existe",
+        "code": "Código de e-mail",
+        "getCode": "Obter código",
+        "waitCode1": "Aguarde ",
+        "waitCode2": "s ",
+        "p1": "Número de referência do pedido",
+        "p2": "Digite o CVV",
+        "p3": "Digite o PIN",
+        "p4": "Digite o código de verificação do e-mail",
+        "p5": "Número de referência do pedido",
+        "t1": "Para garantir a segurança dos seus fundos e concluir o pagamento, siga os passos abaixo:",
+        "t2": "Confirme o número de referência para garantir que as informações estão corretas.",
+        "t3": "Se optar por pagar com cartão, será necessário verificar o CVV e o PIN.",
+        "t4": "Verifique o seu e-mail e insira o código recebido.",
+        "t5": "Após confirmar todas as informações, conclua o pagamento o quanto antes.",
+        "t6": "Obrigado pela cooperação. Aproveite a sua experiência!",
+        "PaymentDeadline": "Tempo restante para pagar",
+        "PaymentExpired": "Pagamento expirou, faça um novo pedido",
+        "days": "dia(s)",
+        "hours": "hora(s)",
+        "minutes": "minuto(s)",
+        "seconds": "segundo(s)",
+        "Copy": "Copiar",
+        "CopySuccess": "Copiado",
+        "CopyFailed": "Falha ao copiar",
+        "Msg": {
+            "Cancle": "Tem certeza de que deseja cancelar?",
+            "SystemPrompt": "Aviso do sistema",
+            "pagesStatus": "O pedido foi cancelado",
+            "callbackStatus": "Este pedido expirou, faça um novo pedido"
+        }
+    },
+    fa: {
+        "Title1": "حساب واریز",
+        "Title2": "روش واریز",
+        "Title3": "مبلغ واریز",
+        "Title10": "حساب برداشت",
+        "Title4": "روش برداشت",
+        "Title5": "مبلغ برداشت",
+        "Title6": "حساب پرداخت",
+        "Title7": "لطفاً حساب پرداخت را انتخاب کنید",
+        "Title8": "پرداخت",
+        "Title9": "لغو",
+        "cardNo": "شماره کارت",
+        "bal": "موجودی",
+        "bagBal": "موجودی کیف پول",
+        "format": "عدد غیرمنفی با حداکثر دو رقم اعشار",
+        "format1": "عدد صحیح مثبت",
+        "amount": "مبلغ باید ",
+        "amount1": "موجودی حساب پرداخت کافی نیست",
+        "Confirm": "تأیید",
+        "Cancel": "لغو",
+        "Des1": "با موفقیت ارسال شد، در انتظار بررسی...",
+        "Des38": "در حال پردازش، لطفاً صبر کنید...",
+        "vaildate": {
+            "email": {
+                "format": "فرمت ایمیل نادرست است",
+                "empty": "ایمیل نمی‌تواند خالی باشد",
+                "exist": "ایمیل قبلاً ثبت شده است"
+            },
+            "country": {
+                "empty": "لطفاً کشور محل سکونت خود را انتخاب کنید"
+            }
+        },
+        "newSignup": {
+            "item9": "کد تأیید ایمیل",
+            "item10": "کد تأیید ارسال‌شده به ایمیل خود را وارد کنید",
+            "item11": "دریافت کد"
+        },
+        "CodeSuccess": "کد با موفقیت ارسال شد",
+        "agreemnet8": "ایمیل قبلاً موجود است",
+        "code": "کد تأیید ایمیل",
+        "getCode": "دریافت کد",
+        "waitCode1": "انتظار ",
+        "waitCode2": " ثانیه ",
+        "p1": "شماره پیگیری سفارش",
+        "p2": "لطفاً CVV را وارد کنید",
+        "p3": "لطفاً PIN را وارد کنید",
+        "p4": "لطفاً کد تأیید ایمیل را وارد کنید",
+        "p5": "شماره پیگیری سفارش",
+        "t1": "برای اطمینان از امنیت وجوه شما و تکمیل موفقیت‌آمیز پرداخت، لطفاً مراحل زیر را انجام دهید:",
+        "t2": "شماره پیگیری سفارش خود را بررسی کنید تا از صحت اطلاعات پرداخت اطمینان حاصل شود.",
+        "t3": "در صورت انتخاب پرداخت با کارت بانکی، سیستم از شما می‌خواهد CVV و PIN را برای افزایش امنیت وارد کنید.",
+        "t4": "لطفاً ایمیل خود را بررسی کرده و کد تأیید را وارد کنید تا بتوانید ادامه دهید.",
+        "t5": "پس از بررسی اطلاعات، لطفاً هرچه سریع‌تر پرداخت را تکمیل کنید تا از انقضا یا تغییر مبلغ جلوگیری شود.",
+        "t6": "از همکاری شما سپاسگزاریم. روز خوبی داشته باشید!",
+        "PaymentDeadline": "زمان باقی‌مانده برای پرداخت",
+        "PaymentExpired": "مهلت پرداخت به پایان رسیده، لطفاً دوباره سفارش دهید",
+        "days": "روز",
+        "hours": "ساعت",
+        "minutes": "دقیقه",
+        "seconds": "ثانیه",
+        "Copy": "کپی",
+        "CopySuccess": "کپی شد",
+        "CopyFailed": "کپی ناموفق بود",
+        "Msg": {
+            "Cancle": "آیا از لغو اطمینان دارید؟",
+            "SystemPrompt": "پیام سیستم",
+            "pagesStatus": "سفارش لغو شد",
+            "callbackStatus": "این سفارش منقضی شده است، لطفاً دوباره سفارش دهید"
+        }
+    },
+    tr: {
+        "Title1": "Mevduat Hesabı",
+        "Title2": "Mevduat Yöntemi",
+        "Title3": "Mevduat Tutarı",
+        "Title10": "Çekim Hesabı",
+        "Title4": "Çekim Yöntemi",
+        "Title5": "Çekim Tutarı",
+        "Title6": "Ödeme Hesabı",
+        "Title7": "Lütfen ödeme hesabını seçin",
+        "Title8": "Öde",
+        "Title9": "İptal",
+        "cardNo": "Kart Numarası",
+        "bal": "Bakiye",
+        "bagBal": "Cüzdan Bakiyesi",
+        "format": "En fazla iki ondalıklı negatif olmayan sayı",
+        "format1": "Pozitif tam sayı",
+        "amount": "Tutar ",
+        "amount1": "Ödeme hesabı bakiyesi yetersiz",
+        "Confirm": "Onayla",
+        "Cancel": "İptal",
+        "Des1": "Gönderildi, incelemede...",
+        "Des38": "İşleniyor, lütfen bekleyin...",
+        "vaildate": {
+            "email": {
+                "format": "Geçersiz e-posta formatı",
+                "empty": "E-posta boş olamaz",
+                "exist": "E-posta zaten mevcut"
+            },
+            "country": {
+                "empty": "Lütfen ülkenizi seçin"
+            }
+        },
+        "newSignup": {
+            "item9": "E-posta doğrulama kodu",
+            "item10": "E-posta doğrulama kodunu girin",
+            "item11": "Kod al"
+        },
+        "CodeSuccess": "Kod başarıyla gönderildi",
+        "agreemnet8": "E-posta zaten mevcut",
+        "code": "E-posta kodu",
+        "getCode": "Kod al",
+        "waitCode1": "Bekle ",
+        "waitCode2": "sn ",
+        "p1": "Sipariş referans numarası",
+        "p2": "Lütfen CVV girin",
+        "p3": "Lütfen PIN girin",
+        "p4": "Lütfen e-posta doğrulama kodunu girin",
+        "p5": "Sipariş referans numarası",
+        "t1": "Fon güvenliğiniz için ödeme işlemini aşağıdaki adımlarla tamamlayınız:",
+        "t2": "Ödeme bilgilerinin doğruluğu için sipariş referans numarasını kontrol edin.",
+        "t3": "Kartla ödeme seçtiğinizde sistem CVV ve PIN doğrulaması isteyecektir.",
+        "t4": "Lütfen e-postanızı kontrol ederek doğrulama kodunu girin.",
+        "t5": "Bilgileri doğruladıktan sonra zaman aşımını önlemek için ödemeyi hızlıca tamamlayın.",
+        "t6": "İşbirliğiniz için teşekkür ederiz. İyi kullanımlar!",
+        "PaymentDeadline": "Kalan ödeme süresi",
+        "PaymentExpired": "Ödeme süresi doldu, lütfen yeniden sipariş verin",
+        "days": "gün",
+        "hours": "saat",
+        "minutes": "dakika",
+        "seconds": "saniye",
+        "Copy": "Kopyala",
+        "CopySuccess": "Kopyalandı",
+        "CopyFailed": "Kopyalama başarısız",
+        "Msg": {
+            "Cancle": "İptal etmek istediğinize emin misiniz?",
+            "SystemPrompt": "Sistem uyarısı",
+            "pagesStatus": "Sipariş iptal edildi",
+            "callbackStatus": "Bu siparişin süresi doldu, lütfen yeniden sipariş verin"
+        }
+    }
+};
+let config = {
+    Pattern: {
+        Password:
+            /^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?!.*([~!@&%$^\\(\\)#_]).*\\1.*\\1.*\\1)[A-Za-z0-9~!@&%$^\\(\\)#_]{8,16}$/,
+        Email: /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/,
+    },
+
+};
+
+let vm = new Vue({
+    el: "#paycard",
+    data() {
+        return {
+            dialogCheck: false,
+            dialogCheckOK: false,
+            dialogCheckWait: false,
+            Host80: "",
+            Host04: "",
+            loginOptions: [],
+            //多语言
+            langList: {
+                en: "ENGLISH",
+                cn: "中文简体",
+                zhHant: "中文繁體",
+                vn: "Tiếng Việt",
+                de: "Deutsch",
+                es: "Español",
+                id: "Indonesian",
+                ms: "Melayu",
+                th: "ภาษาไทย",
+                ar: "العربية",
+                ko: "한국어",
+                pt: "Português",
+                fa: "زبان پارسی",
+                tr: "Türkçe",
+            },
+            tips: ['t2', 't3', 't4', 't5'],
+            language: "cn",
+            lang: {},
+            RES: '',
+            isShow: false,
+            rules: {},
+            form: { amount: "", deductionAccount: '' },
+            userInfo: {},
+            timer: 59,
+            interval: null,
+            getCodeString: "",
+            countdownInterval: null,
+            timeLeft: 0
+        };
+    },
+    computed: {
+        // 当前选择扣款账户余额
+        currentBalance() {
+            if (!this.form.deductionAccount || !this.loginOptions.length) {
+                return 0;
+            }
+            const target = this.loginOptions.find(
+                (item) => item.type + "/" + item.cardNumber === this.form.deductionAccount
+            );
+            return target ? Number(target.balance) || 0 : 0;
+        },
+        loginOptionsDisplay() {
+            return this.loginOptions.map(item => {
+                let label = "";
+                if (item.type == "1") {
+                    label = `${this.lang["cardNo"]} - ${item.cardNumber} ${this.lang["bal"]}: ${item.balance}`;
+                } else {
+                    label = `${this.lang["bagBal"]}: ${item.balance}`;
+                }
+                return {
+                    ...item,
+                    value: item.type + '/' + item.cardNumber,
+                    lable: label
+                };
+            });
+        },
+        // 余额是否不足
+        isBalanceInsufficient() {
+            const amount = Number(this.form.amount) || 0;
+            return amount > this.currentBalance;
+        },
+        countdownText() {
+            return this.timeLeft > 0
+                ? this.formatCountdown(this.timeLeft)
+                : this.lang.PaymentExpired;
+        },
+        pagesStatus() {
+            return this.form.status == "5";
+        },
+        callbackStatus() {
+            return this.form.callbackStatus == "2";
+        }
+    },
+    methods: {
+        //验证码
+        async getCode1(val) {
+            const { email, country } = this.userInfo;
+            if (val) {
+                let res = await Api.sendCode(this.Host04, {
+                    email, country
+                }, this.form.token, this.language);
+                if (res.ok) {
+                    this.$message({
+                        message: this.lang.CodeSuccess,
+                        type: 'success'
+                    });
+                } else {
+                    if (res.msg == "邮箱已存在" || res.msg == "Mailbox already exists") {
+                        this.$pigeon.MessageError(this.lang.agreemnet8);
+                    } else {
+                        this.$pigeon.MessageError(res.msg);
+                    }
+                }
+            }
+        },
+        // 获取验证码
+        getCode: async function (val) {
+            if (val) {
+                if (!this.userInfo.country) {
+                    this.$message.error(this.lang.vaildate.country.empty);
+                    return;
+                }
+                if (!this.userInfo.email) {
+                    this.$message.error(this.lang.vaildate.email.empty);
+                    return;
+                }
+                if (!config.Pattern.Email.test(this.userInfo.email)) {
+                    this.$message.error(this.lang.vaildate.email.format);
+                    return;
+                }
+            }
+            this.getCodeString =
+                this.lang.waitCode1 +
+                this.timer +
+                this.lang.waitCode2;
+            let that = this;
+            if (!this.interval) {
+                this.getCode1(val);
+                this.interval = setInterval(() => {
+                    that.timer--;
+                    sessionStorage.setItem("timer", that.timer);
+                    that.getCodeString =
+                        this.lang.waitCode1 +
+                        that.timer +
+                        this.lang.waitCode2;
+                    if (that.timer == 0) {
+                        this.getCodeString = this.lang.newSignup.item11;
+                        clearInterval(that.interval);
+                        that.interval = null;
+                        that.timer = 59;
+                        sessionStorage.setItem("timer", that.timer);
+                    }
+                }, 1000);
+            }
+        },
+        // 初始化定时器
+        initTimer: function () {
+            let t = sessionStorage.getItem("timer") || this.timer;
+            if (t == 59) {
+                this.getCodeString = this.lang.newSignup.item11;
+            } else {
+                this.timer = sessionStorage.getItem("timer");
+                this.getCode(0);
+            }
+        },
+        // 获取账户下拉
+        async getAccountDropdown() {
+            const res = await Api.getAccountDropdown(this.Host80, this.form.token, this.language);
+            if (res.ok) {
+                this.loginOptions = res.data.map((item) => ({
+                    type: item.type,
+                    cardNumber: item.cardNumber,
+                    balance: item.balance,
+                    disabled: item.balance == 0,
+                }));
+                this.userInfo = res.data[0]
+            } else {
+                this.loginOptions = []
+            }
+        },
+        changeAccount(e) {
+            let [type, cardNumber] = e.split("/");
+            this.form = { ...this.form, type, cardNumber };
+            // 触发余额校验
+            this.$nextTick(() => {
+                this.$refs.form.validateField('deductionAccount');
+            });
+        },
+        // 用户详情
+        async userSingle() {
+            const res = await Api.userSingle(this.Host80, this.form.token, this.language);
+            if (res.ok) {
+                this.userInfo = res.data
+            }
+        },
+        async payCard() {
+            try {
+                this.$refs.form.validate(async (valid) => {
+                    if (!valid) {
+                        return;
+                    }
+                    // 倒计时到期,禁止继续支付
+                    if (this.timeLeft == 0) {
+                        this.$message.error(this.lang.PaymentExpired || '支付已超时,请重新下单');
+                        return;
+                    }
+                    // 余额校验
+                    if (this.isBalanceInsufficient) {
+                        this.$message.error(this.lang.amount1);
+                        return;
+                    }
+                    const { type, cardNumber, cvv, pin, emailCode, serial } = this.form;
+                    const { email } = this.userInfo;
+                    this.dialogCheckWait = true;
+                    const res = await Api.payCard(this.Host04, { type, cardNumber, cvv, pin, emailCode, serial, email }, this.form.token, this.language);
+                    this.dialogCheckWait = false;
+                    if (res.ok && res.data.code == 200) {
+                        this.dialogCheckOK = true;
+                        this.form.submitStatus = 1
+                        if (this.countdownInterval) {
+                            clearInterval(this.countdownInterval);
+                            this.countdownInterval = null;
+                        }
+                    } else {
+                        this.RES = res.msg || res.data.msg;
+                        this.dialogCheck = true;
+                    }
+                });
+            } catch (err) {
+                console.log("校验失败或异常:", err);
+                return false;
+            }
+        },
+        // 订单详情
+        async getDepositSerial() {
+            try {
+                const res = await Api.getDepositSerial(this.Host04, { serial: this.form.serial }, this.form.token, this.language);
+                if (res.ok) {
+                    this.form = { ...this.form, ...res.data }
+                    // 启动倒计时更新定时器
+                    this.startCountdown();
+                    this.$nextTick(() => {
+                        if (this.form.callbackStatus == "2") {
+                            this.isShow = true
+                        } else if (this.form.submitStatus == 1) {
+                            this.Pay()
+                            this.isShow = false
+                        } else {
+                            this.isShow = true
+                        }
+                    });
+                }
+            } catch (err) {
+                console.log("校验失败或异常:", err);
+                return false;
+            }
+        },
+        // 语言切换函数
+        chooseLang(key) {
+            this.lang = content[key];
+            this.language = key;
+            sessionStorage.setItem("lang", this.language);
+            this.setRules();
+            // 切换语言后刷新 getCodeString,使按钮文案随语言变化
+            if (this.timer == 59 && !this.interval) {
+                this.getCodeString = this.lang.newSignup.item11;
+            } else {
+                this.getCodeString = this.lang.waitCode1 + this.timer + this.lang.waitCode2;
+            }
+            this.$nextTick(() => {
+                this.$refs.form.clearValidate();
+            });
+        },
+        closeDia() {
+            this.dialogCheckOK = false;
+            this.$nextTick(() => {
+                if (this.form.submitStatus == 1) {
+                    this.Pay()
+                }
+            });
+        },
+        closeDia1() { this.dialogCheck = false; this.getDepositSerial() },
+        //成功跳转页面
+        Pay() {
+            window.location.href = this.Host80 + "/payment.html";
+        },
+        //取消订单
+        async Cancle() {
+            try {
+                this.$confirm(this.lang.Msg.Cancle, this.lang.Msg.SystemPrompt, {
+                    confirmButtonText: this.lang.Confirm,
+                    cancelButtonText: this.lang.Cancel,
+                    type: 'warning'
+                }).then(async () => {
+                    const { id } = this.form;
+                    const res = await Api.payCancel(this.Host04, { id }, this.form.token, this.language);
+                    if (res.ok) {
+                        this.getDepositSerial()
+                        if (this.countdownInterval) {
+                            clearInterval(this.countdownInterval);
+                            this.countdownInterval = null;
+                        }
+                    }
+                }).catch(() => {
+                });
+            } catch (err) {
+                console.log("校验失败或异常:", err);
+                return false;
+            }
+        },
+        copySerial() {
+            const serial = this.form.serial;
+            if (!serial) return;
+            if (navigator.clipboard && window.isSecureContext) {
+                // 使用 Clipboard API
+                navigator.clipboard.writeText(serial).then(() => {
+                    this.$message.success(this.lang.CopySuccess || '复制成功');
+                }).catch(err => {
+                    console.error('复制失败:', err);
+                    this.copySerialFallback(serial);
+                });
+            } else {
+                // 降级方案
+                this.copySerialFallback(serial);
+            }
+        },
+
+        copySerialFallback(serial) {
+            const textarea = document.createElement('textarea');
+            textarea.value = serial;
+            textarea.setAttribute('readonly', '');
+            textarea.style.position = 'absolute';
+            textarea.style.left = '-9999px';
+            document.body.appendChild(textarea);
+            textarea.select();
+
+            try {
+                const successful = document.execCommand('copy');
+                if (successful) {
+                    this.$message.success(this.lang.CopySuccess || '复制成功');
+                } else {
+                    this.$message.error(this.lang.CopyFailed || '复制失败');
+                }
+            } catch (err) {
+                console.error('复制失败:', err);
+                this.$message.error(this.lang.CopyFailed || '复制失败');
+            }
+
+            document.body.removeChild(textarea);
+        },
+        initCountdown() {
+            if (!this.form.payTime || !this.form.nowTime) {
+                this.timeLeft = 0;
+                return;
+            }
+
+            // Safari / iOS 兼容
+            const expire = new Date(
+                this.form.payTime.replace(/-/g, '/')
+            ).getTime();
+
+            const serverNow = new Date(
+                this.form.nowTime.replace(/-/g, '/')
+            ).getTime();
+
+            const diff = Math.floor((expire - serverNow) / 1000);
+
+            this.timeLeft = diff > 0 ? diff : 0;
+        },
+
+        /* =============================
+         * 启动倒计时
+         * ============================= */
+        startCountdown() {
+            this.clearCountdown();
+
+            this.initCountdown();
+            if (this.timeLeft <= 0) return;
+
+            this.countdownInterval = setInterval(() => {
+                if (this.timeLeft <= 0) {
+                    this.clearCountdown();
+                    return;
+                }
+                this.timeLeft--;
+            }, 1000);
+        },
+
+        /* =============================
+         * 清理定时器
+         * ============================= */
+        clearCountdown() {
+            if (this.countdownInterval) {
+                clearInterval(this.countdownInterval);
+                this.countdownInterval = null;
+            }
+        },
+
+        /* =============================
+         * 格式化倒计时展示
+         * ============================= */
+        formatCountdown(seconds) {
+            const days = Math.floor(seconds / 86400);
+            const hours = Math.floor((seconds % 86400) / 3600);
+            const minutes = Math.floor((seconds % 3600) / 60);
+            const secs = seconds % 60;
+
+            const daysText = this.lang.days || '天';
+            const hoursText = this.lang.hours || '小时';
+            const minutesText = this.lang.minutes || '分钟';
+            const secondsText = this.lang.seconds || '秒';
+
+            if (days > 0) {
+                return `${days}${daysText} ${hours}${hoursText} ${minutes}${minutesText}`;
+            } else if (hours > 0) {
+                return `${hours}${hoursText} ${minutes}${minutesText} ${secs}${secondsText}`;
+            } else {
+                return `${String(minutes).padStart(2, '0')}:${String(secs).padStart(2, '0')}`;
+            }
+        },
+        setRules() {
+            this.rules = {
+                deductionAccount: [
+                    {
+                        required: true,
+                        message: this.lang['Title7'],
+                        trigger: "change",
+                    },
+                    {
+                        validator: (rule, value, callback) => {
+                            if (!value) {
+                                callback();
+                                return;
+                            }
+                            // 检查余额是否足够
+                            if (this.isBalanceInsufficient) {
+                                callback(new Error(this.lang.amount1));
+                            } else {
+                                callback();
+                            }
+                        },
+                        trigger: "change",
+                    },
+                ],
+                cvv: [
+                    {
+                        required: true,
+                        message: this.lang['p2'],
+                        trigger: "blur",
+                    },
+                ],
+                pin: [
+                    {
+                        required: true,
+                        message: this.lang['p3'],
+                        trigger: "blur",
+                    },
+                ],
+                emailCode: [
+                    {
+                        required: true,
+                        message: this.lang['p4'],
+                        trigger: "blur",
+                    },
+                ],
+            };
+        }
+
+    },
+    mounted() {
+        let ht = window.location.protocol;
+        let ho = window.location.host.split('.')[1];
+        // this.Host04 = 'http://192.168.0.18:8004'
+        // this.Host80 = 'http://192.168.0.18:8000'
+        // this.Host04 = 'https:' + "//pay." + '44a5c8109e4' + ".com"
+        // this.Host80 = 'https:' + "//secure." + '44a5c8109e4' + ".com"
+        this.Host04 = ht + "//pay." + ho + ".com"
+        this.Host80 = ht + "//secure." + ho + ".com"
+        try {
+            const searchParams = new URLSearchParams(window.location.search);
+            const params = searchParams.get('params');
+            this.isShow = false
+            if (params) {
+                const str = parseParams(safeDecrypt(params));
+                this.form = {
+                    ...this.form,
+                    ...str,
+                }
+                this.language = this.form.lang;
+                sessionStorage.setItem("lang", this.language);
+                this.lang = content[this.form.lang];
+                if (!this.lang) {
+                    setLang(this)
+                }
+                this.setRules()
+                this.getAccountDropdown()
+                // this.userSingle()
+                this.initTimer();
+                this.getDepositSerial()
+            }
+        } catch (error) {
+            console.error('解析URL参数时出错:', error);
+        }
+    },
+    beforeDestroy() {
+        this.clearCountdown();
+    },
+});

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
vu/css/element-ui.css


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
vu/css/element@2.12.2.css


BIN
vu/css/fonts/bootstrap-icons.woff


BIN
vu/css/fonts/bootstrap-icons.woff2


BIN
vu/css/fonts/element-icons.woff


+ 153 - 0
vu/css/index.css

@@ -0,0 +1,153 @@
+html,body{
+    width: 100%;
+    height: 100%;
+    box-sizing: border-box;
+    margin: 0;
+    padding: 0;
+}
+.container{
+    width: 100%;
+    height: 100%;
+    overflow: hidden;
+    overflow-y: auto;
+    box-sizing: border-box;
+}
+.Va-document{
+    width: 100%;
+    height: auto;
+    box-sizing: border-box;
+    font-size: 12px;
+}
+.Va-document .title-head{
+    width: 100%;
+    background-color: #EB3F57;
+    text-align: center;
+    line-height: 2.5;
+    color: #ffffff;
+}
+.Va-document .content-info{
+    width: 100%;
+    padding: 15px;
+    box-sizing: border-box;
+}
+.Va-document .content-info .only-head{
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+}
+.Va-document .content-info .only-head .divider{
+    flex: 1;
+    height: 1px;
+    background-color: #C5C5C9;
+    margin: 0 5px;
+}
+.Va-document .content-info .my-form-item-label .des{
+    color: #949494;
+}
+.Va-document .content-info .avatar-uploader {
+    border: 1px dashed #C4C4C4;
+    margin: 10px;
+    width: 150px;
+    height: 80px;
+    line-height: 80px;
+    display: inline-block;
+    overflow: hidden;
+}
+.Va-document .content-info .avatar-uploader .el-upload {
+    width: 100%;
+    text-align: center;
+}
+div.menu-logo {
+    margin: 0 6px;
+    cursor: pointer;
+    user-select: none;
+}
+.menu-logo.chooseLang{
+    border: 1px solid #C5C5C9;
+    width: 130px;
+    margin-bottom: 10px;
+    text-align: center;
+}
+
+.s-btn{
+    background-color: #EB3F57;
+    border-color: #EB3F57;
+}
+.el-button--primary:active,.el-button:focus,.el-button--primary:hover{
+    background-color: #EB3F57;
+    border-color: #EB3F57;
+    opacity: 0.8;
+}
+.el-input__inner:focus{
+    border-color: #EB3F57;
+}
+
+.el-upload{
+    width: 100%;
+    height: 100%;
+}
+
+.avatar-uploaderOther.fileOther {
+    display: inline-block;
+    margin-bottom: 20px;
+}
+.avatar-uploaderOther.fileOthe .el-upload{
+    display: inline-block;
+}
+.avatar-uploaderOther.fileOthe .el-button--primary{
+
+}
+
+#files{
+    width: 150px;
+    height: 80px;
+    margin-bottom: 20px;
+    display: flex;
+}
+#files .options{
+    flex: 1;
+    padding: 8px;
+    box-sizing: border-box;
+    display: flex;
+    justify-content: center;
+    align-content: center;
+    align-items: center;
+}
+#files .options .el-button{
+    min-width: 100px;
+    max-height: 30px;
+    padding: 0;
+    line-height: 30px;
+    background-color: #EB3F57;
+}
+.avatar-uploaderOther.fileOther .el-button--primary{
+    background-color: #EB3F57!important;
+    border-color: #EB3F57!important;
+}
+#files .options .el-button span,a{
+    display: inline-block;
+    height: 100%;
+    width: 100%;
+}
+
+.avatar-uploaderOther.fileOthers {
+    display: block;
+    width: 150px;
+    height: 80px;
+    border: 1px dashed #C5C5C9;
+}
+.avatar-uploaderOther.fileOthers .el-upload{
+    display: inline-block;
+    width: 100%;
+    height: 100%;
+}
+
+.global-fit {
+    color: #4CB01A;
+}
+.pwd-resetTrading li{
+    list-style-type: disc;
+    /*height: 20px;*/
+    line-height: 20px;
+    color: #979797;
+}

+ 266 - 0
vu/css/pay.css

@@ -0,0 +1,266 @@
+html {
+    background: #ffffff;
+}
+
+body {
+    background: none !important;
+    color: #fff !important;
+    padding-bottom: 23px;
+}
+
+body * {
+    font-family: 'Open Sans', sans-serif;
+}
+
+.header {
+    margin-top: 60px;
+    margin-bottom: 36px;
+}
+
+.panel {
+    color: #4f4f4f;
+    margin-bottom: 53px;
+    border-radius: 11px;
+    box-shadow: 0px 6px 20px 0px rgba(0, 0, 0, 0.53);
+}
+
+.panel-body {
+    padding: 25px;
+    font-size: 18px;
+    line-height: 146%;
+}
+
+.panel-body>.row>div {
+    margin-bottom: 15px;
+}
+
+.navbar-brand>img {
+    display: block;
+    margin-right: 21px;
+    margin-top: -20px;
+}
+
+.navbar-header>h1 {
+    margin: 0;
+}
+
+.navbar-brand {
+    color: #fff !important;
+    height: auto;
+    font-size: 30px;
+}
+
+.navbar-form .input-group {
+    width: 139px;
+    font-size: 18px;
+}
+
+label {
+    font-weight: 300;
+}
+
+.navbar-form label {
+    font-weight: 300;
+    margin-right: 19px;
+    font-size: 18px;
+    margin-bottom: 0;
+    margin-top: 5px;
+}
+
+.navbar-form {
+    box-shadow: 0 0 0;
+}
+
+.container {
+    width: 100%;
+    max-width: 1230px;
+}
+
+.navbar-form .input-group .form-control,
+.navbar-form .input-group button {
+    text-align: center;
+    font-size: 16px;
+    height: 37px;
+}
+
+.coin-img {
+    max-width: 162px;
+    width: 100%
+}
+
+.code-img {
+    max-width: 257px;
+    width: 100%
+}
+
+.alert-danger {
+    border: 1px solid #fce7e5;
+    background: #fdede4;
+    color: #ec5f45;
+    font-weight: 600;
+}
+
+p {
+    margin: 0px 0 17px;
+}
+
+.btn {
+    font-size: 16px;
+    margin: 5px;
+}
+
+.container-fluid>.navbar-collapse,
+.container-fluid>.navbar-header,
+.container>.navbar-collapse,
+.container>.navbar-header {
+    margin-left: 0px;
+    margin-right: 0px;
+}
+
+ol{
+    padding-left: 20px;
+}
+
+.popover.top {
+    color:#000;
+}
+
+.menu-logo.chooseLang{
+    border: 1px solid #C5C5C9;
+    width: 130px;
+    margin-top: 6px;
+    text-align: center;
+    background: #ffffff;
+    padding: 5px 0;
+}
+
+.form-control{
+    display: inline !important;
+}
+
+.pay-address {
+    margin: 12px 0 0 0;
+    padding-top: 0;
+    padding-bottom: 0;
+    height: 28px;
+    min-width: 306px;
+    cursor: pointer !important;
+    text-align: center;
+    background-color: #F7F7F9;
+    line-height: 24px;
+    overflow: hidden;
+}
+
+@media (max-width: 992px) {
+    body {
+        padding-bottom: 10px;
+        font-size: 13px;
+    }
+    .alert {
+        font-size: 14px;
+        margin-left: -10px;
+        margin-right: -10px;
+        text-align: center;
+    }
+    .coin-img {
+        max-width: 169px;
+        margin: 26px auto;
+    }
+    .code-img {
+        max-width: 234px;
+        width: 100%;
+    }
+    .panel-body {
+        padding: 15px;
+        line-height: 146%;
+    }
+    .navbar-header span {
+        text-align: center;
+        display: block;
+        float: none;
+    }
+    .navbar-header img {
+        margin: 0 auto;
+    }
+    .header .navbar-right {
+        display: block;
+        float: none;
+        background: #fff;
+        text-align: center;
+        margin-bottom: 0;
+        border: 0;
+    }
+    .container,
+    .container-fluid {
+        padding: 0
+    }
+    .panel {
+        margin-bottom: 30px;
+    }
+    .footer-text {
+        padding-left: 20px;
+        padding-right: 20px;
+    }
+    .navbar-header {
+        float: none;
+        margin-bottom: 21px;
+    }
+    .header {
+        margin-bottom: 0;
+        border: 0;
+    }
+    .panel {
+        border-radius: 0;
+    }
+    .form-inline {
+        text-align: center;
+    }
+    .lang-mobile {
+        margin-bottom: 47px;
+        font-size: 15px;
+    }
+    .header {
+        margin-top: 15px;
+    }
+
+    .pay-address {
+        margin: 5px 0 0 0;
+        padding-top: 0;
+        padding-bottom: 0;
+        height: 28px;
+        min-width: 100%;
+        cursor: pointer !important;
+        text-align: center;
+        background-color: #F7F7F9;
+        line-height: 24px;
+        overflow: hidden;
+    }
+}
+
+@media (max-width: 767px) {
+    body {
+        text-align: center;
+    }
+    ol{
+        padding-left: 0;
+    }
+    ol>li {
+        list-style-position: inside;
+    }
+    .logo.navbar-brand {
+        padding-bottom: 2px;
+    }
+    .navbar-brand img {
+        width: 111px;
+    }
+    .panel {
+        box-shadow: 0 0 0;
+        margin-bottom: 20px;
+    }
+
+    .return-block {
+        float: none !important;
+    }
+
+    
+}

+ 76 - 0
vu/css/preloading.css

@@ -0,0 +1,76 @@
+.line-scale-party>div,
+.line-scale-pulse-out-rapid>div,
+.line-scale-pulse-out>div,
+.line-scale>div {
+    width: 4px;
+    height: 35px;
+    display: inline-block
+}
+
+.line-scale-party>div,
+.line-scale-pulse-out-rapid>div,
+.line-scale-pulse-out>div,
+.line-scale>div,
+.line-spin-fade-loader>div {
+    border-radius: 2px;
+    margin: 2px;
+    background-color: #fff
+}
+
+@-webkit-keyframes line-scale {
+
+    0%,
+    100% {
+        -webkit-transform: scaley(1);
+        transform: scaley(1)
+    }
+
+    50% {
+        -webkit-transform: scaley(.4);
+        transform: scaley(.4)
+    }
+}
+
+@keyframes line-scale {
+
+    0%,
+    100% {
+        -webkit-transform: scaley(1);
+        transform: scaley(1)
+    }
+
+    50% {
+        -webkit-transform: scaley(.4);
+        transform: scaley(.4)
+    }
+}
+
+.line-scale>div:nth-child(1) {
+    -webkit-animation: line-scale 1s -.4s infinite cubic-bezier(.2, .68, .18, 1.08);
+    animation: line-scale 1s -.4s infinite cubic-bezier(.2, .68, .18, 1.08)
+}
+
+.line-scale>div:nth-child(2) {
+    -webkit-animation: line-scale 1s -.3s infinite cubic-bezier(.2, .68, .18, 1.08);
+    animation: line-scale 1s -.3s infinite cubic-bezier(.2, .68, .18, 1.08)
+}
+
+.line-scale>div:nth-child(3) {
+    -webkit-animation: line-scale 1s -.2s infinite cubic-bezier(.2, .68, .18, 1.08);
+    animation: line-scale 1s -.2s infinite cubic-bezier(.2, .68, .18, 1.08)
+}
+
+.line-scale>div:nth-child(4) {
+    -webkit-animation: line-scale 1s -.1s infinite cubic-bezier(.2, .68, .18, 1.08);
+    animation: line-scale 1s -.1s infinite cubic-bezier(.2, .68, .18, 1.08)
+}
+
+.line-scale>div:nth-child(5) {
+    -webkit-animation: line-scale 1s 0s infinite cubic-bezier(.2, .68, .18, 1.08);
+    animation: line-scale 1s 0s infinite cubic-bezier(.2, .68, .18, 1.08)
+}
+
+.line-scale>div {
+    -webkit-animation-fill-mode: both;
+    animation-fill-mode: both
+}

BIN
vu/fonts/element-icons.535877f5.woff


BIN
vu/fonts/element-icons.732389de.ttf


BIN
vu/fonts/iconfont.0e3d6ffc.woff2


BIN
vu/fonts/iconfont.1a06b49f.woff


BIN
vu/fonts/iconfont.4cf0eb3a.ttf


BIN
vu/img/logo.jpg


BIN
vu/public/favicon.ico


BIN
vu/public/fonts/element-icons.535877f5.woff


BIN
vu/public/fonts/element-icons.732389de.ttf


BIN
vu/public/fonts/iconfont.4d9552d3.woff


BIN
vu/public/fonts/iconfont.be6a010f.ttf


BIN
vu/public/fonts/iconfont.d6bf243e.eot


BIN
vu/public/img/loding.jpg


+ 26 - 0
vu/public/js/preloading.js

@@ -0,0 +1,26 @@
+window.onload = function () {
+  if(this.sessionStorage.getItem("preloading")) return
+  let pre = document.getElementById('pre')
+  if (!pre) {
+    let pre = document.createElement("div")
+    pre.setAttribute('id', 'pre')
+    pre.setAttribute('style', 'position: fixed; top: 0; left: 0; right: 0; bottom: 0; z-index: 100000; ')
+    let cover = document.createElement('div')
+    cover.setAttribute('style', 'background-color: rgba(0, 0, 0, .8); width: 100%; height: 100%;')
+    let loading = document.createElement('div')
+    loading.setAttribute('style', 'position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%);')
+    let img = document.createElement('img')
+    img.setAttribute('src', '/img/loding.jpg')
+    loading.appendChild(img)
+    cover.appendChild(loading)
+    pre.appendChild(cover)
+    document.body.appendChild(pre)
+  }
+  let app = document.createElement("script")
+  app.setAttribute("src", "/js/app.8bf2d5f0.js") // 与生成app同步
+  document.body.appendChild(app)
+  let chunk = document.createElement("script")
+  chunk.setAttribute("src", "/js/chunk-vendors.89f16f72.js") // 同步
+  document.body.appendChild(chunk)
+
+}

Некоторые файлы не были показаны из-за большого количества измененных файлов