10个文件已添加
	
		
		3 文件已重命名
	
		
		8个文件已修改
	
	
 
	
	
	
	
	
	
	
	
|  |  |  | 
|---|
|  |  |  | "query": "", | 
|---|
|  |  |  | "launchMode": "default", | 
|---|
|  |  |  | "scene": null | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | "name": "", | 
|---|
|  |  |  | "pathName": "subpackages/flexJobManage/flexJobManage/flexJobManage", | 
|---|
|  |  |  | "query": "", | 
|---|
|  |  |  | "launchMode": "default", | 
|---|
|  |  |  | "scene": null | 
|---|
|  |  |  | } | 
|---|
|  |  |  | ] | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | root: 'subpackages/flexJob', | 
|---|
|  |  |  | pages: ['flexJobDetail/flexJobDetail'], | 
|---|
|  |  |  | pages: ['flexJobDetail/flexJobDetail', 'flexJobDetailFromTask/flexJobDetailFromTask'], | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | root: 'subpackages/flexJobManage', | 
|---|
|  |  |  | pages: ['flexJobManage/flexJobManage', 'flexJobDetailFromManage/flexJobDetailFromManage'], | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | ], | 
|---|
|  |  |  | // preloadRule: { | 
|---|
| New file | 
|  |  |  | 
|---|
|  |  |  | <template> | 
|---|
|  |  |  | <ContentView style="background-color: transparent" class="job-detail-content"> | 
|---|
|  |  |  | <FlexJobTopView 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' : '立即联系后可查看' }} | 
|---|
|  |  |  | </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') : '立即联系后可查看' }} | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </ContentView> | 
|---|
|  |  |  | <ProTabs | 
|---|
|  |  |  | v-model="tab" | 
|---|
|  |  |  | name="job-detail-content-tab" | 
|---|
|  |  |  | :showSmile="false" | 
|---|
|  |  |  | class="job-detail-content-tabs" | 
|---|
|  |  |  | isTransparent | 
|---|
|  |  |  | title-gutter="8" | 
|---|
|  |  |  | fullHeight | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <ProTabPane :title="`简历`" pane-key="1"> | 
|---|
|  |  |  | <curriculumView /> | 
|---|
|  |  |  | </ProTabPane> | 
|---|
|  |  |  | <ProTabPane :title="`经历`" pane-key="2"> | 
|---|
|  |  |  | <experienceView /> | 
|---|
|  |  |  | </ProTabPane> | 
|---|
|  |  |  | </ProTabs> | 
|---|
|  |  |  | <PageFooter> | 
|---|
|  |  |  | <slot name="footer"></slot> | 
|---|
|  |  |  | </PageFooter> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <script setup lang="ts"> | 
|---|
|  |  |  | import { FlexJobTopView, ProTabs, ProTabPane } from '@12333/components'; | 
|---|
|  |  |  | import { hiddenIDNumberForEnd6 } from '@12333/utils'; | 
|---|
|  |  |  | import curriculumView from './components/curriculumView.vue'; | 
|---|
|  |  |  | import experienceView from './components/experienceView.vue'; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | defineOptions({ | 
|---|
|  |  |  | name: 'JobDetailContent', | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | type Props = { | 
|---|
|  |  |  | isCollapse: boolean; | 
|---|
|  |  |  | }; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const tab = ref('1'); | 
|---|
|  |  |  | const props = withDefaults(defineProps<Props>(), {}); | 
|---|
|  |  |  | </script> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <style lang="scss"> | 
|---|
|  |  |  | @import '@/styles/common.scss'; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .job-detail-content-top { | 
|---|
|  |  |  | margin-bottom: 20px; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .job-detail-content-contact-info { | 
|---|
|  |  |  | padding-left: 130px; | 
|---|
|  |  |  | margin-bottom: 78px; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .job-detail-content-contact-info-item { | 
|---|
|  |  |  | display: flex; | 
|---|
|  |  |  | align-items: center; | 
|---|
|  |  |  | font-weight: 400; | 
|---|
|  |  |  | font-size: 24px; | 
|---|
|  |  |  | line-height: 28px; | 
|---|
|  |  |  | margin-bottom: 22px; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | &:last-child { | 
|---|
|  |  |  | margin-bottom: 0; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .job-detail-content-contact-info-item-label { | 
|---|
|  |  |  | color: boleGetCssVar('text-color', 'secondary'); | 
|---|
|  |  |  | margin-right: 8px; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .job-detail-content-contact-info-item-text { | 
|---|
|  |  |  | color: boleGetCssVar('text-color', 'primary'); | 
|---|
|  |  |  | flex: 1; | 
|---|
|  |  |  | min-width: 0; | 
|---|
|  |  |  | @include ellipsis; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | </style> | 
|---|
| File was renamed from apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/components/CurriculumViewItem.vue | 
|  |  |  | 
|---|
|  |  |  | <style lang="scss"> | 
|---|
|  |  |  | @import '@/styles/common.scss'; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .flexJobDetail-page-wrapper { | 
|---|
|  |  |  | .job-detail-content-tabs { | 
|---|
|  |  |  | .curriculum-list-item { | 
|---|
|  |  |  | display: flex; | 
|---|
|  |  |  | margin-bottom: 14px; | 
|---|
| File was renamed from apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/components/curriculumView.vue | 
|  |  |  | 
|---|
|  |  |  | <style lang="scss"> | 
|---|
|  |  |  | @import '@/styles/common.scss'; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .flexJobDetail-page-wrapper { | 
|---|
|  |  |  | .job-detail-content-tabs { | 
|---|
|  |  |  | .curriculum-position-list { | 
|---|
|  |  |  | width: 100%; | 
|---|
|  |  |  | display: flex; | 
|---|
| File was renamed from apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/components/experienceView.vue | 
|  |  |  | 
|---|
|  |  |  | <template> | 
|---|
|  |  |  | <ContentScrollView> | 
|---|
|  |  |  | <Cell title="岗位经历"> | 
|---|
|  |  |  | <nut-steps direction="vertical" progress-dot :current="3" class="flexJobDetail-steps"> | 
|---|
|  |  |  | <nut-steps direction="vertical" progress-dot :current="3" class="job-detail-content-steps"> | 
|---|
|  |  |  | <nut-step title="2024.12.24" content="您的订单已经打包完成,商品已发出"></nut-step> | 
|---|
|  |  |  | <nut-step title="2024.12.24" content="您的订单正在配送途中"></nut-step> | 
|---|
|  |  |  | <nut-step title="2024.12.24"> | 
|---|
|  |  |  | 
|---|
|  |  |  | <style lang="scss"> | 
|---|
|  |  |  | @import '@/styles/common.scss'; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .flexJobDetail-page-wrapper { | 
|---|
|  |  |  | .flexJobDetail-steps { | 
|---|
|  |  |  | .job-detail-content-tabs { | 
|---|
|  |  |  | .job-detail-content-steps { | 
|---|
|  |  |  | .nut-step-main { | 
|---|
|  |  |  | margin-bottom: 40px; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | editRichContent = '/subpackages/editRichContent/editRichContent', | 
|---|
|  |  |  |  | 
|---|
|  |  |  | flexJobDetail = '/subpackages/flexJob/flexJobDetail/flexJobDetail', | 
|---|
|  |  |  | flexJobDetailFromTask = '/subpackages/flexJob/flexJobDetailFromTask/flexJobDetailFromTask', | 
|---|
|  |  |  |  | 
|---|
|  |  |  | flexJobManage = '/subpackages/flexJobManage/flexJobManage/flexJobManage', | 
|---|
|  |  |  | flexJobDetailFromManage = '/subpackages/flexJobManage/flexJobDetailFromManage/flexJobDetailFromManage', | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // userInfo = '/subpackages/setting/userInfo/userInfo', | 
|---|
|  |  |  | // setting = '/subpackages/setting/setting/setting', | 
|---|
|  |  |  | 
|---|
|  |  |  | </CellChunk> | 
|---|
|  |  |  | <CellChunk title="用人"> | 
|---|
|  |  |  | <div class="workbenches-cell-list"> | 
|---|
|  |  |  | <TaskDetailWelfareItem :icon="IconFlexjobManage" text="灵工管理" /> | 
|---|
|  |  |  | <TaskDetailWelfareItem | 
|---|
|  |  |  | :icon="IconFlexjobManage" | 
|---|
|  |  |  | text="灵工管理" | 
|---|
|  |  |  | @click="goPage(RouterPath.flexJobManage)" | 
|---|
|  |  |  | /> | 
|---|
|  |  |  | <TaskDetailWelfareItem | 
|---|
|  |  |  | :icon="IconTaskManage" | 
|---|
|  |  |  | text="任务管理" | 
|---|
|  |  |  | 
|---|
|  |  |  | <template> | 
|---|
|  |  |  | <PageLayoutWithBg class="flexJobDetail-page-wrapper" title="灵工详情" :need-auth="false"> | 
|---|
|  |  |  | <LoadingLayout :loading="isLoading" :error="isError" :loadError="refetch"> | 
|---|
|  |  |  | <ContentView style="background-color: transparent"> | 
|---|
|  |  |  | <FlexJobTopView size="small" class="flexJobDetail-top" /> | 
|---|
|  |  |  | <div class="flexJobDetail-contact-info"> | 
|---|
|  |  |  | <div class="flexJobDetail-contact-info-item"> | 
|---|
|  |  |  | <div class="flexJobDetail-contact-info-item-label">手机号:</div> | 
|---|
|  |  |  | <div class="flexJobDetail-contact-info-item-text"> | 
|---|
|  |  |  | {{ isCollapse ? '13333333333' : '立即联系后可查看' }} | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | <div class="flexJobDetail-contact-info-item"> | 
|---|
|  |  |  | <div class="flexJobDetail-contact-info-item-label">身份证号:</div> | 
|---|
|  |  |  | <div class="flexJobDetail-contact-info-item-text"> | 
|---|
|  |  |  | {{ isCollapse ? hiddenIDNumberForEnd6('330902199909123456') : '立即联系后可查看' }} | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </ContentView> | 
|---|
|  |  |  | <ProTabs | 
|---|
|  |  |  | v-model="tab" | 
|---|
|  |  |  | name="flexJobDetail-tab" | 
|---|
|  |  |  | :showSmile="false" | 
|---|
|  |  |  | class="flexJobDetail-tabs" | 
|---|
|  |  |  | isTransparent | 
|---|
|  |  |  | title-gutter="8" | 
|---|
|  |  |  | fullHeight | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <ProTabPane :title="`简历`" pane-key="1"> | 
|---|
|  |  |  | <curriculumView /> | 
|---|
|  |  |  | </ProTabPane> | 
|---|
|  |  |  | <ProTabPane :title="`经历`" pane-key="2"> | 
|---|
|  |  |  | <experienceView /> | 
|---|
|  |  |  | </ProTabPane> | 
|---|
|  |  |  | </ProTabs> | 
|---|
|  |  |  | <PageFooter> | 
|---|
|  |  |  | <PageFooterAction | 
|---|
|  |  |  | :icon="IconShare" | 
|---|
|  |  |  | text="分享" | 
|---|
|  |  |  | :isFlex="false" | 
|---|
|  |  |  | openType="share" | 
|---|
|  |  |  | ></PageFooterAction> | 
|---|
|  |  |  | <PageFooterAction | 
|---|
|  |  |  | :icon="IconAttentionActive" | 
|---|
|  |  |  | text="收藏" | 
|---|
|  |  |  | :isFlex="false" | 
|---|
|  |  |  | ></PageFooterAction> | 
|---|
|  |  |  | <PageFooterBtn type="primary" @click="toggle">立即联系</PageFooterBtn> | 
|---|
|  |  |  | </PageFooter> | 
|---|
|  |  |  | <JobDetailContent :isCollapse="isCollapse"> | 
|---|
|  |  |  | <template #footer> | 
|---|
|  |  |  | <PageFooterAction | 
|---|
|  |  |  | :icon="IconShare" | 
|---|
|  |  |  | text="分享" | 
|---|
|  |  |  | :isFlex="false" | 
|---|
|  |  |  | openType="share" | 
|---|
|  |  |  | ></PageFooterAction> | 
|---|
|  |  |  | <PageFooterAction | 
|---|
|  |  |  | :icon="IconAttentionActive" | 
|---|
|  |  |  | text="收藏" | 
|---|
|  |  |  | :isFlex="false" | 
|---|
|  |  |  | ></PageFooterAction> | 
|---|
|  |  |  | <PageFooterBtn type="primary" @click="toggle">立即联系</PageFooterBtn> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  | </JobDetailContent> | 
|---|
|  |  |  | </LoadingLayout> | 
|---|
|  |  |  | </PageLayoutWithBg> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  | 
|---|
|  |  |  | import Taro from '@tarojs/taro'; | 
|---|
|  |  |  | import { useQuery } from '@tanstack/vue-query'; | 
|---|
|  |  |  | import * as orderServices from '@12333/services/api/Order'; | 
|---|
|  |  |  | import { FlexJobTopView, ProTabs, ProTabPane } from '@12333/components'; | 
|---|
|  |  |  | 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 curriculumView from './components/curriculumView.vue'; | 
|---|
|  |  |  | import experienceView from './components/experienceView.vue'; | 
|---|
|  |  |  | import { hiddenIDNumberForEnd6 } from '@12333/utils'; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | defineOptions({ | 
|---|
|  |  |  | name: 'flexJobDetail', | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const router = Taro.useRouter(); | 
|---|
|  |  |  | const taskId = router.params?.id ?? ''; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const tab = ref('1'); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const { | 
|---|
|  |  |  | isLoading, | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <style lang="scss"> | 
|---|
|  |  |  | @import '@/styles/common.scss'; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .flexJobDetail-page-wrapper { | 
|---|
|  |  |  | .flexJobDetail-top { | 
|---|
|  |  |  | margin-bottom: 20px; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .flexJobDetail-contact-info { | 
|---|
|  |  |  | padding-left: 130px; | 
|---|
|  |  |  | margin-bottom: 78px; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .flexJobDetail-contact-info-item { | 
|---|
|  |  |  | display: flex; | 
|---|
|  |  |  | align-items: center; | 
|---|
|  |  |  | font-weight: 400; | 
|---|
|  |  |  | font-size: 24px; | 
|---|
|  |  |  | line-height: 28px; | 
|---|
|  |  |  | margin-bottom: 22px; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | &:last-child { | 
|---|
|  |  |  | margin-bottom: 0; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .flexJobDetail-contact-info-item-label { | 
|---|
|  |  |  | color: boleGetCssVar('text-color', 'secondary'); | 
|---|
|  |  |  | margin-right: 8px; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .flexJobDetail-contact-info-item-text { | 
|---|
|  |  |  | color: boleGetCssVar('text-color', 'primary'); | 
|---|
|  |  |  | flex: 1; | 
|---|
|  |  |  | min-width: 0; | 
|---|
|  |  |  | @include ellipsis; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | </style> | 
|---|
| New file | 
|  |  |  | 
|---|
|  |  |  | <template> | 
|---|
|  |  |  | <LoadingLayout :loading="isLoading" :error="isError" :loadError="refetch"> | 
|---|
|  |  |  | <JobDetailContent :isCollapse="true"> | 
|---|
|  |  |  | <template #footer> | 
|---|
|  |  |  | <PageFooterBtn type="primary" plain>谢绝</PageFooterBtn> | 
|---|
|  |  |  | <PageFooterBtn type="primary">录用</PageFooterBtn> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  | </JobDetailContent> | 
|---|
|  |  |  | </LoadingLayout> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <script setup lang="ts"> | 
|---|
|  |  |  | import Taro from '@tarojs/taro'; | 
|---|
|  |  |  | import { useQuery } from '@tanstack/vue-query'; | 
|---|
|  |  |  | import * as orderServices from '@12333/services/api/Order'; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | defineOptions({ | 
|---|
|  |  |  | name: 'InnerPage', | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const router = Taro.useRouter(); | 
|---|
|  |  |  | const taskId = router.params?.id ?? ''; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const { | 
|---|
|  |  |  | isLoading, | 
|---|
|  |  |  | isError, | 
|---|
|  |  |  | data: detail, | 
|---|
|  |  |  | refetch, | 
|---|
|  |  |  | } = useQuery({ | 
|---|
|  |  |  | queryKey: ['orderServices/getOrdeForDetail', taskId], | 
|---|
|  |  |  | queryFn: async () => { | 
|---|
|  |  |  | return await orderServices.getOrdeForDetail( | 
|---|
|  |  |  | { id: taskId }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | showLoading: false, | 
|---|
|  |  |  | } | 
|---|
|  |  |  | ); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | placeholderData: () => ({} as API.OrderInfoDto), | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | </script> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <style lang="scss"> | 
|---|
|  |  |  | @import '@/styles/common.scss'; | 
|---|
|  |  |  | </style> | 
|---|
| New file | 
|  |  |  | 
|---|
|  |  |  | export default definePageConfig({ | 
|---|
|  |  |  | disableScroll: true, | 
|---|
|  |  |  | }); | 
|---|
| New file | 
|  |  |  | 
|---|
|  |  |  | <template> | 
|---|
|  |  |  | <PageLayoutWithBg class="flexJobDetailFromTask-page-wrapper" title="灵工详情"> | 
|---|
|  |  |  | <InnerPage></InnerPage> | 
|---|
|  |  |  | </PageLayoutWithBg> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <script setup lang="ts"> | 
|---|
|  |  |  | import InnerPage from './InnerPage.vue'; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | defineOptions({ | 
|---|
|  |  |  | name: 'flexJobDetailFromTask', | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | </script> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <style lang="scss"> | 
|---|
|  |  |  | @import '@/styles/common.scss'; | 
|---|
|  |  |  | </style> | 
|---|
| New file | 
|  |  |  | 
|---|
|  |  |  | <template> | 
|---|
|  |  |  | <LoadingLayout :loading="isLoading" :error="isError" :loadError="refetch"> | 
|---|
|  |  |  | <JobDetailContent :isCollapse="true"> | 
|---|
|  |  |  | <template #footer> | 
|---|
|  |  |  | <PageFooterBtn type="primary" plain>解约</PageFooterBtn> | 
|---|
|  |  |  | <PageFooterBtn type="primary">签约</PageFooterBtn> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  | </JobDetailContent> | 
|---|
|  |  |  | </LoadingLayout> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <script setup lang="ts"> | 
|---|
|  |  |  | import Taro from '@tarojs/taro'; | 
|---|
|  |  |  | import { useQuery } from '@tanstack/vue-query'; | 
|---|
|  |  |  | import * as orderServices from '@12333/services/api/Order'; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | defineOptions({ | 
|---|
|  |  |  | name: 'InnerPage', | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const router = Taro.useRouter(); | 
|---|
|  |  |  | const taskId = router.params?.id ?? ''; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const { | 
|---|
|  |  |  | isLoading, | 
|---|
|  |  |  | isError, | 
|---|
|  |  |  | data: detail, | 
|---|
|  |  |  | refetch, | 
|---|
|  |  |  | } = useQuery({ | 
|---|
|  |  |  | queryKey: ['orderServices/getOrdeForDetail', taskId], | 
|---|
|  |  |  | queryFn: async () => { | 
|---|
|  |  |  | return await orderServices.getOrdeForDetail( | 
|---|
|  |  |  | { id: taskId }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | showLoading: false, | 
|---|
|  |  |  | } | 
|---|
|  |  |  | ); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | placeholderData: () => ({} as API.OrderInfoDto), | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | </script> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <style lang="scss"> | 
|---|
|  |  |  | @import '@/styles/common.scss'; | 
|---|
|  |  |  | </style> | 
|---|
| New file | 
|  |  |  | 
|---|
|  |  |  | export default definePageConfig({ | 
|---|
|  |  |  | disableScroll: true, | 
|---|
|  |  |  | }); | 
|---|
| New file | 
|  |  |  | 
|---|
|  |  |  | <template> | 
|---|
|  |  |  | <PageLayoutWithBg class="flexJobDetailFromManage-page-wrapper" title="灵工详情"> | 
|---|
|  |  |  | <InnerPage></InnerPage> | 
|---|
|  |  |  | </PageLayoutWithBg> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <script setup lang="ts"> | 
|---|
|  |  |  | import InnerPage from './InnerPage.vue'; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | defineOptions({ | 
|---|
|  |  |  | name: 'flexJobDetailFromManage', | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | </script> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <style lang="scss"> | 
|---|
|  |  |  | @import '@/styles/common.scss'; | 
|---|
|  |  |  | </style> | 
|---|
| New file | 
|  |  |  | 
|---|
|  |  |  | <template> | 
|---|
|  |  |  | <ProTabs | 
|---|
|  |  |  | v-model="queryState.mineHireType" | 
|---|
|  |  |  | name="home-tab" | 
|---|
|  |  |  | :showPaneContent="false" | 
|---|
|  |  |  | class="home-tabs" | 
|---|
|  |  |  | isTransparent | 
|---|
|  |  |  | title-gutter="12" | 
|---|
|  |  |  | title-scroll | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <ProTabPane :title="`已签约`" :pane-key="TaskStatus.All"></ProTabPane> | 
|---|
|  |  |  | <ProTabPane :title="`待签约`" :pane-key="TaskStatus.WaitSign"></ProTabPane> | 
|---|
|  |  |  | <ProTabPane :title="`已解约`" :pane-key="TaskStatus.Effect"></ProTabPane> | 
|---|
|  |  |  | </ProTabs> | 
|---|
|  |  |  | <InfiniteLoading | 
|---|
|  |  |  | scrollViewClassName="common-infinite-scroll-list home-list" | 
|---|
|  |  |  | v-bind="infiniteLoadingProps" | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <template #renderItem="{ item }"> | 
|---|
|  |  |  | <FlexJobCard :show-done-detail="false" :show-footer-left="false" @click="goDetail(item)"> | 
|---|
|  |  |  | <template #footerRight> | 
|---|
|  |  |  | <template v-if="Number(queryState.mineHireType) === TaskStatus.All"> | 
|---|
|  |  |  | <nut-button | 
|---|
|  |  |  | class="flexJobManage-card-plain-button" | 
|---|
|  |  |  | type="default" | 
|---|
|  |  |  | plain | 
|---|
|  |  |  | @click.stop="handleUnContract" | 
|---|
|  |  |  | >解约</nut-button | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <nut-button type="primary" @click.stop="checkContract">查看合约</nut-button> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  | <nut-button v-else type="primary" @click.stop="goSignContract">签约</nut-button> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  | </FlexJobCard> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  | </InfiniteLoading> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <script setup lang="ts"> | 
|---|
|  |  |  | import { FlexJobCard, ProTabs, ProTabPane } from '@12333/components'; | 
|---|
|  |  |  | import { RouterPath } from '@/constants'; | 
|---|
|  |  |  | import { useInfiniteLoading } from '@12333/hooks'; | 
|---|
|  |  |  | import { OrderInputType } from '@12333/constants'; | 
|---|
|  |  |  | import * as orderServices from '@12333/services/api/Order'; | 
|---|
|  |  |  | import { TaskStatus } from '@/constants/task'; | 
|---|
|  |  |  | import Taro from '@tarojs/taro'; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | defineOptions({ | 
|---|
|  |  |  | name: 'InnerPage', | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const queryState = reactive({ | 
|---|
|  |  |  | mineHireType: TaskStatus.All, | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const { infiniteLoadingProps } = useInfiniteLoading( | 
|---|
|  |  |  | ({ pageParam }) => { | 
|---|
|  |  |  | let params: API.FrontOrderListInput = { | 
|---|
|  |  |  | pageModel: { | 
|---|
|  |  |  | rows: 20, | 
|---|
|  |  |  | page: pageParam, | 
|---|
|  |  |  | orderInput: [{ property: 'isRecommend', order: OrderInputType.Desc }], | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | }; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return orderServices.getFrontOrderList(params, { | 
|---|
|  |  |  | showLoading: false, | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | queryKey: ['orderServices/getFrontOrderList'], | 
|---|
|  |  |  | } | 
|---|
|  |  |  | ); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | function goDetail(item: API.FrontOrderList) { | 
|---|
|  |  |  | Taro.navigateTo({ | 
|---|
|  |  |  | url: `${RouterPath.flexJobDetailFromManage}?id=${item.id}`, | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | function checkContract() {} | 
|---|
|  |  |  | function handleUnContract() {} | 
|---|
|  |  |  | function goSignContract() {} | 
|---|
|  |  |  | </script> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <style lang="scss"> | 
|---|
|  |  |  | @import '@/styles/common.scss'; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .flexJobManage-page-wrapper { | 
|---|
|  |  |  | .flexJobManage-card-plain-button { | 
|---|
|  |  |  | margin-right: 30px; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | &.nut-button--plain { | 
|---|
|  |  |  | border-width: 1px; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | </style> | 
|---|
| New file | 
|  |  |  | 
|---|
|  |  |  | export default definePageConfig({ | 
|---|
|  |  |  | disableScroll: true, | 
|---|
|  |  |  | }); | 
|---|
| New file | 
|  |  |  | 
|---|
|  |  |  | <template> | 
|---|
|  |  |  | <PageLayoutWithBg class="flexJobManage-page-wrapper" :title="'灵工管理'"> | 
|---|
|  |  |  | <InnerPage></InnerPage> | 
|---|
|  |  |  | </PageLayoutWithBg> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <script setup lang="ts"> | 
|---|
|  |  |  | import InnerPage from './InnerPage.vue'; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | defineOptions({ | 
|---|
|  |  |  | name: 'flexJobManage', | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | </script> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <style lang="scss"> | 
|---|
|  |  |  | @import '@/styles/common.scss'; | 
|---|
|  |  |  | </style> | 
|---|
|  |  |  | 
|---|
|  |  |  | // const props = withDefaults(defineProps<Props>(), {}); | 
|---|
|  |  |  | const router = Taro.useRouter(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const taskId = router.params?.id ?? ''; | 
|---|
|  |  |  | const taskId = router.params?.id ?? 'c4cfe028-23e7-0be8-ee56-3a11e3743b9d'; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const { | 
|---|
|  |  |  | isLoading, | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <style lang="scss"> | 
|---|
|  |  |  | @import '@/styles/common.scss'; | 
|---|
|  |  |  | .jobApplicationDetail-page-wrapper { | 
|---|
|  |  |  | .taskDetail-time { | 
|---|
|  |  |  | font-size: 24px; | 
|---|
|  |  |  | color: boleGetCssVar('text-color', 'regular'); | 
|---|
|  |  |  | line-height: 36px; | 
|---|
|  |  |  | margin-bottom: 16px; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .task-card-welfare-wrapper { | 
|---|
|  |  |  | display: flex; | 
|---|
|  |  |  | align-items: flex-start; | 
|---|
|  |  |  | padding-bottom: 48px; | 
|---|
|  |  |  | border-bottom: 1px solid #d9d9d9; | 
|---|
|  |  |  | margin-bottom: 12px; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .task-card-welfare-list { | 
|---|
|  |  |  | flex: 1; | 
|---|
|  |  |  | display: flex; | 
|---|
|  |  |  | min-width: 0; | 
|---|
|  |  |  | flex-wrap: wrap; | 
|---|
|  |  |  | min-height: 40px; | 
|---|
|  |  |  | row-gap: 6px; | 
|---|
|  |  |  | column-gap: 18px; | 
|---|
|  |  |  | margin-right: 10px; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .task-card-welfare-list-item { | 
|---|
|  |  |  | font-size: 24px; | 
|---|
|  |  |  | color: #ff7d00; | 
|---|
|  |  |  | line-height: 36px; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .taskDetail-address-wrapper { | 
|---|
|  |  |  | padding: 28px 32px 14px; | 
|---|
|  |  |  | background: #f9fbff; | 
|---|
|  |  |  | border-radius: 8px; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .taskDetail-address-title-wrapper { | 
|---|
|  |  |  | display: flex; | 
|---|
|  |  |  | align-items: center; | 
|---|
|  |  |  | margin-bottom: 22px; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .taskDetail-address-title-icon { | 
|---|
|  |  |  | width: 40px; | 
|---|
|  |  |  | height: 40px; | 
|---|
|  |  |  | margin-right: 8px; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .taskDetail-address-title { | 
|---|
|  |  |  | flex: 1; | 
|---|
|  |  |  | min-width: 0; | 
|---|
|  |  |  | @include ellipsis; | 
|---|
|  |  |  | font-size: 28px; | 
|---|
|  |  |  | color: boleGetCssVar('text-color', 'primary'); | 
|---|
|  |  |  | line-height: 42px; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .taskDetail-address-info-wrapper { | 
|---|
|  |  |  | display: flex; | 
|---|
|  |  |  | align-items: center; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .taskDetail-address-info { | 
|---|
|  |  |  | flex: 1; | 
|---|
|  |  |  | min-width: 0; | 
|---|
|  |  |  | @include ellipsis; | 
|---|
|  |  |  | font-weight: 400; | 
|---|
|  |  |  | font-size: 24px; | 
|---|
|  |  |  | color: boleGetCssVar('text-color', 'regular'); | 
|---|
|  |  |  | line-height: 36px; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .taskDetail-address-info-icon { | 
|---|
|  |  |  | color: boleGetCssVar('text-color', 'secondary'); | 
|---|
|  |  |  | margin-left: 10px; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .taskDetail-welfare-list { | 
|---|
|  |  |  | display: flex; | 
|---|
|  |  |  | flex-wrap: wrap; | 
|---|
|  |  |  | row-gap: 24px; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | </style> | 
|---|
|  |  |  | 
|---|
|  |  |  | <div class="flexJob-card-footer-text">已录用</div> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  | <template #footerRight> | 
|---|
|  |  |  | <nut-button type="primary">查看详情</nut-button> | 
|---|
|  |  |  | <nut-button type="primary" @click="goToJobDetail(item.id)">查看详情</nut-button> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  | </FlexJobCard> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <script setup lang="ts"> | 
|---|
|  |  |  | import { OrderInputType } from '@12333/constants'; | 
|---|
|  |  |  | import { RouterPath } from '@/constants'; | 
|---|
|  |  |  | import { useInfiniteLoading } from '@12333/hooks'; | 
|---|
|  |  |  | import * as orderServices from '@12333/services/api/Order'; | 
|---|
|  |  |  | import { FlexJobCard } from '@12333/components'; | 
|---|
|  |  |  | import Taro from '@tarojs/taro'; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | defineOptions({ | 
|---|
|  |  |  | name: 'SignList', | 
|---|
|  |  |  | 
|---|
|  |  |  | queryKey: ['orderServices/getFrontOrderList'], | 
|---|
|  |  |  | } | 
|---|
|  |  |  | ); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | function goToJobDetail(id: string) { | 
|---|
|  |  |  | Taro.navigateTo({ | 
|---|
|  |  |  | url: `${RouterPath.flexJobDetailFromTask}?id=${id}`, | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | </script> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <style lang="scss"> | 
|---|
|  |  |  | 
|---|
|  |  |  | '做过:客房服务员、客房服务员、客房客房服务员、客房做过:客房服务员、客房服务员、客房客房服务员、客房' | 
|---|
|  |  |  | }} | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | <div class="flexJob-card-done-detail"> | 
|---|
|  |  |  | <div class="flexJob-card-done-detail" v-if="showDoneDetail"> | 
|---|
|  |  |  | <div class="flexJob-card-done-detail-item"> | 
|---|
|  |  |  | {{ '在「宁波雷迪森酒店」,做过客房服务员在「宁波雷迪森酒店」,做过客房服务员' }} | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | 
|---|
|  |  |  | type Props = CommonTaskCardProps & { | 
|---|
|  |  |  | showFooterLeft?: boolean; | 
|---|
|  |  |  | showFooterRight?: boolean; | 
|---|
|  |  |  | showDoneDetail?: boolean; | 
|---|
|  |  |  | }; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const props = withDefaults(defineProps<Props>(), { | 
|---|
|  |  |  | showFooterLeft: true, | 
|---|
|  |  |  | showFooterRight: true, | 
|---|
|  |  |  | showDoneDetail: true, | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | </script> | 
|---|
|  |  |  |  | 
|---|