@netang/quasar 0.2.32 → 0.2.33

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 (289) 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 +387 -387
  10. package/components/dragger/index.vue +203 -203
  11. package/components/drawer/index.vue +303 -303
  12. package/components/editor-code/index.vue +328 -328
  13. package/components/empty/index.vue +82 -82
  14. package/components/field-date/index.vue +860 -860
  15. package/components/field-date/methods.js +100 -100
  16. package/components/field-table/index.vue +1483 -1483
  17. package/components/field-text/index.vue +166 -166
  18. package/components/field-tree/index.vue +755 -755
  19. package/components/img/index.vue +279 -279
  20. package/components/input-number/index.vue +560 -560
  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 -96
  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 +150 -150
  42. package/components/tree/index.vue +1728 -1728
  43. package/components/tree/virtual-scroll.vue +41 -41
  44. package/components/uploader/index.vue +196 -196
  45. package/components/uploader-query/index.vue +945 -945
  46. package/components/value-format/index.vue +274 -274
  47. package/components/virtual-scroll/index.vue +136 -136
  48. package/configs/area3.js +1 -1
  49. package/docs/404.html +33 -33
  50. package/docs/assets/404.html-60b35caa.js +1 -1
  51. package/docs/assets/404.html-d1e63d77.js +1 -1
  52. package/docs/assets/alert.html-b2a2a72f.js +5 -5
  53. package/docs/assets/alert.html-ba46d137.js +1 -1
  54. package/docs/assets/app-9f30aa4b.js +6 -6
  55. package/docs/assets/area.html-01b9b58d.js +42 -42
  56. package/docs/assets/area.html-9a4fce6a.js +1 -1
  57. package/docs/assets/arr.html-145d27e7.js +1 -1
  58. package/docs/assets/arr.html-674e65ab.js +11 -11
  59. package/docs/assets/auth.html-579fa830.js +1 -1
  60. package/docs/assets/auth.html-8544ed95.js +8 -8
  61. package/docs/assets/bus.html-c71254aa.js +1 -1
  62. package/docs/assets/bus.html-dc7d3d19.js +6 -6
  63. package/docs/assets/column-title.html-c735cb5a.js +3 -3
  64. package/docs/assets/column-title.html-e9316762.js +1 -1
  65. package/docs/assets/confirm.html-ddfdc27f.js +10 -10
  66. package/docs/assets/confirm.html-ef3e2bef.js +1 -1
  67. package/docs/assets/copy.html-d20345b6.js +1 -1
  68. package/docs/assets/copy.html-ef8c8571.js +13 -13
  69. package/docs/assets/data.html-6432175d.js +30 -30
  70. package/docs/assets/data.html-a3b05d5b.js +1 -1
  71. package/docs/assets/dialog.html-1f698e5a.js +1 -1
  72. package/docs/assets/dialog.html-62902b83.js +68 -68
  73. package/docs/assets/dialog.html-baea77c9.js +1 -1
  74. package/docs/assets/dialog.html-bb082fc4.js +1 -1
  75. package/docs/assets/dict.html-1311da3d.js +23 -23
  76. package/docs/assets/dict.html-b96fbf0c.js +1 -1
  77. package/docs/assets/dictOptions.html-7c4f40a5.js +1 -1
  78. package/docs/assets/dictOptions.html-fb99d175.js +5 -5
  79. package/docs/assets/dragger.html-668d3efa.js +1 -1
  80. package/docs/assets/dragger.html-749d585a.js +1 -1
  81. package/docs/assets/editor-code.html-6ab26ea9.js +1 -1
  82. package/docs/assets/editor-code.html-d196205d.js +1 -1
  83. package/docs/assets/empty.html-1c139131.js +1 -1
  84. package/docs/assets/empty.html-1e9c441d.js +1 -1
  85. package/docs/assets/field-date.html-069fdb13.js +1 -1
  86. package/docs/assets/field-date.html-ad204aa9.js +1 -1
  87. package/docs/assets/field-table.html-ce480f03.js +1 -1
  88. package/docs/assets/field-table.html-d9236160.js +1 -1
  89. package/docs/assets/field-text.html-7277c62f.js +1 -1
  90. package/docs/assets/field-text.html-ccb4cecf.js +1 -1
  91. package/docs/assets/field-tree.html-519bfb45.js +1 -1
  92. package/docs/assets/field-tree.html-fdc748d6.js +1 -1
  93. package/docs/assets/form.html-2b562c37.js +2 -2
  94. package/docs/assets/form.html-75104cd5.js +1 -1
  95. package/docs/assets/framework-204010b2.js +5 -5
  96. package/docs/assets/getData.html-990e3787.js +1 -1
  97. package/docs/assets/getData.html-bb72025f.js +34 -34
  98. package/docs/assets/getFile.html-42368004.js +1 -1
  99. package/docs/assets/getFile.html-99abd054.js +3 -3
  100. package/docs/assets/getImage.html-3429c5a1.js +1 -1
  101. package/docs/assets/getImage.html-4d886d83.js +3 -3
  102. package/docs/assets/getTime.html-7435f922.js +1 -1
  103. package/docs/assets/getTime.html-b37f49eb.js +20 -20
  104. package/docs/assets/img.html-7d1da657.js +1 -1
  105. package/docs/assets/img.html-fbea1105.js +1 -1
  106. package/docs/assets/index.html-1695dd7c.js +1 -1
  107. package/docs/assets/index.html-65a4aa67.js +1 -1
  108. package/docs/assets/index.html-7b98d5bd.js +1 -1
  109. package/docs/assets/index.html-c01f2648.js +1 -1
  110. package/docs/assets/input-number.html-0b250d2a.js +1 -1
  111. package/docs/assets/input-number.html-a8eb0378.js +1 -1
  112. package/docs/assets/list-menu-item.html-7f1b4611.js +1 -1
  113. package/docs/assets/list-menu-item.html-84ed5ab8.js +1 -1
  114. package/docs/assets/list-menu.html-28b4163f.js +1 -1
  115. package/docs/assets/list-menu.html-cb6ba95b.js +1 -1
  116. package/docs/assets/loading.html-dae9e39d.js +6 -6
  117. package/docs/assets/loading.html-dc74c9e6.js +1 -1
  118. package/docs/assets/notify.html-e6c4c514.js +1 -1
  119. package/docs/assets/notify.html-f2c4d914.js +8 -8
  120. package/docs/assets/power-page.html-32e02f82.js +1 -1
  121. package/docs/assets/power-page.html-485e77da.js +1 -1
  122. package/docs/assets/power.html-d258cc19.js +93 -93
  123. package/docs/assets/power.html-e490bd32.js +1 -1
  124. package/docs/assets/previewImage.html-6a6b4245.js +1 -1
  125. package/docs/assets/previewImage.html-c5b7e945.js +2 -2
  126. package/docs/assets/price.html-1882c548.js +19 -19
  127. package/docs/assets/price.html-94d3f5be.js +1 -1
  128. package/docs/assets/price.html-d213df0f.js +1 -1
  129. package/docs/assets/price.html-deaf880f.js +1 -1
  130. package/docs/assets/render.html-8efcbdd4.js +1 -1
  131. package/docs/assets/render.html-df228e38.js +1 -1
  132. package/docs/assets/rule.html-2cd57fc2.js +13 -13
  133. package/docs/assets/rule.html-61662001.js +1 -1
  134. package/docs/assets/ruleValid.html-04fe2552.js +1 -1
  135. package/docs/assets/ruleValid.html-e0a776af.js +14 -14
  136. package/docs/assets/search-0782d0d1.svg +1 -1
  137. package/docs/assets/search-item.html-3f75394c.js +1 -1
  138. package/docs/assets/search-item.html-4e942ecd.js +1 -1
  139. package/docs/assets/search.html-2807043e.js +1 -1
  140. package/docs/assets/search.html-c24f8806.js +1 -1
  141. package/docs/assets/select.html-00d0607c.js +1 -1
  142. package/docs/assets/select.html-de7731f5.js +1 -1
  143. package/docs/assets/splitter.html-56f51a70.js +1 -1
  144. package/docs/assets/splitter.html-f5c836d7.js +1 -1
  145. package/docs/assets/style-161e43ab.css +1 -1
  146. package/docs/assets/symbols.html-a6aea4bf.js +1 -1
  147. package/docs/assets/symbols.html-b1f65bad.js +21 -21
  148. package/docs/assets/table-column-fixed.html-3a69e7b2.js +1 -1
  149. package/docs/assets/table-column-fixed.html-e763c38b.js +1 -1
  150. package/docs/assets/table-pagination.html-236934d3.js +1 -1
  151. package/docs/assets/table-pagination.html-c37ee2ac.js +1 -1
  152. package/docs/assets/table-splitter.html-07eab15c.js +1 -1
  153. package/docs/assets/table-splitter.html-7670ee65.js +1 -1
  154. package/docs/assets/table-summary.html-04db434f.js +1 -1
  155. package/docs/assets/table-summary.html-943c65a0.js +1 -1
  156. package/docs/assets/table.html-36253ad7.js +1 -1
  157. package/docs/assets/table.html-7f9c5d1b.js +38 -38
  158. package/docs/assets/table.html-93d53dc8.js +1 -1
  159. package/docs/assets/table.html-ac99b9cb.js +1 -1
  160. package/docs/assets/thumbnail.html-bab1976b.js +1 -1
  161. package/docs/assets/thumbnail.html-eb64e5e8.js +1 -1
  162. package/docs/assets/timestamp.html-4e54f79b.js +13 -13
  163. package/docs/assets/timestamp.html-d0e1b88a.js +1 -1
  164. package/docs/assets/toast.html-58ecbe21.js +1 -1
  165. package/docs/assets/toast.html-c9b9d36b.js +6 -6
  166. package/docs/assets/toolbar.html-83d9f97c.js +1 -1
  167. package/docs/assets/toolbar.html-ff7b8c92.js +1 -1
  168. package/docs/assets/tree.html-d07cbe79.js +23 -23
  169. package/docs/assets/tree.html-ea04193e.js +1 -1
  170. package/docs/assets/uploader-query.html-05590718.js +1 -1
  171. package/docs/assets/uploader-query.html-3175bac5.js +1 -1
  172. package/docs/assets/uploader.html-36da4394.js +2 -2
  173. package/docs/assets/uploader.html-6b5f3079.js +1 -1
  174. package/docs/assets/uploader.html-b9340b57.js +1 -1
  175. package/docs/assets/uploader.html-bc1c22e3.js +1 -1
  176. package/docs/assets/value-format.html-8ae3d47d.js +1 -1
  177. package/docs/assets/value-format.html-afa99b3d.js +1 -1
  178. package/docs/components/column-title.html +35 -35
  179. package/docs/components/data.html +62 -62
  180. package/docs/components/dialog.html +33 -33
  181. package/docs/components/dragger.html +33 -33
  182. package/docs/components/editor-code.html +33 -33
  183. package/docs/components/empty.html +33 -33
  184. package/docs/components/field-date.html +33 -33
  185. package/docs/components/field-table.html +33 -33
  186. package/docs/components/field-text.html +33 -33
  187. package/docs/components/field-tree.html +33 -33
  188. package/docs/components/img.html +33 -33
  189. package/docs/components/input-number.html +33 -33
  190. package/docs/components/list-menu-item.html +33 -33
  191. package/docs/components/list-menu.html +33 -33
  192. package/docs/components/power-page.html +33 -33
  193. package/docs/components/price.html +33 -33
  194. package/docs/components/render.html +33 -33
  195. package/docs/components/search-item.html +33 -33
  196. package/docs/components/search.html +33 -33
  197. package/docs/components/select.html +33 -33
  198. package/docs/components/splitter.html +33 -33
  199. package/docs/components/table-column-fixed.html +33 -33
  200. package/docs/components/table-pagination.html +33 -33
  201. package/docs/components/table-splitter.html +33 -33
  202. package/docs/components/table-summary.html +33 -33
  203. package/docs/components/table.html +33 -33
  204. package/docs/components/thumbnail.html +33 -33
  205. package/docs/components/toolbar.html +33 -33
  206. package/docs/components/uploader-query.html +33 -33
  207. package/docs/components/uploader.html +33 -33
  208. package/docs/components/value-format.html +33 -33
  209. package/docs/css/index.css +3 -3
  210. package/docs/index.html +33 -33
  211. package/docs/utils/alert.html +37 -37
  212. package/docs/utils/area.html +74 -74
  213. package/docs/utils/arr.html +43 -43
  214. package/docs/utils/auth.html +40 -40
  215. package/docs/utils/bus.html +38 -38
  216. package/docs/utils/confirm.html +42 -42
  217. package/docs/utils/copy.html +45 -45
  218. package/docs/utils/dialog.html +100 -100
  219. package/docs/utils/dict.html +55 -55
  220. package/docs/utils/dictOptions.html +37 -37
  221. package/docs/utils/form.html +34 -34
  222. package/docs/utils/getData.html +66 -66
  223. package/docs/utils/getFile.html +35 -35
  224. package/docs/utils/getImage.html +35 -35
  225. package/docs/utils/getTime.html +52 -52
  226. package/docs/utils/index.html +33 -33
  227. package/docs/utils/loading.html +38 -38
  228. package/docs/utils/notify.html +40 -40
  229. package/docs/utils/power.html +125 -125
  230. package/docs/utils/previewImage.html +34 -34
  231. package/docs/utils/price.html +51 -51
  232. package/docs/utils/rule.html +45 -45
  233. package/docs/utils/ruleValid.html +46 -46
  234. package/docs/utils/symbols.html +53 -53
  235. package/docs/utils/table.html +70 -70
  236. package/docs/utils/timestamp.html +45 -45
  237. package/docs/utils/toast.html +38 -38
  238. package/docs/utils/tree.html +55 -55
  239. package/docs/utils/uploader.html +34 -34
  240. package/package.json +25 -25
  241. package/sass/common.scss +184 -184
  242. package/sass/index.scss +12 -12
  243. package/sass/line.scss +39 -39
  244. package/sass/quasar/btn.scss +46 -46
  245. package/sass/quasar/common.scss +3 -3
  246. package/sass/quasar/drawer.scss +6 -6
  247. package/sass/quasar/field.scss +259 -259
  248. package/sass/quasar/loading.scss +6 -6
  249. package/sass/quasar/table.scss +168 -168
  250. package/sass/quasar/toolbar.scss +22 -22
  251. package/sass/variables.scss +140 -140
  252. package/store/index.js +29 -29
  253. package/utils/$auth.js +128 -128
  254. package/utils/$form.js +72 -72
  255. package/utils/$power.js +1494 -1494
  256. package/utils/$render.js +75 -75
  257. package/utils/$rule.js +13 -13
  258. package/utils/$ruleValid.js +10 -10
  259. package/utils/$search.js +416 -416
  260. package/utils/$table.js +1351 -1348
  261. package/utils/$tree.js +682 -682
  262. package/utils/alert.js +12 -12
  263. package/utils/area.js +400 -400
  264. package/utils/arr.js +51 -51
  265. package/utils/bus.js +6 -6
  266. package/utils/config.js +66 -66
  267. package/utils/confirm.js +11 -11
  268. package/utils/copy.js +30 -30
  269. package/utils/dialog.js +36 -36
  270. package/utils/dict.js +21 -21
  271. package/utils/dictOptions.js +28 -28
  272. package/utils/getData.js +88 -88
  273. package/utils/getFile.js +67 -67
  274. package/utils/getImage.js +276 -276
  275. package/utils/getTime.js +113 -113
  276. package/utils/index.js +67 -67
  277. package/utils/loading.js +15 -15
  278. package/utils/notify.js +13 -13
  279. package/utils/play.js +40 -40
  280. package/utils/previewImage.js +14 -14
  281. package/utils/price.js +18 -18
  282. package/utils/symbols.js +18 -18
  283. package/utils/timestamp.js +18 -18
  284. package/utils/toast.js +13 -13
  285. package/utils/uploader.js +2114 -2114
  286. package/utils/useAuth.js +30 -30
  287. package/utils/useFileUrl.js +26 -26
  288. package/utils/useRouter.js +47 -47
  289. package/utils/useSearch.js +587 -562
