| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 | <template>  <treeselect v-model="val" :options="deptOptions" :normalizer="normalizer" v-bind="$attrs" @select="select" ref="tree"    noResultsText="暂无符合条件的数据" clearValueText="清除" /></template><script>import Treeselect from "@riophae/vue-treeselect";import "@riophae/vue-treeselect/dist/vue-treeselect.css";import { deptTreeSelect } from "@/api/system/public";import sync from "@/components/computed.sync.js";import { mapGetters, mapMutations } from "vuex";export default {  name: "orgDropTree",  data() {    return {      deptOptions: [],      currentNode: null,    };  },  props: {    value: {      type: String,    },    label: {      type: String,      default: "shortName",    },  },  watch: {    value(v) {      if(!v){        return;      }      if (!this.currentNode || this.currentNode.id != v) {                this.currentNode = this.findNodeInOptions(v);      }            if (this.currentNode) {        console.info(this.currentNode)        this.$emit("select", this.currentNode);      }    },orgTree(val)    {      this.getDeptTree();    },  },  computed: {    ...mapGetters(["orgTree"]),    val: sync("value"),  },  components: { Treeselect },  methods: {    /** 查询机构下拉树结构 */    getDeptTree() {      this.deptOptions = this.$store.getters.businessTree;      if (this.deptOptions && this.deptOptions.length > 0) {        if (this.val) {          this.currentNode = this.findNodeInOptions(this.val);          if (this.currentNode) {            this.$emit("select", this.currentNode);          }        }      }    },    findNodeInOptions(id) {      if (!id) {        return;      }      let func = (nodes) => {        if (!nodes || nodes.length == 0) {          return null;        }        let n = nodes.find(n => n.id == id);        if (n) {          return n;        }        for (let index in nodes) {          let node = nodes[index]          n = func(node.children);          if (n) {            return n;          }        }      }      return func(this.deptOptions)    },    /** 转换机构数据结构 */    normalizer(node) {      if (node.children == null || node.children.length == 0) {        delete node.children;      }      return {        id: node.id,        label: node[this.label],        children: node.children,      };    },    select(node) {      this.currentNode = node;    },  },  mounted() {    this.getDeptTree();  },};</script><style scoped lang="scss">::v-deep {  .vue-treeselect__menu {    overflow-x: auto !important;    width: 250px;    max-height: 300px !important;  }  .vue-treeselect__label {    overflow: unset;    text-overflow: unset;  }  .vue-treeselect div,  .vue-treeselect span {    box-sizing: content-box;    // white-space: nowrap;    // text-overflow: ellipsis;  }  // 选中后的溢出隐藏  .vue-treeselect__multi-value-label {    display: block;    width: 140px;    overflow: hidden;    white-space: nowrap;    text-overflow: ellipsis;  }}</style>
 |