From b617603a5e9a4f86e47bb3df67e1cd0c9beb2ba1 Mon Sep 17 00:00:00 2001
From: zhengyiming <540361168@qq.com>
Date: 星期一, 11 八月 2025 17:03:51 +0800
Subject: [PATCH] Merge branch 'master' of http://120.26.58.240:8888/r/flexJobMiniApp
---
apps/cMiniApp/src/subpackages/curriculum/mineCertificateAddOrEdit/InnerPage.vue | 108 ++++++++++---
apps/cMiniApp/src/subpackages/curriculum/editMineInfo/InnerPage.vue | 6
apps/cMiniApp/src/pages/task/InnerPage.vue | 57 ++----
apps/cMiniApp/src/subpackages/curriculum/mineJobIntention/InnerPage.vue | 1
packages/services/apiV2/taskUser.ts | 27 +++
apps/cMiniApp/project.private.config.json | 7
packages/hooks/task.ts | 4
apps/cMiniApp/src/subpackages/curriculum/mineCertificate/InnerPage.vue | 9 +
apps/bMiniApp/src/subpackages/task/taskCheck/InnerPage.vue | 13
packages/services/apiV2/index.ts | 2
packages/hooks/area.ts | 47 ++++-
apps/cMiniApp/src/subpackages/curriculum/mineDetailedInfo/InnerPage.vue | 39 ++--
packages/utils/area.ts | 6
packages/services/apiV2/typings.d.ts | 40 ++++
apps/cMiniApp/src/subpackages/curriculum/mineWorkExperience/InnerPage.vue | 28 ++-
packages/constants/apiEnum.ts | 26 ++
apps/cMiniApp/src/pages/mine/index.vue | 43 ++++
17 files changed, 322 insertions(+), 141 deletions(-)
diff --git a/apps/bMiniApp/src/subpackages/task/taskCheck/InnerPage.vue b/apps/bMiniApp/src/subpackages/task/taskCheck/InnerPage.vue
index 639db70..2010249 100644
--- a/apps/bMiniApp/src/subpackages/task/taskCheck/InnerPage.vue
+++ b/apps/bMiniApp/src/subpackages/task/taskCheck/InnerPage.vue
@@ -1,7 +1,7 @@
<template>
<Calendar v-model="queryMenuState.time"></Calendar>
<ProTabs
- v-model="queryMenuState.status"
+ v-model="queryMenuState.checkReceiveStatus"
name="task-tab"
:showPaneContent="false"
class="task-tabs"
@@ -9,14 +9,14 @@
title-gutter="8"
title-scroll
>
- <ProTabPane title="寰呮彁浜�" pane-key="10"></ProTabPane>
- <ProTabPane title="寰呴獙鏀�" pane-key="10"></ProTabPane>
- <ProTabPane title="宸查獙鏀�" pane-key="20"></ProTabPane>
+ <ProTabPane :title="`寰呮彁浜" :pane-key="EnumTaskCheckReceiveStatus.Wait"></ProTabPane>
+ <ProTabPane :title="`寰呴獙鏀禶" :pane-key="EnumTaskCheckReceiveStatus.Wait"></ProTabPane>
+ <ProTabPane :title="`宸查獙鏀禶" :pane-key="EnumTaskCheckReceiveStatus.Completed"></ProTabPane>
</ProTabs>
<InfiniteLoading
scrollViewClassName="common-infinite-scroll-list"
v-bind="infiniteLoadingProps"
- :key="queryMenuState.status"
+ :key="queryMenuState.checkReceiveStatus"
>
<template #renderItem="{ item }">
<MyTaskCard
@@ -33,6 +33,7 @@
<script setup lang="ts">
import { MyTaskCard, ProTabs, ProTabPane, Calendar } from '@12333/components';
import Taro from '@tarojs/taro';
+import { EnumTaskCheckReceiveStatus } from '@12333/constants';
import { useTaskList } from '@12333/hooks';
defineOptions({
@@ -41,7 +42,7 @@
const { queryMenuState, infiniteLoadingProps } = useTaskList({
defaultQueryMenuState: {
- status: EnumTaskStatus.Wait,
+ checkReceiveStatus: EnumTaskCheckReceiveStatus.Wait,
},
});
diff --git a/apps/cMiniApp/project.private.config.json b/apps/cMiniApp/project.private.config.json
index a6c0377..02429d4 100644
--- a/apps/cMiniApp/project.private.config.json
+++ b/apps/cMiniApp/project.private.config.json
@@ -77,13 +77,6 @@
"query": "",
"launchMode": "default",
"scene": null
- },
- {
- "name": "",
- "pathName": "subpackages/curriculum/mineCertificate/mineCertificate",
- "query": "",
- "launchMode": "default",
- "scene": null
}
]
}
diff --git a/apps/cMiniApp/src/pages/mine/index.vue b/apps/cMiniApp/src/pages/mine/index.vue
index 4bafb51..cb55be5 100644
--- a/apps/cMiniApp/src/pages/mine/index.vue
+++ b/apps/cMiniApp/src/pages/mine/index.vue
@@ -16,7 +16,7 @@
<div class="mine-avatar-wrapper" @click="goLogin">
<UserAvatar :size="52" class="mine-avatar" />
<div class="user-info" v-if="isLogin">
- <div class="user-info-item">{{ userDetail?.userName ?? '' }}</div>
+ <div class="user-info-item">{{ detail?.name ?? '' }}</div>
<!-- <div class="user-info-auth">
<div class="user-info-auth-item">
<div class="user-info-unCertified" v-if="isCertified">
@@ -64,15 +64,30 @@
<img :src="IconArrow" class="mine-order-list-title-icon" />
</div>
<div class="mine-order-list-content">
- <nut-badge class="mine-order-list-item" top="8" :value="8" @click="goMineSign">
+ <nut-badge
+ class="mine-order-list-item"
+ top="8"
+ :value="detail?.taskCount ?? 0"
+ @click="goMineSign"
+ >
<img :src="IconOrderSign" class="mine-order-list-icon" />
<div class="mine-order-list-text">鎴戠殑鎶ュ悕</div>
</nut-badge>
- <nut-badge class="mine-order-list-item" top="8" :value="8" @click="goMineHire">
+ <nut-badge
+ class="mine-order-list-item"
+ top="8"
+ :value="detail?.hirePassTaskCount ?? 0"
+ @click="goMineHire"
+ >
<img :src="IconOrderHire" class="mine-order-list-icon" />
<div class="mine-order-list-text">宸插綍鐢�</div>
</nut-badge>
- <nut-badge class="mine-order-list-item" top="8" :value="8" @click="goMineCancel">
+ <nut-badge
+ class="mine-order-list-item"
+ top="8"
+ :value="detail?.hireRefuseTaskCount ?? 0"
+ @click="goMineCancel"
+ >
<img :src="IconOrderCancel" class="mine-order-list-icon" />
<div class="mine-order-list-text">宸插彇娑�</div>
</nut-badge>
@@ -106,6 +121,8 @@
import { useSystemStore } from '@/stores/modules/system';
import PageLayoutWithBg from '@/components/Layout/PageLayoutWithBg.vue';
import { toThousand } from '@12333/utils';
+import { useQuery } from '@tanstack/vue-query';
+import * as authServices from '@12333/services/apiV2/auth';
const { userDetail, isCertified } = useUser();
const isLogin = useIsLogin();
@@ -114,6 +131,24 @@
const { goLoginFn } = useGoLogin();
const bgHeight = computed(() => 133 + systemStore.navHeight);
+const {
+ isLoading,
+ isError,
+ data: detail,
+ refetch,
+} = useQuery({
+ queryKey: ['authServices/getPersonalLoginInfo'],
+ queryFn: async () => {
+ return await authServices.getPersonalLoginInfo(
+ {},
+ {
+ showLoading: false,
+ }
+ );
+ },
+ placeholderData: () => ({} as API.GetPersonalLoginInfoQueryResult),
+});
+
function goLogin() {
if (!isLogin.value) {
goLoginFn();
diff --git a/apps/cMiniApp/src/pages/task/InnerPage.vue b/apps/cMiniApp/src/pages/task/InnerPage.vue
index 33a1569..7de494e 100644
--- a/apps/cMiniApp/src/pages/task/InnerPage.vue
+++ b/apps/cMiniApp/src/pages/task/InnerPage.vue
@@ -1,7 +1,7 @@
<template>
- <Calendar v-model="queryState.date"></Calendar>
+ <Calendar v-model="queryMenuState.time"></Calendar>
<ProTabs
- v-model="queryState.status"
+ v-model="queryMenuState.checkReceiveStatus"
name="task-tab"
:showPaneContent="false"
class="task-tabs"
@@ -9,16 +9,23 @@
title-gutter="8"
title-scroll
>
- <ProTabPane :title="`寰呮彁浜" :pane-key="10"></ProTabPane>
- <ProTabPane :title="`寰呴獙鏀禶" :pane-key="20"></ProTabPane>
+ <ProTabPane :title="`寰呮彁浜" :pane-key="EnumTaskCheckReceiveStatus.Wait"></ProTabPane>
+ <ProTabPane :title="`寰呴獙鏀禶" :pane-key="EnumTaskCheckReceiveStatus.Wait"></ProTabPane>
+ <ProTabPane :title="`宸查獙鏀禶" :pane-key="EnumTaskCheckReceiveStatus.Completed"></ProTabPane>
</ProTabs>
<InfiniteLoading
scrollViewClassName="common-infinite-scroll-list task-list"
v-bind="infiniteLoadingProps"
- :key="queryState.status"
+ :key="queryMenuState.checkReceiveStatus"
>
<template #renderItem="{ item }">
- <MyTaskCard @click="goSubmitTaskDetail(item)" />
+ <MyTaskCard
+ :name="item.name"
+ :addressName="item.addressName"
+ :begin-time="item.beginTime"
+ :end-time="item.endTime"
+ @click="goSubmitTaskDetail(item)"
+ />
</template>
</InfiniteLoading>
</template>
@@ -26,44 +33,22 @@
<script setup lang="ts">
import { MyTaskCard, ProTabs, ProTabPane, Calendar } from '@12333/components';
import Taro from '@tarojs/taro';
-import { useInfiniteLoading } from '@12333/hooks';
-import { OrderInputType } from '@12333/constants';
-import * as flexWorkerServices from '@12333/services/api/FlexWorker';
+import { useTaskList } from '@12333/hooks';
+import { EnumTaskCheckReceiveStatus } from '@12333/constants';
defineOptions({
name: 'InnerPage',
});
-const queryState = reactive({
- status: 10,
- date: new Date(),
+const { queryMenuState, infiniteLoadingProps } = useTaskList({
+ defaultQueryMenuState: {
+ checkReceiveStatus: EnumTaskCheckReceiveStatus.Wait,
+ },
});
-const { infiniteLoadingProps } = useInfiniteLoading(
- ({ pageParam }) => {
- let params: API.GetFlexTaskListInput = {
- pageModel: {
- rows: 20,
- page: pageParam,
- orderInput: [{ property: 'lastShelfTime', order: OrderInputType.Desc }],
- },
- };
-
- return flexWorkerServices.getFlexTaskByArrange(params, {
- showLoading: false,
- });
- },
- {
- queryKey: ['flexWorkerServices/getFlexTaskByArrange', queryState],
- }
-);
-
-function goSubmitTaskDetail(item: API.GetFlexTaskListOutput) {
- // Taro.navigateTo({
- // url: `${RouterPath.taskSubmitCheck}?id=${item.id}`,
- // });
+function goSubmitTaskDetail(item: API.GetTaskInfosQueryResultItem) {
Taro.navigateTo({
- url: `${RouterPath.taskCheckDetail}?id=${item.taskId}`,
+ url: `${RouterPath.taskCheckDetail}?id=${item.id}`,
});
}
</script>
diff --git a/apps/cMiniApp/src/subpackages/curriculum/editMineInfo/InnerPage.vue b/apps/cMiniApp/src/subpackages/curriculum/editMineInfo/InnerPage.vue
index 61ef2e5..fb29bf4 100644
--- a/apps/cMiniApp/src/subpackages/curriculum/editMineInfo/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/curriculum/editMineInfo/InnerPage.vue
@@ -26,7 +26,7 @@
</nut-form-item>
<nut-form-item label="甯搁┗鍩庡競:" class="bole-form-item" prop="areaList">
<ChooseInputWithAreaPicker
- :columns="completeAreaTree"
+ :columns="areaTree"
v-model="form.areaList"
placeholder="璇烽�夋嫨甯搁┗鍩庡競"
></ChooseInputWithAreaPicker>
@@ -42,7 +42,7 @@
import { FormRules } from '@nutui/nutui-taro/dist/types/__VUE/form/types';
import { ChooseInputWithPicker, ChooseInputWithAreaPicker } from '@12333/components';
import { convertApi2FormUrlOnlyOne, Message, setOSSLink } from '@12333/utils';
-import { useArea, useDictionaryDataSelect } from '@12333/hooks';
+import { useAreaTree, useDictionaryDataSelect } from '@12333/hooks';
import { CategoryCode } from '@12333/constants';
import * as userResumeServices from '@12333/services/apiV2/userResume';
import Taro from '@tarojs/taro';
@@ -60,7 +60,7 @@
categoryCode: CategoryCode.Education,
});
-const { completeAreaTree } = useArea();
+const { areaTree } = useAreaTree();
const form = reactive({
avatar: [],
diff --git a/apps/cMiniApp/src/subpackages/curriculum/mineCertificate/InnerPage.vue b/apps/cMiniApp/src/subpackages/curriculum/mineCertificate/InnerPage.vue
index e659738..f546f29 100644
--- a/apps/cMiniApp/src/subpackages/curriculum/mineCertificate/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/curriculum/mineCertificate/InnerPage.vue
@@ -21,11 +21,20 @@
import { RouterPath } from '@/constants';
import * as userResumeServices from '@12333/services/apiV2/userResume';
import { useQuery } from '@tanstack/vue-query';
+import { useEvent } from 'senin-mini/hooks';
defineOptions({
name: 'InnerPage',
});
+useEvent('updateResume', function (data: { content: boolean }) {
+ if (data.content) {
+ refetch({
+ type: 'inactive',
+ });
+ }
+});
+
const {
isLoading,
isError,
diff --git a/apps/cMiniApp/src/subpackages/curriculum/mineCertificateAddOrEdit/InnerPage.vue b/apps/cMiniApp/src/subpackages/curriculum/mineCertificateAddOrEdit/InnerPage.vue
index 123fc38..46c8966 100644
--- a/apps/cMiniApp/src/subpackages/curriculum/mineCertificateAddOrEdit/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/curriculum/mineCertificateAddOrEdit/InnerPage.vue
@@ -1,22 +1,22 @@
<template>
<ContentScrollView :paddingH="false">
<nut-form :model-value="form" ref="formRef" :rules="rules">
- <nut-form-item label="璇佷功绫诲瀷:" class="bole-form-item" prop="type">
+ <nut-form-item label="璇佷功绫诲瀷:" class="bole-form-item" prop="typeCode">
<ChooseInputWithPicker
- v-model="form.type"
+ v-model="form.typeCode"
placeholder="璇烽�夋嫨璇佷功绫诲瀷"
- :value-enum="TaskStatusText"
+ :value-enum="certificateTypeList"
/>
</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 label="璇佷功缂栧彿:" class="bole-form-item" prop="code">
+ <nut-input v-model="form.code" type="number" placeholder="璇疯緭鍏�"> </nut-input>
</nut-form-item>
<nut-form-item
label="姘镐箙璇佷功:"
class="bole-form-item permanent-certificate"
- prop="isPermanentCertificate"
+ prop="isForever"
>
- <nut-switch v-model="form.isPermanentCertificate" />
+ <nut-switch v-model="form.isForever" />
</nut-form-item>
<nut-form-item label="寮�濮嬫棩鏈�:" class="bole-form-item" prop="startDate">
<ChooseInputWithDatePicker v-model="form.startDate"></ChooseInputWithDatePicker>
@@ -24,26 +24,26 @@
<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" prop="certificateNumber">
- <nut-input v-model="form.certificateNumber" placeholder="璇疯緭鍏�"> </nut-input>
+ <nut-form-item label="鍙戣瘉鍗曚綅:" class="bole-form-item" prop="issueUnit">
+ <nut-input v-model="form.issueUnit" 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"
+ prop="img"
label-position="top"
>
- <Uploader v-model:file-list="form.photo" :maximum="1" class="bole-uploader"> </Uploader>
+ <Uploader v-model:file-list="form.img" :maximum="1" class="bole-uploader"> </Uploader>
</nut-form-item>
<nut-form-item
label="璇佷功鍙嶉潰鐓х墖锛堟垨鍏朵粬鏈夊唴瀹归〉锛�"
class="bole-form-item"
- prop="photo"
+ prop="backImg"
label-position="top"
>
- <Uploader v-model:file-list="form.photo" :maximum="1" class="bole-uploader"> </Uploader>
+ <Uploader v-model:file-list="form.backImg" :maximum="1" class="bole-uploader"> </Uploader>
</nut-form-item>
</div>
</nut-form>
@@ -54,13 +54,16 @@
</template>
<script setup lang="ts">
-import { useUser } from '@/hooks';
import { ChooseInputWithPicker, ChooseInputWithDatePicker } from '@12333/components';
import * as userResumeServices from '@12333/services/apiV2/userResume';
-import { TaskStatusText, TaskStatus } from '@/constants';
import { FormRules } from '@nutui/nutui-taro/dist/types/__VUE/form/types';
-import { useQuery } from '@tanstack/vue-query';
+import { useQuery, useQueryClient } from '@tanstack/vue-query';
import Taro from '@tarojs/taro';
+import { useDictionaryDataSelect } from '@12333/hooks';
+import { CategoryCode } from '@12333/constants';
+import { convertApi2FormUrlOnlyOne, Message, setOSSLink, FormValidator } from '@12333/utils';
+import dayjs from 'dayjs';
+import { goBack } from '@/utils';
defineOptions({
name: 'InnerPage',
@@ -69,14 +72,21 @@
const router = Taro.useRouter();
const id = router.params?.id as string;
const isEdit = computed(() => !!id);
+const queryClient = useQueryClient();
+
+const { dictionaryDataList: certificateTypeList } = useDictionaryDataSelect({
+ categoryCode: CategoryCode.CertificateType,
+});
const form = reactive({
- type: TaskStatus.All,
- certificateNumber: '',
+ typeCode: '',
+ code: '',
startDate: '',
endDate: '',
- isPermanentCertificate: false,
- photo: [],
+ issueUnit: '',
+ isForever: false,
+ img: [],
+ backImg: [],
});
const {
@@ -95,14 +105,37 @@
);
},
placeholderData: () => ({} as API.GetUserResumeCredentialQueryResult),
- enabled: isEdit.value,
+ enabled: computed(() => isEdit.value),
+ onSuccess(data) {
+ form.typeCode = data.typeCode;
+ form.code = data.code;
+ form.startDate = dayjs(data.startDate).format('YYYY-MM-DD 00:00:00');
+ form.endDate = dayjs(data.endDate).format('YYYY-MM-DD 23:59:59');
+ form.issueUnit = data.issueUnit;
+ form.isForever = data.isForever;
+ form.img = convertApi2FormUrlOnlyOne(setOSSLink(data.img));
+ form.backImg = convertApi2FormUrlOnlyOne(setOSSLink(data.backImg));
+ },
});
const rules = reactive<FormRules>({
- type: [{ required: true, message: '璇疯緭鍏ユ墜鏈哄彿' }],
+ typeCode: [{ required: true, message: '璇烽�夋嫨璇佷功绫诲瀷' }],
startDate: [{ required: true, message: '璇烽�夋嫨寮�濮嬫棩鏈�' }],
- endDate: [{ required: true, message: '璇烽�夋嫨缁撴潫鏃ユ湡' }],
- photo: [{ required: true, message: '璇蜂笂浼犺瘉涔︽闈㈢収' }],
+ endDate: [
+ {
+ required: true,
+ message: '璇烽�夋嫨缁撴潫鏃ユ湡',
+ validator(value) {
+ if (!value) return Promise.reject('璇烽�夋嫨缁撴潫鏃ユ湡');
+ if (value <= form.startDate) return Promise.reject('缁撴潫鏃ユ湡涓嶈兘灏忎簬寮�濮嬫棩鏈�');
+ return Promise.resolve(true);
+ },
+ },
+ ],
+ img: [{ required: true, message: '璇蜂笂浼犺瘉涔︽闈㈢収', validator: FormValidator.validatorArray }],
+ backImg: [
+ { required: true, message: '璇蜂笂浼犺瘉涔﹀弽闈㈢収', validator: FormValidator.validatorArray },
+ ],
});
const formRef = ref<any>(null);
function handleConfirm() {
@@ -114,7 +147,32 @@
});
}
-function confirm() {}
+async function confirm() {
+ try {
+ let params: API.SaveUserResumeCredentialCommand = {
+ typeCode: form.typeCode,
+ code: form.code,
+ isForever: form.isForever,
+ startDate: dayjs(form.startDate).format('YYYY-MM-DD 00:00:00'),
+ endDate: dayjs(form.endDate).format('YYYY-MM-DD 23:59:59'),
+ issueUnit: form.issueUnit,
+ img: form.img[0]?.path,
+ backImg: form.backImg[0]?.path,
+ };
+ if (isEdit.value) {
+ params.id = id;
+ }
+ let res = await userResumeServices.saveUserResumeCredential(params);
+ if (res) {
+ Message.success(isEdit ? '缂栬緫鎴愬姛' : '娣诲姞鎴愬姛', {
+ onClosed() {
+ goBack();
+ queryClient.invalidateQueries(['userResumeServices/getUserResumeCredentials']);
+ },
+ });
+ }
+ } catch (error) {}
+}
</script>
<style lang="scss">
diff --git a/apps/cMiniApp/src/subpackages/curriculum/mineDetailedInfo/InnerPage.vue b/apps/cMiniApp/src/subpackages/curriculum/mineDetailedInfo/InnerPage.vue
index e360f49..9a7eca4 100644
--- a/apps/cMiniApp/src/subpackages/curriculum/mineDetailedInfo/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/curriculum/mineDetailedInfo/InnerPage.vue
@@ -17,8 +17,7 @@
prop="photo"
label-position="top"
>
- <Uploader v-model:file-list="form.lifeCircleImgUrlList" :maximum="6" class="bole-uploader">
- </Uploader>
+ <Uploader v-model:file-list="form.photos" :maximum="6" class="bole-uploader"> </Uploader>
</nut-form-item>
</nut-form>
</ContentScrollView>
@@ -30,7 +29,7 @@
<script setup lang="ts">
import { goBack } from '@/utils';
import { NumberInput } from '@12333/components';
-import * as userResumeServices from '@12333/services/api/userResume';
+import * as userResumeServices from '@12333/services/apiV2/userResume';
import { convertApiPath2Url, Message } from '@12333/utils';
import { FileItem } from '@nutui/nutui-taro/dist/types/__VUE/uploader/type';
import { useQuery } from '@tanstack/vue-query';
@@ -39,48 +38,50 @@
name: 'InnerPage',
});
+const { refetch: userResumeRefetch } = useUserResume();
+
const {
isLoading,
isError,
data: detail,
refetch,
} = useQuery({
- queryKey: ['userResumeServices/getUserResumeDetailInfo'],
+ queryKey: ['userResumeServices/getUserResumeDetail'],
queryFn: async () => {
- return await userResumeServices.getUserResumeDetailInfo({
- showLoading: false,
- });
+ return await userResumeServices.getUserResumeDetail(
+ {},
+ {
+ showLoading: false,
+ }
+ );
},
- placeholderData: () => ({} as API.UserResumeDetailInfoOutput),
+ placeholderData: () => ({} as API.GetUserResumeDetailQueryResult),
onSuccess(data) {
form.height = data.height;
form.weight = data.weight;
- form.lifeCircleImgUrlList = data.lifeCircleImgUrlList?.length
- ? data.lifeCircleImgUrlList.map((x) => convertApiPath2Url(x))
- : [];
+ form.photos = data.photos?.length ? data.photos.map((x) => convertApiPath2Url(x)) : [];
},
});
const form = reactive({
- height: '',
- weight: '',
- lifeCircleImgUrlList: [] as FileItem[],
+ height: 0,
+ weight: 0,
+ photos: [] as FileItem[],
});
async function handleConfirm() {
try {
- let params: API.SaveUserResumeDetailInfoInput = {
+ let params: API.SaveUserResumeDetailCommand = {
weight: form.weight,
height: form.weight,
- lifeCircleImgUrlList: form.lifeCircleImgUrlList?.length
- ? form.lifeCircleImgUrlList.map((x) => x.url)
- : [],
+ photos: form.photos?.length ? form.photos.map((x) => x.path) : [],
};
- let res = await userResumeServices.saveUserResumeDetailInfo(params);
+ let res = await userResumeServices.saveUserResumeDetail(params);
if (res) {
Message.success('淇濆瓨鎴愬姛', {
onClosed() {
goBack();
+ userResumeRefetch({ type: 'inactive' });
},
});
}
diff --git a/apps/cMiniApp/src/subpackages/curriculum/mineJobIntention/InnerPage.vue b/apps/cMiniApp/src/subpackages/curriculum/mineJobIntention/InnerPage.vue
index 87b07bf..309e69d 100644
--- a/apps/cMiniApp/src/subpackages/curriculum/mineJobIntention/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/curriculum/mineJobIntention/InnerPage.vue
@@ -147,7 +147,6 @@
},
},
success: function (res) {
- console.log('res: ', res);
res.eventChannel.emit('updatePosition', { content: form.userExpectJobs });
},
});
diff --git a/apps/cMiniApp/src/subpackages/curriculum/mineWorkExperience/InnerPage.vue b/apps/cMiniApp/src/subpackages/curriculum/mineWorkExperience/InnerPage.vue
index 60f5d12..1303900 100644
--- a/apps/cMiniApp/src/subpackages/curriculum/mineWorkExperience/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/curriculum/mineWorkExperience/InnerPage.vue
@@ -1,8 +1,8 @@
<template>
<ContentScrollView :paddingH="false">
<nut-form :model-value="form" ref="formRef">
- <nut-form-item label="宸ヤ綔骞撮檺:" class="bole-form-item" prop="workingSeniority">
- <nut-input v-model="form.workingSeniority" placeholder="璇疯緭鍏�"> </nut-input>
+ <nut-form-item label="宸ヤ綔骞撮檺:" class="bole-form-item" prop="workSeniority">
+ <nut-input v-model="form.workSeniority" placeholder="璇疯緭鍏�"> </nut-input>
</nut-form-item>
<nut-form-item label="宸ヤ綔缁忛獙:" class="bole-form-item" prop="workExperience">
<nut-input v-model="form.workExperience" type="textarea" placeholder="璇疯緭鍏�"> </nut-input>
@@ -16,7 +16,7 @@
<script setup lang="ts">
import { goBack } from '@/utils';
-import * as userResumeServices from '@12333/services/api/userResume';
+import * as userResumeServices from '@12333/services/apiV2/userResume';
import { Message } from '@12333/utils';
import { useQuery } from '@tanstack/vue-query';
@@ -24,8 +24,10 @@
name: 'InnerPage',
});
+const { refetch: userResumeRefetch } = useUserResume();
+
const form = reactive({
- workingSeniority: '',
+ workSeniority: '',
workExperience: '',
});
@@ -37,21 +39,24 @@
} = useQuery({
queryKey: ['userResumeServices/getUserResumeWorkExperience'],
queryFn: async () => {
- return await userResumeServices.getUserResumeWorkExperience({
- showLoading: false,
- });
+ return await userResumeServices.getUserResumeWorkExperience(
+ {},
+ {
+ showLoading: false,
+ }
+ );
},
- placeholderData: () => ({} as API.UserResumeWorkExperienceOutput),
+ placeholderData: () => ({} as API.GetUserResumeWorkExperienceQueryResult),
onSuccess(data) {
- form.workingSeniority = data.workingSeniority;
+ form.workSeniority = data.workSeniority;
form.workExperience = data.workExperience;
},
});
async function handleConfirm() {
try {
- let params: API.SaveUserResumeWorkExperienceInput = {
- workingSeniority: form.workingSeniority,
+ let params: API.SaveUserResumeWorkExperienceCommand = {
+ workSeniority: form.workSeniority,
workExperience: form.workExperience,
};
let res = await userResumeServices.saveUserResumeWorkExperience(params);
@@ -59,6 +64,7 @@
Message.success('淇濆瓨鎴愬姛', {
onClosed() {
goBack();
+ userResumeRefetch({ type: 'inactive' });
},
});
}
diff --git a/packages/constants/apiEnum.ts b/packages/constants/apiEnum.ts
index cc6ab80..393a3ce 100644
--- a/packages/constants/apiEnum.ts
+++ b/packages/constants/apiEnum.ts
@@ -91,20 +91,22 @@
Dictionary = 0,
/**浠诲姟 */
Task = 1,
+ /**浠诲姟闆囦剑 */
+ TaskUser = 2,
/**鐢ㄦ埛璁よ瘉 */
- Auth = 2,
+ Auth = 3,
/**鐢ㄦ埛鑿滃崟 */
- Menu = 3,
+ Menu = 4,
/**鐢ㄦ埛璧勬簮 */
- Resource = 4,
+ Resource = 5,
/**鐢ㄦ埛瑙掕壊 */
- Role = 5,
+ Role = 6,
/**鐢ㄦ埛淇℃伅 */
- User = 6,
+ User = 7,
/**鐢ㄦ埛绠�鍘� */
- UserResume = 7,
+ UserResume = 8,
/**浼佷笟淇℃伅 */
- Enterprise = 8,
+ Enterprise = 9,
}
/** 璧勬簮璇锋眰鏂瑰紡 */
@@ -191,6 +193,16 @@
Complete = 20,
}
+/** 浠诲姟褰曠敤鐘舵�� */
+export enum EnumTaskUserHireStatus {
+ /**寰呭綍鐢� */
+ Wait = 10,
+ /**宸插綍鐢� */
+ Pass = 20,
+ /**宸茶阿缁� */
+ Refuse = 30,
+}
+
/** 鐢ㄦ埛鎬у埆 */
export enum EnumUserGender {
/**鐢� */
diff --git a/packages/hooks/area.ts b/packages/hooks/area.ts
index f8bd597..684ce2c 100644
--- a/packages/hooks/area.ts
+++ b/packages/hooks/area.ts
@@ -4,6 +4,7 @@
import { AreaType, CategoryCode } from '@12333/constants';
import Taro, { EventChannel } from '@tarojs/taro';
import { useDictionaryDataSelect } from './dic';
+import axios from 'axios';
export function useArea() {
const queryClient = useQueryClient();
@@ -12,13 +13,12 @@
categoryCode: CategoryCode.Area,
staleTime: Infinity,
all: true,
- maxDeep: AreaType.City,
+ maxDeep: AreaType.Area,
});
const areaList = computed(() => dictionaryDataList.value.map(convertDictionaryToAreaTreeNode));
- console.log('areaList: ', areaList);
- const areaTree = computed(() => formatAreaListToTree(areaList.value));
+ // const areaTree = computed(() => formatAreaListToTree(areaList.value));
function getAreaFromCompleteAreaList(areaCode: string) {
return areaList.value.find((x) => x.areaCode === areaCode);
@@ -31,20 +31,41 @@
return {
completeAreaList: areaList,
areaList,
- completeAreaTree: areaTree,
- provinceList: computed(() => areaList.value.filter((x) => x.layer === AreaType.Province)),
+ // completeAreaTree: areaTree,
+ // provinceList: computed(() => areaList.value.filter((x) => x.layer === AreaType.Province)),
getAreaFromCompleteAreaList,
getAreaByAreaCode,
};
+}
+
+export function useAreaTree() {
+ axios.get('https://parkmanagement.oss-cn-hangzhou.aliyuncs.com/12333/area.txt').then((res) => {
+ console.log(res);
+ });
+ const { data } = useQuery({
+ queryKey: ['area.txt'],
+ queryFn() {
+ return axios
+ .get<API.AreaTreeNode[]>(
+ 'https://parkmanagement.oss-cn-hangzhou.aliyuncs.com/12333/area.txt'
+ )
+ .then((res) => res.data);
+ },
+
+ placeholderData: () => [] as API.AreaTreeNode[],
+ });
+
+ const areaTree = computed(() => formatAreaListToTree(data.value));
+
+ return { areaTree: areaTree };
}
function convertDictionaryToAreaTreeNode(
item: API.SelectOptionStringGetDictionaryDataSelectQueryResultOption
) {
return {
- children: [],
areaCode: item.data?.code,
- parentCode: item.data?.field1,
+ parentCode: item.data?.parentCode,
areaName: item.label,
layer: Number(item.data?.field4),
quickQuery: item.data?.field2,
@@ -79,13 +100,13 @@
};
}
-export function useProvinceList() {
- const { provinceList } = useArea();
+// export function useProvinceList() {
+// const { provinceList } = useArea();
- return {
- provinceList,
- };
-}
+// return {
+// provinceList,
+// };
+// }
export const globalEventEmitter = new Taro.Events();
diff --git a/packages/hooks/task.ts b/packages/hooks/task.ts
index bac7643..77af26c 100644
--- a/packages/hooks/task.ts
+++ b/packages/hooks/task.ts
@@ -2,6 +2,7 @@
import {
EnumPagedListOrder,
EnumSettlementCycle,
+ EnumTaskCheckReceiveStatus,
EnumTaskRecommendStatus,
EnumTaskReleaseStatus,
EnumTaskStatus,
@@ -27,6 +28,7 @@
status?: EnumTaskStatus;
genderLimit?: EnumUserGender;
settlementCycle?: EnumSettlementCycle;
+ checkReceiveStatus?: EnumTaskCheckReceiveStatus;
benefitCodes?: string;
enterpriseId?: string;
time?: Date;
@@ -44,6 +46,7 @@
benefitCodes: '',
status: '' as any as EnumTaskStatus,
releaseStatus: EnumTaskReleaseStatus.InProcess,
+ checkReceiveStatus: '' as any as EnumTaskCheckReceiveStatus,
enterpriseId: '',
time: '' as any as Date,
...defaultQueryMenuState,
@@ -77,6 +80,7 @@
genderLimit: queryMenuState.genderLimit,
status: queryMenuState.status,
releaseStatus: queryMenuState.releaseStatus,
+ checkReceiveStatus: queryMenuState.checkReceiveStatus,
enterpriseId: queryMenuState.enterpriseId,
beginTime: queryMenuState.time
? dayjs(queryMenuState.time).format('YYYY-MM-DD 00:00:00')
diff --git a/packages/services/apiV2/index.ts b/packages/services/apiV2/index.ts
index e33974b..a1555c0 100644
--- a/packages/services/apiV2/index.ts
+++ b/packages/services/apiV2/index.ts
@@ -10,6 +10,7 @@
import * as task from './task';
import * as enterprise from './enterprise';
import * as role from './role';
+import * as taskUser from './taskUser';
import * as menu from './menu';
export default {
userResume,
@@ -20,5 +21,6 @@
task,
enterprise,
role,
+ taskUser,
menu,
};
diff --git a/packages/services/apiV2/taskUser.ts b/packages/services/apiV2/taskUser.ts
new file mode 100644
index 0000000..694be3e
--- /dev/null
+++ b/packages/services/apiV2/taskUser.ts
@@ -0,0 +1,27 @@
+/* eslint-disable */
+// @ts-ignore
+import { request } from '@/utils/request';
+
+/** 鎶ュ悕浠诲姟 POST /api/flexjob/taskUser/applyTask */
+export async function applyTask(body: API.ApplyTaskCommand, options?: API.RequestConfig) {
+ return request<number>('/api/flexjob/taskUser/applyTask', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json-patch+json',
+ },
+ data: body,
+ ...(options || {}),
+ });
+}
+
+/** 鏀惰棌浠诲姟 POST /api/flexjob/taskUser/collectTask */
+export async function collectTask(body: API.CollectTaskCommand, options?: API.RequestConfig) {
+ return request<number>('/api/flexjob/taskUser/collectTask', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json-patch+json',
+ },
+ data: body,
+ ...(options || {}),
+ });
+}
diff --git a/packages/services/apiV2/typings.d.ts b/packages/services/apiV2/typings.d.ts
index a8f052a..8638b22 100644
--- a/packages/services/apiV2/typings.d.ts
+++ b/packages/services/apiV2/typings.d.ts
@@ -145,6 +145,11 @@
request?: GetUserResumeWorkExperienceQuery;
}
+ interface ApplyTaskCommand {
+ /** 浠诲姟Id */
+ ids?: string[];
+ }
+
interface BindWxmpUserInfoCommand {
/** 鍖呮嫭鏁忔劅鏁版嵁鍦ㄥ唴鐨勫畬鏁寸敤鎴蜂俊鎭殑鍔犲瘑鏁版嵁 */
encryptedData: string;
@@ -159,6 +164,13 @@
phoneNumber: string;
/** 楠岃瘉鐮� */
verifyCode: string;
+ }
+
+ interface CollectTaskCommand {
+ /** 浠诲姟Id */
+ ids?: string[];
+ /** 鏄惁鏀惰棌 */
+ isCollect?: boolean;
}
interface DeleteDictionaryCategoryCommand {
@@ -262,20 +274,22 @@
Dictionary = 0,
/**浠诲姟 */
Task = 1,
+ /**浠诲姟闆囦剑 */
+ TaskUser = 2,
/**鐢ㄦ埛璁よ瘉 */
- Auth = 2,
+ Auth = 3,
/**鐢ㄦ埛鑿滃崟 */
- Menu = 3,
+ Menu = 4,
/**鐢ㄦ埛璧勬簮 */
- Resource = 4,
+ Resource = 5,
/**鐢ㄦ埛瑙掕壊 */
- Role = 5,
+ Role = 6,
/**鐢ㄦ埛淇℃伅 */
- User = 6,
+ User = 7,
/**鐢ㄦ埛绠�鍘� */
- UserResume = 7,
+ UserResume = 8,
/**浼佷笟淇℃伅 */
- Enterprise = 8,
+ Enterprise = 9,
}
enum EnumResourceMethod {
@@ -351,6 +365,15 @@
Wait = 10,
/**宸插畨鎺� */
Complete = 20,
+ }
+
+ enum EnumTaskUserHireStatus {
+ /**寰呭綍鐢� */
+ Wait = 10,
+ /**宸插綍鐢� */
+ Pass = 20,
+ /**宸茶阿缁� */
+ Refuse = 30,
}
enum EnumUserGender {
@@ -1481,6 +1504,8 @@
releaseStatus?: EnumTaskReleaseStatus;
recommendStatus?: EnumTaskRecommendStatus;
checkReceiveStatus?: EnumTaskCheckReceiveStatus;
+ /** 褰曠敤鐘舵�� */
+ hireStatus?: EnumTaskUserHireStatus[];
pageModel?: PagedListQueryPageModel;
}
@@ -1536,6 +1561,7 @@
recommendStatus?: EnumTaskRecommendStatus;
/** 鍒涘缓鏃堕棿 */
createdTime?: string;
+ hireStatus?: EnumTaskUserHireStatus;
}
interface GetTaskInfosQueryResultObjectData {
diff --git a/packages/utils/area.ts b/packages/utils/area.ts
index aa4c806..c41d617 100644
--- a/packages/utils/area.ts
+++ b/packages/utils/area.ts
@@ -2,7 +2,7 @@
export function formatAreaListToTree(
areaDataList: API.AreaTreeNode[],
- parentId = '',
+ parentId = null,
maxLayer = AreaType.Area
) {
const treeNodeList: API.AreaTreeNode[] = [];
@@ -11,7 +11,9 @@
const areaTreeNode: API.AreaTreeNode = { ...areaData };
if (areaData.parentCode === parentId && areaData.layer <= maxLayer) {
const children = formatAreaListToTree(areaDataList, areaData.areaCode, maxLayer);
- areaTreeNode.children = children;
+ if (children.length > 0) {
+ areaTreeNode.children = children;
+ }
treeNodeList.push(areaTreeNode);
}
});
--
Gitblit v1.9.1