index.vue 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <template>
  2. <div :style="{ width: item?.width ? item?.width + 'px' : '100%' }">
  3. <div class="d-flex align-center">
  4. <div v-if="item?.label" class="form-label" :style="{'width': item.labelWidth + 'px'}">{{ item.label }}</div>
  5. <el-config-provider :locale="zhCn">
  6. <el-date-picker
  7. style="flex: 1;"
  8. v-model="value"
  9. size="large"
  10. :type="item.mode || 'date'"
  11. :placeholder="item.placeholder || '请选择'"
  12. :start-placeholder="item.startPlaceholder || '开始日期'"
  13. :end-placeholder="item.endPlaceholder || '结束日期'"
  14. :format="item.format"
  15. :value-format="item.valueFormat || 'x'"
  16. :disabled="item.disabled"
  17. :disabled-date="disabledDates"
  18. :date-format="item.dateFormat"
  19. :time-format="item.timeFormat"
  20. :default-value="item.defaultValue"
  21. :default-time="item.defaultTime"
  22. :teleported="item.teleported || false"
  23. @change="modelValueUpDate"
  24. @clear="handleClear"
  25. @blur="handleOpen"
  26. >
  27. </el-date-picker>
  28. </el-config-provider>
  29. </div>
  30. </div>
  31. </template>
  32. <script setup>
  33. defineOptions({ name:'FormUI-v-text-field'})
  34. import { ref, watch } from 'vue'
  35. import zhCn from 'element-plus/es/locale/lang/zh-cn'
  36. import { ElDatePicker } from 'element-plus'
  37. const props = defineProps({item: Object, modelValue: [String, Number, Boolean, Array], changeFn: Function})
  38. const emit = defineEmits(['update:modelValue', 'change'])
  39. const item = props.item
  40. const value = ref(props.modelValue)
  41. watch(() => props.modelValue,
  42. (newVal) => {
  43. value.value = newVal
  44. },
  45. { immediate: true },
  46. { deep: true }
  47. )
  48. // 过去的日期不可选
  49. const disabledDates = (date) => {
  50. // 未来的日期不可选
  51. if (props.item?.disabledFutureDates) {
  52. return date.getTime() > Date.now()
  53. }
  54. const currentDate = new Date()
  55. if (!props.item.disabledDate) return false
  56. // 过去的日期不可选
  57. currentDate.setDate(props.item?.dayAfter ? currentDate.getDate() : currentDate.getDate() - 1)
  58. return date.getTime() < currentDate.getTime()
  59. }
  60. const modelValueUpDate = (val) => {
  61. value.value = val
  62. emit('update:modelValue', value.value)
  63. emit('change', value.value)
  64. }
  65. const handleClear = () => {
  66. value.value = null
  67. emit('change', value.value)
  68. }
  69. const handleOpen = () => {
  70. }
  71. </script>
  72. <style lang="scss" scoped>
  73. :deep(.dp--menu-wrapper) {
  74. left: 0 !important;
  75. }
  76. .detailMargin {
  77. margin-bottom: 22px;
  78. }
  79. </style>