From a32100e31b93bc378b11ab93617a9c40b081ad70 Mon Sep 17 00:00:00 2001
From: wwf <1971391498@qq.com>
Date: 星期三, 15 四月 2026 16:44:03 +0800
Subject: [PATCH] 移除核验部分+登录注册接口对接

---
 src/views/login/index.vue |  140 ++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 121 insertions(+), 19 deletions(-)

diff --git a/src/views/login/index.vue b/src/views/login/index.vue
index aad58df..120f1d5 100644
--- a/src/views/login/index.vue
+++ b/src/views/login/index.vue
@@ -32,11 +32,17 @@
             </template>
           </el-input>
         </el-form-item>
-        <el-form-item prop="agreement" style="height: 30px;">
+        <!-- <el-form-item prop="agreement" style="height: 30px;">
           <el-checkbox v-model="form.agreement" label="鍚屾剰xxx鏈嶅姟鍗忚" size="large" />
-        </el-form-item>
+        </el-form-item> -->
 
-        <el-button class="mt-1" @click="submitLogin()" type="primary" size="large" style="width: 100%;">
+        <el-button 
+          class="mt-3" 
+          @click="submitLogin()" 
+          :loading="loginLoading" 
+          type="primary" size="large" 
+          style="width: 100%;"
+        >
           <el-text class="text-lg text-white">鐧诲綍</el-text>
         </el-button>
       </el-form>
@@ -55,8 +61,18 @@
             <el-radio :value="0">濂�</el-radio>
           </el-radio-group>
         </el-form-item>
-        <el-form-item prop="idCard">
-          <el-input v-model="form.idCard" placeholder="璇疯緭鍏ヨ韩浠借瘉鍙�" />
+        <el-form-item prop="idCardType">
+          <el-select v-model="form.idCardType" placeholder="璇佷欢绫诲瀷">
+            <el-option
+              v-for="item in idCardTypeItems"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item prop="idCard" :rules="[$rules.required('璇疯緭鍏ヨ瘉浠跺彿鐮�'), form.idCardType == 1 ? $rules.idCard('璇疯緭鍏ユ纭殑韬唤璇佸彿'): '' ]">
+          <el-input v-model="form.idCard" placeholder="璇疯緭鍏ヨ瘉浠跺彿鐮�" />
         </el-form-item>
         <el-form-item prop="mobile">
           <el-input v-model="form.mobile" placeholder="璇疯緭鍏ユ墜鏈哄彿" />
@@ -79,11 +95,17 @@
             </template>
           </el-input>
         </el-form-item>
-        <el-form-item prop="agreement" style="height: 30px;">
+        <!-- <el-form-item prop="agreement" style="height: 30px;">
           <el-checkbox v-model="form.agreement" label="鍚屾剰xxx鏈嶅姟鍗忚" size="large" />
-        </el-form-item>
+        </el-form-item> -->
 
-        <el-button class="mt-1" @click="submitRegister()" type="primary" size="large" style="width: 100%;">
+        <el-button 
+          class="mt-5"
+          :loading="registerLoading"
+          @click="submitRegister()" 
+          type="primary" size="large" 
+          style="width: 100%;"
+        >
           <el-text class="text-lg text-white">娉ㄥ唽</el-text>
         </el-button>
       </el-form>
@@ -91,7 +113,7 @@
       <el-row class="mt-7" justify="center">
         <el-button v-if="loginType!='register'" text type="primary" @click="changeLoginType('register')">娉ㄥ唽璐﹀彿</el-button>
         <el-divider v-if="loginType!='register'" direction="vertical" class="m-0 mt-1 mx-4" style="height: 24px !important" />
-        <el-button v-if="loginType!='qrCode'" text type="primary" @click="changeLoginType('qrCode')">浜岀淮鐮佺櫥褰�</el-button>
+        <el-button v-if="loginType!='qrCode'" text type="primary" @click="changeLoginType('qrCode')">寰俊鎵爜鐧诲綍</el-button>
         <el-divider v-if="loginType=='register'" direction="vertical" class="m-0 mt-1 mx-4" style="height: 24px !important" />
         <el-button v-if="loginType!='mobile'" text type="primary" @click="changeLoginType('mobile')">鎵嬫満鍙风櫥褰�</el-button>
       </el-row>
@@ -101,12 +123,16 @@
 
 <script>
 import { useLoginStore } from '@/stores/login.js'
+import { useSessionStore } from '@/stores/session.js'
 import { storeToRefs } from 'pinia';
