Compare commits

..

11 Commits
baigl ... main

10 changed files with 264 additions and 692 deletions

View File

@ -62,12 +62,3 @@ export function updateClassworkdata(data) {
data: data data: data
}) })
} }
// 修改classwork
export function updateClasswork(data) {
return request({
url: '/education/classwork',
method: 'put',
data: data
})
}

View File

@ -115,7 +115,7 @@ const outerAi = [
title: '生成图片', title: '生成图片',
secondTit: '文生图大模型', secondTit: '文生图大模型',
img: new URL('../../../src/assets/images/ai-01.png', import.meta.url).href, img: new URL('../../../src/assets/images/ai-01.png', import.meta.url).href,
path: '/ais/aisd3' path: '/ais/aiwenxinyige'
}, },
{ {
id: 2, id: 2,

View File

@ -235,6 +235,7 @@ onMounted( async () => {
} }
else{ else{
curBook.data = useSubject.subjectList[0] curBook.data = useSubject.subjectList[0]
localStorage.setItem('curBook', JSON.stringify(curBook.data))
treeData.value = useSubject.treeData treeData.value = useSubject.treeData
} }
// //

View File

@ -65,7 +65,7 @@
<script setup> <script setup>
import { ref, watch, onMounted } from 'vue' import { ref, watch, onMounted } from 'vue'
import { useRouter } from 'vue-router' import { useRouter } from 'vue-router'
import { ElMessageBox } from 'element-plus' import { ElMessageBox, ElMessage } from 'element-plus'
import { ArrowDown } from '@element-plus/icons-vue' import { ArrowDown } from '@element-plus/icons-vue'
import WindowTools from '@/components/window-tools/index.vue' import WindowTools from '@/components/window-tools/index.vue'
import useUserStore from '@/store/modules/user' import useUserStore from '@/store/modules/user'
@ -74,6 +74,10 @@ import outLink from '@/utils/linkConfig'
import logoIco from '@/assets/images/logo.png' import logoIco from '@/assets/images/logo.png'
import { listEvaluation } from '@/api/classManage/index' import { listEvaluation } from '@/api/classManage/index'
import { clearBookInfo } from '@/utils/ruoyi' import { clearBookInfo } from '@/utils/ruoyi'
import { sessionStore } from '@/utils/store'
import { useToolState } from '@/store/modules/tool'
const toolState = useToolState();
let homeTitle = ref(import.meta.env.VITE_APP_TITLE) let homeTitle = ref(import.meta.env.VITE_APP_TITLE)
const { ipcRenderer } = window.electron || {} const { ipcRenderer } = window.electron || {}
const userStore = useUserStore() const userStore = useUserStore()
@ -166,6 +170,8 @@ function handleCommand(command) {
} }
function logout() { function logout() {
const hasClass = sessionStore.has('activeClass.id')
if (hasClass || toolState.isToolWin) return ElMessage.warning('当前正在上课,请先结结束上课')
ElMessageBox.confirm('确认退出系统吗?', '提示', { ElMessageBox.confirm('确认退出系统吗?', '提示', {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',

View File

@ -23,11 +23,12 @@ export const useToolState = defineStore('tool', {
}), }),
actions: { actions: {
async resetDef() { // 重置数据-下课 async resetDef() { // 重置数据-下课
this.model = 'select' // 悬浮球-当前模式 // this.model = 'select' // 悬浮球-当前模式
await sleep(20) // 休眠20ms await sleep(50) // 休眠50ms
this.showBoardAll = false // 全屏画板-是否显示 this.showBoardAll = false // 全屏画板-是否显示
await sleep(20) // 休眠20ms await sleep(50) // 休眠50ms
this.isToolWin = false // 工具窗口是否打开 this.isToolWin = false // 工具窗口是否打开
await sleep(50) // 休眠50ms
} }
} }
}) })

View File

