| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- <template>
- <div>
- <div class="head-container">
- <el-input
- v-model="deptName"
- :placeholder="searchPlaceHolder"
- clearable
- size="small"
- prefix-icon="el-icon-search"
- style="margin-bottom: 20px"
- />
- </div>
- <div class="tree-container">
- <div style="margin-bottom: 10px" v-show="showLowerCheck">
- <el-checkbox v-model="checkSub" @change="changeCheckBox"
- >关联下级</el-checkbox>
- </div>
- <el-tree
- :data="treeList"
- :props="defaultProps"
- :expand-on-click-node="false"
- :filter-node-method="filterNode"
- ref="tree"
- node-key="id"
- class="el-tree-ex"
- :default-expanded-keys="defaultKeys"
- :default-checked-keys="defaultKeys"
- @node-click="handleNodeClick"
- v-bind="$attrs"
- >
- <span class="custom-tree-node" slot-scope="{ node, data }">
- <el-tooltip
- class="item"
- effect="light"
- :content="node.label"
- placement="top-start">
- <span>{{ node.label }}</span>
- </el-tooltip>
- </span>
- </el-tree>
- </div>
- </div>
- </template>
- <script>
- import tableListMixins from "@/mixins/tableList";
- import { deptTreeSelect, handsheDeptTreeSelect } from "@/api/system/public";
- export default {
- name: "orgTree",
- mixins: [tableListMixins],
- data() {
- return {
- //过滤信息
- deptName: "",
- // 机构树列表
- treeList: [],
- //默认选中节点
- defaultKeys: [],
- checkSub: true,
- defaultKey: null,
- };
- },
- props: {
- hangsheTree: {
- type: Boolean,
- default: false,
- },
- defaultProps: {
- type: Object,
- default: () => {
- return {
- children: "children",
- label: "shortName",
- };
- },
- },
- customRequest: {
- type: Function,
- },
- showLowerCheck: {
- type: Boolean,
- default: true,
- },
- searchPlaceHolder: {
- type: String,
- default: "请输入机构名称",
- },
- },
- watch: {
- // 根据名称筛选机构树
- deptName(val) {
- this.$refs.tree.filter(val);
- },
- defaultProps(val) {
- this.defaultProps = { ...val };
- },
- },
- mounted() {
- this.getDeptTree();
- },
- methods: {
- /** 下穿状态改变*/
- changeCheckBox(state) {
- this.$emit("checkChange", state);
- },
- /** 查询机构下拉树结构 */
- getDeptTree() {
- if (this.customRequest) {
- this.customRequest().then((response) => {
- this.treeList = response.data;
- this.dataFn(response.data);
- return;
- });
- } else {
- if (this.hangsheTree) {
- this.treeList = this.$store.getters.depTree;
- } else {
- this.treeList = this.$store.getters.orgTree;
- }
- this.dataFn(this.treeList);
- }
- },
- dataFn(arr){
- if(!arr||arr.length===0) return;
- console.log(arr,'arrr')
- this.defaultKeys.push(arr[0].id);
- this.$emit("defaultKey", arr[0].id);
- this.$emit("defaultOrg", arr[0]);
- this.defaultKey = arr[0].id;
- setTimeout(() => {
- this.$refs.tree.setCurrentKey(arr[0].id);
- }, 100);
- },
- // 筛选节点
- filterNode(value, data) {
- if (!value) return true;
- return data.name.indexOf(value) !== -1;
- },
- // 节点单击事件
- handleNodeClick(data, node) {
- this.$emit("click", data, node);
- },
- },
- };
- </script>
- <style lang="scss" scoped>
- .el-tree-ex {
- // overflow: auto;
- ::v-deep .is-current > .el-tree-node__content {
- background-color: #d1e0f1 !important;
- }
- }
- </style>
|