Header.js 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
  2. import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
  3. import { createVNode as _createVNode } from "vue";
  4. import Select from '../select';
  5. import { Group, Button } from '../radio';
  6. import { defineComponent, ref } from 'vue';
  7. var YearSelectOffset = 10;
  8. var YearSelectTotal = 20;
  9. function YearSelect(props) {
  10. var fullscreen = props.fullscreen,
  11. validRange = props.validRange,
  12. generateConfig = props.generateConfig,
  13. locale = props.locale,
  14. prefixCls = props.prefixCls,
  15. value = props.value,
  16. _onChange = props.onChange,
  17. divRef = props.divRef;
  18. var year = generateConfig.getYear(value || generateConfig.getNow());
  19. var start = year - YearSelectOffset;
  20. var end = start + YearSelectTotal;
  21. if (validRange) {
  22. start = generateConfig.getYear(validRange[0]);
  23. end = generateConfig.getYear(validRange[1]) + 1;
  24. }
  25. var suffix = locale && locale.year === '年' ? '年' : '';
  26. var options = [];
  27. for (var index = start; index < end; index++) {
  28. options.push({
  29. label: "".concat(index).concat(suffix),
  30. value: index
  31. });
  32. }
  33. return _createVNode(Select, {
  34. "size": fullscreen ? undefined : 'small',
  35. "options": options,
  36. "value": year,
  37. "class": "".concat(prefixCls, "-year-select"),
  38. "onChange": function onChange(numYear) {
  39. var newDate = generateConfig.setYear(value, numYear);
  40. if (validRange) {
  41. var _validRange = _slicedToArray(validRange, 2),
  42. startDate = _validRange[0],
  43. endDate = _validRange[1];
  44. var newYear = generateConfig.getYear(newDate);
  45. var newMonth = generateConfig.getMonth(newDate);
  46. if (newYear === generateConfig.getYear(endDate) && newMonth > generateConfig.getMonth(endDate)) {
  47. newDate = generateConfig.setMonth(newDate, generateConfig.getMonth(endDate));
  48. }
  49. if (newYear === generateConfig.getYear(startDate) && newMonth < generateConfig.getMonth(startDate)) {
  50. newDate = generateConfig.setMonth(newDate, generateConfig.getMonth(startDate));
  51. }
  52. }
  53. _onChange(newDate);
  54. },
  55. "getPopupContainer": function getPopupContainer() {
  56. return divRef.value;
  57. }
  58. }, null);
  59. }
  60. YearSelect.inheritAttrs = false;
  61. function MonthSelect(props) {
  62. var prefixCls = props.prefixCls,
  63. fullscreen = props.fullscreen,
  64. validRange = props.validRange,
  65. value = props.value,
  66. generateConfig = props.generateConfig,
  67. locale = props.locale,
  68. _onChange2 = props.onChange,
  69. divRef = props.divRef;
  70. var month = generateConfig.getMonth(value || generateConfig.getNow());
  71. var start = 0;
  72. var end = 11;
  73. if (validRange) {
  74. var _validRange2 = _slicedToArray(validRange, 2),
  75. rangeStart = _validRange2[0],
  76. rangeEnd = _validRange2[1];
  77. var currentYear = generateConfig.getYear(value);
  78. if (generateConfig.getYear(rangeEnd) === currentYear) {
  79. end = generateConfig.getMonth(rangeEnd);
  80. }
  81. if (generateConfig.getYear(rangeStart) === currentYear) {
  82. start = generateConfig.getMonth(rangeStart);
  83. }
  84. }
  85. var months = locale.shortMonths || generateConfig.locale.getShortMonths(locale.locale);
  86. var options = [];
  87. for (var index = start; index <= end; index += 1) {
  88. options.push({
  89. label: months[index],
  90. value: index
  91. });
  92. }
  93. return _createVNode(Select, {
  94. "size": fullscreen ? undefined : 'small',
  95. "class": "".concat(prefixCls, "-month-select"),
  96. "value": month,
  97. "options": options,
  98. "onChange": function onChange(newMonth) {
  99. _onChange2(generateConfig.setMonth(value, newMonth));
  100. },
  101. "getPopupContainer": function getPopupContainer() {
  102. return divRef.value;
  103. }
  104. }, null);
  105. }
  106. MonthSelect.inheritAttrs = false;
  107. function ModeSwitch(props) {
  108. var prefixCls = props.prefixCls,
  109. locale = props.locale,
  110. mode = props.mode,
  111. fullscreen = props.fullscreen,
  112. onModeChange = props.onModeChange;
  113. return _createVNode(Group, {
  114. "onChange": function onChange(_ref) {
  115. var value = _ref.target.value;
  116. onModeChange(value);
  117. },
  118. "value": mode,
  119. "size": fullscreen ? undefined : 'small',
  120. "class": "".concat(prefixCls, "-mode-switch")
  121. }, {
  122. default: function _default() {
  123. return [_createVNode(Button, {
  124. "value": "month"
  125. }, {
  126. default: function _default() {
  127. return [locale.month];
  128. }
  129. }), _createVNode(Button, {
  130. "value": "year"
  131. }, {
  132. default: function _default() {
  133. return [locale.year];
  134. }
  135. })];
  136. }
  137. });
  138. }
  139. ModeSwitch.inheritAttrs = false;
  140. export default defineComponent({
  141. name: 'CalendarHeader',
  142. inheritAttrs: false,
  143. props: ['mode', 'prefixCls', 'value', 'validRange', 'generateConfig', 'locale', 'mode', 'fullscreen'],
  144. setup: function setup(_props, _ref2) {
  145. var attrs = _ref2.attrs;
  146. var divRef = ref(null);
  147. return function () {
  148. var props = _objectSpread(_objectSpread({}, _props), attrs);
  149. var prefixCls = props.prefixCls,
  150. fullscreen = props.fullscreen,
  151. mode = props.mode,
  152. onChange = props.onChange,
  153. onModeChange = props.onModeChange;
  154. var sharedProps = _objectSpread(_objectSpread({}, props), {}, {
  155. onChange: onChange,
  156. fullscreen: fullscreen,
  157. divRef: divRef
  158. });
  159. return _createVNode("div", {
  160. "class": "".concat(prefixCls, "-header"),
  161. "ref": divRef
  162. }, [_createVNode(YearSelect, sharedProps, null), mode === 'month' && _createVNode(MonthSelect, sharedProps, null), _createVNode(ModeSwitch, _objectSpread(_objectSpread({}, sharedProps), {}, {
  163. "onModeChange": onModeChange
  164. }), null)]);
  165. };
  166. }
  167. });