From 4bc9cf48154b5666d4c928f32182bcbb92eca6c5 Mon Sep 17 00:00:00 2001
From: wupengfei <834520024@qq.com>
Date: 星期五, 14 二月 2025 17:31:43 +0800
Subject: [PATCH] feat: mine

---
 apps/bMiniApp/src/subpackages/flexJobManage/flexJobDetailFromManage/flexJobDetailFromManage.vue       |   17 +
 apps/bMiniApp/src/subpackages/flexJobManage/flexJobDetailFromManage/flexJobDetailFromManage.config.ts |    3 
 apps/bMiniApp/src/subpackages/flexJobManage/flexJobManage/flexJobManage.vue                           |   17 +
 apps/bMiniApp/src/subpackages/flexJob/flexJobDetailFromTask/InnerPage.vue                             |   45 ++++
 apps/bMiniApp/src/constants/router.ts                                                                 |    4 
 apps/bMiniApp/src/pages/workbenches/InnerPage.vue                                                     |    6 
 apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/flexJobDetail.vue                                 |  105 +--------
 apps/bMiniApp/src/components/JobDetailContent/components/CurriculumViewItem.vue                       |    2 
 apps/bMiniApp/src/subpackages/flexJob/flexJobDetailFromTask/flexJobDetailFromTask.config.ts           |    3 
 apps/bMiniApp/project.private.config.json                                                             |    7 
 apps/bMiniApp/src/app.config.ts                                                                       |    6 
 apps/bMiniApp/src/components/JobDetailContent/components/curriculumView.vue                           |    2 
 apps/bMiniApp/src/subpackages/flexJobManage/flexJobDetailFromManage/InnerPage.vue                     |   45 ++++
 apps/bMiniApp/src/subpackages/jobApplicationManage/components/SignList.vue                            |   10 
 apps/bMiniApp/src/components/JobDetailContent/JobDetailContent.vue                                    |   94 +++++++++
 apps/bMiniApp/src/subpackages/flexJob/flexJobDetailFromTask/flexJobDetailFromTask.vue                 |   17 +
 apps/bMiniApp/src/subpackages/flexJobManage/flexJobManage/InnerPage.vue                               |   98 +++++++++
 apps/bMiniApp/src/subpackages/flexJobManage/flexJobManage/flexJobManage.config.ts                     |    3 
 apps/bMiniApp/src/components/JobDetailContent/components/experienceView.vue                           |    6 
 packages/components/src/Card/FlexJobCard.vue                                                          |    4 
 apps/bMiniApp/src/subpackages/jobApplicationManage/components/JobDetail.vue                           |   88 ++++++++
 21 files changed, 483 insertions(+), 99 deletions(-)

diff --git a/apps/bMiniApp/project.private.config.json b/apps/bMiniApp/project.private.config.json
index a22a756..ed2ef1f 100644
--- a/apps/bMiniApp/project.private.config.json
+++ b/apps/bMiniApp/project.private.config.json
@@ -70,6 +70,13 @@
                     "query": "",
                     "launchMode": "default",
                     "scene": null
+                },
+                {
+                    "name": "",
+                    "pathName": "subpackages/flexJobManage/flexJobManage/flexJobManage",
+                    "query": "",
+                    "launchMode": "default",
+                    "scene": null
                 }
             ]
         }
diff --git a/apps/bMiniApp/src/app.config.ts b/apps/bMiniApp/src/app.config.ts
index fc23e91..8b9b688 100644
--- a/apps/bMiniApp/src/app.config.ts
+++ b/apps/bMiniApp/src/app.config.ts
@@ -97,7 +97,11 @@
     },
     {
       root: 'subpackages/flexJob',
-      pages: ['flexJobDetail/flexJobDetail'],
+      pages: ['flexJobDetail/flexJobDetail', 'flexJobDetailFromTask/flexJobDetailFromTask'],
+    },
+    {
+      root: 'subpackages/flexJobManage',
+      pages: ['flexJobManage/flexJobManage', 'flexJobDetailFromManage/flexJobDetailFromManage'],
     },
   ],
   // preloadRule: {
