Merge remote-tracking branch 'origin/main'

This commit is contained in:
朱浩 2024-12-20 16:52:18 +08:00
commit 1983dafbba
16 changed files with 1253 additions and 27 deletions

View File

@ -8,7 +8,7 @@
http-equiv="Content-Security-Policy"
content="default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:"
/> -->
<meta http-equiv="Content-Security-Policy" content="connect-src * blob: data:; default-src 'self' https://wzyzoss.eos-chongqing-3.cmecloud.cn/; script-src 'self' 'unsafe-eval' http://www.wiris.net 'unsafe-inline'; style-src 'self' 'unsafe-inline' http://www.wiris.net; media-src * blob:;img-src * 'self' data: blob:;font-src 'self' http://www.wiris.net;" />
<meta http-equiv="Content-Security-Policy" content="connect-src * blob: data:; frame-src 'self' *; default-src 'self' https://wzyzoss.eos-chongqing-3.cmecloud.cn/; script-src 'self' 'unsafe-eval' http://www.wiris.net 'unsafe-inline'; style-src 'self' 'unsafe-inline' http://www.wiris.net; media-src * blob:;img-src * 'self' data: blob:;font-src 'self' http://www.wiris.net;" />
</head>

View File

@ -59,6 +59,7 @@ export class PPTApi {
// 获取所有幻灯片列表 isUpdate为true不更新
static getSlideList(parentid: (Number | String),isUpdate?:Boolean): Promise<Boolean> {
const classcourse = sessionStore.get('curr.classcourse') // 课堂信息
return new Promise(async (resolve, reject) => {
const params: object = { parentid, orderByColumn: 'fileidx', isAsc: 'asc', pageSize: 9999 }
const res: Result = await API_entpcoursefile.listEntpcoursefileNew(params)
@ -79,12 +80,10 @@ export class PPTApi {
// 活动列表处理
// const workList = (res.rows || []).map(o => o.activityContent)
const workItem = res.rows ? [...res.rows] : []
// 写入作业列表数据
// slidesStore.setWorkList(workList)
// 获取所有的pptlist的数据
slidesStore.setWorkItem(workItem)
this.updateWorkList()
// 没有上课时调用-作业列表
if(!classcourse) this.updateWorkList()
resolve(true)
} else msgUtils.msgError(res.msg || '获取数据失败');resolve(false)
})
@ -232,10 +231,22 @@ export class PPTApi {
})
}
// 批量更新缩略图-异步
static batchUpdateThumUrl() {
return new Promise(async resolve => {
const list = slidesStore.workItem || []
if (!list.length) return resolve()
const upList = []
for (const [ind,o] of list.entries()) {
const thumUrl = await this.getSlideThumUrl(ind)
}
})
}
// thumbnail-slide thumbnail 缩略图
static getSlideThumUrl(): Promise<Boolean> {
static getSlideThumUrl(index?:number): Promise<Boolean> {
return nextTick().then(async() => {
const slideIndex = slidesStore.slideIndex
const slideIndex = index ?? slidesStore.slideIndex
const elements = document.querySelectorAll('.thumbnail-slide')
if (elements.length && slideIndex >= 0) {
const element = elements[slideIndex]

View File

@ -25,6 +25,12 @@
<div style="margin-top: 10px">常规作业</div>
</div>
</el-button>
<el-button size="small" title="科学实验" text style="height: 54px;margin-left: 0" @click="showDialog('科学实验')">
<div class="buttonDiv">
<svg width="26" height="26" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" fill="#646473"><path d="M901.705143 511.926857h-55.954286a8.045714 8.045714 0 0 1-8.045714-8.045714V183.881143H181.686857v656.091428H501.76c4.388571 0 8.045714 3.510857 8.045714 7.899429v56.027429c0 4.388571-3.657143 8.045714-8.045714 8.045714H141.750857a31.963429 31.963429 0 0 1-32.036571-32.036572V143.872c0-17.627429 14.336-31.963429 32.036571-31.963429H877.714286c17.700571 0 32.036571 14.336 32.036571 31.963429V503.954286c0 4.388571-3.657143 8.045714-8.045714 8.045714zM731.428571 911.945143a36.571429 36.571429 0 0 1-36.571428-36.571429v-109.714285H585.142857a36.571429 36.571429 0 0 1 0-73.142858h109.714286v-109.714285a36.571429 36.571429 0 0 1 73.142857 0v109.714285H877.714286a36.571429 36.571429 0 1 1 0 73.142858h-109.714286v109.714285a36.571429 36.571429 0 0 1-36.571429 36.571429z" p-id="22184"></path></svg>
<div style="margin-top: 10px">科学实验</div>
</div>
</el-button>
</div>
<Divider />
@ -157,6 +163,10 @@ const type = ref<WorkType[]>([
{
label: '框架梳理',
value: 'primary'
},
{
label: '科学实验',
value: 'primary'
}
])

View File

@ -36,8 +36,8 @@
</div>
<div
class="tools-right" :class="{ 'visible': rightToolsVisible }"
@mouseleave="rightToolsVisible = false"
@mouseenter="rightToolsVisible = true"
@mouseleave="toolTrigger('leave')"
@mouseenter="toolTrigger('enter')"
>
<div class="content">
<div class="tool-btn page-number" @click="slideThumbnailModelVisible = true">幻灯片 {{slideIndex + 1}} / {{slides.length}}</div>
@ -50,6 +50,10 @@
<IconPower class="tool-btn" v-tooltip="'结束放映'" @click="exitScreening()" />
<IconPower class="tool-btn close" v-if="chat.groupid" v-tooltip="'结束课堂'" @click="exitCourse()" />
</div>
<div :class="['tools-icon',{opacity:iconHide}]" @click.stop="toolTrigger('icon')">
<circle-double-down v-if="rightToolsVisible" theme="outline" size="30" fill="#409EFF"/>
<circle-double-up v-else="!rightToolsVisible" theme="outline" size="30" fill="#E6A23C"/>
</div>
</div>
</div>
</template>
@ -71,6 +75,7 @@ import WritingBoardTool from './WritingBoardTool.vue'
import CountdownTimer from './CountdownTimer.vue'
import emitter from '@/utils/mitt';
import Chat from '../../api/chat' //
import { CircleDoubleDown, CircleDoubleUp } from '@icon-park/vue-next' // icon-park
const props = defineProps<{
changeViewMode: (mode: 'base' | 'presenter') => void
@ -103,12 +108,15 @@ const { exitScreening } = useScreening()
const { fullscreenState, manualExitFullscreen } = useFullscreen()
const chat:any = Chat() //
const screenStore =useScreenStore()
const rightToolsVisible = ref(false)
const writingBoardToolVisible = ref(false)
const timerlVisible = ref(false)
const slideThumbnailModelVisible = ref(false)
const laserPen = ref(false)
const screenStore =useScreenStore()
const timer = ref(0) //
const iconHide = ref(false) //
const timerId = ref(null) // id
const contextmenus = (): ContextmenuItem[] => {
return [
{
@ -191,6 +199,30 @@ const contextmenus = (): ContextmenuItem[] => {
]
}
const toolTrigger = (type:string) => {
const curT = Date.now()
if (curT - timer.value < 200) return
iconHide.value = false //
if (timerId.value) clearTimeout(timerId.value) //
switch (type) {
case 'icon': //
timer.value = curT
rightToolsVisible.value = !rightToolsVisible.value
break
case 'enter': //
timer.value = curT
rightToolsVisible.value = true
break
case 'leave': //
rightToolsVisible.value = false
break
default:
break
}
timerId.value = setTimeout(() => { //
iconHide.value = true //
}, 2000)
}
//
const exitCourse = async () => {
// console.log('', chat)
@ -253,6 +285,18 @@ const exitCourse = async () => {
top: -66px;
}
.tools-icon{
position: absolute;
right: 8px;
top: -35px;
z-index: 1;
cursor: pointer;
transition: opacity $transitionDelay;
&.opacity{
opacity: .35;
}
}
.content {
width: 100%;
height: 100%;

View File

@ -68,7 +68,7 @@ export function textSensitiveWord(data) {
// 图片上传资源库
export function uploadPicture(data) {
return axios({
url: '/dev-api/smarttalk/file/upload',
url: import.meta.env.VITE_APP_BASE_API + '/smarttalk/file/upload',
method: 'post',
headers: {
'Accept': '*/*',

View File

@ -32,7 +32,7 @@ export const editListItem = (row, courseObj) => {
worktype: '', // 设计中的作业类型
quizlist: [], // 设计中的试题列表
chooseWorkLists: [],// 设计中的框架梳理list
fileHomeworkList: [],// 设计中的常规作业list
fileHomeworkList: [],//TODO 暂时共用这个字段(新增了 科学实验) 设计中的常规作业list
whiteboardObj: '',// 设计中的课堂展示对象
question: '', // 设计中的[课堂展示]的问题
};
@ -58,7 +58,7 @@ export const editListItem = (row, courseObj) => {
if (row.worktype == '框架梳理') {
// 框架梳理对应只有一个内容
// 框架梳理对应只有一个内容
getEvaluationclue(listCourseWork[0].id).then(res => {
if ( res.data==null || res.data==undefined ) {
return ;
@ -112,6 +112,16 @@ export const editListItem = (row, courseObj) => {
return resolve(classtaskObj);
}
}
else if (row.worktype == '科学实验') {
if(isJson(row.workcodes)){
classtaskObj.fileHomeworkList = JSON.parse(row.workcodes);
//
// console.log('科学实验', classtaskObj);
// 更新默认的科学实验( 学段 学科 以及实验科目)
console.log('科学实验', classtaskObj);
return resolve(classtaskObj);
}
}
}
});
}

View File

@ -94,6 +94,8 @@ const getHomeWorkList = async () => {
res.rows[i].workclass = 'info';
} else if (res.rows[i].worktype == '习题训练') {
res.rows[i].workclass = 'danger';
} else if (res.rows[i].worktype == '科学实验') {
res.rows[i].workclass = 'danger';
} else {
res.rows[i].workclass = 'primary';
}

View File

@ -5,6 +5,11 @@ import { JYApiListCT, JYApiListOriginYear, JYApiListSO} from "@/utils/examQuesti
const useClassTaskStore = defineStore('classTask',{
state: () => ({
experimentObj:{
edustage: '小学', // 教育阶段
edusubject: '', // 学科
experimentList: [], // 实验科目列表
},
isOpenQuestUploadView: false, // 是否打开习题上传的页面
classListIds: [],
entpCourseWorkTypeList: [

View File

@ -0,0 +1,734 @@
{
"title": "实验",
"data": {
"primary":[
{
"label": "数量比较",
"fileurl": "https://phet.colorado.edu/sims/html/number-compare/latest/number-compare_zh_CN.html",
"subject": "math"
},
{
"label": "数字游戏",
"fileurl": "https://phet.colorado.edu/sims/html/number-play/latest/number-play_zh_CN.html",
"subject": "math"
},
{
"label": "数轴:距离",
"fileurl": "https://phet.colorado.edu/sims/html/number-line-distance/latest/number-line-distance_zh_CN.html",
"subject": "math"
},
{
"label": "比率和比例",
"fileurl": "https://phet.colorado.edu/sims/html/ratio-and-proportion/latest/ratio-and-proportion_zh_CN.html",
"subject": "math"
},
{
"label": "数轴:运算",
"fileurl": "https://phet.colorado.edu/sims/html/number-line-operations/latest/number-line-operations_zh_CN.html",
"subject": "math"
},
{
"label": "数轴:整数",
"fileurl": "https://phet.colorado.edu/sims/html/number-line-integers/latest/number-line-integers_zh_CN.html",
"subject": "math"
},
{
"label": "向量的和:等式",
"fileurl": "https://phet.colorado.edu/sims/html/vector-addition-equations/latest/vector-addition-equations_zh_CN.html",
"subject": "math"
},
{
"label": "向量相加",
"fileurl": "https://phet.colorado.edu/sims/html/vector-addition/latest/vector-addition_zh_CN.html",
"subject": "math"
},
{
"label": "曲线拟合",
"fileurl": "https://phet.colorado.edu/sims/html/curve-fitting/latest/curve-fitting_zh_CN.html",
"subject": "math"
},
{
"label": "分数:带分数",
"fileurl": "https://phet.colorado.edu/sims/html/fractions-mixed-numbers/latest/fractions-mixed-numbers_zh_CN.html",
"subject": "math"
},
{
"label": "分数:入门",
"fileurl": "https://phet.colorado.edu/sims/html/fractions-intro/latest/fractions-intro_zh_CN.html",
"subject": "math"
},
{
"label": "构建一个分数",
"fileurl": "https://phet.colorado.edu/sims/html/build-a-fraction/latest/build-a-fraction_zh_CN.html",
"subject": "math"
},
{
"label": "分数:等式",
"fileurl": "https://phet.colorado.edu/sims/html/fractions-equality/latest/fractions-equality_zh_CN.html",
"subject": "math"
},
{
"label": "单位价格",
"fileurl": "https://phet.colorado.edu/sims/html/unit-rates/latest/unit-rates_zh_CN.html",
"subject": "math"
},
{
"label": "获得一个10",
"fileurl": "https://phet.colorado.edu/sims/html/make-a-ten/latest/make-a-ten_zh_CN.html",
"subject": "math"
},
{
"label": "木棒的计算问题",
"fileurl": "https://www.netpad.net.cn/resource_web/course/?pack_id=6dc2ab05-cb06-4716-92ca-e00fb89ad1e6#/20808",
"subject": "math"
},
{
"label": "几何光学",
"fileurl": "https://phet.colorado.edu/sims/html/geometric-optics/latest/geometric-optics_zh_CN.html",
"subject": "physics"
},
{
"label": "密度",
"fileurl": "https://phet.colorado.edu/sims/html/density/latest/density_zh_CN.html",
"subject": "physics"
},
{
"label": "能量滑板竞技场: 基础",
"fileurl": "https://phet.colorado.edu/sims/html/energy-skate-park-basics/latest/energy-skate-park-basics_zh_CN.html",
"subject": "physics"
},
{
"label": "法拉第定律",
"fileurl": "https://phet.colorado.edu/sims/html/faradays-law/latest/faradays-law_zh_CN.html",
"subject": "physics"
},
{
"label": "绳波",
"fileurl": "https://phet.colorado.edu/sims/html/wave-on-a-string/latest/wave-on-a-string_zh_CN.html",
"subject": "physics"
},
{
"label": "光的混合",
"fileurl": "https://phet.colorado.edu/sims/html/color-vision/latest/color-vision_zh_CN.html",
"subject": "physics"
},
{
"label": "平衡探究实验",
"fileurl": "https://phet.colorado.edu/sims/html/balancing-act/latest/balancing-act_zh_CN.html",
"subject": "physics"
},
{
"label": "受到压力",
"fileurl": "https://phet.colorado.edu/sims/html/under-pressure/latest/under-pressure_zh_CN.html",
"subject": "physics"
},
{
"label": "摩擦力",
"fileurl": "https://phet.colorado.edu/sims/html/friction/latest/friction_zh_CN.html",
"subject": "physics"
},
{
"label": "力和运动:基础",
"fileurl": "https://phet.colorado.edu/sims/html/forces-and-motion-basics/latest/forces-and-motion-basics_zh_CN.html",
"subject": "physics"
},
{
"label": "静电电压",
"fileurl": "https://phet.colorado.edu/sims/html/john-travoltage/latest/john-travoltage_zh_CN.html",
"subject": "physics"
},
{
"label": "万有引力实验",
"fileurl": "https://phet.colorado.edu/sims/html/gravity-force-lab/latest/gravity-force-lab_zh_CN.html",
"subject": "physics"
},
{
"label": "气球和静电(摩擦起电)",
"fileurl": "https://phet.colorado.edu/sims/html/balloons-and-static-electricity/latest/balloons-and-static-electricity_zh_CN.html",
"subject": "physics"
},
{
"label": "密度",
"fileurl": "https://phet.colorado.edu/sims/html/density/latest/density_zh_CN.html",
"subject": "biology"
},
{
"label": "基因表达基础",
"fileurl": "https://phet.colorado.edu/sims/html/gene-expression-essentials/latest/gene-expression-essentials_zh_CN.html",
"subject": "biology"
},
{
"label": "密度",
"fileurl": "https://phet.colorado.edu/sims/html/density/latest/density_zh_CN.html",
"subject": "sciences"
},
{
"label": "PH值",
"fileurl": "https://phet.colorado.edu/sims/html/ph-scale/latest/ph-scale_zh_CN.html",
"subject": "sciences"
},
{
"label": "密度",
"fileurl": "https://phet.colorado.edu/sims/html/density/latest/density_zh_CN.html",
"subject": "chemistry"
},
{
"label": "创造一个分子",
"fileurl": "https://phet.colorado.edu/sims/html/build-a-molecule/latest/build-a-molecule_zh_CN.html",
"subject": "chemistry"
},
{
"label": "扩散",
"fileurl": "https://phet.colorado.edu/sims/html/diffusion/latest/diffusion_zh_CN.html",
"subject": "chemistry"
}
],
"junior": [
{
"label": "二项分布弹珠台几率",
"fileurl": "https://phet.colorado.edu/sims/html/plinko-probability/latest/plinko-probability_zh_CN.html",
"subject": "math"
},
{
"label": "建立方程",
"fileurl": "https://phet.colorado.edu/sims/html/function-builder/latest/function-builder_zh_CN.html",
"subject": "math"
},
{
"label": "三角函数之旅",
"fileurl": "https://phet.colorado.edu/sims/html/trig-tour/latest/trig-tour_zh_CN.html",
"subject": "math"
},
{
"label": "四则运算",
"fileurl": "https://phet.colorado.edu/sims/html/arithmetic/latest/arithmetic_zh_CN.html",
"subject": "math"
},
{
"label": "二次函数图像",
"fileurl": "https://phet.colorado.edu/sims/html/graphing-quadratics/latest/graphing-quadratics_zh_CN.html",
"subject": "math"
},
{
"label": "质量和弹簧",
"fileurl": "https://phet.colorado.edu/sims/html/masses-and-springs/latest/masses-and-springs_zh_CN.html",
"subject": "math"
},
{
"label": "等式探索:两个变量",
"fileurl": "https://phet.colorado.edu/sims/html/equality-explorer-two-variables/latest/equality-explorer-two-variables_zh_CN.html",
"subject": "math"
},
{
"label": "等式探索:基础",
"fileurl": "https://phet.colorado.edu/sims/html/equality-explorer-basics/latest/equality-explorer-basics_zh_CN.html",
"subject": "math"
},
{
"label": "等式探索",
"fileurl": "https://phet.colorado.edu/sims/html/equality-explorer/latest/equality-explorer_zh_CN.html",
"subject": "math"
},
{
"label": "面积模型代数",
"fileurl": "https://phet.colorado.edu/sims/html/area-model-algebra/latest/area-model-algebra_zh_CN.html",
"subject": "math"
},
{
"label": "面积模型:小数",
"fileurl": "https://phet.colorado.edu/sims/html/area-model-decimals/latest/area-model-decimals_zh_CN.html",
"subject": "math"
},
{
"label": "面积模型乘法",
"fileurl": "https://phet.colorado.edu/sims/html/area-model-multiplication/latest/area-model-multiplication_zh_CN.html",
"subject": "math"
},
{
"label": "面积模型入门",
"fileurl": "https://phet.colorado.edu/sims/html/area-model-introduction/latest/area-model-introduction_zh_CN.html",
"subject": "math"
},
{
"label": "钟摆实验",
"fileurl": "https://phet.colorado.edu/sims/html/pendulum-lab/latest/pendulum-lab_zh_CN.html",
"subject": "math"
},
{
"label": "斜抛运动",
"fileurl": "https://phet.colorado.edu/sims/html/projectile-motion/latest/projectile-motion_zh_CN.html",
"subject": "math"
},
{
"label": "表达式变换",
"fileurl": "https://phet.colorado.edu/sims/html/expression-exchange/latest/expression-exchange_zh_CN.html",
"subject": "math"
},
{
"label": "电路建设工具包:交流",
"fileurl": "https://phet.colorado.edu/sims/html/circuit-construction-kit-ac/latest/circuit-construction-kit-ac_zh_CN.html",
"subject": "physics"
},
{
"label": "交流虚拟实验室",
"fileurl": "https://phet.colorado.edu/sims/html/circuit-construction-kit-ac-virtual-lab/latest/circuit-construction-kit-ac-virtual-lab_zh_CN.html",
"subject": "physics"
},
{
"label": "碰撞实验室",
"fileurl": "https://phet.colorado.edu/sims/html/collision-lab/latest/collision-lab_zh_CN.html",
"subject": "physics"
},
{
"label": "能量滑板竞技场",
"fileurl": "https://phet.colorado.edu/sims/html/energy-skate-park/latest/energy-skate-park_zh_CN.html",
"subject": "physics"
},
{
"label": "向量相加",
"fileurl": "https://phet.colorado.edu/sims/html/vector-addition/latest/vector-addition_zh_CN.html",
"subject": "physics"
},
{
"label": "曲线拟合",
"fileurl": "https://phet.colorado.edu/sims/html/curve-fitting/latest/curve-fitting_zh_CN.html",
"subject": "physics"
},
{
"label": "引力实验室:基础",
"fileurl": "https://phet.colorado.edu/sims/html/gravity-force-lab-basics/latest/gravity-force-lab-basics_zh_CN.html",
"subject": "physics"
},
{
"label": "波动入门",
"fileurl": "https://phet.colorado.edu/sims/html/waves-intro/latest/waves-intro_zh_CN.html",
"subject": "physics"
},
{
"label": "扩散",
"fileurl": "https://phet.colorado.edu/sims/html/diffusion/latest/diffusion_zh_CN.html",
"subject": "physics"
},
{
"label": "气体基础",
"fileurl": "https://phet.colorado.edu/sims/html/gases-intro/latest/gases-intro_zh_CN.html",
"subject": "physics"
},
{
"label": "气体性质",
"fileurl": "https://phet.colorado.edu/sims/html/gas-properties/latest/gas-properties_zh_CN.html",
"subject": "physics"
},
{
"label": "质量与弹簧:基础",
"fileurl": "https://phet.colorado.edu/sims/html/masses-and-springs-basics/latest/masses-and-springs-basics_zh_CN.html",
"subject": "physics"
},
{
"label": "黑体辐射",
"fileurl": "https://phet.colorado.edu/sims/html/blackbody-spectrum/latest/blackbody-spectrum_zh_CN.html",
"subject": "physics"
},
{
"label": "能量的形式和转换",
"fileurl": "https://phet.colorado.edu/sims/html/energy-forms-and-changes/latest/energy-forms-and-changes_zh_CN.html",
"subject": "physics"
},
{
"label": "波的干涉",
"fileurl": "https://phet.colorado.edu/sims/html/wave-interference/latest/wave-interference_zh_CN.html",
"subject": "physics"
},
{
"label": "库仑定律",
"fileurl": "https://phet.colorado.edu/sims/html/coulombs-law/latest/coulombs-law_zh_CN.html",
"subject": "physics"
},
{
"label": "质量和弹簧",
"fileurl": "https://phet.colorado.edu/sims/html/masses-and-springs/latest/masses-and-springs_zh_CN.html",
"subject": "physics"
},
{
"label": "电容器实验:基础",
"fileurl": "https://phet.colorado.edu/sims/html/capacitor-lab-basics/latest/capacitor-lab-basics_zh_CN.html",
"subject": "physics"
},
{
"label": "电路组建实验:直流虚拟实验室",
"fileurl": "https://phet.colorado.edu/sims/html/circuit-construction-kit-dc-virtual-lab/latest/circuit-construction-kit-dc-virtual-lab_zh_CN.html",
"subject": "physics"
},
{
"label": "电路组建实验:直流",
"fileurl": "https://phet.colorado.edu/sims/html/circuit-construction-kit-dc/latest/circuit-construction-kit-dc_zh_CN.html",
"subject": "physics"
},
{
"label": "钟摆实验",
"fileurl": "https://phet.colorado.edu/sims/html/pendulum-lab/latest/pendulum-lab_zh_CN.html",
"subject": "physics"
},
{
"label": "斜抛运动",
"fileurl": "https://phet.colorado.edu/sims/html/projectile-motion/latest/projectile-motion_zh_CN.html",
"subject": "physics"
},
{
"label": "物质状态:基础",
"fileurl": "https://phet.colorado.edu/sims/html/states-of-matter-basics/latest/states-of-matter-basics_zh_CN.html",
"subject": "physics"
},
{
"label": "物质状态",
"fileurl": "https://phet.colorado.edu/sims/html/states-of-matter/latest/states-of-matter_zh_CN.html",
"subject": "physics"
},
{
"label": "重力和轨道",
"fileurl": "https://phet.colorado.edu/sims/html/gravity-and-orbits/latest/gravity-and-orbits_zh_CN.html",
"subject": "physics"
},
{
"label": "分子与光",
"fileurl": "https://phet.colorado.edu/sims/html/molecules-and-light/latest/molecules-and-light_zh_CN.html",
"subject": "physics"
},
{
"label": "PH值",
"fileurl": "https://phet.colorado.edu/sims/html/ph-scale/latest/ph-scale_zh_CN.html",
"subject": "biology"
},
{
"label": "光的混合",
"fileurl": "https://phet.colorado.edu/sims/html/color-vision/latest/color-vision_zh_CN.html",
"subject": "biology"
},
{
"label": "自然选择",
"fileurl": "https://phet.colorado.edu/sims/html/natural-selection/latest/natural-selection_zh_CN.html",
"subject": "biology"
},
{
"label": "受到压力",
"fileurl": "https://phet.colorado.edu/sims/html/under-pressure/latest/under-pressure_zh_CN.html",
"subject": "sciences"
},
{
"label": "万有引力实验",
"fileurl": "https://phet.colorado.edu/sims/html/gravity-force-lab/latest/gravity-force-lab_zh_CN.html",
"subject": "sciences"
},
{
"label": "气球和静电(摩擦起电)",
"fileurl": "https://phet.colorado.edu/sims/html/balloons-and-static-electricity/latest/balloons-and-static-electricity_zh_CN.html",
"subject": "sciences"
},
{
"label": "气体基础",
"fileurl": "https://phet.colorado.edu/sims/html/gases-intro/latest/gases-intro_zh_CN.html",
"subject": "chemistry"
},
{
"label": "气体性质",
"fileurl": "https://phet.colorado.edu/sims/html/gas-properties/latest/gas-properties_zh_CN.html",
"subject": "chemistry"
},
{
"label": "黑体辐射",
"fileurl": "https://phet.colorado.edu/sims/html/blackbody-spectrum/latest/blackbody-spectrum_zh_CN.html",
"subject": "chemistry"
},
{
"label": "能量的形式和转换",
"fileurl": "https://phet.colorado.edu/sims/html/energy-forms-and-changes/latest/energy-forms-and-changes_zh_CN.html",
"subject": "chemistry"
},
{
"label": "库仑定律",
"fileurl": "https://phet.colorado.edu/sims/html/coulombs-law/latest/coulombs-law_zh_CN.html",
"subject": "chemistry"
},
{
"label": "分子极性",
"fileurl": "https://phet.colorado.edu/sims/html/molecule-polarity/latest/molecule-polarity_zh_CN.html",
"subject": "chemistry"
},
{
"label": "物质状态:基础",
"fileurl": "https://phet.colorado.edu/sims/html/states-of-matter-basics/latest/states-of-matter-basics_zh_CN.html",
"subject": "chemistry"
},
{
"label": "物质状态",
"fileurl": "https://phet.colorado.edu/sims/html/states-of-matter/latest/states-of-matter_zh_CN.html",
"subject": "chemistry"
},
{
"label": "原子的相互作用",
"fileurl": "https://phet.colorado.edu/sims/html/atomic-interactions/latest/atomic-interactions_zh_CN.html",
"subject": "chemistry"
},
{
"label": "卢瑟福散射",
"fileurl": "https://phet.colorado.edu/sims/html/rutherford-scattering/latest/rutherford-scattering_zh_CN.html",
"subject": "chemistry"
},
{
"label": "原子的相互作用",
"fileurl": "https://phet.colorado.edu/sims/html/atomic-interactions/latest/atomic-interactions_zh_CN.html",
"subject": "chemistry"
}
],
"senior": [
{
"label": "一次线性函数的拟合",
"fileurl": "https://phet.colorado.edu/sims/html/least-squares-regression/latest/least-squares-regression_zh_CN.html",
"subject": "math"
},
{
"label": "区域建造者",
"fileurl": "https://phet.colorado.edu/sims/html/area-builder/latest/area-builder_zh_CN.html",
"subject": "math"
},
{
"label": "绳波",
"fileurl": "https://phet.colorado.edu/sims/html/wave-on-a-string/latest/wave-on-a-string_zh_CN.html",
"subject": "math"
},
{
"label": "直线图形",
"fileurl": "https://phet.colorado.edu/sims/html/graphing-lines/latest/graphing-lines_zh_CN.html",
"subject": "math"
},
{
"label": "分数配对",
"fileurl": "https://phet.colorado.edu/sims/html/fraction-matcher/latest/fraction-matcher_zh_CN.html",
"subject": "math"
},
{
"label": "平衡探究实验",
"fileurl": "https://phet.colorado.edu/sims/html/balancing-act/latest/balancing-act_zh_CN.html",
"subject": "math"
},
{
"label": "绘图:斜率与截距",
"fileurl": "https://phet.colorado.edu/sims/html/graphing-slope-intercept/latest/graphing-slope-intercept_zh_CN.html",
"subject": "math"
},
{
"label": "函数构造器:基础",
"fileurl": "https://phet.colorado.edu/sims/html/function-builder-basics/latest/function-builder-basics_zh_CN.html",
"subject": "math"
},
{
"label": "比例游乐场",
"fileurl": "https://phet.colorado.edu/sims/html/proportion-playground/latest/proportion-playground_zh_CN.html",
"subject": "math"
},
{
"label": "二项分布弹珠台几率",
"fileurl": "https://phet.colorado.edu/sims/html/plinko-probability/latest/plinko-probability_zh_CN.html",
"subject": "physics"
},
{
"label": "原子的相互作用",
"fileurl": "https://phet.colorado.edu/sims/html/atomic-interactions/latest/atomic-interactions_zh_CN.html",
"subject": "physics"
},
{
"label": "电荷与电场",
"fileurl": "https://phet.colorado.edu/sims/html/charges-and-fields/latest/charges-and-fields_zh_CN.html",
"subject": "physics"
},
{
"label": "卢瑟福散射",
"fileurl": "https://phet.colorado.edu/sims/html/rutherford-scattering/latest/rutherford-scattering_zh_CN.html",
"subject": "physics"
},
{
"label": "光的折射",
"fileurl": "https://phet.colorado.edu/sims/html/bending-light/latest/bending-light_zh_CN.html",
"subject": "physics"
},
{
"label": "胡克定律",
"fileurl": "https://phet.colorado.edu/sims/html/hookes-law/latest/hookes-law_zh_CN.html",
"subject": "physics"
},
{
"label": "部分电路欧姆定律",
"fileurl": "https://phet.colorado.edu/sims/html/ohms-law/latest/ohms-law_zh_CN.html",
"subject": "physics"
},
{
"label": "电线的电阻",
"fileurl": "https://phet.colorado.edu/sims/html/resistance-in-a-wire/latest/resistance-in-a-wire_zh_CN.html",
"subject": "physics"
},
{
"label": "原子模型",
"fileurl": "https://phet.colorado.edu/sims/html/build-an-atom/latest/build-an-atom_zh_CN.html",
"subject": "physics"
},
{
"label": "分子极性",
"fileurl": "https://phet.colorado.edu/sims/html/molecule-polarity/latest/molecule-polarity_zh_CN.html",
"subject": "biology"
},
{
"label": "神经元",
"fileurl": "https://phet.colorado.edu/sims/html/neuron/latest/neuron_zh_CN.html",
"subject": "biology"
},
{
"label": "引力实验室:基础",
"fileurl": "https://phet.colorado.edu/sims/html/gravity-force-lab-basics/latest/gravity-force-lab-basics_zh_CN.html",
"subject": "sciences"
},
{
"label": "波动入门",
"fileurl": "https://phet.colorado.edu/sims/html/waves-intro/latest/waves-intro_zh_CN.html",
"subject": "sciences"
},
{
"label": "扩散",
"fileurl": "https://phet.colorado.edu/sims/html/diffusion/latest/diffusion_zh_CN.html",
"subject": "sciences"
},
{
"label": "气体基础",
"fileurl": "https://phet.colorado.edu/sims/html/gases-intro/latest/gases-intro_zh_CN.html",
"subject": "sciences"
},
{
"label": "气体性质",
"fileurl": "https://phet.colorado.edu/sims/html/gas-properties/latest/gas-properties_zh_CN.html",
"subject": "sciences"
},
{
"label": "分子与光",
"fileurl": "https://phet.colorado.edu/sims/html/molecules-and-light/latest/molecules-and-light_zh_CN.html",
"subject": "sciences"
},
{
"label": "绳波",
"fileurl": "https://phet.colorado.edu/sims/html/wave-on-a-string/latest/wave-on-a-string_zh_CN.html",
"subject": "sciences"
},
{
"label": "黑体辐射",
"fileurl": "https://phet.colorado.edu/sims/html/blackbody-spectrum/latest/blackbody-spectrum_zh_CN.html",
"subject": "sciences"
},
{
"label": "波的干涉",
"fileurl": "https://phet.colorado.edu/sims/html/wave-interference/latest/wave-interference_zh_CN.html",
"subject": "sciences"
},
{
"label": "重力和轨道",
"fileurl": "https://phet.colorado.edu/sims/html/gravity-and-orbits/latest/gravity-and-orbits_zh_CN.html",
"subject": "sciences"
},
{
"label": "同位素和原子的质量",
"fileurl": "https://phet.colorado.edu/sims/html/isotopes-and-atomic-mass/latest/isotopes-and-atomic-mass_zh_CN.html",
"subject": "chemistry"
},
{
"label": "分子与光",
"fileurl": "https://phet.colorado.edu/sims/html/molecules-and-light/latest/molecules-and-light_zh_CN.html",
"subject": "chemistry"
},
{
"label": "分子形状",
"fileurl": "https://phet.colorado.edu/sims/html/molecule-shapes/latest/molecule-shapes_zh_CN.html",
"subject": "chemistry"
},
{
"label": "分子形状:基础",
"fileurl": "https://phet.colorado.edu/sims/html/molecule-shapes-basics/latest/molecule-shapes-basics_zh_CN.html",
"subject": "chemistry"
},
{
"label": "反应物,生成物及未反应物",
"fileurl": "https://phet.colorado.edu/sims/html/reactants-products-and-leftovers/latest/reactants-products-and-leftovers_zh_CN.html",
"subject": "chemistry"
},
{
"label": "pH值:基础",
"fileurl": "https://phet.colorado.edu/sims/html/ph-scale-basics/latest/ph-scale-basics_zh_CN.html",
"subject": "chemistry"
},
{
"label": "绳波",
"fileurl": "https://phet.colorado.edu/sims/html/wave-on-a-string/latest/wave-on-a-string_zh_CN.html",
"subject": "chemistry"
},
{
"label": "PH值",
"fileurl": "https://phet.colorado.edu/sims/html/ph-scale/latest/ph-scale_zh_CN.html",
"subject": "chemistry"
},
{
"label": "配平化学方程式",
"fileurl": "https://phet.colorado.edu/sims/html/balancing-chemical-equations/latest/balancing-chemical-equations_zh_CN.html",
"subject": "chemistry"
},
{
"label": "酸碱溶度",
"fileurl": "https://phet.colorado.edu/sims/html/acid-base-solutions/latest/acid-base-solutions_zh_CN.html",
"subject": "chemistry"
},
{
"label": "浓度",
"fileurl": "https://phet.colorado.edu/sims/html/concentration/latest/concentration_zh_CN.html",
"subject": "chemistry"
},
{
"label": "气球和静电(摩擦起电)",
"fileurl": "https://phet.colorado.edu/sims/html/balloons-and-static-electricity/latest/balloons-and-static-electricity_zh_CN.html",
"subject": "chemistry"
},
{
"label": "比尔定律实验",
"fileurl": "https://phet.colorado.edu/sims/html/beers-law-lab/latest/beers-law-lab_zh_CN.html",
"subject": "chemistry"
},{
"label": "摩尔浓度",
"fileurl": "https://phet.colorado.edu/sims/html/molarity/latest/molarity_zh_CN.html",
"subject": "chemistry"
},
{
"label": "原子模型",
"fileurl": "https://phet.colorado.edu/sims/html/build-an-atom/latest/build-an-atom_zh_CN.html",
"subject": "chemistry"
}
]
}
}

View File

@ -37,6 +37,7 @@ const items = shallowRef([
{ title: '常规作业', description: '推送pdf、视频、音频、图片学生可以拍照上传。', icon: '#icon-zhaoxiangji',type:'danger' },
// { title: 'AI', description: 'AI', icon: '#icon-jiqiren_o',type:'danger' },
{ title: '习题上传', description: '自己上传个人题库。', icon: '#icon-shangchuan',type:'danger' },
{ title: '科学实验', description: '学生完成虚拟仿真实验,并提交实验结果。', icon: '#icon-shangchuan',type:'danger' },
]);
const handleClick = (item) => {

View File

@ -0,0 +1,54 @@
<template>
<div style="display: flex;">
<el-select
v-model="value"
placeholder="请选择实验课程"
size="large"
style="width: 240px"
@change="onSelectOption"
>
<el-option
v-for="item in classTaskStore.experimentList"
:key="item.value"
:label="item.label"
:value="item.label"
/>
</el-select>
</div>
</template>
<script setup>
import useUserStore from '@/store/modules/user'
import {ArrowDown} from '@element-plus/icons-vue'
import { onMounted,ref } from 'vue';
import useClassTaskStore from '@/store/modules/classTask'
const userStore = useUserStore().user
const subjectList = ref([])
const classTaskStore = useClassTaskStore().experimentObj
// emit
let emit = defineEmits(['selectItem'])
const props = defineProps({
list: {
type: Array,
default: () => ([])
},
})
const value = ref('')
onMounted(() => {
})
const onSelectOption = (option) => {
console.log(option,'选择的实验课-------')
emit('selectItem', classTaskStore.experimentList.filter(item => item.label === option)[0])
}
</script>
<style scoped>
</style>

View File

@ -0,0 +1,186 @@
<template>
<div style="display: flex;">
<div style="margin-left: 15px">
<el-dropdown @command="handleUserEduStage">
<span class="el-dropdown-link">
<el-button class="custom-button" type="default" round >{{ useClassTaskStore().experimentObj.edustage }}
<el-icon><ArrowDown /></el-icon>
</el-button>
</span>
<template #dropdown>
<el-dropdown-menu>
<!-- <el-dropdown-item command="幼儿园">幼儿园</el-dropdown-item> -->
<el-dropdown-item command="小学">小学</el-dropdown-item>
<el-dropdown-item command="初中">初中</el-dropdown-item>
<el-dropdown-item command="高中">高中</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
</div>
<div style="margin-left: 15px">
<el-dropdown @command="handleUserEduSubject">
<span class="el-dropdown-link">
<el-button class="custom-button" type="default" round>{{ useClassTaskStore().experimentObj.edusubject }}
<el-icon><ArrowDown /></el-icon>
</el-button>
</span>
<template #dropdown>
<el-dropdown-menu>
<template v-for="(item, index) in subjectList">
<el-dropdown-item v-if="item.edustage == useClassTaskStore().experimentObj.edustage && isExpList(item.itemtitle)" :command="item.itemtitle">{{
item.itemtitle }}</el-dropdown-item>
</template>
</el-dropdown-menu>
</template>
</el-dropdown>
</div>
</div>
</template>
<script setup>
import useUserStore from '@/store/modules/user'
import {ArrowDown} from '@element-plus/icons-vue'
import { onMounted,ref } from 'vue';
import { listEvaluation } from '@/api/subject/index'
import jsonData from "@/utils/phetData.json";
import useClassTaskStore from '@/store/modules/classTask'
const userStore = useUserStore().user
// emit
// let emit = defineEmits(['experlist'])
// const expObj = ref({
// edustage: useClassTaskStore().experimentObj.edustage,
// edusubject: useClassTaskStore().experimentObj.edusubject,
// })
const subjectList = ref([])
const chooseGrade= ref({})
const expList = ref([]) //
const checkList = ref([])//
//
const getSubject = () => {
//
if(!userStore.subject) return
listEvaluation({ itemkey: 'subject', pageSize: 500 }).then((res) => {
const arr = userStore.subject.split(',')
subjectList.value = res.rows.filter(item => arr.includes(String(item.id))).map(items => items)
console.log(subjectList,'subjectList');
})
//
handleUserEduStage(useClassTaskStore().experimentObj.edustage)
}
//
const isExpList = (edusubject) => {
let list = [];
switch (edusubject){
case '数学':
list = expList.value.filter(item => item.subject === 'math')
break;
case '物理':
list = expList.value.filter(item => item.subject === 'physics')
break;
case '化学':
checkList.value = expList.value.filter(item => item.subject === 'chemistry')
break;
case '生物':
list = expList.value.filter(item => item.subject === 'biology')
break;
case '科学':
list = expList.value.filter(item => item.subject === 'sciences')
break;
}
return list.length > 0
}
//
const handleUserEduStage = (item) => {
// userStore.edustage = item
useClassTaskStore().experimentObj.edustage = item
//
expList.value = []
if(item === '小学'){
chooseGrade.value = jsonData.data.primary
expList.value = chooseGrade.value
const newSubjectList = subjectList.value.filter(item => item.edustage === '小学');
for(let i in newSubjectList){
const name = newSubjectList[i].itemtitle
if(isExpList(name)){
useClassTaskStore().experimentObj.edusubject = name;
//
handleUserEduSubject(name)
}
}
}else if(item === '初中'){
chooseGrade.value = jsonData.data.junior
expList.value = chooseGrade.value
const newSubjectList = subjectList.value.filter(item => item.edustage === '初中');
for(let i in newSubjectList){
const name = newSubjectList[i].itemtitle
if(isExpList(name)){
useClassTaskStore().experimentObj.edusubject = name;
//
handleUserEduSubject(name)
}
}
}else if(item === '高中'){
chooseGrade.value = jsonData.data.senior
expList.value = chooseGrade.value
const newSubjectList = subjectList.value.filter(item => item.edustage === '高中');
for(let i in newSubjectList){
const name = newSubjectList[i].itemtitle
if(isExpList(name)){
useClassTaskStore().experimentObj.edusubject = name;
//
handleUserEduSubject(name)
}
}
}
}
//
const handleUserEduSubject = (item) => {
// userStore.edusubject = item;
useClassTaskStore().experimentObj.edusubject = item;
console.log(item,'选择的学科-------')
checkList.value = []
switch (item){
case '数学':
checkList.value = expList.value.filter(item => item.subject === 'math')
break;
case '物理':
checkList.value = expList.value.filter(item => item.subject === 'physics')
break;
case '化学':
checkList.value = expList.value.filter(item => item.subject === 'chemistry')
break;
case '生物':
checkList.value = expList.value.filter(item => item.subject === 'biology')
break;
case '科学':
checkList.value = expList.value.filter(item => item.subject === 'sciences')
break;
}
console.log(checkList.value,'checkList')
useClassTaskStore().experimentObj.experimentList = checkList.value;
// emit('experlist',checkList.value)
}
onMounted(() => {
getSubject()
})
</script>
<style scoped>
.custom-button {
width: auto;
border: 1px solid rgb(59, 130, 246);
outline: none;
outline-offset: none;
padding: 0 24px;
}
.custom-button i {
margin-left: 8px; /* 调整图标与文字之间的间距 */
}
</style>

View File

@ -0,0 +1,105 @@
<template>
<div class="experiment-page">
<div class="activeExp-header">
<div class="infomation" v-if="isStadium() !== true" >
<!-- <selectClass v-if="!isSubject" @experlist="getExperimentList" /> -->
<selectClass v-if="!isSubject" />
</div>
<div>
<selectExperiment @selectItem="getExperimentListItem" />
</div>
</div>
<div ref="mainDiv" class="activeExp-main" style="overflow: auto">
<div v-if="!activeExp.fileurl"><el-empty description="暂无学科实验"></el-empty></div>
<iframe v-else :src="activeExp.fileurl" ref="myuunity" width="100%" height="100%" scrolling="no" frameborder="0"></iframe>
<!-- <phet/>-->
</div>
</div>
</template>
<script setup>
import { Search } from '@element-plus/icons-vue'
//import html2canvas from 'html2canvas';
import { onMounted, ref,watch, reactive, getCurrentInstance,nextTick } from 'vue'
import useUserStore from '@/store/modules/user'
import useClassTaskStore from '@/store/modules/classTask'
import selectClass from './components/selectClass.vue' //
import selectExperiment from './components/experimentList.vue' //
// emit
let emit = defineEmits(['clickExpObj'])
const { proxy } = getCurrentInstance()
const userStore = useUserStore().user
const props = defineProps({
bookobj: {
type: Object,
default: () => ({})
},
expObj: {
type: Object,
default: () => ({})
}
})
//
// const experimentList = ref([]);
const activeExp = ref({});
const isStadium = () => {
let roles = userStore.roles
return roles.some(item => item.roleKey === 'stadium')
}
// const mainLeftBarHeight = ref(0);
onMounted(() => {
// var mainLeftBar = document.getElementById("mainLeftBar");
// mainLeftBarHeight.value = document.documentElement.clientHeight-50-mainLeftBar.offsetParent.offsetTop - 10;
// getDivHeight()
// window.addEventListener('resize', getDivHeight)
})
// const getDivHeight = () => {
// const screenheight = window.innerHeight;
// proxy.$refs.mainDiv.style.height = screenheight-140 > 320 ? screenheight-140+'px' : 320+'px';
// console.log("height", proxy.$refs.mainDiv.style.height);
// // 704 +
// // mainDiv ref="mainDiv"
// }
//
// const getExperimentList = (val) => {
// console.log(val,'list')
// // experimentList.value = val;
// }
//
const getExperimentListItem = (val) => {
console.log(val,'选择的实验课程信息')
activeExp.value = val;
emit('clickExpObj', val)
}
//
watch(() => props.expObj.fileurl, (newVal, oldVal) => {
console.log(props.expObj,'科学实验科目')
activeExp.value = props.expObj;
})
</script>
<style scoped lang="scss">
.experiment-page {
height: 100%;
display: flex;
flex-direction: column;
.activeExp-header {
display: flex;
justify-content: space-between;
}
.activeExp-main{
flex: auto;
}
}
</style>

View File

@ -77,6 +77,11 @@
<FileUpload v-model="classWorkForm.fileHomeworkList" :fileSize="800" :fileType="['mp3','mp4','doc','docx','xlsx','xls','pdf','ppt','pptx','jpg','jpeg','gif','png','txt']"/>
</div>
</div>
<div v-if="(currentRow.worktype == '科学实验' || classWorkForm.worktype == '科学实验')&& currentRow.id>0" class="page-center">
<div class="experiment-homework">
<ExperimentQuestion :expObj="classWorkForm.fileHomeworkList&&classWorkForm.fileHomeworkList[0]" @clickExpObj="getExpObj" />
</div>
</div>
<div v-if="currentRow.id>0 " class="page-right">
<div class="prepare-top" >
@ -140,6 +145,7 @@ import { editListItem } from '@/hooks/useClassTask'
import MyQuestion from '@/views/classTask/newClassTaskAssign/myQuestion/index.vue'
import SchoolQuestion from '@/views/classTask/newClassTaskAssign/schoolQuestion/index.vue'
import SearchQuestion from '@/views/classTask/newClassTaskAssign/searchQuestion/index.vue'
import ExperimentQuestion from "@/views/classTask/newClassTaskAssign/experimentQuestion/index.vue";
import whiteboard from '@/components/whiteboard/whiteboard.vue'
import FileUpload from "@/components/FileUpload/index.vue";
import Right from './Right/index.vue'
@ -194,7 +200,7 @@ const fileLoading = ref(false); // 常规作业loading
onMounted(() => {
console.log("----onMounted-------")
currentRow.value = {id:0};
currentRow.value.id = 0
if(propsQueryCourseObj){
if(JSON.parse(propsQueryCourseObj)){
courseObj.textbookId = JSON.parse(propsQueryCourseObj).bookObj //
@ -229,7 +235,7 @@ const isInToMyQuestion = () => {
if(useClassTaskStores.isOpenQuestUploadView){
useClassTaskStores.isOpenQuestUploadView = false;
currentRow.value = {id:1}; //
currentRow.value.id = 1; //
activeAptTab.value = "个人题库";
//
classWorkForm.id = 0;
@ -258,6 +264,16 @@ watch(() => props.currentCourse, (newVal, oldVal) => {
}
console.log(newVal,'newval');
},{deep:true})
// ------------
const getExpObj = (obj)=>{
// obj:{
// fileurl: "https://phet.colorado.edu/sims/html/number-compare/latest/number-compare_zh_CN.html"
// label: ""
// subject: "math"
// }
classWorkForm.fileHomeworkList = [obj];
}
//------------
const handleItemClick = (itemName) => {
console.log('itemName', itemName);
@ -266,7 +282,7 @@ const handleItemClick = (itemName) => {
return;
}
currentRow.value = {id:1}; //
currentRow.value.id = 1; //
/**
* 智能推荐AI设计作业
* 习题训练 自主搜题 校本题库 个人题库
@ -309,7 +325,7 @@ const initHomeWork = async()=> {
const handleNewAllClass = () => {
taskTable.value.setCurrentRow({});//
currentRow.value = {id:0}; //
currentRow.value.id = 0; //
//--------
classWorkForm.id = 0;
classWorkForm.uniquekey = ""; //
@ -336,7 +352,7 @@ const handleDelete =() => {
return delClasswork(ids.join(','));
}).then(() => {
taskTable.value.setCurrentRow({});//
currentRow.value = {id:0}; //
currentRow.value.id = 0; //
taskList.value = [];
// initHomeWork();
setTimeout(() => {
@ -430,7 +446,7 @@ const handleCurrentChange = (val) => {
console.log(val,'???????????')
if(val && val.id >0 ) {
currentRow.value = val;
currentRow.value.id = 1;
classWorkForm.worktype = val.worktype; //
editListItem(val, courseObj).then((obj) => {
if(obj){
@ -582,6 +598,32 @@ const handleClassWorkFormQuizRemove = (index) =>{
fileLoading.value = false
}
}
else if(classWorkForm.worktype === "科学实验"){
if (classWorkForm.fileHomeworkList.length == 0) return ElMessage({ type: 'warning', message: '请选择科学实验的课程!'});
cform.workcodes = JSON.stringify(classWorkForm.fileHomeworkList);
cform.entpcourseworklist = JSON.stringify([{'id':-3, 'score': '10'}]);
try {
console.log(cform,'科学实验')
addClassworkReturnId(cform).then((res) => {
ElMessage({ type: 'success', message: '作业设计成功!'});
//
classWorkForm.worktype = "科学实验";
classWorkForm.uniquekey = ''; // props.propsformobj.uniquekey, //
classWorkForm.title = "";
classWorkForm.quizlist = [], //
//
classWorkForm.chooseWorkLists = []; // list
classWorkForm.whiteboardObj = ''; // ? //
classWorkForm.fileHomeworkList = []; // list
classWorkForm.id = res
emits('getData',classWorkForm)
// TODO
})
} finally{
//
}
}
else {
//
var ll = [];
@ -628,9 +670,9 @@ const handleClassWorkFormQuizRemove = (index) =>{
console.log('该清空左侧列表数据了');
//
if(isShow.value){
currentRow.value = {id:1};
currentRow.value.id = 1;
}else{
currentRow.value = {id:0};
currentRow.value.id = 0;
}
initHomeWork();
@ -667,7 +709,10 @@ const editWork = async (cform) =>{
}else{
if (classWorkForm.fileHomeworkList.length == 0) return ElMessage({ type: 'warning', message: '请上传常规作业附件!'});
}
}else {
}else if( classWorkForm.worktype == '科学实验') {
if (classWorkForm.fileHomeworkList.length == 0) return ElMessage({ type: 'warning', message: '请选择科学实验科目!'});
}
else {
if (classWorkForm.chooseWorkLists.length == 0) {
//
ElMessage.error('请先添加作业资源!');
@ -759,13 +804,21 @@ const editWork = async (cform) =>{
// 1. (, )
cform.workcodes = JSON.stringify(classWorkForm.fileHomeworkList);
}
else if (classWorkForm.worktype=='科学实验') { //TODO fileHomeworkList
// 1. (, )
cform.workcodes = JSON.stringify(classWorkForm.fileHomeworkList);
}
// 3.
let res = await updateClasswork(cform);
if (res.code == 200) {
ElMessage.success('更新成功');
//
currentRow.value = {id:0};
if(isShow.value){
currentRow.value.id = 1;
}else{
currentRow.value.id = 0;
}
initHomeWork();
// //
// router.back()
@ -865,6 +918,11 @@ const editWork = async (cform) =>{
padding: 20px;
box-sizing: border-box;
}
.experiment-homework{
padding: 15px;
height: 100%;
}
}
.page-right {
overflow: hidden;

View File

@ -98,10 +98,13 @@ import progressDialog from '@/views/teachingDesign/container/progress-dialog.vue
import msgUtils from "@/plugins/modal";
import * as commUtils from "@/utils/comm";
import * as Api_server from "@/api/apiService"; //
import useClassTaskStore from '@/store/modules/classTask'
const router = useRouter()
const userStore = useUserStore().user //
const currentNode = ref({})
const refs = ref([]);
const classTaskStore = useClassTaskStore();
const collectRef = (key) => {
return (el) => {
@ -513,7 +516,9 @@ const changeClass = async (type, row, other) => {
}
//
onMounted(() => {
onMounted(async () => {
//
await classTaskStore.initJYInfo(userStore);
})
</script>

View File

@ -195,7 +195,7 @@ import outLink from '@/utils/linkConfig'
import { createWindow, sessionStore, getAppInstallUrl, ipcMsgSend } from '@/utils/tool'
import { cloneDeep } from 'lodash'
import { delClasswork, listEntpcourse } from '@/api/teaching/classwork'
import { updateClasscourse } from '@/api/teaching/classcourse'
import { updateClasscourse, getClasscourse } from '@/api/teaching/classcourse'
import { getClassInfo, getSelfReserv, endClass } from '@/api/classManage'
import { useGetHomework } from '@/hooks/useGetHomework'
import { editListItem } from '@/hooks/useClassTask'
@ -390,12 +390,13 @@ export default {
if (res.code == 200) {
const resource = res.data
if (resource.filetype != 'aippt') this.$refs.calssRef.open(aptFileId, row)
else {
else { // aippt
if (!!sessionStore.get('curr.classcourse')) return ElMessage.warning('公屏已打开,请勿重复操作')
const { data:classcourse } = await getClasscourse(row.id) //
const msgEl = ElMessage.warning({message:'正在打开公屏,请稍后...',duration: 0})
setTimeout(()=>{
msgEl.close()
this.openPublicScreen('class', resource, row) // -
this.openPublicScreen('class', resource, classcourse||row) // -
}, 2000)
}
} else ElMessage.error(res.msg||'获取课件信息失败')