Pārlūkot izejas kodu

fix(metadata): fix metadata bug

lind 3 gadi atpakaļ
vecāks
revīzija
b6bc020886

+ 0 - 1
src/components/BaseCrud/model.ts

@@ -16,7 +16,6 @@ export const CurdModel = model<Option>({
   },
 
   update(current: any) {
-    console.log('触发编辑');
     Store.set(SystemConst.BASE_CURD_MODEL, 'edit');
     Store.set(SystemConst.BASE_CURD_MODAL_VISIBLE, true);
     Store.set(SystemConst.BASE_CURD_CURRENT, current);

+ 0 - 1
src/components/FRuleEditor/Editor/index.tsx

@@ -94,7 +94,6 @@ const Editor = (props: Props) => {
   };
 
   const handleInsertCode = (value: string) => {
-    console.log(value, 'values');
     const editor = editorRef.current;
     if (!editor || !value) return;
     const position = editor.getPosition()!;

+ 0 - 2
src/components/FSelectDevice/index.tsx

@@ -74,7 +74,6 @@ const FSelectDevice = connect((props: Props) => {
     },
     selectedRowKeys: [data?.id] as Key[],
   };
-  console.log(props?.value, 'de-name');
   return (
     <>
       <Input
@@ -92,7 +91,6 @@ const FSelectDevice = connect((props: Props) => {
           onCancel={() => setVisible(false)}
           onOk={() => {
             setVisible(false);
-            console.log(data, 'dd');
             props.onChange(data);
           }}
         >

+ 3 - 4
src/components/SearchComponent/index.tsx

@@ -203,7 +203,6 @@ const SearchComponent = <T extends Record<string, any>>(props: Props<T>) => {
               f.setFieldState(typeFiled.query('.value'), (state) => {
                 state.componentType = 'TreeSelect';
                 state.dataSource = option;
-                console.log(option, 'optin');
                 state.componentProps = {
                   ..._field.fieldProps,
                   treeNodeFilterProp: 'name',
@@ -397,7 +396,7 @@ const SearchComponent = <T extends Record<string, any>>(props: Props<T>) => {
     if (initParam && initParam[0].terms && initParam[0].terms.length > 1) {
       handleExpand();
     }
-  }, [initParam]);
+  }, []);
   const simpleSchema: ISchema = {
     type: 'object',
     properties: {
@@ -491,10 +490,10 @@ const SearchComponent = <T extends Record<string, any>>(props: Props<T>) => {
   };
 
   useEffect(() => {
-    if (defaultParam) {
+    if (defaultParam || initParam) {
       handleSearch();
     }
-  }, []);
+  }, [defaultParam, initParam]);
 
   const handleSaveLog = async () => {
     const value = await form.submit<SearchTermsUI>();

+ 12 - 8
src/pages/device/Instance/Detail/Config/index.tsx

@@ -1,11 +1,16 @@
-import {Descriptions, message, Space, Tooltip} from 'antd';
-import {InstanceModel, service} from '@/pages/device/Instance';
-import {useEffect, useState} from 'react';
-import type {ConfigMetadata} from '@/pages/device/Product/typings';
-import {history, useParams} from 'umi';
-import {CheckOutlined, EditOutlined, QuestionCircleOutlined, UndoOutlined,} from '@ant-design/icons';
+import { Descriptions, message, Space, Tooltip } from 'antd';
+import { InstanceModel, service } from '@/pages/device/Instance';
+import { useEffect, useState } from 'react';
+import type { ConfigMetadata } from '@/pages/device/Product/typings';
+import { history, useParams } from 'umi';
+import {
+  CheckOutlined,
+  EditOutlined,
+  QuestionCircleOutlined,
+  UndoOutlined,
+} from '@ant-design/icons';
 import Edit from './Edit';
-import {PermissionButton} from '@/components';
+import { PermissionButton } from '@/components';
 
 const Config = () => {
   const params = useParams<{ id: string }>();
@@ -35,7 +40,6 @@ const Config = () => {
   };
 
   useEffect(() => {
-    console.log(id);
     if (id) {
       service.getConfigMetadata(id).then((config) => {
         setMetadata(config?.result);

+ 46 - 17
src/pages/device/Instance/Detail/index.tsx

@@ -1,10 +1,10 @@
-import {PageContainer} from '@ant-design/pro-layout';
-import {InstanceModel, service} from '@/pages/device/Instance';
-import {history, useParams} from 'umi';
-import {Badge, Card, Descriptions, Divider, message} from 'antd';
-import type {ReactNode} from 'react';
-import {useEffect, useState} from 'react';
-import {observer} from '@formily/react';
+import { PageContainer } from '@ant-design/pro-layout';
+import { InstanceModel, service } from '@/pages/device/Instance';
+import { history, useParams } from 'umi';
+import { Badge, Card, Descriptions, Divider, message, Tooltip } from 'antd';
+import type { ReactNode } from 'react';
+import { useEffect, useState } from 'react';
+import { observer } from '@formily/react';
 import Log from '@/pages/device/Instance/Detail/Log';
 // import Alarm from '@/pages/device/components/Alarm';
 import Info from '@/pages/device/Instance/Detail/Info';
@@ -13,15 +13,16 @@ import Running from '@/pages/device/Instance/Detail/Running';
 import ChildDevice from '@/pages/device/Instance/Detail/ChildDevice';
 import Diagnose from '@/pages/device/Instance/Detail/Diagnose';
 import MetadataMap from '@/pages/device/Instance/Detail/MetadataMap';
-import {useIntl} from '@@/plugin-locale/localeExports';
+import { useIntl } from '@@/plugin-locale/localeExports';
 import Metadata from '../../components/Metadata';
-import type {DeviceMetadata} from '@/pages/device/Product/typings';
+import type { DeviceMetadata } from '@/pages/device/Product/typings';
 import MetadataAction from '@/pages/device/components/Metadata/DataBaseAction';
-import {Store} from 'jetlinks-store';
+import { Store } from 'jetlinks-store';
 import SystemConst from '@/utils/const';
-import {getMenuPathByCode, getMenuPathByParams, MENUS_CODE} from '@/utils/menu';
+import { getMenuPathByCode, getMenuPathByParams, MENUS_CODE } from '@/utils/menu';
 import useSendWebsocketMessage from '@/hooks/websocket/useSendWebsocketMessage';
-import {PermissionButton} from '@/components';
+import { PermissionButton } from '@/components';
+import { QuestionCircleOutlined } from '@ant-design/icons';
 
 export const deviceStatus = new Map();
 deviceStatus.set('online', <Badge status="success" text={'在线'} />);
@@ -63,10 +64,37 @@ const InstanceDetail = observer(() => {
     },
     {
       key: 'metadata',
-      tab: intl.formatMessage({
-        id: 'pages.device.instanceDetail.metadata',
-        defaultMessage: '物模型',
-      }),
+      tab: (
+        <>
+          {intl.formatMessage({
+            id: 'pages.device.instanceDetail.metadata',
+            defaultMessage: '物模型',
+          })}
+          <Tooltip
+            title={
+              <>
+                属性:
+                <br />
+                用于描述设备运行时具体信息和状态。
+                <br />
+                功能:
+                <br />
+                指设备可供外部调用的指令或方法。
+                <br />
+                事件:
+                <br />
+                设备运行时,主动上报给云端的信息。
+                <br />
+                标签:
+                <br />
+                统一为设备添加拓展字段,添加后将在设备信息页显示。
+              </>
+            }
+          >
+            <QuestionCircleOutlined style={{ marginLeft: 5 }} />
+          </Tooltip>
+        </>
+      ),
       component: (
         <Card>
           <Metadata
@@ -118,7 +146,8 @@ const InstanceDetail = observer(() => {
       component: <MetadataMap type="device" />,
     },
   ];
-  const [list, setList] = useState<{ key: string; tab: string; component: ReactNode }[]>(baseList);
+  const [list, setList] =
+    useState<{ key: string; tab: string | ReactNode; component: ReactNode }[]>(baseList);
 
   const getDetail = (id: string) => {
     service.detail(id).then((response) => {

+ 0 - 1
src/pages/device/Product/Detail/PropertyImport/index.tsx

@@ -34,7 +34,6 @@ const NormalUpload = (props: any) => {
     const _data = updateMetadata('properties', _metadata.properties, target) as ProductItem;
     // const resp = await service.update(_product);
     const resp = await asyncUpdateMedata(props.type, _data);
-    console.log(resp);
     if (resp.status === 200) {
       message.success('操作成功');
       // 刷新物模型

+ 32 - 4
src/pages/device/Product/Detail/index.tsx

@@ -16,6 +16,7 @@ import encodeQuery from '@/utils/encodeQuery';
 import MetadataMap from '@/pages/device/Instance/Detail/MetadataMap';
 import SystemConst from '@/utils/const';
 import { PermissionButton } from '@/components';
+import { QuestionCircleOutlined } from '@ant-design/icons';
 
 export const ModelEnum = {
   base: 'base',
@@ -158,10 +159,37 @@ const ProductDetail = observer(() => {
     },
     {
       key: 'metadata',
-      tab: intl.formatMessage({
-        id: 'pages.device.productDetail.metadata',
-        defaultMessage: '物模型',
-      }),
+      tab: (
+        <>
+          {intl.formatMessage({
+            id: 'pages.device.instanceDetail.metadata',
+            defaultMessage: '物模型',
+          })}
+          <Tooltip
+            title={
+              <>
+                属性:
+                <br />
+                用于描述设备运行时具体信息和状态。
+                <br />
+                功能:
+                <br />
+                指设备可供外部调用的指令或方法。
+                <br />
+                事件:
+                <br />
+                设备运行时,主动上报给云端的信息。
+                <br />
+                标签:
+                <br />
+                统一为设备添加拓展字段,添加后将在设备信息页显示。
+              </>
+            }
+          >
+            <QuestionCircleOutlined style={{ marginLeft: 5 }} />
+          </Tooltip>
+        </>
+      ),
       component: <Metadata type="product" />,
     },
     {

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

@@ -582,7 +582,7 @@ const Edit = observer((props: Props) => {
             },
           },
           type: {
-            title: MetadataModel.type === 'tags' ? '标签类型' : '属性类型',
+            title: MetadataModel.type === 'tags' ? '标签类型' : '读写类型',
             required: true,
             'x-decorator': 'FormItem',
             'x-component': 'Select',

+ 18 - 9
src/pages/device/components/Metadata/Base/columns.ts

@@ -1,5 +1,6 @@
 import type { ProColumns } from '@jetlinks/pro-table';
 import type { MetadataItem } from '@/pages/device/Product/typings';
+import { Tag } from 'antd';
 
 const BaseColumns: ProColumns<MetadataItem>[] = [
   // {
@@ -22,6 +23,12 @@ const BaseColumns: ProColumns<MetadataItem>[] = [
   },
 ];
 
+const type = {
+  read: '读',
+  write: '写',
+  report: '上报',
+};
+
 const EventColumns: ProColumns<MetadataItem>[] = BaseColumns.concat([
   {
     title: '事件级别',
@@ -43,11 +50,11 @@ const FunctionColumns: ProColumns<MetadataItem>[] = BaseColumns.concat([
     dataIndex: 'async',
     render: (text) => (text ? '是' : '否'),
   },
-  {
-    title: '读写类型',
-    dataIndex: 'expands.readOnly',
-    render: (text) => (text ? '是' : '否'),
-  },
+  // {
+  //   title: '读写类型',
+  //   dataIndex: 'expands',
+  //   render: (text: any) => (text?.type || []).map((item: string | number) => <Tag>{type[item]}</Tag>),
+  // },
 ]);
 
 const PropertyColumns: ProColumns<MetadataItem>[] = BaseColumns.concat([
@@ -58,8 +65,9 @@ const PropertyColumns: ProColumns<MetadataItem>[] = BaseColumns.concat([
   },
   {
     title: '读写类型',
-    dataIndex: 'expands.readOnly',
-    render: (text) => (text === 'true' || text === true ? '是' : '否'),
+    dataIndex: 'expands',
+    render: (text: any) =>
+      (text?.type || []).map((item: string | number) => <Tag>{type[item]}</Tag>),
   },
 ]);
 
@@ -71,8 +79,9 @@ const TagColumns: ProColumns<MetadataItem>[] = BaseColumns.concat([
   },
   {
     title: '读写类型',
-    dataIndex: 'expands.readOnly',
-    render: (text) => (text === 'true' || text === true ? '是' : '否'),
+    dataIndex: 'expands',
+    render: (text: any) =>
+      (text?.type || []).map((item: string | number) => <Tag>{type[item]}</Tag>),
   },
 ]);
 

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

@@ -1,24 +1,24 @@
-import type {ProColumns} from '@jetlinks/pro-table';
+import type { ProColumns } from '@jetlinks/pro-table';
 import ProTable from '@jetlinks/pro-table';
-import {useCallback, useEffect, useState} from 'react';
-import {useParams} from 'umi';
+import { useCallback, useEffect, useState } from 'react';
+import { useParams } from 'umi';
 import DB from '@/db';
-import type {MetadataItem, MetadataType} from '@/pages/device/Product/typings';
+import type { MetadataItem, MetadataType } from '@/pages/device/Product/typings';
 import MetadataMapping from './columns';
-import {message} from 'antd';
-import {DeleteOutlined, EditOutlined, ImportOutlined, PlusOutlined} from '@ant-design/icons';
+import { message } from 'antd';
+import { DeleteOutlined, EditOutlined, ImportOutlined, PlusOutlined } from '@ant-design/icons';
 import Edit from './Edit';
-import {observer} from '@formily/react';
+import { observer } from '@formily/react';
 import MetadataModel from './model';
-import {Store} from 'jetlinks-store';
+import { Store } from 'jetlinks-store';
 import SystemConst from '@/utils/const';
-import {useIntl} from '@@/plugin-locale/localeExports';
+import { useIntl } from '@@/plugin-locale/localeExports';
 import PropertyImport from '@/pages/device/Product/Detail/PropertyImport';
-import {productModel} from '@/pages/device/Product';
-import {InstanceModel} from '@/pages/device/Instance';
-import {asyncUpdateMedata, removeMetadata} from '../metadata';
-import type {permissionType} from '@/hooks/permission';
-import {PermissionButton} from '@/components';
+import { productModel } from '@/pages/device/Product';
+import { InstanceModel } from '@/pages/device/Instance';
+import { asyncUpdateMedata, removeMetadata } from '../metadata';
+import type { permissionType } from '@/hooks/permission';
+import { PermissionButton } from '@/components';
 
 interface Props {
   type: MetadataType;

+ 8 - 9
src/pages/device/components/Metadata/index.tsx

@@ -1,16 +1,16 @@
-import {observer} from '@formily/react';
-import {Space, Tabs} from 'antd';
+import { observer } from '@formily/react';
+import { Space, Tabs } from 'antd';
 import BaseMetadata from './Base';
-import {useIntl} from '@@/plugin-locale/localeExports';
+import { useIntl } from '@@/plugin-locale/localeExports';
 import Import from './Import';
-import type {ReactNode} from 'react';
-import {useState} from 'react';
+import type { ReactNode } from 'react';
+import { useState } from 'react';
 import Cat from './Cat';
 import Service from '@/pages/device/components/Metadata/service';
-import {InfoCircleOutlined} from '@ant-design/icons';
+import { InfoCircleOutlined } from '@ant-design/icons';
 import styles from './index.less';
-import {InstanceModel} from '@/pages/device/Instance';
-import {PermissionButton} from '@/components';
+import { InstanceModel } from '@/pages/device/Instance';
+import { PermissionButton } from '@/components';
 
 interface Props {
   tabAction?: ReactNode;
@@ -26,7 +26,6 @@ const Metadata = observer((props: Props) => {
   const { permission } = PermissionButton.usePermission(
     props.type === 'device' ? 'device/Instance' : 'device/Product',
   );
-  console.log(InstanceModel.detail, 'test');
   return (
     <div style={{ position: 'relative' }}>
       <div className={styles.tips}>