From 05357b9c587f64cd548e987643066b253cd9bfe0 Mon Sep 17 00:00:00 2001 From: zhengyiming <540361168@qq.com> Date: 星期五, 14 二月 2025 15:06:59 +0800 Subject: [PATCH] fix: b端 --- apps/bMiniApp/src/subpackages/task/taskHandleCheckDetail/InnerPage.vue | 108 +++++++ apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/components/CurriculumViewItem.vue | 55 +++ apps/bMiniApp/src/subpackages/task/taskHandleCheckDetail/taskHandleCheckDetail.vue | 13 apps/bMiniApp/src/constants/router.ts | 4 apps/bMiniApp/src/pages/workbenches/InnerPage.vue | 12 apps/bMiniApp/src/subpackages/task/components/TaskCheckPersonalView.vue | 61 ++++ apps/bMiniApp/src/subpackages/task/taskManage/InnerPage.vue | 68 ++++ apps/bMiniApp/project.private.config.json | 28 ++ apps/bMiniApp/src/app.config.ts | 8 apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/components/experienceView.vue | 40 ++ apps/bMiniApp/src/subpackages/task/taskCheck/InnerPage.vue | 66 ++++ apps/bMiniApp/src/subpackages/task/components/TaskCheckCard.vue | 51 +++ packages/components/src/Card/FlexJobTopView.vue | 9 apps/bMiniApp/src/subpackages/task/taskManage/taskManage.vue | 13 apps/bMiniApp/src/subpackages/task/taskCheck/taskCheck.config.ts | 3 apps/bMiniApp/src/subpackages/task/taskHandleCheckDetail/taskHandleCheckDetail.config.ts | 3 apps/bMiniApp/src/subpackages/task/taskCheck/taskCheck.vue | 13 packages/utils/common.ts | 3 apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/flexJobDetail.vue | 30 + apps/bMiniApp/src/subpackages/task/taskCheckDetail/taskCheckDetail.config.ts | 3 apps/bMiniApp/src/subpackages/task/taskManage/taskManage.config.ts | 3 apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/components/curriculumView.vue | 114 ++++++++ apps/bMiniApp/src/subpackages/task/taskCheckDetail/taskCheckDetail.vue | 13 apps/bMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue | 81 +++++ packages/components/src/Card/MyTaskCard.vue | 5 apps/bMiniApp/src/components/Chunk/ChunkTitle.vue | 4 apps/bMiniApp/src/styles/nut.scss | 28 ++ 27 files changed, 828 insertions(+), 11 deletions(-) diff --git a/apps/bMiniApp/project.private.config.json b/apps/bMiniApp/project.private.config.json index 3ff7cda..4b60a88 100644 --- a/apps/bMiniApp/project.private.config.json +++ b/apps/bMiniApp/project.private.config.json @@ -9,6 +9,34 @@ "miniprogram": { "list": [ { + "name": "浠诲姟绠$悊", + "pathName": "subpackages/task/taskManage/taskManage", + "query": "", + "launchMode": "default", + "scene": null + }, + { + "name": "楠屾敹浜哄憳璇︽儏", + "pathName": "subpackages/task/taskHandleCheckDetail/taskHandleCheckDetail", + "query": "id=57a8f533-2a46-7a88-e008-3a1775810dd2", + "launchMode": "default", + "scene": null + }, + { + "name": "楠屾敹璇︽儏", + "pathName": "subpackages/task/taskCheckDetail/taskCheckDetail", + "query": "id=57a8f533-2a46-7a88-e008-3a1775810dd2", + "launchMode": "default", + "scene": null + }, + { + "name": "楠屾敹绠$悊", + "pathName": "subpackages/task/taskCheck/taskCheck", + "query": "", + "launchMode": "default", + "scene": null + }, + { "name": "鐏靛伐璇︽儏", "pathName": "subpackages/flexJob/flexJobDetail/flexJobDetail", "query": "id=c4cfe028-23e7-0be8-ee56-3a11e3743b9d", diff --git a/apps/bMiniApp/src/app.config.ts b/apps/bMiniApp/src/app.config.ts index 8e23d6e..45e4302 100644 --- a/apps/bMiniApp/src/app.config.ts +++ b/apps/bMiniApp/src/app.config.ts @@ -76,7 +76,13 @@ }, { root: 'subpackages/task', - pages: ['publishTask/publishTask'], + pages: [ + 'publishTask/publishTask', + 'taskCheck/taskCheck', + 'taskCheckDetail/taskCheckDetail', + 'taskHandleCheckDetail/taskHandleCheckDetail', + 'taskManage/taskManage', + ], }, { root: 'subpackages/city', diff --git a/apps/bMiniApp/src/components/Chunk/ChunkTitle.vue b/apps/bMiniApp/src/components/Chunk/ChunkTitle.vue index 49d88d5..94b00f9 100644 --- a/apps/bMiniApp/src/components/Chunk/ChunkTitle.vue +++ b/apps/bMiniApp/src/components/Chunk/ChunkTitle.vue @@ -1,6 +1,6 @@ <template> <div class="chunk-title-wrapper"> - <div class="chunk-title-line"></div> + <!-- <div class="chunk-title-line"></div> --> <div class="chunk-title">{{ title }}</div> </div> </template> @@ -21,7 +21,7 @@ @import '@/styles/common.scss'; .chunk-title-wrapper { - padding: 32px 0; + padding: 24px 0; display: flex; align-items: center; diff --git a/apps/bMiniApp/src/constants/router.ts b/apps/bMiniApp/src/constants/router.ts index 330c92a..2e9128a 100644 --- a/apps/bMiniApp/src/constants/router.ts +++ b/apps/bMiniApp/src/constants/router.ts @@ -29,4 +29,8 @@ mineContactRecord = '/subpackages/mine/mineContactRecord/mineContactRecord', publishTask = '/subpackages/task/publishTask/publishTask', + taskCheck = '/subpackages/task/taskCheck/taskCheck', + taskCheckDetail = '/subpackages/task/taskCheckDetail/taskCheckDetail', + taskHandleCheckDetail = '/subpackages/task/taskHandleCheckDetail/taskHandleCheckDetail', + taskManage = '/subpackages/task/taskManage/taskManage', } diff --git a/apps/bMiniApp/src/pages/workbenches/InnerPage.vue b/apps/bMiniApp/src/pages/workbenches/InnerPage.vue index c62b8c3..e906178 100644 --- a/apps/bMiniApp/src/pages/workbenches/InnerPage.vue +++ b/apps/bMiniApp/src/pages/workbenches/InnerPage.vue @@ -18,8 +18,16 @@ <CellChunk title="鐢ㄤ汉"> <div class="workbenches-cell-list"> <TaskDetailWelfareItem :icon="IconFlexjobManage" text="鐏靛伐绠$悊" /> - <TaskDetailWelfareItem :icon="IconTaskManage" text="浠诲姟绠$悊" /> - <TaskDetailWelfareItem :icon="IconAcceptManage" text="楠屾敹绠$悊" /> + <TaskDetailWelfareItem + :icon="IconTaskManage" + text="浠诲姟绠$悊" + @click="goPage(RouterPath.taskManage)" + /> + <TaskDetailWelfareItem + :icon="IconAcceptManage" + text="楠屾敹绠$悊" + @click="goPage(RouterPath.taskCheck)" + /> </div> </CellChunk> </Cell> diff --git a/apps/bMiniApp/src/styles/nut.scss b/apps/bMiniApp/src/styles/nut.scss index ee5295d..df1482f 100644 --- a/apps/bMiniApp/src/styles/nut.scss +++ b/apps/bMiniApp/src/styles/nut.scss @@ -167,4 +167,32 @@ .pro-form-item-tips { word-break: break-all; } + + .pro-img-grid { + padding: 0 !important; + + .pro-img-grid-item { + .nut-grid-item__content--square { + padding: 0; + border: none; + display: block; + background-color: transparent; + } + } + + .pro-img-grid-img-item { + width: 100%; + height: 100%; + box-sizing: border-box; + position: relative; + padding: 20px; + } + + .pro-img-grid-img { + border-radius: 8px; + width: 100% !important; + height: 100%; + object-fit: cover; + } + } } diff --git a/apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/components/CurriculumViewItem.vue b/apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/components/CurriculumViewItem.vue new file mode 100644 index 0000000..62171b3 --- /dev/null +++ b/apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/components/CurriculumViewItem.vue @@ -0,0 +1,55 @@ +<template> + <div class="curriculum-list-item"> + <div class="curriculum-list-item-label" :style="{ width: props.labelWidth }"> + {{ props.label }} + </div> + <div class="curriculum-list-item-text"> + <slot>{{ props.text }}</slot> + </div> + </div> +</template> + +<script setup lang="ts"> +defineOptions({ + name: 'CurriculumViewItem', +}); + +type Props = { + label?: string; + text?: string; + labelWidth?: number | string; +}; + +const props = withDefaults(defineProps<Props>(), { + labelWidth: 'auto', +}); +</script> + +<style lang="scss"> +@import '@/styles/common.scss'; + +.flexJobDetail-page-wrapper { + .curriculum-list-item { + display: flex; + margin-bottom: 14px; + font-weight: 400; + font-size: 24px; + line-height: 36px; + + &:last-child { + margin-bottom: 0; + } + + .curriculum-list-item-label { + color: boleGetCssVar('text-color', 'secondary'); + } + + .curriculum-list-item-text { + color: boleGetCssVar('text-color', 'primary'); + flex: 1; + min-width: 0; + @include ellipsis; + } + } +} +</style> diff --git a/apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/components/curriculumView.vue b/apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/components/curriculumView.vue new file mode 100644 index 0000000..fb3ea33 --- /dev/null +++ b/apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/components/curriculumView.vue @@ -0,0 +1,114 @@ +<template> + <ContentScrollView> + <Cell :show-title="false"> + <CellChunk title="姹傝亴鎰忓悜"> + <div class="curriculum-list"> + <CurriculumViewItem label="鏈熸湜宀椾綅锛�"> + <div class="curriculum-position-list"> + <div class="curriculum-position-list-item">瀹㈡埧鏈嶅姟鍛�</div> + <div class="curriculum-position-list-item">瀹㈡埧鏈嶅姟鍛�</div> + <div class="curriculum-position-list-item">瀹㈡埧鏈嶅姟鍛�</div> + <div class="curriculum-position-list-item">瀹㈡埧鏈嶅姟鍛�</div> + <div class="curriculum-position-list-item">瀹㈡埧鍛�</div> + <div class="curriculum-position-list-item">瀹㈡埧鏈嶅姟鍛�</div> + <div class="curriculum-position-list-item">瀹㈡埧鏈嶅姟鍛�</div> + <div class="curriculum-position-list-item">瀹㈡埧鏈嶅姟鍛�</div> + </div> + </CurriculumViewItem> + <CurriculumViewItem label="绌洪棽鏃堕棿锛�" text="涓嶉檺"> </CurriculumViewItem> + <CurriculumViewItem label="姹傝亴鐘舵�侊細" text="绉瀬鎵惧伐浣�"> </CurriculumViewItem> + </div> + </CellChunk> + <CellChunk title="璧勬牸璇佷功"> + <nut-grid + square + :column-num="3" + :border="false" + :gutter="20" + v-if="list.length > 0" + class="pro-img-grid" + > + <nut-grid-item v-for="(item, index) in list" :key="item" class="pro-img-grid-item"> + <div class="pro-img-grid-img-item"> + <PreviewImage :src="item" class="pro-img-grid-img" :urls="list" /> + </div> + </nut-grid-item> + </nut-grid> + </CellChunk> + <CellChunk title="宸ヤ綔缁忛獙"> + <CurriculumViewItem label="宸ヤ綔骞撮檺锛�" text="鏃犲伐浣滅粡楠岋紝鐢ㄦ埛鑷繁濉啓"> + </CurriculumViewItem> + <CurriculumViewItem label="宸ヤ綔缁忛獙锛�" text="瀹㈡埧鏈嶅姟鍛橈紝鐢ㄦ埛鑷繁濉啓"> + </CurriculumViewItem> + </CellChunk> + <CellChunk title="璇︾粏淇℃伅"> + <CurriculumViewItem + label="韬珮锛�" + text="175 cm" + :label-width="labelWidth" + ></CurriculumViewItem> + <CurriculumViewItem + label="浣撻噸锛�" + text="80 kg" + :label-width="labelWidth" + ></CurriculumViewItem> + <CurriculumViewItem label="涓汉鐓х墖锛�"> + <nut-grid + square + :column-num="2" + :border="false" + :gutter="20" + v-if="list.length > 0" + class="pro-img-grid" + > + <nut-grid-item v-for="(item, index) in list" :key="item" class="pro-img-grid-item"> + <div class="pro-img-grid-img-item"> + <PreviewImage :src="item" class="pro-img-grid-img" :urls="list" /> + </div> + </nut-grid-item> + </nut-grid> + </CurriculumViewItem> + </CellChunk> + </Cell> + </ContentScrollView> +</template> + +<script setup lang="ts"> +import CurriculumViewItem from './CurriculumViewItem.vue'; +import { PreviewImage } from '@12333/components'; +import Taro from '@tarojs/taro'; + +defineOptions({ + name: 'curriculumView', +}); + +const labelWidth = Taro.pxTransform(120); + +const list = ref([ + 'https://storage.360buyimg.com/jdc-article/NutUItaro34.jpg', + 'https://storage.360buyimg.com/jdc-article/NutUItaro2.jpg', + 'https://storage.360buyimg.com/jdc-article/welcomenutui.jpg', + 'https://storage.360buyimg.com/jdc-article/fristfabu.jpg', +]); +</script> + +<style lang="scss"> +@import '@/styles/common.scss'; + +.flexJobDetail-page-wrapper { + .curriculum-position-list { + width: 100%; + display: flex; + flex-wrap: wrap; + column-gap: 24px; + row-gap: 16px; + + .curriculum-position-list-item { + font-weight: 500; + font-size: 24px; + color: boleGetCssVar('color', 'warning'); + line-height: 36px; + } + } +} +</style> diff --git a/apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/components/experienceView.vue b/apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/components/experienceView.vue new file mode 100644 index 0000000..70ff130 --- /dev/null +++ b/apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/components/experienceView.vue @@ -0,0 +1,40 @@ +<template> + <ContentScrollView> + <Cell title="宀椾綅缁忓巻"> + <nut-steps direction="vertical" progress-dot :current="3" class="flexJobDetail-steps"> + <nut-step title="2024.12.24" content="鎮ㄧ殑璁㈠崟宸茬粡鎵撳寘瀹屾垚锛屽晢鍝佸凡鍙戝嚭"></nut-step> + <nut-step title="2024.12.24" content="鎮ㄧ殑璁㈠崟姝e湪閰嶉�侀�斾腑"></nut-step> + <nut-step title="2024.12.24"> + <template #content> + <p>鏀惰揣鍦板潃涓猴細</p> + <p>鍖椾含甯傜粡娴庢妧鏈紑鍙戝尯绉戝垱鍗佷竴琛�18鍙烽櫌浜笢澶у帵</p> + </template> + </nut-step> + </nut-steps> + </Cell> + </ContentScrollView> +</template> + +<script setup lang="ts"> +defineOptions({ + name: 'experienceView', +}); +</script> + +<style lang="scss"> +@import '@/styles/common.scss'; + +.flexJobDetail-page-wrapper { + .flexJobDetail-steps { + .nut-step-main { + margin-bottom: 40px; + } + + .nut-step:last-child { + .nut-step-main { + margin-bottom: 0; + } + } + } +} +</style> diff --git a/apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/flexJobDetail.vue b/apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/flexJobDetail.vue index 054ed39..9ba2d43 100644 --- a/apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/flexJobDetail.vue +++ b/apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/flexJobDetail.vue @@ -1,7 +1,7 @@ <template> <PageLayoutWithBg class="flexJobDetail-page-wrapper" title="鐏靛伐璇︽儏" :need-auth="false"> <LoadingLayout :loading="isLoading" :error="isError" :loadError="refetch"> - <ContentScrollView style="background-color: transparent"> + <ContentView style="background-color: transparent"> <FlexJobTopView size="small" class="flexJobDetail-top" /> <div class="flexJobDetail-contact-info"> <div class="flexJobDetail-contact-info-item"> @@ -13,11 +13,27 @@ <div class="flexJobDetail-contact-info-item"> <div class="flexJobDetail-contact-info-item-label">韬唤璇佸彿锛�</div> <div class="flexJobDetail-contact-info-item-text"> - {{ isCollapse ? '330902199909******' : '绔嬪嵆鑱旂郴鍚庡彲鏌ョ湅' }} + {{ isCollapse ? hiddenIDNumberForEnd6('330902199909123456') : '绔嬪嵆鑱旂郴鍚庡彲鏌ョ湅' }} </div> </div> </div> - </ContentScrollView> + </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" @@ -40,11 +56,14 @@ import Taro from '@tarojs/taro'; import { useQuery } from '@tanstack/vue-query'; import * as orderServices from '@12333/services/api/Order'; -import { FlexJobTopView } from '@12333/components'; +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', @@ -52,6 +71,8 @@ const router = Taro.useRouter(); const taskId = router.params?.id ?? ''; + +const tab = ref('1'); const { isLoading, @@ -84,6 +105,7 @@ .flexJobDetail-contact-info { padding-left: 130px; + margin-bottom: 78px; .flexJobDetail-contact-info-item { display: flex; diff --git a/apps/bMiniApp/src/subpackages/task/components/TaskCheckCard.vue b/apps/bMiniApp/src/subpackages/task/components/TaskCheckCard.vue new file mode 100644 index 0000000..db091ef --- /dev/null +++ b/apps/bMiniApp/src/subpackages/task/components/TaskCheckCard.vue @@ -0,0 +1,51 @@ +<template> + <div class="task-check-card-wrapper"> + <TaskCheckPersonalView class="task-check-card-view"> + <template #actions> + <nut-button type="primary" class="task-check-card-phone-btn">楠屾敹</nut-button> + <!-- <div class="task-check-card-phone-status" :style="{ color: Colors.Success }">楠屾敹閫氳繃</div> --> + </template> + </TaskCheckPersonalView> + </div> +</template> + +<script setup lang="ts"> +import TaskCheckPersonalView from './TaskCheckPersonalView.vue'; +import { Colors } from '@12333/constants'; + +defineOptions({ + name: 'TaskCheckCard', +}); + +// type Props = {}; + +// const props = withDefaults(defineProps<Props>(), {}); +</script> + +<style lang="scss"> +@import '@/styles/common.scss'; + +.task-check-card-wrapper { + background: #ffffff; + border-radius: 12px; + padding: 40px; + padding-right: 26px; + margin-bottom: 24px; + + &:last-child { + margin-bottom: 0; + } + + .task-check-card-view { + .task-check-card-phone-container { + margin-top: 0; + } + } + + .task-check-card-phone-status { + font-size: 24px; + height: 52px; + line-height: 52px; + } +} +</style> diff --git a/apps/bMiniApp/src/subpackages/task/components/TaskCheckPersonalView.vue b/apps/bMiniApp/src/subpackages/task/components/TaskCheckPersonalView.vue new file mode 100644 index 0000000..1b76904 --- /dev/null +++ b/apps/bMiniApp/src/subpackages/task/components/TaskCheckPersonalView.vue @@ -0,0 +1,61 @@ +<template> + <FlexJobTopView> + <template #detail> + <div class="task-check-card-phone-container"> + <div class="task-check-card-phone-wrapper"> + <div class="task-check-card-phone-label">鎵嬫満鍙凤細</div> + <div class="task-check-card-phone">13000000000</div> + </div> + <slot name="actions"></slot> + </div> + </template> + </FlexJobTopView> +</template> + +<script setup lang="ts"> +import { FlexJobTopView } from '@12333/components'; + +defineOptions({ + name: 'TaskCheckPersonalView', +}); +</script> + +<style lang="scss"> +@import '@/styles/common.scss'; + +.task-check-card-phone-container { + display: flex; + align-items: center; + /* height: 52px; */ + margin-top: 14px; + + .task-check-card-phone-wrapper { + display: flex; + align-items: center; + font-weight: 400; + font-size: 24px; + line-height: 28px; + flex: 1; + min-width: 0; + + .flexJob-card-top-info { + flex: 1; + min-width: 0; + } + + .task-check-card-phone-label { + color: boleGetCssVar('text-color', 'regular'); + } + + .task-check-card-phone { + color: boleGetCssVar('text-color', 'secondary'); + } + } + + .task-check-card-phone-btn { + width: 144px; + height: 52px; + font-size: 24px; + } +} +</style> diff --git a/apps/bMiniApp/src/subpackages/task/taskCheck/InnerPage.vue b/apps/bMiniApp/src/subpackages/task/taskCheck/InnerPage.vue new file mode 100644 index 0000000..b30a8be --- /dev/null +++ b/apps/bMiniApp/src/subpackages/task/taskCheck/InnerPage.vue @@ -0,0 +1,66 @@ +<template> + <Calendar v-model="queryState.date"></Calendar> + <ProTabs + v-model="queryState.status" + name="task-tab" + :showPaneContent="false" + class="task-tabs" + isTransparent + title-gutter="8" + title-scroll + > + <ProTabPane :title="`寰呴獙鏀禶" :pane-key="10"></ProTabPane> + <ProTabPane :title="`宸查獙鏀禶" :pane-key="20"></ProTabPane> + </ProTabs> + <InfiniteLoading + scrollViewClassName="common-infinite-scroll-list" + v-bind="infiniteLoadingProps" + :key="queryState.status" + > + <template #renderItem="{ item }"> + <MyTaskCard @click="goSubmitTaskDetail(item)" /> + </template> + </InfiniteLoading> +</template> + +<script setup lang="ts"> +import { MyTaskCard, ProTabs, ProTabPane, Calendar } from '@12333/components'; +import Taro from '@tarojs/taro'; +import { useInfiniteLoading } from '@12333/hooks'; +import { OrderInputType } from '@12333/constants'; +import * as orderServices from '@12333/services/api/Order'; + +defineOptions({ + name: 'InnerPage', +}); + +const queryState = reactive({ + status: 10, + date: new Date(), +}); + +const { infiniteLoadingProps } = useInfiniteLoading( + ({ pageParam }) => { + let params: API.FrontOrderListInput = { + pageModel: { + rows: 20, + page: pageParam, + orderInput: [{ property: 'lastShelfTime', order: OrderInputType.Desc }], + }, + }; + + return orderServices.getFrontOrderList(params, { + showLoading: false, + }); + }, + { + queryKey: ['orderServices/getFrontOrderList', queryState], + } +); + +function goSubmitTaskDetail(item: API.FrontOrderList) { + Taro.navigateTo({ + url: `${RouterPath.taskCheckDetail}?id=${item.id}`, + }); +} +</script> diff --git a/apps/bMiniApp/src/subpackages/task/taskCheck/taskCheck.config.ts b/apps/bMiniApp/src/subpackages/task/taskCheck/taskCheck.config.ts new file mode 100644 index 0000000..305fdb1 --- /dev/null +++ b/apps/bMiniApp/src/subpackages/task/taskCheck/taskCheck.config.ts @@ -0,0 +1,3 @@ +export default definePageConfig({ + disableScroll: true, +}); diff --git a/apps/bMiniApp/src/subpackages/task/taskCheck/taskCheck.vue b/apps/bMiniApp/src/subpackages/task/taskCheck/taskCheck.vue new file mode 100644 index 0000000..fa06647 --- /dev/null +++ b/apps/bMiniApp/src/subpackages/task/taskCheck/taskCheck.vue @@ -0,0 +1,13 @@ +<template> + <PageLayoutWithBg class="taskCheck-page-wrapper" :title="'楠屾敹绠$悊'"> + <InnerPage></InnerPage> + </PageLayoutWithBg> +</template> + +<script setup lang="ts"> +import InnerPage from './InnerPage.vue'; + +defineOptions({ + name: 'taskCheck', +}); +</script> diff --git a/apps/bMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue b/apps/bMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue new file mode 100644 index 0000000..d149ccc --- /dev/null +++ b/apps/bMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue @@ -0,0 +1,81 @@ +<template> + <LoadingLayout :loading="isLoading" :error="isError" :loadError="refetch"> + <ContentView> + <MyTaskCard :showMyTaskArrow="false" :showTime="false"></MyTaskCard> + <ChunkTitle title="楠屾敹鍒楄〃" /> + </ContentView> + <InfiniteLoading + scrollViewClassName="common-infinite-scroll-list" + v-bind="infiniteLoadingProps" + :key="queryState.status" + > + <template #renderItem="{ item }"> + <TaskCheckCard @click="goHandleTaskDetail(item)" /> + </template> + </InfiniteLoading> + </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'; +import { useInfiniteLoading } from '@12333/hooks'; +import { OrderInputType } from '@12333/constants'; +import TaskCheckCard from '../components/TaskCheckCard.vue'; +import { MyTaskCard } from '@12333/components'; + +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), +}); + +const queryState = reactive({ + status: 10, +}); + +const { infiniteLoadingProps } = useInfiniteLoading( + ({ pageParam }) => { + let params: API.FrontOrderListInput = { + pageModel: { + rows: 20, + page: pageParam, + orderInput: [{ property: 'lastShelfTime', order: OrderInputType.Desc }], + }, + }; + + return orderServices.getFrontOrderList(params, { + showLoading: false, + }); + }, + { + queryKey: ['orderServices/getFrontOrderList', queryState], + } +); + +function goHandleTaskDetail(item: API.FrontOrderList) { + Taro.navigateTo({ + url: `${RouterPath.taskHandleCheckDetail}?id=${item.id}`, + }); +} +</script> diff --git a/apps/bMiniApp/src/subpackages/task/taskCheckDetail/taskCheckDetail.config.ts b/apps/bMiniApp/src/subpackages/task/taskCheckDetail/taskCheckDetail.config.ts new file mode 100644 index 0000000..305fdb1 --- /dev/null +++ b/apps/bMiniApp/src/subpackages/task/taskCheckDetail/taskCheckDetail.config.ts @@ -0,0 +1,3 @@ +export default definePageConfig({ + disableScroll: true, +}); diff --git a/apps/bMiniApp/src/subpackages/task/taskCheckDetail/taskCheckDetail.vue b/apps/bMiniApp/src/subpackages/task/taskCheckDetail/taskCheckDetail.vue new file mode 100644 index 0000000..3d08fd1 --- /dev/null +++ b/apps/bMiniApp/src/subpackages/task/taskCheckDetail/taskCheckDetail.vue @@ -0,0 +1,13 @@ +<template> + <PageLayoutWithBg class="taskCheckDetail-page-wrapper" title="楠屾敹璇︽儏"> + <InnerPage /> + </PageLayoutWithBg> +</template> + +<script setup lang="ts"> +import InnerPage from './InnerPage.vue'; + +defineOptions({ + name: 'taskCheckDetail', +}); +</script> diff --git a/apps/bMiniApp/src/subpackages/task/taskHandleCheckDetail/InnerPage.vue b/apps/bMiniApp/src/subpackages/task/taskHandleCheckDetail/InnerPage.vue new file mode 100644 index 0000000..289d0a5 --- /dev/null +++ b/apps/bMiniApp/src/subpackages/task/taskHandleCheckDetail/InnerPage.vue @@ -0,0 +1,108 @@ +<template> + <LoadingLayout :loading="isLoading" :error="isError" :loadError="refetch"> + <ContentScrollView style="background-color: #fff"> + <div class="personal-info-wrapper"> + <TaskCheckPersonalView /> + </div> + <div class="taskCheckDetail-status-wrapper"> + <div class="taskCheckDetail-status-title">楠屾敹鐓х墖</div> + </div> + <div class="taskCheckDetail-time">2024.11.14 9:28:39</div> + <nut-grid + square + :column-num="3" + :border="false" + :gutter="20" + v-if="list.length > 0" + class="pro-img-grid" + > + <nut-grid-item v-for="(item, index) in list" :key="item" class="pro-img-grid-item"> + <div class="pro-img-grid-img-item"> + <PreviewImage :src="item" class="pro-img-grid-img" :urls="list" /> + </div> + </nut-grid-item> + </nut-grid> + </ContentScrollView> + <PageFooter> + <PageFooterBtn type="primary" :color="Colors.Info" class="dark-btn">楠屾敹鏈�氳繃</PageFooterBtn> + <PageFooterBtn type="primary">楠屾敹閫氳繃</PageFooterBtn> + </PageFooter> + </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'; +import TaskCheckPersonalView from '../components/TaskCheckPersonalView.vue'; +import { PreviewImage } from '@12333/components'; +import { Colors } from '@12333/constants'; + +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), +}); + +const list = ref([ + 'https://storage.360buyimg.com/jdc-article/NutUItaro34.jpg', + 'https://storage.360buyimg.com/jdc-article/NutUItaro2.jpg', + 'https://storage.360buyimg.com/jdc-article/welcomenutui.jpg', + 'https://storage.360buyimg.com/jdc-article/fristfabu.jpg', +]); +</script> + +<style lang="scss"> +@import '@/styles/common.scss'; + +.taskHandleCheckDetail-page-wrapper { + .personal-info-wrapper { + padding-top: 52px; + padding-bottom: 36px; + border-bottom: 1px solid #d9d9d9; + margin-bottom: 22px; + } + + .taskCheckDetail-status-wrapper { + display: flex; + align-items: center; + font-weight: 600; + font-size: 28px; + line-height: 32px; + margin-bottom: 16px; + + .taskCheckDetail-status-title { + color: boleGetCssVar('text-color', 'primary'); + flex: 1; + min-width: 0; + } + } + + .taskCheckDetail-time { + font-weight: 400; + font-size: 24px; + color: boleGetCssVar('text-color', 'regular'); + line-height: 36px; + margin-bottom: 22px; + } +} +</style> diff --git a/apps/bMiniApp/src/subpackages/task/taskHandleCheckDetail/taskHandleCheckDetail.config.ts b/apps/bMiniApp/src/subpackages/task/taskHandleCheckDetail/taskHandleCheckDetail.config.ts new file mode 100644 index 0000000..305fdb1 --- /dev/null +++ b/apps/bMiniApp/src/subpackages/task/taskHandleCheckDetail/taskHandleCheckDetail.config.ts @@ -0,0 +1,3 @@ +export default definePageConfig({ + disableScroll: true, +}); diff --git a/apps/bMiniApp/src/subpackages/task/taskHandleCheckDetail/taskHandleCheckDetail.vue b/apps/bMiniApp/src/subpackages/task/taskHandleCheckDetail/taskHandleCheckDetail.vue new file mode 100644 index 0000000..9e7019b --- /dev/null +++ b/apps/bMiniApp/src/subpackages/task/taskHandleCheckDetail/taskHandleCheckDetail.vue @@ -0,0 +1,13 @@ +<template> + <PageLayout class="taskHandleCheckDetail-page-wrapper" title="浜哄憳璇︽儏" has-border> + <InnerPage /> + </PageLayout> +</template> + +<script setup lang="ts"> +import InnerPage from './InnerPage.vue'; + +defineOptions({ + name: 'taskHandleCheckDetail', +}); +</script> diff --git a/apps/bMiniApp/src/subpackages/task/taskManage/InnerPage.vue b/apps/bMiniApp/src/subpackages/task/taskManage/InnerPage.vue new file mode 100644 index 0000000..9913fbf --- /dev/null +++ b/apps/bMiniApp/src/subpackages/task/taskManage/InnerPage.vue @@ -0,0 +1,68 @@ +<template> + <ProTabs + v-model="queryState.status" + name="task-tab" + :showPaneContent="false" + class="task-tabs" + isTransparent + title-gutter="8" + title-scroll + > + <ProTabPane :title="`寰呭畨鎺�(10)`" :pane-key="10"></ProTabPane> + <ProTabPane :title="`宸插畨鎺�(11)`" :pane-key="20"></ProTabPane> + </ProTabs> + <InfiniteLoading + scrollViewClassName="common-infinite-scroll-list" + v-bind="infiniteLoadingProps" + :key="queryState.status" + > + <template #renderItem="{ item }"> + <TaskCard @click="goSubmitTaskDetail(item)" /> + </template> + </InfiniteLoading> +</template> + +<script setup lang="ts"> +import { TaskCard, ProTabs, ProTabPane } from '@12333/components'; +import Taro from '@tarojs/taro'; +import { useInfiniteLoading } from '@12333/hooks'; +import { OrderInputType } from '@12333/constants'; +import * as orderServices from '@12333/services/api/Order'; + +defineOptions({ + name: 'InnerPage', +}); + +const queryState = reactive({ + status: 10, +}); + +const { infiniteLoadingProps } = useInfiniteLoading( + ({ pageParam }) => { + let params: API.FrontOrderListInput = { + pageModel: { + rows: 20, + page: pageParam, + orderInput: [{ property: 'lastShelfTime', order: OrderInputType.Desc }], + }, + }; + + return orderServices.getFrontOrderList(params, { + showLoading: false, + }); + }, + { + queryKey: ['orderServices/getFrontOrderList', queryState], + } +); + +function goSubmitTaskDetail(item: API.FrontOrderList) { + Taro.navigateTo({ + url: `${RouterPath.taskCheckDetail}?id=${item.id}`, + }); +} +</script> + +<style lang="scss"> +@import '@/styles/common.scss'; +</style> diff --git a/apps/bMiniApp/src/subpackages/task/taskManage/taskManage.config.ts b/apps/bMiniApp/src/subpackages/task/taskManage/taskManage.config.ts new file mode 100644 index 0000000..305fdb1 --- /dev/null +++ b/apps/bMiniApp/src/subpackages/task/taskManage/taskManage.config.ts @@ -0,0 +1,3 @@ +export default definePageConfig({ + disableScroll: true, +}); diff --git a/apps/bMiniApp/src/subpackages/task/taskManage/taskManage.vue b/apps/bMiniApp/src/subpackages/task/taskManage/taskManage.vue new file mode 100644 index 0000000..5b9ad6e --- /dev/null +++ b/apps/bMiniApp/src/subpackages/task/taskManage/taskManage.vue @@ -0,0 +1,13 @@ +<template> + <PageLayoutWithBg class="taskManage-page-wrapper" title="浠诲姟绠$悊"> + <InnerPage /> + </PageLayoutWithBg> +</template> + +<script setup lang="ts"> +import InnerPage from './InnerPage.vue'; + +defineOptions({ + name: 'taskManage', +}); +</script> diff --git a/packages/components/src/Card/FlexJobTopView.vue b/packages/components/src/Card/FlexJobTopView.vue index 4f938b6..63a0ef0 100644 --- a/packages/components/src/Card/FlexJobTopView.vue +++ b/packages/components/src/Card/FlexJobTopView.vue @@ -10,7 +10,9 @@ </div> <div class="flexJob-card-top-info-auth">{{ '宸插疄鍚�' }}</div> </div> - <div class="flexJob-card-top-info-detail">{{ '26宀� | 闈炲鐢� | 鏈 | 涓婂矖121娆�' }}</div> + <slot name="detail"> + <div class="flexJob-card-top-info-detail">{{ '26宀� | 闈炲鐢� | 鏈 | 涓婂矖121娆�' }}</div> + </slot> </div> </div> </template> @@ -46,6 +48,8 @@ .flexJob-card-top-info { display: flex; flex-direction: column; + flex: 1; + min-width: 0; .flexJob-card-top-info-item { display: flex; @@ -56,6 +60,7 @@ line-height: 34px; font-weight: bold; color: boleGetCssVar('text-color', 'primary'); + @include ellipsis; } .flexJob-card-top-info-gender { @@ -63,6 +68,7 @@ align-items: center; height: 34px; margin: 0 10px; + flex-shrink: 0; .flexJob-card-top-info-gender-icon { width: 24px; @@ -73,6 +79,7 @@ .flexJob-card-top-info-auth { font-size: 28px; line-height: 34px; + flex-shrink: 0; } } diff --git a/packages/components/src/Card/MyTaskCard.vue b/packages/components/src/Card/MyTaskCard.vue index ecd1447..9921ce4 100644 --- a/packages/components/src/Card/MyTaskCard.vue +++ b/packages/components/src/Card/MyTaskCard.vue @@ -4,7 +4,8 @@ <RectRight :size="12" class="my-task-card-arrow" v-if="showMyTaskArrow" /> <div v-else></div> </template> - <div class="my-task-card-time">2025骞�2鏈�5鏃� 鑷� 2025骞�3鏈�5鏃�</div> + <div class="my-task-card-time" v-if="showTime">2025骞�2鏈�5鏃� 鑷� 2025骞�3鏈�5鏃�</div> + <div v-else></div> </TaskCard> </template> @@ -19,10 +20,12 @@ type Props = CommonTaskCardProps & { showMyTaskArrow?: boolean; + showTime?: boolean; }; const props = withDefaults(defineProps<Props>(), { showMyTaskArrow: true, + showTime: true, }); </script> diff --git a/packages/utils/common.ts b/packages/utils/common.ts index e6344d5..c36c689 100644 --- a/packages/utils/common.ts +++ b/packages/utils/common.ts @@ -129,3 +129,6 @@ export function filterJoin(list: any[], separator = '-') { return list.filter(Boolean).join(separator); } + +export const hiddenIDNumberForEnd6 = (realIDNumber: string) => + realIDNumber.replace(/^(\d+)(.{6})$/, '$1******'); -- Gitblit v1.9.1