Compare commits

...

6 Commits

Author SHA1 Message Date
eda41d7e00 1充值到账修改 2025-08-04 09:09:17 +08:00
6595f445b4 1 2025-07-18 18:08:30 +08:00
ee955f5799 1、提示颜色 2025-07-08 14:04:05 +08:00
4d02138893 1、在线支付 2025-07-07 19:03:16 +08:00
d49337ba4f 1 2025-07-02 18:32:06 +08:00
c11cced1aa 1、剩余字符 2025-06-30 17:49:55 +08:00
17 changed files with 3317 additions and 2909 deletions

View File

@ -11,7 +11,7 @@
/>
<meta
name="description"
content="翻译之家提供即时免费的中文、英语、日语、韩语、法语、德语、俄语、西班牙语、葡萄牙语、越南语、印尼语、意大利语、荷兰语、泰语全文翻译等服务。"
content="聚合翻译提供即时免费的中文、英语、日语、韩语、法语、德语、俄语、西班牙语、葡萄牙语、越南语、印尼语、意大利语、荷兰语、泰语全文翻译等服务。"
/>
<meta name="baidu-site-verification" content="codeva-mXz3BqI9VN" />
<link rel="stylesheet" href="static/css/public.css" />
@ -23,7 +23,7 @@
<script src="static/js/lodash.min.js"></script>
<script src="static/js/layui.all.js"></script>
<script src="static/js/common.js"></script>
<title>翻译之家</title>
<title>聚合翻译</title>
<script>
var _hmt = _hmt || [];
(function () {
@ -56,7 +56,7 @@
</div>
</div>
<div v-if="userInfo!=undefined&&userInfo.userId>0" class="right">
<a href="userInfo.html" class="console">控制台</a>
<a href="userinfo.html" class="console">控制台</a>
<div class="user-info">
<div class="phone">{{userInfo.name}}</div>
<i></i>
@ -177,13 +177,13 @@
</li>
</ul>
</div>
<!--<div class="p1 content">--><!-- <h3>翻译之家API</h3>--><!-- <p>翻译之家为你提供主流翻译引擎机器翻译技术</p>--><!-- <div class="line"></div>--><!-- <div class="w1">为什么选择翻译之家</div>--><!-- <div class="w2">我们是主流翻译引擎综合代理服务商,汇集众多企业客户,从而可以享受较低的渠道价格。</div>--><!--</div>-->
<!--<div class="p1 content">--><!-- <h3>聚合翻译API</h3>--><!-- <p>聚合翻译为你提供主流翻译引擎机器翻译技术</p>--><!-- <div class="line"></div>--><!-- <div class="w1">为什么选择聚合翻译?</div>--><!-- <div class="w2">我们是主流翻译引擎综合代理服务商,汇集众多企业客户,从而可以享受较低的渠道价格。</div>--><!--</div>-->
<div class="p2 content">
<div class="w1">介绍</div>
<!--<h3 data="介绍">翻译之家API</h3>-->
<p>翻译之家为你提供主流翻译引擎机器翻译技术</p>
<!--<h3 data="介绍">聚合翻译API</h3>-->
<p>聚合翻译为你提供主流翻译引擎机器翻译技术</p>
<div class="line"></div>
<div class="w1">为什么选择翻译之家</div>
<div class="w1">为什么选择聚合翻译?</div>
<div class="w2">
我们是主流翻译引擎综合代理服务商,汇集众多企业客户,从而可以享受较低的渠道价格。
</div>

View File

@ -11,7 +11,7 @@
/>
<meta
name="description"
content="翻译之家提供即时免费的中文、英语、日语、韩语、法语、德语、俄语、西班牙语、葡萄牙语、越南语、印尼语、意大利语、荷兰语、泰语全文翻译等服务。"
content="聚合翻译提供即时免费的中文、英语、日语、韩语、法语、德语、俄语、西班牙语、葡萄牙语、越南语、印尼语、意大利语、荷兰语、泰语全文翻译等服务。"
/>
<meta name="baidu-site-verification" content="codeva-mXz3BqI9VN" />
<link rel="stylesheet" href="static/css/public.css" />
@ -23,7 +23,7 @@
<script src="static/js/lodash.min.js"></script>
<script src="static/js/layui.all.js"></script>
<script src="static/js/common.js"></script>
<title>翻译之家</title>
<title>聚合翻译</title>
<script>
var _hmt = _hmt || [];
(function () {
@ -56,7 +56,7 @@
</div>
</div>
<div v-if="userInfo!=undefined&&userInfo.userId>0" class="right">
<a href="userInfo.html" class="console">控制台</a>
<a href="userinfo.html" class="console">控制台</a>
<div class="user-info">
<div class="phone">{{userInfo.name}}</div>
<i></i>
@ -131,7 +131,7 @@
<div class="title">服务</div>
<ul>
<li>
<div class="q">翻译之家是如何服务客户的?</div>
<div class="q">聚合翻译是如何服务客户的?</div>
<div class="a">
我们是一个聚合翻译服务商,聚合主流的翻译公司接口,提供更便宜、多样化的翻译服务。
</div>
@ -200,17 +200,17 @@
font-size: 12px;
"
>
<p style="color: #fff; font-size: 12px"><span>关于我们:</span></p>
<p style="color: #fff; font-size: 12px">
<p style="color: #fff; font-size: 12px"><span>官方频道:@apiapl_news</span></p>
<p style="color: #fff; font-size: 12px"><span>咨询客服:@apiapl</span></p>
<span></span>
</p>
</div>
<div class="right" style="white-space: nowrap">
<p></p>
<p><span>联系我们:</span></p>
<p><span>地址:</span></p>
<p><span></span></p>
<p class=""><span>电话: </span></p>
<p><span>技术服务:@apiapl_sdk</span></p>
<p><span>联系邮箱info@apiapl.com</span></p>
<p class=""><span>联系电话:+18435173355 </span></p>
</div>
</div>
<div class="copyright">

View File

@ -11,7 +11,7 @@
/>
<meta
name="description"
content="翻译之家提供即时免费的中文、英语、日语、韩语、法语、德语、俄语、西班牙语、葡萄牙语、越南语、印尼语、意大利语、荷兰语、泰语全文翻译等服务。"
content="聚合翻译提供即时免费的中文、英语、日语、韩语、法语、德语、俄语、西班牙语、葡萄牙语、越南语、印尼语、意大利语、荷兰语、泰语全文翻译等服务。"
/>
<meta name="baidu-site-verification" content="codeva-mXz3BqI9VN" />
<link rel="stylesheet" href="static/css/public.css" />
@ -23,7 +23,7 @@
<script src="static/js/lodash.min.js"></script>
<script src="static/js/layui.all.js"></script>
<script src="static/js/common.js"></script>
<title>翻译之家</title>
<title>聚合翻译</title>
<script>
var _hmt = _hmt || [];
(function () {
@ -56,7 +56,7 @@
</div>
</div>
<div v-if="userInfo!=undefined&&userInfo.userId>0" class="right">
<a href="userInfo.html" class="console">控制台</a>
<a href="userinfo.html" class="console">控制台</a>
<div class="user-info">
<div class="phone">{{userInfo.name}}</div>
<i></i>
@ -214,7 +214,7 @@
<li class="row-info">
<div class="item">谷歌翻译-V2/V3</div>
<div class="item">按调用字符计费</div>
<div class="item">60微信咨询,领取折扣)</div>
<div class="item">60电报咨询,领取折扣)</div>
<div class="item">51000支持扩展</div>
<div class="item">
5.5折20美元<img src="static/picture/p7.png" alt="" />
@ -223,7 +223,7 @@
<li class="row-info">
<div class="item">百度翻译-企业版本</div>
<div class="item">按调用字符计费</div>
<div class="item">25微信咨询,领取折扣)</div>
<div class="item">25电报咨询,领取折扣)</div>
<div class="item">51000支持扩展</div>
<div class="item">
5折50元<img src="static/picture/p7.png" alt="" />
@ -232,16 +232,16 @@
<li class="row-info">
<div class="item">有道翻译</div>
<div class="item">按调用字符计费</div>
<div class="item">25微信咨询,领取折扣)</div>
<div class="item">25电报咨询,领取折扣)</div>
<div class="item">51000支持扩展</div>
<div class="item">
5折50元<img src="static/picture/p7.png" alt="" />
5折<img src="static/picture/p7.png" alt="" />
</div>
</li>
<li class="row-info">
<div class="item">微软翻译</div>
<div class="item">按调用字符计费</div>
<div class="item">60微信咨询,领取折扣)</div>
<div class="item">60电报咨询,领取折扣)</div>
<div class="item">51000支持扩展</div>
<div class="item">
8.2折10美元<img src="static/picture/p7.png" alt="" />
@ -250,16 +250,16 @@
<li class="row-info">
<div class="item">火山翻译</div>
<div class="item">按调用字符计费</div>
<div class="item">25微信咨询,领取折扣)</div>
<div class="item">25电报咨询,领取折扣)</div>
<div class="item">51000支持扩展</div>
<div class="item">
5折50元<img src="static/picture/p7.png" alt="" />
5折<img src="static/picture/p7.png" alt="" />
</div>
</li>
<li class="row-info">
<div class="item">chatgpt翻译</div>
<div class="item">按调用字符计费</div>
<div class="item">50微信咨询,领取折扣)</div>
<div class="item">50电报咨询,领取折扣)</div>
<div class="item">51000支持扩展</div>
<div class="item">
5折100元<img src="static/picture/p7.png" alt="" />
@ -268,7 +268,7 @@
<li class="row-info">
<div class="item">yandex翻译</div>
<div class="item">按调用字符计费</div>
<div class="item">25微信咨询,领取折扣)</div>
<div class="item">25电报咨询,领取折扣)</div>
<div class="item">51000支持扩展</div>
<div class="item">
8.3折30元<img src="static/picture/p7.png" alt="" />
@ -481,11 +481,11 @@
<div class="ctr">
<div class="item">
<img src="static/picture/p25.png" alt="" />
<div>微信咨询</div>
<div>电报咨询</div>
<div class="detail wechat">
<h5>微信咨询</h5>
<h5>电报咨询</h5>
<img src="static/picture/p23.jpg" alt="" />
<p>手机扫码加我微信</p>
<p>手机扫码加我电报</p>
</div>
</div>
<div class="line"></div>
@ -494,13 +494,13 @@
<div>电话咨询</div>
<div class="detail">
<h5>电话咨询</h5>
<div class="phone">13327906119</div>
<div class="phone">+18435173355</div>
</div>
</div>
</div>
</div>
</div>
<!-- <div class="service-modal"><div class="content"><div class="close"></div><div class="contact">联系我们</div><img class="qrcode-img" src="https://codeai.oss-cn-hangzhou.aliyuncs.com/img/p23.jpg" alt=""><p>请添加专属营销顾问</p></div></div> -->
<!-- <div class="service-modal"><div class="content"><div class="close"></div><div class="contact">联系我们</div><img class="qrcode-img" src="/static/picture/p23.jpg" alt=""><p>请添加专属营销顾问</p></div></div> -->
<script type="text/javascript">
var vm = new Vue({
el: "#app",
@ -688,17 +688,17 @@
font-size: 12px;
"
>
<p style="color: #fff; font-size: 12px"><span>关于我们:</span></p>
<p style="color: #fff; font-size: 12px">
<p style="color: #fff; font-size: 12px"><span>官方频道:@apiapl_news</span></p>
<p style="color: #fff; font-size: 12px"><span>咨询客服:@apiapl</span></p>
<span></span>
</p>
</div>
<div class="right" style="white-space: nowrap">
<p></p>
<p><span>联系我们:</span></p>
<p><span>地址:</span></p>
<p><span>邮箱:</span></p>
<p class=""><span>电话: </span></p>
<p><span>技术服务:@apiapl_sdk</span></p>
<p><span>联系邮箱:info@apiapl.com</span></p>
<p class=""><span>联系电话:+18435173355 </span></p>
</div>
</div>
<div class="copyright">

View File

@ -11,7 +11,7 @@
/>
<meta
name="description"
content="翻译之家提供即时免费的中文、英语、日语、韩语、法语、德语、俄语、西班牙语、葡萄牙语、越南语、印尼语、意大利语、荷兰语、泰语全文翻译等服务。"
content="聚合翻译提供即时免费的中文、英语、日语、韩语、法语、德语、俄语、西班牙语、葡萄牙语、越南语、印尼语、意大利语、荷兰语、泰语全文翻译等服务。"
/>
<meta name="baidu-site-verification" content="codeva-mXz3BqI9VN" />
<link rel="stylesheet" href="static/css/public.css" />
@ -23,7 +23,7 @@
<script src="static/js/lodash.min.js"></script>
<script src="static/js/layui.all.js"></script>
<script src="static/js/common.js"></script>
<title>翻译之家</title>
<title>聚合翻译</title>
<script>
var _hmt = _hmt || [];
(function () {
@ -56,7 +56,7 @@
</div>
</div>
<div v-if="userInfo&&userInfo.id" class="right">
<a href="userInfo.html" class="console">控制台</a>
<a href="userinfo.html" class="console">控制台</a>
<div class="user-info">
<div class="phone">13809073722</div>
<i></i>
@ -347,17 +347,17 @@
font-size: 12px;
"
>
<p style="color: #fff; font-size: 12px"><span>关于我们:</span></p>
<p style="color: #fff; font-size: 12px">
<p style="color: #fff; font-size: 12px"><span>官方频道:@apiapl_news</span></p>
<p style="color: #fff; font-size: 12px"><span>咨询客服:@apiapl</span></p>
<span></span>
</p>
</div>
<div class="right" style="white-space: nowrap">
<p></p>
<p><span>联系我们:</span></p>
<p><span>地址:</span></p>
<p><span>邮箱:</span></p>
<p class=""><span>电话: </span></p>
<p><span>技术服务:@apiapl_sdk</span></p>
<p><span>联系邮箱:info@apiapl.com</span></p>
<p class=""><span>联系电话:+18435173355 </span></p>
</div>
</div>
<div class="copyright">

View File

@ -11,7 +11,7 @@
/>
<meta
name="description"
content="翻译之家提供即时免费的中文、英语、日语、韩语、法语、德语、俄语、西班牙语、葡萄牙语、越南语、印尼语、意大利语、荷兰语、泰语全文翻译等服务。"
content="聚合翻译提供即时免费的中文、英语、日语、韩语、法语、德语、俄语、西班牙语、葡萄牙语、越南语、印尼语、意大利语、荷兰语、泰语全文翻译等服务。"
/>
<meta name="baidu-site-verification" content="codeva-mXz3BqI9VN" />
<link rel="stylesheet" href="static/css/public.css" />
@ -23,7 +23,7 @@
<script src="static/js/lodash.min.js"></script>
<script src="static/js/layui.all.js"></script>
<script src="static/js/common.js"></script>
<title>翻译之家</title>
<title>聚合翻译</title>
<script>
var _hmt = _hmt || [];
(function () {
@ -56,7 +56,7 @@
</div>
</div>
<div v-if="userInfo!=undefined&&userInfo.userId>0" class="right">
<a href="userInfo.html" class="console">控制台</a>
<a href="userinfo.html" class="console">控制台</a>
<div class="user-info">
<div class="phone">{{userInfo.name}}</div>
<i></i>
@ -428,17 +428,17 @@
font-size: 12px;
"
>
<p style="color: #fff; font-size: 12px"><span>关于我们:</span></p>
<p style="color: #fff; font-size: 12px">
<p style="color: #fff; font-size: 12px"><span>官方频道:@apiapl_news</span></p>
<p style="color: #fff; font-size: 12px"><span>咨询客服:@apiapl</span></p>
<span></span>
</p>
</div>
<div class="right" style="white-space: nowrap">
<p></p>
<p><span>联系我们:</span></p>
<p><span>地址:</span></p>
<p><span></span></p>
<p class=""><span>电话: </span></p>
<p><span>技术服务:@apiapl_sdk</span></p>
<p><span>联系邮箱info@apiapl.com</span></p>
<p class=""><span>联系电话:+18435173355 </span></p>
</div>
</div>
<div class="copyright">

View File

@ -1701,6 +1701,39 @@
z-index: 10000;
}
.service-modal .content-normal{
background-color: white;
border-radius: 10px;
height: 442px;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 444px;
background-size: 100% 100%;
box-sizing: border-box;
padding: 45px 15px 15px;
overflow-y: auto;
}
.service-modal .content-normal .content-item {
padding: 10px;
border-radius: 3px;
/* border: solid .5px #6c75e1; */
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
cursor: pointer;
}
.service-modal .content-normal .content-item:hover{
transform: translateY(-5px); /* 向上浮动一点 */
box-shadow: 0 4px 12px rgb(65 63 63 / 10%);
transition: transform 0.2s ease-in-out, box-shadow 0.2s ease-in-out;
}
.service-modal .content-normal .content-item:not(:first-child){
margin-top: 10px;
}
.service-modal .content {
position: absolute;
top: 50%;
@ -1732,7 +1765,7 @@
line-height: 25px;
}
.service-modal .content .close {
.service-modal .content .close,.service-modal .content-normal .close {
position: absolute;
top: 16px;
right: 16px;
@ -3003,7 +3036,7 @@
white-space: nowrap;
}
.modal-overlay {
.modal-overlay,.modal-overlay-record {
position: fixed;
top: 0;
left: 0;

BIN
static/image/clock.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

BIN
static/image/usdtlogo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

2
static/js/buefy.min.js vendored Normal file

File diff suppressed because one or more lines are too long

10
static/js/countdown.js Normal file
View File

@ -0,0 +1,10 @@
/*!
* vue-countdown v1.1.5
* https://fengyuanchen.github.io/vue-countdown
*
* Copyright 2018-present Chen Fengyuan
* Released under the MIT license
*
* Date: 2020-02-25T01:19:32.769Z
*/
!function(t,i){"object"==typeof exports&&"undefined"!=typeof module?module.exports=i():"function"==typeof define&&define.amd?define(i):(t=t||self).VueCountdown=i()}(this,function(){"use strict";var t=1e3,i=6e4,s=36e5,e="visibilitychange";return{name:"countdown",data:function(){return{counting:!1,endTime:0,totalMilliseconds:0}},props:{autoStart:{type:Boolean,default:!0},emitEvents:{type:Boolean,default:!0},interval:{type:Number,default:1e3,validator:function(t){return 0<=t}},now:{type:Function,default:function(){return Date.now()}},tag:{type:String,default:"span"},time:{type:Number,default:0,validator:function(t){return 0<=t}},transform:{type:Function,default:function(t){return t}}},computed:{days:function(){return Math.floor(this.totalMilliseconds/864e5)},hours:function(){return Math.floor(this.totalMilliseconds%864e5/s)},minutes:function(){return Math.floor(this.totalMilliseconds%s/i)},seconds:function(){return Math.floor(this.totalMilliseconds%i/t)},milliseconds:function(){return Math.floor(this.totalMilliseconds%t)},totalDays:function(){return this.days},totalHours:function(){return Math.floor(this.totalMilliseconds/s)},totalMinutes:function(){return Math.floor(this.totalMilliseconds/i)},totalSeconds:function(){return Math.floor(this.totalMilliseconds/t)}},render:function(t){return t(this.tag,this.$scopedSlots.default?[this.$scopedSlots.default(this.transform({days:this.days,hours:this.hours,minutes:this.minutes,seconds:this.seconds,milliseconds:this.milliseconds,totalDays:this.totalDays,totalHours:this.totalHours,totalMinutes:this.totalMinutes,totalSeconds:this.totalSeconds,totalMilliseconds:this.totalMilliseconds}))]:this.$slots.default)},watch:{$props:{deep:!0,immediate:!0,handler:function(){this.totalMilliseconds=this.time,this.endTime=this.now()+this.time,this.autoStart&&this.start()}}},methods:{start:function(){this.counting||(this.counting=!0,this.emitEvents&&this.$emit("start"),"visible"===document.visibilityState&&this.continue())},continue:function(){var e=this;if(this.counting){var n=Math.min(this.totalMilliseconds,this.interval);if(0<n)if(window.requestAnimationFrame){var o,a;this.requestId=requestAnimationFrame(function t(i){a=a||i;var s=i-(o=o||i);n<=s||n<=s+(i-a)/2?e.progress():e.requestId=requestAnimationFrame(t),a=i})}else this.timeoutId=setTimeout(function(){e.progress()},n);else this.end()}},pause:function(){window.requestAnimationFrame?cancelAnimationFrame(this.requestId):clearTimeout(this.timeoutId)},progress:function(){this.counting&&(this.totalMilliseconds-=this.interval,this.emitEvents&&0<this.totalMilliseconds&&this.$emit("progress",{days:this.days,hours:this.hours,minutes:this.minutes,seconds:this.seconds,milliseconds:this.milliseconds,totalDays:this.totalDays,totalHours:this.totalHours,totalMinutes:this.totalMinutes,totalSeconds:this.totalSeconds,totalMilliseconds:this.totalMilliseconds}),this.continue())},abort:function(){this.counting&&(this.pause(),this.counting=!1,this.emitEvents&&this.$emit("abort"))},end:function(){this.counting&&(this.pause(),this.totalMilliseconds=0,this.counting=!1,this.emitEvents&&this.$emit("end"))},update:function(){this.counting&&(this.totalMilliseconds=Math.max(0,this.endTime-this.now()))},handleVisibilityChange:function(){switch(document.visibilityState){case"visible":this.update(),this.continue();break;case"hidden":this.pause()}}},mounted:function(){document.addEventListener(e,this.handleVisibilityChange)},beforeDestroy:function(){document.removeEventListener(e,this.handleVisibilityChange),this.pause()}}});

1
static/js/css/buefy.min.css vendored Normal file

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 42 KiB

View File

@ -10,12 +10,14 @@
/>
<meta
name="description"
content="翻译之家提供即时免费的中文、英语、日语、韩语、法语、德语、俄语、西班牙语、葡萄牙语、越南语、印尼语、意大利语、荷兰语、泰语全文翻译等服务。"
content="聚合翻译提供即时免费的中文、英语、日语、韩语、法语、德语、俄语、西班牙语、葡萄牙语、越南语、印尼语、意大利语、荷兰语、泰语全文翻译等服务。"
/>
<meta name="baidu-site-verification" content="codeva-mXz3BqI9VN" />
<link rel="stylesheet" href="static/css/public.css" />
<!-- <link rel="stylesheet" href="static/translate/css/public.css?v=4"> -->
<link rel="stylesheet" href="static/css/layui.css" />
<!-- <link rel="stylesheet" href="static/js/css/buefy.min.css"> -->
<script src="static/js/jquery-1.11.0.min.js"></script>
<script src="static/js/axios.min.js"></script>
<script src="static/translate/js/echarts.min.js"></script>
@ -25,7 +27,10 @@
<script src="static/js/layui.all.js"></script>
<script src="static/js/common.js"></script>
<script src="https://cdn.jsdelivr.net/npm/qrcode@1.4.4/build/qrcode.min.js"></script>
<title>翻译之家</title>
<script src="static/js/countdown.js"></script>
<!-- <script src="static/js/buefy.min.js"></script> -->
<title>聚合翻译</title>
<script>
var _hmt = _hmt || [];
(function () {
@ -66,7 +71,7 @@
</div>
</div>
<div v-if="userInfo!=undefined&&userInfo.userId>0" class="right">
<a href="userInfo.html" class="console">控制台</a>
<a href="userinfo.html" class="console">控制台</a>
<div class="user-info">
<div class="phone">{{userInfo.name}}</div>
<i></i>
@ -176,7 +181,7 @@
<div class="table-row">
<div class="col">
<div class="cell"><span>翻译引擎</span></div>
<!-- <div class="cell"><span>已使用字符数</span></div> -->
<div class="cell"><span>已使用字符数</span></div>
<div class="cell"><span>剩余字符数</span></div>
<div class="cell"><span>价格U/百万字符)</span></div>
<div class="cell"><span>操作</span></div>
@ -187,12 +192,15 @@
:key="'platform_'+index"
>
<div class="cell"><span>{{item.name}}</span></div>
<!-- <div class="cell"><span></span></div> -->
<div class="cell"><span>{{item.remainChars}}</span></div>
<div class="cell"><span>{{item.useChars}}</span></div>
<div class="cell">
<span>{{item.remainChars}}</span>
<img v-if="item.remainChars>0" class="btn-clock" @click="showRecord(item.platformId,index)" src="static/image/clock.png"/>
</div>
<div class="cell"><span>{{item.price}}</span></div>
<div class="cell">
<div class="act">
<span class="recharge" @click="show">充值</span
<span class="recharge" @click="show(item)">充值</span
><span class="view" @click="look(item.apiKey,index)"
>查看API密钥</span
>
@ -200,13 +208,13 @@
</div>
</div>
</div>
<div class="warn">备注:如需开取增值税发票,请联系客服。</div>
<div class="warn">备注:技术问题,请联系客服。</div>
<div class="clearfix" style="height: 361px">
<div class="range-picker">
<!-- <div class="col on">近7天</div> -->
<!-- <div class="range-picker">
<div class="col on">近7天</div>
<div class="col">近15天</div>
<!-- <div class="col">近30天</div> -->
</div>
<div class="col">近30天</div>
</div> -->
<div class="chart-container-wrapper">
<!-- ECharts 图表将渲染到这个 div 中 -->
@ -247,7 +255,7 @@
</div>
</div>
</div>
<div class="warn">备注:如需开取增值税发票,请联系客服。</div>
<div class="warn">备注:技术问题,请联系客服。</div>
<div class="clearfix" style="height: 361px">
<div class="range-picker">
<div class="col on">近7天</div>
@ -268,14 +276,14 @@
src="https://codeai.oss-cn-hangzhou.aliyuncs.com/img/p25.png"
alt=""
/>
<div>微信咨询</div>
<div>电报咨询</div>
<div class="detail wechat">
<h5>微信咨询</h5>
<h5>电报咨询</h5>
<img
src="https://codeai.oss-cn-hangzhou.aliyuncs.com/img/p23.jpg"
src="/static/picture/p23.jpg"
alt=""
/>
<p>手机扫码加我微信</p>
<p>手机扫码加我电报</p>
</div>
</div>
<div class="line"></div>
@ -287,38 +295,257 @@
<div>电话咨询</div>
<div class="detail">
<h5>电话咨询</h5>
<div class="phone">13327906119</div>
<div class="phone">+18435173355</div>
</div>
</div>
</div>
</div>
<div class="modal-overlay" style="display: none">
<div class="service-modal">
<div class="content">
<div class="close" @click="close"></div>
<div class="contact">TRX BLOCK</div>
<div class="contact-user">
<div class="contact-user-text">用户ID : {{userInfo.id}}</div>
</div>
<div class="modal">
<button class="close-btn" @click="close">&times;</button>
<div
id="qrcode"
style="text-align: center;height: 214px;"
class="border border-gray-200 rounded-lg p-2 flex justify-center items-center"
class="modal-content"
:style="loadingQr ? 'opacity: 0.4; pointer-events: none;' : ''"
>
<!-- 二维码将在这里生成 -->
<!-- <p class="text-gray-500">点击按钮生成二维码</p> -->
<h3 v-if="rechargeData.step === 1">Step 1: 输入购买数量</h3>
<h3 v-else>Step 2: 支付信息</h3>
<!-- Step 1 -->
<div v-if="rechargeData.step === 1" class="step">
<label>购买数量:</label>
<input type="number" v-model.number="rechargeData.count" min="1" />
</div>
<!-- <img
src="https://codeai.oss-cn-hangzhou.aliyuncs.com/img/p23.jpg"
alt=""
class="qrcode-img"
/> -->
<p>{{receiveAddress}}</p>
<!-- Step 2 -->
<div v-else class="step">
<div class="qr-code">
<div id="qrcode"></div>
<!-- <div v-if="loadingQr" class="loading-spinner"></div> -->
<!-- <img v-else-if="qrCodeUrl" :src="qrCodeUrl" alt="二维码"
@load="onQrLoadSuccess" @error="onQrLoadError"
style="width: 100%; height: 100%; border-radius: 8px;" />
<span v-else style="font-size: 12px; color: #999;">加载失败</span> -->
</div>
<div class="wallet-info">
<p>主链:<strong>{{ rechargeData.blockChain }}</strong></p>
<p>钱包地址: <strong>{{ rechargeData.receiveAddress }}</strong></p>
<p>支付金额: <strong>{{ rechargeData.amount }} USDT</strong></p>
<div>
<countdown :time="(rechargeData.expireUnix * 1000) - Date.now()"
v-if="rechargeData.status!==2&& rechargeData.expireUnix && (rechargeData.expireUnix * 1000) > Date.now()" >
<template slot-scope="props">
倒计时:
<span v-if="props.minutes>0||props.hours>0||props.days>0">{{ props.minutes }} 分</span>
<span v-if="props.seconds>0||props.minutes>0||props.hours>0||props.days>0">{{ props.seconds }} 秒</span>
<span style="color: red;" v-if="props.days==0&&props.hours==0&&props.minutes==0&&props.seconds==0">订单已过期,请勿支付!</span>
</template>
</countdown>
<div v-else-if="rechargeData.status===2" style="color: green">
充值成功,请勿重复支付!
</div>
</div>
</div>
</div>
<div class="btn-group">
<!-- <button class="btn btn-secondary" @click="close">关闭</button> -->
<button class="btn btn-secondary" v-if="rechargeData.step === 2" @click="prevStep">上一步</button>
<button class="btn btn-primary" v-if="rechargeData.step === 1" :disabled="!rechargeData.count" @click="nextStep">下一步</button>
</div>
</div>
</div>
<!-- loading 遮罩层 -->
<div class="modal-loading-overlay" v-if="loadingQr">
<div class="spinner"></div>
</div>
</div>
<div class="modal-overlay-record" style="display: none">
<div class="service-modal">
<div class="content-normal">
<div class="close" @click="closeRecord"></div>
<div v-for="(item,index) in rechargeList" :key="'record'+index" class="content-item">
<div>订单号:{{item.orderNo}}</div>
<div>金额:{{item.amount}}</div>
<div>总字符数:{{item.totalCharater}}</div>
<div>可用字符数:{{item.remainCharater}}</div>
<!-- <div>倒计时:{{item.expireUnix}}</div> -->
<countdown :time="(item.expireUnix * 1000) - Date.now()"
v-if="item.expireUnix && (item.expireUnix * 1000) > Date.now()" >
<template slot-scope="props">
倒计时:<span v-if="props.days > 0">{{ props.days }} 天</span>
<span v-if="props.hours>0||props.days>0">{{ props.hours }} 时</span>
<span v-if="props.minutes>0||props.hours>0||props.days>0">{{ props.minutes }} 分</span>
<span v-if="props.seconds>0||props.minutes>0||props.hours>0||props.days>0">{{ props.seconds }} 秒</span>
</template>
</countdown>
</div>
</div>
</div>
</div>
</div>
<style>
.modal-overlay {
position: fixed;
inset: 0;
background: rgba(0, 0, 0, 0.4);
display: flex;
justify-content: center;
align-items: center;
z-index: 999;
}
.modal {
background: #ffffff;
border-radius: 12px;
box-shadow: 0 8px 30px rgba(0, 0, 0, 0.1);
padding: 24px 28px;
width: 400px;
max-width: 90%;
animation: fadeIn 0.3s ease;
position:relative;
}
.modal-content {
transition: opacity 0.2s;
}
.modal-loading-overlay {
position: absolute;
top: 0; left: 0; right: 0; bottom: 0;
background-color: rgba(255, 255, 255, 0.6);
display: flex;
justify-content: center;
align-items: center;
z-index: 10;
border-radius: 12px;
}
.spinner {
border: 4px solid #f3f3f3;
border-top: 4px solid #409eff;
border-radius: 50%;
width: 32px;
height: 32px;
animation: spin 0.8s linear infinite;
}
@keyframes fadeIn {
from { opacity: 0; transform: translateY(-20px); }
to { opacity: 1; transform: translateY(0); }
}
.modal h3 {
margin-top: 0;
font-size: 20px;
color: #333;
}
input[type="number"] {
width: 100%;
padding: 10px 12px;
font-size: 16px;
margin-top: 8px;
border: 1px solid #ccc;
border-radius: 6px;
transition: border-color 0.2s;
}
input[type="number"]:focus {
border-color: #409eff;
outline: none;
}
button{
cursor: pointer;
}
.step {
padding-top: 16px;
margin-bottom: 16px;
}
.qr-code {
width: 150px;
height: 150px;
background: #f8f8f8;
border: 1px dashed #ccc;
display: flex;
align-items: center;
justify-content: center;
margin: 0 auto;
border-radius: 8px;
}
.loading-spinner {
border: 3px solid #f3f3f3;
border-top: 3px solid #409eff;
border-radius: 50%;
width: 28px;
height: 28px;
animation: spin 0.8s linear infinite;
}
@keyframes spin {
to { transform: rotate(360deg); }
}
.btn-group {
display: flex;
justify-content: flex-end;
gap: 8px;
margin-top: 16px;
}
.btn {
padding: 8px 16px;
border: none;
border-radius: 6px;
font-size: 14px;
transition: background-color 0.2s ease;
}
.btn-primary {
background-color: #409eff;
color: #fff;
}
.btn-primary:disabled {
background-color: #a0cfff;
cursor: not-allowed;
}
.btn-secondary {
background-color: #e0e0e0;
color: #333;
}
.wallet-info {
font-size: 14px;
color: #555;
text-align: center;
margin-top: 12px;
}
.close-btn {
position: absolute;
top: 12px;
right: 12px;
background: transparent;
border: none;
font-size: 20px;
color: #999;
cursor: pointer;
transition: color 0.2s ease;
}
.close-btn:hover {
color: #333;
}
</style>
<script type="text/javascript">
// 工具函数:将十六进制颜色转换为 RGBA 格式
function hexToRgba(hex, alpha) {
@ -328,8 +555,12 @@
return `rgba(${r}, ${g}, ${b}, ${alpha})`;
}
var vm = new Vue({
el: "#app",
components:{
countdown: window.VueCountdown,
},
data() {
return {
translateInfo: [],
@ -341,16 +572,34 @@
token: "",
userMoney: 0,
userInfo: {},
activeStep:"2",
showRecharge:false,
loadingQr:false,
rechargeData:{
platformId:null,
orderNo:undefined,
name:null,
count:1,
amount:null,
receiveAddress:null,
step:1,
expireUnix:undefined,
status:undefined,
},
// ECharts 图表数据
myChart: null, // 用于存储 ECharts 实例
xAxisData: [],
seriesData: [],
receiveAddress: "",
rechargeList:[],
checkOrderTimer: null,
};
},
created() {},
created() {
},
mounted() {
let token = localStorage.getItem("token");
if (token) {
this.token = token;
@ -371,7 +620,7 @@
this.getUserPlatforms();
this.getStatistics();
this.getReceiveAddress();
// this.getReceiveAddress();
},
beforeDestroy() {
// 销毁 ECharts 实例并移除事件监听器
@ -417,22 +666,36 @@
}
});
},
getReceiveAddress() {
// getReceiveAddress() {
// axios
// .get("/configKey/trx_receive_address", {
// headers: { Authorization: `Bearer ${this.token}` },
// })
// .then((res) => {
// if (res.data.code == 200) {
// this.receiveAddress = res.data.data.configValue;
// this.generateQRCode();
// } else {
// layer.msg(response.data.msg);
// }
// });
// },
getMemberAdvent(platformId){
axios
.get("/configKey/trx_receive_address", {
.get("/tm-member/member-advent", {
headers: { Authorization: `Bearer ${this.token}` },
params:{platformId}
})
.then((res) => {
if (res.data.code == 200) {
this.receiveAddress = res.data.data.configValue;
this.generateQRCode();
let result = res.data.data;
this.rechargeList = result;
} else {
layer.msg(response.data.msg);
}
});
},
getUserInfo(token) {
console.log("token", token);
let that = this;
axios
.get("/getinfo", {
@ -441,11 +704,8 @@
},
})
.then((response) => {
console.log(response.data);
console.log("code", response.data.code);
if (response.data.code === 200) {
that.userInfo = response.data.data;
console.log("userinfo", that.userInfo);
} else {
localStorage.removeItem("token");
location.href = "login.html";
@ -489,11 +749,68 @@
'" >复制</i></div></div>',
});
},
show() {
show(item) {
$(".modal-overlay").fadeIn();
this.rechargeData.platformId=item.platformId;
this.rechargeData.name=item.name;
},
close() {
$(".modal-overlay").fadeOut();
this.rechargeData={
platformId:null,
name:null,
count:1,
amount:null,
receiveAddress:null,
step:1,
expireUnix:undefined,
status:undefined,
};
this.cleanCheckOrderTimer();
},
prevStep(){
this.rechargeData.step=1;
},
nextStep(){
if(this.rechargeData.count<=0){
layer.msg("数量不能小于0");
return;
}
this.loadingQr=true;
axios.post("/tm-member/recharge",this.rechargeData,{headers: { Authorization: `Bearer ${this.token}` }})
.then(res => {
if(res.data.code===200){
this.rechargeData.step=2;
this.rechargeData.amount=res.data.data.amount;
this.rechargeData.receiveAddress=res.data.data.receiveAddress;
this.rechargeData.blockChain=res.data.data.blockChain;
this.rechargeData.expireUnix=res.data.data.expireUnix;
this.rechargeData.orderNo=res.data.data.orderNo;
let _that=this;
this.$nextTick(() => {
_that.generateQRCode(_that.rechargeData.receiveAddress);
})
_that.createCheckOrderTimer();
}else{
layer.msg(res.data.msg);
}
}).finally(() => {
this.loadingQr=false;
});
},
showRecord(platformId){
$(".modal-overlay-record").fadeIn();
this.getMemberAdvent(platformId);
},
closeRecord(){
$(".modal-overlay-record").fadeOut();
},
tabClick(val) {
this.tabShow = val;
@ -523,7 +840,7 @@
.then((response) => {
if (response.data.code === 200) {
this.userInfo = response.data.data;
console.log("userinfo", this.userInfo);
} else {
location.href = "login.html";
}
@ -721,11 +1038,12 @@
this.myChart.resize();
}
},
generateQRCode() {
const text = this.receiveAddress.trim(); // 获取输入框内容并去除首尾空格
generateQRCode(qrString) {
const text = qrString.trim(); // 获取输入框内容并去除首尾空格
const qrcodeContainer = document.getElementById('qrcode');
if (text) {
console.log('container',qrcodeContainer)
// 1. 清空容器内的所有内容,包括旧的二维码或提示信息
qrcodeContainer.innerHTML = '';
this.showPlaceholder = false;
@ -739,7 +1057,7 @@
// 3. 使用 QRCode.toCanvas 在新创建的 canvas 上生成二维码
QRCode.toCanvas(canvasElement, text, { // 将 canvasElement 传递给 toCanvas
width: 214, // 设置二维码宽度
width: 150, // 设置二维码宽度
color: {
dark: '#000000', // 二维码颜色
light:'#ffffff' // 背景颜色
@ -755,7 +1073,46 @@
// 如果输入为空,给出提示
qrcodeContainer.innerHTML = ''; // 清空可能存在的旧二维码
}
},
getOrderStatus(orderNo){
let that=this;
let params={orderNo}
axios
.get("/tm-member/order", {
headers: {
Authorization: `Bearer ${this.token}`,
},
params:{orderNo}
})
.then((response) => {
if (response.data.code === 200) {
if(that.rechargeData.orderNo===response.data.data.orderNo && response.data.data.status===2){
that.rechargeData.status=response.data.data.status;
that.cleanCheckOrderTimer();
}
} else {
// location.href = "login.html";
}
});
},
//定时检查订单状态
createCheckOrderTimer() {
if (this.checkOrderTimer) {
clearInterval(this.checkOrderTimer);
}
console.log("createCheckOrderTimer")
this.checkOrderTimer = setInterval(() => {
this.getOrderStatus(this.rechargeData.orderNo);
}, 10000);
},
cleanCheckOrderTimer() {
if (this.checkOrderTimer) {
clearInterval(this.checkOrderTimer);
}
},
}
});
@ -803,17 +1160,17 @@
font-size: 12px;
"
>
<p style="color: #fff; font-size: 12px"><span>关于我们:</span></p>
<p style="color: #fff; font-size: 12px">
<p style="color: #fff; font-size: 12px"><span>官方频道:@apiapl_news</span></p>
<p style="color: #fff; font-size: 12px"><span>咨询客服:@apiapl</span></p>
<span></span>
</p>
</div>
<div class="right" style="white-space: nowrap">
<p></p>
<p><span>联系我们:</span></p>
<p><span>地址:</span></p>
<p><span>邮箱:</span></p>
<p class=""><span>电话: </span></p>
<p><span>技术服务:@apiapl_sdk</span></p>
<p><span>联系邮箱:info@apiapl.com</span></p>
<p class=""><span>联系电话:+18435173355 </span></p>
<p></p>
</div>
</div>
@ -823,6 +1180,11 @@
</div>
<div class="layui-layer-move" style="cursor: move; display: none"></div>
<style>
.btn-clock{
width: 15px;
cursor: pointer;
}
.chart-container-wrapper {
width: 100%;
max-width: 900px; /* 最大宽度 */

View File

@ -11,7 +11,7 @@
/>
<meta
name="description"
content="翻译之家提供即时免费的中文、英语、日语、韩语、法语、德语、俄语、西班牙语、葡萄牙语、越南语、印尼语、意大利语、荷兰语、泰语全文翻译等服务。"
content="聚合翻译提供即时免费的中文、英语、日语、韩语、法语、德语、俄语、西班牙语、葡萄牙语、越南语、印尼语、意大利语、荷兰语、泰语全文翻译等服务。"
/>
<meta name="baidu-site-verification" content="codeva-mXz3BqI9VN" />
<link rel="stylesheet" href="static/css/public.css" />
@ -23,7 +23,7 @@
<script src="static/js/lodash.min.js"></script>
<script src="static/js/layui.all.js"></script>
<script src="static/js/common.js"></script>
<title>翻译之家</title>
<title>聚合翻译</title>
<script>
var _hmt = _hmt || [];
(function () {
@ -56,7 +56,7 @@
</div>
</div>
<div v-if="userInfo!=undefined&&userInfo.userId>0" class="right">
<a href="userInfo.html" class="console">控制台</a>
<a href="userinfo.html" class="console">控制台</a>
<div class="user-info">
<div class="phone">{{userInfo.name}}</div>
<i></i>
@ -1147,17 +1147,17 @@
font-size: 12px;
"
>
<p style="color: #fff; font-size: 12px"><span>关于我们:</span></p>
<p style="color: #fff; font-size: 12px">
<p style="color: #fff; font-size: 12px"><span>官方频道:@apiapl_news</span></p>
<p style="color: #fff; font-size: 12px"><span>咨询客服:@apiapl</span></p>
<span></span>
</p>
</div>
<div class="right" style="white-space: nowrap">
<p></p>
<p><span>联系我们:</span></p>
<p><span>地址:</span></p>
<p><span></span></p>
<p class=""><span>电话: </span></p>
<p><span>技术服务:@apiapl_sdk</span></p>
<p><span>联系邮箱info@apiapl.com</span></p>
<p class=""><span>联系电话:+18435173355 </span></p>
</div>
</div>
<div class="copyright">