ソースを参照

Merge branch 'dev' of https://git.citupro.com/zhengnaiwen_citu/menduner into dev

lifanagju_citu 1 年間 前
コミット
ca7fa1948d

+ 1 - 1
.env.development

@@ -1,6 +1,6 @@
 NODE_ENV = 'development'
 
-VITE_APP_TITLE = 门墩儿
+VITE_APP_TITLE = 门墩儿
 
 VITE_BASE_URL = 'http://192.168.3.80'
 

+ 12 - 2
src/api/common/index.js

@@ -10,12 +10,22 @@ export const smsLogin = (params) => {
   return http.post('/app-api/menduner/system/auth/sms-login', params)
 }
 
+// 密码登录
+export const passwordLogin = (params) => {
+  return http.post('/app-api/menduner/system/auth/login', params)
+}
+
 // 退出登录
 export const logout = () => {
   return http.post('/app-api/menduner/system/auth/logout')
 }
 
+// 修改密码
+export const updatePassword = (params) => {
+  return http.put('/app-api/menduner/system/mde-user/update-password', params)
+}
+
 // 重置密码
 export const resetPassword = (params) => {
-  return http.put('/app-api/menduner/system/mde-user/reset-password', params)
-} 
+  return http.put('/admin-api/menduner/system/mde-user/update-password', params)
+}

+ 1 - 1
src/layout/personal/navBar.vue

@@ -103,7 +103,7 @@ const handleLogout = async () => {
 }
 
 const items = ref([
-  { title: '账号设置', change: () => router.push({ path: '/personalAccount' }) },
+  { title: '账号设置', change: () => router.push({ path: '/personalAccount/accountBinding' }) },
   { title: '切换为招聘者', change: changeRole },
   { title: '退出登录', change: handleLogout }
 ])

+ 27 - 6
src/store/user.js

@@ -1,7 +1,7 @@
 import { defineStore } from 'pinia'
 import { reactive } from 'vue'
 import { setToken, deleteToken } from '@/utils/auth'
-import { smsLogin } from '@/api/common/index'
+import { smsLogin, passwordLogin } from '@/api/common/index'
 import { logout } from '@/api/common/index'
 import { getUserInfo } from '@/api/personal/user'
 
