mm_os 3.3.1 → 4.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 (380) hide show
  1. package/LICENSE +21 -201
  2. package/README.md +491 -99
  3. package/README_EN.md +498 -0
  4. package/adapter/adapter.js +431 -0
  5. package/adapter/custom_persistence.js +660 -0
  6. package/adapter/mqtt.js +273 -0
  7. package/adapter/socket.js +113 -0
  8. package/adapter/web.js +67 -0
  9. package/adapter/websocket.js +146 -0
  10. package/com/api/com.json +5 -0
  11. package/{core/com → com}/api/config.tpl.json +8 -8
  12. package/com/api/drive.js +708 -0
  13. package/com/api/index.js +198 -0
  14. package/com/api/oauth.js +200 -0
  15. package/com/api/script.tpl.js +32 -0
  16. package/com/cmd/README.md +11 -0
  17. package/com/cmd/com.json +5 -0
  18. package/com/cmd/config.tpl.json +122 -0
  19. package/com/cmd/drive.js +1548 -0
  20. package/com/cmd/index.js +1066 -0
  21. package/com/cmd/msg.json +48 -0
  22. package/com/cmd/nlp.js +525 -0
  23. package/com/cmd/script.tpl.js +32 -0
  24. package/com/db/com.json +5 -0
  25. package/com/db/drive.js +1999 -0
  26. package/com/db/index.js +242 -0
  27. package/{core/com → com}/event/README.md +4 -4
  28. package/com/event/com.json +5 -0
  29. package/{core/com → com}/event/config.tpl.json +18 -18
  30. package/com/event/drive.js +59 -0
  31. package/com/event/index.js +409 -0
  32. package/com/event/script.tpl.js +23 -0
  33. package/com/mqtt/com.json +5 -0
  34. package/{core/com → com}/mqtt/config.tpl.json +3 -5
  35. package/com/mqtt/drive.js +676 -0
  36. package/com/mqtt/index.js +822 -0
  37. package/com/mqtt/mm_mqtt.js +425 -0
  38. package/com/mqtt/script.tpl.js +723 -0
  39. package/com/nav/com.json +5 -0
  40. package/com/nav/config.tpl.json +84 -0
  41. package/com/nav/drive.js +702 -0
  42. package/com/nav/index.js +231 -0
  43. package/{core/com → com}/nav/tpl/admin_pc/page_config.vue +280 -280
  44. package/{core/com → com}/nav/tpl/admin_pc/page_config_form.vue +194 -194
  45. package/com/nav/tpl/admin_pc/page_form.vue +180 -0
  46. package/com/nav/tpl/admin_pc/page_view.vue +124 -0
  47. package/com/nav/tpl/dev_pc/page_default.vue +247 -0
  48. package/com/nav/tpl/dev_pc/page_type.vue +313 -0
  49. package/com/nav/tpl/home_pc/page_default.vue +234 -0
  50. package/com/nav/tpl/home_pc/page_form.vue +137 -0
  51. package/com/nav/tpl/home_pc/page_list.vue +234 -0
  52. package/com/nav/tpl/home_pc/page_nav.vue +221 -0
  53. package/com/nav/tpl/home_pc/page_type.vue +234 -0
  54. package/com/nav/tpl/home_pc/page_view.vue +125 -0
  55. package/com/nav/tpl/home_phone/page_channel.vue +234 -0
  56. package/com/nav/tpl/home_phone/page_default.vue +234 -0
  57. package/com/nav/tpl/home_phone/page_form.vue +137 -0
  58. package/com/nav/tpl/home_phone/page_nav.vue +237 -0
  59. package/com/nav/tpl/home_phone/page_type.vue +234 -0
  60. package/com/nav/tpl/home_phone/page_view.vue +125 -0
  61. package/com/nav/viewmodel.js +446 -0
  62. package/com/param/com.json +5 -0
  63. package/{core/com → com}/param/config.tpl.json +7 -1
  64. package/com/param/drive.js +502 -0
  65. package/com/param/index.js +155 -0
  66. package/com/param/script.tpl.js +12 -0
  67. package/com/pendant/com.json +5 -0
  68. package/{core/com/component → com/pendant}/config.tpl.json +15 -13
  69. package/com/pendant/drive.js +204 -0
  70. package/com/pendant/index.js +441 -0
  71. package/com/pendant/pendant.html +16 -0
  72. package/com/pendant/script.tpl.js +18 -0
  73. package/com/socket/com.json +5 -0
  74. package/com/socket/config.tpl.json +12 -0
  75. package/com/socket/drive.js +651 -0
  76. package/com/socket/index.js +351 -0
  77. package/com/socket/script.tpl.js +41 -0
  78. package/com/sql/com.json +5 -0
  79. package/{core/com → com}/sql/config.tpl.json +13 -9
  80. package/com/sql/drive.js +1259 -0
  81. package/com/sql/index.js +150 -0
  82. package/com/sql/script.tpl.js +47 -0
  83. package/com/static/com.json +5 -0
  84. package/{core/com → com}/static/config.tpl.json +10 -6
  85. package/com/static/drive.js +194 -0
  86. package/com/static/index.js +226 -0
  87. package/com/static/script.tpl.js +28 -0
  88. package/com/task/com.json +5 -0
  89. package/{core/com → com}/task/config.tpl.json +4 -6
  90. package/com/task/drive.js +405 -0
  91. package/com/task/index.js +148 -0
  92. package/com/task/script.tpl.js +37 -0
  93. package/com/template/com.json +5 -0
  94. package/com/template/config.tpl.json +16 -0
  95. package/com/template/drive.js +80 -0
  96. package/com/template/index.js +141 -0
  97. package/com.js +156 -0
  98. package/common/README.md +2 -0
  99. package/common/handler/msg/handler.json +22 -0
  100. package/common/handler/msg/index.js +23 -0
  101. package/common/handler/player/handler.json +22 -0
  102. package/common/handler/player/index.js +287 -0
  103. package/common/handler/user/handler.json +22 -0
  104. package/common/handler/user/index.js +23 -0
  105. package/common/middleware/web_after/index.js +29 -0
  106. package/common/middleware/web_after/middleware.json +9 -0
  107. package/common/middleware/web_base/index.js +113 -0
  108. package/common/middleware/web_base/middleware.json +19 -0
  109. package/common/middleware/web_before/index.js +33 -0
  110. package/common/middleware/web_before/middleware.json +9 -0
  111. package/common/middleware/web_cors/index.js +87 -0
  112. package/common/middleware/web_cors/middleware.json +24 -0
  113. package/common/middleware/web_error/index.js +119 -0
  114. package/common/middleware/web_error/middleware.json +18 -0
  115. package/common/middleware/web_ip/index.js +15 -0
  116. package/common/middleware/web_ip/middleware.json +14 -0
  117. package/common/middleware/web_logger/index.js +156 -0
  118. package/common/middleware/web_logger/middleware.json +14 -0
  119. package/common/middleware/web_main/index.js +24 -0
  120. package/common/middleware/web_main/middleware.json +9 -0
  121. package/common/middleware/web_static/index.js +73 -0
  122. package/common/middleware/web_static/middleware.json +54 -0
  123. package/common/middleware/web_waf/index.js +385 -0
  124. package/common/middleware/web_waf/middleware.json +13 -0
  125. package/common/model/msg/index.js +88 -0
  126. package/common/model/msg/model.json +401 -0
  127. package/common/model/player/index.js +63 -0
  128. package/common/model/player/model.json +185 -0
  129. package/common/model/user/index.js +11 -0
  130. package/common/model/user/model.json +219 -0
  131. package/core/app/config.tpl.json +67 -0
  132. package/core/app/index.js +632 -0
  133. package/core/app/script.tpl.js +52 -0
  134. package/core/channel/index.js +899 -0
  135. package/core/channel/matcher.js +585 -0
  136. package/core/com/config.tpl.json +16 -0
  137. package/core/com/index.js +74 -0
  138. package/core/com/script.tpl.js +5 -0
  139. package/core/component/component.js +42 -0
  140. package/core/component/config.tpl.json +63 -0
  141. package/core/component/index.js +273 -0
  142. package/core/component/script.tpl.js +19 -0
  143. package/core/controller/config.tpl.json +14 -0
  144. package/core/controller/index.js +373 -0
  145. package/core/controller/script.tpl.js +27 -0
  146. package/core/factory/config.tpl.json +14 -0
  147. package/core/factory/entity.js +275 -0
  148. package/core/factory/index.js +241 -0
  149. package/core/factory/script.tpl.js +16 -0
  150. package/core/game/bat/index.js +137 -0
  151. package/core/game/bat/world.js +622 -0
  152. package/core/game/config.tpl.json +16 -0
  153. package/core/game/entity_admin.js +230 -0
  154. package/core/game/index.js +186 -0
  155. package/core/handler/config.tpl.json +22 -0
  156. package/core/handler/index.js +181 -0
  157. package/core/handler/script.tpl.js +23 -0
  158. package/core/logic/config.tpl.json +14 -0
  159. package/core/logic/index.js +59 -0
  160. package/core/logic/script.tpl.js +19 -0
  161. package/core/middleware/config.tpl.json +16 -0
  162. package/core/middleware/index.js +125 -0
  163. package/core/middleware/script.tpl.js +37 -0
  164. package/core/mod/config.tpl.json +22 -0
  165. package/core/mod/index.js +130 -0
  166. package/core/mod/script.tpl.js +34 -0
  167. package/core/model/config.tpl.json +219 -0
  168. package/core/model/index.js +272 -0
  169. package/core/model/model.js +27 -0
  170. package/core/model/script.tpl.js +20 -0
  171. package/core/notifier/config.tpl.json +14 -0
  172. package/core/notifier/index.js +77 -0
  173. package/core/notifier/script.tpl.js +20 -0
  174. package/core/plugin/config.tpl.json +24 -0
  175. package/core/plugin/index.js +232 -0
  176. package/core/plugin/script.tpl.js +51 -0
  177. package/core/pusher/config.tpl.json +14 -0
  178. package/core/pusher/index.js +161 -0
  179. package/core/pusher/script.tpl.js +20 -0
  180. package/core/room/bat/index.js +170 -0
  181. package/core/room/bat/room.js +524 -0
  182. package/core/room/config.tpl.json +20 -0
  183. package/core/room/index.js +249 -0
  184. package/core/room/room.js +61 -0
  185. package/core/scene/config.tpl.json +14 -0
  186. package/core/scene/index.js +466 -0
  187. package/core/scene/loop.js +1255 -0
  188. package/core/scene/map.js +28 -0
  189. package/core/scene/script.tpl.js +22 -0
  190. package/core/sender/config.tpl.json +14 -0
  191. package/core/sender/index.js +79 -0
  192. package/core/sender/script.tpl.js +20 -0
  193. package/core/service/config.tpl.json +14 -0
  194. package/core/service/index.js +100 -0
  195. package/core/service/script.tpl.js +25 -0
  196. package/core/store/config.tpl.json +26 -0
  197. package/core/store/index.js +1755 -0
  198. package/core/store/script.tpl.js +22 -0
  199. package/core/store/sql.js +1464 -0
  200. package/core/system/config.tpl.json +18 -0
  201. package/core/system/index.js +312 -0
  202. package/core/system/script.tpl.js +77 -0
  203. package/core/view/config.tpl.json +14 -0
  204. package/core/view/index.js +91 -0
  205. package/core/view/script.tpl.js +20 -0
  206. package/core/zone/bat/index.js +725 -0
  207. package/core/zone/config.tpl.json +54 -0
  208. package/core/zone/index.js +614 -0
  209. package/core/zone/script.tpl.js +10 -0
  210. package/core/zone/zone_bat.js +136 -0
  211. package/core//345/237/272/347/261/273/346/250/241/345/235/227/346/270/205/345/215/225.md +24 -0
  212. package/index.js +17 -333
  213. package/os.js +57 -0
  214. package/package.json +58 -58
  215. package/server.js +598 -0
  216. package/README.en.md +0 -36
  217. package/conf.json +0 -3
  218. package/core/base/mqtt/index.js +0 -1110
  219. package/core/base/mqtt/lib.js +0 -40
  220. package/core/base/web/index.js +0 -245
  221. package/core/com/api/com.json +0 -4
  222. package/core/com/api/drive.js +0 -668
  223. package/core/com/api/index.js +0 -108
  224. package/core/com/api/oauth.js +0 -158
  225. package/core/com/api/script.js +0 -32
  226. package/core/com/app/README.md +0 -3
  227. package/core/com/app/com.json +0 -4
  228. package/core/com/app/config.tpl.json +0 -16
  229. package/core/com/app/drive.js +0 -309
  230. package/core/com/app/index.js +0 -211
  231. package/core/com/app/script.js +0 -155
  232. package/core/com/cmd/com.json +0 -4
  233. package/core/com/cmd/config.tpl.json +0 -66
  234. package/core/com/cmd/drive.js +0 -513
  235. package/core/com/cmd/index.js +0 -354
  236. package/core/com/cmd/old/5w2h.js +0 -54
  237. package/core/com/cmd/old/drive.js +0 -423
  238. package/core/com/cmd/script.js +0 -11
  239. package/core/com/component/README.md +0 -3
  240. package/core/com/component/com.json +0 -4
  241. package/core/com/component/component.html +0 -16
  242. package/core/com/component/drive.js +0 -197
  243. package/core/com/component/index.js +0 -312
  244. package/core/com/component/script.js +0 -18
  245. package/core/com/db/com.json +0 -4
  246. package/core/com/db/drive.js +0 -1160
  247. package/core/com/db/index.js +0 -176
  248. package/core/com/event/com.json +0 -4
  249. package/core/com/event/drive.js +0 -133
  250. package/core/com/event/index.js +0 -345
  251. package/core/com/event/script.js +0 -26
  252. package/core/com/eventer/com.js +0 -477
  253. package/core/com/eventer/com.json +0 -4
  254. package/core/com/middleware/com.js +0 -154
  255. package/core/com/middleware/com.json +0 -4
  256. package/core/com/middleware/config.tpl.json +0 -8
  257. package/core/com/middleware/script.js +0 -9
  258. package/core/com/mqtt/com.json +0 -4
  259. package/core/com/mqtt/drive.js +0 -600
  260. package/core/com/mqtt/index.js +0 -572
  261. package/core/com/mqtt/mm_mqtt.js +0 -330
  262. package/core/com/mqtt/script.js +0 -604
  263. package/core/com/msg/com.js +0 -296
  264. package/core/com/msg/com.json +0 -4
  265. package/core/com/nav/com.json +0 -4
  266. package/core/com/nav/config.tpl.json +0 -75
  267. package/core/com/nav/drive.js +0 -549
  268. package/core/com/nav/index.js +0 -182
  269. package/core/com/nav/tpl/admin_pc/page_form.vue +0 -180
  270. package/core/com/nav/tpl/admin_pc/page_view.vue +0 -124
  271. package/core/com/nav/tpl/dev_pc/page_default.vue +0 -247
  272. package/core/com/nav/tpl/dev_pc/page_type.vue +0 -313
  273. package/core/com/nav/tpl/home_pc/page_default.vue +0 -234
  274. package/core/com/nav/tpl/home_pc/page_form.vue +0 -137
  275. package/core/com/nav/tpl/home_pc/page_list.vue +0 -234
  276. package/core/com/nav/tpl/home_pc/page_nav.vue +0 -221
  277. package/core/com/nav/tpl/home_pc/page_type.vue +0 -234
  278. package/core/com/nav/tpl/home_pc/page_view.vue +0 -125
  279. package/core/com/nav/tpl/home_phone/page_channel.vue +0 -234
  280. package/core/com/nav/tpl/home_phone/page_default.vue +0 -234
  281. package/core/com/nav/tpl/home_phone/page_form.vue +0 -137
  282. package/core/com/nav/tpl/home_phone/page_nav.vue +0 -237
  283. package/core/com/nav/tpl/home_phone/page_type.vue +0 -234
  284. package/core/com/nav/tpl/home_phone/page_view.vue +0 -125
  285. package/core/com/nav/viewmodel.js +0 -296
  286. package/core/com/param/drive.js +0 -366
  287. package/core/com/param/index.js +0 -80
  288. package/core/com/param/script.js +0 -12
  289. package/core/com/param/test.js +0 -98
  290. package/core/com/plugin/README.md +0 -3
  291. package/core/com/plugin/com.json +0 -4
  292. package/core/com/plugin/config.tpl.json +0 -26
  293. package/core/com/plugin/drive.js +0 -536
  294. package/core/com/plugin/index.js +0 -259
  295. package/core/com/plugin/script.js +0 -213
  296. package/core/com/rpc/com.json +0 -4
  297. package/core/com/rpc/drive.js +0 -160
  298. package/core/com/rpc/index.js +0 -87
  299. package/core/com/rpc/rpc.js +0 -118
  300. package/core/com/socket/com.json +0 -4
  301. package/core/com/socket/config.tpl.json +0 -14
  302. package/core/com/socket/drive.js +0 -403
  303. package/core/com/socket/index.js +0 -62
  304. package/core/com/socket/script.js +0 -42
  305. package/core/com/sql/drive.js +0 -1087
  306. package/core/com/sql/index.js +0 -83
  307. package/core/com/sql/script.js +0 -48
  308. package/core/com/static/com.json +0 -4
  309. package/core/com/static/drive.js +0 -220
  310. package/core/com/static/index.js +0 -149
  311. package/core/com/static/script.js +0 -28
  312. package/core/com/task/com.json +0 -4
  313. package/core/com/task/drive.js +0 -403
  314. package/core/com/task/index.js +0 -110
  315. package/core/com/task/script.js +0 -37
  316. package/core/com/timer/com.js +0 -217
  317. package/core/com/timer/com.json +0 -4
  318. package/core/com/tpl/com.js +0 -19
  319. package/core/com/tpl/com.json +0 -4
  320. package/lib/actions.js +0 -50
  321. package/lib/base.js +0 -361
  322. package/lib/com.js +0 -29
  323. package/lib/ref.js +0 -121
  324. package/middleware/cors/index.js +0 -119
  325. package/middleware/cors/middleware.json +0 -20
  326. package/middleware/csrf/index.js +0 -202
  327. package/middleware/csrf/middleware.json +0 -24
  328. package/middleware/ip_firewall/index.js +0 -476
  329. package/middleware/ip_firewall/middleware.json +0 -109
  330. package/middleware/mqtt_base/index.js +0 -10
  331. package/middleware/mqtt_base/middleware.json +0 -11
  332. package/middleware/security_audit/index.js +0 -543
  333. package/middleware/security_audit/middleware.json +0 -48
  334. package/middleware/waf/index.js +0 -343
  335. package/middleware/waf/middleware.json +0 -10
  336. package/middleware/waf_ddos/index.js +0 -520
  337. package/middleware/waf_ddos/middleware.json +0 -38
  338. package/middleware/waf_xss/index.js +0 -269
  339. package/middleware/waf_xss/middleware.json +0 -18
  340. package/middleware/web_after/index.js +0 -33
  341. package/middleware/web_after/middleware.json +0 -10
  342. package/middleware/web_base/index.js +0 -90
  343. package/middleware/web_base/middleware.json +0 -10
  344. package/middleware/web_before/index.js +0 -27
  345. package/middleware/web_before/middleware.json +0 -10
  346. package/middleware/web_check/index.js +0 -28
  347. package/middleware/web_check/middleware.json +0 -10
  348. package/middleware/web_main/index.js +0 -28
  349. package/middleware/web_main/middleware.json +0 -10
  350. package/middleware/web_proxy/index.js +0 -37
  351. package/middleware/web_proxy/middleware.json +0 -10
  352. package/middleware/web_render/index.js +0 -87
  353. package/middleware/web_render/middleware.json +0 -10
  354. package/middleware/web_socket/index.js +0 -34
  355. package/middleware/web_socket/middleware.json +0 -10
  356. package/middleware/web_static/index.js +0 -115
  357. package/middleware/web_static/middleware.json +0 -10
  358. /package/{core/com → com}/api/README.md +0 -0
  359. /package/{core/com → com}/db/README.md +0 -0
  360. /package/{core/com → com}/mqtt/README.md +0 -0
  361. /package/{core/com → com}/nav/README.md +0 -0
  362. /package/{core/com → com}/nav/tpl/admin_pc/page_channel.vue +0 -0
  363. /package/{core/com → com}/nav/tpl/admin_pc/page_default.vue +0 -0
  364. /package/{core/com → com}/nav/tpl/admin_pc/page_lang.vue +0 -0
  365. /package/{core/com → com}/nav/tpl/admin_pc/page_nav.vue +0 -0
  366. /package/{core/com → com}/nav/tpl/admin_pc/page_table.vue +0 -0
  367. /package/{core/com → com}/nav/tpl/admin_pc/page_type.vue +0 -0
  368. /package/{core/com → com}/nav/tpl/dev_pc/page_channel.vue +0 -0
  369. /package/{core/com → com}/nav/tpl/dev_pc/page_config.vue +0 -0
  370. /package/{core/com → com}/nav/tpl/dev_pc/page_form.vue +0 -0
  371. /package/{core/com → com}/nav/tpl/dev_pc/page_nav.vue +0 -0
  372. /package/{core/com → com}/nav/tpl/dev_pc/page_table.vue +0 -0
  373. /package/{core/com → com}/nav/tpl/home_pc/page_channel.vue +0 -0
  374. /package/{core/com → com}/nav/tpl/home_phone/page_list.vue +0 -0
  375. /package/{core/com → com}/param/README.md +0 -0
  376. /package/{core/com/cmd → com/pendant}/README.md +0 -0
  377. /package/{core/com → com}/socket/README.md +0 -0
  378. /package/{core/com → com}/sql/README.md +0 -0
  379. /package/{core/com → com}/static/README.md +0 -0
  380. /package/{core/com → com}/task/README.md +0 -0
