@kyfe/ks-query-table 0.0.21 → 0.0.22

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 (310) hide show
  1. package/.bitmap +38 -0
  2. package/.editorconfig +5 -0
  3. package/.env.dev +2 -0
  4. package/.env.gray +2 -0
  5. package/.env.prod +2 -0
  6. package/.env.stg +3 -0
  7. package/.env.uat +2 -0
  8. package/.eslintignore +1 -0
  9. package/.eslintrc.js +25 -0
  10. package/.gitmodules +4 -0
  11. package/.prettierrc +11 -0
  12. package/README.md +15 -0
  13. package/babel.config.js +10 -0
  14. package/build-apm.sh +9 -0
  15. package/build.sh +16 -0
  16. package/config/index.js +20 -0
  17. package/jsconfig.json +7 -0
  18. package/kuasheng-sdk/index.js +80 -0
  19. package/kuasheng-sdk/lib/assets.js +304 -0
  20. package/kuasheng-sdk/lib/context.js +199 -0
  21. package/kuasheng-sdk/lib/layout.js +346 -0
  22. package/kuasheng-sdk/lib/location.js +46 -0
  23. package/kuasheng-sdk/lib/media.js +342 -0
  24. package/kuasheng-sdk/lib/navigation.js +30 -0
  25. package/kuasheng-sdk/lib/request.js +76 -0
  26. package/kuasheng-sdk/lib/system.js +190 -0
  27. package/kuasheng-sdk/lib/userinfo.js +98 -0
  28. package/kuasheng-sdk/util/check.js +102 -0
  29. package/kuasheng-sdk/util/config.js +47 -0
  30. package/kuasheng-sdk/util/device.js +25 -0
  31. package/kuasheng-sdk/util/error.js +19 -0
  32. package/kuasheng-sdk/util/funtional.js +153 -0
  33. package/kuasheng-sdk/util/mixin.js +36 -0
  34. package/kuasheng-sdk/util/requestUtil.js +41 -0
  35. package/kuasheng-sdk/util/response.js +33 -0
  36. package/kuasheng-sdk/util/warn.js +35 -0
  37. package/kuasheng-ui/CHANGELOG.md +9 -0
  38. package/kuasheng-ui/components/card.vue +57 -0
  39. package/kuasheng-ui/components/ks-area-select/README.md +43 -0
  40. package/kuasheng-ui/components/ks-area-select/area-picker.vue +554 -0
  41. package/kuasheng-ui/components/ks-area-select/area-search.vue +363 -0
  42. package/kuasheng-ui/components/ks-area-select/areas-pop.vue +56 -0
  43. package/kuasheng-ui/components/ks-area-select/common.js +183 -0
  44. package/kuasheng-ui/components/ks-area-select/index.vue +355 -0
  45. package/kuasheng-ui/components/ks-area-select/mixins.js +216 -0
  46. package/kuasheng-ui/components/ks-area-single-select/README.md +50 -0
  47. package/kuasheng-ui/components/ks-area-single-select/hot-city.js +45 -0
  48. package/kuasheng-ui/components/ks-area-single-select/index.vue +324 -0
  49. package/kuasheng-ui/components/ks-calendar/index.vue +269 -0
  50. package/kuasheng-ui/components/ks-call-phone/call-tips.vue +70 -0
  51. package/kuasheng-ui/components/ks-call-phone/call.vue +178 -0
  52. package/kuasheng-ui/components/ks-call-phone/index.js +48 -0
  53. package/kuasheng-ui/components/ks-call-phone/index.vue +131 -0
  54. package/kuasheng-ui/components/ks-call-phone//345/221/274/345/217/253/347/273/204/344/273/266.md +0 -0
  55. package/kuasheng-ui/components/ks-date-picker/README.md +23 -0
  56. package/kuasheng-ui/components/ks-date-picker/date-picker-bottom.vue +123 -0
  57. package/kuasheng-ui/components/ks-date-picker/date-picker-dropdown.vue +80 -0
  58. package/kuasheng-ui/components/ks-date-picker/date-picker-right.vue +87 -0
  59. package/kuasheng-ui/components/ks-date-picker/date-picker-top.vue +88 -0
  60. package/kuasheng-ui/components/ks-date-picker/date-picker.js +15 -0
  61. package/kuasheng-ui/components/ks-date-picker/date-range-select.vue +92 -0
  62. package/kuasheng-ui/components/ks-date-picker/date-select.vue +65 -0
  63. package/kuasheng-ui/components/ks-date-picker/date-week-month.vue +131 -0
  64. package/kuasheng-ui/components/ks-date-picker/index.js +12 -0
  65. package/kuasheng-ui/components/ks-date-picker/mixin.js +92 -0
  66. package/kuasheng-ui/components/ks-date-picker/month-range-select.vue +129 -0
  67. package/kuasheng-ui/components/ks-date-picker/month-select.vue +85 -0
  68. package/kuasheng-ui/components/ks-date-picker/quarter-select.vue +94 -0
  69. package/kuasheng-ui/components/ks-date-picker/style.less +121 -0
  70. package/kuasheng-ui/components/ks-date-picker/utils.js +109 -0
  71. package/kuasheng-ui/components/ks-date-picker/week-select.vue +99 -0
  72. package/kuasheng-ui/components/ks-decrypt/index.vue +159 -0
  73. package/kuasheng-ui/components/ks-employee/README.md +78 -0
  74. package/kuasheng-ui/components/ks-employee/employee-input.vue +173 -0
  75. package/kuasheng-ui/components/ks-employee/employee-list.vue +662 -0
  76. package/kuasheng-ui/components/ks-employee/employee-popup.vue +197 -0
  77. package/kuasheng-ui/components/ks-employee/employee-search.vue +250 -0
  78. package/kuasheng-ui/components/ks-employee/employee-selected.vue +173 -0
  79. package/kuasheng-ui/components/ks-employee/index.js +17 -0
  80. package/kuasheng-ui/components/ks-employee/package-lock.json +5 -0
  81. package/kuasheng-ui/components/ks-employee/package.json +15 -0
  82. package/kuasheng-ui/components/ks-employee/yarn.lock +4 -0
  83. package/kuasheng-ui/components/ks-field-money/index.js +8 -0
  84. package/kuasheng-ui/components/ks-field-money/index.vue +212 -0
  85. package/kuasheng-ui/components/ks-field-money/package.json +11 -0
  86. package/kuasheng-ui/components/ks-field-money/utils.js +65 -0
  87. package/kuasheng-ui/components/ks-field-money//351/207/221/351/242/235/350/275/254/346/215/242/345/231/250.md +0 -0
  88. package/kuasheng-ui/components/ks-history-search/history-input.vue +131 -0
  89. package/kuasheng-ui/components/ks-history-search/history-list.vue +188 -0
  90. package/kuasheng-ui/components/ks-history-search/img/delete.png +0 -0
  91. package/kuasheng-ui/components/ks-history-search/index.js +9 -0
  92. package/kuasheng-ui/components/ks-history-search/index.vue +125 -0
  93. package/kuasheng-ui/components/ks-history-search/package-lock.json +5 -0
  94. package/kuasheng-ui/components/ks-history-search/package.json +15 -0
  95. package/kuasheng-ui/components/ks-history-search/utils.js +35 -0
  96. package/kuasheng-ui/components/ks-input-search/index.vue +106 -0
  97. package/kuasheng-ui/components/ks-list/index.vue +75 -0
  98. package/kuasheng-ui/components/ks-loading/index.js +16 -0
  99. package/kuasheng-ui/components/ks-month/index.vue +47 -0
  100. package/kuasheng-ui/components/ks-month/package.json +3 -0
  101. package/kuasheng-ui/components/ks-month/range.vue +172 -0
  102. package/kuasheng-ui/components/ks-month/single.vue +136 -0
  103. package/kuasheng-ui/components/ks-month/style.less +125 -0
  104. package/kuasheng-ui/components/ks-month/utils.js +35 -0
  105. package/kuasheng-ui/components/ks-nav/index.vue +264 -0
  106. package/kuasheng-ui/components/ks-nav-bar.js +35 -0
  107. package/kuasheng-ui/components/ks-org/ks-org-tree.vue +247 -0
  108. package/kuasheng-ui/components/ks-org/ks-popup-tree.vue +154 -0
  109. package/kuasheng-ui/components/ks-org/ks-tree-input.vue +240 -0
  110. package/kuasheng-ui/components/ks-org/ks-tree-node.vue +94 -0
  111. package/kuasheng-ui/components/ks-org/ks-tree.vue +229 -0
  112. package/kuasheng-ui/components/ks-org/utils.js +54 -0
  113. package/kuasheng-ui/components/ks-popover/index.vue +457 -0
  114. package/kuasheng-ui/components/ks-popover/mixin.js +28 -0
  115. package/kuasheng-ui/components/ks-popover/utils.js +60 -0
  116. package/kuasheng-ui/components/ks-pull-refresh/index.vue +43 -0
  117. package/kuasheng-ui/components/ks-quarter/index.vue +256 -0
  118. package/kuasheng-ui/components/ks-table/README.md +103 -0
  119. package/kuasheng-ui/components/ks-table/cell.vue +31 -0
  120. package/kuasheng-ui/components/ks-table/index.js +8 -0
  121. package/kuasheng-ui/components/ks-table/index.less +486 -0
  122. package/kuasheng-ui/components/ks-table/index.vue +1088 -0
  123. package/kuasheng-ui/components/ks-table/package.json +12 -0
  124. package/kuasheng-ui/components/ks-table/release.md +7 -0
  125. package/kuasheng-ui/components/ks-toast.js +35 -0
  126. package/kuasheng-ui/components/ks-upload/index.vue +174 -0
  127. package/kuasheng-ui/components/ks-user-access.vue +229 -0
  128. package/kuasheng-ui/components/no-data/README.md +45 -0
  129. package/kuasheng-ui/components/no-data/image.js +1 -0
  130. package/kuasheng-ui/components/no-data/index.vue +83 -0
  131. package/kuasheng-ui/components/notice-bar.vue +16 -0
  132. package/kuasheng-ui/components/steps.js +11 -0
  133. package/kuasheng-ui/components/tabs.vue +40 -0
  134. package/kuasheng-ui/index.js +239 -0
  135. package/kuasheng-ui/patch/datetime-picker/datetimePicker.md +0 -0
  136. package/kuasheng-ui/patch/datetime-picker/index.js +46 -0
  137. package/kuasheng-ui/patch/datetime-picker/utils.js +78 -0
  138. package/kuasheng-ui/patch/field/field.md +1 -0
  139. package/kuasheng-ui/patch/field/index.js +122 -0
  140. package/kuasheng-ui/patch/field/utils.js +36 -0
  141. package/kuasheng-ui/patch/form/form.md +7 -0
  142. package/kuasheng-ui/patch/form/index.js +106 -0
  143. package/kuasheng-ui/patch/index.js +12 -0
  144. package/kuasheng-ui/patch/pagination/index.js +78 -0
  145. package/kuasheng-ui/style/animation-ui.less +31 -0
  146. package/kuasheng-ui/style/font/number/font-number1.otf +0 -0
  147. package/kuasheng-ui/style/font/number/font-number2.ttf +0 -0
  148. package/kuasheng-ui/style/images/checked.svg +1 -0
  149. package/kuasheng-ui/style/images/success.svg +1 -0
  150. package/kuasheng-ui/style/index.less +6 -0
  151. package/kuasheng-ui/style/kuasheng-ui.less +207 -0
  152. package/kuasheng-ui/style/reset-vant.less +307 -0
  153. package/kuasheng-ui/style/vant-var.less +138 -0
  154. package/kuasheng-ui/utils/apis.js +17 -0
  155. package/kuasheng-ui/utils/axios-adapter.js +47 -0
  156. package/kuasheng-ui/utils/bem.js +39 -0
  157. package/kuasheng-ui/utils/bus.js +97 -0
  158. package/kuasheng-ui/utils/common.js +88 -0
  159. package/kuasheng-ui/utils/decrypt/config.js +12 -0
  160. package/kuasheng-ui/utils/decrypt/decrypt-api.js +139 -0
  161. package/kuasheng-ui/utils/decrypt/index.js +6 -0
  162. package/kuasheng-ui/utils/decrypt/mask.js +36 -0
  163. package/kuasheng-ui/utils/decrypt/virtual.js +44 -0
  164. package/kuasheng-ui/utils/directive.js +57 -0
  165. package/kuasheng-ui/utils/directive.md +23 -0
  166. package/kuasheng-ui/utils/drcheck-plugin.js +219 -0
  167. package/kuasheng-ui/utils/error-plugin.js +88 -0
  168. package/kuasheng-ui/utils/filter.js +149 -0
  169. package/kuasheng-ui/utils/http-interceptors.js +18 -0
  170. package/kuasheng-ui/utils/http.js +140 -0
  171. package/kuasheng-ui/utils/index.js +5 -0
  172. package/kuasheng-ui/utils/init-event.js +20 -0
  173. package/kuasheng-ui/utils/log.js +309 -0
  174. package/kuasheng-ui/utils/token.js +9 -0
  175. package/kuasheng-ui/utils/type.js +45 -0
  176. package/kuasheng-ui/utils/validate.js +20 -0
  177. package/kuasheng-ui/utils/watermark.js +67 -0
  178. package/kuasheng-ui/version.js +1 -0
  179. package/ky-apm/client.js +37 -0
  180. package/ky-apm/customHttp.js +38 -0
  181. package/ky-apm/index.js +68 -0
  182. package/ky-apm/plugins/performance.js +84 -0
  183. package/ky-apm/plugins/self-error.js +26 -0
  184. package/ky-apm/warn-log.js +3 -0
  185. package/package.json +81 -10
  186. package/plugin/ks-chii-webpack-html/index.js +53 -0
  187. package/plugin/ks-chii-webpack-html/package.json +16 -0
  188. package/postcss.config.js +15 -0
  189. package/public/capsule-positon.js +50 -0
  190. package/public/fonts/DingTalkJinBuTi.ttf +0 -0
  191. package/public/framework/axios@0.19.0.min.js +9 -0
  192. package/public/framework/fastclick@1.0.6.min.js +1 -0
  193. package/public/framework/iconfont/iconfont.css +91 -0
  194. package/public/framework/iconfont/iconfont.js +1 -0
  195. package/public/framework/iconfont/iconfont.json +142 -0
  196. package/public/framework/iconfont/iconfont.ttf +0 -0
  197. package/public/framework/iconfont/iconfont.woff +0 -0
  198. package/public/framework/iconfont/iconfont.woff2 +0 -0
  199. package/public/framework/vant@2.5.6.min.js +7 -0
  200. package/public/framework/vue-router@3.1.3.min.js +6 -0
  201. package/public/framework/vue@2.6.10.runtime.min.js +6 -0
  202. package/public/framework/vuex@3.1.1.min.js +6 -0
  203. package/public/index.html +260 -0
  204. package/public/ks@3.0.8.umd.min.js +1 -0
  205. package/public/ksui@4.0.27.umd.min.js +10 -0
  206. package/public/status-bar-preset.js +39 -0
  207. package/{index.js → qt-npm/index.js} +3 -3
  208. package/qt-npm/package.json +13 -0
  209. package/src/App.vue +204 -0
  210. package/src/README.md +15 -0
  211. package/src/common/README.md +94 -0
  212. package/src/common/http/axios-adapter.js +47 -0
  213. package/src/common/http/common.js +88 -0
  214. package/src/common/http/http-interceptors.js +18 -0
  215. package/src/common/http/http-lock.js +45 -0
  216. package/src/common/http/index.js +163 -0
  217. package/src/common/http/token.js +9 -0
  218. package/src/common/styles/font/AlibabaSans102Ver2-Md.ttf +0 -0
  219. package/src/common/styles/font.less +12 -0
  220. package/src/common/styles/variables.less +43 -0
  221. package/src/common/utils/index.js +1 -0
  222. package/src/common/utils/platform/README.md +1 -0
  223. package/src/common/utils/platform/android/.gitkeep +0 -0
  224. package/src/common/utils/platform/core/index.js +24 -0
  225. package/src/common/utils/platform/index.js +164 -0
  226. package/src/common/utils/platform/ios/.gitkeep +0 -0
  227. package/src/common/utils/platform/subscribe/helper.js +38 -0
  228. package/src/common/utils/platform/subscribe/index.js +204 -0
  229. package/src/common/utils/platform/subscribe/table-animation.js +75 -0
  230. package/src/config/index.js +31 -0
  231. package/src/config.js +1 -0
  232. package/src/main.js +73 -0
  233. package/src/router.js +52 -0
  234. package/src/view/home/config.js +101 -0
  235. package/src/view/home/demo1.vue +223 -0
  236. package/src/view/home/demo2.vue +124 -0
  237. package/src/view/home/demo3.vue +51 -0
  238. package/src/view/home/demo4.vue +140 -0
  239. package/src/view/home/index.vue +97 -0
  240. package/src/view/home/query-table/README.md +45 -0
  241. package/src/view/home/query-table/api/index.js +12 -0
  242. package/src/view/home/query-table/assets/horizontal-back.svg +1 -0
  243. package/src/view/home/query-table/components/pe-table/cell.js +181 -0
  244. package/src/view/home/query-table/components/pe-table/collapse.js +334 -0
  245. package/src/view/home/query-table/components/pe-table/empty.vue +48 -0
  246. package/src/view/home/query-table/components/pe-table/header.js +328 -0
  247. package/src/view/home/query-table/components/pe-table/images/abnormal.png +0 -0
  248. package/src/view/home/query-table/components/pe-table/images/empty.png +0 -0
  249. package/src/view/home/query-table/components/pe-table/images/fold.svg +1 -0
  250. package/src/view/home/query-table/components/pe-table/images/sort.svg +1 -0
  251. package/src/view/home/query-table/components/pe-table/images/sorting.svg +1 -0
  252. package/src/view/home/query-table/components/pe-table/images/unfold.svg +1 -0
  253. package/src/view/home/query-table/components/pe-table/index.vue +847 -0
  254. package/src/view/home/query-table/components/pe-table/load-more.js +46 -0
  255. package/src/view/home/query-table/components/pe-table/props/index.js +193 -0
  256. package/src/view/home/query-table/components/pe-table/row.vue +118 -0
  257. package/src/view/home/query-table/components/pe-table/scrollbar.js +424 -0
  258. package/src/view/home/query-table/components/pe-table/stretch-damping.js +112 -0
  259. package/src/view/home/query-table/components/pe-table/style/cell.less +89 -0
  260. package/src/view/home/query-table/components/pe-table/style/empty.less +48 -0
  261. package/src/view/home/query-table/components/pe-table/style/header.less +141 -0
  262. package/src/view/home/query-table/components/pe-table/style/index.less +88 -0
  263. package/src/view/home/query-table/components/pe-table/style/load-more.less +61 -0
  264. package/src/view/home/query-table/components/pe-table/style/row.less +6 -0
  265. package/src/view/home/query-table/components/pe-table/table-loading.vue +120 -0
  266. package/src/view/home/query-table/components/pe-table/table-total.vue +57 -0
  267. package/src/view/home/query-table/components/pe-table/utils/animate.js +80 -0
  268. package/src/view/home/query-table/components/pe-table/utils/columns.js +290 -0
  269. package/src/view/home/query-table/components/pe-table/utils/data.js +12 -0
  270. package/src/view/home/query-table/components/pe-table/utils/fixed.js +69 -0
  271. package/src/view/home/query-table/components/pe-table/utils/formatter.js +327 -0
  272. package/src/view/home/query-table/components/pe-table/utils/render-cells.js +424 -0
  273. package/src/view/home/query-table/components/pe-table/utils/slot.js +28 -0
  274. package/src/view/home/query-table/components/pe-table/utils/tools.js +84 -0
  275. package/src/view/home/query-table/components/pe-table/utils/touch-scroll.js +417 -0
  276. package/src/view/home/query-table/components/query-table/index.vue +497 -0
  277. package/src/view/home/query-table/components/query-table/mixins/column-mixin.js +102 -0
  278. package/src/view/home/query-table/components/query-table/mixins/column-setting.js +143 -0
  279. package/src/view/home/query-table/components/query-table/mixins/data-mixin.js +519 -0
  280. package/src/view/home/query-table/components/query-table/mixins/pagination-mixin.js +26 -0
  281. package/src/view/home/query-table/components/query-table/mixins/table-fixed.js +130 -0
  282. package/src/view/home/query-table/components/query-table/mixins/table-horizontal.js +119 -0
  283. package/src/view/home/query-table/components/table-horizontal.vue +99 -0
  284. package/src/view/home/query-table/components/table-pagination.vue +32 -0
  285. package/src/view/home/query-table/components/table-settings/assets/arrpw-up.svg +1 -0
  286. package/src/view/home/query-table/components/table-settings/assets/disabled-down.svg +1 -0
  287. package/src/view/home/query-table/components/table-settings/assets/disabled-up.svg +1 -0
  288. package/src/view/home/query-table/components/table-settings/assets/down.svg +1 -0
  289. package/src/view/home/query-table/components/table-settings/assets/up.svg +1 -0
  290. package/src/view/home/query-table/components/table-settings/index.less +294 -0
  291. package/src/view/home/query-table/components/table-settings/index.vue +260 -0
  292. package/src/view/home/query-table/components/table-settings/settings.vue +479 -0
  293. package/src/view/home/query-table/components/table-settings/test.js +626 -0
  294. package/src/view/home/query-table/components/table-settings//344/270/252/346/200/247/350/256/276/347/275/256.md +0 -0
  295. package/src/view/home/query-table/components/tooltip.js +124 -0
  296. package/src/view/home/query-table/hooks/use-cache-promise.js +27 -0
  297. package/src/view/home/query-table/hooks/use-column-config.js +190 -0
  298. package/src/view/home/query-table/hooks/use-encryption.js +0 -0
  299. package/src/view/home/query-table/hooks/use-generic-search.js +95 -0
  300. package/src/view/home/query-table/index.js +7 -0
  301. package/src/view/home/query-table/store/column-store.js +0 -0
  302. package/src/view/home/query-table/styles/table.less +24 -0
  303. package/src/view/home/query-table/utils/column.js +36 -0
  304. package/src/view/home/query-table/utils/config.js +12 -0
  305. package/src/view/home/query-table/utils/encryption.js +32 -0
  306. package/src/view/home/query-table/utils/http.js +1 -0
  307. package/src/view/home/query-table/utils/localStorage.js +35 -0
  308. package/src/view/home//351/246/226/351/241/265.md +0 -0
  309. package/src/web.js +99 -0
  310. package/vue.config.js +131 -0
