wupengfei
2025-11-13 8cef2483dcfc4c40d861caaf58d618387f5ab80c
src/views/FlexJobManage/FlexJobContractManage.vue
@@ -60,15 +60,30 @@
          <!-- <el-button @click="handleDownloadTemplate()" type="primary" link>模板下载</el-button> -->
          <!-- <el-button @click="handleBatchImportAdd()" type="primary">批量导入</el-button> -->
          <!-- <el-button @click="handleStaffInfoAdd()" type="primary">新建</el-button> -->
          <el-button @click="handleBatchUnSign()" type="primary">批量解约</el-button>
          <el-button @click="handleSendShotMessage()" type="primary">短信发送</el-button>
          <el-button @click="handleBatchSign()" type="primary">批量签约</el-button>
          <el-button
            v-if="checkSubModuleItemShow('pageButton', 'batchUnSignBtn')"
            @click="handleBatchUnSign()"
            type="primary"
            >批量解约</el-button
          >
          <el-button
            v-if="checkSubModuleItemShow('pageButton', 'sendShotMessageBtn')"
            @click="handleSendShotMessage()"
            type="primary"
            >短信发送</el-button
          >
          <el-button
            v-if="checkSubModuleItemShow('pageButton', 'batchSignBtn')"
            @click="handleBatchSign()"
            type="primary"
            >批量签约</el-button
          >
          <!-- <el-button @click="handleEnterpriseBatchSign()" type="primary">批量企业签约</el-button> -->
        </template>
      </ProTableQueryFilterBar>
      <ProTableV2
        v-bind="proTableProps"
        :columns="FlexJobContractManageColumns"
        :columns="column"
        :operationBtns="operationBtns"
        show-column-check
        ref="proTable"
@@ -78,7 +93,7 @@
      >
      </ProTableV2>
    </AppContainer>
    <StaffInfoDialog v-bind="dialogStaffInfoProps" />
    <!-- <StaffInfoDialog v-bind="dialogStaffInfoProps" /> -->
    <StaffDetailInfoDialog v-bind="dialogStaffDetailProps" />
    <BatchImportDialog
      v-bind="dialogBatchImportProps"
