From 286f1b727856d6b32a8d237f353ae008f3076deb Mon Sep 17 00:00:00 2001
From: wupengfei <834520024@qq.com>
Date: 星期二, 11 三月 2025 17:48:15 +0800
Subject: [PATCH] feat: 接口对接
---
apps/cMiniApp/src/subpackages/mine/mineAgreementSign/InnerPage.vue | 2
apps/bMiniApp/src/constants/task.ts | 58 +++
apps/cMiniApp/src/subpackages/mine/mineCancel/InnerPage.vue | 2
apps/bMiniApp/src/subpackages/task/components/TaskCheckPersonalView.vue | 20
apps/bMiniApp/src/subpackages/task/taskManage/InnerPage.vue | 48 ++
apps/cMiniApp/src/subpackages/mine/mineSign/InnerPage.vue | 2
apps/bMiniApp/src/subpackages/task/publishTask/publishTask.vue | 2
packages/components/src/Card/TaskPrice.vue | 3
apps/bMiniApp/src/subpackages/jobApplicationManage/jobApplicationManage/jobApplicationManage.vue | 6
packages/constants/dic.ts | 56 --
apps/bMiniApp/src/subpackages/jobApplicationManage/components/SignList.vue | 24
apps/bMiniApp/src/subpackages/task/taskCheck/InnerPage.vue | 23
packages/components/src/Card/TaskCard.vue | 7
apps/bMiniApp/src/subpackages/task/components/TaskCheckCard.vue | 34 +
packages/components/src/Card/FlexJobTopView.vue | 27 +
packages/hooks/area.ts | 10
packages/components/src/index.ts | 1
apps/bMiniApp/src/subpackages/task/publishTask/InnerPage.vue | 176 +++++++--
apps/bMiniApp/src/subpackages/task/taskManage/taskManage.vue | 2
packages/components/src/Input/ChooseInputWithCheckbox.vue | 66 +++
packages/components/src/Card/JobApplicationCard.vue | 112 +++--
packages/components/src/ActionSheet/CheckboxActionSheet.vue | 86 ++++
packages/components/src/Input/ChooseInputWithDatePicker.vue | 1
apps/bMiniApp/src/subpackages/flexJob/flexJobDetailFromTask/InnerPage.vue | 36 +
apps/bMiniApp/src/subpackages/mine/mineFavorites/InnerPage.vue | 2
apps/cMiniApp/src/hooks/task.ts | 2
apps/bMiniApp/src/subpackages/flexJobManage/flexJobSign/InnerPage.vue | 2
apps/cMiniApp/src/subpackages/mine/mineCollectTask/InnerPage.vue | 2
apps/cMiniApp/src/subpackages/mine/mineHire/InnerPage.vue | 2
apps/bMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue | 40 +
packages/services/api/typings.d.ts | 26
apps/bMiniApp/src/subpackages/task/batchTaskList/InnerPage.vue | 41 +
apps/bMiniApp/src/subpackages/flexJobManage/flexJobManage/InnerPage.vue | 2
apps/bMiniApp/src/subpackages/mine/mineContactRecord/InnerPage.vue | 2
packages/components/src/Card/MyTaskCard.vue | 12
apps/bMiniApp/src/subpackages/jobApplicationManage/jobApplicationManage/InnerPage.vue | 112 ++++-
packages/components/src/Card/FlexJobCard.vue | 14
apps/bMiniApp/src/subpackages/jobApplicationManage/components/JobDetail.vue | 40 +
38 files changed, 840 insertions(+), 263 deletions(-)
diff --git a/apps/bMiniApp/src/constants/task.ts b/apps/bMiniApp/src/constants/task.ts
index 7dc7228..d0e14ad 100644
--- a/apps/bMiniApp/src/constants/task.ts
+++ b/apps/bMiniApp/src/constants/task.ts
@@ -71,3 +71,61 @@
[FlexTaskSettleTypeEnum.OfWeek]: '鍛ㄧ粨',
[FlexTaskSettleTypeEnum.OfDay]: '鏃ョ粨',
};
+
+export enum FlexTaskReleaseStatusEnum {
+ /**
+ * 鍙戝竷涓�
+ */
+ Releasing = 10,
+ /**
+ * 宸插仠姝�
+ */
+ Stoping = 20,
+}
+
+export const FlexTaskReleaseStatusEnumText = {
+ [FlexTaskReleaseStatusEnum.Releasing]: '鍙戝竷涓�',
+ [FlexTaskReleaseStatusEnum.Stoping]: '宸插仠姝�',
+};
+
+export enum FlexTaskWorkerHireEnum {
+ /**
+ * 寰呭鐞�
+ */
+ Wait = 10,
+ /**
+ * 宸插綍鐢�
+ */
+ Hired = 20,
+ /**
+ * 宸茶阿缁�
+ */
+ Refused = 30,
+}
+
+export const FlexTaskWorkerHireEnumText = {
+ [FlexTaskWorkerHireEnum.Wait]: '寰呭鐞�',
+ [FlexTaskWorkerHireEnum.Hired]: '宸插綍鐢�',
+ [FlexTaskWorkerHireEnum.Refused]: '宸茶阿缁�',
+};
+
+export enum FlexTaskCheckAcceptStatusEnum {
+ /**
+ * 寰呴獙鏀�
+ */
+ Wait = 10,
+ /**
+ * 楠屾敹閫氳繃
+ */
+ Passed = 20,
+ /**
+ * 楠屾敹鏈�氳繃
+ */
+ Refused = 30,
+}
+
+export const FlexTaskCheckAcceptStatusEnumText = {
+ [FlexTaskCheckAcceptStatusEnum.Wait]: '寰呴獙鏀�',
+ [FlexTaskCheckAcceptStatusEnum.Passed]: '楠屾敹閫氳繃',
+ [FlexTaskCheckAcceptStatusEnum.Refused]: '楠屾敹鏈�氳繃',
+};
diff --git a/apps/bMiniApp/src/subpackages/flexJob/flexJobDetailFromTask/InnerPage.vue b/apps/bMiniApp/src/subpackages/flexJob/flexJobDetailFromTask/InnerPage.vue
index 16454ef..2cc644d 100644
--- a/apps/bMiniApp/src/subpackages/flexJob/flexJobDetailFromTask/InnerPage.vue
+++ b/apps/bMiniApp/src/subpackages/flexJob/flexJobDetailFromTask/InnerPage.vue
@@ -2,8 +2,15 @@
<LoadingLayout :loading="isLoading" :error="isError" :loadError="refetch">
<JobDetailContent :isCollapse="true">
<template #footer>
- <PageFooterBtn type="primary" plain>璋㈢粷</PageFooterBtn>
- <PageFooterBtn type="primary">褰曠敤</PageFooterBtn>
+ <PageFooterBtn
+ type="primary"
+ plain
+ @click="taskWorkerHireRefuse(FlexTaskWorkerHireEnum.Refused)"
+ >璋㈢粷</PageFooterBtn
+ >
+ <PageFooterBtn type="primary" @click="taskWorkerHireRefuse(FlexTaskWorkerHireEnum.Hired)"
+ >褰曠敤</PageFooterBtn
+ >
</template>
</JobDetailContent>
</LoadingLayout>
@@ -13,6 +20,8 @@
import Taro from '@tarojs/taro';
import { useQuery } from '@tanstack/vue-query';
import * as flexWorkerServices from '@12333/services/api/FlexWorker';
+import { Message } from '@12333/utils';
+import { FlexTaskWorkerHireEnum } from '@/constants/task';
defineOptions({
name: 'InnerPage',
@@ -27,17 +36,34 @@
data: detail,
refetch,
} = useQuery({
- queryKey: ['flexWorkerServices/getOrdeForDetail', taskId],
+ queryKey: ['flexWorkerServices/getFlexTaskDto', taskId],
queryFn: async () => {
- return await flexWorkerServices.getOrdeForDetail(
+ return await flexWorkerServices.getFlexTaskDto(
{ id: taskId },
{
showLoading: false,
}
);
},
- placeholderData: () => ({} as API.OrderInfoDto),
+ placeholderData: () => ({} as API.GetFlexTaskDtoOutput),
});
+
+async function taskWorkerHireRefuse(hireStatus: FlexTaskWorkerHireEnum) {
+ try {
+ let params: API.TaskWorkerHireRefuseInput = {
+ flexTaskId: taskId,
+ flexWorkerId: detail.value?.taskId,
+ hireStatus: hireStatus,
+ };
+ let res = await flexWorkerServices.taskWorkerHireRefuse(params);
+ if (res) {
+ Message.success('鎿嶄綔鎴愬姛');
+ refetch({
+ type: 'inactive',
+ });
+ }
+ } catch (error) {}
+}
</script>
<style lang="scss">
diff --git a/apps/bMiniApp/src/subpackages/flexJobManage/flexJobManage/InnerPage.vue b/apps/bMiniApp/src/subpackages/flexJobManage/flexJobManage/InnerPage.vue
index 1ce13ca..65077aa 100644
--- a/apps/bMiniApp/src/subpackages/flexJobManage/flexJobManage/InnerPage.vue
+++ b/apps/bMiniApp/src/subpackages/flexJobManage/flexJobManage/InnerPage.vue
@@ -59,7 +59,7 @@
pageModel: {
rows: 20,
page: pageParam,
- orderInput: [{ property: 'isRecommend', order: OrderInputType.Desc }],
+ orderInput: [{ property: 'creationTime', order: OrderInputType.Desc }],
},
};
diff --git a/apps/bMiniApp/src/subpackages/flexJobManage/flexJobSign/InnerPage.vue b/apps/bMiniApp/src/subpackages/flexJobManage/flexJobSign/InnerPage.vue
index 4fd03da..da05e70 100644
--- a/apps/bMiniApp/src/subpackages/flexJobManage/flexJobSign/InnerPage.vue
+++ b/apps/bMiniApp/src/subpackages/flexJobManage/flexJobSign/InnerPage.vue
@@ -52,7 +52,7 @@
pageModel: {
rows: 20,
page: pageParam,
- orderInput: [{ property: 'isRecommend', order: OrderInputType.Desc }],
+ orderInput: [{ property: 'creationTime', order: OrderInputType.Desc }],
},
};
diff --git a/apps/bMiniApp/src/subpackages/jobApplicationManage/components/JobDetail.vue b/apps/bMiniApp/src/subpackages/jobApplicationManage/components/JobDetail.vue
index a58e780..ceb504a 100644
--- a/apps/bMiniApp/src/subpackages/jobApplicationManage/components/JobDetail.vue
+++ b/apps/bMiniApp/src/subpackages/jobApplicationManage/components/JobDetail.vue
@@ -1,15 +1,21 @@
<template>
<LoadingLayout :loading="isLoading" :error="isError" :loadError="refetch">
<ContentScrollView style="background-color: transparent">
- <Cell :title="'瀹㈡埧鏈嶅姟鍛�'" titleSize="large">
- <div class="taskDetail-time">2025骞�2鏈�5鏃� 鑷� 2025骞�3鏈�5鏃�</div>
+ <Cell :title="detail.taskName" titleSize="large">
+ <div class="taskDetail-time">
+ {{
+ `${dayjs(detail.startDate).format('YYYY骞碝M鏈圖D鏃�')}鑷�${dayjs(detail.endDate).format(
+ 'YYYY骞碝M鏈圖D鏃�'
+ )}`
+ }}
+ </div>
<div class="task-card-welfare-wrapper">
<div class="task-card-welfare-list">
- <div class="task-card-welfare-list-item">鏃ョ粨</div>
- <div class="task-card-welfare-list-item">鐢峰コ涓嶉檺</div>
- <div class="task-card-welfare-list-item">鍖呬笁椁�</div>
+ <div class="task-card-welfare-list-item">
+ {{ FlexTaskSettleTypeEnumText[detail.settleType] }}
+ </div>
</div>
- <TaskPrice :value="212" />
+ <TaskPrice :value="detail.fee" :unit="SalaryTimeTypeEnumUnit[detail.feeType]" />
</div>
<div class="taskDetail-address-wrapper">
<div class="taskDetail-address-title-wrapper">
@@ -25,11 +31,12 @@
<Cell :show-title="false">
<CellChunk title="绂忓埄淇℃伅">
<div class="taskDetail-welfare-list">
- <TaskDetailWelfareItem :icon="IconLocaltion" text="楂樻俯琛ヨ创" />
- <TaskDetailWelfareItem :icon="IconLocaltion" text="楂樻俯琛ヨ创" />
- <TaskDetailWelfareItem :icon="IconLocaltion" text="楂樻俯琛ヨ创" />
- <TaskDetailWelfareItem :icon="IconLocaltion" text="楂樻俯琛ヨ创" />
- <TaskDetailWelfareItem :icon="IconLocaltion" text="楂樻俯琛ヨ创" />
+ <TaskDetailWelfareItem
+ v-for="item in detail.taskWeals"
+ :key="item.id"
+ :icon="setOSSLink(item.name)"
+ :text="item.name"
+ />
</div>
</CellChunk>
</Cell>
@@ -43,6 +50,9 @@
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 dayjs from 'dayjs';
+import { setOSSLink } from '@12333/utils';
defineOptions({
name: 'JobDetail',
@@ -53,7 +63,7 @@
// const props = withDefaults(defineProps<Props>(), {});
const router = Taro.useRouter();
-const taskId = router.params?.id ?? 'c4cfe028-23e7-0be8-ee56-3a11e3743b9d';
+const taskId = router.params?.taskId;
const {
isLoading,
@@ -61,16 +71,16 @@
data: detail,
refetch,
} = useQuery({
- queryKey: ['flexWorkerServices/getOrdeForDetail', taskId],
+ queryKey: ['flexWorkerServices/getFlexTaskDto', taskId],
queryFn: async () => {
- return await flexWorkerServices.getOrdeForDetail(
+ return await flexWorkerServices.getFlexTaskDto(
{ id: taskId },
{
showLoading: false,
}
);
},
- placeholderData: () => ({} as API.OrderInfoDto),
+ placeholderData: () => ({} as API.GetFlexTaskDtoOutput),
onSuccess(data) {},
});
</script>
diff --git a/apps/bMiniApp/src/subpackages/jobApplicationManage/components/SignList.vue b/apps/bMiniApp/src/subpackages/jobApplicationManage/components/SignList.vue
index b78be59..10c56b0 100644
--- a/apps/bMiniApp/src/subpackages/jobApplicationManage/components/SignList.vue
+++ b/apps/bMiniApp/src/subpackages/jobApplicationManage/components/SignList.vue
@@ -1,12 +1,17 @@
<template>
<InfiniteLoading scrollViewClassName="common-infinite-scroll-list" v-bind="infiniteLoadingProps">
<template #renderItem="{ item }">
- <FlexJobCard>
+ <FlexJobCard
+ :name="item.name"
+ :age="item.age"
+ :genderType="item.genderType"
+ :workExperience="item.workExperience"
+ >
<template #footerLeft>
- <div class="flexJob-card-footer-text">宸插綍鐢�</div>
+ <div class="flexJob-card-footer-text">{{ FlexTaskWorkerHireEnum[item.hireStatus] }}</div>
</template>
<template #footerRight>
- <nut-button type="primary" @click="goToJobDetail(item.id)">鏌ョ湅璇︽儏</nut-button>
+ <nut-button type="primary" @click="goToJobDetail(item.userId)">鏌ョ湅璇︽儏</nut-button>
</template>
</FlexJobCard>
</template>
@@ -16,6 +21,7 @@
<script setup lang="ts">
import { OrderInputType } from '@12333/constants';
import { RouterPath } from '@/constants';
+import { FlexTaskWorkerHireEnum } from '@/constants/task';
import { useInfiniteLoading } from '@12333/hooks';
import * as flexWorkerServices from '@12333/services/api/FlexWorker';
import { FlexJobCard } from '@12333/components';
@@ -29,22 +35,26 @@
// const props = withDefaults(defineProps<Props>(), {});
+const router = Taro.useRouter();
+const taskId = router.params?.taskId ?? '';
+
const { infiniteLoadingProps } = useInfiniteLoading(
({ pageParam }) => {
- let params: API.GetFlexTaskListInput = {
+ let params: API.GetFlexTaskWorkerApplyListInput = {
+ flexTaskId: taskId,
pageModel: {
rows: 20,
page: pageParam,
- orderInput: [{ property: 'isRecommend', order: OrderInputType.Desc }],
+ orderInput: [{ property: 'creationTime', order: OrderInputType.Desc }],
},
};
- return flexWorkerServices.getFlexTaskByArrange(params, {
+ return flexWorkerServices.getFlexTaskWorkerApplyList(params, {
showLoading: false,
});
},
{
- queryKey: ['flexWorkerServices/getFlexTaskByArrange'],
+ queryKey: ['flexWorkerServices/getFlexTaskWorkerApplyList'],
}
);
diff --git a/apps/bMiniApp/src/subpackages/jobApplicationManage/jobApplicationManage/InnerPage.vue b/apps/bMiniApp/src/subpackages/jobApplicationManage/jobApplicationManage/InnerPage.vue
index c72c92e..38a6504 100644
--- a/apps/bMiniApp/src/subpackages/jobApplicationManage/jobApplicationManage/InnerPage.vue
+++ b/apps/bMiniApp/src/subpackages/jobApplicationManage/jobApplicationManage/InnerPage.vue
@@ -1,22 +1,49 @@
<template>
<ProTabs
- v-model="queryState.mineHireType"
+ v-model="queryState.flexTaskReleaseStatus"
name="home-tab"
:showPaneContent="false"
class="home-tabs"
isTransparent
title-gutter="12"
title-scroll
+ @change="invalidateQueries"
>
- <ProTabPane :title="`鍙戝竷涓�(${1})`" :pane-key="0"></ProTabPane>
- <ProTabPane :title="`宸插仠姝�(${1})`" :pane-key="10"></ProTabPane>
+ <ProTabPane
+ :title="`${
+ FlexTaskReleaseStatusEnumText[FlexTaskReleaseStatusEnum.Releasing]
+ }(${releaseing})`"
+ :pane-key="FlexTaskReleaseStatusEnum.Releasing"
+ ></ProTabPane>
+ <ProTabPane
+ :title="`${FlexTaskReleaseStatusEnumText[FlexTaskReleaseStatusEnum.Stoping]}(${stoping})`"
+ :pane-key="FlexTaskReleaseStatusEnum.Stoping"
+ ></ProTabPane>
</ProTabs>
<InfiniteLoading
scrollViewClassName="common-infinite-scroll-list home-list"
v-bind="infiniteLoadingProps"
+ :key="queryState.flexTaskReleaseStatus"
>
<template #renderItem="{ item }">
- <JobApplicationCard @edit="goEdit" @detail="goDetail"> </JobApplicationCard>
+ <JobApplicationCard
+ :taskName="item.taskName"
+ :startDate="item.startDate"
+ :endDate="item.endDate"
+ :creationTime="item.creationTime"
+ :address="item.address"
+ :fee="item.fee"
+ :applyWorkerCount="item.applyWorkerCount"
+ :unit="SalaryTimeTypeEnumUnit[item.feeType]"
+ :releaseStatus="item.releaseStatus"
+ @edit="goEdit(item)"
+ @copy="goEdit(item, true)"
+ @detail="goDetail(item)"
+ @publish="handleChangeStatus(item, FlexTaskReleaseStatusEnum.Releasing)"
+ @stop="handleChangeStatus(item, FlexTaskReleaseStatusEnum.Stoping)"
+ @delete="handleDelete(item)"
+ >
+ </JobApplicationCard>
</template>
</InfiniteLoading>
</template>
@@ -26,54 +53,95 @@
import { RouterPath } from '@/constants';
import { useInfiniteLoading } from '@12333/hooks';
import { OrderInputType } from '@12333/constants';
+import {
+ FlexTaskReleaseStatusEnum,
+ FlexTaskReleaseStatusEnumText,
+ SalaryTimeTypeEnumUnit,
+} from '@/constants/task';
import * as flexWorkerServices from '@12333/services/api/FlexWorker';
-import { TaskStatus } from '@/constants/task';
import Taro from '@tarojs/taro';
+import { Message } from '@12333/utils';
defineOptions({
name: 'InnerPage',
});
const queryState = reactive({
- mineHireType: TaskStatus.All,
+ flexTaskReleaseStatus: FlexTaskReleaseStatusEnum.Releasing,
});
-const { infiniteLoadingProps } = useInfiniteLoading(
+const { infiniteLoadingProps, invalidateQueries } = useInfiniteLoading(
({ pageParam }) => {
- let params: API.GetFlexTaskListInput = {
+ let params: API.GetFlexTaskListByStatusInput = {
+ releaseStatus: queryState.flexTaskReleaseStatus,
pageModel: {
rows: 20,
page: pageParam,
- orderInput: [{ property: 'isRecommend', order: OrderInputType.Desc }],
+ orderInput: [{ property: 'creationTime', order: OrderInputType.Desc }],
},
};
- return flexWorkerServices.getFlexTaskByArrange(params, {
+ return flexWorkerServices.getFlexTaskList(params, {
showLoading: false,
});
},
{
- queryKey: ['flexWorkerServices/getFlexTaskByArrange'],
+ queryKey: ['flexWorkerServices/getFlexTaskList'],
}
);
-function goPage(routeName: string) {
- Taro.navigateTo({
- url: routeName,
- });
+const releaseing = computed(() => {
+ return infiniteLoadingProps.value?.listData?.pages?.[0]?.objectData?.releaseing ?? 0;
+});
+const stoping = computed(() => {
+ return infiniteLoadingProps.value?.listData?.pages?.[0]?.objectData?.stoping ?? 0;
+});
+
+async function handleChangeStatus(
+ item: API.GetFlexTaskListOutput,
+ releaseStatus: FlexTaskReleaseStatusEnum
+) {
+ try {
+ let params: API.UpdateTaskReleaseStatusInput = {
+ taskId: item.taskId,
+ releaseStatus: releaseStatus,
+ };
+ let res = await flexWorkerServices.updateFlexTaskReleaseStatus(params);
+ if (res) {
+ Message.success('鎿嶄綔鎴愬姛');
+ invalidateQueries();
+ }
+ } catch (error) {}
}
-function goEdit() {
- goPage(RouterPath.publishTask);
+async function handleDelete(item: API.GetFlexTaskListOutput) {
+ try {
+ await Message.confirm({
+ message: '纭畾瑕佸垹闄ゅ悧锛�',
+ });
+ let params: API.APIdeleteFlexTaskParams = {
+ id: item.taskId,
+ };
+ let res = await flexWorkerServices.deleteFlexTask(params);
+ if (res) {
+ Message.success('鍒犻櫎鎴愬姛');
+ invalidateQueries();
+ }
+ } catch (error) {}
}
-function goDetail() {
- goPage(RouterPath.jobApplicationDetail);
+
+function goEdit(item: API.GetFlexTaskListOutput, isCopy = false) {
+ Taro.navigateTo({
+ url: `${RouterPath.publishTask}?taskId=${item.taskId}&isCopy=${isCopy}`,
+ });
+}
+function goDetail(item: API.GetFlexTaskListOutput) {
+ Taro.navigateTo({
+ url: `${RouterPath.jobApplicationDetail}?taskId=${item.taskId}`,
+ });
}
</script>
<style lang="scss">
@import '@/styles/common.scss';
-
-// .jobApplicationManage-page-wrapper {
-// }
</style>
diff --git a/apps/bMiniApp/src/subpackages/jobApplicationManage/jobApplicationManage/jobApplicationManage.vue b/apps/bMiniApp/src/subpackages/jobApplicationManage/jobApplicationManage/jobApplicationManage.vue
index ffe2e4a..ea7e836 100644
--- a/apps/bMiniApp/src/subpackages/jobApplicationManage/jobApplicationManage/jobApplicationManage.vue
+++ b/apps/bMiniApp/src/subpackages/jobApplicationManage/jobApplicationManage/jobApplicationManage.vue
@@ -1,5 +1,9 @@
<template>
- <PageLayoutWithBg class="jobApplicationManage-page-wrapper" :title="'搴旇仒绠$悊'">
+ <PageLayoutWithBg
+ class="jobApplicationManage-page-wrapper"
+ :title="'搴旇仒绠$悊'"
+ :need-auth="false"
+ >
<InnerPage></InnerPage>
</PageLayoutWithBg>
</template>
diff --git a/apps/bMiniApp/src/subpackages/mine/mineContactRecord/InnerPage.vue b/apps/bMiniApp/src/subpackages/mine/mineContactRecord/InnerPage.vue
index 03a3ee4..3869b14 100644
--- a/apps/bMiniApp/src/subpackages/mine/mineContactRecord/InnerPage.vue
+++ b/apps/bMiniApp/src/subpackages/mine/mineContactRecord/InnerPage.vue
@@ -28,7 +28,7 @@
pageModel: {
rows: 20,
page: pageParam,
- orderInput: [{ property: 'isRecommend', order: OrderInputType.Desc }],
+ orderInput: [{ property: 'creationTime', order: OrderInputType.Desc }],
},
};
diff --git a/apps/bMiniApp/src/subpackages/mine/mineFavorites/InnerPage.vue b/apps/bMiniApp/src/subpackages/mine/mineFavorites/InnerPage.vue
index bb377c0..380011f 100644
--- a/apps/bMiniApp/src/subpackages/mine/mineFavorites/InnerPage.vue
+++ b/apps/bMiniApp/src/subpackages/mine/mineFavorites/InnerPage.vue
@@ -28,7 +28,7 @@
pageModel: {
rows: 20,
page: pageParam,
- orderInput: [{ property: 'isRecommend', order: OrderInputType.Desc }],
+ orderInput: [{ property: 'creationTime', order: OrderInputType.Desc }],
},
};
diff --git a/apps/bMiniApp/src/subpackages/task/batchTaskList/InnerPage.vue b/apps/bMiniApp/src/subpackages/task/batchTaskList/InnerPage.vue
index df5b28a..ae81c7c 100644
--- a/apps/bMiniApp/src/subpackages/task/batchTaskList/InnerPage.vue
+++ b/apps/bMiniApp/src/subpackages/task/batchTaskList/InnerPage.vue
@@ -9,9 +9,16 @@
</div>
<InfiniteLoading scrollViewClassName="common-infinite-scroll-list" v-bind="infiniteLoadingProps">
<template #renderItem="{ item }">
- <FlexJobCard :showFooterLeft="false">
+ <FlexJobCard
+ :name="item.name"
+ :genderType="item.genderType"
+ :age="item.age"
+ :educationalLevel="item.educationalLevel"
+ :arrangeCount="item.arrangeCount"
+ :showFooterLeft="false"
+ >
<template #footerRight>
- <nut-button type="primary">瀹夋帓</nut-button>
+ <nut-button type="primary" @click="handleArrange(item)">瀹夋帓</nut-button>
<!-- <div class="batch-task-card-status">宸插畨鎺�</div> -->
</template>
</FlexJobCard>
@@ -25,7 +32,7 @@
import { OrderInputType } from '@12333/constants';
import * as flexWorkerServices from '@12333/services/api/FlexWorker';
import _ from 'lodash';
-import { trim } from '@12333/utils';
+import { Message, trim } from '@12333/utils';
import { FlexJobCard } from '@12333/components';
defineOptions({
@@ -33,7 +40,8 @@
});
const searchValue = ref('');
-
+const router = Taro.useRouter();
+const taskId = router.params?.taskId ?? '';
const queryState = reactive({
searchValueTrim: '',
});
@@ -42,9 +50,11 @@
queryState.searchValueTrim = trim(searchValue.value);
}, 300);
-const { infiniteLoadingProps } = useInfiniteLoading(
+const { infiniteLoadingProps, invalidateQueries } = useInfiniteLoading(
({ pageParam }) => {
- let params: API.GetFlexTaskListInput = {
+ let params: API.GetFlexTaskWorkerArrangeListInput = {
+ searchKeys: queryState.searchValueTrim,
+ flexTaskId: taskId,
pageModel: {
rows: 20,
page: pageParam,
@@ -52,14 +62,29 @@
},
};
- return flexWorkerServices.getFlexTaskByArrange(params, {
+ return flexWorkerServices.getFlexTaskWorkerArrangeList(params, {
showLoading: false,
});
},
{
- queryKey: ['flexWorkerServices/getFlexTaskByArrange', queryState],
+ queryKey: ['flexWorkerServices/getFlexTaskWorkerArrangeList', queryState],
}
);
+
+async function handleArrange(item: API.GetNewestWorkerListOutput) {
+ try {
+ let params: API.TaskWorkerArrangeInput = {
+ flexTaskId: taskId,
+ flexWorkerId: item.userId,
+ arrange: true,
+ };
+ let res = await flexWorkerServices.taskWorkerArrange(params);
+ if (res) {
+ Message.success('宸插畨鎺�');
+ invalidateQueries();
+ }
+ } catch (error) {}
+}
</script>
<style lang="scss">
diff --git a/apps/bMiniApp/src/subpackages/task/components/TaskCheckCard.vue b/apps/bMiniApp/src/subpackages/task/components/TaskCheckCard.vue
index db091ef..d95e866 100644
--- a/apps/bMiniApp/src/subpackages/task/components/TaskCheckCard.vue
+++ b/apps/bMiniApp/src/subpackages/task/components/TaskCheckCard.vue
@@ -1,9 +1,23 @@
<template>
<div class="task-check-card-wrapper">
- <TaskCheckPersonalView class="task-check-card-view">
+ <TaskCheckPersonalView
+ class="task-check-card-view"
+ :avatarUrl="avatarUrl"
+ :name="name"
+ :genderType="genderType"
+ :isRealName="isRealName"
+ :contactPhone="contactPhone"
+ >
<template #actions>
- <nut-button type="primary" class="task-check-card-phone-btn">楠屾敹</nut-button>
- <!-- <div class="task-check-card-phone-status" :style="{ color: Colors.Success }">楠屾敹閫氳繃</div> -->
+ <nut-button
+ v-if="checkAcceptStatus === FlexTaskCheckAcceptStatusEnum.Wait"
+ type="primary"
+ class="task-check-card-phone-btn"
+ >楠屾敹</nut-button
+ >
+ <div v-else class="task-check-card-phone-status" :style="{ color: Colors.Success }">
+ {{ FlexTaskCheckAcceptStatusEnumText[checkAcceptStatus] }}
+ </div>
</template>
</TaskCheckPersonalView>
</div>
@@ -11,15 +25,23 @@
<script setup lang="ts">
import TaskCheckPersonalView from './TaskCheckPersonalView.vue';
-import { Colors } from '@12333/constants';
+import { Colors, Gender } from '@12333/constants';
+import { FlexTaskCheckAcceptStatusEnum, FlexTaskCheckAcceptStatusEnumText } from '@/constants/task';
defineOptions({
name: 'TaskCheckCard',
});
-// type Props = {};
+type Props = {
+ avatarUrl?: string;
+ name?: string;
+ genderType?: Gender;
+ isRealName?: boolean;
+ contactPhone?: string;
+ checkAcceptStatus?: API.FlexTaskCheckAcceptStatusEnum;
+};
-// const props = withDefaults(defineProps<Props>(), {});
+const props = withDefaults(defineProps<Props>(), {});
</script>
<style lang="scss">
diff --git a/apps/bMiniApp/src/subpackages/task/components/TaskCheckPersonalView.vue b/apps/bMiniApp/src/subpackages/task/components/TaskCheckPersonalView.vue
index 1b76904..55a7923 100644
--- a/apps/bMiniApp/src/subpackages/task/components/TaskCheckPersonalView.vue
+++ b/apps/bMiniApp/src/subpackages/task/components/TaskCheckPersonalView.vue
@@ -1,10 +1,15 @@
<template>
- <FlexJobTopView>
+ <FlexJobTopView
+ :avatarUrl="avatarUrl"
+ :name="name"
+ :genderType="genderType"
+ :isRealName="isRealName"
+ >
<template #detail>
<div class="task-check-card-phone-container">
<div class="task-check-card-phone-wrapper">
<div class="task-check-card-phone-label">鎵嬫満鍙凤細</div>
- <div class="task-check-card-phone">13000000000</div>
+ <div class="task-check-card-phone">{{ contactPhone }}</div>
</div>
<slot name="actions"></slot>
</div>
@@ -14,10 +19,21 @@
<script setup lang="ts">
import { FlexJobTopView } from '@12333/components';
+import { Gender } from '@12333/constants';
defineOptions({
name: 'TaskCheckPersonalView',
});
+
+type Props = {
+ avatarUrl?: string;
+ name?: string;
+ genderType?: Gender;
+ isRealName?: boolean;
+ contactPhone?: string;
+};
+
+const props = withDefaults(defineProps<Props>(), {});
</script>
<style lang="scss">
diff --git a/apps/bMiniApp/src/subpackages/task/publishTask/InnerPage.vue b/apps/bMiniApp/src/subpackages/task/publishTask/InnerPage.vue
index 0b3ad58..738ce69 100644
--- a/apps/bMiniApp/src/subpackages/task/publishTask/InnerPage.vue
+++ b/apps/bMiniApp/src/subpackages/task/publishTask/InnerPage.vue
@@ -6,10 +6,11 @@
</nut-form-item>
<nut-form-item
label="鏈嶅姟璐�:"
- class="bole-form-item"
+ class="bole-form-item alignTop"
prop="feeType"
required
label-width="90px"
+ label-position="top"
>
<nut-radio-group v-model="form.feeType" direction="horizontal">
<BlRadio :label="Number(key)" v-for="(val, key) in FlexTaskFeeTypeEnumText" :key="key">{{
@@ -17,7 +18,7 @@
}}</BlRadio>
</nut-radio-group>
</nut-form-item>
- <nut-form-item label=" " class="bole-form-item" prop="fee" label-width="90px">
+ <nut-form-item label=" " class="bole-form-item" prop="fee" label-width="0">
<div class="bole-form-input-wrapper">
<nut-input
v-model.trim="form.fee"
@@ -44,55 +45,62 @@
>
</nut-radio-group>
</nut-form-item>
- <nut-form-item label="绂忓埄:" class="bole-form-item" prop="listAideIds" label-width="90px">
- <ChooseInputWithPicker
+ <nut-form-item label="绂忓埄:" class="bole-form-item" prop="settleType" label-width="90px">
+ <ChooseInputWithCheckbox
v-model="form.listAideIds"
+ title="璇烽�夋嫨绂忓埄"
+ :columns="WelfareTypeList"
placeholder="璇烽�夋嫨绂忓埄"
- :value-enum="TaskStatusText"
/>
</nut-form-item>
<nut-form-item
label="骞撮緞鑼冨洿:"
class="bole-form-item"
- prop="ageStart"
+ prop="minAge"
required
label-width="90px"
>
<div class="bole-form-input-wrapper">
<NumberInput
- v-model.trim="form.ageStart"
+ v-model.trim="form.minAge"
class="nut-input-text bole-input-text"
placeholder="璇烽�夋嫨骞撮緞鑼冨洿"
:min="1"
/>
<div class="form-input-separator">鑷�</div>
<NumberInput
- v-model.trim="form.ageEnd"
+ v-model.trim="form.maxAge"
class="nut-input-text bole-input-text"
placeholder="璇烽�夋嫨骞撮緞鑼冨洿"
:min="1"
/>
</div>
</nut-form-item>
- <nut-form-item label="鎬у埆:" class="bole-form-item" prop="welfare" label-width="90px">
+ <nut-form-item label="鎬у埆:" class="bole-form-item" prop="sexType" label-width="90px">
<ChooseInputWithPicker
- v-model="form.welfare"
+ v-model="form.sexType"
placeholder="璇烽�夋嫨鎬у埆瑕佹眰"
- :value-enum="TaskStatusText"
+ :value-enum="GenderText"
/>
</nut-form-item>
- <nut-form-item label="璧勬牸璇佷功:" class="bole-form-item" prop="welfare" label-width="90px">
- <ChooseInputWithPicker
- v-model="form.welfare"
- placeholder="璇烽�夋嫨瑕佹眰鐨勮祫鏍艰瘉涔�"
- :value-enum="TaskStatusText"
+ <nut-form-item label="璧勬牸璇佷功:" class="bole-form-item" prop="settleType" label-width="90px">
+ <ChooseInputWithCheckbox
+ v-model="form.listCertionIds"
+ title="璇烽�夋嫨璧勬牸璇佷功"
+ :columns="CertificateTypeList"
+ placeholder="璇烽�夋嫨璧勬牸璇佷功"
/>
</nut-form-item>
- <nut-form-item label="浠诲姟鍦扮偣" class="bole-form-item" prop="weMapInfo" required>
- <ChooseLocationInput placeholder="璇烽�夋嫨浠诲姟鎵�鍦ㄥ湴" v-model="form.weMapInfo" />
+ <nut-form-item label="浠诲姟鍦扮偣" class="bole-form-item" prop="areaList" required>
+ <!-- <ChooseLocationInput placeholder="璇烽�夋嫨浠诲姟鎵�鍦ㄥ湴" v-model="form.weMapInfo" /> -->
+ <ChooseInputWithAreaPicker
+ :columns="areaTreeList"
+ v-model="form.areaList"
+ placeholder="璇烽�夋嫨鎵�鍦ㄥ湴鍖�"
+ ></ChooseInputWithAreaPicker>
</nut-form-item>
- <nut-form-item label="璇︾粏鍦板潃:" class="bole-form-item" prop="name" label-width="90px">
- <nut-input v-model="form.name" placeholder="璇疯緭鍏ヨ缁嗗湴鍧�"> </nut-input>
+ <nut-form-item label="璇︾粏鍦板潃:" class="bole-form-item" prop="address" label-width="90px">
+ <nut-input v-model="form.address" placeholder="璇疯緭鍏ヨ缁嗗湴鍧�"> </nut-input>
</nut-form-item>
<nut-form-item
label="浠诲姟寮�濮嬫棩鏈�:"
@@ -115,8 +123,6 @@
<script setup lang="ts">
import {
- TaskStatus,
- TaskStatusText,
FlexTaskSettleTypeEnum,
FlexTaskSettleTypeEnumText,
FlexTaskFeeTypeEnum,
@@ -130,21 +136,37 @@
NumberInput,
ChooseLocationInput,
Radio as BlRadio,
+ ChooseInputWithAreaPicker,
+ ChooseInputWithCheckbox,
} from '@12333/components';
import { FormValidator, Message } from '@12333/utils';
import * as flexWorkerServices from '@12333/services/api/FlexWorker';
import { FormRules } from '@nutui/nutui-taro/dist/types/__VUE/form/types';
import Taro from '@tarojs/taro';
import { goBack } from '@/utils';
+import { Gender, GenderText, SearchType } from '@12333/constants';
+import { useAllAreaList, useSearchSettingType } from '@12333/hooks';
+import { useQuery } from '@tanstack/vue-query';
+import dayjs from 'dayjs';
defineOptions({
name: 'InnerPage',
});
const { userDetail } = useUser();
+const { areaTreeList } = useAllAreaList();
const router = Taro.useRouter();
const taskId = router.params?.taskId ?? '';
-const isEdit = computed(() => !!taskId);
+const isEdit = !!taskId;
+const isCopy = router.params?.isCopy === 'true';
+console.log('isCopy: ', router.params?.isCopy);
+
+const { searchSettingTypeList: WelfareTypeList } = useSearchSettingType({
+ searchType: SearchType.Welfare,
+});
+const { searchSettingTypeList: CertificateTypeList } = useSearchSettingType({
+ searchType: SearchType.CertificateType,
+});
const form = reactive({
taskName: '',
@@ -152,43 +174,101 @@
fee: 0,
settleType: FlexTaskSettleTypeEnum.OfMonth,
listAideIds: [] as string[],
-
- welfare: TaskStatus.All,
- salaryTimeType: SalaryTimeTypeEnum.Month,
- salaryType: SalaryType.month,
+ minAge: 0,
+ maxAge: 0,
+ sexType: Gender.Male,
+ listCertionIds: [] as string[],
+ address: '',
startDate: '',
endDate: '',
- ageStart: '',
- ageEnd: '',
+ areaList: [] as number[],
+
weMapInfo: {} as WeMapModel,
});
const rules = reactive<FormRules>({
taskName: [{ required: true, message: '璇疯緭鍏ヤ换鍔″悕绉�' }],
- weMapInfo: [
- { required: true, message: '璇疯缃伐浣滃湴鐐�', validator: FormValidator.validatorWeMap },
+ // weMapInfo: [
+ // { required: true, message: '璇疯缃伐浣滃湴鐐�', validator: FormValidator.validatorWeMap },
+ // ],
+ areaList: [
+ { required: true, message: '娓呮坊鍔犲伐浣滃湴鐐�', validator: FormValidator.validatorArray },
],
- ageStart: [
+ minAge: [
{
required: true,
message: '璇疯緭鍏ュ勾榫勮姹�',
validator: () => {
- if (!form.ageStart) {
+ if (!form.minAge) {
return Promise.reject('璇疯緭鍏ュ勾榫勮姹�');
}
- if (!form.ageEnd) {
+ if (!form.maxAge) {
return Promise.reject('璇疯緭鍏ュ勾榫勮姹�');
}
- if (Number(form.ageEnd) <= Number(form.ageStart)) {
+ if (Number(form.maxAge) <= Number(form.minAge)) {
return Promise.reject('鏈�澶у勾榫勪笉鑳藉皬浜庢渶灏忓勾榫�');
}
return Promise.resolve(true);
},
},
],
+
+ startDate: [
+ {
+ 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);
+ },
+ },
+ ],
});
+
+const {
+ isLoading,
+ isError,
+ data: detail,
+ refetch,
+} = useQuery({
+ queryKey: ['flexWorkerServices/getFlexTaskDto', taskId],
+ queryFn: async () => {
+ return await flexWorkerServices.getFlexTaskDto(
+ { id: taskId },
+ {
+ showLoading: false,
+ }
+ );
+ },
+ placeholderData: () => ({} as API.GetFlexTaskDtoOutput),
+ enabled: isEdit,
+ onSuccess(data) {
+ form.taskName = data.taskName;
+ form.feeType = data.feeType;
+ form.fee = data.fee;
+ form.settleType = data.settleType;
+ form.listAideIds = data.taskWeals?.length > 0 ? data.taskWeals.map((item) => item.id) : [];
+ form.minAge = data.minAge;
+ form.maxAge = data.maxAge;
+ form.sexType = data.sexType;
+ form.listCertionIds = data.taskCerts?.length > 0 ? data.taskCerts.map((item) => item.id) : [];
+ form.address = data.address;
+ form.startDate = dayjs(data.startDate).format('YYYY-MM-DD');
+ form.endDate = dayjs(data.endDate).format('YYYY-MM-DD');
+ form.areaList = [data.provinceId, data.cityId, data.areaId];
+ form.address = data.address;
+ },
+});
+
const formRef = ref<any>(null);
function handleConfirm() {
if (!formRef.value) return;
@@ -203,14 +283,30 @@
try {
let params: API.AddEidtFlexTaskInput = {
taskName: form.taskName,
- feeType: form.salaryType,
+ feeType: form.feeType,
+ fee: form.fee,
+ settleType: form.settleType,
+ listAideIds: form.listAideIds,
+ minAge: form.minAge,
+ maxAge: form.maxAge,
+ sexType: form.sexType,
+ listCertionIds: form.listCertionIds,
+ address: form.address,
+ startDate: form.startDate,
+ endDate: form.endDate,
+ provinceId: form.areaList[0],
+ cityId: form.areaList[1],
+ areaId: form.areaList[2],
};
- if (isEdit.value) {
+ if (isEdit) {
params.taskId = taskId;
+ }
+ if (isCopy) {
+ params.taskId = '';
}
let res = await flexWorkerServices.addEidtFlexTask(params);
if (res) {
- Message.success(isEdit.value ? '缂栬緫鎴愬姛' : '鍙戝竷鎴愬姛', {
+ Message.success(isEdit ? '缂栬緫鎴愬姛' : '鍙戝竷鎴愬姛', {
onClosed() {
goBack();
},
@@ -238,5 +334,9 @@
color: boleGetCssVar('text-color', 'primary');
flex-shrink: 0;
}
+
+ .form-input-separator {
+ margin-right: 10px;
+ }
}
</style>
diff --git a/apps/bMiniApp/src/subpackages/task/publishTask/publishTask.vue b/apps/bMiniApp/src/subpackages/task/publishTask/publishTask.vue
index bc207c6..7a6f3d4 100644
--- a/apps/bMiniApp/src/subpackages/task/publishTask/publishTask.vue
+++ b/apps/bMiniApp/src/subpackages/task/publishTask/publishTask.vue
@@ -1,5 +1,5 @@
<template>
- <PageLayout class="publishTask-page-wrapper" :title="'鍙戝竷鎷涜仒'" has-border>
+ <PageLayout class="publishTask-page-wrapper" :title="'鍙戝竷鎷涜仒'" has-border :need-auth="false">
<InnerPage></InnerPage>
</PageLayout>
</template>
diff --git a/apps/bMiniApp/src/subpackages/task/taskCheck/InnerPage.vue b/apps/bMiniApp/src/subpackages/task/taskCheck/InnerPage.vue
index 45989d8..aba6805 100644
--- a/apps/bMiniApp/src/subpackages/task/taskCheck/InnerPage.vue
+++ b/apps/bMiniApp/src/subpackages/task/taskCheck/InnerPage.vue
@@ -9,8 +9,8 @@
title-gutter="8"
title-scroll
>
- <ProTabPane :title="`寰呴獙鏀禶" :pane-key="10"></ProTabPane>
- <ProTabPane :title="`宸查獙鏀禶" :pane-key="20"></ProTabPane>
+ <ProTabPane title="寰呴獙鏀�" pane-key="10"></ProTabPane>
+ <ProTabPane title="宸查獙鏀�" pane-key="20"></ProTabPane>
</ProTabs>
<InfiniteLoading
scrollViewClassName="common-infinite-scroll-list"
@@ -18,7 +18,13 @@
:key="queryState.status"
>
<template #renderItem="{ item }">
- <MyTaskCard @click="goSubmitTaskDetail(item)" />
+ <MyTaskCard
+ :taskName="item.taskName"
+ :startDate="item.startDate"
+ :endDate="item.endDate"
+ :address="item.address"
+ @click="goSubmitTaskDetail(item)"
+ />
</template>
</InfiniteLoading>
</template>
@@ -35,32 +41,33 @@
});
const queryState = reactive({
- status: 10,
+ status: '10',
date: new Date(),
});
const { infiniteLoadingProps } = useInfiniteLoading(
({ pageParam }) => {
let params: API.GetFlexTaskListInput = {
+ isOverCheck: queryState.status === '20',
pageModel: {
rows: 20,
page: pageParam,
- orderInput: [{ property: 'lastShelfTime', order: OrderInputType.Desc }],
+ orderInput: [{ property: 'creationTime', order: OrderInputType.Desc }],
},
};
- return flexWorkerServices.getFlexTaskByArrange(params, {
+ return flexWorkerServices.getFlexTaskByIsOverCheck(params, {
showLoading: false,
});
},
{
- queryKey: ['flexWorkerServices/getFlexTaskByArrange', queryState],
+ queryKey: ['flexWorkerServices/getFlexTaskByIsOverCheck', queryState],
}
);
function goSubmitTaskDetail(item: API.GetFlexTaskListOutput) {
Taro.navigateTo({
- url: `${RouterPath.taskCheckDetail}?id=${item.id}`,
+ url: `${RouterPath.taskCheckDetail}?taskId=${item.taskId}`,
});
}
</script>
diff --git a/apps/bMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue b/apps/bMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue
index e5b78fb..85e4494 100644
--- a/apps/bMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue
+++ b/apps/bMiniApp/src/subpackages/task/taskCheckDetail/InnerPage.vue
@@ -1,7 +1,12 @@
<template>
<LoadingLayout :loading="isLoading" :error="isError" :loadError="refetch">
<ContentView>
- <MyTaskCard :showMyTaskArrow="false" :showTime="false"></MyTaskCard>
+ <MyTaskCard
+ :task-name="detail.taskName"
+ :address="address"
+ :showMyTaskArrow="false"
+ :showTime="false"
+ ></MyTaskCard>
<ChunkTitle title="楠屾敹鍒楄〃" />
</ContentView>
<InfiniteLoading
@@ -10,7 +15,15 @@
:key="queryState.status"
>
<template #renderItem="{ item }">
- <TaskCheckCard @click="goHandleTaskDetail(item)" />
+ <TaskCheckCard
+ :avatarUrl="setOSSLink(item.avatarUrl)"
+ :name="item.name"
+ :genderType="item.genderType"
+ :isRealName="item.isRealName"
+ :contactPhone="item.contactPhone"
+ :checkAcceptStatus="item.checkAcceptStatus"
+ @click="goHandleTaskDetail(item)"
+ />
</template>
</InfiniteLoading>
</LoadingLayout>
@@ -24,13 +37,14 @@
import { OrderInputType } from '@12333/constants';
import TaskCheckCard from '../components/TaskCheckCard.vue';
import { MyTaskCard } from '@12333/components';
+import { setOSSLink } from '@12333/utils';
defineOptions({
name: 'InnerPage',
});
const router = Taro.useRouter();
-const taskId = router.params?.id ?? '';
+const taskId = router.params?.taskId ?? '';
const {
isLoading,
@@ -38,16 +52,20 @@
data: detail,
refetch,
} = useQuery({
- queryKey: ['flexWorkerServices/getOrdeForDetail', taskId],
+ queryKey: ['flexWorkerServices/getFlexTaskDto', taskId],
queryFn: async () => {
- return await flexWorkerServices.getOrdeForDetail(
+ return await flexWorkerServices.getFlexTaskDto(
{ id: taskId },
{
showLoading: false,
}
);
},
- placeholderData: () => ({} as API.OrderInfoDto),
+ placeholderData: () => ({} as API.GetFlexTaskDtoOutput),
+});
+
+const address = computed(() => {
+ return `${detail.value.provinceName} ${detail.value.cityName} ${detail.value.areaName} ${detail.value.address}`;
});
const queryState = reactive({
@@ -56,7 +74,7 @@
const { infiniteLoadingProps } = useInfiniteLoading(
({ pageParam }) => {
- let params: API.GetFlexTaskListInput = {
+ let params: API.GetFlexTaskWorkerCheckListInput = {
pageModel: {
rows: 20,
page: pageParam,
@@ -64,18 +82,18 @@
},
};
- return flexWorkerServices.getFlexTaskByArrange(params, {
+ return flexWorkerServices.getFlexTaskWorkerCheckList(params, {
showLoading: false,
});
},
{
- queryKey: ['flexWorkerServices/getFlexTaskByArrange', queryState],
+ queryKey: ['flexWorkerServices/getFlexTaskWorkerCheckList', queryState],
}
);
-function goHandleTaskDetail(item: API.GetFlexTaskListOutput) {
+function goHandleTaskDetail(item: API.GetNewestWorkerListOutput) {
Taro.navigateTo({
- url: `${RouterPath.taskHandleCheckDetail}?id=${item.id}`,
+ url: `${RouterPath.taskHandleCheckDetail}?userId=${item.userId}`,
});
}
</script>
diff --git a/apps/bMiniApp/src/subpackages/task/taskManage/InnerPage.vue b/apps/bMiniApp/src/subpackages/task/taskManage/InnerPage.vue
index abb2d1f..14184b8 100644
--- a/apps/bMiniApp/src/subpackages/task/taskManage/InnerPage.vue
+++ b/apps/bMiniApp/src/subpackages/task/taskManage/InnerPage.vue
@@ -8,8 +8,8 @@
title-gutter="8"
title-scroll
>
- <ProTabPane :title="`寰呭畨鎺�(10)`" :pane-key="10"></ProTabPane>
- <ProTabPane :title="`宸插畨鎺�(11)`" :pane-key="20"></ProTabPane>
+ <ProTabPane :title="`寰呭畨鎺�(${notCount})`" pane-key="10"></ProTabPane>
+ <ProTabPane :title="`宸插畨鎺�(${hasCount})`" pane-key="20"></ProTabPane>
</ProTabs>
<InfiniteLoading
scrollViewClassName="common-infinite-scroll-list"
@@ -17,10 +17,27 @@
:key="queryState.status"
>
<template #renderItem="{ item }">
- <JobApplicationCard @click="goSubmitTaskDetail(item)" mode="taskManage">
+ <JobApplicationCard
+ :taskName="item.taskName"
+ :startDate="item.startDate"
+ :endDate="item.endDate"
+ :address="item.address"
+ :creationTime="item.creationTime"
+ :fee="item.fee"
+ :unit="SalaryTimeTypeEnumUnit[item.feeType]"
+ @click="goSubmitTaskDetail(item)"
+ mode="taskManage"
+ >
<template #footer-actions>
- <!-- <nut-button type="primary">浜哄憳瀹夋帓</nut-button> -->
- <nut-button type="primary" :color="Colors.Info" class="dark-btn">璇︽儏</nut-button>
+ <nut-button
+ v-if="item.isArrange"
+ type="primary"
+ :color="Colors.Info"
+ class="dark-btn"
+ @click="goSubmitTaskDetail(item)"
+ >璇︽儏</nut-button
+ >
+ <nut-button type="primary" v-else @click="goBatchTaskList(item)">浜哄憳瀹夋帓</nut-button>
</template>
</JobApplicationCard>
</template>
@@ -33,22 +50,24 @@
import { useInfiniteLoading } from '@12333/hooks';
import { OrderInputType, Colors } from '@12333/constants';
import * as flexWorkerServices from '@12333/services/api/FlexWorker';
+import { SalaryTimeTypeEnumUnit } from '@/constants/task';
defineOptions({
name: 'InnerPage',
});
const queryState = reactive({
- status: 10,
+ status: '10',
});
const { infiniteLoadingProps } = useInfiniteLoading(
({ pageParam }) => {
let params: API.GetFlexTaskListInput = {
+ isArrange: queryState.status === '20',
pageModel: {
rows: 20,
page: pageParam,
- orderInput: [{ property: 'lastShelfTime', order: OrderInputType.Desc }],
+ orderInput: [{ property: 'creationTime', order: OrderInputType.Desc }],
},
};
@@ -61,9 +80,22 @@
}
);
+const hasCount = computed(() => {
+ return infiniteLoadingProps.value?.listData?.pages?.[0]?.objectData?.hasCount ?? 0;
+});
+const notCount = computed(() => {
+ return infiniteLoadingProps.value?.listData?.pages?.[0]?.objectData?.notCount ?? 0;
+});
+
function goSubmitTaskDetail(item: API.GetFlexTaskListOutput) {
Taro.navigateTo({
- url: `${RouterPath.batchTaskList}?id=${item.id}`,
+ url: `${RouterPath.flexJobDetail}?taskId=${item.taskId}`,
+ });
+}
+
+function goBatchTaskList(item: API.GetFlexTaskListOutput) {
+ Taro.navigateTo({
+ url: `${RouterPath.batchTaskList}?taskId=${item.taskId}`,
});
}
</script>
diff --git a/apps/bMiniApp/src/subpackages/task/taskManage/taskManage.vue b/apps/bMiniApp/src/subpackages/task/taskManage/taskManage.vue
index 5b9ad6e..74d2fda 100644
--- a/apps/bMiniApp/src/subpackages/task/taskManage/taskManage.vue
+++ b/apps/bMiniApp/src/subpackages/task/taskManage/taskManage.vue
@@ -1,5 +1,5 @@
<template>
- <PageLayoutWithBg class="taskManage-page-wrapper" title="浠诲姟绠$悊">
+ <PageLayoutWithBg class="taskManage-page-wrapper" title="浠诲姟绠$悊" :need-auth="false">
<InnerPage />
</PageLayoutWithBg>
</template>
diff --git a/apps/cMiniApp/src/hooks/task.ts b/apps/cMiniApp/src/hooks/task.ts
index 1a789e7..91b37c3 100644
--- a/apps/cMiniApp/src/hooks/task.ts
+++ b/apps/cMiniApp/src/hooks/task.ts
@@ -41,7 +41,7 @@
page: pageParam,
orderInput: [
queryState.orderType === HomeOrderType.Recommend
- ? { property: 'isRecommend', order: OrderInputType.Desc }
+ ? { property: 'creationTime', order: OrderInputType.Desc }
: { property: 'lastShelfTime', order: OrderInputType.Desc },
],
},
diff --git a/apps/cMiniApp/src/subpackages/mine/mineAgreementSign/InnerPage.vue b/apps/cMiniApp/src/subpackages/mine/mineAgreementSign/InnerPage.vue
index 89b65b9..7909b96 100644
--- a/apps/cMiniApp/src/subpackages/mine/mineAgreementSign/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/mine/mineAgreementSign/InnerPage.vue
@@ -57,7 +57,7 @@
page: pageParam,
orderInput: [
queryState.mineAgreementSignType === TaskStatus.All
- ? { property: 'isRecommend', order: OrderInputType.Desc }
+ ? { property: 'creationTime', order: OrderInputType.Desc }
: { property: 'lastShelfTime', order: OrderInputType.Desc },
],
},
diff --git a/apps/cMiniApp/src/subpackages/mine/mineCancel/InnerPage.vue b/apps/cMiniApp/src/subpackages/mine/mineCancel/InnerPage.vue
index b7975b9..6853486 100644
--- a/apps/cMiniApp/src/subpackages/mine/mineCancel/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/mine/mineCancel/InnerPage.vue
@@ -32,7 +32,7 @@
pageModel: {
rows: 20,
page: pageParam,
- orderInput: [{ property: 'isRecommend', order: OrderInputType.Desc }],
+ orderInput: [{ property: 'creationTime', order: OrderInputType.Desc }],
},
};
diff --git a/apps/cMiniApp/src/subpackages/mine/mineCollectTask/InnerPage.vue b/apps/cMiniApp/src/subpackages/mine/mineCollectTask/InnerPage.vue
index effe877..b4a33b2 100644
--- a/apps/cMiniApp/src/subpackages/mine/mineCollectTask/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/mine/mineCollectTask/InnerPage.vue
@@ -32,7 +32,7 @@
pageModel: {
rows: 20,
page: pageParam,
- orderInput: [{ property: 'isRecommend', order: OrderInputType.Desc }],
+ orderInput: [{ property: 'creationTime', order: OrderInputType.Desc }],
},
};
diff --git a/apps/cMiniApp/src/subpackages/mine/mineHire/InnerPage.vue b/apps/cMiniApp/src/subpackages/mine/mineHire/InnerPage.vue
index 6dddc52..15ab8a5 100644
--- a/apps/cMiniApp/src/subpackages/mine/mineHire/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/mine/mineHire/InnerPage.vue
@@ -57,7 +57,7 @@
page: pageParam,
orderInput: [
queryState.mineHireType === TaskStatus.All
- ? { property: 'isRecommend', order: OrderInputType.Desc }
+ ? { property: 'creationTime', order: OrderInputType.Desc }
: { property: 'lastShelfTime', order: OrderInputType.Desc },
],
},
diff --git a/apps/cMiniApp/src/subpackages/mine/mineSign/InnerPage.vue b/apps/cMiniApp/src/subpackages/mine/mineSign/InnerPage.vue
index 9f87fe6..659e8ea 100644
--- a/apps/cMiniApp/src/subpackages/mine/mineSign/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/mine/mineSign/InnerPage.vue
@@ -56,7 +56,7 @@
page: pageParam,
orderInput: [
queryState.mineSignType === TaskStatus.All
- ? { property: 'isRecommend', order: OrderInputType.Desc }
+ ? { property: 'creationTime', order: OrderInputType.Desc }
: { property: 'lastShelfTime', order: OrderInputType.Desc },
],
},
diff --git a/packages/components/src/ActionSheet/CheckboxActionSheet.vue b/packages/components/src/ActionSheet/CheckboxActionSheet.vue
new file mode 100644
index 0000000..4d2ebda
--- /dev/null
+++ b/packages/components/src/ActionSheet/CheckboxActionSheet.vue
@@ -0,0 +1,86 @@
+<template>
+ <div class="checkbox-action-sheet">
+ <div class="checkbox-action-sheet-title">{{ title }}</div>
+ <nut-checkbox-group v-model="model" :max="max">
+ <nut-checkbox v-for="item in columns" :key="item.id" :label="item.id" icon-size="16">
+ {{ item.name }}</nut-checkbox
+ >
+ </nut-checkbox-group>
+ <div class="checkbox-action-sheet-footer">
+ <nut-button type="primary" plain @click="handleCancel">鍙栨秷</nut-button>
+ <nut-button type="primary" @click="handleConfirm">纭畾</nut-button>
+ </div>
+ </div>
+</template>
+
+<script setup lang="ts">
+defineOptions({
+ name: 'CheckboxActionSheet',
+});
+
+type Props = {
+ max?: number;
+ title?: string;
+ columns?: API.GetTypeSearchSettingList[];
+};
+
+const props = withDefaults(defineProps<Props>(), {});
+
+const emit = defineEmits<{
+ (e: 'update:modelValue', value: Array<string | number>): void;
+ (e: 'update:visible', value: boolean): void;
+}>();
+
+const model = defineModel<Array<string | number>>();
+const visible = defineModel<boolean>('visible');
+
+function handleCancel() {
+ model.value = [];
+ emit('update:visible', false);
+}
+
+function handleConfirm() {
+ emit('update:visible', false);
+ emit('update:modelValue', model.value);
+}
+</script>
+
+<style lang="scss">
+@import '@/styles/common.scss';
+
+.checkbox-action-sheet {
+ padding: 30px 30px 0;
+
+ .checkbox-action-sheet-title {
+ font-size: 32px;
+ text-align: center;
+ margin-bottom: 30px;
+ color: #2878ff;
+ }
+
+ .nut-checkbox-group {
+ padding-bottom: 30rpx;
+ max-height: 400px;
+ min-height: 200px;
+
+ .nut-checkbox {
+ margin-bottom: 20rpx;
+
+ .nut-checkbox__label {
+ margin-left: 10rpx;
+ }
+ }
+ }
+
+ .checkbox-action-sheet-footer {
+ --nut-button-default-padding: 0 80px;
+
+ display: flex;
+ justify-content: space-around;
+
+ .nut-button--primary {
+ border-width: 1px;
+ }
+ }
+}
+</style>
diff --git a/packages/components/src/Card/FlexJobCard.vue b/packages/components/src/Card/FlexJobCard.vue
index 4eed133..8039453 100644
--- a/packages/components/src/Card/FlexJobCard.vue
+++ b/packages/components/src/Card/FlexJobCard.vue
@@ -1,10 +1,8 @@
<template>
<div class="flexJob-card-wrapper">
- <FlexJobTopView />
+ <FlexJobTopView :name="name" :age="age" :genderType="genderType" />
<div class="flexJob-card-done-list">
- {{
- '鍋氳繃锛氬鎴挎湇鍔″憳銆佸鎴挎湇鍔″憳銆佸鎴垮鎴挎湇鍔″憳銆佸鎴垮仛杩囷細瀹㈡埧鏈嶅姟鍛樸�佸鎴挎湇鍔″憳銆佸鎴垮鎴挎湇鍔″憳銆佸鎴�'
- }}
+ {{ workExperience }}
</div>
<div class="flexJob-card-done-detail" v-if="showDoneDetail">
<div class="flexJob-card-done-detail-item">
@@ -35,6 +33,7 @@
import IconFemale from '@/assets/mine/icon-female.png';
import { CommonTaskCardProps } from './card';
import FlexJobTopView from './FlexJobTopView.vue';
+import { Gender } from '@12333/constants';
defineOptions({
name: 'FlexJobCard',
@@ -44,6 +43,13 @@
showFooterLeft?: boolean;
showFooterRight?: boolean;
showDoneDetail?: boolean;
+
+ name?: string;
+ genderType?: Gender;
+ age?: number;
+ educationalLevel?: string;
+ workExperience?: string;
+ arrangeCount?: number;
};
const props = withDefaults(defineProps<Props>(), {
diff --git a/packages/components/src/Card/FlexJobTopView.vue b/packages/components/src/Card/FlexJobTopView.vue
index 63a0ef0..ba2b4fd 100644
--- a/packages/components/src/Card/FlexJobTopView.vue
+++ b/packages/components/src/Card/FlexJobTopView.vue
@@ -1,17 +1,23 @@
<template>
<div :class="['flexJob-card-top-wrapper', size]">
- <UserAvatar :size="size === 'small' ? 50 : 60" class="flexJob-card-top-avatar" />
+ <Avatar :src="avatarUrl" :size="size === 'small' ? 50 : 60" class="flexJob-card-top-avatar" />
<div class="flexJob-card-top-info">
<div class="flexJob-card-top-info-item">
- <div class="flexJob-card-top-info-name">{{ '娲嬫磱' }}</div>
+ <div class="flexJob-card-top-info-name">{{ name }}</div>
<div class="flexJob-card-top-info-gender">
- <img v-if="1" :src="IconMale" class="flexJob-card-top-info-gender-icon" />
+ <img
+ v-if="genderType === Gender.Male"
+ :src="IconMale"
+ class="flexJob-card-top-info-gender-icon"
+ />
<img v-else :src="IconFemale" class="flexJob-card-top-info-gender-icon" />
</div>
- <div class="flexJob-card-top-info-auth">{{ '宸插疄鍚�' }}</div>
+ <div class="flexJob-card-top-info-auth">{{ isRealName ? '宸插疄鍚�' : '鏈疄鍚�' }}</div>
</div>
<slot name="detail">
- <div class="flexJob-card-top-info-detail">{{ '26宀� | 闈炲鐢� | 鏈 | 涓婂矖121娆�' }}</div>
+ <div class="flexJob-card-top-info-detail">
+ {{ `${age}宀� | ${educationalLevel} | ${educationalLevel} | 涓婂矖${arrangeCount}娆 }}
+ </div>
</slot>
</div>
</div>
@@ -20,6 +26,8 @@
<script setup lang="ts">
import IconMale from '@/assets/mine/icon-male.png';
import IconFemale from '@/assets/mine/icon-female.png';
+import { AvatarImage, Gender } from '@12333/constants';
+import { Avatar } from '@12333/components';
defineOptions({
name: 'FlexJobTopView',
@@ -27,10 +35,19 @@
type Props = {
size?: 'normal' | 'small';
+
+ avatarUrl?: string;
+ name?: string;
+ genderType?: Gender;
+ age?: number;
+ educationalLevel?: string;
+ arrangeCount?: number;
+ isRealName?: boolean;
};
const props = withDefaults(defineProps<Props>(), {
size: 'normal',
+ avatarUrl: AvatarImage,
});
</script>
diff --git a/packages/components/src/Card/JobApplicationCard.vue b/packages/components/src/Card/JobApplicationCard.vue
index 20e606c..2b77b39 100644
--- a/packages/components/src/Card/JobApplicationCard.vue
+++ b/packages/components/src/Card/JobApplicationCard.vue
@@ -1,28 +1,38 @@
<template>
<div class="job-application-card-wrapper">
<div class="job-application-card-title-wrapper">
- <div class="job-application-card-title">瀹㈡埧鏈嶅姟鍛�</div>
- <TaskPrice :value="212" v-if="mode === 'taskManage'" />
+ <div class="job-application-card-title">{{ taskName }}</div>
+ <TaskPrice :value="fee" :unit="unit" v-if="mode === 'taskManage'" />
<div v-else class="job-application-card-title-more" @click.stop="handleMore">
<img :src="IconMore" class="more-btn-icon" />
</div>
</div>
<div class="job-application-card-line">
- <div class="job-application-card-time">{{ `${'2025骞�2鏈�5鏃�'}鑷�${'2025骞�3鏈�5鏃�'}` }}</div>
- <div class="job-application-card-status" v-if="mode === 'normal'">{{ '鐢熸晥涓�' }}</div>
+ <div class="job-application-card-time">
+ {{
+ `${dayjs(startDate).format('YYYY骞碝M鏈圖D鏃�')}鑷�${dayjs(endDate).format('YYYY骞碝M鏈圖D鏃�')}`
+ }}
+ </div>
+ <div class="job-application-card-status" v-if="mode === 'normal'">
+ {{ FlexTaskReleaseStatusEnumText[releaseStatus] }}
+ </div>
</div>
<div class="job-application-card-line">
<div class="job-application-card-company">
<div class="job-application-card-company-tag">H</div>
- <div class="job-application-card-company-address">瀹佹尝闆疯开妫厭搴�</div>
+ <div class="job-application-card-company-address">{{ address }}</div>
</div>
- <div class="job-application-card-people" v-if="mode === 'normal'">{{ `鎶ュ悕浜烘暟锛�${5}` }}</div>
+ <div class="job-application-card-people" v-if="mode === 'normal'">
+ {{ `鎶ュ悕浜烘暟锛�${applyWorkerCount}` }}
+ </div>
</div>
<div class="job-application-card-line">
- <div class="job-application-card-publish-time">{{ `鍙戝竷鏃ユ湡锛�${'2022骞�12鏈�25鏃�'}` }}</div>
+ <div class="job-application-card-publish-time">
+ {{ `鍙戝竷鏃ユ湡锛�${dayjs(creationTime).format('YYYY-MM-DD')}` }}
+ </div>
<slot name="footer-actions">
<div class="job-application-card-fee">
- <TaskPrice :value="212" />
+ <TaskPrice :value="fee" :unit="unit" />
</div>
</slot>
</div>
@@ -36,6 +46,7 @@
import { ActionSheet } from '@nutui/nutui-taro';
import { Portal } from 'senin-mini/components';
import { TaskPrice } from '@12333/components';
+import dayjs from 'dayjs';
defineOptions({
name: 'JobApplicationCard',
@@ -50,37 +61,36 @@
Delete,
}
-enum ResourceStatus {
+enum FlexTaskReleaseStatusEnum {
/**
- * 宸查┏鍥�
+ * 鍙戝竷涓�
*/
- Reject = -10,
+ Releasing = 10,
/**
- * 鏈彁浜�
+ * 宸插仠姝�
*/
- Draft = 10,
- /**
- * 寰呭鏍�
- */
- WaitAudit = 20,
- /**
- * 杩涜涓�
- */
- Running = 30,
- /**
- * 宸蹭笅鏋�
- */
- OffShelf = 40,
- /**
- * 绯荤粺涓嬫灦
- */
- SystemOffShelf = 50,
+ Stoping = 20,
}
+
+const FlexTaskReleaseStatusEnumText = {
+ [FlexTaskReleaseStatusEnum.Releasing]: '鍙戝竷涓�',
+ [FlexTaskReleaseStatusEnum.Stoping]: '宸插仠姝�',
+};
type Props = CommonTaskCardProps & {
showActions?: boolean;
- status?: ResourceStatus;
+ status?: FlexTaskReleaseStatusEnum;
mode?: 'taskManage' | 'normal';
+
+ taskName?: string;
+ startDate?: string;
+ endDate?: string;
+ address?: string;
+ creationTime?: string;
+ fee?: number;
+ applyWorkerCount?: number;
+ unit?: string;
+ releaseStatus?: API.FlexTaskReleaseStatusEnum;
};
const props = withDefaults(defineProps<Props>(), {
@@ -99,40 +109,38 @@
const menuList = computed(() => {
let _menuList = [];
- if (props.status !== ResourceStatus.WaitAudit) {
- _menuList.push({
+ _menuList.push(
+ {
name: '缂栬緫',
value: ManageActions.Edit,
- });
- }
- _menuList.push({
- name: '鏌ョ湅璇︽儏',
- value: ManageActions.Detail,
- });
- if (props.status === ResourceStatus.OffShelf) {
+ },
+ {
+ name: '鏌ョ湅璇︽儏',
+ value: ManageActions.Detail,
+ }
+ );
+ if (props.releaseStatus === FlexTaskReleaseStatusEnum.Stoping) {
_menuList.push({
name: '鍙戝竷',
value: ManageActions.Publish,
});
}
- if (props.status === ResourceStatus.Running) {
+ if (props.releaseStatus === FlexTaskReleaseStatusEnum.Releasing) {
_menuList.push({
name: '鍋滄鍙戝竷',
value: ManageActions.Stop,
});
}
- if (props.status !== ResourceStatus.WaitAudit) {
- _menuList.push(
- {
- name: '澶嶅埗',
- value: ManageActions.Copy,
- },
- {
- name: '鍒犻櫎',
- value: ManageActions.Delete,
- }
- );
- }
+ _menuList.push(
+ {
+ name: '澶嶅埗',
+ value: ManageActions.Copy,
+ },
+ {
+ name: '鍒犻櫎',
+ value: ManageActions.Delete,
+ }
+ );
return _menuList;
});
diff --git a/packages/components/src/Card/MyTaskCard.vue b/packages/components/src/Card/MyTaskCard.vue
index 9921ce4..8283af6 100644
--- a/packages/components/src/Card/MyTaskCard.vue
+++ b/packages/components/src/Card/MyTaskCard.vue
@@ -4,7 +4,11 @@
<RectRight :size="12" class="my-task-card-arrow" v-if="showMyTaskArrow" />
<div v-else></div>
</template>
- <div class="my-task-card-time" v-if="showTime">2025骞�2鏈�5鏃� 鑷� 2025骞�3鏈�5鏃�</div>
+ <div class="my-task-card-time" v-if="showTime">
+ {{
+ `${dayjs(startDate).format('YYYY骞碝M鏈圖D鏃�')}鑷�${dayjs(endDate).format('YYYY骞碝M鏈圖D鏃�')}`
+ }}
+ </div>
<div v-else></div>
</TaskCard>
</template>
@@ -13,6 +17,7 @@
import TaskCard from './TaskCard.vue';
import { CommonTaskCardProps } from './card';
import { RectRight } from '@nutui/icons-vue-taro';
+import dayjs from 'dayjs';
defineOptions({
name: 'MyTaskCard',
@@ -21,6 +26,11 @@
type Props = CommonTaskCardProps & {
showMyTaskArrow?: boolean;
showTime?: boolean;
+
+ startDate?: string;
+ endDate?: string;
+ taskName?: string;
+ address?: string;
};
const props = withDefaults(defineProps<Props>(), {
diff --git a/packages/components/src/Card/TaskCard.vue b/packages/components/src/Card/TaskCard.vue
index 27a75cb..f358afb 100644
--- a/packages/components/src/Card/TaskCard.vue
+++ b/packages/components/src/Card/TaskCard.vue
@@ -1,7 +1,7 @@
<template>
<div class="task-card-wrapper">
<div class="task-card-title-wrapper">
- <div class="task-card-title">瀹㈡埧鏈嶅姟鍛�</div>
+ <div class="task-card-title">{{ taskName }}</div>
<slot name="title-right">
<TaskPrice :value="212" />
</slot>
@@ -17,7 +17,7 @@
<div class="task-card-footer">
<div class="task-card-left">
<div class="task-card-footer-tag">H</div>
- <div class="task-card-footer-address">瀹佹尝闆疯开妫厭搴�</div>
+ <div class="task-card-footer-address">{{ address }}</div>
</div>
<div class="task-card-actions" v-if="showActions">
<slot name="actions">
@@ -38,6 +38,9 @@
type Props = CommonTaskCardProps & {
showActions?: boolean;
+
+ taskName?: string;
+ address?: string;
};
const props = withDefaults(defineProps<Props>(), {
diff --git a/packages/components/src/Card/TaskPrice.vue b/packages/components/src/Card/TaskPrice.vue
index c2297c9..922f437 100644
--- a/packages/components/src/Card/TaskPrice.vue
+++ b/packages/components/src/Card/TaskPrice.vue
@@ -1,7 +1,7 @@
<template>
<div class="task-price">
<div class="task-price-decimal">{{ value }}</div>
- <div class="task-price-unit">鍏�/灏忔椂</div>
+ <div class="task-price-unit">{{ unit }}</div>
</div>
</template>
@@ -12,6 +12,7 @@
type Props = {
value?: number;
+ unit?: string;
};
const props = withDefaults(defineProps<Props>(), {});
diff --git a/packages/components/src/Input/ChooseInputWithCheckbox.vue b/packages/components/src/Input/ChooseInputWithCheckbox.vue
new file mode 100644
index 0000000..b1ff1a6
--- /dev/null
+++ b/packages/components/src/Input/ChooseInputWithCheckbox.vue
@@ -0,0 +1,66 @@
+<template>
+ <ChooseInput :modelValue="inputValue" @click="handleOpen()"></ChooseInput>
+</template>
+
+<script setup lang="ts">
+import { Portal } from 'senin-mini/components';
+import ChooseInput from './ChooseInput.vue';
+import { computed, h } from 'vue';
+import { Popup, DatePicker, Picker } from '@nutui/nutui-taro';
+import CheckboxActionSheet from '../ActionSheet/CheckboxActionSheet.vue';
+import _ from 'lodash';
+
+defineOptions({
+ name: 'ChooseInputWithCheckbox',
+});
+
+type Props = {
+ columns: API.GetTypeSearchSettingList[];
+ modelValue: Array<string | number>;
+ title?: string;
+ max?: number;
+};
+
+const props = withDefaults(defineProps<Props>(), {});
+const inputValue = computed(() =>
+ props.modelValue.map((x) => props.columns.find((y) => y.id === x)?.name).join(',')
+);
+
+const emit = defineEmits<{
+ (e: 'update:modelValue', val: Array<string | number>): void;
+}>();
+
+function handleOpen() {
+ Portal.add((key) => {
+ return h(
+ Portal.Container,
+ { keyNumber: key, delayOpen: true },
+ {
+ default: ({ open, onClose }) =>
+ h(
+ Popup,
+ {
+ visible: open.value,
+ 'onUpdate:visible': (value) => !value && onClose(),
+ position: 'bottom',
+ closeOnClickOverlay: false,
+ },
+ {
+ default: () =>
+ h(CheckboxActionSheet, {
+ modelValue: props.modelValue,
+ columns: props.columns,
+ title: props.title,
+ visible: open.value,
+ 'onUpdate:visible': (value) => !value && onClose(),
+ 'onUpdate:modelValue': (value) => {
+ emit('update:modelValue', value);
+ },
+ }),
+ }
+ ),
+ }
+ );
+ });
+}
+</script>
diff --git a/packages/components/src/Input/ChooseInputWithDatePicker.vue b/packages/components/src/Input/ChooseInputWithDatePicker.vue
index a40694d..f14b604 100644
--- a/packages/components/src/Input/ChooseInputWithDatePicker.vue
+++ b/packages/components/src/Input/ChooseInputWithDatePicker.vue
@@ -44,7 +44,6 @@
modelValue: _modelValue,
onCancel: onClose,
onConfirm: ({ selectedValue }) => {
- console.log('selectedValue: ', selectedValue);
emit('update:modelValue', dayjs(selectedValue).format('YYYY-MM-DD'));
onClose();
},
diff --git a/packages/components/src/index.ts b/packages/components/src/index.ts
index eff99ae..1d6af42 100644
--- a/packages/components/src/index.ts
+++ b/packages/components/src/index.ts
@@ -12,6 +12,7 @@
export { default as ChooseInputWithPicker } from './Input/ChooseInputWithPicker.vue';
export { default as ChooseInputWithDatePicker } from './Input/ChooseInputWithDatePicker.vue';
export { default as ChooseInputWithAreaPicker } from './Input/ChooseInputWithAreaPicker.vue';
+export { default as ChooseInputWithCheckbox } from './Input/ChooseInputWithCheckbox.vue';
export { default as ChooseInputWithAreaSheet } from './Input/ChooseInputWithAreaSheet.vue';
export { default as ChooseLocationInput } from './Input/ChooseLocationInput.vue';
export { default as PreviewImage } from './Image/PreviewImage.vue';
diff --git a/packages/constants/dic.ts b/packages/constants/dic.ts
index 3bda434..475f69a 100644
--- a/packages/constants/dic.ts
+++ b/packages/constants/dic.ts
@@ -1,45 +1,25 @@
export enum SearchType {
- Hot = 10,
- Service = 20,
- Work = 30,
- Park = 40,
- Info = 50,
- Policy = 60,
- RegionalManagement = 70,
- ProductType = 80,
- DemandType = 90,
- DemandRange = 100,
- EmployeeBenefits = 110,
- CompanyIndustry = 120,
- HeadHunterPosition = 130,
- ConsultationCategory = 140,
- FAQCategory = 150,
- IndustryCategory = 160,
- FirstPartyIndustry = 170,
- MatingServiceType = 180,
- IndustryBodyType = 190,
+ /**韬唤 */
+ Identity = 210,
+ /**瀛﹀巻 */
+ Education = 220,
+ /**宀椾綅 */
+ Position = 230,
+ /**璇佷功绫诲瀷 */
+ CertificateType = 240,
+ /**绂忓埄 */
+ Welfare = 250,
+ /**琛屼笟绫诲瀷 */
+ IndustryCategory = 260,
}
export const SearchTypeText = {
- [SearchType.Hot]: '鐑悳璇�',
- [SearchType.Service]: '鏈嶅姟绫诲瀷',
- [SearchType.Work]: '宸ョ',
- [SearchType.Park]: '鍥尯绫诲瀷',
- [SearchType.Info]: '璧勮娲诲姩绫诲瀷',
- [SearchType.Policy]: '鏀跨瓥棰佸竷鏈烘瀯',
- [SearchType.RegionalManagement]: '鍖哄煙绠$悊',
- [SearchType.ProductType]: '浜у搧绫诲瀷',
- [SearchType.DemandType]: '闇�姹傜被鍨�',
- [SearchType.DemandRange]: '闇�姹傝寖鍥�',
- [SearchType.EmployeeBenefits]: '鍛樺伐绂忓埄',
- [SearchType.CompanyIndustry]: '鍏徃琛屼笟',
- [SearchType.HeadHunterPosition]: '鐚庡ご鑱屼綅',
- [SearchType.ConsultationCategory]: '鍜ㄨ绫诲埆',
- [SearchType.FAQCategory]: '闂鍒嗙被',
- [SearchType.IndustryCategory]: '琛屼笟绫诲埆',
- [SearchType.FirstPartyIndustry]: '鐢叉柟琛屼笟',
- [SearchType.MatingServiceType]: '閰嶅鏈嶅姟绫诲瀷',
- [SearchType.IndustryBodyType]: '琛屼笟鏈烘瀯绫诲瀷',
+ [SearchType.Identity]: '韬唤',
+ [SearchType.Education]: '瀛﹀巻',
+ [SearchType.Position]: '宀椾綅',
+ [SearchType.CertificateType]: '璇佷功绫诲瀷',
+ [SearchType.Welfare]: '绂忓埄',
+ [SearchType.IndustryCategory]: '琛屼笟绫诲瀷',
};
export enum BelongType {
diff --git a/packages/hooks/area.ts b/packages/hooks/area.ts
index de3bffe..2f9220f 100644
--- a/packages/hooks/area.ts
+++ b/packages/hooks/area.ts
@@ -1,5 +1,5 @@
import { flattenAreaTree, formatAreaListToTree } from '@12333/utils';
-import * as areaServices from '@12333/services/api/Area';
+import * as flexWorkerServices from '@12333/services/api/FlexWorker';
import { useQuery, useQueryClient } from '@tanstack/vue-query';
import { computed, onMounted, onUnmounted, ref } from 'vue';
import { AreaType } from '@12333/constants';
@@ -14,14 +14,14 @@
const queryClient = useQueryClient();
const { data: areaStore } = useQuery({
- queryKey: ['areaServices/getRegionalManagementList'],
+ queryKey: ['flexWorkerServices/getAreaList'],
queryFn: async () => {
- return await areaServices.getRegionalManagementList({ showLoading: false });
+ return await flexWorkerServices.getAreaList({}, { showLoading: false });
},
- placeholderData: () => [] as API.AreaInfo[],
+ placeholderData: () => [] as API.AreaDto[],
staleTime: Infinity,
select(data) {
- const areaItemMap: Record<API.AreaInfo['areaCode'], API.AreaInfo> = {};
+ const areaItemMap: Record<API.AreaDto['areaCode'], API.AreaDto> = {};
data.forEach((item) => {
areaItemMap[item.areaCode] = item;
});
diff --git a/packages/services/api/typings.d.ts b/packages/services/api/typings.d.ts
index 46080ab..b48eac8 100644
--- a/packages/services/api/typings.d.ts
+++ b/packages/services/api/typings.d.ts
@@ -42,9 +42,9 @@
sexType?: GenderTypeEnum;
/** 璇佷功Id */
listCertionIds?: string[];
- provinceId?: string;
- cityId?: string;
- areaId?: string;
+ provinceId?: number;
+ cityId?: number;
+ areaId?: number;
address?: string;
startDate?: string;
endDate?: string;
@@ -380,16 +380,18 @@
}
interface AreaDto {
- /** 缂栫爜 */
+ id?: string;
areaCode?: number;
- /** 鐖剁骇缂栫爜 */
- parentCode?: number;
- /** 鍚嶇О */
+ parentId?: number;
areaName?: string;
/** 1鐪� 2甯� 3鍖� 4闀� */
layer?: number;
- /** 鎺掑簭 */
sort?: number;
+ children?: AreaDto[];
+ /** 绠�鏄撴嫾闊� */
+ simpleSpelling?: string;
+ /** 蹇�熸绱� */
+ quickQuery?: string;
}
interface BaseAuthorizeDto {
@@ -880,9 +882,9 @@
taskWeals?: FlexTaskAideDto[];
taskCerts?: FlexTaskAideDto[];
fee?: number;
- provinceId?: string;
- cityId?: string;
- areaId?: string;
+ provinceId?: number;
+ cityId?: number;
+ areaId?: number;
provinceName?: string;
cityName?: string;
areaName?: string;
@@ -910,6 +912,8 @@
taskId?: string;
taskName?: string;
isArrange?: boolean;
+ isOverCheck?: boolean;
+ releaseStatus?: FlexTaskReleaseStatusEnum;
startDate?: string;
endDate?: string;
feeType?: FlexTaskFeeTypeEnum;
--
Gitblit v1.9.1