electron/config.ts | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
index.html | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/assets/images/menu/cuoTi.svg | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/assets/images/menu/shouCang.svg | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/assets/js/config.ts | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/child.ts | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/plugin/axios/index.ts | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/examination/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/login.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/readerPages/webHome.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
electron/config.ts
@@ -1,5 +1,6 @@ // 测试 export const ctx = "http://182.92.203.7:3001"; // export const ctx = "https://jsek.bnuic.com"; // export const ctx = "http://182.92.203.7:3001"; export const ctx = "https://jsek.bnuic.com"; // export const ctx = "https://www.tepcb.com"; export const downloaderFileCtx = "http://182.92.203.7:3007/DigitalTextbookReader"; index.html
@@ -14,7 +14,7 @@ <body> <div id="parentApp"></div> <script type="module" src="/src/main.ts"></script> <script type="module" src="/src/main.ts?v=1.0"></script> </body> </html> src/assets/images/menu/cuoTi.svg
New file @@ -0,0 +1 @@ <?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1749464370740" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3090" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32"><path d="M870.4 0H153.6C97.28 0 51.2 46.08 51.2 102.4v819.2c0 56.32 46.08 102.4 102.4 102.4h179.2c14.1312 0 25.6-11.4688 25.6-25.6s-11.4688-25.6-25.6-25.6H153.6c-28.2624 0-51.2-23.04-51.2-51.2V102.4c0-28.2624 22.9376-51.2 51.2-51.2h716.8c28.2624 0 51.2 22.9376 51.2 51.2v179.2c0 14.1312 11.4688 25.6 25.6 25.6s25.6-11.4688 25.6-25.6V102.4C972.8 46.08 926.72 0 870.4 0z" p-id="3091"></path><path d="M640 358.4c-183.808 0-332.8 148.992-332.8 332.8s148.992 332.8 332.8 332.8 332.8-148.992 332.8-332.8-148.992-332.8-332.8-332.8z m0 614.4c-155.2384 0-281.6-126.3616-281.6-281.6 0-155.3408 126.3616-281.6 281.6-281.6s281.6 126.2592 281.6 281.6c0 155.2384-126.3616 281.6-281.6 281.6zM281.6 256h460.8c14.1312 0 25.6-11.5712 25.6-25.6 0-14.1312-11.4688-25.6-25.6-25.6H281.6c-14.0288 0-25.6 11.4688-25.6 25.6 0 14.0288 11.5712 25.6 25.6 25.6zM281.6 460.8h51.2c14.1312 0 25.6-11.5712 25.6-25.6 0-14.1312-11.4688-25.6-25.6-25.6h-51.2c-14.0288 0-25.6 11.4688-25.6 25.6 0 14.0288 11.5712 25.6 25.6 25.6z" p-id="3092"></path><path d="M767.6928 564.4288c-9.9328-9.9328-26.2144-9.9328-36.2496 0l-90.5216 90.5216-90.5216-90.5216c-9.9328-9.9328-26.2144-9.9328-36.2496 0-9.9328 10.0352-9.9328 26.3168 0 36.2496l90.5216 90.5216-90.5216 90.5216c-10.0352 10.0352-10.0352 26.3168 0 36.2496s26.2144 9.9328 36.2496 0l90.5216-90.5216 90.5216 90.5216c9.9328 9.9328 26.3168 9.9328 36.2496 0 9.9328-10.0352 9.9328-26.3168 0-36.2496L677.1712 691.2l90.5216-90.5216c9.9328-9.9328 9.9328-26.2144 0-36.2496z" p-id="3093"></path></svg> src/assets/images/menu/shouCang.svg
New file @@ -0,0 +1 @@ <?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1749464608225" class="icon" viewBox="0 0 1152 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="27447" xmlns:xlink="http://www.w3.org/1999/xlink" width="36" height="32"><path d="M96 198.4c-12.8 19.2-12.8 25.6-19.2 32 0 6.4-6.4 6.4-6.4 12.8v556.8c0 44.8 0 64 12.8 76.8 6.4 12.8 12.8 19.2 25.6 25.6 12.8 6.4 32 12.8 76.8 12.8h780.8c44.8 0 64 0 76.8-12.8 12.8-6.4 19.2-12.8 25.6-25.6 6.4-12.8 12.8-32 12.8-76.8V384c0-44.8 0-64-12.8-76.8-6.4-12.8-12.8-19.2-25.6-25.6-12.8-6.4-32-12.8-76.8-12.8H416c-38.4 0-70.4-32-70.4-70.4v-64c0-32-25.6-64-64-64H185.6c-6.4 0-6.4 0-6.4 6.4-6.4 6.4-6.4 12.8-19.2 32l-64 89.6zM384 51.2h448c76.8 0 147.2 51.2 172.8 121.6l6.4 19.2c32 0 44.8 6.4 70.4 19.2 25.6 12.8 44.8 32 57.6 57.6 6.4 32 12.8 57.6 12.8 115.2v422.4c0 57.6-6.4 83.2-19.2 108.8-12.8 25.6-32 44.8-57.6 57.6-32 12.8-57.6 19.2-108.8 19.2H185.6c-57.6 0-83.2-6.4-108.8-19.2-25.6-12.8-44.8-32-57.6-57.6-12.8-25.6-19.2-51.2-19.2-108.8V288v-51.2c0-12.8 6.4-19.2 12.8-32s12.8-25.6 25.6-44.8l57.6-89.6c19.2-25.6 25.6-32 38.4-44.8 12.8-6.4 19.2-12.8 32-19.2 19.2-6.4 32-6.4 57.6-6.4h51.2C320 0 364.8 19.2 384 51.2zM416 128v70.4h518.4C921.6 153.6 876.8 128 832 128H416z m371.2 294.4c57.6 57.6 57.6 153.6 0 217.6l-140.8 153.6c-12.8 12.8-32 25.6-51.2 25.6s-38.4-6.4-51.2-25.6L403.2 640c-57.6-57.6-57.6-153.6 0-217.6 51.2-57.6 134.4-64 192-12.8 57.6-44.8 140.8-44.8 192 12.8z m-217.6 64l-12.8-12.8c-25.6-32-70.4-32-102.4 0s-32 89.6 0 121.6l140.8 153.6 140.8-153.6c32-32 32-89.6 0-121.6-25.6-32-70.4-32-102.4 0l-12.8 12.8c-6.4 6.4-19.2 12.8-25.6 12.8-12.8 0-19.2-6.4-25.6-12.8z" fill="#606266" p-id="27448"></path></svg> src/assets/js/config.ts
@@ -1,14 +1,20 @@ // 测试 // export const requestCtx = "https://jsek.bnuic.com"; //jsek // export const appId = 3; export const requestCtx = "http://182.92.203.7:3007"; export const appId = 12 // export const requestCtx = "https://www.tepcb.com"; //lvyoushe // export const appId = 2; export const requestCtx = "https://jsek.bnuic.com"; //jsek export const appId = 3; // export const requestCtx = "http://182.92.203.7:3007"; // export const appId = 27 export const requestTimeOut = 300000; // 请求超时时间 export const tokenKey = "token"; export const userInfoKey = "userInfo"; // 用户信息key export const appRefCode = "tourismWebsite"; // export const tokenKey = "token"; export const tokenKey = "jsek-token"; export const userInfoKey = "jesk-userInfo"; // 用户信息key // export const userInfoKey = "userInfo"; // 用户信息key // export const appRefCode = "tourismWebsite"; export const appRefCode = "jingshieke"; export const goodsStore = `defaultGoodsStore${appId}`; // 默认商品库(书城) export const digitalTextbooks = "jsek_digitalTextbooks";//数字教材 // export const digitalTextbooks = "tourism_digitalTextbooks";//旅游社数字教材 export const digitalTextbooks = "jsek_digitalTextbooks";//京师智教数字教材 // export const loginCtx = "http://jsek.bnuic.com/home/#/digitalTextbooks?login=true"; //登录链接 export const loginCtx = ""; //登录链接 src/child.ts
@@ -8,8 +8,107 @@ // console.log("父层变化:",state, prev) // // window.qiankunState = state; // }) const testBooks = { botany: { name: 'app-content', entry: '//182.92.203.7:3007/books/book/botany', container: '#container', activeRule: '/home' //匹配所有以/subPath开头的为子应用 }, aurturingAndEducationAged0to3: { name: 'app-content', entry: '//182.92.203.7:3007/books/book/aurturingAndEducationAged0to3', container: '#container', activeRule: '/home' //匹配所有以/subPath开头的为子应用 }, childcareInstitutionsManagement: { name: 'app-content', entry: '//182.92.203.7:3007/books/book/childcareInstitutionsManagement', container: '#container', activeRule: '/home' //匹配所有以/subPath开头的为子应用 }, preschoolGameGuidance: { name: 'app-content', entry: '//182.92.203.7:3007/books/book/preschoolGameGuidance', container: '#container', activeRule: '/home' }, kindergartenLanguageActivity: { name: 'app-content', entry: '//182.92.203.7:3007/books/book/kindergartenLanguageActivity', container: '#container', activeRule: '/home' }, preschoolEvaluation: { name: 'app-content', entry: '//182.92.203.7:3007/books/book/preschoolEvaluation', container: '#container', activeRule: '/home' }, preschoolBasicKnowledge: { name: 'app-content', entry: '//182.92.203.7:3007/books/book/preschoolBasicKnowledge', container: '#container', activeRule: '/home' }, OralAndBroadcasting: { name: 'app-content', entry: '//182.92.203.7:3007/books/book/OralAndBroadcasting', container: '#container', activeRule: '/home' }, cognitiveLanDevEduAges0to3: { name: 'app-content', entry: '//182.92.203.7:3007/books/book/cognitiveLanDevEduAges0to3', container: '#container', activeRule: '/home' }, toddlerSportsSafetyProtection: { name: 'app-content', entry: '//182.92.203.7:3007/books/book/toddlerSportsSafetyProtection', container: '#container', activeRule: '/home' }, artInitiationForAges0to3: { name: 'app-content', entry: '//182.92.203.7:3007/books/book/artInitiationForAges0to3', container: '#container', activeRule: '/home' }, childIllnessPreventionCare: { name: 'app-content', entry: '//182.92.203.7:3007/books/book/childIllnessPreventionCare', container: '#container', activeRule: '/home' }, behaviorObserveAndGuid: { name: 'app-content', entry: '//182.92.203.7:3007/books/book/behaviorObserveAndGuid', container: '#container', activeRule: '/home' }, hydraulicTransmission: { name: 'app-content', entry: '//182.92.203.7:3007/books/book/hydraulicTransmission', container: '#container', activeRule: '/home' }, foodSensoryInspection: { name: 'app-content', entry: '//182.92.203.7:3007/books/book/foodSensoryInspection', container: '#container', activeRule: '/home' }, MMVRTCMP: { name: 'app-content', entry: '//182.92.203.7:3007/books/book/MMVRTCMP', container: '#container', activeRule: '/home' } } export const microApps = { const jsekBooks = { childHealth: { // - 必选,微应用的名称,微应用之间必须确保唯一 name: 'app-content', @@ -59,147 +158,82 @@ container: '#container', activeRule: '/home' //匹配所有以/subPath开头的为子应用 }, civilAviation:{ civilAviation: { name: 'app-content', entry: '//jsek.bnuic.com/books/book/civilAviation', container: '#container', activeRule: '/home' //匹配所有以/subPath开头的为子应用 }, civilServices:{ civilServices: { name: 'app-content', entry: '//jsek.bnuic.com/books/book/civilServices', container: '#container', activeRule: '/home' //匹配所有以/subPath开头的为子应用 }, meetingPlanners:{ meetingPlanners: { name: 'app-content', entry: '//jsek.bnuic.com/books/book/meetingPlanners', container: '#container', activeRule: '/home' //匹配所有以/subPath开头的为子应用 }, aviationBasicSkills:{ aviationBasicSkills: { name: 'app-content', entry: '//jsek.bnuic.com/books/book/aviationBasicSkills', container: '#container', activeRule: '/home' //匹配所有以/subPath开头的为子应用 }, aviationSafety:{ aviationSafety: { name: 'app-content', entry: '//jsek.bnuic.com/books/book/aviationSafety', container: '#container', activeRule: '/home' //匹配所有以/subPath开头的为子应用 }, aviationEtiquette:{ aviationEtiquette: { name: 'app-content', entry: '//jsek.bnuic.com/books/book/aviationEtiquette', container: '#container', activeRule: '/home' //匹配所有以/subPath开头的为子应用 }, toddlerGameImplementation:{ toddlerGameImplementation: { name: 'app-content', entry: '//jsek.bnuic.com/books/book/toddlerGameImplementation', container: '#container', activeRule: '/home' //匹配所有以/subPath开头的为子应用 }, botany:{ kindergartenActivitiesDesignGuidance: { name: 'app-content', entry: '//182.92.203.7:3007/books/book/botany', container: '#container', activeRule: '/home' //匹配所有以/subPath开头的为子应用 }, aurturingAndEducationAged0to3:{ name: 'app-content', entry: '//182.92.203.7:3007/books/book/aurturingAndEducationAged0to3', container: '#container', activeRule: '/home' //匹配所有以/subPath开头的为子应用 }, childcareInstitutionsManagement:{ name: 'app-content', entry: '//182.92.203.7:3007/books/book/childcareInstitutionsManagement', container: '#container', activeRule: '/home' //匹配所有以/subPath开头的为子应用 }, preschoolGameGuidance:{ name: 'app-content', entry: '//182.92.203.7:3007/books/book/preschoolGameGuidance', container: '#container', activeRule: '/home' }, kindergartenLanguageActivity:{ name: 'app-content', entry: '//182.92.203.7:3007/books/book/kindergartenLanguageActivity', container: '#container', activeRule: '/home' }, preschoolEvaluation:{ name: 'app-content', entry: '//182.92.203.7:3007/books/book/preschoolEvaluation', container: '#container', activeRule: '/home' }, preschoolBasicKnowledge:{ name: 'app-content', entry: '//182.92.203.7:3007/books/book/preschoolBasicKnowledge', container: '#container', activeRule: '/home' }, kindergartenActivitiesDesignGuidance:{ name: 'app-content', entry: '//182.92.203.7:3007/books/book/kindergartenActivitiesDesignGuidance', container: '#container', activeRule: '/home' }, policiesAndRegulations:{ name: 'app-content', entry: '//182.92.203.7:3007/books/book/policiesAndRegulations', container: '#container', activeRule: '/home' }, OralAndBroadcasting:{ name: 'app-content', entry: '//182.92.203.7:3007/books/book/OralAndBroadcasting', container: '#container', activeRule: '/home' }, cognitiveLanDevEduAges0to3:{ name: 'app-content', entry: '//182.92.203.7:3007/books/book/cognitiveLanDevEduAges0to3', container: '#container', activeRule: '/home' }, toddlerSportsSafetyProtection:{ name: 'app-content', entry: '//182.92.203.7:3007/books/book/toddlerSportsSafetyProtection', container: '#container', activeRule: '/home' }, aviationPassengerTransport6th:{ name: 'app-content', entry: '//182.92.203.7:3007/books/book/aviationPassengerTransport6th', container: '#container', activeRule: '/home' }, artInitiationForAges0to3:{ name: 'app-content', entry: '//182.92.203.7:3007/books/book/artInitiationForAges0to3', container: '#container', activeRule: '/home' }, childIllnessPreventionCare:{ name: 'app-content', entry: '//182.92.203.7:3007/books/book/childIllnessPreventionCare', container: '#container', activeRule: '/home' }, behaviorObserveAndGuid:{ name: 'app-content', entry: '//182.92.203.7:3007/books/book/behaviorObserveAndGuid', entry: '//jsek.bnuic.com/books/book/kindergartenActivitiesDesignGuidance', container: '#container', activeRule: '/home' } } const tourismBooks = { policiesAndRegulations: { name: 'app-content', entry: '//www.tepcb.com/books/book/policiesAndRegulations', container: '#container', activeRule: '/home' }, aviationPassengerTransport6th: { name: 'app-content', entry: '//www.tepcb.com/books/book/aviationPassengerTransport6th', container: '#container', activeRule: '/home' }, hotelEnglishTrainingBrochure2nd: { name: 'app-content', entry: '//www.tepcb.com/books/book/hotelEnglishTrainingBrochure2nd', container: '#container', activeRule: '/home' } } export const microApps = jsekBooks window.qiankunActions = actions export default actions src/plugin/axios/index.ts
@@ -2,6 +2,7 @@ import { ctx } from '../../../electron/config' import router from '@/router' import { tokenKey } from '@/assets/js/config.ts' // 创建 axios 实例 const service = axios.create({ @@ -12,7 +13,7 @@ // 请求拦截器 service.interceptors.request.use( (config) => { const token = localStorage.getItem('token') const token = localStorage.getItem(tokenKey) if (token) config.headers['Authorization'] = `bearer ${token}` return config }, src/views/examination/index.vue
@@ -165,7 +165,7 @@ } else { examination.dialogVisible = false // handleQuestion() if(props.type == 'errorQuestion') { if (props.type == 'errorQuestion') { handleQuestion() } examination.cardList = [] @@ -292,8 +292,8 @@ // 题目收藏按钮,收藏和取消同一接口,取消数组减去该项id const setCollect = (num: number, number?: number) => { let item = null if(number) { item = examination.cardList[num].infoList[number] if (number) { item = examination.cardList[num].infoList[number] } else { item = examination.cardList[num] } @@ -355,24 +355,24 @@ domain: 'collectData', keys: [props.activeBook.bookId] }) .then((res:any) => { .then((res: any) => { console.log('收藏数据', res) try { const collect = JSON.parse(res[0].value) if (collect.length) { examination.collectList = collect.find((citem:any) => citem.type == 'bits').collectList examination.collectList = collect.find((citem: any) => citem.type == 'bits').collectList examination.allCollect[0].collectList = collect.find( (citem:any) => citem.type == 'bits' (citem: any) => citem.type == 'bits' ).collectList examination.allCollect[1].collectList = collect.find( (citem:any) => citem.type == 'json' (citem: any) => citem.type == 'json' ).collectList } } catch (error) { console.log('暂无数据') } if (props.type == 'option') { getAnswerInfo(async (res:any) => { getAnswerInfo(async (res: any) => { if (res.length) { // 有记录,不能答题,状态设为已提交 examination.submitStatus = true @@ -383,7 +383,7 @@ } } else { const userAnswerList = await getUserAnswer() if(userAnswerList) { if (userAnswerList) { examination.cardList = (await getQuestionList(userAnswerList)) as any } else { examination.cardList = (await getQuestionList([])) as any @@ -630,16 +630,16 @@ domain: 'collectData', keys: [props.activeBook.bookId] }) .then(async (res:any) => { .then(async (res: any) => { try { const collect = JSON.parse(res[0].value) if (collect.length) { examination.collectList = collect.find((citem:any) => citem.type == 'bits').collectList examination.collectList = collect.find((citem: any) => citem.type == 'bits').collectList examination.allCollect[0].collectList = collect.find( (citem:any) => citem.type == 'bits' (citem: any) => citem.type == 'bits' ).collectList examination.allCollect[1].collectList = collect.find( (citem:any) => citem.type == 'json' (citem: any) => citem.type == 'json' ).collectList } } catch (error) {} @@ -669,10 +669,10 @@ } // 获取收藏夹 const getCollectDataList = async () => { console.log('收藏id',examination.allCollect) console.log('收藏id', examination.allCollect) // 开始请求 let oldData = null let oldList:any = [] let oldList: any = [] let cardList = [ { catalogName: '单选题', @@ -695,166 +695,168 @@ infoList: [] } ] let singleChoiceArr:any = [] // 单选 let judgeArr:any = [] // 判断 let shortArr:any = [] // 简答 let multipleChoiceArr:any = [] // 多选 let completionArr:any = [] // 填空 let singleChoiceArr: any = [] // 单选 let judgeArr: any = [] // 判断 let shortArr: any = [] // 简答 let multipleChoiceArr: any = [] // 多选 let completionArr: any = [] // 填空 // 11 for (let qindex = 0; qindex < examination.collectList.length; qindex++) { const qitem = examination.collectList[qindex] let query = { storeInfo: props.activeBook.storeRefcode, path: '*', cmsPath: props.activeBook.rootCmsItemId, cmsType: '*', productId: props.activeBook.bookId, queryType: '*', itemIds: qitem + '', itemFields: { Embedded_QuestionBank_Stem: [], Embedded_QuestionBank_AnalysisCon: [], Embedded_QuestionBank_Answer: [], Embedded_QuestionBank_Option: [], Embedded_QuestionBank_QuestionType: [], Embedded_QuestionBank_StemStyle: [], Embedded_QuestionBank_OptionStyle: [], Embedded_QuestionBank_KnowledgePoint: [], Embedded_QuestionBank_Difficulty: [] } } const res = await MG.store.getProductDetail(query) if (!res.datas) return false res.datas.cmsDatas[0].datas.forEach((item, index) => { let oldObj = {} if (oldList) { oldObj = oldList.find((item) => item.id == qitem) } const questionObj = { number: index + 1, // 题号 id: item.id, stem: item.Embedded_QuestionBank_QuestionType == 'completion' ? JSON.parse(item.Embedded_QuestionBank_Stem) .stemTxt.replaceAll('<vacancy>', ',input,') .split(',') : JSON.parse(item.Embedded_QuestionBank_Stem), // 题干 answer: item.Embedded_QuestionBank_Answer, // 答案 option: item.Embedded_QuestionBank_Option ? JSON.parse(item.Embedded_QuestionBank_Option) : '', // 选择题选项 analysisCon: item.Embedded_QuestionBank_AnalysisCon, // 解析 questionType: item.Embedded_QuestionBank_QuestionType, // 题型 optionStyle: item.Embedded_QuestionBank_OptionStyle, // 选项显示类型 stemStyle: item.Embedded_QuestionBank_StemStyle, // 题干显示类型 difficulty: item.Embedded_QuestionBank_Difficulty ? 4 - item.Embedded_QuestionBank_Difficulty : 0, // 难度等级 userAnswer: oldObj ? oldObj.userAnswer : item.Embedded_QuestionBank_QuestionType == 'completion' || item.Embedded_QuestionBank_QuestionType == 'multipleChoice' ? [] : '', isSubmit: false, // 查看解析 isRight: null, // 是否正确 isComplete: false, isCollect: true, isUnfold: '' } // 多选和填空答案肯为数组,要转换JSON格式 if ( questionObj.questionType == 'completion' || questionObj.questionType == 'multipleChoice' ) { try { questionObj.answer = JSON.parse(questionObj.answer).toString() } catch (error) { questionObj.answer = item.Embedded_QuestionBank_Answer if (qitem) { let query = { storeInfo: props.activeBook.storeRefcode, path: '*', cmsPath: props.activeBook.rootCmsItemId, cmsType: '*', productId: props.activeBook.bookId, queryType: '*', itemIds: qitem + '', itemFields: { Embedded_QuestionBank_Stem: [], Embedded_QuestionBank_AnalysisCon: [], Embedded_QuestionBank_Answer: [], Embedded_QuestionBank_Option: [], Embedded_QuestionBank_QuestionType: [], Embedded_QuestionBank_StemStyle: [], Embedded_QuestionBank_OptionStyle: [], Embedded_QuestionBank_KnowledgePoint: [], Embedded_QuestionBank_Difficulty: [] } } // 填空题改造 if (questionObj.questionType == 'completion') { let index = 0 for (let i = 0; i < questionObj.stem.length; i++) { const item = questionObj.stem[i] if (item == 'input') { questionObj.stem[i] = { num: index, data: 'input' } questionObj.userAnswer[index] = '' index++ const res = await MG.store.getProductDetail(query) if (!res.datas) return false res.datas.cmsDatas[0].datas.forEach((item, index) => { let oldObj = {} if (oldList) { oldObj = oldList.find((item) => item.id == qitem) } const questionObj = { number: index + 1, // 题号 id: item.id, stem: item.Embedded_QuestionBank_QuestionType == 'completion' ? JSON.parse(item.Embedded_QuestionBank_Stem) .stemTxt.replaceAll('<vacancy>', ',input,') .split(',') : JSON.parse(item.Embedded_QuestionBank_Stem), // 题干 answer: item.Embedded_QuestionBank_Answer, // 答案 option: item.Embedded_QuestionBank_Option ? JSON.parse(item.Embedded_QuestionBank_Option) : '', // 选择题选项 analysisCon: item.Embedded_QuestionBank_AnalysisCon, // 解析 questionType: item.Embedded_QuestionBank_QuestionType, // 题型 optionStyle: item.Embedded_QuestionBank_OptionStyle, // 选项显示类型 stemStyle: item.Embedded_QuestionBank_StemStyle, // 题干显示类型 difficulty: item.Embedded_QuestionBank_Difficulty ? 4 - item.Embedded_QuestionBank_Difficulty : 0, // 难度等级 userAnswer: oldObj ? oldObj.userAnswer : item.Embedded_QuestionBank_QuestionType == 'completion' || item.Embedded_QuestionBank_QuestionType == 'multipleChoice' ? [] : '', isSubmit: false, // 查看解析 isRight: null, // 是否正确 isComplete: false, isCollect: true, isUnfold: '' } // 多选和填空答案肯为数组,要转换JSON格式 if ( questionObj.questionType == 'completion' || questionObj.questionType == 'multipleChoice' ) { try { questionObj.answer = JSON.parse(questionObj.answer).toString() } catch (error) { questionObj.answer = item.Embedded_QuestionBank_Answer } } } // 获取图片 if (questionObj.stemStyle == 'Image' || questionObj.stemStyle == 'TxtAndImage') { questionObj.stem.stemImage = getPublicImage(questionObj.stem.stemImage, 150) } if (questionObj.optionStyle == 'Image' || questionObj.optionStyle == 'TxtAndImage') { questionObj.option.forEach((optionItem:any) => { if (optionItem.img) optionItem.img = getPublicImage(optionItem.img, 150) }) } // 题干富文本处理 if (questionObj.stemStyle == 'RichText') { // questionObj.option.txt = '' questionObj.stem.stemTxt = questionObj.stem.stemTxt .replace( // 填空题改造 if (questionObj.questionType == 'completion') { let index = 0 for (let i = 0; i < questionObj.stem.length; i++) { const item = questionObj.stem[i] if (item == 'input') { questionObj.stem[i] = { num: index, data: 'input' } questionObj.userAnswer[index] = '' index++ } } } // 获取图片 if (questionObj.stemStyle == 'Image' || questionObj.stemStyle == 'TxtAndImage') { questionObj.stem.stemImage = getPublicImage(questionObj.stem.stemImage, 150) } if (questionObj.optionStyle == 'Image' || questionObj.optionStyle == 'TxtAndImage') { questionObj.option.forEach((optionItem: any) => { if (optionItem.img) optionItem.img = getPublicImage(optionItem.img, 150) }) } // 题干富文本处理 if (questionObj.stemStyle == 'RichText') { // questionObj.option.txt = '' questionObj.stem.stemTxt = questionObj.stem.stemTxt .replace( /\<img/gi, '<img style="max-width: 300rpx !important;object-fit: contain;" class="stem-rich-img" ' ) .replace(/\<p/gi, '<p class="stem-rich-p"') .replace('../file', requestCtx + '/file') } // 选项富文本处理 if ( questionObj.optionStyle == 'RichText' && (questionObj.questionType == 'singleChoice' || questionObj.questionType == 'judge' || questionObj.questionType == 'multipleChoice') ) { questionObj.option.forEach((item: any) => { if (item.txt) item.txt = item.txt .replace(/\<img/gi, '<img class="option-rich-img"') .replace(/\<p/gi, '<p class="stem-rich-p"') .replace('../file', requestCtx + '/file') }) } // 解析富文本处理 if (questionObj.analysisCon && typeof questionObj.analysisCon == 'string') { questionObj.analysisCon = questionObj.analysisCon.replace( /\<img/gi, '<img style="max-width: 300rpx !important;object-fit: contain;" class="stem-rich-img" ' ) .replace(/\<p/gi, '<p class="stem-rich-p"') .replace('../file', requestCtx + '/file') } // 选项富文本处理 if ( questionObj.optionStyle == 'RichText' && (questionObj.questionType == 'singleChoice' || questionObj.questionType == 'judge' || questionObj.questionType == 'multipleChoice') ) { questionObj.option.forEach((item:any) => { if (item.txt) item.txt = item.txt .replace(/\<img/gi, '<img class="option-rich-img"') .replace(/\<p/gi, '<p class="stem-rich-p"') .replace('../file', requestCtx + '/file') }) } // 解析富文本处理 if (questionObj.analysisCon && typeof questionObj.analysisCon == 'string') { questionObj.analysisCon = questionObj.analysisCon.replace( /\<img/gi, '<img style="max-width: 300rpx !important;object-fit: contain;" class="stem-rich-img" ' ) } // 听力题修改 // if (questionObj.questionType == 'singleChoice') { // const src = this.extractSourceSrc(questionObj.stem.stemTxt) // if (src) { // questionObj.src = src // questionObj.stem.stemTxt = this.removeVideoAndAudioTags(questionObj.stem.stemTxt) // } // } if (item.Embedded_QuestionBank_QuestionType == 'judge') { questionObj.type = '判断题' judgeArr.push(questionObj) } else if (item.Embedded_QuestionBank_QuestionType == 'singleChoice') { questionObj.type = '单选题' singleChoiceArr.push(questionObj) } else if (item.Embedded_QuestionBank_QuestionType == 'multipleChoice') { questionObj.type = '多选题' multipleChoiceArr.push(questionObj) } else if (item.Embedded_QuestionBank_QuestionType == 'completion') { questionObj.type = '填空题' completionArr.push(questionObj) } else if (item.Embedded_QuestionBank_QuestionType == 'shortAnswer') { questionObj.type = '简答题' shortArr.push(questionObj) } }) } // 听力题修改 // if (questionObj.questionType == 'singleChoice') { // const src = this.extractSourceSrc(questionObj.stem.stemTxt) // if (src) { // questionObj.src = src // questionObj.stem.stemTxt = this.removeVideoAndAudioTags(questionObj.stem.stemTxt) // } // } if (item.Embedded_QuestionBank_QuestionType == 'judge') { questionObj.type = '判断题' judgeArr.push(questionObj) } else if (item.Embedded_QuestionBank_QuestionType == 'singleChoice') { questionObj.type = '单选题' singleChoiceArr.push(questionObj) } else if (item.Embedded_QuestionBank_QuestionType == 'multipleChoice') { questionObj.type = '多选题' multipleChoiceArr.push(questionObj) } else if (item.Embedded_QuestionBank_QuestionType == 'completion') { questionObj.type = '填空题' completionArr.push(questionObj) } else if (item.Embedded_QuestionBank_QuestionType == 'shortAnswer') { questionObj.type = '简答题' shortArr.push(questionObj) } }) } } // 22 cardList[0].infoList = singleChoiceArr @@ -896,10 +898,10 @@ } } } console.log('收藏json',jsonCollectList); console.log('收藏json', jsonCollectList) for (let index = 0; index < jsonCollectList.length; index++) { const item = jsonCollectList[index] if (item.questionType == 'singleChoice') { if (item.questionType == 'singleChoice') { examination.cardList[0].infoList.push(item) } else if (item.questionType == 'judge') { examination.cardList[1].infoList.push(item) @@ -911,7 +913,7 @@ examination.cardList[4].infoList.push(item) } else if (item.type && item.type == 'material') { examination.cardList[examination.cardList.length] = item } } } examination.cardList = examination.cardList.filter((item) => item.infoList.length > 0) console.log('拼接题', examination.cardList) @@ -923,14 +925,18 @@ domain: 'errorData', keys: [props.activeBook.bookId] }) .then(async (res:any) => { .then(async (res: any) => { try { const error = JSON.parse(res[0].value) if (error.length) { console.log('有吗', error) examination.errorList = error.find((citem:any) => citem.type == 'bits').errorList examination.allError[0].errorList = error.find((citem:any) => citem.type == 'bits').errorList examination.allError[1].errorList = error.find((citem:any) => citem.type == 'json').errorList examination.errorList = error.find((citem: any) => citem.type == 'bits').errorList examination.allError[0].errorList = error.find( (citem: any) => citem.type == 'bits' ).errorList examination.allError[1].errorList = error.find( (citem: any) => citem.type == 'json' ).errorList } } catch (error) {} if (examination.allError[0].errorList.length || examination.allError[1].errorList.length) { @@ -957,7 +963,7 @@ // 获取错题集 const getErrorDataList = async () => { let oldData = null let oldList:any = [] let oldList: any = [] let cardList = [ { catalogName: '单选题', @@ -980,11 +986,11 @@ infoList: [] } ] let singleChoiceArr:any = [] // 单选 let judgeArr:any = [] // 判断 let shortArr:any = [] // 简答 let multipleChoiceArr:any = [] // 多选 let completionArr:any = [] // 填空 let singleChoiceArr: any = [] // 单选 let judgeArr: any = [] // 判断 let shortArr: any = [] // 简答 let multipleChoiceArr: any = [] // 多选 let completionArr: any = [] // 填空 // 11 for (let qindex = 0; qindex < examination.errorList.length; qindex++) { const qitem = examination.errorList[qindex] @@ -1010,10 +1016,10 @@ } const res = await MG.store.getProductDetail(query) if (!res.datas) return false res.datas.cmsDatas[0].datas.forEach((item:any, index:number) => { res.datas.cmsDatas[0].datas.forEach((item: any, index: number) => { let oldObj = {} if (oldList) { oldObj = oldList.find((item:any) => item.id == qitem) oldObj = oldList.find((item: any) => item.id == qitem) } const questionObj = { number: index + 1, // 题号 @@ -1078,7 +1084,7 @@ questionObj.stem.stemImage = getPublicImage(questionObj.stem.stemImage, 150) } if (questionObj.optionStyle == 'Image' || questionObj.optionStyle == 'TxtAndImage') { questionObj.option.forEach((optionItem:any) => { questionObj.option.forEach((optionItem: any) => { if (optionItem.img) optionItem.img = getPublicImage(optionItem.img, 150) }) } @@ -1100,7 +1106,7 @@ questionObj.questionType == 'judge' || questionObj.questionType == 'multipleChoice') ) { questionObj.option.forEach((item:any) => { questionObj.option.forEach((item: any) => { if (item.txt) item.txt = item.txt .replace(/\<img/gi, '<img class="option-rich-img"') @@ -1135,7 +1141,7 @@ } else if (item.Embedded_QuestionBank_QuestionType == 'completion') { questionObj.type = '填空题' completionArr.push(questionObj) } else if (item.Embedded_QuestionBank_QuestionType == 'shortAnswer' ) { } else if (item.Embedded_QuestionBank_QuestionType == 'shortAnswer') { questionObj.type = '简答题' shortArr.push(questionObj) } @@ -1175,7 +1181,7 @@ for (let cindex = 0; cindex < examination.allError[1].errorList.length; cindex++) { const citem = examination.allError[1].errorList[cindex] if (item.id == citem) { item.isCollect = examination.allCollect[1].collectList.indexOf(item.id) > -1 ? true :false item.isCollect = examination.allCollect[1].collectList.indexOf(item.id) > -1 ? true : false item.isJson = true jsonCollectList.push(item) } @@ -1201,7 +1207,7 @@ examination.cardList = examination.cardList.filter((item) => item.infoList.length > 0) } // 批改题目 (练习,我的做题,我的收藏模式下) const handleQuestion = () => { const handleQuestion = () => { for (let index = 0; index < examination.cardList.length; index++) { const item = examination.cardList[index] for (let cindex = 0; cindex < item.infoList.length; cindex++) { @@ -1237,8 +1243,11 @@ } } } if (!citem.isRight && citem.questionType != 'shortAnswer' && citem.questionType != 'formula') { if ( !citem.isRight && citem.questionType != 'shortAnswer' && citem.questionType != 'formula' ) { // 客观题回答错误 记录错题 if (citem.isJson) { if ( @@ -1283,14 +1292,13 @@ } ] }) .then((res:any) => { .then((res: any) => { console.log('错题已保存', examination.allError) }) if (props.type == 'option') { recordAnswerData() } console.log('提交错题',examination.errorList,examination.allError); console.log('提交错题', examination.errorList, examination.allError) } // 处理答题数据 const recordAnswerData = () => { @@ -1311,24 +1319,24 @@ } // 未提交保存答案方法 const saveAnswerData = () => { let arr = [] let arr = [] for (let index = 0; index < examination.cardList.length; index++) { const item = examination.cardList[index]; const item = examination.cardList[index] for (let cindex = 0; cindex < item.infoList.length; cindex++) { const citem = item.infoList[cindex]; if(citem.userAnswer && citem.userAnswer.length) { const citem = item.infoList[cindex] if (citem.userAnswer && citem.userAnswer.length) { arr.push({ id:citem.id, userAnswer:citem.userAnswer id: citem.id, userAnswer: citem.userAnswer }) } } } console.log('用户答案',arr); console.log('用户答案', arr) setUserAnswer(arr) } // 未提交退出答题,保存用户答案 const setUserAnswer = (data:any) => { const setUserAnswer = (data: any) => { MG.identity .setUserKey({ setKeyRequests: [ @@ -1339,33 +1347,33 @@ } ] }) .then((res:any) => { .then((res: any) => { console.log('提交用户答题数据成功') }) } // 获取未提交退出答题的用户答案 const getUserAnswer = async() => { const getUserAnswer = async () => { let data await MG.identity .getUserKey({ domain: 'beforeAnswerData', keys: [props.info.id] }) .then((res:any) => { if(res.length) { .then((res: any) => { if (res.length) { data = JSON.parse(res[0].value) } }) return data } return data } // 获取用户旧答题数据(提交后) const getAnswerInfo = (callback:any) => { const getAnswerInfo = (callback: any) => { MG.identity .getUserKey({ domain: 'answerData', keys: [props.info.id] }) .then((res:any) => { .then((res: any) => { if (callback) callback(res) }) } @@ -1381,18 +1389,18 @@ } ] }) .then((res:any) => { .then((res: any) => { console.log('提交用户答题数据成功') }) } // 删除用户答题数据 const deleteAnswerInfo = (callback:any) => { const deleteAnswerInfo = (callback: any) => { MG.identity .delUserKey({ domain: 'answerData', keys: [props.info.id] }) .then((res:any) => { .then((res: any) => { if (callback) callback() }) } @@ -1407,7 +1415,7 @@ } ] }) .then((res:any) => { .then((res: any) => { console.log('收藏/取消成功') }) } @@ -1422,11 +1430,11 @@ } ] }) .then((res:any) => { .then((res: any) => { console.log('错题已清空') }) } const onChangeInput = (value:any,index:number,cindex:number,dindex:number) => { const onChangeInput = (value: any, index: number, cindex: number, dindex: number) => { examination.cardList[index].infoList[cindex].userAnswer[dindex] = value } defineExpose({ handleExaminationDialog }) src/views/login.vue
@@ -70,7 +70,7 @@ loading.value = true MG.identity .loginByPassword({ appRefCode: 'tourismWebsite', appRefCode: config.appRefCode, loginName: loginData.value.username, password: loginData.value.password, platform: 'string' src/views/readerPages/webHome.vue
@@ -585,8 +585,15 @@ </div> <!-- 题库底部收藏夹和错题集 --> <ul class="question-bottom" v-if="activeMenu == '题库'"> <li @click="selectExercisesType('collection')">收藏夹</li> <li @click="selectExercisesType('wrong')">错题本</li> <li @click="selectExercisesType('collection')" v-if="bookConfig.textbookComponents.indexOf('A434F2C0') > -1"> <div><img :src="shouCang" class="hover" /></div> <div>收藏夹</div> </li> <li @click="selectExercisesType('wrong')" v-if="bookConfig.textbookComponents.indexOf('AFC1A288') > -1"> <div><img :src="cuoTi" class="hover" /></div> <div>错题本</div> </li> </ul> <!-- 菜单内容收起 --> <div class="menuStateBox" v-if="menuState.open"> @@ -1264,11 +1271,11 @@ title="AI智能问答" align-center v-model="wendaVisible" width="60%" width="80%" class="myAnserDialogs" > <div class="wendabox"> <iframe src="https://yiyan.baidu.com/" frameborder="0"></iframe> <iframe :src="aiQuestion" frameborder="0"></iframe> </div> </el-dialog> <el-dialog title="词典" align-center v-model="cidianVisible" width="60%" class="myAnserDialogs"> @@ -1447,6 +1454,9 @@ import shanchu from '@/assets/images/operation/delete.png' import bianji from '@/assets/images/operation/bianji.png' import video from '@/assets/images/content/resource.png' import shouCang from '@/assets/images/menu/shouCang.svg' import cuoTi from '@/assets/images/menu/cuoTi.svg' //引入VueOfficeDocx组件 import VueOfficeDocx from '@vue-office/docx' //引入相关样式 @@ -1460,7 +1470,8 @@ import { loadMicroApp } from 'qiankun' import { microApps } from '@/child.ts' import { open } from 'fs' let token = localStorage.getItem('token') import { digitalTextbooks, tokenKey} from '@/assets/js/config.ts' let token = localStorage.getItem(tokenKey) const canvasWith = ref(800) const canvasheight = ref(3000) const screenWidth = ref( @@ -1635,7 +1646,7 @@ const getBookInfo = () => { const obj = { storeInfo: 'jsek_digitalTextbooks', storeInfo: digitalTextbooks, path: '*', queryType: '*', coverSize: { @@ -1658,15 +1669,17 @@ } } MG.store.getProductList(obj).then((res) => { console.log(res.datas, '图书信息') if (!res.datas.length) return bookInfo.value = res.datas[0] if (res.datas[0].purchasedSaleMethodIdList.indexOf(res.datas[0].defaultSaleMethodId) > -1) { isBuy.value = true } else { isBuy.value = false if(res.datas.length > 0){ bookInfo.value = res.datas[0] if (res.datas[0].purchasedSaleMethodIdList.indexOf(res.datas[0].defaultSaleMethodId) > -1) { isBuy.value = true } else { isBuy.value = false } tryPageCount.value = Number(res.datas[0].probationPage) }else{ tryPageCount.value = 0 } tryPageCount.value = Number(res.datas[0].probationPage) }) } @@ -1954,7 +1967,7 @@ } const handleNodeClick = (data) => { if (!isBuy.value) { if (!isBuy.value && tryPageCount.value > 0) { if (data.start < tryPageCount.value) { headerData.process = data.start if (window.qiankunState && window.qiankunState.gotoPage) @@ -2240,7 +2253,6 @@ } else if (data.resourceType == '模型') { console.log(data, 222) let file = bookConfig.value.requestCtx + '/file/api/ApiDownload?md5=' + data.md5 console.log(file.exd, 777) const ctx = 'https://jsek.bnuic.com' if (data.md5) { sceneUrl.value = @@ -2961,13 +2973,15 @@ open: true }) const resourceUrl = ref('') const aiQuestion = ref("") const selectTeachTools = (item: any) => { if (token) { activeTool.value = item.name switch (item.name) { case 'AI智能问答': aiQuestion.value = "" wendaVisible.value = true aiQuestion.value = bookConfig.value.aiQuestion ? bookConfig.value.aiQuestion : "https://yiyan.baidu.com/" break case 'GGB函数工具': functionVisible.value = true @@ -5130,9 +5144,15 @@ border: 1px solid #cfcfcf; border-radius: 10px; background-color: #f9f9f9; display: flex; justify-content: center; align-items: center; text-align: center; padding-top:10px; // display: flex; // justify-content: center; // align-items: center; img{ width:20px; height:20px; } } } } @@ -5757,7 +5777,7 @@ } .myAnserDialogs { width: 700px; width: 80%; height: 90vh; }