Newer
Older
xinJiangMiniProgranm / packageA / accountBound / accountBound.vue
dutingting on 3 Apr 2023 3 KB ui改版第一版
<!-- 账号绑定 -->
<template>
	<view class="account-bound">
		<view class="main">
			<u--form
				labelPosition="left"
				:model="form"
				:rules="rules"
				labelWidth="100"
				ref="form">
				<u-form-item label="用户名" prop="name" borderBottom :required="true">
					<u--input
						placeholder="用户名"
						v-model="form.name"
						border="none"
						clearable
					></u--input>
				</u-form-item>
				
				<u-form-item label="密码" prop="password" borderBottom :required="true">
					<u--input
						placeholder="密码"
						v-model="form.password"
						border="none"
						clearable
					></u--input>
				</u-form-item>
				
				<u-form-item label="验证码" prop="code" borderBottom :required="true">
					<u--input
						placeholder="验证码"
						v-model="form.code"
						border="none"
					></u--input>
					<view class="code-img-wrapper" @click="updateImageCode">
					  <canvas style="width: 280rpx;height: 140rpx;" canvas-id="canvas"></canvas>
					</view>
				</u-form-item>
			</u--form>
		</view>
		<view class="button" @click="submit">确定</view>
	</view>
</template>

<script>
	import { Mcaptcha  } from '../../common/mcaptcha.js';
	export default {
		data() {
			return {
				rules: {
					// 用户名
					'name': [
						{
							type: 'string',
							required: true,
							message: '请填写用户名',
							trigger: ['blur', 'change']
						},
						// {
						// 	min: 8,
						// 	max: 30,
						// 	message: '长度在8-30个字符之间'
						// }
					],
					// 新密码规则
					'password': [
						{
							type: 'string',
							required: true,
							message: '请填写密码',
							trigger: ['blur', 'change']
						},
						{
							min: 8,
							max: 30,
							message: '长度在8-30个字符之间'
						},
					],
					// 验证码规则
					'code': [
						{
							type: 'string',
							required: true,
							message: '请填写验证码',
							trigger: ['blur', 'change']
						},
						{
							// 自定义验证函数
							validator: (rule, value, callback) => {
								let validate = this.mcaptcha.validate(value)
								if(validate) {
									return true
								}
								callback(new Error('验证码错误'));
							},
						}
					],
				},
				form: {
					name: '',  //用户名
					password: '',  //密码
					code: '',  //验证码
				},
			}
		},
		onReady() {
			this.$refs.form.setRules(this.rules);
			this.mcaptcha = new Mcaptcha({
				el: 'canvas',
				width: 140,
				height: 80,
				createCodeImg: ""
			});
		},
		methods: {
			submit() {
				this.$refs.form.validate().then(res => {
					uni.$u.toast('校验通过')
					//调改密码接口
				}).catch(errors => {
					uni.$u.toast('请将信息填写完整')
				})
			},
			// 刷新验证码
			updateImageCode() {
			  this.mcaptcha.refresh()
			},
		}
	}
</script>

<style lang="scss" scoped>
	.account-bound {
		width: 100%;
		height: 100%;
		padding: 40rpx 20rpx;
		box-sizing: border-box;
		background: linear-gradient(#bed5fe 0%, #eef1fd 100%);
		.main {
			padding: 20rpx 20rpx 40rpx 20rpx;
			box-sizing: border-box;
			background-color: #fff;
			border-radius: 16rpx;
		}
		.button {
			width: 100%;
			display: flex;
			justify-content: center;
			align-items: center;
			padding: 20rpx;
			color: #fff;
			font-weight: 600;
			letter-spacing: 4rpx;
			background-color: #408bf6;
			border: 2rpx solid #408bf6;
			border-radius: 10rpx;
			margin: 64rpx 0 32rpx 0;
			white-space: nowrap;
			box-sizing: border-box;
			&:active {
				background-color: #fff;
				color: #408bf6;
			}
		}
	}
</style>
<style lang="scss">
	.account-bound {
		.u-form-item__body__left__content__label {
			white-space: nowrap;
			font-weight: 600;
		}
		.u-form-item__body__right__content__slot {
			display: flex;
			flex-direction: row;
			justify-content: space-between;
			align-items: center;
		}
		.u-form-item {
			margin-bottom: 20rpx;
		}
	}
</style>