Commit a722e6bfb662e24c7a265e78c3d9cf05bb22fa18

Authored by qiang.tian
1 parent c036fb77

refactor: condition 可选类型

@@ -2,7 +2,7 @@ import { ControlOutlined } from '@ant-design/icons'; @@ -2,7 +2,7 @@ import { ControlOutlined } from '@ant-design/icons';
2 import { Select, Tooltip } from 'antd'; 2 import { Select, Tooltip } from 'antd';
3 import { size } from 'lodash-es'; 3 import { size } from 'lodash-es';
4 import React, { useState } from 'react'; 4 import React, { useState } from 'react';
5 -import type { QxBaseConditionField } from '../qx-base-condition'; 5 +import { FieldBaseType, type QxBaseConditionField } from '../qx-base-condition';
6 import { QxBaseIcon } from '../qx-base-icon'; 6 import { QxBaseIcon } from '../qx-base-icon';
7 import { QxFieldSetter } from '../qx-field-setter'; 7 import { QxFieldSetter } from '../qx-field-setter';
8 import type { INode } from '../qx-flow-node-selector'; 8 import type { INode } from '../qx-flow-node-selector';
@@ -15,6 +15,11 @@ import { QxWidgetIcon } from '../qx-widget-icon'; @@ -15,6 +15,11 @@ import { QxWidgetIcon } from '../qx-widget-icon';
15 15
16 import './index.less'; 16 import './index.less';
17 17
  18 +export const fieldLimitTypes: Record<string, string[]> = {
  19 + TEXT: [],
  20 + ENUM: ['TEXT', 'ENUM'],
  21 +};
  22 +
