From 5fc0cba8af1a9e9b1cc41fa65c8a4db89e82ee3e Mon Sep 17 00:00:00 2001
From: zhengyiming <540361168@qq.com>
Date: 星期五, 08 八月 2025 13:22:10 +0800
Subject: [PATCH] fix: 任务发布
---
apps/bMiniApp/src/utils/request/index.ts | 13 ++-
packages/components/src/Input/ChooseInputWithDatePicker.vue | 2
apps/cMiniApp/src/pages/home/index.vue | 4
packages/constants/task.ts | 10 ++
apps/bMiniApp/src/subpackages/task/publishTask/InnerPage.vue | 21 +++-
apps/cMiniApp/src/utils/request/index.ts | 13 ++-
apps/cMiniApp/src/hooks/task.ts | 38 +++++++--
apps/cMiniApp/src/pages/home/HomeQueryMenuView.vue | 29 +++++--
packages/components/src/Input/ChooseInputWithPicker.vue | 2
apps/bMiniApp/src/pages/home/index.vue | 40 +++++++---
apps/bMiniApp/src/pages/home/HomeQueryMenuView.vue | 10 +
11 files changed, 128 insertions(+), 54 deletions(-)
diff --git a/apps/bMiniApp/src/pages/home/HomeQueryMenuView.vue b/apps/bMiniApp/src/pages/home/HomeQueryMenuView.vue
index 0fd23a4..5a67ad8 100644
--- a/apps/bMiniApp/src/pages/home/HomeQueryMenuView.vue
+++ b/apps/bMiniApp/src/pages/home/HomeQueryMenuView.vue
@@ -2,7 +2,11 @@
<QueryMenuView @close="handleReset" @confirm="emit('close')" cancelText="閲嶇疆">
<div class="home-query-menu-view">
<QueryMenuItem title="鎬у埆">
- <ProRadio v-model="query.gender" :value-enum="GenderText" show-all-btn></ProRadio>
+ <ProRadio
+ v-model="query.genderLimit"
+ :value-enum="EnumUserGenderText"
+ show-all-btn
+ ></ProRadio>
</QueryMenuItem>
<QueryMenuItem title="韬唤">
<ProRadio v-model="query.identity" :value-enum="identityList" show-all-btn></ProRadio>
@@ -35,7 +39,7 @@
<script setup lang="ts">
import { QueryMenuView, QueryMenuItem, ProRadio } from '@12333/components';
-import { GenderText, CategoryCode } from '@12333/constants';
+import { EnumUserGenderText, CategoryCode } from '@12333/constants';
import { useDictionaryDataSelect } from '@12333/hooks';
defineOptions({
@@ -60,7 +64,7 @@
}>();
const query = defineModel<{
- gender: number | string;
+ genderLimit: number | string;
age: number[];
identity: string;
certificateType: string;
diff --git a/apps/bMiniApp/src/pages/home/index.vue b/apps/bMiniApp/src/pages/home/index.vue
index c62da08..6156d7f 100644
--- a/apps/bMiniApp/src/pages/home/index.vue
+++ b/apps/bMiniApp/src/pages/home/index.vue
@@ -74,8 +74,13 @@
import { ProTabs, ProTabPane, FlexJobCard } from '@12333/components';
import { HomeOrderType } from './constants';
import { useInfiniteLoading } from '@12333/hooks';
-import { OrderInputType, Gender } from '@12333/constants';
-import * as flexWorkerServices from '@12333/services/api/FlexWorker';
+import {
+ EnumPagedListOrder,
+ EnumTaskRecommendStatus,
+ EnumTaskReleaseStatus,
+ EnumUserGender,
+} from '@12333/constants';
+import * as taskServices from '@12333/services/apiV2/task';
import _ from 'lodash';
import HomeQueryMenuView from './HomeQueryMenuView.vue';
import HomeQueryPositionMenuView from './HomeQueryPositionMenuView.vue';
@@ -87,7 +92,7 @@
const userStore = useUserStore();
const queryMenuState = reactive({
- gender: '' as any as Gender,
+ genderLimit: '' as any as EnumUserGender,
age: [15, 65],
identity: '',
certificateType: '',
@@ -103,25 +108,36 @@
const { infiniteLoadingProps } = useInfiniteLoading(
({ pageParam }) => {
- let params: API.GetFlexTaskListInput = {
+ let params: API.GetTaskInfosQuery = {
pageModel: {
rows: 20,
page: pageParam,
- orderInput: [{ property: 'taskId', order: OrderInputType.Desc }],
+ orderInput: [
+ queryState.orderType === HomeOrderType.Recommend
+ ? { property: 'createdTime', order: EnumPagedListOrder.Desc }
+ : {},
+ ],
},
+ // keywords: 'string',
+ // time: '2025-08-08T02:58:58.756Z',
+ // cityCode: 'string',
+ // settlementCycle: 10,
+ // benefitCodes: ['string'],
+ genderLimit: queryMenuState.genderLimit,
+ // status: 10,
+ releaseStatus: EnumTaskReleaseStatus.InProcess,
};
- return flexWorkerServices.getFlexTaskWorkerArrangeList(params, {
+ if (queryState.orderType === HomeOrderType.Recommend) {
+ params.recommendStatus = EnumTaskRecommendStatus.Yes;
+ }
+
+ return taskServices.getTaskInfos(params, {
showLoading: false,
});
},
{
- queryKey: [
- 'flexWorkerServices/getFlexTaskByArrange',
- queryState,
- queryMenuState,
- queryPositionState,
- ],
+ queryKey: ['taskServices/getTaskInfos', queryState, queryMenuState, queryPositionState],
}
);
diff --git a/apps/bMiniApp/src/subpackages/task/publishTask/InnerPage.vue b/apps/bMiniApp/src/subpackages/task/publishTask/InnerPage.vue
index 8e810c9..5f50ad4 100644
--- a/apps/bMiniApp/src/subpackages/task/publishTask/InnerPage.vue
+++ b/apps/bMiniApp/src/subpackages/task/publishTask/InnerPage.vue
@@ -20,11 +20,11 @@
</nut-form-item>
<nut-form-item label=" " class="bole-form-item" prop="serviceFee" label-width="0">
<div class="bole-form-input-wrapper">
- <nut-input
+ <NumberInput
v-model.trim="form.serviceFee"
class="nut-input-text bole-input-text"
placeholder="璇疯緭鍏ユ湇鍔¤垂"
- type="text"
+ :min="0"
/>
<div class="form-input-unit">{{ BillingMethodEnumUnit[form.billingMethod] }}</div>
</div>
@@ -83,7 +83,7 @@
<ChooseInputWithPicker
v-model="form.genderLimit"
placeholder="璇烽�夋嫨鎬у埆瑕佹眰"
- :value-enum="EnumUserGenderText"
+ :value-enum="EnumUserGenderTextOptions"
/>
</nut-form-item>
<nut-form-item
@@ -122,10 +122,16 @@
prop="beginTime"
label-width="90px"
>
- <ChooseInputWithDatePicker v-model="form.beginTime"></ChooseInputWithDatePicker>
+ <ChooseInputWithDatePicker
+ v-model="form.beginTime"
+ :minDate="nowDate"
+ ></ChooseInputWithDatePicker>
</nut-form-item>
<nut-form-item label="浠诲姟缁撴潫鏃ユ湡:" class="bole-form-item" prop="endTime" label-width="90px">
- <ChooseInputWithDatePicker v-model="form.endTime"></ChooseInputWithDatePicker>
+ <ChooseInputWithDatePicker
+ v-model="form.endTime"
+ :minDate="nowDate"
+ ></ChooseInputWithDatePicker>
</nut-form-item>
</nut-form>
</ContentScrollView>
@@ -146,6 +152,7 @@
EnumUserGenderText,
EnumSettlementCycleText,
BillingMethodEnumUnit,
+ EnumUserGenderTextOptions,
} from '@12333/constants';
import {
ChooseInputWithPicker,
@@ -177,6 +184,8 @@
const isEdit = !!taskId;
const isCopy = router.params?.isCopy === 'true';
console.log('isCopy: ', router.params?.isCopy);
+
+const nowDate = dayjs().toDate();
const { dictionaryDataList: WelfareTypeList } = useDictionaryDataSelect({
categoryCode: CategoryCode.Welfare,
@@ -345,7 +354,7 @@
}
function handleCancel() {
- Taro.navigateBack();
+ goBack();
}
</script>
diff --git a/apps/bMiniApp/src/utils/request/index.ts b/apps/bMiniApp/src/utils/request/index.ts
index 339d938..6f6fa4b 100644
--- a/apps/bMiniApp/src/utils/request/index.ts
+++ b/apps/bMiniApp/src/utils/request/index.ts
@@ -115,6 +115,9 @@
const errorInfo: ErrorInfo | undefined = (error as any).info;
if (errorInfo) {
const { errorMessage, errorCode } = errorInfo;
+ if (Number(errorCode) === 401) {
+ handleLogout();
+ }
switch (errorInfo.showType) {
case ErrorShowType.SILENT:
// do nothing
@@ -138,7 +141,7 @@
} else if ((error as AxiosError<ResponseStructure, IRequestOptions>).response) {
// Axios 鐨勯敊璇�
// 璇锋眰鎴愬姛鍙戝嚭涓旀湇鍔″櫒涔熷搷搴斾簡鐘舵�佺爜锛屼絾鐘舵�佷唬鐮佽秴鍑轰簡 2xx 鐨勮寖鍥�
- handleAxiosResponseError(error as AxiosError<ErrorResponse, IRequestOptions>);
+ handleAxiosResponseError(error as AxiosError<ResponseStructure, IRequestOptions>);
// Message.errorMessage(`Response status:${(error as AxiosError).response.status}`);
} else if ((error as AxiosError).request) {
// 璇锋眰宸茬粡鎴愬姛鍙戣捣锛屼絾娌℃湁鏀跺埌鍝嶅簲
@@ -251,17 +254,17 @@
[505]: 'HTTP鐗堟湰涓嶅彈鏀寔',
};
-function handleAxiosResponseError(error: AxiosError<ErrorResponse, IRequestOptions>) {
+function handleAxiosResponseError(error: AxiosError<ResponseStructure, IRequestOptions>) {
if (error.response.config.url.toLowerCase().includes(RefreshTokenUrl.toLowerCase())) {
handleLogout();
return;
}
if (error && error.response) {
let message = ErrorMessageMap[error.response?.status] ?? '璇锋眰閿欒';
- if (error.response.data?.error?.message) {
- message = error.response.data?.error?.message;
+ if (error.response.data?.msg) {
+ message = error.response.data?.msg;
}
- if (error.response?.status === 401) {
+ if (error.response?.status === 401 || error.response.data.code === 401) {
handleLogout();
}
diff --git a/apps/cMiniApp/src/hooks/task.ts b/apps/cMiniApp/src/hooks/task.ts
index 91b37c3..d8414e1 100644
--- a/apps/cMiniApp/src/hooks/task.ts
+++ b/apps/cMiniApp/src/hooks/task.ts
@@ -1,9 +1,16 @@
import { useInfiniteLoading } from '@12333/hooks';
-import { OrderInputType, Gender } from '@12333/constants';
-import * as flexWorkerServices from '@12333/services/api/FlexWorker';
+import {
+ EnumPagedListOrder,
+ EnumSettlementCycle,
+ EnumTaskRecommendStatus,
+ EnumTaskReleaseStatus,
+ EnumTaskStatus,
+ EnumUserGender,
+} from '@12333/constants';
import _ from 'lodash';
import { trim } from '@12333/utils';
import { MaybeRef } from 'vue';
+import * as taskServices from '@12333/services/apiV2/task';
export enum HomeOrderType {
Recommend = 'Recommend',
@@ -20,13 +27,15 @@
const searchValue = ref('');
const queryMenuState = reactive({
- gender: '' as any as Gender,
+ genderLimit: '' as any as EnumUserGender,
+ settlementCycle: '' as any as EnumSettlementCycle,
+ benefitCodes: '',
+ status: '' as any as EnumTaskStatus,
});
const queryState = reactive({
searchValueTrim: '',
orderType: HomeOrderType.Recommend,
- companyId: '',
});
const handleSearch = _.debounce(function () {
@@ -35,24 +44,35 @@
const { infiniteLoadingProps } = useInfiniteLoading(
({ pageParam }) => {
- let params: API.GetFlexTaskListInput = {
+ let params: API.GetTaskInfosQuery = {
pageModel: {
rows: 20,
page: pageParam,
orderInput: [
queryState.orderType === HomeOrderType.Recommend
- ? { property: 'creationTime', order: OrderInputType.Desc }
- : { property: 'lastShelfTime', order: OrderInputType.Desc },
+ ? { property: 'createdTime', order: EnumPagedListOrder.Desc }
+ : {},
],
},
+ keywords: queryState.searchValueTrim,
+ // cityCode: 'string',
+ settlementCycle: queryMenuState.settlementCycle,
+ benefitCodes: [queryMenuState.benefitCodes].filter(Boolean),
+ genderLimit: queryMenuState.genderLimit,
+ status: queryMenuState.status,
+ releaseStatus: EnumTaskReleaseStatus.InProcess,
};
- return flexWorkerServices.getFlexTaskByArrange(params, {
+ if (queryState.orderType === HomeOrderType.Recommend) {
+ params.recommendStatus = EnumTaskRecommendStatus.Yes;
+ }
+
+ return taskServices.getTaskInfos(params, {
showLoading: false,
});
},
{
- queryKey: ['flexWorkerServices/getFlexTaskByArrange', queryState, queryMenuState, cityName],
+ queryKey: ['taskServices/getTaskInfos', queryState, queryMenuState, cityName],
}
);
diff --git a/apps/cMiniApp/src/pages/home/HomeQueryMenuView.vue b/apps/cMiniApp/src/pages/home/HomeQueryMenuView.vue
index 20ce0a2..92e012a 100644
--- a/apps/cMiniApp/src/pages/home/HomeQueryMenuView.vue
+++ b/apps/cMiniApp/src/pages/home/HomeQueryMenuView.vue
@@ -3,16 +3,20 @@
<div class="home-query-menu-view">
<QueryMenuItem title="缁撶畻鏂瑰紡">
<ProRadio
- v-model="query.gender"
- :value-enum="FlexTaskSettleTypeEnumText"
+ v-model="query.settlementCycle"
+ :value-enum="EnumSettlementCycleText"
show-all-btn
></ProRadio>
</QueryMenuItem>
<QueryMenuItem title="鍛樺伐绂忓埄">
- <ProRadio v-model="query.gender" :value-enum="WelfareList" show-all-btn></ProRadio>
+ <!-- <ProRadio v-model="query.benefitCodes" :value-enum="welfareList" show-all-btn></ProRadio> -->
</QueryMenuItem>
<QueryMenuItem title="鎬у埆瑕佹眰">
- <ProRadio v-model="query.gender" :value-enum="GenderText" show-all-btn></ProRadio>
+ <ProRadio
+ v-model="query.genderLimit"
+ :value-enum="EnumUserGenderText"
+ show-all-btn
+ ></ProRadio>
</QueryMenuItem>
</div>
</QueryMenuView>
@@ -20,8 +24,13 @@
<script setup lang="ts">
import { QueryMenuView, QueryMenuItem, ProRadio } from '@12333/components';
-import { GenderText, SearchType, FlexTaskSettleTypeEnumText } from '@12333/constants';
-import { useSearchSettingType } from '@12333/hooks';
+import {
+ EnumUserGenderText,
+ EnumSettlementCycle,
+ CategoryCode,
+ EnumSettlementCycleText,
+} from '@12333/constants';
+import { useDictionaryDataSelect } from '@12333/hooks';
defineOptions({
name: 'HomeQueryMenuView',
@@ -31,8 +40,8 @@
// const props = withDefaults(defineProps<Props>(), {});
-const { searchSettingTypeList: WelfareList } = useSearchSettingType({
- searchType: SearchType.Welfare,
+const { dictionaryDataList: welfareList } = useDictionaryDataSelect({
+ categoryCode: CategoryCode.Welfare,
});
const emit = defineEmits<{
@@ -41,7 +50,9 @@
}>();
const query = defineModel<{
- gender: number | string;
+ genderLimit: number | string;
+ settlementCycle: EnumSettlementCycle;
+ benefitCodes: string;
}>('query');
const DefaultQuery = {
diff --git a/apps/cMiniApp/src/pages/home/index.vue b/apps/cMiniApp/src/pages/home/index.vue
index de26f12..f9c3298 100644
--- a/apps/cMiniApp/src/pages/home/index.vue
+++ b/apps/cMiniApp/src/pages/home/index.vue
@@ -20,13 +20,13 @@
<div class="city-btn-text">{{ locationCity }}</div>
</div>
</div>
- <div class="home-banner-wrapper">
+ <!-- <div class="home-banner-wrapper">
<nut-swiper :auto-play="3000">
<nut-swiper-item v-for="(item, index) in list" :key="index">
<img :src="item" class="banner-img" draggable="false" />
</nut-swiper-item>
</nut-swiper>
- </div>
+ </div> -->
</div>
<ProTabs
v-model="queryState.orderType"
diff --git a/apps/cMiniApp/src/utils/request/index.ts b/apps/cMiniApp/src/utils/request/index.ts
index 339d938..6f6fa4b 100644
--- a/apps/cMiniApp/src/utils/request/index.ts
+++ b/apps/cMiniApp/src/utils/request/index.ts
@@ -115,6 +115,9 @@
const errorInfo: ErrorInfo | undefined = (error as any).info;
if (errorInfo) {
const { errorMessage, errorCode } = errorInfo;
+ if (Number(errorCode) === 401) {
+ handleLogout();
+ }
switch (errorInfo.showType) {
case ErrorShowType.SILENT:
// do nothing
@@ -138,7 +141,7 @@
} else if ((error as AxiosError<ResponseStructure, IRequestOptions>).response) {
// Axios 鐨勯敊璇�
// 璇锋眰鎴愬姛鍙戝嚭涓旀湇鍔″櫒涔熷搷搴斾簡鐘舵�佺爜锛屼絾鐘舵�佷唬鐮佽秴鍑轰簡 2xx 鐨勮寖鍥�
- handleAxiosResponseError(error as AxiosError<ErrorResponse, IRequestOptions>);
+ handleAxiosResponseError(error as AxiosError<ResponseStructure, IRequestOptions>);
// Message.errorMessage(`Response status:${(error as AxiosError).response.status}`);
} else if ((error as AxiosError).request) {
// 璇锋眰宸茬粡鎴愬姛鍙戣捣锛屼絾娌℃湁鏀跺埌鍝嶅簲
@@ -251,17 +254,17 @@
[505]: 'HTTP鐗堟湰涓嶅彈鏀寔',
};
-function handleAxiosResponseError(error: AxiosError<ErrorResponse, IRequestOptions>) {
+function handleAxiosResponseError(error: AxiosError<ResponseStructure, IRequestOptions>) {
if (error.response.config.url.toLowerCase().includes(RefreshTokenUrl.toLowerCase())) {
handleLogout();
return;
}
if (error && error.response) {
let message = ErrorMessageMap[error.response?.status] ?? '璇锋眰閿欒';
- if (error.response.data?.error?.message) {
- message = error.response.data?.error?.message;
+ if (error.response.data?.msg) {
+ message = error.response.data?.msg;
}
- if (error.response?.status === 401) {
+ if (error.response?.status === 401 || error.response.data.code === 401) {
handleLogout();
}
diff --git a/packages/components/src/Input/ChooseInputWithDatePicker.vue b/packages/components/src/Input/ChooseInputWithDatePicker.vue
index f14b604..2b21ef6 100644
--- a/packages/components/src/Input/ChooseInputWithDatePicker.vue
+++ b/packages/components/src/Input/ChooseInputWithDatePicker.vue
@@ -15,6 +15,7 @@
type Props = {
modelValue: string | number;
+ minDate?: Date;
};
const props = withDefaults(defineProps<Props>(), {});
@@ -47,6 +48,7 @@
emit('update:modelValue', dayjs(selectedValue).format('YYYY-MM-DD'));
onClose();
},
+ minDate: props.minDate,
}),
}
),
diff --git a/packages/components/src/Input/ChooseInputWithPicker.vue b/packages/components/src/Input/ChooseInputWithPicker.vue
index e89cb4e..1d07b64 100644
--- a/packages/components/src/Input/ChooseInputWithPicker.vue
+++ b/packages/components/src/Input/ChooseInputWithPicker.vue
@@ -22,7 +22,7 @@
const props = withDefaults(defineProps<Props>(), {
enumLabelKey: 'label',
- enumValueKey: 'code',
+ enumValueKey: 'value',
});
const emit = defineEmits<{
diff --git a/packages/constants/task.ts b/packages/constants/task.ts
index f3552ac..ccc95e1 100644
--- a/packages/constants/task.ts
+++ b/packages/constants/task.ts
@@ -8,8 +8,14 @@
};
export const EnumUserGenderText = {
- [EnumUserGender.Male]: '鐢�',
- [EnumUserGender.Female]: '濂�',
+ [EnumUserGender.Male]: '浠呴檺鐢锋��',
+ [EnumUserGender.Female]: '浠呴檺濂虫��',
+};
+
+export const EnumUserGenderTextOptions = {
+ [0]: '涓嶉檺',
+ [EnumUserGender.Male]: '浠呴檺鐢锋��',
+ [EnumUserGender.Female]: '浠呴檺濂虫��',
};
export const EnumSettlementCycleText = {
--
Gitblit v1.9.1