选择部门>

复制代码
<template>
  <!-- 这是组建1 -->
  <div>
    <div class="box">

      <el-button class="department-button" style="border: none;" @click="showModal" @mouseenter="handleMouseEnter"
        @mouseleave="handleMouseLeave">
        {{ selectedDepartment || '请选择部门> ' }}
        <span title="selectedDepartment" v-show="showFullDepartment">{{ selectedDepartment }} </span>
      </el-button>
      <el-dialog :visible.sync="dialogVisible" width="100%">
        <el-tree :data="treeData[0].children" :props="defaultProps" @node-click="handleNodeClick"></el-tree>
      </el-dialog>
    </div>
    <div class="box1" style="text-align: center;" v-show="!selectedDepartment">
      请先选择部门,
      <a @click="showModal">
        去选择
      </a>
    </div>
  </div>
</template>

<script>
import { zqueryDepartTreeList, enableTimeRange, queryMySubordinate } from '@/api/api'

export default {
  data() {
    return {
      date: {},
      dialogVisible: false,
      treeData: [],
      selectedDepartment: '',
      showFullDepartment: false,
      selectedDepartm: false,
      defaultProps: {

        label: 'title'
      },

      // 组件2参数
      // param: { minDate: '', maxDate: '' }
      param: ''

    };
  },
  created() {
    this.loadDepart();
    this.loadDepart1()

  },
  methods: {

    handleMouseEnter() {
      this.showFullDepartment = true;
    },

    handleMouseLeave() {
      this.showFullDepartment = false;
    },
    showModal() {
      this.dialogVisible = true;
    },
    loadDepart() {
      zqueryDepartTreeList().then(res => {
        this.treeData = res.result;
        this.initCheckedStatus(this.treeData[0].children); // 初始化选中状态
      });
    },

    loadDepart1() {
      enableTimeRange().then(res => {

      });
    },

    handleNodeClick(node) {
      if (node.children && node.children.length > 0) {
        return;
      }
      const departId = node.id;
      this.selectedDepartment = node.title;
      this.dialogVisible = false;
      console.log("店铺id", departId);
      this.$emit('isUpdate', 'time_picker', { state: "data", val: departId })
      // "endDate": this.formatDate(this.param.maxDate), "startDate": this.formatDate(this.param.minDate),
      if (this.param != '') {
        let data = this.param.split(' - ')
        let startDay = data[0]
        let endDay = data[1]
        this.$emit('isUpdate', 'employee_schedule', { state: "load", val: true })
        queryMySubordinate({ departId, startDay, endDay },).then(response => {
          this.$emit('isUpdate', 'employee_schedule', { state: "load", val: false })
          this.$emit('isUpdate', 'employee_schedule', { state: "data", val: response })
        });
        // this.handleItemClick(node);
      }
    },

    // handleItemClick(clickedNode) {
    //   // 清空其他选择项的选中状态
    //   this.treeData[0].children.forEach(parentItem => {
    //     parentItem.children.forEach(childItem => {
    //       if (childItem !== clickedNode) {
    //         this.$set(childItem, 'checked', false);
    //       }
    //     });
    //   });

    //   if (!clickedNode.checked) {
    //     this.$set(clickedNode, 'checked', true);
    //   } else {
    //     this.$set(clickedNode, 'checked', false);
    //   }

    //   this.$forceUpdate(); // 强制更新组件
    // },


    // initCheckedStatus(nodes) {
    //   nodes.forEach(node => {
    //     node.children.forEach(child => {
    //       this.$set(child, 'checked', false); // 添加选中状态属性
    //     });
    //   });
    // },
  },

};
</script>

<style scoped>
/* 样式可以根据自己的需求进行调整 */
.box {
  height: 100%;
  overflow-y: hidden;
  position: relative;
}

::v-deep .el-dialog__body {
  padding: 0px;
}

.department-button {
  max-width: 200px;
  /* 设置按钮的最大宽度 */
  overflow: hidden;
  /* 隐藏溢出部分 */
  text-overflow: ellipsis;
  /* 使用省略号表示溢出的部分 */
  white-space: nowrap;
  /* 不换行 */
}

.department-button {
  position: relative;
}

.department-button span {
  display: none;
  position: absolute;
  top: 100%;
  left: 0;
  background-color: #fff;
  padding: 5px;
  border: 1px solid #ddd;
}

.department-button:hover span {
  display: block;
}

.department-button {
  position: relative;
}

.department-button span {
  display: none;
  position: absolute;
  top: 100%;
  left: 0;
  background-color: #fff;
  padding: 5px;
  border: 1px solid #ddd;
}

.department-button:hover span {
  display: block;
}

.el-button {
  font-size: 3.3333vw;
}

.box1 {
  position: absolute;
  top: 69%;
  left: 50%;
  transform: translate(-50%, -50%);
  text-align: center;
}
</style>
相关推荐
用户059540174466 分钟前
LLM对话记忆测试踩坑实录:手工回归30分钟,自动化后2分钟发现3个隐藏Bug
前端·css
Ashley的成长之路1 小时前
前端性能优化实战手册·第2篇:资源加载策略全解
前端·性能优化·资源加载·http/3·性能优化实战·资源加载优化
浅水壁虎2 小时前
vue基础(第二章 )
前端·javascript·vue.js
界面开发小八哥2 小时前
界面控件DevExtreme v26.1新版亮点——支持Angular 22
前端·javascript·angular.js·devexpress·ui开发·devextreme
Getflare2 小时前
前端 + UI 设计 + AI:这不是三个工种,是一个新三角能力模型(附自检清单)
前端·人工智能·ui
oil欧哟2 小时前
我做了一个 Vibe Coding 术语学习站:VibeHub
前端·ai·agent·独立开发·vibe coding
审小匠OpenCPAi3 小时前
银行流水核查怎么自动化?单边匹配、双向勾稽与图聚类异常检测的工程对比
java·前端·人工智能·python·审计
Revolution613 小时前
一个公共表格组件,是怎么一步步失控的
前端·前端工程化
mONESY3 小时前
React useState 核心原理与最佳实践:从异步更新到性能优化全解
javascript