From 5f0482f43a5c9caad2185d6e99e8dc16432f33c0 Mon Sep 17 00:00:00 2001
From: wupengfei <834520024@qq.com>
Date: 星期三, 12 二月 2025 17:28:37 +0800
Subject: [PATCH] feat: mine

---
 apps/cMiniApp/src/subpackages/mine/mineJobIntention/mineJobIntention.config.ts                 |    3 
 apps/cMiniApp/src/subpackages/mine/mineAgreementSign/InnerPage.vue                             |   22 -
 apps/cMiniApp/src/subpackages/mine/mineCertificateAddOrEdit/mineCertificateAddOrEdit.vue       |   17 +
 apps/cMiniApp/src/subpackages/mine/mineWorkExperience/mineWorkExperience.config.ts             |    3 
 apps/cMiniApp/src/subpackages/mine/mineDetailedInfo/InnerPage.vue                              |   61 +++++
 apps/cMiniApp/src/subpackages/mine/mineSign/InnerPage.vue                                      |   16 
 apps/cMiniApp/src/subpackages/mine/mineDetailedInfo/mineDetailedInfo.config.ts                 |    3 
 packages/components/src/index.ts                                                               |    1 
 apps/cMiniApp/src/subpackages/mine/editMineInfo/editMineInfo.vue                               |    2 
 apps/cMiniApp/src/subpackages/mine/mineCertificateAddOrEdit/InnerPage.vue                      |  120 ++++++++++
 apps/cMiniApp/src/subpackages/mine/mineJobIntention/mineJobIntention.vue                       |   17 +
 apps/cMiniApp/src/constants/router.ts                                                          |    5 
 apps/cMiniApp/src/app.config.ts                                                                |    5 
 apps/cMiniApp/src/subpackages/mine/mineWorkExperience/InnerPage.vue                            |   35 ++
 apps/cMiniApp/src/constants/index.ts                                                           |    1 
 apps/cMiniApp/src/subpackages/mine/mineCertificate/mineCertificate.vue                         |   17 +
 packages/components/src/Input/ChooseInputWithDatePicker.vue                                    |   58 ++++
 apps/cMiniApp/src/subpackages/mine/editMineInfo/InnerPage.vue                                  |   38 ++-
 apps/cMiniApp/src/subpackages/mine/mineCertificate/InnerPage.vue                               |   43 +++
 apps/cMiniApp/src/subpackages/mine/mineCollectTask/InnerPage.vue                               |    6 
 apps/cMiniApp/project.private.config.json                                                      |   23 -
 apps/cMiniApp/src/subpackages/mine/mineDetailedInfo/mineDetailedInfo.vue                       |   17 +
 apps/cMiniApp/src/subpackages/mine/mineHire/InnerPage.vue                                      |   18 
 apps/cMiniApp/src/constants/task.ts                                                            |   19 +
 apps/cMiniApp/src/subpackages/mine/mineJobIntention/InnerPage.vue                              |   66 +++++
 /dev/null                                                                                      |   16 -
 apps/cMiniApp/src/subpackages/mine/mineCertificate/mineCertificate.config.ts                   |    3 
 apps/cMiniApp/src/subpackages/mine/mineCertificateAddOrEdit/mineCertificateAddOrEdit.config.ts |    3 
 apps/cMiniApp/src/subpackages/mine/mineWorkExperience/mineWorkExperience.vue                   |   17 +
 apps/cMiniApp/src/subpackages/mine/mineCurriculumVitae/InnerPage.vue                           |   31 ++
 30 files changed, 593 insertions(+), 93 deletions(-)

diff --git a/apps/cMiniApp/project.private.config.json b/apps/cMiniApp/project.private.config.json
index c721439..9bd2a57 100644
--- a/apps/cMiniApp/project.private.config.json
+++ b/apps/cMiniApp/project.private.config.json
@@ -16,29 +16,8 @@
                     "scene": null
                 },
                 {
-                    "name": "鍏徃璇︽儏",
-                    "pathName": "subpackages/task/companyDetail/companyDetail",
-                    "query": "id=c4cfe028-23e7-0be8-ee56-3a11e3743b9d",
-                    "launchMode": "default",
-                    "scene": null
-                },
-                {
-                    "name": "浠诲姟璇︽儏",
-                    "pathName": "subpackages/task/taskDetail/taskDetail",
-                    "query": "id=c4cfe028-23e7-0be8-ee56-3a11e3743b9d",
-                    "launchMode": "default",
-                    "scene": null
-                },
-                {
                     "name": "",
-                    "pathName": "pages/mine/index",
-                    "query": "",
-                    "launchMode": "default",
-                    "scene": null
-                },
-                {
-                    "name": "",
-                    "pathName": "subpackages/mine/mineCurriculumVitae/mineCurriculumVitae",
+                    "pathName": "subpackages/mine/mineCertificateAddOrEdit/mineCertificateAddOrEdit",
                     "query": "",
                     "launchMode": "default",
                     "scene": null
diff --git a/apps/cMiniApp/src/app.config.ts b/apps/cMiniApp/src/app.config.ts
index 3111eec..44f742c 100644
--- a/apps/cMiniApp/src/app.config.ts
+++ b/apps/cMiniApp/src/app.config.ts
@@ -81,6 +81,11 @@
         'mineAgreementSignDetail/mineAgreementSignDetail',
         'mineCurriculumVitae/mineCurriculumVitae',
         'editMineInfo/editMineInfo',
+        'mineJobIntention/mineJobIntention',
+        'mineWorkExperience/mineWorkExperience',
+        'mineCertificate/mineCertificate',
+        'mineCertificateAddOrEdit/mineCertificateAddOrEdit',
+        'mineDetailedInfo/mineDetailedInfo',
         'setting/setting',
       ],
     },
diff --git a/apps/cMiniApp/src/constants/index.ts b/apps/cMiniApp/src/constants/index.ts
index c7f2445..0d96c63 100644
--- a/apps/cMiniApp/src/constants/index.ts
+++ b/apps/cMiniApp/src/constants/index.ts
@@ -2,3 +2,4 @@
 export * from './tabBar';
 export * from './router';
 export * from './img';
+export * from './task';
diff --git a/apps/cMiniApp/src/constants/router.ts b/apps/cMiniApp/src/constants/router.ts
index e23d68a..befc36a 100644
--- a/apps/cMiniApp/src/constants/router.ts
+++ b/apps/cMiniApp/src/constants/router.ts
@@ -35,5 +35,10 @@
   mineAgreementSignDetail = '/subpackages/mine/mineAgreementSignDetail/mineAgreementSignDetail',
   mineCurriculumVitae = '/subpackages/mine/mineCurriculumVitae/mineCurriculumVitae',
   editMineInfo = '/subpackages/mine/editMineInfo/editMineInfo',
