Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
T
text2video-frontend
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
周成波
text2video-frontend
Commits
8da33cf8
Commit
8da33cf8
authored
Oct 25, 2024
by
Administrator
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
增加保存 debug
parent
7d82daab
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
138 additions
and
30 deletions
+138
-30
LoginDialog.vue
src/components/LoginDialog.vue
+13
-28
exportFile.js
src/utils/exportFile.js
+84
-0
exportFile.ts
src/utils/exportFile.ts
+1
-1
gen_digit_human_video.vue
src/views/home/gen_digit_human_video.vue
+40
-1
No files found.
src/components/LoginDialog.vue
View file @
8da33cf8
...
@@ -79,38 +79,16 @@ const handleClose = () => {
...
@@ -79,38 +79,16 @@ const handleClose = () => {
}
}
</
script
>
</
script
>
<
template
>
<
template
>
<el-dialog
<el-dialog
v-model=
"isVisible"
lock-scroll
:close-on-click-modal=
"false"
:show-close=
"false"
v-model=
"isVisible"
:close-on-press-escape=
"false"
:title=
"title"
:width=
"isMobile ? '80%' : '400px'"
modal-class=
"wm-login-dialog-mask"
lock-scroll
align-center
center
class=
"wm-login-dialog"
:class=
"
{ 'is-mobile': isMobile }">
:close-on-click-modal=
"false"
<el-form
ref=
"loginFormRef"
style=
"max-width: 400px"
:model=
"loginForm"
status-icon
:rules=
"rules"
:show-close=
"false"
label-width=
"auto"
class=
"wm-login-form"
>
:close-on-press-escape=
"false"
:title=
"title"
:width=
"isMobile ? '80%' : '400px'"
align-center
center
class=
"wm-login-dialog"
:class=
"
{ 'is-mobile': isMobile }"
>
<el-form
ref=
"loginFormRef"
style=
"max-width: 400px"
:model=
"loginForm"
status-icon
:rules=
"rules"
label-width=
"auto"
class=
"wm-login-form"
>
<el-form-item
label=
"用户名"
prop=
"username"
>
<el-form-item
label=
"用户名"
prop=
"username"
>
<el-input
class=
"wm-input"
v-model=
"loginForm.username"
type=
"text"
autocomplete=
"off"
/>
<el-input
class=
"wm-input"
v-model=
"loginForm.username"
type=
"text"
autocomplete=
"off"
/>
</el-form-item>
</el-form-item>
<el-form-item
label=
"密码 "
prop=
"password"
>
<el-form-item
label=
"密码 "
prop=
"password"
>
<el-input
<el-input
class=
"wm-input"
v-model=
"loginForm.password"
type=
"password"
autocomplete=
"off"
/>
class=
"wm-input"
v-model=
"loginForm.password"
type=
"password"
autocomplete=
"off"
/>
</el-form-item>
</el-form-item>
<!--
<el-form-item
label=
"验证码"
prop=
"captcha"
>
<!--
<el-form-item
label=
"验证码"
prop=
"captcha"
>
<el-input
v-model
.
number=
"loginForm.captcha"
/>
<el-input
v-model
.
number=
"loginForm.captcha"
/>
...
@@ -136,15 +114,18 @@ const handleClose = () => {
...
@@ -136,15 +114,18 @@ const handleClose = () => {
.wm-login-form
{
.wm-login-form
{
.register-tips
{
.register-tips
{
text-align
:
right
;
text-align
:
right
;
.link
{
.link
{
color
:
#409eff
;
color
:
#409eff
;
cursor
:
pointer
;
cursor
:
pointer
;
&
:hover
{
&
:hover
{
text-decoration
:
underline
;
text-decoration
:
underline
;
}
}
}
}
}
}
}
}
.login-btn
{
.login-btn
{
width
:
100%
;
width
:
100%
;
}
}
...
@@ -166,4 +147,8 @@ const handleClose = () => {
...
@@ -166,4 +147,8 @@ const handleClose = () => {
padding
:
10px
calc
(
var
(
--
el-dialog-padding-primary
)
+
5px
)
10px
;
padding
:
10px
calc
(
var
(
--
el-dialog-padding-primary
)
+
5px
)
10px
;
}
}
}
}
.wm-login-dialog-mask
{
background
:
rgba
(
123
,
122
,
122
,
0
.95
);
}
</
style
>
</
style
>
src/utils/exportFile.js
0 → 100644
View file @
8da33cf8
import
FileSaver
from
'file-saver'
;
export
default
class
fileSave
{
/**
* 导出Excel文件
* @param {*} res 文件流
* @param {*} name 文件名
*/
static
getExcel
(
res
,
name
)
{
const
blob
=
new
Blob
([
res
],
{
type
:
'application/vnd.ms-excel'
});
FileSaver
.
saveAs
(
blob
,
name
+
'.xlsx'
);
}
/**
* 导出CSV文件
* @param {*} res 文件流
* @param {*} name 文件名
*/
static
getCsv
(
res
,
name
)
{
const
blob
=
new
Blob
([
res
],
{
type
:
'application/vnd.ms-excel'
});
FileSaver
.
saveAs
(
blob
,
name
+
'.csv'
);
}
/**
* 导出图片1
* @param {*} url 图片地址
* @param {*} name 文件名
*/
static
getImgURLs
(
url
,
name
)
{
const
last
=
url
.
substring
(
url
.
lastIndexOf
(
'.'
),
url
.
length
);
FileSaver
.
saveAs
(
url
,
`
${
name
}${
last
}
`
);
}
/**
* 导出图片2
* @param {*} res 文件流
* @param {*} name 文件名
*/
static
downLoadImg
(
res
,
filename
,
type
=
'image/jpeg'
)
{
const
blob
=
new
Blob
([
res
],
{
type
:
type
});
FileSaver
.
saveAs
(
blob
,
`
${
filename
}
`
);
}
/**
* 导出图片3
* @param {*} res 文件流
* @param {*} name 文件名
*/
static
downLoadImgByUrl
(
url
,
filename
,
type
=
'image/jpeg'
)
{
FileSaver
.
saveAs
(
url
,
`
${
filename
}
`
);
}
/**
* 下载文本文件
*/
static
getTxtFile
(
url
,
name
)
{
FileSaver
.
saveAs
(
url
,
`
${
name
}
.txt`
);
}
/**
* 下载文件
*/
static
getVideoFile
(
url
,
name
)
{
FileSaver
.
saveAs
(
url
,
`
${
name
}
`
);
}
/**
* 下载文件
*/
static
getFile
(
url
,
name
)
{
FileSaver
.
saveAs
(
url
,
`
${
name
}
`
);
}
/**
* 下载文件
*/
static
getFile2
(
res
,
name
)
{
const
blob
=
new
Blob
([
res
]);
FileSaver
.
saveAs
(
blob
,
`
${
name
}
`
);
}
}
src/utils/exportFile.ts
View file @
8da33cf8
...
@@ -63,7 +63,7 @@ export default class fileSave {
...
@@ -63,7 +63,7 @@ export default class fileSave {
/**
/**
* 下载文件
* 下载文件
*/
*/
static
getVideoFile
(
url
:
string
,
name
:
string
)
{
static
getVideoFile
(
url
:
Blob
,
name
:
string
)
{
FileSaver
.
saveAs
(
url
,
`
${
name
}
`
)
FileSaver
.
saveAs
(
url
,
`
${
name
}
`
)
}
}
...
...
src/views/home/gen_digit_human_video.vue
View file @
8da33cf8
...
@@ -4,6 +4,7 @@ import userService from '@/api/service/userService'
...
@@ -4,6 +4,7 @@ import userService from '@/api/service/userService'
import
LoginDialog
from
'@/components/LoginDialog.vue'
import
LoginDialog
from
'@/components/LoginDialog.vue'
import
VideoCrop
from
'@/components/VideoCrop.vue'
import
VideoCrop
from
'@/components/VideoCrop.vue'
import
{
useAuthStore
}
from
'@/stores/state'
import
{
useAuthStore
}
from
'@/stores/state'
import
exportFile
from
'@/utils/exportFile'
import
utils
from
'@/utils/utils'
import
utils
from
'@/utils/utils'
import
{
import
{
ElMessage
,
ElMessage
,
...
@@ -40,7 +41,7 @@ const form = reactive({
...
@@ -40,7 +41,7 @@ const form = reactive({
show_image_or_video_path
:
''
,
show_image_or_video_path
:
''
,
show_image_or_video_url
:
''
,
show_image_or_video_url
:
''
,
bgm
:
''
,
bgm
:
''
,
final_video
:
''
,
final_video
:
'
https://ai-wmdigit.oss-cn-shanghai.aliyuncs.com/ai-wmdigit/ice/20241021101849049/20241024100724603488_subtitle.mp4
'
,
sample_video_crop_area
:
[],
sample_video_crop_area
:
[],
show_image_or_video_crop_area
:
[],
show_image_or_video_crop_area
:
[],
subtitle_type
:
"color"
,
subtitle_type
:
"color"
,
...
@@ -270,6 +271,43 @@ const handleCrop = (val: any) => {
...
@@ -270,6 +271,43 @@ const handleCrop = (val: any) => {
form
.
sample_video_crop_area
=
val
form
.
sample_video_crop_area
=
val
}
}
}
}
// 下载视频
const
onDownloadVideo
=
async
()
=>
{
if
(
!
form
.
final_video
)
{
ElMessage
.
warning
({
message
:
'请先生成视频'
})
return
}
const
url
=
form
.
final_video
const
arr_name
=
url
.
split
(
'/'
);
const
file_name
=
arr_name
[
arr_name
.
length
-
1
];
// 获取文件名
if
(
isMobile
.
value
)
{
const
fileBlob
=
await
(
await
fetch
(
url
)).
blob
();
const
shareData
=
{
files
:
[
new
File
([
fileBlob
],
file_name
,
{
type
:
fileBlob
.
type
})]
};
if
(
navigator
.
canShare
(
shareData
))
{
await
navigator
.
share
(
shareData
);
ElMessage
(
'下载成功了 (Download success)'
);
}
else
{
ElMessage
.
error
({
message
:
'下载失败'
});
}
}
else
{
await
fetch
(
url
)
.
then
((
url
)
=>
url
.
blob
())
.
then
((
blob
)
=>
{
exportFile
.
getVideoFile
(
blob
,
file_name
);
})
.
catch
((
error
)
=>
{
ElMessage
.
error
({
message
:
'下载失败:'
+
error
.
message
});
});
}
}
</
script
>
</
script
>
<!-- ============================================================================================================ -->
<!-- ============================================================================================================ -->
...
@@ -385,6 +423,7 @@ const handleCrop = (val: any) => {
...
@@ -385,6 +423,7 @@ const handleCrop = (val: any) => {
<!-- 结果 -->
<!-- 结果 -->
<el-form-item
label=
"生成"
>
<el-form-item
label=
"生成"
>
<el-button
type=
"primary"
@
click=
"onGenVideo"
>
生成视频
</el-button>
<el-button
type=
"primary"
@
click=
"onGenVideo"
>
生成视频
</el-button>
<el-button
type=
"success"
@
click=
"onDownloadVideo"
>
下载视频
</el-button>
</el-form-item>
</el-form-item>
<el-form-item
v-if=
"form.final_video"
>
<el-form-item
v-if=
"form.final_video"
>
<video
:src=
"form.final_video"
class=
"example-final-video"
controls
></video>
<video
:src=
"form.final_video"
class=
"example-final-video"
controls
></video>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment