<template> 
 | 
  <div class="app-container"> 
 | 
    <el-row :gutter="10"> 
 | 
      <el-col :span="8"> 
 | 
        <el-card style="height: calc(100vh - 125px)"> 
 | 
          <div slot="header"> 
 | 
            <span>缓存列表</span> 
 | 
            <el-button 
 | 
              style="float: right; padding: 3px 0" 
 | 
              type="text" 
 | 
              icon="el-icon-refresh-right" 
 | 
              @click="refreshCacheNames()" 
 | 
            ></el-button> 
 | 
          </div> 
 | 
          <el-table 
 | 
            v-loading="loading" 
 | 
            :data="cacheNames" 
 | 
            :height="tableHeight" 
 | 
            highlight-current-row 
 | 
            @row-click="getCacheKeys" 
 | 
            style="width: 100%" 
 | 
          > 
 | 
            <el-table-column 
 | 
              label="序号" 
 | 
              width="60" 
 | 
              type="index" 
 | 
            ></el-table-column> 
 | 
  
 | 
            <el-table-column 
 | 
              label="缓存名称" 
 | 
              align="center" 
 | 
              prop="cacheName" 
 | 
              :show-overflow-tooltip="true" 
 | 
              :formatter="nameFormatter" 
 | 
            ></el-table-column> 
 | 
  
 | 
            <el-table-column 
 | 
              label="备注" 
 | 
              align="center" 
 | 
              prop="remark" 
 | 
              :show-overflow-tooltip="true" 
 | 
            /> 
 | 
            <el-table-column 
 | 
              label="操作" 
 | 
              width="60" 
 | 
              align="center" 
 | 
              class-name="small-padding fixed-width" 
 | 
            > 
 | 
              <template slot-scope="scope"> 
 | 
                <el-button 
 | 
                  size="mini" 
 | 
                  type="text" 
 | 
                  icon="el-icon-delete" 
 | 
                  @click="handleClearCacheName(scope.row)" 
 | 
                ></el-button> 
 | 
              </template> 
 | 
            </el-table-column> 
 | 
          </el-table> 
 | 
        </el-card> 
 | 
      </el-col> 
 | 
  
 | 
      <el-col :span="8"> 
 | 
        <el-card style="height: calc(100vh - 125px)"> 
 | 
          <div slot="header"> 
 | 
            <span>键名列表</span> 
 | 
            <el-button 
 | 
              style="float: right; padding: 3px 0" 
 | 
              type="text" 
 | 
              icon="el-icon-refresh-right" 
 | 
              @click="refreshCacheKeys()" 
 | 
            ></el-button> 
 | 
          </div> 
 | 
          <el-table 
 | 
            v-loading="subLoading" 
 | 
            :data="cacheKeys" 
 | 
            :height="tableHeight" 
 | 
            highlight-current-row 
 | 
            @row-click="handleCacheValue" 
 | 
            style="width: 100%" 
 | 
          > 
 | 
            <el-table-column 
 | 
              label="序号" 
 | 
              width="60" 
 | 
              type="index" 
 | 
            ></el-table-column> 
 | 
            <el-table-column 
 | 
              label="缓存键名" 
 | 
              align="center" 
 | 
              :show-overflow-tooltip="true" 
 | 
              :formatter="keyFormatter" 
 | 
            > 
 | 
            </el-table-column> 
 | 
            <el-table-column 
 | 
              label="操作" 
 | 
              width="60" 
 | 
              align="center" 
 | 
              class-name="small-padding fixed-width" 
 | 
            > 
 | 
              <template slot-scope="scope"> 
 | 
                <el-button 
 | 
                  size="mini" 
 | 
                  type="text" 
 | 
                  icon="el-icon-delete" 
 | 
                  @click="handleClearCacheKey(scope.row)" 
 | 
                ></el-button> 
 | 
              </template> 
 | 
            </el-table-column> 
 | 
          </el-table> 
 | 
        </el-card> 
 | 
      </el-col> 
 | 
  
 | 
      <el-col :span="8"> 
 | 
        <el-card :bordered="false" style="height: calc(100vh - 125px)"> 
 | 
          <div slot="header"> 
 | 
            <span>缓存内容</span> 
 | 
            <el-button 
 | 
              style="float: right; padding: 3px 0" 
 | 
              type="text" 
 | 
              icon="el-icon-refresh-right" 
 | 
              @click="handleClearCacheAll()" 
 | 
              >清理全部</el-button 
 | 
            > 
 | 
          </div> 
 | 
          <el-form :model="cacheForm"> 
 | 
            <el-row :gutter="32"> 
 | 
              <el-col :offset="1" :span="22"> 
 | 
                <el-form-item label="缓存名称:" prop="cacheName"> 
 | 
                  <el-input v-model="cacheForm.cacheName" :readOnly="true" /> 
 | 
                </el-form-item> 
 | 
              </el-col> 
 | 
              <el-col :offset="1" :span="22"> 
 | 
                <el-form-item label="缓存键名:" prop="cacheKey"> 
 | 
                  <el-input v-model="cacheForm.cacheKey" :readOnly="true" /> 
 | 
                </el-form-item> 
 | 
              </el-col> 
 | 
              <el-col :offset="1" :span="22"> 
 | 
                <el-form-item label="缓存内容:" prop="cacheValue"> 
 | 
                  <el-input 
 | 
                    v-model="cacheForm.cacheValue" 
 | 
                    type="textarea" 
 | 
                    :rows="8" 
 | 
                    :readOnly="true" 
 | 
                  /> 
 | 
                </el-form-item> 
 | 
              </el-col> 
 | 
            </el-row> 
 | 
          </el-form> 
 | 
        </el-card> 
 | 
      </el-col> 
 | 
    </el-row> 
 | 
  </div> 
 | 