+  mineJobIntention = '/subpackages/mine/mineJobIntention/mineJobIntention',
+  mineWorkExperience = '/subpackages/mine/mineWorkExperience/mineWorkExperience',
+  mineCertificate = '/subpackages/mine/mineCertificate/mineCertificate',
+  mineCertificateAddOrEdit = '/subpackages/mine/mineCertificateAddOrEdit/mineCertificateAddOrEdit',
+  mineDetailedInfo = '/subpackages/mine/mineDetailedInfo/mineDetailedInfo',
   setting = '/subpackages/mine/setting/setting',
 }
diff --git a/apps/cMiniApp/src/constants/task.ts b/apps/cMiniApp/src/constants/task.ts
new file mode 100644
index 0000000..98af4e3
--- /dev/null
+++ b/apps/cMiniApp/src/constants/task.ts
@@ -0,0 +1,19 @@
+export enum TaskStatus {
+  All = 0,
+  WaitSign = 10,
+  Effect = 20,
+  Terminated = 30,
+}
+
+export const TaskStatusText = {
+  [TaskStatus.All]: '鍏ㄩ儴',
+  [TaskStatus.WaitSign]: '寰呯绾�',
+  [TaskStatus.Effect]: '鐢熸晥涓�',
+  [TaskStatus.Terminated]: '宸茬粓姝�',
+};
+
+export const TaskStatusColor = {
+  [TaskStatus.WaitSign]: '#FF7D00',
+  [TaskStatus.Effect]: '#3A71FF',
+  [TaskStatus.Terminated]: '#9FA4AC',
+};
diff --git a/apps/cMiniApp/src/subpackages/mine/editMineInfo/InnerPage.vue b/apps/cMiniApp/src/subpackages/mine/editMineInfo/InnerPage.vue
index c537bca..7b1d765 100644
--- a/apps/cMiniApp/src/subpackages/mine/editMineInfo/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/mine/editMineInfo/InnerPage.vue
@@ -1,17 +1,34 @@
 <template>
   <ContentScrollView :paddingH="false">
     <nut-form :model-value="form" ref="formRef" :rules="rules">
-      <nut-form-item label="濮撳悕:" prop="name">
+      <nut-form-item label="澶村儚:" class="bole-form-item" prop="avatarUrl">
+        <Uploader v-model:file-list="form.avatarUrl" :maximum="1" class="bole-uploader"> </Uploader>
+      </nut-form-item>
+      <nut-form-item label="濮撳悕:" class="bole-form-item" prop="name">
         <nut-input v-model.trim="form.name" placeholder="璇疯緭鍏ヤ紒涓氬悕绉�" />
       </nut-form-item>
-      <nut-form-item label="鎵嬫満鍙�:" prop="phone" required>
+      <nut-form-item label="鎵嬫満鍙�:" class="bole-form-item" prop="phone" required>
         <nut-input v-model.trim="form.phone" placeholder="璇疯緭鍏ユ墜鏈哄彿" type="text" />
       </nut-form-item>
       <nut-form-item label="韬唤:" class="bole-form-item" prop="gender">
         <ChooseInputWithPicker
           v-model="form.gender"
           placeholder="璇烽�夋嫨韬唤"
-          :value-enum="MineHireTypeText"
+          :value-enum="TaskStatusText"
+        />
+      </nut-form-item>
+      <nut-form-item label="瀛﹀巻:" class="bole-form-item" prop="gender">
+        <ChooseInputWithPicker
+          v-model="form.gender"
+          placeholder="璇烽�夋嫨瀛﹀巻"
+          :value-enum="TaskStatusText"
+        />
+      </nut-form-item>
+      <nut-form-item label="甯搁┗鍩庡競:" class="bole-form-item" prop="gender">
+        <ChooseInputWithPicker
+          v-model="form.gender"
+          placeholder="璇烽�夋嫨甯搁┗鍩庡競"
+          :value-enum="TaskStatusText"
         />
       </nut-form-item>
     </nut-form>
@@ -22,21 +39,23 @@
 </template>
 
 <script setup lang="ts">
-import { useUserStore } from '@/stores/modules/user';
 import { FormRules } from '@nutui/nutui-taro/dist/types/__VUE/form/types';
 import { ChooseInputWithPicker } from '@12333/components';
-import { MineHireTypeText, MineHireType } from './constants';
+import { TaskStatusText, TaskStatus } from '@/constants';
+import { convertApi2FormUrlOnlyOne } from '@12333/utils';
+import { useUser } from '@/hooks';
 
 defineOptions({
   name: 'InnerPage',
 });
 
