quanyawei
2024-05-13 1ee177908aaf4cf2474384503404cd238036596c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
import * as _ from 'lodash';
 
import { Module, MutationTree, ActionTree, GetterTree, ActionContext } from 'vuex';
import { RootState } from './../store';
 
export interface IReusetabState {
    source: any[] ;
    to?: string;
}
 
const mutations: MutationTree<IReusetabState> = {
    changeSource(state: IReusetabState, param: any) {
        state.source = param.source;
    },
    changeTo(state: IReusetabState, param: any) {
        state.to = param;
    },
};
 
 
const actions: ActionTree<IReusetabState, RootState> = {
    add(context: ActionContext<IReusetabState, RootState>, param: any) {
        const oldTables = context.state.source;
        const targetName = param.name;
        const activeName = param.activeName;
 
        const isPassport = _.startsWith( targetName, '/passport');
        if  ( isPassport === true ) {
            return;
        }
 
        if (activeName === targetName) {
            return;
        }
        const exist = _.find(oldTables, ( item )  => {
            return item.name === param.name;
        });
 
        if ( exist === undefined) {
            oldTables.push(param);
            context.commit('changeSource', { source: oldTables });
        }
    },
    remove(context: ActionContext<IReusetabState, RootState>, param: any) {
        const source = context.state.source;
        let activeName = param.activeName;
        const targetName = param.name;
        if ( activeName === targetName ) {
            _.forEach(source, (tab, index: number) => {
                if (tab.name === targetName) {
                    const nextTab = source[index + 1] || source[index - 1];
                    if (nextTab) {
                        activeName = nextTab.name;
                        if ( activeName === context.state.to) {
                            context.commit('changeTo', ''); // 如果activename == to,需要先重置
                        }
 
                        setTimeout(() => {
                            context.commit('changeTo', activeName);
                        }, 1);
                    }
                }
            });
        }
        const newTabs = _.filter(source, (tab) => tab.name !== targetName );
        context.commit('changeSource', { source: newTabs });
    },
};
 
const getters: GetterTree<IReusetabState, RootState> = {
 
};
 
const reuseTabState: IReusetabState = {
    source: [],
    to: '',
};
 
const reuseTab: Module<IReusetabState, RootState> = {
    namespaced: true,
    state: reuseTabState,
    getters,
    actions,
    mutations,
};
 
export default reuseTab;