diff --git a/src/admin/problem/detail.vue b/src/admin/problem/detail.vue index d55df2c..34e07f9 100644 --- a/src/admin/problem/detail.vue +++ b/src/admin/problem/detail.vue @@ -100,6 +100,7 @@ const tags = useLocalStorage(STORAGE_KEY.ADMIN_PROBLEM_TAGS, { select: [], upload: [], }) +const tagKeyword = ref("") // 这几个用的少,就不缓存本地了 const [needTemplate, toggleNeedTemplate] = useToggle(false) @@ -125,9 +126,34 @@ const languageOptions = [ { label: LANGUAGE_SHOW_VALUE["C++"], value: "C++" }, ] -const tagOptions = computed(() => - tagList.value.map((tag) => ({ label: tag.name, value: tag.name })), -) + +const filteredTagList = computed(() => { + const keyword = tagKeyword.value.trim().toLowerCase() + if (!keyword) return tagList.value + return tagList.value.filter((tag) => tag.name.toLowerCase().includes(keyword)) +}) + +const selectedTagSet = computed(() => new Set(tags.value.select)) + +function toggleExistingTag(tagName: string) { + const selected = new Set(tags.value.select) + if (selected.has(tagName)) { + selected.delete(tagName) + } else { + selected.add(tagName) + } + tags.value.select = Array.from(selected) +} + +function selectFilteredTags() { + const selected = new Set(tags.value.select) + filteredTagList.value.forEach((tag) => selected.add(tag.name)) + tags.value.select = Array.from(selected) +} + +function clearExistingTags() { + tags.value.select = [] +} async function getProblemDetail() { if (!props.problemID) { @@ -468,21 +494,66 @@ watch( - - - - - - - + + + + + +
+ + + + 全选当前 + + + 清空 + + + + + + + {{ tag.name }} + + + +
+
+
+ + +
+ + + 只填写标签库里还没有的标签;已有标签请在左侧点击选择。 + +
+
+
+