select-date.uvue 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  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-text :pt="{ className: 'mb-3' }">{{ form.date5 }}</cl-text>
  30. <cl-select-date v-model:values="form.date5" type="date" rangeable></cl-select-date>
  31. </demo-item>
  32. <demo-item :label="t('自定义快捷选项')">
  33. <cl-select-date
  34. v-model:values="form.date5"
  35. type="date"
  36. rangeable
  37. :shortcuts="shortcuts"
  38. ></cl-select-date>
  39. </demo-item>
  40. <demo-item :label="t('自定义')">
  41. <cl-select-date
  42. v-model="form.date6"
  43. :type="type"
  44. :label-format="labelFormat"
  45. :disabled="isDisabled"
  46. ></cl-select-date>
  47. <cl-list
  48. border
  49. :pt="{
  50. className: 'mt-3'
  51. }"
  52. >
  53. <cl-list-item label="YYYY">
  54. <cl-switch v-model="isYear"></cl-switch>
  55. </cl-list-item>
  56. <cl-list-item label="YYYY-MM">
  57. <cl-switch v-model="isMonth"></cl-switch>
  58. </cl-list-item>
  59. <cl-list-item
  60. label="YYYY-MM-DD"
  61. :pt="{
  62. label: {
  63. className: 'flex-[2]'
  64. }
  65. }"
  66. >
  67. <cl-switch v-model="isDate"></cl-switch>
  68. </cl-list-item>
  69. <cl-list-item
  70. label="YYYY-MM-DD HH"
  71. :pt="{
  72. label: {
  73. className: 'flex-[2]'
  74. }
  75. }"
  76. >
  77. <cl-switch v-model="isHour"></cl-switch>
  78. </cl-list-item>
  79. <cl-list-item
  80. label="YYYY-MM-DD HH:mm"
  81. :pt="{
  82. label: {
  83. className: 'flex-[2]'
  84. }
  85. }"
  86. >
  87. <cl-switch v-model="isMinute"></cl-switch>
  88. </cl-list-item>
  89. <cl-list-item
  90. label="YYYY-MM-DD HH:mm:ss"
  91. :pt="{
  92. label: {
  93. className: 'flex-[2]'
  94. }
  95. }"
  96. >
  97. <cl-switch v-model="isSecond"></cl-switch>
  98. </cl-list-item>
  99. <cl-list-item :label="t('标签格式化')">
  100. <cl-switch v-model="isFormat"></cl-switch>
  101. </cl-list-item>
  102. <cl-list-item :label="t('禁用')">
  103. <cl-switch v-model="isDisabled"></cl-switch>
  104. </cl-list-item>
  105. </cl-list>
  106. </demo-item>
  107. </view>
  108. </cl-page>
  109. </template>
  110. <script lang="ts" setup>
  111. import { computed, reactive, ref } from "vue";
  112. import DemoItem from "../components/item.uvue";
  113. import { t } from "@/locale";
  114. import { useUi, type ClSelectDateShortcut } from "@/uni_modules/cool-ui";
  115. import { dayUts } from "@/cool";
  116. const ui = useUi();
  117. type Form = {
  118. date1: string;
  119. date2: string;
  120. date3: string;
  121. date4: string;
  122. date5: string[];
  123. date6: string;
  124. };
  125. const form = reactive<Form>({
  126. date1: "",
  127. date2: "",
  128. date3: "",
  129. date4: "",
  130. date5: [],
  131. date6: ""
  132. });
  133. const isDisabled = ref(false);
  134. const isYear = ref(false);
  135. const isMonth = ref(false);
  136. const isDate = ref(true);
  137. const isHour = ref(false);
  138. const isMinute = ref(false);
  139. const isSecond = ref(false);
  140. const isFormat = ref(false);
  141. const type = computed(() => {
  142. if (isSecond.value) {
  143. return "second";
  144. }
  145. if (isMinute.value) {
  146. return "minute";
  147. }
  148. if (isHour.value) {
  149. return "hour";
  150. }
  151. if (isDate.value) {
  152. return "date";
  153. }
  154. if (isMonth.value) {
  155. return "month";
  156. }
  157. if (isYear.value) {
  158. return "year";
  159. }
  160. return "second";
  161. });
  162. const labelFormat = computed(() => {
  163. if (isFormat.value) {
  164. if (isSecond.value) {
  165. return "YYYY年MM月DD日 HH时mm分ss秒";
  166. }
  167. if (isMinute.value) {
  168. return "YYYY年MM月DD日 HH时mm分";
  169. }
  170. if (isHour.value) {
  171. return "YYYY年MM月DD日 HH时";
  172. }
  173. if (isDate.value) {
  174. return "YYYY年MM月DD日";
  175. }
  176. if (isMonth.value) {
  177. return "YYYY年MM月";
  178. }
  179. if (isYear.value) {
  180. return "YYYY年";
  181. }
  182. } else {
  183. if (isSecond.value) {
  184. return "YYYY-MM-DD HH:mm:ss";
  185. }
  186. if (isMinute.value) {
  187. return "YYYY-MM-DD HH:mm";
  188. }
  189. if (isHour.value) {
  190. return "YYYY-MM-DD HH";
  191. }
  192. if (isDate.value) {
  193. return "YYYY-MM-DD";
  194. }
  195. if (isMonth.value) {
  196. return "YYYY-MM";
  197. }
  198. if (isYear.value) {
  199. return "YYYY";
  200. }
  201. }
  202. return "YYYY-MM-DD HH:mm:ss";
  203. });
  204. const selectRef4 = ref<ClSelectDateComponentPublicInstance | null>(null);
  205. function openSelect4() {
  206. selectRef4.value!.open((value) => {
  207. ui.showToast({
  208. message: `你选择了:${value}`
  209. });
  210. });
  211. }
  212. const shortcuts = ref<ClSelectDateShortcut[]>([
  213. {
  214. label: "昨日",
  215. value: [dayUts().subtract(1, "day").format("YYYY-MM-DD"), dayUts().format("YYYY-MM-DD")]
  216. },
  217. {
  218. label: "本周",
  219. value: [
  220. dayUts().startOf("week").format("YYYY-MM-DD"),
  221. dayUts().endOf("week").format("YYYY-MM-DD")
  222. ]
  223. },
  224. {
  225. label: "本月",
  226. value: [
  227. dayUts().startOf("month").format("YYYY-MM-DD"),
  228. dayUts().endOf("month").format("YYYY-MM-DD")
  229. ]
  230. }
  231. ]);
  232. </script>