浏览代码

feat(merge): merge xyh

Next xyh
Lind 3 年之前
父节点
当前提交
791cc65904

+ 3 - 3
src/pages/rule-engine/Scene/Save/components/TimingTrigger/index.tsx

@@ -193,8 +193,8 @@ export default (props: TimingTrigger) => {
                 <TimePicker.RangePicker
                   format={'HH:mm:ss'}
                   value={[
-                    moment(data.period?.from, 'HH:mm:ss'),
-                    moment(data.period?.to, 'hh:mm:ss'),
+                    moment(data.period?.from || new Date(), 'HH:mm:ss'),
+                    moment(data.period?.to || new Date(), 'hh:mm:ss'),
                   ]}
                   onChange={(_, dateString) => {
                     onChange({
@@ -210,7 +210,7 @@ export default (props: TimingTrigger) => {
               ) : (
                 <TimePicker
                   format={'HH:mm:ss'}
-                  value={moment(data.once?.time, 'HH:mm:ss')}
+                  value={moment(data.once?.time || new Date(), 'HH:mm:ss')}
                   onChange={(_, dateString) => {
                     onChange({
                       ...data,

+ 9 - 5
src/pages/rule-engine/Scene/Save/index.tsx

@@ -60,6 +60,7 @@ export default () => {
 
   const [requestParams, setRequestParams] = useState<any>(undefined);
   const [triggerValue, setTriggerValue] = useState<any>([]);
+  const [triggerDatas, setTriggerDatas] = useState<any>({});
   const [actionParams, setActionParams] = useState<any>(undefined);
 
   const [actionsData, setActionsData] = useState<any[]>([]);
@@ -76,6 +77,7 @@ export default () => {
         setParallel(_data.parallel);
 
         setTriggerValue({ trigger: _data.terms || [] });
+        setTriggerDatas(_data.terms);
         if (_data.trigger?.shakeLimit) {
           setShakeLimit(_data.trigger?.shakeLimit || DefaultShakeLimit);
         }
@@ -214,6 +216,12 @@ export default () => {
                 if (changeValue.trigger.device.productId) {
                   setTriggerValue([]);
                   setRequestParams({ trigger: allValues.trigger });
+                } else if (
+                  changeValue.trigger.device.selectorValues ||
+                  (changeValue.trigger.device.operation &&
+                    changeValue.trigger.device.operation.operator)
+                ) {
+                  setTriggerDatas(allValues.trigger);
                 }
               } else if (['timer', 'manual'].includes(changeValue.trigger.type)) {
                 setActionParams({ trigger: allValues.trigger });
@@ -317,11 +325,7 @@ export default () => {
               // >
               //   <TriggerDevice className={'trigger-type-content'} />
               // </Form.Item>
-              <TriggerDevice
-                value={requestParams && requestParams.trigger}
-                className={'trigger-type-content'}
-                form={form}
-              />
+              <TriggerDevice value={triggerDatas} className={'trigger-type-content'} form={form} />
             )}
           </Form.Item>
           {triggerType === TriggerWayType.device &&

+ 4 - 1
src/pages/rule-engine/Scene/Save/trigger/index.tsx

@@ -142,6 +142,8 @@ export default observer((props: TriggerProps) => {
     getProducts();
   }, []);
 
+  console.log('triggerModel', FormModel);
+
   useEffect(() => {
     const triggerData = props.value;
     console.log('triggerData', triggerData);
@@ -174,7 +176,7 @@ export default observer((props: TriggerProps) => {
               onChange={(key: any, node: any) => {
                 props.form?.resetFields([['trigger', 'device', 'selector']]);
                 props.form?.resetFields([['trigger', 'device', 'selectorValues']]);
-                props.form?.resetFields([['trigger', 'device', 'operation', 'operator']]);
+                props.form?.resetFields([['trigger', 'device', 'operation']]);
                 productIdChange(key, node.metadata);
                 props.form?.setFieldsValue({
                   trigger: {
@@ -207,6 +209,7 @@ export default observer((props: TriggerProps) => {
                     ]}
                     // fieldNames={{ label: 'name', value: 'id' }}
                     onSelect={(key: string) => {
+                      props.form?.resetFields([['trigger', 'device', 'selectorValues']]);
                       setSelector(key);
                     }}
                     style={{ width: 120 }}

+ 15 - 5
src/pages/rule-engine/Scene/Save/trigger/operation.tsx

@@ -25,12 +25,22 @@ export default (props: OperatorProps) => {
       if (props.propertiesList) {
         return _key.map((item) => {
           const proItem = props.propertiesList!.find((a: any) => a.id === item);
+          if (proItem) {
+            return {
+              id: proItem.id,
+              name: proItem.name,
+              type: proItem.valueType ? proItem.valueType.type : '-',
+              format: proItem.valueType ? proItem.valueType.format : undefined,
+              options: proItem.valueType ? proItem.valueType.elements : undefined,
+              value: value[item],
+            };
+          }
           return {
-            id: proItem.id,
-            name: proItem.name,
-            type: proItem.valueType ? proItem.valueType.type : '-',
-            format: proItem.valueType ? proItem.valueType.format : undefined,
-            options: proItem.valueType ? proItem.valueType.elements : undefined,
+            id: item,
+            name: item,
+            type: '',
+            format: undefined,
+            options: undefined,
             value: value[item],
           };
         });

+ 35 - 9
src/pages/system/Platforms/Api/basePage.tsx

@@ -1,5 +1,5 @@
 import { Button, message, Table } from 'antd';
-import { useCallback, useEffect, useState } from 'react';
+import { useCallback, useEffect, useState, useRef } from 'react';
 import { useLocation } from 'umi';
 import { service } from '../index';
 import { ApiModel } from '@/pages/system/Platforms/Api/base';
@@ -15,6 +15,9 @@ export default (props: TableProps) => {
   const [selectKeys, setSelectKeys] = useState<string[]>([]);
   const [dataSource, setDataSource] = useState<any[]>([]);
   const [loading, setLoading] = useState(false);
+
+  const grantCache = useRef<string[]>([]);
+
   const location = useLocation();
 
   const getApiGrant = useCallback(() => {
@@ -23,6 +26,7 @@ export default (props: TableProps) => {
 
     service.getApiGranted(code!).then((resp: any) => {
       if (resp.status === 200) {
+        grantCache.current = resp.result;
         setSelectKeys(resp.result);
       }
     });
@@ -30,9 +34,6 @@ export default (props: TableProps) => {
 
   const getOperations = async (apiData: any[], operations: string[]) => {
     // 过滤只能授权的接口,当isShowGranted为true时,过滤为已赋权的接口
-    console.log(
-      apiData.filter((item) => item && item.operationId && operations.includes(item.operationId)),
-    );
     setDataSource(
       apiData.filter((item) => item && item.operationId && operations.includes(item.operationId)),
     );
@@ -65,7 +66,23 @@ export default (props: TableProps) => {
   const save = useCallback(async () => {
     const param = new URLSearchParams(location.search);
     const code = param.get('code');
-    const operations = selectKeys.map((a: string) => {
+    // 和原有已授权数据进行对比
+    const addGrant = selectKeys.filter((key) => {
+      if (grantCache.current.includes(key)) {
+        return false;
+      }
+      return true;
+    });
+
+    // 获取删除的数据
+    const removeGrant = grantCache.current.filter((key) => {
+      if (selectKeys.includes(key)) {
+        return false;
+      }
+      return true;
+    });
+
+    const addOperations = addGrant.map((a: string) => {
       const item = dataSource.find((b) => b.operationId === a);
       return {
         id: a,
@@ -73,16 +90,25 @@ export default (props: TableProps) => {
       };
     });
 
+    const removeOperations = removeGrant.map((a: string) => {
+      const item = dataSource.find((b) => b.operationId === a);
+      return {
+        id: a,
+        permissions: item.security,
+      };
+    });
+
+    grantCache.current = addGrant;
+
     setLoading(true);
-    const resp = await service.saveApiGrant(code!, { operations });
+    const resp = await service.addApiGrant(code!, { operations: addOperations });
+    const resp2 = await service.removeApiGrant(code!, { operations: removeOperations });
     setLoading(false);
-    if (resp.status === 200) {
+    if (resp.status === 200 || resp2.status === 200) {
       message.success('操作成功');
     }
   }, [selectKeys, location, dataSource]);
 
-  console.log(dataSource);
-
   return (
     <div className={'platforms-api-table'}>
       <Table<any>

+ 6 - 0
src/pages/system/Platforms/service.ts

@@ -48,6 +48,12 @@ class Service extends BaseService<platformsType> {
   saveApiGrant = (id: string, data: any) =>
     request(`/${SystemConst.API_BASE}/api-client/${id}/grant`, { method: 'POST', data });
 
+  addApiGrant = (id: string, data: any) =>
+    request(`/${SystemConst.API_BASE}/api-client/${id}/grant/_add`, { method: 'POST', data });
+
+  removeApiGrant = (id: string, data: any) =>
+    request(`/${SystemConst.API_BASE}/api-client/${id}/grant/_delete`, { method: 'POST', data });
+
   /**
    * 获取已授权的接口ID
    * @param id 第三方平台的ID