diff --git a/src/api/userMG.js b/src/api/userMG.js
index 8be28aa..b235519 100644
--- a/src/api/userMG.js
+++ b/src/api/userMG.js
@@ -15,8 +15,6 @@ export const loginout = () => { return axios.delete("/api/login?&token=" + local
export const userList = (params) => { return req("post", "/api/User/list", params) };
// 用户管理-保存(添加编辑)
export const userSave = (params) => { return req("post", "/api/User/save", params) };
-// 用户管理-删除用户
-export const userDelete = (params) => { return req("post", "/pm2-api/app/delete" , params ) };
// 用户管理-重置密码
export const userPwd = (params) => { return req("post", "/api/User/pwd", params) };
// 用户管理-修改状态
@@ -59,6 +57,10 @@ export const stopServer = (params) => { return req("post", "/pm2-api/AppCenterCo
export const restartServer = (params) => { return req("post", "/pm2-api/AppCenterController/restart" , params ) };
+// 用户管理-删除服务
+export const userDelete = (params) => { return req("post", "/pm2-api/app/delete" , params ) };
+// 用户管理-去除服务
+export const removeServer = (params) => { return req("post", "/pm2-api/app/remove" , params ) };
/**
* 菜单管理
**/
diff --git a/src/api/ws.js b/src/api/ws.js
new file mode 100644
index 0000000..b12d371
--- /dev/null
+++ b/src/api/ws.js
@@ -0,0 +1,107 @@
+import { Message } from 'element-ui'
+let websock = null
+let messageCallback = null
+let errorCallback = null
+let wsUrl = ''
+let tryTime = 0
+
+// 接收ws后端返回的数据
+function websocketonmessage (e) {
+ messageCallback(e.data)
+}
+
+/**
+ * 发起websocket连接
+ * @param {Object} agentData 需要向后台传递的参数数据
+ */
+function websocketSend (agentData) {
+ // 加延迟是为了尽量让ws连接状态变为OPEN
+ setTimeout(() => {
+ // 添加状态判断,当为OPEN时,发送消息
+ if (websock.readyState === websock.OPEN) { // websock.OPEN = 1
+ // 发给后端的数据需要字符串化
+ websock.send(JSON.stringify(agentData))
+ }
+ if (websock.readyState === websock.CLOSED) { // websock.CLOSED = 3
+ console.log('websock.readyState=3')
+ Message.error('ws连接异常,请稍候重试')
+ errorCallback()
+ }
+ }, 500)
+}
+
+// 关闭ws连接
+function websocketclose (e) {
+ // e.code === 1000 表示正常关闭。 无论为何目的而创建, 该链接都已成功完成任务。
+ // e.code !== 1000 表示非正常关闭。
+ if (e && e.code !== 1000) {
+ Message.error('ws连接异常,请稍候重试')
+ errorCallback()
+ // // 如果需要设置异常重连则可替换为下面的代码,自行进行测试
+ // if (tryTime < 10) {
+ // setTimeout(function() {
+ // websock = null
+ // tryTime++
+ // initWebSocket()
+ // console.log(`第${tryTime}次重连`)
+ // }, 3 * 1000)
+ //} else {
+ // Message.error('重连失败!请稍后重试')
+ //}
+ }
+}
+// 建立ws连接
+function websocketOpen (e) {
+ // console.log('ws连接成功')
+}
+
+// 初始化weosocket
+function initWebSocket () {
+ if (typeof (WebSocket) === 'undefined') {
+ Message.error('您的浏览器不支持WebSocket,无法获取数据')
+ return false
+ }
+
+ // ws请求完整地址
+ websock = new WebSocket(wsUrl)
+
+ websock.onmessage = function (e) {
+ websocketonmessage(e)
+ }
+ websock.onopen = function () {
+ websocketOpen()
+ }
+ websock.onerror = function () {
+ Message.error('ws连接异常,请稍候重试')
+ errorCallback()
+ }
+ websock.onclose = function (e) {
+ websocketclose(e)
+ }
+}
+
+/**
+ * 发起websocket请求函数
+ * @param {string} url ws连接地址
+ * @param {Object} agentData 传给后台的参数
+ * @param {function} successCallback 接收到ws数据,对数据进行处理的回调函数
+ * @param {function} errCallback ws连接错误的回调函数
+ */
+export function sendWebsocket (url, agentData, successCallback, errCallback) {
+ wsUrl = url
+ initWebSocket()
+ messageCallback = successCallback
+ errorCallback = errCallback
+ websocketSend(agentData)
+}
+
+/**
+ * 关闭websocket函数
+ */
+export function closeWebsocket () {
+ if (websock) {
+ websock.close() // 关闭websocket
+ websock.onclose() // 关闭websocket
+ }
+}
+
diff --git a/src/views/system/user.vue b/src/views/system/user.vue
index d10f544..3bbc17e 100644
--- a/src/views/system/user.vue
+++ b/src/views/system/user.vue
@@ -42,9 +42,11 @@
{{scope.row.onOff ? '运行':'停止'}}
-
+
-
+
+
+
@@ -67,7 +69,7 @@
启动
重启
停止
- 查看log
+ 查看log
@@ -77,7 +79,7 @@
-
+
@@ -103,6 +105,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -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,34 +242,12 @@ 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('刷新失败,请稍后再试!')
- // })
- // }
+
}
}
@@ -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;
+}
\ No newline at end of file