@netang/quasar 0.2.13 → 0.2.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (286) hide show
  1. package/.editorconfig +12 -12
  2. package/_docs/docs/components/field-table.md +58 -58
  3. package/_docs/docs/components/field-tree.md +21 -21
  4. package/_docs/docs/components/table.md +24 -24
  5. package/_docs/docs/utils/table.md +196 -196
  6. package/components/column-title/index.vue +38 -38
  7. package/components/data/index.vue +20 -20
  8. package/components/dialog/img-viewer/index.vue +697 -697
  9. package/components/dialog/index.vue +2 -0
  10. package/components/dragger/index.vue +203 -203
  11. package/components/drawer/index.vue +303 -303
  12. package/components/editor-code/index.vue +325 -325
  13. package/components/empty/index.vue +82 -80
  14. package/components/field-date/index.vue +850 -850
  15. package/components/field-date/methods.js +100 -100
  16. package/components/field-table/index.vue +1482 -1482
  17. package/components/field-text/index.vue +165 -165
  18. package/components/field-tree/index.vue +754 -754
  19. package/components/img/index.vue +237 -237
  20. package/components/input-number/index.vue +551 -551
  21. package/components/list-menu/index.vue +149 -149
  22. package/components/list-menu-item/index.vue +79 -79
  23. package/components/mixed-table/index.vue +532 -532
  24. package/components/mixed-table-splitter/index.vue +377 -377
  25. package/components/power-page/index.vue +96 -94
  26. package/components/price/index.vue +188 -188
  27. package/components/private/components/index.js +11 -11
  28. package/components/private/components/move-to-tree/index.vue +154 -154
  29. package/components/private/edit-power-data/index.vue +846 -846
  30. package/components/private/table-visible-columns-button/index.vue +114 -114
  31. package/components/render/index.vue +123 -123
  32. package/components/search/index.vue +231 -231
  33. package/components/search-item/index.vue +210 -210
  34. package/components/select/index.vue +177 -177
  35. package/components/splitter/index.vue +422 -422
  36. package/components/table/index.vue +513 -513
  37. package/components/table-column-fixed/index.vue +110 -110
  38. package/components/table-pagination/index.vue +192 -192
  39. package/components/table-summary/index.vue +107 -107
  40. package/components/thumbnail/index.vue +72 -72
  41. package/components/toolbar/index.vue +146 -146
  42. package/components/tree/index.vue +1728 -1728
  43. package/components/uploader/index.vue +195 -195
  44. package/components/uploader-query/index.vue +945 -945
  45. package/components/value-format/index.vue +274 -274
  46. package/configs/area3.js +1 -1
  47. package/docs/404.html +33 -33
  48. package/docs/assets/404.html-60b35caa.js +1 -1
  49. package/docs/assets/404.html-d1e63d77.js +1 -1
  50. package/docs/assets/alert.html-b2a2a72f.js +5 -5
  51. package/docs/assets/alert.html-ba46d137.js +1 -1
  52. package/docs/assets/app-9f30aa4b.js +6 -6
  53. package/docs/assets/area.html-01b9b58d.js +42 -42
  54. package/docs/assets/area.html-9a4fce6a.js +1 -1
  55. package/docs/assets/arr.html-145d27e7.js +1 -1
  56. package/docs/assets/arr.html-674e65ab.js +11 -11
  57. package/docs/assets/auth.html-579fa830.js +1 -1
  58. package/docs/assets/auth.html-8544ed95.js +8 -8
  59. package/docs/assets/bus.html-c71254aa.js +1 -1
  60. package/docs/assets/bus.html-dc7d3d19.js +6 -6
  61. package/docs/assets/column-title.html-c735cb5a.js +3 -3
  62. package/docs/assets/column-title.html-e9316762.js +1 -1
  63. package/docs/assets/confirm.html-ddfdc27f.js +10 -10
  64. package/docs/assets/confirm.html-ef3e2bef.js +1 -1
  65. package/docs/assets/copy.html-d20345b6.js +1 -1
  66. package/docs/assets/copy.html-ef8c8571.js +13 -13
  67. package/docs/assets/data.html-6432175d.js +30 -30
  68. package/docs/assets/data.html-a3b05d5b.js +1 -1
  69. package/docs/assets/dialog.html-1f698e5a.js +1 -1
  70. package/docs/assets/dialog.html-62902b83.js +68 -68
  71. package/docs/assets/dialog.html-baea77c9.js +1 -1
  72. package/docs/assets/dialog.html-bb082fc4.js +1 -1
  73. package/docs/assets/dict.html-1311da3d.js +23 -23
  74. package/docs/assets/dict.html-b96fbf0c.js +1 -1
  75. package/docs/assets/dictOptions.html-7c4f40a5.js +1 -1
  76. package/docs/assets/dictOptions.html-fb99d175.js +5 -5
  77. package/docs/assets/dragger.html-668d3efa.js +1 -1
  78. package/docs/assets/dragger.html-749d585a.js +1 -1
  79. package/docs/assets/editor-code.html-6ab26ea9.js +1 -1
  80. package/docs/assets/editor-code.html-d196205d.js +1 -1
  81. package/docs/assets/empty.html-1c139131.js +1 -1
  82. package/docs/assets/empty.html-1e9c441d.js +1 -1
  83. package/docs/assets/field-date.html-069fdb13.js +1 -1
  84. package/docs/assets/field-date.html-ad204aa9.js +1 -1
  85. package/docs/assets/field-table.html-ce480f03.js +1 -1
  86. package/docs/assets/field-table.html-d9236160.js +1 -1
  87. package/docs/assets/field-text.html-7277c62f.js +1 -1
  88. package/docs/assets/field-text.html-ccb4cecf.js +1 -1
  89. package/docs/assets/field-tree.html-519bfb45.js +1 -1
  90. package/docs/assets/field-tree.html-fdc748d6.js +1 -1
  91. package/docs/assets/form.html-2b562c37.js +2 -2
  92. package/docs/assets/form.html-75104cd5.js +1 -1
  93. package/docs/assets/framework-204010b2.js +5 -5
  94. package/docs/assets/getData.html-990e3787.js +1 -1
  95. package/docs/assets/getData.html-bb72025f.js +34 -34
  96. package/docs/assets/getFile.html-42368004.js +1 -1
  97. package/docs/assets/getFile.html-99abd054.js +3 -3
  98. package/docs/assets/getImage.html-3429c5a1.js +1 -1
  99. package/docs/assets/getImage.html-4d886d83.js +3 -3
  100. package/docs/assets/getTime.html-7435f922.js +1 -1
  101. package/docs/assets/getTime.html-b37f49eb.js +20 -20
  102. package/docs/assets/img.html-7d1da657.js +1 -1
  103. package/docs/assets/img.html-fbea1105.js +1 -1
  104. package/docs/assets/index.html-1695dd7c.js +1 -1
  105. package/docs/assets/index.html-65a4aa67.js +1 -1
  106. package/docs/assets/index.html-7b98d5bd.js +1 -1
  107. package/docs/assets/index.html-c01f2648.js +1 -1
  108. package/docs/assets/input-number.html-0b250d2a.js +1 -1
  109. package/docs/assets/input-number.html-a8eb0378.js +1 -1
  110. package/docs/assets/list-menu-item.html-7f1b4611.js +1 -1
  111. package/docs/assets/list-menu-item.html-84ed5ab8.js +1 -1
  112. package/docs/assets/list-menu.html-28b4163f.js +1 -1
  113. package/docs/assets/list-menu.html-cb6ba95b.js +1 -1
  114. package/docs/assets/loading.html-dae9e39d.js +6 -6
  115. package/docs/assets/loading.html-dc74c9e6.js +1 -1
  116. package/docs/assets/notify.html-e6c4c514.js +1 -1
  117. package/docs/assets/notify.html-f2c4d914.js +8 -8
  118. package/docs/assets/power-page.html-32e02f82.js +1 -1
  119. package/docs/assets/power-page.html-485e77da.js +1 -1
  120. package/docs/assets/power.html-d258cc19.js +93 -93
  121. package/docs/assets/power.html-e490bd32.js +1 -1
  122. package/docs/assets/previewImage.html-6a6b4245.js +1 -1
  123. package/docs/assets/previewImage.html-c5b7e945.js +2 -2
  124. package/docs/assets/price.html-1882c548.js +19 -19
  125. package/docs/assets/price.html-94d3f5be.js +1 -1
  126. package/docs/assets/price.html-d213df0f.js +1 -1
  127. package/docs/assets/price.html-deaf880f.js +1 -1
  128. package/docs/assets/render.html-8efcbdd4.js +1 -1
  129. package/docs/assets/render.html-df228e38.js +1 -1
  130. package/docs/assets/rule.html-2cd57fc2.js +13 -13
  131. package/docs/assets/rule.html-61662001.js +1 -1
  132. package/docs/assets/ruleValid.html-04fe2552.js +1 -1
  133. package/docs/assets/ruleValid.html-e0a776af.js +14 -14
  134. package/docs/assets/search-0782d0d1.svg +1 -1
  135. package/docs/assets/search-item.html-3f75394c.js +1 -1
  136. package/docs/assets/search-item.html-4e942ecd.js +1 -1
  137. package/docs/assets/search.html-2807043e.js +1 -1
  138. package/docs/assets/search.html-c24f8806.js +1 -1
  139. package/docs/assets/select.html-00d0607c.js +1 -1
  140. package/docs/assets/select.html-de7731f5.js +1 -1
  141. package/docs/assets/splitter.html-56f51a70.js +1 -1
  142. package/docs/assets/splitter.html-f5c836d7.js +1 -1
  143. package/docs/assets/style-161e43ab.css +1 -1
  144. package/docs/assets/symbols.html-a6aea4bf.js +1 -1
  145. package/docs/assets/symbols.html-b1f65bad.js +21 -21
  146. package/docs/assets/table-column-fixed.html-3a69e7b2.js +1 -1
  147. package/docs/assets/table-column-fixed.html-e763c38b.js +1 -1
  148. package/docs/assets/table-pagination.html-236934d3.js +1 -1
  149. package/docs/assets/table-pagination.html-c37ee2ac.js +1 -1
  150. package/docs/assets/table-splitter.html-07eab15c.js +1 -1
  151. package/docs/assets/table-splitter.html-7670ee65.js +1 -1
  152. package/docs/assets/table-summary.html-04db434f.js +1 -1
  153. package/docs/assets/table-summary.html-943c65a0.js +1 -1
  154. package/docs/assets/table.html-36253ad7.js +1 -1
  155. package/docs/assets/table.html-7f9c5d1b.js +38 -38
  156. package/docs/assets/table.html-93d53dc8.js +1 -1
  157. package/docs/assets/table.html-ac99b9cb.js +1 -1
  158. package/docs/assets/thumbnail.html-bab1976b.js +1 -1
  159. package/docs/assets/thumbnail.html-eb64e5e8.js +1 -1
  160. package/docs/assets/timestamp.html-4e54f79b.js +13 -13
  161. package/docs/assets/timestamp.html-d0e1b88a.js +1 -1
  162. package/docs/assets/toast.html-58ecbe21.js +1 -1
  163. package/docs/assets/toast.html-c9b9d36b.js +6 -6
  164. package/docs/assets/toolbar.html-83d9f97c.js +1 -1
  165. package/docs/assets/toolbar.html-ff7b8c92.js +1 -1
  166. package/docs/assets/tree.html-d07cbe79.js +23 -23
  167. package/docs/assets/tree.html-ea04193e.js +1 -1
  168. package/docs/assets/uploader-query.html-05590718.js +1 -1
  169. package/docs/assets/uploader-query.html-3175bac5.js +1 -1
  170. package/docs/assets/uploader.html-36da4394.js +2 -2
  171. package/docs/assets/uploader.html-6b5f3079.js +1 -1
  172. package/docs/assets/uploader.html-b9340b57.js +1 -1
  173. package/docs/assets/uploader.html-bc1c22e3.js +1 -1
  174. package/docs/assets/value-format.html-8ae3d47d.js +1 -1
  175. package/docs/assets/value-format.html-afa99b3d.js +1 -1
  176. package/docs/components/column-title.html +35 -35
  177. package/docs/components/data.html +62 -62
  178. package/docs/components/dialog.html +33 -33
  179. package/docs/components/dragger.html +33 -33
  180. package/docs/components/editor-code.html +33 -33
  181. package/docs/components/empty.html +33 -33
  182. package/docs/components/field-date.html +33 -33
  183. package/docs/components/field-table.html +33 -33
  184. package/docs/components/field-text.html +33 -33
  185. package/docs/components/field-tree.html +33 -33
  186. package/docs/components/img.html +33 -33
  187. package/docs/components/input-number.html +33 -33
  188. package/docs/components/list-menu-item.html +33 -33
  189. package/docs/components/list-menu.html +33 -33
  190. package/docs/components/power-page.html +33 -33
  191. package/docs/components/price.html +33 -33
  192. package/docs/components/render.html +33 -33
  193. package/docs/components/search-item.html +33 -33
  194. package/docs/components/search.html +33 -33
  195. package/docs/components/select.html +33 -33
  196. package/docs/components/splitter.html +33 -33
  197. package/docs/components/table-column-fixed.html +33 -33
  198. package/docs/components/table-pagination.html +33 -33
  199. package/docs/components/table-splitter.html +33 -33
  200. package/docs/components/table-summary.html +33 -33
  201. package/docs/components/table.html +33 -33
  202. package/docs/components/thumbnail.html +33 -33
  203. package/docs/components/toolbar.html +33 -33
  204. package/docs/components/uploader-query.html +33 -33
  205. package/docs/components/uploader.html +33 -33
  206. package/docs/components/value-format.html +33 -33
  207. package/docs/css/index.css +3 -3
  208. package/docs/index.html +33 -33
  209. package/docs/utils/alert.html +37 -37
  210. package/docs/utils/area.html +74 -74
  211. package/docs/utils/arr.html +43 -43
  212. package/docs/utils/auth.html +40 -40
  213. package/docs/utils/bus.html +38 -38
  214. package/docs/utils/confirm.html +42 -42
  215. package/docs/utils/copy.html +45 -45
  216. package/docs/utils/dialog.html +100 -100
  217. package/docs/utils/dict.html +55 -55
  218. package/docs/utils/dictOptions.html +37 -37
  219. package/docs/utils/form.html +34 -34
  220. package/docs/utils/getData.html +66 -66
  221. package/docs/utils/getFile.html +35 -35
  222. package/docs/utils/getImage.html +35 -35
  223. package/docs/utils/getTime.html +52 -52
  224. package/docs/utils/index.html +33 -33
  225. package/docs/utils/loading.html +38 -38
  226. package/docs/utils/notify.html +40 -40
  227. package/docs/utils/power.html +125 -125
  228. package/docs/utils/previewImage.html +34 -34
  229. package/docs/utils/price.html +51 -51
  230. package/docs/utils/rule.html +45 -45
  231. package/docs/utils/ruleValid.html +46 -46
  232. package/docs/utils/symbols.html +53 -53
  233. package/docs/utils/table.html +70 -70
  234. package/docs/utils/timestamp.html +45 -45
  235. package/docs/utils/toast.html +38 -38
  236. package/docs/utils/tree.html +55 -55
  237. package/docs/utils/uploader.html +34 -34
  238. package/package.json +1 -1
  239. package/sass/common.scss +184 -184
  240. package/sass/index.scss +12 -12
  241. package/sass/line.scss +39 -39
  242. package/sass/quasar/btn.scss +46 -46
  243. package/sass/quasar/common.scss +3 -3
  244. package/sass/quasar/drawer.scss +6 -6
  245. package/sass/quasar/field.scss +250 -250
  246. package/sass/quasar/loading.scss +6 -6
  247. package/sass/quasar/table.scss +168 -168
  248. package/sass/quasar/toolbar.scss +22 -22
  249. package/sass/variables.scss +140 -140
  250. package/store/index.js +29 -29
  251. package/utils/$auth.js +127 -127
  252. package/utils/$form.js +72 -72
  253. package/utils/$power.js +1464 -1464
  254. package/utils/$render.js +75 -75
  255. package/utils/$rule.js +13 -13
  256. package/utils/$ruleValid.js +10 -10
  257. package/utils/$search.js +416 -416
  258. package/utils/$table.js +1275 -1275
  259. package/utils/alert.js +12 -12
  260. package/utils/area.js +400 -400
  261. package/utils/arr.js +51 -51
  262. package/utils/bus.js +6 -6
  263. package/utils/config.js +60 -60
  264. package/utils/confirm.js +11 -11
  265. package/utils/copy.js +30 -30
  266. package/utils/dialog.js +36 -36
  267. package/utils/dict.js +21 -21
  268. package/utils/dictOptions.js +28 -28
  269. package/utils/getData.js +88 -88
  270. package/utils/getFile.js +67 -67
  271. package/utils/getImage.js +236 -236
  272. package/utils/getTime.js +113 -113
  273. package/utils/index.js +67 -67
  274. package/utils/loading.js +15 -15
  275. package/utils/notify.js +13 -13
  276. package/utils/play.js +40 -40
  277. package/utils/previewImage.js +14 -14
  278. package/utils/price.js +18 -18
  279. package/utils/symbols.js +18 -18
  280. package/utils/timestamp.js +18 -18
  281. package/utils/toast.js +13 -13
  282. package/utils/uploader.js +2099 -2099
  283. package/utils/useAuth.js +30 -30
  284. package/utils/useFileUrl.js +26 -26
  285. package/utils/useRouter.js +47 -47
  286. package/utils/useSearch.js +499 -499
