4
4
5
5
<div v-if =" loaded === true" >
6
6
<div class =" setting-header" >标签浏览页·分类列表</div >
7
- <div >
7
+ <b-form @submit.prevent = " $refs.all_category_button.onClick() " >
8
8
<b-form-group >
9
9
<b-input v-model =" all_category.value" />
10
10
<template slot="description">
23
23
:select-size =" Math.min(5, all_category_preview.length)" />
24
24
</b-form-group >
25
25
<SpinnerButton
26
+ ref =" all_category_button"
26
27
:variant =" typeof all_category.variant === 'string' ? all_category.variant : 'secondary'"
27
28
@click =" onDone => save('all_category', onDone)" >
28
29
<span v-text =" typeof all_category.text === 'string' ? all_category.text : '保存'" />
29
30
</SpinnerButton >
30
- </div >
31
+ </b-form >
31
32
32
33
<hr >
33
34
34
35
<div class =" setting-header" >数据安全</div >
35
- <div >
36
+ <b-form @submit.prevent = " $refs.allow_browser_button.onClick() " >
36
37
<b-form-group description =" 说明:本功能对于数据防修改能力较弱,仅做简单的浏览器级别防御,请不要过度依赖" >
37
38
<b-checkbox v-model =" allow_browser.value" >允许来自浏览器的读写</b-checkbox >
38
39
</b-form-group >
39
40
<SpinnerButton
41
+ ref =" allow_browser_button"
40
42
:variant =" typeof allow_browser.variant === 'string' ? allow_browser.variant : 'secondary'"
41
43
@click =" onDone => save('allow_browser', onDone)" >
42
44
<span v-text =" typeof allow_browser.text === 'string' ? allow_browser.text : '保存'" />
43
45
</SpinnerButton >
44
- </div >
46
+ </b-form >
47
+
48
+ <hr >
49
+
50
+ <div class =" setting-header" >特殊标签</div >
51
+ <b-form @submit.prevent =" $refs.special_tags_button.onClick()" >
52
+ <b-form-group label =" 返回总标签数量" :state =" special_count_state" invalid-feedback =" 不能包含#,空格" >
53
+ <b-input v-model =" special_tags.value.count" placeholder =" special_count" :state =" special_count_state" />
54
+ <template slot="description">
55
+ 使用方法:请求获取标签“<span v-text =" special_count" />[#计数前缀]”。如果不包含前缀,默认为空<br />
56
+ 返回:一个文本形式的数字<br />
57
+ 例子:
58
+ <ul >
59
+ <li >统计所有标签数量:“<span v-text =" special_count" />”</li >
60
+ <li >统计所有以a开头的标签的数量:“<span v-text =" special_count" />#a”</li >
61
+ </ul >
62
+ </template >
63
+ </b-form-group >
64
+ <b-form-group label =" 获取指定前缀的所有标签和值" :state =" special_getall_state" invalid-feedback =" 不能包含,空格,空格" >
65
+ <b-input v-model =" special_tags.value.getall" placeholder =" special_getall" :state =" special_getall_state" />
66
+ <template slot="description">
67
+ 使用方法:请求获取标签“<span v-text =" special_getall" />#获取前缀[#起始偏移][#数量限制]”。
68
+ <b >***如数据库内的数据数量较大,请慎重使用***</b ><br />
69
+ <ul >
70
+ <li >如果不包含前缀,默认为空</li >
71
+ <li >如果不包含起始偏移,默认为0</li >
72
+ <li >如果不包含数量限制,默认为无限制</li >
73
+ </ul >
74
+ 返回:一个json编码的文本,格式如<code >[ 结果列表 ]</code >,每个列表项为<code >{ key: '标签', value: '值' }</code ><br />
75
+ 例子:
76
+ <ul >
77
+ <li >获取所有标签:“<span v-text =" special_getall" />”</li >
78
+ <li >获取所有以a开头的标签:“<span v-text =" special_getall" />#a”</li >
79
+ <li >获取所有标签中的前100个:“<span v-text =" special_getall" />#a#0#100”</li >
80
+ <li >获取所有标签中的第101-150个:“<span v-text =" special_getall" />#a#100#50”</li >
81
+ </ul >
82
+ </template >
83
+ </b-form-group >
84
+ <b-form-group label =" 一次性获取多个标签的值" :state =" special_listget_state" invalid-feedback =" 不能包含,空格" >
85
+ <b-input v-model =" special_tags.value.listget" placeholder =" special_listget" :state =" special_listget_state" />
86
+ <template slot="description">
87
+ 使用方法:请求获取标签“<span v-text =" special_listget" />[#标签1][#标签2][……]”<br />
88
+ 返回:一个json编码的文本,格式如<code >[ 结果列表 ]</code >,每个列表项为<code >{ key: '标签', value: '值' }</code ><br />
89
+ 例子:获取"id_2455_pwd"和"id_2455_money":“<span v-text =" special_listget" />#id_2455_pwd#id_2455_money”
90
+ </template >
91
+ </b-form-group >
92
+ <b-form-group label =" 搜索数据库的标签和值" :state =" special_search_state" invalid-feedback =" 不能包含,空格" >
93
+ <b-input v-model =" special_tags.value.search" placeholder =" special_search" :state =" special_search_state" />
94
+ <template slot="description">
95
+ 使用方法:请求获取标签“<span v-text =" special_search" />#搜索关键词”<br />
96
+ 返回:一个json编码的文本,格式如<code >{ "count": 总共多少项, "result": [ 搜索结果列表 ] }</code >,其中每个列表项为<code >{ key: '标签', value: '值' }</code ><br />
97
+ 例子:搜索"john":“<span v-text =" special_search" />#john”
98
+ </template >
99
+ </b-form-group >
100
+ <SpinnerButton
101
+ ref =" special_tags_button"
102
+ :disabled =" special_count_state === false || special_getall_state === false || special_listget_state === false || special_search_state === false"
103
+ :variant =" typeof special_tags.variant === 'string' ? special_tags.variant : 'secondary'"
104
+ @click =" onDone => save('special_tags', onDone)" >
105
+ <span v-text =" typeof special_tags.text === 'string' ? special_tags.text : '保存'" />
106
+ </SpinnerButton >
107
+ </b-form >
45
108
46
109
<hr >
47
110
@@ -80,13 +143,10 @@ export default {
80
143
data () {
81
144
return {
82
145
loaded: false ,
83
- all_category: {
84
- value: ' ' ,
85
- variant: undefined ,
86
- text: undefined
87
- },
88
- allow_browser: {
89
- value: true ,
146
+ all_category: { value: ' ' , variant: undefined , text: undefined },
147
+ allow_browser: { value: true , variant: undefined , text: undefined },
148
+ special_tags: {
149
+ value: { count: ' ' , getall: ' ' , listget: ' ' , search: ' ' },
90
150
variant: undefined ,
91
151
text: undefined
92
152
}
@@ -96,19 +156,40 @@ export default {
96
156
all_category_preview () {
97
157
return Array .from (new Set (this .all_category .value .split (' #' )))
98
158
.map (item => ({value: item, text: item .length === 0 ? ' 显示所有' : ` 前缀\` ${ item} \` ` }))
99
- }
159
+ },
160
+ special_count () { return this .special_tags .value .count || ' special_count' },
161
+ special_getall () { return this .special_tags .value .getall || ' special_getall' },
162
+ special_listget () { return this .special_tags .value .listget || ' special_listget' },
163
+ special_search () { return this .special_tags .value .search || ' special_search' },
164
+ special_count_state () { return this .vaidSpecialTag (this .special_count ) },
165
+ special_getall_state () { return this .vaidSpecialTag (this .special_getall ) },
166
+ special_listget_state () { return this .vaidSpecialTag (this .special_listget ) },
167
+ special_search_state () { return this .vaidSpecialTag (this .special_search ) }
100
168
},
101
169
mounted () {
102
170
this .loadSettings ()
103
171
},
104
172
methods: {
173
+ vaidSpecialTag (val ) {
174
+ if (val .indexOf (' #' ) >= 0 || val .indexOf (' ' ) >= 0 ) {
175
+ return false
176
+ }
177
+ return null
178
+ },
105
179
async loadSettings () {
106
180
this .loaded = false
107
181
let { status, result } = (await this .$parent .service .get (' settings' )).data
108
182
switch (status) {
109
183
case 0 : {
110
184
this .all_category .value = result .all_category || ' '
111
185
this .allow_browser .value = result .allow_browser !== ' false'
186
+ if (result .special_tags ) {
187
+ result .special_tags = JSON .parse (result .special_tags )
188
+ this .special_tags .value .count = typeof result .special_tags .count === ' string' ? result .special_tags .count : ' '
189
+ this .special_tags .value .getall = typeof result .special_tags .getall === ' string' ? result .special_tags .getall : ' '
190
+ this .special_tags .value .listget = typeof result .special_tags .listget === ' string' ? result .special_tags .listget : ' '
191
+ this .special_tags .value .search = typeof result .special_tags .search === ' string' ? result .special_tags .search : ' '
192
+ }
112
193
this .loaded = true
113
194
break
114
195
}
@@ -123,12 +204,13 @@ export default {
123
204
this .$root .showInfo (' 设置内容为undefined或null,请刷新页面后重试。如反复出现请联系作者排查问题' )
124
205
return
125
206
}
207
+ value = Array .isArray (value) || typeof value === ' object' ? JSON .stringify (value) : value
126
208
let { status } = (await this .$parent .service .post (' setting_update' , { settingId, value })).data
209
+ onDone ()
127
210
switch (status) {
128
211
case 0 : {
129
212
this [settingId].text = ' 保存成功'
130
213
this [settingId].variant = ' success'
131
- onDone ()
132
214
await this .$root .sleep (1000 )
133
215
this [settingId].text = undefined
134
216
this [settingId].variant = undefined
0 commit comments