<template>
|
<flex-layout>
|
<div class="flex-page-content">
|
<el-table stripe size="mini" header-row-class-name="header-primary" height="100%" :data="tblData.data">
|
<el-table-column
|
v-for="item in tblData.header" :key="item.prop"
|
:prop="item.prop"
|
:label="item.label"
|
:min-width="item.minWidth"
|
:width="item.width"
|
:resizable="false"
|
align="center">
|
</el-table-column>
|
<el-table-column
|
fixed="right"
|
label="操作"
|
width="180"
|
align="center">
|
<template slot-scope="scope">
|
<el-popover
|
placement="top"
|
trigger="click">
|
<div class="el-popover-content">
|
<el-button size="mini" type="primary" @click="handleClick(scope.row)">参数设置</el-button>
|
<el-button
|
:disabled="scope.row.disabled"
|
size="mini"
|
:type="scope.row.btnType"
|
@click="confirmChange(scope.row)">{{ scope.row.btnText }}</el-button>
|
</div>
|
<el-button slot="reference" :disabled="!isCanEdit" icon="el-icon-s-tools" type="primary" size="mini">设置</el-button>
|
</el-popover>
|
<div class="white-block"></div>
|
<el-button
|
icon="el-icon-refresh-right" :type="scope.row.noRestart?'info':'danger'" size="mini"
|
:disabled="scope.row.noRestart || !isCanEdit"
|
@click="confirmHandler(scope.row)">重启</el-button>
|
</template>
|
</el-table-column>
|
</el-table>
|
</div>
|
<!-- 线程设置 -->
|
<el-dialog
|
title="线程设置"
|
width="520px"
|
:visible.sync="dialog"
|
:close-on-click-modal="false"
|
top="0"
|
class="dialog-center"
|
:modal-append-to-body="false">
|
<div class="params-container" v-if="dialog">
|
<el-form
|
ref="ruleForm"
|
size="mini"
|
label-position="top"
|
:model="form"
|
:rules="rules"
|
class="params-dialog">
|
<div class="table-layout">
|
<div class="table-row">
|
<div class="table-cell pr16">
|
<el-form-item label="线程名称" prop="note">
|
<el-input v-model="form.note"></el-input>
|
</el-form-item>
|
</div>
|
<div class="table-cell">
|
<el-form-item label="服务名称" prop="ServerName">
|
<el-input v-model="form.ServerName" readonly="readonly"></el-input>
|
</el-form-item>
|
</div>
|
</div>
|
<div class="table-row">
|
<div class="table-cell pr16">
|
<el-form-item label="超时时间" prop="OutTime">
|
<el-input v-model="form.OutTime"></el-input>
|
</el-form-item>
|
</div>
|
<div class="table-cell">
|
<el-form-item label="服务版本号" prop="ProcessVersion">
|
<el-input v-model="form.ProcessVersion" readonly="readonly"></el-input>
|
</el-form-item>
|
</div>
|
</div>
|
</div>
|
<div class="form-footer">
|
<three-btn @click="submitFrom">确定</three-btn>
|
</div>
|
</el-form>
|
</div>
|
</el-dialog>
|
<!-- 密码校验 -->
|
<el-dialog
|
title="系统提示"
|
width="320px"
|
:visible.sync="pwdDialog"
|
:close-on-click-modal="false"
|
top="0"
|
class="dialog-center"
|
:modal-append-to-body="false">
|
<div class="params-container" v-if="pwdDialog">
|
<el-form
|
ref="pwdForm"
|
size="mini"
|
label-position="top"
|
:model="pwdFrom"
|
:rules="rules"
|
class="params-dialog">
|
<div class="table-layout">
|
<div class="table-row">
|
<div class="table-cell">
|
<el-form-item label="重启密码" prop="pwd">
|
<el-input type="password" v-model="pwdFrom.pwd"></el-input>
|
</el-form-item>
|
</div>
|
</div>
|
</div>
|
<div class="form-footer">
|
<three-btn @click="submitPwdFrom">确定</three-btn>
|
</div>
|
</el-form>
|
</div>
|
</el-dialog>
|
</flex-layout>
|
</template>
|
|
<script>
|
import {
|
Timeout,
|
formatSeconds, isHasPermit,
|
} from '../../assets/js/tools'
|
|
export default {
|
data() {
|
let permits = this.$store.state.user.permits;
|
let isCanEdit = isHasPermit('batttest_data_edit_permit', permits);
|
return {
|
isCanEdit: isCanEdit,
|
tblData: {
|
header:[
|
{
|
prop: 'num',
|
label: '编号',
|
width: 80
|
},
|
{
|
prop: 'ProcessId',
|
label: '进程ID',
|
width: 120
|
},
|
{
|
prop: 'ProcessName_CN',
|
label: '线程名称',
|
minWidth: 158,
|
},
|
{
|
prop: 'ProcessVersion',
|
label: '服务版本号',
|
width: 180,
|
},
|
{
|
prop: 'ServerName',
|
label: '服务名称',
|
minWidth: 228,
|
},
|
{
|
prop: 'ProcessTime',
|
label: '运行时间',
|
width: 180
|
},
|
{
|
prop: 'Process_starttime',
|
label: '线程启动时间',
|
width: 180
|
},
|
{
|
prop: 'runTimelong',
|
label: '运行时长',
|
width: 180
|
},
|
{
|
prop: 'progressStatus',
|
label: '线程状态',
|
width: 120
|
},
|
{
|
prop: 'OutTime',
|
label: '超时时间',
|
width: 180
|
},
|
],
|
data:[]
|
},
|
page: {
|
pageCurr:1,
|
pageSize:10,
|
pageAll:0,
|
},
|
dialog: false,
|
pwdDialog: false,
|
form: {
|
num: -1, // 线程编号
|
note: '', // 线程名称
|
OutTime: '', // 超时时间
|
ServerName: '', // 服务名称
|
ProcessVersion: '', // 版本号
|
},
|
pwdFrom: {
|
pwd: '',
|
ServerName: '',
|
ServerFlag: 0
|
},
|
rules:{
|
note: [
|
{required: true, message: '不能为空', trigger: 'change'}
|
],
|
OutTime: [
|
{required: true, message: '不能为空', trigger: 'change'}
|
],
|
pwd:[
|
{required: true, message: '不能为空', trigger: 'change'}
|
],
|
},
|
timer: new Timeout('threadMager'),
|
}
|
},
|
methods: {
|
startSearch() {
|
this.timer.start(()=>{
|
this.search();
|
}, 2000);
|
},
|
search() {
|
this.$apis.dataMager.threadMager.search().then(res=>{
|
let rs = JSON.parse(res.data.result);
|
if(rs.code == 1) {
|
this.tblData.data = rs.data.map(item=>{
|
// 设置是否可以重启
|
if(item.ServerFlag == 2) {
|
item.noRestart = true;
|
}else {
|
item.noRestart = false;
|
}
|
|
item.btnText = item.ServerFlag == 2?"启用线程":"禁用线程";
|
item.btnType = item.ServerFlag == 2?"success":"danger";
|
|
// 线程监控线程无法被禁用
|
if(item.ServerName == "BMS_FBSDEV_LISTEN" || item.ServerName == "BMS_FBSDEV") {
|
item.disabled = true;
|
item.btnType = "info";
|
}else {
|
item.disabled = false;
|
}
|
|
// 线程状态
|
item.progressStatus = this.getThreadState(item.ServerFlag);
|
// 运行时间
|
let seconds = new Date(item.ProcessTime).getTime()/1000
|
-new Date(item.Process_starttime)/1000
|
item.runTimelong = formatSeconds(seconds);
|
return item;
|
});
|
}
|
// 开启计时器
|
this.timer.open();
|
}).catch(error=>{
|
// 开启计时器
|
this.timer.open();
|
});
|
},
|
getThreadState(flag){
|
var str = "";
|
switch(flag){
|
case 0: str="停止";break;
|
case 1: str="正在运行";break;
|
case 2: str="禁用";break;
|
default: str="";
|
}
|
return str;
|
},
|
handleClick(data) {
|
this.form.num = data.num;
|
this.form.note = data.ProcessName_CN;
|
this.form.OutTime = data.OutTime;
|
this.form.ServerName = data.ServerName;
|
this.form.ProcessVersion = data.ProcessVersion;
|
this.dialog = true;
|
},
|
confirmChange(data) {
|
this.$layer.confirm(data.btnText+":"+data.ProcessName_CN, {icon: 3},(index)=>{
|
// 关闭面板
|
this.$layer.close(index);
|
let params = {
|
ServerName: data.ServerName,
|
ServerFlag: data.ServerFlag == 2?0:2
|
};
|
this.updateState(params);
|
});
|
},
|
confirmHandler(data) {
|
this.$layer.confirm('确定重启'+data.ProcessName_CN, {icon: 3},(index)=>{
|
this.pwdFrom.ServerName = data.ServerName;
|
// 关闭面板
|
this.$layer.close(index);
|
this.pwdDialog = true;
|
});
|
},
|
submitFrom() {
|
this.$refs.ruleForm.validate((valid) => {
|
// 校验通过
|
if (valid) {
|
// 更新数据
|
this.update({
|
num: this.form.num,
|
note: this.form.note,
|
OutTime: this.form.OutTime
|
});
|
}else {
|
this.$layer.msg('存在校验未通过的数据!');
|
return false;
|
}
|
});
|
},
|
update(info) {
|
let loading = this.$layer.loading(1);
|
// 请求后台修改信息
|
this.$apis.dataMager.threadMager.update(info).then(res=>{
|
// 关闭弹出框
|
this.$layer.close(loading);
|
let rs = JSON.parse(res.data.result);
|
if(rs.code == 1) {
|
this.$layer.msg('修改成功!');
|
this.dialog = false;
|
}else {
|
this.$layer.msg('修改失败!');
|
}
|
}).catch(error=>{
|
// 关闭弹出框
|
this.$layer.close(loading);
|
});
|
},
|
submitPwdFrom() {
|
this.$refs.pwdForm.validate((valid) => {
|
// 校验通过
|
if (valid) {
|
this.checkPwd(this.pwdFrom.pwd);
|
}else {
|
this.$layer.msg('存在校验未通过的数据!');
|
return false;
|
}
|
});
|
},
|
checkPwd(pwd) {
|
// 请求后台校验密码
|
this.$apis.dataMager.threadMager.checkPwd(pwd).then(res=>{
|
let rs = JSON.parse(res.data.result);
|
if(rs.code == 1) {
|
this.updateState({
|
ServerName: this.pwdFrom.ServerName,
|
ServerFlag: this.pwdFrom.ServerFlag,
|
});
|
}else {
|
this.$layer.msg('密码错误');
|
}
|
// 清空密码
|
this.pwdFrom.pwd = "";
|
// 关闭弹出框
|
this.pwdDialog = false;
|
}).catch(error=>{
|
console.log(error);
|
this.$layer.msg('网络请求失败!');
|
});
|
},
|
updateState(info) {
|
let loading = this.$layer.loading(1);
|
// 请求后台修改信息
|
this.$apis.dataMager.threadMager.updateState(info).then(res=>{
|
// 关闭弹出框
|
this.$layer.close(loading);
|
let rs = JSON.parse(res.data.result);
|
if(rs.code == 1) {
|
this.$layer.msg('成功!');
|
this.pwdDialog = false;
|
}else {
|
this.$layer.msg('失败!');
|
}
|
}).catch(error=>{
|
// 关闭弹出框
|
this.$layer.close(loading);
|
this.$layer.msg('网络请求失败!');
|
});
|
|
}
|
},
|
mounted() {
|
// 开始查询
|
this.startSearch();
|
}
|
}
|
</script>
|
|
<style scoped>
|
.el-popover-content {
|
background-color: #FFFFFF;
|
padding: 8px 16px;
|
}
|
.white-block {
|
display: inline-block;
|
width: 8px;
|
}
|
</style>
|