18 export const multipleType = [ 23 export const multipleType = [
19 'STRING', 24 'STRING',
20 'REL_MULTI', 25 'REL_MULTI',
@@ -733,10 +738,13 @@ export const QxBaseConditionItem: React.FC<QxBaseConditionItemProps> = ({ @@ -733,10 +738,13 @@ export const QxBaseConditionItem: React.FC<QxBaseConditionItemProps> = ({
733 setOpen(false); 738 setOpen(false);
734 }; 739 };
735 740
  741 + const baseType = FieldBaseType[field.extract?.fieldType] || field.extract?.fieldType
  742 + const limitTypes = fieldLimitTypes[baseType] ? fieldLimitTypes[baseType] : [baseType]
  743 +
736 const { genDisplayDom } = useNodeFieldDisplay({ 744 const { genDisplayDom } = useNodeFieldDisplay({
737 node: node, 745 node: node,
738 nodes: nodes, 746 nodes: nodes,
739 - limitTypes: [field.extract?.fieldType], 747 + limitTypes,
740 value: valuesObj?.value, 748 value: valuesObj?.value,
741 subset, 749 subset,
742 }); 750 });
@@ -829,7 +837,7 @@ export const QxBaseConditionItem: React.FC<QxBaseConditionItemProps> = ({ @@ -829,7 +837,7 @@ export const QxBaseConditionItem: React.FC<QxBaseConditionItemProps> = ({
829 open={open} 837 open={open}
830 value={valuesObj?.value} 838 value={valuesObj?.value}
831 onChange={handleAssignment} 839 onChange={handleAssignment}
832 - limitTypes={[field.extract?.fieldType]} 840 + limitTypes={limitTypes}
833 subset={subset} 841 subset={subset}
834 > 842 >
835 {RenderContent} 843 {RenderContent}
@@ -8,6 +8,31 @@ export const FieldBaseType = { @@ -8,6 +8,31 @@ export const FieldBaseType = {
8 DOUBLE: 'NUM', 8 DOUBLE: 'NUM',
9 NUMBER: 'NUM', 9 NUMBER: 'NUM',
10 YEAR_SEC: 'DATE', 10 YEAR_SEC: 'DATE',
  11 + TIME: 'DATE',
  12 + YEAR: 'DATE',
  13 + YEAR_MONTH: 'DATE',
  14 + YEAR_DATE: 'DATE',
  15 + YEAR_MIN: 'DATE',
  16 + YEAR_HOUR: 'DATE',
  17 + HOUR: 'DATE',
  18 + HOUR_MIN: 'DATE',
  19 + HOUR_SEC: 'DATE',
  20 + PERCENT: 'NUM',
  21 + DECIMAL: 'NUM',
  22 + /**
  23 + * 用户
  24 + */
  25 + USER: 'USER',
  26 + /**
  27 + * 多选用户
  28 + */
  29 + USER_MULTI: 'USER',
  30 + ORG: 'ORG',
  31 + ORG_MULTI: 'ORG',
  32 + REL: 'FORM',
  33 + REL_MULTI: 'FORM',
  34 + TABLE: 'FORM',
  35 + TREE: 'FORM',
11 }; 36 };
12 37
13 export const QxBaseCondition: React.FC<QxBaseConditionProps> = (props) => { 38 export const QxBaseCondition: React.FC<QxBaseConditionProps> = (props) => {
@@ -3,6 +3,7 @@ import { Collapse, Dropdown, Empty, Tag } from 'antd'; @@ -3,6 +3,7 @@ import { Collapse, Dropdown, Empty, Tag } from 'antd';
3 import cls from 'classnames'; 3 import cls from 'classnames';
4 import { cloneDeep } from 'lodash-es'; 4 import { cloneDeep } from 'lodash-es';
5 import React, { useEffect, useState } from 'react'; 5 import React, { useEffect, useState } from 'react';
  6 +import { FieldBaseType } from '../qx-base-condition';
6 import { QxBaseIcon } from '../qx-base-icon'; 7 import { QxBaseIcon } from '../qx-base-icon';
7 import { request } from '../utils'; 8 import { request } from '../utils';
8 import './index.less'; 9 import './index.less';
@@ -151,11 +152,11 @@ export const useNodeFieldDisplay = ({ @@ -151,11 +152,11 @@ export const useNodeFieldDisplay = ({
151 } 152 }
152 } 153 }
153 154
154 - return displayConfig  
155 - } 155 + return displayConfig;
  156 + };
156 157
157 const genDisplayDom = (value: string, nodes: INode[] = optionalNodes) => { 158 const genDisplayDom = (value: string, nodes: INode[] = optionalNodes) => {
158 - const displayConfig = getDisplayConfig(value, nodes) 159 + const displayConfig = getDisplayConfig(value, nodes);
159 return ( 160 return (
160 <> 161 <>
161 {displayConfig?.map((item, idx) => ( 162 {displayConfig?.map((item, idx) => (
@@ -301,7 +302,7 @@ export const useNodeFieldDisplay = ({ @@ -301,7 +302,7 @@ export const useNodeFieldDisplay = ({
301 correctionNodeField(targetParentNodes[i].data?.result || []); 302 correctionNodeField(targetParentNodes[i].data?.result || []);
302 } 303 }
303 304
304 - if (!limitTypes) { 305 + if (!limitTypes || !limitTypes.length) {
305 setOptionalNodes(targetParentNodes); 306 setOptionalNodes(targetParentNodes);
306 renderInputDisplay(targetParentNodes); 307 renderInputDisplay(targetParentNodes);
307 return; 308 return;
@@ -317,11 +318,19 @@ export const useNodeFieldDisplay = ({ @@ -317,11 +318,19 @@ export const useNodeFieldDisplay = ({
317 resultItem.child = getEffectiveResult(resultItem.child); 318 resultItem.child = getEffectiveResult(resultItem.child);
318 if ( 319 if (
319 (Array.isArray(resultItem.child) && resultItem.child.length) || 320 (Array.isArray(resultItem.child) && resultItem.child.length) ||
320 - limitTypes?.includes(resultItem.type) 321 + limitTypes?.includes(
  322 + FieldBaseType[resultItem.type as keyof typeof FieldBaseType] ||
  323 + resultItem.type,
  324 + )
321 ) { 325 ) {
322 newResult.push(resultItem); 326 newResult.push(resultItem);
323 } 327 }
324 - } else if (limitTypes?.includes(resultItem.type)) { 328 + } else if (
  329 + limitTypes?.includes(
  330 + FieldBaseType[resultItem.type as keyof typeof FieldBaseType] ||
  331 + resultItem.type,
  332 + )
  333 + ) {
325 newResult.push(resultItem); 334 newResult.push(resultItem);
326 } 335 }
327 } 336 }
@@ -479,7 +488,7 @@ export const QxFlowNodeFieldSelector: React.FC<NodeFieldSelectProps> = ( @@ -479,7 +488,7 @@ export const QxFlowNodeFieldSelector: React.FC<NodeFieldSelectProps> = (
479 const newValue = '${' + `${nodeKey}|${item.id}` + '}'; 488 const newValue = '${' + `${nodeKey}|${item.id}` + '}';
480 props.onChange?.(newValue, item); 489 props.onChange?.(newValue, item);
481 if (!props.children) { 490 if (!props.children) {
482 - renderInputDisplay(optionalNodes ,newValue); 491 + renderInputDisplay(optionalNodes, newValue);
483 } 492 }
484 setVisible(false); 493 setVisible(false);
485 }; 494 };