From 0086ce423603a9b95cb313efb17de778cb72a1f1 Mon Sep 17 00:00:00 2001 From: lyc Date: Tue, 23 Jul 2024 14:33:07 +0800 Subject: [PATCH 1/3] open win cookie --- src/main/index.js | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/main/index.js b/src/main/index.js index 56a0833..2fce314 100644 --- a/src/main/index.js +++ b/src/main/index.js @@ -41,7 +41,7 @@ function createMainWindow() { width: 1200, height: 700, show: false, - frame: false,// 无边框 + frame: false, // 无边框 autoHideMenuBar: true, ...(process.platform === 'linux' ? { icon } : {}), webPreferences: { @@ -84,13 +84,16 @@ function createOpenWin(data) { nodeIntegration: true } }) - let cookieDetails = {...data.cookieData} - openWindow.webContents.session.cookies.set(cookieDetails).then(()=>{ - console.log('Cookie set successfully.') - }).catch(err =>{ - console.error('Set cookie failed:', error) + let cookieDetails = { ...data.cookieData } + console.log(cookieDetails) + openWindow.webContents.session.cookies.set(cookieDetails, (error) => { + if (error) { + console.error('设置cookie出错:', error) + } else { + console.log('设置cookie成功') + } }) - + openWindow.loadURL(data.fullPath) openWindow.once('ready-to-show', () => { @@ -149,6 +152,7 @@ app.on('ready', () => { createLoginWindow() } mainWindow.destroy() + mainWindow = null loginWindow.show() loginWindow.focus() }) From e6da6ef65f86c09a1d310da32caecd7924a2081e Mon Sep 17 00:00:00 2001 From: lyc Date: Wed, 24 Jul 2024 14:03:59 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=89=93=E5=BC=80=E5=A4=96=E9=83=A8?= =?UTF-8?q?=E9=93=BE=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/index.js | 51 +++++++++++-------- .../src/components/select-subject/index.vue | 12 +++-- src/renderer/src/utils/config.js | 9 ---- src/renderer/src/utils/linkConfig.js | 40 +++++++++++++++ src/renderer/src/views/login/index.vue | 6 +-- src/renderer/src/views/prepare/index.vue | 32 ++++++------ 6 files changed, 93 insertions(+), 57 deletions(-) delete mode 100644 src/renderer/src/utils/config.js create mode 100644 src/renderer/src/utils/linkConfig.js diff --git a/src/main/index.js b/src/main/index.js index 2fce314..92cbb87 100644 --- a/src/main/index.js +++ b/src/main/index.js @@ -4,8 +4,10 @@ import { electronApp, optimizer, is } from '@electron-toolkit/utils' import icon from '../../resources/icon.png?asset' import File from './file' -File({ app, shell, BrowserWindow, ipcMain }) +// const handleUpdate = require("./handleUpdate"); +File({ app, shell, BrowserWindow, ipcMain }) +process.env['ELECTRON_DISABLE_SECURITY_WARNINGS'] = 'true' let mainWindow, loginWindow //登录窗口 @@ -24,9 +26,13 @@ function createLoginWindow() { nodeIntegration: true } }) - const loginURL = is.dev ? `http://localhost:5173/#/login` : `file://${__dirname}/index.html/login` + // handleUpdate(loginWindow,ipcMain) + const loginURL = is.dev ? `http://localhost:5173/#/login` : join(__dirname, '../renderer/index.html') loginWindow.loadURL(loginURL) + + + loginWindow.webContents.openDevTools() loginWindow.once('ready-to-show', () => { loginWindow.show() }) @@ -61,17 +67,18 @@ function createMainWindow() { mainWindow.webContents.openDevTools() if (is.dev && process.env['ELECTRON_RENDERER_URL']) { - mainWindow.loadURL(process.env['ELECTRON_RENDERER_URL']) + mainWindow.loadURL(process.env['ELECTRON_RENDERER_URL'] ) } else { mainWindow.loadFile(join(__dirname, '../renderer/index.html')) } } + // 作业窗口相关-开发中 -let openWindow -function createOpenWin(data) { - if (openWindow) return - openWindow = new BrowserWindow({ +let linkWindow +async function createLinkWin(data) { + if (linkWindow) return + linkWindow = new BrowserWindow({ width: 650, height: 500, show: false, @@ -81,26 +88,26 @@ function createOpenWin(data) { ...(process.platform === 'linux' ? { icon } : {}), webPreferences: { sandbox: false, - nodeIntegration: true + nodeIntegration: true, + worldSafeExecuteJavaScript: true, + contextIsolation: true } }) let cookieDetails = { ...data.cookieData } - console.log(cookieDetails) - openWindow.webContents.session.cookies.set(cookieDetails, (error) => { - if (error) { - console.error('设置cookie出错:', error) - } else { - console.log('设置cookie成功') - } + await linkWindow.webContents.session.cookies.set(cookieDetails).then(()=>{ + console.log('Cookie is successful'); + }).catch( error =>{ + console.error('Cookie is error', error); }) - openWindow.loadURL(data.fullPath) + linkWindow.loadURL(data.fullPath) - openWindow.once('ready-to-show', () => { - openWindow.show() + linkWindow.once('ready-to-show', () => { + linkWindow.show() + linkWindow.maximize() }) - openWindow.on('closed', () => { - openWindow = null + linkWindow.on('closed', () => { + linkWindow = null }) } @@ -158,8 +165,8 @@ app.on('ready', () => { }) //打开作业窗口 - ipcMain.on('openWork', (e, data) => { - createOpenWin(data) + ipcMain.on('openWindow', (e, data) => { + createLinkWin(data) }) createLoginWindow() diff --git a/src/renderer/src/components/select-subject/index.vue b/src/renderer/src/components/select-subject/index.vue index d70c423..649337a 100644 --- a/src/renderer/src/components/select-subject/index.vue +++ b/src/renderer/src/components/select-subject/index.vue @@ -79,10 +79,6 @@ const subjectList = ref([]) const allSubject = ref([]) const dialogVisible = ref(false) -watch(() => props.modelValue, (newVal) => { - dialogVisible.value = newVal -}) - //切换年级 const changeGrade = ()=>{ // 切换年级 过滤出对应学科数据 @@ -120,8 +116,13 @@ const editUserInfo = async () =>{ emit('onSuccess') } +watch(() => props.modelValue, (newVal) => { + dialogVisible.value = newVal + if(newVal){ + getSubject() + } +}) -onMounted(getSubject) diff --git a/src/renderer/src/views/prepare/index.vue b/src/renderer/src/views/prepare/index.vue index 9a04fdc..7d1954f 100644 --- a/src/renderer/src/views/prepare/index.vue +++ b/src/renderer/src/views/prepare/index.vue @@ -7,9 +7,9 @@
- 教材研读 - 电子课本 - 高考研读 + 课标研读 + 电子课本 + 高考研读 教学大模型
@@ -37,7 +37,7 @@
- 布置作业 + 布置作业 上传资料 新建课件
@@ -73,8 +73,8 @@ import { toTimeText } from '@/utils/date' import { ElMessage } from 'element-plus' import { parseCataByNode, creatPPT, asyncLocalFile } from '@/utils/talkFile' import FileOperBatch from '@/views/prepare/container/file-oper-batch.vue' -import useUserStore from '@/store/modules/user' -import { homeWorkConfig } from '@/utils/config' + +import outLink from '@/utils/linkConfig' const { ipcRenderer } = window.electron || {} export default { @@ -102,7 +102,6 @@ export default { }, // 当前教材封面图 curBookImg: '', - userStore: '' } }, computed: { @@ -118,7 +117,7 @@ export default { this.callback(param) }) this.lastAsyncAllTime = localStorage.getItem('lastAsyncAllTime') - this.userStore = useUserStore() + }, mounted() { }, @@ -251,15 +250,14 @@ export default { this.uploadData.textbookId = data.textBook.curBookId this.asyncAllFile() }, - // 布置组后也 - handleHomeWork(){ - ipcRenderer.send('openWork',{ - fullPath: homeWorkConfig.fullPath, - cookieData: { - url: homeWorkConfig.host, - name: homeWorkConfig.name, - value: this.userStore.token - } + // 打开外部链接 + handleOutLink(key){ + // key 对应的 linkConfig.js 外部链接配置 + let configObj = outLink[key] + // 通知主进程 + ipcRenderer.send('openWindow', { + fullPath: configObj.fullPath, + cookieData: {...(configObj.data)} }) }, } From bf9e7c96ffb3b31931a6e467f25eeda68b71ad1a Mon Sep 17 00:00:00 2001 From: lyc Date: Wed, 24 Jul 2024 15:23:26 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E5=B9=B3=E5=8F=B0=E8=B5=84=E6=BA=90?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=91=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 1 + src/renderer/src/utils/hasPermission.js | 18 +++++++++++ .../resource/container/resoure-search.vue | 15 +++++---- src/renderer/src/views/resource/index.vue | 4 +-- src/renderer/src/views/resource/store.js | 32 +++++++++++-------- 5 files changed, 49 insertions(+), 21 deletions(-) create mode 100644 src/renderer/src/utils/hasPermission.js diff --git a/package.json b/package.json index 99c4ada..c92e305 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "element-plus": "^2.7.6", "js-cookie": "^3.0.5", "jsencrypt": "^3.3.2", + "lodash": "^4.17.21", "pinia": "^2.1.7", "pinia-plugin-persistedstate": "^3.2.1", "spark-md5": "^3.0.2", diff --git a/src/renderer/src/utils/hasPermission.js b/src/renderer/src/utils/hasPermission.js new file mode 100644 index 0000000..2242209 --- /dev/null +++ b/src/renderer/src/utils/hasPermission.js @@ -0,0 +1,18 @@ + +import useUserStore from '@/store/modules/user' + +import array from 'lodash/array' +export const hasPermission = (value, def = true) => { + // 不传值,默认视为有权限,不做鉴权 + if (!value) { + return def + } + + const allCodeList = useUserStore().roles + // 如果不是数组,直接判断pinia里的权限数组有没有相同的元素即可 + if (!Array.isArray(value)) { + return allCodeList.includes(value) + } + // intersection是lodash提供的一个方法,用于返回一个所有给定数组都存在的元素组成的数组 + return array.intersection(value, allCodeList).length > 0 +} \ No newline at end of file diff --git a/src/renderer/src/views/resource/container/resoure-search.vue b/src/renderer/src/views/resource/container/resoure-search.vue index 11cd9ba..7272c0f 100644 --- a/src/renderer/src/views/resource/container/resoure-search.vue +++ b/src/renderer/src/views/resource/container/resoure-search.vue @@ -8,12 +8,13 @@ }}
- + -
@@ -22,7 +23,7 @@ {{ - item.label }} + item.label }}
@@ -58,7 +59,8 @@ const sourceStore = useResoureStore() .query-row { justify-content: space-between; - .row-left{ + + .row-left { align-items: center; } } @@ -70,11 +72,12 @@ const sourceStore = useResoureStore() margin: 0 10px; } - + } } -.el-button.is-round{ + +.el-button.is-round { padding: 3px 15px; font-size: 13px; } diff --git a/src/renderer/src/views/resource/index.vue b/src/renderer/src/views/resource/index.vue index df5d5bf..fad1f68 100644 --- a/src/renderer/src/views/resource/index.vue +++ b/src/renderer/src/views/resource/index.vue @@ -6,7 +6,7 @@
- + 新建资源 @@ -26,6 +26,7 @@ import ResoureSearch from './container/resoure-search.vue' import ResoureList from './container/resoure-list.vue' import uploadDialog from '@/components/upload-dialog/index.vue' import uploaderState from '@/store/modules/uploader' +import { hasPermission } from '@/utils/hasPermission' const sourceStore = useResoureStore() const isDialogOpen = ref(false) @@ -76,7 +77,6 @@ const submitFile = (data) => { const fileCallBack = (res) => { - console.log(res) if (res.code == 200) { sourceStore.handleQuery() } diff --git a/src/renderer/src/views/resource/store.js b/src/renderer/src/views/resource/store.js index fdf918a..3f2342e 100644 --- a/src/renderer/src/views/resource/store.js +++ b/src/renderer/src/views/resource/store.js @@ -2,6 +2,7 @@ import { defineStore } from 'pinia' import { getSmarttalkPage } from '@/api/file/index' import { tabs, resourceType, resourceFormat } from '@/utils/resourceDict' import useUserStore from '@/store/modules/user' +import { hasPermission } from '@/utils/hasPermission' const userStore = useUserStore() @@ -21,10 +22,15 @@ const resourceFormatList = [ ] // 校本资源为学校ID -tabs.forEach(item =>{ - if( item.label == "校本资源"){ - item.value = userStore.user.deptId - } +tabs.forEach((item) => { + if (item.label == '校本资源') { + item.value = userStore.user.deptId + } +}) +tabs.forEach((item, i) => { + if (item.label == '平台资源' && !hasPermission(['platformmanager'])) { + tabs.splice(i, 1) + } }) const structQuery = { @@ -39,14 +45,14 @@ export default defineStore('resource', { resourceFormatList, searchKey: '', - + //节点数据 - nodeData:{}, + nodeData: {}, loading: false, //查询条件 query: { textbookId: '', - fileSource: '平台', + fileSource: tabs[0].value, //资源格式 mp3 ppt ... fileSuffix: -1, // 资源类型 课件 素材 教案 @@ -66,10 +72,11 @@ export default defineStore('resource', { handleQuery() { try { this.loading = true - let data = {...this.query} - if(data.fileSuffix == -1){ + let data = { ...this.query } + if (data.fileSuffix == -1) { data.fileSuffix = '' } + console.log(data, 200) getSmarttalkPage(data).then((res) => { this.result.total = res.total this.result.list = res.rows @@ -86,14 +93,13 @@ export default defineStore('resource', { this.query.fileFlag = val this.handleQuery() }, - changeSuffix(val){ + changeSuffix(val) { this.query.fileSuffix = val this.handleQuery() }, // 关键词搜索 - changeName(){ - console.log(this.query.fileName) + changeName() { this.handleQuery() - }, + } } })