wzyyy пре 3 година
родитељ
комит
f13a122aa6

+ 8 - 8
src/app.tsx

@@ -385,14 +385,14 @@ export function render(oldRender: any) {
     });
     MenuService.queryOwnThree({ paging: false, terms: params }).then((res) => {
       if (res && res.status === 200) {
-        if (isDev) {
-          res.result.push({
-            code: 'iframe',
-            id: 'iframe',
-            name: '例子',
-            url: '/iframe',
-          });
-        }
+        // if (isDev) {
+        //   res.result.push({
+        //     code: 'iframe',
+        //     id: 'iframe',
+        //     name: '例子',
+        //     url: '/iframe',
+        //   });
+        // }
         extraRoutes = handleRoutes([...res.result, ...extraRouteArr]);
         saveMenusCache(extraRoutes);
       }

+ 8 - 0
src/pages/media/Stream/service.ts

@@ -7,6 +7,14 @@ class Service extends BaseService<StreamItem> {
     request(`/${SystemConst.API_BASE}/media/server/providers`, {
       method: 'GET',
     });
+  enalbe = (id: string) =>
+    request(`/${SystemConst.API_BASE}/media/server/${id}/_enable`, {
+      method: 'POST',
+    });
+  disable = (id: string) =>
+    request(`/${SystemConst.API_BASE}/media/server/${id}/_disable`, {
+      method: 'POST',
+    });
 }
 
 export default Service;

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

@@ -99,7 +99,7 @@ const Type = observer(() => {
     {
       type: 'webhook',
       name: 'webhook',
-      describe: '支持websocket消息通知',
+      describe: '支持Http消息通知',
     },
   ];
 

+ 57 - 24
src/pages/system/Apply/Menu/index.tsx

@@ -1,42 +1,65 @@
-import { Modal, Tree } from 'antd';
+import { onlyMessage } from '@/utils/util';
+import { Modal, Tree, Select } from 'antd';
 import { useEffect, useState } from 'react';
 import { service } from '../index';
 
 interface Props {
   close: Function;
-  data: string;
+  data: any;
 }
 
 const MenuPage = (props: Props) => {
-  const [treeData, setTreeData] = useState<undefined | any[]>(undefined);
+  const { data } = props;
+  const { Option } = Select;
+  const [treeData, setTreeData] = useState<any[]>([]);
   const [keys, setKeys] = useState<any>([]);
   const [expandedKeys, setExpandedKeys] = useState<string[]>([]);
+  const [half, setHalf] = useState<string[]>([]);
+  const [owner, setOwner] = useState<string>('iot');
+  const [ownerList, setOwenrList] = useState<any>([]);
+  // const [menu,setMenu] = useState<string>('')
 
   const getTree = async () => {
     const res = await service.queryOwner(['iot']);
     if (res.status === 200) {
+      if (data.provider !== 'internal-standalone') {
+        setOwner(res.result?.[0]);
+        setOwenrList(res.result);
+      }
       const resp = await service.queryOwnerTree(res.result?.[0]);
       if (resp.status === 200) {
         setTreeData(resp.result);
-        // console.log(resp.result)
+        const pid = resp.result.map((item: any) => item.id);
+        setExpandedKeys(pid);
       }
     }
   };
 
-  // const filterTree = (tree:any[],parms: any[]) => {
-  //     return tree.filter(item=>{
-  //         console.log(item)
-  //         return parms?.indexOf(item.id) > -1
-  //     }).map(i=>{
-  //         i = Object.assign({},i)
-  //         if(i.children){
-  //             i.children = filterTree(i.children,parms)
-  //         }
-  //         return i
-  //     })
-  // }
+  const save = async (datalist: any) => {
+    const res = await service.saveOwnerTree(owner, data.id, datalist);
+    if (res?.status === 200) {
+      onlyMessage('操作成功');
+    }
+  };
+
+  //过滤节点-默认带上父节点
+  const filterTree = (nodes: any[], list: any[]) => {
+    if (!nodes?.length) {
+      return nodes;
+    }
+    return nodes.filter((it) => {
+      // 不符合条件的直接砍掉
+      if (list.indexOf(it.id) <= -1) {
+        return false;
+      }
+      // 符合条件的保留,并且需要递归处理其子节点
+      it.children = filterTree(it.children, list);
+      return true;
+    });
+  };
 
   useEffect(() => {
+    console.log(data);
     getTree();
   }, []);
 
@@ -45,31 +68,41 @@ const MenuPage = (props: Props) => {
       visible
       maskClosable={false}
       title="集成菜单"
-      width={800}
+      width={600}
       onCancel={() => {
         props.close();
       }}
       onOk={() => {
-        // if(treeData && treeData.length!==0){
-        //     const item = filterTree(treeData,keys.checked)
-        //     console.log(item)
-        // }
-        // console.log(keys)
+        const items = filterTree(treeData, [...keys, ...half]);
+        if (items && items.length !== 0) {
+          save(items);
+        } else {
+          onlyMessage('请勾选配置菜单', 'warning');
+        }
       }}
     >
+      <Select
+        style={{ width: 200, marginBottom: 20 }}
+        placeholder="请选择集成系统"
+        defaultValue={owner}
+      >
+        {ownerList.map((item: any) => (
+          <Option value={item}>{item}</Option>
+        ))}
+      </Select>
       <Tree
         fieldNames={{
           title: 'name',
           key: 'id',
         }}
         checkable
-        // checkStrictly={true}
         treeData={treeData}
         checkedKeys={keys}
         autoExpandParent={true}
-        onCheck={(_keys: any, e) => {
+        onCheck={(_keys: any, e: any) => {
           console.log(e);
           setKeys(_keys);
+          setHalf(e.halfCheckedKeys);
         }}
         expandedKeys={expandedKeys}
         onExpand={(_keys: any[]) => {

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

@@ -146,6 +146,7 @@ const Save = () => {
         formInit.setInitialValues({
           ...resp.result,
           integrationModes,
+          'apiServer.appId': id,
         });
       });
       onFieldValueChange('provider', (field, form1) => {
@@ -206,15 +207,6 @@ const Save = () => {
             state.visible = true;
           });
         });
-        // const array = ['apiClient', 'apiServer'];
-        // const isSome = array.length ===value.length&& array.filter(t=>!value.includes(t))
-        // if(isSome){
-        //   // console.log(isSome,value)
-        //   console.log(11111)
-        //   form2.setFieldState('config.apiServer.appId',(state)=>{
-        //     state.visible=true
-        //   })
-        // }
       });
       onFieldReact('apiClient.authConfig.oauth2.clientId', (filed) => {
         const parms = filed.query('provider').get('value');

+ 5 - 0
src/pages/system/Apply/service.ts

@@ -31,6 +31,11 @@ class Service extends BaseService<any> {
       method: 'POST',
       data: {},
     });
+  saveOwnerTree = (owner: string, appId: string, data: any) =>
+    request(`${SystemConst.API_BASE}/menu/owner/${owner}/${appId}/_all`, {
+      method: 'PATCH',
+      data,
+    });
 }
 
 export default Service;

+ 1 - 0
src/pages/system/Menu/typing.d.ts

@@ -60,6 +60,7 @@ export type MenuItem = {
   redirect?: string;
   children?: MenuItem[];
   accessSupport?: { text: string; value: string };
+  appId?: string; //应用id
 };
 
 /**

+ 19 - 9
src/utils/menu/index.ts

@@ -225,16 +225,27 @@ export const handleRoutes = (routes?: MenuItem[], level = 1): MenuItem[] => {
  * @param level 路由层级
  */
 const getRoutes = (extraRoutes: MenuItem[], level = 1): IRouteProps[] => {
-  // console.log(extraRoutes, 1111111111);
   const allComponents = findComponents(require.context('@/pages', true, /index(\.tsx)$/));
   return extraRoutes.map((route) => {
-    const component = allComponents[route.code] || null;
-    const _route: IRouteProps = {
-      key: route.url,
-      name: route.name,
-      path: route.url,
-    };
+    let component;
+    let _route: IRouteProps;
+    if (route.appId) {
+      component = allComponents['iframe'];
+      _route = {
+        key: `${route.url}`,
+        name: route.name,
+        path: `${route.url}`,
+      };
+    } else {
+      component = allComponents[route.code] || null;
+      _route = {
+        key: route.url,
+        name: route.name,
+        path: route.url,
+      };
+    }
 
+    // console.log(_route)
     if (route.children && route.children.length) {
       const flatRoutes = getRoutes(flatRoute(route.children || []), level + 1);
       const redirect = flatRoutes.filter((r) => r.component)[0]?.path;
@@ -250,13 +261,12 @@ const getRoutes = (extraRoutes: MenuItem[], level = 1): IRouteProps[] => {
         : flatRoutes;
     } else if (component) {
       _route.component = component;
-      // console.log(component)
     }
 
     if (level !== 1) {
       _route.exact = true;
     }
-
+    console.log(_route);
     return _route;
   });
 };