wupengfei
2025-11-14 cdf4bd19d097c968a4c9e454a52960ec29fe0cec
src/views/FlexJobManage/FlexJobManage.vue
@@ -27,11 +27,10 @@
          </QueryFilterItem>
          <QueryFilterItem tip-content="灵工来源">
            <FieldRadio
              v-model="extraParamState.isReal"
              :value-enum="[]"
              v-model="extraParamState.source"
              :value-enum="EnumEnterpriseEmployeeSourceText"
              buttonStyle
              showAllBtn
              :all-btn-value="null"
              @change="getList()"
            />
          </QueryFilterItem>
@@ -79,7 +78,7 @@
          </QueryFilterItem> -->
          <QueryFilterItem>
            <FieldDatePicker
              v-model="extraParamState.createdTime"
              v-model="extraParamState.userRealTime"
              type="daterange"
              range-separator="~"
              start-placeholder="起始日期"
@@ -120,11 +119,11 @@
            :limit="1"
            accept="xlsx,xls"
          >
            <el-button text type="primary" class="pro-table-operation-btn">批量导入</el-button>
            <el-button type="primary" class="pro-table-operation-btn">批量导入</el-button>
          </BlFileUpload>
          <el-button
            v-if="checkSubModuleItemShow('pageButton', 'addBtn')"
            @click="handleStaffInfoAdd()"
            @click="handleInternalStaffAdd()"
            type="primary"
            >新建</el-button
          >
@@ -174,6 +173,7 @@
    />
    <SendShotMessageDialog v-bind="dialogShotMessageProps" />
    <SignDialog v-bind="dialogSignProps" />
    <AddInternalStaffDialog v-bind="dialogAddInternalStaffProps" />
  </LoadingLayout>
