diff --git a/electron-builder-prod.yml b/electron-builder-prod.yml
index 4eea1f2..022b89a 100644
--- a/electron-builder-prod.yml
+++ b/electron-builder-prod.yml
@@ -6,11 +6,11 @@ directories:
win:
executableName: 文枢课堂
icon: resources/logo2.ico
- target:
- - target: nsis
- arch:
- - x64
- - ia32
+# target:
+# - target: nsis
+# arch:
+# - x64
+# - ia32
files:
- '!**/.vscode/*'
- '!src/*'
diff --git a/electron-builder-yc.yml b/electron-builder-yc.yml
index 6ed8ad7..fca9e1c 100644
--- a/electron-builder-yc.yml
+++ b/electron-builder-yc.yml
@@ -6,11 +6,11 @@ directories:
win:
executableName: 永川中小学AI教学系统
icon: resources/yc-logo.png
- target:
- - target: nsis
- arch:
- - x64
- - ia32
+# target:
+# - target: nsis
+# arch:
+# - x64
+# - ia32
files:
- '!**/.vscode/*'
- '!src/*'
diff --git a/electron-builder-yc2.yml b/electron-builder-yc2.yml
index ce77b6d..11a9d00 100644
--- a/electron-builder-yc2.yml
+++ b/electron-builder-yc2.yml
@@ -6,11 +6,11 @@ directories:
win:
executableName: 实训教学
icon: resources/yc-logo.png
- target:
- - target: nsis
- arch:
- - x64
- - ia32
+# target:
+# - target: nsis
+# arch:
+# - x64
+# - ia32
files:
- '!**/.vscode/*'
- '!src/*'
diff --git a/electron-builder-yy.yml b/electron-builder-yy.yml
index 46a0498..46c02de 100644
--- a/electron-builder-yy.yml
+++ b/electron-builder-yy.yml
@@ -6,11 +6,11 @@ directories:
win:
executableName: 育人酉数平台
icon: resources/yy-logo.png
- target:
- - target: nsis
- arch:
- - x64
- - ia32
+# target:
+# - target: nsis
+# arch:
+# - x64
+# - ia32
files:
- '!**/.vscode/*'
- '!src/*'
diff --git a/electron-builder.yml b/electron-builder.yml
index a974581..9d7caf6 100644
--- a/electron-builder.yml
+++ b/electron-builder.yml
@@ -13,11 +13,11 @@ asarUnpack:
win:
executableName: AIx
icon: resources/logo2.ico
- target:
- - target: nsis
- arch:
- - x64
- - ia32
+# target:
+# - target: nsis
+# arch:
+# - x64
+# - ia32
nsis:
oneClick: false
allowToChangeInstallationDirectory: true
diff --git a/package.json b/package.json
index 0815835..7d5b681 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "aix-win-ws",
- "version": "2.5.16",
+ "version": "2.5.17",
"description": "",
"main": "./out/main/index.js",
"author": "上海交大重庆人工智能研究院",
@@ -44,7 +44,7 @@
"@vue-office/excel": "^1.7.11",
"@vue-office/pdf": "^2.0.2",
"@vueuse/core": "^10.11.0",
- "aix-plugins-aitools": "^1.1.5",
+ "aix-plugins-aitools": "^1.1.10",
"animate.css": "^4.1.1",
"circular-json": "^0.5.9",
"clipboard": "^2.0.11",
diff --git a/resources/yy-logo.png b/resources/yy-logo.png
index d64abf0..9ac092f 100644
Binary files a/resources/yy-logo.png and b/resources/yy-logo.png differ
diff --git a/src/renderer/src/AixPPTist/src/views/Screen/ScreenSlideList.vue b/src/renderer/src/AixPPTist/src/views/Screen/ScreenSlideList.vue
index 1b0b4c7..4b69c8a 100644
--- a/src/renderer/src/AixPPTist/src/views/Screen/ScreenSlideList.vue
+++ b/src/renderer/src/AixPPTist/src/views/Screen/ScreenSlideList.vue
@@ -80,6 +80,7 @@ provide(injectKeySlideScale, scale)
position: relative;
width: 100%;
height: 100%;
+ overflow: hidden;
}
.slide-item {
position: absolute;
diff --git a/src/renderer/src/AixPPTist/src/views/Screen/hooks/useExecPlay.ts b/src/renderer/src/AixPPTist/src/views/Screen/hooks/useExecPlay.ts
index abccbfd..49c6ba7 100644
--- a/src/renderer/src/AixPPTist/src/views/Screen/hooks/useExecPlay.ts
+++ b/src/renderer/src/AixPPTist/src/views/Screen/hooks/useExecPlay.ts
@@ -198,7 +198,7 @@ export default (isLoader?: boolean = true) => {
const touchInfo = ref<{ x: number; y: number; } | null>(null)
const touchStartListener = (e: TouchEvent) => {
- e.preventDefault() // 阻止默认事件
+ // e.preventDefault() // 阻止默认事件
touchInfo.value = {
// x: e.changedTouches[0].pageX,
// y: e.changedTouches[0].pageY,
@@ -208,6 +208,7 @@ export default (isLoader?: boolean = true) => {
}
const touchEndListener = (e: TouchEvent) => {
if (!touchInfo.value) return
+ // window.scrollTo(0, 0) // 滚动到顶部
const offsetX = Math.abs(touchInfo.value.x - e.changedTouches[0].clientX)
const offsetY = e.changedTouches[0].clientY - touchInfo.value.y
if ( Math.abs(offsetY) > offsetX && Math.abs(offsetY) > 50 ) {
diff --git a/src/renderer/src/assets/images/login/yy-logo.png b/src/renderer/src/assets/images/login/yy-logo.png
index d64abf0..0686bea 100644
Binary files a/src/renderer/src/assets/images/login/yy-logo.png and b/src/renderer/src/assets/images/login/yy-logo.png differ
diff --git a/src/renderer/src/layout/components/Aside.vue b/src/renderer/src/layout/components/Aside.vue
index ecc7566..8aa998e 100644
--- a/src/renderer/src/layout/components/Aside.vue
+++ b/src/renderer/src/layout/components/Aside.vue
@@ -23,7 +23,7 @@
加入学校
个人中心
- 学校管理
+ 学校管理
班级中心
退出登录
@@ -65,7 +65,7 @@ import pkc from "../../../../../package.json"
import defaultUserImg from '@/assets/images/img-avatar.png'
import { sessionStore } from '@/utils/store'
import {toLinkLeftWeb} from "@/utils/tool"
-
+import { checkRole } from '@/utils/permission'
const { ipcRenderer } = window.electron || {}
const dev_api = ref(import.meta.env.VITE_APP_BASE_API)
@@ -86,6 +86,7 @@ const defaultImg = ['/img/avatar-default.jpg','/images/img-avatar.png','/src/ass
//是否是基地人员
const isStadium = () => {
+ console.log('isStadium',userStore.roles )
let user = userStore.user
let roles = user.roles
return roles.some(item => item.roleKey === 'stadium')
diff --git a/src/renderer/src/main.js b/src/renderer/src/main.js
index b4e79b2..7d7c36d 100644
--- a/src/renderer/src/main.js
+++ b/src/renderer/src/main.js
@@ -25,7 +25,7 @@ import log from 'electron-log/renderer' // 渲染进程日志-文件记录
import customComponent from '@/components/common' // 自定义组件
import plugins from './plugins' // plugins插件
import useUserStore from '@/store/modules/user'
-import aiAudio from 'aix-plugins-aitools' // 文字转语音插件
+import aiTools from 'aix-plugins-aitools' // 文字转语音插件
import '../../../node_modules/aix-plugins-aitools/aitools.css'
@@ -91,7 +91,7 @@ app.use(router)
.use(plugins)
.use(Icon)
.use(Directive)
- .use(aiAudio)
+ .use(aiTools)
.use(VMdEditor)
.mount('#app')
diff --git a/src/renderer/src/utils/permission.js b/src/renderer/src/utils/permission.js
new file mode 100644
index 0000000..93fee87
--- /dev/null
+++ b/src/renderer/src/utils/permission.js
@@ -0,0 +1,51 @@
+import useUserStore from '@/store/modules/user'
+
+/**
+ * 字符权限校验
+ * @param {Array} value 校验值
+ * @returns {Boolean}
+ */
+export function checkPermi(value) {
+ if (value && value instanceof Array && value.length > 0) {
+ const permissions = useUserStore().permissions
+ const permissionDatas = value
+ const all_permission = "*:*:*";
+
+ const hasPermission = permissions.some(permission => {
+ return all_permission === permission || permissionDatas.includes(permission)
+ })
+
+ if (!hasPermission) {
+ return false
+ }
+ return true
+ } else {
+ console.error(`need roles! Like checkPermi="['system:user:add','system:user:edit']"`)
+ return false
+ }
+}
+
+/**
+ * 角色权限校验
+ * @param {Array} value 校验值
+ * @returns {Boolean}
+ */
+export function checkRole(value) {
+ if (value && value instanceof Array && value.length > 0) {
+ const roles = useUserStore().roles
+ const permissionRoles = value
+ const super_admin = "admin";
+
+ const hasRole = roles.some(role => {
+ return super_admin === role || permissionRoles.includes(role)
+ })
+
+ if (!hasRole) {
+ return false
+ }
+ return true
+ } else {
+ console.error(`need roles! Like checkRole="['admin','editor']"`)
+ return false
+ }
+}
\ No newline at end of file
diff --git a/src/renderer/src/utils/tool.js b/src/renderer/src/utils/tool.js
index a83cbd1..9ba4abc 100644
--- a/src/renderer/src/utils/tool.js
+++ b/src/renderer/src/utils/tool.js
@@ -222,9 +222,11 @@ export const createWindow = async (type, data) => {
if (import.meta.env.VITE_SHOW_DEV_TOOLS === 'true') win.webContents.openDevTools() // 打开调试工具
let events = {} // 事件处理函数对象
Object.keys(data)
- .filter(k => typeof data[k] === 'function')
+ .filter(k => typeof data[k] === 'function' && k!=='success')
.forEach(k => events[k] = data[k])
eventHandles(type, win, events) // 事件监听处理
+ // 创建成功后触发回调
+ data.success && data.success(win)
return win
}
default:
@@ -306,9 +308,9 @@ const eventHandles = (type, win, events) => {
// 监听主窗口-关闭事件
mainWin.once('close', () => {winPdf=null;win.destroy();})
win.on('closed', () => {
- if(!!onClosed) onClosed() // 自定义关闭事件
- if(!!closed) closed() // 自定义关闭事件
- if(!!close) close() // 自定义关闭事件
+ if(!!onClosed) onClosed(win) // 自定义关闭事件
+ if(!!closed) closed(win) // 自定义关闭事件
+ if(!!close) close(win) // 自定义关闭事件
win = null
wins_tool = null
winChild=null
diff --git a/src/renderer/src/views/classTask/newClassTaskAssign/experimentQuestion/components/experimentList.vue b/src/renderer/src/views/classTask/newClassTaskAssign/experimentQuestion/components/experimentList.vue
index a7ff24a..0a6fbe6 100644
--- a/src/renderer/src/views/classTask/newClassTaskAssign/experimentQuestion/components/experimentList.vue
+++ b/src/renderer/src/views/classTask/newClassTaskAssign/experimentQuestion/components/experimentList.vue
@@ -51,7 +51,8 @@ onMounted(() => {
})
defineExpose({
- updateLabel
+ updateLabel,
+ onSelectOption
})
diff --git a/src/renderer/src/views/classTask/newClassTaskAssign/experimentQuestion/components/selectClass.vue b/src/renderer/src/views/classTask/newClassTaskAssign/experimentQuestion/components/selectClass.vue
index a504518..103ca5a 100644
--- a/src/renderer/src/views/classTask/newClassTaskAssign/experimentQuestion/components/selectClass.vue
+++ b/src/renderer/src/views/classTask/newClassTaskAssign/experimentQuestion/components/selectClass.vue
@@ -1,6 +1,9 @@
+
+
+
小学
初中
高中
@@ -33,7 +35,7 @@
-
+ -->
@@ -47,17 +49,119 @@ import useClassTaskStore from '@/store/modules/classTask'
const userStore = useUserStore().user
// 定义要发送的emit事件
-// let emit = defineEmits(['experlist'])
+let emit = defineEmits(['experlist'])
// const expObj = ref({
// edustage: useClassTaskStore().experimentObj.edustage,
// edusubject: useClassTaskStore().experimentObj.edusubject,
// })
-const subjectList = ref([])
+
+//const subjectList = ref([])
const chooseGrade= ref({})
const expList = ref([]) // 当前年级的所有课程
const checkList = ref([])// 当前年级对应学科的课程,
const isLoaded = ref(false);
+
+const bindSubject = ref([useClassTaskStore().experimentObj.edustage, useClassTaskStore().experimentObj.edusubject]); // 默认为小学数学
+const subjectList = [
+ {
+ value: '小学',
+ label: '小学',
+ children: [
+ {
+ value: '数学',
+ label: '数学',
+
+ },
+ {
+ value: '物理',
+ label: '物理',
+
+ },
+ {
+ value: '化学',
+ label: '化学',
+
+ },
+ {
+ value: '生物',
+ label: '生物',
+
+ },
+ {
+ value: '科学',
+ label: '科学',
+
+ }]
+ },
+ {
+ value: '初中',
+ label: '初中',
+ children: [
+ {
+ value: '数学',
+ label: '数学',
+
+ },
+ {
+ value: '物理',
+ label: '物理',
+
+ },
+ {
+ value: '化学',
+ label: '化学',
+
+ },
+ {
+ value: '生物',
+ label: '生物',
+
+ },
+ {
+ value: '科学',
+ label: '科学',
+
+ }]
+ },
+ {
+ value: '高中',
+ label: '高中',
+ children: [
+ {
+ value: '数学',
+ label: '数学',
+
+ },
+ {
+ value: '物理',
+ label: '物理',
+
+ },
+ {
+ value: '化学',
+ label: '化学',
+
+ },
+ {
+ value: '生物',
+ label: '生物',
+
+ },
+ {
+ value: '科学',
+ label: '科学',
+
+ }]
+ }
+]
+const handleChange = (val) => {
+ useClassTaskStore().experimentObj.edustage = val[0];
+ useClassTaskStore().experimentObj.edusubject = val[1];
+ handleUserEduStage(useClassTaskStore().experimentObj.edustage);
+}
+
+
// 获取基础的学科
const getSubject = () => {
//没有学科则不进行下面的步骤
@@ -67,19 +171,20 @@ const getSubject = () => {
// subjectList.value = res.rows.filter(item => arr.includes(String(item.id))).map(items => items)
// console.log(subjectList,'subjectList');
// })
+
//这里获取死数据 学科list
- const edustageList = ['小学','初中','高中'];
- const subList = ['数学','物理','化学','生物','科学'];
- edustageList.forEach((item) => {
- subList.forEach((subItems) => {
- subjectList.value.push({
- edustage: item,
- edusubject: subItems,
- itemtitle: subItems
- })
- })
- })
- console.log(subjectList,'subjectList');
+ // const edustageList = ['小学','初中','高中'];
+ // const subList = ['数学','物理','化学','生物','科学'];
+ // edustageList.forEach((item) => {
+ // subList.forEach((subItems) => {
+ // subjectList.value.push({
+ // edustage: item,
+ // edusubject: subItems,
+ // itemtitle: subItems
+ // })
+ // })
+ // })
+ // console.log(subjectList,'subjectList');
// 默认读取一个学科
const edusubject = useClassTaskStore().experimentObj.edusubject;
@@ -90,6 +195,8 @@ const getSubject = () => {
isLoaded.value = true;
//console.log('初始化执行完毕----');
}
+
+
// 展示有 实验科目的学科
const isExpList = (edusubject) => {
let list = [];
@@ -101,7 +208,7 @@ const isExpList = (edusubject) => {
list = expList.value.filter(item => item.subject === 'physics')
break;
case '化学':
- checkList.value = expList.value.filter(item => item.subject === 'chemistry')
+ list = expList.value.filter(item => item.subject === 'chemistry')
break;
case '生物':
list = expList.value.filter(item => item.subject === 'biology')
@@ -112,19 +219,19 @@ const isExpList = (edusubject) => {
}
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
+ const newSubjectList = subjectList.filter(item => item.value === '小学');
+ for(let i of newSubjectList[0].children){
+ const name = i.value
if(isExpList(name) && useClassTaskStore().experimentObj.edusubject===name){
//useClassTaskStore().experimentObj.edusubject = name;
// 更改学科默认与学科下的实验科目
@@ -135,9 +242,9 @@ const handleUserEduStage = (item) => {
}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
+ const newSubjectList = subjectList.filter(item => item.value === '初中');
+ for(let i of newSubjectList[0].children){
+ const name = i.value
if(isExpList(name) && useClassTaskStore().experimentObj.edusubject===name){
//useClassTaskStore().experimentObj.edusubject = name;
// 更改学科默认与学科下的实验科目
@@ -148,9 +255,9 @@ const handleUserEduStage = (item) => {
}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
+ const newSubjectList = subjectList.filter(item => item.value === '高中');
+ for(let i of newSubjectList[0].children){
+ const name = i.value
if(isExpList(name) && useClassTaskStore().experimentObj.edusubject===name){
//useClassTaskStore().experimentObj.edusubject = name;
// 更改学科默认与学科下的实验科目
@@ -161,7 +268,7 @@ const handleUserEduStage = (item) => {
}
}
// 选择学科
-const handleUserEduSubject = (item) => {
+const handleUserEduSubject = (item, isEmit=true) => {
// userStore.edusubject = item;
useClassTaskStore().experimentObj.edusubject = item;
console.log(item,'选择的学科-------')
@@ -185,7 +292,9 @@ const handleUserEduSubject = (item) => {
}
console.log(checkList.value,'checkList')
useClassTaskStore().experimentObj.experimentList = checkList.value;
- // emit('experlist',checkList.value)
+ if (isEmit) {
+ emit('experlist',checkList.value)
+ }
}
const updateCheckList = async () => {
@@ -205,7 +314,8 @@ const updateCheckList = async () => {
}
expList.value = chooseGrade.value
const edusubject = useClassTaskStore().experimentObj.edusubject;
- handleUserEduSubject(edusubject);
+ bindSubject.value = [edustage, edusubject];
+ handleUserEduSubject(edusubject, false);
} catch (error) {
console.error(error);
}
diff --git a/src/renderer/src/views/classTask/newClassTaskAssign/experimentQuestion/index.vue b/src/renderer/src/views/classTask/newClassTaskAssign/experimentQuestion/index.vue
index 711f49e..aca3dc4 100644
--- a/src/renderer/src/views/classTask/newClassTaskAssign/experimentQuestion/index.vue
+++ b/src/renderer/src/views/classTask/newClassTaskAssign/experimentQuestion/index.vue
@@ -3,7 +3,7 @@