修改:缓存、统计

Signed-off-by: skyselang <215817969@qq.com>
This commit is contained in:
skyselang 2021-09-29 15:03:32 +08:00
parent 664c6c2bb0
commit 3c3ebab876
54 changed files with 507 additions and 503 deletions

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
.margin-bottom[data-v-3e2e0422]{margin-bottom:5px}

View File

@ -1 +1 @@
.back-to-ceiling[data-v-766863d9]{position:fixed;display:inline-block;text-align:center;cursor:pointer}.back-to-ceiling[data-v-766863d9]:hover{background:#d5dbe7}.fade-enter-active[data-v-766863d9],.fade-leave-active[data-v-766863d9]{-webkit-transition:opacity .5s;transition:opacity .5s}.fade-enter[data-v-766863d9],.fade-leave-to[data-v-766863d9]{opacity:0}.back-to-ceiling .Icon[data-v-766863d9]{fill:#9aaabf;background:none}.box-card[data-v-b50e96ee]{text-align:center}.box-card .text[data-v-b50e96ee]{text-align:center;color:#666;font-size:20px;line-height:32px;font-weight:700;margin-bottom:10px}
.back-to-ceiling[data-v-766863d9]{position:fixed;display:inline-block;text-align:center;cursor:pointer}.back-to-ceiling[data-v-766863d9]:hover{background:#d5dbe7}.fade-enter-active[data-v-766863d9],.fade-leave-active[data-v-766863d9]{-webkit-transition:opacity .5s;transition:opacity .5s}.fade-enter[data-v-766863d9],.fade-leave-to[data-v-766863d9]{opacity:0}.back-to-ceiling .Icon[data-v-766863d9]{fill:#9aaabf;background:none}.box-card[data-v-bc6fad40]{text-align:center}.box-card .text[data-v-bc6fad40]{text-align:center;color:#666;font-size:20px;line-height:32px;font-weight:700;margin-bottom:10px}

View File

@ -0,0 +1 @@
.padding-right[data-v-ef947cf4]{color:#303133;font-size:14px;padding-right:30px}.el-icon-copy-document[data-v-ef947cf4]{color:#1890ff}

View File

@ -1 +1 @@
.back-to-ceiling[data-v-766863d9]{position:fixed;display:inline-block;text-align:center;cursor:pointer}.back-to-ceiling[data-v-766863d9]:hover{background:#d5dbe7}.fade-enter-active[data-v-766863d9],.fade-leave-active[data-v-766863d9]{-webkit-transition:opacity .5s;transition:opacity .5s}.fade-enter[data-v-766863d9],.fade-leave-to[data-v-766863d9]{opacity:0}.back-to-ceiling .Icon[data-v-766863d9]{fill:#9aaabf;background:none}.box-card[data-v-4d30981a]{text-align:center}.box-card .text[data-v-4d30981a]{text-align:center;color:#666;font-size:20px;line-height:32px;font-weight:700;margin-bottom:10px}
.back-to-ceiling[data-v-766863d9]{position:fixed;display:inline-block;text-align:center;cursor:pointer}.back-to-ceiling[data-v-766863d9]:hover{background:#d5dbe7}.fade-enter-active[data-v-766863d9],.fade-leave-active[data-v-766863d9]{-webkit-transition:opacity .5s;transition:opacity .5s}.fade-enter[data-v-766863d9],.fade-leave-to[data-v-766863d9]{opacity:0}.back-to-ceiling .Icon[data-v-766863d9]{fill:#9aaabf;background:none}.box-card[data-v-a7bbc70a]{text-align:center}.box-card .text[data-v-a7bbc70a]{text-align:center;color:#666;font-size:20px;line-height:32px;font-weight:700;margin-bottom:10px}

View File

@ -0,0 +1 @@
.margin-bottom[data-v-766fc46c]{margin-bottom:5px}

View File

@ -1 +0,0 @@
.padding-right[data-v-36de341c]{color:#303133;font-size:14px;padding-right:30px}.el-icon-copy-document[data-v-36de341c]{color:#1890ff}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -23,7 +23,7 @@ import Layout from '@/layout'
* // 你可以设置 alwaysShow: true这样它就会忽略之前定义的规则一直显示根路由
* alwaysShow: true
*
* // 设定路由的名字,一定要填写不然使用<keep-alive>时会出现各种问题
* // 设定路由的名字,一定要填写且与vue文件name一致不然使用<keep-alive>时会出现各种问题
* name: 'Index'
* meta: {
* roles: ['admin/Index/index'] // 设置该路由进入的权限(菜单链接),支持多个权限叠加
@ -110,7 +110,12 @@ export const asyncRoutes = [
meta: {
title: '会员管理',
icon: 'el-icon-user',
roles: ['admin/Member/list', 'admin/MemberLog/list', 'admin/Member/stat']
roles: [
'admin/Member/list',
'admin/MemberLog/list',
'admin/MemberLog/stat',
'admin/Member/stat'
]
},
redirect: 'noRedirect',
component: Layout,
@ -136,17 +141,6 @@ export const asyncRoutes = [
},
component: () => import('@/views/member/member-log')
},
{
path: 'member-log-stat',
name: 'MemberLogStat',
meta: {
title: '会员日志统计',
roles: ['admin/MemberLog/stat'],
activeMenu: '/member/member-log'
},
component: () => import('@/views/member/member-log-stat'),
hidden: true
},
{
path: 'member-stat',
name: 'MemberStat',
@ -156,6 +150,16 @@ export const asyncRoutes = [
roles: ['admin/Member/stat']
},
component: () => import('@/views/member/member-stat')
},
{
path: 'member-log-stat',
name: 'MemberLogStat',
meta: {
title: '会员日志统计',
icon: 'el-icon-user',
roles: ['admin/MemberLog/stat']
},
component: () => import('@/views/member/member-log-stat')
}
]
},
@ -226,7 +230,8 @@ export const asyncRoutes = [
icon: 'el-icon-folder',
roles: [
'admin/file.File/list',
'admin/file.Group/list'
'admin/file.Group/list',
'admin/file.Setting/info'
]
},
redirect: 'noRedirect',
@ -235,7 +240,7 @@ export const asyncRoutes = [
children: [
{
path: 'file',
name: 'File',
name: 'FileFile',
meta: {
title: '文件管理',
icon: 'el-icon-folder',
@ -245,7 +250,7 @@ export const asyncRoutes = [
},
{
path: 'group',
name: 'Group',
name: 'FileGroup',
meta: {
title: '文件分组',
icon: 'el-icon-folder',
@ -255,7 +260,7 @@ export const asyncRoutes = [
},
{
path: 'setting',
name: 'setting',
name: 'FileSetting',
meta: {
title: '文件设置',
icon: 'el-icon-folder',
@ -288,7 +293,7 @@ export const asyncRoutes = [
children: [
{
path: 'api',
name: 'Api',
name: 'SettingApi',
meta: {
title: '接口管理',
icon: 'el-icon-setting',
@ -298,7 +303,7 @@ export const asyncRoutes = [
},
{
path: 'base',
name: 'Base',
name: 'SettingBase',
meta: {
title: '设置管理',
icon: 'el-icon-setting',
@ -313,7 +318,7 @@ export const asyncRoutes = [
},
{
path: 'wechat',
name: 'Wechat',
name: 'SettingWechat',
meta: {
title: '微信设置',
icon: 'el-icon-setting',
@ -323,7 +328,7 @@ export const asyncRoutes = [
},
{
path: 'region',
name: 'Region',
name: 'SettingRegion',
meta: {
title: '地区管理',
icon: 'el-icon-setting',
@ -345,6 +350,7 @@ export const asyncRoutes = [
'admin/admin.Role/list',
'admin/admin.User/list',
'admin/admin.UserLog/list',
'admin/admin.UserLog/stat',
'admin/admin.UserCenter/info'
]
},
@ -386,23 +392,12 @@ export const asyncRoutes = [
path: 'user-log',
name: 'AdminUserLog',
meta: {
title: '日志管理',
title: '用户日志',
icon: 'el-icon-lock',
roles: ['admin/admin.UserLog/list']
},
component: () => import('@/views/admin/user/user-log')
},
{
path: 'user-log-stat',
name: 'AdminUserLogStat',
meta: {
title: '日志管理统计',
roles: ['admin/admin.UserLog/stat'],
activeMenu: '/admin/rule/user-log'
},
component: () => import('@/views/admin/user/user-log-stat'),
hidden: true
},
{
path: 'user-center',
name: 'AdminUserCenter',
@ -412,6 +407,16 @@ export const asyncRoutes = [
roles: ['admin/admin.UserCenter/info']
},
component: () => import('@/views/admin/user/user-center')
},
{
path: 'user-log-stat',
name: 'AdminUserLogStat',
meta: {
title: '用户日志统计',
icon: 'el-icon-lock',
roles: ['admin/admin.UserLog/stat']
},
component: () => import('@/views/admin/user/user-log-stat')
}
]
},
@ -438,7 +443,7 @@ export const asyncRoutes = [
children: [
{
path: 'setting',
name: 'AdminSetting',
name: 'AdminSystemSetting',
meta: {
title: '设置管理',
icon: 'el-icon-s-tools',
@ -454,7 +459,7 @@ export const asyncRoutes = [
},
{
path: 'apidoc',
name: 'AdminApidoc',
name: 'AdminSystemApidoc',
meta: {
title: '接口文档',
icon: 'el-icon-s-tools',
@ -464,7 +469,7 @@ export const asyncRoutes = [
},
{
path: 'utils',
name: 'AdminUtils',
name: 'AdminSystemUtils',
meta: {
title: '实用工具',
icon: 'el-icon-s-tools',

View File

@ -2,16 +2,17 @@
<div class="app-container">
<el-row :gutter="0">
<el-col :span="24">
<span class="padding-right">密码{{ apidocModel.apidoc_pwd }}
<i class="el-icon-copy-document" title="复制密码" @click="apidocCopy(apidocModel.apidoc_pwd, $event)" />
<span class="padding-right">密码{{ model.apidoc_pwd }}
<i class="el-icon-copy-document" title="复制密码" @click="copy(model.apidoc_pwd, $event)" />
</span>
<span class="padding-right">AdminToken{{ apidocModel.admin_token_sub }}
<i class="el-icon-copy-document" title="复制Token" @click="apidocCopy(apidocModel.admin_token, $event)" />
<span class="padding-right">AdminToken{{ model.admin_token_sub }}
<i class="el-icon-copy-document" title="复制Token" @click="copy(model.admin_token, $event)" />
</span>
<el-button class="filter-item" size="mini" @click="refresh()"><i class="el-icon-refresh" />刷新</el-button>
<el-button class="filter-item" size="mini" circle title="刷新" @click="refresh()"><i class="el-icon-refresh" /></el-button>
<el-link style="margin-left:10px" :href="model.apidoc_url" target="_blank" :underline="false" title="新标签页打开"><i class="el-icon-position" /></el-link>
</el-col>
<el-col :span="24">
<iframe :src="apidocModel.apidoc_url" frameborder="0" width="100%" :height="height" />
<iframe :src="model.apidoc_url" frameborder="0" width="100%" :height="height" />
</el-col>
</el-row>
</div>
@ -23,13 +24,13 @@ import clip from '@/utils/clipboard'
import { apidoc } from '@/api/admin/apidoc'
export default {
name: 'AdminApidoc',
name: 'AdminSystemApidoc',
components: {},
data() {
return {
height: 600,
isload: false,
apidocModel: {
model: {
apidoc_url: '',
apidoc_pwd: '',
admin_token: '',
@ -47,18 +48,19 @@ export default {
apidoc() {
apidoc().then(res => {
this.isload = true
this.apidocModel = res.data
this.model = res.data
})
},
//
refresh() {
this.apidoc()
},
apidocCopy(text, event) {
//
copy(text, event) {
if (text) {
clip(text, event)
} else {
this.$message({ message: '复制失败', type: 'error' })
this.$message.error('复制失败')
}
}
}

View File

@ -8,7 +8,9 @@
</el-form-item>
<el-form-item label="接口速率">
<el-col :span="11">
<el-input v-model="model.api_rate_num" type="number" placeholder="次数" />
<el-input v-model="model.api_rate_num" type="number" placeholder="次数">
<template slot="append"></template>
</el-input>
</el-col>
<el-col class="line" :span="2" style="text-align:center">/</el-col>
<el-col :span="11">
@ -31,7 +33,7 @@
import { apiInfo, apiEdit } from '@/api/admin/setting'
export default {
name: 'Api',
name: 'AdminSettingApi',
components: {},
data() {
return {

View File

@ -23,7 +23,7 @@
import { cacheInfo, cacheClear } from '@/api/admin/setting'
export default {
name: 'Cache',
name: 'AdminSettingCache',
components: {},
data() {
return {

View File

@ -23,7 +23,7 @@
import { captchaInfo, captchaEdit } from '@/api/admin/setting'
export default {
name: 'Captcha',
name: 'AdminSettingCaptcha',
components: {},
data() {
return {

View File

@ -23,7 +23,7 @@
import { logInfo, logEdit } from '@/api/admin/setting'
export default {
name: 'Log',
name: 'AdminSettingLog',
components: {},
data() {
return {

View File

@ -30,7 +30,7 @@
import { tokenInfo, tokenEdit } from '@/api/admin/setting'
export default {
name: 'Token',
name: 'AdminSettingToken',
components: {},
data() {
return {

View File

@ -30,7 +30,7 @@ import Log from './components/Log'
import Api from './components/Api'
export default {
name: 'AdminSetting',
name: 'AdminSystemSetting',
directives: { permission },
components: { Cache, Token, Captcha, Log, Api },
data() {

View File

@ -85,13 +85,13 @@
start-placeholder="开始日期"
end-placeholder="结束日期"
style="max-width:280px"
@change="echartDateChange()"
@change="echartUserDateChange()"
/>
</el-col>
</el-row>
<el-row :gutter="0">
<el-col :sm="24">
<div id="echartDate" :style="{height:height-100+'px'}" />
<div id="echartUserDate" :style="{height:height-100+'px'}" />
</el-col>
</el-row>
</el-card>
@ -116,13 +116,13 @@
<el-divider />
<el-row v-loading="loadField" :gutter="0">
<el-col :sm="24">
<div id="echartFieldLine" :style="{height:height+'px'}" />
<div id="echartUserLine" :style="{height:height+'px'}" />
</el-col>
</el-row>
<el-divider />
<el-row v-loading="loadField" :gutter="0">
<el-col :sm="24">
<div id="echartFieldPie" :style="{height:height+'px'}" />
<div id="echartUserPie" :style="{height:height+'px'}" />
</el-col>
</el-row>
</el-card>
@ -167,13 +167,13 @@ export default {
lastmonth: '--'
},
date: {
x_data: [],
y_data: [],
x: [],
s: [],
date: []
},
field: {
x_data: [],
y_data: [],
x: [],
s: [],
date: []
},
fieldType: [
@ -218,21 +218,21 @@ export default {
this.num = res.data.num
this.date = res.data.date
this.field = res.data.field
this.echartDate(res.data.date)
this.echartFieldLine(res.data.field)
this.echartFieldPie(res.data.field)
this.echartUserDate(res.data.date)
this.echartUserLine(res.data.field)
this.echartUserPie(res.data.field)
this.loadNum = false
}).catch(() => {
this.loadNum = false
})
},
echartDateChange() {
echartUserDateChange() {
this.loadDate = true
stat({
type: 'date',
date: this.date.date
}).then(res => {
this.echartDate(res.data.date)
this.echartUserDate(res.data.date)
this.loadDate = false
}).catch(() => {
this.loadDate = false
@ -245,15 +245,15 @@ export default {
date: this.field.date,
field: this.fieldValue
}).then(res => {
this.echartFieldLine(res.data.field)
this.echartFieldPie(res.data.field)
this.echartUserLine(res.data.field)
this.echartUserPie(res.data.field)
this.loadField = false
}).catch(() => {
this.loadField = false
})
},
echartDate(data) {
var echart = echarts.init(document.getElementById('echartDate'))
echartUserDate(data) {
var echart = echarts.init(document.getElementById('echartUserDate'))
var option = {
title: {
text: ''
@ -264,14 +264,14 @@ export default {
},
grid: {
left: '3%',
right: '4%',
right: '3%',
bottom: '3%',
containLabel: true
},
xAxis: {
type: 'category',
boundaryGap: false,
data: data.x_data
data: data.x
},
yAxis: {
type: 'value'
@ -281,14 +281,18 @@ export default {
name: '',
type: 'line',
smooth: true,
data: data.y_data
data: data.s,
label: {
show: true,
position: 'top'
}
}
]
}
echart.setOption(option)
},
echartFieldLine(data) {
var echart = echarts.init(document.getElementById('echartFieldLine'))
echartUserLine(data) {
var echart = echarts.init(document.getElementById('echartUserLine'))
var option = {
title: {
text: ''
@ -302,14 +306,14 @@ export default {
},
grid: {
left: '3%',
right: '4%',
right: '3%',
bottom: '3%',
containLabel: true
},
xAxis: [
{
type: 'category',
data: data.x_data
data: data.x
}
],
yAxis: [
@ -320,14 +324,18 @@ export default {
series: [
{
type: 'bar',
data: data.y_data
data: data.s,
label: {
show: true,
position: 'top'
}
}
]
}
echart.setOption(option)
},
echartFieldPie(data) {
var echart = echarts.init(document.getElementById('echartFieldPie'))
echartUserPie(data) {
var echart = echarts.init(document.getElementById('echartUserPie'))
var option = {
title: {
text: ''
@ -347,12 +355,15 @@ export default {
type: 'pie',
radius: '55%',
center: ['50%', '60%'],
data: data.p_data,
emphasis: {
Style: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
data: data.sp,
itemStyle: {
borderRadius: 8,
normal: {
label: {
show: true,
formatter: '{b} : {c} ({d}%)'
},
labelLine: { show: true }
}
}
}

View File

@ -27,7 +27,6 @@
</el-col>
<el-col :xs="24" :sm="4" style="text-align:right;">
<el-button v-permission="['admin/admin.UserLog/clear']" class="filter-item" title="日志清除" @click="clear()">清除</el-button>
<el-button v-permission="['admin/admin.UserLog/stat']" class="filter-item" type="primary" title="日志管理统计" @click="stat">统计</el-button>
</el-col>
</el-row>
</div>
@ -300,10 +299,6 @@ export default {
}).catch(() => {
this.loading = false
})
},
//
stat() {
this.$router.push('/admin/rule/user-log-stat')
}
}
}

View File

@ -1,79 +1,79 @@
<template>
<div class="app-container">
<el-tabs v-model="actTabName" @tab-click="tabClick">
<el-tab-pane v-if="checkPermission(['admin/admin.Utils/strrand','admin/admin.Utils/strtran'])" label="字符串" name="str">
<el-tabs>
<el-tab-pane v-if="checkPermission(['admin/admin.Utils/strrand','admin/admin.Utils/strtran'])" label="字符串" lazy>
<el-row :gutter="8">
<el-col v-permission="['admin/admin.Utils/strrand']" :sm="24" :md="12">
<el-col v-permission="['admin/admin.Utils/strrand']" :xs="24" :sm="12">
<div class=" filter-container">
<Strrand v-if="str" />
<strrand />
</div>
</el-col>
<el-col v-permission="['admin/admin.Utils/strtran']" :sm="24" :md="12">
<el-col v-permission="['admin/admin.Utils/strtran']" :xs="24" :sm="12">
<div class="filter-container">
<Strtran v-if="str" />
<Strtran />
</div>
</el-col>
</el-row>
</el-tab-pane>
<el-tab-pane v-if="checkPermission(['admin/admin.Utils/timestamp'])" label="时间戳" name="timestamp">
<el-tab-pane v-if="checkPermission(['admin/admin.Utils/timestamp'])" label="时间戳" lazy>
<el-row :gutter="8">
<el-col :sm="24" :md="12">
<el-col :xs="24" :sm="12">
<div class="filter-container">
<Timestamp v-if="timestamp" />
<Timestamp />
</div>
</el-col>
</el-row>
</el-tab-pane>
<el-tab-pane v-if="checkPermission(['admin/admin.Utils/qrcode'])" label="二维码" name="qrcode">
<el-tab-pane v-if="checkPermission(['admin/admin.Utils/qrcode'])" label="二维码" lazy>
<el-row :gutter="8">
<el-col :sm="24" :md="12">
<el-col :xs="24" :sm="12">
<div class="filter-container">
<Qrcode v-if="qrcode" />
<Qrcode />
</div>
</el-col>
</el-row>
</el-tab-pane>
<el-tab-pane v-if="checkPermission(['admin/admin.Utils/bytetran'])" label="字节" name="byte">
<el-tab-pane v-if="checkPermission(['admin/admin.Utils/bytetran'])" label="字节" lazy>
<el-row :gutter="8">
<el-col :sm="24" :md="12">
<el-col :xs="24" :sm="12">
<div class="filter-container">
<Byte v-if="byte" />
<Byte />
</div>
</el-col>
</el-row>
</el-tab-pane>
<el-tab-pane v-if="checkPermission(['admin/admin.Utils/ipinfo'])" label="IP" name="ip">
<el-tab-pane v-if="checkPermission(['admin/admin.Utils/ipinfo'])" label="IP" lazy>
<el-row :gutter="8">
<el-col :sm="24" :md="12">
<el-col :xs="24" :sm="12">
<div class="filter-container">
<Ip v-if="ip" />
<Ip />
</div>
</el-col>
</el-row>
</el-tab-pane>
<el-tab-pane v-if="checkPermission(['admin/admin.Utils/map'])" label="地图" name="map">
<el-tab-pane v-if="checkPermission(['admin/admin.Utils/map'])" label="地图" lazy>
<el-row :gutter="8">
<el-col :sm="24" :md="24">
<el-col :xs="24" :sm="24">
<div class="filter-container">
<Map v-if="map" />
<Map />
</div>
</el-col>
</el-row>
</el-tab-pane>
<el-tab-pane v-if="checkPermission(['admin/admin.Utils/server'])" label="服务器" name="server">
<el-tab-pane v-if="checkPermission(['admin/admin.Utils/server'])" label="服务器" lazy>
<el-row :gutter="8" class="dialog-body" :style="{height:height+60+'px'}">
<el-col :sm="24" :md="24">
<el-col :xs="24" :sm="24">
<div class="filter-container">
<Server v-if="server" />
<Server />
</div>
</el-col>
</el-row>
</el-tab-pane>
<el-tab-pane v-if="checkPermission(['admin/admin.Utils/toollu'])" label="在线工具" name="toollu">
<el-tab-pane v-if="checkPermission(['admin/admin.Utils/toollu'])" label="在线工具" lazy>
<el-row :gutter="8" class="dialog-body" :style="{height:height+60+'px'}">
<el-col :sm="24" :md="24">
<el-col :xs="24" :sm="24">
<div class="filter-container">
<Toollu v-if="toollu" />
<Toollu />
</div>
</el-col>
</el-row>
@ -97,31 +97,19 @@ import Server from './components/Server'
import Toollu from './components/Toollu'
export default {
name: 'AdminUtils',
name: 'AdminSystemUtils',
directives: { permission },
components: { Strtran, Strrand, Timestamp, Qrcode, Byte, Ip, Map, Server, Toollu },
data() {
return {
height: 680,
str: true,
timestamp: false,
qrcode: false,
byte: false,
ip: false,
map: false,
server: false,
toollu: false,
actTabName: 'str'
height: 680
}
},
created() {
this.height = screenHeight()
},
methods: {
checkPermission,
tabClick(tab) {
this[tab.name] = true
}
checkPermission
}
}
</script>

View File

@ -93,7 +93,7 @@ import permission from '@/directive/permission/index.js' // 权限判断指令
import { list, info, add, edit, dele, disable, unlogin } from '@/api/api'
export default {
name: 'Api',
name: 'SettingApi',
components: { },
directives: { permission },
data() {

View File

@ -1,333 +1,332 @@
<template>
<div class="app-container">
<el-card class="box-card">
<el-row :gutter="0">
<el-col :sm="24" :md="16">
<el-form ref="ref" :model="model" :rules="rules" label-width="150px">
<el-tabs>
<el-tab-pane v-if="checkPermission(['admin/file.Setting/info'])" label="上传设置" lazy>
<el-form-item label="存储方式" prop="storage">
<el-radio-group v-model="model.storage">
<el-radio v-for="(item, index) in storages" :key="index" :label="index">{{ item }}</el-radio>
</el-radio-group>
</el-form-item>
<div v-if="model.storage=='qiniu'">
<el-form-item label="">
<el-card class="box-card">
<div class="text item">
文件将上传到七牛云 Kodo 存储对象存储 > 空间管理 > 空间设置 > 访问控制, 设置为 公开空间
<br>
需要配置跨域访问 CORS 规则设置来源 Origin *允许 Methods GET,POST允许 Headers *
</div>
</el-card>
</el-form-item>
<el-form-item label="AccessKey" prop="qiniu_access_key" class="margin-bottom">
<el-input v-model="model.qiniu_access_key" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.qiniu_access_key, $event)" />
</el-input>
</el-form-item>
<el-form-item label="">
<el-col class="line" :span="24">AccessKeyAK [ 七牛云 > 个人中心 > 密钥管理 ] 设置和获取</el-col>
</el-form-item>
<el-form-item label="SecretKey" prop="qiniu_secret_key" class="margin-bottom">
<el-input v-model="model.qiniu_secret_key" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.qiniu_secret_key, $event)" />
</el-input>
</el-form-item>
<el-form-item label="">
<el-col class="line" :span="24">SecretKeySK [ 七牛云 > 个人中心 > 密钥管理 ] 设置和获取</el-col>
</el-form-item>
<el-form-item label="空间名称" prop="qiniu_bucket" class="margin-bottom">
<el-input v-model="model.qiniu_bucket" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.qiniu_bucket, $event)" />
</el-input>
</el-form-item>
<el-form-item label="">
<el-col class="line" :span="24">空间名称 [ 七牛云 > 对象存储 > 空间管理] 设置和获取</el-col>
</el-form-item>
<el-form-item label="外链域名" prop="qiniu_domain" class="margin-bottom">
<el-input v-model="model.qiniu_domain" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.qiniu_domain, $event)" />
</el-input>
</el-form-item>
<el-form-item label="">
<el-col class="line" :span="24">外链域名 [ 七牛云 > 对象存储 > 空间管理 > 域名设置 ] 设置和获取</el-col>
</el-form-item>
</div>
<div v-else-if="model.storage=='aliyun'">
<el-form-item label="">
<el-card class="box-card">
<div class="text item">
文件将上传到阿里云 OSS 存储需要配置 OSS 公开访问及跨域策略
<br>
需要配置跨域访问 CORS 规则设置来源 Origin *允许 Methods GET,POST允许 Headers *
</div>
</el-card>
</el-form-item>
<el-form-item label="AccessKey ID" prop="aliyun_access_key_id" class="margin-bottom">
<el-input v-model="model.aliyun_access_key_id" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.aliyun_access_key_id, $event)" />
</el-input>
</el-form-item>
<el-form-item label="">
<el-col class="line" :span="24">AccessKey ID [ 阿里云 > 个人中心 > AccessKey 管理 ] 设置和获取</el-col>
</el-form-item>
<el-form-item label="AccessKey Secret" prop="aliyun_access_key_secret" class="margin-bottom">
<el-input v-model="model.aliyun_access_key_secret" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.aliyun_access_key_secret, $event)" />
</el-input>
</el-form-item>
<el-form-item label="">
<el-col class="line" :span="24">AccessKey Secret [ 阿里云 > 个人中心 > AccessKey 管理 ] 设置和获取</el-col>
</el-form-item>
<el-form-item label="Bucket名称" prop="aliyun_bucket" class="margin-bottom">
<el-input v-model="model.aliyun_bucket" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.aliyun_bucket, $event)" />
</el-input>
</el-form-item>
<el-form-item label="">
<el-col class="line" :span="24">Bucket 名称 [ 阿里云 > 对象存储 > Bucket 列表 ] 获取</el-col>
</el-form-item>
<el-form-item label="Endpoint地域节点" prop="aliyun_endpoint" class="margin-bottom">
<el-input v-model="model.aliyun_endpoint" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.aliyun_endpoint, $event)" />
</el-input>
</el-form-item>
<el-form-item label="">
<el-col class="line" :span="24">Endpoint地域节点 [ 阿里云 > 对象存储 > Bucket 列表 > Bucket 概览 ] 获取</el-col>
</el-form-item>
<el-form-item label="Bucket域名" prop="aliyun_bucket_domain" class="margin-bottom">
<el-input v-model="model.aliyun_bucket_domain" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.aliyun_bucket_domain, $event)" />
</el-input>
</el-form-item>
<el-form-item label="">
<el-col class="line" :span="24">Bucket 域名 [ 阿里云 > 对象存储 > Bucket 列表 > Bucket 概览 ] 获取</el-col>
</el-form-item>
</div>
<div v-else-if="model.storage=='tencent'">
<el-form-item label="">
<el-card class="box-card">
<div class="text item">
文件将上传到腾讯云 COS 存储需要配置 COS 公有读私有写访问权限及跨域策略
<br>
需要配置跨域访问 CORS 规则设置来源 Origin *允许 Methods GET,POST允许 Headers *
</div>
</el-card>
</el-form-item>
<el-form-item label="SecretId" prop="tencent_secret_id" class="margin-bottom">
<el-input v-model="model.tencent_secret_id" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.tencent_secret_id, $event)" />
</el-input>
</el-form-item>
<el-form-item label="">
<el-col class="line" :span="24">SecretId [ 腾讯云 > 个人中心 > 访问管理 > API密钥 ] 设置和获取</el-col>
</el-form-item>
<el-form-item label="SecretKey" prop="tencent_secret_key" class="margin-bottom">
<el-input v-model="model.tencent_secret_key" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.tencent_secret_key, $event)" />
</el-input>
</el-form-item>
<el-form-item label="">
<el-col class="line" :span="24">SecretKey [ 腾讯云 > 个人中心 > 访问管理 > API密钥 ] 设置和获取</el-col>
</el-form-item>
<el-form-item label="存储桶名称" prop="tencent_bucket" class="margin-bottom">
<el-input v-model="model.tencent_bucket" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.tencent_bucket, $event)" />
</el-input>
</el-form-item>
<el-form-item label="">
<el-col class="line" :span="24">存储桶名称 [ 腾讯云 > 对象存储 > 存储桶列表 ] 获取</el-col>
</el-form-item>
<el-form-item label="所属地域" prop="tencent_region" class="margin-bottom">
<el-input v-model="model.tencent_region" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.tencent_region, $event)" />
</el-input>
</el-form-item>
<el-form-item label="">
<el-col class="line" :span="24">所属地域 [ 腾讯云 > 对象存储 > 存储桶列表 ] 获取ap-guangzhou</el-col>
</el-form-item>
<el-form-item label="访问域名" prop="tencent_domain" class="margin-bottom">
<el-input v-model="model.tencent_domain" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.tencent_domain, $event)" />
</el-input>
</el-form-item>
<el-form-item label="">
<el-col class="line" :span="24">访问域名 [ 腾讯云 > 对象存储 > 存储桶列表 > 概览 ] 获取</el-col>
</el-form-item>
</div>
<div v-else-if="model.storage=='baidu'">
<el-form-item label="">
<el-card class="box-card">
<div class="text item">
文件将上传到百度云 BOS 存储对象存储 > Bucket列表 > 配置设置 > Bucket权限配置, 设置为 公共 *
<br>
需要配置跨域访问 CORS 规则设置来源 Origin *允许 Methods GET,POST允许 Headers *
</div>
</el-card>
</el-form-item>
<el-form-item label="Access Key" prop="baidu_access_key" class="margin-bottom">
<el-input v-model="model.baidu_access_key" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.baidu_access_key, $event)" />
</el-input>
</el-form-item>
<el-form-item label="">
<el-col class="line" :span="24">Access Key [ 百度云 > 个人中心 > 安全认证 > Access Key ] 设置和获取</el-col>
</el-form-item>
<el-form-item label="Secret Key" prop="baidu_secret_key" class="margin-bottom">
<el-input v-model="model.baidu_secret_key" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.baidu_secret_key, $event)" />
</el-input>
</el-form-item>
<el-form-item label="">
<el-col class="line" :span="24">Secret Key [ 百度云 > 个人中心 > 安全认证 > Access Key ] 设置和获取</el-col>
</el-form-item>
<el-form-item label="Bucket名称" prop="baidu_bucket" class="margin-bottom">
<el-input v-model="model.baidu_bucket" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.baidu_bucket, $event)" />
</el-input>
</el-form-item>
<el-form-item label="">
<el-col class="line" :span="24">Bucket 名称 [ 百度云 > 对象存储 > Bucket 列表 ] 获取yyladmin</el-col>
</el-form-item>
<el-form-item label="官方域名" prop="baidu_domain" class="margin-bottom">
<el-input v-model="model.baidu_domain" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.baidu_domain, $event)" />
</el-input>
</el-form-item>
<el-form-item label="">
<el-col class="line" :span="24">官方域名 [ 百度云 > 对象存储 > 发布管理 ] 获取yyladmin.gz.bcebos.com</el-col>
</el-form-item>
<el-form-item label="所属地域" prop="baidu_endpoint" class="margin-bottom">
<el-input v-model="model.baidu_endpoint" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.baidu_endpoint, $event)" />
</el-input>
</el-form-item>
<el-form-item label="">
<el-col class="line" :span="24">所属地域官方域名去掉 Bucket 名称gz.bcebos.com</el-col>
</el-form-item>
</div>
<div v-else>
<el-form-item label="">
<el-card class="box-card">
<div class="text item">
文件将存储在本地服务器默认保存在 public/storage 目录文件以 hash 命名
<br>
文件存储的目录需要有读写权限777有足够的存储空间
</div>
</el-card>
</el-form-item>
</div>
</el-tab-pane>
<el-tab-pane v-if="checkPermission(['admin/file.Setting/info'])" label="上传限制" lazy>
<el-form-item label="图片类型" prop="image_ext" class="margin-bottom">
<el-col :span="11">
<el-input v-model="model.image_ext" clearable />
</el-col>
<el-col class="line" :span="13">
允许上传的图片后缀逗号,隔开为空则不限制
</el-col>
</el-form-item>
<el-form-item label="图片大小" prop="image_size">
<el-col :span="11">
<el-input v-model="model.image_size" clearable>
<template slot="append">MB</template>
</el-input>
</el-col>
<el-col class="line" :span="13">
允许上传的图片大小单位 MB为0则不限制
</el-col>
</el-form-item>
<el-form-item label="视频类型" prop="video_ext" class="margin-bottom">
<el-col :span="11">
<el-input v-model="model.video_ext" clearable />
</el-col>
<el-col class="line" :span="13">
允许上传的视频后缀逗号,隔开为空则不限制
</el-col>
</el-form-item>
<el-form-item label="视频大小" prop="video_size">
<el-col :span="11">
<el-input v-model="model.video_size" clearable>
<template slot="append">MB</template>
</el-input>
</el-col>
<el-col class="line" :span="13">
允许上传的视频大小单位 MB为0则不限制
</el-col>
</el-form-item>
<el-form-item label="音频类型" prop="audio_ext" class="margin-bottom">
<el-col :span="11">
<el-input v-model="model.audio_ext" clearable />
</el-col>
<el-col class="line" :span="13">
允许上传的音频后缀逗号,隔开为空则不限制
</el-col>
</el-form-item>
<el-form-item label="音频大小" prop="audio_size">
<el-col :span="11">
<el-input v-model="model.audio_size" clearable>
<template slot="append">MB</template>
</el-input>
</el-col>
<el-col class="line" :span="13">
允许上传的音频大小单位 MB为0则不限制
</el-col>
</el-form-item>
<el-form-item label="文档类型" prop="word_ext" class="margin-bottom">
<el-col :span="11">
<el-input v-model="model.word_ext" clearable />
</el-col>
<el-col class="line" :span="13">
允许上传的文档后缀逗号,隔开为空则不限制
</el-col>
</el-form-item>
<el-form-item label="文档大小" prop="word_size">
<el-col :span="11">
<el-input v-model="model.word_size" clearable>
<template slot="append">MB</template>
</el-input>
</el-col>
<el-col class="line" :span="13">
允许上传的文档大小单位 MB为0则不限制
</el-col>
</el-form-item>
<el-form-item label="其它类型" prop="other_ext" class="margin-bottom">
<el-col :span="11">
<el-input v-model="model.other_ext" clearable />
</el-col>
<el-col class="line" :span="13">
允许上传的其它文件后缀逗号,隔开为空则不限制
</el-col>
</el-form-item>
<el-form-item label="其它大小" prop="other_size">
<el-col :span="11">
<el-input v-model="model.other_size" clearable>
<template slot="append">MB</template>
</el-input>
</el-col>
<el-col class="line" :span="13">
允许上传的其它文件大小单位 MB为0则不限制
</el-col>
</el-form-item>
</el-tab-pane>
</el-tabs>
<el-form-item>
<el-button :loading="loading" @click="refresh()">刷新</el-button>
<el-button :loading="loading" type="primary" @click="submit()">提交</el-button>
<el-form ref="ref" :model="model" :rules="rules" label-width="150px">
<el-tabs class="dialog-body" :style="{height:height+'px'}">
<el-tab-pane label="上传设置" lazy>
<el-form-item label="存储方式" prop="storage">
<el-radio-group v-model="model.storage">
<el-radio v-for="(item, index) in storages" :key="index" :label="index">{{ item }}</el-radio>
</el-radio-group>
</el-form-item>
</el-form>
</el-col>
</el-row>
<div v-if="model.storage=='qiniu'">
<el-form-item label="">
<el-card class="box-card">
<div class="text item">
文件将上传到七牛云 Kodo 存储对象存储 > 空间管理 > 空间设置 > 访问控制, 设置为 公开空间
<br>
需要配置跨域访问 CORS 规则设置来源 Origin *允许 Methods GET,POST允许 Headers *
</div>
</el-card>
</el-form-item>
<el-form-item label="AccessKey" prop="qiniu_access_key" class="margin-bottom">
<el-input v-model="model.qiniu_access_key" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.qiniu_access_key, $event)" />
</el-input>
</el-form-item>
<el-form-item label="">
<el-col class="line" :span="24">AccessKeyAK [ 七牛云 > 个人中心 > 密钥管理 ] 设置和获取</el-col>
</el-form-item>
<el-form-item label="SecretKey" prop="qiniu_secret_key" class="margin-bottom">
<el-input v-model="model.qiniu_secret_key" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.qiniu_secret_key, $event)" />
</el-input>
</el-form-item>
<el-form-item label="">
<el-col class="line" :span="24">SecretKeySK [ 七牛云 > 个人中心 > 密钥管理 ] 设置和获取</el-col>
</el-form-item>
<el-form-item label="空间名称" prop="qiniu_bucket" class="margin-bottom">
<el-input v-model="model.qiniu_bucket" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.qiniu_bucket, $event)" />
</el-input>
</el-form-item>
<el-form-item label="">
<el-col class="line" :span="24">空间名称 [ 七牛云 > 对象存储 > 空间管理] 设置和获取</el-col>
</el-form-item>
<el-form-item label="外链域名" prop="qiniu_domain" class="margin-bottom">
<el-input v-model="model.qiniu_domain" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.qiniu_domain, $event)" />
</el-input>
</el-form-item>
<el-form-item label="">
<el-col class="line" :span="24">外链域名 [ 七牛云 > 对象存储 > 空间管理 > 域名设置 ] 设置和获取</el-col>
</el-form-item>
</div>
<div v-else-if="model.storage=='aliyun'">
<el-form-item label="">
<el-card class="box-card">
<div class="text item">
文件将上传到阿里云 OSS 存储需要配置 OSS 公开访问及跨域策略
<br>
需要配置跨域访问 CORS 规则设置来源 Origin *允许 Methods GET,POST允许 Headers *
</div>
</el-card>
</el-form-item>
<el-form-item label="AccessKey ID" prop="aliyun_access_key_id" class="margin-bottom">
<el-input v-model="model.aliyun_access_key_id" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.aliyun_access_key_id, $event)" />
</el-input>
</el-form-item>
<el-form-item label="">
<el-col class="line" :span="24">AccessKey ID [ 阿里云 > 个人中心 > AccessKey 管理 ] 设置和获取</el-col>
</el-form-item>
<el-form-item label="AccessKey Secret" prop="aliyun_access_key_secret" class="margin-bottom">
<el-input v-model="model.aliyun_access_key_secret" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.aliyun_access_key_secret, $event)" />
</el-input>
</el-form-item>
<el-form-item label="">
<el-col class="line" :span="24">AccessKey Secret [ 阿里云 > 个人中心 > AccessKey 管理 ] 设置和获取</el-col>
</el-form-item>
<el-form-item label="Bucket名称" prop="aliyun_bucket" class="margin-bottom">
<el-input v-model="model.aliyun_bucket" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.aliyun_bucket, $event)" />
</el-input>
</el-form-item>
<el-form-item label="">
<el-col class="line" :span="24">Bucket 名称 [ 阿里云 > 对象存储 > Bucket 列表 ] 获取</el-col>
</el-form-item>
<el-form-item label="Endpoint地域节点" prop="aliyun_endpoint" class="margin-bottom">
<el-input v-model="model.aliyun_endpoint" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.aliyun_endpoint, $event)" />
</el-input>
</el-form-item>
<el-form-item label="">
<el-col class="line" :span="24">Endpoint地域节点 [ 阿里云 > 对象存储 > Bucket 列表 > Bucket 概览 ] 获取</el-col>
</el-form-item>
<el-form-item label="Bucket域名" prop="aliyun_bucket_domain" class="margin-bottom">
<el-input v-model="model.aliyun_bucket_domain" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.aliyun_bucket_domain, $event)" />
</el-input>
</el-form-item>
<el-form-item label="">
<el-col class="line" :span="24">Bucket 域名 [ 阿里云 > 对象存储 > Bucket 列表 > Bucket 概览 ] 获取</el-col>
</el-form-item>
</div>
<div v-else-if="model.storage=='tencent'">
<el-form-item label="">
<el-card class="box-card">
<div class="text item">
文件将上传到腾讯云 COS 存储需要配置 COS 公有读私有写访问权限及跨域策略
<br>
需要配置跨域访问 CORS 规则设置来源 Origin *允许 Methods GET,POST允许 Headers *
</div>
</el-card>
</el-form-item>
<el-form-item label="SecretId" prop="tencent_secret_id" class="margin-bottom">
<el-input v-model="model.tencent_secret_id" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.tencent_secret_id, $event)" />
</el-input>
</el-form-item>
<el-form-item label="">
<el-col class="line" :span="24">SecretId [ 腾讯云 > 个人中心 > 访问管理 > API密钥 ] 设置和获取</el-col>
</el-form-item>
<el-form-item label="SecretKey" prop="tencent_secret_key" class="margin-bottom">
<el-input v-model="model.tencent_secret_key" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.tencent_secret_key, $event)" />
</el-input>
</el-form-item>
<el-form-item label="">
<el-col class="line" :span="24">SecretKey [ 腾讯云 > 个人中心 > 访问管理 > API密钥 ] 设置和获取</el-col>
</el-form-item>
<el-form-item label="存储桶名称" prop="tencent_bucket" class="margin-bottom">
<el-input v-model="model.tencent_bucket" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.tencent_bucket, $event)" />
</el-input>
</el-form-item>
<el-form-item label="">
<el-col class="line" :span="24">存储桶名称 [ 腾讯云 > 对象存储 > 存储桶列表 ] 获取</el-col>
</el-form-item>
<el-form-item label="所属地域" prop="tencent_region" class="margin-bottom">
<el-input v-model="model.tencent_region" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.tencent_region, $event)" />
</el-input>
</el-form-item>
<el-form-item label="">
<el-col class="line" :span="24">所属地域 [ 腾讯云 > 对象存储 > 存储桶列表 ] 获取ap-guangzhou</el-col>
</el-form-item>
<el-form-item label="访问域名" prop="tencent_domain" class="margin-bottom">
<el-input v-model="model.tencent_domain" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.tencent_domain, $event)" />
</el-input>
</el-form-item>
<el-form-item label="">
<el-col class="line" :span="24">访问域名 [ 腾讯云 > 对象存储 > 存储桶列表 > 概览 ] 获取</el-col>
</el-form-item>
</div>
<div v-else-if="model.storage=='baidu'">
<el-form-item label="">
<el-card class="box-card">
<div class="text item">
文件将上传到百度云 BOS 存储对象存储 > Bucket列表 > 配置设置 > Bucket权限配置, 设置为 公共 *
<br>
需要配置跨域访问 CORS 规则设置来源 Origin *允许 Methods GET,POST允许 Headers *
</div>
</el-card>
</el-form-item>
<el-form-item label="Access Key" prop="baidu_access_key" class="margin-bottom">
<el-input v-model="model.baidu_access_key" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.baidu_access_key, $event)" />
</el-input>
</el-form-item>
<el-form-item label="">
<el-col class="line" :span="24">Access Key [ 百度云 > 个人中心 > 安全认证 > Access Key ] 设置和获取</el-col>
</el-form-item>
<el-form-item label="Secret Key" prop="baidu_secret_key" class="margin-bottom">
<el-input v-model="model.baidu_secret_key" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.baidu_secret_key, $event)" />
</el-input>
</el-form-item>
<el-form-item label="">
<el-col class="line" :span="24">Secret Key [ 百度云 > 个人中心 > 安全认证 > Access Key ] 设置和获取</el-col>
</el-form-item>
<el-form-item label="Bucket名称" prop="baidu_bucket" class="margin-bottom">
<el-input v-model="model.baidu_bucket" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.baidu_bucket, $event)" />
</el-input>
</el-form-item>
<el-form-item label="">
<el-col class="line" :span="24">Bucket 名称 [ 百度云 > 对象存储 > Bucket 列表 ] 获取yyladmin</el-col>
</el-form-item>
<el-form-item label="官方域名" prop="baidu_domain" class="margin-bottom">
<el-input v-model="model.baidu_domain" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.baidu_domain, $event)" />
</el-input>
</el-form-item>
<el-form-item label="">
<el-col class="line" :span="24">官方域名 [ 百度云 > 对象存储 > 发布管理 ] 获取yyladmin.gz.bcebos.com</el-col>
</el-form-item>
<el-form-item label="所属地域" prop="baidu_endpoint" class="margin-bottom">
<el-input v-model="model.baidu_endpoint" clearable>
<el-button slot="append" icon="el-icon-document-copy" @click="copy(model.baidu_endpoint, $event)" />
</el-input>
</el-form-item>
<el-form-item label="">
<el-col class="line" :span="24">所属地域官方域名去掉 Bucket 名称gz.bcebos.com</el-col>
</el-form-item>
</div>
<div v-else>
<el-form-item label="">
<el-card class="box-card">
<div class="text item">
文件将存储在本地服务器默认保存在 public/storage 目录文件以 hash 命名
<br>
文件存储的目录需要有读写权限777有足够的存储空间
</div>
</el-card>
</el-form-item>
</div>
</el-tab-pane>
<el-tab-pane label="上传限制" lazy>
<el-form-item label="图片类型" prop="image_ext" class="margin-bottom">
<el-col :span="11">
<el-input v-model="model.image_ext" clearable />
</el-col>
<el-col class="line" :span="13">
允许上传的图片后缀逗号,隔开为空则不限制
</el-col>
</el-form-item>
<el-form-item label="图片大小" prop="image_size">
<el-col :span="11">
<el-input v-model="model.image_size" clearable>
<template slot="append">MB</template>
</el-input>
</el-col>
<el-col class="line" :span="13">
允许上传的图片大小单位 MB为0则不限制
</el-col>
</el-form-item>
<el-form-item label="视频类型" prop="video_ext" class="margin-bottom">
<el-col :span="11">
<el-input v-model="model.video_ext" clearable />
</el-col>
<el-col class="line" :span="13">
允许上传的视频后缀逗号,隔开为空则不限制
</el-col>
</el-form-item>
<el-form-item label="视频大小" prop="video_size">
<el-col :span="11">
<el-input v-model="model.video_size" clearable>
<template slot="append">MB</template>
</el-input>
</el-col>
<el-col class="line" :span="13">
允许上传的视频大小单位 MB为0则不限制
</el-col>
</el-form-item>
<el-form-item label="音频类型" prop="audio_ext" class="margin-bottom">
<el-col :span="11">
<el-input v-model="model.audio_ext" clearable />
</el-col>
<el-col class="line" :span="13">
允许上传的音频后缀逗号,隔开为空则不限制
</el-col>
</el-form-item>
<el-form-item label="音频大小" prop="audio_size">
<el-col :span="11">
<el-input v-model="model.audio_size" clearable>
<template slot="append">MB</template>
</el-input>
</el-col>
<el-col class="line" :span="13">
允许上传的音频大小单位 MB为0则不限制
</el-col>
</el-form-item>
<el-form-item label="文档类型" prop="word_ext" class="margin-bottom">
<el-col :span="11">
<el-input v-model="model.word_ext" clearable />
</el-col>
<el-col class="line" :span="13">
允许上传的文档后缀逗号,隔开为空则不限制
</el-col>
</el-form-item>
<el-form-item label="文档大小" prop="word_size">
<el-col :span="11">
<el-input v-model="model.word_size" clearable>
<template slot="append">MB</template>
</el-input>
</el-col>
<el-col class="line" :span="13">
允许上传的文档大小单位 MB为0则不限制
</el-col>
</el-form-item>
<el-form-item label="其它类型" prop="other_ext" class="margin-bottom">
<el-col :span="11">
<el-input v-model="model.other_ext" clearable />
</el-col>
<el-col class="line" :span="13">
允许上传的其它文件后缀逗号,隔开为空则不限制
</el-col>
</el-form-item>
<el-form-item label="其它大小" prop="other_size">
<el-col :span="11">
<el-input v-model="model.other_size" clearable>
<template slot="append">MB</template>
</el-input>
</el-col>
<el-col class="line" :span="13">
允许上传的其它文件大小单位 MB为0则不限制
</el-col>
</el-form-item>
</el-tab-pane>
</el-tabs>
</el-form>
<el-form label-width="150px">
<el-form-item>
<el-button :loading="loading" @click="refresh()">刷新</el-button>
<el-button :loading="loading" type="primary" @click="submit()">提交</el-button>
</el-form-item>
</el-form>
</el-card>
</div>
</template>
<script>
import screenHeight from '@/utils/screen-height'
import checkPermission from '@/utils/permission' //
import clip from '@/utils/clipboard'
import { info, edit } from '@/api/file/setting'
@ -337,6 +336,7 @@ export default {
components: { },
data() {
return {
height: 680,
loading: false,
storages: [],
model: {
@ -357,13 +357,11 @@ export default {
other_ext: '',
other_size: 0
},
rules: {
appid: [{ required: true, message: '请输入appid', trigger: 'blur' }],
appsecret: [{ required: true, message: '请输入appsecret', trigger: 'blur' }]
}
rules: {}
}
},
created() {
this.height = screenHeight()
this.info()
},
methods: {

View File

@ -148,7 +148,7 @@ import BackToTop from '@/components/BackToTop'
import { stat } from '@/api/member-log'
export default {
name: 'MemberLogsta',
name: 'MemberLogStat',
components: { BackToTop },
data() {
return {
@ -318,7 +318,11 @@ export default {
series: [
{
type: 'bar',
data: data.y_data
data: data.y_data,
label: {
show: true,
position: 'top'
}
}
]
}

View File

@ -35,7 +35,6 @@
</el-col>
<el-col :xs="24" :sm="4" style="text-align:right;">
<el-button v-permission="['admin/MemberLog/clear']" class="filter-item" title="日志清除" @click="clear()">清除</el-button>
<el-button v-permission="['admin/MemberLog/stat']" class="filter-item" type="primary" title="日志统计" @click="stat">统计</el-button>
</el-col>
</el-row>
</div>
@ -305,10 +304,6 @@ export default {
}).catch(() => {
this.loading = false
})
},
//
stat() {
this.$router.push('/member/member-log-stat')
}
}
}

View File

@ -107,7 +107,7 @@ import screenHeight from '@/utils/screen-height'
import { list, info, add, edit, dele } from '@/api/region'
export default {
name: 'Region',
name: 'SettingRegion',
components: { },
data() {
return {

View File

@ -25,7 +25,7 @@ import Log from './components/Log'
import Api from './components/Api'
export default {
name: 'Base',
name: 'SettingBase',
components: { Token, Captcha, Log, Api },
data() {
return {

View File

@ -8,7 +8,9 @@
</el-form-item>
<el-form-item label="接口速率">
<el-col :span="11">
<el-input v-model="model.api_rate_num" type="number" placeholder="次数" />
<el-input v-model="model.api_rate_num" type="number" placeholder="次数">
<template slot="append"></template>
</el-input>
</el-col>
<el-col class="line" :span="2" style="text-align:center">/</el-col>
<el-col :span="11">
@ -31,7 +33,7 @@
import { apiInfo, apiEdit } from '@/api/setting'
export default {
name: 'Api',
name: 'SettingApi',
components: {},
data() {
return {

View File

@ -23,7 +23,7 @@
import { captchaInfo, captchaEdit } from '@/api/setting'
export default {
name: 'Captcha',
name: 'SettingCaptcha',
components: {},
data() {
return {

View File

@ -23,7 +23,7 @@
import { logInfo, logEdit } from '@/api/setting'
export default {
name: 'Log',
name: 'SettingLog',
components: {},
data() {
return {

View File

@ -30,7 +30,7 @@
import { tokenInfo, tokenEdit } from '@/api/setting'
export default {
name: 'Token',
name: 'SettingToken',
components: {},
data() {
return {

View File

@ -58,6 +58,7 @@ import FileManage from '@/components/FileManage'
import { miniInfo, miniEdit } from '@/api/setting-wechat'
export default {
name: 'SettingWechatMini',
components: { FileManage },
data() {
return {

View File

@ -78,6 +78,7 @@ import FileManage from '@/components/FileManage'
import { offiInfo, offiEdit } from '@/api/setting-wechat'
export default {
name: 'SettingWechatOffi',
components: { FileManage },
data() {
return {

View File

@ -18,7 +18,7 @@ import WechatOffi from './components/WechatOffi'
import WechatMini from './components/WechatMini'
export default {
name: 'Wechat',
name: 'SettingWechat',
components: { WechatOffi, WechatMini },
data() {
return {