-const userStore = useUserStore();
+const { userDetail } = useUser();
 
 const form = reactive({
+  avatarUrl: convertApi2FormUrlOnlyOne(userDetail.value?.originalAvatarUrl),
   name: '',
   phone: '',
-  gender: MineHireType.All,
+  gender: TaskStatus.All,
 });
 
 const rules = reactive<FormRules>({
@@ -57,9 +76,4 @@
 
 <style lang="scss">
 @import '@/styles/common.scss';
-
-.task-card-actions-text {
-  font-size: 24px;
-  line-height: 42px;
-}
 </style>
diff --git a/apps/cMiniApp/src/subpackages/mine/editMineInfo/constants/index.ts b/apps/cMiniApp/src/subpackages/mine/editMineInfo/constants/index.ts
deleted file mode 100644
index c3d377a..0000000
--- a/apps/cMiniApp/src/subpackages/mine/editMineInfo/constants/index.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-export enum MineHireType {
-  All = 0,
-  InProgress = 10,
-  WaitCheck = 20,
-  Finished = 30,
-}
-
-export const MineHireTypeText = {
-  [MineHireType.All]: '鍏ㄩ儴',
-  [MineHireType.InProgress]: '杩涜涓�',
-  [MineHireType.WaitCheck]: '寰呴獙鏀�',
-  [MineHireType.Finished]: '宸插畬鎴�',
-};
-
-export const MineHireTypeColor = {
-  [MineHireType.InProgress]: '#3A71FF',
-  [MineHireType.WaitCheck]: '#FF7D00',
-  [MineHireType.Finished]: '#9FA4AC',
-};
diff --git a/apps/cMiniApp/src/subpackages/mine/editMineInfo/editMineInfo.vue b/apps/cMiniApp/src/subpackages/mine/editMineInfo/editMineInfo.vue
index 8485302..0f814db 100644
--- a/apps/cMiniApp/src/subpackages/mine/editMineInfo/editMineInfo.vue
+++ b/apps/cMiniApp/src/subpackages/mine/editMineInfo/editMineInfo.vue
@@ -1,5 +1,5 @@
 <template>
-  <PageLayout class="index-page-wrapper" :title="'缂栬緫涓汉淇℃伅'">
+  <PageLayout class="index-page-wrapper" :title="'缂栬緫涓汉淇℃伅'" has-border>
     <InnerPage></InnerPage>
   </PageLayout>
 </template>
diff --git a/apps/cMiniApp/src/subpackages/mine/mineAgreementSign/InnerPage.vue b/apps/cMiniApp/src/subpackages/mine/mineAgreementSign/InnerPage.vue
index fe9a163..d288f3a 100644
--- a/apps/cMiniApp/src/subpackages/mine/mineAgreementSign/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/mine/mineAgreementSign/InnerPage.vue
@@ -8,10 +8,10 @@
     title-gutter="12"
     title-scroll
   >
-    <ProTabPane :title="`鍏ㄩ儴`" :pane-key="MineAgreementSignType.All"></ProTabPane>
-    <ProTabPane :title="`寰呯绾" :pane-key="MineAgreementSignType.WaitSign"></ProTabPane>
-    <ProTabPane :title="`鐢熸晥涓璥" :pane-key="MineAgreementSignType.Effect"></ProTabPane>
-    <ProTabPane :title="`宸茬粓姝" :pane-key="MineAgreementSignType.Terminated"></ProTabPane>
+    <ProTabPane :title="`鍏ㄩ儴`" :pane-key="0"></ProTabPane>
+    <ProTabPane :title="`寰呯绾" :pane-key="10"></ProTabPane>
+    <ProTabPane :title="`鐢熸晥涓璥" :pane-key="20"></ProTabPane>
+    <ProTabPane :title="`宸茬粓姝" :pane-key="30"></ProTabPane>
   </ProTabs>
   <InfiniteLoading
     scrollViewClassName="common-infinite-scroll-list home-list"
@@ -21,8 +21,8 @@
     <template #renderItem="{ item }">
       <MineAgreementSignCard @click="goDetail">
         <template #actions>
-          <div class="task-card-actions-text" :style="{ color: MineAgreementSignTypeColor[10] }">
-            {{ MineAgreementSignTypeText[10] }}
+          <div class="task-card-actions-text" :style="{ color: TaskStatusColor[10] }">
+            {{ TaskStatusText[10] }}
           </div>
         </template>
       </MineAgreementSignCard>
@@ -33,11 +33,7 @@
 <script setup lang="ts">
 import { MineAgreementSignCard, ProTabs, ProTabPane } from '@12333/components';
 import { useUserStore } from '@/stores/modules/user';
-import {
-  MineAgreementSignType,
-  MineAgreementSignTypeColor,
-  MineAgreementSignTypeText,
-} from './constants';
+import { TaskStatusText, TaskStatusColor, TaskStatus } from '@/constants';
 import { useInfiniteLoading } from '@12333/hooks';
 import { OrderInputType } from '@12333/constants';
 import * as orderServices from '@12333/services/api/Order';
@@ -48,7 +44,7 @@
 });
 
 const queryState = reactive({
-  mineAgreementSignType: MineAgreementSignType.All,
+  mineAgreementSignType: TaskStatus.All,
 });
 
 const userStore = useUserStore();
@@ -60,7 +56,7 @@
         rows: 20,
         page: pageParam,
         orderInput: [
-          queryState.mineAgreementSignType === MineAgreementSignType.All
+          queryState.mineAgreementSignType === TaskStatus.All
             ? { property: 'isRecommend', order: OrderInputType.Desc }
             : { property: 'lastShelfTime', order: OrderInputType.Desc },
         ],
