mm_os 4.3.7 → 5.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 (232) hide show
  1. package/README.md +101 -504
  2. package/index.js +26 -19
  3. package/lib/loader.js +787 -0
  4. package/lib/os.js +369 -0
  5. package/package.json +55 -84
  6. package/LICENSE +0 -21
  7. package/README_EN.md +0 -505
  8. package/adapter/adapter.js +0 -484
  9. package/adapter/custom_persistence.js +0 -661
  10. package/adapter/mqtt.js +0 -254
  11. package/adapter/socket.js +0 -244
  12. package/adapter/web.js +0 -92
  13. package/adapter/websocket.js +0 -43
  14. package/ai.js +0 -130
  15. package/com/api/README.md +0 -3
  16. package/com/api/com.json +0 -5
  17. package/com/api/config.tpl.json +0 -41
  18. package/com/api/drive.js +0 -732
  19. package/com/api/index.js +0 -201
  20. package/com/api/oauth.js +0 -200
  21. package/com/api/script.tpl.js +0 -32
  22. package/com/cmd/README.md +0 -11
  23. package/com/cmd/com.json +0 -5
  24. package/com/cmd/config.tpl.json +0 -48
  25. package/com/cmd/drive.js +0 -176
  26. package/com/cmd/index.js +0 -287
  27. package/com/cmd/job/config.json +0 -66
  28. package/com/cmd/job/index.js +0 -241
  29. package/com/cmd/job/test.js +0 -188
  30. package/com/cmd/msg.json +0 -48
  31. package/com/cmd/script.tpl.js +0 -12
  32. package/com/db/README.md +0 -3
  33. package/com/db/com.json +0 -5
  34. package/com/db/drive.js +0 -2206
  35. package/com/db/index.js +0 -241
  36. package/com/event/README.md +0 -4
  37. package/com/event/com.json +0 -5
  38. package/com/event/config.tpl.json +0 -20
  39. package/com/event/drive.js +0 -61
  40. package/com/event/index.js +0 -438
  41. package/com/event/script.tpl.js +0 -23
  42. package/com/mqtt/README.md +0 -47
  43. package/com/mqtt/com.json +0 -5
  44. package/com/mqtt/config.tpl.json +0 -42
  45. package/com/mqtt/drive.js +0 -704
  46. package/com/mqtt/index.js +0 -1052
  47. package/com/mqtt/index.test.js +0 -503
  48. package/com/mqtt/script.tpl.js +0 -719
  49. package/com/nav/README.md +0 -2
  50. package/com/nav/com.json +0 -5
  51. package/com/nav/config.tpl.json +0 -84
  52. package/com/nav/drive.js +0 -702
  53. package/com/nav/index.js +0 -228
  54. package/com/nav/tpl/admin_pc/page_channel.vue +0 -305
  55. package/com/nav/tpl/admin_pc/page_config.vue +0 -280
  56. package/com/nav/tpl/admin_pc/page_config_form.vue +0 -194
  57. package/com/nav/tpl/admin_pc/page_default.vue +0 -247
  58. package/com/nav/tpl/admin_pc/page_form.vue +0 -180
  59. package/com/nav/tpl/admin_pc/page_lang.vue +0 -264
  60. package/com/nav/tpl/admin_pc/page_nav.vue +0 -321
  61. package/com/nav/tpl/admin_pc/page_table.vue +0 -296
  62. package/com/nav/tpl/admin_pc/page_type.vue +0 -321
  63. package/com/nav/tpl/admin_pc/page_view.vue +0 -124
  64. package/com/nav/tpl/dev_pc/page_channel.vue +0 -253
  65. package/com/nav/tpl/dev_pc/page_config.vue +0 -253
  66. package/com/nav/tpl/dev_pc/page_default.vue +0 -247
  67. package/com/nav/tpl/dev_pc/page_form.vue +0 -162
  68. package/com/nav/tpl/dev_pc/page_nav.vue +0 -253
  69. package/com/nav/tpl/dev_pc/page_table.vue +0 -247
  70. package/com/nav/tpl/dev_pc/page_type.vue +0 -313
  71. package/com/nav/tpl/home_pc/page_channel.vue +0 -234
  72. package/com/nav/tpl/home_pc/page_default.vue +0 -234
  73. package/com/nav/tpl/home_pc/page_form.vue +0 -137
  74. package/com/nav/tpl/home_pc/page_list.vue +0 -234
  75. package/com/nav/tpl/home_pc/page_nav.vue +0 -221
  76. package/com/nav/tpl/home_pc/page_type.vue +0 -234
  77. package/com/nav/tpl/home_pc/page_view.vue +0 -125
  78. package/com/nav/tpl/home_phone/page_channel.vue +0 -234
  79. package/com/nav/tpl/home_phone/page_default.vue +0 -234
  80. package/com/nav/tpl/home_phone/page_form.vue +0 -137
  81. package/com/nav/tpl/home_phone/page_list.vue +0 -234
  82. package/com/nav/tpl/home_phone/page_nav.vue +0 -237
  83. package/com/nav/tpl/home_phone/page_type.vue +0 -234
  84. package/com/nav/tpl/home_phone/page_view.vue +0 -125
  85. package/com/nav/viewmodel.js +0 -446
  86. package/com/param/README.md +0 -2
  87. package/com/param/com.json +0 -5
  88. package/com/param/config.tpl.json +0 -136
  89. package/com/param/drive.js +0 -502
  90. package/com/param/index.js +0 -158
  91. package/com/param/script.tpl.js +0 -12
  92. package/com/pendant/README.md +0 -3
  93. package/com/pendant/com.json +0 -5
  94. package/com/pendant/config.tpl.json +0 -32
  95. package/com/pendant/drive.js +0 -204
  96. package/com/pendant/index.js +0 -467
  97. package/com/pendant/pendant.html +0 -16
  98. package/com/pendant/script.tpl.js +0 -18
  99. package/com/socket/README.md +0 -47
  100. package/com/socket/com.json +0 -5
  101. package/com/socket/config.tpl.json +0 -12
  102. package/com/socket/drive.js +0 -679
  103. package/com/socket/index.js +0 -402
  104. package/com/socket/script.tpl.js +0 -41
  105. package/com/sql/README.md +0 -3
  106. package/com/sql/com.json +0 -5
  107. package/com/sql/config.tpl.json +0 -74
  108. package/com/sql/drive.js +0 -1328
  109. package/com/sql/index.js +0 -152
  110. package/com/sql/script.tpl.js +0 -47
  111. package/com/static/README.md +0 -2
  112. package/com/static/com.json +0 -5
  113. package/com/static/config.tpl.json +0 -24
  114. package/com/static/drive.js +0 -194
  115. package/com/static/index.js +0 -237
  116. package/com/static/script.tpl.js +0 -28
  117. package/com/task/README.md +0 -3
  118. package/com/task/com.json +0 -5
  119. package/com/task/config.tpl.json +0 -24
  120. package/com/task/drive.js +0 -428
  121. package/com/task/index.js +0 -159
  122. package/com/task/script.tpl.js +0 -40
  123. package/com/template/com.json +0 -5
  124. package/com/template/config.tpl.json +0 -16
  125. package/com/template/drive.js +0 -81
  126. package/com/template/index.js +0 -141
  127. package/com.js +0 -237
  128. package/common/README.md +0 -2
  129. package/common/middleware/web_after/index.js +0 -26
  130. package/common/middleware/web_after/middleware.json +0 -9
  131. package/common/middleware/web_base/index.js +0 -113
  132. package/common/middleware/web_base/middleware.json +0 -19
  133. package/common/middleware/web_before/index.js +0 -33
  134. package/common/middleware/web_before/middleware.json +0 -9
  135. package/common/middleware/web_cors/index.js +0 -87
  136. package/common/middleware/web_cors/middleware.json +0 -24
  137. package/common/middleware/web_error/index.js +0 -131
  138. package/common/middleware/web_error/middleware.json +0 -19
  139. package/common/middleware/web_ip/index.js +0 -15
  140. package/common/middleware/web_ip/middleware.json +0 -14
  141. package/common/middleware/web_logger/index.js +0 -156
  142. package/common/middleware/web_logger/middleware.json +0 -14
  143. package/common/middleware/web_main/index.js +0 -26
  144. package/common/middleware/web_main/middleware.json +0 -9
  145. package/common/middleware/web_static/index.js +0 -73
  146. package/common/middleware/web_static/middleware.json +0 -54
  147. package/common/middleware/web_waf/index.js +0 -395
  148. package/common/middleware/web_waf/middleware.json +0 -13
  149. package/core/app/config.tpl.json +0 -67
  150. package/core/app/index.js +0 -711
  151. package/core/app/script.tpl.js +0 -52
  152. package/core/channel/index.js +0 -899
  153. package/core/channel/matcher.js +0 -585
  154. package/core/com/config.tpl.json +0 -16
  155. package/core/com/index.js +0 -77
  156. package/core/com/script.tpl.js +0 -5
  157. package/core/component/component.js +0 -42
  158. package/core/component/config.tpl.json +0 -63
  159. package/core/component/index.js +0 -273
  160. package/core/component/script.tpl.js +0 -19
  161. package/core/controller/config.tpl.json +0 -14
  162. package/core/controller/index.js +0 -371
  163. package/core/controller/script.tpl.js +0 -27
  164. package/core/factory/config.tpl.json +0 -14
  165. package/core/factory/entity.js +0 -275
  166. package/core/factory/index.js +0 -241
  167. package/core/factory/script.tpl.js +0 -16
  168. package/core/game/bat/index.js +0 -137
  169. package/core/game/bat/world.js +0 -622
  170. package/core/game/config.tpl.json +0 -16
  171. package/core/game/entity_admin.js +0 -230
  172. package/core/game/index.js +0 -186
  173. package/core/handler/config.tpl.json +0 -22
  174. package/core/handler/index.js +0 -181
  175. package/core/handler/script.tpl.js +0 -23
  176. package/core/logic/config.tpl.json +0 -14
  177. package/core/logic/index.js +0 -59
  178. package/core/logic/script.tpl.js +0 -19
  179. package/core/middleware/config.tpl.json +0 -16
  180. package/core/middleware/index.js +0 -117
  181. package/core/middleware/script.tpl.js +0 -37
  182. package/core/mod/config.tpl.json +0 -22
  183. package/core/mod/index.js +0 -136
  184. package/core/mod/script.tpl.js +0 -34
  185. package/core/model/config.tpl.json +0 -219
  186. package/core/model/index.js +0 -272
  187. package/core/model/model.js +0 -27
  188. package/core/model/script.tpl.js +0 -20
  189. package/core/notifier/config.tpl.json +0 -14
  190. package/core/notifier/index.js +0 -77
  191. package/core/notifier/script.tpl.js +0 -20
  192. package/core/plugin/config.tpl.json +0 -36
  193. package/core/plugin/index.js +0 -267
  194. package/core/plugin/script.tpl.js +0 -51
  195. package/core/pusher/config.tpl.json +0 -14
  196. package/core/pusher/index.js +0 -158
  197. package/core/pusher/script.tpl.js +0 -20
  198. package/core/room/bat/index.js +0 -170
  199. package/core/room/bat/room.js +0 -524
  200. package/core/room/config.tpl.json +0 -20
  201. package/core/room/index.js +0 -249
  202. package/core/room/room.js +0 -61
  203. package/core/scene/config.tpl.json +0 -14
  204. package/core/scene/index.js +0 -467
  205. package/core/scene/loop.js +0 -1306
  206. package/core/scene/map.js +0 -28
  207. package/core/scene/script.tpl.js +0 -22
  208. package/core/sender/config.tpl.json +0 -14
  209. package/core/sender/index.js +0 -79
  210. package/core/sender/script.tpl.js +0 -20
  211. package/core/service/config.tpl.json +0 -14
  212. package/core/service/index.js +0 -100
  213. package/core/service/script.tpl.js +0 -25
  214. package/core/store/config.tpl.json +0 -26
  215. package/core/store/index.js +0 -1794
  216. package/core/store/script.tpl.js +0 -22
  217. package/core/system/config.tpl.json +0 -18
  218. package/core/system/index.js +0 -312
  219. package/core/system/script.tpl.js +0 -77
  220. package/core/view/config.tpl.json +0 -14
  221. package/core/view/index.js +0 -91
  222. package/core/view/script.tpl.js +0 -20
  223. package/core/zone/bat/index.js +0 -744
  224. package/core/zone/config.tpl.json +0 -54
  225. package/core/zone/index.js +0 -655
  226. package/core/zone/script.tpl.js +0 -10
  227. package/core/zone/zone_bat.js +0 -136
  228. package/core//345/237/272/347/261/273/346/250/241/345/235/227/346/270/205/345/215/225.md +0 -24
  229. package/os.js +0 -53
  230. package/server.js +0 -602
  231. package/ulits/id_gen.js +0 -134
  232. package/ulits/word.js +0 -206
