From b8581ba3df0301268ba1b87557e71a302d69e60b Mon Sep 17 00:00:00 2001 From: wuyize Date: Fri, 7 Jul 2023 01:36:34 +0800 Subject: [PATCH 1/7] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E8=B0=83=E7=94=A8?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E7=A8=8B=E5=BA=8F=E6=89=93=E5=BC=80=E6=96=87?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AicsKnowledgeBase/qml/component/CustomAppBar.qml | 15 +++++++++++++++ AicsKnowledgeBase/qml/page/ContentPage.qml | 4 ++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/AicsKnowledgeBase/qml/component/CustomAppBar.qml b/AicsKnowledgeBase/qml/component/CustomAppBar.qml index 56ead21..6285759 100644 --- a/AicsKnowledgeBase/qml/component/CustomAppBar.qml +++ b/AicsKnowledgeBase/qml/component/CustomAppBar.qml @@ -117,6 +117,20 @@ Rectangle { Layout.rightMargin: 10 iconSource: FluentIcons.PenPalette iconSize: 14 + onClicked: { + note_menu.open() + } + FluMenu { + id: note_menu + x: parent ? (parent.width - width) / 2 : 0 + y: parent ? parent.height : 0 + FluMenuItem { + text: "收藏的笔记" + } + FluMenuItem { + text: "我的笔记" + } + } } Text { @@ -218,5 +232,6 @@ Rectangle { frameless_helper.setHitTestVisible(btn_maximize) frameless_helper.setHitTestVisible(btn_close) frameless_helper.setHitTestVisible(btn_transfer) + frameless_helper.setHitTestVisible(btn_note) } } diff --git a/AicsKnowledgeBase/qml/page/ContentPage.qml b/AicsKnowledgeBase/qml/page/ContentPage.qml index f2a72d5..7b721d5 100644 --- a/AicsKnowledgeBase/qml/page/ContentPage.qml +++ b/AicsKnowledgeBase/qml/page/ContentPage.qml @@ -66,7 +66,7 @@ FluArea { property int shareCount: 0 property int browsCount: 555 property bool isFavorite: false - property bool isDownload: false + property bool isDownload: UserData.downloadedFiles.indexOf(fileId) != -1 property double fileSize: 0 property string title: "文章标题" property list tags: ["tag 1", "tag 2", "tag 3"] @@ -249,7 +249,7 @@ FluArea { FileTransferManager.download(content_page.fileId, content_page.title) else { - + FileTransferManager.openLocalFile(content_page.title) } } } From 0db2c63f762176104ae4ffe820a2b878d11c5ba7 Mon Sep 17 00:00:00 2001 From: "yang.yongquan" <3395816735@qq.com> Date: Fri, 7 Jul 2023 01:45:03 +0800 Subject: [PATCH 2/7] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86=E7=AC=94?= =?UTF-8?q?=E8=AE=B0=E7=9A=84=E5=B8=83=E5=B1=80=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../qml/component/FromFileItem.qml | 106 ++++++++++++++++++ AicsKnowledgeBase/qml/page/ContentPage.qml | 50 ++++++--- AicsKnowledgeBase/qml/page/CreateNotePage.qml | 54 +++++++-- AicsKnowledgeBase/qml/page/NotePage.qml | 91 ++++++++------- 4 files changed, 240 insertions(+), 61 deletions(-) create mode 100644 AicsKnowledgeBase/qml/component/FromFileItem.qml diff --git a/AicsKnowledgeBase/qml/component/FromFileItem.qml b/AicsKnowledgeBase/qml/component/FromFileItem.qml new file mode 100644 index 0000000..c8a77bd --- /dev/null +++ b/AicsKnowledgeBase/qml/component/FromFileItem.qml @@ -0,0 +1,106 @@ +import QtQuick 2.15 +import FluentUI +import QtQuick.Layouts + +FluArea { + id: fileItem + property string uuid + property string title + property string brief + property string date + property string type + property string suffix + property bool isDir: false + property int size + property int pageView + property var tags: [] + property int stars + property var colorList: ["blue", "green", "orange", "red", "yellow", "purple", "pink", "brown", "teal", "cyan", "gray", "darkgray"] + signal tagClicked(string tag) + + ColumnLayout { + id: row + spacing: 10 + + ColumnLayout { + id: clickable + anchors.fill: parent + MouseArea { + anchors.fill: parent + acceptedButtons: Qt.LeftButton | Qt.RightButton + onDoubleClicked: { + fileItem.parent.doubleClicked() + } + } + RowLayout { + id: titleRow + Image { + id: icon + source: type ? "qrc:/AicsKnowledgeBase/res/" + type + ".png" : "" + Layout.preferredHeight: 24 + Layout.preferredWidth: 24 + } + FluText { + id: title + font.bold: true + font.pointSize: 12 + text: fileItem.title + } + } + + FluText { + id: brief + visible: !fileItem.isDir + text: fileItem.brief + Layout.fillWidth: true + wrapMode: Text.WrapAnywhere + elide: Text.ElideRight + maximumLineCount: 2 + textFormat: Text.RichText + } + 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( + 2) + "KB" + } + FluText { + id: pageView + color: "#5F5F5F" + text: fileItem.pageView + "浏览" + } + FluText { + id: stars + color: "#5F5F5F" + text: fileItem.stars + "收藏" + } + } + } + RowLayout { + visible: !fileItem.isDir + Repeater { + model: fileItem.tags + delegate: FluTextButton { + text: "#" + fileItem.tags[index] + normalColor: colorList[index % colorList.length] + font.pixelSize: 12 + Layout.preferredWidth: 50 + onClicked: { + emit: tagClicked(text) + } + } + } + } + } +} diff --git a/AicsKnowledgeBase/qml/page/ContentPage.qml b/AicsKnowledgeBase/qml/page/ContentPage.qml index f2a72d5..f5cbcc3 100644 --- a/AicsKnowledgeBase/qml/page/ContentPage.qml +++ b/AicsKnowledgeBase/qml/page/ContentPage.qml @@ -28,11 +28,12 @@ FluArea { backgroundColor: "#f9f9f9" NoteList { id: noteList + noteListModel: content_page.noteListModel onOpen: function handle(noteId) { emit: SignalFileOperation.openNote(noteId) } onCreateNote: function handle() { - console.log("create note") + emit: SignalFileOperation.createNote() } } } @@ -74,6 +75,7 @@ FluArea { property string brief: "这是一个简介" property string fileUrl: "https://api.hammer-hfut.tk:233/aics/file/" property string suffix: "md" + property ListModel noteListModel function getType(suffix) { if (suffix === "md") @@ -88,14 +90,14 @@ FluArea { function loadFile(knowledgeFileId) { content_area.knowledgeFileId = knowledgeFileId console.log(knowledgeFileId) - Request.get("knowledge/" + knowledgeFileId, + Request.get("knowledge/" + knowledgeFileId + "/detail", function (response, data) { content_page.publishTime = data.createTime content_page.title = data.name content_page.fileId = data.knowledgeFileAttribute.id + content_page.suffix = data.knowledgeFileAttribute.suffix - content_area.type = getType( - data.knowledgeFileAttribute.suffix) + content_area.type = getType(content_page.suffix) console.log(content_area.type) var tagString = "" @@ -109,19 +111,39 @@ FluArea { content_page.brief = data.knowledgeFileAttribute.brief content_page.browsCount = data.knowledgeFileAttribute.pageView - // var starers = data.knowledgeFileAttribute.starers - // for (var i = 0; i < starers.length; i++) { + isFavorite = false + var starers = data.knowledgeFileAttribute.starers + for (var i = 0; i < starers.length; i++) { + if (starers[i].id === UserData.userId) { + isFavorite = true + } + } + content_page.favoriteCount = starers.length - // } - // content_page.favoriteCount = starers.length - if (content_area.type == "MD") { + noteListModel.clear() + var notes = data.knowledgeFileAttribute.notes + noteCount = notes.length + for (var i = 0; i < notes.length; i++) { + noteListModel.append({ + "uuid": notes[i].id, + "title": notes[i].title, + "brief": notes[i].content, + "author": notes[i].author.username, + "pageView": notes[i].pageView, + "stars": notes[i].starrers.length, + "date": notes[i].createTime + }) + } + + if (content_area.type === "MD") { // console.log(content_area.type) FileTransferManager.getMarkdown( content_page.fileId) - } else if (content_area.type == "VIDEO") { + } else if (content_area.type === "VIDEO") { + console.log(fileUrl + "static/" + fileId + "." + suffix) content_view.push(video_view, { - "url": fileUrl + "static/" - + fileId + "." + suffix + "source": fileUrl + "static/" + fileId + + "." + suffix }) } else { Request.get("knowledge/" + knowledgeFileId + "/preview/external", @@ -316,13 +338,15 @@ FluArea { id: content_view Layout.fillWidth: true height: 500 + //initialItem: video_view } Component { id: video_view FluMediaPlayer { width: parent.width - implicitHeight: width * 9 / 16. + height: width * 9 / 16. + source: "https://api.hammer-hfut.tk:233/aics/file/static/3f28fea9-27f1-4a85-9d3e-def187c4456e.mp4" } } Component { diff --git a/AicsKnowledgeBase/qml/page/CreateNotePage.qml b/AicsKnowledgeBase/qml/page/CreateNotePage.qml index ba3fd62..b61be97 100644 --- a/AicsKnowledgeBase/qml/page/CreateNotePage.qml +++ b/AicsKnowledgeBase/qml/page/CreateNotePage.qml @@ -15,10 +15,19 @@ FluArea { id: edit_area paddings: 0 backgroundColor: "#f9f9f9" + property string uuid + property string fileType: "OTHER" + property string fileTitle: "dgfgf" + property string noteId property string noteTitle property string noteContent + property bool isModifying: false Component.onCompleted: { + if (isModifying) { + + } + noteTitle = Qt.binding(function () { return input_title.text }) @@ -34,14 +43,42 @@ FluArea { topPadding: 5 rightPadding: 5 bottomPadding: 0 - RowLayout { - FluIconButton { - iconSize: 12 - iconSource: FluentIcons.Back - onClicked: { - emit: SignalFileOperation.back() + + Item { + Layout.fillWidth: true + implicitHeight: 30 + Layout.leftMargin: 5 + Layout.bottomMargin: 10 + MouseArea { + anchors.fill: parent + onDoubleClicked: { + emit: SignalFileOperation.open(note_page.uuid) + } + } + RowLayout { + id: titleRow + RowLayout { + FluIconButton { + iconSize: 12 + iconSource: FluentIcons.Back + onClicked: { + emit: SignalFileOperation.back() + } + } + } + Image { + id: icon + source: edit_area.fileType ? "qrc:/AicsKnowledgeBase/res/" + + edit_area.fileType + ".png" : "" + Layout.preferredHeight: 24 + Layout.preferredWidth: 24 + } + FluText { + id: title + font.bold: true + font.pointSize: 12 + text: edit_area.fileTitle } - Layout.margins: -5 } } Item { @@ -90,8 +127,7 @@ FluArea { FluFilledButton { text: "上传" onClicked: { - console.log(noteTitle) - console.log(noteContent) + } } FluButton { diff --git a/AicsKnowledgeBase/qml/page/NotePage.qml b/AicsKnowledgeBase/qml/page/NotePage.qml index 2540182..25822e8 100644 --- a/AicsKnowledgeBase/qml/page/NotePage.qml +++ b/AicsKnowledgeBase/qml/page/NotePage.qml @@ -41,12 +41,14 @@ FluArea { property int browsCount: 555 property bool isLike: false property bool isFavorite: false - property double fileSize: 455 property string title: "文章标题" property list tags: ["tag 1", "tag 2", "tag 3"] property string publishTime: "2020-01-01" property string brief: "这是一个简介" - property var fromFile + + property string uuid: "354" + property string fileTitle: "dfnfgf" + property string fileType: "OTHER" function getType(suffix) { if (suffix === "md") @@ -63,29 +65,25 @@ FluArea { } Component.onCompleted: { - Request.get("knowledge/", function (response, data) { - fromFile = { - "uuid": data.id, - "fuuid": data.knowledgeFileAttribute.id, - "title": data.name, - "date": data.createTime, - "brief": data.knowledgeFileAttribute.brief, - "suffix": data.knowledgeFileAttribute.suffix, - "type": getType(data.knowledgeFileAttribute.suffix), - "pageView": data.knowledgeFileAttribute.pageView, - "size": data.knowledgeFileAttribute.size - } - fromFile.stars = 0 + // Request.get("knowledge/", function (response, data) { + // fromFile = { + // note_page.uuid = data.id, + // note_page.fileTitle = data.name, + // note_page.fileType = getType(data.knowledgeFileAttribute.suffix), - var tagString = "" - for (var j = 0; j < file.knowledgeFileAttribute.tags.length; j++) { - if (j != 0) - tagString = tagString + "," - tagString = tagString + file.knowledgeFileAttribute.tags[j].name - } - fromFile.tags = tagString - }) + // } + + // note_page.fileStars = 0 + + // var tagString = "" + // for (var j = 0; j < file.knowledgeFileAttribute.tags.length; j++) { + // if (j != 0) + // tagString = tagString + "," + // tagString = tagString + file.knowledgeFileAttribute.tags[j].name + // } + // note_page.fileTags = tagString + // }) } FluIconButton { @@ -172,7 +170,7 @@ FluArea { FluArea { Layout.fillWidth: true - implicitHeight: 100 + implicitHeight: 140 ColumnLayout { RowLayout { width: parent.width @@ -214,27 +212,42 @@ FluArea { } } } + + Item { + Layout.fillWidth: true + implicitHeight: 30 + Layout.leftMargin: 10 + MouseArea { + anchors.fill: parent + onDoubleClicked: { + emit: SignalFileOperation.open(note_page.uuid) + } + } + RowLayout { + id: titleRow + Image { + id: icon + source: note_page.fileType ? "qrc:/AicsKnowledgeBase/res/" + + note_page.fileType + ".png" : "" + Layout.preferredHeight: 24 + Layout.preferredWidth: 24 + } + FluText { + id: title + font.bold: true + font.pointSize: 12 + text: note_page.fileTitle + } + } + } } } + NoteEditPage { id: text_view noteId: "255454" width: parent.width - implicitHeight: 400 + implicitHeight: width * 9 / 16 } - // FistListItem { - // id: fileListItem - // uuid: fromFile.uuid - // fuuid: fromFile.fuuid - // title: fromFile.title - // date: fromFile.date - // brief: fromFile.brief - // type: fromFile.type - // pageView: fromFile.pageView - // size: fromFile.size - // stars: fromFile.stars - // tags: fromFile.tags === null || fromFile.tags === undefined - // || fromFile.tags === "" ? [] : fromFile.tags.split(",") - // } } } From e10fddb1889b95ae2f5b3db66479ac528a9f96e3 Mon Sep 17 00:00:00 2001 From: wuyize Date: Fri, 7 Jul 2023 01:57:39 +0800 Subject: [PATCH 3/7] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E4=BA=86FileListItem?= =?UTF-8?q?=E7=9A=84=E8=AD=A6=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AicsKnowledgeBase/qml/component/FileList.qml | 41 +---- .../qml/component/FileListItem.qml | 145 +++++++++--------- .../qml/component/UploadButton.qml | 6 +- .../src/FileTransferListModel.cpp | 2 +- 4 files changed, 80 insertions(+), 114 deletions(-) diff --git a/AicsKnowledgeBase/qml/component/FileList.qml b/AicsKnowledgeBase/qml/component/FileList.qml index e0a0cc2..e5d4149 100644 --- a/AicsKnowledgeBase/qml/component/FileList.qml +++ b/AicsKnowledgeBase/qml/component/FileList.qml @@ -164,47 +164,8 @@ Item { } } } - FluButton { - id: uploadIcon + UploadButton { Layout.alignment: Qt.AlignRight - text: "上传" - onClicked: function () { - console.log("click") - fileDialog.open() - } - FileDialog { - id: fileDialog - onAccepted: function () { - let name = FileTransferManager.getFileName( - selectedFile) - const size = FileTransferManager.getFileSize( - selectedFile) - const md5 = FileTransferManager.getFileMd5( - selectedFile) - if (size <= 0 || md5 === '') - return - var body = { - "name": name, - "brief": "brief", - "size": size, - "md5": md5, - "tags": [], - "parentId": header.items.length !== 0 ? header.items[header.items.length - 1].uuid : null - } - console.log("begin") - Request.post("knowledge/file", - JSON.stringify(body), - function (res, data) { - console.log(res) - console.log(data) - FileTransferManager.upload( - selectedFile, data.id, - data.ticket, name) - }, function (res, data) { - console.log(res) - }) - } - } } } RowLayout { diff --git a/AicsKnowledgeBase/qml/component/FileListItem.qml b/AicsKnowledgeBase/qml/component/FileListItem.qml index 68c7053..862f8c6 100644 --- a/AicsKnowledgeBase/qml/component/FileListItem.qml +++ b/AicsKnowledgeBase/qml/component/FileListItem.qml @@ -84,83 +84,86 @@ FluArea { } } + MouseArea { + anchors.fill: row + acceptedButtons: Qt.LeftButton | Qt.RightButton + onDoubleClicked: { + fileItem.parent.doubleClicked() + } + onClicked: { + if (mouse.button === Qt.RightButton) { + menu.popup() + } + } + } + + ColumnLayout { + id: clickable + anchors.fill: row + + RowLayout { + id: titleRow + Image { + id: icon + source: type ? "qrc:/AicsKnowledgeBase/res/" + type + ".png" : "" + Layout.preferredHeight: 24 + Layout.preferredWidth: 24 + } + FluText { + id: title + font.bold: true + font.pointSize: 12 + text: fileItem.title + textFormat: Text.RichText + } + } + + FluText { + id: brief + visible: !fileItem.isDir + text: fileItem.brief + Layout.fillWidth: true + wrapMode: Text.WrapAnywhere + elide: Text.ElideRight + maximumLineCount: 2 + textFormat: Text.RichText + } + 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( + 2) + "KB" + } + FluText { + id: pageView + color: "#5F5F5F" + text: fileItem.pageView + "浏览" + } + FluText { + id: stars + color: "#5F5F5F" + text: fileItem.stars + "收藏" + } + } + } + ColumnLayout { id: row anchors.fill: parent anchors.margins: 10 spacing: 10 - ColumnLayout { - id: clickable - anchors.fill: parent - MouseArea { - anchors.fill: parent - acceptedButtons: Qt.LeftButton | Qt.RightButton - onDoubleClicked: { - fileItem.parent.doubleClicked() - } - onClicked: { - if (mouse.button === Qt.RightButton) { - menu.popup() - } - } - } - RowLayout { - id: titleRow - Image { - id: icon - source: type ? "qrc:/AicsKnowledgeBase/res/" + type + ".png" : "" - Layout.preferredHeight: 24 - Layout.preferredWidth: 24 - } - FluText { - id: title - font.bold: true - font.pointSize: 12 - text: fileItem.title - textFormat: Text.RichText - } - } - - FluText { - id: brief - visible: !fileItem.isDir - text: fileItem.brief - Layout.fillWidth: true - wrapMode: Text.WrapAnywhere - elide: Text.ElideRight - maximumLineCount: 2 - textFormat: Text.RichText - } - 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( - 2) + "KB" - } - FluText { - id: pageView - color: "#5F5F5F" - text: fileItem.pageView + "浏览" - } - FluText { - id: stars - color: "#5F5F5F" - text: fileItem.stars + "收藏" - } - } - } RowLayout { visible: !fileItem.isDir Repeater { diff --git a/AicsKnowledgeBase/qml/component/UploadButton.qml b/AicsKnowledgeBase/qml/component/UploadButton.qml index 3b3da65..7605c86 100644 --- a/AicsKnowledgeBase/qml/component/UploadButton.qml +++ b/AicsKnowledgeBase/qml/component/UploadButton.qml @@ -14,7 +14,8 @@ FluButton { text: "上传" onClicked: function () { console.log("click") - fileDialog.open() + //fileDialog.open() + popup.open() } FileDialog { id: fileDialog @@ -52,7 +53,7 @@ FluButton { } } - Row { + Column { id: content topPadding: 14 leftPadding: 20 @@ -68,6 +69,7 @@ FluButton { width: parent.width - parent.leftPadding - parent.rightPadding placeholderText: "请输入简介" } + Tag {} } Rectangle { diff --git a/AicsKnowledgeBase/src/FileTransferListModel.cpp b/AicsKnowledgeBase/src/FileTransferListModel.cpp index 46644e4..069efa8 100644 --- a/AicsKnowledgeBase/src/FileTransferListModel.cpp +++ b/AicsKnowledgeBase/src/FileTransferListModel.cpp @@ -11,7 +11,7 @@ FileTransferListModel::FileTransferListModel(QObject *parent) m_roleName.insert(kSpeedRole, "speed"); m_roleName.insert(kPausedRole, "paused"); - m_data.append({true, "id", "name", 30, 100, 30}); + //m_data.append({true, "id", "name", 30, 100, 30}); } From b67075a3ba4d373403037ba9ac53945a20046d79 Mon Sep 17 00:00:00 2001 From: wuyize Date: Fri, 7 Jul 2023 02:28:21 +0800 Subject: [PATCH 4/7] =?UTF-8?q?=E4=BF=AE=E6=94=B9Tag=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AicsKnowledgeBase/qml/component/Tag.qml | 107 +++++++++++------- .../qml/component/UploadButton.qml | 11 +- 2 files changed, 73 insertions(+), 45 deletions(-) diff --git a/AicsKnowledgeBase/qml/component/Tag.qml b/AicsKnowledgeBase/qml/component/Tag.qml index 5a609ab..b6f85c8 100644 --- a/AicsKnowledgeBase/qml/component/Tag.qml +++ b/AicsKnowledgeBase/qml/component/Tag.qml @@ -16,30 +16,32 @@ Rectangle { radius: 5 clip: true - ListModel { id: tagListModel } + ListModel { + id: tagListModel + } property ListModel tagList: tagListModel - property var tagMap:[] - property var presetsTags:[] - property var presetsTagsItem:[] + property var tagMap: [] + property var presetsTags: [] + property var presetsTagsItem: [] Component.onCompleted: { - Request.get("tag?name", - function(result, data){ -// console.log("success") -// console.log(result) -// console.log(data.length) - for(var i =0;i Date: Fri, 7 Jul 2023 02:38:52 +0800 Subject: [PATCH 5/7] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AicsKnowledgeBase/qml/MainWindow.qml | 21 +++- .../qml/component/FromFileItem.qml | 106 ------------------ AicsKnowledgeBase/qml/component/NoteList.qml | 9 +- .../qml/component/NoteListItem.qml | 1 + .../qml/global/SignalFileOperation.qml | 5 +- AicsKnowledgeBase/qml/page/ContentPage.qml | 17 ++- AicsKnowledgeBase/qml/page/CreateNotePage.qml | 42 +++++-- AicsKnowledgeBase/qml/page/NotePage.qml | 31 +++-- 8 files changed, 87 insertions(+), 145 deletions(-) delete mode 100644 AicsKnowledgeBase/qml/component/FromFileItem.qml diff --git a/AicsKnowledgeBase/qml/MainWindow.qml b/AicsKnowledgeBase/qml/MainWindow.qml index 9763a23..4da2a86 100644 --- a/AicsKnowledgeBase/qml/MainWindow.qml +++ b/AicsKnowledgeBase/qml/MainWindow.qml @@ -107,17 +107,30 @@ FluWindow { "knowledgeFileId": file }) } - function onOpenNote(note) { + function onOpenNote(note, authorId) { stack_view.push(note_view, { - "noteFileId": note + "noteFileId": note, + "authorId": authorId }) } function onBack() { if (stack_view.depth > 0) stack_view.pop() } - function onCreateNote() { - stack_view.push(create_note_view) + function onCreateNote(file, fileType, fileTitle) { + stack_view.push(note_view, { + "knowledgeFileId": file, + "fileType": fileType, + "fileTitle": fileTitle + }) + } + function onModifyNote(file, fileType, fileTitle, note) { + stack_view.push(note_view, { + "knowledgeFileId": file, + "fileType": fileType, + "fileTitle": fileTitle, + "noteId": note + }) } } diff --git a/AicsKnowledgeBase/qml/component/FromFileItem.qml b/AicsKnowledgeBase/qml/component/FromFileItem.qml deleted file mode 100644 index c8a77bd..0000000 --- a/AicsKnowledgeBase/qml/component/FromFileItem.qml +++ /dev/null @@ -1,106 +0,0 @@ -import QtQuick 2.15 -import FluentUI -import QtQuick.Layouts - -FluArea { - id: fileItem - property string uuid - property string title - property string brief - property string date - property string type - property string suffix - property bool isDir: false - property int size - property int pageView - property var tags: [] - property int stars - property var colorList: ["blue", "green", "orange", "red", "yellow", "purple", "pink", "brown", "teal", "cyan", "gray", "darkgray"] - signal tagClicked(string tag) - - ColumnLayout { - id: row - spacing: 10 - - ColumnLayout { - id: clickable - anchors.fill: parent - MouseArea { - anchors.fill: parent - acceptedButtons: Qt.LeftButton | Qt.RightButton - onDoubleClicked: { - fileItem.parent.doubleClicked() - } - } - RowLayout { - id: titleRow - Image { - id: icon - source: type ? "qrc:/AicsKnowledgeBase/res/" + type + ".png" : "" - Layout.preferredHeight: 24 - Layout.preferredWidth: 24 - } - FluText { - id: title - font.bold: true - font.pointSize: 12 - text: fileItem.title - } - } - - FluText { - id: brief - visible: !fileItem.isDir - text: fileItem.brief - Layout.fillWidth: true - wrapMode: Text.WrapAnywhere - elide: Text.ElideRight - maximumLineCount: 2 - textFormat: Text.RichText - } - 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( - 2) + "KB" - } - FluText { - id: pageView - color: "#5F5F5F" - text: fileItem.pageView + "浏览" - } - FluText { - id: stars - color: "#5F5F5F" - text: fileItem.stars + "收藏" - } - } - } - RowLayout { - visible: !fileItem.isDir - Repeater { - model: fileItem.tags - delegate: FluTextButton { - text: "#" + fileItem.tags[index] - normalColor: colorList[index % colorList.length] - font.pixelSize: 12 - Layout.preferredWidth: 50 - onClicked: { - emit: tagClicked(text) - } - } - } - } - } -} diff --git a/AicsKnowledgeBase/qml/component/NoteList.qml b/AicsKnowledgeBase/qml/component/NoteList.qml index 539c917..b1e8031 100644 --- a/AicsKnowledgeBase/qml/component/NoteList.qml +++ b/AicsKnowledgeBase/qml/component/NoteList.qml @@ -5,7 +5,7 @@ import "qrc:///AicsKnowledgeBase/qml/global" Item { anchors.fill: parent - signal open(string note) + signal open(string note, string authorId) signal createNote width: parent.width - 8 property ListModel noteListModel: ListModel { @@ -14,6 +14,7 @@ Item { title: "超级无敌报错" brief: "file:///D:/academic/2023-qtBig/AicsKnowledgeBase_client/AicsKnowledgeBase/qml/component/NoteList.qml:41:21: Unable to assign [undefined] to QString" author: "admin" + authorId: "345" pageView: 123 stars: 27 date: "2022-02-02" @@ -23,6 +24,7 @@ Item { title: "Qt布局" brief: "锚定(anchors)在确定父子组件之间,同级组件之间的相对位置时非常常用,若使用锚定方式确定子组件与父组件之间的位置关系,使用 top,bottom,left,right, topMargin,bottomMargin,leftMargin,rightMargin进行上下左右对齐,以及对齐后的留白距离。若要使子组件在父组件的水平,垂直居中,使用:" author: "超级无敌长的账户名" + authorId: "345" pageView: 123 stars: 27 date: "2022-02-02" @@ -32,6 +34,7 @@ Item { title: "Qt布局" brief: "锚定(anchors)在确定父子组件之间,同级组件之间的相对位置时非常常用,若使用锚定方式确定子组件与父组件之间的位置关系,使用 top,bottom,left,right, topMargin,bottomMargin,leftMargin,rightMargin进行上下左右对齐,以及对齐后的留白距离。若要使子组件在父组件的水平,垂直居中,使用:" author: "超级无敌长的账户名" + authorId: "345" pageView: 123 stars: 27 date: "2022-02-02" @@ -41,6 +44,7 @@ Item { title: "Qt布局" brief: "锚定(anchors)在确定父子组件之间,同级组件之间的相对位置时非常常用,若使用锚定方式确定子组件与父组件之间的位置关系,使用 top,bottom,left,right, topMargin,bottomMargin,leftMargin,rightMargin进行上下左右对齐,以及对齐后的留白距离。若要使子组件在父组件的水平,垂直居中,使用:" author: "超级无敌长的账户名" + authorId: "345" pageView: 123 stars: 27 date: "2022-02-02" @@ -87,7 +91,7 @@ Item { MouseArea { anchors.fill: parent onClicked: { - open(model.uuid) + open(model.uuid, model.authorId) } } NoteListItem { @@ -100,6 +104,7 @@ Item { brief: model.brief pageView: model.pageView author: model.author + authorId: model.authorId stars: model.stars } } diff --git a/AicsKnowledgeBase/qml/component/NoteListItem.qml b/AicsKnowledgeBase/qml/component/NoteListItem.qml index 9eaba75..28d8297 100644 --- a/AicsKnowledgeBase/qml/component/NoteListItem.qml +++ b/AicsKnowledgeBase/qml/component/NoteListItem.qml @@ -11,6 +11,7 @@ FluArea { property int pageView property int stars property string author + property string authorId ColumnLayout { id: row diff --git a/AicsKnowledgeBase/qml/global/SignalFileOperation.qml b/AicsKnowledgeBase/qml/global/SignalFileOperation.qml index f893dbd..19eaf27 100644 --- a/AicsKnowledgeBase/qml/global/SignalFileOperation.qml +++ b/AicsKnowledgeBase/qml/global/SignalFileOperation.qml @@ -4,7 +4,8 @@ import QtQuick QtObject { signal open(string file) - signal openNote(string note) - signal createNote + signal openNote(string note, string authorId) + signal createNote(string file, string fileType, string fileTitle) + signal modifyNote(string file, string fileType, string fileTitle, string note) signal back } diff --git a/AicsKnowledgeBase/qml/page/ContentPage.qml b/AicsKnowledgeBase/qml/page/ContentPage.qml index 8c026a6..0afe1b6 100644 --- a/AicsKnowledgeBase/qml/page/ContentPage.qml +++ b/AicsKnowledgeBase/qml/page/ContentPage.qml @@ -29,11 +29,13 @@ FluArea { NoteList { id: noteList noteListModel: content_page.noteListModel - onOpen: function handle(noteId) { - emit: SignalFileOperation.openNote(noteId) + onOpen: function handle(noteId, authorId) { + emit: SignalFileOperation.openNote(noteId, authorId) } onCreateNote: function handle() { - emit: SignalFileOperation.createNote() + emit: SignalFileOperation.createNote( + content_area.knowledgeFileId, content_area.type, + content_page.title) } } } @@ -96,6 +98,7 @@ FluArea { content_page.title = data.name content_page.fileId = data.knowledgeFileAttribute.id content_page.suffix = data.knowledgeFileAttribute.suffix + content_page.fileSize = data.knowledgeFileAttribute.size content_area.type = getType(content_page.suffix) console.log(content_area.type) @@ -129,6 +132,7 @@ FluArea { "title": notes[i].title, "brief": notes[i].content, "author": notes[i].author.username, + "authorId": notes[i].author.id, "pageView": notes[i].pageView, "stars": notes[i].starrers.length, "date": notes[i].createTime @@ -289,9 +293,10 @@ FluArea { } FluText { padding: 10 - text: fileSize > 1024 * 1024 ? (fileSize / 1024 / 1024).toFixed( - 2) + "MB" : (fileSize / 1024).toFixed( - 2) + "KB" + text: content_page.fileSize > 1024 + * 1024 ? (content_page.fileSize / 1024 / 1024).toFixed( + 2) + "MB" : (content_page.fileSize / 1024).toFixed( + 2) + "KB" } FluText { padding: 10 diff --git a/AicsKnowledgeBase/qml/page/CreateNotePage.qml b/AicsKnowledgeBase/qml/page/CreateNotePage.qml index b61be97..b33fb13 100644 --- a/AicsKnowledgeBase/qml/page/CreateNotePage.qml +++ b/AicsKnowledgeBase/qml/page/CreateNotePage.qml @@ -15,17 +15,25 @@ FluArea { id: edit_area paddings: 0 backgroundColor: "#f9f9f9" - property string uuid + property string knowledgeFileId property string fileType: "OTHER" property string fileTitle: "dgfgf" - property string noteId - property string noteTitle - property string noteContent + property string noteFileId + property string noteTitle: "" + property string noteContent: "" + property var tags: [] property bool isModifying: false Component.onCompleted: { if (isModifying) { - + Request.getSearch("/search/note/" + noteFileId + "/content", + function (response, data) { + noteTitle = data.title + noteContent = data.content + input_title.text = noteTitle + input_md.contentMd = noteContent + tags = data.tags + }) } noteTitle = Qt.binding(function () { @@ -52,7 +60,7 @@ FluArea { MouseArea { anchors.fill: parent onDoubleClicked: { - emit: SignalFileOperation.open(note_page.uuid) + emit: SignalFileOperation.open(note_page.knowledgeFileId) } } RowLayout { @@ -99,6 +107,7 @@ FluArea { padding: 10 placeholderText: "单行输入框" implicitWidth: parent.width + font.pointSize: 12 } } } @@ -127,11 +136,30 @@ FluArea { FluFilledButton { text: "上传" onClicked: { - + if (noteTitle.trim() !== "" && noteContent !== "") { + if (isModifying) { + Request.post("note", { + "title": noteTitle, + "content": noteContent, + "tags": [], + "linkingKnowledgeFiles": [knowledgeFileId] + }) + } else { + Request.put("note/" + noteFileId, { + "title": noteTitle, + "content": noteContent, + "tags": [], + "linkingKnowledgeFiles": [knowledgeFileId] + }) + } + } } } FluButton { text: "取消" + onClicked: { + emit: SignalFileOperation.back() + } } } } diff --git a/AicsKnowledgeBase/qml/page/NotePage.qml b/AicsKnowledgeBase/qml/page/NotePage.qml index 25822e8..0a413cf 100644 --- a/AicsKnowledgeBase/qml/page/NotePage.qml +++ b/AicsKnowledgeBase/qml/page/NotePage.qml @@ -65,25 +65,20 @@ FluArea { } Component.onCompleted: { + Request.getSearch("/", function (response, data) { + note_page.uuid = data.id + note_page.fileTitle = data.name + note_page.fileType = getType(data.knowledgeFileAttribute.suffix) + note_page.fileStars = 0 - // Request.get("knowledge/", function (response, data) { - // fromFile = { - // note_page.uuid = data.id, - // note_page.fileTitle = data.name, - // note_page.fileType = getType(data.knowledgeFileAttribute.suffix), - - // } - - // note_page.fileStars = 0 - - // var tagString = "" - // for (var j = 0; j < file.knowledgeFileAttribute.tags.length; j++) { - // if (j != 0) - // tagString = tagString + "," - // tagString = tagString + file.knowledgeFileAttribute.tags[j].name - // } - // note_page.fileTags = tagString - // }) + var tagString = "" + for (var j = 0; j < file.knowledgeFileAttribute.tags.length; j++) { + if (j != 0) + tagString = tagString + "," + tagString = tagString + file.knowledgeFileAttribute.tags[j].name + } + note_page.fileTags = tagString + }) } FluIconButton { From 234c24e9f05affd9f0b2e6c4256a896ae64be942 Mon Sep 17 00:00:00 2001 From: wuyize Date: Fri, 7 Jul 2023 03:10:40 +0800 Subject: [PATCH 6/7] =?UTF-8?q?=E4=BF=AE=E6=94=B9FileList?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AicsKnowledgeBase/qml/component/FileList.qml | 20 +++++++++--------- .../qml/component/FileListItem.qml | 1 + .../qml/component/UploadButton.qml | 15 ++++++------- AicsKnowledgeBase/res/FOLDER.png | Bin 2846 -> 1339 bytes AicsKnowledgeBase/res/MUSIC.png | Bin 0 -> 1650 bytes AicsKnowledgeBase/res/OTHER.png | Bin 6461 -> 1266 bytes AicsKnowledgeBase/res/PDF.png | Bin 6643 -> 2166 bytes AicsKnowledgeBase/res/PPT.png | Bin 6370 -> 1811 bytes AicsKnowledgeBase/res/VIDEO.png | Bin 7711 -> 1588 bytes AicsKnowledgeBase/res/WORD.png | Bin 7047 -> 2011 bytes 10 files changed, 18 insertions(+), 18 deletions(-) create mode 100644 AicsKnowledgeBase/res/MUSIC.png diff --git a/AicsKnowledgeBase/qml/component/FileList.qml b/AicsKnowledgeBase/qml/component/FileList.qml index e5d4149..c2b2e0b 100644 --- a/AicsKnowledgeBase/qml/component/FileList.qml +++ b/AicsKnowledgeBase/qml/component/FileList.qml @@ -126,9 +126,15 @@ Item { return "OTHER" } RowLayout { - Layout.preferredWidth: parent.width + Layout.alignment: Qt.AlignRight + //Layout.preferredWidth: parent.width + layoutDirection: Qt.RightToLeft + UploadButton { + //Layout.alignment: Qt.AlignRight + header: header + } Item { - anchors.right: uploadBtn.left + //anchors.right: uploadBtn.left height: 28 width: 28 InputDialog { @@ -153,20 +159,14 @@ Item { } } - Image { - source: "qrc:/AicsKnowledgeBase/res/createFolder.png" - anchors.fill: parent - } - MouseArea { + FluIconButton { anchors.fill: parent + iconSource: FluentIcons.NewFolder onClicked: { dialog.open() } } } - UploadButton { - Layout.alignment: Qt.AlignRight - } } RowLayout { id: fileListItemHeaderItem diff --git a/AicsKnowledgeBase/qml/component/FileListItem.qml b/AicsKnowledgeBase/qml/component/FileListItem.qml index 862f8c6..63c43ae 100644 --- a/AicsKnowledgeBase/qml/component/FileListItem.qml +++ b/AicsKnowledgeBase/qml/component/FileListItem.qml @@ -108,6 +108,7 @@ FluArea { source: type ? "qrc:/AicsKnowledgeBase/res/" + type + ".png" : "" Layout.preferredHeight: 24 Layout.preferredWidth: 24 + fillMode: Image.PreserveAspectFit } FluText { id: title diff --git a/AicsKnowledgeBase/qml/component/UploadButton.qml b/AicsKnowledgeBase/qml/component/UploadButton.qml index b41c740..070882b 100644 --- a/AicsKnowledgeBase/qml/component/UploadButton.qml +++ b/AicsKnowledgeBase/qml/component/UploadButton.qml @@ -10,12 +10,12 @@ FluButton { property var header property var currentSelectedFile: null - Layout.alignment: Qt.AlignRight + //Layout.alignment: Qt.AlignRight text: "上传" onClicked: function () { console.log("click") - //fileDialog.open() - popup.open() + fileDialog.open() + //popup.open() } FileDialog { id: fileDialog @@ -110,14 +110,13 @@ FluButton { Layout.fillHeight: true text: "上传" onClicked: { + popup.close() + var tagIds = [] for (var i = 0; i < tags.tagList.count; i++) { console.log(tags.tagList.get(i).tag) console.log(tags.tagList.get(i).id) + tagIds.push(tags.tagList.get(i).id) } - - return - - popup.close() let name = FileTransferManager.getFileName( currentSelectedFile) const size = FileTransferManager.getFileSize( @@ -131,7 +130,7 @@ FluButton { "brief": brief_textbox.text, "size": size, "md5": md5, - "tags": [], + "tags": tagIds, "parentId": currentParentId() } console.log("begin") diff --git a/AicsKnowledgeBase/res/FOLDER.png b/AicsKnowledgeBase/res/FOLDER.png index 799762cb77d61e1a7fbb6ac54f5331f4497f50aa..27eda1d3e93460ce1700524f80192c6e2ae89778 100644 GIT binary patch literal 1339 zcmeAS@N?(olHy`uVBq!ia0vp^(}B2wgAGWs`TULoQjEnx?oJHr&dI!FU|{*`>Eakt z5%>1?!64yCk@kg)Aotv z<6CMO#vX8Blh3O2^Y?MeOPig2`0cuVp813w9~~J38O6`0>ag;}C`=G#n69JSe6W=< zlCj|AB_oL#2_l4kTq`)bWP5hn>&;Itzxq==UH)pxi`k2JomO4*>-)4vU7q>(mwh{O z=Q}sArCGnSu{5*pe=bjuj=YEMY1iI_o&FFw`}hHK_rs|XZ#Jzll)e7uoA|$~NT!(R zngw(q3=!d)Kq?TGO-Rb&{am`=T6NgJLS?l~bSi3Rk zA@lvZ(hWDn3%{IY(%cc2asAh|_S?y?=TDP~QU5P9~6KdeI$QZcaM1YS*Th(x0op-dgW){rXws+_=`;dmMt=cw)-Mum7Cc&hPW3j;Y{o zX^e4#;g(agVs*Zn`xG?3e$6-Suap^(5#9LYyFdeXOgQ(FeMh8Y9_)%!DE!VOzGIzu zhs3XME9OsRjgb@$&vttoeO&YZ54P)B2R$sM?_1@)T@>l@T2cF>+l?vSo1B~{-TTS1 zPSj{(nbrd@?~@B=vmR*WBqcc!m*|G7s!+!JR^NJVYC1o9d-+5Jk8zhq!0&4x-Hv%} zD%fkh`D+iW;o{Fstq-kU%Fg;-_dGJf;WraFRbQx^5P9yL>C3lKKVE|r-DZkBAAL4* z$%8C5*4^RTwT$*vKUz1nJNr`f{u_HMzMa}}VY|KZ+sM~NFEg#L=X{^_<(uvwN&fHK z^%s9F|8nE=*^4{A&e3KLDvV{wp0}Tmaa!ffC7ZK8zeqpqwO2RJ_OHc$SF;0UOCu%j zt#deXVY~a^GUvKKS6^CR=S?}QS5`UuNu*DysQ6rIU_$B>*?sluQjfw~_FnrfdZ!eA z|A^vUB^+~e>WuKZ#^~ESPx&9@+RWXcy<6k+J~0Myi4@iYs@|s)3KAW{7-BYU;b9YJ d!!PuJJB|D8{IKZQGGJ-Q;OXk;vd$@?2>`n_ZXf^v literal 2846 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 literal 0 HcmV?d00001 diff --git a/AicsKnowledgeBase/res/OTHER.png b/AicsKnowledgeBase/res/OTHER.png index 54a10d1853fc6441334c7560d42ccaf30d3004f8..27ec62e098eb90bbf6e88945f058cd977fdec4ba 100644 GIT binary patch literal 1266 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSjKx9jP7LeL$-HD>U|Hko;uum9 z_x6sjcSxedv5(Ks^mw(syM1#Ni|H-bfZm{PjbCgNyZ5#Kay*n9zo1m_mUk47+d@`X z7YVV64|;@`Z!xd3JU`R&dQAV{^uKdgQg;bgDXRjBSQlhw0fqw#f(!>(4lEF0IKXj00Z8&RNHH?-FlqpWMS!+4^e}1w zMP(eWaxhF_XwVX50BQ&YI?IV+l>(BZ`_e`DN$G9LN>*sQN_XoeEQXH{_d7I?JHYd9$2@ zp=S5Q95x2eGy9ww9^CFtF=p^c`XRB-dM9R?7Qn>#@wKic3+X_zuZPIEpnYw5OUi}tBZDE*$ke7Sn~seO?z)ek&8 zu=TkAGw1UEVH}e8IZtg9sJ}b?koDKUOE*uR9Q|>6{r*SBp)0NTUR!aK6Ih5bc)I$z JtaD0e0svx$6l(wg literal 6461 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 BCVKz? literal 6370 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 diff --git a/AicsKnowledgeBase/res/VIDEO.png b/AicsKnowledgeBase/res/VIDEO.png index 3d8536cec45d7f017842db80fd82ba0cfd2f431b..72783c6e0e64df0f56d9783a9fd74f049d06f20c 100644 GIT binary patch literal 1588 zcmb7Fdo+{@6u;l+8#9LCBTdBQ%OQ^<@|u&%CzMA?6p|WjjEYuki^%wlEWOUg@k-kw zJ!CVZvgJ_>=}8ZdMMl#5flRDdCU$oBk3DDq>yLYX_uSvTzjM#I=iGbP$9pY{IiCpt zEDv{AUj0-eedzT1NX};MyR&{x=gq7) zmW63wvX3kh)|77BRjcWip_lg+b&{CY43>Gj6>r_iGu9iRzpOFM*%MZq?Hl9gbR@0H zr#S2)yM5mMW(x=L2A=C^BScsQ&qF0r(*e8ao;bCu?K2&sRvQk%A6R%B`r)!t-ytl&n_Lmc+FQNsJV<91qb9@LTMg zGc^t}Yegj{X~>nnpr*`e>mSBBftfRb_De!1T59%jGlMeAS|%dEH-&<1*V{pG77(OV z2L^B)Xt2bEglwo_B8U$rF~l%Z7k1+~#ehH|1+J)siD85xun7V(kqj1sSOK|?!JsrD z%$Wo=1Xn`Q5H*Naq@2NaApvWUCyGWLW%6%ApDI(NRKUkrp`r<83dRT{=PLBGpqtB# zN~$vAyYyyP4=W}MylS#wY3oTX3@d6XSl`F$b=Y#og~niz_s0@sf{=EOu_LEn^!^7D z%u92U7gQyo-B!LSqjtd&lIN$@`+CQM#|4qDC|;J|IuPJ58_Hs zK|1A?3@W#6%_|&A(po)_LZn%=t@<|*zxl%o`*P#0m$`Xj$eYFF{K1W?Fx~>EhL2l> z$ID-hN*tc2OLKN+u7Hc|`hcc(KIO-Muw-Yx_$(reyGbX;KKGe?&P_dw#P8CRy}s7b ztkE=xdMKSpm>w>!mD$KzKXVBamPD_XI((Vin4|kgJ!>+YxI=*Trh2nQ2+mI7kfyTM*?qmJ7?HfYK=G1QJqHSps*uzke@AL|YvWWJ zby#LWE@C5-0Sk zi#}=Szv+|c8Ht;>!u533VI!2#7Ck=Z_0L8^=(uNKo{f+};nc~~r1^zZ^#a2UDs#|& zjf|ergJ0-wQ*#>S9--E2+8)F9ijK$3V+SS@zh=>k=nW<9ANC3J;{;-92TIL!o_tW9 z!uDp0*V8jD@9#8@7+OwlW0u%yphf2@Te+AdGPJVI5Q04Qj=R7y_L{{O-$0Zw|2-B5 zN`h>cm8*46bw-VEe*fAn-R<4oUIu%wovn^o?31!F>fS{7&=ZCs96TW}bwtyjKA~>Z zp|oX{BLP>tjDEch`USDChQfcrDz<6m+n+O&joq_|Pncc&)IjU!Fi2?l@9bq6sq|px z{S^yzEn$*d_;8h4W!;OBM$lIAmQFHpYSJ#F06{X$ljZ#wAz+<}AmPjd11Bz$!AmXG s#i`PfyBgl`vWwWIj1gt>ʆ&Z6@-Z*XK4iZ=irZr-k<)gi*a0QGg4aR2}S literal 7711 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 L4V9{pF!ujHA^o9K diff --git a/AicsKnowledgeBase/res/WORD.png b/AicsKnowledgeBase/res/WORD.png index c381412c7e172ea9e4f2576a8fbe1c10eec62596..f34418d2f81aa332439ca4f1188afeba37c2595c 100644 GIT binary patch literal 2011 zcmb_d`9IWq7yrz6CdOE1Xe^UGr7R7pXcCQ>Y+WWylx^I5LyECBjPOO))RnZ^nl!Rz ztTW=$$jcg@o=}M%S}c{RgfPUNUe6!!{PMic>zwmC=Y7umoY(o~WKf-KWii_@003Eg zI~y0Vhkq$rLTo!M{ho>)BErS?D5xG(`v`#K4SO3aw`d<>;fZt_MWuVw)o;gJM{Mh? zHKV1bn@hT>AFCaW zez^SAM*EcUs73kZ=SR%x{)-V`=EgVUiWqHQ*AgBt3>1)N{!=M%wl!cMIuxsmg`T~| z;egm;BBMof0LAW5oc*>qia^6vP@K+a*Kt1&gm>M(ZqnE|NkBGgi}9;HO$fO3@V6#( zD`~>?j*-&c;9tUl!7>@=M-ux~h5nGSY`c493vKg!ZwiP$Ss@QB-mKcICDeL8TqBdfd(Ns1-L2QZk9an!aE0>ChNqJj=b4-2|ENVF7-8pmaW|_9L zS$n?}T-u-uf(q%--6bQMQEW5jcPDW8Oe2EMat`GrWUxkt3Y$oXZ@I%tKsY^)lH+<; z_$)-~1&OPs3?Z^?QrN|2o^9~=NCSUys>BcjUs!&BP>vQm{JE%_@{2!<2m)^fbkFxT zYc!4yweo+lJyV3Yq1R zMlI9r!Qxy1@qO}=;u0^wl|~-qp+7$7+&5j&C|Q1(bX(RF0)3qr2-9Vw%IeL__*TKUSv?Zg_#LLML} zW)`xB@iz2gCD-)@&Cn19h74`EJEsT@!+8rD!1SR%Jch;{Da~b58L~`QMWKN2nf#H9f>-$X^nQ z&7NKZR-U_V!CqU6S=yI?2er=vEQ4_|B(Q)f_2-A>KesncMLmsw6yn2(s9AhX| zq)yJp@NLj=eu&jFpk(@DClnzFM*zgmC9=xDznHdcZ+fR%}sQ{P9*gM+m`z_rjwgiwTu*fXRcA!vX6)+^vT@0r#_B8$b2m*%^OcPr716EtHZP)gI zt%dP&&phnBFXk`&#DQUL-ki_mbY1H6+sSGTv99NiGyLYfAE`$ui_2~=880k7bXI0K$&2pcMTFeWVe3sLo zz%a!>_IYtKCfb7Ipbq;RMYA%dqia`hH;NP$xM^W1zEg5kTE zNDQ!a_kGSoX?^^jcU=egU&+z10y#u3i3HJK?EWbKe+2d-pPA*UBdNbN1ECYKgI~(4 zuq-#W*|d!B4CI+0yEsYj4>JweaQk&exe=#9ehXQ0#4IPcAD^l?xoRfsqNi)}*OR8^ zl;mCf3SZA0e Fe*g?ocs~FD literal 7047 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 z Date: Fri, 7 Jul 2023 03:21:43 +0800 Subject: [PATCH 7/7] =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=A4=A7=E9=83=A8?= =?UTF-8?q?=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AicsKnowledgeBase/qml/MainWindow.qml | 9 ++-- AicsKnowledgeBase/qml/page/ContentPage.qml | 16 +++--- AicsKnowledgeBase/qml/page/CreateNotePage.qml | 7 ++- AicsKnowledgeBase/qml/page/NotePage.qml | 53 ++++++++++++++++--- 4 files changed, 67 insertions(+), 18 deletions(-) diff --git a/AicsKnowledgeBase/qml/MainWindow.qml b/AicsKnowledgeBase/qml/MainWindow.qml index 4da2a86..7b6edfb 100644 --- a/AicsKnowledgeBase/qml/MainWindow.qml +++ b/AicsKnowledgeBase/qml/MainWindow.qml @@ -95,7 +95,7 @@ FluWindow { duration: 200 } } - initialItem: create_note_view + initialItem: note_view } Connections { @@ -118,18 +118,19 @@ FluWindow { stack_view.pop() } function onCreateNote(file, fileType, fileTitle) { - stack_view.push(note_view, { + stack_view.push(create_note_view, { "knowledgeFileId": file, "fileType": fileType, "fileTitle": fileTitle }) } function onModifyNote(file, fileType, fileTitle, note) { - stack_view.push(note_view, { + stack_view.push(create_note_view, { "knowledgeFileId": file, "fileType": fileType, "fileTitle": fileTitle, - "noteId": note + "noteId": note, + "isModifying": true }) } } diff --git a/AicsKnowledgeBase/qml/page/ContentPage.qml b/AicsKnowledgeBase/qml/page/ContentPage.qml index 0afe1b6..2a23609 100644 --- a/AicsKnowledgeBase/qml/page/ContentPage.qml +++ b/AicsKnowledgeBase/qml/page/ContentPage.qml @@ -31,11 +31,13 @@ FluArea { noteListModel: content_page.noteListModel onOpen: function handle(noteId, authorId) { emit: SignalFileOperation.openNote(noteId, authorId) + popup.close() } onCreateNote: function handle() { - emit: SignalFileOperation.createNote( - content_area.knowledgeFileId, content_area.type, - content_page.title) + emit: SignalFileOperation.createNote(content_page.fileId, + content_area.type, + content_page.title) + popup.close() } } } @@ -92,8 +94,9 @@ FluArea { function loadFile(knowledgeFileId) { content_area.knowledgeFileId = knowledgeFileId console.log(knowledgeFileId) - Request.get("knowledge/" + knowledgeFileId + "/detail", + Request.get("knowledge/" + knowledgeFileId + "/detailed", function (response, data) { + console.log(response) content_page.publishTime = data.createTime content_page.title = data.name content_page.fileId = data.knowledgeFileAttribute.id @@ -101,7 +104,7 @@ FluArea { content_page.fileSize = data.knowledgeFileAttribute.size content_area.type = getType(content_page.suffix) - console.log(content_area.type) + console.log(content_area.fileId) var tagString = "" for (var j = 0; j < data.knowledgeFileAttribute.tags.length; j++) { @@ -245,7 +248,7 @@ FluArea { content_page.isFavorite = !content_page.isFavorite content_page.favoriteCount += 1 Request.put("knowledge/" + knowledgeFileId + "/star", { - "active": UserData.userId + "active": content_page.isFavorite }) } } @@ -351,7 +354,6 @@ FluArea { FluMediaPlayer { width: parent.width height: width * 9 / 16. - source: "https://api.hammer-hfut.tk:233/aics/file/static/3f28fea9-27f1-4a85-9d3e-def187c4456e.mp4" } } Component { diff --git a/AicsKnowledgeBase/qml/page/CreateNotePage.qml b/AicsKnowledgeBase/qml/page/CreateNotePage.qml index b33fb13..9f8f496 100644 --- a/AicsKnowledgeBase/qml/page/CreateNotePage.qml +++ b/AicsKnowledgeBase/qml/page/CreateNotePage.qml @@ -25,6 +25,8 @@ FluArea { property bool isModifying: false Component.onCompleted: { + console.log(knowledgeFileId) + isModifying = false if (isModifying) { Request.getSearch("/search/note/" + noteFileId + "/content", function (response, data) { @@ -137,7 +139,10 @@ FluArea { text: "上传" onClicked: { if (noteTitle.trim() !== "" && noteContent !== "") { - if (isModifying) { + console.log(noteTitle) + console.log(noteContent) + console.log(knowledgeFileId) + if (!isModifying) { Request.post("note", { "title": noteTitle, "content": noteContent, diff --git a/AicsKnowledgeBase/qml/page/NotePage.qml b/AicsKnowledgeBase/qml/page/NotePage.qml index 0a413cf..e358b9f 100644 --- a/AicsKnowledgeBase/qml/page/NotePage.qml +++ b/AicsKnowledgeBase/qml/page/NotePage.qml @@ -18,6 +18,7 @@ FluArea { // visible: false property string type: "" property string noteFileId + property string authorId signal clickTags(string tagName) // paddings: { @@ -46,7 +47,6 @@ FluArea { property string publishTime: "2020-01-01" property string brief: "这是一个简介" - property string uuid: "354" property string fileTitle: "dfnfgf" property string fileType: "OTHER" @@ -65,19 +65,37 @@ FluArea { } Component.onCompleted: { - Request.getSearch("/", function (response, data) { - note_page.uuid = data.id + Request.getSearch("note/" + noteFileId, function (response, data) { + note_page.fileId = data.id note_page.fileTitle = data.name note_page.fileType = getType(data.knowledgeFileAttribute.suffix) note_page.fileStars = 0 var tagString = "" - for (var j = 0; j < file.knowledgeFileAttribute.tags.length; j++) { + for (var j = 0; j < data.tags.length; j++) { if (j != 0) tagString = tagString + "," - tagString = tagString + file.knowledgeFileAttribute.tags[j].name + tagString = tagString + data.tags[j].name } note_page.fileTags = tagString + + likeCount = data.likers.length + isLike = false + for (var j = 0; j < data.likers.length; j++) { + if (data.likers[j].id === UserData.userId) { + isLike = true + break + } + } + + favoriteCount = data.starrers.length + isLike = false + for (var j = 0; j < data.starrers.length; j++) { + if (data.starrers[j].id === UserData.userId) { + isFavorite = true + break + } + } }) } @@ -103,6 +121,17 @@ FluArea { bold: true } } + FluIconButton { + id: button_edit_note + iconSize: FluentIcons.Edit + visible: authorId === UserData.userId + onClicked: { + emit: SignalFileOperation.modifyNote(note_page.fileId, + note_page.fileType, + note_page.fileTitle, + noteFileId) + } + } ColumnLayout { id: layout_share FluIconButton { @@ -129,6 +158,12 @@ FluArea { id: button_favorite iconSize: 15 iconSource: note_page.isFavorite ? FluentIcons.FavoriteStarFill : FluentIcons.FavoriteStar + onClicked: { + note_page.isFavorite = !note_page.isFavorite + Request.put("/note/" + noteFileId + "/star", { + "active": note_page.isFavorite + }) + } } FluText { id: text_favorite @@ -148,6 +183,12 @@ FluArea { id: button_like iconSize: 15 iconSource: note_page.isLike ? FluentIcons.HeartFill : FluentIcons.Heart + onClicked: { + note_page.isLike = !note_page.isLike + Request.put("/note/" + noteFileId + "/like", { + "active": note_page.isLike + }) + } } FluText { id: text_like @@ -215,7 +256,7 @@ FluArea { MouseArea { anchors.fill: parent onDoubleClicked: { - emit: SignalFileOperation.open(note_page.uuid) + emit: SignalFileOperation.open(note_page.fileId) } } RowLayout {