diff --git a/package.json b/package.json index b7c1f41..77b31bb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "aix-win", - "version": "1.2.3", + "version": "2.0.1", "description": "An Electron application with Vue", "main": "./out/main/index.js", "author": "example.com", diff --git a/src/renderer/src/components/choose-textbook/index.vue b/src/renderer/src/components/choose-textbook/index.vue index 64b8c56..3c9a66a 100644 --- a/src/renderer/src/components/choose-textbook/index.vue +++ b/src/renderer/src/components/choose-textbook/index.vue @@ -30,7 +30,7 @@
- +
diff --git a/src/renderer/src/components/choose-textbook/third.vue b/src/renderer/src/components/choose-textbook/third.vue index 554a6f5..ca8f65d 100644 --- a/src/renderer/src/components/choose-textbook/third.vue +++ b/src/renderer/src/components/choose-textbook/third.vue @@ -64,6 +64,8 @@ const getVertion = (data) => { childs: [] } }) + //判断是否存在该教材,有则展示第一项 + if(treeData.value.length === 0) return nextTick(() => { defaultExpandedKeys.value = [treeData.value[0].id] node.currentNode.data = treeData.value[0] diff --git a/src/renderer/src/hooks/useGetClassWork.js b/src/renderer/src/hooks/useGetClassWork.js new file mode 100644 index 0000000..7aa313a --- /dev/null +++ b/src/renderer/src/hooks/useGetClassWork.js @@ -0,0 +1,201 @@ +import { nextTick, toRaw } from 'vue' +import useUserStore from '@/store/modules/user' +import { listEvaluation } from '@/api/subject' + +const userStore = useUserStore() +const { edustage, edusubject } = userStore.user + +let evaluationList = []; // 教材版本list +let subjectList = []; // 教材list +//当前教材ID +let curBookId = -1; + +/** + * 外部链接初始化获取 跳转web端的 unitId 专用, + * 暂时: 初始化作业设计专用,后期可能会取消 + */ +export const useGetClassWork = async () => { + + const params = { + edusubject, + edustage, + // entpcourseedituserid: userId, + itemgroup: 'textbook', + orderby: 'orderidx asc', + pageSize: 10000 + } + + if(localStorage.getItem('evaluationList')){ + evaluationList = JSON.parse(localStorage.getItem('evaluationList')) + }else{ + const { rows } = await listEvaluation(params) + localStorage.setItem('evaluationList', JSON.stringify(rows)) + evaluationList = rows + } + + //获取教材版本 + await getSubject() + //上册 + /** + * 不区分上下册 + * 2024/08/20调整 + */ + // volumeOne = data.filter(item => item.level == 1 && item.semester == '上册') + // volumeTwo = data.filter(item => item.level == 1 && item.semester == '下册') + getTreeData() +} + +//获取教材 +const getSubject = async () => { + if(localStorage.getItem('subjectList')){ + subjectList = JSON.parse(localStorage.getItem('subjectList')) + }else{ + const { rows } = await listEvaluation({ itemkey: "version", edusubject, edustage, pageSize: 10000,orderby: 'orderidx asc', }) + + // subjectList = rows.filter(item => item.edustage == edustage && item.edusubject == edusubject) + subjectList = rows + localStorage.setItem('subjectList', JSON.stringify(subjectList)) + } + + // 默认第一个 + if(!subjectList.length) return + // curBookName = subjectList[0].itemtitle + curBookId = subjectList[0].id + // curBookImg = BaseUrl + subjectList[0].avartar + // curBookPath = subjectList[0].fileurl +} + + +const getTreeData = () => { + //数据过滤 + let upData = transData(evaluationList) + + if(upData.length){ + // treeData = [...upData] + }else{ + // treeData = [] + return + } + nextTick(() => { + // defaultExpandedKeys = [treeData[0].id] + // let currentNodeObj = {...getLastLevelData(upData)[0]} + let currentNodeId = getLastLevelData(upData)[0].id + let currentNodeName = getLastLevelData(upData)[0].label + + let curNode = { + id: currentNodeId, + label: currentNodeName, + // itemtitle: currentNodeObj.itemtitle, + // edudegree: currentNodeObj.edudegree, + // edustage: currentNodeObj.edustage, + // edusubject: currentNodeObj.edusubject, + } + let parentNode = findParentByChildId(upData, currentNodeId) + curNode.parentNode = toRaw(parentNode) + + let levelFirstId = ''; + let levelSecondId = ''; + + if (curNode.parentNode) { + levelFirstId = curNode.parentNode.id + } else { + levelFirstId = curNode.id + levelSecondId = '' + } + // 头部 教材分析、作业设计:打开外部链接需要当前章节ID + localStorage.setItem('unitId', JSON.stringify({ levelFirstId, levelSecondId})) + + // const data = { + // textBook: { + // curBookId: curBookId, + // curBookName: curBookName, + // curBookImg: curBookImg, + // curBookPath: curBookPath + // }, + // node: curNode + // } + // emit('changeBook', data) + }) +} + +const getLastLevelData = (tree) => { + let lastLevelData = []; + // 递归函数遍历树形结构 + function traverseTree(nodes) { + nodes.forEach((node) => { + // 如果当前节点有子节点,继续遍历 + if (node.children && node.children.length > 0) { + traverseTree(node.children); + } else { + // 如果没有子节点,说明是最后一层的节点 + lastLevelData.push(node); + } + }); + } + + // 调用递归函数开始遍历 + traverseTree(tree); + + // 返回最后一层的数据 + return lastLevelData; +} + +// 根据id 拿到父节点数据 +const findParentByChildId = (treeData, targetNodeId) => { + // 递归查找函数 + // 遍历树中的每个节点 + for (let node of treeData) { + // 检查当前节点的子节点是否包含目标子节点 ID + if (node.children && node.children.some(child => child.id === targetNodeId)) { + // 如果当前节点的某个子节点的 ID 匹配目标子节点 ID,则当前节点即为父节点 + return node; + } + // 如果当前节点没有匹配的子节点,则递归检查当前节点的子节点 + if (node.children) { + let parentNode = findParentByChildId(node.children, targetNodeId); + if (parentNode) { + return parentNode; + } + } + } + // 如果未找到匹配的父节点,则返回 null 或者适当的默认值 + return null; +} + + +const transData = (data) => { + let ary = [] + data.forEach(item => { + let obj = {} + // 根据当前教材ID 过滤出对应的单元、章节 + if (item.rootid == curBookId) { + if(item.level == 1){ + obj.label = item.itemtitle + obj.id = item.id + obj.itemtitle = item.itemtitle + obj.edudegree = item.edudegree + obj.edustage = item.edustage + obj.edusubject = item.edusubject + let ary2 = [] + evaluationList.forEach(el => { + let obj2 = {} + if (item.id == el.parentid) { + obj2 = { + label: el.itemtitle, + id: el.id, + itemtitle : el.itemtitle, + edudegree : el.edudegree, + edustage : el.edustage, + edusubject : el.edusubject, + } + ary2.push(obj2) + } + obj.children = ary2 + }) + ary.push(obj) + } + } + }) + return ary +} + diff --git a/src/renderer/src/plugins/shareStore.js b/src/renderer/src/plugins/shareStore.js index 10aec30..caa5e52 100644 --- a/src/renderer/src/plugins/shareStore.js +++ b/src/renderer/src/plugins/shareStore.js @@ -66,9 +66,10 @@ function stateSyncWatch(storeName, newState) { const keyArr = key.split('.') || [] keyArr.reduce((o,c,i)=>{o[c] = i === keyArr.length-1 ? value : {};return o[c]}, newValue) const jsonStr = JSON.stringify(newValue) // 从新组装-json数据 - // // 更新本地数据-session + // 更新本地数据-session + // console.log('state-change-update:', key, value) sessionStore.set(key, value) - // // 通知主线程更新 + // 通知主线程更新 ipcRenderer?.invoke('pinia-state-change', storeName, jsonStr) // console.log('======',key, value, jsonStr ) } diff --git a/src/renderer/src/router/index.js b/src/renderer/src/router/index.js index 16c3677..948b7d8 100644 --- a/src/renderer/src/router/index.js +++ b/src/renderer/src/router/index.js @@ -68,12 +68,24 @@ export const constantRoutes = [ name: 'class', meta: {title: '班级中心'}, }, + { + path: '/classTaskAssign', + component: () => import('@/views/classTaskAssign/index.vue'), + name: 'classTaskAssign', + meta: {title: '作业设计'}, + }, { path: '/classTask', component: () => import('@/views/classTask/classTask.vue'), name: 'classCorrect', meta: {title: '作业批改'}, }, + { + path: '/newClassTask', + component: () => import('@/views/classTask/newClassTask.vue'), + name: 'newClassCorrect', + meta: {title: '作业设计'}, + }, { path: '/examReport', component: () => import('@/views/examReport/index.vue'), diff --git a/src/renderer/src/utils/date.js b/src/renderer/src/utils/date.js index 2adf3d5..29b0f44 100644 --- a/src/renderer/src/utils/date.js +++ b/src/renderer/src/utils/date.js @@ -97,6 +97,9 @@ export const getCurrentTime = (format)=> { if(format == 'HH:mm'){ return `${hours}:${minutes}`; } + if(format == 'MMDD'){ + return `${month}${day}`; + } } /** * diff --git a/src/renderer/src/views/classTask/classTask.vue b/src/renderer/src/views/classTask/classTask.vue index e4da49c..2c23d0a 100644 --- a/src/renderer/src/views/classTask/classTask.vue +++ b/src/renderer/src/views/classTask/classTask.vue @@ -141,6 +141,7 @@ const getClassWorkList = () => { edustage: userStore.edustage,// 学段 edusubject: userStore.edusubject,//学科 deaddate: tabActive.value === '进行中'? getTomorrow() : EndDate.value,// 进行中:明天,已结束:选择的日期 + status: '1', // 作业状态:1-已发布 orderby: 'concat(deaddate,uniquekey) DESC', pageSize: 100 }).then((response) => { @@ -220,7 +221,7 @@ const getStudentClassWorkData = () => { }).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].resultcount > 0) { + if (res.rows[i].classworkid == classWorkList.value[t].id && res.rows[i].finishtimelength != '0') { console.log('==================') // 有几个学生完成/正在完成学习任务 // 至少resultcount不是0 diff --git a/src/renderer/src/views/classTask/container/item-dialog-score.vue b/src/renderer/src/views/classTask/container/item-dialog-score.vue index 44e84de..df31dd6 100644 --- a/src/renderer/src/views/classTask/container/item-dialog-score.vue +++ b/src/renderer/src/views/classTask/container/item-dialog-score.vue @@ -8,15 +8,15 @@
-
-
+
+