Newer
Older
KaiFengPC / src / views / sponeScreen / DialogTabs / dialogTabs.vue
@zhangdeliang zhangdeliang on 23 May 3 KB 初始化项目
<template>
  <div id="NewdialogTabs">
    <el-tabs v-model="AllData.editableTabsValue" :stretch="true" @tab-click="TabsChange">
      <el-tab-pane v-for="item in AllData.editableTabs" :key="item.name" :label="item.title" :name="item.name">
        <component
          :is="item.content"
          :dataID="dataID"
          :SiteNo="SiteNo"
          :tabsType="AllData.editableTabsValue"
          @update-tabs-type="updateTabsType"
          :RefreshName="AllData.RefreshName"
          :key="AllData.RefreshName"
          v-if="AllData.RefreshName == item.name"
        ></component>
      </el-tab-pane>
    </el-tabs>
  </div>
</template>

<script setup name="NewdialogTabs">
import Config from './DialogConfig';
// 父元素传值
const props = defineProps({
  // 数据id
  dataID: {
    type: String,
  },
  SiteNo: {
    type: String,
  },
  // 当前站点需要展示的且已集成的组件列表
  comIDs: {
    type: Array,
  },
  // 自定义组件,产品化开发人员不建议使用,此配置是给项目的特殊需求预留功能,项目中正常的组件需求可以直接使用comIDs
  customComponents: {
    type: Array,
  },
  // 默认打开tabs的key
  RefName: {
    type: String,
  },
});
// 声明本页面中的变量
const AllData = reactive({
  editableTabsValue: '',
  editableTabs: [],
  RefreshName: '',
});
const updateTabsType = name => {
  AllData.editableTabsValue = name;
  AllData.RefreshName = name;
};
// tab切换事件
const TabsChange = (tab, event) => {
  AllData.RefreshName = tab.paneName;
  console.log(tab, AllData.RefreshName);
};
onMounted(() => {
  // 获取当前组件已分配的组件ID与配置文件中的公共组件ID进行对比,控制展示的tab选项
  let ComparisonTable = Config.ComparisonTable;
  AllData.editableTabs = [];
  Promise.all(
    ComparisonTable.map(function (element) {
      if (props.comIDs.includes(element.name)) {
        return element;
      }
    })
  ).then(function (data) {
    data = data.filter(n => n);
    //赋值其拥有的公共组件
    AllData.editableTabs = AllData.editableTabs.concat(data);
    console.log(AllData.editableTabs, '公共组件');
    //对自定义组件进行插入
    props.customComponents.forEach(element => {
      if (element.sort && element.sort != '') {
        // 如果有排序,就按照排序顺序插入到editableTabs中
        AllData.editableTabs.splice(element.sort, 0, element);
      } else if (element.sort == 0) {
        // 如果0,就默认放置在数据队列的最前面
        AllData.editableTabs.splice(0, 0, element);
      } else {
        // 如果没有排序,就默认放置在数据队列的最后面
        AllData.editableTabs.push(element);
      }
    });
    if (props.RefName == '' || props.RefName == undefined) {
      // 默认展示第一个
      AllData.editableTabsValue = AllData.editableTabs[0].name;
      AllData.RefreshName = AllData.editableTabs[0].name;
    } else {
      AllData.editableTabsValue = props.RefName;
      AllData.RefreshName = props.RefName;
    }
  });
});
</script>

<style lang="scss">
#NewdialogTabs {
  width: 100%;
  height: calc(100% - 10px);

  .el-tabs--top {
    width: 100%;
    height: 100%;

    .el-tabs__nav-wrap::after {
      display: none;
    }

    .el-tabs__header {
      background: #031c33;

      .el-tabs__item {
        color: #93a7ba;
        font-size: 16px;
      }

      .is-active {
        color: #00b4ff;
      }

      .el-tabs__active-bar {
        color: #00b4ff;
      }
    }

    .el-tabs__content {
      width: 100%;
      height: calc(100% - 55px);

      .el-tab-pane {
        width: 100%;
        height: 100%;
      }
    }
  }
}
</style>