From ef37c59e055a990ce247b265b27d3fcef430a243 Mon Sep 17 00:00:00 2001
From: 杨磊 <505174330@qq.com>
Date: 星期五, 15 八月 2025 10:19:18 +0800
Subject: [PATCH] first submit

---
 src/views/login/register.vue |  533 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 533 insertions(+), 0 deletions(-)

diff --git a/src/views/login/register.vue b/src/views/login/register.vue
new file mode 100644
index 0000000..6b19e1e
--- /dev/null
+++ b/src/views/login/register.vue
@@ -0,0 +1,533 @@
+<template>
+  <div class="registerPage">
+    <div class="registerContent">
+      <div class="registerBox">
+        <div class="registerForm">
+          <h1>娉ㄥ唽閫氳璇�</h1>
+          <div class="formItem flex">
+            <el-select placeholder="璇烽�夋嫨" v-model="registerForm.region">
+              <el-option
+                v-for="item in options"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value"
+              ></el-option>
+            </el-select>
+            <el-input
+              placeholder="璇疯緭鍏ユ墜鏈哄彿"
+              class="ml10"
+              clearable
+              v-model="registerForm.phoneNumber"
+            ></el-input>
+          </div>
+          <div class="formItem flex">
+            <el-input
+              placeholder="璇疯緭鍏ュ浘褰㈤獙璇佺爜"
+              class="flex1"
+              v-model="registerForm.imgCode"
+            ></el-input>
+            <div class="imgCode ml10">
+              <img :src="imgCode" alt="" @click="getImgCapcha" />
+            </div>
+          </div>
+          <div class="formItem flex">
+            <el-input
+              placeholder="璇疯緭鍏ョ煭淇¢獙璇佺爜"
+              class="flex1"
+              v-model="registerForm.verificationCode"
+            ></el-input>
+            <el-button
+              class="ml10"
+              style="width: 140px"
+              @click="getVerifyCode"
+              :disabled="countDown != 0"
+              >{{
+                countDown == 0 ? "鑾峰彇鐭俊楠岃瘉鐮�" : "楠岃瘉鐮�(" + countDown + "s)"
+              }}</el-button
+            >
+          </div>
+          <!-- 鎵嬫満鍙锋敞鍐屼笉闇�瑕佸~鍐欑敤鎴峰悕锛屽厛娉ㄩ噴 -->
+          <!-- <div class="formItem flex">
+          <span>鐢ㄦ埛鍚�</span>
+          <el-input
+            v-model="registerForm.username"
+            placeholder="鐢ㄦ埛鍚嶉暱搴�3-64涓瓧绗︼紝鐢卞瓧姣嶃�佹暟瀛楃粍鎴�"
+            clearable
+          ></el-input>
+        </div>
+        <div class="formItem">
+          <p class="tips">鐢ㄦ埛鍚嶇О涓�鏃︽敞鍐屾垚鍔熶笉鍙慨鏀�</p>
+        </div> -->
+          <div class="formItem">
+            <el-input
+              v-model="registerForm.password"
+              type="password"
+              show-password
+              placeholder="璇疯緭鍏ュ瘑鐮�"
+            ></el-input>
+          </div>
+          <div class="formItem">
+            <el-input
+              v-model="registerForm.passwordAgain"
+              type="password"
+              show-password
+              placeholder="纭瀵嗙爜"
+            ></el-input>
+          </div>
+          <div class="formItem">
+            <p class="tips">璇峰皢瀵嗙爜璁剧疆涓�8-16浣嶏紝涓斾笉鏀寔绾暟瀛�</p>
+          </div>
+          <div class="formItem">
+            <el-button
+              class="registerBtn"
+              :class="{ isActive: registerForm.accept }"
+              :disabled="!registerForm.accept"
+              :loading="registerBtnLoading"
+              @click="registerFun"
+              >娉ㄥ唽</el-button
+            >
+          </div>
+          <div class="termsBox">
+            <el-checkbox class="termsCheckBox" v-model="registerForm.accept">
+            </el-checkbox>
+            <span>鎴戞帴鍙楀苟鍚屾剰</span>
+            <span class="terms" @click="getClauseData(1)">銆婄敤鎴锋湇鍔℃潯娆俱��</span>
+            <span>鍜�</span>
+            <span class="terms" @click="getClauseData(0)">銆婇殣绉佹斂绛栥��</span>
+          </div>
+        </div>
+        <div class="tipBox">
+          <p>
+            宸叉湁璐﹀彿锛岃鐐瑰嚮杩欓噷
+            <span class="toLogin" @click="toLogin()">鐩存帴鐧诲綍</span>
+          </p>
+          <p>浣跨敤绗笁鏂硅处鍙风櫥褰�</p>
+          <p>
+            <img
+              @click="toWxLogin()"
+              src="@/assets/images/login/weChartIcon.png"
+              alt
+            />
+          </p>
+        </div>
+      </div>
+    </div>
+    <!-- 寮规 -->
+    <el-dialog
+      title="銆婄敤鎴锋湇鍔℃潯娆俱��"
+      :visible.sync="dialogVisibleUserService"
+      :close-on-click-modal="false"
+      width="40%"
+    >
+    <div class="protocolBox" v-html="userProtocolTxt"></div>
+
+      <span slot="footer" class="dialog-footer">
+        <!-- <el-button @click="dialogVisible = false">鍙� 娑�</el-button> -->
+        <el-button
+          type="primary"
+          class="btn"
+          @click="dialogVisibleUserService = false"
+          >纭� 瀹�</el-button
+        >
+      </span>
+    </el-dialog>
+    <el-dialog
+      title="銆婇殣绉佹斂绛栨潯娆俱��"
+      :visible.sync="dialogVisibleprivacyPolicy"
+      :close-on-click-modal="false"
+      width="40%"
+    >
+    <div class="protocolBox" v-html="privacyPolicyTxt"></div>
+
+      <span slot="footer" class="dialog-footer">
+        <!-- <el-button @click="dialogVisible = false">鍙� 娑�</el-button> -->
+        <el-button
+          type="primary"
+          class="btn"
+          @click="dialogVisibleUserService = false"
+          >纭� 瀹�</el-button
+        >
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "register",
+  data() {
+    return {
+      dialogVisibleprivacyPolicy:false,
+      //鐢ㄦ埛鍗忚dialog
+      dialogVisibleUserService: false,
+      //鐢ㄦ埛鍗忚
+      userProtocolTxt:"",
+      //鍗忚寮规title
+      dialogTitle:"",
+      //闅愮鏀跨瓥鏉℃
+      privacyPolicyTxt:"",
+      //褰撳墠鏉℃瀵屾枃鏈�
+      currentProtocolTxt:"",
+      clauseDialog: {
+        title: "",
+        open: false,
+      },
+      clauseData: "",
+      registerBtnLoading: false,
+      options: [
+        {
+          value: "涓浗+86",
+          label: "涓浗+86",
+        },
+      ],
+      registerForm: {
+        region: "涓浗+86",
+        phoneNumber: "",
+        imgCode: "",
+        username: "",
+        verificationCode: "",
+        password: "",
+        passwordAgain: "",
+        accept: true,
+      },
+      countDown: 0,
+      imgCode: "",
+    };
+  },
+  mounted() {
+    this.showTips();
+    this.getImgCapcha();
+    this.getProtocol();
+  },
+  methods: {
+    showTips() {
+      this.$confirm(
+        "濡傛灉鎮ㄥ凡浣跨敤杩囦腑鍥藉啘涓氬ぇ瀛﹀嚭鐗堢ぞ鍏紬鍙锋牱涔︾敵璇锋湇鍔★紝璇蜂娇鐢ㄥ井淇℃壂鐮佺櫥褰曪紒",
+        "娓╅Θ鎻愮ず",
+        {
+          confirmButtonText: "鍘诲井淇℃壂鐮佺櫥褰�",
+          cancelButtonText: "缁х画娉ㄥ唽鍏ㄦ柊璐﹀彿",
+          type: "warning",
+        }
+      )
+        .then(() => {
+          this.toWxLogin();
+        })
+        .catch(() => {});
+    },
+    getImgCapcha() {
+      this.MG.identity.getImgCode().then((res) => {
+        this.imgCode = "data:image/png;base64," + res;
+      });
+    },
+    // 鑾峰彇楠岃瘉鐮�(娉ㄥ唽)
+    getVerifyCode() {
+      if (!this.config.reg_tel.test(this.registerForm.phoneNumber)) {
+        this.$message({
+          message: "璇疯緭鍏ユ纭牸寮忕殑鎵嬫満鍙凤紒",
+          type: "error",
+        });
+        return false;
+      } else if (
+        this.registerForm.imgCode == "" ||
+        this.registerForm.imgCode.length != 4
+      ) {
+        this.$message({
+          message: "璇疯緭鍏ユ纭牸寮忕殑鍥惧舰楠岃瘉鐮�",
+          type: "error",
+        });
+        return false;
+      } else {
+        this.MG.identity
+          .getPhoneCode({
+            phoneNumber: this.registerForm.phoneNumber,
+            imageCaptcha: this.registerForm.imgCode,
+            appRefCode: this.config.appRefCode,
+          })
+          .then((res) => {
+            if (res == "楠岃瘉鐮佸彂閫佹垚鍔�") {
+              this.$message({
+                message: res,
+                type: "success",
+              });
+              this.getSecond(60);
+            } else {
+              this.$message({
+                message: res,
+                type: "error",
+              });
+              this.getImgCapcha();
+            }
+          });
+      }
+    },
+    //楠岃瘉鐮佸�掕鏃�
+    getSecond(time) {
+      if (!this.timer) {
+        this.countDown = time;
+        this.timer = setInterval(() => {
+          this.countDown--;
+          if (this.countDown == 0) {
+            clearInterval(this.timer);
+            this.timer = null;
+          }
+        }, 1000);
+      }
+    },
+    // 缁戝畾鎵嬫満鍙峰脊妗�-缁戝畾鎸夐挳-鍑芥暟
+    registerFun() {
+      if (this.registerForm.phoneNumber == "") {
+        this.$message({
+          message: "鎵嬫満鍙蜂笉鑳戒负绌�",
+          type: "error",
+        });
+        return false;
+      }
+      if (this.registerForm.verificationCode == "") {
+        this.$message({
+          message: "鐭俊楠岃瘉鐮佷笉鑳戒负绌�",
+          type: "error",
+        });
+        return false;
+      }
+      if (this.registerForm.password == "") {
+        this.$message({
+          message: "瀵嗙爜涓嶈兘涓虹┖",
+          type: "error",
+        });
+        return false;
+      }
+      if (this.registerForm.password != this.registerForm.passwordAgain) {
+        this.$message({
+          message: "涓ゆ杈撳叆瀵嗙爜涓嶄竴鑷�",
+          type: "error",
+        });
+        return false;
+      }
+      let pwdreg =
+        // eslint-disable-next-line
+        /^(?![A-Za-z]+$)(?![0-9]+$)(?![_!@#$%^&*`~()\-+=<>?:,./;'\|\\\{\}\[\]]+$)[a-zA-Z0-9_!@#$%^&*`~()\-+=<>?:,./;'\|\\\{\}\[\]]{8,32}$/;
+      if (!this.config.reg_tel.test(this.registerForm.phoneNumber)) {
+        this.$message({
+          message: "璇疯緭鍏ユ纭牸寮忕殑鎵嬫満鍙凤紒",
+          type: "error",
+        });
+      } else if (!pwdreg.test(this.registerForm.password)) {
+        this.$message({
+          message:
+            "瀵嗙爜闀垮害8-32涓瓧绗︼紝蹇呴』鐢卞瓧姣嶃�佹暟瀛椼�佺鍙凤紙-*/+_.~!@#$%^&*鍙婃嫭鍙凤級涓ょ鍙婁互涓婄粍鍚堬紒",
+          type: "error",
+        });
+        return false;
+      } else {
+        this.registerBtnLoading = true;
+        this.MG.identity
+          .registerAppUserWithPhone({
+            appRefCode: this.config.appRefCode,
+            phoneNumber: this.registerForm.phoneNumber,
+            phoneCaptcha: this.registerForm.verificationCode,
+            passWord: this.registerForm.password,
+          })
+          .then((res) => {
+            this.registerBtnLoading = false;
+            if (res) {
+              this.$confirm("娉ㄥ唽鎴愬姛锛�", {
+                confirmButtonText: "鍘荤櫥褰�",
+                cancelButtonText: "鍙栨秷",
+                type: "success",
+              })
+                .then(() => {
+                  this.$router.push({
+                    path: "/login",
+                  });
+                })
+                .catch(() => {});
+            }
+          })
+          .catch((e) => {
+            this.$message({
+              message: e.response.data.msg,
+              type: "error",
+            });
+            this.registerBtnLoading = false;
+          });
+      }
+    },
+    //鑾峰彇鐢ㄦ埛鍗忚
+    getProtocol() {
+      var that = this;
+      that.MG.resource
+        .getItem({
+          path: "caupress_protocol",
+          fields: {
+            caupress_content: [],
+          },
+        })
+        .then((res) => {
+          console.log(res);
+          try {
+            const data = res.datas.find(
+              (e) => e.refCode == "caupress_userRegistrationAgreement"
+            );
+            this.userProtocolTxt = data ? data.caupress_content : "鏆傛棤鍗忚";
+            const privacy = res.datas.find(
+              (e) => e.refCode == "caupress_privacyPolicy"
+            );
+            this.privacyPolicyTxt = privacy ? privacy.caupress_content : "鏆傛棤鍗忚";
+
+          } catch (error) {
+            this.protocolTxt = "鏆傛棤鍗忚";
+          }
+        });
+    },
+    getClauseData(type) {
+      console.log(type);
+      if(type == 1){
+      this.dialogVisibleUserService = true
+
+      }else{
+      this.dialogVisibleprivacyPolicy = true
+
+      }
+      
+    },
+    toLogin() {
+      this.$router.push({
+        path: "/login",
+      });
+    },
+    toWxLogin() {
+      this.$router.push({
+        path: "/login",
+        query: {
+          from: "weChatLogin",
+        },
+      });
+    },
+  },
+};
+</script>
+<style lang="less" scoped>
+@import "@/assets/css/theme.less";
+.registerPage {
+  width: 100%;
+  height: 100%;
+  background-image: url("@/assets/images/login/pageBg.png");
+  background-repeat: no-repeat;
+  background-size: 100% 100%;
+  position: relative;
+  padding: 50px 0;
+  .registerContent {
+    width: 1200px;
+    background: #fff;
+    margin: 0 auto;
+    padding-bottom: 36px;
+    box-shadow: 0 0 66px 0 hsl(0deg 0% 67% / 35%);
+    display: flex;
+    justify-content: center;
+    .registerBox {
+      display: flex;
+      align-items: center;
+      .registerForm {
+        width: 420px;
+        box-sizing: border-box;
+        padding: 20px;
+        margin: 20px;
+        margin-left: 100px;
+        h1 {
+          font-size: 18px;
+          color: @color;
+          text-align: center;
+          margin-bottom: 30px;
+        }
+        .formItem {
+          margin-bottom: 10px;
+          .imgCode {
+            width: 140px;
+            height: 40px;
+            img {
+              width: 100%;
+              height: 100%;
+              background: #efefef;
+            }
+          }
+          span {
+            display: inline-block;
+            width: 80px;
+            text-align: left;
+            line-height: 40px;
+          }
+          .tips {
+            font-size: 12px;
+            margin: 0 0 10px 0;
+            color: #666;
+          }
+          .registerBtn {
+            width: 100%;
+            background: #b1b6bd;
+            color: #fff;
+            cursor: not-allowed;
+            margin-top: 15px;
+            &.isActive {
+              background: @color;
+              cursor: pointer;
+            }
+          }
+        }
+        .termsBox {
+          line-height: 20px;
+          .termsCheckBox {
+            vertical-align: text-bottom;
+            margin-right: 8px;
+          }
+          span {
+            vertical-align: middle;
+          }
+          .terms {
+            color: @color;
+            cursor: pointer;
+          }
+        }
+      }
+      .tipBox {
+        padding-left: 30px;
+        border-left: 1px solid #ddd;
+        .toLogin {
+          color: @color;
+          cursor: pointer;
+        }
+        p {
+          margin-bottom: 15px;
+        }
+        img {
+          width: 30px;
+          height: 30px;
+          margin-left: 50px;
+          cursor: pointer;
+        }
+      }
+    }
+  }
+}
+.ml10 {
+  margin-left: 10px;
+}
+
+.clauseBox {
+  height: 500px;
+}
+.protocolBox {
+  text-align: left;
+  line-height: 23px;
+  z-index: 1;
+  height: 500px;
+  overflow-y: auto;
+  margin-top: -20px;
+  box-sizing: border-box;
+  padding: 10px;
+}
+.el-dialog__footer button {
+  margin-right: 43%;
+  margin-top: 10px;
+}
+</style>

--
Gitblit v1.9.1