Pārlūkot izejas kodu

Merge branch 'master' of https://git.nanodreamtech.com/Boss/yizhizan-h5

your_username 3 nedēļas atpakaļ
vecāks
revīzija
821ac14908

+ 3 - 2
components/nav-bar/index.vue

@@ -1,9 +1,9 @@
 <template>
   <view class="nav-bar">
     <view class="go-back">
-      <u-icon name="arrow-left" color="#fff" size="32" @click="goBack"></u-icon>
+      <u-icon name="arrow-left" :color="color" size="32" @click="goBack"></u-icon>
     </view>
-    <view class="nav-title">
+    <view class="nav-title" :style="{color:color}">
       {{ title }}
     </view>
   </view>
@@ -19,6 +19,7 @@ export default {
   },
   props: {
     title: "",
+    color:''
   },
 };
 </script>

+ 140 - 0
pages/my/jobApplicant/login.vue

@@ -0,0 +1,140 @@
+<template>
+  <view class="login">
+    <view class="logo-box">
+      <image src="@/static/images/jobApplicant/logo.svg" mode="scaleToFill" />
+    </view>
+    <view class="login-btn-box">
+      <view class="login-btn wechat"
+        ><image src="@/static/images/jobApplicant/wechat.svg" mode="scaleToFill" />
+        微信登录</view
+      >
+      <view class="login-btn password"
+        ><image
+          src="@/static/images/jobApplicant/password.svg"
+          mode="scaleToFill"
+        />账号密码登录</view
+      >
+      <view class="login-btn phone"
+        ><image
+          src="@/static/images/jobApplicant/phone.svg"
+          mode="scaleToFill"
+        />手机验证码登录</view
+      >
+      <view class="txt-desc">
+        <view class="check-box" @click="isArgee">
+          <image
+            src="@/static/images/jobApplicant/check.svg"
+            v-if="argee"
+            mode="scaleToFill"
+          />
+          <image
+            src="@/static/images/jobApplicant/border.svg"
+            v-else
+            mode="scaleToFill"
+          />
+        </view>
+        已阅读并同意<text>《亿职赞用户协议》</text>
+        和<text>《隐私协议》</text>,允许亿职赞统一管理本人账号信息
+      </view>
+    </view>
+  </view>
+</template>
+<script>
+export default {
+  data() {
+    return {
+      argee: false, //同意协议
+    };
+  },
+  /**
+   *
+   */
+  methods: {
+    isArgee() {
+      this.argee = !this.argee;
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+.login {
+  position: absolute;
+  left: 0;
+  right: 0;
+  top: 0;
+  bottom: 0;
+  display: flex;
+  flex-direction: column;
+  .logo-box {
+    flex: 1;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    image {
+      width: 160rpx;
+      height: 160rpx;
+    }
+  }
+  .login-btn-box {
+    flex-shrink: 0;
+    padding: 0 32rpx;
+    padding-bottom: 160rpx;
+    box-sizing: border-box;
+    .login-btn {
+      padding: 20rpx;
+      box-sizing: border-box;
+      border-radius: 100rpx;
+      color: rgba(255, 255, 255, 1);
+      font-family: DM Sans;
+      font-size: 32rpx;
+      font-weight: 400;
+      line-height: 44rpx;
+      display: flex;
+      justify-content: center;
+      align-items: center;
+      margin-bottom: 16rpx;
+      image {
+        width: 28rpx;
+        height: 28rpx;
+        margin-right: 20rpx;
+      }
+    }
+    .wechat {
+      background: linear-gradient(
+        90deg,
+        rgba(13, 39, 247, 1),
+        rgba(19, 193, 234, 1) 100%
+      );
+    }
+    .password {
+      background: rgba(1, 107, 246, 1);
+    }
+    .phone {
+      background: #99c4fa;
+    }
+  }
+  .txt-desc {
+    font-family: DM Sans;
+    font-size: 16rpx;
+    font-weight: 400;
+    letter-spacing: 0%;
+    text-align: left;
+    display: flex;
+    align-items: center;
+    color: #605d67;
+    text {
+      color: #016bf6;
+    }
+    .check-box {
+      display: flex;
+      justify-content: center;
+      align-items: center;
+      margin-right: 16rpx;
+      image {
+        width: 24rpx;
+        height: 24rpx;
+      }
+    }
+  }
+}
+</style>

+ 258 - 0
pages/my/jobApplicant/loginInput.vue

@@ -0,0 +1,258 @@
+<template>
+  <view class="login-container">
+    <navBar title="登录" color="#000" />
+    <view class="login-content">
+      <!-- 表单区域 -->
+      <view class="login-form">
+        <!-- 手机号码输入 -->
+        <view class="form-item">
+          <view class="item-label"> 手机号码 </view>
+          <u-input
+            placeholder="请输入登录的手机号码"
+            v-model="phoneNumber"
+            clearable
+            class="custom-input"
+            :customStyle="{ padding: '8rpx 24rpx ' }"
+          >
+            <template #prefix>
+              <u-icon name="phone" size="36rpx" color="#999" marginRight="20rpx"></u-icon>
+            </template>
+          </u-input>
+        </view>
+
+        <!-- 密码输入 -->
+        <view class="form-item">
+          <view class="item-label"> 登录密码 </view>
+          <u-input
+            placeholder="请输入密码"
+            v-model="password"
+            clearable
+            type="password"
+            class="custom-input"
+            :customStyle="{ padding: '8rpx 24rpx ' }"
+          >
+            <template #prefix>
+              <u-icon name="lock" size="36rpx" color="#999" marginRight="20rpx"></u-icon>
+            </template>
+          </u-input>
+          <!-- 忘记密码 -->
+          <view class="forgot-password">
+            <view @click="forgotPassword">忘记密码</view>
+          </view>
+        </view>
+
+        <!-- 登录按钮 -->
+        <u-button
+          type="primary"
+          @click="handleLogin"
+          :customStyle="{
+            marginTop: '32rpx',
+            height: '90rpx',
+            fontSize: '32rpx',
+            borderRadius: '100rpx',
+          }"
+          :disabled="!canLogin"
+          >登录</u-button
+        >
+
+        <!-- 注册链接 -->
+        <view class="register-section">
+          <view @click="goToRegister">注册</view>
+        </view>
+      </view>
+    </view>
+  </view>
+</template>
+
+<script>
+import navBar from "@/components/nav-bar/index.vue";
+export default {
+  data() {
+    return {
+      phoneNumber: "", // 手机号码
+      password: "", // 密码
+    };
+  },
+  components: {
+    navBar,
+  },
+  computed: {
+    // 判断是否可以登录
+    canLogin() {
+      return this.phoneNumber.length >= 11 && this.password.length >= 6;
+    },
+  },
+  methods: {
+    // 处理登录
+    handleLogin() {
+      if (!this.validateForm()) {
+        return;
+      }
+
+      uni.showLoading({
+        title: "登录中...",
+      });
+
+      // 模拟登录请求
+      setTimeout(() => {
+        uni.hideLoading();
+        uni.showToast({
+          title: "登录成功",
+          icon: "success",
+        });
+
+        // 登录成功后的操作,比如跳转到首页
+        setTimeout(() => {
+          uni.switchTab({
+            url: "/pages/index/index",
+          });
+        }, 1500);
+      }, 2000);
+    },
+
+    // 表单验证
+    validateForm() {
+      if (!this.phoneNumber) {
+        uni.showToast({
+          title: "请输入手机号码",
+          icon: "none",
+        });
+        return false;
+      }
+
+      if (!/^1[3-9]\d{9}$/.test(this.phoneNumber)) {
+        uni.showToast({
+          title: "请输入正确的手机号码",
+          icon: "none",
+        });
+        return false;
+      }
+
+      if (!this.password) {
+        uni.showToast({
+          title: "请输入密码",
+          icon: "none",
+        });
+        return false;
+      }
+
+      if (this.password.length < 6) {
+        uni.showToast({
+          title: "密码长度不能少于6位",
+          icon: "none",
+        });
+        return false;
+      }
+
+      return true;
+    },
+
+    // 忘记密码
+    forgotPassword() {
+      uni.navigateTo({
+        url: "/pages/forgot-password/forgot-password",
+      });
+    },
+
+    // 跳转到注册页面
+    goToRegister() {
+      uni.navigateTo({
+        url: "/pages/my/jobApplicant/register",
+      });
+    },
+  },
+};
+</script>
+
+<style scoped lang="scss">
+.login-container {
+  background: #fff;
+  position: absolute;
+  left: 0;
+  right: 0;
+  top: 0;
+  bottom: 0;
+  .login-content {
+    padding: 32rpx;
+    box-sizing: border-box;
+  }
+}
+
+.login-header {
+  text-align: center;
+  margin-bottom: 100rpx;
+  margin-top: 60rpx;
+}
+
+.login-form {
+}
+
+.form-item {
+  margin-bottom: 32rpx;
+}
+
+.item-label {
+  color: rgba(18, 26, 44, 1);
+  font-family: Roboto;
+  font-size: 32rpx;
+  font-weight: 400;
+  line-height: 51.2rpx;
+  letter-spacing: 0px;
+  text-align: left;
+  padding-bottom: 6rpx;
+}
+
+.custom-input {
+  box-sizing: border-box;
+  border: 2rpx solid rgba(158, 161, 168, 1);
+  border-radius: 24rpx;
+  background: rgba(255, 255, 255, 1);
+  padding: 8rpx 24rpx !important;
+}
+
+.forgot-password {
+  text-align: left;
+  margin-top: 8rpx;
+  color: rgba(102, 112, 133, 1);
+  font-family: Inter;
+  font-size: 24rpx;
+  font-weight: 400;
+  line-height: 40rpx;
+}
+
+.register-section {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  margin-top: 32rpx;
+  color: #016bf6;
+
+  font-family: Inter;
+  font-size: 12px;
+  font-weight: 400;
+  line-height: 20px;
+  letter-spacing: 0%;
+  text-align: right;
+  text-decoration-line: underline;
+}
+
+.other-login {
+  margin-top: 100rpx;
+}
+
+.divider-line {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  margin-bottom: 60rpx;
+}
+
+.line {
+  flex: 1;
+  height: 1rpx;
+  background: #e0e0e0;
+}
+::v-deep .u-input {
+  text-align: left !important;
+}
+</style>

+ 366 - 0
pages/my/jobApplicant/password.vue

@@ -0,0 +1,366 @@
+<template>
+  <view class="register-container">
+    <!-- 标题和进度 -->
+    <navBar title="创建账号密码2/2" color="#000" />
+    <view class="progress-box">
+      <view class="progress-item"></view>
+      <view class="progress-item"></view>
+    </view>
+    <!-- 表单区域 -->
+    <view class="register-form">
+      <!-- 密码输入 -->
+      <view class="form-item">
+        <view class="item-label"> 密码 </view>
+        <u-input
+          placeholder="请输入密码"
+          v-model="password"
+          clearable
+          :type="showPassword ? 'text' : 'password'"
+          maxlength="20"
+          class="custom-input"
+          @input="validatePassword"
+        >
+          <template v-slot:suffix>
+            <u-icon
+              :name="showPassword ? 'eye-fill' : 'eye-off'"
+              size="32rpx"
+              color="#999"
+              @click="showPassword = !showPassword"
+            ></u-icon>
+          </template>
+        </u-input>
+
+        <!-- 密码验证进度条 -->
+        <view class="password-progress">
+          <view class="progress-bar">
+            <view
+              class="progress-fill"
+              :class="progressClass"
+              :style="{ width: progressWidth }"
+            ></view>
+          </view>
+          <view class="progress-text">{{ progressText }}</view>
+        </view>
+
+        <!-- 密码要求列表 -->
+        <view class="password-rules">
+          <view class="rule-item" :class="{ 'rule-valid': hasMinLength }">
+            <image
+              src="@/static/images/jobApplicant/check.svg"
+              v-if="hasMinLength"
+              mode="scaleToFill"
+            />
+            <image
+              src="@/static/images/jobApplicant/border.svg"
+              v-else
+              mode="scaleToFill"
+            />
+            <text class="rule-text">最少8位数</text>
+          </view>
+          <view class="rule-item" :class="{ 'rule-valid': hasNumber }">
+            <image
+              src="@/static/images/jobApplicant/check.svg"
+              v-if="hasNumber"
+              mode="scaleToFill"
+            />
+            <image
+              src="@/static/images/jobApplicant/border.svg"
+              v-else
+              mode="scaleToFill"
+            />
+            <text class="rule-text">至少包含1个数字</text>
+          </view>
+          <view class="rule-item" :class="{ 'rule-valid': hasUpperCase }">
+            <image
+              src="@/static/images/jobApplicant/check.svg"
+              v-if="hasUpperCase"
+              mode="scaleToFill"
+            />
+            <image
+              src="@/static/images/jobApplicant/border.svg"
+              v-else
+              mode="scaleToFill"
+            />
+            <text class="rule-text">至少包含1个大写字母</text>
+          </view>
+        </view>
+      </view>
+
+      <u-button
+        type="primary"
+        :disabled="!canNext"
+        @click="handleNext"
+        :customStyle="{
+          marginTop: '32rpx',
+          height: '90rpx',
+          fontSize: '32rpx',
+          borderRadius: '100rpx',
+        }"
+      >
+        继续
+      </u-button>
+    </view>
+  </view>
+</template>
+
+<script>
+import navBar from "@/components/nav-bar/index.vue";
+export default {
+  data() {
+    return {
+      password: "",
+      showPassword: false,
+      hasMinLength: false,
+      hasNumber: false,
+      hasUpperCase: false,
+      validCount: 0,
+    };
+  },
+  components: {
+    navBar,
+  },
+  computed: {
+    // 计算满足的条件数量
+    satisfiedCount() {
+      let count = 0;
+      if (this.hasMinLength) count++;
+      if (this.hasNumber) count++;
+      if (this.hasUpperCase) count++;
+      return count;
+    },
+
+    // 进度条宽度
+    progressWidth() {
+      return (this.satisfiedCount / 3) * 100 + "%";
+    },
+
+    // 进度条颜色类
+    progressClass() {
+      switch (this.satisfiedCount) {
+        case 1:
+          return "progress-red";
+        case 2:
+          return "progress-orange";
+        case 3:
+          return "progress-blue";
+        default:
+          return "";
+      }
+    },
+
+    // 进度文本
+    progressText() {
+      switch (this.satisfiedCount) {
+        case 0:
+          return "密码强度:弱";
+        case 1:
+          return "密码强度:弱";
+        case 2:
+          return "密码强度:中";
+        case 3:
+          return "密码强度:强";
+        default:
+          return "密码强度:弱";
+      }
+    },
+
+    // 是否可以下一步
+    canNext() {
+      return this.satisfiedCount === 3;
+    },
+  },
+  methods: {
+    // 密码验证
+    validatePassword() {
+      // 验证最小长度
+      this.hasMinLength = this.password.length >= 8;
+
+      // 验证是否包含数字
+      this.hasNumber = /\d/.test(this.password);
+
+      // 验证是否包含大写字母
+      this.hasUpperCase = /[A-Z]/.test(this.password);
+    },
+
+    // 下一步
+    handleNext() {
+      if (!this.validateForm()) {
+        return;
+      }
+
+      uni.showLoading({
+        title: "设置中...",
+        mask: true,
+      });
+
+      setTimeout(() => {
+        uni.hideLoading();
+        uni.showToast({
+          title: "密码设置成功",
+          icon: "success",
+        });
+
+        // 跳转到下一步
+        setTimeout(() => {
+          uni.navigateTo({
+            url: `/pages/my/jobApplicant/registerSuccess?phone=${this.phoneNumber}`,
+          });
+        }, 1000);
+      }, 1500);
+    },
+
+    // 表单验证
+    validateForm() {
+      if (!this.password) {
+        uni.showToast({
+          title: "请输入密码",
+          icon: "none",
+        });
+        return false;
+      }
+
+      if (!this.canNext) {
+        uni.showToast({
+          title: "请满足所有密码要求",
+          icon: "none",
+        });
+        return false;
+      }
+
+      return true;
+    },
+  },
+};
+</script>
+
+<style scoped lang="scss">
+.register-container {
+  background: #fff;
+  position: absolute;
+  left: 0;
+  right: 0;
+  top: 0;
+  bottom: 0;
+}
+
+.register-form {
+  padding: 32rpx;
+  box-sizing: border-box;
+}
+
+.form-item {
+  margin-bottom: 32rpx;
+}
+
+.item-label {
+  color: rgba(18, 26, 44, 1);
+  font-family: Roboto;
+  font-size: 32rpx;
+  font-weight: 400;
+  line-height: 51.2rpx;
+  letter-spacing: 0px;
+  text-align: left;
+  padding-bottom: 6rpx;
+}
+
+.custom-input {
+  box-sizing: border-box;
+  border: 2rpx solid rgba(158, 161, 168, 1);
+  border-radius: 24rpx;
+  background: rgba(255, 255, 255, 1);
+  padding: 8rpx 24rpx !important;
+}
+
+// 密码验证进度条
+.password-progress {
+  margin-top: 32rpx;
+}
+
+.progress-bar {
+  width: 100%;
+  height: 16rpx;
+  background: #f0f0f0;
+  border-radius: 40rpx;
+  overflow: hidden;
+}
+
+.progress-fill {
+  height: 100%;
+  border-radius: 40rpx;
+  transition: all 0.3s ease;
+}
+
+.progress-red {
+  background: #d62c01;
+}
+
+.progress-orange {
+  background: #faae16;
+}
+.progress-blue {
+  background: #016bf6;
+}
+
+.progress-text {
+  font-size: 24rpx;
+  color: #666;
+  margin-top: 8rpx;
+  text-align: right;
+}
+
+// 密码要求列表
+.password-rules {
+  margin-top: 20rpx;
+}
+
+.rule-item {
+  display: flex;
+  align-items: center;
+  margin-bottom: 12rpx;
+  image{
+    width: 32rpx;
+    height: 32rpx;
+    margin-right: 16rpx;
+  }
+}
+
+.rule-text {
+  color: #4c4a53;
+  font-family: Roboto;
+  font-size: 32rpx;
+  font-weight: 400;
+  line-height: 51.2rpx;
+  text-align: left;
+}
+
+.rule-valid .rule-text {
+  color: #4c4a53;
+}
+
+.input-box {
+  position: relative;
+}
+
+.next-btn-active {
+  background: #2979ff;
+}
+
+::v-deep .u-input {
+  text-align: left !important;
+}
+
+.progress-box {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  gap: 24rpx;
+  padding-top: 40rpx;
+  box-sizing: border-box;
+  .progress-item {
+    width: 40rpx;
+    height: 8rpx;
+    background-color: #016bf6;
+    border-radius: 40rpx;
+  }
+}
+</style>

+ 354 - 0
pages/my/jobApplicant/register.vue

@@ -0,0 +1,354 @@
+<template>
+  <view class="register-container">
+    <!-- 标题和进度 -->
+    <navBar title="注册1/2" color="#000" />
+    <view class="progress-box">
+      <view class="progress-item"></view>
+      <view class="progress-item" style="background: #99C4FA;"></view>
+    </view>
+    <!-- 表单区域 -->
+    <view class="register-form">
+      <!-- 手机号码输入 -->
+      <view class="form-item">
+        <view class="item-label"> 手机号码 </view>
+        <u-input
+          placeholder="请输入登录的手机号码"
+          v-model="phoneNumber"
+          clearable
+          type="number"
+          maxlength="11"
+          @input="onPhoneInput"
+          class="custom-input"
+        >
+        </u-input>
+      </view>
+      <!-- 验证码输入 -->
+      <view class="form-item">
+        <text class="item-label">验证码</text>
+        <view class="input-container">
+          <view class="input-box">
+            <u-input
+              class="custom-input"
+              placeholder="输入验证码"
+              v-model="verificationCode"
+              type="number"
+              maxlength="6"
+              :clearable="false"
+            />
+            <view
+              class="verification-btn"
+              :class="{ 'verification-btn-disabled': isCounting || !canGetCode }"
+              @click="getVerificationCode"
+              >{{ countdownText }}</view
+            >
+          </view>
+        </view>
+      </view>
+
+      <!-- 下一步按钮 -->
+      <u-button
+        type="primary"
+        :disabled="!canNext"
+        @click="handleNext"
+        :customStyle="{
+          marginTop: '32rpx',
+          height: '90rpx',
+          fontSize: '32rpx',
+          borderRadius: '100rpx',
+        }"
+      >
+        下一步
+      </u-button>
+    </view>
+  </view>
+</template>
+
+<script>
+import navBar from "@/components/nav-bar/index.vue";
+export default {
+  data() {
+    return {
+      phoneNumber: "", // 手机号码
+      verificationCode: "", // 验证码
+      isCounting: false, // 是否在倒计时中
+      countdown: 60, // 倒计时秒数
+      countdownTimer: null, // 倒计时定时器
+    };
+  },
+  components: {
+    navBar,
+  },
+  computed: {
+    // 是否可以获取验证码
+    canGetCode() {
+      return /^1[3-9]\d{9}$/.test(this.phoneNumber);
+    },
+
+    // 是否可以下一步
+    canNext() {
+      return (
+        this.canGetCode &&
+        this.verificationCode.length === 6 &&
+        /^\d{6}$/.test(this.verificationCode)
+      );
+    },
+
+    // 倒计时显示文本
+    countdownText() {
+      return this.isCounting ? `${this.countdown}s后重新获取` : "获取验证码";
+    },
+  },
+  methods: {
+    // 手机号输入处理
+    onPhoneInput(e) {
+      // 限制只能输入数字
+      this.phoneNumber = e.replace(/[^\d]/g, "");
+    },
+
+    // 获取验证码
+    async getVerificationCode() {
+      if (!this.canGetCode) {
+        uni.showToast({
+          title: "请输入正确的手机号码",
+          icon: "none",
+        });
+        return;
+      }
+
+      if (this.isCounting) {
+        return;
+      }
+
+      // 显示加载中
+      uni.showLoading({
+        title: "发送中...",
+        mask: true,
+      });
+
+      try {
+        // 模拟API请求
+        await this.mockSendVerificationCode();
+
+        uni.showToast({
+          title: "验证码已发送",
+          icon: "success",
+        });
+
+        // 开始倒计时
+        this.startCountdown();
+      } catch (error) {
+        uni.showToast({
+          title: "发送失败,请重试",
+          icon: "none",
+        });
+      } finally {
+        uni.hideLoading();
+      }
+    },
+
+    // 模拟发送验证码API
+    mockSendVerificationCode() {
+      return new Promise((resolve, reject) => {
+        setTimeout(() => {
+          // 模拟90%成功率
+          if (Math.random() > 0.1) {
+            resolve({
+              code: 200,
+              message: "发送成功",
+            });
+          } else {
+            reject({
+              code: 500,
+              message: "发送失败",
+            });
+          }
+        }, 1000);
+      });
+    },
+
+    // 开始倒计时
+    startCountdown() {
+      this.isCounting = true;
+      this.countdown = 60;
+
+      this.countdownTimer = setInterval(() => {
+        this.countdown--;
+
+        if (this.countdown <= 0) {
+          this.stopCountdown();
+        }
+      }, 1000);
+    },
+
+    // 停止倒计时
+    stopCountdown() {
+      this.isCounting = false;
+      this.countdown = 60;
+      if (this.countdownTimer) {
+        clearInterval(this.countdownTimer);
+        this.countdownTimer = null;
+      }
+    },
+
+    // 下一步
+    handleNext() {
+      if (!this.validateForm()) {
+        return;
+      }
+
+      uni.showLoading({
+        title: "验证中...",
+        mask: true,
+      });
+
+      // 模拟验证码验证
+      setTimeout(() => {
+        uni.hideLoading();
+
+        // 这里应该是验证码验证逻辑
+        if (this.verificationCode === "123456") {
+          // 模拟固定验证码
+          uni.showToast({
+            title: "验证成功",
+            icon: "success",
+          });
+
+          // 跳转到下一步(注册2/2)
+          setTimeout(() => {
+            uni.navigateTo({
+              url: `/pages/my/jobApplicant/password?phone=${this.phoneNumber}`,
+            });
+          }, 1000);
+        } else {
+          uni.showToast({
+            title: "验证码错误",
+            icon: "none",
+          });
+        }
+      }, 1500);
+    },
+
+    // 表单验证
+    validateForm() {
+      if (!this.phoneNumber) {
+        uni.showToast({
+          title: "请输入手机号码",
+          icon: "none",
+        });
+        return false;
+      }
+
+      if (!this.canGetCode) {
+        uni.showToast({
+          title: "请输入正确的手机号码",
+          icon: "none",
+        });
+        return false;
+      }
+
+      if (!this.verificationCode) {
+        uni.showToast({
+          title: "请输入验证码",
+          icon: "none",
+        });
+        return false;
+      }
+
+      if (!/^\d{6}$/.test(this.verificationCode)) {
+        uni.showToast({
+          title: "请输入6位数字验证码",
+          icon: "none",
+        });
+        return false;
+      }
+
+      return true;
+    },
+  },
+
+  // 页面卸载时清除定时器
+  beforeUnmount() {
+    this.stopCountdown();
+  },
+};
+</script>
+
+<style scoped lang="scss">
+.register-container {
+  background: #fff;
+  position: absolute;
+  left: 0;
+  right: 0;
+  top: 0;
+  bottom: 0;
+}
+
+.register-form {
+  padding: 32rpx;
+  box-sizing: border-box;
+}
+
+.form-item {
+  margin-bottom: 32rpx;
+}
+
+.item-label {
+  color: rgba(18, 26, 44, 1);
+  font-family: Roboto;
+  font-size: 32rpx;
+  font-weight: 400;
+  line-height: 51.2rpx;
+  letter-spacing: 0px;
+  text-align: left;
+  padding-bottom: 6rpx;
+}
+
+.custom-input {
+  box-sizing: border-box;
+  border: 2rpx solid rgba(158, 161, 168, 1);
+  border-radius: 24rpx;
+  background: rgba(255, 255, 255, 1);
+  padding: 8rpx 24rpx !important;
+}
+.input-box {
+  position: relative;
+}
+.verification-btn {
+  color: #2979ff;
+  font-size: 28rpx;
+  padding: 8rpx 16rpx;
+  white-space: nowrap;
+  position: absolute;
+  right: 24rpx;
+  top: 0;
+  bottom: 0;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+}
+
+.verification-btn-disabled {
+  color: #c0c4cc !important;
+}
+
+.next-btn-active {
+  background: #2979ff;
+}
+::v-deep .u-input {
+  text-align: left !important;
+}
+.progress-box {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  gap: 24rpx;
+  padding-top: 40rpx;
+  box-sizing: border-box;
+  .progress-item {
+    width: 40rpx;
+    height: 8rpx;
+    background-color: #016bf6;
+    border-radius: 40rpx;
+  }
+}
+</style>

