Browse Source

fix: #8855 修复组织管理 产品/设备/用户 列表以及绑定 跨页多选导致的部分bug

jackhoo_98 3 years ago
parent
commit
8fc49aeef5

+ 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(() => {
   useEffect(() => {
     if (props.visible) {
     if (props.visible) {
       actionRef.current?.reload();
       actionRef.current?.reload();
@@ -192,6 +201,7 @@ const Bind = observer((props: Props) => {
         )}
         )}
         onSearch={async (data) => {
         onSearch={async (data) => {
           actionRef.current?.reset?.();
           actionRef.current?.reset?.();
+          unSelect();
           setSearchParam(data);
           setSearchParam(data);
         }}
         }}
         // onReset={() => {
         // onReset={() => {
@@ -217,10 +227,43 @@ const Bind = observer((props: Props) => {
           cardRender={(record) => (
           cardRender={(record) => (
             <ExtraDeviceCard showBindBtn={false} showTool={false} {...record} cardType={'bind'} />
             <ExtraDeviceCard showBindBtn={false} showTool={false} {...record} cardType={'bind'} />
           )}
           )}
+          tableAlertRender={({ selectedRowKeys }) => <div>已选择 {selectedRowKeys.length} 项</div>}
+          tableAlertOptionRender={() => {
+            return (
+              <a
+                onClick={() => {
+                  unSelect();
+                }}
+              >
+                取消选择
+              </a>
+            );
+          }}
           rowSelection={{
           rowSelection={{
             selectedRowKeys: Models.bindKeys,
             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) =>
           request={(params) =>

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

@@ -29,7 +29,6 @@ export const DeviceBadge = (props: DeviceBadgeProps) => {
     offline: 'error',
     offline: 'error',
     online: 'processing',
     online: 'processing',
   };
   };
-  console.log(STATUS[props.type], props);
   return <Badge status={STATUS[props.type]} text={props.text} />;
   return <Badge status={STATUS[props.type]} text={props.text} />;
 };
 };
 
 
@@ -234,6 +233,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) => {
   const getData = (params: any, parentId: string) => {
     return new Promise((resolve) => {
     return new Promise((resolve) => {
       service.queryDeviceList2(params, parentId).subscribe((data) => {
       service.queryDeviceList2(params, parentId).subscribe((data) => {
@@ -310,6 +318,7 @@ export default observer((props: { parentId: string }) => {
         ]}
         ]}
         onSearch={async (data) => {
         onSearch={async (data) => {
           actionRef.current?.reset?.();
           actionRef.current?.reset?.();
+          unSelect();
           setSearchParam(data);
           setSearchParam(data);
         }}
         }}
         // onReset={() => {
         // onReset={() => {
@@ -350,10 +359,43 @@ export default observer((props: { parentId: string }) => {
             status: resp.status,
             status: resp.status,
           };
           };
         }}
         }}
+        tableAlertRender={({ selectedRowKeys }) => <div>已选择 {selectedRowKeys.length} 项</div>}
+        tableAlertOptionRender={() => {
+          return (
+            <a
+              onClick={() => {
+                unSelect();
+              }}
+            >
+              取消选择
+            </a>
+          );
+        }}
         rowSelection={{
         rowSelection={{
           selectedRowKeys: Models.unBindKeys,
           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) => (
         cardRender={(record) => (

+ 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(() => {
   useEffect(() => {
     if (props.visible) {
     if (props.visible) {
       actionRef.current?.reload();
       actionRef.current?.reload();
@@ -147,6 +156,7 @@ const Bind = observer((props: Props) => {
           ]}
           ]}
           onSearch={async (data) => {
           onSearch={async (data) => {
             actionRef.current?.reset?.();
             actionRef.current?.reset?.();
+            unSelect();
             setSearchParam(data);
             setSearchParam(data);
           }}
           }}
           // onReset={() => {
           // onReset={() => {
@@ -169,12 +179,53 @@ const Bind = observer((props: Props) => {
             search={false}
             search={false}
             gridColumn={2}
             gridColumn={2}
             columnEmptyText={''}
             columnEmptyText={''}
+            tableAlertRender={({ selectedRowKeys }) => (
+              <div>已选择 {selectedRowKeys.length} 项</div>
+            )}
+            tableAlertOptionRender={() => {
+              return (
+                <a
+                  onClick={() => {
+                    unSelect();
+                  }}
+                >
+                  取消选择
+                </a>
+              );
+            }}
             rowSelection={{
             rowSelection={{
               selectedRowKeys: Models.bindKeys,
               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 = {
                 AssetsModel.params = {
-                  productId: selectedRows.map((item) => item.id),
+                  productId: Models.bindKeys,
                 };
                 };
               },
               },
             }}
             }}

+ 44 - 3
src/pages/system/Department/Assets/product/index.tsx

@@ -216,6 +216,14 @@ export default observer((props: { parentId: string }) => {
     Models.bindKeys = [];
     Models.bindKeys = [];
   };
   };
 
 
+  const unSelect = () => {
+    Models.bindKeys = [];
+    Models.unBindKeys = [];
+  };
+  const getSelectedRowsKey = (selectedRows) => {
+    return selectedRows.map((item) => item?.id).filter((item2) => !!item2 !== false);
+  };
+
   useEffect(() => {
   useEffect(() => {
     setSearchParam({
     setSearchParam({
       terms: [
       terms: [
@@ -312,6 +320,7 @@ export default observer((props: { parentId: string }) => {
         ]}
         ]}
         onSearch={async (data) => {
         onSearch={async (data) => {
           actionRef.current?.reset?.();
           actionRef.current?.reset?.();
+          unSelect();
           setSearchParam(data);
           setSearchParam(data);
         }}
         }}
         // onReset={() => {
         // onReset={() => {
@@ -352,11 +361,43 @@ export default observer((props: { parentId: string }) => {
           };
           };
         }}
         }}
         scroll={{ x: 1366 }}
         scroll={{ x: 1366 }}
+        tableAlertRender={({ selectedRowKeys }) => <div>已选择 {selectedRowKeys.length} 项</div>}
+        tableAlertOptionRender={() => {
+          return (
+            <a
+              onClick={() => {
+                unSelect();
+              }}
+            >
+              取消选择
+            </a>
+          );
+        }}
         rowSelection={{
         rowSelection={{
           selectedRowKeys: Models.unBindKeys,
           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) => (
         cardRender={(record) => (

+ 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 (
   return (
     <Modal
     <Modal
       visible={props.visible}
       visible={props.visible}
@@ -80,6 +88,7 @@ const Bind = observer((props: Props) => {
         defaultParam={[{ column: 'id$in-dimension$org$not', value: props.parentId }]}
         defaultParam={[{ column: 'id$in-dimension$org$not', value: props.parentId }]}
         onSearch={async (data) => {
         onSearch={async (data) => {
           actionRef.current?.reset?.();
           actionRef.current?.reset?.();
+          unSelect();
           setSearchParam(data);
           setSearchParam(data);
         }}
         }}
         // onReset={() => {
         // onReset={() => {
@@ -96,10 +105,43 @@ const Bind = observer((props: Props) => {
         columnEmptyText={''}
         columnEmptyText={''}
         search={false}
         search={false}
         params={searchParam}
         params={searchParam}
+        tableAlertRender={({ selectedRowKeys }) => <div>已选择 {selectedRowKeys.length} 项</div>}
+        tableAlertOptionRender={() => {
+          return (
+            <a
+              onClick={() => {
+                unSelect();
+              }}
+            >
+              取消选择
+            </a>
+          );
+        }}
         rowSelection={{
         rowSelection={{
           selectedRowKeys: MemberModel.bindUsers,
           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) =>
         request={(params) =>

+ 48 - 2
src/pages/system/Department/Member/index.tsx

@@ -170,6 +170,15 @@ const Member = observer((props: { parentId: string }) => {
     MemberModel.bind = false;
     MemberModel.bind = false;
   };
   };
 
 
+  const unSelect = () => {
+    // Models.bindKeys = [];
+    MemberModel.unBindUsers = [];
+  };
+
+  const getSelectedRowsKey = (selectedRows) => {
+    return selectedRows.map((item) => item?.id).filter((item2) => !!item2 !== false);
+  };
+
   useEffect(() => {
   useEffect(() => {
     setSearchParam({
     setSearchParam({
       terms: [{ column: 'id$in-dimension$org', value: props.parentId }],
       terms: [{ column: 'id$in-dimension$org', value: props.parentId }],
@@ -178,6 +187,7 @@ const Member = observer((props: { parentId: string }) => {
     //  初始化所有状态
     //  初始化所有状态
     Models.bindKeys = [];
     Models.bindKeys = [];
     Models.unBindKeys = [];
     Models.unBindKeys = [];
+    MemberModel.unBindUsers = [];
   }, [props.parentId]);
   }, [props.parentId]);
 
 
   return (
   return (
@@ -196,6 +206,7 @@ const Member = observer((props: { parentId: string }) => {
         defaultParam={[{ column: 'id$in-dimension$org', value: props.parentId }]}
         defaultParam={[{ column: 'id$in-dimension$org', value: props.parentId }]}
         onSearch={async (data) => {
         onSearch={async (data) => {
           actionRef.current?.reset?.();
           actionRef.current?.reset?.();
+          unSelect();
           setSearchParam(data);
           setSearchParam(data);
         }}
         }}
         // onReset={() => {
         // onReset={() => {
@@ -227,10 +238,45 @@ const Member = observer((props: { parentId: string }) => {
           }
           }
           return service.queryUser(params);
           return service.queryUser(params);
         }}
         }}
+        tableAlertRender={({ selectedRowKeys }) => <div>已选择 {selectedRowKeys.length} 项</div>}
+        tableAlertOptionRender={() => {
+          return (
+            <a
+              onClick={() => {
+                unSelect();
+              }}
+            >
+              取消选择
+            </a>
+          );
+        }}
         rowSelection={{
         rowSelection={{
           selectedRowKeys: MemberModel.unBindUsers,
           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}
         params={searchParam}