提交 9ae415d8 authored 作者: 王鹏飞's avatar 王鹏飞

chore: update

上级 29c633cd
......@@ -499,16 +499,24 @@ ${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
)
return `请根据选手提交的内容进行评分(满分20分)
选手提交内容:
${JSON.stringify(data.practice_records[0])}
${JSON.stringify(firstLivePracticeRecord)}
`
}
export const generateImprovementPlanPrompt = (data: any) => {
const firstLivePractice = data.practices[0]
const firstLivePracticeRecord = data.practice_records.find(
(item: any) => item.live_practice_id === firstLivePractice?.id
)
return `请根据选手提交的改进方案进行评分(满分10分):
选手提交的改进方案:
${JSON.stringify(data.practice_records[0]?.improvement_plan)}
${JSON.stringify(firstLivePracticeRecord?.improvement_plan)}
评分标准:
- 必须提出至少5条改进措施
......@@ -518,10 +526,14 @@ 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
)
return `
请根据选手提交的二次直播演练内容进行评分(满分15分)
选手提交内容:
${JSON.stringify(data.practice_records[1])}
${JSON.stringify(secondLivePracticeRecord)}
`
}
......
差异被折叠。
......@@ -8,7 +8,7 @@ const appList = ref(null)
const handleRefresh = () => {
appList.value?.refetch()
}
const listParams = reactive({ name: '', status: '' })
const listParams = reactive({ name: '', check_status: '' })
// 列表配置
const listOptions = computed(() => {
......@@ -18,11 +18,12 @@ const listOptions = computed(() => {
{ label: '姓名', prop: 'name', type: 'input' },
{
label: '状态',
prop: 'status',
prop: 'check_status',
type: 'select',
options: [
{ label: '未批改', value: '1' },
{ label: '已批改', value: '2' },
{ label: '暂未评分', value: '0' },
{ label: '评分中', value: '1' },
{ label: '已评分', value: '2' },
],
},
],
......@@ -33,10 +34,11 @@ const listOptions = computed(() => {
{ label: '专业', prop: 'specialty_name' },
{ label: '班级', prop: 'class_name' },
{ label: '成绩', prop: 'score_display' },
{ label: '状态', prop: 'status_name' },
{ label: '状态', prop: 'check_status_name' },
{ label: '评分人', prop: 'checker_name' },
{ label: '提交时间', prop: 'commit_time' },
{ label: '批改时间', prop: 'commit_time' },
{ label: '操作', slots: 'table-x', width: 200 },
{ label: '操作', slots: 'table-x', width: 120 },
],
}
})
......@@ -65,9 +67,7 @@ const handleExport = () => {
</template>
<template #table-x="{ row }">
<el-button text type="primary">
<router-link :to="{ path: '/live/score/view', query: { ...$route.query, id: row.id } }" target="_blank"
>评分</router-link
>
<router-link :to="{ path: '/live/score/view', query: { ...$route.query, id: row.id } }">评分</router-link>
</el-button>
</template>
</AppList>
......
......@@ -3,8 +3,10 @@ import { getScoreDetail, updateScore } from '../api'
import { ElMessageBox, ElMessage } from 'element-plus'
import { useChat } from '@ezijing/ai-vue'
import { generatePrompt } from '../prompt'
import { generatePrompt as generatePrompt2 } from '../prompt2'
const CompetitionLive = defineAsyncComponent(() => import('../components/CompetitionLive.vue'))
const CompetitionLiveProd = defineAsyncComponent(() => import('../components/CompetitionLiveProd.vue'))
const CompetitionOperations = defineAsyncComponent(() => import('../components/CompetitionOperations.vue'))
const route = useRoute()
const id = route.query.id
......@@ -31,14 +33,15 @@ onMounted(() => {
const handleAIScore = async () => {
console.log('AI一键评分')
const result = await generateText({
prompt: generatePrompt(detail.value.live_data),
response_format: { type: 'json_object' },
})
const prompt =
detail.value.competition_rule?.competition == 1
? generatePrompt(detail.value.live_data)
: generatePrompt2(detail.value.live_data)
const result = await generateText({ prompt, response_format: { type: 'json_object' } })
try {
const parsed = JSON.parse(result.content)
Object.assign(scoreDetails, parsed)
commitScore(0).then(() => {
commitScore().then(() => {
ElMessage.success('保存成功')
})
} catch (error) {
......@@ -49,15 +52,15 @@ const handleAIScore = async () => {
}
const handleSave = () => {
commitScore(0).then(() => {
commitScore().then(() => {
ElMessage.success('保存成功')
})
}
const commitScore = (status = 0) => {
const commitScore = (status = 1) => {
return updateScore({
id: route.query.id,
score_status: status,
check_status: status,
total_score: totalScore.value,
score_details: JSON.stringify(scoreDetails),
})
......@@ -69,7 +72,7 @@ const handlePublishScore = () => {
cancelButtonText: '取消',
type: 'warning',
}).then(async () => {
await commitScore(1)
await commitScore(2)
await fetchDetail()
ElMessage.success('发布成绩成功')
})
......@@ -82,18 +85,18 @@ const handlePublishScore = () => {
<el-form-item label="姓名">{{ detail.student_name }}</el-form-item>
<el-form-item label="专业">{{ detail.specialty_name }}</el-form-item>
<el-form-item label="班级">{{ detail.class_name }}</el-form-item>
<el-form-item label="状态">{{ detail.status_name }}</el-form-item>
<el-form-item label="状态">{{ detail.check_status_name }}</el-form-item>
<el-form-item label="提交时间">{{ detail.commit_time }}</el-form-item>
<el-form-item>
<el-button
type="primary"
:disabled="detail.status == '2'"
:disabled="detail.check_status == '2'"
:loading="isLoading"
@click="handleAIScore"
v-if="detail.competition_rule?.competition == 1"
>AI一键评分</el-button
>
<el-button type="primary" :disabled="detail.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">
......@@ -101,11 +104,14 @@ const handlePublishScore = () => {
</div>
</div>
<el-divider />
<template v-if="detail.competition_rule?.competition == 1">
<CompetitionLive
:detail="detail"
@save="handleSave"
v-model:scoreDetails="scoreDetails"
v-if="detail.competition_rule?.competition == 1" />
v-if="detail.competition_rule?.questions == 1" />
<CompetitionLiveProd :detail="detail" @save="handleSave" v-model:scoreDetails="scoreDetails" v-else />
</template>
<CompetitionOperations :detail="detail" @save="handleSave" v-model:scoreDetails="scoreDetails" v-else />
</AppCard>
</template>
......
......@@ -112,7 +112,7 @@ const onStatsChange = (stats) => {
</template>
</div>
<div class="live-col" style="flex: 1" v-if="isView">
<el-timeline style="max-width: 600px">
<el-timeline style="max-height: 600px">
<el-timeline-item
placement="top"
v-for="(item, index) in timelines"
......
......@@ -11,6 +11,7 @@ const liveUploadWay = useMapStore().getMapValuesByKey('live_upload_way')
const FormDialog = defineAsyncComponent(() => import('../components/FormDialog.vue'))
const RecordDialog = defineAsyncComponent(() => import('../components/RecordDialog.vue'))
const router = useRouter()
const appList = ref(null)
// 刷新
const handleRefresh = () => {
......@@ -70,6 +71,14 @@ const handleRemove = async (row) => {
ElMessage.success('删除成功')
handleRefresh()
}
const handleStart = async (row) => {
await ElMessageBox.confirm(
'本次考试共提供两次直播机会——首次直播演练和第二次直播演练。您确定要现在开始直播吗?',
'提示'
)
router.push({ path: 'test/demo', query: { id: row.id } })
}
</script>
<template>
......@@ -82,11 +91,7 @@ const handleRemove = async (row) => {
<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 } }" v-if="row.practice_count == 0"
>开始直播</router-link
>
</el-button>
<el-button text type="primary" @click="handleStart(row)" v-if="row.practice_count == 0">开始直播</el-button>
<el-button text type="primary" @click="handelView(row)">查看</el-button>
<el-button text type="primary" @click="handleRemove(row)">删除</el-button>
</template>
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论