vxe-pc-ui 4.11.45 → 4.12.1

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 (167) 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/ui/menus.d.ts +54 -5
  156. /package/es/icon/{iconfont.1768381374840.ttf → iconfont.1768462812157.ttf} +0 -0
  157. /package/es/icon/{iconfont.1768381374840.woff → iconfont.1768462812157.woff} +0 -0
  158. /package/es/icon/{iconfont.1768381374840.woff2 → iconfont.1768462812157.woff2} +0 -0
  159. /package/es/{iconfont.1768381374840.ttf → iconfont.1768462812157.ttf} +0 -0
  160. /package/es/{iconfont.1768381374840.woff → iconfont.1768462812157.woff} +0 -0
  161. /package/es/{iconfont.1768381374840.woff2 → iconfont.1768462812157.woff2} +0 -0
  162. /package/lib/icon/style/{iconfont.1768381374840.ttf → iconfont.1768462812157.ttf} +0 -0
  163. /package/lib/icon/style/{iconfont.1768381374840.woff → iconfont.1768462812157.woff} +0 -0
  164. /package/lib/icon/style/{iconfont.1768381374840.woff2 → iconfont.1768462812157.woff2} +0 -0
  165. /package/lib/{iconfont.1768381374840.ttf → iconfont.1768462812157.ttf} +0 -0
  166. /package/lib/{iconfont.1768381374840.woff → iconfont.1768462812157.woff} +0 -0
  167. /package/lib/{iconfont.1768381374840.woff2 → iconfont.1768462812157.woff2} +0 -0