@@ -9,8 +9,9 @@ export const userLocaleStore = defineStore('user',
   () => {
     let accountInfo = reactive({}) // 登录返回的信息
     let userInfo = reactive({}) // 当前登录账号信息
-    // 登录
-    const handleLogin = async (data) => {
+
+    // 短信登录
+    const handleSmsLogin = async (data) => {
       return new Promise((resolve, reject) => {
         smsLogin(data).then(res => {
           const { data } = res
@@ -19,11 +20,29 @@ export const userLocaleStore = defineStore('user',
           accountInfo = data
           localStorage.setItem('accountInfo', JSON.stringify(data))
           localStorage.setItem('expiresTime', data.expiresTime) // token过期时间
-          getUserInfos() // 获取当前登录账户信息
+          getUserInfos()
+          resolve()
+        }).catch(err => { reject(err) })
+      })
+    }
+
+    // 密码登录
+    const handlePasswordLogin = async (data) => {
+      return new Promise((resolve, reject) => {
+        passwordLogin(data).then(res => {
+          const { data } = res
+          console.log(data, 'res-login-password')
+          setToken(data.accessToken)
+          accountInfo = data
+          localStorage.setItem('accountInfo', JSON.stringify(data))
+          localStorage.setItem('expiresTime', data.expiresTime) // token过期时间
+          getUserInfos()
           resolve()
         }).catch(err => { reject(err) })
       })
     }
+
+    // 获取当前登录账户信息
     const getUserInfos = async () => {
       try {
         const { data } = await getUserInfo({ id: accountInfo.userId })
@@ -34,6 +53,7 @@ export const userLocaleStore = defineStore('user',
         alert(error.msg)
       }
     }
+
     // 退出登录
     const userLogout = async () => {
       await logout()
@@ -44,8 +64,9 @@ export const userLocaleStore = defineStore('user',
     }
     return {
       userInfo,
-      handleLogin,
-      userLogout
+      handleSmsLogin,
+      userLogout,
+      handlePasswordLogin
     }
   },
   {

+ 9 - 0
src/styles/index.css

@@ -5,6 +5,7 @@
   --v-primary-lighten2: #4DB6AC;
   --v-primary-lighten3: #80CBC4;
   --v-primary-lighten4: #B2DFDB;
+  --default-text: #666;
 }
 
 .buttons {
@@ -16,3 +17,11 @@
   height: 36px;
   width: 88px;
 }
+
+.default-width {
+  width: 1184px;
+  min-width: 1184px;
+  max-width: 1184px;
+  margin: 0 auto;
+  align-items: center;
+}

+ 1 - 1
src/styles/index.min.css

@@ -1 +1 @@
-:root{--zIndex-dialog:9999;--v-primary-base:#00897B;--v-primary-lighten1:#26A69A;--v-primary-lighten2:#4DB6AC;--v-primary-lighten3:#80CBC4;--v-primary-lighten4:#B2DFDB}.buttons{height:36px;width:224px}.half-button{height:36px;width:88px}
+:root{--zIndex-dialog:9999;--v-primary-base:#00897B;--v-primary-lighten1:#26A69A;--v-primary-lighten2:#4DB6AC;--v-primary-lighten3:#80CBC4;--v-primary-lighten4:#B2DFDB;--default-text:#666}.buttons{height:36px;width:224px}.half-button{height:36px;width:88px}.default-width{width:1184px;min-width:1184px;max-width:1184px;margin:0 auto;align-items:center}

+ 9 - 0
src/styles/index.scss

@@ -5,6 +5,7 @@
   --v-primary-lighten2: #4DB6AC;
   --v-primary-lighten3: #80CBC4;
   --v-primary-lighten4: #B2DFDB;
+  --default-text: #666;
 }
 // 长按钮
 .buttons {
@@ -15,4 +16,12 @@
 .half-button {
   height: 36px;
   width: 88px;
+}
+// 默认宽度
+.default-width {
+  width: 1184px;
+  min-width: 1184px;
+  max-width: 1184px;
+  margin: 0 auto;
+  align-items: center;
 }

+ 3 - 1
src/views/Home/personal/account/dynamic/accountBinding.vue

@@ -3,13 +3,15 @@
     <h3>账号绑定</h3>
     <v-divider class="mb-4"></v-divider>
     <div>
-      <div class="login-user">当前登录账号: <span>13229740091</span> <span class="activeText ml-3">改绑手机号</span></div>
+      <div class="login-user">当前登录账号: <span>{{ userInfo.phone }}</span> <span class="activeText ml-3">改绑手机号</span></div>
       <div class="tips mt-2 mb-1">账号即绑定的手机号,用于使用账号密码或获取验证码进行登录。</div>
     </div>
   </div>
 </template>
 
 <script setup name="accountBinding">
+// 当前登录的用户信息
+const userInfo = JSON.parse(localStorage.getItem('userInfo'))
 </script>
 
 <style lang="scss" scoped>

+ 6 - 12
src/views/Home/personal/account/dynamic/editPassword.vue

@@ -2,10 +2,7 @@
   <div>
     <h3>修改密码</h3>
     <v-divider class="mb-4"></v-divider>
-    <div>
-      <div class="login-user">当前登录账号: <span style="color: #483d3d;">{{ userInfo.phone }}</span></div>
-      <div class="error-tips mt-2 mb-1">检测到当前账号未设置密码,设置后可使用账号密码进行登录。</div>
-    </div>
+    <div class="login-user mb-4">当前登录账号: <span style="color: var(--v-primary-base);">{{ userInfo.phone }}</span></div>
     <div style="width: 300px;">
       <PhonePage ref="phoneRef"></PhonePage>
       <v-form ref="passwordRef">
@@ -43,7 +40,7 @@
 
 <script setup name="editPassword">
 import PhonePage from '@/components/VerificationCode'
-import { resetPassword } from '@/api/common/index'
+import { updatePassword } from '@/api/common/index'
 import { ref, reactive, computed } from 'vue'
 
 const phoneRef = ref()
@@ -68,9 +65,11 @@ const handleSubmit = async () => {
   if (!phoneValid || !passValid) return
   loading.value = true
   try {
-    await resetPassword({ password: query.password, ...phoneRef.value.loginData })
+    await updatePassword({ password: query.password, code: phoneRef.value.loginData.code })
+    console.log('success')
   } catch (error) {
     console.log(error, 'error')
+    alert(error.msg)
   } finally {
     loading.value = false
   }
@@ -84,13 +83,8 @@ h3 {
   font-weight: 600;
   padding-bottom: 25px;
 }
-.error-tips {
-  color: #f44336;
-  font-size: 12px;
-  font-weight: 600;
-}
 .login-user {
-  color: grey;
+  color: var(--default-text);
   font-weight: 600;
 }
 </style>

+ 23 - 0
src/views/Home/personal/account/dynamic/privacySettings.vue

@@ -2,10 +2,25 @@
   <div>
     <h3>隐私设置</h3>
     <v-divider class="mb-4"></v-divider>
+    <v-radio-group v-model="radios">
+      <v-radio v-for="k in items" :key="k.value" :label="k.label" :value="k.value" color="primary">
+        <template v-slot:label>
+          <div class="radio-text">{{ k.label }} <span class="radio-desc">{{ k.decs }}</span></div>
+        </template>
+      </v-radio>
+    </v-radio-group>
+    <v-divider class="mb-4"></v-divider>
   </div>
 </template>
 
 <script setup name="privacySettings">
+import { ref } from 'vue'
+const radios = ref(0)
+const items = [
+  { label: '简历公开', decs: '正在找工作,企业可以看到我的简历', value: 0 },
+  { label: '仅投递公司可见', decs: '可投递简历,仅投递可见', value: 1 },
+  { label: '简历保密', decs: '没找工作,企业不能搜索到您的简历', value: 2 }
+]
 </script>
 
 <style lang="scss" scoped>
@@ -15,4 +30,12 @@ h3 {
   font-weight: 600;
   padding-bottom: 25px;
 }
+::v-deep .radio-text {
+  font-weight: 700;
+  color: #000;
+}
+.radio-desc {
+  color: var(--default-text);
+  margin-left: 30px;
+}
 </style>

+ 1 - 1
src/views/Home/personal/account/index.vue

@@ -1,6 +1,6 @@
 <!-- 账号与安全中心 -->
 <template>
-  <div class="d-flex" style="height: 700px;">
+  <div class="d-flex pa-3" style="height: 700px;">
     <v-card class="left">
       <h3>账号设置</h3>
       

+ 27 - 0
src/views/Home/personal/components/hotPromotedPositions.vue

@@ -0,0 +1,27 @@
+<template>
+  <div>
+    <v-tabs v-model="tab" align-tabs="start" color="#00897B" bg-color="#fff">
+      <v-tab :value="1">推荐职位</v-tab>
+      <v-tab :value="2">最新职位</v-tab>
+      <v-tab :value="3">急聘职位</v-tab>
+    </v-tabs>
+    <v-window v-model="tab" class="mt-9">
+        <!-- 推荐职位 -->
+      <v-window-item :value="1">
+        111
+      </v-window-item>
+        <!-- 最新职位 -->
+      <v-window-item :value="2">
+        222
+      </v-window-item>
+      <v-window-item :value="3">
+        333
+      </v-window-item>
+    </v-window>
+  </div>
+</template>
+
+<script setup name="hotPromotedPositions">
+import {ref } from 'vue'
+const tab = ref(0)
+</script>

+ 5 - 1
src/views/Home/personal/index.vue

@@ -1,13 +1,17 @@
 <template>
-  <div class="parent">
+  <div>
     <headCarousel></headCarousel>
     <headSearch></headSearch>
+    <div class="default-width mt-3">
+      <hotPromotedPositions></hotPromotedPositions>
+    </div>
   </div>
 </template>
 
 <script setup>
 import headCarousel from './components/headCarousel.vue'
 import headSearch from './components/search.vue'
+import hotPromotedPositions from './components/hotPromotedPositions.vue'
 defineOptions({ name:'personal-index'})
 </script>
 

+ 6 - 2
src/views/login/index.vue

@@ -79,11 +79,15 @@ const tips = reactive({
   text: ''
 })
 const handleLogin = async () => {
-  const { valid } = await phoneRef.value.phoneForm.validate()
+  const { valid } = tab.value === 1 ? await phoneRef.value.phoneForm.validate() : await passRef.value.passwordForm.validate()
   if (!valid) return
   loginLoading.value = true
   try {
-    await userStore.handleLogin(phoneRef.value.loginData)
+    if (tab.value === 1) {
+      await userStore.handleSmsLogin(phoneRef.value.loginData)
+    } else {
+      await userStore.handlePasswordLogin(passRef.value.loginData)
+    }
     tips.color = 'success'
     tips.text = '登录成功'
     tips.show = true