wms-elevue/src/views/monitor/caches/index.vue

144 lines
5.2 KiB
Vue

<template>
<PageWrapper>
<div class="cache-box">
<el-card :bordered="false" 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>
<el-table-column show-overflow-tooltip align="center" label="缓存名称" prop="cacheName"
min-width="100"></el-table-column>
<el-table-column show-overflow-tooltip align="center" label="备注" prop="message"></el-table-column>
<el-table-column align="center" label="操作" width="60" fixed="right">
<template #default="{ row}">
<el-icon :color="`var(--el-color-danger)`" size="16" @click="handleDelete(row)" style="cursor: pointer;"><Delete /></el-icon>
</template>
</el-table-column>
</el-table>
</el-card>
<el-card :bordered="false" 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>
<el-table-column show-overflow-tooltip align="center" label="缓存键名" prop="cacheKey" min-width="100"></el-table-column>
<el-table-column align="center" label="操作" width="60" fixed="right">
<template #default="{ row}">
<el-icon :color="`var(--el-color-danger)`" size="16" @click="handleDelete(row)" style="cursor: pointer;"><Delete /></el-icon>
</template>
</el-table-column>
</el-table>
</el-card>
<el-card :bordered="false" header="缓存内容">
<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-input>
</el-form-item>
<el-form-item label="缓存键值:">
<el-input v-model="formData.cacheKey"></el-input>
</el-form-item>
<el-form-item label="缓存内容:">
<el-input v-model="formData.cacheValue" type="textarea"></el-input>
</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 } from '@/api/monitor/cache';
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
//选择缓存名
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=>{
datas.push({
cacheKey:item.split(':')[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];
}
}
}
const handleDelete = async(row)=> {
await confirm('确定要删除?');
// await onlineOut(row.tokenId)
message("删除成功");
// loadTable()
}
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>