From eba6727dc0930f20c195cd5eafe07c506388b416 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E6=9D=A8?= <666> Date: Thu, 24 Oct 2024 14:36:35 +0800 Subject: [PATCH] =?UTF-8?q?add=EF=BC=9A=E7=94=A8=E6=97=B6=E5=88=86?= =?UTF-8?q?=E6=9E=90=E6=94=B9=E4=B8=BA=E6=9F=B1=E7=8A=B6=E5=9B=BE;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/renderer/src/store/modules/overview.js | 9 +- src/renderer/src/utils/tool.js | 2 +- .../classTask/container/classOverview.vue | 31 ++- .../container/classOverview/distribution.vue | 11 +- .../classOverview/distribution/echarts.vue | 11 +- .../classOverview/distribution/stuList.vue | 8 +- .../container/classOverview/timeAnalyse.vue | 244 ++++++++---------- 7 files changed, 144 insertions(+), 172 deletions(-) diff --git a/src/renderer/src/store/modules/overview.js b/src/renderer/src/store/modules/overview.js index 46f58f6..40acf50 100644 --- a/src/renderer/src/store/modules/overview.js +++ b/src/renderer/src/store/modules/overview.js @@ -4,13 +4,18 @@ const overviewStore = defineStore( { state: () => { return { - tableList:[] + tableList:[], + allData:[] } }, actions: { getTableList(data){ this.tableList = [...data] - } + }, + //整理的所有列表 + getAllData(data){ + this.allData = [...data] + } } }) export default overviewStore diff --git a/src/renderer/src/utils/tool.js b/src/renderer/src/utils/tool.js index 1c800cd..4791810 100644 --- a/src/renderer/src/utils/tool.js +++ b/src/renderer/src/utils/tool.js @@ -370,7 +370,7 @@ const eventHandles = (type, win) => { export const toLinkWeb = (path) => { const config = baseConfig() // console.log(config) - const fullPath = config.url + path + const fullPath = ' https://localhost:7860/' + path // 通知主进程 ipcRenderer.send('openWindow', { key: `win-${Date.now()}`, diff --git a/src/renderer/src/views/classTask/container/classOverview.vue b/src/renderer/src/views/classTask/container/classOverview.vue index b6c6d7e..e3d51b7 100644 --- a/src/renderer/src/views/classTask/container/classOverview.vue +++ b/src/renderer/src/views/classTask/container/classOverview.vue @@ -10,7 +10,7 @@ 等级分布 - + @@ -72,7 +72,6 @@ const props = defineProps({ }, }) let studentList = ref([]) // 学生数据 -const stuHasAnswers = ref([]) // 已经答过题的学生不管对错 // 初始-数据处理 const initData = () => { @@ -81,6 +80,7 @@ const initData = () => { studentList.value = props.activeData.studentList || [] const activeWorkFeedList = props.activeData.workFeedList || [] const quizlist = props.activeData.quizlist || [] + const timeArr = groupByField(props.activeData.workFeedList,'entpcourseworkid') // 习题特殊处理 let data = quizlist.map(o => { // 解析题选项 @@ -91,6 +91,13 @@ const initData = () => { let hasAnswers= [] // 答过题的学生 let timeAnalyse = [] // 平均时长和编号 const quizFeedList = activeWorkFeedList.filter(f => f.entpcourseworkid == o.id) // 做该题的列表 + // 获取所有的做题时间 + timeArr.forEach((item,index) => { + const arr = item.reduce((acc, cur) => { + return acc + (cur.timelength ? Number(cur.timelength) : 0); + },0) + timeAnalyse.push(arr) + }) let children = [] const allStudents = []; if (o.worktype == '单选题') { // '单选题','多选题' @@ -215,12 +222,10 @@ const initData = () => { } // def: 原始题数据 type 类型 active: 选中 points: 得分率, accSum 题解答人数 - return { def: o, id: o.id, type: o.worktype, active: [], points, accSum, rightSum, children,hasAnswers } + return { def: o, id: o.id, type: o.worktype, active: [], points, accSum, rightSum, children,hasAnswers,timeAnalyse } }) - console.log('获取数据: ', data) if (data.length === 0) return - if (!data[0].hasAnswers[0]) return - stuHasAnswers.value = [...data[0].hasAnswers] + useOverview.getAllData([...data]) } // 百分比现在 0-100 const percent = v => v > 1 ? 1 : v < 0 ? 0 : Math.round(v * 100) @@ -233,6 +238,20 @@ const isJson = str => {if(typeof str == 'string'){ if(typeof res == 'object' && res) return true } catch (error) {}}return false } +// 获取到学生的平均回答时间 +const groupByField = (array, field) => { + const groupedMap = {}; + array.forEach(item => { + const key = item[field]; + if (!groupedMap[key]) { + groupedMap[key] = []; + } + groupedMap[key].push(item); + }); + + // 将映射对象转换为二维数组 + return Object.values(groupedMap); +} watch(() => props.tableList,() => { useOverview.getTableList(props.tableList) diff --git a/src/renderer/src/views/classTask/container/classOverview/distribution.vue b/src/renderer/src/views/classTask/container/classOverview/distribution.vue index bf55cd5..ab7a702 100644 --- a/src/renderer/src/views/classTask/container/classOverview/distribution.vue +++ b/src/renderer/src/views/classTask/container/classOverview/distribution.vue @@ -3,26 +3,19 @@ - + - +