register.vue 3.6 KB
<template>
	<view class="login-container">
		<view class="login-title">用户注册</view>
		<u-form :model="regForm" ref="regForm">
			<u-form-item prop="username">
				<u-input v-model="regForm.username" placeholder="请输入用户名" />
			</u-form-item>
			<u-form-item prop="password">
				<u-input v-model="regForm.password" type="password" placeholder="请输入密码" />
			</u-form-item>
			<u-form-item prop="repassword">
				<u-input v-model="regForm.repassword" type="password" placeholder="请再次输入密码" />
			</u-form-item>
			<u-form-item>
				<u-checkbox-group>
					<u-checkbox v-model="checked" shape="circle" :active-color="ThemeColor.PrimaryColor"></u-checkbox>
					<text class="agreement">我已阅读并同意《用户协议》及《隐私协议》</text>
				</u-checkbox-group>
			</u-form-item>
		</u-form>
		<view class="btn">注册</view>
		<view class="tip">
			已有账号,<text :style="{color: ThemeColor.PrimaryColor}" @click="goLog">立即登录</text>
		</view>
	</view>
</template>

<script>
	import ThemeColor from '@/utils/themeColor'
	export default {
		data() {
			return {
				ThemeColor,
				regForm: { username: '', password: '', repassword: ''},
				checked: false,
				regRules: {
					username: [
						{ required: true, message: '请填写用户名', trigger: ['blur']},
						{ pattern: /^[0-9a-zA-Z]*$/g, transform(value) { return String(value) }, message: '只能包含字母或数字', trigger: 'blur' },
						{ min: 6, max: 8, message: '长度在6-8个字符之间', trigger: 'change' }
					],
					password: [
						{ required: true, message: '请填写密码', trigger: ['blur']},
						{ pattern: /^(?=.*[A-Z])[a-zA-Z0-9]+$/, transform(value) { return String(value) }, message: '字母数字组成且必须包含大写字母', trigger: ['change', 'blur'] },
						{ min: 6, max: 8, message: '长度在6-16个字符之间',  trigger: ['change'] },
					],
					repassword: [
						{ required: true, message: '请填写密码', trigger: ['blur']},
						{ pattern: /^(?=.*[A-Z])[a-zA-Z0-9]+$/, transform(value) { return String(value) }, message: '字母数字组成且必须包含大写字母', trigger: ['change', 'blur'] },
						{ min: 6, max: 8, message: '长度在6-16个字符之间',  trigger: ['change'] },
						{
							validator: (rule, value, callback) => {
								value !== this.regForm.password ? callback(new Error('两次密码输入不一致')) : callback()
							},
							trigger: ['change']
						}
					]
				}
			}
		},
		// 必须要在onReady生命周期,因为onLoad生命周期组件可能尚未创建完毕
		onReady() {
			this.$refs.regForm.setRules(this.regRules);
		},
		methods: {
			// 前往登录
			goLog() {
				uni.redirectTo({
					url: '/pages/login/login'
				})
			},
			submit() {
				this.$refs.regForm.validate().then(valid => {
					if (valid) {
						console.log('验证通过');
					} else {
						console.log('验证失败');
					}
				})
			}
		}
	}
</script>

<style scoped lang="scss">
	.login-container{
		position: relative;
		padding: 0 30rpx;
		box-sizing: border-box;
		height: calc(100vh - 88rpx);
		max-height: 100vh;
		.login-title{
			color: #3d3d3d;
			font-size: 56rpx;
			margin: 40rpx 0 60rpx 0;
			line-height: 74rpx;
			font-weight: 500;
		}
		.agreement{
			color: #333;
			line-height: 38rpx;
			font-size: 28rpx;
		}
		.btn{
			width: 100%;
			height: 88rpx;
			text-align: center;
			line-height: 88rpx;
			font-size: 32rpx;
			background-color: $uni-color-primary;
			border-radius: 12rpx;
			color: #fff;
			margin-top: 30rpx;
		}
		.tip{
			position: absolute;
			bottom: 44rpx;
			left: 50%;
			font-size: 36rpx;
			color: #333;
			transform: translateX(-50%);
		}
	}
</style>