draggable.uvue 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. <template>
  2. <cl-page>
  3. <view class="p-3 overflow-visible">
  4. <demo-item :label="t('单列排序')">
  5. <cl-draggable v-model="list">
  6. <template #item="{ item, index }">
  7. <view
  8. class="flex flex-row items-center p-3 bg-surface-100 rounded-lg mb-2 dark:!bg-surface-700"
  9. :class="{
  10. 'opacity-50': item['disabled']
  11. }"
  12. >
  13. <cl-text>{{ (item as UTSJSONObject).label }}</cl-text>
  14. </view>
  15. </template>
  16. </cl-draggable>
  17. </demo-item>
  18. <demo-item :label="t('结合列表使用')">
  19. <cl-list border>
  20. <cl-draggable v-model="list2">
  21. <template #item="{ item, index, dragging, dragIndex }">
  22. <cl-list-item
  23. icon="chat-thread-line"
  24. :label="(item as UTSJSONObject).label"
  25. arrow
  26. :pt="{
  27. inner: {
  28. className:
  29. dragging && dragIndex == index ? '!bg-surface-100' : ''
  30. }
  31. }"
  32. ></cl-list-item>
  33. </template>
  34. </cl-draggable>
  35. </cl-list>
  36. </demo-item>
  37. <demo-item :label="t('多列排序')">
  38. <cl-draggable v-model="list3" :columns="4">
  39. <template #item="{ item, index }">
  40. <view
  41. class="flex flex-row items-center justify-center p-3 bg-surface-100 rounded-lg m-1 dark:!bg-surface-700"
  42. :class="{
  43. 'opacity-50': item['disabled']
  44. }"
  45. >
  46. <cl-text>{{ (item as UTSJSONObject).label }}</cl-text>
  47. </view>
  48. </template>
  49. </cl-draggable>
  50. </demo-item>
  51. <demo-item :label="t('结合图片使用')">
  52. <cl-draggable v-model="list4" :columns="4">
  53. <template #item="{ item, index }">
  54. <view class="p-[2px]">
  55. <cl-image
  56. :src="(item as UTSJSONObject).url"
  57. mode="widthFix"
  58. :pt="{
  59. className: '!w-full'
  60. }"
  61. preview
  62. ></cl-image>
  63. </view>
  64. </template>
  65. </cl-draggable>
  66. </demo-item>
  67. </view>
  68. </cl-page>
  69. </template>
  70. <script lang="ts" setup>
  71. import { t } from "@/locale";
  72. import DemoItem from "../components/item.uvue";
  73. import { ref } from "vue";
  74. const list = ref<UTSJSONObject[]>([
  75. {
  76. label: "明月几时有,把酒问青天"
  77. },
  78. {
  79. label: "不知天上宫阙,今夕是何年",
  80. disabled: true
  81. },
  82. {
  83. label: "我欲乘风归去,又恐琼楼玉宇"
  84. },
  85. {
  86. label: "高处不胜寒,起舞弄清影"
  87. },
  88. {
  89. label: "何似在人间"
  90. }
  91. ]);
  92. const list2 = ref<UTSJSONObject[]>([
  93. {
  94. label: "明月几时有,把酒问青天"
  95. },
  96. {
  97. label: "不知天上宫阙,今夕是何年"
  98. },
  99. {
  100. label: "我欲乘风归去,又恐琼楼玉宇"
  101. },
  102. {
  103. label: "高处不胜寒,起舞弄清影"
  104. },
  105. {
  106. label: "何似在人间"
  107. }
  108. ]);
  109. const list3 = ref<UTSJSONObject[]>([
  110. {
  111. label: "项目1"
  112. },
  113. {
  114. label: "项目2"
  115. },
  116. {
  117. label: "项目3"
  118. },
  119. {
  120. label: "项目4"
  121. },
  122. {
  123. label: "项目5"
  124. },
  125. {
  126. label: "项目6"
  127. },
  128. {
  129. label: "项目7"
  130. },
  131. {
  132. label: "项目8",
  133. disabled: true
  134. },
  135. {
  136. label: "项目9"
  137. },
  138. {
  139. label: "项目10"
  140. },
  141. {
  142. label: "项目11"
  143. },
  144. {
  145. label: "项目12"
  146. }
  147. ]);
  148. const list4 = ref<UTSJSONObject[]>([
  149. {
  150. url: "https://unix.cool-js.com/images/demo/1.jpg"
  151. },
  152. {
  153. url: "https://unix.cool-js.com/images/demo/2.jpg"
  154. },
  155. {
  156. url: "https://unix.cool-js.com/images/demo/3.jpg"
  157. },
  158. {
  159. url: "https://unix.cool-js.com/images/demo/4.jpg"
  160. },
  161. {
  162. url: "https://unix.cool-js.com/images/demo/5.jpg"
  163. },
  164. {
  165. url: "https://unix.cool-js.com/images/demo/6.jpg"
  166. },
  167. {
  168. url: "https://unix.cool-js.com/images/demo/7.jpg"
  169. }
  170. ]);
  171. </script>