wupengfei
2 天以前 7af4ab328e56300f7dca75de6c532d16464d2f10
feat: mine
1个文件已添加
17个文件已修改
733 ■■■■ 已修改文件
apps/bMiniApp/project.private.config.json 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bMiniApp/src/subpackages/jobApplicationManage/components/JobDetail.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bMiniApp/src/subpackages/jobApplicationManage/components/SignList.vue 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bMiniApp/src/subpackages/jobApplicationManage/jobApplicationManage/InnerPage.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cMiniApp/src/subpackages/curriculum/mineCertificateAddOrEdit/InnerPage.vue 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cMiniApp/src/subpackages/curriculum/mineDetailedInfo/InnerPage.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cMiniApp/src/subpackages/mine/mineCancel/InnerPage.vue 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cMiniApp/src/subpackages/mine/mineHire/InnerPage.vue 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cMiniApp/src/subpackages/mine/mineSign/InnerPage.vue 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/Card/FlexJobCard.vue 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/Card/FlexJobTopView.vue 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/constants/apiEnum.ts 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/constants/task.ts 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/hooks/index.ts 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/hooks/taskUser.ts 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/services/apiV2/task.ts 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/services/apiV2/taskUser.ts 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/services/apiV2/typings.d.ts 248 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bMiniApp/project.private.config.json
@@ -91,6 +91,13 @@
                    "query": "",
                    "launchMode": "default",
                    "scene": null
                },
                {
                    "name": "",
                    "pathName": "subpackages/jobApplicationManage/jobApplicationDetail/jobApplicationDetail",
                    "query": "id=04c75425-e783-4dbf-0f16-08ddd626b756",
                    "launchMode": "default",
                    "scene": null
                }
            ]
        }