@@ -1,30 +1,32 @@
1
1
  {
2
2
  // 应用于,根据应用而判断使用
3
- "app": "{1}",
3
+ "app": "${app || 'admin'}",
4
4
  // 名称, 用于动态增删改配置
5
- "name": "{0}",
5
+ "name": "${name}",
6
6
  // 标题, 用于查询时
7
- "title": "示例组件(挂件)",
7
+ "title": "${title || '挂件管理器'}",
8
8
  // 描述, 用于介绍该组件的作用
9
- "description": "暂无描述",
9
+ "description": "${description || '描述挂件使用方法'}",
10
10
  // 执行顺序, 数值越小的越优先显示
11
11
  "sort": 100,
12
12
  // 分组, 可以将特有的分一个组, 方便用户查询
13
- "group": "default",
13
+ "group": "${group || 'default'}",
14
14
  // 分类, 例如: 查询生活类、监测类、便民类
15
- "type": "默认",
15
+ "type": "${type || '默认'}",
16
16
  // 脚本文件, 非必传,可和渲染文件二选一传
17
- "func_file": "./component.js",
17
+ "main": "./pendant.js",
18
18
  // 渲染, 非必传,可和脚本文件二选一传
19
- "template": "./component.html",
19
+ "template": "./pendant.html",
20
20
  // 状态, 0为未开启 1为开启
21
21
  "state": 1,
22
22
  // 配置
23
23
  "options": [],
24
24
  // 定位 由后台指定的展示位置
25
- "location": [{
26
- "path": "/{1}/index",
27
- "position": "main",
28
- "available": 1
29
- }]
25
+ "location": [
26
+ {
27
+ "path": "/${app}/index",
28
+ "position": "main",
29
+ "available": 1
30
+ }
31
+ ]
30
32
  }
