diff --git a/AicsKnowledgeBase/qml/component/FileList.qml b/AicsKnowledgeBase/qml/component/FileList.qml index e0a0cc2..5c17833 100644 --- a/AicsKnowledgeBase/qml/component/FileList.qml +++ b/AicsKnowledgeBase/qml/component/FileList.qml @@ -250,7 +250,9 @@ Item { Rectangle { id: fileListItemRect width: ListView.view.width - height: model.isDir ? 50 : 120 + //set the height to fit model.brief + height: model.isDir ? 50 : Math.max(120, + model.brief.length / 3 + 80) //color: !ListView.isCurrentItem ? "white" : "red" FileListItem { id: fileListItem diff --git a/AicsKnowledgeBase/qml/component/FileListItem.qml b/AicsKnowledgeBase/qml/component/FileListItem.qml index 68c7053..f4f2713 100644 --- a/AicsKnowledgeBase/qml/component/FileListItem.qml +++ b/AicsKnowledgeBase/qml/component/FileListItem.qml @@ -127,10 +127,11 @@ FluArea { visible: !fileItem.isDir text: fileItem.brief Layout.fillWidth: true - wrapMode: Text.WrapAnywhere + wrapMode: Text.WordWrap elide: Text.ElideRight - maximumLineCount: 2 + maximumLineCount: 4 textFormat: Text.RichText + fontSizeMode: Text.Fit } RowLayout { id: infoRow diff --git a/AicsKnowledgeBase/qml/global/Request.qml b/AicsKnowledgeBase/qml/global/Request.qml index 98cdc73..f905415 100644 --- a/AicsKnowledgeBase/qml/global/Request.qml +++ b/AicsKnowledgeBase/qml/global/Request.qml @@ -6,7 +6,7 @@ QtObject { id: request property string baseUrl: "https://api.hammer-hfut.tk:233/aics/main/" - property string searchUrl: "https://api.hammer-hfut.tk:233/aics/query" + property string searchUrl: "https://api.hammer-hfut.tk:233/aics/query/" //property string baseUrl: "http://192.168.156.74:8080/" // GET diff --git a/AicsKnowledgeBase/qml/page/SearchPage.qml b/AicsKnowledgeBase/qml/page/SearchPage.qml index 773c728..1a82e76 100644 --- a/AicsKnowledgeBase/qml/page/SearchPage.qml +++ b/AicsKnowledgeBase/qml/page/SearchPage.qml @@ -10,6 +10,8 @@ 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 @@ -30,52 +32,102 @@ FluArea { width: parent.width RowLayout { width: parent.width - - // FluDropDownButton{ - // id:select_model - // Layout.alignment: Qt.AlignLeft - // text:"标题" - // items:[ - // FluMenuItem{ - // text:"标题" - // onClicked: { - // select_model.text = text - // } - // }, - // FluMenuItem{ - // text:"内容" - // onClicked: { - // select_model.text = text - // } - // }, - // FluMenuItem{ - // text:"标题及内容" - // onClicked: { - // select_model.text = text - // } - // } - // ] - // } FluTextBox { placeholderText: "对标题进行搜索……" + id: search_text Layout.fillWidth: true } FluIconButton { Layout.alignment: Qt.AlignRight iconSource: FluentIcons.Search onClicked: { - var allTags = inputTags.getAllTags(tags.tagList) - var allTagId = [] - console.log(allTags) - - for (var i = 0; i < allTags.length; i++) { - var url = "?name=" - url = url + allTags[i] - console.log(url) - Request.get(url, function (result, data) { - allTagId.push() - }) + 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) + } + }) } } } @@ -165,56 +217,28 @@ FluArea { FileList { disableHeader: true - dataModel: ListModel { - ListElement { - uuid: "0" - title: "File 1" - isDir: true - brief: "This is a test file" - type: "FOLDER" - } - ListElement { - uuid: "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 { - uuid: "3" - title: "File 3" - isDir: false - brief: "This is a test file" - type: "PPT" - date: "2020-09-09" - pageView: 100 - size: 10200000022 - stars: 10 - } - } + dataModel: listModel } } } function getKnowledgeDetail(uuid, title, brief, tags) { - var raw = Request.getAwait("/knowledget/" + uuid) - var data = JSON.parse(raw) - var item = { - "uuid": uuid, - "title": title, - "brief": brief, - "isDir": false, - "date": data.createTime, - "fuuid": data.parent.id, - "pageView": data.knowledgeFileAttribute.pageView, - "stars": data.knowledgeFileAttribute.stars, - "size": data.knowledgeFileAttribute.size, - "type": getType(data.knowledgeFileAttribute.suffix), - "tags": 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")