Compare commits

...

42 Commits

Author SHA1 Message Date
朱浩 770a847e91 默认窗口最大化 2024-10-19 17:33:11 +08:00
朱浩 6f35ad8a1a Merge branch 'main' into zhuhao_dev
# Conflicts:
#	src/renderer/src/views/classTask/container/newTask/taskTypeView.vue
2024-10-19 17:21:34 +08:00
zouyf 4e7b9f0a82 Merge pull request 'zouyf_dev' (#341) from zouyf_dev into main
Reviewed-on: #341
2024-10-19 17:20:42 +08:00
qinqing 7b4e6d0b10 Merge pull request 'qinqing_dev' (#340) from qinqing_dev into main
Reviewed-on: #340
2024-10-19 17:20:26 +08:00
qinqing 04d2e47882 Merge branch 'main' into qinqing_dev 2024-10-19 17:20:02 +08:00
“zouyf” 17e8e43ad4 Merge branch 'main' into zouyf_dev
# Conflicts:
#	src/renderer/src/views/classTask/container/newTask/taskTypeView.vue
2024-10-19 17:19:09 +08:00
qinqing ea2de75415 百度OCR识别 2024-10-19 17:18:52 +08:00
“zouyf” 38b17333ab 页面优化 2024-10-19 17:17:16 +08:00
baigl d58dff8731 Merge pull request 'baigl' (#339) from baigl into main
Reviewed-on: #339
2024-10-19 17:15:41 +08:00
白了个白 40d83c4cb3 Merge branch 'main' of http://27.128.240.72:3000/zhuhao/AIx_Smarttalk into baigl 2024-10-19 17:14:35 +08:00
白了个白 8ba6e15020 作业管理相关修改 2024-10-19 17:14:09 +08:00
朱浩 bddcf2d4ff BUG修复 2024-10-19 17:01:05 +08:00
lyc 8f91be9a4b Merge pull request '默认全屏' (#338) from lyc-dev into main 2024-10-19 16:59:35 +08:00
lyc 75384c8057 默认全屏 2024-10-19 17:00:09 +08:00
朱浩 bed3ef96a7 Merge branch 'main' into zhuhao_dev 2024-10-19 16:59:30 +08:00
qinqing f5497aa856 Merge pull request 'qinqing_dev' (#337) from qinqing_dev into main
Reviewed-on: #337
2024-10-19 16:59:09 +08:00
qinqing 47329aea75 Merge branch 'main' into qinqing_dev 2024-10-19 16:58:44 +08:00
qinqing 52275e1de6 全连接百度ocr识别 2024-10-19 16:58:04 +08:00
朱浩 6fe5ee5703 Merge branch 'main' into zhuhao_dev
# Conflicts:
#	src/renderer/src/views/classTask/classTaskAssign.vue
#	src/renderer/src/views/classTask/teachClassTask.vue
2024-10-19 16:42:36 +08:00
qinqing 8dba05c0d4 Merge pull request 'qinqing_dev' (#336) from qinqing_dev into main
Reviewed-on: #336
2024-10-19 16:31:45 +08:00
qinqing b4fefdd0cf 文字识别全路径,屏蔽评论批注 2024-10-19 16:29:11 +08:00
lyc e4114bf1b4 考试分析-题目详情-增加灰色背景 2024-10-19 16:12:38 +08:00
lyc 95f94f0c3e Merge pull request '考试分析-题目详情-增加灰色背景' (#335) from lyc-dev into main 2024-10-19 16:12:19 +08:00
lyc 4dbb5d2224 考试分析-题目详情增加关闭按钮 2024-10-19 15:59:20 +08:00
lyc 3430ad75ca Merge pull request '考试分析-题目详情增加关闭按钮' (#334) from lyc-dev into main 2024-10-19 15:59:08 +08:00
baigl 388fc2b2b4 Merge pull request 'baigl' (#333) from baigl into main
Reviewed-on: #333
2024-10-19 15:07:35 +08:00
白了个白 1a671d7dd2 作业批改:session缓存出现莫名缓存数据bug修改 2024-10-19 15:04:51 +08:00
白了个白 0d21b1de53 Merge branch 'main' of http://27.128.240.72:3000/zhuhao/AIx_Smarttalk into baigl 2024-10-19 14:38:29 +08:00
“zouyf” 0a2d3f54b7 Merge branch 'main' into zouyf_dev 2024-10-19 14:20:34 +08:00
“zouyf” 45c2e35a66 [作业布置] - 修正[课堂展示]中[问题输入框]的保存 2024-10-19 14:19:46 +08:00
朱浩 68de31c569 Merge branch 'main' into zhuhao_dev 2024-10-18 17:12:22 +08:00
朱浩 45485c04fc BUG修复 2024-10-18 17:11:30 +08:00
zhengdegang e8763793a7 Merge pull request 'zdg' (#332) from zdg into main
Reviewed-on: #332
2024-10-18 17:08:45 +08:00
zdg a3b940f138 Merge branch 'main' of http://27.128.240.72:3000/zhuhao/AIx_Smarttalk into zdg 2024-10-18 17:06:14 +08:00
zdg 548442f278 作业推送注释掉im消息发送 2024-10-18 17:06:08 +08:00
朱浩 e02f67e3e5 Merge pull request 'zhuhao_dev' (#331) from zhuhao_dev into main
Reviewed-on: #331
2024-10-18 16:34:01 +08:00
zdg d7f17c253d im 日志 2024-10-18 16:09:55 +08:00
zdg ea6c56a401 Merge branch 'main' of http://27.128.240.72:3000/zhuhao/AIx_Smarttalk into zdg 2024-10-18 16:09:24 +08:00
白了个白 2bcf780b7b 1 2024-10-18 10:16:25 +08:00
zdg 6be26f19cd Merge branch 'main' of http://27.128.240.72:3000/zhuhao/AIx_Smarttalk into zdg 2024-10-17 09:58:37 +08:00
zdg d40873d198 ppt上课发送多次 2024-10-17 09:55:42 +08:00
qinqing 37652cd803 Merge branch 'main' into qinqing_dev 2024-10-14 17:17:55 +08:00
22 changed files with 206 additions and 273 deletions

View File

@ -15,3 +15,5 @@ VITE_APP_UPLOAD_API = 'https://file.ysaix.com:7868/prod-api'
VITE_APP_RES_FILE_PATH = 'https://file.ysaix.com:7868/src/assets/textbook/booktxt/' VITE_APP_RES_FILE_PATH = 'https://file.ysaix.com:7868/src/assets/textbook/booktxt/'
VITE_APP_BUILD_BASE_PATH = 'https://file.ysaix.com:7868/' VITE_APP_BUILD_BASE_PATH = 'https://file.ysaix.com:7868/'
VITE_SHOW_DEV_TOOLS = 'true'

View File

@ -17,3 +17,5 @@ VITE_BUILD_COMPRESS = gzip
VITE_APP_RES_FILE_PATH = 'https://prev.ysaix.com:7868/src/assets/textbook/booktxt/' VITE_APP_RES_FILE_PATH = 'https://prev.ysaix.com:7868/src/assets/textbook/booktxt/'
VITE_APP_BUILD_BASE_PATH = 'https://prev.ysaix.com:7868/' VITE_APP_BUILD_BASE_PATH = 'https://prev.ysaix.com:7868/'
VITE_SHOW_DEV_TOOLS = 'true'

View File

@ -73,8 +73,7 @@ function createLoginWindow() {
loginWindow.loadFile(join(__dirname, '../renderer/index.html'), { hash: 'login' }) loginWindow.loadFile(join(__dirname, '../renderer/index.html'), { hash: 'login' })
updateInit(loginWindow) updateInit(loginWindow)
} }
if (import.meta.env.VITE_SHOW_DEV_TOOLS === 'true') loginWindow.webContents.openDevTools()
loginWindow.webContents.openDevTools()
loginWindow.once('ready-to-show', () => { loginWindow.once('ready-to-show', () => {
loginWindow.show() loginWindow.show()
}) })
@ -128,7 +127,7 @@ function createMainWindow() {
shell.openExternal(details.url) shell.openExternal(details.url)
return { action: 'deny' } return { action: 'deny' }
}) })
mainWindow.webContents.openDevTools() if (import.meta.env.VITE_SHOW_DEV_TOOLS === 'true') mainWindow.webContents.openDevTools()
if (is.dev && process.env['ELECTRON_RENDERER_URL']) { if (is.dev && process.env['ELECTRON_RENDERER_URL']) {
mainWindow.loadURL(process.env['ELECTRON_RENDERER_URL']) mainWindow.loadURL(process.env['ELECTRON_RENDERER_URL'])
@ -138,6 +137,7 @@ function createMainWindow() {
// mainWindow.setAlwaysOnTop(true, "screen-saver") // 将窗口设置为顶层窗口 // mainWindow.setAlwaysOnTop(true, "screen-saver") // 将窗口设置为顶层窗口
// mainWindow.setVisibleOnAllWorkspaces(true) // 如果窗口在所有工作区都可见 // mainWindow.setVisibleOnAllWorkspaces(true) // 如果窗口在所有工作区都可见
mainWindow.maximize();
// 第三步: 开启remote服务 // 第三步: 开启remote服务
remote.enable(mainWindow.webContents) remote.enable(mainWindow.webContents)
} }

File diff suppressed because one or more lines are too long

View File

@ -34,6 +34,7 @@ export const editListItem = (row, courseObj) => {
chooseWorkLists: [],// 设计中的框架梳理list chooseWorkLists: [],// 设计中的框架梳理list
fileHomeworkList: [],// 设计中的常规作业list fileHomeworkList: [],// 设计中的常规作业list
whiteboardObj: '',// 设计中的课堂展示对象 whiteboardObj: '',// 设计中的课堂展示对象
question: '', // 设计中的[课堂展示]的问题
}; };
console.log('编辑的行', row); console.log('编辑的行', row);
@ -99,7 +100,7 @@ export const editListItem = (row, courseObj) => {
console.log('row.课堂展示', row.workcodes); console.log('row.课堂展示', row.workcodes);
const workcodes = JSON.parse(row.workcodes); const workcodes = JSON.parse(row.workcodes);
classtaskObj.whiteboardObj = JSON.stringify(workcodes.json); classtaskObj.whiteboardObj = JSON.stringify(workcodes.json);
// classtaskObj.question = row.worktag;
// console.log('课堂展示', classtaskObj); // console.log('课堂展示', classtaskObj);
return resolve(classtaskObj); return resolve(classtaskObj);
} }

View File

@ -285,8 +285,11 @@ export class ImChat {
// callback: (data) => {} // callback: (data) => {}
} }
// console.log('发送消息', option) // console.log('发送消息', option)
this.setConsole('%cim-chat: 发送消息', option) this.setConsole('%cim-chat: 发送消息【req】', conv_id, msg)
return this.timChat.TIMMsgSendMessageV2(option) return this.timChat.TIMMsgSendMessageV2(option).then(res => {
this.setConsole('%cim-chat: 发送消息【res】', JSON.stringify(res))
return res
})
} }
/** /**
* @description 发送群消息 * @description 发送群消息

View File

@ -138,7 +138,7 @@ export const createWindow = async (type, data) => {
wins_tool.setIgnoreMouseEvents(true, {forward: true}) // 忽略鼠标事件但是事件继续传递给窗口 wins_tool.setIgnoreMouseEvents(true, {forward: true}) // 忽略鼠标事件但是事件继续传递给窗口
wins_tool.setAlwaysOnTop(true,'screen-saver') // 将窗口设置为顶层窗口 wins_tool.setAlwaysOnTop(true,'screen-saver') // 将窗口设置为顶层窗口
wins_tool.setVisibleOnAllWorkspaces(true) // 如果窗口在所有工作区都可见 wins_tool.setVisibleOnAllWorkspaces(true) // 如果窗口在所有工作区都可见
wins_tool.webContents.openDevTools() // 打开调试工具 if (import.meta.env.VITE_SHOW_DEV_TOOLS === 'true') wins_tool.webContents.openDevTools() // 打开调试工具
eventHandles(type, wins_tool) // 事件监听处理 eventHandles(type, wins_tool) // 事件监听处理
return wins_tool return wins_tool
} }
@ -165,7 +165,7 @@ export const createWindow = async (type, data) => {
win.type = type // 唯一标识 win.type = type // 唯一标识
win.show() win.show()
win.setFullScreen(true) // 设置窗口为全屏 win.setFullScreen(true) // 设置窗口为全屏
win.webContents.openDevTools() // 打开调试工具 if (import.meta.env.VITE_SHOW_DEV_TOOLS === 'true') win.webContents.openDevTools() // 打开调试工具
eventHandles(type, win) // 事件监听处理 eventHandles(type, win) // 事件监听处理
winPdf=win winPdf=win
break break

View File

@ -237,7 +237,7 @@ const getStudentClassWorkData = async() => {
// deaddate: tabActive.value === ''? getTomorrow() : EndDate.value,// // deaddate: tabActive.value === ''? getTomorrow() : EndDate.value,//
// deaddate: EndDate.value,// // deaddate: EndDate.value,//
// //status: '1', // 1- // //status: '1', // 1-
// orderby: "deaddate DESC",// TODO deaddate // orderby: "deaddate DESC",//
// pageSize: 1000, // pageSize: 1000,
// }) // })
@ -401,7 +401,8 @@ const onClickItem = (item) => {
clearInterval(pollingST.value) clearInterval(pollingST.value)
console.log('防抖开启弹窗') console.log('防抖开启弹窗')
sessionStore.set('teachClassWorkItem', item); // item // sessionStore.set('teachClassWorkItem', item); // item
localStorage.setItem('teachClassWorkItem', JSON.stringify(item));
debounceOpenWin(); debounceOpenWin();
} }

View File

@ -6,7 +6,7 @@
:collapse="isCollapse" :collapse="isCollapse"
> >
<!--左侧 教材 目录--> <!--左侧 教材 目录-->
<div v-if="!isCollapse" style="height: 100%;overflow: hidden;"> <div v-if="!isCollapse" style="height: 100%;overflow: hidden;">
<ChooseTextbook @change-book="getData" @node-click="getData" /> <ChooseTextbook @change-book="getData" @node-click="getData" />
</div> </div>
</el-menu> </el-menu>
@ -15,10 +15,11 @@
<!-- 标题 --> <!-- 标题 -->
<el-row style="align-items: center; margin-bottom: 0px; flex: 0 0 auto"> <el-row style="align-items: center; margin-bottom: 0px; flex: 0 0 auto">
<el-col :span="12" style="padding-left: 20px; text-align: left;"> <el-col :span="12" style="padding-left: 20px; text-align: left;">
<div class="unit-top-left" @click="isCollapse = !isCollapse"> <!-- <div class="unit-top-left" @click="isCollapse = !isCollapse"> -->
<i v-if="!isCollapse" class="iconfont icon-xiangzuo" style="color: blue;"></i> <div class="unit-top-left">
<span>课程目录</span> <!-- <i v-if="!isCollapse" class="iconfont icon-xiangzuo" style="color: blue;"></i> -->
<i v-if="isCollapse" class="iconfont icon-xiangyou" style="color: blue;"></i> <span>作业布置</span>
<!-- <i v-if="isCollapse" class="iconfont icon-xiangyou" style="color: blue;"></i> -->
</div> </div>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
@ -33,7 +34,7 @@
</el-col> </el-col>
</el-row> </el-row>
<!-- 作业类型:内容 --> <!-- 作业类型:内容 -->
<div style="flex: 1;overflow: hidden;"> <div style="flex: 1;overflow: hidden;">
<el-table <el-table
ref="taskTable" ref="taskTable"
v-loading="loading" v-loading="loading"
@ -139,7 +140,7 @@
<div style="color: silver; display: flex;align-items: center;"> <div style="color: silver; display: flex;align-items: center;">
<div style="flex: 1;">{{ _item.worktype }}</div> <div style="flex: 1;">{{ _item.worktype }}</div>
<div style="flex: 1;">分值{{ _item.score }}</div> <div style="flex: 1;">分值{{ _item.score }}</div>
<div style="display: flex;align-items: center;flex: 1;justify-content: flex-end;"> <div style="display: flex;align-items: center;flex: 1;justify-content: flex-end;">
<el-button @click="prevRead(_item)">预览</el-button> <el-button @click="prevRead(_item)">预览</el-button>
</div> </div>
</div> </div>
@ -147,7 +148,7 @@
</template> </template>
</div> </div>
</div> </div>
<!-- TODO 课堂展示 常规作业 预览待开发--> <!-- TODO 课堂展示 预览待开发-->
<!-- 常规作业包含多个格式图片略缩图展示点击放大其他附件跳转另外弹窗查看 --> <!-- 常规作业包含多个格式图片略缩图展示点击放大其他附件跳转另外弹窗查看 -->
<div v-if="currentTag=='常规作业'" :style="{'padding': '15px', 'overflow': 'auto'}"> <div v-if="currentTag=='常规作业'" :style="{'padding': '15px', 'overflow': 'auto'}">
<div style="margin: 5px; background-color: white"> <div style="margin: 5px; background-color: white">
@ -187,7 +188,7 @@
</div> </div>
</div> </div>
</div> </div>
<div v-else> <div v-else>
<div v-if="workConfObj.teachFileList.length > 0"> <div v-if="workConfObj.teachFileList.length > 0">
<div style="margin: 10px 0;text-align: left; margin: auto 0; cursor: pointer;"> <div style="margin: 10px 0;text-align: left; margin: auto 0; cursor: pointer;">
<span style="color: #409eff" @click="openFile">预览其他类型附件</span> <span style="color: #409eff" @click="openFile">预览其他类型附件</span>
@ -219,7 +220,7 @@
<!-- 已推送历史 --> <!-- 已推送历史 -->
<el-dialog v-model="pushRecordsOpen" title="推送历史记录" width="80%" append-to-body> <el-dialog v-model="pushRecordsOpen" title="推送历史记录" width="80%" append-to-body>
<div style="flex: 1;overflow: hidden; min-height: 400px;"> <div style="flex: 1;overflow: hidden; min-height: 400px;">
<el-table <el-table
ref="pushRecordsRef" ref="pushRecordsRef"
:data="pushRecordsList" :data="pushRecordsList"
@ -286,7 +287,7 @@
<prevReadMsgDialog ref="prevReadMsgDialogRef" :bookobj="courseObj"/> <prevReadMsgDialog ref="prevReadMsgDialogRef" :bookobj="courseObj"/>
<!-- 其他附件预览框 acceptParams--> <!-- 其他附件预览框 acceptParams-->
<prevReadImgFileDialog ref="prevReadImgFileDialogRef"/> <prevReadImgFileDialog ref="prevReadImgFileDialogRef"/>
</div> </div>
</div> </div>
</template> </template>
@ -308,7 +309,7 @@ import SetHomework from '@/components/set-homework/index.vue'
import {sessionStore} from '@/utils/store' import {sessionStore} from '@/utils/store'
import {createWindow} from '@/utils/tool' import {createWindow} from '@/utils/tool'
import { useToolState } from '@/store/modules/tool' import { useToolState } from '@/store/modules/tool'
import {throttle,debounce } from '@/utils/comm' import {throttle,debounce } from '@/utils/comm'
const toolState = useToolState(); const toolState = useToolState();
@ -342,7 +343,7 @@ const courseObj = reactive({
}) })
const taskList = ref([]); // const taskList = ref([]); //
const loading = ref(false); const loading = ref(false);
const pushRecordsList = ref([]); // const pushRecordsList = ref([]); //
const pushRecordsOpen = ref(false); // const pushRecordsOpen = ref(false); //
const pushRecordsLoading = ref(false); // loading const pushRecordsLoading = ref(false); // loading
@ -414,7 +415,7 @@ const initHomeWork = async()=> {
} }
/** /**
* 查看推送历史 * 查看推送历史
* *
*/ */
const queryPushRecords = (row) => { const queryPushRecords = (row) => {
// //
@ -437,7 +438,7 @@ const queryPushRecords = (row) => {
// if (res.rows[i].worktype == '') { // if (res.rows[i].worktype == '') {
// res.rows[i].workclass = 'success'; // res.rows[i].workclass = 'success';
// res.rows[i].workcodesList = JSON.parse(res.rows[i].workcodes); // res.rows[i].workcodesList = JSON.parse(res.rows[i].workcodes);
// } else // } else
// TODO // TODO
if (res.rows[i].worktype == '课堂展示') { if (res.rows[i].worktype == '课堂展示') {
res.rows[i].workclass = 'primary'; res.rows[i].workclass = 'primary';
@ -476,11 +477,12 @@ const debounceOpenWin = debounce(() => {
// //
const onClickItem = (item) => { const onClickItem = (item) => {
console.log('防抖开启弹窗') console.log('防抖开启弹窗')
sessionStore.set('teachClassWorkItem', item); // item // sessionStore.set('teachClassWorkItem', item); // item
localStorage.setItem('teachClassWorkItem', JSON.stringify(item));
debounceOpenWin(); debounceOpenWin();
} }
/** /**
* 删除按钮操作 TODO 待完善 * 删除按钮操作 TODO 待完善
* */ * */
const handleDelete =() => { const handleDelete =() => {
@ -618,8 +620,8 @@ const handleWorkTitleEdit = (row, index, type) => {
}; };
/** /**
* 作业内容-查看详情 * 作业内容-查看详情
* */ * */
const handleWorkEdit = (row, index) =>{ const handleWorkEdit = (row, index) =>{
console.log(row, index) console.log(row, index)
workEdit.value = true workEdit.value = true
@ -637,7 +639,7 @@ const handleWorkTitleEdit = (row, index, type) => {
if ( res.data==null || res.data==undefined ) { if ( res.data==null || res.data==undefined ) {
return; return;
} }
res.data.worktype = '框架梳理'; res.data.worktype = '框架梳理';
res.data.score = listCourseWork[0].score; res.data.score = listCourseWork[0].score;
@ -706,7 +708,7 @@ const handleWorkTitleEdit = (row, index, type) => {
}; };
/** /**
* 作业内容-前往作业设计 编辑页面 * 作业内容-前往作业设计 编辑页面
* @param row * @param row
*/ */
const handleWorkEditItem = (row) => { const handleWorkEditItem = (row) => {
editListItem(row, courseObj).then((obj) => { editListItem(row, courseObj).then((obj) => {
@ -778,11 +780,11 @@ const handleTaskAssignToAllClass = () => {
*/ */
const handleNewClassWorkDialog = () => { const handleNewClassWorkDialog = () => {
// //
router.push({ router.push({
path: '/newClassTask', path: '/newClassTask',
query: { query: {
isBack: true, isBack: true,
} }
}); });
} }
@ -878,18 +880,20 @@ watch(() => courseObj.node, (newVal,oldVal) => {
</script> </script>
<!--
<style> <style>
.el-table .hidden-row { .el-table .hidden-row {
display: none !important; display: none !important;
/* color: #ccc !important; */ /* color: #ccc !important; */
} }
.el-table .father-row { .el-table .father-row {
--el-table-tr-bg-color: #fff; &#45;&#45;el-table-tr-bg-color: #fff;
} }
.el-table .son-row { .el-table .son-row {
--el-table-tr-bg-color: #f0f0f08a; &#45;&#45;el-table-tr-bg-color: #f0f0f08a;
} }
</style> </style>
-->
<style lang="scss" scoped> <style lang="scss" scoped>
.page-classTaskAssign { .page-classTaskAssign {
@ -906,7 +910,6 @@ watch(() => courseObj.node, (newVal,oldVal) => {
min-height: 100%; min-height: 100%;
} }
.unit-top-left { .unit-top-left {
cursor: pointer;
.icon-xiangzuo { .icon-xiangzuo {
margin-right: 5px; margin-right: 5px;
@ -934,4 +937,4 @@ watch(() => courseObj.node, (newVal,oldVal) => {
} }
} }
</style> </style>
<style src="@/assets/styles/JYStyle.css"></style> <style src="@/assets/styles/JYStyle.css"></style>

View File

@ -13,7 +13,7 @@
<template #header> <template #header>
<div style="font-size: 18px; display: flex; flex-wrap: nowrap"> <div style="font-size: 18px; display: flex; flex-wrap: nowrap">
<div style="flex: 1"> <div style="flex: 1">
{{ classWorkAnalysis.title }}答题情况 {{ classWorkAnalysis.title }}完成情况
<el-tag :type="classWorkAnalysis.workclass" size="large" style="height: 25px">{{ <el-tag :type="classWorkAnalysis.workclass" size="large" style="height: 25px">{{
classWorkAnalysis.worktype classWorkAnalysis.worktype
}}</el-tag> }}</el-tag>
@ -33,13 +33,13 @@
v-if="classWorkAnalysis.row.worktype == '习题训练'" v-if="classWorkAnalysis.row.worktype == '习题训练'"
:type="classWorkAnalysis.view == 'quizStats' ? 'success' : ''" :type="classWorkAnalysis.view == 'quizStats' ? 'success' : ''"
@click="workHandle('quizStats')" @click="workHandle('quizStats')"
>逐题分析</el-button >逐题讲评</el-button
> >
<el-button <el-button
v-if="classWorkAnalysis.row.worktype == '习题训练'" v-if="classWorkAnalysis.row.worktype == '习题训练'"
:type="classWorkAnalysis.view == 'report' ? 'success' : ''" :type="classWorkAnalysis.view == 'report' ? 'success' : ''"
@click="handleClassOverviewOpen('report')" @click="handleClassOverviewOpen('report')"
>整体分析</el-button >训练报告</el-button
> >
</el-button-group> </el-button-group>
</el-row> </el-row>
@ -141,12 +141,12 @@
</div> </div>
</div> </div>
<!-- 逐题分析 --> <!-- 逐题讲评 -->
<div v-else-if="classWorkAnalysis.view == 'quizStats'"> <div v-else-if="classWorkAnalysis.view == 'quizStats'">
<quiz-stats :active-data="classWorkActiveData" /> <quiz-stats :active-data="classWorkActiveData" />
</div> </div>
<!-- 整体分析--> <!-- 训练报告-->
<div v-else-if="classWorkAnalysis.view == 'report'" style="overflow-y: scroll"> <div v-else-if="classWorkAnalysis.view == 'report'" style="overflow-y: scroll">
<!-- <ClassOverview :table-list="overviewData" :eval-id="courseObj.evalid"></ClassOverview> --> <!-- <ClassOverview :table-list="overviewData" :eval-id="courseObj.evalid"></ClassOverview> -->
<ClassOverview :table-list="overviewData"></ClassOverview> <ClassOverview :table-list="overviewData"></ClassOverview>
@ -193,7 +193,7 @@ const tableRadio = reactive({
const loading_dt_table = ref(false) const loading_dt_table = ref(false)
const isopen_dtwk_table = ref(false) const isopen_dtwk_table = ref(false)
// zdg: // zdg:
const classWorkActiveData = reactive({ const classWorkActiveData = reactive({
quizlist: [], // quizlist: [], //
studentList: [], // - studentList: [], // -
@ -217,7 +217,7 @@ const classWorkAnalysisScore = reactive({
// } // }
// ) // )
const openDialog = (data) => { const openDialog = (data) => {
console.log(data, '点击的item答题情况') console.log(data, '点击的item完成情况')
classWorkAnalysis.title = data.uniquekey ? data.uniquekey + '--' : '' classWorkAnalysis.title = data.uniquekey ? data.uniquekey + '--' : ''
classWorkAnalysis.worktype = data.worktype classWorkAnalysis.worktype = data.worktype
@ -467,7 +467,7 @@ const getStudentClassWorkDataDetail = (row) => {
} }
}) })
.catch(() => { .catch(() => {
console.log('获取答题情况失败') console.log('获取完成情况失败')
ElMessage({ ElMessage({
type: 'warning', type: 'warning',
message: '未获取到答题信息!' message: '未获取到答题信息!'
@ -479,7 +479,7 @@ const onClassWorkScoreSubmit = () => {
console.log('批改后返回的方法') console.log('批改后返回的方法')
loading_dt_table.value = true loading_dt_table.value = true
isopen_dtwk_table.value = false isopen_dtwk_table.value = false
// 1table- classWorkAnalysis.classworkdata- classWorkAnalysis.activeStudentQuizlist // 1table- classWorkAnalysis.classworkdata- classWorkAnalysis.activeStudentQuizlist
// - // -
classWorkAnalysis.classworkdata = [] classWorkAnalysis.classworkdata = []
classWorkAnalysis.activeStudentQuizlist = [] classWorkAnalysis.activeStudentQuizlist = []
@ -536,7 +536,7 @@ const escapeHtmlQuotes = (str) => {
return result; return result;
} }
//#region //#region
// - // -
const workHandle = (type) => { const workHandle = (type) => {
// ui // ui
@ -571,11 +571,11 @@ const getWorkFeedList = async() =>{
//#endregion //#endregion
//#regin //#regin
/* /*
author: yangws author: yangws
time: 2024-8-06 16:35:33 time: 2024-8-06 16:35:33
function: 整体分析的处理 function: 训练报告的处理
*/ */
const handleClassOverviewOpen = (type) =>{ const handleClassOverviewOpen = (type) =>{
// ui // ui
@ -643,12 +643,12 @@ const closeDialog = () => {
watch(classWorkAnalysis, (newVal, oldVal) => { watch(classWorkAnalysis, (newVal, oldVal) => {
if(newVal.view != 'quizStats'){ if(newVal.view != 'quizStats'){
console.log('关闭zdg: 定时执行') console.log('关闭zdg: 定时执行')
clearInterval(classWorkActiveData.timerId) // clearInterval(classWorkActiveData.timerId) //
} }
}) })
onUnmounted(() => { onUnmounted(() => {
clearInterval(classWorkActiveData.timerId) // clearInterval(classWorkActiveData.timerId) //
}) })
defineExpose({ defineExpose({
@ -656,8 +656,6 @@ defineExpose({
}) })
</script> </script>
<style src="@/assets/styles/JYStyle.css"></style>
<style scoped lang="scss"> <style scoped lang="scss">
/*:deep(.reserv-date-pick) { /*:deep(.reserv-date-pick) {
width: 140px; width: 140px;
@ -765,3 +763,4 @@ defineExpose({
overflow-y: auto; overflow-y: auto;
} }
</style> </style>
<style src="@/assets/styles/JYStyle.css"></style>

View File

@ -21,7 +21,7 @@
<div v-if="classWorkForm.worktype == '课堂展示'" style="height: 100%; display: flex; flex-direction: column;"> <div v-if="classWorkForm.worktype == '课堂展示'" style="height: 100%; display: flex; flex-direction: column;">
<div style="flex: 0 0 auto;"> <div style="flex: 0 0 auto;">
<el-form-item label="问题"> <el-form-item label="问题">
<el-input v-model="classWorkForm.title" type="text" placeholder="请输入问题" /> <el-input v-model="classWorkForm.question" type="text" placeholder="请输入问题" />
</el-form-item> </el-form-item>
</div> </div>
<div v-loading="boardLoading" class="board-wrap" style="height: 100%; flex: 1; overflow: hidden;"> <div v-loading="boardLoading" class="board-wrap" style="height: 100%; flex: 1; overflow: hidden;">
@ -29,7 +29,7 @@
<whiteboard ref="boardref" :height="mainHeight - 150" :isShowSave="false" :data="classWorkForm.whiteboardObj"/> <whiteboard ref="boardref" :height="mainHeight - 150" :isShowSave="false" :data="classWorkForm.whiteboardObj"/>
</div> </div>
</div> </div>
<div v-else class="el-form-work-list"> <div v-else class="el-form-work-list">
<el-form-item label="作业资源:" class="el-form-work-list"> <el-form-item label="作业资源:" class="el-form-work-list">
<!-- 左侧作业资源 --> <!-- 左侧作业资源 -->
<el-col :span="15" class="work-left"> <el-col :span="15" class="work-left">
@ -54,7 +54,7 @@
</el-col> </el-col>
<el-col :span="11"> <el-col :span="11">
<el-form-item label="知识点" label-width="70"> <el-form-item label="知识点" label-width="70">
<el-cascader <el-cascader
v-model="entpCourseWorkQueryParams.point" v-model="entpCourseWorkQueryParams.point"
clearable clearable
style="width: 100%" style="width: 100%"
@ -80,8 +80,8 @@
<el-col :span="15"> <el-col :span="15">
<el-form-item label="关键词" label-width="70"> <el-form-item label="关键词" label-width="70">
<el-input <el-input
v-model="entpCourseWorkQueryParams.keyWord" v-model="entpCourseWorkQueryParams.keyWord"
style="width: 70%" type="text" style="width: 70%" type="text"
placeholder="请输入关键词" placeholder="请输入关键词"
/> />
<el-button @click="handleQueryParamFromEntpCourseWork(1)"><el-icon><Search /></el-icon> </el-button> <el-button @click="handleQueryParamFromEntpCourseWork(1)"><el-icon><Search /></el-icon> </el-button>
@ -89,7 +89,7 @@
</el-col> </el-col>
</el-row> </el-row>
<!-- 习题表格 --> <!-- 习题表格 -->
<div class="middle" > <div class="middle" >
<el-table :data="workResource.entpCourseWorkList" style="width: 100%; height: 100%;"> <el-table :data="workResource.entpCourseWorkList" style="width: 100%; height: 100%;">
<el-table-column type="index" width="60" /> <el-table-column type="index" width="60" />
<el-table-column align="left" > <el-table-column align="left" >
@ -119,10 +119,10 @@
<!-- 分页 这里不用--> <!-- 分页 这里不用-->
<!-- <div style="height: 55px;"> <!-- <div style="height: 55px;">
<pagination <pagination
v-show="entpCourseWorkTotal > 0" v-show="entpCourseWorkTotal > 0"
v-model:page="paginationParams.pageNum" v-model:page="paginationParams.pageNum"
v-model:limit="paginationParams.pageSize" v-model:limit="paginationParams.pageSize"
:total="entpCourseWorkTotal" :total="entpCourseWorkTotal"
:style="{ position: 'relative', 'margin-top': '5px' }" :style="{ position: 'relative', 'margin-top': '5px' }"
@pagination="getPaginationList" /> @pagination="getPaginationList" />
</div> --> </div> -->
@ -189,7 +189,7 @@
<el-form-item label="分值"> <el-form-item label="分值">
<el-input-number v-model="item.score" :min="1" :max="100" size="small"></el-input-number > <el-input-number v-model="item.score" :min="1" :max="100" size="small"></el-input-number >
</el-form-item> </el-form-item>
<div style="display: flex;align-items: center;flex: 1;justify-content: flex-end;"> <div style="display: flex;align-items: center;flex: 1;justify-content: flex-end;">
<el-button @click="prevRead(item)">预览</el-button> <el-button @click="prevRead(item)">预览</el-button>
<el-button type="danger" @click="deleteClassWorkAddOfResource(item)">删除</el-button> <el-button type="danger" @click="deleteClassWorkAddOfResource(item)">删除</el-button>
</div> </div>
@ -349,9 +349,11 @@ let classWorkForm = reactive({
chooseWorkLists: props.propsformobj.chooseWorkLists?cloneDeep(props.propsformobj.chooseWorkLists):[], // list chooseWorkLists: props.propsformobj.chooseWorkLists?cloneDeep(props.propsformobj.chooseWorkLists):[], // list
fileHomeworkList: props.propsformobj.fileHomeworkList?cloneDeep(props.propsformobj.fileHomeworkList):[], // fileHomeworkList: props.propsformobj.fileHomeworkList?cloneDeep(props.propsformobj.fileHomeworkList):[], //
whiteboardObj: props.propsformobj.whiteboardObj?cloneDeep(props.propsformobj.whiteboardObj):'', // - whiteboardObj: props.propsformobj.whiteboardObj?cloneDeep(props.propsformobj.whiteboardObj):'', // -
question: props.propsformobj.question?cloneDeep(props.propsformobj.question):'', // -
}); // }); //
// --------------------------------------------------- // ---------------------------------------------------
const listWorkType = ref(['习题训练', '框架梳理', '课堂展示', '常规作业']); // // const listWorkType = ref(['', '', '', '']); //
const listWorkType = ref(['习题训练', '课堂展示', '常规作业']); //
// ------- // -------
const boardLoading = ref(false); const boardLoading = ref(false);
@ -362,7 +364,7 @@ const fileLoading = ref(false); // 常规作业loading
* 作业类型切换 * 作业类型切换
*/ */
const changeFormType = (val) => { const changeFormType = (val) => {
classWorkForm.worktype = val; classWorkForm.worktype = val;
} }
/** /**
@ -371,7 +373,7 @@ const changeFormType = (val) => {
* @param {*} queryType * @param {*} queryType
* 1 - 按条件查询 * 1 - 按条件查询
* 2 - 按关键词查询 * 2 - 按关键词查询
*/ */
const handleQueryParamFromEntpCourseWork = (queryType) => { const handleQueryParamFromEntpCourseWork = (queryType) => {
// //
// this.paginationParams = {pageNum: 1,pageSize: 10}; // this.paginationParams = {pageNum: 1,pageSize: 10};
@ -410,7 +412,7 @@ const handleQueryFromEntpCourseWork= (queryType) => {
keyword: entpCourseWorkQueryParams.keyWord && entpCourseWorkQueryParams.keyWord !== '' ? entpCourseWorkQueryParams.keyWord:'', keyword: entpCourseWorkQueryParams.keyWord && entpCourseWorkQueryParams.keyWord !== '' ? entpCourseWorkQueryParams.keyWord:'',
} }
// //
// pageNum: paginationParams.pageNum, // pageNum: paginationParams.pageNum,
// pageSize: paginationParams.pageSize, // pageSize: paginationParams.pageSize,
@ -420,7 +422,7 @@ const handleQueryFromEntpCourseWork= (queryType) => {
// // [+][+] // // [+][+]
// queryForm.edusubject = ''; // queryForm.edusubject = '';
// } // }
listEntpcourseworkNew(queryForm).then(entpcourseworkres => { listEntpcourseworkNew(queryForm).then(entpcourseworkres => {
// if (queryType == 1 && this.entpCourseWorkQueryParams.worktype == '') { // if (queryType == 1 && this.entpCourseWorkQueryParams.worktype == '') {
// // , // // ,
@ -431,7 +433,7 @@ const handleQueryFromEntpCourseWork= (queryType) => {
// } else { // } else {
// workResource.entpCourseWorkList = entpcourseworkres.rows; // workResource.entpCourseWorkList = entpcourseworkres.rows;
// } // }
if(entpcourseworkres.data&&entpcourseworkres.data.length>0){ if(entpcourseworkres.data&&entpcourseworkres.data.length>0){
workResource.entpCourseWorkList = entpcourseworkres.data; workResource.entpCourseWorkList = entpcourseworkres.data;
workResource.entpCourseWorkTotal = entpcourseworkres.data.length; workResource.entpCourseWorkTotal = entpcourseworkres.data.length;
@ -509,7 +511,7 @@ const getEntpCourseWorkPointList = () => {
/** /**
* 添加资源 * 添加资源
* @param fromsrc - 试题来源 * @param fromsrc - 试题来源
* @param entpcourseworkid * @param entpcourseworkid
*/ */
const handleClassWorkQuizAdd = (fromsrc, entpcourseworkid) => { const handleClassWorkQuizAdd = (fromsrc, entpcourseworkid) => {
var exist = false; var exist = false;
@ -608,11 +610,11 @@ const handleClassWorkSave = async () => {
uniquekey: classWorkForm.uniquekey,// uniquekey: classWorkForm.uniquekey,//
classid: 0, classid: 0,
classcourseid: 0, classcourseid: 0,
entpcourseid: chapterId, // entpcourseid: chapterId, //
slideid: 0, slideid: 0,
title: classWorkForm.title, // title: classWorkForm.title, //
workcodes: JSON.stringify(classWorkForm.workcodes), // workcodes: JSON.stringify(classWorkForm.workcodes), //
edusubject: userStore.edusubject, // edusubject: userStore.edusubject, //
evalid: props.bookobj.levelSecondId, //userStore.evalid, // // ID evalid: props.bookobj.levelSecondId, //userStore.evalid, // // ID
edustage: userStore.edustage, // ,, edustage: userStore.edustage, // ,,
status: '10', //2024-09-11 status: '10', //2024-09-11
@ -628,16 +630,17 @@ const handleClassWorkSave = async () => {
return; return;
} }
if (classWorkForm.worktype === "课堂展示") { if (classWorkForm.worktype === "课堂展示") {
boardLoading.value = true boardLoading.value = true
let canvasJson = proxy.$refs.boardref.getCanvasJson() let canvasJson = proxy.$refs.boardref.getCanvasJson()
let canvasBase64 = await proxy.$refs.boardref.getCanvasBase64() let canvasBase64 = await proxy.$refs.boardref.getCanvasBase64()
// //
cform.title = classWorkForm.title; cform.worktag = classWorkForm.question;
cform.title = classWorkForm.title;
cform.workcodes = JSON.stringify({json: canvasJson, base64: canvasBase64}); cform.workcodes = JSON.stringify({json: canvasJson, base64: canvasBase64});
cform.entpcourseworklist = JSON.stringify([{'id':-1, 'score': '10'}]); cform.entpcourseworklist = JSON.stringify([{'id':-1, 'score': '10'}]);
try { try {
@ -647,27 +650,19 @@ const handleClassWorkSave = async () => {
classWorkForm.worktype = "课堂展示"; classWorkForm.worktype = "课堂展示";
classWorkForm.uniquekey = props.propsformobj.uniquekey, // classWorkForm.uniquekey = props.propsformobj.uniquekey, //
classWorkForm.title = ""; classWorkForm.title = "";
classWorkForm.question = "";
classWorkForm.quizlist = [], // classWorkForm.quizlist = [], //
// //
classWorkForm.chooseWorkLists = []; // list classWorkForm.chooseWorkLists = []; // list
classWorkForm.whiteboardObj = ''; // ? // classWorkForm.whiteboardObj = ''; // ? //
// refresh the list
//
// this.getClassWorkAllList();
// TODO
//TODO 3
// this.newWorkSpace = false;
// this.newWorkSpaceEdit = false;
// this.workEdit = false;
boardLoading.value = false boardLoading.value = false
}) })
} finally { } finally {
boardLoading.value = false boardLoading.value = false
} }
} }
else if(classWorkForm.worktype === "常规作业"){ else if(classWorkForm.worktype === "常规作业"){
fileLoading.value = true fileLoading.value = true
cform.workcodes = JSON.stringify(classWorkForm.fileHomeworkList); cform.workcodes = JSON.stringify(classWorkForm.fileHomeworkList);
@ -685,16 +680,6 @@ const handleClassWorkSave = async () => {
classWorkForm.chooseWorkLists = []; // list classWorkForm.chooseWorkLists = []; // list
classWorkForm.whiteboardObj = ''; // ? // classWorkForm.whiteboardObj = ''; // ? //
classWorkForm.fileHomeworkList = []; // list classWorkForm.fileHomeworkList = []; // list
// refresh the list
//
// this.getClassWorkAllList();
// TODO
//TODO 3
// this.newWorkSpace = false;
// this.newWorkSpaceEdit = false;
// this.workEdit = false;
fileLoading.value = false fileLoading.value = false
}) })
@ -725,7 +710,7 @@ const handleClassWorkSave = async () => {
} }
console.log(cform,'提交的数据'); console.log(cform,'提交的数据');
if(cform.entpcourseworklist == '') return ElMessage({ type: 'warning', message: '请先添加作业资源!'}); if(cform.entpcourseworklist == '') return ElMessage({ type: 'warning', message: '请先添加作业资源!'});
addClassworkReturnId(cform).then(workres => { addClassworkReturnId(cform).then(workres => {
ElMessage({ type: 'success', message: '作业设计成功!'}); ElMessage({ type: 'success', message: '作业设计成功!'});
// //
@ -743,7 +728,7 @@ const handleClassWorkSave = async () => {
}) })
} }
if(props.isback){ if(props.isback){
// //
router.back(); router.back();
@ -782,20 +767,20 @@ const editWork = async (cform) =>{
// //
if (classWorkForm.worktype=='习题训练'){ if (classWorkForm.worktype=='习题训练'){
// 1. // 1.
let needUplEval = false; let needUplEval = false;
if (classWorkForm.quizlist.length != props.propsformobj.quizlist.length) { if (classWorkForm.quizlist.length != props.propsformobj.quizlist.length) {
needUplEval = true; needUplEval = true;
}else { }else {
// //
needUplEval = classWorkForm.quizlist.some(cur => needUplEval = classWorkForm.quizlist.some(cur =>
!props.propsformobj.quizlist.some(last => !props.propsformobj.quizlist.some(last =>
last.id === cur.id && last.score === cur.score last.id === cur.id && last.score === cur.score
) )
); );
} }
// 2.eval // 2.eval
if (needUplEval) { if (needUplEval) {
// : , , // : , ,
@ -806,7 +791,7 @@ const editWork = async (cform) =>{
arrEvalids.push(element.id); arrEvalids.push(element.id);
}); });
const ids = arrEvalids.join(','); const ids = arrEvalids.join(',');
// 2.2. // 2.2.
const delRes = await delClassworkeval(ids); const delRes = await delClassworkeval(ids);
@ -837,8 +822,8 @@ const editWork = async (cform) =>{
needUplEval = true; needUplEval = true;
}else { }else {
// //
needUplEval = classWorkForm.chooseWorkLists.some(cur => needUplEval = classWorkForm.chooseWorkLists.some(cur =>
!props.propsformobj.chooseWorkLists.some(last => !props.propsformobj.chooseWorkLists.some(last =>
last.id === cur.id && last.score === cur.score last.id === cur.id && last.score === cur.score
) )
); );
@ -857,6 +842,7 @@ const editWork = async (cform) =>{
let canvasJson = proxy.$refs.boardref.getCanvasJson() let canvasJson = proxy.$refs.boardref.getCanvasJson()
let canvasBase64 = await proxy.$refs.boardref.getCanvasBase64() let canvasBase64 = await proxy.$refs.boardref.getCanvasBase64()
cform.workcodes = JSON.stringify({json: canvasJson, base64: canvasBase64}); cform.workcodes = JSON.stringify({json: canvasJson, base64: canvasBase64});
cform.worktag = classWorkForm.question;
} }
else if (classWorkForm.worktype=='常规作业') { else if (classWorkForm.worktype=='常规作业') {
// 1. (, ) // 1. (, )
@ -902,15 +888,15 @@ watch(() => props.bookobj.levelSecondId, (newVal) => {
.container { .container {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
height: 100%; height: 100%;
} }
.top, .bottom { .top, .bottom {
flex: 0 0 auto; flex: 0 0 auto;
} }
.middle { .middle {
flex: 1; flex: 1;
height: 100%; height: 100%;
overflow: hidden; overflow: hidden;
} }
@ -937,8 +923,8 @@ watch(() => props.bookobj.levelSecondId, (newVal) => {
.work-right { .work-right {
height: 100%; height: 100%;
padding: 0 0 0 5px; padding: 0 0 0 5px;
overflow: auto; overflow: auto;
line-height: 26px; line-height: 26px;
overflow: hidden; overflow: hidden;
} }
@ -949,19 +935,19 @@ watch(() => props.bookobj.levelSecondId, (newVal) => {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
margin-bottom: 5px; margin-bottom: 5px;
.choose-work-title{ .choose-work-title{
font-size: 1.2em; font-size: 1.2em;
font-weight: bold; font-weight: bold;
margin-right: 5px margin-right: 5px
} }
.choose-work-content{ .choose-work-content{
width: 100%; width: 100%;
display: flex; display: flex;
justify-content: space-around; justify-content: space-around;
flex-direction: column; flex-direction: column;
flex: 1; flex: 1;
:deep(.el-form-item__label){ :deep(.el-form-item__label){
width: 50px !important; width: 50px !important;

View File

@ -279,7 +279,7 @@ const getStudentName = id => studentList.value.length && (studentList.value.find
// - // -
const getActive = ind => activeTopic.value != ind const getActive = ind => activeTopic.value != ind
// - // -
const clickInfo = async ind => { const clickInfo = async ind => {
activeTopic.value = activeTopic.value != ind ? ind : 0 activeTopic.value = activeTopic.value != ind ? ind : 0
setTimeout(() => {scrollToElement('collapse-' + ind)}, 300); setTimeout(() => {scrollToElement('collapse-' + ind)}, 300);

View File

@ -6,7 +6,7 @@
:collapse="isCollapse" :collapse="isCollapse"
> >
<!--左侧 教材 目录--> <!--左侧 教材 目录-->
<div v-if="!isCollapse" style="height: 100%;overflow: hidden;"> <div v-if="!isCollapse" style="height: 100%;overflow: hidden;">
<ChooseTextbook @change-book="getData" @node-click="getData" /> <ChooseTextbook @change-book="getData" @node-click="getData" />
</div> </div>
</el-menu> </el-menu>
@ -15,11 +15,11 @@
<!-- 标题 --> <!-- 标题 -->
<el-row style="align-items: center; margin-bottom: 0px; flex: 0 0 auto"> <el-row style="align-items: center; margin-bottom: 0px; flex: 0 0 auto">
<el-col :span="12" style="padding-left: 20px; text-align: left;"> <el-col :span="12" style="padding-left: 20px; text-align: left;">
<div v-if="!isOpenLeftBook" class="unit-top-left cursor-pointer" @click="onOpenLeftBook"> <div v-if="!isOpenLeftBook" class="unit-top-left" @click="onOpenLeftBook">
<i v-if="isback" class="iconfont icon-xiangzuo cursor-pointer" style="color: blue;" @click="goBack">返回上页</i> <i v-if="isback" class="iconfont icon-xiangzuo cursor-pointer" style="color: blue;" @click="goBack">返回上页</i>
<i v-if="!isCollapse" class="iconfont icon-xiangzuo" style="color: blue;"></i> <!-- <i v-if="!isCollapse" class="iconfont icon-xiangzuo" style="color: blue;"></i> -->
<span>课程目录</span> <span>作业设计</span>
<i v-if="isCollapse" class="iconfont icon-xiangyou" style="color: blue;"></i> <!-- <i v-if="isCollapse" class="iconfont icon-xiangyou" style="color: blue;"></i> -->
</div> </div>
<div v-else class="unit-top-left"> <div v-else class="unit-top-left">
<i class="iconfont icon-xiangzuo cursor-pointer" style="color: blue;" @click="goBack">返回上页</i> <i class="iconfont icon-xiangzuo cursor-pointer" style="color: blue;" @click="goBack">返回上页</i>
@ -69,6 +69,7 @@ const classWorkForm = reactive({
chooseWorkLists: classtaskObj? JSON.parse(classtaskObj).chooseWorkLists : [],// list chooseWorkLists: classtaskObj? JSON.parse(classtaskObj).chooseWorkLists : [],// list
fileHomeworkList: classtaskObj? JSON.parse(classtaskObj).fileHomeworkList : [],// list fileHomeworkList: classtaskObj? JSON.parse(classtaskObj).fileHomeworkList : [],// list
whiteboardObj: classtaskObj? JSON.parse(classtaskObj).whiteboardObj : '',// whiteboardObj: classtaskObj? JSON.parse(classtaskObj).whiteboardObj : '',//
question: classtaskObj? JSON.parse(classtaskObj).question : '',//
}) })
@ -113,7 +114,7 @@ const onOpenLeftBook = () => {
proxy.$modal.msgError(`当前为编辑状态不可选择课程!`); proxy.$modal.msgError(`当前为编辑状态不可选择课程!`);
}else{ }else{
// //
isCollapse.value = !isCollapse.value // isCollapse.value = !isCollapse.value
} }
} }
// --- // ---

View File

@ -3,7 +3,7 @@
<div class="teachClassTask_header"> <div class="teachClassTask_header">
<div style="font-size: 18px; display: flex; flex-wrap: nowrap"> <div style="font-size: 18px; display: flex; flex-wrap: nowrap">
<div style="flex: 1"> <div style="flex: 1">
{{ classWorkAnalysis.title }}答题情况 {{ classWorkAnalysis.title }}完成情况
<el-tag :type="classWorkAnalysis.workclass" size="large" style="height: 25px">{{ <el-tag :type="classWorkAnalysis.workclass" size="large" style="height: 25px">{{
classWorkAnalysis.worktype classWorkAnalysis.worktype
}}</el-tag> }}</el-tag>
@ -23,13 +23,13 @@
v-if="classWorkAnalysis.row.worktype == '习题训练'" v-if="classWorkAnalysis.row.worktype == '习题训练'"
:type="classWorkAnalysis.view == 'quizStats' ? 'success' : ''" :type="classWorkAnalysis.view == 'quizStats' ? 'success' : ''"
@click="workHandle('quizStats')" @click="workHandle('quizStats')"
>逐题分析</el-button >逐题讲评</el-button
> >
<el-button <el-button
v-if="classWorkAnalysis.row.worktype == '习题训练'" v-if="classWorkAnalysis.row.worktype == '习题训练'"
:type="classWorkAnalysis.view == 'report' ? 'success' : ''" :type="classWorkAnalysis.view == 'report' ? 'success' : ''"
@click="handleClassOverviewOpen('report')" @click="handleClassOverviewOpen('report')"
>整体分析</el-button >训练报告</el-button
> >
</el-button-group> </el-button-group>
</div> </div>
@ -131,12 +131,12 @@
</div> </div>
</div> </div>
<!-- 逐题分析 --> <!-- 逐题讲评 -->
<div v-else-if="classWorkAnalysis.view == 'quizStats'" style="width: 100%;"> <div v-else-if="classWorkAnalysis.view == 'quizStats'" style="width: 100%;">
<quiz-stats :active-data="classWorkActiveData" style="width: 100%;height: 100%;"/> <quiz-stats :active-data="classWorkActiveData" style="width: 100%;height: 100%;"/>
</div> </div>
<!-- 整体分析--> <!-- 训练报告-->
<div v-else-if="classWorkAnalysis.view == 'report'" style="width: 100%;overflow-y: scroll"> <div v-else-if="classWorkAnalysis.view == 'report'" style="width: 100%;overflow-y: scroll">
<!-- <ClassOverview :table-list="overviewData" :eval-id="courseObj.evalid"></ClassOverview> --> <!-- <ClassOverview :table-list="overviewData" :eval-id="courseObj.evalid"></ClassOverview> -->
<ClassOverview :table-list="overviewData" style="width: 100%;"></ClassOverview> <ClassOverview :table-list="overviewData" style="width: 100%;"></ClassOverview>
@ -180,7 +180,7 @@ const tableRadio = reactive({
const loading_dt_table = ref(false) const loading_dt_table = ref(false)
const isopen_dtwk_table = ref(false) const isopen_dtwk_table = ref(false)
// zdg: // zdg:
const classWorkActiveData = reactive({ const classWorkActiveData = reactive({
quizlist: [], // quizlist: [], //
studentList: [], // - studentList: [], // -
@ -204,7 +204,7 @@ const classWorkAnalysisScore = reactive({
// } // }
// ) // )
const openDialog = (data) => { const openDialog = (data) => {
console.log(data, '点击的item答题情况') console.log(data, '点击的item完成情况')
classWorkAnalysis.title = data.uniquekey ? data.uniquekey + '--' : '' classWorkAnalysis.title = data.uniquekey ? data.uniquekey + '--' : ''
classWorkAnalysis.worktype = data.worktype classWorkAnalysis.worktype = data.worktype
@ -459,7 +459,7 @@ const getStudentClassWorkDataDetail = (row) => {
} }
}) })
.catch(() => { .catch(() => {
console.log('获取答题情况失败') console.log('获取完成情况失败')
ElMessage({ ElMessage({
type: 'warning', type: 'warning',
message: '未获取到答题信息!' message: '未获取到答题信息!'
@ -471,7 +471,7 @@ const onClassWorkScoreSubmit = () => {
console.log('批改后返回的方法') console.log('批改后返回的方法')
loading_dt_table.value = true loading_dt_table.value = true
isopen_dtwk_table.value = false isopen_dtwk_table.value = false
// 1table- classWorkAnalysis.classworkdata- classWorkAnalysis.activeStudentQuizlist // 1table- classWorkAnalysis.classworkdata- classWorkAnalysis.activeStudentQuizlist
// - // -
classWorkAnalysis.classworkdata = [] classWorkAnalysis.classworkdata = []
classWorkAnalysis.activeStudentQuizlist = [] classWorkAnalysis.activeStudentQuizlist = []
@ -528,7 +528,7 @@ const escapeHtmlQuotes = (str) => {
return result; return result;
} }
//#region //#region
// - // -
const workHandle = (type) => { const workHandle = (type) => {
// ui // ui
@ -563,11 +563,11 @@ const getWorkFeedList = async() =>{
//#endregion //#endregion
//#regin //#regin
/* /*
author: yangws author: yangws
time: 2024-8-06 16:35:33 time: 2024-8-06 16:35:33
function: 整体分析的处理 function: 训练报告的处理
*/ */
const handleClassOverviewOpen = (type) =>{ const handleClassOverviewOpen = (type) =>{
// ui // ui
@ -633,9 +633,10 @@ const closeDialog = () => {
} }
onMounted(() => { onMounted(() => {
// const data = JSON.parse(localStorage.getItem('teachClassWorkItem')); const data = JSON.parse(localStorage.getItem('teachClassWorkItem'));
const data = sessionStore.get('teachClassWorkItem'); // const data = sessionStore.get('teachClassWorkItem');
// const data = localStorage.getItem('teachClassWorkItem');
console.log(data,'????????????????????' ) console.log(data,'????????????????????' )
if(data){ if(data){
openDialog(data) openDialog(data)
@ -645,20 +646,18 @@ onMounted(() => {
watch(classWorkAnalysis, (newVal, oldVal) => { watch(classWorkAnalysis, (newVal, oldVal) => {
if(newVal.view != 'quizStats'){ if(newVal.view != 'quizStats'){
console.log('关闭zdg: 定时执行') console.log('关闭zdg: 定时执行')
clearInterval(classWorkActiveData.timerId) // clearInterval(classWorkActiveData.timerId) //
} }
}) })
onUnmounted(() => { onUnmounted(() => {
clearInterval(classWorkActiveData.timerId) // clearInterval(classWorkActiveData.timerId) //
}) })
// defineExpose({ // defineExpose({
// }) // })
</script> </script>
<style src="@/assets/styles/JYStyle.css"></style>
<style scoped lang="scss"> <style scoped lang="scss">
.teachClassTask{ .teachClassTask{
height: 100%; height: 100%;
@ -704,94 +703,6 @@ onUnmounted(() => {
} }
} }
} }
// .clwk_dialog {
// }
// .clwk_dialog {
// display: flex;
// justify-content: center;
// overflow: hidden;
// }
// .clwk_dialog .el-dialog {
// margin: 0 auto !important;
// height: 85%!important;
// overflow: hidden;
// }
// .clwk_dialog .el-dialog__header {
// /* position: absolute;
// top: 0;
// left: 0; */
// width: 100%!important;
// }
// .clwk_dialog .el-dialog__body {
// position: absolute;
// left: 0;
// top: 15px;
// bottom: 1px;
// right:0;
// padding:5px;
// z-index:1;
// display: flex;
// flex-direction: column;
// overflow: hidden;
// /* overflow:hidden;
// overflow-y: auto; */
// }
// .clwk_dialog .el-dialog__footer{
// position: absolute;
// bottom: 10px;
// right: 10px;
// }
// .clwk_dialog .classwork-score{
// overflow-y: auto;
// }
</style> </style>
<style scoped> <style src="@/assets/styles/JYStyle.css"></style>
/* .clwk_dialog {
display: flex;
justify-content: center;
overflow: hidden;
}
.clwk_dialog .el-dialog {
margin: 0 auto !important;
height: 85%!important;
overflow: hidden;
}
.clwk_dialog .el-dialog__header {
/* position: absolute;
top: 0;
left: 0;
width: 100%!important;
}
.clwk_dialog .el-dialog__body {
position: absolute;
left: 0;
top: 15px;
bottom: 1px;
right:0;
padding:5px;
z-index:1;
display: flex;
flex-direction: column;
overflow: hidden;
/* overflow:hidden;
overflow-y: auto;
}
.clwk_dialog .el-dialog__footer{
position: absolute;
bottom: 10px;
right: 10px;
}
.clwk_dialog .classwork-score{
overflow-y: auto;
} */
</style>

View File

@ -96,7 +96,8 @@ const debounceOpenWin = debounce(() => {
// //
const onClickItem = (item) => { const onClickItem = (item) => {
console.log('防抖开启弹窗') console.log('防抖开启弹窗')
sessionStore.set('teachClassWorkItem', item); // item // sessionStore.set('teachClassWorkItem', item); // item
localStorage.setItem('teachClassWorkItem', JSON.stringify(item));
debounceOpenWin(); debounceOpenWin();
} }

View File

@ -19,22 +19,29 @@
<!-- 试题详情 --> <!-- 试题详情 -->
<el-drawer v-model="activeExamInfoDrawer" title="题目详情" :with-header="false" direction="rtl" size="60%"> <el-drawer v-model="activeExamInfoDrawer" title="题目详情" :with-header="false" direction="rtl" size="60%">
<el-row class="drawer-main"> <div style="height: calc(100% - 50px);">
<el-col :span="24"> <el-scrollbar style="background: #e9e9e9;border-radius: 8px;">
<span>{{activeExam.worktag}}</span> <el-row class="drawer-main">
<span style="margin-left: 4px" v-html="activeExam.titleFormat" ></span> <el-col :span="24">
</el-col> <span>{{activeExam.worktag}}</span>
<el-col :span="24" style="padding: 4px" v-html="activeExam.workdescFormat"> <span style="margin-left: 4px" v-html="activeExam.titleFormat" ></span>
</el-col> </el-col>
<el-col :span="3" class="drawer-main-col"><em>答案</em></el-col> <el-col :span="24" style="padding: 4px" v-html="activeExam.workdescFormat">
<el-col :span="20" class="drawer-main-col" v-html="activeExam.workanswerFormat"></el-col> </el-col>
<el-col :span="3" class="drawer-main-col"><em>分析</em></el-col> <el-col :span="3" class="drawer-main-col"><em>答案</em></el-col>
<el-col :span="20" class="drawer-main-col" v-html="activeExam.method"></el-col> <el-col :span="20" class="drawer-main-col" v-html="activeExam.workanswerFormat"></el-col>
<el-col :span="3" class="drawer-main-col"><em>解答</em></el-col> <el-col :span="3" class="drawer-main-col"><em>分析</em></el-col>
<el-col :span="20" class="drawer-main-col" v-html="activeExam.analyse"></el-col> <el-col :span="20" class="drawer-main-col" v-html="activeExam.method"></el-col>
<el-col :span="3" class="drawer-main-col" ><em>点评</em></el-col> <el-col :span="3" class="drawer-main-col"><em>解答</em></el-col>
<el-col :span="20" class="drawer-main-col" v-html="activeExam.discuss"></el-col> <el-col :span="20" class="drawer-main-col" v-html="activeExam.analyse"></el-col>
</el-row> <el-col :span="3" class="drawer-main-col" ><em>点评</em></el-col>
<el-col :span="20" class="drawer-main-col" v-html="activeExam.discuss"></el-col>
</el-row>
</el-scrollbar>
</div>
<div class="drawer-footer">
<el-button type="primary" @click="activeExamInfoDrawer = false">关闭</el-button>
</div>
</el-drawer> </el-drawer>
</template> </template>
@ -89,13 +96,17 @@ const showExamAnalyseDrawer = (row) => {
.drawer-main{ .drawer-main{
margin: 1%; margin: 1%;
padding: 1% 2%; padding: 2%;
border: 2px dotted;
display: flex; display: flex;
text-align: left; text-align: left;
.drawer-main-col{ .drawer-main-col{
padding: 10px 0px; padding: 10px 0px;
} }
} }
.drawer-footer{
padding-top: 15px;
display: flex;
justify-content: flex-end;
box-sizing: border-box;
}
</style> </style>

View File

@ -14,7 +14,7 @@
</template> </template>
</el-popover> </el-popover>
<div style="margin-top: 7px">&nbsp;&nbsp;<el-icon><ArrowRight /></el-icon>&nbsp;&nbsp;</div> <div style="margin-top: 7px">&nbsp;&nbsp;<el-icon><ArrowRight /></el-icon>&nbsp;&nbsp;</div>
<el-popover disabled placement="top-start" title="考点分析" trigger="hover" content="勾画、圈点,添加标记等,整理出本课的重点与难点,用于老师讲解和学生自主预习"> <el-popover disabled placement="top-start" title="考点分析" trigger="hover" content="勾画、圈点,添加标记等,整理出本课的重点与难点,用于老师讲解和学生自主预习">
<template #reference> <template #reference>
<el-button-group> <el-button-group>
@ -24,7 +24,7 @@
</template> </template>
</el-popover> </el-popover>
<div style="margin-top: 7px">&nbsp;&nbsp;<el-icon><ArrowRight /></el-icon>&nbsp;&nbsp;</div> <div style="margin-top: 7px">&nbsp;&nbsp;<el-icon><ArrowRight /></el-icon>&nbsp;&nbsp;</div>
<el-popover disabled placement="top-start" title="模拟命题" trigger="hover" content="勾画、圈点,添加标记等,整理出本课的重点与难点,用于老师讲解和学生自主预习"> <el-popover disabled placement="top-start" title="模拟命题" trigger="hover" content="勾画、圈点,添加标记等,整理出本课的重点与难点,用于老师讲解和学生自主预习">
<template #reference> <template #reference>
<el-button-group> <el-button-group>
@ -51,15 +51,15 @@
<examReview <examReview
:loading="loading" :loading="loading"
:listExamQuestion="listExamQuestion" :listExamQuestion="listExamQuestion"
v-if="curTask.viewkey=='真题回顾' " v-if="curTask.viewkey=='真题回顾' "
/> />
<pointAnalysis <pointAnalysis
v-else-if="curTask.viewkey=='考点分析' " v-else-if="curTask.viewkey=='考点分析' "
/> />
<examMocks <examMocks
v-else v-else
/> />
</div> </div>
</div> </div>
@ -88,9 +88,9 @@ const sourceStore = useResoureStore();
const viewportHeight = ref(0); const viewportHeight = ref(0);
const viewportWidth = ref(0); const viewportWidth = ref(0);
// //
const curNode = ref({}); const curNode = ref({});
// //
const listExamQuestion = ref([]); const listExamQuestion = ref([]);
const loading = ref(false); const loading = ref(false);
const curTask = reactive({ const curTask = reactive({
viewkey: '真题回顾', viewkey: '真题回顾',
@ -299,4 +299,4 @@ onMounted(() => {
} }
</style> </style>
<style src="@/assets/styles/JYStyle.css"></style> <style src="@/assets/styles/JYStyle.css"></style>

View File

@ -98,7 +98,7 @@ import FileImage from '@/components/file-image/index.vue'
import { asyncLocalFile } from '@/utils/talkFile' import { asyncLocalFile } from '@/utils/talkFile'
import { toTimeText } from '@/utils/date' import { toTimeText } from '@/utils/date'
import { ElMessage, ElMessageBox } from 'element-plus' import { ElMessage, ElMessageBox } from 'element-plus'
import { deleteSmarttalk, updateSmarttalk, getPrepareById } from '@/api/file' import { deleteSmarttalk, updateSmarttalk, getPrepareById, getSmarttalkPage } from '@/api/file'
import useUserStore from '@/store/modules/user' import useUserStore from '@/store/modules/user'
import outLink from '@/utils/linkConfig' import outLink from '@/utils/linkConfig'
import { sessionStore } from '@/utils/store' import { sessionStore } from '@/utils/store'
@ -208,6 +208,7 @@ export default {
} }
if (action === 'cancel'){ if (action === 'cancel'){
// //
console.log(obj.bookImg)
if (obj.bookImg) { if (obj.bookImg) {
//PPT //PPT
listEntpcourse({ listEntpcourse({
@ -241,9 +242,20 @@ export default {
} }
}) })
}else { }else {
//APT console.log(obj)
this.$emit('on-start-class', item, obj) getSmarttalkPage({fileId: obj.entpcoursefileid}).then(res2=>{
done() console.log(res2)
//APT
if (res2&&res2.rows.length>0) {
this.$emit('on-start-class', res2.rows[0], obj)
}else {
ElMessage({
message: '该文件未关联PPT无法打开',
type: 'warning'
})
}
done()
})
} }
} }
if (action === 'close') { if (action === 'close') {

View File

@ -106,7 +106,7 @@
:item="item" :item="item"
:index="index" :index="index"
@on-set="openSet" @on-set="openSet"
@on-reSet="openReSet" @on-reSet="openReSet"
@on-delhomework="delhomework" @on-delhomework="delhomework"
> >
</file-list-item> </file-list-item>
@ -657,7 +657,7 @@ export default {
this.$refs['reservDialog'].openDialog() this.$refs['reservDialog'].openDialog()
}, },
// //
// handleOutLink(key) { // handleOutLink(key) {
// if (key == 'homeWork') { // if (key == 'homeWork') {
// this.isOpenHomework = true // this.isOpenHomework = true
@ -689,11 +689,11 @@ export default {
// //
goNewClassTask(){ goNewClassTask(){
// router.push({ path: '/newClassTask' }); // router.push({ path: '/newClassTask' });
this.$router.push({ this.$router.push({
path: '/newClassTask', path: '/newClassTask',
query: { query: {
isBack: true, isBack: true,
} }
}); });
}, },
getWeekday1(date) { getWeekday1(date) {
@ -730,7 +730,7 @@ export default {
} }
}); });
//--------------------- //---------------------
// //
// this.isOpenHomework = true; // this.isOpenHomework = true;
// // key linkConfig.js // // key linkConfig.js
// let configObj = outLink()['homeWork'] // let configObj = outLink()['homeWork']

View File

@ -128,7 +128,7 @@ const closeHomework = async() => {
const successHomework = (data)=>{ const successHomework = (data)=>{
// console.log('', data) // console.log('', data)
// im-(app|) // im-(app|)
ipcMsgInvoke('im-chat:msg', data, MsgEnum.HEADS.MSG_0016) // ipcMsgInvoke('im-chat:msg', data, MsgEnum.HEADS.MSG_0016)
} }
// change // change
const changeChapter = async (data)=>{ const changeChapter = async (data)=>{

View File

@ -12,7 +12,7 @@ const props = defineProps({
}) })
const imChatObj = reactive({imChat:null}) const imChatObj = reactive({imChat:null})
onMounted(() => { onMounted(() => {
ipcMainHandle() // -ipcMain im // ipcMainHandle() // -ipcMain im
}) })
// im-chat // im-chat
const initImChat = async (timGroupId) => { const initImChat = async (timGroupId) => {

View File

@ -105,7 +105,7 @@ const getClassInfo = async () => {
const chat = await imChatRef.value?.initImChat(timGroupId) // im-chat const chat = await imChatRef.value?.initImChat(timGroupId) // im-chat
if (!timGroupId) timGroupId = chat?.timGroupId if (!timGroupId) timGroupId = chat?.timGroupId
if (!timGroupId) return ElMessage.error('房间创建-失败') if (!timGroupId) return ElMessage.error('房间创建-失败')
classManageApi.startClass(classObj.id, timGroupId) // if (data.status != '上课中') classManageApi.startClass(classObj.id, timGroupId) //
} }
// tab-change // tab-change
const tabChange = (val) => { const tabChange = (val) => {
@ -158,7 +158,7 @@ const touchChange = (e) => {
const chatChange = (type, data, ...args) => { const chatChange = (type, data, ...args) => {
if (type == 'createGroup') { // - if (type == 'createGroup') { // -
console.log('创建群:', data) console.log('创建群:', data)
!!data && classManageApi.startClass(classObj.id, data) // !!data && classManageApi.startClass(classObj.id, data)
} else if (type == 'msg') { // im-chat } else if (type == 'msg') { // im-chat
if (!data) return // msg message_msg_id if (!data) return // msg message_msg_id
const msgId = (args||[])[0].message_msg_id const msgId = (args||[])[0].message_msg_id