mm_os 2.8.7 → 2.8.9
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.
- package/core/base/index.js +28 -28
- package/core/base/mqtt/index.js +314 -314
- package/core/base/mqtt/lib.js +39 -39
- package/core/base/web/index.js +109 -109
- package/core/com/mqtt/index.js +2 -6
- package/core/com/nav/tpl/admin_pc/page_channel.vue +137 -131
- package/core/com/nav/tpl/admin_pc/page_config.vue +280 -279
- package/core/com/nav/tpl/admin_pc/page_config_form.vue +194 -194
- package/core/com/nav/tpl/admin_pc/page_default.vue +47 -87
- package/core/com/nav/tpl/admin_pc/page_form.vue +19 -19
- package/core/com/nav/tpl/admin_pc/page_lang.vue +44 -45
- package/core/com/nav/tpl/admin_pc/page_nav.vue +140 -132
- package/core/com/nav/tpl/admin_pc/page_table.vue +135 -124
- package/core/com/nav/tpl/admin_pc/page_type.vue +139 -131
- package/core/com/nav/tpl/admin_pc/page_view.vue +124 -0
- package/core/com/nav/tpl/dev_pc/page_channel.vue +34 -34
- package/core/com/nav/tpl/dev_pc/page_config.vue +26 -26
- package/core/com/nav/tpl/dev_pc/page_default.vue +4 -4
- package/core/com/nav/tpl/dev_pc/page_form.vue +2 -2
- package/core/com/nav/tpl/dev_pc/page_nav.vue +34 -34
- package/core/com/nav/tpl/dev_pc/page_table.vue +34 -34
- package/core/com/nav/tpl/dev_pc/page_type.vue +131 -71
- package/core/com/nav/tpl/home_pc/page_default.vue +2 -2
- package/core/com/nav/tpl/home_pc/page_form.vue +2 -2
- package/core/com/nav/tpl/home_pc/page_view.vue +2 -2
- package/core/com/nav/tpl/home_phone/page_form.vue +2 -2
- package/core/com/nav/tpl/home_phone/page_list.vue +2 -2
- package/core/com/nav/tpl/home_phone/page_view.vue +2 -2
- package/demo/index.js +28 -0
- package/middleware/cors/index.js +84 -84
- package/middleware/cors/middleware.json +6 -6
- package/middleware/log/index.js +20 -20
- package/middleware/log/middleware.json +8 -8
- package/middleware/mqtt_base/index.js +10 -10
- package/middleware/mqtt_base/middleware.json +7 -7
- package/middleware/waf/index.js +64 -64
- package/middleware/waf/middleware.json +8 -8
- package/middleware/waf_ip/index.js +115 -115
- package/middleware/waf_ip/middleware.json +9 -9
- package/middleware/web_base/index.js +65 -65
- package/middleware/web_base/middleware.json +8 -8
- package/middleware/web_event/index.js +412 -412
- package/middleware/web_event/middleware.json +9 -9
- package/middleware/web_proxy/index.js +23 -23
- package/middleware/web_proxy/middleware.json +8 -8
- package/middleware/web_router/index.js +33 -33
- package/middleware/web_router/middleware.json +9 -9
- package/middleware/web_socket/index.js +21 -21
- package/middleware/web_socket/middleware.json +8 -8
- package/middleware/web_static/index.js +25 -25
- package/middleware/web_static/middleware.json +8 -8
- package/package.json +8 -8
- package/static/file/image/user/42/2025_01_02_10_58_15.png +0 -0
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<main id="${id}">
|
|
3
|
-
<mm_warp>
|
|
4
|
-
<mm_container>
|
|
5
|
-
<mm_row>
|
|
6
|
-
<
|
|
7
|
-
<mm_card>
|
|
3
|
+
<div class="mm_warp">
|
|
4
|
+
<div class="mm_container">
|
|
5
|
+
<div class="mm_row">
|
|
6
|
+
<div class="col-mm-12">
|
|
7
|
+
<div class="mm_card">
|
|
8
8
|
<div class="card_head arrow">
|
|
9
9
|
<h5>{{ form[field] ? '修改' : '创建' }}${api.title}</h5>
|
|
10
10
|
</div>
|
|
11
11
|
<div class="card_body">
|
|
12
|
-
<mm_form>
|
|
12
|
+
<form class="mm_form">
|
|
13
13
|
<dl>
|
|
14
14
|
<!--{loop field v idx}-->
|
|
15
15
|
<!--{if(v.show.form)}-->
|
|
@@ -42,20 +42,20 @@
|
|
|
42
42
|
<!--{/if}-->
|
|
43
43
|
<!--{else if(v.dataType === 'date')}-->
|
|
44
44
|
<dd>
|
|
45
|
-
<mm_time v-model="form.${v.name}" type="date"
|
|
45
|
+
<div class="mm_time" v-model="form.${v.name}" type="date"></div>
|
|
46
46
|
</dd>
|
|
47
47
|
<!--{else if(v.dataType === 'time')}-->
|
|
48
48
|
<dd>
|
|
49
|
-
<mm_time v-model="form.${v.name}" type="time"
|
|
49
|
+
<div class="mm_time" v-model="form.${v.name}" type="time"></div>
|
|
50
50
|
</dd>
|
|
51
51
|
<!--{else if(v.dataType.indexOf('time') !== -1)}-->
|
|
52
52
|
<dd>
|
|
53
|
-
<mm_time v-model="form.${v.name}" type="datetime-local"
|
|
53
|
+
<div class="mm_time" v-model="form.${v.name}" type="datetime-local"></div>
|
|
54
54
|
</dd>
|
|
55
55
|
<!--{else if(v.name.indexOf('img') !== -1 || v.name.indexOf('icon') !== -1 || v.name === 'avatar')}-->
|
|
56
56
|
<dd>
|
|
57
|
-
<mm_upload_img width="10rem" height="10rem" name="${v.name}" type="text"
|
|
58
|
-
v-model="form.${v.name}"
|
|
57
|
+
<div class="mm_upload_img" width="10rem" height="10rem" name="${v.name}" type="text"
|
|
58
|
+
v-model="form.${v.name}"></div>
|
|
59
59
|
</dd>
|
|
60
60
|
<!--{else if(v.name.indexOf('content') !== -1 || v.dataType.indexOf('longtext') !== -1)}-->
|
|
61
61
|
<dd>
|
|
@@ -93,19 +93,19 @@
|
|
|
93
93
|
<!--{/if}-->
|
|
94
94
|
<!--{/loop}-->
|
|
95
95
|
</dl>
|
|
96
|
-
</
|
|
96
|
+
</form>
|
|
97
97
|
</div>
|
|
98
98
|
<div class="card_foot">
|
|
99
99
|
<div class="mm_group">
|
|
100
|
-
<button class="btn_default" type="button" @click="cancel">返回</button>
|
|
101
|
-
<button class="btn_primary" type="button" @click="submit()">提交</button>
|
|
100
|
+
<button class="mm_btn btn_default" type="button" @click="cancel">返回</button>
|
|
101
|
+
<button class="mm_btn btn_primary" type="button" @click="submit()">提交</button>
|
|
102
102
|
</div>
|
|
103
103
|
</div>
|
|
104
|
-
</
|
|
105
|
-
</
|
|
106
|
-
</
|
|
107
|
-
</
|
|
108
|
-
</
|
|
104
|
+
</div>
|
|
105
|
+
</div>
|
|
106
|
+
</div>
|
|
107
|
+
</div>
|
|
108
|
+
</div>
|
|
109
109
|
</main>
|
|
110
110
|
</template>
|
|
111
111
|
|
|
@@ -1,72 +1,72 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<main id="${id}">
|
|
3
|
-
<mm_warp>
|
|
4
|
-
<mm_container>
|
|
5
|
-
<mm_row>
|
|
6
|
-
<
|
|
7
|
-
<mm_card :class="{ 'hide_filter': !show_filter }">
|
|
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" :class="{ 'hide_filter': !show_filter }">
|
|
8
8
|
<div class="card_head arrow" @click="show_filter = !show_filter">
|
|
9
9
|
<h5>${api.title}</h5>
|
|
10
10
|
</div>
|
|
11
11
|
<div class="card_body">
|
|
12
|
-
<
|
|
12
|
+
<form class="mm_form bar_filter">
|
|
13
13
|
<div class="title">
|
|
14
14
|
<h5><span>筛选条件</span></h5>
|
|
15
15
|
</div>
|
|
16
|
-
<mm_list :col="3">
|
|
16
|
+
<div class="mm_list" :col="3">
|
|
17
17
|
<!--{loop param.list v idx}-->
|
|
18
18
|
<!--{if(v.name === 'keyword')}-->
|
|
19
|
-
<mm_item>
|
|
19
|
+
<div class="mm_item">
|
|
20
20
|
<control_input v-model="query.keyword" title="${v.title}" desc="${v.description.replace(/\([0-9A-Za-z_]+\)/g, '').replace('用于搜索', '').replace(/、/g, ' / ')}"
|
|
21
21
|
/>
|
|
22
|
-
</
|
|
22
|
+
</div>
|
|
23
23
|
<!--{/if}-->
|
|
24
24
|
<!--{/loop}-->
|
|
25
25
|
<!--{loop field v idx}-->
|
|
26
26
|
<!--{if(v.show.search)}-->
|
|
27
27
|
<!--{if(v.show.search === "input")}-->
|
|
28
|
-
<mm_item>
|
|
28
|
+
<div class="mm_item">
|
|
29
29
|
<control_input v-model="query.${v.name}" title="${v.title}" @blur="search()" />
|
|
30
|
-
</
|
|
30
|
+
</div>
|
|
31
31
|
<!--{else if(v.show.search === "select")}-->
|
|
32
32
|
<!--{if(v.format.table)}-->
|
|
33
|
-
<mm_item>
|
|
33
|
+
<div class="mm_item">
|
|
34
34
|
<!--{if(v.format.key.endWith('_id') !== -1)}-->
|
|
35
35
|
<control_select type="list" v-model="query.${v.format.key}" title="${v.title}" :options="$to_kv(${v.label}, '${v.format.id || v.format.key}', '${v.format.name}')" @change="search()" />
|
|
36
36
|
<!--{else}-->
|
|
37
37
|
<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}')"
|
|
38
38
|
@change="search()" />
|
|
39
39
|
<!--{/if}-->
|
|
40
|
-
</
|
|
40
|
+
</div>
|
|
41
41
|
<!--{else if(v.format.key.indexOf('user_id') !== -1)}-->
|
|
42
|
-
<mm_item>
|
|
42
|
+
<div class="mm_item">
|
|
43
43
|
<control_select v-model="query.${v.format.key}" title="${v.title}" :options="$to_kv(${v.label})" @change="search()" />
|
|
44
|
-
</
|
|
44
|
+
</div>
|
|
45
45
|
<!--{else}-->
|
|
46
|
-
<mm_item>
|
|
46
|
+
<div class="mm_item">
|
|
47
47
|
<control_select v-model="query.${v.format.key}" title="${v.title}" :options="$to_kv(${v.label})" @change="search()" />
|
|
48
|
-
</
|
|
48
|
+
</div>
|
|
49
49
|
<!--{/if}-->
|
|
50
50
|
<!--{/if}-->
|
|
51
51
|
<!--{/if}-->
|
|
52
52
|
<!--{/loop}-->
|
|
53
|
-
<mm_item>
|
|
54
|
-
<
|
|
55
|
-
</
|
|
56
|
-
</
|
|
57
|
-
</
|
|
53
|
+
<div class="mm_item">
|
|
54
|
+
<button class="mm_btn btn_primary-x" type="reset" @click.native="reset();">重置</button>
|
|
55
|
+
</div>
|
|
56
|
+
</div>
|
|
57
|
+
</form>
|
|
58
58
|
<div class="bar_action">
|
|
59
59
|
<h5><span>操作</span></h5>
|
|
60
60
|
<div class="btns">
|
|
61
|
-
<
|
|
62
|
-
<mm_btn @click.native="show = true"
|
|
61
|
+
<button class="mm_btn btn_primary-x" url="./${name}_form?">添加</button>
|
|
62
|
+
<button class="mm_btn btn_primary-x" @click.native="show = true" v-bind:class="{ 'disabled': !selects }">批量修改</button>
|
|
63
63
|
</div>
|
|
64
64
|
<div class="btn_small">
|
|
65
|
-
<control_file class="btn_default-x" type="excel" :func="import_db" v-if="url_import"></control_file>
|
|
66
|
-
<
|
|
65
|
+
<control_file class="mm_btn btn_default-x" type="excel" :func="import_db" v-if="url_import"></control_file>
|
|
66
|
+
<button class="mm_btn btn_default-x" @click.native="export_db()" v-if="url_export">导出</button>
|
|
67
67
|
</div>
|
|
68
68
|
</div>
|
|
69
|
-
<mm_table type="2">
|
|
69
|
+
<div class="mm_table" type="2">
|
|
70
70
|
<thead class="table-sm">
|
|
71
71
|
<tr>
|
|
72
72
|
<th class="th_id"><span>#</span></th>
|
|
@@ -81,7 +81,6 @@
|
|
|
81
81
|
</tr>
|
|
82
82
|
</thead>
|
|
83
83
|
<tbody>
|
|
84
|
-
<!-- <draggable v-model="list" tag="tbody" @change="sort_change"> -->
|
|
85
84
|
<tr v-for="(o, idx) in list" :key="idx" :class="{'active': select == idx}" @click="selected(idx)">
|
|
86
85
|
<td>{{ o[field] }}</td>
|
|
87
86
|
<!--{loop field v idx}-->
|
|
@@ -116,13 +115,12 @@
|
|
|
116
115
|
<!--{/if}-->
|
|
117
116
|
<!--{/loop}-->
|
|
118
117
|
<td>
|
|
119
|
-
<
|
|
120
|
-
<
|
|
118
|
+
<a class="mm_btn btn_primary" :href="'./${name}_form?${sql.key}=' + o[field]">修改</a>
|
|
119
|
+
<button class="mm_btn btn_warning" @click.native="del_show(o, field)">删除</button>
|
|
121
120
|
</td>
|
|
122
121
|
</tr>
|
|
123
122
|
</tbody>
|
|
124
|
-
|
|
125
|
-
</mm_table>
|
|
123
|
+
</div>
|
|
126
124
|
</div>
|
|
127
125
|
<div class="card_foot">
|
|
128
126
|
<div class="fl">
|
|
@@ -136,13 +134,14 @@
|
|
|
136
134
|
</div>
|
|
137
135
|
<control_pager display="2" v-model="query.page" :count="count / query.size" :func="goTo" :icons="['首页', '上一页', '下一页', '尾页']"></control_pager>
|
|
138
136
|
</div>
|
|
139
|
-
</
|
|
140
|
-
</
|
|
141
|
-
</
|
|
142
|
-
</
|
|
143
|
-
</
|
|
137
|
+
</div>
|
|
138
|
+
</div>
|
|
139
|
+
</div>
|
|
140
|
+
</div>
|
|
141
|
+
</div>
|
|
142
|
+
|
|
144
143
|
<mm_modal v-model="show" mask="true">
|
|
145
|
-
<
|
|
144
|
+
<div class="mm_card">
|
|
146
145
|
<div class="card_head">
|
|
147
146
|
<h5>批量修改</h5>
|
|
148
147
|
</div>
|
|
@@ -172,11 +171,11 @@
|
|
|
172
171
|
</div>
|
|
173
172
|
<div class="card_foot">
|
|
174
173
|
<div class="mm_group">
|
|
175
|
-
<button class="btn_default" type="reset" @click="show = false">取消</button>
|
|
176
|
-
<button class="btn_primary" type="button" @click="batchSet()">提交</button>
|
|
174
|
+
<button class="mm_btn btn_default" type="reset" @click="show = false">取消</button>
|
|
175
|
+
<button class="mm_btn btn_primary" type="button" @click="batchSet()">提交</button>
|
|
177
176
|
</div>
|
|
178
177
|
</div>
|
|
179
|
-
</
|
|
178
|
+
</div>
|
|
180
179
|
</mm_modal>
|
|
181
180
|
</main>
|
|
182
181
|
</template>
|
|
@@ -233,7 +232,7 @@
|
|
|
233
232
|
* 获取 ${v.title}
|
|
234
233
|
* @param {query} 查询条件
|
|
235
234
|
*/
|
|
236
|
-
get_
|
|
235
|
+
get_/*[v.basename]*/(query) {
|
|
237
236
|
var _this = this;
|
|
238
237
|
if (!query) {
|
|
239
238
|
query = {
|
|
@@ -242,8 +241,8 @@
|
|
|
242
241
|
}
|
|
243
242
|
this.$get('~${v.path}', query, function(json) {
|
|
244
243
|
if (json.result) {
|
|
245
|
-
_this
|
|
246
|
-
_this
|
|
244
|
+
_this/*['.' + v.name]*/.clear();
|
|
245
|
+
_this/*['.' + v.name]*/.addList(json.result.list)
|
|
247
246
|
}
|
|
248
247
|
});
|
|
249
248
|
},
|
|
@@ -254,7 +253,7 @@
|
|
|
254
253
|
/*[loop js.data v idx]*/
|
|
255
254
|
/*[if(v.path)]*/
|
|
256
255
|
// 获取 ${v.title}
|
|
257
|
-
this.get_
|
|
256
|
+
this.get_/*[v.basename]*/();
|
|
258
257
|
/*[/if]*/
|
|
259
258
|
/*[/loop]*/
|
|
260
259
|
}
|
|
@@ -1,161 +1,165 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<main id="${id}">
|
|
3
|
-
<mm_warp>
|
|
4
|
-
<mm_container>
|
|
5
|
-
<mm_row>
|
|
6
|
-
<
|
|
7
|
-
<mm_card :class="{ 'hide_filter': !show_filter }">
|
|
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" :class="{ 'hide_filter': !show_filter }">
|
|
8
8
|
<div class="card_head arrow" @click="show_filter = !show_filter">
|
|
9
9
|
<h5>${api.title}</h5>
|
|
10
10
|
</div>
|
|
11
11
|
<div class="card_body">
|
|
12
|
-
<mm_form class="bar_filter">
|
|
12
|
+
<div class="mm_form" class="bar_filter">
|
|
13
13
|
<div class="title">
|
|
14
14
|
<h5><span>筛选条件</span></h5>
|
|
15
15
|
</div>
|
|
16
|
-
<
|
|
16
|
+
<div class="mm_list list-3">
|
|
17
17
|
<!--{loop param.list v idx}-->
|
|
18
18
|
<!--{if(v.name === 'keyword')}-->
|
|
19
|
-
<mm_item>
|
|
20
|
-
<control_input v-model="query.keyword" title="${v.title}"
|
|
21
|
-
|
|
22
|
-
</
|
|
19
|
+
<div class="mm_item">
|
|
20
|
+
<control_input v-model="query.keyword" title="${v.title}"
|
|
21
|
+
desc="${v.description.replace(/\([0-9A-Za-z_]+\)/g, '').replace('用于搜索', '').replace(/、/g, ' / ')}" />
|
|
22
|
+
</div>
|
|
23
23
|
<!--{/if}-->
|
|
24
24
|
<!--{/loop}-->
|
|
25
25
|
<!--{loop field v idx}-->
|
|
26
26
|
<!--{if(v.show.search)}-->
|
|
27
27
|
<!--{if(v.show.search === "input")}-->
|
|
28
|
-
<mm_item>
|
|
29
|
-
<control_input v-model="query.${v.name}" title="${v.title}"
|
|
30
|
-
|
|
28
|
+
<div class="mm_item">
|
|
29
|
+
<control_input v-model="query.${v.name}" title="${v.title}"
|
|
30
|
+
@blur="search()" />
|
|
31
|
+
</div>
|
|
31
32
|
<!--{else if(v.show.search === "select")}-->
|
|
32
33
|
<!--{if(v.format.table)}-->
|
|
33
|
-
<mm_item>
|
|
34
|
+
<div class="mm_item">
|
|
34
35
|
<!--{if(v.format.key.endWith('_id') !== -1)}-->
|
|
35
|
-
<control_select type="list" v-model="query.${v.format.key}"
|
|
36
|
+
<control_select type="list" v-model="query.${v.format.key}"
|
|
37
|
+
title="${v.title}"
|
|
38
|
+
:options="$to_kv(${v.label}, '${v.format.id || v.format.key}', '${v.format.name}')"
|
|
39
|
+
@change="search()" />
|
|
36
40
|
<!--{else}-->
|
|
37
|
-
<control_select v-model="query.${v.format.key}" title="${v.title}"
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
+
<control_select v-model="query.${v.format.key}" title="${v.title}"
|
|
42
|
+
:options="$to_kv(${v.label}, '${v.format.id || v.format.key}', '${v.format.name}')"
|
|
43
|
+
@change="search()" />
|
|
44
|
+
<!--{/if}-->
|
|
45
|
+
</div>
|
|
41
46
|
<!--{else if(v.format.key.indexOf('user_id') !== -1)}-->
|
|
42
|
-
<mm_item>
|
|
43
|
-
<control_select v-model="query.${v.format.key}" title="${v.title}"
|
|
44
|
-
|
|
47
|
+
<div class="mm_item">
|
|
48
|
+
<control_select v-model="query.${v.format.key}" title="${v.title}"
|
|
49
|
+
:options="$to_kv(${v.label})" @change="search()" />
|
|
50
|
+
</div>
|
|
45
51
|
<!--{else}-->
|
|
46
|
-
<mm_item>
|
|
47
|
-
<control_select v-model="query.${v.format.key}" title="${v.title}"
|
|
48
|
-
|
|
52
|
+
<div class="mm_item">
|
|
53
|
+
<control_select v-model="query.${v.format.key}" title="${v.title}"
|
|
54
|
+
:options="$to_kv(${v.label})" @change="search()" />
|
|
55
|
+
</div>
|
|
49
56
|
<!--{/if}-->
|
|
50
57
|
<!--{/if}-->
|
|
51
58
|
<!--{/if}-->
|
|
52
59
|
<!--{/loop}-->
|
|
53
|
-
<mm_item>
|
|
54
|
-
<
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
60
|
+
<div class="mm_item">
|
|
61
|
+
<button class="mm_btn btn_primary-x" type="reset"
|
|
62
|
+
@click.native="reset();">重置</button>
|
|
63
|
+
</div>
|
|
64
|
+
</div>
|
|
65
|
+
</div>
|
|
58
66
|
<div class="bar_action">
|
|
59
67
|
<h5><span>操作</span></h5>
|
|
60
68
|
<div class="btns">
|
|
61
|
-
<
|
|
62
|
-
<
|
|
69
|
+
<button class="mm_btn btn_primary-x" url="./${name}_form?">添加</button>
|
|
70
|
+
<button @click.native="show = true" class="mm_btn btn_primary-x"
|
|
71
|
+
v-bind:class="{ 'disabled': !selects }">批量修改</button>
|
|
63
72
|
</div>
|
|
64
73
|
<div class="btn_small">
|
|
65
|
-
<control_file class="btn_default-x" type="excel" :func="import_db"
|
|
66
|
-
|
|
74
|
+
<control_file class="btn_default-x" type="excel" :func="import_db"
|
|
75
|
+
v-if="url_import"></control_file>
|
|
76
|
+
<button class="mm_btn btn_default-x" @click.native="export_db()"
|
|
77
|
+
v-if="url_export">导出</button>
|
|
67
78
|
</div>
|
|
68
79
|
</div>
|
|
69
|
-
<
|
|
70
|
-
<
|
|
71
|
-
<tr>
|
|
72
|
-
<th class="th_open"></th>
|
|
73
|
-
<th class="th_selected"><input type="checkbox" :checked="select_state" @click="select_all()" /></th>
|
|
74
|
-
<th class="th_id"><span>#</span></th>
|
|
75
|
-
<!--{loop field v idx}-->
|
|
76
|
-
<!--{if(v.show.table)}-->
|
|
77
|
-
<!--{if(v.name !== sql.key)}-->
|
|
78
|
-
<th class="th_${v.name}">
|
|
79
|
-
<span>${v.title}</span>
|
|
80
|
-
</th>
|
|
81
|
-
<!--{/if}-->
|
|
82
|
-
<!--{/if}-->
|
|
83
|
-
<!--{/loop}-->
|
|
84
|
-
<th class="th_handle"><span>操作</span></th>
|
|
85
|
-
</tr>
|
|
86
|
-
</thead>
|
|
87
|
-
<tbody>
|
|
88
|
-
<!-- <draggable v-model="list" tag="tbody" @change="sort_change"> -->
|
|
89
|
-
<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]) }"
|
|
90
|
-
@click="selected(idx)">
|
|
91
|
-
<th class="th_open"><button class="btn_open" :style="'margin-left:' + (1.5 * opens_lv(o[father_id])) + 'rem;'"
|
|
92
|
-
@click="opens_change(o[field])"><i class="fa-caret-right"></i></button></th>
|
|
93
|
-
<th class="th_selected"><input type="checkbox" :checked="select_has(o[field])" @click="select_change(o[field])" /></th>
|
|
94
|
-
<td>{{ o[field] }}</td>
|
|
95
|
-
<!--{loop field v idx}-->
|
|
96
|
-
<!--{if(v.show.table)}-->
|
|
97
|
-
<!--{if(v.name !== sql.key)}-->
|
|
98
|
-
<td>
|
|
99
|
-
<!--{if(v.dataType === 'tinyint')}-->
|
|
100
|
-
<control_switch v-model="o.${v.name}" @click.native="set(o)" />
|
|
101
|
-
<!--{else if(v.format)}-->
|
|
102
|
-
<!--{if(v.format.table)}-->
|
|
103
|
-
<span>{{ $get_name(${v.label}, o.${v.format.key}, '${v.format.id || v.format.key}', '${v.format.name}') }}</span>
|
|
104
|
-
<!--{else if(v.name == 'state' || v.name == 'status')}-->
|
|
105
|
-
<span v-bind:class="arr_color[o.${v.name}]">{{ ${v.label}[o.${v.name}] }}</span>
|
|
106
|
-
<!--{else}-->
|
|
107
|
-
<span>{{ ${v.label}[o.${v.name}] }}</span>
|
|
108
|
-
<!--{/if}-->
|
|
109
|
-
<!--{else if(v.name.indexOf('img') !== -1 || v.name.indexOf('icon') !== -1 || v.name === 'avatar')}-->
|
|
110
|
-
<img class="${v.name}" :src="o.${v.name}" alt="${v.title}" />
|
|
111
|
-
<!--{else if(v.dataType === 'date')}-->
|
|
112
|
-
<span>{{ $to_time(o.${v.name}, 'yyyy-MM-dd') }}</span>
|
|
113
|
-
<!--{else if(v.dataType === 'time')}-->
|
|
114
|
-
<span>{{ o.${v.name} }}</span>
|
|
115
|
-
<!--{else if(v.dataType === 'timestamp' || v.dataType === 'datetime')}-->
|
|
116
|
-
<span>{{ $to_time(o.${v.name}, 'yyyy-MM-dd hh:mm') }}</span>
|
|
117
|
-
<!--{else if(v.name === 'display' || v.name === 'orderby')}-->
|
|
118
|
-
<input class="input_display" v-model.number="o.${v.name}" @blur="set(o)" min="0" max="1000" />
|
|
119
|
-
<!--{else}-->
|
|
120
|
-
<control_input :auto="true" v-model="o.${v.name}" @blur="set(o)" />
|
|
121
|
-
<!--{/if}-->
|
|
122
|
-
</td>
|
|
123
|
-
<!--{/if}-->
|
|
124
|
-
<!--{/if}-->
|
|
125
|
-
<!--{/loop}-->
|
|
126
|
-
<td>
|
|
127
|
-
<mm_btn class="btn_primary" :url="'./${name}_form?${sql.key}=' + o[field]">修改</mm_btn>
|
|
128
|
-
<mm_btn class="btn_warning" @click.native="del_show(o, field)">删除</mm_btn>
|
|
129
|
-
</td>
|
|
130
|
-
</tr>
|
|
131
|
-
</tbody>
|
|
132
|
-
<!-- </draggable> -->
|
|
133
|
-
|
|
134
|
-
<template v-slot:right>
|
|
80
|
+
<div class="mm_table table-3">
|
|
81
|
+
<table>
|
|
135
82
|
<thead class="table-sm">
|
|
136
83
|
<tr>
|
|
84
|
+
<th class="th_open"></th>
|
|
85
|
+
<th class="th_selected"><input type="checkbox" :checked="select_state"
|
|
86
|
+
@click="select_all()" /></th>
|
|
87
|
+
<th class="th_id"><span>#</span></th>
|
|
88
|
+
<!--{loop field v idx}-->
|
|
89
|
+
<!--{if(v.show.table)}-->
|
|
90
|
+
<!--{if(v.name !== sql.key)}-->
|
|
91
|
+
<th class="th_${v.name}">
|
|
92
|
+
<span>${v.title}</span>
|
|
93
|
+
</th>
|
|
94
|
+
<!--{/if}-->
|
|
95
|
+
<!--{/if}-->
|
|
96
|
+
<!--{/loop}-->
|
|
137
97
|
<th class="th_handle"><span>操作</span></th>
|
|
138
98
|
</tr>
|
|
139
99
|
</thead>
|
|
140
100
|
<tbody>
|
|
141
|
-
<tr v-for="(o, idx) in list_new" :key="idx"
|
|
142
|
-
|
|
101
|
+
<tr v-for="(o, idx) in list_new" :key="idx"
|
|
102
|
+
:class="{'active': select == idx, sub: o[father_id], open: opens_has(o[field]), no_sub: !opens_has_sub(o[field]) }"
|
|
103
|
+
@click="selected(idx)">
|
|
104
|
+
<th class="th_open"><button class="btn_open"
|
|
105
|
+
:style="'margin-left:' + (1.5 * opens_lv(o[father_id])) + 'rem;'"
|
|
106
|
+
@click="opens_change(o[field])"><i
|
|
107
|
+
class="fa-caret-right"></i></button></th>
|
|
108
|
+
<th class="th_selected"><input type="checkbox"
|
|
109
|
+
:checked="select_has(o[field])"
|
|
110
|
+
@click="select_change(o[field])" /></th>
|
|
111
|
+
<td>{{ o[field] }}</td>
|
|
112
|
+
<!--{loop field v idx}-->
|
|
113
|
+
<!--{if(v.show.table)}-->
|
|
114
|
+
<!--{if(v.name !== sql.key)}-->
|
|
143
115
|
<td>
|
|
144
|
-
|
|
145
|
-
<
|
|
116
|
+
<!--{if(v.dataType === 'tinyint')}-->
|
|
117
|
+
<control_switch v-model="o.${v.name}" @click.native="set(o)" />
|
|
118
|
+
<!--{else if(v.format)}-->
|
|
119
|
+
<!--{if(v.format.table)}-->
|
|
120
|
+
<span>{{ $get_name(${v.label}, o.${v.format.key}, '${v.format.id || v.format.key}', '${v.format.name}') }}</span>
|
|
121
|
+
<!--{else if(v.name == 'state' || v.name == 'status')}-->
|
|
122
|
+
<span
|
|
123
|
+
v-bind:class="arr_color[o.${v.name}]">{{ ${v.label}[o.${v.name}] }}</span>
|
|
124
|
+
<!--{else}-->
|
|
125
|
+
<span>{{ ${v.label}[o.${v.name}] }}</span>
|
|
126
|
+
<!--{/if}-->
|
|
127
|
+
<!--{else if(v.name.indexOf('img') !== -1 || v.name.indexOf('icon') !== -1 || v.name === 'avatar')}-->
|
|
128
|
+
<img class="${v.name}" :src="o.${v.name}" alt="${v.title}" />
|
|
129
|
+
<!--{else if(v.dataType === 'date')}-->
|
|
130
|
+
<span>{{ $to_time(o.${v.name}, 'yyyy-MM-dd') }}</span>
|
|
131
|
+
<!--{else if(v.dataType === 'time')}-->
|
|
132
|
+
<span>{{ o.${v.name} }}</span>
|
|
133
|
+
<!--{else if(v.dataType === 'timestamp' || v.dataType === 'datetime')}-->
|
|
134
|
+
<span>{{ $to_time(o.${v.name}, 'yyyy-MM-dd hh:mm') }}</span>
|
|
135
|
+
<!--{else if(v.name === 'display' || v.name === 'orderby')}-->
|
|
136
|
+
<input class="input_display" v-model.number="o.${v.name}"
|
|
137
|
+
@blur="set(o)" min="0" max="1000" />
|
|
138
|
+
<!--{else}-->
|
|
139
|
+
<control_input :auto="true" v-model="o.${v.name}" @blur="set(o)" />
|
|
140
|
+
<!--{/if}-->
|
|
141
|
+
</td>
|
|
142
|
+
<!--{/if}-->
|
|
143
|
+
<!--{/if}-->
|
|
144
|
+
<!--{/loop}-->
|
|
145
|
+
<td>
|
|
146
|
+
<a class="mm_btn btn_primary"
|
|
147
|
+
:href="'./${name}_form?${sql.key}=' + o[field]">修改</a>
|
|
148
|
+
<button class="mm_btn btn_warning"
|
|
149
|
+
@click.native="del_show(o, field)">删除</button>
|
|
146
150
|
</td>
|
|
147
151
|
</tr>
|
|
148
152
|
</tbody>
|
|
149
|
-
</
|
|
150
|
-
</
|
|
153
|
+
</table>
|
|
154
|
+
</div>
|
|
151
155
|
</div>
|
|
152
|
-
</
|
|
153
|
-
</
|
|
154
|
-
</
|
|
155
|
-
</
|
|
156
|
-
</
|
|
156
|
+
</div>
|
|
157
|
+
</div>
|
|
158
|
+
</div>
|
|
159
|
+
</div>
|
|
160
|
+
</div>
|
|
157
161
|
<mm_modal v-model="show" mask="true">
|
|
158
|
-
<mm_card class="card">
|
|
162
|
+
<div class="mm_card" class="card">
|
|
159
163
|
<div class="card_head">
|
|
160
164
|
<h5>批量修改</h5>
|
|
161
165
|
</div>
|
|
@@ -165,19 +169,21 @@
|
|
|
165
169
|
<!--{if(v.show.batch)}-->
|
|
166
170
|
<dt>${v.title}</dt>
|
|
167
171
|
<dd>
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
172
|
+
<!--{if(v.show.batch === "input")}-->
|
|
173
|
+
<control_input v-model="form.${v.name}" />
|
|
174
|
+
<!--{else if(v.show.batch === "select")}-->
|
|
171
175
|
<!--{if(v.format.table)}-->
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
176
|
+
<!--{if(v.format.key.endWith('_id') !== -1)}-->
|
|
177
|
+
<control_select type="list" v-model="form.${v.format.key}"
|
|
178
|
+
:options="$to_kv(${v.label}, '${v.format.id || v.format.key}', '${v.format.name}')" />
|
|
179
|
+
<!--{else}-->
|
|
180
|
+
<control_select v-model="form.${v.format.key}"
|
|
181
|
+
:options="$to_kv(${v.label}, '${v.format.id || v.format.key}', '${v.format.name}')" />
|
|
182
|
+
<!--{/if}-->
|
|
177
183
|
<!--{else}-->
|
|
178
184
|
<control_select v-model="form.${v.format.key}" :options="$to_kv(${v.label})" />
|
|
179
185
|
<!--{/if}-->
|
|
180
|
-
|
|
186
|
+
<!--{/if}-->
|
|
181
187
|
</dd>
|
|
182
188
|
<!--{/if}-->
|
|
183
189
|
<!--{/loop}-->
|
|
@@ -185,11 +191,11 @@
|
|
|
185
191
|
</div>
|
|
186
192
|
<div class="card_foot">
|
|
187
193
|
<div class="mm_group">
|
|
188
|
-
<button class="btn_default" type="reset" @click="show = false">取消</button>
|
|
189
|
-
<button class="btn_primary" type="button" @click="batchSet()">提交</button>
|
|
194
|
+
<button class="mm_btn btn_default" type="reset" @click="show = false">取消</button>
|
|
195
|
+
<button class="mm_btn btn_primary" type="button" @click="batchSet()">提交</button>
|
|
190
196
|
</div>
|
|
191
197
|
</div>
|
|
192
|
-
</
|
|
198
|
+
</div>
|
|
193
199
|
</mm_modal>
|
|
194
200
|
</main>
|
|
195
201
|
</template>
|
|
@@ -222,7 +228,9 @@
|
|
|
222
228
|
},
|
|
223
229
|
form: {},
|
|
224
230
|
//颜色
|
|
225
|
-
arr_color: ['', '', 'font_yellow', 'font_success', 'font_warning', 'font_primary', 'font_info',
|
|
231
|
+
arr_color: ['', '', 'font_yellow', 'font_success', 'font_warning', 'font_primary', 'font_info',
|
|
232
|
+
'font_default'
|
|
233
|
+
],
|
|
226
234
|
/*[loop js.data v idx]*/
|
|
227
235
|
// ${' ' + v.title}
|
|
228
236
|
'${v.name}': ${@JSON.stringify(v.value)},
|
|
@@ -238,7 +246,7 @@
|
|
|
238
246
|
* 获取 ${v.title}
|
|
239
247
|
* @param {query} 查询条件
|
|
240
248
|
*/
|
|
241
|
-
get_
|
|
249
|
+
get_/*[v.basename]*/(query) {
|
|
242
250
|
var _this = this;
|
|
243
251
|
if (!query) {
|
|
244
252
|
query = {
|
|
@@ -247,8 +255,8 @@
|
|
|
247
255
|
}
|
|
248
256
|
this.$get('~${v.path}', query, function(json) {
|
|
249
257
|
if (json.result) {
|
|
250
|
-
_this
|
|
251
|
-
_this
|
|
258
|
+
_this/*['.' + v.name]*/.clear();
|
|
259
|
+
_this/*['.' + v.name]*/.addList(json.result.list)
|
|
252
260
|
}
|
|
253
261
|
});
|
|
254
262
|
},
|
|
@@ -258,7 +266,7 @@
|
|
|
258
266
|
* 获取列表之前
|
|
259
267
|
* @param {Object} param 参数
|
|
260
268
|
*/
|
|
261
|
-
get_list_before(param){
|
|
269
|
+
get_list_before(param) {
|
|
262
270
|
delete param.page;
|
|
263
271
|
param.size = "0";
|
|
264
272
|
return param;
|
|
@@ -279,7 +287,7 @@
|
|
|
279
287
|
keyword,
|
|
280
288
|
father_id
|
|
281
289
|
} = this.query;
|
|
282
|
-
|
|
290
|
+
|
|
283
291
|
if (keyword && father_id) {
|
|
284
292
|
return this.list.filter(function(o) {
|
|
285
293
|
return o.father_id == father_id && (o.title.indexOf(keyword) !== -1 || o.name.indexOf(
|
|
@@ -310,4 +318,4 @@
|
|
|
310
318
|
</script>
|
|
311
319
|
|
|
312
320
|
<style>
|
|
313
|
-
</style>
|
|
321
|
+
</style>
|