From 442bbf922e6dfcf92d916c47ae92920c0b29cd24 Mon Sep 17 00:00:00 2001 From: jmal Date: Wed, 19 Feb 2025 16:42:02 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=E5=B7=A6=E4=BE=A7=E8=8F=9C?= =?UTF-8?q?=E5=8D=95=E6=A0=8F=E6=B7=BB=E5=8A=A0=E6=A0=87=E7=AD=BE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E5=8A=9F=E8=83=BD=EF=BC=8C=E5=8C=85=E6=8B=AC=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E3=80=81=E5=88=A0=E9=99=A4=E5=92=8C=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/tag.js | 22 ++ src/layout/components/Sidebar/index.vue | 277 ++++++++++++++++++++++-- 2 files changed, 284 insertions(+), 15 deletions(-) diff --git a/src/api/tag.js b/src/api/tag.js index 5ea073e..50021cd 100644 --- a/src/api/tag.js +++ b/src/api/tag.js @@ -39,6 +39,28 @@ export default { return qs.stringify(params, { arrayFormat: 'repeat' }) } }) + }, + // 修改标签排序 + setTagSort: function(data) { + return request({ + url: '/tag/sort', + method: 'post', + data + }) + }, + deleteFileTag: function(params) { + return request({ + url: '/deleteTag', + method: 'delete', + params + }) + }, + updateFileTag: function(params) { + return request({ + url: '/updateTag', + method: 'put', + params + }) } } diff --git a/src/layout/components/Sidebar/index.vue b/src/layout/components/Sidebar/index.vue index 16c0049..7addeea 100644 --- a/src/layout/components/Sidebar/index.vue +++ b/src/layout/components/Sidebar/index.vue @@ -1,5 +1,26 @@ From 39d8450cc3c5b71df1816332ff8b25fa73026c09 Mon Sep 17 00:00:00 2001 From: jmal Date: Wed, 19 Feb 2025 17:20:37 +0800 Subject: [PATCH 2/2] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=E6=A0=87?= =?UTF-8?q?=E7=AD=BE=E9=80=89=E4=B8=AD=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/layout/components/Sidebar/index.vue | 50 +++++++++++++++++-------- 1 file changed, 35 insertions(+), 15 deletions(-) diff --git a/src/layout/components/Sidebar/index.vue b/src/layout/components/Sidebar/index.vue index 7addeea..5e66829 100644 --- a/src/layout/components/Sidebar/index.vue +++ b/src/layout/components/Sidebar/index.vue @@ -71,7 +71,7 @@ v-for="tag in tagList" :key="tag.tagId" > -
  • +
  • @@ -80,7 +80,8 @@
    • @@ -187,7 +188,8 @@ export default { { validator: checkTagName, trigger: 'blur' }, ] }, - tagUpdateLoading: false + tagUpdateLoading: false, + selectedTagId: null, } }, computed: { @@ -239,7 +241,8 @@ export default { isCollapse(val){ }, $route(to) { - this.showTag = to.meta !== undefined && to.meta.menuType !== undefined && to.meta.menuType === 0; + this.showTag = to.meta !== undefined && to.meta.menuType !== undefined && to.meta.menuType === 0 + this.setSelectedTagFromUrl() }, message(msg) { if (msg.event === 'msg/file/change') { @@ -260,6 +263,8 @@ export default { }; this.tagDrop() + this.setSelectedTagFromUrl() + }, methods: { getTagList() { @@ -280,7 +285,7 @@ export default { const _this = this Sortable.create(tagList, { animation: 150, - ghostClass: 'blue-background-class', + ghostClass: 'drop-background-class', onEnd({ newIndex, oldIndex }) { const currRow = _this.tagList.splice(oldIndex, 1)[0] _this.tagList.splice(newIndex, 0, currRow) @@ -324,7 +329,17 @@ export default { }) }, tagClick(tag) { - this.$router.push(`/tag?tagId=${tag.id}`); + this.$router.push(`/tag?tagId=${tag.id}`) + this.selectedTagId = tag.id + }, + setSelectedTagFromUrl() { + // 从 URL 中获取 tagId 参数 + const tagId = this.$route.query.tagId + if (this.$route.path.startsWith("/tag") && tagId) { + this.selectedTagId = tagId + } else { + this.selectedTagId = null + } }, clickTagMore(tag, event) { this.contextTag = tag @@ -476,15 +491,11 @@ export default { font-size: 14px; color: #606266; cursor: pointer; - margin: 0 5px 0 5px; + margin: 2px 5px 2px 5px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; - display: flex; - justify-content: space-between; - align-items: center; - .tag-name-icon { display: flex; justify-content: flex-start; @@ -500,7 +511,7 @@ export default { .btn-more { display: none; padding: 2px 5px; - background: #eaeaea; + background: #dadada; border: 0; } @@ -513,13 +524,22 @@ export default { background-color: #ecf5ff; } &:hover { - background-color: #eaeaea !important; + background-color: #dadada !important; border-radius: 4px; .btn-more { display: block; } } } + .infinite-list-item.highlight { + background-color: #dadada; + border-radius: 4px; + } + .infinite-list-item.expand { + display: flex; + justify-content: space-between; + align-items: center; + } .infinite-list-item.collapse { padding-left: unset; text-align: center; @@ -613,8 +633,8 @@ export default { } } } -.blue-background-class { - background-color: rgba(64, 158, 255, 0.82); +.drop-background-class { + background-color: #409EFFD1; border-radius: 4px; } .form-tag-color {