vxe-pc-ui 4.3.62 → 4.3.64

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/es/button/src/button-group.js +1 -0
  2. package/es/button/src/button.js +16 -5
  3. package/es/button/style.css +4 -3
  4. package/es/button/style.min.css +1 -1
  5. package/es/button-group/style.css +8 -2
  6. package/es/button-group/style.min.css +1 -1
  7. package/es/date-picker/src/date-picker.js +104 -32
  8. package/es/date-picker/style.css +37 -12
  9. package/es/date-picker/style.min.css +1 -1
  10. package/es/icon/style.css +1 -1
  11. package/es/image/style.css +4 -0
  12. package/es/image/style.min.css +1 -1
  13. package/es/style.css +1 -1
  14. package/es/style.min.css +1 -1
  15. package/es/ui/index.js +8 -2
  16. package/es/ui/src/log.js +1 -1
  17. package/es/vxe-button/style.css +4 -3
  18. package/es/vxe-button/style.min.css +1 -1
  19. package/es/vxe-button-group/style.css +8 -2
  20. package/es/vxe-button-group/style.min.css +1 -1
  21. package/es/vxe-date-picker/style.css +37 -12
  22. package/es/vxe-date-picker/style.min.css +1 -1
  23. package/es/vxe-image/style.css +4 -0
  24. package/es/vxe-image/style.min.css +1 -1
  25. package/lib/button/src/button-group.js +1 -0
  26. package/lib/button/src/button-group.min.js +1 -1
  27. package/lib/button/src/button.js +17 -5
  28. package/lib/button/src/button.min.js +1 -1
  29. package/lib/button/style/style.css +4 -3
  30. package/lib/button/style/style.min.css +1 -1
  31. package/lib/button-group/style/style.css +8 -2
  32. package/lib/button-group/style/style.min.css +1 -1
  33. package/lib/date-picker/src/date-picker.js +114 -31
  34. package/lib/date-picker/src/date-picker.min.js +1 -1
  35. package/lib/date-picker/style/style.css +37 -12
  36. package/lib/date-picker/style/style.min.css +1 -1
  37. package/lib/icon/style/style.css +1 -1
  38. package/lib/icon/style/style.min.css +1 -1
  39. package/lib/image/style/style.css +4 -0
  40. package/lib/image/style/style.min.css +1 -1
  41. package/lib/index.umd.js +141 -39
  42. package/lib/index.umd.min.js +1 -1
  43. package/lib/style.css +1 -1
  44. package/lib/style.min.css +1 -1
  45. package/lib/ui/index.js +8 -2
  46. package/lib/ui/index.min.js +1 -1
  47. package/lib/ui/src/log.js +1 -1
  48. package/lib/ui/src/log.min.js +1 -1
  49. package/lib/vxe-button/style/style.css +4 -3
  50. package/lib/vxe-button/style/style.min.css +1 -1
  51. package/lib/vxe-button-group/style/style.css +8 -2
  52. package/lib/vxe-button-group/style/style.min.css +1 -1
  53. package/lib/vxe-date-picker/style/style.css +37 -12
  54. package/lib/vxe-date-picker/style/style.min.css +1 -1
  55. package/lib/vxe-image/style/style.css +4 -0
  56. package/lib/vxe-image/style/style.min.css +1 -1
  57. package/package.json +1 -1
  58. package/packages/button/src/button-group.ts +1 -0
  59. package/packages/button/src/button.ts +17 -5
  60. package/packages/date-picker/src/date-picker.ts +106 -33
  61. package/packages/ui/index.ts +7 -1
  62. package/styles/components/button-group.scss +14 -2
  63. package/styles/components/button.scss +7 -5
  64. package/styles/components/date-picker.scss +33 -11
  65. package/styles/components/image.scss +2 -0
  66. package/types/components/button-group.d.ts +3 -1
  67. package/types/components/button.d.ts +2 -2
  68. package/types/components/date-picker.d.ts +32 -1
  69. package/types/components/table.d.ts +24 -1
  70. /package/es/icon/{iconfont.1735974888106.ttf → iconfont.1736093254019.ttf} +0 -0
  71. /package/es/icon/{iconfont.1735974888106.woff → iconfont.1736093254019.woff} +0 -0
  72. /package/es/icon/{iconfont.1735974888106.woff2 → iconfont.1736093254019.woff2} +0 -0
  73. /package/es/{iconfont.1735974888106.ttf → iconfont.1736093254019.ttf} +0 -0
  74. /package/es/{iconfont.1735974888106.woff → iconfont.1736093254019.woff} +0 -0
  75. /package/es/{iconfont.1735974888106.woff2 → iconfont.1736093254019.woff2} +0 -0
  76. /package/lib/icon/style/{iconfont.1735974888106.ttf → iconfont.1736093254019.ttf} +0 -0
  77. /package/lib/icon/style/{iconfont.1735974888106.woff → iconfont.1736093254019.woff} +0 -0
  78. /package/lib/icon/style/{iconfont.1735974888106.woff2 → iconfont.1736093254019.woff2} +0 -0
  79. /package/lib/{iconfont.1735974888106.ttf → iconfont.1736093254019.ttf} +0 -0
  80. /package/lib/{iconfont.1735974888106.woff → iconfont.1736093254019.woff} +0 -0
  81. /package/lib/{iconfont.1735974888106.woff2 → iconfont.1736093254019.woff2} +0 -0
