Merge branch 'main' of http://27.128.240.72:3000/zhuhao/AIx_Smarttalk into zdg
# Conflicts: # src/renderer/src/utils/tool.js # src/renderer/src/views/prepare/index.vue # src/renderer/src/views/tool/components/side.vue # src/renderer/src/views/tool/sphere.vue
This commit is contained in:
commit
0da2b25586
|
@ -9,7 +9,7 @@ VITE_APP_BASE_API = '/dev-api'
|
|||
|
||||
VITE_APP_DOMAIN = 'file.ysaix.com'
|
||||
|
||||
VITE_APP_UPLOAD_API = 'http://192.168.2.52:7863'
|
||||
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/'
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "aix-win",
|
||||
"version": "1.0.7",
|
||||
"version": "1.1.0",
|
||||
"description": "An Electron application with Vue",
|
||||
"main": "./out/main/index.js",
|
||||
"author": "example.com",
|
||||
|
|
|
@ -127,12 +127,8 @@ async function createLinkWin(data) {
|
|||
let cookieDetails = { ...data.cookieData }
|
||||
await linkWin[data.key].webContents.session.cookies
|
||||
.set(cookieDetails)
|
||||
.then(() => {
|
||||
console.log('Cookie is successful')
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error('Cookie is error', error)
|
||||
})
|
||||
.then(() => {})
|
||||
.catch((error) => {})
|
||||
data.fullPath = data.fullPath.replaceAll('//', '/')
|
||||
linkWin[data.key].loadURL(data.fullPath)
|
||||
|
||||
|
|
|
@ -159,11 +159,11 @@ export function deleteSmartReserv(id) {
|
|||
method: 'delete'
|
||||
})
|
||||
}
|
||||
export function startClass(id) {
|
||||
export function startClass(id, ex3) {
|
||||
return request({
|
||||
url: '/smarttalk/classReserv/startClass',
|
||||
method: 'get',
|
||||
params: {id}
|
||||
params: {id, ex3}
|
||||
})
|
||||
}
|
||||
export function endClass(id) {
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
@font-face {
|
||||
font-family: "iconfont"; /* Project id 2794390 */
|
||||
src: url('iconfont.woff2?t=1723452423265') format('woff2'),
|
||||
url('iconfont.woff?t=1723452423265') format('woff'),
|
||||
url('iconfont.ttf?t=1723452423265') format('truetype'),
|
||||
url('iconfont.svg?t=1723452423265#iconfont') format('svg');
|
||||
src: url('iconfont.woff2?t=1723453634574') format('woff2'),
|
||||
url('iconfont.woff?t=1723453634574') format('woff'),
|
||||
url('iconfont.ttf?t=1723453634574') format('truetype'),
|
||||
url('iconfont.svg?t=1723453634574#iconfont') format('svg');
|
||||
}
|
||||
|
||||
.iconfont {
|
||||
|
@ -14,6 +14,10 @@
|
|||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
.icon-arrangement:before {
|
||||
content: "\e656";
|
||||
}
|
||||
|
||||
.icon-zanwushuju:before {
|
||||
content: "\e655";
|
||||
}
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -5,6 +5,13 @@
|
|||
"css_prefix_text": "icon-",
|
||||
"description": "",
|
||||
"glyphs": [
|
||||
{
|
||||
"icon_id": "4978988",
|
||||
"name": "作业-布置作业",
|
||||
"font_class": "arrangement",
|
||||
"unicode": "e656",
|
||||
"unicode_decimal": 58966
|
||||
},
|
||||
{
|
||||
"icon_id": "9689424",
|
||||
"name": "暂无数据",
|
||||
|
|
|
@ -14,6 +14,8 @@
|
|||
/>
|
||||
<missing-glyph />
|
||||
|
||||
<glyph glyph-name="arrangement" unicode="" d="M939.52 199.67999999999995c-10.24 10.24-25.6 10.24-35.84 0l-184.32-184.32-81.92 81.92c-10.24 10.24-25.6 10.24-35.84 0s-10.24-25.6 0-35.84l102.4-102.4c5.12-5.12 10.24-5.12 20.48-5.12s15.36 0 20.48 5.12l204.8 204.8c-5.12 5.12-5.12 25.6-10.24 35.84zM688.64 537.6c0 15.36-10.24 25.6-25.6 25.6h-409.6c-15.36 0-25.6-10.24-25.6-25.6s10.24-25.6 25.6-25.6h409.6c15.36 0 25.6 10.24 25.6 25.6zM458.24 153.60000000000002h-204.8c-15.36 0-25.6-10.24-25.6-25.6s10.24-25.6 25.6-25.6h204.8c15.36 0 25.6 10.24 25.6 25.6s-10.24 25.6-25.6 25.6zM611.84-76.79999999999995h-460.8c-15.36 0-25.6 10.24-25.6 25.6V742.4c0 15.36 10.24 25.6 25.6 25.6H227.84C227.84 727.04 263.68 691.2 304.64 691.2h307.2c40.96 0 76.8 35.84 76.8 76.8h76.8c15.36 0 25.6-10.24 25.6-25.6v-460.8c0-15.36 10.24-25.6 25.6-25.6s25.6 10.24 25.6 25.6V742.4c0 40.96-35.84 76.8-76.8 76.8H688.64c0 40.96-35.84 76.8-76.8 76.8h-307.2C263.68 896 227.84 860.16 227.84 819.2H151.04C110.08 819.2 74.24 783.36 74.24 742.4v-793.6c0-40.96 35.84-76.8 76.8-76.8h460.8c15.36 0 25.6 10.24 25.6 25.6s-10.24 25.6-25.6 25.6zM279.04 819.2c0 15.36 10.24 25.6 25.6 25.6h307.2c15.36 0 25.6-10.24 25.6-25.6v-51.2c0-15.36-10.24-25.6-25.6-25.6h-307.2c-15.36 0-25.6 10.24-25.6 25.6v51.2zM458.24 358.4h-204.8c-15.36 0-25.6-10.24-25.6-25.6s10.24-25.6 25.6-25.6h204.8c15.36 0 25.6 10.24 25.6 25.6s-10.24 25.6-25.6 25.6z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="zanwushuju" unicode="" d="M876.202667 543.445333H147.882667L0 282.752V-42.666667h1024v325.376l-147.797333 260.736z m-234.112-263.637333c0-70.485333-58.197333-127.658667-130.090667-127.658667-71.893333 0-130.133333 57.173333-130.133333 127.658667H61.098667L179.541333 501.76H844.373333l118.442667-221.952H642.133333zM500.138667 810.666667h44.629333v-157.610667h-44.629333V810.666667zM197.290667 732.416l31.573333 31.018667L342.272 651.946667l-31.573333-31.018667-113.493334 111.445333z m491.52-80.512l113.493333 111.445333 31.573333-30.976-113.493333-111.445333-31.573333 30.976z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="xiangzuo" unicode="" d="M774.89 725L399.08 380.75l375.81-344.21a39.28 39.28 0 0 0 13.11-29c0-36.51-48.19-54.79-76.38-29L335.8 322.8c-34.94 32-34.94 83.9 0 115.9l375.82 344.22c28.19 25.81 76.38 7.53 76.38-29A39.3 39.3 0 0 0 774.89 725z" horiz-adv-x="1024" />
|
||||
|
|
Before Width: | Height: | Size: 263 KiB After Width: | Height: | Size: 264 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -42,7 +42,7 @@
|
|||
</template>
|
||||
|
||||
<script setup>
|
||||
import { onMounted, ref, nextTick, toRaw, reactive,watch } from 'vue';
|
||||
import { onMounted, ref, nextTick, toRaw, reactive } from 'vue';
|
||||
import useUserStore from '@/store/modules/user'
|
||||
import { listEvaluation } from '@/api/subject'
|
||||
|
||||
|
@ -258,7 +258,7 @@ const transData = (data) => {
|
|||
const getSubject = async () => {
|
||||
|
||||
const { rows } = await listEvaluation({ itemkey: "version", pageSize: 500 })
|
||||
subjectList.value = rows.filter(item => item.edustage == edustage && item.edusubject == edusubject)
|
||||
subjectList.value = rows.filter(item => item.edustage == edustage && item.edusubject == edusubject && isHaveUnit(item.id))
|
||||
localStorage.setItem('subjectList', JSON.stringify(subjectList.value))
|
||||
|
||||
// 默认第一个
|
||||
|
@ -270,11 +270,11 @@ const getSubject = async () => {
|
|||
}
|
||||
|
||||
|
||||
// const isHaveUnit = (id) => {
|
||||
// return evaluationList.value.some(item => {
|
||||
// return item.rootid == id
|
||||
// })
|
||||
// }
|
||||
const isHaveUnit = (id) => {
|
||||
return evaluationList.value.some(item => {
|
||||
return item.rootid == id
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
const handleNodeClick = (data, node) => {
|
||||
|
@ -305,9 +305,6 @@ const handleNodeClick = (data, node) => {
|
|||
currentNode.data = curData
|
||||
emit('nodeClick', curData)
|
||||
}
|
||||
watch(() => userStore.edusubject, () => {
|
||||
console.log(userStore.edusubject,'userStore.edusubject')
|
||||
})
|
||||
onMounted(() => {
|
||||
getSubjectContent()
|
||||
})
|
||||
|
|
|
@ -45,7 +45,6 @@ function stateSync(storeName, key, value) {
|
|||
function stateSyncAll(store) {
|
||||
const storeName = store.$id
|
||||
const jsonStr = circularSafeStringify(store.$state)
|
||||
console.log('state-change', jsonStr, storeName)
|
||||
// 通知主线程更新
|
||||
ipcRenderer?.invoke('pinia-state-change', storeName, jsonStr)
|
||||
}
|
||||
|
|
|
@ -47,6 +47,12 @@ export default () => {
|
|||
data: { ...baseConfig() },
|
||||
fullPath: `${baseConfig().url}/platofai`
|
||||
},
|
||||
// 文件资源 布置作业
|
||||
filehomework: {
|
||||
data: { ...baseConfig() },
|
||||
|
||||
fullPath: `${baseConfig().url}/teaching/classtaskassign?titleName=作业布置`
|
||||
},
|
||||
|
||||
getBaseData: () => {
|
||||
return {
|
||||
|
|
|
@ -84,14 +84,10 @@ export function ipcHandle(fn,key, cb) {
|
|||
* @param {*} data 参数
|
||||
* @returns
|
||||
*/
|
||||
let wins_tool = null
|
||||
let winPdf=null
|
||||
export const createWindow = async (type, data) => {
|
||||
// console.log(path.join(process.resourcesPath, 'src/preload/index.js'))
|
||||
// console.log(path.join(API.preloadPath, '/preload/index.js'))
|
||||
// console.log(path.join(API.preloadPath, '/index.js'))
|
||||
// console.log(API.preloadPath)
|
||||
// console.log(API.getTimRender())
|
||||
// return
|
||||
if (wins_tool) return console.error('createWindow: win is have')
|
||||
if (!type) return console.error('createWindow: type is null')
|
||||
switch(type) {
|
||||
case 'tool-sphere': { // 创建-悬浮球
|
||||
|
@ -107,16 +103,16 @@ export const createWindow = async (type, data) => {
|
|||
data.isConsole = true // 是否开启控制台
|
||||
data.isWeb = false // 是否开启web安全
|
||||
data.option = {...defOption, ...option}
|
||||
const win = await toolWindow(data)
|
||||
win.type = type // 唯一标识
|
||||
win.show()
|
||||
win.setFullScreen(true) // 设置窗口为全屏
|
||||
win.setIgnoreMouseEvents(true, {forward: true}) // 忽略鼠标事件但是事件继续传递给窗口
|
||||
win.setAlwaysOnTop(true,'screen-saver') // 将窗口设置为顶层窗口
|
||||
win.setVisibleOnAllWorkspaces(true) // 如果窗口在所有工作区都可见
|
||||
wins_tool = await toolWindow(data)
|
||||
wins_tool.type = type // 唯一标识
|
||||
wins_tool.show()
|
||||
wins_tool.setFullScreen(true) // 设置窗口为全屏
|
||||
wins_tool.setIgnoreMouseEvents(true, {forward: true}) // 忽略鼠标事件但是事件继续传递给窗口
|
||||
wins_tool.setAlwaysOnTop(true,'screen-saver') // 将窗口设置为顶层窗口
|
||||
wins_tool.setVisibleOnAllWorkspaces(true) // 如果窗口在所有工作区都可见
|
||||
// win.webContents.openDevTools() // 打开调试工具
|
||||
eventHandles(type, win) // 事件监听处理
|
||||
return win
|
||||
eventHandles(type, wins_tool) // 事件监听处理
|
||||
return wins_tool
|
||||
}
|
||||
case 'open-PDF': { //课本展示-pdf
|
||||
const option = data.option||{}
|
||||
|
@ -214,6 +210,7 @@ const eventHandles = (type, win) => {
|
|||
win.on('closed', () => {
|
||||
if(onClosed) onClosed() // 自定义关闭事件
|
||||
win = null
|
||||
wins_tool = null
|
||||
})
|
||||
|
||||
// 新窗口-创建事件(如:主进程加载远程服务)
|
||||
|
|
|
@ -17,6 +17,8 @@
|
|||
v-show="tabActive === '已结束'"
|
||||
:key="index"
|
||||
:item="item"
|
||||
@open-edit="reservDialog.openDialog(item)"
|
||||
@delete-reserv="deleteReserv(item)"
|
||||
></reserv-item>
|
||||
</div>
|
||||
<reserv ref="reservDialog"></reserv>
|
||||
|
@ -51,8 +53,8 @@ const doneDataList = computed(() => {
|
|||
})
|
||||
const toolStore = useToolState()
|
||||
watch(
|
||||
() => toolStore.isToolWin,
|
||||
(newD, oldD) => {
|
||||
() => [dataList,toolStore.isToolWin],
|
||||
() => {
|
||||
getSelfReserv().then((res) => {
|
||||
dataList.value = [...res.data]
|
||||
})
|
||||
|
|
|
@ -68,18 +68,18 @@ const startClassR = (item) => {
|
|||
}
|
||||
})
|
||||
}
|
||||
const toolStore = useToolState()
|
||||
// const toolStore = useToolState()
|
||||
let wins = null;
|
||||
// 上课-工具类悬浮
|
||||
const openLesson = () => {
|
||||
if (toolStore.isToolWin) return ElMessage.error('您当前已开始上课,请勿重复操作')
|
||||
startClass(props.item.id)
|
||||
listEntpcourse({
|
||||
evalid: props.item.ex2,
|
||||
edituserid: useUserStore().user.userId,
|
||||
pageSize: 500
|
||||
}).then(res=>{
|
||||
}).then(async res=>{
|
||||
if (res.rows[0].id) {
|
||||
createWindow('tool-sphere', { url: '/tool/sphere?entpcourseid=' + res.rows[0].id + "&reservId=" + props.item.id })
|
||||
wins = await createWindow('tool-sphere', { url: '/tool/sphere?entpcourseid=' + res.rows[0].id + "&reservId=" + props.item.id })
|
||||
}
|
||||
})
|
||||
}
|
||||
|
|
|
@ -95,6 +95,12 @@
|
|||
</template>
|
||||
<template v-else>
|
||||
<!-- 判断是不是自己创建的课件-->
|
||||
<div class="item-popover-item">
|
||||
<el-button text @click="openFileLink(item)">
|
||||
<i class="iconfont icon-arrangement"></i>
|
||||
<span>布置</span>
|
||||
</el-button>
|
||||
</div>
|
||||
<div class="item-popover-item" v-if="userInfo.userId === Number(item.createUserId)">
|
||||
<el-button text @click="editTalk(item, index)">
|
||||
<i class="iconfont icon-bianji"></i>
|
||||
|
@ -142,6 +148,7 @@ import { toTimeText } from '@/utils/date'
|
|||
import { ElMessage, ElMessageBox } from 'element-plus'
|
||||
import { deleteSmarttalk, updateSmarttalk, getPrepareById } from '@/api/file'
|
||||
import useUserStore from '@/store/modules/user'
|
||||
import outLink from '@/utils/linkConfig'
|
||||
|
||||
const { ipcRenderer } = window.electron || {}
|
||||
export default {
|
||||
|
@ -161,7 +168,7 @@ export default {
|
|||
}
|
||||
}
|
||||
},
|
||||
emits: { 'on-move': null, 'on-delete': null, 'on-set': null, 'on-delhomework': null },
|
||||
emits: { 'on-move': null, 'on-delete': null, 'on-set': null, 'on-delhomework': null,'on-filearg': null },
|
||||
data() {
|
||||
return {
|
||||
listenList: [],
|
||||
|
@ -256,6 +263,21 @@ export default {
|
|||
// 删除作业
|
||||
deleteHomework(item){
|
||||
this.$emit('on-delhomework', item)
|
||||
},
|
||||
// 文件资源打开web AIX 布置作业
|
||||
openFileLink(item){
|
||||
let unitId = item.levelSecondId ? item.levelSecondId : item.levelFirstId
|
||||
// key 对应的 linkConfig.js 外部链接配置
|
||||
let key = 'filehomework'
|
||||
let configObj = outLink()[key]
|
||||
// 通知主进程
|
||||
ipcRenderer.send('openWindow', {
|
||||
key,
|
||||
fullPath: configObj.fullPath + `&fileShowName=${item.fileShowName}&fileFullPath=${item.fileFullPath}&unitId=${unitId}`,
|
||||
cookieData: { ...configObj.data }
|
||||
})
|
||||
|
||||
this.$emit('on-filearg', item)
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
|
|
|
@ -44,11 +44,36 @@
|
|||
<el-button type="primary" style="margin-left: 10px" @click="createFile">新建课件</el-button>
|
||||
</div>
|
||||
</div>
|
||||
<el-checkbox-group v-model="checkFileList" class="prepare-body-main"
|
||||
:style="{ 'margin-bottom': checkFileList.length > 0 ? '40px' : '0' }">
|
||||
<file-list-item v-for="(item, index) in currentFileList" :key="index" :item="item" :index="index"
|
||||
@on-move="onMoveSingleFile" @on-delete="deleteTalk" @on-set="openSet" @on-delhomework="delhomework">
|
||||
<el-checkbox label="" :value="item" v-if="!item.uniquekey" />
|
||||
<el-checkbox-group
|
||||
v-model="checkFileList"
|
||||
class="prepare-body-main"
|
||||
:style="{ 'margin-bottom': checkFileList.length > 0 ? '40px' : '0' }"
|
||||
>
|
||||
<file-list-item
|
||||
v-for="(item, index) in currentFileList"
|
||||
:key="index"
|
||||
:item="item"
|
||||
:index="index"
|
||||
@on-move="onMoveSingleFile"
|
||||
@on-delete="deleteTalk"
|
||||
@on-set="openSet"
|
||||
@on-delhomework="delhomework"
|
||||
@on-filearg="isOpenHomework = true"
|
||||
>
|
||||
<el-checkbox v-if="!item.uniquekey" label="" :value="item" />
|
||||
</file-list-item>
|
||||
<file-list-item
|
||||
v-for="(item, index) in currentWorkList"
|
||||
:key="index"
|
||||
:item="item"
|
||||
:index="index"
|
||||
@on-move="onMoveSingleFile"
|
||||
@on-delete="deleteTalk"
|
||||
@on-set="openSet"
|
||||
@on-delhomework="delhomework"
|
||||
|
||||
>
|
||||
<el-checkbox v-if="!item.uniquekey" label="" :value="item" />
|
||||
</file-list-item>
|
||||
</el-checkbox-group>
|
||||
<file-oper-batch v-show="checkFileList.length > 0"
|
||||
|
@ -85,7 +110,7 @@ import FileOperBatch from '@/views/prepare/container/file-oper-batch.vue'
|
|||
import SetHomework from './container/set-homework.vue'
|
||||
import outLink from '@/utils/linkConfig'
|
||||
import { createWindow } from '@/utils/tool'
|
||||
import { uniqBy, cloneDeep } from 'lodash'
|
||||
import { cloneDeep } from 'lodash'
|
||||
import { delClasswork, addEntpcourse } from '@/api/teaching/classwork'
|
||||
const fs = require('fs');
|
||||
const { ipcRenderer } = window.electron || {}
|
||||
|
@ -127,10 +152,10 @@ export default {
|
|||
// 用户信息
|
||||
userStore: '',
|
||||
entpcourseid: '',
|
||||
timerId: null,
|
||||
// 布置作业弹窗
|
||||
setDialog: false,
|
||||
row: '',
|
||||
isOpenHomework: false,
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
|
@ -140,13 +165,7 @@ export default {
|
|||
)
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
$route(to) {
|
||||
if (to.path != '/prepare' && this.timerId) {
|
||||
clearInterval(this.timerId)
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
created() {
|
||||
this.userStore = useUserStore().user
|
||||
ipcRenderer.removeAllListeners('copy-file-default-reply')
|
||||
|
@ -156,13 +175,25 @@ export default {
|
|||
})
|
||||
this.lastAsyncAllTime = localStorage.getItem('lastAsyncAllTime')
|
||||
},
|
||||
mounted() { },
|
||||
activated() {
|
||||
if (this.uploadData.textbookId !== null) {
|
||||
this.asyncAllFile()
|
||||
mounted() {
|
||||
// electron 当前窗口
|
||||
const curWin = Remote.getCurrentWindow()
|
||||
curWin.on('focus', ()=>{
|
||||
if(!this.isOpenHomework) return
|
||||
this.initHomeWork()
|
||||
}
|
||||
this.asyncAllFile()
|
||||
this.isOpenHomework = false
|
||||
})
|
||||
|
||||
|
||||
},
|
||||
// activated() {
|
||||
// if (this.uploadData.textbookId !== null) {
|
||||
// this.asyncAllFile()
|
||||
// this.initHomeWork()
|
||||
// this.initReserv()
|
||||
// }
|
||||
// },
|
||||
methods: {
|
||||
getBookPathFromServer() {
|
||||
let fileName = this.curBookPath
|
||||
|
@ -330,9 +361,7 @@ export default {
|
|||
|
||||
},
|
||||
async initHomeWork() {
|
||||
if (this.timerId) {
|
||||
clearInterval(this.timerId)
|
||||
}
|
||||
|
||||
if (this.uploadData.levelSecondId) {
|
||||
// 获取作业列表所需ID 可能存在没有
|
||||
let { rows } = await this.getChapterId()
|
||||
|
@ -376,16 +405,26 @@ export default {
|
|||
},
|
||||
// 打开外部链接
|
||||
handleOutLink(key) {
|
||||
if (key == 'homeWork') {
|
||||
// 查询作业
|
||||
this.createTimer()
|
||||
if(key == 'homeWork'){
|
||||
this.isOpenHomework = true
|
||||
}
|
||||
// key 对应的 linkConfig.js 外部链接配置
|
||||
let configObj = outLink()[key]
|
||||
let fullPath = configObj.fullPath
|
||||
//打开作业 高考 url增加unitId 章节ID
|
||||
if(key != 'standard' && key != 'aiModel'){
|
||||
let unitId = this.uploadData.levelSecondId ? this.uploadData.levelSecondId : this.uploadData.levelFirstId
|
||||
if(key == 'gk'){
|
||||
fullPath += `?unitId=${unitId}`
|
||||
}
|
||||
else{
|
||||
fullPath += `&unitId=${unitId}`
|
||||
}
|
||||
}
|
||||
// 通知主进程
|
||||
ipcRenderer.send('openWindow', {
|
||||
key,
|
||||
fullPath: configObj.fullPath,
|
||||
fullPath: fullPath,
|
||||
cookieData: { ...configObj.data }
|
||||
})
|
||||
},
|
||||
|
@ -397,12 +436,7 @@ export default {
|
|||
pageSize: 500
|
||||
})
|
||||
},
|
||||
// 查询作业列表定时器
|
||||
createTimer() {
|
||||
this.timerId = setInterval(() => {
|
||||
this.getHomeWorkList()
|
||||
}, 1500)
|
||||
},
|
||||
|
||||
// 查询作业列表
|
||||
getHomeWorkList() {
|
||||
homeworklist({
|
||||
|
@ -463,10 +497,8 @@ export default {
|
|||
res.rows[i].entpcourseworklistarray = []
|
||||
}
|
||||
}
|
||||
// 去重
|
||||
let ary = uniqBy([...this.currentFileList, ...list], 'id')
|
||||
// 深度克隆
|
||||
this.currentFileList = cloneDeep(ary)
|
||||
this.currentWorkList = cloneDeep(list)
|
||||
})
|
||||
},
|
||||
// 打开布置作业窗口
|
||||
|
@ -500,10 +532,17 @@ export default {
|
|||
createWindow('open-PDF', { url: '/classBegins/index?textbookId='+this.uploadData.textbookId+'&path='+ path })
|
||||
},
|
||||
// 上课-工具类悬浮
|
||||
openLesson() {
|
||||
const toolStore = useToolState()
|
||||
if (toolStore.isToolWin) return this.$message.error('您当前已开始上课,请勿重复操作')
|
||||
createWindow('tool-sphere', { url: '/tool/sphere?entpcourseid=' + this.entpcourseid +'&label=' + this.currentNode.label })
|
||||
async openLesson() {
|
||||
await startClass(this.curClassReserv.id)
|
||||
createWindow('tool-sphere', {
|
||||
url:
|
||||
'/tool/sphere?entpcourseid=' +
|
||||
this.entpcourseid +
|
||||
'&label=' +
|
||||
this.currentNode.label +
|
||||
'&reservId=' +
|
||||
this.curClassReserv.id
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="6" :xs="24">
|
||||
<el-row :gutter="20" style="display: flex;flex-wrap: nowrap;justify-content: start">
|
||||
<el-col :xs="24" style="min-width: 260px;max-width: 260px">
|
||||
<el-card class="box-card">
|
||||
<template v-slot:header>
|
||||
<div class="clearfix">
|
||||
|
|
|
@ -15,6 +15,15 @@
|
|||
<el-radio value="1">女</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="学段">
|
||||
<el-radio-group v-model="user.edustage" @change="semeterChange">
|
||||
<template v-for="(item,index) in semesterList" :key="index">
|
||||
<el-radio :value="item.title">
|
||||
{{item.title }}
|
||||
</el-radio>
|
||||
</template>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="任教学科">
|
||||
<el-radio-group v-model="user.edusubject">
|
||||
<template v-for="(item,index) in subjectList" :key="index">
|
||||
|
@ -32,7 +41,7 @@
|
|||
|
||||
<script setup>
|
||||
import { ref, getCurrentInstance } from 'vue'
|
||||
import { updateUserProfile } from '@/api/system/user'
|
||||
import {updateUserInfo } from '@/api/system/user'
|
||||
import { listEvaluation } from '@/api/subject/index'
|
||||
import useUserStore from '@/store/modules/user'
|
||||
import {ElMessage} from 'element-plus'
|
||||
|
@ -46,6 +55,26 @@ const props = defineProps({
|
|||
const { proxy } = getCurrentInstance()
|
||||
const userStore = useUserStore()
|
||||
|
||||
//选择学段
|
||||
const semesterList = ref([
|
||||
{
|
||||
id:1,
|
||||
title:'幼儿园'
|
||||
},
|
||||
{
|
||||
id:2,
|
||||
title:'小学'
|
||||
},
|
||||
{
|
||||
id:3,
|
||||
title:'初中'
|
||||
},
|
||||
{
|
||||
id:4,
|
||||
title:'高中'
|
||||
},
|
||||
])
|
||||
|
||||
const rules = ref({
|
||||
nickName: [{ required: true, message: '用户昵称不能为空', trigger: 'blur' }],
|
||||
email: [
|
||||
|
@ -97,15 +126,17 @@ setTimeout(() => {
|
|||
function submit() {
|
||||
proxy.$refs.userRef.validate((valid) => {
|
||||
if (valid) {
|
||||
console.log(props.user)
|
||||
updateUserProfile(props.user).then((response) => {
|
||||
props.user.avatar = userStore.user.avatar
|
||||
updateUserInfo(props.user).then((response) => {
|
||||
if(response.code == 200){
|
||||
userStore.getInfo().then(res => {
|
||||
if(res.code === 200){
|
||||
ElMessage.success('修改成功')
|
||||
}else{
|
||||
ElMessage.error(response.msg)
|
||||
}
|
||||
userStore.login({username:props.user.phonenumber,password:props.user.plainpwd}).then(() => {
|
||||
userStore.getInfo().then(res => {
|
||||
if(res.code === 200){
|
||||
ElMessage.success('修改成功')
|
||||
}else{
|
||||
ElMessage.error(response.msg)
|
||||
}
|
||||
})
|
||||
})
|
||||
}else{
|
||||
ElMessage.error(response.msg)
|
||||
|
@ -114,4 +145,9 @@ function submit() {
|
|||
}
|
||||
})
|
||||
}
|
||||
const semeterChange = (item) => {
|
||||
if(item === '幼儿园'){
|
||||
props.user.edusubject = ''
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<el-button color="#349d44" @click="openFileLink(item)">推送</el-button>
|
||||
</li>
|
||||
<!--作业-->
|
||||
<li class="item flex" v-for="item in dataList" :key="item.id">
|
||||
|
@ -82,8 +83,9 @@ import { useToolState } from '@/store/modules/tool'
|
|||
import { asyncLocalFile } from '@/utils/talkFile'
|
||||
import Lesson from './lesson.vue';
|
||||
import { parseCataByNode } from '@/utils/talkFile'
|
||||
import outLink from '@/utils/linkConfig'
|
||||
|
||||
const { ipcRenderer } = window.electron || {}
|
||||
import { ipcMsgSend2 } from '@/utils/tool'
|
||||
const route = useRoute();
|
||||
const usertore = useUserStore().user
|
||||
const toolStore = useToolState()
|
||||
|
@ -127,6 +129,19 @@ const changeChapter = async (data)=>{
|
|||
getResource()
|
||||
}
|
||||
|
||||
// 文件资源打开web AIX 布置作业
|
||||
const openFileLink = (item) =>{
|
||||
// key 对应的 linkConfig.js 外部链接配置
|
||||
let key = 'filehomework'
|
||||
let configObj = outLink()[key]
|
||||
ipcMsgSend2('openWindow', {
|
||||
key,
|
||||
fullPath: configObj.fullPath + `&fileShowName=${item.fileShowName}&fileFullPath=${item.fileFullPath}`,
|
||||
cookieData: { ...configObj.data }
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
// 获取资源数据
|
||||
const getResource = () => {
|
||||
let querySearch = toRaw(toolStore.curSubjectNode).querySearch
|
||||
|
@ -233,7 +248,7 @@ onMounted(() => {
|
|||
getHomework()
|
||||
setTimeout(()=>{
|
||||
getResource()
|
||||
},5000)
|
||||
},1000)
|
||||
})
|
||||
</script>
|
||||
|
||||
|
|
|
@ -43,12 +43,7 @@ const initImChat = async () => {
|
|||
// 创建群组
|
||||
const createGroup = async (groupName) => {
|
||||
if (!imChat) return
|
||||
const res = await imChat.createGroup(groupName)
|
||||
console.log('createGroup: ', res)
|
||||
console.log('createGroup2: ', imChat)
|
||||
// if (res && res.code == 0) {
|
||||
// const timGroupId = res?.json_param?.create_group_result_groupid
|
||||
// }
|
||||
await imChat.createGroup(groupName)
|
||||
const params = {type:'createGroup', data: imChat.timGroupId}
|
||||
emits('change', params)
|
||||
}
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
<upvote-vue></upvote-vue>
|
||||
|
||||
<!-- im-chat 聊天组件 -->
|
||||
<im-chat ref="imChatRef" @change="chatChange" />
|
||||
<!-- <im-chat ref="imChatRef" @change="chatChange" /> -->
|
||||
|
||||
<!-- 底部工具栏 -->
|
||||
<div class="tool-bottom-all" @mouseenter="mouseChange(0)" @mouseleave="mouseChange(1)">
|
||||
|
@ -39,7 +39,8 @@
|
|||
// 功能说明:electron 悬浮球
|
||||
import { onMounted, ref, reactive, watchEffect } from 'vue'
|
||||
import { useRoute } from 'vue-router';
|
||||
import { endClass } from '@/api/classManage'
|
||||
// import { startClass, endClass } from '@/api/classManage'
|
||||
import * as classManageApi from '@/api/classManage'
|
||||
import logo from '@root/resources/icon.png' // logo
|
||||
import boardVue from './components/board.vue' // 画板-子组件
|
||||
import sideVue from './components/side.vue' // 画板-子组件
|
||||
|
@ -74,6 +75,7 @@ const btnList = [ // 工具栏按钮列表
|
|||
// === 页面加载完毕 ===
|
||||
onMounted(async() => {
|
||||
setTimeout(() => {
|
||||
console.log(classObj)
|
||||
resetStatus() // 开启重置状态-监听
|
||||
}, 200);
|
||||
})
|
||||
|
@ -104,7 +106,7 @@ const mouseChange = (bool) => {
|
|||
// im-chat: 聊天事件
|
||||
const chatChange = ({type, data}) => {
|
||||
if (type == 'createGroup') { // 创建群
|
||||
|
||||
// classManageApi.startClass()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -139,7 +141,7 @@ const sideChange = async o => {
|
|||
break
|
||||
case 'over': // 下课
|
||||
toolStore.isToolWin = false
|
||||
endClass(route.query.reservId)
|
||||
await classManageApi.endClass(route.query.reservId)
|
||||
await imChatRef.value?.deleteGroup() // 解散群
|
||||
await imChatRef.value?.logout() // 退出im
|
||||
ipcMsgSend('tool-sphere:close') // 关闭窗口
|
||||
|
|
Loading…
Reference in New Issue