apps/bMiniApp/src/subpackages/jobApplicationManage/components/JobDetail.vue
@@ -67,7 +67,7 @@
// const props = withDefaults(defineProps<Props>(), {});
const router = Taro.useRouter();
const taskId = router.params?.taskId;
const id = router.params?.id;
const {
  isLoading,
@@ -75,10 +75,10 @@
  data: detail,
  refetch,
} = useQuery({
  queryKey: ['taskServices/getTaskInfo', taskId],
  queryKey: ['taskServices/getTaskInfo', id],
  queryFn: async () => {
    return await taskServices.getTaskInfo(
      { id: taskId },
      { id: id },
      {
        showLoading: false,
      }
apps/bMiniApp/src/subpackages/jobApplicationManage/components/SignList.vue
@@ -4,14 +4,22 @@
      <FlexJobCard
        :name="item.name"
        :age="item.age"
        :genderType="item.genderType"
        :gender="item.gender"
        :avatar="item.avatar"
        :isReal="item.isReal"
        :personalIdentityContent="item.personalIdentityContent"
        :educationalBackgroundContent="item.educationalBackgroundContent"
        :taskCount="item.taskCount"
        :workSeniority="item.workSeniority"
        :workExperience="item.workExperience"
      >
        <template #footerLeft>
          <div class="flexJob-card-footer-text">{{ FlexTaskWorkerHireEnum[item.hireStatus] }}</div>
          <div class="flexJob-card-footer-text">
            {{ EnumTaskUserHireStatusText[item.hireStatus] }}
          </div>
        </template>
        <template #footerRight>
          <nut-button type="primary" @click="goToJobDetail(item.userId)">查看详情</nut-button>
          <nut-button type="primary" @click="goToJobDetail(item.id)">查看详情</nut-button>
        </template>
      </FlexJobCard>
    </template>
@@ -19,11 +27,9 @@
</template>
<script setup lang="ts">
import { OrderInputType } from '@12333/constants';
import { EnumTaskUserHireStatusText } from '@12333/constants';
import { RouterPath } from '@/constants';
import { FlexTaskWorkerHireEnum } from '@12333/constants/task';
import { useInfiniteLoading } from '@12333/hooks';
import * as flexWorkerServices from '@12333/services/api/FlexWorker';
import { useTaskUserList } from '@12333/hooks';
import { FlexJobCard } from '@12333/components';
import Taro from '@tarojs/taro';
@@ -36,27 +42,11 @@
// const props = withDefaults(defineProps<Props>(), {});
const router = Taro.useRouter();
const taskId = router.params?.taskId ?? '';
const id = router.params?.id ?? '';
const { infiniteLoadingProps } = useInfiniteLoading(
  ({ pageParam }) => {
    let params: API.GetFlexTaskWorkerApplyListInput = {
      flexTaskId: taskId,
      pageModel: {
        rows: 20,
        page: pageParam,
        orderInput: [{ property: 'creationTime', order: OrderInputType.Desc }],
      },
    };
    return flexWorkerServices.getFlexTaskWorkerApplyList(params, {
      showLoading: false,
    });
  },
  {
    queryKey: ['flexWorkerServices/getFlexTaskWorkerApplyList'],
  }
);
const { infiniteLoadingProps } = useTaskUserList({
  id: id,
});
function goToJobDetail(id: string) {
  Taro.navigateTo({
apps/bMiniApp/src/subpackages/jobApplicationManage/jobApplicationManage/InnerPage.vue
@@ -107,12 +107,12 @@
function goEdit(item: API.GetTaskInfosQueryResultItem, isCopy = false) {
  Taro.navigateTo({
    url: `${RouterPath.publishTask}?taskId=${item.id}&isCopy=${isCopy}`,
    url: `${RouterPath.publishTask}?id=${item.id}&isCopy=${isCopy}`,
  });
}
function goDetail(item: API.GetTaskInfosQueryResultItem) {
  Taro.navigateTo({
    url: `${RouterPath.jobApplicationDetail}?taskId=${item.id}`,
    url: `${RouterPath.jobApplicationDetail}?id=${item.id}`,
  });
}
</script>
apps/cMiniApp/src/subpackages/curriculum/mineCertificateAddOrEdit/InnerPage.vue
@@ -18,18 +18,20 @@
      >
        <nut-switch v-model="form.isForever" />
      </nut-form-item>
      <nut-form-item label="开始日期:" class="bole-form-item" prop="startDate">
        <ChooseInputWithDatePicker
          v-model="form.startDate"
          placeholder="请选择开始日期"
        ></ChooseInputWithDatePicker>
      </nut-form-item>
      <nut-form-item label="结束日期:" class="bole-form-item" prop="endDate">
        <ChooseInputWithDatePicker
          v-model="form.endDate"
          placeholder="请选择结束日期"
        ></ChooseInputWithDatePicker>
      </nut-form-item>
      <template v-if="!form.isForever">
        <nut-form-item label="开始日期:" class="bole-form-item" prop="startDate">
          <ChooseInputWithDatePicker
            v-model="form.startDate"
            placeholder="请选择开始日期"
          ></ChooseInputWithDatePicker>
        </nut-form-item>
        <nut-form-item label="结束日期:" class="bole-form-item" prop="endDate">
          <ChooseInputWithDatePicker
            v-model="form.endDate"
            placeholder="请选择结束日期"
          ></ChooseInputWithDatePicker>
        </nut-form-item>
      </template>
      <nut-form-item label="发证单位:" class="bole-form-item" prop="issueUnit">
        <nut-input v-model="form.issueUnit" placeholder="请输入"> </nut-input>
      </nut-form-item>
@@ -159,8 +161,8 @@
      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'),
      startDate: form.isForever ? '' : dayjs(form.startDate).format('YYYY-MM-DD 00:00:00'),
      endDate: form.isForever ? '' : dayjs(form.endDate).format('YYYY-MM-DD 23:59:59'),
      issueUnit: form.issueUnit,
      img: form.img?.[0]?.path,
      backImg: form.backImg?.[0]?.path,
apps/cMiniApp/src/subpackages/curriculum/mineDetailedInfo/InnerPage.vue
@@ -73,7 +73,7 @@
  try {
    let params: API.SaveUserResumeDetailCommand = {
      weight: form.weight,
      height: form.weight,
      height: form.height,
      photos: form.photos?.length ? form.photos.map((x) => x.path) : [],
    };
    let res = await userResumeServices.saveUserResumeDetail(params);
apps/cMiniApp/src/subpackages/mine/mineCancel/InnerPage.vue
@@ -4,7 +4,16 @@
    v-bind="infiniteLoadingProps"
  >
    <template #renderItem="{ item }">
      <TaskCard>
      <TaskCard
        :name="item.name"
        :begin-time="item.beginTime"
        :end-time="item.endTime"
        :billing-method="item.billingMethod"
        :benefits="item.benefits"
        :service-fee="item.serviceFee"
        :settlement-cycle="item.settlementCycle"
        :address-name="item.addressName"
      >
        <template #actions>
          <div class="task-card-actions-text">{{ '已取消' }}</div>
        </template>
@@ -15,33 +24,29 @@
<script setup lang="ts">
import { TaskCard } from '@12333/components';
import { useUserStore } from '@/stores/modules/user';
import { useInfiniteLoading } from '@12333/hooks';
import { OrderInputType } from '@12333/constants';
import * as flexWorkerServices from '@12333/services/api/FlexWorker';
import { EnumPagedListOrder } from '@12333/constants';
import * as taskServices from '@12333/services/apiV2/task';
defineOptions({
  name: 'InnerPage',
});
const userStore = useUserStore();
const { infiniteLoadingProps } = useInfiniteLoading(
  ({ pageParam }) => {
    let params: API.GetFlexTaskListInput = {
    let params: API.GetPersonalCancelTaskInfosQuery = {
      pageModel: {
        rows: 20,
        page: pageParam,
        orderInput: [{ property: 'creationTime', order: OrderInputType.Desc }],
        orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }],
      },
    };
    return flexWorkerServices.getFlexTaskByArrange(params, {
    return taskServices.getPersonalCancelTaskInfos(params, {
      showLoading: false,
    });
  },
  {
    queryKey: ['flexWorkerServices/getFlexTaskByArrange'],
    queryKey: ['taskServices/getPersonalCancelTaskInfos'],
  }
);
</script>
apps/cMiniApp/src/subpackages/mine/mineHire/InnerPage.vue
@@ -1,6 +1,6 @@
<template>
  <ProTabs
    v-model="queryState.mineHireType"
    v-model="queryState.status"
    name="home-tab"
    :showPaneContent="false"
    class="home-tabs"
@@ -9,20 +9,38 @@
    title-scroll
  >
    <ProTabPane :title="`全部`" :pane-key="0"></ProTabPane>
    <ProTabPane :title="`进行中`" :pane-key="10"></ProTabPane>
    <ProTabPane :title="`待验收`" :pane-key="20"></ProTabPane>
    <ProTabPane :title="`已完成`" :pane-key="30"></ProTabPane>
    <ProTabPane
      :title="`进行中`"
      :pane-key="GetPersonalHireTaskInfosQueryStatus.InProcess"
    ></ProTabPane>
    <ProTabPane
      :title="`已完成`"
      :pane-key="GetPersonalHireTaskInfosQueryStatus.Completed"
    ></ProTabPane>
  </ProTabs>
  <InfiniteLoading
    scrollViewClassName="common-infinite-scroll-list home-list"
    v-bind="infiniteLoadingProps"
    :key="queryState.mineHireType"
    :key="queryState.status"
  >
    <template #renderItem="{ item }">
      <TaskCard @click="goTaskDetail(item)">
      <TaskCard
        :name="item.name"
        :begin-time="item.beginTime"
        :end-time="item.endTime"
        :billing-method="item.billingMethod"
        :benefits="item.benefits"
        :service-fee="item.serviceFee"
        :settlement-cycle="item.settlementCycle"
        :address-name="item.addressName"
        @click="goTaskDetail(item)"
      >
        <template #actions>
          <div class="task-card-actions-text" :style="{ color: TaskStatusColor[10] }">
            {{ TaskStatusText[10] }}
          <div
            class="task-card-actions-text"
            :style="{ color: GetPersonalHireTaskInfosQueryStatusColor[item.status] }"
          >
            {{ GetPersonalHireTaskInfosQueryStatusText[item.status] }}
          </div>
        </template>
      </TaskCard>
@@ -32,11 +50,14 @@
<script setup lang="ts">
import { TaskCard, ProTabs, ProTabPane } from '@12333/components';
import { useUserStore } from '@/stores/modules/user';
import { TaskStatusText, TaskStatusColor, TaskStatus } from '@/constants';
import { useInfiniteLoading } from '@12333/hooks';
import { OrderInputType } from '@12333/constants';
import * as flexWorkerServices from '@12333/services/api/FlexWorker';
import {
  EnumPagedListOrder,
  GetPersonalHireTaskInfosQueryStatus,
  GetPersonalHireTaskInfosQueryStatusText,
  GetPersonalHireTaskInfosQueryStatusColor,
} from '@12333/constants';
import * as taskServices from '@12333/services/apiV2/task';
import Taro from '@tarojs/taro';
defineOptions({
@@ -44,35 +65,31 @@
});
const queryState = reactive({
  mineHireType: TaskStatus.All,
  status: 0 as any as GetPersonalHireTaskInfosQueryStatus,
});
const userStore = useUserStore();
const { infiniteLoadingProps } = useInfiniteLoading(
  ({ pageParam }) => {
    let params: API.GetFlexTaskListInput = {
    let params: API.GetPersonalHireTaskInfosQuery = {
      pageModel: {
        rows: 20,
        page: pageParam,
        orderInput: [
          queryState.mineHireType === TaskStatus.All
            ? { property: 'creationTime', order: OrderInputType.Desc }
            : { property: 'lastShelfTime', order: OrderInputType.Desc },
        ],
        orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }],
      },
    };
    return flexWorkerServices.getFlexTaskByArrange(params, {
    if (Number(queryState.status)) {
      params.status = queryState.status;
    }
    return taskServices.getPersonalHireTaskInfos(params, {
      showLoading: false,
    });
  },
  {
    queryKey: ['flexWorkerServices/getFlexTaskByArrange', queryState],
    queryKey: ['taskServices/getPersonalHireTaskInfos', queryState],
  }
);
function goTaskDetail(item: API.GetFlexTaskListOutput) {
function goTaskDetail(item: API.GetPersonalHireTaskInfosQueryResultItem) {
  Taro.navigateTo({
    url: `${RouterPath.taskDetail}?id=${item.id}`,
  });
apps/cMiniApp/src/subpackages/mine/mineSign/InnerPage.vue
@@ -1,6 +1,6 @@
<template>
  <ProTabs
    v-model="queryState.mineSignType"
    v-model="queryState.status"
    name="home-tab"
    :showPaneContent="false"
    class="home-tabs"
@@ -9,19 +9,38 @@
    title-scroll
  >
    <ProTabPane :title="`全部`" :pane-key="0"></ProTabPane>
    <ProTabPane :title="`待确认`" :pane-key="10"></ProTabPane>
    <ProTabPane :title="`待签约`" :pane-key="20"></ProTabPane>
    <ProTabPane
      :title="`待确认`"
      :pane-key="GetPersonalApplyTaskInfosQueryStatus.WaitHire"
    ></ProTabPane>
    <ProTabPane
      :title="`待签约`"
      :pane-key="GetPersonalApplyTaskInfosQueryStatus.WaitSignContract"
    ></ProTabPane>
  </ProTabs>
  <InfiniteLoading
    scrollViewClassName="common-infinite-scroll-list home-list"
    v-bind="infiniteLoadingProps"
    :key="queryState.mineSignType"
    :key="queryState.status"
  >
    <template #renderItem="{ item }">
      <TaskCard @click="goTaskDetail(item)">
      <TaskCard
        :name="item.name"
        :begin-time="item.beginTime"
        :end-time="item.endTime"
        :billing-method="item.billingMethod"
        :benefits="item.benefits"
        :service-fee="item.serviceFee"
        :settlement-cycle="item.settlementCycle"
        :address-name="item.addressName"
        @click="goTaskDetail(item)"
      >
        <template #actions>
          <div class="task-card-actions-text" :style="{ color: TaskStatusColor[10] }">
            {{ TaskStatusText[10] }}
          <div
            class="task-card-actions-text"
            :style="{ color: GetPersonalApplyTaskInfosQueryStatusColor[item.status] }"
          >
            {{ GetPersonalApplyTaskInfosQueryStatusText[item.status] }}
          </div>
        </template>
      </TaskCard>
@@ -32,10 +51,14 @@
<script setup lang="ts">
import { TaskCard, ProTabs, ProTabPane } from '@12333/components';
import { useUserStore } from '@/stores/modules/user';
import { TaskStatusText, TaskStatusColor, TaskStatus } from '@/constants';
import { useInfiniteLoading } from '@12333/hooks';
import { OrderInputType } from '@12333/constants';
import * as flexWorkerServices from '@12333/services/api/FlexWorker';
import {
  EnumPagedListOrder,
  GetPersonalApplyTaskInfosQueryStatus,
  GetPersonalApplyTaskInfosQueryStatusText,
  GetPersonalApplyTaskInfosQueryStatusColor,
} from '@12333/constants';
import * as taskServices from '@12333/services/apiV2/task';
import Taro from '@tarojs/taro';
defineOptions({
@@ -43,35 +66,33 @@
});
const queryState = reactive({
  mineSignType: TaskStatus.All,
  status: 0 as any as GetPersonalApplyTaskInfosQueryStatus,
});
const userStore = useUserStore();
const { infiniteLoadingProps } = useInfiniteLoading(
  ({ pageParam }) => {
    let params: API.GetFlexTaskListInput = {
    let params: API.GetPersonalApplyTaskInfosQuery = {
      pageModel: {
        rows: 20,
        page: pageParam,
        orderInput: [
          queryState.mineSignType === TaskStatus.All
            ? { property: 'creationTime', order: OrderInputType.Desc }
            : { property: 'lastShelfTime', order: OrderInputType.Desc },
        ],
        orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }],
      },
    };
    return flexWorkerServices.getFlexTaskByArrange(params, {
    if (Number(queryState.status)) {
      params.status = queryState.status;
    }
    return taskServices.getPersonalApplyTaskInfos(params, {
      showLoading: false,
    });
  },
  {
    queryKey: ['flexWorkerServices/getFlexTaskByArrange', queryState],
    queryKey: ['taskServices/getPersonalApplyTaskInfos', queryState],
  }
);
function goTaskDetail(item: API.GetFlexTaskListOutput) {
function goTaskDetail(item: API.GetPersonalApplyTaskInfosQueryResultItem) {
  Taro.navigateTo({
    url: `${RouterPath.taskDetail}?id=${item.id}`,
  });
packages/components/src/Card/FlexJobCard.vue
@@ -3,19 +3,21 @@
    <FlexJobTopView
      :name="name"
      :age="age"
      :genderType="genderType"
      :isRealName="isRealName"
      :arrangeCount="arrangeCount"
      :educationalLevel="educationalLevel"
      :avatar="avatar"
      :gender="gender"
      :isReal="isReal"
      :personalIdentityContent="personalIdentityContent"
      :educationalBackgroundContent="educationalBackgroundContent"
      :taskCount="taskCount"
    />
    <div class="flexJob-card-done-list">
      {{ workExperience }}
    </div>
    <div class="flexJob-card-done-detail" v-if="showDoneDetail">
      <div class="flexJob-card-done-detail-item">
        {{ '在「宁波雷迪森酒店」,做过客房服务员在「宁波雷迪森酒店」,做过客房服务员' }}
        {{ workSeniority }}
      </div>
      <div class="flexJob-card-done-detail-item">{{ '在「宁波雷迪森酒店」,做过客房服务员' }}</div>
      <!-- <div class="flexJob-card-done-detail-item">{{ '在「宁波雷迪森酒店」,做过客房服务员' }}</div> -->
    </div>
    <div class="flexJob-card-footer">
      <div class="flexJob-card-footer-left-wrapper">
@@ -40,7 +42,7 @@
<script setup lang="ts">
import { CommonTaskCardProps } from './card';
import FlexJobTopView from './FlexJobTopView.vue';
import { Gender } from '@12333/constants';
import { EnumUserGender, Gender } from '@12333/constants';
defineOptions({
  name: 'FlexJobCard',
@@ -52,12 +54,15 @@
  showDoneDetail?: boolean;
  name?: string;
  genderType?: Gender;
  avatar?: string;
  gender?: EnumUserGender;
  age?: number;
  isRealName?: boolean;
  educationalLevel?: string;
  isReal?: boolean;
  personalIdentityContent?: string;
  educationalBackgroundContent?: string;
  taskCount?: number;
  workExperience?: string;
  arrangeCount?: number;
  workSeniority?: string;
};
const props = withDefaults(defineProps<Props>(), {
packages/components/src/Card/FlexJobTopView.vue
@@ -1,24 +1,28 @@
<template>
  <div :class="['flexJob-card-top-wrapper', size]">
    <Avatar :src="avatarUrl" :size="size === 'small' ? 50 : 60" class="flexJob-card-top-avatar" />
    <Avatar :src="avatar" :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">{{ name }}</div>
        <div class="flexJob-card-top-info-gender">
          <img
            v-if="genderType === EnumUserGender.Male"
            v-if="gender === EnumUserGender.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" :class="{ 'is-real-name': isRealName }">
          {{ isRealName ? '已实名' : '未实名' }}
        <div class="flexJob-card-top-info-auth" :class="{ 'is-real-name': isReal }">
          {{ isReal ? '已实名' : '未实名' }}
        </div>
      </div>
      <slot name="detail">
        <div class="flexJob-card-top-info-detail">
          {{ `${age}岁 | ${educationalLevel} |  ${educationalLevel} | 上岗${arrangeCount}次` }}
          {{
            `${age ? '' : `${age}岁|`}${personalIdentityContent ?? ''} |  ${
              educationalBackgroundContent ?? ''
            } | 上岗${taskCount ?? 0}次`
          }}
        </div>
      </slot>
    </div>
@@ -38,18 +42,19 @@
type Props = {
  size?: 'normal' | 'small';
  avatarUrl?: string;
  avatar?: string;
  name?: string;
  genderType?: EnumUserGender;
  gender?: EnumUserGender;
  age?: number;
  educationalLevel?: string;
  arrangeCount?: number;
  isRealName?: boolean;
  isReal?: boolean;
  personalIdentityContent?: string;
  educationalBackgroundContent?: string;
  taskCount?: number;
};
const props = withDefaults(defineProps<Props>(), {
  size: 'normal',
  avatarUrl: AvatarImage,
  avatar: AvatarImage,
});
</script>
packages/constants/apiEnum.ts
@@ -91,7 +91,7 @@
  Dictionary = 0,
  /**任务 */
  Task = 1,
  /**任务雇佣 */
  /**任务人员 */
  TaskUser = 2,
  /**用户认证 */
  Auth = 3,
@@ -195,6 +195,14 @@
  Complete = 20,
}
/** 任务用户安排状态 */
export enum EnumTaskUserArrangeStatus {
  /**未安排 */
  Wait = 10,
  /**已安排 */
  Complete = 20,
}
/** 任务录用状态 */
export enum EnumTaskUserHireStatus {
  /**待录用 */
@@ -250,3 +258,19 @@
  /**运营 */
  Operation = 100,
}
/** 我的报名分页列表-状态 */
export enum GetPersonalApplyTaskInfosQueryStatus {
  /**待确认 */
  WaitHire = 10,
  /**待签约 */
  WaitSignContract = 20,
}
/** 我的已录用分页列表-状态 */
export enum GetPersonalHireTaskInfosQueryStatus {
  /**进行中 */
  InProcess = 10,
  /**已完成 */
  Completed = 20,
}
packages/constants/task.ts
@@ -6,6 +6,9 @@
  EnumTaskCheckReceiveStatus,
  EnumPersonalFreeTime,
  EnumPersonalJobSeekingStatus,
  EnumTaskUserHireStatus,
  GetPersonalApplyTaskInfosQueryStatus,
  GetPersonalHireTaskInfosQueryStatus,
} from './apiEnum';
export const EnumBillingMethodText = {
@@ -62,3 +65,29 @@
  [EnumPersonalJobSeekingStatus.Whatever]: '随便看看',
  [EnumPersonalJobSeekingStatus.Not]: '暂时不找任务',
};
export const EnumTaskUserHireStatusText = {
  [EnumTaskUserHireStatus.Wait]: '待录用',
  [EnumTaskUserHireStatus.Pass]: '已录用',
  [EnumTaskUserHireStatus.Refuse]: '已谢绝',
};
export const GetPersonalApplyTaskInfosQueryStatusText = {
  [GetPersonalApplyTaskInfosQueryStatus.WaitHire]: '待确认',
  [GetPersonalApplyTaskInfosQueryStatus.WaitSignContract]: '待签约',
};
export const GetPersonalApplyTaskInfosQueryStatusColor = {
  [GetPersonalApplyTaskInfosQueryStatus.WaitHire]: '#FF7D00',
  [GetPersonalApplyTaskInfosQueryStatus.WaitSignContract]: '#3A71FF',
};
export const GetPersonalHireTaskInfosQueryStatusText = {
  [GetPersonalHireTaskInfosQueryStatus.InProcess]: '进行中',
  [GetPersonalHireTaskInfosQueryStatus.Completed]: '已完成',
};
export const GetPersonalHireTaskInfosQueryStatusColor = {
  [GetPersonalHireTaskInfosQueryStatus.InProcess]: '#2A9E1B',
  [GetPersonalHireTaskInfosQueryStatus.Completed]: '#9FA4AC',
};
packages/hooks/index.ts
@@ -6,3 +6,4 @@
export * from './identify';
export * from './enterprise';
export * from './task';
export * from './taskUser';
packages/hooks/taskUser.ts
New file
@@ -0,0 +1,39 @@
import { useInfiniteLoading } from '@12333/hooks';
import { EnumPagedListOrder } from '@12333/constants';
import _ from 'lodash';
import { MaybeRef, unref } from 'vue';
import * as taskUserServices from '@12333/services/apiV2/taskUser';
type UseTaskListOptions = {
  id?: MaybeRef<string>;
};
export function useTaskUserList(options: UseTaskListOptions = {}) {
  const { id } = options;
  const { infiniteLoadingProps, invalidateQueries } = useInfiniteLoading(
    ({ pageParam }) => {
      let params: API.GetTaskUsersQuery = {
        pageModel: {
          rows: 20,
          page: pageParam,
          orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }],
        },
        id: unref(id),
      };
      return taskUserServices.getTaskUsers(params, {
        showLoading: false,
      });
    },
    {
      queryKey: ['taskUserServices/getTaskUsers', id],
      enabled: !!unref(id),
    }
  );
  return {
    infiniteLoadingProps,
    invalidateQueries,
  };
}
packages/services/apiV2/task.ts
@@ -14,6 +14,60 @@
  });
}
/** 我的报名分页列表 POST /api/flexjob/task/getPersonalApplyTaskInfos */
export async function getPersonalApplyTaskInfos(
  body: API.GetPersonalApplyTaskInfosQuery,
  options?: API.RequestConfig
) {
  return request<API.GetPersonalApplyTaskInfosQueryResult>(
    '/api/flexjob/task/getPersonalApplyTaskInfos',
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json-patch+json',
      },
      data: body,
      ...(options || {}),
    }
  );
}
/** 我的已取消分页列表 POST /api/flexjob/task/getPersonalCancelTaskInfos */
export async function getPersonalCancelTaskInfos(
  body: API.GetPersonalCancelTaskInfosQuery,
  options?: API.RequestConfig
) {
  return request<API.GetPersonalCancelTaskInfosQueryResult>(
    '/api/flexjob/task/getPersonalCancelTaskInfos',
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json-patch+json',
      },
      data: body,
      ...(options || {}),
    }
  );
}
/** 我的已录用分页列表 POST /api/flexjob/task/getPersonalHireTaskInfos */
export async function getPersonalHireTaskInfos(
  body: API.GetPersonalHireTaskInfosQuery,
  options?: API.RequestConfig
) {
  return request<API.GetPersonalHireTaskInfosQueryResult>(
    '/api/flexjob/task/getPersonalHireTaskInfos',
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json-patch+json',
      },
      data: body,
      ...(options || {}),
    }
  );
}
/** 查询任务详情 GET /api/flexjob/task/getTaskInfo */
export async function getTaskInfo(
  // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
packages/services/apiV2/taskUser.ts
@@ -26,7 +26,22 @@
  });
}
/** 查询应聘报名分页列表信息 POST /api/flexjob/taskUser/getTaskUsers */
/** B端查询人员安排分页列表信息 POST /api/flexjob/taskUser/getArrangeTaskUsers */
export async function getArrangeTaskUsers(
  body: API.GetArrangeTaskUsersQuery,
  options?: API.RequestConfig
) {
  return request<API.GetArrangeTaskUsersQueryResult>('/api/flexjob/taskUser/getArrangeTaskUsers', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json-patch+json',
    },
    data: body,
    ...(options || {}),
  });
}
/** B端查询应聘报名分页列表信息 POST /api/flexjob/taskUser/getTaskUsers */
export async function getTaskUsers(body: API.GetTaskUsersQuery, options?: API.RequestConfig) {
  return request<API.GetTaskUsersQueryResult>('/api/flexjob/taskUser/getTaskUsers', {
    method: 'POST',
@@ -38,6 +53,21 @@
  });
}
/** 任务安排 PUT /api/flexjob/taskUser/setTaskUserArrange */
export async function setTaskUserArrange(
  body: API.SetTaskUserArrangeCommand,
  options?: API.RequestConfig
) {
  return request<string>('/api/flexjob/taskUser/setTaskUserArrange', {
    method: 'PUT',
    headers: {
      'Content-Type': 'application/json-patch+json',
    },
    data: body,
    ...(options || {}),
  });
}
/** 任务录用 PUT /api/flexjob/taskUser/setTaskUserHire */
export async function setTaskUserHire(
  body: API.SetTaskUserHireCommand,
packages/services/apiV2/typings.d.ts
@@ -283,7 +283,7 @@
    Dictionary = 0,
    /**任务 */
    Task = 1,
    /**任务雇佣 */
    /**任务人员 */
    TaskUser = 2,
    /**用户认证 */
    Auth = 3,
@@ -378,6 +378,13 @@
    Complete = 20,
  }
  enum EnumTaskUserArrangeStatus {
    /**未安排 */
    Wait = 10,
    /**已安排 */
    Complete = 20,
  }
  enum EnumTaskUserHireStatus {
    /**待录用 */
    Wait = 10,
@@ -455,6 +462,24 @@
    /** 错误码 */
    errorCode?: string;
    data?: GetAliyunOSSAcsQueryResult;
    /** 执行成功 */
    success?: boolean;
    /** 错误信息 */
    msg?: any;
    /** 附加数据 */
    extras?: any;
    /** 时间戳 */
    timestamp?: number;
  }
  interface FriendlyResultGetArrangeTaskUsersQueryResult {
    /** 跟踪Id */
    traceId?: string;
    /** 状态码 */
    code?: number;
    /** 错误码 */
    errorCode?: string;
    data?: GetArrangeTaskUsersQueryResult;
    /** 执行成功 */
    success?: boolean;
    /** 错误信息 */
@@ -545,6 +570,60 @@
    /** 错误码 */
    errorCode?: string;
    data?: GetMenuQueryResult;
    /** 执行成功 */
    success?: boolean;
    /** 错误信息 */
    msg?: any;
    /** 附加数据 */
    extras?: any;
    /** 时间戳 */
    timestamp?: number;
  }
  interface FriendlyResultGetPersonalApplyTaskInfosQueryResult {
    /** 跟踪Id */
    traceId?: string;
    /** 状态码 */
    code?: number;
    /** 错误码 */
    errorCode?: string;
    data?: GetPersonalApplyTaskInfosQueryResult;
    /** 执行成功 */
    success?: boolean;
    /** 错误信息 */
    msg?: any;
    /** 附加数据 */
    extras?: any;
    /** 时间戳 */
    timestamp?: number;
  }
  interface FriendlyResultGetPersonalCancelTaskInfosQueryResult {
    /** 跟踪Id */
    traceId?: string;
    /** 状态码 */
    code?: number;
    /** 错误码 */
    errorCode?: string;
    data?: GetPersonalCancelTaskInfosQueryResult;
    /** 执行成功 */
    success?: boolean;
    /** 错误信息 */
    msg?: any;
    /** 附加数据 */
    extras?: any;
    /** 时间戳 */
    timestamp?: number;
  }
  interface FriendlyResultGetPersonalHireTaskInfosQueryResult {
    /** 跟踪Id */
    traceId?: string;
    /** 状态码 */
    code?: number;
    /** 错误码 */
    errorCode?: string;
    data?: GetPersonalHireTaskInfosQueryResult;
    /** 执行成功 */
    success?: boolean;
    /** 错误信息 */
@@ -1117,6 +1196,55 @@
    quickQuery?: string;
  }
  interface GetArrangeTaskUsersQuery {
    /** 任务Id */
    id?: string;
    /** 关键字(姓名/身份证/电话) */
    keywords?: string;
    arrangeStatus?: EnumTaskUserArrangeStatus;
    pageModel?: PagedListQueryPageModel;
  }
  interface GetArrangeTaskUsersQueryResult {
    pageModel?: PagedListQueryResultPageModel;
    /** 数据 */
    data?: GetArrangeTaskUsersQueryResultItem[];
  }
  interface GetArrangeTaskUsersQueryResultItem {
    /** 任务人员Id */
    id?: string;
    /** 头像 */
    avatar?: string;
    /** 姓名 */
    name?: string;
    /** 身份证号 */
    identity?: string;
    /** 手机号 */
    contactPhoneNumber?: string;
    gender?: EnumUserGender;
    /** 年龄 */
    age?: number;
    /** 是否实名 */
    isReal?: boolean;
    realMethod?: EnumUserRealMethod;
    /** 身份编号 */
    personalIdentityCode?: string;
    /** 身份 */
    personalIdentityContent?: string;
    /** 学历编号 */
    educationalBackgroundCode?: string;
    /** 学历 */
    educationalBackgroundContent?: string;
    /** 上岗次数 */
    taskCount?: number;
    /** 工作资历 */
    workSeniority?: string;
    /** 工作经验 */
    workExperience?: string;
    arrangeStatus?: EnumTaskUserArrangeStatus;
  }
  type GetCurrentLogierMenusQuery = Record<string, any>;
  interface GetDictionaryCategoriesQuery {
@@ -1514,6 +1642,111 @@
    name?: string;
  }
  interface GetPersonalApplyTaskInfosQuery {
    status?: GetPersonalApplyTaskInfosQueryStatus;
    pageModel?: PagedListQueryPageModel;
  }
  interface GetPersonalApplyTaskInfosQueryResult {
    pageModel?: PagedListQueryResultPageModel;
    /** 数据 */
    data?: GetPersonalApplyTaskInfosQueryResultItem[];
  }
  interface GetPersonalApplyTaskInfosQueryResultItem {
    /** 任务Id */
    id?: string;
    /** 任务名称 */
    name?: string;
    /** 任务开始时间 */
    beginTime?: string;
    /** 任务结束时间 */
    endTime?: string;
    billingMethod?: EnumBillingMethod;
    /** 服务费 */
    serviceFee?: number;
    settlementCycle?: EnumSettlementCycle;
    /** 福利 */
    benefits?: GetTaskInfoQueryResultBenefit[];
    /** 任务地点名称 */
    addressName?: string;
    status?: GetPersonalApplyTaskInfosQueryStatus;
  }
  enum GetPersonalApplyTaskInfosQueryStatus {
    /**待确认 */
    WaitHire = 10,
    /**待签约 */
    WaitSignContract = 20,
  }
  interface GetPersonalCancelTaskInfosQuery {
    pageModel?: PagedListQueryPageModel;
  }
  interface GetPersonalCancelTaskInfosQueryResult {
    pageModel?: PagedListQueryResultPageModel;
    /** 数据 */
    data?: GetPersonalCancelTaskInfosQueryResultItem[];
  }
  interface GetPersonalCancelTaskInfosQueryResultItem {
    /** 任务Id */
    id?: string;
    /** 任务名称 */
    name?: string;
    /** 任务开始时间 */
    beginTime?: string;
    /** 任务结束时间 */
    endTime?: string;
    billingMethod?: EnumBillingMethod;
    /** 服务费 */
    serviceFee?: number;
    settlementCycle?: EnumSettlementCycle;
    /** 福利 */
    benefits?: GetTaskInfoQueryResultBenefit[];
    /** 任务地点名称 */
    addressName?: string;
  }
  interface GetPersonalHireTaskInfosQuery {
    status?: GetPersonalHireTaskInfosQueryStatus;
    pageModel?: PagedListQueryPageModel;
  }
  interface GetPersonalHireTaskInfosQueryResult {
    pageModel?: PagedListQueryResultPageModel;
    /** 数据 */
    data?: GetPersonalHireTaskInfosQueryResultItem[];
  }
  interface GetPersonalHireTaskInfosQueryResultItem {
    /** 任务Id */
    id?: string;
    /** 任务名称 */
    name?: string;
    /** 任务开始时间 */
    beginTime?: string;
    /** 任务结束时间 */
    endTime?: string;
    billingMethod?: EnumBillingMethod;
    /** 服务费 */
    serviceFee?: number;
    settlementCycle?: EnumSettlementCycle;
    /** 福利 */
    benefits?: GetTaskInfoQueryResultBenefit[];
    /** 任务地点名称 */
    addressName?: string;
    status?: GetPersonalHireTaskInfosQueryStatus;
  }
  enum GetPersonalHireTaskInfosQueryStatus {
    /**进行中 */
    InProcess = 10,
    /**已完成 */
    Completed = 20,
  }
  type GetPersonalLoginInfoQuery = Record<string, any>;
  interface GetPersonalLoginInfoQueryResult {
@@ -1717,8 +1950,6 @@
    releaseStatus?: EnumTaskReleaseStatus;
    recommendStatus?: EnumTaskRecommendStatus;
    checkReceiveStatus?: EnumTaskCheckReceiveStatus;
    /** 录用状态 */
    hireStatus?: EnumTaskUserHireStatus[];
    pageModel?: PagedListQueryPageModel;
  }
@@ -1774,7 +2005,6 @@
    recommendStatus?: EnumTaskRecommendStatus;
    /** 创建时间 */
    createdTime?: string;
    hireStatus?: EnumTaskUserHireStatus;
  }
  interface GetTaskInfosQueryResultObjectData {
@@ -1801,7 +2031,7 @@
  }
  interface GetTaskUsersQueryResultItem {
    /** 任务雇佣Id */
    /** 任务人员Id */
    id?: string;
    /** 头像 */
    avatar?: string;
@@ -2585,8 +2815,14 @@
    releaseStatus?: EnumTaskReleaseStatus;
  }
  interface SetTaskUserArrangeCommand {
    /** 任务人员Id */
    id?: string;
    arrangeStatus?: EnumTaskUserArrangeStatus;
  }
  interface SetTaskUserHireCommand {
    /** 任务雇佣Id */
    /** 任务人员Id */
    id?: string;
    hireStatus?: EnumTaskUserHireStatus;
  }