From 1d5d7f10cd90e7b1212a58234ef271584f0035c9 Mon Sep 17 00:00:00 2001 From: YM <479443481@qq.com> Date: 星期三, 15 五月 2024 23:35:58 +0800 Subject: [PATCH] Merge branch 'master' of http://182.92.203.7:2001/r/TextbookReader --- src/views/home.vue | 249 +++++++++++++++++++++++++++++-------------------- 1 files changed, 148 insertions(+), 101 deletions(-) diff --git a/src/views/home.vue b/src/views/home.vue index c4febfb..6ca5fd0 100644 --- a/src/views/home.vue +++ b/src/views/home.vue @@ -92,9 +92,14 @@ <div class="menuContent" v-if="menuState.open"> <div class="searchBox"> <div class="inputBox" v-if="activeMenu !== 2"> - <el-input class="custom-input" placeholder="璇疯緭鍏ュ唴瀹�" v-model="searchText"> + <el-input + class="custom-input" + placeholder="璇疯緭鍏ュ唴瀹�" + v-model="searchText" + @keyup.enter="searchBook" + > <template #prefix> - <el-icon @click="searchBook"><Search /></el-icon> + <el-icon><Search /></el-icon> </template> </el-input> </div> @@ -113,13 +118,22 @@ <!-- 鐩綍 --> <div class="menuList" v-if="activeMenu == 0"> <el-tree + ref="catalogTree" style="max-width: 600px" default-expand-all="true" :data="catalogueData" :props="defaultProps" v-if="catalogueData.length > 0" @node-click="handleNodeClick" - /> + :filter-node-method="filterNode" + > + <template #default="{ node, data }"> + <div class="custom-tree-node"> + <div class="catalogueLabel">{{ node.label }}</div> + <span class="pageNum">{{ data.page }}</span> + </div> + </template> + </el-tree> <div v-if="catalogueData.length == 0"> <el-empty :image-size="60" description="鏆傛棤鏁版嵁" /> </div> @@ -144,7 +158,7 @@ </div> </div> <div class="list-box"> - <div v-if="scribeData.noteList.length > 0 && !scribeData.loading"> + <div v-if="scribeData.noteList.length > 0"> <div v-for="(item, index) in scribeData.noteList" :key="item.key" class="listItem"> <div class="textBox"> <div class="title"> @@ -153,8 +167,8 @@ <span>{{ item.createDate }}</span> </div> <div> - <img :src="bianji" @click="update(item, 'note')" /> - <img :src="shanchu" @click="deleteBtn(item, 'note')" /> + <img :src="bianji" @click="update(item)" /> + <img :src="shanchu" @click="deleteBtn(item)" /> </div> </div> <div @@ -179,11 +193,11 @@ {{ item.note }} </div> </div> - <div class="chapter">{{ item.selectText }}</div> + <div class="chapter">{{ item.txt }}</div> </div> </div> </div> - <div v-if="scribeData.noteList.length == 0 && !scribeData.loading"> + <div v-if="scribeData.noteList.length == 0"> <el-empty :image-size="60" description="鏆傛棤鏁版嵁" /> </div> </div> @@ -708,7 +722,7 @@ v-show="lineDelete.showLineDelete" :style="{ top: `${lineDelete.top}px`, left: `${lineDelete.left}px` }" > - <el-button @click="lineDeleteBtn">鍒犻櫎</el-button> + <el-button @click="delUserKey">鍒犻櫎</el-button> </div> <el-dialog title="璧勬簮" align-center v-model="resourVisble" width="845" class="resourDialog"> @@ -779,13 +793,15 @@ <template #footer> <span class="dialog-footer"> <el-button @click="screenshotClose">鍙� 娑�</el-button> - <el-button type="primary" @click="addScreenshot" :loading="screenshotLoading">纭� 瀹�</el-button> + <el-button type="primary" @click="addScreenshot" :loading="screenshotLoading" + >纭� 瀹�</el-button + > </span> </template> </el-dialog> <el-dialog title="鐧惧害鐧剧" align-center v-model="baiduVisible" width="60%" class="myDialogs"> <div class="wendabox"> - <iframe :src="'https://baike.baidu.com/item/' + selectText" frameborder="0"></iframe> + <iframe :src="'https://baike.baidu.com/item/' + dialogToolData.txt" frameborder="0"></iframe> </div> </el-dialog> <el-dialog title="AI鏅鸿兘闂瓟" align-center v-model="wendaVisible" width="26%" class="myDialogs"> @@ -796,7 +812,7 @@ <el-dialog title="璇嶅吀" align-center v-model="cidianVisible" width="60%" class="myDialogs"> <div class="wendabox"> <!-- <iframe src="https://www.vocabulary.com/" frameborder="0"></iframe> --> - <dictionary :searchCon="selectText" /> + <dictionary :searchCon="dialogToolData.txt" /> </div> </el-dialog> <el-dialog @@ -983,7 +999,12 @@ windowSelection: (data) => { // 缁戝畾瀛愬簲鐢ㄩ�夋嫨鐩戝惉浜嬩欢 console.log(data, '瀛愬簲鐢ㄩ�夋嫨') - getSelection(data) + if (data.txt) { + getSelection(data) + } else { + showToolBox.value = false + toolActive = '' + } }, catalogChange: (data) => { activeCatalog.value = data.showCatalogList @@ -1000,7 +1021,6 @@ console.log(data, '椤甸潰鍒囨崲锛氱洰鍓嶆樉绀洪〉闈㈠拰瀵瑰簲鐨勭珷鑺備俊鎭�') } }) - // 璋冪敤瀛愬眰鏂规硶 // if (window.qiankunState && window.qiankunState.aa) window.qiankunState.aa(1) }) @@ -1021,18 +1041,19 @@ // getNotesList() // 鑾峰彇绗旇 // getlineHeightList() //鑾峰彇楂樹寒 // getScribeList() //鑾峰彇鍒掔嚎 - // getScreenshotList() //鎴浘 + getScreenshotList() //鎴浘 } ) //鑾峰彇鐩綍 const catalogueData = ref([]) const getCatalogueData = () => { axios - .get(ctxUrl + '/catalog.json') + .get(resourceUrl + '/1/information.json?t=123') .then(function (response) { + console.log(response.data) var json = response.data // 澶勭悊鑾峰彇鍒扮殑json鏁版嵁 - catalogueData.value = json + catalogueData.value = json.data }) .catch(function (error) { console.log(error) @@ -1040,10 +1061,18 @@ } const defaultProps = { children: 'children', - label: 'label' + label: 'label', + page: 'page', } +const filterNode = (value, data) => { + if (!value) return true + return data.label.indexOf(value) !== -1 +} + const handleNodeClick = (data) => { - document.getElementById(data.id).scrollIntoView() + console.log(data) + if (window.qiankunState && window.qiankunState.gotoPage) + window.qiankunState.gotoPage(data.chapter, data.start) } //鑾峰彇璧勬簮 @@ -1084,7 +1113,7 @@ const testWord = ref('') //word閾炬帴 const getResourceData = () => { axios - .get(ctxUrl + '/resource.json') + .get(resourceUrl + '/1/resource.json') .then(function (response) { var json = response.data // 澶勭悊鑾峰彇鍒扮殑json鏁版嵁 @@ -1188,7 +1217,7 @@ case '0': break case '1': - getNotesList() + // getSignData() break case '2': break @@ -1278,11 +1307,16 @@ } else { menuState.notesColor = 'all' } - getNotesList() + // getNotesList() } +const catalogTree = ref() const searchBook = async () => { + if (activeMenu.value == 0) { + if (catalogTree) catalogTree.value.filter(searchText.value) + } if (activeMenu.value == 1) { - getNotesList() + // getNotesList() + getSignData() } if (activeMenu.value == 2) { let dataList = JSON.parse(JSON.stringify(resourceDataList.value)) @@ -1591,10 +1625,7 @@ const labelShow = (str) => {} //鏍囩 -const reMark =() => { - - -} +const reMark = () => {} //鎴浘 //鎴浘浜嬩欢 function jitT() { @@ -1636,16 +1667,18 @@ } ] } - }).then((res) => { - screenshotLoading.value = false - getScreenshotList() - nameData.value = '' - urlData.value = '' - floatingToolData.activeToolData = '' - screenshotVisble.value = false - }).catch(function (error) { - screenshotLoading.value = false }) + .then((res) => { + screenshotLoading.value = false + getScreenshotList() + nameData.value = '' + urlData.value = '' + floatingToolData.activeToolData = '' + screenshotVisble.value = false + }) + .catch(function (error) { + screenshotLoading.value = false + }) } else { ElMessage.error('鎴浘鍚嶇О涓嶈兘涓虹┖!') } @@ -1735,7 +1768,7 @@ { icon: fuzhi, activeIcon: fuzhi1, name: '澶嶅埗' }, { icon: AIyuedu, activeIcon: AIyuedu1, name: 'AI闃呰' }, { icon: cidian2, activeIcon: cidian1, name: '璇嶅吀' }, - { icon: baidu, activeIcon: cidian1, name: '鐧剧' } + { icon: baidu, activeIcon: baidu, name: '鐧剧' } // { icon: yuyinyuedu, activeIcon: yuyinyuedu1, name: '璇煶闃呰' } // { icon: cidian2, activeIcon: cidian1, name: '缈昏瘧' } ]) @@ -1884,6 +1917,7 @@ cidianVisible.value = true break case '鐧剧': + console.log('https://baike.baidu.com/item/' + dialogToolData.txt) baiduVisible.value = true break } @@ -1905,6 +1939,7 @@ case '楂樹寒': dom = 'highLightData-' + bookId.value data = dialogToolData.lineHeight[dialogToolData.chapter] + if (!data) data = [] data.push({ id: toolClass.uuid(8), txt: dialogToolData.txt, @@ -1916,6 +1951,7 @@ case '鍒掔嚎': dom = 'underline-' + bookId.value data = dialogToolData.scribeList[dialogToolData.chapter] + if (!data) data = [] data.push({ id: toolClass.uuid(8), txt: dialogToolData.txt, @@ -1927,14 +1963,16 @@ case '绗旇': if (!formData.desc.replace(/^\s*|\s*$/g, '')) { ElMessage.error('绗旇鍐呭涓嶈兘涓虹┖!') - return + return } if (!noteColorActive.value) { ElMessage.error('璇烽�夋嫨绗旇棰滆壊!') return } dom = 'notes-' + bookId.value - data = dialogToolData.notesList.length != 0 ? dialogToolData.notesList[dialogToolData.chapter] : [] + data = + dialogToolData.notesList.length != 0 ? dialogToolData.notesList[dialogToolData.chapter] : [] + if (!data) data = [] data.push({ id: toolClass.uuid(8), txt: dialogToolData.txt, @@ -1944,7 +1982,7 @@ createDate: new Date(), note: formData.desc.replace(/^\s*|\s*$/g, '') }) - + break } request({ @@ -1961,38 +1999,12 @@ } }).then((res) => { showToolBox.value = false + addNoteVisble.value = false colorActive.value = '' noteColorActive.value = '' toolActive.value = '' getSignData() }) -} - -const delUserKey = (type, ids) => { - switch (type) { - case 'Highlight': - dom = 'highLightData-' + bookId.value - data = dialogToolData.lineHeight - break - case 'Dashing': - dom = 'underline-' + bookId.value - data = dialogToolData.scribeList - break - } - data = data.filter((item) => ids.indexOf(item.id) == -1) - request({ - url: '/identity/api/ApiAppUserSetKey', - method: 'post', - data: { - setKeyRequests: [ - { - domain: dom, - key: '', - value: JSON.stringify(data) - } - ] - } - }).then((res) => {}) } const getSignData = () => { @@ -2046,7 +2058,7 @@ url: '/identity/api/ApiGetAppUserKey', method: 'post', data: { - domain: 'note-' + bookId.value, + domain: 'notes-' + bookId.value, keys: activeCatalog.value.map((item) => item + '') } }).then((res) => { @@ -2055,7 +2067,9 @@ const item = res[i] const data = JSON.parse(item.value) // 鍌ㄥ�� + scribeData.noteList = data dialogToolData.notesList[item.key] = data + console.log(dialogToolData.notesList, 'notesList') // 娓叉煋 for (let j = 0; j < data.length; j++) { const citem = data[j] @@ -2073,12 +2087,31 @@ top: 0, left: 0, deleteType: '', - deleteTxt: '' + id: '' }) + +// 鍒掔嚎銆佺瑪璁般�侀珮浜偣鍑诲洖璋� +window.signClick = (type, id) => { + console.log('signClick鐐瑰嚮浜嬩欢鍥炶皟鐨勫疄渚�', type, id) + // if (window.qiankunState && window.qiankunState.delSign) window.qiankunState.delSign({ids:[id]}) + if (type == 'Note') { + let data = dialogToolData.notesList.filter((item) => id.indexOf(item.id) == -1) + console.log(data) + formData.desc = notes.note + noteColorActive.value = notes.color + addNoteVisble.value = true + } else { + lineDelete.showLineDelete = true + lineDelete.deleteType = type + lineDelete.id = id + lineDelete.top = 500 + lineDelete.left = 500 + } +} window.notesVisbleShow = function (txt) { addNoteVisble.value = true - let notes = dialogToolData.notesList.find((item) => item.selectText == txt) + let notes = dialogToolData.notesList.find((item) => item.id == id) formData.desc = notes.note colorActive.value = notes.color selectNode.value = notes.selectNode @@ -2086,23 +2119,42 @@ selectPage.value = notes.selectPage dialogToolData.chapter = notes.chapter } - -window.deleteScribeShow = function (txt) { - let lines = scribeData.scribeDataList.find((item) => item.selectText == txt) - lineDelete.deleteType = 'underline' - lineDelete.deleteTxt = txt - lineDelete.top = event.screenY - lineDelete.left = event.screenX - lineDelete.showLineDelete = true -} - -window.deletelineHeightShow = function (txt) { - let lines = scribeData.lineHeightList.find((item) => item.selectText == txt) - lineDelete.deleteType = 'highLight' - lineDelete.deleteTxt = txt - lineDelete.top = event.screenY - lineDelete.left = event.screenX - lineDelete.showLineDelete = true +const delUserKey = () => { + let type = lineDelete.deleteType + let ids = lineDelete.id + let dom = '' + let data = null + switch (type) { + case 'Highlight': + dom = 'highLightData-' + bookId.value + data = dialogToolData.lineHeight + break + case 'Dashing': + dom = 'underline-' + bookId.value + data = dialogToolData.scribeList + break + } + data = data.filter((item) => ids.indexOf(item.id) == -1) + console.log(data[0]) + let list = data[0].filter((item) => item.id != ids) + console.log(list) + request({ + url: '/identity/api/ApiAppUserSetKey', + method: 'post', + data: { + setKeyRequests: [ + { + domain: dom, + key: dialogToolData.chapter, + value: JSON.stringify(list) + } + ] + } + }).then((res) => { + if (window.qiankunState && window.qiankunState.delSign) + window.qiankunState.delSign({ ids: [ids] }) + getSignData() + }) } const lineDeleteBtn = () => { @@ -2183,10 +2235,10 @@ } //鍒犻櫎 -const deleteBtn = (item, type) => { +const deleteBtn = (item) => { if (type == 'note') { // 绉婚櫎 - let list = scribeData.noteList.filter((itemData) => itemData.selectText !== item.selectText) + let list = dialogToolData.noteList.filter((itemData) => itemData.id !== item.id) request({ url: '/identity/api/ApiAppUserSetKey', method: 'post', @@ -2204,20 +2256,12 @@ message: '鍒犻櫎绗旇鎴愬姛!', type: 'success' }) - console.log(document.querySelectorAll('.notesline')) - let list = document.querySelectorAll('.notesline') - list.forEach((itemNode) => { - if (itemNode.innerText == item.selectText) { - console.log(itemNode.nextSibling) - itemNode.removeAttribute('style') - itemNode.nextSibling?.remove() - } - }) + if (window.qiankunState && window.qiankunState.delSign) + window.qiankunState.delSign({ ids: [id] }) getNotesList() }) } } - //鍐呭鍖哄煙椤堕儴鏄剧ず @@ -2377,7 +2421,7 @@ align-items: center; } .resourceBox { - padding: 15px 0; + padding: 10px 0; margin: 0 20px; border-bottom: 1px solid rgba(204, 204, 204, 0.32); .classification { @@ -2394,7 +2438,8 @@ } .count { width: 35px; - margin: 5px auto; + margin: 0 auto; + margin-top:5px; border-radius: 10px; background: #fff; color: #c8c8c8; @@ -2424,6 +2469,7 @@ } .inputBox { margin-top: 10px; + width:100% !important; } } .resourceTab { @@ -2457,6 +2503,7 @@ } } .inputBox { + width:85%; .custom-input { border: 1px solid #0093ff !important; border-radius: 50px; -- Gitblit v1.9.1