Просмотр исходного кода

fix: Merge branch next-hub into next

jackhoo_98 3 лет назад
Родитель
Сommit
950646847d

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

@@ -633,6 +633,7 @@ const Instance = () => {
         // initParam={jumpParams}
         onSearch={(data) => {
           actionRef.current?.reset?.();
+          unSelect();
           setSearchParams(data);
           const terms1 = data.terms[0]?.terms?.map((e) => {
             if (e.column === 'classifiedId') {

+ 19 - 2
src/pages/device/components/Metadata/Import/index.tsx

@@ -282,17 +282,30 @@ const Import = (props: Props) => {
 
   const handleImport = async () => {
     const data = (await form.submit()) as any;
+    const checkProperties = (metadataJson: string) => {
+      const metadata = JSON.parse(metadataJson.metadata);
+      return (
+        !!metadata &&
+        !!metadata?.properties &&
+        !!metadata?.events &&
+        !!metadata?.functions &&
+        !!metadata?.tags
+      );
+    };
+
     if (data.metadata === 'alink') {
       service.convertMetadata('from', 'alink', data.import).subscribe({
         next: async (meta) => {
-          onlyMessage('导入成功');
           const metadata = JSON.stringify(operateLimits(meta));
+          // eslint-disable-next-line @typescript-eslint/no-throw-literal
+          if (!checkProperties(metadata)) throw 'error';
           if (props?.type === 'device') {
             await deviceService.saveMetadata(param.id, metadata);
           } else {
             await service.modify(param.id, { metadata: metadata });
           }
           MetadataAction.insert(JSON.parse(metadata || '{}'));
+          onlyMessage('导入成功');
         },
         error: () => {
           onlyMessage('发生错误!', 'error');
@@ -318,10 +331,14 @@ const Import = (props: Props) => {
         if (resp.status === 200) {
           if (props?.type === 'device') {
             const metadata: DeviceMetadata = JSON.parse(paramsDevice || '{}');
+            // eslint-disable-next-line @typescript-eslint/no-throw-literal
+            if (!checkProperties(metadata)) throw 'error';
             MetadataAction.insert(metadata);
             onlyMessage('导入成功');
           } else {
             const metadata: DeviceMetadata = JSON.parse(params?.metadata || '{}');
+            // eslint-disable-next-line @typescript-eslint/no-throw-literal
+            if (!checkProperties(metadata)) throw 'error';
             MetadataAction.insert(metadata);
             onlyMessage('导入成功');
           }
@@ -330,7 +347,7 @@ const Import = (props: Props) => {
         Store.set(SystemConst.REFRESH_METADATA_TABLE, true);
         props.close();
       } catch (e) {
-        onlyMessage('请上传正确的json格式文件', 'error');
+        onlyMessage(e === 'error' ? '物模型数据不正确' : '上传json格式的物模型文件', 'error');
       }
     }
   };

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

@@ -115,6 +115,15 @@ const Bind = observer((props: Props) => {
     }
   };
 
+  const unSelect = () => {
+    Models.bindKeys = [];
+    AssetsModel.params = {};
+  };
+
+  const getSelectedRowsKey = (selectedRows) => {
+    return selectedRows.map((item) => item?.id).filter((item2) => !!item2 !== false);
+  };
+
   useEffect(() => {
     if (props.visible) {
       actionRef.current?.reload();
@@ -192,6 +201,7 @@ const Bind = observer((props: Props) => {
         )}
         onSearch={async (data) => {
           actionRef.current?.reset?.();
+          unSelect();
           setSearchParam(data);
         }}
         // onReset={() => {
@@ -217,10 +227,43 @@ const Bind = observer((props: Props) => {
           cardRender={(record) => (
             <ExtraDeviceCard showBindBtn={false} showTool={false} {...record} cardType={'bind'} />
           )}
+          tableAlertRender={({ selectedRowKeys }) => <div>已选择 {selectedRowKeys.length} 项</div>}
+          tableAlertOptionRender={() => {
+            return (
+              <a
+                onClick={() => {
+                  unSelect();
+                }}
+              >
+                取消选择
+              </a>
+            );
+          }}
           rowSelection={{
             selectedRowKeys: Models.bindKeys,
-            onChange: (selectedRowKeys, selectedRows) => {
-              Models.bindKeys = selectedRows.map((item) => item.id);
+            // onChange: (selectedRowKeys, selectedRows) => {
+            //   Models.bindKeys = selectedRows.map((item) => item.id);
+            // },
+            onSelect: (record, selected, selectedRows) => {
+              if (selected) {
+                Models.bindKeys = [
+                  ...new Set([...Models.bindKeys, ...getSelectedRowsKey(selectedRows)]),
+                ];
+              } else {
+                Models.bindKeys = Models.bindKeys.filter((item) => item !== record.id);
+              }
+            },
+            onSelectAll: (selected, selectedRows, changeRows) => {
+              if (selected) {
+                Models.bindKeys = [
+                  ...new Set([...Models.bindKeys, ...getSelectedRowsKey(selectedRows)]),
+                ];
+              } else {
+                const unChangeRowsKeys = getSelectedRowsKey(changeRows);
+                Models.bindKeys = Models.bindKeys
+                  .concat(unChangeRowsKeys)
+                  .filter((item) => !unChangeRowsKeys.includes(item));
+              }
             },
           }}
           request={(params) =>

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

@@ -16,6 +16,7 @@ import { onlyMessage } from '@/utils/util';
 import { ASSETS_TABS_ENUM, AssetsModel } from '@/pages/system/Department/Assets';
 import UpdateModal from '@/pages/system/Department/Assets/updateModal';
 import encodeQuery from '@/utils/encodeQuery';
+import '../index.less';
 
 export const service = new Service<DeviceItem>('assets');
 
@@ -29,7 +30,6 @@ export const DeviceBadge = (props: DeviceBadgeProps) => {
     offline: 'error',
     online: 'processing',
   };
-  console.log(STATUS[props.type], props);
   return <Badge status={STATUS[props.type]} text={props.text} />;
 };
 
@@ -234,6 +234,15 @@ export default observer((props: { parentId: string }) => {
     }
   };
 
+  const unSelect = () => {
+    Models.bindKeys = [];
+    Models.unBindKeys = [];
+    AssetsModel.params = {};
+  };
+  const getSelectedRowsKey = (selectedRows) => {
+    return selectedRows.map((item) => item?.id).filter((item2) => !!item2 !== false);
+  };
+
   const getData = (params: any, parentId: string) => {
     return new Promise((resolve) => {
       service.queryDeviceList2(params, parentId).subscribe((data) => {
@@ -267,7 +276,7 @@ export default observer((props: { parentId: string }) => {
   }, [props.parentId]);
 
   return (
-    <>
+    <div className="content">
       {Models.bind && (
         <Bind
           visible={Models.bind}
@@ -310,6 +319,7 @@ export default observer((props: { parentId: string }) => {
         ]}
         onSearch={async (data) => {
           actionRef.current?.reset?.();
+          unSelect();
           setSearchParam(data);
         }}
         // onReset={() => {
@@ -350,10 +360,43 @@ export default observer((props: { parentId: string }) => {
             status: resp.status,
           };
         }}
+        tableAlertRender={({ selectedRowKeys }) => <div>已选择 {selectedRowKeys.length} 项</div>}
+        tableAlertOptionRender={() => {
+          return (
+            <a
+              onClick={() => {
+                unSelect();
+              }}
+            >
+              取消选择
+            </a>
+          );
+        }}
         rowSelection={{
           selectedRowKeys: Models.unBindKeys,
-          onChange: (selectedRowKeys, selectedRows) => {
-            Models.unBindKeys = selectedRows.map((item) => item.id);
+          // onChange: (selectedRowKeys, selectedRows) => {
+          //   Models.unBindKeys = selectedRows.map((item) => item.id);
+          // },
+          onSelect: (record, selected, selectedRows) => {
+            if (selected) {
+              Models.unBindKeys = [
+                ...new Set([...Models.unBindKeys, ...getSelectedRowsKey(selectedRows)]),
+              ];
+            } else {
+              Models.unBindKeys = Models.unBindKeys.filter((item) => item !== record.id);
+            }
+          },
+          onSelectAll: (selected, selectedRows, changeRows) => {
+            if (selected) {
+              Models.unBindKeys = [
+                ...new Set([...Models.unBindKeys, ...getSelectedRowsKey(selectedRows)]),
+              ];
+            } else {
+              const unChangeRowsKeys = getSelectedRowsKey(changeRows);
+              Models.unBindKeys = Models.unBindKeys
+                .concat(unChangeRowsKeys)
+                .filter((item) => !unChangeRowsKeys.includes(item));
+            }
           },
         }}
         cardRender={(record) => (
@@ -397,7 +440,7 @@ export default observer((props: { parentId: string }) => {
             ]}
           />
         )}
-        toolBarRender={() => [
+        headerTitle={[
           <PermissionButton
             onClick={() => {
               Models.bind = true;
@@ -405,6 +448,7 @@ export default observer((props: { parentId: string }) => {
             icon={<PlusOutlined />}
             type="primary"
             key="bind"
+            style={{ marginRight: 12 }}
             disabled={!props.parentId}
             isPermission={permission.assert}
           >
@@ -438,6 +482,6 @@ export default observer((props: { parentId: string }) => {
           </PermissionButton>,
         ]}
       />
-    </>
+    </div>
   );
 });

+ 5 - 0
src/pages/system/Department/Assets/index.less

@@ -0,0 +1,5 @@
+.content {
+  .ant-card-body {
+    padding-left: 0 !important;
+  }
+}

+ 54 - 3
src/pages/system/Department/Assets/product/bind.tsx

@@ -98,6 +98,15 @@ const Bind = observer((props: Props) => {
     }
   };
 
+  const unSelect = () => {
+    Models.bindKeys = [];
+    AssetsModel.params = {};
+  };
+
+  const getSelectedRowsKey = (selectedRows) => {
+    return selectedRows.map((item) => item?.id).filter((item2) => !!item2 !== false);
+  };
+
   useEffect(() => {
     if (props.visible) {
       actionRef.current?.reload();
@@ -147,6 +156,7 @@ const Bind = observer((props: Props) => {
           ]}
           onSearch={async (data) => {
             actionRef.current?.reset?.();
+            unSelect();
             setSearchParam(data);
           }}
           // onReset={() => {
@@ -169,12 +179,53 @@ const Bind = observer((props: Props) => {
             search={false}
             gridColumn={2}
             columnEmptyText={''}
+            tableAlertRender={({ selectedRowKeys }) => (
+              <div>已选择 {selectedRowKeys.length} 项</div>
+            )}
+            tableAlertOptionRender={() => {
+              return (
+                <a
+                  onClick={() => {
+                    unSelect();
+                  }}
+                >
+                  取消选择
+                </a>
+              );
+            }}
             rowSelection={{
               selectedRowKeys: Models.bindKeys,
-              onChange: (selectedRowKeys, selectedRows) => {
-                Models.bindKeys = selectedRows.map((item) => item.id);
+              // onChange: (selectedRowKeys, selectedRows) => {
+              //   Models.bindKeys = selectedRows.map((item) => item.id);
+              //   AssetsModel.params = {
+              //     productId: selectedRows.map((item) => item.id),
+              //   };
+              // },
+              onSelect: (record, selected, selectedRows) => {
+                if (selected) {
+                  Models.bindKeys = [
+                    ...new Set([...Models.bindKeys, ...getSelectedRowsKey(selectedRows)]),
+                  ];
+                } else {
+                  Models.bindKeys = Models.bindKeys.filter((item) => item !== record.id);
+                }
+                AssetsModel.params = {
+                  productId: Models.bindKeys,
+                };
+              },
+              onSelectAll: (selected, selectedRows, changeRows) => {
+                if (selected) {
+                  Models.bindKeys = [
+                    ...new Set([...Models.bindKeys, ...getSelectedRowsKey(selectedRows)]),
+                  ];
+                } else {
+                  const unChangeRowsKeys = getSelectedRowsKey(changeRows);
+                  Models.bindKeys = Models.bindKeys
+                    .concat(unChangeRowsKeys)
+                    .filter((item) => !unChangeRowsKeys.includes(item));
+                }
                 AssetsModel.params = {
-                  productId: selectedRows.map((item) => item.id),
+                  productId: Models.bindKeys,
                 };
               },
             }}

+ 49 - 6
src/pages/system/Department/Assets/product/index.tsx

@@ -18,6 +18,7 @@ import { ProTableCard, PermissionButton } from '@/components';
 import { onlyMessage } from '@/utils/util';
 import { ASSETS_TABS_ENUM, AssetsModel } from '@/pages/system/Department/Assets';
 import UpdateModal from '../updateModal';
+import '../index.less';
 
 export const service = new Service<ProductItem>('assets');
 
@@ -216,6 +217,14 @@ export default observer((props: { parentId: string }) => {
     Models.bindKeys = [];
   };
 
+  const unSelect = () => {
+    Models.bindKeys = [];
+    Models.unBindKeys = [];
+  };
+  const getSelectedRowsKey = (selectedRows) => {
+    return selectedRows.map((item) => item?.id).filter((item2) => !!item2 !== false);
+  };
+
   useEffect(() => {
     setSearchParam({
       terms: [
@@ -249,7 +258,7 @@ export default observer((props: { parentId: string }) => {
   };
 
   return (
-    <>
+    <div className="content">
       {Models.bind && (
         <Bind
           visible={Models.bind}
@@ -312,6 +321,7 @@ export default observer((props: { parentId: string }) => {
         ]}
         onSearch={async (data) => {
           actionRef.current?.reset?.();
+          unSelect();
           setSearchParam(data);
         }}
         // onReset={() => {
@@ -352,11 +362,43 @@ export default observer((props: { parentId: string }) => {
           };
         }}
         scroll={{ x: 1366 }}
+        tableAlertRender={({ selectedRowKeys }) => <div>已选择 {selectedRowKeys.length} 项</div>}
+        tableAlertOptionRender={() => {
+          return (
+            <a
+              onClick={() => {
+                unSelect();
+              }}
+            >
+              取消选择
+            </a>
+          );
+        }}
         rowSelection={{
           selectedRowKeys: Models.unBindKeys,
-          onChange: (selectedRowKeys, selectedRows) => {
-            console.log(selectedRows);
-            Models.unBindKeys = selectedRows.map((item) => item.id);
+          // onChange: (selectedRowKeys, selectedRows) => {
+          //   Models.unBindKeys = selectedRows.map((item) => item.id);
+          // },
+          onSelect: (record, selected, selectedRows) => {
+            if (selected) {
+              Models.unBindKeys = [
+                ...new Set([...Models.unBindKeys, ...getSelectedRowsKey(selectedRows)]),
+              ];
+            } else {
+              Models.unBindKeys = Models.unBindKeys.filter((item) => item !== record.id);
+            }
+          },
+          onSelectAll: (selected, selectedRows, changeRows) => {
+            if (selected) {
+              Models.unBindKeys = [
+                ...new Set([...Models.unBindKeys, ...getSelectedRowsKey(selectedRows)]),
+              ];
+            } else {
+              const unChangeRowsKeys = getSelectedRowsKey(changeRows);
+              Models.unBindKeys = Models.unBindKeys
+                .concat(unChangeRowsKeys)
+                .filter((item) => !unChangeRowsKeys.includes(item));
+            }
           },
         }}
         cardRender={(record) => (
@@ -400,7 +442,7 @@ export default observer((props: { parentId: string }) => {
             ]}
           />
         )}
-        toolBarRender={() => [
+        headerTitle={[
           <PermissionButton
             onClick={() => {
               Models.bind = true;
@@ -408,6 +450,7 @@ export default observer((props: { parentId: string }) => {
             icon={<PlusOutlined />}
             type="primary"
             key="bind"
+            style={{ marginRight: 12 }}
             disabled={!props.parentId}
             isPermission={permission.assert}
           >
@@ -456,6 +499,6 @@ export default observer((props: { parentId: string }) => {
           // </Popconfirm>,
         ]}
       />
-    </>
+    </div>
   );
 });

+ 44 - 2
src/pages/system/Department/Member/bind.tsx

@@ -65,6 +65,14 @@ const Bind = observer((props: Props) => {
     }
   };
 
+  const unSelect = () => {
+    MemberModel.bindUsers = [];
+  };
+
+  const getSelectedRowsKey = (selectedRows) => {
+    return selectedRows.map((item) => item?.id).filter((item2) => !!item2 !== false);
+  };
+
   return (
     <Modal
       visible={props.visible}
@@ -80,6 +88,7 @@ const Bind = observer((props: Props) => {
         defaultParam={[{ column: 'id$in-dimension$org$not', value: props.parentId }]}
         onSearch={async (data) => {
           actionRef.current?.reset?.();
+          unSelect();
           setSearchParam(data);
         }}
         // onReset={() => {
@@ -96,10 +105,43 @@ const Bind = observer((props: Props) => {
         columnEmptyText={''}
         search={false}
         params={searchParam}
+        tableAlertRender={({ selectedRowKeys }) => <div>已选择 {selectedRowKeys.length} 项</div>}
+        tableAlertOptionRender={() => {
+          return (
+            <a
+              onClick={() => {
+                unSelect();
+              }}
+            >
+              取消选择
+            </a>
+          );
+        }}
         rowSelection={{
           selectedRowKeys: MemberModel.bindUsers,
-          onChange: (selectedRowKeys, selectedRows) => {
-            MemberModel.bindUsers = selectedRows.map((item) => item.id);
+          // onChange: (selectedRowKeys, selectedRows) => {
+          //   MemberModel.bindUsers = selectedRows.map((item) => item.id);
+          // },
+          onSelect: (record, selected, selectedRows) => {
+            if (selected) {
+              MemberModel.bindUsers = [
+                ...new Set([...MemberModel.bindUsers, ...getSelectedRowsKey(selectedRows)]),
+              ];
+            } else {
+              MemberModel.bindUsers = MemberModel.bindUsers.filter((item) => item !== record.id);
+            }
+          },
+          onSelectAll: (selected, selectedRows, changeRows) => {
+            if (selected) {
+              MemberModel.bindUsers = [
+                ...new Set([...MemberModel.bindUsers, ...getSelectedRowsKey(selectedRows)]),
+              ];
+            } else {
+              const unChangeRowsKeys = getSelectedRowsKey(changeRows);
+              MemberModel.bindUsers = MemberModel.bindUsers
+                .concat(unChangeRowsKeys)
+                .filter((item) => !unChangeRowsKeys.includes(item));
+            }
           },
         }}
         request={(params) =>

+ 53 - 5
src/pages/system/Department/Member/index.tsx

@@ -14,6 +14,7 @@ import SearchComponent from '@/components/SearchComponent';
 import Models from '@/pages/system/Department/Assets/productCategory/model';
 import { onlyMessage } from '@/utils/util';
 import PermissionButton from '@/components/PermissionButton';
+import '../index.less';
 
 export const service = new Service('tenant');
 
@@ -170,6 +171,15 @@ const Member = observer((props: { parentId: string }) => {
     MemberModel.bind = false;
   };
 
+  const unSelect = () => {
+    // Models.bindKeys = [];
+    MemberModel.unBindUsers = [];
+  };
+
+  const getSelectedRowsKey = (selectedRows) => {
+    return selectedRows.map((item) => item?.id).filter((item2) => !!item2 !== false);
+  };
+
   useEffect(() => {
     setSearchParam({
       terms: [{ column: 'id$in-dimension$org', value: props.parentId }],
@@ -178,10 +188,11 @@ const Member = observer((props: { parentId: string }) => {
     //  初始化所有状态
     Models.bindKeys = [];
     Models.unBindKeys = [];
+    MemberModel.unBindUsers = [];
   }, [props.parentId]);
 
   return (
-    <>
+    <div className="content">
       {MemberModel.bind && (
         <Bind
           visible={MemberModel.bind}
@@ -196,6 +207,7 @@ const Member = observer((props: { parentId: string }) => {
         defaultParam={[{ column: 'id$in-dimension$org', value: props.parentId }]}
         onSearch={async (data) => {
           actionRef.current?.reset?.();
+          unSelect();
           setSearchParam(data);
         }}
         // onReset={() => {
@@ -227,14 +239,49 @@ const Member = observer((props: { parentId: string }) => {
           }
           return service.queryUser(params);
         }}
+        tableAlertRender={({ selectedRowKeys }) => <div>已选择 {selectedRowKeys.length} 项</div>}
+        tableAlertOptionRender={() => {
+          return (
+            <a
+              onClick={() => {
+                unSelect();
+              }}
+            >
+              取消选择
+            </a>
+          );
+        }}
         rowSelection={{
           selectedRowKeys: MemberModel.unBindUsers,
-          onChange: (selectedRowKeys, selectedRows) => {
-            MemberModel.unBindUsers = selectedRows.map((item) => item.id);
+          // onChange: (selectedRowKeys, selectedRows) => {
+          //   MemberModel.unBindUsers = selectedRows.map((item) => item.id);
+          // },
+          onSelect: (record, selected, selectedRows) => {
+            if (selected) {
+              MemberModel.unBindUsers = [
+                ...new Set([...MemberModel.unBindUsers, ...getSelectedRowsKey(selectedRows)]),
+              ];
+            } else {
+              MemberModel.unBindUsers = MemberModel.unBindUsers.filter(
+                (item) => item !== record.id,
+              );
+            }
+          },
+          onSelectAll: (selected, selectedRows, changeRows) => {
+            if (selected) {
+              MemberModel.unBindUsers = [
+                ...new Set([...MemberModel.unBindUsers, ...getSelectedRowsKey(selectedRows)]),
+              ];
+            } else {
+              const unChangeRowsKeys = getSelectedRowsKey(changeRows);
+              MemberModel.unBindUsers = MemberModel.unBindUsers
+                .concat(unChangeRowsKeys)
+                .filter((item) => !unChangeRowsKeys.includes(item));
+            }
           },
         }}
         params={searchParam}
-        toolBarRender={() => [
+        headerTitle={[
           <PermissionButton
             onClick={() => {
               MemberModel.bind = true;
@@ -242,6 +289,7 @@ const Member = observer((props: { parentId: string }) => {
             icon={<PlusOutlined />}
             type="primary"
             key="bind"
+            style={{ marginRight: 12 }}
             disabled={!props.parentId}
             isPermission={permission['bind-user']}
           >
@@ -290,7 +338,7 @@ const Member = observer((props: { parentId: string }) => {
           // </Popconfirm>,
         ]}
       />
-    </>
+    </div>
   );
 });