diff --git a/apps/cMiniApp/src/subpackages/mine/mineAgreementSign/constants/index.ts b/apps/cMiniApp/src/subpackages/mine/mineAgreementSign/constants/index.ts
deleted file mode 100644
index ffee013..0000000
--- a/apps/cMiniApp/src/subpackages/mine/mineAgreementSign/constants/index.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-export enum MineAgreementSignType {
-  All = 0,
-  WaitSign = 10,
-  Effect = 20,
-  Terminated = 30,
-}
-
-export const MineAgreementSignTypeText = {
-  [MineAgreementSignType.All]: '鍏ㄩ儴',
-  [MineAgreementSignType.WaitSign]: '寰呯绾�',
-  [MineAgreementSignType.Effect]: '鐢熸晥涓�',
-  [MineAgreementSignType.Terminated]: '宸茬粓姝�',
-};
-
-export const MineAgreementSignTypeColor = {
-  [MineAgreementSignType.WaitSign]: '#FF7D00',
-  [MineAgreementSignType.Effect]: '#3A71FF',
-  [MineAgreementSignType.Terminated]: '#9FA4AC',
-};
diff --git a/apps/cMiniApp/src/subpackages/mine/mineAgreementSignDetail/constants/index.ts b/apps/cMiniApp/src/subpackages/mine/mineAgreementSignDetail/constants/index.ts
deleted file mode 100644
index ffee013..0000000
--- a/apps/cMiniApp/src/subpackages/mine/mineAgreementSignDetail/constants/index.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-export enum MineAgreementSignType {
-  All = 0,
-  WaitSign = 10,
-  Effect = 20,
-  Terminated = 30,
-}
-
-export const MineAgreementSignTypeText = {
-  [MineAgreementSignType.All]: '鍏ㄩ儴',
-  [MineAgreementSignType.WaitSign]: '寰呯绾�',
-  [MineAgreementSignType.Effect]: '鐢熸晥涓�',
-  [MineAgreementSignType.Terminated]: '宸茬粓姝�',
-};
-
-export const MineAgreementSignTypeColor = {
-  [MineAgreementSignType.WaitSign]: '#FF7D00',
-  [MineAgreementSignType.Effect]: '#3A71FF',
-  [MineAgreementSignType.Terminated]: '#9FA4AC',
-};
diff --git a/apps/cMiniApp/src/subpackages/mine/mineCertificate/InnerPage.vue b/apps/cMiniApp/src/subpackages/mine/mineCertificate/InnerPage.vue
new file mode 100644
index 0000000..9109faa
--- /dev/null
+++ b/apps/cMiniApp/src/subpackages/mine/mineCertificate/InnerPage.vue
@@ -0,0 +1,43 @@
+<template>
+  <ContentScrollView :paddingH="false">
+    <List>
+      <ListItem title="鍋ュ悍璇�" @click="handleEdit"> </ListItem>
+      <ListItem title="鍋ュ悍璇�" @click="handleEdit"> </ListItem>
+      <ListItem title="鍋ュ悍璇�" @click="handleEdit"> </ListItem>
+      <ListItem title="鍋ュ悍璇�" @click="handleEdit"> </ListItem>
+      <ListItem title="鍋ュ悍璇�" @click="handleEdit"> </ListItem>
+      <ListItem title="鍋ュ悍璇�" @click="handleEdit"> </ListItem>
+    </List>
+  </ContentScrollView>
+  <PageFooter>
+    <PageFooterBtn type="primary" @click="handleAdd">娣诲姞璇佷功</PageFooterBtn>
+  </PageFooter>
+</template>
+
+<script setup lang="ts">
+import { useUser } from '@/hooks';
+import { List, ListItem } from '@12333/components';
+import Taro from '@tarojs/taro';
+import { RouterPath } from '@/constants';
+
+defineOptions({
+  name: 'InnerPage',
+});
+
+const { userDetail } = useUser();
+
+const form = reactive({
+  workYear: '',
+});
+
+function handleAdd() {
+  Taro.navigateTo({
+    url: RouterPath.mineCertificateAddOrEdit,
+  });
+}
+function handleEdit() {}
+</script>
+
+<style lang="scss">
+@import '@/styles/common.scss';
+</style>
diff --git a/apps/cMiniApp/src/subpackages/mine/mineCertificate/mineCertificate.config.ts b/apps/cMiniApp/src/subpackages/mine/mineCertificate/mineCertificate.config.ts
new file mode 100644
index 0000000..305fdb1
--- /dev/null
+++ b/apps/cMiniApp/src/subpackages/mine/mineCertificate/mineCertificate.config.ts
@@ -0,0 +1,3 @@
+export default definePageConfig({
+  disableScroll: true,
+});
diff --git a/apps/cMiniApp/src/subpackages/mine/mineCertificate/mineCertificate.vue b/apps/cMiniApp/src/subpackages/mine/mineCertificate/mineCertificate.vue
new file mode 100644
index 0000000..8b45d8a
--- /dev/null
+++ b/apps/cMiniApp/src/subpackages/mine/mineCertificate/mineCertificate.vue
@@ -0,0 +1,17 @@
+<template>
+  <PageLayout class="index-page-wrapper" :title="'璧勬牸璇佷功'" has-border>
+    <InnerPage></InnerPage>
+  </PageLayout>
+</template>
+
+<script setup lang="ts">
+import InnerPage from './InnerPage.vue';
+
+defineOptions({
+  name: 'mineCertificate',
+});
+</script>
+
+<style lang="scss">
+@import '@/styles/common.scss';
+</style>
diff --git a/apps/cMiniApp/src/subpackages/mine/mineCertificateAddOrEdit/InnerPage.vue b/apps/cMiniApp/src/subpackages/mine/mineCertificateAddOrEdit/InnerPage.vue
new file mode 100644
index 0000000..9540a72
--- /dev/null
+++ b/apps/cMiniApp/src/subpackages/mine/mineCertificateAddOrEdit/InnerPage.vue
@@ -0,0 +1,120 @@
+<template>
+  <ContentScrollView :paddingH="false">
+    <nut-form :model-value="form" ref="formRef" :rules="rules">
+      <nut-form-item label="璇佷功绫诲瀷:" class="bole-form-item" prop="type">
+        <ChooseInputWithPicker
+          v-model="form.type"
+          placeholder="璇烽�夋嫨璇佷功绫诲瀷"
+          :value-enum="TaskStatusText"
+        />
+      </nut-form-item>
+      <nut-form-item label="璇佷功缂栧彿:" class="bole-form-item" prop="certificateNumber">
+        <nut-input v-model="form.certificateNumber" type="number" placeholder="璇疯緭鍏�"> </nut-input>
+      </nut-form-item>
+      <nut-form-item label="寮�濮嬫棩鏈�:" class="bole-form-item" prop="startDate">
+        <ChooseInputWithDatePicker v-model="form.startDate"></ChooseInputWithDatePicker>
+      </nut-form-item>
+      <nut-form-item label="缁撴潫鏃ユ湡:" class="bole-form-item" prop="endDate">
+        <ChooseInputWithDatePicker v-model="form.endDate"></ChooseInputWithDatePicker>
+      </nut-form-item>
+      <nut-form-item
+        label="姘镐箙璇佷功:"
+        class="bole-form-item permanent-certificate"
+        prop="isPermanentCertificate"
+      >
+        <nut-switch v-model="form.isPermanentCertificate" />
+      </nut-form-item>
+      <nut-form-item label="鍙戣瘉鍗曚綅:" class="bole-form-item" prop="certificateNumber">
+        <nut-input v-model="form.certificateNumber" placeholder="璇疯緭鍏�"> </nut-input>
+      </nut-form-item>
+      <div class="certificate-upload">
+        <div class="certificate-upload-title">涓婁紶璇佷功</div>
+        <nut-form-item
+          label="璇佷功姝i潰鐓х墖锛堣纭繚璇佷功鍙枫�佸ご鍍忕収鐗囩瓑娓呮櫚鍙锛�"
+          class="bole-form-item"
+          prop="photo"
+          label-position="top"
+        >
+          <Uploader v-model:file-list="form.photo" :maximum="1" class="bole-uploader"> </Uploader>
+        </nut-form-item>
+        <nut-form-item
+          label="璇佷功鍙嶉潰鐓х墖锛堟垨鍏朵粬鏈夊唴瀹归〉锛�"
+          class="bole-form-item"
+          prop="photo"
+          label-position="top"
+        >
+          <Uploader v-model:file-list="form.photo" :maximum="1" class="bole-uploader"> </Uploader>
+        </nut-form-item>
+      </div>
+    </nut-form>
+  </ContentScrollView>
+  <PageFooter>
+    <PageFooterBtn type="primary" @click="handleConfirm">淇濆瓨</PageFooterBtn>
+  </PageFooter>
+</template>
+
+<script setup lang="ts">
+import { useUser } from '@/hooks';
+import { ChooseInputWithPicker, ChooseInputWithDatePicker } from '@12333/components';
+import { TaskStatusText, TaskStatus } from '@/constants';
+import { FormRules } from '@nutui/nutui-taro/dist/types/__VUE/form/types';
+
+defineOptions({
+  name: 'InnerPage',
+});
+
+const { userDetail } = useUser();
+
+const form = reactive({
+  type: TaskStatus.All,
+  certificateNumber: '',
+  startDate: '',
+  endDate: '',
+  isPermanentCertificate: false,
+  photo: [],
+});
+
+const rules = reactive<FormRules>({
+  type: [{ required: true, message: '璇疯緭鍏ユ墜鏈哄彿' }],
+  startDate: [{ required: true, message: '璇烽�夋嫨寮�濮嬫棩鏈�' }],
+  endDate: [{ required: true, message: '璇烽�夋嫨缁撴潫鏃ユ湡' }],
+  photo: [{ required: true, message: '璇蜂笂浼犺瘉涔︽闈㈢収' }],
+});
+const formRef = ref<any>(null);
+function handleConfirm() {
+  if (!formRef.value) return;
+  formRef.value.validate().then(({ valid, errors }: any) => {
+    if (valid) {
+      confirm();
+    }
+  });
+}
+
+function confirm() {}
+</script>
+
+<style lang="scss">
+@import '@/styles/common.scss';
+
+.nut-form .nut-cell.bole-form-item:not(.alignTop),
+page .nut-form .nut-cell.bole-form-item:not(.alignTop) {
+  align-items: flex-start !important;
+}
+
+.permanent-certificate {
+  --nut-form-item-body-slots-text-align: right;
+}
+
+.certificate-upload {
+  .certificate-upload-title {
+    font-size: 28px;
+    padding: 26px 32px 0;
+  }
+
+  .nut-form-item__label {
+    padding-right: 0;
+    font-size: 24px;
+    width: 98%;
+  }
+}
+</style>
diff --git a/apps/cMiniApp/src/subpackages/mine/mineCertificateAddOrEdit/mineCertificateAddOrEdit.config.ts b/apps/cMiniApp/src/subpackages/mine/mineCertificateAddOrEdit/mineCertificateAddOrEdit.config.ts
new file mode 100644
index 0000000..305fdb1
--- /dev/null
+++ b/apps/cMiniApp/src/subpackages/mine/mineCertificateAddOrEdit/mineCertificateAddOrEdit.config.ts
@@ -0,0 +1,3 @@
+export default definePageConfig({
+  disableScroll: true,
+});
diff --git a/apps/cMiniApp/src/subpackages/mine/mineCertificateAddOrEdit/mineCertificateAddOrEdit.vue b/apps/cMiniApp/src/subpackages/mine/mineCertificateAddOrEdit/mineCertificateAddOrEdit.vue
new file mode 100644
index 0000000..01cb068
--- /dev/null
+++ b/apps/cMiniApp/src/subpackages/mine/mineCertificateAddOrEdit/mineCertificateAddOrEdit.vue
@@ -0,0 +1,17 @@
+<template>
+  <PageLayout class="index-page-wrapper" :title="'璧勬牸璇佷功'" has-border>
+    <InnerPage></InnerPage>
+  </PageLayout>
+</template>
+
+<script setup lang="ts">
+import InnerPage from './InnerPage.vue';
+
+defineOptions({
+  name: 'mineCertificateAddOrEdit',
+});
+</script>
+
+<style lang="scss">
+@import '@/styles/common.scss';
+</style>
diff --git a/apps/cMiniApp/src/subpackages/mine/mineCollectTask/InnerPage.vue b/apps/cMiniApp/src/subpackages/mine/mineCollectTask/InnerPage.vue
index da4c79b..b5801b3 100644
--- a/apps/cMiniApp/src/subpackages/mine/mineCollectTask/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/mine/mineCollectTask/InnerPage.vue
@@ -67,10 +67,4 @@
     color: boleGetCssVar('text-color', 'regular');
   }
 }
