123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- import React, { useCallback, useEffect, useMemo, useState } from 'react'
- import styles from './index.module.scss'
- import { Button, Checkbox, Modal, Radio } from 'antd'
- import MyPopconfirm from '@/components/MyPopconfirm'
- import { Z1_APIgetAuthByUserId, Z1_APIsetAuth } from '@/store/action/Z1user'
- import classNmaes from 'classnames'
- import { MessageFu } from '@/utils/message'
- export type UserListType = {
- id: number
- name: string
- perm: boolean
- }
- type Props = {
- authInfo: { id: number; name: string }
- closeFu: () => void
- }
- function Z1auth({ authInfo, closeFu }: Props) {
- const getAuthByUserIdFu = useCallback(async () => {
- const res = await Z1_APIgetAuthByUserId(authInfo.id)
- if (res.code === 0) {
- const info = res.data
- setResources(info.resources)
- setDataScopeIds(info.scope)
- setDataScope(info.dataScope || 1)
- }
- }, [authInfo.id])
- useEffect(() => {
- getAuthByUserIdFu()
- }, [getAuthByUserIdFu])
- // 页面权限
- const [resources, setResources] = useState<UserListType[]>([])
- // 选择古桥或者全部
- const [dataScope, setDataScope] = useState(0)
- // 古桥权限
- const [dataScopeIds, setDataScopeIds] = useState<UserListType[]>([])
- // 多选框变化
- const onChange1 = useCallback(
- (val: boolean, id: number) => {
- setResources(
- resources.map(v => ({
- ...v,
- perm: v.id === id ? val : v.perm
- }))
- )
- },
- [resources]
- )
- const onChange2 = useCallback(
- (val: boolean, id: number) => {
- setDataScopeIds(
- dataScopeIds.map(v => ({
- ...v,
- perm: v.id === id ? val : v.perm
- }))
- )
- },
- [dataScopeIds]
- )
- // 页面权限id集合
- const ids1 = useMemo(() => {
- return resources.filter(v => v.perm).map(c => c.id)
- }, [resources])
- // 古桥权限id集合
- const ids2 = useMemo(() => {
- return dataScopeIds.filter(v => v.perm).map(c => c.id)
- }, [dataScopeIds])
- // 点击确定
- const btnOkFu = useCallback(async () => {
- const obj = {
- userId: authInfo.id,
- resources: ids1,
- dataScopeIds: ids2,
- dataScope
- }
- const res = await Z1_APIsetAuth(obj)
- if (res.code === 0) {
- MessageFu.success('授权成功!')
- closeFu()
- }
- }, [authInfo.id, closeFu, dataScope, ids1, ids2])
- // 按钮是否能点击
- const btnFlag = useMemo(() => {
- let txt = ''
- if (ids1.length === 0) txt = '至少选中一个页面权限'
- else if (dataScope === 2 && ids2.length === 0) txt = '至少选中一个数据权限'
- return txt
- }, [dataScope, ids1.length, ids2.length])
- return (
- <Modal
- wrapClassName={styles.Z1auth}
- open={true}
- title={`${authInfo.name} - 权限管理`}
- footer={
- [] // 设置footer为空,去掉 取消 确定默认按钮
- }
- >
- <div className='Z1aEmain'>
- <div className='Z1aRow'>
- <div className='Z1aRowll'>页面权限:</div>
- <div className='Z1aRowrr'>
- {resources.map(c => (
- <Checkbox
- key={c.id}
- checked={c.perm}
- onChange={e => onChange1(e.target.checked, c.id)}
- >
- {c.name}
- </Checkbox>
- ))}
- </div>
- </div>
- <div className='Z1aRow'>
- <div className='Z1aRowll'>数据权限:</div>
- <div className='Z1aRowrr'>
- <Radio.Group
- value={dataScope}
- onChange={e => setDataScope(e.target.value)}
- options={[
- { value: 1, label: '全部' },
- { value: 2, label: '按古桥' }
- ]}
- />
- </div>
- </div>
- <div className='Z1aRow' hidden={dataScope !== 2}>
- <div className='Z1aRowll'>
- <Checkbox
- indeterminate={ids2.length > 0 && ids2.length < dataScopeIds.length}
- onChange={e => {
- const perm = e.target.checked
- setDataScopeIds(
- dataScopeIds.map(v => ({
- ...v,
- perm
- }))
- )
- }}
- checked={ids2.length === dataScopeIds.length}
- >
- {ids2.length === dataScopeIds.length ? '反' : '全'}选
- </Checkbox>
- </div>
- <div className='Z1aRowrr Z1aRowrr2'>
- {dataScopeIds.map(c => (
- <Checkbox
- key={c.id}
- checked={c.perm}
- onChange={e => onChange2(e.target.checked, c.id)}
- >
- {c.name}
- </Checkbox>
- ))}
- </div>
- </div>
- <div className={classNmaes('Z1aErr', btnFlag ? 'Z1aErrAc' : '')}>{btnFlag}</div>
- </div>
- <div className='Z1aEbtn'>
- <Button type='primary' onClick={btnOkFu} disabled={!!btnFlag}>
- 提交
- </Button>
-  
- <MyPopconfirm txtK='取消' onConfirm={closeFu} />
- </div>
- </Modal>
- )
- }
- const MemoZ1auth = React.memo(Z1auth)
- export default MemoZ1auth
|