From 61f6c9514d060794a5861f2c60f4692330afd035 Mon Sep 17 00:00:00 2001 From: xx Date: Sun, 15 Jun 2025 22:12:30 +0800 Subject: [PATCH] 1 --- App.vue | 6 +- config/baseUrl.js | 4 +- config/requestConfig.js | 24 ++- locales/en.json | 27 +++- locales/zh.json | 45 +++--- main.js | 2 +- manifest.json | 4 +- package-lock.json | 34 +++-- package.json | 2 +- pages.json | 7 + pages/Setting/languages.vue | 2 +- pages/Setting/setPasswork.vue | 8 +- pages/about/help.vue | 29 ++-- pages/address/index.vue | 32 ++-- pages/im/chat.vue | 2 +- pages/im/index.vue | 27 +++- pages/im/member.vue | 2 +- pages/index/index.vue | 30 ++-- pages/mine/index.vue | 33 ++-- pages/mine/login.vue | 3 +- pages/mine/notice.vue | 22 +-- pages/mine/upgrade.vue | 2 +- pages/promotion/index.vue | 30 ++-- pages/promotion/invite.vue | 25 +++- pages/promotion/invitesignup.vue | 248 +++++++++++++++++++++++++++++++ pages/promotion/list.vue | 49 +++--- pages/questionnaire/details.vue | 3 +- pages/questionnaire/index.vue | 166 +++++++++++++++------ pages/questionnaire/select.vue | 14 +- pages/wallet/fundrecords.vue | 37 +++-- pages/wallet/index.vue | 4 +- pages/wallet/recharge.vue | 48 ++++-- plugins/APPUpdate/index.js | 50 ++++--- static/im/mattermost.js | 2 +- static/images/s9.png | Bin 0 -> 16066 bytes 35 files changed, 735 insertions(+), 288 deletions(-) create mode 100644 pages/promotion/invitesignup.vue create mode 100644 static/images/s9.png diff --git a/App.vue b/App.vue index 1a03a41..15a77ff 100644 --- a/App.vue +++ b/App.vue @@ -45,9 +45,9 @@ } // #endif // #ifdef APP-PLUS - if (store.state.userInfo.token) { - socket.init(); - } + // if (store.state.userInfo.token) { + // socket.init(); + // } APPUpdate(); // #endif }, diff --git a/config/baseUrl.js b/config/baseUrl.js index 15585ba..ed3b57a 100644 --- a/config/baseUrl.js +++ b/config/baseUrl.js @@ -4,11 +4,11 @@ if (process.env.NODE_ENV === 'development') { // 开发环境 // baseUrl = "http://localhost:7001/"; // socketUrl = "ws://localhost:6001/"; - baseUrl = "http://api.dxmt.io"; + baseUrl = "https://api.dxmt.io"; //socketUrl = "ws://8.129.186.35:6001/"; } else if (process.env.NODE_ENV === 'production') { // 生产环境 - baseUrl = "http://api.dxmt.io"; + baseUrl = "https://api.dxmt.io"; //socketUrl = "ws://8.129.186.35:6001/"; } const courtConfig = { diff --git a/config/requestConfig.js b/config/requestConfig.js index 1f4e35b..811176d 100644 --- a/config/requestConfig.js +++ b/config/requestConfig.js @@ -180,10 +180,22 @@ $http.dataFactory = async function(res) { // uni.navigateTo({ // url:'/pages/mine/index' // }) + const savedLocale = uni.getStorageSync('locale') || 'en'; + let msg = ''; + if(savedLocale == 'zh'){ + console.log(httpData.msg) + if(httpData.msg.indexOf('limit of uncompleted orders') > 0){ + msg = '订单已达上限,请完成该订单或者15分钟后再试'; + }else{ + msg = httpData.msg; + } + }else{ + msg = httpData.msg; + } //其他错误提示 if (res.isPrompt) { uni.showToast({ - title: httpData.info || httpData.msg, + title: httpData.info || msg, icon: "none", duration: 3000 }); @@ -191,7 +203,7 @@ $http.dataFactory = async function(res) { // 返回错误的结果(catch接受数据) return Promise.reject({ statusCode: 0, - errMsg: "【request】" + (httpData.info || httpData.msg) + errMsg: "【request】" + (httpData.info || msg) }); } @@ -211,10 +223,10 @@ $http.requestError = function(e){ if(e.statusCode === 0){ throw e; } else { - uni.showToast({ - title: "网络错误,请检查一下网络", - icon: "none" - }); + // uni.showToast({ + // title: "网络错误,请检查一下网络", + // icon: "none" + // }); } } export default $http; diff --git a/locales/en.json b/locales/en.json index 7755d44..bc72f0d 100644 --- a/locales/en.json +++ b/locales/en.json @@ -22,7 +22,8 @@ "send_fail":"Send Fail", "loading":"loading...", "gallery":"gallery", - "camera":"camera" + "camera":"camera", + "primq5x5u38kuch8iwpeemy87y": "MT Global official group" }, "setIndex":{ "title": "setting", @@ -93,7 +94,9 @@ "text7": "To answer", "text8": "Answer time", "text9": "Details", - "text10": "Done" + "text10": "Done", + "text11": "Reward", + "text12": "Cycle" }, "Select": { "title": "Select", @@ -166,8 +169,8 @@ "text19": "Email is empty", "text20": "Email address error", "text21": "Please enter a 6-10 digit password", - "text22": "Two passwords are inconsistent" - + "text22": "Two passwords are inconsistent", + "text23": "Code" }, "personal":{ "title": "Personal details", @@ -215,7 +218,9 @@ "text12": "Please enter the correct email address", "text13": "Already have an account?", "text14": "Please enter a 6-10 digit password", - "text15": "Two passwords are inconsistent" + "text15": "Two passwords are inconsistent", + "text16": "Invite code", + "text17": "Sign up now" }, "putforward":{ "title": "Put forward", @@ -278,7 +283,8 @@ "text2": "Accumulated earnings", "text3": "Cash withdrawn", "text4": "Wallet fund records", - "text5": "View details" + "text5": "View details", + "text6": "After" }, "fundrecords":{ "title": "Wallet fund records", @@ -312,7 +318,11 @@ "text8": "View all", "text9": "Join date", "text10": "KPI results", - "text11": "Total Team Size" + "text11": "Total Team Size", + "text12": "Identity", + "text13": "User", + "text14": "channel provider", + "text15": "VIP" }, "invite": { "text1": "Save", @@ -386,7 +396,8 @@ "text22": "Behavior pattern simulation", "text23": "Equipment environment quarantine", "text24": "Core advantage", - "text25": "Select Language" + "text25": "Select Language", + "text26": "{par} purchased {par1} on {par2}" }, "nav":{ "home": "Home", diff --git a/locales/zh.json b/locales/zh.json index 89ee66a..42ea747 100644 --- a/locales/zh.json +++ b/locales/zh.json @@ -22,7 +22,8 @@ "send_fail":"发送失败", "loading":"加载中...", "gallery":"照片", - "camera":"相机" + "camera":"相机", + "primq5x5u38kuch8iwpeemy87y": "MT全球官方社群" }, "setIndex":{ "title": "设置", @@ -50,7 +51,7 @@ "text13": "邮箱地址错误", "text14": "发送成功", "text15": "在{par}之后发送", - "text16": "请输入6-10位纯数字密码", + "text16": "请输入6-10位密码", "text17": "两个密码不一致" }, "setPin":{ @@ -89,11 +90,13 @@ "text3": "已完成", "text4": "已答题", "text5": "周期", - "text6": "奖励", + "text6": "报酬", "text7": "去答题", "text8": "答题时间", "text9": "详情", - "text10": "已完成" + "text10": "已完成", + "text11": "报酬", + "text12": "周期" }, "Select": { "title": "选择", @@ -155,7 +158,7 @@ "text8": "重新发送", "text9": "修改密码", "text10": "不要担心忘记密码,你可以把它改成一个你能记住的密码。", - "text11": "密码", + "text11": "登录密码", "text12": "请输入您的密码", "text13": "确认密码", "text14": "请输入您的确认密码", @@ -166,8 +169,8 @@ "text19": "请输入邮箱", "text20": "邮箱地址错误", "text21": "请输入6-10位数字密码", - "text22": "两次输入密码不一致" - + "text22": "两次输入密码不一致", + "text23": "验证码" }, "personal":{ "title": "个人信息", @@ -181,7 +184,7 @@ }, "login":{ "title": "登录", - "text1": "调查问卷", + "text1": "问卷调查", "text2": "登录您的帐户", "text3": "输入您的邮箱和密码登录", "text4": "请输入您的邮箱地址", @@ -215,7 +218,9 @@ "text12": "请输入正确的邮箱地址", "text13": "已经有账户了吗?", "text14": "请输入6-10位数字密码", - "text15": "两个密码不一致" + "text15": "两个密码不一致", + "text16": "邀请码", + "text17": "立即注册" }, "putforward":{ "title": "提现", @@ -278,7 +283,8 @@ "text2": "累计收益", "text3": "已提金额", "text4": "钱包资金记录", - "text5": "查看详情" + "text5": "查看详情", + "text6": "余额" }, "fundrecords":{ "title": "钱包资金记录", @@ -306,16 +312,20 @@ "text2": "我的社区", "text3": "团队总人数", "text4": "分享总人数", - "text5": "KPI业绩-大区", - "text6": "KPI业绩-小区", + "text5": "KPI业绩-大市场", + "text6": "KPI业绩-小市场", "text7": "分享列表", "text8": "查看所有", "text9": "注册时间", "text10": "KPI业绩", - "text11": "团队总人数" + "text11": "团队总人数", + "text12": "身份", + "text13": "普通用户", + "text14": "渠道商", + "text15": "VIP" }, "invite": { - "text1": "保持", + "text1": "保存", "text2": "分享", "text3": "长按并保存", "text4": "正在下载海报" @@ -371,7 +381,7 @@ "text7": "邀请朋友获得高额佣金", "text8": "查看详情", "text9": "已答题", - "text10": "奖励", + "text10": "报酬", "text11": "查看所有", "text12": "新技术的应用(自动化工具/人工智能辅助)", "text13": "智能答题引擎", @@ -386,7 +396,8 @@ "text22": "行为模式模拟", "text23": "设备环境隔离", "text24": "核心优势", - "text25": "选择语言" + "text25": "选择语言", + "text26": "用户 {par} 于 {par2} 购买了 {par1}" }, "nav":{ "home": "首页", @@ -398,7 +409,7 @@ "gotoLogin":{ "title": "登录提醒", "content": "您还未登录,立即登录~", - "login": "去登陆", + "login": "去登录", "cancel": "取消" } } \ No newline at end of file diff --git a/main.js b/main.js index dda87b0..5296ef0 100644 --- a/main.js +++ b/main.js @@ -24,7 +24,7 @@ import VueI18n from 'vue-i18n'; import en from './locales/en.json'; // 引入英文语言包 import zh from './locales/zh.json'; // 引入中文语言包 Vue.use(VueI18n); // 使用vue-i18n插件 -const savedLocale = localStorage.getItem('locale') || 'en'; +const savedLocale = uni.getStorageSync('locale') || 'en'; const i18n = new VueI18n({ locale: savedLocale, // 设置默认语言 messages: { // 设置语言环境信息 diff --git a/manifest.json b/manifest.json index 7dacef2..4a70b22 100644 --- a/manifest.json +++ b/manifest.json @@ -9,8 +9,8 @@ "src" : "图片路径" } ], - "versionName" : "1.0.7", - "versionCode" : 107, + "versionName" : "2.1.6", + "versionCode" : 216, "app-plus" : { "softinputMode" : "adjustResize", "statusBarAppearance" : "dark", diff --git a/package-lock.json b/package-lock.json index b5424c2..1f5ae5f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,13 +13,15 @@ }, "node_modules/@dcloudio/uni-ui": { "version": "1.5.7", - "resolved": "https://registry.npmmirror.com/@dcloudio/uni-ui/-/uni-ui-1.5.7.tgz", - "integrity": "sha512-DugxSIrQrze1FLdUOj9a+JEQ0bHGjnJTcGUK1mN/MivKg7nuKJBRWk5Ipa9sUdoBznX6ndz5h2e7Uao6x1CdCw==" + "resolved": "https://registry.npmjs.org/@dcloudio/uni-ui/-/uni-ui-1.5.7.tgz", + "integrity": "sha512-DugxSIrQrze1FLdUOj9a+JEQ0bHGjnJTcGUK1mN/MivKg7nuKJBRWk5Ipa9sUdoBznX6ndz5h2e7Uao6x1CdCw==", + "license": "Apache-2.0" }, "node_modules/clipboard": { "version": "2.0.11", - "resolved": "https://registry.npmmirror.com/clipboard/-/clipboard-2.0.11.tgz", + "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.11.tgz", "integrity": "sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==", + "license": "MIT", "dependencies": { "good-listener": "^1.2.2", "select": "^1.1.2", @@ -28,26 +30,30 @@ }, "node_modules/delegate": { "version": "3.2.0", - "resolved": "https://registry.npmmirror.com/delegate/-/delegate-3.2.0.tgz", - "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==" + "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", + "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", + "license": "MIT" }, "node_modules/good-listener": { "version": "1.2.2", - "resolved": "https://registry.npmmirror.com/good-listener/-/good-listener-1.2.2.tgz", + "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", "integrity": "sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==", + "license": "MIT", "dependencies": { "delegate": "^3.1.2" } }, "node_modules/select": { "version": "1.1.2", - "resolved": "https://registry.npmmirror.com/select/-/select-1.1.2.tgz", - "integrity": "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==" + "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", + "integrity": "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==", + "license": "MIT" }, "node_modules/tiny-emitter": { "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz", - "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", + "license": "MIT" }, "node_modules/tki-qrcode": { "version": "0.1.6", @@ -57,17 +63,19 @@ }, "node_modules/vue-clipboard2": { "version": "0.3.3", - "resolved": "https://registry.npmmirror.com/vue-clipboard2/-/vue-clipboard2-0.3.3.tgz", + "resolved": "https://registry.npmjs.org/vue-clipboard2/-/vue-clipboard2-0.3.3.tgz", "integrity": "sha512-aNWXIL2DKgJyY/1OOeITwAQz1fHaCIGvUFHf9h8UcoQBG5a74MkdhS/xqoYe7DNZdQmZRL+TAdIbtUs9OyVjbw==", + "license": "MIT", "dependencies": { "clipboard": "^2.0.0" } }, "node_modules/vue-i18n": { "version": "8.28.2", - "resolved": "https://registry.npmmirror.com/vue-i18n/-/vue-i18n-8.28.2.tgz", + "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-8.28.2.tgz", "integrity": "sha512-C5GZjs1tYlAqjwymaaCPDjCyGo10ajUphiwA922jKt9n7KPpqR7oM1PCwYzhB/E7+nT3wfdG3oRre5raIT1rKA==", - "deprecated": "Vue I18n v8.x has reached EOL and is no longer actively maintained. About maintenance status, see https://vue-i18n.intlify.dev/guide/maintenance.html" + "deprecated": "Vue I18n v8.x has reached EOL and is no longer actively maintained. About maintenance status, see https://vue-i18n.intlify.dev/guide/maintenance.html", + "license": "MIT" } } } diff --git a/package.json b/package.json index 745a0be..e8ac588 100644 --- a/package.json +++ b/package.json @@ -5,4 +5,4 @@ "vue-clipboard2": "^0.3.3", "vue-i18n": "^8.28.2" } -} +} \ No newline at end of file diff --git a/pages.json b/pages.json index 202aee1..039f47d 100644 --- a/pages.json +++ b/pages.json @@ -558,6 +558,13 @@ { "navigationBarTitleText": "detail" } + }, + { + "path" : "pages/promotion/invitesignup", + "style" : + { + "navigationBarTitleText" : "" + } } ], "globalStyle": { diff --git a/pages/Setting/languages.vue b/pages/Setting/languages.vue index 653e233..307c32a 100644 --- a/pages/Setting/languages.vue +++ b/pages/Setting/languages.vue @@ -61,7 +61,7 @@ }, changeLang(l){ this.$i18n.locale = l; - localStorage.setItem('locale', l); + uni.setStorageSync('locale', l); setTimeout(() => { uni.navigateBack(); }, 500); diff --git a/pages/Setting/setPasswork.vue b/pages/Setting/setPasswork.vue index 5346aec..ca2c7cc 100644 --- a/pages/Setting/setPasswork.vue +++ b/pages/Setting/setPasswork.vue @@ -88,7 +88,7 @@ sendCode(){ this.isSend = true; if (!this.$base.mailRegular.test(this.model.email)) { - uni.showToast({title: this.$t('setPasswork.text13'), icon:'error'}); + uni.showToast({title: this.$t('setPasswork.text13'), icon:'none'}); return; } let s = 120; @@ -119,15 +119,15 @@ submit(){ this.$refs.model.validate().then(res=>{ if (!this.$base.mailRegular.test(this.model.email)) { - uni.showToast({title: this.$t('setPasswork.text13'), icon:'error'}); + uni.showToast({title: this.$t('setPasswork.text13'), icon:'none'}); return; } if (!this.$base.passwordRegular.test(this.model.password)) { - uni.showToast({title: this.$t('setPasswork.text16'), icon:'error'}); + uni.showToast({title: this.$t('setPasswork.text16'), icon:'none'}); return; } if (this.model.cpassword !== this.model.password) { - uni.showToast({title: this.$t('setPasswork.text17'), icon:'error'}); + uni.showToast({title: this.$t('setPasswork.text17'), icon:'none'}); return; } this.$http.post('/api/common/resetpwd', {email: this.model.email, newpassword: this.model.password, code: this.model.code}).then(res => { diff --git a/pages/about/help.vue b/pages/about/help.vue index da9e765..68cee19 100644 --- a/pages/about/help.vue +++ b/pages/about/help.vue @@ -153,19 +153,22 @@ // #endif }, copy(val = '') { - const textArea = document.createElement('textarea'); - textArea.value = val; - document.body.appendChild(textArea); - textArea.select(); - try { - document.execCommand('copy'); - uni.showToast({ - title: this.$t('copySuccess') - }); - } catch (err) { - console.error('Could not copy text: ', err); - } - document.body.removeChild(textArea); + // #ifdef APP-PLUS + uni.setClipboardData({ + data: val, // e是你要保存的内容 + success: function () { + uni.showToast({ + title:this.$t('copySuccess'), + icon:'none' + }) + } + }) + // #endif + // #ifdef H5 + this.$copyText(val).then(res => { + uni.showToast({title: this.$t('copySuccess'), icon: 'none'}); + }); + // #endif }, // open1(v){ // switch(this.type){ diff --git a/pages/address/index.vue b/pages/address/index.vue index 2eab0fc..acbebf4 100644 --- a/pages/address/index.vue +++ b/pages/address/index.vue @@ -36,17 +36,20 @@ return { list:[], page: 1, - limit: 10 + limit: 10, + lastPage: 1, }; }, computed: { }, //第一次加载 onLoad(e) { - this.getlist(); + }, //页面显示 - onShow() {}, + onShow() { + this.getlist(); + }, //方法 methods: { ...mapMutations(['setUserInfo']), @@ -58,7 +61,10 @@ } this.$http.post('/api/address/list', data).then(res => { if(res.code == 0){ - this.list = res.data.data; + res.data.data.forEach(item => { + this.list.push(item); + }); + this.lastPage = res.data.last_page; } }); }, @@ -90,21 +96,11 @@ onPullDownRefresh() {}, //页面上拉触底 onReachBottom() { - this.page = this.page + 1; - let data = { - page: this.page, - limit: this.limit, - lang: this.$i18n.locale + if(this.page { - if(res.code == 0){ - res.data.data.forEach(item => { - this.list.push(item); - }); - } - }).catch(err => { - this.page = this.page - 1; - }); + }, //用户点击分享 onShareAppMessage(e) { diff --git a/pages/im/chat.vue b/pages/im/chat.vue index 2b307a9..452c8bb 100644 --- a/pages/im/chat.vue +++ b/pages/im/chat.vue @@ -163,7 +163,7 @@ export default { data() { return { init: { - cdnurl: 'http://api.dxmt.io' + cdnurl: 'https://api.dxmt.io' }, channel:{}, // 滚动容器 diff --git a/pages/im/index.vue b/pages/im/index.vue index 5f51113..ecae290 100644 --- a/pages/im/index.vue +++ b/pages/im/index.vue @@ -45,8 +45,8 @@ v-if="item.id" :key="`${item.id}`" :avatar-circle="true" - :title="item.display_name || item.name || item.nickname || item.email" - :avatar="item.id==='bkgjcxzi9j8wimrumt1nfosbgr' ? '/static/im/kefu1.png' : getAvatarUrl(item)" + :title="gettitle(item.display_name) || item.name || item.nickname || item.email" + :avatar="item.id==='primq5x5u38kuch8iwpeemy87y' ? '/static/im/kefu1.png' : getAvatarUrl(item)" :note="item.last_msg ? (item.last_msg_type === 'image' ? $t('im.pic_msg') : item.last_msg) : $t('im.msg_none')" :time="item.last_post_at ? date(item.last_post_at) : ''" :badge-text="item.unread_count > 0 ? (item.unread_count > 99 ? '99+' : item.unread_count) : ''" @@ -154,6 +154,17 @@ }, methods: { ...mapMutations(['setUserInfo']), + gettitle(title){ + if(this.$i18n.locale == 'zh' && title){ + if(title.indexOf('official group')>0){ + return "MT全球官方社群"; + } + if(title.indexOf("Inviter") >= 0){ + return "邀请人"; + } + } + return title; + }, async init(){ try { if(!this.userInfo.token || !this.userInfo.im_token){ @@ -168,7 +179,7 @@ const initRes = await this.$http.get('/api/common/init?lang=' + this.$i18n.locale); if (initRes.code === 0) { this.config = initRes.data; - this.config.cdnurl = initRes.data.cdnurl || "http://www.dxmt.io"; + this.config.cdnurl = initRes.data.cdnurl || "https://www.dxmt.io"; } // 检查 Mattermost 连接状态 @@ -182,7 +193,7 @@ } catch (error) { console.error('页面加载失败:', error); uni.showToast({ - title: 'im.loading_fail', + title: $t('im.loading_fail'), icon: 'none' }); } @@ -427,10 +438,10 @@ } } catch (error) { console.error('获取客服列表失败:', error); - uni.showToast({ - title: error.message || '获取客服列表失败', - icon: 'none' - }); + // uni.showToast({ + // title: error.message || '获取客服列表失败', + // icon: 'none' + // }); } }, goto(url,type){ diff --git a/pages/im/member.vue b/pages/im/member.vue index aabc011..249db3f 100644 --- a/pages/im/member.vue +++ b/pages/im/member.vue @@ -109,7 +109,7 @@ const initRes = await this.$http.get('/api/common/init?lang=' + this.$i18n.locale); if (initRes.code === 0) { this.config = initRes.data; - this.config.cdnurl = initRes.data.cdnurl || "http://www.dxmt.io"; + this.config.cdnurl = initRes.data.cdnurl || "https://www.dxmt.io"; } // 检查 Mattermost 连接状态 diff --git a/pages/index/index.vue b/pages/index/index.vue index d4fbcaa..a1e67c3 100644 --- a/pages/index/index.vue +++ b/pages/index/index.vue @@ -8,7 +8,7 @@ --> EN - ZH + 中文 @@ -98,7 +98,7 @@ {{$t('index.text10')}}: ${{parseFloat(item.interest_rate).toFixed(2)}} - + @@ -117,9 +117,9 @@ {{$t('index.text12')}} - 1. {{$t('index.text13')}}
- 2. {{$t('index.text14')}}
- 3. {{$t('index.text15')}} + {{$t('index.text13')}}
+ {{$t('index.text14')}}
+ {{$t('index.text15')}}
@@ -128,9 +128,9 @@ {{$t('index.text16')}} - 1. {{$t('index.text17')}}
- 2. {{$t('index.text18')}}
- 3. {{$t('index.text19')}} + {{$t('index.text17')}}
+ {{$t('index.text18')}}
+ {{$t('index.text19')}}
@@ -139,9 +139,9 @@ {{$t('index.text20')}} - 1. {{$t('index.text21')}}
- 2. {{$t('index.text22')}}
- 3. {{$t('index.text23')}} + {{$t('index.text21')}}
+ {{$t('index.text22')}}
+ {{$t('index.text23')}}
@@ -208,7 +208,7 @@ this.user = res; }); } - this.$http.get('/api/withdrawl/recent').then(res => { + this.$http.get('/api/role/recent?lang='+this.$i18n.locale).then(res => { if(res.code == 0){ this.notices = res.data; } @@ -240,7 +240,7 @@ }, switchlan(l){ this.$i18n.locale = l; - localStorage.setItem('locale', l); + uni.setStorageSync('locale', l) this.$refs.popup.close(); }, onTokenJump(url) { @@ -275,12 +275,12 @@ }); }, getcash(o){ - var email = o.user.email; + var email = o.username; let username = email.split('@')[0]; // 获取用户名部分 let domain = email.split('@')[1]; // 获取域名部分 let midIndex = Math.floor(username.length / 2) - 2; // 计算中间两个字符的起始索引 let censoredEmail = username.slice(0, midIndex) + "****" + username.slice(midIndex + 4) + '@' + domain; - return censoredEmail + this.$t('index.text5', {par: parseFloat(o.deduction_amount).toFixed(2)}) + return this.$t('index.text26', {par: censoredEmail, par1: o.role, par2: o.created_at.slice(0,10) }) } }, //页面隐藏 diff --git a/pages/mine/index.vue b/pages/mine/index.vue index 4ba63f9..785eb57 100644 --- a/pages/mine/index.vue +++ b/pages/mine/index.vue @@ -72,7 +72,7 @@ - + {{$t('mine.text9')}} @@ -80,7 +80,7 @@ - + {{$t('mine.text10')}} @@ -238,19 +238,22 @@ } }, copy(val = ''){ - const textArea = document.createElement('textarea'); - textArea.value = val; - document.body.appendChild(textArea); - textArea.select(); - try { - document.execCommand('copy'); - uni.showToast({ - title: this.$t('copySuccess') - }); - } catch (err) { - console.error('Could not copy text: ', err); - } - document.body.removeChild(textArea); + // #ifdef APP-PLUS + uni.setClipboardData({ + data: val, // e是你要保存的内容 + success: function () { + uni.showToast({ + title:this.$t('copySuccess'), + icon:'none' + }) + } + }) + // #endif + // #ifdef H5 + this.$copyText(val).then(res => { + uni.showToast({title: this.$t('copySuccess'), icon: 'none'}); + }); + // #endif }, } } diff --git a/pages/mine/login.vue b/pages/mine/login.vue index 95c1e91..1147c13 100644 --- a/pages/mine/login.vue +++ b/pages/mine/login.vue @@ -21,7 +21,7 @@ {{$t('login.text6')}} - + {{$t('login.text7')}} {{$t('login.text8')}} @@ -77,6 +77,7 @@ }) }, login(){ + this.$refs.loginModel.validate().then(res=>{ if (!this.$base.mailRegular.test(this.loginModel.username)) { uni.showToast({title: this.$t('setPasswork.text13'), icon:'error'}); diff --git a/pages/mine/notice.vue b/pages/mine/notice.vue index 9a42051..f49029d 100644 --- a/pages/mine/notice.vue +++ b/pages/mine/notice.vue @@ -38,6 +38,7 @@ list: [], page: 1, limit: 10, + lastPage: 1, }; }, computed: { @@ -62,7 +63,8 @@ if(res.code == 0){ res.data.data.forEach(item => { this.list.push(item); - }) + }); + this.lastPage = res.data.last_page; } }); }, @@ -112,22 +114,10 @@ }, //页面上拉触底 onReachBottom() { - this.page = this.page + 1; - let data = { - category_id: 10, - page: this.page, - limit: this.limit, - lang: this.$i18n.locale + if(this.page { - if(res.code == 0){ - res.data.data.forEach(item => { - this.list.push(item); - }) - } - }).catch(err => { - this.page = this.page - 1; - }); }, //用户点击分享 onShareAppMessage(e) { diff --git a/pages/mine/upgrade.vue b/pages/mine/upgrade.vue index a8ad630..481cbc6 100644 --- a/pages/mine/upgrade.vue +++ b/pages/mine/upgrade.vue @@ -106,7 +106,7 @@ methods: { ...mapMutations(['setUserInfo']), change(id){ - if(tihs.rid > id){ + if(this.rid > id){ return; } this.role_id = id; diff --git a/pages/promotion/index.vue b/pages/promotion/index.vue index ce8df96..35187b6 100644 --- a/pages/promotion/index.vue +++ b/pages/promotion/index.vue @@ -56,6 +56,7 @@ ID:{{item.id}}
{{$t('promotion.text9')}}: {{item.created_at}}
+ {{$t('promotion.text12')}}: {{item.role_id<2 ? $t('promotion.text13') : (item.role_id==2 ? $t('promotion.text15') : $t('promotion.text14'))}}
{{$t('promotion.text10')}}: {{parseFloat(item.performance_large).toFixed(4)}}
{{$t('promotion.text11')}}: {{item.total_count}}
@@ -195,19 +196,22 @@ }); }, copy(val = ''){ - const textArea = document.createElement('textarea'); - textArea.value = val; - document.body.appendChild(textArea); - textArea.select(); - try { - document.execCommand('copy'); - uni.showToast({ - title: this.$t('copySuccess') - }); - } catch (err) { - console.error('Could not copy text: ', err); - } - document.body.removeChild(textArea); + // #ifdef APP-PLUS + uni.setClipboardData({ + data: val, // e是你要保存的内容 + success: function () { + uni.showToast({ + title:this.$t('copySuccess'), + icon:'none' + }) + } + }) + // #endif + // #ifdef H5 + this.$copyText(val).then(res => { + uni.showToast({title: this.$t('copySuccess'), icon: 'none'}); + }); + // #endif }, } } diff --git a/pages/promotion/invite.vue b/pages/promotion/invite.vue index 9a928c1..9b27d3e 100644 --- a/pages/promotion/invite.vue +++ b/pages/promotion/invite.vue @@ -1,7 +1,7 @@
@@ -142,9 +144,26 @@ uni.showLoading({ title: this.$t('loading') }); - if(e.id != typeof(undefined) && e.id != undefined){ + if(e.id){ this.isActive = e.id; this.index = e.id; + switch(this.isActive.toString()){ + case '0': + this.select.type = ''; + break; + case '1': + this.select.type = '99999'; + break; + case '2': + this.select.type = '100'; + break; + case '3': + this.select.type = '200'; + break; + case '4': + this.select.type = '300'; + break; + } }; this.$http.get('/api/common/init?lang='+this.$i18n.locale).then(res => { this.init = res.data; diff --git a/pages/wallet/index.vue b/pages/wallet/index.vue index 364a43f..29edc26 100644 --- a/pages/wallet/index.vue +++ b/pages/wallet/index.vue @@ -44,9 +44,9 @@
{{item.type}}{{item.created_at.slice(0, 19)}} - + {{parseFloat(item.amount).toFixed(2)}} USDT - After:{{parseFloat(item.after).toFixed(2)}} + {{$t('wallet.text6')}}:{{parseFloat(item.after).toFixed(4)}} diff --git a/pages/wallet/recharge.vue b/pages/wallet/recharge.vue index 99dc2e7..b361a91 100644 --- a/pages/wallet/recharge.vue +++ b/pages/wallet/recharge.vue @@ -205,26 +205,42 @@ this.qrcode = res.data.order.address; this.icon = this.rechargeModel.network == 'TRC-20' ? '/static/images/s1.png' : '/static/images/s2.png' }else{ - uni.showToast({ - title: res.msg - }) + if(this.$i18n.locale == 'zh'){ + console.log(res.msg) + if(res.msg.indexOf('limit of uncompleted orders') > 0){ + uni.showToast({ + title: '订单已达上限,请完成该订单或者15分钟后再试' + }) + }else{ + uni.showToast({ + title: res.msg + }) + } + }else{ + uni.showToast({ + title: res.msg + }) + } } }); }, copy(val = ''){ - const textArea = document.createElement('textarea'); - textArea.value = val; - document.body.appendChild(textArea); - textArea.select(); - try { - document.execCommand('copy'); - uni.showToast({ - title: this.$t('copySuccess') - }); - } catch (err) { - console.error('Could not copy text: ', err); - } - document.body.removeChild(textArea); + // #ifdef APP-PLUS + uni.setClipboardData({ + data: val, // e是你要保存的内容 + success: function () { + uni.showToast({ + title:this.$t('copySuccess'), + icon:'none' + }) + } + }) + // #endif + // #ifdef H5 + this.$copyText(val).then(res => { + uni.showToast({title: this.$t('copySuccess'), icon: 'none'}); + }); + // #endif }, }, //页面隐藏 diff --git a/plugins/APPUpdate/index.js b/plugins/APPUpdate/index.js index a075ef0..e288ff1 100644 --- a/plugins/APPUpdate/index.js +++ b/plugins/APPUpdate/index.js @@ -4,7 +4,7 @@ // 请求配置说明:https://ext.dcloud.net.cn/plugin?id=822 import $http from '@/config/requestConfig'; /**** 结束 *****/ - +const lang = uni.getStorageSync('locale') || 'en'; const platform = uni.getSystemInfoSync().platform; // 主颜色 const $mainColor = "FF5B78"; @@ -37,9 +37,7 @@ export const getServerNo = function(version,isPrompt = false, callback) { */ /****************以下是示例*******************/ // 可以用自己项目的请求方法 - $http.get("api/common/v1/app_version", httpData,{ - isPrompt: isPrompt - }).then(res => { + $http.get("/api/common/init").then(res => { /* res的数据说明 * | 参数名称 | 一定返回 | 类型 | 描述 * | -------------|--------- | --------- | ------------- | @@ -49,8 +47,16 @@ export const getServerNo = function(version,isPrompt = false, callback) { * | forceUpdate | y | boolean | 是否强制更新 | * | downloadUrl | y | String | 版本下载链接(IOS安装包更新请放跳转store应用商店链接,安卓apk和wgt文件放文件下载链接) | */ - if (res && res.downloadUrl) { - callback && callback(res); + if (res && res.data.client_download_url) { + if(parseInt(version) < parseInt(res.data.client_version)){ + callback && callback({ + versionCode: parseInt(res.data.client_version), + versionName: res.data.soft_version, + versionInfo: "", + forceUpdate: true, + downloadUrl: res.data.client_download_url, + }); + } } else if (isPrompt) { uni.showToast({ title: "暂无新版本", @@ -78,23 +84,23 @@ export const getDownload = function(data) { if (status == 200) { res.change({ progressValue: 100, - progressTip:"正在安装文件...", + progressTip: lang=='en' ? 'installing...' : "正在安装文件...", progress: true, buttonNum: 0 }); plus.runtime.install(download.filename, {}, function() { res.change({ - contentText: "应用资源更新完成!", + contentText: lang=='en' ? 'Application resource update completed' : "应用资源更新完成!", buttonNum: 1, progress: false }); }, function(e) { res.cancel(); - plus.nativeUI.alert("安装文件失败[" + e.code + "]:" + e.message); + plus.nativeUI.alert(lang=='en' ? 'Installation file failed[' + e.code + ']' + e.message : "安装文件失败[" + e.code + "]:" + e.message); }); } else { res.change({ - contentText: "文件下载失败...", + contentText: lang=='en' ? 'File download failed' : "文件下载失败...", buttonNum: 1, progress: false }); @@ -106,14 +112,14 @@ export const getDownload = function(data) { case 1: // 开始 res.change({ progressValue:0, - progressTip:"准备下载...", + progressTip: lang=='en' ? 'Ready to download...' : "准备下载...", progress: true }); break; case 2: // 已连接到服务器 res.change({ progressValue:0, - progressTip:"开始下载...", + progressTip: lang=='en' ? 'Start downloading...' : "开始下载...", progress: true }); break; @@ -123,7 +129,7 @@ export const getDownload = function(data) { lastProgressValue = progress; res.change({ progressValue:progress, - progressTip: "已下载" + progress + "%", + progressTip: lang=='en' ? "Downloaded" + progress + "%" : "已下载" + progress + "%", progress: true }); } @@ -135,7 +141,7 @@ export const getDownload = function(data) { // 取消下载 dtask && dtask.abort(); uni.showToast({ - title: "已取消下载", + title: lang=='en' ? 'Download cancelled' : "已取消下载", icon:"none" }); }, @@ -275,7 +281,7 @@ function updatePopup(data, callback) { { tag: 'font', id: 'title', - text: "发现新版本" + data.versionName, + text: lang=='en' ? "Discover a new version" + data.versionName : "发现新版本" + data.versionName, textStyles: { size: '18px', color: "#333", @@ -358,7 +364,7 @@ function updatePopup(data, callback) { popupViewContentList.push({ tag: 'font', id: 'cancelText', - text: "暂不升级", + text: lang=='en' ? 'Not upgrading temporarily' : "暂不升级", textStyles: { size: '14px', color: "#666", @@ -375,7 +381,7 @@ function updatePopup(data, callback) { popupViewContentList.push({ tag: 'font', id: 'confirmText', - text: "立即升级", + text: lang=='en' ? 'upgrade now' : "立即升级", textStyles: { size: '14px', color: "#FFF", @@ -429,8 +435,8 @@ function downloadPopupDrawing(data){ const viewContentWidth = popupViewWidth - (viewContentPadding * 2); // 弹窗容器高度 let popupViewHeight = viewContentPadding * 3 + 60; - let progressTip = data.progressTip || "准备下载..."; - let contentText = data.contentText || "正在为您更新,请耐心等待"; + let progressTip = data.progressTip || lang=='en' ? 'Ready to download' :"准备下载..."; + let contentText = data.contentText || lang=='en' ? 'We are updating for you, please be patient' :"正在为您更新,请耐心等待"; let elementList = [ { tag: 'rect', //背景色 @@ -539,7 +545,7 @@ function downloadPopupDrawing(data){ { tag: 'font', id: 'cancelText', - text: "取消下载", + text: lang=='en' ? 'Cancel Download' :"取消下载", textStyles: { size: '14px', color: "#666", @@ -556,7 +562,7 @@ function downloadPopupDrawing(data){ { tag: 'font', id: 'confirmText', - text: "后台下载", + text: lang=='en' ? 'Backend download' :"后台下载", textStyles: { size: '14px', color: "#FFF", @@ -591,7 +597,7 @@ function downloadPopupDrawing(data){ { tag: 'font', id: 'confirmText', - text: "关闭", + text: lang=='en' ? 'close' :"关闭", textStyles: { size: '14px', color: "#FFF", diff --git a/static/im/mattermost.js b/static/im/mattermost.js index 1aaa7ba..23f4e78 100644 --- a/static/im/mattermost.js +++ b/static/im/mattermost.js @@ -22,7 +22,7 @@ class MattermostClient { this.reconnectTimer = null; // 心跳相关 - this.heartbeatInterval = 30000; // 30秒 + this.heartbeatInterval = 10000; // 30秒 this.heartbeatTimer = null; this.lastHeartbeatResponse = Date.now(); diff --git a/static/images/s9.png b/static/images/s9.png new file mode 100644 index 0000000000000000000000000000000000000000..f67c59907d06c4b6cd85f56be86451e5f056955a GIT binary patch literal 16066 zcmV;zK0U#SP)PyA07*naRCr$PT?L$7#r6K?%JX%NY&Py8L?B3^fj}Wduu`;GOQ95LkwQyLu|f?g zkRUBB8oWSAAVmVfAw&oeciqjpJiYhM{5doC?!H|jt2E``o8RWyT$^vsIp2|)%kaPL zTipZfTYY!`yE*(1;BWaL_#eRk1Nd9s1G~Dti5mjy>y0+vKEnQQ?t%Z`5`13W1f=X! zz}Zkh^aT^e0Lz5nW;3WPsWDV>j%}L8Hgaem!tg(XM?>5G8-V|R2Jj6U&b;gx2zCs%0sZX<_!JR@ui^?g>=ubiJMMT?fsXk% zWg|C3lepdVViY$%6$6Y`FcR3BRsoHjiO2I^-{qCvG2DN;2$>@p)p- zwGRU<7*1H*AF1d#Xkt7BCWBie!C2fd%sSK18Vy~GMtoY-2t_KwnW37V+5U#y5FA5i z0uIl5<%`s``WP?RCCCo&yJLd5{@h5Lg>0_?OHN13Ν2<;-sLfxEHcz6J2)HGXK( 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 literal 0 HcmV?d00001