-
-.task-card-actions-text {
-  font-size: 24px;
-  line-height: 42px;
-  color: #9fa4ac;
-}
 </style>
diff --git a/apps/cMiniApp/src/subpackages/mine/mineCurriculumVitae/InnerPage.vue b/apps/cMiniApp/src/subpackages/mine/mineCurriculumVitae/InnerPage.vue
index f0d25e7..4e5ccbf 100644
--- a/apps/cMiniApp/src/subpackages/mine/mineCurriculumVitae/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/mine/mineCurriculumVitae/InnerPage.vue
@@ -38,7 +38,7 @@
       <div class="mine-curriculum-intention-content">
         <div class="mine-curriculum-intention-title">
           <div class="mine-curriculum-intention-title-text">姹傝亴鎰忓悜</div>
-          <div class="mine-curriculum-intention-title-edit">
+          <div class="mine-curriculum-intention-title-edit" @click="goMineJobIntention">
             缂栬緫
             <img :src="IconArrow" class="mine-curriculum-intention-title-edit-icon" />
           </div>
@@ -65,17 +65,21 @@
         </MineAgreementSignDetailItem>
       </div>
 
-      <ListItem title="璧勬牸璇佷功">
+      <ListItem title="璧勬牸璇佷功" @click="goMineCertificate">
         <template #extra>
           <div class="mine-curriculum-intention-enit-btn">缂栬緫</div>
         </template>
       </ListItem>
-      <ListItem title="宸ヤ綔缁忛獙">
+      <ListItem title="宸ヤ綔缁忛獙" @click="goMineWorkExperience">
         <template #extra>
           <div class="mine-curriculum-intention-enit-btn">缂栬緫</div>
         </template>
       </ListItem>
-      <ListItem title="璇︾粏淇℃伅" class="mine-curriculum-intention-detail">
+      <ListItem
+        title="璇︾粏淇℃伅"
+        class="mine-curriculum-intention-detail"
+        @click="goMineDetailedInfo"
+      >
         <template #extra>
           <div class="mine-curriculum-intention-enit-btn">缂栬緫</div>
         </template>
@@ -101,11 +105,26 @@
 const userStore = useUserStore();
 const isLogin = useIsLogin();
 
