select-date.uvue 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. <template>
  2. <cl-page>
  3. <view class="p-3">
  4. <demo-item :label="t('基础用法')">
  5. <cl-select-date v-model="form.date1" type="year"></cl-select-date>
  6. </demo-item>
  7. <demo-item :label="t('精确到秒')">
  8. <cl-select-date v-model="form.date2" type="second"></cl-select-date>
  9. </demo-item>
  10. <demo-item :label="t('固定开始、结束时间')">
  11. <cl-select-date
  12. v-model="form.date3"
  13. start="2025-06-01 10:00:00"
  14. end="2026-06-01 10:00:00"
  15. ></cl-select-date>
  16. </demo-item>
  17. <demo-item :label="t('自定义触发器')">
  18. <view class="flex flex-row">
  19. <cl-button @tap="openSelect4">{{ t("打开选择器") }}</cl-button>
  20. </view>
  21. <cl-select-date
  22. ref="selectRef4"
  23. v-model="form.date4"
  24. type="date"
  25. :show-trigger="false"
  26. ></cl-select-date>
  27. </demo-item>
  28. <demo-item :label="t('自定义')">
  29. <cl-select-date
  30. v-model="form.date5"
  31. :type="type"
  32. :label-format="labelFormat"
  33. :disabled="isDisabled"
  34. ></cl-select-date>
  35. <cl-list
  36. border
  37. :pt="{
  38. className: 'mt-3'
  39. }"
  40. >
  41. <cl-list-item :label="t('年')">
  42. <cl-switch v-model="isYear"></cl-switch>
  43. </cl-list-item>
  44. <cl-list-item :label="t('年-月')">
  45. <cl-switch v-model="isMonth"></cl-switch>
  46. </cl-list-item>
  47. <cl-list-item :label="t('年-月-日')">
  48. <cl-switch v-model="isDate"></cl-switch>
  49. </cl-list-item>
  50. <cl-list-item :label="t('年-月-日 时')">
  51. <cl-switch v-model="isHour"></cl-switch>
  52. </cl-list-item>
  53. <cl-list-item :label="t('年-月-日 时:分')">
  54. <cl-switch v-model="isMinute"></cl-switch>
  55. </cl-list-item>
  56. <cl-list-item :label="t('年-月-日 时:分:秒')">
  57. <cl-switch v-model="isSecond"></cl-switch>
  58. </cl-list-item>
  59. <cl-list-item :label="t('标签格式化')">
  60. <cl-switch v-model="isFormat"></cl-switch>
  61. </cl-list-item>
  62. <cl-list-item :label="t('禁用')">
  63. <cl-switch v-model="isDisabled"></cl-switch>
  64. </cl-list-item>
  65. </cl-list>
  66. </demo-item>
  67. </view>
  68. </cl-page>
  69. </template>
  70. <script lang="ts" setup>
  71. import { computed, reactive, ref } from "vue";
  72. import DemoItem from "../components/item.uvue";
  73. import { t } from "@/locale";
  74. import { useUi } from "@/uni_modules/cool-ui";
  75. const ui = useUi();
  76. type Form = {
  77. date1: string;
  78. date2: string;
  79. date3: string;
  80. date4: string;
  81. date5: string;
  82. };
  83. const form = reactive<Form>({
  84. date1: "",
  85. date2: "",
  86. date3: "",
  87. date4: "",
  88. date5: ""
  89. });
  90. const isDisabled = ref(false);
  91. const isYear = ref(false);
  92. const isMonth = ref(false);
  93. const isDate = ref(true);
  94. const isHour = ref(false);
  95. const isMinute = ref(false);
  96. const isSecond = ref(false);
  97. const isFormat = ref(false);
  98. const type = computed(() => {
  99. if (isSecond.value) {
  100. return "second";
  101. }
  102. if (isMinute.value) {
  103. return "minute";
  104. }
  105. if (isHour.value) {
  106. return "hour";
  107. }
  108. if (isDate.value) {
  109. return "date";
  110. }
  111. if (isMonth.value) {
  112. return "month";
  113. }
  114. if (isYear.value) {
  115. return "year";
  116. }
  117. return "second";
  118. });
  119. const labelFormat = computed(() => {
  120. if (isFormat.value) {
  121. if (isSecond.value) {
  122. return "YYYY年MM月DD日 HH时mm分ss秒";
  123. }
  124. if (isMinute.value) {
  125. return "YYYY年MM月DD日 HH时mm分";
  126. }
  127. if (isHour.value) {
  128. return "YYYY年MM月DD日 HH时";
  129. }
  130. if (isDate.value) {
  131. return "YYYY年MM月DD日";
  132. }
  133. if (isMonth.value) {
  134. return "YYYY年MM月";
  135. }
  136. if (isYear.value) {
  137. return "YYYY年";
  138. }
  139. } else {
  140. if (isSecond.value) {
  141. return "YYYY-MM-DD HH:mm:ss";
  142. }
  143. if (isMinute.value) {
  144. return "YYYY-MM-DD HH:mm";
  145. }
  146. if (isHour.value) {
  147. return "YYYY-MM-DD HH";
  148. }
  149. if (isDate.value) {
  150. return "YYYY-MM-DD";
  151. }
  152. if (isMonth.value) {
  153. return "YYYY-MM";
  154. }
  155. if (isYear.value) {
  156. return "YYYY";
  157. }
  158. }
  159. return "YYYY-MM-DD HH:mm:ss";
  160. });
  161. const selectRef4 = ref<ClSelectDateComponentPublicInstance | null>(null);
  162. function openSelect4() {
  163. selectRef4.value!.open((value) => {
  164. ui.showToast({
  165. message: `你选择了:${value}`
  166. });
  167. });
  168. }
  169. </script>