Xiao_123 11 kuukautta sitten
vanhempi
commit
cc9da9ee25

+ 5 - 0
src/api/common/index.js

@@ -133,4 +133,9 @@ export const getBaseInfo = async (params) => {
     url: '/app-api/menduner/system/person/get',
     params
   })
+}
+
+// 上传文件
+export const uploadFile = async (data) => {
+  return await request.upload({ url: '/app-api/infra/file/upload', data })
 }

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

@@ -94,7 +94,7 @@
 </template>
 
 <script setup>
-import { ref } from 'vue'
+import { reactive, ref } from 'vue'
 import { getToken } from '@/utils/auth'
 import { useUserStore } from '@/store/user'
 import { useLocaleStore } from '@/store/locale'
@@ -152,7 +152,7 @@ const items = ref([
   { title: '切换为招聘者', icon: 'mdi-swap-horizontal', change: changeRole },
   { title: '退出登录', icon: 'mdi-logout', change: handleLogout }
 ])
-const baseInfo = JSON.parse(localStorage.getItem('baseInfo')) // 人才信息
+const baseInfo = reactive(JSON.parse(localStorage.getItem('baseInfo'))) // 人才信息
 
 const handleLogin = () => {
   router.push({ path: '/login' })

+ 5 - 0
src/locales/en.js

@@ -6,6 +6,11 @@ export default {
     cancel: 'Cancel',
     save: 'Save',
     add: 'Add',
+    saveMsg: 'Save successful',
+    addMsg: 'New successfully added',
+    delMsg: 'Delete successful',
+    uploadSucMsg: 'Upload successful',
+    uploadErrMsg: 'Upload failed'
   },
   sys: {
     api: {

+ 5 - 0
src/locales/zh-CN.js

@@ -6,6 +6,11 @@ export default {
     cancel: '取消',
     save: '保存',
     add: '新增',
+    saveMsg: '保存成功',
+    addMsg: '新增成功',
+    delMsg: '删除成功',
+    uploadSucMsg: '上传成功',
+    uploadErrMsg: '上传失败'
   },
   sys: {
     api: {

+ 2 - 0
src/store/user.js

@@ -63,6 +63,7 @@ export const useUserStore = defineStore('user',
         const data = await getBaseInfo({ userId: userId || accountInfo.userId })
         // baseInfo = data
         baseInfo = getFieldText(data)
+        console.log(baseInfo, 'get')
         localStorage.setItem('baseInfo', JSON.stringify(data))
       } catch (error) {
         Snackbar.error(error.msg)
@@ -91,6 +92,7 @@ export const useUserStore = defineStore('user',
       accountInfo = {}
       localStorage.clear()
     }
+    console.log(baseInfo, 'baseInfo')
     return {
       userInfo,
       baseInfo,

+ 39 - 3
src/views/resume/components/basicInfo.vue

@@ -13,8 +13,17 @@
           offset-y="33" 
           :color="baseInfo?.sex ? (baseInfo?.sex === '0' ? '#1867c0' : 'error') : 'error'" 
           :icon="baseInfo?.sex ? (baseInfo?.sex === '0' ? 'mdi-gender-male' : 'mdi-gender-female') : 'mdi-gender-female'">
-          <v-avatar size=80 :image="baseInfo.avatar || 'https://minio.citupro.com/dev/menduner/7.png'"></v-avatar>
-          <div v-show="showIcon" class="mdi mdi-camera-outline"></div>
+          <v-avatar size=80 :image="baseInfo.avatar || 'https://minio.citupro.com/dev/menduner/7.png'">
+          </v-avatar>
+          <div v-show="showIcon" @click="openFileInput" v-bind="$attrs" class="mdi mdi-camera-outline">
+            <input
+              type="file"
+              ref="fileInput"
+              accept="image/png, image/jpg, image/jpeg"
+              style="display: none;"
+              @change="handleUploadFile"
+            />
+          </div>
         </v-badge>
       </div>
       <!-- 基础信息 -->
@@ -100,8 +109,11 @@ import { getTimeStamp, timesTampChange } from '@/utils/date'
 import { saveResumeBasicInfo } from '@/api/resume'
 import { useUserStore } from '@/store/user'
 import { ref, shallowRef } from 'vue';
+import { uploadFile } from '@/api/common'
+import { useI18n } from '@/hooks/web/useI18n'
 
 defineOptions({name: 'resume-components-basicInfo'})
+const { t } = useI18n()
 const userStore = useUserStore()
 const CtFormRef = ref()
 const isEdit = ref(false)
@@ -115,6 +127,30 @@ const getBasicInfo = () => { // 获取基础信息
 }
 getBasicInfo()
 
+// 选择文件
+const fileInput = ref()
+const clicked = ref(false)
+const openFileInput = () => {
+  if (clicked.value) return
+  clicked.value = true
+  fileInput.value.click()
+  clicked.value = false
+}
+
+// 上传头像
+const handleUploadFile = async (e) => {
+  const file = e.target.files[0]
+  const formData = new FormData()
+  formData.append('file', file)
+  const { data } = await uploadFile(formData)
+  if (!data) return
+  Snackbar.success(t('common.uploadSucMsg'))
+  // 保存信息
+  await saveResumeBasicInfo({ ...baseInfo.value, avatar: data })
+  await userStore.getUserBaseInfos(baseInfo.value.userId)
+  getBasicInfo()
+}
+
 const formItems = ref({
   options: [
     {
@@ -280,7 +316,7 @@ const handleSave = async () => {
     else obj[e.key] = e.value
   })
   await saveResumeBasicInfo(obj)
-  Snackbar.success('保存成功!')
+  Snackbar.success(t('common.saveMsg'))
   isEdit.value = false
   // 获取当前登录账户信息
   await userStore.getUserBaseInfos(baseInfo.value.userId)