<template>
    <el-card v-loading="loading" class="map-list-main">
        <div slot="header" class="clearfix">
            <span>{{ $t('global.mapList') }}</span>
        </div>
        <filter-city ref="filerCity" filter-empty :query-function="queryFunction" @filterSelectChange="refresh" />
        <el-input v-model="filterText" :placeholder="this.$t('global.filteringKeywords')" clearable />
        <el-scrollbar wrap-class="scrollbar-wrapper" :style="{ height: (height-125) +'px' }">
            <el-tree
                ref="tree"
                :data="treeList"
                node-key="id"
                :props="defaultProps"
                highlight-current
                :span="22"
                :filter-node-method="filterNode"
                :default-expanded-keys="expandList"
                @node-click="clickEvent"
                @node-contextmenu="showContextMenu"
                @node-expand="nodeExpand"
                @node-collapse="nodeCollapse"
            >
        <span slot-scope="{ node:tnode, data }">
          <span
              class="el-icon-tickets"
              :style="{color: data.valid ? 'green':''}"
          >&nbsp;{{ tnode.label }}</span>
        </span>
            </el-tree>
        </el-scrollbar>
    </el-card>
</template>
<script>
    import { getPublishMapTree } from '@/api/management/mapprd';
    import { getTrainingSystemList } from '@/api/trainingPlatform'
    import { UrlConfig } from '@/router/index';
    import { getSessionStorage, setSessionStorage, removeSessionStorage } from '@/utils/auth';
    import FilterCity from '@/views/components/filterCity';

    export default {
        name: 'DemonList',
        components: {
            FilterCity
        },
        props: {
            height: {
                type: Number,
                required: true
            }
        },
        data() {
            return {
                loading: true,
                defaultShowKeys: [],
                queryFunction: getPublishMapTree,
                filterText: '',
                treeData: [],
                treeList: [],
                selected: {},
                defaultProps: {
                    children: 'children',
                    label: 'name'
                },
                node: {
                },
                mapId: '',
                expandList: []
            };
        },
        watch: {
            filterText(val) {
                this.treeList = this.treeData.filter((res) => {
                    return res.name.includes(val);
                });
            }
        },
        beforeDestroy () {
        },
        mounted() {
        },
        methods: {
            filterNode(value, data) {
                if (!value) return true;
                return data.name.indexOf(value) !== -1;
            },
            showContextMenu(e, obj, node, vueElem) {
                if (obj) {
                    this.node = node;
                    this.selected = obj;
                }
            },
            clickEvent(obj, data, ele) {
                setSessionStorage('trainIngPlatformCheckId', obj.id);
                while (data) {
                    if (data.data.type === 'map') {
                        this.mapId = data.data.id;
                        break;
                    }
                    data = data.parent;
                }
                if (obj.type === '仿真系统') {
                    this.$router.push({ path: `${UrlConfig.trainingPlatform.prodDetail}/${this.mapId}`, query: { prodId: obj.code, type: obj.type }});
                } else if ( obj.type === 'map'){
                    this.mapId = obj.id;
                    this.$router.push({ path: `${UrlConfig.trainingPlatform.permission}/${this.mapId}`});
                } else if ( obj.type === '教学系统' ){
                    this.$router.push({ path: `${UrlConfig.trainingPlatform.teachDetail}`, query: { prodId: obj.code, type: obj.type }});
                } else if ( obj.type === '考试系统' ){
                    this.$router.push({ path: `${UrlConfig.trainingPlatform.course}/${this.mapId}`, query: { prodId: obj.code, type: obj.type }});
                }
            },
            async refresh(filterSelect) {
                this.loading = true;
                this.treeData = this.treeList = [];
                try {
                    const res = await getTrainingSystemList({cityCode:filterSelect});
                    this.treeData = res.data;
                    this.treeList = this.filterText
                        ? res.data.filter(elem => { return elem.name.includes(this.filterText); })
                        : res.data;
                    this.getExpandList();
                    this.$nextTick(() => {
                        const checkId = getSessionStorage('trainingPlatformCheckId') || null;
                        this.$refs.tree.setCurrentKey(checkId);
                        this.loading = false;
                    });
                } catch (error) {
                    this.loading = false;
                    this.$messageBox(this.$t('error.refreshFailed'));
                }
            },
            nodeExpand(obj, node, ele) {
                const key = obj.id;
                this.expandList = this.expandList.filter(item => item!==key);
                this.expandList.push(key);
                setSessionStorage('trainIngPlatformExpandList',this.expandList)
            },
            nodeCollapse(obj, node, ele) {
                const key = obj.id;
                this.expandList = this.expandList.filter(item => item!==key);
                setSessionStorage('trainIngPlatformExpandList',this.expandList)
            },
            getExpandList() {
                let expand = getSessionStorage('trainIngPlatformExpandList');
                expand = expand?(expand+'').split(','):'';
                if (expand instanceof Array){
                    this.expandList = expand;
                }
            }
        }
    };
</script>
<style rel="stylesheet/scss" lang="scss" scoped>
    .back-home {
        float: right;
        cursor: pointer;

    &:hover {
         color: #3ea726;
     }
    }
</style>
<style>
    .el-tree {
        overflow-x: hidden;
    }

    .el-tree-node.is-current>.el-tree-node__content {
        background-color: #e4e3e3 !important;
    }
</style>
