ylyx-cli 1.0.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 (402) hide show
  1. package/README.md +184 -0
  2. package/bin/ylyx.js +95 -0
  3. package/lib/generator.js +192 -0
  4. package/lib/index.js +113 -0
  5. package/lib/interactive.js +87 -0
  6. package/lib/remote.js +179 -0
  7. package/lib/template.js +174 -0
  8. package/lib/utils.js +134 -0
  9. package/package.json +56 -0
  10. package/templates/react-app/files/README.md +23 -0
  11. package/templates/react-app/files/package.json +29 -0
  12. package/templates/react-app/files/public/index.html +11 -0
  13. package/templates/react-app/files/src/App.css +15 -0
  14. package/templates/react-app/files/src/App.js +15 -0
  15. package/templates/react-app/files/src/index.css +10 -0
  16. package/templates/react-app/files/src/index.js +11 -0
  17. package/templates/react-app/template.json +12 -0
  18. package/templates/react-component/files/Component.module.css +5 -0
  19. package/templates/react-component/files/Component.tsx +31 -0
  20. package/templates/react-component/files/index.ts +2 -0
  21. package/templates/react-component/template.json +49 -0
  22. package/templates/vue-app/files/.editorconfig +14 -0
  23. package/templates/vue-app/files/.env.development +21 -0
  24. package/templates/vue-app/files/.env.production +18 -0
  25. package/templates/vue-app/files/.eslintignore +5 -0
  26. package/templates/vue-app/files/.eslintrc.js +267 -0
  27. package/templates/vue-app/files/.prettierignore +12 -0
  28. package/templates/vue-app/files/.travis.yml +5 -0
  29. package/templates/vue-app/files/.vscode/extensions.json +7 -0
  30. package/templates/vue-app/files/.vscode/settings.json +39 -0
  31. package/templates/vue-app/files/LICENSE +191 -0
  32. package/templates/vue-app/files/README.md +87 -0
  33. package/templates/vue-app/files/babel.config.js +11 -0
  34. package/templates/vue-app/files/jest.config.js +24 -0
  35. package/templates/vue-app/files/package.json +136 -0
  36. package/templates/vue-app/files/plopfile.js +7 -0
  37. package/templates/vue-app/files/postcss.config.js +5 -0
  38. package/templates/vue-app/files/prettier.config.js +36 -0
  39. package/templates/vue-app/files/public/default.js +26 -0
  40. package/templates/vue-app/files/public/favicon.ico +0 -0
  41. package/templates/vue-app/files/public/index.html +26 -0
  42. package/templates/vue-app/files/src/App.vue +54 -0
  43. package/templates/vue-app/files/src/api/bigDataV/index.js +198 -0
  44. package/templates/vue-app/files/src/api/data.js +42 -0
  45. package/templates/vue-app/files/src/api/dataArchive/index.js +186 -0
  46. package/templates/vue-app/files/src/api/generator/genConfig.js +16 -0
  47. package/templates/vue-app/files/src/api/generator/generator.js +32 -0
  48. package/templates/vue-app/files/src/api/indexManagement/index.js +39 -0
  49. package/templates/vue-app/files/src/api/institutionMonitor/index.js +396 -0
  50. package/templates/vue-app/files/src/api/institutionSet/index.js +120 -0
  51. package/templates/vue-app/files/src/api/login.js +44 -0
  52. package/templates/vue-app/files/src/api/selfStatistics/index.js +50 -0
  53. package/templates/vue-app/files/src/api/system/code.js +15 -0
  54. package/templates/vue-app/files/src/api/system/dict.js +34 -0
  55. package/templates/vue-app/files/src/api/system/dictDetail.js +52 -0
  56. package/templates/vue-app/files/src/api/system/equipment.js +35 -0
  57. package/templates/vue-app/files/src/api/system/examManage.js +49 -0
  58. package/templates/vue-app/files/src/api/system/examProject.js +48 -0
  59. package/templates/vue-app/files/src/api/system/hosModel.js +35 -0
  60. package/templates/vue-app/files/src/api/system/hospital.js +88 -0
  61. package/templates/vue-app/files/src/api/system/job.js +40 -0
  62. package/templates/vue-app/files/src/api/system/menu.js +67 -0
  63. package/templates/vue-app/files/src/api/system/model.js +42 -0
  64. package/templates/vue-app/files/src/api/system/risConfig.js +9 -0
  65. package/templates/vue-app/files/src/api/system/role.js +64 -0
  66. package/templates/vue-app/files/src/api/system/sysSet.js +19 -0
  67. package/templates/vue-app/files/src/api/system/timing.js +41 -0
  68. package/templates/vue-app/files/src/api/system/user.js +121 -0
  69. package/templates/vue-app/files/src/api/tools/alipay.js +25 -0
  70. package/templates/vue-app/files/src/api/tools/email.js +24 -0
  71. package/templates/vue-app/files/src/api/tools/localStorage.js +27 -0
  72. package/templates/vue-app/files/src/api/tools/qiniu.js +40 -0
  73. package/templates/vue-app/files/src/assets/401_images/401.gif +0 -0
  74. package/templates/vue-app/files/src/assets/404_images/404.png +0 -0
  75. package/templates/vue-app/files/src/assets/404_images/404_cloud.png +0 -0
  76. package/templates/vue-app/files/src/assets/css/font-awesome.css +2342 -0
  77. package/templates/vue-app/files/src/assets/css/font-awesome.min.css +2336 -0
  78. package/templates/vue-app/files/src/assets/fonts/FontAwesome.otf +0 -0
  79. package/templates/vue-app/files/src/assets/fonts/fontawesome-webfont.eot +0 -0
  80. package/templates/vue-app/files/src/assets/fonts/fontawesome-webfont.svg +2671 -0
  81. package/templates/vue-app/files/src/assets/fonts/fontawesome-webfont.ttf +0 -0
  82. package/templates/vue-app/files/src/assets/fonts/fontawesome-webfont.woff +0 -0
  83. package/templates/vue-app/files/src/assets/fonts/fontawesome-webfont.woff2 +0 -0
  84. package/templates/vue-app/files/src/assets/icons/index.js +9 -0
  85. package/templates/vue-app/files/src/assets/icons/svg/Steve-Jobs.svg +1 -0
  86. package/templates/vue-app/files/src/assets/icons/svg/achive.svg +1 -0
  87. package/templates/vue-app/files/src/assets/icons/svg/alipay.svg +1 -0
  88. package/templates/vue-app/files/src/assets/icons/svg/anq.svg +1 -0
  89. package/templates/vue-app/files/src/assets/icons/svg/app.svg +1 -0
  90. package/templates/vue-app/files/src/assets/icons/svg/archive.svg +1 -0
  91. package/templates/vue-app/files/src/assets/icons/svg/backup.svg +1 -0
  92. package/templates/vue-app/files/src/assets/icons/svg/chain.svg +1 -0
  93. package/templates/vue-app/files/src/assets/icons/svg/chart.svg +1 -0
  94. package/templates/vue-app/files/src/assets/icons/svg/codeConsole.svg +1 -0
  95. package/templates/vue-app/files/src/assets/icons/svg/dashboard.svg +1 -0
  96. package/templates/vue-app/files/src/assets/icons/svg/database.svg +1 -0
  97. package/templates/vue-app/files/src/assets/icons/svg/date.svg +1 -0
  98. package/templates/vue-app/files/src/assets/icons/svg/deploy.svg +1 -0
  99. package/templates/vue-app/files/src/assets/icons/svg/dept.svg +1 -0
  100. package/templates/vue-app/files/src/assets/icons/svg/dev.svg +1 -0
  101. package/templates/vue-app/files/src/assets/icons/svg/develop.svg +1 -0
  102. package/templates/vue-app/files/src/assets/icons/svg/dictionary.svg +1 -0
  103. package/templates/vue-app/files/src/assets/icons/svg/doc.svg +1 -0
  104. package/templates/vue-app/files/src/assets/icons/svg/download.svg +1 -0
  105. package/templates/vue-app/files/src/assets/icons/svg/edit.svg +1 -0
  106. package/templates/vue-app/files/src/assets/icons/svg/education.svg +1 -0
  107. package/templates/vue-app/files/src/assets/icons/svg/email.svg +1 -0
  108. package/templates/vue-app/files/src/assets/icons/svg/equSet.svg +1 -0
  109. package/templates/vue-app/files/src/assets/icons/svg/error.svg +1 -0
  110. package/templates/vue-app/files/src/assets/icons/svg/exit-fullscreen.svg +1 -0
  111. package/templates/vue-app/files/src/assets/icons/svg/fullscreen.svg +1 -0
  112. package/templates/vue-app/files/src/assets/icons/svg/fwb.svg +1 -0
  113. package/templates/vue-app/files/src/assets/icons/svg/github.svg +1 -0
  114. package/templates/vue-app/files/src/assets/icons/svg/goBack.svg +1 -0
  115. package/templates/vue-app/files/src/assets/icons/svg/gonggao.svg +1 -0
  116. package/templates/vue-app/files/src/assets/icons/svg/hospital.svg +2 -0
  117. package/templates/vue-app/files/src/assets/icons/svg/hospital1.svg +2 -0
  118. package/templates/vue-app/files/src/assets/icons/svg/hospitalTotal.svg +1 -0
  119. package/templates/vue-app/files/src/assets/icons/svg/icon.svg +1 -0
  120. package/templates/vue-app/files/src/assets/icons/svg/image.svg +1 -0
  121. package/templates/vue-app/files/src/assets/icons/svg/index.svg +1 -0
  122. package/templates/vue-app/files/src/assets/icons/svg/international.svg +1 -0
  123. package/templates/vue-app/files/src/assets/icons/svg/ipvisits.svg +1 -0
  124. package/templates/vue-app/files/src/assets/icons/svg/java.svg +1 -0
  125. package/templates/vue-app/files/src/assets/icons/svg/link.svg +1 -0
  126. package/templates/vue-app/files/src/assets/icons/svg/list.svg +1 -0
  127. package/templates/vue-app/files/src/assets/icons/svg/lock.svg +1 -0
  128. package/templates/vue-app/files/src/assets/icons/svg/log.svg +1 -0
  129. package/templates/vue-app/files/src/assets/icons/svg/login.svg +1 -0
  130. package/templates/vue-app/files/src/assets/icons/svg/loginOne.svg +35 -0
  131. package/templates/vue-app/files/src/assets/icons/svg/loginOneWhite.svg +19 -0
  132. package/templates/vue-app/files/src/assets/icons/svg/loginOr.svg +93 -0
  133. package/templates/vue-app/files/src/assets/icons/svg/loginUp.svg +96 -0
  134. package/templates/vue-app/files/src/assets/icons/svg/markdown.svg +1 -0
  135. package/templates/vue-app/files/src/assets/icons/svg/menu.svg +1 -0
  136. package/templates/vue-app/files/src/assets/icons/svg/message.svg +1 -0
  137. package/templates/vue-app/files/src/assets/icons/svg/mnt.svg +1 -0
  138. package/templates/vue-app/files/src/assets/icons/svg/money.svg +1 -0
  139. package/templates/vue-app/files/src/assets/icons/svg/monitor.svg +1 -0
  140. package/templates/vue-app/files/src/assets/icons/svg/nested.svg +1 -0
  141. package/templates/vue-app/files/src/assets/icons/svg/network.svg +1 -0
  142. package/templates/vue-app/files/src/assets/icons/svg/offline.svg +1 -0
  143. package/templates/vue-app/files/src/assets/icons/svg/online.svg +1 -0
  144. package/templates/vue-app/files/src/assets/icons/svg/password.svg +1 -0
  145. package/templates/vue-app/files/src/assets/icons/svg/people.svg +1 -0
  146. package/templates/vue-app/files/src/assets/icons/svg/peoples.svg +1 -0
  147. package/templates/vue-app/files/src/assets/icons/svg/perSet.svg +1 -0
  148. package/templates/vue-app/files/src/assets/icons/svg/permission.svg +1 -0
  149. package/templates/vue-app/files/src/assets/icons/svg/phone.svg +1 -0
  150. package/templates/vue-app/files/src/assets/icons/svg/piechart.svg +1 -0
  151. package/templates/vue-app/files/src/assets/icons/svg/qiniu.svg +1 -0
  152. package/templates/vue-app/files/src/assets/icons/svg/redis.svg +1 -0
  153. package/templates/vue-app/files/src/assets/icons/svg/resetpassword.svg +1 -0
  154. package/templates/vue-app/files/src/assets/icons/svg/resetpassword1.svg +1 -0
  155. package/templates/vue-app/files/src/assets/icons/svg/role.svg +1 -0
  156. package/templates/vue-app/files/src/assets/icons/svg/search.svg +1 -0
  157. package/templates/vue-app/files/src/assets/icons/svg/server.svg +1 -0
  158. package/templates/vue-app/files/src/assets/icons/svg/shopping.svg +1 -0
  159. package/templates/vue-app/files/src/assets/icons/svg/size.svg +1 -0
  160. package/templates/vue-app/files/src/assets/icons/svg/skill.svg +1 -0
  161. package/templates/vue-app/files/src/assets/icons/svg/source.svg +1 -0
  162. package/templates/vue-app/files/src/assets/icons/svg/sqlMonitor.svg +1 -0
  163. package/templates/vue-app/files/src/assets/icons/svg/statistical.svg +1 -0
  164. package/templates/vue-app/files/src/assets/icons/svg/swagger.svg +1 -0
  165. package/templates/vue-app/files/src/assets/icons/svg/sys-tools.svg +1 -0
  166. package/templates/vue-app/files/src/assets/icons/svg/system.svg +1 -0
  167. package/templates/vue-app/files/src/assets/icons/svg/system1.svg +1 -0
  168. package/templates/vue-app/files/src/assets/icons/svg/tab.svg +1 -0
  169. package/templates/vue-app/files/src/assets/icons/svg/teams.svg +1 -0
  170. package/templates/vue-app/files/src/assets/icons/svg/theme.svg +1 -0
  171. package/templates/vue-app/files/src/assets/icons/svg/timing.svg +1 -0
  172. package/templates/vue-app/files/src/assets/icons/svg/tools.svg +1 -0
  173. package/templates/vue-app/files/src/assets/icons/svg/tree-table.svg +1 -0
  174. package/templates/vue-app/files/src/assets/icons/svg/tree.svg +1 -0
  175. package/templates/vue-app/files/src/assets/icons/svg/unlock.svg +1 -0
  176. package/templates/vue-app/files/src/assets/icons/svg/user.svg +1 -0
  177. package/templates/vue-app/files/src/assets/icons/svg/user1.svg +1 -0
  178. package/templates/vue-app/files/src/assets/icons/svg/validCode.svg +1 -0
  179. package/templates/vue-app/files/src/assets/icons/svg/visits.svg +1 -0
  180. package/templates/vue-app/files/src/assets/icons/svg/web.svg +1 -0
  181. package/templates/vue-app/files/src/assets/icons/svg/wechat.svg +1 -0
  182. package/templates/vue-app/files/src/assets/icons/svg/weixin.svg +1 -0
  183. package/templates/vue-app/files/src/assets/icons/svg/zujian.svg +1 -0
  184. package/templates/vue-app/files/src/assets/icons/svgo.yml +21 -0
  185. package/templates/vue-app/files/src/assets/images/archive.png +0 -0
  186. package/templates/vue-app/files/src/assets/images/archive_icon.png +0 -0
  187. package/templates/vue-app/files/src/assets/images/avatar.png +0 -0
  188. package/templates/vue-app/files/src/assets/images/background.jpg +0 -0
  189. package/templates/vue-app/files/src/assets/images/bg.png +0 -0
  190. package/templates/vue-app/files/src/assets/images/gongan.png +0 -0
  191. package/templates/vue-app/files/src/assets/images/hospital_icon.png +0 -0
  192. package/templates/vue-app/files/src/assets/images/location.png +0 -0
  193. package/templates/vue-app/files/src/assets/images/logintitle.jpg +0 -0
  194. package/templates/vue-app/files/src/assets/images/logo-copy1.png +0 -0
  195. package/templates/vue-app/files/src/assets/images/logo.png +0 -0
  196. package/templates/vue-app/files/src/assets/images/logoBg.png +0 -0
  197. package/templates/vue-app/files/src/assets/images/offline-bg.png +0 -0
  198. package/templates/vue-app/files/src/assets/images/position.png +0 -0
  199. package/templates/vue-app/files/src/assets/images/qualityBg.jpg +0 -0
  200. package/templates/vue-app/files/src/assets/images/self-bg.png +0 -0
  201. package/templates/vue-app/files/src/assets/images/self-bg2.png +0 -0
  202. package/templates/vue-app/files/src/assets/images/triAngel.png +0 -0
  203. package/templates/vue-app/files/src/assets/images/triAngelNormal.png +0 -0
  204. package/templates/vue-app/files/src/assets/styles/btn.scss +103 -0
  205. package/templates/vue-app/files/src/assets/styles/eladmin.scss +124 -0
  206. package/templates/vue-app/files/src/assets/styles/element-ui.scss +217 -0
  207. package/templates/vue-app/files/src/assets/styles/element-variables.scss +31 -0
  208. package/templates/vue-app/files/src/assets/styles/global.scss +73 -0
  209. package/templates/vue-app/files/src/assets/styles/index.scss +220 -0
  210. package/templates/vue-app/files/src/assets/styles/mixin.scss +60 -0
  211. package/templates/vue-app/files/src/assets/styles/publicStyle.scss +224 -0
  212. package/templates/vue-app/files/src/assets/styles/sidebar.scss +239 -0
  213. package/templates/vue-app/files/src/assets/styles/transition.scss +48 -0
  214. package/templates/vue-app/files/src/assets/styles/variables.scss +44 -0
  215. package/templates/vue-app/files/src/common/flexible.js +145 -0
  216. package/templates/vue-app/files/src/components/Breadcrumb/index.vue +87 -0
  217. package/templates/vue-app/files/src/components/Crud/CRUD.operation.vue +248 -0
  218. package/templates/vue-app/files/src/components/Crud/Pagination.vue +20 -0
  219. package/templates/vue-app/files/src/components/Crud/RR.operation.vue +39 -0
  220. package/templates/vue-app/files/src/components/Crud/UD.operation.vue +106 -0
  221. package/templates/vue-app/files/src/components/Crud/crud.js +907 -0
  222. package/templates/vue-app/files/src/components/Crud/user/UR.operation.vue +154 -0
  223. package/templates/vue-app/files/src/components/DateRangePicker/index.vue +42 -0
  224. package/templates/vue-app/files/src/components/DateRangePickerProhibitNext/index.vue +42 -0
  225. package/templates/vue-app/files/src/components/DateRangePickerProhibitTodayNext/index.vue +48 -0
  226. package/templates/vue-app/files/src/components/Dict/Dict.js +31 -0
  227. package/templates/vue-app/files/src/components/Dict/index.js +29 -0
  228. package/templates/vue-app/files/src/components/Doc/index.vue +16 -0
  229. package/templates/vue-app/files/src/components/Echarts/BarChart.vue +115 -0
  230. package/templates/vue-app/files/src/components/Echarts/Category.vue +768 -0
  231. package/templates/vue-app/files/src/components/Echarts/Funnel.vue +120 -0
  232. package/templates/vue-app/files/src/components/Echarts/Gauge.vue +74 -0
  233. package/templates/vue-app/files/src/components/Echarts/Graph.vue +101 -0
  234. package/templates/vue-app/files/src/components/Echarts/HeatMap.vue +301 -0
  235. package/templates/vue-app/files/src/components/Echarts/Line3D.vue +110 -0
  236. package/templates/vue-app/files/src/components/Echarts/PieChart.vue +84 -0
  237. package/templates/vue-app/files/src/components/Echarts/Point.vue +161 -0
  238. package/templates/vue-app/files/src/components/Echarts/RadarChart.vue +123 -0
  239. package/templates/vue-app/files/src/components/Echarts/Rich.vue +160 -0
  240. package/templates/vue-app/files/src/components/Echarts/Sankey.vue +114 -0
  241. package/templates/vue-app/files/src/components/Echarts/Scatter.vue +192 -0
  242. package/templates/vue-app/files/src/components/Echarts/Sunburst.vue +127 -0
  243. package/templates/vue-app/files/src/components/Echarts/ThemeRiver.vue +233 -0
  244. package/templates/vue-app/files/src/components/Echarts/WordCloud.vue +201 -0
  245. package/templates/vue-app/files/src/components/GithubCorner/index.vue +55 -0
  246. package/templates/vue-app/files/src/components/Hamburger/index.vue +44 -0
  247. package/templates/vue-app/files/src/components/HeaderSearch/index.vue +196 -0
  248. package/templates/vue-app/files/src/components/IconSelect/index.vue +74 -0
  249. package/templates/vue-app/files/src/components/IconSelect/requireIcons.js +10 -0
  250. package/templates/vue-app/files/src/components/Iframe/index.vue +30 -0
  251. package/templates/vue-app/files/src/components/JavaEdit/index.vue +78 -0
  252. package/templates/vue-app/files/src/components/Pagination/index.vue +100 -0
  253. package/templates/vue-app/files/src/components/PanThumb/index.vue +149 -0
  254. package/templates/vue-app/files/src/components/ParentView/index.vue +3 -0
  255. package/templates/vue-app/files/src/components/Permission/index.js +13 -0
  256. package/templates/vue-app/files/src/components/Permission/permission.js +21 -0
  257. package/templates/vue-app/files/src/components/RightPanel/index.vue +149 -0
  258. package/templates/vue-app/files/src/components/Screenfull/index.vue +60 -0
  259. package/templates/vue-app/files/src/components/SizeSelect/index.vue +60 -0
  260. package/templates/vue-app/files/src/components/SvgIcon/index.vue +66 -0
  261. package/templates/vue-app/files/src/components/ThemePicker/index.vue +177 -0
  262. package/templates/vue-app/files/src/components/UploadExcel/index.vue +149 -0
  263. package/templates/vue-app/files/src/components/WaterMark/setWaterMark.js +68 -0
  264. package/templates/vue-app/files/src/components/WaterMark/waterMark.vue +69 -0
  265. package/templates/vue-app/files/src/components/Xgplayer/index.vue +49 -0
  266. package/templates/vue-app/files/src/components/YamlEdit/index.vue +81 -0
  267. package/templates/vue-app/files/src/layout/components/AppMain.vue +67 -0
  268. package/templates/vue-app/files/src/layout/components/Navbar.vue +209 -0
  269. package/templates/vue-app/files/src/layout/components/Settings/index.vue +125 -0
  270. package/templates/vue-app/files/src/layout/components/Sidebar/FixiOSBug.js +26 -0
  271. package/templates/vue-app/files/src/layout/components/Sidebar/Item.vue +29 -0
  272. package/templates/vue-app/files/src/layout/components/Sidebar/Link.vue +35 -0
  273. package/templates/vue-app/files/src/layout/components/Sidebar/Logo.vue +93 -0
  274. package/templates/vue-app/files/src/layout/components/Sidebar/SidebarItem.vue +104 -0
  275. package/templates/vue-app/files/src/layout/components/Sidebar/index.vue +79 -0
  276. package/templates/vue-app/files/src/layout/components/TagsView/ScrollPane.vue +90 -0
  277. package/templates/vue-app/files/src/layout/components/TagsView/index.vue +299 -0
  278. package/templates/vue-app/files/src/layout/components/index.js +5 -0
  279. package/templates/vue-app/files/src/layout/index.vue +119 -0
  280. package/templates/vue-app/files/src/layout/mixin/ResizeHandler.js +45 -0
  281. package/templates/vue-app/files/src/main.js +89 -0
  282. package/templates/vue-app/files/src/mixins/crud.js +348 -0
  283. package/templates/vue-app/files/src/router/index.js +156 -0
  284. package/templates/vue-app/files/src/router/routers.js +203 -0
  285. package/templates/vue-app/files/src/settings.js +57 -0
  286. package/templates/vue-app/files/src/store/getters.js +29 -0
  287. package/templates/vue-app/files/src/store/index.js +25 -0
  288. package/templates/vue-app/files/src/store/modules/api.js +33 -0
  289. package/templates/vue-app/files/src/store/modules/app.js +55 -0
  290. package/templates/vue-app/files/src/store/modules/permission.js +79 -0
  291. package/templates/vue-app/files/src/store/modules/register.js +17 -0
  292. package/templates/vue-app/files/src/store/modules/settings.js +46 -0
  293. package/templates/vue-app/files/src/store/modules/tagsView.js +168 -0
  294. package/templates/vue-app/files/src/store/modules/user.js +119 -0
  295. package/templates/vue-app/files/src/utils/auth.js +18 -0
  296. package/templates/vue-app/files/src/utils/base64ToFile.js +27 -0
  297. package/templates/vue-app/files/src/utils/clipboard.js +36 -0
  298. package/templates/vue-app/files/src/utils/datetime.js +289 -0
  299. package/templates/vue-app/files/src/utils/getBlobFile.js +10 -0
  300. package/templates/vue-app/files/src/utils/getTime.js +29 -0
  301. package/templates/vue-app/files/src/utils/index.js +520 -0
  302. package/templates/vue-app/files/src/utils/permission.js +29 -0
  303. package/templates/vue-app/files/src/utils/pinyin.js +450 -0
  304. package/templates/vue-app/files/src/utils/request.js +139 -0
  305. package/templates/vue-app/files/src/utils/rsaEncrypt.js +37 -0
  306. package/templates/vue-app/files/src/utils/shortcuts.js +210 -0
  307. package/templates/vue-app/files/src/utils/upload.js +12 -0
  308. package/templates/vue-app/files/src/utils/validate.js +262 -0
  309. package/templates/vue-app/files/src/views/components/Echarts.vue +124 -0
  310. package/templates/vue-app/files/src/views/components/Editor.vue +75 -0
  311. package/templates/vue-app/files/src/views/components/MarkDown.vue +44 -0
  312. package/templates/vue-app/files/src/views/components/UVideo.vue +37 -0
  313. package/templates/vue-app/files/src/views/components/YamlEdit.vue +206 -0
  314. package/templates/vue-app/files/src/views/components/camera/camera.vue +115 -0
  315. package/templates/vue-app/files/src/views/components/camera/cameraTest.vue +158 -0
  316. package/templates/vue-app/files/src/views/components/excel/upload-excel.vue +41 -0
  317. package/templates/vue-app/files/src/views/components/icons/element-icons.js +74 -0
  318. package/templates/vue-app/files/src/views/components/icons/index.vue +106 -0
  319. package/templates/vue-app/files/src/views/components/icons/svg-icons.js +10 -0
  320. package/templates/vue-app/files/src/views/components/scroll/index.vue +107 -0
  321. package/templates/vue-app/files/src/views/components/scrollFull/index.vue +99 -0
  322. package/templates/vue-app/files/src/views/dashboard/LineChart.vue +138 -0
  323. package/templates/vue-app/files/src/views/dashboard/PanelGroup.vue +173 -0
  324. package/templates/vue-app/files/src/views/dashboard/mixins/resize.js +57 -0
  325. package/templates/vue-app/files/src/views/dataArchive/delTable.vue +354 -0
  326. package/templates/vue-app/files/src/views/dataArchive/exportDetail.vue +121 -0
  327. package/templates/vue-app/files/src/views/dataArchive/exportList.vue +160 -0
  328. package/templates/vue-app/files/src/views/dataArchive/index.vue +2104 -0
  329. package/templates/vue-app/files/src/views/features/401.vue +83 -0
  330. package/templates/vue-app/files/src/views/features/404.vue +226 -0
  331. package/templates/vue-app/files/src/views/features/redirect.vue +12 -0
  332. package/templates/vue-app/files/src/views/generator/config.vue +348 -0
  333. package/templates/vue-app/files/src/views/generator/index.vue +143 -0
  334. package/templates/vue-app/files/src/views/generator/preview.vue +39 -0
  335. package/templates/vue-app/files/src/views/home.vue +80 -0
  336. package/templates/vue-app/files/src/views/indexManagement/index.vue +422 -0
  337. package/templates/vue-app/files/src/views/indexManagement/other.vue +286 -0
  338. package/templates/vue-app/files/src/views/institutionMonitor/components/LineChart.vue +191 -0
  339. package/templates/vue-app/files/src/views/institutionMonitor/index.scss +339 -0
  340. package/templates/vue-app/files/src/views/institutionMonitor/index.vue +1385 -0
  341. package/templates/vue-app/files/src/views/institutionMonitor/mixins/resize.js +57 -0
  342. package/templates/vue-app/files/src/views/institutionMonitor/monitorDetail/checkProjectCode.vue +267 -0
  343. package/templates/vue-app/files/src/views/institutionMonitor/monitorDetail/imageAbnormalMonitor.vue +361 -0
  344. package/templates/vue-app/files/src/views/institutionMonitor/monitorDetail/index.vue +686 -0
  345. package/templates/vue-app/files/src/views/institutionMonitor/monitorDetail/leakageAnomaly.vue +270 -0
  346. package/templates/vue-app/files/src/views/institutionMonitor/monitorDetail/moveMonitore.vue +114 -0
  347. package/templates/vue-app/files/src/views/institutionMonitor/monitorDetail/qualityMonitore.vue +338 -0
  348. package/templates/vue-app/files/src/views/institutionSet/cloudSet.vue +534 -0
  349. package/templates/vue-app/files/src/views/institutionSet/index.vue +2550 -0
  350. package/templates/vue-app/files/src/views/login.vue +243 -0
  351. package/templates/vue-app/files/src/views/qualityLogin.vue +280 -0
  352. package/templates/vue-app/files/src/views/selfStatistics/components/LineChart.vue +296 -0
  353. package/templates/vue-app/files/src/views/selfStatistics/hospitalDetail/index.vue +533 -0
  354. package/templates/vue-app/files/src/views/selfStatistics/index.scss +447 -0
  355. package/templates/vue-app/files/src/views/selfStatistics/index.vue +903 -0
  356. package/templates/vue-app/files/src/views/selfStatistics/mixins/resize.js +57 -0
  357. package/templates/vue-app/files/src/views/selfStatistics/monitorDetail/index.vue +285 -0
  358. package/templates/vue-app/files/src/views/selfStatistics/offlineDetail/index.vue +104 -0
  359. package/templates/vue-app/files/src/views/selfStatistics/selfActiveDetail/index.vue +104 -0
  360. package/templates/vue-app/files/src/views/selfStatistics/selfMonitorDetail/index.vue +420 -0
  361. package/templates/vue-app/files/src/views/selfStatistics/setWaterMark/setWaterMark.js +68 -0
  362. package/templates/vue-app/files/src/views/selfStatistics/setWaterMark/waterMark.vue +69 -0
  363. package/templates/vue-app/files/src/views/system/dept/index.vue +144 -0
  364. package/templates/vue-app/files/src/views/system/dict/dictDetail.vue +146 -0
  365. package/templates/vue-app/files/src/views/system/dict/index.vue +159 -0
  366. package/templates/vue-app/files/src/views/system/examModality/index.vue +174 -0
  367. package/templates/vue-app/files/src/views/system/examPart/index.vue +184 -0
  368. package/templates/vue-app/files/src/views/system/examProject/index.vue +321 -0
  369. package/templates/vue-app/files/src/views/system/examine/index.vue +66 -0
  370. package/templates/vue-app/files/src/views/system/job/index.vue +119 -0
  371. package/templates/vue-app/files/src/views/system/job/module/form.vue +72 -0
  372. package/templates/vue-app/files/src/views/system/job/module/header.vue +48 -0
  373. package/templates/vue-app/files/src/views/system/menu/index.vue +327 -0
  374. package/templates/vue-app/files/src/views/system/model/index.vue +285 -0
  375. package/templates/vue-app/files/src/views/system/role/index.vue +434 -0
  376. package/templates/vue-app/files/src/views/system/sysSet/index.vue +84 -0
  377. package/templates/vue-app/files/src/views/system/timing/index.vue +289 -0
  378. package/templates/vue-app/files/src/views/system/timing/log.vue +143 -0
  379. package/templates/vue-app/files/src/views/system/user/admin.vue +414 -0
  380. package/templates/vue-app/files/src/views/system/user/center/updateEmail.vue +146 -0
  381. package/templates/vue-app/files/src/views/system/user/center/updatePass.vue +168 -0
  382. package/templates/vue-app/files/src/views/system/user/center.vue +140 -0
  383. package/templates/vue-app/files/src/views/system/user/index.vue +972 -0
  384. package/templates/vue-app/files/src/views/systemSet/role/index.vue +314 -0
  385. package/templates/vue-app/files/src/views/systemSet/user/admin.vue +414 -0
  386. package/templates/vue-app/files/src/views/systemSet/user/center/updateEmail.vue +146 -0
  387. package/templates/vue-app/files/src/views/systemSet/user/center/updatePass.vue +115 -0
  388. package/templates/vue-app/files/src/views/systemSet/user/center.vue +351 -0
  389. package/templates/vue-app/files/src/views/systemSet/user/index.vue +928 -0
  390. package/templates/vue-app/files/src/views/tools/aliPay/config.vue +102 -0
  391. package/templates/vue-app/files/src/views/tools/aliPay/index.vue +48 -0
  392. package/templates/vue-app/files/src/views/tools/aliPay/toPay.vue +91 -0
  393. package/templates/vue-app/files/src/views/tools/email/config.vue +91 -0
  394. package/templates/vue-app/files/src/views/tools/email/index.vue +42 -0
  395. package/templates/vue-app/files/src/views/tools/email/send.vue +159 -0
  396. package/templates/vue-app/files/src/views/tools/storage/index.vue +35 -0
  397. package/templates/vue-app/files/src/views/tools/storage/local/index.vue +207 -0
  398. package/templates/vue-app/files/src/views/tools/storage/qiniu/form.vue +108 -0
  399. package/templates/vue-app/files/src/views/tools/storage/qiniu/index.vue +241 -0
  400. package/templates/vue-app/files/src/views/tools/swagger/index.vue +14 -0
  401. package/templates/vue-app/files/vue.config.js +173 -0
  402. package/templates/vue-app/template.json +30 -0
