From c8f97c45d49900723f802237146c73fcabb37859 Mon Sep 17 00:00:00 2001 From: zhonghua Date: Tue, 24 Mar 2026 16:58:27 +0800 Subject: [PATCH] =?UTF-8?q?fix(admin):=20=E6=A0=B8=E5=BF=83=E5=8F=91?= =?UTF-8?q?=E5=B1=95=E7=9B=AE=E6=A0=87=E4=B8=8B=E6=8B=89=E6=8C=89=E4=B8=AD?= =?UTF-8?q?=E6=96=87=E5=AD=90=E9=A1=B9=E4=B8=8E=E9=A2=86=E5=9F=9F=E5=90=8D?= =?UTF-8?q?=E6=90=9C=E7=B4=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Made-with: Cursor --- .../components/course-edit/Step1BasicInfo.vue | 34 +++++++++++++++++++ .../courses/components/Step1BasicInfo.vue | 33 ++++++++++++++++++ 2 files changed, 67 insertions(+) diff --git a/reading-platform-frontend/src/components/course-edit/Step1BasicInfo.vue b/reading-platform-frontend/src/components/course-edit/Step1BasicInfo.vue index 5747c00..345cac2 100644 --- a/reading-platform-frontend/src/components/course-edit/Step1BasicInfo.vue +++ b/reading-platform-frontend/src/components/course-edit/Step1BasicInfo.vue @@ -74,8 +74,10 @@ @@ -156,6 +158,38 @@ const themesLoading = ref(false); const themes = ref([]); const coverImages = ref([]); +/** 核心发展目标:叶子项 + 父级领域名,用于搜索时同时匹配子项与分组 */ +const DOMAIN_TAG_OPTIONS: { group: string; value: string; label: string }[] = [ + { group: '健康', value: 'health_motor', label: '身体动作发展' }, + { group: '健康', value: 'health_hygiene', label: '生活习惯与能力' }, + { group: '语言', value: 'lang_listen', label: '倾听与表达' }, + { group: '语言', value: 'lang_read', label: '早期阅读' }, + { group: '社会', value: 'social_interact', label: '人际交往' }, + { group: '社会', value: 'social_adapt', label: '社会适应' }, + { group: '科学', value: 'science_explore', label: '科学探究' }, + { group: '科学', value: 'math_cog', label: '数学认知' }, + { group: '艺术', value: 'art_music', label: '音乐表现' }, + { group: '艺术', value: 'art_create', label: '美术创作' }, +]; + +const filterDomainTagOption = (input: string, option: any) => { + if (!input?.trim()) return true; + const q = input.trim(); + const key = option?.value ?? option?.key; + const row = DOMAIN_TAG_OPTIONS.find((o) => o.value === key); + if (row) { + return row.label.includes(q) || row.group.includes(q); + } + const label = + typeof option?.label === 'string' + ? option.label + : option?.children?.[0]?.children ?? option?.children; + if (typeof label === 'string') { + return label.includes(q); + } + return true; +}; + const formRules = { name: [ { required: true, message: '请输入课程包名称' }, diff --git a/reading-platform-frontend/src/views/admin/courses/components/Step1BasicInfo.vue b/reading-platform-frontend/src/views/admin/courses/components/Step1BasicInfo.vue index b087f7e..4ba0ace 100644 --- a/reading-platform-frontend/src/views/admin/courses/components/Step1BasicInfo.vue +++ b/reading-platform-frontend/src/views/admin/courses/components/Step1BasicInfo.vue @@ -71,8 +71,10 @@ @@ -152,6 +154,37 @@ const themesLoading = ref(false); const themes = ref([]); const coverImages = ref([]); +const DOMAIN_TAG_OPTIONS: { group: string; value: string; label: string }[] = [ + { group: '健康', value: 'health_motor', label: '身体动作发展' }, + { group: '健康', value: 'health_hygiene', label: '生活习惯与能力' }, + { group: '语言', value: 'lang_listen', label: '倾听与表达' }, + { group: '语言', value: 'lang_read', label: '早期阅读' }, + { group: '社会', value: 'social_interact', label: '人际交往' }, + { group: '社会', value: 'social_adapt', label: '社会适应' }, + { group: '科学', value: 'science_explore', label: '科学探究' }, + { group: '科学', value: 'math_cog', label: '数学认知' }, + { group: '艺术', value: 'art_music', label: '音乐表现' }, + { group: '艺术', value: 'art_create', label: '美术创作' }, +]; + +const filterDomainTagOption = (input: string, option: any) => { + if (!input?.trim()) return true; + const q = input.trim(); + const key = option?.value ?? option?.key; + const row = DOMAIN_TAG_OPTIONS.find((o) => o.value === key); + if (row) { + return row.label.includes(q) || row.group.includes(q); + } + const label = + typeof option?.label === 'string' + ? option.label + : option?.children?.[0]?.children ?? option?.children; + if (typeof label === 'string') { + return label.includes(q); + } + return true; +}; + const formData = reactive({ name: '', themeId: undefined,