Merge pull request 'baigl' (#16) from baigl into main

Reviewed-on: #16
This commit is contained in:
baigl 2024-11-07 09:46:27 +08:00
commit 8bc50b3ab4
5 changed files with 374 additions and 332 deletions

View File

@ -167,3 +167,64 @@ export function getTomorrow() {
return tomorrow; 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;
}
}
/**
* Wed Oct 02 2024 08:00:00 GMT+0800 (中国标准时间) 转为日期格式: YYYY-MM-DD
*
* @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');
return `${year}-${month}-${day}`;
}

View File

@ -4,20 +4,16 @@
<div class="class-reserv-tabs"> <div class="class-reserv-tabs">
<el-segmented v-model="tabActive" block :options="tabOptions" size="large" /> <el-segmented v-model="tabActive" block :options="tabOptions" size="large" />
</div> </div>
<div v-if="tabActive === '已结束'"> <div v-if="tabActive === '已批改'">
<div class="demo-date-picker"> <div class="demo-date-picker">
<div class="block"> <el-date-picker
<el-date-picker v-model="startEndDate"
v-model="EndDate" type="daterange"
type="date" start-placeholder="Start Date"
format="YYYY-MM-DD" end-placeholder="End Date"
value-format="YYYY-MM-DD" :default-time="defaultTime"
placeholder="请选择截止日期" @change="changeStartEndDate"
size="large" />
:disabled-date="disabledDate"
@change="changeEndDate"
/>
</div>
</div> </div>
</div> </div>
</div> </div>
@ -27,7 +23,7 @@
<div v-if="classWorkList.length > 0"> <div v-if="classWorkList.length > 0">
<task-item <task-item
v-for="(item, index) in activeDataList" v-for="(item, index) in activeDataList"
v-show="tabActive === '进行中'" v-show="tabActive === '待批改'"
:key="index" :key="index"
:item="item" :item="item"
:tabactive="tabActive" :tabactive="tabActive"
@ -36,7 +32,7 @@
></task-item> ></task-item>
<task-item <task-item
v-for="(item, index) in doneDataList" v-for="(item, index) in doneDataList"
v-show="tabActive === '已结束'" v-show="tabActive === '已批改'"
:key="index" :key="index"
:item="item" :item="item"
:tabactive="tabActive" :tabactive="tabActive"
@ -63,9 +59,8 @@ import { listByDeadDate, listClassworkdata } from '@/api/classTask'
import TaskItem from '@/views/classTask/container/classTask/task-item.vue' import TaskItem from '@/views/classTask/container/classTask/task-item.vue'
// import ItemDialog from '@/views/classTask/container/item-dialog.vue' // import ItemDialog from '@/views/classTask/container/item-dialog.vue'
import { useToolState } from '@/store/modules/tool' import { useToolState } from '@/store/modules/tool'
import { getCurrentTime } from '@/utils/date' import { getCurrentTime, getDateFormatDate, getTheOtherDay, getTheOtheNextDay } from '@/utils/date'
import useUserStore from '@/store/modules/user' import useUserStore from '@/store/modules/user'
import useClassTaskStore from "@/store/modules/classTask";
import {createWindow} from '@/utils/tool' import {createWindow} from '@/utils/tool'
import {sessionStore} from '@/utils/store' import {sessionStore} from '@/utils/store'
import {debounce } from '@/utils/comm' import {debounce } from '@/utils/comm'
@ -73,13 +68,21 @@ import {debounce } from '@/utils/comm'
const toolState = useToolState(); const toolState = useToolState();
const classTaskStore = useClassTaskStore()
const userStore = useUserStore().user const userStore = useUserStore().user
// const itemDialogRef = ref(null) // const itemDialogRef = ref(null)
const tabOptions = ref(['进行中', '已结束']) const tabOptions = ref(['待批改', '已批改'])
const tabActive = ref('进行中') const tabActive = ref('待批改')
const dataList = ref([]) const dataList = ref([])
const EndDate = ref(getCurrentTime('YYYY-MM-DD')) // 23
const startEndDate = ref([
getTheOtherDay(3),
getTheOtheNextDay(3),
])
const defaultTime = ref<[Date, Date]>([
getTheOtherDay(3),
getTheOtheNextDay(3),
])
// //
const classWorkList = ref([]) const classWorkList = ref([])
@ -91,23 +94,24 @@ const loading = ref(false)
const activeDataList = computed(() => { const activeDataList = computed(() => {
return classWorkList.value return classWorkList.value
}) })
const doneDataList = computed(() => {
return classWorkList.value
})
const deleteReserv = (item) => { const deleteReserv = (item) => {
console.log('删除待开发', item) console.log('删除待开发', item)
// dataList.value = dataList.value.filter((is) => { // dataList.value = dataList.value.filter((is) => {
// return is.id !== item.id // return is.id !== item.id
// }) // })
} }
const doneDataList = computed(() => {
return classWorkList.value
})
// //
const disabledDate = (time) => { const disabledDate = (time) => {
return time.getTime() > Date.now() return time.getTime() > Date.now()
} }
//
const changeEndDate = (val) => { const changeStartEndDate = (val) => {
console.log('止日期改变', val) console.log('止日期改变', val)
getData() // getData() //
} }
@ -115,245 +119,202 @@ const changeEndDate = (val) => {
const getData = async () => { const getData = async () => {
classWorkList.value = [] classWorkList.value = []
loading.value = true loading.value = true
// 1 // 1
// getClassList()
// 2
await getClassWorkList() await getClassWorkList()
// 3 // 2
getStudentClassWorkData() getStudentClassWorkData()
loading.value = false loading.value = false
} }
/** /**
* 1获取班级列表数据 * 1获取班级作业
* TODO 这里暂时取班级id的list后续需要在修改
*/
const getClassList = () => {
if(classTaskStore.classListIds.length==0){
// ids idlist
classTaskStore.listClassmain({ classuserid: userStore.userId, pageSize: 100, status: 'open' })
}
}
/**
* 2获取班级作业
*/ */
const getClassWorkList = async () => { const getClassWorkList = async () => {
//if(classTaskStore.classListIds.length>0){ // homeworklist
{ const response = await listByDeadDate({
// homeworklist edituserid: userStore.userId, // id
const response = await listByDeadDate({ edustage: userStore.edustage, //
edituserid: userStore.userId, // id edusubject: userStore.edusubject,//
edustage: userStore.edustage, // startdate: tabActive.value === '待批改'? '' : getDateFormatDate(startEndDate.value[0]),
edusubject: userStore.edusubject,// deaddate: tabActive.value === '待批改'? '' : getDateFormatDate(startEndDate.value[1]),//
// deaddate: tabActive.value === ''? getTomorrow() : EndDate.value,// status: tabActive.value === '待批改'? '1' : '2', // 1-
deaddate: EndDate.value,// orderby: 'deaddate DESC',
status: '1', // 1- pageSize: 100,
orderby: 'deaddate DESC', })
pageSize: 100,
})
/** let list = response.rows || [];
* 2024-10-17 由于 后面截止时间加了 时分特加判断 for (var i = 0; i < list.length; i++) {
* 1进行中以前是以明天判断现改为传当天的日期并根据当前日期的时分与截止日期进行判断 //
* 2已结束以前默认是以明天判断现依然以明天为判断并根据当前日期时分大于截止日期时分判断 list[i].workdatalist = [] //
*/ list[i].workdatalistVisible = false
let list = []; list[i].feedtimelength = 0 //
if(tabActive.value === '进行中'){ list[i].rightAnswerCount = 0
// list[i].scoingRate = 0 + '%' //
list = response.rows&&response.rows.filter(item => item.deaddate && getCurrentTime('YYYY-MM-DD HH:mm') < item.deaddate); // list[i].averagetime = 0 //
}else{
list = response.rows&&response.rows.filter(item => item.deaddate && getCurrentTime('YYYY-MM-DD HH:mm') > item.deaddate); // // ----------------------------------------------
// 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 != '') {
for (var i = 0; i < list.length; i++) { list[i].entpcourseworklistarray = JSON.parse(
// '[' + list[i].entpcourseworklist + ']'
list[i].workdatalist = [] )
list[i].workdatacount = 0 // } else {
list[i].workdatalistVisible = false list[i].entpcourseworklistarray = []
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 = []
}
// 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
if (list && list.length > 0) {
classWorkList.value = list && list.filter((item) => item.workdatacount > 0)
//TODO total
total.value = 0
}else{
classWorkList.value = []
total.value = 0
}
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 getStudentClassWorkData = async(workList = [], Refresh = true) => {
// const { chapterId } = await useGetHomework(props.bookobj.node) // (workdataresultcount )
// this.entpcourseid = chapterId let SubmitClWorkList = [];
//if(classTaskStore.classListIds.length>0){ if(Refresh){
// listClassworkdataByDeadDate({ SubmitClWorkList = classWorkList.value.filter((item) => item.workdataresultcount > 0) ;
// edituserid: userStore.userId, // id }else{
// classids: classTaskStore.classListIds.join(','), SubmitClWorkList = workList;
// edusubject: userStore.edusubject,// }
// deaddate: tabActive.value === ''? getTomorrow() : EndDate.value,//
// deaddate: EndDate.value,//
// //status: '1', // 1-
// orderby: "deaddate DESC",//
// pageSize: 1000,
// })
// listClassworkdataNew({ console.log('有提交的作业', SubmitClWorkList)
// classworkids: ids, // id const ids = SubmitClWorkList&&SubmitClWorkList.map((item) => item.id).join(',');
// edituserid: userStore.userId, // id if (ids == '') {
// edusubject: userStore.edusubject,// return;
// evalStatus: 1, }
// pageSize: 1000, 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('==================')
// /
// resultcount0
//classWorkList.value[t].workdataresultcount++
//
classWorkList.value[t].feedtimelength += parseInt(res.rows[i].finishtimelength)
{ //
const ids = classWorkList.value.map((item) => item.id).join(','); if (
if (ids == '') { res.rows[i].classworkevallist != '' &&
return; res.rows[i].classworkevallist != null &&
} res.rows[i].classworkevallist != 'null'
listClassworkdata({ ) {
classworkids: ids, let replacedString = res.rows[i].classworkevallist.replace(/""/g, '"')
pageSize: 1000, // , : "{\"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\":\"<bdo class=\"mathjye-underpoint2\"></bdo>\", \"score\":4, \"rightanswer\":\"<bdo class=\"mathjye-underpoint2\"></bdo>\"},{\"id\":172911, \"rating\":0, \"teacherRating\":0, \"entpcourseworkid\":363100, \"feedcontent\":\"<bdo class=\"mathjye-underpoint2\"></bdo>\", \"score\":4, \"rightanswer\":\"<bdo class=\"mathjye-underpoint2\"></bdo>\"}"
}).then((res) => { replacedString = escapeHtmlQuotes(res.rows[i].classworkevallist).replace(
for (var t = 0; t < classWorkList.value.length; t++) { /"(\[.*\])"/g,
for (var i = 0; i < res.rows.length; i++) { '$1'
if (res.rows[i].classworkid == classWorkList.value[t].id && res.rows[i].finishtimelength != '0') { )
console.log('==================') replacedString = escapeHtmlQuotes(res.rows[i].classworkevallist)
// / var evalarray
// resultcount0 try {
classWorkList.value[t].workdatafeedbackcount++ evalarray = JSON.parse('[' + res.rows[i].classworkevallist + ']')
} catch {
evalarray = JSON.parse('[' + replacedString + ']')
}
// for (var e = 0; e < evalarray.length; e++) {
classWorkList.value[t].feedtimelength += parseInt(res.rows[i].finishtimelength) if (res.rows[i].worktype == '常规作业') {
evalarray[e].feedcontent = escapeHtmlQuotes(evalarray[e].feedcontent).replace(
// /"(\[.*\])"/g,
if ( '$1'
res.rows[i].classworkevallist != '' && )
res.rows[i].classworkevallist != null && evalarray[e].feedcontent = escapeHtmlQuotes(evalarray[e].feedcontent)
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\":\"<bdo class=\"mathjye-underpoint2\"></bdo>\", \"score\":4, \"rightanswer\":\"<bdo class=\"mathjye-underpoint2\"></bdo>\"},{\"id\":172911, \"rating\":0, \"teacherRating\":0, \"entpcourseworkid\":363100, \"feedcontent\":\"<bdo class=\"mathjye-underpoint2\"></bdo>\", \"score\":4, \"rightanswer\":\"<bdo class=\"mathjye-underpoint2\"></bdo>\"}"
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 (evalarray[e].feedcontent == evalarray[e].rightanswer) {
for (var e = 0; e < evalarray.length; e++) { //
if (res.rows[i].worktype == '常规作业') { classWorkList.value[t].rightAnswerCount++
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++
}
} }
} }
} }
// workdatacount
if (res.rows[i].classworkid == classWorkList.value[t].id) {
classWorkList.value[t].workdatalist.push(res.rows[i])
}
} }
// workdatacount0 // workdataresultsum
if ( if (res.rows[i].classworkid == classWorkList.value[t].id) {
classWorkList.value[t].workdataresultcount > 0 && classWorkList.value[t].workdatalist.push(res.rows[i])
classWorkList.value[t].workdatacount > 0
) {
classWorkList.value[t].finishpercent = parseInt(
(classWorkList.value[t].workdataresultcount / classWorkList.value[t].workdatacount) * 100
)
} else {
classWorkList.value[t].finishpercent = 0
} }
//
// 2024-04-12by 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].workdatacount)) *
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-12by 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%'
}
}
})
} }
@ -379,6 +340,7 @@ const getStudentClassWorkDataPolling = () => {
getStudentVisible() getStudentVisible()
// //
pollingST.value = setInterval(() => { pollingST.value = setInterval(() => {
console.log('轮询查询学生作业进度')
getStudentVisible() getStudentVisible()
}, 1000 * 10) }, 1000 * 10)
} }
@ -413,75 +375,56 @@ onUnmounted(() => {
// [] - // [] -
const getStudentVisible = async () => { const getStudentVisible = async () => {
if (classTaskStore.classListIds.length <= 0) { if(!classWorkList.value.length>0){
return return;
} }
//
const response = await listByDeadDate({ const response = await listByDeadDate({
classidarray: classTaskStore.classListIds.join(','),
edituserid: userStore.userId, // id edituserid: userStore.userId, // id
edustage: userStore.edustage,// edustage: userStore.edustage, //
edusubject: userStore.edusubject,// edusubject: userStore.edusubject,//
// deaddate: tabActive.value === ''? getTomorrow() : EndDate.value,// startdate: tabActive.value === '待批改'? '' : getDateFormatDate(startEndDate.value[0]),
deaddate: EndDate.value,// deaddate: tabActive.value === '待批改'? '' : getDateFormatDate(startEndDate.value[1]),//
status: '1', // 1- status: tabActive.value === '待批改'? '1' : '2', // 1-
// orderby: 'concat(deaddate,uniquekey) DESC',
orderby: 'deaddate DESC', orderby: 'deaddate DESC',
pageSize: 100 pageSize: 100,
}) })
/** let list = response.rows || [];
* 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); //
}
const curWorkList = list let newList = [];
for(let i = 0; i < classWorkList.value.length; i++){
/** // listidlistid listlist
* warn: 这里仅更新了finishpercent(进度条), 且当前作业布置推送新任务时, curWorkList中会查到新的任务与当前页面中this.classWorkList长度不一致, const isList = list.filter((item) => item.id === classWorkList.value[i].id);
* 故这里需循环this.classWorkList且只更新当前页面中的存在的任务进度 if(isList.length === 0){
*/ // listidlistidlist
for (let t = 0; t < classWorkList.value.length; t++) { classWorkList.value.splice(i,1);
// [] }
// if( getDateTime > classWorkList.value[t].deaddate ){ for(let j = 0; j < list.length; j++){
// continue; // workdataresultcount ;
// } if(classWorkList.value[i].id === list[j].id && classWorkList.value[i].workdataresultcount != list[j].workdataresultcount){
// (index) // =
let curWork = curWorkList.find((work) => work.id === classWorkList.value[t].id) newList.push(list[j]);
// workdataresultcount workdatacount0
if (curWork && curWork.workdataresultcount > 0 && classWorkList.value[t].workdatacount > 0) {
classWorkList.value[t].workdataresultcount = curWork.workdataresultcount
//
classWorkList.value[t].finishpercent = parseInt(
(classWorkList.value[t].workdataresultcount / classWorkList.value[t].workdatacount) * 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
} }
// // teacherrationgcount
classWorkList.value[t].teacherrationgcount = curWork.teacherrationgcount if(classWorkList.value[i].id === list[j].id && classWorkList.value[i].teacherrationgcount != list[j].teacherrationgcount){
} else { //
// if (classWorkList.value[i].workdataresultsum > 0) {
if(curWork && curWork.workdataresultcount == 0){ //
// classWorkList.value[i].teacherrationgcount = list[j].teacherrationgcount;
classWorkList.value[t].teacherrationgcount = curWork.teacherrationgcount classWorkList.value[i].teacherCorrectionProgress = parseInt(
((list[j].teacherrationgcount) / list[j].workdataresultsum) * 100
)
} else {
classWorkList.value[i].teacherCorrectionProgress = 0
}
} }
classWorkList.value[t].finishpercent = 0
} }
} }
if(newList.length>0){
return 1 //
const list = newList&&newList.filter((item) => item.workdataresultcount > 0) ;
getStudentClassWorkData(list,false);
}
} }
@ -489,16 +432,27 @@ const getStudentVisible = async () => {
watch( watch(
() => [dataList, toolState.isTaskWin], () => [dataList, toolState.isTaskWin],
() => { () => {
console.log('=监听到批改窗口打开了===', toolState.isTaskWin) console.log('监听--批改窗口是否打开===', toolState.isTaskWin)
if(!toolState.isTaskWin){ if(!toolState.isTaskWin){
if(tabActive.value === '待批改'){
closeDialog();// closeDialog();//
}
} }
} }
) )
watch(tabActive, (newVal,oldVal)=>{ watch(tabActive, (newVal,oldVal)=>{
console.log('newVal',newVal); console.log('newVal',newVal);
getData() // getData() //
if(newVal === '待批改'){
//
console.log('监听---开启轮询')
closeDialog();
}else{
//
console.log('监听---关闭轮询')
clearInterval(pollingST.value);
}
}) })
</script> </script>

View File

@ -14,31 +14,40 @@
&nbsp;|&nbsp; 截止时间{{ item.deaddate }} &nbsp;|&nbsp;{{ tabactive }} &nbsp;|&nbsp; 截止时间{{ item.deaddate }} &nbsp;|&nbsp;{{ tabactive }}
</div> </div>
</div> </div>
<div v-if=" tabactive == '待批改' " class="class-reserv-item-progress">
<el-progress :text-inside="true" :stroke-width="26" :percentage="item.finishpercent" :color="'#000fff'" style="cursor: pointer"></el-progress>
<span>
已交(
<span>
<span v-if="item.workdataresultcount!=0" style="color:#000fff; font-weight: 900; font-size: 15px">{{ item.workdataresultcount }}</span>
<span v-if="item.workdataresultcount==0">{{ item.workdataresultcount }}</span>
/{{ item.workdataresultsum }}
</span>
)
</span>
</div>
<div v-if=" tabactive == '待批改' " class="class-reserv-item-progress">
<el-progress :text-inside="true" :stroke-width="26" :percentage="item.teacherCorrectionProgress" :color="'#ff7f00'" style="cursor: pointer"></el-progress>
<span>
已批阅(<span style="color: #ff7f00; font-weight: 900; font-size: 15px">{{ item.teacherrationgcount}}</span>)
</span>
</div>
<!-- TODO 练习次数引用次数 这里随便的假数据-->
<div v-if=" tabactive == '已批改' " class="class-reserv-item-tool">
<span style="color:#000fff; font-weight: 900; font-size: 15px">{{ item.workdataresultsum }}</span>
<span>练习次数</span>
</div>
<div v-if=" tabactive == '已批改' " class="class-reserv-item-tool">
<span style="color: #ff7f00; font-weight: 900; font-size: 15px">{{ item.teacherrationgcount?item.workdataresultsum - item.teacherrationgcount:item.workdataresultsum }}</span>
<span>引用次数</span>
</div>
<div class="class-reserv-item-tool"> <div class="class-reserv-item-tool">
<span> <span>
<span v-if="item.workdataresultcount!=0" style="color:#000fff; font-weight: 900; font-size: 15px">{{ item.workdataresultcount }}</span>
<span v-if="item.workdataresultcount==0">{{ item.workdataresultcount }}</span>
/{{ item.workdatacount }}</span>
<span>已交</span>
</div>
<div class="class-reserv-item-tool">
<!-- 总人数-已批阅人数 -->
<span style="color: #ff7f00; font-weight: 900; font-size: 15px">{{ item.teacherrationgcount?item.workdatacount - item.teacherrationgcount:item.workdatacount }}</span>
<span>待批阅</span>
</div>
<div class="class-reserv-item-tool">
<span>
<!-- {{ item.averagetime?item.averagetime:0 }} -->
<!-- <span v-if=" item.averagetime<60 ">
<span style="color: #007fff; font-weight: 900; font-size: 15px">{{ item.averagetime }}</span>分钟
</span>
<span v-if=" item.averagetime==60 ">
<span style="color: #007fff; font-weight: 900; font-size: 15px">1</span>小时
</span>
<span v-if=" item.averagetime>60 ">
<span style="color: #007fff; font-weight: 900; font-size: 15px">{{ Math.floor(item.averagetime / 60)}}</span>小时
<span style="color: #007fff; font-weight: 900; font-size: 15px">{{ Math.floor(item.averagetime % 60)}}</span>分钟
</span> -->
<span style="color: #007fff; font-weight: 900; font-size: 15px">{{ item.averagetime }}</span>分钟 <span style="color: #007fff; font-weight: 900; font-size: 15px">{{ item.averagetime }}</span>分钟
</span> </span>
<span>平均用时</span> <span>平均用时</span>
@ -97,6 +106,11 @@ const props = defineProps({
} }
} }
} }
.class-reserv-item-progress {
width: 200px;
padding: 0 10px;
font-size: 14px;
}
.class-reserv-item-tool { .class-reserv-item-tool {
margin-left: 10px; margin-left: 10px;
display: flex; display: flex;

View File

@ -14,9 +14,10 @@
<div class="class-left flex"> <div class="class-left flex">
<div class="class-name flex"> <div class="class-name flex">
<span class="name">{{ item.uniquekey }}</span> <span class="name">{{ item.uniquekey }}</span>
<el-tag class="tag" round :type="tagType(item.deaddate)" effect="dark" size="small">{{ <!-- <el-tag class="tag" round :type="tagType(item.deaddate)" effect="dark" size="small">{{
getCurrentTime('YYYY-MM-DD HH:mm') > item.deaddate ? '已结束' : '进行中' }}</el-tag> getCurrentTime('YYYY-MM-DD HH:mm') > item.deaddate ? '已批改' : '待批改' }}</el-tag> -->
<el-tag :type="item.workclass" size="large">{{ item.worktype }}</el-tag> <el-tag class="tag" round :type="tagType(item.deaddate)" effect="dark" size="small">待批改</el-tag>
<el-tag :type="item.workclass" size="large">{{ item.worktype }}</el-tag>
</div> </div>
<div class="class-time">{{ item.classcaption }} | 截止时间{{ item.deaddate }} </div> <div class="class-time">{{ item.classcaption }} | 截止时间{{ item.deaddate }} </div>
</div> </div>
@ -52,9 +53,10 @@ const getHomework = async () => {
const { edustage, edusubject } = user const { edustage, edusubject } = user
try { try {
const { rows } = await homeworklist({ edituserid: user.userId, edustage, edusubject, deaddate: getTomorrow(), status: '1', orderby: 'deaddate DESC', pageSize: 500 }) 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.filter(item => item.deaddate && item.uniquekey && getTomorrow() <= item.deaddate) //
homeworkList.value = rows || [];
homeworkList.value.forEach((item) => { homeworkList.value.forEach((item) => {
// UI // UI
if (item.worktype == '学习目标定位') { if (item.worktype == '学习目标定位') {
@ -102,7 +104,8 @@ const onClickItem = (item) => {
} }
const tagType = (time) => { 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'
} }

View File

@ -43,6 +43,16 @@ export const createHomework = ({ uniquekey, evalid, data, entpcourseid }) => {
let classWorkList = [] let classWorkList = []
// 将标签中的双引号增加转义
const escapeHtmlQuotes = (str) => {
// 后端已replace双引号, 故前端不用在处理
const regex1 = /\\+/g; // 匹配多个反斜杠
let result = str.replace(regex1, '\\');
result = str.replace(/(?<!\\)\n/g, '<br />'); //替换\n而不替换\\n 为 \\n
return result;
}
/** /**
* 获取班级作业 * 获取班级作业
*/ */
@ -52,8 +62,8 @@ export const getClassWorkList = async (id) => {
/** /**
* 2024-10-17 由于 后面截止时间加了 时分特加判断 * 2024-10-17 由于 后面截止时间加了 时分特加判断
* 1进行中以前是以明天判断现改为传当天的日期并根据当前日期的时分与截止日期进行判断 * 1待批改以前是以明天判断现改为传当天的日期并根据当前日期的时分与截止日期进行判断
* 2结束以前默认是以明天判断现依然以明天为判断并根据当前日期时分大于截止日期时分判断 * 2批改以前默认是以明天判断现依然以明天为判断并根据当前日期时分大于截止日期时分判断
*/ */
let list = response.rows let list = response.rows