create-swdg-frontend 0.1.7 → 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 (440) 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/.stylelintrc.json +7 -1
  20. package/template/README.md +95 -32
  21. package/template/auto-imports.d.ts +10 -0
  22. package/template/docs/MAINTAINER.md +77 -0
  23. package/template/docs/ONBOARDING.md +284 -0
  24. package/template/docs/TESTING.md +104 -0
  25. package/template/package.json +48 -41
  26. package/template/pnpm-lock.yaml +6360 -0
  27. package/template/scripts/gen-api.cjs +20 -7
  28. package/template/scripts/release.mjs +22 -28
  29. package/template/scripts/set-release-version.mjs +46 -0
  30. package/template/scripts/test-pipeline.mjs +85 -0
  31. package/template/scripts/test-scaffold.mjs +197 -0
  32. package/template/scripts/test-template.mjs +52 -0
  33. package/template/scripts/verify.mjs +28 -0
  34. package/template/scripts/vite-plugin-cesium-dev.ts +56 -0
  35. package/template/src/api/README.md +4 -0
  36. package/template/src/components/Body/index.vue +65 -35
  37. package/template/src/components/CesiumViewer/index.vue +36 -0
  38. package/template/src/components/Header/index.vue +16 -5
  39. package/template/src/components/OnboardingDeck/index.vue +449 -0
  40. package/template/src/data/onboardingSlides.ts +208 -0
  41. package/template/src/main.ts +1 -0
  42. package/template/src/router/index.ts +20 -14
  43. package/template/src/router/routeUtils.ts +13 -0
  44. package/template/src/styles/shell.css +232 -0
  45. package/template/src/utils/axios-middleware.js +1 -1
  46. package/template/src/utils/cesium/index.ts +71 -0
  47. package/template/src/utils/composables/useFeatureGis.ts +24 -0
  48. package/template/src/views/examples/cesium/index.vue +85 -0
  49. package/template/src/views/examples/guide/index.vue +42 -0
  50. package/template/src/views/examples/test/index.vue +63 -0
  51. package/template/src/views/index.vue +2 -3
  52. package/template/tests/README.md +1 -0
  53. package/template/tests/unit/onboardingSlides.test.ts +20 -0
  54. package/template/tests/unit/router.utils.test.ts +21 -0
  55. package/template/tests/unit/scaffold.lib.test.ts +44 -0
  56. package/template/tests/unit/useFeatureGis.test.ts +14 -0
  57. package/template/tsconfig.json +17 -17
  58. package/template/tsconfig.node.json +1 -1
  59. package/template/types/env.d.ts +13 -0
  60. package/template/vite.config.ts +26 -5
  61. package/template/vitest.config.ts +13 -0
  62. package/template/.env +0 -1
  63. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_0.json +0 -1012
  64. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_1.json +0 -1012
  65. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_10.json +0 -1012
  66. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_11.json +0 -1012
  67. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_12.json +0 -1012
  68. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_13.json +0 -1012
  69. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_14.json +0 -1012
  70. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_15.json +0 -1012
  71. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_16.json +0 -1012
  72. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_17.json +0 -1012
  73. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_18.json +0 -1012
  74. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_19.json +0 -1012
  75. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_2.json +0 -1012
  76. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_20.json +0 -1012
  77. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_21.json +0 -1012
  78. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_22.json +0 -1012
  79. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_23.json +0 -1012
  80. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_24.json +0 -1012
  81. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_25.json +0 -1012
  82. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_26.json +0 -1012
  83. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_27.json +0 -438
  84. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_3.json +0 -1012
  85. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_4.json +0 -1012
  86. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_5.json +0 -1012
  87. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_6.json +0 -1012
  88. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_7.json +0 -1012
  89. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_8.json +0 -1012
  90. package/template/public/Cesium1.119/Assets/IAU2006_XYS/IAU2006_XYS_9.json +0 -1012
  91. package/template/public/Cesium1.119/Assets/Images/bing_maps_credit.png +0 -0
  92. package/template/public/Cesium1.119/Assets/Images/cesium_credit.png +0 -0
  93. package/template/public/Cesium1.119/Assets/Images/google_earth_credit.png +0 -0
  94. package/template/public/Cesium1.119/Assets/Images/ion-credit.png +0 -0
  95. package/template/public/Cesium1.119/Assets/Textures/LensFlare/DirtMask.jpg +0 -0
  96. package/template/public/Cesium1.119/Assets/Textures/LensFlare/StarBurst.jpg +0 -0
  97. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/0/0/0.jpg +0 -0
  98. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/0/1/0.jpg +0 -0
  99. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/1/0/0.jpg +0 -0
  100. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/1/0/1.jpg +0 -0
  101. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/1/1/0.jpg +0 -0
  102. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/1/1/1.jpg +0 -0
  103. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/1/2/0.jpg +0 -0
  104. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/1/2/1.jpg +0 -0
  105. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/1/3/0.jpg +0 -0
  106. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/1/3/1.jpg +0 -0
  107. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/0/0.jpg +0 -0
  108. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/0/1.jpg +0 -0
  109. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/0/2.jpg +0 -0
  110. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/0/3.jpg +0 -0
  111. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/1/0.jpg +0 -0
  112. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/1/1.jpg +0 -0
  113. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/1/2.jpg +0 -0
  114. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/1/3.jpg +0 -0
  115. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/2/0.jpg +0 -0
  116. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/2/1.jpg +0 -0
  117. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/2/2.jpg +0 -0
  118. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/2/3.jpg +0 -0
  119. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/3/0.jpg +0 -0
  120. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/3/1.jpg +0 -0
  121. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/3/2.jpg +0 -0
  122. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/3/3.jpg +0 -0
  123. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/4/0.jpg +0 -0
  124. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/4/1.jpg +0 -0
  125. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/4/2.jpg +0 -0
  126. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/4/3.jpg +0 -0
  127. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/5/0.jpg +0 -0
  128. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/5/1.jpg +0 -0
  129. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/5/2.jpg +0 -0
  130. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/5/3.jpg +0 -0
  131. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/6/0.jpg +0 -0
  132. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/6/1.jpg +0 -0
  133. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/6/2.jpg +0 -0
  134. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/6/3.jpg +0 -0
  135. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/7/0.jpg +0 -0
  136. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/7/1.jpg +0 -0
  137. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/7/2.jpg +0 -0
  138. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/2/7/3.jpg +0 -0
  139. package/template/public/Cesium1.119/Assets/Textures/NaturalEarthII/tilemapresource.xml +0 -14
  140. package/template/public/Cesium1.119/Assets/Textures/SkyBox/tycho2t3_80_mx.jpg +0 -0
  141. package/template/public/Cesium1.119/Assets/Textures/SkyBox/tycho2t3_80_my.jpg +0 -0
  142. package/template/public/Cesium1.119/Assets/Textures/SkyBox/tycho2t3_80_mz.jpg +0 -0
  143. package/template/public/Cesium1.119/Assets/Textures/SkyBox/tycho2t3_80_px.jpg +0 -0
  144. package/template/public/Cesium1.119/Assets/Textures/SkyBox/tycho2t3_80_py.jpg +0 -0
  145. package/template/public/Cesium1.119/Assets/Textures/SkyBox/tycho2t3_80_pz.jpg +0 -0
  146. package/template/public/Cesium1.119/Assets/Textures/maki/airfield.png +0 -0
  147. package/template/public/Cesium1.119/Assets/Textures/maki/airport.png +0 -0
  148. package/template/public/Cesium1.119/Assets/Textures/maki/alcohol-shop.png +0 -0
  149. package/template/public/Cesium1.119/Assets/Textures/maki/america-football.png +0 -0
  150. package/template/public/Cesium1.119/Assets/Textures/maki/art-gallery.png +0 -0
  151. package/template/public/Cesium1.119/Assets/Textures/maki/bakery.png +0 -0
  152. package/template/public/Cesium1.119/Assets/Textures/maki/bank.png +0 -0
  153. package/template/public/Cesium1.119/Assets/Textures/maki/bar.png +0 -0
  154. package/template/public/Cesium1.119/Assets/Textures/maki/baseball.png +0 -0
  155. package/template/public/Cesium1.119/Assets/Textures/maki/basketball.png +0 -0
  156. package/template/public/Cesium1.119/Assets/Textures/maki/beer.png +0 -0
  157. package/template/public/Cesium1.119/Assets/Textures/maki/bicycle.png +0 -0
  158. package/template/public/Cesium1.119/Assets/Textures/maki/building.png +0 -0
  159. package/template/public/Cesium1.119/Assets/Textures/maki/bus.png +0 -0
  160. package/template/public/Cesium1.119/Assets/Textures/maki/cafe.png +0 -0
  161. package/template/public/Cesium1.119/Assets/Textures/maki/camera.png +0 -0
  162. package/template/public/Cesium1.119/Assets/Textures/maki/campsite.png +0 -0
  163. package/template/public/Cesium1.119/Assets/Textures/maki/car.png +0 -0
  164. package/template/public/Cesium1.119/Assets/Textures/maki/cemetery.png +0 -0
  165. package/template/public/Cesium1.119/Assets/Textures/maki/cesium.png +0 -0
  166. package/template/public/Cesium1.119/Assets/Textures/maki/chemist.png +0 -0
  167. package/template/public/Cesium1.119/Assets/Textures/maki/cinema.png +0 -0
  168. package/template/public/Cesium1.119/Assets/Textures/maki/circle-stroked.png +0 -0
  169. package/template/public/Cesium1.119/Assets/Textures/maki/circle.png +0 -0
  170. package/template/public/Cesium1.119/Assets/Textures/maki/city.png +0 -0
  171. package/template/public/Cesium1.119/Assets/Textures/maki/clothing-store.png +0 -0
  172. package/template/public/Cesium1.119/Assets/Textures/maki/college.png +0 -0
  173. package/template/public/Cesium1.119/Assets/Textures/maki/commercial.png +0 -0
  174. package/template/public/Cesium1.119/Assets/Textures/maki/cricket.png +0 -0
  175. package/template/public/Cesium1.119/Assets/Textures/maki/cross.png +0 -0
  176. package/template/public/Cesium1.119/Assets/Textures/maki/dam.png +0 -0
  177. package/template/public/Cesium1.119/Assets/Textures/maki/danger.png +0 -0
  178. package/template/public/Cesium1.119/Assets/Textures/maki/disability.png +0 -0
  179. package/template/public/Cesium1.119/Assets/Textures/maki/dog-park.png +0 -0
  180. package/template/public/Cesium1.119/Assets/Textures/maki/embassy.png +0 -0
  181. package/template/public/Cesium1.119/Assets/Textures/maki/emergency-telephone.png +0 -0
  182. package/template/public/Cesium1.119/Assets/Textures/maki/entrance.png +0 -0
  183. package/template/public/Cesium1.119/Assets/Textures/maki/farm.png +0 -0
  184. package/template/public/Cesium1.119/Assets/Textures/maki/fast-food.png +0 -0
  185. package/template/public/Cesium1.119/Assets/Textures/maki/ferry.png +0 -0
  186. package/template/public/Cesium1.119/Assets/Textures/maki/fire-station.png +0 -0
  187. package/template/public/Cesium1.119/Assets/Textures/maki/fuel.png +0 -0
  188. package/template/public/Cesium1.119/Assets/Textures/maki/garden.png +0 -0
  189. package/template/public/Cesium1.119/Assets/Textures/maki/gift.png +0 -0
  190. package/template/public/Cesium1.119/Assets/Textures/maki/golf.png +0 -0
  191. package/template/public/Cesium1.119/Assets/Textures/maki/grocery.png +0 -0
  192. package/template/public/Cesium1.119/Assets/Textures/maki/hairdresser.png +0 -0
  193. package/template/public/Cesium1.119/Assets/Textures/maki/harbor.png +0 -0
  194. package/template/public/Cesium1.119/Assets/Textures/maki/heart.png +0 -0
  195. package/template/public/Cesium1.119/Assets/Textures/maki/heliport.png +0 -0
  196. package/template/public/Cesium1.119/Assets/Textures/maki/hospital.png +0 -0
  197. package/template/public/Cesium1.119/Assets/Textures/maki/ice-cream.png +0 -0
  198. package/template/public/Cesium1.119/Assets/Textures/maki/industrial.png +0 -0
  199. package/template/public/Cesium1.119/Assets/Textures/maki/land-use.png +0 -0
  200. package/template/public/Cesium1.119/Assets/Textures/maki/laundry.png +0 -0
  201. package/template/public/Cesium1.119/Assets/Textures/maki/library.png +0 -0
  202. package/template/public/Cesium1.119/Assets/Textures/maki/lighthouse.png +0 -0
  203. package/template/public/Cesium1.119/Assets/Textures/maki/lodging.png +0 -0
  204. package/template/public/Cesium1.119/Assets/Textures/maki/logging.png +0 -0
  205. package/template/public/Cesium1.119/Assets/Textures/maki/london-underground.png +0 -0
  206. package/template/public/Cesium1.119/Assets/Textures/maki/marker-stroked.png +0 -0
  207. package/template/public/Cesium1.119/Assets/Textures/maki/marker.png +0 -0
  208. package/template/public/Cesium1.119/Assets/Textures/maki/minefield.png +0 -0
  209. package/template/public/Cesium1.119/Assets/Textures/maki/mobilephone.png +0 -0
  210. package/template/public/Cesium1.119/Assets/Textures/maki/monument.png +0 -0
  211. package/template/public/Cesium1.119/Assets/Textures/maki/museum.png +0 -0
  212. package/template/public/Cesium1.119/Assets/Textures/maki/music.png +0 -0
  213. package/template/public/Cesium1.119/Assets/Textures/maki/oil-well.png +0 -0
  214. package/template/public/Cesium1.119/Assets/Textures/maki/park.png +0 -0
  215. package/template/public/Cesium1.119/Assets/Textures/maki/park2.png +0 -0
  216. package/template/public/Cesium1.119/Assets/Textures/maki/parking-garage.png +0 -0
  217. package/template/public/Cesium1.119/Assets/Textures/maki/parking.png +0 -0
  218. package/template/public/Cesium1.119/Assets/Textures/maki/pharmacy.png +0 -0
  219. package/template/public/Cesium1.119/Assets/Textures/maki/pitch.png +0 -0
  220. package/template/public/Cesium1.119/Assets/Textures/maki/place-of-worship.png +0 -0
  221. package/template/public/Cesium1.119/Assets/Textures/maki/playground.png +0 -0
  222. package/template/public/Cesium1.119/Assets/Textures/maki/police.png +0 -0
  223. package/template/public/Cesium1.119/Assets/Textures/maki/polling-place.png +0 -0
  224. package/template/public/Cesium1.119/Assets/Textures/maki/post.png +0 -0
  225. package/template/public/Cesium1.119/Assets/Textures/maki/prison.png +0 -0
  226. package/template/public/Cesium1.119/Assets/Textures/maki/rail-above.png +0 -0
  227. package/template/public/Cesium1.119/Assets/Textures/maki/rail-light.png +0 -0
  228. package/template/public/Cesium1.119/Assets/Textures/maki/rail-metro.png +0 -0
  229. package/template/public/Cesium1.119/Assets/Textures/maki/rail-underground.png +0 -0
  230. package/template/public/Cesium1.119/Assets/Textures/maki/rail.png +0 -0
  231. package/template/public/Cesium1.119/Assets/Textures/maki/religious-christian.png +0 -0
  232. package/template/public/Cesium1.119/Assets/Textures/maki/religious-jewish.png +0 -0
  233. package/template/public/Cesium1.119/Assets/Textures/maki/religious-muslim.png +0 -0
  234. package/template/public/Cesium1.119/Assets/Textures/maki/restaurant.png +0 -0
  235. package/template/public/Cesium1.119/Assets/Textures/maki/roadblock.png +0 -0
  236. package/template/public/Cesium1.119/Assets/Textures/maki/rocket.png +0 -0
  237. package/template/public/Cesium1.119/Assets/Textures/maki/school.png +0 -0
  238. package/template/public/Cesium1.119/Assets/Textures/maki/scooter.png +0 -0
  239. package/template/public/Cesium1.119/Assets/Textures/maki/shop.png +0 -0
  240. package/template/public/Cesium1.119/Assets/Textures/maki/skiing.png +0 -0
  241. package/template/public/Cesium1.119/Assets/Textures/maki/slaughterhouse.png +0 -0
  242. package/template/public/Cesium1.119/Assets/Textures/maki/soccer.png +0 -0
  243. package/template/public/Cesium1.119/Assets/Textures/maki/square-stroked.png +0 -0
  244. package/template/public/Cesium1.119/Assets/Textures/maki/square.png +0 -0
  245. package/template/public/Cesium1.119/Assets/Textures/maki/star-stroked.png +0 -0
  246. package/template/public/Cesium1.119/Assets/Textures/maki/star.png +0 -0
  247. package/template/public/Cesium1.119/Assets/Textures/maki/suitcase.png +0 -0
  248. package/template/public/Cesium1.119/Assets/Textures/maki/swimming.png +0 -0
  249. package/template/public/Cesium1.119/Assets/Textures/maki/telephone.png +0 -0
  250. package/template/public/Cesium1.119/Assets/Textures/maki/tennis.png +0 -0
  251. package/template/public/Cesium1.119/Assets/Textures/maki/theatre.png +0 -0
  252. package/template/public/Cesium1.119/Assets/Textures/maki/toilets.png +0 -0
  253. package/template/public/Cesium1.119/Assets/Textures/maki/town-hall.png +0 -0
  254. package/template/public/Cesium1.119/Assets/Textures/maki/town.png +0 -0
  255. package/template/public/Cesium1.119/Assets/Textures/maki/triangle-stroked.png +0 -0
  256. package/template/public/Cesium1.119/Assets/Textures/maki/triangle.png +0 -0
  257. package/template/public/Cesium1.119/Assets/Textures/maki/village.png +0 -0
  258. package/template/public/Cesium1.119/Assets/Textures/maki/warehouse.png +0 -0
  259. package/template/public/Cesium1.119/Assets/Textures/maki/waste-basket.png +0 -0
  260. package/template/public/Cesium1.119/Assets/Textures/maki/water.png +0 -0
  261. package/template/public/Cesium1.119/Assets/Textures/maki/wetland.png +0 -0
  262. package/template/public/Cesium1.119/Assets/Textures/maki/zoo.png +0 -0
  263. package/template/public/Cesium1.119/Assets/Textures/moonSmall.jpg +0 -0
  264. package/template/public/Cesium1.119/Assets/Textures/pin.svg +0 -1
  265. package/template/public/Cesium1.119/Assets/Textures/waterNormals.jpg +0 -0
  266. package/template/public/Cesium1.119/Assets/Textures/waterNormalsSmall.jpg +0 -0
  267. package/template/public/Cesium1.119/Assets/approximateTerrainHeights.json +0 -10924
  268. package/template/public/Cesium1.119/Cesium.js +0 -185772
  269. package/template/public/Cesium1.119/ThirdParty/Workers/package.json +0 -3
  270. package/template/public/Cesium1.119/ThirdParty/Workers/pako_deflate.min.js +0 -1681
  271. package/template/public/Cesium1.119/ThirdParty/Workers/pako_inflate.min.js +0 -1489
  272. package/template/public/Cesium1.119/ThirdParty/Workers/z-worker-pako.js +0 -1070
  273. package/template/public/Cesium1.119/ThirdParty/basis_transcoder.wasm +0 -0
  274. package/template/public/Cesium1.119/ThirdParty/draco_decoder.wasm +0 -0
  275. package/template/public/Cesium1.119/ThirdParty/google-earth-dbroot-parser.js +0 -11424
  276. package/template/public/Cesium1.119/Widgets/Animation/Animation.css +0 -127
  277. package/template/public/Cesium1.119/Widgets/Animation/lighter.css +0 -78
  278. package/template/public/Cesium1.119/Widgets/BaseLayerPicker/BaseLayerPicker.css +0 -112
  279. package/template/public/Cesium1.119/Widgets/BaseLayerPicker/lighter.css +0 -28
  280. package/template/public/Cesium1.119/Widgets/Cesium3DTilesInspector/Cesium3DTilesInspector.css +0 -104
  281. package/template/public/Cesium1.119/Widgets/CesiumInspector/CesiumInspector.css +0 -115
  282. package/template/public/Cesium1.119/Widgets/CesiumWidget/CesiumWidget.css +0 -119
  283. package/template/public/Cesium1.119/Widgets/CesiumWidget/lighter.css +0 -14
  284. package/template/public/Cesium1.119/Widgets/FullscreenButton/FullscreenButton.css +0 -8
  285. package/template/public/Cesium1.119/Widgets/Geocoder/Geocoder.css +0 -72
  286. package/template/public/Cesium1.119/Widgets/Geocoder/lighter.css +0 -17
  287. package/template/public/Cesium1.119/Widgets/I3SBuildingSceneLayerExplorer/I3SBuildingSceneLayerExplorer.css +0 -27
  288. package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/ArcGisMapServiceWorldHillshade.png +0 -0
  289. package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/ArcGisMapServiceWorldImagery.png +0 -0
  290. package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/ArcGisMapServiceWorldOcean.png +0 -0
  291. package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/bingAerial.png +0 -0
  292. package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/bingAerialLabels.png +0 -0
  293. package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/bingRoads.png +0 -0
  294. package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/blueMarble.png +0 -0
  295. package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/earthAtNight.png +0 -0
  296. package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/mapQuestOpenStreetMap.png +0 -0
  297. package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/mapboxSatellite.png +0 -0
  298. package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/mapboxStreets.png +0 -0
  299. package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/mapboxTerrain.png +0 -0
  300. package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/naturalEarthII.png +0 -0
  301. package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/openStreetMap.png +0 -0
  302. package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/sentinel-2.png +0 -0
  303. package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/stadiaAlidadeSmooth.png +0 -0
  304. package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/stadiaAlidadeSmoothDark.png +0 -0
  305. package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/stamenToner.png +0 -0
  306. package/template/public/Cesium1.119/Widgets/Images/ImageryProviders/stamenWatercolor.png +0 -0
  307. package/template/public/Cesium1.119/Widgets/Images/NavigationHelp/Mouse.svg +0 -84
  308. package/template/public/Cesium1.119/Widgets/Images/NavigationHelp/MouseLeft.svg +0 -76
  309. package/template/public/Cesium1.119/Widgets/Images/NavigationHelp/MouseMiddle.svg +0 -76
  310. package/template/public/Cesium1.119/Widgets/Images/NavigationHelp/MouseRight.svg +0 -76
  311. package/template/public/Cesium1.119/Widgets/Images/NavigationHelp/Touch.svg +0 -120
  312. package/template/public/Cesium1.119/Widgets/Images/NavigationHelp/TouchDrag.svg +0 -129
  313. package/template/public/Cesium1.119/Widgets/Images/NavigationHelp/TouchRotate.svg +0 -76
  314. package/template/public/Cesium1.119/Widgets/Images/NavigationHelp/TouchTilt.svg +0 -135
  315. package/template/public/Cesium1.119/Widgets/Images/NavigationHelp/TouchZoom.svg +0 -74
  316. package/template/public/Cesium1.119/Widgets/Images/TerrainProviders/CesiumWorldTerrain.png +0 -0
  317. package/template/public/Cesium1.119/Widgets/Images/TerrainProviders/Ellipsoid.png +0 -0
  318. package/template/public/Cesium1.119/Widgets/Images/TimelineIcons.png +0 -0
  319. package/template/public/Cesium1.119/Widgets/Images/info-loading.gif +0 -0
  320. package/template/public/Cesium1.119/Widgets/InfoBox/InfoBox.css +0 -94
  321. package/template/public/Cesium1.119/Widgets/InfoBox/InfoBoxDescription.css +0 -178
  322. package/template/public/Cesium1.119/Widgets/NavigationHelpButton/NavigationHelpButton.css +0 -95
  323. package/template/public/Cesium1.119/Widgets/NavigationHelpButton/lighter.css +0 -38
  324. package/template/public/Cesium1.119/Widgets/PerformanceWatchdog/PerformanceWatchdog.css +0 -15
  325. package/template/public/Cesium1.119/Widgets/ProjectionPicker/ProjectionPicker.css +0 -46
  326. package/template/public/Cesium1.119/Widgets/SceneModePicker/SceneModePicker.css +0 -72
  327. package/template/public/Cesium1.119/Widgets/SelectionIndicator/SelectionIndicator.css +0 -22
  328. package/template/public/Cesium1.119/Widgets/Timeline/Timeline.css +0 -103
  329. package/template/public/Cesium1.119/Widgets/Timeline/lighter.css +0 -18
  330. package/template/public/Cesium1.119/Widgets/VRButton/VRButton.css +0 -8
  331. package/template/public/Cesium1.119/Widgets/Viewer/Viewer.css +0 -107
  332. package/template/public/Cesium1.119/Widgets/VoxelInspector/VoxelInspector.css +0 -18
  333. package/template/public/Cesium1.119/Widgets/lighter.css +0 -246
  334. package/template/public/Cesium1.119/Widgets/lighterShared.css +0 -46
  335. package/template/public/Cesium1.119/Widgets/shared.css +0 -103
  336. package/template/public/Cesium1.119/Widgets/widgets.css +0 -1376
  337. package/template/public/Cesium1.119/Workers/chunk-3C7WC463.js +0 -611
  338. package/template/public/Cesium1.119/Workers/chunk-3JW36LZF.js +0 -166
  339. package/template/public/Cesium1.119/Workers/chunk-4BTGX3WJ.js +0 -264
  340. package/template/public/Cesium1.119/Workers/chunk-4WRMLZA7.js +0 -128
  341. package/template/public/Cesium1.119/Workers/chunk-7Z5IIKOJ.js +0 -8046
  342. package/template/public/Cesium1.119/Workers/chunk-ABGXSJNX.js +0 -341
  343. package/template/public/Cesium1.119/Workers/chunk-AMQUWUD4.js +0 -269
  344. package/template/public/Cesium1.119/Workers/chunk-ATPDRNKI.js +0 -28
  345. package/template/public/Cesium1.119/Workers/chunk-BMHPVZ4H.js +0 -199
  346. package/template/public/Cesium1.119/Workers/chunk-CBEO3SHS.js +0 -1102
  347. package/template/public/Cesium1.119/Workers/chunk-CV7DLCWG.js +0 -485
  348. package/template/public/Cesium1.119/Workers/chunk-DQO6B4EQ.js +0 -76
  349. package/template/public/Cesium1.119/Workers/chunk-ED3TLP6D.js +0 -91
  350. package/template/public/Cesium1.119/Workers/chunk-EFZKO5RU.js +0 -42
  351. package/template/public/Cesium1.119/Workers/chunk-F5IHREXR.js +0 -2678
  352. package/template/public/Cesium1.119/Workers/chunk-FKRG4HDY.js +0 -516
  353. package/template/public/Cesium1.119/Workers/chunk-FYOYUPXG.js +0 -399
  354. package/template/public/Cesium1.119/Workers/chunk-GFN7NNSJ.js +0 -65
  355. package/template/public/Cesium1.119/Workers/chunk-HEEMUCG6.js +0 -92
  356. package/template/public/Cesium1.119/Workers/chunk-HSWA4OEL.js +0 -672
  357. package/template/public/Cesium1.119/Workers/chunk-IAC5XVZV.js +0 -287
  358. package/template/public/Cesium1.119/Workers/chunk-II4VNKYR.js +0 -50
  359. package/template/public/Cesium1.119/Workers/chunk-ILGBPNP6.js +0 -28
  360. package/template/public/Cesium1.119/Workers/chunk-IRH46BDL.js +0 -124
  361. package/template/public/Cesium1.119/Workers/chunk-IUA6FAOZ.js +0 -31
  362. package/template/public/Cesium1.119/Workers/chunk-K4ASOM65.js +0 -331
  363. package/template/public/Cesium1.119/Workers/chunk-KCIZBVXL.js +0 -258
  364. package/template/public/Cesium1.119/Workers/chunk-KF5NF354.js +0 -162
  365. package/template/public/Cesium1.119/Workers/chunk-KRKI6AAO.js +0 -773
  366. package/template/public/Cesium1.119/Workers/chunk-KZNJOCYU.js +0 -162
  367. package/template/public/Cesium1.119/Workers/chunk-O5IJ3OGP.js +0 -857
  368. package/template/public/Cesium1.119/Workers/chunk-OO23RBLX.js +0 -183
  369. package/template/public/Cesium1.119/Workers/chunk-P37AI2DW.js +0 -85
  370. package/template/public/Cesium1.119/Workers/chunk-PDMQLSBL.js +0 -108
  371. package/template/public/Cesium1.119/Workers/chunk-PEYJTJPE.js +0 -73
  372. package/template/public/Cesium1.119/Workers/chunk-POASMU2N.js +0 -2372
  373. package/template/public/Cesium1.119/Workers/chunk-PXCJYT2S.js +0 -73
  374. package/template/public/Cesium1.119/Workers/chunk-Q6L7X3LP.js +0 -538
  375. package/template/public/Cesium1.119/Workers/chunk-QB3MDM4J.js +0 -1670
  376. package/template/public/Cesium1.119/Workers/chunk-R6KGAEF6.js +0 -392
  377. package/template/public/Cesium1.119/Workers/chunk-RXTBM4OI.js +0 -57
  378. package/template/public/Cesium1.119/Workers/chunk-SB224QGV.js +0 -72
  379. package/template/public/Cesium1.119/Workers/chunk-T6BE4RZK.js +0 -37
  380. package/template/public/Cesium1.119/Workers/chunk-TAMCUKAR.js +0 -814
  381. package/template/public/Cesium1.119/Workers/chunk-TMSETF7M.js +0 -579
  382. package/template/public/Cesium1.119/Workers/chunk-TOGHF3VN.js +0 -376
  383. package/template/public/Cesium1.119/Workers/chunk-UH2WFNTA.js +0 -111
  384. package/template/public/Cesium1.119/Workers/chunk-V7JEDBOE.js +0 -573
  385. package/template/public/Cesium1.119/Workers/chunk-VBIROZR5.js +0 -633
  386. package/template/public/Cesium1.119/Workers/chunk-W23CU777.js +0 -271
  387. package/template/public/Cesium1.119/Workers/chunk-X5IHHI6X.js +0 -173
  388. package/template/public/Cesium1.119/Workers/chunk-XHX2UPDO.js +0 -217
  389. package/template/public/Cesium1.119/Workers/combineGeometry.js +0 -53
  390. package/template/public/Cesium1.119/Workers/createBoxGeometry.js +0 -45
  391. package/template/public/Cesium1.119/Workers/createBoxOutlineGeometry.js +0 -189
  392. package/template/public/Cesium1.119/Workers/createCircleGeometry.js +0 -148
  393. package/template/public/Cesium1.119/Workers/createCircleOutlineGeometry.js +0 -105
  394. package/template/public/Cesium1.119/Workers/createCoplanarPolygonGeometry.js +0 -293
  395. package/template/public/Cesium1.119/Workers/createCoplanarPolygonOutlineGeometry.js +0 -143
  396. package/template/public/Cesium1.119/Workers/createCorridorGeometry.js +0 -830
  397. package/template/public/Cesium1.119/Workers/createCorridorOutlineGeometry.js +0 -417
  398. package/template/public/Cesium1.119/Workers/createCylinderGeometry.js +0 -47
  399. package/template/public/Cesium1.119/Workers/createCylinderOutlineGeometry.js +0 -170
  400. package/template/public/Cesium1.119/Workers/createEllipseGeometry.js +0 -58
  401. package/template/public/Cesium1.119/Workers/createEllipseOutlineGeometry.js +0 -51
  402. package/template/public/Cesium1.119/Workers/createEllipsoidGeometry.js +0 -46
  403. package/template/public/Cesium1.119/Workers/createEllipsoidOutlineGeometry.js +0 -45
  404. package/template/public/Cesium1.119/Workers/createFrustumGeometry.js +0 -45
  405. package/template/public/Cesium1.119/Workers/createFrustumOutlineGeometry.js +0 -164
  406. package/template/public/Cesium1.119/Workers/createGeometry.js +0 -159
  407. package/template/public/Cesium1.119/Workers/createGroundPolylineGeometry.js +0 -911
  408. package/template/public/Cesium1.119/Workers/createPlaneGeometry.js +0 -185
  409. package/template/public/Cesium1.119/Workers/createPlaneOutlineGeometry.js +0 -93
  410. package/template/public/Cesium1.119/Workers/createPolygonGeometry.js +0 -884
  411. package/template/public/Cesium1.119/Workers/createPolygonOutlineGeometry.js +0 -359
  412. package/template/public/Cesium1.119/Workers/createPolylineGeometry.js +0 -349
  413. package/template/public/Cesium1.119/Workers/createPolylineVolumeGeometry.js +0 -262
  414. package/template/public/Cesium1.119/Workers/createPolylineVolumeOutlineGeometry.js +0 -177
  415. package/template/public/Cesium1.119/Workers/createRectangleGeometry.js +0 -787
  416. package/template/public/Cesium1.119/Workers/createRectangleOutlineGeometry.js +0 -299
  417. package/template/public/Cesium1.119/Workers/createSimplePolylineGeometry.js +0 -294
  418. package/template/public/Cesium1.119/Workers/createSphereGeometry.js +0 -84
  419. package/template/public/Cesium1.119/Workers/createSphereOutlineGeometry.js +0 -83
  420. package/template/public/Cesium1.119/Workers/createTaskProcessorWorker.js +0 -28
  421. package/template/public/Cesium1.119/Workers/createVectorTileClampedPolylines.js +0 -289
  422. package/template/public/Cesium1.119/Workers/createVectorTileGeometries.js +0 -258
  423. package/template/public/Cesium1.119/Workers/createVectorTilePoints.js +0 -79
  424. package/template/public/Cesium1.119/Workers/createVectorTilePolygons.js +0 -275
  425. package/template/public/Cesium1.119/Workers/createVectorTilePolylines.js +0 -176
  426. package/template/public/Cesium1.119/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +0 -375
  427. package/template/public/Cesium1.119/Workers/createVerticesFromHeightmap.js +0 -1772
  428. package/template/public/Cesium1.119/Workers/createVerticesFromQuantizedTerrainMesh.js +0 -425
  429. package/template/public/Cesium1.119/Workers/createWallGeometry.js +0 -320
  430. package/template/public/Cesium1.119/Workers/createWallOutlineGeometry.js +0 -229
  431. package/template/public/Cesium1.119/Workers/decodeDraco.js +0 -227
  432. package/template/public/Cesium1.119/Workers/decodeGoogleEarthEnterprisePacket.js +0 -1836
  433. package/template/public/Cesium1.119/Workers/decodeI3S.js +0 -924
  434. package/template/public/Cesium1.119/Workers/transcodeKTX2.js +0 -3180
  435. package/template/public/Cesium1.119/Workers/transferTypedArrayTest.js +0 -34
  436. package/template/public/Cesium1.119/Workers/upsampleQuantizedTerrainMesh.js +0 -534
  437. package/template/public/Cesium1.119/index.cjs +0 -185632
  438. package/template/public/Cesium1.119/index.js +0 -182874
  439. package/template/src/views/Test/index.vue +0 -56
  440. package/template/tests/unit/example.test.ts +0 -7
