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

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

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