| @@ -51,6 +51,18 @@ export default { | |||
| logout: "Logout", | |||
| goLogin: "Go and log in", | |||
| LanguageChange: "Language switching", | |||
| home: 'Home', | |||
| apiManage: 'API Access Party Management', | |||
| privatization: 'Privatized customer management', | |||
| template: 'Template management', | |||
| secretKey: 'Key View', | |||
| video: 'Video production statistics', | |||
| userMange: 'User Management', | |||
| userList: 'User List', | |||
| userMouldList: 'Private Custom Template List', | |||
| userVoiceList: 'Private customized voiceprint list', | |||
| rechargeList: 'Recharge List', | |||
| videoList: 'Video List' | |||
| }, | |||
| // 创作视频 | |||
| @@ -257,4 +269,54 @@ export default { | |||
| apiMangage: { | |||
| title: "API", | |||
| }, | |||
| home: { | |||
| info: 'Personal Information', | |||
| welcome: 'Welcome', | |||
| loginAccount: 'Login account', | |||
| userName: 'User nickname', | |||
| phone: 'Phone', | |||
| time: 'Current account duration', | |||
| setting: 'security setting', | |||
| editPwd: 'Change password', | |||
| key: 'secret key', | |||
| view: 'View', | |||
| }, | |||
| template: { | |||
| img: 'picture' | |||
| }, | |||
| video: { | |||
| time: 'Total time consumed', | |||
| code: 'Access Party Code', | |||
| videoTime: 'Video duration', | |||
| videoUrl: 'Video link', | |||
| createTime: 'CreateTime', | |||
| detail: 'View video details', | |||
| }, | |||
| userList: { | |||
| phone: 'phone', | |||
| phonePlaceholder: 'Please enter your phone number', | |||
| search: 'search', | |||
| id: 'user id', | |||
| poins: 'Current currency value', | |||
| createDate: 'CreateTime', | |||
| view: 'View', | |||
| rechargeDetail: 'View recharge records', | |||
| videoDetail: 'View video list', | |||
| personMould: 'Bind custom templates', | |||
| personVoice: 'Bind custom voiceprints', | |||
| viewDetail: 'Detail', | |||
| close: 'Close' | |||
| }, | |||
| personMould: { | |||
| cancel: 'Cancel', | |||
| confirm: 'Confirm association' | |||
| }, | |||
| personVoice: { | |||
| lang: 'language', | |||
| country: 'country', | |||
| enName: 'English name', | |||
| chineseName: 'Chinese name', | |||
| cancel: 'Cancel', | |||
| confirm: 'Confirm association' | |||
| } | |||
| }; | |||
| @@ -52,6 +52,18 @@ export default { | |||
| logout: "注销", | |||
| goLogin: "登录", | |||
| LanguageChange: "语言切换", | |||
| home: '首页', | |||
| apiManage: 'API接入方管理', | |||
| privatization: '私有化客户管理', | |||
| template: '模版管理', | |||
| secretKey: '密钥查看', | |||
| video: '视频制作统计', | |||
| userMange: '用户管理', | |||
| userList: '用户列表', | |||
| userMouldList: '私人定制模板列表', | |||
| userVoiceList: '私人定制声纹列表', | |||
| rechargeList: '充值列表', | |||
| videoList: '视频列表' | |||
| }, | |||
| // 创作视频 | |||
| @@ -256,4 +268,54 @@ export default { | |||
| apiMangage: { | |||
| title: "API 管理", | |||
| }, | |||
| home: { | |||
| info: '个人信息', | |||
| welcome: '欢迎您', | |||
| loginAccount: '登录账号', | |||
| userName: '用户昵称', | |||
| phone: '手机号', | |||
| time: '当前账户时长', | |||
| setting: '安全设置', | |||
| editPwd: '修改密码', | |||
| key: '密钥', | |||
| view: '查看', | |||
| }, | |||
| template: { | |||
| img: '图片' | |||
| }, | |||
| video: { | |||
| time: '已消耗总时长', | |||
| code: '接入方编码', | |||
| videoTime: '视频时长', | |||
| videoUrl: '视频链接', | |||
| createTime: '创建时间', | |||
| detail: '查看视频详情', | |||
| }, | |||
| userList: { | |||
| phone: '手机号', | |||
| phonePlaceholder: '请输入手机号', | |||
| search: '查询', | |||
| id: '用户ID', | |||
| poins: '当前币值', | |||
| createDate: '创建时间', | |||
| view: '查看', | |||
| rechargeDetail: '查看充值记录', | |||
| videoDetail: '查看视频列表', | |||
| personMould: '绑定定制模版', | |||
| personVoice: '绑定定制声纹', | |||
| viewDetail: '查看详情', | |||
| close: '关闭' | |||
| }, | |||
| personMould: { | |||
| cancel: '取消', | |||
| confirm: '确认关联' | |||
| }, | |||
| personVoice: { | |||
| lang: '语言', | |||
| country: '国家', | |||
| enName: '英文名称', | |||
| chineseName: '中文名称', | |||
| cancel: '取消', | |||
| confirm: '确认关联' | |||
| } | |||
| }; | |||
| @@ -19,44 +19,44 @@ | |||
| class="el-menu-vertical-demo"> | |||
| <el-menu-item index="1" @click="router.push('/home')"> | |||
| <el-icon><i-ep-House /></el-icon> | |||
| <span>首页</span> | |||
| <span>{{ $t('navbar.home') }}</span> | |||
| </el-menu-item> | |||
| <!-- 邃芒后台 --> | |||
| <el-menu-item v-if="isAdmin === '1' && localDeploy !== 'true' " index="2" @click="router.push('/apiManage')"> | |||
| <el-icon><i-ep-link /></el-icon> | |||
| <span>API接入方管理</span> | |||
| <span>{{ $t('navbar.apiManage') }}</span> | |||
| </el-menu-item> | |||
| <el-menu-item v-if="isAdmin === '1' && localDeploy !== 'true'" index="3" @click="router.push('/privatization')"> | |||
| <el-icon><i-ep-edit /></el-icon> | |||
| <span>私有化客户管理</span> | |||
| <span>{{ $t('navbar.privatization') }}</span> | |||
| </el-menu-item> | |||
| <!-- 私有化客户管理 API v-if="(isAdmin === '1' && localDeploy === 'true') || isAdmin === '0'" --> | |||
| <template v-else> | |||
| <el-menu-item index="4" @click="router.push('/template')"> | |||
| <el-icon><i-ep-edit /></el-icon> | |||
| <span>模版管理</span> | |||
| <span>{{ $t('navbar.template') }}</span> | |||
| </el-menu-item> | |||
| <el-menu-item index="5" @click="router.push('/secretKey')"> | |||
| <el-icon><i-ep-edit /></el-icon> | |||
| <span>密钥查看</span> | |||
| <span>{{ $t('navbar.secretKey') }}</span> | |||
| </el-menu-item> | |||
| <el-menu-item index="6" @click="router.push('/video')"> | |||
| <el-icon><i-ep-edit /></el-icon> | |||
| <span>视频制作统计</span> | |||
| <span>{{ $t('navbar.video') }}</span> | |||
| </el-menu-item> | |||
| </template> | |||
| <!-- v-if="isAdmin === '1'" --> | |||
| <el-sub-menu index="7" v-if="isAdmin == '1'" > | |||
| <template #title> | |||
| <el-icon><i-ep-edit /></el-icon> | |||
| <span>用户管理</span> | |||
| <span>{{ $t('navbar.userMange') }}</span> | |||
| </template> | |||
| <el-menu-item-group> | |||
| <el-menu-item index="7-1" @click="router.push('/userManage')">用户列表</el-menu-item> | |||
| <el-menu-item index="7-2" @click="router.push('/userMouldList')">私人定制模板列表</el-menu-item> | |||
| <el-menu-item index="7-3" @click="router.push('/userVoiceList')">私人定制声纹列表</el-menu-item> | |||
| <el-menu-item index="7-4" @click="router.push('/rechargeList')">充值列表</el-menu-item> | |||
| <el-menu-item index="7-5" @click="router.push('/videoList')">视频列表</el-menu-item> | |||
| <el-menu-item index="7-1" @click="router.push('/userManage')">{{ $t('navbar.userList') }}</el-menu-item> | |||
| <el-menu-item index="7-2" @click="router.push('/userMouldList')">{{ $t('navbar.userMouldList') }}</el-menu-item> | |||
| <el-menu-item index="7-3" @click="router.push('/userVoiceList')">{{ $t('navbar.userVoiceList') }}</el-menu-item> | |||
| <el-menu-item index="7-4" @click="router.push('/rechargeList')">{{ $t('navbar.rechargeList') }}</el-menu-item> | |||
| <el-menu-item index="7-5" @click="router.push('/videoList')">{{ $t('navbar.videoList') }}</el-menu-item> | |||
| </el-menu-item-group> | |||
| </el-sub-menu> | |||
| </el-menu> | |||
| @@ -8,6 +8,7 @@ export {} | |||
| declare module '@vue/runtime-core' { | |||
| export interface GlobalComponents { | |||
| Breadcrumb: typeof import('./../components/Breadcrumb/index.vue')['default'] | |||
| copy: typeof import('./../components/EditPosition copy.vue')['default'] | |||
| CutImg: typeof import('./../components/cutImg.vue')['default'] | |||
| CutImg1: typeof import('./../components/cutImg1.vue')['default'] | |||
| EditPosition: typeof import('./../components/EditPosition.vue')['default'] | |||
| @@ -2,24 +2,24 @@ | |||
| <div class="page"> | |||
| <el-card class="box-card"> | |||
| <div slot="header" class="clearfix"> | |||
| <span>个人信息</span> | |||
| <span>{{ $t('home.info') }}</span> | |||
| </div> | |||
| <div> | |||
| <div style="text-align: center"> | |||
| <div class="el-upload"> | |||
| <img :src="Avatar" class="avatar"> | |||
| <p>{{ userData.username }},欢迎您</p> | |||
| <p>{{ userData.username }},{{ $t('home.welcome') }}</p> | |||
| </div> | |||
| </div> | |||
| <ul class="user-info"> | |||
| <li><div style="height: 100%"><el-icon><i-ep-UserFilled /></el-icon> 登录账号<div class="user-right">{{ userData.username }}</div></div></li> | |||
| <li><el-icon><i-ep-Avatar /></el-icon> 用户昵称 <div class="user-right">{{ userData.name }}</div></li> | |||
| <li><el-icon><i-ep-User /></el-icon> 手机号 <div class="user-right"> {{ userData.phone }}</div></li> | |||
| <li v-if="(userData.isAdmin === 1 && localDeploy) || userData.isAdmin === 0"><el-icon><i-ep-User /></el-icon> 当前账户时长 <div class="user-right"> {{ userData.remainingTimes }} (秒)</div></li> | |||
| <li><div style="height: 100%"><el-icon><i-ep-UserFilled /></el-icon> {{ $t('home.loginAccount') }}<div class="user-right">{{ userData.username }}</div></div></li> | |||
| <li><el-icon><i-ep-Avatar /></el-icon> {{ $t('home.userName') }} <div class="user-right">{{ userData.name }}</div></li> | |||
| <li><el-icon><i-ep-User /></el-icon> {{ $t('home.phone') }} <div class="user-right"> {{ userData.phone }}</div></li> | |||
| <li v-if="(userData.isAdmin === 1 && localDeploy) || userData.isAdmin === 0"><el-icon><i-ep-User /></el-icon> {{ $t('home.time') }} <div class="user-right"> {{ userData.remainingTimes }} (秒)</div></li> | |||
| <li> | |||
| <el-icon><i-ep-edit /></el-icon> 安全设置 | |||
| <el-icon><i-ep-edit /></el-icon> {{ $t('home.setting') }} | |||
| <div class="user-right"> | |||
| <a @click="editDialogVisible = true">修改密码</a> | |||
| <a @click="editDialogVisible = true">{{ $t('home.editPwd') }}</a> | |||
| </div> | |||
| </li> | |||
| <!-- <li v-if="userData.isAdmin === '1' && userData.localDeploy"> | |||
| @@ -29,15 +29,15 @@ | |||
| </div> | |||
| </li> --> | |||
| <li v-if="userData.isAdmin === 0"> | |||
| <el-icon><i-ep-Pointer /></el-icon>密钥 | |||
| <el-icon><i-ep-Pointer /></el-icon>{{ $t('home.key') }} | |||
| <div class="user-right"> | |||
| <a @click="router.push('/secretKey')">查看</a> | |||
| <a @click="router.push('/secretKey')">{{ $t('home.view') }} </a> | |||
| </div> | |||
| </li> | |||
| </ul> | |||
| </div> | |||
| </el-card> | |||
| <el-dialog v-model="editDialogVisible" title="修改密码" width="40%" :before-close="handleClose" > | |||
| <el-dialog v-model="editDialogVisible" :title="$t('home.editPwd')" width="40%" :before-close="handleClose" > | |||
| <edit-pass @close="handleClose"></edit-pass> | |||
| </el-dialog> | |||
| </div> | |||
| @@ -9,7 +9,7 @@ | |||
| border | |||
| > | |||
| <el-table-column label="图片" align="center"> | |||
| <el-table-column :label="$t('template.img')" align="center"> | |||
| <template #default="scope"> | |||
| <img :src="scope.row.coverImg" width="50" /> | |||
| </template> | |||
| @@ -8,9 +8,9 @@ | |||
| </el-checkbox-group> | |||
| <div style="margin-top: 20px"> | |||
| <el-button @click="handleClose" | |||
| >取消</el-button | |||
| >{{$t('personMould.cancel')}}</el-button | |||
| > | |||
| <el-button type="primary" @click="addModel()">确认关联</el-button> | |||
| <el-button type="primary" @click="addModel()">{{$t('personMould.confirm')}}</el-button> | |||
| </div> | |||
| </div> | |||
| </template> | |||
| @@ -19,6 +19,9 @@ | |||
| import { ref } from 'vue' | |||
| import { personMouldListApi, userPersonMouldIdListApi, associatedUserMouldsApi } from '@/apis/userManage.js' | |||
| import dayjs from "dayjs"; | |||
| import { useI18n } from "vue-i18n"; | |||
| const { locale } = useI18n(); | |||
| const lanChange = ref(locale); | |||
| const emit = defineEmits(["close"]); | |||
| const props = defineProps({ | |||
| @@ -61,7 +64,7 @@ const addModel = async () => { | |||
| } | |||
| const res = await associatedUserMouldsApi(data); | |||
| if(res.code === 200) { | |||
| ElMessage.success("关联成功!"); | |||
| ElMessage.success((lanChange.value) == "zh-cn" ? "关联成功!" : 'Successfully associated!'); | |||
| handleClose() | |||
| } | |||
| }; | |||
| @@ -7,10 +7,10 @@ | |||
| @selection-change="handleSelectionChange" | |||
| > | |||
| <el-table-column type="selection" width="55" align="center"/> | |||
| <el-table-column property="language" label="语言" align="center"/> | |||
| <el-table-column property="country" label="国家" align="center"/> | |||
| <el-table-column property="name" label="英文名称" align="center"/> | |||
| <el-table-column property="chineseName" label="中文名称" align="center"/> | |||
| <el-table-column property="language" :label="$t('personVoice.lang')" align="center"/> | |||
| <el-table-column property="country" :label="$t('personVoice.country')" align="center"/> | |||
| <el-table-column property="name" :label="$t('personVoice.enName')" align="center"/> | |||
| <el-table-column property="chineseName" :label="$t('personVoice.chineseName')" align="center"/> | |||
| <el-table-column | |||
| prop="createTime" | |||
| :label="$t('businessMangage.createTime')" | |||
| @@ -45,6 +45,9 @@ | |||
| <script setup> | |||
| import { voiceMouldListApi, userVoiceIdListApi, associatedUserVoicesApi } from '@/apis/userManage.js' | |||
| import dayjs from "dayjs"; | |||
| import { useI18n } from "vue-i18n"; | |||
| const { locale } = useI18n(); | |||
| const lanChange = ref(locale); | |||
| const emit = defineEmits(["close"]); | |||
| const props = defineProps({ | |||
| cUserId: { | |||
| @@ -130,7 +133,7 @@ const addModel = async () => { | |||
| } | |||
| const res = await associatedUserVoicesApi(data); | |||
| if(res.code === 200) { | |||
| ElMessage.success("关联成功!"); | |||
| ElMessage.success((lanChange.value) == "zh-cn" ? "关联成功!" : 'Successfully associated!'); | |||
| handleClose() | |||
| } | |||
| }; | |||
| @@ -2,11 +2,11 @@ | |||
| <div class="page justify-around"> | |||
| <div class="addbtn"> | |||
| <el-form :inline="true" :model="formInline" class="demo-form-inline"> | |||
| <el-form-item label="手机号"> | |||
| <el-input v-model="formInline.phone" placeholder="请输入手机号" clearable /> | |||
| <el-form-item :label="$t('userList.phone')"> | |||
| <el-input v-model="formInline.phone" :placeholder="$t('userList.phonePlaceholder')" clearable /> | |||
| </el-form-item> | |||
| <el-form-item> | |||
| <el-button type="primary" @click="getListData()">查询</el-button> | |||
| <el-button type="primary" @click="getListData()">{{ $t('userList.search') }}</el-button> | |||
| </el-form-item> | |||
| </el-form> | |||
| </div> | |||
| @@ -20,26 +20,26 @@ | |||
| > | |||
| <el-table-column | |||
| prop="id" | |||
| label="用户ID" | |||
| :label="$t('userList.id')" | |||
| align="center" | |||
| /> | |||
| <el-table-column | |||
| prop="phone" | |||
| label="手机号" | |||
| :label="$t('userList.phone')" | |||
| align="center" | |||
| /> | |||
| <el-table-column | |||
| prop="poins" | |||
| label="当前币值" | |||
| :label="$t('userList.poins')" | |||
| align="center" | |||
| /> | |||
| <el-table-column | |||
| prop="createDate" | |||
| label="创建时间" | |||
| :label="$t('userList.createDate')" | |||
| align="center" | |||
| > | |||
| <template #default="scope"> | |||
| @@ -52,11 +52,11 @@ | |||
| align="center" | |||
| > | |||
| <template #default="scope"> | |||
| <el-button link type="primary" size="small" @click="showDetail(scope.row.id)">查看</el-button> | |||
| <el-button link type="primary" size="small" @click="rechargeDetail(scope.row)">查看充值记录</el-button> | |||
| <el-button link type="primary" size="small" @click="videoDetail(scope.row)"> 查看视频列表</el-button> | |||
| <el-button link type="primary" size="small" @click="personMould(scope.row.id)">绑定定制模版</el-button> | |||
| <el-button link type="primary" size="small" @click="personVoice(scope.row.id)">绑定定制声纹</el-button> | |||
| <el-button link type="primary" size="small" @click="showDetail(scope.row.id)">{{$t('userList.view')}}</el-button> | |||
| <el-button link type="primary" size="small" @click="rechargeDetail(scope.row)">{{$t('userList.rechargeDetail')}}</el-button> | |||
| <el-button link type="primary" size="small" @click="videoDetail(scope.row)"> {{$t('userList.videoDetail')}}</el-button> | |||
| <el-button link type="primary" size="small" @click="personMould(scope.row.id)">{{$t('userList.personMould')}}</el-button> | |||
| <el-button link type="primary" size="small" @click="personVoice(scope.row.id)">{{$t('userList.personVoice')}}</el-button> | |||
| </template> | |||
| </el-table-column> | |||
| </el-table> | |||
| @@ -76,30 +76,30 @@ | |||
| @current-change="handleCurrentChange" | |||
| /> | |||
| </div> | |||
| <el-dialog v-model="detailDialogVisible" v-if="detailDialogVisible" title="查看详情" width="60%" :before-close="handleClose" > | |||
| <el-dialog v-model="detailDialogVisible" v-if="detailDialogVisible" :title="$t('userList.viewDetail')" width="60%" :before-close="handleClose" > | |||
| <el-form :model="form" label-width="120px"> | |||
| <el-form-item label="手机号"> | |||
| <el-form-item :label="$t('userList.phone')"> | |||
| <el-input v-model="form.phone" /> | |||
| </el-form-item> | |||
| <el-form-item label="Level"> | |||
| <el-input v-model="form.level" /> | |||
| </el-form-item> | |||
| <el-form-item label="当前币值"> | |||
| <el-form-item :label="$t('userList.poins')"> | |||
| <el-input v-model="form.poins" /> | |||
| </el-form-item> | |||
| <el-form-item label="创建时间"> | |||
| <el-form-item :label="$t('userList.createDate')"> | |||
| <el-input v-model="form.createDate" /> | |||
| </el-form-item> | |||
| <el-form-item> | |||
| <el-button>关闭</el-button> | |||
| <el-button>{{$t('userList.close')}}</el-button> | |||
| </el-form-item> | |||
| </el-form> | |||
| </el-dialog> | |||
| <el-dialog v-model="modelDialogVisible" v-if="modelDialogVisible" title="绑定定制模版" width="60%" :before-close="handleClose" > | |||
| <el-dialog v-model="modelDialogVisible" v-if="modelDialogVisible" :title="$t('userList.personMould')" width="60%" :before-close="handleClose" > | |||
| <model :cUserId="cUserId" @close="handleClose"></model> | |||
| </el-dialog> | |||
| <el-dialog v-model="voiceDialogVisible" v-if="voiceDialogVisible" title="绑定定制声纹" width="60%" :before-close="handleClose" > | |||
| <el-dialog v-model="voiceDialogVisible" v-if="voiceDialogVisible" :title="$t('userList.personVoice')" width="60%" :before-close="handleClose" > | |||
| <voice :cUserId="cUserId" @close="handleClose"></voice> | |||
| </el-dialog> | |||
| </div> | |||
| @@ -1,6 +1,6 @@ | |||
| <template> | |||
| <div class="page justify-around"> | |||
| <el-alert :title="`已消耗总时长:${crrentVideoToal} 秒`" type="success" :closable="false" /> | |||
| <el-alert :title="`${$t('video.time')}:${crrentVideoToal} 秒`" type="success" :closable="false" /> | |||
| <el-table | |||
| :data="tableData" | |||
| style="width: 100%; height: 90%" | |||
| @@ -10,7 +10,7 @@ | |||
| > | |||
| <el-table-column | |||
| prop="serviceId" | |||
| label="接入方编码" | |||
| :label="$t('video.code')" | |||
| align="center"> | |||
| <template #default="scope"> | |||
| <el-button type="primary" text @click="getDetail(scope.row.serviceId)">{{ scope.row.serviceId }}</el-button> | |||
| @@ -19,17 +19,17 @@ | |||
| <el-table-column | |||
| prop="videoTime" | |||
| label="视频时长" | |||
| :label="$t('video.videoTime')" | |||
| align="center" | |||
| /> | |||
| <el-table-column | |||
| prop="videoUrl" | |||
| label="视频链接" | |||
| :label="$t('video.videoUrl')" | |||
| align="center" | |||
| /> | |||
| <el-table-column | |||
| prop="createTime" | |||
| label="创建时间" | |||
| :label="$t('video.createTime')" | |||
| align="center" | |||
| > | |||
| <template #default="scope"> | |||
| @@ -43,7 +43,7 @@ | |||
| align="center" | |||
| > | |||
| <template #default="scope"> | |||
| <el-button link type="primary" size="small" @click="showDetail(scope.row.userMouldVideoId)">查看视频详情</el-button> | |||
| <el-button link type="primary" size="small" @click="showDetail(scope.row.userMouldVideoId)">{{ $t('keyMangage.detail') }}</el-button> | |||
| </template> | |||
| </el-table-column> | |||
| </el-table> | |||