vxe-pc-ui 4.12.0 → 4.12.2

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 (169) hide show
  1. package/es/calendar/src/calendar.js +254 -97
  2. package/es/calendar/style.css +248 -69
  3. package/es/calendar/style.min.css +1 -1
  4. package/es/date-panel/src/date-panel.js +3 -1
  5. package/es/icon/style.css +1 -1
  6. package/es/language/ar-EG.js +4 -0
  7. package/es/language/de-DE.js +4 -0
  8. package/es/language/en-US.js +4 -0
  9. package/es/language/es-ES.js +4 -0
  10. package/es/language/fr-FR.js +4 -0
  11. package/es/language/hu-HU.js +4 -0
  12. package/es/language/hy-AM.js +4 -0
  13. package/es/language/id-ID.js +4 -0
  14. package/es/language/it-IT.js +4 -0
  15. package/es/language/ja-JP.js +4 -0
  16. package/es/language/ko-KR.js +4 -0
  17. package/es/language/ms-MY.js +4 -0
  18. package/es/language/nb-NO.js +4 -0
  19. package/es/language/pt-BR.js +4 -0
  20. package/es/language/ru-RU.js +4 -0
  21. package/es/language/th-TH.js +4 -0
  22. package/es/language/ug-CN.js +4 -0
  23. package/es/language/uk-UA.js +4 -0
  24. package/es/language/uz-UZ.js +4 -0
  25. package/es/language/vi-VN.js +4 -0
  26. package/es/language/zh-CHT.js +4 -0
  27. package/es/language/zh-CN.js +4 -0
  28. package/es/menu/src/menu.js +67 -8
  29. package/es/style.css +1 -1
  30. package/es/style.min.css +1 -1
  31. package/es/tree/src/tree.js +10 -2
  32. package/es/ui/index.js +1 -1
  33. package/es/ui/src/log.js +1 -1
  34. package/es/vxe-calendar/style.css +248 -69
  35. package/es/vxe-calendar/style.min.css +1 -1
  36. package/lib/calendar/src/calendar.js +283 -104
  37. package/lib/calendar/src/calendar.min.js +1 -1
  38. package/lib/calendar/style/style.css +248 -69
  39. package/lib/calendar/style/style.min.css +1 -1
  40. package/lib/date-panel/src/date-panel.js +3 -1
  41. package/lib/date-panel/src/date-panel.min.js +1 -1
  42. package/lib/icon/style/style.css +1 -1
  43. package/lib/icon/style/style.min.css +1 -1
  44. package/lib/index.umd.js +443 -161
  45. package/lib/index.umd.min.js +1 -1
  46. package/lib/language/ar-EG.js +4 -0
  47. package/lib/language/ar-EG.min.js +1 -1
  48. package/lib/language/ar-EG.umd.js +4 -0
  49. package/lib/language/de-DE.js +4 -0
  50. package/lib/language/de-DE.min.js +1 -1
  51. package/lib/language/de-DE.umd.js +4 -0
  52. package/lib/language/en-US.js +4 -0
  53. package/lib/language/en-US.min.js +1 -1
  54. package/lib/language/en-US.umd.js +4 -0
  55. package/lib/language/es-ES.js +4 -0
  56. package/lib/language/es-ES.min.js +1 -1
  57. package/lib/language/es-ES.umd.js +4 -0
  58. package/lib/language/fr-FR.js +4 -0
  59. package/lib/language/fr-FR.min.js +1 -1
  60. package/lib/language/fr-FR.umd.js +4 -0
  61. package/lib/language/hu-HU.js +4 -0
  62. package/lib/language/hu-HU.min.js +1 -1
  63. package/lib/language/hu-HU.umd.js +4 -0
  64. package/lib/language/hy-AM.js +4 -0
  65. package/lib/language/hy-AM.min.js +1 -1
  66. package/lib/language/hy-AM.umd.js +4 -0
  67. package/lib/language/id-ID.js +4 -0
  68. package/lib/language/id-ID.min.js +1 -1
  69. package/lib/language/id-ID.umd.js +4 -0
  70. package/lib/language/it-IT.js +4 -0
  71. package/lib/language/it-IT.min.js +1 -1
  72. package/lib/language/it-IT.umd.js +4 -0
  73. package/lib/language/ja-JP.js +4 -0
  74. package/lib/language/ja-JP.min.js +1 -1
  75. package/lib/language/ja-JP.umd.js +4 -0
  76. package/lib/language/ko-KR.js +4 -0
  77. package/lib/language/ko-KR.min.js +1 -1
  78. package/lib/language/ko-KR.umd.js +4 -0
  79. package/lib/language/ms-MY.js +4 -0
  80. package/lib/language/ms-MY.min.js +1 -1
  81. package/lib/language/ms-MY.umd.js +4 -0
  82. package/lib/language/nb-NO.js +4 -0
  83. package/lib/language/nb-NO.min.js +1 -1
  84. package/lib/language/nb-NO.umd.js +4 -0
  85. package/lib/language/pt-BR.js +4 -0
  86. package/lib/language/pt-BR.min.js +1 -1
  87. package/lib/language/pt-BR.umd.js +4 -0
  88. package/lib/language/ru-RU.js +4 -0
  89. package/lib/language/ru-RU.min.js +1 -1
  90. package/lib/language/ru-RU.umd.js +4 -0
  91. package/lib/language/th-TH.js +4 -0
  92. package/lib/language/th-TH.min.js +1 -1
  93. package/lib/language/th-TH.umd.js +4 -0
  94. package/lib/language/ug-CN.js +4 -0
  95. package/lib/language/ug-CN.min.js +1 -1
  96. package/lib/language/ug-CN.umd.js +4 -0
  97. package/lib/language/uk-UA.js +4 -0
  98. package/lib/language/uk-UA.min.js +1 -1
  99. package/lib/language/uk-UA.umd.js +4 -0
  100. package/lib/language/uz-UZ.js +4 -0
  101. package/lib/language/uz-UZ.min.js +1 -1
  102. package/lib/language/uz-UZ.umd.js +4 -0
  103. package/lib/language/vi-VN.js +4 -0
  104. package/lib/language/vi-VN.min.js +1 -1
  105. package/lib/language/vi-VN.umd.js +4 -0
  106. package/lib/language/zh-CHT.js +4 -0
  107. package/lib/language/zh-CHT.min.js +1 -1
  108. package/lib/language/zh-CHT.umd.js +4 -0
  109. package/lib/language/zh-CN.js +4 -0
  110. package/lib/language/zh-CN.min.js +1 -1
  111. package/lib/language/zh-CN.umd.js +4 -0
  112. package/lib/menu/src/menu.js +89 -10
  113. package/lib/menu/src/menu.min.js +1 -1
  114. package/lib/style.css +1 -1
  115. package/lib/style.min.css +1 -1
  116. package/lib/tree/src/tree.js +62 -44
  117. package/lib/tree/src/tree.min.js +1 -1
  118. package/lib/ui/index.js +1 -1
  119. package/lib/ui/index.min.js +1 -1
  120. package/lib/ui/src/log.js +1 -1
  121. package/lib/ui/src/log.min.js +1 -1
  122. package/lib/vxe-calendar/style/style.css +248 -69
  123. package/lib/vxe-calendar/style/style.min.css +1 -1
  124. package/package.json +1 -1
  125. package/packages/calendar/src/calendar.ts +259 -97
  126. package/packages/date-panel/src/date-panel.ts +3 -1
  127. package/packages/language/ar-EG.ts +4 -0
  128. package/packages/language/de-DE.ts +4 -0
  129. package/packages/language/en-US.ts +4 -0
  130. package/packages/language/es-ES.ts +4 -0
  131. package/packages/language/fr-FR.ts +4 -0
  132. package/packages/language/hu-HU.ts +4 -0
  133. package/packages/language/hy-AM.ts +4 -0
  134. package/packages/language/id-ID.ts +4 -0
  135. package/packages/language/it-IT.ts +4 -0
  136. package/packages/language/ja-JP.ts +4 -0
  137. package/packages/language/ko-KR.ts +4 -0
  138. package/packages/language/ms-MY.ts +4 -0
  139. package/packages/language/nb-NO.ts +4 -0
  140. package/packages/language/pt-BR.ts +4 -0
  141. package/packages/language/ru-RU.ts +4 -0
  142. package/packages/language/th-TH.ts +4 -0
  143. package/packages/language/ug-CN.ts +4 -0
  144. package/packages/language/uk-UA.ts +4 -0
  145. package/packages/language/uz-UZ.ts +4 -0
  146. package/packages/language/vi-VN.ts +4 -0
  147. package/packages/language/zh-CHT.ts +4 -0
  148. package/packages/language/zh-CN.ts +4 -0
  149. package/packages/menu/src/menu.ts +79 -15
  150. package/packages/tree/src/tree.ts +11 -2
  151. package/styles/components/calendar.scss +281 -78
  152. package/types/components/calendar.d.ts +47 -3
  153. package/types/components/form-design.d.ts +106 -21
  154. package/types/components/menu.d.ts +50 -2
  155. package/types/handles/form-design.d.ts +5 -1
  156. package/types/ui/menus.d.ts +54 -5
  157. package/types/ui/renderer.d.ts +2 -1
  158. /package/es/icon/{iconfont.1768384392686.ttf → iconfont.1768473788689.ttf} +0 -0
  159. /package/es/icon/{iconfont.1768384392686.woff → iconfont.1768473788689.woff} +0 -0
  160. /package/es/icon/{iconfont.1768384392686.woff2 → iconfont.1768473788689.woff2} +0 -0
  161. /package/es/{iconfont.1768384392686.ttf → iconfont.1768473788689.ttf} +0 -0
  162. /package/es/{iconfont.1768384392686.woff → iconfont.1768473788689.woff} +0 -0
  163. /package/es/{iconfont.1768384392686.woff2 → iconfont.1768473788689.woff2} +0 -0
  164. /package/lib/icon/style/{iconfont.1768384392686.ttf → iconfont.1768473788689.ttf} +0 -0
  165. /package/lib/icon/style/{iconfont.1768384392686.woff → iconfont.1768473788689.woff} +0 -0
  166. /package/lib/icon/style/{iconfont.1768384392686.woff2 → iconfont.1768473788689.woff2} +0 -0
  167. /package/lib/{iconfont.1768384392686.ttf → iconfont.1768473788689.ttf} +0 -0
  168. /package/lib/{iconfont.1768384392686.woff → iconfont.1768473788689.woff} +0 -0
  169. /package/lib/{iconfont.1768384392686.woff2 → iconfont.1768473788689.woff2} +0 -0
