wzyyy 3 лет назад
Родитель
Сommit
ab7aab37ba

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

@@ -29,15 +29,15 @@ interface Props {
 const FRuleEditor = observer((props: Props) => {
   const { value, onChange, property, virtualRule } = props;
   useEffect(() => {
-    // console.log(virtualRule, 111111111);
+    // console.log(value, 111111111);
     State.property = property;
     const subscription = Store.subscribe('rule-editor-value', onChange);
     State.code = value;
     return () => {
-      subscription.unsubscribe();
       State.code = '';
+      subscription.unsubscribe();
     };
-  });
+  }, []);
   return (
     <>
       <Editor

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

@@ -290,7 +290,10 @@ const SearchComponent = <T extends Record<string, any>>(props: Props<T>) => {
                     state.componentType = 'DatePicker';
                     state.componentProps = { showTime: true, allowClear: true };
                   });
-                  console.log(isModified);
+                  f.setFieldState(typeFiled.query('.termType'), async (state) => {
+                    state.value = 'gte';
+                  });
+                  // console.log(isModified);
                   if (isModified) {
                     f.setFieldState(typeFiled.query('.termType'), async (state) => {
                       state.value = 'gte';

+ 1 - 1
src/pages/account/Center/bind/index.tsx

@@ -23,7 +23,7 @@ const Bind = () => {
   const Vector = require('/public/images/bind/Vector.png');
   const Rectangle = require('/public/images/bind/Rectangle.png');
   const logo = require('/public/images/bind/jetlinksLogo.png');
-  // const defaultImg = require('/public/images/apply/provider1.png');
+  const defaultImg = require('/public/images/apply/provider1.png');
 
   const iconMap = new Map();
   iconMap.set('dingtalk-ent-app', require('/public/images/notice/dingtalk.png'));

+ 9 - 1
src/pages/account/NotificationSubscription/save/index.tsx

@@ -1,7 +1,7 @@
 import { Modal } from 'antd';
 import { useEffect, useMemo, useState } from 'react';
 import { Checkbox, Form, FormGrid, FormItem, Input, Select } from '@formily/antd';
-import { createForm } from '@formily/core';
+import { createForm, onFieldReact } from '@formily/core';
 import type { ISchema } from '@formily/react';
 import { createSchemaField } from '@formily/react';
 import { onlyMessage, useAsyncDataSource } from '@/utils/util';
@@ -23,6 +23,14 @@ const Save = (props: Props) => {
       createForm({
         validateFirst: true,
         initialValues: data,
+        effects: () => {
+          onFieldReact('topicProvider', (field: any) => {
+            const list = field.dataSource;
+            if (list && list.length !== 0) {
+              field.dataSource = list?.filter((item: any) => item.value === 'alarm');
+            }
+          });
+        },
       }),
     [],
   );

+ 2 - 0
src/pages/device/Firmware/Task/Detail/index.tsx

@@ -194,6 +194,7 @@ const Detail = observer(() => {
       ellipsis: true,
       dataIndex: 'productId',
       valueType: 'select',
+      hideInSearch: true,
       render: (text: any, record: any) => record?.productName,
       request: async () => {
         const res: any = await service.queryProduct({
@@ -209,6 +210,7 @@ const Detail = observer(() => {
     {
       title: '创建时间',
       ellipsis: true,
+      hideInSearch: true,
       dataIndex: 'createTime',
       valueType: 'dateTime',
       // render: (text: any) => moment(text).format('YYYY-MM-DD HH:mm:ss'),

+ 7 - 12
src/pages/device/Firmware/index.tsx

@@ -17,6 +17,7 @@ import usePermissions from '@/hooks/permission';
 import SearchComponent from '@/components/SearchComponent';
 import { getMenuPathByParams, MENUS_CODE } from '@/utils/menu';
 import { onlyMessage } from '@/utils/util';
+import _ from 'lodash';
 
 export const service = new Service('firmware');
 
@@ -64,20 +65,14 @@ const Firmware = observer(() => {
         service
           .queryProduct({
             paging: false,
-            // terms: [
-            //   {
-            //     column: 'state',
-            //     value: 1,
-            //   },
-            // ],
             sorts: [{ name: 'name', order: 'desc' }],
           })
-          .then((resp: any) =>
-            (resp?.result || []).map((item: any) => ({
-              label: item.name,
-              value: item.id,
-            })),
-          ),
+          .then((resp: any) => {
+            const _data = resp.result.filter((it: any) => {
+              return _.map(it?.features || [], 'id').includes('supportFirmware');
+            });
+            return _data.map((item: any) => ({ label: item.name, value: item.id }));
+          }),
     },
     {
       title: intl.formatMessage({

+ 4 - 1
src/pages/device/Instance/Detail/Functions/form.tsx

@@ -270,7 +270,10 @@ export default (props: FunctionProps) => {
           })}
         </p>
-        <Input.TextArea value={JSON.stringify(result?.[0])} rows={6} />
+        <Input.TextArea
+          value={Array.isArray(result) ? JSON.stringify(result?.[0]) : JSON.stringify(result)}
+          rows={6}
+        />
       </div>
     </div>
   );

+ 11 - 1
src/pages/device/Instance/index.tsx

@@ -319,7 +319,7 @@ const Instance = () => {
     },
     {
       title: '网关类型',
-      dataIndex: 'productId$product-info',
+      dataIndex: 'accessProvider',
       width: 150,
       ellipsis: true,
       valueType: 'select',
@@ -586,6 +586,11 @@ const Instance = () => {
                 column: 'productId$product-info',
                 value: [e],
               };
+            } else if (e.column === 'accessProvider') {
+              return {
+                ...e,
+                column: 'productId$product-info',
+              };
             } else {
               return e;
             }
@@ -597,6 +602,11 @@ const Instance = () => {
                   column: 'productId$product-info',
                   value: [e],
                 };
+              } else if (e.column === 'accessProvider') {
+                return {
+                  ...e,
+                  column: 'productId$product-info',
+                };
               } else {
                 return e;
               }

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

@@ -84,6 +84,7 @@ const AccessConfig = (props: Props) => {
     };
     service.queryList({ ...temp, sorts: [{ name: 'createTime', order: 'desc' }] }).then((resp) => {
       setDataSource(resp?.result);
+      setCurrrent(resp?.result?.data?.[0]);
     });
   };
 

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

@@ -552,7 +552,6 @@ const Access = () => {
           >
             保存
           </PermissionButton>
-          ,
           {/* <Button
             type="primary"
             onClick={async () => {

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

@@ -32,7 +32,7 @@ import {
   FileTypeList,
   PropertySource,
 } from '@/pages/device/data';
-import { useEffect, useMemo, useState } from 'react';
+import { useMemo, useState } from 'react';
 import { productModel } from '@/pages/device/Product';
 import { service } from '@/pages/device/components/Metadata';
 import { Store } from 'jetlinks-store';
@@ -63,9 +63,6 @@ interface Props {
 const Edit = observer((props: Props) => {
   const intl = useIntl();
   const [loading, setLoading] = useState<boolean>(false);
-  useEffect(() => {
-    console.log(props.tabs);
-  }, []);
   const form = useMemo(
     () =>
       createForm({

+ 3 - 5
src/pages/link/Channel/Opcua/index.tsx

@@ -51,11 +51,9 @@ const NewOpc = () => {
   const [currentData, setCurrentData] = useState<any>({});
 
   const collectMap = new Map();
-  collectMap.set('good', 'success');
-  collectMap.set('failed', 'error');
-  collectMap.set('bad', 'warning');
-  collectMap.set('uncertain', 'default');
-  collectMap.set('unknown', 'default');
+  collectMap.set('running', 'success');
+  collectMap.set('error', 'error');
+  collectMap.set('stopped', 'warning');
 
   const menu = (
     <Menu>

+ 5 - 3
src/pages/link/Channel/Opcua/savePoint.tsx

@@ -15,6 +15,7 @@ const SavePoint = (props: Props) => {
 
   const handleSave = async () => {
     const formData = await form.validateFields();
+    console.log(formData, 'formData');
     if (props.data.id) {
       service
         .editPoint(props.data.id, {
@@ -43,7 +44,6 @@ const SavePoint = (props: Props) => {
   };
 
   useEffect(() => {
-    console.log(props.data);
     if (props.data.id) {
       setDataMode(props.data.dataMode?.value);
     }
@@ -200,9 +200,10 @@ const SavePoint = (props: Props) => {
                   name="interval"
                   tooltip="OPC UA服务器采样点位数据发生变化的频率"
                   rules={[
+                    { required: true, message: '采集频率必填' },
                     ({}) => ({
                       validator(_, value) {
-                        if (value !== 0 || /(^[1-9]\d*$)/.test(value)) {
+                        if (value > 0 || /(^[1-9]\d*$)/.test(value)) {
                           return Promise.resolve();
                         }
                         return Promise.reject(new Error('请输入正整数'));
@@ -222,9 +223,10 @@ const SavePoint = (props: Props) => {
                   label="拉取频率"
                   name="interval"
                   rules={[
+                    { required: true, message: '拉取频率必填' },
                     ({}) => ({
                       validator(_, value) {
-                        if (value !== 0 || /(^[1-9]\d*$)/.test(value)) {
+                        if (value > 0 || /(^[1-9]\d*$)/.test(value)) {
                           return Promise.resolve();
                         }
                         return Promise.reject(new Error('请输入正整数'));

+ 7 - 3
src/pages/system/Apply/Menu/index.tsx

@@ -93,9 +93,12 @@ const MenuPage = (props: Props) => {
   };
 
   useEffect(() => {
-    getOwner();
-    getMenus();
-  }, []);
+    console.log(data);
+    if (data.id) {
+      getOwner();
+      getMenus();
+    }
+  }, [data]);
 
   return (
     <Modal
@@ -135,6 +138,7 @@ const MenuPage = (props: Props) => {
           </Option>
         ))}
       </Select>
+      <div>{treeData.length !== 0 ? '当前集成菜单' : ''}</div>
       <Tree
         fieldNames={{
           title: 'name',

+ 47 - 18
src/pages/system/Apply/Save/index.tsx

@@ -29,6 +29,7 @@ import type { Response } from '@/utils/typings';
 import usePermissions from '@/hooks/permission';
 import { useHistory, useLocation } from '@/hooks';
 import { getMenuPathByCode } from '@/utils/menu';
+import MenuPage from '../Menu';
 
 const Save = () => {
   const location = useLocation();
@@ -38,6 +39,8 @@ const Save = () => {
   const { permission } = PermissionButton.usePermission('system/Apply');
   const [view, setView] = useState<boolean>(false);
   const [id, setId] = useState<string>('');
+  const [visible, setVisiable] = useState<boolean>(false);
+  const [detail, setDetail] = useState<any>({});
 
   const provider1 = require('/public/images/apply/provider1.png');
   const provider2 = require('/public/images/apply/provider2.png');
@@ -142,7 +145,6 @@ const Save = () => {
         if (!id) return;
         const resp = await service.detail(id);
         const integrationModes = resp.result.integrationModes.map((item: any) => item.value);
-        console.log(integrationModes);
         formInit.setInitialValues({
           ...resp.result,
           integrationModes,
@@ -151,7 +153,7 @@ const Save = () => {
       });
       onFieldValueChange('provider', (field, form1) => {
         const value = field.value;
-        console.log(value);
+        // console.log(value);
         if (field.modified) {
           switch (value) {
             case 'internal-standalone':
@@ -210,7 +212,7 @@ const Save = () => {
       });
       onFieldReact('apiClient.authConfig.oauth2.clientId', (filed) => {
         const parms = filed.query('provider').get('value');
-        console.log(parms);
+        // console.log(parms);
         if (id && parms === 'internal-standalone') {
           filed.componentProps = {
             disabled: true,
@@ -235,22 +237,43 @@ const Save = () => {
         data.id = data.apiServer.appId;
       }
     }
-    if (id) {
-      const resp: any = await service.modify(id, data);
-      if (resp.status === 200) {
-        onlyMessage('保存成功');
-        const url = getMenuPathByCode('system/Apply');
-        history.push(url);
-      }
+    //独立应用,单点登录需要api配置和单点登录配置
+    if (
+      data.provider === 'internal-standalone' &&
+      data.integrationModes.includes('ssoClient') &&
+      data.integrationModes.length === 1
+    ) {
+      onlyMessage('配置单点登录需同时配置api配置', 'warning');
     } else {
-      const res: any = await service.save(data);
-      if (res.status === 200) {
-        onlyMessage('保存成功');
-        const url = getMenuPathByCode('system/Apply');
-        history.push(url);
+      if (id) {
+        const resp: any = await service.modify(id, data);
+        if (resp.status === 200) {
+          const isPage = data.integrationModes.includes('page');
+          if (isPage) {
+            setVisiable(true);
+            setDetail(data);
+          } else {
+            onlyMessage('保存成功');
+            const url = getMenuPathByCode('system/Apply');
+            history.push(url);
+          }
+        }
+      } else {
+        const res: any = await service.save(data);
+        if (res.status === 200) {
+          const isPage = data.integrationModes.includes('page');
+          if (isPage) {
+            setVisiable(true);
+            setDetail(data);
+          } else {
+            onlyMessage('保存成功');
+            const url = getMenuPathByCode('system/Apply');
+            history.push(url);
+          }
+        }
       }
     }
-    console.log(data);
+    // console.log(data);
   };
 
   //单点登录
@@ -1033,7 +1056,6 @@ const Save = () => {
                       style={{ padding: 0 }}
                       isPermission={rolePermission.add}
                       onClick={() => {
-                        console.log(rolePermission.add, permission.update);
                         const tab: any = window.open(`${origin}/#/system/role?save=true`);
                         tab!.onTabSaveSuccess = (value: any) => {
                           form.setFieldState('roleIdList', async (state) => {
@@ -1537,7 +1559,6 @@ const Save = () => {
                           style={{ padding: 0 }}
                           isPermission={rolePermission.add}
                           onClick={() => {
-                            console.log(rolePermission.add, permission.update);
                             const tab: any = window.open(`${origin}/#/system/role?save=true`);
                             tab!.onTabSaveSuccess = (value: any) => {
                               form.setFieldState('roleIdList', async (state) => {
@@ -1676,6 +1697,14 @@ const Save = () => {
           </Col>
         </Row>
       </Card>
+      {visible && (
+        <MenuPage
+          data={detail}
+          close={() => {
+            setVisiable(false);
+          }}
+        />
+      )}
     </PageContainer>
   );
 };

+ 1 - 1
src/pages/system/Apply/index.tsx

@@ -148,7 +148,7 @@ const Apply = () => {
         isPage(record.integrationModes) ? (
           <PermissionButton
             isPermission={permission.update}
-            key="edit"
+            key="page"
             onClick={() => {
               setData(record);
               setMenuVisiable(true);