ソースを参照

feat(metadata): import metadata

Lind 4 年 前
コミット
64424ce103

+ 11 - 7
src/pages/device/components/Metadata/Base/Edit/index.tsx

@@ -67,13 +67,13 @@ const Edit = observer((props: Props) => {
     },
     events: {
       title: intl.formatMessage({
-        id: 'pages.device.productDetail.metadata.inputParameter',
+        id: 'pages.device.productDetail.metadata.outputParameters',
         defaultMessage: '输出参数',
       }),
     },
     functions: {
       title: intl.formatMessage({
-        id: 'pages.device.productDetail.metadata.inputParameter',
+        id: 'pages.device.productDetail.metadata.outputParameters',
         defaultMessage: '输出参数',
       }),
     },
@@ -613,7 +613,8 @@ const Edit = observer((props: Props) => {
   };
   const createTagSchema = () => {
     const temp = _.cloneDeep(propertySchema) as any;
-    delete temp.properties?.expands.properties.readOnly;
+    delete temp.properties?.expands.properties.configConfig;
+    delete temp.properties?.expands.properties.source;
     return temp;
   };
   const metadataTypeMapping: Record<string, { name: string; schema: ISchema }> = {
@@ -636,12 +637,15 @@ const Edit = observer((props: Props) => {
   };
 
   const getUnit = () =>
-    service.getUnit().then((resp) =>
-      resp.result.map((item: any) => ({
+    service.getUnit().then((resp) => {
+      const _data = resp.result.map((item: any) => ({
         label: item.description,
         value: item.id,
-      })),
-    );
+      }));
+      // 缓存单位数据
+      Store.set('units', _data);
+      return _data;
+    });
 
   const getStreamingAggType = () =>
     service.getStreamingAggType().then((resp) =>

+ 17 - 7
src/pages/device/components/Metadata/Base/index.tsx

@@ -5,8 +5,8 @@ import { useParams } from 'umi';
 import DB from '@/db';
 import type { MetadataItem, MetadataType } from '@/pages/device/Product/typings';
 import MetadataMapping from './columns';
-import { Button, message, Popconfirm, Tooltip } from 'antd';
-import { EditOutlined, MinusOutlined, PlusOutlined } from '@ant-design/icons';
+import { Button, Popconfirm, Tooltip } from 'antd';
+import { DeleteOutlined, EditOutlined, PlusOutlined } from '@ant-design/icons';
 import Edit from './Edit';
 import { observer } from '@formily/react';
 import MetadataModel from './model';
@@ -50,7 +50,7 @@ const BaseMetadata = observer((props: Props) => {
         <a key="delete">
           <Popconfirm title="确认删除?" onConfirm={async () => {}}>
             <Tooltip title="删除">
-              <MinusOutlined />
+              <DeleteOutlined />
             </Tooltip>
           </Popconfirm>
         </a>,
@@ -75,6 +75,19 @@ const BaseMetadata = observer((props: Props) => {
     });
     return () => subscription.unsubscribe();
   }, []);
+
+  const handleSearch = async (name: string) => {
+    if (name) {
+      const result = await DB.getDB()
+        .table(`${type}`)
+        .where('id')
+        .startsWithAnyOfIgnoreCase(name)
+        .toArray();
+      setData(result);
+    } else {
+      await initData();
+    }
+  };
   return (
     <>
       <ProTable
@@ -96,10 +109,7 @@ const BaseMetadata = observer((props: Props) => {
         }}
         toolbar={{
           search: {
-            onSearch: async (value) => {
-              // Todo 物模型属性搜索
-              message.success(value);
-            },
+            onSearch: handleSearch,
           },
         }}
         toolBarRender={() => [

+ 6 - 11
src/pages/device/components/Metadata/Import/index.tsx

@@ -1,4 +1,4 @@
-import { Button, Drawer, message } from 'antd';
+import { message, Modal } from 'antd';
 import { createSchemaField } from '@formily/react';
 import type { Field } from '@formily/core';
 import { createForm } from '@formily/core';
@@ -124,6 +124,7 @@ const Import = (props: Props) => {
               accept: '.json',
               formatOnType: true,
               formatOnPaste: true,
+              type: 'file',
               beforeUpload: (file: any) => {
                 const reader = new FileReader();
                 reader.readAsText(file);
@@ -182,18 +183,12 @@ const Import = (props: Props) => {
     message.success('导入成功');
   };
   return (
-    <Drawer
+    <Modal
       title="导入物模型"
       destroyOnClose
       visible={props.visible}
-      onClose={() => props.close()}
-      extra={
-        <Space>
-          <Button type="primary" onClick={handleImport}>
-            确定
-          </Button>
-        </Space>
-      }
+      onCancel={() => props.close()}
+      onOk={handleImport}
     >
       <div style={{ background: 'rgb(236, 237, 238)' }}>
         <p style={{ padding: 10 }}>
@@ -213,7 +208,7 @@ const Import = (props: Props) => {
       <Form form={form} layout="vertical">
         <SchemaField scope={{ loadData }} schema={schema} />
       </Form>
-    </Drawer>
+    </Modal>
   );
 };