From 5c1b23421c571e0e926976e20dc169b109c764f9 Mon Sep 17 00:00:00 2001 From: karlis <2995621482@qq.com> Date: Wed, 5 Jul 2023 22:31:14 +0800 Subject: [PATCH] =?UTF-8?q?FileList=E4=BF=AE=E6=94=B9=E6=A0=B7=E5=BC=8F?= =?UTF-8?q?=EF=BC=8C=E4=B8=8A=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AicsKnowledgeBase/qml/component/FileList.qml | 208 ++++++++++-------- .../qml/component/FileListItem.qml | 14 +- AicsKnowledgeBase/res/AUDIO.png | Bin 0 -> 5404 bytes AicsKnowledgeBase/res/OTHER.png | Bin 0 -> 6461 bytes 4 files changed, 125 insertions(+), 97 deletions(-) create mode 100644 AicsKnowledgeBase/res/AUDIO.png create mode 100644 AicsKnowledgeBase/res/OTHER.png diff --git a/AicsKnowledgeBase/qml/component/FileList.qml b/AicsKnowledgeBase/qml/component/FileList.qml index 5e0fb06..ec72db6 100644 --- a/AicsKnowledgeBase/qml/component/FileList.qml +++ b/AicsKnowledgeBase/qml/component/FileList.qml @@ -35,42 +35,14 @@ Item { Component { id: fileListItemHeader - - RowLayout { - id: fileListItemHeaderItem - width: ListView.view.width - height: 48 - - // back to folder button - FluIconButton { - Layout.alignment: Qt.AlignVCenter - id: backButton - width: 24 - height: 24 - iconSource: FluentIcons.ForwardCall - onClicked: { - if (header.count() > 0) { - header.items = header.items.slice(0, header.count() - 1) - } - fileListItemHeaderItem.update() - } + ColumnLayout { + function add(folderName, uuid) { + console.log(header.items) + header.items = header.items.concat([{ + "title": folderName, + "uuid": uuid + }]) } - FluBreadcrumbBar { - id: header - //width: parent.width - height: parent.height - separator: ">" - items: [] - onClickItem: function (model) { - if (model.index + 1 !== count()) { - items = items.slice(0, model.index + 1) - } - } - onItemsChanged: { - fileListItemHeaderItem.update() - } - } - FluButton { Layout.alignment: Qt.AlignRight text: "上传" @@ -78,28 +50,25 @@ Item { console.log("click") fileDialog.open() } - FileDialog { id: fileDialog onAccepted: function () { const size = FileTransferManager.getFileSize( selectedFile) const md5 = FileTransferManager.getFileMd5(selectedFile) - if (size <= 0 || md5 === '') return - var body = { "name": "test2", "brief": "brief", "size": size, "md5": md5, "tags": [], - "parentId": null + "parentId": header.items.length + !== 0 ? header.items[header.items.length - 1].uuid : null } console.log("begin") console.log(JSON.stringify(body)) - Request.post("knowledge/file", JSON.stringify(body), function (res, data) { console.log(res) @@ -113,64 +82,112 @@ Item { } } } + RowLayout { + id: fileListItemHeaderItem + width: ListView.view.width + height: 48 - function add(folderName, uuid) { - console.log(header.items) - header.items = header.items.concat([{ - "title": folderName, - "uuid": uuid - }]) - } - - function getType(suffix) { - if (suffix === "ppt" || suffix === "pptx") - return "PPT" - else if (suffix === "doc" || suffix === "docx") - return "WORD" - } - - function update() { - var uuid = header.items.length - === 0 ? "null" : header.items[header.items.length - 1].uuid - Request.get(uuid, function (response) { - var data = JSON.parse(response) - console.log(data.knowledgeFileAttribute) - fileListModel.clear() - var files = data.children - for (var i = 0; i < files.length; i++) { - var file = files[i] - console.log(file.name) - var modelItem = { - "title": file.name, - "uuid": file.id, - "date": file.createTime + // back to folder button + FluIconButton { + Layout.alignment: Qt.AlignVCenter + id: backButton + width: 24 + height: 24 + iconSource: FluentIcons.ForwardCall + onClicked: { + if (header.count() > 0) { + header.items = header.items.slice( + 0, header.count() - 1) } - if (file.knowledgeFileAttribute === null) { - modelItem.type = "folder" - modelItem.isDir = true - modelItem.size = 0 - } else { - modelItem.isDir = false - modelItem.type = getType( - file.knowledgeFileAttribute.suffix) - modelItem.size = file.knowledgeFileAttribute.size - modelItem.brief = file.knowledgeFileAttribute.brief - modelItem.pageView = file.knowledgeFileAttribute.pageView - modelItem.stars = 0 - // merge file.knowledgeFileAttribute.tags array to a string - var tagString = "" - for (var j = 0; j < file.knowledgeFileAttribute.tags.length; j++) { - if (j != 0) - tagString = tagString + "," - tagString = tagString + file.knowledgeFileAttribute.tags[j].name - } - modelItem.tags = tagString - } - fileListModel.append(modelItem) + fileListItemHeaderItem.update() } - console.log(fileListModel) - listView.currentIndex = -1 - }) + } + FluBreadcrumbBar { + id: header + width: parent.width + height: parent.height + separator: ">" + items: [] + onClickItem: function (model) { + if (model.index + 1 !== count()) { + items = items.slice(0, model.index + 1) + } + } + onItemsChanged: { + fileListItemHeaderItem.update() + } + } + + function getType(suffix) { + if (suffix === "ppt" || suffix === "pptx") + return "PPT" + else if (suffix === "doc" || suffix === "docx") + return "WORD" + else if (suffix === "pdf") + return "PDF" + else if (suffix === "txt") + return "TXT" + else if (suffix === "xls" || suffix === "xlsx") + return "EXCEL" + else if (suffix === "zip" || suffix === "rar") + return "ZIP" + else if (suffix === "png" || suffix === "jpg" + || suffix === "jpeg" || suffix === "gif") + return "IMAGE" + else if (suffix === "mp3" || suffix === "wav") + return "AUDIO" + else if (suffix === "mp4" || suffix === "avi" + || suffix === "rmvb" || suffix === "rm" + || suffix === "wmv" || suffix === "mkv") + return "VIDEO" + else + return "OTHER" + } + + function update() { + var uuid = header.items.length + === 0 ? "null" : header.items[header.items.length - 1].uuid + Request.get("/knowledge/" + uuid, function (response) { + var data = JSON.parse(response) + console.log(data.knowledgeFileAttribute) + fileListModel.clear() + var files = data.children + for (var i = 0; i < files.length; i++) { + var file = files[i] + console.log(file.name) + var modelItem = { + "title": file.name, + "uuid": file.id, + "date"// cut time after 'T' + : file.createTime.substring(0, 10) + } + if (file.knowledgeFileAttribute === null) { + modelItem.type = "folder" + modelItem.isDir = true + modelItem.size = 0 + } else { + modelItem.isDir = false + modelItem.type = getType( + file.knowledgeFileAttribute.suffix) + modelItem.size = file.knowledgeFileAttribute.size + modelItem.brief = file.knowledgeFileAttribute.brief + modelItem.pageView = file.knowledgeFileAttribute.pageView + modelItem.stars = 0 + // merge file.knowledgeFileAttribute.tags array to a string + var tagString = "" + for (var j = 0; j < file.knowledgeFileAttribute.tags.length; j++) { + if (j != 0) + tagString = tagString + "," + tagString = tagString + file.knowledgeFileAttribute.tags[j].name + } + modelItem.tags = tagString + } + fileListModel.append(modelItem) + } + console.log(fileListModel) + listView.currentIndex = -1 + }) + } } } } @@ -206,6 +223,7 @@ Item { function doubleClicked() { listView.currentIndex = index if (model.isDir) { + console.log(listView.headerItem) listView.headerItem.add(model.title, model.uuid) } else { emit: SignalFileOperation.open(model.uuid) diff --git a/AicsKnowledgeBase/qml/component/FileListItem.qml b/AicsKnowledgeBase/qml/component/FileListItem.qml index 8b8d5e4..7516c72 100644 --- a/AicsKnowledgeBase/qml/component/FileListItem.qml +++ b/AicsKnowledgeBase/qml/component/FileListItem.qml @@ -39,11 +39,13 @@ FluArea { Image { id: icon source: type ? "qrc:/AicsKnowledgeBase/res/" + type + ".png" : "" - Layout.preferredHeight: 18 - Layout.preferredWidth: 18 + Layout.preferredHeight: 32 + Layout.preferredWidth: 32 } FluText { id: title + font.bold: true + font.pointSize: 15 text: fileItem.title } } @@ -52,17 +54,23 @@ FluArea { id: brief visible: !fileItem.isDir text: fileItem.brief + Layout.fillWidth: true + wrapMode: Text.WrapAnywhere + elide: Text.ElideRight + maximumLineCount: 2 } RowLayout { id: infoRow visible: !fileItem.isDir FluText { id: date + color: "#5F5F5F" text: fileItem.date } FluText { id: size // cast Byte size to right text size + color: "#5F5F5F" text: fileItem.size > 1024 * 1024 ? (fileItem.size / 1024 / 1024).toFixed( 2) + "MB" : (fileItem.size / 1024).toFixed( @@ -70,10 +78,12 @@ FluArea { } FluText { id: pageView + color: "#5F5F5F" text: fileItem.pageView + "浏览" } FluText { id: stars + color: "#5F5F5F" text: fileItem.stars + "收藏" } } diff --git a/AicsKnowledgeBase/res/AUDIO.png b/AicsKnowledgeBase/res/AUDIO.png new file mode 100644 index 0000000000000000000000000000000000000000..1cc20396579c9abd02e4dc8d41db6b6ea0cf3b6c GIT binary patch literal 5404 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 NPsa#fu5I_|e*k~3z=!|< literal 0 HcmV?d00001 diff --git a/AicsKnowledgeBase/res/OTHER.png b/AicsKnowledgeBase/res/OTHER.png new file mode 100644 index 0000000000000000000000000000000000000000..54a10d1853fc6441334c7560d42ccaf30d3004f8 GIT binary patch literal 6461 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 iv_M293~NAF