@@ -196,6 +196,8 @@ export default {
196
196
  },
197
197
  // 提交
198
198
  confirm: onDialogConfirm,
199
+ // 对话框取消
200
+ close: onDialogCancel,
199
201
  })
200
202
 
201
203
  // ==========【计算属性】=========================================================================================
@@ -1,203 +1,203 @@
1
- <template>
2
- <div
3
- class="n-dragger"
4
- :class="{
5
- dragging,
6
- }"
7
- >
8
- <slot
9
- :mousedown="mousedown"
10
- :fromIndex="fromIndex"
11
- :dragStart="dragStart"
12
- :dragEnter="dragEnter"
13
- :dragEnd="dragEnd"
14
- />
15
- </div>
16
- </template>
17
-
18
- <script>
19
- import { ref, computed } from 'vue'
20
- import $n_isValidArray from '@netang/utils/isValidArray'
21
-
22
- export default {
23
-
24
- /**
25
- * 标识
26
- */
27
- name: 'NDragger',
28
-
29
- /**
30
- * 声明属性
31
- */
32
- props: {
33
- // 值 v-model
34
- modelValue: Array,
35
- // 是否开启拖拽
36
- drag: {
37
- type: Boolean,
38
- default: true,
39
- },
40
- },
41
-
42
- /**
43
- * 声明事件
44
- */
45
- emits: [
46
- 'update:modelValue',
47
- ],
48
-
49
- /**
50
- * 组合式
51
- */
52
- setup(props, { emit }) {
53
-
54
- // ==========【数据】=============================================================================================
55
-
56
- // 是否拖拽中
57
- const dragging = ref(false)
58
-
59
- // 原始位置 index
60
- const fromIndex = ref(null)
61
-
62
- // 目标位置 index
63
- const toIndex = ref(null)
64
-
65
- // ==========【计算属性】=========================================================================================
66
-
67
- /**
68
- * 是否开启拖拽
69
- */
70
- const isDrag = computed(function() {
71
- return props.drag
72
- && $n_isValidArray(props.modelValue)
73
- && props.modelValue.length > 1
74
- })
75
-
76
- // ==========【方法】=============================================================================================
77
-
78
- /**
79
- * 鼠标点击事件
80
- */
81
- function mousedown() {
82
- // 如果开启拖拽
83
- if (isDrag.value) {
84
- // 设置拖拽中
85
- dragging.value = true
86
- }
87
- }
88
-
89
- /**
90
- * 拖拽开始
91
- * dragstart: 开始拖元素触发
92
- * dragenter: 当元素拖进可drop元素(绑定drop事件的元素)时触发
93
- * dragover: 当元素拖动到drop元素上时触发
94
- * drop: 当元素放下到drop元素触发
95
- * dragleave : 当元素离开drop元素时触发
96
- * drag: 每次元素被拖动时会触发
97
- * dragend: 放开拖动元素时触发
98
- */
99
- function dragStart(e, index) {
100
-
101
- // 如果开启拖拽
102
- if (isDrag.value) {
103
-
104
- // 如果为火狐浏览器, 则必须要setData
105
- // if ($n_ua.firefox) {
106
- // e.dataTransfer.setData('info', e.target.id)
107
- // }
108
-
109
- // 设置拖拽中
110
- dragging.value = true
111
-
112
- // 设置原始位置 index
113
- fromIndex.value = index
114
- }
115
- }
116
-
117
- /**
118
- * 拖拽中
119
- */
120
- function dragEnter(e, index) {
121
-
122
- // 如果开启拖拽
123
- if (isDrag.value) {
124
-
125
- // 设置目标位置 index
126
- toIndex.value = index
127
-
128
- // 如果拖拽中
129
- if (dragging.value) {
130
-
131
- // 为需要移动的元素设置 dragstart 事件
132
- // e.dataTransfer.effectAllowed = 'move'
133
-
134
- // 原始位置 index
135
- const from = fromIndex.value
136
- // 目标位置 index
137
- const to = toIndex.value
138
-
139
- // 如果原始位置 === 目标位置
140
- if (from === to) {
141
- // 则无任何操作
142
- return
143
- }
144
-
145
- const val = [...props.modelValue]
146
-
147
- // 如果当前元素在拖动目标位置的下方, 先将当前元素从数组拿出, 数组长度-1, 我们直接给数组拖动目标位置的地方新增一个和当前元素值一样的元素,
148
- // 我们再把数组之前的那个拖动的元素删除掉, 所以要len+1
149
- if (from > to) {
150
- val.splice(to, 0, val[from])
151
- val.splice(from + 1, 1)
152
-
153
- } else {
154
- // 如果当前元素在拖动目标位置的上方, 先将当前元素从数组拿出, 数组长度-1, 我们直接给数组拖动目标位置+1的地方新增一个和当前元素值一样的元素,
155
- // 这时, 数组len不变, 我们再把数组之前的那个拖动的元素删除掉, 下标还是from
156
- val.splice(to + 1, 0, val[from])
157
- val.splice(from, 1)
158
- }
159
-
160
- fromIndex.value = to
161
- toIndex.value = from
162
-
163
- // 更新值
164
- emit('update:modelValue', val)
165
- }
166
- }
167
- }
168
-
169
- /**
170
- * 拖拽结束
171
- */
172
- function dragEnd() {
173
-
174
- // 如果开启拖拽
175
- if (isDrag.value) {
176
- fromIndex.value = null
177
- toIndex.value = null
178
- dragging.value = false
179
- }
180
- }
181
-
182
- // ==========【返回】=============================================================================================
183
-
184
- return {
185
- // 是否拖拽中
186
- dragging,
187
- // 原始位置 index
188
- fromIndex,
189
- // 目标位置 index
190
- toIndex,
191
-
192
- // 鼠标点击事件
193
- mousedown,
194
- // 拖拽开始
195
- dragStart,
196
- // 拖拽中
197
- dragEnter,
198
- // 拖拽结束
199
- dragEnd,
200
- }
201
- },
202
- }
203
- </script>
1
+ <template>
2
+ <div
3
+ class="n-dragger"
4
+ :class="{
5
+ dragging,
6
+ }"
7
+ >
8
+ <slot
9
+ :mousedown="mousedown"
10
+ :fromIndex="fromIndex"
11
+ :dragStart="dragStart"
12
+ :dragEnter="dragEnter"
13
+ :dragEnd="dragEnd"
14
+ />
15
+ </div>
16
+ </template>
17
+
18
+ <script>
19
+ import { ref, computed } from 'vue'
20
+ import $n_isValidArray from '@netang/utils/isValidArray'
21
+
22
+ export default {
23
+
24
+ /**
25
+ * 标识
26
+ */
27
+ name: 'NDragger',
28
+
29
+ /**
30
+ * 声明属性
31
+ */
32
+ props: {
33
+ // 值 v-model
34
+ modelValue: Array,
35
+ // 是否开启拖拽
36
+ drag: {
37
+ type: Boolean,
38
+ default: true,
39
+ },
40
+ },
41
+
42
+ /**
43
+ * 声明事件
44
+ */
45
+ emits: [
46
+ 'update:modelValue',
47
+ ],
48
+
49
+ /**
50
+ * 组合式
51
+ */
52
+ setup(props, { emit }) {
53
+
54
+ // ==========【数据】=============================================================================================
55
+
56
+ // 是否拖拽中
57
+ const dragging = ref(false)
58
+
59
+ // 原始位置 index
60
+ const fromIndex = ref(null)
61
+
62
+ // 目标位置 index
63
+ const toIndex = ref(null)
64
+
65
+ // ==========【计算属性】=========================================================================================
66
+
67
+ /**
68
+ * 是否开启拖拽
69
+ */
70
+ const isDrag = computed(function() {
71
+ return props.drag
72
+ && $n_isValidArray(props.modelValue)
73
+ && props.modelValue.length > 1
74
+ })
75
+
76
+ // ==========【方法】=============================================================================================
77
+
78
+ /**
79
+ * 鼠标点击事件
80
+ */
81
+ function mousedown() {
82
+ // 如果开启拖拽
83
+ if (isDrag.value) {
84
+ // 设置拖拽中
85
+ dragging.value = true
86
+ }
87
+ }
88
+
89
+ /**
90
+ * 拖拽开始
91
+ * dragstart: 开始拖元素触发
92
+ * dragenter: 当元素拖进可drop元素(绑定drop事件的元素)时触发
93
+ * dragover: 当元素拖动到drop元素上时触发
94
+ * drop: 当元素放下到drop元素触发
95
+ * dragleave : 当元素离开drop元素时触发
96
+ * drag: 每次元素被拖动时会触发
97
+ * dragend: 放开拖动元素时触发
98
+ */
99
+ function dragStart(e, index) {
100
+
101
+ // 如果开启拖拽
102
+ if (isDrag.value) {
103
+
104
+ // 如果为火狐浏览器, 则必须要setData
105
+ // if ($n_ua.firefox) {
106
+ // e.dataTransfer.setData('info', e.target.id)
107
+ // }
108
+
109
+ // 设置拖拽中
110
+ dragging.value = true
111
+
112
+ // 设置原始位置 index
113
+ fromIndex.value = index
114
+ }
115
+ }
116
+
117
+ /**
118
+ * 拖拽中
119
+ */
120
+ function dragEnter(e, index) {
121
+
122
+ // 如果开启拖拽
123
+ if (isDrag.value) {
124
+
125
+ // 设置目标位置 index
126
+ toIndex.value = index
127
+
128
+ // 如果拖拽中
129
+ if (dragging.value) {
130
+
131
+ // 为需要移动的元素设置 dragstart 事件
132
+ // e.dataTransfer.effectAllowed = 'move'
133
+
134
+ // 原始位置 index
135
+ const from = fromIndex.value
136
+ // 目标位置 index
137
+ const to = toIndex.value
138
+
139
+ // 如果原始位置 === 目标位置
140
+ if (from === to) {
141
+ // 则无任何操作
142
+ return
143
+ }
144
+
145
+ const val = [...props.modelValue]
146
+
147
+ // 如果当前元素在拖动目标位置的下方, 先将当前元素从数组拿出, 数组长度-1, 我们直接给数组拖动目标位置的地方新增一个和当前元素值一样的元素,
148
+ // 我们再把数组之前的那个拖动的元素删除掉, 所以要len+1
149
+ if (from > to) {
150
+ val.splice(to, 0, val[from])
151
+ val.splice(from + 1, 1)
152
+
153
+ } else {
154
+ // 如果当前元素在拖动目标位置的上方, 先将当前元素从数组拿出, 数组长度-1, 我们直接给数组拖动目标位置+1的地方新增一个和当前元素值一样的元素,
155
+ // 这时, 数组len不变, 我们再把数组之前的那个拖动的元素删除掉, 下标还是from
156
+ val.splice(to + 1, 0, val[from])
157
+ val.splice(from, 1)
158
+ }
159
+
160
+ fromIndex.value = to
161
+ toIndex.value = from
162
+
163
+ // 更新值
164
+ emit('update:modelValue', val)
165
+ }
166
+ }
167
+ }
168
+
169
+ /**
170
+ * 拖拽结束
171
+ */
172
+ function dragEnd() {
173
+
174
+ // 如果开启拖拽
175
+ if (isDrag.value) {
176
+ fromIndex.value = null
177
+ toIndex.value = null
178
+ dragging.value = false
179
+ }
180
+ }
181
+
182
+ // ==========【返回】=============================================================================================
183
+
184
+ return {
185
+ // 是否拖拽中
186
+ dragging,
187
+ // 原始位置 index
188
+ fromIndex,
189
+ // 目标位置 index
190
+ toIndex,
191
+
192
+ // 鼠标点击事件
193
+ mousedown,
194
+ // 拖拽开始
195
+ dragStart,
196
+ // 拖拽中
197
+ dragEnter,
198
+ // 拖拽结束
199
+ dragEnd,
200
+ }
201
+ },
202
+ }
203
+ </script>