</template>
@@ -195,13 +195,18 @@
  XLSXUtils,
  BlFileUpload,
} from '@bole-core/components';
import { EnumTaskUserHireStatusText, EnumTaskUserSignContractStatusText } from '@/constants';
import {
  EnumTaskUserHireStatusText,
  EnumTaskUserSignContractStatusText,
  EnumEnterpriseEmployeeSourceText,
} from '@/constants';
import { Message } from '@bole-core/core';
import { convertApi2FormUrlOnlyOne, downloadFileByUrl, format } from '@/utils';
import StaffInfoDialog from './components/StaffInfoDialog.vue';
import BatchImportDialog from './components/BatchImportDialog.vue';
import SendShotMessageDialog from './components/SendShotMessageDialog.vue';
import StaffDetailInfoDialog from './components/StaffDetailInfoDialog.vue';
import AddInternalStaffDialog from './components/AddInternalStaffDialog.vue';
import SignDialog from './components/SignDialog.vue';
import * as enterpriseEmployeeServices from '@/services/api/enterpriseEmployee';
import { ModelValueType } from 'element-plus';
@@ -215,7 +220,11 @@
const operationBtnMap: Record<string, OperationBtnType> = {
  editBtn: {
    emits: {
      onClick: (role) => openDialog(role),
      onClick: (role) => openInternalDialog(role),
    },
    extraProps: {
      hide: (row: API.GetEnterpriseEmployeesQueryResultItem) =>
        row.source === EnumEnterpriseEmployeeSource.External,
    },
  },
  detailBtn: {
@@ -304,7 +313,7 @@
  handleAdd: handleStaffInfoAdd,
  editForm: staffInfoEditForm,
} = useFormDialog({
  onConfirm: addEnterpriseEmployee,
  onConfirm: editEnterpriseEmployee,
  defaultFormParams: {
    id: '',
    name: '',
@@ -318,7 +327,6 @@
    regiterTime: '',
    userRealTime: '',
    userSignContractTime: '',
    contractTime: [] as unknown as ModelValueType,
    isDetail: false,
  },
});
@@ -342,31 +350,7 @@
      userRealTime: row.userRealTime ?? '',
      userSignContractTime: row.userSignContractTime ?? '',
      isDetail: isDetail,
      contractTime: [row.contractBegin, row.contractEnd],
    });
  } catch (error) {}
}
async function addEnterpriseEmployee() {
  try {
    let params: API.AddEnterpriseEmployeeCommand = {
      name: staffInfoEditForm.name,
      identity: staffInfoEditForm.identity,
      contactPhoneNumber: staffInfoEditForm.contactPhoneNumber,
      gender: staffInfoEditForm.gender,
      age: staffInfoEditForm.age,
      identityImg: staffInfoEditForm.identityImg[0]?.path ?? '',
      identityBackImg: staffInfoEditForm.identityBackImg[0]?.path ?? '',
      contractUrl: staffInfoEditForm.contractUrl[0]?.path ?? '',
      contractBegin: format(staffInfoEditForm.contractTime[0], 'YYYY-MM-DD 00:00:00'),
      contractEnd: format(staffInfoEditForm.contractTime[1], 'YYYY-MM-DD 23:59:59'),
    };
    let res = await enterpriseEmployeeServices.addEnterpriseEmployee(params);
    if (res) {
      Message.successMessage('操作成功');
      getList(paginationState.pageIndex);
    }
  } catch (error) {}
}
@@ -676,4 +660,85 @@
    state.flexjobUrl = [] as UploadUserFile[];
  }
}
const {
  dialogProps: dialogAddInternalStaffProps,
  handleAdd: handleInternalStaffAdd,
  handleEdit: handleInternalStaffEdit,
  editForm: internalStaffEditForm,
  dialogState: internalDialogState,
} = useFormDialog({
  onConfirm: addEnterpriseEmployee,
  defaultFormParams: {
    id: '',
    name: '',
    identity: '',
    contactPhoneNumber: '',
    gender: EnumUserGender.Male,
    age: null as any as number,
    identityImg: [] as UploadUserFile[],
    identityBackImg: [] as UploadUserFile[],
    contractUrl: [] as UploadUserFile[],
    regiterTime: '',
    userRealTime: '',
    userSignContractTime: '',
    contractTime: [] as unknown as ModelValueType,
  },
  closeAfterConfirm: false,
});
async function openInternalDialog(row: API.GetEnterpriseEmployeesQueryResultItem) {
  try {
    let detail = await enterpriseEmployeeServices.getEnterpriseEmployee({ id: row.id });
    handleInternalStaffEdit({
      id: row.id,
      name: row.name,
      identity: row.identity,
      contactPhoneNumber: row.contactPhoneNumber,
      gender: detail.gender,
      age: detail.age ?? null,
      identityImg: convertApi2FormUrlOnlyOne(detail.identityImg),
      identityBackImg: convertApi2FormUrlOnlyOne(detail.identityBackImg),
      contractUrl: convertApi2FormUrlOnlyOne(detail.contractUrl, {
        fileName: detail.contractUrl ? detail.contractUrl.split('/').pop() : '合同',
      }),
      regiterTime: detail.applyTime ?? '',
      userRealTime: row.userRealTime ?? '',
      userSignContractTime: row.userSignContractTime ?? '',
      contractTime: [row.contractBegin, row.contractEnd],
    });
  } catch (error) {}
}
async function addEnterpriseEmployee() {
  try {
    const isEdit = !!internalStaffEditForm.id;
    let params: API.AddEnterpriseEmployeeCommand = {
      name: internalStaffEditForm.name,
      identity: internalStaffEditForm.identity,
      contactPhoneNumber: internalStaffEditForm.contactPhoneNumber,
      gender: internalStaffEditForm.gender,
      age: internalStaffEditForm.age,
      identityImg: internalStaffEditForm.identityImg[0]?.path ?? '',
      identityBackImg: internalStaffEditForm.identityBackImg[0]?.path ?? '',
      contractUrl: internalStaffEditForm.contractUrl[0]?.path ?? '',
      contractBegin: format(internalStaffEditForm.contractTime[0], 'YYYY-MM-DD 00:00:00'),
      contractEnd: format(internalStaffEditForm.contractTime[1], 'YYYY-MM-DD 23:59:59'),
    };
    let res;
    if (isEdit) {
      (params as API.EditEnterpriseEmployeeCommand).id = internalStaffEditForm.id;
      res = await enterpriseEmployeeServices.editEnterpriseEmployee(params);
    } else {
      res = await enterpriseEmployeeServices.addEnterpriseEmployee(params);
    }
    if (res) {
      Message.successMessage('操作成功');
      getList(paginationState.pageIndex);
      internalDialogState.dialogVisible = false;
    }
  } catch (error) {
    internalDialogState.dialogVisible = true;
  }
}
</script>