Procházet zdrojové kódy

绑定主讲和助教下拉框数据

丸子 před 3 měsíci
rodič
revize
1d5d797174
1 změnil soubory, kde provedl 54 přidání a 29 odebrání
  1. 54 29
      src/components/study/SelfDirectedLearning.vue

+ 54 - 29
src/components/study/SelfDirectedLearning.vue

@@ -254,7 +254,7 @@ const generateScript = async () => {
   try {
     isGenerating.value = true
 
-    const role = props.scriptRoles.value.find((r) => r.name === selectedMainTeacher.value)
+    const role = props.scriptRoles.find((r) => r.name === selectedMainTeacher.value)
     let content =
         prompt.value +
         '(主讲人:' + role.name +
@@ -263,7 +263,7 @@ const generateScript = async () => {
     let zhujiang = []
 
     selectedAssistants.value.forEach((rName) => {
-      const assistantRole = props.scriptRoles.value.find((r) => r.name === rName)
+      const assistantRole = props.scriptRoles.find((r) => r.name === rName)
       zhujiang.push(assistantRole.name + '[' + assistantRole.description + ']')
     })
     content += zhujiang.join(',') + ')'
@@ -735,7 +735,7 @@ const generateVoiceover = async (lessonIndex, sectionIndex, dialogueIndex) => {
 
   dialogue.generatingVoiceover = true
 
-  let role = props.scriptRoles.value.find((r) => r.name === dialogue.roleName)
+  let role = props.scriptRoles.find((r) => r.name === dialogue.roleName)
   if (!role) {
     console.error('未找到角色:', dialogue.roleName)
     dialogue.generatingVoiceover = false
@@ -770,6 +770,22 @@ const progressSteps = ref([
   { text: '生成配音...', completed: false, active: false, visible: false }
 ]);
 
+// 计算主讲下拉框选项
+const teacherOptions = computed(() => {
+  return props.scriptRoles.map(role => ({
+    label: role.name,
+    value: role.name
+  }));
+});
+
+// 计算助教下拉框选项
+const assistantOptions = computed(() => {
+  return props.scriptRoles.map(role => ({
+    label: role.name,
+    value: role.name
+  }));
+});
+
 // 下拉框配置
 const dropdowns = ref([
   {
@@ -786,19 +802,14 @@ const dropdowns = ref([
     value: '主讲',
     visible: false,
     icon: User,
-    options: [
-      { label: '李白', value: '李白' },
-      { label: '李老师', value: '李老师' }
-    ]
+    options: teacherOptions.value
   },
   {
     key: 'assistant',
     value: '助教',
     visible: false,
     icon: Memo,
-    options: [
-      { label: '小智', value: '小智' },
-    ]
+    options: assistantOptions.value
   }
 ]);
 
@@ -825,25 +836,35 @@ const dropdownConfig = {
 const handleSelect = (key, command) => {
   const dropdown = dropdowns.value.find(item => item.key === key);
   if (dropdown && dropdownConfig[key]) {
-    const config = dropdownConfig[key];
-
-    // 生成新内容,仅当选择的值与默认值不同时添加
-    const newContent = command === config.default
-      ? config.prefix
-      : `${config.prefix}${command}`;
-
-    // 检查输入框中是否已存在该类型的内容
-    if (config.regex.test(prompt.value)) {
-      // 替换已存在的内容
-      prompt.value = prompt.value.replace(config.regex, newContent);
-    } else {
-      // 添加到输入框,用逗号隔开
-      if (prompt.value.trim()) {
-        prompt.value += `, ${newContent}`;
-      } else {
-        prompt.value = newContent;
-      }
+     // 更新下拉框显示值
+    dropdown.value = command;
+    // 如果选择的是主讲,更新selectedMainTeacher
+    if (key === 'teacher') {
+      selectedMainTeacher.value = command;
+    }
+    // 如果选择的是助教,更新selectedAssistants
+    else if (key === 'assistant') {
+      selectedAssistants.value = [command];
     }
+    // const config = dropdownConfig[key];
+
+    // // 生成新内容,仅当选择的值与默认值不同时添加
+    // const newContent = command === config.default
+    //   ? config.prefix
+    //   : `${config.prefix}${command}`;
+
+    // // 检查输入框中是否已存在该类型的内容
+    // if (config.regex.test(prompt.value)) {
+    //   // 替换已存在的内容
+    //   prompt.value = prompt.value.replace(config.regex, newContent);
+    // } else {
+    //   // 添加到输入框,用逗号隔开
+    //   if (prompt.value.trim()) {
+    //     prompt.value += `, ${newContent}`;
+    //   } else {
+    //     prompt.value = newContent;
+    //   }
+    // }
   }
 };
 
@@ -896,10 +917,14 @@ const allStepsCompleted = computed(() => {
   return progressSteps.value.every(step => step.completed);
 });
 
-// 组件挂载时
+// 组件挂载时
 onMounted(() => {
   // 初始状态下不显示生成进度
   showNewContainer.value = false;
+  // 初始化主讲下拉框选项
+  dropdowns.value[1].options = teacherOptions.value;
+  // 初始化助教下拉框选项
+  dropdowns.value[2].options = assistantOptions.value;
 });
 </script>