From a66658e62f9f45fd2250f7942abfa693ab51cf02 Mon Sep 17 00:00:00 2001 From: fangxiang Date: Wed, 18 Aug 2021 16:00:22 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=87=E4=BB=B6=E7=AE=A1=E7=90=86=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E5=88=A0=E9=99=A4=E3=80=81=E9=87=8D=E5=91=BD=E5=90=8D?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=92=8C=E6=96=B0=E5=BB=BA=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=A4=B9=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common/GlobalData.ts | 14 +++ src/components/FileManageDialog.vue | 186 ++++++++++++++++++++++++---- src/entities/HttpProtocol.ts | 2 + src/entities/NormalResult.ts | 4 + src/i18n/zh-CN/index.ts | 6 + 5 files changed, 186 insertions(+), 26 deletions(-) create mode 100644 src/entities/NormalResult.ts diff --git a/src/common/GlobalData.ts b/src/common/GlobalData.ts index 6eca07b..0d4661d 100644 --- a/src/common/GlobalData.ts +++ b/src/common/GlobalData.ts @@ -1,5 +1,6 @@ import { SessionStorage } from "quasar"; import ApplicationConfigEntity from "src/entities/ApplicationConfigEntity"; +import { HttpProtocol } from "src/entities/HttpProtocol"; import { SignalSourceEntity } from "src/entities/SignalSourceEntity"; import ClientConnection from "./ClientConnection"; import EventBus, { EventNamesDefine } from "./EventBus"; @@ -123,6 +124,19 @@ export default class GlobalData { return this.getClient(this._current_client_name); } + public createCurrentRequestUrl() { + let client = this.getCurrentClient(); + if (client) { + let url = new URL(client.url); + url.port = + this.applicationConfig?.httpserver_port ?? + HttpProtocol.DefaultHttpPort.toString(); + url.protocol = "http:"; + return url; + } + return null; + } + public addClient(name: string | null, client: ClientConnection) { if (name) { this.clients.set(name, client); diff --git a/src/components/FileManageDialog.vue b/src/components/FileManageDialog.vue index 46e0211..7003a27 100644 --- a/src/components/FileManageDialog.vue +++ b/src/components/FileManageDialog.vue @@ -87,9 +87,20 @@ + + {{ $t("create folder") }} + + + @@ -167,6 +178,7 @@
0) { @@ -467,8 +467,146 @@ export default defineComponent({ status.value = "normal"; upload_url.value = ""; }, - deleteFile(file: FileEntity) {}, - renameFile(file: FileEntity) {}, + async onCreateNewFolder() { + let url = GlobalData.getInstance().createCurrentRequestUrl(); + if (url) { + $q.dialog({ + title: $t.t("create folder"), + message: $t.t("input folder name") + ":", + prompt: { + model: "", + isValid: (val: string) => val && val.trim().length > 0, + type: "text", + }, + cancel: true, + persistent: true, + }).onOk(async (data: string) => { + if (url) { + url.pathname = HttpProtocol.RequestPathCreateDirectory; + let response = ( + await api.post(url.toString(), { + base_dir: path.value, + dir_name: data, + }) + ).data as NormalResult; + if (response && response.success) { + refresh_file_list(); + $q.notify({ + type: "positive", + message: $t.t("create folder") + $t.t("success") + "!", + position: "top", + timeout: 1500, + }); + } else { + $q.notify({ + type: "warning", + message: + $t.t("create folder") + + $t.t("fail") + + "!" + + (response ? response.message : ""), + position: "top", + timeout: 1500, + }); + } + } + }); + } + }, + async deleteFile(file: FileEntity) { + let url = GlobalData.getInstance().createCurrentRequestUrl(); + if (url) { + url.pathname = HttpProtocol.RequestPathDeleteFile; + let response = null; + try { + response = ( + await api.delete(url.toString(), { + data: { + base_dir: path.value, + file_name: file.name, + }, + }) + ).data as NormalResult; + } catch (e) { + console.log(e); + } + if (response && response.success) { + refresh_file_list(); + $q.notify({ + type: "positive", + message: $t.t("delete file") + $t.t("success") + "!", + position: "top", + timeout: 1500, + }); + } else { + $q.notify({ + type: "warning", + message: + $t.t("delete file") + + $t.t("fail") + + "!" + + (response ? response.message : ""), + position: "top", + timeout: 1500, + }); + } + } + }, + renameFile(file: FileEntity) { + let url = GlobalData.getInstance().createCurrentRequestUrl(); + if (url) { + $q.dialog({ + title: $t.t("rename"), + message: $t.t("input new file name") + ":", + prompt: { + model: file.name, + isValid: (val: string) => val && val.trim().length > 0, + type: "text", + }, + cancel: true, + persistent: true, + }).onOk(async (data: string) => { + if (data == file.name) { + return; + } + if (url) { + url.pathname = HttpProtocol.RequestPathRenameFile; + url.searchParams.append( + "type", + HttpProtocol.RequestPathRenameFile + ); + + let response = ( + await api.put(url.toString(), { + base_dir: path.value, + file_name: file.name, + new_file_name: data, + }) + ).data as NormalResult; + if (response && response.success) { + refresh_file_list(); + $q.notify({ + type: "positive", + message: $t.t("file rename") + $t.t("success") + "!", + position: "top", + timeout: 1500, + }); + } else { + $q.notify({ + type: "warning", + message: + $t.t("file rename") + + $t.t("fail") + + "!" + + (response ? response.message : ""), + position: "top", + timeout: 1500, + }); + } + } + }); + } + }, copyStringToClipboard(value: string) { copyToClipboard(value); }, @@ -495,27 +633,23 @@ export default defineComponent({ } }, getUrl(file: File[]) { - let client = GlobalData.getInstance().getCurrentClient(); - if (client) { - let url = new URL(client.url); - url.port = - GlobalData.getInstance().applicationConfig?.httpserver_port ?? - HttpProtocol.DefaultHttpPort.toString(); + let url = GlobalData.getInstance().createCurrentRequestUrl(); + if (url) { url.pathname = HttpProtocol.RequestUploadFile; - url.protocol = "http:"; url.searchParams.append("type", HttpProtocol.HttpUploadTypeNormal); url.searchParams.append("base_dir", path.value); - console.log(url.toString()); return url.toString(); } return "#"; }, onUploaded() { + refresh_file_list(); + $q.notify({ type: "positive", message: $t.t("file upload") + $t.t("success") + "!", position: "top", - timeout: 1000, + timeout: 1500, }); }, onFailed(info: any) { @@ -524,7 +658,7 @@ export default defineComponent({ type: "warning", message: $t.t("file upload") + $t.t("fail") + "!", position: "top", - timeout: 1000, + timeout: 1500, }); loading.value = false; }, diff --git a/src/entities/HttpProtocol.ts b/src/entities/HttpProtocol.ts index 9742269..c0bfd4b 100644 --- a/src/entities/HttpProtocol.ts +++ b/src/entities/HttpProtocol.ts @@ -4,7 +4,9 @@ export namespace HttpProtocol { export const RequestPathUpdateDBBackupFile = "/common/update_db_backup_file"; export const RequestPathDBBackup = "/db_backup"; export const RequestPathListFile = "/list_file"; + export const RequestPathCreateDirectory = "/create_directory"; export const RequestPathDeleteFile = "/delete_file"; + export const RequestPathRenameFile = "/rename_file"; export const HttpUploadTypeNormal = "U_T_Normal"; export const UploadTypeBackgroundImage = "U_T_BACKGROUND_IMAGE"; diff --git a/src/entities/NormalResult.ts b/src/entities/NormalResult.ts new file mode 100644 index 0000000..7d346a4 --- /dev/null +++ b/src/entities/NormalResult.ts @@ -0,0 +1,4 @@ +export default class NormalResult { + success = false; + message = ""; +} diff --git a/src/i18n/zh-CN/index.ts b/src/i18n/zh-CN/index.ts index 32a9992..da016a3 100644 --- a/src/i18n/zh-CN/index.ts +++ b/src/i18n/zh-CN/index.ts @@ -108,4 +108,10 @@ export default { forward: "前进", "cancel upload file": "取消文件上传", "select file": "选择文件", + "file upload": "文件上传", + "file rename": "文件重命名", + "file delete": "文件删除", + "delete file": "文件删除", + "create folder": "新建文件夹", + "input folder name": "输入文件夹名称", };