Showing
3 changed files
with
125 additions
and
53 deletions
@@ -93,10 +93,10 @@ const ParameterModal: React.FC<ParameterSettingProps> = (props) => { | @@ -93,10 +93,10 @@ const ParameterModal: React.FC<ParameterSettingProps> = (props) => { | ||
93 | handleChangeField, | 93 | handleChangeField, |
94 | inputKey, | 94 | inputKey, |
95 | nodeType, | 95 | nodeType, |
96 | + expandedKeys, | ||
96 | type, | 97 | type, |
97 | } = props; | 98 | } = props; |
98 | const [searchValue, setSearchValue] = useState(''); | 99 | const [searchValue, setSearchValue] = useState(''); |
99 | - const [defaultExpandedKeys, setDefaultExpandedKeys] = useState<React.Key[]>(); //树节点的id 有了则展开 | ||
100 | 100 | ||
101 | // const [form] = Form.useForm() | 101 | // const [form] = Form.useForm() |
102 | //判断数组是否只有一个子节点 | 102 | //判断数组是否只有一个子节点 |
@@ -147,15 +147,19 @@ const ParameterModal: React.FC<ParameterSettingProps> = (props) => { | @@ -147,15 +147,19 @@ const ParameterModal: React.FC<ParameterSettingProps> = (props) => { | ||
147 | </div> | 147 | </div> |
148 | ), | 148 | ), |
149 | dataIndex: 'code', | 149 | dataIndex: 'code', |
150 | - className: 'code-header', | ||
151 | - width: '150px', | 150 | + className: 'ps-table-cell-header', |
151 | + width: '190px', | ||
152 | key: 'code', | 152 | key: 'code', |
153 | render: (text, record) => { | 153 | render: (text, record) => { |
154 | const strTitle = (text as string) || ''; | 154 | const strTitle = (text as string) || ''; |
155 | const index = strTitle.indexOf(searchValue); | 155 | const index = strTitle.indexOf(searchValue); |
156 | return ( | 156 | return ( |
157 | <Input | 157 | <Input |
158 | - style={{ color: index > -1 && searchValue ? '#1890ff' : '' }} | 158 | + style={{ |
159 | + color: index > -1 && searchValue ? '#1890ff' : '', | ||
160 | + maxWidth: '110px', | ||
161 | + minWidth: '50px', | ||
162 | + }} | ||
159 | draggable={true} | 163 | draggable={true} |
160 | onDragStart={(event) => { | 164 | onDragStart={(event) => { |
161 | event.stopPropagation(); | 165 | event.stopPropagation(); |
@@ -208,7 +212,7 @@ const ParameterModal: React.FC<ParameterSettingProps> = (props) => { | @@ -208,7 +212,7 @@ const ParameterModal: React.FC<ParameterSettingProps> = (props) => { | ||
208 | ), | 212 | ), |
209 | dataIndex: 'type', | 213 | dataIndex: 'type', |
210 | className: 'ps-table-cell', | 214 | className: 'ps-table-cell', |
211 | - width: '95px', | 215 | + width: '105px', |
212 | key: 'type', | 216 | key: 'type', |
213 | render: (text, record) => ( | 217 | render: (text, record) => ( |
214 | <Select | 218 | <Select |
@@ -325,7 +329,7 @@ const ParameterModal: React.FC<ParameterSettingProps> = (props) => { | @@ -325,7 +329,7 @@ const ParameterModal: React.FC<ParameterSettingProps> = (props) => { | ||
325 | ), | 329 | ), |
326 | key: 'action', | 330 | key: 'action', |
327 | className: 'ps-table-cell', | 331 | className: 'ps-table-cell', |
328 | - width: '96px', | 332 | + width: '110px', |
329 | render: (text, record) => { | 333 | render: (text, record) => { |
330 | const isShowAdd = record && checkShowAdd(record); | 334 | const isShowAdd = record && checkShowAdd(record); |
331 | const isShowTree = record && checkShowTree(record); | 335 | const isShowTree = record && checkShowTree(record); |
@@ -615,7 +619,6 @@ const ParameterModal: React.FC<ParameterSettingProps> = (props) => { | @@ -615,7 +619,6 @@ const ParameterModal: React.FC<ParameterSettingProps> = (props) => { | ||
615 | (value || []).map((_item: ParamDesignModel) => { | 619 | (value || []).map((_item: ParamDesignModel) => { |
616 | expandedArray.push(_item.id); | 620 | expandedArray.push(_item.id); |
617 | }); | 621 | }); |
618 | - setDefaultExpandedKeys(expandedArray); | ||
619 | }, [inputKey]); | 622 | }, [inputKey]); |
620 | 623 | ||
621 | //展开 所有子节点 | 624 | //展开 所有子节点 |
@@ -640,9 +643,9 @@ const ParameterModal: React.FC<ParameterSettingProps> = (props) => { | @@ -640,9 +643,9 @@ const ParameterModal: React.FC<ParameterSettingProps> = (props) => { | ||
640 | ); | 643 | ); |
641 | 644 | ||
642 | //每行拖拽渲染 | 645 | //每行拖拽渲染 |
643 | - const onRow = () => ({ | ||
644 | - draggable: true, | ||
645 | - style: { cursor: 'move' }, | 646 | + const onRow = (record) => ({ |
647 | + draggable: !record.disabled, | ||
648 | + style: { cursor: !record.disabled ? 'move' : '' }, | ||
646 | onDragStart: (ev: any) => { | 649 | onDragStart: (ev: any) => { |
647 | ev.persist(); | 650 | ev.persist(); |
648 | console.log('onDragStart', ev.target); | 651 | console.log('onDragStart', ev.target); |
@@ -895,11 +898,11 @@ const ParameterModal: React.FC<ParameterSettingProps> = (props) => { | @@ -895,11 +898,11 @@ const ParameterModal: React.FC<ParameterSettingProps> = (props) => { | ||
895 | expandable={{ | 898 | expandable={{ |
896 | defaultExpandAllRows: true, | 899 | defaultExpandAllRows: true, |
897 | childrenColumnName: 'child', | 900 | childrenColumnName: 'child', |
898 | - expandedRowKeys: defaultExpandedKeys, | 901 | + expandedRowKeys: expandedKeys, |
899 | expandIcon: ({ expanded, onExpand, record }) => | 902 | expandIcon: ({ expanded, onExpand, record }) => |
900 | record.child && record.child.length > 0 && expanded ? ( | 903 | record.child && record.child.length > 0 && expanded ? ( |
901 | <> | 904 | <> |
902 | - <Icon component={SubDropIcon} className="drop-icon1" /> | 905 | + <Icon component={SubDropIcon} className="drop-icon" /> |
903 | <QxBaseIcon | 906 | <QxBaseIcon |
904 | className={'table-expanded'} | 907 | className={'table-expanded'} |
905 | type={'qx-caret-down'} | 908 | type={'qx-caret-down'} |
@@ -908,15 +911,17 @@ const ParameterModal: React.FC<ParameterSettingProps> = (props) => { | @@ -908,15 +911,17 @@ const ParameterModal: React.FC<ParameterSettingProps> = (props) => { | ||
908 | </> | 911 | </> |
909 | ) : record.child && record.child.length > 0 && !expanded ? ( | 912 | ) : record.child && record.child.length > 0 && !expanded ? ( |
910 | <> | 913 | <> |
911 | - <Icon component={SubDropIcon} className="drop-icon1" /> | 914 | + <Icon component={SubDropIcon} className="drop-icon" /> |
912 | <QxBaseIcon | 915 | <QxBaseIcon |
913 | className={'table-expanded-change'} | 916 | className={'table-expanded-change'} |
914 | type={'qx-caret-down'} | 917 | type={'qx-caret-down'} |
915 | onClick={(e) => onExpand(record, e)} | 918 | onClick={(e) => onExpand(record, e)} |
916 | /> | 919 | /> |
917 | </> | 920 | </> |
921 | + ) : record.disabled ? ( | ||
922 | + <></> | ||
918 | ) : ( | 923 | ) : ( |
919 | - <Icon component={SubDropIcon} className="drop-icon1" /> | 924 | + <Icon component={SubDropIcon} className="drop-icon" /> |
920 | ), | 925 | ), |
921 | }} | 926 | }} |
922 | className="parameter-setting-table" | 927 | className="parameter-setting-table" |
@@ -531,15 +531,16 @@ export const QxParameterSetting: React.FC<ParameterSettingProps> = (props) => { | @@ -531,15 +531,16 @@ export const QxParameterSetting: React.FC<ParameterSettingProps> = (props) => { | ||
531 | setTimeout(() => { | 531 | setTimeout(() => { |
532 | let myInput = document.getElementById(id); | 532 | let myInput = document.getElementById(id); |
533 | myInput.focus(); | 533 | myInput.focus(); |
534 | - }, 0); | 534 | + }, 100); |
535 | }; | 535 | }; |
536 | 536 | ||
537 | //增加子节点 | 537 | //增加子节点 |
538 | const onAddTree = (key: string) => { | 538 | const onAddTree = (key: string) => { |
539 | + const id = uidGen(); | ||
540 | + const code = uidGen(undefined, 6); | ||
541 | + | ||
539 | function addNode(pid: string, data: any) { | 542 | function addNode(pid: string, data: any) { |
540 | data.forEach((item) => { | 543 | data.forEach((item) => { |
541 | - const id = uidGen(); | ||
542 | - const code = uidGen(undefined, 6); | ||
543 | if (item.id === pid) { | 544 | if (item.id === pid) { |
544 | if (item.child && item.child.length > 0) { | 545 | if (item.child && item.child.length > 0) { |
545 | item.child.push({ id, type: 'STRING', pid, code, title: '' }); | 546 | item.child.push({ id, type: 'STRING', pid, code, title: '' }); |
@@ -559,6 +560,16 @@ export const QxParameterSetting: React.FC<ParameterSettingProps> = (props) => { | @@ -559,6 +560,16 @@ export const QxParameterSetting: React.FC<ParameterSettingProps> = (props) => { | ||
559 | setInputKey(inputKey + 1); | 560 | setInputKey(inputKey + 1); |
560 | setTreeData(_treeDataNew); | 561 | setTreeData(_treeDataNew); |
561 | props?.onChange(_treeDataNew); | 562 | props?.onChange(_treeDataNew); |
563 | + if (expandedKeys) { | ||
564 | + setExpandedKeys([...expandedKeys, key]); | ||
565 | + } else { | ||
566 | + setExpandedKeys([key]); | ||
567 | + } | ||
568 | + | ||
569 | + setTimeout(() => { | ||
570 | + let myInput = document.getElementById(id); | ||
571 | + myInput.focus(); | ||
572 | + }, 100); | ||
562 | }; | 573 | }; |
563 | 574 | ||
564 | const onExpand = (newExpandedKeys: any) => { | 575 | const onExpand = (newExpandedKeys: any) => { |
@@ -714,29 +725,33 @@ export const QxParameterSetting: React.FC<ParameterSettingProps> = (props) => { | @@ -714,29 +725,33 @@ export const QxParameterSetting: React.FC<ParameterSettingProps> = (props) => { | ||
714 | /> | 725 | /> |
715 | </div> | 726 | </div> |
716 | <div className="opt-left"> | 727 | <div className="opt-left"> |
717 | - <Input | ||
718 | - id={nodeData.id} | ||
719 | - ref={inputRef} | ||
720 | - status={!nodeData.title ? 'error' : ''} | ||
721 | - placeholder={!nodeData.title ? '请输入参数名' : ''} | ||
722 | - className={ | ||
723 | - index > -1 && searchValue ? 'search-selected' : 'title-input' | ||
724 | - } | ||
725 | - draggable={true} | ||
726 | - onDragStart={(event) => { | ||
727 | - event.stopPropagation(); | ||
728 | - event.preventDefault(); | ||
729 | - }} | ||
730 | - key={inputKey} | ||
731 | - style={{ width: '100%', borderRadius: '4px' }} | ||
732 | - maxLength={50} | ||
733 | - disabled={disabled} | ||
734 | - bordered={true} | ||
735 | - defaultValue={nodeData.title} | ||
736 | - onBlur={(e) => { | ||
737 | - handleChange(e, nodeData, 'title'); | ||
738 | - }} | ||
739 | - /> | 728 | + <span className="box-input"> |
729 | + <Input | ||
730 | + id={nodeData.id} | ||
731 | + ref={inputRef} | ||
732 | + status={!nodeData.title ? 'error' : ''} | ||
733 | + placeholder={!nodeData.title ? '请输入参数名' : ''} | ||
734 | + className={ | ||
735 | + index > -1 && searchValue | ||
736 | + ? 'search-selected' | ||
737 | + : 'title-input' | ||
738 | + } | ||
739 | + draggable={true} | ||
740 | + onDragStart={(event) => { | ||
741 | + event.stopPropagation(); | ||
742 | + event.preventDefault(); | ||
743 | + }} | ||
744 | + key={inputKey} | ||
745 | + style={{ width: '100%', borderRadius: '4px' }} | ||
746 | + maxLength={50} | ||
747 | + disabled={disabled} | ||
748 | + bordered={true} | ||
749 | + defaultValue={nodeData.title} | ||
750 | + onBlur={(e) => { | ||
751 | + handleChange(e, nodeData, 'title'); | ||
752 | + }} | ||
753 | + /> | ||
754 | + </span> | ||
740 | </div> | 755 | </div> |
741 | </div> | 756 | </div> |
742 | {props?.isShowField && ( | 757 | {props?.isShowField && ( |
@@ -781,7 +796,6 @@ export const QxParameterSetting: React.FC<ParameterSettingProps> = (props) => { | @@ -781,7 +796,6 @@ export const QxParameterSetting: React.FC<ParameterSettingProps> = (props) => { | ||
781 | const onSelect = (e: any) => { | 796 | const onSelect = (e: any) => { |
782 | handleAdd('', e.key); | 797 | handleAdd('', e.key); |
783 | }; | 798 | }; |
784 | - | ||
785 | return ( | 799 | return ( |
786 | <div> | 800 | <div> |
787 | <div className={'qx-parameter-setting-content'}> | 801 | <div className={'qx-parameter-setting-content'}> |
@@ -859,8 +873,10 @@ export const QxParameterSetting: React.FC<ParameterSettingProps> = (props) => { | @@ -859,8 +873,10 @@ export const QxParameterSetting: React.FC<ParameterSettingProps> = (props) => { | ||
859 | onDrop={onDrop} | 873 | onDrop={onDrop} |
860 | draggable={{ icon: false }} | 874 | draggable={{ icon: false }} |
861 | // draggable={!props.type} | 875 | // draggable={!props.type} |
862 | - blockNode | 876 | + // blockNode |
863 | defaultExpandAll | 877 | defaultExpandAll |
878 | + checkStrictly | ||
879 | + defaultExpandedKeys={defaultExpandedKeys} | ||
864 | expandedKeys={expandedKeys ? expandedKeys : defaultExpandedKeys} | 880 | expandedKeys={expandedKeys ? expandedKeys : defaultExpandedKeys} |
865 | autoExpandParent={autoExpandParent} | 881 | autoExpandParent={autoExpandParent} |
866 | onExpand={onExpand} | 882 | onExpand={onExpand} |
@@ -869,10 +885,10 @@ export const QxParameterSetting: React.FC<ParameterSettingProps> = (props) => { | @@ -869,10 +885,10 @@ export const QxParameterSetting: React.FC<ParameterSettingProps> = (props) => { | ||
869 | : null} | 885 | : null} |
870 | </div> | 886 | </div> |
871 | <ParameterModal | 887 | <ParameterModal |
872 | - // nodeItem={props.nodeItem} | ||
873 | inputKey={inputKey} | 888 | inputKey={inputKey} |
874 | treeData={list} | 889 | treeData={list} |
875 | data={treeData} | 890 | data={treeData} |
891 | + expandedKeys={expandedKeys} | ||
876 | nodes={props.nodes} | 892 | nodes={props.nodes} |
877 | node={props.node} | 893 | node={props.node} |
878 | handleChangeField={changeField} | 894 | handleChangeField={changeField} |
@@ -32,7 +32,8 @@ | @@ -32,7 +32,8 @@ | ||
32 | margin-top: 20px; | 32 | margin-top: 20px; |
33 | 33 | ||
34 | .ant-tree .ant-tree-switcher { | 34 | .ant-tree .ant-tree-switcher { |
35 | - // width: 34px; | 35 | + transition: all 0.2s ease; |
36 | + width: 0; | ||
36 | margin-top: 11.5px; | 37 | margin-top: 11.5px; |
37 | display: flex; | 38 | display: flex; |
38 | // justify-content: flex-end; | 39 | // justify-content: flex-end; |
@@ -155,7 +156,7 @@ | @@ -155,7 +156,7 @@ | ||
155 | width: 100%; | 156 | width: 100%; |
156 | margin-top: 2px; | 157 | margin-top: 2px; |
157 | margin-bottom: 2px; | 158 | margin-bottom: 2px; |
158 | - overflow: hidden; | 159 | + // overflow: hidden; |
159 | text-overflow: ellipsis; | 160 | text-overflow: ellipsis; |
160 | transition: width 0.3s cubic-bezier(0.2, 0, 0, 1) 0s; | 161 | transition: width 0.3s cubic-bezier(0.2, 0, 0, 1) 0s; |
161 | 162 | ||
@@ -170,11 +171,26 @@ | @@ -170,11 +171,26 @@ | ||
170 | .ant-input-status-error { | 171 | .ant-input-status-error { |
171 | &:focus-within { | 172 | &:focus-within { |
172 | border: 1px solid @B8 !important; | 173 | border: 1px solid @B8 !important; |
173 | - box-shadow: 0 0 4px 0 #1764ff80; | 174 | + box-shadow: 0 0 4px 0 @B8 !important; |
175 | + // box-shadow: 0 0 0 2px rgba(15, 112, 121, 0.269); | ||
176 | + } | ||
177 | + } | ||
174 | 178 | ||
179 | + .title-input { | ||
180 | + &:focus-within { | ||
181 | + // border: 1px solid @B8 !important; | ||
182 | + box-shadow: 0 0 4px 0 @B8 !important; | ||
175 | // box-shadow: 0 0 0 2px rgba(15, 112, 121, 0.269); | 183 | // box-shadow: 0 0 0 2px rgba(15, 112, 121, 0.269); |
176 | } | 184 | } |
177 | } | 185 | } |
186 | + | ||
187 | + .box-input { | ||
188 | + &:focus-within { | ||
189 | + border-radius: 4px; | ||
190 | + border-inline-end-width: 1px; | ||
191 | + outline: 0; | ||
192 | + } | ||
193 | + } | ||
178 | } | 194 | } |
179 | 195 | ||
180 | .render-right__help { | 196 | .render-right__help { |
@@ -377,22 +393,42 @@ | @@ -377,22 +393,42 @@ | ||
377 | position: absolute; | 393 | position: absolute; |
378 | top: 10px; | 394 | top: 10px; |
379 | left: -22px; | 395 | left: -22px; |
380 | - opacity: 1; | 396 | + opacity: 0.01; |
381 | display: block; | 397 | display: block; |
382 | } | 398 | } |
383 | 399 | ||
384 | .ant-table-body { | 400 | .ant-table-body { |
385 | .ps-table-cell { | 401 | .ps-table-cell { |
386 | - transition: all 0.2s ease; | 402 | + transition: all 0s ease !important; |
387 | 403 | ||
388 | &:hover { | 404 | &:hover { |
389 | border: 1px solid @N6 !important; | 405 | border: 1px solid @N6 !important; |
390 | - border-radius: 2px; | 406 | + box-shadow: 0 0 4px 0 @N6 !important; |
407 | + } | ||
408 | + | ||
409 | + &-header { | ||
410 | + transition: all 0s ease !important; | ||
411 | + display: flex; | ||
412 | + height: 41px !important; | ||
413 | + | ||
414 | + &:hover { | ||
415 | + border: 1px solid @N6 !important; | ||
416 | + box-shadow: 0 0 4px 0 @N6 !important; | ||
417 | + // border-radius: 2px; | ||
418 | + .drop-icon { | ||
419 | + position: absolute; | ||
420 | + top: 13px; | ||
421 | + left: 2px; | ||
422 | + opacity: 1; | ||
423 | + display: block; | ||
424 | + } | ||
425 | + } | ||
391 | } | 426 | } |
392 | 427 | ||
393 | &:focus-within { | 428 | &:focus-within { |
394 | - border: 1px solid #1764ff !important; | ||
395 | - border-radius: 2px; | 429 | + border: 1px solid @B8 !important; |
430 | + box-shadow: 0 0 4px 0 @B8 !important; | ||
431 | + // border-radius: 2px; | ||
396 | } | 432 | } |
397 | 433 | ||
398 | // display: flex; | 434 | // display: flex; |
@@ -415,13 +451,28 @@ | @@ -415,13 +451,28 @@ | ||
415 | position: absolute; | 451 | position: absolute; |
416 | top: 10px; | 452 | top: 10px; |
417 | left: -22px; | 453 | left: -22px; |
418 | - opacity: 1; | 454 | + opacity: 0.01; |
419 | display: block; | 455 | display: block; |
420 | } | 456 | } |
421 | 457 | ||
422 | &:hover { | 458 | &:hover { |
423 | background-color: @N3 !important; | 459 | background-color: @N3 !important; |
424 | 460 | ||
461 | + .drop-icon { | ||
462 | + // position: absolute; | ||
463 | + // top: 10px; | ||
464 | + // left: -22px; | ||
465 | + opacity: 1; | ||
466 | + // display: block; | ||
467 | + } | ||
468 | + | ||
469 | + .ant-tree-switcher { | ||
470 | + transition: all 0.2s ease; | ||
471 | + width: 24px !important; | ||
472 | + margin-top: 11.5px; | ||
473 | + display: flex; | ||
474 | + } | ||
475 | + | ||
425 | .title-btn-del, | 476 | .title-btn-del, |
426 | .title-btn { | 477 | .title-btn { |
427 | opacity: 1; | 478 | opacity: 1; |
@@ -473,7 +524,7 @@ | @@ -473,7 +524,7 @@ | ||
473 | 524 | ||
474 | .parameter-setting-table .ant-table-cell { | 525 | .parameter-setting-table .ant-table-cell { |
475 | height: 40px; | 526 | height: 40px; |
476 | - padding: 4px 16px 4px 4px !important; | 527 | + padding: 4px 16px 4px 14px !important; |
477 | } | 528 | } |
478 | 529 | ||
479 | .qx-parameter-setting__modal { | 530 | .qx-parameter-setting__modal { |