Browse Source

菜单添加菜单编码,websocket

master
管理员 6 years ago
parent
commit
de32d6c5ea
  1. 46
      package-lock.json
  2. 2
      package.json
  3. 1
      src/i18n/zh-CN.js
  4. 39
      src/views/main-sidebar.vue
  5. 172
      src/views/modules/sys/menu-add-or-update.vue

46
package-lock.json

@ -5391,12 +5391,12 @@
"integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ="
},
"eventsource": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz",
"integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==",
"version": "0.1.6",
"resolved": "http://registry.npm.taobao.org/eventsource/download/eventsource-0.1.6.tgz",
"integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=",
"dev": true,
"requires": {
"original": "^1.0.0"
"original": ">=0.0.5"
}
},
"evp_bytestokey": {
@ -14300,42 +14300,36 @@
}
},
"sockjs-client": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz",
"integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==",
"version": "1.0.0",
"resolved": "https://registry.npm.taobao.org/sockjs-client/download/sockjs-client-1.0.0.tgz?cache=0&sync_timestamp=1566505930428&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsockjs-client%2Fdownload%2Fsockjs-client-1.0.0.tgz",
"integrity": "sha1-r20tNASCcJveJ4kKC6gE39dl+Pk=",
"dev": true,
"requires": {
"debug": "^3.2.5",
"eventsource": "^1.0.7",
"faye-websocket": "~0.11.1",
"inherits": "^2.0.3",
"debug": "^2.1.0",
"eventsource": "^0.1.3",
"faye-websocket": "~0.7.3",
"inherits": "^2.0.1",
"json3": "^3.3.2",
"url-parse": "^1.4.3"
"url-parse": "^1.0.1"
},
"dependencies": {
"debug": {
"version": "3.2.6",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
"integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
"version": "2.6.9",
"resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz",
"integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
"dev": true,
"requires": {
"ms": "^2.1.1"
"ms": "2.0.0"
}
},
"faye-websocket": {
"version": "0.11.3",
"resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz",
"integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==",
"version": "0.7.3",
"resolved": "https://registry.npm.taobao.org/faye-websocket/download/faye-websocket-0.7.3.tgz",
"integrity": "sha1-zEB0x/Sk39A69U3WXDVLE1EyzhE=",
"dev": true,
"requires": {
"websocket-driver": ">=0.5.1"
"websocket-driver": ">=0.3.6"
}
},
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
}
}
},

2
package.json

@ -42,7 +42,7 @@
"@vue/cli-plugin-eslint": "^3.0.4",
"@vue/cli-service": "^3.0.4",
"@vue/eslint-config-standard": "^3.0.4",
"sockjs-client": "^1.4.0",
"sockjs-client": "^1.0.0",
"stompjs": "^2.3.3",
"vue-template-compiler": "^2.5.17"
},

1
src/i18n/zh-CN.js

@ -346,6 +346,7 @@ t.menu.resource = '授权资源'
t.menu.resourceUrl = '资源URL'
t.menu.resourceMethod = '请求方式'
t.menu.resourceAddItem = '添加一项'
t.menu.menuCode = '菜单编码'
t.params = {}
t.params.paramCode = '编码'

39
src/views/main-sidebar.vue

