create-swdg-frontend 0.1.6 → 0.2.0

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 (469) hide show
  1. package/README.md +31 -13
  2. package/bin/index.js +3 -244
  3. package/lib/argv.js +43 -0
  4. package/lib/cli.js +141 -0
  5. package/lib/constants.js +24 -0
  6. package/lib/gis.js +92 -0
  7. package/lib/manifest.js +23 -0
  8. package/lib/prompts.js +55 -0
  9. package/lib/scaffold.js +118 -0
  10. package/package.json +6 -2
  11. package/scripts/sync-template.js +120 -0
  12. package/scripts/validate-template.mjs +74 -0
  13. package/stubs/tsconfig.node.json +11 -0
  14. package/stubs/types-env.d.ts +9 -0
  15. package/stubs/vite.config.ts +64 -0
  16. package/template/.env.example +6 -0
  17. package/template/.github/workflows/ci.yml +23 -0
  18. package/template/.github/workflows/release.yml +69 -0
  19. package/template/.husky/commit-msg +42 -42
  20. package/template/.husky/pre-commit +2 -2
  21. package/template/.husky/prepare-commit-msg +0 -0
  22. package/template/.lintstagedrc +5 -5
  23. package/template/.prettierignore +26 -26
  24. package/template/.prettierrc.cjs +10 -10
  25. package/template/.stylelintignore +1 -1
  26. package/template/.stylelintrc.json +12 -6
  27. package/template/README.md +99 -36
  28. package/template/auto-imports.d.ts +10 -0
  29. package/template/commitlint.config.cjs +64 -64
  30. package/template/docs/MAINTAINER.md +77 -0
  31. package/template/docs/ONBOARDING.md +284 -0
  32. package/template/docs/TESTING.md +104 -0
  33. package/template/eslint.config.js +97 -96
  34. package/template/index.html +17 -17
  35. package/template/interface/user.ts +5 -5
  36. package/template/package.json +88 -86
  37. package/template/pnpm-lock.yaml +6360 -0
  38. package/template/postcss.config.js +5 -0
  39. package/template/scripts/gen-api.cjs +280 -230
  40. package/template/scripts/release.mjs +53 -59
  41. package/template/scripts/set-release-version.mjs +46 -0
  42. package/template/scripts/test-pipeline.mjs +85 -0
  43. package/template/scripts/test-scaffold.mjs +197 -0
  44. package/template/scripts/test-template.mjs +52 -0
  45. package/template/scripts/verify.mjs +28 -0
  46. package/template/scripts/vite-plugin-cesium-dev.ts +56 -0
  47. package/template/src/App.vue +6 -6
  48. package/template/src/api/README.md +7 -3
  49. package/template/src/assets/favicon.svg +49 -49
  50. package/template/src/components/Body/index.vue +80 -16
  51. package/template/src/components/CesiumViewer/index.vue +36 -0
  52. package/template/src/components/Header/index.vue +19 -8
  53. package/template/src/components/OnboardingDeck/index.vue +449 -0
  54. package/template/src/data/onboardingSlides.ts +208 -0
  55. package/template/src/directive/focus.ts +9 -9
  56. package/template/src/layout/BasicLayout.vue +28 -28
  57. package/template/src/main.ts +25 -33
  58. package/template/src/router/index.ts +30 -24
  59. package/template/src/router/routeUtils.ts +13 -0
  60. package/template/src/stores/README.md +3 -3
  61. package/template/src/stores/useCounter.ts +12 -12
  62. package/template/src/styles/alerts.less +85 -85
  63. package/template/src/styles/global.css +326 -326
  64. package/template/src/styles/shell.css +232 -0
  65. package/template/src/utils/alert.ts +58 -58
  66. package/template/src/utils/axios-middleware.js +180 -0
  67. package/template/src/utils/cesium/index.ts +71 -0
  68. package/template/src/utils/components.ts +21 -21
  69. package/template/src/utils/composables/useAlert.ts +14 -14
  70. package/template/src/utils/composables/useFeatureGis.ts +24 -0
  71. package/template/src/utils/http.ts +5 -0
  72. package/template/src/views/examples/cesium/index.vue +85 -0
  73. package/template/src/views/examples/guide/index.vue +42 -0
  74. package/template/src/views/examples/test/index.vue +63 -0
  75. package/template/src/views/index.vue +8 -9
  76. package/template/src/vite-env.d.ts +1 -1
  77. package/template/tests/README.md +7 -6
  78. package/template/tests/e2e/README.md +3 -3
  79. package/template/tests/setup.ts +1 -1
  80. package/template/tests/unit/onboardingSlides.test.ts +20 -0
  81. package/template/tests/unit/router.utils.test.ts +21 -0
  82. package/template/tests/unit/scaffold.lib.test.ts +44 -0
  83. package/template/tests/unit/useFeatureGis.test.ts +14 -0
  84. package/template/tests/utils/helpers.ts +1 -1
  85. package/template/tsconfig.json +51 -51
  86. package/template/tsconfig.node.json +11 -11
  87. package/template/types/README.md +3 -3
  88. package/template/types/env.d.ts +13 -0
  89. package/template/types/global.d.ts +9 -9
  90. package/template/vite.config.ts +89 -75
  91. package/template/vitest.config.ts +22 -9
  92. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_0.json +0 -1012
  93. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_1.json +0 -1012
  94. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_10.json +0 -1012
  95. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_11.json +0 -1012
  96. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_12.json +0 -1012
  97. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_13.json +0 -1012
  98. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_14.json +0 -1012
  99. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_15.json +0 -1012
  100. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_16.json +0 -1012
  101. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_17.json +0 -1012
  102. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_18.json +0 -1012
  103. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_19.json +0 -1012
  104. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_2.json +0 -1012
  105. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_20.json +0 -1012
  106. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_21.json +0 -1012
  107. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_22.json +0 -1012
  108. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_23.json +0 -1012
  109. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_24.json +0 -1012
  110. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_25.json +0 -1012
  111. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_26.json +0 -1012
  112. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_27.json +0 -438
  113. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_3.json +0 -1012
  114. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_4.json +0 -1012
  115. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_5.json +0 -1012
  116. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_6.json +0 -1012
  117. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_7.json +0 -1012
  118. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_8.json +0 -1012
  119. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_9.json +0 -1012
  120. package/template/public/Cesium1.119/Assets/Images/bing_maps_credit.png +0 -0
  121. package/template/public/Cesium1.119/Assets/Images/cesium_credit.png +0 -0
  122. package/template/public/Cesium1.119/Assets/Images/google_earth_credit.png +0 -0
  123. package/template/public/Cesium1.119/Assets/Images/ion-credit.png +0 -0
  124. package/template/public/Cesium1.119/Assets/Textures/LensFlare/DirtMask.jpg +0 -0
  125. package/template/public/Cesium1.119/Assets/Textures/LensFlare/StarBurst.jpg +0 -0
  126. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/0/0/0.jpg +0 -0
  127. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/0/1/0.jpg +0 -0
  128. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/1/0/0.jpg +0 -0
  129. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/1/0/1.jpg +0 -0
  130. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/1/1/0.jpg +0 -0
  131. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/1/1/1.jpg +0 -0
  132. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/1/2/0.jpg +0 -0
  133. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/1/2/1.jpg +0 -0
  134. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/1/3/0.jpg +0 -0
  135. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/1/3/1.jpg +0 -0
  136. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/0/0.jpg +0 -0
  137. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/0/1.jpg +0 -0
  138. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/0/2.jpg +0 -0
  139. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/0/3.jpg +0 -0
  140. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/1/0.jpg +0 -0
  141. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/1/1.jpg +0 -0
  142. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/1/2.jpg +0 -0
  143. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/1/3.jpg +0 -0
  144. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/2/0.jpg +0 -0
  145. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/2/1.jpg +0 -0
  146. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/2/2.jpg +0 -0
  147. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/2/3.jpg +0 -0
  148. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/3/0.jpg +0 -0
  149. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/3/1.jpg +0 -0
  150. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/3/2.jpg +0 -0
  151. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/3/3.jpg +0 -0
  152. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/4/0.jpg +0 -0
  153. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/4/1.jpg +0 -0
  154. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/4/2.jpg +0 -0
  155. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/4/3.jpg +0 -0
  156. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/5/0.jpg +0 -0
  157. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/5/1.jpg +0 -0
  158. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/5/2.jpg +0 -0
  159. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/5/3.jpg +0 -0
  160. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/6/0.jpg +0 -0
  161. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/6/1.jpg +0 -0
  162. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/6/2.jpg +0 -0
  163. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/6/3.jpg +0 -0
  164. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/7/0.jpg +0 -0
  165. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/7/1.jpg +0 -0
  166. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/7/2.jpg +0 -0
  167. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/7/3.jpg +0 -0
  168. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/tilemapresource.xml +0 -14
  169. package/template/public/Cesium1.119/Assets/Textures/SkyBox/tycho2t3_80_mx.jpg +0 -0
  170. package/template/public/Cesium1.119/Assets/Textures/SkyBox/tycho2t3_80_my.jpg +0 -0
  171. package/template/public/Cesium1.119/Assets/Textures/SkyBox/tycho2t3_80_mz.jpg +0 -0
  172. package/template/public/Cesium1.119/Assets/Textures/SkyBox/tycho2t3_80_px.jpg +0 -0
  173. package/template/public/Cesium1.119/Assets/Textures/SkyBox/tycho2t3_80_py.jpg +0 -0
  174. package/template/public/Cesium1.119/Assets/Textures/SkyBox/tycho2t3_80_pz.jpg +0 -0
  175. package/template/public/Cesium1.119/Assets/Textures/maki/airfield.png +0 -0
  176. package/template/public/Cesium1.119/Assets/Textures/maki/airport.png +0 -0
  177. package/template/public/Cesium1.119/Assets/Textures/maki/alcohol-shop.png +0 -0
  178. package/template/public/Cesium1.119/Assets/Textures/maki/america-football.png +0 -0
  179. package/template/public/Cesium1.119/Assets/Textures/maki/art-gallery.png +0 -0
  180. package/template/public/Cesium1.119/Assets/Textures/maki/bakery.png +0 -0
  181. package/template/public/Cesium1.119/Assets/Textures/maki/bank.png +0 -0
  182. package/template/public/Cesium1.119/Assets/Textures/maki/bar.png +0 -0
  183. package/template/public/Cesium1.119/Assets/Textures/maki/baseball.png +0 -0
  184. package/template/public/Cesium1.119/Assets/Textures/maki/basketball.png +0 -0
  185. package/template/public/Cesium1.119/Assets/Textures/maki/beer.png +0 -0
  186. package/template/public/Cesium1.119/Assets/Textures/maki/bicycle.png +0 -0
  187. package/template/public/Cesium1.119/Assets/Textures/maki/building.png +0 -0
  188. package/template/public/Cesium1.119/Assets/Textures/maki/bus.png +0 -0
  189. package/template/public/Cesium1.119/Assets/Textures/maki/cafe.png +0 -0
  190. package/template/public/Cesium1.119/Assets/Textures/maki/camera.png +0 -0
  191. package/template/public/Cesium1.119/Assets/Textures/maki/campsite.png +0 -0
  192. package/template/public/Cesium1.119/Assets/Textures/maki/car.png +0 -0
  193. package/template/public/Cesium1.119/Assets/Textures/maki/cemetery.png +0 -0
  194. package/template/public/Cesium1.119/Assets/Textures/maki/cesium.png +0 -0
  195. package/template/public/Cesium1.119/Assets/Textures/maki/chemist.png +0 -0
  196. package/template/public/Cesium1.119/Assets/Textures/maki/cinema.png +0 -0
  197. package/template/public/Cesium1.119/Assets/Textures/maki/circle-stroked.png +0 -0
  198. package/template/public/Cesium1.119/Assets/Textures/maki/circle.png +0 -0
  199. package/template/public/Cesium1.119/Assets/Textures/maki/city.png +0 -0
  200. package/template/public/Cesium1.119/Assets/Textures/maki/clothing-store.png +0 -0
  201. package/template/public/Cesium1.119/Assets/Textures/maki/college.png +0 -0
  202. package/template/public/Cesium1.119/Assets/Textures/maki/commercial.png +0 -0
  203. package/template/public/Cesium1.119/Assets/Textures/maki/cricket.png +0 -0
  204. package/template/public/Cesium1.119/Assets/Textures/maki/cross.png +0 -0
  205. package/template/public/Cesium1.119/Assets/Textures/maki/dam.png +0 -0
  206. package/template/public/Cesium1.119/Assets/Textures/maki/danger.png +0 -0
  207. package/template/public/Cesium1.119/Assets/Textures/maki/disability.png +0 -0
  208. package/template/public/Cesium1.119/Assets/Textures/maki/dog-park.png +0 -0
  209. package/template/public/Cesium1.119/Assets/Textures/maki/embassy.png +0 -0
  210. package/template/public/Cesium1.119/Assets/Textures/maki/emergency-telephone.png +0 -0
  211. package/template/public/Cesium1.119/Assets/Textures/maki/entrance.png +0 -0
  212. package/template/public/Cesium1.119/Assets/Textures/maki/farm.png +0 -0
  213. package/template/public/Cesium1.119/Assets/Textures/maki/fast-food.png +0 -0
  214. package/template/public/Cesium1.119/Assets/Textures/maki/ferry.png +0 -0
  215. package/template/public/Cesium1.119/Assets/Textures/maki/fire-station.png +0 -0
  216. package/template/public/Cesium1.119/Assets/Textures/maki/fuel.png +0 -0
  217. package/template/public/Cesium1.119/Assets/Textures/maki/garden.png +0 -0
  218. package/template/public/Cesium1.119/Assets/Textures/maki/gift.png +0 -0
  219. package/template/public/Cesium1.119/Assets/Textures/maki/golf.png +0 -0
  220. package/template/public/Cesium1.119/Assets/Textures/maki/grocery.png +0 -0
  221. package/template/public/Cesium1.119/Assets/Textures/maki/hairdresser.png +0 -0
  222. package/template/public/Cesium1.119/Assets/Textures/maki/harbor.png +0 -0
  223. package/template/public/Cesium1.119/Assets/Textures/maki/heart.png +0 -0
  224. package/template/public/Cesium1.119/Assets/Textures/maki/heliport.png +0 -0
  225. package/template/public/Cesium1.119/Assets/Textures/maki/hospital.png +0 -0
  226. package/template/public/Cesium1.119/Assets/Textures/maki/ice-cream.png +0 -0
  227. package/template/public/Cesium1.119/Assets/Textures/maki/industrial.png +0 -0
  228. package/template/public/Cesium1.119/Assets/Textures/maki/land-use.png +0 -0
  229. package/template/public/Cesium1.119/Assets/Textures/maki/laundry.png +0 -0
  230. package/template/public/Cesium1.119/Assets/Textures/maki/library.png +0 -0
  231. package/template/public/Cesium1.119/Assets/Textures/maki/lighthouse.png +0 -0
  232. package/template/public/Cesium1.119/Assets/Textures/maki/lodging.png +0 -0
  233. package/template/public/Cesium1.119/Assets/Textures/maki/logging.png +0 -0
  234. package/template/public/Cesium1.119/Assets/Textures/maki/london-underground.png +0 -0
  235. package/template/public/Cesium1.119/Assets/Textures/maki/marker-stroked.png +0 -0
  236. package/template/public/Cesium1.119/Assets/Textures/maki/marker.png +0 -0
  237. package/template/public/Cesium1.119/Assets/Textures/maki/minefield.png +0 -0
  238. package/template/public/Cesium1.119/Assets/Textures/maki/mobilephone.png +0 -0
  239. package/template/public/Cesium1.119/Assets/Textures/maki/monument.png +0 -0
  240. package/template/public/Cesium1.119/Assets/Textures/maki/museum.png +0 -0
  241. package/template/public/Cesium1.119/Assets/Textures/maki/music.png +0 -0
  242. package/template/public/Cesium1.119/Assets/Textures/maki/oil-well.png +0 -0
  243. package/template/public/Cesium1.119/Assets/Textures/maki/park.png +0 -0
  244. package/template/public/Cesium1.119/Assets/Textures/maki/park2.png +0 -0
  245. package/template/public/Cesium1.119/Assets/Textures/maki/parking-garage.png +0 -0
  246. package/template/public/Cesium1.119/Assets/Textures/maki/parking.png +0 -0
  247. package/template/public/Cesium1.119/Assets/Textures/maki/pharmacy.png +0 -0
  248. package/template/public/Cesium1.119/Assets/Textures/maki/pitch.png +0 -0
  249. package/template/public/Cesium1.119/Assets/Textures/maki/place-of-worship.png +0 -0
  250. package/template/public/Cesium1.119/Assets/Textures/maki/playground.png +0 -0
  251. package/template/public/Cesium1.119/Assets/Textures/maki/police.png +0 -0
  252. package/template/public/Cesium1.119/Assets/Textures/maki/polling-place.png +0 -0
  253. package/template/public/Cesium1.119/Assets/Textures/maki/post.png +0 -0
  254. package/template/public/Cesium1.119/Assets/Textures/maki/prison.png +0 -0
  255. package/template/public/Cesium1.119/Assets/Textures/maki/rail-above.png +0 -0
  256. package/template/public/Cesium1.119/Assets/Textures/maki/rail-light.png +0 -0
  257. package/template/public/Cesium1.119/Assets/Textures/maki/rail-metro.png +0 -0
  258. package/template/public/Cesium1.119/Assets/Textures/maki/rail-underground.png +0 -0
  259. package/template/public/Cesium1.119/Assets/Textures/maki/rail.png +0 -0
  260. package/template/public/Cesium1.119/Assets/Textures/maki/religious-christian.png +0 -0
  261. package/template/public/Cesium1.119/Assets/Textures/maki/religious-jewish.png +0 -0
  262. package/template/public/Cesium1.119/Assets/Textures/maki/religious-muslim.png +0 -0
  263. package/template/public/Cesium1.119/Assets/Textures/maki/restaurant.png +0 -0
  264. package/template/public/Cesium1.119/Assets/Textures/maki/roadblock.png +0 -0
  265. package/template/public/Cesium1.119/Assets/Textures/maki/rocket.png +0 -0
  266. package/template/public/Cesium1.119/Assets/Textures/maki/school.png +0 -0
  267. package/template/public/Cesium1.119/Assets/Textures/maki/scooter.png +0 -0
  268. package/template/public/Cesium1.119/Assets/Textures/maki/shop.png +0 -0
  269. package/template/public/Cesium1.119/Assets/Textures/maki/skiing.png +0 -0
  270. package/template/public/Cesium1.119/Assets/Textures/maki/slaughterhouse.png +0 -0
  271. package/template/public/Cesium1.119/Assets/Textures/maki/soccer.png +0 -0
  272. package/template/public/Cesium1.119/Assets/Textures/maki/square-stroked.png +0 -0
  273. package/template/public/Cesium1.119/Assets/Textures/maki/square.png +0 -0
  274. package/template/public/Cesium1.119/Assets/Textures/maki/star-stroked.png +0 -0
  275. package/template/public/Cesium1.119/Assets/Textures/maki/star.png +0 -0
  276. package/template/public/Cesium1.119/Assets/Textures/maki/suitcase.png +0 -0
  277. package/template/public/Cesium1.119/Assets/Textures/maki/swimming.png +0 -0
  278. package/template/public/Cesium1.119/Assets/Textures/maki/telephone.png +0 -0
  279. package/template/public/Cesium1.119/Assets/Textures/maki/tennis.png +0 -0
  280. package/template/public/Cesium1.119/Assets/Textures/maki/theatre.png +0 -0
  281. package/template/public/Cesium1.119/Assets/Textures/maki/toilets.png +0 -0
  282. package/template/public/Cesium1.119/Assets/Textures/maki/town-hall.png +0 -0
  283. package/template/public/Cesium1.119/Assets/Textures/maki/town.png +0 -0
  284. package/template/public/Cesium1.119/Assets/Textures/maki/triangle-stroked.png +0 -0
  285. package/template/public/Cesium1.119/Assets/Textures/maki/triangle.png +0 -0
  286. package/template/public/Cesium1.119/Assets/Textures/maki/village.png +0 -0
  287. package/template/public/Cesium1.119/Assets/Textures/maki/warehouse.png +0 -0
  288. package/template/public/Cesium1.119/Assets/Textures/maki/waste-basket.png +0 -0
  289. package/template/public/Cesium1.119/Assets/Textures/maki/water.png +0 -0
  290. package/template/public/Cesium1.119/Assets/Textures/maki/wetland.png +0 -0
  291. package/template/public/Cesium1.119/Assets/Textures/maki/zoo.png +0 -0
  292. package/template/public/Cesium1.119/Assets/Textures/moonSmall.jpg +0 -0
  293. package/template/public/Cesium1.119/Assets/Textures/pin.svg +0 -1
  294. package/template/public/Cesium1.119/Assets/Textures/waterNormals.jpg +0 -0
  295. package/template/public/Cesium1.119/Assets/Textures/waterNormalsSmall.jpg +0 -0
  296. package/template/public/Cesium1.119/Assets/approximateTerrainHeights.json +0 -10924
  297. package/template/public/Cesium1.119/Cesium.js +0 -185772
  298. package/template/public/Cesium1.119/ThirdParty/Workers/package.json +0 -3
  299. package/template/public/Cesium1.119/ThirdParty/Workers/pako_deflate.min.js +0 -1681
  300. package/template/public/Cesium1.119/ThirdParty/Workers/pako_inflate.min.js +0 -1489
  301. package/template/public/Cesium1.119/ThirdParty/Workers/z-worker-pako.js +0 -1070
  302. package/template/public/Cesium1.119/ThirdParty/basis_transcoder.wasm +0 -0
  303. package/template/public/Cesium1.119/ThirdParty/draco_decoder.wasm +0 -0
  304. package/template/public/Cesium1.119/ThirdParty/google-earth-dbroot-parser.js +0 -11424
  305. package/template/public/Cesium1.119/Widgets/Animation/Animation.css +0 -127
  306. package/template/public/Cesium1.119/Widgets/Animation/lighter.css +0 -78
  307. package/template/public/Cesium1.119/Widgets/BaseLayerPicker/BaseLayerPicker.css +0 -112
  308. package/template/public/Cesium1.119/Widgets/BaseLayerPicker/lighter.css +0 -28
  309. package/template/public/Cesium1.119/Widgets/Cesium3DTilesInspector/Cesium3DTilesInspector.css +0 -104
  310. package/template/public/Cesium1.119/Widgets/CesiumInspector/CesiumInspector.css +0 -115
  311. package/template/public/Cesium1.119/Widgets/CesiumWidget/CesiumWidget.css +0 -119
  312. package/template/public/Cesium1.119/Widgets/CesiumWidget/lighter.css +0 -14
  313. package/template/public/Cesium1.119/Widgets/FullscreenButton/FullscreenButton.css +0 -8
  314. package/template/public/Cesium1.119/Widgets/Geocoder/Geocoder.css +0 -72
  315. package/template/public/Cesium1.119/Widgets/Geocoder/lighter.css +0 -17
  316. package/template/public/Cesium1.119/Widgets/I3SBuildingSceneLayerExplorer/I3SBuildingSceneLayerExplorer.css +0 -27
  317. package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/ArcGisMapServiceWorldHillshade.png +0 -0
  318. package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/ArcGisMapServiceWorldImagery.png +0 -0
  319. package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/ArcGisMapServiceWorldOcean.png +0 -0
  320. package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/bingAerial.png +0 -0
  321. package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/bingAerialLabels.png +0 -0
  322. package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/bingRoads.png +0 -0
  323. package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/blueMarble.png +0 -0
  324. package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/earthAtNight.png +0 -0
  325. package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/mapQuestOpenStreetMap.png +0 -0
  326. package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/mapboxSatellite.png +0 -0
  327. package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/mapboxStreets.png +0 -0
  328. package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/mapboxTerrain.png +0 -0
  329. package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/naturalEarthII.png +0 -0
  330. package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/openStreetMap.png +0 -0
  331. package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/sentinel-2.png +0 -0
  332. package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/stadiaAlidadeSmooth.png +0 -0
  333. package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/stadiaAlidadeSmoothDark.png +0 -0
  334. package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/stamenToner.png +0 -0
  335. package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/stamenWatercolor.png +0 -0
  336. package/template/public/Cesium1.119/Widgets/Images/NavigationHelp/Mouse.svg +0 -84
  337. package/template/public/Cesium1.119/Widgets/Images/NavigationHelp/MouseLeft.svg +0 -76
  338. package/template/public/Cesium1.119/Widgets/Images/NavigationHelp/MouseMiddle.svg +0 -76
  339. package/template/public/Cesium1.119/Widgets/Images/NavigationHelp/MouseRight.svg +0 -76
  340. package/template/public/Cesium1.119/Widgets/Images/NavigationHelp/Touch.svg +0 -120
  341. package/template/public/Cesium1.119/Widgets/Images/NavigationHelp/TouchDrag.svg +0 -129
  342. package/template/public/Cesium1.119/Widgets/Images/NavigationHelp/TouchRotate.svg +0 -76
  343. package/template/public/Cesium1.119/Widgets/Images/NavigationHelp/TouchTilt.svg +0 -135
  344. package/template/public/Cesium1.119/Widgets/Images/NavigationHelp/TouchZoom.svg +0 -74
  345. package/template/public/Cesium1.119/Widgets/Images/TerrainProviders/CesiumWorldTerrain.png +0 -0
  346. package/template/public/Cesium1.119/Widgets/Images/TerrainProviders/Ellipsoid.png +0 -0
  347. package/template/public/Cesium1.119/Widgets/Images/TimelineIcons.png +0 -0
  348. package/template/public/Cesium1.119/Widgets/Images/info-loading.gif +0 -0
  349. package/template/public/Cesium1.119/Widgets/InfoBox/InfoBox.css +0 -94
  350. package/template/public/Cesium1.119/Widgets/InfoBox/InfoBoxDescription.css +0 -178
  351. package/template/public/Cesium1.119/Widgets/NavigationHelpButton/NavigationHelpButton.css +0 -95
  352. package/template/public/Cesium1.119/Widgets/NavigationHelpButton/lighter.css +0 -38
  353. package/template/public/Cesium1.119/Widgets/PerformanceWatchdog/PerformanceWatchdog.css +0 -15
  354. package/template/public/Cesium1.119/Widgets/ProjectionPicker/ProjectionPicker.css +0 -46
  355. package/template/public/Cesium1.119/Widgets/SceneModePicker/SceneModePicker.css +0 -72
  356. package/template/public/Cesium1.119/Widgets/SelectionIndicator/SelectionIndicator.css +0 -22
  357. package/template/public/Cesium1.119/Widgets/Timeline/Timeline.css +0 -103
  358. package/template/public/Cesium1.119/Widgets/Timeline/lighter.css +0 -18
  359. package/template/public/Cesium1.119/Widgets/VRButton/VRButton.css +0 -8
  360. package/template/public/Cesium1.119/Widgets/Viewer/Viewer.css +0 -107
  361. package/template/public/Cesium1.119/Widgets/VoxelInspector/VoxelInspector.css +0 -18
  362. package/template/public/Cesium1.119/Widgets/lighter.css +0 -246
  363. package/template/public/Cesium1.119/Widgets/lighterShared.css +0 -46
  364. package/template/public/Cesium1.119/Widgets/shared.css +0 -103
  365. package/template/public/Cesium1.119/Widgets/widgets.css +0 -1376
  366. package/template/public/Cesium1.119/Workers/chunk-3C7WC463.js +0 -611
  367. package/template/public/Cesium1.119/Workers/chunk-3JW36LZF.js +0 -166
  368. package/template/public/Cesium1.119/Workers/chunk-4BTGX3WJ.js +0 -264
  369. package/template/public/Cesium1.119/Workers/chunk-4WRMLZA7.js +0 -128
  370. package/template/public/Cesium1.119/Workers/chunk-7Z5IIKOJ.js +0 -8046
  371. package/template/public/Cesium1.119/Workers/chunk-ABGXSJNX.js +0 -341
  372. package/template/public/Cesium1.119/Workers/chunk-AMQUWUD4.js +0 -269
  373. package/template/public/Cesium1.119/Workers/chunk-ATPDRNKI.js +0 -28
  374. package/template/public/Cesium1.119/Workers/chunk-BMHPVZ4H.js +0 -199
  375. package/template/public/Cesium1.119/Workers/chunk-CBEO3SHS.js +0 -1102
  376. package/template/public/Cesium1.119/Workers/chunk-CV7DLCWG.js +0 -485
  377. package/template/public/Cesium1.119/Workers/chunk-DQO6B4EQ.js +0 -76
  378. package/template/public/Cesium1.119/Workers/chunk-ED3TLP6D.js +0 -91
  379. package/template/public/Cesium1.119/Workers/chunk-EFZKO5RU.js +0 -42
  380. package/template/public/Cesium1.119/Workers/chunk-F5IHREXR.js +0 -2678
  381. package/template/public/Cesium1.119/Workers/chunk-FKRG4HDY.js +0 -516
  382. package/template/public/Cesium1.119/Workers/chunk-FYOYUPXG.js +0 -399
  383. package/template/public/Cesium1.119/Workers/chunk-GFN7NNSJ.js +0 -65
  384. package/template/public/Cesium1.119/Workers/chunk-HEEMUCG6.js +0 -92
  385. package/template/public/Cesium1.119/Workers/chunk-HSWA4OEL.js +0 -672
  386. package/template/public/Cesium1.119/Workers/chunk-IAC5XVZV.js +0 -287
  387. package/template/public/Cesium1.119/Workers/chunk-II4VNKYR.js +0 -50
  388. package/template/public/Cesium1.119/Workers/chunk-ILGBPNP6.js +0 -28
  389. package/template/public/Cesium1.119/Workers/chunk-IRH46BDL.js +0 -124
  390. package/template/public/Cesium1.119/Workers/chunk-IUA6FAOZ.js +0 -31
  391. package/template/public/Cesium1.119/Workers/chunk-K4ASOM65.js +0 -331
  392. package/template/public/Cesium1.119/Workers/chunk-KCIZBVXL.js +0 -258
  393. package/template/public/Cesium1.119/Workers/chunk-KF5NF354.js +0 -162
  394. package/template/public/Cesium1.119/Workers/chunk-KRKI6AAO.js +0 -773
  395. package/template/public/Cesium1.119/Workers/chunk-KZNJOCYU.js +0 -162
  396. package/template/public/Cesium1.119/Workers/chunk-O5IJ3OGP.js +0 -857
  397. package/template/public/Cesium1.119/Workers/chunk-OO23RBLX.js +0 -183
  398. package/template/public/Cesium1.119/Workers/chunk-P37AI2DW.js +0 -85
  399. package/template/public/Cesium1.119/Workers/chunk-PDMQLSBL.js +0 -108
  400. package/template/public/Cesium1.119/Workers/chunk-PEYJTJPE.js +0 -73
  401. package/template/public/Cesium1.119/Workers/chunk-POASMU2N.js +0 -2372
  402. package/template/public/Cesium1.119/Workers/chunk-PXCJYT2S.js +0 -73
  403. package/template/public/Cesium1.119/Workers/chunk-Q6L7X3LP.js +0 -538
  404. package/template/public/Cesium1.119/Workers/chunk-QB3MDM4J.js +0 -1670
  405. package/template/public/Cesium1.119/Workers/chunk-R6KGAEF6.js +0 -392
  406. package/template/public/Cesium1.119/Workers/chunk-RXTBM4OI.js +0 -57
  407. package/template/public/Cesium1.119/Workers/chunk-SB224QGV.js +0 -72
  408. package/template/public/Cesium1.119/Workers/chunk-T6BE4RZK.js +0 -37
  409. package/template/public/Cesium1.119/Workers/chunk-TAMCUKAR.js +0 -814
  410. package/template/public/Cesium1.119/Workers/chunk-TMSETF7M.js +0 -579
  411. package/template/public/Cesium1.119/Workers/chunk-TOGHF3VN.js +0 -376
  412. package/template/public/Cesium1.119/Workers/chunk-UH2WFNTA.js +0 -111
  413. package/template/public/Cesium1.119/Workers/chunk-V7JEDBOE.js +0 -573
  414. package/template/public/Cesium1.119/Workers/chunk-VBIROZR5.js +0 -633
  415. package/template/public/Cesium1.119/Workers/chunk-W23CU777.js +0 -271
  416. package/template/public/Cesium1.119/Workers/chunk-X5IHHI6X.js +0 -173
  417. package/template/public/Cesium1.119/Workers/chunk-XHX2UPDO.js +0 -217
  418. package/template/public/Cesium1.119/Workers/combineGeometry.js +0 -53
  419. package/template/public/Cesium1.119/Workers/createBoxGeometry.js +0 -45
  420. package/template/public/Cesium1.119/Workers/createBoxOutlineGeometry.js +0 -189
  421. package/template/public/Cesium1.119/Workers/createCircleGeometry.js +0 -148
  422. package/template/public/Cesium1.119/Workers/createCircleOutlineGeometry.js +0 -105
  423. package/template/public/Cesium1.119/Workers/createCoplanarPolygonGeometry.js +0 -293
  424. package/template/public/Cesium1.119/Workers/createCoplanarPolygonOutlineGeometry.js +0 -143
  425. package/template/public/Cesium1.119/Workers/createCorridorGeometry.js +0 -830
  426. package/template/public/Cesium1.119/Workers/createCorridorOutlineGeometry.js +0 -417
  427. package/template/public/Cesium1.119/Workers/createCylinderGeometry.js +0 -47
  428. package/template/public/Cesium1.119/Workers/createCylinderOutlineGeometry.js +0 -170
  429. package/template/public/Cesium1.119/Workers/createEllipseGeometry.js +0 -58
  430. package/template/public/Cesium1.119/Workers/createEllipseOutlineGeometry.js +0 -51
  431. package/template/public/Cesium1.119/Workers/createEllipsoidGeometry.js +0 -46
  432. package/template/public/Cesium1.119/Workers/createEllipsoidOutlineGeometry.js +0 -45
  433. package/template/public/Cesium1.119/Workers/createFrustumGeometry.js +0 -45
  434. package/template/public/Cesium1.119/Workers/createFrustumOutlineGeometry.js +0 -164
  435. package/template/public/Cesium1.119/Workers/createGeometry.js +0 -159
  436. package/template/public/Cesium1.119/Workers/createGroundPolylineGeometry.js +0 -911
  437. package/template/public/Cesium1.119/Workers/createPlaneGeometry.js +0 -185
  438. package/template/public/Cesium1.119/Workers/createPlaneOutlineGeometry.js +0 -93
  439. package/template/public/Cesium1.119/Workers/createPolygonGeometry.js +0 -884
  440. package/template/public/Cesium1.119/Workers/createPolygonOutlineGeometry.js +0 -359
  441. package/template/public/Cesium1.119/Workers/createPolylineGeometry.js +0 -349
  442. package/template/public/Cesium1.119/Workers/createPolylineVolumeGeometry.js +0 -262
  443. package/template/public/Cesium1.119/Workers/createPolylineVolumeOutlineGeometry.js +0 -177
  444. package/template/public/Cesium1.119/Workers/createRectangleGeometry.js +0 -787
  445. package/template/public/Cesium1.119/Workers/createRectangleOutlineGeometry.js +0 -299
  446. package/template/public/Cesium1.119/Workers/createSimplePolylineGeometry.js +0 -294
  447. package/template/public/Cesium1.119/Workers/createSphereGeometry.js +0 -84
  448. package/template/public/Cesium1.119/Workers/createSphereOutlineGeometry.js +0 -83
  449. package/template/public/Cesium1.119/Workers/createTaskProcessorWorker.js +0 -28
  450. package/template/public/Cesium1.119/Workers/createVectorTileClampedPolylines.js +0 -289
  451. package/template/public/Cesium1.119/Workers/createVectorTileGeometries.js +0 -258
  452. package/template/public/Cesium1.119/Workers/createVectorTilePoints.js +0 -79
  453. package/template/public/Cesium1.119/Workers/createVectorTilePolygons.js +0 -275
  454. package/template/public/Cesium1.119/Workers/createVectorTilePolylines.js +0 -176
  455. package/template/public/Cesium1.119/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +0 -375
  456. package/template/public/Cesium1.119/Workers/createVerticesFromHeightmap.js +0 -1772
  457. package/template/public/Cesium1.119/Workers/createVerticesFromQuantizedTerrainMesh.js +0 -425
  458. package/template/public/Cesium1.119/Workers/createWallGeometry.js +0 -320
  459. package/template/public/Cesium1.119/Workers/createWallOutlineGeometry.js +0 -229
  460. package/template/public/Cesium1.119/Workers/decodeDraco.js +0 -227
  461. package/template/public/Cesium1.119/Workers/decodeGoogleEarthEnterprisePacket.js +0 -1836
  462. package/template/public/Cesium1.119/Workers/decodeI3S.js +0 -924
  463. package/template/public/Cesium1.119/Workers/transcodeKTX2.js +0 -3180
  464. package/template/public/Cesium1.119/Workers/transferTypedArrayTest.js +0 -34
  465. package/template/public/Cesium1.119/Workers/upsampleQuantizedTerrainMesh.js +0 -534
  466. package/template/public/Cesium1.119/index.cjs +0 -185632
  467. package/template/public/Cesium1.119/index.js +0 -182874
  468. package/template/src/views/Test/index.vue +0 -23
  469. package/template/tests/unit/example.test.ts +0 -7
