wupengfei
2025-12-04 6b532419c00f8bfbc696ef475f5c97b457497c6b
src/views/EmploymentManage/EmploymentSignList.vue
@@ -24,14 +24,11 @@
          </QueryFilterItem>
        </template>
      </ProTableQueryFilterBar>
      <ProTableV2
        v-bind="proTableProps"
        :columns="EmploymentSignColumns"
        :operationBtns="operationBtns"
      >
      <ProTableV2 v-bind="proTableProps" :columns="column" :operationBtns="operationBtns">
      </ProTableV2>
    </AppContainer>
    <StaffInfoDialog v-bind="dialogStaffInfoProps" />
    <RefuseDialog v-bind="dialogProps" />
  </LoadingLayout>
</template>
@@ -45,58 +42,59 @@
  QueryFilterItem,
  useTable,
  FieldRadio,
  defineOperationBtns,
  useFormDialog,
  UploadUserFile,
} from '@bole-core/components';
import { EmploymentSignColumns } from './constants/columns';
import { Message } from '@bole-core/core';
import { EnumUserGender, EnumTaskUserHireStatusText } from '@/constants';
import StaffInfoDialog from '@/views/FlexJobManage/components/StaffInfoDialog.vue';
import { convertApi2FormUrlOnlyOne } from '@/utils';
import { convertApi2FormUrlOnlyOne, hiddenIDNumberForEnd4 } from '@/utils';
import * as taskUserServices from '@/services/api/taskUser';
import * as enterpriseEmployeeServices from '@/services/api/enterpriseEmployee';
import RefuseDialog from './components/RefuseDialog.vue';
defineOptions({
  name: 'EmploymentSignList',
});
const operationBtns = defineOperationBtns([
  {
    data: {
      enCode: 'detailBtn',
      name: '详情',
    },
const operationBtnMap: Record<string, OperationBtnType> = {
  detailBtn: {
    emits: {
      onClick: (role) => openDialog(role),
    },
  },
  {
    data: {
      enCode: 'recruitBtn',
      name: '录用',
    },
  recruitBtn: {
    emits: {
      onClick: (role) => setTaskUserHire(role, EnumTaskUserHireStatus.Pass),
      onClick: (role) => handleRecruit(role.id, EnumTaskUserHireStatus.Pass),
    },
    extraProps: {
      hide: (row: API.GetTaskUsersQueryResultItem) =>
        row.hireStatus === EnumTaskUserHireStatus.Pass,
    },
  },
  {
    data: {
      enCode: 'refuseBtn',
      name: '谢绝',
    },
  cancelRecruitBtn: {
    emits: {
      onClick: (role) => setTaskUserHire(role, EnumTaskUserHireStatus.Refuse),
      onClick: (role) => handleCancelRecruit(role.id, EnumTaskUserHireStatus.Cancel),
    },
    extraProps: {
      hide: (row: API.GetTaskUsersQueryResultItem) =>
        row.hireStatus !== EnumTaskUserHireStatus.Pass,
    },
  },
  refuseBtn: {
    emits: {
      onClick: (role) => openRefuseDialog(role),
    },
    extraProps: {
      hide: (row: API.GetTaskUsersQueryResultItem) =>
        row.hireStatus !== EnumTaskUserHireStatus.Wait,
    },
  },
]);
};
const { column, operationBtns } = useAccess({
  operationBtnMap,
});
const router = useRouter();
const route = useRoute();
@@ -127,8 +125,9 @@
          page: pageIndex,
          orderInput: extraParamState.orderInput,
        },
        // searchWord: extraParamState.searchWord,
        id: id,
        keywords: extraParamState.searchWord,
        hireStatus: extraParamState.hireStatus,
      };
      let res = await taskUserServices.getTaskUsers(params, {
@@ -149,6 +148,11 @@
    columnsRenderProps: {
      gender: { type: 'enum', valueEnum: EnumUserGenderTextForPerson },
      hireStatus: { type: 'enum', valueEnum: EnumTaskUserHireStatusText },
      identity: {
        formatter: (row: API.GetTaskUsersQueryResultItem) => {
          return hiddenIDNumberForEnd4(row.identity);
        },
      },
    },
  }
);
@@ -165,8 +169,8 @@
    contactPhoneNumber: '',
    gender: EnumUserGender.Male,
    age: null as any as number,
    idFrontUrl: [] as UploadUserFile[],
    idBackUrl: [] as UploadUserFile[],
    identityImg: [] as UploadUserFile[],
    identityBackImg: [] as UploadUserFile[],
    contractUrl: [] as UploadUserFile[],
    regiterTime: '',
    userRealTime: '',
@@ -175,34 +179,72 @@
  },
});
function openDialog(row: API.GetTaskUsersQueryResultItem) {
  handleStaffInfoEdit({
    id: row.id,
    name: row.name,
    identity: row.identity,
    contactPhoneNumber: row.contactPhoneNumber,
    gender: row.gender,
    age: row.age ?? null,
    idFrontUrl: convertApi2FormUrlOnlyOne(row.idFrontUrl),
    idBackUrl: convertApi2FormUrlOnlyOne(row.idBackUrl),
    contractUrl: convertApi2FormUrlOnlyOne(row.contractUrl, {
      fileName: row.contractUrl ? row.contractUrl.split('/').pop() : '合同',
    }),
    regiterTime: row.regiterTime ?? '',
    userRealTime: row.userRealTime,
    userSignContractTime: row.userSignContractTime,
    isDetail: true,
  });
async function openDialog(row: API.GetTaskUsersQueryResultItem) {
  try {
    let detail = await enterpriseEmployeeServices.getEnterpriseEmployee({
      id: row.enterpriseEmployeeId,
    });
    handleStaffInfoEdit({
      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: detail.userRealTime ?? '',
      userSignContractTime: detail.userSignContractTime ?? '',
      isDetail: true,
    });
  } catch (error) {}
}
async function setTaskUserHire(
  row: API.GetTaskUsersQueryResultItem,
  hireStatus: EnumTaskUserHireStatus
) {
const { dialogProps, handleAdd, editForm } = useFormDialog({
  onConfirm: handleRefuse,
  defaultFormParams: {
    id: '',
    remark: '',
  },
});
async function openRefuseDialog(row: API.GetTaskUsersQueryResultItem) {
  try {
    await Message.tipMessage(`确认要谢绝吗?`);
    handleAdd({
      id: row.id,
    });
  } catch (error) {}
}
async function handleRefuse() {
  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 {
    let params: API.SetTaskUserHireCommand = {
      id: row.id,
      id: id,
      hireStatus: hireStatus,
      hireRemark: remark,
    };
    let res = await taskUserServices.setTaskUserHire(params);
    if (res) {