yangws #344

Merged
yangws merged 3 commits from yangws into main 2024-10-20 01:36:44 +08:00
15 changed files with 159 additions and 225 deletions
Showing only changes of commit 688f200d43 - Show all commits

View File

@ -15,3 +15,5 @@ VITE_APP_UPLOAD_API = 'https://file.ysaix.com:7868/prod-api'
VITE_APP_RES_FILE_PATH = 'https://file.ysaix.com:7868/src/assets/textbook/booktxt/'
VITE_APP_BUILD_BASE_PATH = 'https://file.ysaix.com:7868/'
VITE_SHOW_DEV_TOOLS = 'true'

View File

@ -17,3 +17,5 @@ VITE_BUILD_COMPRESS = gzip
VITE_APP_RES_FILE_PATH = 'https://prev.ysaix.com:7868/src/assets/textbook/booktxt/'
VITE_APP_BUILD_BASE_PATH = 'https://prev.ysaix.com:7868/'
VITE_SHOW_DEV_TOOLS = 'true'

View File

@ -73,8 +73,7 @@ function createLoginWindow() {
loginWindow.loadFile(join(__dirname, '../renderer/index.html'), { hash: 'login' })
updateInit(loginWindow)
}
loginWindow.webContents.openDevTools()
if (import.meta.env.VITE_SHOW_DEV_TOOLS === 'true') loginWindow.webContents.openDevTools()
loginWindow.once('ready-to-show', () => {
loginWindow.show()
})
@ -96,7 +95,6 @@ function createMainWindow() {
frame: false, // 无边框
autoHideMenuBar: true,
maximizable: false,
fullscreen: true,
icon: join(__dirname, '../../resources/logo2.ico'),
...(process.platform === 'linux' ? { icon } : {}),
webPreferences: {
@ -129,7 +127,7 @@ function createMainWindow() {
shell.openExternal(details.url)
return { action: 'deny' }
})
mainWindow.webContents.openDevTools()
if (import.meta.env.VITE_SHOW_DEV_TOOLS === 'true') mainWindow.webContents.openDevTools()
if (is.dev && process.env['ELECTRON_RENDERER_URL']) {
mainWindow.loadURL(process.env['ELECTRON_RENDERER_URL'])
@ -139,6 +137,7 @@ function createMainWindow() {
// mainWindow.setAlwaysOnTop(true, "screen-saver") // 将窗口设置为顶层窗口
// mainWindow.setVisibleOnAllWorkspaces(true) // 如果窗口在所有工作区都可见
mainWindow.maximize();
// 第三步: 开启remote服务
remote.enable(mainWindow.webContents)
}

File diff suppressed because one or more lines are too long

View File

@ -34,6 +34,7 @@ export const editListItem = (row, courseObj) => {
chooseWorkLists: [],// 设计中的框架梳理list
fileHomeworkList: [],// 设计中的常规作业list
whiteboardObj: '',// 设计中的课堂展示对象
question: '', // 设计中的[课堂展示]的问题
};
console.log('编辑的行', row);
@ -99,7 +100,7 @@ export const editListItem = (row, courseObj) => {
console.log('row.课堂展示', row.workcodes);
const workcodes = JSON.parse(row.workcodes);
classtaskObj.whiteboardObj = JSON.stringify(workcodes.json);
//
classtaskObj.question = row.worktag;
// console.log('课堂展示', classtaskObj);
return resolve(classtaskObj);
}

View File

@ -138,7 +138,7 @@ export const createWindow = async (type, data) => {
wins_tool.setIgnoreMouseEvents(true, {forward: true}) // 忽略鼠标事件但是事件继续传递给窗口
wins_tool.setAlwaysOnTop(true,'screen-saver') // 将窗口设置为顶层窗口
wins_tool.setVisibleOnAllWorkspaces(true) // 如果窗口在所有工作区都可见
wins_tool.webContents.openDevTools() // 打开调试工具
if (import.meta.env.VITE_SHOW_DEV_TOOLS === 'true') wins_tool.webContents.openDevTools() // 打开调试工具
eventHandles(type, wins_tool) // 事件监听处理
return wins_tool
}
@ -165,7 +165,7 @@ export const createWindow = async (type, data) => {
win.type = type // 唯一标识
win.show()
win.setFullScreen(true) // 设置窗口为全屏
win.webContents.openDevTools() // 打开调试工具
if (import.meta.env.VITE_SHOW_DEV_TOOLS === 'true') win.webContents.openDevTools() // 打开调试工具
eventHandles(type, win) // 事件监听处理
winPdf=win
break

View File

@ -15,10 +15,11 @@
<!-- 标题 -->
<el-row style="align-items: center; margin-bottom: 0px; flex: 0 0 auto">
<el-col :span="12" style="padding-left: 20px; text-align: left;">
<div class="unit-top-left" @click="isCollapse = !isCollapse">
<i v-if="!isCollapse" class="iconfont icon-xiangzuo" style="color: blue;"></i>
<span>课程目录</span>
<i v-if="isCollapse" class="iconfont icon-xiangyou" style="color: blue;"></i>
<!-- <div class="unit-top-left" @click="isCollapse = !isCollapse"> -->
<div class="unit-top-left">
<!-- <i v-if="!isCollapse" class="iconfont icon-xiangzuo" style="color: blue;"></i> -->
<span>作业布置</span>
<!-- <i v-if="isCollapse" class="iconfont icon-xiangyou" style="color: blue;"></i> -->
</div>
</el-col>
<el-col :span="12">
@ -879,18 +880,20 @@ watch(() => courseObj.node, (newVal,oldVal) => {
</script>
<!--
<style>
.el-table .hidden-row {
display: none !important;
/* color: #ccc !important; */
}
.el-table .father-row {
--el-table-tr-bg-color: #fff;
&#45;&#45;el-table-tr-bg-color: #fff;
}
.el-table .son-row {
--el-table-tr-bg-color: #f0f0f08a;
&#45;&#45;el-table-tr-bg-color: #f0f0f08a;
}
</style>
-->
<style lang="scss" scoped>
.page-classTaskAssign {
@ -907,7 +910,6 @@ watch(() => courseObj.node, (newVal,oldVal) => {
min-height: 100%;
}
.unit-top-left {
cursor: pointer;
.icon-xiangzuo {
margin-right: 5px;

View File

@ -13,7 +13,7 @@
<template #header>
<div style="font-size: 18px; display: flex; flex-wrap: nowrap">
<div style="flex: 1">
{{ classWorkAnalysis.title }}答题情况
{{ classWorkAnalysis.title }}完成情况
<el-tag :type="classWorkAnalysis.workclass" size="large" style="height: 25px">{{
classWorkAnalysis.worktype
}}</el-tag>
@ -33,13 +33,13 @@
v-if="classWorkAnalysis.row.worktype == '习题训练'"
:type="classWorkAnalysis.view == 'quizStats' ? 'success' : ''"
@click="workHandle('quizStats')"
>逐题分析</el-button
>逐题讲评</el-button
>
<el-button
v-if="classWorkAnalysis.row.worktype == '习题训练'"
:type="classWorkAnalysis.view == 'report' ? 'success' : ''"
@click="handleClassOverviewOpen('report')"
>整体分析</el-button
>训练报告</el-button
>
</el-button-group>
</el-row>
@ -141,12 +141,12 @@
</div>
</div>
<!-- 逐题分析 -->
<!-- 逐题讲评 -->
<div v-else-if="classWorkAnalysis.view == 'quizStats'">
<quiz-stats :active-data="classWorkActiveData" />
</div>
<!-- 整体分析-->
<!-- 训练报告-->
<div v-else-if="classWorkAnalysis.view == 'report'" style="overflow-y: scroll">
<!-- <ClassOverview :table-list="overviewData" :eval-id="courseObj.evalid"></ClassOverview> -->
<ClassOverview :table-list="overviewData"></ClassOverview>
@ -193,7 +193,7 @@ const tableRadio = reactive({
const loading_dt_table = ref(false)
const isopen_dtwk_table = ref(false)
// zdg:
// zdg:
const classWorkActiveData = reactive({
quizlist: [], //
studentList: [], // -
@ -217,7 +217,7 @@ const classWorkAnalysisScore = reactive({
// }
// )
const openDialog = (data) => {
console.log(data, '点击的item答题情况')
console.log(data, '点击的item完成情况')
classWorkAnalysis.title = data.uniquekey ? data.uniquekey + '--' : ''
classWorkAnalysis.worktype = data.worktype
@ -467,7 +467,7 @@ const getStudentClassWorkDataDetail = (row) => {
}
})
.catch(() => {
console.log('获取答题情况失败')
console.log('获取完成情况失败')
ElMessage({
type: 'warning',
message: '未获取到答题信息!'
@ -479,7 +479,7 @@ const onClassWorkScoreSubmit = () => {
console.log('批改后返回的方法')
loading_dt_table.value = true
isopen_dtwk_table.value = false
// 1table- classWorkAnalysis.classworkdata- classWorkAnalysis.activeStudentQuizlist
// 1table- classWorkAnalysis.classworkdata- classWorkAnalysis.activeStudentQuizlist
// -
classWorkAnalysis.classworkdata = []
classWorkAnalysis.activeStudentQuizlist = []
@ -536,7 +536,7 @@ const escapeHtmlQuotes = (str) => {
return result;
}
//#region
//#region
// -
const workHandle = (type) => {
// ui
@ -571,11 +571,11 @@ const getWorkFeedList = async() =>{
//#endregion
//#regin
//#regin
/*
author: yangws
time: 2024-8-06 16:35:33
function: 整体分析的处理
function: 训练报告的处理
*/
const handleClassOverviewOpen = (type) =>{
// ui
@ -643,12 +643,12 @@ const closeDialog = () => {
watch(classWorkAnalysis, (newVal, oldVal) => {
if(newVal.view != 'quizStats'){
console.log('关闭zdg: 定时执行')
clearInterval(classWorkActiveData.timerId) //
clearInterval(classWorkActiveData.timerId) //
}
})
onUnmounted(() => {
clearInterval(classWorkActiveData.timerId) //
clearInterval(classWorkActiveData.timerId) //
})
defineExpose({
@ -656,8 +656,6 @@ defineExpose({
})
</script>
<style src="@/assets/styles/JYStyle.css"></style>
<style scoped lang="scss">
/*:deep(.reserv-date-pick) {
width: 140px;
@ -765,3 +763,4 @@ defineExpose({
overflow-y: auto;
}
</style>
<style src="@/assets/styles/JYStyle.css"></style>

View File

@ -21,7 +21,7 @@
<div v-if="classWorkForm.worktype == '课堂展示'" style="height: 100%; display: flex; flex-direction: column;">
<div style="flex: 0 0 auto;">
<el-form-item label="问题">
<el-input v-model="classWorkForm.title" type="text" placeholder="请输入问题" />
<el-input v-model="classWorkForm.question" type="text" placeholder="请输入问题" />
</el-form-item>
</div>
<div v-loading="boardLoading" class="board-wrap" style="height: 100%; flex: 1; overflow: hidden;">
@ -349,9 +349,11 @@ let classWorkForm = reactive({
chooseWorkLists: props.propsformobj.chooseWorkLists?cloneDeep(props.propsformobj.chooseWorkLists):[], // list
fileHomeworkList: props.propsformobj.fileHomeworkList?cloneDeep(props.propsformobj.fileHomeworkList):[], //
whiteboardObj: props.propsformobj.whiteboardObj?cloneDeep(props.propsformobj.whiteboardObj):'', // -
question: props.propsformobj.question?cloneDeep(props.propsformobj.question):'', // -
}); //
// ---------------------------------------------------
const listWorkType = ref(['习题训练', '框架梳理', '课堂展示', '常规作业']); //
// const listWorkType = ref(['', '', '', '']); //
const listWorkType = ref(['习题训练', '课堂展示', '常规作业']); //
// -------
const boardLoading = ref(false);
@ -637,6 +639,7 @@ const handleClassWorkSave = async () => {
let canvasJson = proxy.$refs.boardref.getCanvasJson()
let canvasBase64 = await proxy.$refs.boardref.getCanvasBase64()
//
cform.worktag = classWorkForm.question;
cform.title = classWorkForm.title;
cform.workcodes = JSON.stringify({json: canvasJson, base64: canvasBase64});
cform.entpcourseworklist = JSON.stringify([{'id':-1, 'score': '10'}]);
@ -647,6 +650,7 @@ const handleClassWorkSave = async () => {
classWorkForm.worktype = "课堂展示";
classWorkForm.uniquekey = props.propsformobj.uniquekey, //
classWorkForm.title = "";
classWorkForm.question = "";
classWorkForm.quizlist = [], //
//
@ -838,6 +842,7 @@ const editWork = async (cform) =>{
let canvasJson = proxy.$refs.boardref.getCanvasJson()
let canvasBase64 = await proxy.$refs.boardref.getCanvasBase64()
cform.workcodes = JSON.stringify({json: canvasJson, base64: canvasBase64});
cform.worktag = classWorkForm.question;
}
else if (classWorkForm.worktype=='常规作业') {
// 1. (, )

View File

@ -279,7 +279,7 @@ const getStudentName = id => studentList.value.length && (studentList.value.find
// -
const getActive = ind => activeTopic.value != ind
// -
// -
const clickInfo = async ind => {
activeTopic.value = activeTopic.value != ind ? ind : 0
setTimeout(() => {scrollToElement('collapse-' + ind)}, 300);

View File

@ -15,11 +15,11 @@
<!-- 标题 -->
<el-row style="align-items: center; margin-bottom: 0px; flex: 0 0 auto">
<el-col :span="12" style="padding-left: 20px; text-align: left;">
<div v-if="!isOpenLeftBook" class="unit-top-left cursor-pointer" @click="onOpenLeftBook">
<div v-if="!isOpenLeftBook" class="unit-top-left" @click="onOpenLeftBook">
<i v-if="isback" class="iconfont icon-xiangzuo cursor-pointer" style="color: blue;" @click="goBack">返回上页</i>
<i v-if="!isCollapse" class="iconfont icon-xiangzuo" style="color: blue;"></i>
<span>课程目录</span>
<i v-if="isCollapse" class="iconfont icon-xiangyou" style="color: blue;"></i>
<!-- <i v-if="!isCollapse" class="iconfont icon-xiangzuo" style="color: blue;"></i> -->
<span>作业设计</span>
<!-- <i v-if="isCollapse" class="iconfont icon-xiangyou" style="color: blue;"></i> -->
</div>
<div v-else class="unit-top-left">
<i class="iconfont icon-xiangzuo cursor-pointer" style="color: blue;" @click="goBack">返回上页</i>
@ -69,6 +69,7 @@ const classWorkForm = reactive({
chooseWorkLists: classtaskObj? JSON.parse(classtaskObj).chooseWorkLists : [],// list
fileHomeworkList: classtaskObj? JSON.parse(classtaskObj).fileHomeworkList : [],// list
whiteboardObj: classtaskObj? JSON.parse(classtaskObj).whiteboardObj : '',//
question: classtaskObj? JSON.parse(classtaskObj).question : '',//
})
@ -113,7 +114,7 @@ const onOpenLeftBook = () => {
proxy.$modal.msgError(`当前为编辑状态不可选择课程!`);
}else{
//
isCollapse.value = !isCollapse.value
// isCollapse.value = !isCollapse.value
}
}
// ---

View File

@ -3,7 +3,7 @@
<div class="teachClassTask_header">
<div style="font-size: 18px; display: flex; flex-wrap: nowrap">
<div style="flex: 1">
{{ classWorkAnalysis.title }}答题情况
{{ classWorkAnalysis.title }}完成情况
<el-tag :type="classWorkAnalysis.workclass" size="large" style="height: 25px">{{
classWorkAnalysis.worktype
}}</el-tag>
@ -23,13 +23,13 @@
v-if="classWorkAnalysis.row.worktype == '习题训练'"
:type="classWorkAnalysis.view == 'quizStats' ? 'success' : ''"
@click="workHandle('quizStats')"
>逐题分析</el-button
>逐题讲评</el-button
>
<el-button
v-if="classWorkAnalysis.row.worktype == '习题训练'"
:type="classWorkAnalysis.view == 'report' ? 'success' : ''"
@click="handleClassOverviewOpen('report')"
>整体分析</el-button
>训练报告</el-button
>
</el-button-group>
</div>
@ -131,12 +131,12 @@
</div>
</div>
<!-- 逐题分析 -->
<!-- 逐题讲评 -->
<div v-else-if="classWorkAnalysis.view == 'quizStats'" style="width: 100%;">
<quiz-stats :active-data="classWorkActiveData" style="width: 100%;height: 100%;"/>
</div>
<!-- 整体分析-->
<!-- 训练报告-->
<div v-else-if="classWorkAnalysis.view == 'report'" style="width: 100%;overflow-y: scroll">
<!-- <ClassOverview :table-list="overviewData" :eval-id="courseObj.evalid"></ClassOverview> -->
<ClassOverview :active-data="classWorkActiveData" :table-list="overviewData" style="width: 100%;"></ClassOverview>
@ -180,7 +180,7 @@ const tableRadio = reactive({
const loading_dt_table = ref(false)
const isopen_dtwk_table = ref(false)
// zdg:
// zdg:
const classWorkActiveData = reactive({
quizlist: [], //
studentList: [], // -
@ -204,7 +204,7 @@ const classWorkAnalysisScore = reactive({
// }
// )
const openDialog = (data) => {
console.log(data, '点击的item答题情况')
console.log(data, '点击的item完成情况')
classWorkAnalysis.title = data.uniquekey ? data.uniquekey + '--' : ''
classWorkAnalysis.worktype = data.worktype
@ -459,7 +459,7 @@ const getStudentClassWorkDataDetail = (row) => {
}
})
.catch(() => {
console.log('获取答题情况失败')
console.log('获取完成情况失败')
ElMessage({
type: 'warning',
message: '未获取到答题信息!'
@ -471,7 +471,7 @@ const onClassWorkScoreSubmit = () => {
console.log('批改后返回的方法')
loading_dt_table.value = true
isopen_dtwk_table.value = false
// 1table- classWorkAnalysis.classworkdata- classWorkAnalysis.activeStudentQuizlist
// 1table- classWorkAnalysis.classworkdata- classWorkAnalysis.activeStudentQuizlist
// -
classWorkAnalysis.classworkdata = []
classWorkAnalysis.activeStudentQuizlist = []
@ -528,7 +528,7 @@ const escapeHtmlQuotes = (str) => {
return result;
}
//#region
//#region
// -
const workHandle = (type) => {
// ui
@ -563,11 +563,11 @@ const getWorkFeedList = async() =>{
//#endregion
//#regin
//#regin
/*
author: yangws
time: 2024-8-06 16:35:33
function: 整体分析的处理
function: 训练报告的处理
*/
const handleClassOverviewOpen = (type) =>{
// ui
@ -646,20 +646,18 @@ onMounted(() => {
watch(classWorkAnalysis, (newVal, oldVal) => {
if(newVal.view != 'quizStats'){
console.log('关闭zdg: 定时执行')
clearInterval(classWorkActiveData.timerId) //
clearInterval(classWorkActiveData.timerId) //
}
})
onUnmounted(() => {
clearInterval(classWorkActiveData.timerId) //
clearInterval(classWorkActiveData.timerId) //
})
// defineExpose({
// })
</script>
<style src="@/assets/styles/JYStyle.css"></style>
<style scoped lang="scss">
.teachClassTask{
height: 100%;
@ -705,94 +703,6 @@ onUnmounted(() => {
}
}
}
// .clwk_dialog {
// }
// .clwk_dialog {
// display: flex;
// justify-content: center;
// overflow: hidden;
// }
// .clwk_dialog .el-dialog {
// margin: 0 auto !important;
// height: 85%!important;
// overflow: hidden;
// }
// .clwk_dialog .el-dialog__header {
// /* position: absolute;
// top: 0;
// left: 0; */
// width: 100%!important;
// }
// .clwk_dialog .el-dialog__body {
// position: absolute;
// left: 0;
// top: 15px;
// bottom: 1px;
// right:0;
// padding:5px;
// z-index:1;
// display: flex;
// flex-direction: column;
// overflow: hidden;
// /* overflow:hidden;
// overflow-y: auto; */
// }
// .clwk_dialog .el-dialog__footer{
// position: absolute;
// bottom: 10px;
// right: 10px;
// }
// .clwk_dialog .classwork-score{
// overflow-y: auto;
// }
</style>
<style scoped>
/* .clwk_dialog {
display: flex;
justify-content: center;
overflow: hidden;
}
.clwk_dialog .el-dialog {
margin: 0 auto !important;
height: 85%!important;
overflow: hidden;
}
.clwk_dialog .el-dialog__header {
/* position: absolute;
top: 0;
left: 0;
width: 100%!important;
}
.clwk_dialog .el-dialog__body {
position: absolute;
left: 0;
top: 15px;
bottom: 1px;
right:0;
padding:5px;
z-index:1;
display: flex;
flex-direction: column;
overflow: hidden;
/* overflow:hidden;
overflow-y: auto;
}
.clwk_dialog .el-dialog__footer{
position: absolute;
bottom: 10px;
right: 10px;
}
.clwk_dialog .classwork-score{
overflow-y: auto;
} */
</style>
<style src="@/assets/styles/JYStyle.css"></style>

View File

@ -98,7 +98,7 @@ import FileImage from '@/components/file-image/index.vue'
import { asyncLocalFile } from '@/utils/talkFile'
import { toTimeText } from '@/utils/date'
import { ElMessage, ElMessageBox } from 'element-plus'
import { deleteSmarttalk, updateSmarttalk, getPrepareById } from '@/api/file'
import { deleteSmarttalk, updateSmarttalk, getPrepareById, getSmarttalkPage } from '@/api/file'
import useUserStore from '@/store/modules/user'
import outLink from '@/utils/linkConfig'
import { sessionStore } from '@/utils/store'
@ -208,6 +208,7 @@ export default {
}
if (action === 'cancel'){
//
console.log(obj.bookImg)
if (obj.bookImg) {
//PPT
listEntpcourse({
@ -241,9 +242,20 @@ export default {
}
})
}else {
console.log(obj)
getSmarttalkPage({fileId: obj.entpcoursefileid}).then(res2=>{
console.log(res2)
//APT
this.$emit('on-start-class', item, obj)
if (res2&&res2.rows.length>0) {
this.$emit('on-start-class', res2.rows[0], obj)
}else {
ElMessage({
message: '该文件未关联PPT无法打开',
type: 'warning'
})
}
done()
})
}
}
if (action === 'close') {

View File

@ -291,6 +291,7 @@ export default {
methods: {
addAiPPT(item) {
this.currentFileList.unshift(item.resData)
KjListItem.methods.openFileWin(item.resData);
this.pptDialog = false
},
// test() {