import QtQuick import QtQuick.Layouts import QtQuick.Window import QtQuick.Controls import QtQuick.Controls.Basic import QtWebEngine 1.2 import FluentUI import AicsKB.FileTransferManager FluArea { id: content_area paddings: 0 backgroundColor: "#f9f9f9" property string type: "" property string knowledgeFileId signal download(string knowledgeFileId) signal clickTags(string tagName) // paddings: { // top: 10 // right: 0 // bottom: 10 // left: 10 // } FluScrollablePage { id: content_page anchors.fill: parent leftPadding: 10 topPadding: 10 rightPadding: 10 bottomPadding: 0 property int likeCount: 0 property int favoriteCount: 0 property int shareCount: 0 property int browsCount: 555 property bool isLike: false property bool isFavorite: false property bool isDownload: false property double fileSize: 455 property list tags: ["tag 1", "tag 2", "tag 3"] property date publishTime: new Date() property string brief: "这是一个简介" Component.onCompleted: { console.log(content_area.type) if (content_area.type == "video") { content_view.sourceComponent = video_view } else if (content_area.type == "md") { content_view.sourceComponent = text_view } else { content_view.sourceComponent = other_view } } Item { Layout.fillWidth: true implicitHeight: 50 FluText { id: text_title padding: 10 text: "文章标题" font { pointSize: 15 bold: true } } ColumnLayout { id: layout_share FluIconButton { id: button_share iconSize: 15 iconSource: FluentIcons.Share text: content_page.shareCount.toString() } FluText { id: text_share text: content_page.shareCount font.pointSize: 8 Layout.alignment: button_share.Center Layout.topMargin: -5 } anchors { verticalCenter: text_title.verticalCenter right: parent.right } } ColumnLayout { id: layout_favorite FluIconButton { id: button_favorite iconSize: 15 iconSource: content_page.isFavorite ? FluentIcons.FavoriteStarFill : FluentIcons.FavoriteStar } FluText { id: text_favorite text: content_page.favoriteCount font.pointSize: 8 Layout.alignment: button_favorite.Center Layout.topMargin: -5 } anchors { verticalCenter: text_title.verticalCenter right: layout_share.left } } ColumnLayout { id: layout_like FluIconButton { id: button_like iconSize: 15 iconSource: content_page.isLike ? FluentIcons.HeartFill : FluentIcons.Heart } FluText { id: text_like text: content_page.favoriteCount font.pointSize: 8 Layout.alignment: button_like.Center Layout.topMargin: -5 } anchors { verticalCenter: text_title.verticalCenter right: layout_favorite.left } } FluIconButton { id: button_download iconSize: 25 iconSource: content_page.isDownload ? FluentIcons.OEM : FluentIcons.Download anchors { verticalCenter: text_title.verticalCenter right: layout_like.left rightMargin: 20 } onClicked: { emit: content_area.download(content_area.knowledgeFileId) FileTransferManager.download(content_area.knowledgeFileId) } } } Loader { id: content_view Layout.fillWidth: true sourceComponent: video_view } Component { id: video_view FluMediaPlayer { Layout.fillWidth: true implicitHeight: width * 9 / 16. } } Component { id: text_view Text { id: text_md text: content_page.contentMd textFormat: TextEdit.MarkdownText focus: true } } Component { id: other_view WebEngineView { Layout.fillWidth: true id: sitemonitory_view backgroundColor: "transparent" implicitHeight: 200 settings.javascriptEnabled: true settings.pluginsEnabled: true url: "https://www.baidu.com" } } FluArea { Layout.fillWidth: true implicitHeight: 100 ColumnLayout { RowLayout { FluText { padding: 10 text: content_page.publishTime.toDateString() } FluText { padding: 10 text: content_page.fileSize.toString() + "MB" } FluText { padding: 10 text: content_page.browsCount.toString() + "浏览量" } } FluText { Layout.topMargin: -2 Layout.leftMargin: 10 text: content_page.brief } RowLayout { Layout.topMargin: 2 Layout.leftMargin: 5 Repeater { model: content_page.tags delegate: Button { Layout.margins: 2 text: "#" + content_page.tags[index] background: Rectangle { implicitHeight: 10 implicitWidth: 10 color: FluColors.Grey20 radius: 10 } onClicked: { emit: content_area.clickTags(text) } } } } } } Item { Layout.fillWidth: true implicitHeight: 50 FluText { id: text_note text: "笔记" padding: 10 font { pointSize: 15 bold: true } } FluTextButton { id: button_publish text: "发布笔记" hoverColor: "blue" normalColor: "black" anchors { verticalCenter: text_note.verticalCenter right: parent.right } } } } }