@@ -0,0 +1,208 @@
1
+ export type SlideBlock =
2
+ | { type: 'p'; text: string }
3
+ | { type: 'ul'; items: string[] }
4
+ | { type: 'code'; text: string }
5
+ | { type: 'table'; headers: string[]; rows: string[][] }
6
+ | { type: 'links'; items: { label: string; to: string }[] };
7
+
8
+ export interface OnboardingSlide {
9
+ id: string;
10
+ title: string;
11
+ tagline?: string;
12
+ blocks: SlideBlock[];
13
+ }
14
+
15
+ export const onboardingSlides: OnboardingSlide[] = [
16
+ {
17
+ id: 'welcome',
18
+ title: 'SWDG 前端模板',
19
+ tagline: 'Vue 3 · TypeScript · Vite · 约定式路由',
20
+ blocks: [
21
+ {
22
+ type: 'p',
23
+ text: '面向团队的标准前端壳:业务在 src/views 开发,示例与文档内置在开发模式,生产构建自动剔除演示路由。',
24
+ },
25
+ {
26
+ type: 'ul',
27
+ items: [
28
+ '直接 clone 本仓库,或在团队内迭代模板',
29
+ 'pnpm create swdg my-app 脚手架生成独立项目',
30
+ '左右方向键 / 按钮翻页浏览本指南',
31
+ ],
32
+ },
33
+ {
34
+ type: 'links',
35
+ items: [{ label: '全屏幻灯片模式 →', to: '/examples/guide' }],
36
+ },
37
+ ],
38
+ },
39
+ {
40
+ id: 'quickstart',
41
+ title: '快速开始',
42
+ tagline: '第一次跑起来',
43
+ blocks: [
44
+ {
45
+ type: 'code',
46
+ text: 'pnpm install\ncp .env.example .env\npnpm dev',
47
+ },
48
+ {
49
+ type: 'ul',
50
+ items: [
51
+ '需要 Node.js 22+,推荐 pnpm 9+',
52
+ '默认 http://localhost:3000 ,Hash 路由 /#/',
53
+ '修改 .env 后必须重启 pnpm dev',
54
+ ],
55
+ },
56
+ ],
57
+ },
58
+ {
59
+ id: 'env',
60
+ title: '环境变量',
61
+ tagline: '.env 配置说明',
62
+ blocks: [
63
+ {
64
+ type: 'table',
65
+ headers: ['变量', '说明'],
66
+ rows: [
67
+ ['VITE_DEMO_PROXY_TARGET', '开发代理 /demo 的后端地址'],
68
+ ['VITE_FEATURE_GIS', 'true 时启用 Cesium 入口与示例'],
69
+ ['VITE_CESIUM_ION_ACCESS_TOKEN', '可选,默认 OSM 底图可不填'],
70
+ ],
71
+ },
72
+ {
73
+ type: 'p',
74
+ text: '看不到 Cesium?确认 VITE_FEATURE_GIS=true 并重启 dev。',
75
+ },
76
+ ],
77
+ },
78
+ {
79
+ id: 'routes',
80
+ title: '约定式路由',
81
+ tagline: '不用手写 routes',
82
+ blocks: [
83
+ {
84
+ type: 'p',
85
+ text: 'src/views 下每个 .vue 自动注册为路由(Hash 模式)。',
86
+ },
87
+ {
88
+ type: 'table',
89
+ headers: ['文件', '访问路径'],
90
+ rows: [
91
+ ['src/views/index.vue', '/#/'],
92
+ ['src/views/UserList/index.vue', '/#/user-list'],
93
+ ['src/views/examples/test/index.vue', '/#/examples/test'],
94
+ ],
95
+ },
96
+ {
97
+ type: 'p',
98
+ text: 'examples/ 目录仅开发环境可用,生产 build 会自动排除。',
99
+ },
100
+ ],
101
+ },
102
+ {
103
+ id: 'dirs',
104
+ title: '目录结构',
105
+ tagline: '代码放哪里',
106
+ blocks: [
107
+ {
108
+ type: 'code',
109
+ text: 'src/views/ 业务页面\nsrc/components/ 公共组件\nsrc/api/ 接口请求\nsrc/stores/ Pinia\nsrc/utils/ 工具 & composables\ninterface/ 业务类型\ndocs/ Markdown 文档',
110
+ },
111
+ ],
112
+ },
113
+ {
114
+ id: 'alias',
115
+ title: '路径别名',
116
+ tagline: 'import 写法',
117
+ blocks: [
118
+ {
119
+ type: 'code',
120
+ text: "import { useCounterStore } from '@stores/useCounter';\nimport { useFeatureGis } from '@composables/useFeatureGis';\nimport MyCard from '@components/MyCard/index.vue';",
121
+ },
122
+ {
123
+ type: 'ul',
124
+ items: [
125
+ '@/ → src/',
126
+ '@api/ @stores/ @utils/ @views/ @layout/',
127
+ '完整列表见 tsconfig.json → paths',
128
+ ],
129
+ },
130
+ ],
131
+ },
132
+ {
133
+ id: 'api',
134
+ title: '接口与代理',
135
+ tagline: '调后端',
136
+ blocks: [
137
+ {
138
+ type: 'p',
139
+ text: '接口代码放在 src/api/。开发环境请求 /demo 会代理到 VITE_DEMO_PROXY_TARGET。',
140
+ },
141
+ {
142
+ type: 'code',
143
+ text: '# 从 OpenAPI 生成客户端\npnpm gen:api',
144
+ },
145
+ ],
146
+ },
147
+ {
148
+ id: 'gis',
149
+ title: 'GIS / Cesium',
150
+ tagline: '可选三维能力',
151
+ blocks: [
152
+ {
153
+ type: 'p',
154
+ text: '脚手架 --gis 创建,或 .env 开启 VITE_FEATURE_GIS=true。',
155
+ },
156
+ {
157
+ type: 'code',
158
+ text: "import CesiumViewer from '@components/CesiumViewer/index.vue';\n// 或\nimport { createViewer } from '@utils/cesium';",
159
+ },
160
+ {
161
+ type: 'links',
162
+ items: [{ label: '打开 Cesium 示例页 →', to: '/examples/cesium' }],
163
+ },
164
+ ],
165
+ },
166
+ {
167
+ id: 'commands',
168
+ title: '常用命令',
169
+ tagline: '日常开发',
170
+ blocks: [
171
+ {
172
+ type: 'table',
173
+ headers: ['命令', '作用'],
174
+ rows: [
175
+ ['pnpm dev', '本地开发'],
176
+ ['pnpm build', '生产构建 → dist/'],
177
+ ['pnpm typecheck', 'TypeScript 检查'],
178
+ ['pnpm verify', 'typecheck + lint(提交前)'],
179
+ ['pnpm test:run', '单元测试'],
180
+ ],
181
+ },
182
+ ],
183
+ },
184
+ {
185
+ id: 'workflow',
186
+ title: '推荐工作流',
187
+ tagline: '从这里开始业务',
188
+ blocks: [
189
+ {
190
+ type: 'ul',
191
+ items: [
192
+ '1. cp .env.example .env,配置代理与 GIS',
193
+ '2. pnpm dev,浏览本页示例与 Store 演示',
194
+ '3. 在 src/views/ 新建业务目录',
195
+ '4. 补充 src/api/、src/stores/',
196
+ '5. 提交前 pnpm verify',
197
+ ],
198
+ },
199
+ {
200
+ type: 'links',
201
+ items: [
202
+ { label: 'Store / Alert 示例 →', to: '/examples/test' },
203
+ { label: '返回首页 →', to: '/' },
204
+ ],
205
+ },
206
+ ],
207
+ },
208
+ ];
@@ -2,6 +2,7 @@ import { createApp } from 'vue';
2
2
  import { createPinia } from 'pinia';
