|
|
|
|
@ -42,9 +42,11 @@
|
|
|
|
|
<span v-show="!scope.row.iseditor">{{scope.row.onOff ? '运行':'停止'}}</span>
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column align="center" sortable prop="pid" label="pid" width="120">
|
|
|
|
|
<el-table-column align="center" sortable prop="pid" label="pid" width="100">
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column align="center" sortable prop="ram" label="内存使用" width="120">
|
|
|
|
|
<el-table-column align="center" sortable prop="ram" label="内存使用" width="100">
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column align="center" sortable prop="reNumber" label="重启次数" width="100">
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column align="center" sortable prop="startTime" label="启动时间" min-width="110">
|
|
|
|
|
</el-table-column>
|
|
|
|
|
@ -67,7 +69,7 @@
|
|
|
|
|
<el-button size="mini" type="success" @click="start(scope.$index, scope.row)">启动</el-button>
|
|
|
|
|
<el-button size="mini" type="success" @click="restart(scope.$index, scope.row)">重启</el-button>
|
|
|
|
|
<el-button size="mini" type="success" @click="stop(scope.$index, scope.row)">停止</el-button>
|
|
|
|
|
<el-button size="mini" type="success" @click="getLog(scope.$index, scope.row)">查看log</el-button>
|
|
|
|
|
<el-button size="mini" type="success" @click="selectLog(scope.$index, scope.row)">查看log</el-button>
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
</el-table>
|
|
|
|
|
@ -103,6 +105,24 @@
|
|
|
|
|
</div>
|
|
|
|
|
</el-dialog>
|
|
|
|
|
|
|
|
|
|
<el-drawer
|
|
|
|
|
:title="title"
|
|
|
|
|
:visible.sync="drawer"
|
|
|
|
|
:before-close="handleClose"
|
|
|
|
|
>
|
|
|
|
|
<el-container style="height: 92vh;">
|
|
|
|
|
<el-main>
|
|
|
|
|
<div class="log">
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
</el-main>
|
|
|
|
|
<el-footer></el-footer>
|
|
|
|
|
</el-container>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</el-drawer>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
@ -111,26 +131,19 @@
|
|
|
|
|
import {
|
|
|
|
|
selectApp,
|
|
|
|
|
saveApp,
|
|
|
|
|
deleteApp,
|
|
|
|
|
searchApp,
|
|
|
|
|
startServer,
|
|
|
|
|
stopServer,
|
|
|
|
|
restartServer,
|
|
|
|
|
userSave,
|
|
|
|
|
userDelete,
|
|
|
|
|
userPwd,
|
|
|
|
|
userExpireToken,
|
|
|
|
|
userFlashCache,
|
|
|
|
|
userLock,
|
|
|
|
|
UserDeptTree,
|
|
|
|
|
UserDeptSave,
|
|
|
|
|
UserDeptdeptTree,
|
|
|
|
|
UserChangeDept
|
|
|
|
|
} from '../../api/userMG'
|
|
|
|
|
import { sendWebsocket, closeWebsocket } from '../../api/ws'
|
|
|
|
|
import Pagination from '../../components/Pagination'
|
|
|
|
|
export default {
|
|
|
|
|
data() {
|
|
|
|
|
return {
|
|
|
|
|
drawer: false,
|
|
|
|
|
nshow: true, //switch开启
|
|
|
|
|
fshow: false, //switch关闭
|
|
|
|
|
loading: false, //是显示加载
|
|
|
|
|
@ -218,6 +231,8 @@ export default {
|
|
|
|
|
* 里面的方法只有被调用才会执行
|
|
|
|
|
*/
|
|
|
|
|
methods: {
|
|
|
|
|
//websocket
|
|
|
|
|
direction(){},
|
|
|
|
|
// 获取数据方法
|
|
|
|
|
getdata(parameter) {
|
|
|
|
|
this.loading = true
|
|
|
|
|
@ -227,33 +242,11 @@ export default {
|
|
|
|
|
msg: null,
|
|
|
|
|
count: 12,
|
|
|
|
|
data: [
|
|
|
|
|
// {
|
|
|
|
|
// addUser: null,
|
|
|
|
|
// editUser: null,
|
|
|
|
|
// addTime: 1526452756000,
|
|
|
|
|
// editTime: 1527128981000,
|
|
|
|
|
// userId: 62,
|
|
|
|
|
// systemNo: null,
|
|
|
|
|
// userName: '211111111',
|
|
|
|
|
// userPassword: 'e10adc3949ba59abbe56e057f20f883e',
|
|
|
|
|
// userRealName: '21111111111',
|
|
|
|
|
// userSex: '男',
|
|
|
|
|
// userMobile: '13601478451',
|
|
|
|
|
// userEmail: '222222@qq.com',
|
|
|
|
|
// isLock: 'N',
|
|
|
|
|
// deptId: 17,
|
|
|
|
|
// deptName: 'v',
|
|
|
|
|
// roleId: 2
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
this.loading = false
|
|
|
|
|
this.userData = res.data
|
|
|
|
|
// // 分页赋值
|
|
|
|
|
// this.pageparm.currentPage = this.formInline.page
|
|
|
|
|
// this.pageparm.pageSize = this.formInline.limit
|
|
|
|
|
// this.pageparm.total = res.count
|
|
|
|
|
// 模拟数据结束
|
|
|
|
|
|
|
|
|
|
/***
|
|
|
|
|
* 调用接口,注释上面模拟数据 取消下面注释
|
|
|
|
|
@ -384,6 +377,33 @@ export default {
|
|
|
|
|
} else {
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
selectLog(index, row){
|
|
|
|
|
console.log(row);
|
|
|
|
|
this.drawer = true
|
|
|
|
|
sendWebsocket("ws://127.0.0.1:9011/pm2-api/ws/"+Math.random()+"/"+row.name,"",this.serverLog)
|
|
|
|
|
|
|
|
|
|
},
|
|
|
|
|
handleClose(done) {
|
|
|
|
|
this.$confirm('确认关闭?')
|
|
|
|
|
.then(_ => {
|
|
|
|
|
closeWebsocket()
|
|
|
|
|
var divElement = document.querySelector('.log');
|
|
|
|
|
while (divElement.firstChild) {
|
|
|
|
|
divElement.removeChild(divElement.firstChild);
|
|
|
|
|
}
|
|
|
|
|
done();
|
|
|
|
|
})
|
|
|
|
|
.catch(_ => {});
|
|
|
|
|
},
|
|
|
|
|
serverLog(data){
|
|
|
|
|
var divElement = document.querySelector('.log');
|
|
|
|
|
var pElement = document.createElement('p');
|
|
|
|
|
|
|
|
|
|
pElement.classList.add('myParagraph'); // 添加新定义的类名
|
|
|
|
|
divElement.appendChild(pElement);
|
|
|
|
|
|
|
|
|
|
pElement.textContent = data;
|
|
|
|
|
},
|
|
|
|
|
// 选择复选框事件
|
|
|
|
|
selectChange(val) {
|
|
|
|
|
this.selectdata = val
|
|
|
|
|
@ -410,7 +430,8 @@ export default {
|
|
|
|
|
// 删除
|
|
|
|
|
userDelete(row)
|
|
|
|
|
.then(res => {
|
|
|
|
|
if (res.success) {
|
|
|
|
|
console.log(res);
|
|
|
|
|
if (res.message == "SUCCESS") {
|
|
|
|
|
this.$message({
|
|
|
|
|
type: 'success',
|
|
|
|
|
message: '数据已删除!'
|
|
|
|
|
@ -445,10 +466,10 @@ export default {
|
|
|
|
|
})
|
|
|
|
|
.then(() => {
|
|
|
|
|
row.permanentlyDelete = false
|
|
|
|
|
// 删除
|
|
|
|
|
// 去除
|
|
|
|
|
userDelete(row)
|
|
|
|
|
.then(res => {
|
|
|
|
|
if (res.success) {
|
|
|
|
|
if (res.message == "SUCCESS") {
|
|
|
|
|
this.$message({
|
|
|
|
|
type: 'success',
|
|
|
|
|
message: '数据已删除!'
|
|
|
|
|
@ -542,175 +563,7 @@ export default {
|
|
|
|
|
this.$message.error('启动服务失败')
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
// 数据权限
|
|
|
|
|
dataAccess: function(index, row) {
|
|
|
|
|
this.dataAccessshow = true
|
|
|
|
|
this.saveroleId = row.userId
|
|
|
|
|
UserDeptTree(row.userId)
|
|
|
|
|
.then(res => {
|
|
|
|
|
if (res.data.success) {
|
|
|
|
|
this.checkmenu = this.changemenu(res.data.data)
|
|
|
|
|
this.UserDept = this.changeArr(res.data.data)
|
|
|
|
|
} else {
|
|
|
|
|
this.$message({
|
|
|
|
|
type: 'info',
|
|
|
|
|
message: res.data.msg
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
.catch(err => {
|
|
|
|
|
this.loading = false
|
|
|
|
|
this.$message.error('获取权限失败,请稍后再试!')
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
//数据格式化
|
|
|
|
|
changeArr(data) {
|
|
|
|
|
var pos = {}
|
|
|
|
|
var tree = []
|
|
|
|
|
var i = 0
|
|
|
|
|
while (data.length != 0) {
|
|
|
|
|
if (data[i].pId == 0) {
|
|
|
|
|
tree.push({
|
|
|
|
|
id: data[i].id,
|
|
|
|
|
name: data[i].name,
|
|
|
|
|
pId: data[i].pId,
|
|
|
|
|
open: data[i].open,
|
|
|
|
|
checked: data[i].checked,
|
|
|
|
|
children: []
|
|
|
|
|
})
|
|
|
|
|
pos[data[i].id] = [tree.length - 1]
|
|
|
|
|
data.splice(i, 1)
|
|
|
|
|
i--
|
|
|
|
|
} else {
|
|
|
|
|
var posArr = pos[data[i].pId]
|
|
|
|
|
if (posArr != undefined) {
|
|
|
|
|
var obj = tree[posArr[0]]
|
|
|
|
|
for (var j = 1; j < posArr.length; j++) {
|
|
|
|
|
obj = obj.children[posArr[j]]
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
obj.children.push({
|
|
|
|
|
id: data[i].id,
|
|
|
|
|
name: data[i].name,
|
|
|
|
|
pId: data[i].pId,
|
|
|
|
|
open: data[i].open,
|
|
|
|
|
checked: data[i].checked,
|
|
|
|
|
children: []
|
|
|
|
|
})
|
|
|
|
|
pos[data[i].id] = posArr.concat([obj.children.length - 1])
|
|
|
|
|
data.splice(i, 1)
|
|
|
|
|
i--
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
i++
|
|
|
|
|
if (i > data.length - 1) {
|
|
|
|
|
i = 0
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return tree
|
|
|
|
|
},
|
|
|
|
|
// 选中菜单
|
|
|
|
|
changemenu(arr) {
|
|
|
|
|
let change = []
|
|
|
|
|
for (let i = 0; i < arr.length; i++) {
|
|
|
|
|
if (arr[i].checked) {
|
|
|
|
|
change.push(arr[i].id)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return change
|
|
|
|
|
},
|
|
|
|
|
// 菜单权限-保存
|
|
|
|
|
menuPermSave() {
|
|
|
|
|
let parm = {
|
|
|
|
|
userId: this.saveroleId,
|
|
|
|
|
deptIds: ''
|
|
|
|
|
}
|
|
|
|
|
let node = this.$refs.tree.getCheckedNodes()
|
|
|
|
|
let moduleIds = []
|
|
|
|
|
if (node.length != 0) {
|
|
|
|
|
for (let i = 0; i < node.length; i++) {
|
|
|
|
|
moduleIds.push(node[i].id)
|
|
|
|
|
}
|
|
|
|
|
parm.deptIds = JSON.stringify(moduleIds)
|
|
|
|
|
}
|
|
|
|
|
UserDeptSave(parm)
|
|
|
|
|
.then(res => {
|
|
|
|
|
if (res.success) {
|
|
|
|
|
this.$message({
|
|
|
|
|
type: 'success',
|
|
|
|
|
message: '权限保存成功'
|
|
|
|
|
})
|
|
|
|
|
this.dataAccessshow = false
|
|
|
|
|
this.getdata(this.formInline)
|
|
|
|
|
} else {
|
|
|
|
|
this.$message({
|
|
|
|
|
type: 'info',
|
|
|
|
|
message: res.msg
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
.catch(err => {
|
|
|
|
|
this.loading = false
|
|
|
|
|
this.$message.error('权限保存失败,请稍后再试!')
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
// // 下线用户
|
|
|
|
|
// offlineUser(index, row) {
|
|
|
|
|
// this.$confirm('确定要让' + row.userName + '用户下线吗?', '信息', {
|
|
|
|
|
// confirmButtonText: '确定',
|
|
|
|
|
// cancelButtonText: '取消',
|
|
|
|
|
// type: 'warning'
|
|
|
|
|
// })
|
|
|
|
|
// .then(() => {
|
|
|
|
|
// userExpireToken(row.userName)
|
|
|
|
|
// .then(res => {
|
|
|
|
|
// if (res.success) {
|
|
|
|
|
// this.$message({
|
|
|
|
|
// type: 'success',
|
|
|
|
|
// message: '用户' + row.userName + '强制下线成功!'
|
|
|
|
|
// })
|
|
|
|
|
// this.getdata(this.formInline)
|
|
|
|
|
// } else {
|
|
|
|
|
// this.$message({
|
|
|
|
|
// type: 'info',
|
|
|
|
|
// message: res.msg
|
|
|
|
|
// })
|
|
|
|
|
// }
|
|
|
|
|
// })
|
|
|
|
|
// .catch(err => {
|
|
|
|
|
// this.loading = false
|
|
|
|
|
// this.$message.error('用户下线失败,请稍后再试!')
|
|
|
|
|
// })
|
|
|
|
|
// })
|
|
|
|
|
// .catch(() => {
|
|
|
|
|
// this.$message({
|
|
|
|
|
// type: 'info',
|
|
|
|
|
// message: '已取消'
|
|
|
|
|
// })
|
|
|
|
|
// })
|
|
|
|
|
// },
|
|
|
|
|
// 刷新缓存
|
|
|
|
|
// refreshCache(index, row) {
|
|
|
|
|
// userFlashCache(row.userName)
|
|
|
|
|
// .then(res => {
|
|
|
|
|
// if (res.success) {
|
|
|
|
|
// this.$message({
|
|
|
|
|
// type: 'success',
|
|
|
|
|
// message: '刷新成功!'
|
|
|
|
|
// })
|
|
|
|
|
// this.getdata(this.formInline)
|
|
|
|
|
// } else {
|
|
|
|
|
// this.$message({
|
|
|
|
|
// type: 'info',
|
|
|
|
|
// message: res.msg
|
|
|
|
|
// })
|
|
|
|
|
// }
|
|
|
|
|
// })
|
|
|
|
|
// .catch(err => {
|
|
|
|
|
// this.loading = false
|
|
|
|
|
// this.$message.error('刷新失败,请稍后再试!')
|
|
|
|
|
// })
|
|
|
|
|
// }
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
</script>
|
|
|
|
|
@ -722,6 +575,18 @@ export default {
|
|
|
|
|
.userRole {
|
|
|
|
|
width: 100%;
|
|
|
|
|
}
|
|
|
|
|
.footer {
|
|
|
|
|
position: fixed;
|
|
|
|
|
left: 0;
|
|
|
|
|
bottom: 0;
|
|
|
|
|
width: 100%;
|
|
|
|
|
background-color: #f5f5f5;
|
|
|
|
|
padding: 20px;
|
|
|
|
|
text-align: center;
|
|
|
|
|
}
|
|
|
|
|
.myParagraph {
|
|
|
|
|
margin-left: 20px;
|
|
|
|
|
}
|
|
|
|
|
</style>
|
|
|
|
|
|
|
|
|
|
|