及时清理监听事件

This commit is contained in:
jmal 2024-03-18 10:20:38 +08:00
parent 263eea0210
commit 306762738c
8 changed files with 151 additions and 63 deletions

View File

@ -386,7 +386,10 @@
> >
<template slot-scope="scope"> <template slot-scope="scope">
<el-tooltip <el-tooltip
v-if="scope.row.index === cellMouseIndex && (!scope.row.isShare || scope.row.shareBase)" v-if="
scope.row.index === cellMouseIndex &&
(!scope.row.isShare || scope.row.shareBase)
"
class="item" class="item"
effect="light" effect="light"
content="分享" content="分享"
@ -690,9 +693,15 @@
> >
</el-form-item> </el-form-item>
<el-form-item label="位置:" class="details-position"> <el-form-item label="位置:" class="details-position">
<a :href="'/?path=' + rowContextData.path + '&highlight=' + rowContextData.name">{{ <a
rowContextData.path :href="
}}</a> '/?path=' +
rowContextData.path +
'&highlight=' +
rowContextData.name
"
>{{ rowContextData.path }}</a
>
</el-form-item> </el-form-item>
<el-form-item label="创建时间:"> <el-form-item label="创建时间:">
<span>{{ rowContextData.uploadDate }}</span> <span>{{ rowContextData.uploadDate }}</span>
@ -807,8 +816,11 @@
> >
</div> </div>
</el-dialog> </el-dialog>
<tag-dialog :fileList="tagDialogObjectList" <tag-dialog
:status.sync="tagDialogVisible" @onSuccess="allocateTagSuccess"/> :fileList="tagDialogObjectList"
:status.sync="tagDialogVisible"
@onSuccess="allocateTagSuccess"
/>
<share-dialog <share-dialog
:file.sync="shareDialogObject" :file.sync="shareDialogObject"
:status.sync="shareDialogVisible" :status.sync="shareDialogVisible"
@ -1316,6 +1328,14 @@ export default {
} }
}, 50); }, 50);
}, },
destroyed() {
Bus.$off("fileSuccess");
Bus.$off("loadFileFaild");
Bus.$off("clickMore");
Bus.$off("renameRow");
Bus.$off("msg/file/change");
Bus.$off("msg/file/operation/fault");
},
beforeDestroy() { beforeDestroy() {
window.removeEventListener("keydown", this.keydown, false); window.removeEventListener("keydown", this.keydown, false);
window.removeEventListener("keyup", this.keyup, false); window.removeEventListener("keyup", this.keyup, false);
@ -1381,6 +1401,7 @@ export default {
: chineseLength; : chineseLength;
}, },
keydown(event) { keydown(event) {
console.log('sdf')
const isMac = navigator.platform.startsWith("Mac"); const isMac = navigator.platform.startsWith("Mac");
const { key, c, keyCode, ctrlKey, metaKey } = event; const { key, c, keyCode, ctrlKey, metaKey } = event;
this.isCmd = (isMac && metaKey) || (!isMac && ctrlKey); this.isCmd = (isMac && metaKey) || (!isMac && ctrlKey);
@ -4166,7 +4187,7 @@ export default {
} }
a:hover { a:hover {
color: #409EFF; color: #409eff;
} }
} }
@ -4198,7 +4219,7 @@ export default {
>>> .plTableBox .el-table .el-table__header { >>> .plTableBox .el-table .el-table__header {
th { th {
background-color: #FFFFFF; background-color: #ffffff;
} }
.is-sortable:hover { .is-sortable:hover {
@ -4218,7 +4239,7 @@ export default {
} }
.home-link:hover { .home-link:hover {
color: #409EFF; color: #409eff;
} }
.info-statistics { .info-statistics {
@ -4247,7 +4268,7 @@ export default {
margin-left: 5px !important; margin-left: 5px !important;
} }
> > > .open-file-dialog { > .open-file-dialog {
.el-dialog { .el-dialog {
width: 420px; width: 420px;
} }
@ -4261,13 +4282,13 @@ export default {
} }
} }
> > > .v-contextmenu-item { > .v-contextmenu-item {
.svg-icon { .svg-icon {
font-size: 14px; font-size: 14px;
} }
} }
> > > .new-text-file-dialog { > .new-text-file-dialog {
height: 350px; height: 350px;
top: calc(50% - 175px); top: calc(50% - 175px);
@ -4291,7 +4312,7 @@ export default {
} }
} }
> > > .van-grid-item__content { > .van-grid-item__content {
background-size: cover; background-size: cover;
background-position: center; background-position: center;
padding: 0; padding: 0;
@ -4356,4 +4377,3 @@ export default {
} }
} }
</style> </style>

View File

@ -294,6 +294,9 @@ export default {
Bus.$off('openUploader') Bus.$off('openUploader')
Bus.$off('uploadFolder') Bus.$off('uploadFolder')
Bus.$off('uploadFileListBack') Bus.$off('uploadFileListBack')
Bus.$off('fileListScrollTop')
Bus.$off('onDragStart')
Bus.$off('storageTypeChange')
}, },
methods: { methods: {
initUploader() { initUploader() {

View File

@ -1,14 +1,16 @@
<template> <template>
<div> <div>
<viewer v-show="pc" <viewer
:options="options" v-show="pc"
:images="images" :options="options"
@inited="inited" :images="images"
class="viewer" ref="viewer" @inited="inited"
class="viewer"
ref="viewer"
> >
<template slot-scope="scope"> <template slot-scope="scope">
<div v-for="(image,index) in scope.images" :key="index"> <div v-for="(image, index) in scope.images" :key="index">
<img :src="image.thumbnail" :data-src="image.source"> <img :src="image.thumbnail" :data-src="image.source" />
</div> </div>
</template> </template>
</viewer> </viewer>
@ -110,6 +112,9 @@ export default {
this.$emit('update:status', false) this.$emit('update:status', false)
}) })
}, },
destroyed() {
Bus.$off("updateImageViewerStatus")
},
methods: { methods: {
inited(viewer) { inited(viewer) {
this.$viewer = viewer this.$viewer = viewer

View File

@ -1,12 +1,22 @@
<template> <template>
<div class="sidebar-logo-container" :class="{'collapse':collapse}"> <div class="sidebar-logo-container" :class="{ collapse: collapse }">
<transition name="sidebarLogoFade"> <transition name="sidebarLogoFade">
<router-link v-if="collapse" key="collapse" class="sidebar-logo-link" to="/"> <router-link
v-if="collapse"
key="collapse"
class="sidebar-logo-link"
to="/"
>
<Logo v-model="netdiskLogo" width="50" padding="8"></Logo> <Logo v-model="netdiskLogo" width="50" padding="8"></Logo>
</router-link> </router-link>
<router-link v-else key="expand" class="sidebar-logo-link logo-expand" to="/"> <router-link
v-else
key="expand"
class="sidebar-logo-link logo-expand"
to="/"
>
<Logo v-model="netdiskLogo" width="50" padding="8"></Logo> <Logo v-model="netdiskLogo" width="50" padding="8"></Logo>
<h1 class="sidebar-title">{{ title }} </h1> <h1 class="sidebar-title">{{ title }}</h1>
</router-link> </router-link>
</transition> </transition>
</div> </div>
@ -44,6 +54,9 @@ export default {
this.netdiskLogo = this.$store.state.user.netdiskLogo this.netdiskLogo = this.$store.state.user.netdiskLogo
}) })
}, },
destroyed() {
Bus.$off('updateLogo')
},
data() { data() {
return { return {
} }
@ -78,14 +91,14 @@ export default {
width: 32px; width: 32px;
height: 32px; height: 32px;
vertical-align: middle; vertical-align: middle;
margin-right: 2px!important; margin-right: 2px !important;
} }
& .sidebar-logo-expand { & .sidebar-logo-expand {
width: 32px; width: 32px;
height: 32px; height: 32px;
vertical-align: middle; vertical-align: middle;
margin-right: 12px!important; margin-right: 12px !important;
} }
& .sidebar-title { & .sidebar-title {

View File

@ -1,5 +1,5 @@
<template> <template>
<div :class="{'has-logo':showLogo}"> <div :class="{ 'has-logo': showLogo }">
<div class="scrollbar-head"> <div class="scrollbar-head">
<logo v-if="showLogo" :collapse="isCollapse" /> <logo v-if="showLogo" :collapse="isCollapse" />
<el-scrollbar wrap-class="scrollbar-wrapper"> <el-scrollbar wrap-class="scrollbar-wrapper">
@ -13,45 +13,83 @@
:collapse-transition="false" :collapse-transition="false"
mode="vertical" mode="vertical"
> >
<sidebar-item v-for="route in routes" :key="route.path" :item="route" :base-path="route.path" /> <sidebar-item
v-for="route in routes"
:key="route.path"
:item="route"
:base-path="route.path"
/>
</el-menu> </el-menu>
</el-scrollbar> </el-scrollbar>
</div> </div>
<div class="scrollbar-tag" :class="{'collapse': isCollapse}">标签</div> <div class="scrollbar-tag" :class="{ collapse: isCollapse }">标签</div>
<div class="scroll-decoration-top"></div> <div class="scroll-decoration-top"></div>
<el-scrollbar class="tag-list" wrap-class="scrollbar-wrapper"> <el-scrollbar class="tag-list" wrap-class="scrollbar-wrapper">
<div v-if="isCollapse"> <div v-if="isCollapse">
<ul class="infinite-list"> <ul class="infinite-list">
<el-tooltip class="item" effect="dark" :content="tag.name" placement="right" v-for="tag in tagList" :key="tag.tagId"> <el-tooltip
<li class="infinite-list-item collapse"> class="item"
<svg-icon :style="{ color: tag.color, fontSize: '14px' }" icon-class="tag2"></svg-icon> effect="dark"
</li> :content="tag.name"
</el-tooltip> placement="right"
</ul> v-for="tag in tagList"
</div> :key="tag.tagId"
<div v-else> >
<ul class="infinite-list"> <li class="infinite-list-item collapse">
<li v-for="tag in tagList" :key="tag.id" class="infinite-list-item"> <svg-icon
<router-link :to="'/tag?tagId=' + tag.id" @click.native="tagClick(tag)"> :style="{ color: tag.color, fontSize: '14px' }"
<svg-icon :style="{ color: tag.color, fontSize: '14px' }" icon-class="tag2"></svg-icon> icon-class="tag2"
<span>{{ tag.name }}</span> ></svg-icon>
</router-link> </li>
</li> </el-tooltip>
</ul> </ul>
</div> </div>
<div v-else>
<ul class="infinite-list">
<li
v-for="tag in tagList"
:key="tag.id"
class="infinite-list-item"
@click="tagClick(tag)"
>
<!-- <router-link :to="'/tag?tagId=' + tag.id" @click.native="tagClick(tag)">-->
<svg-icon
:style="{ color: tag.color, fontSize: '14px' }"
icon-class="tag2"
></svg-icon>
<span>{{ tag.name }}</span>
<!-- </router-link>-->
</li>
</ul>
</div>
</el-scrollbar> </el-scrollbar>
<div class="scroll-decoration-bottom"></div> <div class="scroll-decoration-bottom"></div>
<div class="scrollbar-footer"> <div class="scrollbar-footer">
<div class="quota-space"> <div class="quota-space">
<el-progress v-show="percentage > 0" :class="{'collapse': isCollapse}" :percentage="percentage" :format="progressFormat" :color="customColors"></el-progress> <el-progress
v-show="percentage > 0"
:class="{ collapse: isCollapse }"
:percentage="percentage"
:format="progressFormat"
:color="customColors"
></el-progress>
</div> </div>
<div class="webdav"> <div class="webdav">
<div :class="{'normal': true, 'collapse': isCollapse}" @mousemove="showCopyBtn = true" @mouseleave="showCopyBtn = false"> <div
:class="{ normal: true, collapse: isCollapse }"
@mousemove="showCopyBtn = true"
@mouseleave="showCopyBtn = false"
>
<svg-icon class="webdav-icon" icon-class="disk-drive"></svg-icon> <svg-icon class="webdav-icon" icon-class="disk-drive"></svg-icon>
<div class="wedav-text">WebDAV </div> <div class="wedav-text">WebDAV</div>
<el-tooltip placement="right" v-if="showCopyBtn"> <el-tooltip placement="right" v-if="showCopyBtn">
<div slot="content">点击复制WebDAV地址<br/>{{webdavUrl}}</div> <div slot="content">点击复制WebDAV地址<br />{{ webdavUrl }}</div>
<svg-icon class="copy-btn" icon-class="menu-fuzhi" @click="copyWebDAVLink('.copy-btn')" :data-clipboard-text="webdavUrl"></svg-icon> <svg-icon
class="copy-btn"
icon-class="menu-fuzhi"
@click="copyWebDAVLink('.copy-btn')"
:data-clipboard-text="webdavUrl"
></svg-icon>
</el-tooltip> </el-tooltip>
</div> </div>
</div> </div>
@ -144,6 +182,9 @@ export default {
}) })
Bus.$on('msg/file/change', (msg) => this.onmessage(msg)) Bus.$on('msg/file/change', (msg) => this.onmessage(msg))
}, },
destroyed() {
Bus.$off('msg/file/change')
},
methods: { methods: {
onmessage(msg) { onmessage(msg) {
const takeUpSpace = msg.space const takeUpSpace = msg.space
@ -168,8 +209,9 @@ export default {
}) })
}, },
tagClick(tag) { tagClick(tag) {
console.log('tagClick', tag.tagId) console.log('tagClick', tag.id)
Bus.$emit('tagPageChange', tag.tagId) this.$router.push(`/tag?tagId=${tag.id}`);
Bus.$emit('tagPageChange', tag.id)
}, },
mouseleave() { mouseleave() {
}, },
@ -259,20 +301,20 @@ export default {
font-size: 14px; font-size: 14px;
height: 32px; height: 32px;
line-height: 32px; line-height: 32px;
>>>.el-progress-bar { >>> .el-progress-bar {
padding-right: 40px; padding-right: 40px;
margin-left: 20px; margin-left: 20px;
} }
>>>.el-progress__text { >>> .el-progress__text {
margin-left: 20px; margin-left: 20px;
font-size: 12px!important; font-size: 12px !important;
} }
.collapse { .collapse {
>>>.el-progress-bar { >>> .el-progress-bar {
padding-right: 4px; padding-right: 4px;
margin-left: 2px; margin-left: 2px;
} }
>>>.el-progress__text { >>> .el-progress__text {
margin-left: 5px; margin-left: 5px;
display: block; display: block;
} }
@ -287,7 +329,7 @@ export default {
padding-left: 20px; padding-left: 20px;
.webdav-icon { .webdav-icon {
margin-top: 12px; margin-top: 12px;
margin-right: 0!important; margin-right: 0 !important;
} }
.copy-btn { .copy-btn {
margin-top: 10px; margin-top: 10px;

View File

@ -483,6 +483,8 @@ export default {
}, },
destroyed() { destroyed() {
window.removeEventListener('popstate', this.goBack, false) window.removeEventListener('popstate', this.goBack, false)
Bus.$off('fileSuccess')
Bus.$off('clickMore')
}, },
directives: { directives: {
// 注册一个局部的自定义指令 v-focus // 注册一个局部的自定义指令 v-focus

View File

@ -215,7 +215,7 @@ export default {
} }
}, },
destroyed() { destroyed() {
Bus.$off() Bus.$off('msg/synced')
}, },
computed: { computed: {
...mapGetters([ ...mapGetters([

View File

@ -36,6 +36,9 @@ export default {
console.log('tagPageChange', tagId) console.log('tagPageChange', tagId)
this.queryCondition.tagId = tagId this.queryCondition.tagId = tagId
}) })
},
destroyed() {
Bus.$off('tagPageChange')
} }
} }
</script> </script>