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('请输入视频标题'),
|
title: string().trim().min(4, '标题必须大于4个字符').max(20, '标题不能超过20个字符').required('请输入视频标题'),
|
||||||
content: string().trim().min(4, '内容必须大于4个字符').max(1000, '内容不能超过1000个字符').required('请输入驱动文本内容'),
|
content: string().trim().min(4, '内容必须大于4个字符').max(1000, '内容不能超过1000个字符').required('请输入驱动文本内容'),
|
||||||
digital_human_id: number().not([0], '请选择数字人'),
|
digital_human_id: number().not([0], '请选择数字人'),
|
||||||
|
source_type: number().default(0).required(),
|
||||||
speed: number().default(1.0).min(0.5).max(1.5).required(),
|
speed: number().default(1.0).min(0.5).max(1.5).required(),
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -27,6 +28,7 @@ const createCourseState = reactive({
|
|||||||
title: undefined,
|
title: undefined,
|
||||||
content: undefined,
|
content: undefined,
|
||||||
digital_human_id: 0,
|
digital_human_id: 0,
|
||||||
|
source_type: 0,
|
||||||
speed: 1.0,
|
speed: 1.0,
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -34,7 +36,9 @@ const selected_digital_human = ref<DigitalHumanItem | null>(null)
|
|||||||
|
|
||||||
watchEffect(() => {
|
watchEffect(() => {
|
||||||
if (selected_digital_human.value) {
|
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,
|
digital_human_id: event.data.digital_human_id,
|
||||||
speed: 2 - event.data.speed,
|
speed: 2 - event.data.speed,
|
||||||
device_id: 'XSHAssistant Web',
|
device_id: 'XSHAssistant Web',
|
||||||
|
source_type: event.data.source_type as 1 | 2 | undefined,
|
||||||
}).then(res => {
|
}).then(res => {
|
||||||
if (!!res.data.task_id) {
|
if (!!res.data.task_id) {
|
||||||
toast.add({
|
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) => {
|
const putOSS = (file: File, signed_url: string) =>
|
||||||
let xhr = new XMLHttpRequest()
|
new Promise<void>((resolve, reject) => {
|
||||||
xhr.open('PUT', signed_url as string)
|
let xhr = new XMLHttpRequest()
|
||||||
xhr.setRequestHeader('Content-Type', '')
|
xhr.open('PUT', signed_url as string)
|
||||||
xhr.onload = () => {
|
xhr.setRequestHeader('Content-Type', '')
|
||||||
if (xhr.status === 200) {
|
xhr.onload = () => {
|
||||||
resolve()
|
if (xhr.status === 200) {
|
||||||
} else {
|
resolve()
|
||||||
reject()
|
} 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)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}).catch(err => {
|
xhr.onerror = reject
|
||||||
reject(err)
|
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: '',
|
description: '',
|
||||||
model_id: undefined,
|
model_id: undefined,
|
||||||
avatar: '',
|
avatar: '',
|
||||||
type: 0,
|
type: 2,
|
||||||
})
|
})
|
||||||
|
|
||||||
const createAvatarSchema = object({
|
const createAvatarSchema = object({
|
||||||
@@ -424,10 +424,9 @@ const onAvatarUpload = async (files: FileList) => {
|
|||||||
>
|
>
|
||||||
<USelect
|
<USelect
|
||||||
v-model="createAvatarState.type"
|
v-model="createAvatarState.type"
|
||||||
disabled
|
|
||||||
:options="[
|
:options="[
|
||||||
{ label: '系统', value: 0 },
|
{ label: '内部', value: 2 },
|
||||||
{ label: '用户', value: 1 },
|
{ label: '上游(万木)', value: 1 },
|
||||||
]"
|
]"
|
||||||
/>
|
/>
|
||||||
</UFormGroup>
|
</UFormGroup>
|
||||||
|
|||||||
28
typings/types.d.ts
vendored
28
typings/types.d.ts
vendored
@@ -58,16 +58,33 @@ interface ServiceBalance {
|
|||||||
request_type: ServiceTag
|
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 {
|
interface DigitalHumanItem {
|
||||||
user_id: number
|
user_id: number
|
||||||
create_time: number
|
create_time: number
|
||||||
|
// Local ID
|
||||||
|
id?: number
|
||||||
|
// Upstream model ID
|
||||||
model_id: number
|
model_id: number
|
||||||
avatar: string
|
avatar: string
|
||||||
type: number
|
type?: 1 | 2
|
||||||
name: string
|
name: string
|
||||||
description: string
|
description: string
|
||||||
id?: number
|
digital_human_id?: number
|
||||||
digital_human_id: number
|
|
||||||
}
|
}
|
||||||
|
|
||||||
interface GBVideoItem {
|
interface GBVideoItem {
|
||||||
@@ -164,8 +181,9 @@ namespace req {
|
|||||||
namespace file {
|
namespace file {
|
||||||
interface Upload {
|
interface Upload {
|
||||||
file_name: string
|
file_name: string
|
||||||
file_type: string
|
file_type: 'material' | 'ppt' | 'subtitles' | 'preview' | 'tmp'
|
||||||
file_size: number
|
file_size: number
|
||||||
|
file_mime: string
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -231,6 +249,8 @@ namespace req {
|
|||||||
content: string
|
content: string
|
||||||
bg_img?: string
|
bg_img?: string
|
||||||
speed?: number
|
speed?: number
|
||||||
|
// 1: upstream 2: internal
|
||||||
|
source_type?: 1 | 2
|
||||||
}
|
}
|
||||||
|
|
||||||
interface GBVideoDelete {
|
interface GBVideoDelete {
|
||||||
|
|||||||
Reference in New Issue
Block a user