@@ -0,0 +1,204 @@
1
+ const compressing = require('compressing');
2
+ const Item = require('mm_machine').Drive;
3
+
4
+ /**
5
+ * 挂件驱动类
6
+ * @augments {Item}
7
+ * @class
8
+ */
9
+ class Drive extends Item {
10
+ static config = {
11
+ // 应用于,根据应用而判断使用
12
+ 'app': 'home',
13
+ // 分组, 可以将特有的分一个组, 方便用户查询
14
+ 'group': 'default',
15
+ // 分类, 例如: 查询生活类、监测类、便民类
16
+ 'type': '默认',
17
+ // 脚本文件
18
+ 'main': './pendant.js',
19
+ // 渲染
20
+ 'template': './pendant.html',
21
+ // 配置
22
+ 'options': [],
23
+ // 定位 由后台指定的展示位置
24
+ 'location': []
25
+ };
26
+
27
+ /**
28
+ * 构造函数
29
+ * @param {object} config 配置参数
30
+ * @param {object} parent 父对象
31
+ * @class
32
+ */
33
+ constructor(config, parent) {
34
+ super({ ...Drive.config, ...config }, parent);
35
+ // 默认启用热更新
36
+ this.mode = 3;
37
+ }
38
+ };
39
+
40
+ /**
41
+ * 创建一个参数模型
42
+ * @returns {object} 返回一个参数模型
43
+ */
44
+ Drive.prototype.model = function () {
45
+ return {
46
+ // 应用于,根据应用而判断使用
47
+ 'app': 'home',
48
+ // 名称, 用于动态增删改配置
49
+ 'name': 'demo',
50
+ // 标题, 用于查询时
51
+ 'title': '示例组件',
52
+ // 描述, 用于介绍该组件的作用
53
+ 'description': '暂无描述',
54
+ // 执行顺序, 数值越小的越优先显示
55
+ 'sort': 100,
56
+ // 分组, 可以将特有的分一个组, 方便用户查询
57
+ 'group': 'default',
58
+ // 分类, 例如: 查询生活类、监测类、便民类
59
+ 'type': '监测',
60
+ // 脚本文件, 非必传,可和渲染文件二选一传
61
+ 'main': './pendant.js',
62
+ // 渲染, 非必传,可和脚本文件二选一传
63
+ 'template': './pendant.html',
64
+ // 状态, 0为未开启 1为开启
65
+ 'state': 1,
66
+ // 配置
67
+ 'options': [],
68
+ // 定位 由后台指定的展示位置
69
+ 'location': [{
70
+ 'path': '/admin/index',
71
+ 'position': 'main',
72
+ 'available': 1
73
+ }]
74
+ };
75
+ };
76
+
77
+ /**
78
+ * 新建配置文件
79
+ * @param {string} file 文件
80
+ */
81
+ Drive.prototype.newConfig = function (file) {
82
+ var fl = __dirname + '/config.tpl.json';
83
+ if (fl.hasFile()) {
84
+ var text = fl.loadText();
85
+ if (text) {
86
+ var l = $.slash;
87
+ var arr = file.split(l);
88
+ arr = arr.slice(arr.indexOf('app'));
89
+ var app = arr[1];
90
+ var name = file.dirname();
91
+ text = text.replaceAll('{0}', name);
92
+ text = text.replaceAll('{1}', app);
93
+ file.saveText(text);
94
+ }
95
+ }
96
+ };
97
+
98
+ /**
99
+ * 新建脚本
100
+ * @param {string} file 文件
101
+ */
102
+ Drive.prototype.newScript = function (file) {
103
+ var fl = __dirname + '/script.tpl.js';
104
+ if (fl.hasFile()) {
105
+ var text = fl.loadText();
106
+ if (text) {
107
+ var l = $.slash;
108
+ var arr = file.split(l);
109
+ var name = arr[arr.length - 2];
110
+ text = text.replaceAll('{0}', name);
111
+ file.saveText(text);
112
+ }
113
+ }
114
+
115
+ var file_html = './pendant.html'.fullname(file.dirname());
116
+ if (!file_html.hasFile()) {
117
+ var flh = __dirname + '/pendant.html';
118
+ if (flh.hasFile()) {
119
+ var html = flh.loadText();
120
+ file_html.saveText(html);
121
+ }
122
+ }
123
+ };
124
+
125
+ /**
126
+ * 获取配置参数
127
+ * @param {object} body 设置配置
128
+ */
129
+ Drive.prototype.designOption = function (body) {
130
+ var cg = this.config;
131
+ if (Array.isArray(body)) {
132
+ cg.options = body;
133
+ } else {
134
+ var options = cg.options || [];
135
+ var option = options.getObj({
136
+ name: body.name
137
+ });
138
+ if (option) {
139
+ Object.assign(option, body);
140
+ } else {
141
+ options.push(body);
142
+ }
143
+ cg.options = options;
144
+ }
145
+ };
146
+
147
+ /**
148
+ * 挂件模板
149
+ * @param {object} ctx 请求上下文
150
+ * @param {object} db 数据管理器,如: { next: async function{}, ret: {} }
151
+ * @returns {object} 执行结果
152
+ */
153
+ Drive.prototype.tpl = async function (ctx, db) {
154
+ var html_file = this.config.template || './pendant.html';
155
+ return html_file.fullname(this._getDir()).loadText();
156
+ };
157
+
158
+ /**
159
+ * 组件主函数
160
+ * @param {object} ctx 请求上下文
161
+ * @param {object} db 数据管理器,如: { next: async function{}, ret: {} }
162
+ * @returns {object} 执行结果
163
+ */
164
+ Drive.prototype.main = async function (ctx, db) {
165
+ var model = {};
166
+ var html_file = this.config.template || './pendant.html';
167
+ return db.tpl.view(html_file.fullname(this._getDir()), model);
168
+ };
169
+
170
+ /**
171
+ * 压缩主题模板
172
+ * @param {string} zip_dir 要压缩的目录
173
+ * @returns {string} 打包成功返回压缩包文件地址
174
+ */
175
+ Drive.prototype.zip = async function (zip_dir = '/static/file/zip/') {
176
+ var dir = this._getDir();
177
+ var file = ('./' + this.config.name + '.zip').fullname(zip_dir);
178
+ file.addDir();
179
+ await compressing.zip.compressDir(dir, file);
180
+ if (file.hasFile()) {
181
+ return file;
182
+ }
183
+ return null;
184
+ };
185
+
186
+ /**
187
+ * 获取模型
188
+ * @param {string} type 模型类型
189
+ * @returns {object} 返回获取到的模型
190
+ */
191
+ Drive.prototype.getModel = function (type) {
192
+ let model = { ...this.config };
193
+ let dir = this._getDir();
194
+ let l = $.slash;
195
+ let app_name = dir.between('app' + l, l);
196
+ let plugin_name = dir.between('plugin' + l, l);
197
+ let name = dir.basename();
198
+ model.app = app_name;
199
+ model.plugin = plugin_name;
200
+ model.name = model.name || app_name + '_' + name;
201
+ return model;
202
+ };
203
+
204
+ module.exports = Drive;
@@ -0,0 +1,441 @@
1
+ const Manager = require('mm_machine').Manager;
2
+ const Drive = require('./drive');
3
+
4
+ /**
5
+ * Pendant 挂件类
6
+ * @augments {Manager}
7
+ * @class
8
+ */
9
+ class Pendant extends Manager {
10
+ /**
11
+ * 配置参数
12
+ * @type {object}
13
+ */
14
+ static config = {
15
+ /**
16
+ * 名称
17
+ * @type {string}
18
+ */
19
+ name: '',
20
+ /**
21
+ * 标题
22
+ * @type {string}
23
+ */
24
+ title: '数据库管理',
25
+ /**
26
+ * 描述
27
+ * @type {string}
28
+ */
29
+ description: '这是数据库管理器',
30
+ /**
31
+ * 检索文件名
32
+ * @type {string}
33
+ */
34
+ filename: 'pendant.json',
35
+ /**
36
+ * 模板目录
37
+ * @type {string}
38
+ */
39
+ tpl_dir: __dirname,
40
+ /**
41
+ * 基础目录
42
+ * @type {string}
43
+ */
44
+ base_dir: '../common/pendant'.fullname(__dirname),
45
+ /**
46
+ * 自定义目录,加载项目自定义资源
47
+ * @type {string}
48
+ */
49
+ dir: './app'.fullname(),
50
+ /**
51
+ * 搜索模式 dir按目录搜索 | file按文件名搜索
52
+ * @type {string}
53
+ */
54
+ search_way: 'file',
55
+ /**
56
+ * 是否懒加载
57
+ * @type {boolean}
58
+ */
59
+ lazy_load: true,
60
+ /**
61
+ * 模式
62
+ * 1.生产模式,改变文件不会重新加载
63
+ * 2.热更新模式,改变配置文件会重新加载配置,不重新加载脚本
64
+ * 3.热重载模式,改变配置文件都会加载配置和脚本
65
+ * 4.重载模式,执行完后重新加载脚本,避免变量污染
66
+ * 5.热更新+重载模式,改变配置文件重新加载配置和脚本,执行完后重新加载脚本
67
+ * @type {number}
68
+ */
69
+ mode: 3
70
+ };
71
+
72
+ /**
73
+ * 构造函数
74
+ * @param {object} config 配置参数
75
+ * @param {object} parent 父级模块
76
+ */
77
+ constructor(config, parent) {
78
+ super({ ...Pendant.config, ...config }, parent);
79
+ }
80
+ }
81
+
82
+ /**
83
+ * 挂件驱动类
84
+ * @type {Drive}
85
+ */
86
+ Pendant.prototype.Drive = Drive;
87
+
88
+ /**
89
+ * 加载列表
90
+ * @param {Array} list 文件列表
91
+ */
92
+ Pendant.prototype.loadList = async function (list) {
93
+ var _this = this;
94
+
95
+ // 遍历文件路径
96
+ for (var i = 0; i < list.length; i++) {
97
+ var file = list[i];
98
+ var dir = file.dirname();
99
+ // 载入文件
100
+ var obj = file.loadJson(dir);
101
+ if (obj) {
102
+ if (obj.constructor == Array) {
103
+ for (var n = 0; n < obj.length; n++) {
104
+ var o = obj[n];
105
+ // 实例化一个驱动
106
+ await _this.load(dir, o, file);
107
+ }
108
+ } else {
109
+ await _this.load(dir, obj, file);
110
+ }
111
+ } else {
112
+ var fl = _this.dir_base + '/config.tpl.json';
113
+ if (fl.hasFile()) {
114
+ var text = fl.loadText();
115
+ if (text) {
116
+ var l = $.slash;
117
+ var name = file.between('Pendant' + l, l);
118
+ text = text.replaceAll('{0}', name);
119
+ var app = file.between('app' + l, l);
120
+ text = text.replaceAll('{1}', app);
121
+ file.saveText(text);
122
+ }
123
+ }
124
+ }
125
+ }
126
+ };
127
+
128
+ /**
129
+ * 生成字体样式
130
+ * @param {object} o 样式对象
131
+ * @returns {string} 字体样式
132
+ */
133
+ Pendant.prototype._generateFontStyle = function (o) {
134
+ var style = '';
135
+ if (o.font_size) {
136
+ style += `\n font-size: ${o.font_size};`;
137
+ }
138
+ if (o.font_color) {
139
+ style += `\n color: ${o.font_color};`;
140
+ }
141
+ return style;
142
+ };
143
+
144
+ /**
145
+ * 生成边框样式
146
+ * @param {object} o 样式对象
147
+ * @returns {string} 边框样式
148
+ */
149
+ Pendant.prototype._generateBorderStyle = function (o) {
150
+ var borders = [
151
+ { pos: 'top', style: o.border_top_style, size: o.border_top_size, color: o.border_top_color },
152
+ { pos: 'right', style: o.border_right_style, size: o.border_right_size, color: o.border_right_color },
153
+ { pos: 'bottom', style: o.border_bottom_style, size: o.border_bottom_size, color: o.border_bottom_color },
154
+ { pos: 'left', style: o.border_left_style, size: o.border_left_size, color: o.border_left_color }
155
+ ];
156
+ var style = '';
157
+ for (var i = 0; i < borders.length; i++) {
158
+ var b = borders[i];
159
+ if (b.style !== 'none') {
160
+ style += `\n border-${b.pos}: ${b.size || 0} ${b.style || 'solid'} ${b.color || '#dbdbdb'};`;
161
+ }
162
+ }
163
+ return style;
164
+ };
165
+
166
+ /**
167
+ * 生成边距样式
168
+ * @param {object} o 样式对象
169
+ * @returns {string} 边距样式
170
+ */
171
+ Pendant.prototype._generateMarginStyle = function (o) {
172
+ var style = '';
173
+ if (o.margin_top) {
174
+ style += `\n margin-top: ${o.margin_top};`;
175
+ }
176
+ if (o.margin_right) {
177
+ style += `\n margin-right: ${o.margin_right};`;
178
+ }
179
+ if (o.margin_bottom) {
180
+ style += `\n margin-bottom: ${o.margin_bottom};`;
181
+ }
182
+ if (o.margin_left) {
183
+ style += `\n margin-left: ${o.margin_left};`;
184
+ }
185
+ return style;
186
+ };
187
+
188
+ /**
189
+ * 生成填充样式
190
+ * @param {object} o 样式对象
191
+ * @returns {string} 填充样式
192
+ */
193
+ Pendant.prototype._generatePaddingStyle = function (o) {
194
+ var style = '';
195
+ if (o.padding_top) {
196
+ style += `\n padding-top: ${o.padding_top};`;
197
+ }
198
+ if (o.padding_right) {
199
+ style += `\n padding-right: ${o.padding_right};`;
200
+ }
201
+ if (o.padding_bottom) {
202
+ style += `\n padding-bottom: ${o.padding_bottom};`;
203
+ }
204
+ if (o.padding_left) {
205
+ style += `\n padding-left: ${o.padding_left};`;
206
+ }
207
+ return style;
208
+ };
209
+
210
+ /**
211
+ * 生成圆角样式
212
+ * @param {object} o 样式对象
213
+ * @returns {string} 圆角样式
214
+ */
215
+ Pendant.prototype._generateRadiusStyle = function (o) {
216
+ var style = '';
217
+ if (o.radius_top_right) {
218
+ style += `\n border-top-right-radius: ${o.radius_top_right};`;
219
+ }
220
+ if (o.radius_top_left) {
221
+ style += `\n border-top-left-radius: ${o.radius_top_left};`;
222
+ }
223
+ if (o.radius_bottom_right) {
224
+ style += `\n border-bottom-right-radius: ${o.radius_bottom_right};`;
225
+ }
226
+ if (o.radius_bottom_left) {
227
+ style += `\n border-bottom-left-radius: ${o.radius_bottom_left};`;
228
+ }
229
+ return style;
230
+ };
231
+
232
+ /**
233
+ * 生成背景样式
234
+ * @param {object} o 样式对象
235
+ * @returns {string} 背景样式
236
+ */
237
+ Pendant.prototype._generateBgStyle = function (o) {
238
+ var style = '';
239
+ if (o.bg_url) {
240
+ style += `\n background-image: url(${o.bg_url});`;
241
+ style += `\n background-size: 100% auto;`;
242
+ style += `\n background-repeat: ${o.bg_repeat || 'no-repeat'};`;
243
+ }
244
+ if (o.bg_color) {
245
+ style += `\n background-color: ${o.bg_color || ''};`;
246
+ }
247
+ return style;
248
+ };
249
+
250
+ /**
251
+ * 生成链接样式
252
+ * @param {string} id 元素ID
253
+ * @param {object} o 样式对象
254
+ * @returns {string} 链接样式
255
+ */
256
+ Pendant.prototype._generateLinkStyle = function (id, o) {
257
+ var style = '';
258
+ if (o.a_size || o.a_color) {
259
+ style += `\n#${id} a {`;
260
+ if (o.a_size) {
261
+ style += `\n font-size: ${o.a_size};`;
262
+ }
263
+ if (o.a_color) {
264
+ style += `\n color: ${o.a_color};`;
265
+ }
266
+ style += `\n}`;
267
+ }
268
+ return style;
269
+ };
270
+
271
+ /**
272
+ * 生成样式
273
+ * @param {string} id 元素ID
274
+ * @param {object} o 样式对象
275
+ * @returns {string} 样式
276
+ */
277
+ Pendant.prototype._generateStyle = function (id, o) {
278
+ var style = `#${id} {`;
279
+ style += this._generateFontStyle(o);
280
+ style += this._generateBorderStyle(o);
281
+ style += this._generateMarginStyle(o);
282
+ style += this._generatePaddingStyle(o);
283
+ style += this._generateRadiusStyle(o);
284
+ style += this._generateBgStyle(o);
285
+ style += `\n}`;
286
+ style += this._generateLinkStyle(id, o);
287
+ return style;
288
+ };
289
+
290
+ /**
291
+ * 生成分类样式
292
+ * @param {object} o 布局对象
293
+ * @returns {string} 分类样式
294
+ */
295
+ Pendant.prototype._generateLayout = function (o) {
296
+ var layout = '';
297
+ if (o.default) {
298
+ layout += ' col-' + o.default;
299
+ }
300
+ if (o.pc) {
301
+ layout += ' col-xxl-' + o.pc;
302
+ }
303
+ if (o.note) {
304
+ layout += ' col-xl-' + o.note;
305
+ }
306
+ if (o.pad) {
307
+ layout += ' col-lg-' + o.pad;
308
+ }
309
+ if (o.pad_mini) {
310
+ layout += ' col-sm-' + o.pad_mini;
311
+ }
312
+ if (o.phone) {
313
+ layout += ' col-xs-' + o.phone;
314
+ }
315
+ return layout.trim();
316
+ };
317
+
318
+ /**
319
+ * 配置模型
320
+ * @param {object} block 配置块
321
+ * @returns {string} 返回html代码
322
+ */
323
+ Pendant.prototype.optionModel = function (block) {
324
+ var id = block.id || block.name;
325
+ var style = '';
326
+ if (block.style) {
327
+ var o = block.style.toJson();
328
+ style = this._generateStyle(id, o);
329
+ }
330
+
331
+ var layout = '';
332
+ if (block.layout) {
333
+ var o = block.layout.toJson();
334
+ layout = this._generateLayout(o);
335
+ }
336
+
337
+ var data = (block.data || '[]').toJson();
338
+ var attr = (block.attr || '{}').toJson();
339
+ var options = (block.options || '{}').toJson();
340
+
341
+ return {
342
+ id,
343
+ class: block.class,
344
+ style,
345
+ data,
346
+ attr,
347
+ layout,
348
+ options
349
+ };
350
+ };
351
+
352
+ /**
353
+ * 渲染模块
354
+ * @param {object} ctx 请求上下文
355
+ * @param {object} db 数据管理器,如: { next: async function{}, ret: {} }
356
+ * @param {Array} blocks 模块数组
357
+ * @returns {string} 返回html代码
358
+ */
359
+ Pendant.prototype.renderBlock = async function (ctx, db, blocks) {
360
+ var html = '';
361
+ for (var i = 0; i < blocks.length; i++) {
362
+ var block = blocks[i];
363
+ var o = this.get(block.Pendant);
364
+ if (o) {
365
+ var option = this.optionModel(block);
366
+ var ret = await o.call('main', ctx, db, option);
367
+ if (ret) {
368
+ html += '\n' + ret;
369
+ }
370
+ }
371
+ }
372
+ return html;
373
+ };
374
+
375
+ /**
376
+ * 执行渲染
377
+ * @param {object} ctx 请求上下文
378
+ * @param {object} db 数据管理器,如: { next: async function{}, ret: {} }
379
+ * @param {string} path 页面
380
+ * @param {string} position 位置
381
+ * @returns {string} 返回html代码
382
+ */
383
+ Pendant.prototype.render = async function (ctx, db, path, position) {
384
+ var html = '';
385
+ var infos = this.getInfos();
386
+ for (var k in infos) {
387
+ var info = infos[k];
388
+ if (info.state) {
389
+ let mod = this.getMod(info.name);
390
+ if (mod) {
391
+ var obj = mod.config.location.getObj({
392
+ path,
393
+ position
394
+ });
395
+ if (obj && obj.available) {
396
+ var ret = await mod.call('main', ctx, db);
397
+ if (ret) {
398
+ html += '\n' + ret;
399
+ }
400
+ }
401
+ }
402
+ }
403
+ }
404
+ return html;
405
+ };
406
+
407
+ /* 导出指令 */
408
+ exports.Pendant = Pendant;
409
+
410
+ /**
411
+ * Pendant组件池
412
+ */
413
+ if (!$.pool.pendant) {
414
+ $.pool.pendant = {};
415
+ }
416
+
417
+ /**
418
+ * Pendant管理器,用于创建缓存
419
+ * @param {string} scope 作用域
420
+ * @param {string} title 标题
421
+ * @returns {object} 返回一个缓存类
422
+ */
423
+ function pendantAdmin(scope, title) {
424
+ var sc = scope || $.val.scope + '';
425
+ var obj = $.pool.pendant[sc];
426
+ if (!obj) {
427
+ $.pool.pendant[sc] = new Pendant({
428
+ name: sc,
429
+ title: title
430
+ });
431
+ obj = $.pool.pendant[sc];
432
+ }
433
+ return obj;
434
+ }
435
+
436
+ /**
437
+ * @module 导出Pendant管理器
438
+ */
439
+ if ($.admin) {
440
+ $.admin.pendant = pendantAdmin;
441
+ }
@@ -0,0 +1,16 @@
1
+ <div class="mm_col ${' ' + config.layout}">
2
+ <div id="${config.id}" class="pendant_demo ${' ' + config.class}">
3
+ <div class="title">${@config.options.xxx}</div>
4
+ <div class="description">示例组件描述</div>
5
+ </div>
6
+ </div>
7
+
8
+ <style scoped>
9
+ /*[config.style]*/
10
+
11
+ .pendant_demo {}
12
+
13
+ .pendant_demo .title {}
14
+
15
+ .pendant_demo .description {}
16
+ </style>