123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330 |
- <template>
- <div class="register">
- <div class="contents">
- <!-- 头部logo -->
- <div class="header">
- <img src="@/assets/hongqi.png" alt="logo" />
- </div>
-
- <!-- 欢迎注册标题 -->
- <div class="welcome-title">欢迎注册</div>
-
- <!-- 主体表单 -->
- <div class="form-container">
- <div class="main">
- <wInput
- type="text"
- maxlength="11"
- placeholder="请输入您的手机号码"
- v-model="phoneData"
- ></wInput>
- <wInput
- type="text"
- maxlength="20"
- placeholder="请输入您的姓名"
- v-model="name"
- ></wInput>
- <wInput
- type="password"
- maxlength="20"
- placeholder="请输入您的密码"
- v-model="passData"
- :isShowPass="true"
- ></wInput>
- <wInput
- type="text"
- maxlength="20"
- placeholder="请输入邀请码"
- v-model="inviteCode"
- ></wInput>
- <div class="verify-code-container">
- <wInput
- type="text"
- maxlength="4"
- placeholder="请输入验证码"
- v-model="captchaInput"
- class="verify-input"
- ></wInput>
- <button class="verify-btn" @click="generateCaptcha">{{ captcha }}</button>
- </div>
- </div>
-
- <wButton
- text="立即注册"
- :rotate="isRotate"
- @click.native="startReg()"
- class="wbutton"
- ></wButton>
- </div>
- <!-- 底部链接 -->
- <div class="footer">
- <div style="color: #fff;font-size: 14px;cursor:pointer;" @click="goBack">找回密码</div>
- <span>|</span>
- <div style="color: #fff;font-size: 14px;cursor:pointer;" @click="goToLogin">登录账号</div>
- </div>
- </div>
- <!-- 网站底部信息 -->
- <div class="site-footer">
- <div class="copyright">版权所有:中国建设科技集团股份有限公司</div>
- <div class="address">地址:北京市西城区德胜门外大街36号A座</div>
- <div class="beian">
- 京ICP备 2022001408号-6号 京公网安备 11010202010460号
- </div>
- </div>
- </div>
- </template>
- <script>
- import wInput from "@/components/watch-login/watch-input.vue";
- import wButton from "@/components/watch-login/watch-button.vue";
- import { register } from "@/api/login.js";
- import { Toast } from "vant";
- export default {
- data() {
- return {
- phoneData: "", // 账号
- name: "", // 姓名
- passData: "", // 密码
- inviteCode: "", // 邀请码
- msg: "", // 消息
- code: "", // 验证码
- showAgree: true, // 协议是否选择
- isRotate: false, // 是否加载旋转
- captcha: '', // 当前验证码内容
- captchaInput: '' // 用户输入的验证码
- };
- },
- mounted() {
- this.generateCaptcha();
- this.getInviteCodeFromUrl();
- },
- methods: {
- goBack() {
- this.$router.go(-1);
- },
- goToLogin() {
- this.$router.push('/');
- },
- getInviteCodeFromUrl() {
- // 从URL参数中获取邀请码
- const urlParams = new URLSearchParams(window.location.search);
- const inviteCodeFromUrl = urlParams.get('invitecode');
-
- // 如果URL中有邀请码,自动填入
- if (inviteCodeFromUrl) {
- this.inviteCode = inviteCodeFromUrl;
- }
-
- // 同时检查路由参数(Vue Router的方式)
- if (this.$route.query.invitecode) {
- this.inviteCode = this.$route.query.invitecode;
- }
- },
- generateCaptcha() {
- // 生成4个随机数字
- let code = '';
- for (let i = 0; i < 4; i++) {
- code += Math.floor(Math.random() * 10);
- }
- this.captcha = code;
- // 清空用户输入
- this.captchaInput = '';
- Toast('验证码已刷新');
- },
- checkCaptcha() {
- // 直接比较输入的数字和显示的验证码
- return this.captchaInput.trim() === this.captcha;
- },
- async startReg() {
- if (this.isRotate) {
- return false;
- }
- if (!this.phoneData) {
- Toast("手机号码不能为空");
- return false;
- }
- if (!this.name) {
- Toast("姓名不能为空");
- return false;
- }
- if (this.passData.length < 6) {
- Toast("密码不少于6位");
- return false;
- }
- if (!this.inviteCode) {
- Toast("邀请码不能为空");
- return false;
- }
- if (!this.checkCaptcha()) {
- Toast("验证码错误");
- this.generateCaptcha();
- return false;
- }
- this.isRotate = true;
- try {
- const data = {
- account: this.phoneData,
- name: this.name,
- password: this.passData,
- inviteCode: this.inviteCode,
- msg: this.msg,
- code: this.code
- };
- let res = await register(data);
- if(res.code == 1){
- Toast("注册成功");
- this.isRotate = false;
- setTimeout(() => {
- this.$router.push('/');
- }, 2000);
- }else{
- Toast(res.msg);
- this.isRotate = false;
- }
- } catch (error) {
- this.isRotate = false;
- }
- }
- },
- components: {
- wInput,
- wButton
- }
- };
- </script>
- <style lang="scss" scoped>
- .register {
- height: 100vh;
- width: 100%;
- background: #b43a39;
- background-size: cover;
- background-position: center;
- overflow-y: auto;
- }
- .contents {
- display: flex;
- flex-direction: column;
- align-items: center;
- min-height: 100vh;
- padding-bottom: 20px;
- }
- .header {
- width: 165px;
- height: 73px;
- margin-top: 40px;
- display: flex;
- flex-direction: column;
- align-items: center;
- background-color: #fff;
- padding: 20px;
- border-radius: 50%;
- img {
- width: 150px;
- height: 150px;
- object-fit: cover;
- }
- }
- .welcome-title {
- color: #fff;
- font-size: 18px;
- font-weight: 500;
- margin: 15px 0;
- text-align: center;
- }
- .form-container {
- width: 76%;
- background: #fff;
- border-radius: 10px;
- padding: 30px 25px;
- box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1);
- margin-bottom: 20px;
- }
- .main {
- width: 100%;
- }
- .verify-code-container {
- display: flex;
- gap: 10px;
- align-items: center;
- margin-top: 15px;
-
- .verify-input {
- flex: none;
- width: 60%;
- }
-
- .verify-btn {
- background: #b43a39;
- color: #fff;
- border: none;
- padding: 12px 20px;
- border-radius: 5px;
- font-size: 14px;
- cursor: pointer;
- min-width: 80px;
- flex-shrink: 0;
-
- &:hover {
- background: #a03237;
- }
- }
- }
- .wbutton {
- margin-top: 30px;
- width: 100%;
- }
- .footer {
- margin-top: 20px;
- margin-bottom: 20px;
- display: flex;
- justify-content: center;
- align-items: center;
- gap: 40px;
-
- div {
- opacity: 0.9;
- transition: opacity 0.3s;
-
- &:hover {
- opacity: 1;
- }
- }
-
- span {
- color: #fff;
- opacity: 0.5;
- }
- }
- .site-footer {
- width: 100%;
- padding: 15px 0;
- background: rgba(0, 0, 0, 0.5);
- text-align: center;
- margin-top: 20px;
-
- .copyright, .address, .beian {
- color: #fff;
- font-size: 12px;
- opacity: 0.8;
- margin-bottom: 3px;
- line-height: 1.2;
- }
- }
- </style>
- <style>
- @import url("../components/watch-login/css/icon.css");
- </style>
|