calendar.uvue 4.7 KB

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