diff --git a/src/views/interview/management/allowcate-modal.vue b/src/views/interview/management/allowcate-modal.vue index ba778fe..8bc0235 100644 --- a/src/views/interview/management/allowcate-modal.vue +++ b/src/views/interview/management/allowcate-modal.vue @@ -64,6 +64,7 @@ import dayjs from 'dayjs'; import { Group } from '@/constants/team'; import { Application } from '@/constants/httpMsg/application/getApplicationMsg'; import { isOverlappingWithAny, timeRangesType } from '@/utils/isOverlapping'; +import { Interview } from '@/constants/httpMsg/interview/getInterviewMsg'; const { t } = useI18n(); const { widthType } = useWindowResize(); @@ -94,6 +95,15 @@ const props = defineProps({ default: () => [], required: true, }, + filteredInterviews: { + type: Array as PropType, + default: () => [], + required: true, + }, + interviewIdSet: { + type: Set, + required: true, + }, }); const showAllowcate = defineModel('showAllowcate', { @@ -107,12 +117,6 @@ const form = ref<{ }>({ selectInterviewId: '' }); const recStore = useRecruitmentStore(); -const filteredInterviews = computed(() => - props.interviewType === 'group' - ? recStore.curInterviews.filter((item) => item.name === props.currentGroup) - : recStore.curInterviews.filter((item) => item.name === 'unique'), -); - const optionsData = computed(() => { // 面试分类 date->period->time // eslint-disable-next-line @typescript-eslint/no-shadow @@ -120,7 +124,7 @@ const optionsData = computed(() => { [key: string]: { [key: string]: { time: string; interviewId: string }[] }; }; - filteredInterviews.value.forEach((interview) => { + props.filteredInterviews.forEach((interview) => { if (interview.start && interview.period) { const date = dayjs(interview.start).format('YYYY-MM-DD'); const time = `${dayjs(interview.start).format('HH:mm')} @@ -179,6 +183,10 @@ const selectedTime = computed(() => { ); return ( nowApplication?.interview_selections + // 过滤不是当前的面试,主要由于组面和群面的 interviewSelections 是同一个 + ?.filter((interview_selection) => + props.interviewIdSet.has(interview_selection.uid), + ) ?.map((interview) => ({ formatedTime: `${dayjs(interview.start).format('YYYY-MM-DD')} ${dayjs( interview.start, diff --git a/src/views/interview/management/index.vue b/src/views/interview/management/index.vue index e8582ca..a40f8a3 100644 --- a/src/views/interview/management/index.vue +++ b/src/views/interview/management/index.vue @@ -189,6 +189,8 @@ :current-group="currentGroup" :filtered-apps="filteredAndSortedApps" :merged-time-ranges="mergedTimeRanges" + :filtered-interviews="filteredInterviews" + :interview-id-set="interviewIdSet" /> @@ -277,6 +279,22 @@ const filteredAndSortedApps = computed(() => }), ); +// 当前组下所有可选的面试 +const filteredInterviews = computed(() => + interviewType.value === InterviewType.Group + ? recStore.curInterviews.filter((item) => item.name === currentGroup.value) + : recStore.curInterviews.filter((item) => item.name === 'unique'), +); + +// 所有可选面试的 Id +const interviewIdSet = computed(() => { + const m = new Set(); + filteredInterviews.value.forEach((inte) => { + m.add(inte.uid); + }); + return m; +}); + const mergedTimeRanges = computed(() => { const raw: timeRangesType[] = []; filteredAndSortedApps.value.forEach((app) => { @@ -315,10 +333,16 @@ const data = computed(() => }; if ( ret.interviewTime === t('common.status.waitForDistribution') && - app.interview_selections && - app.interview_selections.length !== 0 + app.interview_selections ) { - ret.name = `💡${ret.name}`; + const isNew = + app.interview_selections?.some((se) => + interviewIdSet.value.has(se.uid), + ) ?? false; + + if (isNew) { + ret.name = `💡${ret.name}`; + } } return ret;