@@ -0,0 +1,43 @@
1
+ #### API接口
2
+ 行政区划区域模糊搜索: address.regioninfo.getAreaAddress
3
+
4
+ 行政区划五级联想查询: address.addressBgTerritory.getMultiLevelThinkList
5
+
6
+ 根据districtId查询各级info及各级兄弟节点(数据回填): address.regionInfo.getInfoByDistrictId
7
+
8
+
9
+
10
+ #### Attributes
11
+ 参数 | 说明 | 类型 | 可选值 | 默认值
12
+ -----------|--------|--------|--------|--------
13
+ areaData | 初始值 | Array | 示例: [{districtName: ‘广东省-深圳市', districtID: 'XZ2-229 ’,simpleName:‘深圳市'}] | []
14
+ hotList | 热门地区列表 | Array | 示例: [{districtName: ‘广东省-深圳市', districtID: 'XZ2-229 ’,simpleName:‘深圳市'}] | -
15
+ levelOptions | 为每一层级的配置,详情见levelOptions | Array[Object] | 示例:[{ name: '省/直辖市', disabled: true, allSelectDisabled: true }, { name: '城市', disabled: false, allSelectDisabled: true }] | [{ name: '省/直辖市' },{ name: '城市' },{ name: '区/县' },{ name: '镇/街道'}]
16
+ maxlength | 最大选择地区数 | Number | - | -
17
+ readOnly | 只读 | Boolean | true/false | false
18
+ placeholder | 搜索占位提示文字 | String | - | 请输入搜索内容
19
+ selectPlaceholder | 选择中标签占位提示文字 | String | - | 请选择区域
20
+ isArea | 是否展示大区 | Boolean | Boolean | false
21
+
22
+
23
+ #### Events
24
+ 事件名称 | 说明 | 回调参数
25
+ -----------|--------|--------
26
+ change | change事件的回调 | 选中的地址数组
27
+ close | close事件的回调 | 点击确定时触发
28
+
29
+
30
+ #### 方法
31
+ 方法名称 | 说明 | 参数 | 返回值
32
+ -----------|--------|--------|--------
33
+ onSubmit | 触发组件提交操作 | - | -
34
+ onReset | 组件数据清空,初始化 | - | -
35
+ closePop | 关闭所有popover弹框,回到区域选择首页,比如搜索、所有选中展开弹框等 | - | -
36
+
37
+
38
+ #### levelOptions
39
+ 配置项名称 | 配置项说明 | 是否必须 | 默认值
40
+ -----------|--------|--------|--------
41
+ name | 层级名称 | 是 | 层级名称
42
+ disabled | 屏蔽当前层级选择 | 否 | false
43
+ allSelectDisabled | 屏蔽当前层级全选(全国/不限) | 否 | false
@@ -0,0 +1,554 @@
1
+ <template>
2
+ <div class="ks-area-picker" ref="addressBox">
3
+ <div class="ks-area-picker-container">
4
+ <van-swipe ref="areaSwipeRef" class="area-picker-swipe" :loop="false" :width="swipeWidth" :show-indicators="false" @change="onSwipeChange">
5
+ <van-swipe-item class="area-swipe-item" v-for="(zoomItem, zoomIndex) in levelOptions" :key="zoomIndex">
6
+ <div :class="[`area-list area-list-${zoomIndex}`]">
7
+ <div :class="['area-list-title', { 'select-color': selectData[zoomIndex].length > 0 }]">{{ zoomItem.name }}</div>
8
+ <div class="area-list-content">
9
+ <div
10
+ :class="['list-item', `list-item-${v.index}`, { 'is-choose': v.isChoose, 'read-only': readOnly }]"
11
+ v-for="v in selectData[zoomIndex]"
12
+ v-show="v.index > 0 || !zoomItem.allSelectDisabled"
13
+ :key="v.districtID"
14
+ >
15
+ <div class="item-choose" @click="showChildren(v, v.index, zoomIndex, false, true)">
16
+ <div class="address-name" :title="v.districtName">{{ v.simpleName || v.districtName }}</div>
17
+ <i
18
+ class="checkbox-item"
19
+ v-show="!zoomItem.disabled"
20
+ :class="{ 'partial-checked': v.isIndeterminate, 'no-checked': !v.isChecked, 'all-checked': v.isChecked }"
21
+ @click.stop="checkboxClick(v, v.index, zoomIndex)"
22
+ ></i>
23
+ </div>
24
+ </div>
25
+ </div>
26
+ </div>
27
+ </van-swipe-item>
28
+ </van-swipe>
29
+ </div>
30
+ </div>
31
+ </template>
32
+ <script>
33
+ import { getRegionTreeData, cloneDeep } from './common'
34
+ import mixins from './mixins'
35
+ export default {
36
+ name: 'area-picker',
37
+ props: {
38
+ // 下拉搜索前的事件fetch
39
+ beforeSearch: {
40
+ type: Function
41
+ },
42
+ level: {
43
+ type: Number
44
+ },
45
+ // 是否包括大区
46
+ isArea: {
47
+ type: Boolean,
48
+ default: false
49
+ },
50
+ // 添加区域前的事件fetch
51
+ beforeAdd: {
52
+ type: Function
53
+ }
54
+ },
55
+ mixins: [mixins],
56
+ computed: {
57
+ maxlength() {
58
+ return this.$parent.maxlength
59
+ },
60
+ readOnly() {
61
+ return this.$parent.readOnly
62
+ },
63
+ areaData() {
64
+ return this.$parent.areaData
65
+ },
66
+ checkedData() {
67
+ return this.$parent.checkedData
68
+ },
69
+ idMap() {
70
+ return this.$parent.idMap
71
+ },
72
+ levelOptions() {
73
+ return this.$parent.levelOptions
74
+ }
75
+ },
76
+ watch: {
77
+ areaData(val) {
78
+ if (this.setDataTimer) {
79
+ clearTimeout(this.setDataTimer)
80
+ this.setDataTimer = null
81
+ }
82
+ this.setDataTimer = setTimeout(() => {
83
+ this.clearAll()
84
+ if (val) {
85
+ this.showHistoryDataChecked(cloneDeep(this.areaData || []))
86
+ }
87
+ }, 100)
88
+ }
89
+ },
90
+ data() {
91
+ // const level = this.titles.length
92
+ return {
93
+ currentSwipeIndex: 0,
94
+ swipeWidth: this.level > 2 ? document.body.clientWidth / 3 : document.body.clientWidth / 2,
95
+ areaTree: getRegionTreeData(this.isArea),
96
+ checkedListData: [],
97
+ selectData: new Array(this.level).fill([]),
98
+ lastCheckedData: []
99
+ }
100
+ },
101
+ async mounted() {
102
+ await this.getAreaData()
103
+ if (this.areaData && this.areaData.length) {
104
+ this.showHistoryDataChecked(cloneDeep(this.areaData || []))
105
+ }
106
+ },
107
+ methods: {
108
+ onSwipeChange(index) {
109
+ this.currentSwipeIndex = index
110
+ },
111
+ switchSwipeIndex(zoomIndex) {
112
+ if (this.level > 3) {
113
+ const diffOffset = zoomIndex - this.currentSwipeIndex
114
+ if (diffOffset === 2 && zoomIndex > 1 && zoomIndex < this.level - 1) {
115
+ this.$refs.areaSwipeRef.next()
116
+ }
117
+ if (diffOffset === 0 && zoomIndex > 0) {
118
+ this.$refs.areaSwipeRef.prev()
119
+ }
120
+ }
121
+ },
122
+ async checkboxClick(item, vIndex, zoomIndex) {
123
+ this.switchSwipeIndex(zoomIndex)
124
+ if (this.readOnly) return
125
+ if (vIndex === 0 && zoomIndex === 0) {
126
+ const oldChecked = item.isChecked
127
+ this.clearAll()
128
+ item.isChecked = !oldChecked
129
+ item.isIndeterminate = false
130
+ return
131
+ }
132
+ if (!item.isChecked || item.isIndeterminate) {
133
+ item.isChecked = true
134
+ item.isIndeterminate = false
135
+ await this.changeCheckBox(true, item, vIndex, zoomIndex, true)
136
+ return
137
+ }
138
+ item.isChecked = false
139
+ item.isIndeterminate = false
140
+ await this.changeCheckBox(false, item, vIndex, zoomIndex)
141
+ },
142
+ getAreaData() {
143
+ const areaList = this.areaTree.childrenNode
144
+ const childrenData = [this.areaTree, ...areaList]
145
+ this.$parent.idMap = new Map()
146
+ this.idMap.set(this.areaTree.districtID, this.areaTree)
147
+ this.$set(this.selectData, [0], childrenData)
148
+ areaList.map(item => {
149
+ item._parent = this.areaTree
150
+ this.idMap.set(item.districtID, item)
151
+ })
152
+ },
153
+ isMaxLength() {
154
+ if (this.maxlength) {
155
+ if (this.checkedData.length >= this.maxlength) {
156
+ vant.Toast(`最多选择${this.maxlength}个地区`)
157
+ return true
158
+ }
159
+ return false
160
+ }
161
+ return false
162
+ },
163
+ // 回写数据到连级菜单中
164
+ async showHistoryDataChecked(val) {
165
+ const idArry = []
166
+ // 过滤已有数据查询
167
+ const rootDisabled = this.levelOptions[0].disabled
168
+ for (let i = val.length - 1; i >= 0; i--) {
169
+ const item = val[i]
170
+ const mapItem = this.idMap.get(item.districtID)
171
+ if (!mapItem) {
172
+ idArry.push(item.districtID)
173
+ } else {
174
+ if (mapItem && mapItem._erpZoom === 0 && !rootDisabled) {
175
+ if (!mapItem.isChecked) {
176
+ if (
177
+ !this.checkedData.some(v => {
178
+ return v.districtID === mapItem.districtID
179
+ })
180
+ ) {
181
+ await this.checkboxClick(mapItem, mapItem.index, 0)
182
+ }
183
+ }
184
+ val.splice(i, 1)
185
+ }
186
+ }
187
+ }
188
+ await this.getAreaLinkData(idArry, this.idMap, this.areaTree)
189
+ val &&
190
+ val.map((item, itemIndex) => {
191
+ const checkedItem = this.idMap.get(item.districtID)
192
+ if (checkedItem) {
193
+ this.changeCheckBox(true, checkedItem, 1)
194
+ if (itemIndex === val.length - 1) {
195
+ this.openAddressLink(checkedItem, this.selectData)
196
+ for (let i = checkedItem._erpZoom + 1; i < this.level; i++) {
197
+ const childNode = this.selectData[i]
198
+ childNode &&
199
+ childNode.length &&
200
+ childNode.forEach(node => {
201
+ node.isChoose = false
202
+ })
203
+
204
+ if (checkedItem._erpZoom === i - 1 && checkedItem.childrenNode && checkedItem.childrenNode.length) {
205
+ this.$set(this.selectData, [i], [...checkedItem.childrenNode])
206
+ } else {
207
+ this.$set(this.selectData, [i], [])
208
+ }
209
+ }
210
+ }
211
+ } else {
212
+ // 不存在的情况需要获取上级链路数据
213
+ this.checkedData.push(item)
214
+ }
215
+ })
216
+ // setTimeout(() => {
217
+ // const nodes = Array.from(this.$refs.addressBox.querySelectorAll('.is-choose'))
218
+ // const length = nodes && nodes.length
219
+ // if (length) {
220
+ // nodes.reverse().forEach(node => node.scrollIntoView({ block: 'center', inline: 'center' }))
221
+ // if (length > 3) {
222
+ // this.$refs.areaSwipeRef.next()
223
+ // } else {
224
+ // if (this.currentSwipeIndex) {
225
+ // this.$refs.areaSwipeRef.prev()
226
+ // }
227
+ // }
228
+ // }
229
+ // }, 200)
230
+ },
231
+ // 递归打开最后一个城市
232
+ async showChildren(v, index, key, rootChecked, isClick) {
233
+ if (key === this.level - 1) {
234
+ this.checkboxClick(v, index, key)
235
+ return
236
+ }
237
+ isClick && this.switchSwipeIndex(key)
238
+ if (key >= this.level - 1) {
239
+ return
240
+ }
241
+ if (index === 0 && key === 0) {
242
+ for (let i = key + 1; i < this.level; i++) {
243
+ const childNode = this.selectData[i]
244
+ childNode &&
245
+ childNode.length &&
246
+ childNode.forEach(node => {
247
+ node.isChoose = false
248
+ })
249
+ this.$set(this.selectData, [i], [])
250
+ }
251
+ v.childrenNode.map(k => {
252
+ k.isChoose = false
253
+ })
254
+ return false
255
+ }
256
+ v._parent &&
257
+ v._parent.childrenNode.map(k => {
258
+ k.isChoose = false
259
+ })
260
+ let data
261
+ v.isChoose = true
262
+ if (v.childrenNode && v.childrenNode.length) {
263
+ data = v.childrenNode
264
+ } else {
265
+ data = await this.getAreaChildren(this.idMap, v, key + 1, rootChecked)
266
+ }
267
+ const childrenData = index === 0 ? [] : data
268
+ for (let i = key + 1; i < this.level; i++) {
269
+ const childNode = this.selectData[i]
270
+ childNode &&
271
+ childNode.length &&
272
+ childNode.forEach(node => {
273
+ node.isChoose = false
274
+ })
275
+ this.selectData[i] = []
276
+ }
277
+ this.$set(this.selectData, [key + 1], childrenData)
278
+ },
279
+ // tag删除操作
280
+ deleteName(item) {
281
+ // 选择联动地区移除
282
+ const indexKey = this.selectData[item._erpZoom].indexOf(item)
283
+ item.isChecked = false
284
+ this.changeCheckBox(false, item, indexKey, item._erpZoom)
285
+ },
286
+ // 删除所有操作
287
+ clearAll() {
288
+ this.checkedListData = []
289
+ this.$parent.checkedData = []
290
+ this.selectData = new Array(this.level).fill([])
291
+ const areaList = this.areaTree.childrenNode
292
+ const childrenData = [this.areaTree, ...areaList]
293
+ this.$set(this.selectData, [0], childrenData)
294
+ this.clearStatus(this.areaTree)
295
+ if (this.currentSwipeIndex) {
296
+ this.$refs.areaSwipeRef.prev()
297
+ }
298
+ },
299
+ // 连级特殊处理
300
+ specialSet(item, itemIndex, type) {
301
+ if (item.districtID !== 'all') {
302
+ this.areaTree.isChecked = false
303
+ }
304
+ if (itemIndex === 0) {
305
+ if (item._parent) {
306
+ item._parent.isChecked = true
307
+ item._parent.isIndeterminate = false
308
+ }
309
+ } else {
310
+ if (item.childrenNode) {
311
+ item.childrenNode[0] && (item.childrenNode[0].isChecked = type)
312
+ }
313
+ }
314
+ },
315
+ // 连级勾选handler
316
+ async changeCheckBox(type, item, itemIndex, key, rootChecked) {
317
+ try {
318
+ if (type) {
319
+ // 检测重复数据return和检测超出最大限制
320
+ if (item.districtID !== 'all') {
321
+ const isMax = this.isMaxLength()
322
+ if (isMax) {
323
+ item.isChecked = false
324
+ return false
325
+ }
326
+ }
327
+ await this.checkoutBeforeAdd(item, true)
328
+ const repeatItem = this.getRepeat(item, true)
329
+ if (repeatItem) {
330
+ item.isChecked = false
331
+ // vant.Toast(`已添加过${repeatItem.simpleName || repeatItem.districtName}`)
332
+ return
333
+ }
334
+ }
335
+ // step1 递归清除当前节点子集中的所有选中数据
336
+ this.clearChildren(item)
337
+ // step2 展示下级(同步获取接口数据)
338
+ type && !isNaN(key) && (await this.showChildren(item, itemIndex, Number(key), rootChecked))
339
+
340
+ // step3 同级展示操作
341
+ this.setPeer(item, itemIndex, type)
342
+ // step4 特殊情况处理
343
+ this.specialSet(item, itemIndex, type)
344
+ // step5 递归设置上层节点展示状态
345
+ this.setFather(item)
346
+
347
+ this.lastCheckedData = cloneDeep(this.checkedListData)
348
+ this.checkedListData = []
349
+
350
+ // step6 获取tree数据中被选中的数据
351
+ this.getChecked(this.areaTree)
352
+
353
+ // step7 push或者delete数据
354
+ this.getAddOrDeleteItems(type)
355
+ } catch (err) {
356
+ // console.error(err)
357
+ }
358
+ },
359
+ // 对比上次的数据判断新增或删除的数据
360
+ getAddOrDeleteItems() {
361
+ this.checkedListData.map(item => {
362
+ const sameItem = this.lastCheckedData.find(key => {
363
+ return key.districtID === item.districtID
364
+ })
365
+ if (!sameItem) {
366
+ this.checkedData.push(item)
367
+ }
368
+ })
369
+ this.lastCheckedData.map(item => {
370
+ const sameItem = this.checkedListData.find(key => {
371
+ return key.districtID === item.districtID
372
+ })
373
+ if (!sameItem) {
374
+ const index = this.checkedData.findIndex(v => {
375
+ return v.districtID === item.districtID
376
+ })
377
+ if (index >= 0) {
378
+ this.checkedData.splice(index, 1)
379
+ }
380
+ }
381
+ })
382
+ },
383
+ // 获取连级数据中被选中的值
384
+ getChecked(item) {
385
+ // 选中全国
386
+ if (item.districtID === 'all' && item.isChecked) {
387
+ this.clearAll()
388
+ item.isChecked = true
389
+ this.checkedListData.push(item)
390
+ return
391
+ }
392
+ item.childrenNode &&
393
+ item.childrenNode.map((v, vIndex) => {
394
+ if (v.isChecked || v.isChoose || v.isIndeterminate) {
395
+ if (v._erpZoom === 0) {
396
+ if (v.isChecked) {
397
+ const isAllChecked = v.childrenNode && v.childrenNode.length && v.childrenNode[0].isChecked
398
+ isAllChecked && this.checkedListData.push(v)
399
+ }
400
+ this.getChecked(v)
401
+ } else {
402
+ if (vIndex !== 0) {
403
+ if (v.isChecked) {
404
+ if (v.childrenNode && v.childrenNode.length) {
405
+ const isAllChecked = v.childrenNode[0].isChecked
406
+ isAllChecked && this.checkedListData.push(v)
407
+ } else {
408
+ this.checkedListData.push(v)
409
+ }
410
+ }
411
+ this.getChecked(v)
412
+ }
413
+ }
414
+ }
415
+ })
416
+ },
417
+ // 获取重复item
418
+ getRepeat(item) {
419
+ return this.checkedData.find(v => {
420
+ return v.districtID === item.districtID
421
+ })
422
+ },
423
+ // 取消联级菜单的全国勾选
424
+ cancelCheckedAll() {
425
+ if (this.areaTree.isChecked) {
426
+ // 全国被选中去掉勾选,去除勾选数据
427
+ this.areaTree.isChecked = false
428
+ this.$parent.checkedData = []
429
+ }
430
+ },
431
+ async checkoutBeforeAdd(item, cancelChecked) {
432
+ if (this.beforeAdd) {
433
+ const checkedData = cloneDeep(this.checkedData)
434
+ const result = this.beforeAdd(item, checkedData)
435
+ if (result) {
436
+ cancelChecked && (item.isChecked = false)
437
+ // throw new Error('checkoutBeforeAdd break')
438
+ }
439
+ }
440
+ },
441
+ saveArea() {
442
+ // 保存操作
443
+ const data = cloneDeep(this.checkedData)
444
+ this.$emit('change', data)
445
+ }
446
+ }
447
+ }
448
+ </script>
449
+ <style lang="less" scoped>
450
+ .ks-area-picker {
451
+ position: relative;
452
+ width: 100%;
453
+ height: 100%;
454
+ font-size: 14px;
455
+ overflow: hidden;
456
+ border-top: 1px solid #f8f8f9;
457
+ .ks-area-picker-container {
458
+ font-size: 12px;
459
+ height: 100%;
460
+ width: 100%;
461
+ white-space: nowrap;
462
+ .area-picker-swipe {
463
+ height: 100%;
464
+ .van-swipe__track {
465
+ .area-swipe-item {
466
+ .area-list {
467
+ // flex: 1;
468
+ // width: 0;
469
+ width: 100%;
470
+ background: #fff;
471
+ // flex-direction: column;
472
+ display: inline-block;
473
+ vertical-align: top; //用来调整偏移位置
474
+ height: 100%;
475
+ position: relative;
476
+ .area-list-title {
477
+ padding-left: 16px;
478
+ border-bottom: 1px solid #ebedf0;
479
+ color: #858793;
480
+ font-size: 14px;
481
+ font-family: PingFangSC, PingFangSC-Regular;
482
+ line-height: 42px;
483
+ }
484
+ .select-color {
485
+ color: #323233;
486
+ border-color: #165DFF;
487
+ font-weight: bold;
488
+ }
489
+ .area-list-content {
490
+ height: calc(100% - 43px);
491
+ border: 1px solid #f8f8f9;
492
+ overflow-y: auto;
493
+ .list-item {
494
+ width: 100%;
495
+ cursor: pointer;
496
+ padding: 0 0 0 16px;
497
+ box-sizing: border-box;
498
+ &:hover {
499
+ background: #f8f8f9;
500
+ }
501
+ .item-choose {
502
+ display: flex;
503
+ justify-content: space-between;
504
+ .address-name {
505
+ flex: 1;
506
+ line-height: 48px;
507
+ // display: inline-flex;
508
+ overflow: hidden;
509
+ text-overflow: ellipsis;
510
+ white-space: nowrap;
511
+ font-size: 14px;
512
+ font-family: PingFangSC, PingFangSC-Regular;
513
+ }
514
+ .checkbox-item {
515
+ width: 14px;
516
+ height: 14px;
517
+ padding: 17px 12px 17px 10px;
518
+ background-image: url('https://erphostjs.kye-erp.com/kuasheng-h5/assets/ks-area-select/notChecked.svg');
519
+ background-repeat: no-repeat;
520
+ background-size: 14px 14px;
521
+ background-position: 11px 17px;
522
+ box-sizing: content-box;
523
+ }
524
+ .partial-checked {
525
+ background-image: url('https://erphostjs.kye-erp.com/kuasheng-h5/pe/notAllChecked.svg');
526
+ }
527
+ .all-checked {
528
+ background-image: url('https://erphostjs.kye-erp.com/kuasheng-h5/pe/allChecked.svg');
529
+ }
530
+ }
531
+ }
532
+ .is-choose {
533
+ background: #f8f8f9;
534
+ &:hover {
535
+ background: #f8f8f9;
536
+ }
537
+ }
538
+ .read-only {
539
+ filter: grayscale(100%);
540
+ background: #ebebed;
541
+ .item-choose {
542
+ .checkbox-item {
543
+ filter: brightness(0.8);
544
+ }
545
+ }
546
+ }
547
+ }
548
+ }
549
+ }
550
+ }
551
+ }
552
+ }
553
+ }
554
+ </style>