Compare commits
33 Commits
26c388f31c
...
09575b9896
Author | SHA1 | Date |
---|---|---|
baigl | 09575b9896 | |
白了个白 | 436cde508c | |
白了个白 | 0e42ce08e1 | |
baigl | be4f9d2499 | |
白了个白 | 6a8b0f82e8 | |
白了个白 | d290be9320 | |
yangws | 16761d3fc8 | |
小杨 | 03b5eccab0 | |
baigl | add2a3e621 | |
白了个白 | f18d0c0e5e | |
白了个白 | e57e643f67 | |
白了个白 | 1a9f98e6c9 | |
白了个白 | e53731ac3f | |
白了个白 | a1002a1f40 | |
白了个白 | 7c539614fd | |
朱浩 | ae433b7520 | |
朱浩 | 16b574a167 | |
朱浩 | 8a90da5b64 | |
白了个白 | 2b25924213 | |
白了个白 | f3d59ca8ee | |
白了个白 | 6163fb06f9 | |
zhengdegang | 206a81eeee | |
zdg | b68e5c449b | |
zdg | bf7c9839c7 | |
朱浩 | d1f3abcc72 | |
zdg | 781a62c137 | |
zouyf | 4d9ae0ab90 | |
朱浩 | d39d96f733 | |
朱浩 | fe9e0c1fe2 | |
朱浩 | 7fa76e0f7e | |
朱浩 | b3e75e799e | |
朱浩 | 81cd69beb9 | |
朱浩 | 0bb03dad5e |
|
@ -16,7 +16,7 @@ win:
|
|||
nsis:
|
||||
oneClick: false
|
||||
allowToChangeInstallationDirectory: true
|
||||
artifactName: ${name}-${version}-setup.${ext}
|
||||
artifactName: ${name}-${version}-test.${ext}
|
||||
shortcutName: ${productName}
|
||||
uninstallDisplayName: ${productName}
|
||||
createDesktopShortcut: always
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "aix-win",
|
||||
"version": "2.1.5",
|
||||
"version": "2.1.9",
|
||||
"description": "",
|
||||
"main": "./out/main/index.js",
|
||||
"author": "example.com",
|
||||
|
|
|
@ -243,6 +243,78 @@ export default async function ({ app, shell, BrowserWindow, ipcMain }) {
|
|||
})
|
||||
})
|
||||
|
||||
/*创建新的ppt文件*/
|
||||
ipcMain.on('creat-ai-file-default', (e, { name, url, uploadData, cookie }) => {
|
||||
createFolder('tempFile').then(async () => {
|
||||
let path = appTempFilePath + name.replace(/[\\/:*?"<>|]/, '')
|
||||
let {type,item} = await downloadFile(url,name)
|
||||
if (type==="成功") {
|
||||
let fileType = 'application/vnd.openxmlformats-officedocument.presentationml.presentation'
|
||||
let formData = new FormData()
|
||||
for (let key in uploadData) {
|
||||
if (Object.prototype.hasOwnProperty.call(uploadData, key)) {
|
||||
// 检查是否是对象自身的属性
|
||||
formData.append(key, uploadData[key])
|
||||
}
|
||||
}
|
||||
formData.append('fileFlag', '课件')
|
||||
uploadFileByFS({
|
||||
url: uploadUrl,
|
||||
path,
|
||||
name,
|
||||
cookie,
|
||||
fileType,
|
||||
formData,
|
||||
success: (response) => {
|
||||
e.reply('creat-ai-file-default-reply', response.data)
|
||||
console.log('File uploaded successfully:', response.data)
|
||||
},
|
||||
error: (err) => {
|
||||
console.error('Error uploading file:', err)
|
||||
}
|
||||
})
|
||||
}else {
|
||||
e.reply('creat-ai-file-default-reply', type)
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
function downloadFile(url,fileName) {
|
||||
return new Promise((resolve, reject)=>{
|
||||
const browserWindow = BrowserWindow.getFocusedWindow()
|
||||
const id = manager.download({
|
||||
window: browserWindow,
|
||||
url: url,
|
||||
saveAsFilename: fileName,
|
||||
directory: appTempFilePath,
|
||||
callbacks: {
|
||||
onDownloadStarted: async ({ id, item, webContents }) => {
|
||||
// Do something with the download id
|
||||
},
|
||||
onDownloadProgress: async ({ id, item, percentCompleted }) => {
|
||||
// console.log(percentCompleted)
|
||||
},
|
||||
onDownloadCompleted: async ({ id, item }) => {
|
||||
console.log('完成')
|
||||
resolve({type:"成功",item})
|
||||
},
|
||||
onDownloadCancelled: async () => {
|
||||
console.log("取消")
|
||||
reject({type:"取消了下载"})
|
||||
},
|
||||
onDownloadInterrupted: async () => {
|
||||
console.log('中断')
|
||||
reject({type:"下载被中断"})
|
||||
},
|
||||
onError: (err, data) => {
|
||||
console.log(err.toString())
|
||||
reject({type:"下载出错",err})
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
//获取应用文件目录
|
||||
ipcMain.on('get-root-file-path', (e) => {
|
||||
e.reply('get-root-file-path-reply', appRootFilePath)
|
||||
|
|
|
@ -55,14 +55,15 @@ import { saveByClassWorkArray } from '@/api/teaching/classwork'
|
|||
import useUserStore from '@/store/modules/user'
|
||||
import { getCurrentTime } from '@/utils/date'
|
||||
import { uniqBy, groupBy } from 'lodash'
|
||||
import { sessionStore } from '@/utils/store'
|
||||
|
||||
const model = defineModel({ type: Boolean, default: false })
|
||||
const props = defineProps({
|
||||
entpcourseid: {
|
||||
default: ''
|
||||
},
|
||||
row: {
|
||||
default: ''
|
||||
rows: {
|
||||
default: []
|
||||
},
|
||||
title: {
|
||||
type: String,
|
||||
|
@ -211,6 +212,8 @@ const delStudent = (index) => {
|
|||
|
||||
const onSubmit = (formEl) => {
|
||||
if (!formEl) return
|
||||
// 课堂id
|
||||
const classRoomId = sessionStore.get('curClassRoom.id')
|
||||
formEl.validate((valid) => {
|
||||
if (valid) {
|
||||
/**
|
||||
|
@ -222,31 +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,
|
||||
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({
|
||||
|
@ -280,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>
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
@ -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 = []
|
||||
|
|
|
@ -18,7 +18,7 @@ export const useToolState = defineStore('tool', {
|
|||
showBoardAll: false, // 全屏画板-是否显示
|
||||
isPdfWin: false, // pdf窗口是否打开
|
||||
isToolWin: false, // 工具窗口是否打开
|
||||
isTaskWin: false, // 批改窗口是否打开
|
||||
isTaskWin: false, // 批改窗口是否打开
|
||||
curSubjectNode: {
|
||||
querySearch: {} // 查询资源所需参数
|
||||
},
|
||||
|
|
|
@ -96,3 +96,19 @@ export const creatPPT = (name, uploadData) => {
|
|||
})
|
||||
})
|
||||
}
|
||||
|
||||
export const creatAIPPT = (name, url, uploadData) => {
|
||||
JSON.parse(JSON.stringify(uploadData))
|
||||
return new Promise((resolve, reject) => {
|
||||
let cookie = localStorage.getItem('Admin-Token')
|
||||
ipcRenderer.send('creat-ai-file-default', {
|
||||
name,
|
||||
url,
|
||||
uploadData: JSON.parse(JSON.stringify(uploadData)),
|
||||
cookie
|
||||
})
|
||||
ipcRenderer.once('creat-ai-file-default-reply', (e, res) => {
|
||||
resolve(res)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
|
|
@ -27,11 +27,8 @@
|
|||
<script setup>
|
||||
import { ref } from 'vue'
|
||||
import { useToolState } from '@/store/modules/tool'
|
||||
import useUserStore from '@/store/modules/user'
|
||||
import { createWindow } from '@/utils/tool'
|
||||
import { deleteSmartReserv, startClass, endClass } from '@/api/classManage'
|
||||
import { deleteSmartReserv } from '@/api/classManage'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import { listEntpcourse } from '@/api/teaching/classwork'
|
||||
const emit = defineEmits(['openEdit', 'deleteReserv', 'change'])
|
||||
const props = defineProps({
|
||||
item: {
|
||||
|
|
|
@ -145,63 +145,78 @@ const getClassWorkList = async () => {
|
|||
edituserid: userStore.userId, // 老师的id
|
||||
edustage: userStore.edustage, // 学段
|
||||
edusubject: userStore.edusubject,//学科
|
||||
deaddate: tabActive.value === '进行中'? getTomorrow() : EndDate.value,// 进行中:明天,已结束:选择的日期
|
||||
// deaddate: tabActive.value === '进行中'? getTomorrow() : EndDate.value,// 进行中:明天,已结束:选择的日期 弃用
|
||||
deaddate: EndDate.value,// 进行中:明天,已结束:选择的日期
|
||||
status: '1', // 作业状态:1-已发布
|
||||
// orderby: 'concat(deaddate,uniquekey) DESC',
|
||||
orderby: 'deaddate DESC',
|
||||
pageSize: 100,
|
||||
})
|
||||
|
||||
for (var i = 0; i < response.rows.length; i++) {
|
||||
/**
|
||||
* 2024-10-17 由于 后面截止时间加了 时分,特加判断
|
||||
* 1、进行中、以前是以明天判断。现改为传当天的日期,并根据当前日期的时分与截止日期进行判断,
|
||||
* 2、已结束、以前默认是以明天判断。现依然以明天为判断,并根据当前日期时分大于截止日期时分判断。
|
||||
*/
|
||||
let list = [];
|
||||
if(tabActive.value === '进行中'){
|
||||
// 进行中 当前日期时间 小于 截止 日期时间
|
||||
list = response.rows&&response.rows.filter(item => item.deaddate && getCurrentTime('YYYY-MM-DD HH:mm') < item.deaddate); // 进行中
|
||||
}else{
|
||||
list = response.rows&&response.rows.filter(item => item.deaddate && getCurrentTime('YYYY-MM-DD HH:mm') > item.deaddate); // 已结束
|
||||
}
|
||||
|
||||
|
||||
for (var i = 0; i < list.length; i++) {
|
||||
// 初始化部分新增字段值
|
||||
response.rows[i].workdatalist = []
|
||||
response.rows[i].workdatacount = 0 // 人数
|
||||
response.rows[i].workdatalistVisible = false
|
||||
response.rows[i].workdatafeedbackcount = 0 // 已交人数
|
||||
response.rows[i].feedtimelength = 0
|
||||
response.rows[i].rightAnswerCount = 0
|
||||
response.rows[i].scoingRate = 0 + '%' // 得分率
|
||||
response.rows[i].averagetime = 0 // 平均用时
|
||||
list[i].workdatalist = []
|
||||
list[i].workdatacount = 0 // 人数
|
||||
list[i].workdatalistVisible = false
|
||||
list[i].workdatafeedbackcount = 0 // 已交人数
|
||||
list[i].feedtimelength = 0
|
||||
list[i].rightAnswerCount = 0
|
||||
list[i].scoingRate = 0 + '%' // 得分率
|
||||
list[i].averagetime = 0 // 平均用时
|
||||
|
||||
// ----------------------------------------------
|
||||
// 处理任务类型的UI
|
||||
if (response.rows[i].worktype == '学习目标定位') {
|
||||
response.rows[i].workclass = 'success'
|
||||
response.rows[i].workcodesList = JSON.parse(response.rows[i].workcodes)
|
||||
} else if (response.rows[i].worktype == '教材研读') {
|
||||
response.rows[i].workclass = 'primary'
|
||||
} else if (response.rows[i].worktype == '框架梳理') {
|
||||
response.rows[i].workclass = 'warning'
|
||||
} else if (response.rows[i].worktype == '学科定位') {
|
||||
response.rows[i].workclass = 'info'
|
||||
} else if (response.rows[i].worktype == '习题训练') {
|
||||
response.rows[i].workclass = 'danger'
|
||||
if (list[i].worktype == '学习目标定位') {
|
||||
list[i].workclass = 'success'
|
||||
list[i].workcodesList = JSON.parse(response.rows[i].workcodes)
|
||||
} else if (list[i].worktype == '教材研读') {
|
||||
list[i].workclass = 'primary'
|
||||
} else if (list[i].worktype == '框架梳理') {
|
||||
list[i].workclass = 'warning'
|
||||
} else if (list[i].worktype == '学科定位') {
|
||||
list[i].workclass = 'info'
|
||||
} else if (list[i].worktype == '习题训练') {
|
||||
list[i].workclass = 'danger'
|
||||
} else {
|
||||
response.rows[i].workclass = ''
|
||||
list[i].workclass = ''
|
||||
}
|
||||
// 如果是习题训练任务,则检查一共有多少道
|
||||
if (response.rows[i].entpcourseworklist != '') {
|
||||
response.rows[i].entpcourseworklistarray = JSON.parse(
|
||||
'[' + response.rows[i].entpcourseworklist + ']'
|
||||
if (list[i].entpcourseworklist != '') {
|
||||
list[i].entpcourseworklistarray = JSON.parse(
|
||||
'[' + list[i].entpcourseworklist + ']'
|
||||
)
|
||||
} else {
|
||||
response.rows[i].entpcourseworklistarray = []
|
||||
list[i].entpcourseworklistarray = []
|
||||
}
|
||||
// 根据 classworkdatastudentids 初始化判断分配的人数
|
||||
if (
|
||||
response.rows[i].classworkdatastudentids != '' &&
|
||||
response.rows[i].classworkdatastudentids != null &&
|
||||
response.rows[i].classworkdatastudentids != 'null'
|
||||
list[i].classworkdatastudentids != '' &&
|
||||
list[i].classworkdatastudentids != null &&
|
||||
list[i].classworkdatastudentids != 'null'
|
||||
) {
|
||||
const stuList = JSON.parse('[' + response.rows[i].classworkdatastudentids + ']')
|
||||
response.rows[i].workdatacount = stuList.length
|
||||
const stuList = JSON.parse('[' + list[i].classworkdatastudentids + ']')
|
||||
list[i].workdatacount = stuList.length
|
||||
}
|
||||
}
|
||||
// 显示分配人数(workdatacount)>0 的
|
||||
if (response.rows && response.rows.length > 0) {
|
||||
classWorkList.value = response.rows && response.rows.filter((item) => item.workdatacount > 0)
|
||||
if (list && list.length > 0) {
|
||||
classWorkList.value = list && list.filter((item) => item.workdatacount > 0)
|
||||
//TODO: 这里没分页,貌似这个 total 不重要,后续看
|
||||
total.value = response.total
|
||||
total.value = 0
|
||||
}else{
|
||||
classWorkList.value = []
|
||||
total.value = 0
|
||||
|
@ -222,6 +237,7 @@ const getStudentClassWorkData = async() => {
|
|||
// classids: classTaskStore.classListIds.join(','),
|
||||
// edusubject: userStore.edusubject,//学科
|
||||
// deaddate: tabActive.value === '进行中'? getTomorrow() : EndDate.value,// 进行中:明天,已结束:选择的日期
|
||||
// deaddate: EndDate.value,// 进行中:明天,已结束:选择的日期
|
||||
// //status: '1', // 作业状态:1-已发布
|
||||
// orderby: "deaddate DESC",// TODO: 这里是否加 deaddate 的排序,后续看
|
||||
// pageSize: 1000,
|
||||
|
@ -407,13 +423,28 @@ const getStudentVisible = async () => {
|
|||
edituserid: userStore.userId, // 老师的id
|
||||
edustage: userStore.edustage,// 学段
|
||||
edusubject: userStore.edusubject,//学科
|
||||
deaddate: tabActive.value === '进行中'? getTomorrow() : EndDate.value,// 进行中:明天,已结束:选择的日期
|
||||
// deaddate: tabActive.value === '进行中'? getTomorrow() : EndDate.value,// 进行中:明天,已结束:选择的日期
|
||||
deaddate: EndDate.value,// 进行中:明天,已结束:选择的日期
|
||||
status: '1', // 作业状态:1-已发布
|
||||
// orderby: 'concat(deaddate,uniquekey) DESC',
|
||||
orderby: 'deaddate DESC',
|
||||
pageSize: 100
|
||||
})
|
||||
const curWorkList = response.rows
|
||||
|
||||
/**
|
||||
* 2024-10-17 由于 后面截止时间加了 时分,特加判断
|
||||
* 1、进行中、以前是以明天判断。现改为传当天的日期,并根据当前日期的时分与截止日期进行判断,
|
||||
* 2、已结束、以前默认是以明天判断。现依然以明天为判断,并根据当前日期时分大于截止日期时分判断。
|
||||
*/
|
||||
let list = [];
|
||||
if(tabActive.value === '进行中'){
|
||||
// 进行中 当前日期时间 小于 截止 日期时间
|
||||
list = response.rows&&response.rows.filter(item => item.deaddate && getCurrentTime('YYYY-MM-DD HH:mm') < item.deaddate); // 进行中
|
||||
}else{
|
||||
list = response.rows&&response.rows.filter(item => item.deaddate && getCurrentTime('YYYY-MM-DD HH:mm') > item.deaddate); // 已结束
|
||||
}
|
||||
|
||||
const curWorkList = list
|
||||
|
||||
/**
|
||||
* warn: 这里仅更新了finishpercent(进度条), 且当前作业布置推送新任务时, curWorkList中会查到新的任务与当前页面中this.classWorkList长度不一致,
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -74,8 +74,8 @@ function initChart() {
|
|||
position: 'top',
|
||||
formatter: params => {
|
||||
const value = dataList.value[params.dataIndex].value;
|
||||
const percentage = ((value / total) * 100).toFixed(2); // 计算百分比并保留两位小数
|
||||
return `${percentage}%`; // 显示为百分比形式
|
||||
const percentage = ((value / total) * 100).toFixed(); // 计算百分比并保留两位小数
|
||||
return `${value}人 ${percentage}%`; // 显示为百分比形式
|
||||
},
|
||||
color: '#333',
|
||||
fontSize: 12
|
||||
|
|
|
@ -125,7 +125,7 @@ onMounted(() => {
|
|||
|
||||
|
||||
watch(() => props.bookobj.levelSecondId, (newVal) => {
|
||||
console.log(props.bookobj,'课程选择')
|
||||
// console.log(props.bookobj,'课程选择')
|
||||
|
||||
})
|
||||
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
<span class="name">{{ item.uniquekey }}</span>
|
||||
<el-tag class="tag" round :type="tagType(item.deaddate)" effect="dark" size="small">{{
|
||||
getCurrentTime('YYYY-MM-DD HH:mm') > item.deaddate ? '已结束' : '进行中' }}</el-tag>
|
||||
<el-tag :type="item.workclass" size="large">{{ item.worktype }}</el-tag>
|
||||
</div>
|
||||
<div class="class-time">{{ item.classcaption }} | 截止时间:{{ item.deaddate }} </div>
|
||||
</div>
|
||||
|
@ -52,9 +53,25 @@ const getHomework = async () => {
|
|||
try {
|
||||
const { rows } = await homeworklist({ edituserid: user.userId, edustage, edusubject, deaddate: getTomorrow(), status: '1', orderby: 'uniquekey DESC', pageSize: 500 })
|
||||
// 只展示进行中的
|
||||
// homeworkList.value = rows.filter(item => item.deaddate && item.uniquekey && getCurrentTime('YYYY-MM-DD HH:mm') < item.deaddate)
|
||||
homeworkList.value = rows.filter(item => item.deaddate && item.uniquekey && getTomorrow() <= item.deaddate) //大于今天的才算进行中
|
||||
homeworkList.value = rows.filter(item => item.deaddate && item.uniquekey && getCurrentTime('YYYY-MM-DD HH:mm') < item.deaddate) // 当前日期的时分与截止日期进行判断
|
||||
// homeworkList.value = rows.filter(item => item.deaddate && item.uniquekey && getTomorrow() <= item.deaddate) //大于今天的才算进行中 弃用
|
||||
homeworkList.value.forEach((item) => {
|
||||
// 处理任务类型的UI
|
||||
if (item.worktype == '学习目标定位') {
|
||||
item.workclass = 'success'
|
||||
item.workcodesList = JSON.parse(item.workcodes)
|
||||
} else if (item.worktype == '教材研读') {
|
||||
item.workclass = 'primary'
|
||||
} else if (item.worktype == '框架梳理') {
|
||||
item.workclass = 'warning'
|
||||
} else if (item.worktype == '学科定位') {
|
||||
item.workclass = 'info'
|
||||
} else if (item.worktype == '习题训练') {
|
||||
item.workclass = 'danger'
|
||||
} else {
|
||||
item.workclass = ''
|
||||
}
|
||||
|
||||
item.workdatacount = JSON.parse('[' + item.classworkdatastudentids + ']').length
|
||||
// 如果是习题训练任务,则检查一共有多少道
|
||||
if (item.entpcourseworklist != '') {
|
||||
|
|
|
@ -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'
|
||||
},
|
||||
{
|
||||
|
|
|
@ -47,7 +47,7 @@
|
|||
<el-card class="card2" v-if="activeStep == 1">
|
||||
<div class="paragraphs">
|
||||
{{ outputText }}
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
<el-card class="card3" v-if="activeStep == 2">
|
||||
<div class="outline">
|
||||
|
@ -130,6 +130,7 @@
|
|||
|
||||
<script setup>
|
||||
import { ref, onMounted } from "vue";
|
||||
import { creatAIPPT } from '@/utils/talkFile'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import {
|
||||
getBackGround,
|
||||
|
@ -195,6 +196,18 @@ const outlineData = ref({
|
|||
}
|
||||
)
|
||||
|
||||
const emit = defineEmits(['addSuccess'])
|
||||
const props = defineProps({
|
||||
currentNode: {
|
||||
type: Object,
|
||||
default: () => {}
|
||||
},
|
||||
uploadData: {
|
||||
type: Object,
|
||||
default: () => {}
|
||||
}
|
||||
})
|
||||
|
||||
// 将输入数据或返回数据存入记忆中
|
||||
function updateStagingData(role, newData) {
|
||||
stagingData.value.push({ role: role, content: newData });
|
||||
|
@ -213,7 +226,12 @@ const outlineCreatePPT = () => {
|
|||
percentage.value = response.data.process;
|
||||
if (response.data && response.data.pptUrl && response.data.pptUrl.length > 4) {
|
||||
console.log('PPT',response)
|
||||
//TODO window.location.href = response.data.pptUrl;
|
||||
// window.location.href = response.data.pptUrl;
|
||||
//发消息到主进程,携带名称和URL,将URL下载下来后复制到文件列表并上传到服务
|
||||
// let url = "https://bjcdn.openstorage.cn/xinghuo-privatedata/%2Ftmp/apiTempFiledf28bf990a4c40ffb7477ed4b65392c27232357022409613439/%E3%80%8A%E9%9D%99%E5%A5%B3%E3%80%8B%E6%B7%B1%E5%BA%A6%E8%A7%A3%E8%AF%BB%E4%B8%8E%E7%A0%94%E7%A9%B6.pptx"
|
||||
creatAIPPT(props.currentNode.itemtitle + '.pptx',response.data.pptUrl, props.uploadData).then((res) => {
|
||||
emit('addSuccess',res)
|
||||
})
|
||||
ElMessage.success("生成成功");
|
||||
} else {
|
||||
const sleepTime = 2000;
|
||||
|
@ -602,6 +620,10 @@ const changeCursor = (cursorStyle) => {
|
|||
};
|
||||
|
||||
onMounted(() => {
|
||||
// let url = "https://bjcdn.openstorage.cn/xinghuo-privatedata/%2Ftmp/apiTempFiledf28bf990a4c40ffb7477ed4b65392c27232357022409613439/%E3%80%8A%E9%9D%99%E5%A5%B3%E3%80%8B%E6%B7%B1%E5%BA%A6%E8%A7%A3%E8%AF%BB%E4%B8%8E%E7%A0%94%E7%A9%B6.pptx"
|
||||
// creatAIPPT(props.currentNode.itemtitle + '.pptx',url, props.uploadData).then((res) => {
|
||||
// emit('addSuccess',res)
|
||||
// })
|
||||
connectWebSocket("");
|
||||
getBackground();
|
||||
});
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -148,8 +148,26 @@ export default {
|
|||
this.userInfo = useUserStore().user
|
||||
},
|
||||
methods: {
|
||||
getOpenCourse() {
|
||||
return Promise.all([listClasscourseNew({teacherid: this.userInfo.userId,status:"open",evalid: this.curNode.id,pageSize:1000}), getSelfReserv({ex2:this.curNode.id})]).then(([res1,res2])=>{
|
||||
let list2 = res1.rows || []
|
||||
let list = res2.data || []
|
||||
let one = list.find(item1 => {
|
||||
if (item1.status === "上课中") {
|
||||
return true
|
||||
}
|
||||
})
|
||||
if (one) {
|
||||
return one
|
||||
}
|
||||
if (list2.length>0) {
|
||||
one = list2[0]
|
||||
}
|
||||
return one
|
||||
})
|
||||
},
|
||||
// 获取当前上课的课程列表
|
||||
getOpenCourse(isApt) {
|
||||
/*getOpenCourse(isApt) {
|
||||
const curNodeId = this.curNode.id
|
||||
if (isApt) { // APT课程
|
||||
const params = {teacherid: this.userInfo.userId,status:"open",evalid: curNodeId,pageSize:1000}
|
||||
|
@ -161,11 +179,12 @@ export default {
|
|||
return (res.data || []).filter(o => o.status === "上课中")
|
||||
})
|
||||
}
|
||||
},
|
||||
},*/
|
||||
clickStartClass(item) {
|
||||
const isApt = item.fileFlag === 'apt'
|
||||
this.getOpenCourse(isApt).then(res => {
|
||||
if(!res || res.length === 0){
|
||||
console.log(res)
|
||||
if(!res){
|
||||
this.$emit('on-start-class', item)
|
||||
}else{
|
||||
ElMessageBox.alert('<strong>上次课程尚未结束,是否继续上课?</strong>', '', {
|
||||
|
@ -182,33 +201,14 @@ export default {
|
|||
confirmButtonClass: "el-button--danger",
|
||||
center: true,
|
||||
beforeClose: (action, instance, done) => {
|
||||
const obj = res[0]
|
||||
// console.log(action, obj, item)
|
||||
const obj = res
|
||||
if (action === 'confirm'){
|
||||
// 下课
|
||||
this.$emit('change', 'close', obj, { type: 1, instance, done })
|
||||
// if (obj.bookImg) {
|
||||
// // //PPT
|
||||
// // endClass(obj.id).then((res1) => {
|
||||
// // if (res1.data === true) {
|
||||
// // ElMessage({
|
||||
// // message: '下课成功',
|
||||
// // type: 'success'
|
||||
// // })
|
||||
// // obj.status = '已结束'
|
||||
// // done()
|
||||
// // }
|
||||
// // })
|
||||
// }else {
|
||||
// //APT 结束课程-父组件触发
|
||||
// // this.$emit('change', 'close', obj, { type: 1, instance, done })
|
||||
// // this.closeCourse(obj, instance, done)
|
||||
// }
|
||||
}
|
||||
if (action === 'cancel'){
|
||||
// 继续上课
|
||||
if (obj.bookImg) {
|
||||
console.log('PPT')
|
||||
//PPT
|
||||
listEntpcourse({
|
||||
evalid: obj.ex2,
|
||||
|
@ -217,6 +217,26 @@ export default {
|
|||
}).then(async res1=>{
|
||||
if (res1.rows[0].id) {
|
||||
createWindow('tool-sphere', { url: '/tool/sphere?entpcourseid=' + res1.rows[0].id + "&reservId=" + obj.id })
|
||||
if (obj.ex4) {
|
||||
getPrepareById(obj.ex4).then(res2=>{
|
||||
console.log(res2)
|
||||
this.openFileWin(res2);
|
||||
})
|
||||
}else {
|
||||
ElMessageBox.confirm(
|
||||
'抱歉,版本V2.1.9前创建的课程,无法直接打开PPT,请自行打开PPT!',
|
||||
'Warning',
|
||||
{
|
||||
confirmButtonText: 'OK',
|
||||
type: 'warning',
|
||||
center: true,
|
||||
}
|
||||
)
|
||||
.then(() => {
|
||||
})
|
||||
.catch(() => {
|
||||
})
|
||||
}
|
||||
done()
|
||||
}
|
||||
})
|
||||
|
@ -235,27 +255,6 @@ export default {
|
|||
})
|
||||
// this.$emit('on-start-class', item)
|
||||
},
|
||||
// 结束课程(下课)
|
||||
// async closeCourse(row, instance, done) {
|
||||
// instance.confirmButtonLoading = true
|
||||
// instance.confirmButtonText = '下课中...'
|
||||
// // 发送-下课消息
|
||||
// if (!!row.timgroupid) {
|
||||
// const msg = { msgKey: 'closed', actor: 'teacher', classcourseid: row.id }
|
||||
// Chat.sendMsg(row.timgroupid, msg)
|
||||
// }
|
||||
// // 接口-修改状态
|
||||
// const params = { id: row.id, status: 'closed', timgroupid: '' }
|
||||
// await updateClasscourse(params)
|
||||
// // 解散群
|
||||
// setTimeout(async() => {
|
||||
// if (!!row.timgroupid) await Chat.dismissGroup(row.timgroupid)
|
||||
// instance.confirmButtonLoading = false
|
||||
// instance.confirmButtonText = '下课'
|
||||
// done()
|
||||
// ElMessage({ type: 'success', message: `下课成功!` })
|
||||
// }, 1000)
|
||||
// },
|
||||
editTalk(item) {
|
||||
ElMessageBox.prompt('请输入新的标签', '添加标签', {
|
||||
confirmButtonText: '确认',
|
||||
|
|
|
@ -7,14 +7,28 @@
|
|||
<i class="iconfont icon-guanbi" @click="close"></i>
|
||||
</div>
|
||||
</template>
|
||||
<AiPpt/>
|
||||
<AiPpt @add-success="addAiPPT" :currentNode="currentNode" :uploadData="uploadData"/>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import AiPpt from './ai-ppt.vue';
|
||||
const model = defineModel()
|
||||
const model = defineModel()
|
||||
const emit = defineEmits(['addSuccess'])
|
||||
const props = defineProps({
|
||||
currentNode: {
|
||||
type: Object,
|
||||
default: () => {}
|
||||
},
|
||||
uploadData: {
|
||||
type: Object,
|
||||
default: () => {}
|
||||
}
|
||||
})
|
||||
const addAiPPT = (data) => {
|
||||
emit('addSuccess', data)
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
@ -30,4 +44,4 @@
|
|||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</style>
|
||||
|
|
|
@ -101,6 +101,12 @@ const props = defineProps({
|
|||
default: () => {
|
||||
return {}
|
||||
}
|
||||
},
|
||||
curFile: {
|
||||
type: Object,
|
||||
default: () => {
|
||||
return {}
|
||||
}
|
||||
}
|
||||
})
|
||||
const ruleFormDialog = ref(null)
|
||||
|
@ -292,7 +298,8 @@ const addClassReserv = (formData) => {
|
|||
classRoom: formData.classRoom,
|
||||
classSubject: props.currentNode.edusubject,
|
||||
ex1: props.bookId,
|
||||
ex2: props.currentNode.id
|
||||
ex2: props.currentNode.id,
|
||||
ex4: props.curFile.id
|
||||
}
|
||||
addSmartClassReserv(param).then((res) => {
|
||||
if (res.msg) {
|
||||
|
|
|
@ -34,7 +34,7 @@
|
|||
</div>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="教学实录" name="教学实录" class="prepare-center-jxsl">
|
||||
<class-reserv v-if="activeAptTab==='教学实录'" :curNode="currentNode"
|
||||
<class-reserv v-if="activeAptTab==='教学实录'" :curNode="currentNode"
|
||||
@change="changeClass"></class-reserv>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
|
@ -95,7 +95,8 @@
|
|||
<div class="prepare-body-header">
|
||||
<div>
|
||||
<label style="font-size: 15px">共{{ currentWorkList.length }}个作业</label>
|
||||
<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,23 +127,26 @@
|
|||
</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"
|
||||
:current-node="currentNode"
|
||||
:book-id="uploadData.textbookId"
|
||||
:cur-file="activeClass"
|
||||
@add-success="initReserv"
|
||||
@close="closeChange"
|
||||
></reserv>
|
||||
<!-- 上课配置 -->
|
||||
<class-start ref="calssRef" @close="closeChange"/>
|
||||
<PptDialog v-model="pptDialog"/>
|
||||
<PptDialog @add-success="addAiPPT" :currentNode="currentNode" :uploadData="uploadData" v-model="pptDialog"/>
|
||||
<!-- <button @click="test">test</button> -->
|
||||
</template>
|
||||
<script setup>
|
||||
import { Check,Plus } from '@element-plus/icons-vue'
|
||||
import Reserv from '@/views/prepare/container/reserv.vue'
|
||||
import { ArrowDown } from '@element-plus/icons-vue'
|
||||
import PptDialog from '@/views/prepare/container/ppt-dialog.vue'
|
||||
</script>
|
||||
<script>
|
||||
const Remote = require('@electron/remote')
|
||||
|
@ -155,7 +159,6 @@ import { useToolState } from '@/store/modules/tool'
|
|||
import MoveFile from '@/components/move-file/index.vue'
|
||||
import FileListItem from '@/views/prepare/container/file-list-item.vue'
|
||||
import KjListItem from '@/views/prepare/container/kj-list-item.vue'
|
||||
import PptDialog from './container/ppt-dialog.vue'
|
||||
import { getSmarttalkPage, moveSmarttalk, creatAPT } from '@/api/file'
|
||||
import { toTimeText } from '@/utils/date'
|
||||
import { ElMessage } from 'element-plus'
|
||||
|
@ -169,12 +172,12 @@ 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' // 预备上课
|
||||
import MsgEnum from '@/plugins/imChat/msgEnum' // im 消息枚举
|
||||
import Chat from '@/utils/chat' // im 登录初始化
|
||||
import msgEnum from '@/plugins/imChat/msgEnum'
|
||||
if (!Chat.imChat) Chat.init()
|
||||
|
||||
const toolStore = useToolState()
|
||||
|
@ -228,7 +231,7 @@ export default {
|
|||
entpcourseid: '',
|
||||
// 布置作业弹窗
|
||||
setDialog: false,
|
||||
row: '',
|
||||
rows: '',
|
||||
isOpenHomework: false,
|
||||
// 当前上课课程
|
||||
activeClass: null,
|
||||
|
@ -286,6 +289,14 @@ export default {
|
|||
// }
|
||||
// },
|
||||
methods: {
|
||||
addAiPPT(item) {
|
||||
this.currentFileList.unshift(item.resData)
|
||||
this.pptDialog = false
|
||||
},
|
||||
// test() {
|
||||
// toolStore.resetDef() // 重置状态
|
||||
// ipcMsgSend('tool-sphere:close') // 关闭窗口
|
||||
// },
|
||||
// 开始上课
|
||||
startClass(item, classObj) {
|
||||
// 关闭状态,打开上课相关功能(已打开,忽略)
|
||||
|
@ -311,7 +322,7 @@ export default {
|
|||
}
|
||||
case 'close': { // 关闭上课
|
||||
const head = MsgEnum.HEADS.MSG_closed // closed
|
||||
const msgT = msgEnum.TYPES.TEACHER // teacher
|
||||
const msgT = MsgEnum.TYPES.TEACHER // teacher
|
||||
const isApt = !row.bookImg // bookImg ppt 否则Apt
|
||||
row.ex3 == 'undefined' && (row.ex3 = null)
|
||||
const timgroupid = isApt ? row.timgroupid : row.ex3 // ex3 ppt 否则Apt
|
||||
|
@ -354,7 +365,7 @@ export default {
|
|||
}, 1000)
|
||||
break
|
||||
}
|
||||
default:
|
||||
default:
|
||||
break
|
||||
}
|
||||
},
|
||||
|
@ -646,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
|
||||
//打开作业 高考 url增加unitId 章节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
|
||||
// //打开作业 高考 url增加unitId 章节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 = ['周日', '周一', '周二', '周三', '周四', '周五', '周六']
|
||||
|
@ -682,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) {
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -98,6 +98,7 @@ onMounted(async() => {
|
|||
const getClassInfo = async () => {
|
||||
const { data } = await classManageApi.getClassInfo(classObj.id)
|
||||
classObj.data = data
|
||||
sessionStore.set('curClassRoom', classObj) // 课堂信息-缓存
|
||||
// 群id
|
||||
let timGroupId = data?.ex3 || ''
|
||||
console.log('获取群ID:', timGroupId)
|
||||
|
|
Loading…
Reference in New Issue