+import idCardTypeItems from '@/assets/json/idCardTypeItems.json'
+import { tokenUtils } from '@/utils/axios.js';
 export default {
   components: {},
   setup() {
     const { loginDialogVisible } = storeToRefs(useLoginStore())
-    return { loginDialogVisible }
+    const { setUserInfo } = useSessionStore()
+    return { loginDialogVisible, setUserInfo }
   },
   data() {
     return {
@@ -114,14 +140,15 @@
       form: {
         name: '',
         sex: 1,
+        idCardType: 1,
         idCard: '',
-        mobile: '13537719675',
+        mobile: '',
         code: '',
         agreement: false
       },
+      idCardTypeItems: idCardTypeItems,
       rules: {
         name: [ this.$rules.required('璇疯緭鍏ュ鍚�') ],
-        idCard: [ this.$rules.required('璇疯緭鍏ヨ韩浠借瘉鍙�') ],
         mobile: [ this.$rules.required('璇疯緭鍏ユ墜鏈哄彿'), this.$rules.phone() ],
         code: [ this.$rules.required('璇峰~鍐欓獙璇佺爜'), this.$rules.code() ],
         agreement: [ this.$rules.checkbox('璇烽槄璇诲苟鍕鹃�夊悓鎰忓崗璁�') ]
@@ -129,13 +156,15 @@
       countdown: 180,
       countdownInterval: null,
       sendCodeLoading: false,
+      loginLoading: false,
+      registerLoading: false
     }
   },
   computed: {
     title() {
       let obj = {
         register: '娉� 鍐�',
-        mobile: '鎵� 鏈� 鍙风櫥 褰�',
+        mobile: '鎵� 鏈� 鍙� 鐧� 褰�',
         qrCode: '寰� 淇� 鎵� 鐮� 鐧� 褰�'
       }
       return obj[this.loginType]
@@ -148,15 +177,45 @@
     this.clearCountdownInterval()
   },
   watch: {
-    
+    loginDialogVisible: function(val) {
+      if (!val) {
+        this.clearCountdownInterval()
+      }
+    }
   },
   methods: {
     async sendCode() {
       try {
-        await this.$refs.accountForm.validateField('mobile')
-        this.startCountdownInterval()
-        this.$message.success('宸插彂閫侀獙璇佺爜锛岃娉ㄦ剰鏌ユ敹')
+        let ref = null
+        let scene = 0
+        if (this.loginType == 'mobile') {
+          ref = this.$refs.accountForm
+          scene = 33
+        } else if (this.loginType == 'register') {
+          ref = this.$refs.registerForm
+          scene = 32
+        }
+        const validate = await ref.validateField('mobile')
+        if (validate) {
+          const data = {
+            captchaVerification: '',
+            mobile: this.form.mobile,
+            scene: scene,
+          }
+          this.sendCodeLoading = true
+          this.$axios.post('/system/auth/send-sms-code', data).then(res => {
+            if (res.data.code == 0) {
+              this.startCountdownInterval()
+              this.$message.success('宸插彂閫侀獙璇佺爜锛岃娉ㄦ剰鏌ユ敹')
+            } else {
+              this.$message.error(res.data.msg || '鑾峰彇楠岃瘉鐮佸け璐�')
+            }
+          }).finally(() => {
+            this.sendCodeLoading = false
+          })
+        }
       } catch (error) {
+        console.log(error)
         this.$message.error('璇疯緭鍏ユ墜鏈哄彿鐮�')
       }
     },
@@ -179,15 +238,58 @@
     async submitLogin() {
       try {
         await this.$refs.accountForm.validate()
+        this.loginLoading = true
+        const data = {
+          mobile: this.form.mobile,
+          code: this.form.code
+        }
+        this.$axios.post('/system/kw/examinee/login', data).then(res => {
+          if (res.data.code == 0) {
+            const resData = res.data.data || {}
+              tokenUtils.setTokens(resData.accessToken, resData.refreshToken)
+              this.getUserInfo()
+              this.$message.success('鐧诲綍鎴愬姛')
+              this.loginDialogVisible = false
+          } else {
+            this.$message.error(res.data.msg)
+          }
+        }).finally(() => {
+          this.loginLoading = false
+        })
       } catch (error) {
         console.log()
       }
     },
+    getUserInfo() {
+      this.$axios.get('/system/kw/examinee/profile').then(res => {
+        if (res.data.code == 0) {
+          const resData = res.data.data || {}
+          this.setUserInfo(resData)
+        } else {
+          this.$message.error(res.data.msg)
+        }
+      })
+    },
     async submitRegister() {
       try {
-        await this.$refs.registerForm.validate()
+        const validate = await this.$refs.registerForm.validate()
+        if (validate) {
+          const data = { ...this.form }
+          this.$axios.post('/system/kw/examinee/register', data).then(res => {
+            if (res.data.code == 0) {
+              const resData = res.data.data || {}
+              tokenUtils.setTokens(resData.accessToken, resData.refreshToken)
+              this.getUserInfo()
+              this.$message.success('娉ㄥ唽鎴愬姛')
+              this.loginDialogVisible = false
+            } else {
+              this.$message.error(res.data.msg)
+            }
+          })
+        }
       } catch (error) {
-        console.log()
+        console.log(error)
+        this.$message.error('璇锋鏌ュ繀濉瓧娈�')
       }
     },
     changeLoginType(type) {

--
Gitblit v1.8.0