From 07cd3cbbf2da2e4a1e647212c0abc9f509418a17 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 29 Oct 2020 11:02:49 +0800 Subject: [PATCH] =?UTF-8?q?workspace=20=E6=B7=BB=E5=8A=A0systemAPI?= =?UTF-8?q?=E4=BB=A3=E7=A0=81;=20=E6=8C=87=E6=B4=BE=E5=B7=A5=E4=BD=9C=20?= =?UTF-8?q?=E6=9B=BF=E6=8D=A2=E6=96=87=E4=BB=B6=E5=A4=B9=E6=A0=91=E7=BB=84?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/services/system.js | 92 ++++++----- .../components_web/distWork/distWork.vue | 32 ++-- .../components_web/distWork/folder-list.vue | 149 ++++++++++++++++++ src/views/main_web/workspace/workspace.vue | 10 +- 4 files changed, 227 insertions(+), 56 deletions(-) create mode 100644 src/views/components_web/distWork/folder-list.vue diff --git a/src/services/system.js b/src/services/system.js index 766bc69c..1c3ba2a7 100644 --- a/src/services/system.js +++ b/src/services/system.js @@ -9,10 +9,12 @@ let socket; const noop = () => {}; const io = (path) => { - return new WebSocket(path); + const sk = new WebSocket(`ws://127.0.0.1:7777/${path}`); + sk.on = sk.addEventListener; + return sk; } -console.log(global.electron); + const safeCall = f => isClient ? f : noop; const safeSocket = f => (...args) => socket && f(...args); @@ -21,15 +23,14 @@ const system = { isClient, init: safeCall(() => { console.log('客户端 electron API 检测:', global.electron); - system.initialSocket(); }), - initialSocket: () => { - socket = io('ws://10.240.5.17:8000'); - // socket = io('ws://127.0.0.1:3000'); - debugger; - socket.on('connect', () => { console.log('本地socket服务连接成功') }); - }, + // initialSocket: () => { + // socket = io('ws://10.240.5.17:8000'); + // // socket = io('ws://127.0.0.1:3000'); + // debugger; + // socket.on('connect', () => { console.log('本地socket服务连接成功') }); + // }, /** * todo * 通知登录 @@ -48,32 +49,60 @@ const system = { * todo * 通知系统进入当前的工作空间 */ - entryProject: () => { - - }, + entryProject: safeCall((projectId, userId, fileChangeHandler) => { + const socket = io('init'); + socket.on('open', () => { + socket.send([projectId, userId].join('|')); + socket.close(); + }); + const watchSocket = io('subscriptionFileChange'); + watchSocket.on('message', fileChangeHandler); + return watchSocket + }), + /** + * todo + * 离开工作空间时注销socket + */ + leaveProject: safeCall((watchSocket) => { + watchSocket.close(); + }), /** * 下载文件到工作空间 */ - downloadFile: () => { - - }, + downloadFile: safeCall((fileIpfsId, projectName, fileName, dirName) => { + const socket = io('download'); + socket.on('open', () => { + socket.send([fileIpfsId, projectName, fileName, dirName].join('|')); + }); + socket.on('message', (...args) => { + console.log('receive download file message:', args); + // todo 输出下载进度 + socket.close(); + }); + // socket.on('error') + }), /** * 上传文件到工作空间 * issue: * + 浏览器的文件上传不会带有本地的文件路径,本地服务是否可以唤起一个选择文件的弹窗? */ - uploadFile: safeCall(async () => { + uploadFile: safeCall(async (projectName, dirName) => { const { ipcRenderer } = global.electron; - const res = await ipcRenderer.invoke('project-upload-file', { value: 'custom-var-test' }); + const res = await ipcRenderer.invoke('project-upload-file'); console.log('ipcRenderer project-selected-upload-file: ', res); - // todo 调用socket上传文件到节点服务 - // ipcRenderer.send('project-upload-file', { value: 'custom-var-test' }); - // ipcRenderer.once('project-selected-upload-file', (event, path) => { - // console.log('ipcRenderer project-selected-upload-file:', event, path); - // debugger; - // // todo 取出文件的本地路径, 及当前项目相关的数据通过socket,发送给本机服务 - // // - // }); + const { canceled, filePaths } = res; + if(canceled) return; + const filePath = filePaths[0]; + const fileName = filePath.split(/\/|\\/g).pop(); + const socket = io('upload'); + socket.on('open', () => { + const data = [filePath, fileName, projectName, dirName].join('|'); + socket.send(data); + }); + socket.on('message', (...args) => { + console.log('receive download file message:', args); + // socket.close(); + }); }), /** * 系统打开文件 @@ -82,19 +111,6 @@ const system = { const { shell } = global.electron; shell.openPath(filePath); }), - /** - * 初始化ipcRender - */ - initialClient: safeCall(() => { - // const { ipcRenderer } = global.electron; - // // 项目中的文件上传事件监听 - // ipcRenderer.on('project-selected-upload-file', (event, path) => { - // console.log('ipcRenderer project-selected-upload-file:', event, path); - // debugger; - // // todo 取出文件的本地路径, 及当前项目相关的数据通过socket,发送给本机服务 - // // - // }); - }), } export default system; diff --git a/src/views/components_web/distWork/distWork.vue b/src/views/components_web/distWork/distWork.vue index 0e8e1ca0..efac6fe6 100644 --- a/src/views/components_web/distWork/distWork.vue +++ b/src/views/components_web/distWork/distWork.vue @@ -123,7 +123,12 @@ -
+ +
-
工作负责人 @@ -160,7 +163,6 @@
  • -
    {{ @@ -169,9 +171,7 @@
  • -
    -
    @@ -182,7 +182,6 @@ )" :key="index">
    -
    {{ @@ -228,7 +227,7 @@
    - +
    @@ -238,7 +237,6 @@
  • -
    {{ @@ -247,9 +245,9 @@
  • - +
    - +
    @@ -286,11 +284,11 @@
    -
    -
    +
    --> + @@ -665,8 +663,12 @@ import { getUserInfo,roleOptions,fetchDeptList,getUserListByNode,roleMap,stateOptions} from '@/services/user.js'; import { fetchApi } from '@/utils/request'; import { firstCharToLowerCase, firstCharToUpperCase } from '@/utils/tool'; +import FolderList from './folder-list'; export default { + components: { + FolderList + }, data() { return { imgSrc: process.env.API_HOST + "archives/cover?path=", @@ -1473,9 +1475,7 @@ export default { this.currUser = this.listManagerUser[0] || {}; this.listManagerUser = this.listManagerUser.slice(1); } - // todo folder, userList const folderList = mergeFolderList(folder, userHash); - console.log(folderList); this.listNewFolder = folderList; }, async getUserList(){ diff --git a/src/views/components_web/distWork/folder-list.vue b/src/views/components_web/distWork/folder-list.vue new file mode 100644 index 00000000..fe75c386 --- /dev/null +++ b/src/views/components_web/distWork/folder-list.vue @@ -0,0 +1,149 @@ + + + + + \ No newline at end of file diff --git a/src/views/main_web/workspace/workspace.vue b/src/views/main_web/workspace/workspace.vue index 14726aca..e00ec0d3 100644 --- a/src/views/main_web/workspace/workspace.vue +++ b/src/views/main_web/workspace/workspace.vue @@ -2972,6 +2972,9 @@ export default { myFileBreadNodeData: [initialTempFile('myFile', '我的文件')], myComFileBreadNodeData: [initialTempFile('myComFile', '公共文件')], showadow: false, + + // + socketIns: null, // 监听文件变化的socket实例 }; }, created: function () { @@ -2996,6 +2999,8 @@ export default { window.addEventListener("resize", this.listenBottomHeight, true); //添加鼠标移入齿轮事件 window.addEventListener("mouseenter", this.setIconMouseEnter, true); + + this.socketIns = system.entryProject(sessionStorage.projName, sessionStorage.userId); }, computed: { /** @@ -4635,7 +4640,7 @@ export default { */ clientUpload() { if(!this.isClient) return; - // this.isShowNewFiledialog = false; + this.isShowNewFiledialog = false; // var foldergroupId = ""; // if ( // this.dbClickSelectedFolderGroupData != null && @@ -4648,7 +4653,7 @@ export default { // sessionStorage.userId, // foldergroupId // ); - system.uploadFile(); + system.uploadFile(sessionStorage.projName, this.nowFolder.folderName); }, /** * 重命名我的文件 @@ -6984,6 +6989,7 @@ export default { window.removeEventListener("resize", this.listenBottomHeight); window.removeEventListener("mouseenter", this.setIconMouseEnter); clearInterval(this.timer); + system.levelProject(this.socketIns); }, components: { Forgeview: forgeview,