@ -0,0 +1,102 @@
|
||||
<template>
|
||||
<view class="checkModal">
|
||||
<view class="topModal" @click.stop="closeModal"></view>
|
||||
<view class="checkArea" >
|
||||
<view class="checkBox">
|
||||
<view class="checkTitle">
|
||||
{{'选择国家地/地区'}}
|
||||
</view>
|
||||
<scroll-view scroll-y="true" class="checkList">
|
||||
<view v-for="item in data.areaList" :key="item.countryCode" @click="checked(item)" class="checkItem">
|
||||
<text>{{item.countryName}}</text>
|
||||
<text>{{item.countryCode}}</text>
|
||||
</view>
|
||||
</scroll-view>
|
||||
</view>
|
||||
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'CheckArea',
|
||||
props: {
|
||||
data: {
|
||||
default: () => {},
|
||||
type: Object,
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
closeModal() {
|
||||
this.$emit('closeModal', 'area');
|
||||
},
|
||||
checked(item) {
|
||||
this.$emit('checkedCode', item);
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.checkModal {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
height: 100vh;
|
||||
width: 100vw;
|
||||
z-index: 9;
|
||||
background-color: rgba(0, 0, 0, 0.4);
|
||||
|
||||
.topModal {
|
||||
height: 100vh;
|
||||
width: 100vw;
|
||||
}
|
||||
|
||||
.checkArea {
|
||||
width: 100vw;
|
||||
position: absolute;
|
||||
top: 34vh;
|
||||
left: 0;
|
||||
animation: fade-in 0.6s;
|
||||
|
||||
.checkBox {
|
||||
width: 100vw;
|
||||
height: 66vh;
|
||||
background: #fff;
|
||||
border-radius: 48upx 48upx 0 0;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
|
||||
.checkTitle {
|
||||
height: 96upx;
|
||||
line-height: 96upx;
|
||||
text-align: center;
|
||||
font-size: 36upx;
|
||||
}
|
||||
.checkList {
|
||||
height: calc(66vh - 96upx);
|
||||
padding-bottom: 48rpx;
|
||||
.checkItem {
|
||||
height: 48upx;
|
||||
line-height: 48upx;
|
||||
font-size: 32upx;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
padding: 24upx;
|
||||
box-sizing: content-box;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@keyframes fade-in {
|
||||
0% {
|
||||
top: 100vh
|
||||
}
|
||||
100% {
|
||||
top:34vh
|
||||
}
|
||||
}
|
||||
</style>
|
@ -0,0 +1,140 @@
|
||||
<template>
|
||||
<view class="checkCode">
|
||||
<view class="back-btn" @click="closeModal">
|
||||
<image src="@/static/icons/left_back@3x.png"></image>
|
||||
</view>
|
||||
<view class="wrapper">
|
||||
<view class="tips">
|
||||
<view class="tips_title">{{tips.title}}</view>
|
||||
<view class="tips_text">{{tips.text}} {{data.area}} {{data.mobile}}</view>
|
||||
</view>
|
||||
<view class="numBox">
|
||||
<uni-code-input v-model="data.mobileCheckCode" mode="line" :space="12" :focus="true" borderColor="rgba(0, 0, 0, 0.1)"
|
||||
hairline :maxlength="6" @finish="finish"></uni-code-input>
|
||||
</view>
|
||||
<view class="cutdownBox">
|
||||
<view v-if="time>0" class="time">{{time}}s</view>
|
||||
<view v-else @click="regetCode" class="regetBtn">重新获取</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
// import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
|
||||
import uniCodeInput from '@/components/uni-code-input/uni-code-input.vue';
|
||||
export default {
|
||||
name: 'CheckCode',
|
||||
components: {
|
||||
uniCodeInput
|
||||
// uniLoadMore
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
tips: {
|
||||
title: '输入验证码',
|
||||
text: '验证码已发送至'
|
||||
},
|
||||
time: 60,
|
||||
resetTime: 60,
|
||||
timer: null,
|
||||
}
|
||||
},
|
||||
props: {
|
||||
data: {
|
||||
default: () => {},
|
||||
type: Object,
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.cutdown()
|
||||
},
|
||||
destroyed() {
|
||||
this.timer && clearInterval(this.timer)
|
||||
},
|
||||
methods: {
|
||||
closeModal() {
|
||||
this.$emit('closeModal', 'code');
|
||||
},
|
||||
cutdown() {
|
||||
this.timer && clearInterval(this.timer)
|
||||
this.timer = setInterval(
|
||||
() => {
|
||||
this.time--
|
||||
}, 1000)
|
||||
},
|
||||
regetCode() {
|
||||
// 调用接口
|
||||
this.time = this.resetTime
|
||||
this.cutdown()
|
||||
this.$emit('regetCode')
|
||||
},
|
||||
finish(e) {
|
||||
console.log('输入结束,当前值为:' + e);
|
||||
this.$emit('login', this.data)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.checkCode {
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
position: relative;
|
||||
|
||||
.back-btn {
|
||||
position: absolute;
|
||||
left: 40upx;
|
||||
padding-top: var(--status-bar-height);
|
||||
top: 40upx;
|
||||
font-size: 40upx;
|
||||
color: $font-color-dark;
|
||||
z-index: 9;
|
||||
|
||||
image {
|
||||
width: 40rpx;
|
||||
height: 40rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.wrapper {
|
||||
position: relative;
|
||||
padding-top: 200upx;
|
||||
|
||||
.tips {
|
||||
width: 100%;
|
||||
height: 136upx;
|
||||
padding: 0 48rpx;
|
||||
|
||||
.tips_title {
|
||||
font-size: 64upx;
|
||||
margin-bottom: 26upx;
|
||||
}
|
||||
|
||||
.tips_text {
|
||||
font-size: 28upx;
|
||||
}
|
||||
}
|
||||
|
||||
.numBox {
|
||||
height: 80rpx;
|
||||
margin: 80rpx 0 0;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.cutdownBox {
|
||||
height: 40rpx;
|
||||
padding: 48rpx;
|
||||
color: rgba(0, 0, 0, .95);
|
||||
|
||||
.time {
|
||||
color: rgba(0, 0, 0, .4)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
@ -1,137 +0,0 @@
|
||||
<template>
|
||||
<view class="container">
|
||||
<view class="left-bottom-sign"></view>
|
||||
<view class="back-btn yticon icon-zuojiantou-up" @click="navBack"></view>
|
||||
<view class="right-top-sign"></view>
|
||||
<!-- 设置白色背景防止软键盘把下部绝对定位元素顶上来盖住输入框等 -->
|
||||
<view class="wrapper">
|
||||
<view class="empty">
|
||||
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {}
|
||||
},
|
||||
onLoad() {
|
||||
},
|
||||
methods: {
|
||||
navBack() {
|
||||
uni.navigateBack();
|
||||
},
|
||||
},
|
||||
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang='scss'>
|
||||
page {
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
.empty {
|
||||
position: fixed;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 100vh;
|
||||
padding-bottom: 100upx;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
background: #fff;
|
||||
|
||||
image {
|
||||
width: 420upx;
|
||||
height: 420upx;
|
||||
margin-bottom: 30upx;
|
||||
}
|
||||
.empty-tips {
|
||||
display: flex;
|
||||
font-size: $font-sm+16upx;
|
||||
color: $font-color-disabled;
|
||||
|
||||
.navigator {
|
||||
color: $uni-color-primary;
|
||||
margin-left: 0upx;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.container {
|
||||
padding-top: 115px;
|
||||
position: relative;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
overflow: hidden;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
.wrapper {
|
||||
position: relative;
|
||||
z-index: 90;
|
||||
background: #fff;
|
||||
padding-bottom: 40upx;
|
||||
}
|
||||
|
||||
.back-btn {
|
||||
position: absolute;
|
||||
left: 40upx;
|
||||
z-index: 9999;
|
||||
padding-top: var(--status-bar-height);
|
||||
top: 40upx;
|
||||
font-size: 40upx;
|
||||
color: $font-color-dark;
|
||||
}
|
||||
|
||||
.left-top-sign {
|
||||
font-size: 120upx;
|
||||
color: $page-color-base;
|
||||
position: relative;
|
||||
left: -16upx;
|
||||
}
|
||||
|
||||
.right-top-sign {
|
||||
position: absolute;
|
||||
top: 80upx;
|
||||
right: -30upx;
|
||||
z-index: 95;
|
||||
|
||||
&:before,
|
||||
&:after {
|
||||
display: block;
|
||||
content: "";
|
||||
width: 400upx;
|
||||
height: 80upx;
|
||||
background: #b4f3e2;
|
||||
}
|
||||
|
||||
&:before {
|
||||
transform: rotate(50deg);
|
||||
border-radius: 0 50px 0 0;
|
||||
}
|
||||
|
||||
&:after {
|
||||
position: absolute;
|
||||
right: -198upx;
|
||||
top: 0;
|
||||
transform: rotate(-50deg);
|
||||
border-radius: 50px 0 0 0;
|
||||
/* background: pink; */
|
||||
}
|
||||
}
|
||||
|
||||
.left-bottom-sign {
|
||||
position: absolute;
|
||||
left: -270upx;
|
||||
bottom: -320upx;
|
||||
border: 100upx solid #d0d1fd;
|
||||
border-radius: 50%;
|
||||
padding: 180upx;
|
||||
}
|
||||
</style>
|
@ -0,0 +1,28 @@
|
||||
<template>
|
||||
<web-view :src="url" :webview-styles="webviewStyles"></web-view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
url: '',
|
||||
webviewStyles: {}
|
||||
|
||||
};
|
||||
},
|
||||
onLoad: function(option) {
|
||||
const item = JSON.parse(decodeURIComponent(option.item));
|
||||
const {
|
||||
url,
|
||||
webviewStyles
|
||||
} = item
|
||||
this.url = url
|
||||
this.webviewStyles = webviewStyles ? webviewStyles : {}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
|
||||
</style>
|
After Width: | Height: | Size: 4.1 KiB |
After Width: | Height: | Size: 610 B |
After Width: | Height: | Size: 232 B |
After Width: | Height: | Size: 6.3 KiB |
After Width: | Height: | Size: 253 B |
After Width: | Height: | Size: 349 B |
After Width: | Height: | Size: 448 B |
After Width: | Height: | Size: 414 KiB |
After Width: | Height: | Size: 37 KiB |
@ -0,0 +1,24 @@
|
||||
{
|
||||
"light": {
|
||||
"navigationBarTextStyle": "black",
|
||||
"navigationBarBackgroundColor": "#F7F7F7",
|
||||
"backgroundColor": "#F7F7F7",
|
||||
|
||||
"tabBarColor": "#7A7E83",
|
||||
"tabBarSelectedColor": "#3cc51f",
|
||||
"tabBarBorderStyle": "black",
|
||||
"tabBarBackgroundColor": "#F7F7F7"
|
||||
|
||||
},
|
||||
"dark": {
|
||||
"navigationBarTextStyle": "white",
|
||||
"navigationBarBackgroundColor": "#1F1F1F",
|
||||
"backgroundColor": "#1F1F1F",
|
||||
|
||||
"tabBarColor": "#cacaca",
|
||||
"tabBarSelectedColor": "#51A937",
|
||||
"tabBarBorderStyle": "white",
|
||||
"tabBarBackgroundColor": "#1F1F1F"
|
||||
|
||||
}
|
||||
}
|
@ -1,7 +1,15 @@
|
||||
// appConfig.js
|
||||
|
||||
//配置API请求的基础路径
|
||||
// export const API_BASE_URL = 'http://localhost:8085';
|
||||
export const API_BASE_URL = 'https://portal-api.macrozheng.com';
|
||||
export const API_BASE_URL = 'http://43.248.137.154:8085';
|
||||
export const API_USER_URL = 'http://39.103.180.196:9012';
|
||||
|
||||
// export const API_BASE_URL = 'https://portal-api.macrozheng.com';
|
||||
//是否启用支付宝支付
|
||||
export const USE_ALIPAY = false;
|
||||
export const USE_ALIPAY = true;
|
||||
|
||||
// 是否启用微信登录
|
||||
export const USE_WECHAT_LOGIN = false;
|
||||
|
||||
// 是否启用Apple登录
|
||||
export const USE_APPLE_LOGIN = false;
|