入职任务预览,入职任务cope,验证填入的信息
This commit is contained in:
@@ -514,6 +514,8 @@ const positions = ref<OnboardingPositionOption[]>([]);
|
||||
const searchCompanies = ref<OnboardingCompanyOption[]>([]);
|
||||
const searchDepartments = ref<OnboardingDepartmentOption[]>([]);
|
||||
const searchPositions = ref<OnboardingPositionOption[]>([]);
|
||||
const allSearchDepartments = ref<OnboardingDepartmentOption[]>([]);
|
||||
const allSearchPositions = ref<OnboardingPositionOption[]>([]);
|
||||
|
||||
const companySearchOptions = computed(() =>
|
||||
searchCompanies.value.map(c => ({
|
||||
@@ -536,6 +538,58 @@ const positionSearchOptions = computed(() =>
|
||||
}))
|
||||
);
|
||||
|
||||
async function onSearchCompanyChange(companyId?: number) {
|
||||
if (companyId) {
|
||||
const [depRes, posRes] = await Promise.all([
|
||||
onboardingTaskApi.listDepartments(companyId).catch(() => ({ data: [] })),
|
||||
onboardingTaskApi.listPositions(companyId).catch(() => ({ data: [] }))
|
||||
]);
|
||||
searchDepartments.value = depRes.data || [];
|
||||
searchPositions.value = posRes.data || [];
|
||||
} else {
|
||||
searchDepartments.value = allSearchDepartments.value;
|
||||
searchPositions.value = allSearchPositions.value;
|
||||
}
|
||||
|
||||
templateTable.value?.enumMap.set("departmentId", departmentSearchOptions.value);
|
||||
templateTable.value?.enumMap.set("positionId", positionSearchOptions.value);
|
||||
|
||||
if (templateTable.value?.searchParam) {
|
||||
const currentDept = templateTable.value.searchParam.departmentId;
|
||||
if (currentDept && !searchDepartments.value.some(d => d.id === currentDept)) {
|
||||
templateTable.value.searchParam.departmentId = undefined;
|
||||
}
|
||||
const currentPos = templateTable.value.searchParam.positionId;
|
||||
if (currentPos && !searchPositions.value.some(p => p.id === currentPos)) {
|
||||
templateTable.value.searchParam.positionId = undefined;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function onSearchDepartmentChange(departmentId?: number) {
|
||||
if (departmentId) {
|
||||
const posRes = await onboardingTaskApi.listPositionsByDepartment(departmentId).catch(() => ({ data: [] }));
|
||||
searchPositions.value = posRes.data || [];
|
||||
} else {
|
||||
const selectedCompanyId = templateTable.value?.searchParam?.companyId;
|
||||
if (selectedCompanyId) {
|
||||
const posRes = await onboardingTaskApi.listPositions(selectedCompanyId).catch(() => ({ data: [] }));
|
||||
searchPositions.value = posRes.data || [];
|
||||
} else {
|
||||
searchPositions.value = allSearchPositions.value;
|
||||
}
|
||||
}
|
||||
|
||||
templateTable.value?.enumMap.set("positionId", positionSearchOptions.value);
|
||||
|
||||
if (templateTable.value?.searchParam) {
|
||||
const currentPos = templateTable.value.searchParam.positionId;
|
||||
if (currentPos && !searchPositions.value.some(p => p.id === currentPos)) {
|
||||
templateTable.value.searchParam.positionId = undefined;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const versions = ref<OnboardingContractVersion[]>([]);
|
||||
const versionVisible = ref(false);
|
||||
const variablesVisible = ref(false);
|
||||
@@ -605,7 +659,12 @@ const templateColumns: ColumnProps<OnboardingContractTemplate>[] = [
|
||||
enum: companySearchOptions,
|
||||
search: {
|
||||
el: "select",
|
||||
props: { filterable: true, clearable: true, placeholder: "请选择所属公司" }
|
||||
props: {
|
||||
filterable: true,
|
||||
clearable: true,
|
||||
placeholder: "请选择所属公司",
|
||||
onChange: (val?: number) => onSearchCompanyChange(val)
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -615,7 +674,12 @@ const templateColumns: ColumnProps<OnboardingContractTemplate>[] = [
|
||||
enum: departmentSearchOptions,
|
||||
search: {
|
||||
el: "select",
|
||||
props: { filterable: true, clearable: true, placeholder: "请选择所属部门" }
|
||||
props: {
|
||||
filterable: true,
|
||||
clearable: true,
|
||||
placeholder: "请选择所属部门",
|
||||
onChange: (val?: number) => onSearchDepartmentChange(val)
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -910,31 +974,43 @@ async function saveVariable() {
|
||||
}
|
||||
|
||||
async function loadSearchOptions() {
|
||||
await loadCompanies();
|
||||
searchCompanies.value = companies.value;
|
||||
try {
|
||||
await loadCompanies();
|
||||
searchCompanies.value = companies.value;
|
||||
|
||||
const deptList: OnboardingDepartmentOption[] = [];
|
||||
const posList: OnboardingPositionOption[] = [];
|
||||
const deptList: OnboardingDepartmentOption[] = [];
|
||||
const posList: OnboardingPositionOption[] = [];
|
||||
|
||||
if (companies.value && companies.value.length > 0) {
|
||||
const promises = companies.value.map(async comp => {
|
||||
const [depRes, posRes] = await Promise.all([
|
||||
onboardingTaskApi.listDepartments(comp.id),
|
||||
onboardingTaskApi.listPositions(comp.id)
|
||||
]);
|
||||
if (depRes.data) deptList.push(...depRes.data);
|
||||
if (posRes.data) posList.push(...posRes.data);
|
||||
});
|
||||
await Promise.all(promises);
|
||||
if (companies.value && companies.value.length > 0) {
|
||||
const promises = companies.value.map(async comp => {
|
||||
const [depRes, posRes] = await Promise.all([
|
||||
onboardingTaskApi.listDepartments(comp.id).catch(() => ({ data: [] })),
|
||||
onboardingTaskApi.listPositions(comp.id).catch(() => ({ data: [] }))
|
||||
]);
|
||||
if (depRes.data) deptList.push(...depRes.data);
|
||||
if (posRes.data) posList.push(...posRes.data);
|
||||
});
|
||||
await Promise.all(promises);
|
||||
}
|
||||
|
||||
const uniqueDeptMap = new Map<number, OnboardingDepartmentOption>();
|
||||
deptList.forEach(d => uniqueDeptMap.set(d.id, d));
|
||||
const finalDepts = Array.from(uniqueDeptMap.values());
|
||||
allSearchDepartments.value = finalDepts;
|
||||
searchDepartments.value = finalDepts;
|
||||
|
||||
const uniquePosMap = new Map<number, OnboardingPositionOption>();
|
||||
posList.forEach(p => uniquePosMap.set(p.id, p));
|
||||
const finalPositions = Array.from(uniquePosMap.values());
|
||||
allSearchPositions.value = finalPositions;
|
||||
searchPositions.value = finalPositions;
|
||||
|
||||
templateTable.value?.enumMap.set("companyId", companySearchOptions.value);
|
||||
templateTable.value?.enumMap.set("departmentId", departmentSearchOptions.value);
|
||||
templateTable.value?.enumMap.set("positionId", positionSearchOptions.value);
|
||||
} catch (e) {
|
||||
console.error("加载签署材料搜索选项失败", e);
|
||||
}
|
||||
|
||||
const uniqueDeptMap = new Map<number, OnboardingDepartmentOption>();
|
||||
deptList.forEach(d => uniqueDeptMap.set(d.id, d));
|
||||
searchDepartments.value = Array.from(uniqueDeptMap.values());
|
||||
|
||||
const uniquePosMap = new Map<number, OnboardingPositionOption>();
|
||||
posList.forEach(p => uniquePosMap.set(p.id, p));
|
||||
searchPositions.value = Array.from(uniquePosMap.values());
|
||||
}
|
||||
|
||||
onMounted(loadSearchOptions);
|
||||
|
||||
Reference in New Issue
Block a user