package/lib/remote.js ADDED
@@ -0,0 +1,179 @@
1
+ const fs = require('fs-extra');
2
+ const path = require('path');
3
+ const { execSync } = require('child_process');
4
+ const { log } = require('./utils');
5
+
6
+ /**
7
+ * 获取模板缓存目录
8
+ */
9
+ function getTemplateCacheDir() {
10
+ const os = require('os');
11
+ const cacheDir = path.join(os.homedir(), '.ylyx', 'templates-cache');
12
+ fs.ensureDirSync(cacheDir);
13
+ return cacheDir;
14
+ }
15
+
16
+ /**
17
+ * 解析 Git 仓库 URL
18
+ * 支持格式:
19
+ * - https://github.com/user/repo
20
+ * - https://github.com/user/repo.git
21
+ * - git@github.com:user/repo.git
22
+ * - user/repo (简写,默认 GitHub)
23
+ */
24
+ function parseGitUrl(url) {
25
+ // 如果是简写格式 user/repo,转换为 GitHub URL
26
+ if (!url.includes('://') && !url.includes('@') && url.includes('/')) {
27
+ url = `https://github.com/${url}`;
28
+ }
29
+
30
+ // 如果不是 .git 结尾,添加 .git
31
+ if (!url.endsWith('.git')) {
32
+ url = url + '.git';
33
+ }
34
+
35
+ // 提取仓库信息
36
+ let match;
37
+ if (url.startsWith('https://')) {
38
+ match = url.match(/https:\/\/([^/]+)\/([^/]+)\/([^/]+)/);
39
+ } else if (url.startsWith('git@')) {
40
+ match = url.match(/git@([^:]+):([^/]+)\/([^/]+)/);
41
+ }
42
+
43
+ if (!match) {
44
+ throw new Error(`无法解析 Git URL: ${url}`);
45
+ }
46
+
47
+ const host = match[1];
48
+ const owner = match[2];
49
+ const repo = match[3].replace('.git', '');
50
+
51
+ return {
52
+ host,
53
+ owner,
54
+ repo,
55
+ url: url,
56
+ cacheKey: `${host}/${owner}/${repo}`,
57
+ };
58
+ }
59
+
60
+ /**
61
+ * 检查 Git 是否可用
62
+ */
63
+ function checkGitAvailable() {
64
+ try {
65
+ execSync('git --version', { stdio: 'ignore' });
66
+ return true;
67
+ } catch (e) {
68
+ return false;
69
+ }
70
+ }
71
+
72
+ /**
73
+ * 从 Git 仓库下载模板
74
+ */
75
+ async function downloadTemplateFromGit(repoUrl, branch = 'main') {
76
+ const gitInfo = parseGitUrl(repoUrl);
77
+ const cacheDir = getTemplateCacheDir();
78
+ const templateCachePath = path.join(cacheDir, gitInfo.cacheKey.replace(/\//g, '_'));
79
+
80
+ // 检查是否已经缓存
81
+ if (fs.existsSync(templateCachePath)) {
82
+ try {
83
+ // 更新缓存
84
+ const cwd = process.cwd();
85
+ try {
86
+ execSync('git fetch', { cwd: templateCachePath, stdio: 'ignore' });
87
+ execSync(`git checkout ${branch}`, { cwd: templateCachePath, stdio: 'ignore' });
88
+ execSync('git pull', { cwd: templateCachePath, stdio: 'ignore' });
89
+ log.info(`使用缓存的模板: ${gitInfo.cacheKey}`);
90
+ return templateCachePath;
91
+ } catch (e) {
92
+ // 如果更新失败,删除缓存重新下载
93
+ fs.removeSync(templateCachePath);
94
+ }
95
+ } catch (e) {
96
+ // 如果更新失败,删除缓存重新下载
97
+ fs.removeSync(templateCachePath);
98
+ }
99
+ }
100
+
101
+ // 检查 Git 是否可用
102
+ if (!checkGitAvailable()) {
103
+ throw new Error('Git 未安装或不在 PATH 中,请先安装 Git');
104
+ }
105
+
106
+ // 克隆仓库
107
+ try {
108
+ log.info(`正在下载模板: ${gitInfo.cacheKey}...`);
109
+ execSync(`git clone -b ${branch} --depth 1 ${gitInfo.url} "${templateCachePath}"`, {
110
+ stdio: 'pipe',
111
+ });
112
+ log.success(`模板下载成功: ${gitInfo.cacheKey}`);
113
+ return templateCachePath;
114
+ } catch (e) {
115
+ // 如果指定分支失败,尝试默认分支
116
+ if (branch !== 'main' && branch !== 'master') {
117
+ log.warn(`分支 ${branch} 不存在,尝试使用默认分支`);
118
+ if (fs.existsSync(templateCachePath)) {
119
+ fs.removeSync(templateCachePath);
120
+ }
121
+ try {
122
+ execSync(`git clone --depth 1 ${gitInfo.url} "${templateCachePath}"`, {
123
+ stdio: 'pipe',
124
+ });
125
+ return templateCachePath;
126
+ } catch (e2) {
127
+ throw new Error(`下载模板失败: ${e2.message}`);
128
+ }
129
+ }
130
+ throw new Error(`下载模板失败: ${e.message}`);
131
+ }
132
+ }
133
+
134
+ /**
135
+ * 安装远程模板到本地
136
+ */
137
+ async function installRemoteTemplate(repoUrl, branch = 'main', templateName = null) {
138
+ const gitInfo = parseGitUrl(repoUrl);
139
+
140
+ // 如果没有指定模板名,使用仓库名
141
+ if (!templateName) {
142
+ templateName = gitInfo.repo;
143
+ }
144
+
145
+ // 下载模板
146
+ const downloadedPath = await downloadTemplateFromGit(repoUrl, branch);
147
+
148
+ // 检查是否有 template.json
149
+ const templateJsonPath = path.join(downloadedPath, 'template.json');
150
+ if (!fs.existsSync(templateJsonPath)) {
151
+ // 如果没有 template.json,检查是否有 files 目录
152
+ const filesDir = path.join(downloadedPath, 'files');
153
+ if (!fs.existsSync(filesDir)) {
154
+ throw new Error('模板格式不正确:缺少 template.json 或 files 目录');
155
+ }
156
+ }
157
+
158
+ // 复制到本地模板目录
159
+ const { getTemplatesDir } = require('./utils');
160
+ const templatesDir = getTemplatesDir();
161
+ const targetPath = path.join(templatesDir, templateName);
162
+
163
+ if (fs.existsSync(targetPath)) {
164
+ log.warn(`模板 ${templateName} 已存在,将被覆盖`);
165
+ fs.removeSync(targetPath);
166
+ }
167
+
168
+ fs.copySync(downloadedPath, targetPath);
169
+ log.success(`模板已安装: ${templateName}`);
170
+
171
+ return targetPath;
172
+ }
173
+
174
+ module.exports = {
175
+ downloadTemplateFromGit,
176
+ installRemoteTemplate,
177
+ parseGitUrl,
178
+ getTemplateCacheDir,
179
+ };
@@ -0,0 +1,174 @@
1
+ const fs = require('fs-extra');
2
+ const path = require('path');
3
+ const { getTemplatesDir, log } = require('./utils');
4
+
5
+ /**
6
+ * 获取所有模板列表
7
+ */
8
+ function listTemplates(shouldPrint = true) {
9
+ const templatesDir = getTemplatesDir();
10
+
11
+ if (!fs.existsSync(templatesDir)) {
12
+ if (shouldPrint) {
13
+ log.warn(`模板目录不存在: ${templatesDir}`);
14
+ log.info('请先创建 templates 目录并添加模板');
15
+ }
16
+ return [];
17
+ }
18
+
19
+ const items = fs.readdirSync(templatesDir, { withFileTypes: true });
20
+ const templates = items
21
+ .filter((item) => item.isDirectory())
22
+ .map((item) => {
23
+ const templatePath = path.join(templatesDir, item.name);
24
+ const configPath = path.join(templatePath, 'template.json');
25
+
26
+ let config = {};
27
+ if (fs.existsSync(configPath)) {
28
+ try {
29
+ config = fs.readJsonSync(configPath);
30
+ } catch (e) {
31
+ // 忽略配置读取错误
32
+ }
33
+ }
34
+
35
+ return {
36
+ name: item.name,
37
+ path: templatePath,
38
+ config,
39
+ };
40
+ });
41
+
42
+ if (shouldPrint) {
43
+ if (templates.length === 0) {
44
+ log.warn('暂无可用模板');
45
+ return [];
46
+ }
47
+
48
+ console.log('\n可用模板列表:\n');
49
+ templates.forEach((template, index) => {
50
+ const desc = template.config.description || '无描述';
51
+ const version = template.config.version || '1.0.0';
52
+ console.log(` ${index + 1}. ${template.name} (v${version})`);
53
+ console.log(` ${desc}\n`);
54
+ });
55
+ }
56
+
57
+ return templates;
58
+ }
59
+
60
+ /**
61
+ * 获取模板信息
62
+ */
63
+ function getTemplateInfo(templateName) {
64
+ const templatesDir = getTemplatesDir();
65
+ const templatePath = path.join(templatesDir, templateName);
66
+
67
+ if (!fs.existsSync(templatePath)) {
68
+ log.error(`模板不存在: ${templateName}`);
69
+ return null;
70
+ }
71
+
72
+ const configPath = path.join(templatePath, 'template.json');
73
+ let config = {};
74
+
75
+ if (fs.existsSync(configPath)) {
76
+ try {
77
+ config = fs.readJsonSync(configPath);
78
+ } catch (e) {
79
+ log.error(`读取模板配置失败: ${e.message}`);
80
+ return null;
81
+ }
82
+ } else {
83
+ log.warn('模板配置文件不存在');
84
+ }
85
+
86
+ console.log(`\n模板信息: ${templateName}\n`);
87
+ console.log(` 名称: ${config.name || templateName}`);
88
+ console.log(` 版本: ${config.version || '1.0.0'}`);
89
+ console.log(` 描述: ${config.description || '无描述'}`);
90
+
91
+ if (config.variables && Object.keys(config.variables).length > 0) {
92
+ console.log(`\n 变量:`);
93
+ Object.entries(config.variables).forEach(([key, value]) => {
94
+ const type = value.type || 'string';
95
+ const desc = value.message || value.description || '';
96
+ const defaultValue = value.default !== undefined ? ` (默认: ${value.default})` : '';
97
+ console.log(` - ${key} (${type})${defaultValue}: ${desc}`);
98
+ });
99
+ }
100
+
101
+ console.log('');
102
+ return config;
103
+ }
104
+
105
+ /**
106
+ * 获取模板配置
107
+ */
108
+ function getTemplateConfig(templateName) {
109
+ const templatesDir = getTemplatesDir();
110
+ const templatePath = path.join(templatesDir, templateName);
111
+
112
+ if (!fs.existsSync(templatePath)) {
113
+ // 如果本地不存在,尝试检查是否是远程模板格式
114
+ // 格式: owner/repo 或完整的 Git URL
115
+ if (templateName.includes('/') || templateName.includes('://') || templateName.includes('@')) {
116
+ throw new Error(`模板不存在: ${templateName}\n提示: 使用 'ylyx install ${templateName}' 安装远程模板`);
117
+ }
118
+ throw new Error(`模板不存在: ${templateName}`);
119
+ }
120
+
121
+ const configPath = path.join(templatePath, 'template.json');
122
+ let config = {};
123
+
124
+ if (fs.existsSync(configPath)) {
125
+ try {
126
+ config = fs.readJsonSync(configPath);
127
+ } catch (e) {
128
+ throw new Error(`读取模板配置失败: ${e.message}`);
129
+ }
130
+ }
131
+
132
+ return {
133
+ ...config,
134
+ path: templatePath,
135
+ };
136
+ }
137
+
138
+ /**
139
+ * 添加模板(复制模板目录)
140
+ */
141
+ function addTemplate(templateName, sourcePath) {
142
+ const templatesDir = getTemplatesDir();
143
+ const targetPath = path.join(templatesDir, templateName);
144
+
145
+ // 确保模板目录存在
146
+ fs.ensureDirSync(templatesDir);
147
+
148
+ // 检查源路径是否存在
149
+ if (!fs.existsSync(sourcePath)) {
150
+ log.error(`源路径不存在: ${sourcePath}`);
151
+ return;
152
+ }
153
+
154
+ // 检查目标路径是否已存在
155
+ if (fs.existsSync(targetPath)) {
156
+ log.warn(`模板已存在: ${templateName}`);
157
+ log.info('如需更新,请先删除现有模板');
158
+ return;
159
+ }
160
+
161
+ try {
162
+ fs.copySync(sourcePath, targetPath);
163
+ log.success(`模板添加成功: ${templateName}`);
164
+ } catch (e) {
165
+ log.error(`添加模板失败: ${e.message}`);
166
+ }
167
+ }
168
+
169
+ module.exports = {
170
+ listTemplates,
171
+ getTemplateInfo,
172
+ getTemplateConfig,
173
+ addTemplate,
174
+ };
package/lib/utils.js ADDED
@@ -0,0 +1,134 @@
1
+ const path = require('path');
2
+ const fs = require('fs-extra');
3
+ const chalk = require('chalk');
4
+
5
+ /**
6
+ * 转换为驼峰命名
7
+ */
8
+ function camelCase(str) {
9
+ return str
10
+ .replace(/(?:^\w|[A-Z]|\b\w)/g, (word, index) => {
11
+ return index === 0 ? word.toLowerCase() : word.toUpperCase();
12
+ })
13
+ .replace(/\s+/g, '');
14
+ }
15
+
16
+ /**
17
+ * 转换为帕斯卡命名
18
+ */
19
+ function pascalCase(str) {
20
+ return str
21
+ .replace(/(?:^\w|[A-Z]|\b\w)/g, (word) => {
22
+ return word.toUpperCase();
23
+ })
24
+ .replace(/\s+/g, '');
25
+ }
26
+
27
+ /**
28
+ * 转换为短横线命名
29
+ */
30
+ function kebabCase(str) {
31
+ return str
32
+ .replace(/([a-z])([A-Z])/g, '$1-$2')
33
+ .replace(/[\s_]+/g, '-')
34
+ .toLowerCase();
35
+ }
36
+
37
+ /**
38
+ * 转换为下划线命名
39
+ */
40
+ function snakeCase(str) {
41
+ return str
42
+ .replace(/([a-z])([A-Z])/g, '$1_$2')
43
+ .replace(/[\s-]+/g, '_')
44
+ .toLowerCase();
45
+ }
46
+
47
+ /**
48
+ * 获取模板目录路径
49
+ */
50
+ function getTemplatesDir() {
51
+ const configPath = path.join(process.cwd(), '.ylyxrc.json');
52
+ if (fs.existsSync(configPath)) {
53
+ const config = fs.readJsonSync(configPath);
54
+ if (config.templatesDir) {
55
+ return path.resolve(process.cwd(), config.templatesDir);
56
+ }
57
+ }
58
+
59
+ // 默认使用项目内的 templates 目录
60
+ return path.join(__dirname, '../templates');
61
+ }
62
+
63
+ /**
64
+ * 获取输出目录
65
+ */
66
+ function getOutputDir(customOutputDir) {
67
+ if (customOutputDir) {
68
+ return path.resolve(process.cwd(), customOutputDir);
69
+ }
70
+
71
+ const configPath = path.join(process.cwd(), '.ylyxrc.json');
72
+ if (fs.existsSync(configPath)) {
73
+ const config = fs.readJsonSync(configPath);
74
+ if (config.outputDir) {
75
+ return path.resolve(process.cwd(), config.outputDir);
76
+ }
77
+ }
78
+
79
+ return process.cwd();
80
+ }
81
+
82
+ /**
83
+ * 注册 Handlebars 辅助函数
84
+ */
85
+ function registerHandlebarsHelpers(handlebars) {
86
+ handlebars.registerHelper('camelCase', (str) => {
87
+ return camelCase(str);
88
+ });
89
+
90
+ handlebars.registerHelper('pascalCase', (str) => {
91
+ return pascalCase(str);
92
+ });
93
+
94
+ handlebars.registerHelper('kebabCase', (str) => {
95
+ return kebabCase(str);
96
+ });
97
+
98
+ handlebars.registerHelper('snakeCase', (str) => {
99
+ return snakeCase(str);
100
+ });
101
+
102
+ handlebars.registerHelper('upperCase', (str) => {
103
+ return String(str).toUpperCase();
104
+ });
105
+
106
+ handlebars.registerHelper('lowerCase', (str) => {
107
+ return String(str).toLowerCase();
108
+ });
109
+
110
+ handlebars.registerHelper('eq', (a, b) => {
111
+ return a === b;
112
+ });
113
+ }
114
+
115
+ /**
116
+ * 日志输出
117
+ */
118
+ const log = {
119
+ success: (msg) => console.log(chalk.green('✓'), msg),
120
+ error: (msg) => console.error(chalk.red('✗'), msg),
121
+ info: (msg) => console.log(chalk.blue('ℹ'), msg),
122
+ warn: (msg) => console.log(chalk.yellow('⚠'), msg),
123
+ };
124
+
125
+ module.exports = {
126
+ camelCase,
127
+ pascalCase,
128
+ kebabCase,
129
+ snakeCase,
130
+ getTemplatesDir,
131
+ getOutputDir,
132
+ registerHandlebarsHelpers,
133
+ log,
134
+ };
package/package.json ADDED
@@ -0,0 +1,56 @@
1
+ {
2
+ "name": "ylyx-cli",
3
+ "version": "1.0.0",
4
+ "description": "公司内部代码生成模板脚手架工具,支持快速生成项目初始结构和代码模板",
5
+ "main": "lib/index.js",
6
+ "bin": {
7
+ "ylyx": "./bin/ylyx.js",
8
+ "ylyx-cli": "./bin/ylyx.js"
9
+ },
10
+ "files": [
11
+ "bin",
12
+ "lib",
13
+ "templates",
14
+ "README.md"
15
+ ],
16
+ "scripts": {
17
+ "start": "node bin/ylyx.js",
18
+ "test": "echo \"Error: no test specified\" && exit 1"
19
+ },
20
+ "keywords": [
21
+ "cli",
22
+ "scaffold",
23
+ "code-generator",
24
+ "template",
25
+ "generator",
26
+ "scaffolding",
27
+ "boilerplate",
28
+ "project-template",
29
+ "vue",
30
+ "react"
31
+ ],
32
+ "author": "YLYX",
33
+ "license": "ISC",
34
+ "repository": {
35
+ "type": "git",
36
+ "url": "git+https://github.com/your-org/ylyx-cli.git"
37
+ },
38
+ "bugs": {
39
+ "url": "https://github.com/your-org/ylyx-cli/issues"
40
+ },
41
+ "homepage": "https://github.com/your-org/ylyx-cli#readme",
42
+ "engines": {
43
+ "node": ">=12.0.0"
44
+ },
45
+ "dependencies": {
46
+ "commander": "^11.1.0",
47
+ "inquirer": "^8.2.6",
48
+ "chalk": "^4.1.2",
49
+ "fs-extra": "^11.2.0",
50
+ "handlebars": "^4.7.8",
51
+ "glob": "^10.3.10"
52
+ },
53
+ "devDependencies": {
54
+ "@types/node": "^20.10.0"
55
+ }
56
+ }
@@ -0,0 +1,23 @@
1
+ # 1
2
+
3
+ 这是一个使用 YLYX CLI 生成的 React 项目。
4
+
5
+ ## 开始使用
6
+
7
+ ### 安装依赖
8
+
9
+ \`\`\`bash
10
+ npm install
11
+ \`\`\`
12
+
13
+ ### 启动开发服务器
14
+
15
+ \`\`\`bash
16
+ npm start
17
+ \`\`\`
18
+
19
+ ### 构建生产版本
20
+
21
+ \`\`\`bash
22
+ npm run build
23
+ \`\`\`
@@ -0,0 +1,29 @@
1
+ {
2
+ "name": "1",
3
+ "version": "1.0.0",
4
+ "description": "",
5
+ "main": "index.js",
6
+ "scripts": {
7
+ "start": "react-scripts start",
8
+ "build": "react-scripts build",
9
+ "test": "react-scripts test",
10
+ "eject": "react-scripts eject"
11
+ },
12
+ "dependencies": {
13
+ "react": "^18.2.0",
14
+ "react-dom": "^18.2.0",
15
+ "react-scripts": "5.0.1"
16
+ },
17
+ "browserslist": {
18
+ "production": [
19
+ ">0.2%",
20
+ "not dead",
21
+ "not op_mini all"
22
+ ],
23
+ "development": [
24
+ "last 1 chrome version",
25
+ "last 1 firefox version",
26
+ "last 1 safari version"
27
+ ]
28
+ }
29
+ }
@@ -0,0 +1,11 @@
1
+ <!DOCTYPE html>
2
+ <html lang="zh-CN">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <title>1</title>
7
+ </head>
8
+ <body>
9
+ <div id="root"></div>
10
+ </body>
11
+ </html>
@@ -0,0 +1,15 @@
1
+ .App {
2
+ text-align: center;
3
+ }
4
+
5
+ .App-header {
6
+ background-color: #282c34;
7
+ padding: 20px;
8
+ color: white;
9
+ min-height: 100vh;
10
+ display: flex;
11
+ flex-direction: column;
12
+ align-items: center;
13
+ justify-content: center;
14
+ font-size: calc(10px + 2vmin);
15
+ }
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ import './App.css';
3
+
4
+ function App() {
5
+ return (
6
+ <div className="App">
7
+ <header className="App-header">
8
+ <h1>欢迎使用 1</h1>
9
+ <p>这是一个 React 项目模板</p>
10
+ </header>
11
+ </div>
12
+ );
13
+ }
14
+
15
+ export default App;
@@ -0,0 +1,10 @@
1
+ body {
2
+ margin: 0;
3
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;
4
+ -webkit-font-smoothing: antialiased;
5
+ -moz-osx-font-smoothing: grayscale;
6
+ }
7
+
8
+ code {
9
+ font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', monospace;
10
+ }
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import ReactDOM from 'react-dom/client';
3
+ import './index.css';
4
+ import App from './App';
5
+
6
+ const root = ReactDOM.createRoot(document.getElementById('root'));
7
+ root.render(
8
+ <React.StrictMode>
9
+ <App />
10
+ </React.StrictMode>
11
+ );
@@ -0,0 +1,12 @@
1
+ {
2
+ "name": "react-app",
3
+ "description": "React 项目初始模板",
4
+ "version": "1.0.0",
5
+ "variables": {
6
+ "projectName": {
7
+ "type": "input",
8
+ "message": "请输入项目名称",
9
+ "default": "my-react-app"
10
+ }
11
+ }
12
+ }
@@ -0,0 +1,5 @@
1
+ .container {
2
+ display: flex;
3
+ flex-direction: column;
4
+ }
5
+