Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
S
saas-dml
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
EzijingWeb
saas-dml
Commits
cdf9c380
提交
cdf9c380
authored
11月 19, 2025
作者:
王鹏飞
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
chore: update
上级
eb0b4cc7
显示空白字符变更
内嵌
并排
正在显示
17 个修改的文件
包含
145 行增加
和
250 行删除
+145
-250
FormGraphicInfo.vue
...es/live/product/management/components/FormGraphicInfo.vue
+1
-1
ImageDesign.vue
...odules/live/product/management/components/ImageDesign.vue
+12
-4
api.ts
src/modules/live/score/api.ts
+0
-189
api.ts
src/modules/score/api.ts
+26
-0
CompetitionLive.vue
src/modules/score/components/CompetitionLive.vue
+10
-10
CompetitionLiveProd.vue
src/modules/score/components/CompetitionLiveProd.vue
+10
-10
CompetitionOperations.vue
src/modules/score/components/CompetitionOperations.vue
+3
-3
ModuleCard.vue
src/modules/score/components/ModuleCard.vue
+0
-0
ScoreCard.vue
src/modules/score/components/ScoreCard.vue
+0
-0
ScoreCardLive.vue
src/modules/score/components/ScoreCardLive.vue
+2
-2
ScoreCardSub.vue
src/modules/score/components/ScoreCardSub.vue
+0
-0
index.ts
src/modules/score/index.ts
+8
-0
prompt.ts
src/modules/score/prompt.ts
+3
-9
prompt2.ts
src/modules/score/prompt2.ts
+3
-9
Index.vue
src/modules/score/views/Index.vue
+61
-9
View.vue
src/modules/score/views/View.vue
+5
-3
menu.ts
src/stores/menu.ts
+1
-1
没有找到文件。
src/modules/live/product/management/components/FormGraphicInfo.vue
浏览文件 @
cdf9c380
...
...
@@ -51,7 +51,7 @@ const handleCopy = () => {
</div>
</div>
</el-form-item>
<el-form-item
label=
"主图视频"
>
<el-form-item
label=
"主图视频"
v-if=
"false"
>
<div
class=
"form-tips"
>
有机会在搜索、推荐等场景展示,提升转化
</div>
<Upload
v-model=
"form.video_url"
accept=
"video/*"
tips=
"主图视频"
isVideo
></Upload>
<div
class=
"upload-tips"
style=
"margin-left: 20px"
>
...
...
src/modules/live/product/management/components/ImageDesign.vue
浏览文件 @
cdf9c380
...
...
@@ -11,10 +11,17 @@ const userStore = useUserStore()
const
designVisible
=
ref
(
false
)
const
data
=
reactive
({
list
:
[],
count
:
0
,
list
:
[
{
designId
:
1
,
thumbUrl
:
'https://webapp-pub.ezijing.com/upload/saas-dml-pro/design/1.JPG'
},
{
designId
:
2
,
thumbUrl
:
'https://webapp-pub.ezijing.com/upload/saas-dml-pro/design/2.JPG'
},
{
designId
:
3
,
thumbUrl
:
'https://webapp-pub.ezijing.com/upload/saas-dml-pro/design/3.JPG'
},
{
designId
:
4
,
thumbUrl
:
'https://webapp-pub.ezijing.com/upload/saas-dml-pro/design/4.JPG'
},
{
designId
:
5
,
thumbUrl
:
'https://webapp-pub.ezijing.com/upload/saas-dml-pro/design/5.JPG'
},
{
designId
:
6
,
thumbUrl
:
'https://webapp-pub.ezijing.com/upload/saas-dml-pro/design/6.JPG'
},
],
})
async
function
fetchList
()
{
return
false
const
res
=
await
getChuanKitDesignList
({
user_flag
:
userStore
.
user
.
id
,
kind_id
:
29
,
...
...
@@ -46,7 +53,7 @@ async function handleSubmit() {
<
template
>
<el-dialog
title=
"图库选择"
:close-on-click-modal=
"false"
@
closed=
"$emit('update:modelValue', false)"
width=
"860px"
>
<div
class=
"image-design"
>
<el-button
type=
"primary"
@
click=
"designVisible = true"
>
打开编辑器
</el-button>
<el-button
type=
"primary"
@
click=
"designVisible = true"
v-if=
"false"
>
打开编辑器
</el-button>
<ul>
<li
v-for=
"item in data.list"
...
...
@@ -73,7 +80,6 @@ async function handleSubmit() {
margin
:
30px
auto
;
display
:
flex
;
flex-wrap
:
wrap
;
align-items
:
center
;
gap
:
30px
;
}
li
{
...
...
@@ -88,6 +94,8 @@ async function handleSubmit() {
}
img
{
width
:
100%
;
height
:
100%
;
object-fit
:
cover
;
}
}
</
style
>
src/modules/live/score/api.ts
deleted
100644 → 0
浏览文件 @
eb0b4cc7
import
httpRequest
from
'@/utils/axios'
// 获取直播成绩详情
export
function
getScoreDetail
(
params
?:
{
id
:
string
})
{
// return {
// code: 0,
// message: 'OK',
// data: {
// detail: {
// id: '7391764086012248064',
// experiment_id: '7028276368903241728',
// student_id: '6954620265695281152',
// sso_id: '6911878751345180672',
// status: '1',
// commit_time: '2025-11-05 17:28:21',
// total_score: null,
// score_details: null,
// checker_id: '6911878751345180672',
// check_time: null,
// comment: null,
// created_time: '2025-11-05 17:11:30',
// updated_time: '2025-11-05 17:28:22',
// student_name: '李四',
// specialty_id: '6961130172380610560',
// specialty_name: '2023大赛专业',
// class_id: '6963792833715109888',
// class_name: '陈双喜测试3',
// status_name: '已提交',
// live_data: {
// commodity_types: [
// {
// id: '7391776484496506880',
// experiment_id: '7028276368903241728',
// name: 'abc',
// pid: '0',
// level: '0',
// status: '1',
// created_operator: '6911878751345180672',
// updated_operator: '6911878751345180672',
// created_time: '2025-11-05 18:00:46',
// updated_time: '2025-11-05 18:00:46',
// children: [
// {
// id: '7391776536967249920',
// experiment_id: '7028276368903241728',
// name: 'qwe',
// pid: '7391776484496506880',
// level: '1',
// status: '1',
// created_operator: '6911878751345180672',
// updated_operator: '6911878751345180672',
// created_time: '2025-11-05 18:00:58',
// updated_time: '2025-11-05 18:00:58',
// children: [],
// },
// ],
// },
// ],
// commodity_attrs: [
// {
// id: '7391778517379186688',
// experiment_id: '7028276368903241728',
// name: '123',
// live_commodity_type_id: '7260532289816231936',
// is_importance: '0',
// is_essential: '0',
// status: '1',
// created_operator: '6911878751345180672',
// updated_operator: '6911878751345180672',
// created_time: '2025-11-05 18:08:51',
// updated_time: '2025-11-05 18:08:51',
// live_commodity_type_full_name: '男装',
// },
// ],
// commodities: [
// {
// id: '7391773963229069312',
// experiment_id: '7028276368903241728',
// live_commodity_type_id: '7260533071559000064',
// title: '商品标题',
// shopping_guide_short_title: '导购短标题',
// live_commodity_attrs:
// '{"importance_attrs": [{"id": "7260540571196850176", "value": "L", "attr_name": "大小"}], "unimportance_attrs": [{"id": "7260539754020601856", "value": "黑色", "attr_name": "颜色"}, {"id": "7260540486702596096", "value": "123", "attr_name": "功能"}]}',
// picture_addreses:
// '[{"url": "https://webapp-pub.ezijing.com/upload/saas-lab/8e04b573ec12b658b2584f56d3272c37.png", "name": "image-14_d89dc93.png", "size": 1241703, "type": "image/png", "upload_time": "2025-11-05 17:50:13"}, {"url": "https://webapp-pub.ezijing.com/upload/saas-lab/e2ac8faee61cea295917892170209916.jpg", "name": "p2371864015.jpg", "size": 463116, "type": "image/jpeg", "upload_time": "2025-11-06 13:17:42"}, {"url": "https://webapp-pub.ezijing.com/upload/saas-lab/5d9354ef327f9565f49f13649dc4d6d8.jpg", "name": "p2517001827.jpg", "size": 112763, "type": "image/jpeg", "upload_time": "2025-11-06 13:17:46"}, {"url": "https://webapp-pub.ezijing.com/upload/saas-lab/9618c22ecdc19c135f13554f108685a6.jpg", "name": "p2517001827.jpg", "size": 112763, "type": "image/jpeg", "upload_time": "2025-11-06 13:18:03"}, {"url": "https://webapp-pub.ezijing.com/upload/saas-lab/c52d0fd3ff52db3e03950455345db338.jpeg", "name": "Bliss.jpeg", "size": 1028346, "type": "image/jpeg", "upload_time": "2025-11-06 13:18:14"}]',
// picture_34_addreses:
// '[{"url": "https://webapp-pub.ezijing.com/upload/saas-lab/8e04b573ec12b658b2584f56d3272c37.png", "name": "image-14_d89dc93.png", "size": 1241703, "type": "image/png", "upload_time": "2025-11-05 17:50:13"}, {"url": "https://webapp-pub.ezijing.com/upload/saas-lab/e2ac8faee61cea295917892170209916.jpg", "name": "p2371864015.jpg", "size": 463116, "type": "image/jpeg", "upload_time": "2025-11-06 13:17:42"}, {"url": "https://webapp-pub.ezijing.com/upload/saas-lab/5d9354ef327f9565f49f13649dc4d6d8.jpg", "name": "p2517001827.jpg", "size": 112763, "type": "image/jpeg", "upload_time": "2025-11-06 13:17:46"}, {"url": "https://webapp-pub.ezijing.com/upload/saas-lab/9618c22ecdc19c135f13554f108685a6.jpg", "name": "p2517001827.jpg", "size": 112763, "type": "image/jpeg", "upload_time": "2025-11-06 13:18:03"}, {"url": "https://webapp-pub.ezijing.com/upload/saas-lab/c52d0fd3ff52db3e03950455345db338.jpeg", "name": "Bliss.jpeg", "size": 1028346, "type": "image/jpeg", "upload_time": "2025-11-06 13:18:14"}]',
// video_url: 'https://webapp-pub.ezijing.com/upload/saas-lab/f267dffd02eec005f922699ec69bbd47.mp4',
// info: '{"sku": [{"price": "100", "specs": ["黑色", "L"], "stock": 200}, {"price": "100", "specs": ["黑色", "M"], "stock": 200}, {"price": "100", "specs": ["白色", "L"], "stock": 200}, {"price": "100", "specs": ["白色", "M"], "stock": 200}], "specs": [{"name": "颜色", "values": ["黑色", "白色"]}, {"name": "大小", "values": ["L", "M"]}], "delivery_mode": "1", "delivery_time": "1", "reference_price": "100", "order_stock_count": "1", "shipping_template": "1", "after_sales_policy": "3"}',
// created_operator: '6911878751345180672',
// updated_operator: '6602032005293015040',
// created_time: '2025-11-05 17:50:45',
// updated_time: '2025-11-06 13:18:55',
// live_commodity_type_full_name: '男装/短裤',
// },
// ],
// speeches: [
// {
// id: '7391774388816707584',
// experiment_id: '7028276368903241728',
// name: '123',
// live_commodity_id: '7391773963229069312',
// selling_point:
// '商品标题:智能恒温电热水壶 \n\n卖点:精准控温;一键烧水;防干烧保护;304不锈钢内胆;大容量设计;静音沸腾',
// marketing_campaign:
// '商品标题:智能恒温保温杯——喝出健康好温度 \n\n精准控温,暖你每一刻; \n职场精英专属礼遇; \n24小时锁温挑战赛; \n买一赠一限时抢; \n直播间秒杀半价起',
// duration: '15',
// content:
// ' <p>\n <span\n style="\n padding: 0 5px;\n display: inline-block;\n background-color: rgba(25, 102, 255, 0.08);\n color: rgb(25, 102, 255);\n "\n >1.开场欢迎:</span>\n </p>\n <p>\n "大家好,欢迎来到我的直播间!我是[你的名字],今天我们将一起分享/探讨/体验[直播主题]。如果你喜欢我们今天的内容,别忘了点赞和关注哦!"\n </p>\n <p>\n <span\n style="\n padding: 0 5px;\n display: inline-block;\n background-color: rgba(25, 102, 255, 0.08);\n color: rgb(25, 102, 255);\n "\n >2.互动提问:</span>\n </p>\n <p>\n "我看到评论区有很多小伙伴在问我关于[话题]的问题,我现在就来一一为大家解答。如果你也有问题,可以在评论区留言,我会尽快回复大家!"\n </p>\n <p>\n <span\n style="\n padding: 0 5px;\n display: inline-block;\n background-color: rgba(25, 102, 255, 0.08);\n color: rgb(25, 102, 255);\n "\n >3.产品介绍:</span>\n </p>\n <p>\n "接下来我要给大家介绍的这款产品,它的特点是[特点],使用起来非常[方便/舒适/有效]。我自己也是它的忠实粉丝,今天就来给大家详细展示一下它的使用方法和效果。"\n </p>\n <p>\n <span\n style="\n padding: 0 5px;\n display: inline-block;\n background-color: rgba(25, 102, 255, 0.08);\n color: rgb(25, 102, 255);\n "\n >4.引导互动:</span>\n </p>\n <p>\n "我知道大家都很聪明,那么我来出一个小问题考考大家,第一个答对的小伙伴将获得我们的小礼物一份,准备好了吗?问题是……"\n </p>',
// created_operator: '6911878751345180672',
// updated_operator: '6911878751345180672',
// created_time: '2025-11-05 17:52:26',
// updated_time: '2025-11-05 17:52:26',
// live_commodity_title: '商品标题',
// live_commodity_type_full_name: '男装/短裤',
// },
// ],
// practices: [
// {
// id: '7391774560946749440',
// experiment_id: '7028276368903241728',
// live_commodity_id: '7391773963229069312',
// live_speech_id: '7391774388816707584',
// duration: '2',
// upload_way: '1',
// created_operator: '6911878751345180672',
// updated_operator: '6911878751345180672',
// created_time: '2025-11-05 17:53:07',
// updated_time: '2025-11-05 17:53:07',
// live_commodity_title: '商品标题',
// live_commodity_type_full_name: '男装/短裤',
// },
// ],
// practice_records: [
// {
// id: '7391774604890472448',
// live_practice_id: '7391774560946749440',
// live_practice_info:
// '{"id": "7391774560946749440", "duration": "2", "upload_way": "1", "live_speech": {"id": "7391774388816707584", "name": "123", "content": " <p>\\n <span\\n style=\\"\\n padding: 0 5px;\\n display: inline-block;\\n background-color: rgba(25, 102, 255, 0.08);\\n color: rgb(25, 102, 255);\\n \\"\\n >1.开场欢迎:</span>\\n </p>\\n <p>\\n \\"大家好,欢迎来到我的直播间!我是[你的名字],今天我们将一起分享/探讨/体验[直播主题]。如果你喜欢我们今天的内容,别忘了点赞和关注哦!\\"\\n </p>\\n <p>\\n <span\\n style=\\"\\n padding: 0 5px;\\n display: inline-block;\\n background-color: rgba(25, 102, 255, 0.08);\\n color: rgb(25, 102, 255);\\n \\"\\n >2.互动提问:</span>\\n </p>\\n <p>\\n \\"我看到评论区有很多小伙伴在问我关于[话题]的问题,我现在就来一一为大家解答。如果你也有问题,可以在评论区留言,我会尽快回复大家!\\"\\n </p>\\n <p>\\n <span\\n style=\\"\\n padding: 0 5px;\\n display: inline-block;\\n background-color: rgba(25, 102, 255, 0.08);\\n color: rgb(25, 102, 255);\\n \\"\\n >3.产品介绍:</span>\\n </p>\\n <p>\\n \\"接下来我要给大家介绍的这款产品,它的特点是[特点],使用起来非常[方便/舒适/有效]。我自己也是它的忠实粉丝,今天就来给大家详细展示一下它的使用方法和效果。\\"\\n </p>\\n <p>\\n <span\\n style=\\"\\n padding: 0 5px;\\n display: inline-block;\\n background-color: rgba(25, 102, 255, 0.08);\\n color: rgb(25, 102, 255);\\n \\"\\n >4.引导互动:</span>\\n </p>\\n <p>\\n \\"我知道大家都很聪明,那么我来出一个小问题考考大家,第一个答对的小伙伴将获得我们的小礼物一份,准备好了吗?问题是……\\"\\n </p>", "duration": "15", "created_time": "2025-11-05 17:52:26", "updated_time": "2025-11-05 17:52:26", "experiment_id": "7028276368903241728", "selling_point": "商品标题:智能恒温电热水壶 \\n\\n卖点:精准控温;一键烧水;防干烧保护;304不锈钢内胆;大容量设计;静音沸腾", "created_operator": {"id": "6911878751345180672", "avatar": "", "nickname": "李四", "username": "ZJ_6911878751345180672", "real_name": "李四"}, "updated_operator": {"id": "6911878751345180672", "avatar": "", "nickname": "李四", "username": "ZJ_6911878751345180672", "real_name": "李四"}, "live_commodity_id": "7391773963229069312", "marketing_campaign": "商品标题:智能恒温保温杯——喝出健康好温度 \\n\\n精准控温,暖你每一刻; \\n职场精英专属礼遇; \\n24小时锁温挑战赛; \\n买一赠一限时抢; \\n直播间秒杀半价起", "live_commodity_title": "商品标题", "live_commodity_type_id": "7260533071559000064", "live_commodity_type_name": "短裤", "live_commodity_type_full_name": "男装 > 短裤"}, "created_time": "2025-11-05 17:53:07", "current_user": {"id": "6911878751345180672", "avatar": "", "nickname": "李四", "username": "ZJ_6911878751345180672", "real_name": "李四"}, "updated_time": "2025-11-05 17:53:07", "experiment_id": "7028276368903241728", "live_commodity": {"id": "7391773963229069312", "info": "{\\"sku\\": [{\\"price\\": \\"100\\", \\"specs\\": [\\"黑色\\"], \\"stock\\": 290}], \\"specs\\": [{\\"name\\": \\"颜色\\", \\"values\\": [\\"黑色\\"]}], \\"delivery_mode\\": \\"1\\", \\"delivery_time\\": \\"1\\", \\"reference_price\\": \\"100\\", \\"order_stock_count\\": \\"1\\", \\"shipping_template\\": \\"1\\", \\"after_sales_policy\\": \\"3\\"}", "title": "商品标题", "video_url": "", "created_time": "2025-11-05 17:50:45", "updated_time": "2025-11-05 17:50:45", "experiment_id": "7028276368903241728", "created_operator": {"id": "6911878751345180672", "avatar": "", "nickname": "李四", "username": "ZJ_6911878751345180672", "real_name": "李四"}, "picture_addreses": "[{\\"url\\": \\"https://webapp-pub.ezijing.com/upload/saas-lab/8e04b573ec12b658b2584f56d3272c37.png\\", \\"name\\": \\"image-14_d89dc93.png\\", \\"size\\": 1241703, \\"type\\": \\"image/png\\", \\"upload_time\\": \\"2025-11-05 17:50:13\\"}]", "updated_operator": {"id": "6911878751345180672", "avatar": "", "nickname": "李四", "username": "ZJ_6911878751345180672", "real_name": "李四"}, "picture_34_addreses": "[{\\"url\\": \\"https://webapp-pub.ezijing.com/upload/saas-lab/8e04b573ec12b658b2584f56d3272c37.png\\", \\"name\\": \\"image-14_d89dc93.png\\", \\"size\\": 1241703, \\"type\\": \\"image/png\\", \\"upload_time\\": \\"2025-11-05 17:50:13\\"}]", "live_commodity_attrs": "{\\"importance_attrs\\": [{\\"id\\": \\"7260540571196850176\\", \\"value\\": \\"L\\", \\"attr_name\\": \\"大小\\"}], \\"unimportance_attrs\\": [{\\"id\\": \\"7260539754020601856\\", \\"value\\": \\"黑色\\", \\"attr_name\\": \\"颜色\\"}]}", "live_commodity_type_id": "7260533071559000064", "live_commodity_type_name": "短裤", "shopping_guide_short_title": "导购短标题", "live_commodity_type_full_name": "男装 > 短裤"}, "live_speech_id": "7391774388816707584", "practice_count": 0, "created_operator": {"id": "6911878751345180672", "avatar": "", "nickname": "李四", "username": "ZJ_6911878751345180672", "real_name": "李四"}, "updated_operator": {"id": "6911878751345180672", "avatar": "", "nickname": "李四", "username": "ZJ_6911878751345180672", "real_name": "李四"}, "live_commodity_id": "7391773963229069312", "live_commodity_type_id": "7260533071559000064", "live_commodity_type_name": "短裤", "live_commodity_type_full_name": "男装 > 短裤"}',
// live_speech_info:
// '{"id": "7391774388816707584", "name": "123", "content": " <p>\\n <span\\n style=\\"\\n padding: 0 5px;\\n display: inline-block;\\n background-color: rgba(25, 102, 255, 0.08);\\n color: rgb(25, 102, 255);\\n \\"\\n >1.开场欢迎:</span>\\n </p>\\n <p>\\n \\"大家好,欢迎来到我的直播间!我是[你的名字],今天我们将一起分享/探讨/体验[直播主题]。如果你喜欢我们今天的内容,别忘了点赞和关注哦!\\"\\n </p>\\n <p>\\n <span\\n style=\\"\\n padding: 0 5px;\\n display: inline-block;\\n background-color: rgba(25, 102, 255, 0.08);\\n color: rgb(25, 102, 255);\\n \\"\\n >2.互动提问:</span>\\n </p>\\n <p>\\n \\"我看到评论区有很多小伙伴在问我关于[话题]的问题,我现在就来一一为大家解答。如果你也有问题,可以在评论区留言,我会尽快回复大家!\\"\\n </p>\\n <p>\\n <span\\n style=\\"\\n padding: 0 5px;\\n display: inline-block;\\n background-color: rgba(25, 102, 255, 0.08);\\n color: rgb(25, 102, 255);\\n \\"\\n >3.产品介绍:</span>\\n </p>\\n <p>\\n \\"接下来我要给大家介绍的这款产品,它的特点是[特点],使用起来非常[方便/舒适/有效]。我自己也是它的忠实粉丝,今天就来给大家详细展示一下它的使用方法和效果。\\"\\n </p>\\n <p>\\n <span\\n style=\\"\\n padding: 0 5px;\\n display: inline-block;\\n background-color: rgba(25, 102, 255, 0.08);\\n color: rgb(25, 102, 255);\\n \\"\\n >4.引导互动:</span>\\n </p>\\n <p>\\n \\"我知道大家都很聪明,那么我来出一个小问题考考大家,第一个答对的小伙伴将获得我们的小礼物一份,准备好了吗?问题是……\\"\\n </p>", "duration": "15", "created_time": "2025-11-05 17:52:26", "updated_time": "2025-11-05 17:52:26", "experiment_id": "7028276368903241728", "selling_point": "商品标题:智能恒温电热水壶 \\n\\n卖点:精准控温;一键烧水;防干烧保护;304不锈钢内胆;大容量设计;静音沸腾", "created_operator": {"id": "6911878751345180672", "avatar": "", "nickname": "李四", "username": "ZJ_6911878751345180672", "real_name": "李四"}, "updated_operator": {"id": "6911878751345180672", "avatar": "", "nickname": "李四", "username": "ZJ_6911878751345180672", "real_name": "李四"}, "live_commodity_id": "7391773963229069312", "marketing_campaign": "商品标题:智能恒温保温杯——喝出健康好温度 \\n\\n精准控温,暖你每一刻; \\n职场精英专属礼遇; \\n24小时锁温挑战赛; \\n买一赠一限时抢; \\n直播间秒杀半价起", "live_commodity_title": "商品标题", "live_commodity_type_id": "7260533071559000064", "live_commodity_type_name": "短裤", "live_commodity_type_full_name": "男装 > 短裤"}',
// live_video_addres:
// 'https://saas-lab-api.ezijing.com/files/c7092077591b3df475519e01699b6814_RTC6911878751345180672.mp4?file_path=/var/log/files&file_name=c7092077591b3df475519e01699b6814_RTC6911878751345180672.mp4',
// live_video_size: '2014426',
// live_duration: '5.828',
// live_start_time: '2025-11-05 17:53:12',
// live_end_time: '2025-11-05 17:53:18',
// live_info:
// '{"messages":[{"id":"YbtQN7yD5oe3-wA0FjhhC","currentTime":0,"timestamp":1762336392207,"type":"join","content":"来了","user":{"id":"HFgs","name":"用户_HFgs","avatar":"/live/avatar/7.jpeg"}},{"id":"Mln7LgSBbvEx_XtVXy15Q","currentTime":0,"timestamp":1762336392207,"type":"join","content":"来了","user":{"id":"mlHf","name":"用户_mlHf","avatar":"/live/avatar/5.jpeg"}},{"id":"KQqGQrzswDS7Kqslv2ehH","currentTime":0,"timestamp":1762336392207,"type":"join","content":"来了","user":{"id":"cAgU","name":"用户_cAgU","avatar":"/live/avatar/5.jpeg"}},{"id":"_xwOtqDqHdE9qsjrtwDkd","currentTime":0,"timestamp":1762336392207,"type":"join","content":"来了","user":{"id":"v-97","name":"用户_v-97","avatar":"/live/avatar/2.png"}},{"id":"p61DenOIpJssCZsAd46ul","currentTime":0,"timestamp":1762336392208,"type":"join","content":"来了","user":{"id":"EDAF","name":"用户_EDAF","avatar":"/live/avatar/10.jpeg"}},{"id":"0kSeTddyKldULi33wesJi","currentTime":0,"timestamp":1762336392208,"type":"join","content":"来了","user":{"id":"sfQv","name":"用户_sfQv","avatar":"/live/avatar/8.jpeg"}},{"id":"heTJzjNaC__5b4apX9GeL","currentTime":0,"timestamp":1762336392208,"type":"join","content":"来了","user":{"id":"5_NK","name":"用户_5_NK","avatar":"/live/avatar/12.jpeg"}},{"id":"9gip64bh4DlxPzgmi8Xjm","currentTime":0,"timestamp":1762336392208,"type":"join","content":"来了","user":{"id":"rPS_","name":"用户_rPS_","avatar":"/live/avatar/10.jpeg"}},{"id":"xCBphLGgIBEVvv10Ga1Mz","currentTime":0,"timestamp":1762336392208,"type":"join","content":"来了","user":{"id":"EcET","name":"用户_EcET","avatar":"/live/avatar/3.png"}},{"id":"WCNWhvPXqlUvYqmm9SAd9","currentTime":0,"timestamp":1762336392208,"type":"join","content":"来了","user":{"id":"1cN7","name":"用户_1cN7","avatar":"/live/avatar/2.png"}},{"id":"6cYGqIcpfP4rTmSHbEczB","currentTime":0,"timestamp":1762336392208,"type":"join","content":"来了","user":{"id":"KVMb","name":"用户_KVMb","avatar":"/live/avatar/6.jpeg"}},{"id":"BBZJ47KFnZD7tBpM3CTvy","currentTime":0,"timestamp":1762336392208,"type":"join","content":"来了","user":{"id":"UVZb","name":"用户_UVZb","avatar":"/live/avatar/8.jpeg"}},{"id":"AGS5d6hT_5-h48FREVSbR","currentTime":0,"timestamp":1762336392209,"type":"join","content":"来了","user":{"id":"ZjT3","name":"用户_ZjT3","avatar":"/live/avatar/5.jpeg"}},{"id":"HeVYB-kGXJtRXkgcDCn9t","currentTime":0,"timestamp":1762336392209,"type":"join","content":"来了","user":{"id":"Z-8k","name":"用户_Z-8k","avatar":"/live/avatar/2.png"}},{"id":"RQamvgYXWB-EoimcUtSQ9","currentTime":0,"timestamp":1762336392209,"type":"join","content":"来了","user":{"id":"odAe","name":"用户_odAe","avatar":"/live/avatar/5.jpeg"}},{"id":"_7sa7I_Z1_B7U3i6E9vJu","currentTime":0,"timestamp":1762336392209,"type":"join","content":"来了","user":{"id":"xUa1","name":"用户_xUa1","avatar":"/live/avatar/9.jpeg"}},{"id":"5RWpS81g_CsgAjT5sRMRq","currentTime":0,"timestamp":1762336392209,"type":"join","content":"来了","user":{"id":"ZuIy","name":"用户_ZuIy","avatar":"/live/avatar/4.jpeg"}},{"id":"vJI3Ufqe2Fp5ADPTlyc96","currentTime":0,"timestamp":1762336392209,"type":"join","content":"来了","user":{"id":"3y0l","name":"用户_3y0l","avatar":"/live/avatar/5.jpeg"}},{"id":"8lfgCLBIFLRAtXyMqrMsS","currentTime":0,"timestamp":1762336392209,"type":"join","content":"来了","user":{"id":"VEbm","name":"用户_VEbm","avatar":"/live/avatar/10.jpeg"}},{"id":"fUyY7IwDutHxl7UNz0PHa","currentTime":0,"timestamp":1762336392209,"type":"join","content":"来了","user":{"id":"ZT2i","name":"用户_ZT2i","avatar":"/live/avatar/6.jpeg"}},{"id":"e2kiuv-wrT_bc0bBlpw2K","currentTime":0,"timestamp":1762336394210,"type":"join","content":"来了","user":{"id":"L0r5","name":"用户_L0r5","avatar":"/live/avatar/11.jpeg"}},{"id":"hcQbpOM_SEGCAF32_3bzU","currentTime":0,"timestamp":1762336394210,"type":"leave","content":"离开了","user":{"id":"5Wt_","name":"用户_5Wt_","avatar":"/live/avatar/7.jpeg"}},{"id":"wCKi4WczH022nHcRqBgfJ","currentTime":0,"timestamp":1762336394210,"type":"gift","content":"送了一个鲜花","user":{"id":"sfQv","name":"用户_sfQv","avatar":"/live/avatar/8.jpeg"}},{"id":"HnuZoPSlweidAWrDP0_ZX","currentTime":0,"timestamp":1762336394210,"type":"like","content":"点赞了","user":{"id":"ZT2i","name":"用户_ZT2i","avatar":"/live/avatar/6.jpeg"}},{"id":"jSwxXquwtho5QqscuEs9W","currentTime":0,"timestamp":1762336395210,"type":"join","content":"来了","user":{"id":"_VsY","name":"用户__VsY","avatar":"/live/avatar/11.jpeg"}},{"id":"huvyorltBb41DbMdTLoaj","currentTime":0,"timestamp":1762336395210,"type":"leave","content":"离开了","user":{"id":"GlCP","name":"用户_GlCP","avatar":"/live/avatar/13.jpeg"}},{"id":"CL244JXoO5q23h3CsnELz","currentTime":0,"timestamp":1762336395210,"type":"gift","content":"送了一个棒棒糖","user":{"id":"5_NK","name":"用户_5_NK","avatar":"/live/avatar/12.jpeg"}},{"id":"t0CHJdsdEGHTfh5LN-fNg","currentTime":0,"timestamp":1762336395210,"type":"like","content":"点赞了","user":{"id":"sfQv","name":"用户_sfQv","avatar":"/live/avatar/8.jpeg"}},{"id":"BsNRvhbsALKBT459RjMQf","currentTime":0,"timestamp":1762336396210,"type":"join","content":"来了","user":{"id":"i1Nm","name":"用户_i1Nm","avatar":"/live/avatar/11.jpeg"}},{"id":"utBUjGTZNomaoILuU5uru","currentTime":0,"timestamp":1762336396210,"type":"leave","content":"离开了","user":{"id":"9O5E","name":"用户_9O5E","avatar":"/live/avatar/10.jpeg"}},{"id":"t_9tq1iUWK1gK1a96x9-p","currentTime":0,"timestamp":1762336396210,"type":"gift","content":"送了一个兔耳朵","user":{"id":"5_NK","name":"用户_5_NK","avatar":"/live/avatar/12.jpeg"}},{"id":"7o0q2qpigzetPAM5WdVRl","currentTime":0,"timestamp":1762336396210,"type":"like","content":"点赞了","user":{"id":"5_NK","name":"用户_5_NK","avatar":"/live/avatar/12.jpeg"}},{"id":"id2icmHNPMdhBYBv16-he","currentTime":0,"timestamp":1762336397210,"type":"join","content":"来了","user":{"id":"NAmT","name":"用户_NAmT","avatar":"/live/avatar/8.jpeg"}},{"id":"TTFk2PBchwGt19Ed8FY0R","currentTime":0,"timestamp":1762336397210,"type":"leave","content":"离开了","user":{"id":"FbCt","name":"用户_FbCt","avatar":"/live/avatar/1.png"}},{"id":"Cb_7BMjHiqsO99fd12MDO","currentTime":0,"timestamp":1762336397210,"type":"gift","content":"送了一个鲜花","user":{"id":"cAgU","name":"用户_cAgU","avatar":"/live/avatar/5.jpeg"}},{"id":"AsKvB8LYadrgPp1uCbYC1","currentTime":0,"timestamp":1762336397210,"type":"like","content":"点赞了","user":{"id":"odAe","name":"用户_odAe","avatar":"/live/avatar/5.jpeg"}}],"stats":{"totalViewers":24,"peakViewers":24,"totalGifts":4,"totalLikes":4,"totalGiftViewers":4}}',
// created_operator: '6911878751345180672',
// updated_operator: '6911878751345180672',
// created_time: '2025-11-05 17:53:18',
// updated_time: '2025-11-05 17:54:02',
// ai_status: '2',
// ai_level: '',
// subtitle:
// '{"TaskId":"4291bff52d34400fb5c2eb896f2247b1","RequestId":"81457C30-9DD8-56D5-BA11-3343E4431ED2","StatusText":"SUCCESS_WITH_NO_VALID_FRAGMENT","BizDuration":0,"SolveTime":0,"RequestTime":0,"StatusCode":21050003}',
// task_id: '',
// illegal_word: '',
// order_count: '0',
// improvement_plan: null,
// },
// ],
// reports: [],
// orders: [],
// },
// },
// },
// }
return
httpRequest
.
get
(
'/api/lab/v1/experiment/live-student-record/detail'
,
{
params
})
}
// 获取直播成绩列表
export
function
getScoreList
(
params
?:
{
name
?:
string
})
{
return
httpRequest
.
get
(
'/api/lab/v1/experiment/live-student-record/list'
,
{
params
})
}
// 导出成绩
export
function
exportScore
(
params
?:
{
name
?:
string
})
{
return
httpRequest
.
get
(
'/api/lab/v1/experiment/live-student-record/export'
,
{
params
})
}
// 更新成绩
export
function
updateScore
(
data
:
{
id
:
string
;
score_status
:
number
;
total_score
:
number
;
score_details
:
string
})
{
return
httpRequest
.
post
(
'/api/lab/v1/experiment/live-student-record/score'
,
data
)
}
export
function
studentSubmit
()
{
return
httpRequest
.
post
(
'/api/lab/v1/experiment/live-student-record/submit'
)
}
src/modules/score/api.ts
0 → 100644
浏览文件 @
cdf9c380
import
httpRequest
from
'@/utils/axios'
// 获取直播成绩详情
export
function
getScoreDetail
(
params
?:
{
id
:
string
})
{
return
httpRequest
.
get
(
'/api/lab/v1/experiment/live-student-record/detail'
,
{
params
})
}
// 获取直播成绩列表
export
function
getScoreList
(
params
?:
{
name
?:
string
})
{
return
httpRequest
.
get
(
'/api/lab/v1/experiment/live-student-record/list'
,
{
params
})
}
// 导出成绩
export
function
exportScore
(
params
?:
{
name
?:
string
})
{
return
httpRequest
.
get
(
'/api/lab/v1/experiment/live-student-record/export'
,
{
params
})
}
// 更新成绩
export
function
updateScore
(
data
:
{
id
:
string
;
check_status
:
number
;
total_score
:
number
;
score_details
:
string
})
{
return
httpRequest
.
post
(
'/api/lab/v1/experiment/live-student-record/score'
,
data
)
}
// 一键发布成绩
export
function
publishAll
()
{
return
httpRequest
.
post
(
'/api/lab/v1/experiment/live-student-record/publish-all'
)
}
src/modules/
live/
score/components/CompetitionLive.vue
→
src/modules/score/components/CompetitionLive.vue
浏览文件 @
cdf9c380
...
...
@@ -55,7 +55,7 @@ const firstLivePractice = computed(() => {
})
const
firstLivePracticeRecord
=
computed
(()
=>
{
return
props
.
detail
.
live_data
.
practice_records
.
find
((
item
)
=>
item
.
live_practice_id
===
firstLivePractice
.
value
?.
id
)
return
firstLivePractice
.
value
?.
records
[
0
]
})
const
secondLivePractice
=
computed
(()
=>
{
...
...
@@ -63,7 +63,7 @@ const secondLivePractice = computed(() => {
})
const
secondLivePracticeRecord
=
computed
(()
=>
{
return
props
.
detail
.
live_data
.
practice_records
.
find
((
item
)
=>
item
.
live_practice_id
===
secondLivePractice
.
value
?.
id
)
return
secondLivePractice
.
value
?.
records
[
0
]
})
// 商品类别
...
...
@@ -205,7 +205,7 @@ const handleNext = () => {
<el-tab-pane
label=
"商品品类管理"
:name=
"1"
>
<ScoreCard
:maxScore=
"5"
:hasSaveButton=
"detail.status != '2'"
:hasSaveButton=
"detail.
check_
status != '2'"
v-model:score=
"scoreDetails.commodity_type.score"
v-model:comment=
"scoreDetails.commodity_type.comment"
@
save=
"$emit('save')"
...
...
@@ -220,7 +220,7 @@ const handleNext = () => {
<el-tab-pane
label=
"商品属性管理"
:name=
"2"
lazy
>
<ScoreCard
:maxScore=
"5"
:hasSaveButton=
"detail.status != '2'"
:hasSaveButton=
"detail.
check_
status != '2'"
v-model:score=
"scoreDetails.commodity_attr.score"
v-model:comment=
"scoreDetails.commodity_attr.comment"
@
save=
"$emit('save')"
...
...
@@ -231,7 +231,7 @@ const handleNext = () => {
<el-tab-pane
label=
"商品管理"
:name=
"3"
lazy
>
<ScoreCard
:maxScore=
"15"
:hasSaveButton=
"detail.status != '2'"
:hasSaveButton=
"detail.
check_
status != '2'"
v-model:score=
"scoreDetails.commodity.score"
v-model:comment=
"scoreDetails.commodity.comment"
@
save=
"$emit('save')"
...
...
@@ -288,7 +288,7 @@ const handleNext = () => {
<el-tab-pane
label=
"直播话术管理"
:name=
"4"
lazy
>
<ScoreCard
:maxScore=
"15"
:hasSaveButton=
"detail.status != '2'"
:hasSaveButton=
"detail.
check_
status != '2'"
v-model:score=
"scoreDetails.speech.score"
v-model:comment=
"scoreDetails.speech.comment"
@
save=
"$emit('save')"
...
...
@@ -315,7 +315,7 @@ const handleNext = () => {
<el-tab-pane
label=
"首次直播演练"
:name=
"5"
lazy
>
<ScoreCard
:maxScore=
"20"
:hasSaveButton=
"detail.status != '2'"
:hasSaveButton=
"detail.
check_
status != '2'"
v-model:score=
"scoreDetails.practice_record1.score"
v-model:comment=
"scoreDetails.practice_record1.comment"
@
save=
"$emit('save')"
...
...
@@ -330,7 +330,7 @@ const handleNext = () => {
<el-tab-pane
label=
"直播复盘分析"
:name=
"6"
lazy
>
<ScoreCard
:maxScore=
"10"
:hasSaveButton=
"detail.status != '2'"
:hasSaveButton=
"detail.
check_
status != '2'"
v-model:score=
"scoreDetails.improvement_plan.score"
v-model:comment=
"scoreDetails.improvement_plan.comment"
@
save=
"$emit('save')"
...
...
@@ -346,7 +346,7 @@ const handleNext = () => {
<el-tab-pane
label=
"二次直播演练"
:name=
"7"
lazy
>
<ScoreCard
:maxScore=
"15"
:hasSaveButton=
"detail.status != '2'"
:hasSaveButton=
"detail.
check_
status != '2'"
v-model:score=
"scoreDetails.practice_record2.score"
v-model:comment=
"scoreDetails.practice_record2.comment"
@
save=
"$emit('save')"
...
...
@@ -361,7 +361,7 @@ const handleNext = () => {
<el-tab-pane
label=
"直播总结汇报"
:name=
"8"
lazy
>
<ScoreCard
:maxScore=
"15"
:hasSaveButton=
"detail.status != '2'"
:hasSaveButton=
"detail.
check_
status != '2'"
:hasNextButton=
"false"
v-model:score=
"scoreDetails.report.score"
v-model:comment=
"scoreDetails.report.comment"
...
...
src/modules/
live/
score/components/CompetitionLiveProd.vue
→
src/modules/score/components/CompetitionLiveProd.vue
浏览文件 @
cdf9c380
...
...
@@ -56,7 +56,7 @@ const firstLivePractice = computed(() => {
})
const
firstLivePracticeRecord
=
computed
(()
=>
{
return
props
.
detail
.
live_data
.
practice_records
.
find
((
item
)
=>
item
.
live_practice_id
===
firstLivePractice
.
value
?.
id
)
return
firstLivePractice
.
value
?.
records
[
0
]
})
const
secondLivePractice
=
computed
(()
=>
{
...
...
@@ -64,7 +64,7 @@ const secondLivePractice = computed(() => {
})
const
secondLivePracticeRecord
=
computed
(()
=>
{
return
props
.
detail
.
live_data
.
practice_records
.
find
((
item
)
=>
item
.
live_practice_id
===
secondLivePractice
.
value
?.
id
)
return
secondLivePractice
.
value
?.
records
[
0
]
})
// 商品类别
...
...
@@ -206,7 +206,7 @@ const handleNext = () => {
<el-tab-pane
label=
"商品品类管理"
:name=
"1"
>
<ScoreCard
:maxScore=
"3"
:hasSaveButton=
"detail.status != '2'"
:hasSaveButton=
"detail.
check_
status != '2'"
v-model:score=
"scoreDetails.commodity_type.score"
v-model:comment=
"scoreDetails.commodity_type.comment"
@
save=
"$emit('save')"
...
...
@@ -221,7 +221,7 @@ const handleNext = () => {
<el-tab-pane
label=
"商品属性管理"
:name=
"2"
lazy
>
<ScoreCard
:maxScore=
"2"
:hasSaveButton=
"detail.status != '2'"
:hasSaveButton=
"detail.
check_
status != '2'"
v-model:score=
"scoreDetails.commodity_attr.score"
v-model:comment=
"scoreDetails.commodity_attr.comment"
@
save=
"$emit('save')"
...
...
@@ -232,7 +232,7 @@ const handleNext = () => {
<el-tab-pane
label=
"商品管理"
:name=
"3"
lazy
>
<ScoreCard
:maxScore=
"10"
:hasSaveButton=
"detail.status != '2'"
:hasSaveButton=
"detail.
check_
status != '2'"
v-model:score=
"scoreDetails.commodity.score"
v-model:comment=
"scoreDetails.commodity.comment"
@
save=
"$emit('save')"
...
...
@@ -289,7 +289,7 @@ const handleNext = () => {
<el-tab-pane
label=
"直播话术管理"
:name=
"4"
lazy
>
<ScoreCard
:maxScore=
"15"
:hasSaveButton=
"detail.status != '2'"
:hasSaveButton=
"detail.
check_
status != '2'"
v-model:score=
"scoreDetails.speech.score"
v-model:comment=
"scoreDetails.speech.comment"
@
save=
"$emit('save')"
...
...
@@ -316,7 +316,7 @@ const handleNext = () => {
<el-tab-pane
label=
"首次直播演练"
:name=
"5"
lazy
>
<ScoreCard
:maxScore=
"15"
:hasSaveButton=
"detail.status != '2'"
:hasSaveButton=
"detail.
check_
status != '2'"
v-model:score=
"scoreDetails.practice_record1.score"
v-model:comment=
"scoreDetails.practice_record1.comment"
@
save=
"$emit('save')"
...
...
@@ -331,7 +331,7 @@ const handleNext = () => {
<el-tab-pane
label=
"直播复盘分析"
:name=
"6"
lazy
>
<ScoreCard
:maxScore=
"10"
:hasSaveButton=
"detail.status != '2'"
:hasSaveButton=
"detail.
check_
status != '2'"
v-model:score=
"scoreDetails.improvement_plan.score"
v-model:comment=
"scoreDetails.improvement_plan.comment"
@
save=
"$emit('save')"
...
...
@@ -347,7 +347,7 @@ const handleNext = () => {
<el-tab-pane
label=
"二次直播演练"
:name=
"7"
lazy
>
<ScoreCard
:maxScore=
"30"
:hasSaveButton=
"detail.status != '2'"
:hasSaveButton=
"detail.
check_
status != '2'"
v-model:score=
"scoreDetails.practice_record2.score"
v-model:comment=
"scoreDetails.practice_record2.comment"
@
save=
"$emit('save')"
...
...
@@ -362,7 +362,7 @@ const handleNext = () => {
<el-tab-pane
label=
"直播总结汇报"
:name=
"8"
lazy
>
<ScoreCard
:maxScore=
"10"
:hasSaveButton=
"detail.status != '2'"
:hasSaveButton=
"detail.
check_
status != '2'"
:hasNextButton=
"false"
v-model:score=
"scoreDetails.report.score"
v-model:comment=
"scoreDetails.report.comment"
...
...
src/modules/
live/
score/components/CompetitionOperations.vue
→
src/modules/score/components/CompetitionOperations.vue
浏览文件 @
cdf9c380
...
...
@@ -61,7 +61,7 @@ const handleNext = () => {
<
template
>
<el-tabs
stretch
v-model=
"activeTab"
class=
"score-tabs"
>
<el-tab-pane
label=
"创意策划方案"
:name=
"1"
>
<ModuleCard
:maxScore=
"20"
:hasSaveButton=
"detail.status != '2'"
@
next=
"handleNext"
@
save=
"$emit('save')"
>
<ModuleCard
:maxScore=
"20"
:hasSaveButton=
"detail.
check_
status != '2'"
@
next=
"handleNext"
@
save=
"$emit('save')"
>
<ScoreCardSub
title=
"全媒体运营的主题(方向)描述(3分)"
:maxScore=
"3"
...
...
@@ -93,7 +93,7 @@ const handleNext = () => {
</ModuleCard>
</el-tab-pane>
<el-tab-pane
label=
"视听运营"
:name=
"2"
>
<ModuleCard
:maxScore=
"55"
:hasSaveButton=
"detail.status != '2'"
@
next=
"handleNext"
@
save=
"$emit('save')"
>
<ModuleCard
:maxScore=
"55"
:hasSaveButton=
"detail.
check_
status != '2'"
@
next=
"handleNext"
@
save=
"$emit('save')"
>
<ScoreCardSub
title=
"综合稿件标题(5分)"
:maxScore=
"5"
...
...
@@ -140,7 +140,7 @@ const handleNext = () => {
</ModuleCard>
</el-tab-pane>
<el-tab-pane
label=
"流量运营"
:name=
"3"
>
<ModuleCard
:maxScore=
"20"
:hasSaveButton=
"detail.status != '2'"
@
next=
"handleNext"
@
save=
"$emit('save')"
>
<ModuleCard
:maxScore=
"20"
:hasSaveButton=
"detail.
check_
status != '2'"
@
next=
"handleNext"
@
save=
"$emit('save')"
>
<ScoreCardSub
title=
"作品(或产品)发布的运营计划,上述全媒体综合文稿拟分发的媒体平台,并逐一说明理由(10分)"
:maxScore=
"10"
...
...
src/modules/
live/
score/components/ModuleCard.vue
→
src/modules/score/components/ModuleCard.vue
浏览文件 @
cdf9c380
File moved
src/modules/
live/
score/components/ScoreCard.vue
→
src/modules/score/components/ScoreCard.vue
浏览文件 @
cdf9c380
File moved
src/modules/
live/
score/components/ScoreCardLive.vue
→
src/modules/score/components/ScoreCardLive.vue
浏览文件 @
cdf9c380
<
script
setup
>
import
Demo
from
'
../..
/test/components/Demo.vue'
import
RecordView
from
'
../..
/test/components/RecordView.vue'
import
Demo
from
'
@/modules/live
/test/components/Demo.vue'
import
RecordView
from
'
@/modules/live
/test/components/RecordView.vue'
defineProps
({
livePracticeId
:
{
type
:
String
},
recordId
:
{
type
:
String
}
})
</
script
>
...
...
src/modules/
live/
score/components/ScoreCardSub.vue
→
src/modules/score/components/ScoreCardSub.vue
浏览文件 @
cdf9c380
File moved
src/modules/
live/
score/index.ts
→
src/modules/score/index.ts
浏览文件 @
cdf9c380
...
...
@@ -10,6 +10,14 @@ const routes: RouteRecordRaw[] = [
{
path
:
'view'
,
component
:
()
=>
import
(
'./views/View.vue'
)
},
],
},
{
path
:
'/operations/score'
,
component
:
Layout
,
children
:
[
{
path
:
''
,
component
:
()
=>
import
(
'./views/Index.vue'
),
props
:
{
hasAI
:
false
}
},
{
path
:
'view'
,
component
:
()
=>
import
(
'./views/View.vue'
)
},
],
},
]
export
{
routes
}
src/modules/
live/
score/prompt.ts
→
src/modules/score/prompt.ts
浏览文件 @
cdf9c380
...
...
@@ -500,9 +500,7 @@ ${JSON.stringify(data.speeches)}
export
const
generatePracticeRecordPrompt
=
(
data
:
any
)
=>
{
const
firstLivePractice
=
data
.
practices
[
0
]
const
firstLivePracticeRecord
=
data
.
practice_records
.
find
(
(
item
:
any
)
=>
item
.
live_practice_id
===
firstLivePractice
?.
id
)
const
firstLivePracticeRecord
=
firstLivePractice
?.
records
[
0
]
return
`请根据选手提交的内容进行评分(满分20分)
选手提交内容:
${
JSON
.
stringify
(
firstLivePracticeRecord
)}
...
...
@@ -511,9 +509,7 @@ export const generatePracticeRecordPrompt = (data: any) => {
export
const
generateImprovementPlanPrompt
=
(
data
:
any
)
=>
{
const
firstLivePractice
=
data
.
practices
[
0
]
const
firstLivePracticeRecord
=
data
.
practice_records
.
find
(
(
item
:
any
)
=>
item
.
live_practice_id
===
firstLivePractice
?.
id
)
const
firstLivePracticeRecord
=
firstLivePractice
?.
records
[
0
]
return
`请根据选手提交的改进方案进行评分(满分10分):
选手提交的改进方案:
${
JSON
.
stringify
(
firstLivePracticeRecord
?.
improvement_plan
)}
...
...
@@ -527,9 +523,7 @@ export const generateImprovementPlanPrompt = (data: any) => {
export const generatePracticeRecord2Prompt = (data: any) => {
const secondLivePractice = data.practices[1]
const secondLivePracticeRecord = data.practice_records.find(
(item: any) => item.live_practice_id === secondLivePractice?.id
)
const secondLivePracticeRecord = secondLivePractice?.records[0]
return `
请根据选手提交的二次直播演练内容进行评分(满分
15
分)
选手提交内容:
...
...
src/modules/
live/
score/prompt2.ts
→
src/modules/score/prompt2.ts
浏览文件 @
cdf9c380
...
...
@@ -263,9 +263,7 @@ ${JSON.stringify(data.speeches)}
export
const
generatePracticeRecordPrompt
=
(
data
:
any
)
=>
{
const
firstLivePractice
=
data
.
practices
[
0
]
const
firstLivePracticeRecord
=
data
.
practice_records
.
find
(
(
item
:
any
)
=>
item
.
live_practice_id
===
firstLivePractice
?.
id
)
const
firstLivePracticeRecord
=
firstLivePractice
?.
records
[
0
]
return
`请根据选手提交的内容进行评分(满分15分)
选手提交内容:
${
JSON
.
stringify
(
firstLivePracticeRecord
)}
...
...
@@ -412,9 +410,7 @@ export const generatePracticeRecordPrompt = (data: any) => {
export
const
generateImprovementPlanPrompt
=
(
data
:
any
)
=>
{
const
firstLivePractice
=
data
.
practices
[
0
]
const
firstLivePracticeRecord
=
data
.
practice_records
.
find
(
(
item
:
any
)
=>
item
.
live_practice_id
===
firstLivePractice
?.
id
)
const
firstLivePracticeRecord
=
firstLivePractice
?.
records
[
0
]
return
`请根据选手提交的改进方案进行评分(满分10分):
选手提交的改进方案:
${
JSON
.
stringify
(
firstLivePracticeRecord
?.
improvement_plan
)}
...
...
@@ -436,9 +432,7 @@ export const generateImprovementPlanPrompt = (data: any) => {
export const generatePracticeRecord2Prompt = (data: any) => {
const secondLivePractice = data.practices[1]
const secondLivePracticeRecord = data.practice_records.find(
(item: any) => item.live_practice_id === secondLivePractice?.id
)
const secondLivePracticeRecord = secondLivePractice?.records[0]
return `
请根据选手提交的二次直播演练内容进行评分(满分
30
分)
选手提交内容:
...
...
src/modules/
live/
score/views/Index.vue
→
src/modules/score/views/Index.vue
浏览文件 @
cdf9c380
<
script
setup
>
import
LiveProductCategory
from
'@/components/LiveProductCategory.vue'
import
{
getScoreList
}
from
'../api'
import
{
getScoreList
,
getScoreDetail
,
publishAll
,
updateScore
}
from
'../api'
import
{
ElMessage
}
from
'element-plus'
import
{
useChat
}
from
'@ezijing/ai-vue'
import
{
generatePrompt
}
from
'../prompt'
import
{
generatePrompt
as
generatePrompt2
}
from
'../prompt2'
import
{
useIntervalFn
}
from
'@vueuse/core'
const
route
=
useRoute
()
const
appList
=
ref
(
null
)
defineProps
({
hasAI
:
{
type
:
Boolean
,
default
:
true
}
})
// 刷新
const
handleRefresh
=
()
=>
{
appList
.
value
?.
refetch
()
...
...
@@ -24,6 +31,7 @@ const listOptions = computed(() => {
{
label
:
'暂未评分'
,
value
:
'0'
},
{
label
:
'评分中'
,
value
:
'1'
},
{
label
:
'已评分'
,
value
:
'2'
},
{
label
:
'AI评分完成'
,
value
:
'3'
},
],
},
],
...
...
@@ -43,30 +51,74 @@ const listOptions = computed(() => {
}
})
// const handleSubmit = () => {
// studentSubmit().then(() => {
// handleRefresh()
// })
// }
const
handleExport
=
()
=>
{
window
.
open
(
`/api/lab/v1/experiment/live-student-record/export?experiment_id=
${
route
.
query
.
experiment_id
}
`
)
}
const
{
isLoading
,
generateText
}
=
useChat
({
provider
:
'siliconflow'
})
const
handleAIScore
=
async
()
=>
{
console
.
log
(
'AI一键评分'
)
const
res
=
await
getScoreList
({
'per-page'
:
200
,
check_status
:
0
})
const
list
=
res
.
data
.
list
list
.
forEach
(
async
(
item
)
=>
{
const
detailRes
=
await
getScoreDetail
({
id
:
item
.
id
})
const
detail
=
detailRes
.
data
.
detail
const
prompt
=
detail
.
competition_rule
?.
questions
==
1
?
generatePrompt
(
detail
.
live_data
)
:
generatePrompt2
(
detail
.
live_data
)
// 修改为评分中
updateScore
({
id
:
item
.
id
,
check_status
:
1
})
const
result
=
await
generateText
({
prompt
,
response_format
:
{
type
:
'json_object'
}
})
console
.
log
(
result
)
try
{
const
parsed
=
JSON
.
parse
(
result
.
content
)
console
.
log
(
parsed
)
const
totalScore
=
Object
.
values
(
parsed
).
reduce
((
acc
,
curr
)
=>
acc
+
(
curr
.
score
||
0
),
0
)
updateScore
({
id
:
item
.
id
,
check_status
:
3
,
total_score
:
totalScore
.
value
,
score_details
:
JSON
.
stringify
(
parsed
),
}).
then
(()
=>
{
console
.
log
(
'AI评分完成'
)
})
}
catch
(
error
)
{
console
.
log
(
'评分失败'
,
error
)
}
})
}
const
handlePublishScore
=
()
=>
{
publishAll
().
then
(()
=>
{
ElMessage
.
success
(
'发布成绩成功'
)
handleRefresh
()
})
}
useIntervalFn
(()
=>
{
handleRefresh
()
},
5000
)
</
script
>
<
template
>
<AppCard
title=
"成绩管理"
>
<AppList
v-bind=
"listOptions"
ref=
"appList"
>
<template
#
header-buttons
>
<
!--
<el-button
type=
"primary"
@
click=
"handleSubmit"
>
提交成绩
</el-button>
--
>
<
el-row
justify=
"space-between"
>
<el-button
type=
"primary"
@
click=
"handleExport"
>
导出成绩
</el-button>
<div>
<el-button
type=
"primary"
@
click=
"handleAIScore"
:loading=
"isLoading"
v-if=
"hasAI"
>
AI一键评分
</el-button>
<el-button
type=
"primary"
@
click=
"handlePublishScore"
v-if=
"false"
>
一键发布成绩
</el-button>
</div>
</el-row>
</
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"
>
<el-button
text
type=
"primary"
v-if=
"row.check_status != '2'"
>
<router-link
:to=
"
{ path: '/live/score/view', query: { ...$route.query, id: row.id } }">评分
</router-link>
</el-button>
</
template
>
...
...
src/modules/
live/
score/views/View.vue
→
src/modules/score/views/View.vue
浏览文件 @
cdf9c380
...
...
@@ -11,7 +11,7 @@ const CompetitionOperations = defineAsyncComponent(() => import('../components/C
const
route
=
useRoute
()
const
id
=
route
.
query
.
id
const
{
isLoading
,
generateText
}
=
useChat
({
provider
:
'
volcano
'
})
const
{
isLoading
,
generateText
}
=
useChat
({
provider
:
'
siliconflow
'
})
const
detail
=
ref
(
null
)
...
...
@@ -41,7 +41,7 @@ const handleAIScore = async () => {
try
{
const
parsed
=
JSON
.
parse
(
result
.
content
)
Object
.
assign
(
scoreDetails
,
parsed
)
commitScore
().
then
(()
=>
{
commitScore
(
1
).
then
(()
=>
{
ElMessage
.
success
(
'保存成功'
)
})
}
catch
(
error
)
{
...
...
@@ -96,7 +96,9 @@ const handlePublishScore = () => {
v-if=
"detail.competition_rule?.competition == 1"
>
AI一键评分
</el-button
>
<el-button
type=
"primary"
:disabled=
"detail.check_status == '2'"
@
click=
"handlePublishScore"
>
发布成绩
</el-button>
<el-button
type=
"primary"
:disabled=
"detail.check_status == '2'"
@
click=
"handlePublishScore"
>
发布成绩
</el-button
>
</el-form-item>
</el-form>
<div
class=
"score-box"
>
...
...
src/stores/menu.ts
浏览文件 @
cdf9c380
...
...
@@ -418,7 +418,7 @@ const adminMenus: IMenuItem[] = [
{
id
:
401
,
name
:
'创意策划方案'
,
path
:
'/operations/plan'
,
icon
:
markRaw
(
RiLightbulbLine
)
},
{
id
:
402
,
name
:
'视听运营'
,
path
:
'/operations/audiovisual'
,
icon
:
markRaw
(
RiSoundModuleLine
)
},
{
id
:
403
,
name
:
'流量运营'
,
path
:
'/operations/flow'
,
icon
:
markRaw
(
RiLineChartLine
)
},
{
id
:
404
,
name
:
'成绩管理'
,
path
:
'/
live
/score'
,
icon
:
markRaw
(
RiFileChartLine
),
role
:
[
5
,
6
]
},
{
id
:
404
,
name
:
'成绩管理'
,
path
:
'/
operations
/score'
,
icon
:
markRaw
(
RiFileChartLine
),
role
:
[
5
,
6
]
},
],
},
]
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论