xieyonghong 3 anni fa
parent
commit
0f1b9a6bd5

+ 27 - 1
src/pages/device/Category/index.tsx

@@ -13,6 +13,8 @@ import SearchComponent from '@/components/SearchComponent';
 import { PermissionButton } from '@/components';
 import { PermissionButton } from '@/components';
 import { useDomFullHeight } from '@/hooks';
 import { useDomFullHeight } from '@/hooks';
 import { onlyMessage } from '@/utils/util';
 import { onlyMessage } from '@/utils/util';
+import { service as api } from '@/pages/device/Product';
+import { Spin } from 'antd';
 
 
 export const service = new Service('device/category');
 export const service = new Service('device/category');
 
 
@@ -55,6 +57,8 @@ const Category = observer(() => {
   const permissionCode = 'device/Category';
   const permissionCode = 'device/Category';
   const { permission } = PermissionButton.usePermission(permissionCode);
   const { permission } = PermissionButton.usePermission(permissionCode);
   const { minHeight } = useDomFullHeight(`.device-category`, 24);
   const { minHeight } = useDomFullHeight(`.device-category`, 24);
+  const [loading, setLoading] = useState<boolean>(true);
+  const [title, setTitle] = useState<string>('');
 
 
   const intl = useIntl();
   const intl = useIntl();
 
 
@@ -135,8 +139,30 @@ const Category = observer(() => {
           type="link"
           type="link"
           key="delete"
           key="delete"
           style={{ padding: 0 }}
           style={{ padding: 0 }}
+          onClick={async () => {
+            const res: any = await api.queryNoPagingPost({
+              terms: [{ terms: [{ column: 'classifiedId', value: record.id }] }],
+            });
+            if (res.status === 200) {
+              if (res.result.length === 0) {
+                setTitle('确定删除?');
+              } else {
+                setTitle('该数据已被产品引用,确定删除?');
+              }
+              setLoading(false);
+            } else {
+              setLoading(false);
+            }
+          }}
           popConfirm={{
           popConfirm={{
-            title: '确定删除?',
+            title: <>{loading ? <Spin /> : title}</>,
+            okButtonProps: {
+              loading: loading,
+            },
+            onCancel: () => {
+              setTitle('');
+              setLoading(true);
+            },
             onConfirm: async () => {
             onConfirm: async () => {
               const resp = (await service.remove(record.id)) as Response<any>;
               const resp = (await service.remove(record.id)) as Response<any>;
               if (resp.status === 200) {
               if (resp.status === 200) {

+ 0 - 1
src/pages/device/Instance/Detail/EdgeMap/mapTable/index.tsx

@@ -447,7 +447,6 @@ const MapTable = (props: Props) => {
         </PermissionButton>
         </PermissionButton>
         <PermissionButton
         <PermissionButton
           type="primary"
           type="primary"
-          isPermission={permission.update}
           onClick={async () => {
           onClick={async () => {
             if (props.formRef) {
             if (props.formRef) {
               add();
               add();

+ 12 - 12
src/pages/iot-card/CardManagement/SaveModal.tsx

@@ -85,6 +85,17 @@ const Save = (props: SaveType) => {
           rules={[
           rules={[
             { required: true, message: '请输入卡号' },
             { required: true, message: '请输入卡号' },
             { max: 64, message: '最多可输入64个字符' },
             { max: 64, message: '最多可输入64个字符' },
+          ]}
+        >
+          <Input placeholder={'请输入卡号'} disabled={props.type === 'edit'} />
+        </Form.Item>
+        <Form.Item
+          label={'ICCID'}
+          name={'iccId'}
+          required
+          rules={[
+            { required: true, message: '请输入ICCID' },
+            { max: 64, message: '最多可输入64个字符' },
             () => ({
             () => ({
               async validator(_, value) {
               async validator(_, value) {
                 if (value) {
                 if (value) {
@@ -95,23 +106,12 @@ const Save = (props: SaveType) => {
                     return Promise.reject(new Error(`${validateId}`));
                     return Promise.reject(new Error(`${validateId}`));
                   }
                   }
                 } else {
                 } else {
-                  return Promise.reject(new Error('请输入输入正确的卡号'));
+                  return Promise.reject(new Error('请输入输入正确的ICCID'));
                 }
                 }
               },
               },
             }),
             }),
           ]}
           ]}
         >
         >
-          <Input placeholder={'请输入卡号'} disabled={props.type === 'edit'} />
-        </Form.Item>
-        <Form.Item
-          label={'ICCID'}
-          name={'iccId'}
-          required
-          rules={[
-            { required: true, message: '请输入ICCID' },
-            { max: 64, message: '最多可输入64个字符' },
-          ]}
-        >
           <Input placeholder={'请输入ICCID'} disabled={props.type === 'edit'} />
           <Input placeholder={'请输入ICCID'} disabled={props.type === 'edit'} />
         </Form.Item>
         </Form.Item>
         <Form.Item
         <Form.Item

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

@@ -722,7 +722,7 @@ const Detail = observer(() => {
     }
     }
   };
   };
 
 
-  const { getOtherPermission } = usePermissions('notice');
+  const { getOtherPermission } = usePermissions('notice/Config');
 
 
   return (
   return (
     <PageContainer>
     <PageContainer>

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

@@ -1656,7 +1656,7 @@ const Detail = observer(() => {
       },
       },
     },
     },
   };
   };
-  const { permission } = usePermissions('notice');
+  const { permission } = usePermissions('notice/Template');
   return (
   return (
     <PageContainer>
     <PageContainer>
       <Card>
       <Card>

+ 4 - 13
src/pages/rule-engine/Scene/Save/action/DeviceOutput/actions/index.tsx

@@ -44,21 +44,12 @@ export default observer((props: Props) => {
   ];
   ];
 
 
   useEffect(() => {
   useEffect(() => {
-    // console.log('-----------',DeviceModel.deviceDetail)
     if (DeviceModel.productDetail) {
     if (DeviceModel.productDetail) {
-      if (DeviceModel.selector === 'fixed') {
-        const metadata = JSON.parse(
-          DeviceModel.deviceDetail?.metadata || DeviceModel.deviceDetail?.deriveMetadata || '{}',
-        );
-        setProperties(metadata.properties);
-        setFunctions(metadata.functions);
-      } else {
-        const metadata = JSON.parse(DeviceModel.productDetail?.metadata || '{}');
-        setProperties(metadata.properties);
-        setFunctions(metadata.functions);
-      }
+      const metadata = JSON.parse(DeviceModel.productDetail?.metadata || '{}');
+      setProperties(metadata.properties);
+      setFunctions(metadata.functions);
     }
     }
-  }, [DeviceModel.productDetail, DeviceModel.deviceDetail]);
+  }, [DeviceModel.productDetail]);
 
 
   useEffect(() => {
   useEffect(() => {
     if (functionId && functions.length !== 0) {
     if (functionId && functions.length !== 0) {

+ 2 - 12
src/pages/rule-engine/Scene/Save/action/DeviceOutput/device/Tag.tsx

@@ -7,7 +7,7 @@ import './index.less';
 interface TagModalProps {
 interface TagModalProps {
   tagData: any[];
   tagData: any[];
   value?: any[];
   value?: any[];
-  onChange?: (value: any[], OptionTag?: any[]) => void;
+  onChange?: (value: any[]) => void;
   id?: string;
   id?: string;
 }
 }
 
 
@@ -39,18 +39,8 @@ export default (props: TagModalProps) => {
           value: item.value,
           value: item.value,
         };
         };
       });
       });
-    const arr = tagList
-      .filter((item) => !!item.value)
-      .map((item: any) => {
-        return {
-          column: item.name,
-          type: item.type,
-          value: item.value,
-        };
-      });
-    console.log('----taglist---', tagList);
     if (props.onChange) {
     if (props.onChange) {
-      props.onChange([{ value: newValue, name: '标签' }], arr);
+      props.onChange([{ value: newValue, name: '标签' }]);
     }
     }
   };
   };
 
 

+ 3 - 5
src/pages/rule-engine/Scene/Save/action/DeviceOutput/device/index.tsx

@@ -408,16 +408,13 @@ export default observer((props: Props) => {
           <Form.Item name="selectorValues" rules={[{ required: true, message: '请选择标签' }]}>
           <Form.Item name="selectorValues" rules={[{ required: true, message: '请选择标签' }]}>
             <Tag
             <Tag
               tagData={tagList}
               tagData={tagList}
-              onChange={(value, arr) => {
-                console.log(value, arr);
+              onChange={(value) => {
+                console.log(value);
                 if (value) {
                 if (value) {
                   DeviceModel.deviceId = 'deviceId';
                   DeviceModel.deviceId = 'deviceId';
                   DeviceModel.source = 'fixed';
                   DeviceModel.source = 'fixed';
                   DeviceModel.selectorValues = value;
                   DeviceModel.selectorValues = value;
                 }
                 }
-                if (arr) {
-                  DeviceModel.tagList = arr;
-                }
               }}
               }}
             />
             />
           </Form.Item>
           </Form.Item>
@@ -445,6 +442,7 @@ export default observer((props: Props) => {
   };
   };
 
 
   useEffect(() => {
   useEffect(() => {
+    console.log(DeviceModel.selectorValues, '--------');
     if (form) {
     if (form) {
       form.setFieldsValue({ selector: DeviceModel.selector });
       form.setFieldsValue({ selector: DeviceModel.selector });
       if (DeviceModel.selectorValues) {
       if (DeviceModel.selectorValues) {

+ 3 - 8
src/pages/rule-engine/Scene/Save/action/DeviceOutput/index.tsx

@@ -71,7 +71,7 @@ export default observer((props: Props) => {
       (DeviceModel.current === 0 && DeviceModel.productId) ||
       (DeviceModel.current === 0 && DeviceModel.productId) ||
       (DeviceModel.current === 1 && (DeviceModel.deviceId || DeviceModel.selector === 'tag'))
       (DeviceModel.current === 1 && (DeviceModel.deviceId || DeviceModel.selector === 'tag'))
     ) {
     ) {
-      if (DeviceModel.selector === 'tag' && DeviceModel.current === 1) {
+      if (DeviceModel.selector === 'tag') {
         const value = await tagFormRef.current?.validateFields();
         const value = await tagFormRef.current?.validateFields();
         if (value) {
         if (value) {
           return (DeviceModel.current += 1);
           return (DeviceModel.current += 1);
@@ -154,12 +154,7 @@ export default observer((props: Props) => {
       }
       }
     }
     }
     if (_options.selector === 'tag') {
     if (_options.selector === 'tag') {
-      // _options.taglist = DeviceModel.selectorValues?.[0]?.value.map((it: any) => ({
-      //   name: it.column || it.name,
-      //   type: it.type ? (it.type === 'and' ? '并且' : '或者') : '',
-      //   value: it.value,
-      // }));
-      _options.taglist = DeviceModel.tagList.map((it) => ({
+      _options.taglist = DeviceModel.selectorValues?.[0]?.value.map((it: any) => ({
         name: it.column || it.name,
         name: it.column || it.name,
         type: it.type ? (it.type === 'and' ? '并且' : '或者') : '',
         type: it.type ? (it.type === 'and' ? '并且' : '或者') : '',
         value: it.value,
         value: it.value,
@@ -168,7 +163,7 @@ export default observer((props: Props) => {
     if (_options.selector === 'variable') {
     if (_options.selector === 'variable') {
       _options.name = DeviceModel.selectorValues?.[0]?.name;
       _options.name = DeviceModel.selectorValues?.[0]?.name;
     }
     }
-    console.log('----------', item, _options);
+    // console.log("----------",item,_options)
     props.save(item, _options);
     props.save(item, _options);
     init();
     init();
   };
   };

+ 0 - 2
src/pages/rule-engine/Scene/Save/action/DeviceOutput/model.ts

@@ -26,7 +26,6 @@ type ModelType = {
   propertiesValue: string | any;
   propertiesValue: string | any;
   columns: string[];
   columns: string[];
   actionName: string;
   actionName: string;
-  tagList: any[];
 };
 };
 
 
 const DeviceModel = model<ModelType>({
 const DeviceModel = model<ModelType>({
@@ -48,7 +47,6 @@ const DeviceModel = model<ModelType>({
   propertiesValue: '',
   propertiesValue: '',
   columns: [],
   columns: [],
   actionName: '',
   actionName: '',
-  tagList: [],
 });
 });
 
 
 export default DeviceModel;
 export default DeviceModel;

+ 3 - 2
src/pages/rule-engine/Scene/Save/action/ListItem/Item.tsx

@@ -249,10 +249,11 @@ export default (props: ItemProps) => {
             {data.options?.taglist?.map((item: any) => (
             {data.options?.taglist?.map((item: any) => (
               <span>
               <span>
                 {item.type}
                 {item.type}
-                {item.name}为{item.value}
+                {item.name}
+                {item.value}
               </span>
               </span>
             ))}
             ))}
-            {data?.options?.productName}
+            {data?.options?.productName}
             {data?.options?.properties}
             {data?.options?.properties}
           </div>
           </div>
         );
         );

+ 0 - 50
src/pages/rule-engine/Scene/Save/action/device/ObjInput.tsx

@@ -1,50 +0,0 @@
-import { EditOutlined } from '@ant-design/icons';
-import { Input } from 'antd';
-import { useState } from 'react';
-import ObjModel from '../DeviceOutput/actions/ObjModel';
-
-interface Props {
-  value: any;
-  onChange?: (data: any) => void;
-}
-
-export default (props: Props) => {
-  const [objVisiable, setObjVisable] = useState<boolean>(false);
-  const [value, setValue] = useState<any>(JSON.stringify(props.value) || undefined);
-  return (
-    <>
-      <Input
-        value={value}
-        style={{ width: '100%', textAlign: 'left' }}
-        readOnly
-        onClick={() => {
-          setObjVisable(true);
-        }}
-        addonAfter={
-          <EditOutlined
-            onClick={() => {
-              setObjVisable(true);
-            }}
-          />
-        }
-        placeholder={'请选择'}
-      />
-      {objVisiable && (
-        <ObjModel
-          value={value}
-          close={() => {
-            setObjVisable(false);
-          }}
-          ok={(param) => {
-            // console.log('------', param);
-            if (props.onChange) {
-              props.onChange(JSON.parse(param));
-            }
-            setValue(param);
-            setObjVisable(false);
-          }}
-        />
-      )}
-    </>
-  );
-};

+ 0 - 59
src/pages/rule-engine/Scene/Save/action/device/TypeTime.tsx

@@ -1,59 +0,0 @@
-import { TimePicker, DatePicker } from 'antd';
-import type { TimePickerProps } from 'antd/lib/time-picker';
-import moment from 'moment';
-import { useEffect, useState } from 'react';
-
-interface DatePickerFormat extends Omit<TimePickerProps, 'onChange'> {
-  onChange?: (dateString: string, date: moment.Moment | null) => void;
-}
-type Props = DatePickerFormat & {
-  type?: string;
-};
-
-export default (props: Props) => {
-  const [myValue, setMyValue] = useState<any>(props.value || undefined);
-
-  useEffect(() => {
-    setMyValue(props.value);
-    console.log('moment', props.value);
-  }, [props.value]);
-
-  return (
-    <div>
-      {props.type === 'time' ? (
-        <div>
-          <TimePicker
-            // {...props}
-            // value={myValue}
-            value={myValue ? moment(myValue, 'HH:mm:ss') : null}
-            onChange={(value, timeString) => {
-              setMyValue(value);
-              props.onChange?.(timeString, value);
-            }}
-            // @ts-ignore
-            getPopupContainer={(trigger) => {
-              return trigger && trigger?.parentNode ? trigger.parentNode : document.body;
-            }}
-          />
-        </div>
-      ) : (
-        <div>
-          {/* @ts-ignore */}
-          <DatePicker
-            showTime
-            // @ts-ignore
-            getPopupContainer={(trigger) => {
-              return trigger && trigger?.parentNode ? trigger.parentNode : document.body;
-            }}
-            // value={myValue}
-            value={myValue ? moment(myValue, 'yyyy-MM-dd HH:mm:ss') : ''}
-            onChange={(value, timeString) => {
-              setMyValue(value);
-              props.onChange?.(timeString, value);
-            }}
-          />
-        </div>
-      )}
-    </div>
-  );
-};

+ 9 - 34
src/pages/rule-engine/Scene/Save/action/device/functionCall.tsx

@@ -4,9 +4,7 @@ import { Input, InputNumber, Select } from 'antd';
 import React, { useEffect, useRef, useState } from 'react';
 import React, { useEffect, useRef, useState } from 'react';
 import type { ProFormInstance } from '@ant-design/pro-form';
 import type { ProFormInstance } from '@ant-design/pro-form';
 import ProForm from '@ant-design/pro-form';
 import ProForm from '@ant-design/pro-form';
-import ObjModel from '../DeviceOutput/actions/ObjModel';
-import ObjInput from './ObjInput';
-import TypeTime from './TypeTime';
+import { DatePickerFormat } from '@/pages/rule-engine/Scene/Save/components';
 
 
 type FunctionTableDataType = {
 type FunctionTableDataType = {
   id: string;
   id: string;
@@ -25,8 +23,6 @@ interface FunctionCallProps {
 export default (props: FunctionCallProps) => {
 export default (props: FunctionCallProps) => {
   const [editableKeys, setEditableRowKeys] = useState<React.Key[]>([]);
   const [editableKeys, setEditableRowKeys] = useState<React.Key[]>([]);
   const formRef = useRef<ProFormInstance<any>>();
   const formRef = useRef<ProFormInstance<any>>();
-  const [objVisiable, setObjVisable] = useState<boolean>(false);
-  const [value, setValue] = useState<any>();
 
 
   useEffect(() => {
   useEffect(() => {
     if (props.functionData && props.functionData.length) {
     if (props.functionData && props.functionData.length) {
@@ -63,7 +59,7 @@ export default (props: FunctionCallProps) => {
     }
     }
   }, [props.productId]);
   }, [props.productId]);
 
 
-  const getItemNode = (record: any) => {
+  const getItemNode = (record: any, config: any) => {
     const type = record.type;
     const type = record.type;
     const name = record.name;
     const name = record.name;
 
 
@@ -103,16 +99,13 @@ export default (props: FunctionCallProps) => {
         );
         );
       case 'date':
       case 'date':
         return (
         return (
-          // <DatePickerFormat
-          //   {...config}
-          //   value={record.value}
-          //   format={record.format || 'YYYY-MM-DD HH:mm:ss'}
-          //   style={{ width: '100%' }}
-          // />
-          <TypeTime type={record.type === 'yyyy-MM-dd' ? 'time' : 'date'} value={record.value} />
+          <DatePickerFormat
+            {...config}
+            value={record.value}
+            format={record.format || 'YYYY-MM-DD HH:mm:ss'}
+            style={{ width: '100%' }}
+          />
         );
         );
-      case 'object':
-        return <ObjInput value={record.value} />;
       default:
       default:
         return <Input value={record.value} placeholder={'请输入' + name} />;
         return <Input value={record.value} placeholder={'请输入' + name} />;
     }
     }
@@ -137,15 +130,11 @@ export default (props: FunctionCallProps) => {
       align: 'center',
       align: 'center',
       width: 260,
       width: 260,
       renderFormItem: (_, row) => {
       renderFormItem: (_, row) => {
-        return getItemNode(row.record);
+        return getItemNode(row.record, row);
       },
       },
     },
     },
   ];
   ];
 
 
-  useEffect(() => {
-    console.log(value);
-  }, [value]);
-
   return (
   return (
     <ProForm<{ table: FunctionTableDataType[] }>
     <ProForm<{ table: FunctionTableDataType[] }>
       formRef={formRef}
       formRef={formRef}
@@ -153,7 +142,6 @@ export default (props: FunctionCallProps) => {
       submitter={false}
       submitter={false}
       onValuesChange={() => {
       onValuesChange={() => {
         const values = formRef.current?.getFieldsValue();
         const values = formRef.current?.getFieldsValue();
-        console.log('---values---', values);
         if (props.onChange) {
         if (props.onChange) {
           props.onChange(
           props.onChange(
             values.table.map((item: any) => ({
             values.table.map((item: any) => ({
@@ -176,19 +164,6 @@ export default (props: FunctionCallProps) => {
           onChange: setEditableRowKeys,
           onChange: setEditableRowKeys,
         }}
         }}
       />
       />
-      {objVisiable && (
-        <ObjModel
-          value={value}
-          close={() => {
-            setObjVisable(false);
-          }}
-          ok={(param) => {
-            console.log('------', param);
-            setValue(param);
-            setObjVisable(false);
-          }}
-        />
-      )}
     </ProForm>
     </ProForm>
   );
   );
 };
 };

+ 1 - 16
src/pages/rule-engine/Scene/Save/device/addModel.tsx

@@ -4,7 +4,7 @@ import { observable } from '@formily/reactive';
 import { useEffect, useRef, useState } from 'react';
 import { useEffect, useRef, useState } from 'react';
 import { onlyMessage } from '@/utils/util';
 import { onlyMessage } from '@/utils/util';
 import type { TriggerDevice, TriggerDeviceOptions } from '@/pages/rule-engine/Scene/typings';
 import type { TriggerDevice, TriggerDeviceOptions } from '@/pages/rule-engine/Scene/typings';
-import Product, { handleMetadata } from './product';
+import Product from './product';
 import Device from './device';
 import Device from './device';
 import Type from './type';
 import Type from './type';
 import { timeUnitEnum } from '../components/TimingTrigger';
 import { timeUnitEnum } from '../components/TimingTrigger';
@@ -12,7 +12,6 @@ import { Store } from 'jetlinks-store';
 import { FormModel } from '@/pages/rule-engine/Scene/Save';
 import { FormModel } from '@/pages/rule-engine/Scene/Save';
 import { isEqual } from 'lodash';
 import { isEqual } from 'lodash';
 import { continuousValue } from '@/pages/rule-engine/Scene/Save/timer/TimerTrigger';
 import { continuousValue } from '@/pages/rule-engine/Scene/Save/timer/TimerTrigger';
-import { service as api } from '@/pages/device/Instance/index';
 
 
 interface AddProps {
 interface AddProps {
   options?: any;
   options?: any;
@@ -228,7 +227,6 @@ export default observer((props: AddProps) => {
       }
       }
     } else if (TriggerDeviceModel.stepNumber === 1) {
     } else if (TriggerDeviceModel.stepNumber === 1) {
       if (TriggerDeviceModel.selector === 'fixed' && !TriggerDeviceModel.selectorValues?.length) {
       if (TriggerDeviceModel.selector === 'fixed' && !TriggerDeviceModel.selectorValues?.length) {
-        // handleMetadata(TriggerDeviceModel.productDetail?.metadata);
         onlyMessage('请选择设备', 'error');
         onlyMessage('请选择设备', 'error');
         return;
         return;
       } else if (
       } else if (
@@ -238,18 +236,6 @@ export default observer((props: AddProps) => {
         onlyMessage('请选择部门', 'error');
         onlyMessage('请选择部门', 'error');
         return;
         return;
       }
       }
-      if (
-        TriggerDeviceModel.selector === 'fixed' &&
-        TriggerDeviceModel.selectorValues?.length === 1
-      ) {
-        console.log('---TriggerDeviceModel.selectorValues----', TriggerDeviceModel.selectorValues);
-        const res = await api.detail(TriggerDeviceModel.selectorValues?.[0]?.value);
-        if (res.status === 200) {
-          // console.log(res.result.metadata)
-          handleMetadata(res.result.metadata);
-        }
-      }
-
       TriggerDeviceModel.stepNumber = 2;
       TriggerDeviceModel.stepNumber = 2;
     } else if (TriggerDeviceModel.stepNumber === 2) {
     } else if (TriggerDeviceModel.stepNumber === 2) {
       // TODO 验证类型数据
       // TODO 验证类型数据
@@ -270,7 +256,6 @@ export default observer((props: AddProps) => {
         Store.set('TriggerDeviceModel', {
         Store.set('TriggerDeviceModel', {
           update: !isUpdate,
           update: !isUpdate,
         });
         });
-        console.log('-----------', operationData);
         props.onSave?.(saveData, _options);
         props.onSave?.(saveData, _options);
       }
       }
     }
     }

+ 18 - 1
src/pages/rule-engine/Scene/index.tsx

@@ -1,5 +1,5 @@
 import { PageContainer } from '@ant-design/pro-layout';
 import { PageContainer } from '@ant-design/pro-layout';
-import React, { useRef, useState } from 'react';
+import React, { useEffect, useRef, useState } from 'react';
 import type { ActionType, ProColumns } from '@jetlinks/pro-table';
 import type { ActionType, ProColumns } from '@jetlinks/pro-table';
 import type { SceneItem } from '@/pages/rule-engine/Scene/typings';
 import type { SceneItem } from '@/pages/rule-engine/Scene/typings';
 import {
 import {
@@ -31,6 +31,8 @@ const Scene = () => {
   const [visible, setVisible] = useState<boolean>(false);
   const [visible, setVisible] = useState<boolean>(false);
   const [current, setCurrent] = useState<Partial<SceneItem>>({});
   const [current, setCurrent] = useState<Partial<SceneItem>>({});
   const history = useHistory();
   const history = useHistory();
+  const [loading, setLoading] = useState<boolean>(true);
+  const [title, setTitle] = useState<string>('');
 
 
   const deleteById = async (id: string) => {
   const deleteById = async (id: string) => {
     // const alarmResp = await service.sceneByAlarm(id);
     // const alarmResp = await service.sceneByAlarm(id);
@@ -44,6 +46,13 @@ const Scene = () => {
     // }
     // }
   };
   };
 
 
+  useEffect(() => {
+    console.log('----------', title, loading);
+    if (title) {
+      setLoading(false);
+    }
+  }, [title]);
+
   const Tools = (record: SceneItem): React.ReactNode[] => {
   const Tools = (record: SceneItem): React.ReactNode[] => {
     return [
     return [
       <PermissionButton
       <PermissionButton
@@ -148,6 +157,14 @@ const Scene = () => {
         style={{ padding: 0 }}
         style={{ padding: 0 }}
         isPermission={permission.delete}
         isPermission={permission.delete}
         disabled={record.state.value === 'started'}
         disabled={record.state.value === 'started'}
+        onClick={async () => {
+          const res = await service.sceneByAlarm(record.id);
+          if (res.status === 200 && res.result.data.length !== 0) {
+            setTitle('该场景已绑定告警,确定删除?');
+          } else {
+            setTitle('确定删除?');
+          }
+        }}
         popConfirm={{
         popConfirm={{
           // title: loading ? <Spin /> : title,
           // title: loading ? <Spin /> : title,
           // okButtonProps: {
           // okButtonProps: {

+ 2 - 2
src/pages/system/Department/Assets/deivce/index.tsx

@@ -239,8 +239,8 @@ export default observer((props: { parentId: string }) => {
     Models.unBindKeys = [];
     Models.unBindKeys = [];
     AssetsModel.params = {};
     AssetsModel.params = {};
   };
   };
-  const getSelectedRowsKey = (selectedRows: any) => {
-    return selectedRows.map((item: any) => item?.id).filter((item2: any) => !!item2 !== false);
+  const getSelectedRowsKey = (selectedRows) => {
+    return selectedRows.map((item) => item?.id).filter((item2) => !!item2 !== false);
   };
   };
 
 
   const getData = (params: any, parentId: string) => {
   const getData = (params: any, parentId: string) => {

+ 16 - 7
src/pages/system/Role/Detail/Permission/Allocate/index.tsx

@@ -15,6 +15,7 @@ const Allocate = (props: Props) => {
     name: '菜单权限',
     name: '菜单权限',
     children: [],
     children: [],
   });
   });
+  const [dataOldSource, setDataOldSource] = useState<any>({});
   const [assetsList, setAssetsList] = useState<any[]>([]);
   const [assetsList, setAssetsList] = useState<any[]>([]);
 
 
   const getDataList: any = (data1: any[]) => {
   const getDataList: any = (data1: any[]) => {
@@ -128,18 +129,26 @@ const Allocate = (props: Props) => {
           level={1}
           level={1}
           assetsList={assetsList}
           assetsList={assetsList}
           checkChange={(data: any) => {
           checkChange={(data: any) => {
-            const dt = {
-              ...dataSource,
-              children: getAccessData(dataSource.children || [], data),
-            };
-            setDataSource(dt);
-            if (props.onChange) {
-              props.onChange(dt);
+            if (data) {
+              const dt = {
+                ...dataSource,
+                children: getAccessData(dataSource.children || [], data),
+              };
+              setDataSource(dt);
+              if (props.onChange) {
+                props.onChange(dt);
+              }
+            } else {
+              setDataSource(dataOldSource);
+              if (props.onChange) {
+                props.onChange(dataOldSource);
+              }
             }
             }
           }}
           }}
           change={(data: any) => {
           change={(data: any) => {
             setDataSource(data);
             setDataSource(data);
             if (props.onChange) {
             if (props.onChange) {
+              setDataOldSource(data);
               props.onChange(data);
               props.onChange(data);
             }
             }
           }}
           }}