Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
L
live-management-web
Overview
Overview
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
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
haojie
live-management-web
Commits
c7731fcb
Commit
c7731fcb
authored
Aug 03, 2023
by
haojie
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
洗稿
parent
0d8701a5
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
557 additions
and
280 deletions
+557
-280
.eslintrc
+1
-0
src/components/AddVideoPlay.vue
+61
-11
src/components/MultipleUpload/index.tsx
+22
-16
src/hooks/useScript.ts
+138
-33
src/layouts/components/Content.vue
+1
-0
src/pages/OnlyVideoLive/components/video.vue
+0
-77
src/pages/OnlyVideoLive/index.vue
+0
-0
src/pages/createLive/components/ChoseDigitalPerson.vue
+50
-17
src/pages/createLive/components/scripts.vue
+85
-57
src/pages/createLive/index.vue
+144
-64
src/pages/home/components/digitalPeopleDiaog.vue
+1
-0
src/pages/home/index.vue
+1
-0
src/service/Common.ts
+1
-1
src/service/Live.ts
+9
-0
src/store/modules/live.ts
+6
-1
src/store/modules/navbar.ts
+5
-0
src/utils/api/userApi.ts
+2
-2
src/utils/audio.ts
+0
-1
src/utils/error.ts
+11
-0
src/utils/tool.ts
+19
-0
No files found.
.eslintrc
View file @
c7731fcb
...
@@ -25,6 +25,7 @@
...
@@ -25,6 +25,7 @@
"rules": {
"rules": {
// 禁止 || true ,关闭
// 禁止 || true ,关闭
"no-constant-condition": 0,
"no-constant-condition": 0,
"no-empty": 0,
"vue/no-setup-props-destructure": 0,
"vue/no-setup-props-destructure": 0,
"vue/no-v-model-argument": 0,
"vue/no-v-model-argument": 0,
"vue/no-v-for-template-key": 0,
"vue/no-v-for-template-key": 0,
...
...
src/components/AddVideoPlay.vue
View file @
c7731fcb
...
@@ -6,9 +6,10 @@
...
@@ -6,9 +6,10 @@
:volume=
"firstVideoVolume"
:volume=
"firstVideoVolume"
ref=
"videoFirst"
ref=
"videoFirst"
class=
"video-default"
class=
"video-default"
loop
:src=
"video1"
:src=
"video1"
:loop=
"loop"
@
canplay=
"canplay"
@
canplay=
"canplay"
@
ended=
"firstVideoEnded"
></video>
></video>
<video
<video
v-show=
"!showFirstVideo"
v-show=
"!showFirstVideo"
...
@@ -16,7 +17,7 @@
...
@@ -16,7 +17,7 @@
:volume=
"secondVideoVolume"
:volume=
"secondVideoVolume"
class=
"video-default"
class=
"video-default"
:src=
"video2"
:src=
"video2"
@
ended=
"
on
VideoEnded"
@
ended=
"
second
VideoEnded"
@
canplay=
"canplay2"
@
canplay=
"canplay2"
></video>
></video>
<ConfirmDialog
v-model=
"confirmVisible"
:closeOnOverlayClick=
"false"
:footer=
"footerStatus"
@
confirm=
"confirm"
>
<ConfirmDialog
v-model=
"confirmVisible"
:closeOnOverlayClick=
"false"
:footer=
"footerStatus"
@
confirm=
"confirm"
>
...
@@ -42,19 +43,35 @@ import { onBeforeRouteLeave } from 'vue-router';
...
@@ -42,19 +43,35 @@ import { onBeforeRouteLeave } from 'vue-router';
import
{
injectWindow
}
from
'@/utils/pyqt'
;
import
{
injectWindow
}
from
'@/utils/pyqt'
;
import
{
show_message
}
from
'@/utils/tool'
;
import
{
show_message
}
from
'@/utils/tool'
;
const
props
=
defineProps
<
{
const
props
=
withDefaults
(
video1
:
string
;
defineProps
<
{
video2
:
string
;
video1
:
string
;
playId
?:
any
;
video2
:
string
;
progress
:
number
;
playId
?:
any
;
}
>
();
progress
:
number
;
mainIndex
?:
number
|
null
;
totalTime
:
number
;
liveDetail
:
any
;
}
>
(),
{
mainIndex
:
null
,
},
);
const
emit
=
defineEmits
([
'playEnd'
,
'update:progress'
]);
const
emit
=
defineEmits
([
'update:totalTime'
,
'currentTime'
,
'playEnd'
,
'mainVideoStartPlay'
,
'mainVideoPlayEnd'
,
'update:progress'
,
]);
const
store
=
useStore
();
const
store
=
useStore
();
const
videoNum
=
computed
(()
=>
store
.
getters
[
'live/getVideoNum'
]);
const
videoNum
=
computed
(()
=>
store
.
getters
[
'live/getVideoNum'
]);
const
liveVideoStatus
=
computed
(()
=>
store
.
getters
[
'live/getLiveVideoStatus'
]);
const
liveVideoStatus
=
computed
(()
=>
store
.
getters
[
'live/getLiveVideoStatus'
]);
const
loop
=
ref
(
false
);
const
loading
=
ref
(
true
);
const
loading
=
ref
(
true
);
const
footerStatus
=
ref
(
false
);
const
footerStatus
=
ref
(
false
);
const
showFirstVideo
=
ref
(
true
);
const
showFirstVideo
=
ref
(
true
);
...
@@ -63,6 +80,9 @@ const videoSecondPlay = ref(false);
...
@@ -63,6 +80,9 @@ const videoSecondPlay = ref(false);
const
confirmVisible
=
ref
(
true
);
const
confirmVisible
=
ref
(
true
);
// 第一个视频是否首次播放
const
videoFirstPlay
=
ref
(
true
);
// 第二个视频是否首次播放
// 第二个视频是否首次播放
const
videoSecondFirstPlay
=
ref
(
true
);
const
videoSecondFirstPlay
=
ref
(
true
);
...
@@ -98,18 +118,35 @@ const closeInterval = () => {
...
@@ -98,18 +118,35 @@ const closeInterval = () => {
interval
=
null
;
interval
=
null
;
};
};
// 确定播放
const
confirm
=
()
=>
{
const
confirm
=
()
=>
{
openInterval
();
openInterval
();
onPlay
();
onPlay
();
videoFirstPlay
.
value
=
false
;
emit
(
'mainVideoStartPlay'
,
props
.
mainIndex
);
};
};
// 主视频可以播放
const
canplay
=
()
=>
{
const
canplay
=
()
=>
{
// 获取视频总时长
// 获取视频总时长
total
.
value
=
videoFirst
.
value
.
duration
;
total
.
value
=
videoFirst
.
value
.
duration
;
// onPlay();
emit
(
'update:totalTime'
,
total
.
value
);
if
(
!
videoFirstPlay
.
value
)
{
//
onPlay
();
emit
(
'mainVideoStartPlay'
,
props
.
mainIndex
);
}
};
// 主视频播放完毕
const
firstVideoEnded
=
()
=>
{
if
(
videoFirst
.
value
.
ended
)
{
emit
(
'mainVideoPlayEnd'
,
props
.
mainIndex
);
}
};
};
const
onVideoEnded
=
()
=>
{
// 互动视频播放完毕
const
secondVideoEnded
=
()
=>
{
if
(
videoSecond
.
value
?.
ended
)
{
if
(
videoSecond
.
value
?.
ended
)
{
emit
(
'playEnd'
,
props
.
playId
);
emit
(
'playEnd'
,
props
.
playId
);
showFirstVideo
.
value
=
true
;
showFirstVideo
.
value
=
true
;
...
@@ -156,6 +193,17 @@ watch(
...
@@ -156,6 +193,17 @@ watch(
},
},
);
);
// 判断是否洗稿
watch
(
()
=>
props
.
liveDetail
,
(
v
)
=>
{
if
(
v
&&
v
.
is_disorganize
===
0
)
{
// 不洗稿,开启循环播放
loop
.
value
=
true
;
}
},
);
watch
(
watch
(
()
=>
props
.
video1
,
()
=>
props
.
video1
,
(
v
)
=>
{
(
v
)
=>
{
...
@@ -183,6 +231,8 @@ const updateTime = () => {
...
@@ -183,6 +231,8 @@ const updateTime = () => {
if
(
total
.
value
)
{
if
(
total
.
value
)
{
// 计算百分比
// 计算百分比
emit
(
'update:progress'
,
Math
.
floor
((
videoFirst
.
value
.
currentTime
/
total
.
value
)
*
100
));
emit
(
'update:progress'
,
Math
.
floor
((
videoFirst
.
value
.
currentTime
/
total
.
value
)
*
100
));
// 提交当前进度
emit
(
'currentTime'
,
videoFirst
.
value
.
currentTime
);
}
}
};
};
// 减小正在播放的视频音量
// 减小正在播放的视频音量
...
...
src/components/MultipleUpload/index.tsx
View file @
c7731fcb
...
@@ -102,19 +102,21 @@ export default defineComponent({
...
@@ -102,19 +102,21 @@ export default defineComponent({
// 文件是否上传过
// 文件是否上传过
const
fileHasUploaded
=
(
file
:
File
)
=>
{
const
fileHasUploaded
=
(
file
:
File
)
=>
{
for
(
let
i
=
0
;
i
<
fileList
.
value
.
length
;
i
++
)
{
// for (let i = 0; i < fileList.value.length; i++) {
let
item
=
fileList
.
value
[
i
].
file
;
// let item = fileList.value[i].file;
if
(
// if (item) {
item
===
file
||
// if (
(
item
.
lastModified
==
file
.
lastModified
&&
// item === file ||
item
.
name
==
file
.
name
&&
// (item.lastModified == file.lastModified &&
item
.
size
==
file
.
size
&&
// item.name == file.name &&
item
.
type
==
file
.
type
)
// item.size == file.size &&
)
{
// item.type == file.type)
show_message
(
`
${
file
.
name
}
已经上传过了`
);
// ) {
return
false
;
// show_message(`${file.name}已经上传过了`);
}
// return false;
}
// }
// }
// }
return
true
;
return
true
;
};
};
...
@@ -131,9 +133,11 @@ export default defineComponent({
...
@@ -131,9 +133,11 @@ export default defineComponent({
return
false
;
return
false
;
}
}
// 文件后缀
// 文件后缀
cons
t
fileSuffix
=
getFileSuffix
(
file
);
le
t
fileSuffix
=
getFileSuffix
(
file
);
if
(
props
.
accept
)
{
if
(
props
.
accept
)
{
if
(
props
.
accept
.
indexOf
(
fileSuffix
)
==
-
1
)
{
let
accept
=
props
.
accept
.
toLowerCase
();
fileSuffix
=
fileSuffix
.
toLowerCase
();
if
(
accept
.
indexOf
(
fileSuffix
)
==
-
1
)
{
show_message
(
`本次上传仅支持
${
props
.
accept
}
格式`
);
show_message
(
`本次上传仅支持
${
props
.
accept
}
格式`
);
return
false
;
return
false
;
}
}
...
@@ -269,6 +273,8 @@ export default defineComponent({
...
@@ -269,6 +273,8 @@ export default defineComponent({
fileList
.
value
.
forEach
((
item
:
any
)
=>
{
fileList
.
value
.
forEach
((
item
:
any
)
=>
{
if
(
item
.
url
)
{
if
(
item
.
url
)
{
list
.
push
(
item
.
url
);
list
.
push
(
item
.
url
);
}
else
if
(
item
.
audio_url
)
{
list
.
push
(
item
.
audio_url
);
}
}
if
(
item
.
time
)
{
if
(
item
.
time
)
{
totalTime
+=
item
.
time
;
totalTime
+=
item
.
time
;
...
@@ -322,7 +328,7 @@ export default defineComponent({
...
@@ -322,7 +328,7 @@ export default defineComponent({
</
span
>
</
span
>
</
div
>
</
div
>
)
}
)
}
<
div
class=
"file-name"
>
{
item
.
file
.
name
}
</
div
>
<
div
class=
"file-name"
>
{
item
.
file
?
.
name
}
</
div
>
{
computedTotalTime
()
?
(
{
computedTotalTime
()
?
(
<
audio
<
audio
src=
{
item
.
url
}
src=
{
item
.
url
}
...
...
src/
pages/createLive/hooks/scripts
.ts
→
src/
hooks/useScript
.ts
View file @
c7731fcb
This diff is collapsed.
Click to expand it.
src/layouts/components/Content.vue
View file @
c7731fcb
...
@@ -15,6 +15,7 @@
...
@@ -15,6 +15,7 @@
</
template
>
</
template
>
<
script
lang=
"ts"
setup
>
<
script
lang=
"ts"
setup
>
import
allRouter
from
'@/router'
;
import
{
useRoute
}
from
'vue-router'
;
import
{
useRoute
}
from
'vue-router'
;
const
route
=
useRoute
();
const
route
=
useRoute
();
...
...
src/pages/OnlyVideoLive/components/video.vue
deleted
100644 → 0
View file @
0d8701a5
<
template
>
<div
class=
"start-only-video-live"
>
<!--
<Button
theme=
"green"
@
click=
"playVideo"
>
开始播放
</Button>
-->
<AddVideoPlay
v-model:progress=
"progress"
:playId=
"playId"
@
playEnd=
"playEnd"
:video1=
"video"
:video2=
"video2"
></AddVideoPlay>
</div>
</
template
>
<
script
lang=
"ts"
setup
>
import
Button
from
'@/components/Button.vue'
;
import
{
onBeforeUnmount
,
ref
,
watch
}
from
'vue'
;
import
AddVideoPlay
from
'@/components/AddVideoPlay.vue'
;
const
props
=
withDefaults
(
defineProps
<
{
video
:
any
;
video2
:
any
;
playId
?:
any
;
modelValue
:
any
;
}
>
(),
{
playId
:
0
,
},
);
const
videoRef1
=
ref
<
HTMLVideoElement
>
();
let
interval1
=
null
;
const
progress
=
ref
(
0
);
const
emit
=
defineEmits
([
'update:modelValue'
,
'playEnd'
]);
watch
(
()
=>
progress
.
value
,
(
v
)
=>
{
emit
(
'update:modelValue'
,
v
);
},
);
const
playEnd
=
(
id
:
any
)
=>
{
emit
(
'playEnd'
,
id
);
};
const
closeInterval
=
()
=>
{
window
.
clearInterval
(
interval1
);
clearInterval
(
interval1
);
interval1
=
null
;
};
const
playVideo
=
()
=>
{
console
.
log
(
videoRef1
.
value
);
videoRef1
.
value
.
play
();
closeInterval
();
interval1
=
window
.
setInterval
(()
=>
{
// 播放结束
if
(
videoRef1
.
value
.
ended
)
{
closeInterval
();
}
},
100
);
};
onBeforeUnmount
(()
=>
{
closeInterval
();
});
</
script
>
<
style
lang=
"less"
>
.start-only-video-live
{
display
:
flex
;
justify-content
:
center
;
align-items
:
center
;
box-sizing
:
border-box
;
}
</
style
>
src/pages/OnlyVideoLive/index.vue
View file @
c7731fcb
This diff is collapsed.
Click to expand it.
src/pages/createLive/components/ChoseDigitalPerson.vue
View file @
c7731fcb
...
@@ -12,7 +12,7 @@
...
@@ -12,7 +12,7 @@
maxHeight: maxHeight + 'px',
maxHeight: maxHeight + 'px',
}"
}"
>
>
<
Grid
:length=
"digitalList.list.length"
:rowGap=
"12"
:marginLeft=
"8
"
>
<
div
class=
"create-digital-person-grid
"
>
<template
v-for=
"item in digitalList.list"
:key=
"item.id"
>
<template
v-for=
"item in digitalList.list"
:key=
"item.id"
>
<CardOne
<CardOne
:row=
"item"
:row=
"item"
...
@@ -23,7 +23,7 @@
...
@@ -23,7 +23,7 @@
@
change=
"onCardChange"
@
change=
"onCardChange"
></CardOne>
></CardOne>
</
template
>
</
template
>
</
Grid
>
</
div
>
</div>
</div>
</div>
</div>
</div>
</div>
...
@@ -31,10 +31,9 @@
...
@@ -31,10 +31,9 @@
<
script
lang=
"ts"
setup
>
<
script
lang=
"ts"
setup
>
import
Loading
from
'@/components/loading.vue'
;
import
Loading
from
'@/components/loading.vue'
;
import
Grid
from
'@/components/Grid.vue'
;
import
Select
from
'@/components/Select.vue'
;
import
Select
from
'@/components/Select.vue'
;
import
CardOne
from
'@/components/cardOne.vue'
;
import
CardOne
from
'@/components/cardOne.vue'
;
import
{
ref
,
onMounted
,
reactive
,
watch
,
computed
}
from
'vue'
;
import
{
ref
,
onMounted
,
reactive
,
watch
,
computed
,
onActivated
}
from
'vue'
;
import
{
getElBounding
,
getWindowClient
,
isDev
}
from
'@/utils/tool'
;
import
{
getElBounding
,
getWindowClient
,
isDev
}
from
'@/utils/tool'
;
import
{
useStore
}
from
'vuex'
;
import
{
useStore
}
from
'vuex'
;
import
{
createLiveKeys
}
from
'@/service/CreateLive'
;
import
{
createLiveKeys
}
from
'@/service/CreateLive'
;
...
@@ -84,12 +83,14 @@ const updateInfo = (info: any) => {
...
@@ -84,12 +83,14 @@ const updateInfo = (info: any) => {
name
=
info
.
name
;
name
=
info
.
name
;
digital_man_id
=
info
.
digital_man_id
;
digital_man_id
=
info
.
digital_man_id
;
}
else
if
(
info
.
content
)
{
}
else
if
(
info
.
content
)
{
// 草稿
name
=
info
.
content
.
name
?
info
.
content
.
name
:
''
;
name
=
info
.
content
.
name
?
info
.
content
.
name
:
''
;
digital_man_id
=
info
.
content
.
digital_man_id
?
info
.
content
.
digital_man_id
:
''
;
digital_man_id
=
info
.
content
.
digital_man_id
?
info
.
content
.
digital_man_id
:
''
;
}
}
if
(
name
)
{
// 更新标题
// 更新标题
store
.
commit
(
'live/setName'
,
name
);
store
.
commit
(
'live/setName'
,
name
);
}
if
(
info
.
users_id
!==
0
)
{
if
(
info
.
users_id
!==
0
)
{
// 我的数字人
// 我的数字人
currentOption
.
value
=
'2'
;
currentOption
.
value
=
'2'
;
...
@@ -122,11 +123,13 @@ watch(
...
@@ -122,11 +123,13 @@ watch(
);
);
const
onSelectChange
=
(
value
:
string
)
=>
{
const
onSelectChange
=
(
value
:
string
)
=>
{
commitInfo
({
if
(
value
)
{
[
createLiveKeys
.
id_type
]:
value
,
commitInfo
({
});
[
createLiveKeys
.
id_type
]:
value
,
currentOption
.
value
=
value
;
});
checkPerson
();
currentOption
.
value
=
value
;
checkPerson
();
}
};
};
// 从python获取视频路径
// 从python获取视频路径
...
@@ -158,6 +161,26 @@ const digitalList = reactive({
...
@@ -158,6 +161,26 @@ const digitalList = reactive({
my
:
[],
my
:
[],
});
});
const
findIdinList
=
()
=>
{
if
(
route
.
query
.
id
)
{
// 找到对应的id
let
index1
=
digitalList
.
my
.
findIndex
((
item
:
any
)
=>
item
.
id
==
route
.
query
.
id
);
if
(
index1
!==
-
1
)
{
currentCard
.
value
=
digitalList
.
my
[
index1
].
id
;
}
let
index2
=
digitalList
.
admin
.
findIndex
((
item
:
any
)
=>
item
.
id
==
route
.
query
.
id
);
if
(
index2
!==
-
1
)
{
currentCard
.
value
=
digitalList
.
admin
[
index2
].
id
;
}
if
(
currentCard
.
value
)
{
let
params
=
{
[
createLiveKeys
.
id
]:
currentCard
.
value
,
};
commitInfo
(
params
);
}
}
};
const
changeCurrentList
=
()
=>
{
const
changeCurrentList
=
()
=>
{
if
(
currentCard
.
value
)
{
if
(
currentCard
.
value
)
{
// 找到对应的库
// 找到对应的库
...
@@ -189,6 +212,7 @@ const getList = async () => {
...
@@ -189,6 +212,7 @@ const getList = async () => {
digitalList
.
admin
=
res
.
adminList
;
digitalList
.
admin
=
res
.
adminList
;
// digitalList.admin = digitalList.admin.concat(res.adminList);
// digitalList.admin = digitalList.admin.concat(res.adminList);
digitalList
.
my
=
res
.
myList
;
digitalList
.
my
=
res
.
myList
;
findIdinList
();
changeCurrentList
();
changeCurrentList
();
checkPerson
();
checkPerson
();
loading
.
value
=
false
;
loading
.
value
=
false
;
...
@@ -196,15 +220,18 @@ const getList = async () => {
...
@@ -196,15 +220,18 @@ const getList = async () => {
loading
.
value
=
false
;
loading
.
value
=
false
;
console
.
log
(
e
);
console
.
log
(
e
);
}
}
// 提交默认参数
if
(
currentOption
.
value
)
{
let
params
=
{
[
createLiveKeys
.
id_type
]:
currentOption
.
value
,
};
commitInfo
(
params
);
}
};
};
on
Moun
ted
(()
=>
{
on
Activa
ted
(()
=>
{
// 获取数字人列表
// 获取数字人列表
getList
();
getList
();
// 提交默认参数
commitInfo
({
[
createLiveKeys
.
id_type
]:
currentOption
.
value
,
});
});
});
watch
(
watch
(
...
@@ -250,6 +277,12 @@ watch(
...
@@ -250,6 +277,12 @@ watch(
height
:
150px
;
height
:
150px
;
}
}
}
}
.create-digital-person-grid
{
display
:
grid
;
justify-content
:
space-between
;
grid-template-columns
:
repeat
(
auto-fill
,
150px
);
grid-gap
:
12px
;
}
.card-active
{
.card-active
{
border
:
2px
solid
#00dfb0
;
border
:
2px
solid
#00dfb0
;
}
}
...
...
src/pages/createLive/components/scripts.vue
View file @
c7731fcb
...
@@ -2,7 +2,9 @@
...
@@ -2,7 +2,9 @@
<div
class=
"create-live-script-setting"
>
<div
class=
"create-live-script-setting"
>
<div
class=
"all-select"
>
<div
class=
"all-select"
>
<Select
:options=
"scriptTypeList"
v-model=
"currentOption"
@
change=
"scriptTypeChange"
></Select>
<Select
:options=
"scriptTypeList"
v-model=
"currentOption"
@
change=
"scriptTypeChange"
></Select>
<CheckBox
v-model=
"isDisorganize"
@
change=
"checkboxChange"
>
GPT洗稿
</CheckBox>
<template
v-if=
"currentOption == scriptTypeText"
>
<CheckBox
v-model=
"isDisorganize"
@
change=
"checkboxChange"
>
GPT洗稿
</CheckBox>
</
template
>
<
template
v-if=
"isDev()"
>
<
template
v-if=
"isDev()"
>
<Button
<Button
@
click=
"
@
click=
"
...
@@ -152,6 +154,7 @@
...
@@ -152,6 +154,7 @@
v-model=
"item.data"
v-model=
"item.data"
:config=
"ossConfig"
:config=
"ossConfig"
label=
"选择音频"
label=
"选择音频"
accept=
"wav"
@
change=
"uploadEdit"
@
change=
"uploadEdit"
></MultipleUpload>
></MultipleUpload>
</div>
</div>
...
@@ -191,7 +194,7 @@
...
@@ -191,7 +194,7 @@
</template>
</template>
<
script
lang=
"tsx"
setup
>
<
script
lang=
"tsx"
setup
>
import
{
computed
,
onMounted
,
reactive
,
ref
,
watch
}
from
'vue'
;
import
{
computed
,
on
Activated
,
on
Mounted
,
reactive
,
ref
,
watch
}
from
'vue'
;
import
Button
from
'@/components/Button.vue'
;
import
Button
from
'@/components/Button.vue'
;
import
MultipleUpload
from
'@/components/MultipleUpload'
;
import
MultipleUpload
from
'@/components/MultipleUpload'
;
import
CheckBox
from
'@/components/CheckBox.vue'
;
import
CheckBox
from
'@/components/CheckBox.vue'
;
...
@@ -423,42 +426,60 @@ const updateTonesInfo = (tone_id: any, phonetic_timbres_id: any) => {
...
@@ -423,42 +426,60 @@ const updateTonesInfo = (tone_id: any, phonetic_timbres_id: any) => {
};
};
const
updateInfo
=
(
info
:
any
)
=>
{
const
updateInfo
=
(
info
:
any
)
=>
{
let
type
=
''
;
if
(
Object
.
keys
(
info
).
length
)
{
let
type_content
=
''
;
let
type
=
''
;
let
phonetic_timbres_id
=
''
;
let
type_content
=
''
;
let
tone_id
=
''
;
let
phonetic_timbres_id
=
''
;
if
(
route
.
query
.
type
==
'edit'
)
{
let
tone_id
=
''
;
type
=
info
.
type
;
if
(
route
.
query
.
type
==
'edit'
)
{
type_content
=
info
.
type_content
;
type
=
info
.
type
;
phonetic_timbres_id
=
info
.
phonetic_timbres_id
;
type_content
=
info
.
type_content
;
tone_id
=
info
.
tone_id
;
phonetic_timbres_id
=
info
.
phonetic_timbres_id
;
}
else
if
(
info
.
content
)
{
tone_id
=
info
.
tone_id
;
type
=
info
.
content
.
type
;
}
else
if
(
info
.
content
)
{
type_content
=
info
.
content
.
type_content
;
// 草稿
phonetic_timbres_id
=
info
.
content
.
phonetic_timbres_id
?
info
.
content
.
phonetic_timbres_id
:
''
;
type
=
info
.
content
.
type
;
tone_id
=
info
.
content
.
tone_id
?
info
.
content
.
tone_id
:
''
;
type_content
=
info
.
content
.
type_content
;
}
phonetic_timbres_id
=
info
.
content
.
phonetic_timbres_id
?
info
.
content
.
phonetic_timbres_id
:
''
;
// 脚本类型
tone_id
=
info
.
content
.
tone_id
?
info
.
content
.
tone_id
:
''
;
if
(
type
==
scriptTypeText
)
{
}
// 文本
// 脚本类型
currentOption
.
value
=
scriptTypeText
;
if
(
type
==
scriptTypeText
)
{
// 内容
// 文本
textareaValue
.
value
=
type_content
;
currentOption
.
value
=
scriptTypeText
;
}
else
{
if
(
type_content
)
{
// 音频
// 内容
currentOption
.
value
=
scriptTypePhonetics
;
// textareaValue.value = type_content;
mp3Url
.
value
=
type_content
;
textScriptList
.
value
=
type_content
;
}
// 洗稿
isDisorganize
.
value
=
info
.
is_disorganize
?
true
:
false
;
}
else
{
// 音频
currentOption
.
value
=
scriptTypePhonetics
;
// mp3Url.value = type_content;
if
(
type_content
)
{
audioScriptList
.
value
=
type_content
.
map
((
item
:
any
)
=>
{
return
{
data
:
item
,
};
});
}
else
{
audioScriptList
.
value
=
[];
}
if
(
phonetic_timbres_id
)
{
phoneticsValue
.
value
=
phonetic_timbres_id
;
}
}
tonesValue
.
value
=
tone_id
;
if
(
phonetic_timbres_id
)
{
if
(
phonetic_timbres_id
)
{
phonetics
Value
.
value
=
phonetic_timbres_id
;
soundColor
Value
.
value
=
phonetic_timbres_id
;
}
}
}
tonesValue
.
value
=
tone_id
;
if
(
phonetic_timbres_id
)
{
soundColorValue
.
value
=
phonetic_timbres_id
;
}
// 更新info
// 更新info
updateTonesInfo
(
tone_id
,
phonetic_timbres_id
);
updateTonesInfo
(
tone_id
,
phonetic_timbres_id
);
}
};
};
watch
(
watch
(
...
@@ -483,10 +504,32 @@ watch(
...
@@ -483,10 +504,32 @@ watch(
phoneticsInfo
.
value
=
{};
phoneticsInfo
.
value
=
{};
textareaValue
.
value
=
''
;
textareaValue
.
value
=
''
;
currentOption
.
value
=
scriptTypeText
;
currentOption
.
value
=
scriptTypeText
;
audioScriptList
.
value
=
[];
textScriptList
.
value
=
[];
scriptTypeChange
(
scriptTypeText
+
''
);
scriptTypeChange
(
scriptTypeText
+
''
);
},
},
);
);
watch
(
()
=>
soundColorValue
.
value
,
(
v
)
=>
{
if
(
!
v
)
{
soundColorItemChange
();
}
},
);
watch
(
()
=>
tonesValue
.
value
,
(
v
)
=>
{
if
(
v
)
{
disabled
.
value
=
false
;
}
else
{
disabled
.
value
=
true
;
}
},
);
const
openSoundColor
=
()
=>
{
const
openSoundColor
=
()
=>
{
if
(
tonesValue
.
value
)
{
if
(
tonesValue
.
value
)
{
// 允许打开
// 允许打开
...
@@ -526,15 +569,6 @@ const soundColorItemChange = (item: any = false) => {
...
@@ -526,15 +569,6 @@ const soundColorItemChange = (item: any = false) => {
}
}
};
};
watch
(
()
=>
soundColorValue
.
value
,
(
v
)
=>
{
if
(
!
v
)
{
soundColorItemChange
();
}
},
);
// 音频 音色提交
// 音频 音色提交
const
phoneticsItemChange
=
(
item
:
any
)
=>
{
const
phoneticsItemChange
=
(
item
:
any
)
=>
{
phoneticsInfo
.
value
=
item
;
phoneticsInfo
.
value
=
item
;
...
@@ -557,17 +591,6 @@ const scriptTypeChange = (id: string | number) => {
...
@@ -557,17 +591,6 @@ const scriptTypeChange = (id: string | number) => {
});
});
};
};
watch
(
()
=>
tonesValue
.
value
,
(
v
)
=>
{
if
(
v
)
{
disabled
.
value
=
false
;
}
else
{
disabled
.
value
=
true
;
}
},
);
const
getList
=
async
()
=>
{
const
getList
=
async
()
=>
{
let
res
=
await
getTonesList
();
let
res
=
await
getTonesList
();
lists
.
tones
=
res
.
tones
;
lists
.
tones
=
res
.
tones
;
...
@@ -591,13 +614,18 @@ onMounted(async () => {
...
@@ -591,13 +614,18 @@ onMounted(async () => {
// 提交默认脚本类型
// 提交默认脚本类型
commitInfo
({
commitInfo
({
[
createLiveKeys
.
scriptType
]:
currentOption
.
value
,
[
createLiveKeys
.
scriptType
]:
currentOption
.
value
,
// 文本脚本的uuid
[
createLiveKeys
.
scriptUuid
]:
getUuid
(),
});
});
// 获取音色音调列表
// 获取音色音调列表
getList
();
getList
();
});
});
onActivated
(()
=>
{
commitInfo
({
// 文本脚本的uuid
[
createLiveKeys
.
scriptUuid
]:
getUuid
(),
});
});
</
script
>
</
script
>
<
style
lang=
"less"
>
<
style
lang=
"less"
>
...
...
src/pages/createLive/index.vue
View file @
c7731fcb
This diff is collapsed.
Click to expand it.
src/pages/home/components/digitalPeopleDiaog.vue
View file @
c7731fcb
...
@@ -98,6 +98,7 @@ const confirm = () => {
...
@@ -98,6 +98,7 @@ const confirm = () => {
query
:
{
query
:
{
id
:
currentCard
.
value
,
id
:
currentCard
.
value
,
title
:
''
,
title
:
''
,
type
:
'new'
,
},
},
});
});
};
};
...
...
src/pages/home/index.vue
View file @
c7731fcb
...
@@ -158,6 +158,7 @@ const dialogConfirm = () => {
...
@@ -158,6 +158,7 @@ const dialogConfirm = () => {
query
:
{
query
:
{
id
:
currentCard
.
value
,
id
:
currentCard
.
value
,
title
:
liveName
.
value
,
title
:
liveName
.
value
,
type
:
'new'
,
},
},
});
});
};
};
...
...
src/service/Common.ts
View file @
c7731fcb
...
@@ -105,7 +105,7 @@ export const getLiveInteraction = async (select: boolean = false) => {
...
@@ -105,7 +105,7 @@ export const getLiveInteraction = async (select: boolean = false) => {
};
};
// 更新直播内容
// 更新直播内容
export
const
onUpdateLiveTask
=
async
(
id
:
number
|
string
,
data
:
any
)
=>
{
export
const
onUpdateLiveTask
=
async
(
id
:
any
,
data
:
any
)
=>
{
try
{
try
{
let
res
:
any
=
await
updateLiveTask
(
id
,
data
);
let
res
:
any
=
await
updateLiveTask
(
id
,
data
);
if
(
res
.
code
==
0
)
{
if
(
res
.
code
==
0
)
{
...
...
src/service/Live.ts
View file @
c7731fcb
...
@@ -11,3 +11,12 @@ export const LIVE_AUDIT_STATUS = {
...
@@ -11,3 +11,12 @@ export const LIVE_AUDIT_STATUS = {
LIVE_AUDIT_STATUS_FINISH
:
3
,
// 己完成
LIVE_AUDIT_STATUS_FINISH
:
3
,
// 己完成
LIVE_AUDIT_STATUS_ERROR
:
4
,
// 审核失败
LIVE_AUDIT_STATUS_ERROR
:
4
,
// 审核失败
};
};
/**
* 洗稿状态(直播页面下一个视频是否准备完毕)
*/
export
const
CONFUSE_STATUS
=
{
CONFUSE_STATUS_WAIT
:
1
,
// 未提交
CONFUSE_STATUS_PROGRESS
:
2
,
// 进行中
CONFUSE_STATUS_SUCCESS
:
3
,
// 已完成
};
src/store/modules/live.ts
View file @
c7731fcb
...
@@ -33,13 +33,18 @@ type StateType = typeof state;
...
@@ -33,13 +33,18 @@ type StateType = typeof state;
const
mutations
=
{
const
mutations
=
{
setName
(
state
:
StateType
,
info
:
string
)
{
setName
(
state
:
StateType
,
info
:
string
)
{
state
.
name
=
info
;
if
(
info
)
{
state
.
name
=
info
;
}
else
{
state
.
name
=
''
;
}
},
},
// 创建直播时的参数
// 创建直播时的参数
setLiveInfo
(
state
:
StateType
,
info
:
any
)
{
setLiveInfo
(
state
:
StateType
,
info
:
any
)
{
Object
.
keys
(
info
).
forEach
((
item
:
any
)
=>
{
Object
.
keys
(
info
).
forEach
((
item
:
any
)
=>
{
state
.
createLive
[
item
]
=
info
[
item
];
state
.
createLive
[
item
]
=
info
[
item
];
});
});
console
.
log
(
state
.
createLive
);
},
},
initLiveInfo
(
state
:
StateType
)
{
initLiveInfo
(
state
:
StateType
)
{
state
.
createLive
=
initParams
();
state
.
createLive
=
initParams
();
...
...
src/store/modules/navbar.ts
View file @
c7731fcb
import
routerConfig
from
'@/router/tool'
;
import
routerConfig
from
'@/router/tool'
;
import
{
createLiveRouteKey
}
from
'@/constants/token'
;
const
imgs
=
{
const
imgs
=
{
home
:
new
URL
(
'../../assets/svg/home/home.svg'
,
import
.
meta
.
url
).
href
,
home
:
new
URL
(
'../../assets/svg/home/home.svg'
,
import
.
meta
.
url
).
href
,
...
@@ -43,6 +44,10 @@ const mutations = {
...
@@ -43,6 +44,10 @@ const mutations = {
}
}
state
.
navbarList
.
push
(
info
);
state
.
navbarList
.
push
(
info
);
}
}
if
(
info
.
path
==
routerConfig
.
createLive
.
path
)
{
// 记录创建直播的参数
window
.
localStorage
.
setItem
(
createLiveRouteKey
,
JSON
.
stringify
(
info
.
query
));
}
},
},
};
};
...
...
src/utils/api/userApi.ts
View file @
c7731fcb
...
@@ -361,9 +361,9 @@ export const liveContentRegenerateCallback = (data: any) => {
...
@@ -361,9 +361,9 @@ export const liveContentRegenerateCallback = (data: any) => {
};
};
// 重新生成直播
// 重新生成直播
export
const
liveTaskRegenerate
=
()
=>
{
export
const
liveTaskRegenerate
=
(
id
:
any
,
data
:
any
)
=>
{
const
header
=
getHeader
();
const
header
=
getHeader
();
return
request
.
post
(
`/api/live/task/
{id}/regenerate`
,
''
,
{
return
request
.
post
(
`/api/live/task/
${
id
}
/regenerate`
,
data
,
{
headers
:
{
headers
:
{
...
header
,
...
header
,
},
},
...
...
src/utils/audio.ts
View file @
c7731fcb
...
@@ -68,7 +68,6 @@ export async function audioMerge(filePaths) {
...
@@ -68,7 +68,6 @@ export async function audioMerge(filePaths) {
}
}
offset
+=
Math
.
round
(
buffer
.
duration
*
sampleRate
);
offset
+=
Math
.
round
(
buffer
.
duration
*
sampleRate
);
});
});
// 导出合并后的音频数据为 WAV 文件
// 导出合并后的音频数据为 WAV 文件
const
mergedData
=
exportBufferAsWav
(
mergedBuffer
);
const
mergedData
=
exportBufferAsWav
(
mergedBuffer
);
const
blob
=
new
Blob
([
mergedData
],
{
type
:
'audio/wav'
});
const
blob
=
new
Blob
([
mergedData
],
{
type
:
'audio/wav'
});
...
...
src/utils/error.ts
0 → 100644
View file @
c7731fcb
import
{
show_message
}
from
'./tool'
;
class
CustomException
extends
Error
{
constructor
(
message
)
{
super
(
message
);
this
.
name
=
'CustomException'
;
show_message
(
message
,
'error'
);
}
}
export
default
CustomException
;
src/utils/tool.ts
View file @
c7731fcb
...
@@ -263,3 +263,22 @@ export const downloadBlobFile = (blob: Blob, name: string = 'test') => {
...
@@ -263,3 +263,22 @@ export const downloadBlobFile = (blob: Blob, name: string = 'test') => {
// 清理 Blob URL
// 清理 Blob URL
URL
.
revokeObjectURL
(
url
);
URL
.
revokeObjectURL
(
url
);
};
};
// 二维数组转一维数组
export
const
dimensionalConvert
=
(
list
:
any
[])
=>
{
let
convertList
=
[];
for
(
let
i
=
0
;
i
<
list
.
length
;
i
++
)
{
let
items
=
list
[
i
];
if
(
DataType
(
items
,
'array'
))
{
// 是数组
for
(
let
j
=
0
;
j
<
items
.
length
;
j
++
)
{
let
item
=
items
[
j
];
convertList
.
push
(
item
);
}
}
else
{
// 子元素不是数组,直接返回
return
list
;
}
}
return
convertList
;
};
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