Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Y
yaoai-video
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
姚珂
yaoai-video
Commits
f7b805c2
Commit
f7b805c2
authored
May 26, 2026
by
黄同智
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
布局页面:团队管理、用量统计、水印设置
parent
4ca9a103
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
301 additions
and
25 deletions
+301
-25
package-lock.json
doc/h5/package-lock.json
+26
-0
package.json
doc/h5/package.json
+1
-0
Aside.vue
doc/h5/src/components/Aside.vue
+5
-5
index.ts
doc/h5/src/router/index.ts
+4
-4
project.vue
doc/h5/src/views/enterprise/project.vue
+0
-6
team.vue
doc/h5/src/views/enterprise/team.vue
+143
-0
usage.vue
doc/h5/src/views/enterprise/usage.vue
+0
-0
watermark.vue
doc/h5/src/views/enterprise/watermark.vue
+49
-4
asset.vue
doc/h5/src/views/project/asset.vue
+70
-4
StepTwo.vue
doc/h5/src/views/project/components/StepTwo.vue
+3
-2
No files found.
doc/h5/package-lock.json
View file @
f7b805c2
...
...
@@ -9,6 +9,7 @@
"version"
:
"0.0.1"
,
"dependencies"
:
{
"axios"
:
"^1.5.0"
,
"echarts"
:
"^6.1.0"
,
"element-plus"
:
"^2.14.0"
,
"nprogress"
:
"^0.2.0"
,
"vue"
:
"^3.4.0"
,
...
...
@@ -1240,6 +1241,16 @@
"node"
:
">= 0.4"
}
},
"node_modules/echarts"
:
{
"version"
:
"6.1.0"
,
"resolved"
:
"https://registry.npmmirror.com/echarts/-/echarts-6.1.0.tgz"
,
"integrity"
:
"sha512-q0yaFPggC9FUdsWH4blavRWFmxdrIodbkoKNAjJudAI6CA9gNPxHtV2RcZNEepZVlk4yvBYkOkbk6HIVpIyHZA=="
,
"license"
:
"Apache-2.0"
,
"dependencies"
:
{
"tslib"
:
"2.3.0"
,
"zrender"
:
"6.1.0"
}
},
"node_modules/element-plus"
:
{
"version"
:
"2.14.0"
,
"resolved"
:
"https://registry.npmmirror.com/element-plus/-/element-plus-2.14.0.tgz"
,
...
...
@@ -1849,6 +1860,12 @@
"node"
:
">=0.10.0"
}
},
"node_modules/tslib"
:
{
"version"
:
"2.3.0"
,
"resolved"
:
"https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz"
,
"integrity"
:
"sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
,
"license"
:
"0BSD"
},
"node_modules/typescript"
:
{
"version"
:
"5.9.3"
,
"resolved"
:
"https://registry.npmmirror.com/typescript/-/typescript-5.9.3.tgz"
,
...
...
@@ -2008,6 +2025,15 @@
"peerDependencies"
:
{
"vue"
:
"^3.0.1"
}
},
"node_modules/zrender"
:
{
"version"
:
"6.1.0"
,
"resolved"
:
"https://registry.npmmirror.com/zrender/-/zrender-6.1.0.tgz"
,
"integrity"
:
"sha512-oEGMDB6pOP2S6OwRR4PdVv610zrjnA3Bh+JnSG12fYJlBKjtNAoEb5fSUoCOOINlH96I2fU38/A2UpRKs67xYQ=="
,
"license"
:
"BSD-3-Clause"
,
"dependencies"
:
{
"tslib"
:
"2.3.0"
}
}
}
}
doc/h5/package.json
View file @
f7b805c2
...
...
@@ -11,6 +11,7 @@
},
"dependencies"
:
{
"axios"
:
"^1.5.0"
,
"echarts"
:
"^6.1.0"
,
"element-plus"
:
"^2.14.0"
,
"nprogress"
:
"^0.2.0"
,
"vue"
:
"^3.4.0"
,
...
...
doc/h5/src/components/Aside.vue
View file @
f7b805c2
<
template
>
<nav
v-if=
"isShow"
class=
"navbar w-200 px-8"
>
<nav
v-if=
"isShow"
class=
"navbar w-200 px-8
min-w-200
"
>
<div
class=
"flex-center pt-28"
>
<img
src=
"@/static/imgs/logo.png"
class=
"w-100 h-22"
alt=
"Logo"
>
</div>
...
...
@@ -45,7 +45,7 @@
<el-icon>
<Files
/>
</el-icon>
<span>
项目
</span>
<span>
团队管理
</span>
</div>
<div
class=
"flex-align-center gap-8 mt-12 cursor-pointer pl-16 h-36 rounded-4"
:class=
"indexvalue == 4 ? 'active' : ''"
@
click=
"switchTab(4)"
>
...
...
@@ -66,7 +66,7 @@
</
template
>
<
script
setup
lang=
"ts"
>
import
{
computed
,
ref
,
watch
}
from
'vue'
;
import
{
ref
,
watch
}
from
'vue'
;
import
{
useAuth
}
from
'../stores/useAuth'
;
import
{
VideoCameraFilled
,
Files
,
PieChart
,
Help
}
from
'@element-plus/icons-vue'
import
{
useRouter
,
useRoute
}
from
'vue-router'
;
...
...
@@ -78,7 +78,7 @@ const routeIndexMap: Record<string, number> = {
'/'
:
0
,
'/projectlist'
:
1
,
'/asset'
:
2
,
'/enterprise/
project
'
:
3
,
'/enterprise/
team
'
:
3
,
'/enterprise/usage'
:
4
,
'/enterprise/watermark'
:
5
,
};
...
...
@@ -108,7 +108,7 @@ const tabRouter:any = {
0
:
'/'
,
1
:
'/projectlist'
,
2
:
'/asset'
,
3
:
'/enterprise/
project
'
,
3
:
'/enterprise/
team
'
,
4
:
'/enterprise/usage'
,
5
:
'/enterprise/watermark'
,
}
...
...
doc/h5/src/router/index.ts
View file @
f7b805c2
...
...
@@ -9,7 +9,7 @@ const Login = () => import('@/views/Login.vue');
const
NotFound
=
()
=>
import
(
'@/views/NotFound.vue'
);
const
Projectlist
=
()
=>
import
(
'@/views/project/projectlist.vue'
);
const
Asset
=
()
=>
import
(
'@/views/project/asset.vue'
);
const
Enterprise
Project
=
()
=>
import
(
'@/views/enterprise/project
.vue'
);
const
Enterprise
Team
=
()
=>
import
(
'@/views/enterprise/team
.vue'
);
const
EnterpriseUsage
=
()
=>
import
(
'@/views/enterprise/usage.vue'
);
const
EnterpriseWatermark
=
()
=>
import
(
'@/views/enterprise/watermark.vue'
);
const
Drama
=
()
=>
import
(
'@/views/project/drama.vue'
);
...
...
@@ -44,9 +44,9 @@ const routes = [
meta
:
{
authRequired
:
true
}
},
{
path
:
'/enterprise/
project
'
,
name
:
'Enterprise
Project
'
,
component
:
Enterprise
Project
,
path
:
'/enterprise/
team
'
,
name
:
'Enterprise
Team
'
,
component
:
Enterprise
Team
,
meta
:
{
authRequired
:
true
}
},
{
...
...
doc/h5/src/views/enterprise/project.vue
deleted
100644 → 0
View file @
4ca9a103
<
template
>
<div></div>
</
template
>
<
script
setup
lang=
"ts"
></
script
>
<
style
lang=
"scss"
scoped
></
style
>
\ No newline at end of file
doc/h5/src/views/enterprise/team.vue
0 → 100644
View file @
f7b805c2
<
template
>
<section
class=
"px-64 flex flex-col gap-20 h-b100"
>
<div>
<div
class=
"flex gap-30 fs-18 pt-30 pb-10 bg-F8F9FA"
>
<a
v-for=
"(item, index) in tabs"
:key=
"index"
class=
"cursor-pointer aa"
:class=
"indexTab === index ? 'active' : ''"
@
click=
"changeTab(index)"
>
{{
item
}}
</a>
</div>
<div
v-if=
"isShowtip"
class=
"hint flex-between-center px-20 py-10 my-20"
>
<div
class=
"flex-align-center"
>
<el-icon
color=
"#5252ff"
size=
"16"
>
<WarningFilled
/>
</el-icon>
<span
class=
"ml-4"
>
需要授权账号登录权限且将其加入到团队中,子账号才可以登陆到短剧平台。
</span>
</div>
<div
class=
"flex gap-20"
>
<div>
已授权
<span
class=
"fw-bold"
style=
"color: darkgreen;"
>
0
</span></div>
<span
style=
"color: #ccc;"
>
|
</span>
<div>
未授权
<span>
2
</span></div>
</div>
</div>
<div
class=
"flex-center gap-10 mt-10"
>
<el-input
v-model=
"searchValue"
placeholder=
"搜索"
:prefix-icon=
"Search"
/>
<el-select
v-model=
"selectValue"
placeholder=
"Select"
style=
"width: 240px"
>
<el-option
v-for=
"item in options"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
/>
</el-select>
<el-button
type=
"primary"
:dark=
"true"
:icon=
"Plus"
>
<span
class=
"ml-4"
>
新建子账号
</span>
</el-button>
</div>
</div>
<el-table
:data=
"tableData"
>
<el-table-column
type=
"selection"
:selectable=
"selectable"
width=
"55"
/>
<el-table-column
prop=
"name"
label=
"用户名"
width=
"180"
/>
<el-table-column
prop=
"name"
label=
"备注"
width=
"180"
/>
<el-table-column
prop=
"name"
label=
"隶属团队"
/>
<el-table-column
prop=
"name"
label=
"授权登录状态"
/>
<el-table-column
prop=
"name"
label=
"操作"
width=
"180"
>
<template
#
default=
"scope"
>
<el-button
link
type=
"primary"
size=
"small"
>
编辑
</el-button>
<el-button
link
type=
"danger"
size=
"small"
>
删除
</el-button>
</
template
>
</el-table-column>
</el-table>
</section>
</template>
<
script
setup
lang=
"ts"
>
import
{
ref
}
from
'vue'
import
{
Search
,
Plus
,
WarningFilled
}
from
'@element-plus/icons-vue'
const
searchValue
=
ref
(
''
);
const
isShowtip
=
ref
(
true
)
const
selectValue
=
ref
(
1
);
const
options
=
[
{
value
:
1
,
label
:
'所有授权'
,
},
{
value
:
2
,
label
:
'已授权'
,
},
{
value
:
3
,
label
:
'未授权'
,
},
]
const
tabs
=
ref
([
'子账号管理'
,
'团队管理'
])
const
indexTab
=
ref
(
0
)
const
changeTab
=
ref
((
index
:
number
)
=>
{
indexTab
.
value
=
index
})
// 表格
const
tableData
=
[
{
date
:
'2016-05-03'
,
name
:
'Tom'
,
address
:
'No. 189, Grove St, Los Angeles'
,
},
{
date
:
'2016-05-02'
,
name
:
'Tom'
,
address
:
'No. 189, Grove St, Los Angeles'
,
},
{
date
:
'2016-05-04'
,
name
:
'Tom'
,
address
:
'No. 189, Grove St, Los Angeles'
,
},
{
date
:
'2016-05-01'
,
name
:
'Tom'
,
address
:
'No. 189, Grove St, Los Angeles'
,
},
]
const
selectable
=
(
row
:
any
,
index
:
number
)
=>
{
return
row
.
name
!==
'Tom'
}
</
script
>
<
style
lang=
"scss"
>
:root
{
--el-color-primary
:
#5272ff
;
/* 修改主色 */
}
</
style
>
<
style
lang=
"scss"
scoped
>
.hint
{
border
:
1px
solid
#e5e7eb
;
background-color
:
#f5f7ff
;
border-radius
:
8px
;
}
.bg-F8F9FA
{
background-color
:
#f8f9fa
;
.aa
{
text-decoration
:
none
;
color
:
#888
;
outline
:
none
;
&
.active
{
color
:
#333
;
}
}
}
:deep
(
.el-table
)
{
border
:
1px
solid
#eee
;
border-radius
:
8px
;
border-bottom
:
none
;
th
{
padding-top
:
10px
;
padding-bottom
:
10px
;
background-color
:
rgba
(
28
,
106
,
224
,
0
.027
);
}
}
</
style
>
\ No newline at end of file
doc/h5/src/views/enterprise/usage.vue
View file @
f7b805c2
This diff is collapsed.
Click to expand it.
doc/h5/src/views/enterprise/watermark.vue
View file @
f7b805c2
<
template
>
<div></div>
<section
class=
"px-64 h-b100 overflow-y-auto pb-20 min-w-800"
>
<section
class=
"mt-36"
>
<div
class=
"fs-18"
>
去除水印管理
</div>
<div
v-if=
"isShowtip"
class=
"hint flex-between-center px-16 py-16 mt-18"
>
<div
class=
"flex gap-10"
>
<el-icon
color=
"#5252ff"
size=
"18"
class=
"mt-2"
>
<WarningFilled
/>
</el-icon>
<span
class=
"ml-4 line-h22"
style=
"font-size: 13px;"
>
根据法律法规要求,火山剧创平台(“平台”)提供AI生成合成服务,可能导致公众混淆或者误认的,平台应当在AI生成合成内容上添加显式标识(即“AI生成”明水印),向公众进行提示。经过您的申请,平台可以向您提供未添加显式标识的AI生成合成内容。如您后续使用网络信息内容传播服务发布AI生成合成内容,请注意您还需主动声明并使用传播平台提供的标识功能进行标识。您理解并承诺,如您未按照法律法规要求在AI生成合成内容上添加显式标识,导致公众混淆或者误认,因此所发生的后果和责任均由您自行承担。
</span>
</div>
</div>
<div
class=
"card1 rounded-16 p-16 mt-16 bg-fff"
>
<div
class=
""
>
子账号余量
</div>
<div
class=
"flex-between-center"
>
<div
class=
"text-666 fs-12 mt-10"
>
<div>
打开去除水印开关后,您使用火山剧创平台前述账号所创作、生成的AI生成合成内容将不再添加“Al生成”明水印。
</div>
<div
class=
"mt-2"
>
打开开关,代表您已确认充分了解上述情况并同意
</div>
</div>
<el-switch
v-model=
"switchVal"
class=
"ml-2"
@
change=
"change"
style=
"--el-switch-on-color: #5272ff; --el-switch-off-color: #ddd"
/>
</div>
</div>
</section>
</section>
</
template
>
<
script
setup
lang=
"ts"
></
script
>
<
style
lang=
"scss"
scoped
></
style
>
\ No newline at end of file
<
script
setup
lang=
"ts"
>
import
{
ref
}
from
'vue'
import
{
WarningFilled
}
from
'@element-plus/icons-vue'
import
{
ElMessage
}
from
'element-plus'
const
isShowtip
=
ref
(
true
)
const
switchVal
=
ref
(
false
)
const
change
=
()
=>
{
ElMessage
.
success
(
'设置成功'
)
}
</
script
>
<
style
lang=
"scss"
scoped
>
.hint
{
background-color
:
#edf1ff
;
border-radius
:
12px
;
}
.card1
{
border
:
1px
solid
#eaebee
;
}
</
style
>
\ No newline at end of file
doc/h5/src/views/project/asset.vue
View file @
f7b805c2
<
template
>
<div></div>
<section
class=
"px-64 flex flex-col gap-20 h-b100"
>
<div>
<div
class=
"h-36 flex gap-8 rounded-8 p-2 cursor-pointer mt-36"
style=
"width: 260px;background-color: #f1f2f9;"
>
<div
class=
"flex-1 flex-center"
:class=
"typeVal === 1 ? 'active1' : ''"
@
click=
"typeVal = 1"
>
个人资产
</div>
<div
class=
"flex-1 flex-center"
:class=
"typeVal === 2 ? 'active1' : ''"
@
click=
"typeVal = 2"
>
团队资产
</div>
<div
class=
"flex-1 flex-center"
:class=
"typeVal === 3 ? 'active1' : ''"
@
click=
"typeVal = 3"
>
写实人像库
</div>
</div>
<div
class=
"flex gap-30 fs-18 pt-30 pb-10 bg-F8F9FA"
>
<a
v-for=
"(item, index) in tabs"
:key=
"index"
class=
"cursor-pointer aa"
:class=
"indexTab === index ? 'active' : ''"
:href=
"'#' + item"
@
click=
"changeTab(index)"
>
{{
item
}}
</a>
</div>
<div
class=
"flex-center gap-10 mt-10"
>
<el-input
v-model=
"searchValue"
placeholder=
"搜索短剧项目名称"
:prefix-icon=
"Search"
/>
<el-button
type=
"primary"
color=
"#785BE5"
:dark=
"true"
:icon=
"Plus"
>
<span
class=
"ml-4"
>
上传角色
</span>
</el-button>
</div>
</div>
<section
class=
"flex-1"
>
<div
class=
"min-h-400"
>
<div
class=
"h-400 flex-center flex-col"
>
<svg
t=
"1779342435411"
class=
"icon"
viewBox=
"0 0 1024 1024"
version=
"1.1"
xmlns=
"http://www.w3.org/2000/svg"
p-id=
"25486"
width=
"64"
height=
"64"
>
<path
d=
"M625.777778 0l341.333333 307.2v648.931556c0 37.432889-33.792 67.868444-75.320889 67.868444H132.209778C90.680889 1024 56.888889 993.564444 56.888889 956.131556V67.868444C56.888889 30.435556 90.680889 0 132.209778 0H625.777778zM476.728889 747.52h-11.491556a52.337778 52.337778 0 0 0-51.768889 52.906667c0 29.240889 23.153778 52.906667 51.768889 52.906666h11.548445a52.337778 52.337778 0 0 0 51.768889-52.906666 52.337778 52.337778 0 0 0-51.768889-52.906667zM459.377778 341.333333c-30.151111 0-57.287111 4.892444-80.497778 14.620445a147.342222 147.342222 0 0 0-55.694222 39.879111c-45.795556 53.134222-38.684444 122.026667-37.717334 129.706667a47.616 47.616 0 0 0 53.020445 41.927111 48.241778 48.241778 0 0 0 41.073778-54.215111c0-0.284444-2.844444-32.881778 14.791111-53.361778 12.401778-14.392889 34.304-21.617778 65.024-21.617778 34.702222 0 57.059556 8.817778 66.503111 26.225778a44.600889 44.600889 0 0 1-3.982222 47.616l-93.184 125.383111a49.152 49.152 0 0 0 9.102222 67.868444 46.535111 46.535111 0 0 0 66.446222-9.272889l93.184-125.383111a143.246222 143.246222 0 0 0 11.377778-153.144889C590.051556 382.805333 548.807111 341.333333 459.377778 341.333333z"
fill=
"#e6e6e6"
p-id=
"25487"
></path>
<path
d=
"M941.852444 276.48L628.280889 0v217.941333c0 32.711111 29.354667 58.481778 62.236444 58.481778l251.335111 0.056889z"
fill=
"#e6e6e6"
fill-opacity=
".5"
p-id=
"25488"
></path>
</svg>
<div
class=
"text-888 mt-10"
>
暂无数据
</div>
</div>
</div>
</section>
</section>
</
template
>
<
script
setup
lang=
"ts"
></
script
>
<
style
lang=
"scss"
scoped
></
style
>
\ No newline at end of file
<
script
setup
lang=
"ts"
>
import
{
ref
}
from
'vue'
import
{
Search
,
Plus
}
from
'@element-plus/icons-vue'
const
typeVal
=
ref
(
1
)
const
searchValue
=
ref
(
''
);
const
tabs
=
ref
([
'角色'
,
'场景'
,
'道具'
])
const
indexTab
=
ref
(
0
)
const
changeTab
=
ref
((
index
:
number
)
=>
{
indexTab
.
value
=
index
})
</
script
>
<
style
lang=
"scss"
scoped
>
.active1
{
background
:
#fff
;
border-radius
:
8px
;
box-shadow
:
0
0
3px
#ddd
;
}
.bg-F8F9FA
{
background-color
:
#f8f9fa
;
.aa
{
text-decoration
:
none
;
color
:
#888
;
outline
:
none
;
&
.active
{
color
:
#333
;
}
}
}
</
style
>
\ No newline at end of file
doc/h5/src/views/project/components/StepTwo.vue
View file @
f7b805c2
...
...
@@ -299,7 +299,7 @@
</section>
</section>
<div
class=
"fixed bottom-30 btnfooter w-140 h-54 flex-center rounded-200 text-fff cursor-pointer"
@
click=
"
$
emit('next', 2)"
>
@
click=
"emit('next', 2)"
>
<img
src=
"@/static/imgs/icon1.png"
alt=
""
>
<span
class=
"ml-10"
>
进入下一步
</span>
</div>
...
...
@@ -312,13 +312,14 @@
</template>
<
script
setup
lang=
"ts"
>
import
{
ref
}
from
'vue'
;
import
{
CloseBold
,
Plus
,
DocumentCopy
,
MagicStick
,
FolderAdd
,
Download
,
MoreFilled
,
Delete
}
from
'@element-plus/icons-vue'
import
{
CloseBold
,
Plus
,
MagicStick
,
FolderAdd
,
Download
,
MoreFilled
,
Delete
}
from
'@element-plus/icons-vue'
import
EditModal
from
'./EditModal.vue'
;
// 新增'角色', '场景', '道具'
import
BatchModal
from
'./BatchModal.vue'
;
// 批量生成
import
DepotModal
from
'./DepotModal.vue'
;
// 从库中选择
import
LocalUploadModal
from
'./LocalUploadModal.vue'
;
// 本地上传
import
AiEditModal
from
'./AiEditModal.vue'
;
const
emit
=
defineEmits
([
'next'
])
const
isShowtip
=
ref
(
true
)
const
indexTab
=
ref
(
0
)
...
...
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