From e1c8ab42d925b10d554226f6354f3286d56407b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E4=BA=86=E4=B8=AA=E7=99=BD?= <543593352@qq.com> Date: Mon, 4 Nov 2024 11:25:58 +0800 Subject: [PATCH 01/24] =?UTF-8?q?=E4=BD=9C=E4=B8=9A=E6=89=B9=E6=94=B9?= =?UTF-8?q?=EF=BC=9A=E9=9C=80=E6=B1=82=E5=8F=98=E6=9B=B4=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/views/classTask/classTask.vue | 66 ++++++++++++------- .../container/classTask/task-item.vue | 31 +++++---- .../src/views/classTask/teachClassTask.vue | 4 +- .../views/desktop/container/work-trend.vue | 6 +- src/renderer/src/views/tool/createHomework.js | 13 +++- 5 files changed, 75 insertions(+), 45 deletions(-) diff --git a/src/renderer/src/views/classTask/classTask.vue b/src/renderer/src/views/classTask/classTask.vue index 055fa37..b05159b 100644 --- a/src/renderer/src/views/classTask/classTask.vue +++ b/src/renderer/src/views/classTask/classTask.vue @@ -4,7 +4,7 @@
-
+
{ edituserid: userStore.userId, // 老师的id edustage: userStore.edustage, // 学段 edusubject: userStore.edusubject,//学科 - // deaddate: tabActive.value === '进行中'? getTomorrow() : EndDate.value,// 进行中:明天,已结束:选择的日期 弃用 - deaddate: EndDate.value,// 进行中:明天,已结束:选择的日期 + // deaddate: tabActive.value === '待批改'? getTomorrow() : EndDate.value,// 待批改:明天,已批改:选择的日期 弃用 + deaddate: EndDate.value,// 待批改:明天,已批改:选择的日期 status: '1', // 作业状态:1-已发布 orderby: 'deaddate DESC', pageSize: 100, @@ -153,15 +153,15 @@ const getClassWorkList = async () => { /** * 2024-10-17 由于 后面截止时间加了 时分,特加判断 - * 1、进行中、以前是以明天判断。现改为传当天的日期,并根据当前日期的时分与截止日期进行判断, - * 2、已结束、以前默认是以明天判断。现依然以明天为判断,并根据当前日期时分大于截止日期时分判断。 + * 1、待批改、以前是以明天判断。现改为传当天的日期,并根据当前日期的时分与截止日期进行判断, + * 2、已批改、以前默认是以明天判断。现依然以明天为判断,并根据当前日期时分大于截止日期时分判断。 */ let list = []; - if(tabActive.value === '进行中'){ - // 进行中 当前日期时间 小于 截止 日期时间 - list = response.rows&&response.rows.filter(item => item.deaddate && getCurrentTime('YYYY-MM-DD HH:mm') < item.deaddate); // 进行中 + if(tabActive.value === '待批改'){ + // 待批改 当前日期时间 小于 截止 日期时间 + list = response.rows&&response.rows.filter(item => item.deaddate && getCurrentTime('YYYY-MM-DD HH:mm') < item.deaddate); // 待批改 }else{ - list = response.rows&&response.rows.filter(item => item.deaddate && getCurrentTime('YYYY-MM-DD HH:mm') > item.deaddate); // 已结束 + list = response.rows&&response.rows.filter(item => item.deaddate && getCurrentTime('YYYY-MM-DD HH:mm') > item.deaddate); // 已批改 } @@ -234,8 +234,8 @@ const getStudentClassWorkData = async() => { // edituserid: userStore.userId, // 老师的id // classids: classTaskStore.classListIds.join(','), // edusubject: userStore.edusubject,//学科 - // deaddate: tabActive.value === '进行中'? getTomorrow() : EndDate.value,// 进行中:明天,已结束:选择的日期 - // deaddate: EndDate.value,// 进行中:明天,已结束:选择的日期 + // deaddate: tabActive.value === '待批改'? getTomorrow() : EndDate.value,// 待批改:明天,已批改:选择的日期 + // deaddate: EndDate.value,// 待批改:明天,已批改:选择的日期 // //status: '1', // 作业状态:1-已发布 // orderby: "deaddate DESC",// // pageSize: 1000, @@ -318,8 +318,17 @@ const getStudentClassWorkData = async() => { classWorkList.value[t].finishpercent = parseInt( (classWorkList.value[t].workdataresultcount / classWorkList.value[t].workdatacount) * 100 ) + // 计算-已完成批阅数 : 人数-已批阅数 + // teacherCorrectionProgress 老师已批阅进度条: + // workdataresultcount 完成人数 + // teacherrationgcount 已批阅人数 + // 已批阅百分比: (人数-已批阅数) / 人数 * 100 + classWorkList.value[t].teacherCorrectionProgress = parseInt( + ((classWorkList.value[t].teacherrationgcount) / classWorkList.value[t].workdataresultcount) * 100 + ) } else { classWorkList.value[t].finishpercent = 0 + classWorkList.value[t].teacherCorrectionProgress = 0 } // 以下四个参数,都要计算 @@ -379,6 +388,7 @@ const getStudentClassWorkDataPolling = () => { getStudentVisible() // 在轮询 pollingST.value = setInterval(() => { + console.log('轮询查询学生作业进度') getStudentVisible() }, 1000 * 10) } @@ -422,8 +432,8 @@ const getStudentVisible = async () => { edituserid: userStore.userId, // 老师的id edustage: userStore.edustage,// 学段 edusubject: userStore.edusubject,//学科 - // deaddate: tabActive.value === '进行中'? getTomorrow() : EndDate.value,// 进行中:明天,已结束:选择的日期 - deaddate: EndDate.value,// 进行中:明天,已结束:选择的日期 + // deaddate: tabActive.value === '待批改'? getTomorrow() : EndDate.value,// 待批改:明天,已批改:选择的日期 + deaddate: EndDate.value,// 待批改:明天,已批改:选择的日期 status: '1', // 作业状态:1-已发布 // orderby: 'concat(deaddate,uniquekey) DESC', orderby: 'deaddate DESC', @@ -432,15 +442,15 @@ const getStudentVisible = async () => { /** * 2024-10-17 由于 后面截止时间加了 时分,特加判断 - * 1、进行中、以前是以明天判断。现改为传当天的日期,并根据当前日期的时分与截止日期进行判断, - * 2、已结束、以前默认是以明天判断。现依然以明天为判断,并根据当前日期时分大于截止日期时分判断。 + * 1、待批改、以前是以明天判断。现改为传当天的日期,并根据当前日期的时分与截止日期进行判断, + * 2、已批改、以前默认是以明天判断。现依然以明天为判断,并根据当前日期时分大于截止日期时分判断。 */ let list = []; - if(tabActive.value === '进行中'){ - // 进行中 当前日期时间 小于 截止 日期时间 - list = response.rows&&response.rows.filter(item => item.deaddate && getCurrentTime('YYYY-MM-DD HH:mm') < item.deaddate); // 进行中 + if(tabActive.value === '待批改'){ + // 待批改 当前日期时间 小于 截止 日期时间 + list = response.rows&&response.rows.filter(item => item.deaddate && getCurrentTime('YYYY-MM-DD HH:mm') < item.deaddate); // 待批改 }else{ - list = response.rows&&response.rows.filter(item => item.deaddate && getCurrentTime('YYYY-MM-DD HH:mm') > item.deaddate); // 已结束 + list = response.rows&&response.rows.filter(item => item.deaddate && getCurrentTime('YYYY-MM-DD HH:mm') > item.deaddate); // 已批改 } const curWorkList = list @@ -471,6 +481,15 @@ const getStudentVisible = async () => { } // 更新批阅数 classWorkList.value[t].teacherrationgcount = curWork.teacherrationgcount + + // 计算-已完成批阅数 : 已批阅数 + // teacherCorrectionProgress 老师已批阅进度条: + // workdataresultcount 完成人数 + // teacherrationgcount 已批阅人数 + // 已批阅百分比: (已批阅数) / 人数 * 100 + classWorkList.value[t].teacherCorrectionProgress = parseInt( + ((curWork.teacherrationgcount) / curWork.workdataresultcount) * 100 + ) } else { // 学生未完成,但是老师批改了? if(curWork && curWork.workdataresultcount == 0){ @@ -478,6 +497,7 @@ const getStudentVisible = async () => { classWorkList.value[t].teacherrationgcount = curWork.teacherrationgcount } classWorkList.value[t].finishpercent = 0 + classWorkList.value[t].teacherCorrectionProgress = 0 } } diff --git a/src/renderer/src/views/classTask/container/classTask/task-item.vue b/src/renderer/src/views/classTask/container/classTask/task-item.vue index 50fbf48..965e394 100644 --- a/src/renderer/src/views/classTask/container/classTask/task-item.vue +++ b/src/renderer/src/views/classTask/container/classTask/task-item.vue @@ -14,7 +14,18 @@  |  截止时间:{{ item.deaddate }}  | {{ tabactive }}
-
+ +
+ + 已交 +
+ +
+ + 已批阅 +
+ + {{ item.teacherrationgcount?item.workdatacount - item.teacherrationgcount:item.workdatacount }} 待批阅 -
+
-->
- - {{ item.averagetime }}分钟 平均用时 @@ -97,6 +96,10 @@ const props = defineProps({ } } } + .class-reserv-item-progress { + width: 200px; + font-size: 14px; + } .class-reserv-item-tool { margin-left: 10px; display: flex; diff --git a/src/renderer/src/views/classTask/teachClassTask.vue b/src/renderer/src/views/classTask/teachClassTask.vue index 2ae3647..fb69948 100644 --- a/src/renderer/src/views/classTask/teachClassTask.vue +++ b/src/renderer/src/views/classTask/teachClassTask.vue @@ -677,9 +677,7 @@ const handleClassOverviewOpen = (type) =>{ } } }) - const allTeacherRating = allTopic.reduce((acc, cur) => { - return acc + cur.teacherRating; - },0) + const allTeacherRating = allTopic.reduce((acc, cur) => acc + cur.teacherRating, 0) rightAnswer > 0?item.scoingRate = (score/allTeacherRating * 100).toFixed(0):item.scoingRate = '' item.getScore = score diff --git a/src/renderer/src/views/desktop/container/work-trend.vue b/src/renderer/src/views/desktop/container/work-trend.vue index d723e5a..26ca4c8 100644 --- a/src/renderer/src/views/desktop/container/work-trend.vue +++ b/src/renderer/src/views/desktop/container/work-trend.vue @@ -15,7 +15,7 @@
{{ item.uniquekey }} {{ - getCurrentTime('YYYY-MM-DD HH:mm') > item.deaddate ? '已结束' : '进行中' }} + getCurrentTime('YYYY-MM-DD HH:mm') > item.deaddate ? '已批改' : '待批改' }} {{ item.worktype }}
{{ item.classcaption }} | 截止时间:{{ item.deaddate }}
@@ -52,9 +52,9 @@ const getHomework = async () => { const { edustage, edusubject } = user try { const { rows } = await homeworklist({ edituserid: user.userId, edustage, edusubject, deaddate: getTomorrow(), status: '1', orderby: 'deaddate DESC', pageSize: 500 }) - // 只展示进行中的 + // 只展示待批改的 homeworkList.value = rows.filter(item => item.deaddate && item.uniquekey && getCurrentTime('YYYY-MM-DD HH:mm') < item.deaddate) // 当前日期的时分与截止日期进行判断 - // homeworkList.value = rows.filter(item => item.deaddate && item.uniquekey && getTomorrow() <= item.deaddate) //大于今天的才算进行中 弃用 + // homeworkList.value = rows.filter(item => item.deaddate && item.uniquekey && getTomorrow() <= item.deaddate) //大于今天的才算待批改 弃用 homeworkList.value.forEach((item) => { // 处理任务类型的UI if (item.worktype == '学习目标定位') { diff --git a/src/renderer/src/views/tool/createHomework.js b/src/renderer/src/views/tool/createHomework.js index dc1a8cf..f51751c 100644 --- a/src/renderer/src/views/tool/createHomework.js +++ b/src/renderer/src/views/tool/createHomework.js @@ -43,6 +43,15 @@ export const createHomework = ({ uniquekey, evalid, data, entpcourseid }) => { let classWorkList = [] +// 将标签中的双引号增加转义 +let escapeHtmlQuotes = (str) => { + // 后端已replace双引号, 故前端不用在处理 + const regex1 = /\\+/g; // 匹配多个反斜杠 + let result = str.replace(regex1, '\\'); + result = str.replace(/(?'); //替换\n而不替换\\n 为 \\n + return result; +} + /** * 获取班级作业 */ @@ -52,8 +61,8 @@ export const getClassWorkList = async (id) => { /** * 2024-10-17 由于 后面截止时间加了 时分,特加判断 - * 1、进行中、以前是以明天判断。现改为传当天的日期,并根据当前日期的时分与截止日期进行判断, - * 2、已结束、以前默认是以明天判断。现依然以明天为判断,并根据当前日期时分大于截止日期时分判断。 + * 1、待批改、以前是以明天判断。现改为传当天的日期,并根据当前日期的时分与截止日期进行判断, + * 2、已批改、以前默认是以明天判断。现依然以明天为判断,并根据当前日期时分大于截止日期时分判断。 */ let list = response.rows From b07a4e07b9dd4932a7ce6dddbf426bed76616949 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E4=BA=86=E4=B8=AA=E7=99=BD?= <543593352@qq.com> Date: Mon, 4 Nov 2024 15:36:00 +0800 Subject: [PATCH 02/24] =?UTF-8?q?=E4=BD=9C=E4=B8=9A=E6=89=B9=E6=94=B9?= =?UTF-8?q?=EF=BC=9A=E9=9C=80=E6=B1=82=E6=9B=B4=E6=96=B0=EF=BC=8C=E7=95=8C?= =?UTF-8?q?=E9=9D=A2=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/views/classTask/classTask.vue | 73 +++++++++---------- .../container/classTask/task-item.vue | 49 ++++++++----- .../views/desktop/container/work-trend.vue | 3 +- src/renderer/src/views/tool/createHomework.js | 24 ++---- 4 files changed, 73 insertions(+), 76 deletions(-) diff --git a/src/renderer/src/views/classTask/classTask.vue b/src/renderer/src/views/classTask/classTask.vue index b05159b..e034d45 100644 --- a/src/renderer/src/views/classTask/classTask.vue +++ b/src/renderer/src/views/classTask/classTask.vue @@ -168,7 +168,6 @@ const getClassWorkList = async () => { for (var i = 0; i < list.length; i++) { // 初始化部分新增字段值 list[i].workdatalist = [] - list[i].workdatacount = 0 // 人数 list[i].workdatalistVisible = false list[i].workdatafeedbackcount = 0 // 已交人数 list[i].feedtimelength = 0 @@ -200,19 +199,10 @@ const getClassWorkList = async () => { } else { list[i].entpcourseworklistarray = [] } - // 根据 classworkdatastudentids 初始化判断分配的人数 - if ( - list[i].classworkdatastudentids != '' && - list[i].classworkdatastudentids != null && - list[i].classworkdatastudentids != 'null' - ) { - const stuList = JSON.parse('[' + list[i].classworkdatastudentids + ']') - list[i].workdatacount = stuList.length - } } - // 显示分配人数(workdatacount)>0 的 + // 显示分配人数(workdataresultsum)>0 的 if (list && list.length > 0) { - classWorkList.value = list && list.filter((item) => item.workdatacount > 0) + classWorkList.value = list && list.filter((item) => item.workdataresultsum > 0) //TODO: 这里没分页,貌似这个 total 不重要,后续看 total.value = 0 }else{ @@ -305,29 +295,32 @@ const getStudentClassWorkData = async() => { } } } - // 当前这个学习任务,共推送给了几个学生,workdatacount + // 当前这个学习任务,共推送给了几个学生,workdataresultsum if (res.rows[i].classworkid == classWorkList.value[t].id) { classWorkList.value[t].workdatalist.push(res.rows[i]) } } - // 计算完成进度 workdatacount人数要大于0 + // 计算完成进度 workdataresultsum人数要大于0 if ( classWorkList.value[t].workdataresultcount > 0 && - classWorkList.value[t].workdatacount > 0 + classWorkList.value[t].workdataresultsum > 0 ) { classWorkList.value[t].finishpercent = parseInt( - (classWorkList.value[t].workdataresultcount / classWorkList.value[t].workdatacount) * 100 - ) - // 计算-已完成批阅数 : 人数-已批阅数 - // teacherCorrectionProgress 老师已批阅进度条: - // workdataresultcount 完成人数 - // teacherrationgcount 已批阅人数 - // 已批阅百分比: (人数-已批阅数) / 人数 * 100 - classWorkList.value[t].teacherCorrectionProgress = parseInt( - ((classWorkList.value[t].teacherrationgcount) / classWorkList.value[t].workdataresultcount) * 100 + (classWorkList.value[t].workdataresultcount / classWorkList.value[t].workdataresultsum) * 100 ) } else { classWorkList.value[t].finishpercent = 0 + } + + /** 计算 已批阅进度 */ + // workdataresultsum 人数 teacherrationgcount 已批阅人数 + // 已批阅百分比: (人数-已批阅数) / 人数 * 100 + if (classWorkList.value[t].workdataresultsum > 0) { + // teacherCorrectionProgress 老师已批阅进度条: + classWorkList.value[t].teacherCorrectionProgress = parseInt( + ((classWorkList.value[t].teacherrationgcount) / classWorkList.value[t].workdataresultsum) * 100 + ) + } else { classWorkList.value[t].teacherCorrectionProgress = 0 } @@ -352,7 +345,7 @@ const getStudentClassWorkData = async() => { var dd = (classWorkList.value[t].rightAnswerCount / (classWorkList.value[t].entpcourseworklistarray.length * - classWorkList.value[t].workdatacount)) * + classWorkList.value[t].workdataresultsum)) * 100 classWorkList.value[t].scoingRate = dd.toFixed(0) + '%' } else { @@ -466,12 +459,12 @@ const getStudentVisible = async () => { // } // 确保当前拿到的任务与页面中存在的任务能一对一(避免因删除其他操作而删除作业任务导致两个数组的index不统一而越界) let curWork = curWorkList.find((work) => work.id === classWorkList.value[t].id) - // workdataresultcount 完成人数 workdatacount人数要大于0 - if (curWork && curWork.workdataresultcount > 0 && classWorkList.value[t].workdatacount > 0) { + // workdataresultcount 完成人数 workdataresultsum人数要大于0 + if (curWork && curWork.workdataresultcount > 0 && classWorkList.value[t].workdataresultsum > 0) { classWorkList.value[t].workdataresultcount = curWork.workdataresultcount // 桌面端貌似不需要进度条了? classWorkList.value[t].finishpercent = parseInt( - (classWorkList.value[t].workdataresultcount / classWorkList.value[t].workdatacount) * 100 + (classWorkList.value[t].workdataresultcount / classWorkList.value[t].workdataresultsum) * 100 ) // 计算参与学习任务的平均用时 if (classWorkList.value[t].workdatafeedbackcount > 0) { @@ -479,17 +472,7 @@ const getStudentVisible = async () => { } else { classWorkList.value[t].averagetime = 0 } - // 更新批阅数 - classWorkList.value[t].teacherrationgcount = curWork.teacherrationgcount - // 计算-已完成批阅数 : 已批阅数 - // teacherCorrectionProgress 老师已批阅进度条: - // workdataresultcount 完成人数 - // teacherrationgcount 已批阅人数 - // 已批阅百分比: (已批阅数) / 人数 * 100 - classWorkList.value[t].teacherCorrectionProgress = parseInt( - ((curWork.teacherrationgcount) / curWork.workdataresultcount) * 100 - ) } else { // 学生未完成,但是老师批改了? if(curWork && curWork.workdataresultcount == 0){ @@ -497,6 +480,20 @@ const getStudentVisible = async () => { classWorkList.value[t].teacherrationgcount = curWork.teacherrationgcount } classWorkList.value[t].finishpercent = 0 + } + + /** 计算 已批阅进度 */ + // workdataresultsum 人数 teacherrationgcount 已批阅人数 + // 已批阅百分比: (人数-已批阅数) / 人数 * 100 + if (curWork && curWork.workdataresultsum > 0) { + // 更新批阅数 + classWorkList.value[t].teacherrationgcount = curWork.teacherrationgcount + + // teacherCorrectionProgress 老师已批阅进度条: + classWorkList.value[t].teacherCorrectionProgress = parseInt( + ((curWork.teacherrationgcount) / curWork.workdataresultsum) * 100 + ) + } else { classWorkList.value[t].teacherCorrectionProgress = 0 } } diff --git a/src/renderer/src/views/classTask/container/classTask/task-item.vue b/src/renderer/src/views/classTask/container/classTask/task-item.vue index 965e394..f5625f6 100644 --- a/src/renderer/src/views/classTask/container/classTask/task-item.vue +++ b/src/renderer/src/views/classTask/container/classTask/task-item.vue @@ -15,27 +15,37 @@
-
- - 已交 -
- -
- - 已批阅 -
- - + +
+ + + 已批阅({{ item.teacherrationgcount}}) + +
+ + +
+ {{ item.workdataresultsum }} + 练习次数 +
+ +
+ {{ item.teacherrationgcount?item.workdataresultsum - item.teacherrationgcount:item.workdataresultsum }} + 引用次数 +
+
{{ item.averagetime }}分钟 @@ -98,6 +108,7 @@ const props = defineProps({ } .class-reserv-item-progress { width: 200px; + padding: 0 10px; font-size: 14px; } .class-reserv-item-tool { diff --git a/src/renderer/src/views/desktop/container/work-trend.vue b/src/renderer/src/views/desktop/container/work-trend.vue index 26ca4c8..96397f5 100644 --- a/src/renderer/src/views/desktop/container/work-trend.vue +++ b/src/renderer/src/views/desktop/container/work-trend.vue @@ -21,7 +21,7 @@
{{ item.classcaption }} | 截止时间:{{ item.deaddate }}
-
{{ item.workdataresultcount }} / {{ item.workdatacount }}
+
{{ item.workdataresultcount }} / {{ item.workdataresultsum }}
已交
@@ -72,7 +72,6 @@ const getHomework = async () => { item.workclass = '' } - item.workdatacount = JSON.parse('[' + item.classworkdatastudentids + ']').length // 如果是习题训练任务,则检查一共有多少道 if (item.entpcourseworklist != '') { item.entpcourseworklistarray = JSON.parse( diff --git a/src/renderer/src/views/tool/createHomework.js b/src/renderer/src/views/tool/createHomework.js index f51751c..bb633d8 100644 --- a/src/renderer/src/views/tool/createHomework.js +++ b/src/renderer/src/views/tool/createHomework.js @@ -70,7 +70,6 @@ export const getClassWorkList = async (id) => { for (var i = 0; i < list.length; i++) { // 初始化部分新增字段值 list[i].workdatalist = [] - list[i].workdatacount = 0 // 人数 list[i].workdatalistVisible = false list[i].workdatafeedbackcount = 0 // 已交人数 list[i].feedtimelength = 0 @@ -100,19 +99,10 @@ export const getClassWorkList = async (id) => { } else { list[i].entpcourseworklistarray = [] } - // 根据 classworkdatastudentids 初始化判断分配的人数 - if ( - list[i].classworkdatastudentids != '' && - list[i].classworkdatastudentids != null && - list[i].classworkdatastudentids != 'null' - ) { - const stuList = JSON.parse('[' + list[i].classworkdatastudentids + ']') - list[i].workdatacount = stuList.length - } } - // 显示分配人数(workdatacount)>0 的 + // 显示分配人数(workdataresultsum)>0 的 if (list && list.length > 0) { - classWorkList = list && list.filter((item) => item.workdatacount > 0) + classWorkList = list && list.filter((item) => item.workdataresultsum > 0) //TODO: 这里没分页,貌似这个 total 不重要,后续看 } else { classWorkList = [] @@ -180,18 +170,18 @@ export const getStudentClassWorkData = async () => { } } } - // 当前这个学习任务,共推送给了几个学生,workdatacount + // 当前这个学习任务,共推送给了几个学生,workdataresultsum if (res.rows[i].classworkid == classWorkList[t].id) { classWorkList[t].workdatalist.push(res.rows[i]) } } - // 计算完成进度 workdatacount人数要大于0 + // 计算完成进度 workdataresultsum 人数要大于0 if ( classWorkList[t].workdataresultcount > 0 && - classWorkList[t].workdatacount > 0 + classWorkList[t].workdataresultsum > 0 ) { classWorkList[t].finishpercent = parseInt( - (classWorkList[t].workdataresultcount / classWorkList[t].workdatacount) * 100 + (classWorkList[t].workdataresultcount / classWorkList[t].workdataresultsum) * 100 ) } else { classWorkList[t].finishpercent = 0 @@ -220,7 +210,7 @@ export const getStudentClassWorkData = async () => { var dd = (classWorkList[t].rightAnswerCount / (classWorkList[t].entpcourseworklistarray.length * - classWorkList[t].workdatacount)) * + classWorkList[t].workdataresultsum)) * 100 classWorkList[t].scoingRate = dd.toFixed(0) + '%' } else { From 033c0a3b19d0a75719e75a06014ef4412456d2e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E4=BA=86=E4=B8=AA=E7=99=BD?= <543593352@qq.com> Date: Mon, 4 Nov 2024 17:31:30 +0800 Subject: [PATCH 03/24] =?UTF-8?q?=E4=BD=9C=E4=B8=9A=E6=89=B9=E9=98=85?= =?UTF-8?q?=EF=BC=9A=E5=BE=85=E7=BB=A7=E7=BB=AD=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/renderer/src/api/classTask/index.js | 77 ++++++++++--------- src/renderer/src/utils/date.js | 16 ++++ .../src/views/classTask/classTask.vue | 61 +++++++++++---- .../container/classTask/item-dialog-score.vue | 11 ++- .../container/classTask/task-item.vue | 2 +- 5 files changed, 115 insertions(+), 52 deletions(-) diff --git a/src/renderer/src/api/classTask/index.js b/src/renderer/src/api/classTask/index.js index a01867e..8a95531 100644 --- a/src/renderer/src/api/classTask/index.js +++ b/src/renderer/src/api/classTask/index.js @@ -89,6 +89,13 @@ export function updateClassworkdata(data) { data: data }) } +export function updateClassWorkDataAutoFinish(data) { + return request({ + url: '/education/classworkdata/updAutoFinish', + method: 'put', + data: data + }) +} // 修改classwork export function updateClasswork(data) { @@ -118,90 +125,90 @@ export function addClassworkeval(data) { // 查询evaluationclue列表 export function listEvaluationclue(query) { return request({ - url: '/education/evaluationclue/list', - method: 'get', - params: query + url: '/education/evaluationclue/list', + method: 'get', + params: query }) } // 查询evaluationclue详细 export function getEvaluationclue(id) { return request({ - url: '/education/evaluationclue/' + id, - method: 'get' + url: '/education/evaluationclue/' + id, + method: 'get' }) } // 新增evaluationclue export function addEvaluationclueReturnId(data) { return request({ - url: '/education/evaluationclue/addReturnId', - method: 'post', - data: data + url: '/education/evaluationclue/addReturnId', + method: 'post', + data: data }) } // 新增evaluationclue export function addEvaluationclue(data) { return request({ - url: '/education/evaluationclue', - method: 'post', - data: data + url: '/education/evaluationclue', + method: 'post', + data: data }) } // 修改evaluationclue export function updateEvaluationclue(data) { return request({ - url: '/education/evaluationclue', - method: 'put', - data: data + url: '/education/evaluationclue', + method: 'put', + data: data }) } // 删除evaluationclue export function delEvaluationclue(id) { return request({ - url: '/education/evaluationclue/' + id, - method: 'delete' + url: '/education/evaluationclue/' + id, + method: 'delete' }) } // 新增evaluationclue,保存base64图片 export function saveBase64File(data) { return request({ - url: '/education/evaluationclue/saveBase64File', - method: 'post', - data: data + url: '/education/evaluationclue/saveBase64File', + method: 'post', + data: data }) } // 新增evaluationclue,上传 export function saveEvaluationClueUploadFile(data) { return request({ - url: '/education/evaluationclue/saveUploadFile', - method: 'post', - data: data + url: '/education/evaluationclue/saveUploadFile', + method: 'post', + data: data }) } // 读取文件内容 export function readFile(data) { return fetch(import.meta.env.VITE_APP_RES_FILE_PATH + data.cluelink, { - method: "get", - headers: { - 'Content-Type': 'text/plain', // 请求头设置为纯文本 - 'Accept': 'text/plain' // 接受头设置为纯文本 - }, + method: "get", + headers: { + 'Content-Type': 'text/plain', // 请求头设置为纯文本 + 'Accept': 'text/plain' // 接受头设置为纯文本 + }, }) - .then(response => response.text()) - .then(text => { - return Promise.resolve(text); - }) - .catch(error => { - console.error('读取文件出错:', error); - return Promise.reject(); - }); + .then(response => response.text()) + .then(text => { + return Promise.resolve(text); + }) + .catch(error => { + console.error('读取文件出错:', error); + return Promise.reject(); + }); /*return request({ url: '/education/evaluationclue/readFile', method: 'post', diff --git a/src/renderer/src/utils/date.js b/src/renderer/src/utils/date.js index d967f24..b66f892 100644 --- a/src/renderer/src/utils/date.js +++ b/src/renderer/src/utils/date.js @@ -167,3 +167,19 @@ export function getTomorrow() { return tomorrow; } + +/** + * date() z转为日期格式 + * @param {*} format + * @returns + */ +export const getDateFormatDate = (newDate)=> { + const now = newDate; // new Date(); + const year = now.getFullYear(); + const month = (now.getMonth() + 1).toString().padStart(2, '0'); + const day = now.getDate().toString().padStart(2, '0'); + // const hours = now.getHours().toString().padStart(2, '0'); + // const minutes = now.getMinutes().toString().padStart(2, '0'); + + return `${year}-${month}-${day}`; +} diff --git a/src/renderer/src/views/classTask/classTask.vue b/src/renderer/src/views/classTask/classTask.vue index e034d45..736450b 100644 --- a/src/renderer/src/views/classTask/classTask.vue +++ b/src/renderer/src/views/classTask/classTask.vue @@ -19,6 +19,16 @@ /> +
+ +
@@ -63,7 +73,7 @@ import { listByDeadDate, listClassworkdata } from '@/api/classTask' import TaskItem from '@/views/classTask/container/classTask/task-item.vue' // import ItemDialog from '@/views/classTask/container/item-dialog.vue' import { useToolState } from '@/store/modules/tool' -import { getCurrentTime } from '@/utils/date' +import { getCurrentTime, getDateFormatDate } from '@/utils/date' import useUserStore from '@/store/modules/user' import useClassTaskStore from "@/store/modules/classTask"; import {createWindow} from '@/utils/tool' @@ -81,6 +91,16 @@ const tabActive = ref('待批改') const dataList = ref([]) const EndDate = ref(getCurrentTime('YYYY-MM-DD')) +const startEndDate = ref([ + new Date(2024, 9, 1, 0, 0, 0), + new Date(2024, 11, 1, 23, 59, 59), +]) +const defaultTime = ref<[Date, Date]>([ + new Date(2024, 9, 1, 0, 0, 0), + new Date(2024, 11, 1, 23, 59, 59), +]) +console.log(new Date(2000, 1, 1, 0, 0, 0),'-------------------' ) + // 所有班级作业列表 const classWorkList = ref([]) const total = ref(0) @@ -110,6 +130,14 @@ const changeEndDate = (val) => { console.log('截止日期改变', val) getData() // 加载数据 } +const changeStartEndDate = (val) => { + console.log('启止日期改变', val) + console.log('startEndDate', startEndDate.value) + console.log('startEndDate-0', getDateFormatDate(startEndDate.value[0])) + console.log('startEndDate-1', getDateFormatDate(startEndDate.value[1])) + + getData() // 加载数据 +} // 获取数据 const getData = async () => { @@ -145,8 +173,9 @@ const getClassWorkList = async () => { edustage: userStore.edustage, // 学段 edusubject: userStore.edusubject,//学科 // deaddate: tabActive.value === '待批改'? getTomorrow() : EndDate.value,// 待批改:明天,已批改:选择的日期 弃用 - deaddate: EndDate.value,// 待批改:明天,已批改:选择的日期 - status: '1', // 作业状态:1-已发布 + startdate: tabActive.value === '待批改'? '' : getDateFormatDate(startEndDate.value[0]), + deaddate: tabActive.value === '待批改'? '' : getDateFormatDate(startEndDate.value[1]),// 待批改:明天,已批改:选择的日期 + status: tabActive.value === '待批改'? '1' : '2', // 作业状态:1-已发布 orderby: 'deaddate DESC', pageSize: 100, }) @@ -156,15 +185,15 @@ const getClassWorkList = async () => { * 1、待批改、以前是以明天判断。现改为传当天的日期,并根据当前日期的时分与截止日期进行判断, * 2、已批改、以前默认是以明天判断。现依然以明天为判断,并根据当前日期时分大于截止日期时分判断。 */ - let list = []; - if(tabActive.value === '待批改'){ - // 待批改 当前日期时间 小于 截止 日期时间 - list = response.rows&&response.rows.filter(item => item.deaddate && getCurrentTime('YYYY-MM-DD HH:mm') < item.deaddate); // 待批改 - }else{ - list = response.rows&&response.rows.filter(item => item.deaddate && getCurrentTime('YYYY-MM-DD HH:mm') > item.deaddate); // 已批改 - } - + // let list = []; + // if(tabActive.value === '待批改'){ + // // 待批改 当前日期时间 小于 截止 日期时间 + // list = response.rows&&response.rows.filter(item => item.deaddate && getCurrentTime('YYYY-MM-DD HH:mm') < item.deaddate); // 待批改 + // }else{ + // list = response.rows&&response.rows.filter(item => item.deaddate && getCurrentTime('YYYY-MM-DD HH:mm') > item.deaddate); // 已批改 + // } + let list = response.rows || []; for (var i = 0; i < list.length; i++) { // 初始化部分新增字段值 list[i].workdatalist = [] @@ -226,7 +255,9 @@ const getStudentClassWorkData = async() => { // edusubject: userStore.edusubject,//学科 // deaddate: tabActive.value === '待批改'? getTomorrow() : EndDate.value,// 待批改:明天,已批改:选择的日期 // deaddate: EndDate.value,// 待批改:明天,已批改:选择的日期 - // //status: '1', // 作业状态:1-已发布 + // startdate: tabActive.value === '待批改'? '' : getDateFormatDate(startEndDate.value[0]), + // deaddate:tabActive.value === '待批改'? '' : getDateFormatDate(startEndDate.value[1]), + // //status: tabActive.value === '待批改'? '1' : '2', // 作业状态:1-已发布 // orderby: "deaddate DESC",// // pageSize: 1000, // }) @@ -426,8 +457,10 @@ const getStudentVisible = async () => { edustage: userStore.edustage,// 学段 edusubject: userStore.edusubject,//学科 // deaddate: tabActive.value === '待批改'? getTomorrow() : EndDate.value,// 待批改:明天,已批改:选择的日期 - deaddate: EndDate.value,// 待批改:明天,已批改:选择的日期 - status: '1', // 作业状态:1-已发布 + // deaddate: EndDate.value,// 待批改:明天,已批改:选择的日期 + startdate: tabActive.value === '待批改'? '' : getDateFormatDate(startEndDate.value[0]), + deaddate: tabActive.value === '待批改'? '' : getDateFormatDate(startEndDate.value[1]), + status: tabActive.value === '待批改'? '1' : '2', // 作业状态:1-已发布 // orderby: 'concat(deaddate,uniquekey) DESC', orderby: 'deaddate DESC', pageSize: 100 diff --git a/src/renderer/src/views/classTask/container/classTask/item-dialog-score.vue b/src/renderer/src/views/classTask/container/classTask/item-dialog-score.vue index e00d892..66b2890 100644 --- a/src/renderer/src/views/classTask/container/classTask/item-dialog-score.vue +++ b/src/renderer/src/views/classTask/container/classTask/item-dialog-score.vue @@ -427,7 +427,7 @@ import useUserStore from '@/store/modules/user' import { ref, reactive } from 'vue' // import { Plus } from '@element-plus/icons-vue' import { ElMessageBox, ElMessage } from 'element-plus' -import { updateClassworkeval, updateClassworkdata, getClassworkdata, updateClassworkevalList } from '@/api/classTask' +import { updateClassworkeval,updateClasswork, updateClassWorkDataAutoFinish, getClassworkdata, updateClassworkevalList } from '@/api/classTask' import { getTimeDate } from '@/utils/date' import ReFilePreview from '@/components/refile-preview/index.vue' import { quizStrToList } from '@/utils/comm'; @@ -871,6 +871,13 @@ const onSubmit = () => { }) return } + /** 1、 更新当前作业是否已经批阅完成 */ + // TODO updateClasswork + + + + + /** 2、 更新每个学生的批阅 */ var formd = { id: dialogProps.value.studentObj.id, // this.activeClassWork.id; @@ -878,7 +885,7 @@ const onSubmit = () => { updatedate: getTimeDate(),// = year+'-'+month+'-'+day+' '+hh+':'+mm; }; // 更新作业批改状态 - updateClassworkdata(formd).then(res => { + updateClassWorkDataAutoFinish(formd).then(res => { }) // 更新题目批改 diff --git a/src/renderer/src/views/classTask/container/classTask/task-item.vue b/src/renderer/src/views/classTask/container/classTask/task-item.vue index f5625f6..484a703 100644 --- a/src/renderer/src/views/classTask/container/classTask/task-item.vue +++ b/src/renderer/src/views/classTask/container/classTask/task-item.vue @@ -35,7 +35,7 @@
- +
{{ item.workdataresultsum }} 练习次数 From f1cdb7b4002932a77d7a49ec2dddb27ee9c24e53 Mon Sep 17 00:00:00 2001 From: zdg Date: Mon, 4 Nov 2024 21:53:37 +0800 Subject: [PATCH 04/24] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- src/main/index.js | 1 + src/renderer/src/plugins/shareStore.js | 2 +- src/renderer/src/utils/tool.js | 31 +++++++++++++++++++ .../src/views/fullScreenPdf/index.vue | 7 +++-- .../src/views/tool/components/side.vue | 18 +++++++---- src/renderer/src/views/tool/sphere.vue | 10 ++++++ 7 files changed, 60 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index ada67fe..31aa157 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "aix-win", - "version": "2.1.21", + "version": "2.1.27", "description": "", "main": "./out/main/index.js", "author": "上海交大重庆人工智能研究院", diff --git a/src/main/index.js b/src/main/index.js index f874b6b..c28c144 100644 --- a/src/main/index.js +++ b/src/main/index.js @@ -175,6 +175,7 @@ async function createLinkWin(data) { data.fullPath += '?urlSource=smarttalk&t' + Date.now() } linkWin[data.key].loadURL(data.fullPath) + if (import.meta.env.VITE_SHOW_DEV_TOOLS === 'true') linkWin[data.key].webContents.openDevTools() linkWin[data.key].once('ready-to-show', () => { linkWin[data.key].show() diff --git a/src/renderer/src/plugins/shareStore.js b/src/renderer/src/plugins/shareStore.js index b2d75df..64531b8 100644 --- a/src/renderer/src/plugins/shareStore.js +++ b/src/renderer/src/plugins/shareStore.js @@ -60,7 +60,7 @@ function stateSyncWatch(storeName, newState) { const diffData = findDifferences(oldState, newState) if(!_.keys(diffData).length) return // 没有变化就终止执行 // 数据处理: 找出差异 - console.log('state-change-diffData', diffData, newState) + // console.log('state-change-diffData', diffData, newState) try { let pinaValue = {} // store pina状态管理需要的数据格式 // 数据转换处理 diff --git a/src/renderer/src/utils/tool.js b/src/renderer/src/utils/tool.js index 84fc77b..82b52cb 100644 --- a/src/renderer/src/utils/tool.js +++ b/src/renderer/src/utils/tool.js @@ -200,6 +200,25 @@ export const createWindow = async (type, data) => { eventHandles(type, winChild) // 事件监听处理 return winChild } + case 'open-win': { // 创建-新窗口 + const option = data.option||{} + const defOption = { + show: false, + frame: true, // 无边框 + autoHideMenuBar: true, + maximizable: false, + } + data.isConsole = true // 是否开启控制台 + data.option = {...defOption, ...option} + const win = await toolWindow(type, data) + win.type = type // 唯一标识 + win.show() + win.maximize(); + // win.setFullScreen(true) // 设置窗口为全屏 + if (import.meta.env.VITE_SHOW_DEV_TOOLS === 'true') win.webContents.openDevTools() // 打开调试工具 + eventHandles(type, win) // 事件监听处理 + break + } default: break } @@ -360,6 +379,18 @@ const eventHandles = (type, win) => { publicMethods(on) // 加载公共方法 break; } + case 'open-win': { // 打开新窗口 + // 监听窗口关闭事件 + win.on('closed', function () { + win&&win.destroy() + }); + const on = { + onClosed: () => { + } + } + publicMethods(on) // 加载公共方法 + break + } default: break } diff --git a/src/renderer/src/views/fullScreenPdf/index.vue b/src/renderer/src/views/fullScreenPdf/index.vue index 910961c..2f85aa9 100644 --- a/src/renderer/src/views/fullScreenPdf/index.vue +++ b/src/renderer/src/views/fullScreenPdf/index.vue @@ -18,9 +18,10 @@ const loadPdfAnimation = (path) => { },2000) } onMounted(() => { - console.log('路由参数====',route); - const { pdfUrl } = route.query - const bookpath = !!pdfUrl ? pdfUrl : localStorage.getItem('PDF-LOCAL-PATH') + const pdfUrl1 = localStorage.getItem('PDF-TOOL-PATH') + const pdfUrl2 = localStorage.getItem('PDF-LOCAL-PATH') + console.log('tool-pdf 地址: ',pdfUrl1, pdfUrl2) + const bookpath = pdfUrl1 || pdfUrl2 // const filepath = import.meta.env.VITE_APP_RES_FILE_PATH + bookpath // const isDev = process.env.NODE_ENV == 'development' // if (isDev) diff --git a/src/renderer/src/views/tool/components/side.vue b/src/renderer/src/views/tool/components/side.vue index f6ce4e2..71f3848 100644 --- a/src/renderer/src/views/tool/components/side.vue +++ b/src/renderer/src/views/tool/components/side.vue @@ -36,7 +36,7 @@
{{ item.tag }} - {{ curNode.bookName }} + {{ item.name }} 打开
@@ -55,7 +55,7 @@ import { computed, defineProps, ref, reactive, watchEffect, onMounted} from 'vue import { sessionStore } from '@/utils/store' import homework from './homework.vue'; import { ElMessage } from 'element-plus'; -import { toRoter } from '@/utils/tool' // 相关工具 +import { toRoter, createWindow } from '@/utils/tool' // 相关工具 // 功能说明:侧边-工具栏 const colors = ['#409EFF','#00f389', '#ff7f00', '#ffff00', '#00baff', '#13b189', '#F56C6C'] @@ -112,9 +112,9 @@ const getStyle = (style,index) => { // 获取内容数据 const getContent = o => { loading.value = true - const { bookName } = curNode - const textbook = { type: 'book', tag: '教材', name: bookName } - const course = { type: 'course', tag: '课标', name: bookName } + const { roottitle, edustage, edusubject } = curNode + const textbook = { type: 'book', tag: '教材', name: roottitle } + const course = { type: 'course', tag: '课标', name: `${edustage}-${edusubject}-课标` } cData.value = [textbook, course] loading.value = false } @@ -145,8 +145,14 @@ const openFile = item => { if (item.type == 'book') path = (textBook.curBookPath||'').replace('.txt', '.pdf') else path = textBook.curBookPath.replace(/([^-]*)$/, '课标.pdf') const url = pdfBasePath + encodeURIComponent(`${fileBasePath}${path}`) + console.log(url) + localStorage.setItem('PDF-TOOL-PATH', url) // 打开新窗口 - toRoter(`${process.env['ELECTRON_RENDERER_URL']}/#/fullscreenpdf?pdfUrl=${url}`) + // toRoter(`${process.env['ELECTRON_RENDERER_URL']}/#/fullscreenpdf`) + console.log('pdf_old:' + localStorage.getItem('PDF-LOCAL-PATH')) + console.log('pdf_new:' + localStorage.getItem('PDF-TOOL-PATH')) + // emit('change', { prop: 'bookOpen' }) + createWindow('open-win', {url: '/fullscreenpdf'}) } } // 回调: 关闭事件 diff --git a/src/renderer/src/views/tool/sphere.vue b/src/renderer/src/views/tool/sphere.vue index 2a6f520..cf204d5 100644 --- a/src/renderer/src/views/tool/sphere.vue +++ b/src/renderer/src/views/tool/sphere.vue @@ -207,6 +207,16 @@ const sideMouse = e => { const sideChange = async o => { // console.log(o) switch(o.prop) { + case 'bookOpen': + if(isOpenBook.value) { + isOpenBook.value = false + ElMessage.info('已经打开课本了哦') + }else { + // createWindow('fullScreen-PDF',{url: '/fullscreenpdf'}) + toRoter(`${process.env['ELECTRON_RENDERER_URL']}/#/fullscreenpdf`) + isOpenBook.value = true + } + break case 'book': isMask.value = !isMask.value break From 2407e66e6693731dfc79e54cdb9139045aa430dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E4=BA=86=E4=B8=AA=E7=99=BD?= <543593352@qq.com> Date: Tue, 5 Nov 2024 11:12:14 +0800 Subject: [PATCH 05/24] =?UTF-8?q?=E4=BD=9C=E4=B8=9A=E6=89=B9=E6=94=B9?= =?UTF-8?q?=EF=BC=9A=E5=B7=B2=E6=89=B9=E6=94=B9=E6=97=A5=E6=9C=9F=E6=9B=B4?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/renderer/src/utils/date.js | 48 +++++++++++++++++-- .../src/views/classTask/classTask.vue | 22 ++++----- 2 files changed, 54 insertions(+), 16 deletions(-) diff --git a/src/renderer/src/utils/date.js b/src/renderer/src/utils/date.js index b66f892..b411c49 100644 --- a/src/renderer/src/utils/date.js +++ b/src/renderer/src/utils/date.js @@ -167,9 +167,53 @@ export function getTomorrow() { return tomorrow; } +/** + * 当前日期的 前几天 + * @param {*} index 天数 + * @param {*} format true 返回中国标准时间:Wed Oct 02 2024 08:00:00 GMT+0800 (中国标准时间) 格式; false 返回标准时间格式 YYYY-MM-DD + * @returns + */ +export function getTheOtherDay(index, format=true) { + let date = new Date(); + var year = date.getFullYear() + var month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1 + var day = date.getDate()- index < 10 ? '0' + (date.getDate()- index) : date.getDate()- index + + // 前 index 天的时间 + if(format){ + let tomorrow = `${year}-${month}-${day}`; + return new Date(tomorrow); + }else{ + let tomorrow = `${year}-${month}-${day}`; + return tomorrow; + } +} +/** + * 当前日期的 后几天 + * @param {*} index 天数 + * @param {*} format true 返回中国标准时间:Wed Oct 02 2024 08:00:00 GMT+0800 (中国标准时间) 格式; false 返回标准时间格式 YYYY-MM-DD + * @returns + */ +export function getTheOtheNextDay(index, format=true) { + const date = new Date(); + var year = date.getFullYear() + var month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1 + var day = date.getDate()+ index < 10 ? '0' + (date.getDate()+ index) : date.getDate()+ index + + // 前 index 天的时间 + if(format){ + const tomorrow = `${year}-${month}-${day}`; + return new Date(tomorrow); + }else{ + const tomorrow = `${year}-${month}-${day}`; + return tomorrow; + } +} + /** - * date() z转为日期格式 + * Wed Oct 02 2024 08:00:00 GMT+0800 (中国标准时间) 转为日期格式: YYYY-MM-DD + * * @param {*} format * @returns */ @@ -178,8 +222,6 @@ export const getDateFormatDate = (newDate)=> { const year = now.getFullYear(); const month = (now.getMonth() + 1).toString().padStart(2, '0'); const day = now.getDate().toString().padStart(2, '0'); - // const hours = now.getHours().toString().padStart(2, '0'); - // const minutes = now.getMinutes().toString().padStart(2, '0'); return `${year}-${month}-${day}`; } diff --git a/src/renderer/src/views/classTask/classTask.vue b/src/renderer/src/views/classTask/classTask.vue index 736450b..50a7f39 100644 --- a/src/renderer/src/views/classTask/classTask.vue +++ b/src/renderer/src/views/classTask/classTask.vue @@ -73,7 +73,7 @@ import { listByDeadDate, listClassworkdata } from '@/api/classTask' import TaskItem from '@/views/classTask/container/classTask/task-item.vue' // import ItemDialog from '@/views/classTask/container/item-dialog.vue' import { useToolState } from '@/store/modules/tool' -import { getCurrentTime, getDateFormatDate } from '@/utils/date' +import { getCurrentTime, getDateFormatDate, getTheOtherDay, getTheOtheNextDay } from '@/utils/date' import useUserStore from '@/store/modules/user' import useClassTaskStore from "@/store/modules/classTask"; import {createWindow} from '@/utils/tool' @@ -90,16 +90,16 @@ const tabOptions = ref(['待批改', '已批改']) const tabActive = ref('待批改') const dataList = ref([]) const EndDate = ref(getCurrentTime('YYYY-MM-DD')) - +// 默认起止时间:当前日期前2天后3天;默认查询一周的数据 const startEndDate = ref([ - new Date(2024, 9, 1, 0, 0, 0), - new Date(2024, 11, 1, 23, 59, 59), + getTheOtherDay(3), + getTheOtheNextDay(3), ]) const defaultTime = ref<[Date, Date]>([ - new Date(2024, 9, 1, 0, 0, 0), - new Date(2024, 11, 1, 23, 59, 59), + getTheOtherDay(3), + getTheOtheNextDay(3), ]) -console.log(new Date(2000, 1, 1, 0, 0, 0),'-------------------' ) + // 所有班级作业列表 const classWorkList = ref([]) @@ -131,11 +131,7 @@ const changeEndDate = (val) => { getData() // 加载数据 } const changeStartEndDate = (val) => { - console.log('启止日期改变', val) - console.log('startEndDate', startEndDate.value) - console.log('startEndDate-0', getDateFormatDate(startEndDate.value[0])) - console.log('startEndDate-1', getDateFormatDate(startEndDate.value[1])) - + console.log('起止日期改变', val) getData() // 加载数据 } @@ -180,7 +176,7 @@ const getClassWorkList = async () => { pageSize: 100, }) - /** + /** 2024-11-02 需求更改;弃用 * 2024-10-17 由于 后面截止时间加了 时分,特加判断 * 1、待批改、以前是以明天判断。现改为传当天的日期,并根据当前日期的时分与截止日期进行判断, * 2、已批改、以前默认是以明天判断。现依然以明天为判断,并根据当前日期时分大于截止日期时分判断。 From 1cc0bf965e8d7cd2fde8e2609aa6f3372ced1eff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E4=BA=86=E4=B8=AA=E7=99=BD?= <543593352@qq.com> Date: Tue, 5 Nov 2024 11:15:06 +0800 Subject: [PATCH 06/24] 1 --- .../src/views/classTask/classTask.vue | 21 +------------------ 1 file changed, 1 insertion(+), 20 deletions(-) diff --git a/src/renderer/src/views/classTask/classTask.vue b/src/renderer/src/views/classTask/classTask.vue index 50a7f39..7b28e7c 100644 --- a/src/renderer/src/views/classTask/classTask.vue +++ b/src/renderer/src/views/classTask/classTask.vue @@ -5,20 +5,6 @@
-
-
- -
-
{ const disabledDate = (time) => { return time.getTime() > Date.now() } -// 截止日期改变 -const changeEndDate = (val) => { - console.log('截止日期改变', val) - getData() // 加载数据 -} + const changeStartEndDate = (val) => { console.log('起止日期改变', val) getData() // 加载数据 From a918aa18e9d5daf1474fee8579ba34ae8c5f45d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E4=BA=86=E4=B8=AA=E7=99=BD?= <543593352@qq.com> Date: Tue, 5 Nov 2024 17:28:16 +0800 Subject: [PATCH 07/24] =?UTF-8?q?=E4=BD=9C=E4=B8=9A=E6=89=B9=E6=94=B9?= =?UTF-8?q?=E5=88=97=E8=A1=A8=EF=BC=9A=E9=80=BB=E8=BE=91=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/renderer/src/store/modules/classTask.js | 28 - .../src/views/classTask/classTask.vue | 521 ++++++++---------- 2 files changed, 224 insertions(+), 325 deletions(-) delete mode 100644 src/renderer/src/store/modules/classTask.js diff --git a/src/renderer/src/store/modules/classTask.js b/src/renderer/src/store/modules/classTask.js deleted file mode 100644 index f0008cf..0000000 --- a/src/renderer/src/store/modules/classTask.js +++ /dev/null @@ -1,28 +0,0 @@ -import { defineStore } from 'pinia' -import { } from '@/api/classTask/index.js' -import { listClassmain } from '@/api/classManage/index' - -const useClassTaskStore = defineStore('classTask',{ - state: () => ({ - classListIds: [], - }), - actions: { - listClassmain(params) { - // 获取班级列表 - return new Promise((resolve, reject) => { - listClassmain(params) - .then((res) => { - this.classListIds = res.rows&&res.rows.map((item) => item.id) - resolve(res) - }) - .catch((error) => { - reject(error) - }) - }) - }, - }, - persist: true -}) -export default useClassTaskStore - - diff --git a/src/renderer/src/views/classTask/classTask.vue b/src/renderer/src/views/classTask/classTask.vue index 7b28e7c..61107f9 100644 --- a/src/renderer/src/views/classTask/classTask.vue +++ b/src/renderer/src/views/classTask/classTask.vue @@ -61,7 +61,6 @@ import TaskItem from '@/views/classTask/container/classTask/task-item.vue' import { useToolState } from '@/store/modules/tool' import { getCurrentTime, getDateFormatDate, getTheOtherDay, getTheOtheNextDay } from '@/utils/date' import useUserStore from '@/store/modules/user' -import useClassTaskStore from "@/store/modules/classTask"; import {createWindow} from '@/utils/tool' import {sessionStore} from '@/utils/store' import {debounce } from '@/utils/comm' @@ -69,7 +68,6 @@ import {debounce } from '@/utils/comm' const toolState = useToolState(); -const classTaskStore = useClassTaskStore() const userStore = useUserStore().user // const itemDialogRef = ref(null) const tabOptions = ref(['待批改', '已批改']) @@ -96,15 +94,16 @@ const loading = ref(false) const activeDataList = computed(() => { return classWorkList.value }) +const doneDataList = computed(() => { + return classWorkList.value +}) const deleteReserv = (item) => { console.log('删除待开发', item) // dataList.value = dataList.value.filter((is) => { // return is.id !== item.id // }) } -const doneDataList = computed(() => { - return classWorkList.value -}) + // 当日之后的日期禁用 const disabledDate = (time) => { @@ -120,250 +119,202 @@ const changeStartEndDate = (val) => { const getData = async () => { classWorkList.value = [] loading.value = true - // 1、班级列表 - // getClassList() - // 2、班级作业 + // 1、班级作业 await getClassWorkList() - // 3、班级学生作业 包含多个班级 + // 2、班级学生作业 包含多个班级 getStudentClassWorkData() loading.value = false } + /** - * 1、获取班级列表数据 - * TODO 这里暂时取班级id的list,后续需要在修改 - */ -const getClassList = () => { - if(classTaskStore.classListIds.length==0){ - // 获取 班级列表ids 这里暂时取班级id的list,后续需要在修改 - classTaskStore.listClassmain({ classuserid: userStore.userId, pageSize: 100, status: 'open' }) - } -} -/** - * 2、获取班级作业 + * 1、获取班级作业 */ const getClassWorkList = async () => { - //if(classTaskStore.classListIds.length>0){ - { - // 班级作业数据,包含多个班级 homeworklist - const response = await listByDeadDate({ - edituserid: userStore.userId, // 老师的id - edustage: userStore.edustage, // 学段 - edusubject: userStore.edusubject,//学科 - // deaddate: tabActive.value === '待批改'? getTomorrow() : EndDate.value,// 待批改:明天,已批改:选择的日期 弃用 - startdate: tabActive.value === '待批改'? '' : getDateFormatDate(startEndDate.value[0]), - deaddate: tabActive.value === '待批改'? '' : getDateFormatDate(startEndDate.value[1]),// 待批改:明天,已批改:选择的日期 - status: tabActive.value === '待批改'? '1' : '2', // 作业状态:1-已发布 - orderby: 'deaddate DESC', - pageSize: 100, - }) + // 班级作业数据,包含多个班级 homeworklist + const response = await listByDeadDate({ + edituserid: userStore.userId, // 老师的id + edustage: userStore.edustage, // 学段 + edusubject: userStore.edusubject,//学科 + startdate: tabActive.value === '待批改'? '' : getDateFormatDate(startEndDate.value[0]), + deaddate: tabActive.value === '待批改'? '' : getDateFormatDate(startEndDate.value[1]),// 待批改:明天,已批改:选择的日期 + status: tabActive.value === '待批改'? '1' : '2', // 作业状态:1-已发布 + orderby: 'deaddate DESC', + pageSize: 100, + }) - /** 2024-11-02 需求更改;弃用 - * 2024-10-17 由于 后面截止时间加了 时分,特加判断 - * 1、待批改、以前是以明天判断。现改为传当天的日期,并根据当前日期的时分与截止日期进行判断, - * 2、已批改、以前默认是以明天判断。现依然以明天为判断,并根据当前日期时分大于截止日期时分判断。 - */ - // let list = []; - // if(tabActive.value === '待批改'){ - // // 待批改 当前日期时间 小于 截止 日期时间 - // list = response.rows&&response.rows.filter(item => item.deaddate && getCurrentTime('YYYY-MM-DD HH:mm') < item.deaddate); // 待批改 - // }else{ - // list = response.rows&&response.rows.filter(item => item.deaddate && getCurrentTime('YYYY-MM-DD HH:mm') > item.deaddate); // 已批改 - // } + let list = response.rows || []; + for (var i = 0; i < list.length; i++) { + // 初始化部分新增字段值 + list[i].workdatalist = [] // 当前任务中有多少个学生的数据集合 + list[i].workdatalistVisible = false + list[i].feedtimelength = 0 // 已交的学生人中,汇总计算用时 + list[i].rightAnswerCount = 0 + list[i].scoingRate = 0 + '%' // 得分率 + list[i].averagetime = 0 // 平均用时 - let list = response.rows || []; - for (var i = 0; i < list.length; i++) { - // 初始化部分新增字段值 - list[i].workdatalist = [] - list[i].workdatalistVisible = false - list[i].workdatafeedbackcount = 0 // 已交人数 - list[i].feedtimelength = 0 - list[i].rightAnswerCount = 0 - list[i].scoingRate = 0 + '%' // 得分率 - list[i].averagetime = 0 // 平均用时 - - // ---------------------------------------------- - // 处理任务类型的UI - if (list[i].worktype == '学习目标定位') { - list[i].workclass = 'success' - list[i].workcodesList = JSON.parse(list[i].workcodes) - } else if (list[i].worktype == '教材研读') { - list[i].workclass = 'primary' - } else if (list[i].worktype == '框架梳理') { - list[i].workclass = 'warning' - } else if (list[i].worktype == '学科定位') { - list[i].workclass = 'info' - } else if (list[i].worktype == '习题训练') { - list[i].workclass = 'danger' - } else { - list[i].workclass = '' - } - // 如果是习题训练任务,则检查一共有多少道 - if (list[i].entpcourseworklist != '') { - list[i].entpcourseworklistarray = JSON.parse( - '[' + list[i].entpcourseworklist + ']' - ) - } else { - list[i].entpcourseworklistarray = [] - } + // ---------------------------------------------- + // 处理任务类型的UI + if (list[i].worktype == '学习目标定位') { + list[i].workclass = 'success' + list[i].workcodesList = JSON.parse(list[i].workcodes) + } else if (list[i].worktype == '教材研读') { + list[i].workclass = 'primary' + } else if (list[i].worktype == '框架梳理') { + list[i].workclass = 'warning' + } else if (list[i].worktype == '学科定位') { + list[i].workclass = 'info' + } else if (list[i].worktype == '习题训练') { + list[i].workclass = 'danger' + } else { + list[i].workclass = '' } - // 显示分配人数(workdataresultsum)>0 的 - if (list && list.length > 0) { - classWorkList.value = list && list.filter((item) => item.workdataresultsum > 0) - //TODO: 这里没分页,貌似这个 total 不重要,后续看 - total.value = 0 - }else{ - classWorkList.value = [] - total.value = 0 + // 如果是习题训练任务,则检查一共有多少道 + if (list[i].entpcourseworklist != '') { + list[i].entpcourseworklistarray = JSON.parse( + '[' + list[i].entpcourseworklist + ']' + ) + } else { + list[i].entpcourseworklistarray = [] } - loading.value = false } + + // 显示分配人数(workdataresultsum)>0 的 + if (list && list.length > 0) { + classWorkList.value = list && list.filter((item) => item.workdataresultsum > 0) + //TODO: 这里没分页,貌似这个 total 不重要,后续看 + total.value = 0 + }else{ + classWorkList.value = [] + total.value = 0 + } + loading.value = false } /** - * 3、获取多个班级学生作业数据 + * 2、获取多个班级学生作业数据 + * 查询已交的列表 + * @param workList :需要更新的作业list + * @param Refresh :true 不用刷新,false 需要刷新 */ -const getStudentClassWorkData = async() => { - // const { chapterId } = await useGetHomework(props.bookobj.node) - // this.entpcourseid = chapterId - //if(classTaskStore.classListIds.length>0){ - // listClassworkdataByDeadDate({ - // edituserid: userStore.userId, // 老师的id - // classids: classTaskStore.classListIds.join(','), - // edusubject: userStore.edusubject,//学科 - // deaddate: tabActive.value === '待批改'? getTomorrow() : EndDate.value,// 待批改:明天,已批改:选择的日期 - // deaddate: EndDate.value,// 待批改:明天,已批改:选择的日期 - // startdate: tabActive.value === '待批改'? '' : getDateFormatDate(startEndDate.value[0]), - // deaddate:tabActive.value === '待批改'? '' : getDateFormatDate(startEndDate.value[1]), - // //status: tabActive.value === '待批改'? '1' : '2', // 作业状态:1-已发布 - // orderby: "deaddate DESC",// - // pageSize: 1000, - // }) +const getStudentClassWorkData = async(workList = [], Refresh = true) => { + // 获取 已交的 列表数据(workdataresultcount 已交的学生数) + let SubmitClWorkList = []; + if(Refresh){ + SubmitClWorkList = classWorkList.value.filter((item) => item.workdataresultcount > 0) ; + }else{ + SubmitClWorkList = workList; + } - // listClassworkdataNew({ - // classworkids: ids, // 作业id - // edituserid: userStore.userId, // 老师的id - // edusubject: userStore.edusubject,//学科 - // evalStatus: 1, - // pageSize: 1000, - // }) + console.log('有提交的作业', SubmitClWorkList) + const ids = SubmitClWorkList&&SubmitClWorkList.map((item) => item.id).join(','); + if (ids == '') { + return; + } + listClassworkdata({ + classworkids: ids, + pageSize: 1000, + }).then((res) => { + for (var t = 0; t < classWorkList.value.length; t++) { + for (var i = 0; i < res.rows.length; i++) { + // finishtimelength != '0' 已交 + if (res.rows[i].classworkid == classWorkList.value[t].id && res.rows[i].finishtimelength != '0') { + console.log('==================') + // 有几个学生完成/正在完成学习任务 + // 至少resultcount不是0 + //classWorkList.value[t].workdataresultcount++ - - { - const ids = classWorkList.value.map((item) => item.id).join(','); - if (ids == '') { - return; - } - listClassworkdata({ - classworkids: ids, - pageSize: 1000, - }).then((res) => { - for (var t = 0; t < classWorkList.value.length; t++) { - for (var i = 0; i < res.rows.length; i++) { - if (res.rows[i].classworkid == classWorkList.value[t].id && res.rows[i].finishtimelength != '0') { - console.log('==================') - // 有几个学生完成/正在完成学习任务 - // 至少resultcount不是0 - classWorkList.value[t].workdatafeedbackcount++ + // 已交的学生人中,汇总计算用时 + classWorkList.value[t].feedtimelength += parseInt(res.rows[i].finishtimelength) - // 在参与学习任务的人中,汇总计算用时 - classWorkList.value[t].feedtimelength += parseInt(res.rows[i].finishtimelength) + // 计算得分率 + if ( + res.rows[i].classworkevallist != '' && + res.rows[i].classworkevallist != null && + res.rows[i].classworkevallist != 'null' + ) { + let replacedString = res.rows[i].classworkevallist.replace(/""/g, '"') + // 将标签中双引号改为转义, 测试数据: "{\"id\":172907, \"rating\":0, \"teacherRating\":0, \"entpcourseworkid\":358520, \"feedcontent\":\"④①⑤③②\", \"score\":4, \"rightanswer\":\"④①⑤③②\"},{\"id\":172908, \"rating\":0, \"teacherRating\":0, \"entpcourseworkid\":358521, \"feedcontent\":\"气壮山威,鲲鹏展翅楚云飞\", \"score\":4, \"rightanswer\":\"志远天高,春风杨柳麓山青\"},{\"id\":172909, \"rating\":0, \"teacherRating\":0, \"entpcourseworkid\":363096, \"feedcontent\":\"《红烛》化用“蜡矩”这一古典意象,赋予它新的含义,赞美了红烛以“蜡炬成灰”来点亮世界的奉献精神。\", \"score\":4, \"rightanswer\":\"《立在地球边上放号》中,全诗采用间接抒情的方式,描绘了太平洋的浪潮,吟唱了一曲惊心动魄的力的颂歌,意在赞美摧毁旧世界、创造新生活的“五四”精神。\"},{\"id\":172910, \"rating\":0, \"teacherRating\":0, \"entpcourseworkid\":363098, \"feedcontent\":\"毛泽东重游橘子洲,面对如画的秋色和大好的革命形势,回忆过去战斗的岁月,不禁心潮起伏,浮想联翩。\", \"score\":4, \"rightanswer\":\"毛泽东重游橘子洲,面对如画的秋色和大好的革命形势,回忆过去战斗的岁月,不禁心潮起伏,浮想联翩。\"},{\"id\":172911, \"rating\":0, \"teacherRating\":0, \"entpcourseworkid\":363100, \"feedcontent\":\"毛泽东重游橘子洲,面对如画的秋色和大好的革命形势,回忆过去战斗的岁月,不禁心潮起伏,浮想联翩。\", \"score\":4, \"rightanswer\":\"毛泽东重游橘子洲,面对如画的秋色和大好的革命形势,回忆过去战斗的岁月,不禁心潮起伏,浮想联翩。\"}" + replacedString = escapeHtmlQuotes(res.rows[i].classworkevallist).replace( + /"(\[.*\])"/g, + '$1' + ) + replacedString = escapeHtmlQuotes(res.rows[i].classworkevallist) + var evalarray + try { + evalarray = JSON.parse('[' + res.rows[i].classworkevallist + ']') + } catch { + evalarray = JSON.parse('[' + replacedString + ']') + } - // 计算得分率 - if ( - res.rows[i].classworkevallist != '' && - res.rows[i].classworkevallist != null && - res.rows[i].classworkevallist != 'null' - ) { - let replacedString = res.rows[i].classworkevallist.replace(/""/g, '"') - // 将标签中双引号改为转义, 测试数据: "{\"id\":172907, \"rating\":0, \"teacherRating\":0, \"entpcourseworkid\":358520, \"feedcontent\":\"④①⑤③②\", \"score\":4, \"rightanswer\":\"④①⑤③②\"},{\"id\":172908, \"rating\":0, \"teacherRating\":0, \"entpcourseworkid\":358521, \"feedcontent\":\"气壮山威,鲲鹏展翅楚云飞\", \"score\":4, \"rightanswer\":\"志远天高,春风杨柳麓山青\"},{\"id\":172909, \"rating\":0, \"teacherRating\":0, \"entpcourseworkid\":363096, \"feedcontent\":\"《红烛》化用“蜡矩”这一古典意象,赋予它新的含义,赞美了红烛以“蜡炬成灰”来点亮世界的奉献精神。\", \"score\":4, \"rightanswer\":\"《立在地球边上放号》中,全诗采用间接抒情的方式,描绘了太平洋的浪潮,吟唱了一曲惊心动魄的力的颂歌,意在赞美摧毁旧世界、创造新生活的“五四”精神。\"},{\"id\":172910, \"rating\":0, \"teacherRating\":0, \"entpcourseworkid\":363098, \"feedcontent\":\"毛泽东重游橘子洲,面对如画的秋色和大好的革命形势,回忆过去战斗的岁月,不禁心潮起伏,浮想联翩。\", \"score\":4, \"rightanswer\":\"毛泽东重游橘子洲,面对如画的秋色和大好的革命形势,回忆过去战斗的岁月,不禁心潮起伏,浮想联翩。\"},{\"id\":172911, \"rating\":0, \"teacherRating\":0, \"entpcourseworkid\":363100, \"feedcontent\":\"毛泽东重游橘子洲,面对如画的秋色和大好的革命形势,回忆过去战斗的岁月,不禁心潮起伏,浮想联翩。\", \"score\":4, \"rightanswer\":\"毛泽东重游橘子洲,面对如画的秋色和大好的革命形势,回忆过去战斗的岁月,不禁心潮起伏,浮想联翩。\"}" - replacedString = escapeHtmlQuotes(res.rows[i].classworkevallist).replace( - /"(\[.*\])"/g, - '$1' - ) - replacedString = escapeHtmlQuotes(res.rows[i].classworkevallist) - var evalarray - try { - evalarray = JSON.parse('[' + res.rows[i].classworkevallist + ']') - } catch { - evalarray = JSON.parse('[' + replacedString + ']') + for (var e = 0; e < evalarray.length; e++) { + if (res.rows[i].worktype == '常规作业') { + evalarray[e].feedcontent = escapeHtmlQuotes(evalarray[e].feedcontent).replace( + /"(\[.*\])"/g, + '$1' + ) + evalarray[e].feedcontent = escapeHtmlQuotes(evalarray[e].feedcontent) } - - for (var e = 0; e < evalarray.length; e++) { - if (res.rows[i].worktype == '常规作业') { - evalarray[e].feedcontent = escapeHtmlQuotes(evalarray[e].feedcontent).replace( - /"(\[.*\])"/g, - '$1' - ) - evalarray[e].feedcontent = escapeHtmlQuotes(evalarray[e].feedcontent) - } - if (evalarray[e].feedcontent == evalarray[e].rightanswer) { - // 正确,得分 - classWorkList.value[t].rightAnswerCount++ - } + if (evalarray[e].feedcontent == evalarray[e].rightanswer) { + // 正确,得分 + classWorkList.value[t].rightAnswerCount++ } } } - // 当前这个学习任务,共推送给了几个学生,workdataresultsum - if (res.rows[i].classworkid == classWorkList.value[t].id) { - classWorkList.value[t].workdatalist.push(res.rows[i]) - } } - // 计算完成进度 workdataresultsum人数要大于0 - if ( - classWorkList.value[t].workdataresultcount > 0 && - classWorkList.value[t].workdataresultsum > 0 - ) { - classWorkList.value[t].finishpercent = parseInt( - (classWorkList.value[t].workdataresultcount / classWorkList.value[t].workdataresultsum) * 100 - ) - } else { - classWorkList.value[t].finishpercent = 0 + // 当前这个学习任务,共推送给了几个学生,workdataresultsum + if (res.rows[i].classworkid == classWorkList.value[t].id) { + classWorkList.value[t].workdatalist.push(res.rows[i]) } - - /** 计算 已批阅进度 */ - // workdataresultsum 人数 teacherrationgcount 已批阅人数 - // 已批阅百分比: (人数-已批阅数) / 人数 * 100 - if (classWorkList.value[t].workdataresultsum > 0) { - // teacherCorrectionProgress 老师已批阅进度条: - classWorkList.value[t].teacherCorrectionProgress = parseInt( - ((classWorkList.value[t].teacherrationgcount) / classWorkList.value[t].workdataresultsum) * 100 - ) - } else { - classWorkList.value[t].teacherCorrectionProgress = 0 - } - - // 以下四个参数,都要计算 - // 2024-04-12,酉阳,by jackyshen - - // 计算参与学习任务的平均用时 - if (classWorkList.value[t].workdatafeedbackcount > 0) { - classWorkList.value[t].averagetime = Math.ceil(classWorkList.value[t].feedtimelength / classWorkList.value[t].workdatafeedbackcount / 60).toFixed(0) - } else { - classWorkList.value[t].averagetime = 0 - } - - // 计算批阅异常,需要获取每个题目的类型,找出主观题 - // 暂缓 - - // 计算平均得分率: 正确题数/(题目总数*学生人数)*100 - if ( - classWorkList.value[t].entpcourseworklistarray && - classWorkList.value[t].entpcourseworklistarray.length > 0 - ) { - var dd = - (classWorkList.value[t].rightAnswerCount / - (classWorkList.value[t].entpcourseworklistarray.length * - classWorkList.value[t].workdataresultsum)) * - 100 - classWorkList.value[t].scoingRate = dd.toFixed(0) + '%' - } else { - classWorkList.value[t].scoingRate = '0%' - } - // 设定典型作答,需要获取每个题目的类型,找出主观题 - // 暂缓 } - }) - } + + + // 计算完成进度: workdataresultcount 学生提交了的个数; workdataresultsum 人数要大于0; + if (classWorkList.value[t].workdataresultcount > 0 && classWorkList.value[t].workdataresultsum > 0 ) { + classWorkList.value[t].finishpercent = parseInt( + (classWorkList.value[t].workdataresultcount / classWorkList.value[t].workdataresultsum) * 100 + ) + } else { + classWorkList.value[t].finishpercent = 0 + } + + /** 计算 已批阅进度 */ + // workdataresultsum 人数 teacherrationgcount 已批阅人数 + // 已批阅百分比: (人数-已批阅数) / 人数 * 100 + if (classWorkList.value[t].workdataresultsum > 0) { + classWorkList.value[t].teacherCorrectionProgress = parseInt( + ((classWorkList.value[t].teacherrationgcount) / classWorkList.value[t].workdataresultsum) * 100 + ) + } else { + classWorkList.value[t].teacherCorrectionProgress = 0 + } + + // 以下四个参数,都要计算 + // 2024-04-12,酉阳,by jackyshen + + // 计算参与学习任务的平均用时:学生总用时/ 提交学生数 + if (classWorkList.value[t].workdataresultcount > 0) { + classWorkList.value[t].averagetime = Math.ceil(classWorkList.value[t].feedtimelength / classWorkList.value[t].workdataresultcount / 60).toFixed(0) + } else { + classWorkList.value[t].averagetime = 0 + } + + // 计算平均得分率: 正确题数/(题目总数*学生人数)*100 + if ( + classWorkList.value[t].entpcourseworklistarray && + classWorkList.value[t].entpcourseworklistarray.length > 0 + ) { + var dd = + (classWorkList.value[t].rightAnswerCount / + (classWorkList.value[t].entpcourseworklistarray.length * + classWorkList.value[t].workdataresultsum)) * + 100 + classWorkList.value[t].scoingRate = dd.toFixed(0) + '%' + } else { + classWorkList.value[t].scoingRate = '0%' + } + } + }) + } @@ -424,91 +375,56 @@ onUnmounted(() => { // [作业反馈] - 实际查询逻辑 const getStudentVisible = async () => { - if (classTaskStore.classListIds.length <= 0) { - return + if(!classWorkList.value.length>0){ + return; } - // 班级作业数据,多个班级 const response = await listByDeadDate({ - classidarray: classTaskStore.classListIds.join(','), edituserid: userStore.userId, // 老师的id - edustage: userStore.edustage,// 学段 + edustage: userStore.edustage, // 学段 edusubject: userStore.edusubject,//学科 - // deaddate: tabActive.value === '待批改'? getTomorrow() : EndDate.value,// 待批改:明天,已批改:选择的日期 - // deaddate: EndDate.value,// 待批改:明天,已批改:选择的日期 startdate: tabActive.value === '待批改'? '' : getDateFormatDate(startEndDate.value[0]), - deaddate: tabActive.value === '待批改'? '' : getDateFormatDate(startEndDate.value[1]), + deaddate: tabActive.value === '待批改'? '' : getDateFormatDate(startEndDate.value[1]),// 待批改:明天,已批改:选择的日期 status: tabActive.value === '待批改'? '1' : '2', // 作业状态:1-已发布 - // orderby: 'concat(deaddate,uniquekey) DESC', orderby: 'deaddate DESC', - pageSize: 100 + pageSize: 100, }) - /** - * 2024-10-17 由于 后面截止时间加了 时分,特加判断 - * 1、待批改、以前是以明天判断。现改为传当天的日期,并根据当前日期的时分与截止日期进行判断, - * 2、已批改、以前默认是以明天判断。现依然以明天为判断,并根据当前日期时分大于截止日期时分判断。 - */ - let list = []; - if(tabActive.value === '待批改'){ - // 待批改 当前日期时间 小于 截止 日期时间 - list = response.rows&&response.rows.filter(item => item.deaddate && getCurrentTime('YYYY-MM-DD HH:mm') < item.deaddate); // 待批改 - }else{ - list = response.rows&&response.rows.filter(item => item.deaddate && getCurrentTime('YYYY-MM-DD HH:mm') > item.deaddate); // 已批改 - } + let list = response.rows || []; - const curWorkList = list - - /** - * warn: 这里仅更新了finishpercent(进度条), 且当前作业布置推送新任务时, curWorkList中会查到新的任务与当前页面中this.classWorkList长度不一致, - * 故这里需循环this.classWorkList且只更新当前页面中的存在的任务进度 - */ - for (let t = 0; t < classWorkList.value.length; t++) { - // 当前时间超过[作业任务]截止时间的跳过 - // if( getDateTime > classWorkList.value[t].deaddate ){ - // continue; - // } - // 确保当前拿到的任务与页面中存在的任务能一对一(避免因删除其他操作而删除作业任务导致两个数组的index不统一而越界) - let curWork = curWorkList.find((work) => work.id === classWorkList.value[t].id) - // workdataresultcount 完成人数 workdataresultsum人数要大于0 - if (curWork && curWork.workdataresultcount > 0 && classWorkList.value[t].workdataresultsum > 0) { - classWorkList.value[t].workdataresultcount = curWork.workdataresultcount - // 桌面端貌似不需要进度条了? - classWorkList.value[t].finishpercent = parseInt( - (classWorkList.value[t].workdataresultcount / classWorkList.value[t].workdataresultsum) * 100 - ) - // 计算参与学习任务的平均用时 - if (classWorkList.value[t].workdatafeedbackcount > 0) { - classWorkList.value[t].averagetime = Math.ceil(classWorkList.value[t].feedtimelength / classWorkList.value[t].workdatafeedbackcount / 60).toFixed(0) - } else { - classWorkList.value[t].averagetime = 0 - } - - } else { - // 学生未完成,但是老师批改了? - if(curWork && curWork.workdataresultcount == 0){ - // 更新批改数 - classWorkList.value[t].teacherrationgcount = curWork.teacherrationgcount - } - classWorkList.value[t].finishpercent = 0 + let newList = []; + for(let i = 0; i < classWorkList.value.length; i++){ + // 父list的id与子list的id相等,在进行对比;若是不等? 有可能是老师批阅完了这个list数据,变成了已批改状态中,则父list数据需要删除 + const isList = list.filter((item) => item.id === classWorkList.value[i].id); + if(isList.length === 0){ + // 父list的id与子list的id不相等,则删除父list数据 + classWorkList.value.splice(i,1); } - - /** 计算 已批阅进度 */ - // workdataresultsum 人数 teacherrationgcount 已批阅人数 - // 已批阅百分比: (人数-已批阅数) / 人数 * 100 - if (curWork && curWork.workdataresultsum > 0) { - // 更新批阅数 - classWorkList.value[t].teacherrationgcount = curWork.teacherrationgcount - - // teacherCorrectionProgress 老师已批阅进度条: - classWorkList.value[t].teacherCorrectionProgress = parseInt( - ((curWork.teacherrationgcount) / curWork.workdataresultsum) * 100 - ) - } else { - classWorkList.value[t].teacherCorrectionProgress = 0 + for(let j = 0; j < list.length; j++){ + // workdataresultcount 学生提交了的个数; + if(classWorkList.value[i].id === list[j].id && classWorkList.value[i].workdataresultcount != list[j].workdataresultcount){ + // 学生提交数 != 学生提交数? + newList.push(list[j]); + } + // teacherrationgcount 已批阅人数 + if(classWorkList.value[i].id === list[j].id && classWorkList.value[i].teacherrationgcount != list[j].teacherrationgcount){ + // 更新批阅进度条 + if (classWorkList.value[i].workdataresultsum > 0) { + // 更新批阅数、 进度条 + classWorkList.value[i].teacherrationgcount = list[j].teacherrationgcount; + classWorkList.value[i].teacherCorrectionProgress = parseInt( + ((list[j].teacherrationgcount) / list[j].workdataresultsum) * 100 + ) + } else { + classWorkList.value[i].teacherCorrectionProgress = 0 + } + } } } - - return 1 + if(newList.length>0){ + // 更新学生提交后的数据? 作业进度条、平均用时、得分率 + const list = newList&&newList.filter((item) => item.workdataresultcount > 0) ; + getStudentClassWorkData(list,false); + } } @@ -516,16 +432,27 @@ const getStudentVisible = async () => { watch( () => [dataList, toolState.isTaskWin], () => { - console.log('=监听到批改窗口打开了===', toolState.isTaskWin) + console.log('监听--批改窗口是否打开===', toolState.isTaskWin) if(!toolState.isTaskWin){ - - closeDialog();// 开启轮询 + if(tabActive.value === '待批改'){ + closeDialog();// 开启轮询 + } } } ) + watch(tabActive, (newVal,oldVal)=>{ console.log('newVal',newVal); getData() // 加载数据 + if(newVal === '待批改'){ + // 轮询查询 + console.log('监听---开启轮询') + closeDialog(); + }else{ + // 关闭轮询 + console.log('监听---关闭轮询') + clearInterval(pollingST.value); + } }) From 201b10a91e349b4fb60a45edee0f2a051c874913 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E4=BA=86=E4=B8=AA=E7=99=BD?= <543593352@qq.com> Date: Wed, 6 Nov 2024 09:56:43 +0800 Subject: [PATCH 08/24] =?UTF-8?q?=E5=B7=A5=E4=BD=9C=E5=8F=B0=E4=BD=9C?= =?UTF-8?q?=E4=B8=9A=EF=BC=9A=E9=80=BB=E8=BE=91=E6=9B=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/views/desktop/container/work-trend.vue | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/renderer/src/views/desktop/container/work-trend.vue b/src/renderer/src/views/desktop/container/work-trend.vue index 96397f5..38391f5 100644 --- a/src/renderer/src/views/desktop/container/work-trend.vue +++ b/src/renderer/src/views/desktop/container/work-trend.vue @@ -14,9 +14,10 @@
{{ item.uniquekey }} - {{ - getCurrentTime('YYYY-MM-DD HH:mm') > item.deaddate ? '已批改' : '待批改' }} - {{ item.worktype }} + + 待批改 + {{ item.worktype }}
{{ item.classcaption }} | 截止时间:{{ item.deaddate }}
@@ -53,8 +54,9 @@ const getHomework = async () => { try { const { rows } = await homeworklist({ edituserid: user.userId, edustage, edusubject, deaddate: getTomorrow(), status: '1', orderby: 'deaddate DESC', pageSize: 500 }) // 只展示待批改的 - homeworkList.value = rows.filter(item => item.deaddate && item.uniquekey && getCurrentTime('YYYY-MM-DD HH:mm') < item.deaddate) // 当前日期的时分与截止日期进行判断 + //homeworkList.value = rows.filter(item => item.deaddate && item.uniquekey && getCurrentTime('YYYY-MM-DD HH:mm') < item.deaddate) // 当前日期的时分与截止日期进行判断 // homeworkList.value = rows.filter(item => item.deaddate && item.uniquekey && getTomorrow() <= item.deaddate) //大于今天的才算待批改 弃用 + homeworkList.value = rows || []; homeworkList.value.forEach((item) => { // 处理任务类型的UI if (item.worktype == '学习目标定位') { @@ -101,7 +103,8 @@ const onClickItem = (item) => { } const tagType = (time) => { - return getCurrentTime('YYYY-MM-DD HH:mm') > time ? 'info' : 'warning' + return 'warning'; + //return getCurrentTime('YYYY-MM-DD HH:mm') > time ? 'info' : 'warning' } From 5e948d9b95e875f60df5ec169a06a0e0741f2360 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E4=BA=86=E4=B8=AA=E7=99=BD?= <543593352@qq.com> Date: Fri, 8 Nov 2024 09:51:17 +0800 Subject: [PATCH 09/24] =?UTF-8?q?=E4=BD=9C=E4=B8=9A=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=EF=BC=9A=E4=B9=A0=E9=A2=98=E6=9D=A5=E6=BA=90=E5=90=8C=E6=AD=A5?= =?UTF-8?q?web=E7=AB=AF=E7=9A=84=E8=8F=81=E4=BC=98=E7=BD=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/views/classTask/classTask.vue | 14 +- .../views/classTask/container/item-dialog.vue | 821 ------------------ .../container/newTask/taskTypeView.vue | 17 +- 3 files changed, 17 insertions(+), 835 deletions(-) delete mode 100644 src/renderer/src/views/classTask/container/item-dialog.vue diff --git a/src/renderer/src/views/classTask/classTask.vue b/src/renderer/src/views/classTask/classTask.vue index 61107f9..46897d7 100644 --- a/src/renderer/src/views/classTask/classTask.vue +++ b/src/renderer/src/views/classTask/classTask.vue @@ -48,7 +48,6 @@ >
- @@ -57,19 +56,16 @@ import { ref, onMounted, onUnmounted, computed, watch } from 'vue' import { listByDeadDate, listClassworkdata } from '@/api/classTask' import TaskItem from '@/views/classTask/container/classTask/task-item.vue' -// import ItemDialog from '@/views/classTask/container/item-dialog.vue' import { useToolState } from '@/store/modules/tool' -import { getCurrentTime, getDateFormatDate, getTheOtherDay, getTheOtheNextDay } from '@/utils/date' +import { getDateFormatDate, getTheOtherDay, getTheOtheNextDay } from '@/utils/date' import useUserStore from '@/store/modules/user' import {createWindow} from '@/utils/tool' -import {sessionStore} from '@/utils/store' import {debounce } from '@/utils/comm' const toolState = useToolState(); - const userStore = useUserStore().user -// const itemDialogRef = ref(null) + const tabOptions = ref(['待批改', '已批改']) const tabActive = ref('待批改') const dataList = ref([]) @@ -104,12 +100,6 @@ const deleteReserv = (item) => { // }) } - -// 当日之后的日期禁用 -const disabledDate = (time) => { - return time.getTime() > Date.now() -} - const changeStartEndDate = (val) => { console.log('起止日期改变', val) getData() // 加载数据 diff --git a/src/renderer/src/views/classTask/container/item-dialog.vue b/src/renderer/src/views/classTask/container/item-dialog.vue deleted file mode 100644 index 717cb0d..0000000 --- a/src/renderer/src/views/classTask/container/item-dialog.vue +++ /dev/null @@ -1,821 +0,0 @@ - - - - - - - diff --git a/src/renderer/src/views/classTask/container/newTask/taskTypeView.vue b/src/renderer/src/views/classTask/container/newTask/taskTypeView.vue index 3252c0f..833a403 100644 --- a/src/renderer/src/views/classTask/container/newTask/taskTypeView.vue +++ b/src/renderer/src/views/classTask/container/newTask/taskTypeView.vue @@ -238,7 +238,7 @@ import { useRouter } from 'vue-router' import {listEntpcoursework, listEntpcourseworkNew, getEntpcoursework} from '@/api/education/entpCourseWork' import { addClassworkReturnId } from '@/api/teaching/classwork' -import { updateClasswork, listEvaluationclue,readFile, listClassworkeval,delClassworkeval,addClassworkeval,updateClassworkeval } from '@/api/classTask' +import { updateClasswork, listEvaluationclue, listClassworkeval,delClassworkeval,addClassworkeval,updateClassworkeval } from '@/api/classTask' import { listEvaluation } from '@/api/subject' import { listEntpcoursefile } from '@/api/education/entpcoursefile' import { listKnowledgePoint } from "@/api/knowledge/knowledgePoint"; @@ -250,6 +250,7 @@ import FileUpload from "@/components/FileUpload/index.vue"; import whiteboard from '@/components/whiteboard/whiteboard.vue' import prevReadMsgDialog from '@/views/classTask/container/newTask/prevReadMsg-Dialog.vue' import examDetailsDrawer from '@/components/exam-question/examDetailsDrawer.vue' +import { JYApiListCT, JYApiListOriginYear, JYApiListSO} from "@/utils/examQuestion/jyeoo" import { useToolState } from '@/store/modules/tool' import useUserStore from '@/store/modules/user' @@ -877,7 +878,19 @@ const showExamAnalyseDrawer = (row) => { -onMounted(() => { +onMounted(async() => { + // 获取当前学科下的试题题型 + const name = userStore.edustage + userStore.edusubject; + const jyCT = await JYApiListCT(proxy, name); + if (jyCT.length == 0) { + ElMessage.error('获取题型失败!'); + return; + } + entpCourseWorkTypeList.value = jyCT; + // 获取当前学科下的试题年份 + entpCourseWorkYearList.value = JYApiListOriginYear(); + entpCourseWorkGroupList.value = await JYApiListSO(proxy, name); + }) watch(() => props.propsformobj.uniquekey, (newVal) => { From dd64e4e0855a07612ab5e0675a21b21dc39e1513 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E4=BA=86=E4=B8=AA=E7=99=BD?= <543593352@qq.com> Date: Fri, 8 Nov 2024 15:39:05 +0800 Subject: [PATCH 10/24] =?UTF-8?q?=E4=B9=A0=E9=A2=98=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=EF=BC=9A=E5=8A=A0=E4=B8=8A=E5=88=86=E9=A1=B5=E4=BC=A0=E5=8F=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../views/classTask/container/newTask/taskTypeView.vue | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/renderer/src/views/classTask/container/newTask/taskTypeView.vue b/src/renderer/src/views/classTask/container/newTask/taskTypeView.vue index 833a403..458cb7d 100644 --- a/src/renderer/src/views/classTask/container/newTask/taskTypeView.vue +++ b/src/renderer/src/views/classTask/container/newTask/taskTypeView.vue @@ -394,10 +394,12 @@ const handleQueryParamFromEntpCourseWork = (queryType) => { * 2 - 按关键词查询 */ const handleQueryFromEntpCourseWork= (queryType) => { - //queryForm.pageNum = this.paginationParams.pageNum; - //queryForm.pageSize = this.paginationParams.pageSize; + const queryForm = { + // 分页参数 + currentPage: paginationParams.pageNum, + pageSize: paginationParams.pageSize, // 课程相关参数 eid: props.bookobj.levelSecondId, sectionName: props.bookobj.coursetitle, @@ -418,10 +420,6 @@ const handleQueryFromEntpCourseWork= (queryType) => { } - // 分页参数 - // pageNum: paginationParams.pageNum, - // pageSize: paginationParams.pageSize, - // 初中政治特殊处理( warn: 需确认是否修改 ) // if (this.courseObj.edusubject=='政治' && this.courseObj.edustage=='初中') { // // [初中+政治]需改为[初中+道德与法治] From 3b8e36454af119f05cbf8378b477d735098a9b35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E4=BA=86=E4=B8=AA=E7=99=BD?= <543593352@qq.com> Date: Fri, 8 Nov 2024 17:22:42 +0800 Subject: [PATCH 11/24] 1 --- .../container/newTask/taskTypeView.vue | 70 ++++++++++++++++--- 1 file changed, 61 insertions(+), 9 deletions(-) diff --git a/src/renderer/src/views/classTask/container/newTask/taskTypeView.vue b/src/renderer/src/views/classTask/container/newTask/taskTypeView.vue index 458cb7d..e49c33c 100644 --- a/src/renderer/src/views/classTask/container/newTask/taskTypeView.vue +++ b/src/renderer/src/views/classTask/container/newTask/taskTypeView.vue @@ -90,7 +90,7 @@
- + +
-