From 02a7cf1981f452db97d0fe9fe49cdaecb3df59cc Mon Sep 17 00:00:00 2001 From: shenaowei <450702724@qq.com> Date: Mon, 23 Feb 2026 23:08:44 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=9E=9A=E4=B8=BE=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web-gold/src/components/VoiceSelector.vue | 7 +----- .../module/tik/enums/AiModelTypeEnum.java | 9 ++++++++ .../module/tik/enums/AiPlatformEnum.java | 3 +++ .../vo/AiModelConfigSaveReqVO.java | 6 ++--- .../muye/aimodelconfig/AiModelConfigForm.vue | 22 ++++++++++--------- .../src/views/muye/aimodelconfig/index.vue | 8 ++++++- 6 files changed, 34 insertions(+), 21 deletions(-) diff --git a/frontend/app/web-gold/src/components/VoiceSelector.vue b/frontend/app/web-gold/src/components/VoiceSelector.vue index d2dbd89998..0fe5ce25be 100644 --- a/frontend/app/web-gold/src/components/VoiceSelector.vue +++ b/frontend/app/web-gold/src/components/VoiceSelector.vue @@ -221,12 +221,7 @@ const initPlayer = (url) => { }] }) - player.on('ended', () => { - if (audioUrl.value?.startsWith('blob:')) { - URL.revokeObjectURL(audioUrl.value) - } - audioUrl.value = '' - }) + // 播放结束后保留播放器,让用户可以再次播放 player.on('error', (e) => { console.error('APlayer 播放错误:', e) diff --git a/yudao-module-tik/src/main/java/cn/iocoder/yudao/module/tik/enums/AiModelTypeEnum.java b/yudao-module-tik/src/main/java/cn/iocoder/yudao/module/tik/enums/AiModelTypeEnum.java index 5c72457f4d..2ee2ba2b01 100644 --- a/yudao-module-tik/src/main/java/cn/iocoder/yudao/module/tik/enums/AiModelTypeEnum.java +++ b/yudao-module-tik/src/main/java/cn/iocoder/yudao/module/tik/enums/AiModelTypeEnum.java @@ -23,6 +23,15 @@ public enum AiModelTypeEnum implements ArrayValuable { // ========== 数字人模型 ========== DIGITAL_HUMAN_LATENTSYNC("latentsync", "LatentSync", AiPlatformEnum.DIGITAL_HUMAN), DIGITAL_HUMAN_KLING("kling", "可灵", AiPlatformEnum.DIGITAL_HUMAN), + + // ========== TikHub 爬虫 ========== + TIKHUB_CRAWLER("crawler", "爬虫", AiPlatformEnum.TIKHUB), + + // ========== 阿里云语音服务 ========== + ALICLOUD_VOICE_TO_TEXT("voice_to_text", "语音转文字", AiPlatformEnum.ALICLOUD), + + // ========== SiliconFlow 语音服务 ========== + SILICONFLOW_INDEXTTS("indextts", "IndexTTS", AiPlatformEnum.SILICONFLOW), ; /** diff --git a/yudao-module-tik/src/main/java/cn/iocoder/yudao/module/tik/enums/AiPlatformEnum.java b/yudao-module-tik/src/main/java/cn/iocoder/yudao/module/tik/enums/AiPlatformEnum.java index eed3f0641d..a34886f664 100644 --- a/yudao-module-tik/src/main/java/cn/iocoder/yudao/module/tik/enums/AiPlatformEnum.java +++ b/yudao-module-tik/src/main/java/cn/iocoder/yudao/module/tik/enums/AiPlatformEnum.java @@ -18,6 +18,9 @@ public enum AiPlatformEnum implements ArrayValuable { DIFY("dify", "Dify 平台"), DIGITAL_HUMAN("digital_human", "数字人平台"), + TIKHUB("tikhub", "TikHub 平台"), + ALICLOUD("alicloud", "阿里云平台"), + SILICONFLOW("siliconflow", "SiliconFlow 平台"), ; /** diff --git a/yudao-module-tik/src/main/java/cn/iocoder/yudao/module/tik/muye/aimodelconfig/vo/AiModelConfigSaveReqVO.java b/yudao-module-tik/src/main/java/cn/iocoder/yudao/module/tik/muye/aimodelconfig/vo/AiModelConfigSaveReqVO.java index 32a05c358a..458eb1a24b 100644 --- a/yudao-module-tik/src/main/java/cn/iocoder/yudao/module/tik/muye/aimodelconfig/vo/AiModelConfigSaveReqVO.java +++ b/yudao-module-tik/src/main/java/cn/iocoder/yudao/module/tik/muye/aimodelconfig/vo/AiModelConfigSaveReqVO.java @@ -25,8 +25,7 @@ public class AiModelConfigSaveReqVO { @NotEmpty(message = "所属平台不能为空") private String platform; - @Schema(description = "API秘钥", requiredMode = Schema.RequiredMode.REQUIRED) - @NotEmpty(message = "API秘钥不能为空") + @Schema(description = "API秘钥") private String apiKey; @Schema(description = "状态(0-禁用 1-启用)", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") @@ -53,8 +52,7 @@ public class AiModelConfigSaveReqVO { @NotNull(message = "消耗积分不能为空") private Integer consumePoints; - @Schema(description = "最大文本数量", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "最大文本数量不能为空") + @Schema(description = "最大文本数量") private Integer maxTextLength; @Schema(description = "图片最大像素", requiredMode = Schema.RequiredMode.REQUIRED) diff --git a/yudao-ui-admin-vue3/src/views/muye/aimodelconfig/AiModelConfigForm.vue b/yudao-ui-admin-vue3/src/views/muye/aimodelconfig/AiModelConfigForm.vue index 38ab174e62..265ca75377 100644 --- a/yudao-ui-admin-vue3/src/views/muye/aimodelconfig/AiModelConfigForm.vue +++ b/yudao-ui-admin-vue3/src/views/muye/aimodelconfig/AiModelConfigForm.vue @@ -4,7 +4,7 @@ ref="formRef" :model="formData" :rules="formRules" - label-width="100px" + label-width="140px" v-loading="formLoading" > @@ -19,9 +19,10 @@ - + - 请选择字典生成 + 启用 + 禁用 @@ -39,6 +40,7 @@ 文本 视频 音频 + 第三方 @@ -101,17 +103,17 @@ const formRules = reactive({ modelName: [{ required: true, message: '模型名称不能为空', trigger: 'blur' }], modelCode: [{ required: true, message: '模型标识/编码不能为空', trigger: 'blur' }], platform: [{ required: true, message: '所属平台不能为空', trigger: 'blur' }], - apiKey: [{ required: true, message: 'API秘钥不能为空', trigger: 'blur' }], - status: [{ required: true, message: '状态(0-禁用 1-启用)不能为空', trigger: 'blur' }], - temperature: [{ required: true, message: '温度参数不能为空', trigger: 'blur' }], + apiKey: [{ required: false, message: 'API秘钥不能为空', trigger: 'blur' }], + status: [{ required: true, message: '状态不能为空', trigger: 'blur' }], + temperature: [{ required: false, message: '温度参数不能为空', trigger: 'blur' }], maxTokens: [{ required: true, message: '回复数Token数不能为空', trigger: 'blur' }], dailyLimit: [{ required: true, message: '每日请求次数不能为空', trigger: 'blur' }], modelType: [{ required: true, message: '模型类型(image-图像 text-文本 video-视频 audio-音频)不能为空', trigger: 'change' }], consumePoints: [{ required: true, message: '消耗积分不能为空', trigger: 'blur' }], - maxTextLength: [{ required: true, message: '最大文本数量不能为空', trigger: 'blur' }], - maxImageSize: [{ required: true, message: '图片最大像素不能为空', trigger: 'blur' }], - maxVideoDuration: [{ required: true, message: '视频最大时长(秒)不能为空', trigger: 'blur' }], - maxVideoQuality: [{ required: true, message: '视频最大质量不能为空', trigger: 'blur' }], + maxTextLength: [{ required: false, message: '最大文本数量不能为空', trigger: 'blur' }], + maxImageSize: [{ required: false, message: '图片最大像素不能为空', trigger: 'blur' }], + maxVideoDuration: [{ required: false, message: '视频最大时长(秒)不能为空', trigger: 'blur' }], + maxVideoQuality: [{ required: false, message: '视频最大质量不能为空', trigger: 'blur' }], remark: [{ required: true, message: '备注不能为空', trigger: 'blur' }], }) const formRef = ref() // 表单 Ref diff --git a/yudao-ui-admin-vue3/src/views/muye/aimodelconfig/index.vue b/yudao-ui-admin-vue3/src/views/muye/aimodelconfig/index.vue index 42ddb947a2..73c56b39c6 100644 --- a/yudao-ui-admin-vue3/src/views/muye/aimodelconfig/index.vue +++ b/yudao-ui-admin-vue3/src/views/muye/aimodelconfig/index.vue @@ -111,7 +111,13 @@ - + + +