apps/bMiniApp/project.private.config.json | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
apps/bMiniApp/src/components/JobDetailContent/JobDetailContent.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
apps/bMiniApp/src/pages/home/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/flexJobDetail.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
packages/services/apiV2/typings.d.ts | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
packages/utils/common.ts | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
apps/bMiniApp/project.private.config.json
@@ -9,6 +9,13 @@ "miniprogram": { "list": [ { "name": "灵工详情", "pathName": "subpackages/flexJob/flexJobDetail/flexJobDetail", "query": "id=700a3a67-5da5-49d2-a65a-08ddd661238b", "launchMode": "default", "scene": null }, { "name": "灵工管理", "pathName": "subpackages/flexJobManage/flexJobManage/flexJobManage", "query": "", @@ -61,13 +68,6 @@ "name": "验收管理", "pathName": "subpackages/task/taskCheck/taskCheck", "query": "", "launchMode": "default", "scene": null }, { "name": "灵工详情", "pathName": "subpackages/flexJob/flexJobDetail/flexJobDetail", "query": "id=c4cfe028-23e7-0be8-ee56-3a11e3743b9d", "launchMode": "default", "scene": null }, apps/bMiniApp/src/components/JobDetailContent/JobDetailContent.vue
@@ -1,17 +1,28 @@ <template> <ContentView style="background-color: transparent" class="job-detail-content"> <FlexJobTopView size="small" class="job-detail-content-top" /> <FlexJobTopView :avatar="avatar" :name="name" :age="age" :isReal="isReal" :gender="gender" :personalIdentityContent="personalIdentityContent" :educationalBackgroundContent="educationalBackgroundContent" :taskCount="taskCount" size="small" class="job-detail-content-top" /> <div class="job-detail-content-contact-info"> <div class="job-detail-content-contact-info-item"> <div class="job-detail-content-contact-info-item-label">手机号:</div> <div class="job-detail-content-contact-info-item-text"> {{ isCollapse ? '13333333333' : '立即联系后可查看' }} {{ isCollapse ? contactPhoneNumber : '立即联系后可查看' }} </div> </div> <div class="job-detail-content-contact-info-item"> <div class="job-detail-content-contact-info-item-label">身份证号:</div> <div class="job-detail-content-contact-info-item-text"> {{ isCollapse ? hiddenIDNumberForEnd6('330902199909123456') : '立即联系后可查看' }} {{ isCollapse ? hiddenIDNumberForEnd6(identity) : '立即联系后可查看' }} </div> </div> </div> @@ -42,6 +53,7 @@ import { hiddenIDNumberForEnd6 } from '@12333/utils'; import curriculumView from './components/curriculumView.vue'; import experienceView from './components/experienceView.vue'; import { EnumUserGender } from '@12333/constants'; defineOptions({ name: 'JobDetailContent', @@ -49,6 +61,18 @@ type Props = { isCollapse: boolean; avatar?: string; name?: string; gender?: EnumUserGender; age?: number; isReal?: boolean; personalIdentityContent?: string; educationalBackgroundContent?: string; taskCount?: number; contactPhoneNumber?: string; identity?: string; userId?: string; }; const tab = ref('1'); apps/bMiniApp/src/pages/home/index.vue
@@ -130,7 +130,7 @@ pageModel: { rows: 20, page: pageParam, orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }], orderInput: [{ property: 'createdTime', order: EnumPagedListOrder.Desc }], }, userExpectJobs: queryPositionState.userExpectJobs, gender: queryMenuState.genderLimit, apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/flexJobDetail.vue
@@ -1,7 +1,20 @@ <template> <PageLayoutWithBg class="flexJobDetail-page-wrapper" title="灵工详情" :need-auth="false"> <LoadingLayout :loading="isLoading" :error="isError" :loadError="refetch"> <JobDetailContent :isCollapse="isCollapse"> <JobDetailContent :avatar="userResumeInfo.avatar" :name="userResumeInfo.name" :age="userResumeInfo.age" :isReal="userResumeInfo.isReal" :gender="userResumeInfo.gender" :personalIdentityContent="userResumeInfo.personalIdentityContent" :educationalBackgroundContent="userResumeInfo.educationalBackgroundContent" :taskCount="userResumeInfo.taskCount" :contactPhoneNumber="userResumeInfo.contactPhoneNumber" :identity="userResumeInfo.identity" :isCollapse="isCollapse" :userId="userId" > <template #footer> <PageFooterAction :icon="IconShare" @@ -15,7 +28,7 @@ :isFlex="false" @click="handleAttention" ></PageFooterAction> <PageFooterBtn type="primary" @click="toggle">立即联系</PageFooterBtn> <PageFooterBtn type="primary" @click="handleContact">立即联系</PageFooterBtn> </template> </JobDetailContent> </LoadingLayout> @@ -25,31 +38,44 @@ <script setup lang="ts"> import Taro from '@tarojs/taro'; import { useQuery } from '@tanstack/vue-query'; import * as flexWorkerServices from '@12333/services/api/FlexWorker'; import * as userResumeServices from '@12333/services/apiV2/userResume'; import IconShare from '@/assets/flexJob/icon-share.png'; import IconAttention from '@/assets/flexJob/icon-attention-lg.png'; import IconAttentionActive from '@/assets/flexJob/icon-attention-lg-active.png'; import { useToggle } from 'senin-mini/hooks'; import { Message } from '@12333/utils'; import { useUserResume } from '@12333/hooks'; import { useAccessLogin } from '@/hooks'; defineOptions({ name: 'flexJobDetail', }); const router = Taro.useRouter(); const taskId = router.params?.id ?? ''; const userId = router.params?.id ?? ''; const { isLoading, isError, data: detail, refetch } = useUserResume(); const { isLoading, isError, userResumeInfo, refetch } = useUserResume({ userId, }); const { isCollapse, toggle } = useToggle(); const handleContact = useAccessLogin(async () => { try { if (!isCollapse.value) { await userResumeServices.contactUserResume({ id: userId }); toggle(); } } catch (error) {} }); async function handleAttention() { try { let params: API.CollectFlexWorkerResumeInput = { flexWorkerId: detail.value?.flexWorkerId, userResumeId: detail.value?.userResumeId, let params: API.CollectUserResumeCommand = { id: userId, // isCollected: userResumeInfo.value.i, }; let res = await flexWorkerServices.collectFlexWorkerResume(params); let res = await userResumeServices.collectUserResume(params); if (res) { Message.success('收藏成功'); } packages/services/apiV2/typings.d.ts
@@ -1412,6 +1412,9 @@ interface GetCheckReceiveTaskQuery { /** 任务Id */ taskInfoId?: string; checkReceiveStatus?: EnumTaskCheckReceiveStatus; /** 日期(B端小程序专用) */ date?: string; pageModel?: PagedListQueryPageModel; } @@ -1815,9 +1818,9 @@ /** 是否实名 */ isReal?: boolean; /** 我的收藏 */ collectUsers?: number; collectedUserCount?: number; /** 联系记录 */ contactRecords?: number; contactedRecordCount?: number; } interface GetEnterpriseQueryResult { @@ -2393,6 +2396,8 @@ releaseStatus?: EnumTaskReleaseStatus; recommendStatus?: EnumTaskRecommendStatus; checkReceiveStatus?: EnumTaskCheckReceiveStatus; /** 是否收藏 */ isCollected?: boolean; pageModel?: PagedListQueryPageModel; } @@ -2722,6 +2727,10 @@ ageMax?: number; /** 资格证书编号 */ userCredentials?: string[]; /** 是否已收藏 */ isCollected?: boolean; /** 是否已联系 */ isContacted?: boolean; pageModel?: PagedListQueryPageModel; } @@ -2763,6 +2772,8 @@ workSeniority?: string; /** 工作经验 */ workExperience?: string; /** 创建时间 */ createdTime?: string; } type GetUserResumeWorkExperienceQuery = Record<string, any>; packages/utils/common.ts
@@ -131,5 +131,7 @@ return list.filter(Boolean).join(separator); } export const hiddenIDNumberForEnd6 = (realIDNumber: string) => export const hiddenIDNumberForEnd6 = (realIDNumber: string) => { if (!realIDNumber) return ''; realIDNumber.replace(/^(\d+)(.{6})$/, '$1******'); };