3
3
<template slot="header">设置</template >
4
4
5
5
<div v-if =" loaded === true" >
6
- <div style = " font-weight : bold ; margin-bottom : 10 px " disabled >标签浏览页·分类列表</div >
6
+ <div class = " setting-header " >标签浏览页·分类列表</div >
7
7
<div >
8
8
<b-form-group >
9
- <b-input v-model =" setting. all_category" />
9
+ <b-input v-model =" all_category.value " />
10
10
<template slot="description">
11
11
使用井号#分隔每一项(重复项会被隐藏)<br >
12
12
例如:默认显示全部,可选显示“student_”或者“teacher_”开头的标签,则应当这么填:
13
- <b-link @click =" setting. all_category = '#student_#teacher_'" >#student_#teacher_(点击预览)</b-link >
13
+ <b-link @click =" all_category.value = '#student_#teacher_'" >#student_#teacher_(点击预览)</b-link >
14
14
<br >
15
15
例如:默认显示“student_”,可选显示全部和开头为“teacher_”的标签,则应当这么填:
16
- <b-link @click =" setting. all_category = 'student_##teacher_'" >student_##teacher_(点击预览)</b-link >
16
+ <b-link @click =" all_category.value = 'student_##teacher_'" >student_##teacher_(点击预览)</b-link >
17
17
</template >
18
18
</b-form-group >
19
19
<b-form-group label =" 预览" >
23
23
:select-size =" Math.min(5, all_category_preview.length)" />
24
24
</b-form-group >
25
25
<SpinnerButton
26
- :variant =" typeof buttonVariant. all_category === 'string' ? buttonVariant. all_category : 'secondary'"
27
- @click =" updateCategory " >
28
- <span v-text =" typeof buttonText. all_category === 'string' ? buttonText. all_category : '保存'" />
26
+ :variant =" typeof all_category.variant === 'string' ? all_category.variant : 'secondary'"
27
+ @click =" onDone => save('all_category', onDone) " >
28
+ <span v-text =" typeof all_category.text === 'string' ? all_category.text : '保存'" />
29
29
</SpinnerButton >
30
30
</div >
31
31
32
32
<hr >
33
33
34
- <div style =" font-weight :bold ; margin-bottom :10px " disabled >危险选项</div >
34
+ <div class =" setting-header" >数据安全</div >
35
+ <div >
36
+ <b-form-group description =" 说明:本功能对于数据防修改能力较弱,仅做简单的浏览器级别防御,请不要过度依赖" >
37
+ <b-checkbox v-model =" allow_browser.value" >允许来自浏览器的读写</b-checkbox >
38
+ </b-form-group >
39
+ <SpinnerButton
40
+ :variant =" typeof allow_browser.variant === 'string' ? allow_browser.variant : 'secondary'"
41
+ @click =" onDone => save('allow_browser', onDone)" >
42
+ <span v-text =" typeof allow_browser.text === 'string' ? allow_browser.text : '保存'" />
43
+ </SpinnerButton >
44
+ </div >
45
+
46
+ <hr >
47
+
48
+ <div class =" setting-header" >危险选项</div >
35
49
<div >
36
50
<b-form-group >
37
51
<SpinnerButton @click =" eraseData" variant =" danger" >清除数据库</SpinnerButton >
@@ -66,20 +80,21 @@ export default {
66
80
data () {
67
81
return {
68
82
loaded: false ,
69
- setting: {
70
- all_category: ' '
71
- },
72
- buttonVariant: {
73
- all_category: undefined
83
+ all_category: {
84
+ value: ' ' ,
85
+ variant: undefined ,
86
+ text: undefined
74
87
},
75
- buttonText: {
76
- all_category: undefined
88
+ allow_browser: {
89
+ value: true ,
90
+ variant: undefined ,
91
+ text: undefined
77
92
}
78
93
}
79
94
},
80
95
computed: {
81
96
all_category_preview () {
82
- return Array .from (new Set (this .setting . all_category .split (' #' )))
97
+ return Array .from (new Set (this .all_category . value .split (' #' )))
83
98
.map (item => ({value: item, text: item .length === 0 ? ' 显示所有' : ` 前缀\` ${ item} \` ` }))
84
99
}
85
100
},
@@ -92,7 +107,8 @@ export default {
92
107
let { status, result } = (await this .$parent .service .get (' settings' )).data
93
108
switch (status) {
94
109
case 0 : {
95
- if (result .hasOwnProperty (' all_category' )) this .setting .all_category = result .all_category
110
+ this .all_category .value = result .all_category || ' '
111
+ this .allow_browser .value = result .allow_browser !== ' false'
96
112
this .loaded = true
97
113
break
98
114
}
@@ -101,27 +117,29 @@ export default {
101
117
}
102
118
}
103
119
},
104
- async save (settingId , value ) {
120
+ async save (settingId, onDone = () => {}) {
121
+ let value = (this [settingId] || {}).value
122
+ if (value === undefined || value === null ) {
123
+ this .$root .showInfo (' ' , ' 设置内容为undefined或null,请刷新页面后重试。如反复出现请联系作者排查问题' )
124
+ return
125
+ }
105
126
let { status } = (await this .$parent .service .post (' setting_update' , { settingId, value })).data
106
127
switch (status) {
107
128
case 0 : {
108
- return true
129
+ this [settingId].text = ' 保存成功'
130
+ this [settingId].variant = ' success'
131
+ onDone ()
132
+ await this .$root .sleep (1000 )
133
+ this [settingId].text = undefined
134
+ this [settingId].variant = undefined
135
+ break
109
136
}
110
137
default : {
111
138
throw new Error (` 保存设置'${ settingId} '失败,错误码${ status} ` )
112
139
}
113
140
}
114
141
},
115
142
116
- async updateCategory (onDone ) {
117
- let result = await this .save (' all_category' , this .setting .all_category )
118
- onDone ()
119
- this .buttonText .all_category = result ? ' 保存成功' : ' 保存失败'
120
- this .buttonVariant .all_category = result ? ' success' : ' danger'
121
- await this .$root .sleep (1000 )
122
- this .buttonText .all_category = undefined
123
- this .buttonVariant .all_category = undefined
124
- },
125
143
eraseData (onDone ) {
126
144
this .$root .showConfirm (' ' , ' 确认要清空数据库吗?该操作无法逆转!请提前做好数据备份' , async () => {
127
145
let { status } = (await this .$parent .service .post (' erase_data' )).data
@@ -176,5 +194,8 @@ export default {
176
194
</script >
177
195
178
196
<style >
179
-
197
+ .setting-header {
198
+ font-weight : bold ;
199
+ margin-bottom : 10px ;
200
+ }
180
201
</style >
0 commit comments