zhuhao_dev #270
|
@ -17,7 +17,7 @@
|
||||||
"build:test": "electron-vite build --mode test && electron-builder --win --config ./electron-builder.yml",
|
"build:test": "electron-vite build --mode test && electron-builder --win --config ./electron-builder.yml",
|
||||||
"build:prod": "electron-vite build --mode production && electron-builder --win --config ./electron-builder-prod.yml",
|
"build:prod": "electron-vite build --mode production && electron-builder --win --config ./electron-builder-prod.yml",
|
||||||
"build:lt": "electron-vite build --mode lt && electron-builder --win --config ./electron-builder-lt.yml",
|
"build:lt": "electron-vite build --mode lt && electron-builder --win --config ./electron-builder-lt.yml",
|
||||||
"build:mac": "npm run build && electron-builder --mac",
|
"build:mac": "electron-vite build --mode production && electron-builder --mac --config ./electron-builder-prod.yml",
|
||||||
"build:linux": "npm run build && electron-builder --linux"
|
"build:linux": "npm run build && electron-builder --linux"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { onMounted, ref } from 'vue';
|
import { onMounted, ref } from 'vue';
|
||||||
|
import { getAppInstallUrl } from '@/utils/tool'
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
url: {
|
url: {
|
||||||
type: String,
|
type: String,
|
||||||
|
@ -16,7 +17,7 @@ const props = defineProps({
|
||||||
/**pdf文件地址 */
|
/**pdf文件地址 */
|
||||||
const pdfUrl = ref('');
|
const pdfUrl = ref('');
|
||||||
/**pdfjs文件地址 */
|
/**pdfjs文件地址 */
|
||||||
const fileUrl = '/pdfjs-dist/web/viewer.html?file=';
|
const fileUrl = getAppInstallUrl('pdfjs-dist/web/viewer.html', 'user', '\\out\\renderer', true) + "?file=" //本地
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
/** 将传入的pdf地址进行编码,防止中文识别错误 */
|
/** 将传入的pdf地址进行编码,防止中文识别错误 */
|
||||||
pdfUrl.value = fileUrl + encodeURIComponent(props.url)
|
pdfUrl.value = fileUrl + encodeURIComponent(props.url)
|
||||||
|
|
|
@ -49,6 +49,18 @@ export const getStaticUrl = (url = '', type = 'app', exitPath = '', isFile = fal
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const getAppInstallUrl = (url = '', type = 'app', exitPath = '', isFile = false) => {
|
||||||
|
if (isDev) return url
|
||||||
|
else { // 生产环境获取-url
|
||||||
|
switch(type) {
|
||||||
|
case 'app': return path.join(__dirname, url) // 应用目录
|
||||||
|
case 'user': return (isFile?'file://':'')+path.join(Remote.app.getAppPath(),exitPath, url) // 用户目录
|
||||||
|
// case 'user': return (isFile?'file://':'')+path.join(Remote.app.getPath('userData'),exitPath, url) // 用户目录
|
||||||
|
default: return ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* @description 消息发送-nodejs 消息发送
|
* @description 消息发送-nodejs 消息发送
|
||||||
* @form src/main/tool.js 来源
|
* @form src/main/tool.js 来源
|
||||||
|
@ -137,7 +149,7 @@ export const createWindow = async (type, data) => {
|
||||||
winPdf.focus();
|
winPdf.focus();
|
||||||
// toolState.isPdfWin=true
|
// toolState.isPdfWin=true
|
||||||
}
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
const option = data.option||{}
|
const option = data.option||{}
|
||||||
|
@ -272,7 +284,7 @@ const eventHandles = (type, win) => {
|
||||||
winPdf=null
|
winPdf=null
|
||||||
win&&win.destroy()
|
win&&win.destroy()
|
||||||
})
|
})
|
||||||
|
|
||||||
// 监听窗口的激活事件
|
// 监听窗口的激活事件
|
||||||
win.on('focus', async () => {
|
win.on('focus', async () => {
|
||||||
console.log('激活窗口')
|
console.log('激活窗口')
|
||||||
|
@ -299,8 +311,8 @@ const eventHandles = (type, win) => {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @description 外部跳转-web网页
|
* @description 外部跳转-web网页
|
||||||
* @param {*} path
|
* @param {*} path
|
||||||
* @param {*} params
|
* @param {*} params
|
||||||
*/
|
*/
|
||||||
export const toLinkWeb = (path) => {
|
export const toLinkWeb = (path) => {
|
||||||
const config = baseConfig()
|
const config = baseConfig()
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
<template>
|
<template>
|
||||||
<el-dialog v-model="visible" width="75%" :close-on-click-modal="false"
|
<el-dialog v-model="visible" width="35%" :close-on-click-modal="false"
|
||||||
@close="handleClose">
|
@close="handleClose">
|
||||||
<template #header><b>准备开始上课</b></template>
|
<template #header><div style="width: 100%;text-align: left"><b>开始上课(APT)</b></div></template>
|
||||||
<div class="class-all">
|
<div class="class-all">
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="10">
|
<!-- <el-col :span="10">
|
||||||
<c-form v-bind="classForm">
|
<c-form v-bind="classForm">
|
||||||
<template #item_classid="{prop, form}">
|
<template #item_classid="{prop, form}">
|
||||||
<el-select v-model="form[prop]" placeholder="请选择班级">
|
<el-select v-model="form[prop]" placeholder="请选择班级">
|
||||||
<el-option v-for="item in listData.classList" :value="item.id"
|
<el-option v-for="item in listData.classList" :value="item.id"
|
||||||
:label="`${item.caption} (${item.classstudentcount}人)`" />
|
:label="`${item.caption} (${item.classstudentcount}人)`" />
|
||||||
</el-select>
|
</el-select>
|
||||||
</template>
|
</template>
|
||||||
|
@ -20,8 +20,16 @@
|
||||||
</el-scrollbar>
|
</el-scrollbar>
|
||||||
</template>
|
</template>
|
||||||
</c-form>
|
</c-form>
|
||||||
</el-col>
|
</el-col>-->
|
||||||
<el-col :span="14">
|
<el-col :span="24">
|
||||||
|
<c-form v-bind="classForm">
|
||||||
|
<template #item_classid="{prop, form}">
|
||||||
|
<el-select v-model="form[prop]" placeholder="请选择班级">
|
||||||
|
<el-option v-for="item in listData.classList" :value="item.id"
|
||||||
|
:label="`${item.caption} (${item.classstudentcount}人)`" />
|
||||||
|
</el-select>
|
||||||
|
</template>
|
||||||
|
</c-form>
|
||||||
<c-form v-bind="teacherForm">
|
<c-form v-bind="teacherForm">
|
||||||
<!-- 上课 -->
|
<!-- 上课 -->
|
||||||
<template #item_classcourseid="{prop,form}">
|
<template #item_classcourseid="{prop,form}">
|
||||||
|
@ -44,7 +52,7 @@
|
||||||
<div :title="value" v-if="!!value">
|
<div :title="value" v-if="!!value">
|
||||||
<vue-qr :text="value" :size="200" :margin="10" colorDark="green" colorLight="white" :logoSrc="getStaticUrl('/img/logo.png')" :logoScale="0.2" :dotScale="0.7"></vue-qr>
|
<vue-qr :text="value" :size="200" :margin="10" colorDark="green" colorLight="white" :logoSrc="getStaticUrl('/img/logo.png')" :logoScale="0.2" :dotScale="0.7"></vue-qr>
|
||||||
</div>
|
</div>
|
||||||
<el-button type="warning" :loading="dt.loadingDel" @click="removeClasscourse()">删除记录</el-button>
|
<!-- <el-button type="warning" :loading="dt.loadingDel" @click="removeClasscourse()">删除记录</el-button>-->
|
||||||
</template>
|
</template>
|
||||||
<!-- 手机登录 -->
|
<!-- 手机登录 -->
|
||||||
<template #item_mobile>
|
<template #item_mobile>
|
||||||
|
@ -90,7 +98,6 @@ const visible = ref(false) // 是否打开窗口
|
||||||
const myClassActive = ref({}) // 我的课件:准备上课的APT课件
|
const myClassActive = ref({}) // 我的课件:准备上课的APT课件
|
||||||
const imChatRef = ref(null) // im-chat ref
|
const imChatRef = ref(null) // im-chat ref
|
||||||
const emit = defineEmits(['close'])
|
const emit = defineEmits(['close'])
|
||||||
|
|
||||||
const classForm = reactive({ // 班级(左侧):表单数据 表单配置
|
const classForm = reactive({ // 班级(左侧):表单数据 表单配置
|
||||||
form: {}, itemOption: [], option: {}
|
form: {}, itemOption: [], option: {}
|
||||||
})
|
})
|
||||||
|
@ -132,7 +139,7 @@ const open = async (id) => {
|
||||||
nextTick(async() => {
|
nextTick(async() => {
|
||||||
chat = await imChatRef.value?.initImChat()
|
chat = await imChatRef.value?.initImChat()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 关闭弹窗
|
// 关闭弹窗
|
||||||
const handleClose = async () => {
|
const handleClose = async () => {
|
||||||
|
@ -144,15 +151,16 @@ const handleClose = async () => {
|
||||||
// 初始化-数据
|
// 初始化-数据
|
||||||
const initData = () => {
|
const initData = () => {
|
||||||
// 班级-表单配置
|
// 班级-表单配置
|
||||||
classForm.option = { labelW: 40 }
|
classForm.option = { labelW: 80 }
|
||||||
classForm.itemOption = [
|
classForm.itemOption = [
|
||||||
{ label: '班级', prop: 'classid' },
|
{ label: '班级', prop: 'classid' },
|
||||||
{ label: '学生', prop: 'student' },
|
// { label: '学生', prop: 'student' },
|
||||||
]
|
]
|
||||||
// 老师-表单提交
|
// 老师-表单提交
|
||||||
teacherForm.form = { classcourseid: 0 }
|
teacherForm.form = { classcourseid: 0 }
|
||||||
teacherForm.itemOption = [
|
teacherForm.itemOption = [
|
||||||
{ label: '上课', prop: 'classcourseid' },
|
// { label: '班级', prop: 'classid' },
|
||||||
|
// { label: '上课', prop: 'classcourseid' },
|
||||||
{ label: '老师扫码', prop: 'qrUrl', show: false },
|
{ label: '老师扫码', prop: 'qrUrl', show: false },
|
||||||
{ label: '手机登录', prop: 'mobile', show: false },
|
{ label: '手机登录', prop: 'mobile', show: false },
|
||||||
{ label: '故障备用', prop: 'backup', show: false },
|
{ label: '故障备用', prop: 'backup', show: false },
|
||||||
|
@ -187,10 +195,10 @@ const getClassList = async () => {
|
||||||
return o
|
return o
|
||||||
});
|
});
|
||||||
// 默认选中第一项
|
// 默认选中第一项
|
||||||
if (listData.classList.length > 0) {
|
/*if (listData.classList.length > 0) {
|
||||||
classForm.form.classid = listData.classList[0].id
|
classForm.form.classid = listData.classList[0].id
|
||||||
}
|
}*/
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 获取开课列表 - 历史记录
|
// 获取开课列表 - 历史记录
|
||||||
|
@ -217,8 +225,12 @@ const getClasscourseList = async type => {
|
||||||
}
|
}
|
||||||
// 创建课程
|
// 创建课程
|
||||||
const createClasscourse = async () => {
|
const createClasscourse = async () => {
|
||||||
dt.loading = true
|
|
||||||
const { classid } = classForm.form
|
const { classid } = classForm.form
|
||||||
|
if (!classid) {
|
||||||
|
ElMessage.warning('请选择班级')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
dt.loading = true
|
||||||
const { entpcourseid, evalid, id, coursetitle } = myClassActive.value // 课件对象
|
const { entpcourseid, evalid, id, coursetitle } = myClassActive.value // 课件对象
|
||||||
const curDate = commUtil.getDateNow('yyyy-MM-dd')
|
const curDate = commUtil.getDateNow('yyyy-MM-dd')
|
||||||
const params = {
|
const params = {
|
||||||
|
@ -329,4 +341,4 @@ defineExpose({
|
||||||
.class-all{
|
.class-all{
|
||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -2,10 +2,10 @@
|
||||||
<el-dialog
|
<el-dialog
|
||||||
v-model="centerDialogVisible"
|
v-model="centerDialogVisible"
|
||||||
class="reserv-dialog"
|
class="reserv-dialog"
|
||||||
title="上课"
|
title="开始上课(PPT)"
|
||||||
destroy-on-close
|
destroy-on-close
|
||||||
:before-close="closeDialog"
|
:before-close="closeDialog"
|
||||||
width="600"
|
width="35%"
|
||||||
style="text-align: left"
|
style="text-align: left"
|
||||||
>
|
>
|
||||||
<el-form
|
<el-form
|
||||||
|
@ -15,7 +15,7 @@
|
||||||
label-width="auto"
|
label-width="auto"
|
||||||
style="max-width: 600px"
|
style="max-width: 600px"
|
||||||
>
|
>
|
||||||
<el-form-item label="课程名称" prop="name">
|
<!-- <el-form-item label="课程名称" prop="name">
|
||||||
<el-input v-model="form.name" />
|
<el-input v-model="form.name" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="课程类型" prop="type">
|
<el-form-item label="课程类型" prop="type">
|
||||||
|
@ -59,17 +59,21 @@
|
||||||
/>
|
/>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form-item>
|
</el-form-item>-->
|
||||||
<el-form-item label="授课对象" prop="resource">
|
<el-form-item label-width="80px" label="班级" prop="resource">
|
||||||
<el-checkbox-group v-model="form.resource">
|
<el-select v-model="form.resource" placeholder="请选择班级">
|
||||||
|
<el-option v-for="(item, index) in classList" :value="item.id"
|
||||||
|
:label="`${item.caption} (${item.classstudentcount}人)`" />
|
||||||
|
</el-select>
|
||||||
|
<!-- <el-checkbox-group v-model="form.resource">
|
||||||
<el-checkbox v-for="(item, index) in classList" :key="index" name="type" :value="item.id"
|
<el-checkbox v-for="(item, index) in classList" :key="index" name="type" :value="item.id"
|
||||||
>{{ item.caption }}({{ item.classstudentcount }})人
|
>{{ item.caption }}({{ item.classstudentcount }})人
|
||||||
</el-checkbox>
|
</el-checkbox>
|
||||||
</el-checkbox-group>
|
</el-checkbox-group>-->
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="教室" prop="classRoom">
|
<!-- <el-form-item label="教室" prop="classRoom">
|
||||||
<el-input v-model="form.classRoom" />
|
<el-input v-model="form.classRoom" />
|
||||||
</el-form-item>
|
</el-form-item>-->
|
||||||
</el-form>
|
</el-form>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<div class="dialog-footer">
|
<div class="dialog-footer">
|
||||||
|
@ -272,7 +276,7 @@ const updateClassReserv = (formData) => {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
const addClassReserv = (formData) => {
|
const addClassReserv = (formData) => {
|
||||||
let ids = formData.resource.join(',')
|
let ids = formData.resource
|
||||||
// 判断是否添加教材
|
// 判断是否添加教材
|
||||||
if(!props.bookId){
|
if(!props.bookId){
|
||||||
ElMessage.warning('请选择教材')
|
ElMessage.warning('请选择教材')
|
||||||
|
@ -293,10 +297,10 @@ const addClassReserv = (formData) => {
|
||||||
addSmartClassReserv(param).then((res) => {
|
addSmartClassReserv(param).then((res) => {
|
||||||
if (res.msg) {
|
if (res.msg) {
|
||||||
closeDialog()
|
closeDialog()
|
||||||
ElMessage({
|
/*ElMessage({
|
||||||
type: 'success',
|
type: 'success',
|
||||||
message: '预约成功!'
|
message: '预约成功!'
|
||||||
})
|
})*/
|
||||||
emit('addSuccess',res.msg)
|
emit('addSuccess',res.msg)
|
||||||
} else {
|
} else {
|
||||||
ElMessage({
|
ElMessage({
|
||||||
|
|
|
@ -313,7 +313,6 @@ export default {
|
||||||
this.openReserv()
|
this.openReserv()
|
||||||
}
|
}
|
||||||
if(item.fileFlag === 'apt') {
|
if(item.fileFlag === 'apt') {
|
||||||
//TODO 打开apt - fileId: aptId
|
|
||||||
this.$refs.calssRef.open(item.fileId)
|
this.$refs.calssRef.open(item.fileId)
|
||||||
}
|
}
|
||||||
// 当前上课-store
|
// 当前上课-store
|
||||||
|
|
Loading…
Reference in New Issue