3
3
 
4
4
  import './styles/global.css';
5
+ import './styles/shell.css';
5
6
  import './styles/alerts.less';
6
7
 
7
8
  import App from './App.vue';
@@ -1,20 +1,26 @@
1
- import { createRouter, createWebHashHistory } from 'vue-router';
1
+ import {
2
+ createRouter,
3
+ createWebHashHistory,
4
+ type RouteRecordRaw,
5
+ } from 'vue-router';
6
+ import { filePathToRoute, isExampleRoute } from './routeUtils';
2
7
 
3
8
  const pages = import.meta.glob('../views/**/*.vue');
4
9
 
5
- const routes = Object.keys(pages).map((path) => {
6
- const routePath = path
7
- .replace(/..\/views/, '')
8
- .replace(/\.\w+$/, '')
9
- .replace(/([a-z0-9])([A-Z])/g, '$1-$2')
10
- .toLowerCase()
11
- .replace(/index$/, '');
12
-
13
- return {
14
- path: routePath,
15
- component: pages[path],
16
- };
17
- });
10
+ const routes: RouteRecordRaw[] = Object.keys(pages)
11
+ .filter((filePath) => {
12
+ if (import.meta.env.PROD && isExampleRoute(filePath)) {
13
+ return false;
14
+ }
15
+ return true;
16
+ })
17
+ .map((filePath) => ({
18
+ path: filePathToRoute(filePath),
19
+ component: pages[filePath],
20
+ meta: {
21
+ isExample: isExampleRoute(filePath),
22
+ },
23
+ }));
18
24
 
