7021f2fd创建于 2025年5月14日历史提交
<template>
  <wd-input
      v-bind="$attrs"
      :label-width="labelWidth"
      v-model="currentText"
      :disabled="disabled"
      :label="label"
      :inputMode="inputMode"
      :placeholder="placeholder"
      @input="debouncedInput"
  />
</template>

<script lang="ts" setup>
import { debounce } from 'lodash-es'
const props = defineProps({
  label: {
    type: String,
    default: '',
    required: false,
  },
  labelWidth: {
    type: String,
    default: '80px',
    required: false,
  },
  inputMode: {
    type: String,
    default: 'text',
    required: false,
  },
  placeholder: {
    type: String,
    default: '',
    required: false,
  },
  value: {
    type: [String, Number],
    required: false,
  },
  disabled: {
    type: Boolean,
    default: false,
    required: false,
  }
})

// 定义 emits
const emit = defineEmits(['input', 'update:value'])
// 定义响应式数据;
const currentText = ref(null)

// 监听 value 的变化
watch(
    () => props.value,
    (val) => {
      currentText.value  = val;
    },
    {
      immediate:true
    }
)

// 更新 value 的方法
const updateValue = () => {
  emit('update:value', currentText.value)
}

// 创建防抖函数
const debouncedInput = debounce(updateValue, 1000)

// 记得在组件卸载时取消防抖
onBeforeUnmount(() => {
  debouncedInput.cancel()
})
</script>

<style></style>