فهرست منبع

根据性别展示头像

Xiao_123 9 ماه پیش
والد
کامیت
66e9ec8a43

+ 2 - 1
src/components/Enterprise/components/positions.vue

@@ -58,7 +58,7 @@
           <div class="update-time">{{ timesTampChange(val.job.updateTime) }} 刷新</div>
         </div>
         <div v-else class="account-info">
-          <v-avatar :image="val.contact.avatar || 'https://minio.citupro.com/dev/menduner/7.png'"></v-avatar>
+          <v-avatar :image="getUserAvatar(val.contact.avatar, val.contact.sex)"></v-avatar>
           <span class="account-label">{{ val.contact.name }} · {{ val.contact.postNameCn }}</span>
           <span>
             <v-btn class="half-button" color="primary" size="small" @click="toDetails(val)">立即沟通</v-btn>
@@ -84,6 +84,7 @@ import { timesTampChange } from '@/utils/date'
 import { getDict } from '@/hooks/web/useDictionaries'
 import { dealDictObjData } from '@/utils/position'
 import { prologue } from '@/hooks/web/useIM'
+import { getUserAvatar } from '@/utils/avatar'
 import { getJobAdvertisedPositionCount, getJobAreaByEnterpriseId, getJobAdvertisedSearch } from '@/api/position'
 import MPagination from '@/components/CtPagination'
 import expType from '@/views/recruit/personal/position/components/conditionFilter/expType.vue'

+ 2 - 1
src/components/Position/longStrip.vue

@@ -7,7 +7,7 @@
           <v-btn v-if="props.showCancelBtn" class="half-button ml-3" color="primary" size="small" @click="handleCancel(val)">取消感兴趣</v-btn>
         </div>
         <div class="img-box">
-          <v-avatar :image="val.contact.avatar || 'https://minio.citupro.com/dev/menduner/7.png'" size="x-small"></v-avatar>
+          <v-avatar :image="getUserAvatar(val.contact.avatar, val.contact.sex)" size="x-small"></v-avatar>
           <span class="name">
             <span class="mx-3">{{ val.contact.name }}</span>
             <span class="gray">{{ val.contact.postNameCn }}</span>
@@ -45,6 +45,7 @@ defineOptions({ name: 'longStrip'})
 import { getPersonJobUnfavorite } from '@/api/position'
 import { useI18n } from '@/hooks/web/useI18n'
 import Snackbar from '@/plugins/snackbar'
+import { getUserAvatar } from '@/utils/avatar'
 
 const emits = defineEmits(['refresh'])
 const { t } = useI18n()

+ 2 - 1
src/components/PositionLongStrip/item.vue

@@ -57,7 +57,7 @@
         </template>
       </div>
       <div class="footer-right">
-        <v-avatar size="x-small" :image="item.contact.avatar || 'https://minio.citupro.com/dev/menduner/7.png'"></v-avatar>
+        <v-avatar size="x-small" :image="getUserAvatar(item.contact.avatar, item.contact.sex)"></v-avatar>
         <span class="mx-2 textColor666">
           {{ item.contact.name }}
           <span v-if="item?.contact?.postNameCn">|</span>
@@ -72,6 +72,7 @@
 import { commissionCalculation } from '@/utils/position'
 defineOptions({ name: 'long-strip-position-card-item' })
 import { ref, watch } from 'vue'
