diff --git a/electron.vite.config.mjs b/electron.vite.config.mjs index 12cab0b..fe59903 100644 --- a/electron.vite.config.mjs +++ b/electron.vite.config.mjs @@ -22,8 +22,8 @@ export default defineConfig({ server: { proxy: { '/dev-api': { - // target: 'http://27.128.240.72:7865', - target: 'http://192.168.2.52:7863', + target: 'http://27.128.240.72:7865', + // target: 'http://192.168.2.52:7863', changeOrigin: true, rewrite: (p) => p.replace(/^\/dev-api/, '') }, diff --git a/src/main/file.js b/src/main/file.js index 1551855..c0b8810 100644 --- a/src/main/file.js +++ b/src/main/file.js @@ -1,9 +1,9 @@ const fs = require('fs') const path = require('path') -import { ElectronDownloadManager } from 'electron-dl-manager'; -const manager = new ElectronDownloadManager(); +import { ElectronDownloadManager } from 'electron-dl-manager' +import { dialog } from 'electron' +const manager = new ElectronDownloadManager() export default async function ({ app, shell, BrowserWindow, ipcMain }) { - const userDataPath = app.getPath('userData') //默认浏览器打开url ipcMain.on('open-url-browser', (e, url) => { @@ -22,8 +22,8 @@ export default async function ({ app, shell, BrowserWindow, ipcMain }) { }) //下载文件 - ipcMain.on('download-file-default', (e,url) => { - createFolder('selfFile').then(async ()=>{ + ipcMain.on('download-file-default', (e, url) => { + createFolder('selfFile').then(async () => { const browserWindow = BrowserWindow.fromId(e.sender.id) const id = await manager.download({ window: browserWindow, @@ -38,17 +38,65 @@ export default async function ({ app, shell, BrowserWindow, ipcMain }) { id, percentCompleted, // Get the number of bytes received so far - bytesReceived: item.getReceivedBytes(), - }); + bytesReceived: item.getReceivedBytes() + }) }, onDownloadCompleted: async ({ id, item }) => { console.log(item) }, onDownloadCancelled: async () => {}, onDownloadInterrupted: async () => {}, - onError: (err, data) => {}, + onError: (err, data) => {} } - }); + }) + }) + }) + + /**另存为... + * 接收渲染进程 保存文件的 的通知 + * @param {Object} event + * @param {String} url 下载链接 + * @param {String} fileName 文件名称包括后缀名,例如图1.png + */ + ipcMain.on('save-as', function (event, url, fileName) { + let win = BrowserWindow.getFocusedWindow(); + //通过扩展名识别文件类型 + let filters = [{ name: '全部文件', extensions: ['*'] }] + let ext = path.extname(fileName) //获取扩展名 + if (ext && ext !== '.') { + const name = ext.slice(1, ext.length) + if (name) { + filters.unshift({ + name: '', + extensions: [name] + }) + } + } + let filePath = null //用户选择存放文件的路径 + + //1- 弹出另存为弹框,用于获取保存路径 + dialog + .showSaveDialog(win, { + title: '另存为', + filters, + defaultPath: fileName + }) + .then((result) => { + //点击保存后开始下载 + filePath = result.filePath + if (filePath) { + win.webContents.downloadURL(url) // 触发will-download事件 + } + }) + .catch(() => { + console.log('另存为--catch') + }) + + //2- 准备下载的时候触发 + win.webContents.session.once('will-download', (event, item, webContents) => { + if (!filePath) return + //设置下载项的保存文件路径 + item.setSavePath(filePath) }) }) diff --git a/src/main/index.js b/src/main/index.js index 72d5a72..60f902a 100644 --- a/src/main/index.js +++ b/src/main/index.js @@ -8,8 +8,8 @@ File({ app, shell, BrowserWindow, ipcMain }) function createWindow() { // Create the browser window. const mainWindow = new BrowserWindow({ - width: 888, - height: 520, + width: 1050, + height: 650, show: false, frame: false, autoHideMenuBar: true, diff --git a/src/renderer/src/api/file/index.js b/src/renderer/src/api/file/index.js index d7e590b..c4b877f 100644 --- a/src/renderer/src/api/file/index.js +++ b/src/renderer/src/api/file/index.js @@ -8,3 +8,18 @@ export const getSmarttalkPage = (params) => { params }) } + +export function deleteSmarttalk(id) { + return request({ + url: '/smarttalk/file/' + id, + method: 'delete' + }) +} + +export const updateSmarttalk = (params) => { + return request({ + url: '/smarttalk/file/updateSmarttalk', + method: 'post', + params + }) +} diff --git a/src/renderer/src/assets/iconfont/iconfont.css b/src/renderer/src/assets/iconfont/iconfont.css index be9b576..529bfc4 100644 --- a/src/renderer/src/assets/iconfont/iconfont.css +++ b/src/renderer/src/assets/iconfont/iconfont.css @@ -1,9 +1,9 @@ @font-face { font-family: "iconfont"; /* Project id 2794390 */ - src: url('iconfont.woff2?t=1720953486579') format('woff2'), - url('iconfont.woff?t=1720953486579') format('woff'), - url('iconfont.ttf?t=1720953486579') format('truetype'), - url('iconfont.svg?t=1720953486579#iconfont') format('svg'); + src: url('iconfont.woff2?t=1721179711733') format('woff2'), + url('iconfont.woff?t=1721179711733') format('woff'), + url('iconfont.ttf?t=1721179711733') format('truetype'), + url('iconfont.svg?t=1721179711733#iconfont') format('svg'); } .iconfont { @@ -14,6 +14,10 @@ -moz-osx-font-smoothing: grayscale; } +.icon-yidongdaozu:before { + content: "\e67d"; +} + .icon-shanchu:before { content: "\e852"; } diff --git a/src/renderer/src/assets/iconfont/iconfont.js b/src/renderer/src/assets/iconfont/iconfont.js index 8bc5b23..6058761 100644 --- a/src/renderer/src/assets/iconfont/iconfont.js +++ b/src/renderer/src/assets/iconfont/iconfont.js @@ -1 +1 @@ -window._iconfont_svg_string_2794390='',function(l){var h=(h=document.getElementsByTagName("script"))[h.length-1],v=h.getAttribute("data-injectcss"),h=h.getAttribute("data-disable-injectsvg");if(!h){var c,a,t,z,p,i=function(h,v){v.parentNode.insertBefore(h,v)};if(v&&!l.__iconfont__svg__cssinject__){l.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(h){console&&console.log(h)}}c=function(){var h,v=document.createElement("div");v.innerHTML=l._iconfont_svg_string_2794390,(v=v.getElementsByTagName("svg")[0])&&(v.setAttribute("aria-hidden","true"),v.style.position="absolute",v.style.width=0,v.style.height=0,v.style.overflow="hidden",v=v,(h=document.body).firstChild?i(v,h.firstChild):h.appendChild(v))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(c,0):(a=function(){document.removeEventListener("DOMContentLoaded",a,!1),c()},document.addEventListener("DOMContentLoaded",a,!1)):document.attachEvent&&(t=c,z=l.document,p=!1,d(),z.onreadystatechange=function(){"complete"==z.readyState&&(z.onreadystatechange=null,M())})}function M(){p||(p=!0,t())}function d(){try{z.documentElement.doScroll("left")}catch(h){return void setTimeout(d,50)}M()}}(window); \ No newline at end of file +window._iconfont_svg_string_2794390='',function(l){var h=(h=document.getElementsByTagName("script"))[h.length-1],v=h.getAttribute("data-injectcss"),h=h.getAttribute("data-disable-injectsvg");if(!h){var c,a,t,z,p,i=function(h,v){v.parentNode.insertBefore(h,v)};if(v&&!l.__iconfont__svg__cssinject__){l.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(h){console&&console.log(h)}}c=function(){var h,v=document.createElement("div");v.innerHTML=l._iconfont_svg_string_2794390,(v=v.getElementsByTagName("svg")[0])&&(v.setAttribute("aria-hidden","true"),v.style.position="absolute",v.style.width=0,v.style.height=0,v.style.overflow="hidden",v=v,(h=document.body).firstChild?i(v,h.firstChild):h.appendChild(v))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(c,0):(a=function(){document.removeEventListener("DOMContentLoaded",a,!1),c()},document.addEventListener("DOMContentLoaded",a,!1)):document.attachEvent&&(t=c,z=l.document,p=!1,d(),z.onreadystatechange=function(){"complete"==z.readyState&&(z.onreadystatechange=null,M())})}function M(){p||(p=!0,t())}function d(){try{z.documentElement.doScroll("left")}catch(h){return void setTimeout(d,50)}M()}}(window); \ No newline at end of file diff --git a/src/renderer/src/assets/iconfont/iconfont.json b/src/renderer/src/assets/iconfont/iconfont.json index f1a76dc..d630aec 100644 --- a/src/renderer/src/assets/iconfont/iconfont.json +++ b/src/renderer/src/assets/iconfont/iconfont.json @@ -5,6 +5,13 @@ "css_prefix_text": "icon-", "description": "", "glyphs": [ + { + "icon_id": "1207918", + "name": "移动到组", + "font_class": "yidongdaozu", + "unicode": "e67d", + "unicode_decimal": 59005 + }, { "icon_id": "8288874", "name": "删除", diff --git a/src/renderer/src/assets/iconfont/iconfont.svg b/src/renderer/src/assets/iconfont/iconfont.svg index ede225e..69fe782 100644 --- a/src/renderer/src/assets/iconfont/iconfont.svg +++ b/src/renderer/src/assets/iconfont/iconfont.svg @@ -14,6 +14,8 @@ /> + + diff --git a/src/renderer/src/assets/iconfont/iconfont.ttf b/src/renderer/src/assets/iconfont/iconfont.ttf index 585b7fa..f179db3 100644 Binary files a/src/renderer/src/assets/iconfont/iconfont.ttf and b/src/renderer/src/assets/iconfont/iconfont.ttf differ diff --git a/src/renderer/src/assets/iconfont/iconfont.woff b/src/renderer/src/assets/iconfont/iconfont.woff index f4d0eb5..06b4847 100644 Binary files a/src/renderer/src/assets/iconfont/iconfont.woff and b/src/renderer/src/assets/iconfont/iconfont.woff differ diff --git a/src/renderer/src/assets/iconfont/iconfont.woff2 b/src/renderer/src/assets/iconfont/iconfont.woff2 index f3d2708..280df28 100644 Binary files a/src/renderer/src/assets/iconfont/iconfont.woff2 and b/src/renderer/src/assets/iconfont/iconfont.woff2 differ diff --git a/src/renderer/src/assets/main.css b/src/renderer/src/assets/main.css index 2598141..b76b451 100644 --- a/src/renderer/src/assets/main.css +++ b/src/renderer/src/assets/main.css @@ -32,3 +32,27 @@ html,body{ fill: currentColor; overflow: hidden; } +::-webkit-scrollbar { + width:5px; + height:5px; + background-color:#F5F5F5; +} +/* 滚动条上的滚动滑块. */ +::-webkit-scrollbar-thumb { + background-color: #a3b7cb; + border-radius: 50px; +} +/* 滚动条轨道. */ +::-webkit-scrollbar-track { + -webkit-box-shadow:inset 0 0 6px rgba(0, 142, 255, 1); + box-shadow:inset 0 0 6px rgba(0, 142, 255, 1); + background-color:#E7E3DF; +} +/* 滚动条没有滑块的轨道部分 */ +::-webkit-scrollbar-track-piece { + background-color: #E7E3DF; +} +/* 当同时有垂直滚动条和水平滚动条时交汇的部分. */ +::-webkit-scrollbar-corner { + background:transparent; +} diff --git a/src/renderer/src/components/choose-textbook/index.vue b/src/renderer/src/components/choose-textbook/index.vue index d5217cc..a9db674 100644 --- a/src/renderer/src/components/choose-textbook/index.vue +++ b/src/renderer/src/components/choose-textbook/index.vue @@ -1,16 +1,20 @@