Isolution
<template>
<div style="float:left;width: 100%; margin-left: 0">
<el-row >
<el-col :span=4>
<el-input placeholder="请输入服务名" v-model='form.app' clearable size="medium" @change="query"></el-input>
</el-col>
<el-col :span=4 :offset=1>
<el-input placeholder="请输入实例名" v-model='form.instanceId' clearable size="medium" @change="query"></el-input>
</el-col>
<el-col :span=4 :offset=1>
<el-select v-model="form.status" placeholder="请选择实例状态">
<el-option
v-for="item in statusOptions"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</el-col>
<el-col :span="2">
<el-button ref="query" type="primary" icon="el-icon-check" @click="query" size="medium">查询</el-button>
</el-col>
</el-row>
<div style="margin-top:20px">
<el-table
:data="tableData"
height="700"
stripe
style="width: 100%">
<el-table-column label="服务名" prop="app" sortable width="100"></el-table-column>
<el-table-column label="实例名" prop="instanceId" sortable width="100"></el-table-column>
<el-table-column label="实例状态" prop="status" sortable width="180"></el-table-column>
<el-table-column label="运行状态" prop="status" sortable width="180"></el-table-column>
<!-- <el-table-column label="修改原因" prop="reason" width="250"></el-table-column>-->
<el-table-column align="right" width="200">
<template #header>
<el-input v-model="search" size="mini" placeholder="API"></el-input>
</template>
<template #default="scope">
<el-button size="mini" @click="isolution(scope.$index, scope.row)" icon="el-icon-delete" type="primary" :disabled="!$root.writeFlag"
>隔离</el-button>
<el-button size="mini" @click="recover(scope.$index, scope.row)" icon="el-icon-plus" type="primary" :disabled="!$root.writeFlag"
>恢复</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="currentPage"
:page-sizes="[30, 50, 100, 200, 500, 1000]"
:page-size="pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="pageTogal">
</el-pagination>
</div>
</div>
</template>
<script>import { post } from '../../api/request'
import Cookies from 'js-cookies/src/cookies'
export default {
name: 'IsolutionInstance',
data () {
return {
pageTogal: 0,
currentPage: 1,
pageSize: 50,
disabled: true,
tableData: [],
tableDataCache: [],
filterData: ['total', 'currentPage', 'pageSize'],
form: {
app: '',
instanceId: '',
status: '',
userName: '',
reason: ''
},
statusOptions: [
{
value: '',
label: 'ALL'
},
{
value: 'UP',
label: 'UP'
},
{
value: 'OUT_OF_SERVICE',
label: 'OUT_OF_SERVICE'
}
]
}
},
created () {
this.disabled = !(this.$root.envFlag && this.$root.writeFlag)
post('/api/instance/apps', this.form).then((result) => {
console.log(result)
if (result.list != null) {
this.pageTogal = result.list.length
this.tableDataCache = result.list
this.tableData = this.tableDataCache.slice(0, this.pageSize)
this.currentPage = 1
}
})
},
methods: {
handleSizeChange (val) {
this.pageSize = val
this.tableData = this.tableDataCache.slice(0, this.pageSize)
this.currentPage = 1
console.log(`每页 ${val} 条`)
},
handleCurrentChange (val) {
window.scrollTo(0, 0)
this.tableData = this.tableDataCache.slice((val - 1) * this.pageSize, val * this.pageSize)
console.log(`当前页: ${val}`)
},
recordFormat (item) {
for (let i = 0; i < this.filterData.length; i++) {
if (item.indexOf(this.filterData[i]) !== -1) {
return
}
}
var htmlStr = ''
if (item.includes('^')) {
htmlStr = '<font color="red">' + item.replaceAll('^', '') + '</font>' + '<br>'
} else {
htmlStr = item + '<br>'
}
return htmlStr
},
query () {
// this.$refs.query.icon = 'el-icon-loading'
post('/api/instance/apps', this.form).then((result) => {
console.log(result)
try {
if (result.list != null) {
this.pageTogal = result.list.length
this.tableDataCache = result.list
this.tableData = this.tableDataCache.slice(0, this.pageSize)
this.currentPage = 1
// this.$refs.query.icon = 'el-icon-check'
}
} catch (e) {
// this.$refs.query.icon = 'el-icon-close'
}
})
},
isolution (index, row) {
this.rowToForm(row)
this.$confirm('操作将导致实例下线,是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
post('/api/instance/isolution', this.form).then((result) => {
console.log(result)
if (result.code === '200') {
this.$message({ type: 'info', message: '隔离成功' })
this.query()
} else {
this.$message({ type: 'error', message: '隔离失败' })
}
})
}).catch(() => {
this.$message({ type: 'info', message: '操作已取消' })
Cookies.removeItem('reason')
})
},
recover (index, row) {
this.rowToForm(row)
this.$confirm('操作将导致实例下线,是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
post('/api/instance/recover', this.form).then((result) => {
console.log(result)
if (result.code === '200') {
this.$message({ type: 'info', message: '恢复成功' })
this.query()
} else {
this.$message({ type: 'error', message: '恢复失败' })
}
})
}).catch(() => {
this.$message({ type: 'info', message: '操作已取消' })
Cookies.removeItem('reason')
})
},
rowToForm (row) {
this.form.status = row.status
this.form.app = row.app
this.form.instanceId = row.instanceId
}
}
}
</script>
<style scoped>
</style>
Isolution的更多相关文章
- spring独立事务分析
最近在ssm框架的项目中需要用到独立事务的实现,找了半天,搜集了以下理论知识为实现做准备.事务管理器为datasource (1)Spring在transactiondefinition接口中规定了7 ...
- 代码 | 自适应大邻域搜索系列之(3) - Destroy和Repair方法代码实现解析
前言 上一篇文章中我们具体解剖了ALNS类的具体代码实现过程,不过也留下了很多大坑.接下来的文章基本都是"填坑"了,把各个模块一一展现解析给大家.不过碍于文章篇幅等原因呢,也不会每 ...
- 代码 | 自适应大邻域搜索系列之(4) - Solution定义和管理的代码实现解析
前言 上一篇讲解了destroy和repair方法的具体实现代码,好多读者都在喊酸爽和得劲儿--今天这篇就讲点简单的,关于solution的定义和管理的代码实现,让大家回回神吧--哈哈. 01 总体概 ...
- 代码 | 自适应大邻域搜索系列之(2) - ALNS算法主逻辑结构解析
00 前言 在上一篇推文中,教大家利用了ALNS的lib库求解了一个TSP问题作为实例.不知道你萌把代码跑起来了没有.那么,今天咱们再接再厉.跑完代码以后,小编再给大家深入讲解具体的代码内容.大家快去 ...
- 代码 | 用ALNS框架求解一个TSP问题 - 代码详解
写在前面 前面好多篇文章,我们总算是把整个ALNS的代码框架给大家说明白了.不知道大家对整个框架了解了没有.不过打铁要趁热,心急了要吃热豆腐.今天就来实战一下,教大家怎么用ALNS的代码框架,求解一个 ...
- 代码 | 自适应大邻域搜索系列之(7) - 局部搜索LocalSearch的代码解析
前言 好了小伙伴们我们又见面了,咳咳没错还是我.不知道你萌接连被这么多篇代码文章刷屏是什么感受,不过,酸爽归酸爽.今天咱们依然讲代码哈~不过今天讲的依然很简单,关于局部搜索LocalSearch的代码 ...
- 代码 | 自适应大邻域搜索系列之(6) - 判断接受准则SimulatedAnnealing的代码解析
前言 前面三篇文章对大家来说应该很简单吧?不过轻松了这么久,今天再来看点刺激的.关于判断接受准则的代码.其实,判断接受准则有很多种,效果也因代码而异.今天介绍的是模拟退火的判断接受准则.那么,相关的原 ...
随机推荐
- dotnet 统信 UOS 运行 UNO FrameBuffer 应用错误 Failed to open FrameBuffer device
本文记录在 UOS 统信系统上运行 UNO 的基于 Skia 的 FrameBuffer 应用报错问题,错误提示是 Unhandled exception. System.InvalidOperati ...
- github只下载某个文件或文件夹(使用GitZip插件)
安装GitZip插件 (此安装过程需要梯子(不懂"梯子",百度一下就明白)) 1. 打开插件管理页面 方法一:打开Chrome浏览器(Edge浏览器同理),在Chrom地址栏输入c ...
- .NET Aspire 预览版 6 发布
.NET Aspire 预览版 6 引入了一系列重大更新,主要包括 API 的重大更改.安全性和可靠性的提升.新的资源和组件.应用程序主机的更新.测试支持.模板更新.组件更新.Azure 配置包的更新 ...
- AI实战 | 手把手带你打造智能待办助手
背景 大家好,我是努力的小雨.今天我想分享一下搭建待办助手的经历.起初,我并没有什么特别的创意点子.但在4月16日的百度Create大会上,我看到了小度的大模型加持使得其变得更加智能.我被一场示例所震 ...
- 面对Centos7系统的openssl版本升级
CentOS7的版本系统,默认的OpenSSL的版本为OpenSSL 1.0.2k-fips 26 Jan 2017.但是openssl需要的版本需要较高的版本.通过下载最新的openssl版本.对o ...
- 模型评测-书生浦语大模型实战营学习笔记7&大语言模型12
大语言模型学习-12.模型评测 书生浦语大模型实战营学习笔记7 视频教程特别像广告,所以这篇博客参考了很多其他内容给大家参考,主要是下面几个页面: https://zhuanlan.zhihu.com ...
- Kettle下载和安装
一.Kettle简介 Kettle 是 PDI 以前的名称,PDI 的全称是Pentaho Data Integeration,Kettle 本意是水壶的意思,表达了数据流的含义.Kettle是一款国 ...
- C数据结构线性表:实现顺序表的增删改查&完整篇
文章目录 ①前言 顺序表结构体的定义 ②初始化顺序表 ③插入新的元素 插入的时候需要特别注意的几点 ④删除元素 第一个删除元素功能实现 第二个删除元素功能实现 对代码下面中**i- -**的说明(第二 ...
- WPF开发快速入门【5】DataGrid的使用
概述 DataGrid是最常用的一种列表数据展现控件,本文介绍DataGrid的一些常用操作,包括:展示.新增.删除.修改等.以下代码基于Stylet框架实现. 数据展示 DataGrid用于对象列表 ...
- Flutter(五):Flutter 加入现有App的方案选择(Flutter_Boost)
一.介绍 用 Flutter 一次性重写整个已有的应用是不切实际的.对于这些情况,Flutter 可以作为一个库或模块,集成进现有的应用当中.模块引入到您的 Android 或 iOS 应用(当前支持 ...