Merge branch 'main' into zouyf_dev
This commit is contained in:
commit
2e81c706b1
|
@ -143,6 +143,8 @@ export class PPTApi {
|
|||
static updateSlide(data: object): Promise<Boolean> {
|
||||
return new Promise(async (resolve, reject) => {
|
||||
const res: Result = await API_entpcoursefile.updateEntpcoursefileNew(data)
|
||||
console.log(data,'data');
|
||||
console.log(res,'dresata');
|
||||
if (res.code === 200) {
|
||||
resolve(true)
|
||||
} else msgUtils.msgError(res.msg || '更新失败');resolve(false)
|
||||
|
|
|
@ -67,8 +67,6 @@
|
|||
|
||||
<div class="page-number">幻灯片 {{slideIndex + 1}} / {{slides.length}}</div>
|
||||
|
||||
<!-- 引入活动的列表页面 -->
|
||||
<Active ref="activeRef" v-show="false"/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
@ -88,7 +86,6 @@ import ThumbnailSlide from '../../../views/components/ThumbnailSlide/index.vue'
|
|||
import LayoutPool from './LayoutPool.vue'
|
||||
import Popover from '../../../components/Popover.vue'
|
||||
import Draggable from 'vuedraggable'
|
||||
import Active from '../Toolbar/ElementStylePanel/Active/index.vue'
|
||||
|
||||
const mainStore = useMainStore()
|
||||
const slidesStore = useSlidesStore()
|
||||
|
@ -127,7 +124,6 @@ const {
|
|||
updateSectionTitle,
|
||||
} = useSectionHandler()
|
||||
|
||||
const activeRef = ref()
|
||||
|
||||
// 页面被切换时
|
||||
const thumbnailsRef = ref<InstanceType<typeof Draggable>>()
|
||||
|
@ -151,8 +147,6 @@ watch(() => slideIndex.value, () => {
|
|||
|
||||
// 切换页面
|
||||
const changeSlideIndex = (index: number) => {
|
||||
console.log(workItem.value[index],'hasSection');
|
||||
activeRef.value.clickPPTList(workItem.value[index])
|
||||
|
||||
mainStore.setActiveElementIdList([])
|
||||
|
||||
|
|
|
@ -32,12 +32,12 @@
|
|||
<!-- 作业列表 -->
|
||||
<div class="c-apt-r">
|
||||
<!-- 显示-作业内容 -->
|
||||
<template v-for="(item, index) in workList">
|
||||
<template v-for="(item, index) in workList" :key="index">
|
||||
<div class="item">
|
||||
<div class="item-title">
|
||||
<el-tag :type="getTagType(item.worktype) || 'primary'">{{item.worktype}}</el-tag>
|
||||
<el-tooltip :content="item.title||item.uniquekey" placement="top">
|
||||
<div class="tt">{{item.title||item.uniquekey}}</div>
|
||||
<el-tooltip :content="item.evaltitle" placement="top">
|
||||
<div class="tt">{{item.evaltitle}}</div>
|
||||
</el-tooltip>
|
||||
<el-button class="btn-del" type="danger" link @click="handleRemoveDemoActivityClassWork(item)">删除</el-button>
|
||||
</div>
|
||||
|
@ -45,8 +45,10 @@
|
|||
</template>
|
||||
</div>
|
||||
<!-- // 推送作业 -->
|
||||
<el-dialog v-model="dialogVisible" append-to-body :show-close="false" width="80%">
|
||||
<NewClassTsakAssign :currentCourse='currentCourse'/>
|
||||
<el-dialog v-model="dialogVisible" append-to-body :show-close="false" width="80%" height="500">
|
||||
<el-scrollbar height="500">
|
||||
<NewClassTsakAssign :currentCourse='currentCourse' @getData="getData" />
|
||||
</el-scrollbar>
|
||||
</el-dialog>
|
||||
<!-- 活动引用 -->
|
||||
<el-dialog
|
||||
|
@ -55,9 +57,9 @@
|
|||
append-to-body
|
||||
:show-close="false"
|
||||
width="40%"
|
||||
@selection-change="handleSelectionChange">
|
||||
<el-table :data="taskList" style="width: 100%" height="500">
|
||||
<el-table-column type="selection" :selectable="selectable" width="55" />
|
||||
>
|
||||
<el-table :data="taskList" style="width: 100%" height="500" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" :selectable="selectable"/>
|
||||
<el-table-column prop="evaltitle" label="活动名称" width="150" />
|
||||
<el-table-column prop="worktype" label="活动类型" width="120" sortable>
|
||||
<template #default="scope">
|
||||
|
@ -68,78 +70,125 @@
|
|||
</el-table>
|
||||
<template #footer>
|
||||
<el-button @click="activeVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="save">确 定</el-button>
|
||||
<el-button type="primary" @click="savePPtData">确 定</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
<script setup>
|
||||
import { ref, reactive, onMounted, onBeforeMount, defineExpose } from 'vue'
|
||||
<script setup lang="ts">
|
||||
import { ref, reactive, onMounted, nextTick, watch } from 'vue'
|
||||
import Divider from '../../../../../components/Divider.vue'
|
||||
import {listEntpcoursefile} from '@/api/education/entpcoursefile'
|
||||
import {homeworklist} from '@/api/teaching/classwork'
|
||||
import { listEntpcoursefile } from '@/api/education/entpcoursefile'
|
||||
import { homeworklist } from '@/api/teaching/classwork'
|
||||
import { processList } from "@/hooks/useProcessList";
|
||||
import { listEntpcoursework } from "@/api/classTask/index";
|
||||
import { ElMessageBox } from 'element-plus'
|
||||
import { ElMessageBox,ElMessage } from 'element-plus'
|
||||
import NewClassTsakAssign from '@/views/classTask/newClassTaskAssign/index.vue'
|
||||
import { sessionStore } from '@/utils/store'
|
||||
import { useGetHomework } from '@/hooks/useGetHomework'
|
||||
const currentCourse = reactive({
|
||||
textbookId:0,
|
||||
levelFirstId:0,
|
||||
levelSecondId:0,
|
||||
coursetitle:'',
|
||||
node:{},
|
||||
id:1,
|
||||
worktype:'',
|
||||
})
|
||||
const dataList = ref([])
|
||||
const dialogVisible = ref(false)
|
||||
const tasklist_loading = ref(false)
|
||||
// 活动列表
|
||||
const taskList = ref([])
|
||||
// 活动引用的弹窗
|
||||
const activeVisible = ref(false)
|
||||
const params = reactive({
|
||||
parentid:14766,
|
||||
pageSize:500,
|
||||
orderby:'fileidx'
|
||||
})
|
||||
const type = ref([
|
||||
{
|
||||
label:'习题训练',
|
||||
value:'danger'
|
||||
},
|
||||
{
|
||||
label:'课堂展示',
|
||||
value:'success'
|
||||
},
|
||||
{
|
||||
label:'常规作业',
|
||||
value:'primary'
|
||||
},
|
||||
])
|
||||
// 作业列表
|
||||
const workList = ref([])
|
||||
const selectable = (row,index) => {
|
||||
console.log(row,index,'row,index');
|
||||
return true
|
||||
import { PPTApi } from '../../../../../api/index'
|
||||
import { storeToRefs } from 'pinia'
|
||||
import {useSlidesStore} from '../../../../../store'
|
||||
const slidesStore = useSlidesStore()
|
||||
const { slides, slideIndex, currentSlide, workItem } = storeToRefs(slidesStore)
|
||||
|
||||
interface CourseNode {
|
||||
rootid: number;
|
||||
parentNode: { id: number };
|
||||
id: number;
|
||||
itemtitle: string;
|
||||
}
|
||||
|
||||
const clickPPTList = (item) => {
|
||||
console.log(item,'点击了')
|
||||
workList.value = []
|
||||
let datacontent = item.datacontent;
|
||||
let pptJson = "";
|
||||
if(typeof datacontent === 'string') pptJson = JSON.parse(datacontent)
|
||||
if(pptJson&&pptJson[0]&&pptJson[0].classworkList) {
|
||||
homeworklist({ids:pptJson[0].classworkList, pageSize: 100}).then( async res => {
|
||||
await formatClassWorkFile(res.rows)
|
||||
})
|
||||
}
|
||||
interface CurrentCourse {
|
||||
textbookId: number;
|
||||
levelFirstId: number;
|
||||
levelSecondId: number;
|
||||
coursetitle: string;
|
||||
node: CourseNode;
|
||||
id: number;
|
||||
worktype: string;
|
||||
}
|
||||
const formatClassWorkFile = async (postData) => {
|
||||
return new Promise(async (resolve, reject)=>{
|
||||
|
||||
interface Params {
|
||||
parentid: number;
|
||||
pageSize: number;
|
||||
orderby: string;
|
||||
}
|
||||
|
||||
interface WorkType {
|
||||
label: string;
|
||||
value: string;
|
||||
}
|
||||
|
||||
interface WorkItem {
|
||||
status: string;
|
||||
activityContent?: string;
|
||||
worktype: string;
|
||||
quizlist?: { id: number }[];
|
||||
workcodes: string;
|
||||
base64?: string;
|
||||
prevData?: any;
|
||||
id: number;
|
||||
evaltitle?: string; // 添加 evaltitle 属性
|
||||
}
|
||||
|
||||
const currentCourse = reactive<CurrentCourse>({
|
||||
textbookId: 0,
|
||||
levelFirstId: 0,
|
||||
levelSecondId: 0,
|
||||
coursetitle: '',
|
||||
node: {} as CourseNode,
|
||||
id: 1,
|
||||
worktype: '',
|
||||
})
|
||||
|
||||
const dataList = ref<WorkItem[]>([])
|
||||
const dialogVisible = ref<boolean>(false)
|
||||
const tasklist_loading = ref<boolean>(false)
|
||||
|
||||
// 活动列表
|
||||
const taskList = ref<WorkItem[]>([])
|
||||
|
||||
// 活动引用的弹窗
|
||||
const activeVisible = ref<boolean>(false)
|
||||
|
||||
const params = reactive<Params>({
|
||||
parentid: 14766,
|
||||
pageSize: 500,
|
||||
orderby: 'fileidx'
|
||||
})
|
||||
|
||||
const type = ref<WorkType[]>([
|
||||
{
|
||||
label: '习题训练',
|
||||
value: 'danger'
|
||||
},
|
||||
{
|
||||
label: '课堂展示',
|
||||
value: 'success'
|
||||
},
|
||||
{
|
||||
label: '常规作业',
|
||||
value: 'primary'
|
||||
},
|
||||
])
|
||||
|
||||
const objItem = ref<any>({})
|
||||
// 作业列表
|
||||
const workList = ref<WorkItem[]>([])
|
||||
|
||||
// 获取所选择的作业列表
|
||||
const selectedWorkList = ref<WorkItem[]>([])
|
||||
|
||||
|
||||
const paramData = ref<{ id: number, activityContent: string }>({} as { id: number, activityContent: string })
|
||||
|
||||
const selectable = (row: WorkItem, index: number): boolean => {
|
||||
return row.status === '10';
|
||||
};
|
||||
|
||||
|
||||
const formatClassWorkFile = async (postData: WorkItem[]): Promise<void> => {
|
||||
for (let i = 0; i < postData.length; i++) {
|
||||
let item = postData[i];
|
||||
switch (item.worktype) {
|
||||
|
@ -147,81 +196,120 @@ const formatClassWorkFile = async (postData) => {
|
|||
}
|
||||
break;
|
||||
case '习题训练': {
|
||||
item.entpcourseworklistarray = item.entpcourseworklist?JSON.parse('['+item.entpcourseworklist+']'):[];
|
||||
let workIds = item.entpcourseworklistarray.map(items=>items.id).join(',')
|
||||
let ress = await listEntpcoursework({ids:workIds})
|
||||
processList(ress.rows)
|
||||
item.workShowList = ress.rows
|
||||
console.log(item,'item');
|
||||
// let workIds = item.quizlist!.map(items => items.id).join(',');
|
||||
// let ress = await listEntpcoursework({ ids: workIds });
|
||||
// const arr = ress.rows.map((item:{id:number}) => {
|
||||
// return item.id
|
||||
// })
|
||||
|
||||
// processList(ress.rows);
|
||||
}
|
||||
break;
|
||||
case '课堂展示': {
|
||||
item.base64 = JSON.parse(item.workcodes).base64
|
||||
// item.base64 = JSON.parse(item.workcodes).base64;
|
||||
}
|
||||
break;
|
||||
case '常规作业': {
|
||||
item.prevData = JSON.parse(item.workcodes)
|
||||
// item.prevData = JSON.parse(item.workcodes);
|
||||
}
|
||||
}
|
||||
const arr = paramData.value.activityContent.split(',')
|
||||
arr.push(item.id.toString())
|
||||
await PPTApi.updateSlide(paramData.value)
|
||||
addWorkList(item)
|
||||
}
|
||||
await nextTick();
|
||||
}
|
||||
// 添加的活动回显到页面上面去
|
||||
const addWorkList = (item: WorkItem) => {
|
||||
workList.value.push(item)
|
||||
}
|
||||
resolve()
|
||||
})
|
||||
}
|
||||
// 删除作业
|
||||
const handleRemoveDemoActivityClassWork = (item) => {
|
||||
const handleRemoveDemoActivityClassWork = (item: WorkItem) => {
|
||||
ElMessageBox.confirm('是否确认删除?')
|
||||
.then(function () {
|
||||
.then(() => {
|
||||
workList.value.splice(workList.value.indexOf(item), 1);
|
||||
})
|
||||
.catch(() => {});
|
||||
.catch(() => { });
|
||||
}
|
||||
|
||||
// 获取tag的样式
|
||||
const getTagType = (worktype) => {
|
||||
return type.value.find(item => item.label == worktype).value
|
||||
const getTagType = (worktype: string): string => {
|
||||
return type.value.find(item => item.label === worktype)!.value
|
||||
}
|
||||
|
||||
// 获取活动引用的列表数据
|
||||
const initHomeWork = async()=> {
|
||||
const initHomeWork = async () => {
|
||||
tasklist_loading.value = true;
|
||||
const { res, chapterId } = await useGetHomework(sessionStore.get('subject.curNode'));
|
||||
taskList.value = res;
|
||||
tasklist_loading.value = false;
|
||||
}
|
||||
|
||||
// 多选活动引用
|
||||
const handleSelectionChange = (val) => {
|
||||
console.log(val,'多选')
|
||||
const handleSelectionChange = (val: WorkItem[]) => {
|
||||
selectedWorkList.value = [...val]
|
||||
}
|
||||
|
||||
// 打开添加作业活动
|
||||
const showDialog = (item) => {
|
||||
const showDialog = (item: string) => {
|
||||
currentCourse.worktype = item
|
||||
dialogVisible.value = true
|
||||
}
|
||||
|
||||
const openList = () => {
|
||||
activeVisible.value = true
|
||||
initHomeWork()
|
||||
}
|
||||
|
||||
// 添加活动引用列表作业
|
||||
const save = () => {
|
||||
console.log('添加了')
|
||||
const savePPtData = async () => {
|
||||
if (selectedWorkList.value.length === 0) {
|
||||
ElMessage.warning('请选择活动')
|
||||
return
|
||||
}
|
||||
const arr = selectedWorkList.value.map(item => item.id)
|
||||
// 应该是新加而不是覆盖
|
||||
paramData.value.activityContent = arr.join(',')
|
||||
await PPTApi.updateSlide(paramData.value)
|
||||
activeVisible.value = false
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
// console.log(sessionStore.get('subject.curBook'),'curBook');
|
||||
// console.log(sessionStore.get('subject.subjectTree'),'subjectTree');
|
||||
// console.log(sessionStore.get('subject.bookList'),'bookList');
|
||||
console.log(sessionStore.get('subject.curNode'),'curNode');
|
||||
const curNode = sessionStore.get('subject.curNode')
|
||||
const curNode = sessionStore.get('subject.curNode') as CourseNode
|
||||
currentCourse.textbookId = curNode.rootid
|
||||
currentCourse.levelFirstId = curNode.parentNode.id
|
||||
currentCourse.levelSecondId = curNode.id
|
||||
currentCourse.coursetitle = curNode.itemtitle,
|
||||
currentCourse.coursetitle = curNode.itemtitle
|
||||
currentCourse.node = curNode
|
||||
listEntpcoursefile(params).then((res) => {
|
||||
listEntpcoursefile(params).then((res: { rows: WorkItem[] }) => {
|
||||
dataList.value = [...res.rows]
|
||||
})
|
||||
objItem.value = workItem.value[slideIndex.value]
|
||||
getCurrentPPtData()
|
||||
})
|
||||
defineExpose({
|
||||
clickPPTList
|
||||
watch(() => slideIndex.value, () => {
|
||||
getCurrentPPtData()
|
||||
})
|
||||
// 获取当前ppt页的数据
|
||||
const getCurrentPPtData = async () => {
|
||||
workList.value = []
|
||||
objItem.value = workItem.value[slideIndex.value]
|
||||
paramData.value.id = objItem.value.id
|
||||
if (objItem.value?.activityContent) {
|
||||
paramData.value.activityContent = objItem.value?.activityContent
|
||||
const res = await homeworklist({ ids: objItem.value?.activityContent, pageSize: 100 })
|
||||
await formatClassWorkFile(res.rows)
|
||||
}
|
||||
}
|
||||
|
||||
// 接收习题训练的值
|
||||
const getData = async (data: WorkItem) => {
|
||||
console.log(data, 'data')
|
||||
await formatClassWorkFile([data])
|
||||
}
|
||||
|
||||
</script>
|
||||
<style scoped lang="scss">
|
||||
.buttonDiv{
|
||||
|
|
|
@ -126,7 +126,7 @@
|
|||
</div>
|
||||
</template>
|
||||
<script setup>
|
||||
import { onMounted, ref, watch, reactive, getCurrentInstance, nextTick } from 'vue'
|
||||
import { onMounted, ref, watch, reactive, getCurrentInstance, nextTick, defineEmits } from 'vue'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import { cloneDeep } from 'lodash'
|
||||
import { Plus, Delete } from '@element-plus/icons-vue'
|
||||
|
@ -156,6 +156,7 @@ const { proxy } = getCurrentInstance()
|
|||
const props = defineProps({
|
||||
currentCourse: Object,
|
||||
})
|
||||
const emits = defineEmits(['getData'])
|
||||
const isShow = ref(false)
|
||||
|
||||
const propsQueryCourseObj = route.query.courseObj;//作业布置的内容对象
|
||||
|
@ -460,10 +461,8 @@ const handleClassWorkFormQuizRemove = (index) =>{
|
|||
await nextTick(); // 确保DOM更新完成
|
||||
proxy.$refs["classWorkFormRef"].validate(async valid => {
|
||||
if (valid) {
|
||||
//
|
||||
// const { chapterId } = await useGetHomework(courseObj.node)
|
||||
// this.entpcourseid = chapterId
|
||||
|
||||
const cform = {
|
||||
id: 0,
|
||||
workdate: classWorkForm.workdate, // //作业类型?web端这里貌似没有这个时间
|
||||
|
@ -507,7 +506,7 @@ const handleClassWorkFormQuizRemove = (index) =>{
|
|||
cform.workcodes = JSON.stringify({json: canvasJson, base64: canvasBase64});
|
||||
cform.entpcourseworklist = JSON.stringify([{'id':-1, 'score': '10'}]);
|
||||
try {
|
||||
addClassworkReturnId(cform).then(() => {
|
||||
addClassworkReturnId(cform).then((res) => {
|
||||
ElMessage({ type: 'success', message: '作业设计成功!'});
|
||||
// 重置提交表单
|
||||
classWorkForm.worktype = "课堂展示";
|
||||
|
@ -519,7 +518,8 @@ const handleClassWorkFormQuizRemove = (index) =>{
|
|||
// 情况选择的资源缓存
|
||||
classWorkForm.chooseWorkLists = []; // 框架梳理list
|
||||
classWorkForm.whiteboardObj = ''; // ? // 清空白板
|
||||
|
||||
classWorkForm.id = res
|
||||
emits('getData',classWorkForm)
|
||||
boardLoading.value = false
|
||||
})
|
||||
} finally {
|
||||
|
@ -531,7 +531,7 @@ const handleClassWorkFormQuizRemove = (index) =>{
|
|||
cform.workcodes = JSON.stringify(classWorkForm.fileHomeworkList);
|
||||
cform.entpcourseworklist = JSON.stringify([{'id':-2, 'score': '10'}]);
|
||||
try {
|
||||
addClassworkReturnId(cform).then(() => {
|
||||
addClassworkReturnId(cform).then((res) => {
|
||||
ElMessage({ type: 'success', message: '作业设计成功!'});
|
||||
// 重置提交表单
|
||||
classWorkForm.worktype = "常规作业";
|
||||
|
@ -543,7 +543,8 @@ const handleClassWorkFormQuizRemove = (index) =>{
|
|||
classWorkForm.chooseWorkLists = []; // 框架梳理list
|
||||
classWorkForm.whiteboardObj = ''; // ? // 清空白板
|
||||
classWorkForm.fileHomeworkList = []; // 常规作业list
|
||||
|
||||
classWorkForm.id = res
|
||||
emits('getData',classWorkForm)
|
||||
fileLoading.value = false
|
||||
})
|
||||
} finally {
|
||||
|
@ -574,7 +575,7 @@ const handleClassWorkFormQuizRemove = (index) =>{
|
|||
console.log(cform,'提交的数据');
|
||||
if(cform.entpcourseworklist == '') return ElMessage({ type: 'warning', message: '请先添加作业资源!'});
|
||||
|
||||
addClassworkReturnId(cform).then(workres => {
|
||||
addClassworkReturnId(cform).then(res => {
|
||||
ElMessage({ type: 'success', message: '作业设计成功!'});
|
||||
// 重置提交表单
|
||||
classWorkForm.worktype = "习题训练";
|
||||
|
@ -585,6 +586,8 @@ const handleClassWorkFormQuizRemove = (index) =>{
|
|||
// 情况选择的资源缓存
|
||||
classWorkForm.chooseWorkLists = [];
|
||||
classWorkForm.whiteboardObj = ''; // ? // 清空白板
|
||||
classWorkForm.id = res
|
||||
emits('getData',classWorkForm)
|
||||
// refresh the list
|
||||
//这里分离了,所以不需要更新表单数据了
|
||||
// this.getClassWorkAllList();
|
||||
|
@ -604,6 +607,7 @@ const handleClassWorkFormQuizRemove = (index) =>{
|
|||
// // 首页进入的,跳转到作业布置页面
|
||||
// router.push({ path: '/classTaskAssign' });
|
||||
// }
|
||||
|
||||
}
|
||||
});
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue