From 36b00e2ef3b079755b4e240ede283407974086a2 Mon Sep 17 00:00:00 2001
From: wupengfei <834520024@qq.com>
Date: 星期三, 03 十二月 2025 17:53:05 +0800
Subject: [PATCH] feat: 页面

---
 src/views/EmploymentManage/TaskArrange.vue |  293 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 293 insertions(+), 0 deletions(-)

diff --git a/src/views/EmploymentManage/TaskArrange.vue b/src/views/EmploymentManage/TaskArrange.vue
new file mode 100644
index 0000000..c74d1b0
--- /dev/null
+++ b/src/views/EmploymentManage/TaskArrange.vue
@@ -0,0 +1,293 @@
+<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
+            v-if="checkSubModuleItemShow('pageButton', 'addBtn')"
+            @click="goAddOrEdit()"
+            type="primary"
+            >鍙戝竷</el-button
+          >
+        </template>
+      </ProTableQueryFilterBar>
+      <ProTableV2 v-bind="proTableProps" :columns="column" :operationBtns="operationBtns">
+        <template #userCount="{ row }">
+          <el-button v-if="!row.isInternal" link type="primary" @click="goSignList(row)">{{
+            row.userCount || 0
+          }}</el-button>
+          <span v-else>/</span>
+        </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 { EnumTaskStatusText, EnumTaskReleaseStatusText } from '@/constants';
+import { useGlobalEventContext } from '@/hooks';
+import * as taskServices from '@/services/api/task';
+import { format, OrderUtils } from '@/utils';
+import { ModelValueType } from 'element-plus';
+import { Message } from '@bole-core/core';
+import dayjs from 'dayjs';
+
+defineOptions({
+  name: 'TaskArrange',
+});
+
+const operationBtnMap: Record<string, OperationBtnType> = {
+  // editBtn: {
+  //   emits: {
+  //     onClick: (role) => goAddOrEdit(role),
+  //   },
+  //   extraProps: {
+  //     hide: (row: API.GetTaskInfosQueryResultItem) =>
+  //       row.status === EnumTaskStatus.Complete || !row.isInternal,
+  //   },
+  // },
+  // detailBtn: {
+  //   emits: {
+  //     onClick: (row: API.GetTaskInfosQueryResultItem) => goDetail(row),
+  //   },
+  // },
+  // publishBtn: {
+  //   emits: {
+  //     onClick: (row: API.GetTaskInfosQueryResultItem) =>
+  //       setTaskInfoReleaseStatus(row, EnumTaskReleaseStatus.InProcess),
+  //   },
+  //   extraProps: {
+  //     hide: (row: API.GetTaskInfosQueryResultItem) =>
+  //       row.releaseStatus === EnumTaskReleaseStatus.InProcess || !row.isInternal,
+  //   },
+  // },
+  // unPublishBtn: {
+  //   emits: {
+  //     onClick: (row: API.GetTaskInfosQueryResultItem) =>
+  //       setTaskInfoReleaseStatus(row, EnumTaskReleaseStatus.Stopped),
+  //   },
+  //   extraProps: {
+  //     hide: (row: API.GetTaskInfosQueryResultItem) =>
+  //       row.releaseStatus === EnumTaskReleaseStatus.Stopped || !row.isInternal,
+  //   },
+  // },
+  arrangeBtn: {
+    emits: {
+      onClick: (row: API.GetTaskInfosQueryResultItem) => handleArrange(row),
+    },
+    extraProps: {
+      hide: (row: API.GetTaskInfosQueryResultItem) =>
+        row.releaseStatus === EnumTaskReleaseStatus.Stopped || !row.isInternal,
+    },
+  },
+};
+
+const { checkSubModuleItemShow, column, operationBtns } = useAccess({
+  operationBtnMap,
+});
+
+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: API.GetTaskInfosQueryResultItem) => {
+          return OrderUtils.getServiceFeeText(row.serviceFee, row.billingMethod);
+        },
+      },
+      applyBeginTime: { type: 'date', format: 'YYYY-MM-DD' },
+      applyEndTime: { type: 'date', format: 'YYYY-MM-DD' },
+      //@ts-ignore
+      applyStatus: {
+        formatter: (row: API.GetTaskInfosQueryResultItem) => {
+          const applyBeginTime = dayjs(row.applyBeginTime);
+          const applyEndTime = dayjs(row.applyEndTime);
+          const now = dayjs();
+          if (applyEndTime.isBefore(now)) {
+            return '宸茬粨鏉�';
+          } else if (applyBeginTime.isAfter(now)) {
+            return '寰呭紑濮�';
+          } else {
+            return '杩涜涓�';
+          }
+        },
+      },
+    },
+  }
+);
+
+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 ?? '',
+    },
+    query: {
+      supplierEnterpriseId: row?.supplierEnterpriseId,
+    },
+  });
+}
+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>

--
Gitblit v1.9.1