From c369c4e2f7ad0d4cc5581bba762ad0494973c092 Mon Sep 17 00:00:00 2001
From: wupengfei <834520024@qq.com>
Date: 星期四, 13 二月 2025 14:02:37 +0800
Subject: [PATCH] Merge branch 'master' of http://120.26.58.240:8888/r/flexJobMiniApp

---
 packages/components/src/AreaTreeSelect/PositionSelectView.vue              |   78 +++++++++++++
 apps/cMiniApp/src/subpackages/curriculum/expectPosition/expectPosition.vue |    2 
 packages/components/src/Menu/QueryMenuView.vue                             |   13 +
 apps/cMiniApp/src/pages/home/index.vue                                     |    7 +
 apps/cMiniApp/src/subpackages/curriculum/mineJobIntention/InnerPage.vue    |   24 +++
 apps/cMiniApp/src/hooks/task.ts                                            |    7 +
 apps/cMiniApp/project.private.config.json                                  |   14 ++
 apps/cMiniApp/src/styles/nut.scss                                          |    4 
 packages/components/src/Tag/JobTagList.vue                                 |   21 +++
 apps/cMiniApp/src/subpackages/curriculum/mineCurriculumVitae/InnerPage.vue |    9 -
 apps/cMiniApp/src/subpackages/task/taskDetail/InnerPage.vue                |    2 
 packages/components/src/Input/CommonInputField.vue                         |   39 ++++++
 packages/components/src/index.ts                                           |    3 
 apps/cMiniApp/src/subpackages/curriculum/expectPosition/InnerPage.vue      |   81 +++++++++++++
 apps/bMiniApp/src/styles/nut.scss                                          |    4 
 apps/cMiniApp/src/pages/home/HomeQueryMenuView.vue                         |    7 +
 16 files changed, 295 insertions(+), 20 deletions(-)

diff --git a/apps/bMiniApp/src/styles/nut.scss b/apps/bMiniApp/src/styles/nut.scss
index 0c1480f..ee5295d 100644
--- a/apps/bMiniApp/src/styles/nut.scss
+++ b/apps/bMiniApp/src/styles/nut.scss
@@ -104,6 +104,10 @@
       .nut-form-item__label {
         margin-right: 0;
       }
+
+      .nut-form-item__body {
+        width: 100%;
+      }
     }
   }
 
