follow update 21(https://aigc-doc.cqrthny.com/document/digital_human.html#_4-%E6%9B%B4%E6%96%B0%E8%AE%B0%E5%BD%95)
This commit is contained in:
@@ -18,6 +18,7 @@ const createCourseSchema = object({
|
||||
title: string().trim().min(4, '标题必须大于4个字符').max(20, '标题不能超过20个字符').required('请输入视频标题'),
|
||||
content: string().trim().min(4, '内容必须大于4个字符').max(1000, '内容不能超过1000个字符').required('请输入驱动文本内容'),
|
||||
digital_human_id: number().not([0], '请选择数字人'),
|
||||
source_type: number().default(0).required(),
|
||||
speed: number().default(1.0).min(0.5).max(1.5).required(),
|
||||
})
|
||||
|
||||
@@ -27,6 +28,7 @@ const createCourseState = reactive({
|
||||
title: undefined,
|
||||
content: undefined,
|
||||
digital_human_id: 0,
|
||||
source_type: 0,
|
||||
speed: 1.0,
|
||||
})
|
||||
|
||||
@@ -34,7 +36,9 @@ const selected_digital_human = ref<DigitalHumanItem | null>(null)
|
||||
|
||||
watchEffect(() => {
|
||||
if (selected_digital_human.value) {
|
||||
createCourseState.digital_human_id = selected_digital_human.value.model_id || selected_digital_human.value.id!
|
||||
// 2025.02.26 使用内部数字人 ID
|
||||
createCourseState.digital_human_id = selected_digital_human.value.digital_human_id!
|
||||
createCourseState.source_type = selected_digital_human.value.type!
|
||||
}
|
||||
})
|
||||
|
||||
@@ -48,6 +52,7 @@ const onCreateCourseGreenSubmit = async (event: FormSubmitEvent<CreateCourseSche
|
||||
digital_human_id: event.data.digital_human_id,
|
||||
speed: 2 - event.data.speed,
|
||||
device_id: 'XSHAssistant Web',
|
||||
source_type: event.data.source_type as 1 | 2 | undefined,
|
||||
}).then(res => {
|
||||
if (!!res.data.task_id) {
|
||||
toast.add({
|
||||
|
||||
@@ -1,38 +1,50 @@
|
||||
import { useFetchWrapped } from '~/composables/useFetchWrapped'
|
||||
import { useFetchWrapped } from './useFetchWrapped'
|
||||
import { useLoginState } from './useLoginState'
|
||||
|
||||
const putOSS = (file: File, signed_url: string) => new Promise<void>((resolve, reject) => {
|
||||
let xhr = new XMLHttpRequest()
|
||||
xhr.open('PUT', signed_url as string)
|
||||
xhr.setRequestHeader('Content-Type', '')
|
||||
xhr.onload = () => {
|
||||
if (xhr.status === 200) {
|
||||
resolve()
|
||||
} else {
|
||||
reject()
|
||||
}
|
||||
}
|
||||
xhr.onerror = reject
|
||||
xhr.send(file)
|
||||
})
|
||||
|
||||
export const useFileGo = (file: File) => new Promise<string>((resolve, reject) => {
|
||||
useFetchWrapped<req.file.Upload & AuthedRequest, BaseResponse<string>>('App.Tools_Upload.UploadOssMaterial', {
|
||||
token: useLoginState().token!,
|
||||
user_id: useLoginState().user.id,
|
||||
file_name: file.name,
|
||||
file_type: file.type,
|
||||
file_size: file.size,
|
||||
}).then(async res => {
|
||||
if (res.data !== '') {
|
||||
try {
|
||||
await putOSS(file, res.data)
|
||||
let url = res.data.split('?')[0]
|
||||
resolve(url)
|
||||
} catch (err) {
|
||||
reject(err)
|
||||
const putOSS = (file: File, signed_url: string) =>
|
||||
new Promise<void>((resolve, reject) => {
|
||||
let xhr = new XMLHttpRequest()
|
||||
xhr.open('PUT', signed_url as string)
|
||||
xhr.setRequestHeader('Content-Type', '')
|
||||
xhr.onload = () => {
|
||||
if (xhr.status === 200) {
|
||||
resolve()
|
||||
} else {
|
||||
reject()
|
||||
}
|
||||
}
|
||||
}).catch(err => {
|
||||
reject(err)
|
||||
xhr.onerror = reject
|
||||
xhr.send(file)
|
||||
})
|
||||
|
||||
export const useFileGo = (
|
||||
file: File,
|
||||
type: 'material' | 'ppt' | 'subtitles' | 'preview' | 'tmp'
|
||||
) =>
|
||||
new Promise<string>((resolve, reject) => {
|
||||
useFetchWrapped<req.file.Upload & AuthedRequest, BaseResponse<string>>(
|
||||
'App.Tools_Upload.DirectUpload',
|
||||
{
|
||||
token: useLoginState().token!,
|
||||
user_id: useLoginState().user.id,
|
||||
file_name: file.name,
|
||||
file_type: type,
|
||||
file_size: file.size,
|
||||
file_mime: file.type,
|
||||
}
|
||||
)
|
||||
.then(async (res) => {
|
||||
if (res.data !== '') {
|
||||
try {
|
||||
await putOSS(file, res.data)
|
||||
let url = res.data.split('?')[0]
|
||||
resolve(url)
|
||||
} catch (err) {
|
||||
reject(err)
|
||||
}
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
reject(err)
|
||||
})
|
||||
})
|
||||
})
|
||||
@@ -127,7 +127,7 @@ const createAvatarState = reactive({
|
||||
description: '',
|
||||
model_id: undefined,
|
||||
avatar: '',
|
||||
type: 0,
|
||||
type: 2,
|
||||
})
|
||||
|
||||
const createAvatarSchema = object({
|
||||
@@ -424,10 +424,9 @@ const onAvatarUpload = async (files: FileList) => {
|
||||
>
|
||||
<USelect
|
||||
v-model="createAvatarState.type"
|
||||
disabled
|
||||
:options="[
|
||||
{ label: '系统', value: 0 },
|
||||
{ label: '用户', value: 1 },
|
||||
{ label: '内部', value: 2 },
|
||||
{ label: '上游(万木)', value: 1 },
|
||||
]"
|
||||
/>
|
||||
</UFormGroup>
|
||||
|
||||
28
typings/types.d.ts
vendored
28
typings/types.d.ts
vendored
@@ -58,16 +58,33 @@ interface ServiceBalance {
|
||||
request_type: ServiceTag
|
||||
}
|
||||
|
||||
/**
|
||||
* Represents an item related to a digital human.
|
||||
*
|
||||
* @interface DigitalHumanItem
|
||||
*
|
||||
* @property {number} user_id - The ID of the user associated with the digital human.
|
||||
* @property {number} create_time - The timestamp when the digital human item was created.
|
||||
* @property {number} [id] - Internal model ID
|
||||
* @property {number} model_id - 上Upstream model ID
|
||||
* @property {string} avatar - The URL or path to the avatar image of the digital human.
|
||||
* @property {number} type - 1: upstream, 2: internal
|
||||
* @property {string} name - The name of the digital human.
|
||||
* @property {string} description - A brief description of the digital human.
|
||||
* @property {number} [digital_human_id] - The ID of the digital human.
|
||||
*/
|
||||
interface DigitalHumanItem {
|
||||
user_id: number
|
||||
create_time: number
|
||||
// Local ID
|
||||
id?: number
|
||||
// Upstream model ID
|
||||
model_id: number
|
||||
avatar: string
|
||||
type: number
|
||||
type?: 1 | 2
|
||||
name: string
|
||||
description: string
|
||||
id?: number
|
||||
digital_human_id: number
|
||||
digital_human_id?: number
|
||||
}
|
||||
|
||||
interface GBVideoItem {
|
||||
@@ -164,8 +181,9 @@ namespace req {
|
||||
namespace file {
|
||||
interface Upload {
|
||||
file_name: string
|
||||
file_type: string
|
||||
file_type: 'material' | 'ppt' | 'subtitles' | 'preview' | 'tmp'
|
||||
file_size: number
|
||||
file_mime: string
|
||||
}
|
||||
}
|
||||
|
||||
@@ -231,6 +249,8 @@ namespace req {
|
||||
content: string
|
||||
bg_img?: string
|
||||
speed?: number
|
||||
// 1: upstream 2: internal
|
||||
source_type?: 1 | 2
|
||||
}
|
||||
|
||||
interface GBVideoDelete {
|
||||
|
||||
Reference in New Issue
Block a user