calendar.uvue 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. <template>
  2. <cl-page>
  3. <view class="p-3">
  4. <demo-item :label="t('选择器')">
  5. <cl-calendar-select v-model="date"></cl-calendar-select>
  6. </demo-item>
  7. <demo-item :label="t('多选')">
  8. <cl-calendar-select v-model:date="dateArr" mode="multiple"></cl-calendar-select>
  9. </demo-item>
  10. <demo-item :label="t('范围选')">
  11. <cl-calendar-select v-model:date="dateRange" mode="range"></cl-calendar-select>
  12. </demo-item>
  13. <demo-item :label="t('禁用部分日期')">
  14. <cl-calendar-select v-model="date" :date-config="dateConfig"></cl-calendar-select>
  15. </demo-item>
  16. <!-- <demo-item :label="t('日历长列表')">
  17. <cl-button>{{ t("打开日历长列表") }}</cl-button>
  18. </demo-item> -->
  19. <demo-item :label="t('日历面板')">
  20. <cl-calendar
  21. v-model:date="dateRange2"
  22. mode="range"
  23. :month="10"
  24. :show-header="isShowHeader"
  25. :show-weeks="isShowWeeks"
  26. :show-other-month="isShowOtherMonth"
  27. :date-config="dateConfig2"
  28. @change="onChange"
  29. ></cl-calendar>
  30. <cl-list
  31. border
  32. :pt="{
  33. className: 'mt-5'
  34. }"
  35. >
  36. <cl-list-item :label="t('自定义文案和颜色')">
  37. <cl-switch v-model="isCustomDateConfig"></cl-switch>
  38. </cl-list-item>
  39. <cl-list-item :label="t('显示头')">
  40. <cl-switch v-model="isShowHeader"></cl-switch>
  41. </cl-list-item>
  42. <cl-list-item :label="t('显示星期')">
  43. <cl-switch v-model="isShowWeeks"></cl-switch>
  44. </cl-list-item>
  45. <cl-list-item :label="t('显示其他月份')">
  46. <cl-switch v-model="isShowOtherMonth"></cl-switch>
  47. </cl-list-item>
  48. </cl-list>
  49. </demo-item>
  50. </view>
  51. </cl-page>
  52. </template>
  53. <script lang="ts" setup>
  54. import { computed, ref } from "vue";
  55. import { t } from "@/locale";
  56. import DemoItem from "../components/item.uvue";
  57. import { dayUts, first, last } from "@/cool";
  58. import type { ClCalendarDateConfig } from "@/uni_modules/cool-ui";
  59. const date = ref<string | null>(dayUts().format("YYYY-MM-DD"));
  60. const dateArr = ref<string[]>([
  61. dayUts().format("YYYY-MM-DD"),
  62. dayUts().add(1, "day").format("YYYY-MM-DD")
  63. ]);
  64. const dateRange = ref<string[]>([
  65. dayUts().format("YYYY-MM-DD"),
  66. dayUts().add(10, "day").format("YYYY-MM-DD")
  67. ]);
  68. const dateConfig = ref<ClCalendarDateConfig[]>([
  69. {
  70. date: dayUts().add(1, "day").format("YYYY-MM-DD"),
  71. disabled: true
  72. },
  73. {
  74. date: dayUts().add(2, "day").format("YYYY-MM-DD"),
  75. disabled: true
  76. },
  77. {
  78. date: dayUts().add(3, "day").format("YYYY-MM-DD"),
  79. disabled: true
  80. }
  81. ]);
  82. const isShowHeader = ref(true);
  83. const isShowWeeks = ref(true);
  84. const isShowOtherMonth = ref(true);
  85. const isCustomDateConfig = ref(true);
  86. const dateRange2 = ref<string[]>([]);
  87. const dateConfig2 = computed(() => {
  88. const dates = (
  89. isCustomDateConfig.value
  90. ? [
  91. {
  92. date: "2025-10-01",
  93. topText: "国庆节",
  94. bottomText: "¥958",
  95. color: "red"
  96. },
  97. {
  98. date: "2025-10-02",
  99. topText: "休",
  100. bottomText: "¥613",
  101. color: "red"
  102. },
  103. {
  104. date: "2025-10-03",
  105. topText: "休",
  106. bottomText: "¥613",
  107. color: "red"
  108. },
  109. {
  110. date: "2025-10-04",
  111. topText: "休",
  112. bottomText: "¥613",
  113. color: "red"
  114. },
  115. {
  116. date: "2025-10-05",
  117. topText: "休",
  118. bottomText: "¥613",
  119. color: "red"
  120. },
  121. {
  122. date: "2025-10-06",
  123. topText: "休",
  124. bottomText: "¥613",
  125. color: "red"
  126. },
  127. {
  128. date: "2025-10-07",
  129. topText: "休",
  130. bottomText: "¥613",
  131. color: "red"
  132. },
  133. {
  134. date: "2025-10-08",
  135. topText: "休",
  136. bottomText: "¥613",
  137. color: "red"
  138. }
  139. ]
  140. : []
  141. ) as ClCalendarDateConfig[];
  142. const startDate = first(dateRange2.value);
  143. const endDate = last(dateRange2.value);
  144. if (startDate != null) {
  145. const item = dates.find((e) => e.date == startDate);
  146. if (item == null) {
  147. dates.push({
  148. date: startDate,
  149. bottomText: "入住"
  150. } as ClCalendarDateConfig);
  151. } else {
  152. item.bottomText = "入住";
  153. }
  154. }
  155. if (endDate != null && dateRange2.value.length > 1) {
  156. const item = dates.find((e) => e.date == endDate);
  157. if (item == null) {
  158. dates.push({
  159. date: endDate,
  160. bottomText: "离店"
  161. } as ClCalendarDateConfig);
  162. } else {
  163. item.bottomText = "离店";
  164. }
  165. }
  166. return dates;
  167. });
  168. function onChange(date: string[]) {
  169. console.log("日期变化:", date);
  170. }
  171. </script>