+import { getUserAvatar } from '@/utils/avatar'
 const props = defineProps({
   items: {
     type: Object,

+ 2 - 1
src/layout/company/navBar.vue

@@ -32,7 +32,7 @@
               <template v-slot:activator="{ props }">
                 <div class="d-flex ml-5 pl-2 align-center cursor-pointer" v-bind="props">
                   <v-avatar>
-                    <v-img alt="" :src="baseInfo?.avatar || 'https://minio.citupro.com/dev/menduner/7.png'"></v-img>
+                    <v-img alt="" :src="getUserAvatar(baseInfo?.avatar, baseInfo?.sex)"></v-img>
                   </v-avatar>
                   <div class="ml-2">{{ baseInfo?.name ?? $t('sys.tourist') }}</div>
                 </div>
@@ -99,6 +99,7 @@ import { useUserStore } from '@/store/user'; const userStore = useUserStore()
 import { useRouter } from 'vue-router'; const router = useRouter()
 import { useI18n } from '@/hooks/web/useI18n'; const { t } = useI18n()
 import MessageNotification from '../message.vue'
+import { getUserAvatar } from '@/utils/avatar'
 defineOptions({ name: 'personal-navbar' })
 
 defineProps({

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

@@ -42,7 +42,7 @@
               <template v-slot:activator="{ props }">
                 <div class="d-flex ml-3 align-center cursor-pointer" v-bind="props" @click="handleToPersonalCenter">
                   <v-avatar>
-                    <v-img alt="John" :src="baseInfo?.avatar || 'https://minio.citupro.com/dev/menduner/7.png'"></v-img>
+                    <v-img alt="John" :src="getUserAvatar(baseInfo?.avatar, baseInfo?.sex)"></v-img>
                   </v-avatar>
                   <div class="ml-3">{{ baseInfo?.name || $t('sys.tourist') }}</div>
                 </div>
@@ -119,6 +119,7 @@ import CtDialog from '@/components/CtDialog'
 import { useRouter } from 'vue-router'; const router = useRouter()
 import { getUserBindEnterpriseList, getUserRegisterEnterpriseApply } from '@/api/personal/user'
 import MessageNotification from '../message.vue'
+import { getUserAvatar } from '@/utils/avatar'
 
 // import { useIMStore } from '@/store/im'
 defineOptions({ name: 'personal-navbar' })

+ 10 - 0
src/utils/avatar.js

@@ -0,0 +1,10 @@
+const male = 'https://minio.citupro.com/dev/menduner/11.png'
+const female = 'https://minio.citupro.com/dev/menduner/7.png'
+
+// 根据性别返回默认头像
+export const getUserAvatar = (avatar, sex) => {
+  if (avatar) return avatar
+  if (!sex) return female
+  if (sex === '1') return male
+  else return female
+}

+ 4 - 3
src/views/recruit/components/message/components/chatting.vue

@@ -101,7 +101,7 @@
             <div style="width: 40px; height: 40px;">
               <v-avatar>
                 <v-img
-                  :src="val.from_uid === IM.uid ? mAvatar : info.avatar"
+                  :src="val.from_uid === IM.uid ? mAvatar : getUserAvatar(info.avatar, info.sex)"
                   :width="40"
                   height="40"
                   rounded
@@ -206,7 +206,8 @@ import { timesTampChange } from '@/utils/date'
 import { useIMStore } from '@/store/im'
 import { useRouter } from 'vue-router';
 import { getDict } from '@/hooks/web/useDictionaries'
-import { getDictValueWithLabel } from '@/utils/position'
+// import { getDictValueWithLabel } from '@/utils/position'
+import { getUserAvatar } from '@/utils/avatar'
 
 import { useUserStore } from '@/store/user'
 const isEnterprise = inject('isEnterprise')
@@ -242,7 +243,7 @@ const IM = useIMStore()
 const userStore = useUserStore()
 const loading = ref(false)
 
-const mAvatar = userStore.baseInfo?.avatar || 'https://minio.citupro.com/dev/menduner/7.png'
+const mAvatar = getUserAvatar(userStore.baseInfo?.avatar, userStore.baseInfo?.sex)
 
 const chatRef = ref()
 const inputVal = ref('')

+ 3 - 2
src/views/recruit/components/message/index.vue

@@ -39,14 +39,14 @@
               color="primary"
               class="mb-2"
               :active="val.channel.channelID === info?.channel?.channelID"
-              :title="val.userInfoVo ? val.userInfoVo.userInfoResp.name : '系统消息'"
+              :title="val.userInfoVo ? (val.userInfoVo.userInfoResp.name ? val.userInfoVo.userInfoResp.name : '游客') : '系统消息'"
               :subtitle="timesTampChange(+val.timestamp.padEnd(13, '0'))"
             >
               <template v-slot:subtitle="{ subtitle }">
                 <div class="mt-2">{{ subtitle }}</div>
               </template>
               <template v-slot:prepend>
-                <v-avatar :image="val.userInfoVo ? val.userInfoVo.userInfoResp.avatar : 'https://minio.citupro.com/dev/menduner/7.png'"></v-avatar>
+                <v-avatar :image="getUserAvatar(val?.userInfoVo?.userInfoResp?.avatar, val?.userInfoVo?.userInfoResp?.sex)"></v-avatar>
               </template>
               <template v-slot:append>
                 <v-badge
@@ -118,6 +118,7 @@ import { getUserInfo } from '@/api/personal/user'
 import { useIMStore } from '@/store/im'
 import { useUserStore } from '@/store/user'
 import Snackbar from '@/plugins/snackbar'
+import { getUserAvatar } from '@/utils/avatar'
 
 import { getJobAdvertised } from '@/api/enterprise'
 import { dealDictArrayData } from '@/utils/position'

+ 2 - 1
src/views/recruit/enterprise/elite/components/table.vue

@@ -17,7 +17,7 @@
             offset-y="6"
             :color="badgeColor(item)"
             :icon="badgeIcon(item)">
-            <v-avatar size="40" :image="item.person.avatar || 'https://minio.citupro.com/dev/menduner/7.png'"></v-avatar>
+            <v-avatar size="40" :image="getUserAvatar(item.person.avatar, item.person.sex)"></v-avatar>
           </v-badge>
           <span class="defaultLink ml-3">{{ item?.person?.name }}</span>
         </div>
@@ -55,6 +55,7 @@ import { useI18n } from '@/hooks/web/useI18n'
 import { useUserStore } from '@/store/user'
 import Snackbar from '@/plugins/snackbar'
 import InvitePage from './invite.vue'
+import { getUserAvatar } from '@/utils/avatar'
 // import PublicPage from './public.vue'
 
 const { t } = useI18n()

+ 2 - 1
src/views/recruit/enterprise/informationSetting/index.vue

@@ -4,7 +4,7 @@
       <template #avatar="{ item }">
         <div style="color: #7a7a7a;">头像</div>
         <div class="avatarsBox" @mouseover="showIcon = true" @mouseleave="showIcon = false">
-          <v-avatar class="elevation-5" size=80 :image="item.value || 'https://minio.citupro.com/dev/menduner/7.png'"></v-avatar>
+          <v-avatar class="elevation-5" size=80 :image="getUserAvatar(item.value, baseInfo?.sex)"></v-avatar>
           <div v-show="showIcon" @click="openFileInput" v-bind="$attrs" class="mdi mdi-camera-outline">
             <input
               type="file"
@@ -31,6 +31,7 @@ import { useI18n } from '@/hooks/web/useI18n'
 import { getDict } from '@/hooks/web/useDictionaries'
 import { useUserStore } from '@/store/user'
 import Snackbar from '@/plugins/snackbar'
+import { getUserAvatar } from '@/utils/avatar'
 
 const { t } = useI18n()
 const userStore = useUserStore()

+ 2 - 1
src/views/recruit/enterprise/interview/components/item.vue

@@ -2,7 +2,7 @@
   <div class="listItem d-flex align-center pa-3 mb-3" v-for="(item, index) in items" :key="'item_' + index">
     <div class="d-flex align-center">
       <div class="mr-5 font-size-16" style="color: orange; width: 96px;">{{ timesTampChange(item.time, 'Y-M-D h:m') }}</div>
-      <v-avatar class="mr-2" size=40 :image="item?.person?.avatar || 'https://minio.citupro.com/dev/menduner/7.png'"></v-avatar>
+      <v-avatar class="mr-2" size=40 :image="getUserAvatar(item?.person?.avatar, item?.person?.sex)"></v-avatar>
       <div class="d-flex flex-column mr-3" style="width: 110px;">
         <span class="ellipsis mb-1">{{ item?.person?.name }}</span>
         <span class="ellipsis" style="color: var(--color-999);">{{ item?.job?.name }}</span>
@@ -85,6 +85,7 @@ import { completedInterviewInvite, cancelInterviewInvite, saveInterviewInvite, n
 import InvitePage from './invite.vue'
 import Snackbar from '@/plugins/snackbar'
 import Confirm from '@/plugins/confirm'
+import { getUserAvatar } from '@/utils/avatar'
 
 defineProps({
   items: Array,

+ 2 - 1
src/views/recruit/personal/PersonalCenter/components/interview/item.vue

@@ -6,7 +6,7 @@
           <v-btn class="ml-3" color="error" size="small" @click="handleRefuse(val)">拒绝</v-btn>
         </div>
         <div class="img-box">
-          <v-avatar :image="val.contact.avatar || 'https://minio.citupro.com/dev/menduner/7.png'" size="x-small"></v-avatar>
+          <v-avatar :image="getUserAvatar(val.contact.avatar, val.contact.sex)" size="x-small"></v-avatar>
           <span class="name">
             <span class="mx-3">{{ val.contact.name }}</span>
             <span class="gray">{{ val.contact.postNameCn }}</span>
@@ -50,6 +50,7 @@ import { timesTampChange } from '@/utils/date'
 import { userInterviewInviteReject, userInterviewInviteConsent } from '@/api/recruit/personal/personalCenter'
 import Snackbar from '@/plugins/snackbar'
 import Confirm from '@/plugins/confirm'
+import { getUserAvatar } from '@/utils/avatar'
 
 const { t } = useI18n()
 const emits = defineEmits(['refresh'])

+ 2 - 1
src/views/recruit/personal/PersonalCenter/components/interviewSchedule.vue

@@ -40,7 +40,7 @@
             <span class="c-base">{{ val?.job?.payFrom || '--' }}-{{ val?.job?.payTo || '--' }}/{{ val?.job?.payName || '--' }}</span>
           </div>
           <div class="img-box">
-            <v-avatar size="small" :image="val.contact.avatar || 'https://minio.citupro.com/dev/menduner/7.png'"></v-avatar>
+            <v-avatar size="small" :image="getUserAvatar(val.contact.avatar, val.contact.sex)"></v-avatar>
             <span class="name">
               <span class="mx-3">{{ val.contact.name }}</span>
               <span class="septal-line"></span>
@@ -59,6 +59,7 @@ import { getDict } from '@/hooks/web/useDictionaries'
 import { getText } from '@/utils/getText'
 import { timesTampChange } from '@/utils/date'
 import { ref } from 'vue'
+import { getUserAvatar } from '@/utils/avatar'
 defineOptions({name: 'PersonalCenter-interviewSchedule'})
 const emit = defineEmits(['handleMore'])
 const props = defineProps({

+ 2 - 1
src/views/recruit/personal/PersonalCenter/components/seenMe.vue

@@ -5,7 +5,7 @@
         <div class="position-and-company">
           <div class="position">
             <div class="float-left">
-              <v-img :src="item?.contact.avatar || 'https://minio.citupro.com/dev/menduner/company-avatar.png'" :width="40" style="height: 40px;border-radius: 4px;"/>
+              <v-img :src="getUserAvatar(item?.contact.avatar, item?.contact.sex)" :width="40" style="height: 40px;border-radius: 4px;"/>
             </div>
             <div class="company-info">
               <h3 :class="{'default-active': item.active }" class="title1">{{ item.contact.name }}</h3>
@@ -45,6 +45,7 @@ import { getInterestedMePage } from '@/api/recruit/personal/personalCenter'
 import { dealDictObjData } from '@/utils/position'
 import { timesTampChange } from '@/utils/date'
 import Empty from '@/components/Empty'
+import { getUserAvatar } from '@/utils/avatar'
 
 const total = ref(0)
 const items = ref([])

+ 2 - 1
src/views/recruit/personal/PersonalCenter/dynamic/left.vue

@@ -7,7 +7,7 @@
         offset-y="50" 
         :color="baseInfo?.sex ? (baseInfo?.sex === '1' ? '#1867c0' : 'error') : 'error'" 
         :icon="baseInfo?.sex ? (baseInfo?.sex === '1' ? 'mdi-gender-male' : 'mdi-gender-female') : 'mdi-gender-female'">
-        <v-avatar size="x-large" :image="baseInfo?.avatar || 'https://minio.citupro.com/dev/menduner/7.png'"></v-avatar>
+        <v-avatar size="x-large" :image="getUserAvatar(baseInfo?.avatar, baseInfo?.sex)"></v-avatar>
       </v-badge>
       <div class="ml-5 content">
         <div class="username">
@@ -74,6 +74,7 @@ import delivery from '../components/delivery.vue'
 import interview from '../components/interview/index.vue'
 import interested from '../components/interested.vue'
 import seenMe from '../components/seenMe.vue'
+import { getUserAvatar } from '@/utils/avatar'
 
 const { t } = useI18n()
 const list = [

+ 2 - 1
src/views/recruit/personal/position/components/details.vue

@@ -70,7 +70,7 @@
             <v-divider class="my-3"></v-divider>
             <div class="contact" v-if="Object.keys(info).length">
               <div class="float-left d-flex align-center">
-                <v-img :src="info.contact.avatar || 'https://minio.citupro.com/dev/menduner/7.png'" :width="45" style="height: 45px;"></v-img>
+                <v-img :src="getUserAvatar(info.contact.avatar, info.contact.sex)" :width="45" style="height: 45px;"></v-img>
                 <div class="ml-2">
                   <div class="contact-name">{{ info.contact.name }}</div>
                   <div class="contact-info">
@@ -161,6 +161,7 @@ import promptToUpload from './jobDetails/promptToUpload'
 import selectResumeDialog from './jobDetails/selectResumeDialog'
 import { getToken } from '@/utils/auth'
 import { prologue } from '@/hooks/web/useIM'
+import { getUserAvatar } from '@/utils/avatar'
 
 const { t } = useI18n()
 const router = useRouter()

+ 2 - 1
src/views/recruit/personal/remuse/components/basicInfo.vue

@@ -13,7 +13,7 @@
           offset-y="33" 
           :color="baseInfo?.sex ? (baseInfo?.sex === '1' ? '#1867c0' : 'error') : 'error'" 
           :icon="baseInfo?.sex ? (baseInfo?.sex === '1' ? '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 size=80 :image="getUserAvatar(baseInfo?.avatar, baseInfo?.sex)">
           </v-avatar>
           <div v-show="showIcon" @click="openFileInput" v-bind="$attrs" class="mdi mdi-camera-outline">
             <input
@@ -123,6 +123,7 @@ import { getTimeStamp, timesTampChange } from '@/utils/date'
 import { updatePersonAvatar, saveResumeBasicInfo } from '@/api/recruit/personal/resume'
 import { useUserStore } from '@/store/user'
 import { uploadFile } from '@/api/common'
+import { getUserAvatar } from '@/utils/avatar'
 import { useI18n } from '@/hooks/web/useI18n'
 import { ref } from 'vue';
 defineOptions({name: 'resume-components-basicInfo'})