@@ -1,12 +1,13 @@
1
1
  import { defineComponent, h, Teleport, ref, Ref, computed, reactive, inject, nextTick, watch, onUnmounted, PropType, createCommentVNode } from 'vue'
2
2
  import XEUtils from 'xe-utils'
3
3
  import { getConfig, getIcon, getI18n, globalEvents, GLOBAL_EVENT_KEYS, createEvent, useSize, renderEmptyElement } from '../../ui'
4
- import { getFuncText, getLastZIndex, nextZIndex } from '../../ui/src/utils'
4
+ import { getFuncText, getLastZIndex, nextZIndex, isEnableConf } from '../../ui/src/utils'
5
5
  import { getAbsolutePos, getEventTargetNode } from '../../ui/src/dom'
6
6
  import { toStringTimeDate, getDateQuarter } from './util'
7
7
  import { getSlotVNs } from '../..//ui/src/vn'
8
+ import VxeButtonGroupComponent from '../../button/src/button-group'
8
9
 
9
- import type { VxeDatePickerConstructor, VxeDatePickerEmits, DatePickerInternalData, DatePickerReactData, VxeComponentStyleType, DatePickerMethods, VxeDatePickerPropTypes, DatePickerPrivateRef, VxeFormConstructor, VxeFormPrivateMethods, VxeFormDefines, ValueOf, VxeModalConstructor, VxeDrawerConstructor, VxeModalMethods, VxeDrawerMethods, VxeDatePickerDefines } from '../../../types'
10
+ import type { VxeDatePickerConstructor, VxeDatePickerEmits, DatePickerInternalData, DatePickerReactData, VxeComponentStyleType, DatePickerMethods, VxeDatePickerPropTypes, DatePickerPrivateRef, VxeFormConstructor, VxeFormPrivateMethods, VxeFormDefines, ValueOf, VxeModalConstructor, VxeDrawerConstructor, VxeModalMethods, VxeDrawerMethods, VxeDatePickerDefines, VxeButtonGroupEvents } from '../../../types'
10
11
  import type { VxeTableConstructor, VxeTablePrivateMethods } from '../../../types/components/table'
11
12
 
