幼教产品B2B生态平台小程序端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

189 lines
4.9 KiB

10 months ago
<template>
<view class="wrap">
<view class="title">欢迎加入</view>
<view class="wel">
<image class="icon" src="http://124.71.79.122/images/miniProgram/house.png" mode="widthFix" />
<view class="text">{{ teamName + '邀请你加入他的团队' }}</view>
</view>
<view class="inner">
<view class="input">
<uni-easyinput type="text" v-model="form.name" placeholder="请输入你的真实姓名" :clearable="false" />
</view>
<view class="input">
<uni-easyinput type="number" v-model="form.phone" placeholder="请填写你的手机号" maxlength="11" :clearable="false" />
</view>
<view class="input code-wrap">
<uni-easyinput class="code" type="number" v-model="form.code" placeholder="验证码" maxlength="6" :clearable="false" />
<view class="send-code" @click="sendCode" :disabled="codeDisabled">{{ phoneBtnText }}</view>
</view>
<button class="submit" type="primary" @click="submit">立即加入</button>
</view>
</view>
</template>
<script>
import { sendPhoneOrEmailCode, inviteJoinOrganization } from '@/apis/modules/user.js'
export default {
data () {
return {
teamName: '',
form: {
accountId: '',
classificationId: '',
platformId: '',
phone: '',
code: '',
name: '',
},
rules: {
phone: [
{ required: true, message: '请输入手机号', trigger: 'blur' }
],
code: [
{ required: true, message: "请输入验证码", trigger: 'blur' }
]
},
repeat: false, // 是否有已存在用户,有的话禁填用户名和账号
codeDisabled: false,
phoneTimer: null,
phoneOpener: '',
phoneBtnText: '发送验证码',
submiting: false // 新增编辑防抖标识
};
},
onShow () {
const pages = getCurrentPages()
const { options } = pages[pages.length - 1]
this.teamName = options.teamName
this.form.accountId = options.accountId
this.form.classificationId = options.id
this.form.platformId = options.platformId
},
methods: {
// 验证手机号
verifyPhone (phone) {
if (!phone) {
this.$util.errMsg("请输入手机号")
return false
}
if (!/^1[3456789]\d{9}$/.test(phone) && !/^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/.test(phone)) {
this.$util.errMsg("请输入正确的手机号")
return false
}
return true
},
// 验证码倒计时
phoneCountdown () {
let count = 60
if (!this.phoneTimer) {
this.codeDisabled = true
this.phoneTimer = setInterval(() => {
if (count > 0) {
count--
this.phoneBtnText = `${count}秒后重试`
} else {
this.codeDisabled = false
clearInterval(this.phoneTimer)
this.phoneTimer = null
this.phoneBtnText = `发送验证码`
}
}, 1000)
}
},
// 发送验证码
sendCode () {
const { phone } = this.form
if (!this.verifyPhone(phone)) return false
sendPhoneOrEmailCode({
phone,
types: 2
}).then(({ message }) => {
if (message.opener) {
this.phoneCountdown()
this.phoneOpener = message.opener
} else {
this.$util.errMsg(message)
}
}).catch(res => { })
},
// 提交
submit () {
if (this.submiting) return false
if (this.phoneRepeat) return this.$util.errMsg("该手机号已存在")
const { form } = this
form.uniqueIdentification = Date.now()
this.submiting = true
inviteJoinOrganization(form).then(res => {
this.$util.sucMsg('加入成功!')
setTimeout(() => {
uni.redirectTo({
url: '/team/joinSuccess/joinSuccess'
})
}, 1500)
}).catch(res => {
this.submiting = false
})
},
}
};
</script>
<style lang="scss" scoped>
.wrap {
margin: 100px 30rpx;
text-align: center;
border-radius: 6px;
background-color: #fff;
border-radius: 6px;
overflow: hidden;
.title {
padding: 15rpx 0;
font-size: 36rpx;
color: #fff;
background-color: $uni-primary;
}
.icon {
width: 120rpx;
margin: 50rpx 0 30rpx;
}
.text {
margin-bottom: 20rpx;
font-size: 28rpx;
color: #565656;
}
.inner {
padding: 20px;
}
.input {
margin-bottom: 30rpx;
input {
border-color: #dedede !important;
}
}
.code-wrap {
display: flex;
}
.code {
flex: 1;
}
.send-code {
width: 100px;
margin-left: 20px;
text-align: center;
color: #4386ff;
font-size: 12px;
line-height: 36px;
border: 1px solid #4386ff;
border-radius: 5px;
}
.submit {
width: 100%;
margin-top: 40rpx;
font-size: 36rpx;
background-color: $uni-primary;
border-color: #007eff;
border-radius: 20px;
}
}
</style>