| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371 |
- import store from '@/store'
- import { Role } from '@/constant'
- import request, { keycloakRequest } from '@/utils/request'
- import {
- send,
- add,
- update,
- messageSend
- } from './base'
- // 公众号二维码
- export function getTicket (id) {
- return request({
- url: `keycloak/query/ticket/${id}`,
- method: 'GET'
- })
- }
- // 小程序二维码
- export function getQrcode (data) {
- return request({
- url: `wxapplet/qrcode`,
- method: 'GET',
- params: data
- })
- }
- export function userinfo (silence) {
- const config = {
- // url: `${baseUrl}/realms/${realm}/account`,
- url: `/users/${store.getters.userId}`,
- method: 'GET'
- }
- if (silence) {
- config.custom = true
- return keycloakRequest(config)
- }
- return send(config, keycloakRequest)
- }
- export function addUser (data) {
- return add({
- url: `/users`,
- method: 'POST',
- data
- }, keycloakRequest)
- }
- export function updateUser (id, data, message) {
- return update({
- url: `/users/${id}`,
- method: 'PUT',
- data
- }, message, keycloakRequest)
- }
- export function deleteUser ({ id }) {
- return keycloakRequest({
- url: `/users/${id}`,
- method: 'DELETE'
- })
- }
- export function getUserCredentials ({ id }) {
- return keycloakRequest({
- url: `/users/${id}/credentials`,
- method: 'GET'
- })
- }
- export function deleteUserCredentials (userId, credentialId) {
- return send({
- url: `/users/${userId}/credentials/${credentialId}`,
- method: 'DELETE'
- }, keycloakRequest)
- }
- export function resetPassword ({ id }) {
- return messageSend({
- url: `/users/${id}/reset-password`,
- method: 'PUT',
- data: {
- type: 'password',
- value: process.env.VUE_APP_USER_PASSWORD,
- temporary: true
- }
- }, '重置', keycloakRequest)
- }
- export function getTenantsByQuery (query, onlyOnce) {
- const { pageSize: max, pageNum, name, ...params } = query
- return keycloakRequest({
- url: `/groups`,
- method: 'GET',
- params: {
- briefRepresentation: false,
- max,
- first: pageNum ? (pageNum - 1) * max : void 0,
- search: name || void 0,
- ...params
- }
- }).then(data => {
- return { data: normalizeGroups(data, null, onlyOnce) }
- })
- }
- function normalizeGroups (groups, parentGroup, onlyOnce) {
- return groups.map(({ id, name, path, attributes, subGroups }) => {
- const remark = attributes.remark?.[0] || ''
- const group = {
- parentGroup,
- id,
- path,
- name,
- remark,
- aiAudit: parentGroup ? void 0 : attributes.aiAudit?.[0] || '0',
- label: remark || name
- }
- if (onlyOnce) {
- return group
- }
- group.subGroups = normalizeGroups(subGroups.sort((a, b) => a.name <= b.name ? -1 : 1), group)
- return group
- })
- }
- function getTenantCount (name) {
- return keycloakRequest({
- url: `/groups/count`,
- method: 'GET',
- params: {
- top: true,
- search: name || void 0
- }
- })
- }
- export async function getTenants (query) {
- const { count } = await getTenantCount(query.name)
- const { data } = await getTenantsByQuery(query)
- return {
- data,
- totalCount: count
- }
- }
- export function getTenantTree () {
- if (store.getters.isSuperAdmin) {
- return getTenantsByQuery({})
- }
- return getGroups().then(data => {
- const groups = normalizeGroups([data])
- groups[0].label = '根部门'
- return { data: groups }
- })
- }
- export function addTenant ({ name, remark, aiAudit }) {
- return add({
- url: `/groups`,
- method: 'POST',
- data: {
- name,
- attributes: {
- remark: [remark],
- aiAudit: aiAudit ? [aiAudit] : void 0
- }
- }
- }, keycloakRequest)
- }
- export function getTopGroups () {
- if (store.getters.isSuperAdmin) {
- return getTenantsByQuery({}, true)
- }
- return getGroups().then(data => {
- return { data: normalizeGroups(data.subGroups, true) }
- })
- }
- async function getGroups () {
- if (!store.getters.tenantId) {
- const groups = await getUserGroups(store.getters.userId)
- store.commit('user/SET_TENANT_ID', groups[0].id)
- }
- return keycloakRequest({
- url: `/groups/${store.getters.tenantId}`,
- method: 'GET'
- })
- }
- export function addSubGroup ({ id }, { name, remark }) {
- return add({
- url: `/groups/${id}/children`,
- method: 'POST',
- data: {
- name,
- attributes: { remark: [remark] }
- }
- }, keycloakRequest)
- }
- export function updateGroup ({ id, name, remark, aiAudit }) {
- return update({
- url: `/groups/${id}`,
- method: 'PUT',
- data: {
- name,
- attributes: {
- remark: [remark],
- aiAudit: aiAudit ? [aiAudit] : void 0
- }
- }
- }, null, keycloakRequest)
- }
- export function deleteGroup ({ id }) {
- return keycloakRequest({
- url: `/groups/${id}`,
- method: 'DELETE'
- })
- }
- export function getUsersByGroup (query) {
- const { id, pageSize: max, pageNum, ...params } = query
- return keycloakRequest({
- url: `/groups/${id}/members`,
- method: 'GET',
- params: {
- briefRepresentation: true,
- max: max + 1,
- first: pageNum ? (pageNum - 1) * max : void 0,
- ...params
- }
- }).then(data => {
- const totalCount = data.length
- if (totalCount > max) {
- data = data.slice(0, -1)
- }
- return {
- data,
- totalCount
- }
- })
- }
- export function getUserGroups (id, briefRepresentation = true) {
- return keycloakRequest({
- url: `/users/${id}/groups`,
- method: 'GET',
- params: { briefRepresentation }
- }).then(data => data.sort((a, b) => a.path.length - b.path.length))
- }
- function addUserToGroup (userId, groupId) {
- return keycloakRequest({
- url: `/users/${userId}/groups/${groupId}`,
- method: 'PUT'
- })
- }
- function removeUserFromGroup (userId, groupId) {
- return keycloakRequest({
- url: `/users/${userId}/groups/${groupId}`,
- method: 'DELETE'
- })
- }
- export async function moveUserGroup (userId, from, to) {
- const fromGroups = getGroupList(from)
- const toGroups = getGroupList(to)
- let fromLast = fromGroups.length - 1
- const toLast = toGroups.length - 1
- let start = 0
- while (start <= fromLast && start <= toLast) {
- if (fromGroups[start].id === toGroups[start].id) {
- start += 1
- } else {
- break
- }
- }
- const changed = start <= fromLast || start <= toLast
- for (; fromLast >= start; fromLast--) {
- await removeUserFromGroup(userId, fromGroups[fromLast].id)
- }
- for (; start <= toLast; start++) {
- await addUserToGroup(userId, toGroups[start].id)
- }
- return changed
- }
- function getGroupList (group) {
- const groups = [group]
- let parentGroup = group.parentGroup
- while (parentGroup) {
- groups.unshift(parentGroup)
- parentGroup = parentGroup.parentGroup
- }
- return groups
- }
- export function getUserRoleMapping (id) {
- return getUserRoles(id).then(
- roles => getRoles().then(
- available => {
- return {
- available,
- roles
- }
- }
- )
- )
- }
- function getUserRoles (id) {
- return keycloakRequest({
- url: `/users/${id}/role-mappings/realm`,
- method: 'GET'
- })
- }
- function getRoles () {
- return keycloakRequest({
- url: `/roles`,
- method: 'GET'
- }).then(filterRoles)
- }
- function filterRoles (roles) {
- const isSuperAdmin = store.getters.isSuperAdmin
- return roles.filter(({ name }) => name !== Role.SUPER_ADMIN && (isSuperAdmin || name !== Role.ADMIN) && name.startsWith('ROLE_'))
- }
- export async function updateUserRoles (userId, available, fromKeys, toKeys) {
- const delRoles = []
- const toSet = new Set(toKeys)
- fromKeys.forEach(id => {
- if (!toSet.has(id)) {
- delRoles.push(available.find(role => role.id === id))
- }
- })
- if (delRoles.length) {
- await removeUserRoles(userId, delRoles)
- }
- const addRoles = []
- const fromSet = new Set(fromKeys)
- toKeys.forEach(id => {
- if (!fromSet.has(id)) {
- addRoles.push(available.find(role => role.id === id))
- }
- })
- if (addRoles.length) {
- await addUserRoles(userId, addRoles)
- }
- }
- function removeUserRoles (userId, roles) {
- return keycloakRequest({
- url: `/users/${userId}/role-mappings/realm`,
- method: 'DELETE',
- data: roles
- })
- }
- function addUserRoles (userId, roles) {
- return keycloakRequest({
- url: `/users/${userId}/role-mappings/realm`,
- method: 'POST',
- data: roles
- })
- }
|