Compare commits

..

No commits in common. "a853214741f865649ab8fcc1a80c8cddb2e66110" and "172441984834843f06e5ac031f80af6244cec61a" have entirely different histories.

9 changed files with 141 additions and 472 deletions

View File

@ -60,7 +60,7 @@
import { ref, onMounted, onUnmounted, computed, watch } from 'vue' import { ref, onMounted, onUnmounted, computed, watch } from 'vue'
import { listByDeadDate, listClassworkdata, listClassworkdataNew } from '@/api/classTask' import { listByDeadDate, listClassworkdata, listClassworkdataNew } from '@/api/classTask'
import TaskItem from '@/views/classTask/container/classTask/task-item.vue' import TaskItem from '@/views/classTask/container/task-item.vue'
// import ItemDialog from '@/views/classTask/container/item-dialog.vue' // import ItemDialog from '@/views/classTask/container/item-dialog.vue'
import { useToolState } from '@/store/modules/tool' import { useToolState } from '@/store/modules/tool'
import { getCurrentTime, getTomorrow } from '@/utils/date' import { getCurrentTime, getTomorrow } from '@/utils/date'

View File

@ -99,7 +99,7 @@
</el-table> </el-table>
</div> </div>
<!-- 作业内容详情 --> <!-- 作业内容编辑 -->
<el-dialog v-model="workEdit" title="作业内容详情" width="90%" append-to-body> <el-dialog v-model="workEdit" title="作业内容详情" width="90%" append-to-body>
<!-- 课标研读 目标设定 教材研读 框架梳理 学科定位 --> <!-- 课标研读 目标设定 教材研读 框架梳理 学科定位 -->
<div v-if="currentTag=='习题训练'" :style="{'padding': '15px', 'overflow': 'auto'}"> <div v-if="currentTag=='习题训练'" :style="{'padding': '15px', 'overflow': 'auto'}">
@ -125,73 +125,30 @@
</el-table-column> </el-table-column>
</el-table> </el-table>
</div> </div>
<!-- 框架梳理 -->
<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">
<template v-for="(_item,index) in workConfObj.chooseWorkLists" :key="index">
<div v-if="_item.worktype=='框架梳理'"> <template v-for="(item) in workConfObj.chooseWorkLists" :key="item.id">
<div style="color: silver; display: flex;align-items: center;"> <div v-if="item.worktype==workConfObj.worktype">
<div style="flex: 1;">{{ _item.worktype }}</div> <div class="choose-work">
<div style="flex: 1;">分值{{ _item.score }}</div> <div class="choose-work-title">{{ item.worktype }}</div>
<div style="display: flex;align-items: center;flex: 1;justify-content: flex-end;"> <div class="choose-work-content">
<el-button @click="prevRead(_item)">预览</el-button> <div style="color: silver; display: flex;align-items: center;flex: 1;">
<el-form-item label="分值">
<el-input-number v-model="item.score" :min="1" :max="100" size="small"></el-input-number >
</el-form-item>
<div style="display: flex;align-items: center;flex: 1;justify-content: flex-end;">
<el-button @click="prevRead(item)">预览</el-button>
</div>
</div>
</div> </div>
</div> </div>
</div> </div>
</template> </template>
</div> </div>
</div> </div>
<!-- TODO 课堂展示 常规作业 预览待开发-->
<!-- 常规作业包含多个格式图片略缩图展示点击放大其他附件跳转另外弹窗查看 -->
<div v-if="currentTag=='常规作业'" :style="{'padding': '15px', 'overflow': 'auto'}">
<div style="margin: 5px; background-color: white">
<div v-if="workConfObj.teacherFeedContentList.length > 0">
<div class="image_list">
<div v-if="workConfObj.teachImageList.length > 0">
<div style="margin-bottom: 5px;text-align: left;">
<span style="color: red">温馨提示点击图片可放大预览 </span>
</div>
<div style="display: flex; flex-wrap: nowrap; flex-direction: row;">
<div v-for="(imageItem, index) in workConfObj.teachImageList" :key="index" style="margin: 0 15px;">
<el-image
style="width: 100px; height: 100px"
:src="imageItem.url"
:zoom-rate="1.2"
:max-scale="7"
:min-scale="0.2"
:preview-src-list="
workConfObj.teachImageList
.filter(
(item) =>
item.name.indexOf('jpg') > -1 ||
item.name.indexOf('jpeg') > -1 ||
item.name.indexOf('png') > -1
)
.map((item) => item.url)
"
:initial-index="4"
fit="contain"
/>
</div>
<!-- 其他类型附件 -->
<div v-if="workConfObj.teachFileList.length > 0">
<div style="margin: 10px 0;text-align: left; margin: auto 0; cursor: pointer;">
<span style="color: #409eff" @click="openFile">预览其他类型附件</span>
</div>
</div>
</div>
</div>
<div v-else>
<div v-if="workConfObj.teachFileList.length > 0">
<div style="margin: 10px 0;text-align: left; margin: auto 0; cursor: pointer;">
<span style="color: #409eff" @click="openFile">预览其他类型附件</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@ -293,12 +250,6 @@
<el-button type="primary" @click="handleTaskAssignToAllClassType()" >{{'推送'}}</el-button> <el-button type="primary" @click="handleTaskAssignToAllClassType()" >{{'推送'}}</el-button>
</div> </div>
</el-dialog> </el-dialog>
<!-- 预览框 -->
<prevReadMsgDialog ref="prevReadMsgDialogRef" :bookobj="courseObj"/>
<!-- 其他附件预览框 acceptParams-->
<prevReadImgFileDialog ref="prevReadImgFileDialogRef"/>
</div> </div>
</div> </div>
</template> </template>
@ -317,9 +268,6 @@ import { useGetHomework } from '@/hooks/useGetHomework'
import { processList } from '@/hooks/useProcessList' import { processList } from '@/hooks/useProcessList'
import { uniqBy, groupBy } from 'lodash' import { uniqBy, groupBy } from 'lodash'
import { getCurrentTime } from '@/utils/date' import { getCurrentTime } from '@/utils/date'
import prevReadMsgDialog from '@/views/classTask/container/newTask/prevReadMsg-Dialog.vue'
import prevReadImgFileDialog from '@/views/classTask/container/classTask/prevReadImgFileDialog.vue'
import useUserStore from '@/store/modules/user' import useUserStore from '@/store/modules/user'
const userStore = useUserStore().user const userStore = useUserStore().user
const { proxy } = getCurrentInstance() const { proxy } = getCurrentInstance()
@ -336,8 +284,7 @@ const props = defineProps({
// --------------------------------------------------- // ---------------------------------------------------
const isCollapse = ref(false) const isCollapse = ref(false)
const prevReadMsgDialogRef = ref(null);// ref
const prevReadImgFileDialogRef = ref(null);// ref
const courseObj = reactive({ const courseObj = reactive({
// : id,id,id, // : id,id,id,
@ -361,13 +308,9 @@ const currentWorkEdit = reactive({
currentIndex: 0, currentIndex: 0,
})// })//
const currentTag = ref('');// const currentTag = ref('');//
// -
const workConfObj = reactive({ const workConfObj = reactive({
quizlist: [], // list quizlist: [], // list
chooseWorkLists: [], //
teacherFeedContentList: [],//
teachFileList: [], // list
teachImageList: [],// list
}); });
// //
@ -448,10 +391,6 @@ const getTaskList = async () => {
let model = []; let model = [];
let mission = []; let mission = [];
if(res.rows&&res.rows.length > 0){
//
res.rows.sort((a, b) => new Date(b.timestamp) - new Date(a.timestamp));
}
for (let item of res.rows){ for (let item of res.rows){
item.taskconfig = []; item.taskconfig = [];
@ -534,7 +473,6 @@ const getTaskList = async () => {
} }
list.push(item); list.push(item);
} }
//
taskList.value = list; taskList.value = list;
loading.value = false; loading.value = false;
}) })
@ -565,7 +503,7 @@ let classtaskObj = reactive({
/** /**
* 作业内容-查看详情 * 作业内容-查看详情
* */ * */
const handleWorkEdit = (row, index) =>{ const handleWorkEdit = (row, index) =>{
console.log(row, index) console.log(row, index)
workEdit.value = true workEdit.value = true
currentWorkEdit.currentTask = row; currentWorkEdit.currentTask = row;
@ -574,27 +512,24 @@ let classtaskObj = reactive({
// this.attainmentList = row.workcodesList?.attlist; // this.attainmentList = row.workcodesList?.attlist;
// this.courseQualityList = row.workcodesList?.qualist; // this.courseQualityList = row.workcodesList?.qualist;
if (row.worktype == '框架梳理') { if (row.worktype == '框架梳理') {
// entpcourseworklistarray this.$nextTick(()=>{
var listCourseWork = []; this.getFlowData()
for (var i=0; i < row.entpcourseworklistarray.length; i++) {
listCourseWork.push(row.entpcourseworklistarray[i]);
}
nextTick(()=>{
// id
getEvaluationclue(listCourseWork[0].id).then(res => {
if ( res.data==null || res.data==undefined ) {
return;
}
res.data.worktype = '框架梳理';
res.data.score = listCourseWork[0].score;
console.log('框架梳理的列表', res.data);
// list
workConfObj.chooseWorkLists = [res.data];
});
}) })
} }
// if (row.worktype == '') {
// // TODO
// rootid:entpcourseworkid rootid: row.entpcourseworklistarray[0].id,
// listEvaluationclue({ cluegroup: 'graph', edusubject: this.courseObj.edusubject, pageSize: 1000 }).then((res) => {
// var glist = [];
// for (var i = 0; i < res.rows.length; i++) {
// glist.push(res.rows[i]);
// }
// this.isEditable = false;
// this.preKnowList = glist;
// this.$refs.jsMind.updateFromParent(this.preKnowList, this.courseObj.edusubject);
// this.$refs.jsMind.initJsMindMap();
// })
// }
// // // //
if (row.worktype == '习题训练') { if (row.worktype == '习题训练') {
@ -632,23 +567,20 @@ let classtaskObj = reactive({
}) })
} }
//TODO //
if(row.worktype == '常规作业'){ if(row.worktype == '常规作业' || row.worktype == '课堂展示'){
console.log(row,'常规作业'); console.log(row,'常规作业-课堂展示');
workConfObj.teacherFeedContentList = []; // workcodes
workConfObj.teachImageList = [];
workConfObj.teachFileList = [];
if(row.workcodes != ''){ if(row.workcodes != ''){
const teachWorkFileList = JSON.parse(row.workcodes); const teachWorkFileList = JSON.parse(row.workcodes);
teachWorkFileList&&teachWorkFileList.forEach(item => { teachWorkFileList&&teachWorkFileList.forEach(item => {
if(item.name.indexOf('jpg') > -1 || item.name.indexOf('jpeg') > -1 || item.name.indexOf('png') > -1){ if(item.name.indexOf('jpg') > -1 || item.name.indexOf('jpeg') > -1 || item.name.indexOf('png') > -1){
workConfObj.teachImageList.push(item); this.teachImageList.push(item);
}else{ }else{
workConfObj.teachFileList.push(item); this.teachFileList.push(item);
} }
}) })
workConfObj.teacherFeedContentList.push(teachWorkFileList); this.teacherFeedContentList.push(teachWorkFileList);
} }
} }
}; };
@ -660,10 +592,12 @@ const newHandleWorkEdit2ClassWorkQuizAdd = async (row, index) =>{
listCourseWork.push(row.entpcourseworklistarray[i]); listCourseWork.push(row.entpcourseworklistarray[i]);
} }
if (listCourseWork.length > 0) { if (listCourseWork.length > 0) {
classtaskObj.id= row.id; // classtaskObj.id= row.id; //
classtaskObj.bookObj = courseObj; // classtaskObj.bookObj = courseObj; //
classtaskObj.bookName = row.evaltitle? row.evalparenttitle? row.evalparenttitle+'/'+row.evaltitle : row.evaltitle: row.evalparenttitle// :/ classtaskObj.bookName = row.evaltitle? row.evalparenttitle+'/'+row.evaltitle: row.evalparenttitle// :/
classtaskObj.uniquekey= row.uniquekey; // classtaskObj.uniquekey= row.uniquekey; //
classtaskObj.title= row.title; // classtaskObj.title= row.title; //
classtaskObj.worktype= row.worktype; // classtaskObj.worktype= row.worktype; //
@ -1128,24 +1062,6 @@ const handleNewClassWorkDialog = () => {
router.push({ path: '/newClassTask' }); router.push({ path: '/newClassTask' });
} }
/**
* 预览框
*/
const prevRead = (item) => {
proxy.$refs.prevReadMsgDialogRef.openDialog(item);
}
/**
* 常规作业其他附件预览
*/
const openFile = () => {
const obj = {
teacherFeedContentList: workConfObj.teacherFeedContentList,//
teachFileList: workConfObj.teachFileList, // list
teachImageList: workConfObj.teachImageList,// list
}
proxy.$refs.prevReadImgFileDialogRef.acceptParams(obj);
}
// - // -
const submitWorkTitle = () => { const submitWorkTitle = () => {
if(currentWorkEdit.currentTask.title == currentWorkEdit.currentTitle){ if(currentWorkEdit.currentTask.title == currentWorkEdit.currentTitle){

View File

@ -1,179 +0,0 @@
<template>
<el-dialog
v-model="fileReadopen"
title="文件预览"
width="80%"
:style="{ height: '72vh' }"
append-to-body
>
<div class="file-read-dialog">
<div>
<!-- 老师附件 -->
<div v-if="teachFileList.length > 0">
<el-card style="max-width: 480px">
<template #header>
<div class="card-header">
<span>文件列表</span>
</div>
</template>
<div
v-for="item in teachFileList"
:key="item"
style="margin: 10px; display: flex; align-items: center"
>
<span style="margin-right: 10px">{{ item.name }}</span>
<el-button type="primary" @click="onFileRead(item)">预览</el-button>
</div>
</el-card>
</div>
</div>
<div style="width: 100%" :style="{ height: '72vh' }">
<div style="margin-left: 10px">
预览展示区域<span style="color: red; margin-left: 10px">
温馨提示若预览失败<span style="margin-left: 10px">{{ props.name }}</span
>可点击此处<a
:href="fileitem.url ? fileitem.url : ''"
target="_blank"
style="color: blue"
>下载</a
></span
>
</div>
<ReFilePreview
:name="fileitem.name"
:type="fileitem.type"
:file-type="fileitem.type"
:file-path="fileitem.url"
:text-content="textContent"
/>
</div>
</div>
</el-dialog>
</template>
<script setup name="prevReadImgFileDialogRef">
import { ref, reactive } from 'vue'
import ReFilePreview from '@/components/refile-preview/index.vue'
const props = defineProps({})
const fileReadopen = ref(false)
// list
const teacherFeedContentList = ref([])
const teachImageList = ref([])
const teachFileList = ref([])
// 线
//#region
const fileitem = reactive({
name: '',
type: '',
url: ''
})
//
const onFileRead = (file) => {
textContent.value = '1'
//
fileitem.type = file.name.split('.').pop().toLowerCase()
fileitem.url = file.url
fileitem.name = file.name
// txt
if (fileitem.type == 'txt') {
loadFileTextContent(fileitem.url)
}
}
// txt
const textContent = ref('')
const loadFileTextContent = async (url) => {
try {
const response = await fetch(url)
if (!response.ok) {
textContent.value = '文件读取失败,您可以点击上方链接跳到另外页面查看'
throw new Error('文件读取失败')
}
textContent.value = await response.text()
} catch (error) {
console.error('读取文件时出错:', error)
textContent.value = '文件读取失败,您可以点击上方链接跳到另外页面查看'
}
}
//
const acceptParams = (params) => {
console.log(params)
fileReadopen.value = true;
teacherFeedContentList.value = params.teacherFeedContentList
teachImageList.value = params.teachImageList
teachFileList.value = params.teachFileList
}
//
// onMounted(() => {})
// ()
defineExpose({
acceptParams
})
</script>
<style scoped>
.card-header{
text-align: left;
}
.image_list {
display: flex;
flex-wrap: nowrap;
flex-direction: column;
}
.file-read-dialog {
width: 100%;
height: 100%;
display: flex;
flex-direction: row;
justify-content: flex-start;
align-items: flex-start;
}
.score-container {
display: flex;
justify-content: center;
align-items: center;
/* margin-bottom: 20px; */
}
.score-circle {
width: 30px;
height: 30px;
border-radius: 50%;
background-color: pink;
color: red;
display: flex;
justify-content: center;
align-items: center;
font-size: 13px;
margin: 0 10px;
cursor: pointer;
transition: background-color 0.3s;
}
.score-circle.active {
background-color: red;
color: white;
}
.card-header{
align-items: left;
}
</style>

View File

@ -196,7 +196,7 @@
</div> </div>
<div v-if="teachFileList.length > 0"> <div v-if="teachFileList.length > 0">
<div style="margin: 10px 0;text-align: left; cursor: pointer;"> <div style="margin: 10px 0;text-align: left;">
<span style="color: red" @click="openFile" <span style="color: red" @click="openFile"
>温馨提示点击此处 可预览其他类型附件 >温馨提示点击此处 可预览其他类型附件
</span> </span>
@ -245,7 +245,7 @@
</div> </div>
<div v-if="fileList.length > 0"> <div v-if="fileList.length > 0">
<div style="margin: 10px 0;text-align: left; cursor: pointer;"> <div style="margin: 10px 0;text-align: left;">
<span style="color: red" @click="openFile" <span style="color: red" @click="openFile"
>温馨提示点击此处 可预览其他类型附件 >温馨提示点击此处 可预览其他类型附件
</span> </span>

View File

@ -167,7 +167,7 @@ import useUserStore from '@/store/modules/user'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
import { getCurrentTime, getAfterMinutes } from '@/utils/date' import { getCurrentTime, getAfterMinutes } from '@/utils/date'
import { processList } from '@/hooks/useProcessList' import { processList } from '@/hooks/useProcessList'
import ItemDialogScore from '@/views/classTask/container/classTask/item-dialog-score.vue' import ItemDialogScore from '@/views/classTask/container/item-dialog-score.vue'
// zdg: // zdg:
import quizStats from '@/views/classTask/container/quizStats.vue' import quizStats from '@/views/classTask/container/quizStats.vue'
import ClassOverview from '@/views/classTask/container/classOverview.vue' import ClassOverview from '@/views/classTask/container/classOverview.vue'

View File

@ -1,148 +0,0 @@
<template>
<!-- 预览框 -->
<el-dialog v-if="prevReadMsg.visible" v-model="prevReadMsg.visible" class="prev-read-zy-wrap" width="90%" style="height: 80vh" append-to-body>
<!-- <div v-if="prevReadMsg.type=='课标研读'" style="height: 100%;">
<standard book-type="课标研读" :show-cata="true" :show-tools="false" :course-obj="courseObj" :bookdatahtml="versionObj.bookdata" :teachResObj="activeTeachResOfStandard"></standard>
</div>
<div v-if="prevReadMsg.type=='目标设定'" style="height: 100%;display: flex;">
<degreeevolution :courseObj="courseObj" :show-class="true" :teachResObj="activeTeachResOfStandard" :attainmentList="attainmentList" :courseQualityList="courseQualityList"/>
</div>
<div v-if="prevReadMsg.type=='教材研读'" style="height: 100%;">
<standard book-type="教材研读" :course-obj="courseObj" :show-tools="false" :bookdatahtml="versionObj.bookdata" :teachResObj="activeTeachResOfStandard"></standard>
</div> -->
<div v-if="prevReadMsg.type=='框架梳理'" style="height: 100%;">
<FlowChart ref="flowref" :flowHeight="mainHeight" :dataSource="flowData"/>
</div>
<!-- <div v-if="prevReadMsg.type=='学科定位'" style="height: 100%;">
<teachJsMind :course-obj="courseObj" :teachResObj="activeTeachResOfStandard"></teachJsMind>
</div> -->
<!-- <div v-if="prevReadMsg.type=='习题训练'">习题训练</div> -->
</el-dialog>
</template>
<script setup name="prevReadMsgDialogRef">
import { onMounted, ref, watch, reactive, getCurrentInstance } from 'vue'
import { listEntpcoursefile } from '@/api/education/entpcoursefile'
import { useGetHomework } from '@/hooks/useGetHomework'
import FlowChart from "@/components/Flowchart/index.vue";
// import {listEntpcoursework, listEntpcourseworkNew, getEntpcoursework} from '@/api/education/entpCourseWork'
// import { addClassworkReturnId } from '@/api/teaching/classwork'
// import { updateClasswork, listEvaluationclue,readFile, listClassworkeval,delClassworkeval,addClassworkeval,updateClassworkeval } from '@/api/classTask'
// import { listEvaluation } from '@/api/subject'
// import { listKnowledgePoint } from "@/api/knowledge/knowledgePoint";
import FileUpload from "@/components/FileUpload/index.vue";
import whiteboard from '@/components/whiteboard/whiteboard.vue'
import useUserStore from '@/store/modules/user'
const userStore = useUserStore().user
const { proxy } = getCurrentInstance()
const props = defineProps({
bookobj: {
type: Object,
default: () => ({})
},
})
const mainHeight = ref(document.documentElement.clientHeight - 110)
//
const prevReadMsg = reactive({
visible: false,
type: ""
});// msg
// ----------
const flowData = ref({})//
// 1
const openDialog = async (item) => {
prevReadMsg.visible = true;
prevReadMsg.type = item.worktype;
// // if (item.worktype===''){
// // //
// // listEvaluation({itemkey: 'subject', edusubject: userStore.edusubject, edustage: userStore.edustage}).then(res => {
// // // TODO -
// // console.log("-",res);
// // // this.versionObj = res.rows[0];
// // // //
// // // if (this.versionObj.fileurl.length > 0) {
// // // readFile({cluelink: this.versionObj.fileurl}).then(fileres => {
// // // this.versionObj.bookdata = fileres;
// // // this.activeTeachResOfStandard = item;
// // // })
// // // }
// // })
// // }
// // if (item.worktype===''){
// // // TODO -
// // // this.activeTeachResOfStandard = item;
// // }
// if (item.worktype===''){
// // TODO -
// // getEvaluation(this.courseObj.evalrootid).then(bookres => {
// // this.versionObj = bookres.data;
// // if (this.versionObj.fileurl.length > 0) {
// // readFile({cluelink: this.versionObj.fileurl}).then(fileres => {
// // this.versionObj.bookdata = fileres;
// // this.activeTeachResOfStandard = item;
// // })
// // }
// // })
// }
if (item.worktype==='框架梳理'){
flowData.value = {};
const { chapterId } = await useGetHomework(props.bookobj.node)
// this.entpcourseid = chapterId
let queryParams = {
entpcourseid: chapterId,
ppttype: '教材分析',
parentid: item.id,
title: '逻辑框架建构',
filetype: 'draw'
}
listEntpcoursefile(queryParams).then(response=>{
if (response.rows.length == 0) {
return;
}
flowData.value = JSON.parse(response.rows[0].datacontent)
})
}
// if (item.worktype===''){
// // TODO -
// // this.activeTeachResOfStandard = item;
// }
}
onMounted(() => {
})
watch(() => props.bookobj.levelSecondId, (newVal) => {
console.log(props.bookobj,'课程选择')
})
defineExpose({
openDialog,
})
</script>
<style>
.prev-read-zy-wrap .el-dialog__header{
padding: 0!important;
}
.prev-read-zy-wrap .el-dialog__header button{
z-index: 99;
}
.prev-read-zy-wrap .el-dialog__body{
padding: 0!important;
height: 100%;
}
</style>

View File

@ -222,8 +222,25 @@
</div> </div>
</el-form> </el-form>
<!-- 预览框 --> <!-- 预览框 -->
<prevReadMsgDialog ref="prevReadMsgDialogRef" :bookobj="props.bookobj"/> <el-dialog v-if="prevReadMsg.visible" v-model="prevReadMsg.visible" class="prev-read-zy-wrap" width="90%" style="height: 80vh" append-to-body>
<!-- <div v-if="prevReadMsg.type=='课标研读'" style="height: 100%;">
<standard book-type="课标研读" :show-cata="true" :show-tools="false" :course-obj="courseObj" :bookdatahtml="versionObj.bookdata" :teachResObj="activeTeachResOfStandard"></standard>
</div>
<div v-if="prevReadMsg.type=='目标设定'" style="height: 100%;display: flex;">
<degreeevolution :courseObj="courseObj" :show-class="true" :teachResObj="activeTeachResOfStandard" :attainmentList="attainmentList" :courseQualityList="courseQualityList"/>
</div>
<div v-if="prevReadMsg.type=='教材研读'" style="height: 100%;">
<standard book-type="教材研读" :course-obj="courseObj" :show-tools="false" :bookdatahtml="versionObj.bookdata" :teachResObj="activeTeachResOfStandard"></standard>
</div> -->
<div v-if="prevReadMsg.type=='框架梳理'" style="height: 100%;">
<FlowChart ref="flowref" :flowHeight="mainHeight" :dataSource="flowData"/>
</div>
<!-- <div v-if="prevReadMsg.type=='学科定位'" style="height: 100%;">
<teachJsMind :course-obj="courseObj" :teachResObj="activeTeachResOfStandard"></teachJsMind>
</div> -->
<!-- <div v-if="prevReadMsg.type=='习题训练'">习题训练</div> -->
</el-dialog>
</div> </div>
</template> </template>
@ -243,16 +260,16 @@ import { listKnowledgePoint } from "@/api/knowledge/knowledgePoint";
import { useGetHomework } from '@/hooks/useGetHomework' import { useGetHomework } from '@/hooks/useGetHomework'
import { processList } from '@/hooks/useProcessList' import { processList } from '@/hooks/useProcessList'
import { getCurrentTime } from '@/utils/date' import { getCurrentTime } from '@/utils/date'
import FlowChart from "@/components/Flowchart/index.vue";
import FileUpload from "@/components/FileUpload/index.vue"; import FileUpload from "@/components/FileUpload/index.vue";
import whiteboard from '@/components/whiteboard/whiteboard.vue' import whiteboard from '@/components/whiteboard/whiteboard.vue'
import prevReadMsgDialog from '@/views/classTask/container/newTask/prevReadMsg-Dialog.vue'
import { useToolState } from '@/store/modules/tool' import { useToolState } from '@/store/modules/tool'
import useUserStore from '@/store/modules/user' import useUserStore from '@/store/modules/user'
const userStore = useUserStore().user const userStore = useUserStore().user
const { proxy } = getCurrentInstance() const { proxy } = getCurrentInstance()
const router = useRouter() const router = useRouter()
const toolStore = useToolState()
const props = defineProps({ const props = defineProps({
bookobj: { bookobj: {
@ -269,8 +286,12 @@ const props = defineProps({
} }
}) })
const prevReadMsgDialogRef = ref(null);// ref
const isDialogOpen = ref(false)
const toolStore = useToolState()
const openDialog = () => {
isDialogOpen.value = true
}
const classWorkFormRef = ref(null); const classWorkFormRef = ref(null);
const entpCourseWorkTypeList = ref([ const entpCourseWorkTypeList = ref([
{value: 0, label: "不限"}, {value: 0, label: "不限"},
@ -351,6 +372,12 @@ const listWorkType = ref(['习题训练', '框架梳理', '课堂展示', '常
// ------- // -------
const boardLoading = ref(false); const boardLoading = ref(false);
const prevReadMsg = reactive({
visible: false,
type: ""
});// msg
// ----------
const flowData = ref({})//
//---------- //----------
const fileLoading = ref(false); // loading const fileLoading = ref(false); // loading
@ -361,6 +388,8 @@ const changeFormType = (val) => {
classWorkForm.worktype = val; classWorkForm.worktype = val;
} }
console.log(props.propsformobj)
console.log(classWorkForm,'==============zizujian===================')
/** /**
* @desc: 根据查询参数查询试题 * @desc: 根据查询参数查询试题
* @return: {*} * @return: {*}
@ -536,7 +565,61 @@ const handleClassWorkQuizAdd = (fromsrc, entpcourseworkid) => {
* 预览资源 * 预览资源
*/ */
const prevRead = async (item) => { const prevRead = async (item) => {
proxy.$refs.prevReadMsgDialogRef.openDialog(item); prevReadMsg.visible = true;
prevReadMsg.type = item.worktype;
if (item.worktype==='课标研读'){
//
listEvaluation({itemkey: 'subject', edusubject: userStore.edusubject, edustage: userStore.edustage}).then(res => {
// TODO -
console.log("课标研读-还未接入",res);
// this.versionObj = res.rows[0];
// //
// if (this.versionObj.fileurl.length > 0) {
// readFile({cluelink: this.versionObj.fileurl}).then(fileres => {
// this.versionObj.bookdata = fileres;
// this.activeTeachResOfStandard = item;
// })
// }
})
}
if (item.worktype==='目标设定'){
// TODO -
// this.activeTeachResOfStandard = item;
}
if (item.worktype==='教材研读'){
// TODO -
// getEvaluation(this.courseObj.evalrootid).then(bookres => {
// this.versionObj = bookres.data;
// if (this.versionObj.fileurl.length > 0) {
// readFile({cluelink: this.versionObj.fileurl}).then(fileres => {
// this.versionObj.bookdata = fileres;
// this.activeTeachResOfStandard = item;
// })
// }
// })
}
if (item.worktype==='框架梳理'){
flowData.value = {};
const { chapterId } = await useGetHomework(props.bookobj.node)
// this.entpcourseid = chapterId
let queryParams = {
entpcourseid: chapterId,
ppttype: '教材分析',
parentid: item.id,
title: '逻辑框架建构',
filetype: 'draw'
}
listEntpcoursefile(queryParams).then(response=>{
if (response.rows.length == 0) {
return;
}
flowData.value = JSON.parse(response.rows[0].datacontent)
})
}
if (item.worktype==='学科定位'){
// TODO -
// this.activeTeachResOfStandard = item;
}
}; };
/** /**
* 添加到作业 * 添加到作业
@ -748,10 +831,7 @@ const handleClassWorkSave = async () => {
} }
}); });
}; };
/**
* 编辑作业内容
* @param cform 表单数据
*/
const editWork = async (cform) =>{ const editWork = async (cform) =>{
// //
cform.id= classWorkForm.id; cform.id= classWorkForm.id;

View File

@ -152,7 +152,7 @@ import useUserStore from '@/store/modules/user'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
import { getCurrentTime, getAfterMinutes } from '@/utils/date' import { getCurrentTime, getAfterMinutes } from '@/utils/date'
import { processList } from '@/hooks/useProcessList' import { processList } from '@/hooks/useProcessList'
import ItemDialogScore from '@/views/classTask/container/classTask/item-dialog-score.vue' import ItemDialogScore from '@/views/classTask/container/item-dialog-score.vue'
// zdg: // zdg:
import quizStats from '@/views/classTask/container/quizStats.vue' import quizStats from '@/views/classTask/container/quizStats.vue'
import ClassOverview from '@/views/classTask/container/classOverview.vue' import ClassOverview from '@/views/classTask/container/classOverview.vue'