loulijun2021
2022-07-11 9b825939b7f0a7439d704b379812362dd95697fc
src/layout/components/TagsView/index.vue
@@ -28,6 +28,8 @@
<script>
import ScrollPane from './ScrollPane'
import path from 'path'
import { getCookie } from '@/utils/auth'
import $ from 'jquery'
export default {
  components: { ScrollPane },
@@ -64,9 +66,45 @@
  mounted() {
    this.initTags()
    this.addTags()
    this.beforeUnload()
  },
  methods: {
    // 解决 vue-admin-template 刷新页面 TagsView 丢失问题
    beforeUnload() {
      // 监听页面刷新
      window.addEventListener('beforeunload', () => {
        // visitedViews数据结构太复杂无法直接JSON.stringify处理,先转换需要的数据
        const tabViews = this.visitedViews.map(item => {
          return {
            fullPath: item.fullPath,
            hash: item.hash,
            meta: { ...item.meta },
            name: item.name,
            params: { ...item.params },
            path: item.path,
            query: { ...item.query },
            title: item.title
          }
        })
        sessionStorage.setItem('tabViews', JSON.stringify(tabViews))
      })
      // 页面初始化加载判断缓存中是否有数据
      const oldViews = JSON.parse(sessionStorage.getItem('tabViews')) || []
      if (oldViews.length > 0) {
        this.$store.state.tagsView.visitedViews = oldViews
      }
    },
    isActive(route) {
      if (this.$route.path === '/scgl/sckbg') {
        const time = setInterval(() => {
          this.$nextTick(() => {
            $("input[name='produceCode']")[0].focus()
            $("input[name='WXproduceCode']")[0].focus()
            clearInterval(time)
          })
        })
      }
      return route.path === this.$route.path
    },
    isAffix(tag) {
@@ -198,13 +236,14 @@
</script>
<style lang="scss" scoped>
$main_color :#42b983;
$main_color: #42b983;
.tags-view-container {
  height: 34px;
  width: 100%;
  background: #fff;
  border-bottom: 1px solid #d8dce5;
  box-shadow: 0 1px 3px 0 rgba(0, 0, 0, .12), 0 0 3px 0 rgba(0, 0, 0, .04);
  .tags-view-wrapper {
    .tags-view-item {
      display: inline-block;
@@ -219,16 +258,20 @@
      font-size: 12px;
      margin-left: 5px;
      margin-top: 4px;
      &:first-of-type {
        margin-left: 15px;
      }
      &:last-of-type {
        margin-right: 15px;
      }
      &.active {
        background-color:$main_color;
        background-color: $main_color;
        color: #fff;
        border-color:$main_color;
        border-color: $main_color;
        &::before {
          content: '';
          background: #fff;
@@ -242,6 +285,7 @@
      }
    }
  }
  .contextmenu {
    margin: 0;
    background: #fff;
@@ -254,10 +298,12 @@
    font-weight: 400;
    color: #333;
    box-shadow: 2px 2px 3px 0 rgba(0, 0, 0, .3);
    li {
      margin: 0;
      padding: 7px 16px;
      cursor: pointer;
      &:hover {
        background: #eee;
      }
@@ -278,11 +324,13 @@
      text-align: center;
      transition: all .3s cubic-bezier(.645, .045, .355, 1);
      transform-origin: 100% 50%;
      &:before {
        transform: scale(.6);
        display: inline-block;
        vertical-align: -3px;
      }
      &:hover {
        background-color: #b4bccc;
        color: #fff;