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=" "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ="
}, },
"eventsource": { "eventsource": {
"version": "1.0.7", "version": "0.1.6",
"resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", "resolved": "http://registry.npm.taobao.org/eventsource/download/eventsource-0.1.6.tgz",
"integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=",
"dev": true, "dev": true,
"requires": { "requires": {
"original": "^1.0.0" "original": ">=0.0.5"
} }
}, },
"evp_bytestokey": { "evp_bytestokey": {
@ -14300,42 +14300,36 @@
} }
}, },
"sockjs-client": { "sockjs-client": {
"version": "1.4.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", "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": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", "integrity": "sha1-r20tNASCcJveJ4kKC6gE39dl+Pk=",
"dev": true, "dev": true,
"requires": { "requires": {
"debug": "^3.2.5", "debug": "^2.1.0",
"eventsource": "^1.0.7", "eventsource": "^0.1.3",
"faye-websocket": "~0.11.1", "faye-websocket": "~0.7.3",
"inherits": "^2.0.3", "inherits": "^2.0.1",
"json3": "^3.3.2", "json3": "^3.3.2",
"url-parse": "^1.4.3" "url-parse": "^1.0.1"
}, },
"dependencies": { "dependencies": {
"debug": { "debug": {
"version": "3.2.6", "version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz",
"integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
"dev": true, "dev": true,
"requires": { "requires": {
"ms": "^2.1.1" "ms": "2.0.0"
} }
}, },
"faye-websocket": { "faye-websocket": {
"version": "0.11.3", "version": "0.7.3",
"resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", "resolved": "https://registry.npm.taobao.org/faye-websocket/download/faye-websocket-0.7.3.tgz",
"integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", "integrity": "sha1-zEB0x/Sk39A69U3WXDVLE1EyzhE=",
"dev": true, "dev": true,
"requires": { "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-plugin-eslint": "^3.0.4",
"@vue/cli-service": "^3.0.4", "@vue/cli-service": "^3.0.4",
"@vue/eslint-config-standard": "^3.0.4", "@vue/eslint-config-standard": "^3.0.4",
"sockjs-client": "^1.4.0", "sockjs-client": "^1.0.0",
"stompjs": "^2.3.3", "stompjs": "^2.3.3",
"vue-template-compiler": "^2.5.17" "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.resourceUrl = '资源URL'
t.menu.resourceMethod = '请求方式' t.menu.resourceMethod = '请求方式'
t.menu.resourceAddItem = '添加一项' t.menu.resourceAddItem = '添加一项'
t.menu.menuCode = '菜单编码'
t.params = {} t.params = {}
t.params.paramCode = '编码' t.params.paramCode = '编码'

39
src/views/main-sidebar.vue

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

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

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

Loading…
Cancel
Save