123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- import { mapState } from 'vuex'
- import VisitedModelTransform from '@/utils/mixins/tran-visited'
- class VisitedPathItem {
- constructor (path, search) {
- this.path = path
- this.search = search
- this.timestamp = Date.now()
- }
- }
- const TranModel = new VisitedModelTransform()
- export const mixinVisited = {
- computed: {
- ...mapState({
- visitedList: state => state.user.visitedList
- })
- },
- created () {
- this.$store.commit('user/refreshVisited')
- },
- methods: {
- createPathItem (path, search) {
- return TranModel.transformItem(new VisitedPathItem(path, search))
- },
- // 从判断 path 是否访问过
- // 参数path为 VisitedPathItem new 出来的实例
- pathVisitedIndex (path) {
- const list = this.visitedList
- let sameIndex = -1
- if (list) {
- for (let i = 0; i < list.length; i++) {
- const same = this.comparePath(list[i], path)
- if (same) {
- sameIndex = i
- break
- }
- }
- }
- return sameIndex
- },
- comparePath (basePath, newPath) {
- const pathSame = basePath.type === newPath.type
- const searchSame = basePath.id === newPath.id
- return pathSame && searchSame
- },
- pathVisited (path) {
- return this.pathVisitedIndex(path) !== -1
- },
- // 保存一条历史
- // 参数path为 VisitedPathItem new出来的实例
- pathVisiting (path) {
- if (!path) return
- // 判断是否重复
- const index = this.pathVisitedIndex(path)
- const visitedList = JSON.parse(JSON.stringify(this.visitedList))
- if (index >= 0) {
- // 已存在
- const itemArr = visitedList.splice(index, 1)
- const item = itemArr[0]
- item.timestamp = Date.now()
- visitedList.unshift(item)
- } else {
- visitedList.unshift(path)
- }
- // 全量替换
- this.$store.commit('user/addVisited', visitedList)
- }
- }
- }
|