提交 285b3d47 authored 作者: 王鹏飞's avatar 王鹏飞

chore: 直播练习名称修改为直播;修改为数据字典获取数据

上级 0c0d5df9
<script setup> <script setup>
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
import { liveTestDuration } from '@/utils/dictionary'
import LiveProductSelect from '@/components/LiveProductSelect.vue' import LiveProductSelect from '@/components/LiveProductSelect.vue'
import { createTalk, updateTalk, getTalk, getProduct } from '../api' import { createTalk, updateTalk, getTalk, getProduct } from '../api'
import { useChat } from '@/composables/useChat' import { useChat } from '@/composables/useChat'
import Editor from '@tinymce/tinymce-vue' import Editor from '@tinymce/tinymce-vue'
import { useMapStore } from '@/stores/map'
const props = defineProps(['data', 'action']) const props = defineProps(['data', 'action'])
const emit = defineEmits(['update', 'update:modelValue']) const emit = defineEmits(['update', 'update:modelValue'])
const liveTalkDuration = useMapStore().getMapValuesByKey('live_talk_duration')
const actonMap = { add: '添加', update: '编辑', view: '查看' } const actonMap = { add: '添加', update: '编辑', view: '查看' }
const isUpdate = computed(() => props.action === 'update') const isUpdate = computed(() => props.action === 'update')
...@@ -20,7 +22,7 @@ const form = reactive({ ...@@ -20,7 +22,7 @@ const form = reactive({
live_commodity_id: '', live_commodity_id: '',
selling_point: '', selling_point: '',
marketing_campaign: '', marketing_campaign: '',
duration: '10', duration: liveTalkDuration[0]?.value || '10',
content: '', content: '',
}) })
watchEffect(() => { watchEffect(() => {
...@@ -194,7 +196,7 @@ function handleAIGenerate(index) { ...@@ -194,7 +196,7 @@ function handleAIGenerate(index) {
</el-form-item> </el-form-item>
<el-form-item label="话术时长" prop="duration"> <el-form-item label="话术时长" prop="duration">
<el-radio-group v-model="form.duration"> <el-radio-group v-model="form.duration">
<el-radio v-for="item in liveTestDuration" v-bind="item" :key="item.value"></el-radio> <el-radio v-for="item in liveTalkDuration" v-bind="item" :key="item.value"></el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-form> </el-form>
......
import httpRequest from '@/utils/axios' import httpRequest from '@/utils/axios'
// 获取实验直播练习的列表 // 获取实验直播的列表
export function getTestList(params?: { export function getTestList(params?: {
live_commodity_id?: string live_commodity_id?: string
live_commodity_type_id?: string live_commodity_type_id?: string
...@@ -9,22 +9,22 @@ export function getTestList(params?: { ...@@ -9,22 +9,22 @@ export function getTestList(params?: {
return httpRequest.get('/api/lab/v1/experiment/live-practice/list', { params }) return httpRequest.get('/api/lab/v1/experiment/live-practice/list', { params })
} }
// 获取实验直播练习详情 // 获取实验直播详情
export function getTest(params: { id: string }) { export function getTest(params: { id: string }) {
return httpRequest.get('/api/lab/v1/experiment/live-practice/detail', { params }) return httpRequest.get('/api/lab/v1/experiment/live-practice/detail', { params })
} }
// 创建实验直播练习 // 创建实验直播
export function createTest(data: { pid: string; name: string; status: string }) { export function createTest(data: { pid: string; name: string; status: string }) {
return httpRequest.post('/api/lab/v1/experiment/live-practice/create', data) return httpRequest.post('/api/lab/v1/experiment/live-practice/create', data)
} }
// 更新实验直播练习详情 // 更新实验直播详情
export function updateTest(data: { id: string; name: string; status: string }) { export function updateTest(data: { id: string; name: string; status: string }) {
return httpRequest.post('/api/lab/v1/experiment/live-practice/update', data) return httpRequest.post('/api/lab/v1/experiment/live-practice/update', data)
} }
// 删除实验直播练习 // 删除实验直播
export function deleteTest(data: { id: string }) { export function deleteTest(data: { id: string }) {
return httpRequest.post('/api/lab/v1/experiment/live-practice/delete', data) return httpRequest.post('/api/lab/v1/experiment/live-practice/delete', data)
} }
...@@ -39,7 +39,7 @@ export function getTalkList(params?: { ...@@ -39,7 +39,7 @@ export function getTalkList(params?: {
return httpRequest.get('/api/lab/v1/experiment/live-speeches/list', { params }) return httpRequest.get('/api/lab/v1/experiment/live-speeches/list', { params })
} }
// 更新实验直播练习详情 // 更新实验直播详情
export function saveTestRecord(data: { export function saveTestRecord(data: {
id?: string id?: string
live_practice_id: string live_practice_id: string
......
<script setup> <script setup>
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
import { liveTestDuration, liveTestUploadWay } from '@/utils/dictionary'
import LiveProductSelect from '@/components/LiveProductSelect.vue' import LiveProductSelect from '@/components/LiveProductSelect.vue'
import { createTest, updateTest, getTalkList } from '../api' import { createTest, updateTest, getTalkList } from '../api'
import { useMapStore } from '@/stores/map'
const props = defineProps(['data']) const props = defineProps(['data'])
const emit = defineEmits(['update', 'update:modelValue']) const emit = defineEmits(['update', 'update:modelValue'])
const liveDuration = useMapStore().getMapValuesByKey('live_duration')
const liveUploadWay = useMapStore().getMapValuesByKey('live_upload_way')
const isUpdate = computed(() => !!props.data?.id) const isUpdate = computed(() => !!props.data?.id)
const title = computed(() => (isUpdate.value ? '编辑直播练习' : '添加直播练习')) const title = computed(() => (isUpdate.value ? '编辑直播' : '添加直播'))
const formRef = ref() const formRef = ref()
const form = reactive({ const form = reactive({
live_commodity_id: '', live_commodity_id: '',
live_speech_id: '', live_speech_id: '',
duration: '10', duration: liveDuration[0]?.value || '10',
upload_way: '2', upload_way: liveUploadWay[0]?.value || '2',
}) })
const rules = ref({ const rules = ref({
...@@ -71,17 +74,14 @@ async function handleUpdate() { ...@@ -71,17 +74,14 @@ async function handleUpdate() {
<el-option v-for="item in options" :key="item.id" :label="item.name" :value="item.id"></el-option> <el-option v-for="item in options" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="选择练习时长" prop="duration"> <el-form-item label="选择直播时长" prop="duration">
<el-radio-group v-model="form.duration"> <el-radio-group v-model="form.duration">
<el-radio v-for="item in liveTestDuration" v-bind="item" :key="item.value"></el-radio> <el-radio v-for="item in liveDuration" v-bind="item" :key="item.value"></el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="直播练习上传方式" prop="upload_way"> <el-form-item label="直播视频上传方式" prop="upload_way">
<el-radio-group v-model="form.upload_way"> <el-radio-group v-model="form.upload_way">
<el-radio <el-radio v-for="item in liveUploadWay" v-bind="item" :key="item.value"></el-radio>
v-for="item in liveTestUploadWay.filter((item) => item.value == 2)"
v-bind="item"
:key="item.value"></el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-form> </el-form>
......
...@@ -173,7 +173,7 @@ defineExpose({ enabled, start, stop }) ...@@ -173,7 +173,7 @@ defineExpose({ enabled, start, stop })
style="width: 80%" style="width: 80%"
@click="enabled ? stop() : start()" @click="enabled ? stop() : start()"
v-if="!recordId"> v-if="!recordId">
{{ enabled ? '结束直播练习' : '开始练习' }} {{ enabled ? '结束直播' : '开始直播' }}
</el-button> </el-button>
<el-button <el-button
type="primary" type="primary"
......
...@@ -41,7 +41,7 @@ const listOptions = { ...@@ -41,7 +41,7 @@ const listOptions = {
</script> </script>
<template> <template>
<el-dialog title="选择直播练习场次"> <el-dialog title="查看历史直播场次">
<AppList v-bind="listOptions" ref="appList"> <AppList v-bind="listOptions" ref="appList">
<template #table-x="{ row }"> <template #table-x="{ row }">
<el-button text type="primary"> <el-button text type="primary">
......
...@@ -33,7 +33,7 @@ async function fetchInfo() { ...@@ -33,7 +33,7 @@ async function fetchInfo() {
timeLeft.value = duration.value timeLeft.value = duration.value
} }
watchEffect(() => { watchEffect(() => {
fetchInfo() !props.isView && fetchInfo()
}) })
// 商品卖点 // 商品卖点
...@@ -57,7 +57,10 @@ const stats = computed(() => { ...@@ -57,7 +57,10 @@ const stats = computed(() => {
const fetchRecord = async () => { const fetchRecord = async () => {
const res = await getRecord({ id: route.query.record_id }) const res = await getRecord({ id: route.query.record_id })
record.value = { ...res.data.detail, live_info: JSON.parse(res.data.detail.live_info) } const resDetail = res.data.detail
record.value = { ...resDetail, live_info: JSON.parse(resDetail.live_info) }
detail.value = resDetail.live_practice_info
timeLeft.value = duration.value
} }
onMounted(() => { onMounted(() => {
props.isView && fetchRecord() props.isView && fetchRecord()
...@@ -65,7 +68,7 @@ onMounted(() => { ...@@ -65,7 +68,7 @@ onMounted(() => {
</script> </script>
<template> <template>
<AppCard title="直播练习" full> <AppCard :title="isView ? '查看历史直播详情' : '直播'" full>
<div class="live-row"> <div class="live-row">
<div class="live-col"> <div class="live-col">
<template v-if="isView"> <template v-if="isView">
......
...@@ -2,7 +2,10 @@ ...@@ -2,7 +2,10 @@
import { ElMessageBox, ElMessage } from 'element-plus' import { ElMessageBox, ElMessage } from 'element-plus'
import LiveProductCategory from '@/components/LiveProductCategory.vue' import LiveProductCategory from '@/components/LiveProductCategory.vue'
import { getTestList, deleteTest } from '../api' import { getTestList, deleteTest } from '../api'
import { getNameByValue, liveTestUploadWay } from '@/utils/dictionary' import { getNameByValue } from '@/utils/dictionary'
import { useMapStore } from '@/stores/map'
const liveUploadWay = useMapStore().getMapValuesByKey('live_upload_way')
const FormDialog = defineAsyncComponent(() => import('../components/FormDialog.vue')) const FormDialog = defineAsyncComponent(() => import('../components/FormDialog.vue'))
const RecordDialog = defineAsyncComponent(() => import('../components/RecordDialog.vue')) const RecordDialog = defineAsyncComponent(() => import('../components/RecordDialog.vue'))
...@@ -41,7 +44,7 @@ const listOptions = computed(() => { ...@@ -41,7 +44,7 @@ const listOptions = computed(() => {
label: '上传方式', label: '上传方式',
prop: 'upload_way', prop: 'upload_way',
computed({ row }) { computed({ row }) {
return getNameByValue(row.upload_way, liveTestUploadWay) return getNameByValue(row.upload_way, liveUploadWay)
}, },
}, },
{ label: '更新时间', prop: 'updated_time' }, { label: '更新时间', prop: 'updated_time' },
...@@ -68,17 +71,17 @@ const handleRemove = async (row) => { ...@@ -68,17 +71,17 @@ const handleRemove = async (row) => {
</script> </script>
<template> <template>
<AppCard title="直播练习"> <AppCard title="我的直播">
<AppList v-bind="listOptions" ref="appList"> <AppList v-bind="listOptions" ref="appList">
<template #header-buttons> <template #header-buttons>
<el-button type="primary" @click="formVisible = true">添加直播练习</el-button> <el-button type="primary" @click="formVisible = true">添加直播</el-button>
</template> </template>
<template #filter-category> <template #filter-category>
<LiveProductCategory v-model="listParams.live_commodity_type_id" @change="handleRefresh"></LiveProductCategory> <LiveProductCategory v-model="listParams.live_commodity_type_id" @change="handleRefresh"></LiveProductCategory>
</template> </template>
<template #table-x="{ row }"> <template #table-x="{ row }">
<el-button text type="primary"> <el-button text type="primary">
<router-link :to="{ path: 'test/demo', query: { id: row.id } }">练习</router-link> <router-link :to="{ path: 'test/demo', query: { id: row.id } }">开始直播</router-link>
</el-button> </el-button>
<el-button text type="primary" @click="handelView(row)">查看</el-button> <el-button text type="primary" @click="handelView(row)">查看</el-button>
<el-button text type="primary" @click="handleRemove(row)">删除</el-button> <el-button text type="primary" @click="handleRemove(row)">删除</el-button>
......
...@@ -172,7 +172,7 @@ const studentMenus: IMenuItem[] = [ ...@@ -172,7 +172,7 @@ const studentMenus: IMenuItem[] = [
icon: markRaw(IconLiveProductManagement), icon: markRaw(IconLiveProductManagement),
}, },
{ id: 24, name: '直播话术管理', path: '/live/talk', icon: markRaw(IconLiveTalk) }, { id: 24, name: '直播话术管理', path: '/live/talk', icon: markRaw(IconLiveTalk) },
{ id: 25, name: '直播练习', path: '/live/test', icon: markRaw(IconLiveTest) }, { id: 25, name: '直播', path: '/live/test', icon: markRaw(IconLiveTest) },
], ],
}, },
{ {
...@@ -339,7 +339,7 @@ const adminMenus: IMenuItem[] = [ ...@@ -339,7 +339,7 @@ const adminMenus: IMenuItem[] = [
{ id: 22, name: '商品属性管理', path: '/live/product/attr', icon: markRaw(IconLiveProductAttr) }, { id: 22, name: '商品属性管理', path: '/live/product/attr', icon: markRaw(IconLiveProductAttr) },
{ id: 23, name: '商品管理', path: '/live/product/management', icon: markRaw(IconLiveProductManagement) }, { id: 23, name: '商品管理', path: '/live/product/management', icon: markRaw(IconLiveProductManagement) },
{ id: 24, name: '直播话术管理', path: '/live/talk', icon: markRaw(IconLiveTalk) }, { id: 24, name: '直播话术管理', path: '/live/talk', icon: markRaw(IconLiveTalk) },
{ id: 25, name: '直播练习', path: '/live/test', icon: markRaw(IconLiveTest) }, { id: 25, name: '直播', path: '/live/test', icon: markRaw(IconLiveTest) },
], ],
}, },
{ {
......
...@@ -156,14 +156,14 @@ export const textPurposeList = [ ...@@ -156,14 +156,14 @@ export const textPurposeList = [
{ label: '短视频脚本 ', value: '3' }, { label: '短视频脚本 ', value: '3' },
] ]
// 直播练习时长 // 直播时长
export const liveTestDuration = [ export const liveTestDuration = [
{ label: '10分钟', value: '10' }, { label: '10分钟', value: '10' },
{ label: '15分钟 ', value: '15' }, { label: '15分钟 ', value: '15' },
{ label: '20分钟 ', value: '20' }, { label: '20分钟 ', value: '20' },
] ]
// 直播练习时长 // 直播时长
export const liveTestUploadWay = [ export const liveTestUploadWay = [
{ label: '实时上传', value: '1' }, { label: '实时上传', value: '1' },
{ label: '本地上传', value: '2' }, { label: '本地上传', value: '2' },
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论