From 98bc9c89f7ef814b13bec06fa7b2737a3b51a44e Mon Sep 17 00:00:00 2001 From: zhengyiming <540361168@qq.com> Date: 星期四, 13 二月 2025 13:57:15 +0800 Subject: [PATCH] fix: task --- apps/cMiniApp/src/subpackages/curriculum/mineJobIntention/mineJobIntention.vue | 2 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 | 27 ---- 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 + 17 files changed, 296 insertions(+), 39 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 9d00f77..9ac70ee 100644 --- a/apps/cMiniApp/src/subpackages/curriculum/mineCurriculumVitae/InnerPage.vue +++ b/apps/cMiniApp/src/subpackages/curriculum/mineCurriculumVitae/InnerPage.vue @@ -46,12 +46,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="绌洪棽鏃堕棿"> @@ -93,7 +88,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'; @@ -241,24 +236,6 @@ .mine-curriculum-intention-job { align-items: flex-start; - - .mine-curriculum-intention-job-content { - display: inline-flex; - flex-wrap: wrap; - - .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; - margin-right: 16px; - margin-bottom: 14px; - } - } } .mine-curriculum-intention-bold { 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/curriculum/mineJobIntention/mineJobIntention.vue b/apps/cMiniApp/src/subpackages/curriculum/mineJobIntention/mineJobIntention.vue index 4e3feed..6c488c8 100644 --- a/apps/cMiniApp/src/subpackages/curriculum/mineJobIntention/mineJobIntention.vue +++ b/apps/cMiniApp/src/subpackages/curriculum/mineJobIntention/mineJobIntention.vue @@ -1,5 +1,5 @@ <template> - <PageLayout class="index-page-wrapper" :title="'姹傝亴鎰忓悜'" has-border> + <PageLayout class="mineJobIntention-page-wrapper" :title="'姹傝亴鎰忓悜'" has-border> <InnerPage></InnerPage> </PageLayout> </template> 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