| | |
| | | "useIsLogin": true, |
| | | "useLoginedJump": true, |
| | | "useSwitchTab": true, |
| | | "useUser": true |
| | | "useUser": true, |
| | | "HomeOrderType": true, |
| | | "useTaskList": true, |
| | | "EnumBillingMethod": true, |
| | | "EnumClientType": true, |
| | | "EnumMenuType": true, |
| | | "EnumMenuVisitLevel": true, |
| | | "EnumPagedListOrder": true, |
| | | "EnumRealAccess": true, |
| | | "EnumResourceController": true, |
| | | "EnumResourceMethod": true, |
| | | "EnumRoleWebApiDataPower": true, |
| | | "EnumSettlementCycle": true, |
| | | "EnumSmsAccess": true, |
| | | "EnumSmsTemplateType": true, |
| | | "EnumTaskCheckReceiveStatus": true, |
| | | "EnumTaskRecommendStatus": true, |
| | | "EnumTaskReleaseStatus": true, |
| | | "EnumTaskSettlementStatus": true, |
| | | "EnumTaskStatus": true, |
| | | "EnumUserGender": true, |
| | | "EnumUserStatus": true, |
| | | "EnumUserType": true |
| | | } |
| | | } |
| | |
| | | const AppLocalConfig: typeof import('./src/constants/app')['AppLocalConfig'] |
| | | const BackType: typeof import('./src/constants/enum')['BackType'] |
| | | const EffectScope: typeof import('vue')['EffectScope'] |
| | | const EnumBillingMethod: typeof import('./src/constants/apiEnum')['EnumBillingMethod'] |
| | | const EnumClientType: typeof import('./src/constants/apiEnum')['EnumClientType'] |
| | | const EnumMenuType: typeof import('./src/constants/apiEnum')['EnumMenuType'] |
| | | const EnumMenuVisitLevel: typeof import('./src/constants/apiEnum')['EnumMenuVisitLevel'] |
| | | const EnumPagedListOrder: typeof import('./src/constants/apiEnum')['EnumPagedListOrder'] |
| | | const EnumRealAccess: typeof import('./src/constants/apiEnum')['EnumRealAccess'] |
| | | const EnumResourceController: typeof import('./src/constants/apiEnum')['EnumResourceController'] |
| | | const EnumResourceMethod: typeof import('./src/constants/apiEnum')['EnumResourceMethod'] |
| | | const EnumRoleWebApiDataPower: typeof import('./src/constants/apiEnum')['EnumRoleWebApiDataPower'] |
| | | const EnumSettlementCycle: typeof import('./src/constants/apiEnum')['EnumSettlementCycle'] |
| | | const EnumSmsAccess: typeof import('./src/constants/apiEnum')['EnumSmsAccess'] |
| | | const EnumSmsTemplateType: typeof import('./src/constants/apiEnum')['EnumSmsTemplateType'] |
| | | const EnumTaskCheckReceiveStatus: typeof import('./src/constants/apiEnum')['EnumTaskCheckReceiveStatus'] |
| | | const EnumTaskRecommendStatus: typeof import('./src/constants/apiEnum')['EnumTaskRecommendStatus'] |
| | | const EnumTaskReleaseStatus: typeof import('./src/constants/apiEnum')['EnumTaskReleaseStatus'] |
| | | const EnumTaskSettlementStatus: typeof import('./src/constants/apiEnum')['EnumTaskSettlementStatus'] |
| | | const EnumTaskStatus: typeof import('./src/constants/apiEnum')['EnumTaskStatus'] |
| | | const EnumUserGender: typeof import('./src/constants/apiEnum')['EnumUserGender'] |
| | | const EnumUserStatus: typeof import('./src/constants/apiEnum')['EnumUserStatus'] |
| | | const EnumUserType: typeof import('./src/constants/apiEnum')['EnumUserType'] |
| | | const HomeOrderType: typeof import('./src/hooks/task')['HomeOrderType'] |
| | | const OssAssets: typeof import('./src/constants/img')['OssAssets'] |
| | | const RouterPath: typeof import('./src/constants/router')['RouterPath'] |
| | | const TabBarPageRouter: typeof import('./src/constants/tabBar')['TabBarPageRouter'] |
| | |
| | | const useRouter: typeof import('vue-router')['useRouter'] |
| | | const useSlots: typeof import('vue')['useSlots'] |
| | | const useSwitchTab: typeof import('./src/hooks/router')['useSwitchTab'] |
| | | const useTaskList: typeof import('./src/hooks/task')['useTaskList'] |
| | | const useTemplateRef: typeof import('vue')['useTemplateRef'] |
| | | const useUser: typeof import('./src/hooks/user')['useUser'] |
| | | const watch: typeof import('vue')['watch'] |
| | |
| | | // @ts-ignore |
| | | export type { RouterPath, RouterPath } from './src/constants/router' |
| | | import('./src/constants/router') |
| | | // @ts-ignore |
| | | export type { HomeOrderType } from './src/hooks/task' |
| | | import('./src/hooks/task') |
| | | } |
| | | // for vue template auto import |
| | | import { UnwrapRef } from 'vue' |
| | |
| | | readonly AppLocalConfig: UnwrapRef<typeof import('./src/constants/app')['AppLocalConfig']> |
| | | readonly BackType: UnwrapRef<typeof import('./src/constants/enum')['BackType']> |
| | | readonly EffectScope: UnwrapRef<typeof import('vue')['EffectScope']> |
| | | readonly HomeOrderType: UnwrapRef<typeof import('./src/hooks/task')['HomeOrderType']> |
| | | readonly OssAssets: UnwrapRef<typeof import('./src/constants/img')['OssAssets']> |
| | | readonly RouterPath: UnwrapRef<typeof import('./src/constants/router')['RouterPath']> |
| | | readonly TabBarPageRouter: UnwrapRef<typeof import('./src/constants/tabBar')['TabBarPageRouter']> |
| | |
| | | readonly useRouter: UnwrapRef<typeof import('vue-router')['useRouter']> |
| | | readonly useSlots: UnwrapRef<typeof import('vue')['useSlots']> |
| | | readonly useSwitchTab: UnwrapRef<typeof import('./src/hooks/router')['useSwitchTab']> |
| | | readonly useTaskList: UnwrapRef<typeof import('./src/hooks/task')['useTaskList']> |
| | | readonly useTemplateRef: UnwrapRef<typeof import('vue')['useTemplateRef']> |
| | | readonly useUser: UnwrapRef<typeof import('./src/hooks/user')['useUser']> |
| | | readonly watch: UnwrapRef<typeof import('vue')['watch']> |
New file |
| | |
| | | import { useInfiniteLoading } from '@12333/hooks'; |
| | | 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', |
| | | LastShelfTime = 'LastShelfTime', |
| | | } |
| | | |
| | | type UseTaskListOptions = { |
| | | cityCode?: MaybeRef<string>; |
| | | enabled?: MaybeRef<boolean>; |
| | | }; |
| | | |
| | | export function useTaskList(options: UseTaskListOptions = {}) { |
| | | const { cityCode = '', enabled = true } = options; |
| | | |
| | | const searchValue = ref(''); |
| | | |
| | | const queryMenuState = reactive({ |
| | | genderLimit: '' as any as EnumUserGender, |
| | | settlementCycle: '' as any as EnumSettlementCycle, |
| | | benefitCodes: '', |
| | | status: '' as any as EnumTaskStatus, |
| | | releaseStatus: '' as any as EnumTaskReleaseStatus, |
| | | }); |
| | | |
| | | const queryState = reactive({ |
| | | searchValueTrim: '', |
| | | orderType: HomeOrderType.Recommend, |
| | | }); |
| | | |
| | | const handleSearch = _.debounce(function () { |
| | | queryState.searchValueTrim = trim(searchValue.value); |
| | | }, 300); |
| | | |
| | | const { infiniteLoadingProps, invalidateQueries } = useInfiniteLoading( |
| | | ({ pageParam }) => { |
| | | let params: API.GetTaskInfosQuery = { |
| | | pageModel: { |
| | | rows: 20, |
| | | page: pageParam, |
| | | orderInput: [ |
| | | queryState.orderType === HomeOrderType.Recommend |
| | | ? { property: 'recommendStatus', order: EnumPagedListOrder.Desc } |
| | | : { property: 'createdTime', order: EnumPagedListOrder.Desc }, |
| | | ], |
| | | }, |
| | | keywords: queryState.searchValueTrim, |
| | | cityCode: unref(cityCode), |
| | | settlementCycle: queryMenuState.settlementCycle, |
| | | benefitCodes: [queryMenuState.benefitCodes].filter(Boolean), |
| | | genderLimit: queryMenuState.genderLimit, |
| | | status: queryMenuState.status, |
| | | releaseStatus: queryMenuState.releaseStatus, |
| | | }; |
| | | |
| | | return taskServices.getTaskInfos(params, { |
| | | showLoading: false, |
| | | }); |
| | | }, |
| | | { |
| | | queryKey: ['taskServices/getTaskInfos', queryState, queryMenuState, cityCode], |
| | | enabled: enabled, |
| | | } |
| | | ); |
| | | |
| | | return { |
| | | searchValue, |
| | | queryState, |
| | | queryMenuState, |
| | | handleSearch, |
| | | infiniteLoadingProps, |
| | | invalidateQueries, |
| | | }; |
| | | } |
| | |
| | | <div class="mine-go-login" v-else>去登录</div> |
| | | </div> |
| | | </template> |
| | | <div class="mine-business-card"> |
| | | <div class="mine-business-card" v-if="isLogin"> |
| | | <div class="mine-business-card-item" @click="goBusinessCard"> |
| | | <img class="mine-business-card-item-icon" :src="IconBusinessCard" alt="" /> |
| | | <div class="mine-business-card-item-text">我的电子名片</div> |
| | |
| | | <template> |
| | | <ProTabs |
| | | v-model="queryState.flexTaskReleaseStatus" |
| | | v-model="queryMenuState.releaseStatus" |
| | | name="home-tab" |
| | | :showPaneContent="false" |
| | | class="home-tabs" |
| | |
| | | title-scroll |
| | | > |
| | | <ProTabPane |
| | | :title="`${ |
| | | FlexTaskReleaseStatusEnumText[FlexTaskReleaseStatusEnum.Releasing] |
| | | }(${releaseing})`" |
| | | :pane-key="FlexTaskReleaseStatusEnum.Releasing" |
| | | :title="`发布中(${releaseing})`" |
| | | :pane-key="EnumTaskReleaseStatus.InProcess" |
| | | ></ProTabPane> |
| | | <ProTabPane |
| | | :title="`${FlexTaskReleaseStatusEnumText[FlexTaskReleaseStatusEnum.Stoping]}(${stoping})`" |
| | | :pane-key="FlexTaskReleaseStatusEnum.Stoping" |
| | | :title="`已停止(${stoping})`" |
| | | :pane-key="EnumTaskReleaseStatus.Stopped" |
| | | ></ProTabPane> |
| | | </ProTabs> |
| | | <InfiniteLoading |
| | | scrollViewClassName="common-infinite-scroll-list home-list" |
| | | v-bind="infiniteLoadingProps" |
| | | :key="queryState.flexTaskReleaseStatus" |
| | | :key="queryMenuState.releaseStatus" |
| | | > |
| | | <template #renderItem="{ item }"> |
| | | <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]" |
| | | :name="item.name" |
| | | :beginTime="item.beginTime" |
| | | :endTime="item.endTime" |
| | | :createdTime="item.createdTime" |
| | | :addressName="item.addressName" |
| | | :serviceFee="item.serviceFee" |
| | | :userCount="item.userCount" |
| | | :unit="BillingMethodEnumUnit[item.billingMethod]" |
| | | :releaseStatus="item.releaseStatus" |
| | | @edit="goEdit(item)" |
| | | @copy="goEdit(item, true)" |
| | | @detail="goDetail(item)" |
| | | @publish="handleChangeStatus(item, FlexTaskReleaseStatusEnum.Releasing)" |
| | | @stop="handleChangeStatus(item, FlexTaskReleaseStatusEnum.Stoping)" |
| | | @publish="handleChangeStatus(item, EnumTaskReleaseStatus.InProcess)" |
| | | @stop="handleChangeStatus(item, EnumTaskReleaseStatus.Stopped)" |
| | | @delete="handleDelete(item)" |
| | | > |
| | | </JobApplicationCard> |
| | |
| | | <script setup lang="ts"> |
| | | import { JobApplicationCard, ProTabs, ProTabPane } from '@12333/components'; |
| | | import { RouterPath } from '@/constants'; |
| | | import { useInfiniteLoading } from '@12333/hooks'; |
| | | import { OrderInputType } from '@12333/constants'; |
| | | import { |
| | | FlexTaskReleaseStatusEnum, |
| | | FlexTaskReleaseStatusEnumText, |
| | | SalaryTimeTypeEnumUnit, |
| | | } from '@12333/constants/task'; |
| | | import { EnumTaskReleaseStatus, BillingMethodEnumUnit } from '@12333/constants'; |
| | | import * as flexWorkerServices from '@12333/services/api/FlexWorker'; |
| | | import Taro from '@tarojs/taro'; |
| | | import { Message } from '@12333/utils'; |
| | | import * as taskServices from '@12333/services/apiV2/task'; |
| | | |
| | | defineOptions({ |
| | | name: 'InnerPage', |
| | | }); |
| | | |
| | | const queryState = reactive({ |
| | | flexTaskReleaseStatus: FlexTaskReleaseStatusEnum.Releasing, |
| | | }); |
| | | |
| | | const { infiniteLoadingProps, invalidateQueries } = useInfiniteLoading( |
| | | ({ pageParam }) => { |
| | | let params: API.GetFlexTaskListByStatusInput = { |
| | | releaseStatus: queryState.flexTaskReleaseStatus, |
| | | pageModel: { |
| | | rows: 20, |
| | | page: pageParam, |
| | | orderInput: [{ property: 'creationTime', order: OrderInputType.Desc }], |
| | | }, |
| | | }; |
| | | |
| | | return flexWorkerServices.getFlexTaskList(params, { |
| | | showLoading: false, |
| | | }); |
| | | }, |
| | | { |
| | | queryKey: ['flexWorkerServices/getFlexTaskList', queryState], |
| | | } |
| | | ); |
| | | const { queryMenuState, infiniteLoadingProps, invalidateQueries } = useTaskList(); |
| | | |
| | | const releaseing = computed(() => { |
| | | return infiniteLoadingProps.value?.listData?.pages?.[0]?.objectData?.releaseing ?? 0; |
| | |
| | | }); |
| | | |
| | | async function handleChangeStatus( |
| | | item: API.GetFlexTaskListOutput, |
| | | releaseStatus: FlexTaskReleaseStatusEnum |
| | | item: API.GetTaskInfosQueryResultItem, |
| | | releaseStatus: EnumTaskReleaseStatus |
| | | ) { |
| | | try { |
| | | let params: API.UpdateTaskReleaseStatusInput = { |
| | | taskId: item.taskId, |
| | | let params: API.SetTaskInfoReleaseStatusCommand = { |
| | | ids: [item.id], |
| | | releaseStatus: releaseStatus, |
| | | }; |
| | | let res = await flexWorkerServices.updateFlexTaskReleaseStatus(params); |
| | | let res = await taskServices.setTaskInfoReleaseStatus(params); |
| | | if (res) { |
| | | Message.success('操作成功'); |
| | | invalidateQueries(); |
| | |
| | | } catch (error) {} |
| | | } |
| | | |
| | | async function handleDelete(item: API.GetFlexTaskListOutput) { |
| | | async function handleDelete(item: API.GetTaskInfosQueryResultItem) { |
| | | try { |
| | | await Message.confirm({ |
| | | message: '确定要删除吗?', |
| | | }); |
| | | let params: API.APIdeleteFlexTaskParams = { |
| | | id: item.taskId, |
| | | let params: API.DeleteTaskInfoCommand = { |
| | | ids: [item.id], |
| | | }; |
| | | let res = await flexWorkerServices.deleteFlexTask(params); |
| | | let res = await taskServices.deleteTaskInfo(params); |
| | | if (res) { |
| | | Message.success('删除成功'); |
| | | invalidateQueries(); |
| | |
| | | } catch (error) {} |
| | | } |
| | | |
| | | function goEdit(item: API.GetFlexTaskListOutput, isCopy = false) { |
| | | function goEdit(item: API.GetTaskInfosQueryResultItem, isCopy = false) { |
| | | Taro.navigateTo({ |
| | | url: `${RouterPath.publishTask}?taskId=${item.taskId}&isCopy=${isCopy}`, |
| | | url: `${RouterPath.publishTask}?taskId=${item.id}&isCopy=${isCopy}`, |
| | | }); |
| | | } |
| | | function goDetail(item: API.GetFlexTaskListOutput) { |
| | | function goDetail(item: API.GetTaskInfosQueryResultItem) { |
| | | Taro.navigateTo({ |
| | | url: `${RouterPath.jobApplicationDetail}?taskId=${item.taskId}`, |
| | | url: `${RouterPath.jobApplicationDetail}?taskId=${item.id}`, |
| | | }); |
| | | } |
| | | </script> |
| | |
| | | <template> |
| | | <ProTabs |
| | | v-model="queryState.status" |
| | | v-model="queryMenuState.status" |
| | | name="task-tab" |
| | | :showPaneContent="false" |
| | | class="task-tabs" |
| | |
| | | title-gutter="8" |
| | | title-scroll |
| | | > |
| | | <ProTabPane :title="`待安排(${notCount})`" pane-key="10"></ProTabPane> |
| | | <ProTabPane :title="`已安排(${hasCount})`" pane-key="20"></ProTabPane> |
| | | <ProTabPane :title="`待安排(${notCount})`" :pane-key="EnumTaskStatus.Wait"></ProTabPane> |
| | | <ProTabPane :title="`已安排(${hasCount})`" :pane-key="EnumTaskStatus.Complete"></ProTabPane> |
| | | </ProTabs> |
| | | <InfiniteLoading |
| | | scrollViewClassName="common-infinite-scroll-list" |
| | | v-bind="infiniteLoadingProps" |
| | | :key="queryState.status" |
| | | :key="queryMenuState.status" |
| | | > |
| | | <template #renderItem="{ item }"> |
| | | <JobApplicationCard |
| | | :taskName="item.taskName" |
| | | :startDate="item.startDate" |
| | | :endDate="item.endDate" |
| | | :address="item.address" |
| | | :creationTime="item.creationTime" |
| | | :fee="item.fee" |
| | | :unit="SalaryTimeTypeEnumUnit[item.feeType]" |
| | | :name="item.name" |
| | | :beginTime="item.beginTime" |
| | | :endTime="item.endTime" |
| | | :addressName="item.addressName" |
| | | :createdTime="item.createdTime" |
| | | :serviceFee="item.serviceFee" |
| | | :unit="BillingMethodEnumUnit[item.billingMethod]" |
| | | @click="goSubmitTaskDetail(item)" |
| | | mode="taskManage" |
| | | > |
| | | <template #footer-actions> |
| | | <nut-button |
| | | v-if="item.isArrange" |
| | | v-if="item.status === EnumTaskStatus.Complete" |
| | | type="primary" |
| | | :color="Colors.Info" |
| | | class="dark-btn" |
| | |
| | | <script setup lang="ts"> |
| | | import { JobApplicationCard, ProTabs, ProTabPane } from '@12333/components'; |
| | | import Taro from '@tarojs/taro'; |
| | | import { useInfiniteLoading } from '@12333/hooks'; |
| | | import { OrderInputType, Colors } from '@12333/constants'; |
| | | import * as flexWorkerServices from '@12333/services/api/FlexWorker'; |
| | | import { SalaryTimeTypeEnumUnit } from '@12333/constants/task'; |
| | | import { EnumTaskStatus, BillingMethodEnumUnit, Colors } from '@12333/constants'; |
| | | import { useTaskList } from '@/hooks/task'; |
| | | |
| | | defineOptions({ |
| | | name: 'InnerPage', |
| | | }); |
| | | |
| | | const queryState = reactive({ |
| | | status: '10', |
| | | }); |
| | | |
| | | const { infiniteLoadingProps } = useInfiniteLoading( |
| | | ({ pageParam }) => { |
| | | let params: API.GetFlexTaskListInput = { |
| | | isArrange: queryState.status === '20', |
| | | pageModel: { |
| | | rows: 20, |
| | | page: pageParam, |
| | | orderInput: [{ property: 'creationTime', order: OrderInputType.Desc }], |
| | | }, |
| | | }; |
| | | |
| | | return flexWorkerServices.getFlexTaskByArrange(params, { |
| | | showLoading: false, |
| | | }); |
| | | }, |
| | | { |
| | | queryKey: ['flexWorkerServices/getFlexTaskByArrange', queryState], |
| | | } |
| | | ); |
| | | const { queryMenuState, infiniteLoadingProps } = useTaskList(); |
| | | |
| | | const hasCount = computed(() => { |
| | | return infiniteLoadingProps.value?.listData?.pages?.[0]?.objectData?.hasCount ?? 0; |
| | |
| | | return infiniteLoadingProps.value?.listData?.pages?.[0]?.objectData?.notCount ?? 0; |
| | | }); |
| | | |
| | | function goSubmitTaskDetail(item: API.GetFlexTaskListOutput) { |
| | | function goSubmitTaskDetail(item: API.GetTaskInfosQueryResultItem) { |
| | | Taro.navigateTo({ |
| | | url: `${RouterPath.flexJobDetail}?taskId=${item.taskId}`, |
| | | url: `${RouterPath.flexJobDetail}?taskId=${item.id}`, |
| | | }); |
| | | } |
| | | |
| | | function goBatchTaskList(item: API.GetFlexTaskListOutput, status: string) { |
| | | function goBatchTaskList(item: API.GetTaskInfosQueryResultItem, status: string) { |
| | | Taro.navigateTo({ |
| | | url: `${RouterPath.batchTaskList}?taskId=${item.taskId}&detail=${status}`, |
| | | url: `${RouterPath.batchTaskList}?taskId=${item.id}&detail=${status}`, |
| | | }); |
| | | } |
| | | </script> |
| | |
| | | <template> |
| | | <div class="job-application-card-wrapper"> |
| | | <div class="job-application-card-title-wrapper"> |
| | | <div class="job-application-card-title">{{ taskName }}</div> |
| | | <TaskPrice :value="fee" :unit="unit" v-if="mode === 'taskManage'" /> |
| | | <div class="job-application-card-title">{{ name }}</div> |
| | | <TaskPrice :value="serviceFee" :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 class="job-application-card-line"> |
| | | <div class="job-application-card-time"> |
| | | {{ |
| | | `${dayjs(startDate).format('YYYY年MM月DD日')}至${dayjs(endDate).format('YYYY年MM月DD日')}` |
| | | `${dayjs(beginTime).format('YYYY年MM月DD日')}至${dayjs(endTime).format('YYYY年MM月DD日')}` |
| | | }} |
| | | </div> |
| | | <div class="job-application-card-status" v-if="mode === 'normal'"> |
| | | {{ FlexTaskReleaseStatusEnumText[releaseStatus] }} |
| | | {{ EnumTaskReleaseStatusText[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">{{ address }}</div> |
| | | <div class="job-application-card-company-address">{{ addressName }}</div> |
| | | </div> |
| | | <div class="job-application-card-people" v-if="mode === 'normal'"> |
| | | {{ `报名人数:${applyWorkerCount}` }} |
| | | {{ `报名人数:${userCount}` }} |
| | | </div> |
| | | </div> |
| | | <div class="job-application-card-line"> |
| | | <div class="job-application-card-publish-time"> |
| | | {{ `发布日期:${dayjs(creationTime).format('YYYY-MM-DD')}` }} |
| | | {{ `发布日期:${dayjs(createdTime).format('YYYY-MM-DD')}` }} |
| | | </div> |
| | | <slot name="footer-actions"> |
| | | <div class="job-application-card-fee"> |
| | | <TaskPrice :value="fee" :unit="unit" /> |
| | | <TaskPrice :value="serviceFee" :unit="unit" /> |
| | | </div> |
| | | </slot> |
| | | </div> |
| | |
| | | import { ActionSheet } from '@nutui/nutui-taro'; |
| | | import { Portal } from 'senin-mini/components'; |
| | | import { TaskPrice } from '@12333/components'; |
| | | import { EnumTaskStatus, EnumTaskReleaseStatus, EnumTaskReleaseStatusText } from '@12333/constants'; |
| | | import dayjs from 'dayjs'; |
| | | |
| | | defineOptions({ |
| | |
| | | Delete, |
| | | } |
| | | |
| | | enum FlexTaskReleaseStatusEnum { |
| | | /** |
| | | * 发布中 |
| | | */ |
| | | Releasing = 10, |
| | | /** |
| | | * 已停止 |
| | | */ |
| | | Stoping = 20, |
| | | } |
| | | |
| | | const FlexTaskReleaseStatusEnumText = { |
| | | [FlexTaskReleaseStatusEnum.Releasing]: '发布中', |
| | | [FlexTaskReleaseStatusEnum.Stoping]: '已停止', |
| | | }; |
| | | |
| | | type Props = CommonTaskCardProps & { |
| | | showActions?: boolean; |
| | | status?: FlexTaskReleaseStatusEnum; |
| | | status?: EnumTaskStatus; |
| | | mode?: 'taskManage' | 'normal'; |
| | | |
| | | taskName?: string; |
| | | startDate?: string; |
| | | endDate?: string; |
| | | address?: string; |
| | | creationTime?: string; |
| | | fee?: number; |
| | | applyWorkerCount?: number; |
| | | name?: string; |
| | | beginTime?: string; |
| | | endTime?: string; |
| | | addressName?: string; |
| | | createdTime?: string; |
| | | serviceFee?: number; |
| | | userCount?: number; |
| | | unit?: string; |
| | | releaseStatus?: API.FlexTaskReleaseStatusEnum; |
| | | releaseStatus?: EnumTaskReleaseStatus; |
| | | }; |
| | | |
| | | const props = withDefaults(defineProps<Props>(), { |
| | |
| | | value: ManageActions.Detail, |
| | | } |
| | | ); |
| | | if (props.releaseStatus === FlexTaskReleaseStatusEnum.Stoping) { |
| | | if (props.releaseStatus === EnumTaskReleaseStatus.Stopped) { |
| | | _menuList.push({ |
| | | name: '发布', |
| | | value: ManageActions.Publish, |
| | | }); |
| | | } |
| | | if (props.releaseStatus === FlexTaskReleaseStatusEnum.Releasing) { |
| | | if (props.releaseStatus === EnumTaskReleaseStatus.InProcess) { |
| | | _menuList.push({ |
| | | name: '停止发布', |
| | | value: ManageActions.Stop, |
| | |
| | | AliyunSms = 10, |
| | | } |
| | | |
| | | /** 短信模板类型 */ |
| | | export enum EnumSmsTemplateType { |
| | | /**登录 */ |
| | | Login = 0, |
| | | /**注册 */ |
| | | Register = 1, |
| | | /**修改密码 */ |
| | | UpdatePassword = 2, |
| | | /**绑定手机号码 */ |
| | | BindPhoneNumber = 3, |
| | | /**修改手机号码 */ |
| | | UpdatePhoneNumber = 4, |
| | | } |
| | | |
| | | /** 任务结算状态 */ |
| | | export enum EnumTaskCheckReceiveStatus { |
| | | /**待验收 */ |
| | |
| | | import { EnumBillingMethod, EnumUserGender, EnumSettlementCycle } from './apiEnum'; |
| | | import { |
| | | EnumBillingMethod, |
| | | EnumUserGender, |
| | | EnumSettlementCycle, |
| | | EnumTaskReleaseStatus, |
| | | } from './apiEnum'; |
| | | |
| | | export const EnumBillingMethodText = { |
| | | [EnumBillingMethod.Month]: '按月', |
| | |
| | | [EnumBillingMethod.Hour]: '元/小时', |
| | | [EnumBillingMethod.Piece]: '元/件', |
| | | }; |
| | | |
| | | export const EnumTaskReleaseStatusText = { |
| | | [EnumTaskReleaseStatus.InProcess]: '发布中', |
| | | [EnumTaskReleaseStatus.Stopped]: '已停止', |
| | | }; |
| | |
| | | |
| | | /** 密码登录 POST /api/user/auth/passwordLogin */ |
| | | export async function passwordLogin(body: API.PasswordLoginCommand, options?: API.RequestConfig) { |
| | | return request<API.PasswordLoginCommandCallback>('/api/user/auth/passwordLogin', { |
| | | return request<API.LoginCommandCallback>('/api/user/auth/passwordLogin', { |
| | | method: 'POST', |
| | | headers: { |
| | | 'Content-Type': 'application/json-patch+json', |
| | |
| | | }); |
| | | } |
| | | |
| | | /** 发送验证码 POST /api/user/auth/sendVerifyCode */ |
| | | export async function sendVerifyCode(body: API.SendVerifyCodeCommand, options?: API.RequestConfig) { |
| | | return request<string>('/api/user/auth/sendVerifyCode', { |
| | | /** 发送登录或注册短信 POST /api/user/auth/sendLoginOrRegisterVerifyCode */ |
| | | export async function sendLoginOrRegisterVerifyCode( |
| | | body: API.SendLoginOrRegisterVerifyCodeCommand, |
| | | options?: API.RequestConfig |
| | | ) { |
| | | return request<string>('/api/user/auth/sendLoginOrRegisterVerifyCode', { |
| | | method: 'POST', |
| | | headers: { |
| | | 'Content-Type': 'application/json-patch+json', |
| | | }, |
| | | data: body, |
| | | ...(options || {}), |
| | | }); |
| | | } |
| | | |
| | | /** 短信登录 POST /api/user/auth/smsLogin */ |
| | | export async function smsLogin(body: API.SmsLoginCommand, options?: API.RequestConfig) { |
| | | return request<API.LoginCommandCallback>('/api/user/auth/smsLogin', { |
| | | method: 'POST', |
| | | headers: { |
| | | 'Content-Type': 'application/json-patch+json', |
| | |
| | | /* eslint-disable */ |
| | | // API 更新时间: |
| | | // API 唯一标识: |
| | | import * as dictionary from './dictionary'; |
| | | import * as menu from './menu'; |
| | | import * as enterprise from './enterprise'; |
| | | import * as task from './task'; |
| | | import * as auth from './auth'; |
| | | import * as user from './user'; |
| | | import * as role from './role'; |
| | | import * as resource from './resource'; |
| | | import * as user from './user'; |
| | | import * as dictionary from './dictionary'; |
| | | import * as auth from './auth'; |
| | | import * as task from './task'; |
| | | import * as enterprise from './enterprise'; |
| | | import * as role from './role'; |
| | | import * as menu from './menu'; |
| | | export default { |
| | | dictionary, |
| | | menu, |
| | | enterprise, |
| | | task, |
| | | auth, |
| | | user, |
| | | role, |
| | | resource, |
| | | user, |
| | | dictionary, |
| | | auth, |
| | | task, |
| | | enterprise, |
| | | role, |
| | | menu, |
| | | }; |
| | |
| | | // @ts-ignore |
| | | import { request } from '@/utils/request'; |
| | | |
| | | /** 删除任务 DELETE /api/flexjob/task/deleteTaskInfo */ |
| | | export async function deleteTaskInfo(body: API.DeleteTaskInfoCommand, options?: API.RequestConfig) { |
| | | return request<number>('/api/flexjob/task/deleteTaskInfo', { |
| | | method: 'DELETE', |
| | | headers: { |
| | | 'Content-Type': 'application/json-patch+json', |
| | | }, |
| | | data: body, |
| | | ...(options || {}), |
| | | }); |
| | | } |
| | | |
| | | /** 查询任务详情 GET /api/flexjob/task/getTaskInfo */ |
| | | export async function getTaskInfo( |
| | | // 叠加生成的Param类型 (非body参数swagger默认没有生成对象) |
| | |
| | | |
| | | /** 查询任务分页列表 POST /api/flexjob/task/getTaskInfos */ |
| | | export async function getTaskInfos(body: API.GetTaskInfosQuery, options?: API.RequestConfig) { |
| | | return request<API.PagedListQueryResultGetTaskInfosQueryResultItem>( |
| | | '/api/flexjob/task/getTaskInfos', |
| | | { |
| | | return request<API.GetTaskInfosQueryResult>('/api/flexjob/task/getTaskInfos', { |
| | | method: 'POST', |
| | | headers: { |
| | | 'Content-Type': 'application/json-patch+json', |
| | | }, |
| | | data: body, |
| | | ...(options || {}), |
| | | } |
| | | ); |
| | | }); |
| | | } |
| | | |
| | | /** 保存任务 POST /api/flexjob/task/saveTaskInfo */ |
| | |
| | | ids: string[]; |
| | | } |
| | | |
| | | interface DeleteTaskInfoCommand { |
| | | ids: string[]; |
| | | } |
| | | |
| | | enum EnumBillingMethod { |
| | | /**按月 */ |
| | | Month = 10, |
| | |
| | | enum EnumSmsAccess { |
| | | /**阿里云短信 */ |
| | | AliyunSms = 10, |
| | | } |
| | | |
| | | enum EnumSmsTemplateType { |
| | | /**登录 */ |
| | | Login = 0, |
| | | /**注册 */ |
| | | Register = 1, |
| | | /**修改密码 */ |
| | | UpdatePassword = 2, |
| | | /**绑定手机号码 */ |
| | | BindPhoneNumber = 3, |
| | | /**修改手机号码 */ |
| | | UpdatePhoneNumber = 4, |
| | | } |
| | | |
| | | enum EnumTaskCheckReceiveStatus { |
| | |
| | | /** 错误码 */ |
| | | errorCode?: string; |
| | | data?: GetTaskInfoQueryResult; |
| | | /** 执行成功 */ |
| | | success?: boolean; |
| | | /** 错误信息 */ |
| | | msg?: any; |
| | | /** 附加数据 */ |
| | | extras?: any; |
| | | /** 时间戳 */ |
| | | timestamp?: number; |
| | | } |
| | | |
| | | interface FriendlyResultGetTaskInfosQueryResult { |
| | | /** 跟踪Id */ |
| | | traceId?: string; |
| | | /** 状态码 */ |
| | | code?: number; |
| | | /** 错误码 */ |
| | | errorCode?: string; |
| | | data?: GetTaskInfosQueryResult; |
| | | /** 执行成功 */ |
| | | success?: boolean; |
| | | /** 错误信息 */ |
| | |
| | | timestamp?: number; |
| | | } |
| | | |
| | | interface FriendlyResultLoginCommandCallback { |
| | | /** 跟踪Id */ |
| | | traceId?: string; |
| | | /** 状态码 */ |
| | | code?: number; |
| | | /** 错误码 */ |
| | | errorCode?: string; |
| | | data?: LoginCommandCallback; |
| | | /** 执行成功 */ |
| | | success?: boolean; |
| | | /** 错误信息 */ |
| | | msg?: any; |
| | | /** 附加数据 */ |
| | | extras?: any; |
| | | /** 时间戳 */ |
| | | timestamp?: number; |
| | | } |
| | | |
| | | interface FriendlyResultPagedListQueryResultGetDictionaryCategoriesQueryResultItem { |
| | | /** 跟踪Id */ |
| | | traceId?: string; |
| | |
| | | /** 错误码 */ |
| | | errorCode?: string; |
| | | data?: PagedListQueryResultGetRolesQueryResultItem; |
| | | /** 执行成功 */ |
| | | success?: boolean; |
| | | /** 错误信息 */ |
| | | msg?: any; |
| | | /** 附加数据 */ |
| | | extras?: any; |
| | | /** 时间戳 */ |
| | | timestamp?: number; |
| | | } |
| | | |
| | | interface FriendlyResultPagedListQueryResultGetTaskInfosQueryResultItem { |
| | | /** 跟踪Id */ |
| | | traceId?: string; |
| | | /** 状态码 */ |
| | | code?: number; |
| | | /** 错误码 */ |
| | | errorCode?: string; |
| | | data?: PagedListQueryResultGetTaskInfosQueryResultItem; |
| | | /** 执行成功 */ |
| | | success?: boolean; |
| | | /** 错误信息 */ |
| | | msg?: any; |
| | | /** 附加数据 */ |
| | | extras?: any; |
| | | /** 时间戳 */ |
| | | timestamp?: number; |
| | | } |
| | | |
| | | interface FriendlyResultPasswordLoginCommandCallback { |
| | | /** 跟踪Id */ |
| | | traceId?: string; |
| | | /** 状态码 */ |
| | | code?: number; |
| | | /** 错误码 */ |
| | | errorCode?: string; |
| | | data?: PasswordLoginCommandCallback; |
| | | /** 执行成功 */ |
| | | success?: boolean; |
| | | /** 错误信息 */ |
| | |
| | | /** 企业Id */ |
| | | enterpriseId?: string; |
| | | /** 企业全称 */ |
| | | enterpriseName?: string; |
| | | enterpriseEnterpriseName?: string; |
| | | /** 在招岗位数量 */ |
| | | taskCount?: number; |
| | | /** 任务名称 */ |
| | |
| | | interface GetTaskInfoQueryResultBenefit { |
| | | /** 福利编号 */ |
| | | benefitCode?: string; |
| | | /** 福利 */ |
| | | /** 福利图标 */ |
| | | benefitField2?: string; |
| | | /** 福利名称 */ |
| | | benefitContent?: string; |
| | | } |
| | | |
| | |
| | | pageModel?: PagedListQueryPageModel; |
| | | /** 关键字(任务名称) */ |
| | | keywords?: string; |
| | | /** 企业Id */ |
| | | enterpriseId?: string; |
| | | /** 发布时间-开始 */ |
| | | beginTime?: string; |
| | | /** 发布时间-结束 */ |
| | |
| | | status?: EnumTaskStatus; |
| | | releaseStatus?: EnumTaskReleaseStatus; |
| | | recommendStatus?: EnumTaskRecommendStatus; |
| | | } |
| | | |
| | | interface GetTaskInfosQueryResult { |
| | | pageModel?: PagedListQueryResultPageModel; |
| | | /** 数据 */ |
| | | data?: GetTaskInfosQueryResultItem[]; |
| | | count?: GetTaskInfosQueryResultCount; |
| | | } |
| | | |
| | | interface GetTaskInfosQueryResultCount { |
| | | /** 待安排数量 */ |
| | | waitAssignCount?: number; |
| | | /** 已安排数量 */ |
| | | completedAssignCount?: number; |
| | | /** 发布中数量 */ |
| | | inProcessReleaseCount?: number; |
| | | /** 已停止数量 */ |
| | | stoppedReleaseCount?: number; |
| | | } |
| | | |
| | | interface GetTaskInfosQueryResultItem { |
| | |
| | | |
| | | type GetUserResumeQueryResult = Record<string, any>; |
| | | |
| | | interface LoginCommandCallback { |
| | | /** 用户访问令牌 */ |
| | | accessToken?: string; |
| | | /** 刷新令牌 */ |
| | | refreshToken?: string; |
| | | } |
| | | |
| | | interface PagedListQueryPageModel { |
| | | /** 行数 */ |
| | | rows?: number; |
| | |
| | | data?: GetRolesQueryResultItem[]; |
| | | } |
| | | |
| | | interface PagedListQueryResultGetTaskInfosQueryResultItem { |
| | | pageModel?: PagedListQueryResultPageModel; |
| | | /** 数据 */ |
| | | data?: GetTaskInfosQueryResultItem[]; |
| | | } |
| | | |
| | | interface PagedListQueryResultPageModel { |
| | | /** 行数 */ |
| | | rows?: number; |
| | |
| | | password: string; |
| | | type?: EnumUserType; |
| | | clientType?: EnumClientType; |
| | | } |
| | | |
| | | interface PasswordLoginCommandCallback { |
| | | /** 用户访问令牌 */ |
| | | accessToken?: string; |
| | | /** 刷新令牌 */ |
| | | refreshToken?: string; |
| | | } |
| | | |
| | | interface SaveDictionaryCategoryCommand { |
| | |
| | | data?: any; |
| | | } |
| | | |
| | | interface SendVerifyCodeCommand { |
| | | interface SendLoginOrRegisterVerifyCodeCommand { |
| | | /** 手机号码 */ |
| | | phoneNumber?: string; |
| | | templateCode?: EnumSmsTemplateType; |
| | | phoneNumber: string; |
| | | } |
| | | |
| | | interface SetDictionaryDataIsDisabledCommand { |
| | |
| | | status?: EnumUserStatus; |
| | | } |
| | | |
| | | interface SmsLoginCommand { |
| | | /** 手机号码 */ |
| | | phoneNumber: string; |
| | | /** 验证码 */ |
| | | verifyCode: string; |
| | | type?: EnumUserType; |
| | | clientType?: EnumClientType; |
| | | } |
| | | |
| | | type SyncHumanResourcesAreaDictionaryDataCommand = Record<string, any>; |
| | | } |