|
@@ -9,13 +9,41 @@ import RelModal from './RelModal';
|
|
|
function AuditForm(props) {
|
|
|
const { value, onChange } = props;
|
|
|
const [formList, setFormList] = useState([]);
|
|
|
- const [select, setSelect] = useState(-1);
|
|
|
+ const [select, setSelect] = useState('');
|
|
|
+ const [selectList, setSelectList] = useState([]);
|
|
|
const [visible, setVisible] = useState(false);
|
|
|
+
|
|
|
const [relVisible, setRelVisible] = useState(false); //关联选项弹窗
|
|
|
+ const [addToTable, setAddToTable] = useState(false);
|
|
|
+ const [currentTableID, setCurrentTableID] = useState('');
|
|
|
|
|
|
const handleAddItem = (item) => {
|
|
|
- const formItem = generateItem(item);
|
|
|
- handleChangeList([...formList, formItem]);
|
|
|
+ if (addToTable) {
|
|
|
+ // 新增列处理
|
|
|
+ const column = generateItem(item);
|
|
|
+ // 找到对应的表格
|
|
|
+ const tableItem = formList.find(
|
|
|
+ (item) => item.props.id === currentTableID,
|
|
|
+ );
|
|
|
+ column.isColumn = true;
|
|
|
+ // 把新增的列加入到表格中
|
|
|
+ tableItem.columns.push(column);
|
|
|
+ // 把新增列的表格放回
|
|
|
+ const newFormList = [];
|
|
|
+ for (const item of formList) {
|
|
|
+ if (item.props.id !== currentTableID) {
|
|
|
+ newFormList.push(item);
|
|
|
+ } else {
|
|
|
+ newFormList.push(tableItem);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ handleChangeList(newFormList);
|
|
|
+ setCurrentTableID('');
|
|
|
+ } else {
|
|
|
+ const formItem = generateItem(item);
|
|
|
+ handleChangeList([...formList, formItem]);
|
|
|
+ }
|
|
|
+ setAddToTable(false);
|
|
|
setVisible(false);
|
|
|
};
|
|
|
|
|
@@ -24,14 +52,28 @@ function AuditForm(props) {
|
|
|
...item,
|
|
|
props: { ...item.props, id: `${item.componentName}_${uuidv4()}` },
|
|
|
};
|
|
|
+ // 如果是表格的话
|
|
|
+ if (item.props.label === '表格') {
|
|
|
+ newItem.columns = [];
|
|
|
+ newItem.isTable = true;
|
|
|
+ }
|
|
|
delete newItem.icon;
|
|
|
return newItem;
|
|
|
};
|
|
|
|
|
|
const onChangeAttribute = (newItem) => {
|
|
|
- let oldValue = formList[select].props;
|
|
|
- formList[select].props = { ...oldValue, ...newItem };
|
|
|
- handleChangeList([...formList]);
|
|
|
+ let oldValue = formList.find((item) => item.props.id === select);
|
|
|
+ const newFormList = [];
|
|
|
+ for (const item of formList) {
|
|
|
+ if (item.props.id === select) {
|
|
|
+ item.props = { ...oldValue, newItem };
|
|
|
+ }
|
|
|
+ newFormList.push(item);
|
|
|
+ }
|
|
|
+ handleChangeList(newFormList);
|
|
|
+ // let oldValue = formList[select].props;
|
|
|
+ // formList[select].props = { ...oldValue, ...newItem };
|
|
|
+ // handleChangeList([...formList]);
|
|
|
};
|
|
|
|
|
|
const handleChangeList = (list) => {
|
|
@@ -39,6 +81,49 @@ function AuditForm(props) {
|
|
|
onChange?.(list);
|
|
|
};
|
|
|
|
|
|
+ // 表格列变化时(新增,调整顺序)
|
|
|
+ const handleTableColumnChange = (id, newCole = []) => {
|
|
|
+ if (newCole.length) {
|
|
|
+ // 调整col顺序
|
|
|
+ const tableItem = formList.find((item) => item.props.id === id);
|
|
|
+ tableItem.columns = newCole;
|
|
|
+ const newFormList = [];
|
|
|
+ for (const item of formList) {
|
|
|
+ if (item.props.id !== currentTableID) {
|
|
|
+ newFormList.push(item);
|
|
|
+ } else {
|
|
|
+ newFormList.push(tableItem);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ handleChangeList(newFormList);
|
|
|
+ } else {
|
|
|
+ setCurrentTableID(id);
|
|
|
+ setAddToTable(true);
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ const handleFormContentSelect = (ids) => {
|
|
|
+ setSelectList(ids);
|
|
|
+ setSelect(ids[0]);
|
|
|
+ };
|
|
|
+
|
|
|
+ const findFormItem = () => {
|
|
|
+ console.log();
|
|
|
+ let formItem = formList.find((item) => item.props.id === selectList[0]);
|
|
|
+
|
|
|
+ if (formItem?.isTable) {
|
|
|
+ // 如果是表格的话,还要寻找内部的被点击的col
|
|
|
+
|
|
|
+ return (
|
|
|
+ formItem.columns.find(
|
|
|
+ (item) => item.props.id === selectList[selectList.length - 1],
|
|
|
+ ) || null
|
|
|
+ );
|
|
|
+ } else {
|
|
|
+ return formList.find((item) => item.props.id === select) || null;
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
useEffect(() => {
|
|
|
if (value instanceof Array) {
|
|
|
setFormList([...value]);
|
|
@@ -59,24 +144,29 @@ function AuditForm(props) {
|
|
|
}}
|
|
|
>
|
|
|
<FormContent
|
|
|
- onSelect={setSelect}
|
|
|
+ onSelect={handleFormContentSelect}
|
|
|
onChange={handleChangeList}
|
|
|
+ onTableColumnChange={handleTableColumnChange}
|
|
|
list={formList}
|
|
|
></FormContent>
|
|
|
<ItemAttribute
|
|
|
- key={select}
|
|
|
- item={formList[select]}
|
|
|
+ key={selectList[selectList.length - 1]}
|
|
|
+ item={findFormItem()}
|
|
|
onRelClick={() => setRelVisible(true)}
|
|
|
onChange={onChangeAttribute}
|
|
|
></ItemAttribute>
|
|
|
</div>
|
|
|
<ComponentLibrary
|
|
|
+ addToTable={addToTable}
|
|
|
onOk={handleAddItem}
|
|
|
- visible={visible}
|
|
|
- onCancel={() => setVisible(false)}
|
|
|
+ visible={visible || addToTable}
|
|
|
+ onCancel={() => {
|
|
|
+ setVisible(false);
|
|
|
+ setAddToTable(false);
|
|
|
+ }}
|
|
|
/>
|
|
|
<RelModal
|
|
|
- item={formList[select]}
|
|
|
+ item={formList.find((item) => item.props.id === select)}
|
|
|
formList={formList}
|
|
|
visible={relVisible}
|
|
|
onCancel={() => setRelVisible(false)}
|