-function goEditMineInfo() {
+function goPage(routeName: string) {
   Taro.navigateTo({
-    url: RouterPath.editMineInfo,
+    url: routeName,
   });
 }
+function goEditMineInfo() {
+  goPage(RouterPath.editMineInfo);
+}
+function goMineJobIntention() {
+  goPage(RouterPath.mineJobIntention);
+}
+function goMineDetailedInfo() {
+  goPage(RouterPath.mineDetailedInfo);
+}
+function goMineWorkExperience() {
+  goPage(RouterPath.mineWorkExperience);
+}
+function goMineCertificate() {
+  goPage(RouterPath.mineCertificate);
+}
 </script>
 
 <style lang="scss">
diff --git a/apps/cMiniApp/src/subpackages/mine/mineDetailedInfo/InnerPage.vue b/apps/cMiniApp/src/subpackages/mine/mineDetailedInfo/InnerPage.vue
new file mode 100644
index 0000000..f67fa70
--- /dev/null
+++ b/apps/cMiniApp/src/subpackages/mine/mineDetailedInfo/InnerPage.vue
@@ -0,0 +1,61 @@
+<template>
+  <ContentScrollView :paddingH="false">
+    <nut-form :model-value="form" ref="formRef">
+      <nut-form-item label="韬珮:" class="bole-form-item" prop="height">
+        <NumberInput v-model="form.height" placeholder="璇疯緭鍏�">
+          <template #right>cm</template>
+        </NumberInput>
+      </nut-form-item>
+      <nut-form-item label="浣撻噸:" class="bole-form-item" prop="weight">
+        <NumberInput v-model="form.weight" placeholder="璇疯緭鍏�">
+          <template #right>kg</template>
+        </NumberInput>
+      </nut-form-item>
+      <nut-form-item
+        label="涓汉鐢熸椿鐓э紙鍗曞紶鐓х墖涓嶈秴杩�5m锛屾渶澶氫笉瓒呰繃6寮狅級:"
+        class="bole-form-item person-photo"
+        prop="photo"
+        label-position="top"
+      >
+        <Uploader v-model:file-list="form.photo" :maximum="6" class="bole-uploader"> </Uploader>
+      </nut-form-item>
+    </nut-form>
+  </ContentScrollView>
+  <PageFooter>
+    <PageFooterBtn type="primary" @click="handleConfirm">淇濆瓨</PageFooterBtn>
+  </PageFooter>
+</template>
+
+<script setup lang="ts">
+import { useUser } from '@/hooks';
+import { NumberInput } from '@12333/components';
+
+defineOptions({
+  name: 'InnerPage',
+});
+
+const { userDetail } = useUser();
+
+const form = reactive({
+  height: '',
+  weight: '',
+  photo: [],
+});
+
+function handleConfirm() {}
+</script>
+
+<style lang="scss">
+@import '@/styles/common.scss';
+
+.person-photo {
+  .nut-form-item__label {
+    padding-right: 0;
+  }
+}
+
+.nut-form .nut-cell.bole-form-item:not(.alignTop),
+page .nut-form .nut-cell.bole-form-item:not(.alignTop) {
+  align-items: flex-start !important;
+}
+</style>
diff --git a/apps/cMiniApp/src/subpackages/mine/mineDetailedInfo/mineDetailedInfo.config.ts b/apps/cMiniApp/src/subpackages/mine/mineDetailedInfo/mineDetailedInfo.config.ts
new file mode 100644
index 0000000..305fdb1
--- /dev/null
+++ b/apps/cMiniApp/src/subpackages/mine/mineDetailedInfo/mineDetailedInfo.config.ts
@@ -0,0 +1,3 @@
+export default definePageConfig({
+  disableScroll: true,
+});
diff --git a/apps/cMiniApp/src/subpackages/mine/mineDetailedInfo/mineDetailedInfo.vue b/apps/cMiniApp/src/subpackages/mine/mineDetailedInfo/mineDetailedInfo.vue
new file mode 100644
index 0000000..f8b3235
--- /dev/null
+++ b/apps/cMiniApp/src/subpackages/mine/mineDetailedInfo/mineDetailedInfo.vue
@@ -0,0 +1,17 @@
+<template>
+  <PageLayout class="index-page-wrapper" :title="'璇︾粏淇℃伅'" has-border>
+    <InnerPage></InnerPage>
+  </PageLayout>
+</template>
+
+<script setup lang="ts">
+import InnerPage from './InnerPage.vue';
+
+defineOptions({
+  name: 'mineDetailedInfo',
+});
+</script>
+
+<style lang="scss">
+@import '@/styles/common.scss';
+</style>
diff --git a/apps/cMiniApp/src/subpackages/mine/mineHire/InnerPage.vue b/apps/cMiniApp/src/subpackages/mine/mineHire/InnerPage.vue
index f9234cc..eb33873 100644
--- a/apps/cMiniApp/src/subpackages/mine/mineHire/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/mine/mineHire/InnerPage.vue
@@ -8,10 +8,10 @@
     title-gutter="12"
     title-scroll
   >
-    <ProTabPane :title="`鍏ㄩ儴`" :pane-key="MineHireType.All"></ProTabPane>
-    <ProTabPane :title="`杩涜涓璥" :pane-key="MineHireType.InProgress"></ProTabPane>
-    <ProTabPane :title="`寰呴獙鏀禶" :pane-key="MineHireType.WaitCheck"></ProTabPane>
-    <ProTabPane :title="`宸插畬鎴恅" :pane-key="MineHireType.Finished"></ProTabPane>
+    <ProTabPane :title="`鍏ㄩ儴`" :pane-key="0"></ProTabPane>
+    <ProTabPane :title="`杩涜涓璥" :pane-key="10"></ProTabPane>
+    <ProTabPane :title="`寰呴獙鏀禶" :pane-key="20"></ProTabPane>
+    <ProTabPane :title="`宸插畬鎴恅" :pane-key="30"></ProTabPane>
   </ProTabs>
   <InfiniteLoading
     scrollViewClassName="common-infinite-scroll-list home-list"
@@ -21,8 +21,8 @@
     <template #renderItem="{ item }">
       <TaskCard>
         <template #actions>
-          <div class="task-card-actions-text" :style="{ color: MineHireTypeColor[10] }">
-            {{ MineHireTypeText[10] }}
+          <div class="task-card-actions-text" :style="{ color: TaskStatusColor[10] }">
+            {{ TaskStatusText[10] }}
           </div>
         </template>
       </TaskCard>
@@ -33,7 +33,7 @@
 <script setup lang="ts">
 import { TaskCard, ProTabs, ProTabPane } from '@12333/components';
 import { useUserStore } from '@/stores/modules/user';
-import { MineHireType, MineHireTypeColor, MineHireTypeText } from './constants';
+import { TaskStatusText, TaskStatusColor, TaskStatus } from '@/constants';
 import { useInfiniteLoading } from '@12333/hooks';
 import { OrderInputType } from '@12333/constants';
 import * as orderServices from '@12333/services/api/Order';
@@ -43,7 +43,7 @@
 });
 
 const queryState = reactive({
-  mineHireType: MineHireType.All,
+  mineHireType: TaskStatus.All,
 });
 
 const userStore = useUserStore();
@@ -55,7 +55,7 @@
         rows: 20,
         page: pageParam,
         orderInput: [
-          queryState.mineHireType === MineHireType.All
+          queryState.mineHireType === TaskStatus.All
             ? { property: 'isRecommend', order: OrderInputType.Desc }
             : { property: 'lastShelfTime', order: OrderInputType.Desc },
         ],
