v1.6 版本发布 ,详情查看版本说明
This commit is contained in:
@@ -51,14 +51,12 @@ module.exports = function() {
|
|||||||
'To use this template, you must update following to modules:'
|
'To use this template, you must update following to modules:'
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
console.log()
|
|
||||||
|
|
||||||
for (let i = 0; i < warnings.length; i++) {
|
for (let i = 0; i < warnings.length; i++) {
|
||||||
const warning = warnings[i]
|
const warning = warnings[i]
|
||||||
console.log(' ' + warning)
|
console.log(' ' + warning)
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log()
|
|
||||||
process.exit(1)
|
process.exit(1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
{
|
{
|
||||||
"name": "eladmin-qt",
|
"name": "eladmin-qt",
|
||||||
"version": "1.2.0",
|
"version": "1.6.0",
|
||||||
"license": "Apache License 2.0",
|
"license": "Apache License 2.0",
|
||||||
"description": "eladmin 前端代码",
|
"description": "eladmin 前端代码",
|
||||||
"author": "jie <zhengjie@tom.com>",
|
"author": "jie <elunez@qq.com>",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "cross-env BABEL_ENV=development webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
|
"dev": "cross-env BABEL_ENV=development webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
|
||||||
"build": "cross-env NODE_ENV=production env_config=prod node build/build.js",
|
"build": "cross-env NODE_ENV=production env_config=prod node build/build.js",
|
||||||
@@ -32,7 +32,7 @@
|
|||||||
"vuex": "3.0.1",
|
"vuex": "3.0.1",
|
||||||
"xlsx": "^0.11.16",
|
"xlsx": "^0.11.16",
|
||||||
"jszip": "3.1.5",
|
"jszip": "3.1.5",
|
||||||
"@riophae/vue-treeselect": "0.0.37",
|
"@riophae/vue-treeselect": "0.0.38",
|
||||||
"file-saver": "1.3.8",
|
"file-saver": "1.3.8",
|
||||||
"sockjs-client": "1.3.0",
|
"sockjs-client": "1.3.0",
|
||||||
"stompjs": "2.3.3",
|
"stompjs": "2.3.3",
|
||||||
|
|||||||
@@ -16,6 +16,13 @@ export function add(data) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function get(id) {
|
||||||
|
return request({
|
||||||
|
url: 'api/roles/' + id,
|
||||||
|
method: 'get'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
export function del(id) {
|
export function del(id) {
|
||||||
return request({
|
return request({
|
||||||
url: 'api/roles/' + id,
|
url: 'api/roles/' + id,
|
||||||
@@ -30,3 +37,19 @@ export function edit(data) {
|
|||||||
data
|
data
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function editPermission(data) {
|
||||||
|
return request({
|
||||||
|
url: 'api/roles/permission',
|
||||||
|
method: 'put',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export function editMenu(data) {
|
||||||
|
return request({
|
||||||
|
url: 'api/roles/menu',
|
||||||
|
method: 'put',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
@@ -11,6 +11,9 @@ NProgress.configure({ showSpinner: false })// NProgress Configuration
|
|||||||
const whiteList = ['/login']// no redirect whitelist
|
const whiteList = ['/login']// no redirect whitelist
|
||||||
|
|
||||||
router.beforeEach((to, from, next) => {
|
router.beforeEach((to, from, next) => {
|
||||||
|
if (to.meta.title) {
|
||||||
|
document.title = to.meta.title + ' - eladmin'
|
||||||
|
}
|
||||||
NProgress.start() // start progress bar
|
NProgress.start() // start progress bar
|
||||||
if (getToken()) {
|
if (getToken()) {
|
||||||
// 已登录且要跳转的页面是登录页
|
// 已登录且要跳转的页面是登录页
|
||||||
@@ -20,20 +23,19 @@ router.beforeEach((to, from, next) => {
|
|||||||
} else {
|
} else {
|
||||||
if (store.getters.roles.length === 0) { // 判断当前用户是否已拉取完user_info信息
|
if (store.getters.roles.length === 0) { // 判断当前用户是否已拉取完user_info信息
|
||||||
store.dispatch('GetInfo').then(res => { // 拉取user_info
|
store.dispatch('GetInfo').then(res => { // 拉取user_info
|
||||||
buildMenus().then(res => {
|
// 动态路由,拉取菜单
|
||||||
const asyncRouter = filterAsyncRouter(res)
|
loadMenus(next, to)
|
||||||
asyncRouter.push({ path: '*', redirect: '/404', hidden: true })
|
|
||||||
store.dispatch('GenerateRoutes', asyncRouter).then(() => { // 存储路由
|
|
||||||
router.addRoutes(asyncRouter) // 动态添加可访问路由表
|
|
||||||
next({ ...to, replace: true })// hack方法 确保addRoutes已完成
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}).catch((err) => {
|
}).catch((err) => {
|
||||||
console.log(err)
|
console.log(err)
|
||||||
store.dispatch('LogOut').then(() => {
|
store.dispatch('LogOut').then(() => {
|
||||||
location.reload() // 为了重新实例化vue-router对象 避免bug
|
location.reload() // 为了重新实例化vue-router对象 避免bug
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
// 登录时未拉取 菜单,在此处拉取
|
||||||
|
} else if (store.getters.loadMenus) {
|
||||||
|
// 修改成false,防止死循环
|
||||||
|
store.dispatch('updateLoadMenus').then(res => {})
|
||||||
|
loadMenus(next, to)
|
||||||
} else {
|
} else {
|
||||||
next()
|
next()
|
||||||
}
|
}
|
||||||
@@ -49,6 +51,17 @@ router.beforeEach((to, from, next) => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
export const loadMenus = (next, to) => {
|
||||||
|
buildMenus().then(res => {
|
||||||
|
const asyncRouter = filterAsyncRouter(res)
|
||||||
|
asyncRouter.push({ path: '*', redirect: '/404', hidden: true })
|
||||||
|
store.dispatch('GenerateRoutes', asyncRouter).then(() => { // 存储路由
|
||||||
|
router.addRoutes(asyncRouter) // 动态添加可访问路由表
|
||||||
|
next({ ...to, replace: true })// hack方法 确保addRoutes已完成
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
router.afterEach(() => {
|
router.afterEach(() => {
|
||||||
NProgress.done() // finish progress bar
|
NProgress.done() // finish progress bar
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import Layout from '../views/layout/Layout'
|
|||||||
|
|
||||||
export const constantRouterMap = [
|
export const constantRouterMap = [
|
||||||
{ path: '/login',
|
{ path: '/login',
|
||||||
|
meta: { title: '登录', noCache: true },
|
||||||
component: () => import('@/views/login/index'),
|
component: () => import('@/views/login/index'),
|
||||||
hidden: true
|
hidden: true
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ const getters = {
|
|||||||
createTime: state => state.user.createTime,
|
createTime: state => state.user.createTime,
|
||||||
email: state => state.user.email,
|
email: state => state.user.email,
|
||||||
roles: state => state.user.roles,
|
roles: state => state.user.roles,
|
||||||
|
loadMenus: state => state.user.loadMenus,
|
||||||
permission_routers: state => state.permission.routers,
|
permission_routers: state => state.permission.routers,
|
||||||
addRouters: state => state.permission.addRouters,
|
addRouters: state => state.permission.addRouters,
|
||||||
socketApi: state => state.api.socketApi,
|
socketApi: state => state.api.socketApi,
|
||||||
|
|||||||
@@ -9,7 +9,9 @@ const user = {
|
|||||||
email: '',
|
email: '',
|
||||||
avatar: '',
|
avatar: '',
|
||||||
createTime: '',
|
createTime: '',
|
||||||
roles: []
|
roles: [],
|
||||||
|
// 第一次加载菜单时用到
|
||||||
|
loadMenus: false
|
||||||
},
|
},
|
||||||
|
|
||||||
mutations: {
|
mutations: {
|
||||||
@@ -30,6 +32,9 @@ const user = {
|
|||||||
},
|
},
|
||||||
SET_EMAIL: (state, email) => {
|
SET_EMAIL: (state, email) => {
|
||||||
state.email = email
|
state.email = email
|
||||||
|
},
|
||||||
|
SET_LOAD_MENUS: (state, loadMenus) => {
|
||||||
|
state.loadMenus = loadMenus
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -43,6 +48,9 @@ const user = {
|
|||||||
login(username, password).then(res => {
|
login(username, password).then(res => {
|
||||||
setToken(res.token, rememberMe)
|
setToken(res.token, rememberMe)
|
||||||
commit('SET_TOKEN', res.token)
|
commit('SET_TOKEN', res.token)
|
||||||
|
setUserInfo(res.user, commit)
|
||||||
|
// 第一次加载菜单时用到, 具体见 src 目录下的 permission.js
|
||||||
|
commit('SET_LOAD_MENUS', true)
|
||||||
resolve()
|
resolve()
|
||||||
}).catch(error => {
|
}).catch(error => {
|
||||||
reject(error)
|
reject(error)
|
||||||
@@ -54,11 +62,7 @@ const user = {
|
|||||||
GetInfo({ commit }) {
|
GetInfo({ commit }) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
getInfo().then(res => {
|
getInfo().then(res => {
|
||||||
commit('SET_ROLES', res.roles)
|
setUserInfo(res, commit)
|
||||||
commit('SET_NAME', res.username)
|
|
||||||
commit('SET_AVATAR', res.avatar)
|
|
||||||
commit('SET_EMAIL', res.email)
|
|
||||||
commit('SET_CREATE_TIME', parseTime(res.createTime))
|
|
||||||
resolve(res)
|
resolve(res)
|
||||||
}).catch(error => {
|
}).catch(error => {
|
||||||
reject(error)
|
reject(error)
|
||||||
@@ -74,8 +78,27 @@ const user = {
|
|||||||
removeToken()
|
removeToken()
|
||||||
resolve()
|
resolve()
|
||||||
})
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
updateLoadMenus({ commit }) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
commit('SET_LOAD_MENUS', false)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const setUserInfo = (res, commit) => {
|
||||||
|
// 如果没有任何权限,则赋予一个默认的权限,避免请求死循环
|
||||||
|
if (res.roles.length === 0) {
|
||||||
|
commit('SET_ROLES', ['ROLE_SYSTEM_DEFAULT'])
|
||||||
|
} else {
|
||||||
|
commit('SET_ROLES', res.roles)
|
||||||
|
}
|
||||||
|
commit('SET_NAME', res.username)
|
||||||
|
commit('SET_AVATAR', res.avatar)
|
||||||
|
commit('SET_EMAIL', res.email)
|
||||||
|
commit('SET_CREATE_TIME', parseTime(res.createTime))
|
||||||
|
}
|
||||||
|
|
||||||
export default user
|
export default user
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
margin: 0px 0px 10px;
|
margin: 0px 0px 10px;
|
||||||
padding: 15px;
|
padding: 15px;
|
||||||
line-height: 22px;
|
line-height: 22px;
|
||||||
border-left: 5px solid #409EFF;;
|
border-left: 5px solid #00437B;
|
||||||
border-radius: 0 2px 2px 0;
|
border-radius: 0 2px 2px 0;
|
||||||
background-color: #f2f2f2;
|
background-color: #f2f2f2;
|
||||||
}
|
}
|
||||||
@@ -10,8 +10,7 @@
|
|||||||
position: relative;
|
position: relative;
|
||||||
padding: 15px;
|
padding: 15px;
|
||||||
line-height: 20px;
|
line-height: 20px;
|
||||||
border: 1px solid #ddd;
|
border-left: 5px solid #ddd;
|
||||||
border-left-width: 6px;
|
|
||||||
color: #333;
|
color: #333;
|
||||||
font-family: Courier New;
|
font-family: Courier New;
|
||||||
font-size: 12px
|
font-size: 12px
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ export function parseTime(time) {
|
|||||||
var minutes = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()
|
var minutes = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()
|
||||||
var seconds = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds()
|
var seconds = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds()
|
||||||
// 拼接
|
// 拼接
|
||||||
return year + '年' + month + '月' + day + '日 ' + hours + ':' + minutes + ':' + seconds
|
return year + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds
|
||||||
} else {
|
} else {
|
||||||
return ''
|
return ''
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ service.interceptors.response.use(
|
|||||||
}
|
}
|
||||||
if (code === 401) {
|
if (code === 401) {
|
||||||
MessageBox.confirm(
|
MessageBox.confirm(
|
||||||
'登录状态过期了哦,您可以继续留在该页面,或者重新登录',
|
'登录状态已过期,您可以继续留在该页面,或者重新登录',
|
||||||
'系统提示',
|
'系统提示',
|
||||||
{
|
{
|
||||||
confirmButtonText: '重新登录',
|
confirmButtonText: '重新登录',
|
||||||
|
|||||||
@@ -16,7 +16,6 @@
|
|||||||
</router-link>
|
</router-link>
|
||||||
</scroll-pane>
|
</scroll-pane>
|
||||||
<ul v-show="visible" :style="{left:left+'px',top:top+'px'}" class="contextmenu">
|
<ul v-show="visible" :style="{left:left+'px',top:top+'px'}" class="contextmenu">
|
||||||
<li @click="refreshSelectedTag(selectedTag)">刷新</li>
|
|
||||||
<li @click="closeSelectedTag(selectedTag)">关闭</li>
|
<li @click="closeSelectedTag(selectedTag)">关闭</li>
|
||||||
<li @click="closeOthersTags">关闭其他</li>
|
<li @click="closeOthersTags">关闭其他</li>
|
||||||
<li @click="closeAllTags">关闭所有</li>
|
<li @click="closeAllTags">关闭所有</li>
|
||||||
@@ -86,16 +85,6 @@ export default {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
refreshSelectedTag(view) {
|
|
||||||
this.$store.dispatch('delCachedView', view).then(() => {
|
|
||||||
const { fullPath } = view
|
|
||||||
this.$nextTick(() => {
|
|
||||||
this.$router.replace({
|
|
||||||
path: '/redirect' + fullPath
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
},
|
|
||||||
closeSelectedTag(view) {
|
closeSelectedTag(view) {
|
||||||
this.$store.dispatch('delView', view).then(({ visitedViews }) => {
|
this.$store.dispatch('delView', view).then(({ visitedViews }) => {
|
||||||
if (this.isActive(view)) {
|
if (this.isActive(view)) {
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
</el-input>
|
</el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item prop="password">
|
<el-form-item prop="password">
|
||||||
<el-input v-model="loginForm.password" type="password" auto-complete="off" placeholder="密码">
|
<el-input v-model="loginForm.password" type="password" auto-complete="off" placeholder="密码" @keyup.enter.native="handleLogin">
|
||||||
<svg-icon slot="prefix" icon-class="password" class="el-input__icon" style="height: 39px;width: 13px;margin-left: 2px;" />
|
<svg-icon slot="prefix" icon-class="password" class="el-input__icon" style="height: 39px;width: 13px;margin-left: 2px;" />
|
||||||
</el-input>
|
</el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ export default {
|
|||||||
ico: 'unlock', unlock: true, content: '锁定滚动条',
|
ico: 'unlock', unlock: true, content: '锁定滚动条',
|
||||||
height: document.documentElement.clientHeight - 94.5 + 'px;',
|
height: document.documentElement.clientHeight - 94.5 + 'px;',
|
||||||
width: document.documentElement.clientWidth - 185 + 'px;',
|
width: document.documentElement.clientWidth - 185 + 'px;',
|
||||||
data: [{ name: 'elAdmin-', timestamp: new Date(), threadName: 'system-prompt-message', level: 'INFO', className: 'me.zhengjie.AppRun' + ' :', body: 'Welcome, no log output~' }],
|
data: [{ name: 'elAdmin-', timestamp: new Date(), threadName: 'system-prompt-message', level: 'INFO', className: 'me.zhengjie.AppRun' + ' :', body: 'Welcome, no log output' }],
|
||||||
// level
|
// level
|
||||||
INFO: '#0000ff', WARN: '#FFFF00', ERROR: '#FF0000', DEBUG: '#DEA000'
|
INFO: '#0000ff', WARN: '#FFFF00', ERROR: '#FF0000', DEBUG: '#DEA000'
|
||||||
}
|
}
|
||||||
@@ -129,5 +129,29 @@ export default {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
button,input,textarea{outline:0}.container .buttons .closes,.container .buttons .maximize,.container .buttons .minimize{padding:0;margin:0;margin-right:6px;width:12px;height:12px;border:1px solid transparent;border-radius:6px}.container{width:100%;margin:5px}.container .console{font-family:consolas;overflow-y:scroll;background:#494949;color:#f7f7f7;padding:10px;font-size:14px} .lock {position: fixed;right: 45px;bottom: 6.8%;z-index: 100000}
|
button,input,textarea {
|
||||||
|
outline: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
.container {
|
||||||
|
width: 100%;
|
||||||
|
margin: 5px
|
||||||
|
}
|
||||||
|
|
||||||
|
.container .console {
|
||||||
|
font-family: "Interstate", "Hind", -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol;
|
||||||
|
overflow-y: scroll;
|
||||||
|
background: #494949;
|
||||||
|
color: #f7f7f7;
|
||||||
|
padding: 10px;
|
||||||
|
font-size: 14px;
|
||||||
|
border-radius: 3px 1px 3px 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.lock {
|
||||||
|
position: fixed;
|
||||||
|
right: 45px;
|
||||||
|
bottom: 6.8%;
|
||||||
|
z-index: 100000
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="app-container">
|
<div class="app-container">
|
||||||
<eHeader :roles="roles" :menus="menus" :query="query"/>
|
<eHeader :menus="menus" :query="query"/>
|
||||||
<!--表格渲染-->
|
<!--表格渲染-->
|
||||||
<tree-table v-loading="loading" :data="data" :expand-all="true" :columns="columns" border size="small">
|
<tree-table v-loading="loading" :data="data" :expand-all="true" :columns="columns" border size="small">
|
||||||
<el-table-column prop="icon" label="图标" align="center" width="80px">
|
<el-table-column prop="icon" label="图标" align="center" width="80px">
|
||||||
@@ -28,7 +28,7 @@
|
|||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="操作" width="150px" align="center">
|
<el-table-column label="操作" width="150px" align="center">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<edit v-if="checkPermission(['ADMIN','MENU_ALL','MENU_EDIT'])" :roles="roles" :menus="menus" :data="scope.row" :sup_this="sup_this"/>
|
<edit v-if="checkPermission(['ADMIN','MENU_ALL','MENU_EDIT'])" :menus="menus" :data="scope.row" :sup_this="sup_this"/>
|
||||||
<el-popover
|
<el-popover
|
||||||
v-if="checkPermission(['ADMIN','MENU_ALL','MENU_DELETE'])"
|
v-if="checkPermission(['ADMIN','MENU_ALL','MENU_DELETE'])"
|
||||||
:ref="scope.row.id"
|
:ref="scope.row.id"
|
||||||
@@ -49,7 +49,6 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
import checkPermission from '@/utils/permission' // 权限判断函数
|
import checkPermission from '@/utils/permission' // 权限判断函数
|
||||||
import { getRoleTree } from '@/api/role'
|
|
||||||
import treeTable from '@/components/TreeTable'
|
import treeTable from '@/components/TreeTable'
|
||||||
import initData from '@/mixins/initData'
|
import initData from '@/mixins/initData'
|
||||||
import { del, getMenusTree } from '@/api/menu'
|
import { del, getMenusTree } from '@/api/menu'
|
||||||
@@ -67,11 +66,10 @@ export default {
|
|||||||
value: 'name'
|
value: 'name'
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
delLoading: false, sup_this: this, menus: [], roles: []
|
delLoading: false, sup_this: this, menus: []
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
this.getRoles()
|
|
||||||
this.getMenus()
|
this.getMenus()
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => {
|
||||||
this.init()
|
this.init()
|
||||||
@@ -113,12 +111,6 @@ export default {
|
|||||||
menu.children = res
|
menu.children = res
|
||||||
this.menus.push(menu)
|
this.menus.push(menu)
|
||||||
})
|
})
|
||||||
},
|
|
||||||
getRoles() {
|
|
||||||
this.roles = []
|
|
||||||
getRoleTree().then(res => {
|
|
||||||
this.roles = res
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<el-button size="mini" type="success" @click="to">编辑</el-button>
|
<el-button size="mini" type="success" @click="to">编辑</el-button>
|
||||||
<eForm ref="form" :roles="roles" :menus="menus" :sup_this="sup_this" :is-add="false"/>
|
<eForm ref="form" :menus="menus" :sup_this="sup_this" :is-add="false"/>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
@@ -20,20 +20,12 @@ export default {
|
|||||||
menus: {
|
menus: {
|
||||||
type: Array,
|
type: Array,
|
||||||
required: true
|
required: true
|
||||||
},
|
|
||||||
roles: {
|
|
||||||
type: Array,
|
|
||||||
required: true
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
to() {
|
to() {
|
||||||
const _this = this.$refs.form
|
const _this = this.$refs.form
|
||||||
_this.roleIds = []
|
|
||||||
_this.form = { id: this.data.id, component: this.data.component, name: this.data.name, sort: this.data.sort, pid: this.data.pid, path: this.data.path, iframe: this.data.iframe.toString(), roles: [], icon: this.data.icon }
|
_this.form = { id: this.data.id, component: this.data.component, name: this.data.name, sort: this.data.sort, pid: this.data.pid, path: this.data.path, iframe: this.data.iframe.toString(), roles: [], icon: this.data.icon }
|
||||||
this.data.roles.forEach(function(data, index) {
|
|
||||||
_this.roleIds.push(data.id)
|
|
||||||
})
|
|
||||||
_this.dialog = true
|
_this.dialog = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,9 +33,6 @@
|
|||||||
<el-form-item label="上级类目">
|
<el-form-item label="上级类目">
|
||||||
<treeselect v-model="form.pid" :options="menus" style="width: 460px;" placeholder="选择上级类目" />
|
<treeselect v-model="form.pid" :options="menus" style="width: 460px;" placeholder="选择上级类目" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item style="margin-top: -10px;margin-bottom: 0px;" label="选择角色">
|
|
||||||
<treeselect v-model="roleIds" :multiple="true" :options="roles" style="width: 460px;" placeholder="请选择角色" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
</el-form>
|
||||||
<div slot="footer" class="dialog-footer">
|
<div slot="footer" class="dialog-footer">
|
||||||
<el-button type="text" @click="cancel">取消</el-button>
|
<el-button type="text" @click="cancel">取消</el-button>
|
||||||
@@ -56,10 +53,6 @@ export default {
|
|||||||
type: Array,
|
type: Array,
|
||||||
required: true
|
required: true
|
||||||
},
|
},
|
||||||
roles: {
|
|
||||||
type: Array,
|
|
||||||
required: true
|
|
||||||
},
|
|
||||||
isAdd: {
|
isAdd: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
required: true
|
required: true
|
||||||
@@ -72,7 +65,7 @@ export default {
|
|||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
loading: false, dialog: false,
|
loading: false, dialog: false,
|
||||||
form: { name: '', sort: 999, path: '', component: '', iframe: 'false', roles: [], pid: 0, icon: '' }, roleIds: [],
|
form: { name: '', sort: 999, path: '', component: '', iframe: 'false', roles: [], pid: 0, icon: '' },
|
||||||
rules: {
|
rules: {
|
||||||
name: [
|
name: [
|
||||||
{ required: true, message: '请输入名称', trigger: 'blur' }
|
{ required: true, message: '请输入名称', trigger: 'blur' }
|
||||||
@@ -94,12 +87,6 @@ export default {
|
|||||||
this.$refs['form'].validate((valid) => {
|
this.$refs['form'].validate((valid) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
this.loading = true
|
this.loading = true
|
||||||
this.form.roles = []
|
|
||||||
const _this = this
|
|
||||||
this.roleIds.forEach(function(data, index) {
|
|
||||||
const role = { id: data }
|
|
||||||
_this.form.roles.push(role)
|
|
||||||
})
|
|
||||||
if (this.isAdd) {
|
if (this.isAdd) {
|
||||||
this.doAdd()
|
this.doAdd()
|
||||||
} else this.doEdit()
|
} else this.doEdit()
|
||||||
@@ -144,7 +131,6 @@ export default {
|
|||||||
this.dialog = false
|
this.dialog = false
|
||||||
this.$refs['form'].resetFields()
|
this.$refs['form'].resetFields()
|
||||||
this.form = { name: '', sort: 999, path: '', component: '', iframe: 'false', roles: [], pid: 0, icon: '' }
|
this.form = { name: '', sort: 999, path: '', component: '', iframe: 'false', roles: [], pid: 0, icon: '' }
|
||||||
this.roleIds = []
|
|
||||||
},
|
},
|
||||||
selected(name) {
|
selected(name) {
|
||||||
this.form.icon = name
|
this.form.icon = name
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
type="primary"
|
type="primary"
|
||||||
icon="el-icon-plus"
|
icon="el-icon-plus"
|
||||||
@click="$refs.form.dialog = true">新增</el-button>
|
@click="$refs.form.dialog = true">新增</el-button>
|
||||||
<eForm ref="form" :roles="roles" :menus="menus" :is-add="true"/>
|
<eForm ref="form" :menus="menus" :is-add="true"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@@ -30,10 +30,6 @@ export default {
|
|||||||
menus: {
|
menus: {
|
||||||
type: Array,
|
type: Array,
|
||||||
required: true
|
required: true
|
||||||
},
|
|
||||||
roles: {
|
|
||||||
type: Array,
|
|
||||||
required: true
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
@@ -44,7 +40,6 @@ export default {
|
|||||||
methods: {
|
methods: {
|
||||||
checkPermission,
|
checkPermission,
|
||||||
toQuery() {
|
toQuery() {
|
||||||
console.log(this.query)
|
|
||||||
this.$parent.page = 0
|
this.$parent.page = 0
|
||||||
this.$parent.init()
|
this.$parent.init()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<el-button size="mini" type="text" @click="$refs[scope.row.id].doClose()">取消</el-button>
|
<el-button size="mini" type="text" @click="$refs[scope.row.id].doClose()">取消</el-button>
|
||||||
<el-button :loading="delLoading" type="primary" size="mini" @click="subDelete(scope.row.id)">确定</el-button>
|
<el-button :loading="delLoading" type="primary" size="mini" @click="subDelete(scope.row.id)">确定</el-button>
|
||||||
</div>
|
</div>
|
||||||
<el-button slot="reference" :disabled="scope.row.id === 1" type="danger" size="mini">删除</el-button>
|
<el-button slot="reference" type="danger" size="mini">删除</el-button>
|
||||||
</el-popover>
|
</el-popover>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<el-button :disabled="data.id === 1" size="mini" type="success" @click="to">编辑</el-button>
|
<el-button size="mini" type="success" @click="to">编辑</el-button>
|
||||||
<eForm ref="form" :permissions="permissions" :sup_this="sup_this" :is-add="false"/>
|
<eForm ref="form" :permissions="permissions" :sup_this="sup_this" :is-add="false"/>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -40,7 +40,6 @@ export default {
|
|||||||
methods: {
|
methods: {
|
||||||
checkPermission,
|
checkPermission,
|
||||||
toQuery() {
|
toQuery() {
|
||||||
console.log(this.query)
|
|
||||||
this.$parent.page = 0
|
this.$parent.page = 0
|
||||||
this.$parent.init()
|
this.$parent.init()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="app-container">
|
<div class="app-container">
|
||||||
<eHeader :permissions="permissions" :query="query"/>
|
<eHeader :query="query"/>
|
||||||
<!--表格渲染-->
|
<!--表格渲染-->
|
||||||
<el-table v-loading="loading" :data="data" size="small" border style="width: 100%;">
|
<div :style="'height: auto;max-height:' + height + 'overflow-y: auto;'">
|
||||||
|
<el-table v-loading="loading" :data="data" highlight-current-row size="small" border style="width: 100%;" @current-change="handleCurrentChange">
|
||||||
<el-table-column prop="name" label="名称"/>
|
<el-table-column prop="name" label="名称"/>
|
||||||
<el-table-column prop="remark" label="描述"/>
|
<el-table-column prop="remark" label="描述"/>
|
||||||
<el-table-column prop="createTime" label="创建日期">
|
<el-table-column prop="createTime" label="创建日期">
|
||||||
@@ -12,7 +13,7 @@
|
|||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="操作" width="150px" align="center">
|
<el-table-column label="操作" width="150px" align="center">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<edit v-if="checkPermission(['ADMIN','ROLES_ALL','ROLES_EDIT'])" :permissions="permissions" :data="scope.row" :sup_this="sup_this"/>
|
<edit v-if="checkPermission(['ADMIN','ROLES_ALL','ROLES_EDIT'])" :data="scope.row" :sup_this="sup_this"/>
|
||||||
<el-popover
|
<el-popover
|
||||||
v-if="checkPermission(['ADMIN','ROLES_ALL','ROLES_DELETE'])"
|
v-if="checkPermission(['ADMIN','ROLES_ALL','ROLES_DELETE'])"
|
||||||
:ref="scope.row.id"
|
:ref="scope.row.id"
|
||||||
@@ -23,11 +24,12 @@
|
|||||||
<el-button size="mini" type="text" @click="$refs[scope.row.id].doClose()">取消</el-button>
|
<el-button size="mini" type="text" @click="$refs[scope.row.id].doClose()">取消</el-button>
|
||||||
<el-button :loading="delLoading" type="primary" size="mini" @click="subDelete(scope.row.id)">确定</el-button>
|
<el-button :loading="delLoading" type="primary" size="mini" @click="subDelete(scope.row.id)">确定</el-button>
|
||||||
</div>
|
</div>
|
||||||
<el-button slot="reference" :disabled="scope.row.id === 1" type="danger" size="mini">删除</el-button>
|
<el-button slot="reference" type="danger" size="mini">删除</el-button>
|
||||||
</el-popover>
|
</el-popover>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
|
</div>
|
||||||
<!--分页组件-->
|
<!--分页组件-->
|
||||||
<el-pagination
|
<el-pagination
|
||||||
:total="total"
|
:total="total"
|
||||||
@@ -35,6 +37,59 @@
|
|||||||
layout="total, prev, pager, next, sizes"
|
layout="total, prev, pager, next, sizes"
|
||||||
@size-change="sizeChange"
|
@size-change="sizeChange"
|
||||||
@current-change="pageChange"/>
|
@current-change="pageChange"/>
|
||||||
|
<!--这里是授权模块代码-->
|
||||||
|
<el-row :gutter="20" style="margin-top: 5px;">
|
||||||
|
<!--权限分配-->
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-card class="box-card" shadow="never">
|
||||||
|
<div slot="header" class="clearfix">
|
||||||
|
<span class="role-span">权限分配</span>
|
||||||
|
<el-button
|
||||||
|
v-if="showButton && checkPermission(['ADMIN','ROLES_ALL','ROLES_EDIT'])"
|
||||||
|
:loading="permissionLoading"
|
||||||
|
icon="el-icon-check"
|
||||||
|
size="mini"
|
||||||
|
style="float: right; padding: 4px 10px"
|
||||||
|
type="info"
|
||||||
|
@click="savePermission">保存</el-button>
|
||||||
|
</div>
|
||||||
|
<div :style="'min-height: 200px;max-height:' + height + 'overflow-y: auto;'">
|
||||||
|
<el-tree
|
||||||
|
ref="permission"
|
||||||
|
:data="permissions"
|
||||||
|
:default-checked-keys="permissionIds"
|
||||||
|
:props="defaultProps"
|
||||||
|
show-checkbox
|
||||||
|
node-key="id"/>
|
||||||
|
</div>
|
||||||
|
</el-card>
|
||||||
|
</el-col>
|
||||||
|
<!--菜单分配-->
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-card class="box-card" shadow="never">
|
||||||
|
<div slot="header" class="clearfix">
|
||||||
|
<span class="role-span">菜单分配</span>
|
||||||
|
<el-button
|
||||||
|
v-if="showButton && checkPermission(['ADMIN','ROLES_ALL','ROLES_EDIT'])"
|
||||||
|
:loading="menuLoading"
|
||||||
|
icon="el-icon-check"
|
||||||
|
size="mini"
|
||||||
|
style="float: right; padding: 4px 10px"
|
||||||
|
type="info"
|
||||||
|
@click="saveMenu">保存</el-button>
|
||||||
|
</div>
|
||||||
|
<div :style="'min-height: 207px;max-height:' + height + 'overflow-y: auto;'">
|
||||||
|
<el-tree
|
||||||
|
ref="menu"
|
||||||
|
:data="menus"
|
||||||
|
:default-checked-keys="menuIds"
|
||||||
|
:props="defaultProps"
|
||||||
|
show-checkbox
|
||||||
|
node-key="id"/>
|
||||||
|
</div>
|
||||||
|
</el-card>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -43,19 +98,28 @@ import checkPermission from '@/utils/permission'
|
|||||||
import initData from '@/mixins/initData'
|
import initData from '@/mixins/initData'
|
||||||
import { del } from '@/api/role'
|
import { del } from '@/api/role'
|
||||||
import { getPermissionTree } from '@/api/permission'
|
import { getPermissionTree } from '@/api/permission'
|
||||||
|
import { getMenusTree } from '@/api/menu'
|
||||||
import { parseTime } from '@/utils/index'
|
import { parseTime } from '@/utils/index'
|
||||||
import eHeader from './module/header'
|
import eHeader from './module/header'
|
||||||
import edit from './module/edit'
|
import edit from './module/edit'
|
||||||
|
import { editPermission, editMenu, get } from '@/api/role'
|
||||||
export default {
|
export default {
|
||||||
components: { eHeader, edit },
|
components: { eHeader, edit },
|
||||||
mixins: [initData],
|
mixins: [initData],
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
delLoading: false, sup_this: this, permissions: []
|
defaultProps: {
|
||||||
|
children: 'children',
|
||||||
|
label: 'label'
|
||||||
|
},
|
||||||
|
currentId: 0, permissionLoading: false, menuLoading: false, showButton: false,
|
||||||
|
delLoading: false, sup_this: this, permissions: [], permissionIds: [], menus: [], menuIds: [],
|
||||||
|
height: document.documentElement.clientHeight - 94.5 - 260 + 'px;'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
this.getPermissions()
|
this.getPermissions()
|
||||||
|
this.getMenus()
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => {
|
||||||
this.init()
|
this.init()
|
||||||
})
|
})
|
||||||
@@ -64,6 +128,9 @@ export default {
|
|||||||
parseTime,
|
parseTime,
|
||||||
checkPermission,
|
checkPermission,
|
||||||
beforeInit() {
|
beforeInit() {
|
||||||
|
this.$refs.permission.setCheckedKeys([])
|
||||||
|
this.$refs.menu.setCheckedKeys([])
|
||||||
|
this.showButton = false
|
||||||
this.url = 'api/roles'
|
this.url = 'api/roles'
|
||||||
const sort = 'id,desc'
|
const sort = 'id,desc'
|
||||||
const query = this.query
|
const query = this.query
|
||||||
@@ -93,11 +160,106 @@ export default {
|
|||||||
getPermissionTree().then(res => {
|
getPermissionTree().then(res => {
|
||||||
this.permissions = res
|
this.permissions = res
|
||||||
})
|
})
|
||||||
|
},
|
||||||
|
getMenus() {
|
||||||
|
getMenusTree().then(res => {
|
||||||
|
this.menus = res
|
||||||
|
})
|
||||||
|
},
|
||||||
|
handleCurrentChange(val) {
|
||||||
|
const _this = this
|
||||||
|
// 清空权限与菜单的选中
|
||||||
|
this.$refs.permission.setCheckedKeys([])
|
||||||
|
this.$refs.menu.setCheckedKeys([])
|
||||||
|
// 保存当前的角色id
|
||||||
|
this.currentId = val.id
|
||||||
|
// 点击后显示按钮
|
||||||
|
this.showButton = true
|
||||||
|
// 初始化
|
||||||
|
this.menuIds = []
|
||||||
|
this.permissionIds = []
|
||||||
|
// 菜单数据需要特殊处理
|
||||||
|
val.menus.forEach(function(data, index) {
|
||||||
|
let add = true
|
||||||
|
for (let i = 0; i < val.menus.length; i++) {
|
||||||
|
if (data.id === val.menus[i].pid) {
|
||||||
|
add = false
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (add) {
|
||||||
|
_this.menuIds.push(data.id)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
// 处理权限数据
|
||||||
|
val.permissions.forEach(function(data, index) {
|
||||||
|
_this.permissionIds.push(data.id)
|
||||||
|
})
|
||||||
|
},
|
||||||
|
savePermission() {
|
||||||
|
this.permissionLoading = true
|
||||||
|
const role = { id: this.currentId, permissions: [] }
|
||||||
|
this.$refs.permission.getCheckedKeys().forEach(function(data, index) {
|
||||||
|
const permission = { id: data }
|
||||||
|
role.permissions.push(permission)
|
||||||
|
})
|
||||||
|
editPermission(role).then(res => {
|
||||||
|
this.$notify({
|
||||||
|
title: '保存成功',
|
||||||
|
type: 'success',
|
||||||
|
duration: 2500
|
||||||
|
})
|
||||||
|
this.permissionLoading = false
|
||||||
|
this.update()
|
||||||
|
}).catch(err => {
|
||||||
|
this.permissionLoading = false
|
||||||
|
console.log(err.response.data.message)
|
||||||
|
})
|
||||||
|
},
|
||||||
|
saveMenu() {
|
||||||
|
this.menuLoading = true
|
||||||
|
const role = { id: this.currentId, menus: [] }
|
||||||
|
// 得到半选的父节点数据,保存起来
|
||||||
|
this.$refs.menu.getHalfCheckedNodes().forEach(function(data, index) {
|
||||||
|
const permission = { id: data.id }
|
||||||
|
role.menus.push(permission)
|
||||||
|
})
|
||||||
|
// 得到已选中的 key 值
|
||||||
|
this.$refs.menu.getCheckedKeys().forEach(function(data, index) {
|
||||||
|
const permission = { id: data }
|
||||||
|
role.menus.push(permission)
|
||||||
|
})
|
||||||
|
editMenu(role).then(res => {
|
||||||
|
this.$notify({
|
||||||
|
title: '保存成功',
|
||||||
|
type: 'success',
|
||||||
|
duration: 2500
|
||||||
|
})
|
||||||
|
this.menuLoading = false
|
||||||
|
this.update()
|
||||||
|
}).catch(err => {
|
||||||
|
this.menuLoading = false
|
||||||
|
console.log(err.response.data.message)
|
||||||
|
})
|
||||||
|
},
|
||||||
|
update() {
|
||||||
|
// 无刷新更新 表格数据
|
||||||
|
get(this.currentId).then(res => {
|
||||||
|
for (let i = 0; i < this.data.length; i++) {
|
||||||
|
if (res.id === this.data[i].id) {
|
||||||
|
this.data[i] = res
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
.role-span {
|
||||||
|
font-weight: bold;color: #303133;
|
||||||
|
font-size: 15px;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<el-button :disabled="data.id === 1" size="mini" type="success" @click="to">编辑</el-button>
|
<el-button size="mini" type="success" @click="to">编辑</el-button>
|
||||||
<eForm ref="form" :permissions="permissions" :sup_this="sup_this" :is-add="false"/>
|
<eForm ref="form" :sup_this="sup_this" :is-add="false"/>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
@@ -16,20 +16,12 @@ export default {
|
|||||||
sup_this: {
|
sup_this: {
|
||||||
type: Object,
|
type: Object,
|
||||||
required: true
|
required: true
|
||||||
},
|
|
||||||
permissions: {
|
|
||||||
type: Array,
|
|
||||||
required: true
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
to() {
|
to() {
|
||||||
const _this = this.$refs.form
|
const _this = this.$refs.form
|
||||||
_this.permissionIds = []
|
|
||||||
_this.form = { id: this.data.id, name: this.data.name, remark: this.data.remark, permissions: [] }
|
_this.form = { id: this.data.id, name: this.data.name, remark: this.data.remark, permissions: [] }
|
||||||
this.data.permissions.forEach(function(data, index) {
|
|
||||||
_this.permissionIds.push(data.id)
|
|
||||||
})
|
|
||||||
_this.dialog = true
|
_this.dialog = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,9 +4,6 @@
|
|||||||
<el-form-item label="名称" prop="name">
|
<el-form-item label="名称" prop="name">
|
||||||
<el-input v-model="form.name" style="width: 370px;"/>
|
<el-input v-model="form.name" style="width: 370px;"/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="权限">
|
|
||||||
<treeselect v-model="permissionIds" :multiple="true" :options="permissions" style="width: 370px;" placeholder="请选择权限" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item style="margin-top: -10px;" label="描述">
|
<el-form-item style="margin-top: -10px;" label="描述">
|
||||||
<el-input v-model="form.remark" style="width: 370px;" rows="5" type="textarea"/>
|
<el-input v-model="form.remark" style="width: 370px;" rows="5" type="textarea"/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@@ -20,15 +17,8 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { add, edit } from '@/api/role'
|
import { add, edit } from '@/api/role'
|
||||||
import Treeselect from '@riophae/vue-treeselect'
|
|
||||||
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
|
|
||||||
export default {
|
export default {
|
||||||
components: { Treeselect },
|
|
||||||
props: {
|
props: {
|
||||||
permissions: {
|
|
||||||
type: Array,
|
|
||||||
required: true
|
|
||||||
},
|
|
||||||
isAdd: {
|
isAdd: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
required: true
|
required: true
|
||||||
@@ -41,7 +31,7 @@ export default {
|
|||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
loading: false, dialog: false,
|
loading: false, dialog: false,
|
||||||
form: { name: '', permissions: [], remark: '' }, permissionIds: [],
|
form: { name: '', permissions: [], remark: '' },
|
||||||
rules: {
|
rules: {
|
||||||
name: [
|
name: [
|
||||||
{ required: true, message: '请输入名称', trigger: 'blur' }
|
{ required: true, message: '请输入名称', trigger: 'blur' }
|
||||||
@@ -57,12 +47,6 @@ export default {
|
|||||||
this.$refs['form'].validate((valid) => {
|
this.$refs['form'].validate((valid) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
this.loading = true
|
this.loading = true
|
||||||
this.form.permissions = []
|
|
||||||
const _this = this
|
|
||||||
this.permissionIds.forEach(function(data, index) {
|
|
||||||
const permission = { id: data }
|
|
||||||
_this.form.permissions.push(permission)
|
|
||||||
})
|
|
||||||
if (this.isAdd) {
|
if (this.isAdd) {
|
||||||
this.doAdd()
|
this.doAdd()
|
||||||
} else this.doEdit()
|
} else this.doEdit()
|
||||||
@@ -104,7 +88,6 @@ export default {
|
|||||||
resetForm() {
|
resetForm() {
|
||||||
this.dialog = false
|
this.dialog = false
|
||||||
this.$refs['form'].resetFields()
|
this.$refs['form'].resetFields()
|
||||||
this.permissionIds = []
|
|
||||||
this.form = { name: '', permissions: [], remark: '' }
|
this.form = { name: '', permissions: [], remark: '' }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
type="primary"
|
type="primary"
|
||||||
icon="el-icon-plus"
|
icon="el-icon-plus"
|
||||||
@click="$refs.form.dialog = true">新增</el-button>
|
@click="$refs.form.dialog = true">新增</el-button>
|
||||||
<eForm ref="form" :permissions="permissions" :is-add="true"/>
|
<eForm ref="form" :is-add="true"/>
|
||||||
</div>
|
</div>
|
||||||
<!-- 导出 -->
|
<!-- 导出 -->
|
||||||
<el-button v-if="checkPermission(['ADMIN'])" :loading="downloadLoading" size="mini" class="filter-item" type="primary" icon="el-icon-download" @click="download">导出</el-button>
|
<el-button v-if="checkPermission(['ADMIN'])" :loading="downloadLoading" size="mini" class="filter-item" type="primary" icon="el-icon-download" @click="download">导出</el-button>
|
||||||
@@ -30,10 +30,6 @@ export default {
|
|||||||
query: {
|
query: {
|
||||||
type: Object,
|
type: Object,
|
||||||
required: true
|
required: true
|
||||||
},
|
|
||||||
permissions: {
|
|
||||||
type: Array,
|
|
||||||
required: true
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
|
|||||||
@@ -11,11 +11,11 @@
|
|||||||
<!--表格渲染-->
|
<!--表格渲染-->
|
||||||
<el-table v-loading="loading" :data="data" size="small" border style="width: 100%;margin-top: -10px;">
|
<el-table v-loading="loading" :data="data" size="small" border style="width: 100%;margin-top: -10px;">
|
||||||
<el-table-column :show-overflow-tooltip="true" prop="jobName" width="90px" label="任务名称"/>
|
<el-table-column :show-overflow-tooltip="true" prop="jobName" width="90px" label="任务名称"/>
|
||||||
<el-table-column :show-overflow-tooltip="true" prop="beanName" width="90px" label="Bean名称"/>
|
<el-table-column :show-overflow-tooltip="true" prop="beanName" width="110px" label="Bean名称"/>
|
||||||
<el-table-column :show-overflow-tooltip="true" prop="methodName" width="80px" label="执行方法"/>
|
<el-table-column :show-overflow-tooltip="true" prop="methodName" width="110px" label="执行方法"/>
|
||||||
<el-table-column :show-overflow-tooltip="true" prop="params" width="80px" label="参数"/>
|
<el-table-column :show-overflow-tooltip="true" prop="params" width="120px" label="参数"/>
|
||||||
<el-table-column :show-overflow-tooltip="true" prop="cronExpression" width="100px" label="cron表达式"/>
|
<el-table-column :show-overflow-tooltip="true" prop="cronExpression" width="120px" label="cron表达式"/>
|
||||||
<el-table-column prop="createTime" label="异常详情" width="90px">
|
<el-table-column prop="createTime" label="异常详情" width="100px">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-button v-show="scope.row.exceptionDetail" size="mini" type="text" @click="info(scope.row.exceptionDetail)">查看详情</el-button>
|
<el-button v-show="scope.row.exceptionDetail" size="mini" type="text" @click="info(scope.row.exceptionDetail)">查看详情</el-button>
|
||||||
</template>
|
</template>
|
||||||
@@ -26,7 +26,6 @@
|
|||||||
<el-tag :type="scope.row.isSuccess ? 'success' : 'danger'">{{ scope.row.isSuccess ? '成功' : '失败' }}</el-tag>
|
<el-tag :type="scope.row.isSuccess ? 'success' : 'danger'">{{ scope.row.isSuccess ? '成功' : '失败' }}</el-tag>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="remark" width="120px" label="描述"/>
|
|
||||||
<el-table-column :show-overflow-tooltip="true" prop="createTime" label="创建日期">
|
<el-table-column :show-overflow-tooltip="true" prop="createTime" label="创建日期">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<span>{{ parseTime(scope.row.createTime) }}</span>
|
<span>{{ parseTime(scope.row.createTime) }}</span>
|
||||||
|
|||||||
@@ -33,7 +33,7 @@
|
|||||||
<el-button size="mini" type="text" @click="$refs[scope.row.id].doClose()">取消</el-button>
|
<el-button size="mini" type="text" @click="$refs[scope.row.id].doClose()">取消</el-button>
|
||||||
<el-button :loading="delLoading" type="primary" size="mini" @click="subDelete(scope.row.id)">确定</el-button>
|
<el-button :loading="delLoading" type="primary" size="mini" @click="subDelete(scope.row.id)">确定</el-button>
|
||||||
</div>
|
</div>
|
||||||
<el-button slot="reference" :disabled="scope.row.id === 1" type="danger" size="mini">删除</el-button>
|
<el-button slot="reference" type="danger" size="mini">删除</el-button>
|
||||||
</el-popover>
|
</el-popover>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<el-button :disabled="data.id === 1" size="mini" type="success" @click="to">编辑</el-button>
|
<el-button size="mini" type="success" @click="to">编辑</el-button>
|
||||||
<eForm ref="form" :roles="roles" :sup_this="sup_this" :is-add="false"/>
|
<eForm ref="form" :roles="roles" :sup_this="sup_this" :is-add="false"/>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
Reference in New Issue
Block a user