提交 3a747802 authored 作者: 王鹏飞's avatar 王鹏飞

chore: 修改成绩管理

上级 54a2d56a
...@@ -3,6 +3,7 @@ import { useUserStore } from '@/stores/user' ...@@ -3,6 +3,7 @@ import { useUserStore } from '@/stores/user'
import { useChat } from '@ezijing/ai-vue' import { useChat } from '@ezijing/ai-vue'
import { generatePrompt } from '../prompt' import { generatePrompt } from '../prompt'
import { generatePrompt as generatePrompt2 } from '../prompt2' import { generatePrompt as generatePrompt2 } from '../prompt2'
import { ElMessage } from 'element-plus'
interface ScoreDetail { interface ScoreDetail {
is_ai?: boolean is_ai?: boolean
...@@ -52,8 +53,55 @@ export function useScore() { ...@@ -52,8 +53,55 @@ export function useScore() {
} }
const handleAIScore = async (detail: any) => { const handleAIScore = async (detail: any) => {
const prompt = const liveData = detail.live_data
detail.competition_rule?.questions == 1 ? generatePrompt(detail.live_data) : generatePrompt2(detail.live_data) const competitionRule = detail.competition_rule
let prompt = ''
if (competitionRule?.competition == 1) {
if (competitionRule?.questions == 1) {
prompt = generatePrompt(detail.live_data)
} else {
prompt = generatePrompt2(detail.live_data)
}
} else {
const rules = JSON.parse(competitionRule?.config || '{}')?.rules || []
rules.forEach((item: any) => {
if (item.rule_mode != 2) return
if (item.type == 1) {
prompt += `请根据选手提交的商品品类信息进行评分(满分${item.percent}分):
选手提交内容:
${JSON.stringify(liveData.commodity_types)}`
} else if (item.type == 2) {
prompt += `请根据选手提交的商品属性配置信息进行评分(满分${item.percent}分):
选手提交内容:
${JSON.stringify(liveData.commodity_attrs)}`
} else if (item.type == 3) {
prompt += `请根据选手提交的商品信息维护内容进行评分(满分${item.percent}分):
选手提交内容:
${JSON.stringify(liveData.commodities)}`
} else if (item.type == 4) {
prompt += `请根据选手提交的直播话术进行评分(满分${item.percent}分):
选手提交内容:
${JSON.stringify(liveData.speeches)}`
}
})
prompt += `EXAMPLE JSON OUTPUT:
{
"commodity_type": {
"score": 5,
"comment": "这是评语"
},
"commodity_attr": {
"score": 5,
"comment": "这是评语"
},
"commodity": {
"score": 5,
"comment": "这是评语"
}
}`
}
const result = await generateText({ prompt, response_format: { type: 'json_object' } } as any) const result = await generateText({ prompt, response_format: { type: 'json_object' } } as any)
if (!result) return if (!result) return
...@@ -91,5 +139,10 @@ export function useScore() { ...@@ -91,5 +139,10 @@ export function useScore() {
} }
} }
return { isLoading, fetchScoreList, fetchScoreDetail, handleAIScoreList, handleAIScore } const handleResetScoreStatus = async (id: string) => {
await updateScore({ id, check_status: 2 })
ElMessage.success('重置成绩状态成功')
}
return { isLoading, fetchScoreList, fetchScoreDetail, handleAIScoreList, handleAIScore, handleResetScoreStatus }
} }
...@@ -4,8 +4,10 @@ import { getScoreList, publishAll } from '../api' ...@@ -4,8 +4,10 @@ import { getScoreList, publishAll } from '../api'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
import { useIntervalFn } from '@vueuse/core' import { useIntervalFn } from '@vueuse/core'
import { useScore } from '../composables/useScore' import { useScore } from '../composables/useScore'
import { useUserStore } from '@/stores/user'
const userStore = useUserStore()
const { isLoading, handleAIScoreList } = useScore() const { isLoading, handleAIScoreList, handleResetScoreStatus } = useScore()
const route = useRoute() const route = useRoute()
const appList = ref(null) const appList = ref(null)
...@@ -36,7 +38,7 @@ const listOptions = computed(() => { ...@@ -36,7 +38,7 @@ const listOptions = computed(() => {
], ],
columns: [ columns: [
{ label: '序号', type: 'index', width: 60 }, { label: '序号', type: 'index', width: 60 },
{ label: 'ID', prop: 'id' }, { label: 'ID', prop: 'student_id' },
{ label: '姓名', prop: 'student_name' }, { label: '姓名', prop: 'student_name' },
// { label: '专业', prop: 'specialty_name' }, // { label: '专业', prop: 'specialty_name' },
// { label: '班级', prop: 'class_name' }, // { label: '班级', prop: 'class_name' },
...@@ -105,6 +107,9 @@ useIntervalFn(() => { ...@@ -105,6 +107,9 @@ useIntervalFn(() => {
<el-button text type="primary" v-if="row.check_status != '1'"> <el-button text type="primary" v-if="row.check_status != '1'">
<router-link :to="{ path: '/live/score/view', query: { ...$route.query, id: row.id } }">评分</router-link> <router-link :to="{ path: '/live/score/view', query: { ...$route.query, id: row.id } }">评分</router-link>
</el-button> </el-button>
<el-button text type="primary" @click="() => handleResetScoreStatus(row.id)" v-if="userStore.isAdmin"
>重置</el-button
>
</template> </template>
</AppList> </AppList>
</AppCard> </AppCard>
......
...@@ -112,7 +112,7 @@ const commitScore = (status = 1, isAI = false) => { ...@@ -112,7 +112,7 @@ const commitScore = (status = 1, isAI = false) => {
} }
const handlePublishScore = async () => { const handlePublishScore = async () => {
await commitScore(2) await commitScore(2)
ElMessage.success('发布成绩成功') ElMessage.success('提交成绩成功')
} }
onMounted(() => { onMounted(() => {
...@@ -141,7 +141,7 @@ onBeforeUnmount(() => { ...@@ -141,7 +141,7 @@ onBeforeUnmount(() => {
v-show="false" v-show="false"
>AI一键评分</el-button >AI一键评分</el-button
> >
<el-button type="primary" @click="handlePublishScore">发布成绩</el-button> <el-button type="primary" @click="handlePublishScore">提交成绩</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<div class="score-box"> <div class="score-box">
......
...@@ -39,6 +39,7 @@ export const useUserStore = defineStore({ ...@@ -39,6 +39,7 @@ export const useUserStore = defineStore({
}), }),
getters: { getters: {
isLogin: (state) => !!state.user, isLogin: (state) => !!state.user,
isAdmin: (state) => state.user?.id === '6602032005293015040',
}, },
actions: { actions: {
async getUser() { async getUser() {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论