@netang/quasar 0.2.15 → 0.2.17

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 (285) 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/dragger/index.vue +203 -203
  10. package/components/drawer/index.vue +303 -303
  11. package/components/editor-code/index.vue +325 -325
  12. package/components/empty/index.vue +82 -82
  13. package/components/field-date/index.vue +850 -850
  14. package/components/field-date/methods.js +100 -100
  15. package/components/field-table/index.vue +1482 -1482
  16. package/components/field-text/index.vue +165 -165
  17. package/components/field-tree/index.vue +754 -754
  18. package/components/img/index.vue +279 -237
  19. package/components/input-number/index.vue +560 -551
  20. package/components/list-menu/index.vue +149 -149
  21. package/components/list-menu-item/index.vue +79 -79
  22. package/components/mixed-table/index.vue +532 -532
  23. package/components/mixed-table-splitter/index.vue +377 -377
  24. package/components/power-page/index.vue +96 -96
  25. package/components/price/index.vue +188 -188
  26. package/components/private/components/index.js +11 -11
  27. package/components/private/components/move-to-tree/index.vue +154 -154
  28. package/components/private/edit-power-data/index.vue +846 -846
  29. package/components/private/table-visible-columns-button/index.vue +114 -114
  30. package/components/render/index.vue +123 -123
  31. package/components/search/index.vue +231 -231
  32. package/components/search-item/index.vue +210 -210
  33. package/components/select/index.vue +177 -177
  34. package/components/splitter/index.vue +422 -422
  35. package/components/table/index.vue +513 -513
  36. package/components/table-column-fixed/index.vue +110 -110
  37. package/components/table-pagination/index.vue +192 -192
  38. package/components/table-summary/index.vue +107 -107
  39. package/components/thumbnail/index.vue +72 -72
  40. package/components/toolbar/index.vue +146 -146
  41. package/components/tree/index.vue +1728 -1728
  42. package/components/uploader/index.vue +195 -195
  43. package/components/uploader-query/index.vue +945 -945
  44. package/components/value-format/index.vue +274 -274
  45. package/configs/area3.js +1 -1
  46. package/docs/404.html +33 -33
  47. package/docs/assets/404.html-60b35caa.js +1 -1
  48. package/docs/assets/404.html-d1e63d77.js +1 -1
  49. package/docs/assets/alert.html-b2a2a72f.js +5 -5
  50. package/docs/assets/alert.html-ba46d137.js +1 -1
  51. package/docs/assets/app-9f30aa4b.js +6 -6
  52. package/docs/assets/area.html-01b9b58d.js +42 -42
  53. package/docs/assets/area.html-9a4fce6a.js +1 -1
  54. package/docs/assets/arr.html-145d27e7.js +1 -1
  55. package/docs/assets/arr.html-674e65ab.js +11 -11
  56. package/docs/assets/auth.html-579fa830.js +1 -1
  57. package/docs/assets/auth.html-8544ed95.js +8 -8
  58. package/docs/assets/bus.html-c71254aa.js +1 -1
  59. package/docs/assets/bus.html-dc7d3d19.js +6 -6
  60. package/docs/assets/column-title.html-c735cb5a.js +3 -3
  61. package/docs/assets/column-title.html-e9316762.js +1 -1
  62. package/docs/assets/confirm.html-ddfdc27f.js +10 -10
  63. package/docs/assets/confirm.html-ef3e2bef.js +1 -1
  64. package/docs/assets/copy.html-d20345b6.js +1 -1
  65. package/docs/assets/copy.html-ef8c8571.js +13 -13
  66. package/docs/assets/data.html-6432175d.js +30 -30
  67. package/docs/assets/data.html-a3b05d5b.js +1 -1
  68. package/docs/assets/dialog.html-1f698e5a.js +1 -1
  69. package/docs/assets/dialog.html-62902b83.js +68 -68
  70. package/docs/assets/dialog.html-baea77c9.js +1 -1
  71. package/docs/assets/dialog.html-bb082fc4.js +1 -1
  72. package/docs/assets/dict.html-1311da3d.js +23 -23
  73. package/docs/assets/dict.html-b96fbf0c.js +1 -1
  74. package/docs/assets/dictOptions.html-7c4f40a5.js +1 -1
  75. package/docs/assets/dictOptions.html-fb99d175.js +5 -5
  76. package/docs/assets/dragger.html-668d3efa.js +1 -1
  77. package/docs/assets/dragger.html-749d585a.js +1 -1
  78. package/docs/assets/editor-code.html-6ab26ea9.js +1 -1
  79. package/docs/assets/editor-code.html-d196205d.js +1 -1
  80. package/docs/assets/empty.html-1c139131.js +1 -1
  81. package/docs/assets/empty.html-1e9c441d.js +1 -1
  82. package/docs/assets/field-date.html-069fdb13.js +1 -1
  83. package/docs/assets/field-date.html-ad204aa9.js +1 -1
  84. package/docs/assets/field-table.html-ce480f03.js +1 -1
  85. package/docs/assets/field-table.html-d9236160.js +1 -1
  86. package/docs/assets/field-text.html-7277c62f.js +1 -1
  87. package/docs/assets/field-text.html-ccb4cecf.js +1 -1
  88. package/docs/assets/field-tree.html-519bfb45.js +1 -1
  89. package/docs/assets/field-tree.html-fdc748d6.js +1 -1
  90. package/docs/assets/form.html-2b562c37.js +2 -2
  91. package/docs/assets/form.html-75104cd5.js +1 -1
  92. package/docs/assets/framework-204010b2.js +5 -5
  93. package/docs/assets/getData.html-990e3787.js +1 -1
  94. package/docs/assets/getData.html-bb72025f.js +34 -34
  95. package/docs/assets/getFile.html-42368004.js +1 -1
  96. package/docs/assets/getFile.html-99abd054.js +3 -3
  97. package/docs/assets/getImage.html-3429c5a1.js +1 -1
  98. package/docs/assets/getImage.html-4d886d83.js +3 -3
  99. package/docs/assets/getTime.html-7435f922.js +1 -1
  100. package/docs/assets/getTime.html-b37f49eb.js +20 -20
  101. package/docs/assets/img.html-7d1da657.js +1 -1
  102. package/docs/assets/img.html-fbea1105.js +1 -1
  103. package/docs/assets/index.html-1695dd7c.js +1 -1
  104. package/docs/assets/index.html-65a4aa67.js +1 -1
  105. package/docs/assets/index.html-7b98d5bd.js +1 -1
  106. package/docs/assets/index.html-c01f2648.js +1 -1
  107. package/docs/assets/input-number.html-0b250d2a.js +1 -1
  108. package/docs/assets/input-number.html-a8eb0378.js +1 -1
  109. package/docs/assets/list-menu-item.html-7f1b4611.js +1 -1
  110. package/docs/assets/list-menu-item.html-84ed5ab8.js +1 -1
  111. package/docs/assets/list-menu.html-28b4163f.js +1 -1
  112. package/docs/assets/list-menu.html-cb6ba95b.js +1 -1
  113. package/docs/assets/loading.html-dae9e39d.js +6 -6
  114. package/docs/assets/loading.html-dc74c9e6.js +1 -1
  115. package/docs/assets/notify.html-e6c4c514.js +1 -1
  116. package/docs/assets/notify.html-f2c4d914.js +8 -8
  117. package/docs/assets/power-page.html-32e02f82.js +1 -1
  118. package/docs/assets/power-page.html-485e77da.js +1 -1
  119. package/docs/assets/power.html-d258cc19.js +93 -93
  120. package/docs/assets/power.html-e490bd32.js +1 -1
  121. package/docs/assets/previewImage.html-6a6b4245.js +1 -1
  122. package/docs/assets/previewImage.html-c5b7e945.js +2 -2
  123. package/docs/assets/price.html-1882c548.js +19 -19
  124. package/docs/assets/price.html-94d3f5be.js +1 -1
  125. package/docs/assets/price.html-d213df0f.js +1 -1
  126. package/docs/assets/price.html-deaf880f.js +1 -1
  127. package/docs/assets/render.html-8efcbdd4.js +1 -1
  128. package/docs/assets/render.html-df228e38.js +1 -1
  129. package/docs/assets/rule.html-2cd57fc2.js +13 -13
  130. package/docs/assets/rule.html-61662001.js +1 -1
  131. package/docs/assets/ruleValid.html-04fe2552.js +1 -1
  132. package/docs/assets/ruleValid.html-e0a776af.js +14 -14
  133. package/docs/assets/search-0782d0d1.svg +1 -1
  134. package/docs/assets/search-item.html-3f75394c.js +1 -1
  135. package/docs/assets/search-item.html-4e942ecd.js +1 -1
  136. package/docs/assets/search.html-2807043e.js +1 -1
  137. package/docs/assets/search.html-c24f8806.js +1 -1
  138. package/docs/assets/select.html-00d0607c.js +1 -1
  139. package/docs/assets/select.html-de7731f5.js +1 -1
  140. package/docs/assets/splitter.html-56f51a70.js +1 -1
  141. package/docs/assets/splitter.html-f5c836d7.js +1 -1
  142. package/docs/assets/style-161e43ab.css +1 -1
  143. package/docs/assets/symbols.html-a6aea4bf.js +1 -1
  144. package/docs/assets/symbols.html-b1f65bad.js +21 -21
  145. package/docs/assets/table-column-fixed.html-3a69e7b2.js +1 -1
  146. package/docs/assets/table-column-fixed.html-e763c38b.js +1 -1
  147. package/docs/assets/table-pagination.html-236934d3.js +1 -1
  148. package/docs/assets/table-pagination.html-c37ee2ac.js +1 -1
  149. package/docs/assets/table-splitter.html-07eab15c.js +1 -1
  150. package/docs/assets/table-splitter.html-7670ee65.js +1 -1
  151. package/docs/assets/table-summary.html-04db434f.js +1 -1
  152. package/docs/assets/table-summary.html-943c65a0.js +1 -1
  153. package/docs/assets/table.html-36253ad7.js +1 -1
  154. package/docs/assets/table.html-7f9c5d1b.js +38 -38
  155. package/docs/assets/table.html-93d53dc8.js +1 -1
  156. package/docs/assets/table.html-ac99b9cb.js +1 -1
  157. package/docs/assets/thumbnail.html-bab1976b.js +1 -1
  158. package/docs/assets/thumbnail.html-eb64e5e8.js +1 -1
  159. package/docs/assets/timestamp.html-4e54f79b.js +13 -13
  160. package/docs/assets/timestamp.html-d0e1b88a.js +1 -1
  161. package/docs/assets/toast.html-58ecbe21.js +1 -1
  162. package/docs/assets/toast.html-c9b9d36b.js +6 -6
  163. package/docs/assets/toolbar.html-83d9f97c.js +1 -1
  164. package/docs/assets/toolbar.html-ff7b8c92.js +1 -1
  165. package/docs/assets/tree.html-d07cbe79.js +23 -23
  166. package/docs/assets/tree.html-ea04193e.js +1 -1
  167. package/docs/assets/uploader-query.html-05590718.js +1 -1
  168. package/docs/assets/uploader-query.html-3175bac5.js +1 -1
  169. package/docs/assets/uploader.html-36da4394.js +2 -2
  170. package/docs/assets/uploader.html-6b5f3079.js +1 -1
  171. package/docs/assets/uploader.html-b9340b57.js +1 -1
  172. package/docs/assets/uploader.html-bc1c22e3.js +1 -1
  173. package/docs/assets/value-format.html-8ae3d47d.js +1 -1
  174. package/docs/assets/value-format.html-afa99b3d.js +1 -1
  175. package/docs/components/column-title.html +35 -35
  176. package/docs/components/data.html +62 -62
  177. package/docs/components/dialog.html +33 -33
  178. package/docs/components/dragger.html +33 -33
  179. package/docs/components/editor-code.html +33 -33
  180. package/docs/components/empty.html +33 -33
  181. package/docs/components/field-date.html +33 -33
  182. package/docs/components/field-table.html +33 -33
  183. package/docs/components/field-text.html +33 -33
  184. package/docs/components/field-tree.html +33 -33
  185. package/docs/components/img.html +33 -33
  186. package/docs/components/input-number.html +33 -33
  187. package/docs/components/list-menu-item.html +33 -33
  188. package/docs/components/list-menu.html +33 -33
  189. package/docs/components/power-page.html +33 -33
  190. package/docs/components/price.html +33 -33
  191. package/docs/components/render.html +33 -33
  192. package/docs/components/search-item.html +33 -33
  193. package/docs/components/search.html +33 -33
  194. package/docs/components/select.html +33 -33
  195. package/docs/components/splitter.html +33 -33
  196. package/docs/components/table-column-fixed.html +33 -33
  197. package/docs/components/table-pagination.html +33 -33
  198. package/docs/components/table-splitter.html +33 -33
  199. package/docs/components/table-summary.html +33 -33
  200. package/docs/components/table.html +33 -33
  201. package/docs/components/thumbnail.html +33 -33
  202. package/docs/components/toolbar.html +33 -33
  203. package/docs/components/uploader-query.html +33 -33
  204. package/docs/components/uploader.html +33 -33
  205. package/docs/components/value-format.html +33 -33
  206. package/docs/css/index.css +3 -3
  207. package/docs/index.html +33 -33
  208. package/docs/utils/alert.html +37 -37
  209. package/docs/utils/area.html +74 -74
  210. package/docs/utils/arr.html +43 -43
  211. package/docs/utils/auth.html +40 -40
  212. package/docs/utils/bus.html +38 -38
  213. package/docs/utils/confirm.html +42 -42
  214. package/docs/utils/copy.html +45 -45
  215. package/docs/utils/dialog.html +100 -100
  216. package/docs/utils/dict.html +55 -55
  217. package/docs/utils/dictOptions.html +37 -37
  218. package/docs/utils/form.html +34 -34
  219. package/docs/utils/getData.html +66 -66
  220. package/docs/utils/getFile.html +35 -35
  221. package/docs/utils/getImage.html +35 -35
  222. package/docs/utils/getTime.html +52 -52
  223. package/docs/utils/index.html +33 -33
  224. package/docs/utils/loading.html +38 -38
  225. package/docs/utils/notify.html +40 -40
  226. package/docs/utils/power.html +125 -125
  227. package/docs/utils/previewImage.html +34 -34
  228. package/docs/utils/price.html +51 -51
  229. package/docs/utils/rule.html +45 -45
  230. package/docs/utils/ruleValid.html +46 -46
  231. package/docs/utils/symbols.html +53 -53
  232. package/docs/utils/table.html +70 -70
  233. package/docs/utils/timestamp.html +45 -45
  234. package/docs/utils/toast.html +38 -38
  235. package/docs/utils/tree.html +55 -55
  236. package/docs/utils/uploader.html +34 -34
  237. package/package.json +1 -1
  238. package/sass/common.scss +184 -184
  239. package/sass/index.scss +12 -12
  240. package/sass/line.scss +39 -39
  241. package/sass/quasar/btn.scss +46 -46
  242. package/sass/quasar/common.scss +3 -3
  243. package/sass/quasar/drawer.scss +6 -6
  244. package/sass/quasar/field.scss +250 -250
  245. package/sass/quasar/loading.scss +6 -6
  246. package/sass/quasar/table.scss +168 -168
  247. package/sass/quasar/toolbar.scss +22 -22
  248. package/sass/variables.scss +140 -140
  249. package/store/index.js +29 -29
  250. package/utils/$auth.js +127 -127
  251. package/utils/$form.js +72 -72
  252. package/utils/$power.js +1464 -1464
  253. package/utils/$render.js +75 -75
  254. package/utils/$rule.js +13 -13
  255. package/utils/$ruleValid.js +10 -10
  256. package/utils/$search.js +416 -416
  257. package/utils/$table.js +1275 -1275
  258. package/utils/alert.js +12 -12
  259. package/utils/area.js +400 -400
  260. package/utils/arr.js +51 -51
  261. package/utils/bus.js +6 -6
  262. package/utils/config.js +62 -60
  263. package/utils/confirm.js +11 -11
  264. package/utils/copy.js +30 -30
  265. package/utils/dialog.js +36 -36
  266. package/utils/dict.js +21 -21
  267. package/utils/dictOptions.js +28 -28
  268. package/utils/getData.js +88 -88
  269. package/utils/getFile.js +67 -67
  270. package/utils/getImage.js +236 -236
  271. package/utils/getTime.js +113 -113
  272. package/utils/index.js +67 -67
  273. package/utils/loading.js +15 -15
  274. package/utils/notify.js +13 -13
  275. package/utils/play.js +40 -40
  276. package/utils/previewImage.js +14 -14
  277. package/utils/price.js +18 -18
  278. package/utils/symbols.js +18 -18
  279. package/utils/timestamp.js +18 -18
  280. package/utils/toast.js +13 -13
  281. package/utils/uploader.js +2099 -2099
  282. package/utils/useAuth.js +30 -30
  283. package/utils/useFileUrl.js +26 -26
  284. package/utils/useRouter.js +47 -47
  285. package/utils/useSearch.js +499 -499