@@ -1,13 +1,17 @@
1
1
  import { h, ref, Ref, computed, reactive, watch, PropType, onMounted } from 'vue'
2
2
  import { defineVxeComponent } from '../../ui/src/comp'
3
- import { getConfig, getI18n, createEvent, useSize, renderEmptyElement } from '../../ui'
3
+ import { VxeUI, createEvent, useSize, renderEmptyElement } from '../../ui'
4
4
  import { getDateQuarter } from '../../date-panel/src/util'
5
5
  import { toCssUnit } from '../../ui/src/dom'
6
+ import { isEnableConf } from '../../ui/src/utils'
7
+ import { errLog } from '../../ui/src/log'
6
8
  import VxeButtonComponent from '../../button/src/button'
7
9
  import XEUtils from 'xe-utils'
8
10
 
9
11
  import type { VxeCalendarConstructor, VxeCalendarEmits, CalendarInternalData, CalendarReactData, CalendarMethods, VxeCalendarPropTypes, CalendarPrivateRef, VxeDatePanelDefines, ValueOf } from '../../../types'
10
12
 
13
+ const { menus, getConfig, getI18n } = VxeUI
14
+
11
15
  export default defineVxeComponent({
12
16
  name: 'VxeCalendar',
13
17
  props: {
@@ -49,7 +53,8 @@ export default defineVxeComponent({
49
53
  type: Function as PropType<VxeCalendarPropTypes.DisabledMethod>,
50
54
  default: () => getConfig().calendar.disabledMethod
51
55
  },
52
- cellStyle: Function as PropType<VxeCalendarPropTypes.CellStyle>,
56
+ cellStyle: [Object, Function] as PropType<VxeCalendarPropTypes.CellStyle>,
57
+ menuConfig: Object as PropType<VxeCalendarPropTypes.MenuConfig>,
53
58
 
54
59
  // week
55
60
  selectDay: {
@@ -60,11 +65,13 @@ export default defineVxeComponent({
60
65
  emits: [
61
66
  'update:modelValue',
62
67
  'change',
63
- 'click',
68
+ 'cell-click',
64
69
  'date-prev',
65
70
  'date-today',
66
71
  'date-next',
67
- 'view-change'
72
+ 'view-change',
73
+ 'cell-menu',
74
+ 'menu-click'
68
75
  ] as VxeCalendarEmits,
69
76
  setup (props, context) {
70
77
  const { emit } = context
@@ -136,6 +143,10 @@ export default defineVxeComponent({
136
143
  return ['date', 'week', 'month', 'quarter', 'year'].indexOf(props.type) > -1
137
144
  })
138
145
 
146
+ const computeMenuOpts = computed(() => {
147
+ return Object.assign({}, getConfig().calendar.menuConfig, props.menuConfig)
148
+ })
149
+
139
150
  const computeDateListValue = computed(() => {
140
151
  const { multiple } = props
141
152
  const { selectValue } = reactData
@@ -263,11 +274,11 @@ export default defineVxeComponent({
263
274
  y = yearList.length ? `${yearList[0].year} - ${yearList[yearList.length - 1].year}` : ''
264
275
  } else {
265
276
  y = `${year}`
266
- m = month ? getI18n(`vxe.input.date.m${month}`) : '-'
277
+ m = month ? getI18n('vxe.calendar.monthLabel', [month]) : '-'
267
278
  }
268
279
  }
269
280
  return {
270
- y,
281
+ y: getI18n('vxe.calendar.yearLabel', [y]),
271
282
  m
272
283
  }
273
284
  })
@@ -709,10 +720,46 @@ export default defineVxeComponent({
709
720
  }
710
721
  }
711
722
 
712
- const dateSelectEvent = (item: VxeDatePanelDefines.DateYearItem | VxeDatePanelDefines.DateQuarterItem | VxeDatePanelDefines.DateMonthItem | VxeDatePanelDefines.DateDayItem) => {
723
+ const dateClickEvent = (evnt: MouseEvent, item: VxeDatePanelDefines.DateYearItem | VxeDatePanelDefines.DateQuarterItem | VxeDatePanelDefines.DateMonthItem | VxeDatePanelDefines.DateDayItem) => {
724
+ const { type } = props
725
+ const { datePanelType } = reactData
726
+ const { date } = item
713
727
  if (!isDateDisabled(item)) {
714
- dateSelectItem(item.date)
728
+ dateSelectItem(date)
729
+ dispatchEvent('cell-click', { date, type, viewType: datePanelType }, evnt)
730
+ }
731
+ }
732
+
733
+ const datContextmenuEvent = (evnt: MouseEvent, item: VxeDatePanelDefines.DateYearItem | VxeDatePanelDefines.DateQuarterItem | VxeDatePanelDefines.DateMonthItem | VxeDatePanelDefines.DateDayItem) => {
734
+ const { type } = props
735
+ const { datePanelType } = reactData
736
+
737
+ const { menuConfig } = props
738
+ const menuOpts = computeMenuOpts.value
739
+ if (menuConfig ? isEnableConf(menuOpts) : menuOpts.enabled) {
740
+ const { options, visibleMethod } = menuOpts
741
+ const { date } = item
742
+ if (!visibleMethod || visibleMethod({ $calendar: $xeCalendar, options, date, type, viewType: datePanelType })) {
743
+ if (VxeUI.contextMenu) {
744
+ VxeUI.contextMenu.openByEvent(evnt, {
745
+ options,
746
+ events: {
747
+ optionClick (eventParams) {
748
+ const { option } = eventParams
749
+ const gMenuOpts = menus.get(option.code)
750
+ const cmMethod = gMenuOpts ? gMenuOpts.calendarMenuMethod : null
751
+ const params = { menu: option, date, type, viewType: datePanelType, $event: evnt, $calendar: $xeCalendar }
752
+ if (cmMethod) {
753
+ cmMethod(params, evnt)
754
+ }
755
+ dispatchEvent('menu-click', params, eventParams.$event)
756
+ }
757
+ }
758
+ })
759
+ }
760
+ }
715
761
  }
762
+ dispatchEvent('cell-menu', { date: item.date, type, viewType: datePanelType }, evnt)
716
763
  }
717
764
 
718
765
  const dateMoveDay = (offsetDay: Date) => {
@@ -770,6 +817,10 @@ export default defineVxeComponent({
770
817
  }
771
818
  }
772
819
 
820
+ const dateMouseleaveEvent = () => {
821
+ reactData.datePanelValue = null
822
+ }
823
+
773
824
  const dateConfirmEvent = () => {
774
825
  }
775
826
 
@@ -799,14 +850,16 @@ export default defineVxeComponent({
799
850
  const extraItem = festivalItem.extra ? (XEUtils.isString(festivalItem.extra) ? { label: festivalItem.extra } : festivalItem.extra) : null
800
851
  const labels = [
801
852
  h('span', {
802
- class: ['vxe-calendar--date-label', {
853
+ class: ['vxe-calendar--label', {
803
854
  'is-notice': festivalItem.notice
804
855
  }]
805
856
  }, extraItem && extraItem.label
806
857
  ? [
807
- h('span', `${label || ''}`),
808
858
  h('span', {
809
- class: ['vxe-calendar--date-label--extra', extraItem.important ? 'is-important' : '', extraItem.className],
859
+ class: 'vxe-calendar--label--number'
860
+ }, `${label || ''}`),
861
+ h('span', {
862
+ class: ['vxe-calendar--label--extra', extraItem.important ? 'is-important' : '', extraItem.className],
810
863
  style: extraItem.style
811
864
  }, XEUtils.toValueString(extraItem.label))
812
865
  ]
@@ -818,15 +871,15 @@ export default defineVxeComponent({
818
871
  const festivalLabels = XEUtils.toValueString(festivalLabel).split(',')
819
872
  labels.push(
820
873
  h('span', {
821
- class: ['vxe-calendar--date-festival', festivalItem.important ? 'is-important' : '', festivalItem.className],
874
+ class: ['vxe-calendar--festival', festivalItem.important ? 'is-important' : '', festivalItem.className],
822
875
  style: festivalItem.style
823
876
  }, [
824
877
  festivalLabels.length > 1
825
878
  ? h('span', {
826
- class: ['vxe-calendar--date-festival--overlap', `overlap--${festivalLabels.length}`]
879
+ class: ['vxe-calendar--festival--overlap', `overlap--${festivalLabels.length}`]
827
880
  }, festivalLabels.map(label => h('span', label.substring(0, 3))))
828
881
  : h('span', {
829
- class: 'vxe-calendar--date-festival--label'
882
+ class: 'vxe-calendar--festival--label'
830
883
  }, festivalLabels[0].substring(0, 3))
831
884
  ])
832
885
  )
@@ -845,35 +898,68 @@ export default defineVxeComponent({
845
898
  const dateListValue = computeDateListValue.value
846
899
  const matchFormat = 'yyyyMMdd'
847
900
  return [
848
- h('table', {
849
- class: `vxe-calendar--date-${datePanelType}-view`,
850
- cellspacing: 0,
851
- cellpadding: 0,
852
- border: 0
901
+ h('div', {
902
+ class: ['vxe-calendar--view-wrapper', `type--${datePanelType}`]
853
903
  }, [
854
- h('tr', dateHeaders.map((item) => {
855
- return h('th', {
856
- class: 'vxe-calendar--view-th'
857
- }, item.label)
858
- })),
859
- ...dayDatas.map((rows) => {
860
- return h('tr', rows.map((item) => {
861
- return h('td', {
862
- class: ['vxe-calendar--view-td', {
904
+ h('div', {
905
+ class: 'vxe-calendar--view-header',
906
+ style: {
907
+ height: `${100 / (dayDatas.length + 1)}%`
908
+ }
909
+ }, [
910
+ h('div', {
911
+ class: 'vxe-calendar--view-row'
912
+ }, dateHeaders.map((item) => {
913
+ return h('div', {
914
+ class: 'vxe-calendar--view-item',
915
+ style: {
916
+ width: `${100 / dateHeaders.length}%`
917
+ }
918
+ }, [
919
+ h('div', {
920
+ class: 'vxe-calendar--view-item-inner'
921
+ }, [
922
+ h('div', {
923
+ class: 'vxe-calendar--view-item-label'
924
+ }, item.label)
925
+ ])
926
+ ])
927
+ }))
928
+ ]),
929
+ h('div', {
930
+ class: 'vxe-calendar--view-body'
931
+ }, dayDatas.map((rows) => {
932
+ return h('div', {
933
+ class: 'vxe-calendar--view-row',
934
+ style: {
935
+ height: `${100 / dayDatas.length}%`
936
+ }
937
+ }, rows.map((item) => {
938
+ const isSelected = multiple ? dateListValue.some(val => XEUtils.isDateSame(val, item.date, matchFormat)) : XEUtils.isDateSame(dateValue, item.date, matchFormat)
939
+ return h('div', {
940
+ class: ['vxe-calendar--view-item', {
863
941
  'is--prev': item.isPrev,
864
942
  'is--current': item.isCurrent,
865
943
  'is--now': item.isNow,
866
944
  'is--next': item.isNext,
867
945
  'is--disabled': isDateDisabled(item),
868
- 'is--selected': multiple ? dateListValue.some(val => XEUtils.isDateSame(val, item.date, matchFormat)) : XEUtils.isDateSame(dateValue, item.date, matchFormat),
946
+ 'is--selected': isSelected,
869
947
  'is--hover': XEUtils.isDateSame(datePanelValue, item.date, matchFormat)
870
948
  }],
871
- style: Object.assign({}, XEUtils.isFunction(cellStyle) ? cellStyle({ type: datePanelType, viewType: datePanelType, date: item.date, $calendar: $xeCalendar }) : cellStyle),
872
- onClick: () => dateSelectEvent(item),
873
- onMouseenter: () => dateMouseenterEvent(item)
874
- }, renderDateLabel(item, item.label))
949
+ style: Object.assign({}, XEUtils.isFunction(cellStyle) ? cellStyle({ type: datePanelType, viewType: datePanelType, date: item.date, $calendar: $xeCalendar }) : cellStyle, {
950
+ width: `${100 / rows.length}%`
951
+ }),
952
+ onClick: (evnt) => dateClickEvent(evnt, item),
953
+ onContextmenu: (evnt) => datContextmenuEvent(evnt, item),
954
+ onMouseenter: () => dateMouseenterEvent(item),
955
+ onMouseleave: dateMouseleaveEvent
956
+ }, [
957
+ h('div', {
958
+ class: 'vxe-calendar--view-item-inner'
959
+ }, renderDateLabel(item, item.label))
960
+ ])
875
961
  }))
876
- })
962
+ }))
877
963
  ])
878
964
  ]
879
965
  }
@@ -887,38 +973,70 @@ export default defineVxeComponent({
887
973
  const dateListValue = computeDateListValue.value
888
974
  const matchFormat = 'yyyyMMdd'
889
975
  return [
890
- h('table', {
891
- class: `vxe-calendar--date-${datePanelType}-view`,
892
- cellspacing: 0,
893
- cellpadding: 0,
894
- border: 0
976
+ h('div', {
977
+ class: ['vxe-calendar--view-wrapper', `type--${datePanelType}`]
895
978
  }, [
896
- h('tr', weekHeaders.map((item) => {
897
- return h('td', {
898
- class: 'vxe-calendar--view-th'
899
- }, item.label)
900
- })),
901
- ...weekDates.map((rows) => {
979
+ h('div', {
980
+ class: 'vxe-calendar--view-header',
981
+ style: {
982
+ height: `${100 / (weekDates.length + 1)}%`
983
+ }
984
+ }, [
985
+ h('div', {
986
+ class: 'vxe-calendar--view-row'
987
+ }, weekHeaders.map((item, rIndex) => {
988
+ return h('div', {
989
+ class: 'vxe-calendar--view-item',
990
+ style: {
991
+ width: `${rIndex ? 13 : 9}%`
992
+ }
993
+ }, [
994
+ h('div', {
995
+ class: 'vxe-calendar--view-item-inner'
996
+ }, [
997
+ h('div', {
998
+ class: 'vxe-calendar--view-item-label'
999
+ }, item.label)
1000
+ ])
1001
+ ])
1002
+ }))
1003
+ ]),
1004
+ h('div', {
1005
+ class: 'vxe-calendar--view-body'
1006
+ }, weekDates.map((rows) => {
902
1007
  const isSelected = multiple ? rows.some((item) => dateListValue.some(val => XEUtils.isDateSame(val, item.date, matchFormat))) : rows.some((item) => XEUtils.isDateSame(dateValue, item.date, matchFormat))
903
1008
  const isHover = rows.some((item) => XEUtils.isDateSame(datePanelValue, item.date, matchFormat))
904
- return h('tr', rows.map((item) => {
905
- return h('td', {
906
- class: ['vxe-calendar--view-td', {
1009
+ const isNowWeek = rows.some(item => item.isNow)
1010
+ return h('div', {
1011
+ class: 'vxe-calendar--view-row',
1012
+ style: {
1013
+ height: `${100 / weekDates.length}%`
1014
+ }
1015
+ }, rows.map((item, rIndex) => {
1016
+ return h('div', {
1017
+ class: ['vxe-calendar--view-item', {
907
1018
  'is--prev': item.isPrev,
908
1019
  'is--current': item.isCurrent,
909
- 'is--now': item.isNow,
1020
+ 'is--now': rIndex ? item.isNow : isNowWeek,
910
1021
  'is--next': item.isNext,
911
1022
  'is--disabled': isDateDisabled(item),
912
1023
  'is--selected': isSelected,
913
1024
  'is--hover': isHover
914
1025
  }],
915
- style: Object.assign({}, XEUtils.isFunction(cellStyle) ? cellStyle({ type: datePanelType, viewType: datePanelType, date: item.date, $calendar: $xeCalendar }) : cellStyle),
916
- // event
917
- onClick: () => dateSelectEvent(item),
918
- onMouseenter: () => dateMouseenterEvent(item)
919
- }, renderDateLabel(item, item.label))
1026
+ style: Object.assign({}, XEUtils.isFunction(cellStyle) ? cellStyle({ type: datePanelType, viewType: datePanelType, date: item.date, $calendar: $xeCalendar }) : cellStyle, {
1027
+ width: `${rIndex ? 13 : 9}%`
1028
+ }),
1029
+ onClick: (evnt) => dateClickEvent(evnt, item),
1030
+ onContextmenu: (evnt) => datContextmenuEvent(evnt, item),
1031
+ onMouseenter: () => dateMouseenterEvent(item),
1032
+ onMouseleave: dateMouseleaveEvent
1033
+ }, [
1034
+ h('div', {
1035
+ class: 'vxe-calendar--view-item-inner'
1036
+ }, renderDateLabel(item, item.label))
1037
+ ])
920
1038
  }))
921
- })
1039
+ }))
922
1040
  ])
923
1041
  ]
924
1042
  }
@@ -931,28 +1049,41 @@ export default defineVxeComponent({
931
1049
  const dateListValue = computeDateListValue.value
932
1050
  const matchFormat = 'yyyyMM'
933
1051
  return [
934
- h('table', {
935
- class: `vxe-calendar--date-${datePanelType}-view`,
936
- cellspacing: 0,
937
- cellpadding: 0,
938
- border: 0
1052
+ h('div', {
1053
+ class: ['vxe-calendar--view-wrapper', `type--${datePanelType}`]
939
1054
  }, [
940
- h('tbody', monthDatas.map((rows) => {
941
- return h('tr', rows.map((item) => {
942
- return h('td', {
943
- class: ['vxe-calendar--view-td', {
1055
+ h('div', {
1056
+ class: 'vxe-calendar--view-body'
1057
+ }, monthDatas.map((rows) => {
1058
+ return h('div', {
1059
+ class: 'vxe-calendar--view-row',
1060
+ style: {
1061
+ height: `${100 / monthDatas.length}%`
1062
+ }
1063
+ }, rows.map((item) => {
1064
+ const isSelected = multiple ? dateListValue.some(val => XEUtils.isDateSame(val, item.date, matchFormat)) : XEUtils.isDateSame(dateValue, item.date, matchFormat)
1065
+ return h('div', {
1066
+ class: ['vxe-calendar--view-item', {
944
1067
  'is--prev': item.isPrev,
945
1068
  'is--current': item.isCurrent,
946
1069
  'is--now': item.isNow,
947
1070
  'is--next': item.isNext,
948
1071
  'is--disabled': isDateDisabled(item),
949
- 'is--selected': multiple ? dateListValue.some(val => XEUtils.isDateSame(val, item.date, matchFormat)) : XEUtils.isDateSame(dateValue, item.date, matchFormat),
1072
+ 'is--selected': isSelected,
950
1073
  'is--hover': XEUtils.isDateSame(datePanelValue, item.date, matchFormat)
951
1074
  }],
952
- style: Object.assign({}, XEUtils.isFunction(cellStyle) ? cellStyle({ type: datePanelType, viewType: datePanelType, date: item.date, $calendar: $xeCalendar }) : cellStyle),
953
- onClick: () => dateSelectEvent(item),
954
- onMouseenter: () => dateMouseenterEvent(item)
955
- }, renderDateLabel(item, getI18n(`vxe.input.date.months.m${item.month}`)))
1075
+ style: Object.assign({}, XEUtils.isFunction(cellStyle) ? cellStyle({ type: datePanelType, viewType: datePanelType, date: item.date, $calendar: $xeCalendar }) : cellStyle, {
1076
+ width: `${100 / rows.length}%`
1077
+ }),
1078
+ onClick: (evnt) => dateClickEvent(evnt, item),
1079
+ onContextmenu: (evnt) => datContextmenuEvent(evnt, item),
1080
+ onMouseenter: () => dateMouseenterEvent(item),
1081
+ onMouseleave: dateMouseleaveEvent
1082
+ }, [
1083
+ h('div', {
1084
+ class: 'vxe-calendar--view-item-inner'
1085
+ }, renderDateLabel(item, getI18n(`vxe.input.date.months.m${item.month}`)))
1086
+ ])
956
1087
  }))
957
1088
  }))
958
1089
  ])
@@ -967,28 +1098,41 @@ export default defineVxeComponent({
967
1098
  const dateListValue = computeDateListValue.value
968
1099
  const matchFormat = 'yyyyq'
969
1100
  return [
970
- h('table', {
971
- class: `vxe-calendar--date-${datePanelType}-view`,
972
- cellspacing: 0,
973
- cellpadding: 0,
974
- border: 0
1101
+ h('div', {
1102
+ class: ['vxe-calendar--view-wrapper', `type--${datePanelType}`]
975
1103
  }, [
976
- h('tbody', quarterDatas.map((rows) => {
977
- return h('tr', rows.map((item) => {
978
- return h('td', {
979
- class: ['vxe-calendar--view-td', {
1104
+ h('div', {
1105
+ class: 'vxe-calendar--view-body'
1106
+ }, quarterDatas.map((rows) => {
1107
+ return h('div', {
1108
+ class: 'vxe-calendar--view-row',
1109
+ style: {
1110
+ height: `${100 / quarterDatas.length}%`
1111
+ }
1112
+ }, rows.map((item) => {
1113
+ const isSelected = multiple ? dateListValue.some(val => XEUtils.isDateSame(val, item.date, matchFormat)) : XEUtils.isDateSame(dateValue, item.date, matchFormat)
1114
+ return h('div', {
1115
+ class: ['vxe-calendar--view-item', {
980
1116
  'is--prev': item.isPrev,
981
1117
  'is--current': item.isCurrent,
982
1118
  'is--now': item.isNow,
983
1119
  'is--next': item.isNext,
984
1120
  'is--disabled': isDateDisabled(item),
985
- 'is--selected': multiple ? dateListValue.some(val => XEUtils.isDateSame(val, item.date, matchFormat)) : XEUtils.isDateSame(dateValue, item.date, matchFormat),
1121
+ 'is--selected': isSelected,
986
1122
  'is--hover': XEUtils.isDateSame(datePanelValue, item.date, matchFormat)
987
1123
  }],
988
- style: Object.assign({}, XEUtils.isFunction(cellStyle) ? cellStyle({ type: datePanelType, viewType: datePanelType, date: item.date, $calendar: $xeCalendar }) : cellStyle),
989
- onClick: () => dateSelectEvent(item),
990
- onMouseenter: () => dateMouseenterEvent(item)
991
- }, renderDateLabel(item, getI18n(`vxe.input.date.quarters.q${item.quarter}`)))
1124
+ style: Object.assign({}, XEUtils.isFunction(cellStyle) ? cellStyle({ type: datePanelType, viewType: datePanelType, date: item.date, $calendar: $xeCalendar }) : cellStyle, {
1125
+ width: `${100 / rows.length}%`
1126
+ }),
1127
+ onClick: (evnt) => dateClickEvent(evnt, item),
1128
+ onContextmenu: (evnt) => datContextmenuEvent(evnt, item),
1129
+ onMouseenter: () => dateMouseenterEvent(item),
1130
+ onMouseleave: dateMouseleaveEvent
1131
+ }, [
1132
+ h('div', {
1133
+ class: 'vxe-calendar--view-item-inner'
1134
+ }, renderDateLabel(item, getI18n(`vxe.input.date.quarters.q${item.quarter}`)))
1135
+ ])
992
1136
  }))
993
1137
  }))
994
1138
  ])
@@ -1003,28 +1147,41 @@ export default defineVxeComponent({
1003
1147
  const dateListValue = computeDateListValue.value
1004
1148
  const matchFormat = 'yyyy'
1005
1149
  return [
1006
- h('table', {
1007
- class: `vxe-calendar--date-${datePanelType}-view`,
1008
- cellspacing: 0,
1009
- cellpadding: 0,
1010
- border: 0
1150
+ h('div', {
1151
+ class: ['vxe-calendar--view-wrapper', `type--${datePanelType}`]
1011
1152
  }, [
1012
- h('tbody', yearDatas.map((rows) => {
1013
- return h('tr', rows.map((item) => {
1014
- return h('td', {
1015
- class: ['vxe-calendar--view-td', {
1153
+ h('div', {
1154
+ class: 'vxe-calendar--view-body'
1155
+ }, yearDatas.map((rows) => {
1156
+ return h('div', {
1157
+ class: 'vxe-calendar--view-row',
1158
+ style: {
1159
+ height: `${100 / yearDatas.length}%`
1160
+ }
1161
+ }, rows.map((item) => {
1162
+ const isSelected = multiple ? dateListValue.some(val => XEUtils.isDateSame(val, item.date, matchFormat)) : XEUtils.isDateSame(dateValue, item.date, matchFormat)
1163
+ return h('div', {
1164
+ class: ['vxe-calendar--view-item', {
1016
1165
  'is--prev': item.isPrev,
1017
1166
  'is--current': item.isCurrent,
1018
1167
  'is--now': item.isNow,
1019
1168
  'is--next': item.isNext,
1020
1169
  'is--disabled': isDateDisabled(item),
1021
- 'is--selected': multiple ? dateListValue.some(val => XEUtils.isDateSame(val, item.date, matchFormat)) : XEUtils.isDateSame(dateValue, item.date, matchFormat),
1170
+ 'is--selected': isSelected,
1022
1171
  'is--hover': XEUtils.isDateSame(datePanelValue, item.date, matchFormat)
1023
1172
  }],
1024
- style: Object.assign({}, XEUtils.isFunction(cellStyle) ? cellStyle({ type: datePanelType, viewType: datePanelType, date: item.date, $calendar: $xeCalendar }) : cellStyle),
1025
- onClick: () => dateSelectEvent(item),
1026
- onMouseenter: () => dateMouseenterEvent(item)
1027
- }, renderDateLabel(item, item.year))
1173
+ style: Object.assign({}, XEUtils.isFunction(cellStyle) ? cellStyle({ type: datePanelType, viewType: datePanelType, date: item.date, $calendar: $xeCalendar }) : cellStyle, {
1174
+ width: `${100 / rows.length}%`
1175
+ }),
1176
+ onClick: (evnt) => dateClickEvent(evnt, item),
1177
+ onContextmenu: (evnt) => datContextmenuEvent(evnt, item),
1178
+ onMouseenter: () => dateMouseenterEvent(item),
1179
+ onMouseleave: dateMouseleaveEvent
1180
+ }, [
1181
+ h('div', {
1182
+ class: 'vxe-calendar--view-item-inner'
1183
+ }, renderDateLabel(item, item.year))
1184
+ ])
1028
1185
  }))
1029
1186
  }))
1030
1187
  ])
@@ -1176,6 +1333,11 @@ export default defineVxeComponent({
1176
1333
  })
1177
1334
 
1178
1335
  onMounted(() => {
1336
+ const { menuConfig } = props
1337
+ const VxeUIContextMenu = VxeUI.getComponent('VxeContextMenu')
1338
+ if (menuConfig && !VxeUIContextMenu) {
1339
+ errLog('vxe.error.reqComp', ['vxe-context-menu'])
1340
+ }
1179
1341
  dateOpenPanel()
1180
1342
  })
1181
1343
 
@@ -1147,7 +1147,9 @@ export default defineVxeComponent({
1147
1147
  }]
1148
1148
  }, extraItem && extraItem.label
1149
1149
  ? [
1150
- h('div', `${label}`),
1150
+ h('div', {
1151
+ class: 'vxe-date-panel--label--number'
1152
+ }, `${label}`),
1151
1153
  h('div', {
1152
1154
  class: ['vxe-date-panel--label--extra', extraItem.important ? 'is-important' : '', extraItem.className],
1153
1155
  style: extraItem.style
@@ -333,6 +333,10 @@ export default {
333
333
  }
334
334
  }
335
335
  },
336
+ calendar: {
337
+ yearLabel: '{0} 年',
338
+ monthLabel: '{0} 月'
339
+ },
336
340
  numberInput: {
337
341
  currencySymbol: '$'
338
342
  },
@@ -333,6 +333,10 @@ export default {
333
333
  }
334
334
  }
335
335
  },
336
+ calendar: {
337
+ yearLabel: '{0} 年',
338
+ monthLabel: '{0} 月'
339
+ },
336
340
  numberInput: {
337
341
  currencySymbol: '$'
338
342
  },
@@ -333,6 +333,10 @@ export default {
333
333
  }
334
334
  }
335
335
  },
336
+ calendar: {
337
+ yearLabel: '{0}',
338
+ monthLabel: '{0}'
339
+ },
336
340
  numberInput: {
337
341
  currencySymbol: '$'
338
342
  },
@@ -333,6 +333,10 @@ export default {
333
333
  }
334
334
  }
335
335
  },
336
+ calendar: {
337
+ yearLabel: '{0} 年',
338
+ monthLabel: '{0} 月'
339
+ },
336
340
  numberInput: {
337
341
  currencySymbol: '$'
338
342
  },
@@ -333,6 +333,10 @@ export default {
333
333
  }
334
334
  }
335
335
  },
336
+ calendar: {
337
+ yearLabel: '{0} 年',
338
+ monthLabel: '{0} 月'
339
+ },
336
340
  numberInput: {
337
341
  currencySymbol: '$'
338
342
  },
@@ -333,6 +333,10 @@ export default {
333
333
  }
334
334
  }
335
335
  },
336
+ calendar: {
337
+ yearLabel: '{0} 年',
338
+ monthLabel: '{0} 月'
339
+ },
336
340
  numberInput: {
337
341
  currencySymbol: '$'
338
342
  },
@@ -333,6 +333,10 @@ export default {
333
333
  }
334
334
  }
335
335
  },
336
+ calendar: {
337
+ yearLabel: '{0} 年',
338
+ monthLabel: '{0} 月'
339
+ },
336
340
  numberInput: {
337
341
  currencySymbol: '$'
338
342
  },
@@ -333,6 +333,10 @@ export default {
333
333
  }
334
334
  }
335
335
  },
336
+ calendar: {
337
+ yearLabel: '{0} 年',
338
+ monthLabel: '{0} 月'
339
+ },
336
340
  numberInput: {
337
341
  currencySymbol: '$'
338
342
  },
@@ -333,6 +333,10 @@ export default {
333
333
  }
334
334
  }
335
335
  },
336
+ calendar: {
337
+ yearLabel: '{0} 年',
338
+ monthLabel: '{0} 月'
339
+ },
336
340
  numberInput: {
337
341
  currencySymbol: '$'
338
342
  },
@@ -333,6 +333,10 @@ export default {
333
333
  }
334
334
  }
335
335
  },
336
+ calendar: {
337
+ yearLabel: '{0} 年',
338
+ monthLabel: '{0} 月'
339
+ },
336
340
  numberInput: {
337
341
  currencySymbol: '$'
338
342
  },