@ -1,13 +1,14 @@
<template>
<aside :class="['aui-sidebar', `aui-sidebar--${$store.state.sidebarLayoutSkin}`]">
<div class="aui-sidebar__inner">
<el-menu
:default-active="$store.state.sidebarMenuActiveName"
:collapse="$store.state.sidebarFold"
:unique-opened="true"
:collapseTransition="false"
class="aui-sidebar__menu">
<sub-menu v-for="menu in $store.state.sidebarMenuList" :key="menu.id" :menu="menu" />
<el-menu :default-active="$store.state.sidebarMenuActiveName"
:collapse="$store.state.sidebarFold"
:unique-opened="true"
:collapseTransition="false"
class="aui-sidebar__menu">
<sub-menu v-for="menu in $store.state.sidebarMenuList"
:key="menu.id"
:menu="menu" />
</el-menu>
</div>
</aside>
@ -17,6 +18,8 @@
import SubMenu from './main-sidebar-sub-menu'
import SockJS from 'sockjs-client'
import Stomp from 'stompjs'
import Cookies from 'js-cookie'
export default {
data () {
return {
@ -43,7 +46,7 @@ export default {
this.filterRoute(routeList, selectRoute)
})
console.log(routeList)
// this.initWebSocket()
this.initWebSocket()
},
methods: {
filterRoute (routeList, selectRoute) {
@ -88,26 +91,32 @@ export default {
},
connection () {
//
this.socket = new SockJS('http://127.0.0.1:8081/websocket')// 广httpWebSocketws
this.socket = new SockJS('http://192.168.15.174:9094/epdc/ws/menuNoticeEndpoint')// 广httpWebSocketws
// STOMP
this.stompClient = Stomp.over(this.socket)
// ,
// const token = getToken()
let token = Cookies.get('token') || ''
console.log('token: ' + token)
let headers = {
'Authorization': ''
'token': token
}
// websocket
this.stompClient.connect(headers, this.onConnected, this.onFailed)
},
onConnected: function (frame) {
console.log('Connected: ' + frame)
let topic = '/ws/topic/charger.messageTopic'
this.stompClient.subscribe(topic, this.onSubscribe)
// let topic = '/menuNoticeTopic/getResponse'
let topic2 = '/userMenuNotice/menuNoticeQueue/menu/getResponse'
// this.stompClient.subscribe(topic, this.onSubscribe)
this.stompClient.subscribe(topic2, this.onSubscribe2)
},
onSubscribe (value) {
console.log('subscribe', value)
// onSubscribe (value) {
// console.log('subscribe', value)
// },
onSubscribe2 (value) {
console.log('subscribe2', value)
},
onFailed (frame) {
console.log('Failed: ' + frame)

172
src/views/modules/sys/menu-add-or-update.vue

@ -1,87 +1,148 @@
<template>
<el-dialog :visible.sync="visible" :title="!dataForm.id ? $t('add') : $t('update')" :close-on-click-modal="false" :close-on-press-escape="false">
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmitHandle()" label-width="120px">
<el-form-item prop="type" :label="$t('menu.type')" size="mini">
<el-radio-group v-model="dataForm.type" :disabled="!!dataForm.id">
<el-dialog :visible.sync="visible"
:title="!dataForm.id ? $t('add') : $t('update')"
:close-on-click-modal="false"
:close-on-press-escape="false">
<el-form :model="dataForm"
:rules="dataRule"
ref="dataForm"
@keyup.enter.native="dataFormSubmitHandle()"
label-width="120px">
<el-form-item prop="type"
:label="$t('menu.type')"
size="mini">
<el-radio-group v-model="dataForm.type"
:disabled="!!dataForm.id">
<el-radio :label="0">{{ $t('menu.type0') }}</el-radio>
<el-radio :label="1">{{ $t('menu.type1') }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item prop="name" :label="$t('menu.name')">
<el-input v-model="dataForm.name" :placeholder="$t('menu.name')"></el-input>
<el-form-item prop="name"
:label="$t('menu.name')">
<el-input v-model="dataForm.name"
:placeholder="$t('menu.name')"></el-input>
</el-form-item>
<el-form-item prop="parentName" :label="$t('menu.parentName')" class="menu-list">
<el-popover v-model="menuListVisible" ref="menuListPopover" placement="bottom-start" trigger="click">
<el-tree
:data="menuList"
:props="{ label: 'name', children: 'children' }"
node-key="id"
ref="menuListTree"
:highlight-current="true"
:expand-on-click-node="false"
accordion
@current-change="menuListTreeCurrentChangeHandle">
<el-form-item v-if="dataForm.type === 0"
prop="menuCode"
:label="$t('menu.menuCode')">
<el-input v-model="dataForm.menuCode"
:placeholder="$t('menu.menuCode')"></el-input>
</el-form-item>
<el-form-item prop="parentName"
:label="$t('menu.parentName')"
class="menu-list">
<el-popover v-model="menuListVisible"
ref="menuListPopover"
placement="bottom-start"
trigger="click">
<el-tree :data="menuList"
:props="{ label: 'name', children: 'children' }"
node-key="id"
ref="menuListTree"
:highlight-current="true"
:expand-on-click-node="false"
accordion
@current-change="menuListTreeCurrentChangeHandle">
</el-tree>
</el-popover>
<el-input v-model="dataForm.parentName" v-popover:menuListPopover :readonly="true" :placeholder="$t('menu.parentName')">
<i v-if="dataForm.pid !== '0'" slot="suffix" @click.stop="deptListTreeSetDefaultHandle()" class="el-icon-circle-close el-input__icon"></i>
<el-input v-model="dataForm.parentName"
v-popover:menuListPopover
:readonly="true"
:placeholder="$t('menu.parentName')">
<i v-if="dataForm.pid !== '0'"
slot="suffix"
@click.stop="deptListTreeSetDefaultHandle()"
class="el-icon-circle-close el-input__icon"></i>
</el-input>
</el-form-item>
<el-form-item v-if="dataForm.type === 0" prop="url" :label="$t('menu.url')">
<el-input v-model="dataForm.url" :placeholder="$t('menu.url')"></el-input>
<el-form-item v-if="dataForm.type === 0"
prop="url"
:label="$t('menu.url')">
<el-input v-model="dataForm.url"
:placeholder="$t('menu.url')"></el-input>
</el-form-item>
<el-form-item prop="sort" :label="$t('menu.sort')">
<el-input-number v-model="dataForm.sort" controls-position="right" :min="0" :label="$t('menu.sort')"></el-input-number>
<el-form-item prop="sort"
:label="$t('menu.sort')">
<el-input-number v-model="dataForm.sort"
controls-position="right"
:min="0"
:label="$t('menu.sort')"></el-input-number>
</el-form-item>
<el-form-item v-if="dataForm.type === 0" prop="icon" :label="$t('menu.icon')" class="icon-list">
<el-popover v-model="iconListVisible" ref="iconListPopover" placement="bottom-start" trigger="click" popper-class="mod-sys__menu-icon-popover">
<el-form-item v-if="dataForm.type === 0"
prop="icon"
:label="$t('menu.icon')"
class="icon-list">
<el-popover v-model="iconListVisible"
ref="iconListPopover"
placement="bottom-start"
trigger="click"
popper-class="mod-sys__menu-icon-popover">
<div class="mod-sys__menu-icon-inner">
<div class="mod-sys__menu-icon-list">
<el-button
v-for="(item, index) in iconList"
:key="index"
@click="iconListCurrentChangeHandle(item)"
:class="{ 'is-active': dataForm.icon === item }">
<svg class="icon-svg" aria-hidden="true"><use :xlink:href="`#${item}`"></use></svg>
<el-button v-for="(item, index) in iconList"
:key="index"
@click="iconListCurrentChangeHandle(item)"
:class="{ 'is-active': dataForm.icon === item }">
<svg class="icon-svg"
aria-hidden="true">
<use :xlink:href="`#${item}`"></use>
</svg>
</el-button>
</div>
</div>
</el-popover>
<el-input v-model="dataForm.icon" v-popover:iconListPopover :readonly="true" :placeholder="$t('menu.icon')"></el-input>
<el-input v-model="dataForm.icon"
v-popover:iconListPopover
:readonly="true"
:placeholder="$t('menu.icon')"></el-input>
</el-form-item>
<el-form-item v-if="dataForm.type === 1" prop="permissions" :label="$t('menu.permissions')">
<el-input v-model="dataForm.permissions" :placeholder="$t('menu.permissionsTips')"></el-input>
<el-form-item v-if="dataForm.type === 1"
prop="permissions"
:label="$t('menu.permissions')">
<el-input v-model="dataForm.permissions"
:placeholder="$t('menu.permissionsTips')"></el-input>
</el-form-item>
<el-form-item
v-for="(item, index) in dataForm.resourceList"
:key="item.key"
:prop="`resourceList.${index}.resourceUrl`"
:rules="{ required: true, message: $t('validate.required'), trigger: 'blur' }"
:label="index === 0 ? $t('menu.resource') : ''"
class="resource-list">
<el-form-item v-for="(item, index) in dataForm.resourceList"
:key="item.key"
:prop="`resourceList.${index}.resourceUrl`"
:rules="{ required: true, message: $t('validate.required'), trigger: 'blur' }"
:label="index === 0 ? $t('menu.resource') : ''"
class="resource-list">
<el-row>
<el-col :span="22">
<el-input v-model="item.resourceUrl" :placeholder="$t('menu.resourceUrl')">
<el-select v-model="item.resourceMethod" slot="prepend" :placeholder="$t('menu.resourceMethod')">
<el-option label="GET" value="GET"></el-option>
<el-option label="POST" value="POST"></el-option>
<el-option label="PUT" value="PUT"></el-option>
<el-option label="DELETE" value="DELETE"></el-option>
<el-input v-model="item.resourceUrl"
:placeholder="$t('menu.resourceUrl')">
<el-select v-model="item.resourceMethod"
slot="prepend"
:placeholder="$t('menu.resourceMethod')">
<el-option label="GET"
value="GET"></el-option>
<el-option label="POST"
value="POST"></el-option>
<el-option label="PUT"
value="PUT"></el-option>
<el-option label="DELETE"
value="DELETE"></el-option>
</el-select>
</el-input>
</el-col>
<el-col :span="2" class="text-center">
<el-button @click="resourceDeleteHandle(item)" size="small" type="text">{{ $t('delete') }}</el-button>
<el-col :span="2"
class="text-center">
<el-button @click="resourceDeleteHandle(item)"
size="small"
type="text">{{ $t('delete') }}</el-button>
</el-col>
</el-row>
</el-form-item>
<el-form-item :label="dataForm.resourceList.length <= 0 ? $t('menu.resource') : ''">
<el-button @click="resourceAddHandle()" class="aui-button--dashed w-percent-100">{{ $t('menu.resourceAddItem') }}</el-button>
<el-button @click="resourceAddHandle()"
class="aui-button--dashed w-percent-100">{{ $t('menu.resourceAddItem') }}</el-button>
</el-form-item>
</el-form>
<template slot="footer">
<el-button @click="visible = false">{{ $t('cancel') }}</el-button>
<el-button type="primary" @click="dataFormSubmitHandle()">{{ $t('confirm') }}</el-button>
<el-button type="primary"
@click="dataFormSubmitHandle()">{{ $t('confirm') }}</el-button>
</template>
</el-dialog>
</template>
@ -107,7 +168,8 @@ export default {
resourceList: [],
permissions: '',
sort: 0,
icon: ''
icon: '',
menuCode: ''
}
}
},
@ -150,7 +212,7 @@ export default {
return this.$message.error(res.msg)
}
this.menuList = res.data
}).catch(() => {})
}).catch(() => { })
},
//
getInfo () {
@ -166,7 +228,7 @@ export default {
return this.deptListTreeSetDefaultHandle()
}
this.$refs.menuListTree.setCurrentKey(this.dataForm.pid)
}).catch(() => {})
}).catch(() => { })
},
// ,
deptListTreeSetDefaultHandle () {
@ -215,7 +277,7 @@ export default {
this.$emit('refreshDataList')
}
})
}).catch(() => {})
}).catch(() => { })
})
}, 1000, { 'leading': true, 'trailing': false })
}

Loading…
Cancel
Save