doum
2025-09-25 c5675caab8392bfafd217d06529c2547edaa6aa8
admin/src/components/common/MenuSelect.vue
@@ -12,6 +12,7 @@
<script>
import TreeSelect from './TreeSelect'
// import { fetchTree, fetchTree1 } from '@/api/system/menu'
import { fetchTree } from '@/api/system/menu'
export default {
  name: 'MenuSelect',
@@ -20,6 +21,9 @@
    value: {},
    inline: {
      default: true
    },
    type: {
      default: '0'
    },
    placeholder: {
      default: '请选择菜单'
@@ -32,7 +36,8 @@
      default: false
    },
    // 需被排除的部门ID
    excludeId: {}
    excludeId: {},
    topMenuId: {}
  },
  data () {
    return {
@@ -42,24 +47,48 @@
  watch: {
    excludeId () {
      this.fetchData()
    },
    topMenuId () {
      this.fetchData()
    }
  },
  methods: {
    // 获取所有菜单
    fetchData () {
      fetchTree()
        .then(records => {
          this.data = []
          this.__fillData(this.data, records)
        })
        .catch(e => {
          this.$tip.apiFailed(e)
        })
      if (this.type === '1') {
        // fetchTree1()
        //   .then(records => {
        //     this.data = []
        //     this.__fillData(this.data, records)
        //   })
        //   .catch(e => {
        //     this.$tip.apiFailed(e)
        //   })
      } else {
        fetchTree()
          .then(records => {
            this.data = []
            var res = [];
            if(this.topMenuId){
              records.forEach(item => {
                if(item.id == this.topMenuId){
                  res = item.children
                }
              })
            }else{
              res = records
            }
            this.__fillData(this.data, res)
          })
          .catch(e => {
            this.$tip.apiFailed(e)
          })
      }
    },
    // 填充菜单树
    __fillData (list, pool) {
      for (const menu of pool) {
        if (menu.id === this.excludeId) {
        if (menu.id === this.excludeId || menu.linkType ===1) {
          continue
        }
        const menuNode = {