@@ -1,10 +1,13 @@
1
1
  import { h, ref, computed, reactive, watch, 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';
10
+ const { menus, getConfig, getI18n } = VxeUI;
8
11
  export default defineVxeComponent({
9
12
  name: 'VxeCalendar',
10
13
  props: {
@@ -44,7 +47,8 @@ export default defineVxeComponent({
44
47
  type: Function,
45
48
  default: () => getConfig().calendar.disabledMethod
46
49
  },
47
- cellStyle: Function,
50
+ cellStyle: [Object, Function],
51
+ menuConfig: Object,
48
52
  // week
49
53
  selectDay: {
50
54
  type: [String, Number],
@@ -54,11 +58,13 @@ export default defineVxeComponent({
54
58
  emits: [
55
59
  'update:modelValue',
56
60
  'change',
57
- 'click',
61
+ 'cell-click',
58
62
  'date-prev',
59
63
  'date-today',
60
64
  'date-next',
61
- 'view-change'
65
+ 'view-change',
66
+ 'cell-menu',
67
+ 'menu-click'
62
68
  ],
63
69
  setup(props, context) {
64
70
  const { emit } = context;
@@ -116,6 +122,9 @@ export default defineVxeComponent({
116
122
  const computeSupportMultiples = computed(() => {
117
123
  return ['date', 'week', 'month', 'quarter', 'year'].indexOf(props.type) > -1;
118
124
  });
125
+ const computeMenuOpts = computed(() => {
126
+ return Object.assign({}, getConfig().calendar.menuConfig, props.menuConfig);
127
+ });
119
128
  const computeDateListValue = computed(() => {
120
129
  const { multiple } = props;
121
130
  const { selectValue } = reactData;
@@ -235,11 +244,11 @@ export default defineVxeComponent({
235
244
  }
236
245
  else {
237
246
  y = `${year}`;
238
- m = month ? getI18n(`vxe.input.date.m${month}`) : '-';
247
+ m = month ? getI18n('vxe.calendar.monthLabel', [month]) : '-';
239
248
  }
240
249
  }
241
250
  return {
242
- y,
251
+ y: getI18n('vxe.calendar.yearLabel', [y]),
243
252
  m
244
253
  };
245
254
  });
@@ -673,10 +682,44 @@ export default defineVxeComponent({
673
682
  }
674
683
  }
675
684
  };
676
- const dateSelectEvent = (item) => {
685
+ const dateClickEvent = (evnt, item) => {
686
+ const { type } = props;
687
+ const { datePanelType } = reactData;
688
+ const { date } = item;
677
689
  if (!isDateDisabled(item)) {
678
- dateSelectItem(item.date);
690
+ dateSelectItem(date);
691
+ dispatchEvent('cell-click', { date, type, viewType: datePanelType }, evnt);
692
+ }
693
+ };
694
+ const datContextmenuEvent = (evnt, item) => {
695
+ const { type } = props;
696
+ const { datePanelType } = reactData;
697
+ const { menuConfig } = props;
698
+ const menuOpts = computeMenuOpts.value;
699
+ if (menuConfig ? isEnableConf(menuOpts) : menuOpts.enabled) {
700
+ const { options, visibleMethod } = menuOpts;
701
+ const { date } = item;
702
+ if (!visibleMethod || visibleMethod({ $calendar: $xeCalendar, options, date, type, viewType: datePanelType })) {
703
+ if (VxeUI.contextMenu) {
704
+ VxeUI.contextMenu.openByEvent(evnt, {
705
+ options,
706
+ events: {
707
+ optionClick(eventParams) {
708
+ const { option } = eventParams;
709
+ const gMenuOpts = menus.get(option.code);
710
+ const cmMethod = gMenuOpts ? gMenuOpts.calendarMenuMethod : null;
711
+ const params = { menu: option, date, type, viewType: datePanelType, $event: evnt, $calendar: $xeCalendar };
712
+ if (cmMethod) {
713
+ cmMethod(params, evnt);
714
+ }
715
+ dispatchEvent('menu-click', params, eventParams.$event);
716
+ }
717
+ }
718
+ });
719
+ }
720
+ }
679
721
  }
722
+ dispatchEvent('cell-menu', { date: item.date, type, viewType: datePanelType }, evnt);
680
723
  };
681
724
  const dateMoveDay = (offsetDay) => {
682
725
  if (!isDateDisabled({ date: offsetDay })) {
@@ -731,6 +774,9 @@ export default defineVxeComponent({
731
774
  }
732
775
  }
733
776
  };
777
+ const dateMouseleaveEvent = () => {
778
+ reactData.datePanelValue = null;
779
+ };
734
780
  const dateConfirmEvent = () => {
735
781
  };
736
782
  const dateOpenPanel = () => {
@@ -760,14 +806,16 @@ export default defineVxeComponent({
760
806
  const extraItem = festivalItem.extra ? (XEUtils.isString(festivalItem.extra) ? { label: festivalItem.extra } : festivalItem.extra) : null;
761
807
  const labels = [
762
808
  h('span', {
763
- class: ['vxe-calendar--date-label', {
809
+ class: ['vxe-calendar--label', {
764
810
  'is-notice': festivalItem.notice
765
811
  }]
766
812
  }, extraItem && extraItem.label
767
813
  ? [
768
- h('span', `${label || ''}`),
769
814
  h('span', {
770
- class: ['vxe-calendar--date-label--extra', extraItem.important ? 'is-important' : '', extraItem.className],
815
+ class: 'vxe-calendar--label--number'
816
+ }, `${label || ''}`),
817
+ h('span', {
818
+ class: ['vxe-calendar--label--extra', extraItem.important ? 'is-important' : '', extraItem.className],
771
819
  style: extraItem.style
772
820
  }, XEUtils.toValueString(extraItem.label))
773
821
  ]
@@ -778,15 +826,15 @@ export default defineVxeComponent({
778
826
  // 默认最多支持3个节日重叠
779
827
  const festivalLabels = XEUtils.toValueString(festivalLabel).split(',');
780
828
  labels.push(h('span', {
781
- class: ['vxe-calendar--date-festival', festivalItem.important ? 'is-important' : '', festivalItem.className],
829
+ class: ['vxe-calendar--festival', festivalItem.important ? 'is-important' : '', festivalItem.className],
782
830
  style: festivalItem.style
783
831
  }, [
784
832
  festivalLabels.length > 1
785
833
  ? h('span', {
786
- class: ['vxe-calendar--date-festival--overlap', `overlap--${festivalLabels.length}`]
834
+ class: ['vxe-calendar--festival--overlap', `overlap--${festivalLabels.length}`]
787
835
  }, festivalLabels.map(label => h('span', label.substring(0, 3))))
788
836
  : h('span', {
789
- class: 'vxe-calendar--date-festival--label'
837
+ class: 'vxe-calendar--festival--label'
790
838
  }, festivalLabels[0].substring(0, 3))
791
839
  ]));
792
840
  }
@@ -803,35 +851,68 @@ export default defineVxeComponent({
803
851
  const dateListValue = computeDateListValue.value;
804
852
  const matchFormat = 'yyyyMMdd';
805
853
  return [
806
- h('table', {
807
- class: `vxe-calendar--date-${datePanelType}-view`,
808
- cellspacing: 0,
809
- cellpadding: 0,
810
- border: 0
854
+ h('div', {
855
+ class: ['vxe-calendar--view-wrapper', `type--${datePanelType}`]
811
856
  }, [
812
- h('tr', dateHeaders.map((item) => {
813
- return h('th', {
814
- class: 'vxe-calendar--view-th'
815
- }, item.label);
816
- })),
817
- ...dayDatas.map((rows) => {
818
- return h('tr', rows.map((item) => {
819
- return h('td', {
820
- class: ['vxe-calendar--view-td', {
857
+ h('div', {
858
+ class: 'vxe-calendar--view-header',
859
+ style: {
860
+ height: `${100 / (dayDatas.length + 1)}%`
861
+ }
862
+ }, [
863
+ h('div', {
864
+ class: 'vxe-calendar--view-row'
865
+ }, dateHeaders.map((item) => {
866
+ return h('div', {
867
+ class: 'vxe-calendar--view-item',
868
+ style: {
869
+ width: `${100 / dateHeaders.length}%`
870
+ }
871
+ }, [
872
+ h('div', {
873
+ class: 'vxe-calendar--view-item-inner'
874
+ }, [
875
+ h('div', {
876
+ class: 'vxe-calendar--view-item-label'
877
+ }, item.label)
878
+ ])
879
+ ]);
880
+ }))
881
+ ]),
882
+ h('div', {
883
+ class: 'vxe-calendar--view-body'
884
+ }, dayDatas.map((rows) => {
885
+ return h('div', {
886
+ class: 'vxe-calendar--view-row',
887
+ style: {
888
+ height: `${100 / dayDatas.length}%`
889
+ }
890
+ }, rows.map((item) => {
891
+ const isSelected = multiple ? dateListValue.some(val => XEUtils.isDateSame(val, item.date, matchFormat)) : XEUtils.isDateSame(dateValue, item.date, matchFormat);
892
+ return h('div', {
893
+ class: ['vxe-calendar--view-item', {
821
894
  'is--prev': item.isPrev,
822
895
  'is--current': item.isCurrent,
823
896
  'is--now': item.isNow,
824
897
  'is--next': item.isNext,
825
898
  'is--disabled': isDateDisabled(item),
826
- 'is--selected': multiple ? dateListValue.some(val => XEUtils.isDateSame(val, item.date, matchFormat)) : XEUtils.isDateSame(dateValue, item.date, matchFormat),
899
+ 'is--selected': isSelected,
827
900
  'is--hover': XEUtils.isDateSame(datePanelValue, item.date, matchFormat)
828
901
  }],
829
- style: Object.assign({}, XEUtils.isFunction(cellStyle) ? cellStyle({ type: datePanelType, viewType: datePanelType, date: item.date, $calendar: $xeCalendar }) : cellStyle),
830
- onClick: () => dateSelectEvent(item),
831
- onMouseenter: () => dateMouseenterEvent(item)
832
- }, renderDateLabel(item, item.label));
902
+ style: Object.assign({}, XEUtils.isFunction(cellStyle) ? cellStyle({ type: datePanelType, viewType: datePanelType, date: item.date, $calendar: $xeCalendar }) : cellStyle, {
903
+ width: `${100 / rows.length}%`
904
+ }),
905
+ onClick: (evnt) => dateClickEvent(evnt, item),
906
+ onContextmenu: (evnt) => datContextmenuEvent(evnt, item),
907
+ onMouseenter: () => dateMouseenterEvent(item),
908
+ onMouseleave: dateMouseleaveEvent
909
+ }, [
910
+ h('div', {
911
+ class: 'vxe-calendar--view-item-inner'
912
+ }, renderDateLabel(item, item.label))
913
+ ]);
833
914
  }));
834
- })
915
+ }))
835
916
  ])
836
917
  ];
837
918
  };
@@ -844,38 +925,70 @@ export default defineVxeComponent({
844
925
  const dateListValue = computeDateListValue.value;
845
926
  const matchFormat = 'yyyyMMdd';
846
927
  return [
847
- h('table', {
848
- class: `vxe-calendar--date-${datePanelType}-view`,
849
- cellspacing: 0,
850
- cellpadding: 0,
851
- border: 0
928
+ h('div', {
929
+ class: ['vxe-calendar--view-wrapper', `type--${datePanelType}`]
852
930
  }, [
853
- h('tr', weekHeaders.map((item) => {
854
- return h('td', {
855
- class: 'vxe-calendar--view-th'
856
- }, item.label);
857
- })),
858
- ...weekDates.map((rows) => {
931
+ h('div', {
932
+ class: 'vxe-calendar--view-header',
933
+ style: {
934
+ height: `${100 / (weekDates.length + 1)}%`
935
+ }
936
+ }, [
937
+ h('div', {
938
+ class: 'vxe-calendar--view-row'
939
+ }, weekHeaders.map((item, rIndex) => {
940
+ return h('div', {
941
+ class: 'vxe-calendar--view-item',
942
+ style: {
943
+ width: `${rIndex ? 13 : 9}%`
944
+ }
945
+ }, [
946
+ h('div', {
947
+ class: 'vxe-calendar--view-item-inner'
948
+ }, [
949
+ h('div', {
950
+ class: 'vxe-calendar--view-item-label'
951
+ }, item.label)
952
+ ])
953
+ ]);
954
+ }))
955
+ ]),
956
+ h('div', {
957
+ class: 'vxe-calendar--view-body'
958
+ }, weekDates.map((rows) => {
859
959
  const isSelected = multiple ? rows.some((item) => dateListValue.some(val => XEUtils.isDateSame(val, item.date, matchFormat))) : rows.some((item) => XEUtils.isDateSame(dateValue, item.date, matchFormat));
860
960
  const isHover = rows.some((item) => XEUtils.isDateSame(datePanelValue, item.date, matchFormat));
861
- return h('tr', rows.map((item) => {
862
- return h('td', {
863
- class: ['vxe-calendar--view-td', {
961
+ const isNowWeek = rows.some(item => item.isNow);
962
+ return h('div', {
963
+ class: 'vxe-calendar--view-row',
964
+ style: {
965
+ height: `${100 / weekDates.length}%`
966
+ }
967
+ }, rows.map((item, rIndex) => {
968
+ return h('div', {
969
+ class: ['vxe-calendar--view-item', {
864
970
  'is--prev': item.isPrev,
865
971
  'is--current': item.isCurrent,
866
- 'is--now': item.isNow,
972
+ 'is--now': rIndex ? item.isNow : isNowWeek,
867
973
  'is--next': item.isNext,
868
974
  'is--disabled': isDateDisabled(item),
869
975
  'is--selected': isSelected,
870
976
  'is--hover': isHover
871
977
  }],
872
- style: Object.assign({}, XEUtils.isFunction(cellStyle) ? cellStyle({ type: datePanelType, viewType: datePanelType, date: item.date, $calendar: $xeCalendar }) : cellStyle),
873
- // event
874
- onClick: () => dateSelectEvent(item),
875
- onMouseenter: () => dateMouseenterEvent(item)
876
- }, renderDateLabel(item, item.label));
978
+ style: Object.assign({}, XEUtils.isFunction(cellStyle) ? cellStyle({ type: datePanelType, viewType: datePanelType, date: item.date, $calendar: $xeCalendar }) : cellStyle, {
979
+ width: `${rIndex ? 13 : 9}%`
980
+ }),
981
+ onClick: (evnt) => dateClickEvent(evnt, item),
982
+ onContextmenu: (evnt) => datContextmenuEvent(evnt, item),
983
+ onMouseenter: () => dateMouseenterEvent(item),
984
+ onMouseleave: dateMouseleaveEvent
985
+ }, [
986
+ h('div', {
987
+ class: 'vxe-calendar--view-item-inner'
988
+ }, renderDateLabel(item, item.label))
989
+ ]);
877
990
  }));
878
- })
991
+ }))
879
992
  ])
880
993
  ];
881
994
  };
@@ -887,28 +1000,41 @@ export default defineVxeComponent({
887
1000
  const dateListValue = computeDateListValue.value;
888
1001
  const matchFormat = 'yyyyMM';
889
1002
  return [
890
- h('table', {
891
- class: `vxe-calendar--date-${datePanelType}-view`,
892
- cellspacing: 0,
893
- cellpadding: 0,
894
- border: 0
1003
+ h('div', {
1004
+ class: ['vxe-calendar--view-wrapper', `type--${datePanelType}`]
895
1005
  }, [
896
- h('tbody', monthDatas.map((rows) => {
897
- return h('tr', rows.map((item) => {
898
- return h('td', {
899
- class: ['vxe-calendar--view-td', {
1006
+ h('div', {
1007
+ class: 'vxe-calendar--view-body'
1008
+ }, monthDatas.map((rows) => {
1009
+ return h('div', {
1010
+ class: 'vxe-calendar--view-row',
1011
+ style: {
1012
+ height: `${100 / monthDatas.length}%`
1013
+ }
1014
+ }, rows.map((item) => {
1015
+ const isSelected = multiple ? dateListValue.some(val => XEUtils.isDateSame(val, item.date, matchFormat)) : XEUtils.isDateSame(dateValue, item.date, matchFormat);
1016
+ return h('div', {
1017
+ class: ['vxe-calendar--view-item', {
900
1018
  'is--prev': item.isPrev,
901
1019
  'is--current': item.isCurrent,
902
1020
  'is--now': item.isNow,
903
1021
  'is--next': item.isNext,
904
1022
  'is--disabled': isDateDisabled(item),
905
- 'is--selected': multiple ? dateListValue.some(val => XEUtils.isDateSame(val, item.date, matchFormat)) : XEUtils.isDateSame(dateValue, item.date, matchFormat),
1023
+ 'is--selected': isSelected,
906
1024
  'is--hover': XEUtils.isDateSame(datePanelValue, item.date, matchFormat)
907
1025
  }],
908
- style: Object.assign({}, XEUtils.isFunction(cellStyle) ? cellStyle({ type: datePanelType, viewType: datePanelType, date: item.date, $calendar: $xeCalendar }) : cellStyle),
909
- onClick: () => dateSelectEvent(item),
910
- onMouseenter: () => dateMouseenterEvent(item)
911
- }, renderDateLabel(item, getI18n(`vxe.input.date.months.m${item.month}`)));
1026
+ style: Object.assign({}, XEUtils.isFunction(cellStyle) ? cellStyle({ type: datePanelType, viewType: datePanelType, date: item.date, $calendar: $xeCalendar }) : cellStyle, {
1027
+ width: `${100 / rows.length}%`
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, getI18n(`vxe.input.date.months.m${item.month}`)))
1037
+ ]);
912
1038
  }));
913
1039
  }))
914
1040
  ])
@@ -922,28 +1048,41 @@ export default defineVxeComponent({
922
1048
  const dateListValue = computeDateListValue.value;
923
1049
  const matchFormat = 'yyyyq';
924
1050
  return [
925
- h('table', {
926
- class: `vxe-calendar--date-${datePanelType}-view`,
927
- cellspacing: 0,
928
- cellpadding: 0,
929
- border: 0
1051
+ h('div', {
1052
+ class: ['vxe-calendar--view-wrapper', `type--${datePanelType}`]
930
1053
  }, [
931
- h('tbody', quarterDatas.map((rows) => {
932
- return h('tr', rows.map((item) => {
933
- return h('td', {
934
- class: ['vxe-calendar--view-td', {
1054
+ h('div', {
1055
+ class: 'vxe-calendar--view-body'
1056
+ }, quarterDatas.map((rows) => {
1057
+ return h('div', {
1058
+ class: 'vxe-calendar--view-row',
1059
+ style: {
1060
+ height: `${100 / quarterDatas.length}%`
1061
+ }
1062
+ }, rows.map((item) => {
1063
+ const isSelected = multiple ? dateListValue.some(val => XEUtils.isDateSame(val, item.date, matchFormat)) : XEUtils.isDateSame(dateValue, item.date, matchFormat);
1064
+ return h('div', {
1065
+ class: ['vxe-calendar--view-item', {
935
1066
  'is--prev': item.isPrev,
936
1067
  'is--current': item.isCurrent,
937
1068
  'is--now': item.isNow,
938
1069
  'is--next': item.isNext,
939
1070
  'is--disabled': isDateDisabled(item),
940
- 'is--selected': multiple ? dateListValue.some(val => XEUtils.isDateSame(val, item.date, matchFormat)) : XEUtils.isDateSame(dateValue, item.date, matchFormat),
1071
+ 'is--selected': isSelected,
941
1072
  'is--hover': XEUtils.isDateSame(datePanelValue, item.date, matchFormat)
942
1073
  }],
943
- style: Object.assign({}, XEUtils.isFunction(cellStyle) ? cellStyle({ type: datePanelType, viewType: datePanelType, date: item.date, $calendar: $xeCalendar }) : cellStyle),
944
- onClick: () => dateSelectEvent(item),
945
- onMouseenter: () => dateMouseenterEvent(item)
946
- }, renderDateLabel(item, getI18n(`vxe.input.date.quarters.q${item.quarter}`)));
1074
+ style: Object.assign({}, XEUtils.isFunction(cellStyle) ? cellStyle({ type: datePanelType, viewType: datePanelType, date: item.date, $calendar: $xeCalendar }) : cellStyle, {
1075
+ width: `${100 / rows.length}%`
1076
+ }),
1077
+ onClick: (evnt) => dateClickEvent(evnt, item),
1078
+ onContextmenu: (evnt) => datContextmenuEvent(evnt, item),
1079
+ onMouseenter: () => dateMouseenterEvent(item),
1080
+ onMouseleave: dateMouseleaveEvent
1081
+ }, [
1082
+ h('div', {
1083
+ class: 'vxe-calendar--view-item-inner'
1084
+ }, renderDateLabel(item, getI18n(`vxe.input.date.quarters.q${item.quarter}`)))
1085
+ ]);
947
1086
  }));
948
1087
  }))
949
1088
  ])
@@ -957,28 +1096,41 @@ export default defineVxeComponent({
957
1096
  const dateListValue = computeDateListValue.value;
958
1097
  const matchFormat = 'yyyy';
959
1098
  return [
960
- h('table', {
961
- class: `vxe-calendar--date-${datePanelType}-view`,
962
- cellspacing: 0,
963
- cellpadding: 0,
964
- border: 0
1099
+ h('div', {
1100
+ class: ['vxe-calendar--view-wrapper', `type--${datePanelType}`]
965
1101
  }, [
966
- h('tbody', yearDatas.map((rows) => {
967
- return h('tr', rows.map((item) => {
968
- return h('td', {
969
- class: ['vxe-calendar--view-td', {
1102
+ h('div', {
1103
+ class: 'vxe-calendar--view-body'
1104
+ }, yearDatas.map((rows) => {
1105
+ return h('div', {
1106
+ class: 'vxe-calendar--view-row',
1107
+ style: {
1108
+ height: `${100 / yearDatas.length}%`
1109
+ }
1110
+ }, rows.map((item) => {
1111
+ const isSelected = multiple ? dateListValue.some(val => XEUtils.isDateSame(val, item.date, matchFormat)) : XEUtils.isDateSame(dateValue, item.date, matchFormat);
1112
+ return h('div', {
1113
+ class: ['vxe-calendar--view-item', {
970
1114
  'is--prev': item.isPrev,
971
1115
  'is--current': item.isCurrent,
972
1116
  'is--now': item.isNow,
973
1117
  'is--next': item.isNext,
974
1118
  'is--disabled': isDateDisabled(item),
975
- 'is--selected': multiple ? dateListValue.some(val => XEUtils.isDateSame(val, item.date, matchFormat)) : XEUtils.isDateSame(dateValue, item.date, matchFormat),
1119
+ 'is--selected': isSelected,
976
1120
  'is--hover': XEUtils.isDateSame(datePanelValue, item.date, matchFormat)
977
1121
  }],
978
- style: Object.assign({}, XEUtils.isFunction(cellStyle) ? cellStyle({ type: datePanelType, viewType: datePanelType, date: item.date, $calendar: $xeCalendar }) : cellStyle),
979
- onClick: () => dateSelectEvent(item),
980
- onMouseenter: () => dateMouseenterEvent(item)
981
- }, renderDateLabel(item, item.year));
1122
+ style: Object.assign({}, XEUtils.isFunction(cellStyle) ? cellStyle({ type: datePanelType, viewType: datePanelType, date: item.date, $calendar: $xeCalendar }) : cellStyle, {
1123
+ width: `${100 / rows.length}%`
1124
+ }),
1125
+ onClick: (evnt) => dateClickEvent(evnt, item),
1126
+ onContextmenu: (evnt) => datContextmenuEvent(evnt, item),
1127
+ onMouseenter: () => dateMouseenterEvent(item),
1128
+ onMouseleave: dateMouseleaveEvent
1129
+ }, [
1130
+ h('div', {
1131
+ class: 'vxe-calendar--view-item-inner'
1132
+ }, renderDateLabel(item, item.year))
1133
+ ]);
982
1134
  }));
983
1135
  }))
984
1136
  ])
@@ -1119,6 +1271,11 @@ export default defineVxeComponent({
1119
1271
  }
1120
1272
  });
1121
1273
  onMounted(() => {
1274
+ const { menuConfig } = props;
1275
+ const VxeUIContextMenu = VxeUI.getComponent('VxeContextMenu');
1276
+ if (menuConfig && !VxeUIContextMenu) {
1277
+ errLog('vxe.error.reqComp', ['vxe-context-menu']);
1278
+ }
1122
1279
  dateOpenPanel();
1123
1280
  });
1124
1281
  initValue();