瀏覽代碼

Merge xyh

Next xyh
XieYongHong 3 年之前
父節點
當前提交
20eff55b26

+ 106 - 84
src/components/SearchComponent/index.tsx

@@ -200,88 +200,90 @@ const SearchComponent = <T extends Record<string, any>>(props: Props<T>) => {
         initialValues: initParams,
         effects() {
           onFieldReact('*.*.column', async (typeFiled, f) => {
-            const _column = (typeFiled as Field).value;
-            const _field = field.find((item) => item.dataIndex === _column);
-            if (_column === 'id') {
-              f.setFieldState(typeFiled.query('.termType'), async (state) => {
-                state.value = 'eq';
-              });
-              f.setFieldState(typeFiled.query('.value'), async (state) => {
-                state.componentType = 'Input';
-                state.componentProps = { allowClear: true };
-              });
-            } else {
-              switch (_field?.valueType) {
-                case 'select':
-                  let __option: { label: any; value: any }[] | FieldDataSource | undefined = [];
-                  if (_field?.valueEnum) {
-                    __option = Object.values(_field?.valueEnum || {}).map((item) => ({
-                      label: item.text,
-                      value: item.status,
-                    }));
-                  } else if (_field?.request) {
-                    __option = await _field.request();
-                  }
-                  f.setFieldState(typeFiled.query('.termType'), async (state) => {
-                    state.value = 'eq';
-                  });
-                  f.setFieldState(typeFiled.query('.value'), async (state) => {
-                    console.log(state.value);
-                    state.componentType = 'Select';
-                    state.dataSource = __option;
-                    state.componentProps = { allowClear: true };
-                  });
-                  break;
-                case 'treeSelect':
-                  let _option: { label: any; value: any }[] | FieldDataSource | undefined = [];
-                  if (_field?.valueEnum) {
-                    _option = Object.values(_field?.valueEnum || {}).map((item) => ({
-                      label: item.text,
-                      value: item.status,
-                    }));
-                  } else if (_field?.request) {
-                    _option = await _field.request();
-                  }
-                  f.setFieldState(typeFiled.query('.termType'), (_state) => {
-                    _state.value = 'eq';
-                  });
-                  f.setFieldState(typeFiled.query('.value'), (state) => {
-                    state.componentType = 'TreeSelect';
-                    state.dataSource = _option;
-                    state.componentProps = {
-                      ..._field.fieldProps,
-                      allowClear: true,
-                      treeNodeFilterProp: 'name',
-                    };
-                  });
-                  break;
-                case 'digit':
-                  f.setFieldState(typeFiled.query('.value'), async (state) => {
-                    state.componentType = 'NumberPicker';
-                    state.componentProps = { allowClear: true };
-                  });
-                  f.setFieldState(typeFiled.query('.termType'), async (state) => {
-                    state.value = 'eq';
-                  });
-                  break;
-                case 'dateTime':
-                  f.setFieldState(typeFiled.query('.value'), async (state) => {
-                    state.componentType = 'DatePicker';
-                    state.componentProps = { showTime: true, allowClear: true };
-                  });
-                  f.setFieldState(typeFiled.query('.termType'), async (state) => {
-                    state.value = 'gte';
-                  });
-                  break;
-                default:
-                  f.setFieldState(typeFiled.query('.termType'), async (state) => {
-                    state.value = 'like';
-                  });
-                  f.setFieldState(typeFiled.query('.value'), async (state) => {
-                    state.componentType = 'Input';
-                    state.componentProps = { allowClear: true };
-                  });
-                  break;
+            if ((typeFiled as Field).modified) {
+              const _column = (typeFiled as Field).value;
+              const _field = field.find((item) => item.dataIndex === _column);
+              if (_column === 'id') {
+                f.setFieldState(typeFiled.query('.termType'), async (state) => {
+                  state.value = 'eq';
+                });
+                f.setFieldState(typeFiled.query('.value'), async (state) => {
+                  state.componentType = 'Input';
+                  state.componentProps = { allowClear: true };
+                });
+              } else {
+                switch (_field?.valueType) {
+                  case 'select':
+                    let __option: { label: any; value: any }[] | FieldDataSource | undefined = [];
+                    if (_field?.valueEnum) {
+                      __option = Object.values(_field?.valueEnum || {}).map((item) => ({
+                        label: item.text,
+                        value: item.status,
+                      }));
+                    } else if (_field?.request) {
+                      __option = await _field.request();
+                    }
+                    f.setFieldState(typeFiled.query('.termType'), async (state) => {
+                      state.value = 'eq';
+                    });
+                    f.setFieldState(typeFiled.query('.value'), async (state) => {
+                      console.log(state.value);
+                      state.componentType = 'Select';
+                      state.dataSource = __option;
+                      state.componentProps = { allowClear: true };
+                    });
+                    break;
+                  case 'treeSelect':
+                    let _option: { label: any; value: any }[] | FieldDataSource | undefined = [];
+                    if (_field?.valueEnum) {
+                      _option = Object.values(_field?.valueEnum || {}).map((item) => ({
+                        label: item.text,
+                        value: item.status,
+                      }));
+                    } else if (_field?.request) {
+                      _option = await _field.request();
+                    }
+                    f.setFieldState(typeFiled.query('.termType'), (_state) => {
+                      _state.value = 'eq';
+                    });
+                    f.setFieldState(typeFiled.query('.value'), (state) => {
+                      state.componentType = 'TreeSelect';
+                      state.dataSource = _option;
+                      state.componentProps = {
+                        ..._field.fieldProps,
+                        allowClear: true,
+                        treeNodeFilterProp: 'name',
+                      };
+                    });
+                    break;
+                  case 'digit':
+                    f.setFieldState(typeFiled.query('.value'), async (state) => {
+                      state.componentType = 'NumberPicker';
+                      state.componentProps = { allowClear: true };
+                    });
+                    f.setFieldState(typeFiled.query('.termType'), async (state) => {
+                      state.value = 'eq';
+                    });
+                    break;
+                  case 'dateTime':
+                    f.setFieldState(typeFiled.query('.value'), async (state) => {
+                      state.componentType = 'DatePicker';
+                      state.componentProps = { showTime: true, allowClear: true };
+                    });
+                    f.setFieldState(typeFiled.query('.termType'), async (state) => {
+                      state.value = 'gte';
+                    });
+                    break;
+                  default:
+                    f.setFieldState(typeFiled.query('.termType'), async (state) => {
+                      state.value = 'like';
+                    });
+                    f.setFieldState(typeFiled.query('.value'), async (state) => {
+                      state.componentType = 'Input';
+                      state.componentProps = { allowClear: true };
+                    });
+                    break;
+                }
               }
             }
           });
@@ -532,6 +534,26 @@ const SearchComponent = <T extends Record<string, any>>(props: Props<T>) => {
       });
   };
 
+  const handleSearchValue = (
+    data: SearchTermsServer,
+    fields: ProColumns<T>[],
+  ): SearchTermsServer => {
+    return data.map((item) => {
+      item.terms?.forEach((termsItem) => {
+        const _fieldItem = fields.find((fieldItem) => fieldItem.dataIndex === termsItem.column);
+        if (
+          _fieldItem &&
+          _fieldItem.search &&
+          _fieldItem.search.transform &&
+          _.isFunction(_fieldItem.search.transform)
+        ) {
+          termsItem.value = _fieldItem.search.transform(termsItem.value, '', '');
+        }
+      });
+      return item;
+    });
+  };
+
   const handleSearch = async (type: boolean = true) => {
     const value = form.values;
     const filterTerms = (data: Partial<Term>[] | undefined) =>
@@ -540,7 +562,6 @@ const SearchComponent = <T extends Record<string, any>>(props: Props<T>) => {
     _terms.terms1 = filterTerms(_terms.terms1);
     _terms.terms2 = filterTerms(_terms.terms2);
     const _temp = formatValue(_terms);
-
     if (
       (_terms.terms1 && _terms.terms1.length > 1) ||
       (_terms.terms2 && _terms.terms2.length > 1)
@@ -574,7 +595,8 @@ const SearchComponent = <T extends Record<string, any>>(props: Props<T>) => {
         search: '?' + params.toString(),
       });
     }
-    onSearch({ terms: _temp });
+    const newTemp = handleSearchValue(_.cloneDeep(_temp), props.field);
+    onSearch({ terms: newTemp });
   };
 
   useEffect(() => {

+ 4 - 1
src/pages/system/Department/Assets/deivce/bind.tsx

@@ -44,7 +44,7 @@ const Bind = observer((props: Props) => {
         id: 'pages.device.firmware.productName',
         defaultMessage: '所属产品',
       }),
-      dataIndex: 'configuration',
+      dataIndex: 'productId$product-info',
       valueType: 'select',
       filterMultiple: true,
       request: async () => {
@@ -57,6 +57,9 @@ const Bind = observer((props: Props) => {
       render: (_, row) => {
         return row.productName;
       },
+      search: {
+        transform: (value) => `id is ${value}`,
+      },
     },
     {
       title: intl.formatMessage({

+ 12 - 1
src/pages/system/Department/Assets/deivce/index.tsx

@@ -104,7 +104,18 @@ export default observer((props: { parentId: string }) => {
         id: 'pages.device.firmware.productName',
         defaultMessage: '所属产品',
       }),
-      dataIndex: 'configuration',
+      valueType: 'select',
+      dataIndex: 'productId$product-info',
+      request: async () => {
+        const res = await service.getProductList();
+        if (res.status === 200) {
+          return res.result.map((pItem: any) => ({ label: pItem.name, value: pItem.id }));
+        }
+        return [];
+      },
+      search: {
+        transform: (value) => `id is ${value}`,
+      },
       render: (_, row) => {
         return row.productName;
       },