@ -1,10 +1,8 @@
<template> <template>
<div class="page-typeview"> <div class="page-typeview flex">
<el-form ref="classWorkFormRef" :model="classWorkForm" label-width="90" style=" height: 100%;overflow: hidden;"> <el-form ref="classWorkForm" :model="classWorkForm" label-width="90" style="height: calc(100% - 55px);display: flex;flex-direction: column;">
<!-- 标题 --> <!-- 标题 -->
<div class="container"> <el-row>
<!-- 作业类型 -->
<el-row class="top">
<el-col :span="24"> <el-col :span="24">
<el-form-item label="作业类型:"> <el-form-item label="作业类型:">
<el-radio-group v-model="formType" @change="changeFormType"> <el-radio-group v-model="formType" @change="changeFormType">
@ -14,16 +12,11 @@
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> <el-col :span="24">
<!-- 作业资源 -->
<el-row class="middle">
<el-col :span="24" style="height: 100%; overflow: hidden;">
<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">
<!-- 习题训练 -->
<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;">
<!-- 习题筛选1 --> <el-row :gutter="10">
<el-row :gutter="10" class="top">
<el-col :span="6"> <el-col :span="6">
<el-form-item label="题型" label-width="70"> <el-form-item label="题型" label-width="70">
<el-select v-model="entpCourseWorkQueryParams.worktype" placeholder="请选择" > <el-select v-model="entpCourseWorkQueryParams.worktype" placeholder="请选择" >
@ -55,8 +48,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<!-- 习题筛选2 --> <el-row :gutter="10" style="margin-top: 4px">
<el-row :gutter="10" style="margin-top: 4px" class="top">
<el-col :span="6"> <el-col :span="6">
<el-form-item label="年份" label-width="70"> <el-form-item label="年份" label-width="70">
<el-select v-model="entpCourseWorkQueryParams.yearStr" placeholder="请选择" > <el-select v-model="entpCourseWorkQueryParams.yearStr" placeholder="请选择" >
@ -75,9 +67,8 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<!-- 习题表格 -->
<div class="middle" > <el-table :data="workResource.entpCourseWorkList" style="width: 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" >
<template #header> <template #header>
@ -102,9 +93,8 @@
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</div> <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"
@ -112,7 +102,7 @@
:total="entpCourseWorkTotal" :total="entpCourseWorkTotal"
:style="{ position: 'relative', 'margin-top': '5px' }" :style="{ position: 'relative', 'margin-top': '5px' }"
@pagination="getPaginationList" /> @pagination="getPaginationList" />
</div> --> </div>
</div> </div>
<!-- <div v-if="classWorkForm.worktype!='习题训练'"> <!-- <div v-if="classWorkForm.worktype!='习题训练'">
<div :style="{ 'overflow': 'auto'}"> <div :style="{ 'overflow': 'auto'}">
@ -196,8 +186,8 @@
</div> </div>
</div> --> </div> -->
</el-col> </el-col>
<el-col :span="9" class="work-right"> <el-col :span="8" style="padding: 0 0 0 5px;height: 60vh; overflow: auto; line-height: 26px">
<div v-if="classWorkForm.worktype=='习题训练'" :style="{height: '100%', 'overflow': 'auto', 'border':'1px dotted blue','border-radius':'5px', 'background-color': '#f7f7f7'}"> <div v-if="classWorkForm.worktype=='习题训练'" :style="{ 'overflow': 'auto', 'border':'1px dotted blue','border-radius':'5px', 'background-color': '#f7f7f7'}">
<template v-for="(item,index) in classWorkForm.quizlist" :key="item.id"> <template v-for="(item,index) in classWorkForm.quizlist" :key="item.id">
<div style="margin: 5px; background-color: white"> <div style="margin: 5px; background-color: white">
<div v-html="item.titleFormat" style="padding: 15px 20px 5px 20px"></div> <div v-html="item.titleFormat" style="padding: 15px 20px 5px 20px"></div>
@ -236,50 +226,25 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<!-- 作业说明 -->
<el-row class="bottom">
<el-col :span="12">
<el-form-item label="作业说明" style="margin: 10px 0;">
<el-col :span="15" style="padding: 0px">
<!-- <el-input v-model="classWorkForm.title" type="textarea" :rows="1" placeholder="请输入作业说明"/> -->
<el-input v-model="classWorkForm.title" style="width: 400px" placeholder="请输入作业说明"/>
</el-col>
</el-form-item>
</el-col>
<el-col :span="12">
<el-button type="primary" @click="handleClassWorkSave"> </el-button>
</el-col>
</el-row>
</div>
</el-form> </el-form>
</div> </div>
</template> </template>
<script setup> <script setup>
import { onMounted, ref, nextTick, watch, reactive, getCurrentInstance } from 'vue' import { onMounted, ref, toRaw,watch, reactive } from 'vue'
import { ElMessage } from 'element-plus'
import { useToolState } from '@/store/modules/tool' import { useToolState } from '@/store/modules/tool'
import { getCurrentTime } from '@/utils/date' import { getCurrentTime } from '@/utils/date'
import { processList } from '@/hooks/useProcessList' import { processList } from '@/hooks/useProcessList'
import {listEntpcoursework, listEntpcourseworkNew, getEntpcoursework} from '@/api/education/entpCourseWork' import {listEntpcoursework, listEntpcourseworkNew} from '@/api/education/entpCourseWork'
import { updateClasswork } from '@/api/classTask'
import { useGetHomework } from '@/hooks/useGetHomework'
import { addClassworkReturnId } from '@/api/teaching/classwork'
import useUserStore from '@/store/modules/user' import useUserStore from '@/store/modules/user'
const userStore = useUserStore().user const userStore = useUserStore().user
const { proxy } = getCurrentInstance()
const props = defineProps({ const props = defineProps({
bookobj: { bookobj: {
type: Object, type: Object,
default: () => ({}) default: () => ({})
}, },
uniquekey: {
type: String,
default: ''
}
}) })
@ -288,9 +253,7 @@ const toolStore = useToolState()
const openDialog = () => { const openDialog = () => {
isDialogOpen.value = true isDialogOpen.value = true
} }
const classWorkFormRef = ref(null);
const formType = ref('习题训练') const formType = ref('习题训练')
const newWorkSpaceEdit = ref(false); //
// --------------------------------------------------- // ---------------------------------------------------
const listWorkType = ref(['习题训练', '框架梳理', '课堂展示', '常规作业']); // const listWorkType = ref(['习题训练', '框架梳理', '课堂展示', '常规作业']); //
@ -355,17 +318,16 @@ const workResource = reactive({
quiztype: '', quiztype: '',
queryForm: {}, queryForm: {},
classWorkList: [], // classWorkList: [], //
entpCourseWorkList: [], // entpCourseWorkList: [],
entpCourseWorkTotal: 0, //
}); // }); //
let classWorkForm = reactive({ const classWorkForm = reactive({
uniquekey: props.uniquekey, //
worktype: '习题训练', // worktype: '习题训练', //
title: '',// // uniquekey: userStore.edusubject+'-' + getCurrentTime('MMDD')+'-'+(this.taskList.length+1),
quizlist: [], //
}); // })
const chooseWorkLists = ref([]); // ? list const entpCourseWorkList = ref([]); //
const whiteboardObj = ref(''); // - const entpCourseWorkTotal = ref(0); //
/*** /***
@ -373,7 +335,7 @@ const whiteboardObj = ref(''); // 作业资源 - 课堂展示 白板
*/ */
const changeFormType = (val) => { const changeFormType = (val) => {
console.log(val) console.log(val)
classWorkForm.worktype = val; classWorkForm.value.worktype = val;
} }
const queryForm = reactive({ const queryForm = reactive({
@ -410,7 +372,7 @@ const queryForm = reactive({
* 1 - 按条件查询 * 1 - 按条件查询
* 2 - 按关键词查询 * 2 - 按关键词查询
*/ */
const handleQueryFromEntpCourseWork= (queryType) => { const handleQueryFromEntpCourseWork= (queryType) => {
//queryForm.pageNum = this.paginationParams.pageNum; //queryForm.pageNum = this.paginationParams.pageNum;
//queryForm.pageSize = this.paginationParams.pageSize; //queryForm.pageSize = this.paginationParams.pageSize;
@ -420,6 +382,8 @@ const handleQueryFromEntpCourseWork= (queryType) => {
// queryForm.edusubject = ''; // queryForm.edusubject = '';
// } // }
console.log(queryForm)
listEntpcourseworkNew(queryForm).then(entpcourseworkres => { listEntpcourseworkNew(queryForm).then(entpcourseworkres => {
// if (queryType == 1 && this.entpCourseWorkQueryParams.worktype == '') { // if (queryType == 1 && this.entpCourseWorkQueryParams.worktype == '') {
// // , // // ,
@ -430,454 +394,55 @@ const handleQueryFromEntpCourseWork= (queryType) => {
// } else { // } else {
// workResource.entpCourseWorkList = entpcourseworkres.rows; // workResource.entpCourseWorkList = entpcourseworkres.rows;
// } // }
if(entpcourseworkres.data == null) {
if(entpcourseworkres.data&&entpcourseworkres.data.length>0){ workResource.entpCourseWorkList = [];
workResource.entpCourseWorkList = entpcourseworkres.data; entpCourseWorkTotal.value = 0
workResource.entpCourseWorkTotal = entpcourseworkres.data.length; return;
}
entpCourseWorkList.value = entpcourseworkres.data;
workResource.entpCourseWorkList.forEach(item=> { workResource.entpCourseWorkList.forEach(item=> {
if (item.worktype == '选择题') { if (item.worktype == '选择题') {
item.worktype = '单选题' item.worktype = '单选题'
} }
}) })
//
entpCourseWorkTotal.value = 0;
if (entpcourseworkres.data.length > 0) {
entpCourseWorkTotal.value = entpcourseworkres.data.length;
}
// //
processList(workResource.entpCourseWorkList); processList(workResource.entpCourseWorkList);
}else{
workResource.entpCourseWorkList = [];
workResource.entpCourseWorkTotal = 0
}
}) })
} }
/**
* 添加资源
* @param fromsrc - 试题来源
* @param entpcourseworkid
*/
const handleClassWorkQuizAdd = (fromsrc, entpcourseworkid) => {
var exist = false;
for (var i=0; i< classWorkForm.quizlist.length; i++) {
if (classWorkForm.quizlist[i].id == entpcourseworkid) {
exist = true;
break;
}
}
if (exist == false) {
getEntpcoursework(entpcourseworkid).then(res => {
//res.data.titletext = res.data.title.replace(/<[^>]+>/g, '');
//
if(res.data.score == null){
res.data.score = 4;
}
classWorkForm.quizlist.push(res.data);
//
processList(classWorkForm.quizlist);
})
} else {
ElMessage('试题已经存在')
}
};
/**
* 作业设计-提交
*/
const handleClassWorkSave = async () => {
await nextTick(); // DOM
proxy.$refs["classWorkFormRef"].validate(async valid => {
if (valid) {
if (classWorkForm.id != null) {
// []
updateClasswork(classWorkForm).then(response => {
ElMessage("修改成功");
// this.workConfDialogOpen = false;
//
// this.getClassWorkAllList(); //
});
} else {
// [] newWorkSpaceEdit true
if(newWorkSpaceEdit.value ) {
// 0.
if (this.currentTag == '习题训练') {
if (this.classWorkForm.quizlist.length == 0) {
ElMessage.error('请先添加作业资源!');
return;
}
}
else if (this.currentTag == '课堂展示' || this.currentTag == '常规作业') {
//
}
else {
if (this.chooseWorkLists.length == 0) {
ElMessage.error('请先添加作业资源!');
return;
}
}
//
let classWorkParams = {
id: this.currentTask.id,
uniquekey: this.classWorkForm.uniquekey, // []
//title: classWorkForm.title, // []
}
//
if (this.currentTag=='习题训练'){
// console.log(this.workConfObj.quizlist);
// console.log(this.currentTask);
// console.log(this.classWorkList);
// 1.
let needUplEval = false;
if (this.classWorkForm.quizlist.length !== this.currentTask.entpcourseworklistarray.length) {
needUplEval = true;
}
else {
//
// for (let cur of this.classWorkForm.quizlist){
// let isSame = false;
// for (let last of this.currentTask.entpcourseworklistarray) {
// if (last.id === cur.id && last.score === cur.score){
// isSame = true;
// break;
// }
// }
// if (!isSame) {
// needUplEval = true;
// break;
// }
// }
needUplEval = this.classWorkForm.quizlist.some(cur =>
!this.currentTask.entpcourseworklistarray.some(last =>
last.id === cur.id && last.score === cur.score
)
);
}
// 2.eval
if (needUplEval) {
// : , ,
// 2.1.workidid
let arrEvalids = [];
const wevalres = await listClassworkeval({'workid': this.currentTask.id});
wevalres.rows.forEach(element => {
arrEvalids.push(element.id);
});
const ids = arrEvalids.join(',');
// 2.2.
const delRes = await delClassworkeval(ids);
// 2.3.
for(let i=0; i<this.classWorkForm.quizlist.length; i++){
const addRes = await addClassworkeval({
'workid': this.currentTask.id,
'entpcourseworkid': this.classWorkForm.quizlist[i].id,
'workdataid': 0,
'score': this.classWorkForm.quizlist[i].score}
);
}
}
// 3.
// const evalid = this.homeworkLesson.length==0 ? '' : this.homeworkLesson.length==1 ? this.homeworkLesson[0] : this.homeworkLesson[1];
// const formObj = {
// id: this.currentTask.id,
// uniquekey: this.classWorkForm.uniquekey, // []
// // warn:
// //evalid = evalid, // []
// }
// let res = await updateClasswork(formObj);
}
else if (this.currentTag=='框架梳理') {
// 1.workidid
const wevalres = await listClassworkeval({'workid': this.currentTask.id});
if (wevalres.rows.length == 0) {
ElMessage.error('未找到原框架梳理任务,请或退出重试');
return;
}
// 2.
let needUplEval = false;
if (this.chooseWorkLists.length !== this.currentTask.entpcourseworklistarray.length) {
needUplEval = true;
}
else {
//
needUplEval = this.chooseWorkLists.some(cur =>
!this.currentTask.entpcourseworklistarray.some(last =>
last.id === cur.id && last.score === cur.score
)
);
}
if (needUplEval) {
const uplParams = {
id: wevalres.rows[0].id,
entpcourseworkid: this.chooseWorkLists[0].id,
score: this.chooseWorkLists[0].score,
}
let res = await updateClassworkeval(uplParams);
}
}
else if (this.currentTag=='课堂展示') {
}
else if (this.currentTag=='常规作业') {
// 1. (, )
classWorkParams.workcodes = JSON.stringify(this.fileHomeworkList);
}
// 3.
let res = await updateClasswork(classWorkParams);
this.fileHomeworkList = [];
this.chooseWorkLists = [];
// 4.
//
// this.getClassWorkAllList();
this.classWorkForm.worktype = "习题训练";
this.newWorkSpace = false;
this.newWorkSpaceEdit = false;
this.workEdit = false;
return;
}
//
const { chapterId } = await useGetHomework(props.bookobj.node)
// this.entpcourseid = chapterId
if (classWorkForm.worktype === "课堂展示") {
this.boardLoading = true
let canvasJson = this.$refs.boardref.getCanvasJson()
let canvasBase64 = await this.$refs.boardref.getCanvasBase64()
var formObj = {};
formObj.id = 0;
formObj.workdate = this.classWorkForm.workdate;
formObj.deaddate = '';
formObj.entpid = this.userStore.deptId;
formObj.level = 1;
formObj.parentid = 0;
formObj.worktype = this.classWorkForm.worktype;
formObj.workkey = '';
formObj.worktag = this.question;
formObj.uniquekey = this.classWorkForm.uniquekey;
formObj.classid = 0;
formObj.classcourseid = 0;
formObj.entpcourseid = chapterId;//
formObj.slideid = 0;
formObj.title = this.classWorkForm.title;
formObj.workcodes = JSON.stringify({json: canvasJson, base64: canvasBase64});
formObj.edusubject = this.courseObj.edusubject;
formObj.evalid = this.courseObj.evalid;
formObj.edustage = this.userStore.edustage;
formObj.status = '10'; //2024-09-11
formObj.edituserid = this.userStore.id;
formObj.entpcourseworklist = JSON.stringify([{'id':-1, 'score': '10'}]);
try {
addClassworkReturnId(formObj).then(() => {
this.classWorkForm.worktype = "习题训练";
this.chooseWorkLists = [];
this.whiteboardObj = '';
// refresh the list
//
// this.getClassWorkAllList();
this.newWorkSpace = false;
this.newWorkSpaceEdit = false;
this.workEdit = false;
})
} finally {
this.boardLoading = false
}
}
else if(classWorkForm.worktype === "常规作业"){
this.fileLoading = true
var formObj = {};
formObj.id = 0;
formObj.workdate = this.classWorkForm.workdate;
formObj.deaddate = '';
formObj.entpid = this.userStore.deptId;
formObj.level = 1;
formObj.parentid = 0;
formObj.worktype = this.classWorkForm.worktype;
formObj.workkey = '';
formObj.worktag = '';
formObj.uniquekey = this.classWorkForm.uniquekey;
formObj.classid = 0;
formObj.classcourseid = 0;
formObj.entpcourseid = this.courseObj.id;
formObj.slideid = 0;
formObj.title = this.classWorkForm.title;
formObj.workcodes = JSON.stringify(this.fileHomeworkList);
formObj.edusubject = this.courseObj.edusubject;
formObj.evalid = this.courseObj.evalid;
formObj.edustage = this.userStore.edustage;
formObj.status = '10'; //2024-09-11
formObj.edituserid = this.userStore.id;
formObj.entpcourseworklist = JSON.stringify([{'id':-2, 'score': '10'}]);
try {
addClassworkReturnId(formObj).then(() => {
this.classWorkForm.worktype = "习题训练";
this.chooseWorkLists = [];
this.fileHomeworkList = []
this.whiteboardObj = '';
// refresh the list
//
// this.getClassWorkAllList();
this.newWorkSpace = false;
this.newWorkSpaceEdit = false;
this.workEdit = false;
})
} finally {
this.fileLoading = false
}
}
else {
//
var ll = [];
if (classWorkForm.worktype === "习题训练") {
for (var i=0; i< classWorkForm.quizlist.length; i++) {
//
ll.push({'id': classWorkForm.quizlist[i].id, 'score': classWorkForm.quizlist[i].score});
}
}else {
// TODO ------------
// this.chooseWorkLists.filter((item, index) => {
// if (item.worktype === this.classWorkForm.worktype) {
// ll.push({'id':item.id, 'score': item.score});
// }
// })
}
console.log(userStore,'userStoreuserStoreuserStore')
const cform = {
id: 0,
workdate: classWorkForm.workdate, // //web
deaddate: '', //
entpid: userStore.deptId, //
level: 1,
parentid: 0,
worktype: classWorkForm.worktype, //
workkey: '',
worktag: '',
uniquekey: classWorkForm.uniquekey,//
classid: 0,
classcourseid: 0,
entpcourseid: chapterId, //
slideid: 0,
title: classWorkForm.title, //
workcodes: JSON.stringify(classWorkForm.workcodes), //
edusubject: userStore.edusubject, //
evalid: props.bookobj.levelSecondId, //userStore.evalid, // // ID
edustage: userStore.edustage, // ,,
status: '10', //2024-09-11
edituserid: userStore.userId, // id
};
if (ll.length > 0) {
cform.entpcourseworklist = JSON.stringify(ll);
} else {
cform.entpcourseworklist = '';
}
if(cform.entpcourseworklist == '') return ElMessage({ type: 'warning', message: '请先添加作业资源!'});
console.log(cform,'提交的数据');
addClassworkReturnId(cform).then(workres => {
ElMessage({ type: 'success', message: '作业设计成功!'});
//
classWorkForm.worktype = "习题训练";
classWorkForm.uniquekey = props.uniquekey, //
classWorkForm.title = "";
classWorkForm.quizlist = [], //
//
chooseWorkLists.value = [];
whiteboardObj.value = ''; // ? //
// refresh the list
//
// this.getClassWorkAllList();
// TODO
//TODO 3
// this.newWorkSpace = false;
// this.newWorkSpaceEdit = false;
// this.workEdit = false;
})
}
}
}
});
};
onMounted(() => { onMounted(() => {
})
watch(() => props.bookobj.levelSecondId, (newVal) => {
console.log(props.bookobj,'课程选择')
queryForm.eid = props.bookobj.levelSecondId,
queryForm.sectionName = props.bookobj.coursetitle,
handleQueryFromEntpCourseWork(0); handleQueryFromEntpCourseWork(0);
}) })
// watch(() => sourceStore.query.fileSource,() => {
// sourceStore.query.fileSource === ''?isThird.value = true:isThird.value = false
// })
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.page-typeview{ .page-typeview{
// padding-top: 10px; padding-top: 10px;
height: 100%; height: 100%;
.container {
display: flex;
flex-direction: column;
height: 100%;
}
.top, .bottom {
flex: 0 0 auto;
}
.middle {
flex: 1;
height: 100%;
overflow: hidden;
}
.el-form-work-list{ .el-form-work-list{
height: 100%;
margin-bottom: 0px;
overflow: hidden;
:deep(.el-form-item__content){ :deep(.el-form-item__content){
align-items: normal; align-items: normal;
} }
.work-left{ .work-left{
height: 100%; height: 50vh;
background-color: white; background-color: white;
padding-right: 0; padding-right: 0;
padding-left: 0; padding-left: 0;
border:1px dotted blue; border:1px dotted blue;
border-radius:5px; border-radius:5px;
overflow: hidden;
}
.work-right {
height: 100%;
padding: 0 0 0 5px;
overflow: auto;
line-height: 26px;
overflow: hidden;
} }

View File

@ -1,19 +1,19 @@
<template> <template>
<div class="page-newcalsetask flex"> <div class="page-resource flex">
<el-menu <el-menu
default-active="1" default-active="1"
class="el-menu-vertical-demo" class="el-menu-vertical-demo"
:collapse="isCollapse" :collapse="isCollapse"
> >
<!--左侧 教材 目录--> <!--左侧 教材 目录-->
<div v-if="!isCollapse" style="height: 100%;overflow: hidden;"> <div v-if="!isCollapse">
<ChooseTextbook @change-book="getData" @node-click="getData" /> <ChooseTextbook @change-book="getData" @node-click="getData" />
</div> </div>
</el-menu> </el-menu>
<div class="page-right" :style="{'margin-left': isCollapse ? '0' : '20px'}"> <div class="page-right" :style="{'margin-left': isCollapse ? '0' : '20px'}">
<!-- 标题 --> <!-- 标题 -->
<el-row style="align-items: center; margin-bottom: 0px; flex: 0 0 auto"> <el-row style="align-items: center; margin-bottom: 0px">
<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"></i> <i v-if="!isCollapse" class="iconfont icon-xiangzuo"></i>
@ -30,7 +30,7 @@
</el-col> </el-col>
</el-row> </el-row>
<!-- 作业类型:内容 --> <!-- 作业类型:内容 -->
<task-type-view :bookobj="courseObj" :uniquekey="classWorkForm.uniquekey" style="flex: 1; overflow: hidden;"/> <task-type-view :bookobj="courseObj" />
</div> </div>
</div> </div>
</template> </template>
@ -72,7 +72,6 @@ const courseObj = reactive({
levelFirstId: '', levelFirstId: '',
levelSecondId: '', levelSecondId: '',
coursetitle:'', coursetitle:'',
node: null, //
// //
}) })
@ -96,7 +95,6 @@ const getData = (data) => {
courseObj.levelFirstId = levelFirstId // courseObj.levelFirstId = levelFirstId //
courseObj.levelSecondId = levelSecondId // courseObj.levelSecondId = levelSecondId //
courseObj.coursetitle = node.itemtitle // (/) courseObj.coursetitle = node.itemtitle // (/)
courseObj.node = node; //
// ID // ID
localStorage.setItem('unitId', JSON.stringify({ levelFirstId, levelSecondId})) localStorage.setItem('unitId', JSON.stringify({ levelFirstId, levelSecondId}))
@ -118,10 +116,9 @@ const init = () => {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.page-newcalsetask { .page-resource {
padding-top: 10px; padding-top: 10px;
height: 100%; height: 100%;
overflow: hidden;
.el-menu--collapse { .el-menu--collapse {
width: 0px; width: 0px;

View File

@ -106,9 +106,9 @@ const menuList = [{
{ {
name: '作业设计', name: '作业设计',
icon: 'icon-jiaoxuefansi', icon: 'icon-jiaoxuefansi',
// isOuter: true, isOuter: true,
//path: '/teaching/classtaskassign?titleName=&openDialog=newClassTask' path: '/teaching/classtaskassign?titleName=作业布置&openDialog=newClassTask'
path: '/newClassTask' //path: '/newClassTask'
//path: '/classTaskAssign' //path: '/classTaskAssign'
//isOuter: true, //isOuter: true,
//path: '/teaching/classtaskassign?titleName=&&openDialog=newClassTask' //path: '/teaching/classtaskassign?titleName=&&openDialog=newClassTask'

View File

@ -243,6 +243,7 @@ const sideChange = async o => {
// === === // === ===
watchEffect(() => { watchEffect(() => {
if (isOver.value) return // ,
// , : - // , : -
const show = !toolStore.isPdfWin && toolStore.showBoardAll const show = !toolStore.isPdfWin && toolStore.showBoardAll
if (show != isShow.value) isShow.value = show if (show != isShow.value) isShow.value = show

View File

@ -1,9 +1,15 @@
<template> <template>
<canvas ref="canvasRef" /> <canvas ref="canvasRef" style="pointer-events: none;" />
<button @click="eraseTo">橡皮擦 <div style="position: absolute;top: 0;" @click="test('click')"
<i class="iconfont icon-xiangpica"></i> @mouseenter="test('mouseenter')" @mousemove="test('mousemove')" @mouseleave="test('mouseleave')"
</button> @touchstart="test('touchstart')" @touchmove="test('touchmove')" @touchend="test('touchend')"
<button @click="close">销毁</button> @touchcancel="test('touchcancel')" @mousedown="test('mousedown')" @mouseup="test('mouseup')"
@mouseout="test('mouseout')" @mouseover="test('mouseover')" @mousewheel="test('mousewheel')">
<!-- <button @click="eraseTo">橡皮擦</button> -->
<!-- <i class="iconfont icon-xiangpica"></i> -->
<!-- <button @click="close">销毁</button> -->
<div style="width: 100px;height: 100px;background: #ffbcbc;">小星星</div>
</div>
</template> </template>
<script setup> <script setup>
@ -43,6 +49,10 @@ const eraseTo = () => { // 橡皮擦
// canvas.dispose() // canvas.dispose()
} }
const close = () => { FabricVue.removeCanvas() } const close = () => { FabricVue.removeCanvas() }
const test = (key, e) => {
console.log('event: ', key)
}
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>