| @@ -68,3 +68,16 @@ export function videoListApi(pageNum, pageSize) { | |||||
| }) | }) | ||||
| } | } | ||||
| /** | |||||
| * @description: 已消耗总时长 | |||||
| * @param | |||||
| * @return: | |||||
| */ | |||||
| export function currentVideoToalApi(pageNum) { | |||||
| let api = localStorage.getItem("isAdmin") === '0' ? '/serviceInfo/currentVideoToal' : '/serviceInfo/privateDeployAdminCurrentVideoTotal' | |||||
| return request({ | |||||
| url: `${api}`, | |||||
| method: 'get', | |||||
| }) | |||||
| } | |||||
| @@ -0,0 +1,147 @@ | |||||
| import request from "@/utils/request.js"; | |||||
| /** | |||||
| * @description 用户列表 | |||||
| * @param {*} (pageNum,pageSize) | |||||
| * @returns data | |||||
| */ | |||||
| export function userListApi(params) { | |||||
| return request({ | |||||
| url: `/wxCUserBasicInfo/list`, | |||||
| method: 'get', | |||||
| params | |||||
| }) | |||||
| } | |||||
| // 绑定定制模板 | |||||
| export function personMouldListApi(pageNum, pageSize) { | |||||
| return request({ | |||||
| url: `/personMould/alList?onlyCustomizedQuery=1&pageNum=${pageNum}&pageSize=${pageSize}`, | |||||
| method: 'get' | |||||
| }) | |||||
| } | |||||
| // 绑定定制模板-已关联模版 | |||||
| export function userPersonMouldIdListApi(cUserId) { | |||||
| return request({ | |||||
| url: `/personMould/userPersonMouldIdList?cUserId=${cUserId}`, | |||||
| method: 'get' | |||||
| }) | |||||
| } | |||||
| // 绑定定制模板-关联模版 | |||||
| export function associatedUserMouldsApi(data) { | |||||
| return request({ | |||||
| url: `/personMould/associatedUserMoulds`, | |||||
| method: 'post', | |||||
| data | |||||
| }) | |||||
| } | |||||
| // 绑定定制声纹 | |||||
| export function voiceMouldListApi(pageNum, pageSize) { | |||||
| return request({ | |||||
| url: `/voiceMould/alList?onlyCustomizedQuery=1&pageNum=${pageNum}&pageSize=${pageSize}`, | |||||
| method: 'get' | |||||
| }) | |||||
| } | |||||
| // 绑定定制声纹-已关联模版 | |||||
| export function userVoiceIdListApi(cUserId) { | |||||
| return request({ | |||||
| url: `/voiceMould/userVoiceIdList?cUserId=${cUserId}`, | |||||
| method: 'get' | |||||
| }) | |||||
| } | |||||
| // 绑定定制声纹-关联模版 | |||||
| export function associatedUserVoicesApi(data) { | |||||
| return request({ | |||||
| url: `/voiceMould/associatedUserVoices`, | |||||
| method: 'post', | |||||
| data | |||||
| }) | |||||
| } | |||||
| /** | |||||
| * @description 用户列表查看 | |||||
| * @param {*} | |||||
| * @returns | |||||
| */ | |||||
| export function userListFindByIdApi() { | |||||
| return request({ | |||||
| url: ` /wxCUserBasicInfo/findById?id=${id}`, | |||||
| method: 'get' | |||||
| }) | |||||
| } | |||||
| /** | |||||
| * @description 私人定制模板列表 | |||||
| * @param {*} (pageNum,pageSize) | |||||
| * @returns data | |||||
| */ | |||||
| export function userMouldListApi(params) { | |||||
| return request({ | |||||
| url: `/personMould/userMouldList`, | |||||
| method: 'get', | |||||
| params | |||||
| }) | |||||
| } | |||||
| /** | |||||
| * @description 私人定制声纹列表 | |||||
| * @param {*} (pageNum,pageSize) | |||||
| * @returns data | |||||
| */ | |||||
| export function userVoiceListAPi(params) { | |||||
| return request({ | |||||
| url: `/voiceMould/userVoiceList`, | |||||
| method: 'get', | |||||
| params | |||||
| }) | |||||
| } | |||||
| /** | |||||
| * @description 充值列表 | |||||
| * @param {*} (pageNum,pageSize) | |||||
| * @returns data | |||||
| */ | |||||
| export function rechargeListApi(params) { | |||||
| return request({ | |||||
| url: `/productOrder/paiedOrders`, | |||||
| method: 'get', | |||||
| params | |||||
| }) | |||||
| } | |||||
| /** | |||||
| * @description 充值列表 | |||||
| * @param {*} (pageNum,pageSize) | |||||
| * @returns data | |||||
| */ | |||||
| export function videoListApi(params) { | |||||
| return request({ | |||||
| url: `/userVideo/list`, | |||||
| method: 'get', | |||||
| params | |||||
| }) | |||||
| } | |||||
| /** | |||||
| * @description 充值列表-查看 | |||||
| * @param {*} | |||||
| * @returns | |||||
| */ | |||||
| export function videoListFindByIdApi(id) { | |||||
| return request({ | |||||
| url: `/userVideo/findById?id=${id}`, | |||||
| method: 'get' | |||||
| }) | |||||
| } | |||||
| /** | |||||
| * @description 充值列表-删除 | |||||
| * @param {*} | |||||
| * @returns | |||||
| */ | |||||
| export function videoListDelApi(id) { | |||||
| return request({ | |||||
| url: `/userVideo/del?id=${id}`, | |||||
| method: 'get' | |||||
| }) | |||||
| } | |||||
| @@ -45,6 +45,20 @@ | |||||
| <span>视频制作统计</span> | <span>视频制作统计</span> | ||||
| </el-menu-item> | </el-menu-item> | ||||
| </template> | </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> | |||||
| </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-group> | |||||
| </el-sub-menu> | |||||
| </el-menu> | </el-menu> | ||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| @@ -227,7 +241,7 @@ const showChildrenRouter = ref(""); | |||||
| .myRouter { | .myRouter { | ||||
| position: relative; | position: relative; | ||||
| height: calc(100% - 80px); | height: calc(100% - 80px); | ||||
| padding: 130px 20px 0; | |||||
| padding: 50px 20px 0; | |||||
| color: #fff; | color: #fff; | ||||
| width: 230px; | width: 230px; | ||||
| // color: #868593; | // color: #868593; | ||||
| @@ -222,6 +222,62 @@ export const constantRoutes: RouteRecordRaw[] = [ | |||||
| name: "ruleListMangage.title", | name: "ruleListMangage.title", | ||||
| }, | }, | ||||
| }, | }, | ||||
| { | |||||
| path: "/userManage", | |||||
| component: () => import("@/views/userManage/userList.vue"), | |||||
| name: "userManage", | |||||
| meta: { | |||||
| title: "userManage", | |||||
| icon: "homepage", | |||||
| affix: true, | |||||
| name: "ruleListMangage.title", | |||||
| }, | |||||
| }, | |||||
| { | |||||
| path: "/userMouldList", | |||||
| component: () => import("@/views/userManage/userMouldList.vue"), | |||||
| name: "userMouldList", | |||||
| meta: { | |||||
| title: "userMouldList", | |||||
| icon: "homepage", | |||||
| affix: true, | |||||
| name: "ruleListMangage.title", | |||||
| }, | |||||
| }, | |||||
| { | |||||
| path: "/userVoiceList", | |||||
| component: () => import("@/views/userManage/userVoiceList.vue"), | |||||
| name: "userVoiceList", | |||||
| meta: { | |||||
| title: "userVoiceList", | |||||
| icon: "homepage", | |||||
| affix: true, | |||||
| name: "ruleListMangage.title", | |||||
| }, | |||||
| }, | |||||
| { | |||||
| path: "/rechargeList", | |||||
| component: () => import("@/views/userManage/rechargeList.vue"), | |||||
| name: "rechargeList", | |||||
| meta: { | |||||
| title: "rechargeList", | |||||
| icon: "homepage", | |||||
| affix: true, | |||||
| name: "ruleListMangage.title", | |||||
| }, | |||||
| }, | |||||
| { | |||||
| path: "/videoList", | |||||
| component: () => import("@/views/userManage/videoList.vue"), | |||||
| name: "videoList", | |||||
| meta: { | |||||
| title: "videoList", | |||||
| icon: "homepage", | |||||
| affix: true, | |||||
| name: "ruleListMangage.title", | |||||
| }, | |||||
| }, | |||||
| ], | ], | ||||
| } | } | ||||
| ]; | ]; | ||||
| @@ -8,15 +8,16 @@ export {} | |||||
| declare module '@vue/runtime-core' { | declare module '@vue/runtime-core' { | ||||
| export interface GlobalComponents { | export interface GlobalComponents { | ||||
| Breadcrumb: typeof import('./../components/Breadcrumb/index.vue')['default'] | Breadcrumb: typeof import('./../components/Breadcrumb/index.vue')['default'] | ||||
| copy: typeof import('./../components/EditPosition copy.vue')['default'] | |||||
| CutImg: typeof import('./../components/cutImg.vue')['default'] | CutImg: typeof import('./../components/cutImg.vue')['default'] | ||||
| CutImg1: typeof import('./../components/cutImg1.vue')['default'] | CutImg1: typeof import('./../components/cutImg1.vue')['default'] | ||||
| EditPosition: typeof import('./../components/EditPosition.vue')['default'] | EditPosition: typeof import('./../components/EditPosition.vue')['default'] | ||||
| 'EditPosition copy': typeof import('./../components/EditPosition copy.vue')['default'] | 'EditPosition copy': typeof import('./../components/EditPosition copy.vue')['default'] | ||||
| ElAlert: typeof import('element-plus/es')['ElAlert'] | |||||
| ElButton: typeof import('element-plus/es')['ElButton'] | ElButton: typeof import('element-plus/es')['ElButton'] | ||||
| ElCard: typeof import('element-plus/es')['ElCard'] | ElCard: typeof import('element-plus/es')['ElCard'] | ||||
| ElCheckbox: typeof import('element-plus/es')['ElCheckbox'] | ElCheckbox: typeof import('element-plus/es')['ElCheckbox'] | ||||
| ElCheckboxGroup: typeof import('element-plus/es')['ElCheckboxGroup'] | ElCheckboxGroup: typeof import('element-plus/es')['ElCheckboxGroup'] | ||||
| ElDatePicker: typeof import('element-plus/es')['ElDatePicker'] | |||||
| ElDialog: typeof import('element-plus/es')['ElDialog'] | ElDialog: typeof import('element-plus/es')['ElDialog'] | ||||
| ElDropdown: typeof import('element-plus/es')['ElDropdown'] | ElDropdown: typeof import('element-plus/es')['ElDropdown'] | ||||
| ElDropdownItem: typeof import('element-plus/es')['ElDropdownItem'] | ElDropdownItem: typeof import('element-plus/es')['ElDropdownItem'] | ||||
| @@ -28,11 +29,13 @@ declare module '@vue/runtime-core' { | |||||
| ElInputNumber: typeof import('element-plus/es')['ElInputNumber'] | ElInputNumber: typeof import('element-plus/es')['ElInputNumber'] | ||||
| ElMenu: typeof import('element-plus/es')['ElMenu'] | ElMenu: typeof import('element-plus/es')['ElMenu'] | ||||
| ElMenuItem: typeof import('element-plus/es')['ElMenuItem'] | ElMenuItem: typeof import('element-plus/es')['ElMenuItem'] | ||||
| ElMenuItemGroup: typeof import('element-plus/es')['ElMenuItemGroup'] | |||||
| ElOption: typeof import('element-plus/es')['ElOption'] | ElOption: typeof import('element-plus/es')['ElOption'] | ||||
| ElPagination: typeof import('element-plus/es')['ElPagination'] | ElPagination: typeof import('element-plus/es')['ElPagination'] | ||||
| ElRadio: typeof import('element-plus/es')['ElRadio'] | ElRadio: typeof import('element-plus/es')['ElRadio'] | ||||
| ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup'] | ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup'] | ||||
| ElSelect: typeof import('element-plus/es')['ElSelect'] | ElSelect: typeof import('element-plus/es')['ElSelect'] | ||||
| ElSubMenu: typeof import('element-plus/es')['ElSubMenu'] | |||||
| ElSwitch: typeof import('element-plus/es')['ElSwitch'] | ElSwitch: typeof import('element-plus/es')['ElSwitch'] | ||||
| ElTable: typeof import('element-plus/es')['ElTable'] | ElTable: typeof import('element-plus/es')['ElTable'] | ||||
| ElTableColumn: typeof import('element-plus/es')['ElTableColumn'] | ElTableColumn: typeof import('element-plus/es')['ElTableColumn'] | ||||
| @@ -0,0 +1,87 @@ | |||||
| <template> | |||||
| <div> | |||||
| <el-checkbox-group v-model="checkboxGroup" size="small" class="checkbox"> | |||||
| <el-checkbox v-for="(item, index) in tableData" :key="index" :label="item.id" border> | |||||
| <img :src="item.coverImg" width="50" /> | |||||
| <p>{{ item.title }}</p> | |||||
| </el-checkbox> | |||||
| </el-checkbox-group> | |||||
| <div style="margin-top: 20px"> | |||||
| <el-button @click="handleClose" | |||||
| >取消</el-button | |||||
| > | |||||
| <el-button type="primary" @click="addModel()">确认关联</el-button> | |||||
| </div> | |||||
| </div> | |||||
| </template> | |||||
| <script setup> | |||||
| import { ref } from 'vue' | |||||
| import { personMouldListApi, userPersonMouldIdListApi, associatedUserMouldsApi } from '@/apis/userManage.js' | |||||
| import dayjs from "dayjs"; | |||||
| const emit = defineEmits(["close"]); | |||||
| const props = defineProps({ | |||||
| serviceId: { | |||||
| required: true, | |||||
| } | |||||
| }); | |||||
| const getDate = (val) => { | |||||
| return dayjs(val).format("YYYY-MM-DD"); | |||||
| }; | |||||
| const checkboxGroup = ref([]) | |||||
| const total = ref(0); | |||||
| const tableData = ref([]); | |||||
| const modelAllListFunc = async () => { | |||||
| try { | |||||
| const res = await personMouldListApi(1, 10000); | |||||
| const modelIds = await userPersonMouldIdListApi(props.serviceId); | |||||
| tableData.value = res.data.list; | |||||
| total.value = res.data.total * 1; | |||||
| setTimeout(()=> { | |||||
| if(modelIds.data && modelIds.data.length > 0) { | |||||
| modelIds.data.forEach((item) => { | |||||
| checkboxGroup.value.push(item) | |||||
| }) | |||||
| } | |||||
| }, 500) | |||||
| } catch (error) { | |||||
| console.log(error, "err"); | |||||
| } | |||||
| }; | |||||
| const addModel = async () => { | |||||
| const data = { | |||||
| mouldIds: checkboxGroup.value, | |||||
| cUserId: props.serviceId | |||||
| } | |||||
| const res = await associatedUserMouldsApi(data); | |||||
| if(res.code === 200) { | |||||
| ElMessage.success("关联成功!"); | |||||
| handleClose() | |||||
| } | |||||
| }; | |||||
| function handleClose() { | |||||
| emit("close"); | |||||
| } | |||||
| onMounted(() => { | |||||
| modelAllListFunc(1, 10); | |||||
| }); | |||||
| </script> | |||||
| <style lang="scss" scoped> | |||||
| .checkbox { | |||||
| max-height: 500px; | |||||
| overflow: auto; | |||||
| :deep .el-checkbox.el-checkbox--small { | |||||
| width: 110px; | |||||
| height:110px; | |||||
| margin-bottom: 10px; | |||||
| } | |||||
| } | |||||
| </style> | |||||
| @@ -0,0 +1,189 @@ | |||||
| <template> | |||||
| <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> | |||||
| <el-form-item label="商品名"> | |||||
| <el-input v-model="formInline.mouldSmIdLike" placeholder="请输入模版号" clearable /> | |||||
| </el-form-item> | |||||
| <el-form-item label="充值时间段"> | |||||
| <el-date-picker | |||||
| v-model="formInline.time" | |||||
| type="daterange" | |||||
| range-separator="To" | |||||
| start-placeholder="Start date" | |||||
| end-placeholder="End date" | |||||
| /> | |||||
| </el-form-item> | |||||
| <el-form-item> | |||||
| <el-button type="primary" @click="getListData"><el-icon><i-ep-plus /></el-icon> 查询</el-button> | |||||
| </el-form-item> | |||||
| </el-form> | |||||
| </div> | |||||
| <el-table | |||||
| :data="tableData" | |||||
| style="width: 100%; height: 90%" | |||||
| size="large" | |||||
| align="center" | |||||
| border | |||||
| > | |||||
| <el-table-column | |||||
| prop="name" | |||||
| label="订单号" | |||||
| align="center" | |||||
| /> | |||||
| <el-table-column | |||||
| prop="address" | |||||
| label="商品名称" | |||||
| align="center" | |||||
| /> | |||||
| <el-table-column | |||||
| prop="address" | |||||
| label="支付方式" | |||||
| align="center" | |||||
| /> | |||||
| <el-table-column | |||||
| prop="address" | |||||
| label="支付金额" | |||||
| align="center" | |||||
| /> | |||||
| <el-table-column | |||||
| prop="address" | |||||
| label="手机号" | |||||
| align="center" | |||||
| /> | |||||
| <el-table-column | |||||
| prop="createDate" | |||||
| label="创建时间" | |||||
| align="center" | |||||
| > | |||||
| <template #default="scope"> | |||||
| {{ getDate(scope.row.createDate) }} | |||||
| </template> | |||||
| </el-table-column> | |||||
| </el-table> | |||||
| <!-- 登录账号 --> | |||||
| <div class="pagination"> | |||||
| <el-pagination | |||||
| v-model:current-page="pageNum" | |||||
| v-model:page-size="pageSize" | |||||
| :page-sizes="[10, 50, 100]" | |||||
| :small="false" | |||||
| :disabled="false" | |||||
| :background="true" | |||||
| layout="total, sizes, prev, pager, next, jumper" | |||||
| :total="total" | |||||
| @size-change="handleSizeChange" | |||||
| @current-change="handleCurrentChange" | |||||
| /> | |||||
| </div> | |||||
| </div> | |||||
| </template> | |||||
| <!-- videoType==1为竖,==2为横 --> | |||||
| <script setup> | |||||
| //#region 导入 | |||||
| import { rechargeListApi } from '@/apis/userManage.js' | |||||
| import { useI18n } from "vue-i18n"; | |||||
| import dayjs from "dayjs"; | |||||
| import { useRoute, useRouter } from "vue-router"; | |||||
| const route = useRoute(); | |||||
| const router = useRouter(); | |||||
| const { locale } = useI18n(); | |||||
| const lanChange = ref(locale); | |||||
| const tableData = ref([]); | |||||
| const pageNum = ref(1); | |||||
| const pageSize = ref(10); | |||||
| const total = ref(0); | |||||
| const getDate = (val) => { | |||||
| return dayjs(val).format("YYYY-MM-DD"); | |||||
| }; | |||||
| const handleSizeChange = (val) => { | |||||
| pageSize.value = val; | |||||
| getListData(pageNum.value, pageSize.value); | |||||
| }; | |||||
| const handleCurrentChange = (val) => { | |||||
| pageNum.value = val; | |||||
| getListData(pageNum.value, pageSize.value); | |||||
| }; | |||||
| const formInline = ref({ | |||||
| phone: '', | |||||
| productTitle: '', | |||||
| time: '' | |||||
| }) | |||||
| const getListData = async (PageNum, PageSize) => { | |||||
| try { | |||||
| let data = { | |||||
| PageNum: PageNum || 1, | |||||
| PageSize: PageSize || 10, | |||||
| phone: formInline.phone, | |||||
| projectType: 2, | |||||
| productTitle: formInline.productTitle, | |||||
| startDate: formInline.time ? formInline.time[0] : '', | |||||
| endDate: formInline.time ? formInline.time[1] : '', | |||||
| } | |||||
| const res = await rechargeListApi(data); | |||||
| tableData.value = res.data.list; | |||||
| total.value = res.data.total * 1; | |||||
| } catch (error) { | |||||
| console.log(error, "err"); | |||||
| } | |||||
| }; | |||||
| onMounted(() => { | |||||
| getListData(1, 10); | |||||
| }); | |||||
| </script> | |||||
| <style lang="scss" scoped> | |||||
| .page { | |||||
| height: calc(100vh - 80px); | |||||
| // height: calc(100vh - 80px); | |||||
| background-color: #ffffff; | |||||
| border-radius: 30px 0 0 0; | |||||
| overflow: hidden; | |||||
| padding: 10vh; | |||||
| .addbtn { | |||||
| margin-bottom: 2vh; | |||||
| } | |||||
| .formData { | |||||
| padding: 5vh 3vh; | |||||
| } | |||||
| .pagination { | |||||
| position: fixed; | |||||
| left: 55%; | |||||
| bottom: 8vh; | |||||
| transform: translateX(-50%); | |||||
| border-radius: 5px; | |||||
| padding: 10px 20px; | |||||
| z-index: 99; | |||||
| transition: all 0.3s; | |||||
| cursor: pointer; | |||||
| &:hover { | |||||
| background-color: #b8b8b873; | |||||
| } | |||||
| } | |||||
| } | |||||
| </style> | |||||
| @@ -0,0 +1,222 @@ | |||||
| <template> | |||||
| <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> | |||||
| <el-form-item> | |||||
| <el-button type="primary" @click="dialogVisible = true"><el-icon><i-ep-plus /></el-icon> 新增</el-button> | |||||
| </el-form-item> | |||||
| </el-form> | |||||
| </div> | |||||
| <el-table | |||||
| :data="tableData" | |||||
| style="width: 100%; height: 90%" | |||||
| size="large" | |||||
| align="center" | |||||
| border | |||||
| > | |||||
| <el-table-column | |||||
| prop="name" | |||||
| label="用户ID" | |||||
| align="center" | |||||
| /> | |||||
| <el-table-column | |||||
| prop="address" | |||||
| label="手机号" | |||||
| align="center" | |||||
| /> | |||||
| <el-table-column | |||||
| prop="createDate" | |||||
| label="注册时间" | |||||
| align="center" | |||||
| > | |||||
| <template #default="scope"> | |||||
| {{ getDate(scope.row.createDate) }} | |||||
| </template> | |||||
| </el-table-column> | |||||
| <el-table-column | |||||
| prop="poins" | |||||
| label="当前币值" | |||||
| align="center" | |||||
| /> | |||||
| <el-table-column | |||||
| fixed="right" | |||||
| :label="$t('keyMangage.operations')" | |||||
| width="400" | |||||
| 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> | |||||
| </template> | |||||
| </el-table-column> | |||||
| </el-table> | |||||
| <!-- 登录账号 --> | |||||
| <div class="pagination"> | |||||
| <el-pagination | |||||
| v-model:current-page="pageNum" | |||||
| v-model:page-size="pageSize" | |||||
| :page-sizes="[10, 50, 100]" | |||||
| :small="false" | |||||
| :disabled="false" | |||||
| :background="true" | |||||
| layout="total, sizes, prev, pager, next, jumper" | |||||
| :total="total" | |||||
| @size-change="handleSizeChange" | |||||
| @current-change="handleCurrentChange" | |||||
| /> | |||||
| </div> | |||||
| <el-dialog v-model="detailDialogVisible" v-if="detailDialogVisible" title="查看详情" width="60%" :before-close="handleClose" > | |||||
| <el-form :model="form" label-width="120px"> | |||||
| <el-form-item label="用户ID"> | |||||
| <el-input v-model="form.name" /> | |||||
| </el-form-item> | |||||
| <el-form-item label="手机号"> | |||||
| <el-input v-model="form.phone" /> | |||||
| </el-form-item> | |||||
| <el-form-item> | |||||
| <el-button type="primary" @click="onSubmit">Create</el-button> | |||||
| <el-button>Cancel</el-button> | |||||
| </el-form-item> | |||||
| </el-form> | |||||
| </el-dialog> | |||||
| </div> | |||||
| </template> | |||||
| <!-- videoType==1为竖,==2为横 --> | |||||
| <script setup> | |||||
| //#region 导入 | |||||
| import { userListApi, userListFindByIdApi } from '@/apis/userManage.js' | |||||
| import { useI18n } from "vue-i18n"; | |||||
| import dayjs from "dayjs"; | |||||
| import { useRoute, useRouter } from "vue-router"; | |||||
| const route = useRoute(); | |||||
| const router = useRouter(); | |||||
| const { locale } = useI18n(); | |||||
| const lanChange = ref(locale); | |||||
| const tableData = ref([]); | |||||
| const dialogVisible = ref(false); | |||||
| const rechargeDetail = (item) => { | |||||
| router.push({ | |||||
| path: "/rechargeList", | |||||
| query: { | |||||
| phone: item.phone | |||||
| }, | |||||
| }); | |||||
| }; | |||||
| const videoDetail = (item) => { | |||||
| router.push({ | |||||
| path: "/videoList", | |||||
| query: { | |||||
| phone: item.phone | |||||
| }, | |||||
| }); | |||||
| }; | |||||
| const pageNum = ref(1); | |||||
| const pageSize = ref(10); | |||||
| const total = ref(0); | |||||
| const getDate = (val) => { | |||||
| return dayjs(val).format("YYYY-MM-DD"); | |||||
| }; | |||||
| const handleSizeChange = (val) => { | |||||
| pageSize.value = val; | |||||
| getListData(pageNum.value, pageSize.value); | |||||
| }; | |||||
| const handleCurrentChange = (val) => { | |||||
| pageNum.value = val; | |||||
| getListData(pageNum.value, pageSize.value); | |||||
| }; | |||||
| const formInline = ref({ | |||||
| phone: '' | |||||
| }) | |||||
| const getListData = async (PageNum, PageSize) => { | |||||
| try { | |||||
| let data = { | |||||
| PageNum: PageNum, | |||||
| PageSize: PageSize, | |||||
| phone: formInline.phone | |||||
| } | |||||
| const res = await userListApi(data); | |||||
| console.log(res, "res"); | |||||
| tableData.value = res.data.list; | |||||
| total.value = res.data.total * 1; | |||||
| } catch (error) { | |||||
| console.log(error, "err"); | |||||
| } | |||||
| }; | |||||
| const form = ref({ | |||||
| name: '', | |||||
| phone: '' | |||||
| }) | |||||
| const detailDialogVisible = ref(false) | |||||
| function showDetail(id) { | |||||
| userListFindByIdApi(id).then(res => { | |||||
| detailDialogVisible.value = true | |||||
| form.value = res.data | |||||
| }) | |||||
| } | |||||
| function handleClose() { | |||||
| detailDialogVisible.value = false | |||||
| } | |||||
| onMounted(() => { | |||||
| getListData(1, 10); | |||||
| }); | |||||
| </script> | |||||
| <style lang="scss" scoped> | |||||
| .page { | |||||
| height: calc(100vh - 80px); | |||||
| // height: calc(100vh - 80px); | |||||
| background-color: #ffffff; | |||||
| border-radius: 30px 0 0 0; | |||||
| overflow: hidden; | |||||
| padding: 10vh; | |||||
| .addbtn { | |||||
| margin-bottom: 2vh; | |||||
| } | |||||
| .formData { | |||||
| padding: 5vh 3vh; | |||||
| } | |||||
| .pagination { | |||||
| position: fixed; | |||||
| left: 55%; | |||||
| bottom: 8vh; | |||||
| transform: translateX(-50%); | |||||
| border-radius: 5px; | |||||
| padding: 10px 20px; | |||||
| z-index: 99; | |||||
| transition: all 0.3s; | |||||
| cursor: pointer; | |||||
| &:hover { | |||||
| background-color: #b8b8b873; | |||||
| } | |||||
| } | |||||
| } | |||||
| </style> | |||||
| @@ -0,0 +1,161 @@ | |||||
| <template> | |||||
| <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> | |||||
| <el-form-item label="模版号"> | |||||
| <el-input v-model="formInline.mouldSmIdLike" placeholder="请输入模版号" clearable /> | |||||
| </el-form-item> | |||||
| <el-form-item> | |||||
| <el-button type="primary" @click="getListData"><el-icon><i-ep-plus /></el-icon> 查询</el-button> | |||||
| </el-form-item> | |||||
| </el-form> | |||||
| </div> | |||||
| <el-table | |||||
| :data="tableData" | |||||
| style="width: 100%; height: 90%" | |||||
| size="large" | |||||
| align="center" | |||||
| border | |||||
| > | |||||
| <el-table-column | |||||
| prop="name" | |||||
| label="模板信息" | |||||
| align="center" | |||||
| /> | |||||
| <el-table-column | |||||
| prop="address" | |||||
| label="手机号" | |||||
| align="center" | |||||
| /> | |||||
| <el-table-column | |||||
| prop="createDate" | |||||
| label="注册时间" | |||||
| align="center" | |||||
| > | |||||
| <template #default="scope"> | |||||
| {{ getDate(scope.row.createDate) }} | |||||
| </template> | |||||
| </el-table-column> | |||||
| </el-table> | |||||
| <!-- 登录账号 --> | |||||
| <div class="pagination"> | |||||
| <el-pagination | |||||
| v-model:current-page="pageNum" | |||||
| v-model:page-size="pageSize" | |||||
| :page-sizes="[10, 50, 100]" | |||||
| :small="false" | |||||
| :disabled="false" | |||||
| :background="true" | |||||
| layout="total, sizes, prev, pager, next, jumper" | |||||
| :total="total" | |||||
| @size-change="handleSizeChange" | |||||
| @current-change="handleCurrentChange" | |||||
| /> | |||||
| </div> | |||||
| </div> | |||||
| </template> | |||||
| <!-- videoType==1为竖,==2为横 --> | |||||
| <script setup> | |||||
| //#region 导入 | |||||
| import { userMouldListApi } from '@/apis/userManage.js' | |||||
| import { useI18n } from "vue-i18n"; | |||||
| import dayjs from "dayjs"; | |||||
| import { useRoute, useRouter } from "vue-router"; | |||||
| const route = useRoute(); | |||||
| const router = useRouter(); | |||||
| const { locale } = useI18n(); | |||||
| const lanChange = ref(locale); | |||||
| const tableData = ref([]); | |||||
| const pageNum = ref(1); | |||||
| const pageSize = ref(10); | |||||
| const total = ref(0); | |||||
| const getDate = (val) => { | |||||
| return dayjs(val).format("YYYY-MM-DD"); | |||||
| }; | |||||
| const handleSizeChange = (val) => { | |||||
| pageSize.value = val; | |||||
| getListData(pageNum.value, pageSize.value); | |||||
| }; | |||||
| const handleCurrentChange = (val) => { | |||||
| pageNum.value = val; | |||||
| getListData(pageNum.value, pageSize.value); | |||||
| }; | |||||
| const formInline = ref({ | |||||
| phone: '', | |||||
| mouldSmIdLike: '' | |||||
| }) | |||||
| const getListData = async (PageNum, PageSize) => { | |||||
| try { | |||||
| let data = { | |||||
| PageNum: PageNum || 1, | |||||
| PageSize: PageSize || 10, | |||||
| phone: formInline.phone, | |||||
| mouldSmIdLike: formInline.mouldSmIdLike | |||||
| } | |||||
| const res = await userMouldListApi(data); | |||||
| console.log(res, "res"); | |||||
| tableData.value = res.data.list; | |||||
| total.value = res.data.total * 1; | |||||
| } catch (error) { | |||||
| console.log(error, "err"); | |||||
| } | |||||
| }; | |||||
| onMounted(() => { | |||||
| getListData(1, 10); | |||||
| }); | |||||
| </script> | |||||
| <style lang="scss" scoped> | |||||
| .page { | |||||
| height: calc(100vh - 80px); | |||||
| // height: calc(100vh - 80px); | |||||
| background-color: #ffffff; | |||||
| border-radius: 30px 0 0 0; | |||||
| overflow: hidden; | |||||
| padding: 10vh; | |||||
| .addbtn { | |||||
| margin-bottom: 2vh; | |||||
| } | |||||
| .formData { | |||||
| padding: 5vh 3vh; | |||||
| } | |||||
| .pagination { | |||||
| position: fixed; | |||||
| left: 55%; | |||||
| bottom: 8vh; | |||||
| transform: translateX(-50%); | |||||
| border-radius: 5px; | |||||
| padding: 10px 20px; | |||||
| z-index: 99; | |||||
| transition: all 0.3s; | |||||
| cursor: pointer; | |||||
| &:hover { | |||||
| background-color: #b8b8b873; | |||||
| } | |||||
| } | |||||
| } | |||||
| </style> | |||||
| @@ -0,0 +1,160 @@ | |||||
| <template> | |||||
| <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> | |||||
| <el-form-item label="模版号"> | |||||
| <el-input v-model="formInline.mouldSmIdLike" placeholder="请输入模版号" clearable /> | |||||
| </el-form-item> | |||||
| <el-form-item> | |||||
| <el-button type="primary" @click="getListData"><el-icon><i-ep-plus /></el-icon> 查询</el-button> | |||||
| </el-form-item> | |||||
| </el-form> | |||||
| </div> | |||||
| <el-table | |||||
| :data="tableData" | |||||
| style="width: 100%; height: 90%" | |||||
| size="large" | |||||
| align="center" | |||||
| border | |||||
| > | |||||
| <el-table-column | |||||
| prop="name" | |||||
| label="声纹信息" | |||||
| align="center" | |||||
| /> | |||||
| <el-table-column | |||||
| prop="address" | |||||
| label="手机号" | |||||
| align="center" | |||||
| /> | |||||
| <el-table-column | |||||
| prop="createDate" | |||||
| label="注册时间" | |||||
| align="center" | |||||
| > | |||||
| <template #default="scope"> | |||||
| {{ getDate(scope.row.createDate) }} | |||||
| </template> | |||||
| </el-table-column> | |||||
| </el-table> | |||||
| <!-- 登录账号 --> | |||||
| <div class="pagination"> | |||||
| <el-pagination | |||||
| v-model:current-page="pageNum" | |||||
| v-model:page-size="pageSize" | |||||
| :page-sizes="[10, 50, 100]" | |||||
| :small="false" | |||||
| :disabled="false" | |||||
| :background="true" | |||||
| layout="total, sizes, prev, pager, next, jumper" | |||||
| :total="total" | |||||
| @size-change="handleSizeChange" | |||||
| @current-change="handleCurrentChange" | |||||
| /> | |||||
| </div> | |||||
| </div> | |||||
| </template> | |||||
| <!-- videoType==1为竖,==2为横 --> | |||||
| <script setup> | |||||
| //#region 导入 | |||||
| import { userVoiceListAPi } from '@/apis/userManage.js' | |||||
| import { useI18n } from "vue-i18n"; | |||||
| import dayjs from "dayjs"; | |||||
| import { useRoute, useRouter } from "vue-router"; | |||||
| const route = useRoute(); | |||||
| const router = useRouter(); | |||||
| const { locale } = useI18n(); | |||||
| const lanChange = ref(locale); | |||||
| const tableData = ref([]); | |||||
| const pageNum = ref(1); | |||||
| const pageSize = ref(10); | |||||
| const total = ref(0); | |||||
| const getDate = (val) => { | |||||
| return dayjs(val).format("YYYY-MM-DD"); | |||||
| }; | |||||
| const handleSizeChange = (val) => { | |||||
| pageSize.value = val; | |||||
| getListData(pageNum.value, pageSize.value); | |||||
| }; | |||||
| const handleCurrentChange = (val) => { | |||||
| pageNum.value = val; | |||||
| getListData(pageNum.value, pageSize.value); | |||||
| }; | |||||
| const formInline = ref({ | |||||
| phone: '', | |||||
| mouldSmIdLike: '' | |||||
| }) | |||||
| const getListData = async (PageNum, PageSize) => { | |||||
| try { | |||||
| let data = { | |||||
| PageNum: PageNum || 1, | |||||
| PageSize: PageSize || 10, | |||||
| phone: formInline.phone, | |||||
| mouldSmIdLike: formInline.mouldSmIdLike | |||||
| } | |||||
| const res = await userVoiceListAPi(data); | |||||
| console.log(res, "res"); | |||||
| tableData.value = res.data.list; | |||||
| total.value = res.data.total * 1; | |||||
| } catch (error) { | |||||
| console.log(error, "err"); | |||||
| } | |||||
| }; | |||||
| onMounted(() => { | |||||
| getListData(1, 10); | |||||
| }); | |||||
| </script> | |||||
| <style lang="scss" scoped> | |||||
| .page { | |||||
| height: calc(100vh - 80px); | |||||
| // height: calc(100vh - 80px); | |||||
| background-color: #ffffff; | |||||
| border-radius: 30px 0 0 0; | |||||
| overflow: hidden; | |||||
| padding: 10vh; | |||||
| .addbtn { | |||||
| margin-bottom: 2vh; | |||||
| } | |||||
| .formData { | |||||
| padding: 5vh 3vh; | |||||
| } | |||||
| .pagination { | |||||
| position: fixed; | |||||
| left: 55%; | |||||
| bottom: 8vh; | |||||
| transform: translateX(-50%); | |||||
| border-radius: 5px; | |||||
| padding: 10px 20px; | |||||
| z-index: 99; | |||||
| transition: all 0.3s; | |||||
| cursor: pointer; | |||||
| &:hover { | |||||
| background-color: #b8b8b873; | |||||
| } | |||||
| } | |||||
| } | |||||
| </style> | |||||
| @@ -0,0 +1,262 @@ | |||||
| <template> | |||||
| <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> | |||||
| <el-form-item label="文本"> | |||||
| <el-input v-model="formInline.paperwork" placeholder="请输入模版号" clearable /> | |||||
| </el-form-item> | |||||
| <el-form-item label="类型"> | |||||
| <el-select | |||||
| v-model="formInline.videoType" | |||||
| placeholder="请选择类型" | |||||
| clearable | |||||
| > | |||||
| <el-option label="竖版" value="1" /> | |||||
| <el-option label="横板" value="2" /> | |||||
| </el-select> | |||||
| </el-form-item> | |||||
| <el-form-item label="状态"> | |||||
| <el-select | |||||
| v-model="formInline.isDel" | |||||
| placeholder="请选择状态" | |||||
| clearable | |||||
| > | |||||
| <el-option label="未删除" value="0" /> | |||||
| <el-option label="已删除" value="1" /> | |||||
| </el-select> | |||||
| </el-form-item> | |||||
| <el-form-item label="创建时间段"> | |||||
| <el-date-picker | |||||
| v-model="formInline.time" | |||||
| type="daterange" | |||||
| range-separator="To" | |||||
| start-placeholder="Start date" | |||||
| end-placeholder="End date" | |||||
| /> | |||||
| </el-form-item> | |||||
| <el-form-item> | |||||
| <el-button type="primary" @click="getListData"><el-icon><i-ep-plus /></el-icon> 查询</el-button> | |||||
| </el-form-item> | |||||
| </el-form> | |||||
| </div> | |||||
| <el-table | |||||
| :data="tableData" | |||||
| style="width: 100%; height: 90%" | |||||
| size="large" | |||||
| align="center" | |||||
| border | |||||
| > | |||||
| <el-table-column | |||||
| prop="name" | |||||
| label="类型" | |||||
| align="center" | |||||
| /> | |||||
| <el-table-column | |||||
| prop="paperwork" | |||||
| label="文本内容" | |||||
| align="center" | |||||
| /> | |||||
| <el-table-column | |||||
| prop="address" | |||||
| label="状态" | |||||
| align="center" | |||||
| /> | |||||
| <el-table-column | |||||
| prop="title" | |||||
| label="视频标题" | |||||
| align="center" | |||||
| /> | |||||
| <el-table-column | |||||
| prop="coverImg" | |||||
| label="封面图" | |||||
| align="center" | |||||
| /> | |||||
| <el-table-column | |||||
| prop="videoPlayUrl" | |||||
| label="视频地址" | |||||
| align="center" | |||||
| /> | |||||
| <el-table-column | |||||
| prop="videoTime" | |||||
| label="视频时长" | |||||
| align="center" | |||||
| > | |||||
| <template #default="scope"> | |||||
| {{ getDate(scope.row.videoTime) }} | |||||
| </template> | |||||
| </el-table-column> | |||||
| <el-table-column | |||||
| prop="videoSize" | |||||
| label="视频大小" | |||||
| align="center" | |||||
| /> | |||||
| <el-table-column | |||||
| prop="videoMsg" | |||||
| label="视频生成信息" | |||||
| align="center" | |||||
| /> | |||||
| <el-table-column | |||||
| prop="costPoints" | |||||
| label="消耗金币" | |||||
| align="center" | |||||
| /> | |||||
| <el-table-column | |||||
| prop="costPointsDetail" | |||||
| label="消耗金币明细" | |||||
| align="center" | |||||
| /> | |||||
| <el-table-column | |||||
| prop="createDate" | |||||
| label="创建时间" | |||||
| align="center" | |||||
| > | |||||
| <template #default="scope"> | |||||
| {{ getDate(scope.row.createDate) }} | |||||
| </template> | |||||
| </el-table-column> | |||||
| <el-table-column | |||||
| fixed="right" | |||||
| :label="$t('keyMangage.operations')" | |||||
| width="400" | |||||
| 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="confirmDel(scope.row.id)">删除</el-button> | |||||
| </template> | |||||
| </el-table-column> | |||||
| </el-table> | |||||
| <!-- 登录账号 --> | |||||
| <div class="pagination"> | |||||
| <el-pagination | |||||
| v-model:current-page="pageNum" | |||||
| v-model:page-size="pageSize" | |||||
| :page-sizes="[10, 50, 100]" | |||||
| :small="false" | |||||
| :disabled="false" | |||||
| :background="true" | |||||
| layout="total, sizes, prev, pager, next, jumper" | |||||
| :total="total" | |||||
| @size-change="handleSizeChange" | |||||
| @current-change="handleCurrentChange" | |||||
| /> | |||||
| </div> | |||||
| </div> | |||||
| </template> | |||||
| <script setup> | |||||
| //#region 导入 | |||||
| import { videoListApi, videoListFindByIdApi, videoListDelApi } from '@/apis/userManage.js' | |||||
| import { useI18n } from "vue-i18n"; | |||||
| import dayjs from "dayjs"; | |||||
| import { useRoute, useRouter } from "vue-router"; | |||||
| const route = useRoute(); | |||||
| const router = useRouter(); | |||||
| const { locale } = useI18n(); | |||||
| const lanChange = ref(locale); | |||||
| const tableData = ref([]); | |||||
| const pageNum = ref(1); | |||||
| const pageSize = ref(10); | |||||
| const total = ref(0); | |||||
| const getDate = (val) => { | |||||
| return dayjs(val).format("YYYY-MM-DD HH:mm:ss"); | |||||
| }; | |||||
| const handleSizeChange = (val) => { | |||||
| pageSize.value = val; | |||||
| getListData(pageNum.value, pageSize.value); | |||||
| }; | |||||
| const handleCurrentChange = (val) => { | |||||
| pageNum.value = val; | |||||
| getListData(pageNum.value, pageSize.value); | |||||
| }; | |||||
| const formInline = ref({ | |||||
| phone: '', | |||||
| productTitle: '', | |||||
| time: '' | |||||
| }) | |||||
| const getListData = async (PageNum, PageSize) => { | |||||
| try { | |||||
| let data = { | |||||
| PageNum: PageNum || 1, | |||||
| PageSize: PageSize || 10, | |||||
| phone: formInline.phone, | |||||
| projectType: 2, | |||||
| productTitle: formInline.productTitle, | |||||
| startDate: formInline.time ? formInline.time[0] : '', | |||||
| endDate: formInline.time ? formInline.time[1] : '', | |||||
| id: route.query.id || '' | |||||
| } | |||||
| const res = await videoListApi(data); | |||||
| tableData.value = res.data.list; | |||||
| total.value = res.data.total * 1; | |||||
| } catch (error) { | |||||
| console.log(error, "err"); | |||||
| } | |||||
| }; | |||||
| function confirmDel(id) { | |||||
| ElMessageBox.confirm('你确定要删除吗?').then(() => { | |||||
| videoListDelApi(id).then(res => { | |||||
| debugger | |||||
| }) | |||||
| done() | |||||
| }).catch(() => { | |||||
| // catch error | |||||
| }) | |||||
| } | |||||
| onMounted(() => { | |||||
| getListData(1, 10); | |||||
| }); | |||||
| </script> | |||||
| <style lang="scss" scoped> | |||||
| .page { | |||||
| height: calc(100vh - 80px); | |||||
| // height: calc(100vh - 80px); | |||||
| background-color: #ffffff; | |||||
| border-radius: 30px 0 0 0; | |||||
| overflow: hidden; | |||||
| padding: 10vh; | |||||
| .addbtn { | |||||
| margin-bottom: 2vh; | |||||
| } | |||||
| .formData { | |||||
| padding: 5vh 3vh; | |||||
| } | |||||
| .pagination { | |||||
| position: fixed; | |||||
| left: 55%; | |||||
| bottom: 8vh; | |||||
| transform: translateX(-50%); | |||||
| border-radius: 5px; | |||||
| padding: 10px 20px; | |||||
| z-index: 99; | |||||
| transition: all 0.3s; | |||||
| cursor: pointer; | |||||
| &:hover { | |||||
| background-color: #b8b8b873; | |||||
| } | |||||
| } | |||||
| } | |||||
| </style> | |||||
| @@ -0,0 +1,87 @@ | |||||
| <template> | |||||
| <div> | |||||
| <el-checkbox-group v-model="checkboxGroup" size="small" class="checkbox"> | |||||
| <el-checkbox v-for="(item, index) in tableData" :key="index" :label="item.id" border> | |||||
| <img :src="item.coverImg" width="50" /> | |||||
| <p>{{ item.title }}</p> | |||||
| </el-checkbox> | |||||
| </el-checkbox-group> | |||||
| <div style="margin-top: 20px"> | |||||
| <el-button @click="handleClose" | |||||
| >取消</el-button | |||||
| > | |||||
| <el-button type="primary" @click="addModel()">确认关联</el-button> | |||||
| </div> | |||||
| </div> | |||||
| </template> | |||||
| <script setup> | |||||
| import { ref } from 'vue' | |||||
| import { voiceMouldListApi, userVoiceIdListApi, associatedUserVoicesApi } from '@/apis/userManage.js' | |||||
| import dayjs from "dayjs"; | |||||
| const emit = defineEmits(["close"]); | |||||
| const props = defineProps({ | |||||
| serviceId: { | |||||
| required: true, | |||||
| } | |||||
| }); | |||||
| const getDate = (val) => { | |||||
| return dayjs(val).format("YYYY-MM-DD"); | |||||
| }; | |||||
| const checkboxGroup = ref([]) | |||||
| const total = ref(0); | |||||
| const tableData = ref([]); | |||||
| const modelAllListFunc = async () => { | |||||
| try { | |||||
| const res = await voiceMouldListApi(1, 10000); | |||||
| const modelIds = await userVoiceIdListApi(props.serviceId); | |||||
| tableData.value = res.data.list; | |||||
| total.value = res.data.total * 1; | |||||
| setTimeout(()=> { | |||||
| if(modelIds.data && modelIds.data.length > 0) { | |||||
| modelIds.data.forEach((item) => { | |||||
| checkboxGroup.value.push(item) | |||||
| }) | |||||
| } | |||||
| }, 500) | |||||
| } catch (error) { | |||||
| console.log(error, "err"); | |||||
| } | |||||
| }; | |||||
| const addModel = async () => { | |||||
| const data = { | |||||
| mouldIds: checkboxGroup.value, | |||||
| cUserId: props.serviceId | |||||
| } | |||||
| const res = await associatedUserVoicesApi(data); | |||||
| if(res.code === 200) { | |||||
| ElMessage.success("关联成功!"); | |||||
| handleClose() | |||||
| } | |||||
| }; | |||||
| function handleClose() { | |||||
| emit("close"); | |||||
| } | |||||
| onMounted(() => { | |||||
| modelAllListFunc(1, 10); | |||||
| }); | |||||
| </script> | |||||
| <style lang="scss" scoped> | |||||
| .checkbox { | |||||
| max-height: 500px; | |||||
| overflow: auto; | |||||
| :deep .el-checkbox.el-checkbox--small { | |||||
| width: 110px; | |||||
| height:110px; | |||||
| margin-bottom: 10px; | |||||
| } | |||||
| } | |||||
| </style> | |||||
| @@ -1,6 +1,6 @@ | |||||
| <template> | <template> | ||||
| <div class="page justify-around"> | <div class="page justify-around"> | ||||
| <el-alert :title="`已消耗总时长:${crrentVideoToal}`" type="success" :closable="false" /> | |||||
| <el-table | <el-table | ||||
| :data="tableData" | :data="tableData" | ||||
| style="width: 100%; height: 90%" | style="width: 100%; height: 90%" | ||||
| @@ -36,6 +36,17 @@ | |||||
| {{ getDate(scope.row.createTime) }} | {{ getDate(scope.row.createTime) }} | ||||
| </template> | </template> | ||||
| </el-table-column> | </el-table-column> | ||||
| <el-table-column | |||||
| fixed="right" | |||||
| :label="$t('keyMangage.operations')" | |||||
| width="400" | |||||
| align="center" | |||||
| > | |||||
| <template #default="scope"> | |||||
| <el-button link type="primary" size="small" @click="showDetail(scope.row.id)">查看视频详情</el-button> | |||||
| </template> | |||||
| </el-table-column> | |||||
| </el-table> | </el-table> | ||||
| <div class="pagination"> | <div class="pagination"> | ||||
| @@ -58,7 +69,7 @@ | |||||
| <!-- videoType==1为竖,==2为横 --> | <!-- videoType==1为竖,==2为横 --> | ||||
| <script setup> | <script setup> | ||||
| //#region 导入 | //#region 导入 | ||||
| import { videoListApi } from '@/apis/home.js' | |||||
| import { videoListApi,currentVideoToalApi } from '@/apis/home.js' | |||||
| import { useI18n } from "vue-i18n"; | import { useI18n } from "vue-i18n"; | ||||
| @@ -78,6 +89,16 @@ | |||||
| const getDate = (val) => { | const getDate = (val) => { | ||||
| return dayjs(Number(val)).format("YYYY-MM-DD HH:mm:ss"); | return dayjs(Number(val)).format("YYYY-MM-DD HH:mm:ss"); | ||||
| }; | }; | ||||
| // 跳转视频列表 | |||||
| const showDetail = (id) => { | |||||
| router.push({ | |||||
| path: "/videoList", | |||||
| query: { | |||||
| id, | |||||
| }, | |||||
| }); | |||||
| }; | |||||
| const handleSizeChange = (val) => { | const handleSizeChange = (val) => { | ||||
| pageSize.value = val; | pageSize.value = val; | ||||
| @@ -109,7 +130,14 @@ | |||||
| }, | }, | ||||
| }); | }); | ||||
| } | } | ||||
| const crrentVideoToal = ref('') | |||||
| function getCrrentVideoToal() { | |||||
| currentVideoToalApi().then(res => { | |||||
| // TODO | |||||
| }) | |||||
| } | |||||
| onMounted(() => { | onMounted(() => { | ||||
| getCrrentVideoToal() | |||||
| getBusinessListFunc(1, 10); | getBusinessListFunc(1, 10); | ||||
| }); | }); | ||||
| </script> | </script> | ||||