|
12 | 12 | <meta name="keywords" content="{{keywords}}"/> |
13 | 13 | <meta name="generator" content="FileCodeBox"/> |
14 | 14 | <meta name="template" content="Lan"/> |
15 | | - <script src="/static/asserts/vue.min.js"></script> |
| 15 | + <script src="/static/asserts/vue.js"></script> |
16 | 16 | <script src="/static/asserts/index.js"></script> |
| 17 | + <style> |
| 18 | + .el-menu-demo { |
| 19 | + text-align: center; |
| 20 | + } |
| 21 | + </style> |
17 | 22 | </head> |
18 | 23 | <body> |
19 | 24 | <div id="app"> |
20 | 25 | <el-row v-if="login" :gutter="10"> |
21 | | - <el-col :xs="0" :sm="4" :md="4" :lg="4" :xl="4"> |
22 | | - |
| 26 | + <el-col :span="24" style="text-align: center"> |
| 27 | + <el-menu :default-active="activeIndex" class="el-menu-demo" mode="horizontal" @select="handleSelect"> |
| 28 | + <el-menu-item index="2">文件管理</el-menu-item> |
| 29 | + <el-menu-item index="3">系统配置</el-menu-item> |
| 30 | + </el-menu> |
23 | 31 | </el-col> |
24 | | - <el-col :xs="24" :sm="16" :md="16" :lg="16" :xl="16"> |
25 | | - <el-card> |
26 | | - <el-empty v-if="files.length===0" description="暂时还没有文件"></el-empty> |
| 32 | + <el-col v-if="activeIndex === '2'"> |
| 33 | + <el-card style="height: 80vh;overflow: scroll;margin-bottom: 1rem"> |
| 34 | + <el-empty v-if="files.length === 0" description="暂时还没有文件"></el-empty> |
27 | 35 | <el-card v-for="file in files" :key="file.code"> |
28 | 36 | <el-row> |
29 | 37 | <el-col :span="20"> |
|
49 | 57 | </el-row> |
50 | 58 | </el-card> |
51 | 59 | </el-card> |
| 60 | + <el-pagination |
| 61 | + background |
| 62 | + style="text-align: center" |
| 63 | + layout="prev, pager, next, sizes" |
| 64 | + :page-size="paginate.page_size" |
| 65 | + @current-change="loginAdmin" |
| 66 | + @size-change="updateSize" |
| 67 | + :total="paginate.total" |
| 68 | + > |
| 69 | + </el-pagination> |
| 70 | + </el-col> |
| 71 | + <el-col v-if="activeIndex === '3'"> |
| 72 | + <el-form ref="form" style="width: 50%;margin:2rem auto" :model="config" label-width="200px"> |
| 73 | + <!--? <el-form-item label="错误限制">--> |
| 74 | + <!--? <div>--> |
| 75 | + <!--? 间隔:--> |
| 76 | + <!--? <el-input-number v-model="config.error_count" :min="1"></el-input-number>--> |
| 77 | + <!--? 分钟--> |
| 78 | + <!--? </div>--> |
| 79 | + <!--? <div>--> |
| 80 | + <!--? 数量:--> |
| 81 | + <!--? <el-input-number v-model="config.error_minute" :min="1"></el-input-number>--> |
| 82 | + <!--? 个--> |
| 83 | + <!--? </div>--> |
| 84 | + <!--? </el-form-item>--> |
| 85 | + <!--? <el-form-item label="上传限制">--> |
| 86 | + <!--? <div>--> |
| 87 | + <!--? 开启上传:--> |
| 88 | + <!--? <el-switch--> |
| 89 | + <!--? v-model="config.enable_upload"--> |
| 90 | + <!--? active-color="#13ce66"--> |
| 91 | + <!--? inactive-color="#ff4949">--> |
| 92 | + <!--? </el-switch>--> |
| 93 | + <!--? </div>--> |
| 94 | + <!--? <div>--> |
| 95 | + <!--? 间隔:--> |
| 96 | + <!--? <el-input-number v-model="config.upload_minute" :min="1"></el-input-number>--> |
| 97 | + <!--? 分钟--> |
| 98 | + <!--? </div>--> |
| 99 | + <!--? <div>--> |
| 100 | + <!--? 数量:--> |
| 101 | + <!--? <el-input-number v-model="config.upload_count" :min="1"></el-input-number>--> |
| 102 | + <!--? 个--> |
| 103 | + <!--? </div>--> |
| 104 | + <!--? <div>--> |
| 105 | + <!--? 最长:--> |
| 106 | + <!--? <el-input-number v-model="config.max_days" :min="1"></el-input-number>--> |
| 107 | + <!--? 天--> |
| 108 | + <!--? </div>--> |
| 109 | + <!--? <div>--> |
| 110 | + <!--? 大小:--> |
| 111 | + <!--? <el-input-number v-model="config.file_size_limit" :min="1"></el-input-number>--> |
| 112 | + <!--? MB--> |
| 113 | + <!--? </div>--> |
| 114 | + <!--? </el-form-item>--> |
| 115 | + <!--? <el-form-item label="删除间隔">--> |
| 116 | + <!--? 时长:--> |
| 117 | + <!--? <el-input-number v-model="config.delete_expire_files_interval"></el-input-number>--> |
| 118 | + <!--? 分钟--> |
| 119 | + <!--? </el-form-item>--> |
| 120 | + <!--? <el-form-item label="管理员密码">--> |
| 121 | + <!--? <el-input v-model="config.admin_password" type="password"></el-input>--> |
| 122 | + <!--? </el-form-item>--> |
| 123 | + <el-form-item v-for="(banner,index) in config.banners" :label="'Banner'+ (index+1)"> |
| 124 | + <div style="width: 50%;display: inline-block"> |
| 125 | + <el-input v-model="banner.text" placeholder="文本"></el-input> |
| 126 | + <el-input v-model="banner.url" placeholder="跳转链接"></el-input> |
| 127 | + <el-input v-model="banner.src" placeholder="图片路径"></el-input> |
| 128 | + </div> |
| 129 | + <div style="display: inline-block"> |
| 130 | + <el-button type="danger" @click="deleteBanner(index)">删除</el-button> |
| 131 | + </div> |
| 132 | + </el-form-item> |
| 133 | + <el-form-item> |
| 134 | + <el-button size="mini" @click="addBanner" type="primary">新增Banner</el-button> |
| 135 | + </el-form-item> |
| 136 | + <el-form-item> |
| 137 | + <el-button @click="updateConfig" type="primary">更新</el-button> |
| 138 | + </el-form-item> |
| 139 | + </el-form> |
52 | 140 | </el-col> |
53 | | - <el-col :xs="0" :sm="4" :md="4" :lg="4" :xl="4"> </el-col> |
54 | 141 | </el-row> |
55 | 142 | <div v-else style="width: 250px;text-align: center;margin: 40vh auto"> |
56 | 143 | <el-input v-model="pwd" placeholder="请输入登录密码"> |
|
69 | 156 | return { |
70 | 157 | login: false, |
71 | 158 | pwd: '', |
72 | | - files: [], |
| 159 | + activeIndex: '2', |
73 | 160 | config: { |
74 | | - error_count: 0, |
75 | | - file_size: 0, |
76 | | - admin_pwd: 'admin' |
77 | | - } |
| 161 | + // enable_upload: true, |
| 162 | + // max_days: 7, |
| 163 | + // error_count: 3, |
| 164 | + // error_minute: 10, |
| 165 | + // upload_count: 10, |
| 166 | + // upload_minute: 10, |
| 167 | + // delete_expire_files_interval: 10, |
| 168 | + // admin_password: 'admin', |
| 169 | + // file_size_limit: 10, |
| 170 | + banners: [] |
| 171 | + }, |
| 172 | + files: [], |
| 173 | + paginate: { |
| 174 | + page: 1, |
| 175 | + size: 10, |
| 176 | + total: 0, |
| 177 | + }, |
78 | 178 | }; |
79 | 179 | }, |
80 | 180 | mounted: function () { |
81 | 181 | const pwd = localStorage.getItem('pwd'); |
82 | 182 | if (pwd) { |
83 | 183 | login = true; |
84 | 184 | this.pwd = pwd; |
| 185 | + axios.get('/config', { |
| 186 | + headers: { |
| 187 | + pwd: pwd |
| 188 | + } |
| 189 | + }).then(res => { |
| 190 | + console.log(res.data.data) |
| 191 | + this.config = res.data.data; |
| 192 | + }); |
85 | 193 | this.loginAdmin(); |
86 | 194 | } |
87 | 195 | }, |
88 | 196 | methods: { |
89 | | - loginAdmin: function () { |
90 | | - axios.post('', {}, {'headers': {'pwd': this.pwd}}).then(res => { |
91 | | - this.files = res.data.data; |
| 197 | + updateSize: function (value) { |
| 198 | + this.paginate.size = value; |
| 199 | + this.loginAdmin(); |
| 200 | + }, |
| 201 | + deleteBanner: function (index) { |
| 202 | + this.config.banners.splice(index, 1); |
| 203 | + }, |
| 204 | + addBanner: function () { |
| 205 | + this.config.banners.push({ |
| 206 | + 'url': '', |
| 207 | + 'src': '', |
| 208 | + 'text': '', |
| 209 | + }) |
| 210 | + }, |
| 211 | + updateConfig: function () { |
| 212 | + axios.patch('', this.config, { |
| 213 | + 'headers': { |
| 214 | + 'pwd': this.pwd, |
| 215 | + 'Content-Type': 'multipart/json' |
| 216 | + } |
| 217 | + }).then(res => { |
| 218 | + this.$message({ |
| 219 | + message: res.data.detail, |
| 220 | + type: 'success' |
| 221 | + }); |
| 222 | + }) |
| 223 | + }, |
| 224 | + loginAdmin: function (current_page = 1) { |
| 225 | + this.paginate.page = current_page; |
| 226 | + axios.post('', this.paginate, { |
| 227 | + 'headers': { |
| 228 | + 'pwd': this.pwd, |
| 229 | + 'Content-Type': 'multipart/form-data' |
| 230 | + } |
| 231 | + }).then(res => { |
| 232 | + this.paginate = res.data.paginate; |
| 233 | + this.files = res.data.data |
92 | 234 | this.login = true; |
93 | 235 | localStorage.setItem('pwd', this.pwd); |
94 | 236 | }).catch(e => { |
95 | 237 | localStorage.clear() |
96 | 238 | this.$message({'message': e.response.data.detail, 'type': 'error'}); |
97 | 239 | }); |
98 | 240 | }, |
| 241 | + handleSelect(key, keyPath) { |
| 242 | + this.activeIndex = key; |
| 243 | + }, |
99 | 244 | deleteFile: function (code) { |
100 | 245 | axios.delete('?code=' + code, {'headers': {'pwd': this.pwd}}).then(res => { |
101 | 246 | this.files = this.files.filter(item => item.code !== code) |
|
0 commit comments