import QtQuick import QtQuick.Layouts import QtQuick.Window import QtQuick.Controls import QtQuick.Controls.Basic import FluentUI import "qrc:///AicsKnowledgeBase/qml/global" import "qrc:///AicsKnowledgeBase/qml/component" FluArea { id: searchPage property string url: '' property var tags: [] property ListModel listModel: ListModel {} backgroundColor: "#f9f9f9" Layout.fillHeight: true Layout.fillWidth: true Layout.topMargin: 20 paddings: 10 // FluText { // Layout.topMargin: 20 // text: "Search" // } /* 按标题,内容搜索 */ ColumnLayout { width: parent.width RowLayout { width: parent.width FluTextBox { placeholderText: "对标题进行搜索……" id: search_text Layout.fillWidth: true } FluIconButton { Layout.alignment: Qt.AlignRight iconSource: FluentIcons.Search onClicked: { listModel.clear() var allTags = tags.tagMap var selectTagName = [] var selectTagId = [] for (var i = 0; i < tags.tagList.count; i++) { selectTagName.push(tags.tagList.get(i).tag) console.log(selectTagName[selectTagName.length - 1]) } for (i = 0; i < selectTagName.length; i++) { for (var j = 0; j < allTags.length; j++) { if (selectTagName[i] === allTags[j][1]) { selectTagId.push(allTags[j][0]) console.log(allTags[j][0]) } } } var params = { "text": search_text.text, "applyToBriefAndContent": searchTitleAndContent.checked, "tags": selectTagId } var url = "/search/knowledge?" // encode params to get url url += "text=" + params.text url += "&applyToBriefAndContent=" + params.applyToBriefAndContent url += "&tags=" for (i = 0; i < params.tags.length; i++) { url += "&tags=" + params.tags[i] } var tagString = "" // merge all tag to a string split by ',' for (i = 0; i < selectTagName.length; i++) { if (i !== 0) { tagString += "," } tagString += selectTagName[i] } var sName = "" var sBrief = "" console.log(url) Request.getSearch(url, response => { var dataArray = JSON.parse(response) for (var i = 0; i < dataArray.length; i++) { var data = dataArray[i] if (data.highlightFields.name !== null && data.highlightFields.name !== undefined && data.highlightFields.name.length > 0) { for (i = 0; i < data.highlightFields.name.length; i++) { if (i !== 0) { sName += "..." } sName += data.highlightFields.name[i] } } else { sName = data.content.name } if (data.highlightFields.brief !== null && data.highlightFields.brief !== undefined && data.highlightFields.brief.length > 0) { for (i = 0; i < data.highlightFields.brief.length; i++) { if (i !== 0) { sBrief += "..." } sBrief += data.highlightFields.brief[i] } } if (data.highlightFields.content !== null && data.highlightFields.content !== undefined && data.highlightFields.content.length > 0) { for (i = 0; i < data.highlightFields.content.length; i++) { if (i !== 0) { sBrief += "..." } sBrief += data.highlightFields.content[i] } } if (sBrief.length === 0) { sBrief = data.content.brief } getKnowledgeDetail( data.content.uuid, sName, sBrief, tagString) } }) } } } FluCheckBox { id: searchTitleAndContent text: "同时搜索简介和内容" } //按文件类型 RowLayout { id: selectFormat width: parent.width FluText { Layout.alignment: Qt.AlignLeft text: "类型: " } FluCheckBox { id: selectAllFormat text: "all" Component.onCompleted: { clicked() } onClicked: { selectVideo.checked = true selectDoc.checked = true selectAudio.checked = true } } FluCheckBox { id: selectVideo text: "Video" onClicked: { selectFormat.setAllStatus() } } FluCheckBox { id: selectDoc text: "Doc" onClicked: { selectFormat.setAllStatus() } } FluCheckBox { id: selectAudio text: "Audio" onClicked: { selectFormat.setAllStatus() } } function setAllStatus() { selectAllFormat.checked = selectVideo.checked && selectDoc.checked && selectAudio.checked } } RowLayout { id: inputTags width: parent.width height: 32 FluText { Layout.alignment: Qt.AlignLeft text: "标签: " } Tag { id: tags width: 290 } function getAllTags(tagList) { var allTags = [] for (var i = 0; i < tagList.count; i++) { var item = tagList.get(i) allTags.push(item.tag) } return allTags //console.log(allTags) } } FluArea { backgroundColor: "#f9f9f9" border.width: 0 width: parent.width height: 500 FileList { disableHeader: true dataModel: listModel } } } function getKnowledgeDetail(uuid, title, brief, tags) { Request.get("/knowledge/" + uuid, raw => { var data = JSON.parse(raw) var item = { "uuid": uuid, "title": title, "brief": brief, "isDir": false, "date": data.createTime.substring(0, 10), "fuuid": "data.parent.id", "pageView": data.knowledgeFileAttribute.pageView, "stars": data.knowledgeFileAttribute.stars, "size": data.knowledgeFileAttribute.size, "type": getType(data.knowledgeFileAttribute.suffix), "tags": tags } listModel.append(item) }) } 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" } }