create-koa-boot 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 (935) hide show
  1. package/ai/generators.js +668 -0
  2. package/ai/metadata.js +107 -0
  3. package/ai/schema-parser.js +127 -0
  4. package/ai.js +95 -0
  5. package/bin/create-koa-boot.js +3 -0
  6. package/index.js +185 -0
  7. package/package.json +26 -0
  8. package/templates/.env.example +81 -0
  9. package/templates/AGENTS.md +60 -0
  10. package/templates/example/AGENTS.md +60 -0
  11. package/templates/example/backend/.env.example +81 -0
  12. package/templates/example/backend/package.json +38 -0
  13. package/templates/example/backend/prisma/schema.prisma +353 -0
  14. package/templates/example/backend/scripts/fix-routes-imports.js +23 -0
  15. package/templates/example/backend/scripts/switch-runtime-local.mjs +39 -0
  16. package/templates/example/backend/src/ai-tools.ts +32 -0
  17. package/templates/example/backend/src/app.ts +75 -0
  18. package/templates/example/backend/src/business/ai/ai.controller.ts +38 -0
  19. package/templates/example/backend/src/business/ai/ai.model.ts +37 -0
  20. package/templates/example/backend/src/business/ai/ai.service.ts +137 -0
  21. package/templates/example/backend/src/business/demo/demo.controller.ts +63 -0
  22. package/templates/example/backend/src/business/demo/demo.model.ts +93 -0
  23. package/templates/example/backend/src/business/demo/demo.service.ts +54 -0
  24. package/templates/example/backend/src/business/notification/channel.ts +273 -0
  25. package/templates/example/backend/src/business/notification/notification.controller.ts +175 -0
  26. package/templates/example/backend/src/business/notification/notification.model.ts +22 -0
  27. package/templates/example/backend/src/business/notification/notification.service.ts +579 -0
  28. package/templates/example/backend/src/business/notification/receivers.ts +44 -0
  29. package/templates/example/backend/src/business/notification/templates.ts +72 -0
  30. package/templates/example/backend/src/business/sysConfig/sysConfig.controller.ts +87 -0
  31. package/templates/example/backend/src/business/sysConfig/sysConfig.model.ts +44 -0
  32. package/templates/example/backend/src/business/sysConfig/sysConfig.service.ts +32 -0
  33. package/templates/example/backend/src/common/decorators.ts +1 -0
  34. package/templates/example/backend/src/common/index.ts +8 -0
  35. package/templates/example/backend/src/common/types.ts +51 -0
  36. package/templates/example/backend/src/config/database.ts +4 -0
  37. package/templates/example/backend/src/config/index.ts +2 -0
  38. package/templates/example/backend/src/index.ts +44 -0
  39. package/templates/example/backend/src/init/menu-seed.ts +77 -0
  40. package/templates/example/backend/src/utils/aiClient.ts +1 -0
  41. package/templates/example/backend/src/utils/banner.ts +1 -0
  42. package/templates/example/backend/src/utils/emailClient.ts +1 -0
  43. package/templates/example/backend/src/utils/logger.ts +1 -0
  44. package/templates/example/backend/src/utils/redisClient.ts +1 -0
  45. package/templates/example/backend/src/utils/smsClient.ts +1 -0
  46. package/templates/example/backend/src/utils/unipushClient.ts +1 -0
  47. package/templates/example/backend/src/utils/wecom.ts +1 -0
  48. package/templates/example/backend/tsconfig.build.json +11 -0
  49. package/templates/example/backend/tsconfig.json +21 -0
  50. package/templates/example/backend/tsoa.json +29 -0
  51. package/templates/example/frontend/.prettierignore +7 -0
  52. package/templates/example/frontend/.prettierrc +11 -0
  53. package/templates/example/frontend/.vscode/extensions.json +3 -0
  54. package/templates/example/frontend/README.md +5 -0
  55. package/templates/example/frontend/eslint.config.js +53 -0
  56. package/templates/example/frontend/index.html +13 -0
  57. package/templates/example/frontend/package.json +45 -0
  58. package/templates/example/frontend/public/geo/100000_full.json +1 -0
  59. package/templates/example/frontend/public/geo/520000_district.json +1 -0
  60. package/templates/example/frontend/public/geo/520000_full.json +1 -0
  61. package/templates/example/frontend/public/logo.ico +0 -0
  62. package/templates/example/frontend/public/vite.svg +1 -0
  63. package/templates/example/frontend/src/App.vue +45 -0
  64. package/templates/example/frontend/src/api/ai.ts +39 -0
  65. package/templates/example/frontend/src/api/auth.ts +25 -0
  66. package/templates/example/frontend/src/api/business/demo.ts +57 -0
  67. package/templates/example/frontend/src/api/business/logistics.ts +167 -0
  68. package/templates/example/frontend/src/api/business/notification.ts +54 -0
  69. package/templates/example/frontend/src/api/business/sysConfig.ts +54 -0
  70. package/templates/example/frontend/src/api/common.ts +23 -0
  71. package/templates/example/frontend/src/api/index.ts +31 -0
  72. package/templates/example/frontend/src/api/service.ts +47 -0
  73. package/templates/example/frontend/src/api/system/department.ts +40 -0
  74. package/templates/example/frontend/src/api/system/dict.ts +124 -0
  75. package/templates/example/frontend/src/api/system/fileUpload.ts +64 -0
  76. package/templates/example/frontend/src/api/system/log.ts +63 -0
  77. package/templates/example/frontend/src/api/system/menu.ts +50 -0
  78. package/templates/example/frontend/src/api/system/permission.ts +43 -0
  79. package/templates/example/frontend/src/api/system/role.ts +61 -0
  80. package/templates/example/frontend/src/api/system/user.ts +70 -0
  81. package/templates/example/frontend/src/assets/koa-boot-1.png +0 -0
  82. package/templates/example/frontend/src/assets/koa-boot-2.png +0 -0
  83. package/templates/example/frontend/src/assets/koa-boot-3.png +0 -0
  84. package/templates/example/frontend/src/assets/vue.svg +1 -0
  85. package/templates/example/frontend/src/components/AiAssistant.vue +640 -0
  86. package/templates/example/frontend/src/components/FileUpload.vue +408 -0
  87. package/templates/example/frontend/src/components/ImageUpload.vue +324 -0
  88. package/templates/example/frontend/src/components/MapView.vue +567 -0
  89. package/templates/example/frontend/src/components/MessageCenter.vue +344 -0
  90. package/templates/example/frontend/src/directives/permission.ts +117 -0
  91. package/templates/example/frontend/src/layout/index.vue +300 -0
  92. package/templates/example/frontend/src/main.ts +29 -0
  93. package/templates/example/frontend/src/router/componentMap.ts +136 -0
  94. package/templates/example/frontend/src/router/generateRoutes.ts +123 -0
  95. package/templates/example/frontend/src/router/index.ts +181 -0
  96. package/templates/example/frontend/src/stores/index.ts +5 -0
  97. package/templates/example/frontend/src/stores/user.ts +219 -0
  98. package/templates/example/frontend/src/style.css +79 -0
  99. package/templates/example/frontend/src/styles/index.scss +284 -0
  100. package/templates/example/frontend/src/types/index.ts +135 -0
  101. package/templates/example/frontend/src/utils/dateFormat.ts +39 -0
  102. package/templates/example/frontend/src/utils/echarts.ts +49 -0
  103. package/templates/example/frontend/src/views/ModulePlaceholder.vue +16 -0
  104. package/templates/example/frontend/src/views/ParentView.vue +19 -0
  105. package/templates/example/frontend/src/views/business/demo/index.vue +201 -0
  106. package/templates/example/frontend/src/views/business/notification/index.vue +179 -0
  107. package/templates/example/frontend/src/views/business/sysConfig/index.vue +140 -0
  108. package/templates/example/frontend/src/views/dashboard/index.vue +206 -0
  109. package/templates/example/frontend/src/views/login/index.vue +186 -0
  110. package/templates/example/frontend/src/views/system/department/index.vue +528 -0
  111. package/templates/example/frontend/src/views/system/dictItem/index.vue +405 -0
  112. package/templates/example/frontend/src/views/system/dictType/index.vue +318 -0
  113. package/templates/example/frontend/src/views/system/index.vue +30 -0
  114. package/templates/example/frontend/src/views/system/menu/index.vue +509 -0
  115. package/templates/example/frontend/src/views/system/permission/index.vue +270 -0
  116. package/templates/example/frontend/src/views/system/role/index.vue +590 -0
  117. package/templates/example/frontend/src/views/system/setting/index.vue +40 -0
  118. package/templates/example/frontend/src/views/system/user/index.vue +414 -0
  119. package/templates/example/frontend/src/vite-env.d.ts +6 -0
  120. package/templates/example/frontend/tsconfig.app.json +24 -0
  121. package/templates/example/frontend/tsconfig.json +7 -0
  122. package/templates/example/frontend/tsconfig.node.json +26 -0
  123. package/templates/example/frontend/vite.config.ts +23 -0
  124. package/templates/example/frontend/vitest.config.ts +30 -0
  125. package/templates/example/uniapp/.editorconfig +15 -0
  126. package/templates/example/uniapp/.eslintrc.js +0 -0
  127. package/templates/example/uniapp/.hbuilderx/launch.json +20 -0
  128. package/templates/example/uniapp/.prettierrc +13 -0
  129. package/templates/example/uniapp/App.vue +270 -0
  130. package/templates/example/uniapp/README.md +210 -0
  131. package/templates/example/uniapp/components/MapPicker.vue +793 -0
  132. package/templates/example/uniapp/components/MapView.vue +219 -0
  133. package/templates/example/uniapp/components/NavBar.vue +147 -0
  134. package/templates/example/uniapp/components/PageHeader.vue +153 -0
  135. package/templates/example/uniapp/components/TabBar.vue +116 -0
  136. package/templates/example/uniapp/components/empty-state.vue +82 -0
  137. package/templates/example/uniapp/components/loading-view.vue +77 -0
  138. package/templates/example/uniapp/composables/index.js +7 -0
  139. package/templates/example/uniapp/composables/useNetwork.js +56 -0
  140. package/templates/example/uniapp/composables/usePagination.js +96 -0
  141. package/templates/example/uniapp/composables/useRequest.js +73 -0
  142. package/templates/example/uniapp/config/enums.js +14 -0
  143. package/templates/example/uniapp/config/index.js +44 -0
  144. package/templates/example/uniapp/config/roleMenus.js +150 -0
  145. package/templates/example/uniapp/http/ajax.js +144 -0
  146. package/templates/example/uniapp/http/requestEnhancer.js +109 -0
  147. package/templates/example/uniapp/index.html +20 -0
  148. package/templates/example/uniapp/lint-staged.config.js +13 -0
  149. package/templates/example/uniapp/locales/en.js +48 -0
  150. package/templates/example/uniapp/locales/index.js +82 -0
  151. package/templates/example/uniapp/locales/zh-CN.js +48 -0
  152. package/templates/example/uniapp/main.js +18 -0
  153. package/templates/example/uniapp/manifest.json +99 -0
  154. package/templates/example/uniapp/mixins/unreadBadge.js +77 -0
  155. package/templates/example/uniapp/mock/index.js +92 -0
  156. package/templates/example/uniapp/package.json +49 -0
  157. package/templates/example/uniapp/pages/demo/detail.vue +523 -0
  158. package/templates/example/uniapp/pages/demo/index.vue +399 -0
  159. package/templates/example/uniapp/pages/home/index.vue +244 -0
  160. package/templates/example/uniapp/pages/index/index.vue +182 -0
  161. package/templates/example/uniapp/pages/login/index.vue +457 -0
  162. package/templates/example/uniapp/pages/message/index.vue +1052 -0
  163. package/templates/example/uniapp/pages/mine/about/index.vue +234 -0
  164. package/templates/example/uniapp/pages/mine/help/index.vue +607 -0
  165. package/templates/example/uniapp/pages/mine/index.vue +351 -0
  166. package/templates/example/uniapp/pages/mine/profile/index.vue +381 -0
  167. package/templates/example/uniapp/pages/mine/security/index.vue +336 -0
  168. package/templates/example/uniapp/pages.json +89 -0
  169. package/templates/example/uniapp/services/index.js +22 -0
  170. package/templates/example/uniapp/services/mock/goods.js +73 -0
  171. package/templates/example/uniapp/services/mock/index.js +1 -0
  172. package/templates/example/uniapp/services/mock/orders.js +153 -0
  173. package/templates/example/uniapp/services/modules/ai.js +17 -0
  174. package/templates/example/uniapp/services/modules/auth.js +76 -0
  175. package/templates/example/uniapp/services/modules/common.js +11 -0
  176. package/templates/example/uniapp/services/modules/demo.js +50 -0
  177. package/templates/example/uniapp/services/modules/fileUpload.js +261 -0
  178. package/templates/example/uniapp/services/modules/message.js +77 -0
  179. package/templates/example/uniapp/static/bg.png +0 -0
  180. package/templates/example/uniapp/static/koa-boot-1.png +0 -0
  181. package/templates/example/uniapp/static/koa-boot-2.png +0 -0
  182. package/templates/example/uniapp/static/koa-boot-3.png +0 -0
  183. package/templates/example/uniapp/static/location.png +0 -0
  184. package/templates/example/uniapp/static/tab-bar/icon-home.png +0 -0
  185. package/templates/example/uniapp/static/tab-bar/icon-home2.png +0 -0
  186. package/templates/example/uniapp/static/upload/icon_close.png +0 -0
  187. package/templates/example/uniapp/static/upload/icon_file.png +0 -0
  188. package/templates/example/uniapp/static/upload/icon_image.png +0 -0
  189. package/templates/example/uniapp/static/upload/icon_upload.png +0 -0
  190. package/templates/example/uniapp/static/upload/icon_video.png +0 -0
  191. package/templates/example/uniapp/stores/cart.js +126 -0
  192. package/templates/example/uniapp/stores/index.js +5 -0
  193. package/templates/example/uniapp/stores/user.js +272 -0
  194. package/templates/example/uniapp/styles/mixins.scss +84 -0
  195. package/templates/example/uniapp/styles/variables.scss +66 -0
  196. package/templates/example/uniapp/uni.scss +28 -0
  197. package/templates/example/uniapp/uni_modules/chuizi-file-upload/changelog.md +51 -0
  198. package/templates/example/uniapp/uni_modules/chuizi-file-upload/components/chuizi-file-upload/chuizi-file-upload.vue +447 -0
  199. package/templates/example/uniapp/uni_modules/chuizi-file-upload/components/chuizi-file-upload/uploadFile/icon_close.png +0 -0
  200. package/templates/example/uniapp/uni_modules/chuizi-file-upload/components/chuizi-file-upload/uploadFile/icon_file.png +0 -0
  201. package/templates/example/uniapp/uni_modules/chuizi-file-upload/components/chuizi-file-upload/uploadFile/icon_image.png +0 -0
  202. package/templates/example/uniapp/uni_modules/chuizi-file-upload/components/chuizi-file-upload/uploadFile/icon_upload.png +0 -0
  203. package/templates/example/uniapp/uni_modules/chuizi-file-upload/components/chuizi-file-upload/uploadFile/icon_video.png +0 -0
  204. package/templates/example/uniapp/uni_modules/chuizi-file-upload/components/xe-upload/xe-upload.vue +321 -0
  205. package/templates/example/uniapp/uni_modules/chuizi-file-upload/package.json +82 -0
  206. package/templates/example/uniapp/uni_modules/chuizi-file-upload/readme.md +1 -0
  207. package/templates/example/uniapp/uni_modules/chuizi-file-upload/tools/apis.js +177 -0
  208. package/templates/example/uniapp/uni_modules/chuizi-file-upload/tools/tools.js +180 -0
  209. package/templates/example/uniapp/uni_modules/ezuikit-js/CHANGELOG.md +200 -0
  210. package/templates/example/uniapp/uni_modules/ezuikit-js/README.md +595 -0
  211. package/templates/example/uniapp/uni_modules/ezuikit-js/ezuikit.js +130 -0
  212. package/templates/example/uniapp/uni_modules/ezuikit-js/ezuikit_static/PlayCtrlWasm/playCtrl1/HasSIMD/Decoder.js +169 -0
  213. package/templates/example/uniapp/uni_modules/ezuikit-js/ezuikit_static/PlayCtrlWasm/playCtrl1/NoSIMD/Decoder.js +169 -0
  214. package/templates/example/uniapp/uni_modules/ezuikit-js/ezuikit_static/PlayCtrlWasm/playCtrl3/hasWorker/HasSIMD/Decoder.js +21 -0
  215. package/templates/example/uniapp/uni_modules/ezuikit-js/ezuikit_static/PlayCtrlWasm/playCtrl3/hasWorker/HasSIMD/Decoder.wasm +0 -0
  216. package/templates/example/uniapp/uni_modules/ezuikit-js/ezuikit_static/PlayCtrlWasm/playCtrl3/hasWorker/HasSIMD/Decoder.worker.js +1 -0
  217. package/templates/example/uniapp/uni_modules/ezuikit-js/ezuikit_static/PlayCtrlWasm/playCtrl3/hasWorker/NoSIMD/Decoder.js +21 -0
  218. package/templates/example/uniapp/uni_modules/ezuikit-js/ezuikit_static/PlayCtrlWasm/playCtrl3/hasWorker/NoSIMD/Decoder.wasm +0 -0
  219. package/templates/example/uniapp/uni_modules/ezuikit-js/ezuikit_static/PlayCtrlWasm/playCtrl3/hasWorker/NoSIMD/Decoder.worker.js +1 -0
  220. package/templates/example/uniapp/uni_modules/ezuikit-js/ezuikit_static/PlayCtrlWasm/playCtrl3/noWorker/Decoder.js +21 -0
  221. package/templates/example/uniapp/uni_modules/ezuikit-js/ezuikit_static/PlayCtrlWasm/playCtrl3/noWorker/Decoder.wasm +0 -0
  222. package/templates/example/uniapp/uni_modules/ezuikit-js/ezuikit_static/css/component.css +1257 -0
  223. package/templates/example/uniapp/uni_modules/ezuikit-js/ezuikit_static/css/inspectTheme.css +354 -0
  224. package/templates/example/uniapp/uni_modules/ezuikit-js/ezuikit_static/css/theme.css +144 -0
  225. package/templates/example/uniapp/uni_modules/ezuikit-js/ezuikit_static/imgs/bg.png +0 -0
  226. package/templates/example/uniapp/uni_modules/ezuikit-js/ezuikit_static/imgs/bg.svg +33 -0
  227. package/templates/example/uniapp/uni_modules/ezuikit-js/ezuikit_static/imgs/empty.png +0 -0
  228. package/templates/example/uniapp/uni_modules/ezuikit-js/ezuikit_static/imgs/end.png +0 -0
  229. package/templates/example/uniapp/uni_modules/ezuikit-js/ezuikit_static/imgs/fallback.svg +52 -0
  230. package/templates/example/uniapp/uni_modules/ezuikit-js/ezuikit_static/imgs/start.png +0 -0
  231. package/templates/example/uniapp/uni_modules/ezuikit-js/ezuikit_static/rec/datepicker.en-US.js +19 -0
  232. package/templates/example/uniapp/uni_modules/ezuikit-js/ezuikit_static/rec/datepicker.js +1523 -0
  233. package/templates/example/uniapp/uni_modules/ezuikit-js/ezuikit_static/rec/datepicker.min.css +36 -0
  234. package/templates/example/uniapp/uni_modules/ezuikit-js/ezuikit_static/rec/datepicker.zh-CN.js +19 -0
  235. package/templates/example/uniapp/uni_modules/ezuikit-js/ezuikit_static/rec/jquery.min.js +2 -0
  236. package/templates/example/uniapp/uni_modules/ezuikit-js/ezuikit_static/speed/speed.css +158 -0
  237. package/templates/example/uniapp/uni_modules/ezuikit-js/ezuikit_static/talk/adapeter.js +5497 -0
  238. package/templates/example/uniapp/uni_modules/ezuikit-js/ezuikit_static/talk/janus.js +3505 -0
  239. package/templates/example/uniapp/uni_modules/ezuikit-js/ezuikit_static/talk/tts-v4.js +343 -0
  240. package/templates/example/uniapp/uni_modules/ezuikit-js/package.json +29 -0
  241. package/templates/example/uniapp/uni_modules/heyuan-chooseFile/changelog.md +7 -0
  242. package/templates/example/uniapp/uni_modules/heyuan-chooseFile/components/heyuan-chooseFile/heyuan-chooseFile.vue +188 -0
  243. package/templates/example/uniapp/uni_modules/heyuan-chooseFile/package.json +87 -0
  244. package/templates/example/uniapp/uni_modules/heyuan-chooseFile/readme.md +32 -0
  245. package/templates/example/uniapp/uni_modules/u-ajax/README.md +83 -0
  246. package/templates/example/uniapp/uni_modules/u-ajax/changelog.md +35 -0
  247. package/templates/example/uniapp/uni_modules/u-ajax/js_sdk/index.d.ts +103 -0
  248. package/templates/example/uniapp/uni_modules/u-ajax/js_sdk/index.js +14 -0
  249. package/templates/example/uniapp/uni_modules/u-ajax/js_sdk/lib/adapters/Fetcher.js +22 -0
  250. package/templates/example/uniapp/uni_modules/u-ajax/js_sdk/lib/adapters/http.js +16 -0
  251. package/templates/example/uniapp/uni_modules/u-ajax/js_sdk/lib/core/Ajax.js +72 -0
  252. package/templates/example/uniapp/uni_modules/u-ajax/js_sdk/lib/core/InterceptorManager.js +32 -0
  253. package/templates/example/uniapp/uni_modules/u-ajax/js_sdk/lib/core/dispatchRequest.js +29 -0
  254. package/templates/example/uniapp/uni_modules/u-ajax/js_sdk/lib/core/handleCancel.js +35 -0
  255. package/templates/example/uniapp/uni_modules/u-ajax/js_sdk/lib/defaults.js +16 -0
  256. package/templates/example/uniapp/uni_modules/u-ajax/js_sdk/lib/helpers/buildURL.js +83 -0
  257. package/templates/example/uniapp/uni_modules/u-ajax/js_sdk/lib/helpers/isCallback.js +8 -0
  258. package/templates/example/uniapp/uni_modules/u-ajax/js_sdk/lib/helpers/mergeConfig.js +41 -0
  259. package/templates/example/uniapp/uni_modules/u-ajax/js_sdk/lib/utils.js +77 -0
  260. package/templates/example/uniapp/uni_modules/u-ajax/package.json +74 -0
  261. package/templates/example/uniapp/uni_modules/uni-badge/changelog.md +33 -0
  262. package/templates/example/uniapp/uni_modules/uni-badge/components/uni-badge/uni-badge.vue +268 -0
  263. package/templates/example/uniapp/uni_modules/uni-badge/package.json +85 -0
  264. package/templates/example/uniapp/uni_modules/uni-badge/readme.md +10 -0
  265. package/templates/example/uniapp/uni_modules/uni-data-select/changelog.md +43 -0
  266. package/templates/example/uniapp/uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue +562 -0
  267. package/templates/example/uniapp/uni_modules/uni-data-select/package.json +88 -0
  268. package/templates/example/uniapp/uni_modules/uni-data-select/readme.md +8 -0
  269. package/templates/example/uniapp/uni_modules/uni-datetime-picker/changelog.md +168 -0
  270. package/templates/example/uniapp/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar-item.vue +177 -0
  271. package/templates/example/uniapp/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar.vue +947 -0
  272. package/templates/example/uniapp/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/en.json +22 -0
  273. package/templates/example/uniapp/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/index.js +8 -0
  274. package/templates/example/uniapp/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hans.json +22 -0
  275. package/templates/example/uniapp/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hant.json +22 -0
  276. package/templates/example/uniapp/uni_modules/uni-datetime-picker/components/uni-datetime-picker/time-picker.vue +940 -0
  277. package/templates/example/uniapp/uni_modules/uni-datetime-picker/components/uni-datetime-picker/uni-datetime-picker.vue +1064 -0
  278. package/templates/example/uniapp/uni_modules/uni-datetime-picker/components/uni-datetime-picker/util.js +421 -0
  279. package/templates/example/uniapp/uni_modules/uni-datetime-picker/package.json +88 -0
  280. package/templates/example/uniapp/uni_modules/uni-datetime-picker/readme.md +21 -0
  281. package/templates/example/uniapp/uni_modules/uni-easyinput/changelog.md +115 -0
  282. package/templates/example/uniapp/uni_modules/uni-easyinput/components/uni-easyinput/common.js +54 -0
  283. package/templates/example/uniapp/uni_modules/uni-easyinput/components/uni-easyinput/uni-easyinput.vue +676 -0
  284. package/templates/example/uniapp/uni_modules/uni-easyinput/package.json +88 -0
  285. package/templates/example/uniapp/uni_modules/uni-easyinput/readme.md +11 -0
  286. package/templates/example/uniapp/uni_modules/uni-fab/changelog.md +25 -0
  287. package/templates/example/uniapp/uni_modules/uni-fab/components/uni-fab/uni-fab.vue +491 -0
  288. package/templates/example/uniapp/uni_modules/uni-fab/package.json +85 -0
  289. package/templates/example/uniapp/uni_modules/uni-fab/readme.md +9 -0
  290. package/templates/example/uniapp/uni_modules/uni-forms/changelog.md +100 -0
  291. package/templates/example/uniapp/uni_modules/uni-forms/components/uni-forms/uni-forms.vue +404 -0
  292. package/templates/example/uniapp/uni_modules/uni-forms/components/uni-forms/utils.js +293 -0
  293. package/templates/example/uniapp/uni_modules/uni-forms/components/uni-forms/validate.js +486 -0
  294. package/templates/example/uniapp/uni_modules/uni-forms/components/uni-forms-item/uni-forms-item.vue +632 -0
  295. package/templates/example/uniapp/uni_modules/uni-forms/package.json +89 -0
  296. package/templates/example/uniapp/uni_modules/uni-forms/readme.md +23 -0
  297. package/templates/example/uniapp/uni_modules/uni-icons/changelog.md +42 -0
  298. package/templates/example/uniapp/uni_modules/uni-icons/components/uni-icons/uni-icons.uvue +91 -0
  299. package/templates/example/uniapp/uni_modules/uni-icons/components/uni-icons/uni-icons.vue +110 -0
  300. package/templates/example/uniapp/uni_modules/uni-icons/components/uni-icons/uniicons.css +664 -0
  301. package/templates/example/uniapp/uni_modules/uni-icons/components/uni-icons/uniicons.ttf +0 -0
  302. package/templates/example/uniapp/uni_modules/uni-icons/components/uni-icons/uniicons_file.ts +664 -0
  303. package/templates/example/uniapp/uni_modules/uni-icons/components/uni-icons/uniicons_file_vue.js +649 -0
  304. package/templates/example/uniapp/uni_modules/uni-icons/package.json +89 -0
  305. package/templates/example/uniapp/uni_modules/uni-icons/readme.md +8 -0
  306. package/templates/example/uniapp/uni_modules/uni-list/changelog.md +48 -0
  307. package/templates/example/uniapp/uni_modules/uni-list/components/uni-list/uni-list.vue +123 -0
  308. package/templates/example/uniapp/uni_modules/uni-list/components/uni-list/uni-refresh.vue +65 -0
  309. package/templates/example/uniapp/uni_modules/uni-list/components/uni-list/uni-refresh.wxs +87 -0
  310. package/templates/example/uniapp/uni_modules/uni-list/components/uni-list-ad/uni-list-ad.vue +107 -0
  311. package/templates/example/uniapp/uni_modules/uni-list/components/uni-list-chat/uni-list-chat.scss +58 -0
  312. package/templates/example/uniapp/uni_modules/uni-list/components/uni-list-chat/uni-list-chat.vue +593 -0
  313. package/templates/example/uniapp/uni_modules/uni-list/components/uni-list-item/uni-list-item.vue +534 -0
  314. package/templates/example/uniapp/uni_modules/uni-list/package.json +91 -0
  315. package/templates/example/uniapp/uni_modules/uni-list/readme.md +46 -0
  316. package/templates/example/uniapp/uni_modules/uni-load-more/changelog.md +25 -0
  317. package/templates/example/uniapp/uni_modules/uni-load-more/components/uni-load-more/i18n/en.json +5 -0
  318. package/templates/example/uniapp/uni_modules/uni-load-more/components/uni-load-more/i18n/index.js +8 -0
  319. package/templates/example/uniapp/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hans.json +5 -0
  320. package/templates/example/uniapp/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hant.json +5 -0
  321. package/templates/example/uniapp/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue +404 -0
  322. package/templates/example/uniapp/uni_modules/uni-load-more/package.json +84 -0
  323. package/templates/example/uniapp/uni_modules/uni-load-more/readme.md +14 -0
  324. package/templates/example/uniapp/uni_modules/uni-scss/changelog.md +8 -0
  325. package/templates/example/uniapp/uni_modules/uni-scss/index.scss +1 -0
  326. package/templates/example/uniapp/uni_modules/uni-scss/package.json +82 -0
  327. package/templates/example/uniapp/uni_modules/uni-scss/readme.md +4 -0
  328. package/templates/example/uniapp/uni_modules/uni-scss/styles/index.scss +7 -0
  329. package/templates/example/uniapp/uni_modules/uni-scss/styles/setting/_border.scss +3 -0
  330. package/templates/example/uniapp/uni_modules/uni-scss/styles/setting/_color.scss +66 -0
  331. package/templates/example/uniapp/uni_modules/uni-scss/styles/setting/_radius.scss +55 -0
  332. package/templates/example/uniapp/uni_modules/uni-scss/styles/setting/_space.scss +56 -0
  333. package/templates/example/uniapp/uni_modules/uni-scss/styles/setting/_styles.scss +167 -0
  334. package/templates/example/uniapp/uni_modules/uni-scss/styles/setting/_text.scss +24 -0
  335. package/templates/example/uniapp/uni_modules/uni-scss/styles/setting/_variables.scss +146 -0
  336. package/templates/example/uniapp/uni_modules/uni-scss/styles/tools/functions.scss +19 -0
  337. package/templates/example/uniapp/uni_modules/uni-scss/theme.scss +31 -0
  338. package/templates/example/uniapp/uni_modules/uni-scss/variables.scss +62 -0
  339. package/templates/example/uniapp/uni_modules/uni-section/changelog.md +2 -0
  340. package/templates/example/uniapp/uni_modules/uni-section/components/uni-section/uni-section.vue +167 -0
  341. package/templates/example/uniapp/uni_modules/uni-section/package.json +87 -0
  342. package/templates/example/uniapp/uni_modules/uni-section/readme.md +8 -0
  343. package/templates/example/uniapp/uni_modules/uni-swipe-action/changelog.md +47 -0
  344. package/templates/example/uniapp/uni_modules/uni-swipe-action/components/uni-swipe-action/uni-swipe-action.vue +60 -0
  345. package/templates/example/uniapp/uni_modules/uni-swipe-action/components/uni-swipe-action-item/bindingx.js +302 -0
  346. package/templates/example/uniapp/uni_modules/uni-swipe-action/components/uni-swipe-action-item/isPC.js +12 -0
  347. package/templates/example/uniapp/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpalipay.js +195 -0
  348. package/templates/example/uniapp/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpother.js +260 -0
  349. package/templates/example/uniapp/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpwxs.js +84 -0
  350. package/templates/example/uniapp/uni_modules/uni-swipe-action/components/uni-swipe-action-item/render.js +270 -0
  351. package/templates/example/uniapp/uni_modules/uni-swipe-action/components/uni-swipe-action-item/uni-swipe-action-item.vue +348 -0
  352. package/templates/example/uniapp/uni_modules/uni-swipe-action/components/uni-swipe-action-item/wx.wxs +341 -0
  353. package/templates/example/uniapp/uni_modules/uni-swipe-action/package.json +84 -0
  354. package/templates/example/uniapp/uni_modules/uni-swipe-action/readme.md +11 -0
  355. package/templates/example/uniapp/uni_modules/uni-table/changelog.md +33 -0
  356. package/templates/example/uniapp/uni_modules/uni-table/components/uni-table/uni-table.vue +460 -0
  357. package/templates/example/uniapp/uni_modules/uni-table/components/uni-tbody/uni-tbody.vue +34 -0
  358. package/templates/example/uniapp/uni_modules/uni-table/components/uni-td/uni-td.vue +95 -0
  359. package/templates/example/uniapp/uni_modules/uni-table/components/uni-th/filter-dropdown.vue +511 -0
  360. package/templates/example/uniapp/uni_modules/uni-table/components/uni-th/uni-th.vue +295 -0
  361. package/templates/example/uniapp/uni_modules/uni-table/components/uni-thead/uni-thead.vue +137 -0
  362. package/templates/example/uniapp/uni_modules/uni-table/components/uni-tr/table-checkbox.vue +179 -0
  363. package/templates/example/uniapp/uni_modules/uni-table/components/uni-tr/uni-tr.vue +184 -0
  364. package/templates/example/uniapp/uni_modules/uni-table/i18n/en.json +9 -0
  365. package/templates/example/uniapp/uni_modules/uni-table/i18n/es.json +9 -0
  366. package/templates/example/uniapp/uni_modules/uni-table/i18n/fr.json +9 -0
  367. package/templates/example/uniapp/uni_modules/uni-table/i18n/index.js +12 -0
  368. package/templates/example/uniapp/uni_modules/uni-table/i18n/zh-Hans.json +9 -0
  369. package/templates/example/uniapp/uni_modules/uni-table/i18n/zh-Hant.json +9 -0
  370. package/templates/example/uniapp/uni_modules/uni-table/package.json +84 -0
  371. package/templates/example/uniapp/uni_modules/uni-table/readme.md +13 -0
  372. package/templates/example/uniapp/uni_modules/uni-tag/changelog.md +23 -0
  373. package/templates/example/uniapp/uni_modules/uni-tag/components/uni-tag/uni-tag.vue +252 -0
  374. package/templates/example/uniapp/uni_modules/uni-tag/package.json +84 -0
  375. package/templates/example/uniapp/uni_modules/uni-tag/readme.md +13 -0
  376. package/templates/example/uniapp/uni_modules/uv-action-sheet/changelog.md +7 -0
  377. package/templates/example/uniapp/uni_modules/uv-action-sheet/components/uv-action-sheet/props.js +50 -0
  378. package/templates/example/uniapp/uni_modules/uv-action-sheet/components/uv-action-sheet/uv-action-sheet.vue +280 -0
  379. package/templates/example/uniapp/uni_modules/uv-action-sheet/package.json +92 -0
  380. package/templates/example/uniapp/uni_modules/uv-action-sheet/readme.md +13 -0
  381. package/templates/example/uniapp/uni_modules/uv-album/changelog.md +10 -0
  382. package/templates/example/uniapp/uni_modules/uv-album/components/uv-album/uv-album.vue +312 -0
  383. package/templates/example/uniapp/uni_modules/uv-album/package.json +88 -0
  384. package/templates/example/uniapp/uni_modules/uv-album/readme.md +21 -0
  385. package/templates/example/uniapp/uni_modules/uv-alert/changelog.md +7 -0
  386. package/templates/example/uniapp/uni_modules/uv-alert/components/uv-alert/props.js +45 -0
  387. package/templates/example/uniapp/uni_modules/uv-alert/components/uv-alert/uv-alert.vue +246 -0
  388. package/templates/example/uniapp/uni_modules/uv-alert/package.json +88 -0
  389. package/templates/example/uniapp/uni_modules/uv-alert/readme.md +15 -0
  390. package/templates/example/uniapp/uni_modules/uv-avatar/changelog.md +13 -0
  391. package/templates/example/uniapp/uni_modules/uv-avatar/components/uv-avatar/props.js +80 -0
  392. package/templates/example/uniapp/uni_modules/uv-avatar/components/uv-avatar/uv-avatar.vue +175 -0
  393. package/templates/example/uniapp/uni_modules/uv-avatar/components/uv-avatar-group/props.js +53 -0
  394. package/templates/example/uniapp/uni_modules/uv-avatar/components/uv-avatar-group/uv-avatar-group.vue +106 -0
  395. package/templates/example/uniapp/uni_modules/uv-avatar/package.json +89 -0
  396. package/templates/example/uniapp/uni_modules/uv-avatar/readme.md +11 -0
  397. package/templates/example/uniapp/uni_modules/uv-back-top/changelog.md +8 -0
  398. package/templates/example/uniapp/uni_modules/uv-back-top/components/uv-back-top/props.js +58 -0
  399. package/templates/example/uniapp/uni_modules/uv-back-top/components/uv-back-top/uv-back-top.vue +116 -0
  400. package/templates/example/uniapp/uni_modules/uv-back-top/package.json +89 -0
  401. package/templates/example/uniapp/uni_modules/uv-back-top/readme.md +11 -0
  402. package/templates/example/uniapp/uni_modules/uv-badge/changelog.md +7 -0
  403. package/templates/example/uniapp/uni_modules/uv-badge/components/uv-badge/props.js +73 -0
  404. package/templates/example/uniapp/uni_modules/uv-badge/components/uv-badge/uv-badge.vue +176 -0
  405. package/templates/example/uniapp/uni_modules/uv-badge/package.json +87 -0
  406. package/templates/example/uniapp/uni_modules/uv-badge/readme.md +11 -0
  407. package/templates/example/uniapp/uni_modules/uv-button/changelog.md +33 -0
  408. package/templates/example/uniapp/uni_modules/uv-button/components/uv-button/nvue.scss +46 -0
  409. package/templates/example/uniapp/uni_modules/uv-button/components/uv-button/props.js +163 -0
  410. package/templates/example/uniapp/uni_modules/uv-button/components/uv-button/uv-button.vue +528 -0
  411. package/templates/example/uniapp/uni_modules/uv-button/components/uv-button/vue.scss +93 -0
  412. package/templates/example/uniapp/uni_modules/uv-button/package.json +89 -0
  413. package/templates/example/uniapp/uni_modules/uv-button/readme.md +19 -0
  414. package/templates/example/uniapp/uni_modules/uv-calendar/changelog.md +16 -0
  415. package/templates/example/uniapp/uni_modules/uv-calendar/components/uv-calendar/calendar.js +546 -0
  416. package/templates/example/uniapp/uni_modules/uv-calendar/components/uv-calendar/header.vue +104 -0
  417. package/templates/example/uniapp/uni_modules/uv-calendar/components/uv-calendar/month.vue +616 -0
  418. package/templates/example/uniapp/uni_modules/uv-calendar/components/uv-calendar/props.js +145 -0
  419. package/templates/example/uniapp/uni_modules/uv-calendar/components/uv-calendar/uv-calendar.vue +390 -0
  420. package/templates/example/uniapp/uni_modules/uv-calendar/package.json +89 -0
  421. package/templates/example/uniapp/uni_modules/uv-calendar/readme.md +21 -0
  422. package/templates/example/uniapp/uni_modules/uv-calendars/changelog.md +40 -0
  423. package/templates/example/uniapp/uni_modules/uv-calendars/components/uv-calendars/calendar-body.vue +376 -0
  424. package/templates/example/uniapp/uni_modules/uv-calendars/components/uv-calendars/calendar-item.vue +248 -0
  425. package/templates/example/uniapp/uni_modules/uv-calendars/components/uv-calendars/calendar.js +546 -0
  426. package/templates/example/uniapp/uni_modules/uv-calendars/components/uv-calendars/i18n/en.json +12 -0
  427. package/templates/example/uniapp/uni_modules/uv-calendars/components/uv-calendars/i18n/index.js +8 -0
  428. package/templates/example/uniapp/uni_modules/uv-calendars/components/uv-calendars/i18n/zh-Hans.json +12 -0
  429. package/templates/example/uniapp/uni_modules/uv-calendars/components/uv-calendars/i18n/zh-Hant.json +12 -0
  430. package/templates/example/uniapp/uni_modules/uv-calendars/components/uv-calendars/util.js +435 -0
  431. package/templates/example/uniapp/uni_modules/uv-calendars/components/uv-calendars/uv-calendars.vue +452 -0
  432. package/templates/example/uniapp/uni_modules/uv-calendars/package.json +89 -0
  433. package/templates/example/uniapp/uni_modules/uv-calendars/readme.md +23 -0
  434. package/templates/example/uniapp/uni_modules/uv-cell/changelog.md +13 -0
  435. package/templates/example/uniapp/uni_modules/uv-cell/components/uv-cell/props.js +116 -0
  436. package/templates/example/uniapp/uni_modules/uv-cell/components/uv-cell/uv-cell.vue +209 -0
  437. package/templates/example/uniapp/uni_modules/uv-cell/components/uv-cell-group/props.js +15 -0
  438. package/templates/example/uniapp/uni_modules/uv-cell/components/uv-cell-group/uv-cell-group.vue +63 -0
  439. package/templates/example/uniapp/uni_modules/uv-cell/package.json +89 -0
  440. package/templates/example/uniapp/uni_modules/uv-cell/readme.md +11 -0
  441. package/templates/example/uniapp/uni_modules/uv-checkbox/changelog.md +34 -0
  442. package/templates/example/uniapp/uni_modules/uv-checkbox/components/uv-checkbox/props.js +70 -0
  443. package/templates/example/uniapp/uni_modules/uv-checkbox/components/uv-checkbox/uv-checkbox.vue +370 -0
  444. package/templates/example/uniapp/uni_modules/uv-checkbox/components/uv-checkbox-group/props.js +84 -0
  445. package/templates/example/uniapp/uni_modules/uv-checkbox/components/uv-checkbox-group/uv-checkbox-group.vue +119 -0
  446. package/templates/example/uniapp/uni_modules/uv-checkbox/package.json +88 -0
  447. package/templates/example/uniapp/uni_modules/uv-checkbox/readme.md +19 -0
  448. package/templates/example/uniapp/uni_modules/uv-code/changelog.md +9 -0
  449. package/templates/example/uniapp/uni_modules/uv-code/components/uv-code/props.js +35 -0
  450. package/templates/example/uniapp/uni_modules/uv-code/components/uv-code/uv-code.vue +136 -0
  451. package/templates/example/uniapp/uni_modules/uv-code/package.json +87 -0
  452. package/templates/example/uniapp/uni_modules/uv-code/readme.md +11 -0
  453. package/templates/example/uniapp/uni_modules/uv-code-input/changelog.md +13 -0
  454. package/templates/example/uniapp/uni_modules/uv-code-input/components/uv-code-input/props.js +83 -0
  455. package/templates/example/uniapp/uni_modules/uv-code-input/components/uv-code-input/uv-code-input.vue +272 -0
  456. package/templates/example/uniapp/uni_modules/uv-code-input/package.json +87 -0
  457. package/templates/example/uniapp/uni_modules/uv-code-input/readme.md +19 -0
  458. package/templates/example/uniapp/uni_modules/uv-collapse/changelog.md +5 -0
  459. package/templates/example/uniapp/uni_modules/uv-collapse/components/uv-collapse/props.js +20 -0
  460. package/templates/example/uniapp/uni_modules/uv-collapse/components/uv-collapse/uv-collapse.vue +86 -0
  461. package/templates/example/uniapp/uni_modules/uv-collapse/components/uv-collapse-item/props.js +60 -0
  462. package/templates/example/uniapp/uni_modules/uv-collapse/components/uv-collapse-item/uv-collapse-item.vue +229 -0
  463. package/templates/example/uniapp/uni_modules/uv-collapse/package.json +89 -0
  464. package/templates/example/uniapp/uni_modules/uv-collapse/readme.md +11 -0
  465. package/templates/example/uniapp/uni_modules/uv-count-down/changelog.md +9 -0
  466. package/templates/example/uniapp/uni_modules/uv-count-down/components/uv-count-down/props.js +25 -0
  467. package/templates/example/uniapp/uni_modules/uv-count-down/components/uv-count-down/utils.js +62 -0
  468. package/templates/example/uniapp/uni_modules/uv-count-down/components/uv-count-down/uv-count-down.vue +169 -0
  469. package/templates/example/uniapp/uni_modules/uv-count-down/package.json +87 -0
  470. package/templates/example/uniapp/uni_modules/uv-count-down/readme.md +11 -0
  471. package/templates/example/uniapp/uni_modules/uv-count-to/changelog.md +13 -0
  472. package/templates/example/uniapp/uni_modules/uv-count-to/components/uv-count-to/props.js +60 -0
  473. package/templates/example/uniapp/uni_modules/uv-count-to/components/uv-count-to/uv-count-to.vue +187 -0
  474. package/templates/example/uniapp/uni_modules/uv-count-to/package.json +87 -0
  475. package/templates/example/uniapp/uni_modules/uv-count-to/readme.md +11 -0
  476. package/templates/example/uniapp/uni_modules/uv-datetime-picker/changelog.md +34 -0
  477. package/templates/example/uniapp/uni_modules/uv-datetime-picker/components/uv-datetime-picker/props.js +130 -0
  478. package/templates/example/uniapp/uni_modules/uv-datetime-picker/components/uv-datetime-picker/uv-datetime-picker.vue +360 -0
  479. package/templates/example/uniapp/uni_modules/uv-datetime-picker/package.json +89 -0
  480. package/templates/example/uniapp/uni_modules/uv-datetime-picker/readme.md +19 -0
  481. package/templates/example/uniapp/uni_modules/uv-divider/changelog.md +11 -0
  482. package/templates/example/uniapp/uni_modules/uv-divider/components/uv-divider/props.js +45 -0
  483. package/templates/example/uniapp/uni_modules/uv-divider/components/uv-divider/uv-divider.vue +113 -0
  484. package/templates/example/uniapp/uni_modules/uv-divider/package.json +88 -0
  485. package/templates/example/uniapp/uni_modules/uv-divider/readme.md +11 -0
  486. package/templates/example/uniapp/uni_modules/uv-drop-down/changelog.md +13 -0
  487. package/templates/example/uniapp/uni_modules/uv-drop-down/components/uv-drop-down/uv-drop-down.vue +135 -0
  488. package/templates/example/uniapp/uni_modules/uv-drop-down/components/uv-drop-down-item/uv-drop-down-item.vue +169 -0
  489. package/templates/example/uniapp/uni_modules/uv-drop-down/components/uv-drop-down-popup/uv-drop-down-popup.vue +242 -0
  490. package/templates/example/uniapp/uni_modules/uv-drop-down/package.json +91 -0
  491. package/templates/example/uniapp/uni_modules/uv-drop-down/readme.md +23 -0
  492. package/templates/example/uniapp/uni_modules/uv-empty/changelog.md +13 -0
  493. package/templates/example/uniapp/uni_modules/uv-empty/components/uv-empty/props.js +60 -0
  494. package/templates/example/uniapp/uni_modules/uv-empty/components/uv-empty/uv-empty.vue +126 -0
  495. package/templates/example/uniapp/uni_modules/uv-empty/package.json +88 -0
  496. package/templates/example/uniapp/uni_modules/uv-empty/readme.md +19 -0
  497. package/templates/example/uniapp/uni_modules/uv-form/changelog.md +23 -0
  498. package/templates/example/uniapp/uni_modules/uv-form/components/uv-form/props.js +46 -0
  499. package/templates/example/uniapp/uni_modules/uv-form/components/uv-form/uv-form.vue +209 -0
  500. package/templates/example/uniapp/uni_modules/uv-form/components/uv-form/valid.js +1343 -0
  501. package/templates/example/uniapp/uni_modules/uv-form/components/uv-form-item/props.js +49 -0
  502. package/templates/example/uniapp/uni_modules/uv-form/components/uv-form-item/uv-form-item.vue +226 -0
  503. package/templates/example/uniapp/uni_modules/uv-form/package.json +93 -0
  504. package/templates/example/uniapp/uni_modules/uv-form/readme.md +19 -0
  505. package/templates/example/uniapp/uni_modules/uv-gap/changelog.md +5 -0
  506. package/templates/example/uniapp/uni_modules/uv-gap/components/uv-gap/props.js +25 -0
  507. package/templates/example/uniapp/uni_modules/uv-gap/components/uv-gap/uv-gap.vue +36 -0
  508. package/templates/example/uniapp/uni_modules/uv-gap/package.json +87 -0
  509. package/templates/example/uniapp/uni_modules/uv-gap/readme.md +12 -0
  510. package/templates/example/uniapp/uni_modules/uv-grid/changelog.md +21 -0
  511. package/templates/example/uniapp/uni_modules/uv-grid/components/uv-grid/props.js +20 -0
  512. package/templates/example/uniapp/uni_modules/uv-grid/components/uv-grid/uv-grid.vue +100 -0
  513. package/templates/example/uniapp/uni_modules/uv-grid/components/uv-grid-item/props.js +15 -0
  514. package/templates/example/uniapp/uni_modules/uv-grid/components/uv-grid-item/uv-grid-item.vue +226 -0
  515. package/templates/example/uniapp/uni_modules/uv-grid/package.json +88 -0
  516. package/templates/example/uniapp/uni_modules/uv-grid/readme.md +17 -0
  517. package/templates/example/uniapp/uni_modules/uv-icon/changelog.md +31 -0
  518. package/templates/example/uniapp/uni_modules/uv-icon/components/uv-icon/icons.js +160 -0
  519. package/templates/example/uniapp/uni_modules/uv-icon/components/uv-icon/props.js +90 -0
  520. package/templates/example/uniapp/uni_modules/uv-icon/components/uv-icon/uv-icon.vue +226 -0
  521. package/templates/example/uniapp/uni_modules/uv-icon/components/uv-icon/uvicons.ttf +0 -0
  522. package/templates/example/uniapp/uni_modules/uv-icon/package.json +83 -0
  523. package/templates/example/uniapp/uni_modules/uv-icon/readme.md +15 -0
  524. package/templates/example/uniapp/uni_modules/uv-image/changelog.md +36 -0
  525. package/templates/example/uniapp/uni_modules/uv-image/components/uv-image/props.js +95 -0
  526. package/templates/example/uniapp/uni_modules/uv-image/components/uv-image/uv-image.vue +287 -0
  527. package/templates/example/uniapp/uni_modules/uv-image/package.json +89 -0
  528. package/templates/example/uniapp/uni_modules/uv-image/readme.md +15 -0
  529. package/templates/example/uniapp/uni_modules/uv-index-list/changelog.md +18 -0
  530. package/templates/example/uniapp/uni_modules/uv-index-list/components/uv-index-anchor/props.js +30 -0
  531. package/templates/example/uniapp/uni_modules/uv-index-list/components/uv-index-anchor/uv-index-anchor.vue +98 -0
  532. package/templates/example/uniapp/uni_modules/uv-index-list/components/uv-index-item/uv-index-item.vue +87 -0
  533. package/templates/example/uniapp/uni_modules/uv-index-list/components/uv-index-list/props.js +30 -0
  534. package/templates/example/uniapp/uni_modules/uv-index-list/components/uv-index-list/uv-index-list.vue +461 -0
  535. package/templates/example/uniapp/uni_modules/uv-index-list/package.json +88 -0
  536. package/templates/example/uniapp/uni_modules/uv-index-list/readme.md +19 -0
  537. package/templates/example/uniapp/uni_modules/uv-input/changelog.md +29 -0
  538. package/templates/example/uniapp/uni_modules/uv-input/components/uv-input/props.js +175 -0
  539. package/templates/example/uniapp/uni_modules/uv-input/components/uv-input/uv-input.vue +348 -0
  540. package/templates/example/uniapp/uni_modules/uv-input/package.json +88 -0
  541. package/templates/example/uniapp/uni_modules/uv-input/readme.md +19 -0
  542. package/templates/example/uniapp/uni_modules/uv-keyboard/changelog.md +17 -0
  543. package/templates/example/uniapp/uni_modules/uv-keyboard/components/uv-keyboard/props.js +95 -0
  544. package/templates/example/uniapp/uni_modules/uv-keyboard/components/uv-keyboard/uv-keyboard.vue +180 -0
  545. package/templates/example/uniapp/uni_modules/uv-keyboard/components/uv-keyboard-car/props.js +24 -0
  546. package/templates/example/uniapp/uni_modules/uv-keyboard/components/uv-keyboard-car/uv-keyboard-car.vue +347 -0
  547. package/templates/example/uniapp/uni_modules/uv-keyboard/components/uv-keyboard-number/props.js +19 -0
  548. package/templates/example/uniapp/uni_modules/uv-keyboard/components/uv-keyboard-number/uv-keyboard-number.vue +201 -0
  549. package/templates/example/uniapp/uni_modules/uv-keyboard/package.json +89 -0
  550. package/templates/example/uniapp/uni_modules/uv-keyboard/readme.md +19 -0
  551. package/templates/example/uniapp/uni_modules/uv-line/changelog.md +5 -0
  552. package/templates/example/uniapp/uni_modules/uv-line/components/uv-line/props.js +34 -0
  553. package/templates/example/uniapp/uni_modules/uv-line/components/uv-line/uv-line.vue +60 -0
  554. package/templates/example/uniapp/uni_modules/uv-line/package.json +87 -0
  555. package/templates/example/uniapp/uni_modules/uv-line/readme.md +11 -0
  556. package/templates/example/uniapp/uni_modules/uv-line-progress/changelog.md +7 -0
  557. package/templates/example/uniapp/uni_modules/uv-line-progress/components/uv-line-progress/props.js +29 -0
  558. package/templates/example/uniapp/uni_modules/uv-line-progress/components/uv-line-progress/uv-line-progress.vue +146 -0
  559. package/templates/example/uniapp/uni_modules/uv-line-progress/package.json +87 -0
  560. package/templates/example/uniapp/uni_modules/uv-line-progress/readme.md +11 -0
  561. package/templates/example/uniapp/uni_modules/uv-link/changelog.md +7 -0
  562. package/templates/example/uniapp/uni_modules/uv-link/components/uv-link/props.js +40 -0
  563. package/templates/example/uniapp/uni_modules/uv-link/components/uv-link/uv-link.vue +83 -0
  564. package/templates/example/uniapp/uni_modules/uv-link/package.json +87 -0
  565. package/templates/example/uniapp/uni_modules/uv-link/readme.md +11 -0
  566. package/templates/example/uniapp/uni_modules/uv-list/changelog.md +25 -0
  567. package/templates/example/uniapp/uni_modules/uv-list/components/uv-list/uv-list.vue +147 -0
  568. package/templates/example/uniapp/uni_modules/uv-list/components/uv-list-item/uv-list-item.vue +535 -0
  569. package/templates/example/uniapp/uni_modules/uv-list/package.json +87 -0
  570. package/templates/example/uniapp/uni_modules/uv-list/readme.md +27 -0
  571. package/templates/example/uniapp/uni_modules/uv-load-more/changelog.md +7 -0
  572. package/templates/example/uniapp/uni_modules/uv-load-more/components/uv-load-more/props.js +95 -0
  573. package/templates/example/uniapp/uni_modules/uv-load-more/components/uv-load-more/uv-load-more.vue +152 -0
  574. package/templates/example/uniapp/uni_modules/uv-load-more/package.json +89 -0
  575. package/templates/example/uniapp/uni_modules/uv-load-more/readme.md +11 -0
  576. package/templates/example/uniapp/uni_modules/uv-loading-icon/changelog.md +9 -0
  577. package/templates/example/uniapp/uni_modules/uv-loading-icon/components/uv-loading-icon/props.js +67 -0
  578. package/templates/example/uniapp/uni_modules/uv-loading-icon/components/uv-loading-icon/uv-loading-icon.vue +347 -0
  579. package/templates/example/uniapp/uni_modules/uv-loading-icon/package.json +87 -0
  580. package/templates/example/uniapp/uni_modules/uv-loading-icon/readme.md +19 -0
  581. package/templates/example/uniapp/uni_modules/uv-loading-page/changelog.md +11 -0
  582. package/templates/example/uniapp/uni_modules/uv-loading-page/components/uv-loading-page/props.js +55 -0
  583. package/templates/example/uniapp/uni_modules/uv-loading-page/components/uv-loading-page/uv-loading-page.vue +96 -0
  584. package/templates/example/uniapp/uni_modules/uv-loading-page/package.json +89 -0
  585. package/templates/example/uniapp/uni_modules/uv-loading-page/readme.md +11 -0
  586. package/templates/example/uniapp/uni_modules/uv-modal/changelog.md +28 -0
  587. package/templates/example/uniapp/uni_modules/uv-modal/components/uv-modal/props.js +90 -0
  588. package/templates/example/uniapp/uni_modules/uv-modal/components/uv-modal/uv-modal.vue +245 -0
  589. package/templates/example/uniapp/uni_modules/uv-modal/package.json +90 -0
  590. package/templates/example/uniapp/uni_modules/uv-modal/readme.md +23 -0
  591. package/templates/example/uniapp/uni_modules/uv-navbar/changelog.md +17 -0
  592. package/templates/example/uniapp/uni_modules/uv-navbar/components/uv-navbar/props.js +89 -0
  593. package/templates/example/uniapp/uni_modules/uv-navbar/components/uv-navbar/uv-navbar.vue +245 -0
  594. package/templates/example/uniapp/uni_modules/uv-navbar/package.json +89 -0
  595. package/templates/example/uniapp/uni_modules/uv-navbar/readme.md +19 -0
  596. package/templates/example/uniapp/uni_modules/uv-no-network/changelog.md +5 -0
  597. package/templates/example/uniapp/uni_modules/uv-no-network/components/uv-no-network/props.js +20 -0
  598. package/templates/example/uniapp/uni_modules/uv-no-network/components/uv-no-network/uv-no-network.vue +222 -0
  599. package/templates/example/uniapp/uni_modules/uv-no-network/package.json +90 -0
  600. package/templates/example/uniapp/uni_modules/uv-no-network/readme.md +11 -0
  601. package/templates/example/uniapp/uni_modules/uv-notice-bar/changelog.md +19 -0
  602. package/templates/example/uniapp/uni_modules/uv-notice-bar/components/uv-column-notice/props.js +61 -0
  603. package/templates/example/uniapp/uni_modules/uv-notice-bar/components/uv-column-notice/uv-column-notice.vue +176 -0
  604. package/templates/example/uniapp/uni_modules/uv-notice-bar/components/uv-notice-bar/props.js +76 -0
  605. package/templates/example/uniapp/uni_modules/uv-notice-bar/components/uv-notice-bar/uv-notice-bar.vue +110 -0
  606. package/templates/example/uniapp/uni_modules/uv-notice-bar/components/uv-row-notice/props.js +40 -0
  607. package/templates/example/uniapp/uni_modules/uv-notice-bar/components/uv-row-notice/uv-row-notice.vue +341 -0
  608. package/templates/example/uniapp/uni_modules/uv-notice-bar/package.json +88 -0
  609. package/templates/example/uniapp/uni_modules/uv-notice-bar/readme.md +19 -0
  610. package/templates/example/uniapp/uni_modules/uv-notify/changelog.md +9 -0
  611. package/templates/example/uniapp/uni_modules/uv-notify/components/uv-notify/props.js +45 -0
  612. package/templates/example/uniapp/uni_modules/uv-notify/components/uv-notify/uv-notify.vue +220 -0
  613. package/templates/example/uniapp/uni_modules/uv-notify/package.json +90 -0
  614. package/templates/example/uniapp/uni_modules/uv-notify/readme.md +11 -0
  615. package/templates/example/uniapp/uni_modules/uv-number-box/changelog.md +7 -0
  616. package/templates/example/uniapp/uni_modules/uv-number-box/components/uv-number-box/props.js +113 -0
  617. package/templates/example/uniapp/uni_modules/uv-number-box/components/uv-number-box/uv-number-box.vue +395 -0
  618. package/templates/example/uniapp/uni_modules/uv-number-box/package.json +88 -0
  619. package/templates/example/uniapp/uni_modules/uv-number-box/readme.md +11 -0
  620. package/templates/example/uniapp/uni_modules/uv-overlay/changelog.md +9 -0
  621. package/templates/example/uniapp/uni_modules/uv-overlay/components/uv-overlay/props.js +25 -0
  622. package/templates/example/uniapp/uni_modules/uv-overlay/components/uv-overlay/uv-overlay.vue +85 -0
  623. package/templates/example/uniapp/uni_modules/uv-overlay/package.json +88 -0
  624. package/templates/example/uniapp/uni_modules/uv-overlay/readme.md +11 -0
  625. package/templates/example/uniapp/uni_modules/uv-parse/changelog.md +13 -0
  626. package/templates/example/uniapp/uni_modules/uv-parse/components/uv-parse/node/node.vue +576 -0
  627. package/templates/example/uniapp/uni_modules/uv-parse/components/uv-parse/parser.js +1335 -0
  628. package/templates/example/uniapp/uni_modules/uv-parse/components/uv-parse/uv-parse.vue +498 -0
  629. package/templates/example/uniapp/uni_modules/uv-parse/package.json +87 -0
  630. package/templates/example/uniapp/uni_modules/uv-parse/readme.md +21 -0
  631. package/templates/example/uniapp/uni_modules/uv-parse/static/app-plus/uv-parse/js/handler.js +224 -0
  632. package/templates/example/uniapp/uni_modules/uv-parse/static/app-plus/uv-parse/js/uni.webview.min.js +19 -0
  633. package/templates/example/uniapp/uni_modules/uv-parse/static/app-plus/uv-parse/local.html +1 -0
  634. package/templates/example/uniapp/uni_modules/uv-pick-color/changelog.md +18 -0
  635. package/templates/example/uniapp/uni_modules/uv-pick-color/components/uv-pick-color/colors.js +217 -0
  636. package/templates/example/uniapp/uni_modules/uv-pick-color/components/uv-pick-color/props.js +47 -0
  637. package/templates/example/uniapp/uni_modules/uv-pick-color/components/uv-pick-color/uv-pick-color.vue +551 -0
  638. package/templates/example/uniapp/uni_modules/uv-pick-color/package.json +89 -0
  639. package/templates/example/uniapp/uni_modules/uv-pick-color/readme.md +19 -0
  640. package/templates/example/uniapp/uni_modules/uv-picker/changelog.md +33 -0
  641. package/templates/example/uniapp/uni_modules/uv-picker/components/uv-picker/props.js +95 -0
  642. package/templates/example/uniapp/uni_modules/uv-picker/components/uv-picker/uv-picker.vue +330 -0
  643. package/templates/example/uniapp/uni_modules/uv-picker/package.json +90 -0
  644. package/templates/example/uniapp/uni_modules/uv-picker/readme.md +21 -0
  645. package/templates/example/uniapp/uni_modules/uv-popup/changelog.md +18 -0
  646. package/templates/example/uniapp/uni_modules/uv-popup/components/uv-popup/keypress.js +45 -0
  647. package/templates/example/uniapp/uni_modules/uv-popup/components/uv-popup/uv-popup.vue +539 -0
  648. package/templates/example/uniapp/uni_modules/uv-popup/package.json +92 -0
  649. package/templates/example/uniapp/uni_modules/uv-popup/readme.md +21 -0
  650. package/templates/example/uniapp/uni_modules/uv-qrcode/changelog.md +13 -0
  651. package/templates/example/uniapp/uni_modules/uv-qrcode/components/uv-qrcode/cache.js +1 -0
  652. package/templates/example/uniapp/uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/bridge/bridge-weex.js +241 -0
  653. package/templates/example/uniapp/uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-2d/FillStyleLinearGradient.js +18 -0
  654. package/templates/example/uniapp/uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-2d/FillStylePattern.js +8 -0
  655. package/templates/example/uniapp/uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-2d/FillStyleRadialGradient.js +17 -0
  656. package/templates/example/uniapp/uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-2d/RenderingContext.js +666 -0
  657. package/templates/example/uniapp/uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-webgl/ActiveInfo.js +11 -0
  658. package/templates/example/uniapp/uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-webgl/Buffer.js +21 -0
  659. package/templates/example/uniapp/uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-webgl/Framebuffer.js +21 -0
  660. package/templates/example/uniapp/uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-webgl/GLenum.js +298 -0
  661. package/templates/example/uniapp/uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-webgl/GLmethod.js +142 -0
  662. package/templates/example/uniapp/uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-webgl/GLtype.js +23 -0
  663. package/templates/example/uniapp/uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-webgl/Program.js +21 -0
  664. package/templates/example/uniapp/uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-webgl/Renderbuffer.js +21 -0
  665. package/templates/example/uniapp/uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-webgl/RenderingContext.js +1191 -0
  666. package/templates/example/uniapp/uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-webgl/Shader.js +22 -0
  667. package/templates/example/uniapp/uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-webgl/ShaderPrecisionFormat.js +11 -0
  668. package/templates/example/uniapp/uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-webgl/Texture.js +22 -0
  669. package/templates/example/uniapp/uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-webgl/UniformLocation.js +22 -0
  670. package/templates/example/uniapp/uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/context-webgl/classUtils.js +3 -0
  671. package/templates/example/uniapp/uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/env/canvas.js +74 -0
  672. package/templates/example/uniapp/uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/env/image.js +96 -0
  673. package/templates/example/uniapp/uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/env/tool.js +24 -0
  674. package/templates/example/uniapp/uni_modules/uv-qrcode/components/uv-qrcode/gcanvas/index.js +39 -0
  675. package/templates/example/uniapp/uni_modules/uv-qrcode/components/uv-qrcode/props.js +85 -0
  676. package/templates/example/uniapp/uni_modules/uv-qrcode/components/uv-qrcode/qrcode.js +34 -0
  677. package/templates/example/uniapp/uni_modules/uv-qrcode/components/uv-qrcode/queue.js +41 -0
  678. package/templates/example/uniapp/uni_modules/uv-qrcode/components/uv-qrcode/uv-qrcode.vue +1038 -0
  679. package/templates/example/uniapp/uni_modules/uv-qrcode/package.json +87 -0
  680. package/templates/example/uniapp/uni_modules/uv-qrcode/readme.md +21 -0
  681. package/templates/example/uniapp/uni_modules/uv-radio/changelog.md +31 -0
  682. package/templates/example/uniapp/uni_modules/uv-radio/components/uv-radio/props.js +65 -0
  683. package/templates/example/uniapp/uni_modules/uv-radio/components/uv-radio/uv-radio.vue +348 -0
  684. package/templates/example/uniapp/uni_modules/uv-radio/components/uv-radio-group/props.js +89 -0
  685. package/templates/example/uniapp/uni_modules/uv-radio/components/uv-radio-group/uv-radio-group.vue +115 -0
  686. package/templates/example/uniapp/uni_modules/uv-radio/package.json +88 -0
  687. package/templates/example/uniapp/uni_modules/uv-radio/readme.md +19 -0
  688. package/templates/example/uniapp/uni_modules/uv-rate/changelog.md +17 -0
  689. package/templates/example/uniapp/uni_modules/uv-rate/components/uv-rate/props.js +73 -0
  690. package/templates/example/uniapp/uni_modules/uv-rate/components/uv-rate/uv-rate.vue +274 -0
  691. package/templates/example/uniapp/uni_modules/uv-rate/package.json +88 -0
  692. package/templates/example/uniapp/uni_modules/uv-rate/readme.md +19 -0
  693. package/templates/example/uniapp/uni_modules/uv-read-more/changelog.md +7 -0
  694. package/templates/example/uniapp/uni_modules/uv-read-more/components/uv-read-more/props.js +62 -0
  695. package/templates/example/uniapp/uni_modules/uv-read-more/components/uv-read-more/uv-read-more.vue +162 -0
  696. package/templates/example/uniapp/uni_modules/uv-read-more/package.json +89 -0
  697. package/templates/example/uniapp/uni_modules/uv-read-more/readme.md +11 -0
  698. package/templates/example/uniapp/uni_modules/uv-row/changelog.md +5 -0
  699. package/templates/example/uniapp/uni_modules/uv-row/components/uv-col/props.js +30 -0
  700. package/templates/example/uniapp/uni_modules/uv-row/components/uv-col/uv-col.vue +165 -0
  701. package/templates/example/uniapp/uni_modules/uv-row/components/uv-row/props.js +20 -0
  702. package/templates/example/uniapp/uni_modules/uv-row/components/uv-row/uv-row.vue +95 -0
  703. package/templates/example/uniapp/uni_modules/uv-row/package.json +87 -0
  704. package/templates/example/uniapp/uni_modules/uv-row/readme.md +11 -0
  705. package/templates/example/uniapp/uni_modules/uv-safe-bottom/changelog.md +11 -0
  706. package/templates/example/uniapp/uni_modules/uv-safe-bottom/components/uv-safe-bottom/uv-safe-bottom.vue +67 -0
  707. package/templates/example/uniapp/uni_modules/uv-safe-bottom/package.json +87 -0
  708. package/templates/example/uniapp/uni_modules/uv-safe-bottom/readme.md +11 -0
  709. package/templates/example/uniapp/uni_modules/uv-scroll-list/changelog.md +12 -0
  710. package/templates/example/uniapp/uni_modules/uv-scroll-list/components/uv-scroll-list/nvue.js +29 -0
  711. package/templates/example/uniapp/uni_modules/uv-scroll-list/components/uv-scroll-list/props.js +35 -0
  712. package/templates/example/uniapp/uni_modules/uv-scroll-list/components/uv-scroll-list/scrollWxs.wxs +51 -0
  713. package/templates/example/uniapp/uni_modules/uv-scroll-list/components/uv-scroll-list/uv-scroll-list.vue +218 -0
  714. package/templates/example/uniapp/uni_modules/uv-scroll-list/package.json +87 -0
  715. package/templates/example/uniapp/uni_modules/uv-scroll-list/readme.md +19 -0
  716. package/templates/example/uniapp/uni_modules/uv-search/changelog.md +25 -0
  717. package/templates/example/uniapp/uni_modules/uv-search/components/uv-search/props.js +127 -0
  718. package/templates/example/uniapp/uni_modules/uv-search/components/uv-search/uv-search.vue +311 -0
  719. package/templates/example/uniapp/uni_modules/uv-search/package.json +89 -0
  720. package/templates/example/uniapp/uni_modules/uv-search/readme.md +19 -0
  721. package/templates/example/uniapp/uni_modules/uv-skeleton/changelog.md +9 -0
  722. package/templates/example/uniapp/uni_modules/uv-skeleton/components/uv-skeleton/props.js +65 -0
  723. package/templates/example/uniapp/uni_modules/uv-skeleton/components/uv-skeleton/uv-skeleton.vue +250 -0
  724. package/templates/example/uniapp/uni_modules/uv-skeleton/package.json +87 -0
  725. package/templates/example/uniapp/uni_modules/uv-skeleton/readme.md +11 -0
  726. package/templates/example/uniapp/uni_modules/uv-skeletons/changelog.md +4 -0
  727. package/templates/example/uniapp/uni_modules/uv-skeletons/components/uv-skeletons/uv-skeletons.vue +247 -0
  728. package/templates/example/uniapp/uni_modules/uv-skeletons/package.json +88 -0
  729. package/templates/example/uniapp/uni_modules/uv-skeletons/readme.md +23 -0
  730. package/templates/example/uniapp/uni_modules/uv-slider/changelog.md +9 -0
  731. package/templates/example/uniapp/uni_modules/uv-slider/components/uv-slider/props.js +58 -0
  732. package/templates/example/uniapp/uni_modules/uv-slider/components/uv-slider/uv-slider.vue +58 -0
  733. package/templates/example/uniapp/uni_modules/uv-slider/package.json +87 -0
  734. package/templates/example/uniapp/uni_modules/uv-slider/readme.md +15 -0
  735. package/templates/example/uniapp/uni_modules/uv-status-bar/changelog.md +7 -0
  736. package/templates/example/uniapp/uni_modules/uv-status-bar/components/uv-status-bar/props.js +8 -0
  737. package/templates/example/uniapp/uni_modules/uv-status-bar/components/uv-status-bar/uv-status-bar.vue +54 -0
  738. package/templates/example/uniapp/uni_modules/uv-status-bar/package.json +87 -0
  739. package/templates/example/uniapp/uni_modules/uv-status-bar/readme.md +10 -0
  740. package/templates/example/uniapp/uni_modules/uv-steps/changelog.md +10 -0
  741. package/templates/example/uniapp/uni_modules/uv-steps/components/uv-steps/props.js +40 -0
  742. package/templates/example/uniapp/uni_modules/uv-steps/components/uv-steps/uv-steps.vue +83 -0
  743. package/templates/example/uniapp/uni_modules/uv-steps/components/uv-steps-item/props.js +25 -0
  744. package/templates/example/uniapp/uni_modules/uv-steps/components/uv-steps-item/uv-steps-item.vue +347 -0
  745. package/templates/example/uniapp/uni_modules/uv-steps/package.json +89 -0
  746. package/templates/example/uniapp/uni_modules/uv-steps/readme.md +11 -0
  747. package/templates/example/uniapp/uni_modules/uv-sticky/changelog.md +11 -0
  748. package/templates/example/uniapp/uni_modules/uv-sticky/components/uv-sticky/props.js +41 -0
  749. package/templates/example/uniapp/uni_modules/uv-sticky/components/uv-sticky/uv-sticky.vue +223 -0
  750. package/templates/example/uniapp/uni_modules/uv-sticky/package.json +87 -0
  751. package/templates/example/uniapp/uni_modules/uv-sticky/readme.md +11 -0
  752. package/templates/example/uniapp/uni_modules/uv-subsection/changelog.md +10 -0
  753. package/templates/example/uniapp/uni_modules/uv-subsection/components/uv-subsection/props.js +54 -0
  754. package/templates/example/uniapp/uni_modules/uv-subsection/components/uv-subsection/uv-subsection.vue +269 -0
  755. package/templates/example/uniapp/uni_modules/uv-subsection/package.json +87 -0
  756. package/templates/example/uniapp/uni_modules/uv-subsection/readme.md +11 -0
  757. package/templates/example/uniapp/uni_modules/uv-swipe-action/changelog.md +11 -0
  758. package/templates/example/uniapp/uni_modules/uv-swipe-action/components/uv-swipe-action/props.js +10 -0
  759. package/templates/example/uniapp/uni_modules/uv-swipe-action/components/uv-swipe-action/uv-swipe-action.vue +65 -0
  760. package/templates/example/uniapp/uni_modules/uv-swipe-action/components/uv-swipe-action-item/index - backup.wxs +256 -0
  761. package/templates/example/uniapp/uni_modules/uv-swipe-action/components/uv-swipe-action-item/index.wxs +225 -0
  762. package/templates/example/uniapp/uni_modules/uv-swipe-action/components/uv-swipe-action-item/nvue - backup.js +264 -0
  763. package/templates/example/uniapp/uni_modules/uv-swipe-action/components/uv-swipe-action-item/nvue.js +182 -0
  764. package/templates/example/uniapp/uni_modules/uv-swipe-action/components/uv-swipe-action-item/props.js +40 -0
  765. package/templates/example/uniapp/uni_modules/uv-swipe-action/components/uv-swipe-action-item/uv-swipe-action-item.vue +200 -0
  766. package/templates/example/uniapp/uni_modules/uv-swipe-action/components/uv-swipe-action-item/wxs.js +15 -0
  767. package/templates/example/uniapp/uni_modules/uv-swipe-action/package.json +88 -0
  768. package/templates/example/uniapp/uni_modules/uv-swipe-action/readme.md +11 -0
  769. package/templates/example/uniapp/uni_modules/uv-swiper/changelog.md +16 -0
  770. package/templates/example/uniapp/uni_modules/uv-swiper/components/uv-swiper/props.js +136 -0
  771. package/templates/example/uniapp/uni_modules/uv-swiper/components/uv-swiper/uv-swiper.vue +263 -0
  772. package/templates/example/uniapp/uni_modules/uv-swiper/components/uv-swiper-indicator/props.js +30 -0
  773. package/templates/example/uniapp/uni_modules/uv-swiper/components/uv-swiper-indicator/uv-swiper-indicator.vue +112 -0
  774. package/templates/example/uniapp/uni_modules/uv-swiper/package.json +88 -0
  775. package/templates/example/uniapp/uni_modules/uv-swiper/readme.md +19 -0
  776. package/templates/example/uniapp/uni_modules/uv-switch/changelog.md +14 -0
  777. package/templates/example/uniapp/uni_modules/uv-switch/components/uv-switch/props.js +58 -0
  778. package/templates/example/uniapp/uni_modules/uv-switch/components/uv-switch/uv-switch.vue +192 -0
  779. package/templates/example/uniapp/uni_modules/uv-switch/package.json +88 -0
  780. package/templates/example/uniapp/uni_modules/uv-switch/readme.md +19 -0
  781. package/templates/example/uniapp/uni_modules/uv-tabbar/changelog.md +14 -0
  782. package/templates/example/uniapp/uni_modules/uv-tabbar/components/uv-tabbar/props.js +50 -0
  783. package/templates/example/uniapp/uni_modules/uv-tabbar/components/uv-tabbar/uv-tabbar.vue +146 -0
  784. package/templates/example/uniapp/uni_modules/uv-tabbar/components/uv-tabbar-item/props.js +40 -0
  785. package/templates/example/uniapp/uni_modules/uv-tabbar/components/uv-tabbar-item/uv-tabbar-item.vue +146 -0
  786. package/templates/example/uniapp/uni_modules/uv-tabbar/package.json +90 -0
  787. package/templates/example/uniapp/uni_modules/uv-tabbar/readme.md +21 -0
  788. package/templates/example/uniapp/uni_modules/uv-tabs/changelog.md +22 -0
  789. package/templates/example/uniapp/uni_modules/uv-tabs/components/uv-tabs/props.js +71 -0
  790. package/templates/example/uniapp/uni_modules/uv-tabs/components/uv-tabs/uv-tabs.vue +390 -0
  791. package/templates/example/uniapp/uni_modules/uv-tabs/package.json +90 -0
  792. package/templates/example/uniapp/uni_modules/uv-tabs/readme.md +19 -0
  793. package/templates/example/uniapp/uni_modules/uv-tags/changelog.md +10 -0
  794. package/templates/example/uniapp/uni_modules/uv-tags/components/uv-tags/props.js +95 -0
  795. package/templates/example/uniapp/uni_modules/uv-tags/components/uv-tags/uv-tags.vue +379 -0
  796. package/templates/example/uniapp/uni_modules/uv-tags/package.json +89 -0
  797. package/templates/example/uniapp/uni_modules/uv-tags/readme.md +11 -0
  798. package/templates/example/uniapp/uni_modules/uv-text/changelog.md +11 -0
  799. package/templates/example/uniapp/uni_modules/uv-text/components/uv-text/props.js +113 -0
  800. package/templates/example/uniapp/uni_modules/uv-text/components/uv-text/uv-text.vue +218 -0
  801. package/templates/example/uniapp/uni_modules/uv-text/components/uv-text/value.js +87 -0
  802. package/templates/example/uniapp/uni_modules/uv-text/package.json +89 -0
  803. package/templates/example/uniapp/uni_modules/uv-text/readme.md +17 -0
  804. package/templates/example/uniapp/uni_modules/uv-textarea/changelog.md +28 -0
  805. package/templates/example/uniapp/uni_modules/uv-textarea/components/uv-textarea/props.js +138 -0
  806. package/templates/example/uniapp/uni_modules/uv-textarea/components/uv-textarea/uv-textarea.vue +238 -0
  807. package/templates/example/uniapp/uni_modules/uv-textarea/package.json +87 -0
  808. package/templates/example/uniapp/uni_modules/uv-textarea/readme.md +19 -0
  809. package/templates/example/uniapp/uni_modules/uv-toast/changelog.md +10 -0
  810. package/templates/example/uniapp/uni_modules/uv-toast/components/uv-toast/uv-toast.vue +333 -0
  811. package/templates/example/uniapp/uni_modules/uv-toast/package.json +90 -0
  812. package/templates/example/uniapp/uni_modules/uv-toast/readme.md +11 -0
  813. package/templates/example/uniapp/uni_modules/uv-toolbar/changelog.md +2 -0
  814. package/templates/example/uniapp/uni_modules/uv-toolbar/components/uv-toolbar/props.js +40 -0
  815. package/templates/example/uniapp/uni_modules/uv-toolbar/components/uv-toolbar/uv-toolbar.vue +109 -0
  816. package/templates/example/uniapp/uni_modules/uv-toolbar/package.json +87 -0
  817. package/templates/example/uniapp/uni_modules/uv-toolbar/readme.md +31 -0
  818. package/templates/example/uniapp/uni_modules/uv-tooltip/changelog.md +13 -0
  819. package/templates/example/uniapp/uni_modules/uv-tooltip/components/uv-tooltip/props.js +60 -0
  820. package/templates/example/uniapp/uni_modules/uv-tooltip/components/uv-tooltip/uv-tooltip.vue +372 -0
  821. package/templates/example/uniapp/uni_modules/uv-tooltip/package.json +90 -0
  822. package/templates/example/uniapp/uni_modules/uv-tooltip/readme.md +11 -0
  823. package/templates/example/uniapp/uni_modules/uv-transition/changelog.md +19 -0
  824. package/templates/example/uniapp/uni_modules/uv-transition/components/uv-transition/createAnimation.js +131 -0
  825. package/templates/example/uniapp/uni_modules/uv-transition/components/uv-transition/props.js +31 -0
  826. package/templates/example/uniapp/uni_modules/uv-transition/components/uv-transition/uv-transition.vue +320 -0
  827. package/templates/example/uniapp/uni_modules/uv-transition/package.json +87 -0
  828. package/templates/example/uniapp/uni_modules/uv-transition/readme.md +15 -0
  829. package/templates/example/uniapp/uni_modules/uv-ui/changelog.md +353 -0
  830. package/templates/example/uniapp/uni_modules/uv-ui/components/uv-ui/uv-ui.vue +7 -0
  831. package/templates/example/uniapp/uni_modules/uv-ui/package.json +162 -0
  832. package/templates/example/uniapp/uni_modules/uv-ui/readme.md +164 -0
  833. package/templates/example/uniapp/uni_modules/uv-ui-tools/changelog.md +76 -0
  834. package/templates/example/uniapp/uni_modules/uv-ui-tools/components/uv-ui-tools/uv-ui-tools.vue +6 -0
  835. package/templates/example/uniapp/uni_modules/uv-ui-tools/index.js +79 -0
  836. package/templates/example/uniapp/uni_modules/uv-ui-tools/index.scss +7 -0
  837. package/templates/example/uniapp/uni_modules/uv-ui-tools/libs/config/config.js +34 -0
  838. package/templates/example/uniapp/uni_modules/uv-ui-tools/libs/css/color.scss +32 -0
  839. package/templates/example/uniapp/uni_modules/uv-ui-tools/libs/css/common.scss +100 -0
  840. package/templates/example/uniapp/uni_modules/uv-ui-tools/libs/css/components.scss +23 -0
  841. package/templates/example/uniapp/uni_modules/uv-ui-tools/libs/css/variable.scss +111 -0
  842. package/templates/example/uniapp/uni_modules/uv-ui-tools/libs/css/vue.scss +40 -0
  843. package/templates/example/uniapp/uni_modules/uv-ui-tools/libs/function/colorGradient.js +134 -0
  844. package/templates/example/uniapp/uni_modules/uv-ui-tools/libs/function/debounce.js +29 -0
  845. package/templates/example/uniapp/uni_modules/uv-ui-tools/libs/function/digit.js +167 -0
  846. package/templates/example/uniapp/uni_modules/uv-ui-tools/libs/function/index.js +734 -0
  847. package/templates/example/uniapp/uni_modules/uv-ui-tools/libs/function/platform.js +75 -0
  848. package/templates/example/uniapp/uni_modules/uv-ui-tools/libs/function/test.js +287 -0
  849. package/templates/example/uniapp/uni_modules/uv-ui-tools/libs/function/throttle.js +30 -0
  850. package/templates/example/uniapp/uni_modules/uv-ui-tools/libs/luch-request/adapters/index.js +132 -0
  851. package/templates/example/uniapp/uni_modules/uv-ui-tools/libs/luch-request/core/InterceptorManager.js +51 -0
  852. package/templates/example/uniapp/uni_modules/uv-ui-tools/libs/luch-request/core/Request.js +201 -0
  853. package/templates/example/uniapp/uni_modules/uv-ui-tools/libs/luch-request/core/buildFullPath.js +20 -0
  854. package/templates/example/uniapp/uni_modules/uv-ui-tools/libs/luch-request/core/defaults.js +33 -0
  855. package/templates/example/uniapp/uni_modules/uv-ui-tools/libs/luch-request/core/dispatchRequest.js +6 -0
  856. package/templates/example/uniapp/uni_modules/uv-ui-tools/libs/luch-request/core/mergeConfig.js +126 -0
  857. package/templates/example/uniapp/uni_modules/uv-ui-tools/libs/luch-request/core/settle.js +16 -0
  858. package/templates/example/uniapp/uni_modules/uv-ui-tools/libs/luch-request/helpers/buildURL.js +64 -0
  859. package/templates/example/uniapp/uni_modules/uv-ui-tools/libs/luch-request/helpers/combineURLs.js +14 -0
  860. package/templates/example/uniapp/uni_modules/uv-ui-tools/libs/luch-request/helpers/isAbsoluteURL.js +14 -0
  861. package/templates/example/uniapp/uni_modules/uv-ui-tools/libs/luch-request/index.d.ts +197 -0
  862. package/templates/example/uniapp/uni_modules/uv-ui-tools/libs/luch-request/index.js +2 -0
  863. package/templates/example/uniapp/uni_modules/uv-ui-tools/libs/luch-request/utils/clone.js +264 -0
  864. package/templates/example/uniapp/uni_modules/uv-ui-tools/libs/luch-request/utils.js +135 -0
  865. package/templates/example/uniapp/uni_modules/uv-ui-tools/libs/mixin/button.js +13 -0
  866. package/templates/example/uniapp/uni_modules/uv-ui-tools/libs/mixin/mixin.js +172 -0
  867. package/templates/example/uniapp/uni_modules/uv-ui-tools/libs/mixin/mpMixin.js +8 -0
  868. package/templates/example/uniapp/uni_modules/uv-ui-tools/libs/mixin/mpShare.js +13 -0
  869. package/templates/example/uniapp/uni_modules/uv-ui-tools/libs/mixin/openType.js +47 -0
  870. package/templates/example/uniapp/uni_modules/uv-ui-tools/libs/mixin/touch.js +59 -0
  871. package/templates/example/uniapp/uni_modules/uv-ui-tools/libs/util/dayjs.js +216 -0
  872. package/templates/example/uniapp/uni_modules/uv-ui-tools/libs/util/route.js +126 -0
  873. package/templates/example/uniapp/uni_modules/uv-ui-tools/package.json +81 -0
  874. package/templates/example/uniapp/uni_modules/uv-ui-tools/readme.md +23 -0
  875. package/templates/example/uniapp/uni_modules/uv-ui-tools/theme.scss +43 -0
  876. package/templates/example/uniapp/uni_modules/uv-upload/changelog.md +17 -0
  877. package/templates/example/uniapp/uni_modules/uv-upload/components/uv-preview-video/uv-preview-video.vue +52 -0
  878. package/templates/example/uniapp/uni_modules/uv-upload/components/uv-upload/mixin.js +22 -0
  879. package/templates/example/uniapp/uni_modules/uv-upload/components/uv-upload/props.js +130 -0
  880. package/templates/example/uniapp/uni_modules/uv-upload/components/uv-upload/utils.js +151 -0
  881. package/templates/example/uniapp/uni_modules/uv-upload/components/uv-upload/uv-upload.vue +488 -0
  882. package/templates/example/uniapp/uni_modules/uv-upload/package.json +90 -0
  883. package/templates/example/uniapp/uni_modules/uv-upload/readme.md +11 -0
  884. package/templates/example/uniapp/uni_modules/uv-vtabs/changelog.md +20 -0
  885. package/templates/example/uniapp/uni_modules/uv-vtabs/components/uv-vtabs/props.js +79 -0
  886. package/templates/example/uniapp/uni_modules/uv-vtabs/components/uv-vtabs/uv-vtabs.vue +438 -0
  887. package/templates/example/uniapp/uni_modules/uv-vtabs/components/uv-vtabs-item/uv-vtabs-item.vue +68 -0
  888. package/templates/example/uniapp/uni_modules/uv-vtabs/package.json +87 -0
  889. package/templates/example/uniapp/uni_modules/uv-vtabs/readme.md +19 -0
  890. package/templates/example/uniapp/uni_modules/uv-waterfall/changelog.md +24 -0
  891. package/templates/example/uniapp/uni_modules/uv-waterfall/components/uv-waterfall/props.js +69 -0
  892. package/templates/example/uniapp/uni_modules/uv-waterfall/components/uv-waterfall/uv-waterfall.vue +265 -0
  893. package/templates/example/uniapp/uni_modules/uv-waterfall/package.json +89 -0
  894. package/templates/example/uniapp/uni_modules/uv-waterfall/readme.md +19 -0
  895. package/templates/example/uniapp/utils/eventBus.js +55 -0
  896. package/templates/example/uniapp/utils/index.js +304 -0
  897. package/templates/example/uniapp/utils/markdown.js +139 -0
  898. package/templates/example/uniapp/utils/push.js +54 -0
  899. package/templates/package.json +38 -0
  900. package/templates/prisma/schema.business.prisma +72 -0
  901. package/templates/scripts/fix-routes-imports.js +23 -0
  902. package/templates/src/ai-tools.ts +32 -0
  903. package/templates/src/app.ts +75 -0
  904. package/templates/src/business/ai/ai.controller.ts +38 -0
  905. package/templates/src/business/ai/ai.model.ts +37 -0
  906. package/templates/src/business/ai/ai.service.ts +137 -0
  907. package/templates/src/business/demo/demo.controller.ts +63 -0
  908. package/templates/src/business/demo/demo.model.ts +93 -0
  909. package/templates/src/business/demo/demo.service.ts +54 -0
  910. package/templates/src/business/notification/channel.ts +273 -0
  911. package/templates/src/business/notification/notification.controller.ts +175 -0
  912. package/templates/src/business/notification/notification.model.ts +22 -0
  913. package/templates/src/business/notification/notification.service.ts +579 -0
  914. package/templates/src/business/notification/receivers.ts +44 -0
  915. package/templates/src/business/notification/templates.ts +72 -0
  916. package/templates/src/business/sysConfig/sysConfig.controller.ts +87 -0
  917. package/templates/src/business/sysConfig/sysConfig.model.ts +44 -0
  918. package/templates/src/business/sysConfig/sysConfig.service.ts +32 -0
  919. package/templates/src/common/decorators.ts +1 -0
  920. package/templates/src/common/index.ts +8 -0
  921. package/templates/src/common/types.ts +51 -0
  922. package/templates/src/config/database.ts +4 -0
  923. package/templates/src/config/index.ts +2 -0
  924. package/templates/src/index.ts +40 -0
  925. package/templates/src/utils/aiClient.ts +1 -0
  926. package/templates/src/utils/banner.ts +1 -0
  927. package/templates/src/utils/emailClient.ts +1 -0
  928. package/templates/src/utils/logger.ts +1 -0
  929. package/templates/src/utils/redisClient.ts +1 -0
  930. package/templates/src/utils/smsClient.ts +1 -0
  931. package/templates/src/utils/unipushClient.ts +1 -0
  932. package/templates/src/utils/wecom.ts +1 -0
  933. package/templates/tsconfig.build.json +11 -0
  934. package/templates/tsconfig.json +21 -0
  935. package/templates/tsoa.json +29 -0