diff --git a/apps/cMiniApp/project.private.config.json b/apps/cMiniApp/project.private.config.json
index 181a6fd..53ae87f 100644
--- a/apps/cMiniApp/project.private.config.json
+++ b/apps/cMiniApp/project.private.config.json
@@ -9,6 +9,20 @@
         "miniprogram": {
             "list": [
                 {
+                    "name": "鏈熸湜宀椾綅",
+                    "pathName": "subpackages/curriculum/expectPosition/expectPosition",
+                    "query": "",
+                    "launchMode": "default",
+                    "scene": null
+                },
+                {
+                    "name": "鎴戠殑绠�鍘�",
+                    "pathName": "subpackages/curriculum/mineCurriculumVitae/mineCurriculumVitae",
+                    "query": "",
+                    "launchMode": "default",
+                    "scene": null
+                },
+                {
                     "name": "姹傝亴鎰忓悜",
                     "pathName": "subpackages/curriculum/mineJobIntention/mineJobIntention",
                     "query": "",
diff --git a/apps/cMiniApp/src/hooks/task.ts b/apps/cMiniApp/src/hooks/task.ts
index 9591376..38b1733 100644
--- a/apps/cMiniApp/src/hooks/task.ts
+++ b/apps/cMiniApp/src/hooks/task.ts
@@ -12,11 +12,15 @@
 export function useTaskList() {
   const searchValue = ref('');
 
+  const DefaultQueryState = {
+    gender: '' as any as Gender,
+  };
+
   const queryState = reactive({
     searchValueTrim: '',
     orderType: HomeOrderType.Recommend,
-    gender: '' as any as Gender,
     companyId: '',
+    ...DefaultQueryState,
   });
 
   const handleSearch = _.debounce(function () {
@@ -49,6 +53,7 @@
   return {
     searchValue,
     queryState,
+    DefaultQueryState,
     handleSearch,
     infiniteLoadingProps,
   };
diff --git a/apps/cMiniApp/src/pages/home/HomeQueryMenuView.vue b/apps/cMiniApp/src/pages/home/HomeQueryMenuView.vue
index a6e9304..3a181c1 100644
--- a/apps/cMiniApp/src/pages/home/HomeQueryMenuView.vue
+++ b/apps/cMiniApp/src/pages/home/HomeQueryMenuView.vue
@@ -1,5 +1,5 @@
 <template>
-  <QueryMenuView @close="emit('close')">
+  <QueryMenuView @close="handleReset" @confirm="emit('close')" cancelText="閲嶇疆">
     <div class="home-query-menu-view">
       <QueryMenuItem title="缁撶畻鏂瑰紡">
         <ProRadio v-model="gender" :value-enum="GenderText" show-all-btn></ProRadio>
@@ -27,10 +27,15 @@
 // const props = withDefaults(defineProps<Props>(), {});
 
 const emit = defineEmits<{
+  (e: 'reset'): void;
   (e: 'close'): void;
 }>();
 
 const gender = defineModel<number | string>('gender');
+
+function handleReset() {
+  emit('reset');
+}
 </script>
 
 <style lang="scss">
diff --git a/apps/cMiniApp/src/pages/home/index.vue b/apps/cMiniApp/src/pages/home/index.vue
index e8739cf..a627853 100644
--- a/apps/cMiniApp/src/pages/home/index.vue
+++ b/apps/cMiniApp/src/pages/home/index.vue
@@ -46,6 +46,7 @@
             <HomeQueryMenuView
               v-model:gender="queryState.gender"
               @close="handleMenuSelectClose"
+              @reset="handleMenuSelectReset"
             ></HomeQueryMenuView>
           </MenuItem>
         </Menu>
@@ -79,7 +80,8 @@
 
 const userStore = useUserStore();
 
-const { searchValue, queryState, handleSearch, infiniteLoadingProps } = useTaskList();
+const { searchValue, queryState, handleSearch, infiniteLoadingProps, DefaultQueryState } =
+  useTaskList();
 
 function goCitySelect() {
   Taro.navigateTo({
@@ -99,6 +101,9 @@
 function handleMenuSelectClose() {
   selectItem.value?.toggle?.();
 }
+function handleMenuSelectReset() {
+  Object.assign(queryState, { ...DefaultQueryState });
+}
 
 function goTaskDetail(item: API.FrontOrderList) {
   Taro.navigateTo({
diff --git a/apps/cMiniApp/src/styles/nut.scss b/apps/cMiniApp/src/styles/nut.scss
index 0c1480f..ee5295d 100644
--- a/apps/cMiniApp/src/styles/nut.scss
+++ b/apps/cMiniApp/src/styles/nut.scss
@@ -104,6 +104,10 @@
       .nut-form-item__label {
         margin-right: 0;
       }
+
+      .nut-form-item__body {
+        width: 100%;
+      }
     }
   }
 
diff --git a/apps/cMiniApp/src/subpackages/curriculum/expectPosition/InnerPage.vue b/apps/cMiniApp/src/subpackages/curriculum/expectPosition/InnerPage.vue
index 77f18e3..ca2afc3 100644
--- a/apps/cMiniApp/src/subpackages/curriculum/expectPosition/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/curriculum/expectPosition/InnerPage.vue
@@ -1,13 +1,92 @@
 <template>
-  <div>InnerPage</div>
+  <ContentView :paddingH="false" class="expect-position-view">
+    <PositionSelectView v-model="positionList" />
+  </ContentView>
+  <PageFooter>
+    <div class="expect-position-page-footer">
+      <div class="expect-position-select-wrapper" v-if="positionList.length > 0">
+        <div class="expect-position-select-item" v-for="(item, index) in positionList" :key="index">
+          <div class="expect-position-select-item-text">{{ item }}</div>
+          <div class="expect-position-select-item-icon-wrapper">
+            <Close :size="8" class="expect-position-select-item-icon" />
+          </div>
+        </div>
+      </div>
+      <PageFooterBtn type="primary">淇濆瓨</PageFooterBtn>
+    </div>
+  </PageFooter>
 </template>
 
 <script setup lang="ts">
+import { PositionSelectView } from '@12333/components';
+import { Close } from '@nutui/icons-vue-taro';
+import { size } from 'lodash';
+
 defineOptions({
   name: 'InnerPage',
 });
+
+const positionList = ref([]);
 </script>
 
 <style lang="scss">
 @import '@/styles/common.scss';
+
+.expectPosition-page-wrapper {
+  .expect-position-view {
+    flex: 1;
+    min-height: 0;
+
+    .nut-category {
+      height: 100%;
+    }
+  }
+
+  .expect-position-page-footer {
+    width: 100%;
+    padding: 0 boleGetCssVar('size', 'body-padding-h');
+
+    .page-footer-btn {
+      margin: 0;
+      width: 100%;
+    }
+
+    .expect-position-select-wrapper {
+      display: flex;
+      flex-wrap: wrap;
+      margin-bottom: 40px;
+      column-gap: 16px;
+      row-gap: 24px;
+      padding-top: 24px;
+
+      .expect-position-select-item {
+        display: flex;
+        align-items: center;
+        padding: 0 28px;
+        height: 64px;
+        border-radius: 32px;
+        background-color: #f6faff;
+
+        .expect-position-select-item-text {
+          font-weight: 400;
+          font-size: 24px;
+          color: #536077;
+          line-height: 24px;
+        }
+
+        .expect-position-select-item-icon-wrapper {
+          padding: 8px;
+          padding-right: 0;
+          padding-left: 30px;
+          display: flex;
+          align-items: center;
+        }
+
+        .expect-position-select-item-icon {
+          color: boleGetCssVar('text-color', 'secondary');
+        }
+      }
+    }
+  }
+}
 </style>
diff --git a/apps/cMiniApp/src/subpackages/curriculum/expectPosition/expectPosition.vue b/apps/cMiniApp/src/subpackages/curriculum/expectPosition/expectPosition.vue
index 872be0a..154b29d 100644
--- a/apps/cMiniApp/src/subpackages/curriculum/expectPosition/expectPosition.vue
+++ b/apps/cMiniApp/src/subpackages/curriculum/expectPosition/expectPosition.vue
@@ -1,5 +1,5 @@
 <template>
-  <PageLayout class="expectPosition-page-wrapper" :title="'鏈熸湜宀椾綅'">
+  <PageLayout class="expectPosition-page-wrapper" :title="'鏈熸湜宀椾綅'" has-border>
     <InnerPage></InnerPage>
   </PageLayout>
 </template>
diff --git a/apps/cMiniApp/src/subpackages/curriculum/mineCurriculumVitae/InnerPage.vue b/apps/cMiniApp/src/subpackages/curriculum/mineCurriculumVitae/InnerPage.vue
index 2b59940..629cb78 100644
--- a/apps/cMiniApp/src/subpackages/curriculum/mineCurriculumVitae/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/curriculum/mineCurriculumVitae/InnerPage.vue
@@ -47,12 +47,7 @@
         </div>
         <MineAgreementSignDetailItem label="鏈熸湜宀椾綅" class="mine-curriculum-intention-job">
           <template #detail>
-            <div class="mine-curriculum-intention-job-content">
-              <div class="mine-curriculum-intention-job-item">瀹㈡埧鏈嶅姟鍛�</div>
-              <div class="mine-curriculum-intention-job-item">瀹㈡埧鏈嶅姟鍛�</div>
-              <div class="mine-curriculum-intention-job-item">瀹㈡埧鏈嶅姟鍛�</div>
-              <div class="mine-curriculum-intention-job-item">瀹㈡埧鏈嶅姟鍛�</div>
-            </div>
+            <JobTagList />
           </template>
         </MineAgreementSignDetailItem>
         <MineAgreementSignDetailItem label="绌洪棽鏃堕棿">
@@ -94,7 +89,7 @@
 import { useUserStore } from '@/stores/modules/user';
 import { useIsLogin } from '@/hooks';
 import MineAgreementSignDetailItem from '../../mine/mineAgreementSignDetail/MineAgreementSignDetailItem.vue';
-import { List, ListItem } from '@12333/components';
+import { List, ListItem, JobTagList } from '@12333/components';
 import { RouterPath } from '@/constants';
 import IconArrow from '@/assets/setting/icon-arrow.png';
 import IconAuth from '@/assets/mine/icon-auth.png';
diff --git a/apps/cMiniApp/src/subpackages/curriculum/mineJobIntention/InnerPage.vue b/apps/cMiniApp/src/subpackages/curriculum/mineJobIntention/InnerPage.vue
index 2420203..d123c03 100644
--- a/apps/cMiniApp/src/subpackages/curriculum/mineJobIntention/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/curriculum/mineJobIntention/InnerPage.vue
@@ -2,11 +2,14 @@
   <ContentScrollView :paddingH="false">
     <nut-form :model-value="form" ref="formRef" :rules="rules">
       <nut-form-item label="鏈熸湜宀椾綅:" class="bole-form-item" prop="job" label-position="top">
-        <ChooseInputWithPicker
+        <!-- <ChooseInputWithPicker
           v-model="form.job"
           placeholder="璇烽�夋嫨鏈熸湜宀椾綅"
           :value-enum="TaskStatusText"
-        />
+        /> -->
+        <CommonInputField class="job-common-input-field" @click="goExpectPosition">
+          <JobTagList />
+        </CommonInputField>
       </nut-form-item>
       <nut-form-item label="绌洪棽鏃堕棿:" class="bole-form-item" prop="job">
         <ChooseInputWithPicker
@@ -31,9 +34,10 @@
 
 <script setup lang="ts">
 import { FormRules } from '@nutui/nutui-taro/dist/types/__VUE/form/types';
-import { ChooseInputWithPicker } from '@12333/components';
+import { ChooseInputWithPicker, JobTagList, CommonInputField } from '@12333/components';
 import { TaskStatusText, TaskStatus } from '@/constants';
 import { useUser } from '@/hooks';
+import Taro from '@tarojs/taro';
 
 defineOptions({
   name: 'InnerPage',
@@ -59,8 +63,22 @@
 }
 
 function confirm() {}
+
+function goExpectPosition() {
+  Taro.navigateTo({
+    url: `${RouterPath.expectPosition}`,
+  });
+}
 </script>
 
 <style lang="scss">
 @import '@/styles/common.scss';
+
+.mineJobIntention-page-wrapper {
+  .job-common-input-field {
+    .common-input-field-icon {
+      margin-top: 13px;
+    }
+  }
+}
 </style>
diff --git a/apps/cMiniApp/src/subpackages/task/taskDetail/InnerPage.vue b/apps/cMiniApp/src/subpackages/task/taskDetail/InnerPage.vue
index 2226d4f..7b64f7d 100644
--- a/apps/cMiniApp/src/subpackages/task/taskDetail/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/task/taskDetail/InnerPage.vue
@@ -76,7 +76,7 @@
         openType="share"
       ></PageFooterAction>
       <PageFooterAction :icon="IconPhone" text="鎵嬫満" :isFlex="false"></PageFooterAction>
-      <PageFooterBtn type="primary">鎶ュ悕</PageFooterBtn>
+      <PageFooterBtn type="primary">鎶ュ悕锛�5浜哄凡鎶ュ悕锛�</PageFooterBtn>
     </PageFooter>
   </LoadingLayout>
 </template>
diff --git a/packages/components/src/AreaTreeSelect/PositionSelectView.vue b/packages/components/src/AreaTreeSelect/PositionSelectView.vue
new file mode 100644
index 0000000..048754e
--- /dev/null
+++ b/packages/components/src/AreaTreeSelect/PositionSelectView.vue
@@ -0,0 +1,78 @@
+<template>
+  <Category :category="provinceList" @change="change" class="position-select-view">
+    <CategoryPane :max="max" :categoryChild="categoryChild" :multiple="multiple" v-model="model">
+    </CategoryPane>
+  </Category>
+</template>
+
+<script setup lang="ts">
+import { useAllAreaList } from '@12333/hooks';
+import Category from './Category.vue';
+import CategoryPane from './CategoryPane.vue';
+import { reactive, computed, watch } from 'vue';
+
+defineOptions({
+  name: 'PositionSelectView',
+});
+
+type Props = {
+  multiple?: boolean;
+  max?: number;
+};
+
+const props = withDefaults(defineProps<Props>(), {
+  multiple: true,
+});
+
+const model = defineModel<number[]>();
+
+const state = reactive({
+  provinceIndex: 0,
+});
+
+const { areaTreeList } = useAllAreaList();
+
+const provinceList = computed(() => areaTreeList.value.map((x) => ({ ...x, name: x.areaName })));
+
+const categoryChild = computed(() => {
+  if (!provinceList.value.length) {
+    return [];
+  }
+  return provinceList.value[state.provinceIndex].children.map((x) => ({
+    ...x,
+    name: x.areaName,
+    value: x.areaCode,
+  }));
+});
+
+const change = (index: number) => {
+  state.provinceIndex = index;
+};
+</script>
+
+<style lang="scss">
+@import '@/styles/common.scss';
+
+.position-select-view {
+  .nut-category__cateList {
+    height: 100%;
+
+    & > .h5-div {
+      height: 100%;
+      overflow-y: auto;
+    }
+
+    .nut-category__cateList-scroll {
+      height: 100%;
+      width: auto;
+    }
+  }
+
+  .nut-category-pane {
+    height: 100%;
+    overflow-y: auto;
+    flex: 1;
+    min-width: 0;
+  }
+}
+</style>
diff --git a/packages/components/src/Input/CommonInputField.vue b/packages/components/src/Input/CommonInputField.vue
new file mode 100644
index 0000000..9b77dd2
--- /dev/null
+++ b/packages/components/src/Input/CommonInputField.vue
@@ -0,0 +1,39 @@
+<template>
+  <div class="common-input-field-wrapper">
+    <div class="common-input-field">
+      <slot></slot>
+    </div>
+    <RectRight :size="12" class="common-input-field-icon" />
+  </div>
+</template>
+
+<script setup lang="ts">
+import { RectRight } from '@nutui/icons-vue-taro';
+
+defineOptions({
+  name: 'CommonInputField',
+});
+
+// type Props = {};
+
+// const props = withDefaults(defineProps<Props>(), {});
+</script>
+
+<style lang="scss">
+@import '@/styles/common.scss';
+
+.common-input-field-wrapper {
+  display: flex;
+  width: 100%;
+
+  .common-input-field {
+    flex: 1;
+    min-width: 0;
+  }
+
+  .common-input-field-icon {
+    margin-left: 18px;
+    color: boleGetCssVar('text-color', 'primary');
+  }
+}
+</style>
diff --git a/packages/components/src/Menu/QueryMenuView.vue b/packages/components/src/Menu/QueryMenuView.vue
index 1d34000..8f161e3 100644
--- a/packages/components/src/Menu/QueryMenuView.vue
+++ b/packages/components/src/Menu/QueryMenuView.vue
@@ -10,7 +10,7 @@
           :color="Colors.Info"
           @click="handleCancel"
         >
-          鍙栨秷
+          {{ cancelText }}
         </nut-button>
         <nut-button shape="square" type="primary" @click="handleConfirm">纭</nut-button>
       </div>
@@ -25,12 +25,17 @@
   name: 'QueryMenuView',
 });
 
-// type Props = {};
+type Props = {
+  cancelText?: string;
+};
 
-// const props = withDefaults(defineProps<Props>(), {});
+const props = withDefaults(defineProps<Props>(), {
+  cancelText: '鍙栨秷',
+});
 
 const emit = defineEmits<{
   (e: 'close'): void;
+  (e: 'confirm'): void;
 }>();
 
 function handleCancel() {
@@ -38,7 +43,7 @@
 }
 
 function handleConfirm() {
-  emit('close');
+  emit('confirm');
 }
 </script>
 
diff --git a/packages/components/src/Tag/JobTagList.vue b/packages/components/src/Tag/JobTagList.vue
index a438ebd..c962b4c 100644
--- a/packages/components/src/Tag/JobTagList.vue
+++ b/packages/components/src/Tag/JobTagList.vue
@@ -4,6 +4,10 @@
     <div class="mine-curriculum-intention-job-item">瀹㈡埧鏈嶅姟鍛�</div>
     <div class="mine-curriculum-intention-job-item">瀹㈡埧鏈嶅姟鍛�</div>
     <div class="mine-curriculum-intention-job-item">瀹㈡埧鏈嶅姟鍛�</div>
+    <div class="mine-curriculum-intention-job-item">瀹㈡埧鏈嶅姟鍛�</div>
+    <div class="mine-curriculum-intention-job-item">瀹㈡埧鏈嶅姟鍛�</div>
+    <div class="mine-curriculum-intention-job-item">瀹㈡埧鏈嶅姟鍛�</div>
+    <div class="mine-curriculum-intention-job-item">瀹㈡埧鏈嶅姟鍛�</div>
   </div>
 </template>
 
@@ -19,4 +23,21 @@
 
 <style lang="scss">
 @import '@/styles/common.scss';
+
+.mine-curriculum-intention-job-content {
+  display: inline-flex;
+  flex-wrap: wrap;
+  gap: 16px;
+
+  .mine-curriculum-intention-job-item {
+    font-size: 20px;
+    color: boleGetCssVar('color', 'primary');
+    padding: 6px 16px;
+    background-color: #edf2ff;
+    border-radius: 4px;
+    display: inline-flex;
+    align-items: center;
+    justify-content: center;
+  }
+}
 </style>
diff --git a/packages/components/src/index.ts b/packages/components/src/index.ts
index 1de1c75..5d66333 100644
--- a/packages/components/src/index.ts
+++ b/packages/components/src/index.ts
@@ -26,3 +26,6 @@
 export { default as QueryMenuItem } from './Menu/QueryMenuItem.vue';
 export { default as ProRadio } from './Form/ProRadio.vue';
 export { default as Calendar } from './Calendar/Calendar.vue';
+export { default as JobTagList } from './Tag/JobTagList.vue';
+export { default as CommonInputField } from './Input/CommonInputField.vue';
+export { default as PositionSelectView } from './AreaTreeSelect/PositionSelectView.vue';

--
Gitblit v1.9.1