【前端】印包客H5
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.

246 lines
5.9 KiB

<template>
<view class="form">
<uni-nav-bar left-icon="back" @clickLeft="back" statusBar fixed title="申请验厂"></uni-nav-bar>
<view class="divider"></view>
<view class="justify-between group">
<view class="flex-row">
<text class="text_1">*</text>
<text class="text_2">手机号</text>
</view>
<qn-easyinput
:maxlength="11"
v-model="form.mobile"
:inputBorder="false"
text="right"
type="number"
placeholderStyle="fontSize: 28rpx"
placeholder="请输入手机号"
></qn-easyinput>
</view>
<view class="divider"></view>
<view class="justify-between group">
<view class="flex-row">
<text class="text_1">*</text>
<text class="text_2">验证码</text>
<view>
<view v-show="timer > 0" class="timer_area">
<text class="timer">{{ `(${timer}S后) ` }}</text>
<text class="timer_text">重新获取</text>
</view>
<text v-show="timer <= 0" class="code" @click="getCode">获取验证码</text>
</view>
</view>
<qn-easyinput
:maxlength="6"
v-model="form.captcha"
:inputBorder="false"
text="right"
type="number"
placeholderStyle=" fontSize: 28rpx"
placeholder="请输入验证码"
></qn-easyinput>
</view>
<view class="divider"></view>
<view class="justify-between group">
<view class="flex-row">
<text class="text_1">*</text>
<text class="text_2">用户名</text>
</view>
<qn-easyinput
:maxlength="20"
v-model="form.userName"
:inputBorder="false"
text="right"
placeholderStyle=" fontSize: 28rpx"
placeholder="请输入用户名"
></qn-easyinput>
</view>
<view class="divider"></view>
<view class="justify-between group">
<view class="flex-row">
<text class="text_1">*</text>
<text class="text_2">企业名</text>
</view>
<qn-easyinput
:maxlength="20"
v-model="form.enterpriseName"
:inputBorder="false"
text="right"
placeholderStyle=" fontSize: 28rpx"
placeholder="请输入企业名"
></qn-easyinput>
</view>
<view class="divider"></view>
<qn-footer fixed>
<view class="flex-col items-center text-wrapper_1" @click="apply">
<text>提交申请</text>
</view>
</qn-footer>
</view>
</template>
<script>
import { validateField } from '@/utils/index.js'
import { getAuthCaptcha } from '@/apis/commonApi.js'
import { userApplying } from '@/apis/factoryApi.js'
import { codePurpose, verificationType } from '@/enums/index.js'
import { back } from '@/utils/hook.js'
const validateFields = [
{
name: 'userName',
rules: [{ required: true, message: '请输入用户名' }]
},
{
name: 'mobile',
rules: [
{ required: true, message: '请输入手机号' },
{ type: 'phone', message: '请输入正确的手机号' }
]
},
{
name: 'captcha',
rules: [{ required: true, message: '请输入验证码' }]
},
{
name: 'enterpriseName',
rules: [{ required: true, message: '请输入企业名' }]
}
]
export default {
data() {
return {
form: {
userName: '',
mobile: '',
enterpriseName: '',
captcha: ''
},
factoryId: '',
timer: 0
}
},
methods: {
back,
// 申请验厂
apply() {
for (let field of validateFields) {
const { name, rules } = field
const value = this.form[name]
const { isValid, msg } = validateField(value, rules)
if (!isValid) {
uni.showToast({
title: msg,
icon: 'none'
})
return
}
}
userApplying({
...this.form
}).then((res) => {
if (res) {
uni.showModal({
title: '申请已发出,请联系该企业管理员通过审核',
icon: 'success',
success: () => {
back()
}
})
}
})
},
// 获取验证码
getCode() {
let rules = [
{ required: true, message: '请输入手机号' },
{ type: 'phone', message: '请输入正确的手机号' }
]
const { isValid, msg } = validateField(this.form.mobile, rules)
if (!isValid) {
uni.showToast({
title: msg,
icon: 'none'
})
return
}
this.countdown()
getAuthCaptcha({
purpose: codePurpose.CERTIFICATION,
verifiableAccount: this.form.mobile,
verifiableAccountType: verificationType.PHONE
}).then(() => {
uni.showToast({
title: '验证码已发送',
icon: 'none'
})
})
},
// 倒计时
countdown() {
this.timer = 60
let timer = setInterval(() => {
this.timer--
if (this.timer <= 0) {
clearInterval(timer)
}
}, 1000)
}
}
}
</script>
<style lang="scss" scoped>
.form {
width: 750rpx;
background-color: #fff;
}
.text-wrapper_1 {
margin: 0 32rpx;
padding: 23rpx 0;
background-color: rgb(0, 122, 255);
border-radius: 10rpx;
color: rgb(255, 255, 255);
}
.timer_area {
width: auto;
flex: 0 0 auto;
margin-left: 16rpx;
.timer {
font-size: 28rpx;
color: #007aff;
}
.timer_text {
font-size: 28rpx;
color: #999999;
}
}
.code {
margin-left: 16rpx;
width: 160rpx;
font-size: 28rpx;
color: #007aff;
flex: 0 0 auto;
}
.group {
padding: 24rpx 28rpx 24rpx 32rpx;
font-size: 28rpx;
line-height: 40rpx;
white-space: nowrap;
.text_3 {
color: rgb(0, 122, 255);
}
.text_1 {
color: rgb(245, 34, 45);
}
.text_2 {
margin-left: 4rpx;
color: rgb(0, 0, 0);
}
}
.divider {
margin: 0 28rpx;
background-color: rgb(216, 216, 216);
height: 2rpx;
}
</style>