AicsKnowledgeBase_client/AicsKnowledgeBase/qml/component/FileList.qml

186 lines
7.4 KiB
QML
Raw Normal View History

2023-06-24 18:02:21 +08:00
import QtQuick 2.15
import QtQuick.Layouts
import FluentUI
2023-06-30 19:45:04 +08:00
import "qrc:///AicsKnowledgeBase/qml/global"
2023-06-24 18:02:21 +08:00
Window {
id: fileListTestWindow
visible: true
width: 800
height: 600
title: "File List Test1"
2023-06-28 14:47:52 +08:00
signal search(string tag)
signal open(string file)
2023-06-24 18:02:21 +08:00
Item {
anchors.fill: parent
ListView {
id: listView
anchors.fill: parent
spacing: 10
header: fileListItemHeader
model: fileListModel
delegate: fileListItemDelegate
2023-06-30 19:45:04 +08:00
Component.onCompleted: {
update()
}
2023-06-24 18:02:21 +08:00
}
Component {
id: fileListItemHeader
Item {
id: fileListItemHeaderItem
width: ListView.view.width
height: 48
2023-06-28 14:47:52 +08:00
RowLayout {
FluBreadcrumbBar {
id: header
width: parent.width
height: parent.height
separator: ">"
2023-06-30 19:45:04 +08:00
items: []
2023-06-28 14:47:52 +08:00
onClickItem: function (model) {
if (model.index + 1 !== count()) {
items = items.slice(0, model.index + 1)
}
}
onItemsChanged: {
fileListItemHeaderItem.update()
2023-06-24 18:02:21 +08:00
}
}
2023-06-28 14:47:52 +08:00
// back to folder button
FluIconButton {
Layout.alignment: Qt.AlignVCenter
id: backButton
width: 24
height: 24
iconSource: FluentIcons.ChromeBack
onClicked: {
2023-06-30 19:45:04 +08:00
if (header.count() > 0) {
2023-06-28 14:47:52 +08:00
header.items = header.items.slice(
0, header.count() - 1)
}
fileListItemHeaderItem.update()
}
2023-06-24 18:02:21 +08:00
}
}
2023-06-28 14:47:52 +08:00
2023-06-30 19:45:04 +08:00
function add(folderName, uuid) {
console.log(header.items)
header.items = header.items.concat([{
"title": folderName,
"uuid": uuid
}])
2023-06-24 18:02:21 +08:00
}
function update() {
2023-06-30 19:45:04 +08:00
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
}
if (file.knowledgeFileAttribute === null) {
modelItem.type = "folder"
modelItem.isDir = true
modelItem.size = 0
} else {
modelItem.isDir = false
modelItem.type = 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)
}
listView.currentIndex = -1
})
2023-06-24 18:02:21 +08:00
}
}
}
Component {
id: fileListItemDelegate
Rectangle {
id: fileListItemRect
width: ListView.view.width
2023-06-28 14:47:52 +08:00
height: 120
2023-06-24 18:02:21 +08:00
color: !ListView.isCurrentItem ? "lightgray" : "red"
FileListItem {
2023-06-28 14:47:52 +08:00
id: fileListItem
2023-06-30 19:45:04 +08:00
uuid: model.uuid
2023-06-24 18:02:21 +08:00
width: parent.width
height: parent.height
title: model.title
isDir: model.isDir
date: model.date
2023-06-30 19:45:04 +08:00
brief: isDir ? "" : model.brief
type: isDir ? "FOLDER" : model.type
pageView: isDir ? 0 : model.pageView
size: isDir ? 0 : model.size
stars: isDir ? 0 : model.stars
2023-06-28 14:47:52 +08:00
// split string to array
2023-06-30 19:45:04 +08:00
tags: isDir ? [] : model.tags.split(",")
2023-06-28 14:47:52 +08:00
onTagClicked: {
emit: search(tag)
console.log(tag)
}
2023-06-24 18:02:21 +08:00
}
2023-06-28 14:47:52 +08:00
function doubleClicked() {
listView.currentIndex = index
if (model.isDir) {
2023-06-30 19:45:04 +08:00
listView.headerItem.add(model.title, model.uuid)
2023-06-28 14:47:52 +08:00
} else {
2023-06-30 19:45:04 +08:00
emit: open(model.uuid)
2023-06-24 18:02:21 +08:00
}
}
}
}
ListModel {
id: fileListModel
2023-06-30 19:45:04 +08:00
// ListElement {
// title: "File 1"
// isDir: true
// brief: "This is a test file"
// type: "FOLDER"
// }
// ListElement {
// uid: "2"
// title: "File 2"
// isDir: false
// brief: "This is a test file"
// size: 500
// type: "WORD"
// date: "2020-09-09"
// pageView: 100
// stars: 10
// }
// ListElement {
// uid: "3"
// title: "File 3"
// isDir: false
// brief: "This is a test file"
// type: "PPT"
// date: "2020-09-09"
// pageView: 100
// size: 10200000022
// stars: 10
// }
2023-06-24 18:02:21 +08:00
}
}
}