Commit 801f52b4 authored by shenshaokai's avatar shenshaokai

fix: copy标品230130版本TableOperation代码修复TableOperationAuth组件按钮权限显示问题

parent f2ff8a88
......@@ -4,11 +4,10 @@
import React from 'react'
import { Button, Dropdown, Menu } from 'antd'
import { CaretDownOutlined } from '@ant-design/icons'
import { getIntl } from 'umi';
import AuthButton from '@/components/AuthButton'
import { getIntl } from 'umi'
import { AuthUrl } from '../AuthButton/AuthUrl'
const intl = getIntl();
const intl = getIntl()
/**
* 表格行操作
......@@ -16,63 +15,67 @@ const intl = getIntl();
* 操作按钮大于两项 显示更多
*/
type IButtonTextFieldMap = Record<string, boolean>;
type IOperationHandler = Record<string, any>;
type IButtonPermissionsMap = Record<string, string>;
type IButtonTextFieldMap = Record<string, boolean>
type IOperationHandler = Record<string, any>
type IButtonPermissionsMap = Record<string, string>
export interface TableOperationProps {
/** 按钮文本和字段值映射 */
buttonTextFieldMap: IButtonTextFieldMap,
buttonTextFieldMap: IButtonTextFieldMap
/** 按钮文本和操作函数映射 */
operationHandler: IOperationHandler,
operationHandler: IOperationHandler
/** 按钮权限code和操作文本映射 */
buttonPermissionsMap?: IButtonPermissionsMap,
buttonPermissionsMap?: IButtonPermissionsMap
/** 菜单父级关联code */
menuCode?: string,
menuCode?: string
}
const TableOperation: React.FC<TableOperationProps> = (props) =>
{
const { buttonTextFieldMap, operationHandler, buttonPermissionsMap = null, menuCode = null } = props
const keyNames = Object.keys(buttonTextFieldMap)
return (<>
{
Object.values(buttonTextFieldMap).filter(Boolean).length > 2
?
<>
<AuthButton btnCode={(buttonPermissionsMap && buttonPermissionsMap[keyNames[0]]) || ''}>
<Button type='link' onClick={operationHandler[keyNames[0]]}>{keyNames[0]}</Button>
</AuthButton>
const TableOperation: React.FC<TableOperationProps> = (props) => {
const { buttonTextFieldMap, operationHandler, buttonPermissionsMap = null } = props
<Dropdown overlay={
<Menu>
const validButtonWord: string[] = []
for (const key in buttonTextFieldMap) {
if (buttonTextFieldMap[key]) {
validButtonWord.push(key)
}
}
{
keyNames.slice(1, keyNames.length).map((item, i) => buttonTextFieldMap[item] ? (
<Menu.Item key={`menuItem${i}`}>
const buttonElementArray: (JSX.Element | null)[] = validButtonWord
.map((item, index) => {
const show = buttonPermissionsMap ? AuthUrl(buttonPermissionsMap[item] || '') : true
return show ? (
<Button type="link" onClick={operationHandler[item]}>
{item}
</Button>
) : null
})
.filter(Boolean)
<AuthButton btnCode={(buttonPermissionsMap && buttonPermissionsMap[item]) || ''}>
<Button type='link' onClick={operationHandler[item]}>{item}</Button>
</AuthButton>
</Menu.Item>
) : null)
}
</Menu>
}>
<a className="ant-dropdown-link" onClick={e => e.preventDefault()}>
return (
<>
{buttonElementArray.length > 2 ? (
<>
{buttonElementArray[0]}
<Dropdown
overlay={
<Menu>
{buttonElementArray.slice(1, buttonElementArray.length).map((element, index) => (
<Menu.Item key={`table_opition_element_${index}`}>{element}</Menu.Item>
))}
</Menu>
}
>
<a className="ant-dropdown-link" onClick={(e) => e.preventDefault()}>
{intl.formatMessage({ id: 'components.gengduo' })} <CaretDownOutlined />
</a>
</Dropdown>
</>
:
keyNames.map((item, i) => (buttonTextFieldMap[item] ?
<AuthButton btnCode={(buttonPermissionsMap && buttonPermissionsMap[item]) || ''} key={`btnItem${i}`}>
<Button type='link' onClick={operationHandler[item]}>{item}</Button>
</AuthButton>
: null))
}
</>)
) : (
buttonElementArray.map((element, index) => (
<a key={`table_opition_element_${index}`}>{element}</a>
))
)}
</>
)
}
TableOperation.defaultProps = {}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment