|
3 | 3 | <wd-cell |
4 | 4 | v-if="!$slots.default" |
5 | 5 | :title="label" |
6 | | - :required="isRequired" |
7 | 6 | :size="size" |
8 | 7 | :title-width="labelWidth" |
9 | 8 | :prop="prop" |
|
101 | 100 | :label-key="labelKey" |
102 | 101 | :formatter="formatter" |
103 | 102 | :filter="filter" |
104 | | - :column-formatter="isArray(modelValue) ? customColumnFormatter : undefined" |
| 103 | + :column-formatter="isArray(modelValue) ? startColumnFormatter : undefined" |
105 | 104 | :max-hour="maxHour" |
106 | 105 | :min-hour="minHour" |
107 | 106 | :max-date="maxDate" |
|
111 | 110 | :use-second="useSecond" |
112 | 111 | :min-second="minSecond" |
113 | 112 | :max-second="maxSecond" |
114 | | - :start-symbol="true" |
115 | 113 | :immediate-change="immediateChange" |
116 | 114 | @change="onChangeStart" |
117 | 115 | @pickstart="onPickStart" |
|
131 | 129 | :label-key="labelKey" |
132 | 130 | :formatter="formatter" |
133 | 131 | :filter="filter" |
134 | | - :column-formatter="isArray(modelValue) ? customColumnFormatter : undefined" |
| 132 | + :column-formatter="isArray(modelValue) ? endColumnFormatter : undefined" |
135 | 133 | :max-hour="maxHour" |
136 | 134 | :min-hour="minHour" |
137 | 135 | :max-date="maxDate" |
|
141 | 139 | :use-second="useSecond" |
142 | 140 | :min-second="minSecond" |
143 | 141 | :max-second="maxSecond" |
144 | | - :start-symbol="false" |
145 | 142 | :immediate-change="immediateChange" |
146 | 143 | @change="onChangeEnd" |
147 | 144 | @pickstart="onPickStart" |
@@ -170,13 +167,7 @@ import wdDatetimePickerView from '../wd-datetime-picker-view/wd-datetime-picker- |
170 | 167 | import wdCell from '../wd-cell/wd-cell.vue' |
171 | 168 | import { computed, getCurrentInstance, nextTick, onBeforeMount, onMounted, ref, watch } from 'vue' |
172 | 169 | import { deepClone, isArray, isDef, isEqual, isFunction, padZero } from '../common/util' |
173 | | -import { |
174 | | - type DatetimePickerViewInstance, |
175 | | - type DatetimePickerViewColumnFormatter, |
176 | | - type DatetimePickerViewColumnType |
177 | | -} from '../wd-datetime-picker-view/types' |
178 | | -import { FORM_KEY, type FormItemRule } from '../wd-form/types' |
179 | | -import { useParent } from '../composables/useParent' |
| 170 | +import { type DatetimePickerViewInstance, type DatetimePickerViewColumnType, type DatetimePickerViewExpose } from '../wd-datetime-picker-view/types' |
180 | 171 | import { useTranslate } from '../composables/useTranslate' |
181 | 172 | import { datetimePickerProps, type DatetimePickerExpose } from './types' |
182 | 173 | import dayjs from '../../dayjs' |
@@ -304,31 +295,6 @@ watch( |
304 | 295 | } |
305 | 296 | ) |
306 | 297 |
|
307 | | -const { parent: form } = useParent(FORM_KEY) |
308 | | -
|
309 | | -// 表单校验错误信息 |
310 | | -const errorMessage = computed(() => { |
311 | | - if (form && props.prop && form.errorMessages && form.errorMessages[props.prop]) { |
312 | | - return form.errorMessages[props.prop] |
313 | | - } else { |
314 | | - return '' |
315 | | - } |
316 | | -}) |
317 | | -
|
318 | | -// 是否展示必填 |
319 | | -const isRequired = computed(() => { |
320 | | - let formRequired = false |
321 | | - if (form && form.props.rules) { |
322 | | - const rules = form.props.rules |
323 | | - for (const key in rules) { |
324 | | - if (Object.prototype.hasOwnProperty.call(rules, key) && key === props.prop && Array.isArray(rules[key])) { |
325 | | - formRequired = rules[key].some((rule: FormItemRule) => rule.required) |
326 | | - } |
327 | | - } |
328 | | - } |
329 | | - return props.required || props.rules.some((rule) => rule.required) || formRequired |
330 | | -}) |
331 | | -
|
332 | 298 | // 是否展示清除按钮 |
333 | 299 | const showClear = computed(() => { |
334 | 300 | return ( |
@@ -361,7 +327,6 @@ function handleBoundaryValue( |
361 | 327 | boundary: number[] |
362 | 328 | ): boolean { |
363 | 329 | const { type, useSecond } = props |
364 | | -
|
365 | 330 | switch (type) { |
366 | 331 | case 'datetime': { |
367 | 332 | const [year, month, date, hour, minute, second] = boundary |
@@ -440,21 +405,28 @@ function handleBoundaryValue( |
440 | 405 | return false |
441 | 406 | } |
442 | 407 |
|
| 408 | +function startColumnFormatter(picker: DatetimePickerViewExpose) { |
| 409 | + return customColumnFormatter(picker, 'start') |
| 410 | +} |
| 411 | +
|
| 412 | +function endColumnFormatter(picker: DatetimePickerViewExpose) { |
| 413 | + return customColumnFormatter(picker, 'end') |
| 414 | +} |
| 415 | +
|
443 | 416 | /** |
444 | 417 | * @description 自定义列项筛选规则 |
445 | 418 | */ |
446 | | -const customColumnFormatter: DatetimePickerViewColumnFormatter = (picker) => { |
| 419 | +const customColumnFormatter = (picker: DatetimePickerViewExpose, pickerType: 'start' | 'end') => { |
447 | 420 | if (!picker) return [] |
448 | 421 |
|
449 | 422 | const { type } = props |
450 | | - const { startSymbol, formatter } = picker |
| 423 | + const startSymbol = pickerType === 'start' |
| 424 | + const { formatter } = props |
451 | 425 | const start = picker.correctValue(innerValue.value) |
452 | 426 | const end = picker.correctValue(endInnerValue.value) |
453 | | -
|
454 | | - const currentValue = startSymbol ? getPickerValue(start, type) : getPickerValue(end, type) |
455 | | - const boundary = startSymbol ? getPickerValue(end, type) : getPickerValue(start, type) |
| 427 | + const currentValue = startSymbol ? getPickerValue(start, type, props.useSecond) : getPickerValue(end, type, props.useSecond) |
| 428 | + const boundary = startSymbol ? getPickerValue(end, type, props.useSecond) : getPickerValue(start, type, props.useSecond) |
456 | 429 | const columns = picker.getOriginColumns() |
457 | | -
|
458 | 430 | return columns.map((column, _) => { |
459 | 431 | return column.values.map((value) => { |
460 | 432 | const disabled = handleBoundaryValue(startSymbol, column.type, value, currentValue, boundary) |
@@ -489,7 +461,7 @@ function getSelects(picker: 'before' | 'after') { |
489 | 461 | let value = picker === 'before' ? innerValue.value : endInnerValue.value |
490 | 462 | let selected: number[] = [] |
491 | 463 | if (value) { |
492 | | - selected = getPickerValue(value, props.type) |
| 464 | + selected = getPickerValue(value, props.type, props.useSecond) |
493 | 465 | } |
494 | 466 |
|
495 | 467 | let selects = selected.map((value) => { |
@@ -564,8 +536,10 @@ function onChangeStart({ value }: { value: number | string }) { |
564 | 536 |
|
565 | 537 | if (region.value) { |
566 | 538 | // 区间选择才需要处理边界值 |
567 | | - const currentArray = getPickerValue(value, props.type) |
568 | | - const boundaryArray = getPickerValue(endInnerValue.value, props.type) |
| 539 | + // 区间选择才需要处理边界值 |
| 540 | + const currentArray = getPickerValue(value, props.type, props.useSecond) |
| 541 | + const boundaryArray = getPickerValue(endInnerValue.value, props.type, props.useSecond) |
| 542 | +
|
569 | 543 | const columns = datetimePickerView.value.getOriginColumns() |
570 | 544 |
|
571 | 545 | // 检查是否有任何列超出边界 |
|
0 commit comments