pm пре 1 месец
родитељ
комит
5ddd78311a

+ 12 - 1
src/components/DepartmentManagement.tsx

@@ -17,6 +17,7 @@ import { dateFormatter } from '../utils/formatTime';
 import { handleTree, TreeNode } from '../utils/tree';
 import { handleTree, TreeNode } from '../utils/tree';
 import DeptForm, { DeptFormRef } from './dept/DeptForm';
 import DeptForm, { DeptFormRef } from './dept/DeptForm';
 import { useTranslation } from 'react-i18next';
 import { useTranslation } from 'react-i18next';
+import './IsolationWorkListTable.css';
 
 
 export default function DepartmentManagement() {
 export default function DepartmentManagement() {
   const { t } = useTranslation();
   const { t } = useTranslation();
@@ -45,6 +46,8 @@ export default function DepartmentManagement() {
     }
     }
   });
   });
   const formRef = useRef<DeptFormRef>(null);
   const formRef = useRef<DeptFormRef>(null);
+  /** 部门树表格隔行底色(递归渲染时递增) */
+  const zebraRowRef = useRef(0);
 
 
   // 加载 COMMON_STATUS 字典数据
   // 加载 COMMON_STATUS 字典数据
   const loadCommonStatusDict = async () => {
   const loadCommonStatusDict = async () => {
@@ -236,14 +239,20 @@ export default function DepartmentManagement() {
 
 
   // 递归渲染表格行
   // 递归渲染表格行
   const renderTableRows = (nodes: TreeNode[], level: number = 0): React.ReactNode[] => {
   const renderTableRows = (nodes: TreeNode[], level: number = 0): React.ReactNode[] => {
+    if (level === 0) {
+      zebraRowRef.current = 0;
+    }
     return nodes.map((node) => {
     return nodes.map((node) => {
       const hasChildren = node.children && node.children.length > 0;
       const hasChildren = node.children && node.children.length > 0;
       const isExpanded = expandedIds.includes(node.id);
       const isExpanded = expandedIds.includes(node.id);
       const isBuiltIn = !!(node as any).code && (node as any).code.trim() !== '';
       const isBuiltIn = !!(node as any).code && (node as any).code.trim() !== '';
+      const stripeIdx = zebraRowRef.current++;
 
 
       return (
       return (
         <React.Fragment key={node.id}>
         <React.Fragment key={node.id}>
-          <TableRow className="hover:bg-gray-50">
+          <TableRow
+            className={stripeIdx % 2 === 1 ? 'system-mgmt-row-alt hover:bg-gray-50' : 'hover:bg-gray-50'}
+          >
             <TableCell
             <TableCell
               style={{ paddingLeft: `${level * DEPT_COL_LEVEL_INDENT + DEPT_COL_BASE_INDENT}px` }}
               style={{ paddingLeft: `${level * DEPT_COL_LEVEL_INDENT + DEPT_COL_BASE_INDENT}px` }}
               className="font-medium text-left"
               className="font-medium text-left"
@@ -465,6 +474,7 @@ export default function DepartmentManagement() {
       {/* 表格 */}
       {/* 表格 */}
       <div className="bg-white rounded-lg border border-gray-200 overflow-hidden">
       <div className="bg-white rounded-lg border border-gray-200 overflow-hidden">
         {refreshTable && (
         {refreshTable && (
+          <div className="system-mgmt-shadcn-table">
           <Table>
           <Table>
             <TableHeader>
             <TableHeader>
               <TableRow>
               <TableRow>
@@ -499,6 +509,7 @@ export default function DepartmentManagement() {
               )}
               )}
             </TableBody>
             </TableBody>
           </Table>
           </Table>
+          </div>
         )}
         )}
       </div>
       </div>
 
 

+ 22 - 11
src/components/DictTypeManagement.tsx

@@ -15,6 +15,7 @@ import type { ColumnsType } from 'antd/es/table';
 import PermissionWrapper from './PermissionWrapper';
 import PermissionWrapper from './PermissionWrapper';
 import { hasPermission } from '../utils/permission';
 import { hasPermission } from '../utils/permission';
 import { useTranslation } from 'react-i18next';
 import { useTranslation } from 'react-i18next';
+import './IsolationWorkListTable.css';
 
 
 const { Search: AntSearch } = Input;
 const { Search: AntSearch } = Input;
 const AntButton = Button;
 const AntButton = Button;
@@ -572,6 +573,7 @@ export default function DictTypeManagement() {
 
 
       {/* 表格列表 */}
       {/* 表格列表 */}
       <div className="bg-white rounded-lg border border-gray-200 overflow-hidden">
       <div className="bg-white rounded-lg border border-gray-200 overflow-hidden">
+        <div className="system-mgmt-shadcn-table">
         <UITable>
         <UITable>
           <TableHeader>
           <TableHeader>
             <TableRow>
             <TableRow>
@@ -598,8 +600,11 @@ export default function DictTypeManagement() {
                 </TableCell>
                 </TableCell>
               </TableRow>
               </TableRow>
             ) : (
             ) : (
-              list.map((row) => (
-                <TableRow key={row.id} className="hover:bg-gray-50">
+              list.map((row, index) => (
+                <TableRow
+                  key={row.id}
+                  className={index % 2 === 1 ? 'system-mgmt-row-alt hover:bg-gray-50' : 'hover:bg-gray-50'}
+                >
                   <TableCell className="text-center">{row.id}</TableCell>
                   <TableCell className="text-center">{row.id}</TableCell>
                   <TableCell className="font-medium">{row.name}</TableCell>
                   <TableCell className="font-medium">{row.name}</TableCell>
                   <TableCell>
                   <TableCell>
@@ -672,6 +677,7 @@ export default function DictTypeManagement() {
             )}
             )}
           </TableBody>
           </TableBody>
         </UITable>
         </UITable>
+        </div>
       </div>
       </div>
 
 
       {/* 分页 */}
       {/* 分页 */}
@@ -740,15 +746,20 @@ export default function DictTypeManagement() {
           </div>
           </div>
 
 
           {/* 表格 */}
           {/* 表格 */}
-          <Table
-            columns={dictDataColumns}
-            dataSource={dictDataList}
-            rowKey="id"
-            loading={dictDataLoading}
-            pagination={false}
-            size="small"
-            scroll={{ x: 1400 }}
-          />
+          <div className="isolation-work-list-table">
+            <Table
+              columns={dictDataColumns}
+              dataSource={dictDataList}
+              rowKey="id"
+              loading={dictDataLoading}
+              pagination={false}
+              size="small"
+              scroll={{ x: 1400 }}
+              rowClassName={(_, index) =>
+                index !== undefined && index % 2 === 1 ? 'isolation-work-list-row-alt' : ''
+              }
+            />
+          </div>
 
 
           {/* 分页 */}
           {/* 分页 */}
           {!dictDataLoading && dictDataTotal > 0 && (
           {!dictDataLoading && dictDataTotal > 0 && (

+ 5 - 1
src/components/FormManagement.tsx

@@ -11,6 +11,7 @@ import { dateFormatter } from '../utils/formatTime';
 import { setConfAndFields2, FormCreateData } from '../utils/formCreate';
 import { setConfAndFields2, FormCreateData } from '../utils/formCreate';
 import { useTranslation } from 'react-i18next';
 import { useTranslation } from 'react-i18next';
 import FormUploadField from './FormUploadField';
 import FormUploadField from './FormUploadField';
+import './IsolationWorkListTable.css';
 
 
 export default function FormManagement() {
 export default function FormManagement() {
   const { t } = useTranslation();
   const { t } = useTranslation();
@@ -818,7 +819,7 @@ export default function FormManagement() {
         </div>
         </div>
 
 
         {/* 表格容器 */}
         {/* 表格容器 */}
-        <div className="overflow-hidden min-w-0">
+        <div className="isolation-work-list-table overflow-hidden min-w-0">
           <AntdTable
           <AntdTable
             loading={loading}
             loading={loading}
             columns={columns}
             columns={columns}
@@ -826,6 +827,9 @@ export default function FormManagement() {
             rowKey="id"
             rowKey="id"
             pagination={false}
             pagination={false}
             scroll={{ x: 'max-content' }}
             scroll={{ x: 'max-content' }}
+            rowClassName={(_, index) =>
+              index !== undefined && index % 2 === 1 ? 'isolation-work-list-row-alt' : ''
+            }
           />
           />
         </div>
         </div>
       </div>
       </div>

+ 1 - 1
src/components/HardwareManagement.tsx

@@ -744,7 +744,7 @@ export default function HardwareManagement({ subMenu }: HardwareManagementProps)
               {filteredData.map((row, index) => (
               {filteredData.map((row, index) => (
                 <tr
                 <tr
                   key={row.id}
                   key={row.id}
-                  className="hover:bg-blue-50/30 transition-colors"
+                  className={`transition-colors hover:bg-blue-50/30 ${index % 2 === 1 ? 'bg-[#f0f0f0]' : 'bg-white'}`}
                 >
                 >
                   <td className="px-6 py-4 text-sm text-gray-900">
                   <td className="px-6 py-4 text-sm text-gray-900">
                     {index + 1}
                     {index + 1}

+ 14 - 4
src/components/IsolationWork.tsx

@@ -45,6 +45,7 @@ import { userApi, UserVO } from '../api/user';
 import { deptApi, type DeptVO } from '../api/dept';
 import { deptApi, type DeptVO } from '../api/dept';
 import { segregationPointApi, SegregationPointVO } from '../api/spm';
 import { segregationPointApi, SegregationPointVO } from '../api/spm';
 import { getFormPage, getForm, FormVO } from '../api/bpm/form';
 import { getFormPage, getForm, FormVO } from '../api/bpm/form';
+import './IsolationWorkListTable.css';
 import urgecy1Icon from '../assets/urgecy1.png';
 import urgecy1Icon from '../assets/urgecy1.png';
 import urgecy2Icon from '../assets/urgecy2.png';
 import urgecy2Icon from '../assets/urgecy2.png';
 import urgecy3Icon from '../assets/urgecy3.png';
 import urgecy3Icon from '../assets/urgecy3.png';
@@ -3849,13 +3850,16 @@ export default function IsolationWork({ subMenu }: IsolationWorkProps) {
           </div>
           </div>
 
 
           {/* 表格容器 */}
           {/* 表格容器 */}
-          <div className="overflow-hidden min-w-0">
+          <div className="isolation-work-list-table overflow-hidden min-w-0">
             <AntdTable
             <AntdTable
               columns={formManagementColumns}
               columns={formManagementColumns}
               dataSource={formManagementPageData}
               dataSource={formManagementPageData}
               rowKey="id"
               rowKey="id"
               pagination={false}
               pagination={false}
               scroll={{ x: 'max-content' }}
               scroll={{ x: 'max-content' }}
+              rowClassName={(_, index) =>
+                index !== undefined && index % 2 === 1 ? 'isolation-work-list-row-alt' : ''
+              }
             />
             />
           </div>
           </div>
         </div>
         </div>
@@ -4039,7 +4043,7 @@ export default function IsolationWork({ subMenu }: IsolationWorkProps) {
           </div>
           </div>
 
 
           {/* 表格容器 */}
           {/* 表格容器 */}
-          <div className="overflow-hidden min-w-0">
+          <div className="isolation-work-list-table overflow-hidden min-w-0">
             <AntdTable
             <AntdTable
               columns={processDesignColumns}
               columns={processDesignColumns}
               dataSource={processDesignPageData}
               dataSource={processDesignPageData}
@@ -4047,6 +4051,9 @@ export default function IsolationWork({ subMenu }: IsolationWorkProps) {
               pagination={false}
               pagination={false}
               scroll={{ x: 'max-content' }}
               scroll={{ x: 'max-content' }}
               loading={processDesignLoading}
               loading={processDesignLoading}
+              rowClassName={(_, index) =>
+                index !== undefined && index % 2 === 1 ? 'isolation-work-list-row-alt' : ''
+              }
             />
             />
           </div>
           </div>
         </div>
         </div>
@@ -4349,7 +4356,7 @@ export default function IsolationWork({ subMenu }: IsolationWorkProps) {
           </div>
           </div>
 
 
           {/* 表格容器 */}
           {/* 表格容器 */}
-          <div className="overflow-hidden min-w-0">
+          <div className="isolation-work-list-table overflow-hidden min-w-0">
             <AntdTable
             <AntdTable
               columns={workJobColumns}
               columns={workJobColumns}
               dataSource={workJobPageData}
               dataSource={workJobPageData}
@@ -4357,6 +4364,9 @@ export default function IsolationWork({ subMenu }: IsolationWorkProps) {
               pagination={false}
               pagination={false}
               scroll={{ x: 'max-content' }}
               scroll={{ x: 'max-content' }}
               loading={workJobLoading}
               loading={workJobLoading}
+              rowClassName={(_, index) =>
+                index !== undefined && index % 2 === 1 ? 'isolation-work-list-row-alt' : ''
+              }
             />
             />
           </div>
           </div>
         </div>
         </div>
@@ -6620,7 +6630,7 @@ export default function IsolationWork({ subMenu }: IsolationWorkProps) {
               {filteredData.map((row, index) => (
               {filteredData.map((row, index) => (
                 <tr
                 <tr
                   key={row.id}
                   key={row.id}
-                  className="hover:bg-blue-50/30 transition-colors"
+                  className={`transition-colors hover:bg-blue-50/30 ${index % 2 === 1 ? 'bg-[#f0f0f0]' : 'bg-white'}`}
                 >
                 >
                   <td className="px-6 py-4 text-sm text-gray-900">
                   <td className="px-6 py-4 text-sm text-gray-900">
                     {index + 1}
                     {index + 1}

+ 21 - 0
src/components/IsolationWorkListTable.css

@@ -0,0 +1,21 @@
+/* 隔离作业模块下各列表:隔行 #f0f0f0(Ant Design Table 需覆盖 td) */
+.isolation-work-list-table .ant-table-tbody > tr.isolation-work-list-row-alt > td {
+  background-color: #f0f0f0 !important;
+}
+.isolation-work-list-table .ant-table-tbody > tr.isolation-work-list-row-alt:hover > td {
+  background-color: #e8e8e8 !important;
+}
+
+/* 系统管理:shadcn Table 隔行(背景需落在 td 上) */
+.system-mgmt-shadcn-table [data-slot="table-body"] > [data-slot="table-row"].system-mgmt-row-alt > [data-slot="table-cell"] {
+  background-color: #f0f0f0 !important;
+}
+.system-mgmt-shadcn-table [data-slot="table-body"] > [data-slot="table-row"].system-mgmt-row-alt:hover > [data-slot="table-cell"] {
+  background-color: #e8e8e8 !important;
+}
+.system-mgmt-shadcn-table [data-slot="table-body"] > [data-slot="table-row"]:not(.system-mgmt-row-alt) > [data-slot="table-cell"] {
+  background-color: #ffffff !important;
+}
+.system-mgmt-shadcn-table [data-slot="table-body"] > [data-slot="table-row"]:not(.system-mgmt-row-alt):hover > [data-slot="table-cell"] {
+  background-color: #f9fafb !important;
+}

+ 5 - 1
src/components/KeyManagement.tsx

@@ -10,6 +10,7 @@ import { dateFormatter } from '../utils/formatTime';
 import { Button as UIButton } from './ui/button';
 import { Button as UIButton } from './ui/button';
 import { useTranslation } from 'react-i18next';
 import { useTranslation } from 'react-i18next';
 import PermissionWrapper from './PermissionWrapper';
 import PermissionWrapper from './PermissionWrapper';
+import './IsolationWorkListTable.css';
 
 
 interface KeyManagementProps {
 interface KeyManagementProps {
   subMenu?: string;
   subMenu?: string;
@@ -325,7 +326,7 @@ export default function KeyManagement({ subMenu }: KeyManagementProps) {
         </div>
         </div>
 
 
         {/* 表格 */}
         {/* 表格 */}
-        <div className="min-w-0">
+        <div className="isolation-work-list-table min-w-0">
           <Table
           <Table
             columns={keyColumns}
             columns={keyColumns}
             dataSource={list}
             dataSource={list}
@@ -337,6 +338,9 @@ export default function KeyManagement({ subMenu }: KeyManagementProps) {
               selectedRowKeys,
               selectedRowKeys,
               onChange: setSelectedRowKeys,
               onChange: setSelectedRowKeys,
             }}
             }}
+            rowClassName={(_, index) =>
+              index !== undefined && index % 2 === 1 ? 'isolation-work-list-row-alt' : ''
+            }
           />
           />
         </div>
         </div>
       </div>
       </div>

+ 5 - 1
src/components/MenuManagement.tsx

@@ -18,6 +18,7 @@ import { toast } from 'sonner';
 import { DICT_TYPE, getDictLabel } from '../utils/dict';
 import { DICT_TYPE, getDictLabel } from '../utils/dict';
 import { Button as UIButton } from './ui/button';
 import { Button as UIButton } from './ui/button';
 import MenuForm, { MenuFormRef } from './MenuForm';
 import MenuForm, { MenuFormRef } from './MenuForm';
+import './IsolationWorkListTable.css';
 import PermissionWrapper from './PermissionWrapper';
 import PermissionWrapper from './PermissionWrapper';
 import { useTranslation } from 'react-i18next';
 import { useTranslation } from 'react-i18next';
 
 
@@ -574,7 +575,7 @@ export default function MenuManagement() {
       </div>
       </div>
 
 
       {/* 表格 */}
       {/* 表格 */}
-      <div className="bg-white rounded-lg border border-gray-200 overflow-hidden">
+      <div className="isolation-work-list-table bg-white rounded-lg border border-gray-200 overflow-hidden">
         <AntdTable<MenuNode>
         <AntdTable<MenuNode>
           columns={columns}
           columns={columns}
           dataSource={treeList}
           dataSource={treeList}
@@ -589,6 +590,9 @@ export default function MenuManagement() {
           }}
           }}
           scroll={{ x: 'max-content' }}
           scroll={{ x: 'max-content' }}
           size="middle"
           size="middle"
+          rowClassName={(_, index) =>
+            index !== undefined && index % 2 === 1 ? 'isolation-work-list-row-alt' : ''
+          }
         />
         />
       </div>
       </div>
 
 

+ 5 - 1
src/components/MyTask.tsx

@@ -16,6 +16,7 @@ import urgecy2Icon from '../assets/urgecy2.png';
 import urgecy3Icon from '../assets/urgecy3.png';
 import urgecy3Icon from '../assets/urgecy3.png';
 import { useTranslation } from 'react-i18next';
 import { useTranslation } from 'react-i18next';
 import FormUploadField from './FormUploadField';
 import FormUploadField from './FormUploadField';
+import './IsolationWorkListTable.css';
 
 
 // 辅助函数:安全地将值转换为 dayjs 对象
 // 辅助函数:安全地将值转换为 dayjs 对象
 const safeToDayjs = (value: any): dayjs.Dayjs | null => {
 const safeToDayjs = (value: any): dayjs.Dayjs | null => {
@@ -1927,7 +1928,7 @@ export default function MyTask() {
         </div>
         </div>
 
 
         {/* 表格容器 */}
         {/* 表格容器 */}
-        <div className="overflow-hidden min-w-0">
+        <div className="isolation-work-list-table overflow-hidden min-w-0">
           <AntdTable
           <AntdTable
             loading={loading}
             loading={loading}
             columns={columns}
             columns={columns}
@@ -1938,6 +1939,9 @@ export default function MyTask() {
             locale={{
             locale={{
               emptyText: t('form.noData'),
               emptyText: t('form.noData'),
             }}
             }}
+            rowClassName={(_, index) =>
+              index !== undefined && index % 2 === 1 ? 'isolation-work-list-row-alt' : ''
+            }
           />
           />
         </div>
         </div>
       </div>
       </div>

+ 9 - 2
src/components/PadLockManagement.tsx

@@ -13,6 +13,7 @@ import UploadImg from './lockCabinet/UploadImg';
 import { Button as UIButton } from './ui/button';
 import { Button as UIButton } from './ui/button';
 import { useTranslation } from 'react-i18next';
 import { useTranslation } from 'react-i18next';
 import PermissionWrapper from './PermissionWrapper';
 import PermissionWrapper from './PermissionWrapper';
+import './IsolationWorkListTable.css';
 
 
 interface PadLockManagementProps {
 interface PadLockManagementProps {
   subMenu?: string;
   subMenu?: string;
@@ -665,7 +666,7 @@ export default function PadLockManagement({ subMenu }: PadLockManagementProps) {
             </div>
             </div>
 
 
             {/* 表格 */}
             {/* 表格 */}
-            <div className="min-w-0">
+            <div className="isolation-work-list-table min-w-0">
               <Table
               <Table
                 columns={padLockColumns}
                 columns={padLockColumns}
                 dataSource={list}
                 dataSource={list}
@@ -677,6 +678,9 @@ export default function PadLockManagement({ subMenu }: PadLockManagementProps) {
                   selectedRowKeys,
                   selectedRowKeys,
                   onChange: setSelectedRowKeys,
                   onChange: setSelectedRowKeys,
                 }}
                 }}
+                rowClassName={(_, index) =>
+                  index !== undefined && index % 2 === 1 ? 'isolation-work-list-row-alt' : ''
+                }
               />
               />
             </div>
             </div>
           </div>
           </div>
@@ -791,7 +795,7 @@ export default function PadLockManagement({ subMenu }: PadLockManagementProps) {
             </div>
             </div>
 
 
             {/* 表格 - 树形表格 */}
             {/* 表格 - 树形表格 */}
-            <div>
+            <div className="isolation-work-list-table">
               <Table
               <Table
                 columns={padLockTypeColumns}
                 columns={padLockTypeColumns}
                 dataSource={typeTreeList}
                 dataSource={typeTreeList}
@@ -804,6 +808,9 @@ export default function PadLockManagement({ subMenu }: PadLockManagementProps) {
                   onExpandedRowsChange: setExpandedRowKeys,
                   onExpandedRowsChange: setExpandedRowKeys,
                   defaultExpandAllRows: isExpandAll,
                   defaultExpandAllRows: isExpandAll,
                 }}
                 }}
+                rowClassName={(_, index) =>
+                  index !== undefined && index % 2 === 1 ? 'isolation-work-list-row-alt' : ''
+                }
               />
               />
             </div>
             </div>
           </div>
           </div>

+ 7 - 1
src/components/PostManagement.tsx

@@ -12,6 +12,7 @@ import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '.
 import PostForm, { PostFormRef } from './PostForm';
 import PostForm, { PostFormRef } from './PostForm';
 import PermissionWrapper from './PermissionWrapper';
 import PermissionWrapper from './PermissionWrapper';
 import { useTranslation } from 'react-i18next';
 import { useTranslation } from 'react-i18next';
+import './IsolationWorkListTable.css';
 
 
 export default function PostManagement() {
 export default function PostManagement() {
   const { t } = useTranslation();
   const { t } = useTranslation();
@@ -329,6 +330,7 @@ export default function PostManagement() {
 
 
       {/* 表格 */}
       {/* 表格 */}
       <div className="bg-white rounded-lg border border-gray-200 overflow-hidden">
       <div className="bg-white rounded-lg border border-gray-200 overflow-hidden">
+        <div className="system-mgmt-shadcn-table">
         <Table>
         <Table>
           <TableHeader>
           <TableHeader>
             <TableRow>
             <TableRow>
@@ -357,7 +359,10 @@ export default function PostManagement() {
               </TableRow>
               </TableRow>
             ) : (
             ) : (
               list.map((row, index) => (
               list.map((row, index) => (
-                <TableRow key={row.id} className="hover:bg-gray-50">
+                <TableRow
+                  key={row.id}
+                  className={index % 2 === 1 ? 'system-mgmt-row-alt hover:bg-gray-50' : 'hover:bg-gray-50'}
+                >
                   <TableCell className="text-center">{row.id}</TableCell>
                   <TableCell className="text-center">{row.id}</TableCell>
                   <TableCell className="font-medium">{row.name}</TableCell>
                   <TableCell className="font-medium">{row.name}</TableCell>
                   <TableCell>{row.code}</TableCell>
                   <TableCell>{row.code}</TableCell>
@@ -445,6 +450,7 @@ export default function PostManagement() {
             )}
             )}
           </TableBody>
           </TableBody>
         </Table>
         </Table>
+        </div>
       </div>
       </div>
 
 
       {/* 分页 */}
       {/* 分页 */}

+ 8 - 2
src/components/RoleManagement.tsx

@@ -15,6 +15,7 @@ import RoleDataPermissionForm, { RoleDataPermissionFormRef } from './RoleDataPer
 import PermissionWrapper from './PermissionWrapper';
 import PermissionWrapper from './PermissionWrapper';
 import { hasPermission } from '../utils/permission';
 import { hasPermission } from '../utils/permission';
 import { useTranslation } from 'react-i18next';
 import { useTranslation } from 'react-i18next';
+import './IsolationWorkListTable.css';
 
 
 export default function RoleManagement() {
 export default function RoleManagement() {
   const { t } = useTranslation();
   const { t } = useTranslation();
@@ -325,6 +326,7 @@ export default function RoleManagement() {
 
 
       {/* 表格 */}
       {/* 表格 */}
       <div className="bg-white rounded-lg border border-gray-200 overflow-hidden">
       <div className="bg-white rounded-lg border border-gray-200 overflow-hidden">
+        <div className="system-mgmt-shadcn-table">
         <Table>
         <Table>
           <TableHeader>
           <TableHeader>
             <TableRow>
             <TableRow>
@@ -353,8 +355,11 @@ export default function RoleManagement() {
                 </TableCell>
                 </TableCell>
               </TableRow>
               </TableRow>
             ) : (
             ) : (
-              list.map((row) => (
-                <TableRow key={row.id} className="hover:bg-gray-50">
+              list.map((row, index) => (
+                <TableRow
+                  key={row.id}
+                  className={index % 2 === 1 ? 'system-mgmt-row-alt hover:bg-gray-50' : 'hover:bg-gray-50'}
+                >
                   <TableCell className="text-center">{row.id}</TableCell>
                   <TableCell className="text-center">{row.id}</TableCell>
                   <TableCell className="font-medium">{row.name}</TableCell>
                   <TableCell className="font-medium">{row.name}</TableCell>
                   <TableCell className="text-center text-sm">
                   <TableCell className="text-center text-sm">
@@ -483,6 +488,7 @@ export default function RoleManagement() {
             )}
             )}
           </TableBody>
           </TableBody>
         </Table>
         </Table>
+        </div>
       </div>
       </div>
 
 
       {/* 分页 */}
       {/* 分页 */}

+ 5 - 1
src/components/SegregationPointManagement.tsx

@@ -12,6 +12,7 @@ import SegregationPointForm, { SegregationPointFormRef } from './SegregationPoin
 import { Button as UIButton } from './ui/button';
 import { Button as UIButton } from './ui/button';
 import PermissionWrapper from './PermissionWrapper';
 import PermissionWrapper from './PermissionWrapper';
 import { useTranslation } from 'react-i18next';
 import { useTranslation } from 'react-i18next';
+import './IsolationWorkListTable.css';
 
 
 interface SegregationPointManagementProps {
 interface SegregationPointManagementProps {
   subMenu?: string;
   subMenu?: string;
@@ -506,7 +507,7 @@ export default function SegregationPointManagement({ subMenu }: SegregationPoint
       </div>
       </div>
 
 
       {/* 表格 */}
       {/* 表格 */}
-      <div className="bg-white rounded-lg border border-gray-200">
+      <div className="bg-white rounded-lg border border-gray-200 isolation-work-list-table">
         <Table
         <Table
           columns={columns}
           columns={columns}
           dataSource={list}
           dataSource={list}
@@ -567,6 +568,9 @@ export default function SegregationPointManagement({ subMenu }: SegregationPoint
               name: record.pointName,
               name: record.pointName,
             }),
             }),
           }}
           }}
+          rowClassName={(_, index) =>
+            index !== undefined && index % 2 === 1 ? 'isolation-work-list-row-alt' : ''
+          }
         />
         />
       </div>
       </div>
 
 

+ 13 - 6
src/components/SystemConfig.tsx

@@ -643,7 +643,10 @@ export default function SystemConfig({ subMenu }: SystemConfigProps) {
                         { id: 11, key: 'vp_group', value: 'VP组', order: 11, status: '启用', remark: '副总裁', createTime: '2025-01-11' },
                         { id: 11, key: 'vp_group', value: 'VP组', order: 11, status: '启用', remark: '副总裁', createTime: '2025-01-11' },
                         { id: 12, key: 'ceo_group', value: 'CEO组', order: 12, status: '启用', remark: '首席执行官', createTime: '2025-01-12' },
                         { id: 12, key: 'ceo_group', value: 'CEO组', order: 12, status: '启用', remark: '首席执行官', createTime: '2025-01-12' },
                       ].map((item, index) => (
                       ].map((item, index) => (
-                        <tr key={item.id} className="hover:bg-blue-50/30 transition-colors">
+                        <tr
+                          key={item.id}
+                          className={`transition-colors hover:bg-blue-50/30 ${index % 2 === 1 ? 'bg-[#f0f0f0]' : 'bg-white'}`}
+                        >
                           <td className="px-6 py-4 text-sm text-gray-900">{item.id}</td>
                           <td className="px-6 py-4 text-sm text-gray-900">{item.id}</td>
                           <td className="px-6 py-4 text-sm text-gray-900">{item.key}</td>
                           <td className="px-6 py-4 text-sm text-gray-900">{item.key}</td>
                           <td className="px-6 py-4 text-sm text-gray-900">{item.value}</td>
                           <td className="px-6 py-4 text-sm text-gray-900">{item.value}</td>
@@ -879,10 +882,13 @@ export default function SystemConfig({ subMenu }: SystemConfigProps) {
                 </tr>
                 </tr>
               </thead>
               </thead>
               <tbody className="divide-y divide-gray-100">
               <tbody className="divide-y divide-gray-100">
-                {menuTreeData.map((parentMenu) => (
+                {(() => {
+                  let menuStripeIdx = 0;
+                  const menuRowBg = () => (menuStripeIdx++ % 2 === 1 ? 'bg-[#f0f0f0]' : 'bg-white');
+                  return menuTreeData.map((parentMenu) => (
                   <React.Fragment key={parentMenu.id}>
                   <React.Fragment key={parentMenu.id}>
                     {/* 一级菜单 */}
                     {/* 一级菜单 */}
-                    <tr className="hover:bg-blue-50/30 transition-colors bg-gray-50/50">
+                    <tr className={`hover:bg-blue-50/30 transition-colors ${menuRowBg()}`}>
                       <td className="px-6 py-4">
                       <td className="px-6 py-4">
                         <div className="flex items-center gap-2">
                         <div className="flex items-center gap-2">
                           {parentMenu.children && parentMenu.children.length > 0 ? (
                           {parentMenu.children && parentMenu.children.length > 0 ? (
@@ -941,7 +947,7 @@ export default function SystemConfig({ subMenu }: SystemConfigProps) {
                     
                     
                     {/* 二级菜单 */}
                     {/* 二级菜单 */}
                     {expandedMenuIds.includes(parentMenu.id) && parentMenu.children && parentMenu.children.map((childMenu: any) => (
                     {expandedMenuIds.includes(parentMenu.id) && parentMenu.children && parentMenu.children.map((childMenu: any) => (
-                      <tr key={childMenu.id} className="hover:bg-blue-50/20 transition-colors">
+                      <tr key={childMenu.id} className={`hover:bg-blue-50/20 transition-colors ${menuRowBg()}`}>
                         <td className="px-6 py-4">
                         <td className="px-6 py-4">
                           <div className="flex items-center gap-2 pl-10">
                           <div className="flex items-center gap-2 pl-10">
                             <div className="w-4 h-px bg-gray-300"></div>
                             <div className="w-4 h-px bg-gray-300"></div>
@@ -986,7 +992,8 @@ export default function SystemConfig({ subMenu }: SystemConfigProps) {
                       </tr>
                       </tr>
                     ))}
                     ))}
                   </React.Fragment>
                   </React.Fragment>
-                ))}
+                  ));
+                })()}
               </tbody>
               </tbody>
             </table>
             </table>
           </div>
           </div>
@@ -1028,7 +1035,7 @@ export default function SystemConfig({ subMenu }: SystemConfigProps) {
                 {filteredData.map((row, index) => (
                 {filteredData.map((row, index) => (
                   <tr
                   <tr
                     key={row.id}
                     key={row.id}
-                    className="hover:bg-blue-50/30 transition-colors"
+                    className={`transition-colors hover:bg-blue-50/30 ${index % 2 === 1 ? 'bg-[#f0f0f0]' : 'bg-white'}`}
                   >
                   >
                     <td className="px-6 py-4 text-sm text-gray-900">
                     <td className="px-6 py-4 text-sm text-gray-900">
                       {index + 1}
                       {index + 1}

+ 5 - 1
src/components/TaskManagement.tsx

@@ -16,6 +16,7 @@ import urgecy2Icon from '../assets/urgecy2.png';
 import urgecy3Icon from '../assets/urgecy3.png';
 import urgecy3Icon from '../assets/urgecy3.png';
 import { useTranslation } from 'react-i18next';
 import { useTranslation } from 'react-i18next';
 import FormUploadField from './FormUploadField';
 import FormUploadField from './FormUploadField';
+import './IsolationWorkListTable.css';
 
 
 // 辅助函数:安全地将值转换为 dayjs 对象
 // 辅助函数:安全地将值转换为 dayjs 对象
 const safeToDayjs = (value: any): dayjs.Dayjs | null => {
 const safeToDayjs = (value: any): dayjs.Dayjs | null => {
@@ -2031,7 +2032,7 @@ export default function TaskManagement() {
         </div>
         </div>
 
 
         {/* 表格容器:不设 overflow,避免出现第二层纵向滚动条,仅用 Table 的 scroll.x 做横向滚动 */}
         {/* 表格容器:不设 overflow,避免出现第二层纵向滚动条,仅用 Table 的 scroll.x 做横向滚动 */}
-        <div className="min-w-0">
+        <div className="isolation-work-list-table min-w-0">
           <AntdTable
           <AntdTable
             loading={loading}
             loading={loading}
             columns={columns}
             columns={columns}
@@ -2042,6 +2043,9 @@ export default function TaskManagement() {
             locale={{
             locale={{
               emptyText: t('form.noData'),
               emptyText: t('form.noData'),
             }}
             }}
+            rowClassName={(_, index) =>
+              index !== undefined && index % 2 === 1 ? 'isolation-work-list-row-alt' : ''
+            }
           />
           />
         </div>
         </div>
       </div>
       </div>

+ 5 - 1
src/components/UserManagement.tsx

@@ -18,6 +18,7 @@ import { useTranslation } from 'react-i18next';
 import PermissionWrapper from './PermissionWrapper';
 import PermissionWrapper from './PermissionWrapper';
 import { hasPermission } from '../utils/permission';
 import { hasPermission } from '../utils/permission';
 import { formatDateWithFormat } from '../utils/formatTime';
 import { formatDateWithFormat } from '../utils/formatTime';
+import './IsolationWorkListTable.css';
 
 
 interface UserManagementProps {
 interface UserManagementProps {
   subMenu: string;
   subMenu: string;
@@ -630,7 +631,7 @@ export default function UserManagement({ subMenu }: UserManagementProps) {
           </div>
           </div>
 
 
           {/* 表格容器 */}
           {/* 表格容器 */}
-          <div className="bg-white rounded-2xl border border-gray-200/50 shadow-sm overflow-hidden min-w-0">
+          <div className="isolation-work-list-table bg-white rounded-2xl border border-gray-200/50 shadow-sm overflow-hidden min-w-0">
             <Table
             <Table
               columns={columns}
               columns={columns}
               dataSource={list}
               dataSource={list}
@@ -638,6 +639,9 @@ export default function UserManagement({ subMenu }: UserManagementProps) {
               loading={loading}
               loading={loading}
               pagination={false}
               pagination={false}
               scroll={{ x: 'max-content' }}
               scroll={{ x: 'max-content' }}
+              rowClassName={(_, index) =>
+                index !== undefined && index % 2 === 1 ? 'isolation-work-list-row-alt' : ''
+              }
             />
             />
           </div>
           </div>
 
 

+ 5 - 1
src/components/lockCabinet/HardwareLockCabinetManagement.tsx

@@ -9,6 +9,7 @@ import { SearchOutlined, ReloadOutlined } from '@ant-design/icons';
 import { Button } from '../ui/button';
 import { Button } from '../ui/button';
 import { useNavigate } from 'react-router-dom';
 import { useNavigate } from 'react-router-dom';
 import { useTranslation } from 'react-i18next';
 import { useTranslation } from 'react-i18next';
+import '../IsolationWorkListTable.css';
 
 
 export default function HardwareLockCabinetManagement() {
 export default function HardwareLockCabinetManagement() {
   console.log('HardwareLockCabinetManagement: 组件开始渲染');
   console.log('HardwareLockCabinetManagement: 组件开始渲染');
@@ -221,7 +222,7 @@ export default function HardwareLockCabinetManagement() {
         </div>
         </div>
 
 
         {/* 表格 */}
         {/* 表格 */}
-        <div>
+        <div className="isolation-work-list-table">
           <Table
           <Table
           rowKey={(record) => {
           rowKey={(record) => {
             // 兼容不同的 ID 字段名
             // 兼容不同的 ID 字段名
@@ -396,6 +397,9 @@ export default function HardwareLockCabinetManagement() {
           ]}
           ]}
           pagination={false}
           pagination={false}
           scroll={{ x: 'max-content' }}
           scroll={{ x: 'max-content' }}
+          rowClassName={(_, index) =>
+            index !== undefined && index % 2 === 1 ? 'isolation-work-list-row-alt' : ''
+          }
         />
         />
         </div>
         </div>
       </div>
       </div>

+ 5 - 1
src/components/lockCabinet/SystemLockCabinetManagement.tsx

@@ -13,6 +13,7 @@ import { ImageWithFallback } from '../figma/ImageWithFallback';
 import { useNavigate } from 'react-router-dom';
 import { useNavigate } from 'react-router-dom';
 import PermissionWrapper from '../PermissionWrapper';
 import PermissionWrapper from '../PermissionWrapper';
 import { useTranslation } from 'react-i18next';
 import { useTranslation } from 'react-i18next';
+import '../IsolationWorkListTable.css';
 
 
 export default function SystemLockCabinetManagement() {
 export default function SystemLockCabinetManagement() {
   const { t } = useTranslation();
   const { t } = useTranslation();
@@ -293,7 +294,7 @@ export default function SystemLockCabinetManagement() {
       </div>
       </div>
 
 
       {/* 表格 */}
       {/* 表格 */}
-      <div className="bg-white rounded-lg border border-gray-200 overflow-hidden">
+      <div className="isolation-work-list-table bg-white rounded-lg border border-gray-200 overflow-hidden">
         <Table
         <Table
           rowKey={(record) => {
           rowKey={(record) => {
             // 兼容不同的 ID 字段名
             // 兼容不同的 ID 字段名
@@ -507,6 +508,9 @@ export default function SystemLockCabinetManagement() {
           ]}
           ]}
           pagination={false}
           pagination={false}
           scroll={{ x: 'max-content' }}
           scroll={{ x: 'max-content' }}
+          rowClassName={(_, index) =>
+            index !== undefined && index % 2 === 1 ? 'isolation-work-list-row-alt' : ''
+          }
         />
         />
       </div>
       </div>