draggable.uvue 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  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 DemoItem from "../components/item.uvue";
  92. import { ref } from "vue";
  93. import { isDark, parseClass, t } from "@/.cool";
  94. // list:李白《将进酒》
  95. const list = ref<UTSJSONObject[]>([
  96. {
  97. label: "君不见黄河之水天上来"
  98. },
  99. {
  100. label: "奔流到海不复回",
  101. disabled: true
  102. },
  103. {
  104. label: "君不见高堂明镜悲白发"
  105. },
  106. {
  107. label: "朝如青丝暮成雪"
  108. },
  109. {
  110. label: "人生得意须尽欢"
  111. }
  112. ]);
  113. // list5:杜甫《春望》
  114. const list5 = ref<UTSJSONObject[]>([
  115. {
  116. label: "国破山河在"
  117. },
  118. {
  119. label: "城春草木深"
  120. },
  121. {
  122. label: "感时花溅泪"
  123. }
  124. ]);
  125. // list2:王之涣《登鹳雀楼》
  126. const list2 = ref<UTSJSONObject[]>([
  127. {
  128. label: "白日依山尽"
  129. },
  130. {
  131. label: "黄河入海流"
  132. },
  133. {
  134. label: "欲穷千里目"
  135. },
  136. {
  137. label: "更上一层楼"
  138. },
  139. {
  140. label: "一览众山小"
  141. }
  142. ]);
  143. const list3 = ref<UTSJSONObject[]>([
  144. {
  145. label: "项目1"
  146. },
  147. {
  148. label: "项目2"
  149. },
  150. {
  151. label: "项目3"
  152. },
  153. {
  154. label: "项目4"
  155. },
  156. {
  157. label: "项目5"
  158. },
  159. {
  160. label: "项目6"
  161. },
  162. {
  163. label: "项目7"
  164. },
  165. {
  166. label: "项目8",
  167. disabled: true
  168. },
  169. {
  170. label: "项目9"
  171. },
  172. {
  173. label: "项目10"
  174. },
  175. {
  176. label: "项目11"
  177. },
  178. {
  179. label: "项目12"
  180. }
  181. ]);
  182. const list4 = ref<UTSJSONObject[]>([
  183. {
  184. url: "https://unix.cool-js.com/images/demo/1.jpg"
  185. },
  186. {
  187. url: "https://unix.cool-js.com/images/demo/2.jpg"
  188. },
  189. {
  190. url: "https://unix.cool-js.com/images/demo/3.jpg"
  191. },
  192. {
  193. url: "https://unix.cool-js.com/images/demo/4.jpg"
  194. },
  195. {
  196. url: "https://unix.cool-js.com/images/demo/5.jpg"
  197. },
  198. {
  199. url: "https://unix.cool-js.com/images/demo/6.jpg"
  200. },
  201. {
  202. url: "https://unix.cool-js.com/images/demo/7.jpg"
  203. }
  204. ]);
  205. </script>