package/utils/area.js CHANGED
@@ -1,400 +1,400 @@
1
- import $n_cloneDeep from 'lodash/cloneDeep'
2
- import $n_get from 'lodash/get'
3
- import $n_isValidArray from '@netang/utils/isValidArray'
4
- import $n_indexOf from '@netang/utils/indexOf'
5
- import $n_toTree from '@netang/utils/toTree'
6
- import $n_trimString from '@netang/utils/trimString'
7
- import $n_replaceAll from '@netang/utils/replaceAll'
8
-
9
- // 地址数据缓存
10
- let _areaData = null
11
-
12
- /**
13
- * 获取地区数据
14
- */
15
- function getData(level = 3, options) {
16
- return _getData(() => import('../configs/area3'), level, options)
17
- }
18
- function _getData(areaData, level, options) {
19
- return new Promise(function(resolve) {
20
-
21
- // 执行
22
- function run() {
23
-
24
- const para = Object.assign({
25
- // 忽略地区 id
26
- ignore: [],
27
- }, options)
28
-
29
- // 克隆树数据
30
- const treeData = $n_cloneDeep(_areaData)
31
- const all = {}
32
- const rows = []
33
-
34
- // 是否有忽略省市区 id
35
- const isIgnore = $n_isValidArray(para.ignore)
36
- function checkIgnore(id) {
37
- return isIgnore && $n_indexOf(para.ignore, id) > -1
38
- }
39
-
40
- // 省
41
- for (const item1 of treeData) {
42
-
43
- // 如果有忽略省
44
- if (checkIgnore(item1[1])) {
45
- continue
46
- }
47
-
48
- all[item1[1]] = {
49
- id: item1[1],
50
- pid: 0,
51
- title: item1[0],
52
- level: 1,
53
- }
54
-
55
- // 市
56
- if (level > 1 && $n_isValidArray(item1[2])) {
57
-
58
- for (let index2 = 0, len2 = item1[2].length; index2 < len2; index2++) {
59
- const item2 = item1[2][index2]
60
-
61
- // 如果有忽略市
62
- if (checkIgnore(item2[1])) {
63
- continue
64
- }
65
-
66
- all[item2[1]] = {
67
- id: item2[1],
68
- pid: item1[1],
69
- title: item2[0],
70
- level: 2,
71
- }
72
- item1[2][index2] = all[item2[1]]
73
-
74
- // 区
75
- if (level > 2 && $n_isValidArray(item2[2])) {
76
- for (let index3 = 0, len3 = item2[2].length; index3 < len3; index3++) {
77
- const item3 = item2[2][index3]
78
-
79
- // 如果有忽略区
80
- if (checkIgnore(item3[1])) {
81
- continue
82
- }
83
-
84
- all[item3[1]] = {
85
- id: item3[1],
86
- pid: item2[1],
87
- title: item3[0],
88
- level: 3,
89
- }
90
- item2[2][index3] = all[item3[1]]
91
- }
92
- }
93
- }
94
- }
95
- }
96
-
97
- for (const key in all) {
98
- rows.push(all[key])
99
- }
100
-
101
- resolve($n_toTree({
102
- data: rows,
103
- }))
104
- }
105
-
106
- if (_areaData) {
107
- run()
108
- return
109
- }
110
-
111
- areaData()
112
- .then((res)=>{
113
- _areaData = res.default
114
- run()
115
- })
116
- })
117
- }
118
-
119
- /**
120
- * 替换地址
121
- */
122
- function replaceArea(val) {
123
- val = $n_trimString(val)
124
- return val.replace(/直辖市/g, '')
125
- .replace(/市/g, '')
126
- .replace(/区/g, '')
127
- .replace(/自治县/g, '')
128
- .replace(/自治州/g, '')
129
- .replace(/县/g, '')
130
- }
131
-
132
- /**
133
- * 获取地区详情
134
- */
135
- async function getInfo(options) {
136
-
137
- let {
138
- // 地址数据
139
- areaData,
140
- // 级别
141
- level,
142
- // 地区编码
143
- code,
144
- // 省文字
145
- provinceText,
146
- // 市文字
147
- cityText,
148
- // 区文字
149
- areaText,
150
- // 详细区域文字
151
- regionText,
152
-
153
- } = Object.assign({
154
- // 地址数据
155
- areaData: null,
156
- // 级别
157
- level: 3,
158
- // 地区编码
159
- code: 0,
160
- // 省文字
161
- provinceText: '',
162
- // 市文字
163
- cityText: '',
164
- // 区文字
165
- areaText: '',
166
- // 详细区域文字
167
- regionText: '',
168
- }, options)
169
-
170
- if (! areaData) {
171
- areaData = await getData(level)
172
- }
173
-
174
- const { attrs, nodes, tree } = areaData
175
-
176
- // 先通过地区编码来查找
177
- let data = $n_get(nodes, code)
178
-
179
- // 如果没有找到, 则通过文字来查找
180
- if (! data) {
181
-
182
- function getData() {
183
-
184
- // 获取省 start --------------------------------------------------
185
- const isAreaText = provinceText && cityText
186
- if (isAreaText || regionText) {
187
-
188
- for (const item1 of tree) {
189
-
190
- const {
191
- text: text1,
192
- children: children1,
193
- } = item1
194
-
195
- const _text1 = $n_replaceAll(text1, '省', '')
196
-
197
- if (
198
- isAreaText ?
199
- (
200
- provinceText === text1
201
- || $n_replaceAll(provinceText, '省', '') === _text1
202
- )
203
- : regionText.indexOf(_text1) > -1
204
- ) {
205
-
206
- // 获取市 start --------------------------------------------------
207
- if ($n_isValidArray(children1)) {
208
-
209
- for (const item2 of children1) {
210
-
211
- const {
212
- text: text2,
213
- children: children2,
214
- } = item2
215
-
216
- const _text2 = replaceArea(text2)
217
-
218
- if (
219
- isAreaText ?
220
- (
221
- cityText === text2
222
- || replaceArea(cityText) === _text2
223
- )
224
- : regionText.indexOf(_text2) > -1
225
- ) {
226
- // 获取区 start --------------------------------------------------
227
- if ($n_isValidArray(children2)) {
228
-
229
- if (areaText || regionText) {
230
-
231
- for (const item3 of children2) {
232
-
233
- const {
234
- text: text3,
235
- } = item3
236
- const _text3 = replaceArea(text3)
237
-
238
- if (
239
- areaText ?
240
- (
241
- areaText === text3
242
- || replaceArea(areaText) === _text3
243
- )
244
- : regionText.indexOf(_text3) > -1
245
- ) {
246
- return item3
247
- }
248
- }
249
- }
250
-
251
- if (! data) {
252
- return children2[0]
253
- }
254
- }
255
- return false
256
- // 获取市 end --------------------------------------------------
257
- }
258
- }
259
- }
260
- return false
261
- // 获取市 end --------------------------------------------------
262
- }
263
- }
264
- }
265
- return false
266
- }
267
-
268
- data = getData()
269
- if (! data) {
270
- return false
271
- }
272
- }
273
-
274
- // 获取区
275
- const {
276
- attr,
277
- } = data
278
-
279
- const res = Object.assign({}, attr)
280
-
281
- let province
282
- let city
283
- let area
284
-
285
- // 如果为区
286
- if (level === 3) {
287
-
288
- // 获取区
289
- area = attr
290
-
291
- // 获取市
292
- city = attrs[area.pid]
293
-
294
- // 获取省
295
- province = attrs[city.pid]
296
-
297
- // 如果为市
298
- } else if (level === 2) {
299
-
300
- // 获取市
301
- city = attr
302
-
303
- // 获取市下第一个区
304
- area = nodes[city.id].children[0]
305
-
306
- // 获取省
307
- province = attrs[city.pid]
308
-
309
- // 否则为省
310
- } else {
311
-
312
- // 获取省
313
- province = attr
314
-
315
- // 获取省下第一个市
316
- city = nodes[province.id].children[0]
317
-
318
- // 获取市下第一个区
319
- area = nodes[city.id].children[0]
320
- }
321
-
322
- // 获取地区
323
- res.region = [
324
- province,
325
- ]
326
-
327
- // 获取地区 ids 数组
328
- res.region_ids = [
329
- province.id,
330
- ]
331
-
332
- // 获取地区文字
333
- const texts = [
334
- province.title,
335
- ]
336
-
337
- if (level >= 2) {
338
- res.region.push(city)
339
- res.region_ids.push(city.id)
340
-
341
- if (city.title !== province.title) {
342
- texts.push(city.title)
343
- }
344
-
345
- if (level === 3) {
346
- res.region.push(area)
347
- res.region_ids.push(area.id)
348
-
349
- const _areaText = area.title.replace('市辖区', '')
350
- if (texts[texts.length - 1] !== _areaText) {
351
- texts.push(_areaText)
352
- }
353
- }
354
- }
355
-
356
- res.region_text = texts.join('')
357
-
358
- // 返回数据示例
359
- // level: 3
360
- // pid: 140700
361
- // region:
362
- // [
363
- // {
364
- // level: 1
365
- // pid: 0
366
- // text: "山西省"
367
- // value: 140000
368
- // },
369
- // {
370
- // level: 2
371
- // pid: 140000
372
- // text: "晋中市"
373
- // value: 140700
374
- // },
375
- // {
376
- // level: 3
377
- // pid: 140700
378
- // text: "介休市"
379
- // value: 140781
380
- // }
381
- // ]
382
- // region_ids: [140000, 140700, 140781]
383
- // region_text: "山西省晋中市介休市"
384
- // text: "介休市"
385
- // value: 140781
386
-
387
- return res
388
- }
389
-
390
- /**
391
- * 地区
392
- */
393
- const area = {
394
- // 获取地区数据
395
- getData,
396
- // 获取地区详情
397
- getInfo,
398
- }
399
-
400
- export default area
1
+ import $n_cloneDeep from 'lodash/cloneDeep'
2
+ import $n_get from 'lodash/get'
3
+ import $n_isValidArray from '@netang/utils/isValidArray'
4
+ import $n_indexOf from '@netang/utils/indexOf'
5
+ import $n_toTree from '@netang/utils/toTree'
6
+ import $n_trimString from '@netang/utils/trimString'
7
+ import $n_replaceAll from '@netang/utils/replaceAll'
8
+
9
+ // 地址数据缓存
10
+ let _areaData = null
11
+
12
+ /**
13
+ * 获取地区数据
14
+ */
15
+ function getData(level = 3, options) {
16
+ return _getData(() => import('../configs/area3'), level, options)
17
+ }
18
+ function _getData(areaData, level, options) {
19
+ return new Promise(function(resolve) {
20
+
21
+ // 执行
22
+ function run() {
23
+
24
+ const para = Object.assign({
25
+ // 忽略地区 id
26
+ ignore: [],
27
+ }, options)
28
+
29
+ // 克隆树数据
30
+ const treeData = $n_cloneDeep(_areaData)
31
+ const all = {}
32
+ const rows = []
33
+
34
+ // 是否有忽略省市区 id
35
+ const isIgnore = $n_isValidArray(para.ignore)
36
+ function checkIgnore(id) {
37
+ return isIgnore && $n_indexOf(para.ignore, id) > -1
38
+ }
39
+
40
+ // 省
41
+ for (const item1 of treeData) {
42
+
43
+ // 如果有忽略省
44
+ if (checkIgnore(item1[1])) {
45
+ continue
46
+ }
47
+
48
+ all[item1[1]] = {
49
+ id: item1[1],
50
+ pid: 0,
51
+ title: item1[0],
52
+ level: 1,
53
+ }
54
+
55
+ // 市
56
+ if (level > 1 && $n_isValidArray(item1[2])) {
57
+
58
+ for (let index2 = 0, len2 = item1[2].length; index2 < len2; index2++) {
59
+ const item2 = item1[2][index2]
60
+
61
+ // 如果有忽略市
62
+ if (checkIgnore(item2[1])) {
63
+ continue
64
+ }
65
+
66
+ all[item2[1]] = {
67
+ id: item2[1],
68
+ pid: item1[1],
69
+ title: item2[0],
70
+ level: 2,
71
+ }
72
+ item1[2][index2] = all[item2[1]]
73
+
74
+ // 区
75
+ if (level > 2 && $n_isValidArray(item2[2])) {
76
+ for (let index3 = 0, len3 = item2[2].length; index3 < len3; index3++) {
77
+ const item3 = item2[2][index3]
78
+
79
+ // 如果有忽略区
80
+ if (checkIgnore(item3[1])) {
81
+ continue
82
+ }
83
+
84
+ all[item3[1]] = {
85
+ id: item3[1],
86
+ pid: item2[1],
87
+ title: item3[0],
88
+ level: 3,
89
+ }
90
+ item2[2][index3] = all[item3[1]]
91
+ }
92
+ }
93
+ }
94
+ }
95
+ }
96
+
97
+ for (const key in all) {
98
+ rows.push(all[key])
99
+ }
100
+
101
+ resolve($n_toTree({
102
+ data: rows,
103
+ }))
104
+ }
105
+
106
+ if (_areaData) {
107
+ run()
108
+ return
109
+ }
110
+
111
+ areaData()
112
+ .then((res)=>{
113
+ _areaData = res.default
114
+ run()
115
+ })
116
+ })
117
+ }
118
+
119
+ /**
120
+ * 替换地址
121
+ */
122
+ function replaceArea(val) {
123
+ val = $n_trimString(val)
124
+ return val.replace(/直辖市/g, '')
125
+ .replace(/市/g, '')
126
+ .replace(/区/g, '')
127
+ .replace(/自治县/g, '')
128
+ .replace(/自治州/g, '')
129
+ .replace(/县/g, '')
130
+ }
131
+
132
+ /**
133
+ * 获取地区详情
134
+ */
135
+ async function getInfo(options) {
136
+
137
+ let {
138
+ // 地址数据
139
+ areaData,
140
+ // 级别
141
+ level,
142
+ // 地区编码
143
+ code,
144
+ // 省文字
145
+ provinceText,
146
+ // 市文字
147
+ cityText,
148
+ // 区文字
149
+ areaText,
150
+ // 详细区域文字
151
+ regionText,
152
+
153
+ } = Object.assign({
154
+ // 地址数据
155
+ areaData: null,
156
+ // 级别
157
+ level: 3,
158
+ // 地区编码
159
+ code: 0,
160
+ // 省文字
161
+ provinceText: '',
162
+ // 市文字
163
+ cityText: '',
164
+ // 区文字
165
+ areaText: '',
166
+ // 详细区域文字
167
+ regionText: '',
168
+ }, options)
169
+
170
+ if (! areaData) {
171
+ areaData = await getData(level)
172
+ }
173
+
174
+ const { attrs, nodes, tree } = areaData
175
+
176
+ // 先通过地区编码来查找
177
+ let data = $n_get(nodes, code)
178
+
179
+ // 如果没有找到, 则通过文字来查找
180
+ if (! data) {
181
+
182
+ function getData() {
183
+
184
+ // 获取省 start --------------------------------------------------
185
+ const isAreaText = provinceText && cityText
186
+ if (isAreaText || regionText) {
187
+
188
+ for (const item1 of tree) {
189
+
190
+ const {
191
+ text: text1,
192
+ children: children1,
193
+ } = item1
194
+
195
+ const _text1 = $n_replaceAll(text1, '省', '')
196
+
197
+ if (
198
+ isAreaText ?
199
+ (
200
+ provinceText === text1
201
+ || $n_replaceAll(provinceText, '省', '') === _text1
202
+ )
203
+ : regionText.indexOf(_text1) > -1
204
+ ) {
205
+
206
+ // 获取市 start --------------------------------------------------
207
+ if ($n_isValidArray(children1)) {
208
+
209
+ for (const item2 of children1) {
210
+
211
+ const {
212
+ text: text2,
213
+ children: children2,
214
+ } = item2
215
+
216
+ const _text2 = replaceArea(text2)
217
+
218
+ if (
219
+ isAreaText ?
220
+ (
221
+ cityText === text2
222
+ || replaceArea(cityText) === _text2
223
+ )
224
+ : regionText.indexOf(_text2) > -1
225
+ ) {
226
+ // 获取区 start --------------------------------------------------
227
+ if ($n_isValidArray(children2)) {
228
+
229
+ if (areaText || regionText) {
230
+
231
+ for (const item3 of children2) {
232
+
233
+ const {
234
+ text: text3,
235
+ } = item3
236
+ const _text3 = replaceArea(text3)
237
+
238
+ if (
239
+ areaText ?
240
+ (
241
+ areaText === text3
242
+ || replaceArea(areaText) === _text3
243
+ )
244
+ : regionText.indexOf(_text3) > -1
245
+ ) {
246
+ return item3
247
+ }
248
+ }
249
+ }
250
+
251
+ if (! data) {
252
+ return children2[0]
253
+ }
254
+ }
255
+ return false
256
+ // 获取市 end --------------------------------------------------
257
+ }
258
+ }
259
+ }
260
+ return false
261
+ // 获取市 end --------------------------------------------------
262
+ }
263
+ }
264
+ }
265
+ return false
266
+ }
267
+
268
+ data = getData()
269
+ if (! data) {
270
+ return false
271
+ }
272
+ }
273
+
274
+ // 获取区
275
+ const {
276
+ attr,
277
+ } = data
278
+
279
+ const res = Object.assign({}, attr)
280
+
281
+ let province
282
+ let city
283
+ let area
284
+
285
+ // 如果为区
286
+ if (level === 3) {
287
+
288
+ // 获取区
289
+ area = attr
290
+
291
+ // 获取市
292
+ city = attrs[area.pid]
293
+
294
+ // 获取省
295
+ province = attrs[city.pid]
296
+
297
+ // 如果为市
298
+ } else if (level === 2) {
299
+
300
+ // 获取市
301
+ city = attr
302
+
303
+ // 获取市下第一个区
304
+ area = nodes[city.id].children[0]
305
+
306
+ // 获取省
307
+ province = attrs[city.pid]
308
+
309
+ // 否则为省
310
+ } else {
311
+
312
+ // 获取省
313
+ province = attr
314
+
315
+ // 获取省下第一个市
316
+ city = nodes[province.id].children[0]
317
+
318
+ // 获取市下第一个区
319
+ area = nodes[city.id].children[0]
320
+ }
321
+
322
+ // 获取地区
323
+ res.region = [
324
+ province,
325
+ ]
326
+
327
+ // 获取地区 ids 数组
328
+ res.region_ids = [
329
+ province.id,
330
+ ]
331
+
332
+ // 获取地区文字
333
+ const texts = [
334
+ province.title,
335
+ ]
336
+
337
+ if (level >= 2) {
338
+ res.region.push(city)
339
+ res.region_ids.push(city.id)
340
+
341
+ if (city.title !== province.title) {
342
+ texts.push(city.title)
343
+ }
344
+
345
+ if (level === 3) {
346
+ res.region.push(area)
347
+ res.region_ids.push(area.id)
348
+
349
+ const _areaText = area.title.replace('市辖区', '')
350
+ if (texts[texts.length - 1] !== _areaText) {
351
+ texts.push(_areaText)
352
+ }
353
+ }
354
+ }
355
+
356
+ res.region_text = texts.join('')
357
+
358
+ // 返回数据示例
359
+ // level: 3
360
+ // pid: 140700
361
+ // region:
362
+ // [
363
+ // {
364
+ // level: 1
365
+ // pid: 0
366
+ // text: "山西省"
367
+ // value: 140000
368
+ // },
369
+ // {
370
+ // level: 2
371
+ // pid: 140000
372
+ // text: "晋中市"
373
+ // value: 140700
374
+ // },
375
+ // {
376
+ // level: 3
377
+ // pid: 140700
378
+ // text: "介休市"
379
+ // value: 140781
380
+ // }
381
+ // ]
382
+ // region_ids: [140000, 140700, 140781]
383
+ // region_text: "山西省晋中市介休市"
384
+ // text: "介休市"
385
+ // value: 140781
386
+
387
+ return res
388
+ }
389
+
390
+ /**
391
+ * 地区
392
+ */
393
+ const area = {
394
+ // 获取地区数据
395
+ getData,
396
+ // 获取地区详情
397
+ getInfo,
398
+ }
399
+
400
+ export default area