From 9cb96f9dbf57c32a862726dabf1e4a27db016cea Mon Sep 17 00:00:00 2001 From: Guo XIn <371864209@qq.com> Date: Tue, 22 Aug 2023 16:50:40 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=9A=E7=BB=BC=E5=90=88?= =?UTF-8?q?=E6=B5=8F=E8=A7=88=E7=B3=BB=E7=BB=9F=E4=B8=AD=E7=BD=AE=E6=A0=87?= =?UTF-8?q?=E6=A0=87=E7=AD=BE=E6=9F=A5=E8=AF=A2=E6=95=B0=E6=8D=AE=E6=97=B6?= =?UTF-8?q?=EF=BC=8C=E6=95=B0=E6=8D=AE=E5=88=97=E8=A1=A8=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E7=9A=84=E6=95=B0=E6=8D=AE=E4=B8=8D=E5=AF=B9=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/MetadataSearchService.java | 21 +++-- .../src/main/resources/static/js/browser.js | 84 ++++++++----------- .../src/main/resources/view/browser.html | 1 - .../js/common/layui/extend/datalabel.js | 57 ++++++++++--- .../shandan/bianmu/entity/LabelEntity.java | 4 + .../bianmu/mapper/LabelEntityMapper.java | 19 ++++- 6 files changed, 113 insertions(+), 73 deletions(-) diff --git a/shandan-browser/src/main/java/com/keyware/shandan/browser/service/MetadataSearchService.java b/shandan-browser/src/main/java/com/keyware/shandan/browser/service/MetadataSearchService.java index 6340133..981b742 100644 --- a/shandan-browser/src/main/java/com/keyware/shandan/browser/service/MetadataSearchService.java +++ b/shandan-browser/src/main/java/com/keyware/shandan/browser/service/MetadataSearchService.java @@ -18,6 +18,7 @@ import org.springframework.util.Assert; import java.util.Arrays; import java.util.List; +import java.util.stream.Collectors; /** * @author Administrator @@ -81,17 +82,15 @@ public class MetadataSearchService { } break; case "markTag": - String tagText = item.getFieldValue(); - List tags = Arrays.asList(tagText.split(",")); - StringBuilder existsSql = new StringBuilder("select 1 from MARK_RECORD MR where MR.ENTITY_ID = V_DIRECTORY_RESOURCE.ID and ( 1 = 1 "); - tags.forEach(tagItem -> { - if (StringUtils.hasText(tagItem)) { - String[] arr = tagItem.split("-"); - existsSql.append(" and MR.MARK_VALUE like '%").append(arr[1]).append("%' "); - } - }); - existsSql.append(")"); - wrapper.exists(existsSql.toString()); + String tagIds = item.getFieldValue(); + List ids = Arrays.asList(tagIds.split(",")); + if (ids.size() > 0) { + StringBuilder existsSql = new StringBuilder("select 1 from (select ENTITY_ID, WM_CONCAT(LABEL_ID) LABEL_IDS from B_DATA_LABEL_ENTITY DLN where DLN.ENTITY_ID = V_DIRECTORY_RESOURCE.ID group by ENTITY_ID) tmp1"); + List andSqlList = ids.stream().map(id -> "tmp1.LABEL_IDS like '%" + id + "%'").collect(Collectors.toList()); + existsSql.append(" where ").append(String.join(" and ", andSqlList)); + wrapper.exists(existsSql.toString()); + } + break; default: } diff --git a/shandan-browser/src/main/resources/static/js/browser.js b/shandan-browser/src/main/resources/static/js/browser.js index 9107922..66da19e 100644 --- a/shandan-browser/src/main/resources/static/js/browser.js +++ b/shandan-browser/src/main/resources/static/js/browser.js @@ -8,16 +8,17 @@ */ // 目录树数据缓存 const dirCache = new Map(); -layui.use(['layer', 'listPage', 'globalTree', 'gtable', 'form', 'element', 'dropdown', 'laydate', 'dict'], function () { +layui.use(['layer', 'listPage', 'globalTree', 'gtable', 'form', 'element', 'dropdown', 'laydate', 'dict', 'datalabel'], function () { const listPage = layui.listPage, form = layui.form, element = layui.element, laydate = layui.laydate, - globalTree = layui.globalTree; + globalTree = layui.globalTree, + DataLabel = layui.datalabel; - let metaListTable, dirFileTable, tagSelector, tags = [], unchecked_tags = [], conditions = []; - - // 初始化 + let metaListTable, dirFileTable, tagSelector, tags = [], conditions = []; + const unchecked_tags = new Set(); + // 初始化 initDirectoryTree(); @@ -105,7 +106,7 @@ layui.use(['layer', 'listPage', 'globalTree', 'gtable', 'form', 'element', 'drop * @param basicData */ function setCurrentPosition(basicData) { - let directoryPath = basicData.directoryPath.replaceAll('/', ' / '); + let directoryPath = basicData.directoryPath.replaceAll('/', ' / '); $('.current-position label').text(directoryPath); } @@ -273,15 +274,13 @@ layui.use(['layer', 'listPage', 'globalTree', 'gtable', 'form', 'element', 'drop $('#condition-div').slideToggle(100, 'linear', conditionSlideToggle) }); - if (!tagSelector) { - tagSelector = new MarkerSelector('#mark-selector-input'); - } - tagSelector.bindBtnEvent() - tagSelector.onOkBtn(data => { - tags = data - setMarkTagInputValue(); - }); + $('#mark-selector-input').on('click', function () { + DataLabel.openChooseDialog(null, null, null, true).then((labels) => { + tags = labels || []; + setMarkTagInputValue(); + }) + }) // 监听标签点击事件 element.on('tab(condition-tab)', function (data) { // 点击后移除选中样式 @@ -296,6 +295,9 @@ layui.use(['layer', 'listPage', 'globalTree', 'gtable', 'form', 'element', 'drop // 监听条件标签删除事件 element.on('tabDelete(condition-tab)', function (data) { let key = $(this).parent().data('key'); + if(key === 'markTag'){ + tags = []; + } let formVal = form.val('search-form'); formVal[key] = ''; form.val('search-form', formVal); @@ -310,7 +312,7 @@ layui.use(['layer', 'listPage', 'globalTree', 'gtable', 'form', 'element', 'drop $('#condition-clear-btn').on('click', function () { $('#searchKeyInput').val(''); tags = []; - unchecked_tags = []; + unchecked_tags.clear(); conditions = []; beginSearch(); }); @@ -342,9 +344,7 @@ layui.use(['layer', 'listPage', 'globalTree', 'gtable', 'form', 'element', 'drop function setMarkTagInputValue() { let temp = []; for (let tag of tags) { - let arr = tag.split('-'); - let text = tag.replace(arr[0] + '-' + arr[1] + '-', ''); - temp.push(text); + temp.push(tag.title); } $('#mark-selector-input').val(temp.join(', ')); } @@ -370,7 +370,7 @@ layui.use(['layer', 'listPage', 'globalTree', 'gtable', 'form', 'element', 'drop let htm = ''; conditions = []; for (let key in formVal) { - if (key == 'searchKeyInput') continue; + if (key === 'searchKeyInput') continue; let fieldName = key, fieldValue = formVal[key], logicJudgement; // 如果fieldName是条件下拉框,则跳过 if (fieldName.startsWith('logic-') || fieldName === 'directoryId' || fieldName === 'metadataId') continue; @@ -397,11 +397,11 @@ layui.use(['layer', 'listPage', 'globalTree', 'gtable', 'form', 'element', 'drop condition = '包含'; } - if (fieldName == 'secretLevel') { + if (fieldName === 'secretLevel') { hasText = $(`select[name="secretLevel"] option[value="${fieldValue}"]`).text(); - } else if (fieldName == 'dataFrom') { + } else if (fieldName === 'dataFrom') { hasText = $(`select[name="dataFrom"] option[value="${fieldValue}"]`).text(); - } else if (fieldName == 'dataType') { + } else if (fieldName === 'dataType') { hasText = $(`select[name="dataType"] option[value="${fieldValue}"]`).text(); } conditions.push({fieldName, fieldValue, logicJudgement}) @@ -409,40 +409,29 @@ layui.use(['layer', 'listPage', 'globalTree', 'gtable', 'form', 'element', 'drop } } - let temp = []; + let tag_htm = ''; for (let tag of tags) { - let tag_arr = tag.split('-'); - let tag_type = tag_arr[1], tag_text = tag_arr[2], temp_tags = temp[tag_type]; - if (!temp_tags) { - temp_tags = [] + let checked = 'checked'; + if (unchecked_tags.has(tag.id + '')) { + checked = ''; } - temp_tags.push({id: tag_arr[0], text: tag_text}); - temp[tag_type] = temp_tags; + tag_htm += ``; } - - for (let type in temp) { - let tag_type = type, tag_items = temp[type], tag_htm = ''; - for (let item of tag_items) { - let val = item.id + '-' + item.text, checked = 'checked'; - if (unchecked_tags.includes(val)) { - checked = ''; - } - tag_htm += ``; - } - - htm += `
  • ${tag_type}:${tag_htm}
  • `; + if (tag_htm){ + htm += `
  • 置标标签:${tag_htm}
  • `; } + $('#condition-tab ul').html(htm); element.render('tab'); - $('#condition-tab ul li[data-key="markTag"] i').remove(); + $('#condition-tab ul li[data-key="markTag"] i').css({'margin-left': '-10px'}); form.render('checkbox'); $('li[data-key="markTag"] .layui-form-checkbox').on('click', function () { - let val = $(this).prev().val(), index = unchecked_tags.indexOf(val); - if (!$(this).hasClass('layui-form-checked')) { - unchecked_tags.push(val); - } else if (index > -1) { - unchecked_tags.splice(index, 1) + let val = $(this).prev().val(); + if(unchecked_tags.has(val)){ + unchecked_tags.delete(val); + }else{ + unchecked_tags.add(val); } beginSearch(); }) @@ -453,7 +442,6 @@ layui.use(['layer', 'listPage', 'globalTree', 'gtable', 'form', 'element', 'drop } } - function beginSearch() { setMarkTagsValue() metaListTable.where.conditions = conditions; diff --git a/shandan-browser/src/main/resources/view/browser.html b/shandan-browser/src/main/resources/view/browser.html index f031ac5..3c069da 100644 --- a/shandan-browser/src/main/resources/view/browser.html +++ b/shandan-browser/src/main/resources/view/browser.html @@ -219,7 +219,6 @@ -