time-picker.vue 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. <script setup lang="ts">
  2. import { ref, watch } from "vue";
  3. defineOptions({
  4. name: "TimePicker"
  5. });
  6. const size = ref("default");
  7. const dynamicSize = ref();
  8. /** 时间选择器 */
  9. const value = ref("");
  10. const value1 = ref("");
  11. const value3 = ref();
  12. const value2 = ref(new Date(2016, 9, 10, 18, 30));
  13. const makeRange = (start: number, end: number) => {
  14. const result: number[] = [];
  15. for (let i = start; i <= end; i++) {
  16. result.push(i);
  17. }
  18. return result;
  19. };
  20. const disabledHours = () => {
  21. return makeRange(0, 16).concat(makeRange(19, 23));
  22. };
  23. const disabledMinutes = (hour: number) => {
  24. if (hour === 17) {
  25. return makeRange(0, 29);
  26. }
  27. if (hour === 18) {
  28. return makeRange(31, 59);
  29. }
  30. };
  31. const disabledSeconds = (hour: number, minute: number) => {
  32. if (hour === 18 && minute === 30) {
  33. return makeRange(1, 59);
  34. }
  35. };
  36. watch(size, val =>
  37. val === "disabled"
  38. ? (dynamicSize.value = "default")
  39. : (dynamicSize.value = size.value)
  40. );
  41. /** 时间选择 */
  42. const value4 = ref("");
  43. const value5 = ref("");
  44. const startTime = ref("");
  45. const endTime = ref("");
  46. </script>
  47. <template>
  48. <div>
  49. <el-card shadow="never">
  50. <template #header>
  51. <div class="card-header">
  52. <el-space wrap :size="40">
  53. <el-link
  54. v-tippy="{
  55. content: '点击查看详细文档'
  56. }"
  57. href="https://element-plus.org/zh-CN/component/time-picker.html"
  58. target="_blank"
  59. style="font-size: 16px; font-weight: 800"
  60. >
  61. 时间选择器
  62. </el-link>
  63. <el-radio-group v-model="size">
  64. <el-radio value="large">大尺寸</el-radio>
  65. <el-radio value="default">默认尺寸</el-radio>
  66. <el-radio value="small">小尺寸</el-radio>
  67. <el-radio value="disabled">禁用</el-radio>
  68. </el-radio-group>
  69. </el-space>
  70. </div>
  71. <el-link
  72. class="mt-2"
  73. href="https://github.com/pure-admin/vue-pure-admin/blob/main/src/views/components/time-picker.vue"
  74. target="_blank"
  75. >
  76. 代码位置 src/views/components/time-picker.vue
  77. </el-link>
  78. </template>
  79. <div class="mb-2">日期和时间点</div>
  80. <el-space wrap>
  81. <p class="text-[15px]">鼠标滚轮进行选择</p>
  82. <el-time-picker
  83. v-model="value"
  84. placeholder="请选择时间"
  85. class="w-[140px]!"
  86. :size="dynamicSize"
  87. :disabled="size === 'disabled'"
  88. />
  89. <p class="text-[15px]">箭头进行选择</p>
  90. <el-time-picker
  91. v-model="value1"
  92. arrow-control
  93. placeholder="请选择时间"
  94. class="w-[140px]!"
  95. :size="dynamicSize"
  96. :disabled="size === 'disabled'"
  97. />
  98. </el-space>
  99. <el-divider />
  100. <div class="mb-2">限制时间选择范围</div>
  101. <el-time-picker
  102. v-model="value2"
  103. class="w-[140px]!"
  104. :disabled-hours="disabledHours"
  105. :disabled-minutes="disabledMinutes"
  106. :disabled-seconds="disabledSeconds"
  107. placeholder="Arbitrary time"
  108. :size="dynamicSize"
  109. :disabled="size === 'disabled'"
  110. />
  111. <el-divider />
  112. <div class="mb-2">任意时间范围</div>
  113. <el-time-picker
  114. v-model="value3"
  115. class="w-[220px]!"
  116. is-range
  117. range-separator="至"
  118. start-placeholder="开始时间"
  119. end-placeholder="结束时间"
  120. :size="dynamicSize"
  121. :disabled="size === 'disabled'"
  122. />
  123. </el-card>
  124. <el-card shadow="never" class="mt-4">
  125. <template #header>
  126. <div class="card-header">
  127. <el-link
  128. v-tippy="{
  129. content: '点击查看详细文档'
  130. }"
  131. href="https://element-plus.org/zh-CN/component/time-select.html"
  132. target="_blank"
  133. style="font-size: 16px; font-weight: 800"
  134. >
  135. 时间选择
  136. </el-link>
  137. </div>
  138. </template>
  139. <div class="mb-2">固定时间点</div>
  140. <el-time-select
  141. v-model="value4"
  142. placeholder="请选择时间"
  143. class="w-[140px]!"
  144. start="08:30"
  145. step="00:15"
  146. end="18:30"
  147. :size="dynamicSize"
  148. :disabled="size === 'disabled'"
  149. />
  150. <div class="mb-2 mt-4">时间格式</div>
  151. <el-time-select
  152. v-model="value5"
  153. placeholder="请选择时间"
  154. class="w-[140px]!"
  155. start="00:00"
  156. step="00:30"
  157. end="23:59"
  158. format="hh:mm A"
  159. :size="dynamicSize"
  160. :disabled="size === 'disabled'"
  161. />
  162. <div class="mb-2 mt-4">固定时间范围</div>
  163. <el-space wrap>
  164. <el-time-select
  165. v-model="startTime"
  166. placeholder="开始时间"
  167. class="w-[140px]!"
  168. :max-time="endTime"
  169. start="08:30"
  170. step="00:15"
  171. end="18:30"
  172. :size="dynamicSize"
  173. :disabled="size === 'disabled'"
  174. />
  175. <el-time-select
  176. v-model="endTime"
  177. placeholder="结束时间"
  178. class="w-[140px]!"
  179. :min-time="startTime"
  180. start="08:30"
  181. step="00:15"
  182. end="18:30"
  183. :size="dynamicSize"
  184. :disabled="size === 'disabled'"
  185. />
  186. </el-space>
  187. </el-card>
  188. </div>
  189. </template>