diff --git a/apps/cMiniApp/src/subpackages/mine/mineHire/constants/index.ts b/apps/cMiniApp/src/subpackages/mine/mineHire/constants/index.ts
deleted file mode 100644
index c3d377a..0000000
--- a/apps/cMiniApp/src/subpackages/mine/mineHire/constants/index.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-export enum MineHireType {
-  All = 0,
-  InProgress = 10,
-  WaitCheck = 20,
-  Finished = 30,
-}
-
-export const MineHireTypeText = {
-  [MineHireType.All]: '鍏ㄩ儴',
-  [MineHireType.InProgress]: '杩涜涓�',
-  [MineHireType.WaitCheck]: '寰呴獙鏀�',
-  [MineHireType.Finished]: '宸插畬鎴�',
-};
-
-export const MineHireTypeColor = {
-  [MineHireType.InProgress]: '#3A71FF',
-  [MineHireType.WaitCheck]: '#FF7D00',
-  [MineHireType.Finished]: '#9FA4AC',
-};
diff --git a/apps/cMiniApp/src/subpackages/mine/mineJobIntention/InnerPage.vue b/apps/cMiniApp/src/subpackages/mine/mineJobIntention/InnerPage.vue
new file mode 100644
index 0000000..2f84827
--- /dev/null
+++ b/apps/cMiniApp/src/subpackages/mine/mineJobIntention/InnerPage.vue
@@ -0,0 +1,66 @@
+<template>
+  <ContentScrollView :paddingH="false">
+    <nut-form :model-value="form" ref="formRef" :rules="rules">
+      <nut-form-item label="鏈熸湜宀椾綅:" class="bole-form-item" prop="job">
+        <ChooseInputWithPicker
+          v-model="form.job"
+          placeholder="璇烽�夋嫨鏈熸湜宀椾綅"
+          :value-enum="TaskStatusText"
+        />
+      </nut-form-item>
+      <nut-form-item label="绌洪棽鏃堕棿:" class="bole-form-item" prop="job">
+        <ChooseInputWithPicker
+          v-model="form.job"
+          placeholder="璇烽�夋嫨绌洪棽鏃堕棿"
+          :value-enum="TaskStatusText"
+        />
+      </nut-form-item>
+      <nut-form-item label="姹傝亴鐘舵��:" class="bole-form-item" prop="job">
+        <ChooseInputWithPicker
+          v-model="form.job"
+          placeholder="璇烽�夋嫨姹傝亴鐘舵��"
+          :value-enum="TaskStatusText"
+        />
+      </nut-form-item>
+    </nut-form>
+  </ContentScrollView>
+  <PageFooter>
+    <PageFooterBtn type="primary" @click="handleConfirm">淇濆瓨</PageFooterBtn>
+  </PageFooter>
+</template>
+
+<script setup lang="ts">
+import { FormRules } from '@nutui/nutui-taro/dist/types/__VUE/form/types';
+import { ChooseInputWithPicker } from '@12333/components';
+import { TaskStatusText, TaskStatus } from '@/constants';
+import { useUser } from '@/hooks';
+
+defineOptions({
+  name: 'InnerPage',
+});
+
+const { userDetail } = useUser();
+
+const form = reactive({
+  job: TaskStatus.All,
+});
+
+const rules = reactive<FormRules>({
+  job: [{ required: true, message: '璇烽�夋嫨' }],
+});
+const formRef = ref<any>(null);
+function handleConfirm() {
+  if (!formRef.value) return;
+  formRef.value.validate().then(({ valid, errors }: any) => {
+    if (valid) {
+      confirm();
+    }
+  });
+}
+
+function confirm() {}
+</script>
+
+<style lang="scss">
+@import '@/styles/common.scss';
+</style>
diff --git a/apps/cMiniApp/src/subpackages/mine/mineJobIntention/mineJobIntention.config.ts b/apps/cMiniApp/src/subpackages/mine/mineJobIntention/mineJobIntention.config.ts
new file mode 100644
index 0000000..305fdb1
--- /dev/null
+++ b/apps/cMiniApp/src/subpackages/mine/mineJobIntention/mineJobIntention.config.ts
@@ -0,0 +1,3 @@
+export default definePageConfig({
+  disableScroll: true,
+});
diff --git a/apps/cMiniApp/src/subpackages/mine/mineJobIntention/mineJobIntention.vue b/apps/cMiniApp/src/subpackages/mine/mineJobIntention/mineJobIntention.vue
new file mode 100644
index 0000000..4e3feed
--- /dev/null
+++ b/apps/cMiniApp/src/subpackages/mine/mineJobIntention/mineJobIntention.vue
@@ -0,0 +1,17 @@
+<template>
+  <PageLayout class="index-page-wrapper" :title="'姹傝亴鎰忓悜'" has-border>
+    <InnerPage></InnerPage>
+  </PageLayout>
+</template>
+
+<script setup lang="ts">
+import InnerPage from './InnerPage.vue';
+
+defineOptions({
+  name: 'mineJobIntention',
+});
+</script>
+
+<style lang="scss">
+@import '@/styles/common.scss';
+</style>
diff --git a/apps/cMiniApp/src/subpackages/mine/mineSign/InnerPage.vue b/apps/cMiniApp/src/subpackages/mine/mineSign/InnerPage.vue
index c423588..dcddaa6 100644
--- a/apps/cMiniApp/src/subpackages/mine/mineSign/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/mine/mineSign/InnerPage.vue
@@ -8,9 +8,9 @@
     title-gutter="12"
     title-scroll
   >
-    <ProTabPane :title="`鍏ㄩ儴`" :pane-key="MineSignType.All"></ProTabPane>
-    <ProTabPane :title="`寰呯‘璁" :pane-key="MineSignType.WaitConfirm"></ProTabPane>
-    <ProTabPane :title="`寰呯绾" :pane-key="MineSignType.WaitSign"></ProTabPane>
+    <ProTabPane :title="`鍏ㄩ儴`" :pane-key="0"></ProTabPane>
+    <ProTabPane :title="`寰呯‘璁" :pane-key="10"></ProTabPane>
+    <ProTabPane :title="`寰呯绾" :pane-key="20"></ProTabPane>
   </ProTabs>
   <InfiniteLoading
     scrollViewClassName="common-infinite-scroll-list home-list"
@@ -20,8 +20,8 @@
     <template #renderItem="{ item }">
       <TaskCard>
         <template #actions>
-          <div class="task-card-actions-text" :style="{ color: MineSignTypeColor[10] }">
-            {{ MineSignTypeText[10] }}
+          <div class="task-card-actions-text" :style="{ color: TaskStatusColor[10] }">
+            {{ TaskStatusText[10] }}
           </div>
         </template>
       </TaskCard>
@@ -32,7 +32,7 @@
 <script setup lang="ts">
 import { TaskCard, ProTabs, ProTabPane } from '@12333/components';
 import { useUserStore } from '@/stores/modules/user';
-import { MineSignType, MineSignTypeColor, MineSignTypeText } from './constants';
+import { TaskStatusText, TaskStatusColor, TaskStatus } from '@/constants';
 import { useInfiniteLoading } from '@12333/hooks';
 import { OrderInputType } from '@12333/constants';
 import * as orderServices from '@12333/services/api/Order';
@@ -42,7 +42,7 @@
 });
 
 const queryState = reactive({
-  mineSignType: MineSignType.All,
+  mineSignType: TaskStatus.All,
 });
 
 const userStore = useUserStore();
@@ -54,7 +54,7 @@
         rows: 20,
         page: pageParam,
         orderInput: [
-          queryState.mineSignType === MineSignType.All
+          queryState.mineSignType === TaskStatus.All
             ? { property: 'isRecommend', order: OrderInputType.Desc }
             : { property: 'lastShelfTime', order: OrderInputType.Desc },
         ],
