From f22883b1db1d7f5c2593e47a709a2fbc857a9186 Mon Sep 17 00:00:00 2001 From: litian <2804272236@qq.com> Date: 星期三, 08 五月 2024 17:21:53 +0800 Subject: [PATCH] yueduqi --- src/assets/main.css | 111 +++- src/assets/images/operation/search.png | 0 src/assets/images/operation/delete.png | 0 src/assets/images/operation/bianji.png | 0 src/main.ts | 1 src/store/index.ts | 2 src/assets/base.css | 23 src/assets/images/content/resource.png | 0 src/assets/images/operation/search1.png | 0 src/assets/images/operation/video.png | 0 package.json | 5 src/child.ts | 32 + src/views/home.vue | 1060 +++++++++++++++++++++++++++++++++++++------------ 13 files changed, 899 insertions(+), 335 deletions(-) diff --git a/package.json b/package.json index eed6169..7e42234 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ }, "dependencies": { "@element-plus/icons-vue": "^2.3.1", + "@vue-office/docx": "^1.6.1", "axios": "^1.6.2", "cross-env": "^7.0.3", "electron-connect": "^0.6.3", @@ -25,17 +26,21 @@ "electron-store": "^8.1.0", "electron-updater": "^6.1.7", "element-plus": "^2.4.3", + "fabric": "^5.3.0", + "js-web-screen-shot": "^1.9.9-rc.18", "less": "^4.2.0", "less-loader": "^11.1.3", "moment": "^2.30.1", "node-xlsx": "^0.23.0", "pinia": "^2.1.7", "qiankun": "^2.10.16", + "spark-md5": "^3.0.2", "style-resources-loader": "^1.5.0", "vite-plugin-electron": "^0.15.5", "vue": "^3.3.10", "vue-cli-plugin-style-resources-loader": "^0.1.5", "vue-clipboard3": "^2.0.0", + "vue-demi": "^0.14.7", "vue-router": "^4.2.5" }, "devDependencies": { diff --git a/src/assets/base.css b/src/assets/base.css index e158a07..116f1de 100644 --- a/src/assets/base.css +++ b/src/assets/base.css @@ -72,19 +72,8 @@ transition: color 0.5s, background-color 0.5s; - font-family: - Inter, - -apple-system, - BlinkMacSystemFont, - 'Segoe UI', - Roboto, - Oxygen, - Ubuntu, - Cantarell, - 'Fira Sans', - 'Droid Sans', - 'Helvetica Neue', - sans-serif; + + font-family:PingFang SC, PingFang SC; font-size: 14px; text-rendering: optimizeLegibility; -webkit-font-smoothing: antialiased; @@ -92,23 +81,23 @@ } ::-webkit-scrollbar { - width: 10px; + width: 8px; height: 10px; } ::-webkit-scrollbar-track-piece { - background-color: rgba(0, 0, 0, 0.2); + background-color: rgba(0, 0, 0, 0.1); -webkit-border-radius: 6px; } ::-webkit-scrollbar-thumb:vertical { height: 5px; - background-color: rgba(125, 125, 125, 0.7); + background-color: rgba(125, 125, 125, 0.3); -webkit-border-radius: 6px; } ::-webkit-scrollbar-thumb:horizontal { width: 5px; - background-color: rgba(125, 125, 125, 0.7); + background-color: rgba(125, 125, 125, 0.3); -webkit-border-radius: 6px; } diff --git a/src/assets/images/content/resource.png b/src/assets/images/content/resource.png new file mode 100644 index 0000000..74cd0e3 --- /dev/null +++ b/src/assets/images/content/resource.png Binary files differ diff --git a/src/assets/images/operation/bianji.png b/src/assets/images/operation/bianji.png new file mode 100644 index 0000000..f996a34 --- /dev/null +++ b/src/assets/images/operation/bianji.png Binary files differ diff --git a/src/assets/images/operation/delete.png b/src/assets/images/operation/delete.png new file mode 100644 index 0000000..316b24b --- /dev/null +++ b/src/assets/images/operation/delete.png Binary files differ diff --git a/src/assets/images/operation/search.png b/src/assets/images/operation/search.png new file mode 100644 index 0000000..9937d19 --- /dev/null +++ b/src/assets/images/operation/search.png Binary files differ diff --git a/src/assets/images/operation/search1.png b/src/assets/images/operation/search1.png new file mode 100644 index 0000000..1f3e4d2 --- /dev/null +++ b/src/assets/images/operation/search1.png Binary files differ diff --git a/src/assets/images/operation/video.png b/src/assets/images/operation/video.png new file mode 100644 index 0000000..e386840 --- /dev/null +++ b/src/assets/images/operation/video.png Binary files differ diff --git a/src/assets/main.css b/src/assets/main.css index ff65f44..bd81458 100644 --- a/src/assets/main.css +++ b/src/assets/main.css @@ -27,91 +27,107 @@ } ul { list-style: none; - padding:0; + padding: 0; } a { text-decoration: none; cursor: pointer; } -.hover{ +.hover { cursor: pointer; } /* 鐢荤瑪宸ュ叿 */ -.popinnerBox .brush,.popinnerBox .write{ +.popinnerBox .brush { display: flex; padding: 10px 0; } -.popinnerBox .thickness { +.popinnerBox .thickness { border-right: 1px solid #f3f3f3; width: 40px; - padding-right:10px; + padding-right: 10px; text-align: center; - } .popinnerBox .thickness .small { width: 7px; height: 7px; border-radius: 50%; background: #cccccc; - margin:0 auto; + margin: 0 auto; } .popinnerBox .thickness .middle { width: 10px; height: 10px; border-radius: 50%; background: #cccccc; - margin:0 auto; - margin-top:15px; + margin: 0 auto; + margin-top: 15px; } .popinnerBox .thickness .large { width: 13px; height: 13px; border-radius: 50%; background: #cccccc; - margin:0 auto; - margin-top:15px; + margin: 0 auto; + margin-top: 15px; } .popinnerBox .thickness .active { background: #0093ff; } -.popinnerBox .lineStyle .lineTypeBox{ +.popinnerBox .characters { + width: 190px; + display: flex; + padding-right: 10px; + justify-content: space-between; +} +.popinnerBox .characters .small { + text-align: center; + flex: 1; +} +.popinnerBox .characters .middle { + text-align: center; + flex: 1; +} +.popinnerBox .characters .large { + text-align: center; + flex: 1; +} +.popinnerBox .lineStyle .lineTypeBox { display: flex; justify-content: space-between; - padding:0 10px; + padding: 0 10px; } -.popinnerBox .lineStyle .lineTypeBox .typeItem{ - flex:1; - padding:5px 20px; +.popinnerBox .lineStyle .lineTypeBox .typeItem { + flex: 1; + padding: 5px 20px; border-radius: 5px; - border: 1px solid #D9D9D9; - margin:0 5px; + border: 1px solid #d9d9d9; + margin: 0 5px; position: relative; } -.popinnerBox .lineStyle .lineTypeBox .typeItem .solid{ +.popinnerBox .lineStyle .lineTypeBox .typeItem .solid { border: 1px solid #707070; margin: 7px auto; } -.popinnerBox .lineStyle .lineTypeBox .typeItem .dashed{ +.popinnerBox .lineStyle .lineTypeBox .typeItem .dashed { border: 1px dashed #707070; margin: 7px auto; } .popinnerBox .lineStyle .lineTypeBox .lineTypeActive { border: 1px solid #0093ff; } -.popinnerBox .lineStyle .lineTypeBox .lineTypeActive .activeIcon{ - width:12px; - height:11px; - background:#0093ff; +.popinnerBox .lineStyle .lineTypeBox .lineTypeActive .activeIcon { + width: 12px; + height: 11px; + background: #0093ff; border-radius: 5px 0 5px 0; position: absolute; - right:0; + right: 0; bottom: 0; display: flex; - justify-content:center; + justify-content: center; align-items: center; } - .popinnerBox .colorSelectBox { padding: 0 10px; @@ -122,7 +138,6 @@ } .popinnerBox .colorSelectBox .flex1 { flex: 1; - } .popinnerBox .colorSelectBox .scribeItem { width: 18px; @@ -135,19 +150,43 @@ align-items: center; } -.popinnerBox .cleanup,.popinnerBox .label{ +.popinnerBox .cleanup, +.popinnerBox .label { display: flex; justify-content: space-between; - padding:10px 0 + padding: 10px 0; } -.popinnerBox .cleanup .cleanupItem,.popinnerBox .label .labelItem{ - flex:1; +.popinnerBox .cleanup .cleanupItem, +.popinnerBox .label .labelItem { + flex: 1; text-align: center; } - -.el-input__inner{ - border:none !important; +.popinnerBox .cleanup .cleanupItem img{ + height:17px; + width:20px; } -.el-button{ + +.el-input__inner { + border: none !important; +} +.el-button { padding: 8px 15px !important; } + +.el-popper.is-light { + border: 1px solid #0093ff !important; +} +.el-popper.is-light .el-popper__arrow:before { + border: 1px solid #0093ff !important; +} + +.el-tree { + background: none !important; +} +.el-tree-node:focus > .el-tree-node__content, +.el-tree-node__content:hover { + background: rgba(0, 147, 255, 0.21) !important; +} +.el-tree-node__content { + height: 30px !important; +} diff --git a/src/child.ts b/src/child.ts index dd90977..b14b393 100644 --- a/src/child.ts +++ b/src/child.ts @@ -1,4 +1,20 @@ -import { registerMicroApps, setDefaultMountApp, start ,initGlobalState } from 'qiankun' +import { registerMicroApps, start } from 'qiankun' +import { initGlobalState } from 'qiankun' +const initalState = { + selectText: '', + lineHeight: [], + scribeList: [], + notesList: [] +} +const actions = initGlobalState(initalState) + +actions.onGlobalStateChange((initalState, prev) => { + console.log(initalState, prev) +}) +// setTimeout(()=>{ +// actions.setGlobalState({...initalState}) +// },2000) +actions.offGlobalStateChange() const microApps = [ { // - 蹇呴�夛紝寰簲鐢ㄧ殑鍚嶇О锛屽井搴旂敤涔嬮棿蹇呴』纭繚鍞竴 @@ -11,14 +27,13 @@ // - 蹇呴�夛紝寰簲鐢ㄧ殑婵�娲昏鍒� //鏀寔鐩存帴閰嶇疆瀛楃涓叉垨瀛楃涓叉暟缁勶紝濡� activeRule: '/app1' 鎴� activeRule: ['/app1', '/app2']锛屽綋閰嶇疆涓哄瓧绗︿覆鏃朵細鐩存帴璺� url 涓殑璺緞閮ㄥ垎鍋氬墠缂�鍖归厤锛屽尮閰嶆垚鍔熻〃鏄庡綋鍓嶅簲鐢ㄤ細琚縺娲汇�� //鏀寔閰嶇疆涓�涓� active function 鍑芥暟鎴栦竴缁� active function銆傚嚱鏁颁細浼犲叆褰撳墠 location 浣滀负鍙傛暟锛屽嚱鏁拌繑鍥� true 鏃惰〃鏄庡綋鍓嶅井搴旂敤浼氳婵�娲汇�傚 location => location.pathname.startsWith('/app1')銆� - activeRule: '/home',//鍖归厤鎵�鏈変互/subPath寮�澶寸殑涓哄瓙搴旂敤 + activeRule: '/home', //鍖归厤鎵�鏈変互/subPath寮�澶寸殑涓哄瓙搴旂敤 //loader - (loading: boolean) => void - 鍙�夛紝loading 鐘舵�佸彂鐢熷彉鍖栨椂浼氳皟鐢ㄧ殑鏂规硶銆� //鍙�夛紝涓诲簲鐢ㄩ渶瑕佷紶閫掔粰寰簲鐢ㄧ殑鏁版嵁銆� - // props: { - // _parent_base: '/app-content/', - // msg:'杩欐槸涓诲簲鐢ㄤ紶缁欏瓙搴旂敤鐨勬秷鎭�' - // }, - sandbox:{strictStyleIsolation: true} + props: { + actions + }, + sandbox: { strictStyleIsolation: true } } ] // 涔惧潳鎻愪緵鐨勫瓙搴旂敤鐢熷懡鍛ㄦ湡閽╁瓙 鍙敤浜庡姞杞絣oading @@ -47,5 +62,6 @@ // setDefaultMountApp('/home') //鍚姩qiankun | 涓嶅彲閲嶅鍚姩 | 濡傛灉瀛愬簲鐢ㄥ叆鍙e湪app.vue閲屽彲浠ュ湪杩欏惎鍔ㄥ惁鍒欎細鎶ラ敊鎵句笉鍒板瓙搴旂敤缁撶偣 start({ - prefetch: false, + prefetch: false }) +export default actions; diff --git a/src/main.ts b/src/main.ts index 1c4f4c5..1f982dc 100644 --- a/src/main.ts +++ b/src/main.ts @@ -11,7 +11,6 @@ import request from "@/plugin/axios/index.ts" import "./child.ts" - const handleGetToken = () => { return localStorage.getItem("token"); } diff --git a/src/store/index.ts b/src/store/index.ts index 0e191d8..ac412ba 100644 --- a/src/store/index.ts +++ b/src/store/index.ts @@ -5,4 +5,4 @@ export default pinia -export * from './downloadTask' +export * from './downloadTask' \ No newline at end of file diff --git a/src/views/home.vue b/src/views/home.vue index 7f172d6..8cf9ffe 100644 --- a/src/views/home.vue +++ b/src/views/home.vue @@ -1,7 +1,12 @@ <template> <div class="homeBox"> <div class="headerBox"> - <p>鏁板瓧鏁欐潗骞冲彴</p> + <div><p>鏁板瓧鏁欐潗骞冲彴</p></div> + <div class="userInfoBox"> + <div></div> + <div></div> + <div><div class="layout">閫�鍑�</div></div> + </div> </div> <div class="contentBox"> <!-- 鑿滃崟 --> @@ -15,7 +20,7 @@ <div class="menuIcon imgBox"> <img :src="item.icon" /> </div> - <p>{{ item.name }}</p> + <div class="name">{{ item.name }}</div> </div> <div class="reload hover" @click="reload()">鍒锋柊</div> <!-- 璁剧疆 --> @@ -50,19 +55,25 @@ </div> <div v-else class="resourceTab"> <div class="tabItem hover" @click="selectResourceType('default')"> - <p>榛樿璧勬簮</p> + <div>榛樿璧勬簮</div> <div :class="resourceType == 'default' ? 'text' : 'line'"></div> </div> <hr class="hr" /> <div class="tabItem hover" @click="selectResourceType('teacher')"> - <p>鏁欏笀璧勬簮</p> + <div>鏁欏笀璧勬簮</div> <div :class="resourceType == 'teacher' ? 'text' : 'line'"></div> </div> </div> </div> <!-- 鐩綍 --> <div class="menuList" v-if="activeMenu == 0"> - <front006 /> + <el-tree + style="max-width: 600px" + default-expand-all="true" + :data="catalogueData" + :props="defaultProps" + @node-click="handleNodeClick" + /> </div> <!-- 绗旇 --> <div class="notesBox" v-if="activeMenu == 1"> @@ -83,38 +94,32 @@ ></div> </div> </div> - <div class="list-box"> + <div class="list-box" v-loading="scribeData.loading"> <div v-if="scribeData.noteList.length > 0 && !scribeData.loading"> - <div - v-for="(item, index) in scribeData.noteList" - :key="item.key" - class="listItem hover" - @mouseenter="showDeleteBox(item, 'note')" - @mouseleave="handleDeleteBox(item, 'note')" - > + <div v-for="(item, index) in scribeData.noteList" :key="item.key" class="listItem"> <div class="itemBox noteStyle"> - <!-- <div class="flex ai-c jc-sb"> - <span class="createDate">{{ item.createDate }}</span> - </div> --> <div class="textBox"> - <div class="chapter"> - <span>{{ item.name }}</span - ><span class="chapterName">{{ item.chapter }}</span> + <div class="title"> + <div class="title-con"> + <div class="round" :style="{ background: item.color }"></div> + <span>{{ item.name }}</span> + </div> + <div> + <el-icon size="18" color="#0093ff" @click="jumpContent('note' + index)" + ><LocationInformation + /></el-icon> + <img :src="bianji" @click="update(item, 'note')" /> + <img :src="shanchu" @click="deleteBtn(item, 'note')" /> + </div> </div> - <!-- <div class="textConNote flex"> - <div class="border"></div> - <div class="text">{{ item.selectText }}</div> - </div> --> - <div class="noteText flex"> - <!-- <div class="label">绗旇:</div> --> + <div class="noteText"> <div class="con">{{ item.note }}</div> </div> + <div class="chapter"> + <span class="createDate">{{ item.createDate }}</span> + <span class="chapterName">{{ item.chapter }}</span> + </div> </div> - </div> - <div class="deleteBox" v-show="item.deleteBox" @click="deleteBtn(item, 'note')"> - <span - ><el-icon> <Delete /> </el-icon><span>鍒犻櫎</span></span - > </div> </div> </div> @@ -126,7 +131,29 @@ <!-- 璧勬簮 --> <div class="" v-if="activeMenu == 2"> <div class="resourceBox"> - <div class="inputBox"> + <div class="classification"> + <div + v-for="item in classifySelectList" + :key="item.key" + class="flex1 hover" + @click="classifyClick(item)" + > + <div + :class=" + item.key == activeClassify ? 'activeClassify classifyItem' : 'classifyItem' + " + > + <div class="title">{{ item.title }}</div> + <div class="count">{{ item.count }}</div> + </div> + </div> + <div class="showSearch flex1 hover"> + <div :class="searchShow ? 'imgBox' : 'imgBox activeSearch'" @click="searchBtn"> + <img :src="searchShow ? search : search1" /> + </div> + </div> + </div> + <div class="inputBox" v-if="!searchShow"> <el-input class="custom-input" placeholder="璇疯緭鍏ュ唴瀹�" v-model="searchText"> <template #prefix> <el-icon @click="searchBook"><Search /></el-icon> @@ -135,7 +162,19 @@ </div> </div> <div class="list-box"> - <div> + <div v-if="resourceData.length > 0" class="resourceList"> + <el-row :gutter="20"> + <el-col :span="12" v-for="(item, index) in resourceData" :key="item"> + <div class="resourceItem hover"> + <div class="resourceImg"> + <img :src="video" mode="" /> + </div> + <div class="rName" @click="goResourceDetail(item)">{{ item.name }}</div> + </div> + </el-col> + </el-row> + </div> + <div v-else> <el-empty :image-size="60" description="鏆傛棤鏁版嵁" /> </div> </div> @@ -151,7 +190,17 @@ <!-- 鎴浘 --> <div class="" v-if="activeMenu == 4"> <div class="list-box"> - <div> + <div class="screenshot" v-if="screenshotList.length > 0"> + <div + v-for="(item, index) in screenshotList" + :key="item" + class="captureItem" + @click="getCapture(item)" + > + <img :src="item.imgUrl" class="capture" mode="aspectFill" /> + </div> + </div> + <div v-else> <el-empty :image-size="60" description="鏆傛棤鏁版嵁" /> </div> </div> @@ -177,7 +226,10 @@ <div class="qureIcon"></div> <div class="">宸蹭笂璇撅細{{ headerData.classTime }}</div> </div> - <div class="progress">{{ headerData.process }}</div> + <div class="progress"> + <div class="bookName">瀛﹀墠鍎跨鍗敓涓庝繚鍋ワ紙绗笁鐗堬級</div> + <div>{{ headerData.process }}%</div> + </div> <div class="rightBox"> <div class="pageSizeBox"> <div><img :src="zoomIn" @click="changePageSize('add')" /></div> @@ -190,18 +242,18 @@ </div> </div> <!-- 寰簲鐢ㄧ洅瀛� --> - <div class="pageBox-content"> - <div id="container" @mouseup="handleMouseUp"></div> - <!-- 鐢荤瑪鐢诲竷 --> - <div class="canvas-box"> - <canvas - @mousedown="mousedown" - @mousemove.stop.prevent="mousemove" - @mouseup="mouseup" - ref="canvas" - width="100%" - height="100%" - ></canvas> + <div class="pageBox-content" @scroll="pageScroll"> + <div class="content-box"> + <div + id="container" + @mousedown="handleMouseDown" + @mousemove="handleMousemove" + @mouseup="handleMouseUp" + ></div> + <!-- 鐢荤瑪鐢诲竷 --> + <div class="canvas-box" v-show="canvasShow"> + <canvas id="canvasRef" :width="canvasWith" :height="canvasheight"></canvas> + </div> </div> </div> </div> @@ -299,18 +351,16 @@ <div class="brush" v-if="floatingToolData.activeToolData == '鐢荤瑪'"> <div class="thickness"> <div - :class="floatingToolData.thicknessActive == 'small' ? 'small active' : 'small'" - @click="selectThickness('small')" + :class="floatingToolData.thicknessActive == '1' ? 'small active' : 'small'" + @click="selectThickness('1')" ></div> <div - :class=" - floatingToolData.thicknessActive == 'middle' ? 'middle active' : 'middle' - " - @click="selectThickness('middle')" + :class="floatingToolData.thicknessActive == '3' ? 'middle active' : 'middle'" + @click="selectThickness('3')" ></div> <div - :class="floatingToolData.thicknessActive == 'large' ? 'large active' : 'large'" - @click="selectThickness('large')" + :class="floatingToolData.thicknessActive == '5' ? 'large active' : 'large'" + @click="selectThickness('5')" ></div> </div> <div class="lineStyle"> @@ -367,21 +417,25 @@ </div> </div> <div class="write" v-if="floatingToolData.activeToolData == '鏂囧瓧'"> - <div class="thickness"> + <div class="characters"> <div - :class="floatingToolData.thicknessActive == 'small' ? 'small active' : 'small'" - @click="selectThickness('small')" - ></div> + :class="floatingToolData.fontSizeActive == '14' ? 'small active' : 'small'" + @click="selectfontSize('14')" + > + 灏� + </div> <div - :class=" - floatingToolData.thicknessActive == 'middle' ? 'middle active' : 'middle' - " - @click="selectThickness('middle')" - ></div> + :class="floatingToolData.fontSizeActive == '16' ? 'middle active' : 'middle'" + @click="selectfontSize('16')" + > + 涓� + </div> <div - :class="floatingToolData.thicknessActive == 'large' ? 'large active' : 'large'" - @click="selectThickness('large')" - ></div> + :class="floatingToolData.fontSizeActive == '18' ? 'large active' : 'large'" + @click="selectfontSize('18')" + > + 澶� + </div> </div> <div class="lineStyle"> <div class="colorSelectBox"> @@ -416,7 +470,7 @@ </div> </template> </el-popover> - <div class="floatToolItem" v-else> + <div class="floatToolItem" v-else @click="floatItemHandle(item)"> <img :src="item.icon" alt="" /> <div class="text">{{ item.name }}</div> </div> @@ -431,7 +485,7 @@ > <div class="colorSelectBox" - v-if="toolActive == '楂樹寒' || toolActive == '鍒掔嚎' || toolActive == '绗旇'" + v-show="toolActive == '楂樹寒' || toolActive == '鍒掔嚎' || toolActive == '绗旇'" > <div v-for="item in colorSelectList" @@ -460,6 +514,14 @@ </div> </div> </div> + <el-dialog title="璧勬簮" align-center v-model="resourVisble" width="840"> + <div class="videoBox" v-if="resourType == 'video'"> + <video controls object-fit="fill" :src="testVideo"></video> + </div> + <div class="wordBox" v-if="resourType == 'word'"> + <vue-office-docx :src="testWord" /> + </div> + </el-dialog> <el-dialog title="娣诲姞绗旇" align-center @@ -483,6 +545,17 @@ <el-button type="primary" @click="addNote">纭� 瀹�</el-button> </span> </template> + </el-dialog> + <el-dialog + align-center + v-model="confirmDialog" + width="60%" + :closeOnClickModal="false" + title="鍥剧墖" + > + <div class="imgUrlBox"> + <img :src="imgUrl" mode="aspectFill" /> + </div> </el-dialog> <el-dialog title="AI鏅鸿兘闂瓟" align-center v-model="wendaVisible" width="26%" class="myDialogs"> <div class="wendabox"> @@ -528,7 +601,7 @@ //鑾峰彇褰撳墠璺敱鐨勪俊鎭� let $route = useRoute() import moment from 'moment' -import { ElMessage } from 'element-plus' +import { ElMessage, ElMessageBox } from 'element-plus' import mulu from '@/assets/images/menu/mulu.png' import biji from '@/assets/images/menu/biji.png' import ziyuan from '@/assets/images/menu/ziyuan.png' @@ -537,6 +610,8 @@ import biaoqian from '@/assets/images/menu/biaoqian.png' import topbg from '@/assets/images/header/top-bg.png' import setting from '@/assets/images/operation/setting.png' +import search from '@/assets/images/operation/search.png' +import search1 from '@/assets/images/operation/search1.png' import aIzhinengwenda from '@/assets/images/menu/AIzhinengwenda.png' import aIyuyinyuedu from '@/assets/images/menu/AIyuyinyuedu.png' @@ -598,14 +673,125 @@ import zoomIn from '../assets/images/operation/zoomIn.png' import zoomOut from '../assets/images/operation/zoomOut.png' import huabi2 from '../assets/images/operation/huabi.svg' -import front006 from '@/views/components/front006.vue' + +import shanchu from '../assets/images/operation/delete.png' +import bianji from '../assets/images/operation/bianji.png' +import video from '../assets/images/content/resource.png' +//寮曞叆VueOfficeDocx缁勪欢 +import VueOfficeDocx from '@vue-office/docx' +//寮曞叆鐩稿叧鏍峰紡 +import '@vue-office/docx/lib/index.css' +//鎴睆 +import ScreenShort from 'js-web-screen-shot' import { start } from 'qiankun' +import axios from 'axios' +import { fabric } from 'fabric' +const canvasWith = ref(1000) +const canvasheight = ref(3000) onMounted(() => { + // canvasWith.value = window.innerWidth - 540 + // canvasheight.value = window.innerHeight - 110 getNotesList() // 鑾峰彇楂樹寒 getlineHeightList() //鑾峰彇楂樹寒 getScribeList() //鑾峰彇鍒掔嚎 + getCatalogueData() + getResourceData() + getScreenshotList() + // setTimeout(() => { + // canvasWith.value = document.getElementById('container').offsetWidth + // canvasheight.value = document.getElementById('container').offsetHeight + // }, 5000) }) +//鑾峰彇鐩綍 +const catalogueData = ref([]) +const getCatalogueData = () => { + axios + .get('http://182.92.203.7:3007/books/test/information.json') + .then(function (response) { + var json = response.data + // 澶勭悊鑾峰彇鍒扮殑json鏁版嵁 + catalogueData.value = json + }) + .catch(function (error) { + console.log(error) + }) +} +const defaultProps = { + children: 'children', + label: 'label' +} +const handleNodeClick = (data) => { + console.log(data.id, 12) + document.getElementById(data.id).scrollIntoView() +} + +//鑾峰彇璧勬簮 +//璧勬簮鍒嗙被 +const classifySelectList = reactive([ + { + title: '鍥剧墖', + count: 0, + key: 'image' + }, + { + title: '闊抽', + count: 0, + key: 'audio' + }, + { + title: '瑙嗛', + count: 0, + key: 'video' + }, + { + title: '鍏朵粬', + count: 0, + key: 'other' + } +]) +const activeClassify = ref('image') +const searchShow = ref(false) +const resourceData = ref([]) +const resourVisble = ref(false) +const resourType = ref('') +const testVideo = ref('') //瑙嗛閾炬帴 +const testWord = ref('') //word閾炬帴 +const getResourceData = () => { + axios + .get('http://182.92.203.7:3007/books/test/resource.json') + .then(function (response) { + var json = response.data + // 澶勭悊鑾峰彇鍒扮殑json鏁版嵁 + console.log(json, '璧勬簮') + resourceData.value = json + }) + .catch(function (error) { + console.log(error) + }) +} + +const goResourceDetail = (data) => { + console.log(data, 23) + resourVisble.value = true + resourType.value = data.type + if (data.type == 'video') { + testVideo.value = 'http://182.92.203.7:3007/books/test/resourceData/' + data.name + } else if (data.type == 'word') { + testWord.value = 'http://182.92.203.7:3007/books/test/resourceData/' + data.name + } +} + +const classifyClick = (item) => { + activeClassify.value = item.key +} +const searchBtn = () => { + if (searchShow.value) { + searchShow.value = false + } else { + searchShow.value = true + } +} // 鑿滃崟 const menuData = reactive([ { @@ -642,6 +828,21 @@ const menuItemClick = (index) => { activeMenu.value = index menuState.open = true + switch (index) { + case '0': + break + case '1': + getNotesList() + break + case '2': + break + case '3': + break + case '4': + break + case '5': + break + } } //鍒锋柊褰撳墠椤甸潰 const reload = () => { @@ -668,6 +869,7 @@ } else { menuState.notesColor = 'all' } + getNotesList() } const searchBook = async () => { if (activeMenu.value == 1) { @@ -680,10 +882,6 @@ { name: 'AI鏅鸿兘闂瓟', icon: aIzhinengwenda - }, - { - name: 'AI璇煶闃呰', - icon: aIyuyinyuedu }, { name: '璇嶅吀', @@ -812,23 +1010,21 @@ name: '鎴睆' } ]) - +const canvas = ref(null) const floatingToolData = reactive({ activeToolData: '', //閫変腑宸ュ叿 elLeft: 380, elTop: 300, startclientx: 0, startclienty: 0, - thicknessActive: 'middle', //鐢荤瑪閫変腑绮楃粏 + fontSizeActive: '16', + thicknessActive: '3', //鐢荤瑪閫変腑绮楃粏 lineTypeActive: 'solid', //鐢荤瑪閫変腑绾跨被鍨� - lineColorActive: '' //鐢荤瑪閫変腑绾块鑹� + lineColorActive: '#333' //鐢荤瑪閫変腑绾块鑹� }) //鐢诲竷 -const canvas = ref<any>() //鑾峰彇鐢诲竷 -let ctx: CanvasRenderingContext2D //鑾峰彇canvas鎿嶄綔api鐨勫叆鍙g殑绫诲瀷 -let painting = false -let key = 1 +const canvasShow = ref(false) const floatOverHander = (item) => { const curIndex = floatingToolBox.findIndex((f) => f.name == item.name) @@ -882,13 +1078,26 @@ break } } + +//鎴浘浜嬩欢 +const nameRef = ref() +const imgUrl = ref() +const confirmDialog = ref<Boolean>(false) +const nameData = ref({ name: '' }) +const screenshotList = ref([]) + //娴獥宸ュ叿鏍忕偣鍑讳簨浠� const floatItemHandle = (item) => { floatingToolData.activeToolData = item.name - // switch (item.name) { - // case '鐢荤瑪': - // break - // } + switch (item.name) { + case '鐢荤瑪': + canvasShow.value = true + init() + break + case '鎴睆': + jitT() + break + } } const dragend = (e) => { let x = e.clientX - floatingToolData.startclientx @@ -907,64 +1116,105 @@ //閫変腑鐢荤瑪绮楃粏 const selectThickness = (str) => { floatingToolData.thicknessActive = str + init() } const selectLineType = (str) => { floatingToolData.lineTypeActive = str + init() } //鐢荤瑪棰滆壊閫夋嫨 const lineColorSelect = (item) => { floatingToolData.lineColorActive = item.key + init() } -// 鐢荤嚎娈� -const paint = ( - startX: number, - startY: number, - endX: number, - endY: number, - ctx: CanvasRenderingContext2D -) => { - ctx.beginPath() - ctx.globalAlpha = 1 - ctx.lineWidth = 2 - ctx.strokeStyle = '#000' - ctx.moveTo(startX, startY) // 鐢荤嚎璧风偣 - ctx.lineTo(endX, endY) // 鐢荤嚎缁堢偣 - ctx.closePath() - ctx.stroke() // 鎻忕粯绾挎潯 -} -// 瀹氫箟榧犳爣鍒濆鐐瑰嚮鐨勪綅缃� -let startX = 0 -let startY = 0 - -// 榧犳爣鎸変笅 -const mousedown = (event: MouseEvent) => { - ;[startX, startY] = getOffset(event) - painting = true // 灏嗙粯鐢荤姸鎬佹敼鎴恡rue -} - -// 榧犳爣绉诲姩 -const mousemove = (event: MouseEvent) => { - if (painting) { - // 鍦ㄩ紶鏍囩Щ鍔ㄧ殑鏈熼棿锛岃幏鍙栭紶鏍囩殑浣嶇疆 - const [endX, endY] = getOffset(event) - paint(startX, startY, endX, endY, ctx) - // 涓嬮潰涓よ浠g爜鏄洿鏂扮嚎鏉$殑璧风偣 - startX = endX - startY = endY - } -} - -// 榧犳爣鏉惧紑 -const mouseup = (event: MouseEvent) => { - // 鏉惧紑榧犳爣鍚� 绂佹鐢荤嚎鏉� - if (painting) painting = false +//鐢诲竷灞炴�� +const init = () => { + canvas.value = new fabric.Canvas('canvasRef', { + isDrawingMode: true // 鍚敤缁樼敾妯″紡 + }) + canvas.value.freeDrawingBrush.color = floatingToolData.lineColorActive + canvas.value.freeDrawingBrush.width = floatingToolData.thicknessActive } //娓呴櫎涓婁竴姝�/鍏ㄩ儴 -const cleanUpSelect = (str) => {} +const cleanUpSelect = (str) => { + if (str == 'all') { + canvasShow.value = false + } else { + console.log(history.value) + } +} //鏍囩鏄剧ず闅愯棌 const labelShow = (str) => {} + +//鏂囧瓧澶у皬 +const selectfontSize = (str) => { + floatingToolData.fontSizeActive = str +} + +//鎴浘 +//鎴浘浜嬩欢 +function jitT() { + const screenShotHandler = new ScreenShort({ + enableWebRtc: false, // 鏄惁鏄剧ず閫夐」妗� + level: 99, // 灞傜骇绾у埆 + completeCallback: callback, //纭鍥炶皟 + closeCallback: closeFn //鍙栨秷鍥炶皟 + } as any) +} +//纭鍥炶皟 +const callback = (val: any) => { + ElMessageBox.confirm('纭瑕佷繚瀛樻埅鍥�?', '鎻愮ず', { + confirmButtonText: '纭', + cancelButtonText: '鍙栨秷' + }) + .then(() => { + screenshotList.value.push({ + createDate: new Date(), + imgUrl: val.base64 + }) + request({ + url: '/identity/api/ApiAppUserSetKey', + method: 'post', + data: { + setKeyRequests: [ + { + domain: 'screenshot', + key: '1', + value: JSON.stringify(screenshotList.value) + } + ] + } + }).then((res) => { + getScreenshotList() + }) + }) + .catch(() => {}) +} +//鍙栨秷鍥炶皟 +const closeFn = (base64: any) => { + console.log(base64) +} + +const getScreenshotList = () => { + request({ + url: '/identity/api/ApiGetAppUserKey', + method: 'post', + data: { + domain: 'screenshot', + keys: ['1'] + } + }).then((res) => { + if (res && res.length > 0 && res[0].value) { + screenshotList.value = JSON.parse(res[0].value) + } + }) +} +const getCapture = (item) => { + imgUrl.value = item.imgUrl + confirmDialog.value = true +} //閫変腑鏂囧瓧宸ュ叿鏍� const selectText = ref('') //閫変腑鏂囧瓧 @@ -974,32 +1224,53 @@ left: 500, top: 300, chapter: '', //閫変腑鏂囧瓧鎵�鍦ㄧ珷鑺� + parentNode: null, lineHeight: [], //楂樹寒 scribeList: [], //鍒掔嚎 notesList: [] //绗旇 }) -//璋冪敤瀛愬簲鐢ㄦ枃瀛楅�変腑浜嬩欢 -// const subApp = start() -// subApp.handleMouseUp() - -//閫変腑鏂囧瓧 -const handleMouseUp = (e) => { - const txt = window.getSelection()?.toString() - selectText.value = txt - const node = window.getSelection() - console.log(node, 'temp_node') - let html = node.baseNode.parentNode.parentNode - dialogToolData.chapter = html.firstChild.innerHTML - console.log(dialogToolData.chapter) - selectNode.value = node - if (txt) { - showToolBox.value = true - dialogToolData.top = e.y - dialogToolData.left = e.x +///鍐呭閫変腑 +const isMouseDown = ref(false) +const move = ref(false) +const handleMouseDown = () => { + isMouseDown.value = true + showToolBox.value = false + colorActive.value = '' + toolActive.value = '' +} +const handleMousemove = () => { + if (isMouseDown.value) { + move.value = true } } -const toolActive = ref('楂樹寒') + +const handleMouseUp = (e) => { + if (move.value) { + const txt = window.getSelection()?.toString() + selectText.value = txt + const node = window.getSelection() + let html = node.anchorNode.parentNode.parentNode + dialogToolData.chapter = html.firstChild.innerHTML + console.log(dialogToolData.chapter) + if (txt) { + showToolBox.value = true + dialogToolData.top = e.y + dialogToolData.left = e.x + } + isMouseDown.value = false + } + move.value = false +} + +const pageScroll = (e) => { + showToolBox.value = false + let scroll = e.target.scrollTop + let offsetHeight = document.getElementById('container').offsetHeight + headerData.process = Math.round((scroll / offsetHeight) * 100) +} + +const toolActive = ref('') const colorActive = ref('') const dialogToolList = reactive([ { icon: gaoliang, activeIcon: gaoliang1, name: '楂樹寒' }, @@ -1007,30 +1278,31 @@ { icon: biji2, activeIcon: biji1, name: '绗旇' }, { icon: biaozhu2, activeIcon: biaozhu3, name: '鏍囨敞' }, { icon: fuzhi, activeIcon: fuzhi1, name: '澶嶅埗' }, - { icon: AIyuedu, activeIcon: AIyuedu1, name: 'AI闃呰' }, - { icon: cidian2, activeIcon: cidian1, name: '璇嶅吀' }, - { icon: yuyinyuedu, activeIcon: yuyinyuedu1, name: '璇煶闃呰' } + { icon: AIyuedu, activeIcon: AIyuedu1, name: 'AI闃呰' } + // { icon: cidian2, activeIcon: cidian1, name: '璇嶅吀' }, + // { icon: yuyinyuedu, activeIcon: yuyinyuedu1, name: '璇煶闃呰' } + // { icon: cidian2, activeIcon: cidian1, name: '缈昏瘧' } ]) const colorSelectList = reactive([ { - label: '绾㈣壊', - key: '#FF0000' - }, - { - label: '钃濊壊', - key: '#004DFF' + label: '榛勮壊', + key: '#F5E12A' }, { label: '缁胯壊', - key: '#01BA51' + key: '#76F0AE' }, { - label: '榛勮壊', - key: '#FFF700' + label: '钃濊壊', + key: '#59CFF5' }, { - label: '婢勮壊', - key: '#FF8800' + label: '绱壊', + key: '#CAA5FC ' + }, + { + label: '绮夎壊', + key: '#F5A0B9' } ]) @@ -1049,6 +1321,7 @@ //绗旇锛岄珮浜紝鍒掔嚎 const scribeData = reactive({ + loading: false, scribeDataList: [], //鍒掔嚎鑿滃崟鍒楄〃 lineHeightList: [], //楂樹寒鑿滃崟鍒楄〃 noteList: [] //绗旇鑿滃崟鍒楄〃 @@ -1058,6 +1331,7 @@ const synth = window.speechSynthesis //宸ュ叿鏍忔柟娉� const dialogOverHander = (item) => { + // toolActive.value = item.name const curIndex = dialogToolList.findIndex((f) => f.name == item.name) switch (curIndex) { case 0: @@ -1088,6 +1362,7 @@ } const dialogOutHander = (item) => { const curIndex = dialogToolList.findIndex((f) => f.name == item.name) + switch (curIndex) { case 0: dialogToolList[0].icon = gaoliang @@ -1147,7 +1422,7 @@ ElMessage.error('鏃犳硶澶嶅埗鏂囨湰锛�' + err) } showToolBox.value = false - toolActive.value = '楂樹寒' + toolActive.value = '' break case '璇嶅吀': cidianVisible.value = true @@ -1161,20 +1436,6 @@ addNoteVisble.value = true } if (toolActive.value == '楂樹寒') { - let heightLightElement = document.createElement("i"); - heightLightElement.style.backgroundColor = colorActive.value; - heightLightElement.innerText = selectText.value; - let rReg = new RegExp(`${selectText.value}`, "ig"); - console.log(selectNode.value) - let textDom = selectNode.value.anchorNode.parentNode; - console.log(textDom) - let text = textDom.innerHTML; - let rHtml = ""; - rHtml = text.replace( - rReg, - `<span style="background: ${colorActive.value};">${selectText.value}</span>` - ); - textDom.innerHTML = rHtml; dialogToolData.lineHeight.push({ selectNode: selectNode.value, selectText: selectText.value, @@ -1191,18 +1452,15 @@ { domain: 'highLight', key: '1', - value: JSON.stringify(dialogToolData.lineHeight) + value: JSON.stringify([dialogToolData.lineHeight]) } ] } }).then((res) => { showToolBox.value = false colorActive.value = '' - toolActive.value = '楂樹寒' + toolActive.value = '' getlineHeightList() - setTimeout(() => { - lock.value = false - }, 1000) }) } if (toolActive.value == '鍒掔嚎') { @@ -1229,11 +1487,8 @@ }).then((res) => { colorActive.value = '' showToolBox.value = false - toolActive.value = '楂樹寒' + toolActive.value = '' getScribeList() - setTimeout(() => { - lock.value = false - }, 1000) }) } } @@ -1249,7 +1504,6 @@ if (formData.desc.replace(/^\s*|\s*$/g, '')) { if (formData.name.replace(/^\s*|\s*$/g, '')) { dialogToolData.notesList.push({ - selectNode: selectNode.value, selectText: selectText.value, color: colorActive.value, chapter: dialogToolData.chapter, @@ -1273,8 +1527,8 @@ showToolBox.value = false addNoteVisble.value = false colorActive.value = '' - toolActive.value = '楂樹寒' - getNotesList() + toolActive.value = '' + // getNotesList() setTimeout(() => { lock.value = false }, 1000) @@ -1292,6 +1546,7 @@ //绗旇 const getNotesList = () => { scribeData.noteList = [] + scribeData.loading = true request({ url: '/identity/api/ApiGetAppUserKey', method: 'post', @@ -1303,28 +1558,43 @@ if (res && res.length > 0 && res[0].value) { dialogToolData.notesList = JSON.parse(res[0].value) let list = JSON.parse(res[0].value) - list.forEach((item) => { - item.createDate = moment(item.createDate).format('YYYY-MM-DD') - if (searchText.value) { - searchText.value = searchText.value.replace(/^\s*|\s*$/g, '') - let text = searchText.value.replace(/^\s*|\s*$/g, '') - if (item.text.indexOf(text) > -1) { + let textDom1 = document.getElementById('container') + console.log(list, '绗旇') + if (list.length > 0) { + list.forEach((item, index) => { + item.createDate = moment(item.createDate).format('YYYY-MM-DD') + if (searchText.value) { + searchText.value = searchText.value.replace(/^\s*|\s*$/g, '') + let text = searchText.value.replace(/^\s*|\s*$/g, '') + if (item.text.indexOf(text) > -1) { + if (menuState.notesColor == 'all') { + scribeData.noteList.push(item) + } else if (menuState.notesColor == item.color) { + scribeData.noteList.push(item) + } + } + } else { if (menuState.notesColor == 'all') { scribeData.noteList.push(item) } else if (menuState.notesColor == item.color) { scribeData.noteList.push(item) } } - } else { - if (menuState.notesColor == 'all') { - scribeData.noteList.push(item) - } else if (menuState.notesColor == item.color) { - scribeData.noteList.push(item) - } - } - }) - - console.log(scribeData.noteList) + //椤甸潰娣诲姞绗旇 + let containerElement = document.createElement('span') + containerElement.style.textDecoration = 'underline' + containerElement.innerText = item.selectText + let rReg1 = new RegExp(`${item.selectText}`, 'ig') + let text1 = textDom1.innerHTML + let rHtml1 = '' + rHtml1 = text1.replace( + rReg1, + `<span style="text-decoration:underline;text-underline-thickness:2px;text-underline-offset:4px;text-decoration-color:${item.color}" class="underline">${item.selectText}</span><img src="${biji1}" style="cursor: pointer" onclick="notesVisbleShow('${item.selectText}')"/>` + ) + textDom1.innerHTML = rHtml1 + }) + } + scribeData.loading = false } }) } @@ -1342,6 +1612,24 @@ if (res && res.length > 0 && res[0].value) { dialogToolData.scribeList = JSON.parse(res[0].value) scribeData.scribeDataList = JSON.parse(res[0].value) + let textDom1 = document.getElementById('container') + console.log(scribeData.scribeDataList, '鍒掔嚎') + if (scribeData.scribeDataList.length > 0) { + for (let i = 0; i < scribeData.scribeDataList.length; i++) { + let item = scribeData.scribeDataList[i] + let containerElement = document.createElement('span') + containerElement.style.textDecoration = 'underline' + containerElement.innerText = item.selectText + let rReg1 = new RegExp(`${item.selectText}`, 'ig') + let text1 = textDom1.innerHTML + let rHtml1 = '' + rHtml1 = text1.replace( + rReg1, + `<span style="text-decoration:underline;text-decoration-style: wavy;text-underline-thickness:2px;text-decoration-color:${item.color};cursor: pointer">${item.selectText}</span>` + ) + textDom1.innerHTML = rHtml1 + } + } } }) } @@ -1359,53 +1647,116 @@ if (res && res.length > 0 && res[0].value) { dialogToolData.lineHeight = JSON.parse(res[0].value) scribeData.lineHeightList = JSON.parse(res[0].value) + console.log(scribeData.lineHeightList, '楂樹寒') + let textDom = document.getElementById('container') + if (scribeData.lineHeightList.length > 0) { + for (let i = 0; i < scribeData.lineHeightList.length; i++) { + let item = scribeData.lineHeightList[i] + let heightLightElement = document.createElement('i') + heightLightElement.style.backgroundColor = item.color + heightLightElement.innerText = item.selectText + let rReg = new RegExp(`${item.selectText}`, 'ig') + let text = textDom.innerHTML + let rHtml = '' + rHtml = text.replace( + rReg, + `<span style="background: ${item.color};padding: 2px;cursor: pointer">${item.selectText}</span>` + ) + textDom.innerHTML = rHtml + } + } } }) } -//鍒犻櫎楂樹寒/鍒掔嚎 -//榧犳爣绉诲叆鏄剧ず鍒犻櫎鎸夐挳 -const showDeleteBox = (item, type) => { - if (type == 'note') { - if (item.deleteBox == false) { - scribeData.noteList.forEach((i) => { - i.deleteBox = false - }) - item.deleteBox = true +//姝f枃涓垹闄ら珮浜紝鍒掔嚎锛岀瑪璁版搷浣滄 +window.notesVisbleShow = function (txt) { + addNoteVisble.value = true + let notes = dialogToolData.notesList.find((item) => item.selectText == txt) + formData.name = notes.name + formData.desc = notes.note +} +window.deleteScribeShow = function (txt) { + console.log(txt, 2) + let list = scribeData.scribeDataList.filter((item) => item.selectText != txt) + request({ + url: '/identity/api/ApiAppUserSetKey', + method: 'post', + data: { + setKeyRequests: [ + { + domain: 'underline', + key: '1', + value: JSON.stringify(list) + } + ] } - } + }).then((res) => { + getScribeList() + }) } -//榧犳爣绉诲嚭 -const handleDeleteBox = (item) => { - item.deleteBox = false + +window.deletelineHeightShow = function (txt) { + console.log(txt, 1) + let list = scribeData.lineHeightList.filter((item) => item.selectText != txt) + request({ + url: '/identity/api/ApiAppUserSetKey', + method: 'post', + data: { + setKeyRequests: [ + { + domain: 'highLight', + key: '1', + value: JSON.stringify(list) + } + ] + } + }).then((res) => { + getlineHeightList() + }) } + +const jumpContent = (id) => { + document.getElementById(id).scrollIntoView() +} + +const update = (item, type) => { + dialogToolData.notesList.splice( + dialogToolData.notesList.findIndex((itemData) => itemData.selectText == item.selectText), + 1 + ) + selectText.value = item.selectText + colorActive.value = item.color + dialogToolData.chapter = item.chapter + formData.name = item.name + formData.desc = item.note + addNoteVisble.value = true +} + //鍒犻櫎 const deleteBtn = (item, type) => { if (type == 'note') { // 绉婚櫎 - let index = scribeData.noteList.findIndex((itemData) => itemData.text == item.text) - if (index > -1) { - scribeData.noteList.splice(index, 1) - request({ - url: '/identity/api/ApiAppUserSetKey', - method: 'post', - data: { - setKeyRequests: [ - { - domain: 'notes', - key: '1', - value: JSON.stringify(scribeData.noteList) - } - ] - } - }).then((res) => { - ElMessage({ - message: '鍒犻櫎绗旇鎴愬姛!', - type: 'success' - }) - getNotesList() + let list = scribeData.noteList.filter((itemData) => itemData.selectText !== item.selectText) + request({ + url: '/identity/api/ApiAppUserSetKey', + method: 'post', + data: { + setKeyRequests: [ + { + domain: 'notes', + key: '1', + value: JSON.stringify(list) + } + ] + } + }).then((res) => { + ElMessage({ + message: '鍒犻櫎绗旇鎴愬姛!', + type: 'success' }) - } + getNotesList() + }) } } @@ -1416,7 +1767,7 @@ seconds: 0, minutes: 0, hours: 0, - process: '42%', + process: 0, pageSize: 100 }) //涓婅鏃堕暱璁℃椂鍣� @@ -1460,20 +1811,38 @@ .homeBox { width: 100%; height: 100%; + background:#C6C6C6; + border-radius: 10px; display: flex; flex-direction: column; + padding:0 15px; .headerBox { height: 48px; - background-image: url('@/assets/images/header/top-bg.png'); + // background-image: url('@/assets/images/header/top-bg.png'); background-size: 100% 100%; background-repeat: no-repeat; padding: 0 20px; - line-height: 48px; + display:flex; + justify-content: space-between; p { font-size: 24px; color: #ffffff; letter-spacing: 2px; font-weight: bold; + } + .userInfoBox{ + display:flex; + align-items: center; + .layout{ + width: 69px; + height: 30px; + background: #0093FF; + border-radius: 15px; + color:#fff; + text-align:center; + line-height:30px; + + } } } .contentBox { @@ -1482,19 +1851,25 @@ display: flex; .menuBox { width: 80px; + flex-shrink: 0; border-right: 1px solid #e6e7e8; padding-bottom: 20px; box-sizing: border-box; position: relative; box-shadow: 10px 0 10px -10px rgba(0, 0, 0, 0.07); + background:#fff; + border-radius:16px 0px 0px 0px; .menuItem { text-align: center; line-height: 1; cursor: pointer; - padding: 10px 0; + padding: 5px 0 10px 0; + width:63px; + margin: 10px auto; + border-radius: 10px; &.active, &:hover { - background-color: #cfebff; + background-color: rgba(0, 147, 255, 0.1); p { color: #0093ff; } @@ -1503,7 +1878,10 @@ display: inline-block; width: 32px; height: 32px; - margin-bottom: 4px; + .name { + text-align: center; + line-height: 1; + } } } .reload { @@ -1520,7 +1898,8 @@ } } .menuContent { - width: 270px; + width: 300px; + flex-shrink: 0; height: calc(100vh - 48px); overflow-y: auto; background: #e0f2ff; @@ -1533,11 +1912,54 @@ align-items: center; } .resourceBox { - width: 100%; - height: 60px; - display: flex; - justify-content: center; - align-items: center; + padding: 15px 0; + margin: 0 20px; + border-bottom: 1px solid rgba(204, 204, 204, 0.32); + .classification { + width: 100%; + display: flex; + justify-content: space-between; + align-items: center; + .flex1 { + flex: 1; + text-align: center; + } + .title { + color: #999999; + } + .count { + width: 35px; + margin: 5px auto; + border-radius: 10px; + background: #fff; + color: #c8c8c8; + } + .activeClassify, + .classifyItem:hover { + .title { + color: #0093ff; + } + .count { + background: #0093ff; + color: #fff; + } + } + .showSearch { + .imgBox { + width: 39px; + height: 24px; + border-radius: 16px; + margin: 0 auto; + } + .imgBox:hover, + .activeSearch { + border: 1px solid #0093ff; + } + } + } + .inputBox { + margin-top: 10px; + } } .resourceTab { width: 100%; @@ -1574,6 +1996,7 @@ border: 1px solid #0093ff !important; border-radius: 50px; overflow: hidden; + background:#fff; } .is-focus, .el-input__wrapper { @@ -1640,21 +2063,93 @@ .menuList { height: calc(100% - 60px); overflow-y: auto; - padding: 10px; + padding: 10px 0; } .list-box { + .resourceList { + padding: 10px; + .resourceItem { + padding: 10px 0; + align-items: center; + .resourceImg { + width: 130px; + height: 80px; + background: #fff; + border-radius:5px; + overflow: hidden; + img { + height: 100%; + width: 100%; + object-fit: contain; + } + } + + .rName { + margin-top:10px; + height: 20px; + line-height: 20px; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 1; + overflow: hidden; + text-overflow: ellipsis; + color: #000; + } + } + } + .screenshot { + padding: 20px; + display: flex; + flex-wrap: wrap; + justify-content: space-between; + .captureItem { + border: 1px solid #d8d8d8; + margin-bottom: 10px; + width: 46%; + .capture { + width: 100%; + height: 80px; + } + } + } + .listItem { border-bottom: 1px solid rgba(212, 212, 212, 0.16); position: relative; - padding: 10px; + margin: 10px; line-height: 20px; .textBox { - padding: 15px 10px; - .chapter { - color: #0093ff; + padding: 0 5px 10px 5px; + .title { + display: flex; + justify-content: space-between; + align-items: center; + .title-con { + display: flex; + align-items: center; + .round { + width: 10px; + height: 10px; + border-radius: 50%; + margin-right: 5px; + } + } + + img { + margin-left: 5px; + } } - .chapterName{ + .chapter { + color: #b7b7b7; + margin-top: 5px; + } + .chapterName { float: right; + width: 150px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + text-align: right; } } .noteText { @@ -1704,7 +2199,7 @@ position: fixed; line-height: 22px; top: 50%; - left: 325px; + left: 370px; text-align: center; box-shadow: 0px 0px 6px 1px rgba(0, 0, 0, 0.16); img { @@ -1715,7 +2210,6 @@ .pageBox { flex: 1; - overflow: auto; font-size: 16px; .pageBox-header { height: 57px; @@ -1738,6 +2232,14 @@ background: #0093ff; margin: 0 5px; } + } + .progress{ + text-align:center; + .bookName{ + font-weight:bold; + margin-bottom:3px; + } + } .rightBox { display: flex; @@ -1768,11 +2270,14 @@ } .pageBox-content { height: calc(100% - 57px); - position: relative; overflow-y: auto; + background: #fbf9f4; + .content-box { + position: relative; + } #container { background: #fbf9f4; - height: 100%; + // height: 100%; } .canvas-box { height: 100%; @@ -1780,12 +2285,16 @@ position: absolute; top: 0; left: 0; + z-index: 96; + background: rgba(255, 255, 255, 0.2); } } } .toolBox { position: relative; box-shadow: -3px 0px 6px 1px rgba(0, 0, 0, 0.07); + background:#fff; + border-radius:0px 16px 0px 0px; .toolTitle { height: 57px; line-height: 53px; @@ -1802,7 +2311,7 @@ .menu { padding-top: 20px; li { - height: 50px; + // height: 50px; padding: 10px 36px; font-size: 16px; display: flex; @@ -1825,10 +2334,10 @@ background: #fff; border-radius: 3px 0px 0px 3px; border: 1px solid #bce3ff; - position: fixed; + position: absolute; line-height: 22px; top: 50%; - right: 50px; + right: 65px; text-align: center; box-shadow: 0px 0px 6px 1px rgba(0, 0, 0, 0.16); img { @@ -1837,7 +2346,7 @@ } } .right { - right: 183px !important; + right: 174px !important; border-radius: 0px 3px 3px 0px !important; } .classRoomBox { @@ -1904,11 +2413,10 @@ width: 85px; background-image: linear-gradient(to bottom, #0093ff, #005dff); position: fixed; - // height: 430px; - height: 130px; + height: 430px; top: 300px; left: 400px; - z-index: 999; + z-index: 99; border-radius: 10px; padding: 5px; overflow: hidden; @@ -1927,9 +2435,7 @@ } } } - .draggableBox:hover { - height: 430px; - } + .floatToolItem:hover { background-color: #fff; color: #0093ff; @@ -2040,4 +2546,14 @@ } } } +.videoBox video { + width: 100%; +} +.wordBox { + height: 600px; +} +.imgUrlBox { + width: 100%; + text-align: center; +} </style> -- Gitblit v1.9.1