This commit is contained in:
TinyAnts 2022-04-14 16:29:49 +08:00
commit 4cf726c993
9 changed files with 228 additions and 154 deletions

View File

@ -24,6 +24,11 @@ export function apiAdminDetail(params: any) {
return request.get('/system/admin/detail', { params }) return request.get('/system/admin/detail', { params })
} }
// 管理员状态
export function apiAdminStatus(params: any) {
return request.post('/system/admin/disable', params)
}
/* 角色 */ /* 角色 */
// 角色列表 // 角色列表
export function apiRoleLists(params: any) { export function apiRoleLists(params: any) {

View File

@ -2,20 +2,20 @@ import request from '@/utils/request'
// 获取备案信息 // 获取备案信息
export function apiGetCopyright() { export function apiGetCopyright() {
return request.get('/setting/copyright') return request.get('/setting/getCopyright')
} }
// 设置备案信息 // 设置备案信息
export function apiSetCopyright(params: any) { export function apiSetCopyright(params: any) {
return request.post('/setting/copyright', { ...params }) return request.post('/setting/setCopyright', { ...params })
} }
// 获取网站信息 // 获取网站信息
export function apiGetWebsite() { export function apiGetWebsite() {
return request.get('/setting/website') return request.get('/setting/getWebsite')
} }
// 设置网站信息 // 设置网站信息
export function apiSetWebsite(params: any) { export function apiSetWebsite(params: any) {
return request.post('/setting/website', { ...params }) return request.post('/setting/setWebsite', { ...params })
} }
// 获取政策协议 // 获取政策协议
@ -66,7 +66,7 @@ export function apiLoginConfigSet(params: any) {
// 获取系统日志列表 // 获取系统日志列表
export function apiSystemLogLists(params: any) { export function apiSystemLogLists(params: any) {
return request.get('/setting.system.log/lists', { params }) return request.get('/system/log/operate', { params })
} }
// 清除系统缓存 // 清除系统缓存

View File

@ -4,12 +4,16 @@ import { App } from '@vue/runtime-core'
// 手动引入 ECharts 各模块来减小打包体积 // 手动引入 ECharts 各模块来减小打包体积
import { CanvasRenderer } from 'echarts/renderers' import { CanvasRenderer } from 'echarts/renderers'
import { BarChart, PieChart, LineChart } from 'echarts/charts' import { BarChart, PieChart, LineChart, PieSeriesOption } from 'echarts/charts'
import { LabelLayout } from 'echarts/features'
import { import {
GridComponent, GridComponent,
TooltipComponent, TooltipComponent,
TitleComponent, TitleComponent,
LegendComponent LegendComponent,
TitleComponentOption,
TooltipComponentOption,
LegendComponentOption
} from 'echarts/components' } from 'echarts/components'
use([ use([
@ -20,7 +24,8 @@ use([
TooltipComponent, TooltipComponent,
TitleComponent, TitleComponent,
LegendComponent, LegendComponent,
LineChart LineChart,
LabelLayout
]) ])
export default (app: App) => { export default (app: App) => {

View File

@ -57,12 +57,12 @@
min-width="100" min-width="100"
></el-table-column> ></el-table-column>
<el-table-column label="状态" min-width="100"> <el-table-column label="状态" min-width="100">
<template #default="{ row }"> <template #default="scope">
<el-switch <el-switch
v-model="row.isDisable" v-model="scope.row.isDisable"
:active-value="0" :active-value="0"
:inactive-value="1" :inactive-value="1"
@change="changeStatus(row)" @change="handleStatusChange($event, scope.row.id)"
/> />
</template> </template>
</el-table-column> </el-table-column>
@ -103,7 +103,7 @@
import { defineComponent, onMounted, reactive, Ref, ref } from 'vue' import { defineComponent, onMounted, reactive, Ref, ref } from 'vue'
import Pagination from '@/components/pagination/index.vue' import Pagination from '@/components/pagination/index.vue'
import Popup from '@/components/popup/index.vue' import Popup from '@/components/popup/index.vue'
import { apiAdminEdit, adminLists, apiAdminDelete, apiRoleLists } from '@/api/auth' import { apiAdminEdit, adminLists, apiAdminDelete, apiRoleLists, apiAdminStatus } from '@/api/auth'
import { usePages } from '@/core/hooks/pages' import { usePages } from '@/core/hooks/pages'
export default defineComponent({ export default defineComponent({
components: { components: {
@ -135,6 +135,11 @@ export default defineComponent({
}) })
} }
const handleStatusChange = async (event: Event, id: number) => {
await apiAdminStatus({ isDisable: event, id })
requestApi()
}
const handleDelete = (id: number) => { const handleDelete = (id: number) => {
apiAdminDelete({ id }).then(() => { apiAdminDelete({ id }).then(() => {
requestApi() requestApi()
@ -161,7 +166,8 @@ export default defineComponent({
resetPage, resetPage,
adminLists, adminLists,
changeStatus, changeStatus,
handleDelete handleDelete,
handleStatusChange
} }
} }
}) })

View File

@ -14,41 +14,107 @@
<el-card class="m-t-15" shadow="never"> <el-card class="m-t-15" shadow="never">
<div> <div>
<div>基本信息</div>
<el-table class="m-t-20" :data="cacheDate"> <el-table class="m-t-20" :data="cacheDate">
<el-table-column label="管理内容" prop="content"></el-table-column> <el-table-column label="Redis版本" prop=""></el-table-column>
<el-table-column label="内容说明" prop="desc"> </el-table-column> <el-table-column label="运行模式" prop=""> </el-table-column>
<el-table-column label="操作" width="150" fixed="right"> <el-table-column label="端口" prop=""> </el-table-column>
<template #default="scope"> <el-table-column label="客户端数" prop=""> </el-table-column>
<popup class="m-r-10 inline" @confirm="handleClean" content="确定要清除系统缓存?"> <el-table-column label="运行时间(天)" prop=""> </el-table-column>
<template #trigger> <el-table-column label="使用内存" prop=""> </el-table-column>
<el-button type="text">清除系统缓存</el-button> <el-table-column label="使用CPU" prop=""> </el-table-column>
</template> <el-table-column label="内存配置" prop=""> </el-table-column>
</popup> <el-table-column label="AOF是否开启" prop=""> </el-table-column>
</template> <el-table-column label="RDB是否成功" prop=""> </el-table-column>
</el-table-column> <el-table-column label="Key数量" prop=""> </el-table-column>
<el-table-column label="网络入口/出口" prop=""> </el-table-column>
</el-table> </el-table>
</div> </div>
</el-card> </el-card>
<div class="m-t-15 flex">
<!-- 命令统计 -->
<el-card class="m-r-15 flex-1" shadow="never">
<div>
<div class="p-b-60">命令统计</div>
<div class="statistical-chart">
<v-chart class="chart" :option="statisticalData.commandChartOption" />
</div>
</div>
</el-card>
<!-- 内存信息 -->
<el-card class="flex-1" shadow="never">
<div>
<div class="p-b-60">内存信息</div>
<div class="statistical-chart">
<div>12222222</div>
</div>
</div>
</el-card>
</div>
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { import { apiSystemCacheClear } from '@/api/setting'
apiSystemCacheClear import { reactive, ref } from 'vue'
} from '@/api/setting' import Popup from '@/components/Popup/index.vue'
import { ref } from 'vue'
import Popup from '@/components/Popup/index.vue'
// //
let cacheDate = ref<Array<object>>([{ let cacheDate = ref<Array<object>>([
content: '系统缓存', {
desc: '系统运行过程中产生的各类缓存数据', content: '系统缓存',
}]) desc: '系统运行过程中产生的各类缓存数据'
//
const handleClean = async () => {
await apiSystemCacheClear()
} }
])
const statisticalData = reactive({
commandChartOption: {
tooltip: {
trigger: 'item'
// formatter: '{b} : {d}%'
},
series: [
{
label: {
show: false
},
labelLine: {
show: false
},
type: 'pie',
radius: '75%',
color: ['#3D87ED', '#CBDAF7', '#246AE7', '#0042de'],
data: [
{ value: 1048, name: 'Search Engine' },
{ value: 735, name: 'Direct' },
{ value: 580, name: 'Email' },
{ value: 484, name: 'Union Ads' },
{ value: 300, name: 'Video Ads' }
],
emphasis: {
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
}
}
]
}
})
//
const handleClean = async () => {
await apiSystemCacheClear()
}
</script> </script>
<style lang="scss" scoped></style> <style lang="scss" scoped>
.statistical-chart {
display: flex;
justify-content: center;
}
</style>

View File

@ -7,7 +7,9 @@
<div class="m-t-15"> <div class="m-t-15">
<el-table :data="info.cpu" size="medium"> <el-table :data="info.cpu" size="medium">
<el-table-column prop="cpuNum" label="核心数"> </el-table-column> <el-table-column prop="cpuNum" label="核心数"> </el-table-column>
<el-table-column prop="value" label="值"> </el-table-column> <el-table-column prop="used" label="用户使用率"> </el-table-column>
<el-table-column prop="sys" label="系统使用率"> </el-table-column>
<el-table-column prop="value" label="当前空闲率"> </el-table-column>
</el-table> </el-table>
</div> </div>
</el-card> </el-card>
@ -16,9 +18,10 @@
<div>内存</div> <div>内存</div>
<div class="m-t-15"> <div class="m-t-15">
<el-table :data="info.mem" size="medium"> <el-table :data="info.mem" size="medium">
<el-table-column prop="param" label="属性"> </el-table-column> <el-table-column prop="total" label="总内存"> </el-table-column>
<el-table-column prop="value" label="内存"> </el-table-column> <el-table-column prop="used" label="已用内存"> </el-table-column>
<el-table-column prop="value" label="JVM"> </el-table-column> <el-table-column prop="free" label="剩余内存"> </el-table-column>
<el-table-column prop="usage" label="使用率"> </el-table-column>
</el-table> </el-table>
</div> </div>
</el-card> </el-card>
@ -40,13 +43,13 @@
<div>Java虚拟机信息</div> <div>Java虚拟机信息</div>
<div class="m-t-15"> <div class="m-t-15">
<el-table :data="info.server" size="medium"> <el-table :data="info.server" size="medium">
<el-table-column prop="option" label="Java名称"> </el-table-column> <el-table-column prop="name" label="Java名称"> </el-table-column>
<el-table-column prop="require" label="启动时间"> </el-table-column> <el-table-column prop="startTime" label="启动时间"> </el-table-column>
<el-table-column prop="remark" label="安装路径"> </el-table-column> <el-table-column prop="home" label="安装路径"> </el-table-column>
<el-table-column prop="remark" label="项目路径"> </el-table-column> <!-- <el-table-column prop="remark" label="项目路径"> </el-table-column> -->
<el-table-column prop="remark" label="运行参数"> </el-table-column> <el-table-column prop="inputArgs" label="运行参数"> </el-table-column>
<el-table-column prop="remark" label="Java版本"> </el-table-column> <el-table-column prop="version" label="Java版本"> </el-table-column>
<el-table-column prop="remark" label="运行时长"> </el-table-column> <el-table-column prop="runTime" label="运行时长"> </el-table-column>
</el-table> </el-table>
</div> </div>
</el-card> </el-card>

View File

@ -4,11 +4,7 @@
<el-card shadow="never"> <el-card shadow="never">
<el-form class="ls-form" :model="formData" label-width="80px" size="small" inline> <el-form class="ls-form" :model="formData" label-width="80px" size="small" inline>
<el-form-item label="管理员"> <el-form-item label="管理员">
<el-input <el-input placeholder="请输入" class="ls-input" v-model="formData.username" />
placeholder="请输入"
class="ls-input"
v-model="formData.admin_name"
/>
</el-form-item> </el-form-item>
<el-form-item label="访问方式"> <el-form-item label="访问方式">
@ -21,29 +17,21 @@
></el-option> ></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="来源IP"> <el-form-item label="来源IP">
<el-input <el-input placeholder="请输入" class="ls-input" v-model="formData.ip" />
placeholder="请输入" </el-form-item>
class="ls-input"
v-model="formData.ip" <el-form-item label="访问时间">
/> <data-picker
</el-form-item> v-model:start_time="formData.start_time"
v-model:end_time="formData.end_time"
<el-form-item label="访问时间"> ></data-picker>
<data-picker </el-form-item>
v-model:start_time="formData.start_time"
v-model:end_time="formData.end_time" <el-form-item label="访问链接">
></data-picker> <el-input placeholder="请输入" class="ls-input" v-model="formData.url" />
</el-form-item> </el-form-item>
<el-form-item label="访问链接">
<el-input
placeholder="请输入"
class="ls-input"
v-model="formData.url"
/>
</el-form-item>
<el-form-item> <el-form-item>
<div class="m-l-20"> <div class="m-l-20">
@ -58,14 +46,18 @@
<div> <div>
<el-table class="m-t-20" :data="pager.lists"> <el-table class="m-t-20" :data="pager.lists">
<el-table-column label="记录ID" prop="id"></el-table-column> <el-table-column label="记录ID" prop="id"></el-table-column>
<el-table-column label="操作" prop="action"></el-table-column> <el-table-column label="操作" prop="title"></el-table-column>
<el-table-column label="管理员" prop="admin_name"></el-table-column> <el-table-column label="管理员" prop="username"></el-table-column>
<el-table-column label="管理员ID" prop="admin_id"> </el-table-column> <!-- <el-table-column label="管理员ID" prop="admin_id"> </el-table-column> -->
<el-table-column label="访问链接" prop="url"></el-table-column> <el-table-column label="访问链接" prop="url"></el-table-column>
<el-table-column label="访问方式" prop="type"></el-table-column> <el-table-column label="访问方式" prop="type"></el-table-column>
<el-table-column label="访问参数" prop="params"> </el-table-column> <el-table-column label="访问参数" prop="args"> </el-table-column>
<el-table-column label="来源IP" prop="ip"> </el-table-column> <el-table-column label="来源IP" prop="ip"> </el-table-column>
<el-table-column label="日志时间" prop="create_time"> </el-table-column> <el-table-column label="错误信息" prop="error"> </el-table-column>
<el-table-column label="IP" prop="address"> </el-table-column>
<el-table-column label="状态" prop="status"> </el-table-column>
<el-table-column label="执行耗时 毫秒" prop="taskTime"> </el-table-column>
<el-table-column label="日志时间" prop="createTime"> </el-table-column>
</el-table> </el-table>
</div> </div>
<div class="flex row-right"> <div class="flex row-right">
@ -80,70 +72,68 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { import { apiSystemLogLists } from '@/api/setting'
apiSystemLogLists import { onMounted, reactive, ref } from 'vue'
} from '@/api/setting' import Pagination from '@/components/pagination/index.vue'
import { onMounted, reactive, ref } from 'vue' import Popup from '@/components/Popup/index.vue'
import Pagination from '@/components/pagination/index.vue' import { usePages } from '@/core/hooks/pages'
import Popup from '@/components/Popup/index.vue' import DataPicker from '@/components/data-picker/index.vue'
import { usePages } from '@/core/hooks/pages'
import DataPicker from '@/components/data-picker/index.vue'
interface formDataObj { interface formDataObj {
admin_name?: string // username?: string //
url?: string // 访 url?: string // 访
ip?: string // ip ip?: string // ip
type?: string // 访 type?: string // 访
start_time?: string // start_time?: string //
end_time?: string // end_time?: string //
}
//
let formData = ref<formDataObj>({
username: '',
url: '',
ip: '',
type: '',
start_time: '',
end_time: ''
})
// 访
const visitType = ref<Array<any>>([
{
label: '全部',
value: ''
},
{
label: 'get',
value: 'get'
},
{
label: 'post',
value: 'post'
},
{
label: 'put',
value: 'put'
},
{
label: 'delete',
value: 'delete'
},
{
label: 'option',
value: 'option'
} }
])
//
let formData = ref<formDataObj>({
admin_name: '',
url: '',
ip: '',
type: '',
start_time: '',
end_time: '',
})
// 访
const visitType = ref<Array<any>>([
{
label: '全部',
value: '',
},
{
label: 'get',
value: 'get',
},
{
label: 'post',
value: 'post',
},
{
label: 'put',
value: 'put',
},
{
label: 'delete',
value: 'delete',
},
{
label: 'option',
value: 'option',
},
])
const { pager, requestApi, resetParams, resetPage } = usePages({ const { pager, requestApi, resetParams, resetPage } = usePages({
callback: apiSystemLogLists, callback: apiSystemLogLists,
params: formData.value, params: formData.value
}) })
onMounted(() => { onMounted(() => {
requestApi() requestApi()
}) })
</script> </script>
<style lang="scss" scoped></style> <style lang="scss" scoped></style>

View File

@ -99,6 +99,8 @@ export default defineComponent({
// //
const setCopyright = () => { const setCopyright = () => {
console.log(formData.privilege, '==')
apiSetCopyright({ apiSetCopyright({
privilege: formData.privilege, privilege: formData.privilege,
icpNumber: formData.icpNumber, icpNumber: formData.icpNumber,

View File

@ -18,7 +18,7 @@
show-word-limit show-word-limit
></el-input> ></el-input>
</el-form-item> </el-form-item>
<el-form-item label="网站图标" prop="favicon" required> <el-form-item label="网站图标" prop="favicon">
<material-select v-model="formData.favicon" :limit="1" /> <material-select v-model="formData.favicon" :limit="1" />
<div class="flex"> <div class="flex">
<div class="muted xs m-r-16"> <div class="muted xs m-r-16">
@ -32,7 +32,7 @@
</el-popover> </el-popover>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="网站LOGO" prop="logo" required> <el-form-item label="网站LOGO" prop="logo">
<material-select v-model="formData.logo" :limit="1" /> <material-select v-model="formData.logo" :limit="1" />
<div class="flex"> <div class="flex">
<div class="muted xs m-r-16"> <div class="muted xs m-r-16">
@ -46,7 +46,7 @@
</el-popover> </el-popover>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="登录页广告图" prop="backdrop" required> <el-form-item label="登录页广告图" prop="backdrop">
<material-select v-model="formData.backdrop" :limit="1" /> <material-select v-model="formData.backdrop" :limit="1" />
<div class="flex"> <div class="flex">
<div class="muted xs m-r-16"> <div class="muted xs m-r-16">
@ -93,13 +93,10 @@ export default defineComponent({
// //
const rules = { const rules = {
name: [ name: [{ required: true, message: '请输入网站名称', trigger: ['blur'] }],
{ favicon: [{ required: true, message: '上传网站图标', trigger: ['blur'] }],
required: true, logo: [{ required: true, message: '上传网站logo', trigger: ['blur'] }],
message: '请输入网站名称', backdrop: [{ required: true, message: '上传登录页广告图', trigger: ['blur'] }]
trigger: ['blur']
}
]
} }
// //