249 lines
6.3 KiB
Vue
249 lines
6.3 KiB
Vue
<template>
|
|
<PageWrapper>
|
|
<div class="cache-box">
|
|
<el-card header="缓存列表">
|
|
<el-table
|
|
empty-text="暂无数据"
|
|
border
|
|
:height="fwbHeight"
|
|
:data="cacheNameData"
|
|
row-key="cacheName"
|
|
ref="cacheNameTable"
|
|
highlight-current-row
|
|
@row-click="onCheckedCacheName"
|
|
>
|
|
<el-table-column type="index" width="80" align="center" label="序号" />
|
|
<el-table-column
|
|
show-overflow-tooltip
|
|
align="center"
|
|
label="缓存名称"
|
|
prop="cacheName"
|
|
min-width="100"
|
|
/>
|
|
<el-table-column show-overflow-tooltip align="center" label="备注" prop="message" />
|
|
<el-table-column align="center" label="操作" width="60" fixed="right">
|
|
<template #default="{ row }">
|
|
<el-icon
|
|
:color="`var(--el-color-danger)`"
|
|
size="16"
|
|
@click.stop="handleDelete(row, 'cacheName')"
|
|
style="cursor: pointer"
|
|
><Delete
|
|
/></el-icon>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table>
|
|
</el-card>
|
|
<el-card header="键名列表">
|
|
<el-table
|
|
empty-text="暂无数据"
|
|
border
|
|
:height="fwbHeight"
|
|
:data="cacheKeyData"
|
|
row-key="cacheKey"
|
|
ref="cacheKeyTable"
|
|
highlight-current-row
|
|
@row-click="onCheckedCachKey"
|
|
>
|
|
<el-table-column type="index" width="80" align="center" label="序号" />
|
|
<el-table-column
|
|
show-overflow-tooltip
|
|
align="center"
|
|
label="缓存键名"
|
|
prop="cacheKey"
|
|
min-width="100"
|
|
/>
|
|
<el-table-column align="center" label="操作" width="60" fixed="right">
|
|
<template #default="{ row }">
|
|
<el-icon
|
|
:color="`var(--el-color-danger)`"
|
|
size="16"
|
|
@click.stop="handleDelete(row, 'cacheKey')"
|
|
style="cursor: pointer"
|
|
><Delete
|
|
/></el-icon>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table>
|
|
</el-card>
|
|
<el-card>
|
|
<template #header>
|
|
<div class="clearfix">
|
|
<span>缓存内容</span>
|
|
<el-button @click="clearAll" style="float: right; padding: 3px 0" type="text"
|
|
><el-icon><RefreshRight /></el-icon>清理全部</el-button
|
|
>
|
|
</div>
|
|
</template>
|
|
<el-form
|
|
ref="form"
|
|
:model="formData"
|
|
label-width="80px"
|
|
label-position="top"
|
|
v-if="cacheKeyData.length > 0"
|
|
>
|
|
<el-form-item label="缓存名称:">
|
|
<el-input v-model="formData.cacheName" />
|
|
</el-form-item>
|
|
<el-form-item label="缓存键值:">
|
|
<el-input v-model="formData.cacheKey" />
|
|
</el-form-item>
|
|
<el-form-item label="缓存内容:">
|
|
<el-input v-model="formData.cacheValue" type="textarea" />
|
|
</el-form-item>
|
|
</el-form>
|
|
<div v-else>暂无数据</div>
|
|
</el-card>
|
|
</div>
|
|
</PageWrapper>
|
|
</template>
|
|
|
|
<script lang="ts" setup>
|
|
import { ref, onMounted, nextTick, reactive } from 'vue';
|
|
import {
|
|
getCacheNames,
|
|
getCacheKeys,
|
|
getCacheValue,
|
|
deleteCacheName,
|
|
deleteCacheKey,
|
|
deleteCacheAll,
|
|
} from '@/api/monitor/caches';
|
|
import { message, confirm } from '@/utils/auth';
|
|
|
|
const cacheNameTable = ref();
|
|
const cacheKeyTable = ref();
|
|
const cacheNameData = ref([]);
|
|
const cacheKeyData = ref([]);
|
|
|
|
/**
|
|
* 定义表单参数
|
|
*/
|
|
const formData = reactive({
|
|
cacheKey: '',
|
|
cacheName: '',
|
|
cacheValue: '',
|
|
message: '',
|
|
});
|
|
const cacheName = ref('');
|
|
const cacheKey = ref('');
|
|
const fwbHeight = document.body.clientHeight - 230;
|
|
|
|
/**
|
|
* 选择缓存名
|
|
* @param row 参数
|
|
*/
|
|
const onCheckedCacheName = (row) => {
|
|
cacheName.value = row.cacheName;
|
|
loadCachekeys();
|
|
};
|
|
|
|
/**
|
|
* 选择缓存key
|
|
*/
|
|
const onCheckedCachKey = (row) => {
|
|
cacheKey.value = row.cacheKey;
|
|
loadCacheValue();
|
|
};
|
|
|
|
/**
|
|
* 加载缓存名列表
|
|
*/
|
|
const loadCacheNames = async () => {
|
|
const result = await getCacheNames();
|
|
cacheNameData.value = result;
|
|
cacheName.value = result.length > 0 ? result[0].cacheName : '';
|
|
if (cacheName.value) {
|
|
nextTick(() => {
|
|
cacheNameTable.value.setCurrentRow(result[0]);
|
|
});
|
|
loadCachekeys();
|
|
}
|
|
};
|
|
|
|
/**
|
|
* 加载缓存key列表
|
|
*/
|
|
const loadCachekeys = async () => {
|
|
let datas = [];
|
|
const result = await getCacheKeys(cacheName.value);
|
|
result.map((item) => {
|
|
let len = item.split(':').length;
|
|
datas.push({
|
|
cacheKey: item.split(':')[len - 1],
|
|
});
|
|
});
|
|
cacheKeyData.value = datas;
|
|
cacheKey.value = datas.length > 0 ? datas[0].cacheKey : '';
|
|
if (cacheKey.value) {
|
|
nextTick(() => {
|
|
cacheKeyTable.value.setCurrentRow(datas[0]);
|
|
});
|
|
loadCacheValue();
|
|
}
|
|
};
|
|
|
|
/**
|
|
* 加载缓存value列表
|
|
*/
|
|
const loadCacheValue = async () => {
|
|
const data = await getCacheValue({ cacheName: cacheName.value, cacheKey: cacheKey.value });
|
|
for (const key in formData) {
|
|
if (data[key] != null && data[key] != undefined) {
|
|
formData[key] = data[key];
|
|
}
|
|
}
|
|
};
|
|
|
|
/**
|
|
* 执行删除
|
|
* @param row 行数据
|
|
* @param type 类型
|
|
*/
|
|
const handleDelete = async (row, type) => {
|
|
await confirm('确定要删除?');
|
|
if (type == 'cacheName') {
|
|
await deleteCacheName(row.cacheName);
|
|
message('删除成功');
|
|
loadCacheNames();
|
|
} else {
|
|
await deleteCacheKey(row.cacheKey);
|
|
message('删除成功');
|
|
loadCachekeys();
|
|
}
|
|
};
|
|
|
|
/**
|
|
* 清除全部缓存
|
|
*/
|
|
const clearAll = async () => {
|
|
await confirm('确定要清理全部?');
|
|
await deleteCacheAll();
|
|
loadCacheNames();
|
|
};
|
|
|
|
/**
|
|
* 钩子函数
|
|
*/
|
|
onMounted(() => {
|
|
loadCacheNames();
|
|
});
|
|
</script>
|
|
<style lang="scss" scoped>
|
|
.cache-box {
|
|
display: flex;
|
|
|
|
> .el-card {
|
|
flex: 1;
|
|
&:nth-child(2) {
|
|
margin: 0 15px;
|
|
}
|
|
}
|
|
}
|
|
|
|
.card-header {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
}
|
|
</style>
|