xieyonghong 3 лет назад
Родитель
Сommit
5828bddb15

+ 20 - 18
src/components/ProTableCard/CardItems/device.tsx

@@ -33,6 +33,7 @@ export const PermissionsMap = {
   read: '查看',
   save: '编辑',
   delete: '删除',
+  share: '共享',
 };
 
 export const handlePermissionsMap = (permissions?: string[]) => {
@@ -50,7 +51,7 @@ export const ExtraDeviceCard = (props: DeviceCardProps) => {
   const assetsOptions =
     props.assetsOptions && props.permissionInfoList
       ? props.assetsOptions.filter((item: any) =>
-          props.permissionInfoList.some((pItem) => pItem.id === item.value),
+          props.permissionInfoList!.some((pItem) => pItem.id === item.value),
         )
       : [];
 
@@ -110,23 +111,24 @@ export const ExtraDeviceCard = (props: DeviceCardProps) => {
               {/*</div>*/}
             </div>
             {props.cardType === 'bind' ? (
-              <div className={'flex-auto'}>
-                <Checkbox.Group
-                  options={assetsOptions?.map((item) => {
-                    return {
-                      ...item,
-                      disabled: disabled,
-                    };
-                  })}
-                  value={assetKeys}
-                  onChange={(e) => {
-                    console.log('assetKeys', disabledRef.current, assetKeys, e);
-                    if (!disabledRef.current) {
-                      setAssetKeys(e as string[]);
-                      props.onAssetsChange?.(e);
-                    }
-                  }}
-                />
+              <div className={'flex-auto stopPropagation'}>
+                <div onClick={(e) => e.stopPropagation()}>
+                  <Checkbox.Group
+                    options={assetsOptions?.map((item) => {
+                      return {
+                        ...item,
+                        disabled: disabled,
+                      };
+                    })}
+                    value={assetKeys}
+                    onChange={(e) => {
+                      if (!disabledRef.current) {
+                        setAssetKeys(e as string[]);
+                        props.onAssetsChange?.(e);
+                      }
+                    }}
+                  />
+                </div>
               </div>
             ) : (
               <div className={'flex-auto'}>

+ 22 - 22
src/components/ProTableCard/CardItems/product.tsx

@@ -34,14 +34,12 @@ export const PermissionsMap = {
   read: '查看',
   save: '编辑',
   delete: '删除',
+  share: '共享',
 };
 
 export const handlePermissionsMap = (permissions?: string[]) => {
   return permissions && permissions.length
-    ? permissions
-        .filter((item) => item in PermissionsMap)
-        .map((item) => PermissionsMap[item])
-        .toString()
+    ? permissions.map((item) => PermissionsMap[item]).toString()
     : '';
 };
 
@@ -113,7 +111,7 @@ export const ExtraProductCard = (props: ProductCardProps) => {
   const assetsOptions =
     props.assetsOptions && props.permissionInfoList
       ? props.assetsOptions.filter((item: any) =>
-          props.permissionInfoList.some((pItem) => pItem.id === item.value),
+          props.permissionInfoList!.some((pItem) => pItem.id === item.value),
         )
       : [];
 
@@ -178,23 +176,25 @@ export const ExtraProductCard = (props: ProductCardProps) => {
               <Ellipsis title={props.id || ''} />
             </div>
             {props.cardType === 'bind' ? (
-              <div className={'flex-auto'}>
-                <Checkbox.Group
-                  options={assetsOptions?.map((item) => {
-                    return {
-                      ...item,
-                      disabled: item.disabled !== true ? disabled : item.disabled,
-                    };
-                  })}
-                  value={assetKeys}
-                  onChange={(e) => {
-                    console.log('assetKeys', disabledRef.current, assetKeys, e);
-                    if (!disabledRef.current) {
-                      setAssetKeys(e as string[]);
-                      props.onAssetsChange?.(e);
-                    }
-                  }}
-                />
+              <div className={'flex-auto stopPropagation'}>
+                <div onClick={(e) => e.stopPropagation()}>
+                  <Checkbox.Group
+                    options={assetsOptions?.map((item) => {
+                      return {
+                        ...item,
+                        disabled: item.disabled !== true ? disabled : item.disabled,
+                      };
+                    })}
+                    value={assetKeys}
+                    onChange={(e) => {
+                      console.log('assetKeys', disabledRef.current, assetKeys, e);
+                      if (!disabledRef.current) {
+                        setAssetKeys(e as string[]);
+                        props.onAssetsChange?.(e);
+                      }
+                    }}
+                  />
+                </div>
               </div>
             ) : (
               <div className={'flex-auto'}>

+ 1 - 4
src/components/ProTableCard/TableCard.tsx

@@ -76,10 +76,7 @@ export default (props: TableCardProps) => {
   return (
     <div
       className={classNames('iot-card', { hover: maskShow }, props.className)}
-      onClick={(e) => {
-        e.stopPropagation();
-        props.onClick?.(e);
-      }}
+      onClick={props.onClick}
     >
       <div className={'card-warp'}>
         <div

+ 3 - 7
src/components/ProTableCard/index.tsx

@@ -37,7 +37,6 @@ interface ProTableCardProps<T> {
   noPadding?: boolean;
   cardScrollY?: number;
   modelChange?: (type: ModelType) => void;
-  cardProps?: any;
 }
 
 const ProTableCard = <
@@ -72,12 +71,10 @@ const ProTableCard = <
    * @param dataSource
    */
   const handleCard = useCallback(
-    (dataSource: readonly T[] | undefined, rowSelection?: any, _cardProps?: any): JSX.Element => {
+    (dataSource: readonly T[] | undefined, rowSelection?: any): JSX.Element => {
       setDataLength(dataSource ? dataSource.length : 0);
 
       const Item = (dom: React.ReactNode) => {
-        // @ts-ignore
-        const card_props = isFunction(_cardProps) ? _cardProps(dom.props) : _cardProps;
         if (!rowSelection || (rowSelection && !rowSelection.selectedRowKeys)) {
           return dom;
         }
@@ -88,14 +85,13 @@ const ProTableCard = <
 
         // @ts-ignore
         return React.cloneElement(dom, {
-          ...card_props,
           // @ts-ignore
           className: classNames(dom.props.className, {
             'item-active': selectedRowKeys && selectedRowKeys.includes(id),
           }),
           key: id,
           onClick: (e: any) => {
-            if (e.target.nodeName !== 'DIV') return;
+            console.log(e);
             e.stopPropagation();
             if (onChange || onSelect) {
               const isSelect = selectedRowKeys.includes(id);
@@ -304,7 +300,7 @@ const ProTableCard = <
         tableViewRender={
           model === ModelEnum.CARD
             ? (tableProps) => {
-                return handleCard(tableProps.dataSource, extraProps?.rowSelection, props.cardProps);
+                return handleCard(tableProps.dataSource, extraProps?.rowSelection);
               }
             : undefined
         }

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

@@ -242,7 +242,6 @@ export default observer((props: AddProps) => {
         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)

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

@@ -48,7 +48,13 @@ export default observer(() => {
     <div>
       <Form form={form} layout={'vertical'}>
         <Form.Item name="selector" label="选择方式" required>
-          <TopCard typeList={TypeList} />
+          <TopCard
+            typeList={TypeList}
+            onChange={() => {
+              TriggerDeviceModel.deviceKeys = [];
+              TriggerDeviceModel.selectorValues = [];
+            }}
+          />
         </Form.Item>
       </Form>
       {selector === 'fixed' ? <DeviceList /> : selector === 'org' ? <OrgList /> : null}

+ 0 - 1
src/pages/rule-engine/Scene/Save/terms/paramsItem.tsx

@@ -358,7 +358,6 @@ const ParamsItem = observer((props: ParamsItemProps) => {
           <ParamsDropdown
             options={valueOptions}
             metricsOptions={metricsOptions.filter((mItem) => {
-              console.log(mItem);
               if (ValueRef.current.termType && DoubleFilter.includes(ValueRef.current.termType)) {
                 return mItem.range;
               } else {

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

@@ -40,7 +40,7 @@ export default observer((props: { parentId: string }) => {
   const [searchParam, setSearchParam] = useState({});
 
   const [updateVisible, setUpdateVisible] = useState(false);
-  const [updateId, setUpdateId] = useState('');
+  const [updateId, setUpdateId] = useState<string | string[]>('');
   const [permissions, setPermissions] = useState<string[]>([]);
   const [assetsType, setAssetsType] = useState([]);
 
@@ -148,7 +148,7 @@ export default observer((props: { parentId: string }) => {
       dataIndex: 'grantedPermissions',
       hideInSearch: true,
       render: (_, row) => {
-        return handlePermissionsMap(row.grantedPermissions);
+        return handlePermissionsMap(row.grantedPermissions, assetsType);
       },
       width: 80,
     },
@@ -315,8 +315,12 @@ export default observer((props: { parentId: string }) => {
           key="update"
           isPermission={permission.assert}
           onClick={() => {
-            setUpdateId('');
-            setUpdateVisible(true);
+            if (Models.unBindKeys.length) {
+              setUpdateId([...Models.unBindKeys]);
+              setUpdateVisible(true);
+            } else {
+              onlyMessage('请勾选需要解绑的数据', 'warning');
+            }
           }}
         >
           批量编辑
@@ -340,6 +344,7 @@ export default observer((props: { parentId: string }) => {
         <UpdateModal
           permissions={permissions}
           visible={updateVisible}
+          assetsType={assetsType}
           id={updateId}
           type="device"
           targetId={props.parentId}
@@ -453,6 +458,7 @@ export default observer((props: { parentId: string }) => {
         cardRender={(record) => (
           <ExtraDeviceCard
             {...record}
+            assetsOptions={assetsType}
             actions={[
               <PermissionButton
                 key="update"

+ 0 - 1
src/pages/system/Department/Assets/product/bind.tsx

@@ -312,7 +312,6 @@ const Bind = observer((props: Props) => {
                     const assetsItem = assetsResp.result.find(
                       (aItem: any) => (aItem.assetId = item.id),
                     );
-                    console.log(assetsItem);
                     return {
                       ...item,
                       ...assetsItem,

+ 12 - 15
src/pages/system/Department/Assets/product/index.tsx

@@ -34,8 +34,8 @@ export default observer((props: { parentId: string }) => {
   const [searchParam, setSearchParam] = useState({});
   const [deviceVisible, setDeviceVisible] = useState(false);
   const [updateVisible, setUpdateVisible] = useState(false);
-  const [updateId, setUpdateId] = useState('');
-  const [permissions, setPermissions] = useState<string[]>([]);
+  const [updateId, setUpdateId] = useState<string | string[]>('');
+  const [permissions, setPermissions] = useState<string[]>(['read']);
   const [assetsType, setAssetsType] = useState([]);
 
   // 资产类型的权限定义
@@ -119,7 +119,7 @@ export default observer((props: { parentId: string }) => {
       dataIndex: 'grantedPermissions',
       hideInSearch: true,
       render: (_, row) => {
-        return handlePermissionsMap(row.grantedPermissions);
+        return handlePermissionsMap(row.grantedPermissions, assetsType);
       },
       width: 80,
     },
@@ -303,18 +303,13 @@ export default observer((props: { parentId: string }) => {
           icon={<EditOutlined />}
           key="update"
           isPermission={permission.assert}
-          popConfirm={{
-            title: intl.formatMessage({
-              id: 'pages.system.role.option.unBindUser',
-              defaultMessage: '是否批量解除绑定',
-            }),
-            onConfirm: () => {
-              if (Models.unBindKeys.length) {
-                setUpdateVisible(true);
-              } else {
-                onlyMessage('请勾选需要解绑的数据', 'warning');
-              }
-            },
+          onClick={() => {
+            if (Models.unBindKeys.length) {
+              setUpdateId([...Models.unBindKeys]);
+              setUpdateVisible(true);
+            } else {
+              onlyMessage('请勾选需要解绑的数据', 'warning');
+            }
           }}
         >
           批量编辑
@@ -358,6 +353,7 @@ export default observer((props: { parentId: string }) => {
         <UpdateModal
           permissions={permissions}
           visible={updateVisible}
+          assetsType={assetsType}
           id={updateId}
           type="product"
           targetId={props.parentId}
@@ -471,6 +467,7 @@ export default observer((props: { parentId: string }) => {
         cardRender={(record) => (
           <ExtraProductCard
             {...record}
+            assetsOptions={assetsType}
             actions={[
               <PermissionButton
                 key="update"

+ 38 - 18
src/pages/system/Department/Assets/updateModal.tsx

@@ -1,32 +1,57 @@
 import { Modal, Form, Checkbox } from 'antd';
-import { useCallback, useEffect } from 'react';
+import { useCallback, useEffect, useState } from 'react';
 import Server from './service';
+import { service } from '@/pages/system/Department/Assets/product';
+import { onlyMessage } from '@/utils/util';
 
 interface UpdateModalProps {
-  id: string;
+  id: string | string[];
   type: string;
   targetId: string;
   visible: boolean;
   permissions: string[];
   onCancel: () => void;
   onReload: () => void;
+  assetsType: string[];
 }
 const server = new Server();
 export default (props: UpdateModalProps) => {
   const [form] = Form.useForm();
+  const [loading, setLoading] = useState(false);
 
   const saveData = useCallback(async () => {
     const data = form.getFieldsValue();
     if (data) {
-      const res = await server.updatePermission(
-        props.type,
-        props.id,
-        props.targetId,
-        data.permissions,
-      );
-      if (res.status === 200 && props.onReload) {
-        props.onCancel();
-        props.onReload();
+      setLoading(true);
+      if (Array.isArray(props.id)) {
+        const _data = (props.id as string[]).map((item) => ({
+          targetType: 'org',
+          targetId: props.targetId,
+          assetType: props.type,
+          assetIdList: [item],
+          permission: data.permissions,
+        }));
+        service.bind('product', _data).subscribe({
+          next: () => onlyMessage('操作成功'),
+          error: () => onlyMessage('操作失败', 'error'),
+          complete: () => {
+            setLoading(false);
+            props.onCancel();
+            props.onReload();
+          },
+        });
+      } else {
+        const res = await server.updatePermission(
+          props.type,
+          props.id as string,
+          props.targetId,
+          data.permissions,
+        );
+        setLoading(false);
+        if (res.status === 200 && props.onReload) {
+          props.onCancel();
+          props.onReload();
+        }
       }
     }
   }, [props.id]);
@@ -46,16 +71,11 @@ export default (props: UpdateModalProps) => {
       width={500}
       onCancel={props.onCancel}
       onOk={saveData}
+      confirmLoading={loading}
     >
       <Form form={form}>
         <Form.Item name="permissions" label="资产权限" required>
-          <Checkbox.Group
-            options={[
-              { label: '查看', value: 'read', disabled: true },
-              { label: '编辑', value: 'save' },
-              { label: '删除', value: 'delete' },
-            ]}
-          />
+          <Checkbox.Group options={props.assetsType} />
         </Form.Item>
       </Form>
     </Modal>