@@ -1,422 +1,422 @@
1
- <template>
2
- <!-- 拆分器 -->
3
- <q-splitter
4
- class="n-splitter"
5
- :class="currentClass"
6
- v-model="currentValue"
7
- v-bind="$attrs"
8
- >
9
- <!-- 插槽 -->
10
- <template
11
- v-for="slotName in slotNames"
12
- v-slot:[slotName]
13
- >
14
- <slot
15
- :name="slotName"
16
- :before="currentBefore"
17
- :after="currentAfter"
18
- :toggleBefore="toggleBefore"
19
- :toggleAfter="toggleAfter"
20
- />
21
- </template>
22
- </q-splitter>
23
- </template>
24
-
25
- <script>
26
- import { computed, ref, watch, inject } from 'vue'
27
- import { useQuasar } from 'quasar'
28
-
29
- import $n_router from '@netang/utils/vue/router'
30
-
31
- import $n_storage from '@netang/utils/storage'
32
- import $n_sleep from '@netang/utils/sleep'
33
- import $n_isValidObject from '@netang/utils/isValidObject'
34
-
35
- import { NPowerKey } from '../../utils/symbols'
36
-
37
- export default {
38
-
39
- /**
40
- * 标识
41
- */
42
- name: 'NSplitter',
43
-
44
- /**
45
- * 声明属性
46
- */
47
- props: {
48
- // 值 v-model
49
- modelValue: {
50
- type: Number,
51
- required: true,
52
- },
53
- // 显示前置插槽 v-model:before
54
- // 注意: 如果非双向绑定, 如 :before 并不会影响内部值变化, 仅做初始值使用
55
- before: {
56
- type: Boolean,
57
- default: true,
58
- },
59
- // 显示后置插槽 v-model:after
60
- // 注意: 如果非双向绑定, 如 :after 并不会影响内部值变化, 仅做初始值使用
61
- after: {
62
- type: Boolean,
63
- default: true,
64
- },
65
- // 手机模式隐藏前置插槽
66
- hideBeforeInMobile: Boolean,
67
- // 手机模式隐藏后插槽
68
- hideAfterInMobile: Boolean,
69
- // 是否开启缓存
70
- cache: [ Boolean, String ],
71
- },
72
-
73
- /**
74
- * 声明事件
75
- */
76
- emits: [
77
- 'update:modelValue',
78
- 'update:before',
79
- 'update:after',
80
- ],
81
-
82
- /**
83
- * 组合式
84
- */
85
- setup(props, { emit, slots }) {
86
-
87
- // ==========【数据】============================================================================================
88
-
89
- // quasar 对象
90
- const $q = useQuasar()
91
-
92
- // 获取权限注入
93
- const $power = inject(NPowerKey)
94
-
95
- // 缓存名
96
- let cacheName = ''
97
-
98
- // 初始值
99
- let rawValue = props.modelValue
100
-
101
- // 初始显示前置插槽
102
- let rawBefore = props.before
103
- let initEmitBefore = true
104
-
105
- // 初始显示后置插槽
106
- let rawAfter = props.after
107
- let initEmitAfter = true
108
-
109
- // 如果开启缓存
110
- if (props.cache) {
111
-
112
- // 设置缓存名
113
- cacheName = `splitter:${props.cache === true ? ($power && $power.routePath ? $power.routePath : $n_router.getRoute('path')) : props.cache}:`
114
-
115
- // 从缓存获取初始值
116
- let cache = $n_storage.get(cacheName + 'modelValue')
117
- if (cache !== null) {
118
- rawValue = cache
119
- }
120
-
121
- // 如果手机模式隐藏前置插槽
122
- if (props.hideBeforeInMobile && $q.platform.is.mobile) {
123
- rawBefore = false
124
- initEmitBefore = false
125
-
126
- } else {
127
- // 从缓存获取初始值
128
- cache = $n_storage.get(cacheName + 'before')
129
- if (cache !== null) {
130
- rawBefore = cache
131
- }
132
- }
133
-
134
- // 如果手机模式隐藏后置插槽
135
- if (props.hideAfterInMobile && $q.platform.is.mobile) {
136
- rawAfter = false
137
- initEmitAfter = false
138
-
139
- } else {
140
- // 从缓存获取初始值
141
- cache = $n_storage.get(cacheName + 'after')
142
- if (cache !== null) {
143
- rawAfter = cache
144
- }
145
- }
146
-
147
- // 如果在手机模式
148
- } else if ($q.platform.is.mobile) {
149
-
150
- // 手机模式隐藏前置插槽
151
- if (props.hideBeforeInMobile) {
152
- rawBefore = false
153
- initEmitBefore = false
154
- }
155
-
156
- // 手机模式隐藏后置插槽
157
- if (props.hideAfterInMobile) {
158
- rawAfter = false
159
- initEmitAfter = false
160
- }
161
- }
162
-
163
- // 创建睡眠实例
164
- const sleep = $n_sleep()
165
-
166
- // 当前值
167
- const currentValue = ref(rawValue)
168
- if (rawValue !== props.modelValue) {
169
- emit('update:modelValue', rawValue)
170
- }
171
-
172
- // 当前是否显示前置插槽
173
- const currentBefore = ref(rawBefore)
174
- if (initEmitBefore) {
175
- emit('update:before', rawBefore)
176
- }
177
-
178
- // 当前是否显示后置插槽
179
- const currentAfter = ref(rawAfter)
180
- if (initEmitAfter) {
181
- emit('update:after', rawAfter)
182
- }
183
-
184
- // ==========【计算属性】=========================================================================================
185
-
186
- /**
187
- * 插槽标识
188
- */
189
- const slotNames = computed(function() {
190
-
191
- const keys = []
192
-
193
- if ($n_isValidObject(slots)) {
194
-
195
- for (const key in slots) {
196
- if (key === 'before') {
197
- if (currentBefore.value) {
198
- keys.push(key)
199
- }
200
-
201
- } else if (key === 'after') {
202
- if (currentAfter.value) {
203
- keys.push(key)
204
- }
205
-
206
- } else {
207
- keys.push(key)
208
- }
209
- }
210
- }
211
-
212
- return keys
213
- })
214
-
215
- /**
216
- * 当前样式
217
- */
218
- const currentClass = computed(function () {
219
-
220
- if (currentBefore.value) {
221
- if (! currentAfter.value) {
222
- return 'n-splitter--hide-before'
223
- }
224
-
225
- } else if (currentAfter.value) {
226
- if (! currentBefore.value) {
227
- return 'n-splitter--hide-after'
228
- }
229
-
230
- } else {
231
- return 'n-splitter--hide'
232
- }
233
- })
234
-
235
- // ==========【方法】============================================================================================
236
-
237
- /**
238
- * 触发更新值
239
- */
240
- async function emitValue(key, val) {
241
-
242
- // 更新值
243
- emit(`update:${key}`, val)
244
-
245
- // 如果开启缓存
246
- if (props.cache) {
247
-
248
- // 延迟执行
249
- await sleep(500, key)
250
-
251
- // 设置缓存(永久缓存)
252
- $n_storage.set(cacheName + key, val, 0)
253
- }
254
- }
255
-
256
- /**
257
- * 切换显示前置插槽
258
- */
259
- function toggleBefore() {
260
- currentBefore.value = ! currentBefore.value
261
- }
262
-
263
- /**
264
- * 切换显示后置插槽
265
- */
266
- function toggleAfter() {
267
- currentAfter.value = ! currentAfter.value
268
- }
269
-
270
- // ==========【监听数据】=========================================================================================
271
-
272
- /**
273
- * 监听声明值
274
- */
275
- watch(() => props.modelValue, function (val) {
276
-
277
- // 如果值有变化
278
- if (val !== currentValue.value) {
279
-
280
- // 更新当前值
281
- currentValue.value = val
282
- }
283
- })
284
-
285
- /**
286
- * 监听声明是否显示前置插槽
287
- */
288
- watch(() => props.before, function (val) {
289
-
290
- // 如果值有变化
291
- if (val !== currentBefore.value) {
292
-
293
- // 设置是否显示前置插槽
294
- currentBefore.value = val
295
- }
296
- })
297
-
298
- /**
299
- * 监听声明是否显示后置插槽
300
- */
301
- watch(() => props.after, function (val) {
302
-
303
- // 如果值有变化
304
- if (val !== currentAfter.value) {
305
-
306
- // 设置是否显示后置插槽
307
- currentAfter.value = val
308
- }
309
- })
310
-
311
- /**
312
- * 监听值
313
- */
314
- watch(currentValue, async function (val) {
315
- // 触发更新值
316
- await emitValue('modelValue', val)
317
- })
318
-
319
- /**
320
- * 监听是否显示前置插槽
321
- */
322
- watch(currentBefore, async function (val) {
323
-
324
- // 触发更新值
325
- await emitValue('before', val)
326
- })
327
-
328
- /**
329
- * 监听是否显示后置插槽
330
- */
331
- watch(currentAfter, async function (val) {
332
-
333
- // 触发更新值
334
- await emitValue('after', val)
335
- })
336
-
337
- // ==========【返回】=============================================================================================
338
-
339
- return {
340
- // 插槽标识
341
- slotNames,
342
- // 当前值
343
- currentValue,
344
- // 当前是否显示前置插槽
345
- currentBefore,
346
- // 当前是否显示后置插槽
347
- currentAfter,
348
- // 当前样式
349
- currentClass,
350
-
351
- // 切换显示前置插槽
352
- toggleBefore,
353
- // 切换显示后置插槽
354
- toggleAfter,
355
- }
356
- }
357
- }
358
- </script>
359
-
360
- <style lang="scss">
361
- .n-splitter {
362
-
363
- &--narrow {
364
- &.q-splitter--vertical > .q-splitter__separator > div {
365
- left: -2px;
366
- right: -2px;
367
- }
368
- }
369
-
370
- // 分离器激活背景色
371
- &.q-splitter--active .q-splitter__separator ,
372
- .q-splitter__separator:hover {
373
- background-color: var(--q-primary);
374
- }
375
-
376
- // 隐藏前置插槽
377
- &--hide-before {
378
- &.q-splitter--horizontal {
379
- .q-splitter__before {
380
- height: 100% !important;
381
- }
382
- }
383
- &.q-splitter--vertical {
384
- .q-splitter__before {
385
- width: 100% !important;
386
- }
387
- }
388
- .q-splitter__after,
389
- .q-splitter__separator {
390
- display: none !important;
391
- }
392
- }
393
-
394
- // 隐藏后置插槽
395
- &--hide-after {
396
- &.q-splitter--horizontal {
397
- .q-splitter__after {
398
- height: 100% !important;
399
- }
400
- }
401
- &.q-splitter--vertical {
402
- .q-splitter__after {
403
- width: 100% !important;
404
- }
405
- }
406
- .q-splitter__before,
407
- .q-splitter__separator {
408
- display: none !important;
409
- }
410
- }
411
-
412
- // 隐藏前后置插槽
413
- &--hide {
414
- .q-splitter__before,
415
- .q-splitter__after,
416
- .q-splitter__separator {
417
- display: none !important;
418
- }
419
- }
420
- }
421
- </style>
422
-
1
+ <template>
2
+ <!-- 拆分器 -->
3
+ <q-splitter
4
+ class="n-splitter"
5
+ :class="currentClass"
6
+ v-model="currentValue"
7
+ v-bind="$attrs"
8
+ >
9
+ <!-- 插槽 -->
10
+ <template
11
+ v-for="slotName in slotNames"
12
+ v-slot:[slotName]
13
+ >
14
+ <slot
15
+ :name="slotName"
16
+ :before="currentBefore"
17
+ :after="currentAfter"
18
+ :toggleBefore="toggleBefore"
19
+ :toggleAfter="toggleAfter"
20
+ />
21
+ </template>
22
+ </q-splitter>
23
+ </template>
24
+
25
+ <script>
26
+ import { computed, ref, watch, inject } from 'vue'
27
+ import { useQuasar } from 'quasar'
28
+
29
+ import $n_router from '@netang/utils/vue/router'
30
+
31
+ import $n_storage from '@netang/utils/storage'
32
+ import $n_sleep from '@netang/utils/sleep'
33
+ import $n_isValidObject from '@netang/utils/isValidObject'
34
+
35
+ import { NPowerKey } from '../../utils/symbols'
36
+
37
+ export default {
38
+
39
+ /**
40
+ * 标识
41
+ */
42
+ name: 'NSplitter',
43
+
44
+ /**
45
+ * 声明属性
46
+ */
47
+ props: {
48
+ // 值 v-model
49
+ modelValue: {
50
+ type: Number,
51
+ required: true,
52
+ },
53
+ // 显示前置插槽 v-model:before
54
+ // 注意: 如果非双向绑定, 如 :before 并不会影响内部值变化, 仅做初始值使用
55
+ before: {
56
+ type: Boolean,
57
+ default: true,
58
+ },
59
+ // 显示后置插槽 v-model:after
60
+ // 注意: 如果非双向绑定, 如 :after 并不会影响内部值变化, 仅做初始值使用
61
+ after: {
62
+ type: Boolean,
63
+ default: true,
64
+ },
65
+ // 手机模式隐藏前置插槽
66
+ hideBeforeInMobile: Boolean,
67
+ // 手机模式隐藏后插槽
68
+ hideAfterInMobile: Boolean,
69
+ // 是否开启缓存
70
+ cache: [ Boolean, String ],
71
+ },
72
+
73
+ /**
74
+ * 声明事件
75
+ */
76
+ emits: [
77
+ 'update:modelValue',
78
+ 'update:before',
79
+ 'update:after',
80
+ ],
81
+
82
+ /**
83
+ * 组合式
84
+ */
85
+ setup(props, { emit, slots }) {
86
+
87
+ // ==========【数据】============================================================================================
88
+
89
+ // quasar 对象
90
+ const $q = useQuasar()
91
+
92
+ // 获取权限注入
93
+ const $power = inject(NPowerKey)
94
+
95
+ // 缓存名
96
+ let cacheName = ''
97
+
98
+ // 初始值
99
+ let rawValue = props.modelValue
100
+
101
+ // 初始显示前置插槽
102
+ let rawBefore = props.before
103
+ let initEmitBefore = true
104
+
105
+ // 初始显示后置插槽
106
+ let rawAfter = props.after
107
+ let initEmitAfter = true
108
+
109
+ // 如果开启缓存
110
+ if (props.cache) {
111
+
112
+ // 设置缓存名
113
+ cacheName = `splitter:${props.cache === true ? ($power && $power.routePath ? $power.routePath : $n_router.getRoute('path')) : props.cache}:`
114
+
115
+ // 从缓存获取初始值
116
+ let cache = $n_storage.get(cacheName + 'modelValue')
117
+ if (cache !== null) {
118
+ rawValue = cache
119
+ }
120
+
121
+ // 如果手机模式隐藏前置插槽
122
+ if (props.hideBeforeInMobile && $q.platform.is.mobile) {
123
+ rawBefore = false
124
+ initEmitBefore = false
125
+
126
+ } else {
127
+ // 从缓存获取初始值
128
+ cache = $n_storage.get(cacheName + 'before')
129
+ if (cache !== null) {
130
+ rawBefore = cache
131
+ }
132
+ }
133
+
134
+ // 如果手机模式隐藏后置插槽
135
+ if (props.hideAfterInMobile && $q.platform.is.mobile) {
136
+ rawAfter = false
137
+ initEmitAfter = false
138
+
139
+ } else {
140
+ // 从缓存获取初始值
141
+ cache = $n_storage.get(cacheName + 'after')
142
+ if (cache !== null) {
143
+ rawAfter = cache
144
+ }
145
+ }
146
+
147
+ // 如果在手机模式
148
+ } else if ($q.platform.is.mobile) {
149
+
150
+ // 手机模式隐藏前置插槽
151
+ if (props.hideBeforeInMobile) {
152
+ rawBefore = false
153
+ initEmitBefore = false
154
+ }
155
+
156
+ // 手机模式隐藏后置插槽
157
+ if (props.hideAfterInMobile) {
158
+ rawAfter = false
159
+ initEmitAfter = false
160
+ }
161
+ }
162
+
163
+ // 创建睡眠实例
164
+ const sleep = $n_sleep()
165
+
166
+ // 当前值
167
+ const currentValue = ref(rawValue)
168
+ if (rawValue !== props.modelValue) {
169
+ emit('update:modelValue', rawValue)
170
+ }
171
+
172
+ // 当前是否显示前置插槽
173
+ const currentBefore = ref(rawBefore)
174
+ if (initEmitBefore) {
175
+ emit('update:before', rawBefore)
176
+ }
177
+
178
+ // 当前是否显示后置插槽
179
+ const currentAfter = ref(rawAfter)
180
+ if (initEmitAfter) {
181
+ emit('update:after', rawAfter)
182
+ }
183
+
184
+ // ==========【计算属性】=========================================================================================
185
+
186
+ /**
187
+ * 插槽标识
188
+ */
189
+ const slotNames = computed(function() {
190
+
191
+ const keys = []
192
+
193
+ if ($n_isValidObject(slots)) {
194
+
195
+ for (const key in slots) {
196
+ if (key === 'before') {
197
+ if (currentBefore.value) {
198
+ keys.push(key)
199
+ }
200
+
201
+ } else if (key === 'after') {
202
+ if (currentAfter.value) {
203
+ keys.push(key)
204
+ }
205
+
206
+ } else {
207
+ keys.push(key)
208
+ }
209
+ }
210
+ }
211
+
212
+ return keys
213
+ })
214
+
215
+ /**
216
+ * 当前样式
217
+ */
218
+ const currentClass = computed(function () {
219
+
220
+ if (currentBefore.value) {
221
+ if (! currentAfter.value) {
222
+ return 'n-splitter--hide-before'
223
+ }
224
+
225
+ } else if (currentAfter.value) {
226
+ if (! currentBefore.value) {
227
+ return 'n-splitter--hide-after'
228
+ }
229
+
230
+ } else {
231
+ return 'n-splitter--hide'
232
+ }
233
+ })
234
+
235
+ // ==========【方法】============================================================================================
236
+
237
+ /**
238
+ * 触发更新值
239
+ */
240
+ async function emitValue(key, val) {
241
+
242
+ // 更新值
243
+ emit(`update:${key}`, val)
244
+
245
+ // 如果开启缓存
246
+ if (props.cache) {
247
+
248
+ // 延迟执行
249
+ await sleep(500, key)
250
+
251
+ // 设置缓存(永久缓存)
252
+ $n_storage.set(cacheName + key, val, 0)
253
+ }
254
+ }
255
+
256
+ /**
257
+ * 切换显示前置插槽
258
+ */
259
+ function toggleBefore() {
260
+ currentBefore.value = ! currentBefore.value
261
+ }
262
+
263
+ /**
264
+ * 切换显示后置插槽
265
+ */
266
+ function toggleAfter() {
267
+ currentAfter.value = ! currentAfter.value
268
+ }
269
+
270
+ // ==========【监听数据】=========================================================================================
271
+
272
+ /**
273
+ * 监听声明值
274
+ */
275
+ watch(() => props.modelValue, function (val) {
276
+
277
+ // 如果值有变化
278
+ if (val !== currentValue.value) {
279
+
280
+ // 更新当前值
281
+ currentValue.value = val
282
+ }
283
+ })
284
+
285
+ /**
286
+ * 监听声明是否显示前置插槽
287
+ */
288
+ watch(() => props.before, function (val) {
289
+
290
+ // 如果值有变化
291
+ if (val !== currentBefore.value) {
292
+
293
+ // 设置是否显示前置插槽
294
+ currentBefore.value = val
295
+ }
296
+ })
297
+
298
+ /**
299
+ * 监听声明是否显示后置插槽
300
+ */
301
+ watch(() => props.after, function (val) {
302
+
303
+ // 如果值有变化
304
+ if (val !== currentAfter.value) {
305
+
306
+ // 设置是否显示后置插槽
307
+ currentAfter.value = val
308
+ }
309
+ })
310
+
311
+ /**
312
+ * 监听值
313
+ */
314
+ watch(currentValue, async function (val) {
315
+ // 触发更新值
316
+ await emitValue('modelValue', val)
317
+ })
318
+
319
+ /**
320
+ * 监听是否显示前置插槽
321
+ */
322
+ watch(currentBefore, async function (val) {
323
+
324
+ // 触发更新值
325
+ await emitValue('before', val)
326
+ })
327
+
328
+ /**
329
+ * 监听是否显示后置插槽
330
+ */
331
+ watch(currentAfter, async function (val) {
332
+
333
+ // 触发更新值
334
+ await emitValue('after', val)
335
+ })
336
+
337
+ // ==========【返回】=============================================================================================
338
+
339
+ return {
340
+ // 插槽标识
341
+ slotNames,
342
+ // 当前值
343
+ currentValue,
344
+ // 当前是否显示前置插槽
345
+ currentBefore,
346
+ // 当前是否显示后置插槽
347
+ currentAfter,
348
+ // 当前样式
349
+ currentClass,
350
+
351
+ // 切换显示前置插槽
352
+ toggleBefore,
353
+ // 切换显示后置插槽
354
+ toggleAfter,
355
+ }
356
+ }
357
+ }
358
+ </script>
359
+
360
+ <style lang="scss">
361
+ .n-splitter {
362
+
363
+ &--narrow {
364
+ &.q-splitter--vertical > .q-splitter__separator > div {
365
+ left: -2px;
366
+ right: -2px;
367
+ }
368
+ }
369
+
370
+ // 分离器激活背景色
371
+ &.q-splitter--active .q-splitter__separator ,
372
+ .q-splitter__separator:hover {
373
+ background-color: var(--q-primary);
374
+ }
375
+
376
+ // 隐藏前置插槽
377
+ &--hide-before {
378
+ &.q-splitter--horizontal {
379
+ .q-splitter__before {
380
+ height: 100% !important;
381
+ }
382
+ }
383
+ &.q-splitter--vertical {
384
+ .q-splitter__before {
385
+ width: 100% !important;
386
+ }
387
+ }
388
+ .q-splitter__after,
389
+ .q-splitter__separator {
390
+ display: none !important;
391
+ }
392
+ }
393
+
394
+ // 隐藏后置插槽
395
+ &--hide-after {
396
+ &.q-splitter--horizontal {
397
+ .q-splitter__after {
398
+ height: 100% !important;
399
+ }
400
+ }
401
+ &.q-splitter--vertical {
402
+ .q-splitter__after {
403
+ width: 100% !important;
404
+ }
405
+ }
406
+ .q-splitter__before,
407
+ .q-splitter__separator {
408
+ display: none !important;
409
+ }
410
+ }
411
+
412
+ // 隐藏前后置插槽
413
+ &--hide {
414
+ .q-splitter__before,
415
+ .q-splitter__after,
416
+ .q-splitter__separator {
417
+ display: none !important;
418
+ }
419
+ }
420
+ }
421
+ </style>
422
+