-
-
-
{{ d.description }}
+
+
+
-
-
{{ d.name }}
+
+
+ {{ d.name }}
+ ID:{{ d.digital_human_id || d.id }}
+
-
- ·SELECTED·
-
-
-
- system
+
+
@@ -167,7 +182,7 @@ const {
@@ -181,8 +196,8 @@ const {
diff --git a/components/SlideCreateCourse.vue b/components/SlideCreateCourse.vue
new file mode 100644
index 0000000..c322f7a
--- /dev/null
+++ b/components/SlideCreateCourse.vue
@@ -0,0 +1,240 @@
+
+
+
+
+
+
+
+
+ 新建微课视频
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{
+ selected_digital_human?.name || '点击选择数字人'
+ }}
+
+ {{ selected_digital_human?.description }}
+
+
+
+
+
+
+
+
+
+
+ selected_file = file"
+ />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {
+ selected_digital_human = (digitalHumans as DigitalHumanItem)
+ }"
+ />
+
+
+
+
\ No newline at end of file
diff --git a/components/ppt/NavItem.vue b/components/aigc/NavItem.vue
similarity index 100%
rename from components/ppt/NavItem.vue
rename to components/aigc/NavItem.vue
diff --git a/components/aigc/course-generate/CGTaskCard.vue b/components/aigc/course-generate/CGTaskCard.vue
index 4d59845..9d90eed 100644
--- a/components/aigc/course-generate/CGTaskCard.vue
+++ b/components/aigc/course-generate/CGTaskCard.vue
@@ -3,7 +3,6 @@ import type { PropType } from 'vue'
import dayjs from 'dayjs'
import { useDownload } from '~/composables/useDownload'
import gsap from 'gsap'
-import SRTEditor from '~/components/aigc/course-generate/SRTEditor.vue'
const toast = useToast()
const { metaSymbol } = useShortcuts()
@@ -285,7 +284,7 @@ const copyTaskId = (extraMessage?: string) => {
/>
-
diff --git a/components/aigc/course-generate/CourseGenerate.vue b/components/aigc/course-generate/CourseGenerate.vue
deleted file mode 100644
index 0766d59..0000000
--- a/components/aigc/course-generate/CourseGenerate.vue
+++ /dev/null
@@ -1,308 +0,0 @@
-
-
-
-
-
- {
- if (!loginState.is_logged_in) {
- modal.open(ModalAuthentication)
- return
- }
- onCreateCourseClick()
- }"
- />
-
-
-
-
-
-
-
- onCourseDelete(task_id)"
- />
-
-
-
-
-
-
-
-
-
-
- 新建微课视频
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- selected_file = file"
- />
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/components/aigc/course-generate/SRTEditor.vue b/components/aigc/course-generate/SRTEditor.vue
index 116070d..2acb66a 100644
--- a/components/aigc/course-generate/SRTEditor.vue
+++ b/components/aigc/course-generate/SRTEditor.vue
@@ -40,7 +40,7 @@ const loadSrt = async () => {
} catch (err) {
toast.add({
title: '加载字幕失败',
- description: err as string || '未知错误',
+ description: `${ err }` || '未知错误',
color: 'red',
})
} finally {
diff --git a/components/ppt/PPTGenerationRecord.vue b/components/ppt/PPTGenerationRecord.vue
deleted file mode 100644
index e0cb58c..0000000
--- a/components/ppt/PPTGenerationRecord.vue
+++ /dev/null
@@ -1,93 +0,0 @@
-
-
-
-
-
-
-
-
- 预览
-
-
-
-
- ID: {{ record.task_id.slice(0, 6) }}
-
-
-
-
- {{ dayjs(record.create_time * 1000).fromNow() }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ record.title }}
-
-
-
-
-
-
- 字幕
-
-
- 下载
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/composables/fetchCourseSubtitleUrl.ts b/composables/fetchCourseSubtitleUrl.ts
index 185757e..3aa3044 100644
--- a/composables/fetchCourseSubtitleUrl.ts
+++ b/composables/fetchCourseSubtitleUrl.ts
@@ -1,24 +1,28 @@
export const fetchCourseSubtitleUrl = async (course: resp.gen.CourseGenItem) => {
const loginState = useLoginState()
- const subtitleRecord = await useFetchWrapped<
- {
- page?: number
- perpage?: number
- task_id: string
- } & AuthedRequest,
- BaseResponse
>
- >('App.Digital_VideoSubtitle.GetList', {
- token: loginState.token!,
- user_id: loginState.user.id,
- task_id: course.task_id,
- page: 1,
- perpage: 1,
- })
+ try {
+ const subtitleRecord = await useFetchWrapped<
+ {
+ page?: number
+ perpage?: number
+ task_id: string
+ } & AuthedRequest,
+ BaseResponse>
+ >('App.Digital_VideoSubtitle.GetList', {
+ token: loginState.token!,
+ user_id: loginState.user.id,
+ task_id: course.task_id,
+ page: 1,
+ perpage: 1,
+ })
- if (subtitleRecord.data.items.length !== 1) {
+ if (subtitleRecord.data.items.length !== 1) {
+ return course.subtitle_url
+ }
+
+ return subtitleRecord.data.items[0].url
+ } catch (err) {
return course.subtitle_url
}
-
- return subtitleRecord.data.items[0].url
}
\ No newline at end of file
diff --git a/layouts/default.vue b/layouts/default.vue
index 0ef1b12..27143c2 100644
--- a/layouts/default.vue
+++ b/layouts/default.vue
@@ -28,7 +28,7 @@ const links = [
}, {
label: 'PPT',
icon: 'i-tabler-file-type-ppt',
- to: '/aigc/course-generate',
+ to: '/aigc/generation',
},
]
@@ -62,7 +62,7 @@ const open_login_modal = () => {
眩生花 AI 助手
- 这里可以有一个副标题
+ XSH AI Assistant
diff --git a/nuxt.config.ts b/nuxt.config.ts
index 30017dc..171eb96 100644
--- a/nuxt.config.ts
+++ b/nuxt.config.ts
@@ -4,7 +4,7 @@ export default defineNuxtConfig({
runtimeConfig: {
public: {
- API_BASE: 'https://service1.fenshenzhike.com/',
+ API_BASE: 'https://service2.fenshenzhike.com/',
},
},
diff --git a/package.json b/package.json
index d6161c5..f31bec2 100644
--- a/package.json
+++ b/package.json
@@ -17,7 +17,6 @@
"@iconify-json/tabler": "^1.1.118",
"@monosky/base64": "^0.0.3",
"@nuxt/image": "^1.7.0",
- "@nuxt/ui": "^2.18.2",
"@uniiem/object-trim": "^0.2.0",
"@uniiem/uuid": "^0.2.1",
"events": "^3.3.0",
@@ -32,6 +31,7 @@
"yup": "^1.4.0"
},
"devDependencies": {
+ "@nuxt/ui": "^2.18.3",
"@nuxtjs/google-fonts": "^3.2.0",
"@pinia-plugin-persistedstate/nuxt": "^1.2.1",
"@pinia/nuxt": "^0.5.2",
@@ -42,6 +42,7 @@
"sass": "^1.77.8"
},
"peerDependencies": {
- "dayjs": "^1.11.12"
+ "dayjs": "^1.11.12",
+ "tailwindcss": "^3.4.7"
}
}
diff --git a/pages/aigc/course-generate/index.vue b/pages/aigc/course-generate/index.vue
deleted file mode 100644
index e997d99..0000000
--- a/pages/aigc/course-generate/index.vue
+++ /dev/null
@@ -1,75 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/pages/aigc/generation.vue b/pages/aigc/generation.vue
index 841f481..3b7965c 100644
--- a/pages/aigc/generation.vue
+++ b/pages/aigc/generation.vue
@@ -1,9 +1,31 @@
@@ -15,14 +37,11 @@ useSeoMeta({
-
@@ -30,10 +49,14 @@ useSeoMeta({
-
+
+
+
+
+
@@ -43,11 +66,11 @@ useSeoMeta({
\ No newline at end of file
diff --git a/pages/aigc/generation/course.vue b/pages/aigc/generation/course.vue
new file mode 100644
index 0000000..2249243
--- /dev/null
+++ b/pages/aigc/generation/course.vue
@@ -0,0 +1,170 @@
+
+
+
+
+
+
+
+ {
+ if (!loginState.is_logged_in) {
+ modal.open(ModalAuthentication)
+ return
+ }
+ onCreateCourseClick()
+ }"
+ />
+
+
+
+
+
+
+
+
+
+ onCourseDelete(task_id)"
+ />
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/aigc/generation/digital-teachers.vue b/pages/aigc/generation/digital-teachers.vue
deleted file mode 100644
index b00d6c3..0000000
--- a/pages/aigc/generation/digital-teachers.vue
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/components/aigc/course-generate/CourseGenerateGreenScreen.vue b/pages/aigc/generation/green-screen.vue
similarity index 100%
rename from components/aigc/course-generate/CourseGenerateGreenScreen.vue
rename to pages/aigc/generation/green-screen.vue
diff --git a/pages/aigc/generation/video-generate.vue b/pages/aigc/generation/video-generate.vue
deleted file mode 100644
index 538a194..0000000
--- a/pages/aigc/generation/video-generate.vue
+++ /dev/null
@@ -1,69 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 13e9d2f..0b0df6b 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -26,9 +26,6 @@ importers:
'@nuxt/image':
specifier: ^1.7.0
version: 1.7.0(idb-keyval@6.2.1)(ioredis@5.4.1)(magicast@0.3.4)(rollup@4.19.1)
- '@nuxt/ui':
- specifier: ^2.18.2
- version: 2.18.2(idb-keyval@6.2.1)(magicast@0.3.4)(rollup@4.19.1)(vite@5.3.5(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3))(vue@3.4.34)
'@uniiem/object-trim':
specifier: ^0.2.0
version: 0.2.0
@@ -59,6 +56,9 @@ importers:
radix-vue:
specifier: ^1.9.2
version: 1.9.2(vue@3.4.34)
+ tailwindcss:
+ specifier: ^3.4.7
+ version: 3.4.7
vue:
specifier: ^3.4.34
version: 3.4.34
@@ -69,6 +69,9 @@ importers:
specifier: ^1.4.0
version: 1.4.0
devDependencies:
+ '@nuxt/ui':
+ specifier: ^2.18.3
+ version: 2.18.3(idb-keyval@6.2.1)(magicast@0.3.4)(rollup@4.19.1)(vite@5.3.5(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3))(vue@3.4.34)
'@nuxtjs/google-fonts':
specifier: ^3.2.0
version: 3.2.0(magicast@0.3.4)(rollup@4.19.1)
@@ -1316,8 +1319,8 @@ packages:
peerDependencies:
vite: '*'
- '@nuxt/icon@1.3.1':
- resolution: {integrity: sha512-bpue1uzVTx3Fiwb0625ShaY5SFio8vcZ3L4kIb2tBc/BbENASQcCa27uk87zuWFJdnRWQbNpn/L4wc+wKZ0Wbw==}
+ '@nuxt/icon@1.4.4':
+ resolution: {integrity: sha512-XjpW6dO98y+7sxyhhAeka96cFdbThWEr6tgazVQ2d/RRgg9/9aYctcxo4GCoSD6APXf0k9gQE7WtiIIUKrjr3Q==}
'@nuxt/image@1.7.0':
resolution: {integrity: sha512-zSj32bLgbV9AvLkLX0pF52J5KBfSyj0eSIdpXCtTJATSZlqgcJigoCvmabC1nbcMIp0SZ29Bu9+acQpGTQKz+g==}
@@ -1335,8 +1338,8 @@ packages:
resolution: {integrity: sha512-KH6wxzsNys69daSO0xUv0LEBAfhwwjK1M+0Cdi1/vxmifCslMIY7lN11B4eywSfscbyVPAYJvANyc7XiVPImBQ==}
hasBin: true
- '@nuxt/ui@2.18.2':
- resolution: {integrity: sha512-azij3fV1FkEMG+sgTMEQiXkJMnII3HNQE+3r8g9QhUgO7iZ13TlUkXl0iYd+U/cGa4aZYki6WXJ45WyETtV/IA==}
+ '@nuxt/ui@2.18.3':
+ resolution: {integrity: sha512-bFy3K0cDPRlEYclQAjIgVFUGFb91sGYAtBmEzunFux85aUw0g4tI7vsWdyVijhKzGOyOjBuLGaG40kGl4AIXpA==}
engines: {node: '>=v16.20.2'}
'@nuxt/vite-builder@3.12.4':
@@ -6354,7 +6357,7 @@ snapshots:
- supports-color
- utf-8-validate
- '@nuxt/icon@1.3.1(magicast@0.3.4)(rollup@4.19.1)(vite@5.3.5(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3))(vue@3.4.34)':
+ '@nuxt/icon@1.4.4(magicast@0.3.4)(rollup@4.19.1)(vite@5.3.5(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3))(vue@3.4.34)':
dependencies:
'@iconify/collections': 1.0.443
'@iconify/types': 2.0.0
@@ -6365,6 +6368,7 @@ snapshots:
consola: 3.2.3
fast-glob: 3.3.2
local-pkg: 0.5.0
+ mlly: 1.7.1
pathe: 1.1.2
transitivePeerDependencies:
- magicast
@@ -6475,12 +6479,12 @@ snapshots:
- rollup
- supports-color
- '@nuxt/ui@2.18.2(idb-keyval@6.2.1)(magicast@0.3.4)(rollup@4.19.1)(vite@5.3.5(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3))(vue@3.4.34)':
+ '@nuxt/ui@2.18.3(idb-keyval@6.2.1)(magicast@0.3.4)(rollup@4.19.1)(vite@5.3.5(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3))(vue@3.4.34)':
dependencies:
'@headlessui/tailwindcss': 0.2.1(tailwindcss@3.4.7)
'@headlessui/vue': 1.7.22(vue@3.4.34)
'@iconify-json/heroicons': 1.1.23
- '@nuxt/icon': 1.3.1(magicast@0.3.4)(rollup@4.19.1)(vite@5.3.5(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3))(vue@3.4.34)
+ '@nuxt/icon': 1.4.4(magicast@0.3.4)(rollup@4.19.1)(vite@5.3.5(@types/node@20.14.12)(sass@1.77.8)(terser@5.31.3))(vue@3.4.34)
'@nuxt/kit': 3.12.4(magicast@0.3.4)(rollup@4.19.1)
'@nuxtjs/color-mode': 3.4.2(magicast@0.3.4)(rollup@4.19.1)
'@nuxtjs/tailwindcss': 6.12.1(magicast@0.3.4)(rollup@4.19.1)
diff --git a/tailwind.config.ts b/tailwind.config.ts
index 9e20c2e..5a1abd9 100644
--- a/tailwind.config.ts
+++ b/tailwind.config.ts
@@ -7,6 +7,12 @@ export default >{
sans: ['Rubik', 'Noto Sans SC', 'sans-serif'],
},
extend: {
+ screens: {
+ 'hd': '1280px',
+ 'fhd': '1920px',
+ '2k': '2560px',
+ '4k': '3840px',
+ },
fontSize: {
'2xs': '0.625rem',
},
diff --git a/typings/types.d.ts b/typings/types.d.ts
index 05503d5..44e26f8 100644
--- a/typings/types.d.ts
+++ b/typings/types.d.ts
@@ -28,6 +28,18 @@ interface UserSchema {
auth_code: 0 | 1 | 2 // 0: Banned, 1: User, 2: Operator
}
+interface DigitalHumanItem {
+ user_id: number
+ create_time: number
+ model_id: number
+ avatar: string
+ type: number
+ name: string
+ description: string
+ id?: number
+ digital_human_id: number
+}
+
// Common request and response schemas
namespace req {
namespace user {
@@ -97,6 +109,12 @@ namespace req {
sub_content: string
sub_ver?: number
}
+
+ interface DigitalHumanList {
+ to_user_id: number
+ page?: number
+ perpage?: number
+ }
}
interface AssistantTemplateList {