Commit f7b805c2 authored by 黄同智's avatar 黄同智

布局页面:团队管理、用量统计、水印设置

parent 4ca9a103
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
"version": "0.0.1", "version": "0.0.1",
"dependencies": { "dependencies": {
"axios": "^1.5.0", "axios": "^1.5.0",
"echarts": "^6.1.0",
"element-plus": "^2.14.0", "element-plus": "^2.14.0",
"nprogress": "^0.2.0", "nprogress": "^0.2.0",
"vue": "^3.4.0", "vue": "^3.4.0",
...@@ -1240,6 +1241,16 @@ ...@@ -1240,6 +1241,16 @@
"node": ">= 0.4" "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": { "node_modules/element-plus": {
"version": "2.14.0", "version": "2.14.0",
"resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.14.0.tgz", "resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.14.0.tgz",
...@@ -1849,6 +1860,12 @@ ...@@ -1849,6 +1860,12 @@
"node": ">=0.10.0" "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": { "node_modules/typescript": {
"version": "5.9.3", "version": "5.9.3",
"resolved": "https://registry.npmmirror.com/typescript/-/typescript-5.9.3.tgz", "resolved": "https://registry.npmmirror.com/typescript/-/typescript-5.9.3.tgz",
...@@ -2008,6 +2025,15 @@ ...@@ -2008,6 +2025,15 @@
"peerDependencies": { "peerDependencies": {
"vue": "^3.0.1" "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"
}
} }
} }
} }
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
}, },
"dependencies": { "dependencies": {
"axios": "^1.5.0", "axios": "^1.5.0",
"echarts": "^6.1.0",
"element-plus": "^2.14.0", "element-plus": "^2.14.0",
"nprogress": "^0.2.0", "nprogress": "^0.2.0",
"vue": "^3.4.0", "vue": "^3.4.0",
......
<template> <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"> <div class="flex-center pt-28">
<img src="@/static/imgs/logo.png" class="w-100 h-22" alt="Logo"> <img src="@/static/imgs/logo.png" class="w-100 h-22" alt="Logo">
</div> </div>
...@@ -45,7 +45,7 @@ ...@@ -45,7 +45,7 @@
<el-icon> <el-icon>
<Files /> <Files />
</el-icon> </el-icon>
<span>项目</span> <span>团队管理</span>
</div> </div>
<div class="flex-align-center gap-8 mt-12 cursor-pointer pl-16 h-36 rounded-4" <div class="flex-align-center gap-8 mt-12 cursor-pointer pl-16 h-36 rounded-4"
:class="indexvalue == 4 ? 'active' : ''" @click="switchTab(4)"> :class="indexvalue == 4 ? 'active' : ''" @click="switchTab(4)">
...@@ -66,7 +66,7 @@ ...@@ -66,7 +66,7 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { computed, ref, watch } from 'vue'; import { ref, watch } from 'vue';
import { useAuth } from '../stores/useAuth'; import { useAuth } from '../stores/useAuth';
import { VideoCameraFilled, Files, PieChart, Help } from '@element-plus/icons-vue' import { VideoCameraFilled, Files, PieChart, Help } from '@element-plus/icons-vue'
import { useRouter, useRoute } from 'vue-router'; import { useRouter, useRoute } from 'vue-router';
...@@ -78,7 +78,7 @@ const routeIndexMap: Record<string, number> = { ...@@ -78,7 +78,7 @@ const routeIndexMap: Record<string, number> = {
'/': 0, '/': 0,
'/projectlist': 1, '/projectlist': 1,
'/asset': 2, '/asset': 2,
'/enterprise/project': 3, '/enterprise/team': 3,
'/enterprise/usage': 4, '/enterprise/usage': 4,
'/enterprise/watermark': 5, '/enterprise/watermark': 5,
}; };
...@@ -108,7 +108,7 @@ const tabRouter:any = { ...@@ -108,7 +108,7 @@ const tabRouter:any = {
0: '/', 0: '/',
1: '/projectlist', 1: '/projectlist',
2: '/asset', 2: '/asset',
3: '/enterprise/project', 3: '/enterprise/team',
4: '/enterprise/usage', 4: '/enterprise/usage',
5: '/enterprise/watermark', 5: '/enterprise/watermark',
} }
......
...@@ -9,7 +9,7 @@ const Login = () => import('@/views/Login.vue'); ...@@ -9,7 +9,7 @@ const Login = () => import('@/views/Login.vue');
const NotFound = () => import('@/views/NotFound.vue'); const NotFound = () => import('@/views/NotFound.vue');
const Projectlist = () => import('@/views/project/projectlist.vue'); const Projectlist = () => import('@/views/project/projectlist.vue');
const Asset = () => import('@/views/project/asset.vue'); const Asset = () => import('@/views/project/asset.vue');
const EnterpriseProject = () => import('@/views/enterprise/project.vue'); const EnterpriseTeam = () => import('@/views/enterprise/team.vue');
const EnterpriseUsage = () => import('@/views/enterprise/usage.vue'); const EnterpriseUsage = () => import('@/views/enterprise/usage.vue');
const EnterpriseWatermark = () => import('@/views/enterprise/watermark.vue'); const EnterpriseWatermark = () => import('@/views/enterprise/watermark.vue');
const Drama = () => import('@/views/project/drama.vue'); const Drama = () => import('@/views/project/drama.vue');
...@@ -44,9 +44,9 @@ const routes = [ ...@@ -44,9 +44,9 @@ const routes = [
meta: { authRequired: true } meta: { authRequired: true }
}, },
{ {
path: '/enterprise/project', path: '/enterprise/team',
name: 'EnterpriseProject', name: 'EnterpriseTeam',
component: EnterpriseProject, component: EnterpriseTeam,
meta: { authRequired: true } meta: { authRequired: true }
}, },
{ {
......
<template>
<div></div>
</template>
<script setup lang="ts"></script>
<style lang="scss" scoped></style>
\ No newline at end of file
<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
This diff is collapsed.
<template> <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> </template>
<script setup lang="ts"></script> <script setup lang="ts">
<style lang="scss" scoped></style> import { ref } from 'vue'
\ No newline at end of file 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
<template> <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> </template>
<script setup lang="ts"></script> <script setup lang="ts">
<style lang="scss" scoped></style> import { ref } from 'vue'
\ No newline at end of file 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
...@@ -299,7 +299,7 @@ ...@@ -299,7 +299,7 @@
</section> </section>
</section> </section>
<div class="fixed bottom-30 btnfooter w-140 h-54 flex-center rounded-200 text-fff cursor-pointer" <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=""> <img src="@/static/imgs/icon1.png" alt="">
<span class="ml-10">进入下一步</span> <span class="ml-10">进入下一步</span>
</div> </div>
...@@ -312,13 +312,14 @@ ...@@ -312,13 +312,14 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref } from 'vue'; 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 EditModal from './EditModal.vue'; // 新增'角色', '场景', '道具'
import BatchModal from './BatchModal.vue'; // 批量生成 import BatchModal from './BatchModal.vue'; // 批量生成
import DepotModal from './DepotModal.vue'; // 从库中选择 import DepotModal from './DepotModal.vue'; // 从库中选择
import LocalUploadModal from './LocalUploadModal.vue'; // 本地上传 import LocalUploadModal from './LocalUploadModal.vue'; // 本地上传
import AiEditModal from './AiEditModal.vue'; import AiEditModal from './AiEditModal.vue';
const emit = defineEmits(['next'])
const isShowtip = ref(true) const isShowtip = ref(true)
const indexTab = ref(0) const indexTab = ref(0)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment