|
@@ -4,7 +4,7 @@ import consts from '@/utils/consts'
|
|
|
import { isArray } from '@/utils/is'
|
|
|
import { useRequest } from '@umijs/max'
|
|
|
import { Select, TreeSelect } from 'antd'
|
|
|
-import { useEffect, useState } from 'react'
|
|
|
+import { useState } from 'react'
|
|
|
|
|
|
enum AuditType {
|
|
|
ACCOUNT = 'account',
|
|
@@ -12,11 +12,6 @@ enum AuditType {
|
|
|
ROLE = 'role'
|
|
|
}
|
|
|
|
|
|
-const auditAbbr = {
|
|
|
- a_: AuditType.ACCOUNT,
|
|
|
- i_: AuditType.INSTITUTION,
|
|
|
- r_: AuditType.ROLE
|
|
|
-}
|
|
|
const auditTypeOptions = [
|
|
|
{ label: '用户', value: AuditType.ACCOUNT },
|
|
|
{ label: '单位角色', value: AuditType.INSTITUTION }
|
|
@@ -24,14 +19,20 @@ const auditTypeOptions = [
|
|
|
]
|
|
|
|
|
|
type MemberItemProps = {
|
|
|
- value: string[]
|
|
|
- onChange: (value?: string) => void
|
|
|
+ value: {
|
|
|
+ type: AuditType
|
|
|
+ value: string | string[]
|
|
|
+ }
|
|
|
+ onChange: (value?: { type: AuditType; value: string[] }) => void
|
|
|
}
|
|
|
|
|
|
type iState = {
|
|
|
auditType: AuditType
|
|
|
memberOptions: string[]
|
|
|
- members: string[]
|
|
|
+ members: {
|
|
|
+ type: AuditType
|
|
|
+ value: string | string[]
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
const filterTreeNodes = (mode: AuditType, tree: string[]) =>
|
|
@@ -40,14 +41,14 @@ const filterTreeNodes = (mode: AuditType, tree: string[]) =>
|
|
|
// 重新拼装id, 根据AuditType加上不同的前缀(后端同步前缀格式)
|
|
|
switch (mode) {
|
|
|
case AuditType.ACCOUNT:
|
|
|
- newItem.value = `a_${item.ID}`
|
|
|
- newItem.key = `a_${item.ID}`
|
|
|
+ newItem.value = item.ID
|
|
|
+ newItem.key = item.ID
|
|
|
break
|
|
|
case AuditType.INSTITUTION:
|
|
|
- newItem.value = `i_${item.institutionID}`
|
|
|
+ newItem.value = item.institutionID
|
|
|
break
|
|
|
default:
|
|
|
- newItem.value = `r_${item.ID}`
|
|
|
+ newItem.value = item.ID
|
|
|
break
|
|
|
}
|
|
|
if (isArray(item.children)) {
|
|
@@ -59,19 +60,10 @@ const filterTreeNodes = (mode: AuditType, tree: string[]) =>
|
|
|
})
|
|
|
const MemberItem: React.FC<MemberItemProps> = ({ value, onChange }) => {
|
|
|
const [state, setState] = useState<iState>({
|
|
|
- auditType: AuditType.ACCOUNT,
|
|
|
+ auditType: value?.type || AuditType.ACCOUNT,
|
|
|
memberOptions: [],
|
|
|
members: value
|
|
|
})
|
|
|
- useEffect(() => {
|
|
|
- const findAuditType = () => {
|
|
|
- const abbr = value?.[0].slice(0, 2)
|
|
|
- if (auditAbbr[abbr]) {
|
|
|
- setState({ ...state, auditType: auditAbbr[abbr] })
|
|
|
- }
|
|
|
- }
|
|
|
- findAuditType()
|
|
|
- }, [])
|
|
|
useRequest(
|
|
|
() => {
|
|
|
let requestFn: Nullable<() => Promise<void>> = null
|
|
@@ -90,10 +82,6 @@ const MemberItem: React.FC<MemberItemProps> = ({ value, onChange }) => {
|
|
|
{
|
|
|
refreshDeps: [state.auditType],
|
|
|
onSuccess(data: { items: any[] }) {
|
|
|
- console.log(
|
|
|
- filterTreeNodes(state.auditType, state.auditType === AuditType.ACCOUNT ? data : data.items)
|
|
|
- )
|
|
|
-
|
|
|
setState({
|
|
|
...state,
|
|
|
memberOptions: filterTreeNodes(
|
|
@@ -106,11 +94,12 @@ const MemberItem: React.FC<MemberItemProps> = ({ value, onChange }) => {
|
|
|
)
|
|
|
const toggleChange = value => {
|
|
|
if (value) {
|
|
|
- onChange?.(value)
|
|
|
+ onChange?.({ type: state.auditType, value })
|
|
|
}
|
|
|
- setState({ ...state, members: value })
|
|
|
+ setState({ ...state, members: { ...state.members, value } })
|
|
|
}
|
|
|
- const toggleAuditType = (value: AuditType) => setState({ ...state, auditType: value, members: [] })
|
|
|
+ const toggleAuditType = (value: AuditType) =>
|
|
|
+ setState({ ...state, auditType: value, members: { type: value, value: [] } })
|
|
|
|
|
|
return (
|
|
|
<div>
|
|
@@ -122,7 +111,7 @@ const MemberItem: React.FC<MemberItemProps> = ({ value, onChange }) => {
|
|
|
/>
|
|
|
{state.auditType === AuditType.ACCOUNT ? (
|
|
|
<TreeSelect
|
|
|
- value={state.members}
|
|
|
+ value={state.members?.value.map(item => item.ID)}
|
|
|
treeData={state.memberOptions}
|
|
|
onChange={toggleChange}
|
|
|
multiple
|
|
@@ -131,7 +120,7 @@ const MemberItem: React.FC<MemberItemProps> = ({ value, onChange }) => {
|
|
|
/>
|
|
|
) : (
|
|
|
<Select
|
|
|
- value={state.members}
|
|
|
+ value={state.members?.value.map(item => item.ID)}
|
|
|
options={state.memberOptions}
|
|
|
onChange={toggleChange}
|
|
|
fieldNames={{ label: 'title' }}
|