-
AIX智慧课堂
+
+
+ AIX智慧课堂
+
- -
+
+ {{ menu.name }}
+
+
+
@@ -58,6 +67,8 @@ import useUserStore from '@/store/modules/user'
import routerStore from '@/store/modules/route'
import outLink from '@/utils/linkConfig'
+import logoIco from '@/assets/images/logo.png'
+
const routeHeader = routerStore()
const { ipcRenderer } = window.electron || {}
const userStore = useUserStore()
@@ -76,7 +87,7 @@ const handleOutLink = (path, type, name) => {
fullPath = fullPath.replaceAll('//', '/')
const { levelFirstId, levelSecondId } = JSON.parse(localStorage.getItem('unitId'))
let unitId = levelSecondId ? levelSecondId :levelFirstId
- if(name == '教材分析' || name == '高考研究'){
+ if(name == '教材分析' || name == '考试分析'){
fullPath += `?unitId=${unitId}`
}
// 通知主进程
@@ -87,6 +98,41 @@ const handleOutLink = (path, type, name) => {
})
}
}
+
+const activeId = ref('/home')
+const headerMenus = [
+ {
+ name: '工作台',
+ id: 1,
+ icon: 'icon-gongzuotai',
+ path: '/home'
+ },
+ {
+ name: '研究室',
+ id: 2,
+ icon: 'icon-yanjiushi',
+ disabled: true
+ },
+ {
+ name: '资源库',
+ id: 3,
+ icon: 'icon-saoyisao',
+ path: '/resource'
+ },
+ {
+ name: '朋友圈',
+ id: 4,
+ icon: 'icon-pengyouquan1',
+ disabled: true
+ }
+]
+
+const clickMenu = ({ id, disabled, path }) =>{
+ if(disabled) return
+ activeId.value = id
+ router.push(path)
+}
+
/*const menus = ref([
{
icon: 'icon-zhuye2 icon-homepage',
@@ -114,7 +160,8 @@ const handleOutLink = (path, type, name) => {
watch(
() => router.currentRoute.value,
(newValue) => {
- currentRoute.value = newValue.path
+ currentRoute.value = newValue
+ activeId.value = newValue.path
},
{ immediate: true }
)
@@ -165,8 +212,6 @@ function setLayout() {
diff --git a/src/renderer/src/main.js b/src/renderer/src/main.js
index da34555..b5fb488 100644
--- a/src/renderer/src/main.js
+++ b/src/renderer/src/main.js
@@ -8,6 +8,7 @@ import 'element-plus/dist/index.css'
import './assets/iconfont/iconfont.css'
import './assets/iconfont/iconfont'
import 'virtual:windi.css'
+import request from "@/utils/request";
import { store } from '@/store'
import App from './App.vue'
@@ -20,6 +21,20 @@ if(process.env.NODE_ENV != 'development') { // 非开发环境,将日志打印
const app = createApp(App)
+
+//专为菁优网配置的请求转发
+app.config.globalProperties.$requestGetJYW = (url,config)=>{
+ config.params = config.params?config.params:{}
+ config.params["getjypath"] = url;
+ return request({
+ url: "/jy/proxy",
+ method: config.method||"get",
+ params: config.params
+ })
+}
+
+
+
app.use(router)
.use(store)
.use(ElementPlus, { locale: zhLocale }).mount('#app')
\ No newline at end of file
diff --git a/src/renderer/src/router/index.js b/src/renderer/src/router/index.js
index 14b0cd0..d9522e3 100644
--- a/src/renderer/src/router/index.js
+++ b/src/renderer/src/router/index.js
@@ -13,8 +13,14 @@ export const constantRoutes = [
{
path: '/',
component: Layout,
- redirect: '/homepage',
+ redirect: '/home',
children: [
+ {
+ path: '/home',
+ component: () => import('@/views/desktop/index.vue'),
+ name: 'desktop',
+ meta: {title: '主页'}
+ },
{
path: '/homepage',
component: () => import('@/views/homePage/index.vue'),
@@ -57,6 +63,12 @@ export const constantRoutes = [
name: 'class',
meta: {title: '班级中心'},
},
+ {
+ path: '/examReport',
+ component: () => import('@/views/examReport/index.vue'),
+ name: 'examReport',
+ meta: {title: '考试分析'}
+ },
]
},
...toolRouters
diff --git a/src/renderer/src/store/modules/tool.js b/src/renderer/src/store/modules/tool.js
index fdddb52..cf8ffc3 100644
--- a/src/renderer/src/store/modules/tool.js
+++ b/src/renderer/src/store/modules/tool.js
@@ -2,7 +2,7 @@
* 工具类-窗口-状态管理
*/
import { defineStore } from 'pinia'
-import { sessionStore } from '@/utils/tool'
+import { sessionStore } from '@/utils/store'
// 默认数据
const defData = sessionStore.store || {}
diff --git a/src/renderer/src/utils/examQuestion/jyeoo.js b/src/renderer/src/utils/examQuestion/jyeoo.js
new file mode 100644
index 0000000..8fb0a67
--- /dev/null
+++ b/src/renderer/src/utils/examQuestion/jyeoo.js
@@ -0,0 +1,262 @@
+const JY_TOKEN = 'CA82641DA86072DEFD39E287335E035FDA6AEEC0549B58F54F4408734C8683FFAF0585CFA3B25091E588A03A65C66A80F5FF613F539D600954007A35DFFBFDC3C7BB982771C5E13F0918642CFD7596CE3718F06E5579238D92EC809AC6F4C82A9FE4B0E232A67DD3594D4DAC1C219CCBC4A7A093344446107EB11DC317526D0594249DEBBD82B740C794CF5A7065E1982B7779AF16AD25D7';
+const JY_SUBJECT = [
+ {id: 10, subject: 'math3', name: '小学数学'},
+ {id: 11, subject: 'chinese3', name: '小学语文'},
+ {id: 12, subject: 'english3', name: '小学英语'},
+ {id: 14, subject: 'science3', name: '小学科学'},
+ {id: 15, subject: 'politics3', name: '小学道德与法治'},
+ {id: 20, subject: 'math', name: '初中数学'},
+ {id: 21, subject: 'physics', name: '初中物理'},
+ {id: 22, subject: 'chemistry', name: '初中化学'},
+ {id: 23, subject: 'bio', name: '初中生物'},
+ {id: 24, subject: 'science', name: '初中科学'},
+ {id: 25, subject: 'geography', name: '初中地理'},
+ {id: 26, subject: 'chinese', name: '初中语文'},
+ {id: 27, subject: 'english', name: '初中英语'},
+ {id: 28, subject: 'politics', name: '初中道德与法治'},
+ {id: 29, subject: 'history', name: '初中历史'},
+ {id: 30, subject: 'math2', name: '高中数学'},
+ {id: 31, subject: 'physics2', name: '高中物理'},
+ {id: 32, subject: 'chemistry2', name: '高中化学'},
+ {id: 33, subject: 'bio2', name: '高中生物'},
+ {id: 35, subject: 'geography2', name: '高中地理'},
+ {id: 36, subject: 'chinese2', name: '高中语文'},
+ {id: 37, subject: 'english2', name: '高中英语'},
+ {id: 38, subject: 'politics2', name: '高中政治'},
+ {id: 39, subject: 'history2', name: '高中历史'},
+];
+
+
+export const JYApiListCT = async (_this, name = '高中历史') => {
+ if (name === '初中政治') {
+ name = '初中道德与法治';
+ }
+ const obj = JY_SUBJECT.filter(item => item.name == name);
+ if(obj.length < 1) {
+ return [];
+ }
+ const res = await _this.$requestGetJYW(`/${obj[0].subject}/common`, {
+ headers: {
+ authorization: `Token ${JY_TOKEN}`
+ },
+ params: {
+ tp: 1,
+ },
+ });
+ if (res.code !== 200) {
+ return [];
+ }
+ let arrCT = [{
+ label: "不限",
+ value: 0
+ }]
+ res.data.forEach(item=> {
+ if (item.Value === '选择题') {
+ item.Value = '单选题';
+ }
+ const tmp = {
+ label: item.Value,
+ value: item.Key,
+ }
+ arrCT.push(tmp);
+ })
+ return arrCT;
+}
+
+export const JYApiListOriginYear = () => {
+ const arrYear = [{label: '不限', value: '-1'}];
+ let i = 0;
+ for( ; i < 10; i++) {
+ const year = new Date().getFullYear();
+ const s ={
+ label: `${year - i}`,
+ value: `${year - i}`,
+ }
+ arrYear.push(s);
+ };
+ //arrYear.push({label: '更早', value: '0'})
+ return arrYear;
+}
+
+export const JYApiListSO = async (_this, name = '高中历史') => {
+ if (name === '初中政治') {
+ name = '初中道德与法治';
+ }
+
+ const obj = JY_SUBJECT.filter(item => item.name == name);
+ if(obj.length < 1) {
+ return [];
+ }
+ const res = await _this.$requestGetJYW(`/${obj[0].subject}/common`, {
+ headers: {
+ authorization: `Token ${JY_TOKEN}`
+ },
+ params: {
+ tp: 2,
+ },
+ });
+ if (res.code !== 200) {
+ return [];
+ }
+ const arrSO = [{"Value": "不限", "Key": 0}, ...res.data];
+ return arrSO;
+}
+
+
+
+export const JYApiListPoint = async (_this, name = '高中历史') => {
+ if (name === '初中政治') {
+ name = '初中道德与法治';
+ }
+
+ const obj = JY_SUBJECT.filter(item => item.name == name);
+ if(obj.length < 1) {
+ return [];
+ }
+ const res = await _this.$requestGetJYW(`/${obj[0].subject}/point`, {
+ headers: {
+ authorization: `Token ${JY_TOKEN}`
+ },
+ });
+ if (res.code !== 200) {
+ return [];
+ }
+ return res.data;
+}
+
+
+/**
+ * @desc: 获取菁优网的版本内容
+ * @return: {*}
+ */
+export const JYApiListVersion = async (_this, query, hasPoints=true) => {
+ const listVersion = {
+ status: 0,
+ msg: '',
+ data: [],
+ };
+ if (query.stage === '' || query.subject === '') {
+ listVersion.msg = '未选中学段或学科!';
+ return listVersion;
+ }
+ let name = `${query.stage}${query.subject}`;
+ if (name === '初中政治') {
+ name = '初中道德与法治';
+ }
+ const result = JY_SUBJECT.filter( item => item.name===name);
+ if (result.length === 0) {
+ listVersion.msg = `[${name}]未找到对应菁优网教材版本, 请检查学段或学科是否匹配!`;
+ return listVersion;
+ }
+ const JYBook = await _this.$requestGetJYW(`/${result[0].subject}/book2`, {
+ headers: {
+ // JYToken仅占位, 实际后续已未使用该token
+ authorization: `Token ${JY_TOKEN}`
+ },
+ });
+ if (JYBook.code !== 200) {
+ listVersion.msg = `[${name}]获取菁优网教材版本失败!`;
+ return listVersion;
+ }
+ query.list.forEach(ele => {
+ if (ele.thirdkey == null) {
+ listVersion.msg = `[${name}-${ele.itemtitle}]菁优网教材字段标识未设置!`;
+ return;
+ }
+ let nPos = ele.thirdkey.indexOf('-');
+ if (nPos === -1) {
+ listVersion.msg = `[${name}-${ele.itemtitle}-${ele.thirdkey}]菁优网教材字段标识设置有误!`;
+ return;
+ }
+ let editionName = ele.thirdkey.substring(0, nPos);
+ let typeName = ele.thirdkey.substring(nPos+1);
+ const resVersion = JYBook.data.filter( item => {
+ // 高中以typeName为标识, 而小学/初中以Name为标识
+ const JYTypeName = query.stage=='高中' ? item.TypeName : item.Name;
+ if (item.EditionName.trim() === editionName.trim() && JYTypeName.trim() === typeName.trim()) {
+ return true;
+ }
+ })
+
+ if (resVersion.length === 0) {
+ listVersion.msg = `[${name}-${ele.thirdkey}]菁优网教材字段标识查询不存在!`;
+ return;
+ }
+ if (resVersion[0].Children.length === 0) {
+ listVersion.msg = `[${name}]菁优网教材字段标识查询单元内容为空!`;
+ return;
+ }
+ const children = JYApiListLession(resVersion[0], hasPoints);
+ // 高中以typeName为标识, 而小学/初中以Name为标识
+ let JYTypeName = query.stage=='高中' ? resVersion[0].TypeName : resVersion[0].Name;
+ JYTypeName = JYTypeName.trim();
+ const reset = {
+ id: resVersion[0].ID,
+ label: resVersion[0].Name.trim(),
+ nodeType: 'version',
+ children: children,
+ editionName: resVersion[0].EditionName.trim(),
+ typeName: JYTypeName,
+ }
+ listVersion.data.push(reset);
+ })
+
+ if(listVersion.data.length > 0){
+ listVersion.status = 1;
+ }
+ return listVersion;
+}
+
+
+const JYApiListLession = (item, hasPoints) => {
+ const list = [];
+ item.Children.forEach(element => {
+ const tempList = formatCurJYLession(element, hasPoints);
+ list.push(tempList);
+ });
+ return list;
+}
+
+const formatCurJYLession = (item, hasPoints) => {
+ const obj = {
+ id: item.ID,
+ label: item.Name.trim(),
+ nodeType: 'unit',
+ children: [],
+ }
+ if(hasPoints) {
+ if (item.Children.length === 0 && !item.hasOwnProperty('Points')) {
+ obj.nodeType = 'points';
+ obj.id = item.No;
+ return obj;
+ }
+ else if (item.Children.length > 0 ){
+ for(let i=0; i
0){
+ obj.nodeType = 'lession';
+ for(let i=0; i 0 ){
+ for(let i=0; i{
+ if (typeof str == 'string') {
+ try {
+ let obj=JSON.parse(str);
+ if(typeof obj == 'object' && obj ){
+ return true;
+ }else{
+ return false;
+ }
+ } catch(e) {
+ return false;
+ }
+ }
+};
+
+
+/**
+ * @description processExamQuestion 格式化试题
+ * @param {*} row
+ */
+export const processExamQuestion = (row) => {
+ for (var i=0; iix>0);
+ // console.log(bjTitle,'背景标题');
+ // console.log(tmTitles,'复合题目');
+ let titls = [];
+ options.forEach((element,index1) => {
+ const workDescArr = element.split('#&');
+ let tmp = '';
+ let j=0;
+ for(; j`;
+ }
+ const char = String.fromCharCode(65+j);
+ tmp += `${char}.${workDescArr[j]}
`;
+ if(j%2 == 1){
+ tmp += ' ';
+ }
+
+ }
+ // j此刻已自增1, 故当选项为单数时, 需要补充结束标签
+ if(j%2 == 1){
+ tmp += '