12
13
  export default defineComponent({
@@ -93,6 +94,8 @@ export default defineComponent({
93
94
  default: null
94
95
  },
95
96
 
97
+ shortcutConfig: Object as PropType<VxeDatePickerPropTypes.ShortcutConfig>,
98
+
96
99
  // 已废弃 startWeek,被 startDay 替换
97
100
  startWeek: Number as PropType<VxeDatePickerPropTypes.StartDay>,
98
101
  // 已废弃
@@ -115,7 +118,8 @@ export default defineComponent({
115
118
  'suffix-click',
116
119
  'date-prev',
117
120
  'date-today',
118
- 'date-next'
121
+ 'date-next',
122
+ 'shortcut-click'
119
123
  ] as VxeDatePickerEmits,
120
124
  setup (props, context) {
121
125
  const { slots, emit } = context
@@ -623,6 +627,10 @@ export default defineComponent({
623
627
  return immediate
624
628
  })
625
629
 
630
+ const computeShortcutOpts = computed(() => {
631
+ return Object.assign({}, getConfig().datePicker.shortcutConfig, props.shortcutConfig)
632
+ })
633
+
626
634
  const updateModelValue = (modelValue: VxeDatePickerPropTypes.ModelValue | undefined) => {
627
635
  const { isActivated, visiblePanel } = reactData
628
636
  let val: any = ''
@@ -640,23 +648,29 @@ export default defineComponent({
640
648
  }
641
649
 
642
650
  const parseDate = (value: VxeDatePickerPropTypes.ModelValue, format: string) => {
643
- const { type } = props
651
+ const { type, multiple } = props
644
652
  if (type === 'time') {
645
653
  return toStringTimeDate(value)
646
654
  }
655
+ if (XEUtils.isArray(value)) {
656
+ return XEUtils.toStringDate(value[0], format)
657
+ }
658
+ if (XEUtils.isString(value)) {
659
+ return XEUtils.toStringDate(multiple ? XEUtils.last(value.split(',')) : value, format)
660
+ }
647
661
  return XEUtils.toStringDate(value, format)
648
662
  }
649
663
 
650
664
  const triggerEvent = (evnt: Event & { type: 'input' | 'change' | 'keydown' | 'keyup' | 'wheel' | 'click' | 'focus' | 'blur' }) => {
651
665
  const { inputValue } = reactData
652
- datePickerMethods.dispatchEvent(evnt.type, { value: inputValue }, evnt)
666
+ dispatchEvent(evnt.type, { value: inputValue }, evnt)
653
667
  }
654
668
 
655
669
  const handleChange = (value: string, evnt: Event | { type: string }) => {
656
670
  reactData.inputValue = value
657
671
  emit('update:modelValue', value)
658
672
  if (XEUtils.toValueString(props.modelValue) !== value) {
659
- datePickerMethods.dispatchEvent('change', { value }, evnt as any)
673
+ dispatchEvent('change', { value }, evnt as any)
660
674
  // 自动更新校验状态
661
675
  if ($xeForm && formItemInfo) {
662
676
  $xeForm.triggerItemEvent(evnt, formItemInfo.itemConfig.field, value)
@@ -674,7 +688,7 @@ export default defineComponent({
674
688
  if (inpImmediate) {
675
689
  handleChange(value, evnt)
676
690
  } else {
677
- datePickerMethods.dispatchEvent('input', { value }, evnt)
691
+ dispatchEvent('input', { value }, evnt)
678
692
  }
679
693
  }
680
694
  }
@@ -699,7 +713,7 @@ export default defineComponent({
699
713
  const isDisabled = computeIsDisabled.value
700
714
  if (!isDisabled) {
701
715
  const { inputValue } = reactData
702
- datePickerMethods.dispatchEvent('prefix-click', { value: inputValue }, evnt)
716
+ dispatchEvent('prefix-click', { value: inputValue }, evnt)
703
717
  }
704
718
  }
705
719
 
@@ -719,14 +733,14 @@ export default defineComponent({
719
733
  hidePanel()
720
734
  }
721
735
  handleChange('', evnt)
722
- datePickerMethods.dispatchEvent('clear', { value }, evnt)
736
+ dispatchEvent('clear', { value }, evnt)
723
737
  }
724
738
 
725
739
  const clickSuffixEvent = (evnt: Event) => {
726
740
  const isDisabled = computeIsDisabled.value
727
741
  if (!isDisabled) {
728
742
  const { inputValue } = reactData
729
- datePickerMethods.dispatchEvent('suffix-click', { value: inputValue }, evnt)
743
+ dispatchEvent('suffix-click', { value: inputValue }, evnt)
730
744
  }
731
745
  }
732
746
 
@@ -803,7 +817,7 @@ export default defineComponent({
803
817
  }
804
818
  }
805
819
 
806
- const dateChange = (date: Date) => {
820
+ const dateChange = (date: Date, isReload?: boolean) => {
807
821
  const { modelValue, multiple } = props
808
822
  const { datetimePanelValue } = reactData
809
823
  const isDateTimeType = computeIsDateTimeType.value
@@ -823,10 +837,9 @@ export default defineComponent({
823
837
  dateCheckMonth(date)
824
838
  if (multiple) {
825
839
  // 如果为多选
826
- const dateMultipleValue = computeDateMultipleValue.value
827
840
  if (isDateTimeType) {
828
841
  // 如果是datetime特殊类型
829
- const dateListValue = [...computeDateListValue.value]
842
+ const dateListValue = isReload ? [] : [...computeDateListValue.value]
830
843
  const datetimeRest: Date[] = []
831
844
  const eqIndex = XEUtils.findIndexOf(dateListValue, val => XEUtils.isDateSame(date, val, 'yyyyMMdd'))
832
845
  if (eqIndex === -1) {
@@ -846,6 +859,7 @@ export default defineComponent({
846
859
  })
847
860
  handleChange(datetimeRest.map(date => XEUtils.toDateString(date, dateValueFormat)).join(','), { type: 'update' })
848
861
  } else {
862
+ const dateMultipleValue = isReload ? [] : computeDateMultipleValue.value
849
863
  // 如果是日期类型
850
864
  if (dateMultipleValue.some(val => XEUtils.isEqual(val, inpVal))) {
851
865
  handleChange(dateMultipleValue.filter(val => !XEUtils.isEqual(val, inpVal)).join(','), { type: 'update' })
@@ -917,7 +931,7 @@ export default defineComponent({
917
931
  if (!reactData.visiblePanel) {
918
932
  reactData.isActivated = false
919
933
  }
920
- datePickerMethods.dispatchEvent('blur', { value }, evnt)
934
+ dispatchEvent('blur', { value }, evnt)
921
935
  // 自动更新校验状态
922
936
  if ($xeForm && formItemInfo) {
923
937
  $xeForm.triggerItemEvent(evnt, formItemInfo.itemConfig.field, value)
@@ -949,7 +963,21 @@ export default defineComponent({
949
963
  }
950
964
 
951
965
  const dateNowHandle = () => {
952
- const currentDate = XEUtils.getWhatDay(Date.now(), 0, 'first')
966
+ const { type } = props
967
+ const firstDayOfWeek = computeFirstDayOfWeek.value
968
+ let currentDate = new Date()
969
+ switch (type) {
970
+ case 'week':
971
+ currentDate = XEUtils.getWhatWeek(currentDate, 0, firstDayOfWeek)
972
+ break
973
+ case 'datetime':
974
+ currentDate = new Date()
975
+ reactData.datetimePanelValue = new Date()
976
+ break
977
+ default:
978
+ currentDate = XEUtils.getWhatDay(Date.now(), 0, 'first')
979
+ break
980
+ }
953
981
  reactData.currentDate = currentDate
954
982
  dateMonthHandle(currentDate, 0)
955
983
  }
@@ -990,17 +1018,17 @@ export default defineComponent({
990
1018
  }
991
1019
  }
992
1020
  reactData.selectMonth = viewDate
993
- datePickerMethods.dispatchEvent('date-prev', { viewType: datePanelType, viewDate, value, type }, evnt)
1021
+ dispatchEvent('date-prev', { viewType: datePanelType, viewDate, value, type }, evnt)
994
1022
  }
995
1023
  }
996
1024
 
997
1025
  const dateTodayMonthEvent = (evnt: Event) => {
998
1026
  dateNowHandle()
1027
+ dateChange(reactData.currentDate, true)
999
1028
  if (!props.multiple) {
1000
- dateChange(reactData.currentDate)
1001
1029
  hidePanel()
1002
1030
  }
1003
- datePickerMethods.dispatchEvent('date-today', { type: props.type }, evnt)
1031
+ dispatchEvent('date-today', { type: props.type }, evnt)
1004
1032
  }
1005
1033
 
1006
1034
  const dateNextEvent = (evnt: Event) => {
@@ -1029,7 +1057,7 @@ export default defineComponent({
1029
1057
  }
1030
1058
  }
1031
1059
  reactData.selectMonth = viewDate
1032
- datePickerMethods.dispatchEvent('date-next', { viewType: datePanelType, value, type }, evnt)
1060
+ dispatchEvent('date-next', { viewType: datePanelType, value, type }, evnt)
1033
1061
  }
1034
1062
  }
1035
1063
 
@@ -1278,17 +1306,25 @@ export default defineComponent({
1278
1306
  offsetMonth = XEUtils.getWhatMonth(offsetMonth, 4)
1279
1307
  }
1280
1308
  dateMoveMonth(offsetMonth)
1281
- } else {
1309
+ } else if (datePanelType === 'week') {
1282
1310
  let offsetDay = datePanelValue || XEUtils.getWhatDay(Date.now(), 0, 'first')
1283
1311
  const firstDayOfWeek = computeFirstDayOfWeek.value
1312
+ if (isUpArrow) {
1313
+ offsetDay = XEUtils.getWhatWeek(offsetDay, -1, firstDayOfWeek)
1314
+ } else if (isDwArrow) {
1315
+ offsetDay = XEUtils.getWhatWeek(offsetDay, 1, firstDayOfWeek)
1316
+ }
1317
+ dateMoveDay(offsetDay)
1318
+ } else {
1319
+ let offsetDay = datePanelValue || XEUtils.getWhatDay(Date.now(), 0, 'first')
1284
1320
  if (isLeftArrow) {
1285
1321
  offsetDay = XEUtils.getWhatDay(offsetDay, -1)
1286
1322
  } else if (isUpArrow) {
1287
- offsetDay = XEUtils.getWhatWeek(offsetDay, -1, firstDayOfWeek)
1323
+ offsetDay = XEUtils.getWhatWeek(offsetDay, -1, offsetDay.getDay() as VxeDatePickerPropTypes.StartDay)
1288
1324
  } else if (isRightArrow) {
1289
1325
  offsetDay = XEUtils.getWhatDay(offsetDay, 1)
1290
1326
  } else if (isDwArrow) {
1291
- offsetDay = XEUtils.getWhatWeek(offsetDay, 1, firstDayOfWeek)
1327
+ offsetDay = XEUtils.getWhatWeek(offsetDay, 1, offsetDay.getDay() as VxeDatePickerPropTypes.StartDay)
1292
1328
  }
1293
1329
  dateMoveDay(offsetDay)
1294
1330
  }
@@ -1455,7 +1491,22 @@ export default defineComponent({
1455
1491
  triggerEvent(evnt)
1456
1492
  }
1457
1493
 
1458
- // 弹出面板
1494
+ const handleShortcutEvent: VxeButtonGroupEvents.Click = ({ option, $event }) => {
1495
+ const shortcutOpts = computeShortcutOpts.value
1496
+ const { autoClose } = shortcutOpts
1497
+ const clickMethod = (option as VxeDatePickerDefines.ShortcutOption).clickMethod || shortcutOpts.clickMethod
1498
+ const shortcutParams = {
1499
+ $datePicker: $xeDatePicker,
1500
+ option: option as VxeDatePickerDefines.ShortcutOption
1501
+ }
1502
+ if (clickMethod) {
1503
+ clickMethod(shortcutParams)
1504
+ }
1505
+ if (autoClose) {
1506
+ hidePanel()
1507
+ }
1508
+ dispatchEvent('shortcut-click', shortcutParams, $event)
1509
+ }
1459
1510
 
1460
1511
  // 全局事件
1461
1512
  const handleGlobalMousedownEvent = (evnt: Event) => {
@@ -1998,17 +2049,39 @@ export default defineComponent({
1998
2049
  ]
1999
2050
  }
2000
2051
 
2052
+ const renderShortcutBtn = (pos: 'top' | 'bottom' | 'left' | 'right' | 'header' | 'footer', isVertical?: boolean) => {
2053
+ const shortcutOpts = computeShortcutOpts.value
2054
+ const { options, position, align, mode } = shortcutOpts
2055
+ if (isEnableConf(shortcutOpts) && options && options.length && (position || 'left') === pos) {
2056
+ return h('div', {
2057
+ class: `vxe-date-picker--panel-${pos}-wrapper`
2058
+ }, [
2059
+ h(VxeButtonGroupComponent, {
2060
+ options,
2061
+ mode,
2062
+ align,
2063
+ vertical: isVertical,
2064
+ onClick: handleShortcutEvent
2065
+ })
2066
+ ])
2067
+ }
2068
+ return renderEmptyElement($xeDatePicker)
2069
+ }
2070
+
2001
2071
  const renderPanel = () => {
2002
2072
  const { type } = props
2003
2073
  const { initialized, isAniVisible, visiblePanel, panelPlacement, panelStyle } = reactData
2004
2074
  const vSize = computeSize.value
2005
2075
  const btnTransfer = computeBtnTransfer.value
2076
+ const shortcutOpts = computeShortcutOpts.value
2077
+ const { options, position } = shortcutOpts
2006
2078
  const headerSlot = slots.header
2007
2079
  const footerSlot = slots.footer
2008
2080
  const topSlot = slots.top
2009
2081
  const bottomSlot = slots.bottom
2010
2082
  const leftSlot = slots.left
2011
2083
  const rightSlot = slots.right
2084
+ const hasShortcutBtn = options && options.length
2012
2085
  const renders = []
2013
2086
  if (type === 'datetime') {
2014
2087
  renders.push(
@@ -2053,10 +2126,10 @@ export default defineComponent({
2053
2126
  'is--transfer': btnTransfer,
2054
2127
  'ani--leave': isAniVisible,
2055
2128
  'ani--enter': visiblePanel,
2056
- 'show--top': !!(topSlot || headerSlot),
2057
- 'show--bottom': !!(bottomSlot || footerSlot),
2058
- 'show--left': !!leftSlot,
2059
- 'show--right': !!rightSlot
2129
+ 'show--top': !!(topSlot || headerSlot || (hasShortcutBtn && (position === 'top' || position === 'header'))),
2130
+ 'show--bottom': !!(bottomSlot || footerSlot || (hasShortcutBtn && (position === 'bottom' || position === 'footer'))),
2131
+ 'show--left': !!(leftSlot || (hasShortcutBtn && position === 'left')),
2132
+ 'show--right': !!(rightSlot || (hasShortcutBtn && position === 'right'))
2060
2133
  }],
2061
2134
  placement: panelPlacement,
2062
2135
  style: panelStyle
@@ -2069,7 +2142,7 @@ export default defineComponent({
2069
2142
  ? h('div', {
2070
2143
  class: 'vxe-date-picker--panel-top-wrapper'
2071
2144
  }, topSlot({}))
2072
- : renderEmptyElement($xeDatePicker),
2145
+ : renderShortcutBtn('top'),
2073
2146
  h('div', {
2074
2147
  class: 'vxe-date-picker--panel-body-layout-wrapper'
2075
2148
  }, [
@@ -2077,7 +2150,7 @@ export default defineComponent({
2077
2150
  ? h('div', {
2078
2151
  class: 'vxe-date-picker--panel-left-wrapper'
2079
2152
  }, leftSlot({}))
2080
- : renderEmptyElement($xeDatePicker),
2153
+ : renderShortcutBtn('left', true),
2081
2154
  h('div', {
2082
2155
  class: 'vxe-date-picker--panel-body-content-wrapper'
2083
2156
  }, [
@@ -2085,7 +2158,7 @@ export default defineComponent({
2085
2158
  ? h('div', {
2086
2159
  class: 'vxe-date-picker--panel-header-wrapper'
2087
2160
  }, headerSlot({}))
2088
- : renderEmptyElement($xeDatePicker),
2161
+ : renderShortcutBtn('header'),
2089
2162
  h('div', {
2090
2163
  class: 'vxe-date-picker--panel-body-wrapper'
2091
2164
  }, renders),
@@ -2093,19 +2166,19 @@ export default defineComponent({
2093
2166
  ? h('div', {
2094
2167
  class: 'vxe-date-picker--panel-footer-wrapper'
2095
2168
  }, footerSlot({}))
2096
- : renderEmptyElement($xeDatePicker)
2169
+ : renderShortcutBtn('footer')
2097
2170
  ]),
2098
2171
  rightSlot
2099
2172
  ? h('div', {
2100
2173
  class: 'vxe-date-picker--panel-right-wrapper'
2101
2174
  }, rightSlot({}))
2102
- : renderEmptyElement($xeDatePicker)
2175
+ : renderShortcutBtn('right', true)
2103
2176
  ]),
2104
2177
  bottomSlot
2105
2178
  ? h('div', {
2106
2179
  class: 'vxe-date-picker--panel-bottom-wrapper'
2107
2180
  }, bottomSlot({}))
2108
- : renderEmptyElement($xeDatePicker)
2181
+ : renderShortcutBtn('bottom')
2109
2182
  ])
2110
2183
  ]
2111
2184
  : [])
@@ -91,7 +91,13 @@ setConfig({
91
91
  startDate: new Date(1900, 0, 1),
92
92
  endDate: new Date(2100, 0, 1),
93
93
  startDay: 1,
94
- selectDay: 1
94
+ selectDay: 1,
95
+ shortcutConfig: {
96
+ // position: 'left',
97
+ align: 'left',
98
+ mode: 'text',
99
+ autoClose: true
100
+ }
95
101
  },
96
102
  drawer: {
97
103
  // size: null,
@@ -2,8 +2,20 @@
2
2
  display: inline-flex;
3
3
  &.is--vertical {
4
4
  flex-direction: column;
5
- .vxe-button {
6
- margin: 0;
5
+ .vxe-button,
6
+ .vxe-button-wrapper {
7
+ &+.vxe-button-wrapper,
8
+ &+.vxe-button,
9
+ &+.vxe-button--dropdown {
10
+ margin-top: 0.5em;
11
+ }
12
+ }
13
+ .vxe-button--dropdown {
14
+ &+.vxe-button-wrapper,
15
+ &+.vxe-button,
16
+ &+.vxe-button--dropdown {
17
+ margin-top: 0.5em;
18
+ }
7
19
  }
8
20
  }
9
21
  }
@@ -274,6 +274,13 @@ $btnThemeList: (
274
274
  margin-left: 0.72em;
275
275
  }
276
276
  }
277
+ .vxe-button--dropdown {
278
+ &+.vxe-button-wrapper,
279
+ &+.vxe-button.type--button,
280
+ &+.vxe-button--dropdown {
281
+ margin-left: 0.72em;
282
+ }
283
+ }
277
284
  .vxe-button--loading-icon,
278
285
  .vxe-button--icon {
279
286
  min-width: var(--vxe-ui-font-size-default);
@@ -300,11 +307,6 @@ $btnThemeList: (
300
307
  .vxe-button--dropdown {
301
308
  position: relative;
302
309
  outline: 0;
303
- &+.vxe-button-wrapper,
304
- &+.vxe-button.type--button,
305
- &+.vxe-button--dropdown {
306
- margin-left: 12px;
307
- }
308
310
  & > .vxe-button {
309
311
  &.type--button {
310
312
  @for $index from 0 to list.length($btnThemeList) {
@@ -418,6 +418,8 @@
418
418
  box-shadow: inset 0 -1px 0 0 var(--vxe-ui-base-popup-border-color);
419
419
  }
420
420
  td {
421
+ border: 1px solid transparent;
422
+ border-radius: 1em;
421
423
  &.is--prev,
422
424
  &.is--next {
423
425
  color: var(--vxe-ui-font-disabled-color);
@@ -427,7 +429,7 @@
427
429
  }
428
430
  }
429
431
  &.is--now {
430
- box-shadow: inset 0 0 0 1px var(--vxe-ui-base-popup-border-color);
432
+ color: var(--vxe-ui-base-popup-border-color);
431
433
  &:not(.is--selected) {
432
434
  &.is--current {
433
435
  color: var(--vxe-ui-font-primary-color);
@@ -439,14 +441,21 @@
439
441
  }
440
442
  }
441
443
  &.is--hover {
442
- background-color: var(--vxe-ui-input-date-picker-hover-background-color);
444
+ border-color: var(--vxe-ui-font-primary-color);
445
+ background-color: var(--vxe-ui-font-primary-tinge-color);
443
446
  }
444
447
  &.is--selected {
445
448
  color: var(--vxe-ui-input-date-picker-selected-color);
446
449
  background-color: var(--vxe-ui-font-primary-color);
450
+ &.is--hover {
451
+ box-shadow: 0 0px 6px 1px var(--vxe-ui-font-primary-color);
452
+ }
447
453
  &.is--prev,
448
454
  &.is--next {
449
- background-color: var(--vxe-ui-font-primary-lighten-color);
455
+ .vxe-date-picker--date-label,
456
+ .vxe-date-picker--date-festival {
457
+ color: var(--vxe-ui-base-popup-border-color);
458
+ }
450
459
  }
451
460
  .vxe-date-picker--date-label,
452
461
  .vxe-date-picker--date-festival {
@@ -482,8 +491,23 @@
482
491
  }
483
492
  }
484
493
  td {
494
+ border-top-left-radius: 0;
495
+ border-top-right-radius: 0;
496
+ border-bottom-left-radius: 0;
497
+ border-bottom-right-radius: 0;
498
+ border-left-width: 0;
499
+ border-right-width: 0;
485
500
  &:first-child {
486
- box-shadow: inset -1px 0 0 0 var(--vxe-ui-base-popup-border-color);
501
+ border-bottom-left-radius: 1em;
502
+ border-top-left-radius: 1em;
503
+ border-left-width: 1px;
504
+ border-right-width: 1px;
505
+ border-right-color: var(--vxe-ui-base-popup-border-color);
506
+ }
507
+ &:last-child {
508
+ border-top-right-radius: 1em;
509
+ border-bottom-right-radius: 1em;
510
+ border-right-width: 1px;
487
511
  }
488
512
  }
489
513
  }
@@ -514,9 +538,8 @@
514
538
  position: absolute;
515
539
  right: 0.1em;
516
540
  top: -0.2em;
517
- font-size: 12px;
518
- line-height: 12px;
519
- transform: scale(0.7);
541
+ font-size: 0.86em;
542
+ transform: scale(0.85);
520
543
  color: var(--vxe-ui-input-date-extra-color);
521
544
  &.is-important {
522
545
  color: var(--vxe-ui-input-date-extra-important-color);
@@ -526,7 +549,6 @@
526
549
  .vxe-date-picker--date-festival {
527
550
  color: var(--vxe-ui-input-date-festival-color);
528
551
  height: 14px;
529
- line-height: 1;
530
552
  overflow: hidden;
531
553
  &.is-important {
532
554
  color: var(--vxe-ui-input-date-festival-important-color);
@@ -534,8 +556,8 @@
534
556
  }
535
557
  .vxe-date-picker--date-festival--label {
536
558
  display: block;
537
- font-size: 12px;
538
- transform: scale(0.8);
559
+ font-size: 0.86em;
560
+ transform: scale(0.9);
539
561
  }
540
562
 
541
563
  @keyframes festivalOverlap2 {
@@ -561,7 +583,7 @@
561
583
 
562
584
  .vxe-date-picker--date-festival--overlap {
563
585
  display: block;
564
- font-size: 12px;
586
+ font-size: 0.86em;
565
587
  &.overlap--2 {
566
588
  animation: festivalOverlap2 6s infinite ease-in-out;
567
589
  }
@@ -1,4 +1,6 @@
1
1
  .vxe-image {
2
+ vertical-align: middle;
3
+ border-style: none;
2
4
  &.is--circle {
3
5
  border-radius: 50%;
4
6
  }
@@ -1,5 +1,5 @@
1
1
  import { RenderFunction, SetupContext, Ref } from 'vue'
2
- import { DefineVxeComponentApp, DefineVxeComponentOptions, DefineVxeComponentInstance, VxeComponentBaseOptions, VxeComponentSizeType, VxeComponentEventParams, VxeComponentPermissionCodeType, ValueOf } from '@vxe-ui/core'
2
+ import { DefineVxeComponentApp, DefineVxeComponentOptions, DefineVxeComponentInstance, VxeComponentBaseOptions, VxeComponentAlignType, VxeComponentSizeType, VxeComponentEventParams, VxeComponentPermissionCodeType, ValueOf } from '@vxe-ui/core'
3
3
  import { VxeButtonProps, VxeButtonPropTypes } from './button'
4
4
 
5
5
  /* eslint-disable no-use-before-define,@typescript-eslint/ban-types */
@@ -30,6 +30,7 @@ export namespace VxeButtonGroupPropTypes {
30
30
  export type Round = boolean
31
31
  export type Vertical = boolean
32
32
  export type Circle = boolean
33
+ export type Align = VxeComponentAlignType
33
34
  export type Disabled = boolean
34
35
  export type Mode = VxeButtonPropTypes.Mode
35
36
  export type Status = VxeButtonPropTypes.Status
@@ -43,6 +44,7 @@ export type VxeButtonGroupProps = {
43
44
  mode?: VxeButtonGroupPropTypes.Mode
44
45
  status?: VxeButtonGroupPropTypes.Status
45
46
  round?: VxeButtonGroupPropTypes.Round
47
+ align?: VxeButtonGroupPropTypes.Align
46
48
  vertical?: VxeButtonGroupPropTypes.Vertical
47
49
  circle?: VxeButtonGroupPropTypes.Circle
48
50
  /**
@@ -1,5 +1,5 @@
1
1
  import { RenderFunction, SetupContext, Ref } from 'vue'
2
- import { DefineVxeComponentApp, DefineVxeComponentOptions, VxeComponentBaseOptions, DefineVxeComponentInstance, VxeComponentEventParams, VxeComponentPermissionCodeType, VxeComponentStatusType, VxeComponentSizeType, VxeComponentStyleType, ValueOf } from '@vxe-ui/core'
2
+ import { DefineVxeComponentApp, DefineVxeComponentOptions, VxeComponentBaseOptions, DefineVxeComponentInstance, VxeComponentAlignType, VxeComponentEventParams, VxeComponentPermissionCodeType, VxeComponentStatusType, VxeComponentSizeType, VxeComponentStyleType, ValueOf } from '@vxe-ui/core'
3
3
  import { VxeTooltipDefines } from './tooltip'
4
4
 
5
5
  /* eslint-disable no-use-before-define,@typescript-eslint/ban-types */
@@ -49,7 +49,7 @@ export namespace VxeButtonPropTypes {
49
49
  export type Disabled = boolean
50
50
  export type Loading = boolean
51
51
  export type Trigger = 'manual' | 'hover' | 'click' | '' | null
52
- export type Align = 'left' | 'center' | 'right' | '' | null
52
+ export type Align = VxeComponentAlignType
53
53
 
54
54
  export type PrefixTooltip = VxeTooltipDefines.TooltipHelperOption
55
55
  export type SuffixTooltip = VxeTooltipDefines.TooltipHelperOption
@@ -1,5 +1,7 @@
1
1
  import { RenderFunction, SetupContext, Ref } from 'vue'
2
2
  import { DefineVxeComponentApp, DefineVxeComponentOptions, DefineVxeComponentInstance, VxeComponentBaseOptions, VxeComponentEventParams, ValueOf, VxeComponentStyleType, VxeComponentSizeType } from '@vxe-ui/core'
3
+ import { VxeButtonGroupPropTypes } from './button-group'
4
+ import { VxeButtonProps } from './button'
3
5
 
4
6
  /* eslint-disable no-use-before-define,@typescript-eslint/ban-types */
5
7
 
@@ -65,6 +67,19 @@ export namespace VxeDatePickerPropTypes {
65
67
  export type Placement = 'top' | 'bottom' | '' | null
66
68
  export type Transfer = boolean
67
69
 
70
+ export interface ShortcutConfig {
71
+ enabled?: boolean
72
+ position?: 'top' | 'bottom' | 'left' | 'right' | 'header' | 'footer' | null
73
+ align?: VxeButtonGroupPropTypes.Align
74
+ mode?: VxeButtonGroupPropTypes.Mode
75
+ options?: VxeDatePickerDefines.ShortcutOption[]
76
+ /**
77
+ * 点击按钮后自动关闭弹窗面板
78
+ */
79
+ autoClose?: boolean
80
+ clickMethod?: (params: VxeDatePickerDefines.ShortcutClickParams) => void
81
+ }
82
+
68
83
  /**
69
84
  * 请使用 AutoComplete
70
85
  * @deprecated
@@ -124,6 +139,8 @@ export interface VxeDatePickerProps {
124
139
  festivalMethod?: VxeDatePickerPropTypes.FestivalMethod
125
140
  disabledMethod?: VxeDatePickerPropTypes.DisabledMethod
126
141
 
142
+ shortcutConfig?: VxeDatePickerPropTypes.ShortcutConfig
143
+
127
144
  // week
128
145
  selectDay?: VxeDatePickerPropTypes.SelectDay
129
146
 
@@ -205,7 +222,8 @@ export type VxeDatePickerEmits = [
205
222
  'suffix-click',
206
223
  'date-prev',
207
224
  'date-today',
208
- 'date-next'
225
+ 'date-next',
226
+ 'shortcut-click'
209
227
  ]
210
228
 
211
229
  export namespace VxeDatePickerDefines {
@@ -257,6 +275,10 @@ export namespace VxeDatePickerDefines {
257
275
 
258
276
  export type DatePanelType = 'year' | 'quarter' | 'month' | 'week' | 'day'
259
277
 
278
+ export interface ShortcutOption extends VxeButtonProps {
279
+ clickMethod?: (params: VxeDatePickerDefines.ShortcutClickParams) => void
280
+ }
281
+
260
282
  interface DateFestivalItem {
261
283
  /**
262
284
  * 显示名称
@@ -305,21 +327,30 @@ export namespace VxeDatePickerDefines {
305
327
 
306
328
  export interface ChangeParams extends DatePickerParams {}
307
329
  export interface ChangeEventParams extends DatePickerEventParams, ChangeParams { }
330
+
331
+ export interface ShortcutClickParams {
332
+ $datePicker: VxeDatePickerConstructor
333
+ option: VxeDatePickerDefines.ShortcutOption
334
+ }
335
+ export interface ShortcutClickEventParams extends DatePickerEventParams, ShortcutClickParams {}
308
336
  }
309
337
 
310
338
  export type VxeDatePickerEventProps = {
311
339
  onInput?: VxeDatePickerEvents.Input
312
340
  onChange?: VxeDatePickerEvents.Change
341
+ onShortcutClick?: VxeDatePickerEvents.ShortcutClick
313
342
  }
314
343
 
315
344
  export interface VxeDatePickerListeners {
316
345
  input?: VxeDatePickerEvents.Input
317
346
  change?: VxeDatePickerEvents.Change
347
+ shortcutClick?: VxeDatePickerEvents.ShortcutClick
318
348
  }
319
349
 
320
350
  export namespace VxeDatePickerEvents {
321
351
  export type Input = (params: VxeDatePickerDefines.InputEventParams) => void
322
352
  export type Change = (params: VxeDatePickerDefines.ChangeEventParams) => void
353
+ export type ShortcutClick = (params: VxeDatePickerDefines.ShortcutClickEventParams) => void
323
354
  }
324
355
 
325
356
  export namespace VxeDatePickerSlotTypes {