From 1bbd7061dac79cacf5513234a04cac8ba0be5c6f Mon Sep 17 00:00:00 2001 From: wupengfei <834520024@qq.com> Date: 星期五, 21 三月 2025 09:15:36 +0800 Subject: [PATCH] feat: 接口对接 --- packages/components/src/AreaTreeSelect/PositionSelectView.vue | 26 +- packages/constants/index.ts | 1 packages/constants/task.ts | 52 ++++ apps/bMiniApp/src/subpackages/task/taskManage/InnerPage.vue | 2 apps/cMiniApp/src/subpackages/curriculum/editMineInfo/InnerPage.vue | 91 ++++++- packages/components/src/Tag/JobTagList.vue | 17 apps/bMiniApp/src/subpackages/jobApplicationManage/components/SignList.vue | 2 apps/bMiniApp/src/subpackages/task/components/TaskCheckCard.vue | 5 packages/hooks/area.ts | 13 + apps/bMiniApp/src/subpackages/task/publishTask/InnerPage.vue | 4 packages/services/api/index.ts | 2 apps/cMiniApp/src/subpackages/curriculum/expectPosition/InnerPage.vue | 46 +++ apps/cMiniApp/src/pages/home/HomeQueryMenuView.vue | 15 + apps/bMiniApp/src/subpackages/flexJob/flexJobDetailFromTask/InnerPage.vue | 2 apps/cMiniApp/src/subpackages/curriculum/mineJobIntention/InnerPage.vue | 110 ++++++++- apps/cMiniApp/project.private.config.json | 7 apps/bMiniApp/tsconfig.json | 3 apps/cMiniApp/src/subpackages/curriculum/mineCurriculumVitae/InnerPage.vue | 55 ++++ packages/services/api/UserResume.ts | 16 + packages/components/src/AreaTreeSelect/CategoryPane.vue | 6 packages/services/api/FlexEnterpriseWoker.ts | 54 ++++ packages/services/api/typings.d.ts | 115 ++++++++++ packages/utils/area.ts | 10 apps/bMiniApp/src/subpackages/flexJobManage/flexJobManage/InnerPage.vue | 2 apps/bMiniApp/src/subpackages/jobApplicationManage/jobApplicationManage/InnerPage.vue | 2 apps/bMiniApp/src/subpackages/jobApplicationManage/components/JobDetail.vue | 2 26 files changed, 556 insertions(+), 104 deletions(-) diff --git a/apps/bMiniApp/src/subpackages/flexJob/flexJobDetailFromTask/InnerPage.vue b/apps/bMiniApp/src/subpackages/flexJob/flexJobDetailFromTask/InnerPage.vue index 2cc644d..d42c8da 100644 --- a/apps/bMiniApp/src/subpackages/flexJob/flexJobDetailFromTask/InnerPage.vue +++ b/apps/bMiniApp/src/subpackages/flexJob/flexJobDetailFromTask/InnerPage.vue @@ -21,7 +21,7 @@ import { useQuery } from '@tanstack/vue-query'; import * as flexWorkerServices from '@12333/services/api/FlexWorker'; import { Message } from '@12333/utils'; -import { FlexTaskWorkerHireEnum } from '@/constants/task'; +import { FlexTaskWorkerHireEnum } from '@12333/constants/task'; defineOptions({ name: 'InnerPage', diff --git a/apps/bMiniApp/src/subpackages/flexJobManage/flexJobManage/InnerPage.vue b/apps/bMiniApp/src/subpackages/flexJobManage/flexJobManage/InnerPage.vue index b52155b..29401b3 100644 --- a/apps/bMiniApp/src/subpackages/flexJobManage/flexJobManage/InnerPage.vue +++ b/apps/bMiniApp/src/subpackages/flexJobManage/flexJobManage/InnerPage.vue @@ -43,7 +43,7 @@ import { useInfiniteLoading } from '@12333/hooks'; import { OrderInputType } from '@12333/constants'; import * as flexWorkerServices from '@12333/services/api/FlexWorker'; -import { FlexWorkerEleSignEnum } from '@/constants/task'; +import { FlexWorkerEleSignEnum } from '@12333/constants/task'; import Taro from '@tarojs/taro'; defineOptions({ diff --git a/apps/bMiniApp/src/subpackages/jobApplicationManage/components/JobDetail.vue b/apps/bMiniApp/src/subpackages/jobApplicationManage/components/JobDetail.vue index 9caeaae..6a0d095 100644 --- a/apps/bMiniApp/src/subpackages/jobApplicationManage/components/JobDetail.vue +++ b/apps/bMiniApp/src/subpackages/jobApplicationManage/components/JobDetail.vue @@ -50,7 +50,7 @@ import * as flexWorkerServices from '@12333/services/api/FlexWorker'; import IconLocaltion from '@/assets/flexJob/icon-localtion.png'; import { TaskPrice, TaskDetailWelfareItem } from '@12333/components'; -import { SalaryTimeTypeEnumUnit, FlexTaskSettleTypeEnumText } from '@/constants/task'; +import { SalaryTimeTypeEnumUnit, FlexTaskSettleTypeEnumText } from '@12333/constants/task'; import dayjs from 'dayjs'; import { setOSSLink } from '@12333/utils'; import { RectRight } from '@nutui/icons-vue-taro'; diff --git a/apps/bMiniApp/src/subpackages/jobApplicationManage/components/SignList.vue b/apps/bMiniApp/src/subpackages/jobApplicationManage/components/SignList.vue index 10c56b0..0bd03d2 100644 --- a/apps/bMiniApp/src/subpackages/jobApplicationManage/components/SignList.vue +++ b/apps/bMiniApp/src/subpackages/jobApplicationManage/components/SignList.vue @@ -21,7 +21,7 @@ <script setup lang="ts"> import { OrderInputType } from '@12333/constants'; import { RouterPath } from '@/constants'; -import { FlexTaskWorkerHireEnum } from '@/constants/task'; +import { FlexTaskWorkerHireEnum } from '@12333/constants/task'; import { useInfiniteLoading } from '@12333/hooks'; import * as flexWorkerServices from '@12333/services/api/FlexWorker'; import { FlexJobCard } from '@12333/components'; diff --git a/apps/bMiniApp/src/subpackages/jobApplicationManage/jobApplicationManage/InnerPage.vue b/apps/bMiniApp/src/subpackages/jobApplicationManage/jobApplicationManage/InnerPage.vue index 1340552..a29d411 100644 --- a/apps/bMiniApp/src/subpackages/jobApplicationManage/jobApplicationManage/InnerPage.vue +++ b/apps/bMiniApp/src/subpackages/jobApplicationManage/jobApplicationManage/InnerPage.vue @@ -56,7 +56,7 @@ FlexTaskReleaseStatusEnum, FlexTaskReleaseStatusEnumText, SalaryTimeTypeEnumUnit, -} from '@/constants/task'; +} from '@12333/constants/task'; import * as flexWorkerServices from '@12333/services/api/FlexWorker'; import Taro from '@tarojs/taro'; import { Message } from '@12333/utils'; diff --git a/apps/bMiniApp/src/subpackages/task/components/TaskCheckCard.vue b/apps/bMiniApp/src/subpackages/task/components/TaskCheckCard.vue index d95e866..5334987 100644 --- a/apps/bMiniApp/src/subpackages/task/components/TaskCheckCard.vue +++ b/apps/bMiniApp/src/subpackages/task/components/TaskCheckCard.vue @@ -26,7 +26,10 @@ <script setup lang="ts"> import TaskCheckPersonalView from './TaskCheckPersonalView.vue'; import { Colors, Gender } from '@12333/constants'; -import { FlexTaskCheckAcceptStatusEnum, FlexTaskCheckAcceptStatusEnumText } from '@/constants/task'; +import { + FlexTaskCheckAcceptStatusEnum, + FlexTaskCheckAcceptStatusEnumText, +} from '@12333/constants/task'; defineOptions({ name: 'TaskCheckCard', diff --git a/apps/bMiniApp/src/subpackages/task/publishTask/InnerPage.vue b/apps/bMiniApp/src/subpackages/task/publishTask/InnerPage.vue index 738ce69..269f389 100644 --- a/apps/bMiniApp/src/subpackages/task/publishTask/InnerPage.vue +++ b/apps/bMiniApp/src/subpackages/task/publishTask/InnerPage.vue @@ -122,14 +122,14 @@ </template> <script setup lang="ts"> +import { useUser } from '@/hooks'; import { FlexTaskSettleTypeEnum, FlexTaskSettleTypeEnumText, FlexTaskFeeTypeEnum, FlexTaskFeeTypeEnumText, SalaryTimeTypeEnumUnit, -} from '@/constants/task'; -import { useUser } from '@/hooks'; +} from '@12333/constants'; import { ChooseInputWithPicker, ChooseInputWithDatePicker, diff --git a/apps/bMiniApp/src/subpackages/task/taskManage/InnerPage.vue b/apps/bMiniApp/src/subpackages/task/taskManage/InnerPage.vue index 9c049a0..dd4535c 100644 --- a/apps/bMiniApp/src/subpackages/task/taskManage/InnerPage.vue +++ b/apps/bMiniApp/src/subpackages/task/taskManage/InnerPage.vue @@ -52,7 +52,7 @@ import { useInfiniteLoading } from '@12333/hooks'; import { OrderInputType, Colors } from '@12333/constants'; import * as flexWorkerServices from '@12333/services/api/FlexWorker'; -import { SalaryTimeTypeEnumUnit } from '@/constants/task'; +import { SalaryTimeTypeEnumUnit } from '@12333/constants/task'; defineOptions({ name: 'InnerPage', diff --git a/apps/bMiniApp/tsconfig.json b/apps/bMiniApp/tsconfig.json index 231b16a..dfb771d 100644 --- a/apps/bMiniApp/tsconfig.json +++ b/apps/bMiniApp/tsconfig.json @@ -21,7 +21,8 @@ "./types/**/*.d.ts", "./components.d.ts", "./auto-imports.d.ts", - "../../types/api.d.ts" + "../../types/api.d.ts", + "../../packages/constants/task.ts" ], "exclude": ["node_modules", "dist"], "references": [ diff --git a/apps/cMiniApp/project.private.config.json b/apps/cMiniApp/project.private.config.json index 73439be..9961598 100644 --- a/apps/cMiniApp/project.private.config.json +++ b/apps/cMiniApp/project.private.config.json @@ -56,13 +56,6 @@ "query": "", "launchMode": "default", "scene": null - }, - { - "name": "", - "pathName": "subpackages/mine/mineCertificateAddOrEdit/mineCertificateAddOrEdit", - "query": "", - "launchMode": "default", - "scene": null } ] } diff --git a/apps/cMiniApp/src/pages/home/HomeQueryMenuView.vue b/apps/cMiniApp/src/pages/home/HomeQueryMenuView.vue index 26a6979..20ce0a2 100644 --- a/apps/cMiniApp/src/pages/home/HomeQueryMenuView.vue +++ b/apps/cMiniApp/src/pages/home/HomeQueryMenuView.vue @@ -2,10 +2,14 @@ <QueryMenuView @close="handleReset" @confirm="emit('close')" cancelText="閲嶇疆"> <div class="home-query-menu-view"> <QueryMenuItem title="缁撶畻鏂瑰紡"> - <ProRadio v-model="query.gender" :value-enum="GenderText" show-all-btn></ProRadio> + <ProRadio + v-model="query.gender" + :value-enum="FlexTaskSettleTypeEnumText" + show-all-btn + ></ProRadio> </QueryMenuItem> <QueryMenuItem title="鍛樺伐绂忓埄"> - <ProRadio v-model="query.gender" :value-enum="GenderText" show-all-btn></ProRadio> + <ProRadio v-model="query.gender" :value-enum="WelfareList" show-all-btn></ProRadio> </QueryMenuItem> <QueryMenuItem title="鎬у埆瑕佹眰"> <ProRadio v-model="query.gender" :value-enum="GenderText" show-all-btn></ProRadio> @@ -16,7 +20,8 @@ <script setup lang="ts"> import { QueryMenuView, QueryMenuItem, ProRadio } from '@12333/components'; -import { GenderText } from '@12333/constants'; +import { GenderText, SearchType, FlexTaskSettleTypeEnumText } from '@12333/constants'; +import { useSearchSettingType } from '@12333/hooks'; defineOptions({ name: 'HomeQueryMenuView', @@ -26,6 +31,10 @@ // const props = withDefaults(defineProps<Props>(), {}); +const { searchSettingTypeList: WelfareList } = useSearchSettingType({ + searchType: SearchType.Welfare, +}); + const emit = defineEmits<{ (e: 'reset'): void; (e: 'close'): void; diff --git a/apps/cMiniApp/src/subpackages/curriculum/editMineInfo/InnerPage.vue b/apps/cMiniApp/src/subpackages/curriculum/editMineInfo/InnerPage.vue index cfccdcb..9bf9b84 100644 --- a/apps/cMiniApp/src/subpackages/curriculum/editMineInfo/InnerPage.vue +++ b/apps/cMiniApp/src/subpackages/curriculum/editMineInfo/InnerPage.vue @@ -7,8 +7,8 @@ <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="鎵嬫満鍙�:" class="bole-form-item" prop="phone" required> - <nut-input v-model.trim="form.phone" placeholder="璇疯緭鍏ユ墜鏈哄彿" type="text" /> + <nut-form-item label="鎵嬫満鍙�:" class="bole-form-item" prop="phoneNumber" required> + <nut-input v-model.trim="form.phoneNumber" placeholder="璇疯緭鍏ユ墜鏈哄彿" type="text" /> </nut-form-item> <nut-form-item label="韬唤:" class="bole-form-item" prop="socialIdentity"> <ChooseInputWithPicker @@ -24,12 +24,12 @@ :value-enum="EducationTypeList" /> </nut-form-item> - <nut-form-item label="甯搁┗鍩庡競:" class="bole-form-item" prop="gender"> - <ChooseInputWithPicker - v-model="form.gender" + <nut-form-item label="甯搁┗鍩庡競:" class="bole-form-item" prop="areaList"> + <ChooseInputWithAreaPicker + :columns="cityAreaTree" + v-model="form.areaList" placeholder="璇烽�夋嫨甯搁┗鍩庡競" - :value-enum="TaskStatusText" - /> + ></ChooseInputWithAreaPicker> </nut-form-item> </nut-form> </ContentScrollView> @@ -40,12 +40,14 @@ <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 { convertApi2FormUrlOnlyOne } from '@12333/utils'; -import { useUser } from '@/hooks'; -import { useSearchSettingType } from '@12333/hooks'; -import { SearchType } from '@12333/constants'; +import { ChooseInputWithPicker, ChooseInputWithAreaPicker } from '@12333/components'; +import { TaskStatusText } from '@/constants'; +import { convertApi2FormUrlOnlyOne, Message, setOSSLink } from '@12333/utils'; +import { useAllAreaList, useArea, useSearchSettingType } from '@12333/hooks'; +import { Gender, SearchType } from '@12333/constants'; +import * as userResumeServices from '@12333/services/api/userResume'; +import Taro from '@tarojs/taro'; +import { useQuery } from '@tanstack/vue-query'; defineOptions({ name: 'InnerPage', @@ -58,18 +60,44 @@ searchType: SearchType.Identity, }); +const { findAreaNameFromCode, cityAreaTree } = useAllAreaList(); + const form = reactive({ - // avatarUrl: convertApi2FormUrlOnlyOne(userDetail.value?.originalAvatarUrl), + avatarUrl: [], name: '', - phone: '', - gender: TaskStatus.All, + phoneNumber: '', + gender: Gender.Male, socialIdentity: '', educationalLevel: '', areaList: [] as number[], }); +const { + isLoading, + isError, + data: detail, + refetch, +} = useQuery({ + queryKey: ['userResumeServices/getUserResumeBaseInfo'], + queryFn: async () => { + return await userResumeServices.getUserResumeBaseInfo({ + showLoading: false, + }); + }, + placeholderData: () => ({} as API.UserResumeBaseInfoOutput), + onSuccess(data) { + form.avatarUrl = convertApi2FormUrlOnlyOne(setOSSLink(data.avatarUrl)); + form.name = data.name; + form.phoneNumber = data.phoneNumber; + form.gender = data.genderType; + form.socialIdentity = data.socialIdentity; + form.educationalLevel = data.educationalLevel; + form.areaList = [data.residentProvinceCode, data.residentCityCode]; + }, +}); + const rules = reactive<FormRules>({ - phone: [{ required: true, message: '璇疯緭鍏ユ墜鏈哄彿' }], + phoneNumber: [{ required: true, message: '璇疯緭鍏ユ墜鏈哄彿' }], socialIdentity: [{ required: true, message: '璇烽�夋嫨韬唤' }], educationalLevel: [{ required: true, message: '璇烽�夋嫨瀛﹀巻' }], areaList: [{ required: true, message: '璇烽�夋嫨甯搁┗鍩庡競' }], @@ -84,7 +112,34 @@ }); } -function confirm() {} +async function confirm() { + try { + let params: API.SaveUserResumeBaseInfoInput = { + name: form.name, + avatarUrl: form.avatarUrl[0]?.path, + phoneNumber: form.phoneNumber, + educationalLevel: form.educationalLevel, + socialIdentity: form.socialIdentity, + residentProvinceCode: form.areaList[0], + residentProvinceName: findAreaNameFromCode(form.areaList[0]), + residentCityCode: form.areaList[1], + residentCityName: findAreaNameFromCode(form.areaList[1]), + }; + let res = await userResumeServices.saveUserResumeBaseInfo(params); + if (res) { + Message.success('淇濆瓨鎴愬姛', { + onClosed() { + Taro.navigateTo({ + url: `${RouterPath.mineCurriculumVitae}`, + success: function (res) { + res.eventChannel.emit('updateResume', { content: true }); + }, + }); + }, + }); + } + } catch (error) {} +} </script> <style lang="scss"> diff --git a/apps/cMiniApp/src/subpackages/curriculum/expectPosition/InnerPage.vue b/apps/cMiniApp/src/subpackages/curriculum/expectPosition/InnerPage.vue index ca2afc3..71a124b 100644 --- a/apps/cMiniApp/src/subpackages/curriculum/expectPosition/InnerPage.vue +++ b/apps/cMiniApp/src/subpackages/curriculum/expectPosition/InnerPage.vue @@ -4,29 +4,65 @@ </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-wrapper" v-if="checkdList.length > 0"> + <div class="expect-position-select-item" v-for="(item, index) in checkdList" :key="index"> + <div class="expect-position-select-item-text">{{ item.name }}</div> <div class="expect-position-select-item-icon-wrapper"> - <Close :size="8" class="expect-position-select-item-icon" /> + <Close + :size="8" + class="expect-position-select-item-icon" + @click="handleDelete(item.id)" + /> </div> </div> </div> - <PageFooterBtn type="primary">淇濆瓨</PageFooterBtn> + <PageFooterBtn type="primary" @click="handleConfirm">淇濆瓨</PageFooterBtn> </div> </PageFooter> </template> <script setup lang="ts"> import { PositionSelectView } from '@12333/components'; +import { SearchType } from '@12333/constants'; +import { useSearchSettingType } from '@12333/hooks'; import { Close } from '@nutui/icons-vue-taro'; +import Taro from '@tarojs/taro'; import { size } from 'lodash'; +import { useEvent, useEventChannel } from 'senin-mini/hooks'; defineOptions({ name: 'InnerPage', }); +const eventChannel = useEventChannel(); + +useEvent('updatePosition', function (data: { content: string[] }) { + if (data.content.length) { + positionList.value = [...data.content]; + } +}); + const positionList = ref([]); + +const { searchSettingTypeList: position } = useSearchSettingType({ + searchType: SearchType.Position, +}); + +const checkdList = computed(() => { + if (!positionList.value.length) return []; + return position.value.filter((x) => positionList.value.includes(x.id)); +}); + +function handleDelete(id: string) { + positionList.value = positionList.value.filter((x) => x !== id); +} + +function handleConfirm() { + eventChannel.emit('addPosition', { + content: positionList.value, + }); + Taro.navigateBack({ delta: 1 }); +} </script> <style lang="scss"> diff --git a/apps/cMiniApp/src/subpackages/curriculum/mineCurriculumVitae/InnerPage.vue b/apps/cMiniApp/src/subpackages/curriculum/mineCurriculumVitae/InnerPage.vue index 77d25d5..c8b000e 100644 --- a/apps/cMiniApp/src/subpackages/curriculum/mineCurriculumVitae/InnerPage.vue +++ b/apps/cMiniApp/src/subpackages/curriculum/mineCurriculumVitae/InnerPage.vue @@ -8,16 +8,24 @@ class="mine-curriculum-noticebar" /> <div class="mine-curriculum-info-wrapper"> - <UserAvatar :size="60" class="mine-curriculum-avatar" /> + <Avatar + :size="60" + class="mine-curriculum-avatar" + :src="setOSSLink(detail?.resumeBaseInfo?.avatarUrl ?? '')" + ></Avatar> <div class="mine-curriculum-info-content"> <div class="mine-curriculum-info-item"> <div class="mine-curriculum-info-item-left"> <div class="mine-curriculum-info-item-name"> - {{ userStore.userDetail?.userName ?? '' }} + {{ detail?.resumeBaseInfo?.name ?? '' }} </div> <div class="mine-curriculum-info-item-gender"> <div class="mine-curriculum-info-item-gender-dot">路</div> - <img v-if="1" :src="IconMale" class="mine-curriculum-info-item-gender-icon" /> + <img + v-if="detail?.resumeBaseInfo?.genderType === Gender.Male" + :src="IconMale" + class="mine-curriculum-info-item-gender-icon" + /> <img v-else :src="IconFemale" class="mine-curriculum-info-item-gender-icon" /> </div> </div> @@ -27,11 +35,13 @@ <div class="mine-curriculum-info-item-left"> <img :src="IconPhone" class="mine-curriculum-info-item-phone-icon" /> <div class="mine-curriculum-info-item-phone"> - {{ userStore.userDetail?.phoneNumber ?? '' }} + {{ detail?.resumeBaseInfo?.phoneNumber ?? '' }} </div> </div> <div class="mine-curriculum-info-item-detail"> - {{ '26宀� | 闈炲鐢� | 鏈' }} + {{ + `${detail?.resumeBaseInfo?.age}宀� | ${detail?.resumeBaseInfo?.socialIdentityName} | ${detail?.resumeBaseInfo?.educationalLevelName}` + }} </div> </div> </div> @@ -47,17 +57,23 @@ </div> <MineAgreementSignDetailItem label="鏈熸湜宀椾綅" class="mine-curriculum-intention-job"> <template #detail> - <JobTagList /> + <JobTagList :jobTagList="jobTag" /> </template> </MineAgreementSignDetailItem> <MineAgreementSignDetailItem label="绌洪棽鏃堕棿"> <template #detail> - <div class="mine-curriculum-intention-bold">涓嶉檺</div> + <div class="mine-curriculum-intention-bold"> + {{ UserResumeFreeTimeEnumText[detail?.resumeExpectationJob?.freeTime] }} + </div> </template> </MineAgreementSignDetailItem> <MineAgreementSignDetailItem label="姹傝亴鐘舵��"> <template #detail> - <div class="mine-curriculum-intention-bold">绉瀬鎵惧伐浣�</div> + <div class="mine-curriculum-intention-bold"> + {{ + UserResumeJobSeekingStatusEnumText[detail?.resumeExpectationJob?.jobSeekingStatus] + }} + </div> </template> </MineAgreementSignDetailItem> </div> @@ -89,7 +105,12 @@ import { useUserStore } from '@/stores/modules/user'; import { useIsLogin } from '@/hooks'; import MineAgreementSignDetailItem from '../../mine/mineAgreementSignDetail/MineAgreementSignDetailItem.vue'; -import { List, ListItem, JobTagList } from '@12333/components'; +import { List, ListItem, JobTagList, Avatar } from '@12333/components'; +import { + Gender, + UserResumeFreeTimeEnumText, + UserResumeJobSeekingStatusEnumText, +} from '@12333/constants'; import { RouterPath } from '@/constants'; import * as userResumeServices from '@12333/services/api/userResume'; import IconArrow from '@/assets/setting/icon-arrow.png'; @@ -99,6 +120,8 @@ import IconPhone from '@/assets/mine/icon-phone.png'; import Taro from '@tarojs/taro'; import { useQuery } from '@tanstack/vue-query'; +import { setOSSLink } from '@12333/utils'; +import { useEvent, useEventChannel } from 'senin-mini/hooks'; defineOptions({ name: 'InnerPage', @@ -110,6 +133,20 @@ const taskId = router.params?.taskId; +const eventChannel = useEventChannel(); + +useEvent('updateResume', function (data: { content: boolean }) { + if (data.content) { + refetch({ + type: 'inactive', + }); + } +}); + +const jobTag = computed( + () => detail?.value?.resumeExpectationJob?.jobIdList?.map((x) => x.name) ?? [] +); + const { isLoading, isError, diff --git a/apps/cMiniApp/src/subpackages/curriculum/mineJobIntention/InnerPage.vue b/apps/cMiniApp/src/subpackages/curriculum/mineJobIntention/InnerPage.vue index d123c03..d40cd5c 100644 --- a/apps/cMiniApp/src/subpackages/curriculum/mineJobIntention/InnerPage.vue +++ b/apps/cMiniApp/src/subpackages/curriculum/mineJobIntention/InnerPage.vue @@ -1,28 +1,23 @@ <template> <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 - v-model="form.job" - placeholder="璇烽�夋嫨鏈熸湜宀椾綅" - :value-enum="TaskStatusText" - /> --> + <nut-form-item label="鏈熸湜宀椾綅:" class="bole-form-item" prop="jobIdList" label-position="top"> <CommonInputField class="job-common-input-field" @click="goExpectPosition"> - <JobTagList /> + <JobTagList :jobTagList="jobTagList" /> </CommonInputField> </nut-form-item> - <nut-form-item label="绌洪棽鏃堕棿:" class="bole-form-item" prop="job"> + <nut-form-item label="绌洪棽鏃堕棿:" class="bole-form-item" prop="freeTime"> <ChooseInputWithPicker - v-model="form.job" + v-model="form.freeTime" placeholder="璇烽�夋嫨绌洪棽鏃堕棿" - :value-enum="TaskStatusText" + :value-enum="UserResumeFreeTimeEnumText" /> </nut-form-item> - <nut-form-item label="姹傝亴鐘舵��:" class="bole-form-item" prop="job"> + <nut-form-item label="姹傝亴鐘舵��:" class="bole-form-item" prop="jobSeekingStatus"> <ChooseInputWithPicker - v-model="form.job" + v-model="form.jobSeekingStatus" placeholder="璇烽�夋嫨姹傝亴鐘舵��" - :value-enum="TaskStatusText" + :value-enum="UserResumeJobSeekingStatusEnumText" /> </nut-form-item> </nut-form> @@ -35,22 +30,70 @@ <script setup lang="ts"> import { FormRules } from '@nutui/nutui-taro/dist/types/__VUE/form/types'; import { ChooseInputWithPicker, JobTagList, CommonInputField } from '@12333/components'; -import { TaskStatusText, TaskStatus } from '@/constants'; -import { useUser } from '@/hooks'; +import { + UserResumeFreeTimeEnumText, + UserResumeJobSeekingStatusEnumText, + UserResumeFreeTimeEnum, + UserResumeJobSeekingStatusEnum, + SearchType, +} from '@12333/constants'; import Taro from '@tarojs/taro'; +import * as userResumeServices from '@12333/services/api/userResume'; +import { useSearchSettingType } from '@12333/hooks'; +import { Message } from '@12333/utils'; +import { goBack } from '@/utils'; +import { useQuery } from '@tanstack/vue-query'; defineOptions({ name: 'InnerPage', }); -const { userDetail } = useUser(); +const { searchSettingTypeList: positionList } = useSearchSettingType({ + searchType: SearchType.Position, +}); + +const jobTagList = computed(() => { + return positionList.value?.filter((x) => form.jobIdList.includes(x.id)).map((x) => x.name) || []; +}); const form = reactive({ - job: TaskStatus.All, + jobIdList: [] as string[], + freeTime: UserResumeFreeTimeEnum.NoLimit, + jobSeekingStatus: UserResumeJobSeekingStatusEnum.Activing, +}); + +const { + isLoading, + isError, + data: detail, + refetch, +} = useQuery({ + queryKey: ['userResumeServices/getResumeExpectationJob'], + queryFn: async () => { + return await userResumeServices.getResumeExpectationJob({ + showLoading: false, + }); + }, + placeholderData: () => ({} as API.UserResumeExpectationJobOutput), + onSuccess(data) { + form.jobIdList = data.jobIdList.map((x) => x.id); + form.freeTime = data.freeTime; + form.jobSeekingStatus = data.jobSeekingStatus; + }, }); const rules = reactive<FormRules>({ - job: [{ required: true, message: '璇烽�夋嫨' }], + jobIdList: [ + { + required: true, + validator() { + if (form.jobIdList.length) return Promise.resolve(true); + return Promise.reject('璇烽�夋嫨鏈熸湜宀椾綅'); + }, + }, + ], + freeTime: [{ required: true, message: '璇烽�夋嫨绌洪棽鏃堕棿' }], + jobSeekingStatus: [{ required: true, message: '璇烽�夋嫨姹傝亴鐘舵��' }], }); const formRef = ref<any>(null); function handleConfirm() { @@ -62,11 +105,40 @@ }); } -function confirm() {} +async function confirm() { + try { + let params: API.SaveUserResumeExpectationJobInput = { + jobIdList: form.jobIdList, + freeTime: form.freeTime, + jobSeekingStatus: form.jobSeekingStatus, + }; + let res = await userResumeServices.saveUserResumeExpectationJob(params); + if (res) { + Message.success('淇濆瓨鎴愬姛', { + onClosed() { + Taro.navigateTo({ + url: `${RouterPath.mineCurriculumVitae}`, + success: function (res) { + res.eventChannel.emit('updateResume', { content: true }); + }, + }); + }, + }); + } + } catch (error) {} +} function goExpectPosition() { Taro.navigateTo({ url: `${RouterPath.expectPosition}`, + events: { + addPosition: function (data: { content: string[] }) { + form.jobIdList = data.content?.length ? data.content : []; + }, + }, + success: function (res) { + res.eventChannel.emit('updatePosition', { content: form.jobIdList }); + }, }); } </script> diff --git a/packages/components/src/AreaTreeSelect/CategoryPane.vue b/packages/components/src/AreaTreeSelect/CategoryPane.vue index e9862ab..11aee8c 100644 --- a/packages/components/src/AreaTreeSelect/CategoryPane.vue +++ b/packages/components/src/AreaTreeSelect/CategoryPane.vue @@ -3,10 +3,10 @@ <div class="nut-category-pane__cateListRight"> <div v-for="(item, index) in categoryChild" :key="index"> <div class="nut-category-pane__childItemList"> - <div class="bole-category-pane__childItem" @click="onChange(item.value)"> + <div class="bole-category-pane__childItem" @click="onChange(item.id)"> <div class="bole-category-pane-item-wrapper" - :class="{ active: modelValue.includes(item.value) }" + :class="{ active: modelValue.includes(item.id) }" > <div class="bole-category-pane-item-name">{{ item.name }}</div> <Check :size="16" class="bole-category-pane-item-icon" /> @@ -29,7 +29,7 @@ type ChildType = { name?: string; - value?: string | number; + id?: string | number; [key: string]: any; }; diff --git a/packages/components/src/AreaTreeSelect/PositionSelectView.vue b/packages/components/src/AreaTreeSelect/PositionSelectView.vue index 048754e..86ba1cc 100644 --- a/packages/components/src/AreaTreeSelect/PositionSelectView.vue +++ b/packages/components/src/AreaTreeSelect/PositionSelectView.vue @@ -1,15 +1,16 @@ <template> - <Category :category="provinceList" @change="change" class="position-select-view"> + <Category :category="industryList" @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 { useAllSearchSettingList, useSearchSettingType } from '@12333/hooks'; import Category from './Category.vue'; import CategoryPane from './CategoryPane.vue'; import { reactive, computed, watch } from 'vue'; +import { SearchType } from '@12333/constants'; defineOptions({ name: 'PositionSelectView', @@ -24,25 +25,26 @@ multiple: true, }); -const model = defineModel<number[]>(); +const model = defineModel<string[]>(); const state = reactive({ provinceIndex: 0, }); -const { areaTreeList } = useAllAreaList(); - -const provinceList = computed(() => areaTreeList.value.map((x) => ({ ...x, name: x.areaName }))); +const { allSearchSettingList: positionList } = useAllSearchSettingList({ + searchType: SearchType.Position, +}); +const { searchSettingTypeList: industryList } = useSearchSettingType({ + searchType: SearchType.IndustryCategory, +}); const categoryChild = computed(() => { - if (!provinceList.value.length) { + if (!industryList.value.length) { return []; } - return provinceList.value[state.provinceIndex].children.map((x) => ({ - ...x, - name: x.areaName, - value: x.areaCode, - })); + return positionList.value?.filter( + (x) => x.parentName === industryList.value[state.provinceIndex].name + ); }); const change = (index: number) => { diff --git a/packages/components/src/Tag/JobTagList.vue b/packages/components/src/Tag/JobTagList.vue index c962b4c..dc51ea1 100644 --- a/packages/components/src/Tag/JobTagList.vue +++ b/packages/components/src/Tag/JobTagList.vue @@ -1,13 +1,8 @@ <template> <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 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 v-for="item in jobTagList" :key="item" class="mine-curriculum-intention-job-item"> + {{ item }} + </div> </div> </template> @@ -16,9 +11,11 @@ name: 'JobTagList', }); -// type Props = {}; +type Props = { + jobTagList?: string[]; +}; -// const props = withDefaults(defineProps<Props>(), {}); +const props = withDefaults(defineProps<Props>(), {}); </script> <style lang="scss"> diff --git a/packages/constants/index.ts b/packages/constants/index.ts index 6d4bb41..4ba4a42 100644 --- a/packages/constants/index.ts +++ b/packages/constants/index.ts @@ -11,3 +11,4 @@ export * from './oss'; export * from './authenticationV2'; export * from './parkOrHR'; +export * from './task'; diff --git a/apps/bMiniApp/src/constants/task.ts b/packages/constants/task.ts similarity index 73% rename from apps/bMiniApp/src/constants/task.ts rename to packages/constants/task.ts index 16d939b..742c086 100644 --- a/apps/bMiniApp/src/constants/task.ts +++ b/packages/constants/task.ts @@ -150,3 +150,55 @@ [FlexWorkerEleSignEnum.HasSign]: '宸茬绾�', [FlexWorkerEleSignEnum.CancelSign]: '宸茶В绾�', }; + +export enum UserResumeFreeTimeEnum { + /** + * 涓嶉檺 + */ + NoLimit = 1, + /** + * 瀵掓殤鍋� + */ + WinterAndSummerVacation = 2, + /** + * 鑺傚亣鏃� + */ + Holiday = 3, + /** + * 鍛ㄥ叚鏃� + */ + Weekend = 4, + /** + * 宸ヤ綔鏃� + */ + Weekday = 5, +} + +export const UserResumeFreeTimeEnumText = { + [UserResumeFreeTimeEnum.NoLimit]: '涓嶉檺', + [UserResumeFreeTimeEnum.WinterAndSummerVacation]: '瀵掓殤鍋�', + [UserResumeFreeTimeEnum.Holiday]: '鑺傚亣鏃�', + [UserResumeFreeTimeEnum.Weekend]: '鍛ㄥ叚鏃�', + [UserResumeFreeTimeEnum.Weekday]: '宸ヤ綔鏃�', +}; + +export enum UserResumeJobSeekingStatusEnum { + /** + * 绉瀬鎵惧伐浣� + */ + Activing = 1, + /** + * 闅忎究鐪嬬湅 + */ + JustLook = 2, + /** + * 鏆傛椂涓嶆壘宸ヤ綔 + */ + NotLook = 3, +} + +export const UserResumeJobSeekingStatusEnumText = { + [UserResumeJobSeekingStatusEnum.Activing]: '绉瀬鎵惧伐浣�', + [UserResumeJobSeekingStatusEnum.JustLook]: '闅忎究鐪嬬湅', + [UserResumeJobSeekingStatusEnum.NotLook]: '鏆傛椂涓嶆壘宸ヤ綔', +}; diff --git a/packages/hooks/area.ts b/packages/hooks/area.ts index 2f9220f..46668cf 100644 --- a/packages/hooks/area.ts +++ b/packages/hooks/area.ts @@ -63,7 +63,15 @@ return { completeAreaList: computed(() => areaStore.value.completeAreaList), completeAreaTree: computed(() => areaStore.value.completeAreaTree), - // cityAreaTree: computed(() => areaStore.value.cityAreaTree), + cityAreaTree: computed(() => + areaStore.value.completeAreaTree.map((x) => ({ + ...x, + children: x.children.map((y) => ({ + ...y, + children: undefined, + })), + })) + ), provinceList: computed(() => areaStore.value.provinceList), areaItemMap: computed(() => areaStore.value.areaItemMap), getAreaFromCompleteAreaList, @@ -72,7 +80,7 @@ } export function useAllAreaList() { - const { completeAreaTree, provinceList, completeAreaList } = useArea(); + const { completeAreaTree, provinceList, completeAreaList, cityAreaTree } = useArea(); const findAreaCodeFromName = (areaName: string) => { const areaItem = completeAreaList.value.find((x) => x.areaName === areaName); @@ -95,6 +103,7 @@ findAreaItemFromCode, areaTreeList: completeAreaTree, provinceList, + cityAreaTree, }; } diff --git a/packages/services/api/FlexEnterpriseWoker.ts b/packages/services/api/FlexEnterpriseWoker.ts new file mode 100644 index 0000000..9bafeb5 --- /dev/null +++ b/packages/services/api/FlexEnterpriseWoker.ts @@ -0,0 +1,54 @@ +/* eslint-disable */ +// @ts-ignore +import { request } from '@/utils/request'; + +/** C绔汉鍛樼鐞嗗垪琛� POST /api/FlexEnterpriseWoker/GetUserClientList */ +export async function getUserClientList( + body: API.GetUserClientForBackInput, + options?: API.RequestConfig +) { + return request<API.GetUserClientForBackOutputPageOutput>( + '/api/FlexEnterpriseWoker/GetUserClientList', + { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + data: body, + ...(options || {}), + } + ); +} + +/** C绔汉鍛樼鐞�--绛剧害璇︽儏 POST /api/FlexEnterpriseWoker/GetUserClientSignList */ +export async function getUserClientSignList( + body: API.GetUserClientSignListInput, + options?: API.RequestConfig +) { + return request<API.UserClientSignListOutputPageOutput>( + '/api/FlexEnterpriseWoker/GetUserClientSignList', + { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + data: body, + ...(options || {}), + } + ); +} + +/** C绔汉鍛樼鐞�--鑾峰彇浜哄憳璇︽儏 GET /api/FlexEnterpriseWoker/GetUserDetailForBack */ +export async function getUserDetailForBack( + // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄) + params: API.APIgetUserDetailForBackParams, + options?: API.RequestConfig +) { + return request<API.GetUserDetailForBackOutput>('/api/FlexEnterpriseWoker/GetUserDetailForBack', { + method: 'GET', + params: { + ...params, + }, + ...(options || {}), + }); +} diff --git a/packages/services/api/UserResume.ts b/packages/services/api/UserResume.ts index 9b0735e..3ec42a4 100644 --- a/packages/services/api/UserResume.ts +++ b/packages/services/api/UserResume.ts @@ -2,6 +2,14 @@ // @ts-ignore import { request } from '@/utils/request'; +/** 鏍规嵁鐢ㄦ埛鑾峰彇鏈熷緟鐨勫伐浣� GET /api/UserResume/GetResumeExpectationJob */ +export async function getResumeExpectationJob(options?: API.RequestConfig) { + return request<API.UserResumeExpectationJobOutput>('/api/UserResume/GetResumeExpectationJob', { + method: 'GET', + ...(options || {}), + }); +} + /** 鏍规嵁鐢ㄦ埛鑾峰彇绠�鍘� GET /api/UserResume/GetUserResume */ export async function getUserResume(options?: API.RequestConfig) { return request<API.MyResumeOutput>('/api/UserResume/GetUserResume', { @@ -10,6 +18,14 @@ }); } +/** 鏍规嵁鐢ㄦ埛鑾峰彇绠�鍘嗗熀纭�淇℃伅 GET /api/UserResume/GetUserResumeBaseInfo */ +export async function getUserResumeBaseInfo(options?: API.RequestConfig) { + return request<API.UserResumeBaseInfoOutput>('/api/UserResume/GetUserResumeBaseInfo', { + method: 'GET', + ...(options || {}), + }); +} + /** 鏍规嵁璁よ瘉id鑾峰彇璁よ瘉璇︽儏 GET /api/UserResume/GetUserResumeCertificateDetailById */ export async function getUserResumeCertificateDetailById( // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄) diff --git a/packages/services/api/index.ts b/packages/services/api/index.ts index a9c1745..ffe8d03 100644 --- a/packages/services/api/index.ts +++ b/packages/services/api/index.ts @@ -9,6 +9,7 @@ import * as Common from './Common'; import * as Features from './Features'; import * as FlexEnterprise from './FlexEnterprise'; +import * as FlexEnterpriseWoker from './FlexEnterpriseWoker'; import * as FlexTask from './FlexTask'; import * as FlexWorker from './FlexWorker'; import * as IdentityRole from './IdentityRole'; @@ -30,6 +31,7 @@ Common, Features, FlexEnterprise, + FlexEnterpriseWoker, FlexTask, FlexWorker, IdentityRole, diff --git a/packages/services/api/typings.d.ts b/packages/services/api/typings.d.ts index 3b11f05..58ea6e5 100644 --- a/packages/services/api/typings.d.ts +++ b/packages/services/api/typings.d.ts @@ -242,6 +242,10 @@ id: string; } + interface APIgetUserDetailForBackParams { + userId?: string; + } + interface APIgetUserListByPhoneNumberParams { phoneNumber?: string; clientId?: string; @@ -1197,6 +1201,77 @@ belongType?: number; } + interface GetUserClientForBackInput { + pageModel?: Pagination; + /** 濮撳悕/鎵嬫満/韬唤璇佸彿/瀹㈡埛 */ + searchKeys?: string; + /** 鏈�杩戝綍鐢ㄦ椂闂�--寮�濮� */ + nearlyHireDateTimeBegin?: string; + /** 鏈�杩戝綍鐢ㄦ椂闂�--缁撴潫 */ + nearlyHireDateTimeEnd?: string; + /** 鏈�杩戠绾︽椂闂�--寮�濮� */ + nearlySignDateTimeBegin?: string; + /** 鏈�杩戠绾︽椂闂�--缁撴潫 */ + nearlySignDateTimeEnd?: string; + /** 瀹炲悕鐘舵�� */ + realVerifyStatus?: boolean; + } + + interface GetUserClientForBackOutput { + userId?: string; + userResumeId?: string; + /** 濮撳悕 */ + name?: string; + /** 韬唤璇佸彿 */ + idNumber?: string; + /** 鎵嬫満鍙� */ + contactPhone?: string; + /** 骞撮緞 */ + age?: number; + genderType?: GenderTypeEnum; + /** 甯搁┗鐪佷唤Code */ + residentProvinceCode?: number; + /** 甯搁┗鍩庡競code */ + residentCityCode?: number; + /** 甯搁┗鐪佷唤鍚嶇О */ + residentProvinceName?: string; + /** 甯搁┗鍩庡競鍚嶇О */ + residentCityName?: string; + /** 瀹炲悕鐘舵�� */ + realVerifyStatus?: boolean; + /** 瀹炲悕鏃堕棿 */ + realVerifyTime?: string; + nearlyWorkRecord?: NearlyFlexWorkerRecord; + } + + interface GetUserClientForBackOutputPageOutput { + pageModel?: Pagination; + objectData?: any; + data?: GetUserClientForBackOutput[]; + } + + interface GetUserClientSignListInput { + pageModel?: Pagination; + userId?: string; + } + + interface GetUserDetailForBackOutput { + userId?: string; + userResumeId?: string; + /** 濮撳悕 */ + name?: string; + /** 韬唤璇佸彿 */ + idNumber?: string; + /** 鎵嬫満鍙� */ + contactPhone?: string; + /** 骞撮緞 */ + age?: number; + /** 韬唤璇佹闈� */ + certificateFrontImgUrl?: string; + /** 韬唤璇佸弽闈� */ + certificateBackImgUrl?: string; + } + interface GetWorkerListForBackOutput { userId?: string; /** 濮撳悕 */ @@ -1537,6 +1612,16 @@ value?: string; } + interface NearlyFlexWorkerRecord { + taskId?: string; + /** 鏈�杩戝綍鐢ㄦ椂闂� */ + nearlyHireDateTime?: string; + /** 鏈�杩戠绾︽椂闂� */ + nearlySignDateTime?: string; + /** 鎵�灞炲晢鎴� */ + enterpirseName?: string; + } + interface ObjectExtensionsDto { modules?: Record<string, any>; enums?: Record<string, any>; @@ -1729,6 +1814,10 @@ residentCityCode?: number; residentProvinceName?: string; residentCityName?: string; + /** 鑱旂郴鐢佃瘽 */ + phoneNumber?: string; + /** 澶村儚 */ + avatarUrl?: string; } interface SaveUserResumeCertificateInput { @@ -1938,6 +2027,30 @@ releaseStatus?: FlexTaskReleaseStatusEnum; } + interface UserClientSignListOutput { + /** 鎵�灞炲晢鎴� */ + enterpirseName?: string; + /** 鎶ュ悕鏃堕棿 */ + applyTime?: string; + enterSignStatus?: FlexWorkerEleSignEnum; + /** 浼佷笟绛剧害鏃堕棿 */ + enterSignTime?: string; + hireStatus?: FlexTaskWorkerHireEnum; + /** 褰曠敤鏃堕棿 */ + hireDateTime?: string; + userSignStatus?: FlexWorkerEleSignEnum; + /** 鐏靛伐绛剧害鏃堕棿 */ + userSignTime?: string; + /** 鐢靛瓙鍚堝悓 */ + contractUrl?: string; + } + + interface UserClientSignListOutputPageOutput { + pageModel?: Pagination; + objectData?: any; + data?: UserClientSignListOutput[]; + } + interface UserData { id?: string; tenantId?: string; @@ -2017,7 +2130,7 @@ /** 绠�鍘嗚璇佽鎯匢d */ id?: string; /** 鐢ㄦ埛绠�鍘咺d */ - userResumeId?: string; + userId?: string; /** 璁よ瘉绫诲埆Id */ certificateTypeId?: string; /** 璁よ瘉璇佷欢鍙烽粯璁よ韩浠借瘉 */ diff --git a/packages/utils/area.ts b/packages/utils/area.ts index a0b323e..1732267 100644 --- a/packages/utils/area.ts +++ b/packages/utils/area.ts @@ -1,11 +1,11 @@ import { AreaType } from '@12333/constants'; -export interface AreaTreeNode extends API.AreaInfo { +export interface AreaTreeNode extends API.AreaDto { children?: AreaTreeNode[]; } export function formatAreaListToTree( - areaDataList: API.AreaInfo[], + areaDataList: API.AreaDto[], parentId: number, maxLayer = AreaType.Area ) { @@ -23,11 +23,11 @@ return treeNodeList; } -export function flattenAreaTree(tree: API.AreaInfo[]) { - let result = [] as API.AreaInfo[]; +export function flattenAreaTree(tree: API.AreaDto[]) { + let result = [] as API.AreaDto[]; // 閫掑綊鍑芥暟锛岀敤浜庨亶鍘嗗瓙鑺傜偣 - function flatten(node: API.AreaInfo) { + function flatten(node: API.AreaDto) { result.push(node); if (node.children && node.children.length > 0) { -- Gitblit v1.9.1