draggable.uvue 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. <template>
  2. <cl-page>
  3. <view class="p-3">
  4. <demo-item>
  5. <cl-text color="info">
  6. {{ t("长按项即可拖动排序") }}
  7. </cl-text>
  8. </demo-item>
  9. <demo-item :label="t('单列排序')">
  10. <cl-draggable v-model="list">
  11. <template #item="{ item, index }">
  12. <view
  13. class="flex flex-row items-center p-3 bg-surface-100 rounded-lg mb-2 dark:!bg-surface-700"
  14. :class="{
  15. 'opacity-50': item['disabled']
  16. }"
  17. >
  18. <cl-text>{{ (item as UTSJSONObject).label }}</cl-text>
  19. </view>
  20. </template>
  21. </cl-draggable>
  22. </demo-item>
  23. <demo-item :label="t('不需要长按')">
  24. <cl-draggable v-model="list5" :long-press="false">
  25. <template #item="{ item }">
  26. <view
  27. class="flex flex-row items-center p-3 bg-surface-100 rounded-lg mb-2 dark:!bg-surface-700"
  28. >
  29. <cl-text>{{ (item as UTSJSONObject).label }}</cl-text>
  30. </view>
  31. </template>
  32. </cl-draggable>
  33. </demo-item>
  34. <demo-item :label="t('结合列表使用')">
  35. <cl-list border>
  36. <cl-draggable v-model="list2">
  37. <template #item="{ item, index, dragging, dragIndex }">
  38. <cl-list-item
  39. icon="chat-thread-line"
  40. :label="(item as UTSJSONObject).label"
  41. arrow
  42. :pt="{
  43. inner: {
  44. className: parseClass([
  45. [
  46. dragging && dragIndex == index,
  47. isDark ? '!bg-surface-700' : '!bg-surface-100'
  48. ]
  49. ])
  50. }
  51. }"
  52. ></cl-list-item>
  53. </template>
  54. </cl-draggable>
  55. </cl-list>
  56. </demo-item>
  57. <demo-item :label="t('多列排序')">
  58. <cl-draggable v-model="list3" :columns="4">
  59. <template #item="{ item, index }">
  60. <view
  61. class="flex flex-row items-center justify-center p-3 bg-surface-100 rounded-lg m-1 dark:!bg-surface-700"
  62. :class="{
  63. 'opacity-50': item['disabled']
  64. }"
  65. >
  66. <cl-text>{{ (item as UTSJSONObject).label }}</cl-text>
  67. </view>
  68. </template>
  69. </cl-draggable>
  70. </demo-item>
  71. <demo-item :label="t('结合图片使用')">
  72. <cl-draggable v-model="list4" :columns="4">
  73. <template #item="{ item, index }">
  74. <view class="p-[2px]">
  75. <cl-image
  76. :src="(item as UTSJSONObject).url"
  77. mode="widthFix"
  78. :pt="{
  79. className: '!w-full'
  80. }"
  81. preview
  82. ></cl-image>
  83. </view>
  84. </template>
  85. </cl-draggable>
  86. </demo-item>
  87. </view>
  88. </cl-page>
  89. </template>
  90. <script lang="ts" setup>
  91. import { t } from "@/locale";
  92. import DemoItem from "../components/item.uvue";
  93. import { ref } from "vue";
  94. import { isDark, parseClass } from "@/cool";
  95. // list:李白《将进酒》
  96. const list = ref<UTSJSONObject[]>([
  97. {
  98. label: "君不见黄河之水天上来"
  99. },
  100. {
  101. label: "奔流到海不复回",
  102. disabled: true
  103. },
  104. {
  105. label: "君不见高堂明镜悲白发"
  106. },
  107. {
  108. label: "朝如青丝暮成雪"
  109. },
  110. {
  111. label: "人生得意须尽欢"
  112. }
  113. ]);
  114. // list5:杜甫《春望》
  115. const list5 = ref<UTSJSONObject[]>([
  116. {
  117. label: "国破山河在"
  118. },
  119. {
  120. label: "城春草木深"
  121. },
  122. {
  123. label: "感时花溅泪"
  124. }
  125. ]);
  126. // list2:王之涣《登鹳雀楼》
  127. const list2 = ref<UTSJSONObject[]>([
  128. {
  129. label: "白日依山尽"
  130. },
  131. {
  132. label: "黄河入海流"
  133. },
  134. {
  135. label: "欲穷千里目"
  136. },
  137. {
  138. label: "更上一层楼"
  139. },
  140. {
  141. label: "一览众山小"
  142. }
  143. ]);
  144. const list3 = ref<UTSJSONObject[]>([
  145. {
  146. label: "项目1"
  147. },
  148. {
  149. label: "项目2"
  150. },
  151. {
  152. label: "项目3"
  153. },
  154. {
  155. label: "项目4"
  156. },
  157. {
  158. label: "项目5"
  159. },
  160. {
  161. label: "项目6"
  162. },
  163. {
  164. label: "项目7"
  165. },
  166. {
  167. label: "项目8",
  168. disabled: true
  169. },
  170. {
  171. label: "项目9"
  172. },
  173. {
  174. label: "项目10"
  175. },
  176. {
  177. label: "项目11"
  178. },
  179. {
  180. label: "项目12"
  181. }
  182. ]);
  183. const list4 = ref<UTSJSONObject[]>([
  184. {
  185. url: "https://unix.cool-js.com/images/demo/1.jpg"
  186. },
  187. {
  188. url: "https://unix.cool-js.com/images/demo/2.jpg"
  189. },
  190. {
  191. url: "https://unix.cool-js.com/images/demo/3.jpg"
  192. },
  193. {
  194. url: "https://unix.cool-js.com/images/demo/4.jpg"
  195. },
  196. {
  197. url: "https://unix.cool-js.com/images/demo/5.jpg"
  198. },
  199. {
  200. url: "https://unix.cool-js.com/images/demo/6.jpg"
  201. },
  202. {
  203. url: "https://unix.cool-js.com/images/demo/7.jpg"
  204. }
  205. ]);
  206. </script>