作业设计:课程选择太快增加防抖

This commit is contained in:
白了个白 2024-11-11 10:13:41 +08:00
parent f53d7f104c
commit a0bfb5be70
1 changed files with 156 additions and 45 deletions

View File

@ -89,8 +89,8 @@
</el-col> </el-col>
</el-row> </el-row>
<!-- 习题表格 --> <!-- 习题表格 -->
<div class="middle" > <div class="infinite-list-wrapper" >
<el-table :data="workResource.entpCourseWorkList" style="width: 100%; height: 100%;"> <!-- <el-table :data="workResource.entpCourseWorkList" style="width: 100%; height: 100%;">
<el-table-column type="index" width="60" /> <el-table-column type="index" width="60" />
<el-table-column align="left" > <el-table-column align="left" >
<template #header> <template #header>
@ -114,7 +114,42 @@
<el-button type="primary" @click="handleClassWorkQuizAdd('entpcourseworklist', scope.row.id)">添加</el-button> <el-button type="primary" @click="handleClassWorkQuizAdd('entpcourseworklist', scope.row.id)">添加</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table> -->
<ul
v-infinite-scroll="pageLoad"
class="infinite-list"
infinite-scroll-immediate="false"
infinite-scroll-distance='1'
infinite-scroll-delay="1000"
:infinite-scroll-disabled="pageDisabled"
>
<li v-for="(item,index) in workResource.entpCourseWorkList" :key="item" class="infinite-list-item">
<div align="left" style="width: 100%;" >
<!-- <template #header>
<div style="display: flex">
<div style="align-items: center;">题目内容</div>
</div>
</template> -->
<div @click="showExamAnalyseDrawer(item)">
<div>
<span style="width: 20px;">{{ index +1 }}. </span>
<span style="overflow: hidden; text-overflow: ellipsis" v-html="item.titleFormat"></span>
</div>
<div style="overflow: hidden; text-overflow: ellipsis; font-size: 0.9em; margin-top: 6px;" v-html="item.workdescFormat"></div>
<el-col :span="24" style="display: flex">
<div style="font-size: 1em; color: silver; padding-top: 5px">{{ item.entpname }} {{ item.editusername }}</div>
<div style="margin-left: 30px; font-size: 1em; color: silver; padding-top: 5px">{{ item.worktag }}</div>
</el-col>
</div>
</div>
<div align="right" style="width: 72px;">
<el-button type="primary" @click="handleClassWorkQuizAdd('entpcourseworklist', item.id)">添加</el-button>
</div>
</li>
</ul>
<p class="infinite-list-loading" v-if="pageParams.loading">加载中...</p>
<p class="infinite-list-noMove" v-if="pageNoMore">无更多试题...</p>
</div> </div>
<!-- 分页 这里不用--> <!-- 分页 这里不用-->
<!-- <div style="height: 55px;"> <!-- <div style="height: 55px;">
@ -231,14 +266,14 @@
</template> </template>
<script setup> <script setup>
import { onMounted, ref, nextTick, watch, reactive, getCurrentInstance } from 'vue' import { onMounted, ref, nextTick, watch, reactive, getCurrentInstance, computed } from 'vue'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
import { cloneDeep } from 'lodash' import { cloneDeep } from 'lodash'
import { useRouter } from 'vue-router' import { useRouter } from 'vue-router'
import {listEntpcoursework, listEntpcourseworkNew, getEntpcoursework} from '@/api/education/entpCourseWork' import {listEntpcoursework, listEntpcourseworkNew, getEntpcoursework} from '@/api/education/entpCourseWork'
import { addClassworkReturnId } from '@/api/teaching/classwork' import { addClassworkReturnId } from '@/api/teaching/classwork'
import { updateClasswork, listEvaluationclue,readFile, listClassworkeval,delClassworkeval,addClassworkeval,updateClassworkeval } from '@/api/classTask' import { updateClasswork, listEvaluationclue, listClassworkeval,delClassworkeval,addClassworkeval,updateClassworkeval } from '@/api/classTask'
import { listEvaluation } from '@/api/subject' import { listEvaluation } from '@/api/subject'
import { listEntpcoursefile } from '@/api/education/entpcoursefile' import { listEntpcoursefile } from '@/api/education/entpcoursefile'
import { listKnowledgePoint } from "@/api/knowledge/knowledgePoint"; import { listKnowledgePoint } from "@/api/knowledge/knowledgePoint";
@ -250,8 +285,9 @@ 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 prevReadMsgDialog from '@/views/classTask/container/newTask/prevReadMsg-Dialog.vue'
import examDetailsDrawer from '@/components/exam-question/examDetailsDrawer.vue' import examDetailsDrawer from '@/components/exam-question/examDetailsDrawer.vue'
import { JYApiListCT, JYApiListOriginYear, JYApiListSO} from "@/utils/examQuestion/jyeoo" import { JYApiListCT, JYApiListOriginYear, JYApiListSO} from "@/utils/examQuestion/jyeoo"
import {debounce } from '@/utils/comm'
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
@ -365,6 +401,17 @@ const boardLoading = ref(false);
//---------- //----------
const fileLoading = ref(false); // loading const fileLoading = ref(false); // loading
//
const BASE_LIMIT_COUT = 10; //
const pageNoMore = computed( () => workResource.entpCourseWorkList.length >= pageParams.value.originCount+BASE_LIMIT_COUT );
const pageDisabled = computed(() => pageParams.value.loading || pageNoMore.value);
const pageParams = ref({
loading: false, //
originCount: 0, //
isFirst: true, //
})
/*** /***
* 作业类型切换 * 作业类型切换
*/ */
@ -382,6 +429,8 @@ const changeFormType = (val) => {
const handleQueryParamFromEntpCourseWork = (queryType) => { const handleQueryParamFromEntpCourseWork = (queryType) => {
// //
// this.paginationParams = {pageNum: 1,pageSize: 10}; // this.paginationParams = {pageNum: 1,pageSize: 10};
//
initPageParams();
handleQueryFromEntpCourseWork(queryType); handleQueryFromEntpCourseWork(queryType);
}; };
@ -393,8 +442,9 @@ const handleQueryParamFromEntpCourseWork = (queryType) => {
* 1 - 按条件查询 * 1 - 按条件查询
* 2 - 按关键词查询 * 2 - 按关键词查询
*/ */
const handleQueryFromEntpCourseWork= (queryType) => { const handleQueryFromEntpCourseWork= async (queryType) => {
pageParams.value.loading = true;
const queryForm = { const queryForm = {
// //
currentPage: paginationParams.pageNum, currentPage: paginationParams.pageNum,
@ -419,45 +469,35 @@ const handleQueryFromEntpCourseWork= (queryType) => {
} }
//
// pageNum: paginationParams.pageNum,
// pageSize: paginationParams.pageSize,
// ( warn: ) // ( warn: )
// if (this.courseObj.edusubject=='' && this.courseObj.edustage=='') { // if (this.courseObj.edusubject=='' && this.courseObj.edustage=='') {
// // [+][+] // // [+][+]
// queryForm.edusubject = ''; // queryForm.edusubject = '';
// } // }
listEntpcourseworkNew(queryForm).then(entpcourseworkres => { const entpcourseworkres = await listEntpcourseworkNew(queryForm);
// if (queryType == 1 && this.entpCourseWorkQueryParams.worktype == '') { const data = entpcourseworkres.data;
// // , if(data && data.length>0){
// const allowedWorkTypes = ['', '', '', '', '']; // workResource.entpCourseWorkList = entpcourseworkres.data;
// workResource.entpCourseWorkList = entpcourseworkres.rows.filter(item => { // workResource.entpCourseWorkTotal = entpcourseworkres.data.length;
// return !allowedWorkTypes.includes(item.worktype);
// });
// } else {
// workResource.entpCourseWorkList = entpcourseworkres.rows;
// }
if(entpcourseworkres.data&&entpcourseworkres.data.length>0){ data.forEach(item=> {
workResource.entpCourseWorkList = entpcourseworkres.data;
workResource.entpCourseWorkTotal = entpcourseworkres.data.length;
workResource.entpCourseWorkList.forEach(item=> {
if (item.worktype == '选择题') { if (item.worktype == '选择题') {
item.worktype = '单选题' item.worktype = '单选题'
} }
}) })
//
processList(data);
workResource.entpCourseWorkList.push(...data);
// //
processList(workResource.entpCourseWorkList); if (pageParams.value.isFirst) {
}else{ pageParams.value.isFirst = false;
workResource.entpCourseWorkList = []; pageParams.value.originCount = workResource.entpCourseWorkList.length;
workResource.entpCourseWorkTotal = 0
} }
}) }
pageParams.value.loading = false;
} }
// //
@ -878,6 +918,28 @@ const showExamAnalyseDrawer = (row) => {
} }
const pageLoad = async() => {
console.log("加载中...")
paginationParams.pageNum ++ ,
paginationParams.pageSize = 2,
await handleQueryFromEntpCourseWork(0);
}
const initPageParams = () => {
//
workResource.entpCourseWorkList = [];
workResource.entpCourseWorkTotal = 0
//
pageParams.value.loading = false;
pageParams.value.isFirst = true;
pageParams.value.originCount = 0;
//
paginationParams.pageNum = 1;
paginationParams.pageSize = 10;
}
onMounted(async() => { onMounted(async() => {
// //
@ -894,21 +956,30 @@ onMounted(async() => {
}) })
watch(() => props.propsformobj.uniquekey, (newVal) => { const debounceQueryData = debounce(() => {
console.log(props.propsformobj,'propsformobj') console.log("防抖 加载数据中...")
if(props.propsformobj.uniquekey){ //
classWorkForm.uniquekey = props.propsformobj.uniquekey?cloneDeep(props.propsformobj.uniquekey):''; // initPageParams();
}
})
watch(() => props.bookobj.levelSecondId, (newVal) => {
console.log(props.bookobj,'课程选择')
// //
handleQueryFromEntpCourseWork(0); handleQueryFromEntpCourseWork(0);
// //
getQueryFromEvaluationclue(); getQueryFromEvaluationclue();
// //
getEntpCourseWorkPointList(); getEntpCourseWorkPointList();
}, 1000);
watch(() => props.propsformobj.uniquekey, (newVal) => {
console.log(props.propsformobj,'propsformobj')
if(props.propsformobj.uniquekey){
classWorkForm.uniquekey = props.propsformobj.uniquekey?cloneDeep(props.propsformobj.uniquekey):''; //
}
}) })
watch(() => props.bookobj.levelSecondId, (newVal, oldVal) => {
console.log(props.bookobj,'课程选择')
debounceQueryData();
})
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@ -996,6 +1067,46 @@ watch(() => props.bookobj.levelSecondId, (newVal) => {
box-sizing: border-box; box-sizing: border-box;
background-color: rgb(231, 231, 231) background-color: rgb(231, 231, 231)
} }
.infinite-list-wrapper{
height: 100%;
text-align: center;
overflow: auto;
.infinite-list {
padding: 0;
margin: 0;
list-style: none;
.infinite-list-item {
display: flex;
align-items: center;
//justify-content: center;
//height: 50px;
//background: var(--el-color-primary-light-9);
padding: 10px;
border-top: 1px solid #eee;
//color: var(--el-color-primary);
}
.infinite-list-item:hover {
background-color: #F3F5F8;
}
.infinite-list-item + .list-item {
margin-top: 10px;
}
}
.infinite-list-loading{
padding: 10px 0;
border-top: 1px solid #eee;
color: red;
}
.infinite-list-noMove{
padding: 10px 0;
border-top: 1px solid #eee;
color: #999;
}
}
} }
</style> </style>