@@ -0,0 +1,579 @@
1
+ // 消息通知服务(V6.3):事件触发写入 + 站内信查询/已读管理 + 库存预警实时检查
2
+ // 三条独立链路:①站内信 sysMessage(始终写入)②外部渠道(EXTERNAL_NOTIFY_CHANNEL 单选旁路)
3
+ // ③APP 推送(APP_PUSH_ENABLED 独立开关旁路,不受外部渠道影响)
4
+ // emit 为旁路调用:内部捕获异常仅记日志,绝不回滚业务事务
5
+ import 'reflect-metadata';
6
+ import { Service } from 'typedi';
7
+ import { Prisma } from '@prisma/client';
8
+ import { prisma } from '../../config/database';
9
+ import config from '../../config';
10
+ import { MSG_TEMPLATES, MSG_TEMPLATE, JumpSpec } from './templates';
11
+ import { usersByRole, dedupeReceivers, ReceiverSpec } from './receivers';
12
+ import { ChannelAdapter, ChannelSendResult, WecomChannel, SmsChannel, EmailChannel, AppChannel } from './channel';
13
+ import { PageResult, paginateQuery } from '../../common';
14
+
15
+ /**
16
+ * 外部渠道适配器注册表(V6.2):按 EXTERNAL_NOTIFY_CHANNEL 选择唯一渠道。
17
+ * - sms = 阿里云短信
18
+ * - email = SMTP 邮件
19
+ * - wecom = 企业微信应用消息
20
+ * - 其他/空 = 不启用外部通知(仅站内信)
21
+ */
22
+ function resolveExternalChannel(): ChannelAdapter | null {
23
+ switch (config.notify.externalChannel) {
24
+ case 'sms':
25
+ return new SmsChannel();
26
+ case 'email':
27
+ return new EmailChannel();
28
+ case 'wecom':
29
+ return config.wecom.enabled ? new WecomChannel() : null;
30
+ default:
31
+ return null;
32
+ }
33
+ }
34
+
35
+ /** 当前启用的外部渠道(测试发送与推送共用) */
36
+ const EXTERNAL_ADAPTER: ChannelAdapter | null = resolveExternalChannel();
37
+
38
+ /**
39
+ * APP 推送适配器(V6.3,独立链路):仅由 APP_PUSH_ENABLED 开关控制,与外部渠道互不影响。
40
+ * 未开启开关时为 null(站内信与外部渠道照常)。
41
+ */
42
+ const APP_ADAPTER: ChannelAdapter | null = config.appPush.enabled ? new AppChannel() : null;
43
+
44
+ /** 测试推送结果(逐人明细,供测试界面展示) */
45
+ export interface TestSendResult {
46
+ /** 有效接收人总数 */
47
+ total: number;
48
+ /** 成功发送人数 */
49
+ sentCount: number;
50
+ /** 无效的用户 ID(不存在/已停用) */
51
+ invalidIds: string[];
52
+ /** 成功发送的用户 */
53
+ sentUsers: {
54
+ id: string;
55
+ name: string | null;
56
+ phone: string | null;
57
+ email: string | null;
58
+ pushCid: string | null;
59
+ }[];
60
+ /** 发送失败的用户(未绑定企微 / 无手机号 / 无邮箱 / 未上报 cid / 发送报错) */
61
+ failedUsers: {
62
+ id: string;
63
+ name: string | null;
64
+ phone: string | null;
65
+ email: string | null;
66
+ pushCid: string | null;
67
+ reason: string;
68
+ }[];
69
+ }
70
+
71
+ @Service()
72
+ export class NotificationService {
73
+ /**
74
+ * 事件触发入口:解析接收人 → 渲染模板 → 批量写入
75
+ * @param code 模板编码(唯一引用 MSG_TEMPLATE 枚举)
76
+ * @param vars 模板变量(含 bizId/bizId2 业务关联键;接收人解析所需字段)
77
+ * @param operatorId 触发操作人(系统自动触发时为空)
78
+ */
79
+ async emit(code: MSG_TEMPLATE, vars: Record<string, any>, operatorId?: string | null): Promise<void> {
80
+ try {
81
+ const def = MSG_TEMPLATES[code];
82
+ if (!def) {
83
+ console.error('[notify] 未知模板编码:', code);
84
+ return;
85
+ }
86
+ // 去重窗口(如库存预警 6 小时不重复发送)
87
+ if (def.dedupe) {
88
+ const since = new Date(Date.now() - def.dedupe.windowMs);
89
+ const existed = await prisma.sysMessage.findFirst({
90
+ where: {
91
+ templateCode: code,
92
+ createdAt: { gte: since },
93
+ ...def.dedupe.where(vars),
94
+ },
95
+ select: { id: true },
96
+ });
97
+ if (existed) return;
98
+ }
99
+
100
+ let receivers = await def.resolveReceivers(vars);
101
+ // 兜底:接收人集合为空时降级通知 admin,避免消息丢失(extraData 标记 fallback)
102
+ const fallback = receivers.length === 0;
103
+ if (fallback) {
104
+ receivers = await usersByRole('admin');
105
+ if (receivers.length === 0) return;
106
+ }
107
+
108
+ const content = def.render(vars);
109
+ const jump = def.jump(vars);
110
+ const effectiveReceivers = receivers.filter((r): r is ReceiverSpec & { userId: string } => Boolean(r.userId));
111
+ await prisma.sysMessage.createMany({
112
+ data: effectiveReceivers.map((r) => ({
113
+ msgType: def.msgType,
114
+ title: def.title,
115
+ content,
116
+ templateCode: code,
117
+ receiverUserId: r.userId,
118
+ receiverRoleCode: r.roleCode ?? null,
119
+ operatorId: operatorId ?? null,
120
+ bizType: def.bizType,
121
+ bizId: vars.bizId ?? null,
122
+ bizId2: vars.bizId2 ?? null,
123
+ extraData: { vars, jump, fallback: fallback || undefined } as any,
124
+ })),
125
+ });
126
+ // 外部渠道推送(旁路:短信/邮件/企微,按 EXTERNAL_NOTIFY_CHANNEL 单选)
127
+ await this.pushExternal(receivers, {
128
+ code,
129
+ title: def.title,
130
+ content,
131
+ jump,
132
+ bizType: def.bizType,
133
+ bizId: vars.bizId ?? null,
134
+ });
135
+ // APP 推送(独立链路旁路:APP_PUSH_ENABLED 开关,不受外部渠道影响)
136
+ await this.pushApp(receivers, {
137
+ code,
138
+ title: def.title,
139
+ content,
140
+ jump,
141
+ bizType: def.bizType,
142
+ bizId: vars.bizId ?? null,
143
+ });
144
+ } catch (e) {
145
+ // 通知为旁路:失败仅记日志,不影响业务主流程
146
+ console.error('[notify] emit 失败:', code, (e as Error).message);
147
+ }
148
+ }
149
+
150
+ /**
151
+ * 外部渠道推送(旁路):发送并落发送日志
152
+ * 全部异常内部消化——推送失败绝不向上抛出,保证 emit 对业务零影响
153
+ */
154
+ private async pushExternal(
155
+ receivers: ReceiverSpec[],
156
+ payload: { code: string; title: string; content: string; jump: JumpSpec | null; bizType: string; bizId: string | null },
157
+ ): Promise<void> {
158
+ const adapter = EXTERNAL_ADAPTER;
159
+ if (!adapter) return;
160
+ const logBase: Prisma.NotificationSendLogUncheckedCreateInput = {
161
+ channel: adapter.channel,
162
+ templateCode: payload.code,
163
+ title: payload.title,
164
+ content: payload.content,
165
+ receiverUserIds: JSON.stringify(receivers.map((r) => r.userId)),
166
+ bizType: payload.bizType,
167
+ bizId: payload.bizId,
168
+ };
169
+ try {
170
+ const result: ChannelSendResult = await adapter.send({
171
+ templateCode: payload.code,
172
+ title: payload.title,
173
+ content: payload.content,
174
+ url: this.buildJumpUrl(payload.jump),
175
+ bizType: payload.bizType,
176
+ bizId: payload.bizId ?? undefined,
177
+ receivers,
178
+ });
179
+ await prisma.notificationSendLog.create({
180
+ data: {
181
+ ...logBase,
182
+ externalIds: result.externalIds.length ? JSON.stringify(result.externalIds) : null,
183
+ // 全部接收人未解析到外部标识时记为 skipped(短信=无手机号;企微=未绑定)
184
+ status: result.externalIds.length ? 'success' : 'skipped',
185
+ },
186
+ });
187
+ } catch (e) {
188
+ await prisma.notificationSendLog
189
+ .create({
190
+ data: {
191
+ ...logBase,
192
+ status: 'failed',
193
+ failReason: (e as Error).message.slice(0, 500),
194
+ },
195
+ })
196
+ .catch((logErr) => console.error('[notify] 发送日志落库失败:', (logErr as Error).message));
197
+ console.error(`[notify] ${adapter.channel} 推送失败:`, (e as Error).message);
198
+ }
199
+ }
200
+
201
+ /**
202
+ * APP 推送(独立链路旁路):与 pushExternal 并列的旁路推送,按 APP_ADAPTER 发送并落发送日志。
203
+ * 配置不完整时静默跳过(不阻塞站内信与外部渠道);全部异常内部消化。
204
+ */
205
+ private async pushApp(
206
+ receivers: ReceiverSpec[],
207
+ payload: { code: string; title: string; content: string; jump: JumpSpec | null; bizType: string; bizId: string | null },
208
+ ): Promise<void> {
209
+ const adapter = APP_ADAPTER;
210
+ if (!adapter || adapter.notConfiguredReason) return;
211
+ const logBase: Prisma.NotificationSendLogUncheckedCreateInput = {
212
+ channel: adapter.channel,
213
+ templateCode: payload.code,
214
+ title: payload.title,
215
+ content: payload.content,
216
+ receiverUserIds: JSON.stringify(receivers.map((r) => r.userId)),
217
+ bizType: payload.bizType,
218
+ bizId: payload.bizId,
219
+ };
220
+ try {
221
+ const result: ChannelSendResult = await adapter.send({
222
+ templateCode: payload.code,
223
+ title: payload.title,
224
+ content: payload.content,
225
+ url: this.buildJumpUrl(payload.jump),
226
+ bizType: payload.bizType,
227
+ bizId: payload.bizId ?? undefined,
228
+ receivers,
229
+ });
230
+ await prisma.notificationSendLog.create({
231
+ data: {
232
+ ...logBase,
233
+ externalIds: result.externalIds.length ? JSON.stringify(result.externalIds) : null,
234
+ // 全部接收人未上报 cid 时记为 skipped
235
+ status: result.externalIds.length ? 'success' : 'skipped',
236
+ },
237
+ });
238
+ } catch (e) {
239
+ await prisma.notificationSendLog
240
+ .create({
241
+ data: {
242
+ ...logBase,
243
+ status: 'failed',
244
+ failReason: (e as Error).message.slice(0, 500),
245
+ },
246
+ })
247
+ .catch((logErr) => console.error('[notify] 发送日志落库失败:', (logErr as Error).message));
248
+ console.error(`[notify] ${adapter.channel} 推送失败:`, (e as Error).message);
249
+ }
250
+ }
251
+
252
+ /**
253
+ * 外部通知测试推送接收人列表(仅管理员):启用用户 + 角色名 + 送达状态(是否绑定企微/是否有手机号)
254
+ * 同时返回当前启用的外部渠道信息,供测试界面按渠道渲染
255
+ */
256
+ async listReceivers(keyword?: string): Promise<{
257
+ channel: {
258
+ type: string;
259
+ dependency: 'wechat_userid' | 'phone' | 'email' | 'push_cid';
260
+ configured: boolean;
261
+ reason?: string;
262
+ };
263
+ users: {
264
+ id: string;
265
+ username: string;
266
+ name: string | null;
267
+ phone: string | null;
268
+ email: string | null;
269
+ roleNames: string[];
270
+ deliverable: boolean;
271
+ }[];
272
+ }> {
273
+ const where: Prisma.UserWhereInput = { status: 'active' };
274
+ if (keyword?.trim()) {
275
+ const kw = keyword.trim();
276
+ where.OR = [
277
+ { name: { contains: kw } },
278
+ { username: { contains: kw } },
279
+ { phone: { contains: kw } },
280
+ { email: { contains: kw } },
281
+ ];
282
+ }
283
+ const users = await prisma.user.findMany({
284
+ where,
285
+ select: {
286
+ id: true,
287
+ username: true,
288
+ name: true,
289
+ phone: true,
290
+ email: true,
291
+ wechatUserid: true,
292
+ userRoles: { select: { role: { select: { name: true } } } },
293
+ },
294
+ orderBy: { createdAt: 'asc' },
295
+ });
296
+ const adapter = EXTERNAL_ADAPTER;
297
+ return {
298
+ channel: {
299
+ type: adapter?.channel ?? 'none',
300
+ dependency: adapter?.receiverDependency ?? 'phone',
301
+ configured: adapter ? !adapter.notConfiguredReason : false,
302
+ reason: adapter?.notConfiguredReason,
303
+ },
304
+ users: users.map((u) => ({
305
+ id: u.id,
306
+ username: u.username,
307
+ name: u.name,
308
+ phone: u.phone,
309
+ email: u.email,
310
+ roleNames: u.userRoles.map((ur) => ur.role.name),
311
+ // 企微渠道看是否绑定 userid;短信渠道看是否有手机号;邮件渠道看是否有邮箱
312
+ deliverable:
313
+ adapter?.receiverDependency === 'phone'
314
+ ? !!u.phone
315
+ : adapter?.receiverDependency === 'email'
316
+ ? !!u.email
317
+ : !!u.wechatUserid,
318
+ })),
319
+ };
320
+ }
321
+
322
+ /**
323
+ * 外部通知测试发送(仅管理员):按当前渠道(EXTERNAL_NOTIFY_CHANNEL)发送,落发送日志,返回逐人结果
324
+ * 企微渠道:未绑定 userid 的用户自动按手机号解析;短信渠道:仅需手机号即可送达;邮件渠道:仅需邮箱即可送达
325
+ */
326
+ async testSend(payload: { receiverUserIds: string[]; title?: string; content: string }): Promise<TestSendResult> {
327
+ const adapter = EXTERNAL_ADAPTER;
328
+ if (!adapter) throw new Error('未启用外部通知:请配置 EXTERNAL_NOTIFY_CHANNEL(sms / email / wecom)');
329
+ if (adapter.notConfiguredReason) throw new Error(adapter.notConfiguredReason);
330
+
331
+ const userIds = [...new Set(payload.receiverUserIds ?? [])];
332
+ if (userIds.length === 0) throw new Error('请选择至少一位接收人');
333
+ const content = payload.content?.trim();
334
+ if (!content) throw new Error('请输入发送内容');
335
+ const title = payload.title?.trim() || '消息推送测试';
336
+
337
+ const users = await prisma.user.findMany({
338
+ where: { id: { in: userIds }, status: 'active' },
339
+ select: { id: true, name: true, phone: true, email: true, wechatUserid: true, pushCid: true },
340
+ });
341
+ const validIds = new Set(users.map((u) => u.id));
342
+ const invalidIds = userIds.filter((id) => !validIds.has(id));
343
+ if (users.length === 0) throw new Error('所选接收人不存在或已停用');
344
+
345
+ const receivers: ReceiverSpec[] = users.map((u) => ({ userId: u.id }));
346
+ const result = await adapter.send({
347
+ templateCode: 'TEST_SEND',
348
+ title,
349
+ content,
350
+ url: config.wecom.h5BaseUrl || '',
351
+ bizType: 'TEST',
352
+ receivers,
353
+ });
354
+ const failureMap = new Map(result.failures.map((f) => [f.userId, f.reason]));
355
+
356
+ const logBase: Prisma.NotificationSendLogUncheckedCreateInput = {
357
+ channel: adapter.channel,
358
+ templateCode: 'TEST_SEND',
359
+ title,
360
+ content,
361
+ receiverUserIds: JSON.stringify(users.map((u) => u.id)),
362
+ bizType: 'TEST',
363
+ };
364
+ await prisma.notificationSendLog.create({
365
+ data: {
366
+ ...logBase,
367
+ externalIds: result.externalIds.length ? JSON.stringify(result.externalIds) : null,
368
+ // 全部接收人未解析到外部标识时记为 skipped
369
+ status: result.externalIds.length ? 'success' : 'skipped',
370
+ },
371
+ });
372
+
373
+ return {
374
+ total: users.length,
375
+ sentCount: result.externalIds.length,
376
+ invalidIds,
377
+ sentUsers: users
378
+ .filter((u) => !failureMap.has(u.id))
379
+ .map((u) => ({ id: u.id, name: u.name, phone: u.phone, email: u.email, pushCid: u.pushCid })),
380
+ failedUsers: users
381
+ .filter((u) => failureMap.has(u.id))
382
+ .map((u) => ({
383
+ id: u.id,
384
+ name: u.name,
385
+ phone: u.phone,
386
+ email: u.email,
387
+ pushCid: u.pushCid,
388
+ reason: failureMap.get(u.id)!,
389
+ })),
390
+ };
391
+ }
392
+
393
+ /**
394
+ * APP 推送测试接收人列表(仅管理员,独立链路):APP 推送启用状态 + 用户列表 + 是否已上报 cid
395
+ */
396
+ async appListReceivers(keyword?: string): Promise<{
397
+ channel: { type: string; dependency: 'push_cid'; configured: boolean; reason?: string };
398
+ users: {
399
+ id: string;
400
+ username: string;
401
+ name: string | null;
402
+ phone: string | null;
403
+ pushCid: string | null;
404
+ roleNames: string[];
405
+ deliverable: boolean;
406
+ }[];
407
+ }> {
408
+ const where: Prisma.UserWhereInput = { status: 'active' };
409
+ if (keyword?.trim()) {
410
+ const kw = keyword.trim();
411
+ where.OR = [
412
+ { name: { contains: kw } },
413
+ { username: { contains: kw } },
414
+ { phone: { contains: kw } },
415
+ ];
416
+ }
417
+ const users = await prisma.user.findMany({
418
+ where,
419
+ select: {
420
+ id: true,
421
+ username: true,
422
+ name: true,
423
+ phone: true,
424
+ pushCid: true,
425
+ userRoles: { select: { role: { select: { name: true } } } },
426
+ },
427
+ orderBy: { createdAt: 'asc' },
428
+ });
429
+ const adapter = APP_ADAPTER;
430
+ return {
431
+ channel: {
432
+ type: 'app',
433
+ dependency: 'push_cid',
434
+ configured: adapter ? !adapter.notConfiguredReason : false,
435
+ reason: adapter?.notConfiguredReason,
436
+ },
437
+ users: users.map((u) => ({
438
+ id: u.id,
439
+ username: u.username,
440
+ name: u.name,
441
+ phone: u.phone,
442
+ pushCid: u.pushCid,
443
+ roleNames: u.userRoles.map((ur) => ur.role.name),
444
+ // APP 渠道看是否已登录过 App 并上报 cid
445
+ deliverable: !!u.pushCid,
446
+ })),
447
+ };
448
+ }
449
+
450
+ /**
451
+ * APP 推送测试发送(仅管理员,独立链路):按 APP_PUSH_ENABLED 开关推送,落发送日志,返回逐人结果
452
+ * 只有登录过 App 并上报过 cid 的用户可送达
453
+ */
454
+ async appTestSend(payload: { receiverUserIds: string[]; title?: string; content: string }): Promise<TestSendResult> {
455
+ const adapter = APP_ADAPTER;
456
+ if (!adapter) throw new Error('APP 推送未启用:请配置 APP_PUSH_ENABLED=true');
457
+ if (adapter.notConfiguredReason) throw new Error(adapter.notConfiguredReason);
458
+
459
+ const userIds = [...new Set(payload.receiverUserIds ?? [])];
460
+ if (userIds.length === 0) throw new Error('请选择至少一位接收人');
461
+ const content = payload.content?.trim();
462
+ if (!content) throw new Error('请输入发送内容');
463
+ const title = payload.title?.trim() || 'APP 推送测试';
464
+
465
+ const users = await prisma.user.findMany({
466
+ where: { id: { in: userIds }, status: 'active' },
467
+ select: { id: true, name: true, phone: true, email: true, pushCid: true },
468
+ });
469
+ const validIds = new Set(users.map((u) => u.id));
470
+ const invalidIds = userIds.filter((id) => !validIds.has(id));
471
+ if (users.length === 0) throw new Error('所选接收人不存在或已停用');
472
+
473
+ const receivers: ReceiverSpec[] = users.map((u) => ({ userId: u.id }));
474
+ const result = await adapter.send({
475
+ templateCode: 'TEST_SEND',
476
+ title,
477
+ content,
478
+ url: '',
479
+ bizType: 'TEST',
480
+ receivers,
481
+ });
482
+ const failureMap = new Map(result.failures.map((f) => [f.userId, f.reason]));
483
+
484
+ const logBase: Prisma.NotificationSendLogUncheckedCreateInput = {
485
+ channel: adapter.channel,
486
+ templateCode: 'TEST_SEND',
487
+ title,
488
+ content,
489
+ receiverUserIds: JSON.stringify(users.map((u) => u.id)),
490
+ bizType: 'TEST',
491
+ };
492
+ await prisma.notificationSendLog.create({
493
+ data: {
494
+ ...logBase,
495
+ externalIds: result.externalIds.length ? JSON.stringify(result.externalIds) : null,
496
+ status: result.externalIds.length ? 'success' : 'skipped',
497
+ },
498
+ });
499
+
500
+ return {
501
+ total: users.length,
502
+ sentCount: result.externalIds.length,
503
+ invalidIds,
504
+ sentUsers: users
505
+ .filter((u) => !failureMap.has(u.id))
506
+ .map((u) => ({ id: u.id, name: u.name, phone: u.phone, email: u.email, pushCid: u.pushCid })),
507
+ failedUsers: users
508
+ .filter((u) => failureMap.has(u.id))
509
+ .map((u) => ({
510
+ id: u.id,
511
+ name: u.name,
512
+ phone: u.phone,
513
+ email: u.email,
514
+ pushCid: u.pushCid,
515
+ reason: failureMap.get(u.id)!,
516
+ })),
517
+ };
518
+ }
519
+
520
+ /** 由模板 jump(path+query)拼接 admin H5 绝对地址,供 textcard 跳转 */
521
+ private buildJumpUrl(jump: JumpSpec | null): string {
522
+ const base = config.wecom.h5BaseUrl;
523
+ if (!jump || !base) return base || '';
524
+ const query = jump.query ? `?${new URLSearchParams(jump.query).toString()}` : '';
525
+ return `${base.replace(/\/+$/, '')}${jump.path}${query}`;
526
+ }
527
+
528
+ /** 分页查询当前用户消息(分类/已读筛选,按时间倒序) */
529
+ async getMessagesByPage(
530
+ userId: string,
531
+ params?: {
532
+ page?: number;
533
+ pageSize?: number;
534
+ msgType?: string;
535
+ isRead?: boolean;
536
+ },
537
+ ): Promise<PageResult<any>> {
538
+ const where: Record<string, any> = { receiverUserId: userId };
539
+ if (params?.msgType) where.msgType = params.msgType;
540
+ if (params?.isRead !== undefined) where.isRead = params.isRead;
541
+ const result = await paginateQuery<any>(
542
+ prisma.sysMessage,
543
+ { where, orderBy: { createdAt: 'desc' } },
544
+ params,
545
+ );
546
+ // 扁平化 extraData 中的跳转参数,供前端直接使用
547
+ const list = result.list.map((m: any) => {
548
+ const { extraData, ...rest } = m;
549
+ return { ...rest, jump: extraData?.jump ?? null };
550
+ });
551
+ return { list, pagination: result.pagination };
552
+ }
553
+
554
+ /** 未读消息数(顶栏红点) */
555
+ async getUnreadCount(userId: string): Promise<number> {
556
+ return prisma.sysMessage.count({ where: { receiverUserId: userId, isRead: false } });
557
+ }
558
+
559
+ /** 标记单条已读(仅限本人消息) */
560
+ async markRead(userId: string, id: string): Promise<boolean> {
561
+ const updated = await prisma.sysMessage.updateMany({
562
+ where: { id, receiverUserId: userId, isRead: false },
563
+ data: { isRead: true, readTime: new Date() },
564
+ });
565
+ return updated.count > 0;
566
+ }
567
+
568
+ /** 全部标记已读(仅限本人消息) */
569
+ async markAllRead(userId: string): Promise<number> {
570
+ const updated = await prisma.sysMessage.updateMany({
571
+ where: { receiverUserId: userId, isRead: false },
572
+ data: { isRead: true, readTime: new Date() },
573
+ });
574
+ return updated.count;
575
+ }
576
+
577
+ /** 接收人去重工具(供模板注册表内部使用的静态导出) */
578
+ static dedupeReceivers = dedupeReceivers;
579
+ }
@@ -0,0 +1,44 @@
1
+ // 接收人解析(通用化版):供应链角色解析(门店/仓库负责人)已随框架裁剪移除,
2
+ // 用户业务接收人解析规则(如按自定义角色/部门/自定义表)在此文件扩展。
3
+
4
+ /** 接收人描述:指定用户或按角色(可选字段形式,便于各类渠道统一读取 userId) */
5
+ export interface ReceiverSpec {
6
+ /** 直接指定用户 ID(优先) */
7
+ userId?: string;
8
+ /** 按角色编码(用户扩展业务接收人规则时可解析为 userId 后再下发) */
9
+ roleCode?: string;
10
+ }
11
+
12
+ /**
13
+ * 按角色编码解析用户列表(admin/manager/...)。
14
+ * 角色编码在 sys_roles.code 中定义。
15
+ */
16
+ export async function usersByRole(roleCode: string): Promise<ReceiverSpec[]> {
17
+ const { prisma } = await import('../../config/database.js');
18
+ const users = await prisma.user.findMany({
19
+ where: { userRoles: { some: { role: { code: roleCode, status: 'active' } } }, status: 'active' },
20
+ select: { id: true },
21
+ });
22
+ return users.map((u) => ({ userId: u.id }));
23
+ }
24
+
25
+ /** 接收人去重(按 userId/roleCode 去重,保留第一个) */
26
+ export function dedupeReceivers(specs: ReceiverSpec[]): ReceiverSpec[] {
27
+ const seenUser = new Set<string>();
28
+ const seenRole = new Set<string>();
29
+ const result: ReceiverSpec[] = [];
30
+ for (const s of specs) {
31
+ if (s.userId) {
32
+ if (!seenUser.has(s.userId)) {
33
+ seenUser.add(s.userId);
34
+ result.push(s);
35
+ }
36
+ } else if (s.roleCode) {
37
+ if (!seenRole.has(s.roleCode)) {
38
+ seenRole.add(s.roleCode);
39
+ result.push(s);
40
+ }
41
+ }
42
+ }
43
+ return result;
44
+ }
@@ -0,0 +1,72 @@
1
+ // 消息模板注册表(通用化版):枚举式集中管理,唯一维护入口
2
+ // 模板机制与框架解耦:业务节点触发点只引用 MSG_TEMPLATE 枚举,禁止散落字符串。
3
+ // 供应链模板(订货/出库/调拨/库存预警等)已在框架裁剪时移除,
4
+ // 用户业务模板在此文件扩展:新增枚举值 + 在 MSG_TEMPLATES 注册即可。
5
+ import {
6
+ ReceiverSpec,
7
+ usersByRole,
8
+ dedupeReceivers,
9
+ } from './receivers';
10
+
11
+ /** 消息模板编码(通用示例 3 个;用户业务模板在此扩展) */
12
+ export enum MSG_TEMPLATE {
13
+ SYSTEM_ANNOUNCEMENT = 'SYSTEM_ANNOUNCEMENT', // 系统公告(发送给 admin)
14
+ WELCOME_NOTIFY = 'WELCOME_NOTIFY', // 欢迎/引导通知(发送给指定用户)
15
+ TEST_NOTIFY = 'TEST_NOTIFY', // 测试通知(测试发送入口)
16
+ }
17
+
18
+ /** 前端跳转参数(admin 端消息中心点击跳转) */
19
+ export interface JumpSpec {
20
+ path: string;
21
+ query?: Record<string, string>;
22
+ }
23
+
24
+ /** 模板定义:类型 + 文案渲染 + 接收人解析 + 跳转 + 可选去重窗口 */
25
+ export interface TemplateDef {
26
+ code: MSG_TEMPLATE;
27
+ msgType: 'TODO' | 'PROGRESS' | 'WARNING';
28
+ bizType: string;
29
+ title: string;
30
+ render: (vars: Record<string, any>) => string;
31
+ resolveReceivers: (vars: Record<string, any>) => Promise<ReceiverSpec[]>;
32
+ jump: (vars: Record<string, any>) => JumpSpec;
33
+ /** 可选去重窗口:窗口期内同模板不重复发送(如库存预警 6 小时) */
34
+ dedupe?: {
35
+ windowMs: number;
36
+ where: (vars: Record<string, any>) => any;
37
+ };
38
+ }
39
+
40
+ /** 模板注册表(唯一维护入口) */
41
+ export const MSG_TEMPLATES: Record<MSG_TEMPLATE, TemplateDef> = {
42
+ [MSG_TEMPLATE.SYSTEM_ANNOUNCEMENT]: {
43
+ code: MSG_TEMPLATE.SYSTEM_ANNOUNCEMENT,
44
+ msgType: 'PROGRESS',
45
+ bizType: 'SYSTEM',
46
+ title: '📢 系统公告',
47
+ render: (v) => v.content ?? '',
48
+ resolveReceivers: async () => dedupeReceivers(await usersByRole('admin')),
49
+ jump: () => ({ path: '/notification' }),
50
+ },
51
+ [MSG_TEMPLATE.WELCOME_NOTIFY]: {
52
+ code: MSG_TEMPLATE.WELCOME_NOTIFY,
53
+ msgType: 'PROGRESS',
54
+ bizType: 'SYSTEM',
55
+ title: '👋 欢迎使用',
56
+ render: (v) => `欢迎 ${v.username ?? '用户'} 使用 Koa-Boot 示例项目。`,
57
+ resolveReceivers: async (v) => (v.userId ? [{ userId: v.userId }] : []),
58
+ jump: () => ({ path: '/notification' }),
59
+ },
60
+ [MSG_TEMPLATE.TEST_NOTIFY]: {
61
+ code: MSG_TEMPLATE.TEST_NOTIFY,
62
+ msgType: 'TODO',
63
+ bizType: 'SYSTEM',
64
+ title: '🔔 测试通知',
65
+ render: (v) => v.content ?? '',
66
+ resolveReceivers: async (v) => {
67
+ const ids = Array.isArray(v.receiverUserIds) ? v.receiverUserIds : [];
68
+ return dedupeReceivers(ids.map((id: string) => ({ userId: id })));
69
+ },
70
+ jump: () => ({ path: '/notification' }),
71
+ },
72
+ };