@@ -1,247 +0,0 @@
1
- <template>
2
- <main id="${id}">
3
- <mm_warp>
4
- <mm_container>
5
- <mm_row>
6
- <mm_col class="col-12">
7
- <mm_card>
8
- <div class="card_head arrow">
9
- <h5>${api.title}</h5>
10
- </div>
11
- <div class="card_body">
12
- <mm_form class="bar_filter">
13
- <div class="title">
14
- <h5><span>筛选条件</span></h5>
15
- </div>
16
- <mm_list :col="3">
17
- <!--{if(param.list)}-->
18
- <!--{loop param.list v idx}-->
19
- <!--{if(v.name == 'keyword')}-->
20
- <mm_item>
21
- <control_input v-model="query.keyword" title="${v.title}" desc="${v.description.replace(/\([0-9A-Za-z_]+\)/g, '').replace('用于搜索', '').replace(/、/g, ' / ')}"
22
- @blur="search()" />
23
- </mm_item>
24
- <!--{/if}-->
25
- <!--{/loop}-->
26
- <!--{/if}-->
27
- <!--{loop field v idx}-->
28
- <!--{if(v.format)}-->
29
- <!--{if(v.format.table)}-->
30
- <mm_item>
31
- <control_select v-model="query.${v.format.key}" title="${v.title}" :options="$to_kv(${v.label}, '${v.format.id || v.format.key}', '${v.format.name}')"
32
- @change="search()" />
33
- </mm_item>
34
- <!--{else}-->
35
- <mm_item>
36
- <control_select v-model="query.${v.format.key}" title="${v.title}" :options="$to_kv(${v.label})" @change="search()" />
37
- </mm_item>
38
- <!--{/if}-->
39
- <!--{/if}-->
40
- <!--{/loop}-->
41
- <mm_item>
42
- <mm_btn class="btn-primary-x" type="reset" @click.native="reset();search()">重置</mm_btn>
43
- </mm_item>
44
- </mm_list>
45
- </mm_form>
46
- <div class="bar_action">
47
- <h5><span>操作</span></h5>
48
- <div class="btns">
49
- <mm_btn class="btn-primary-x" url="./${name}_form?">添加</mm_btn>
50
- <mm_btn @click.native="show = true" class="btn-primary-x" v-bind:class="{ 'disabled': !selects }">批量修改</mm_btn>
51
- </div>
52
- <div class="btn_small">
53
- <control_file class="btn_default-x" type="excel" :func="import_db" v-if="url_import"></control_file>
54
- <mm_btn class="btn_default-x" @click.native="export_db()" v-if="url_export">导出</mm_btn>
55
- </div>
56
- </div>
57
- <mm_table type="2">
58
- <thead class="table-sm">
59
- <tr>
60
- <th class="th_selected"><input type="checkbox" :checked="select_state" @click="select_all()" /></th>
61
- <th class="th_id"><span>#</span></th>
62
- <!--{loop field v idx}-->
63
- <!--{if(v.name !== sql.key)}-->
64
- <th>
65
- <control_reverse title="${v.title}" v-model="query.orderby" field="${v.name}" :func="search"></control_reverse>
66
- </th>
67
- <!--{/if}-->
68
- <!--{/loop}-->
69
- <th class="th_handle"><span>操作</span></th>
70
- </tr>
71
- </thead>
72
- <tbody>
73
- <!-- <draggable v-model="list" tag="tbody" @change="sort_change"> -->
74
- <tr v-for="(o, idx) in list" :key="idx" :class="{'active': select == idx}" @click="selected(idx)">
75
- <th class="th_selected"><input type="checkbox" :checked="select_has(o[field])" @click="select_change(o[field])" /></th>
76
- <td>{{ o[field] }}</td>
77
- <!--{loop field v idx}-->
78
- <!--{if(v.name !== sql.key)}-->
79
- <td>
80
- <!--{if(v.dataType === 'tinyint')}-->
81
- <control_switch v-model="o.${v.name}" @click.native="set(o)" />
82
- <!--{else if(v.format)}-->
83
- <!--{if(v.format.table)}-->
84
- <span>{{ $get_name(${v.label}, o.${v.format.key}, '${v.format.id || v.format.key}', '${v.format.name}') }}</span>
85
- <!--{else if(v.name == 'state' || v.name == 'status')}-->
86
- <span v-bind:class="arr_color[o.${v.name}]">{{ ${v.label}[o.${v.name}] }}</span>
87
- <!--{else}-->
88
- <span>{{ ${v.label}[o.${v.name}] }}</span>
89
- <!--{/if}-->
90
- <!--{else if(v.name.indexOf('img') !== -1 || v.name.indexOf('icon') !== -1 || v.name === 'avatar')}-->
91
- <img class="${v.name}" :src="o.${v.name}" alt="${v.title}" />
92
- <!--{else if(v.dataType === 'date')}-->
93
- <span>{{ $to_time(o.${v.name}, 'yyyy-MM-dd') }}</span>
94
- <!--{else if(v.dataType === 'time')}-->
95
- <span>{{ o.${v.name} }}</span>
96
- <!--{else if(v.dataType === 'timestamp' || v.dataType === 'datetime')}-->
97
- <span>{{ $to_time(o.${v.name}, 'yyyy-MM-dd hh:mm') }}</span>
98
- <!--{else if(v.name === 'display' || v.name === 'orderby')}-->
99
- <input class="input_display" v-model.number="o.${v.name}" @blur="set(o)" min="0" max="1000" />
100
- <!--{else}-->
101
- <span>{{ o.${v.name} }}</span>
102
- <!--{/if}-->
103
- </td>
104
- <!--{/if}-->
105
- <!--{/loop}-->
106
- <td>
107
- <mm_btn class="mm_btn btn-primary" :url="'./${name}_form?${sql.key}=' + o[field]">修改</mm_btn>
108
- <mm_btn class="mm_btn btn_warning" @click.native="del_show(o, field)">删除</mm_btn>
109
- </td>
110
- </tr>
111
- </tbody>
112
- <!-- </draggable> -->
113
- </mm_table>
114
- </div>
115
- <div class="card_foot">
116
- <div class="fl">
117
- <control_select v-model="query.size" :options="$to_size()" @change="search()" />
118
- </div>
119
- <div class="fr">
120
- <span class="mr">共 {{ count }} 条</span>
121
- <span>当前</span>
122
- <input type="number" class="pager_now" v-model.number="page_now" @blur="goTo(page_now)" @change="page_change" />
123
- <span>/{{ page_count }}页</span>
124
- </div>
125
- <control_pager display="2" v-model="query.page" :count="count / query.size" :func="goTo" :icons="['首页', '上一页', '下一页', '尾页']"></control_pager>
126
- </div>
127
- </mm_card>
128
- </mm_col>
129
- </mm_row>
130
- </mm_container>
131
- </mm_warp>
132
- <mm_modal v-model="show" mask="true">
133
- <mm_card class="card">
134
- <div class="card_head">
135
- <h5>批量修改</h5>
136
- </div>
137
- <div class="card_body pa">
138
- <dl>
139
- <!--{loop field v idx}-->
140
- <!--{if(v.format)}-->
141
- <dt>${v.title}</dt>
142
- <!--{if(v.format.table)}-->
143
- <dd>
144
- <control_select v-model="form.${v.format.key}" :options="$to_kv(${v.label}, '${v.format.id || v.format.key}', '${v.format.name}')" />
145
- </dd>
146
- <!--{else}-->
147
- <dd>
148
- <control_select v-model="form.${v.format.key}" :options="$to_kv(${v.label})" />
149
- </dd>
150
- <!--{/if}-->
151
- <!--{/if}-->
152
- <!--{/loop}-->
153
- </dl>
154
- </div>
155
- <div class="card_foot">
156
- <div class="mm_group">
157
- <button class="mm_btn btn_default" type="reset" @click="show = false">取消</button>
158
- <button class="mm_btn btn-primary" type="button" @click="batchSet()">提交</button>
159
- </div>
160
- </div>
161
- </mm_card>
162
- </mm_modal>
163
- </main>
164
- </template>
165
-
166
- <script>
167
- import mixin from '/src/mixins/page.js';
168
-
169
- export default {
170
- mixins: [mixin],
171
- data() {
172
- return {
173
- // 列表请求地址
174
- url_get_list: "${api.path}",
175
- url_del: "${api.path}?method=del&",
176
- url_set: "${api.path}?method=set&",
177
- url_import: "${api.path}?method=import&",
178
- url_export: "${api.path}?method=export&",
179
- field: "${sql.key}",
180
- query_set: {
181
- "${sql.key}": ""
182
- },
183
- // 查询条件
184
- query: {
185
- //页码
186
- page: 1,
187
- //页面大小
188
- size: 10,
189
- /*[loop js.query v idx]*/
190
- // ${' ' + v.title}
191
- /*[if v.type === 'number' && !v.select]*/
192
- '${v.name}': 0,
193
- /*[else]*/
194
- '${v.name}': '',
195
- /*[/if]*/
196
- /*[/loop]*/
197
- //排序
198
- orderby: ""
199
- },
200
- form: {},
201
- //颜色
202
- arr_color: ['', '', 'font_yellow', 'font_success', 'font_warning', 'font_primary', 'font_info', 'font_default'],
203
- /*[loop js.data v idx]*/
204
- // ${' ' + v.title}
205
- '${v.name}': ${@JSON.stringify(v.value)},
206
- /*[/loop]*/
207
- // 视图模型
208
- vm: {}
209
- }
210
- },
211
- methods: {
212
- /*[loop js.data v idx]*/
213
- /*[if(v.path)]*/
214
- /**
215
- * 获取 ${v.title}
216
- * @param {query} 查询条件
217
- */
218
- get_ /*[v.basename]*/(query) {
219
- var _this = this;
220
- if (!query) {
221
- query = {
222
- field: "${v.id},${v.field}${v.father_id ? ',' + v.father_id : '' }${v.title_name ? ',title' : '' }"
223
- };
224
- }
225
- this.$get('~${v.path}', query, function(json) {
226
- if (json.result) {
227
- _this/*['.' + v.name]*/.clear();
228
- _this/*['.' + v.name]*/.addList(json.result.list)
229
- }
230
- });
231
- },
232
- /*[/if]*/
233
- /*[/loop]*/
234
- },
235
- created() {
236
- /*[loop js.data v idx]*/
237
- /*[if(v.path)]*/
238
- // 获取 ${v.title}
239
- this.get_ /*[v.basename]*/();
240
- /*[/if]*/
241
- /*[/loop]*/
242
- }
243
- }
244
- </script>
245
-
246
- <style>
247
- </style>
@@ -1,162 +0,0 @@
1
- <template>
2
- <main id="${id}">
3
- <mm_warp>
4
- <mm_container>
5
- <mm_row>
6
- <mm_col class="col-mm-12">
7
- <mm_card>
8
- <div class="card_head arrow">
9
- <h5>{{ form[field] ? '修改' : '创建' }}${api.title}</h5>
10
- </div>
11
- <div class="card_body">
12
- <mm_form>
13
- <dl>
14
- <!--{loop field v idx}-->
15
- <!--{if(v.name !== sql.key)}-->
16
- <!--{if(v.required)}-->
17
- <dt class="required">${v.title}</dt>
18
- <!--{else}-->
19
- <dt>${v.title}</dt>
20
- <!--{/if}-->
21
- <!--{if(v.dataType === 'tinyint')}-->
22
- <dd>
23
- <control_switch v-model="form.${v.name}" />
24
- </dd>
25
- <!--{else if(v.format)}-->
26
- <!--{if(v.format.table)}-->
27
- <dd>
28
- <control_select v-model="form.${v.format.key}" :options="$to_kv(${v.label}, '${v.format.id || v.format.key}', '${v.format.name}', 0)" />
29
- </dd>
30
- <!--{else}-->
31
- <dd>
32
- <control_select v-model="form.${v.format.key}" :options="$to_kv(${v.label})" />
33
- </dd>
34
- <!--{/if}-->
35
- <!--{else if(v.dataType === 'date')}-->
36
- <dd>
37
- <mm_time v-model="form.${v.name}" type="date" />
38
- </dd>
39
- <!--{else if(v.dataType === 'time')}-->
40
- <dd>
41
- <mm_time v-model="form.${v.name}" type="time" />
42
- </dd>
43
- <!--{else if(v.dataType.indexOf('time') !== -1)}-->
44
- <dd>
45
- <mm_time v-model="form.${v.name}" type="datetime-local" />
46
- </dd>
47
- <!--{else if(v.name.indexOf('img') !== -1 || v.name.indexOf('icon') !== -1 || v.name === 'avatar')}-->
48
- <dd>
49
- <mm_upload_img width="10rem" height="10rem" name="${v.name}" type="text" v-model="form.${v.name}" />
50
- </dd>
51
- <!--{else if(v.name.indexOf('content') !== -1 || v.name.indexOf('note') !== -1)}-->
52
- <dd>
53
- <control_rich v-model="form.${v.name}"></control_rich>
54
- </dd>
55
- <!--{else if(v.dataType.indexOf('text') !== -1)}-->
56
- <dd>
57
- <control_textarea v-model="form.${v.name}" type="text" placeholder="${v.description.replace(/\([0-9A-Za-z_]+\)/g, '').replace('用于搜索', '').replace(/、/g, ' / ')}"></control_textarea>
58
- </dd>
59
- <!--{else if(v.type === 'number' && v.name.indexOf('id') === -1)}-->
60
- <dd>
61
- <!--{if(v.number.range && v.number.range.length)}-->
62
- <control_number v-model="form.${v.name}" :min="${v.number.range[0]}" :max="${v.number.range[1]}" />
63
- <!--{else}-->
64
- <control_number v-model="form.${v.name}" :min="${v.number ? v.number.min : 0}" :max="${v.number ? v.number.max : 0}" />
65
- <!--{/if}-->
66
- </dd>
67
- <!--{else}-->
68
- <dd>
69
- <!--{if(v.required)}-->
70
- <control_input v-model="form.${v.name}" :minlength="0" :maxlength="${v.string ? v.string.max : 0}" placeholder="${v.description.replace(/\([0-9A-Za-z_]+\)/g, '').replace('用于搜索', '').replace(/、/g, ' / ')}"
71
- :required="true" />
72
- <!--{else}-->
73
- <control_input v-model="form.${v.name}" :minlength="0" :maxlength="${v.string ? v.string.max : 0}" placeholder="${v.description.replace(/\([0-9A-Za-z_]+\)/g, '').replace('用于搜索', '').replace(/、/g, ' / ')}" />
74
- <!--{/if}-->
75
- </dd>
76
- <!--{/if}-->
77
- <!--{/if}-->
78
- <!--{/loop}-->
79
- </dl>
80
- </mm_form>
81
- </div>
82
- <div class="card_foot">
83
- <div class="mm_group">
84
- <button class="mm_btn btn_default" type="button" @click="cancel">返回</button>
85
- <button class="mm_btn btn-primary" type="button" @click="submit()">提交</button>
86
- </div>
87
- </div>
88
- </mm_card>
89
- </mm_col>
90
- </mm_row>
91
- </mm_container>
92
- </mm_warp>
93
- </main>
94
- </template>
95
-
96
-
97
- <script>
98
- import mixin from '/src/mixins/page.js';
99
-
100
- export default {
101
- mixins: [mixin],
102
- components: {},
103
- data() {
104
- return {
105
- url: "${api.path}?",
106
- url_get_obj: "${api.path}?method=get_obj",
107
- field: "${sql.key}",
108
- query: {
109
- "${sql.key}": 0
110
- },
111
- form: {
112
- /*[loop field v idx]*/
113
- /*[if v.type === 'number']*/
114
- "${v.name}": ${Number(v.default) || ''},
115
- /*[else]*/
116
- "${v.name}": '',
117
- /*[/if]*/
118
- /*[/loop]*/
119
- },
120
- /*[loop js.data v idx]*/
121
- // ${' ' + v.title}
122
- '${v.name}': ${@JSON.stringify(v.value)},
123
- /*[/loop]*/
124
- }
125
- },
126
- methods: {
127
- /*[loop js.data v idx]*/
128
- /*[if(v.path)]*/
129
- /**
130
- * 获取 ${v.title}
131
- * @param {query} 查询条件
132
- */
133
- get_/*[v.basename]*/(query) {
134
- var _this = this;
135
- if (!query) {
136
- query = {
137
- field: "${v.id},${v.field}${v.father_id ? ',' + v.father_id : '' }${v.title_name ? ',title' : '' }"
138
- };
139
- }
140
- this.$get('~${v.path}', query, function(json) {
141
- if (json.result) {
142
- _this/*['.' + v.name]*/.clear();
143
- _this/*['.' + v.name]*/.addList(json.result.list)
144
- }
145
- });
146
- },
147
- /*[/if]*/
148
- /*[/loop]*/
149
- },
150
- created() {
151
- /*[loop js.data v idx]*/
152
- /*[if(v.path)]*/
153
- // 获取 ${v.title}
154
- this.get_ /*[v.basename]*/();
155
- /*[/if]*/
156
- /*[/loop]*/
157
- }
158
- }
159
- </script>
160
-
161
- <style>
162
- </style>
@@ -1,253 +0,0 @@
1
- <template>
2
- <main id="${id}">
3
- <div class="mm_warp">
4
- <div class="mm_container">
5
- <div class="mm_row">
6
- <div class="mm_col col-12">
7
- <div class="mm_card">
8
- <div class="card_head arrow">
9
- <h5>${api.title}</h5>
10
- </div>
11
- <div class="card_body">
12
- <div class="mm_form" class="bar_filter">
13
- <div class="title">
14
- <h5><span>筛选条件</span></h5>
15
- </div>
16
- <div class="mm_list list-3">
17
- <!--{if(param.list)}-->
18
- <!--{loop param.list v idx}-->
19
- <!--{if(v.name == 'keyword')}-->
20
- <div class="mm_item">
21
- <control_input v-model="query.keyword" title="${v.title}" desc="${v.description.replace(/\([0-9A-Za-z_]+\)/g, '').replace('用于搜索', '').replace(/、/g, ' / ')}"
22
- @blur="search()" />
23
- </div>
24
- <!--{/if}-->
25
- <!--{/loop}-->
26
- <!--{/if}-->
27
- <!--{loop field v idx}-->
28
- <!--{if(v.format)}-->
29
- <!--{if(v.format.table)}-->
30
- <div class="mm_item">
31
- <control_select v-model="query.${v.format.key}" title="${v.title}" :options="$to_kv(${v.label}, '${v.format.id || v.format.key}', '${v.format.name}')"
32
- @change="search()" />
33
- </div>
34
- <!--{else}-->
35
- <div class="mm_item">
36
- <control_select v-model="query.${v.format.key}" title="${v.title}" :options="$to_kv(${v.label})" @change="search()" />
37
- </div>
38
- <!--{/if}-->
39
- <!--{/if}-->
40
- <!--{/loop}-->
41
- <div class="mm_item">
42
- <button class="btn-primary-x" type="reset" @click.native="reset();search()">重置</button>
43
- </div>
44
- </div>
45
- </div>
46
- <div class="bar_action">
47
- <h5><span>操作</span></h5>
48
- <div class="btns">
49
- <button class="btn-primary-x" url="./${name}_form?">添加</button>
50
- <button @click.native="show = true" class="btn-primary-x" v-bind:class="{ 'disabled': !selects }">批量修改</button>
51
- </div>
52
- <div class="btn_small">
53
- <control_file class="btn_default-x" type="excel" :func="import_db" v-if="url_import"></control_file>
54
- <button class="btn_default-x" @click.native="export_db()" v-if="url_export">导出</button>
55
- </div>
56
- </div>
57
- <div class="mm_table table-3">
58
- <thead class="table-sm">
59
- <tr>
60
- <th class="th_open"></th>
61
- <th class="th_selected"><input type="checkbox" :checked="select_state" @click="select_all()" /></th>
62
- <th class="th_id"><span>#</span></th>
63
- <!--{loop field v idx}-->
64
- <!--{if(v.name !== sql.key)}-->
65
- <th>
66
- <control_reverse title="${v.title}" v-model="query.orderby" field="${v.name}" :func="search"></control_reverse>
67
- </th>
68
- <!--{/if}-->
69
- <!--{/loop}-->
70
- <th class="th_handle"><span>操作</span></th>
71
- </tr>
72
- </thead>
73
- <tbody>
74
- <!-- <draggable v-model="list" tag="tbody" @change="sort_change"> -->
75
- <tr v-for="(o, idx) in list_new" :key="idx" :class="{'active': select == idx, sub: o[father_id], open: opens_has(o[field]), no_sub: !opens_has_sub(o[field]) }"
76
- @click="selected(idx)">
77
- <th class="th_open"><button class="btn_open" :style="'margin-left:' + (1.5 * opens_lv(o[father_id])) + 'rem;'"
78
- @click="opens_change(o[field])"><i class="fa-caret-right"></i></button></th>
79
- <th class="th_selected"><input type="checkbox" :checked="select_has(o[field])" @click="select_change(o[field])" /></th>
80
- <td>{{ o[field] }}</td>
81
- <!--{loop field v idx}-->
82
- <!--{if(v.name !== sql.key)}-->
83
- <td>
84
- <!--{if(v.dataType === 'tinyint')}-->
85
- <control_switch v-model="o.${v.name}" @click.native="set(o)" />
86
- <!--{else if(v.format)}-->
87
- <!--{if(v.format.table)}-->
88
- <span>{{ $get_name(${v.label}, o.${v.format.key}, '${v.format.id || v.format.key}', '${v.format.name}') }}</span>
89
- <!--{else if(v.name == 'state' || v.name == 'status')}-->
90
- <span v-bind:class="arr_color[o.${v.name}]">{{ ${v.label}[o.${v.name}] }}</span>
91
- <!--{else}-->
92
- <span>{{ ${v.label}[o.${v.name}] }}</span>
93
- <!--{/if}-->
94
- <!--{else if(v.name.indexOf('img') !== -1 || v.name.indexOf('icon') !== -1 || v.name === 'avatar')}-->
95
- <img class="${v.name}" :src="o.${v.name}" alt="${v.title}" />
96
- <!--{else if(v.dataType === 'date')}-->
97
- <span>{{ $to_time(o.${v.name}, 'yyyy-MM-dd') }}</span>
98
- <!--{else if(v.dataType === 'time')}-->
99
- <span>{{ o.${v.name} }}</span>
100
- <!--{else if(v.dataType === 'timestamp' || v.dataType === 'datetime')}-->
101
- <span>{{ $to_time(o.${v.name}, 'yyyy-MM-dd hh:mm') }}</span>
102
- <!--{else if(v.name === 'display' || v.name === 'orderby')}-->
103
- <input class="input_display" v-model.number="o.${v.name}" @blur="set(o)" min="0" max="1000" />
104
- <!--{else}-->
105
- <control_input :auto="true" v-model="o.${v.name}" @blur="set(o)" />
106
- <!--{/if}-->
107
- </td>
108
- <!--{/if}-->
109
- <!--{/loop}-->
110
- <td>
111
- <button class="mm_btn btn-primary" :url="'./${name}_form?${sql.key}=' + o[field]">修改</button>
112
- <button class="mm_btn btn_warning" @click.native="del_show(o, field)">删除</button>
113
- </td>
114
- </tr>
115
- </tbody>
116
- <!-- </draggable> -->
117
- </div>
118
- </div>
119
- </div>
120
- </div>
121
- </div>
122
- </div>
123
- </div>
124
- <mm_modal v-model="show" mask="true">
125
- <div class="mm_card" class="card">
126
- <div class="card_head">
127
- <h5>批量修改</h5>
128
- </div>
129
- <div class="card_body pa">
130
- <dl>
131
- <!--{loop field v idx}-->
132
- <!--{if(v.format)}-->
133
- <dt>${v.title}</dt>
134
- <!--{if(v.format.table)}-->
135
- <dd>
136
- <control_select v-model="form.${v.format.key}" :options="$to_kv(${v.label}, '${v.format.id || v.format.key}', '${v.format.name}')" />
137
- </dd>
138
- <!--{else}-->
139
- <dd>
140
- <control_select v-model="form.${v.format.key}" :options="$to_kv(${v.label})" />
141
- </dd>
142
- <!--{/if}-->
143
- <!--{/if}-->
144
- <!--{/loop}-->
145
- </dl>
146
- </div>
147
- <div class="card_foot">
148
- <div class="mm_group">
149
- <button class="mm_btn btn_default" type="reset" @click="show = false">取消</button>
150
- <button class="mm_btn btn-primary" type="button" @click="batchSet()">提交</button>
151
- </div>
152
- </div>
153
- </div>
154
- </mm_modal>
155
- </main>
156
- </template>
157
-
158
- <script>
159
- import mixin from '/src/mixins/page.js';
160
-
161
- export default {
162
- mixins: [mixin],
163
- data() {
164
- return {
165
- // 列表请求地址
166
- url_get_list: "${api.path}",
167
- url_del: "${api.path}?method=del&",
168
- url_set: "${api.path}?method=set&",
169
- url_import: "${api.path}?method=import&",
170
- url_export: "${api.path}?method=export&",
171
- field: "${sql.key}",
172
- query_set: {
173
- "${sql.key}": ""
174
- },
175
- // 查询条件
176
- query: {
177
- //页码
178
- page: 0,
179
- //页面大小
180
- size: '0',
181
- /*[loop js.query v idx]*/
182
- // ${' ' + v.title}
183
- /*[if v.type === 'number' && !v.select]*/
184
- '${v.name}': 0,
185
- /*[else]*/
186
- '${v.name}': '',
187
- /*[/if]*/
188
- /*[/loop]*/
189
- //排序
190
- orderby: ""
191
- },
192
- form: {},
193
- //颜色
194
- arr_color: ['', '', 'font_yellow', 'font_success', 'font_warning', 'font_primary', 'font_info', 'font_default'],
195
- /*[loop js.data v idx]*/
196
- // ${' ' + v.title}
197
- '${v.name}': ${@JSON.stringify(v.value)},
198
- /*[/loop]*/
199
- // 视图模型
200
- vm: {}
201
- }
202
- },
203
- methods: {
204
- /*[loop js.data v idx]*/
205
- /*[if(v.path)]*/
206
- /**
207
- * 获取 ${v.title}
208
- * @param {query} 查询条件
209
- */
210
- get_ /*[v.basename]*/(query) {
211
- var _this = this;
212
- if (!query) {
213
- query = {
214
- field: "${v.id},${v.field}${v.father_id ? ',' + v.father_id : '' }${v.title_name ? ',title' : '' }"
215
- };
216
- }
217
- this.$get('~${v.path}', query, function(json) {
218
- if (json.result) {
219
- _this /*['.' + v.name]*/ .clear();
220
- _this /*['.' + v.name]*/ .addList(json.result.list)
221
- }
222
- });
223
- },
224
- /*[/if]*/
225
- /*[/loop]*/
226
- },
227
- created() {
228
- /*[loop js.data v idx]*/
229
- /*[if(v.path)]*/
230
- // 获取 ${v.title}
231
- this.get_ /*[v.basename]*/();
232
- /*[/if]*/
233
- /*[/loop]*/
234
- },
235
- computed: {
236
- list_new() {
237
- var lt = this.list.toTree(this.field).toList();
238
- var list = [];
239
- var arr = this.opens;
240
- for (var i = 0; i < lt.length; i++) {
241
- var o = lt[i];
242
- if (this.opens.indexOf(o[this.father_id]) !== -1) {
243
- list.push(o);
244
- }
245
- }
246
- return list;
247
- }
248
- }
249
- }
250
- </script>
251
-
252
- <style>
253
- </style>