19
25
  const router = createRouter({
20
26
  history: createWebHashHistory(),
@@ -0,0 +1,13 @@
1
+ /** 约定式路由:views 文件路径 → URL path */
2
+ export function isExampleRoute(filePath: string): boolean {
3
+ return /\/(examples|_examples)\//.test(filePath);
4
+ }
5
+
6
+ export function filePathToRoute(filePath: string): string {
7
+ return filePath
8
+ .replace(/..\/views/, '')
9
+ .replace(/\.\w+$/, '')
10
+ .replace(/([a-z0-9])([A-Z])/g, '$1-$2')
11
+ .toLowerCase()
12
+ .replace(/\/index$/, '');
13
+ }
@@ -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
+ }
@@ -55,7 +55,7 @@ const extractApiPath = (url) => {
55
55
  return match ? match[1] : 'Unknown API';
56
56
  };
57
57
 
58
- const handleBusinessError = (response) => {
58
+ const _handleBusinessError = (response) => {
59
59
  if (response.data.code === 0) {
60
60
  const apiPath = extractApiPath(response.config.url);
61
61
  if (process.env.NODE_ENV === 'development') {
@@ -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
+ }
@@ -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,85 @@
1
+ <template>
2
+ <div class="cesium-page">
3
+ <header class="example-toolbar">
4
+ <button
5
+ type="button"
6
+ class="shell-btn shell-btn--ghost cesium-toolbar__back"
7
+ @click="goBack"
8
+ >
9
+ ← 首页
10
+ </button>
11
+ <span class="example-toolbar__title">Cesium · OpenStreetMap</span>
12
+ <span v-if="!hasGis" class="shell-badge">GIS 未在 .env 启用</span>
13
+ </header>
14
+ <div v-if="!hasGis" class="cesium-page__fallback">
15
+ <p>
16
+ 请在 <code>.env</code> 中设置 <code>VITE_FEATURE_GIS=true</code> 并重启
17
+ <code>pnpm dev</code>。
18
+ </p>
19
+ <button
20
+ type="button"
21
+ class="shell-btn shell-btn--primary"
22
+ @click="goBack"
23
+ >
24
+ 返回首页
25
+ </button>
26
+ </div>
27
+ <CesiumViewer v-else class="cesium-page__viewer" />
28
+ </div>
29
+ </template>
30
+
31
+ <script setup lang="ts">
32
+ import { useRouter } from 'vue-router';
33
+ import CesiumViewer from '@components/CesiumViewer/index.vue';
34
+ import { useFeatureGis } from '@composables/useFeatureGis';
35
+
36
+ const router = useRouter();
37
+ const { hasGis } = useFeatureGis();
38
+
39
+ const goBack = () => {
40
+ router.push('/');
41
+ };
42
+ </script>
43
+
44
+ <style scoped>
45
+ .cesium-page {
46
+ display: flex;
47
+ flex-direction: column;
48
+ width: 100%;
49
+ height: 100vh;
50
+ overflow: hidden;
51
+ background: #0b1220;
52
+ }
53
+
54
+ .cesium-toolbar__back {
55
+ background: #f1f5f9;
56
+ color: var(--shell-text);
57
+ }
58
+
59
+ .cesium-toolbar__back:hover {
60
+ background: #e2e8f0;
61
+ }
62
+
63
+ .cesium-page__viewer {
64
+ flex: 1;
65
+ min-height: 0;
66
+ }
67
+
68
+ .cesium-page__fallback {
69
+ flex: 1;
70
+ display: flex;
71
+ flex-direction: column;
72
+ align-items: center;
73
+ justify-content: center;
74
+ gap: 16px;
75
+ padding: 24px;
76
+ color: #e2e8f0;
77
+ text-align: center;
78
+ }
79
+
80
+ .cesium-page__fallback code {
81
+ padding: 2px 6px;
82
+ border-radius: 4px;
83
+ background: rgb(255 255 255 / 10%);
84
+ }
85
+ </style>