@@ -0,0 +1,232 @@
1
+ :root {
2
+ --shell-bg: #0f172a;
3
+ --shell-surface: #ffffff;
4
+ --shell-muted: #64748b;
5
+ --shell-text: #0f172a;
6
+ --shell-accent: #2563eb;
7
+ --shell-accent-soft: #dbeafe;
8
+ --shell-border: #e2e8f0;
9
+ --shell-radius: 12px;
10
+ --shell-shadow: 0 12px 40px rgb(15 23 42 / 12%);
11
+ }
12
+
13
+ .shell-page {
14
+ min-height: 100vh;
15
+ background: linear-gradient(160deg, #0f172a 0%, #1e3a5f 45%, #0f172a 100%);
16
+ color: var(--shell-text);
17
+ }
18
+
19
+ .shell-header {
20
+ display: flex;
21
+ align-items: center;
22
+ justify-content: space-between;
23
+ padding: 16px 28px;
24
+ color: #f8fafc;
25
+ border-bottom: 1px solid rgb(255 255 255 / 8%);
26
+ backdrop-filter: blur(8px);
27
+ }
28
+
29
+ .shell-header__brand {
30
+ display: flex;
31
+ flex-direction: column;
32
+ gap: 2px;
33
+ }
34
+
35
+ .shell-header__title {
36
+ margin: 0;
37
+ font-size: 18px;
38
+ font-weight: 600;
39
+ letter-spacing: 0.02em;
40
+ }
41
+
42
+ .shell-header__tag {
43
+ font-size: 12px;
44
+ color: #94a3b8;
45
+ }
46
+
47
+ .shell-main {
48
+ max-width: 960px;
49
+ margin: 0 auto;
50
+ padding: 40px 24px 64px;
51
+ }
52
+
53
+ .shell-hero {
54
+ margin-bottom: 32px;
55
+ padding: 32px;
56
+ border-radius: var(--shell-radius);
57
+ background: var(--shell-surface);
58
+ box-shadow: var(--shell-shadow);
59
+ }
60
+
61
+ .shell-hero h2 {
62
+ margin: 0 0 8px;
63
+ font-size: 26px;
64
+ font-weight: 700;
65
+ color: var(--shell-text);
66
+ }
67
+
68
+ .shell-hero p {
69
+ margin: 0;
70
+ line-height: 1.6;
71
+ color: var(--shell-muted);
72
+ }
73
+
74
+ .shell-hero code {
75
+ padding: 2px 8px;
76
+ border-radius: 6px;
77
+ background: var(--shell-accent-soft);
78
+ color: var(--shell-accent);
79
+ font-size: 13px;
80
+ }
81
+
82
+ .shell-grid {
83
+ display: grid;
84
+ grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
85
+ gap: 16px;
86
+ }
87
+
88
+ .shell-card {
89
+ display: flex;
90
+ flex-direction: column;
91
+ gap: 8px;
92
+ padding: 20px;
93
+ border-radius: var(--shell-radius);
94
+ background: var(--shell-surface);
95
+ border: 1px solid var(--shell-border);
96
+ box-shadow: var(--shell-shadow);
97
+ text-decoration: none;
98
+ color: inherit;
99
+ transition:
100
+ transform 0.2s ease,
101
+ box-shadow 0.2s ease,
102
+ border-color 0.2s ease;
103
+ }
104
+
105
+ .shell-card:hover {
106
+ transform: translateY(-2px);
107
+ border-color: var(--shell-accent);
108
+ box-shadow: 0 16px 48px rgb(37 99 235 / 18%);
109
+ }
110
+
111
+ .shell-card__icon {
112
+ font-size: 28px;
113
+ line-height: 1;
114
+ }
115
+
116
+ .shell-card__title {
117
+ margin: 0;
118
+ font-size: 16px;
119
+ font-weight: 600;
120
+ }
121
+
122
+ .shell-card__desc {
123
+ margin: 0;
124
+ font-size: 13px;
125
+ color: var(--shell-muted);
126
+ line-height: 1.5;
127
+ }
128
+
129
+ .shell-card__arrow {
130
+ margin-top: auto;
131
+ font-size: 13px;
132
+ font-weight: 500;
133
+ color: var(--shell-accent);
134
+ }
135
+
136
+ .shell-badge {
137
+ display: inline-block;
138
+ padding: 4px 10px;
139
+ border-radius: 999px;
140
+ font-size: 11px;
141
+ font-weight: 500;
142
+ background: #fef3c7;
143
+ color: #92400e;
144
+ }
145
+
146
+ .shell-btn {
147
+ display: inline-flex;
148
+ align-items: center;
149
+ gap: 6px;
150
+ padding: 8px 16px;
151
+ border: none;
152
+ border-radius: 8px;
153
+ font-size: 14px;
154
+ font-weight: 500;
155
+ cursor: pointer;
156
+ transition: background 0.15s ease;
157
+ }
158
+
159
+ .shell-btn--ghost {
160
+ background: rgb(255 255 255 / 12%);
161
+ color: #f8fafc;
162
+ }
163
+
164
+ .shell-btn--ghost:hover {
165
+ background: rgb(255 255 255 / 20%);
166
+ }
167
+
168
+ .shell-btn--primary {
169
+ background: var(--shell-accent);
170
+ color: #fff;
171
+ }
172
+
173
+ .shell-btn--primary:hover {
174
+ background: #1d4ed8;
175
+ }
176
+
177
+ .example-toolbar {
178
+ display: flex;
179
+ align-items: center;
180
+ gap: 12px;
181
+ flex-shrink: 0;
182
+ padding: 12px 20px;
183
+ background: var(--shell-surface);
184
+ border-bottom: 1px solid var(--shell-border);
185
+ box-shadow: 0 1px 0 rgb(15 23 42 / 4%);
186
+ }
187
+
188
+ .example-toolbar__title {
189
+ flex: 1;
190
+ font-size: 14px;
191
+ font-weight: 600;
192
+ color: var(--shell-muted);
193
+ }
194
+
195
+ .example-panel {
196
+ display: flex;
197
+ flex-direction: column;
198
+ align-items: center;
199
+ justify-content: center;
200
+ gap: 16px;
201
+ min-height: calc(100vh - 52px);
202
+ padding: 32px 24px;
203
+ background: linear-gradient(180deg, #f8fafc 0%, #e2e8f0 100%);
204
+ }
205
+
206
+ .example-panel__card {
207
+ width: min(420px, 100%);
208
+ padding: 32px;
209
+ border-radius: var(--shell-radius);
210
+ background: var(--shell-surface);
211
+ box-shadow: var(--shell-shadow);
212
+ text-align: center;
213
+ }
214
+
215
+ .example-panel__card h1 {
216
+ margin: 12px 0 8px;
217
+ font-size: 22px;
218
+ }
219
+
220
+ .example-panel__counter {
221
+ font-size: 32px;
222
+ font-weight: 700;
223
+ color: var(--shell-accent);
224
+ margin: 8px 0 20px;
225
+ }
226
+
227
+ .example-panel__actions {
228
+ display: flex;
229
+ flex-wrap: wrap;
230
+ gap: 10px;
231
+ justify-content: center;
232
+ }
@@ -1,58 +1,58 @@
1
- import { App } from 'vue';
2
-
3
- export default {
4
- install(app: App) {
5
- // 创建或获取一个统一的alert容器
6
- const getOrCreateAlertsContainer = () => {
7
- let alertsContainer = document.querySelector('.alerts-container');
8
- if (!alertsContainer) {
9
- alertsContainer = document.createElement('div');
10
- alertsContainer.setAttribute('class', 'alerts-container');
11
- document.body.appendChild(alertsContainer);
12
- }
13
- return alertsContainer;
14
- };
15
-
16
- const alertMethod = (
17
- message: string,
18
- type: 'success' | 'warning' | 'error' | 'info',
19
- duration = 3000
20
- ) => {
21
- const alertsContainer = getOrCreateAlertsContainer();
22
- const alertContainer = document.createElement('div');
23
- alertContainer.setAttribute('class', `alert alert-${type}`);
24
- const alertContent = document.createElement('div');
25
- alertContent.innerText = message;
26
- const close = document.createElement('div');
27
- close.innerText = '×';
28
- const to1 = window.setTimeout(() => {
29
- alertContainer.attributeStyleMap.set(
30
- 'animation',
31
- 'fadeOut 0.6s ease-out'
32
- );
33
- alertContainer.attributeStyleMap.set('animation-play-state', 'running');
34
- }, duration - 450);
35
- const to2 = window.setTimeout(() => {
36
- alertsContainer.removeChild(alertContainer);
37
- }, duration);
38
- close.onclick = () => {
39
- alertContainer.attributeStyleMap.set(
40
- 'animation',
41
- 'fadeOut 0.6s ease-out'
42
- );
43
- alertContainer.attributeStyleMap.set('animation-play-state', 'running');
44
- window.setTimeout(() => {
45
- alertsContainer.removeChild(alertContainer);
46
- window.clearTimeout(to1);
47
- window.clearTimeout(to2);
48
- }, 450);
49
- };
50
- alertContainer.appendChild(alertContent);
51
- alertContainer.appendChild(close);
52
- alertsContainer.appendChild(alertContainer);
53
- };
54
-
55
- // 使用 app.provide 提供 alert 方法
56
- app.provide('alert', alertMethod);
57
- },
58
- };
1
+ import { App } from 'vue';
2
+
3
+ export default {
4
+ install(app: App) {
5
+ // 创建或获取一个统一的alert容器
6
+ const getOrCreateAlertsContainer = () => {
7
+ let alertsContainer = document.querySelector('.alerts-container');
8
+ if (!alertsContainer) {
9
+ alertsContainer = document.createElement('div');
10
+ alertsContainer.setAttribute('class', 'alerts-container');
11
+ document.body.appendChild(alertsContainer);
12
+ }
13
+ return alertsContainer;
14
+ };
15
+
16
+ const alertMethod = (
17
+ message: string,
18
+ type: 'success' | 'warning' | 'error' | 'info',
19
+ duration = 3000
20
+ ) => {
21
+ const alertsContainer = getOrCreateAlertsContainer();
22
+ const alertContainer = document.createElement('div');
23
+ alertContainer.setAttribute('class', `alert alert-${type}`);
24
+ const alertContent = document.createElement('div');
25
+ alertContent.innerText = message;
26
+ const close = document.createElement('div');
27
+ close.innerText = '×';
28
+ const to1 = window.setTimeout(() => {
29
+ alertContainer.attributeStyleMap.set(
30
+ 'animation',
31
+ 'fadeOut 0.6s ease-out'
32
+ );
33
+ alertContainer.attributeStyleMap.set('animation-play-state', 'running');
34
+ }, duration - 450);
35
+ const to2 = window.setTimeout(() => {
36
+ alertsContainer.removeChild(alertContainer);
37
+ }, duration);
38
+ close.onclick = () => {
39
+ alertContainer.attributeStyleMap.set(
40
+ 'animation',
41
+ 'fadeOut 0.6s ease-out'
42
+ );
43
+ alertContainer.attributeStyleMap.set('animation-play-state', 'running');
44
+ window.setTimeout(() => {
45
+ alertsContainer.removeChild(alertContainer);
46
+ window.clearTimeout(to1);
47
+ window.clearTimeout(to2);
48
+ }, 450);
49
+ };
50
+ alertContainer.appendChild(alertContent);
51
+ alertContainer.appendChild(close);
52
+ alertsContainer.appendChild(alertContainer);
53
+ };
54
+
55
+ // 使用 app.provide 提供 alert 方法
56
+ app.provide('alert', alertMethod);
57
+ },
58
+ };
@@ -0,0 +1,180 @@
1
+ /**
2
+ * @file axios-middleware.js
3
+ * @description 该模块为 Axios 提供设置全局请求和响应拦截器的工具。
4
+ * 主要功能包括:
5
+ * - 缓存机制:减少重复请求,提高性能;
6
+ * - 错误处理:包括业务逻辑错误和网络错误的统一处理;
7
+ * - 基于令牌的身份验证:在请求中自动附加身份验证信息。
8
+ * @author inupedia
9
+ */
10
+
11
+ import axios from 'axios';
12
+ import { useAuthStore } from '@/stores/authStore';
13
+
14
+ let vueRouter;
15
+
16
+ let globalReqInterceptor = null;
17
+ let globalRespInterceptor = null;
18
+
19
+ const TTL_CACHE_PERIOD = 500; // 默认0.5秒
20
+
21
+ const requestCache = new Map();
22
+
23
+ const generateCacheKey = (config) => {
24
+ const base = config.url;
25
+ if (config.method === 'post') {
26
+ return `${base}-${JSON.stringify(config.data)}`;
27
+ } else if (config.method === 'get' && config.params) {
28
+ return `${base}-${JSON.stringify(config.params)}`;
29
+ }
30
+ return base;
31
+ };
32
+
33
+ const setCache = (key, data, ttl = TTL_CACHE_PERIOD) => {
34
+ const existingCache = requestCache.get(key);
35
+
36
+ if (existingCache && existingCache.expiry > Date.now()) {
37
+ return;
38
+ }
39
+
40
+ const expiry = Date.now() + ttl;
41
+ requestCache.set(key, { data, expiry });
42
+ };
43
+
44
+ const getCache = (key) => {
45
+ const cached = requestCache.get(key);
46
+ if (cached && cached.expiry > Date.now()) {
47
+ return cached.data;
48
+ }
49
+ requestCache.delete(key);
50
+ return null;
51
+ };
52
+
53
+ const extractApiPath = (url) => {
54
+ const match = url.match(/\/v2\/(.*)/);
55
+ return match ? match[1] : 'Unknown API';
56
+ };
57
+
58
+ const _handleBusinessError = (response) => {
59
+ if (response.data.code === 0) {
60
+ const apiPath = extractApiPath(response.config.url);
61
+ if (process.env.NODE_ENV === 'development') {
62
+ alert(`接口错误: ${apiPath}`);
63
+ }
64
+ }
65
+ };
66
+
67
+ const handleError = (error) => {
68
+ if (window == undefined) {
69
+ //console.error('代码在非浏览器环境中运行,无法访问 window 对象');
70
+ alert('浏览器版本过低,请升级浏览器后访问');
71
+ return Promise.reject(new Error('浏览器版本过低,请升级浏览器后访问'));
72
+ }
73
+ if (!error?.response || error.isOffline || error.code == 'ERR_NETWORK') {
74
+ //alert('网络错误');
75
+ return Promise.reject(new Error('网络错误'));
76
+ }
77
+ const authStore = useAuthStore();
78
+ if (error.response?.status == 401 && !window.hasShownUnauthorizedAlert) {
79
+ alert('您的登录信息已过期,请重新登录');
80
+ authStore.clearToken();
81
+ window.hasShownUnauthorizedAlert = true; // 设置标志为true,表示已经弹出过提示
82
+ vueRouter.push('/login');
83
+ } else if (error.response?.status == 403) {
84
+ alert('您没有权限访问该资源');
85
+ } else if (error.response?.status == 500) {
86
+ //alert('服务器内部错误');
87
+ } else if (error.response?.status == 400) {
88
+ const errorMessage = error.response.data?.message || '参数错误';
89
+ alert(errorMessage);
90
+ }
91
+ return Promise.reject(error);
92
+ };
93
+
94
+ const checkOnlineStatus = () => {
95
+ return navigator.onLine;
96
+ };
97
+
98
+ const setXTokenInterceptor = (token) => {
99
+ // 移除已存在的拦截器
100
+ if (globalReqInterceptor !== null) {
101
+ axios.interceptors.request.eject(globalReqInterceptor);
102
+ }
103
+ if (globalRespInterceptor !== null) {
104
+ axios.interceptors.response.eject(globalRespInterceptor);
105
+ }
106
+
107
+ // 设置新的请求拦截器
108
+ globalReqInterceptor = axios.interceptors.request.use(
109
+ (config) => {
110
+ if (!checkOnlineStatus()) {
111
+ return Promise.reject(new Error('网络连接不可用,请检查您的网络设置'));
112
+ }
113
+
114
+ if (!token) {
115
+ return config;
116
+ }
117
+
118
+ config.headers['X-APP-ID'] = 'selectsys';
119
+ config.headers['X-TOKEN'] = token;
120
+
121
+ const cacheKey = generateCacheKey(config);
122
+ const cachedData = getCache(cacheKey);
123
+
124
+ if (cachedData && config.method.toLowerCase() === 'get') {
125
+ config.adapter = () =>
126
+ Promise.resolve({
127
+ data: cachedData.data,
128
+ status: cachedData.status,
129
+ statusText: cachedData.statusText,
130
+ headers: cachedData.headers,
131
+ config,
132
+ request: cachedData.request,
133
+ });
134
+ }
135
+
136
+ return config;
137
+ },
138
+ (error) => handleError(error)
139
+ );
140
+
141
+ // 设置新的响应拦截器
142
+ globalRespInterceptor = axios.interceptors.response.use(
143
+ (response) => {
144
+ //handleBusinessError(response);
145
+
146
+ // 只缓存GET请求的响应数据
147
+ if (response.config.method.toLowerCase() === 'get') {
148
+ const cacheKey = generateCacheKey(response.config);
149
+ setCache(cacheKey, {
150
+ data: response.data,
151
+ status: response.status,
152
+ statusText: response.statusText,
153
+ headers: response.headers,
154
+ config: response.config,
155
+ request: response.request,
156
+ });
157
+ }
158
+
159
+ return response;
160
+ },
161
+ (error) => handleError(error)
162
+ );
163
+ };
164
+
165
+ export const setInterceptorVueRouter = (router) => {
166
+ if (router) {
167
+ console.log('拦截器router设置成功');
168
+ vueRouter = router;
169
+ } else {
170
+ console.warn('拦截器router设置失败,自动跳转功能不可用');
171
+ }
172
+ };
173
+
174
+ export const initAxiosInterceptors = (token) => {
175
+ if (token) {
176
+ console.log('拦截器token设置成功');
177
+ setXTokenInterceptor(token);
178
+ }
179
+ window.hasShownUnauthorizedAlert = false;
180
+ };
@@ -0,0 +1,71 @@
1
+ import {
2
+ EllipsoidTerrainProvider,
3
+ Ion,
4
+ OpenStreetMapImageryProvider,
5
+ Viewer,
6
+ type ImageryProvider,
7
+ } from 'cesium';
8
+ import 'cesium/Build/Cesium/Widgets/widgets.css';
9
+
10
+ let configured = false;
11
+
12
+ /** Apply ion token when provided (optional; default map does not require Ion). */
13
+ export function configureCesium(): void {
14
+ if (configured) return;
15
+
16
+ const token = import.meta.env.VITE_CESIUM_ION_ACCESS_TOKEN;
17
+ if (token) {
18
+ Ion.defaultAccessToken = token;
19
+ }
20
+
21
+ configured = true;
22
+ }
23
+
24
+ /** OpenStreetMap 栅格底图(开源、免费,无需 Ion token)。 */
25
+ export function createOsmImageryProvider(): ImageryProvider {
26
+ return new OpenStreetMapImageryProvider({
27
+ url: 'https://tile.openstreetmap.org/',
28
+ });
29
+ }
30
+
31
+ const defaultUiOptions: Viewer.ConstructorOptions = {
32
+ animation: false,
33
+ timeline: false,
34
+ baseLayerPicker: false,
35
+ geocoder: false,
36
+ homeButton: false,
37
+ sceneModePicker: false,
38
+ navigationHelpButton: false,
39
+ fullscreenButton: false,
40
+ // 不加载 Ion 默认影像(无 token 时易出现 InvalidStateError: image decode)
41
+ baseLayer: false,
42
+ terrainProvider: new EllipsoidTerrainProvider(),
43
+ };
44
+
45
+ export function createViewer(
46
+ container: HTMLElement | string,
47
+ options?: Viewer.ConstructorOptions
48
+ ): Viewer {
49
+ configureCesium();
50
+
51
+ const { baseLayer, ...rest } = options ?? {};
52
+ const useCustomBaseLayer = baseLayer !== undefined && baseLayer !== false;
53
+
54
+ const viewer = new Viewer(container, {
55
+ ...defaultUiOptions,
56
+ ...rest,
57
+ baseLayer: useCustomBaseLayer ? baseLayer : false,
58
+ });
59
+
60
+ if (!useCustomBaseLayer) {
61
+ viewer.imageryLayers.removeAll();
62
+ viewer.imageryLayers.addImageryProvider(createOsmImageryProvider());
63
+ }
64
+
65
+ return viewer;
66
+ }
67
+
68
+ export function destroyViewer(viewer: Viewer | null | undefined): void {
69
+ if (!viewer || viewer.isDestroyed()) return;
70
+ viewer.destroy();
71
+ }
@@ -1,21 +1,21 @@
1
- import { App } from 'vue';
2
-
3
- export default {
4
- install(app: App) {
5
- const components = import.meta.glob('../components/**/*.vue');
6
-
7
- for (const path in components) {
8
- if (Object.prototype.hasOwnProperty.call(components, path)) {
9
- const componentName = path
10
- .split('/')
11
- .slice(2) // 去掉 `../components/`
12
- .join('/')
13
- .replace('.vue', '');
14
-
15
- components[path]().then((module: any) => {
16
- app.component(componentName, module.default);
17
- });
18
- }
19
- }
20
- },
21
- };
1
+ import { App } from 'vue';
2
+
3
+ export default {
4
+ install(app: App) {
5
+ const components = import.meta.glob('../components/**/*.vue');
6
+
7
+ for (const path in components) {
8
+ if (Object.prototype.hasOwnProperty.call(components, path)) {
9
+ const componentName = path
10
+ .split('/')
11
+ .slice(2) // 去掉 `../components/`
12
+ .join('/')
13
+ .replace('.vue', '');
14
+
15
+ components[path]().then((module: any) => {
16
+ app.component(componentName, module.default);
17
+ });
18
+ }
19
+ }
20
+ },
21
+ };
@@ -1,14 +1,14 @@
1
- // src/composables/useAlert.ts
2
- import { inject } from 'vue';
3
-
4
- export const useAlert = () => {
5
- const alert = inject('alert') as (
6
- message: string,
7
- type: 'success' | 'warning' | 'error' | 'info',
8
- duration?: number
9
- ) => void;
10
- if (!alert) {
11
- throw new Error('No alert provided!');
12
- }
13
- return alert;
14
- };
1
+ // src/composables/useAlert.ts
2
+ import { inject } from 'vue';
3
+
4
+ export const useAlert = () => {
5
+ const alert = inject('alert') as (
6
+ message: string,
7
+ type: 'success' | 'warning' | 'error' | 'info',
8
+ duration?: number
9
+ ) => void;
10
+ if (!alert) {
11
+ throw new Error('No alert provided!');
12
+ }
13
+ return alert;
14
+ };
@@ -0,0 +1,24 @@
1
+ import { computed } from 'vue';
2
+
3
+ /** 纯函数,便于单测 */
4
+ export function resolveFeatureGis(
5
+ flag: string | undefined,
6
+ isDev: boolean
7
+ ): boolean {
8
+ if (flag === 'true') return true;
9
+ if (flag === 'false') return false;
10
+ return isDev;
11
+ }
12
+
13
+ /**
14
+ * GIS 是否可用:
15
+ * - 显式 VITE_FEATURE_GIS=true / false
16
+ * - 开发环境未配置时默认 true(模板仓库自带 Cesium,避免漏配 .env)
17
+ */
18
+ export function useFeatureGis() {
19
+ const hasGis = computed(() =>
20
+ resolveFeatureGis(import.meta.env.VITE_FEATURE_GIS, import.meta.env.DEV)
21
+ );
22
+
23
+ return { hasGis };
24
+ }
@@ -0,0 +1,5 @@
1
+ import axios from 'axios';
2
+
3
+ const http = axios.create();
4
+
5
+ export default http;