| <template> | 
|   <LoadingLayout :loading="state.loading"> | 
|     <AppContainer> | 
|       <ProTableQueryFilterBar @on-reset="reset"> | 
|         <template #query> | 
|           <QueryFilterItem tip-content="任务状态"> | 
|             <FieldRadio | 
|               v-model="extraParamState.status" | 
|               :value-enum="EnumTaskStatusText" | 
|               buttonStyle | 
|               showAllBtn | 
|               @change="getList()" | 
|             /> | 
|           </QueryFilterItem> | 
|           <QueryFilterItem tip-content="发布状态"> | 
|             <FieldRadio | 
|               v-model="extraParamState.releaseStatus" | 
|               :value-enum="EnumTaskReleaseStatusText" | 
|               buttonStyle | 
|               showAllBtn | 
|               @change="getList()" | 
|             /> | 
|           </QueryFilterItem> | 
|           <QueryFilterItem tip-content="发布时间"> | 
|             <FieldDatePicker | 
|               v-model="extraParamState.time" | 
|               type="daterange" | 
|               range-separator="~" | 
|               start-placeholder="开始日期" | 
|               end-placeholder="结束日期" | 
|               clearable | 
|               @change="getList()" | 
|             ></FieldDatePicker> | 
|           </QueryFilterItem> | 
|           <QueryFilterItem> | 
|             <SearchInput | 
|               v-model="extraParamState.keywords" | 
|               style="width: 260px" | 
|               placeholder="任务名称" | 
|               @on-click-search="getList" | 
|             > | 
|             </SearchInput> | 
|           </QueryFilterItem> | 
|         </template> | 
|         <template #btn> | 
|           <el-button @click="goAddOrEdit()" type="primary">发布</el-button> | 
|         </template> | 
|       </ProTableQueryFilterBar> | 
|       <ProTableV2 | 
|         v-bind="proTableProps" | 
|         :columns="EmploymentManageColumns" | 
|         :operationBtns="operationBtns" | 
|       > | 
|         <template #userCount="{ row }"> | 
|           <el-button link type="primary" @click="goSignList(row)">{{ | 
|             row.userCount || 0 | 
|           }}</el-button> | 
|         </template> | 
|       </ProTableV2> | 
|     </AppContainer> | 
|   </LoadingLayout> | 
| </template> | 
|   | 
| <script setup lang="ts"> | 
| import { | 
|   ProTableQueryFilterBar, | 
|   ProTableV2, | 
|   SearchInput, | 
|   LoadingLayout, | 
|   AppContainer, | 
|   QueryFilterItem, | 
|   useTable, | 
|   FieldDatePicker, | 
|   FieldRadio, | 
|   defineOperationBtns, | 
| } from '@bole-core/components'; | 
| import { EmploymentManageColumns } from './constants'; | 
| import { EnumTaskStatusText, EnumTaskReleaseStatusText } from '@/constants'; | 
| import { useGlobalEventContext } from '@/hooks'; | 
| import * as taskServices from '@/services/api/task'; | 
| import { format } from '@/utils'; | 
| import { ModelValueType } from 'element-plus'; | 
| import { Message } from '@bole-core/core'; | 
|   | 
| defineOptions({ | 
|   name: 'TaskManageList', | 
| }); | 
|   | 
| const operationBtns = defineOperationBtns([ | 
|   { | 
|     data: { | 
|       enCode: 'editBtn', | 
|       name: '编辑', | 
|     }, | 
|     emits: { | 
|       onClick: (role) => goAddOrEdit(role), | 
|     }, | 
|     extraProps: { | 
|       hide: (row: API.GetTaskInfosQueryResultItem) => row.status === EnumTaskStatus.Complete, | 
|     }, | 
|   }, | 
|   { | 
|     data: { | 
|       enCode: 'detailBtn', | 
|       name: '详情', | 
|     }, | 
|     emits: { | 
|       onClick: (row: API.GetTaskInfosQueryResultItem) => goDetail(row), | 
|     }, | 
|   }, | 
|   { | 
|     data: { | 
|       enCode: 'publishBtn', | 
|       name: '发布', | 
|     }, | 
|     emits: { | 
|       onClick: (row: API.GetTaskInfosQueryResultItem) => | 
|         setTaskInfoReleaseStatus(row, EnumTaskReleaseStatus.InProcess), | 
|     }, | 
|     extraProps: { | 
|       hide: (row: API.GetTaskInfosQueryResultItem) => | 
|         row.releaseStatus === EnumTaskReleaseStatus.InProcess, | 
|     }, | 
|   }, | 
|   { | 
|     data: { | 
|       enCode: 'unPublishBtn', | 
|       name: '停止发布', | 
|     }, | 
|     emits: { | 
|       onClick: (row: API.GetTaskInfosQueryResultItem) => | 
|         setTaskInfoReleaseStatus(row, EnumTaskReleaseStatus.Stopped), | 
|     }, | 
|     extraProps: { | 
|       hide: (row: API.GetTaskInfosQueryResultItem) => | 
|         row.releaseStatus === EnumTaskReleaseStatus.Stopped, | 
|     }, | 
|   }, | 
|   { | 
|     data: { | 
|       enCode: 'arrangeBtn', | 
|       name: '安排', | 
|     }, | 
|     emits: { | 
|       onClick: (row: API.GetTaskInfosQueryResultItem) => handleArrange(row), | 
|     }, | 
|     extraProps: { | 
|       hide: (row: API.GetTaskInfosQueryResultItem) => | 
|         row.releaseStatus === EnumTaskReleaseStatus.Stopped, | 
|     }, | 
|   }, | 
| ]); | 
|   | 
| const router = useRouter(); | 
|   | 
| const BaseState = { | 
|   loading: true, | 
| }; | 
|   | 
| const state = reactive({ ...BaseState }); | 
|   | 
| const eventContext = useGlobalEventContext(); | 
|   | 
| eventContext.addEvent('taskManage:add', () => { | 
|   getList(); | 
| }); | 
|   | 
| eventContext.addEvent('taskManage:edit', () => { | 
|   getList(paginationState.pageIndex); | 
| }); | 
|   | 
| onMounted(async () => { | 
|   await getList(); | 
|   state.loading = false; | 
| }); | 
|   | 
| const { | 
|   getDataSource: getList, | 
|   proTableProps, | 
|   paginationState, | 
|   extraParamState, | 
|   reset, | 
| } = useTable( | 
|   async ({ pageIndex, pageSize }, extraParamState) => { | 
|     try { | 
|       let params: API.GetTaskInfosQuery = { | 
|         pageModel: { | 
|           rows: pageSize, | 
|           page: pageIndex, | 
|           orderInput: extraParamState.orderInput, | 
|         }, | 
|         keywords: extraParamState.keywords, | 
|         status: extraParamState.status, | 
|         releaseStatus: extraParamState.releaseStatus, | 
|         beginTime: format(extraParamState.time?.[0] ?? '', 'YYYY-MM-DD 00:00:00'), | 
|         endTime: format(extraParamState.time?.[1] ?? '', 'YYYY-MM-DD 23:59:59'), | 
|       }; | 
|   | 
|       let res = await taskServices.getTaskInfos(params, { | 
|         showLoading: !state.loading, | 
|       }); | 
|       return res; | 
|     } catch (error) { | 
|       console.log('error: ', error); | 
|     } | 
|   }, | 
|   { | 
|     defaultExtraParams: { | 
|       keywords: '', | 
|       status: '' as any as EnumTaskStatus, | 
|       releaseStatus: '' as any as EnumTaskReleaseStatus, | 
|       time: [] as unknown as ModelValueType, | 
|       orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }], | 
|     }, | 
|     queryKey: ['taskServices/getTaskInfos'], | 
|     columnsRenderProps: { | 
|       billingMethod: { type: 'enum', valueEnum: EnumBillingMethodText }, | 
|       settlementCycle: { type: 'enum', valueEnum: EnumSettlementCycleText }, | 
|       genderLimit: { type: 'enum', valueEnum: EnumUserGenderText }, | 
|       status: { type: 'enum', valueEnum: EnumTaskStatusText }, | 
|       releaseStatus: { type: 'enum', valueEnum: EnumTaskReleaseStatusText }, | 
|       createdTime: { type: 'date', format: 'YYYY-MM-DD' }, | 
|       beginTime: { type: 'date', format: 'YYYY-MM-DD' }, | 
|       endTime: { type: 'date', format: 'YYYY-MM-DD' }, | 
|       serviceFee: { | 
|         type: 'money', | 
|         formatter: (row) => { | 
|           return `${row.serviceFee}${EnumBillingMethodUnitText[row.billingMethod]}`; | 
|         }, | 
|       }, | 
|     }, | 
|   } | 
| ); | 
|   | 
| async function setTaskInfoReleaseStatus( | 
|   row: API.GetTaskInfosQueryResultItem, | 
|   releaseStatus: EnumTaskReleaseStatus | 
| ) { | 
|   try { | 
|     await Message.tipMessage(`确认要${EnumTaskReleaseStatusTextForTip[releaseStatus]}吗?`); | 
|     let params: API.SetTaskInfoReleaseStatusCommand = { | 
|       ids: [row.id], | 
|       releaseStatus: releaseStatus, | 
|     }; | 
|     let res = await taskServices.setTaskInfoReleaseStatus(params); | 
|     if (res) { | 
|       Message.successMessage('操作成功'); | 
|       getList(paginationState.pageIndex); | 
|     } | 
|   } catch (error) {} | 
| } | 
|   | 
| function handleArrange(row: API.GetTaskInfosQueryResultItem) { | 
|   router.push({ | 
|     name: 'EmploymentManageArrange', | 
|     params: { | 
|       id: row?.id ?? '', | 
|     }, | 
|   }); | 
| } | 
| function goAddOrEdit(row?: API.GetTaskInfosQueryResultItem) { | 
|   router.push({ | 
|     name: 'AddOrEditEmployment', | 
|     params: { | 
|       id: row?.id ?? '', | 
|     }, | 
|   }); | 
| } | 
| function goDetail(row: API.GetTaskInfosQueryResultItem) { | 
|   router.push({ | 
|     name: 'EmploymentManageDetail', | 
|     params: { | 
|       id: row?.id ?? '', | 
|     }, | 
|   }); | 
| } | 
|   | 
| function goSignList(row: API.GetTaskInfosQueryResultItem) { | 
|   router.push({ | 
|     name: 'EmploymentSignList', | 
|     params: { | 
|       id: row?.id ?? '', | 
|     }, | 
|   }); | 
| } | 
| </script> |