Merge branch 'master' of http://182.92.203.7:2001/r/testbookLayout
| | |
| | | VUE_APP_ENV = 'dev' |
| | | VUE_APP_API_URL = "https://jsek.bnuic.com" |
| | | PUBLIC_PATH = '/books/book' |
| | | VUE_APP_RESOURCE_CTX = 'https://jsek.bnuic.com/books/resource/' |
| | | VUE_APP_PUBLIC_PATH = '/books/book' |
| | |
| | | VUE_APP_ENV = 'product' |
| | | VUE_APP_API_URL = "https://jsek.bnuic.com" |
| | | PUBLIC_PATH = 'http://182.92.203.7:3007/books/book' |
| | | # PUBLIC_PATH = 'https://jsek.bnuic.com/books/book' |
| | | VUE_APP_RESOURCE_CTX = 'https://jsek.bnuic.com/books/resource/' |
| | | VUE_APP_PUBLIC_PATH = 'https://jsek.bnuic.com/books/book/childHealth' |
| | | VUE_APP_BOOK_LIST = "childHealth/lifeCare/sportsAndHealth/embedded/english/artAndDance/artAndDrama/mathBook" |
| | | VUE_APP_BOOK_ID = 'childHealth' |
| | |
| | | ></sportsAndHealth> |
| | | <artAndDance v-if="activeBook.name == 'artAndDance'"></artAndDance> |
| | | <artAndDrama v-if="activeBook.name == 'artAndDrama'"></artAndDrama> |
| | | <mathBook v-if="activeBook.name == 'math'"></mathBook> |
| | | <mathBook v-if="activeBook.name == 'mathBook'"></mathBook> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import childHealth from "./books/childHealth/view/index.vue"; |
| | | import lifeCare from "./books/lifeCare/view/index.vue"; |
| | | import embedded from "./books/embedded/view/index.vue"; |
| | | import english from "./books/English/view/index.vue"; |
| | | import sportsAndHealth from "./books/sportsAndHealth/view/index"; |
| | | import artAndDance from './books/artAndDance/view/index.vue' |
| | | import mathBook from './books/math/view/index.vue' |
| | | import artAndDrama from './books/artAndDrama/view/index.vue' |
| | | export default { |
| | | name: "App", |
| | | components: { |
| | | childHealth, |
| | | lifeCare, |
| | | embedded, |
| | | english, |
| | | sportsAndHealth, |
| | | artAndDance, |
| | | mathBook, |
| | | artAndDrama |
| | | childHealth: () => import("./books/childHealth/view/index.vue"), |
| | | lifeCare: () => import("./books/lifeCare/view/index.vue"), |
| | | embedded: () => import("./books/embedded/view/index.vue"), |
| | | english: () => import("./books/english/view/index.vue"), |
| | | sportsAndHealth: () => import("./books/sportsAndHealth/view/index.vue"), |
| | | artAndDance: () => import("./books/artAndDance/view/index.vue"), |
| | | mathBook: () => import("./books/mathBook/view/index.vue"), |
| | | artAndDrama: () => import("./books/artAndDrama/view/index.vue") |
| | | }, |
| | | data() { |
| | | return { |
| | |
| | | if (this.setGlobalState) { |
| | | this.setGlobalState({ |
| | | initTestBook: async (bookId, tryPageCount) => { |
| | | // this.activeBook = await this.config.getBookConfig(this.config.resourceCtx + bookId); |
| | | if ( |
| | | // "http://182.92.203.7:3007/books/resource/" |
| | | // "https://jsek.bnuic.com/books/resource/" |
| | | this.config.resourceCtx == |
| | | "http://182.92.203.7:3007/books/resource/" |
| | | ) { |
| | | this.config.resourceCtx = this.config.resourceCtx + bookId; |
| | | } |
| | | this.activeBook = await this.config.getBookConfig( |
| | | process.env.VUE_APP_RESOURCE_CTX + process.env.VUE_APP_BOOK_ID |
| | | ); |
| | | this.config.activeBook = this.activeBook; |
| | | this.config.goodsStore = this.activeBook.storeRefcode; |
| | | this.activeBook = await this.config.getBookConfig( |
| | | this.config.resourceCtx |
| | | ); |
| | | if (tryPageCount) { |
| | | this.activeBook.tryPageCount = tryPageCount; |
| | | } |
| | |
| | | } |
| | | }); |
| | | } else { |
| | | // childHealth |
| | | // lifeCare |
| | | // sportsAndHealth |
| | | // embedded |
| | | // english |
| | | // artAndDance |
| | | // artAndDrama |
| | | // mathBook |
| | | this.activeBook = await this.config.getBookConfig( |
| | | // childHealth |
| | | // lifeCare |
| | | // sportsAndHealth |
| | | // embedded |
| | | // english |
| | | // artAndDance |
| | | // artAndDrama |
| | | // math |
| | | this.config.resourceCtx + "lifeCare" |
| | | process.env.VUE_APP_RESOURCE_CTX + |
| | | (process.env.VUE_APP_ENV == "product" |
| | | ? process.env.VUE_APP_BOOK_ID |
| | | : "childHealth") |
| | | ); |
| | | // 测试试读30页 |
| | | // this.activeBook.tryPageCount = 10; |
| | |
| | | margin: auto; |
| | | } |
| | | |
| | | |
| | | .openImgBox img{ |
| | | .openImgBox img { |
| | | cursor: zoom-in; |
| | | } |
| | | </style> |
| | |
| | | } |
| | | .page-box { |
| | | box-sizing: border-box; |
| | | min-height: 1150px ; |
| | | min-height: 1150px; |
| | | margin-bottom: 20px; |
| | | box-shadow: 0 3px 6px 1px #00000029; |
| | | background-color: #fff; |
| | |
| | | .video-box { |
| | | max-width: 260px; |
| | | } |
| | | |
| | | .page-box{ |
| | | min-height: 500px; |
| | | } |
| | | } |
| | | } |
| | | @media (min-width: 660px) { |
| | |
| | | <template> |
| | | <div class="chapter" num="1"> |
| | | <!-- 封面 --> |
| | | <div class="page-box cover mt-20" page="1" style="min-height:auto"> |
| | | <div class="page-box cover mt-20" page="1"> |
| | | <div v-if="showPageList.indexOf(1) > -1"> |
| | | <img src="../../../assets/images/Covers.jpg" alt="" /> |
| | | </div> |
| | | </div> |
| | | <div class="page-box cover" page="2" style="min-height:auto"> |
| | | <div class="page-box cover" page="2"> |
| | | <div v-if="showPageList.indexOf(2) > -1"> |
| | | <img src="../../../assets/images/Cover.jpg" alt="" /> |
| | | </div> |
| | |
| | | :style="{ |
| | | fontSize: fontSize ? fontSize + 'px' : '16px', |
| | | transform: `scale(${pageZoom ? pageZoom : 1})`, |
| | | transformOrigin: 'center top', |
| | | transformOrigin: 'center top' |
| | | }" |
| | | > |
| | | <pageHeader |
| | |
| | | loadPageList: [], |
| | | questionDataMap: {}, |
| | | renderSignMap: {}, |
| | | highlightData: null, |
| | | highlightData: null |
| | | }; |
| | | }, |
| | | computed: { |
| | |
| | | }, |
| | | pageZoom() { |
| | | return this.$store.state.qiankun.scale / 100; |
| | | }, |
| | | } |
| | | }, |
| | | watch: { |
| | | showCatalogList: { |
| | |
| | | ) { |
| | | // 调用父层方法 |
| | | this.$store.state.qiankun.catalogChange({ |
| | | showCatalogList: newVal, |
| | | showCatalogList: newVal |
| | | }); |
| | | } |
| | | // 启动页码观察 |
| | |
| | | this.initObservation(); |
| | | this.initThemeColor(); |
| | | }, 500); |
| | | }, |
| | | } |
| | | }, |
| | | loadPageList: { |
| | | handler(newVal, oldVal) { |
| | |
| | | this.initSwiper(); |
| | | this.initViewer(); |
| | | }, 200); |
| | | }, |
| | | } |
| | | }, |
| | | pageZoom: { |
| | | handler(newVal, oldVal) { |
| | |
| | | this.container ? this.container : document |
| | | ).querySelector(".page-main"); |
| | | scrollBox.scrollTop = (scrollBox.scrollTop / oldVal) * newVal; |
| | | }, |
| | | }, |
| | | } |
| | | } |
| | | }, |
| | | mounted() { |
| | | // 默认加载章节 |
| | | this.showCatalogList = [8]; |
| | | this.showCatalogList = [1]; |
| | | // 滚动监听节流 |
| | | this.throttledScrollHandler = _.throttle( |
| | | this.scrollFun, |
| | |
| | | // 跳转检索结果位置 |
| | | jumpSearchItem: (data) => { |
| | | this.searchItemLocation(data); |
| | | }, |
| | | } |
| | | }); |
| | | } |
| | | |
| | |
| | | this.observer = new IntersectionObserver(this.pageChangeCallback, { |
| | | root: null, // 指定根元素,这里设为 null,表示选取整个视窗作为根元素。 |
| | | rootMargin: "0px", // 指定根元素的边界,这里设为 "0px",表示根元素的边界和视窗的边界重合 |
| | | threshold: 0.5, // 指定交叉比例,这里设为 0.5,表示当目标元素一半或更多显示在视窗中时触发回调函数。 |
| | | threshold: 0.5 // 指定交叉比例,这里设为 0.5,表示当目标元素一半或更多显示在视窗中时触发回调函数。 |
| | | }); |
| | | |
| | | this.loadPageObserver = new IntersectionObserver(this.loadPageCallback, { |
| | | root: null, // 指定根元素,这里设为 null,表示选取整个视窗作为根元素。 |
| | | rootMargin: "0px", // 指定根元素的边界,这里设为 "0px",表示根元素的边界和视窗的边界重合 |
| | | threshold: 0, // 指定交叉比例,这里设为 0.5,表示当目标元素一半或更多显示在视窗中时触发回调函数。 |
| | | threshold: 0 // 指定交叉比例,这里设为 0.5,表示当目标元素一半或更多显示在视窗中时触发回调函数。 |
| | | }); |
| | | |
| | | // 启动页码观察 |
| | |
| | | |
| | | // 测试页面跳转 |
| | | // setTimeout(() => { |
| | | // this.gotoPage(1, 10); |
| | | // this.gotoPage(1,10); |
| | | // setTimeout(() => { |
| | | // this.renderSign("Highlight", { |
| | | // id: "2ACA9359", |
| | |
| | | // txt: " 运动系统是由骨、骨连结和骨骼肌三部分组成的。全身的骨通过骨连结组成人体骨骼(见图1-1)。骨骼是人体的支架,具有保护内脏器官、供肌肉附着和作为肌肉运动的杠杆等作用。在神经系统的支配下,肌肉收缩牵动所附着的骨绕着关节转动,使身体产生各种动作。所以,运动系统具有运动、支持和保护等功能,幼年时期的骨骼还具有造血功能。 ", |
| | | // txtIndex: 57 |
| | | // }); |
| | | // }, 5000); |
| | | // }, 500); |
| | | }, |
| | | methods: { |
| | | // setZoom1() { |
| | |
| | | this.showCatalogList = [ |
| | | this.catalogLength - 2, |
| | | this.catalogLength - 1, |
| | | this.catalogLength, |
| | | this.catalogLength |
| | | ]; |
| | | } else { |
| | | this.showCatalogList = [catalog - 1, catalog, catalog + 1]; |
| | |
| | | this.container ? this.container : document |
| | | ).querySelector(`[page="${data.page}"]`); |
| | | // 创建 createTreeWalker 迭代器,用于遍历文本节点,保存到一个数组 |
| | | const treeWalker = document.createTreeWalker(pageDom, NodeFilter.SHOW_TEXT); |
| | | const treeWalker = document.createTreeWalker( |
| | | pageDom, |
| | | NodeFilter.SHOW_TEXT |
| | | ); |
| | | const allTextNodes = []; |
| | | let currentNode = treeWalker.nextNode(); |
| | | while (currentNode) { |
| | |
| | | this.$store.state.qiankun.pageChange({ |
| | | page: page, |
| | | catalog: catalog, |
| | | text, |
| | | text |
| | | }); |
| | | // const sections = Array.from(document.querySelectorAll(".section")); |
| | | //sections:获取所有具有 .section 类名的元素,并转换为数组。 |
| | |
| | | if (testData && testData[catalog]) { |
| | | if (testData[catalog][page]) { |
| | | if (Array.isArray(testData[catalog][page])) { |
| | | this.questionDataMap[page] = await getQuestionList( |
| | | page, |
| | | testData[catalog][page], |
| | | this.config.activeBook |
| | | ); |
| | | this.questionDataMap[page] = await getQuestionList( |
| | | page, |
| | | testData[catalog][page], |
| | | this.config.activeBook |
| | | ); |
| | | } else { |
| | | const obj = {}; |
| | | for (let key in testData[catalog][page]) { |
| | | obj[key] = await getQuestionList( |
| | | [], |
| | | testData[catalog][page][key], |
| | | this.config.activeBook |
| | | ); |
| | | obj[key] = await getQuestionList( |
| | | [], |
| | | testData[catalog][page][key], |
| | | this.config.activeBook |
| | | ); |
| | | } |
| | | this.questionDataMap[page] = obj; |
| | | } |
| | |
| | | // 高亮行 |
| | | setTimeout(() => { |
| | | // 获取页面所有text节点 |
| | | const pageTextList = document.createTreeWalker(target, NodeFilter.SHOW_TEXT); |
| | | const pageTextList = document.createTreeWalker( |
| | | target, |
| | | NodeFilter.SHOW_TEXT |
| | | ); |
| | | // 匹配关键字 |
| | | const allPageTextNodes = []; |
| | | let currentNode = pageTextList.nextNode(); |
| | |
| | | autoplay: { |
| | | //自动开始 |
| | | delay: 3000, //时间间隔 |
| | | disableOnInteraction: false, //*手动操作轮播图后不会暂停* |
| | | disableOnInteraction: false //*手动操作轮播图后不会暂停* |
| | | }, |
| | | paginationClickable: true, |
| | | slidesPerView: 1, // 一组三个 |
| | |
| | | ), |
| | | prevEl: (this.container ? this.container : document).querySelector( |
| | | ".swiper-button-prev" |
| | | ), |
| | | ) |
| | | }, |
| | | // 窗口变化,重新init,针对F11全屏和放大缩小,必须加 |
| | | observer: true, |
| | | observeParents: true, |
| | | observeParents: true |
| | | // // 如果需要分页器 |
| | | // pagination: { |
| | | // el: (this.container ? this.container : document).querySelector( |
| | |
| | | ), |
| | | prevEl: (this.container ? this.container : document).querySelector( |
| | | ".swiper-button-prev" |
| | | ), |
| | | ) |
| | | }, |
| | | // 窗口变化,重新init,针对F11全屏和放大缩小,必须加 |
| | | observer: true, |
| | |
| | | var paginationInfoEl = dom.querySelector(".pageBox"); |
| | | if (paginationInfoEl) |
| | | paginationInfoEl.textContent = currentPage + "/" + totalPages; |
| | | }, |
| | | }, |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | }, |
| | |
| | | : "body", |
| | | navbar: true, // 显示导航栏 |
| | | toolbar: true, // 显示工具栏 |
| | | title: true, // 显示标题 |
| | | title: true // 显示标题 |
| | | }); |
| | | } |
| | | }, |
| | |
| | | chapterTen, |
| | | chapterEleven, |
| | | chapterTwelve, |
| | | chapterThirteen, |
| | | chapterThirteen |
| | | }; |
| | | // 遍历所有章节文件 |
| | | for (const key in pageData) { |
| | |
| | | showPageList: [], |
| | | questionData: {}, |
| | | isSearch: true |
| | | }, |
| | | } |
| | | }); |
| | | pageExample.$mount( |
| | | (this.container ? this.container : document).querySelector( |
| | |
| | | showPageList: [pageNum], |
| | | questionData: {}, |
| | | isSearch: true |
| | | }, |
| | | } |
| | | }); |
| | | pageExample.$mount( |
| | | (this.container ? this.container : document).querySelector( |
| | |
| | | .querySelector(`[page="${pageNum}"]`); |
| | | if (thisPageDom) { |
| | | // 获取页面所有text节点 |
| | | const pageTextList = document.createTreeWalker(thisPageDom, NodeFilter.SHOW_TEXT); |
| | | const pageTextList = document.createTreeWalker( |
| | | thisPageDom, |
| | | NodeFilter.SHOW_TEXT |
| | | ); |
| | | // 匹配关键字 |
| | | const allPageTextNodes = []; |
| | | let currentNode = pageTextList.nextNode(); |
| | |
| | | page: pageNum, |
| | | catalog: catalogIndex, |
| | | txt: textDom.textContent, |
| | | txtIndex: txtIndex, |
| | | txtIndex: txtIndex |
| | | }); |
| | | } |
| | | } |
| | |
| | | this.highlightData = data; |
| | | // 跳转 |
| | | this.gotoPage(data.catalog, data.page, () => {}); |
| | | }, |
| | | } |
| | | }, |
| | | components: { |
| | | pageHeader, |
| | |
| | | chapterTen, |
| | | chapterEleven, |
| | | chapterTwelve, |
| | | chapterThirteen, |
| | | }, |
| | | chapterThirteen |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | |
| | | const { defineConfig } = require("@vue/cli-service"); |
| | | const webpack = require("webpack"); |
| | | // 获取所有书籍列表 |
| | | const bookList = process.env.VUE_APP_BOOK_LIST ? process.env.VUE_APP_BOOK_LIST.split("/") : []; |
| | | module.exports = defineConfig({ |
| | | publicPath: process.env.PUBLIC_PATH, |
| | | publicPath: process.env.VUE_APP_PUBLIC_PATH, |
| | | transpileDependencies: true, |
| | | lintOnSave: false, |
| | | // devServer: { |
| | |
| | | library: `app-content`, |
| | | libraryTarget: "umd", |
| | | chunkLoadingGlobal: `webpackJsonp_app-content` |
| | | } |
| | | }, |
| | | plugins: [ |
| | | new webpack.IgnorePlugin({ |
| | | checkResource(resource) { |
| | | if (process.env.VUE_APP_ENV == "product") { |
| | | // 编译和打包过滤 |
| | | for (let i = 0; i < bookList.length; i++) { |
| | | const bookName = bookList[i]; |
| | | if (bookName != process.env.VUE_APP_BOOK_ID) { |
| | | // 过滤不需要的模块 |
| | | if (resource.indexOf(bookName) > -1) { |
| | | return true; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | }) |
| | | ] |
| | | }, |
| | | chainWebpack: (config) => { |
| | | config.module |