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

Reviewed-on: #325
This commit is contained in:
baigl 2024-10-17 10:44:08 +08:00
commit add2a3e621
9 changed files with 584 additions and 760 deletions

View File

@ -62,8 +62,8 @@ const props = defineProps({
entpcourseid: {
default: ''
},
row: {
default: ''
rows: {
default: []
},
title: {
type: String,
@ -225,32 +225,34 @@ const onSubmit = (formEl) => {
let ary = []
for (const value in gradeObj) {
// AIx web
let obj = {
id: 0,
parentid: props.row.id,
classid: value,
classcourseid: 0, // id-ppt使
classReservId: classRoomId, // id
entpcourseid: props.entpcourseid,
studentlist: JSON.stringify(gradeObj[value]),
feedback: form.feedback,
workkey: '',
timelength: form.timelength,
weights: 1,
deaddate: form.deaddate,
workdate: getCurrentTime('YYYY-MM-DD'),
uniquekey: props.row.uniquekey,
entpcourseworklist: '[' + props.row.entpcourseworklist + ']',
needMsgNotifine: 'false',
msgkey: 'newclasswork',
title: '作业任务',
msgcontent: '',
teachername: userInfo.nickName,
unixstamp: new Date().getTime(),
worktype: props.row.worktype,
status: '1'
for (var i = 0; i < props.rows.length; i++) {
let obj = {
id: 0,
parentid: props.rows[i].id,
classid: value,
classcourseid: 0, // id-ppt使
classReservId: classRoomId, // id
entpcourseid: props.entpcourseid,
studentlist: JSON.stringify(gradeObj[value]),
feedback: form.feedback,
workkey: '',
timelength: form.timelength,
weights: 1,
deaddate: form.deaddate,
workdate: getCurrentTime('YYYY-MM-DD'),
uniquekey: props.rows[i].uniquekey,
entpcourseworklist: '[' + props.rows[i].entpcourseworklist + ']',
needMsgNotifine: 'false',
msgkey: 'newclasswork',
title: '作业任务',
msgcontent: '',
teachername: userInfo.nickName,
unixstamp: new Date().getTime(),
worktype: props.rows[i].worktype,
status: '1'
}
ary.push(obj)
}
ary.push(obj)
}
setLoading.value = true
saveByClassWorkArray({
@ -284,8 +286,9 @@ const cloneDialog = (formEl) => {
}
onMounted(() => {
//
form.deaddate = getCurrentTime('YYYY-MM-DD HH:mm')
// 3
// form.deaddate = getCurrentTime('YYYY-MM-DD HH:mm')
form.deaddate = `${getCurrentTime('YYYY-MM-DD')} ${getCurrentTime('HH+3')}:${getCurrentTime('mm')}`;
})
</script>

View File

@ -0,0 +1,117 @@
import { listEntpcoursework,getEvaluationclue } from '@/api/classTask';
import { processList } from '@/hooks/useProcessList';
const isJson = (str) => {
if (typeof str == 'string') {
try {
let obj = JSON.parse(str)
if (typeof obj == 'object' && obj) {
return true
} else {
return false
}
} catch (e) {
return false
}
}
}
/**
* @description 编辑作业配置
* @param {*} row
*/
export const editListItem = (row, courseObj) => {
return new Promise((resolve, reject) => {
// 作业内容编辑-跳转到设计界面-传参
let classtaskObj = {
id: '', //
bookName: '', // 课程名称
uniquekey: '', // 设计中的标题
title: '', // 设计中的说明
worktype: '', // 设计中的作业类型
quizlist: [], // 设计中的试题列表
chooseWorkLists: [],// 设计中的框架梳理list
fileHomeworkList: [],// 设计中的常规作业list
whiteboardObj: '',// 设计中的课堂展示对象
};
console.log('编辑的行', row);
//重新更新[新任务]中右侧列表数据
var listCourseWork = [];
for (var i=0; i < row.entpcourseworklistarray.length; i++) {
listCourseWork.push(row.entpcourseworklistarray[i]);
}
if (listCourseWork.length > 0) {
classtaskObj.id= row.id; //
classtaskObj.bookObj = courseObj; // 教材对象
classtaskObj.bookName = row.evaltitle? row.evalparenttitle? row.evalparenttitle+'/'+row.evaltitle : row.evaltitle: row.evalparenttitle// 课程名称:单元/章节: 单元
classtaskObj.uniquekey= row.uniquekey; // 设计中的标题
classtaskObj.title= row.title; // 设计中的说明
classtaskObj.worktype= row.worktype; // 设计中的作业类型
classtaskObj.quizlist= []; // 设计中的试题列表
classtaskObj.chooseWorkLists = []; //设计中的 框架梳理list
classtaskObj.fileHomeworkList = []; //设计中的 常规作业list
classtaskObj.whiteboardObj = ''; //设计中的 课堂展示对象
if (row.worktype == '框架梳理') {
// 框架梳理对应只有一个内容
getEvaluationclue(listCourseWork[0].id).then(res => {
if ( res.data==null || res.data==undefined ) {
return ;
}
res.data.worktype = '框架梳理';
res.data.score = listCourseWork[0].score;
classtaskObj.chooseWorkLists.push(res.data);
//
// console.log('框架梳理', classtaskObj);
return resolve(classtaskObj);
});
}
else if (row.worktype == '习题训练') {
const ids = listCourseWork.map(item => item.id).join(",");
listEntpcoursework({ids: ids, pageSize: 50}).then(idres => {
// for (var i=0; i<idres.rows.length; i++) {
// idres.rows[i].titletext = idres.rows[i].title.replace(/<[^>]+>/g, '');
// }
// 格式化试题
if(idres.rows&&idres.rows.length > 0){
processList(idres.rows);
//重新将task中的分值更新
row.entpcourseworklistarray.forEach(item => {
const quizItem = idres.rows.find(quiz => quiz.id === item.id);
if (quizItem) {
quizItem.score = item.score;
quizItem.scoreOrigin = item.score;
}
});
classtaskObj.quizlist = idres.rows;
//
// console.log('习题训练', classtaskObj);
return resolve(classtaskObj);
}
})
}
else if (row.worktype == '课堂展示') {
console.log('row.课堂展示', row.workcodes);
const workcodes = JSON.parse(row.workcodes);
classtaskObj.whiteboardObj = JSON.stringify(workcodes.json);
//
// console.log('课堂展示', classtaskObj);
return resolve(classtaskObj);
}
else if (row.worktype == '常规作业') {
if(isJson(row.workcodes)){
classtaskObj.fileHomeworkList = JSON.parse(row.workcodes);
//
// console.log('常规作业', classtaskObj);
return resolve(classtaskObj);
}
}
}
});
}

View File

@ -71,6 +71,7 @@ const getHomeWorkList = async () => {
return await homeworklist({
entpcourseid: chapterId,
edituserid: userStore.user.userId,
orderby: "timestamp DESC",
pageSize: 100,
status: '10'
}).then((res) => {
@ -79,7 +80,25 @@ const getHomeWorkList = async () => {
for (var i = 0; i < res.rows.length; i++) {
res.rows[i].taskconfig = []
// 找child
// 处理任务类型的UI
// if (res.rows[i].worktype == '学习目标定位') {
// res.rows[i].workclass = 'success';
// res.rows[i].workcodesList = JSON.parse(res.rows[i].workcodes);
// } else
// 课标研读 目标设定 教材研读 框架梳理 学科定位 TODO 后续接入在添加
if (res.rows[i].worktype == '课堂展示') {
res.rows[i].workclass = 'primary';
} else if (res.rows[i].worktype == '框架梳理') {
res.rows[i].workclass = 'warning';
} else if (res.rows[i].worktype == '常规作业') {
res.rows[i].workclass = 'info';
} else if (res.rows[i].worktype == '习题训练') {
res.rows[i].workclass = 'danger';
} else {
res.rows[i].workclass = 'primary';
}
// 找child
for (var j = 0; j < res.rows.length; j++) {
if (res.rows[j].parentid == res.rows[i].id) {
var ss = []

File diff suppressed because it is too large Load Diff

View File

@ -125,7 +125,7 @@ onMounted(() => {
watch(() => props.bookobj.levelSecondId, (newVal) => {
console.log(props.bookobj,'课程选择')
// console.log(props.bookobj,'')
})

View File

@ -113,17 +113,17 @@ const menuList = [{
{
name: '作业设计',
icon: '#icon-zuoyesheji',
isOuter: true,
path: '/teaching/classtaskassign?titleName=作业布置&openDialog=newClassTask',
// path: '/newClassTask',
// isOuter: true,
// path: '/teaching/classtaskassign?titleName=&openDialog=newClassTask',
path: '/newClassTask',
id: '2-1'
},
{
name: '作业布置',
icon: '#icon-zuoyebuzhi',
isOuter: true,
path: '/teaching/classtaskassign?titleName=作业布置',
// path: '/classTaskAssign',
// isOuter: true,
// path: '/teaching/classtaskassign?titleName=',
path: '/classTaskAssign',
id: '2-2'
},
{

View File

@ -22,7 +22,8 @@
<div class="prepare-item-info-message">
<div style="width: 60px">
<template v-if="item.uniquekey">
{{ item.worktype }}
<!-- {{ item.worktype }} -->
<el-tag :type="item.workclass" size="large">{{ item.worktype }}</el-tag>
</template>
<template v-else>
<el-icon

View File

@ -95,7 +95,8 @@
<div class="prepare-body-header">
<div>
<label style="font-size: 15px">{{ currentWorkList.length }}个作业</label>&nbsp;
<el-button size="small" @click="handleOutLink('homeWork')">作业设计</el-button>
<!-- <el-button size="small" @click="handleOutLink('homeWork')">作业设计</el-button> -->
<el-button size="small" @click="goNewClassTask()">作业设计</el-button>
</div>
</div>
<div class="prepare-work-wrap">
@ -105,7 +106,7 @@
:item="item"
:index="index"
@on-set="openSet"
@on-reSet="openReSet"
@on-reSet="openReSet"
@on-delhomework="delhomework"
>
</file-list-item>
@ -126,7 +127,7 @@
</div>
<MoveFile v-model="isMoveDialogOpen" @on-submit="chooseMoveCata" />
<uploadDialog v-model="isDialogOpen" @submit-file="submitFile" />
<SetHomework v-model="setDialog" :entpcourseid="entpcourseid" :row="row" />
<SetHomework v-model="setDialog" :entpcourseid="entpcourseid" :rows="rows" />
</div>
<reserv
ref="reservDialog"
@ -171,6 +172,7 @@ import { delClasswork, listEntpcourse } from '@/api/teaching/classwork'
import { updateClasscourse } from '@/api/teaching/classcourse'
import { getClassInfo, getSelfReserv, endClass } from '@/api/classManage'
import { useGetHomework } from '@/hooks/useGetHomework'
import { editListItem } from '@/hooks/useClassTask'
import { addEntpcoursefileReturnId } from '@/api/education/entpcoursefile'
import ClassReserv from '@/views/classManage/classReserv.vue'
import classStart from './container/class-start.vue' //
@ -229,7 +231,7 @@ export default {
entpcourseid: '',
//
setDialog: false,
row: '',
rows: '',
isOpenHomework: false,
//
activeClass: null,
@ -655,34 +657,39 @@ export default {
this.$refs['reservDialog'].openDialog()
},
//
handleOutLink(key) {
if (key == 'homeWork') {
this.isOpenHomework = true
}
// key linkConfig.js
let configObj = outLink()[key]
let fullPath = configObj.fullPath
// urlunitId ID
if (key != 'standard' && key != 'aiModel') {
let unitId = this.uploadData.levelSecondId
? this.uploadData.levelSecondId
: this.uploadData.levelFirstId
let bookId = this.uploadData.textbookId;
if(fullPath.indexOf('?') == -1){
fullPath += `?unitId=${unitId}&bookId=${bookId}&openDialog=newClassTask`
}
else{
fullPath += `&unitId=${unitId}&bookId=${bookId}&openDialog=newClassTask`
}
}
//
// handleOutLink(key) {
// if (key == 'homeWork') {
// this.isOpenHomework = true
// }
// // key linkConfig.js
// let configObj = outLink()[key]
// let fullPath = configObj.fullPath
// // urlunitId ID
// if (key != 'standard' && key != 'aiModel') {
// let unitId = this.uploadData.levelSecondId
// ? this.uploadData.levelSecondId
// : this.uploadData.levelFirstId
// let bookId = this.uploadData.textbookId;
// if(fullPath.indexOf('?') == -1){
// fullPath += `?unitId=${unitId}&bookId=${bookId}&openDialog=newClassTask`
// }
// else{
// fullPath += `&unitId=${unitId}&bookId=${bookId}&openDialog=newClassTask`
// }
// }
//
ipcRenderer.send('openWindow', {
key,
fullPath: fullPath,
cookieData: { ...configObj.data }
})
// //
// ipcRenderer.send('openWindow', {
// key,
// fullPath: fullPath,
// cookieData: { ...configObj.data }
// })
// },
//
goNewClassTask(){
// router.push({ path: '/newClassTask' });
this.$router.push({ path: '/newClassTask' });
},
getWeekday1(date) {
const weekdays = ['周日', '周一', '周二', '周三', '周四', '周五', '周六']
@ -691,29 +698,51 @@ export default {
},
//
openSet(row) {
this.row = row
// row list
this.rows = [row]
this.setDialog = true
},
//
openReSet(row) {
//
this.isOpenHomework = true;
// key linkConfig.js
let configObj = outLink()['homeWork']
let fullPath = configObj.fullPath
//
const courseObj = {
textbookId: this.uploadData.textbookId,
levelFirstId: this.uploadData.levelFirstId,
levelSecondId: this.uploadData.levelSecondId,
coursetitle: this.currentNode.itemtitle, // (/) ,
node: this.currentNode, //
}
console.log('courseObj', courseObj)
editListItem(row, courseObj).then((obj) => {
if(obj){
//
this.$router.push({
path: '/newClassTask',
query: {
classtaskObj: JSON.stringify(obj),
}
})
}
});
//---------------------
//
// this.isOpenHomework = true;
// // key linkConfig.js
// let configObj = outLink()['homeWork']
// let fullPath = configObj.fullPath
let unitId = this.uploadData.levelSecondId
? this.uploadData.levelSecondId
: this.uploadData.levelFirstId
let bookId = this.uploadData.textbookId;
fullPath += `&unitId=${unitId}&bookId=${bookId}&courseWorkId=${row.id}`
// let unitId = this.uploadData.levelSecondId
// ? this.uploadData.levelSecondId
// : this.uploadData.levelFirstId
// let bookId = this.uploadData.textbookId;
// fullPath += `&unitId=${unitId}&bookId=${bookId}&courseWorkId=${row.id}`
//
ipcRenderer.send('openWindow', {
key: 'homeWork',
fullPath: fullPath,
cookieData: { ...configObj.data }
})
// //
// ipcRenderer.send('openWindow', {
// key: 'homeWork',
// fullPath: fullPath,
// cookieData: { ...configObj.data }
// })
},
//
delhomework(item) {

View File

@ -47,7 +47,7 @@
</div>
</div>
</div>
<el-button color="#349d44" @click="sendHomework(item)">推送</el-button>
<el-button color="#349d44" @click="sendHomework(item,'item')">推送</el-button>
</li>
<div class="no-data flex" v-if="!dataList.length && !resourceList.length">
<i class="iconfont icon-zanwushuju"></i>
@ -56,7 +56,7 @@
</ul>
</el-scrollbar>
</div>
<SetHomework v-model="setDialog" :title="'推送作业'" :entpcourseid="entpcourseid" :row="curRow"
<SetHomework v-model="setDialog" :title="'推送作业'" :entpcourseid="entpcourseid" :rows="curRow"
@on-close="closeHomework" @on-success="successHomework"/>
</div>
<div class="homework flex" v-else>
@ -110,8 +110,11 @@ const curNode = reactive({
data: {}
})
const sendHomework = (row) => {
curRow.value = row
const sendHomework = (row,type) => {
if(type == 'item'){
//
curRow.value = [row]
}
setTimeout(() => {
ipcMsgSend('tool-sphere:set:ignore', false)
}, 200)