Bläddra i källkod

Merge branch 'next' into next-xyh

Lind 3 år sedan
förälder
incheckning
18325a396e
33 ändrade filer med 214 tillägg och 225 borttagningar
  1. 1 1
      src/components/AIcon/index.tsx
  2. 3 3
      src/components/FBraftEditor/index.tsx
  3. 4 4
      src/components/ProTableCard/CardItems/AccessConfig/index.tsx
  4. 4 4
      src/components/ProTableCard/CardItems/cascade.tsx
  5. 5 2
      src/components/RightContent/AvatarDropdown.tsx
  6. 5 5
      src/components/Upload/Image/index.tsx
  7. 1 1
      src/hooks/websocket/useSendWebsocketMessage.ts
  8. 8 8
      src/pages/device/Category/Save/index.tsx
  9. 10 10
      src/pages/device/Category/index.tsx
  10. 6 11
      src/pages/device/Instance/Detail/Config/index.tsx
  11. 7 7
      src/pages/device/Instance/Detail/Log/index.tsx
  12. 3 3
      src/pages/device/Instance/Detail/MetadataMap/EditableTable/index.tsx
  13. 5 5
      src/pages/device/Instance/Detail/Tags/index.tsx
  14. 11 11
      src/pages/device/Instance/Detail/index.tsx
  15. 7 7
      src/pages/device/Instance/Save/index.tsx
  16. 10 8
      src/pages/device/Instance/index.tsx
  17. 5 5
      src/pages/device/Product/Detail/Access/AccessConfig/index.tsx
  18. 11 11
      src/pages/device/Product/Detail/Access/index.tsx
  19. 8 8
      src/pages/device/Product/Save/index.tsx
  20. 12 12
      src/pages/device/Product/index.tsx
  21. 16 22
      src/pages/device/components/Metadata/Base/Edit/index.tsx
  22. 12 12
      src/pages/device/components/Metadata/Base/index.tsx
  23. 4 4
      src/pages/device/components/Metadata/Cat/index.tsx
  24. 7 7
      src/pages/link/AccessConfig/index.tsx
  25. 10 10
      src/pages/link/Type/Detail/index.tsx
  26. 11 17
      src/pages/link/Type/index.tsx
  27. 1 1
      src/pages/notice/Config/index.tsx
  28. 1 11
      src/pages/notice/Template/Detail/doc/DingTalkRebot.tsx
  29. 1 1
      src/pages/notice/Template/Log/index.tsx
  30. 5 3
      src/pages/notice/Template/index.tsx
  31. 5 5
      src/pages/system/Role/Detail/UserManage/BindUser.tsx
  32. 10 6
      src/pages/system/User/Save/index.tsx
  33. 5 0
      src/pages/user/Login/service.ts

+ 1 - 1
src/components/AIcon/index.tsx

