兰宝车间质量管理系统-前端
疯狂的狮子Li
2023-04-03 97187b246b94dd58cb585ebaed7e8644d2f00119
src/components/TreeSelect/index.vue
@@ -28,83 +28,85 @@
  </div>
</template>
<script setup>
const { proxy } = getCurrentInstance();
<script setup lang="ts">
import { ElTreeSelect } from 'element-plus'
const props = defineProps({
  /* 配置项 */
  objMap: {
    type: Object,
    default: () => {
      return {
        value: 'id', // ID字段名
        label: 'label', // 显示名称
        children: 'children' // 子级字段名
      }
  type: Object,
  default: () => {
    return {
    value: 'id', // ID字段名
    label: 'label', // 显示名称
    children: 'children' // 子级字段名
    }
  }
  },
  /* 自动收起 */
  accordion: {
    type: Boolean,
    default: () => {
      return false
    }
  type: Boolean,
  default: () => {
    return false
  }
  },
  /**当前双向数据绑定的值 */
  value: {
    type: [String, Number],
    default: ''
  type: [String, Number],
  default: ''
  },
  /**当前的数据 */
  options: {
    type: Array,
    default: () => []
  type: Array,
  default: () => []
  },
  /**输入框内部的文字 */
  placeholder: {
    type: String,
    default: ''
  type: String,
  default: ''
  }
})
const selectTree = ref(ElTreeSelect);
const emit = defineEmits(['update:value']);
const valueId = computed({
  get: () => props.value,
  set: (val) => {
    emit('update:value', val)
  emit('update:value', val)
  }
});
const valueTitle = ref('');
const defaultExpandedKey = ref([]);
const defaultExpandedKey = ref<any[]>([]);
function initHandle() {
  nextTick(() => {
    const selectedValue = valueId.value;
    if(selectedValue !== null && typeof (selectedValue) !== 'undefined') {
      const node = proxy.$refs.selectTree.getNode(selectedValue)
      if (node) {
        valueTitle.value = node.data[props.objMap.label]
        proxy.$refs.selectTree.setCurrentKey(selectedValue) // 设置默认选中
        defaultExpandedKey.value = [selectedValue] // 设置默认展开
      }
    } else {
      clearHandle()
  const selectedValue = valueId.value;
  if(selectedValue !== null && typeof (selectedValue) !== 'undefined') {
    const node = selectTree.value.getNode(selectedValue)
    if (node) {
    valueTitle.value = node.data[props.objMap.label]
    selectTree.value.setCurrentKey(selectedValue) // 设置默认选中
    defaultExpandedKey.value = [selectedValue] // 设置默认展开
    }
  } else {
    clearHandle()
  }
  })
}
function handleNodeClick(node) {
function handleNodeClick(node: any) {
  valueTitle.value = node[props.objMap.label]
  valueId.value = node[props.objMap.value];
  defaultExpandedKey.value = [];
  proxy.$refs.treeSelect.blur()
  selectTree.value.blur()
  selectFilterData('')
}
function selectFilterData(val) {
  proxy.$refs.selectTree.filter(val)
function selectFilterData(val: any) {
  selectTree.value.filter(val)
}
function filterNode(value, data) {
function filterNode(value: any, data: any) {
  if (!value) return true
  return data[props.objMap['label']].indexOf(value) !== -1
}
@@ -128,7 +130,7 @@
})
</script>
<style lang='scss' scoped>
<style lang="scss" scoped>
@import "@/assets/styles/variables.module.scss";
.el-scrollbar .el-scrollbar__view .el-select-dropdown__item {
  padding: 0;
@@ -153,4 +155,4 @@
  background-color: mix(#fff, $--color-primary, 90%);
  color: $--color-primary;
}
</style>
</style>