|
@@ -254,7 +254,7 @@ const generateScript = async () => {
|
|
|
try {
|
|
try {
|
|
|
isGenerating.value = true
|
|
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 =
|
|
let content =
|
|
|
prompt.value +
|
|
prompt.value +
|
|
|
'(主讲人:' + role.name +
|
|
'(主讲人:' + role.name +
|
|
@@ -263,7 +263,7 @@ const generateScript = async () => {
|
|
|
let zhujiang = []
|
|
let zhujiang = []
|
|
|
|
|
|
|
|
selectedAssistants.value.forEach((rName) => {
|
|
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 + ']')
|
|
zhujiang.push(assistantRole.name + '[' + assistantRole.description + ']')
|
|
|
})
|
|
})
|
|
|
content += zhujiang.join(',') + ')'
|
|
content += zhujiang.join(',') + ')'
|
|
@@ -735,7 +735,7 @@ const generateVoiceover = async (lessonIndex, sectionIndex, dialogueIndex) => {
|
|
|
|
|
|
|
|
dialogue.generatingVoiceover = true
|
|
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) {
|
|
if (!role) {
|
|
|
console.error('未找到角色:', dialogue.roleName)
|
|
console.error('未找到角色:', dialogue.roleName)
|
|
|
dialogue.generatingVoiceover = false
|
|
dialogue.generatingVoiceover = false
|
|
@@ -770,6 +770,22 @@ const progressSteps = ref([
|
|
|
{ text: '生成配音...', completed: false, active: false, visible: false }
|
|
{ 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([
|
|
const dropdowns = ref([
|
|
|
{
|
|
{
|
|
@@ -786,19 +802,14 @@ const dropdowns = ref([
|
|
|
value: '主讲',
|
|
value: '主讲',
|
|
|
visible: false,
|
|
visible: false,
|
|
|
icon: User,
|
|
icon: User,
|
|
|
- options: [
|
|
|
|
|
- { label: '李白', value: '李白' },
|
|
|
|
|
- { label: '李老师', value: '李老师' }
|
|
|
|
|
- ]
|
|
|
|
|
|
|
+ options: teacherOptions.value
|
|
|
},
|
|
},
|
|
|
{
|
|
{
|
|
|
key: 'assistant',
|
|
key: 'assistant',
|
|
|
value: '助教',
|
|
value: '助教',
|
|
|
visible: false,
|
|
visible: false,
|
|
|
icon: Memo,
|
|
icon: Memo,
|
|
|
- options: [
|
|
|
|
|
- { label: '小智', value: '小智' },
|
|
|
|
|
- ]
|
|
|
|
|
|
|
+ options: assistantOptions.value
|
|
|
}
|
|
}
|
|
|
]);
|
|
]);
|
|
|
|
|
|
|
@@ -825,25 +836,35 @@ const dropdownConfig = {
|
|
|
const handleSelect = (key, command) => {
|
|
const handleSelect = (key, command) => {
|
|
|
const dropdown = dropdowns.value.find(item => item.key === key);
|
|
const dropdown = dropdowns.value.find(item => item.key === key);
|
|
|
if (dropdown && dropdownConfig[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);
|
|
return progressSteps.value.every(step => step.completed);
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
-// 组件挂载时示
|
|
|
|
|
|
|
+// 组件挂载时
|
|
|
onMounted(() => {
|
|
onMounted(() => {
|
|
|
// 初始状态下不显示生成进度
|
|
// 初始状态下不显示生成进度
|
|
|
showNewContainer.value = false;
|
|
showNewContainer.value = false;
|
|
|
|
|
+ // 初始化主讲下拉框选项
|
|
|
|
|
+ dropdowns.value[1].options = teacherOptions.value;
|
|
|
|
|
+ // 初始化助教下拉框选项
|
|
|
|
|
+ dropdowns.value[2].options = assistantOptions.value;
|
|
|
});
|
|
});
|
|
|
</script>
|
|
</script>
|
|
|
|
|
|