@@ -1,4 +1,4 @@
-import { createFromIconfontCN } from '@ant-design/icons';
+import {createFromIconfontCN} from '@ant-design/icons';
 
 const AIcon = createFromIconfontCN({
   scriptUrl: '/icons/iconfont.js', // 在 iconfont.cn 上生成

+ 3 - 3
src/components/FBraftEditor/index.tsx

@@ -1,7 +1,7 @@
-import { connect, mapProps } from '@formily/react';
-import BraftEditor, { BraftEditorProps, EditorState } from 'braft-editor';
+import {connect, mapProps} from '@formily/react';
+import BraftEditor, {BraftEditorProps, EditorState} from 'braft-editor';
 import 'braft-editor/dist/index.css';
-import { useState } from 'react';
+import {useState} from 'react';
 
 interface Props extends BraftEditorProps {
   value: any;

+ 4 - 4
src/components/ProTableCard/CardItems/AccessConfig/index.tsx

@@ -1,9 +1,9 @@
 import React from 'react';
-import { StatusColorEnum } from '@/components/BadgeStatus';
-import { TableCard } from '@/components';
+import {StatusColorEnum} from '@/components/BadgeStatus';
+import {TableCard} from '@/components';
 import '@/style/common.less';
-import { Badge, Tooltip } from 'antd';
-import type { AccessItem } from '@/pages/link/AccessConfig/typings';
+import {Badge, Tooltip} from 'antd';
+import type {AccessItem} from '@/pages/link/AccessConfig/typings';
 import './index.less';
 import classNames from 'classnames';
 

+ 4 - 4
src/components/ProTableCard/CardItems/cascade.tsx

@@ -1,10 +1,10 @@
 import React from 'react';
-import type { CascadeItem } from '@/pages/media/Cascade/typings';
-import { StatusColorEnum } from '@/components/BadgeStatus';
-import { TableCard } from '@/components';
+import type {CascadeItem} from '@/pages/media/Cascade/typings';
+import {StatusColorEnum} from '@/components/BadgeStatus';
+import {TableCard} from '@/components';
 import '@/style/common.less';
 import '../index.less';
-import { Badge } from 'antd';
+import {Badge} from 'antd';
 
 export interface CascadeCardProps extends CascadeItem {
   detail?: React.ReactNode;

+ 5 - 2
src/components/RightContent/AvatarDropdown.tsx

@@ -5,9 +5,9 @@ import { history, useModel } from 'umi';
 import { stringify } from 'querystring';
 import HeaderDropdown from '../HeaderDropdown';
 import styles from './index.less';
-import { outLogin } from '@/services/ant-design-pro/api';
 import type { MenuInfo } from 'rc-menu/lib/interface';
 import { useIntl } from '@@/plugin-locale/localeExports';
+import Service from '@/pages/user/Login/service';
 
 export type GlobalHeaderRightProps = {
   menu?: boolean;
@@ -16,8 +16,11 @@ export type GlobalHeaderRightProps = {
 /**
  * 退出登录,并且将当前的 url 保存
  */
+
+const service = Service;
 const loginOut = async () => {
-  await outLogin();
+  // await outLogin();
+  await service.logout();
   const { query = {}, pathname } = history.location;
   const { redirect } = query;
   // Note: There may be security issues, please note

+ 5 - 5
src/components/Upload/Image/index.tsx

@@ -1,10 +1,10 @@
-import { message, Upload } from 'antd';
-import React, { useEffect, useState } from 'react';
-import { LoadingOutlined, PlusOutlined } from '@ant-design/icons';
+import {message, Upload} from 'antd';
+import React, {useEffect, useState} from 'react';
+import {LoadingOutlined, PlusOutlined} from '@ant-design/icons';
 import SystemConst from '@/utils/const';
 import Token from '@/utils/token';
-import type { UploadChangeParam } from 'antd/lib/upload/interface';
-import type { RcFile } from 'antd/es/upload';
+import type {UploadChangeParam} from 'antd/lib/upload/interface';
+import type {RcFile} from 'antd/es/upload';
 import './index.less';
 
 interface UploadImageProps {

+ 1 - 1
src/hooks/websocket/useSendWebsocketMessage.ts

@@ -44,7 +44,7 @@ export const useSendWebsocketMessage = () => {
   const { sendMessage, latestMessage } = useWebSocket(url, {
     reconnectInterval: 1000,
     reconnectLimit: 1,
-    onClose: () => notification.error({ key: 'websocket-error', message: '网络错误,请刷新重试' }),
+    onClose: () => console.error('websocket 链接关闭'),
     onOpen: (event) => console.log('打开链接', event),
     onError: (event) => console.log('报错了', event),
     onMessage: dispenseMessage,

+ 8 - 8
src/pages/device/Category/Save/index.tsx

@@ -13,16 +13,16 @@ import {
   Upload,
 } from '@formily/antd';
 import React from 'react';
-import { createForm } from '@formily/core';
-import { createSchemaField } from '@formily/react';
+import {createForm} from '@formily/core';
+import {createSchemaField} from '@formily/react';
 import FUpload from '@/components/Upload';
 import * as ICONS from '@ant-design/icons';
-import { message, Modal } from 'antd';
-import { useIntl } from '@@/plugin-locale/localeExports';
-import type { ISchema } from '@formily/json-schema';
-import type { CategoryItem } from '@/pages/visualization/Category/typings';
-import { service, state } from '@/pages/device/Category';
-import type { Response } from '@/utils/typings';
+import {message, Modal} from 'antd';
+import {useIntl} from '@@/plugin-locale/localeExports';
+import type {ISchema} from '@formily/json-schema';
+import type {CategoryItem} from '@/pages/visualization/Category/typings';
+import {service, state} from '@/pages/device/Category';
+import type {Response} from '@/utils/typings';
 
 interface Props {
   visible: boolean;

+ 10 - 10
src/pages/device/Category/index.tsx

@@ -1,17 +1,17 @@
-import { PageContainer } from '@ant-design/pro-layout';
+import {PageContainer} from '@ant-design/pro-layout';
 import Service from '@/pages/device/Category/service';
-import type { ActionType, ProColumns } from '@jetlinks/pro-table';
+import type {ActionType, ProColumns} from '@jetlinks/pro-table';
 import ProTable from '@jetlinks/pro-table';
-import { DeleteOutlined, EditOutlined, PlusOutlined } from '@ant-design/icons';
-import { Button, message, Popconfirm, Tooltip } from 'antd';
-import { useRef, useState } from 'react';
-import { useIntl } from '@@/plugin-locale/localeExports';
+import {DeleteOutlined, EditOutlined, PlusOutlined} from '@ant-design/icons';
+import {Button, message, Popconfirm, Tooltip} from 'antd';
+import {useRef, useState} from 'react';
+import {useIntl} from '@@/plugin-locale/localeExports';
 import Save from '@/pages/device/Category/Save';
-import { model } from '@formily/reactive';
-import { observer } from '@formily/react';
-import type { Response } from '@/utils/typings';
+import {model} from '@formily/reactive';
+import {observer} from '@formily/react';
+import type {Response} from '@/utils/typings';
 import SearchComponent from '@/components/SearchComponent';
-import { getButtonPermission } from '@/utils/menu';
+import {getButtonPermission} from '@/utils/menu';
 
 export const service = new Service('device/category');
 

+ 6 - 11
src/pages/device/Instance/Detail/Config/index.tsx

@@ -1,14 +1,9 @@
-import { Button, Descriptions, message, Popconfirm, 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 {Button, Descriptions, message, Popconfirm, 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';
 
 const Config = () => {

+ 7 - 7
src/pages/device/Instance/Detail/Log/index.tsx

@@ -1,11 +1,11 @@
-import type { ActionType, ProColumns } from '@jetlinks/pro-table';
+import type {ActionType, ProColumns} from '@jetlinks/pro-table';
 import ProTable from '@jetlinks/pro-table';
-import type { LogItem } from '@/pages/device/Instance/Detail/Log/typings';
-import { Card, Input, Modal, Tooltip } from 'antd';
-import { SearchOutlined } from '@ant-design/icons';
-import { useIntl } from '@@/plugin-locale/localeExports';
-import { InstanceModel, service } from '@/pages/device/Instance';
-import { useEffect, useRef, useState } from 'react';
+import type {LogItem} from '@/pages/device/Instance/Detail/Log/typings';
+import {Card, Input, Modal, Tooltip} from 'antd';
+import {SearchOutlined} from '@ant-design/icons';
+import {useIntl} from '@@/plugin-locale/localeExports';
+import {InstanceModel, service} from '@/pages/device/Instance';
+import {useEffect, useRef, useState} from 'react';
 import SearchComponent from '@/components/SearchComponent';
 
 const Log = () => {

+ 3 - 3
src/pages/device/Instance/Detail/MetadataMap/EditableTable/index.tsx

@@ -1,6 +1,6 @@
-import React, { useContext, useEffect, useState } from 'react';
-import { Form, Input, message, Pagination, Select, Table } from 'antd';
-import { service } from '@/pages/device/Instance';
+import React, {useContext, useEffect, useState} from 'react';
+import {Form, Input, message, Pagination, Select, Table} from 'antd';
+import {service} from '@/pages/device/Instance';
 import _ from 'lodash';
 
 const EditableContext: any = React.createContext(null);

+ 5 - 5
src/pages/device/Instance/Detail/Tags/index.tsx

@@ -1,8 +1,8 @@
-import { Button, Descriptions } from 'antd';
-import { useIntl } from '@@/plugin-locale/localeExports';
-import { InstanceModel } from '@/pages/device/Instance';
-import { useEffect, useState } from 'react';
-import { EditOutlined } from '@ant-design/icons';
+import {Button, Descriptions} from 'antd';
+import {useIntl} from '@@/plugin-locale/localeExports';
+import {InstanceModel} from '@/pages/device/Instance';
+import {useEffect, useState} from 'react';
+import {EditOutlined} from '@ant-design/icons';
 import Edit from './Edit';
 
 const Tags = () => {

+ 11 - 11
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, Button, Card, Descriptions, Divider, message, Popconfirm, Tooltip } 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, Button, Card, Descriptions, Divider, message, Popconfirm, 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,13 +13,13 @@ 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 { getMenuPathByParams, MENUS_CODE } from '@/utils/menu';
+import {getMenuPathByParams, MENUS_CODE} from '@/utils/menu';
 import useSendWebsocketMessage from '@/hooks/websocket/useSendWebsocketMessage';
 
 export const deviceStatus = new Map();

+ 7 - 7
src/pages/device/Instance/Save/index.tsx

@@ -1,10 +1,10 @@
-import { Col, Form, Input, message, Row, Select } from 'antd';
-import { service } from '@/pages/device/Instance';
-import type { DeviceInstance } from '../typings';
-import { useEffect, useState } from 'react';
-import { useIntl } from '@@/plugin-locale/localeExports';
-import { Modal, UploadImage } from '@/components';
-import { debounce } from 'lodash';
+import {Col, Form, Input, message, Row, Select} from 'antd';
+import {service} from '@/pages/device/Instance';
+import type {DeviceInstance} from '../typings';
+import {useEffect, useState} from 'react';
+import {useIntl} from '@@/plugin-locale/localeExports';
+import {Modal, UploadImage} from '@/components';
+import {debounce} from 'lodash';
 
 interface Props {
   visible: boolean;

+ 10 - 8
src/pages/device/Instance/index.tsx

@@ -1,10 +1,10 @@
-import { PageContainer } from '@ant-design/pro-layout';
-import type { ActionType, ProColumns } from '@jetlinks/pro-table';
-import type { DeviceInstance } from '@/pages/device/Instance/typings';
+import {PageContainer} from '@ant-design/pro-layout';
+import type {ActionType, ProColumns} from '@jetlinks/pro-table';
+import type {DeviceInstance} from '@/pages/device/Instance/typings';
 import moment from 'moment';
-import { Badge, Button, Dropdown, Menu, message, Popconfirm, Tooltip } from 'antd';
-import { useRef, useState } from 'react';
-import { useHistory } from 'umi';
+import {Badge, Button, Dropdown, Menu, message, Popconfirm, Tooltip} from 'antd';
+import {useRef, useState} from 'react';
+import {useHistory} from 'umi';
 import {
   CheckCircleOutlined,
   DeleteOutlined,
@@ -16,7 +16,7 @@ import {
   StopOutlined,
   SyncOutlined,
 } from '@ant-design/icons';
-import { model } from '@formily/reactive';
+import {model} from '@formily/reactive';
 import Service from '@/pages/device/Instance/service';
 import type { MetadataItem } from '@/pages/device/Product/typings';
 import { useIntl, useLocation } from 'umi';
@@ -25,13 +25,15 @@ import Export from './Export';
 import Import from './Import';
 import Process from './Process';
 import SearchComponent from '@/components/SearchComponent';
-import { ProTableCard } from '@/components';
+import {ProTableCard} from '@/components';
 import SystemConst from '@/utils/const';
 import Token from '@/utils/token';
 import DeviceCard from '@/components/ProTableCard/CardItems/device';
+
 import { getButtonPermission, getMenuPathByParams, MENUS_CODE } from '@/utils/menu';
 import { withRouter } from 'react-router-dom';
 
+
 export const statusMap = new Map();
 statusMap.set('在线', 'success');
 statusMap.set('离线', 'error');

+ 5 - 5
src/pages/device/Product/Detail/Access/AccessConfig/index.tsx

@@ -1,9 +1,9 @@
-import { useEffect, useState } from 'react';
-import { Button, Col, message, Modal, Pagination, Row } from 'antd';
-import { service } from '@/pages/link/AccessConfig';
-import { productModel } from '@/pages/device/Product';
+import {useEffect, useState} from 'react';
+import {Button, Col, message, Modal, Pagination, Row} from 'antd';
+import {service} from '@/pages/link/AccessConfig';
+import {productModel} from '@/pages/device/Product';
 import SearchComponent from '@/components/SearchComponent';
-import type { ProColumns } from '@jetlinks/pro-table';
+import type {ProColumns} from '@jetlinks/pro-table';
 import styles from './index.less';
 import Service from '@/pages/device/Product/service';
 

+ 11 - 11
src/pages/device/Product/Detail/Access/index.tsx

@@ -1,17 +1,17 @@
-import { Badge, Button, Col, Empty, message, Row, Table, Tooltip } from 'antd';
-import { service } from '@/pages/link/AccessConfig';
-import { productModel, service as productService } from '@/pages/device/Product';
+import {Badge, Button, Col, Empty, message, Row, Table, Tooltip} from 'antd';
+import {service} from '@/pages/link/AccessConfig';
+import {productModel, service as productService} from '@/pages/device/Product';
 import styles from './index.less';
-import type { SetStateAction } from 'react';
-import { useEffect, useState } from 'react';
+import type {SetStateAction} from 'react';
+import {useEffect, useState} from 'react';
 import AccessConfig from './AccessConfig';
 import ReactMarkdown from 'react-markdown';
-import { Form, FormGrid, FormItem, FormLayout, Input, Password, PreviewText } from '@formily/antd';
-import type { ISchema } from '@formily/json-schema';
-import type { ConfigProperty } from '@/pages/device/Product/typings';
-import { createSchemaField } from '@formily/react';
-import { createForm } from '@formily/core';
-import { QuestionCircleOutlined } from '@ant-design/icons';
+import {Form, FormGrid, FormItem, FormLayout, Input, Password, PreviewText} from '@formily/antd';
+import type {ISchema} from '@formily/json-schema';
+import type {ConfigProperty} from '@/pages/device/Product/typings';
+import {createSchemaField} from '@formily/react';
+import {createForm} from '@formily/core';
+import {QuestionCircleOutlined} from '@ant-design/icons';
 import TitleComponent from '@/components/TitleComponent';
 
 const componentMap = {

+ 8 - 8
src/pages/device/Product/Save/index.tsx

@@ -1,11 +1,11 @@
-import { useEffect, useState } from 'react';
-import { service } from '@/pages/device/Product';
-import type { ProductItem } from '@/pages/device/Product/typings';
-import { useIntl } from '@@/plugin-locale/localeExports';
-import { RadioCard, UploadImage } from '@/components';
-import { Col, Form, Input, message, Modal, Row, TreeSelect } from 'antd';
-import { useRequest } from 'umi';
-import { debounce } from 'lodash';
+import {useEffect, useState} from 'react';
+import {service} from '@/pages/device/Product';
+import type {ProductItem} from '@/pages/device/Product/typings';
+import {useIntl} from '@@/plugin-locale/localeExports';
+import {RadioCard, UploadImage} from '@/components';
+import {Col, Form, Input, message, Modal, Row, TreeSelect} from 'antd';
+import {useRequest} from 'umi';
+import {debounce} from 'lodash';
 
 interface Props {
   visible: boolean;

+ 12 - 12
src/pages/device/Product/index.tsx

@@ -1,6 +1,6 @@
-import { PageContainer } from '@ant-design/pro-layout';
-import { Badge, Button, message, Popconfirm, Space, Tooltip, Upload } from 'antd';
-import type { ProductItem } from '@/pages/device/Product/typings';
+import {PageContainer} from '@ant-design/pro-layout';
+import {Badge, Button, message, Popconfirm, Space, Tooltip, Upload} from 'antd';
+import type {ProductItem} from '@/pages/device/Product/typings';
 import {
   DeleteOutlined,
   DownloadOutlined,
@@ -10,18 +10,18 @@ import {
   StopOutlined,
 } from '@ant-design/icons';
 import Service from '@/pages/device/Product/service';
-import { observer } from '@formily/react';
-import { model } from '@formily/reactive';
-import { useHistory } from 'umi';
-import { useIntl } from '@@/plugin-locale/localeExports';
-import type { ActionType, ProColumns } from '@jetlinks/pro-table';
-import { useEffect, useRef, useState } from 'react';
+import {observer} from '@formily/react';
+import {model} from '@formily/reactive';
+import {useHistory} from 'umi';
+import {useIntl} from '@@/plugin-locale/localeExports';
+import type {ActionType, ProColumns} from '@jetlinks/pro-table';
+import {useEffect, useRef, useState} from 'react';
 import Save from '@/pages/device/Product/Save';
 import SearchComponent from '@/components/SearchComponent';
-import { getButtonPermission, getMenuPathByParams, MENUS_CODE } from '@/utils/menu';
-import { ProTableCard } from '@/components';
+import {getButtonPermission, getMenuPathByParams, MENUS_CODE} from '@/utils/menu';
+import {ProTableCard} from '@/components';
 import ProductCard from '@/components/ProTableCard/CardItems/product';
-import { downloadObject } from '@/utils/util';
+import {downloadObject} from '@/utils/util';
 import AIcon from '../../../components/AIcon';
 
 export const service = new Service('device-product');

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

@@ -1,8 +1,8 @@
-import { Button, Drawer, Dropdown, Menu, message } from 'antd';
-import { createSchemaField, observer } from '@formily/react';
+import {Button, Drawer, Dropdown, Menu, message} from 'antd';
+import {createSchemaField, observer} from '@formily/react';
 import MetadataModel from '../model';
-import type { Field, IFieldState } from '@formily/core';
-import { createForm, registerValidateRules } from '@formily/core';
+import type {Field, IFieldState} from '@formily/core';
+import {createForm, registerValidateRules} from '@formily/core';
 import {
   ArrayItems,
   Editable,
@@ -15,34 +15,28 @@ import {
   Select,
   Space,
 } from '@formily/antd';
-import type { ISchema } from '@formily/json-schema';
-import {
-  DataTypeList,
-  DateTypeList,
-  EventLevel,
-  FileTypeList,
-  PropertySource,
-} from '@/pages/device/data';
-import { useMemo } from 'react';
-import { productModel } from '@/pages/device/Product';
-import { service } from '@/pages/device/components/Metadata';
-import { Store } from 'jetlinks-store';
-import type { MetadataItem } from '@/pages/device/Product/typings';
+import type {ISchema} from '@formily/json-schema';
+import {DataTypeList, DateTypeList, EventLevel, FileTypeList, PropertySource,} from '@/pages/device/data';
+import {useMemo} from 'react';
+import {productModel} from '@/pages/device/Product';
+import {service} from '@/pages/device/components/Metadata';
+import {Store} from 'jetlinks-store';
+import type {MetadataItem} from '@/pages/device/Product/typings';
 
 import JsonParam from '@/components/Metadata/JsonParam';
 import ArrayParam from '@/components/Metadata/ArrayParam';
 import EnumParam from '@/components/Metadata/EnumParam';
 import BooleanEnum from '@/components/Metadata/BooleanParam';
 import ConfigParam from '@/components/Metadata/ConfigParam';
-import { useIntl } from '@@/plugin-locale/localeExports';
-import { lastValueFrom } from 'rxjs';
+import {useIntl} from '@@/plugin-locale/localeExports';
+import {lastValueFrom} from 'rxjs';
 import SystemConst from '@/utils/const';
 import DB from '@/db';
 import _ from 'lodash';
-import { InstanceModel } from '@/pages/device/Instance';
+import {InstanceModel} from '@/pages/device/Instance';
 import FRuleEditor from '@/components/FRuleEditor';
-import { action } from '@formily/reactive';
-import { asyncUpdateMedata, updateMetadata } from '../../metadata';
+import {action} from '@formily/reactive';
+import {asyncUpdateMedata, updateMetadata} from '../../metadata';
 
 interface Props {
   type: 'product' | 'device';

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

@@ -1,22 +1,22 @@
-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 { Button, message, Popconfirm, Tooltip } from 'antd';
-import { DeleteOutlined, EditOutlined, ImportOutlined, PlusOutlined } from '@ant-design/icons';
+import {Button, message, Popconfirm, Tooltip} 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 {productModel} from '@/pages/device/Product';
+import {InstanceModel} from '@/pages/device/Instance';
+import {asyncUpdateMedata, removeMetadata} from '../metadata';
 
 interface Props {
   type: MetadataType;

+ 4 - 4
src/pages/device/components/Metadata/Cat/index.tsx

@@ -1,8 +1,8 @@
-import { Drawer, Tabs } from 'antd';
-import { useEffect, useState } from 'react';
-import { productModel, service } from '@/pages/device/Product';
+import {Drawer, Tabs} from 'antd';
+import {useEffect, useState} from 'react';
+import {productModel, service} from '@/pages/device/Product';
 import MonacoEditor from 'react-monaco-editor';
-import { observer } from '@formily/react';
+import {observer} from '@formily/react';
 
 interface Props {
   visible: boolean;

+ 7 - 7
src/pages/link/AccessConfig/index.tsx

@@ -1,12 +1,12 @@
 import SearchComponent from '@/components/SearchComponent';
-import { getButtonPermission, getMenuPathByCode, MENUS_CODE } from '@/utils/menu';
-import { PageContainer } from '@ant-design/pro-layout';
-import type { ProColumns } from '@jetlinks/pro-table';
-import { Button, Card, Col, Empty, message, Pagination, Popconfirm, Row, Tooltip } from 'antd';
-import { useEffect, useState } from 'react';
-import { useHistory } from 'umi';
+import {getButtonPermission, getMenuPathByCode, MENUS_CODE} from '@/utils/menu';
+import {PageContainer} from '@ant-design/pro-layout';
+import type {ProColumns} from '@jetlinks/pro-table';
+import {Button, Card, Col, Empty, message, Pagination, Popconfirm, Row, Tooltip} from 'antd';
+import {useEffect, useState} from 'react';
+import {useHistory} from 'umi';
 import Service from './service';
-import { CheckCircleOutlined, DeleteOutlined, EditOutlined, StopOutlined } from '@ant-design/icons';
+import {CheckCircleOutlined, DeleteOutlined, EditOutlined, StopOutlined} from '@ant-design/icons';
 import AccessConfigCard from '@/components/ProTableCard/CardItems/AccessConfig';
 
 export const service = new Service('gateway/device');

+ 10 - 10
src/pages/link/Type/Detail/index.tsx

@@ -1,5 +1,5 @@
-import { PageContainer } from '@ant-design/pro-layout';
-import { createSchemaField, observer } from '@formily/react';
+import {PageContainer} from '@ant-design/pro-layout';
+import {createSchemaField, observer} from '@formily/react';
 import {
   ArrayCollapse,
   Form,
@@ -14,17 +14,17 @@ import {
   Select,
   Submit,
 } from '@formily/antd';
-import type { ISchema } from '@formily/json-schema';
-import { useEffect, useMemo, useRef } from 'react';
-import type { Field } from '@formily/core';
-import { createForm, onFieldValueChange } from '@formily/core';
-import { Card, message } from 'antd';
+import type {ISchema} from '@formily/json-schema';
+import {useEffect, useMemo, useRef} from 'react';
+import type {Field} from '@formily/core';
+import {createForm, onFieldValueChange} from '@formily/core';
+import {Card, message} from 'antd';
 import styles from './index.less';
-import { useAsyncDataSource } from '@/utils/util';
-import { service } from '../index';
+import {useAsyncDataSource} from '@/utils/util';
+import {service} from '../index';
 import _ from 'lodash';
 import FAutoComplete from '@/components/FAutoComplete';
-import { Store } from 'jetlinks-store';
+import {Store} from 'jetlinks-store';
 
 /**
  *  根据类型过滤配置信息

+ 11 - 17
src/pages/link/Type/index.tsx

@@ -1,22 +1,16 @@
-import { useRef, useState } from 'react';
-import type { ActionType, ProColumns } from '@jetlinks/pro-table';
-import { Badge, Button, message, Popconfirm, Tooltip } from 'antd';
-import {
-  CloseCircleOutlined,
-  DeleteOutlined,
-  EditOutlined,
-  PlayCircleOutlined,
-  PlusOutlined,
-} from '@ant-design/icons';
-import { PageContainer } from '@ant-design/pro-layout';
-import type { NetworkItem } from '@/pages/link/Type/typings';
-import { useIntl } from '@@/plugin-locale/localeExports';
+import {useRef, useState} from 'react';
+import type {ActionType, ProColumns} from '@jetlinks/pro-table';
+import {Badge, Button, message, Popconfirm, Tooltip} from 'antd';
+import {CloseCircleOutlined, DeleteOutlined, EditOutlined, PlayCircleOutlined, PlusOutlined,} from '@ant-design/icons';
+import {PageContainer} from '@ant-design/pro-layout';
+import type {NetworkItem} from '@/pages/link/Type/typings';
+import {useIntl} from '@@/plugin-locale/localeExports';
 import SearchComponent from '@/components/SearchComponent';
-import { getButtonPermission, getMenuPathByParams, MENUS_CODE } from '@/utils/menu';
-import { history } from 'umi';
+import {getButtonPermission, getMenuPathByParams, MENUS_CODE} from '@/utils/menu';
+import {history} from 'umi';
 import Service from '@/pages/link/service';
-import { Store } from 'jetlinks-store';
-import { ProTableCard } from '@/components';
+import {Store} from 'jetlinks-store';
+import {ProTableCard} from '@/components';
 import NetworkCard from '@/components/ProTableCard/CardItems/networkCard';
 
 export const service = new Service('network/config');

+ 1 - 1
src/pages/notice/Config/index.tsx

@@ -310,7 +310,7 @@ const Config = observer(() => {
         )}
       />
       <Debug />
-      <Log />
+      {state.log && <Log />}
     </PageContainer>
   );
 });

+ 1 - 11
src/pages/notice/Template/Detail/doc/DingTalkRebot.tsx

@@ -1,9 +1,4 @@
-import { Image } from 'antd';
-
 const DingTalkRebot = () => {
-  const text = require('/public/images/notice/doc/template/dingTalk-rebot/01-text.jpg');
-  const markdown = require('/public/images/notice/doc/template/dingTalk-rebot/02-markdown.jpg');
-  const link = require('/public/images/notice/doc/template/dingTalk-rebot/03-link.jpg');
   const b = '{name}';
   return (
     <div>
@@ -26,12 +21,7 @@ const DingTalkRebot = () => {
         <div> 1、绑定配置</div>
         <div> 绑定通知配置</div>
         <div> 2、消息类型</div>
-        <div> 目前支持text、markdown、link3种,对应的发送效果示例,如下图:</div>
-        <div>
-          <Image width="100%" src={text} />
-          <Image width="100%" src={markdown} />
-          <Image width="100%" src={link} />
-        </div>
+        <div> 目前支持text、markdown、link3种。</div>
         <div> 3. 模板内容</div>
         <div>
           支持填写带变量的动态模板。变量填写规范示例:${b}

+ 1 - 1
src/pages/notice/Template/Log/index.tsx

@@ -56,7 +56,7 @@ const Log = observer(() => {
       onCancel={() => (state.log = false)}
       title="通知记录"
       width={'70vw'}
-      visible={state.log}
+      visible={state.log && !!state.current?.id}
     >
       <SearchComponent
         defaultParam={[{ column: 'notifyType$IN', value: id }]}

+ 5 - 3
src/pages/notice/Template/index.tsx

@@ -23,6 +23,7 @@ import { downloadObject } from '@/utils/util';
 import moment from 'moment';
 import { ProTableCard } from '@/components';
 import NoticeCard, { typeList } from '@/components/ProTableCard/CardItems/noticeTemplate';
+import { observer } from '@formily/react';
 
 export const service = new Service('notifier/template');
 
@@ -35,7 +36,7 @@ export const state = model<{
   debug: false,
   log: false,
 });
-const Template = () => {
+const Template = observer(() => {
   const intl = useIntl();
   const location = useLocation<{ id: string }>();
   const id = (location as any).query?.id;
@@ -262,6 +263,7 @@ const Template = () => {
                 key="log"
                 onClick={() => {
                   state.log = true;
+                  state.current = record;
                 }}
               >
                 <UnorderedListOutlined />
@@ -287,8 +289,8 @@ const Template = () => {
         }
       />
       <Debug />
-      <Log />
+      {state.log && <Log />}
     </PageContainer>
   );
-};
+});
 export default Template;

+ 5 - 5
src/pages/system/Role/Detail/UserManage/BindUser.tsx

@@ -1,9 +1,9 @@
-import type { ProColumns } from '@jetlinks/pro-table';
+import type {ProColumns} from '@jetlinks/pro-table';
 import ProTable from '@jetlinks/pro-table';
-import { message, Modal } from 'antd';
-import { useRef, useState } from 'react';
-import { useIntl } from '@@/plugin-locale/localeExports';
-import { service } from '@/pages/system/User/index';
+import {message, Modal} from 'antd';
+import {useRef, useState} from 'react';
+import {useIntl} from '@@/plugin-locale/localeExports';
+import {service} from '@/pages/system/User/index';
 import Service from '@/pages/system/Role/service';
 import SearchComponent from '@/components/SearchComponent';
 

+ 10 - 6
src/pages/system/User/Save/index.tsx

@@ -299,6 +299,7 @@ const Save = (props: Props) => {
                         state.dataSource = state.dataSource?.concat([
                           { label: value.name, value: value.id },
                         ]);
+                        state.value = [...state.value, value.id];
                       });
                     };
                   }}
@@ -332,12 +333,15 @@ const Save = (props: Props) => {
                   onClick={() => {
                     const tab: any = window.open(`${origin}/#/system/department?save=true`);
                     tab!.onTabSaveSuccess = (value: any) => {
-                      console.log(value, 'value');
-                      form.setFieldState('orgIdList', (state) => {
-                        state.dataSource = state.dataSource?.concat({
-                          name: value.name,
-                          id: value.id,
-                        });
+                      form.setFieldState('orgIdList', async (state) => {
+                        state.dataSource = await getOrg().then((resp) =>
+                          resp.result?.map((item: Record<string, unknown>) => ({
+                            ...item,
+                            label: item.name,
+                            value: item.id,
+                          })),
+                        );
+                        state.value = [...state.value, value.id];
                       });
                     };
                   }}

+ 5 - 0
src/pages/user/Login/service.ts

@@ -42,6 +42,11 @@ const Service = {
     request(`/${SystemConst.API_BASE}/authorize/me`, {
       method: 'GET',
     }),
+
+  logout: () =>
+    request(`${SystemConst.API_BASE}/user-token/reset`, {
+      method: 'GET',
+    }),
 };
 
 export default Service;