| @ -0,0 +1,13 @@ | |||
| # 默认忽略的文件 | |||
| /shelf/ | |||
| /workspace.xml | |||
| # 基于编辑器的 HTTP 客户端请求 | |||
| /httpRequests/ | |||
| # Datasource local storage ignored files | |||
| /dataSources/ | |||
| /dataSources.local.xml | |||
| .idea | |||
| package-lock.json | |||
| node_modules/ | |||
| unpackage/ | |||
| pages/index/index.vue | |||
| @ -0,0 +1,16 @@ | |||
| { // launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/ | |||
| // launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数 | |||
| "version": "0.0", | |||
| "configurations": [{ | |||
| "default" : | |||
| { | |||
| "launchtype" : "local" | |||
| }, | |||
| "mp-weixin" : | |||
| { | |||
| "launchtype" : "local" | |||
| }, | |||
| "type" : "uniCloud" | |||
| } | |||
| ] | |||
| } | |||
| @ -0,0 +1,56 @@ | |||
| <script> | |||
| export default { | |||
| onLaunch: function() { | |||
| if(!uni.getStorageSync('language')){ | |||
| this.$i18n.locale = 'en' | |||
| //#ifdef H5 | |||
| this.$router.go(0); | |||
| //#endif | |||
| //#ifdef APP-PLUS | |||
| //#endif | |||
| uni.setStorage({ | |||
| key: 'language', | |||
| data: 'en' | |||
| }) | |||
| uni.setLocale('en') | |||
| } | |||
| uni.$resMessage = this.$t('message') | |||
| }, | |||
| onShow: function() { | |||
| }, | |||
| onHide: function() { | |||
| } | |||
| } | |||
| </script> | |||
| <style lang="scss"> | |||
| /*每个页面公共css */ | |||
| @import '@/uni_modules/uview-ui/theme.scss'; | |||
| body{ | |||
| // background-color: #000; | |||
| } | |||
| uni-toast { | |||
| z-index: 100000000; | |||
| } | |||
| .u-modal{ | |||
| // background-color: #000; | |||
| } | |||
| .u-modal__title{ | |||
| color: #fff !important; | |||
| } | |||
| @media screen and (min-width: 960px) { | |||
| .bx{ //版心 | |||
| // max-width: 960px; | |||
| max-width: 375px; | |||
| // max-width: 765px; | |||
| margin: 0px auto; | |||
| } | |||
| } | |||
| </style> | |||
| @ -0,0 +1,36 @@ | |||
| # mobile-shop-uniapp | |||
| #### Description | |||
| {**When you're done, you can delete the content in this README and update the file with details for others getting started with your repository**} | |||
| #### Software Architecture | |||
| Software architecture description | |||
| #### Installation | |||
| 1. xxxx | |||
| 2. xxxx | |||
| 3. xxxx | |||
| #### Instructions | |||
| 1. xxxx | |||
| 2. xxxx | |||
| 3. xxxx | |||
| #### Contribution | |||
| 1. Fork the repository | |||
| 2. Create Feat_xxx branch | |||
| 3. Commit your code | |||
| 4. Create Pull Request | |||
| #### Gitee Feature | |||
| 1. You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md | |||
| 2. Gitee blog [blog.gitee.com](https://blog.gitee.com) | |||
| 3. Explore open source project [https://gitee.com/explore](https://gitee.com/explore) | |||
| 4. The most valuable open source project [GVP](https://gitee.com/gvp) | |||
| 5. The manual of Gitee [https://gitee.com/help](https://gitee.com/help) | |||
| 6. The most popular members [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) | |||
| @ -0,0 +1,39 @@ | |||
| # mobile-shop-uniapp | |||
| #### 介绍 | |||
| {**以下是 Gitee 平台说明,您可以替换此简介** | |||
| Gitee 是 OSCHINA 推出的基于 Git 的代码托管平台(同时支持 SVN)。专为开发者提供稳定、高效、安全的云端软件开发协作平台 | |||
| 无论是个人、团队、或是企业,都能够用 Gitee 实现代码托管、项目管理、协作开发。企业项目请看 [https://gitee.com/enterprises](https://gitee.com/enterprises)} | |||
| #### 软件架构 | |||
| 软件架构说明 | |||
| #### 安装教程 | |||
| 1. xxxx | |||
| 2. xxxx | |||
| 3. xxxx | |||
| #### 使用说明 | |||
| 1. xxxx | |||
| 2. xxxx | |||
| 3. xxxx | |||
| #### 参与贡献 | |||
| 1. Fork 本仓库 | |||
| 2. 新建 Feat_xxx 分支 | |||
| 3. 提交代码 | |||
| 4. 新建 Pull Request | |||
| #### 特技 | |||
| 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md | |||
| 2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) | |||
| 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 | |||
| 4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 | |||
| 5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) | |||
| 6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) | |||
| @ -0,0 +1,55 @@ | |||
| <template> | |||
| <view class="navbar bx"> | |||
| <div class="leftClick" | |||
| v-if="leftClick" | |||
| @click="leftClick();$play()"> | |||
| <uni-icons color="#B0C73B" type="left" size="30rpx"></uni-icons> | |||
| </div> | |||
| <div>{{ title }}</div> | |||
| </view> | |||
| </template> | |||
| <script> | |||
| export default { | |||
| name:"m-navbar", | |||
| props : ['leftClick', 'title'], | |||
| data() { | |||
| return { | |||
| }; | |||
| }, | |||
| methods : { | |||
| } | |||
| } | |||
| </script> | |||
| <style scoped lang="scss"> | |||
| .navbar{ | |||
| position: sticky; | |||
| top: 0; | |||
| width: 100%; | |||
| height: 90rpx; | |||
| // background: linear-gradient(to right, #4899a6, #6fc6ad); | |||
| background: black; | |||
| border-bottom: 1px solid #ccc; | |||
| display: flex; | |||
| justify-content: center; | |||
| align-items: center; | |||
| color: #fff; | |||
| font-size: 26rpx; | |||
| z-index: 9999; | |||
| .leftClick{ | |||
| position: absolute; | |||
| left: 0px; | |||
| top: 0; | |||
| width: 80rpx; | |||
| height: 100%; | |||
| display: flex; | |||
| justify-content: center; | |||
| align-items: center; | |||
| } | |||
| } | |||
| .navbar-b{ | |||
| height: 90rpx; | |||
| } | |||
| </style> | |||
| @ -0,0 +1,134 @@ | |||
| <template> | |||
| <view class="list"> | |||
| <view | |||
| :class="{item : true, active : select == index}" | |||
| @click="toPath(item, index)" | |||
| v-for="(item, index) in list"> | |||
| <view class="icon"> | |||
| <image :src="select == index ? item.selectedIconPath : item.iconPath" class="icon-image" mode=""></image> | |||
| </view> | |||
| <view class="title"> | |||
| {{ $t(item.title) }} | |||
| </view> | |||
| </view> | |||
| </view> | |||
| </template> | |||
| <!-- "tabBar": { | |||
| "backgroundColor": "white", | |||
| "selectedColor": "#cd0000", | |||
| "list": [ | |||
| { | |||
| "selectedIconPath": "/static/tabbar/2.png", | |||
| "iconPath": "/static/tabbar/1.png", | |||
| "pagePath": "pages/home/home", | |||
| "text": "%tabbar.title.1%" | |||
| },{ | |||
| "selectedIconPath": "/static/tabbar/4.png", | |||
| "iconPath": "/static/tabbar/3.png", | |||
| "pagePath": "pages/cart/cart", | |||
| "text": "%tabbar.title.2%" | |||
| },{ | |||
| "selectedIconPath": "/static/tabbar/6.png", | |||
| "iconPath": "/static/tabbar/5.png", | |||
| "pagePath": "pages/order/order", | |||
| "text": "%tabbar.title.3%" | |||
| } | |||
| ] | |||
| } --> | |||
| <script> | |||
| export default { | |||
| props : ['select'], | |||
| data() { | |||
| return { | |||
| "list": [ | |||
| { | |||
| "selectedIconPath": "/static/tabbar/2.png", | |||
| "iconPath": "/static/tabbar/1.png", | |||
| "pagePath": "/pages/home/home", | |||
| "title": "tabbar.title.1" | |||
| },{ | |||
| "selectedIconPath": "/static/tabbar/4.png", | |||
| "iconPath": "/static/tabbar/3.png", | |||
| "pagePath": "/pages/prizeDraw/prizeDraw", | |||
| "title": "tabbar.title.2" | |||
| },{ | |||
| "selectedIconPath": "/static/tabbar/6.png", | |||
| "iconPath": "/static/tabbar/5.png", | |||
| "pagePath": "/pages/order/order", | |||
| "title": "tabbar.title.3" | |||
| } | |||
| ] | |||
| } | |||
| }, | |||
| methods: { | |||
| toPath(item, index){ | |||
| if(index == this.select){ | |||
| return | |||
| } | |||
| this.$play() | |||
| uni.redirectTo({ | |||
| url: item.pagePath | |||
| }) | |||
| }, | |||
| } | |||
| } | |||
| </script> | |||
| <style scoped lang="scss"> | |||
| .list{ | |||
| position: fixed; | |||
| width: 100vw; | |||
| // background-color: #aec438; | |||
| background-color: #fff; | |||
| display: flex; | |||
| justify-content: center; | |||
| align-items: center; | |||
| height: 120rpx; | |||
| z-index: 999; | |||
| font-size: 20rpx; | |||
| bottom: 0; | |||
| left: 0; | |||
| line-height: 50rpx; | |||
| color: #000; | |||
| .item:nth-child(2){ | |||
| .icon{ | |||
| .icon-image{ | |||
| width: 95rpx; | |||
| height: 95rpx; | |||
| margin-top: -55rpx; | |||
| } | |||
| } | |||
| } | |||
| .item{ | |||
| flex: 1; | |||
| display: flex; | |||
| flex-direction: column; | |||
| justify-content: center; | |||
| align-items: center; | |||
| .icon{ | |||
| width: 100%; | |||
| height: 50%; | |||
| display: flex; | |||
| justify-content: center; | |||
| align-items: center; | |||
| .icon-image{ | |||
| width: 40rpx; | |||
| height: 40rpx; | |||
| } | |||
| } | |||
| .icon-image{ | |||
| width: 100%; | |||
| height: 50%; | |||
| } | |||
| .title{ | |||
| overflow:hidden; | |||
| white-space: nowrap; | |||
| text-overflow: ellipsis; | |||
| -o-text-overflow:ellipsis; | |||
| } | |||
| } | |||
| } | |||
| .active{ | |||
| color: #fff !important; | |||
| } | |||
| </style> | |||
| @ -0,0 +1,458 @@ | |||
| <template> | |||
| <u-popup :show="show" mode="left" width="70%" bgColor="#000" @close="$emit('close')" @open="open"> | |||
| <view style="justify-content: center;display: flex;width: 600rpx;" v-if="loading"> | |||
| <u-loading-icon | |||
| mode="semicircle" | |||
| size="30"></u-loading-icon> | |||
| </view> | |||
| <view class="center" v-if="!loading"> | |||
| <view class="line" style="margin-top: 30rpx; | |||
| position: relative;"> | |||
| <view style="position: absolute;left: 20rpx;" | |||
| @click="$emit('close')"> | |||
| x | |||
| </view> | |||
| <view class=""> | |||
| <img src="/static/center/20.png" width="120rpx" /> | |||
| </view> | |||
| </view> | |||
| <view class="line"> | |||
| <img src="/static/center/5.png" width="80rpx" /> | |||
| </view> | |||
| <view style="font-size: 22rpx;font-weight: bold;" class="line">{{ userInfo.account }}</view> | |||
| <view class="line"> | |||
| <view style="background-color: #6c7a25;padding: 5rpx 20rpx;"> | |||
| {{ $t('page.center.invtantion_code') }}:{{ userInfo.invitationCode }} | |||
| </view> | |||
| <view style="margin-left: 20rpx;" @click="copy(userInfo.invitationCode)"> | |||
| <img src="/static/center/2.png" width="23rpx" /> | |||
| </view> | |||
| </view> | |||
| <view class="line"> | |||
| <view style="color: #afc056;padding: 0 10rpx;font-size: 22rpx;font-weight: 600;"> | |||
| {{ $t('page.center.cradibiliy_value') }}: | |||
| </view> | |||
| <view style="flex: 1;padding-right: 20rpx;"> | |||
| <u-line-progress | |||
| :percentage="userInfo.contribution" | |||
| activeColor="#afc638" height="16"></u-line-progress> | |||
| </view> | |||
| <!-- <view style="flex: 1;"> | |||
| <view style="background-color: #afc056; | |||
| text-align:center;border-radius: 20rpx; | |||
| margin-right: 20rpx; | |||
| ">{{ userInfo.contribution }}%</view> | |||
| </view> --> | |||
| </view> | |||
| <view class="line"> | |||
| <view class="box"> | |||
| <view style="color: #afc056;font-weight: 900; | |||
| display: flex;justify-content: space-between;font-size: 28rpx;"> | |||
| <view class=""> | |||
| {{ $t('page.center.account_balance') }} | |||
| </view> | |||
| <view class=""> | |||
| USDT {{ userInfo.belece }} | |||
| </view> | |||
| </view> | |||
| <view style="font-size: 22rpx;margin-top: 20rpx;"> | |||
| {{ $t('page.center.account_balance_info') }} | |||
| </view> | |||
| </view> | |||
| </view> | |||
| <view class="line"> | |||
| <view class="box"> | |||
| <view style="color: #afc056;font-weight: 900; | |||
| display: flex;justify-content: space-between;font-size: 28rpx;"> | |||
| <view class=""> | |||
| {{ $t('page.center.wallet_amount') }} | |||
| </view> | |||
| <view class=""> | |||
| USDT {{ userInfo.money }} | |||
| </view> | |||
| </view> | |||
| </view> | |||
| </view> | |||
| <!-- 充值 --> | |||
| <u-cell @click="toPurse" color="#fff" isLink> | |||
| <view slot="icon"> | |||
| <img src="/static/center/6.png" width="23rpx" /> | |||
| </view> | |||
| <view slot="title" style="color: #eee;padding: 20rpx 0;"> | |||
| {{ $t('page.center.deposit') }} | |||
| </view> | |||
| </u-cell> | |||
| <!-- 提现 --> | |||
| <u-cell @click="toWithdraw" color="#fff" isLink> | |||
| <view slot="icon"> | |||
| <img src="/static/center/7.png" width="23rpx" /> | |||
| </view> | |||
| <view slot="title" style="color: #eee;padding: 20rpx 0;"> | |||
| {{ $t('page.center.withdraw') }} | |||
| </view> | |||
| </u-cell> | |||
| <!-- 用户信息 --> | |||
| <u-cell @click="toPersonalInfo" color="#fff" isLink> | |||
| <view slot="icon"> | |||
| <img src="/static/center/8.png" width="23rpx" /> | |||
| </view> | |||
| <view slot="title" style="color: #eee;padding: 20rpx 0;"> | |||
| {{ $t('page.center.personal_info') }} | |||
| </view> | |||
| </u-cell> | |||
| <!-- 交易记录 --> | |||
| <u-cell @click="toRunningWater" color="#fff" isLink> | |||
| <view slot="icon"> | |||
| <img src="/static/center/9.png" width="23rpx" /> | |||
| </view> | |||
| <view slot="title" style="color: #eee;padding: 20rpx 0;"> | |||
| {{ $t('page.center.Transaction') }} | |||
| </view> | |||
| </u-cell> | |||
| <!-- 提现地址 --> | |||
| <u-cell @click="revealAddress" color="#fff" isLink> | |||
| <view slot="icon"> | |||
| <img src="/static/center/10.png" width="23rpx" /> | |||
| </view> | |||
| <view slot="title" style="color: #eee;padding: 20rpx 0;"> | |||
| {{ $t('page.center.wallet') }} | |||
| </view> | |||
| </u-cell> | |||
| <!-- 粉丝列表 --> | |||
| <u-cell @click="toInvitationList" color="#fff" isLink> | |||
| <view slot="icon"> | |||
| <img src="/static/center/fans.png" width="23rpx" /> | |||
| </view> | |||
| <view slot="title" style="color: #eee;padding: 20rpx 0;"> | |||
| {{ $t('page.center.fanList') }} | |||
| </view> | |||
| </u-cell> | |||
| <!-- 中奖记录 --> | |||
| <u-cell @click="toWinningRecord" color="#fff" isLink> | |||
| <view slot="icon"> | |||
| <img src="/static/center/winning-record.png" width="23rpx" /> | |||
| </view> | |||
| <view slot="title" style="color: #eee;padding: 20rpx 0;"> | |||
| {{ $t('page.center.winningRecord') }} | |||
| </view> | |||
| </u-cell> | |||
| <!-- 语言 --> | |||
| <u-cell @click="showLanguage = true;$play()" color="#fff" isLink> | |||
| <view slot="icon"> | |||
| <img src="/static/center/11.png" width="23rpx" /> | |||
| </view> | |||
| <view slot="title" style="color: #eee;padding: 20rpx 0;"> | |||
| {{ $t('page.center.language') }} | |||
| </view> | |||
| </u-cell> | |||
| <!-- 客服 --> | |||
| <u-cell @click="revealServiceList" color="#fff" isLink> | |||
| <view slot="icon"> | |||
| <img src="/static/center/12.png" width="23rpx" /> | |||
| </view> | |||
| <view slot="title" style="color: #eee;padding: 20rpx 0;"> | |||
| {{ $t('page.center.customer_serivce') }} | |||
| </view> | |||
| </u-cell> | |||
| <!-- 登录记录 --> | |||
| <u-cell @click="toLoginRecord" color="#fff" isLink> | |||
| <view slot="icon"> | |||
| <img src="/static/center/login.png" width="23rpx" /> | |||
| </view> | |||
| <view slot="title" style="color: #eee;padding: 20rpx 0;"> | |||
| {{ $t('page.center.loginRecord') }} | |||
| </view> | |||
| </u-cell> | |||
| <!-- 退出登录 --> | |||
| <u-cell @click="logout" color="#fff" isLink> | |||
| <view slot="icon"> | |||
| <img src="/static/center/13.png" width="23rpx" /> | |||
| </view> | |||
| <view slot="title" style="color: #eee;padding: 20rpx 0;"> | |||
| {{ $t('page.center.logout') }} | |||
| </view> | |||
| </u-cell> | |||
| </view> | |||
| <!-- 填写地址弹框 --> | |||
| <u-popup :show="showAddress" mode="center" bgColor="black" | |||
| @close="showAddress=false;$play()"> | |||
| <view class="address-content"> | |||
| <view class="address-top"> | |||
| <view class="title">{{ $t('page.center.Tips') }}</view> | |||
| <uni-icons @click="showAddress=false;$play()" | |||
| class="close-icon" | |||
| color="#B0C73B" type="close" | |||
| size="40rpx"></uni-icons> | |||
| </view> | |||
| <view class="address-detail"> | |||
| <view class="title">{{ $t('page.center.Address') }}:</view> | |||
| <textarea v-model="moneyAddress" | |||
| :placeholder="$t('page.center.type-address')"></textarea> | |||
| </view> | |||
| <view @click="editMoneyAddress" | |||
| class="save">{{ $t('page.center.save') }}</view> | |||
| </view> | |||
| </u-popup> | |||
| <!-- 选择语言弹框 --> | |||
| <changeLanguage :show.sync="showLanguage" @close="closeLanguage"></changeLanguage> | |||
| <!-- 客服列表 --> | |||
| <serviceList :show="showService" :serverList="serverList" @close="closeServiceList"></serviceList> | |||
| </u-popup> | |||
| </template> | |||
| <script> | |||
| import changeLanguage from '@/components/changeLanguage/changeLanguage.vue' | |||
| import serviceList from '@/components/serviceList/serviceList.vue' | |||
| export default { | |||
| name: "center", | |||
| components : { changeLanguage , serviceList }, | |||
| data() { | |||
| return { | |||
| list: [{ | |||
| }], | |||
| showAddress: false, | |||
| showLanguage : false, | |||
| showService : false, | |||
| serverList : [], | |||
| moneyAddress : '', | |||
| loading : false, | |||
| }; | |||
| }, | |||
| props : { | |||
| userInfo : { | |||
| type : Object, | |||
| default : function() { | |||
| return {} | |||
| } | |||
| }, | |||
| show : { | |||
| type : Boolean, | |||
| default : false | |||
| } | |||
| }, | |||
| methods: { | |||
| open() { | |||
| this.forgetPass() | |||
| this.moneyAddress=this.userInfo.moneyAddress | |||
| }, | |||
| //显示填写提现地址弹框 | |||
| revealAddress() { | |||
| this.$play() | |||
| this.showAddress = true; | |||
| }, | |||
| //关闭语言选项 | |||
| closeLanguage(){ | |||
| this.$play() | |||
| this.showLanguage = false; | |||
| }, | |||
| //跳转充值页面 | |||
| toPurse(){ | |||
| this.$play() | |||
| uni.navigateTo({ | |||
| url: '/pages/purse/purse' | |||
| }) | |||
| }, | |||
| //跳转提现页面 | |||
| toWithdraw(){ | |||
| this.$play() | |||
| uni.navigateTo({ | |||
| url: '/pages/withdraw/withdraw' | |||
| }) | |||
| }, | |||
| //跳转用户信息 | |||
| toPersonalInfo(){ | |||
| this.$play() | |||
| uni.navigateTo({ | |||
| url: '/pages/personalInfo/personalInfo' | |||
| }) | |||
| }, | |||
| //跳转流水页面 | |||
| toRunningWater(){ | |||
| this.$play() | |||
| uni.navigateTo({ | |||
| url: '/pages/runningWater/runningWater' | |||
| }) | |||
| }, | |||
| //显示客服列表 | |||
| revealServiceList(){ | |||
| this.$play() | |||
| this.showService = true; | |||
| }, | |||
| //关闭客服列表 | |||
| closeServiceList(){ | |||
| this.$play() | |||
| this.showService = false; | |||
| }, | |||
| //退出登录 | |||
| logout(){ | |||
| this.$play() | |||
| localStorage.removeItem('token') | |||
| uni.navigateTo({ | |||
| url: "/pages/login/login" | |||
| }) | |||
| }, | |||
| //忘记密码(获取客服列表) | |||
| forgetPass(){ | |||
| this.request('forgetPass').then(res => { | |||
| if(res.code == 200){ | |||
| this.serverList = res.result | |||
| } | |||
| }) | |||
| }, | |||
| //修改钱包地址 | |||
| editMoneyAddress(){ | |||
| this.$play() | |||
| if(this.userInfo.moneyAddress){ | |||
| return uni.showToast({ title: this.$t('page.center.cannotModified'), icon: 'none' }) | |||
| } | |||
| this.request('editMoneyAddress',{},{moneyAddress : this.moneyAddress}).then(res => { | |||
| if(res.code == 200){ | |||
| this.showAddress = false; | |||
| uni.showToast({ title: this.$t('message.15'), icon: 'none' }) | |||
| } | |||
| }) | |||
| }, | |||
| //复制内容 | |||
| copy(text){ | |||
| this.$play() | |||
| uni.setClipboardData({ | |||
| data: text, | |||
| success: () => { | |||
| uni.showToast({ | |||
| title: this.$t('success-operation'), | |||
| icon: 'none', | |||
| }) | |||
| } | |||
| }) | |||
| }, | |||
| //跳转粉丝列表 | |||
| toInvitationList(){ | |||
| this.$play() | |||
| uni.navigateTo({ | |||
| url: '/pages/invitationList/invitationList' | |||
| }) | |||
| }, | |||
| //跳转登录记录列表 | |||
| toLoginRecord(){ | |||
| this.$play() | |||
| uni.navigateTo({ | |||
| url: '/pages/loginRecord/loginRecord' | |||
| }) | |||
| }, | |||
| //跳转中奖记录 | |||
| toWinningRecord(){ | |||
| this.$play() | |||
| uni.navigateTo({ | |||
| url: '/pages/winningRecord/winningRecord' | |||
| }) | |||
| } | |||
| } | |||
| } | |||
| </script> | |||
| <style scoped lang="scss"> | |||
| .center { | |||
| width: 600rpx; | |||
| overflow: scroll; | |||
| height: 100vh; | |||
| .line { | |||
| display: flex; | |||
| justify-content: center; | |||
| align-items: center; | |||
| margin-top: 40rpx; | |||
| flex-shrink: 1; | |||
| .box { | |||
| border: 1px solid #777; | |||
| box-sizing: border-box; | |||
| width: 100%; | |||
| padding: 20rpx; | |||
| } | |||
| } | |||
| } | |||
| .address-content { | |||
| box-sizing: border-box; | |||
| border: 1px solid #ccc; | |||
| padding: 15rpx; | |||
| width: 700rpx; | |||
| .address-top { | |||
| position: relative; | |||
| display: flex; | |||
| align-items: center; | |||
| justify-content: center; | |||
| margin-top: 10rpx; | |||
| .title { | |||
| font-size: 44rpx; | |||
| color: #afc638; | |||
| font-weight: bold; | |||
| } | |||
| .close-icon { | |||
| position: absolute; | |||
| top: 50%; | |||
| right: 30rpx; | |||
| transform: translateY(-50%); | |||
| } | |||
| } | |||
| .address-detail { | |||
| .title { | |||
| color: #afc638; | |||
| margin-bottom: 20rpx; | |||
| font-size: 28rpx; | |||
| } | |||
| textarea { | |||
| border: 1px solid #afc638; | |||
| color: #afc638; | |||
| border-radius: 25rpx; | |||
| height: 150rpx; | |||
| width: 100%; | |||
| text-indent: 1em; | |||
| font-size: 28rpx; | |||
| } | |||
| } | |||
| .save{ | |||
| display: flex; | |||
| align-items: center; | |||
| justify-content: center; | |||
| background: #afc638; | |||
| height: 80rpx; | |||
| margin: 20rpx auto; | |||
| border-radius: 30rpx; | |||
| color: black; | |||
| font-size: 34rpx; | |||
| } | |||
| } | |||
| </style> | |||
| @ -0,0 +1,136 @@ | |||
| <template> | |||
| <view class="change-language"> | |||
| <!-- 选择语言弹出框 --> | |||
| <u-popup :show="show" mode="bottom" @close="$emit('close');$play()" bgColor="black"> | |||
| <view class="language-list"> | |||
| <view v-for="item in languageList" :key="item.key" class="language" :class="{ activeLanguage : currentLanguageKey === item.key}" @click="select(item)">{{ item.name }}</view> | |||
| </view> | |||
| <view class="language-btns"> | |||
| <view @click="$emit('close');$play()" class="btn">{{ $t('page.changeLanguage.cancel') }}</view> | |||
| <view @click="changeLanguage(currentLanguage)" class="btn">{{ $t('page.changeLanguage.confirm') }}</view> | |||
| </view> | |||
| </u-popup> | |||
| </view> | |||
| </template> | |||
| <script> | |||
| export default { | |||
| data(){ | |||
| return { | |||
| languageList: [ | |||
| { | |||
| name:'English', | |||
| key : "en" | |||
| }, | |||
| { | |||
| name:'español', | |||
| key : "es" | |||
| } | |||
| ], | |||
| currentLanguage : {}, | |||
| currentLanguageKey : this.$i18n.locale | |||
| } | |||
| }, | |||
| props : { | |||
| show : { | |||
| type : Boolean, | |||
| default : false | |||
| } | |||
| }, | |||
| methods : { | |||
| //选择语言 | |||
| select(item){ | |||
| this.$play() | |||
| this.currentLanguage = item; | |||
| this.currentLanguageKey = item.key | |||
| }, | |||
| //修改当前语言 | |||
| changeLanguage(res){ | |||
| this.$play() | |||
| //#ifdef H5 | |||
| this.$router.go(0); //刷新页面,不然validate.js不好国际化 | |||
| //#endif | |||
| //#ifdef APP-PLUS | |||
| uni.navigateTo({ | |||
| url: '/pages/home/home' // 要刷新的页面路径 | |||
| }); | |||
| //#endif | |||
| if(!res.key){ | |||
| return | |||
| } | |||
| this.curLanguage = res.key; | |||
| // this.$store.commit('changeLanguage', res.key.code); | |||
| uni.setStorage({ | |||
| key: 'language', | |||
| data: res.key | |||
| }) | |||
| this.$i18n.locale = res.key | |||
| uni.setLocale(res.key) //切换语言环境必须在this.$i18n.locale之后,否则app端会有意想不到的bug | |||
| this.$emit('close') | |||
| uni.$resMessage = this.$t('message') | |||
| } | |||
| } | |||
| } | |||
| </script> | |||
| <style lang="scss" scoped> | |||
| .change-language{ | |||
| .language-list{ | |||
| border: 1px solid #ccc; | |||
| width: 96%; | |||
| margin: 0rpx auto 20rpx auto; | |||
| .language{ | |||
| position: relative; | |||
| display: flex; | |||
| justify-content: center; | |||
| align-items: center; | |||
| color: #B0C73B; | |||
| height: 100rpx; | |||
| border-bottom: 1px solid #ccc; | |||
| font-size: 32rpx; | |||
| &:last-child{ | |||
| border: none; | |||
| } | |||
| } | |||
| .activeLanguage{ | |||
| &::after{ | |||
| position: absolute; | |||
| top: 50%; | |||
| right: 20rpx; | |||
| content: ""; | |||
| width: 30rpx; | |||
| height: 30rpx; | |||
| border-radius: 50%; | |||
| box-shadow: 0rpx 0rpx 30rpx #B0C73B; | |||
| background: #B0C73B; | |||
| transform: translateY(-50%); | |||
| } | |||
| } | |||
| } | |||
| .language-btns{ | |||
| display: flex; | |||
| justify-content: space-between; | |||
| flex-wrap: wrap; | |||
| color: #ffffff80; | |||
| width: 96%; | |||
| margin: 0rpx auto 20rpx auto; | |||
| .btn{ | |||
| display: flex; | |||
| align-items: center; | |||
| justify-content: center; | |||
| width: calc(50% - 15rpx); | |||
| border: 1px solid #ccc; | |||
| height: 80rpx; | |||
| } | |||
| } | |||
| } | |||
| </style> | |||
| @ -0,0 +1,88 @@ | |||
| <!-- 抽奖动画 --> | |||
| <template> | |||
| <view v-if="show" class="luckyAnimation"> | |||
| <div class="loader"></div> | |||
| </view> | |||
| </template> | |||
| <script> | |||
| export default { | |||
| data() { | |||
| return { | |||
| num : 1, | |||
| show : false | |||
| } | |||
| }, | |||
| destroyed() { | |||
| if (this.interval) { | |||
| clearInterval(this.interval); | |||
| } | |||
| }, | |||
| methods: { | |||
| start() { | |||
| this.show = true; | |||
| this.num = 1; | |||
| this.interval = setInterval(() => { | |||
| if (this.num <= 0) { | |||
| this.show = false | |||
| this.$emit('close') | |||
| clearInterval(this.interval); | |||
| } | |||
| this.num--; | |||
| }, 500) | |||
| }, | |||
| } | |||
| } | |||
| </script> | |||
| <style lang="scss" scoped> | |||
| .luckyAnimation { | |||
| position: fixed; | |||
| left: 0; | |||
| top: 0; | |||
| display: flex; | |||
| align-items: center; | |||
| justify-content: center; | |||
| height: 100vh; | |||
| width: 100%; | |||
| z-index: 200; | |||
| .loader { | |||
| height: 15px; | |||
| aspect-ratio: 4; | |||
| --_g: no-repeat radial-gradient(farthest-side, #aec438 90%, #0000); | |||
| background: | |||
| var(--_g) left, | |||
| var(--_g) right; | |||
| background-size: 25% 100%; | |||
| display: grid; | |||
| } | |||
| .loader:before, | |||
| .loader:after { | |||
| content: ""; | |||
| height: inherit; | |||
| aspect-ratio: 1; | |||
| grid-area: 1/1; | |||
| margin: auto; | |||
| border-radius: 50%; | |||
| transform-origin: -100% 50%; | |||
| background: #fff; | |||
| animation: l49 1s infinite linear; | |||
| } | |||
| .loader:after { | |||
| transform-origin: 200% 50%; | |||
| --s: -1; | |||
| animation-delay: -.5s; | |||
| } | |||
| @keyframes l49 { | |||
| 58%, | |||
| 100% { | |||
| transform: rotate(calc(var(--s, 1)*1turn)) | |||
| } | |||
| } | |||
| } | |||
| </style> | |||
| @ -0,0 +1,81 @@ | |||
| <!-- 加载动画页面 --> | |||
| <template> | |||
| <view v-if="loading" class="loading"> | |||
| <div class="loader"></div> | |||
| </view> | |||
| </template> | |||
| <script> | |||
| export default { | |||
| data() { | |||
| return { | |||
| num : 4, //默认2秒后关闭(这里处理初始页面重叠的bug,初始页面是2秒后消失,所以这里加个2) | |||
| interval : null | |||
| } | |||
| }, | |||
| created(){ | |||
| this.interval = setInterval(() => { | |||
| if(this.num <= 0){ | |||
| this.num = 4; | |||
| this.$emit('close'); | |||
| clearInterval(this.interval) | |||
| } | |||
| this.num--; | |||
| },1000) | |||
| }, | |||
| destroyed(){ | |||
| if(this.interval){ | |||
| clearInterval(this.interval) | |||
| } | |||
| }, | |||
| props : { | |||
| loading : { | |||
| type : Boolean, | |||
| default : true | |||
| } | |||
| }, | |||
| methods: { | |||
| } | |||
| } | |||
| </script> | |||
| <style lang="scss" scoped> | |||
| .loading { | |||
| display: flex; | |||
| justify-content: center; | |||
| .loader { | |||
| width: 50px; | |||
| aspect-ratio: 1; | |||
| display: grid; | |||
| } | |||
| .loader::before, | |||
| .loader::after { | |||
| content: ""; | |||
| grid-area: 1/1; | |||
| --c: no-repeat radial-gradient(farthest-side, #B0C73B 92%, #0000); | |||
| background: | |||
| var(--c) 50% 0, | |||
| var(--c) 50% 100%, | |||
| var(--c) 100% 50%, | |||
| var(--c) 0 50%; | |||
| background-size: 12px 12px; | |||
| animation: l12 1s infinite; | |||
| } | |||
| .loader::before { | |||
| margin: 4px; | |||
| filter: hue-rotate(45deg); | |||
| background-size: 8px 8px; | |||
| animation-timing-function: linear | |||
| } | |||
| @keyframes l12 { | |||
| 100% { | |||
| transform: rotate(.5turn) | |||
| } | |||
| } | |||
| } | |||
| </style> | |||
| @ -0,0 +1,57 @@ | |||
| <!-- 页面初始界面 --> | |||
| <template> | |||
| <view v-show="show" class="pageInit bx"> | |||
| <image src="@/static/loading/logo.png" mode="aspectFit"></image> | |||
| </view> | |||
| </template> | |||
| <script> | |||
| export default { | |||
| data() { | |||
| return { | |||
| show: true, | |||
| num: 1, | |||
| interval: null | |||
| } | |||
| }, | |||
| created() { | |||
| this.interval = setInterval(() => { | |||
| if (this.num <= 0) { | |||
| this.show = false; | |||
| this.num = 1; | |||
| clearInterval(this.interval); | |||
| } | |||
| this.num--; | |||
| }, 1000) | |||
| }, | |||
| destroyed() { | |||
| if (this.interval) { | |||
| clearInterval(this.interval); | |||
| } | |||
| }, | |||
| methods: { | |||
| } | |||
| } | |||
| </script> | |||
| <style lang="scss" scoped> | |||
| .pageInit{ | |||
| display: flex; | |||
| align-items: center; | |||
| justify-content: center; | |||
| position: fixed; | |||
| left: 50%; | |||
| top: 0; | |||
| width: 100%; | |||
| height: 100vh; | |||
| background: black; | |||
| margin: 0rpx auto; | |||
| z-index: 999; | |||
| transform: translateX(-50%); | |||
| image { | |||
| width: calc(750rpx / 2); | |||
| } | |||
| } | |||
| </style> | |||
| @ -0,0 +1,190 @@ | |||
| <template> | |||
| <view v-if="show" class="review"> | |||
| <view class="review-main"> | |||
| <!-- 标题 --> | |||
| <view class="review-title">{{ $t('page.review.title') }}</view> | |||
| <!-- 选项列表 --> | |||
| <view class="options"> | |||
| <u-radio-group v-model="checkedOption" placement="column"> | |||
| <view v-for="(item,index) in evaluateList" class="option"> | |||
| <view class="option-top"> | |||
| <view class="option-top-left"> | |||
| <u-radio :customStyle="{marginBottom: '8px'}" | |||
| activeColor="#aec438" :label="item.optionValue" | |||
| :name="item.optionValue" /> | |||
| </view> | |||
| <view class="option-top-right"> | |||
| <u-rate :count="5" | |||
| active-color="#EEBF72" | |||
| v-model="item.num"></u-rate> | |||
| </view> | |||
| </view> | |||
| <view class="option-content"> {{ item[type[$i18n.locale]] }}</view> | |||
| </view> | |||
| </u-radio-group> | |||
| </view> | |||
| </view> | |||
| </view> | |||
| </template> | |||
| <script> | |||
| import { play } from '@/utils/clickSound.js' | |||
| export default { | |||
| data() { | |||
| return { | |||
| checkedOption: '', | |||
| type : { | |||
| en : 'answerEnglish', | |||
| es : "answerSpanish" | |||
| }, | |||
| // "A" : "This app has been with me since lstarted hiah school and continued unti!had my child, You deserve to have it.", | |||
| // "B" : "Very easy to use,l have recommendedt to my familly and friends.", | |||
| // "C" : "This APp is very suitable for beginnerso choose.", | |||
| // "D" : "This APP interface is very good.", | |||
| // "E" : "Not bad, but not good either, barelyworth usina." | |||
| // optionList: [{ | |||
| // letter: 'A.', | |||
| // mark: 5, | |||
| // content: this.$t('page.review.A') | |||
| // }, | |||
| // { | |||
| // letter: 'B.', | |||
| // mark: 4, | |||
| // content: this.$t('page.review.B') | |||
| // }, | |||
| // { | |||
| // letter: 'C.', | |||
| // mark: 3, | |||
| // content: this.$t('page.review.C') | |||
| // }, | |||
| // { | |||
| // letter: 'D.', | |||
| // mark: 2, | |||
| // content: this.$t('page.review.D') | |||
| // }, | |||
| // { | |||
| // letter: 'E.', | |||
| // mark: 1, | |||
| // content: this.$t('page.review.E') | |||
| // } | |||
| // ], | |||
| evaluateList : [] | |||
| } | |||
| }, | |||
| props : { | |||
| show : { | |||
| type : Boolean, | |||
| default : true | |||
| }, | |||
| oid : { | |||
| } | |||
| }, | |||
| created(){ | |||
| this.getEvaluateList() | |||
| }, | |||
| methods: { | |||
| //关闭选择评论弹框 | |||
| closeReviewProp(){ | |||
| let data = {} | |||
| this.evaluateList.forEach(n => { | |||
| if(n.optionValue == this.checkedOption){ | |||
| data = n | |||
| } | |||
| }) | |||
| this.request('evaluate', {}, { | |||
| evaluateId : data.id, | |||
| id : this.oid, | |||
| num : data.num | |||
| }).then(res => { | |||
| if(res.code == 200){ | |||
| this.$emit('close', this.checkedOption) | |||
| this.checkedOption = '' | |||
| } | |||
| }) | |||
| }, | |||
| getEvaluateList(){ | |||
| this.request('getEvaluateList').then(res => { | |||
| if(res.code == 200){ | |||
| this.evaluateList = res.result | |||
| } | |||
| }) | |||
| }, | |||
| async asyncLoading() { //加载效果 | |||
| return new Promise((resolve, reject) => { | |||
| uni.showLoading({ | |||
| title: this.$t('page.review.loading') | |||
| }); | |||
| setTimeout(() => { | |||
| uni.hideLoading(); | |||
| resolve() | |||
| }, 500) | |||
| }) | |||
| }, | |||
| }, | |||
| watch : { | |||
| checkedOption : function(newVal){ | |||
| if(this.checkedOption){ | |||
| play() | |||
| this.asyncLoading().then(res => { | |||
| this.closeReviewProp() | |||
| }) | |||
| } | |||
| } | |||
| } | |||
| } | |||
| </script> | |||
| <style lang="scss" scoped> | |||
| .review { | |||
| display: flex; | |||
| align-items: center; | |||
| justify-content: center; | |||
| position: fixed; | |||
| top: 0; | |||
| left: 0; | |||
| width: 750rpx; | |||
| height: 100vh; | |||
| margin: 0rpx auto; | |||
| z-index: 99999; | |||
| background-color: #00000099; | |||
| .review-main { | |||
| background: black; | |||
| width: 600rpx; | |||
| color: white; | |||
| border-radius: 10rpx; | |||
| padding: 15rpx; | |||
| border: 1px solid #ccc; | |||
| .review-title { | |||
| font-size: 34rpx; | |||
| padding: 15rpx 0rpx; | |||
| text-align: center; | |||
| } | |||
| .options { | |||
| margin-top: 20rpx; | |||
| .option { | |||
| margin-bottom: 15rpx; | |||
| .option-top { | |||
| display: flex; | |||
| justify-content: space-between; | |||
| } | |||
| .option-content{ | |||
| color: #747474; | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| </style> | |||
| @ -0,0 +1,72 @@ | |||
| <!-- 客服列表页面 --> | |||
| <template> | |||
| <view class="service-list"> | |||
| <u-popup :show="show" mode="bottom" @close="$emit('close');$play()" bgColor="black"> | |||
| <view class="list"> | |||
| <view @click="toServer(item.url)" v-for="(item,index) in serverList" :key="index" class="server">{{ item.name }}</view> | |||
| </view> | |||
| <view @click="$emit('close');$play()" class="cancel">{{ $t('page.serviceList.cancel') }}</view> | |||
| </u-popup> | |||
| </view> | |||
| </template> | |||
| <script> | |||
| export default { | |||
| props : { | |||
| show : { | |||
| type : Boolean, | |||
| default : false | |||
| }, | |||
| serverList : { | |||
| type : Array, | |||
| default : function(){ | |||
| return [] | |||
| } | |||
| } | |||
| }, | |||
| methods : { | |||
| //跳转客服网址 | |||
| toServer(url){ | |||
| this.$play() | |||
| window.open(url) | |||
| this.$emit('close') | |||
| } | |||
| } | |||
| } | |||
| </script> | |||
| <style lang="scss" scoped> | |||
| .service-list{ | |||
| .list{ | |||
| border: 1px solid #ccc; | |||
| width: 96%; | |||
| margin: 0rpx auto 20rpx auto; | |||
| .server{ | |||
| position: relative; | |||
| display: flex; | |||
| justify-content: center; | |||
| align-items: center; | |||
| color: #ccc; | |||
| height: 100rpx; | |||
| border-bottom: 1px solid #ccc; | |||
| &:last-child{ | |||
| border: none; | |||
| } | |||
| } | |||
| } | |||
| .cancel{ | |||
| width: 96%; | |||
| margin: 0rpx auto 20rpx auto; | |||
| display: flex; | |||
| justify-content: center; | |||
| align-items: center; | |||
| color: #ffffff80; | |||
| height: 100rpx; | |||
| border: 1px solid #ccc; | |||
| } | |||
| } | |||
| </style> | |||
| @ -0,0 +1,145 @@ | |||
| <template> | |||
| <u-popup :show="show" | |||
| mode="center" | |||
| bgColor="transparent" | |||
| @close="$emit('close');$play()"> | |||
| <view class="box"> | |||
| <view class="turntable" | |||
| :style="{transform: `rotate(${360 * rotate + link}deg)`}"> | |||
| <view class="item" | |||
| :style="{transform: `translate(-50%) rotate(${(360 / 8) * index}deg)`}" | |||
| v-for="(item, index) in list"> | |||
| <view> | |||
| {{ $t(`page.turntable.${item.name}`)}} | |||
| </view> | |||
| <view style="margin-top: 20rpx;"> | |||
| USDT {{ item.money }} | |||
| </view> | |||
| </view> | |||
| </view> | |||
| <view class="z" | |||
| @click="start"> | |||
| <view class="text"> | |||
| <view style="font-size: 28rpx;font-weight: 900;"> | |||
| {{ $t(`page.turntable.go`)}} | |||
| </view> | |||
| <view style="font-size: 20rpx;line-height: 30rpx;"> | |||
| <!-- 剩余{{ info.bigNum }}次 --> | |||
| {{ $t(`page.turntable.num`, [info.bigNum])}} | |||
| </view> | |||
| </view> | |||
| </view> | |||
| </view> | |||
| </u-popup> | |||
| </template> | |||
| <script> | |||
| export default { | |||
| name:"turntable", | |||
| props : ['show', 'info'], | |||
| data() { | |||
| return { | |||
| rotate : 0, | |||
| list : [], | |||
| link : 0, | |||
| inter : null, | |||
| }; | |||
| }, | |||
| created() { | |||
| this.getTurntable() | |||
| }, | |||
| methods : { | |||
| start(){ | |||
| if(this.inter || this.info.bigNum <= 0){ | |||
| return | |||
| } | |||
| this.$play() | |||
| this.request('clickTurntable').then(res => { | |||
| if(res.code == 200){ | |||
| clearInterval(this.inter) | |||
| this.list.forEach((n,i) => { | |||
| if(n.id == res.result.id){ | |||
| this.link = -(360 / 8 * i) | |||
| } | |||
| }) | |||
| setTimeout(() => this.inter = null, 1500) | |||
| } | |||
| this.$emit('start') | |||
| }).catch(err => { | |||
| clearInterval(this.inter) | |||
| setTimeout(() => this.inter = null, 1500) | |||
| }) | |||
| this.link = 0 | |||
| this.rotate += 6 | |||
| this.inter = setInterval(() => { | |||
| this.rotate += 1 | |||
| }, 200) | |||
| }, | |||
| getTurntable(){ | |||
| this.request('getTurntableList').then(res => { | |||
| if(res.code == 200){ | |||
| this.list = res.result | |||
| } | |||
| }) | |||
| }, | |||
| async asyncLoading() { //加载效果 | |||
| return new Promise((resolve, reject) => { | |||
| uni.showLoading({ | |||
| title: this.$t('page.turntable.loading') | |||
| }); | |||
| setTimeout(() => { | |||
| uni.hideLoading(); | |||
| resolve() | |||
| }, 500) | |||
| }) | |||
| }, | |||
| } | |||
| } | |||
| </script> | |||
| <style scoped lang="scss"> | |||
| .box{ | |||
| position: relative; | |||
| .turntable{ | |||
| position: relative; | |||
| width: 700rpx; | |||
| height: 700rpx; | |||
| background-image: url(/static/drone/5db810a1868a7230.png); | |||
| background-size: 100% 100%; | |||
| transition: transform 1.5s; | |||
| .item{ | |||
| position: absolute; | |||
| left: 50%; | |||
| transform: translateX(-50%); | |||
| top: 50rpx; | |||
| transform-origin: 50% 300rpx; | |||
| text-align: center; | |||
| font-size: 22rpx; | |||
| width: 180rpx; | |||
| } | |||
| } | |||
| .z{ | |||
| position: absolute; | |||
| top: 200rpx; | |||
| left: 260rpx; | |||
| width: 180rpx; | |||
| height: 180rpx; | |||
| // background-image: url(/static/drone/68a7230.png); | |||
| background-image: url(/static/drone/230.png); | |||
| background-size: 100% 100%; | |||
| .text{ | |||
| position: absolute; | |||
| top: 90rpx; | |||
| margin-left: 10rpx; | |||
| text-align: center; | |||
| line-height: 50rpx; | |||
| width: 160rpx; | |||
| } | |||
| } | |||
| } | |||
| </style> | |||
| @ -0,0 +1,20 @@ | |||
| <!DOCTYPE html> | |||
| <html lang="en"> | |||
| <head> | |||
| <meta charset="UTF-8" /> | |||
| <script> | |||
| var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') || | |||
| CSS.supports('top: constant(a)')) | |||
| document.write( | |||
| '<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' + | |||
| (coverSupport ? ', viewport-fit=cover' : '') + '" />') | |||
| </script> | |||
| <title></title> | |||
| <!--preload-links--> | |||
| <!--app-context--> | |||
| </head> | |||
| <body> | |||
| <div id="app"><!--app-html--></div> | |||
| <script type="module" src="/main.js"></script> | |||
| </body> | |||
| </html> | |||
| @ -0,0 +1,37 @@ | |||
| let needLogin = [ | |||
| // "/pages/user/user", | |||
| ] | |||
| let list = []; | |||
| // let list = ["navigateTo", "redirectTo", "reLaunch", "switchTab"]; | |||
| list.forEach(item => { //用遍历的方式分别为,uni.navigateTo,uni.redirectTo,uni.reLaunch,uni.switchTab这4个路由方法添加拦截器 | |||
| console.log(item, 'router list item') | |||
| uni.addInterceptor(item, { | |||
| invoke(e) { // 调用前拦截 | |||
| //获取用户的token | |||
| console.log(e, 'routerjs invoke') | |||
| const token = localStorage.getItem('token') | |||
| //获取当前页面路径(即url去掉"?"和"?"后的参数) | |||
| console.log(token, 'router index token') | |||
| const url = e.url.split('?')[0] | |||
| console.log(url, 'router index url') | |||
| console.log(needLogin.includes(url)) | |||
| //判断要打开的页面是否需要验证登录 | |||
| if (needLogin.includes(url) && !token) { | |||
| uni.showToast({ | |||
| title: '该页面需要登录才能访问,请先登录', | |||
| icon: 'none' | |||
| }) | |||
| uni.navigateTo({ | |||
| url: "/pages/login/login" | |||
| }) | |||
| return false | |||
| } | |||
| return true | |||
| }, | |||
| fail(err) { // 失败回调拦截 | |||
| console.log(err); | |||
| }, | |||
| }) | |||
| }) | |||
| @ -0,0 +1,304 @@ | |||
| export default { | |||
| "language": "language", | |||
| "language.cancel": "cancel", | |||
| "page.login.title": "login", | |||
| "tabbar.title.1": "Home", | |||
| "tabbar.title.2": "STARTING", | |||
| "tabbar.title.3": "Order", | |||
| "nav.login": "Login", | |||
| "nav.register": "Register", | |||
| "nav.home": "Home", | |||
| "nav.order": "Orders", | |||
| "myToactTitle": "Tips", | |||
| "$": "$", | |||
| "toHome": "Back to home page", | |||
| "success-operation": "Operation successful", | |||
| "message": { | |||
| "1": "The account field cannot be left blank", | |||
| "2": "The password field cannot be left blank", | |||
| "3": "User does not exist", | |||
| "4": "Incorrect password", | |||
| "5": "Login successful", | |||
| "6": "The confirm password field cannot be left blank", | |||
| "7": "The payment password field cannot be left blank", | |||
| "8": "The verify payment password field cannot be left blank", | |||
| "9": "Passwords do not match", | |||
| "10": "Payment passwords do not match", | |||
| "11": "Invitation code error", | |||
| "12": "Registration successful", | |||
| "13": "The account has been disabled", | |||
| "14": "Query successful", | |||
| "15": "Operation successful", | |||
| "16": "Incorrect password", | |||
| "17": "Password cannot be empty", | |||
| "18": "Confirm password cannot be empty", | |||
| "19": "Passwords do not match", | |||
| "20": "Withdrawal amount cannot be empty", | |||
| "21": "Payment password cannot be empty", | |||
| "22": "Unfortunately, you did not win the lottery", | |||
| "23": "Today's lottery attempts have been exhausted", | |||
| "24": "Review successful", | |||
| "25": "Review identifier cannot be empty", | |||
| "26": "Review score cannot be empty", | |||
| "27": "Payment successful", | |||
| "28": "Insufficient balance", | |||
| "29": "Order created successfully", | |||
| "30": "User transactions have been disabled. Please contact customer service", | |||
| "31": "You have an unpaid order", | |||
| "32": "Mission complete. Contact customer service", | |||
| "33" : "Since your funds are large and exceed the withdrawal amount of ordinary users, please consider upgrading your VIP level!", | |||
| "34" : "Sign in today", | |||
| "35" : "Sign in successfully", | |||
| "36" : "The user amount is less than the vip limit amount, please recharge", | |||
| "37" : "The balance is insufficient to perform the task", | |||
| "500": "The system is busy! Please contact customer service", | |||
| "512": "The account is already registered", | |||
| "511": "The account or password is incorrect" | |||
| }, | |||
| page: { | |||
| "home": { | |||
| "CustomerService": "Customer Service", | |||
| "Certifcate": "Certificate", | |||
| "Deposit": "Deposit", | |||
| "Withdraw": "Withdrawal", | |||
| "equity_item_1": "Receive a set of {0} apps data tasks", | |||
| "equity_item_2": "Profit of {0}% per application", | |||
| "equity_item_3": "Activate with a {0} USDT", | |||
| "agreement_item_1": "Terms & Conditions", | |||
| "agreement_item_2": "Event", | |||
| "agreement_item_3": "FAQ", | |||
| "agreement_item_4": "About Us" | |||
| }, | |||
| "prizeDraw": { | |||
| "title_1": "Starting", | |||
| "profit": "Profit", | |||
| "title_2": "TOP APPS THIS WEEK", | |||
| "Start": "Start", | |||
| "frozen_amount": "Extra bonus", | |||
| "today_profit": "Today's Profit", | |||
| "title_3": "It will be updated daily. Only today's profits are shown here", | |||
| "title_4": "Every rating's profit will add to total assets", | |||
| "account_balance": "Account Balance", | |||
| "important_notice": "Important Notice", | |||
| "notice_item_1": "·Business Hours: 00:00:00-23:59:59", | |||
| "notice_item_2": "·For further assistance, please contact Customer Service", | |||
| "submit": "Submit", | |||
| "rating_submission": "Rating Submission", | |||
| "Total_Amount": "Total Amount", | |||
| "Creation_time": "Creation Time", | |||
| "Rating_No": "Rating No.", | |||
| "loading" : "loading..." | |||
| }, | |||
| "order": { | |||
| "records": "Records", | |||
| "Submit_New": "Submit New", | |||
| "Speedip": "Speedip", | |||
| "Total_Amount": "Total Amount", | |||
| "Profit": "Profit", | |||
| "no-Order": "No Order", | |||
| "take-stroll": "Take a Stroll", | |||
| "class_1": "ALL", | |||
| "class_2": "Unpaid", | |||
| "class_3": "Paid", | |||
| "class_4": "Rated", | |||
| "pay" : "Immediate payment", | |||
| "confirm_pay" : "Do you confirm payment?", | |||
| "ok" : "Confirm", | |||
| "no" : "Cancel", | |||
| }, | |||
| "center": { | |||
| "invtantion_code": "Invitation Code", | |||
| "cradibiliy_value": "Credibility Value", | |||
| "account_balance": "Account Balance", | |||
| "account_balance_info": "The system will automatically update the daily earnings:", | |||
| "wallet_amount": "Wallet Amount", | |||
| "deposit": "Deposit", | |||
| "withdraw": "Withdrawal", | |||
| "personal_info": "Personal Info", | |||
| "Transaction": "Transaction", | |||
| "wallet": "Wallet", | |||
| "language": "Language", | |||
| "customer_serivce": "Customer Service", | |||
| "logout": "Logout", | |||
| "type-address": "Type Address", | |||
| "Tips": "Tips", | |||
| "Address": "Address", | |||
| "save": "Save", | |||
| "fanList": "Fan List", | |||
| "cannotModified": "Cannot be modified", | |||
| "winningRecord": "Winning Record", | |||
| "loginRecord" : "Entry record" | |||
| }, | |||
| "loginRecord" : { | |||
| "title" : "Entry record", | |||
| "Norecord" : "No record", | |||
| "login_time" : "login time", | |||
| "login_address" : "login address", | |||
| }, | |||
| "purse": { | |||
| "recharge": "Recharge", | |||
| "account": "Account Amount US", | |||
| "unit": "USDT", | |||
| "deposit-now": "Deposit Now", | |||
| "security-pin": "Security PIN", | |||
| "success": "Recharge successful", | |||
| "moneyEmpty": "Please fill in the recharge amount", | |||
| "AmountThan0": "The recharge amount must be greater than 0", | |||
| "payPassEmpty": "Please fill in the payment code" | |||
| }, | |||
| "withdraw": { | |||
| "title": "Withdrawal", | |||
| "account": "Account Amount US", | |||
| "unit": "USDT", | |||
| "withdraw-amount": "Withdrawal Amount", | |||
| "withdraw-descript": "Withdrawal will be transferred to cryptocurrency wallet", | |||
| "withdrawal-all": "Withdraw All", | |||
| "deposit-now": "Deposit Amount", | |||
| "pin": "Security PIN", | |||
| "submit": "Submit", | |||
| "noBalance": "Your balance is 0", | |||
| "successfulWithdrawal": "Successful withdrawal", | |||
| "insufficientBalance": "Insufficient balance", | |||
| "creditLimit": "The withdrawal amount must be greater than 0", | |||
| "payPassEmpty": "Please enter the withdrawal amount", | |||
| "warn": "Warning", | |||
| "warn-detail": "Since your funds are large and exceed the withdrawal amount of ordinary users, please consider upgrading your VIP level!", | |||
| "ok": "OK" | |||
| }, | |||
| "login": { | |||
| "title": "Login", | |||
| "please-login": "Please login to access more content", | |||
| "username": "Username", | |||
| "username-placeholder": "username", | |||
| "password": "Password", | |||
| "password-placeholder": "password", | |||
| "forgot-password": "Forgot Password", | |||
| "login": "Login Now", | |||
| "register": "Register Now", | |||
| "accountEmpty": "Please fill in the account", | |||
| "passEmpty": "Please fill in the password" | |||
| }, | |||
| "register": { | |||
| "title": "Register", | |||
| "please-register": "Please register to access more content", | |||
| "username": "Username", | |||
| "username-placeholder": "username", | |||
| "password": "Password", | |||
| "password-placeholder": "password", | |||
| "confirm-password": "Confirm Password", | |||
| "PaymentPassword": "Payment Password", | |||
| "PaymentPassword-placeholder": "payment password", | |||
| "confirm-PaymentPassword": "Confirm Payment Password", | |||
| "invitation-code": "Invitation Code", | |||
| "forgot-password": "Forgot Password", | |||
| "register": "Register Now", | |||
| "login": "Login Now", | |||
| "agreen": "Agree to", | |||
| "agreement": "《User Registration Agreement》", | |||
| "accountEmpty": "Please fill in the account", | |||
| "passEmpty": "Please fill in the password", | |||
| "okPassEmpty": "Please fill in the password again", | |||
| "passInconsistency": "Password inconsistency", | |||
| "payPassEmpty": "Please fill in the payment code", | |||
| "okPayPassEmpty": "Please fill in the payment password again", | |||
| "payPassInconsistency": "The payment password is inconsistent", | |||
| "tickProtocol": "Please tick the agreement" | |||
| }, | |||
| "persionalInfo": { | |||
| "title": "Personal Info", | |||
| "profle-image": "Profile Image", | |||
| "username": "Username", | |||
| "change-pin": "Change Security PIN", | |||
| "change-password": "Change Login Password" | |||
| }, | |||
| "changeLanguage": { | |||
| "cancel": "Cancel", | |||
| "confirm": "Confirm" | |||
| }, | |||
| "runningWater": { | |||
| "title": "Transaction History" | |||
| }, | |||
| "serviceList": { | |||
| "cancel": "Cancel" | |||
| }, | |||
| "instructions": { | |||
| "tcTitle": "T&C", | |||
| "eventTitle": "Event", | |||
| "faqTitle": "FAQs", | |||
| "aboutTtitle": "About Us", | |||
| "certificate": "Certificate", | |||
| "agreementTitle": "Agreement", | |||
| "agreement": `<view>Welcome to Blueprint!</view><br/><br/><view>To protect the security of the site and the items created by the user 'Services and Items', you should review the 'Services and Items License' section thoroughly before creating an account. Pay particular attention to the terms of service, limitations, and any other relevant terms. You must individually assess and accept or reject each term and condition.</view><br/><br/><view>If you are 18 years of age or older, becoming a user of the website implies that you have read and agreed to the agreement and related terms and conditions. Otherwise, you do not have the right to download and install the software or access the services.</view><br/><br/><view>(I) Protection of Users' Personal Information</view><br/><br/><view>1.(1) The fundamental principle of this website is to protect users' and creators' personal information. All information is professionally encrypted to ensure user safety. In case of any unauthorized disclosure of information, the website reserves the right to take legal action.</view><br/><br/><view>1.(2) Users are required to provide certain necessary information during the registration process, including their mobile phone number, and | |||
| agree to abide by the relevant terms and conditions. Insufficient information provided by the user may result in denial of access.</view><br/><br/><view>1.(3) Under normal circumstances, users can modify submitted data at any time. However, personal information cannot be changed after registration.</view><br/><br/><view>1.(4) Teoco employs various security processes and technologies, as well as a comprehensive management system, to protect users' personal information and prevent any unauthorized use or misuse. Any violations will result in legal action.</view><br/><br/><view>1.(5) App Radar will not disclose user information to any companies or organizations other than App Radar without the user's consent under any circumstances.</view><br/><br/><view>1.(6) Individuals under the age of 18 require written consent from a parent or legal guardian before accessing the services on this website.</view><br/><br/><view>(B) User Responsibilities</view><br/><br/><view>2.(1) Users must fulfill a set of tasks before they can request withdrawals.</view><br/><br/><view>2.(2) Users are not permitted to request withdrawals while tasks are pending optimization.</view><br/><br/><view>2.(3) Users cannot cancel or skip | |||
| tasks once initiated.</view><br/><br/><view>2.(4) Withdrawals exceeding 200,000,000 VND in the user's account require a 20% fee, which will be refunded immediately after the withdrawal is processed.</view><br/><br/><view>(C) Terms and Conditions</view><br/><br/><view>3.(1) Agreement: The User Satisfaction Agreement and Terms of Service are governed by the terms and conditions outlined on the user's account. Users must provide relevant information and documents as requested on the site, and they are bound by the terms of the contract.</view><br/><br/><view>3.(2) This website provides services to all users in accordance with the terms and conditions. For any important questions or requests, please contact the appropriate department for assistance.</view>` | |||
| }, | |||
| "modifyUser": { | |||
| "editPinTitle": "Change Security PIN", | |||
| "editPasswordTitle": "Change Login Password", | |||
| "oldPassword": "Old Password", | |||
| "oldPasswordPlaceholder": "Type old Password", | |||
| "newPassword": "New Password", | |||
| "newPasswordPlaceholder": "Type new Password", | |||
| "confirmNewPassword": "Confirm New Password", | |||
| "confirm": "Confirm", | |||
| "pinTips": "If you forgot the old Security PIN, please contact customer service to retrieve it.", | |||
| "passwordTips": "If you forgot the old password, please contact customer service to retrieve it.", | |||
| "oldPasswordToast": "The old password cannot be empty", | |||
| "newPasswordToast": "The new password cannot be empty", | |||
| "confirmNewPasswordToast": "Confirm that the password cannot be empty", | |||
| "notPasswordToast": "The passwords do not match" | |||
| }, | |||
| "review": { | |||
| "title": "PLEASE SELECT", | |||
| "loading" : "loading..." | |||
| }, | |||
| "invitationList": { | |||
| "title": "Fan List", | |||
| "noFans": "Have no fans" | |||
| }, | |||
| "turntable": { | |||
| "1": "Thank you for your patronage", | |||
| "2": "First Prize", | |||
| "3": "Second Prize", | |||
| "4": "Third Prize", | |||
| "5": "Fourth Prize", | |||
| "6": "Fifth Prize", | |||
| "7": "Sixth Prize", | |||
| "8": "Seventh Prize", | |||
| "num": "Remaining {0} times", | |||
| "go": "Go", | |||
| "loading" : "loading..." | |||
| }, | |||
| "winningRecord": { | |||
| "title": "Winning Record", | |||
| "1": "Thank you for your patronage", | |||
| "2": "First Prize", | |||
| "3": "Second Prize", | |||
| "4": "Third Prize", | |||
| "5": "Fourth Prize", | |||
| "6": "Fifth Prize", | |||
| "7": "Sixth Prize", | |||
| "8": "Seventh Prize", | |||
| "money": "Money", | |||
| "noPrizesHaveBeenWon": "No prizes have been won" | |||
| }, | |||
| "signIn" : { | |||
| "title" : "arcsky", | |||
| "sign" : "{0} days in a row this month", | |||
| "SignSuccessfully" : "Sign in successfully", | |||
| "0" : "January ", | |||
| "1" : "February ", | |||
| "2" : "March ", | |||
| "3" : "April ", | |||
| "4" : "May", | |||
| "5" : "June ", | |||
| "6" : "July ", | |||
| "7" : "August ", | |||
| "8" : "September ", | |||
| "9" : "October ", | |||
| "10" : "November ", | |||
| "11" : "December ", | |||
| "day" : "Day {0}" | |||
| } | |||
| } | |||
| } | |||
| @ -0,0 +1,268 @@ | |||
| export default { | |||
| "language": "language", | |||
| "language.cancel": "cancel", | |||
| "page.login.title": "login", | |||
| "tabbar.title.1": "Home", | |||
| "tabbar.title.2": "STARTING", | |||
| "tabbar.title.3": "Order", | |||
| "nav.login": "Login", | |||
| "nav.register": "Register", | |||
| "nav.home": "Home", | |||
| "nav.order": "Orders", | |||
| "myToactTitle": "Tips", | |||
| "$": "$", | |||
| "toHome": "Back to home page", | |||
| "success-operation": "Successful operation", | |||
| "message": { | |||
| "1": "The account cannot be empty", | |||
| "2": "The password cannot be empty", | |||
| "3": "User does not exist", | |||
| "4": "Password error", | |||
| "5": "Login successful", | |||
| "6": "Confirm that the password cannot be empty", | |||
| "7": "The payment password cannot be empty", | |||
| "8": "Verify that the payment password cannot be empty", | |||
| "9": "Password inconsistency", | |||
| "10": "The payment password is inconsistent", | |||
| "11": "Invitation code error", | |||
| "12": "Registered successfully", | |||
| "13": "The account has been disabled", | |||
| "14": "Query successful", | |||
| "15": "Operation successful", | |||
| "16": "Incorrect password", | |||
| "17": "Password cannot be empty", | |||
| "18": "Confirm password cannot be empty", | |||
| "19": "Passwords do not match", | |||
| "20": "Withdrawal amount cannot be empty", | |||
| "21": "Payment password cannot be empty", | |||
| "22": "Unfortunately, you did not win the lottery", | |||
| "23": "Today's lottery attempts have been used up", | |||
| "24": "Review successful", | |||
| "25": "Review identifier cannot be empty", | |||
| "26": "Review score cannot be empty", | |||
| "27": "Payment successful", | |||
| "28": "Insufficient balance", | |||
| "29": "Order created successfully", | |||
| "30": "User transactions have been disabled. Please contact customer service", | |||
| "31": "You have an order unpaid", | |||
| "32" : "Mission complete. Contact customer service", | |||
| "500": "The system is busy! Please contact customer service", | |||
| "512": "The account was also registered", | |||
| "511": "The account or password is incorrect" | |||
| }, | |||
| "page": { | |||
| "home": { | |||
| "CustomerService": "CustomerService", | |||
| "Certifcate": "Certifcate", | |||
| "Deposit": "Deposit", | |||
| "Withdraw": "Withdraw", | |||
| "equity_item_1": "Receive a set of {0} apps data tasks", | |||
| "equity_item_2": "Proft of {0}% per application", | |||
| "equity_item_3": "Activate with a {0} USDT", | |||
| "agreement_item_1": "T&C", | |||
| "agreement_item_2": "Event", | |||
| "agreement_item_3": "FAQ", | |||
| "agreement_item_4": "About us" | |||
| }, | |||
| "prizeDraw": { | |||
| "title_1": "Starting", | |||
| "profit": "profit", | |||
| "title_2": "TOP APPS THIS WEEK", | |||
| "Start": "Start", | |||
| "frozen_amount": "Frozen Amount", | |||
| "today_profit": "Today profit", | |||
| "title_3": "It will be updated daily. Only today profits are shown here", | |||
| "title_4": "Every rating's profit will. add to total assets", | |||
| "account_balance": "Account Balance", | |||
| "important_notice": "Important Notice", | |||
| "notice_item_1": "·Business Hours:00:00:00-23:59:59", | |||
| "notice_item_2": "·For further assistance, please contact Customer Service", | |||
| "submit": "Submit", | |||
| "rating_submission": "Rating Submission", | |||
| "Total_Amount": "Total Amount", | |||
| "Creation_time": "Creation time", | |||
| "Rating_No": "Rating No" | |||
| }, | |||
| "order": { | |||
| "records": "Records", | |||
| "Submit_New": "Submit new", | |||
| "Speedip": "Speedip", | |||
| "Total_Amount": "Total Amount", | |||
| "Profit": "Profit", | |||
| "no-Order": "No Order", | |||
| "take-stroll": "Take Stroll", | |||
| "class_1" : "ALL", | |||
| "class_2" : "No-pay", | |||
| "class_3" : "Have-pay", | |||
| "class_4" : "Rated", | |||
| }, | |||
| "center": { | |||
| "invtantion_code": "Invitation code", | |||
| "cradibiliy_value": "cradibiliy Value", | |||
| "account_balance": "Account Balance", | |||
| "account_balance_info": "The system will automatic update the daily earnings:", | |||
| "wallet_amount": "Wallet Amount", | |||
| "deposit": "Deposit", | |||
| "withdraw": "Withdraw", | |||
| "personal_info": "Personal info", | |||
| "Transaction": "transaction", | |||
| "wallet": "Wallet", | |||
| "language": "Language", | |||
| "customer_serivce": "Customer Serivce", | |||
| "logout": "Logout", | |||
| "type-address": "Type Address", | |||
| "Tips": "Tips", | |||
| "Address": "Address", | |||
| "save": "save", | |||
| "fanList": "Fan list", | |||
| "cannotModified": "Cannot be modified", | |||
| "winningRecord" : "Winning record" | |||
| }, | |||
| "purse": { | |||
| "recharge": "recharge", | |||
| "account": "Account AmountUS", | |||
| "unit": "USDT", | |||
| "deposit-now": "Deposit Now", | |||
| "security-pin": "Security PIN", | |||
| "success": "recharge successfully", | |||
| "moneyEmpty": "Please fill in the recharge amount", | |||
| "AmountThan0": "The recharge amount must be greater than 0", | |||
| "payPassEmpty": "Please fill in the payment code" | |||
| }, | |||
| "withdraw": { | |||
| "title": "withdraw", | |||
| "account": "Account AmountUS", | |||
| "unit": "USDT", | |||
| "withdraw-amount": "Withdraw Amount", | |||
| "withdraw-descript": "Withdraw will be transferred to cryptocurrency wallet", | |||
| "withdrawal-all": "Withdrawal All", | |||
| "deposit-now": "Deposit Amount", | |||
| "pin": "Security PIN", | |||
| "submit": "Submit", | |||
| "noBalance": "Your balance is 0", | |||
| "successfulWithdrawal": "Successful withdrawal", | |||
| "insufficientBalance": "Insufficient balance", | |||
| "creditLimit": "The withdrawal amount must be greater than 0", | |||
| "payPassEmpty": "Please enter the withdrawal amount", | |||
| "warn": "warn", | |||
| "warn-detail": "Since your funds are large and exceed the withdrawal amount of ordinary users, please consider upgrading your VIP level!", | |||
| "ok": "OK" | |||
| }, | |||
| "login": { | |||
| "title": "Login", | |||
| "please-login": "Please login to access more content", | |||
| "username": "Username", | |||
| "username-placeholder": "username", | |||
| "password": "Password", | |||
| "password-placeholder": "password", | |||
| "forgot-password": "Forgot Password", | |||
| "login": "Login Now", | |||
| "register": "Register Now", | |||
| "accountEmpty": "Please fill in the account", | |||
| "passEmpty": "Please fill in the password" | |||
| }, | |||
| "register": { | |||
| "title": "Register", | |||
| "please-register": "Please register to access more content", | |||
| "username": "Username", | |||
| "username-placeholder": "username", | |||
| "password": "Password", | |||
| "password-placeholder": "password", | |||
| "confirm-password": "confirm password", | |||
| "PaymentPassword": "Payment Password", | |||
| "PaymentPassword-placeholder": "payment password", | |||
| "confirm-PaymentPassword": "confirm Payment Password", | |||
| "invitation-code": "invitationCode", | |||
| "forgot-password": "Forgot Password", | |||
| "register": "Register Now", | |||
| "login": "Login Now", | |||
| "agreen": "Agree with", | |||
| "agreement": "《User Registration Agreement》", | |||
| "accountEmpty": "Please fill in the account", | |||
| "passEmpty": "Please fill in the password", | |||
| "okPassEmpty": "Please fill in the password again", | |||
| "passInconsistency": "Password inconsistency", | |||
| "payPassEmpty": "Please fill in the payment code", | |||
| "okPayPassEmpty": "Please fill in the payment password again", | |||
| "payPassInconsistency": "The payment password is inconsistent", | |||
| "tickProtocol": "Please tick Protocol" | |||
| }, | |||
| "persionalInfo": { | |||
| "title": "Personal lnfo", | |||
| "profle-image": "Profle lmage", | |||
| "username": "Username", | |||
| "change-pin": "Change Security PlN", | |||
| "change-password": "Change Login Password" | |||
| }, | |||
| "changeLanguage": { | |||
| "cancel": "Cancel", | |||
| "confirm": "Confirm" | |||
| }, | |||
| "runningWater": { | |||
| "title": "Running water" | |||
| }, | |||
| "serviceList": { | |||
| "cancel": "Cancel" | |||
| }, | |||
| "instructions": { | |||
| "tcTitle": "T&C", | |||
| "eventTitle": "Event", | |||
| "faqTitle": "FAQS", | |||
| "aboutTtitle": "About Us", | |||
| "certificate": "certificate", | |||
| "agreementTitle": "Agreement", | |||
| "agreement": | |||
| `<view>Welcome to Blueprint!</view><br/><br/><view>To protect the security of the site and the items created by the user 'Services and Items', you should review the 'Services and Items License' section thoroughly before creating an account. Pay particular attention to the terms of service, limitations, and any other relevant terms. You must individually assess and accept or reject each term and condition.</view><br/><br/><view>If you are 18 years of age or older, becoming a user of the website implies that you have read and agreed to the agreement and related terms and conditions. Otherwise, you do not have the right to download and install the software or access the services.</view><br/><br/><view>(I) Protection of Users' Personal Information</view><br/><br/><view>1.(1) The fundamental principle of this website is to protect users' and creators' personal information. All information is professionally encrypted to ensure user safety. In case of any unauthorized disclosure of information, the website reserves the right to take legal action.</view><br/><br/><view>1.(2) Users are required to provide certain necessary information during the registration process, including their mobile phone number, and | |||
| agree to abide by the relevant terms and conditions. Insufficient information provided by the user may result in denial of access.</view><br/><br/><view>1.(3) Under normal circumstances, users can modify submitted data at any time. However, personal information cannot be changed after registration.</view><br/><br/><view>1.(4) Teoco employs various security processes and technologies, as well as a comprehensive management system, to protect users' personal information and prevent any unauthorized use or misuse. Any violations will result in legal action.</view><br/><br/><view>1.(5) App Radar will not disclose user information to any companies or organizations other than App Radar without the user's consent under any circumstances.</view><br/><br/><view>1.(6) Individuals under the age of 18 require written consent from a parent or legal guardian before accessing the services on this website.</view><br/><br/><view>(B) User Responsibilities</view><br/><br/><view>2.(1) Users must fulfill a set of tasks before they can request withdrawals.</view><br/><br/><view>2.(2) Users are not permitted to request withdrawals while tasks are pending optimization.</view><br/><br/><view>2.(3) Users cannot cancel or skip | |||
| tasks once initiated.</view><br/><br/><view>2.(4) Withdrawals exceeding 200,000,000 VND in the user's account require a 20% fee, which will be refunded immediately after the withdrawal is processed.</view><br/><br/><view>(C) Terms and Conditions</view><br/><br/><view>3.(1) Agreement: The User Satisfaction Agreement and Terms of Service are governed by the terms and conditions outlined on the user's account. Users must provide relevant information and documents as requested on the site, and they are bound by the terms of the contract.</view><br/><br/><view>3.(2) This website provides services to all users in accordance with the terms and conditions. For any important questions or requests, please contact the appropriate department for assistance.</view>` | |||
| }, | |||
| "modifyUser": { | |||
| "editPinTitle": "Change Security PIN", | |||
| "editPasswordTitle": "Change Login Password", | |||
| "oldPassword": "Old Password", | |||
| "oldPasswordPlaceholder": "Type old Password", | |||
| "newPassword": "New Password", | |||
| "newPasswordPlaceholder": "Type new Password", | |||
| "confirmNewPassword": "Confirm New Password", | |||
| "confirm": "Confirm", | |||
| "pinTips": "Forgot the old Security PIN,please contact customer service to retrieve it.", | |||
| "passwordTips": "Forget the old password, please contact customer service retrieve it.", | |||
| "oldPasswordToast": "The old password cannot be empty", | |||
| "newPasswordToast": "The new password cannot be empty", | |||
| "confirmNewPasswordToast": "Confirm that the password cannot be empty", | |||
| "notPasswordToast": "Confirm that the passwords are inconsistent" | |||
| }, | |||
| "review": { | |||
| "title": "PLEASE SELECT" | |||
| }, | |||
| "invitationList": { | |||
| "title": "Fan list", | |||
| "noFans": "Have no fans" | |||
| }, | |||
| "turntable": { | |||
| "1": "Thank you for your patronage", | |||
| "2": "First Prize", | |||
| "3": "Second Prize", | |||
| "4": "Third Prize", | |||
| "5": "Fourth Prize", | |||
| "6": "Fifth Prize", | |||
| "7": "Sixth Prize", | |||
| "8": "Seventh Prize", | |||
| "num" : "Remaining {0} times", | |||
| "go" : "Go" | |||
| }, | |||
| "winningRecord" : { | |||
| "title" : "Winning record", | |||
| "1": "Thank you for your patronage", | |||
| "2": "First Prize", | |||
| "3": "Second Prize", | |||
| "4": "Third Prize", | |||
| "5": "Fourth Prize", | |||
| "6": "Fifth Prize", | |||
| "7": "Sixth Prize", | |||
| "8": "Seventh Prize", | |||
| "money" : "money", | |||
| "noPrizesHaveBeenWon" : "No prizes have been won" | |||
| }, | |||
| } | |||
| } | |||
| @ -0,0 +1,320 @@ | |||
| export default { | |||
| "language": "idioma", | |||
| "language.cancel": "cancelar", | |||
| "page.login.title": "iniciar sesión", | |||
| "tabbar.title.1": "Inicio", | |||
| "tabbar.title.2": "COMIENZO", | |||
| "tabbar.title.3": "Orden", | |||
| "nav.login": "Iniciar sesión", | |||
| "nav.register": "Registrar", | |||
| "nav.home": "Inicio", | |||
| "nav.order": "Ordenes", | |||
| "myToactTitle": "Consejos", | |||
| "$": "$", | |||
| "toHome": "Volver a la página de inicio", | |||
| "success-operation": "Operación exitosa", | |||
| "message": { | |||
| "1": "La cuenta no puede estar vacía", | |||
| "2": "La contraseña no puede estar vacía", | |||
| "3": "El usuario no existe", | |||
| "4": "Error de contraseña", | |||
| "5": "Inicio de sesión exitoso", | |||
| "6": "Confirmar que la contraseña no puede estar vacía", | |||
| "7": "La contraseña de pago no puede estar vacía", | |||
| "8": "Verificar que la contraseña de pago no puede estar vacía", | |||
| "9": "Incoherencia de contraseña", | |||
| "10": "La contraseña de pago es inconsistente", | |||
| "11": "Error de código de invitación", | |||
| "12": "Registrado exitosamente", | |||
| "13": "La cuenta ha sido deshabilitada", | |||
| "14": "Consulta exitosa", | |||
| "15": "Operación exitosa", | |||
| "16": "Contraseña incorrecta", | |||
| "17": "La contraseña no puede estar vacía", | |||
| "18": "Confirmar contraseña no puede estar vacía", | |||
| "19": "Las contraseñas no coinciden", | |||
| "20": "El monto de retirada no puede estar vacío", | |||
| "21": "La contraseña de pago no puede estar vacía", | |||
| "22": "Lamentablemente, no ganaste la lotería", | |||
| "23": "Los intentos de lotería de hoy se han agotado", | |||
| "24": "Revisión exitosa", | |||
| "25": "El identificador de revisión no puede estar vacío", | |||
| "26": "La puntuación de la revisión no puede estar vacía", | |||
| "27": "Pago exitoso", | |||
| "28": "Saldo insuficiente", | |||
| "29": "Orden creada exitosamente", | |||
| "30": "Las transacciones de usuario han sido deshabilitadas. Por favor, contacte el servicio de atención al cliente", | |||
| "31": "Tiene una orden sin pagar", | |||
| "32": "Misión completa. Contacte el servicio de atención al cliente", | |||
| "33": "¡Debido a sus grandes fondos, superando el monto de retiro de los usuarios comunes, ¡ considere actualizar su nivel vip!", | |||
| "34": "Se ha firmado hoy", | |||
| "35": "Registro exitoso", | |||
| "36": "El importe del usuario es menor que el límite vip, por favor recargue", | |||
| "37": "Balance insuficiente para llevar a cabo la misión", | |||
| "500": "¡El sistema está ocupado! Por favor, contacte el servicio de atención al cliente", | |||
| "512": "La cuenta también fue registrada", | |||
| "511": "La cuenta o la contraseña son incorrectas" | |||
| }, | |||
| "page": { | |||
| "home": { | |||
| "CustomerService": "Servicio al Cliente", | |||
| "Certifcate": "Certificado", | |||
| "Deposit": "Depósito", | |||
| "Withdraw": "Retiro", | |||
| "equity_item_1": "Recibe un conjunto de tareas de datos de {0} aplicaciones", | |||
| "equity_item_2": "Ganancia del {0}% por aplicación", | |||
| "equity_item_3": "Activa con {0} USDT", | |||
| "agreement_item_1": "T&C", | |||
| "agreement_item_2": "Evento", | |||
| "agreement_item_3": "FAQ", | |||
| "agreement_item_4": "Acerca de nosotros" | |||
| }, | |||
| "prizeDraw": { | |||
| "title_1": "Comienzo", | |||
| "profit": "ganancias", | |||
| "title_2": "LAS APLICACIONES MÁS POPULARES DE ESTA SEMANA", | |||
| "Start": "Inicio", | |||
| "frozen_amount": "Un bonus extra", | |||
| "today_profit": "Ganancias de hoy", | |||
| "title_3": "Se actualizará diariamente. Sólo se muestran las ganancias de hoy aquí", | |||
| "title_4": "Las ganancias de cada calificación se sumarán a los activos totales", | |||
| "account_balance": "Saldo de la cuenta", | |||
| "important_notice": "Aviso Importante", | |||
| "notice_item_1": "·Horario Comercial: 00:00:00-23:59:59", | |||
| "notice_item_2": "·Para mayor asistencia, por favor contacte Servicio al Cliente", | |||
| "submit": "Enviar", | |||
| "rating_submission": "Envío de Calificación", | |||
| "Total_Amount": "Cantidad Total", | |||
| "Creation_time": "Tiempo de creación", | |||
| "Rating_No": "Número de Calificación", | |||
| "loading": "carga..." | |||
| }, | |||
| "order": { | |||
| "records": "Registros", | |||
| "Submit_New": "Enviar nuevo", | |||
| "Speedip": "Speedip", | |||
| "Total_Amount": "Cantidad Total", | |||
| "Profit": "Ganancias", | |||
| "no-Order": "Sin Orden", | |||
| "take-stroll": "Paseo", | |||
| "class_1": "TODOS", | |||
| "class_2": "No-pago", | |||
| "class_3": "Pagado", | |||
| "class_4": "Calificado", | |||
| "pay": "pago inmediato", | |||
| "confirm_pay": "¿Confirma el pago?", | |||
| "ok": "confirmar", | |||
| "no": "cancelar", | |||
| }, | |||
| "center": { | |||
| "invtantion_code": "Código de invitación", | |||
| "cradibiliy_value": "Valor de credibilidad", | |||
| "account_balance": "Saldo de cuenta", | |||
| "account_balance_info": "El sistema actualizará automáticamente las ganancias diarias:", | |||
| "wallet_amount": "Cantidad en la billetera", | |||
| "deposit": "Depósito", | |||
| "withdraw": "Retiro", | |||
| "personal_info": "Información personal", | |||
| "Transaction": "Transacción", | |||
| "wallet": "Billetera", | |||
| "language": "Idioma", | |||
| "customer_serivce": "Servicio al Cliente", | |||
| "logout": "Salir", | |||
| "type-address": "Escriba la dirección", | |||
| "Tips": "Consejos", | |||
| "Address": "Dirección", | |||
| "save": "guardar", | |||
| "fanList": "Lista de fans", | |||
| "cannotModified": "No puede ser modificado", | |||
| "winningRecord": "Registro de ganancias", | |||
| "loginRecord" : "Registro de entrada" | |||
| }, | |||
| "loginRecord" : { | |||
| "title" : "Registro de entrada", | |||
| "Norecord" : "No hay registro", | |||
| "login_time" : "Tiempo de inicio de sesión", | |||
| "login_address" : "Dirección de inicio de sesión", | |||
| }, | |||
| "purse": { | |||
| "recharge": "recarga", | |||
| "account": "Cantidad en cuenta US", | |||
| "unit": "USDT", | |||
| "deposit-now": "Deposita ahora", | |||
| "security-pin": "PIN de seguridad", | |||
| "success": "recarga exitosa", | |||
| "moneyEmpty": "Por favor, ingresa la cantidad de recarga", | |||
| "AmountThan0": "La cantidad de recarga debe ser mayor a 0", | |||
| "payPassEmpty": "Por favor, ingresa el código de pago" | |||
| }, | |||
| "withdraw": { | |||
| "title": "Retiro", | |||
| "account": "Cantidad en cuenta US", | |||
| "unit": "USDT", | |||
| "withdraw-amount": "Cantidad de retiro", | |||
| "withdraw-descript": "El retiro será transferido a la billetera de criptomonedas", | |||
| "withdrawal-all": "Retirar todo", | |||
| "deposit-now": "Cantidad de depósito", | |||
| "pin": "PIN de seguridad", | |||
| "submit": "Enviar", | |||
| "noBalance": "Su saldo es 0", | |||
| "successfulWithdrawal": "Retiro exitoso", | |||
| "insufficientBalance": "Saldo insuficiente", | |||
| "creditLimit": "La cantidad de retiro debe ser mayor que 0", | |||
| "payPassEmpty": "Por favor, ingrese la cantidad de retiro", | |||
| "warn": "Advertencia", | |||
| "warn-detail": "Debido a que sus fondos son grandes y exceden la cantidad de retiro de usuarios comunes, ¡considere actualizar su nivel VIP!", | |||
| "ok": "OK" | |||
| }, | |||
| "login": { | |||
| "title": "Inicio de sesión", | |||
| "please-login": "Por favor, inicie sesión para acceder a más contenido", | |||
| "username": "Nombre de usuario", | |||
| "username-placeholder": "nombre de usuario", | |||
| "password": "Contraseña", | |||
| "password-placeholder": "contraseña", | |||
| "forgot-password": "Olvidé mi contraseña", | |||
| "login": "Iniciar sesión ahora", | |||
| "register": "Registrarse ahora", | |||
| "accountEmpty": "Por favor, complete la cuenta", | |||
| "passEmpty": "Por favor, ingrese la contraseña" | |||
| }, | |||
| "register": { | |||
| "title": "Registrar", | |||
| "please-register": "Por favor, registrese para acceder a más contenido", | |||
| "username": "Nombre de usuario", | |||
| "username-placeholder": "nombre de usuario", | |||
| "password": "Contraseña", | |||
| "password-placeholder": "contraseña", | |||
| "confirm-password": "confirmar contraseña", | |||
| "PaymentPassword": "Contraseña de pago", | |||
| "PaymentPassword-placeholder": "contraseña de pago", | |||
| "confirm-PaymentPassword": "confirmar contraseña de pago", | |||
| "invitation-code": "código de invitación", | |||
| "forgot-password": "Olvidé mi contraseña", | |||
| "register": "Registrarse ahora", | |||
| "login": "Iniciar sesión ahora", | |||
| "agreen": "Estoy de acuerdo con", | |||
| "agreement": "《Acuerdo de registro de usuario》", | |||
| "accountEmpty": "Por favor, complete la cuenta", | |||
| "passEmpty": "Por favor, ingrese la contraseña", | |||
| "okPassEmpty": "Por favor, ingrese la contraseña nuevamente", | |||
| "passInconsistency": "Inconsistencia en la contraseña", | |||
| "payPassEmpty": "Por favor, ingrese el código de pago", | |||
| "okPayPassEmpty": "Por favor, ingrese la contraseña de pago nuevamente", | |||
| "payPassInconsistency": "La contraseña de pago es inconsistente", | |||
| "tickProtocol": "Por favor, marque el protocolo" | |||
| }, | |||
| "persionalInfo": { | |||
| "title": "Información Personal", | |||
| "profle-image": "Imagen de Perfil", | |||
| "username": "Nombre de Usuario", | |||
| "change-pin": "Cambiar PIN de Seguridad", | |||
| "change-password": "Cambiar Contraseña de Inicio de Sesión" | |||
| }, | |||
| "changeLanguage": { | |||
| "cancel": "Cancelar", | |||
| "confirm": "Confirmar" | |||
| }, | |||
| "runningWater": { | |||
| "title": "Agua Corriente" | |||
| }, | |||
| "serviceList": { | |||
| "cancel": "Cancelar" | |||
| }, | |||
| "instructions": { | |||
| "tcTitle": "T&C", | |||
| "eventTitle": "Evento", | |||
| "faqTitle": "FAQs", | |||
| "aboutTtitle": "Acerca de Nosotros", | |||
| "certificate": "certificado", | |||
| "agreementTitle": "Acuerdo", | |||
| "agreement": ` | |||
| <view>¡Bienvenido a Blueprint!</view><br/><br/> | |||
| <view>Para proteger la seguridad del sitio y los elementos creados por el usuario "Servicios y Elementos", debe revisar detenidamente la sección "Licencia de Servicios y Elementos" antes de crear una cuenta. Preste especial atención a los términos de servicio, limitaciones y cualquier otro término relevante. Debe evaluar individualmente y aceptar o rechazar cada término y condición.</view><br/><br/> | |||
| <view>Si tiene 18 años o más, al ser usuario del sitio web, implica que ha leído y aceptado el acuerdo y los términos y condiciones relacionados. De lo contrario, no tiene derecho a descargar e instalar el software o acceder a los servicios.</view><br/><br/> | |||
| <view>(I) Protección de la Información Personal de los Usuarios</view><br/><br/> | |||
| <view>1.(1) El principio fundamental de este sitio web es proteger la información personal de los usuarios y creadores. Toda la información está encriptada profesionalmente para garantizar la seguridad del usuario. En caso de cualquier divulgación no autorizada de información, el sitio web se reserva el derecho de tomar medidas legales.</view><br/><br/> | |||
| <view>1.(2) Los usuarios deben proporcionar cierta información necesaria durante el proceso de registro, incluido su número de teléfono móvil, y aceptar cumplir con los términos y condiciones relevantes. La información insuficiente proporcionada por el usuario puede resultar en la denegación de acceso.</view><br/><br/> | |||
| <view>1.(3) En circunstancias normales, los usuarios pueden modificar los datos enviados en cualquier momento. Sin embargo, la información personal no puede ser cambiada después del registro.</view><br/><br/> | |||
| <view>1.(4) Teoco emplea diversos procesos y tecnologías de seguridad, así como un sistema de gestión integral, para proteger la información personal de los usuarios y prevenir cualquier uso no autorizado o mal uso. Cualquier violación dará lugar a acciones legales.</view><br/><br/> | |||
| <view>1.(5) App Radar no divulgará la información del usuario a ninguna otra empresa u organización distinta de App Radar sin el consentimiento del usuario bajo ninguna circunstancia.</view><br/><br/> | |||
| <view>1.(6) Las personas menores de 18 años requieren el consentimiento por escrito de un padre o tutor legal antes de acceder a los servicios de este sitio web.</view><br/><br/> | |||
| <view>(B) Responsabilidades del usuario</view><br/><br/> | |||
| <view>2.(1) Los usuarios deben cumplir con un conjunto de tareas antes de poder solicitar retiros.</view><br/><br/> | |||
| <view>2.(2) Los usuarios no pueden solicitar retiros mientras las tareas están pendientes de optimización.</view><br/><br/> | |||
| <view>2.(3) Los usuarios no pueden cancelar o saltarse tareas una vez iniciadas.</view><br/><br/> | |||
| <view>2.(4) Los retiros que exceden los 200.000.000 VND en la cuenta del usuario requieren una tarifa del 20%, que se reembolsará inmediatamente después de que se procese el retiro.</view><br/><br/> | |||
| <view>(C) Términos y condiciones</view><br/><br/><view>3.(1) Acuerdo: El Acuerdo de Satisfacción del Usuario y los Términos de Servicio se rigen por los términos y condiciones descritos en la cuenta del usuario. Los usuarios deben proporcionar la información y los documentos relevantes según lo solicitado en el sitio, y están obligados por los términos del contrato.</view><br/><br/> | |||
| <view>3.(2) Este sitio web proporciona servicios a todos los usuarios de acuerdo con los términos y condiciones. Para cualquier pregunta o solicitud importante, por favor, póngase en contacto con el departamento correspondiente para obtener ayuda.</view> | |||
| ` | |||
| }, | |||
| "modifyUser": { | |||
| "editPinTitle": "Cambiar PIN de seguridad", | |||
| "editPasswordTitle": "Cambiar contraseña de inicio de sesión", | |||
| "oldPassword": "Contraseña antigua", | |||
| "oldPasswordPlaceholder": "Escribe la contraseña antigua", | |||
| "newPassword": "Nueva contraseña", | |||
| "newPasswordPlaceholder": "Escribe la nueva contraseña", | |||
| "confirmNewPassword": "Confirmar nueva contraseña", | |||
| "confirm": "Confirmar", | |||
| "pinTips": "Si has olvidado el antiguo PIN de seguridad, ponte en contacto con el servicio de atención al cliente para recuperarlo.", | |||
| "passwordTips": "Si has olvidado la antigua contraseña, ponte en contacto con el servicio de atención al cliente para recuperarla.", | |||
| "oldPasswordToast": "La antigua contraseña no puede estar vacía", | |||
| "newPasswordToast": "La nueva contraseña no puede estar vacía", | |||
| "confirmNewPasswordToast": "La confirmación de la contraseña no puede estar vacía", | |||
| "notPasswordToast": "La confirmación de las contraseñas no coincide" | |||
| }, | |||
| "review": { | |||
| "title": "POR FAVOR, SELECCIONA", | |||
| "loading": "carga..." | |||
| }, | |||
| "invitationList": { | |||
| "title": "Lista de fans", | |||
| "noFans": "No tienes fans" | |||
| }, | |||
| "turntable": { | |||
| "1": "Gracias por tu patrocinio", | |||
| "2": "Primer premio", | |||
| "3": "Segundo premio", | |||
| "4": "Tercer premio", | |||
| "5": "Cuarto premio", | |||
| "6": "Quinto premio", | |||
| "7": "Sexto premio", | |||
| "8": "Séptimo premio", | |||
| "num": "Quedan {0} intentos", | |||
| "go": "Ir", | |||
| "loading": "carga..." | |||
| }, | |||
| "winningRecord": { | |||
| "title": "Registro de premios", | |||
| "1": "Gracias por tu patrocinio", | |||
| "2": "Primer premio", | |||
| "3": "Segundo premio", | |||
| "4": "Tercer premio", | |||
| "5": "Cuarto premio", | |||
| "6": "Quinto premio", | |||
| "7": "Sexto premio", | |||
| "8": "Séptimo premio", | |||
| "money": "dinero", | |||
| "noPrizesHaveBeenWon": "No se han ganado premios" | |||
| }, | |||
| "signIn": { | |||
| "title": "arcsky", | |||
| "sign": "{0} días consecutivos de fichajes este mes", | |||
| "SignSuccessfully" : "Registro exitoso", | |||
| "0": "Enero ", | |||
| "1": "Febrero ", | |||
| "2": "Marzo ", | |||
| "3": "Abril ", | |||
| "4": "Mayo ", | |||
| "5": "Junio ", | |||
| "6": "Julio", | |||
| "7": "Agosto", | |||
| "8": "Septiembre ", | |||
| "9": "Octubre ", | |||
| "10": "Noviembre ", | |||
| "11": "Diciembre ", | |||
| "day" : "el {0} día" | |||
| } | |||
| } | |||
| } | |||
| @ -0,0 +1,20 @@ | |||
| import en from './en.js'//英语语言包 | |||
| import es from './es.js'//西班牙语言包 | |||
| import Vue from 'vue' | |||
| import VueI18n from 'vue-i18n' | |||
| Vue.use(VueI18n) | |||
| const lang = uni.getStorageSync('language') || 'en';//获取缓存中的语言 | |||
| // const lang = 'en'; | |||
| // VueI18n构造函数所需要的配置 | |||
| const i18nConfig = { | |||
| locale: lang,//当前语言 | |||
| // 所需要用的语言包 | |||
| messages:{ | |||
| en, | |||
| es | |||
| } | |||
| } | |||
| const i18n = new VueI18n(i18nConfig) | |||
| export default i18n | |||
| @ -0,0 +1,56 @@ | |||
| import App from './App' | |||
| // #ifndef VUE3 | |||
| import i18n from './locale/index.js' | |||
| import Vue from 'vue' | |||
| import './uni.promisify.adaptor' | |||
| Vue.config.productionTip = false | |||
| App.mpType = 'app' | |||
| import request from './utils/request' | |||
| Vue.prototype.$api = 'http://124.71.12.219:8085/' | |||
| Vue.prototype.request = request | |||
| import store from './store/index.js' | |||
| import uView from '@/uni_modules/uview-ui' | |||
| Vue.use(uView) | |||
| import './plugin' | |||
| import 'interceptor/interceptor.js' | |||
| //后端返回数据格式过滤 | |||
| window.parseList = function(data) { | |||
| if (!data) { | |||
| return []; | |||
| } else if (data.length || data.length == 0) { | |||
| return data | |||
| } else { | |||
| return [data] | |||
| } | |||
| } | |||
| const app = new Vue({ | |||
| ...App, | |||
| i18n, | |||
| store, | |||
| }) | |||
| app.$mount() | |||
| // #endif | |||
| // #ifdef VUE3 | |||
| import { | |||
| createSSRApp | |||
| } from 'vue' | |||
| export function createApp() { | |||
| const app = createSSRApp(App) | |||
| return { | |||
| app | |||
| } | |||
| } | |||
| // #endif | |||
| @ -0,0 +1,89 @@ | |||
| { | |||
| "name" : "drone-shop", | |||
| "appid" : "__UNI__3E7CFD4", | |||
| "description" : "", | |||
| "versionName" : "1.0.0", | |||
| "versionCode" : "100", | |||
| "transformPx" : false, | |||
| "h5" : { | |||
| "devServer" : { | |||
| "https" : false, | |||
| "proxy" : { | |||
| "/api" : { | |||
| "target" : "http://admin.shop996.top/shop_demo/", | |||
| "ws" : true, | |||
| "pathRewrite" : { | |||
| "^/api" : "/api" | |||
| } | |||
| } | |||
| } | |||
| }, | |||
| "sdkConfigs" : { | |||
| "maps" : {} | |||
| } | |||
| }, | |||
| /* 5+App特有相关 */ | |||
| "app-plus" : { | |||
| "usingComponents" : true, | |||
| "nvueStyleCompiler" : "uni-app", | |||
| "compilerVersion" : 3, | |||
| "splashscreen" : { | |||
| "alwaysShowBeforeRender" : true, | |||
| "waiting" : true, | |||
| "autoclose" : true, | |||
| "delay" : 0 | |||
| }, | |||
| /* 模块配置 */ | |||
| "modules" : {}, | |||
| /* 应用发布信息 */ | |||
| "distribute" : { | |||
| /* android打包配置 */ | |||
| "android" : { | |||
| "permissions" : [ | |||
| "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>", | |||
| "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>", | |||
| "<uses-permission android:name=\"android.permission.VIBRATE\"/>", | |||
| "<uses-permission android:name=\"android.permission.READ_LOGS\"/>", | |||
| "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>", | |||
| "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>", | |||
| "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>", | |||
| "<uses-permission android:name=\"android.permission.CAMERA\"/>", | |||
| "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>", | |||
| "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>", | |||
| "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>", | |||
| "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>", | |||
| "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>", | |||
| "<uses-feature android:name=\"android.hardware.camera\"/>", | |||
| "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>" | |||
| ] | |||
| }, | |||
| /* ios打包配置 */ | |||
| "ios" : {}, | |||
| /* SDK配置 */ | |||
| "sdkConfigs" : {} | |||
| } | |||
| }, | |||
| /* 快应用特有相关 */ | |||
| "quickapp" : {}, | |||
| /* 小程序特有相关 */ | |||
| "mp-weixin" : { | |||
| "appid" : "", | |||
| "setting" : { | |||
| "urlCheck" : false | |||
| }, | |||
| "usingComponents" : true | |||
| }, | |||
| "mp-alipay" : { | |||
| "usingComponents" : true | |||
| }, | |||
| "mp-baidu" : { | |||
| "usingComponents" : true | |||
| }, | |||
| "mp-toutiao" : { | |||
| "usingComponents" : true | |||
| }, | |||
| "uniStatistics" : { | |||
| "enable" : false | |||
| }, | |||
| "vueVersion" : "2" | |||
| } | |||
| @ -0,0 +1,19 @@ | |||
| { | |||
| "name": "mobile-shop-uniapp", | |||
| "version": "1.0.0", | |||
| "description": "{**When you're done, you can delete the content in this README and update the file with details for others getting started with your repository**}", | |||
| "main": "main.js", | |||
| "scripts": { | |||
| "test": "echo \"Error: no test specified\" && exit 1" | |||
| }, | |||
| "repository": { | |||
| "type": "git", | |||
| "url": "https://gitee.com/huliyong/mobile-shop-uniapp.git" | |||
| }, | |||
| "author": "", | |||
| "license": "ISC", | |||
| "dependencies": { | |||
| "dayjs": "^1.11.12", | |||
| "vuex": "^3.6.2" | |||
| } | |||
| } | |||
| @ -0,0 +1,134 @@ | |||
| { | |||
| "easycom": { | |||
| "^u-(.*)": "@/uni_modules/uview-ui/components/u-$1/u-$1.vue" | |||
| }, | |||
| "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages | |||
| { | |||
| "path": "pages/home/home", | |||
| "style": { | |||
| "navigationBarTitleText": "" | |||
| } | |||
| }, | |||
| { | |||
| "path": "pages/login/login", | |||
| "style": { | |||
| "navigationBarTitleText": "", | |||
| "enablePullDownRefresh": false | |||
| } | |||
| }, | |||
| { | |||
| "path": "pages/register/register", | |||
| "style": { | |||
| "navigationBarTitleText": "", | |||
| "enablePullDownRefresh": false | |||
| } | |||
| }, | |||
| { | |||
| "path": "pages/order/order", | |||
| "style": { | |||
| "navigationBarTitleText": "", | |||
| "enablePullDownRefresh": false | |||
| } | |||
| }, | |||
| { | |||
| "path": "pages/login/contactCustomerService", | |||
| "style": { | |||
| "navigationBarTitleText": "", | |||
| "enablePullDownRefresh": false | |||
| } | |||
| }, | |||
| { | |||
| "path": "pages/purse/purse", | |||
| "style": { | |||
| "navigationBarTitleText": "", | |||
| "enablePullDownRefresh": false | |||
| } | |||
| }, | |||
| { | |||
| "path": "pages/withdraw/withdraw", | |||
| "style": { | |||
| "navigationBarTitleText": "", | |||
| "enablePullDownRefresh": false | |||
| } | |||
| }, | |||
| { | |||
| "path": "pages/personalInfo/personalInfo", | |||
| "style": { | |||
| "navigationBarTitleText": "", | |||
| "enablePullDownRefresh": false | |||
| } | |||
| }, | |||
| { | |||
| "path": "pages/runningWater/runningWater", | |||
| "style": { | |||
| "navigationBarTitleText": "", | |||
| "enablePullDownRefresh": false | |||
| } | |||
| }, | |||
| { | |||
| "path": "pages/certificate/certificate", | |||
| "style": { | |||
| "navigationBarTitleText": "", | |||
| "enablePullDownRefresh": false | |||
| } | |||
| }, | |||
| { | |||
| "path": "pages/instructions/instructions", | |||
| "style": { | |||
| "navigationBarTitleText": "", | |||
| "enablePullDownRefresh": false | |||
| } | |||
| }, | |||
| { | |||
| "path": "pages/modifyUser/modifyUser", | |||
| "style": { | |||
| "navigationBarTitleText": "", | |||
| "enablePullDownRefresh": false | |||
| } | |||
| }, | |||
| { | |||
| "path" : "pages/prizeDraw/prizeDraw", | |||
| "style" : | |||
| { | |||
| "navigationBarTitleText" : "" | |||
| } | |||
| }, | |||
| { | |||
| "path" : "pages/invitationList/invitationList", | |||
| "style" : | |||
| { | |||
| "navigationBarTitleText" : "" | |||
| } | |||
| }, | |||
| { | |||
| "path" : "pages/winningRecord/winningRecord", | |||
| "style" : | |||
| { | |||
| "navigationBarTitleText" : "" | |||
| } | |||
| }, | |||
| { | |||
| "path" : "pages/signIn/signIn", | |||
| "style" : | |||
| { | |||
| "navigationBarTitleText" : "" | |||
| } | |||
| }, | |||
| { | |||
| "path" : "pages/loginRecord/loginRecord", | |||
| "style" : | |||
| { | |||
| "navigationBarTitleText" : "" | |||
| } | |||
| } | |||
| ], | |||
| "globalStyle": { | |||
| "navigationBarTextStyle": "black", | |||
| "navigationBarTitleText": "uni-app", | |||
| "navigationBarBackgroundColor": "#F8F8F8", | |||
| "backgroundColor": "#F8F8F8", | |||
| "navigationStyle": "custom", | |||
| "rpxCalcMaxDeviceWidth": 960 | |||
| }, | |||
| "uniIdRouter": {} | |||
| } | |||
| @ -0,0 +1,58 @@ | |||
| <!-- 证书页面 --> | |||
| <template> | |||
| <view class="certificate bx"> | |||
| <navbar :leftClick="leftClick" :title="$t('page.certificate.title')"></navbar> | |||
| <!-- 证书图片 --> | |||
| <view class="certificate-image"> | |||
| <image src="@/static/certificate/certificate.png" mode="aspectFit"></image> | |||
| </view> | |||
| </view> | |||
| </template> | |||
| <script> | |||
| import navbar from '@/components/base/m-navbar.vue' | |||
| export default { | |||
| components : { navbar }, | |||
| data(){ | |||
| return { | |||
| } | |||
| }, | |||
| created(){ | |||
| }, | |||
| methods : { | |||
| leftClick() { | |||
| uni.navigateTo({ | |||
| url: '/pages/home/home' | |||
| }) | |||
| } | |||
| } | |||
| } | |||
| </script> | |||
| <style lang="scss" scoped> | |||
| .certificate{ | |||
| width: 750rpx; | |||
| min-height: 100vh; | |||
| background-color: black; | |||
| margin: 0 auto; | |||
| background-size: 100%; | |||
| background-repeat: no-repeat; | |||
| .certificate-image{ | |||
| width: 96%; | |||
| margin: 0rpx auto; | |||
| padding-top: 30rpx; | |||
| image{ | |||
| width: 100%; | |||
| height: 50vh; | |||
| background-size: 100% !important; | |||
| } | |||
| } | |||
| } | |||
| </style> | |||
| @ -0,0 +1,446 @@ | |||
| <!-- 首页 --> | |||
| <template> | |||
| <view class="home bx"> | |||
| <!-- 首页顶部 --> | |||
| <view class="home-top content"> | |||
| <view class="menu-icon" @click="centerShow = true;$play()"> | |||
| <image src="@/static/home/menu.png" mode="aspectFit"></image> | |||
| </view> | |||
| <view class="logo"> | |||
| <image src="../../static/home/logo.png" mode="widthFix"></image> | |||
| </view> | |||
| <view class="sign"> | |||
| <image @click="toSignin" src="../../static/home/sign.png" mode="widthFix"></image> | |||
| </view> | |||
| </view> | |||
| <!-- 通知 --> | |||
| <view class="notification"> | |||
| <u-notice-bar :text="notification[notificationType[$i18n.locale]] || ''" bgColor="#000" | |||
| color="white"></u-notice-bar> | |||
| </view> | |||
| <!-- 用户信息 --> | |||
| <view class="user-info content"> | |||
| <view class="user-name">{{ userInfo.account }}</view> | |||
| <view class="member-image"> | |||
| <image :src="vipInfo.icon" mode="aspectFit"></image> | |||
| </view> | |||
| </view> | |||
| <!-- 菜单列表 --> | |||
| <view class="menu-list content"> | |||
| <view v-for="(item,index) in onList" :key="index" @click="clickMenu(index)" class="menu-item"> | |||
| <image :src="item.icon" mode="aspectFit"></image> | |||
| <view class="menu-descript">{{ $t(`page.home.${menuTitles[index]}`) }}</view> | |||
| </view> | |||
| </view> | |||
| <!-- 会员等级信息 --> | |||
| <view class="member-list content"> | |||
| <view class="member-item" v-for="(item, index) in vipList" :key="index"> | |||
| <view class="status-icon"> | |||
| <view v-if="item.current" class="current">current</view> | |||
| <uni-icons v-else type="locked" size="20" color="#aec438"></uni-icons> | |||
| </view> | |||
| <view class="img-box"> | |||
| <image :src="item.icon" mode="aspectFit"></image> | |||
| </view> | |||
| <view class="menber-descript">{{ item.title }}</view> | |||
| <!-- 权益列表 --> | |||
| <view class="equity-list"> | |||
| <view class="equity-item"> | |||
| <!-- Receive a set of 40 apps data tasks --> | |||
| {{ $t('page.home.equity_item_1', [item.num]) }} | |||
| </view> | |||
| <view class="equity-item"> | |||
| {{ $t('page.home.equity_item_2', [item.percentage]) }} | |||
| </view> | |||
| <view class="equity-item"> | |||
| {{ $t('page.home.equity_item_3', [item.price]) }} | |||
| </view> | |||
| </view> | |||
| </view> | |||
| </view> | |||
| <!-- 协议列表 --> | |||
| <view class="agreement-list"> | |||
| <view v-for="(item,index) in outList" :key="index" @click="toinstructions(index)" class="agreement-item"> | |||
| <image :src="item.icon" mode="aspectFit"></image> | |||
| <view class="agreement-descript">{{ $t(`page.home.${agreementTitles[index]}`) }}</view> | |||
| </view> | |||
| </view> | |||
| <sTabbar select="0" /> | |||
| <center :show="centerShow" :userInfo="userInfo" @close="centerShow = false;$play()" /> | |||
| <!-- 客服列表 --> | |||
| <serviceList :show="showService" :serverList="serverList" @close="closeServiceList"></serviceList> | |||
| </view> | |||
| </template> | |||
| <script> | |||
| import sTabbar from '@/components/base/tabBar.vue' | |||
| import center from '@/components/center/center.vue' | |||
| import serviceList from '@/components/serviceList/serviceList.vue' | |||
| export default { | |||
| components: { | |||
| sTabbar, | |||
| center, | |||
| serviceList | |||
| }, | |||
| data() { | |||
| return { | |||
| notification: {}, | |||
| centerShow: false, | |||
| showService: false, | |||
| menuTitles: ['CustomerService', 'Certifcate', 'Deposit', 'Withdraw'], | |||
| agreementTitles: ['agreement_item_1', 'agreement_item_2', 'agreement_item_3', 'agreement_item_4'], | |||
| serverList: [], | |||
| onList: [], | |||
| outList: [], | |||
| vipList: [], | |||
| userInfo: {}, | |||
| vipInfo: {}, | |||
| notificationType: { | |||
| en: 'keyEnglish', | |||
| es: "keySpanish", | |||
| "zh": "keyChinese" | |||
| }, | |||
| } | |||
| }, | |||
| onShow() { | |||
| this.getIndexIcon() | |||
| this.getNotice() | |||
| this.getUserInfo() | |||
| this.forgetPass() | |||
| }, | |||
| methods: { | |||
| //跳转证书页面 | |||
| toCertificate() { | |||
| uni.navigateTo({ | |||
| url: `/pages/instructions/instructions?index=1&type=onList` | |||
| }) | |||
| }, | |||
| //跳转充值页面 | |||
| toPurse() { | |||
| uni.navigateTo({ | |||
| url: '/pages/purse/purse' | |||
| }) | |||
| }, | |||
| //跳转提现页面 | |||
| toWithdraw() { | |||
| uni.navigateTo({ | |||
| url: '/pages/withdraw/withdraw' | |||
| }) | |||
| }, | |||
| //显示客服列表 | |||
| revealServiceList() { | |||
| this.showService = true; | |||
| }, | |||
| //关闭客服列表 | |||
| closeServiceList() { | |||
| this.showService = false; | |||
| }, | |||
| //跳转说明页面(六合一) | |||
| toinstructions(index) { | |||
| this.$play() | |||
| uni.navigateTo({ | |||
| url: `/pages/instructions/instructions?index=${index}` | |||
| }) | |||
| }, | |||
| //获取首页图标 | |||
| getIndexIcon() { | |||
| this.request('indexIcon').then(res => { | |||
| if (res.code == 200) { | |||
| this.onList = res.result.onList; | |||
| this.outList = res.result.outList; | |||
| } | |||
| }) | |||
| }, | |||
| //获取vip套餐 | |||
| getVipShop() { | |||
| this.request('vipShop').then(res => { | |||
| if (res.code == 200) { | |||
| res.result.forEach(item => { | |||
| if (this.vipInfo && item.id == this.vipInfo.id) { | |||
| item.current = true | |||
| } | |||
| }) | |||
| this.vipList = res.result | |||
| } | |||
| }) | |||
| }, | |||
| //获取通知 | |||
| getNotice() { | |||
| this.request('indexNotice').then(res => { | |||
| if (res.code == 200) { | |||
| this.notification = res.result | |||
| } | |||
| }) | |||
| }, | |||
| //用户点击菜单 | |||
| clickMenu(index) { | |||
| this.$play() | |||
| if (index == 0) { | |||
| this.revealServiceList() | |||
| } | |||
| if (index == 1) { | |||
| this.toCertificate() | |||
| } | |||
| if (index == 2) { | |||
| this.toPurse() | |||
| } | |||
| if (index == 3) { | |||
| this.toWithdraw() | |||
| } | |||
| }, | |||
| //获取用户信息 | |||
| getUserInfo() { | |||
| this.request('userInfo').then(res => { | |||
| if (res.code == 200) { | |||
| this.userInfo = res.result.userInfo | |||
| this.vipInfo = res.result.vip | |||
| this.getVipShop() | |||
| } | |||
| }) | |||
| }, | |||
| //忘记密码(获取客服列表) | |||
| forgetPass() { | |||
| this.request('forgetPass').then(res => { | |||
| if (res.code == 200) { | |||
| this.serverList = res.result | |||
| } | |||
| }) | |||
| }, | |||
| //跳转签到页面 | |||
| toSignin() { | |||
| this.$play() | |||
| uni.navigateTo({ | |||
| url: '/pages/signIn/signIn' | |||
| }) | |||
| } | |||
| } | |||
| } | |||
| </script> | |||
| <style lang="scss" scoped> | |||
| .home { | |||
| width: 750rpx; | |||
| min-height: 100vh; | |||
| margin: 0 auto; | |||
| // background-color: black; | |||
| // background-image: url('@/static/home/bg.png'); | |||
| background-size: 100%; | |||
| background-repeat: no-repeat; | |||
| // color: white; | |||
| padding-bottom: 200rpx; | |||
| .content { | |||
| width: 96%; | |||
| margin: 0 auto; | |||
| } | |||
| .home-top { | |||
| display: flex; | |||
| justify-content: space-between; | |||
| align-items: center; | |||
| height: 60rpx; | |||
| padding: 20rpx 0rpx; | |||
| .menu-icon { | |||
| image { | |||
| width: 50rpx; | |||
| height: 50rpx; | |||
| } | |||
| } | |||
| .logo { | |||
| image { | |||
| width: 260rpx; | |||
| } | |||
| } | |||
| .sign { | |||
| image { | |||
| width: 60rpx; | |||
| } | |||
| } | |||
| } | |||
| .user-info { | |||
| display: flex; | |||
| flex-direction: column; | |||
| align-items: center; | |||
| margin: 20rpx 0rpx; | |||
| .user-name { | |||
| font-size: 34rpx; | |||
| } | |||
| .member-image { | |||
| image { | |||
| width: 150rpx; | |||
| height: 110rpx; | |||
| } | |||
| } | |||
| } | |||
| .menu-list, | |||
| .agreement-list { | |||
| display: flex; | |||
| flex-wrap: wrap; | |||
| justify-content: space-around; | |||
| text-align: center; | |||
| .menu-item, | |||
| .agreement-item { | |||
| display: flex; | |||
| flex-direction: column; | |||
| align-items: center; | |||
| width: calc(25% - 20px); | |||
| flex-shrink: 0; | |||
| image { | |||
| width: 110rpx; | |||
| height: 110rpx; | |||
| } | |||
| .menu-descript { | |||
| box-sizing: border-box; | |||
| width: 100%; | |||
| text-align: center; | |||
| word-break: break-all; | |||
| font-size: 24rpx; | |||
| margin: 10rpx 0rpx; | |||
| padding: 0rpx 12rpx; | |||
| } | |||
| } | |||
| .agreement-item { | |||
| font-size: 19rpx; | |||
| image { | |||
| width: 90rpx; | |||
| height: 90rpx; | |||
| } | |||
| } | |||
| } | |||
| .agreement-list { | |||
| padding-bottom: 40rpx; | |||
| } | |||
| .member-list { | |||
| display: flex; | |||
| flex-wrap: wrap; | |||
| justify-content: space-between; | |||
| margin: 20rpx auto; | |||
| .member-item { | |||
| position: relative; | |||
| box-sizing: border-box; | |||
| padding: 15rpx; | |||
| width: calc(50% - 10rpx); | |||
| border-radius: 10rpx; | |||
| border: 1px solid #00000080; | |||
| margin-bottom: 25rpx; | |||
| .status-icon { | |||
| box-sizing: border-box; | |||
| position: absolute; | |||
| width: 100%; | |||
| display: flex; | |||
| justify-content: flex-end; | |||
| padding: 0rpx 20rpx; | |||
| .current { | |||
| display: flex; | |||
| align-items: center; | |||
| justify-content: center; | |||
| width: 120rpx; | |||
| background-image: url('@/static/home/current.png'); | |||
| background-size: 100%; | |||
| background-repeat: no-repeat; | |||
| color: black; | |||
| font-size: 25rpx; | |||
| } | |||
| } | |||
| .img-box { | |||
| display: flex; | |||
| justify-content: center; | |||
| width: 150rpx; | |||
| height: 110rpx; | |||
| overflow: hidden; | |||
| margin: 20rpx auto; | |||
| image { | |||
| width: 150rpx; | |||
| height: 110rpx; | |||
| } | |||
| } | |||
| .menber-descript { | |||
| text-align: center; | |||
| color: $uni-bg-color-app; | |||
| font-size: 28rpx; | |||
| margin-bottom: 10rpx; | |||
| } | |||
| .equity-list { | |||
| // color: white; | |||
| font-size: 20rpx; | |||
| padding-bottom: 40rpx; | |||
| .equity-item { | |||
| padding-left: 15rpx; | |||
| position: relative; | |||
| word-break: break-all; | |||
| &::before { | |||
| position: absolute; | |||
| left: 0; | |||
| top: 10rpx; | |||
| content: ''; | |||
| width: 5rpx; | |||
| height: 5rpx; | |||
| background: white; | |||
| border-radius: 50%; | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| </style> | |||
| @ -0,0 +1,145 @@ | |||
| <!-- 说明页面(四合一) --> | |||
| <template> | |||
| <view class="instructions bx"> | |||
| <navbar :leftClick="leftClick" :title="title"></navbar> | |||
| <!-- T&C --> | |||
| <!-- <view v-if="$route.query.index==0" class="t-c content"> | |||
| 1. UAV Boost Sales Tasks1.1) Reset account minimum deposit of $100.ll. Cash Withdrawal2.1)The maximum | |||
| withdrawal amount for ViP1 users is$20,000, and there is no maximum withdrawal limit forVIP2 and above.2.2) | |||
| After completing all tasks, users can apply for fulwithdrawal.2.3) During the process of boosting sales, | |||
| users cannotapply for cash withdrawals or refunds.2.4)Users need to submit a cash withdrawal applicatioto | |||
| the platform in order to receive payment.ll. Funds(3.1) All user funds will be kept safely in the | |||
| useraccount, and you can apply for full withdrawal after thesales promotion is completed(3.2) In order to | |||
| avoid loss of funds, all funds will behandled by the system, not manually.(3.3)lf any accidental loss of | |||
| funds, the platform wilassume full responsibility.IV. Account Security4.1) Each user can only apply for one | |||
| workstationaccount.4.2)Please do not disclose your password to othersand the Platform wil not be responsible | |||
| for any loss caused by this.(4.3)Users are not recommended to set their birthdaypassword, lD number or cell | |||
| phone number as thewithdrawal password or login password.(4.4) lf you forget your login password or | |||
| withdrawalpassword, you can contact online customer service toreset it.(4.5)User and Merchant Confdentiality | |||
| Agreement(4.5.1)The tasks to be accomplished on this platformare all data completed by real users in real | |||
| time, sousers must ensure the confdentiality of the tasks andthe security of the platform. | |||
| </view> --> | |||
| <!-- Event --> | |||
| <!-- <view v-if="$route.query.index==1" class="event content"> | |||
| <image src="@/static/instructions/desc.png" mode="aspectFit"></image> | |||
| <view class="event-content"> | |||
| As a platform user, users can use the invitation code toinvite others to join your team after becoming a | |||
| VIP3member.In return, referrers will receive a percentage oreferral fees, which will be credited | |||
| directly to users viaplatform accounts or team reports.Notice!All users and their referrals will receive | |||
| a percentage olreferral fees and bonuses User and Business NonDisclosureAgreementAs the tasks to be | |||
| completed on this platform are realtime data done by real usersTherefore, the users must ensure the | |||
| tasksconfdentiality and platform. | |||
| </view> | |||
| </view> --> | |||
| <!-- FAQ --> | |||
| <!-- <view v-if="$route.query.index==2" class="faq content"> | |||
| 1. UAV Boost Sales Tasks1.1) Reset account minimum deposit of $100.ll. Cash Withdrawal2.1)The maximum withdrawal amount for ViP1 users is$20,000, and there is no maximum withdrawal limit forVIP2 and above.2.2) After completing all tasks, users can apply for fulwithdrawal.2.3) During the process of boosting sales, users cannotapply for cash withdrawals or refunds.2.4)Users need to submit a cash withdrawal applicatioto the platform in order to receive payment.ll. Funds(3.1) All user funds will be kept safely in the useraccount, and you can apply for full withdrawal after thesales promotion is completed(3.2) In order to avoid loss of funds, all funds will behandled by the system, not manually.(3.3)lf any accidental loss of funds, the platform wilassume full responsibility.IV. Account Security4.1) Each user can only apply for one workstationaccount.4.2)Please do not disclose your password to othersand the Platform wil not be responsible for any loss caused by this.(4.3)Users are not recommended to set their birthdaypassword, lD number or cell phone number as thewithdrawal password or login password.(4.4) lf you forget your login password or withdrawalpassword, you can contact online customer service toreset it.(4.5)User and Merchant Confdentiality Agreement(4.5.1)The tasks to be accomplished on this platformare all data completed by real users in real time, sousers must ensure the confdentiality of the tasks andthe security of the platform. | |||
| </view> --> | |||
| <!-- About --> | |||
| <!-- <view v-if="$route.query.index==3" class="about-us content"> | |||
| Fueled by a passion to solve real world problemsArcsky was founded by Wilson Lau and Justin Squire in 2019 in Minneapolis, Minnesota. Originating from ashared interest in applying targeted electrical andmechanical engineering solutions to common problemsfaced by modern day drone use, the company wasfounded around the idea of practical solutions to extenflight time, payload capacity, and transmission range,while maintaining a strict focus on effciency, sensibilityand coherence in desian. Our industrial drones offersome of the highest performance in their class, with aflexibility that is unmatched.We continue to push the boundaries and work towards innovative solutions that help redefne how unmannedvehicles can beneft the world. | |||
| </view> --> | |||
| <view class="content"> | |||
| <view v-if="$route.query.index == 4" v-html="$t('page.instructions.agreement')"></view> | |||
| <u-parse v-else :content="info[type[$i18n.locale]]"></u-parse> | |||
| </view> | |||
| </view> | |||
| </template> | |||
| <script> | |||
| import navbar from '@/components/base/m-navbar.vue' | |||
| export default { | |||
| components: { | |||
| navbar | |||
| }, | |||
| computed : { | |||
| info(){ | |||
| let data = this[this.$route.query.type || 'outList'][this.$route.query.index] | |||
| if(!data) return {} | |||
| return data | |||
| }, | |||
| title(){ | |||
| let key = this.$route.query.type == 'onList' ? 'onTitleList' : 'titleList' | |||
| return this.$t(`page.instructions.${this[key][this.$route.query.index]}`) | |||
| } | |||
| }, | |||
| data() { | |||
| return { | |||
| titleList: ['tcTitle', 'eventTitle', 'faqTitle', 'aboutTtitle','agreementTitle'], | |||
| onTitleList: ['', 'certificate'], | |||
| onList : [], | |||
| outList : [], | |||
| type : { | |||
| en : 'englishValue', | |||
| es : "spanishValue", | |||
| "zh" : "chineseValue" | |||
| }, | |||
| } | |||
| }, | |||
| onShow() { | |||
| if(this.$route.query.index != 4){ //注册页面跳转过来的就不用登录,不然会一直跳登录页面去 | |||
| this.getIndexIcon() | |||
| } | |||
| }, | |||
| methods: { | |||
| leftClick() { | |||
| let url = this.$route.query.index == 4 ? '/pages/register/register' : "/pages/home/home" | |||
| uni.navigateTo({ | |||
| url | |||
| }) | |||
| }, | |||
| //获取首页图标 | |||
| getIndexIcon(){ | |||
| this.request('indexIcon').then(res => { | |||
| if(res.code == 200){ | |||
| this.onList = res.result.onList; | |||
| this.outList = res.result.outList; | |||
| } | |||
| }) | |||
| }, | |||
| } | |||
| } | |||
| </script> | |||
| <style lang="scss" scoped> | |||
| .instructions { | |||
| width: 750rpx; | |||
| min-height: 100vh; | |||
| background-color: black; | |||
| margin: 0 auto; | |||
| background-size: 100%; | |||
| background-repeat: no-repeat; | |||
| color: white; | |||
| .content { | |||
| width: 96%; | |||
| margin: 20rpx auto; | |||
| font-size: 28rpx; | |||
| } | |||
| .t-c, | |||
| .event, | |||
| .faq, | |||
| .about-us{ | |||
| padding-top: 60rpx; | |||
| } | |||
| .event { | |||
| image { | |||
| width: 750rpx; | |||
| height: 1000rpx; | |||
| } | |||
| } | |||
| } | |||
| </style> | |||
| @ -0,0 +1,135 @@ | |||
| <template> | |||
| <view class="invitation-list bx"> | |||
| <navbar :leftClick="leftClick" :title="$t('page.invitationList.title')"></navbar> | |||
| <!-- 粉丝列表 --> | |||
| <u-list v-if="fanList.length > 0" @scrolltolower="scrolltolower" height="calc(100vh - 90rpx)"> | |||
| <view class="fan-list"> | |||
| <view v-for="item in fanList" class="fan-item"> | |||
| <view class="fan-item-left"> | |||
| <image src="@/static/center/5.png" mode="aspectFit"></image> | |||
| <view class="username">{{ item.account}}</view> | |||
| </view> | |||
| <view class="fan-item-right">{{ item.createTime }}</view> | |||
| </view> | |||
| </view> | |||
| </u-list> | |||
| <!-- 无粉丝 --> | |||
| <view v-else class="noFans">{{ $t('page.invitationList.noFans') }}</view> | |||
| </view> | |||
| </template> | |||
| <script> | |||
| import navbar from '@/components/base/m-navbar.vue' | |||
| export default { | |||
| components: { | |||
| navbar | |||
| }, | |||
| data() { | |||
| return { | |||
| queryparams : { | |||
| pageNo : 1, | |||
| pageSize : 10 | |||
| }, | |||
| fanList : [] | |||
| } | |||
| }, | |||
| onShow() { | |||
| this.getFanList() | |||
| }, | |||
| methods: { | |||
| leftClick() { | |||
| uni.navigateTo({ | |||
| url: '/pages/home/home' | |||
| }) | |||
| }, | |||
| //获取粉丝列表 | |||
| getFanList(){ | |||
| this.request('fansPage', {}, this.queryparams).then(res => { | |||
| if (res.code == 200) { | |||
| this.fanList = res.result.records | |||
| } | |||
| }) | |||
| }, | |||
| //滑动到页面底部 | |||
| scrolltolower(){ | |||
| this.queryparams.pageSize += 10 | |||
| this.getFanList() | |||
| } | |||
| } | |||
| } | |||
| </script> | |||
| <style lang="scss" scoped> | |||
| .invitation-list { | |||
| width: 750rpx; | |||
| min-height: 100vh; | |||
| background-color: black; | |||
| margin: 0 auto; | |||
| background-size: 100%; | |||
| background-repeat: no-repeat; | |||
| color: white; | |||
| .noFans{ | |||
| height: 100vh; | |||
| display: flex; | |||
| align-items: center; | |||
| justify-content: center; | |||
| color: #ffffff80; | |||
| } | |||
| .fan-list{ | |||
| width: 96%; | |||
| margin: 0rpx auto; | |||
| padding-top: 20rpx; | |||
| border: 1px solid #ffffff80; | |||
| margin-top: 20rpx; | |||
| .fan-item{ | |||
| display: flex; | |||
| justify-content: space-between; | |||
| align-items: center; | |||
| border-bottom: 1px solid #ffffff80; | |||
| padding: 20rpx; | |||
| box-sizing: border-box; | |||
| &:last-child{ | |||
| border: none; | |||
| } | |||
| .fan-item-left{ | |||
| width: 200rpx; | |||
| display: flex; | |||
| align-items: center; | |||
| overflow: hidden; | |||
| image{ | |||
| width: 100rpx; | |||
| height: 100rpx; | |||
| border-radius: 50%; | |||
| } | |||
| .username{ | |||
| width: calc(100% - 120rpx); | |||
| margin-left: 20rpx; | |||
| white-space: normal; | |||
| text-overflow: ellipsis; | |||
| overflow: hidden; | |||
| } | |||
| } | |||
| .fan-item-right{ | |||
| width: calc(100% - 200rpx); | |||
| text-align: right; | |||
| font-size: 20rpx; | |||
| color: #ccc; | |||
| } | |||
| } | |||
| } | |||
| } | |||
| </style> | |||
| @ -0,0 +1,91 @@ | |||
| <template> | |||
| <view class="contactCustomerService"> | |||
| <u-navbar :title="$route.query.title"> | |||
| <view slot="left" class="back"> | |||
| <u-icon @click="toLogin()" name="arrow-left"></u-icon> | |||
| </view> | |||
| </u-navbar> | |||
| <view class="img"> | |||
| <img width="200px" :src="kf.keyImage" alt="" /> | |||
| </view> | |||
| <view class="text"> | |||
| {{ $t('page.contactCustomerService.text') }} | |||
| </view> | |||
| <view class="text"> | |||
| {{ kf.keyPhone }} | |||
| </view> | |||
| <button class="btn" @click="copy"> | |||
| {{ $t('page.contactCustomerService.copy') }} | |||
| </button> | |||
| </view> | |||
| </template> | |||
| <script> | |||
| export default { | |||
| data() { | |||
| return { | |||
| kf: {} | |||
| }; | |||
| }, | |||
| onShow() { | |||
| this.getData() | |||
| }, | |||
| methods: { | |||
| getData() { | |||
| this.request('getKeFu').then(res => { | |||
| this.kf = res.result | |||
| }) | |||
| }, | |||
| toLogin() { | |||
| let query = this.$route.query; | |||
| if (query.url && query.id) { | |||
| return uni.navigateTo({ | |||
| url: query.url + '?id=' + query.id | |||
| }) | |||
| } | |||
| uni.navigateTo({ | |||
| url: '/pages/login/login' | |||
| }) | |||
| }, | |||
| copy() { | |||
| uni.setClipboardData({ | |||
| data: this.kf.keyPhone, | |||
| success: () => { | |||
| uni.showToast({ | |||
| title: this.$t('success-operation'), | |||
| icon: 'none' | |||
| }) | |||
| } | |||
| }) | |||
| } | |||
| } | |||
| } | |||
| </script> | |||
| <style lang="scss" scoped> | |||
| .contactCustomerService { | |||
| height: 100vh; | |||
| width: 100%; | |||
| background-color: #fff; | |||
| display: flex; | |||
| flex-direction: column; | |||
| justify-content: center; | |||
| align-items: center; | |||
| flex-wrap: wrap; | |||
| .text { | |||
| box-sizing: border-box; | |||
| padding: 10px; | |||
| text-align: center; | |||
| } | |||
| .btn { | |||
| border-radius: 5px; | |||
| height: 30px; | |||
| font-size: 13px; | |||
| line-height: 30px; | |||
| background-color: #ED762F; | |||
| color: #fff; | |||
| } | |||
| } | |||
| </style> | |||
| @ -0,0 +1,281 @@ | |||
| <!-- 登录页面 --> | |||
| <template> | |||
| <view class="login bx"> | |||
| <!-- 背景图片 --> | |||
| <view class="bg-box"> | |||
| <image @click="showSelectLanguageProp" class="language" src="@/static/login/language.png" mode="aspectFit"></image> | |||
| <image src="@/static/login/logo.png" mode="aspectFit"></image> | |||
| </view> | |||
| <!-- 加载效果 --> | |||
| <loading :loading="loading" @close="closeLoading"></loading> | |||
| <view v-if="!loading" class="main"> | |||
| <!-- 登录标题 --> | |||
| <view class="login-title"> | |||
| <view class="title">{{ $t('page.login.title') }}</view> | |||
| <view class="login-descript">{{ $t('page.login.please-login') }}</view> | |||
| </view> | |||
| <!-- 输入框列表 --> | |||
| <view class="input-list"> | |||
| <view class="input-item"> | |||
| <view class="input-descript">{{ $t('page.login.username') }}</view> | |||
| <input v-model="form.account" type="text" :placeholder="$t('page.login.username-placeholder')" /> | |||
| </view> | |||
| <view class="input-item"> | |||
| <view class="input-descript">{{ $t('page.login.password') }}</view> | |||
| <input v-model="form.pass" type="password" :placeholder="$t('page.login.password-placeholder')" /> | |||
| </view> | |||
| </view> | |||
| <!-- 忘记密码 --> | |||
| <view class="forgot-password"> | |||
| <text @click="forgetPass">{{ $t('page.login.forgot-password') }}</text> | |||
| </view> | |||
| <!-- 按钮组 --> | |||
| <view class="btns"> | |||
| <view @click="Login" class="now-login-btn">{{ $t('page.login.login') }}</view> | |||
| <view @click="toRegister" class="now-register-btn">{{ $t('page.login.register') }}</view> | |||
| </view> | |||
| </view> | |||
| <!-- 切换语言 --> | |||
| <changeLanguage :show.sync="showSelectLanguage" @close="closeSelectLanguageProp"></changeLanguage> | |||
| <!-- 客服列表 --> | |||
| <serviceList :show="showService" :serverList="serverList" @close="closeServiceList"></serviceList> | |||
| <!-- 初始页面 --> | |||
| <pageInit></pageInit> | |||
| </view> | |||
| </template> | |||
| <script> | |||
| import changeLanguage from '../../components/changeLanguage/changeLanguage.vue'; | |||
| import serviceList from '@/components/serviceList/serviceList.vue'; | |||
| import pageInit from '@/components/pageInit/pageInit.vue' | |||
| import loading from '@/components/pageInit/loading.vue' | |||
| export default { | |||
| components : { changeLanguage , serviceList , pageInit , loading }, | |||
| data() { | |||
| return { | |||
| form: { | |||
| account: '', | |||
| pass: '', | |||
| loginIp : '' | |||
| }, | |||
| showSelectLanguage : false, | |||
| showService : false, | |||
| serverList : [], | |||
| loading : true | |||
| } | |||
| }, | |||
| created() { | |||
| }, | |||
| methods: { | |||
| //登录 | |||
| Login() { | |||
| this.$play() | |||
| let _self = this; | |||
| let { account , pass } = this.form | |||
| if(account.trim() == ''){ | |||
| return uni.showToast({title: this.$t('page.login.accountEmpty'),icon : 'none'}); | |||
| } | |||
| if(pass.trim() == ''){ | |||
| return uni.showToast({title: this.$t('page.login.passEmpty'),icon : 'none'}); | |||
| } | |||
| return uni.request({ | |||
| url: 'https://api.ipify.org?format=json', | |||
| success: function(res) { | |||
| _self.form.loginIp = res.data.ip; | |||
| _self.request('login', {}, _self.form).then(res => { | |||
| if(res.code == 200){ | |||
| localStorage.setItem("userInfo",JSON.stringify(res.result.userInfo)) | |||
| localStorage.setItem("token", res.result.token) | |||
| uni.navigateTo({ | |||
| url: '/pages/home/home' | |||
| }) | |||
| } | |||
| }) | |||
| } | |||
| }); | |||
| }, | |||
| //跳转注册页面 | |||
| toRegister() { | |||
| this.$play() | |||
| uni.navigateTo({ | |||
| url: '/pages/register/register' | |||
| }) | |||
| }, | |||
| //显示选择语言弹框 | |||
| showSelectLanguageProp(){ | |||
| this.$play() | |||
| this.showSelectLanguage = true | |||
| }, | |||
| //关闭语言选择弹框 | |||
| closeSelectLanguageProp(){ | |||
| this.showSelectLanguage = false | |||
| }, | |||
| //显示客服列表 | |||
| revealServiceList(){ | |||
| this.$play() | |||
| this.showService = true; | |||
| }, | |||
| //关闭客服列表 | |||
| closeServiceList(){ | |||
| this.showService = false; | |||
| }, | |||
| //关闭加载效果 | |||
| closeLoading(){ | |||
| this.loading = false; | |||
| }, | |||
| //忘记密码 | |||
| forgetPass(){ | |||
| this.request('forgetPass').then(res => { | |||
| if(res.code == 200){ | |||
| this.serverList = res.result | |||
| this.revealServiceList() | |||
| } | |||
| }) | |||
| } | |||
| } | |||
| } | |||
| </script> | |||
| <style lang="scss" scoped> | |||
| .login { | |||
| width: 750rpx; | |||
| height: 100vh; | |||
| margin: 0px auto; | |||
| // background: black; | |||
| // background-image: url('@/static/login/bg.png'); | |||
| background-size: 100%; | |||
| background-repeat: no-repeat; | |||
| box-sizing: border-box; | |||
| padding: 0rpx 20rpx; | |||
| .bg-box { | |||
| position: relative; | |||
| display: flex; | |||
| align-items: center; | |||
| justify-content: center; | |||
| height: 40%; | |||
| .language { | |||
| position: absolute; | |||
| top: 30rpx; | |||
| right: 30rpx; | |||
| width: 60rpx; | |||
| height: 60rpx; | |||
| z-index: 999; | |||
| } | |||
| } | |||
| .login-title { | |||
| padding: 0rpx 10rpx; | |||
| box-sizing: border-box; | |||
| .title { | |||
| font-size: 36rpx; | |||
| font-weight: bold; | |||
| color: $uni-bg-color-app; | |||
| margin-bottom: 10rpx; | |||
| } | |||
| .login-descript { | |||
| font-size: 32rpx; | |||
| color: white; | |||
| margin-bottom: 20rpx; | |||
| } | |||
| } | |||
| .input-list { | |||
| padding: 0rpx 10rpx; | |||
| box-sizing: border-box; | |||
| margin: 40rpx 0rpx; | |||
| .input-item { | |||
| display: flex; | |||
| justify-content: space-between; | |||
| align-items: center; | |||
| border: 1px solid $uni-bg-color-app; | |||
| padding: 20rpx; | |||
| border-radius: 5rpx; | |||
| margin-bottom: 25rpx; | |||
| box-sizing: border-box; | |||
| font-size: 28rpx; | |||
| .input-descript { | |||
| color: $uni-bg-color-app; | |||
| } | |||
| input { | |||
| color: $uni-bg-color-app; | |||
| } | |||
| } | |||
| } | |||
| .forgot-password { | |||
| color: $uni-bg-color-app; | |||
| text-align: center; | |||
| text { | |||
| border-bottom: 1rpx solid #ccc; | |||
| } | |||
| } | |||
| .btns { | |||
| padding: 0rpx 10rpx; | |||
| margin-top: 40rpx; | |||
| color: $uni-bg-color; | |||
| .now-login-btn, | |||
| .now-register-btn { | |||
| background: $uni-bg-color-app; | |||
| border-radius: 10rpx; | |||
| display: flex; | |||
| align-items: center; | |||
| justify-content: center; | |||
| margin-bottom: 20rpx; | |||
| font-weight: bold; | |||
| } | |||
| .now-login-btn { | |||
| height: 90rpx; | |||
| font-size: 40rpx; | |||
| } | |||
| .now-register-btn { | |||
| height: 60rpx; | |||
| width: 90%; | |||
| font-size: 28rpx; | |||
| margin: 0 auto; | |||
| } | |||
| } | |||
| } | |||
| </style> | |||
| @ -0,0 +1,94 @@ | |||
| <template> | |||
| <view class="loginRecord"> | |||
| <navbar :leftClick="leftClick" :title="$t('page.loginRecord.title')"></navbar> | |||
| <u-list | |||
| @scrolltolower="scrolltolower" | |||
| height="calc(100vh - 90rpx)"> | |||
| <u-cell color="#fff" | |||
| v-for="(item, index) in loginRecord"> | |||
| <view slot="title" class="title"> | |||
| <view> | |||
| {{ $t('page.loginRecord.login_time') }} | |||
| </view> | |||
| <view> | |||
| {{ $t('page.loginRecord.login_address') }} | |||
| </view> | |||
| </view> | |||
| <view slot="value" class="value"> | |||
| <view> | |||
| {{ item.createTime }} | |||
| </view> | |||
| <view> | |||
| {{ item.loginIp }} | |||
| </view> | |||
| </view> | |||
| </u-cell> | |||
| </u-list> | |||
| <view v-if="!loginRecord.length" class="noFans"> | |||
| {{ $t('page.loginRecord.Norecord') }} | |||
| </view> | |||
| </view> | |||
| </template> | |||
| <script> | |||
| import navbar from '@/components/base/m-navbar.vue' | |||
| export default { | |||
| components : { navbar }, | |||
| data() { | |||
| return { | |||
| loginRecord : [], | |||
| total : 0, | |||
| queryParams: { | |||
| pageNo: 1, | |||
| pageSize: 10 | |||
| }, | |||
| }; | |||
| }, | |||
| onShow(){ | |||
| this.getIpLogPage() | |||
| }, | |||
| methods : { | |||
| leftClick() { | |||
| uni.navigateTo({ | |||
| url: '/pages/home/home' | |||
| }) | |||
| }, | |||
| //登录记录 | |||
| getIpLogPage(){ | |||
| this.request('getIpLogPage', {}, this.queryParams) | |||
| .then(res => { | |||
| if (res.code == 200) { | |||
| this.loginRecord = res.result.records | |||
| this.total = res.result.total | |||
| } | |||
| }) | |||
| }, | |||
| scrolltolower(){ | |||
| this.queryParams.pageSize += 10 | |||
| this.getIpLogPage() | |||
| }, | |||
| } | |||
| } | |||
| </script> | |||
| <style lang="scss" scoped> | |||
| .loginRecord{ | |||
| .title, | |||
| .value{ | |||
| color: #fff; | |||
| &>view{ | |||
| padding: 10rpx; | |||
| } | |||
| } | |||
| .noFans{ | |||
| height: 100vh; | |||
| display: flex; | |||
| align-items: center; | |||
| justify-content: center; | |||
| color: #ffffff80; | |||
| } | |||
| } | |||
| </style> | |||
| @ -0,0 +1,165 @@ | |||
| <!-- 修改用户信息(二合一) --> | |||
| <template> | |||
| <view class="modify-user"> | |||
| <navbar :leftClick="leftClick" :title="$t(`page.modifyUser.${titles[$route.query.type]}`)"></navbar> | |||
| <!-- 修改pin --> | |||
| <view class="edit-user content"> | |||
| <view class="edit-list"> | |||
| <view class="edit-item"> | |||
| <view class="title">{{ $t('page.modifyUser.oldPassword') }}</view> | |||
| <input type="text" :placeholder="$t('page.modifyUser.oldPasswordPlaceholder')" v-model="form.oldPassword"/> | |||
| </view> | |||
| <view class="edit-item"> | |||
| <view class="title">{{ $t('page.modifyUser.newPassword') }}</view> | |||
| <input type="text" :placeholder="$t('page.modifyUser.newPasswordPlaceholder')" v-model="form.newPassword"/> | |||
| </view> | |||
| <view class="edit-item"> | |||
| <view class="title">{{ $t('page.modifyUser.confirmNewPassword') }}</view> | |||
| <input type="text" :placeholder="$t('page.modifyUser.newPassword')" v-model="form.confirmNewPassword"/> | |||
| </view> | |||
| </view> | |||
| </view> | |||
| <!-- 提交按钮 --> | |||
| <view class="confirm content" @click="submit">{{ $t('page.modifyUser.confirm') }}</view> | |||
| <!-- 提示信息 --> | |||
| <view class="tips content">{{ $t(`page.modifyUser.${tips[$route.query.type]}`) }}</view> | |||
| </view> | |||
| </template> | |||
| <script> | |||
| import navbar from '@/components/base/m-navbar.vue' | |||
| export default { | |||
| components : { navbar }, | |||
| data(){ | |||
| return { | |||
| titles : ['editPinTitle','editPasswordTitle'], | |||
| tips : ['pinTips','passwordTips'], | |||
| form : { | |||
| oldPassword : '', | |||
| newPassword : '', | |||
| confirmNewPassword : '', | |||
| } | |||
| } | |||
| }, | |||
| methods : { | |||
| leftClick() { | |||
| uni.navigateTo({ | |||
| url: '/pages/personalInfo/personalInfo' | |||
| }) | |||
| }, | |||
| //提交 | |||
| submit(){ | |||
| this.$play() | |||
| if (this.form.oldPassword.trim() === '') return uni.$u.toast(this.$t('page.modifyUser.oldPasswordToast')) | |||
| else if (this.form.newPassword.trim() === '') return uni.$u.toast(this.$t('page.modifyUser.newPasswordToast')) | |||
| else if (this.form.confirmNewPassword.trim() === '') return uni.$u.toast(this.$t('page.modifyUser.confirmNewPasswordToast')) | |||
| else if (this.form.confirmNewPassword.trim() != this.form.newPassword.trim()) return uni.$u.toast(this.$t('page.modifyUser.notPasswordToast')) | |||
| if(this.$route.query.type == 0){ //修改pin逻辑 | |||
| this.request('editPayPass', {}, { | |||
| oldPayPass : this.form.oldPassword, | |||
| payPass : this.form.newPassword, | |||
| okPayPass : this.form.confirmNewPassword, | |||
| }).then(res => { | |||
| if(res.code == 200){ | |||
| console.log(res.message); | |||
| uni.$u.toast(this.$t(`message.${res.message}`)) | |||
| setTimeout(() => uni.navigateTo({ | |||
| url: '/pages/personalInfo/personalInfo' | |||
| }), 1000) | |||
| } | |||
| }) | |||
| }else{ //修改密码逻辑 | |||
| this.request('editPass', {}, { | |||
| oldPass : this.form.oldPassword, | |||
| password : this.form.newPassword, | |||
| okPassword : this.form.confirmNewPassword, | |||
| }).then(res => { | |||
| if(res.code == 200){ | |||
| uni.$u.toast(this.$t(`message.${res.message}`)) | |||
| setTimeout(() => uni.navigateTo({ | |||
| url: '/pages/personalInfo/personalInfo' | |||
| }), 1000) | |||
| } | |||
| }) | |||
| } | |||
| } | |||
| } | |||
| } | |||
| </script> | |||
| <style lang="scss" scoped> | |||
| .modify-user{ | |||
| width: 750rpx; | |||
| min-height: 100vh; | |||
| background-color: black; | |||
| margin: 0 auto; | |||
| background-size: 100%; | |||
| background-repeat: no-repeat; | |||
| .content { | |||
| width: 96%; | |||
| margin: 0 auto; | |||
| } | |||
| .edit-user{ | |||
| padding-top: 20rpx; | |||
| .edit-list{ | |||
| border: 1px solid #ccc; | |||
| .edit-item{ | |||
| box-sizing: border-box; | |||
| padding: 15rpx; | |||
| border-bottom: 1px solid #ccc; | |||
| &:last-child{ | |||
| border: none; | |||
| } | |||
| .title{ | |||
| color: #788a1c; | |||
| font-size: 28rpx; | |||
| } | |||
| input{ | |||
| color: #afc638; | |||
| text-indent: 1em; | |||
| height: 60rpx; | |||
| font-size: 28rpx; | |||
| margin-top: 15rpx; | |||
| } | |||
| } | |||
| } | |||
| } | |||
| .confirm{ | |||
| display: flex; | |||
| align-items: center; | |||
| justify-content: center; | |||
| background: #afc638; | |||
| margin: 30rpx auto; | |||
| border-radius: 20rpx; | |||
| height: 80rpx; | |||
| font-size: 40rpx; | |||
| font-weight: bold; | |||
| } | |||
| .tips{ | |||
| color: rgb(191, 118, 112); | |||
| text-align: center; | |||
| font-size: 26rpx; | |||
| padding: 0rpx 20rpx; | |||
| box-sizing: border-box; | |||
| } | |||
| } | |||
| </style> | |||
| @ -0,0 +1,266 @@ | |||
| <template> | |||
| <view class="order bx"> | |||
| <view style="position: fixed; | |||
| height: 210rpx; | |||
| width: 100%; | |||
| z-index: 99; | |||
| background: url(/static/home/bg.png); | |||
| background-color: #000;"> | |||
| </view> | |||
| <view class="order-nav"> | |||
| <navbar | |||
| style="background: transparent;position: fixed;" | |||
| :title="$t('page.order.records')"></navbar> | |||
| </view> | |||
| <u-sticky> | |||
| <view style="width: 100%;display: flex;padding: 20rpx 0rpx;font-size: 28rpx;"> | |||
| <view style="flex: 1; | |||
| text-align: center;padding: 10rpx 0; | |||
| margin: 20rpx;" | |||
| :class="{act : currentIndex == index}" | |||
| @click="tabChange(index)" | |||
| v-for="(item, index) in classifyList"> | |||
| {{ item.name }} | |||
| </view> | |||
| </view> | |||
| </u-sticky> | |||
| <view v-if="!noOrder" class="order-list"> | |||
| <u-list @scrolltolower="scrolltolower" height="calc(100vh - 90rpx)"> | |||
| <view v-for="(item,index) in productList" :key="index" | |||
| class="order-item"> | |||
| <view class="top"> | |||
| <view style="font-size: 28rpx;" class="time"> | |||
| {{ item.createTime }} | |||
| </view> | |||
| <view style="color: #00b25e;border: 1px solid #00b25e; | |||
| padding: 7rpx 15rpx;font-size: 24rpx;" | |||
| v-if="item.state != 0"> | |||
| {{ $t('page.order.Submit_New') }} | |||
| </view> | |||
| <view style="color: #f90;border: 1px solid #f90; | |||
| padding: 7rpx 15rpx;font-size: 24rpx;" | |||
| v-else @click="order = item;show = true;$play()"> | |||
| {{ $t('page.order.pay') }} | |||
| </view> | |||
| </view> | |||
| <view class="con" | |||
| style="border-bottom: 1px solid #afc056; | |||
| padding: 20rpx 0;"> | |||
| <view class="img-box" style="width: 150rpx;height: 150rpx;overflow: hidden;border-radius: 10rpx;display: flex;align-items: center;"> | |||
| <image :src="item.image" mode="widthFix" style="width: 150rpx;"></image> | |||
| </view> | |||
| <view style="font-weight: 900;margin-left: 20rpx;font-size: 28rpx;"> | |||
| {{ item.subTitle }} | |||
| </view> | |||
| </view> | |||
| <view class="con" | |||
| style="margin-top: 20rpx;font-size: 28rpx;font-weight: 500;"> | |||
| <view style="flex: 1;"> | |||
| {{ $t('page.order.Total_Amount') }} | |||
| </view> | |||
| <view style="flex: 1;"> | |||
| {{ $t('page.order.Profit') }} | |||
| </view> | |||
| </view> | |||
| <view class="con" | |||
| style="margin-top: 10rpx; | |||
| color: #afc056;font-weight: 900;font-size: 28rpx;"> | |||
| <view style="flex: 1;"> | |||
| USDT {{ item.price }} | |||
| </view> | |||
| <view style="flex: 1;"> | |||
| USDT {{ item.giveMoney }} | |||
| </view> | |||
| </view> | |||
| </view> | |||
| <view style="justify-content: center;display: flex; | |||
| margin-top: 150rpx;" v-if="loading"> | |||
| <u-loading-icon | |||
| mode="semicircle" | |||
| size="30"></u-loading-icon> | |||
| </view> | |||
| </u-list> | |||
| </view> | |||
| <view v-else class="no-order"> | |||
| <view class="box"> | |||
| <view class="no-product-title">{{ $t('page.order.no-Order') }}</view> | |||
| <view @click="toHome()" class="to-home">{{ $t('page.order.take-stroll')}}</view> | |||
| </view> | |||
| </view> | |||
| <u-modal :show="show" | |||
| :title="$t('page.order.confirm_pay')" | |||
| :confirmText="$t('page.order.ok')" | |||
| :cancelText="$t('page.order.no')" | |||
| @cancel="show = false;$play()" | |||
| @confirm="payOrder" | |||
| :showCancelButton="true" | |||
| ></u-modal> | |||
| <sTabbar select="2"/> | |||
| </view> | |||
| </template> | |||
| <script> | |||
| import navbar from '@/components/base/m-navbar.vue' | |||
| import sTabbar from '@/components/base/tabBar.vue' | |||
| export default { | |||
| components: { | |||
| navbar, | |||
| sTabbar | |||
| }, | |||
| data() { | |||
| return { | |||
| classifyList: [ | |||
| { | |||
| name: this.$t('page.order.class_1') | |||
| }, | |||
| { | |||
| name: this.$t('page.order.class_2') | |||
| }, | |||
| { | |||
| name: this.$t('page.order.class_3') | |||
| }, | |||
| { | |||
| name: this.$t('page.order.class_4') | |||
| }, | |||
| ], | |||
| productList: [], | |||
| currentIndex: 0, //当前选择的标签index | |||
| queryParams: { | |||
| pageNo: 1, | |||
| pageSize: 10 | |||
| }, | |||
| noOrder: false, | |||
| loading : false, | |||
| show : false, | |||
| order : {} | |||
| } | |||
| }, | |||
| onShow() { | |||
| this.getOrderList(); | |||
| this.currentIndex = localStorage.getItem('orderIndex') ? | |||
| parseInt(localStorage.getItem('orderIndex')) : 0 | |||
| localStorage.removeItem('orderIndex') | |||
| }, | |||
| methods: { | |||
| getOrderList() { //获取订单列表 | |||
| this.loading = true | |||
| let data = { | |||
| ...this.queryParams, | |||
| } | |||
| if(this.currentIndex) data.state = this.currentIndex - 1 | |||
| this.request('orderPage', {}, data).then(res => { | |||
| if(res.code == 200){ | |||
| this.loading = false | |||
| this.productList = res.result.records | |||
| } | |||
| }) | |||
| }, | |||
| tabChange(index) { | |||
| if (index != this.currentIndex) { | |||
| this.currentIndex = index | |||
| this.$play() | |||
| this.getOrderList(); | |||
| } | |||
| }, | |||
| payOrder() { | |||
| this.$play() | |||
| uni.showLoading() | |||
| this.request('pay', {}, { | |||
| id : this.order.id | |||
| }).then(res => { | |||
| uni.hideLoading() | |||
| this.show = false | |||
| if (res.code == 200) { | |||
| this.getOrderList(); | |||
| } | |||
| }) | |||
| }, | |||
| toHome(){ //去首页 | |||
| this.$play() | |||
| uni.switchTab({ | |||
| url: '/pages/home/home' | |||
| }) | |||
| }, | |||
| scrolltolower(){ | |||
| this.queryParams.pageSize += 10 | |||
| this.getOrderList() | |||
| } | |||
| } | |||
| } | |||
| </script> | |||
| <style lang="scss" scoped> | |||
| body{ | |||
| background-color: #000 !important; | |||
| } | |||
| .order { | |||
| padding-bottom: 200rpx; | |||
| background-color: black; | |||
| background-image: url('@/static/home/bg.png'); | |||
| background-size: 100%; | |||
| color: white; | |||
| font-weight: bold; | |||
| min-height: 100vh; | |||
| padding-bottom: 200rpx; | |||
| .act{ | |||
| background-color: #afc056; | |||
| border-radius: 10rpx; | |||
| color: black; | |||
| } | |||
| .order-list { | |||
| box-sizing: border-box; | |||
| margin-top: 50px; | |||
| .order-item { | |||
| position: relative; | |||
| background: white; | |||
| padding: 20rpx; | |||
| border-radius: 5px; | |||
| background-color: #333333; | |||
| margin: 0rpx 20rpx 20rpx 20rpx; | |||
| .top{ | |||
| display: flex; | |||
| justify-content: space-between; | |||
| } | |||
| .con{ | |||
| display: flex; | |||
| align-items: center; | |||
| } | |||
| } | |||
| } | |||
| .no-order { | |||
| height: calc(100vh - 138px); | |||
| display: flex; | |||
| align-items: center; | |||
| justify-content: center; | |||
| .box { | |||
| font-size: 26rpx; | |||
| text-align: center; | |||
| .to-home { | |||
| padding: 20rpx 140rpx; | |||
| border: 1px solid #ccc; | |||
| border-radius: 5px; | |||
| text-align: center; | |||
| margin: 20rpx 0px; | |||
| } | |||
| } | |||
| } | |||
| } | |||
| </style> | |||
| @ -0,0 +1,210 @@ | |||
| <!-- 用户信息界面 --> | |||
| <template> | |||
| <view class="personal-info bx"> | |||
| <navbar :leftClick="leftClick" | |||
| :title="$t('page.persionalInfo.title')"></navbar> | |||
| <!-- 基本用户信息 --> | |||
| <view class="base-info content"> | |||
| <view class="base-info-item"> | |||
| <view class="title">{{ $t('page.persionalInfo.profle-image') }}</view> | |||
| <image :src="userInfo.headImage || headImage" mode="aspectFit"></image> | |||
| </view> | |||
| <view class="base-info-item"> | |||
| <view class="title">{{ $t('page.persionalInfo.username') }}</view> | |||
| <view class="name">{{ userInfo.account }}</view> | |||
| </view> | |||
| </view> | |||
| <!-- 修改用户信息按钮组 --> | |||
| <view class="edit-user-info-btns content"> | |||
| <view @click="toModifyUser(0)" class="edit-item"> | |||
| <view class="edit-descript">{{ $t('page.persionalInfo.change-pin') }}</view> | |||
| <uni-icons color="#B0C73B" type="right" size="30rpx"></uni-icons> | |||
| </view> | |||
| <view @click="toModifyUser(1)" class="edit-item"> | |||
| <view class="edit-descript">{{ $t('page.persionalInfo.change-password') }}</view> | |||
| <uni-icons color="#B0C73B" type="right" size="30rpx"></uni-icons> | |||
| </view> | |||
| </view> | |||
| <!-- 填写地址弹框 --> | |||
| <u-popup :show="showAddress" mode="center" bgColor="black" | |||
| @close="showAddress=false"> | |||
| <view class="address-content"> | |||
| <view class="address-top"> | |||
| <view class="title">{{ $t('page.center.Tips') }}</view> | |||
| <uni-icons @click="showAddress=false" | |||
| class="close-icon" | |||
| color="#B0C73B" type="close" | |||
| size="40rpx"></uni-icons> | |||
| </view> | |||
| <view class="address-detail"> | |||
| <view class="title">{{ $t('page.center.Address') }}:</view> | |||
| <textarea | |||
| :placeholder="$t('page.center.type-address')"></textarea> | |||
| </view> | |||
| <view | |||
| class="save">{{ $t('page.center.save') }}</view> | |||
| </view> | |||
| </u-popup> | |||
| </view> | |||
| </template> | |||
| <script> | |||
| import navbar from '@/components/base/m-navbar.vue' | |||
| export default { | |||
| components: { | |||
| navbar | |||
| }, | |||
| data() { | |||
| return { | |||
| userInfo : {}, | |||
| username : '', | |||
| headImage : '/static/personalInfo/user-image.png', | |||
| showAddress : false | |||
| } | |||
| }, | |||
| onShow() { | |||
| this.getUserInfo() | |||
| }, | |||
| methods: { | |||
| getUserInfo(){ | |||
| this.request('userInfo').then(res => { | |||
| if(res.code == 200){ | |||
| this.userInfo = res.result.userInfo | |||
| } | |||
| }) | |||
| }, | |||
| leftClick() { | |||
| uni.navigateTo({ | |||
| url: '/pages/home/home' | |||
| }) | |||
| }, | |||
| updateUser(){ | |||
| this.request('userInfo').then(res => { | |||
| if(res.code == 200){ | |||
| this.userInfo = res.result | |||
| } | |||
| }) | |||
| }, | |||
| //跳转修改用户信息页面(二合一) | |||
| toModifyUser(type){ | |||
| this.$play() | |||
| uni.navigateTo({ | |||
| url: `/pages/modifyUser/modifyUser?type=${type}` | |||
| }) | |||
| } | |||
| } | |||
| } | |||
| </script> | |||
| <style lang="scss" scoped> | |||
| .personal-info { | |||
| width: 750rpx; | |||
| min-height: 100vh; | |||
| background-color: black; | |||
| margin: 0 auto; | |||
| // background-image: url('@/static/personalInfo/bg.png'); | |||
| background-size: 100%; | |||
| background-repeat: no-repeat; | |||
| .content { | |||
| width: 96%; | |||
| margin: 0 auto; | |||
| } | |||
| .base-info , .edit-user-info-btns{ | |||
| border: 1px solid #ffffff80; | |||
| margin: 20rpx auto 30rpx auto; | |||
| .base-info-item , .edit-item{ | |||
| display: flex; | |||
| justify-content: space-between; | |||
| align-items: center; | |||
| height: 100rpx; | |||
| padding: 15rpx 10rpx; | |||
| border-bottom: 1px solid #ffffff80; | |||
| .title , .edit-descript{ | |||
| color: #687527; | |||
| font-size: 28rpx; | |||
| } | |||
| image{ | |||
| width: 100rpx; | |||
| height: 100rpx; | |||
| } | |||
| .name{ | |||
| color: white; | |||
| font-size: 28rpx; | |||
| } | |||
| } | |||
| } | |||
| } | |||
| .address-content { | |||
| box-sizing: border-box; | |||
| border: 1px solid #ffffff80; | |||
| padding: 15rpx; | |||
| .address-top { | |||
| position: relative; | |||
| display: flex; | |||
| align-items: center; | |||
| justify-content: center; | |||
| padding: 30rpx 0rpx; | |||
| .title { | |||
| font-size: 36rpx; | |||
| color: #afc638; | |||
| font-weight: bold; | |||
| } | |||
| .close-icon { | |||
| position: absolute; | |||
| top: 50%; | |||
| right: 30rpx; | |||
| transform: translateY(-50%); | |||
| } | |||
| } | |||
| .address-detail { | |||
| .title { | |||
| color: #afc638; | |||
| margin-bottom: 10rpx; | |||
| font-size: 28rpx; | |||
| } | |||
| textarea { | |||
| border: 1px solid #afc638; | |||
| color: #afc638; | |||
| border-radius: 25rpx; | |||
| height: 150rpx; | |||
| width: 560rpx; | |||
| text-indent: 1em; | |||
| } | |||
| } | |||
| .save{ | |||
| display: flex; | |||
| align-items: center; | |||
| justify-content: center; | |||
| background: #afc638; | |||
| height: 80rpx; | |||
| margin: 20rpx auto; | |||
| border-radius: 20rpx; | |||
| color: black; | |||
| font-size: 34rpx; | |||
| } | |||
| } | |||
| </style> | |||
| @ -0,0 +1,591 @@ | |||
| <template> | |||
| <view class="prizeDraw bx"> | |||
| <!-- <u-loading-page :loading="loading" loadingText="" style="z-index: 999;" bgColor="#000"></u-loading-page> --> | |||
| <!-- 初始页面 --> | |||
| <pageInit></pageInit> | |||
| <view class="title" style="margin-top: 10rpx;"> | |||
| {{ $t('page.prizeDraw.title_1') }} | |||
| </view> | |||
| <view class="profit"> | |||
| <view class="img-box"> | |||
| <image :src="vipInfo.icon" mode="aspectFit"></image> | |||
| </view> | |||
| {{ userInfo.profit }}% {{ $t('page.prizeDraw.profit') }} | |||
| </view> | |||
| <view class="title"> | |||
| {{ $t('page.prizeDraw.title_2') }} | |||
| </view> | |||
| <view class="prize_drone"> | |||
| <scroll-view :scroll-left="scrollLeft" | |||
| scroll-x="true" | |||
| lower-threshold="6" | |||
| @scrolltolower="scrolltolower"> | |||
| <view @mouseenter="cleanTime" class="banner" style="height: 370rpx;"> | |||
| <view @click="gotoDetail(item.url)" v-for="(item, index) in banner" :key="index"> | |||
| <img :src="item.image.split(',')[0]" width="100%" /> | |||
| </view> | |||
| </view> | |||
| </scroll-view> | |||
| <view class="banner3d"> | |||
| <view @click="gotoDetail(item.url)" v-for="(item, index) in | |||
| banner3d" :class="{['banner3d_item_' + item.index] : true}" | |||
| :key="item.id"> | |||
| <img :src="item.image" width="100%" /> | |||
| </view> | |||
| </view> | |||
| </view> | |||
| <view class="title" style="font-size: 38rpx;margin-top: 60rpx;"> | |||
| ({{ userInfo.encourageNum }} / {{ userInfo.encourageSum }}) | |||
| </view> | |||
| <view class="btn" @click="submit"> | |||
| {{ $t('page.prizeDraw.Start') }} | |||
| </view> | |||
| <view class="amount"> | |||
| <view style="font-size: 28rpx;font-weight: normal;" class=""> | |||
| {{ $t('page.prizeDraw.frozen_amount') }} | |||
| </view> | |||
| <view style="color: #afc638;"> | |||
| USDT <text style="margin-left: 10rpx;font-size: 40rpx;"> | |||
| {{ userInfo.freezeMoney }} | |||
| </text> | |||
| </view> | |||
| </view> | |||
| <view class="member-list"> | |||
| <view class="member-item"> | |||
| <view class="img-box"> | |||
| <image src="/static/prizeDraw/23.png" mode="aspectFit"></image> | |||
| </view> | |||
| <view style="font-size: 28rpx;font-weight: normal;" class="title"> | |||
| {{ $t('page.prizeDraw.today_profit') }}</view> | |||
| <view class="menber-descript">USDT {{ userInfo.todayMoney }}</view> | |||
| <view class="equity-list"> | |||
| <view class="equity-item"> | |||
| {{ $t('page.prizeDraw.title_3') }} | |||
| </view> | |||
| </view> | |||
| </view> | |||
| <view class="member-item"> | |||
| <view class="img-box"> | |||
| <image src="/static/prizeDraw/6.png" mode="aspectFit"></image> | |||
| </view> | |||
| <view style="font-size: 28rpx;font-weight: normal;" class="title"> | |||
| {{ $t('page.prizeDraw.account_balance') }}</view> | |||
| <view class="menber-descript">USDT {{ userInfo.money }}</view> | |||
| <view class="equity-list"> | |||
| <view class="equity-item"> | |||
| {{ $t('page.prizeDraw.title_4') }} | |||
| </view> | |||
| </view> | |||
| </view> | |||
| </view> | |||
| <view class="notice"> | |||
| <view style=" | |||
| font-size: 36rpx;"> | |||
| {{ $t('page.prizeDraw.important_notice') }} | |||
| </view> | |||
| <view class="notice-list"> | |||
| <view style="font-size: 30rpx;" class="notice-item"> | |||
| {{ $t('page.prizeDraw.notice_item_1') }} | |||
| </view> | |||
| <view style="font-size: 30rpx;" class="notice-item"> | |||
| {{ $t('page.prizeDraw.notice_item_2') }} | |||
| </view> | |||
| </view> | |||
| </view> | |||
| <sTabbar select="1" /> | |||
| <u-popup :show="show" mode="bottom" @close="show = false;$play()" bgColor="black"> | |||
| <view style="color: #afc638;font-size: 35rpx;text-align: center; | |||
| font-weight: 900;padding: 20rpx;"> | |||
| {{ $t(msg == '31' ? 'message.31' : 'page.prizeDraw.rating_submission') }} | |||
| </view> | |||
| <view style="display: flex;justify-content: center;"> | |||
| <img :src="product.image" width="150rpx" /> | |||
| </view> | |||
| <view style="color: #fff;font-size: 35rpx;text-align: center; | |||
| font-weight: 900;"> | |||
| {{ product.subTitle }} | |||
| </view> | |||
| <view style="display: flex;justify-content: space-around; | |||
| color: #afc638;margin-top: 30rpx;"> | |||
| <view> | |||
| {{ $t('page.prizeDraw.Total_Amount') }} | |||
| </view> | |||
| <view> | |||
| {{ $t('page.prizeDraw.profit') }} | |||
| </view> | |||
| </view> | |||
| <view style="display: flex;justify-content: space-around; | |||
| color: #afc638;margin-top: 30rpx;font-weight: 900;"> | |||
| <view> | |||
| USDT <text style="font-size: 40rpx;">{{ product.price }}</text> | |||
| </view> | |||
| <view> | |||
| USDT <text style="font-size: 40rpx;">{{ product.giveMoney }}</text> | |||
| </view> | |||
| </view> | |||
| <view style="display: flex;justify-content: space-between; | |||
| border-top: 1px solid #555;padding: 30rpx;margin-top: 30rpx;"> | |||
| <view class=""> | |||
| {{ $t('page.prizeDraw.Creation_time') }} | |||
| </view> | |||
| <view class=""> | |||
| {{ product.createTime }} | |||
| </view> | |||
| </view> | |||
| <view style="display: flex;justify-content: space-between; | |||
| border-top: 1px solid #555;border-bottom: 1px solid #555; | |||
| padding: 30rpx;align-items: center;"> | |||
| <view class=""> | |||
| {{ $t('page.prizeDraw.Rating_No') }} | |||
| </view> | |||
| <view class=""> | |||
| {{ product.id }} | |||
| </view> | |||
| </view> | |||
| <view class="btn" @click="payOrder"> | |||
| {{ $t('page.prizeDraw.submit') }} | |||
| </view> | |||
| </u-popup> | |||
| <review :show="reviewShow" @close="reviewClose" :oid="product.id" /> | |||
| <turntable :show="turntableShow" @start="getUserInfo" :info="userInfo" @close="turntableShow = false" /> | |||
| <luckyAnimation ref="an" @close="startSubmit"></luckyAnimation> | |||
| </view> | |||
| </template> | |||
| <script> | |||
| import sTabbar from '@/components/base/tabBar.vue' | |||
| import review from '@/components/review/review.vue'; | |||
| import turntable from '@/components/turntable.vue'; | |||
| import { debounce } from '@/utils/base.js' | |||
| import pageInit from '@/components/pageInit/pageInit.vue' | |||
| import luckyAnimation from '../../components/luckyAnimation/luckyAnimation.vue'; | |||
| export default { | |||
| components: { | |||
| sTabbar, | |||
| review, | |||
| turntable, | |||
| pageInit, | |||
| luckyAnimation | |||
| }, | |||
| data() { | |||
| return { | |||
| loading: false, | |||
| turntableShow: false, | |||
| scrollLeft: 0, | |||
| banner: [], | |||
| banner3d: [], | |||
| invt: null, | |||
| userInfo: {}, | |||
| product: {}, | |||
| show: false, | |||
| reviewShow: false, | |||
| vipInfo: {}, | |||
| msg : null, | |||
| isSubmit : false, | |||
| index3d : 0, | |||
| } | |||
| }, | |||
| onShow() { | |||
| this.getList(); | |||
| this.getUserInfo() | |||
| }, | |||
| onHide() { | |||
| this.end() | |||
| }, | |||
| methods: { | |||
| getUserInfo() { | |||
| this.request('userInfo').then(res => { | |||
| if (res.code == 200) { | |||
| this.userInfo = res.result.userInfo | |||
| this.vipInfo = res.result.vip | |||
| } | |||
| }) | |||
| }, | |||
| scrolltolower(){ | |||
| this.scrollLeft = 0 | |||
| }, | |||
| reviewClose(){ | |||
| this.reviewShow = false; | |||
| if(this.userInfo.bigNum > 0){ | |||
| this.turntableShow = true; | |||
| } | |||
| }, | |||
| startSubmit : debounce(function(){ | |||
| this.request('createOrder').then(res => { | |||
| this.getUserInfo() | |||
| this.isSubmit = false | |||
| if (res.code == 200) { | |||
| this.msg = res.message | |||
| this.product = res.result | |||
| this.show = true | |||
| } | |||
| }).catch(err => { | |||
| this.isSubmit = false | |||
| }) | |||
| }, 500), | |||
| submit() { | |||
| this.$play() | |||
| if(this.isSubmit){ | |||
| return | |||
| } | |||
| this.isSubmit = true | |||
| this.$refs.an.start() | |||
| }, | |||
| payOrder() { | |||
| this.$play() | |||
| this.asyncLoading().then(res => { | |||
| this.request('pay', {}, { | |||
| id: this.product.id | |||
| }).then(res => { | |||
| this.show = false | |||
| if (res.code == 200) { | |||
| this.reviewShow = true | |||
| } | |||
| }) | |||
| }) | |||
| }, | |||
| getList() { | |||
| this.end() | |||
| this.loading = true | |||
| this.banner = [] | |||
| this.banner3d = [] | |||
| Promise.all([this.getShopList(),this.getShopScroll()]).then(res => { | |||
| // this.loading = false | |||
| this.start() | |||
| }) | |||
| }, | |||
| //获取商品列表 | |||
| getShopList(){ | |||
| return this.request('getAppBanner', {}, this.queryParams).then(res => { | |||
| if (res.code == 200) { | |||
| this.banner = res.result | |||
| } | |||
| }) | |||
| }, | |||
| //获取App滚动列表 | |||
| getShopScroll(){ | |||
| return this.request('appScroll').then(res => { | |||
| if (res.code == 200) { | |||
| res.result.map((item, index) => { | |||
| item.index = index | |||
| }) | |||
| this.banner3d = res.result | |||
| } | |||
| }) | |||
| }, | |||
| async asyncLoading(){ | |||
| return new Promise((resolve,reject) => { | |||
| //显示加载框 | |||
| uni.showLoading({ | |||
| title: this.$t('page.prizeDraw.loading') | |||
| }); | |||
| setTimeout(() => { | |||
| uni.hideLoading(); | |||
| resolve() | |||
| },500) | |||
| }) | |||
| }, | |||
| start() { | |||
| this.banner.push(this.banner[0]) | |||
| this.banner.push(this.banner[1]) | |||
| let self = this | |||
| this.invt = setInterval(next, 20) | |||
| let i = 150 | |||
| function next() { | |||
| // 平面图移动 | |||
| self.scrollLeft++ | |||
| // 3d图移动 | |||
| i++ | |||
| if (i >= 60) { | |||
| i = 0 | |||
| self.index3d++ | |||
| self.index3d %= self.banner3d.length | |||
| self.banner3d.forEach(n => { | |||
| if(n.index != 4){ | |||
| n.index = 4 | |||
| } | |||
| }) | |||
| //0 | |||
| self.banner3d[self.index3d].index = 0 | |||
| //6 | |||
| self.banner3d[self.index3d != 0 ? | |||
| self.index3d - 1 : | |||
| self.banner3d.length - 1].index = 6 | |||
| //5 | |||
| self.banner3d[self.index3d >= 2 ? | |||
| self.index3d - 2 : | |||
| self.banner3d.length - 2].index = 5 | |||
| //1 | |||
| self.banner3d[(self.index3d + 1) % self.banner3d.length].index = 1 | |||
| //2 | |||
| self.banner3d[(self.index3d + 2) % self.banner3d.length].index = 2 | |||
| //3 | |||
| self.banner3d[(self.index3d + 3) % self.banner3d.length].index = 3 | |||
| // self.banner3d.forEach(n => { | |||
| // n.index++ | |||
| // n.index %= self.banner3d.length | |||
| // }) | |||
| } | |||
| } | |||
| }, | |||
| end() { | |||
| if (this.invt) { | |||
| clearInterval(this.invt) | |||
| this.invt = null | |||
| } | |||
| }, | |||
| //商品跳转 | |||
| gotoDetail(url){ | |||
| this.$play() | |||
| if(url){ | |||
| window.open(url) | |||
| } | |||
| } | |||
| }, | |||
| } | |||
| </script> | |||
| <style scoped lang="scss"> | |||
| .prizeDraw { | |||
| color: #fff; | |||
| background-size: 100%; | |||
| background-repeat: no-repeat; | |||
| background-position: 0rpx -210rpx; | |||
| padding-bottom: 150rpx; | |||
| width: 750rpx; | |||
| background-image: url('@/static/prizeDraw/bj.jpg'); | |||
| background-size: 100%; | |||
| /deep/ .uni-scroll-view::-webkit-scrollbar { | |||
| width: 0; | |||
| height: 0; | |||
| } | |||
| .title { | |||
| font-weight: 900; | |||
| text-align: center; | |||
| font-size: 28rpx; | |||
| } | |||
| .profit { | |||
| position: relative; | |||
| margin: 0 auto; | |||
| padding: 10rpx 50rpx; | |||
| font-weight: 900; | |||
| background-color: rgb(88, 99, 28); | |||
| width: fit-content; | |||
| border-radius: 20rpx; | |||
| margin: 30rpx auto; | |||
| .img-box { | |||
| display: flex; | |||
| justify-content: center; | |||
| width: 90rpx; | |||
| position: absolute; | |||
| top: 50%; | |||
| left: -40rpx; | |||
| transform: translateY(-50%); | |||
| image { | |||
| width: 70rpx; | |||
| height: 70rpx; | |||
| } | |||
| } | |||
| } | |||
| .prize_drone { | |||
| margin-top: 20rpx; | |||
| .banner { | |||
| display: flex; | |||
| &>view { | |||
| width: calc(50% - 20rpx); | |||
| flex-shrink: 0; | |||
| margin: 0 10rpx; | |||
| cursor: pointer; | |||
| img { | |||
| display: block; | |||
| width: 90%; | |||
| margin: 0rpx auto; | |||
| } | |||
| } | |||
| } | |||
| .banner3d { | |||
| position: relative; | |||
| height: 180rpx; | |||
| margin-top: 100rpx; | |||
| &>view { | |||
| width: 220rpx; | |||
| height: 220rpx; | |||
| position: absolute; | |||
| left: 265rpx; | |||
| transition: all .8s; | |||
| img { | |||
| display: block; | |||
| width: 85%; | |||
| height: 85%; | |||
| margin: 0rpx auto; | |||
| } | |||
| } | |||
| .banner3d_item_0 { | |||
| z-index: 20; | |||
| transform: translateX(0) scale(1.6); | |||
| } | |||
| .banner3d_item_1 { | |||
| z-index: 19; | |||
| transform: translateX(230rpx) scale(.9); | |||
| } | |||
| .banner3d_item_2 { | |||
| z-index: 17; | |||
| transform: translateX(130rpx) scale(.7); | |||
| } | |||
| .banner3d_item_3 { | |||
| z-index: 16; | |||
| transform: translateX(25rpx) scale(0.5); | |||
| } | |||
| .banner3d_item_4 { | |||
| z-index: 16; | |||
| transform: translateX(-25rpx) scale(0.01); | |||
| } | |||
| .banner3d_item_5 { | |||
| z-index: 18; | |||
| transform: translateX(-130rpx) scale(0.7); | |||
| } | |||
| .banner3d_item_6 { | |||
| z-index: 19; | |||
| transform: translateX(-230rpx) scale(.9); | |||
| } | |||
| } | |||
| } | |||
| .btn { | |||
| background-color: #afc638; | |||
| color: #000; | |||
| font-weight: 900; | |||
| margin: 20rpx 40rpx; | |||
| padding: 10rpx 20rpx; | |||
| font-size: 46rpx; | |||
| text-align: center; | |||
| border-radius: 24rpx; | |||
| } | |||
| .amount { | |||
| display: flex; | |||
| margin: 20rpx 40rpx; | |||
| justify-content: space-between; | |||
| border: 3px solid #777; | |||
| padding: 20rpx; | |||
| font-weight: 900; | |||
| color: #aaa; | |||
| align-items: center; | |||
| } | |||
| .member-list { | |||
| display: flex; | |||
| flex-wrap: wrap; | |||
| justify-content: space-between; | |||
| margin: 10rpx 40rpx; | |||
| .member-item { | |||
| box-sizing: border-box; | |||
| padding: 15rpx; | |||
| width: calc(50% - 10rpx); | |||
| border-radius: 10rpx; | |||
| border: 3px solid #777; | |||
| .img-box { | |||
| display: flex; | |||
| justify-content: center; | |||
| width: 100%; | |||
| align-items: center; | |||
| padding-top: 20rpx; | |||
| image { | |||
| width: 130rpx; | |||
| height: 130rpx; | |||
| } | |||
| } | |||
| .menber-descript { | |||
| text-align: center; | |||
| color: #B0C73B; | |||
| font-size: 34rpx; | |||
| margin-top: 10rpx; | |||
| font-weight: 900; | |||
| } | |||
| .equity-list { | |||
| color: #fff; | |||
| text-align: center; | |||
| .equity-item { | |||
| position: relative; | |||
| font-size: 26rpx; | |||
| } | |||
| } | |||
| } | |||
| } | |||
| .notice { | |||
| margin: 20rpx 40rpx; | |||
| font-size: 32rpx; | |||
| .notice-list { | |||
| color: #fff; | |||
| } | |||
| } | |||
| } | |||
| </style> | |||
| @ -0,0 +1,265 @@ | |||
| <!-- 充值界面 --> | |||
| <template> | |||
| <view class="purse bx"> | |||
| <navbar :leftClick="leftClick" :title="$t('page.purse.recharge')"></navbar> | |||
| <!-- 用户余额信息 --> | |||
| <view class="user-money content"> | |||
| <view class="title">{{ $t('page.purse.account') }}</view> | |||
| <view class="money"> | |||
| <view class="money-unit">{{ $t('page.purse.unit') }}</view> | |||
| <view class="money-detail">{{ money }}</view> | |||
| </view> | |||
| </view> | |||
| <!-- 充值方案列表 --> | |||
| <view class="recharge-list content"> | |||
| <view @click="selectRecharge(index)" v-for="(item,index) in rechargeList" :key="item.id" class="recharge-item" :class="{ selectRecharge : index === active}"> | |||
| <view class="money">{{ item.price }}</view> | |||
| <view class="unit">{{ $t('page.purse.unit') }}</view> | |||
| </view> | |||
| </view> | |||
| <!-- 输入框 --> | |||
| <view class="input content"> | |||
| <input @input="moneyChange" v-model="form.money" class="input content" type="number" :placeholder="$t('page.purse.deposit-now')" /> | |||
| </view> | |||
| <view class="input content"> | |||
| <input v-model="form.payPass" class="input content" type="text" :placeholder="$t('page.purse.security-pin')" /> | |||
| </view> | |||
| <!-- 按钮 --> | |||
| <view @click="recharge" class="btn content">{{ $t('page.purse.deposit-now') }}</view> | |||
| <!-- 客服列表 --> | |||
| <serviceList :show="showService" :serverList="serverList" @close="closeServiceList"></serviceList> | |||
| </view> | |||
| </template> | |||
| <script> | |||
| import navbar from '@/components/base/m-navbar.vue' | |||
| import serviceList from '@/components/serviceList/serviceList.vue'; | |||
| export default { | |||
| components: { | |||
| navbar, | |||
| serviceList | |||
| }, | |||
| data() { | |||
| return { | |||
| rechargeList : [], | |||
| active : 0, | |||
| money : '', | |||
| form : { | |||
| money : '', | |||
| payPass : '', | |||
| id : '' | |||
| }, | |||
| serverList : [], | |||
| showService : false | |||
| } | |||
| }, | |||
| onShow() { | |||
| this.getUserInfo() | |||
| this.getTopUpScheme() | |||
| this.forgetPass() | |||
| }, | |||
| methods: { | |||
| leftClick() { | |||
| uni.navigateTo({ | |||
| url: '/pages/home/home' | |||
| }) | |||
| }, | |||
| //选择充值方案 | |||
| selectRecharge(index){ | |||
| this.$play() | |||
| this.active = index | |||
| this.form.money = this.rechargeList[index].price | |||
| this.form.id = this.rechargeList[index].id | |||
| }, | |||
| //获取用户信息 | |||
| getUserInfo(){ | |||
| this.request('userInfo').then(res => { | |||
| if(res.code == 200){ | |||
| this.money = res.result.userInfo.money | |||
| } | |||
| }) | |||
| }, | |||
| //获取充值方案 | |||
| getTopUpScheme(){ | |||
| this.request('shopNo').then(res => { | |||
| if(res.code == 200){ | |||
| this.rechargeList = res.result | |||
| this.form.money = res.result[0].price; //默认选中第一个 | |||
| } | |||
| }) | |||
| }, | |||
| //充值 | |||
| recharge(){ | |||
| this.$play() | |||
| let { money , payPass } = this.form | |||
| if(!money){ | |||
| return uni.$u.toast(this.$t('page.purse.moneyEmpty')) | |||
| } | |||
| if(money <= 0){ | |||
| return uni.$u.toast(this.$t('page.purse.AmountThan0')) | |||
| } | |||
| if(payPass.trim() == ''){ | |||
| return uni.$u.toast(this.$t('page.purse.payPassEmpty')) | |||
| } | |||
| this.request('recharge',{},this.form).then(res => { | |||
| if(res.code == 200){ | |||
| uni.$u.toast(this.$t('page.purse.success')) | |||
| this.cleanForm() | |||
| this.revealServiceList() | |||
| this.getUserInfo() //刷新用户信息(更新用户余额) | |||
| } | |||
| }) | |||
| }, | |||
| //用户手动填写充值金额 | |||
| moneyChange(e){ | |||
| this.active = '' | |||
| let inputValue= e.detail.value; | |||
| this.rechargeList.forEach((recharge,index) => { | |||
| if(parseInt(recharge.price) == inputValue){ | |||
| this.active = index | |||
| } | |||
| }) | |||
| }, | |||
| //显示客服列表 | |||
| revealServiceList(){ | |||
| this.$play() | |||
| this.showService = true; | |||
| }, | |||
| //关闭客服列表 | |||
| closeServiceList(){ | |||
| this.showService = false; | |||
| }, | |||
| //忘记密码(获取客服列表) | |||
| forgetPass(){ | |||
| this.request('forgetPass').then(res => { | |||
| if(res.code == 200){ | |||
| this.serverList = res.result | |||
| } | |||
| }) | |||
| }, | |||
| //清空表单数据 | |||
| cleanForm(){ | |||
| this.form = {} | |||
| } | |||
| } | |||
| } | |||
| </script> | |||
| <style lang="scss" scoped> | |||
| .purse { | |||
| width: 750rpx; | |||
| min-height: 100vh; | |||
| background-color: black; | |||
| margin: 0 auto; | |||
| background-image: url('@/static/pruse/bg.png'); | |||
| background-size: 100%; | |||
| background-repeat: no-repeat; | |||
| .content { | |||
| width: 96%; | |||
| margin: 0 auto; | |||
| } | |||
| .user-money { | |||
| background: rgba(176, 199, 59, .8); | |||
| margin: 20rpx auto 30rpx auto; | |||
| border: 4rpx solid #D3EA5E; | |||
| padding: 60rpx 0rpx; | |||
| font-size: 36rpx; | |||
| .title, | |||
| .money { | |||
| display: flex; | |||
| justify-content: center; | |||
| align-items: center; | |||
| height: 60rpx; | |||
| .money-unit { | |||
| margin-right: 15rpx; | |||
| font-size: 28rpx; | |||
| font-weight: bold; | |||
| } | |||
| .money-detail{ | |||
| font-size: 50rpx; | |||
| font-weight: bold; | |||
| } | |||
| } | |||
| } | |||
| .recharge-list { | |||
| display: flex; | |||
| justify-content: space-between; | |||
| flex-wrap: wrap; | |||
| color: #B0C73B; | |||
| .recharge-item { | |||
| box-sizing: border-box; | |||
| width: calc(50% - 7rpx); | |||
| border: 1px solid #636363; | |||
| text-align: center; | |||
| margin-bottom: 20rpx; | |||
| .money , .unit{ | |||
| height: 60rpx; | |||
| line-height: 60rpx; | |||
| } | |||
| .money{ | |||
| font-size: 44rpx; | |||
| } | |||
| .unit{ | |||
| font-size: 28rpx; | |||
| } | |||
| } | |||
| .selectRecharge{ | |||
| color: white; | |||
| border: 1px solid #D3EA5E; | |||
| background: rgba(176, 199, 59, .8); | |||
| } | |||
| } | |||
| .input{ | |||
| margin: 30rpx auto; | |||
| input{ | |||
| border: 1px solid #B0C73B; | |||
| height: 80rpx; | |||
| font-size: 34rpx; | |||
| color: #B0C73B; | |||
| text-indent: 15rpx; | |||
| border-radius: 10rpx; | |||
| } | |||
| } | |||
| .btn{ | |||
| height: 90rpx; | |||
| display: flex; | |||
| align-items: center; | |||
| justify-content: center; | |||
| background: #B0C73B; | |||
| border-radius: 10rpx; | |||
| font-size: 40rpx; | |||
| font-weight: bold; | |||
| } | |||
| } | |||
| </style> | |||
| @ -0,0 +1,344 @@ | |||
| <!-- 注册页面 --> | |||
| <template> | |||
| <view class="register bx"> | |||
| <!-- 背景图片 --> | |||
| <view class="bg-box"> | |||
| <image @click="showSelectLanguageProp" class="language" src="@/static/login/language.png" mode="aspectFit"> | |||
| </image> | |||
| <image src="@/static/login/logo.png" mode="aspectFit"></image> | |||
| </view> | |||
| <!-- 加载效果 --> | |||
| <loading :loading="loading" @close="closeLoading"></loading> | |||
| <view v-if="!loading" class="main"> | |||
| <!-- 登录标题 --> | |||
| <view class="register-title"> | |||
| <view class="title">{{ $t('page.register.title') }}</view> | |||
| <view class="register-descript">{{ $t('page.register.please-register') }}</view> | |||
| </view> | |||
| <!-- 输入框列表 --> | |||
| <view class="input-list"> | |||
| <view class="input-item"> | |||
| <view class="input-descript">{{ $t('page.register.username') }}</view> | |||
| <input v-model="form.account" type="text" :placeholder="$t('page.register.username-placeholder')" /> | |||
| </view> | |||
| <view class="input-item"> | |||
| <view class="input-descript">{{ $t('page.register.password') }}</view> | |||
| <input v-model="form.password" type="password" | |||
| :placeholder="$t('page.register.password-placeholder')" /> | |||
| </view> | |||
| <view class="input-item"> | |||
| <view class="input-descript">{{ $t('page.register.confirm-password') }}</view> | |||
| <input v-model="form.okPassword" type="password" | |||
| :placeholder="$t('page.register.confirm-password')" /> | |||
| </view> | |||
| <view class="input-item"> | |||
| <view class="input-descript">{{ $t('page.register.PaymentPassword') }}</view> | |||
| <input v-model="form.payPass" type="password" :placeholder="$t('page.register.PaymentPassword-placeholder')" /> | |||
| </view> | |||
| <view class="input-item"> | |||
| <view class="input-descript">{{ $t('page.register.confirm-PaymentPassword') }}</view> | |||
| <input v-model="form.okPayPass" type="password" | |||
| :placeholder="$t('page.register.PaymentPassword-placeholder')" /> | |||
| </view> | |||
| <view class="input-item"> | |||
| <view class="input-descript">{{ $t('page.register.invitation-code') }}</view> | |||
| <input v-model="form.invitationCode" :placeholder="$t('page.register.invitation-code')" /> | |||
| </view> | |||
| </view> | |||
| <!-- 勾选协议 --> | |||
| <view class="check-box"> | |||
| <u-checkbox-group v-model="agree" @change="$play"> | |||
| <u-checkbox activeColor="#B0C73B" | |||
| shape="circle" :label="$t('page.register.agreen')" | |||
| name="agree"></u-checkbox> | |||
| </u-checkbox-group> | |||
| <view @click.stop="toAgreement" class="agreement-content">{{ $t('page.register.agreement') }}</view> | |||
| </view> | |||
| <!-- 忘记密码 | |||
| <view class="forgot-password"> | |||
| <text>{{ $t('page.register.forgot-password') }}</text> | |||
| </view> --> | |||
| <!-- 按钮组 --> | |||
| <view class="btns"> | |||
| <view @click.stop="register" class="now-register-btn">{{ $t('page.register.register') }}</view> | |||
| <view @click.stop="toLogin" class="now-login-btn">{{ $t('page.register.login') }}</view> | |||
| </view> | |||
| </view> | |||
| <!-- 切换语言 --> | |||
| <changeLanguage :show.sync="showSelectLanguage" @close="closeSelectLanguageProp"></changeLanguage> | |||
| <!-- 初始页面 --> | |||
| <pageInit></pageInit> | |||
| </view> | |||
| </template> | |||
| <script> | |||
| import changeLanguage from '../../components/changeLanguage/changeLanguage.vue'; | |||
| import pageInit from '@/components/pageInit/pageInit.vue' | |||
| import loading from '@/components/pageInit/loading.vue' | |||
| export default { | |||
| components: { | |||
| changeLanguage, | |||
| pageInit, | |||
| loading | |||
| }, | |||
| data() { | |||
| return { | |||
| form: { | |||
| account: '', | |||
| password: '', | |||
| okPassword: '', | |||
| payPass: '', | |||
| okPayPass: '', | |||
| invitationCode: '' | |||
| }, | |||
| agree: [], | |||
| showSelectLanguage: false, | |||
| loading: true | |||
| } | |||
| }, | |||
| onShow() { | |||
| }, | |||
| methods: { | |||
| //注册 | |||
| register() { | |||
| this.$play() | |||
| if (this.verify()) { | |||
| this.request('register', {}, this.form).then(res => { | |||
| if (res.code == 200) { | |||
| this.toLogin(false) | |||
| } | |||
| }) | |||
| } | |||
| }, | |||
| //跳转登录页面 | |||
| toLogin(sound) { //是否发出声音 | |||
| if(sound){this.$play()} | |||
| uni.navigateTo({ | |||
| url: '/pages/login/login' | |||
| }) | |||
| }, | |||
| //校验必填项 | |||
| verify() { | |||
| let { | |||
| account, | |||
| password, | |||
| okPassword, | |||
| payPass, | |||
| okPayPass | |||
| } = this.form | |||
| if (account.trim() == '') { | |||
| uni.showToast({title: this.$t('page.register.accountEmpty'),icon : 'none'}); | |||
| return false; | |||
| } | |||
| if (password.trim() == '') { | |||
| uni.showToast({title: this.$t('page.register.passEmpty'),icon : 'none'}); | |||
| return false; | |||
| } | |||
| if (okPassword.trim() == '') { | |||
| uni.showToast({title: this.$t('page.register.okPassEmpty'),icon : 'none'}); | |||
| return false; | |||
| } | |||
| if (password.trim() != okPassword.trim()) { | |||
| uni.showToast({title: this.$t('page.register.passInconsistency'),icon : 'none'}); | |||
| return false; | |||
| } | |||
| if (payPass.trim() == '') { | |||
| uni.showToast({title: this.$t('page.register.payPassEmpty'),icon : 'none'}); | |||
| return false; | |||
| } | |||
| if (okPayPass.trim() == '') { | |||
| uni.showToast({title: this.$t('page.register.okPayPassEmpty'),icon : 'none'}); | |||
| return false; | |||
| } | |||
| if (payPass.trim() != okPayPass.trim()) { | |||
| uni.showToast({title: this.$t('page.register.payPassInconsistency'),icon : 'none'}); | |||
| return false; | |||
| } | |||
| if (this.agree.length <= 0 && this.agree[0] != 'agree') { | |||
| uni.showToast({title: this.$t('page.register.tickProtocol'),icon : 'none'}); | |||
| return false; | |||
| } | |||
| return true | |||
| }, | |||
| //显示选择语言弹框 | |||
| showSelectLanguageProp() { | |||
| this.$play() | |||
| this.showSelectLanguage = true | |||
| }, | |||
| //关闭语言选择弹框 | |||
| closeSelectLanguageProp() { | |||
| this.showSelectLanguage = false | |||
| }, | |||
| //关闭加载效果 | |||
| closeLoading() { | |||
| this.loading = false; | |||
| }, | |||
| //跳转用户协议 | |||
| toAgreement(){ | |||
| this.$play() | |||
| uni.navigateTo({ | |||
| url: '/pages/instructions/instructions?index=4' | |||
| }) | |||
| } | |||
| } | |||
| } | |||
| </script> | |||
| <style lang="scss" scoped> | |||
| .register { | |||
| width: 750rpx; | |||
| height: 100vh; | |||
| margin: 0px auto; | |||
| background: black; | |||
| background-image: url('@/static/login/bg.png'); | |||
| background-size: 100%; | |||
| background-repeat: no-repeat; | |||
| box-sizing: border-box; | |||
| padding: 0rpx 20rpx; | |||
| .bg-box { | |||
| position: relative; | |||
| display: flex; | |||
| align-items: center; | |||
| justify-content: center; | |||
| height: 25%; | |||
| .language { | |||
| position: absolute; | |||
| top: 30rpx; | |||
| right: 30rpx; | |||
| width: 60rpx; | |||
| height: 60rpx; | |||
| z-index: 999; | |||
| } | |||
| } | |||
| .register-title { | |||
| padding: 0rpx 10rpx; | |||
| box-sizing: border-box; | |||
| .title { | |||
| font-size: 36rpx; | |||
| font-weight: bold; | |||
| color: #B0C73B; | |||
| margin-bottom: 10rpx; | |||
| } | |||
| .register-descript { | |||
| font-size: 32rpx; | |||
| color: white; | |||
| margin-bottom: 20rpx; | |||
| } | |||
| } | |||
| .input-list { | |||
| padding: 0rpx 10rpx; | |||
| box-sizing: border-box; | |||
| margin: 40rpx 0rpx; | |||
| .input-item { | |||
| display: flex; | |||
| justify-content: space-between; | |||
| align-items: center; | |||
| border: 1px solid #B0C73B; | |||
| padding: 20rpx; | |||
| border-radius: 5rpx; | |||
| margin-bottom: 25rpx; | |||
| box-sizing: border-box; | |||
| font-size: 28rpx; | |||
| .input-descript { | |||
| color: #B0C73B; | |||
| } | |||
| input { | |||
| color: #B0C73B; | |||
| } | |||
| } | |||
| } | |||
| .forgot-password { | |||
| color: #B0C73B; | |||
| text-align: center; | |||
| text { | |||
| border-bottom: 1rpx solid #ccc; | |||
| } | |||
| } | |||
| .check-box{ | |||
| display: flex; | |||
| color: rgb(96, 98, 102); | |||
| .agreement-content{ | |||
| text-decoration: underline; | |||
| font-size: 28rpx; | |||
| } | |||
| } | |||
| .btns { | |||
| padding: 0rpx 10rpx; | |||
| margin-top: 40rpx; | |||
| .now-login-btn, | |||
| .now-register-btn { | |||
| background: #B0C73B; | |||
| border-radius: 10rpx; | |||
| display: flex; | |||
| align-items: center; | |||
| justify-content: center; | |||
| margin-bottom: 20rpx; | |||
| font-weight: bold; | |||
| } | |||
| .now-login-btn { | |||
| height: 60rpx; | |||
| width: 90%; | |||
| font-size: 28rpx; | |||
| margin: 0 auto; | |||
| } | |||
| .now-register-btn { | |||
| height: 90rpx; | |||
| font-size: 40rpx; | |||
| } | |||
| } | |||
| } | |||
| </style> | |||
| @ -0,0 +1,120 @@ | |||
| <!-- 流水页面 --> | |||
| <template> | |||
| <view class="running-water bx"> | |||
| <navbar :leftClick="leftClick" :title="$t('page.runningWater.title')"></navbar> | |||
| <u-list @scrolltolower="scrolltolower" height="calc(100vh - 90rpx)"> | |||
| <!-- 流水列表 --> | |||
| <view class="running-water-list content"> | |||
| <view v-for="item in runningWaterList" :key="item.id" class="running-water-item"> | |||
| <image src="@/static/runningWater/money.png" mode="aspectFit"></image> | |||
| <view class="descript">[balance]</view> | |||
| <view class="time">{{ item.createTime }}</view> | |||
| <view class="money-detail"> | |||
| <text>{{ item.type == '0' ? '+' : '-' }}</text> | |||
| {{ item.money }} | |||
| </view> | |||
| </view> | |||
| </view> | |||
| </u-list> | |||
| </view> | |||
| </template> | |||
| <script> | |||
| import navbar from '@/components/base/m-navbar.vue' | |||
| export default { | |||
| components: { | |||
| navbar | |||
| }, | |||
| data() { | |||
| return { | |||
| queryparams: { | |||
| pageNo: 1, | |||
| pageSize: 10 | |||
| }, | |||
| runningWaterList: [] | |||
| } | |||
| }, | |||
| onShow() { | |||
| this.getRunningWater() | |||
| }, | |||
| methods: { | |||
| leftClick() { | |||
| uni.navigateTo({ | |||
| url: '/pages/home/home' | |||
| }) | |||
| }, | |||
| //获取流水 | |||
| getRunningWater() { | |||
| this.request('WaterPage', {}, this.queryparams).then(res => { | |||
| if (res.code == 200) { | |||
| this.runningWaterList = res.result.records | |||
| } | |||
| }) | |||
| }, | |||
| //滑动到页面底部 | |||
| scrolltolower(){ | |||
| this.queryparams.pageSize += 10 | |||
| this.getRunningWater() | |||
| } | |||
| } | |||
| } | |||
| </script> | |||
| <style lang="scss" scoped> | |||
| .running-water { | |||
| width: 750rpx; | |||
| min-height: 100vh; | |||
| background-color: black; | |||
| margin: 0 auto; | |||
| background-size: 100%; | |||
| background-repeat: no-repeat; | |||
| .content { | |||
| width: 96%; | |||
| margin: 0 auto; | |||
| } | |||
| .running-water-list { | |||
| display: flex; | |||
| justify-content: space-between; | |||
| flex-wrap: wrap; | |||
| margin-top: 20rpx; | |||
| .running-water-item { | |||
| display: flex; | |||
| flex-direction: column; | |||
| align-items: center; | |||
| box-sizing: border-box; | |||
| padding: 15rpx; | |||
| width: calc(50% - 15rpx); | |||
| border: 1px solid #ffffff80; | |||
| margin-bottom: 25rpx; | |||
| image { | |||
| width: 100rpx; | |||
| height: 100rpx; | |||
| } | |||
| .descript { | |||
| color: #AEC43C; | |||
| font-size: 36rpx; | |||
| } | |||
| .time { | |||
| color: #989898; | |||
| margin: 15rpx 0rpx; | |||
| } | |||
| .money-detail { | |||
| color: #3AA56B; | |||
| font-size: 36rpx; | |||
| } | |||
| } | |||
| } | |||
| } | |||
| </style> | |||
| @ -0,0 +1,360 @@ | |||
| <template> | |||
| <view class="sigin-in bx"> | |||
| <navbar :leftClick="leftClick" :title="$t('page.signIn.title')"></navbar> | |||
| <view class="sigin-in-content"> | |||
| <!-- <view class="title">{{ $t('page.signIn.title') }}</view> --> | |||
| <view class="numberOfSays">{{ $t('page.signIn.sign',[numberOfSays]) }}</view> | |||
| <view class="date-info"> | |||
| <view class="month-info"> | |||
| <view class="left-arrow"> | |||
| <image @click="changeMonth(0)" src="/static/signin/arrow.png" mode="widthFix"></image> | |||
| </view> | |||
| <view class="month">{{ $t(`page.signIn.${monthIndex}`) }}</view> | |||
| <view class="right-arrow"> | |||
| <image @click="changeMonth(1)" src="/static/signin/arrow.png" mode="widthFix"></image> | |||
| </view> | |||
| </view> | |||
| <view class="day-list"> | |||
| <view v-for="(item,index) in dayList" :key="index" class="day-item"> | |||
| <view v-if="item.sign" class="check-img"> | |||
| <image src="/static/signin/check.png" mode="widthFix"></image> | |||
| </view> | |||
| <view class="sort">{{ $t('page.signIn.day',[index + 1])}}</view> | |||
| <view class="img-box"> | |||
| <image src="/static/signin/gift.png" mode="widthFix"></image> | |||
| </view> | |||
| <view class="day">{{ forMateDate(item) }}</view> | |||
| </view> | |||
| </view> | |||
| <view class="tips">{{ tips[type[$i18n.locale]] }}</view> | |||
| <view :class="{ signedIn : userInfo.sginState == 1 }" @click="submitSignin" class="submit">{{ $t('page.signIn.title') }}</view> | |||
| </view> | |||
| </view> | |||
| </view> | |||
| </template> | |||
| <script> | |||
| import navbar from '@/components/base/m-navbar.vue' | |||
| export default { | |||
| components: { | |||
| navbar | |||
| }, | |||
| data() { | |||
| return { | |||
| numberOfSays: 0, //签到天数 | |||
| dayList: [], //日期列表 | |||
| tips: '', //提示 | |||
| type: { | |||
| en: 'keyEnglish', | |||
| es: "keySpanish", | |||
| "zh": "keyChinese" | |||
| }, | |||
| monthIndex: 0, //当前月份(0-11) | |||
| signinList : [], //签到列表 | |||
| userInfo : {} | |||
| } | |||
| }, | |||
| onShow() { | |||
| this.initDate() | |||
| this.getTips() | |||
| this.getSigninList() | |||
| this.getUserInfo() | |||
| }, | |||
| methods: { | |||
| leftClick() { | |||
| uni.navigateTo({ | |||
| url: '/pages/home/home' | |||
| }) | |||
| }, | |||
| //初始化日期列表 | |||
| initDate() { | |||
| if(this.dayList.length >= 28) return | |||
| //保存当前月份 | |||
| this.monthIndex = this.$dayjs().month(); | |||
| // 获取当前日期 | |||
| let now = this.$dayjs(); | |||
| // 获取当前月最后一天的日期 | |||
| let lastDayOfMonth = now.endOf('month'); | |||
| // 获取当前月的天数 | |||
| let daysInMonth = lastDayOfMonth.date(); | |||
| //获取当前月的第一天 | |||
| var firstDay = this.$dayjs().date(1) | |||
| this.dayList.push(firstDay) | |||
| //获取一个月的所有日期 | |||
| for (let i = 1; i < daysInMonth; i++) { | |||
| this.dayList.push(this.$dayjs(firstDay).add(i, 'day')) | |||
| } | |||
| }, | |||
| //格式化时间 | |||
| forMateDate(day) { | |||
| return this.$dayjs(day).format("MM-DD") | |||
| }, | |||
| //获取已签到列表 | |||
| getSigninList() { | |||
| this.request('getSignRecord').then(res => { | |||
| if (res.code == 200) { | |||
| this.signinList = res.result | |||
| this.updateSigninState() | |||
| } | |||
| }) | |||
| }, | |||
| //获取提示签到说明 | |||
| getTips() { | |||
| this.request('getTips').then(res => { | |||
| if (res.code == 200) { | |||
| this.tips = res.result | |||
| } | |||
| }) | |||
| }, | |||
| //签到 | |||
| submitSignin(day) { | |||
| this.$play() | |||
| if(this.userInfo.sginState == 1){ | |||
| return uni.$u.toast(this.$t('message.34')) | |||
| } | |||
| this.request('sign').then(res => { | |||
| if (res.code == 200) { | |||
| uni.$u.toast(this.$t('message.35')) | |||
| this.getSigninList() | |||
| } | |||
| }) | |||
| }, | |||
| //修改当前月份 | |||
| changeMonth(type) { | |||
| this.$play() | |||
| if (!type) { | |||
| if(this.monthIndex <= 0) return | |||
| // 获取当前月份之前的月份 | |||
| this.monthIndex -= 1; | |||
| this.getDays() | |||
| } else { | |||
| if(this.monthIndex >= 11) return | |||
| //获取当前月份之后的月份 | |||
| this.monthIndex += 1 | |||
| this.getDays() | |||
| } | |||
| }, | |||
| //获取过去或者未来的月份所有天 | |||
| getDays(){ | |||
| // 使用当前年份和新的月份索引创建一个日期对象 | |||
| let firstDayOfMonth = this.$dayjs().year(this.$dayjs().year()).month(this.monthIndex).startOf('month'); | |||
| // 获取当前月之前月份的最后一天 | |||
| let lastDayOfMonth = firstDayOfMonth.endOf('month'); | |||
| // 获取当前月之前月份的天数 | |||
| let daysInMonth = lastDayOfMonth.date(); | |||
| // 初始化日期列表 | |||
| this.dayList = []; | |||
| // 遍历这个月的每一天 | |||
| for (let i = 1; i <= daysInMonth; i++) { | |||
| // 添加每一天到列表中 | |||
| this.dayList.push(firstDayOfMonth.add(i - 1, 'day')); | |||
| } | |||
| //更新签到状态 | |||
| this.updateSigninState() | |||
| }, | |||
| //更新签到状态 | |||
| updateSigninState(){ | |||
| this.signinList.forEach(item => { | |||
| let signDate = this.$dayjs(item.signTime).format("YYYY-MM-DD") | |||
| this.dayList.forEach(day => { | |||
| if (day.isSame(signDate, 'day')) { | |||
| this.$set(day, 'sign', true) | |||
| } | |||
| }) | |||
| //统计用户选择的月份签到天数 | |||
| this.countSigninDayNum() | |||
| }) | |||
| }, | |||
| //统计用户选择的月份签到天数 | |||
| countSigninDayNum(){ | |||
| this.numberOfSays = 0; | |||
| let lastIndex = this.getLastDayIndex() | |||
| //计算选择月份连续签到天数 | |||
| for(let j = lastIndex ; j >= 0 ; j--){ | |||
| if(this.dayList[j].sign){ | |||
| this.numberOfSays++ | |||
| }else{ | |||
| return | |||
| } | |||
| } | |||
| }, | |||
| //获取用户选择月份最后一天签到的索引 | |||
| getLastDayIndex() { | |||
| for (let i = this.dayList.length - 1; i >= 0; i--) { | |||
| if (this.dayList[i].sign) { | |||
| return i; | |||
| } | |||
| } | |||
| }, | |||
| //获取用户信息(用户判断用户是否已签到) | |||
| getUserInfo() { | |||
| this.request('userInfo').then(res => { | |||
| if (res.code == 200) { | |||
| this.userInfo = res.result.userInfo | |||
| } | |||
| }) | |||
| }, | |||
| } | |||
| } | |||
| </script> | |||
| <style lang="scss" scoped> | |||
| .sigin-in { | |||
| color: white; | |||
| background: black; | |||
| padding-bottom: 80rpx; | |||
| .sigin-in-content { | |||
| width: 96%; | |||
| margin: 0 auto; | |||
| .title { | |||
| display: flex; | |||
| align-items: center; | |||
| justify-content: center; | |||
| font-size: 40rpx; | |||
| color: #AEC438; | |||
| height: 80rpx; | |||
| } | |||
| .numberOfSays { | |||
| text-align: center; | |||
| padding: 20rpx 0rpx; | |||
| } | |||
| .date-info { | |||
| background: #3E3E3E; | |||
| border-radius: 20rpx; | |||
| box-sizing: border-box; | |||
| padding: 20rpx; | |||
| .month-info { | |||
| display: flex; | |||
| justify-content: center; | |||
| align-items: center; | |||
| margin-bottom: 20rpx; | |||
| .month { | |||
| background: #A4B835; | |||
| padding: 10rpx; | |||
| border-radius: 10rpx; | |||
| margin: 0rpx 15rpx; | |||
| font-size: 30rpx; | |||
| } | |||
| image { | |||
| width: 30rpx; | |||
| } | |||
| .right-arrow { | |||
| image { | |||
| transform: rotate(-180deg); | |||
| } | |||
| } | |||
| } | |||
| .day-list { | |||
| display: flex; | |||
| flex-wrap: wrap; | |||
| .day-item { | |||
| position: relative; | |||
| flex-shrink: 0; | |||
| width: calc(20% - 7px); | |||
| background: #565656; | |||
| border-radius: 20rpx; | |||
| margin-bottom: 20rpx; | |||
| margin-right: calc(35px / 4); | |||
| box-sizing: border-box; | |||
| padding: 10rpx; | |||
| &:nth-child(5n) { | |||
| margin-right: 0rpx; | |||
| } | |||
| .check-img { | |||
| position: absolute; | |||
| right: 4rpx; | |||
| top: -4rpx; | |||
| image { | |||
| width: 30rpx; | |||
| } | |||
| } | |||
| image { | |||
| width: 40rpx; | |||
| margin: 10rpx 0rpx; | |||
| } | |||
| .sort { | |||
| font-size: 20rpx; | |||
| } | |||
| .day { | |||
| font-size: 20rpx; | |||
| border-radius: 20rpx; | |||
| background: #66B53B; | |||
| } | |||
| view { | |||
| display: flex; | |||
| justify-content: center; | |||
| } | |||
| } | |||
| } | |||
| .tips { | |||
| color: #888888; | |||
| font-size: 20rpx; | |||
| text-align: center; | |||
| margin: 20rpx 0rpx; | |||
| } | |||
| .submit { | |||
| display: flex; | |||
| align-items: center; | |||
| justify-content: center; | |||
| height: 80rpx; | |||
| background: #AEC438; | |||
| color: white; | |||
| border-radius: 40rpx; | |||
| margin-bottom: 20rpx; | |||
| } | |||
| .signedIn{ | |||
| background: #ccc; | |||
| } | |||
| } | |||
| } | |||
| } | |||
| </style> | |||
| @ -0,0 +1,149 @@ | |||
| <template> | |||
| <view class="winningRecord bx"> | |||
| <navbar :leftClick="leftClick" :title="$t('page.winningRecord.title')"></navbar> | |||
| <view v-if="turntableRecord.length > 0" class="winningRecord-list"> | |||
| <view v-for="item in turntableRecord" :key="item.id" class="winningRecord-item"> | |||
| <view class="winningRecord-item-left"> | |||
| <image src="@/static/winningRecord/gift.png" mode="aspectFit"></image> | |||
| <view class="detail"> | |||
| <view class="title">{{ $t(`page.winningRecord.${getTurntableDetail(item.bigId,'name')}`) }}</view> | |||
| <view class="money">{{ $t('page.winningRecord.money') }}:{{ getTurntableDetail(item.bigId,'money') }}</view> | |||
| </view> | |||
| </view> | |||
| <view class="winningRecord-item-right"> | |||
| {{ item.createTime}} | |||
| </view> | |||
| </view> | |||
| </view> | |||
| <!-- 无粉丝 --> | |||
| <view v-else class="noFans">{{ $t('page.winningRecord.noPrizesHaveBeenWon') }}</view> | |||
| </view> | |||
| </template> | |||
| <script> | |||
| import navbar from '@/components/base/m-navbar.vue' | |||
| export default { | |||
| components : { navbar }, | |||
| data(){ | |||
| return { | |||
| winningRecordList : [], | |||
| turntableRecord : [] | |||
| } | |||
| }, | |||
| onShow(){ | |||
| this.getTurntable() | |||
| }, | |||
| methods: { | |||
| leftClick() { | |||
| uni.navigateTo({ | |||
| url: '/pages/home/home' | |||
| }) | |||
| }, | |||
| //大转盘记录 | |||
| getTurntableRecord(){ | |||
| this.request('getTurntableRecord').then(res => { | |||
| if (res.code == 200) { | |||
| this.turntableRecord = res.result | |||
| } | |||
| }) | |||
| }, | |||
| //获取大转盘列表 | |||
| getTurntable(){ | |||
| this.request('getTurntableList').then(res => { | |||
| if(res.code == 200){ | |||
| this.winningRecordList = res.result | |||
| this.getTurntableRecord() | |||
| } | |||
| }) | |||
| }, | |||
| //获取中奖详情 | |||
| getTurntableDetail(id, key) { | |||
| const item = this.winningRecordList.find(item => item.id === id); | |||
| return item ? item[key] : {}; // 如果没有找到,可以返回一个默认值 | |||
| } | |||
| } | |||
| } | |||
| </script> | |||
| <style lang="scss" scoped> | |||
| .winningRecord{ | |||
| width: 750rpx; | |||
| min-height: 100vh; | |||
| background-color: black; | |||
| margin: 0 auto; | |||
| background-size: 100%; | |||
| background-repeat: no-repeat; | |||
| color: white; | |||
| .winningRecord-list{ | |||
| width: 96%; | |||
| margin: 0rpx auto; | |||
| margin-top: 20rpx; | |||
| .winningRecord-item{ | |||
| background: #333333; | |||
| padding: 10rpx 20rpx; | |||
| border-radius: 10rpx; | |||
| display: flex; | |||
| justify-content: space-between; | |||
| margin-bottom: 20rpx; | |||
| .winningRecord-item-left{ | |||
| display: flex; | |||
| width: 70%; | |||
| overflow: hidden; | |||
| image{ | |||
| width: 130rpx; | |||
| height: 130rpx; | |||
| } | |||
| .detail{ | |||
| width: calc(100% - 130rpx); | |||
| display: flex; | |||
| flex-direction: column; | |||
| justify-content: space-around; | |||
| padding: 20rpx 0rpx; | |||
| padding-right: 15rpx; | |||
| box-sizing: border-box; | |||
| .title{ | |||
| white-space: nowrap; | |||
| text-overflow: ellipsis; | |||
| overflow: hidden; | |||
| font-size: 30rpx; | |||
| } | |||
| .money{ | |||
| color: #ccc; | |||
| font-size: 26rpx; | |||
| } | |||
| } | |||
| } | |||
| .winningRecord-item-right{ | |||
| display: flex; | |||
| align-items: center; | |||
| justify-content: flex-end; | |||
| font-size: 20rpx; | |||
| color: #ccc; | |||
| width: 30%; | |||
| } | |||
| } | |||
| } | |||
| .noFans{ | |||
| height: 100vh; | |||
| display: flex; | |||
| align-items: center; | |||
| justify-content: center; | |||
| color: #ffffff80; | |||
| } | |||
| } | |||
| </style> | |||
| @ -0,0 +1,308 @@ | |||
| <!-- 提现页面 --> | |||
| <template> | |||
| <view class="withdraw bx"> | |||
| <navbar :leftClick="leftClick" :title="$t('page.withdraw.title')"></navbar> | |||
| <!-- 用户余额信息 --> | |||
| <view class="user-money content"> | |||
| <view class="title">{{ $t('page.purse.account') }}</view> | |||
| <view class="money"> | |||
| <view class="money-unit">{{ $t('page.withdraw.unit') }}</view> | |||
| <view class="money-detail">{{ money }}</view> | |||
| </view> | |||
| </view> | |||
| <view class="withdraw-amount content"> | |||
| <view class="withdraw-title">{{ $t('page.withdraw.withdraw-amount')}}</view> | |||
| <view class="withdraw-content">{{ $t('page.withdraw.withdraw-descript')}}</view> | |||
| </view> | |||
| <!-- 输入框组 --> | |||
| <view class="inputs content"> | |||
| <view class="input-item"> | |||
| <view class="input-top"> | |||
| <view class="title">{{ $t('page.withdraw.withdraw-amount') }}</view> | |||
| <view @click="withdrawAll" class="all">{{ $t('page.withdraw.withdrawal-all') }}</view> | |||
| </view> | |||
| <input v-model="form.money" type="number" :placeholder="$t('page.withdraw.deposit-now')"/> | |||
| </view> | |||
| <view class="input-item"> | |||
| <view class="input-top"> | |||
| <view class="title">{{ $t('page.withdraw.pin') }}</view> | |||
| </view> | |||
| <input v-model="form.payPass" type="text"/> | |||
| </view> | |||
| </view> | |||
| <!-- 提交按钮 --> | |||
| <view @click="withdraw" class="submit content">{{ $t('page.withdraw.submit') }}</view> | |||
| <!-- 超出最大提现金额提示 --> | |||
| <view v-if="showModal" class="modal"> | |||
| <view class="modal-main"> | |||
| <view class="title">{{ $t('page.withdraw.warn') }}</view> | |||
| <view class="tip">{{ $t('page.withdraw.warn-detail') }}</view> | |||
| <view @click="showModal = false;$play()" class="ok">{{ $t('page.withdraw.ok') }}</view> | |||
| </view> | |||
| </view> | |||
| <!-- 客服列表 --> | |||
| <serviceList :show="showService" :serverList="serverList" @close="closeServiceList"></serviceList> | |||
| </view> | |||
| </template> | |||
| <script> | |||
| import navbar from '@/components/base/m-navbar.vue' | |||
| import serviceList from '@/components/serviceList/serviceList.vue'; | |||
| export default { | |||
| components: { | |||
| navbar | |||
| }, | |||
| data() { | |||
| return { | |||
| money : '', | |||
| form : { | |||
| money : '', //提现金额 | |||
| payPass : '' | |||
| }, | |||
| vipInfo : {}, | |||
| showModal : false, //是否显示超出最大提现金额提示 | |||
| serverList : [], | |||
| showService : false | |||
| } | |||
| }, | |||
| onShow() { | |||
| this.getUserInfo() | |||
| this.forgetPass() | |||
| }, | |||
| methods: { | |||
| leftClick() { | |||
| uni.navigateTo({ | |||
| url: '/pages/home/home' | |||
| }) | |||
| }, | |||
| //获取用户信息 | |||
| getUserInfo(){ | |||
| this.request('userInfo').then(res => { | |||
| if(res.code == 200){ | |||
| this.money = res.result.userInfo.money | |||
| this.vipInfo = res.result.vip | |||
| } | |||
| }) | |||
| }, | |||
| //点击提现全部按钮 | |||
| withdrawAll(){ | |||
| this.$play() | |||
| if(!this.money){ | |||
| return uni.$u.toast(this.$t('page.withdraw.noBalance')) | |||
| } | |||
| this.form.money = this.money | |||
| }, | |||
| //提现 | |||
| withdraw(){ | |||
| this.$play() | |||
| let { money , payPass } = this.form; | |||
| if(money <= 0){ | |||
| return uni.$u.toast(this.$t('page.withdraw.creditLimit')) | |||
| } | |||
| // if(money > this.vipInfo.maxPrice){ //提现金额大于当前vip等级最大提现金额(后端给了提示,使用toast展示去了) | |||
| // return this.showModal = true | |||
| // } | |||
| if(money > this.money){ //用户提现金额大于用户余额 | |||
| return uni.$u.toast(this.$t('page.withdraw.insufficientBalance')) | |||
| } | |||
| if(payPass.trim() == ''){ | |||
| return uni.$u.toast(this.$t('page.withdraw.payPassEmpty')) | |||
| } | |||
| this.request('withdrawal',{},this.form).then(res => { | |||
| if(res.code == 200){ | |||
| uni.$u.toast(this.$t('page.withdraw.successfulWithdrawal')) | |||
| this.cleanForm() | |||
| this.revealServiceList() | |||
| this.getUserInfo() //刷新用户信息(更新用户余额) | |||
| } | |||
| }) | |||
| }, | |||
| //显示客服列表 | |||
| revealServiceList(){ | |||
| this.$play() | |||
| this.showService = true; | |||
| }, | |||
| //关闭客服列表 | |||
| closeServiceList(){ | |||
| this.showService = false; | |||
| }, | |||
| //忘记密码(获取客服列表) | |||
| forgetPass(){ | |||
| this.request('forgetPass').then(res => { | |||
| if(res.code == 200){ | |||
| this.serverList = res.result | |||
| } | |||
| }) | |||
| }, | |||
| //清空表单数据 | |||
| cleanForm(){ | |||
| this.form = {} | |||
| } | |||
| } | |||
| } | |||
| </script> | |||
| <style lang="scss" scoped> | |||
| .withdraw { | |||
| width: 750rpx; | |||
| min-height: 100vh; | |||
| background-color: black; | |||
| margin: 0 auto; | |||
| background-image: url('@/static/withdraw/bg.png'); | |||
| background-size: 100%; | |||
| background-repeat: no-repeat; | |||
| .content { | |||
| width: 96%; | |||
| margin: 0 auto; | |||
| } | |||
| .user-money { | |||
| background: rgba(176, 199, 59, .8); | |||
| margin: 20rpx auto 30rpx auto; | |||
| border: 4rpx solid #D3EA5E; | |||
| padding: 60rpx 0rpx; | |||
| font-size: 36rpx; | |||
| .title, | |||
| .money { | |||
| display: flex; | |||
| justify-content: center; | |||
| align-items: center; | |||
| height: 60rpx; | |||
| .money-unit { | |||
| margin-right: 15rpx; | |||
| font-size: 28rpx; | |||
| font-weight: bold; | |||
| } | |||
| .money-detail{ | |||
| font-size: 50rpx; | |||
| font-weight: bold; | |||
| } | |||
| } | |||
| } | |||
| .withdraw-amount{ | |||
| color: #D3EA5E; | |||
| .withdraw-title{ | |||
| font-size: 28rpx; | |||
| font-weight: bold; | |||
| margin-bottom: 20rpx; | |||
| } | |||
| .withdraw-content{ | |||
| color: white; | |||
| font-size: 24rpx; | |||
| } | |||
| } | |||
| .inputs{ | |||
| .input-item{ | |||
| margin-top: 35rpx; | |||
| .input-top{ | |||
| display: flex; | |||
| justify-content: space-between; | |||
| .title{ | |||
| font-size: 28rpx; | |||
| font-weight: bold; | |||
| color: #D3EA5E; | |||
| } | |||
| .all{ | |||
| background: #D3EA5E; | |||
| padding: 5rpx 10rpx; | |||
| border-radius: 10rpx; | |||
| font-size: 20rpx; | |||
| } | |||
| } | |||
| input{ | |||
| border: 1px solid #B0C73B; | |||
| height: 80rpx; | |||
| margin-top: 20rpx; | |||
| text-indent: 1em; | |||
| color: #B0C73B; | |||
| border-radius: 10rpx; | |||
| } | |||
| } | |||
| } | |||
| .submit{ | |||
| height: 90rpx; | |||
| display: flex; | |||
| align-items: center; | |||
| justify-content: center; | |||
| background: #B0C73B; | |||
| border-radius: 10rpx; | |||
| font-size: 40rpx; | |||
| font-weight: bold; | |||
| margin-top: 30rpx; | |||
| } | |||
| .modal{ | |||
| display: flex; | |||
| align-items: center; | |||
| justify-content: center; | |||
| position: fixed; | |||
| left: 0; | |||
| top: 0; | |||
| width: 750rpx; | |||
| height: 100vh; | |||
| .modal-main{ | |||
| width: 600rpx; | |||
| background: black; | |||
| border-radius: 10rpx; | |||
| color: #ccc; | |||
| border: 1px solid #ccc; | |||
| .title{ | |||
| text-align: center; | |||
| font-size: 36rpx; | |||
| color: #afc638; | |||
| font-weight: bold; | |||
| padding: 20rpx 0rpx; | |||
| } | |||
| .tip{ | |||
| box-sizing: border-box; | |||
| padding: 0rpx 20rpx; | |||
| margin-bottom: 20rpx; | |||
| } | |||
| .ok{ | |||
| height: 90rpx; | |||
| display: flex; | |||
| align-items: center; | |||
| justify-content: center; | |||
| background: black; | |||
| border-radius: 10rpx; | |||
| font-size: 40rpx; | |||
| font-weight: bold; | |||
| border-top: 1px solid #ffffff80; | |||
| } | |||
| } | |||
| } | |||
| } | |||
| </style> | |||
| @ -0,0 +1,27 @@ | |||
| import Vue from "vue"; | |||
| import toast from "./toast/index.js"; | |||
| import { play } from '@/utils/clickSound.js' | |||
| import dayjs from 'dayjs' | |||
| Vue.prototype.$isAppFn = function(){ | |||
| if(typeof navigator == 'undefined'){ | |||
| return true | |||
| } | |||
| const userAgent = navigator.userAgent.toLowerCase(); | |||
| if (/ipad|iphone|midp|rv:1.2.3.4|ucweb|android|windows ce|windows mobile/.test(userAgent)) { | |||
| // 移动端 | |||
| console.log('移动端') | |||
| return true | |||
| } | |||
| // pc端 | |||
| console.log('PC端') | |||
| return false | |||
| } | |||
| Vue.prototype.$isApp = Vue.prototype.$isAppFn() | |||
| Vue.prototype.$play = play | |||
| Vue.prototype.$dayjs = dayjs | |||
| Vue.use(toast) | |||
| @ -0,0 +1,28 @@ | |||
| import toast from './index.vue' | |||
| export default { | |||
| // 注册Toast | |||
| install(Vue) { | |||
| Vue.prototype.$MyToast = (text, opts) => { | |||
| // 设置默认参数,可设置多个 | |||
| let defaultOpts = { | |||
| duration: 2000 | |||
| } | |||
| opts = Object.assign(defaultOpts, opts); | |||
| // 生成一个Vue的子类 | |||
| let toastTpl = Vue.extend(toast); | |||
| // 生成一个该子类的实例 | |||
| let tpl = new toastTpl({ | |||
| data : opts | |||
| }).$mount(); | |||
| // 并将此div加入全局挂载点内部 | |||
| document.body.appendChild(tpl.$el); | |||
| // 修改提示语 | |||
| tpl.text = text; | |||
| // 定时消失 | |||
| setTimeout(() => { | |||
| document.body.removeChild(tpl.$el); | |||
| }, opts.duration) | |||
| } | |||
| } | |||
| } | |||
| @ -0,0 +1,73 @@ | |||
| <template> | |||
| <view class="toast"> | |||
| <div class="box"> | |||
| <view class="top"> | |||
| {{ title }} | |||
| </view> | |||
| <view class="bottom"> | |||
| <!-- <u-icon name="checkmark-circle-fill" | |||
| v-if="icon" | |||
| color="#5ac725" size="30px" | |||
| style="padding-right: 10px;"></u-icon> --> | |||
| <img src="/static/46660.png" | |||
| v-if="icon" | |||
| alt="" style="margin-right: 10px;"/> | |||
| <text>{{ text }}</text> | |||
| </view> | |||
| </div> | |||
| </view> | |||
| </template> | |||
| <script> | |||
| export default { | |||
| name: 'toast', | |||
| data(){ | |||
| return{ | |||
| text : "", | |||
| title : "", | |||
| icon : false | |||
| } | |||
| } | |||
| } | |||
| </script> | |||
| <style scoped lang="scss"> | |||
| .toast{ | |||
| left: 0; | |||
| top: 0; | |||
| position: fixed; | |||
| z-index: 99999999; | |||
| width: 100vw; | |||
| height: 100vh; | |||
| background-color: #000000aa; | |||
| .box{ | |||
| top:50%; | |||
| left: 50%; | |||
| transform: translate(-50%, -50%); | |||
| position: fixed; | |||
| border-radius: 10px; | |||
| z-index: 99999999; | |||
| text-align: center; | |||
| width: 500rpx; | |||
| overflow: hidden; | |||
| } | |||
| .top{ | |||
| width: 100%; | |||
| height: 35px; | |||
| background-color: #000; | |||
| color: #FFFFFF; | |||
| line-height: 35px; | |||
| font-size: 13px; | |||
| } | |||
| .bottom{ | |||
| width: 100%; | |||
| height: 60px; | |||
| background-color: #fff; | |||
| color: #333; | |||
| display: flex; | |||
| justify-content: center; | |||
| align-items: center; | |||
| } | |||
| } | |||
| </style> | |||