From 3835cf1ca8d5ac8475052d3876ebeb4a2c4160f1 Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Mon, 22 Jan 2024 14:22:02 +0800
Subject: [PATCH] 根据角色,动态切换首页,及首页变更的一系列相关调整
---
src/page/index/tags.vue | 312 ++++++++++++++++++++++++---------------------------
1 files changed, 146 insertions(+), 166 deletions(-)
diff --git a/src/page/index/tags.vue b/src/page/index/tags.vue
index ab14485..ce0a238 100644
--- a/src/page/index/tags.vue
+++ b/src/page/index/tags.vue
@@ -1,186 +1,166 @@
<template>
- <div class="avue-tags"
- v-if="showTag">
- <!-- tag盒子 -->
- <div v-if="contextmenuFlag"
- class="avue-tags__contentmenu"
- :style="{left:contentmenuX+'px',top:contentmenuY+'px'}">
- <div class="item"
- @click="clearCacheTags">{{$t('tagsView.clearCache')}}
- </div>
- <div class="item"
- @click="closeOthersTags">{{$t('tagsView.closeOthers')}}
- </div>
- <div class="item"
- @click="closeAllTags">{{$t('tagsView.closeAll')}}
- </div>
- </div>
- <div class="avue-tags__box"
- :class="{'avue-tags__box--close':!website.isFirstPage}">
- <el-tabs v-model="active"
- type="card"
- @contextmenu.native="handleContextmenu"
- :closable="tagLen!==1"
- @tab-click="openTag"
- @edit="menuTag">
- <el-tab-pane :key="item.value"
- v-for="item in tagList"
- :label="generateTitle(item)"
- :name="item.value">
- </el-tab-pane>
+ <div class="avue-tags" v-if="showTag">
+ <!-- tag盒子 -->
+ <div v-if="contextmenuFlag" class="avue-tags__contentmenu"
+ :style="{ left: contentmenuX + 'px', top: contentmenuY + 'px' }">
+ <div class="item" @click="clearCacheTags">{{ $t('tagsView.clearCache') }}
+ </div>
+ <div class="item" @click="closeOthersTags">{{ $t('tagsView.closeOthers') }}
+ </div>
+ <div class="item" @click="closeAllTags">{{ $t('tagsView.closeAll') }}
+ </div>
+ </div>
+ <div class="avue-tags__box" :class="{ 'avue-tags__box--close': !website.isFirstPage }">
+ <el-tabs v-model="active" type="card" @contextmenu.native="handleContextmenu" :closable="tagLen !== 1"
+ @tab-click="openTag" @edit="menuTag">
+ <el-tab-pane :key="item.value" v-for="item in tagList" :label="generateTitle(item)" :name="item.value">
+ </el-tab-pane>
- </el-tabs>
- <el-dropdown class="avue-tags__menu">
- <el-button type="primary"
- size="mini">
- {{$t('tagsView.menu')}}
- <i class="el-icon-arrow-down el-icon--right"></i>
- </el-button>
- <el-dropdown-menu slot="dropdown">
- <el-dropdown-item @click.native="$parent.isSearch=true">{{$t('tagsView.search')}}</el-dropdown-item>
- <el-dropdown-item @click.native="closeOthersTags">{{$t('tagsView.closeOthers')}}</el-dropdown-item>
- <el-dropdown-item @click.native="closeAllTags">{{$t('tagsView.closeAll')}}</el-dropdown-item>
- <el-dropdown-item @click.native="clearCacheTags">{{$t('tagsView.clearCache')}}</el-dropdown-item>
- </el-dropdown-menu>
- </el-dropdown>
+ </el-tabs>
+ <el-dropdown class="avue-tags__menu">
+ <el-button type="primary" size="mini">
+ {{ $t('tagsView.menu') }}
+ <i class="el-icon-arrow-down el-icon--right"></i>
+ </el-button>
+ <el-dropdown-menu slot="dropdown">
+ <el-dropdown-item @click.native="$parent.isSearch = true">{{ $t('tagsView.search') }}</el-dropdown-item>
+ <el-dropdown-item @click.native="closeOthersTags">{{ $t('tagsView.closeOthers') }}</el-dropdown-item>
+ <el-dropdown-item @click.native="closeAllTags">{{ $t('tagsView.closeAll') }}</el-dropdown-item>
+ <el-dropdown-item @click.native="clearCacheTags">{{ $t('tagsView.clearCache') }}</el-dropdown-item>
+ </el-dropdown-menu>
+ </el-dropdown>
+ </div>
</div>
-
- </div>
</template>
<script>
- import {mapGetters, mapState} from "vuex";
- import {clearCache} from "@/api/user";
+import { mapGetters, mapState } from "vuex"
+import { clearCache } from "@/api/user"
- export default {
+export default {
name: "tags",
- data() {
- return {
- active: "",
- contentmenuX: "",
- contentmenuY: "",
- contextmenuFlag: false
- };
+ data () {
+ return {
+ active: "",
+ contentmenuX: "",
+ contentmenuY: "",
+ contextmenuFlag: false
+ }
},
- created() {
+ created () {
},
- mounted() {
- this.setActive();
+ mounted () {
+ this.setActive()
},
watch: {
- tag() {
- this.setActive();
- },
- contextmenuFlag() {
- window.addEventListener("mousedown", this.watchContextmenu);
- }
+ tag () {
+ this.setActive()
+ },
+ contextmenuFlag () {
+ window.addEventListener("mousedown", this.watchContextmenu)
+ }
},
computed: {
- ...mapGetters(["tagWel", "tagList", "tag", "website"]),
- ...mapState({
- showTag: state => state.common.showTag
- }),
- tagLen() {
- return this.tagList.length || 0;
- }
+ ...mapGetters(["tagWel", "tagList", "tag", "website", "homeFirstPage"]),
+ ...mapState({
+ showTag: state => state.common.showTag
+ }),
+ tagLen () {
+ return this.tagList.length || 0
+ }
},
methods: {
- generateTitle(item) {
- return this.$router.$avueRouter.generateTitle(
- item.label,
- (item.meta || {}).i18n
- );
- },
- watchContextmenu(event) {
- if (!this.$el.contains(event.target) || event.button !== 0) {
- this.contextmenuFlag = false;
+ generateTitle (item) {
+ return this.$router.$avueRouter.generateTitle(
+ item.label,
+ (item.meta || {}).i18n
+ )
+ },
+ watchContextmenu (event) {
+ if (!this.$el.contains(event.target) || event.button !== 0) {
+ this.contextmenuFlag = false
+ }
+ window.removeEventListener("mousedown", this.watchContextmenu)
+ },
+ handleContextmenu (event) {
+ let target = event.target
+ // 解决 https://github.com/d2-projects/d2-admin/issues/54
+ let flag = false
+ if (target.className.indexOf("el-tabs__item") > -1) flag = true
+ else if (target.parentNode.className.indexOf("el-tabs__item") > -1) {
+ target = target.parentNode
+ flag = true
+ }
+ if (flag) {
+ event.preventDefault()
+ event.stopPropagation()
+ this.contentmenuX = event.clientX
+ this.contentmenuY = event.clientY
+ this.tagName = target.getAttribute("aria-controls").slice(5)
+ this.contextmenuFlag = true
+ }
+ },
+ //激活当前选项
+ setActive () {
+ this.active = this.tag.value
+ },
+ menuTag (value, action) {
+ if (action === "remove") {
+ let { tag, key } = this.findTag(value)
+ this.$store.commit("DEL_TAG", tag)
+ if (tag.value === this.tag.value) {
+ tag = this.tagList[key === 0 ? key : key - 1] //如果关闭本标签让前推一个
+ this.openTag(tag)
+ }
+ }
+ },
+ openTag (item) {
+ let tag
+ if (item.name) {
+ tag = this.findTag(item.name).tag
+ } else {
+ tag = item
+ }
+ this.$router.push({
+ path: this.$router.$avueRouter.getPath({
+ name: tag.label,
+ src: tag.value
+ }, tag.meta),
+ query: tag.query
+ })
+ },
+ closeOthersTags () {
+ this.contextmenuFlag = false
+ this.$store.commit("DEL_TAG_OTHER")
+ },
+ findTag (value) {
+ let tag, key
+ this.tagList.map((item, index) => {
+ if (item.value === value) {
+ tag = item
+ key = index
+ }
+ })
+ return { tag: tag, key: key }
+ },
+ closeAllTags () {
+ this.contextmenuFlag = false
+ this.$store.commit("DEL_ALL_TAG")
+ this.$router.push({ path: this.homeFirstPage })
+ },
+ clearCacheTags () {
+ this.$confirm("是否需要清除缓存?", {
+ confirmButtonText: "确定",
+ cancelButtonText: "取消",
+ type: "warning"
+ }).then(() => {
+ clearCache().then(() => {
+ this.contextmenuFlag = false
+ this.$message.success('清除完毕')
+ })
+ })
}
- window.removeEventListener("mousedown", this.watchContextmenu);
- },
- handleContextmenu(event) {
- let target = event.target;
- // 解决 https://github.com/d2-projects/d2-admin/issues/54
- let flag = false;
- if (target.className.indexOf("el-tabs__item") > -1) flag = true;
- else if (target.parentNode.className.indexOf("el-tabs__item") > -1) {
- target = target.parentNode;
- flag = true;
- }
- if (flag) {
- event.preventDefault();
- event.stopPropagation();
- this.contentmenuX = event.clientX;
- this.contentmenuY = event.clientY;
- this.tagName = target.getAttribute("aria-controls").slice(5);
- this.contextmenuFlag = true;
- }
- },
- //激活当前选项
- setActive() {
- this.active = this.tag.value;
- },
- menuTag(value, action) {
- if (action === "remove") {
- let {tag, key} = this.findTag(value);
- this.$store.commit("DEL_TAG", tag);
- if (tag.value === this.tag.value) {
- tag = this.tagList[key === 0 ? key : key - 1]; //如果关闭本标签让前推一个
- this.openTag(tag);
- }
- }
- },
- openTag(item) {
- let tag;
- if (item.name) {
- tag = this.findTag(item.name).tag;
- } else {
- tag = item;
- }
- this.$router.push({
- path: this.$router.$avueRouter.getPath({
- name: tag.label,
- src: tag.value
- }, tag.meta),
- query: tag.query
- });
- },
- closeOthersTags() {
- this.contextmenuFlag = false;
- this.$store.commit("DEL_TAG_OTHER");
- },
- findTag(value) {
- let tag, key;
- this.tagList.map((item, index) => {
- if (item.value === value) {
- tag = item;
- key = index;
- }
- });
- return {tag: tag, key: key};
- },
- closeAllTags() {
- this.contextmenuFlag = false;
- this.$store.commit("DEL_ALL_TAG");
- this.$router.push({
- path: this.$router.$avueRouter.getPath({
- src: this.tagWel.value
- }),
- query: this.tagWel.query
- });
- },
- clearCacheTags() {
- this.$confirm("是否需要清除缓存?", {
- confirmButtonText: "确定",
- cancelButtonText: "取消",
- type: "warning"
- }).then(() => {
- clearCache().then(() => {
- this.contextmenuFlag = false;
- this.$message.success('清除完毕');
- })
- });
- }
}
- };
+}
</script>
--
Gitblit v1.9.3