Compare commits
7 Commits
5790e87a85
...
eaaba2b5e8
Author | SHA1 | Date |
---|---|---|
小杨 | eaaba2b5e8 | |
zhengdegang | 4816a4565b | |
zdg | 8b55ebffa5 | |
zdg | 9674c68d11 | |
朱浩 | 906559134e | |
朱浩 | ed3559f34f | |
yangws | f224f8b048 |
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "aix-win",
|
"name": "aix-win",
|
||||||
"version": "2.1.18",
|
"version": "2.1.19",
|
||||||
"description": "",
|
"description": "",
|
||||||
"main": "./out/main/index.js",
|
"main": "./out/main/index.js",
|
||||||
"author": "上海交大重庆人工智能研究院",
|
"author": "上海交大重庆人工智能研究院",
|
||||||
|
|
|
@ -20,82 +20,58 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import {ref, watch} from 'vue'
|
import {ref, watch} from 'vue'
|
||||||
import overviewStore from '@/store/modules/overview'
|
import overviewStore from '@/store/modules/overview'
|
||||||
import {listEntpcoursework} from '@/api/education/entpCourseWork'
|
|
||||||
|
|
||||||
const useOverview = overviewStore()
|
const useOverview = overviewStore()
|
||||||
const tableData = ref([])
|
const tableData = ref([])
|
||||||
//获取题目id
|
|
||||||
const ids = ref('')
|
|
||||||
//总分
|
|
||||||
const allScore = ref(0)
|
|
||||||
//用来获取所有知识点
|
//用来获取所有知识点
|
||||||
const konwledge = ref([])
|
const konwledge = ref([])
|
||||||
//所有题目的知识点
|
//所有题目的知识点
|
||||||
const getKonwledge = () => {
|
const getKonwledge = () => {
|
||||||
|
const getScoreRate = []
|
||||||
|
// 获取知识点的种数
|
||||||
|
const ledges = []
|
||||||
useOverview.tableList.forEach(item => {
|
useOverview.tableList.forEach(item => {
|
||||||
|
//判断是否存在知识点
|
||||||
if(item.knowledgePoint){
|
if(item.knowledgePoint){
|
||||||
konwledge.value.push({...JSON.parse(item.knowledgePoint),...{scoingRate:Number(item.scoingRate),point:item.point,allPoint:allScore.value}})
|
const title = JSON.parse(item.knowledgePoint)
|
||||||
|
//判断知识点是否重复
|
||||||
|
if(!ledges.includes(title.id)){
|
||||||
|
ledges.push(title.id)
|
||||||
|
konwledge.value.push({title:title.title,allPoint:item.point,id:title.id})
|
||||||
|
}
|
||||||
|
// 判断学生是否答过题
|
||||||
|
if(useOverview.allData[0].hasAnswers.includes(item.studentid))
|
||||||
|
getScoreRate.push({rate:item.scoingRate,id:title.id})
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
tableData.value = getTableList(konwledge.value)
|
|
||||||
tableData.value = tableData.value.map(item => {
|
// 看看有几个知识点
|
||||||
return{
|
konwledge.value.forEach(item => {
|
||||||
|
let sunRate = 0
|
||||||
|
let num = 0
|
||||||
|
getScoreRate.forEach(item2 => {
|
||||||
|
if(item.id === item2.id){
|
||||||
|
sunRate += extractedNumber(item2.rate)
|
||||||
|
num ++
|
||||||
|
}
|
||||||
|
})
|
||||||
|
const scoreRate = sunRate / num
|
||||||
|
tableData.value.push({
|
||||||
|
scoingRate:scoreRate.toFixed(2),
|
||||||
...item,
|
...item,
|
||||||
allPoint: allScore.value
|
point:(item.allPoint * scoreRate / 100).toFixed(2)
|
||||||
}
|
})
|
||||||
})
|
})
|
||||||
console.log(tableData.value,'tableData.value')
|
|
||||||
}
|
}
|
||||||
//获取总分
|
// 获取百分比的数字
|
||||||
const getScore = async () => {
|
const extractedNumber = (score) => {
|
||||||
const scoreId = useOverview.tableList[0].entpcourseworklist
|
const match = score.match(/\d+/);
|
||||||
const fixedJsonString = `[${scoreId}]`;
|
return match ? parseInt(match[0], 10) : null;
|
||||||
const objects = JSON.parse(fixedJsonString);
|
|
||||||
const id = objects.map(obj => obj.id);
|
|
||||||
ids.value = id.join(',')
|
|
||||||
const res = await listEntpcoursework({ids: ids.value, pageSize: 500})
|
|
||||||
if(res.code === 200){
|
|
||||||
allScore.value = res.rows.reduce((acc, cur) => acc + cur.workScore, 0);
|
|
||||||
getKonwledge()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
//组装tableList表格
|
//组装tableList表格
|
||||||
const getTableList = (data) => {
|
|
||||||
const result = [];
|
|
||||||
data.forEach(item => {
|
|
||||||
const existingItem = result.find(i => i.id === item.id);
|
|
||||||
if (existingItem) {
|
|
||||||
// 累加point和scoingRate
|
|
||||||
existingItem.pointTotal += parseInt(item.point);
|
|
||||||
existingItem.scoingRateTotal += parseFloat(item.scoingRate);
|
|
||||||
existingItem.count++;
|
|
||||||
} else {
|
|
||||||
// 新的对象
|
|
||||||
result.push({
|
|
||||||
id: item.id,
|
|
||||||
title: item.title,
|
|
||||||
pointTotal: item.point,
|
|
||||||
scoingRateTotal: parseFloat(item.scoingRate),
|
|
||||||
count: 1
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// 计算平均值
|
|
||||||
result.forEach(item => {
|
|
||||||
item.point = Math.round(item.pointTotal / item.count);
|
|
||||||
// item.scoingRate = Math.round((item.scoingRateTotal / item.count) * 100) / 100;
|
|
||||||
item.scoingRate = Math.round((item.point / allScore.value) * 100);
|
|
||||||
delete item.pointTotal;
|
|
||||||
delete item.scoingRateTotal;
|
|
||||||
delete item.count;
|
|
||||||
});
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
watch(() => useOverview.tableList,() => {
|
watch(() => useOverview.tableList,() => {
|
||||||
console.log(useOverview.tableList,'useOverview.tableList')
|
getKonwledge()
|
||||||
getScore()
|
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
@ -73,9 +73,8 @@ const list = computed(() => props.data.map((o,i) => {
|
||||||
}))
|
}))
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
posBtnAll = btnRef.value.getBoundingClientRect()
|
posBtnAll = btnRef.value.getBoundingClientRect()
|
||||||
hPost.value = posBtnAll.height
|
hPost.value = Math.round(posBtnAll.height)
|
||||||
|
curNode = sessionStore?.get?.('subject.curNode')
|
||||||
curNode = sessionStore.get('subject.curNode')
|
|
||||||
})
|
})
|
||||||
// === 方法 ===
|
// === 方法 ===
|
||||||
// 获取颜色索引
|
// 获取颜色索引
|
||||||
|
@ -97,7 +96,7 @@ const clickHandel = (o, e) => {
|
||||||
isVisible.value = !isColse // 相同的按钮且打开状态,点击关闭
|
isVisible.value = !isColse // 相同的按钮且打开状态,点击关闭
|
||||||
activeObj.value = o
|
activeObj.value = o
|
||||||
const nodeH = parseInt(node.height / 2) // 高度的一半
|
const nodeH = parseInt(node.height / 2) // 高度的一半
|
||||||
topPos.value = parseInt(node.top) - posBtnAll.top + nodeH
|
topPos.value = Math.round(parseInt(node.top) - posBtnAll.top + nodeH)
|
||||||
}
|
}
|
||||||
emit('change', o)
|
emit('change', o)
|
||||||
}
|
}
|
||||||
|
@ -149,8 +148,8 @@ const closeActive = () =>{
|
||||||
--top: 30px;
|
--top: 30px;
|
||||||
--height: 40vh;
|
--height: 40vh;
|
||||||
position: fixed;
|
position: fixed;
|
||||||
inset: 50% 75px auto auto;
|
inset: 0 75px auto auto;
|
||||||
transform: translateY(-50%);
|
// transform: translateY(-50%);
|
||||||
background-color: #121212;
|
background-color: #121212;
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<div v-if="props.test">
|
<div v-if="props.test">
|
||||||
<el-button type="primary" @click="trigger" v-tap:trigger="">点赞</el-button>
|
<el-button type="primary" @click="trigger(1)" v-tap:trigger="[1,'']">点赞</el-button>
|
||||||
<el-button type="primary" @click="trigger(2, '学生A')" v-tap:trigger="[2,'学生A']">疑惑</el-button>
|
<el-button type="primary" @click="trigger(2, '学生A')" v-tap:trigger="[2,'学生A']">疑惑</el-button>
|
||||||
</div>
|
</div>
|
||||||
<!-- 温度计-模式 -->
|
<!-- 温度计-模式 -->
|
||||||
|
@ -258,11 +258,11 @@ defineExpose({ trigger })
|
||||||
min-width: 15px;
|
min-width: 15px;
|
||||||
// height: 500px;
|
// height: 500px;
|
||||||
&.like{
|
&.like{
|
||||||
background-image: linear-gradient(to top, #fef0f0, #f56c6c);
|
background-image: linear-gradient(to top, #d2f0cb, #2f9e44);
|
||||||
// animation: striped-flow 5s linear infinite;
|
// animation: striped-flow 5s linear infinite;
|
||||||
}
|
}
|
||||||
&.doubt{
|
&.doubt{
|
||||||
background-image: linear-gradient(to top, #fdf6ec, #e6a23c);
|
background-image: linear-gradient(to top, #ebc6c6, #ff0000);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue