Commit a722e6bfb662e24c7a265e78c3d9cf05bb22fa18

Authored by qiang.tian
1 parent c036fb77

refactor: condition 可选类型

... ... @@ -2,7 +2,7 @@ import { ControlOutlined } from '@ant-design/icons';
2 2 import { Select, Tooltip } from 'antd';
3 3 import { size } from 'lodash-es';
4 4 import React, { useState } from 'react';
5   -import type { QxBaseConditionField } from '../qx-base-condition';
  5 +import { FieldBaseType, type QxBaseConditionField } from '../qx-base-condition';
6 6 import { QxBaseIcon } from '../qx-base-icon';
7 7 import { QxFieldSetter } from '../qx-field-setter';
8 8 import type { INode } from '../qx-flow-node-selector';
... ... @@ -15,6 +15,11 @@ import { QxWidgetIcon } from '../qx-widget-icon';
15 15
16 16 import './index.less';
17 17
  18 +export const fieldLimitTypes: Record<string, string[]> = {
  19 + TEXT: [],
  20 + ENUM: ['TEXT', 'ENUM'],
  21 +};
  22 +
18 23 export const multipleType = [
19 24 'STRING',
20 25 'REL_MULTI',
... ... @@ -733,10 +738,13 @@ export const QxBaseConditionItem: React.FC<QxBaseConditionItemProps> = ({
733 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 744 const { genDisplayDom } = useNodeFieldDisplay({
737 745 node: node,
738 746 nodes: nodes,
739   - limitTypes: [field.extract?.fieldType],
  747 + limitTypes,
740 748 value: valuesObj?.value,
741 749 subset,
742 750 });
... ... @@ -829,7 +837,7 @@ export const QxBaseConditionItem: React.FC<QxBaseConditionItemProps> = ({
829 837 open={open}
830 838 value={valuesObj?.value}
831 839 onChange={handleAssignment}
832   - limitTypes={[field.extract?.fieldType]}
  840 + limitTypes={limitTypes}
833 841 subset={subset}
834 842 >
835 843 {RenderContent}
... ...
... ... @@ -8,6 +8,31 @@ export const FieldBaseType = {
8 8 DOUBLE: 'NUM',
9 9 NUMBER: 'NUM',
10 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 38 export const QxBaseCondition: React.FC<QxBaseConditionProps> = (props) => {
... ...
... ... @@ -3,6 +3,7 @@ import { Collapse, Dropdown, Empty, Tag } from 'antd';
3 3 import cls from 'classnames';
4 4 import { cloneDeep } from 'lodash-es';
5 5 import React, { useEffect, useState } from 'react';
  6 +import { FieldBaseType } from '../qx-base-condition';
6 7 import { QxBaseIcon } from '../qx-base-icon';
7 8 import { request } from '../utils';
8 9 import './index.less';
... ... @@ -151,11 +152,11 @@ export const useNodeFieldDisplay = ({
151 152 }
152 153 }
153 154
154   - return displayConfig
155   - }
  155 + return displayConfig;
  156 + };
156 157
157 158 const genDisplayDom = (value: string, nodes: INode[] = optionalNodes) => {
158   - const displayConfig = getDisplayConfig(value, nodes)
  159 + const displayConfig = getDisplayConfig(value, nodes);
159 160 return (
160 161 <>
161 162 {displayConfig?.map((item, idx) => (
... ... @@ -301,7 +302,7 @@ export const useNodeFieldDisplay = ({
301 302 correctionNodeField(targetParentNodes[i].data?.result || []);
302 303 }
303 304
304   - if (!limitTypes) {
  305 + if (!limitTypes || !limitTypes.length) {
305 306 setOptionalNodes(targetParentNodes);
306 307 renderInputDisplay(targetParentNodes);
307 308 return;
... ... @@ -317,11 +318,19 @@ export const useNodeFieldDisplay = ({
317 318 resultItem.child = getEffectiveResult(resultItem.child);
318 319 if (
319 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 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 334 newResult.push(resultItem);
326 335 }
327 336 }
... ... @@ -479,7 +488,7 @@ export const QxFlowNodeFieldSelector: React.FC<NodeFieldSelectProps> = (
479 488 const newValue = '${' + `${nodeKey}|${item.id}` + '}';
480 489 props.onChange?.(newValue, item);
481 490 if (!props.children) {
482   - renderInputDisplay(optionalNodes ,newValue);
  491 + renderInputDisplay(optionalNodes, newValue);
483 492 }
484 493 setVisible(false);
485 494 };
... ...