@@ -100,18 +115,15 @@
  QueryFilterItem,
  useTable,
  FieldDatePicker,
  FieldRadio,
  FieldSelect,
  defineOperationBtns,
  useFormDialog,
  UploadUserFile,
  XLSXUtils,
} from '@bole-core/components';
import { FlexJobContractManageColumns } from './constants';
import { EnumTaskUserHireStatusText, EnumTaskUserSignContractStatusText } from '@/constants';
import { Message } from '@bole-core/core';
import { convertApi2FormUrlOnlyOne, downloadFileByUrl, format } from '@/utils';
import StaffInfoDialog from './components/StaffInfoDialog.vue';
// import StaffInfoDialog from './components/StaffInfoDialog.vue';
import BatchImportDialog from './components/BatchImportDialog.vue';
import SendShotMessageDialog from './components/SendShotMessageDialog.vue';
import StaffDetailInfoDialog from './components/StaffDetailInfoDialog.vue';
@@ -119,36 +131,25 @@
import * as enterpriseEmployeeServices from '@/services/api/enterpriseEmployee';
import { ModelValueType } from 'element-plus';
import _ from 'lodash';
import { getEnterpriseEmployeesHooks } from './hooks';
defineOptions({
  name: 'FlexJobContractManage',
});
const operationBtns = defineOperationBtns([
  // {
  //   data: {
  //     enCode: 'editBtn',
  //     name: '编辑',
  //   },
const operationBtnMap: Record<string, OperationBtnType> = {
  // editBtn: {
  //   emits: {
  //     onClick: (role) => openDialog(role),
  //   },
  // },
  {
    data: {
      enCode: 'detailBtn',
      name: '详情',
    },
  detailBtn: {
    emits: {
      onClick: (role: API.GetEnterpriseEmployeesQueryResultItem) =>
        handleStaffDetailEdit({ id: role.id, tabType: 'info' }),
    },
  },
  {
    data: {
      enCode: 'enterpriseSignBtn',
      name: '企业签约',
    },
  enterpriseSignBtn: {
    emits: {
      onClick: (role) => handleEnterpriseSign(role),
    },
@@ -156,15 +157,12 @@
      hide: (row: API.GetEnterpriseEmployeesQueryResultItem) =>
        !(
          row.userSignContractStatus === EnumTaskUserSignContractStatus.Pass &&
          row.enterpriseSignContractStatus === EnumTaskUserSignContractStatus.Wait
          row.enterpriseSignContractStatus === EnumTaskUserSignContractStatus.Wait &&
          row.source === EnumEnterpriseEmployeeSource.Internal
        ),
    },
  },
  {
    data: {
      enCode: 'inviteSignBtn',
      name: '邀请签约',
    },
  inviteSignBtn: {
    emits: {
      onClick: (role) => handleInviteSign(role),
    },
@@ -172,15 +170,13 @@
      hide: (row: API.GetEnterpriseEmployeesQueryResultItem) =>
        !(
          row.userSignContractStatus !== EnumTaskUserSignContractStatus.Pass &&
          row.hireStatus === EnumTaskUserHireStatus.Pass
          ((row.hireStatus === EnumTaskUserHireStatus.Pass &&
            row.source === EnumEnterpriseEmployeeSource.External) ||
            row.source === EnumEnterpriseEmployeeSource.Internal)
        ),
    },
  },
  {
    data: {
      enCode: 'unSignBtn',
      name: '解约',
    },
  unSignBtn: {
    emits: {
      onClick: (role) => handleUnSign(role),
    },
@@ -192,17 +188,17 @@
        ),
    },
  },
  // {
  //   data: {
  //     enCode: 'delBtn',
  //     name: '删除',
  //   },
  //   props: { type: 'danger' },
  //   emits: {
  //     onClick: (role) => handleDelete(role),
  //   },
  // },
]);
  delBtn: {
    props: { type: 'danger' },
    emits: {
      onClick: (role) => handleDelete(role),
    },
  },
};
const { checkSubModuleItemShow, column, operationBtns } = useAccess({
  operationBtnMap,
});
const router = useRouter();
@@ -217,75 +213,8 @@
  state.loading = false;
});
const {
  getDataSource: getList,
  proTableProps,
  paginationState,
  extraParamState,
  reset,
} = useTable(
  async ({ pageIndex, pageSize }, extraParamState) => {
    try {
      let params: API.GetEnterpriseEmployeesQuery = {
        pageModel: {
          rows: pageSize,
          page: pageIndex,
          orderInput: extraParamState.orderInput,
        },
        keywords: extraParamState.searchWord,
        createdTimeStart: format(extraParamState.createdTime?.[0] ?? '', 'YYYY-MM-DD 00:00:00'),
        createdTimeEnd: format(extraParamState.createdTime?.[1] ?? '', 'YYYY-MM-DD 23:59:59'),
        signContractTimeStart: format(
          extraParamState.signContractTime?.[0] ?? '',
          'YYYY-MM-DD 00:00:00'
        ),
        signContractTimeEnd: format(
          extraParamState.signContractTime?.[1] ?? '',
          'YYYY-MM-DD 23:59:59'
        ),
        hireStatus: extraParamState.hireStatus,
        isReal: extraParamState.isReal,
        userSignContractStatus: extraParamState.userSignContractStatus,
        enterpriseSignContractStatus: extraParamState.enterpriseSignContractStatus,
      };
      let res = await enterpriseEmployeeServices.getEnterpriseEmployees(params, {
        showLoading: !state.loading,
      });
      return res;
    } catch (error) {
      console.log('error: ', error);
    }
  },
  {
    defaultExtraParams: {
      searchWord: '',
      orderInput: [{ property: 'createdTime', order: EnumPagedListOrder.Desc }],
      createdTime: [] as unknown as ModelValueType,
      signContractTime: [] as unknown as ModelValueType,
      hireStatus: '' as any as EnumTaskUserHireStatus,
      isReal: null as any as boolean,
      userSignContractStatus: '' as any as EnumTaskUserSignContractStatus,
      enterpriseSignContractStatus: '' as any as EnumTaskUserSignContractStatus,
    },
    queryKey: ['enterpriseEmployeeServices/getEnterpriseEmployees'],
    columnsRenderProps: {
      gender: { type: 'enum', valueEnum: EnumUserGenderTextForPerson },
      hireStatus: { type: 'enum', valueEnum: EnumTaskUserHireStatusText },
      userIsReal: {
        formatter: (row: API.GetEnterpriseEmployeesQueryResultItem) => {
          return row.userIsReal ? '已实名' : '未实名';
        },
      },
      userSignContractStatus: { type: 'enum', valueEnum: EnumTaskUserSignContractStatusText },
      hireTime: { type: 'date' },
      userRealTime: { type: 'date' },
      userSignContractTime: { type: 'date' },
      enterpriseSignContractStatus: { type: 'enum', valueEnum: EnumTaskUserSignContractStatusText },
      enterpriseSignContractTime: { type: 'date' },
    },
  }
);
const { getList, proTableProps, paginationState, extraParamState, reset } =
  getEnterpriseEmployeesHooks();
const proTable = ref<InstanceType<typeof ProTableV2>>();