@flatbiz/antd 4.5.21 → 4.5.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
.editable-table-pro .editable-text-view.ant-typography{margin-bottom:0}.editable-table-pro:not(.et-empty-show-large) .ant-table-placeholder .ant-empty{align-items:center;display:flex;justify-content:center;margin:0}.editable-table-pro:not(.et-empty-show-large) .ant-table-placeholder .ant-empty-image{height:25px;margin:0;width:50px}.editable-table-pro .ant-table-cell-with-append .ant-table-row-expand-icon{margin-top:7px}
|
|
1
|
+
.editable-table-pro .editable-text-view.ant-typography{margin-bottom:0}.editable-table-pro:not(.et-empty-show-large) .ant-table-placeholder .ant-empty{align-items:center;display:flex;justify-content:center;margin:0}.editable-table-pro:not(.et-empty-show-large) .ant-table-placeholder .ant-empty-image{height:25px;margin:0;width:50px}.editable-table-pro-layout1 .ant-table-cell-with-append .ant-table-row-expand-icon{margin-top:7px}
|
|
@@ -10,5 +10,5 @@ import './../text-symbol-wrapper/index.css';
|
|
|
10
10
|
import './../tips-wrapper/index.css';
|
|
11
11
|
import './index.css';
|
|
12
12
|
/*! @flatjs/forge MIT @flatbiz/antd */
|
|
13
|
-
import e from"@ant-design/icons/es/icons/PlusOutlined";import{classNames as r}from"@dimjs/utils/cjs/class-names";import{_ as n}from"../_rollupPluginBabelHelpers-a0769acd.js";import{hooks as
|
|
13
|
+
import e from"@ant-design/icons/es/icons/PlusOutlined";import{classNames as r}from"@dimjs/utils/cjs/class-names";import{_ as n}from"../_rollupPluginBabelHelpers-a0769acd.js";import{hooks as t}from"@wove/react/cjs/hooks";import{isArray as a}from"@dimjs/lang/cjs/is-array";import{cloneState as l}from"@dimjs/model";import{toArray as i,arrayReorder as o,isUndefinedOrNull as s}from"@flatbiz/utils";import{Form as u,Table as d,message as p}from"antd";import{useState as m,useRef as c,useMemo as f,isValidElement as v}from"react";import{ButtonWrapper as g}from"../button-wrapper/index.js";import{fbaHooks as b}from"../fba-hooks/index.js";import{fbaUtils as h}from"../fba-utils/index.js";import{FormItemWrapper as y}from"../form-item-wrapper/index.js";import{TextSymbolWrapper as j}from"../text-symbol-wrapper/index.js";import{TipsWrapper as x}from"../tips-wrapper/index.js";import{jsx as C,jsxs as w}from"react/jsx-runtime";import"@ant-design/icons/es/icons/LoadingOutlined";import"@dimjs/lang/cjs/is-promise";import"../index-7f4ad045.js";import"antd/es/locale/en_US";import"antd/es/locale/zh_CN";import"dayjs";import"dayjs/locale/en";import"dayjs/locale/zh-cn";import"dayjs/plugin/advancedFormat";import"dayjs/plugin/customParseFormat";import"dayjs/plugin/localeData";import"dayjs/plugin/utc";import"dayjs/plugin/weekday";import"dayjs/plugin/weekOfYear";import"dayjs/plugin/weekYear";import"@dimjs/utils/cjs/extend";import"../use-responsive-point-21b8c601.js";import"../pre-defined-class-name/index.js";import"@ant-design/icons/es/icons/QuestionCircleOutlined";var R=function R(F){var P;var k=u.useFormInstance();var A=m([]),I=A[0],V=A[1];var N=i(F.formListName);var T=c({});var U=c({});var L=c();var B=F.uidFieldKey;var E=F.childrenColumnName||"children";var K=F.expandedIconLayout||"layout1";var O=F.formListCompleteName||N;var W=u.useWatch(O,k);var q=f((function(){if(!W)return[];function e(r,n,t){r.forEach((function(r,a){if(!r[B]){console.error(r,"数据中未查询到唯一值")}else{U.current[r[B]]={level:n,parentUid:t,index:a};T.current[r[B]]=r;e(r[E]||[],n+1,r[B])}}))}U.current={};T.current={};e(a(W)?W:[],1);return W}),[E,W,B]);b.useEffectCustom((function(){V(F.expandedRowKeys||[])}),[JSON.stringify(F.expandedRowKeys||[])]);var z=t.useCallbackRef((function(e){var r=e[B];var n=U.current[r];var t=[];while(n){t.push(n.index);if(n.level===1){break}n=n.parentUid?U.current[n.parentUid]:undefined}var a=[];t.reverse().forEach((function(e,r){a.push(e);if(r<t.length-1){a.push(E)}}));return a}));var D=t.useCallbackRef((function(e,r,n){var t=T.current[e];if(t){if(t.level===1){var a;(a=L.current)==null?void 0:a.add(r,n);return}t[E]=t[E]||[];if(n==undefined){t[E].push(r)}else{t[E].splice(n,0,r)}var l=new Set(I);l.add(t[B]);V([].concat(Array.from(l)));h.setFormFieldsAndTriggerValuesChange(k,[{name:O,value:[].concat(W)}])}}));var S=t.useCallbackRef((function(e,r){var n=U.current[e];if(n.level===1){var t;(t=L.current)==null?void 0:t.remove(r);return}var a=n.parentUid;if(!a){W.splice(r,1)}else{var i=T.current[a];i[E].splice(r,1);if(i[E].length===0){delete i[E]}}h.setFormFieldsAndTriggerValuesChange(k,[{name:O,value:l(W)}])}));var _=t.useCallbackRef((function(e,r,n){if(r===n||n<0)return;var t=U.current[e];var a=t.parentUid;if(!a){var l=o(W,r,n);h.setFormFieldsAndTriggerValuesChange(k,[{name:O,value:l}])}else{var i=T.current[a];i[E]=o(i[E],r,n);h.setFormFieldsAndTriggerValuesChange(k,[{name:O,value:[].concat(W)}])}}));var Y=t.useCallbackRef((function(e,r){h.setFormFieldsAndTriggerValuesChange(k,r.map((function(r){return{name:[].concat(O,e,i(r.name)),value:r.value}})))}));var H=t.useCallbackRef((function(e,r){Y(e,[{name:E,value:r}])}));var J=t.useCallbackRef((function(e,r){return new Promise((function(n,t){return Promise.resolve(k.validateFields(r.map((function(r){return[].concat(e,i(r))})))).then((function(e){try{return n()}catch(e){return t(e)}}),t)}))}));var Q=f((function(){return F.columns.map((function(e){var r;var t=e.title;var a=v(t)||typeof t==="string";var l=t;if(e.tipsWrapperProps&&a){if(typeof e.tipsWrapperProps==="string"){l=C(x,{tipType:"popover",popoverProps:{content:e.tipsWrapperProps},children:t})}else{l=C(x,n({},e.tipsWrapperProps,{children:t}))}}var o=e.required;if(!o&&typeof e.formItemProps==="object"&&(r=e.formItemProps.rules)!=null&&r.length){o=!!e.formItemProps.rules.find((function(e){return!!e["required"]}))}return n({onCell:function e(){var r;return{valign:((r=F.tableProps)==null?void 0:r.cellVerticalAlign)||"middle"}}},e,{title:o?C(j,{style:{marginLeft:e.align==="center"?undefined:10},text:l,position:"before",symbolType:"required"}):l,render:function r(t,a,l){if(s(e.render)){return t}var u=a[B];var d=i(e["dataIndex"]);var p=z(a);var m=U.current[u];var c=typeof(e==null?void 0:e.editable)==="function"?e==null?void 0:e.editable(a,l):e==null?void 0:e.editable;var f=[].concat(O,p);var v={editable:c,add:D.bind(null,u),remove:S.bind(null,u),move:_.bind(null,u),level:m.level,parentItem:m.parentUid?U.current[m.parentUid]:null,tableRowFormItemName:p,tableRowFormItemCompleteName:f,setCurrentRowTargetField:Y.bind(null,p),setCurrentRowChildrenValue:H.bind(null,p),validateRowFields:J.bind(null,f)};if(c===true){var g,b;var h=typeof e.formItemProps==="function"?e.formItemProps(t,a,l,v):e.formItemProps;if(!((g=h)!=null&&(g=g.rules)!=null&&g.length)&&o){h=n({},h,{rules:[{required:true,message:""}]})}return C(y,n({},h,{name:[].concat(p,d),style:n({marginBottom:0},(b=h)==null?void 0:b.style),children:e.render==null?void 0:e.render(t,a,l,v)}))}return e.render==null?void 0:e.render(t,a,l,v)}})}))}),[F.columns,(P=F.tableProps)==null?void 0:P.cellVerticalAlign,B,z,O,D,S,_,Y,H,J]);var G=r("editable-table-pro",{"editable-table-pro-layout1":K==="layout1"},F.className);return C("div",{className:G,style:F.style,children:C(u.List,{name:N,rules:F.rules,children:function r(t,a,l){var i;var o=l.errors;L.current=a;return w("div",{style:{borderRadius:"6px",border:o!=null&&o.length?"1px solid #ff4d4f":"1px solid transparent"},children:[F.tableBeforeAreaRender==null?void 0:F.tableBeforeAreaRender(a,t.length),C(d,n({scroll:{x:"max-content"},pagination:false,size:"small"},F.tableProps,{expandable:n({expandedRowKeys:I,onExpandedRowsChange:function e(r){V(r)}},(i=F.tableProps)==null?void 0:i.expandable,{childrenColumnName:E}),columns:Q,dataSource:q,rowKey:B})),C(g,{block:true,hidden:F.hiddenFooterBtn,type:"dashed",icon:C(e,{}),style:{marginTop:15},onClick:function e(){var r=F.addRowDefaultValues==null?void 0:F.addRowDefaultValues();if(!(r!=null&&r[B])){void p.error("新增行默认值必须包含唯一值字段【"+B+"】,通过 addRowDefaultValues 设置");return}a.add(r)},children:"新增"}),F.tableAfterAreaRender==null?void 0:F.tableAfterAreaRender(a,t.length),o.length?C(u.ErrorList,{errors:[C("div",{style:{color:"#ff4d4f",padding:"5px"},children:o},"0")]}):null]})}})})};export{R as EditableTablePro};
|
|
14
14
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/editable-table-pro/editable-table-pro.tsx"],"sourcesContent":["import { PlusOutlined } from '@ant-design/icons';\nimport { isArray } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { classNames } from '@dimjs/utils';\nimport type { TAny, TPlainObject } from '@flatbiz/utils';\nimport { arrayReorder, isUndefinedOrNull, toArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Form, message, Table, type FormListOperation, type TableProps } from 'antd';\nimport type { FormListProps } from 'antd/es/form';\nimport type { ColumnsType } from 'antd/es/table';\nimport type { ReactElement } from 'react';\nimport { isValidElement, useMemo, useRef, useState } from 'react';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { fbaUtils } from '../fba-utils';\nimport { FormItemWrapper } from '../form-item-wrapper';\nimport { TextSymbolWrapper } from '../text-symbol-wrapper';\nimport { TipsWrapper } from '../tips-wrapper';\nimport './style.less';\nimport type {\n EditableTableProColumnItem,\n EditableTableProDataIndex,\n EditableTableProOperation,\n} from './type';\n\ntype dataSourceRelativeItem = {\n level: number;\n parentUid?: string | number;\n index: number;\n};\n\nexport type EditableTableProProps = {\n columns: EditableTableProColumnItem[];\n /**\n * 当前Edittable处在formList内部时(必填),完整formItem的name\n * ```\n * 例如 处在formList内部\n * 1. formListName=[0,dataList]\n * 2. formListCompleteName=[xxxList, 0, dataList]\n * ```\n */\n formListCompleteName?: Array<string | number>;\n /** Form.List name */\n formListName: Array<string | number> | string;\n /** 唯一值字段Key */\n uidFieldKey: string;\n /** 指定树形结构的列名,默认值:children */\n childrenColumnName?: string;\n /** 表格组件配置 */\n tableProps?: Omit<TableProps<TPlainObject>, 'dataSource' | 'columns' | 'rowKey'> & {\n // 如果重写了columns.onCell,则此配置失效\n cellVerticalAlign?: 'baseline' | 'middle' | 'top' | 'bottom';\n };\n /**\n * Form.List rules\n * ```\n rules={[\n {\n validator: async (_, names) => {\n if (!names || names.length < 2) {\n return Promise.reject(new Error('At least 2 passengers'));\n }\n },\n },\n ]}\n * ```\n */\n rules?: FormListProps['rules'];\n className?: string;\n style?: React.CSSProperties;\n\n /**`默认新增按钮`新增行默认值,hiddenFooterBtn != true 有效 */\n addRowDefaultValues?: () => TPlainObject;\n /** 隐藏底部`新增`按钮 */\n hiddenFooterBtn?: boolean;\n /** 表格顶部区域渲染 */\n tableBeforeAreaRender?: (formListOperation: FormListOperation, nextRowIndex: number) => ReactElement | null;\n /** 表格底部区域渲染 */\n tableAfterAreaRender?: (formListOperation: FormListOperation, nextRowIndex: number) => ReactElement | null;\n};\n\n/**\n * 使用FormList实现可编辑表格\n * ```\n * 1. 必须在外部包裹Form组件\n * 2. 表格数据源数组中必须存在唯一值字段,通过uidFieldKey配置\n * 3. 可嵌套编辑,数据嵌套的节点名称可通过 childrenColumnName设置,默认:children\n * 4. 行内需要联动逻辑可使用 column.render.operation.setCurrentRowTargetField 方法\n * 5. 在多级编辑中,可通过 column.render.operation.level 判断当前行数据层级\n * 6. 不存在多级的情况下,可使用DragEditableTablePro组件实现拖拽排序\n * 7. 存在多级的情况下,可通过 column.render.operation.move 方法实现同一级内移动\n *\n * demo\n * https://fex.qa.tcshuke.com/docs/admin/main/table/row-editable1\n * https://fex.qa.tcshuke.com/docs/admin/main/table/row-editable2\n * https://fex.qa.tcshuke.com/docs/admin/main/table/row-editable4\n * ```\n */\nexport const EditableTablePro = (props: EditableTableProProps) => {\n const form = Form.useFormInstance();\n const [expandedRowKeys, setExpandedRowKeys] = useState<string[]>([]);\n const formListName = toArray<string | number>(props.formListName);\n const dataSourceUidMap = useRef<Record<string, TPlainObject>>({});\n const dataSourceUidMapFt = useRef<Record<string | number, dataSourceRelativeItem>>({});\n const formListOperationRef = useRef<FormListOperation>();\n const uidFieldKey = props.uidFieldKey;\n const childrenColumnName = props.childrenColumnName || 'children';\n\n const formListCompleteName = props.formListCompleteName || formListName;\n\n const dataSource = Form.useWatch(formListCompleteName, form);\n\n const dataSourceFt = useMemo(() => {\n if (!dataSource) return [];\n function deep(itemList: TPlainObject[], level: number, parentUid?: string | number) {\n itemList.forEach((item, itemIndex) => {\n if (!item[uidFieldKey]) {\n console.error(item, '数据中未查询到唯一值');\n } else {\n dataSourceUidMapFt.current[item[uidFieldKey]] = {\n level,\n parentUid,\n index: itemIndex,\n };\n dataSourceUidMap.current[item[uidFieldKey]] = item;\n deep(item[childrenColumnName] || [], level + 1, item[uidFieldKey]);\n }\n });\n }\n dataSourceUidMapFt.current = {};\n dataSourceUidMap.current = {};\n deep(isArray(dataSource) ? dataSource : [], 1);\n return dataSource;\n }, [childrenColumnName, dataSource, uidFieldKey]);\n\n const getFormItemName = hooks.useCallbackRef((record: TPlainObject) => {\n const uid = record[uidFieldKey];\n let target: dataSourceRelativeItem | undefined = dataSourceUidMapFt.current[uid];\n\n const indexes: number[] = [];\n while (target) {\n indexes.push(target.index);\n if (target.level === 1) {\n break;\n }\n target = target.parentUid ? dataSourceUidMapFt.current[target.parentUid] : undefined;\n }\n const arr: Array<string | number> = [];\n indexes.reverse().forEach((item, index) => {\n arr.push(item);\n if (index < indexes.length - 1) {\n arr.push(childrenColumnName);\n }\n });\n return arr;\n });\n\n const addItem = hooks.useCallbackRef((uid: string, defaultValue: TPlainObject, insertIndex?: number) => {\n const target = dataSourceUidMap.current[uid];\n\n if (target) {\n if (target.level === 1) {\n /** 通过 formListOperation.add 可以使得 Form.List的 rules 生效 */\n formListOperationRef.current?.add(defaultValue, insertIndex);\n return;\n }\n target[childrenColumnName] = target[childrenColumnName] || [];\n if (insertIndex == undefined) {\n target[childrenColumnName].push(defaultValue);\n } else {\n target[childrenColumnName].splice(insertIndex, 0, defaultValue);\n }\n const expandedRowKeysSet = new Set(expandedRowKeys);\n expandedRowKeysSet.add(target[uidFieldKey]);\n setExpandedRowKeys([...Array.from(expandedRowKeysSet)]);\n fbaUtils.setFormFieldsAndTriggerValuesChange(form, [\n {\n name: formListCompleteName,\n value: [...dataSource],\n },\n ]);\n }\n });\n\n const deleteItem = hooks.useCallbackRef((uid: string | number, index: number) => {\n const target = dataSourceUidMapFt.current[uid];\n if (target.level === 1) {\n /** 通过 formListOperation.remove 可以使得 Form.List的 rules 生效 */\n formListOperationRef.current?.remove(index);\n return;\n }\n const parentUid = target.parentUid;\n if (!parentUid) {\n dataSource.splice(index, 1);\n } else {\n const parentTarget = dataSourceUidMap.current[parentUid];\n parentTarget[childrenColumnName].splice(index, 1);\n if (parentTarget[childrenColumnName].length === 0) {\n delete parentTarget[childrenColumnName];\n }\n }\n fbaUtils.setFormFieldsAndTriggerValuesChange(form, [\n {\n name: formListCompleteName,\n value: cloneState(dataSource),\n },\n ]);\n });\n\n const moveItem = hooks.useCallbackRef((uid: string | number, fromIndex: number, toIndex: number) => {\n if (fromIndex === toIndex || toIndex < 0) return;\n const target = dataSourceUidMapFt.current[uid];\n const parentUid = target.parentUid;\n if (!parentUid) {\n const result = arrayReorder(dataSource, fromIndex, toIndex);\n fbaUtils.setFormFieldsAndTriggerValuesChange(form, [\n {\n name: formListCompleteName,\n value: result,\n },\n ]);\n } else {\n const parentTarget = dataSourceUidMap.current[parentUid];\n parentTarget[childrenColumnName] = arrayReorder(parentTarget[childrenColumnName], fromIndex, toIndex);\n\n fbaUtils.setFormFieldsAndTriggerValuesChange(form, [\n {\n name: formListCompleteName,\n value: [...dataSource],\n },\n ]);\n }\n });\n\n const setCurrentRowTargetField = hooks.useCallbackRef(\n (\n formItemPrevName: Array<string | number>,\n dataIndexConfigs: {\n name: EditableTableProDataIndex;\n value?: TAny;\n }[],\n ) => {\n fbaUtils.setFormFieldsAndTriggerValuesChange(\n form,\n dataIndexConfigs.map((item) => {\n return {\n name: [...formListCompleteName, ...formItemPrevName, ...toArray<string | number>(item.name)],\n value: item.value,\n };\n }),\n );\n },\n );\n\n const setCurrentRowChildrenValue = hooks.useCallbackRef(\n (formItemPrevName: Array<string | number>, value?: TPlainObject[]) => {\n setCurrentRowTargetField(formItemPrevName, [{ name: childrenColumnName, value }]);\n },\n );\n\n const columns = useMemo(() => {\n return props.columns.map((column) => {\n const title = column.title;\n const support = isValidElement(title) || typeof title === 'string';\n let titleRender: ReactElement | string | undefined = title;\n if (column.tipsWrapperProps && support) {\n if (typeof column.tipsWrapperProps === 'string') {\n titleRender = (\n <TipsWrapper tipType=\"popover\" popoverProps={{ content: column.tipsWrapperProps }}>\n {title}\n </TipsWrapper>\n );\n } else {\n titleRender = <TipsWrapper {...column.tipsWrapperProps}>{title}</TipsWrapper>;\n }\n }\n return {\n onCell: () => {\n return {\n valign: props.tableProps?.cellVerticalAlign || 'middle',\n };\n },\n ...column,\n title: column.required ? (\n <TextSymbolWrapper\n style={{ marginLeft: column.align === 'center' ? undefined : 10 }}\n text={titleRender}\n position=\"before\"\n symbolType=\"required\"\n />\n ) : (\n titleRender\n ),\n render: (value, record, index) => {\n if (isUndefinedOrNull(column.render)) {\n return value;\n }\n const uid = record[uidFieldKey];\n const dataIndex = toArray<string>(column['dataIndex']);\n const formItemPrevName = getFormItemName(record);\n const dataSourceTarget = dataSourceUidMapFt.current[uid];\n\n const editable =\n typeof column?.editable === 'function' ? column?.editable(record, index) : column?.editable;\n const renderOperationProps: EditableTableProOperation = {\n editable,\n add: addItem.bind(null, uid),\n remove: deleteItem.bind(null, uid),\n move: moveItem.bind(null, uid),\n level: dataSourceTarget.level,\n parentItem: dataSourceTarget.parentUid\n ? dataSourceUidMapFt.current[dataSourceTarget.parentUid]\n : null,\n tableRowFormItemName: formItemPrevName,\n tableRowFormItemCompleteName: [...formListCompleteName, ...formItemPrevName],\n setCurrentRowTargetField: setCurrentRowTargetField.bind(null, formItemPrevName),\n setCurrentRowChildrenValue: setCurrentRowChildrenValue.bind(null, formItemPrevName),\n };\n if (editable === true) {\n const formItemProps =\n typeof column.formItemProps === 'function'\n ? column.formItemProps(value, record, index, renderOperationProps)\n : column.formItemProps;\n\n return (\n <FormItemWrapper\n {...formItemProps}\n name={[...formItemPrevName, ...dataIndex]}\n style={{ marginBottom: 0, ...formItemProps?.style }}\n >\n {column.render?.(value, record, index, renderOperationProps) as React.ReactNode}\n </FormItemWrapper>\n );\n }\n return column.render?.(value, record, index, renderOperationProps);\n },\n };\n }) as ColumnsType<TPlainObject>;\n }, [\n addItem,\n setCurrentRowTargetField,\n deleteItem,\n formListCompleteName,\n getFormItemName,\n moveItem,\n props.columns,\n props.tableProps?.cellVerticalAlign,\n setCurrentRowChildrenValue,\n uidFieldKey,\n ]);\n\n return (\n <div className={classNames('editable-table-pro', props.className)} style={props.style}>\n <Form.List name={formListName} rules={props.rules}>\n {(fields, formListOperation, { errors }) => {\n formListOperationRef.current = formListOperation;\n return (\n <div\n style={{\n borderRadius: '6px',\n border: errors?.length ? '1px solid #ff4d4f' : '1px solid transparent',\n }}\n >\n {props.tableBeforeAreaRender?.(formListOperation, fields.length)}\n <Table\n scroll={{ x: 'max-content' }}\n pagination={false}\n size=\"small\"\n {...props.tableProps}\n expandable={{\n expandedRowKeys: expandedRowKeys,\n onExpandedRowsChange: (expandedRowKeys) => {\n setExpandedRowKeys(expandedRowKeys as string[]);\n },\n ...props.tableProps?.expandable,\n childrenColumnName: childrenColumnName,\n }}\n columns={columns}\n dataSource={dataSourceFt}\n rowKey={uidFieldKey}\n />\n <ButtonWrapper\n block\n hidden={props.hiddenFooterBtn}\n type=\"dashed\"\n icon={<PlusOutlined />}\n style={{ marginTop: 15 }}\n onClick={() => {\n const defaultValues = props.addRowDefaultValues?.();\n if (!defaultValues?.[uidFieldKey]) {\n void message.error(\n `新增行默认值必须包含唯一值字段【${uidFieldKey}】,通过 addRowDefaultValues 设置`,\n );\n return;\n }\n formListOperation.add(defaultValues);\n }}\n >\n 新增\n </ButtonWrapper>\n {props.tableAfterAreaRender?.(formListOperation, fields.length)}\n {errors.length ? (\n <Form.ErrorList\n errors={[\n <div style={{ color: '#ff4d4f', padding: '5px' }} key=\"0\">\n {errors}\n </div>,\n ]}\n />\n ) : null}\n </div>\n );\n }}\n </Form.List>\n </div>\n );\n};\n"],"names":["EditableTablePro","props","_props$tableProps2","form","Form","useFormInstance","_useState","useState","expandedRowKeys","setExpandedRowKeys","formListName","toArray","dataSourceUidMap","useRef","dataSourceUidMapFt","formListOperationRef","uidFieldKey","childrenColumnName","formListCompleteName","dataSource","useWatch","dataSourceFt","useMemo","deep","itemList","level","parentUid","forEach","item","itemIndex","console","error","current","index","_isArray","getFormItemName","_hooks","useCallbackRef","record","uid","target","indexes","push","undefined","arr","reverse","length","addItem","defaultValue","insertIndex","_formListOperationRef","add","splice","expandedRowKeysSet","Set","concat","Array","from","fbaUtils","setFormFieldsAndTriggerValuesChange","name","value","deleteItem","_formListOperationRef2","remove","parentTarget","cloneState","moveItem","fromIndex","toIndex","result","arrayReorder","setCurrentRowTargetField","formItemPrevName","dataIndexConfigs","map","setCurrentRowChildrenValue","columns","column","title","support","isValidElement","titleRender","tipsWrapperProps","_jsx","TipsWrapper","tipType","popoverProps","content","children","_extends","onCell","_props$tableProps","valign","tableProps","cellVerticalAlign","required","TextSymbolWrapper","style","marginLeft","align","text","position","symbolType","render","isUndefinedOrNull","dataIndex","dataSourceTarget","editable","renderOperationProps","bind","move","parentItem","tableRowFormItemName","tableRowFormItemCompleteName","formItemProps","FormItemWrapper","marginBottom","className","_classNames","List","rules","fields","formListOperation","_ref","_props$tableProps3","errors","_jsxs","borderRadius","border","tableBeforeAreaRender","Table","scroll","x","pagination","size","expandable","onExpandedRowsChange","rowKey","ButtonWrapper","block","hidden","hiddenFooterBtn","type","icon","_PlusOutlined","marginTop","onClick","defaultValues","addRowDefaultValues","message","tableAfterAreaRender","ErrorList","color","padding"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/editable-table-pro/editable-table-pro.tsx"],"sourcesContent":["import { PlusOutlined } from '@ant-design/icons';\nimport { isArray } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { classNames } from '@dimjs/utils';\nimport type { TAny, TPlainObject } from '@flatbiz/utils';\nimport { arrayReorder, isUndefinedOrNull, toArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Form, message, Table, type FormListOperation, type TableProps } from 'antd';\nimport type { FormListProps } from 'antd/es/form';\nimport type { ColumnsType } from 'antd/es/table';\nimport type { ReactElement } from 'react';\nimport { isValidElement, useMemo, useRef, useState } from 'react';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { fbaHooks } from '../fba-hooks';\nimport { fbaUtils } from '../fba-utils';\nimport { FormItemWrapper } from '../form-item-wrapper';\nimport { TextSymbolWrapper } from '../text-symbol-wrapper';\nimport { TipsWrapper } from '../tips-wrapper';\nimport './style.less';\nimport type {\n EditableTableProColumnItem,\n EditableTableProDataIndex,\n EditableTableProOperation,\n} from './type';\n\ntype dataSourceRelativeItem = {\n level: number;\n parentUid?: string | number;\n index: number;\n};\n\nexport type EditableTableProProps = {\n columns: EditableTableProColumnItem[];\n /**\n * 当前Edittable处在formList内部时(必填),完整formItem的name\n * ```\n * 例如 处在formList内部\n * 1. formListName=[0,dataList]\n * 2. formListCompleteName=[xxxList, 0, dataList]\n * ```\n */\n formListCompleteName?: Array<string | number>;\n /** Form.List name */\n formListName: Array<string | number> | string;\n /** 唯一值字段Key */\n uidFieldKey: string;\n /** 指定树形结构的列名,默认值:children */\n childrenColumnName?: string;\n /** 表格组件配置 */\n tableProps?: Omit<TableProps<TPlainObject>, 'dataSource' | 'columns' | 'rowKey'> & {\n // 如果重写了columns.onCell,则此配置失效\n cellVerticalAlign?: 'baseline' | 'middle' | 'top' | 'bottom';\n };\n /**\n * Form.List rules\n * ```\n rules={[\n {\n validator: async (_, names) => {\n if (!names || names.length < 2) {\n return Promise.reject(new Error('At least 2 passengers'));\n }\n },\n },\n ]}\n * ```\n */\n rules?: FormListProps['rules'];\n className?: string;\n style?: React.CSSProperties;\n\n /**`默认新增按钮`新增行默认值,hiddenFooterBtn != true 有效 */\n addRowDefaultValues?: () => TPlainObject;\n /** 隐藏底部`新增`按钮 */\n hiddenFooterBtn?: boolean;\n /** 表格顶部区域渲染 */\n tableBeforeAreaRender?: (formListOperation: FormListOperation, nextRowIndex: number) => ReactElement | null;\n /** 表格底部区域渲染 */\n tableAfterAreaRender?: (formListOperation: FormListOperation, nextRowIndex: number) => ReactElement | null;\n /** 展开的行key,一般用于初始化,重新tableProps.expandable.expandedRowKeys后失效 */\n expandedRowKeys?: string[];\n /**\n * 展开图标布局,默认:layout1\n * ```\n * 1. 可编辑表格第一项为可编辑状态时,选 layout1\n * 2. 可编辑表格第一项为非可编辑状态时,选 layout2\n * ```\n */\n expandedIconLayout?: 'layout1' | 'layout2';\n};\n\n/**\n * 使用FormList实现可编辑表格\n * ```\n * 1. 必须在外部包裹Form组件\n * 2. 表格数据源数组中必须存在唯一值字段,通过uidFieldKey配置\n * 3. 可嵌套编辑,数据嵌套的节点名称可通过 childrenColumnName设置,默认:children\n * 4. 行内需要联动逻辑可使用 column.render.operation.setCurrentRowTargetField 方法\n * 5. 在多级编辑中,可通过 column.render.operation.level 判断当前行数据层级\n * 6. 不存在多级的情况下,可使用DragEditableTablePro组件实现拖拽排序\n * 7. 存在多级的情况下,可通过 column.render.operation.move 方法实现同一级内移动\n *\n * demo\n * https://fex.qa.tcshuke.com/docs/admin/main/table/row-editable1\n * https://fex.qa.tcshuke.com/docs/admin/main/table/row-editable2\n * https://fex.qa.tcshuke.com/docs/admin/main/table/row-editable4\n * ```\n */\nexport const EditableTablePro = (props: EditableTableProProps) => {\n const form = Form.useFormInstance();\n const [expandedRowKeys, setExpandedRowKeys] = useState<string[]>([]);\n const formListName = toArray<string | number>(props.formListName);\n const dataSourceUidMap = useRef<Record<string, TPlainObject>>({});\n const dataSourceUidMapFt = useRef<Record<string | number, dataSourceRelativeItem>>({});\n const formListOperationRef = useRef<FormListOperation>();\n const uidFieldKey = props.uidFieldKey;\n const childrenColumnName = props.childrenColumnName || 'children';\n const expandedIconLayout = props.expandedIconLayout || 'layout1';\n\n const formListCompleteName = props.formListCompleteName || formListName;\n\n const dataSource = Form.useWatch(formListCompleteName, form);\n\n const dataSourceFt = useMemo(() => {\n if (!dataSource) return [];\n function deep(itemList: TPlainObject[], level: number, parentUid?: string | number) {\n itemList.forEach((item, itemIndex) => {\n if (!item[uidFieldKey]) {\n console.error(item, '数据中未查询到唯一值');\n } else {\n dataSourceUidMapFt.current[item[uidFieldKey]] = {\n level,\n parentUid,\n index: itemIndex,\n };\n dataSourceUidMap.current[item[uidFieldKey]] = item;\n deep(item[childrenColumnName] || [], level + 1, item[uidFieldKey]);\n }\n });\n }\n dataSourceUidMapFt.current = {};\n dataSourceUidMap.current = {};\n deep(isArray(dataSource) ? dataSource : [], 1);\n return dataSource;\n }, [childrenColumnName, dataSource, uidFieldKey]);\n\n fbaHooks.useEffectCustom(() => {\n setExpandedRowKeys(props.expandedRowKeys || []);\n }, [JSON.stringify(props.expandedRowKeys || [])]);\n\n const getFormItemName = hooks.useCallbackRef((record: TPlainObject) => {\n const uid = record[uidFieldKey];\n let target: dataSourceRelativeItem | undefined = dataSourceUidMapFt.current[uid];\n\n const indexes: number[] = [];\n while (target) {\n indexes.push(target.index);\n if (target.level === 1) {\n break;\n }\n target = target.parentUid ? dataSourceUidMapFt.current[target.parentUid] : undefined;\n }\n const arr: Array<string | number> = [];\n indexes.reverse().forEach((item, index) => {\n arr.push(item);\n if (index < indexes.length - 1) {\n arr.push(childrenColumnName);\n }\n });\n return arr;\n });\n\n const addItem = hooks.useCallbackRef((uid: string, defaultValue: TPlainObject, insertIndex?: number) => {\n const target = dataSourceUidMap.current[uid];\n\n if (target) {\n if (target.level === 1) {\n /** 通过 formListOperation.add 可以使得 Form.List的 rules 生效 */\n formListOperationRef.current?.add(defaultValue, insertIndex);\n return;\n }\n target[childrenColumnName] = target[childrenColumnName] || [];\n if (insertIndex == undefined) {\n target[childrenColumnName].push(defaultValue);\n } else {\n target[childrenColumnName].splice(insertIndex, 0, defaultValue);\n }\n const expandedRowKeysSet = new Set(expandedRowKeys);\n expandedRowKeysSet.add(target[uidFieldKey]);\n setExpandedRowKeys([...Array.from(expandedRowKeysSet)]);\n fbaUtils.setFormFieldsAndTriggerValuesChange(form, [\n {\n name: formListCompleteName,\n value: [...dataSource],\n },\n ]);\n }\n });\n\n const deleteItem = hooks.useCallbackRef((uid: string | number, index: number) => {\n const target = dataSourceUidMapFt.current[uid];\n if (target.level === 1) {\n /** 通过 formListOperation.remove 可以使得 Form.List的 rules 生效 */\n formListOperationRef.current?.remove(index);\n return;\n }\n const parentUid = target.parentUid;\n if (!parentUid) {\n dataSource.splice(index, 1);\n } else {\n const parentTarget = dataSourceUidMap.current[parentUid];\n parentTarget[childrenColumnName].splice(index, 1);\n if (parentTarget[childrenColumnName].length === 0) {\n delete parentTarget[childrenColumnName];\n }\n }\n fbaUtils.setFormFieldsAndTriggerValuesChange(form, [\n {\n name: formListCompleteName,\n value: cloneState(dataSource),\n },\n ]);\n });\n\n const moveItem = hooks.useCallbackRef((uid: string | number, fromIndex: number, toIndex: number) => {\n if (fromIndex === toIndex || toIndex < 0) return;\n const target = dataSourceUidMapFt.current[uid];\n const parentUid = target.parentUid;\n if (!parentUid) {\n const result = arrayReorder(dataSource, fromIndex, toIndex);\n fbaUtils.setFormFieldsAndTriggerValuesChange(form, [\n {\n name: formListCompleteName,\n value: result,\n },\n ]);\n } else {\n const parentTarget = dataSourceUidMap.current[parentUid];\n parentTarget[childrenColumnName] = arrayReorder(parentTarget[childrenColumnName], fromIndex, toIndex);\n\n fbaUtils.setFormFieldsAndTriggerValuesChange(form, [\n {\n name: formListCompleteName,\n value: [...dataSource],\n },\n ]);\n }\n });\n\n const setCurrentRowTargetField = hooks.useCallbackRef(\n (\n formItemPrevName: Array<string | number>,\n dataIndexConfigs: {\n name: EditableTableProDataIndex;\n value?: TAny;\n }[],\n ) => {\n fbaUtils.setFormFieldsAndTriggerValuesChange(\n form,\n dataIndexConfigs.map((item) => {\n return {\n name: [...formListCompleteName, ...formItemPrevName, ...toArray<string | number>(item.name)],\n value: item.value,\n };\n }),\n );\n },\n );\n\n const setCurrentRowChildrenValue = hooks.useCallbackRef(\n (formItemPrevName: Array<string | number>, value?: TPlainObject[]) => {\n setCurrentRowTargetField(formItemPrevName, [{ name: childrenColumnName, value }]);\n },\n );\n\n const validateRowFields = hooks.useCallbackRef(\n async (formItemPrevName: Array<string | number>, nameList: EditableTableProDataIndex[]) => {\n await form.validateFields(\n nameList.map((item) => [...formItemPrevName, ...toArray<string | number>(item)]),\n );\n },\n );\n\n const columns = useMemo(() => {\n return props.columns.map((column) => {\n const title = column.title;\n const support = isValidElement(title) || typeof title === 'string';\n let titleRender: ReactElement | string | undefined = title;\n if (column.tipsWrapperProps && support) {\n if (typeof column.tipsWrapperProps === 'string') {\n titleRender = (\n <TipsWrapper tipType=\"popover\" popoverProps={{ content: column.tipsWrapperProps }}>\n {title}\n </TipsWrapper>\n );\n } else {\n titleRender = <TipsWrapper {...column.tipsWrapperProps}>{title}</TipsWrapper>;\n }\n }\n\n let required = column.required;\n\n if (!required && typeof column.formItemProps === 'object' && column.formItemProps.rules?.length) {\n required = !!column.formItemProps.rules.find((item) => !!item['required']);\n }\n\n return {\n onCell: () => {\n return {\n valign: props.tableProps?.cellVerticalAlign || 'middle',\n };\n },\n ...column,\n title: required ? (\n <TextSymbolWrapper\n style={{ marginLeft: column.align === 'center' ? undefined : 10 }}\n text={titleRender}\n position=\"before\"\n symbolType=\"required\"\n />\n ) : (\n titleRender\n ),\n render: (value, record, index) => {\n if (isUndefinedOrNull(column.render)) {\n return value;\n }\n const uid = record[uidFieldKey];\n const dataIndex = toArray<string>(column['dataIndex']);\n const formItemPrevName = getFormItemName(record);\n const dataSourceTarget = dataSourceUidMapFt.current[uid];\n\n const editable =\n typeof column?.editable === 'function' ? column?.editable(record, index) : column?.editable;\n const tableRowFormItemCompleteName = [...formListCompleteName, ...formItemPrevName];\n\n const renderOperationProps: EditableTableProOperation = {\n editable,\n add: addItem.bind(null, uid),\n remove: deleteItem.bind(null, uid),\n move: moveItem.bind(null, uid),\n level: dataSourceTarget.level,\n parentItem: dataSourceTarget.parentUid\n ? dataSourceUidMapFt.current[dataSourceTarget.parentUid]\n : null,\n tableRowFormItemName: formItemPrevName,\n tableRowFormItemCompleteName,\n setCurrentRowTargetField: setCurrentRowTargetField.bind(null, formItemPrevName),\n setCurrentRowChildrenValue: setCurrentRowChildrenValue.bind(null, formItemPrevName),\n validateRowFields: validateRowFields.bind(null, tableRowFormItemCompleteName),\n };\n if (editable === true) {\n let formItemProps =\n typeof column.formItemProps === 'function'\n ? column.formItemProps(value, record, index, renderOperationProps)\n : column.formItemProps;\n\n if (!formItemProps?.rules?.length && required) {\n formItemProps = { ...formItemProps, rules: [{ required: true, message: '' }] };\n }\n\n return (\n <FormItemWrapper\n {...formItemProps}\n name={[...formItemPrevName, ...dataIndex]}\n style={{ marginBottom: 0, ...formItemProps?.style }}\n >\n {column.render?.(value, record, index, renderOperationProps) as React.ReactNode}\n </FormItemWrapper>\n );\n }\n return column.render?.(value, record, index, renderOperationProps);\n },\n };\n }) as ColumnsType<TPlainObject>;\n }, [\n props.columns,\n props.tableProps?.cellVerticalAlign,\n uidFieldKey,\n getFormItemName,\n formListCompleteName,\n addItem,\n deleteItem,\n moveItem,\n setCurrentRowTargetField,\n setCurrentRowChildrenValue,\n validateRowFields,\n ]);\n\n const className = classNames(\n 'editable-table-pro',\n { 'editable-table-pro-layout1': expandedIconLayout === 'layout1' },\n props.className,\n );\n\n return (\n <div className={className} style={props.style}>\n <Form.List name={formListName} rules={props.rules}>\n {(fields, formListOperation, { errors }) => {\n formListOperationRef.current = formListOperation;\n return (\n <div\n style={{\n borderRadius: '6px',\n border: errors?.length ? '1px solid #ff4d4f' : '1px solid transparent',\n }}\n >\n {props.tableBeforeAreaRender?.(formListOperation, fields.length)}\n <Table\n scroll={{ x: 'max-content' }}\n pagination={false}\n size=\"small\"\n {...props.tableProps}\n expandable={{\n expandedRowKeys: expandedRowKeys,\n onExpandedRowsChange: (expandedRowKeys) => {\n setExpandedRowKeys(expandedRowKeys as string[]);\n },\n ...props.tableProps?.expandable,\n childrenColumnName: childrenColumnName,\n }}\n columns={columns}\n dataSource={dataSourceFt}\n rowKey={uidFieldKey}\n />\n <ButtonWrapper\n block\n hidden={props.hiddenFooterBtn}\n type=\"dashed\"\n icon={<PlusOutlined />}\n style={{ marginTop: 15 }}\n onClick={() => {\n const defaultValues = props.addRowDefaultValues?.();\n if (!defaultValues?.[uidFieldKey]) {\n void message.error(\n `新增行默认值必须包含唯一值字段【${uidFieldKey}】,通过 addRowDefaultValues 设置`,\n );\n return;\n }\n formListOperation.add(defaultValues);\n }}\n >\n 新增\n </ButtonWrapper>\n {props.tableAfterAreaRender?.(formListOperation, fields.length)}\n {errors.length ? (\n <Form.ErrorList\n errors={[\n <div style={{ color: '#ff4d4f', padding: '5px' }} key=\"0\">\n {errors}\n </div>,\n ]}\n />\n ) : null}\n </div>\n );\n }}\n </Form.List>\n </div>\n );\n};\n"],"names":["EditableTablePro","props","_props$tableProps2","form","Form","useFormInstance","_useState","useState","expandedRowKeys","setExpandedRowKeys","formListName","toArray","dataSourceUidMap","useRef","dataSourceUidMapFt","formListOperationRef","uidFieldKey","childrenColumnName","expandedIconLayout","formListCompleteName","dataSource","useWatch","dataSourceFt","useMemo","deep","itemList","level","parentUid","forEach","item","itemIndex","console","error","current","index","_isArray","fbaHooks","useEffectCustom","JSON","stringify","getFormItemName","_hooks","useCallbackRef","record","uid","target","indexes","push","undefined","arr","reverse","length","addItem","defaultValue","insertIndex","_formListOperationRef","add","splice","expandedRowKeysSet","Set","concat","Array","from","fbaUtils","setFormFieldsAndTriggerValuesChange","name","value","deleteItem","_formListOperationRef2","remove","parentTarget","cloneState","moveItem","fromIndex","toIndex","result","arrayReorder","setCurrentRowTargetField","formItemPrevName","dataIndexConfigs","map","setCurrentRowChildrenValue","validateRowFields","nameList","Promise","$return","$error","resolve","validateFields","then","$await_1","$boundEx","columns","column","_column$formItemProps","title","support","isValidElement","titleRender","tipsWrapperProps","_jsx","TipsWrapper","tipType","popoverProps","content","children","_extends","required","formItemProps","rules","find","onCell","_props$tableProps","valign","tableProps","cellVerticalAlign","TextSymbolWrapper","style","marginLeft","align","text","position","symbolType","render","isUndefinedOrNull","dataIndex","dataSourceTarget","editable","tableRowFormItemCompleteName","renderOperationProps","bind","move","parentItem","tableRowFormItemName","_formItemProps","_formItemProps2","message","FormItemWrapper","marginBottom","className","_classNames","List","fields","formListOperation","_ref","_props$tableProps3","errors","_jsxs","borderRadius","border","tableBeforeAreaRender","Table","scroll","x","pagination","size","expandable","onExpandedRowsChange","rowKey","ButtonWrapper","block","hidden","hiddenFooterBtn","type","icon","_PlusOutlined","marginTop","onClick","defaultValues","addRowDefaultValues","tableAfterAreaRender","ErrorList","color","padding"],"mappings":"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"}
|
package/index.d.ts
CHANGED
|
@@ -1878,6 +1878,8 @@ export interface EditableTableProOperation {
|
|
|
1878
1878
|
tableRowFormItemName: Array<string | number>;
|
|
1879
1879
|
/** 当前行表单完整 name */
|
|
1880
1880
|
tableRowFormItemCompleteName: Array<string | number>;
|
|
1881
|
+
/** 当前行表单验证,需要自行指定nameList(dataIndex数组) */
|
|
1882
|
+
validateRowFields: (nameList: EditableTableProDataIndex[]) => Promise<void>;
|
|
1881
1883
|
}
|
|
1882
1884
|
export type EditableTableProColumnItem = Omit<ColumnsType[0], "render" | "title" | "dataIndex"> & {
|
|
1883
1885
|
title?: ReactElement | string;
|
|
@@ -1885,7 +1887,7 @@ export type EditableTableProColumnItem = Omit<ColumnsType[0], "render" | "title"
|
|
|
1885
1887
|
/** Form.Item props */
|
|
1886
1888
|
formItemProps?: Omit<FormItemWrapperProps, "children" | "name"> | ((value: TAny, record: TPlainObject, index: number, operation: EditableTableProOperation) => Omit<FormItemWrapperProps, "children" | "name">);
|
|
1887
1889
|
/**
|
|
1888
|
-
* 通过 operation.editable
|
|
1890
|
+
* 通过 operation.editable 来判断渲染结构,其中render返回的根节点会作为 Form.Item 的children
|
|
1889
1891
|
* ```
|
|
1890
1892
|
* 例如
|
|
1891
1893
|
* render: (_value, _record, _index, operation) => {
|
|
@@ -1894,6 +1896,26 @@ export type EditableTableProColumnItem = Omit<ColumnsType[0], "render" | "title"
|
|
|
1894
1896
|
* }
|
|
1895
1897
|
* return <Tag>{value}</Tag>;
|
|
1896
1898
|
* }
|
|
1899
|
+
*
|
|
1900
|
+
* 如果需要额外布局,可通过 formItemProps.wrapper 实现
|
|
1901
|
+
* formItemProps: (_value, _record, _index, operation) => {
|
|
1902
|
+
* return {
|
|
1903
|
+
* wrapper: (children) => {
|
|
1904
|
+
* return (
|
|
1905
|
+
* <FlexLayout fullIndex={[0]} direction="horizontal" gap={10}>
|
|
1906
|
+
* <div>{children}</div>
|
|
1907
|
+
* <div>额外布局</div>
|
|
1908
|
+
* </FlexLayout>
|
|
1909
|
+
* );
|
|
1910
|
+
* },
|
|
1911
|
+
* };
|
|
1912
|
+
* },
|
|
1913
|
+
* render: (_value, _record, _index, operation) => {
|
|
1914
|
+
* if (operation.editable) {
|
|
1915
|
+
* return <Input placeholder="请输入" />;
|
|
1916
|
+
* }
|
|
1917
|
+
* return <Tag>{value}</Tag>;
|
|
1918
|
+
* }
|
|
1897
1919
|
* ```
|
|
1898
1920
|
*/
|
|
1899
1921
|
render?: (value: TAny, record: TPlainObject, index: number, operation: EditableTableProOperation) => ReactElement;
|
|
@@ -1908,7 +1930,7 @@ export type EditableTableProColumnItem = Omit<ColumnsType[0], "render" | "title"
|
|
|
1908
1930
|
* ```
|
|
1909
1931
|
*/
|
|
1910
1932
|
tipsWrapperProps?: string | TipsWrapperProps;
|
|
1911
|
-
/** 为表格header
|
|
1933
|
+
/** 为表格header中的字段添加必填标识,如果未配置 formItemProps.rules,内部会新增一条required rule */
|
|
1912
1934
|
required?: boolean;
|
|
1913
1935
|
};
|
|
1914
1936
|
export type EditableTableProProps = {
|
|
@@ -1957,6 +1979,16 @@ export type EditableTableProProps = {
|
|
|
1957
1979
|
tableBeforeAreaRender?: (formListOperation: FormListOperation, nextRowIndex: number) => ReactElement | null;
|
|
1958
1980
|
/** 表格底部区域渲染 */
|
|
1959
1981
|
tableAfterAreaRender?: (formListOperation: FormListOperation, nextRowIndex: number) => ReactElement | null;
|
|
1982
|
+
/** 展开的行key,一般用于初始化,重新tableProps.expandable.expandedRowKeys后失效 */
|
|
1983
|
+
expandedRowKeys?: string[];
|
|
1984
|
+
/**
|
|
1985
|
+
* 展开图标布局,默认:layout1
|
|
1986
|
+
* ```
|
|
1987
|
+
* 1. 可编辑表格第一项为可编辑状态时,选 layout1
|
|
1988
|
+
* 2. 可编辑表格第一项为非可编辑状态时,选 layout2
|
|
1989
|
+
* ```
|
|
1990
|
+
*/
|
|
1991
|
+
expandedIconLayout?: "layout1" | "layout2";
|
|
1960
1992
|
};
|
|
1961
1993
|
/**
|
|
1962
1994
|
* 使用FormList实现可编辑表格
|