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