提交 f1d46fb5 authored 作者: pengxiaohui's avatar pengxiaohui

接入统一权限系统

上级 1a518224
module.exports = {
domain: 'dev.ezijing.com',
url: 'https://live-broadcast2-admin.ezijing.com/api',
// url: 'https://live-broadcast2-admin.ezijing.com/api',
url: 'https://meetings.ezijing.com/api',
webpack: {
externals: {
CKEDITOR: 'window.CKEDITOR',
......@@ -33,7 +34,9 @@ module.exports = {
},
ProvidePlugin: {},
others: {
loginUrl: 'https://login2.ezijing.com/auth/login/index'
// loginUrl: 'https://login.ezijing.com/auth/login/index'
// loginUrl: 'https://login2.ezijing.com/auth/login/index'
loginUrl: 'https://login.ezijing.com/auth/login/index',
VITE_SECRET_ID: 'ezijing_de560f8cf9f55d94c0847fd06b4aad0b',
VITE_SECRET_KEY: '372009e859ddb658630cadc7370b7b11'
}
}
......@@ -14,6 +14,8 @@ module.exports = {
},
ProvidePlugin: {},
others: {
loginUrl: 'https://login.ezijing.com/auth/login/index'
loginUrl: 'https://login.ezijing.com/auth/login/index',
VITE_SECRET_ID: 'ezijing_de560f8cf9f55d94c0847fd06b4aad0b',
VITE_SECRET_KEY: '372009e859ddb658630cadc7370b7b11'
}
}
......@@ -14,6 +14,8 @@ module.exports = {
},
ProvidePlugin: {},
others: {
loginUrl: 'https://login2.ezijing.com/auth/login/index'
loginUrl: 'https://login2.ezijing.com/auth/login/index',
VITE_SECRET_ID: 'ezijing_de560f8cf9f55d94c0847fd06b4aad0b',
VITE_SECRET_KEY: '372009e859ddb658630cadc7370b7b11'
}
}
......@@ -8,3 +8,15 @@ export function logout() {
export function getUser() {
return httpRequest.get('/api/passport/account/get-user-info')
}
/**
* 获取角色
*/
export function getRole() {
return httpRequest.get('/api/permissions/api/v1/user/roles')
}
/**
* 获取权限列表
*/
export function getPermissions(params) {
return httpRequest.get('/api/permissions/api/v1/user/permissions', { params })
}
import httpRequest from '@/utils/axios'
/**
* 操作日志
*/
export function operateLog(params) {
const logMsg = `操作人:${params.user.nickname},操作:${params.type}`
const data = {
detail: logMsg
}
httpRequest.post('/api/live/admin/v3/system/log/write', data).then(res => {
}).catch(() => {})
}
/**
* 模糊搜索
*/
export function searchUserList(params) {
return httpRequest.get('/api/live/common/v3/sso-user/search', { params })
}
// /**
// * 创建腾讯用户
// */
// export function createAccount(data) {
// return httpRequest.post('/api/live/admin/v2/tencent/user', data)
// }
// /**
// * 获取腾讯用户列表(分页)
// */
// export function getAccountList(params) {
// return httpRequest.get('/api/live/admin/v3/tencent/users', { params })
// }
/**
* 获取腾讯用户列表(不分页)
*/
// export function getAllAccountList() {
// return httpRequest.get('/api/live/admin/v2/tencent/user/list')
// }
// /**
// * 更新腾讯用户
// */
// export function updateAccount(data) {
// return httpRequest.put(`/api/live/admin/v2/tencent/user/${data.userid}/update`, data)
// }
// /**
// * 删除腾讯用户
// */
// export function deleteAccount(params) {
// return httpRequest.delete(`/api/live/admin/v2/tencent/user/${params.userid}/delete`, params)
// }
/**
* 创建会议
*/
......
import httpRequest from '@/utils/axios'
/**
* 操作日志
*/
export function operateLog(params) {
const logMsg = `操作人:${params.user.nickname},操作:${params.type}`
const data = {
detail: logMsg
}
httpRequest.post('/api/live/admin/v3/system/log/write', data).then(res => {
console.log(res)
}).catch(() => {})
}
/**
* 模糊搜索
*/
......
......@@ -32,7 +32,7 @@
<el-button size="mini" @click="copyText">复制文字</el-button>
<el-button size="mini" @click="copyMeetingLink">复制参会地址</el-button>
<el-button size="mini" v-if="details.enable_live === 1" @click="copyLiveLink">复制直播地址</el-button>
<el-button type="primary" size="mini" @click="joinMeeting">进入会议</el-button>
<el-button v-if="hasJoin" type="primary" size="mini" @click="joinMeeting">进入会议</el-button>
</span>
</el-dialog>
</template>
......@@ -56,6 +56,12 @@ export default {
} else {
return dateFormat(this.details.start_time, '(周{a})')
}
},
permissions() {
return this.$store.state.user.permissions || []
},
hasJoin() {
return this.permissions.includes('f_tencentmeeting_join')
}
},
filters: {
......
......@@ -10,13 +10,13 @@
{{details.meeting_code}}
</el-form-item>
<el-form-item label="会议创建人:">
{{rowData.sso_user.realname || rowData.sso_user.username}}
{{rowData.sso_user.realname || rowData.sso_user.nickname || rowData.sso_user.username}}
</el-form-item>
<el-form-item label="会议主持人:">
<span v-for="(it, index) in details.hosts" :key="it.userid">{{index > 0 ? '、' : ''}}{{it.username}}</span>
</el-form-item>
<el-form-item label="会议管理员:">
<span v-for="(it, index) in details.managers" :key="it.userid">{{index > 0 ? '、' : ''}}{{it.realname || it.username}}</span>
<span v-for="(it, index) in details.managers" :key="it.userid">{{index > 0 ? '、' : ''}}{{it.realname || it.nickname || it.username}}</span>
</el-form-item>
<el-form-item label="会议直播主题:" v-if="details.enable_live === 1">
{{details.live_config.live_subject}}
......
......@@ -43,7 +43,7 @@
import DialogDetails from './DialogDetails.vue'
import DialogCopyInvite from './DialogCopyInvite'
import { mapGetters } from 'vuex'
import { getMeetingDetails, stopMeeting, cancelMeeting, getMeetingRecordAddr, operateLog } from '@api/common'
import { getMeetingDetails, stopMeeting, cancelMeeting, getMeetingRecordAddr } from '@api/common'
import { timeTrans } from '@/utils/dateAlgs'
export default {
props: {
......@@ -240,7 +240,6 @@ export default {
stopMeeting(params).then(res => {
if (res.code === 0 && res.data.status) {
this.$message.success('会议终止成功')
operateLog({ type: `终止会议,meeting_code:${this.rowData.meeting_code}`, user: this.user })
this.$emit('refresh')
} else {
this.$message.error(res.msg || '会议终止失败')
......@@ -259,7 +258,6 @@ export default {
cancelMeeting(params).then(res => {
if (res.code === 0 && res.data.status) {
this.$message.success(msg + '成功')
operateLog({ type: `删除(取消)会议,meeting_code:${this.rowData.meeting_code}`, user: this.user })
this.$emit('refresh')
} else {
this.$message.error(res.msg || msg + '失败')
......
......@@ -28,7 +28,7 @@
</div>
<div class="details-item">
<label>创建人:</label>
<span>{{details.sso_user.realname || details.sso_user.username}}</span>
<span>{{details.sso_user.realname || details.sso_user.nickname || details.sso_user.username}}</span>
</div>
<div class="details-item" v-if="details.enable_live === 1 && enableJoin">
<label>直播链接:</label>
......
......@@ -51,7 +51,7 @@
<script>
import MeetingSuccessDialog from '@/components/MeetingSuccessDialog/index'
import { dateFormat, getTimestampYMD, getCurHalfHour } from '@/utils/dateAlgs'
import { createMeeting, operateLog, getMeetingDetails } from '@api/common'
import { createMeeting, getMeetingDetails } from '@api/common'
import { mapGetters } from 'vuex'
const DAY_TIMESTAMP = 8.64e7
export default {
......@@ -337,7 +337,6 @@ export default {
createMeeting(params).then(res => {
loading.close()
if (res.code === 0 && res.data.id) {
operateLog({ type: `创建会议,被创建会议meeting_code:${res.data.meeting_code}`, user: this.user })
this.$message.success('创建腾讯会议成功')
this.fetchMeetingDetails({ meeting_type: form.meeting_type, meeting_id: res.data.meeting_id })
this.$emit('refreshData')
......
......@@ -12,7 +12,7 @@
<span>
<!-- <i class="el-icon-user"></i>: -->
创建人:
{{ev.sso_user.realname || ev.sso_user.username}}
{{ev.sso_user.realname || ev.sso_user.nickname || ev.sso_user.username}}
</span>
</div>
</div>
......
......@@ -15,7 +15,7 @@
import Schedule from '@/components/Schedule'
import MeetingForm from './components/MeetingForm'
import MeetingSuccessDialog from '@/components/MeetingSuccessDialog/index'
import { createMeeting, operateLog, getMeetingDetails, getNonpagedMeetingList } from '@api/common'
import { createMeeting, getMeetingDetails, getNonpagedMeetingList } from '@api/common'
import { timeTrans, getYMDByDate, dateFormat, isSameDate } from '@/utils/dateAlgs'
import { mapGetters } from 'vuex'
export default ({
......@@ -167,7 +167,6 @@ export default ({
createMeeting(params).then(res => {
loading.close()
if (res.code === 0 && res.data.id) {
operateLog({ type: `创建会议,被创建会议meeting_code:${res.data.meeting_code}`, user: this.user })
this.$message.success('创建腾讯会议成功')
this.showMeetingDetails(res.data)
} else {
......
......@@ -9,7 +9,7 @@
<script>
import MeetingForm from './components/MeetingForm'
import MeetingSuccessDialog from '@/components/MeetingSuccessDialog/index'
import { createMeeting, operateLog, getMeetingDetails } from '@api/common'
import { createMeeting, getMeetingDetails } from '@api/common'
import { mapGetters } from 'vuex'
export default ({
data () {
......@@ -33,7 +33,6 @@ export default ({
},
methods: {
handleSubmit(params) {
console.log(params)
this.fetchCreateMeeting(params)
},
goList() {
......@@ -67,7 +66,6 @@ export default ({
createMeeting(params).then(res => {
loading.close()
if (res.code === 0 && res.data.id) {
operateLog({ type: `创建会议,被创建会议meeting_code:${res.data.meeting_code}`, user: this.user })
this.$message.success('创建腾讯会议成功')
this.showMeetingDetails(res.data)
} else {
......
......@@ -9,7 +9,7 @@
<script>
import MeetingForm from './components/MeetingForm'
import MeetingSuccessDialog from '@/components/MeetingSuccessDialog/index'
import { updateMeeting, operateLog, getMeetingDetails } from '@api/common'
import { updateMeeting, getMeetingDetails } from '@api/common'
import { timeTrans, dateFormat, getYMDByDate } from '@/utils/dateAlgs'
import { mapGetters } from 'vuex'
const DAY_TIMESTAMP = 8.64e7
......@@ -167,7 +167,6 @@ export default ({
updateMeeting(params).then(res => {
loading.close()
if (res.code === 0 && res.data.id) {
operateLog({ type: `更新会议,被更新会议meeting_code:${res.data.meeting_code}`, user: this.user })
this.$message.success('更新腾讯会议成功')
this.showMeetingDetails(res.data)
} else {
......
......@@ -17,7 +17,7 @@
</div>
<div class="item">
<label>系统角色:</label>
<span v-for="(role, index) in roles" :key="index">{{index ? '、' + role.display_name : role.display_name}}</span>
<span v-for="(role, index) in roles" :key="index">{{index ? '、' + role.name : role.name}}</span>
<span v-if="roles.length === 0"></span>
</div>
<div class="item">
......
......@@ -100,7 +100,7 @@
</template>
</el-table-column>
<el-table-column label="创建人" min-width="100" align="center">
<template slot-scope="scope">{{scope.row.sso_user.realname || scope.row.sso_user.username}}</template>
<template slot-scope="scope">{{scope.row.sso_user.realname || scope.row.sso_user.nickname || scope.row.sso_user.username}}</template>
</el-table-column>
<el-table-column label="直播间" min-width="100" align="center">
<template slot-scope="scope">{{scope.row.user.username}}</template>
......
......@@ -99,7 +99,7 @@
</template>
<script>
import UserSearch from '@/components/UserSearch/index'
import { searchUserList, operateLog } from '@api/common'
import { searchUserList } from '@api/common'
import { createAccount, getAccountList, deleteAccount, getRoles, roleToUser } from '@api/system'
import { mapGetters } from 'vuex'
const defaultForm = {
......@@ -236,7 +236,6 @@ export default {
if (res.code === 0 && res.data.id) {
this.$message.success('创建用户成功')
this.fetchAccountList()
operateLog({ type: `创建系统用户,被创建账户userid:${form.userid}`, user: this.user.nickname })
} else {
this.$message.error(res.message || '创建账户失败')
}
......@@ -247,7 +246,6 @@ export default {
if (res.code === 0 && res.data.status === true) {
this.$message.success('删除账户成功')
this.fetchAccountList()
operateLog({ type: `删除系统用户,被删除账户userid:${ids.join(',')}`, user: this.user })
this.deleteId = ''
} else {
this.$message.error(res.message || '删除账户失败')
......@@ -275,7 +273,6 @@ export default {
if (res.code === 0 && res.data && res.data.status) {
this.$message.success('配置权限成功')
this.fetchAccountList()
operateLog({ type: `配置权限,被操作用户sso_id:${form.user_id}`, user: this.user })
} else {
this.$message.error(res.message || '配置权限失败')
}
......
......@@ -63,7 +63,7 @@
</div>
</template>
<script>
import { getRoles, createRole, operateLog, batchDeleteRole, updateRole, getRolePermissions, getAllPermissions, setRolePermissions } from '@api/system'
import { getRoles, createRole, batchDeleteRole, updateRole, getRolePermissions, getAllPermissions, setRolePermissions } from '@api/system'
const defaultForm = {
name: '',
display_name: '',
......@@ -199,7 +199,6 @@ export default {
if (res.code === 0 && res.data.id) {
this.$message.success('创建角色成功')
this.fetchRoleList()
operateLog({ type: '创建角色', user: this.user })
}
})
},
......@@ -208,7 +207,6 @@ export default {
if (res.code === 0 && res.data.status) {
this.$message.success('更新角色成功')
this.fetchRoleList()
operateLog({ type: '更新角色', user: this.user })
}
})
},
......@@ -220,7 +218,6 @@ export default {
if (res.code === 0 && res.data.status === true) {
this.$message.success('删除角色成功')
this.fetchRoleList()
operateLog({ type: `删除角色,被删除角色id:${id}`, user: this.user })
this.deleteId = ''
} else {
this.$message.error(res.message || '删除角色失败')
......
......@@ -80,7 +80,7 @@
</template>
<script>
import UserSearch from '@/components/UserSearch/index'
import { searchUserList, operateLog } from '@api/common'
import { searchUserList } from '@api/common'
import { createTxAccount, getTxAccountList, updateTxAccount, deleteTxAccount } from '@api/tencent'
import { mapGetters } from 'vuex'
// import _ from 'lodash'
......@@ -260,7 +260,6 @@ export default {
if (res.code === 0 && res.data.id) {
this.$message.success('创建账户成功')
this.fetchAccountList()
operateLog({ type: `创建腾讯账号,被创建账户userid:${form.userid}`, user: this.user })
} else {
this.$message.error(res.message || '创建账户失败')
}
......@@ -277,7 +276,6 @@ export default {
if (res.code === 0 && res.data.status === true) {
this.$message.success('更新账户成功')
this.fetchAccountList()
operateLog({ type: `更新腾讯账号,被更新账户userid:${userid}`, user: this.user })
} else {
this.$message.error(res.message || '更新账户失败')
}
......@@ -288,7 +286,6 @@ export default {
if (res.code === 0 && res.data.status === true) {
this.$message.success('删除账户成功')
this.fetchAccountList()
operateLog({ type: `删除腾讯账号,被删除账户userid:${userids.join(',')}`, user: this.user })
this.deleteId = ''
} else {
this.$message.error(res.message || '删除账户失败')
......
......@@ -66,31 +66,31 @@ export default [
name: 'System',
meta: { title: '系统管理', icon: 'el-icon-setting', permission: 'menus_system_manage' },
children: [
{
path: 'role',
name: 'Role',
component: () => import('@/pages/system/role/index'),
meta: { title: '角色管理', icon: 'el-icon-s-check', permission: 'menus_roles' }
},
{
path: 'roleToUser',
name: 'RoleToUser',
hidden: true,
component: () => import('@/pages/system/role/role-to-user/index'),
meta: { title: '管理角色用户', icon: '' }
},
{
path: 'account',
name: 'Account',
component: () => import('@/pages/system/account/index'),
meta: { title: '账号管理', icon: 'el-icon-key', permission: 'menus_users' }
},
{
path: 'permission',
name: 'Permission',
component: () => import('@/pages/system/permission/index'),
meta: { title: '权限管理', icon: 'el-icon-finished', permission: 'menus_permissions' }
},
// {
// path: 'role',
// name: 'Role',
// component: () => import('@/pages/system/role/index'),
// meta: { title: '角色管理', icon: 'el-icon-s-check', permission: 'menus_roles' }
// },
// {
// path: 'roleToUser',
// name: 'RoleToUser',
// hidden: true,
// component: () => import('@/pages/system/role/role-to-user/index'),
// meta: { title: '管理角色用户', icon: '' }
// },
// {
// path: 'account',
// name: 'Account',
// component: () => import('@/pages/system/account/index'),
// meta: { title: '账号管理', icon: 'el-icon-key', permission: 'menus_users' }
// },
// {
// path: 'permission',
// name: 'Permission',
// component: () => import('@/pages/system/permission/index'),
// meta: { title: '权限管理', icon: 'el-icon-finished', permission: 'menus_permissions' }
// },
{
path: 'manual',
name: 'Manual',
......
import { getUser, logout } from '@/api/account'
import { getUserRoles, getUserPermissions } from '@/api/system'
import { getUser, logout, getRole, getPermissions } from '@/api/account'
// import { getUserRoles, getUserPermissions } from '@/api/system'
import { resetRouter } from '@/router'
const user = {
state: {
......@@ -27,7 +27,8 @@ const user = {
state.hasRoles = hasRoles
},
setPermissions(state, permissions) {
state.permissions = permissions
state.permissions = permissions.map(item => item.tag)
state.permissionsList = permissions
}
},
......@@ -77,14 +78,13 @@ const user = {
},
// 获取角色
async checkRoles({ commit }) {
const hasRoles = await getUserRoles().then(res => {
const roles = res.data
const hasRoles = await getRole().then(res => {
let isSuperAdmin = false
if (roles && Array.isArray(roles)) {
roles.forEach(it => {
if (it.name === 'administrator') isSuperAdmin = true
if (res.data && Array.isArray(res.data.items)) {
res.data.items.forEach(it => {
if (it.tag === 'administrator') isSuperAdmin = true
})
commit('setRoles', roles)
commit('setRoles', res.data.items)
commit('setSuperAdmin', isSuperAdmin)
return true
}
......@@ -98,10 +98,10 @@ const user = {
},
// 获取权限
async checkPermissions({ commit }) {
const perms = await getUserPermissions().then(res => {
if (res.code === 0) {
commit('setPermissions', res.data)
return res.data
const perms = await getPermissions().then(res => {
if (res.code === 0 && res.data && res.data.items) {
commit('setPermissions', res.data.items)
return res.data.items.map(item => item.tag)
} else {
commit('setPermissions', [])
return []
......
......@@ -12,13 +12,19 @@ const httpRequest = axios.create({
// 请求拦截
httpRequest.interceptors.request.use(
function(config) {
const defaultParams = {
timestamp: parseInt(Date.now() / 1000),
nonce: getNonce(9),
signature: 'UG7wBenexQhiuD2wpCwuxkU0jqcj006d'
if (/^\/api\/permissions/.test(config.url)) {
// 默认参数
const defaultHeaders = {
timestamp: parseInt(Date.now() / 1000),
nonce: getNonce(9),
'secret-id': webConf.others.VITE_SECRET_ID,
'secret-key': webConf.others.VITE_SECRET_KEY,
signature: 'UG7wBenexQhiuD2wpCwuxkU0jqcj006d'
}
config.headers = Object.assign(config.headers, defaultHeaders)
}
let params = config.params || config.data
params = Object.assign({}, defaultParams, params)
const params = config.params || config.data
// params = Object.assign({}, defaultParams, params)
if (['post', 'put', 'delete'].includes(config.method)) {
config.data = params
} else {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论