+ 63 - 0
pages/my/jobApplicant/registerSuccess.vue

@@ -0,0 +1,63 @@
+<template>
+  <view class="success-box">
+    <view class="success-img">
+      <image src="@/static/images/jobApplicant/login-success.svg" mode="scaleToFill" />
+    </view>
+    <view class="success-title"
+      >您已经成功 <br />
+      注册账号</view
+    >
+    <view class="success-btn">
+      <u-button
+        type="primary"
+        @click="goLogin"
+        :customStyle="{
+          marginTop: '48rpx',
+          height: '90rpx',
+          fontSize: '32rpx',
+          borderRadius: '100rpx',
+        }"
+      >
+        登录
+      </u-button>
+    </view>
+  </view>
+</template>
+<script>
+export default {
+  data() {
+    return {};
+  },
+  methods: {
+    goLogin(){
+        uni.navigateTo({ url: '/pages/my/jobApplicant/loginInput' })
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+.success-box {
+    padding-top: 168rpx;
+    box-sizing: border-box;
+  .success-img {
+    width: 400rpx;
+    height: 280rpx;
+    margin: auto;
+    image {
+      width: 100%;
+      height: 100%;
+    }
+  }
+  .success-title {
+    color: #27252e;
+    font-family: DM Sans;
+    font-size: 48rpx;
+    font-weight: 700;
+    text-align: center;
+    margin-top: 64rpx;
+  }
+  .success-btn {
+    margin: 0 32rpx;
+  }
+}
+</style>

+ 1 - 0
static/images/jobApplicant/border.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1758536284686" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4954" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32"><path d="M512 65.98144c-245.91872 0-446.01856 200.09472-446.01856 446.01856 0 245.95456 200.064 446.01856 446.01856 446.01856s446.01856-200.064 446.01856-446.01856c0-245.91872-200.064-446.01856-446.01856-446.01856z m0 828.03712c-210.65728 0-382.01856-171.392-382.01856-382.01856 0-210.65728 171.36128-382.01856 382.01856-382.01856 210.62656 0 382.01856 171.36128 382.01856 382.01856 0 210.62656-171.392 382.01856-382.01856 382.01856z" p-id="4955" fill="#bfbfbf"></path></svg>

+ 1 - 0
static/images/jobApplicant/check.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1758536262317" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4764" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32"><path d="M512.2 64.2c-247.4 0-448 200.6-448 448s200.6 448 448 448 448-200.6 448-448-200.6-448-448-448zM709 445.6L474.4 632.4c-14.7 11.7-35.9 9.5-48-4.7-0.5-0.3-1-0.6-1.4-1L310.4 543c-15.5-11.3-18.8-33-7.5-48.5s33-18.8 48.5-7.5l101.3 74.1 213.2-169.7c15-11.9 36.8-9.5 48.7 5.5 11.8 14.9 9.4 36.8-5.6 48.7z" p-id="4765" fill="#1989FA"></path></svg>