parent
7b7d08db01
commit
5ad248e418
12 changed files with 770 additions and 393 deletions
@ -1,48 +1,49 @@ |
|||||||
{ |
{ |
||||||
"name": "saber-admin", |
"name": "saber-admin", |
||||||
"version": "1.0.0", |
"version": "1.0.0", |
||||||
"private": true, |
"private": true, |
||||||
"scripts": { |
"scripts": { |
||||||
"serve": "vue-cli-service serve", |
"serve": "vue-cli-service serve", |
||||||
"build": "vue-cli-service build", |
"build": "vue-cli-service build", |
||||||
"lint": "vue-cli-service lint", |
"lint": "vue-cli-service lint", |
||||||
"analyz": "npm_config_report=true npm run build", |
"analyz": "npm_config_report=true npm run build", |
||||||
"test:unit": "vue-cli-service test:unit", |
"test:unit": "vue-cli-service test:unit", |
||||||
"test:e2e": "vue-cli-service test:e2e" |
"test:e2e": "vue-cli-service test:e2e" |
||||||
}, |
}, |
||||||
"dependencies": { |
"dependencies": { |
||||||
"axios": "^0.18.0", |
"axios": "^0.18.0", |
||||||
"babel-polyfill": "^6.26.0", |
"babel-polyfill": "^6.26.0", |
||||||
"classlist-polyfill": "^1.2.0", |
"classlist-polyfill": "^1.2.0", |
||||||
"element-ui": "^2.4.5", |
"element-ui": "^2.4.5", |
||||||
"js-cookie": "^2.2.0", |
"js-cookie": "^2.2.0", |
||||||
"mockjs": "^1.0.1-beta3", |
"mockjs": "^1.0.1-beta3", |
||||||
"nprogress": "^0.2.0", |
"nprogress": "^0.2.0", |
||||||
"script-loader": "^0.7.2", |
"script-loader": "^0.7.2", |
||||||
"vue": "^2.5.16", |
"vue": "^2.5.16", |
||||||
"vue-axios": "^2.1.2", |
"vue-axios": "^2.1.2", |
||||||
"vue-i18n": "^8.7.0", |
"vue-i18n": "^8.7.0", |
||||||
"vue-router": "^3.0.1", |
"vue-router": "^3.0.1", |
||||||
"vuex": "^3.0.1" |
"vuex": "^3.0.1", |
||||||
}, |
"js-base64": "^2.5.1" |
||||||
"devDependencies": { |
}, |
||||||
"@vue/cli-plugin-babel": "^3.1.1", |
"devDependencies": { |
||||||
"@vue/cli-plugin-eslint": "^3.1.5", |
"@vue/cli-plugin-babel": "^3.1.1", |
||||||
"@vue/cli-service": "^3.1.4", |
"@vue/cli-plugin-eslint": "^3.1.5", |
||||||
"chai": "^4.1.2", |
"@vue/cli-service": "^3.1.4", |
||||||
"node-sass": "^4.9.0", |
"chai": "^4.1.2", |
||||||
"sass-loader": "^7.0.1", |
"node-sass": "^4.9.0", |
||||||
"vue-template-compiler": "^2.5.17", |
"sass-loader": "^7.0.1", |
||||||
"webpack-bundle-analyzer": "^3.0.3" |
"vue-template-compiler": "^2.5.17", |
||||||
}, |
"webpack-bundle-analyzer": "^3.0.3" |
||||||
"lint-staged": { |
}, |
||||||
"*.js": [ |
"lint-staged": { |
||||||
"vue-cli-service lint", |
"*.js": [ |
||||||
"git add" |
"vue-cli-service lint", |
||||||
], |
"git add" |
||||||
"*.vue": [ |
], |
||||||
"vue-cli-service lint", |
"*.vue": [ |
||||||
"git add" |
"vue-cli-service lint", |
||||||
] |
"git add" |
||||||
} |
] |
||||||
|
} |
||||||
} |
} |
||||||
|
|||||||
@ -0,0 +1,50 @@ |
|||||||
|
import request from '@/router/axios'; |
||||||
|
|
||||||
|
export const getList = (current, size, params) => { |
||||||
|
return request({ |
||||||
|
url: '/api/blade-system/client/list', |
||||||
|
method: 'get', |
||||||
|
params: { |
||||||
|
...params, |
||||||
|
current, |
||||||
|
size, |
||||||
|
} |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
export const getDetail = (id) => { |
||||||
|
return request({ |
||||||
|
url: '/api/blade-system/client/detail', |
||||||
|
method: 'get', |
||||||
|
params: { |
||||||
|
id |
||||||
|
} |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
export const remove = (ids) => { |
||||||
|
return request({ |
||||||
|
url: '/api/blade-system/client/remove', |
||||||
|
method: 'post', |
||||||
|
params: { |
||||||
|
ids, |
||||||
|
} |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
export const add = (row) => { |
||||||
|
return request({ |
||||||
|
url: '/api/blade-system/client/submit', |
||||||
|
method: 'post', |
||||||
|
data: row |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
export const update = (row) => { |
||||||
|
return request({ |
||||||
|
url: '/api/blade-system/client/submit', |
||||||
|
method: 'post', |
||||||
|
data: row |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
@ -1,196 +1,207 @@ |
|||||||
import { setToken, removeToken } from '@/util/auth' |
import {setToken, setRefreshToken, removeToken} from '@/util/auth' |
||||||
import { setStore, getStore } from '@/util/store' |
import {setStore, getStore} from '@/util/store' |
||||||
import { isURL, validatenull } from '@/util/validate' |
import {isURL, validatenull} from '@/util/validate' |
||||||
import { deepClone } from '@/util/util' |
import {deepClone} from '@/util/util' |
||||||
import webiste from '@/config/website' |
import webiste from '@/config/website' |
||||||
import { loginByUsername, getUserInfo, getMenu, getTopMenu, logout, refeshToken, getButtons } from '@/api/user' |
import {loginByUsername, getUserInfo, getMenu, getTopMenu, logout, refeshToken, getButtons} from '@/api/user' |
||||||
|
|
||||||
|
|
||||||
function addPath(ele, first) { |
function addPath(ele, first) { |
||||||
const menu = webiste.menu; |
const menu = webiste.menu; |
||||||
const propsConfig = menu.props; |
const propsConfig = menu.props; |
||||||
const propsDefault = { |
const propsDefault = { |
||||||
label: propsConfig.label || 'name', |
label: propsConfig.label || 'name', |
||||||
path: propsConfig.path || 'path', |
path: propsConfig.path || 'path', |
||||||
icon: propsConfig.icon || 'icon', |
icon: propsConfig.icon || 'icon', |
||||||
children: propsConfig.children || 'children' |
children: propsConfig.children || 'children' |
||||||
} |
} |
||||||
const icon = ele[propsDefault.icon]; |
const icon = ele[propsDefault.icon]; |
||||||
ele[propsDefault.icon] = validatenull(icon) ? menu.iconDefault : icon; |
ele[propsDefault.icon] = validatenull(icon) ? menu.iconDefault : icon; |
||||||
const isChild = ele[propsDefault.children] && ele[propsDefault.children].length !== 0; |
const isChild = ele[propsDefault.children] && ele[propsDefault.children].length !== 0; |
||||||
if (!isChild) ele[propsDefault.children] = []; |
if (!isChild) ele[propsDefault.children] = []; |
||||||
if (!isChild && first && !isURL(ele[propsDefault.path])) { |
if (!isChild && first && !isURL(ele[propsDefault.path])) { |
||||||
ele[propsDefault.path] = ele[propsDefault.path] + '/index' |
ele[propsDefault.path] = ele[propsDefault.path] + '/index' |
||||||
} else { |
} else { |
||||||
ele[propsDefault.children].forEach(child => { |
ele[propsDefault.children].forEach(child => { |
||||||
addPath(child); |
addPath(child); |
||||||
}) |
}) |
||||||
} |
} |
||||||
|
|
||||||
} |
} |
||||||
|
|
||||||
const user = { |
const user = { |
||||||
state: { |
state: { |
||||||
userInfo: getStore({ name: 'userInfo' }) || [], |
userInfo: getStore({name: 'userInfo'}) || [], |
||||||
permission: getStore({ name: 'permission' }) || {}, |
permission: getStore({name: 'permission'}) || {}, |
||||||
roles: [], |
roles: [], |
||||||
menu: getStore({ name: 'menu' }) || [], |
menu: getStore({name: 'menu'}) || [], |
||||||
menuAll: [], |
menuAll: [], |
||||||
token: getStore({ name: 'token' }) || '', |
token: getStore({name: 'token'}) || '', |
||||||
|
refreshToken: getStore({name: 'refreshToken'}) || '', |
||||||
|
}, |
||||||
|
actions: { |
||||||
|
//根据用户名登录
|
||||||
|
LoginByUsername({commit}, userInfo) { |
||||||
|
return new Promise((resolve) => { |
||||||
|
loginByUsername(userInfo.tenantCode, userInfo.username, userInfo.password, userInfo.type).then(res => { |
||||||
|
const data = res.data; |
||||||
|
commit('SET_TOKEN', data.access_token); |
||||||
|
commit('SET_REFRESH_TOKEN', data.refresh_token); |
||||||
|
commit('SET_USERIFNO', data); |
||||||
|
commit('DEL_ALL_TAG'); |
||||||
|
commit('CLEAR_LOCK'); |
||||||
|
resolve(); |
||||||
|
}) |
||||||
|
}) |
||||||
|
}, |
||||||
|
GetButtons({commit}) { |
||||||
|
return new Promise((resolve) => { |
||||||
|
getButtons().then(res => { |
||||||
|
const data = res.data.data; |
||||||
|
commit('SET_PERMISSION', data); |
||||||
|
resolve(); |
||||||
|
}) |
||||||
|
}) |
||||||
|
}, |
||||||
|
//根据手机号登录
|
||||||
|
LoginByPhone({commit}, userInfo) { |
||||||
|
return new Promise((resolve) => { |
||||||
|
loginByUsername(userInfo.phone, userInfo.code).then(res => { |
||||||
|
const data = res.data.data; |
||||||
|
commit('SET_TOKEN', data); |
||||||
|
commit('DEL_ALL_TAG'); |
||||||
|
commit('CLEAR_LOCK'); |
||||||
|
resolve(); |
||||||
|
}) |
||||||
|
}) |
||||||
|
}, |
||||||
|
GetUserInfo({commit}) { |
||||||
|
return new Promise((resolve, reject) => { |
||||||
|
getUserInfo().then((res) => { |
||||||
|
const data = res.data.data; |
||||||
|
commit('SET_ROLES', data.roles); |
||||||
|
resolve(data); |
||||||
|
}).catch(err => { |
||||||
|
reject(err); |
||||||
|
}) |
||||||
|
}) |
||||||
|
}, |
||||||
|
//刷新token
|
||||||
|
RefeshToken({state, commit}) { |
||||||
|
return new Promise((resolve, reject) => { |
||||||
|
refeshToken(state.refreshToken).then(res => { |
||||||
|
const data = res.data; |
||||||
|
commit('SET_TOKEN', data.access_token); |
||||||
|
commit('SET_REFRESH_TOKEN', data.refresh_token); |
||||||
|
resolve(); |
||||||
|
}).catch(error => { |
||||||
|
reject(error) |
||||||
|
}) |
||||||
|
}) |
||||||
|
}, |
||||||
|
// 登出
|
||||||
|
LogOut({commit}) { |
||||||
|
return new Promise((resolve, reject) => { |
||||||
|
logout().then(() => { |
||||||
|
commit('SET_TOKEN', '') |
||||||
|
commit('SET_MENU', []) |
||||||
|
commit('SET_ROLES', []) |
||||||
|
commit('DEL_ALL_TAG'); |
||||||
|
commit('CLEAR_LOCK'); |
||||||
|
removeToken() |
||||||
|
resolve() |
||||||
|
}).catch(error => { |
||||||
|
reject(error) |
||||||
|
}) |
||||||
|
}) |
||||||
|
}, |
||||||
|
//注销session
|
||||||
|
FedLogOut({commit}) { |
||||||
|
return new Promise(resolve => { |
||||||
|
commit('SET_TOKEN', '') |
||||||
|
commit('SET_MENU', []) |
||||||
|
commit('SET_ROLES', []) |
||||||
|
commit('DEL_ALL_TAG'); |
||||||
|
commit('CLEAR_LOCK'); |
||||||
|
removeToken() |
||||||
|
resolve() |
||||||
|
}) |
||||||
|
}, |
||||||
|
GetTopMenu() { |
||||||
|
return new Promise(resolve => { |
||||||
|
getTopMenu().then((res) => { |
||||||
|
const data = res.data.data || [] |
||||||
|
resolve(data) |
||||||
|
}) |
||||||
|
}) |
||||||
|
}, |
||||||
|
//获取系统菜单
|
||||||
|
GetMenu({commit, dispatch}, parentId) { |
||||||
|
return new Promise(resolve => { |
||||||
|
getMenu(parentId).then((res) => { |
||||||
|
const data = res.data.data |
||||||
|
let menu = deepClone(data); |
||||||
|
menu.forEach(ele => { |
||||||
|
addPath(ele, true); |
||||||
|
}) |
||||||
|
commit('SET_MENU', menu) |
||||||
|
dispatch('GetButtons'); |
||||||
|
resolve(menu) |
||||||
|
}) |
||||||
|
}) |
||||||
|
}, |
||||||
|
}, |
||||||
|
mutations: { |
||||||
|
SET_TOKEN: (state, token) => { |
||||||
|
setToken(token) |
||||||
|
state.token = token; |
||||||
|
setStore({name: 'token', content: state.token, type: 'session'}) |
||||||
}, |
}, |
||||||
actions: { |
SET_REFRESH_TOKEN: (state, refreshToken) => { |
||||||
//根据用户名登录
|
setRefreshToken(refreshToken) |
||||||
LoginByUsername({ commit }, userInfo) { |
state.refreshToken = refreshToken; |
||||||
return new Promise((resolve) => { |
setStore({name: 'refreshToken', content: state.refreshToken, type: 'session'}) |
||||||
loginByUsername(userInfo.tenantCode, userInfo.username, userInfo.password, userInfo.type).then(res => { |
|
||||||
const data = res.data.data; |
|
||||||
commit('SET_TOKEN', data.accessToken); |
|
||||||
commit('SET_USERIFNO', data); |
|
||||||
commit('DEL_ALL_TAG'); |
|
||||||
commit('CLEAR_LOCK'); |
|
||||||
resolve(); |
|
||||||
}) |
|
||||||
}) |
|
||||||
}, |
|
||||||
GetButtons({ commit }) { |
|
||||||
return new Promise((resolve) => { |
|
||||||
getButtons().then(res => { |
|
||||||
const data = res.data.data; |
|
||||||
commit('SET_PERMISSION', data); |
|
||||||
resolve(); |
|
||||||
}) |
|
||||||
}) |
|
||||||
}, |
|
||||||
//根据手机号登录
|
|
||||||
LoginByPhone({ commit }, userInfo) { |
|
||||||
return new Promise((resolve) => { |
|
||||||
loginByUsername(userInfo.phone, userInfo.code).then(res => { |
|
||||||
const data = res.data.data; |
|
||||||
commit('SET_TOKEN', data); |
|
||||||
commit('DEL_ALL_TAG'); |
|
||||||
commit('CLEAR_LOCK'); |
|
||||||
resolve(); |
|
||||||
}) |
|
||||||
}) |
|
||||||
}, |
|
||||||
GetUserInfo({ commit }) { |
|
||||||
return new Promise((resolve, reject) => { |
|
||||||
getUserInfo().then((res) => { |
|
||||||
const data = res.data.data; |
|
||||||
commit('SET_ROLES', data.roles); |
|
||||||
resolve(data); |
|
||||||
}).catch(err => { |
|
||||||
reject(err); |
|
||||||
}) |
|
||||||
}) |
|
||||||
}, |
|
||||||
//刷新token
|
|
||||||
RefeshToken({ state, commit }) { |
|
||||||
return new Promise((resolve, reject) => { |
|
||||||
refeshToken(state.refeshToken).then(res => { |
|
||||||
const data = res.data.data; |
|
||||||
commit('SET_TOKEN', data); |
|
||||||
resolve(data); |
|
||||||
}).catch(error => { |
|
||||||
reject(error) |
|
||||||
}) |
|
||||||
}) |
|
||||||
}, |
|
||||||
// 登出
|
|
||||||
LogOut({ commit }) { |
|
||||||
return new Promise((resolve, reject) => { |
|
||||||
logout().then(() => { |
|
||||||
commit('SET_TOKEN', '') |
|
||||||
commit('SET_MENU', []) |
|
||||||
commit('SET_ROLES', []) |
|
||||||
commit('DEL_ALL_TAG'); |
|
||||||
commit('CLEAR_LOCK'); |
|
||||||
removeToken() |
|
||||||
resolve() |
|
||||||
}).catch(error => { |
|
||||||
reject(error) |
|
||||||
}) |
|
||||||
}) |
|
||||||
}, |
|
||||||
//注销session
|
|
||||||
FedLogOut({ commit }) { |
|
||||||
return new Promise(resolve => { |
|
||||||
commit('SET_TOKEN', '') |
|
||||||
commit('SET_MENU', []) |
|
||||||
commit('SET_ROLES', []) |
|
||||||
commit('DEL_ALL_TAG'); |
|
||||||
commit('CLEAR_LOCK'); |
|
||||||
removeToken() |
|
||||||
resolve() |
|
||||||
}) |
|
||||||
}, |
|
||||||
GetTopMenu() { |
|
||||||
return new Promise(resolve => { |
|
||||||
getTopMenu().then((res) => { |
|
||||||
const data = res.data.data || [] |
|
||||||
resolve(data) |
|
||||||
}) |
|
||||||
}) |
|
||||||
}, |
|
||||||
//获取系统菜单
|
|
||||||
GetMenu({ commit, dispatch }, parentId) { |
|
||||||
return new Promise(resolve => { |
|
||||||
getMenu(parentId).then((res) => { |
|
||||||
const data = res.data.data |
|
||||||
let menu = deepClone(data); |
|
||||||
menu.forEach(ele => { |
|
||||||
addPath(ele, true); |
|
||||||
}) |
|
||||||
commit('SET_MENU', menu) |
|
||||||
dispatch('GetButtons'); |
|
||||||
resolve(menu) |
|
||||||
}) |
|
||||||
}) |
|
||||||
}, |
|
||||||
}, |
}, |
||||||
mutations: { |
SET_USERIFNO: (state, userInfo) => { |
||||||
SET_TOKEN: (state, token) => { |
state.userInfo = userInfo; |
||||||
setToken(token) |
setStore({name: 'userInfo', content: state.userInfo}) |
||||||
state.token = token; |
}, |
||||||
setStore({ name: 'token', content: state.token, type: 'session' }) |
SET_MENU: (state, menu) => { |
||||||
}, |
state.menu = menu |
||||||
SET_USERIFNO: (state, userInfo) => { |
setStore({name: 'menu', content: state.menu, type: 'session'}) |
||||||
state.userInfo = userInfo; |
}, |
||||||
setStore({ name: 'userInfo', content: state.userInfo }) |
SET_MENU_ALL: (state, menuAll) => { |
||||||
}, |
state.menuAll = menuAll; |
||||||
SET_MENU: (state, menu) => { |
}, |
||||||
state.menu = menu |
SET_ROLES: (state, roles) => { |
||||||
setStore({ name: 'menu', content: state.menu, type: 'session' }) |
state.roles = roles; |
||||||
}, |
}, |
||||||
SET_MENU_ALL: (state, menuAll) => { |
SET_PERMISSION: (state, permission) => { |
||||||
state.menuAll = menuAll; |
let result = []; |
||||||
}, |
|
||||||
SET_ROLES: (state, roles) => { |
|
||||||
state.roles = roles; |
|
||||||
}, |
|
||||||
SET_PERMISSION: (state, permission) => { |
|
||||||
let result = []; |
|
||||||
function getCode(list) { |
|
||||||
list.forEach(ele => { |
|
||||||
if (typeof (ele) === 'object') { |
|
||||||
const chiildren = ele.children; |
|
||||||
const code = ele.code; |
|
||||||
if (chiildren) { |
|
||||||
getCode(chiildren) |
|
||||||
} else { |
|
||||||
result.push(code); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
}) |
function getCode(list) { |
||||||
|
list.forEach(ele => { |
||||||
|
if (typeof (ele) === 'object') { |
||||||
|
const chiildren = ele.children; |
||||||
|
const code = ele.code; |
||||||
|
if (chiildren) { |
||||||
|
getCode(chiildren) |
||||||
|
} else { |
||||||
|
result.push(code); |
||||||
} |
} |
||||||
getCode(permission); |
} |
||||||
state.permission = {}; |
|
||||||
result.forEach(ele => { |
}) |
||||||
state.permission[ele] = true; |
} |
||||||
}); |
|
||||||
setStore({ name: 'permission', content: state.permission, type: 'session' }) |
getCode(permission); |
||||||
} |
state.permission = {}; |
||||||
|
result.forEach(ele => { |
||||||
|
state.permission[ele] = true; |
||||||
|
}); |
||||||
|
setStore({name: 'permission', content: state.permission, type: 'session'}) |
||||||
} |
} |
||||||
|
} |
||||||
|
|
||||||
} |
} |
||||||
export default user |
export default user |
||||||
|
|||||||
@ -0,0 +1,273 @@ |
|||||||
|
<template> |
||||||
|
<basic-container> |
||||||
|
<avue-crud :option="option" |
||||||
|
:data="data" |
||||||
|
:page="page" |
||||||
|
@row-del="rowDel" |
||||||
|
v-model="form" |
||||||
|
:permission="permissionList" |
||||||
|
@row-update="rowUpdate" |
||||||
|
@row-save="rowSave" |
||||||
|
:before-open="beforeOpen" |
||||||
|
@search-change="searchChange" |
||||||
|
@search-reset="searchReset" |
||||||
|
@selection-change="selectionChange" |
||||||
|
@on-load="onLoad"> |
||||||
|
<template slot="menuLeft"> |
||||||
|
<el-button type="danger" |
||||||
|
size="small" |
||||||
|
icon="el-icon-delete" |
||||||
|
plain |
||||||
|
v-if="permission.client_delete" |
||||||
|
@click="handleDelete">删 除 |
||||||
|
</el-button> |
||||||
|
</template> |
||||||
|
</avue-crud> |
||||||
|
</basic-container> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
import {getList, getDetail, add, update, remove} from "@/api/system/client"; |
||||||
|
import {mapGetters} from "vuex"; |
||||||
|
|
||||||
|
export default { |
||||||
|
data() { |
||||||
|
return { |
||||||
|
form: {}, |
||||||
|
page: { |
||||||
|
pageSize: 10, |
||||||
|
currentPage: 1, |
||||||
|
total: 0 |
||||||
|
}, |
||||||
|
selectionList: [], |
||||||
|
option: { |
||||||
|
tip: false, |
||||||
|
border: true, |
||||||
|
index: true, |
||||||
|
viewBtn: true, |
||||||
|
selection: true, |
||||||
|
column: [ |
||||||
|
{ |
||||||
|
label: "应用id", |
||||||
|
prop: "clientId", |
||||||
|
search: true, |
||||||
|
rules: [{ |
||||||
|
required: true, |
||||||
|
message: "请输入客户端id", |
||||||
|
trigger: "blur" |
||||||
|
}] |
||||||
|
}, |
||||||
|
{ |
||||||
|
label: "应用密钥", |
||||||
|
prop: "clientSecret", |
||||||
|
search: true, |
||||||
|
rules: [{ |
||||||
|
required: true, |
||||||
|
message: "请输入客户端密钥", |
||||||
|
trigger: "blur" |
||||||
|
}] |
||||||
|
}, |
||||||
|
{ |
||||||
|
label: "授权类型", |
||||||
|
prop: "authorizedGrantTypes", |
||||||
|
valueDefault: "refresh_token,password,authorization_code", |
||||||
|
rules: [{ |
||||||
|
required: true, |
||||||
|
message: "请输入授权类型", |
||||||
|
trigger: "blur" |
||||||
|
}] |
||||||
|
}, |
||||||
|
{ |
||||||
|
label: "授权范围", |
||||||
|
prop: "scope", |
||||||
|
valueDefault: "all", |
||||||
|
rules: [{ |
||||||
|
required: true, |
||||||
|
message: "请输入授权范围", |
||||||
|
trigger: "blur" |
||||||
|
}] |
||||||
|
}, |
||||||
|
{ |
||||||
|
label: "令牌秒数", |
||||||
|
prop: "accessTokenValidity", |
||||||
|
type: "number", |
||||||
|
valueDefault: 3600, |
||||||
|
rules: [{ |
||||||
|
required: true, |
||||||
|
message: "请输入令牌过期秒数", |
||||||
|
trigger: "blur" |
||||||
|
}] |
||||||
|
}, |
||||||
|
{ |
||||||
|
label: "刷新秒数", |
||||||
|
prop: "refreshTokenValidity", |
||||||
|
type: "number", |
||||||
|
valueDefault: 604800, |
||||||
|
hide: true, |
||||||
|
rules: [{ |
||||||
|
required: true, |
||||||
|
message: "请输入刷新令牌过期秒数", |
||||||
|
trigger: "blur" |
||||||
|
}] |
||||||
|
}, |
||||||
|
{ |
||||||
|
label: "回调地址", |
||||||
|
prop: "webServerRedirectUri", |
||||||
|
hide: true, |
||||||
|
rules: [{ |
||||||
|
required: true, |
||||||
|
message: "请输入回调地址", |
||||||
|
trigger: "blur" |
||||||
|
}] |
||||||
|
}, |
||||||
|
{ |
||||||
|
label: "资源集合", |
||||||
|
prop: "resourceIds", |
||||||
|
hide: true, |
||||||
|
rules: [{ |
||||||
|
message: "请输入资源集合", |
||||||
|
trigger: "blur" |
||||||
|
}] |
||||||
|
}, |
||||||
|
{ |
||||||
|
label: "权限", |
||||||
|
prop: "authorities", |
||||||
|
hide: true, |
||||||
|
rules: [{ |
||||||
|
message: "请输入权限", |
||||||
|
trigger: "blur" |
||||||
|
}] |
||||||
|
}, |
||||||
|
{ |
||||||
|
label: "自动授权", |
||||||
|
prop: "autoapprove", |
||||||
|
hide: true, |
||||||
|
rules: [{ |
||||||
|
message: "请输入自动授权", |
||||||
|
trigger: "blur" |
||||||
|
}] |
||||||
|
}, |
||||||
|
{ |
||||||
|
label: "附加说明", |
||||||
|
hide: true, |
||||||
|
prop: "additionalInformation", |
||||||
|
span: 24, |
||||||
|
rules: [{ |
||||||
|
message: "请输入附加说明", |
||||||
|
trigger: "blur" |
||||||
|
}] |
||||||
|
}, |
||||||
|
] |
||||||
|
}, |
||||||
|
data: [] |
||||||
|
}; |
||||||
|
}, |
||||||
|
computed: { |
||||||
|
...mapGetters(["permission"]), |
||||||
|
permissionList() { |
||||||
|
return { |
||||||
|
addBtn: this.vaildData(this.permission.client_add), |
||||||
|
viewBtn: this.vaildData(this.permission.client_view), |
||||||
|
delBtn: this.vaildData(this.permission.client_delete), |
||||||
|
editBtn: this.vaildData(this.permission.client_edit) |
||||||
|
}; |
||||||
|
}, |
||||||
|
ids() { |
||||||
|
let ids = []; |
||||||
|
this.selectionList.forEach(ele => { |
||||||
|
ids.push(ele.id); |
||||||
|
}); |
||||||
|
return ids.join(","); |
||||||
|
} |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
rowSave(row, loading) { |
||||||
|
add(row).then(() => { |
||||||
|
loading(); |
||||||
|
this.onLoad(this.page); |
||||||
|
this.$message({ |
||||||
|
type: "success", |
||||||
|
message: "操作成功!" |
||||||
|
}); |
||||||
|
}); |
||||||
|
}, |
||||||
|
rowUpdate(row, index, loading) { |
||||||
|
update(row).then(() => { |
||||||
|
loading(); |
||||||
|
this.onLoad(this.page); |
||||||
|
this.$message({ |
||||||
|
type: "success", |
||||||
|
message: "操作成功!" |
||||||
|
}); |
||||||
|
}); |
||||||
|
}, |
||||||
|
rowDel(row) { |
||||||
|
this.$confirm("确定将选择数据删除?", { |
||||||
|
confirmButtonText: "确定", |
||||||
|
cancelButtonText: "取消", |
||||||
|
type: "warning" |
||||||
|
}) |
||||||
|
.then(() => { |
||||||
|
return remove(row.id); |
||||||
|
}) |
||||||
|
.then(() => { |
||||||
|
this.onLoad(this.page); |
||||||
|
this.$message({ |
||||||
|
type: "success", |
||||||
|
message: "操作成功!" |
||||||
|
}); |
||||||
|
}); |
||||||
|
}, |
||||||
|
searchReset() { |
||||||
|
this.onLoad(this.page); |
||||||
|
}, |
||||||
|
searchChange(params) { |
||||||
|
this.onLoad(this.page, params); |
||||||
|
}, |
||||||
|
selectionChange(list) { |
||||||
|
this.selectionList = list; |
||||||
|
}, |
||||||
|
handleDelete() { |
||||||
|
if (this.selectionList.length === 0) { |
||||||
|
this.$message.warning("请选择至少一条数据"); |
||||||
|
return; |
||||||
|
} |
||||||
|
this.$confirm("确定将选择数据删除?", { |
||||||
|
confirmButtonText: "确定", |
||||||
|
cancelButtonText: "取消", |
||||||
|
type: "warning" |
||||||
|
}) |
||||||
|
.then(() => { |
||||||
|
return remove(this.ids); |
||||||
|
}) |
||||||
|
.then(() => { |
||||||
|
this.onLoad(this.page); |
||||||
|
this.$message({ |
||||||
|
type: "success", |
||||||
|
message: "操作成功!" |
||||||
|
}); |
||||||
|
this.$refs.crud.toggleSelection(); |
||||||
|
}); |
||||||
|
}, |
||||||
|
|
||||||
|
beforeOpen(done, type) { |
||||||
|
if (["edit", "view"].includes(type)) { |
||||||
|
getDetail(this.form.id).then(res => { |
||||||
|
this.form = res.data.data; |
||||||
|
}); |
||||||
|
} |
||||||
|
done(); |
||||||
|
}, |
||||||
|
onLoad(page, params = {}) { |
||||||
|
getList(page.currentPage, page.pageSize, params).then(res => { |
||||||
|
const data = res.data.data; |
||||||
|
this.page.total = data.total; |
||||||
|
this.data = data.records; |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
</script> |
||||||
|
|
||||||
|
<style> |
||||||
|
</style> |
||||||
Loading…
Reference in new issue