diff --git a/apps/bMiniApp/src/components/JobDetailContent/JobDetailContent.vue b/apps/bMiniApp/src/components/JobDetailContent/JobDetailContent.vue
new file mode 100644
index 0000000..6552419
--- /dev/null
+++ b/apps/bMiniApp/src/components/JobDetailContent/JobDetailContent.vue
@@ -0,0 +1,94 @@
+<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>
diff --git a/apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/components/CurriculumViewItem.vue b/apps/bMiniApp/src/components/JobDetailContent/components/CurriculumViewItem.vue
similarity index 96%
rename from apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/components/CurriculumViewItem.vue
rename to apps/bMiniApp/src/components/JobDetailContent/components/CurriculumViewItem.vue
index 62171b3..4da3a13 100644
--- a/apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/components/CurriculumViewItem.vue
+++ b/apps/bMiniApp/src/components/JobDetailContent/components/CurriculumViewItem.vue
@@ -28,7 +28,7 @@
 <style lang="scss">
 @import '@/styles/common.scss';
 
-.flexJobDetail-page-wrapper {
+.job-detail-content-tabs {
   .curriculum-list-item {
     display: flex;
     margin-bottom: 14px;
diff --git a/apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/components/curriculumView.vue b/apps/bMiniApp/src/components/JobDetailContent/components/curriculumView.vue
similarity index 98%
rename from apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/components/curriculumView.vue
rename to apps/bMiniApp/src/components/JobDetailContent/components/curriculumView.vue
index fb3ea33..b06b8f9 100644
--- a/apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/components/curriculumView.vue
+++ b/apps/bMiniApp/src/components/JobDetailContent/components/curriculumView.vue
@@ -95,7 +95,7 @@
 <style lang="scss">
 @import '@/styles/common.scss';
 
-.flexJobDetail-page-wrapper {
+.job-detail-content-tabs {
   .curriculum-position-list {
     width: 100%;
     display: flex;
diff --git a/apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/components/experienceView.vue b/apps/bMiniApp/src/components/JobDetailContent/components/experienceView.vue
similarity index 90%
rename from apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/components/experienceView.vue
rename to apps/bMiniApp/src/components/JobDetailContent/components/experienceView.vue
index 70ff130..6cd3d6e 100644
--- a/apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/components/experienceView.vue
+++ b/apps/bMiniApp/src/components/JobDetailContent/components/experienceView.vue
@@ -1,7 +1,7 @@
 <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="鎮ㄧ殑璁㈠崟姝e湪閰嶉�侀�斾腑"></nut-step>
         <nut-step title="2024.12.24">
@@ -24,8 +24,8 @@
 <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;
     }
diff --git a/apps/bMiniApp/src/constants/router.ts b/apps/bMiniApp/src/constants/router.ts
index 325f06f..6d82c1c 100644
--- a/apps/bMiniApp/src/constants/router.ts
+++ b/apps/bMiniApp/src/constants/router.ts
@@ -11,6 +11,10 @@
   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',
diff --git a/apps/bMiniApp/src/pages/workbenches/InnerPage.vue b/apps/bMiniApp/src/pages/workbenches/InnerPage.vue
index 7dc7384..22fe2ec 100644
--- a/apps/bMiniApp/src/pages/workbenches/InnerPage.vue
+++ b/apps/bMiniApp/src/pages/workbenches/InnerPage.vue
@@ -17,7 +17,11 @@
       </CellChunk>
       <CellChunk title="鐢ㄤ汉">
         <div class="workbenches-cell-list">
-          <TaskDetailWelfareItem :icon="IconFlexjobManage" text="鐏靛伐绠$悊" />
+          <TaskDetailWelfareItem
+            :icon="IconFlexjobManage"
+            text="鐏靛伐绠$悊"
+            @click="goPage(RouterPath.flexJobManage)"
+          />
           <TaskDetailWelfareItem
             :icon="IconTaskManage"
             text="浠诲姟绠$悊"
diff --git a/apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/flexJobDetail.vue b/apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/flexJobDetail.vue
index 9ba2d43..8930e23 100644
--- a/apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/flexJobDetail.vue
+++ b/apps/bMiniApp/src/subpackages/flexJob/flexJobDetail/flexJobDetail.vue
@@ -1,53 +1,22 @@
 <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>
@@ -56,14 +25,10 @@
 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',
@@ -71,8 +36,6 @@
 
 const router = Taro.useRouter();
 const taskId = router.params?.id ?? '';
-
-const tab = ref('1');
 
 const {
   isLoading,
@@ -97,40 +60,4 @@
 
 <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>
diff --git a/apps/bMiniApp/src/subpackages/flexJob/flexJobDetailFromTask/InnerPage.vue b/apps/bMiniApp/src/subpackages/flexJob/flexJobDetailFromTask/InnerPage.vue
new file mode 100644
index 0000000..284ae97
--- /dev/null
+++ b/apps/bMiniApp/src/subpackages/flexJob/flexJobDetailFromTask/InnerPage.vue
@@ -0,0 +1,45 @@
+<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>
diff --git a/apps/bMiniApp/src/subpackages/flexJob/flexJobDetailFromTask/flexJobDetailFromTask.config.ts b/apps/bMiniApp/src/subpackages/flexJob/flexJobDetailFromTask/flexJobDetailFromTask.config.ts
new file mode 100644
index 0000000..305fdb1
--- /dev/null
+++ b/apps/bMiniApp/src/subpackages/flexJob/flexJobDetailFromTask/flexJobDetailFromTask.config.ts
@@ -0,0 +1,3 @@
+export default definePageConfig({
+  disableScroll: true,
+});
diff --git a/apps/bMiniApp/src/subpackages/flexJob/flexJobDetailFromTask/flexJobDetailFromTask.vue b/apps/bMiniApp/src/subpackages/flexJob/flexJobDetailFromTask/flexJobDetailFromTask.vue
new file mode 100644
index 0000000..b93464d
--- /dev/null
+++ b/apps/bMiniApp/src/subpackages/flexJob/flexJobDetailFromTask/flexJobDetailFromTask.vue
@@ -0,0 +1,17 @@
+<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>
diff --git a/apps/bMiniApp/src/subpackages/flexJobManage/flexJobDetailFromManage/InnerPage.vue b/apps/bMiniApp/src/subpackages/flexJobManage/flexJobDetailFromManage/InnerPage.vue
new file mode 100644
index 0000000..ef5b3e0
--- /dev/null
+++ b/apps/bMiniApp/src/subpackages/flexJobManage/flexJobDetailFromManage/InnerPage.vue
@@ -0,0 +1,45 @@
+<template>
+  <LoadingLayout :loading="isLoading" :error="isError" :loadError="refetch">
+    <JobDetailContent :isCollapse="true">
+      <template #footer>
+        <PageFooterBtn type="primary" plain>瑙g害</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>
diff --git a/apps/bMiniApp/src/subpackages/flexJobManage/flexJobDetailFromManage/flexJobDetailFromManage.config.ts b/apps/bMiniApp/src/subpackages/flexJobManage/flexJobDetailFromManage/flexJobDetailFromManage.config.ts
new file mode 100644
index 0000000..305fdb1
--- /dev/null
+++ b/apps/bMiniApp/src/subpackages/flexJobManage/flexJobDetailFromManage/flexJobDetailFromManage.config.ts
@@ -0,0 +1,3 @@
+export default definePageConfig({
+  disableScroll: true,
+});
diff --git a/apps/bMiniApp/src/subpackages/flexJobManage/flexJobDetailFromManage/flexJobDetailFromManage.vue b/apps/bMiniApp/src/subpackages/flexJobManage/flexJobDetailFromManage/flexJobDetailFromManage.vue
new file mode 100644
index 0000000..6e43ee6
--- /dev/null
+++ b/apps/bMiniApp/src/subpackages/flexJobManage/flexJobDetailFromManage/flexJobDetailFromManage.vue
@@ -0,0 +1,17 @@
+<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>
diff --git a/apps/bMiniApp/src/subpackages/flexJobManage/flexJobManage/InnerPage.vue b/apps/bMiniApp/src/subpackages/flexJobManage/flexJobManage/InnerPage.vue
new file mode 100644
index 0000000..34e4490
--- /dev/null
+++ b/apps/bMiniApp/src/subpackages/flexJobManage/flexJobManage/InnerPage.vue
@@ -0,0 +1,98 @@
+<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"
+              >瑙g害</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>
diff --git a/apps/bMiniApp/src/subpackages/flexJobManage/flexJobManage/flexJobManage.config.ts b/apps/bMiniApp/src/subpackages/flexJobManage/flexJobManage/flexJobManage.config.ts
new file mode 100644
index 0000000..305fdb1
--- /dev/null
+++ b/apps/bMiniApp/src/subpackages/flexJobManage/flexJobManage/flexJobManage.config.ts
@@ -0,0 +1,3 @@
+export default definePageConfig({
+  disableScroll: true,
+});
diff --git a/apps/bMiniApp/src/subpackages/flexJobManage/flexJobManage/flexJobManage.vue b/apps/bMiniApp/src/subpackages/flexJobManage/flexJobManage/flexJobManage.vue
new file mode 100644
index 0000000..dc618a4
--- /dev/null
+++ b/apps/bMiniApp/src/subpackages/flexJobManage/flexJobManage/flexJobManage.vue
@@ -0,0 +1,17 @@
+<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>
diff --git a/apps/bMiniApp/src/subpackages/jobApplicationManage/components/JobDetail.vue b/apps/bMiniApp/src/subpackages/jobApplicationManage/components/JobDetail.vue
index c2ff4ee..6717cb2 100644
--- a/apps/bMiniApp/src/subpackages/jobApplicationManage/components/JobDetail.vue
+++ b/apps/bMiniApp/src/subpackages/jobApplicationManage/components/JobDetail.vue
@@ -53,7 +53,7 @@
 // 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,
@@ -77,4 +77,90 @@
 
 <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>
diff --git a/apps/bMiniApp/src/subpackages/jobApplicationManage/components/SignList.vue b/apps/bMiniApp/src/subpackages/jobApplicationManage/components/SignList.vue
index 75f5381..4028bf9 100644
--- a/apps/bMiniApp/src/subpackages/jobApplicationManage/components/SignList.vue
+++ b/apps/bMiniApp/src/subpackages/jobApplicationManage/components/SignList.vue
@@ -6,7 +6,7 @@
           <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>
@@ -15,9 +15,11 @@
 
 <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',
@@ -45,6 +47,12 @@
     queryKey: ['orderServices/getFrontOrderList'],
   }
 );
+
+function goToJobDetail(id: string) {
+  Taro.navigateTo({
+    url: `${RouterPath.flexJobDetailFromTask}?id=${id}`,
+  });
+}
 </script>
 
 <style lang="scss">
diff --git a/packages/components/src/Card/FlexJobCard.vue b/packages/components/src/Card/FlexJobCard.vue
index ed27a18..9764a3c 100644
--- a/packages/components/src/Card/FlexJobCard.vue
+++ b/packages/components/src/Card/FlexJobCard.vue
@@ -6,7 +6,7 @@
         '鍋氳繃锛氬鎴挎湇鍔″憳銆佸鎴挎湇鍔″憳銆佸鎴垮鎴挎湇鍔″憳銆佸鎴垮仛杩囷細瀹㈡埧鏈嶅姟鍛樸�佸鎴挎湇鍔″憳銆佸鎴垮鎴挎湇鍔″憳銆佸鎴�'
       }}
     </div>
-    <div class="flexJob-card-done-detail">
+    <div class="flexJob-card-done-detail" v-if="showDoneDetail">
       <div class="flexJob-card-done-detail-item">
         {{ '鍦ㄣ�屽畞娉㈤浄杩.閰掑簵銆嶏紝鍋氳繃瀹㈡埧鏈嶅姟鍛樺湪銆屽畞娉㈤浄杩.閰掑簵銆嶏紝鍋氳繃瀹㈡埧鏈嶅姟鍛�' }}
       </div>
@@ -43,11 +43,13 @@
 type Props = CommonTaskCardProps & {
   showFooterLeft?: boolean;
   showFooterRight?: boolean;
+  showDoneDetail?: boolean;
 };
 
 const props = withDefaults(defineProps<Props>(), {
   showFooterLeft: true,
   showFooterRight: true,
+  showDoneDetail: true,
 });
 </script>
 

--
Gitblit v1.9.1