</template> 
 | 
  
 | 
<script> 
 | 
import { listCacheName, listCacheKey, getCacheValue, clearCacheName, clearCacheKey, clearCacheAll } from "@/api/monitor/cache"; 
 | 
  
 | 
export default { 
 | 
  name: "CacheList", 
 | 
  data() { 
 | 
    return { 
 | 
      cacheNames: [], 
 | 
      cacheKeys: [], 
 | 
      cacheForm: {}, 
 | 
      loading: true, 
 | 
      subLoading: false, 
 | 
      nowCacheName: "", 
 | 
      tableHeight: window.innerHeight - 200 
 | 
    }; 
 | 
  }, 
 | 
  created() { 
 | 
    this.getCacheNames(); 
 | 
  }, 
 | 
  methods: { 
 | 
    /** 查询缓存名称列表 */ 
 | 
    getCacheNames() { 
 | 
      this.loading = true; 
 | 
      listCacheName().then(response => { 
 | 
        this.cacheNames = response.data; 
 | 
        this.loading = false; 
 | 
      }); 
 | 
    }, 
 | 
    /** 刷新缓存名称列表 */ 
 | 
    refreshCacheNames() { 
 | 
      this.getCacheNames(); 
 | 
      this.$modal.msgSuccess("刷新缓存列表成功"); 
 | 
    }, 
 | 
    /** 清理指定名称缓存 */ 
 | 
    handleClearCacheName(row) { 
 | 
      clearCacheName(row.cacheName).then(response => { 
 | 
        this.$modal.msgSuccess("清理缓存名称[" + this.nowCacheName + "]成功"); 
 | 
        this.getCacheKeys(); 
 | 
      }); 
 | 
    }, 
 | 
    /** 查询缓存键名列表 */ 
 | 
    getCacheKeys(row) { 
 | 
      const cacheName = row !== undefined ? row.cacheName : this.nowCacheName; 
 | 
      if (cacheName === "") { 
 | 
        return; 
 | 
      } 
 | 
      this.subLoading = true; 
 | 
      listCacheKey(cacheName).then(response => { 
 | 
        this.cacheKeys = response.data; 
 | 
        this.subLoading = false; 
 | 
        this.nowCacheName = cacheName; 
 | 
      }); 
 | 
    }, 
 | 
    /** 刷新缓存键名列表 */ 
 | 
    refreshCacheKeys() { 
 | 
      this.getCacheKeys(); 
 | 
      this.$modal.msgSuccess("刷新键名列表成功"); 
 | 
    }, 
 | 
    /** 清理指定键名缓存 */ 
 | 
    handleClearCacheKey(cacheKey) { 
 | 
      clearCacheKey(cacheKey).then(response => { 
 | 
        this.$modal.msgSuccess("清理缓存键名[" + cacheKey + "]成功"); 
 | 
        this.getCacheKeys(); 
 | 
      }); 
 | 
    }, 
 | 
    /** 列表前缀去除 */ 
 | 
    nameFormatter(row) { 
 | 
      return row.cacheName.replace(":", ""); 
 | 
    }, 
 | 
    /** 键名前缀去除 */ 
 | 
    keyFormatter(cacheKey) { 
 | 
      return cacheKey.replace(this.nowCacheName, ""); 
 | 
    }, 
 | 
    /** 查询缓存内容详细 */ 
 | 
    handleCacheValue(cacheKey) { 
 | 
      getCacheValue(this.nowCacheName, cacheKey).then(response => { 
 | 
        this.cacheForm = response.data; 
 | 
      }); 
 | 
    }, 
 | 
    /** 清理全部缓存 */ 
 | 
    handleClearCacheAll() { 
 | 
      clearCacheAll().then(response => { 
 | 
        this.$modal.msgSuccess("清理全部缓存成功"); 
 | 
      }); 
 | 
    } 
 | 
  }, 
 | 
}; 
 | 
</script> 
 |