123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- <template>
- <div class="hc-date-year-select hc-flex">
- <el-date-picker ref="startYearRef" v-model="startYear" type="year" value-format="YYYY" placeholder="计划开工年" :disabled="disabled" :clearable="false" @change="startYearChange" />
- <div class="to ml-2 mr-2 text-[14px]">至</div>
- <el-date-picker ref="endYearRef" v-model="endYear" type="year" value-format="YYYY" placeholder="计划完工年" :clearable="clearable" :disabled="disabled" @change="endYearChange" @blur="endYearBlur" />
- </div>
- </template>
- <script setup>
- import { ref } from 'vue'
- import { isNullES } from 'js-fast-way'
- defineProps({
- disabled: {
- type: Boolean,
- default: false,
- },
- clearable: {
- type: Boolean,
- default: true,
- },
- })
- defineOptions({
- name: 'HcDateYear',
- })
- //双向绑定
- const startYear = defineModel('modelValue', {
- default: '',
- })
- const endYear = defineModel('modelValue:end', {
- default: '',
- })
- //日期选择框ref
- const startYearRef = ref(null)
- const endYearRef = ref(null)
- //开始年
- const startYearChange = (val) => {
- startYear.value = val
- endYearRef.value?.focus()
- endYearRef.value?.handleOpen()
- startYearRef.value?.handleClose()
- }
- //结束年
- const endYearChange = (val) => {
- if (isNullES(val)) {
- startYear.value = ''
- }
- endYear.value = val
- if (val <= startYear.value) {
- window.$message.warning('完工年要大于开工年')
- endYear.value = ''
- endYearRef.value?.handleOpen()
- } else {
- endYearRef.value?.handleClose()
- }
- }
- //失去焦点
- const endYearBlur = () => {
- if (isNullES(startYear.value) || isNullES(endYear.value)) {
- startYear.value = ''
- endYear.value = ''
- window.$message.warning('请重新选择完整的范围年份')
- } else if (endYear.value <= startYear.value) {
- startYear.value = ''
- endYear.value = ''
- window.$message.warning('完工年要大于开工年')
- }
- }
- </script>
- <style lang="scss">
- .hc-date-year-select {
- .el-input.el-date-editor,
- .el-date-editor.el-input__wrapper {
- width: 120px;
- }
- }
- </style>
|