|
|
@@ -10,9 +10,27 @@ import ChangeTreeSelect from './components/ChangeTreeSelect'
|
|
|
import ChangeDatePicker from './components/ChangeDatePicker'
|
|
|
import './index.less'
|
|
|
import { isArray, isNull } from '@/utils/is'
|
|
|
+import classNames from 'classnames'
|
|
|
+import type { ActionPayload } from '@/types/typing'
|
|
|
+import type { EditCellType } from './editableForm'
|
|
|
|
|
|
const extraValArr = ['cascader', 'select', 'treeSelect'] // 需要设置ExtraVal的类型
|
|
|
-const EditableFormItem = ({
|
|
|
+
|
|
|
+type EditableFormItemProps<T> = {
|
|
|
+ type: ActionPayload
|
|
|
+ label: string
|
|
|
+ dataSource: T
|
|
|
+ editable: boolean
|
|
|
+ key: keyof T
|
|
|
+ dataIndex: keyof T
|
|
|
+ span: number
|
|
|
+ editCellType: EditCellType
|
|
|
+ customCell?: () => React.ReactNode
|
|
|
+ requestUrl?: string
|
|
|
+ dataField: string
|
|
|
+}
|
|
|
+
|
|
|
+function EditableFormItem<T>({
|
|
|
type,
|
|
|
label,
|
|
|
dataSource,
|
|
|
@@ -21,11 +39,12 @@ const EditableFormItem = ({
|
|
|
editable,
|
|
|
editCellType,
|
|
|
requestUrl,
|
|
|
- customCell
|
|
|
-}) => {
|
|
|
+ customCell,
|
|
|
+ dataField
|
|
|
+}: EditableFormItemProps<T>) {
|
|
|
const dispatch = useDispatch()
|
|
|
const record = dataSource[dataIndex]
|
|
|
- const dataId = dataSource.id
|
|
|
+ const dataId = dataSource[dataField]
|
|
|
const options = useOptions(dataIndex)
|
|
|
const [editing, setEditing] = useState(false)
|
|
|
const iRef = useRef(null)
|
|
|
@@ -89,9 +108,7 @@ const EditableFormItem = ({
|
|
|
if (extraValArr.includes(editCellType)) {
|
|
|
if (Array.isArray(v)) {
|
|
|
return record?.reduce((prev, curr) => {
|
|
|
- return `${prev}${prev ? ',' : ''}${
|
|
|
- options?.find(item => item.value === curr)?.label || ''
|
|
|
- }`
|
|
|
+ return `${prev}${prev ? ',' : ''}${options?.find(item => item.value === curr)?.label || ''}`
|
|
|
}, '')
|
|
|
}
|
|
|
return findTreeNode(options, v)
|
|
|
@@ -171,9 +188,7 @@ const EditableFormItem = ({
|
|
|
cell = <ChangeSelect ref={iRef} defaultValue={state.val} options={options} onSave={save} />
|
|
|
break
|
|
|
case 'treeSelect':
|
|
|
- cell = (
|
|
|
- <ChangeTreeSelect ref={iRef} defaultValue={state.val} options={options} onSave={save} />
|
|
|
- )
|
|
|
+ cell = <ChangeTreeSelect ref={iRef} defaultValue={state.val} options={options} onSave={save} />
|
|
|
break
|
|
|
case 'textarea':
|
|
|
cell = (
|
|
|
@@ -188,12 +203,7 @@ const EditableFormItem = ({
|
|
|
break
|
|
|
case 'datePicker':
|
|
|
cell = (
|
|
|
- <ChangeDatePicker
|
|
|
- defaultOpen={true}
|
|
|
- onSave={save}
|
|
|
- defaultValue={state.val}
|
|
|
- allowClear={false}
|
|
|
- />
|
|
|
+ <ChangeDatePicker defaultOpen={true} onSave={save} defaultValue={state.val} allowClear={false} />
|
|
|
)
|
|
|
break
|
|
|
default:
|
|
|
@@ -215,10 +225,7 @@ const EditableFormItem = ({
|
|
|
}
|
|
|
|
|
|
cell = (
|
|
|
- <div
|
|
|
- className={['editable-cell-value-wrap', !editable ? 'disable' : ''].join(' ')}
|
|
|
- onClick={toggleEdit}
|
|
|
- >
|
|
|
+ <div className={classNames('editable-cell-value-wrap', { disable: !editable })} onClick={toggleEdit}>
|
|
|
{content}
|
|
|
</div>
|
|
|
)
|