diff --git a/apps/cMiniApp/src/subpackages/mine/mineSign/constants/index.ts b/apps/cMiniApp/src/subpackages/mine/mineSign/constants/index.ts
deleted file mode 100644
index 165c714..0000000
--- a/apps/cMiniApp/src/subpackages/mine/mineSign/constants/index.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-export enum MineSignType {
-  All = 0,
-  WaitConfirm = 10,
-  WaitSign = 20,
-}
-
-export const MineSignTypeText = {
-  [MineSignType.All]: '鍏ㄩ儴',
-  [MineSignType.WaitConfirm]: '寰呯‘璁�',
-  [MineSignType.WaitSign]: '寰呯绾�',
-};
-
-export const MineSignTypeColor = {
-  [MineSignType.WaitConfirm]: '#FF7D00',
-  [MineSignType.WaitSign]: '#3A71FF',
-};
diff --git a/apps/cMiniApp/src/subpackages/mine/mineWorkExperience/InnerPage.vue b/apps/cMiniApp/src/subpackages/mine/mineWorkExperience/InnerPage.vue
new file mode 100644
index 0000000..5dd1dbc
--- /dev/null
+++ b/apps/cMiniApp/src/subpackages/mine/mineWorkExperience/InnerPage.vue
@@ -0,0 +1,35 @@
+<template>
+  <ContentScrollView :paddingH="false">
+    <nut-form :model-value="form" ref="formRef">
+      <nut-form-item label="宸ヤ綔骞撮檺:" class="bole-form-item" prop="workYear">
+        <nut-input v-model="form.workYear" placeholder="璇疯緭鍏�"> </nut-input>
+      </nut-form-item>
+      <nut-form-item label="宸ヤ綔缁忛獙:" class="bole-form-item" prop="workYear">
+        <nut-input v-model="form.workYear" type="textarea" placeholder="璇疯緭鍏�"> </nut-input>
+      </nut-form-item>
+    </nut-form>
+  </ContentScrollView>
+  <PageFooter>
+    <PageFooterBtn type="primary" @click="handleConfirm">淇濆瓨</PageFooterBtn>
+  </PageFooter>
+</template>
+
+<script setup lang="ts">
+import { useUser } from '@/hooks';
+
+defineOptions({
+  name: 'InnerPage',
+});
+
+const { userDetail } = useUser();
+
+const form = reactive({
+  workYear: '',
+});
+
+function handleConfirm() {}
+</script>
+
+<style lang="scss">
+@import '@/styles/common.scss';
+</style>
diff --git a/apps/cMiniApp/src/subpackages/mine/mineWorkExperience/mineWorkExperience.config.ts b/apps/cMiniApp/src/subpackages/mine/mineWorkExperience/mineWorkExperience.config.ts
new file mode 100644
index 0000000..305fdb1
--- /dev/null
+++ b/apps/cMiniApp/src/subpackages/mine/mineWorkExperience/mineWorkExperience.config.ts
@@ -0,0 +1,3 @@
+export default definePageConfig({
+  disableScroll: true,
+});
diff --git a/apps/cMiniApp/src/subpackages/mine/mineWorkExperience/mineWorkExperience.vue b/apps/cMiniApp/src/subpackages/mine/mineWorkExperience/mineWorkExperience.vue
new file mode 100644
index 0000000..aaa0dde
--- /dev/null
+++ b/apps/cMiniApp/src/subpackages/mine/mineWorkExperience/mineWorkExperience.vue
@@ -0,0 +1,17 @@
+<template>
+  <PageLayout class="index-page-wrapper" :title="'宸ヤ綔缁忛獙'" has-border>
+    <InnerPage></InnerPage>
+  </PageLayout>
+</template>
+
+<script setup lang="ts">
+import InnerPage from './InnerPage.vue';
+
+defineOptions({
+  name: 'mineWorkExperience',
+});
+</script>
+
+<style lang="scss">
+@import '@/styles/common.scss';
+</style>
diff --git a/packages/components/src/Input/ChooseInputWithDatePicker.vue b/packages/components/src/Input/ChooseInputWithDatePicker.vue
new file mode 100644
index 0000000..a40694d
--- /dev/null
+++ b/packages/components/src/Input/ChooseInputWithDatePicker.vue
@@ -0,0 +1,58 @@
+<template>
+  <ChooseInput :modelValue="modelValue" @click="handleOpen()"></ChooseInput>
+</template>
+
+<script setup lang="ts">
+import ChooseInput from './ChooseInput.vue';
+import { Popup, DatePicker } from '@nutui/nutui-taro';
+import { Portal } from 'senin-mini/components';
+import { h } from 'vue';
+import dayjs from 'dayjs';
+
+defineOptions({
+  name: 'ChooseInputWithDatePicker',
+});
+
+type Props = {
+  modelValue: string | number;
+};
+
+const props = withDefaults(defineProps<Props>(), {});
+
+const emit = defineEmits<{
+  (e: 'update:modelValue', val: string | number): void;
+}>();
+
+function handleOpen() {
+  const _modelValue = [props.modelValue];
+  Portal.add((key) => {
+    return h(
+      Portal.Container,
+      { keyNumber: key, delayOpen: true },
+      {
+        default: ({ open, onClose }) =>
+          h(
+            Popup,
+            {
+              visible: open.value,
+              'onUpdate:visible': (value) => !value && onClose(),
+              position: 'bottom',
+            },
+            {
+              default: () =>
+                h(DatePicker, {
+                  modelValue: _modelValue,
+                  onCancel: onClose,
+                  onConfirm: ({ selectedValue }) => {
+                    console.log('selectedValue: ', selectedValue);
+                    emit('update:modelValue', dayjs(selectedValue).format('YYYY-MM-DD'));
+                    onClose();
+                  },
+                }),
+            }
+          ),
+      }
+    );
+  });
+}
+</script>
diff --git a/packages/components/src/index.ts b/packages/components/src/index.ts
index 9151df3..1de1c75 100644
--- a/packages/components/src/index.ts
+++ b/packages/components/src/index.ts
@@ -10,6 +10,7 @@
 export { default as ListItem } from './List/ListItem.vue';
 export { default as NumberInput } from './Input/NumberInput.vue';
 export { default as ChooseInputWithPicker } from './Input/ChooseInputWithPicker.vue';
+export { default as ChooseInputWithDatePicker } from './Input/ChooseInputWithDatePicker.vue';
 export { default as ChooseInputWithAreaPicker } from './Input/ChooseInputWithAreaPicker.vue';
 export { default as ChooseInputWithAreaSheet } from './Input/ChooseInputWithAreaSheet.vue';
 export { default as PreviewImage } from './Image/PreviewImage.vue';

--
Gitblit v1.9.1