4个文件已删除
4个文件已修改
1个文件已添加
469 ■■■■ 已修改文件
src/constants/enterpriseEmployee.ts 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/EmploymentManage/EmploymentManageArrange.vue 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/EmploymentManage/EmploymentSignList.vue 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/EmploymentManage/TaskArrange.vue 293 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/EmploymentManage/components/RefuseDialog.vue 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/EmploymentManage/constants/columns.ts 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/EmploymentManage/constants/index.ts 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/SupplierManage/constants/columns.ts 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/SupplierManage/constants/index.ts 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/constants/enterpriseEmployee.ts
@@ -1,9 +1,14 @@
import { EnumTaskUserHireStatus, EnumTaskUserSignContractStatus,EnumGetArrangeTaskUsersQueryApplyStatus } from './apiEnum';
import {
  EnumTaskUserHireStatus,
  EnumTaskUserSignContractStatus,
  EnumGetArrangeTaskUsersQueryApplyStatus,
} from './apiEnum';
export const EnumTaskUserHireStatusText = {
  [EnumTaskUserHireStatus.Wait]: '待录用',
  [EnumTaskUserHireStatus.Pass]: '已录用',
  [EnumTaskUserHireStatus.Refuse]: '已谢绝',
  [EnumTaskUserHireStatus.Cancel]: '已取消',
};
export const EnumTaskUserSignContractStatusTextForFilter = {
@@ -23,4 +28,4 @@
export const EnumGetArrangeTaskUsersQueryApplyStatusText = {
  [EnumGetArrangeTaskUsersQueryApplyStatus.None]: '未报名',
  [EnumGetArrangeTaskUsersQueryApplyStatus.Completed]: '已报名',
}
};
src/views/EmploymentManage/EmploymentManageArrange.vue
@@ -48,11 +48,8 @@
  AppContainer,
  QueryFilterItem,
  useTable,
  FieldDatePicker,
  FieldRadio,
  defineOperationBtns,
} from '@bole-core/components';
import { EmploymentArrangeColumns } from './constants';
import { Message } from '@bole-core/core';
import * as taskUserServices from '@/services/api/taskUser';
import {
@@ -69,6 +66,15 @@
  arrangeBtn: {
    emits: {
      onClick: (role) => handleArrange(role),
    },
    extraProps: {
      hide: (row: API.GetArrangeTaskUsersQueryResultItem) =>
        row.arrangeStatus === EnumTaskUserArrangeStatus.Complete,
    },
  },
  cancelRecruitBtn: {
    emits: {
      onClick: (role) => setTaskUserHire(role, EnumTaskUserHireStatus.Cancel),
    },
    extraProps: {
      hide: (row: API.GetArrangeTaskUsersQueryResultItem) =>
@@ -158,4 +164,22 @@
    }
  } catch (error) {}
}
async function setTaskUserHire(
  row: API.GetArrangeTaskUsersQueryResultItem,
  hireStatus: EnumTaskUserHireStatus
) {
  try {
    await Message.tipMessage(`确认要取消录用吗?`);
    let params: API.SetTaskUserHireCommand = {
      id: row.id,
      hireStatus: hireStatus,
    };
    let res = await taskUserServices.setTaskUserHire(params);
    if (res) {
      Message.successMessage('操作成功');
      getList(paginationState.pageIndex);
    }
  } catch (error) {}
}
</script>
src/views/EmploymentManage/EmploymentSignList.vue
@@ -65,11 +65,20 @@
  },
  recruitBtn: {
    emits: {
      onClick: (role) => setTaskUserHire(role.id, EnumTaskUserHireStatus.Pass),
      onClick: (role) => handleRecruit(role.id, EnumTaskUserHireStatus.Pass),
    },
    extraProps: {
      hide: (row: API.GetTaskUsersQueryResultItem) =>
        row.hireStatus === EnumTaskUserHireStatus.Pass,
    },
  },
  cancelRecruitBtn: {
    emits: {
      onClick: (role) => handleCancelRecruit(role.id, EnumTaskUserHireStatus.Cancel),
    },
    extraProps: {
      hide: (row: API.GetTaskUsersQueryResultItem) =>
        row.hireStatus !== EnumTaskUserHireStatus.Pass,
    },
  },
  refuseBtn: {
@@ -216,13 +225,22 @@
  setTaskUserHire(editForm.id, EnumTaskUserHireStatus.Refuse, editForm.remark);
}
async function handleRecruit(id: string, hireStatus: EnumTaskUserHireStatus) {
  try {
    await Message.tipMessage(`确认要录用吗?`);
    setTaskUserHire(id, hireStatus);
  } catch (error) {}
}
async function handleCancelRecruit(id: string, hireStatus: EnumTaskUserHireStatus) {
  try {
    await Message.tipMessage(`确认要取消录用吗?`);
    setTaskUserHire(id, hireStatus);
  } catch (error) {}
}
async function setTaskUserHire(id: string, hireStatus: EnumTaskUserHireStatus, remark?: string) {
  try {
    if (hireStatus === EnumTaskUserHireStatus.Pass) {
      await Message.tipMessage(
        `确认要${hireStatus === EnumTaskUserHireStatus.Pass ? '录用' : '谢绝'}吗?`
      );
    }
    let params: API.SetTaskUserHireCommand = {
      id: id,
      hireStatus: hireStatus,
src/views/EmploymentManage/TaskArrange.vue
New file
@@ -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>
src/views/EmploymentManage/components/RefuseDialog.vue
@@ -2,7 +2,12 @@
  <ProDialog title="谢绝" v-model="visible" @close="onDialogClose" destroy-on-close draggable>
    <ProForm :model="form" ref="dialogForm" label-width="110px">
      <ProFormItemV2 label="谢绝原因:" prop="remark" :check-rules="[{ message: '请输入谢绝原因' }]">
        <ProFormTextArea placeholder="请输入谢绝原因" v-model="form.remark"></ProFormTextArea>
        <ProFormTextArea
          placeholder="请输入谢绝原因"
          v-model="form.remark"
          show-word-limit
          :maxlength="150"
        ></ProFormTextArea>
      </ProFormItemV2>
    </ProForm>
    <template #footer>
src/views/EmploymentManage/constants/columns.ts
File was deleted
src/views/EmploymentManage/constants/index.ts
File was deleted
src/views/SupplierManage/constants/columns.ts
File was deleted
src/views/SupplierManage/constants/index.ts
File was deleted