Эх сурвалжийг харах

修复操作列的划过效果

pm 4 сар өмнө
parent
commit
8b416dca3b

+ 37 - 6
src/components/DepartmentManagement.tsx

@@ -259,9 +259,18 @@ export default function DepartmentManagement() {
                     variant="ghost"
                     size="sm"
                     onClick={() => openForm('update', node.id)}
-                    className="h-8 px-2"
+                    className="h-8 px-2 transition-colors hover:underline"
+                    style={{ color: '#000000' }}
+                    onMouseEnter={(e) => {
+                      e.currentTarget.style.color = '#1677ff';
+                      e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #1677ff');
+                    }}
+                    onMouseLeave={(e) => {
+                      e.currentTarget.style.color = '#000000';
+                      e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #000000');
+                    }}
                   >
-                    <Edit2 className="w-4 h-4" />
+                    <Edit2 className="w-4 h-4" style={{ color: '#000000' }} />
                     <span className="ml-1">编辑</span>
                   </Button>
                 </PermissionWrapper>
@@ -270,9 +279,18 @@ export default function DepartmentManagement() {
                     variant="ghost"
                     size="sm"
                     onClick={() => openForm('create', undefined, node.id)}
-                    className="h-8 px-2 text-green-600 hover:text-green-700"
+                    className="h-8 px-2 transition-colors hover:underline"
+                    style={{ color: '#000000' }}
+                    onMouseEnter={(e) => {
+                      e.currentTarget.style.color = '#1677ff';
+                      e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #1677ff');
+                    }}
+                    onMouseLeave={(e) => {
+                      e.currentTarget.style.color = '#000000';
+                      e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #000000');
+                    }}
                   >
-                    <Plus className="w-4 h-4" />
+                    <Plus className="w-4 h-4" style={{ color: '#000000' }} />
                     <span className="ml-1">新增</span>
                   </Button>
                 </PermissionWrapper>
@@ -281,10 +299,23 @@ export default function DepartmentManagement() {
                     variant="ghost"
                     size="sm"
                     onClick={() => handleDelete(node.id, (node as any).name || '未命名部门')}
-                    className={`h-8 px-2 ${isBuiltIn ? 'text-gray-400 cursor-not-allowed' : 'text-red-600 hover:text-red-700'}`}
+                    className={`h-8 px-2 transition-colors hover:underline ${isBuiltIn ? 'text-gray-400 cursor-not-allowed' : ''}`}
                     disabled={isBuiltIn}
+                    style={{ color: isBuiltIn ? '#9ca3af' : '#000000' }}
+                    onMouseEnter={(e) => {
+                      if (!isBuiltIn) {
+                        e.currentTarget.style.color = '#1677ff';
+                        e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #1677ff');
+                      }
+                    }}
+                    onMouseLeave={(e) => {
+                      if (!isBuiltIn) {
+                        e.currentTarget.style.color = '#000000';
+                        e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #000000');
+                      }
+                    }}
                   >
-                    <Trash2 className="w-4 h-4"/>
+                    <Trash2 className="w-4 h-4" style={{ color: isBuiltIn ? '#9ca3af' : '#000000' }} />
                     <span className="ml-1">删除</span>
                   </Button>
                 </PermissionWrapper>

+ 58 - 4
src/components/DictDataManagement.tsx

@@ -177,18 +177,72 @@ export default function DictDataManagement({ dictType, dictDataList, onRefresh }
             variant="ghost"
             size="sm"
             onClick={() => openForm('update', record.id)}
-            className="h-8 px-2"
+            className="h-8 px-2 transition-colors hover:!text-[#1677ff] hover:!underline"
+            style={{ color: '#000000' }}
+            onMouseEnter={(e) => {
+              const target = e.currentTarget as HTMLElement;
+              target.style.setProperty('color', '#1677ff', 'important');
+              target.style.setProperty('text-decoration', 'underline', 'important');
+              const svg = target.querySelector('svg');
+              if (svg) {
+                svg.style.setProperty('color', '#1677ff', 'important');
+              }
+              const span = target.querySelector('span');
+              if (span) {
+                span.style.setProperty('color', '#1677ff', 'important');
+              }
+            }}
+            onMouseLeave={(e) => {
+              const target = e.currentTarget as HTMLElement;
+              target.style.setProperty('color', '#000000', 'important');
+              target.style.setProperty('text-decoration', 'none', 'important');
+              const svg = target.querySelector('svg');
+              if (svg) {
+                svg.style.setProperty('color', '#000000', 'important');
+              }
+              const span = target.querySelector('span');
+              if (span) {
+                span.style.setProperty('color', '#000000', 'important');
+              }
+            }}
           >
-            <Edit2 className="w-4 h-4" />
+            <Edit2 className="w-4 h-4" style={{ color: '#000000' }} />
             <span className="ml-1">编辑</span>
           </Button>
           <Button
             variant="ghost"
             size="sm"
             onClick={() => handleDelete(record.id!, record.label)}
-            className="h-8 px-2 text-red-600 hover:text-red-700"
+            className="h-8 px-2 transition-colors hover:!text-[#1677ff] hover:!underline"
+            style={{ color: '#000000' }}
+            onMouseEnter={(e) => {
+              const target = e.currentTarget as HTMLElement;
+              target.style.setProperty('color', '#1677ff', 'important');
+              target.style.setProperty('text-decoration', 'underline', 'important');
+              const svg = target.querySelector('svg');
+              if (svg) {
+                svg.style.setProperty('color', '#1677ff', 'important');
+              }
+              const span = target.querySelector('span');
+              if (span) {
+                span.style.setProperty('color', '#1677ff', 'important');
+              }
+            }}
+            onMouseLeave={(e) => {
+              const target = e.currentTarget as HTMLElement;
+              target.style.setProperty('color', '#000000', 'important');
+              target.style.setProperty('text-decoration', 'none', 'important');
+              const svg = target.querySelector('svg');
+              if (svg) {
+                svg.style.setProperty('color', '#000000', 'important');
+              }
+              const span = target.querySelector('span');
+              if (span) {
+                span.style.setProperty('color', '#000000', 'important');
+              }
+            }}
           >
-            <Trash2 className="w-4 h-4" />
+            <Trash2 className="w-4 h-4" style={{ color: '#000000' }} />
             <span className="ml-1">删除</span>
           </Button>
         </div>

+ 58 - 4
src/components/DictTypeManagement.tsx

@@ -326,9 +326,36 @@ export default function DictTypeManagement() {
               variant="ghost"
               size="sm"
               onClick={() => openDictDataForm('update', record.id)}
-              className="h-8 px-2"
+              className="h-8 px-2 transition-colors hover:!text-[#1677ff] hover:!underline"
+              style={{ color: '#000000' }}
+              onMouseEnter={(e) => {
+                const target = e.currentTarget as HTMLElement;
+                target.style.setProperty('color', '#1677ff', 'important');
+                target.style.setProperty('text-decoration', 'underline', 'important');
+                const svg = target.querySelector('svg');
+                if (svg) {
+                  svg.style.setProperty('color', '#1677ff', 'important');
+                }
+                const span = target.querySelector('span');
+                if (span) {
+                  span.style.setProperty('color', '#1677ff', 'important');
+                }
+              }}
+              onMouseLeave={(e) => {
+                const target = e.currentTarget as HTMLElement;
+                target.style.setProperty('color', '#000000', 'important');
+                target.style.setProperty('text-decoration', 'none', 'important');
+                const svg = target.querySelector('svg');
+                if (svg) {
+                  svg.style.setProperty('color', '#000000', 'important');
+                }
+                const span = target.querySelector('span');
+                if (span) {
+                  span.style.setProperty('color', '#000000', 'important');
+                }
+              }}
             >
-              <Edit2 className="w-4 h-4" />
+              <Edit2 className="w-4 h-4" style={{ color: '#000000' }} />
               <span className="ml-1">编辑</span>
             </UIButton>
           </PermissionWrapper>
@@ -337,9 +364,36 @@ export default function DictTypeManagement() {
               variant="ghost"
               size="sm"
               onClick={() => handleDeleteDictData(record.id!, record.label)}
-              className="h-8 px-2 text-red-600 hover:text-red-700"
+              className="h-8 px-2 transition-colors hover:!text-[#1677ff] hover:!underline"
+              style={{ color: '#000000' }}
+              onMouseEnter={(e) => {
+                const target = e.currentTarget as HTMLElement;
+                target.style.setProperty('color', '#1677ff', 'important');
+                target.style.setProperty('text-decoration', 'underline', 'important');
+                const svg = target.querySelector('svg');
+                if (svg) {
+                  svg.style.setProperty('color', '#1677ff', 'important');
+                }
+                const span = target.querySelector('span');
+                if (span) {
+                  span.style.setProperty('color', '#1677ff', 'important');
+                }
+              }}
+              onMouseLeave={(e) => {
+                const target = e.currentTarget as HTMLElement;
+                target.style.setProperty('color', '#000000', 'important');
+                target.style.setProperty('text-decoration', 'none', 'important');
+                const svg = target.querySelector('svg');
+                if (svg) {
+                  svg.style.setProperty('color', '#000000', 'important');
+                }
+                const span = target.querySelector('span');
+                if (span) {
+                  span.style.setProperty('color', '#000000', 'important');
+                }
+              }}
             >
-              <Trash2 className="w-4 h-4" />
+              <Trash2 className="w-4 h-4" style={{ color: '#000000' }} />
               <span className="ml-1">删除</span>
             </UIButton>
           </PermissionWrapper>

+ 44 - 0
src/components/FormManagement.tsx

@@ -599,6 +599,17 @@ export default function FormManagement() {
             icon={<Copy className="w-4 h-4" style={{ color: '#000000' }} />}
             onClick={() => openForm('copy', record.id)}
             style={{ color: '#000000' }}
+            className="transition-colors"
+            onMouseEnter={(e) => {
+              e.currentTarget.style.color = '#1677ff';
+              e.currentTarget.style.textDecoration = 'underline';
+              e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #1677ff');
+            }}
+            onMouseLeave={(e) => {
+              e.currentTarget.style.color = '#000000';
+              e.currentTarget.style.textDecoration = 'none';
+              e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #000000');
+            }}
           >
             复制
           </Button>
@@ -608,6 +619,17 @@ export default function FormManagement() {
             icon={<Edit2 className="w-4 h-4" style={{ color: '#000000' }} />}
             onClick={() => openForm('update', record.id)}
             style={{ color: '#000000' }}
+            className="transition-colors"
+            onMouseEnter={(e) => {
+              e.currentTarget.style.color = '#1677ff';
+              e.currentTarget.style.textDecoration = 'underline';
+              e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #1677ff');
+            }}
+            onMouseLeave={(e) => {
+              e.currentTarget.style.color = '#000000';
+              e.currentTarget.style.textDecoration = 'none';
+              e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #000000');
+            }}
           >
             编辑
           </Button>
@@ -617,6 +639,17 @@ export default function FormManagement() {
             icon={<Eye className="w-4 h-4" style={{ color: '#000000' }} />}
             onClick={() => openDetail(record.id!)}
             style={{ color: '#000000' }}
+            className="transition-colors"
+            onMouseEnter={(e) => {
+              e.currentTarget.style.color = '#1677ff';
+              e.currentTarget.style.textDecoration = 'underline';
+              e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #1677ff');
+            }}
+            onMouseLeave={(e) => {
+              e.currentTarget.style.color = '#000000';
+              e.currentTarget.style.textDecoration = 'none';
+              e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #000000');
+            }}
           >
             预览
           </Button>
@@ -626,6 +659,17 @@ export default function FormManagement() {
             icon={<Trash2 className="w-4 h-4" style={{ color: '#000000' }} />}
             onClick={() => handleDelete(record.id!)}
             style={{ color: '#000000' }}
+            className="transition-colors"
+            onMouseEnter={(e) => {
+              e.currentTarget.style.color = '#1677ff';
+              e.currentTarget.style.textDecoration = 'underline';
+              e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #1677ff');
+            }}
+            onMouseLeave={(e) => {
+              e.currentTarget.style.color = '#000000';
+              e.currentTarget.style.textDecoration = 'none';
+              e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #000000');
+            }}
           >
             删除
           </Button>

+ 104 - 16
src/components/IsolationWork.tsx

@@ -2924,18 +2924,40 @@ export default function IsolationWork({ subMenu }: IsolationWorkProps) {
             variant="ghost"
             size="sm"
             onClick={() => handleEdit(record)}
-            className="h-8 px-2"
+            className="h-8 px-2 transition-colors hover:underline"
+            style={{ color: '#000000' }}
+            onMouseEnter={(e) => {
+              e.currentTarget.style.color = '#1677ff';
+              e.currentTarget.style.textDecoration = 'underline';
+              e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #1677ff');
+            }}
+            onMouseLeave={(e) => {
+              e.currentTarget.style.color = '#000000';
+              e.currentTarget.style.textDecoration = 'none';
+              e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #000000');
+            }}
           >
-            <Edit2 className="w-4 h-4" />
+            <Edit2 className="w-4 h-4" style={{ color: '#000000' }} />
             <span className="ml-1">编辑</span>
           </UIButton>
           <UIButton
             variant="ghost"
             size="sm"
             onClick={() => handleDelete(record.id)}
-            className="h-8 px-2 text-red-600 hover:text-red-700"
+            className="h-8 px-2 transition-colors hover:underline"
+            style={{ color: '#000000' }}
+            onMouseEnter={(e) => {
+              e.currentTarget.style.color = '#1677ff';
+              e.currentTarget.style.textDecoration = 'underline';
+              e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #1677ff');
+            }}
+            onMouseLeave={(e) => {
+              e.currentTarget.style.color = '#000000';
+              e.currentTarget.style.textDecoration = 'none';
+              e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #000000');
+            }}
           >
-            <Trash2 className="w-4 h-4" />
+            <Trash2 className="w-4 h-4" style={{ color: '#000000' }} />
             <span className="ml-1">删除</span>
           </UIButton>
         </div>
@@ -3057,27 +3079,60 @@ export default function IsolationWork({ subMenu }: IsolationWorkProps) {
             variant="ghost"
             size="sm"
             onClick={() => handleDesign(record as any)}
-            className="h-8 px-2"
+            className="h-8 px-2 transition-colors hover:underline"
+            style={{ color: '#000000' }}
+            onMouseEnter={(e) => {
+              e.currentTarget.style.color = '#1677ff';
+              e.currentTarget.style.textDecoration = 'underline';
+              e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #1677ff');
+            }}
+            onMouseLeave={(e) => {
+              e.currentTarget.style.color = '#000000';
+              e.currentTarget.style.textDecoration = 'none';
+              e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #000000');
+            }}
           >
-            <Workflow className="w-4 h-4" />
+            <Workflow className="w-4 h-4" style={{ color: '#000000' }} />
             <span className="ml-1">设计</span>
           </UIButton>
           <UIButton
             variant="ghost"
             size="sm"
             onClick={() => handleEdit(record as any)}
-            className="h-8 px-2"
+            className="h-8 px-2 transition-colors hover:underline"
+            style={{ color: '#000000' }}
+            onMouseEnter={(e) => {
+              e.currentTarget.style.color = '#1677ff';
+              e.currentTarget.style.textDecoration = 'underline';
+              e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #1677ff');
+            }}
+            onMouseLeave={(e) => {
+              e.currentTarget.style.color = '#000000';
+              e.currentTarget.style.textDecoration = 'none';
+              e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #000000');
+            }}
           >
-            <Edit2 className="w-4 h-4" />
+            <Edit2 className="w-4 h-4" style={{ color: '#000000' }} />
             <span className="ml-1">编辑</span>
           </UIButton>
           <UIButton
             variant="ghost"
             size="sm"
             onClick={() => handleDelete(record.id!)}
-            className="h-8 px-2 text-red-600 hover:text-red-700"
+            className="h-8 px-2 transition-colors hover:underline"
+            style={{ color: '#000000' }}
+            onMouseEnter={(e) => {
+              e.currentTarget.style.color = '#1677ff';
+              e.currentTarget.style.textDecoration = 'underline';
+              e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #1677ff');
+            }}
+            onMouseLeave={(e) => {
+              e.currentTarget.style.color = '#000000';
+              e.currentTarget.style.textDecoration = 'none';
+              e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #000000');
+            }}
           >
-            <Trash2 className="w-4 h-4" />
+            <Trash2 className="w-4 h-4" style={{ color: '#000000' }} />
             <span className="ml-1">删除</span>
           </UIButton>
         </div>
@@ -3362,9 +3417,20 @@ export default function IsolationWork({ subMenu }: IsolationWorkProps) {
               e.preventDefault();
               handleWorkJobView(record);
             }}
-            className="h-8 px-2"
+            className="h-8 px-2 transition-colors hover:underline"
+            style={{ color: '#000000' }}
+            onMouseEnter={(e) => {
+              e.currentTarget.style.color = '#1677ff';
+              e.currentTarget.style.textDecoration = 'underline';
+              e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #1677ff');
+            }}
+            onMouseLeave={(e) => {
+              e.currentTarget.style.color = '#000000';
+              e.currentTarget.style.textDecoration = 'none';
+              e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #000000');
+            }}
           >
-            <Eye className="w-4 h-4" />
+            <Eye className="w-4 h-4" style={{ color: '#000000' }} />
             <span className="ml-1">查看</span>
           </UIButton>
             {canEdit ? (
@@ -3372,9 +3438,20 @@ export default function IsolationWork({ subMenu }: IsolationWorkProps) {
             variant="ghost"
             size="sm"
             onClick={() => handleWorkJobEdit(record)}
-            className="h-8 px-2"
+            className="h-8 px-2 transition-colors hover:underline"
+            style={{ color: '#000000' }}
+            onMouseEnter={(e) => {
+              e.currentTarget.style.color = '#1677ff';
+              e.currentTarget.style.textDecoration = 'underline';
+              e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #1677ff');
+            }}
+            onMouseLeave={(e) => {
+              e.currentTarget.style.color = '#000000';
+              e.currentTarget.style.textDecoration = 'none';
+              e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #000000');
+            }}
           >
-            <Edit2 className="w-4 h-4" />
+            <Edit2 className="w-4 h-4" style={{ color: '#000000' }} />
             <span className="ml-1">编辑</span>
           </UIButton>
             ) : (
@@ -3393,9 +3470,20 @@ export default function IsolationWork({ subMenu }: IsolationWorkProps) {
             variant="ghost"
             size="sm"
             onClick={() => handleWorkJobDelete(record.id!)}
-            className="h-8 px-2 text-red-600 hover:text-red-700"
+            className="h-8 px-2 transition-colors hover:underline"
+            style={{ color: '#000000' }}
+            onMouseEnter={(e) => {
+              e.currentTarget.style.color = '#1677ff';
+              e.currentTarget.style.textDecoration = 'underline';
+              e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #1677ff');
+            }}
+            onMouseLeave={(e) => {
+              e.currentTarget.style.color = '#000000';
+              e.currentTarget.style.textDecoration = 'none';
+              e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #000000');
+            }}
           >
-            <Trash2 className="w-4 h-4" />
+            <Trash2 className="w-4 h-4" style={{ color: '#000000' }} />
             <span className="ml-1">删除</span>
           </UIButton>
         </div>

+ 26 - 4
src/components/KeyManagement.tsx

@@ -218,9 +218,20 @@ export default function KeyManagement({ subMenu }: KeyManagementProps) {
               variant="ghost"
               size="sm"
               onClick={() => openKeyForm('update', record.keyId || record.id)}
-              className="h-8 px-2"
+              className="h-8 px-2 transition-colors hover:underline"
+              style={{ color: '#000000' }}
+              onMouseEnter={(e) => {
+                e.currentTarget.style.color = '#1677ff';
+                e.currentTarget.style.textDecoration = 'underline';
+                e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #1677ff');
+              }}
+              onMouseLeave={(e) => {
+                e.currentTarget.style.color = '#000000';
+                e.currentTarget.style.textDecoration = 'none';
+                e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #000000');
+              }}
             >
-              <Edit2 className="w-4 h-4" />
+              <Edit2 className="w-4 h-4" style={{ color: '#000000' }} />
               <span className="ml-1">编辑</span>
             </UIButton>
           </PermissionWrapper>
@@ -229,9 +240,20 @@ export default function KeyManagement({ subMenu }: KeyManagementProps) {
               variant="ghost"
               size="sm"
               onClick={() => handleDelete(record.keyId || record.id)}
-              className="h-8 px-2 text-red-600 hover:text-red-700"
+              className="h-8 px-2 transition-colors hover:underline"
+              style={{ color: '#000000' }}
+              onMouseEnter={(e) => {
+                e.currentTarget.style.color = '#1677ff';
+                e.currentTarget.style.textDecoration = 'underline';
+                e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #1677ff');
+              }}
+              onMouseLeave={(e) => {
+                e.currentTarget.style.color = '#000000';
+                e.currentTarget.style.textDecoration = 'none';
+                e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #000000');
+              }}
             >
-              <Trash2 className="w-4 h-4" />
+              <Trash2 className="w-4 h-4" style={{ color: '#000000' }} />
               <span className="ml-1">删除</span>
             </UIButton>
           </PermissionWrapper>

+ 39 - 6
src/components/LocationManagement.tsx

@@ -283,27 +283,60 @@ export default function LocationManagement() {
                           // 查看详情功能
                           console.log('查看点位详情:', row);
                         }}
-                        className="h-8 px-2"
+                        className="h-8 px-2 transition-colors hover:underline"
+                        style={{ color: '#000000' }}
+                        onMouseEnter={(e) => {
+                          e.currentTarget.style.color = '#1677ff';
+                          e.currentTarget.style.textDecoration = 'underline';
+                          e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #1677ff');
+                        }}
+                        onMouseLeave={(e) => {
+                          e.currentTarget.style.color = '#000000';
+                          e.currentTarget.style.textDecoration = 'none';
+                          e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #000000');
+                        }}
                       >
-                        <Eye className="w-4 h-4" />
+                        <Eye className="w-4 h-4" style={{ color: '#000000' }} />
                         <span className="ml-1">查看</span>
                       </UIButton>
                       <UIButton
                         variant="ghost"
                         size="sm"
                         onClick={() => handleEdit(row)}
-                        className="h-8 px-2"
+                        className="h-8 px-2 transition-colors hover:underline"
+                        style={{ color: '#000000' }}
+                        onMouseEnter={(e) => {
+                          e.currentTarget.style.color = '#1677ff';
+                          e.currentTarget.style.textDecoration = 'underline';
+                          e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #1677ff');
+                        }}
+                        onMouseLeave={(e) => {
+                          e.currentTarget.style.color = '#000000';
+                          e.currentTarget.style.textDecoration = 'none';
+                          e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #000000');
+                        }}
                       >
-                        <Edit2 className="w-4 h-4" />
+                        <Edit2 className="w-4 h-4" style={{ color: '#000000' }} />
                         <span className="ml-1">编辑</span>
                       </UIButton>
                       <UIButton
                         variant="ghost"
                         size="sm"
                         onClick={() => handleDelete(row.id)}
-                        className="h-8 px-2 text-red-600 hover:text-red-700"
+                        className="h-8 px-2 transition-colors hover:underline"
+                        style={{ color: '#000000' }}
+                        onMouseEnter={(e) => {
+                          e.currentTarget.style.color = '#1677ff';
+                          e.currentTarget.style.textDecoration = 'underline';
+                          e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #1677ff');
+                        }}
+                        onMouseLeave={(e) => {
+                          e.currentTarget.style.color = '#000000';
+                          e.currentTarget.style.textDecoration = 'none';
+                          e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #000000');
+                        }}
                       >
-                        <Trash2 className="w-4 h-4" />
+                        <Trash2 className="w-4 h-4" style={{ color: '#000000' }} />
                         <span className="ml-1">删除</span>
                       </UIButton>
                     </div>

+ 33 - 6
src/components/MenuManagement.tsx

@@ -420,9 +420,18 @@ export default function MenuManagement() {
                   variant="ghost"
                   size="sm"
               onClick={() => openForm('update', record.id)}
-                  className="h-8 px-2"
+                  className="h-8 px-2 transition-colors hover:underline"
+                  style={{ color: '#000000' }}
+                  onMouseEnter={(e) => {
+                    e.currentTarget.style.color = '#1677ff';
+                    e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #1677ff');
+                  }}
+                  onMouseLeave={(e) => {
+                    e.currentTarget.style.color = '#000000';
+                    e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #000000');
+                  }}
                 >
-                  <Edit2 className="w-4 h-4" />
+                  <Edit2 className="w-4 h-4" style={{ color: '#000000' }} />
                   <span className="ml-1">编辑</span>
                 </UIButton>
               </PermissionWrapper>
@@ -431,9 +440,18 @@ export default function MenuManagement() {
                   variant="ghost"
                   size="sm"
               onClick={() => openForm('create', undefined, record.id)}
-                  className="h-8 px-2"
+                  className="h-8 px-2 transition-colors hover:underline"
+                  style={{ color: '#000000' }}
+                  onMouseEnter={(e) => {
+                    e.currentTarget.style.color = '#1677ff';
+                    e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #1677ff');
+                  }}
+                  onMouseLeave={(e) => {
+                    e.currentTarget.style.color = '#000000';
+                    e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #000000');
+                  }}
                 >
-                  <Plus className="w-4 h-4" />
+                  <Plus className="w-4 h-4" style={{ color: '#000000' }} />
                   <span className="ml-1">新增</span>
                 </UIButton>
               </PermissionWrapper>
@@ -442,9 +460,18 @@ export default function MenuManagement() {
                   variant="ghost"
                   size="sm"
               onClick={() => handleDelete(record.id!, record.name)}
-                  className="h-8 px-2 text-red-600 hover:text-red-700"
+                  className="h-8 px-2 transition-colors hover:underline"
+                  style={{ color: '#000000' }}
+                  onMouseEnter={(e) => {
+                    e.currentTarget.style.color = '#1677ff';
+                    e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #1677ff');
+                  }}
+                  onMouseLeave={(e) => {
+                    e.currentTarget.style.color = '#000000';
+                    e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #000000');
+                  }}
                 >
-                  <Trash2 className="w-4 h-4" />
+                  <Trash2 className="w-4 h-4" style={{ color: '#000000' }} />
                   <span className="ml-1">删除</span>
                 </UIButton>
               </PermissionWrapper>

+ 1 - 0
src/components/MyTask.tsx

@@ -1695,6 +1695,7 @@ export default function MyTask() {
                 e.preventDefault();
                 handleViewDetail(record);
               }}
+              className="transition-colors hover:text-[#1677ff] hover:underline"
             >
               {buttonText}
             </Button>

+ 65 - 10
src/components/PadLockManagement.tsx

@@ -416,9 +416,20 @@ export default function PadLockManagement({ subMenu }: PadLockManagementProps) {
               variant="ghost"
               size="sm"
               onClick={() => openPadLockForm('update', record.lockId || record.id)}
-              className="h-8 px-2"
+              className="h-8 px-2 transition-colors hover:underline"
+              style={{ color: '#000000' }}
+              onMouseEnter={(e) => {
+                e.currentTarget.style.color = '#1677ff';
+                e.currentTarget.style.textDecoration = 'underline';
+                e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #1677ff');
+              }}
+              onMouseLeave={(e) => {
+                e.currentTarget.style.color = '#000000';
+                e.currentTarget.style.textDecoration = 'none';
+                e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #000000');
+              }}
             >
-              <Edit2 className="w-4 h-4" />
+              <Edit2 className="w-4 h-4" style={{ color: '#000000' }} />
               <span className="ml-1">编辑</span>
             </UIButton>
           </PermissionWrapper>
@@ -427,9 +438,20 @@ export default function PadLockManagement({ subMenu }: PadLockManagementProps) {
               variant="ghost"
               size="sm"
               onClick={() => handleDelete(record.lockId || record.id)}
-              className="h-8 px-2 text-red-600 hover:text-red-700"
+              className="h-8 px-2 transition-colors hover:underline"
+              style={{ color: '#000000' }}
+              onMouseEnter={(e) => {
+                e.currentTarget.style.color = '#1677ff';
+                e.currentTarget.style.textDecoration = 'underline';
+                e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #1677ff');
+              }}
+              onMouseLeave={(e) => {
+                e.currentTarget.style.color = '#000000';
+                e.currentTarget.style.textDecoration = 'none';
+                e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #000000');
+              }}
             >
-              <Trash2 className="w-4 h-4" />
+              <Trash2 className="w-4 h-4" style={{ color: '#000000' }} />
               <span className="ml-1">删除</span>
             </UIButton>
           </PermissionWrapper>
@@ -507,9 +529,20 @@ export default function PadLockManagement({ subMenu }: PadLockManagementProps) {
               variant="ghost"
               size="sm"
               onClick={() => openTypeForm('update', record.lockTypeId || record.id)}
-              className="h-8 px-2"
+              className="h-8 px-2 transition-colors hover:underline"
+              style={{ color: '#000000' }}
+              onMouseEnter={(e) => {
+                e.currentTarget.style.color = '#1677ff';
+                e.currentTarget.style.textDecoration = 'underline';
+                e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #1677ff');
+              }}
+              onMouseLeave={(e) => {
+                e.currentTarget.style.color = '#000000';
+                e.currentTarget.style.textDecoration = 'none';
+                e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #000000');
+              }}
             >
-              <Edit2 className="w-4 h-4" />
+              <Edit2 className="w-4 h-4" style={{ color: '#000000' }} />
               <span className="ml-1">修改</span>
             </UIButton>
           </PermissionWrapper>
@@ -517,9 +550,20 @@ export default function PadLockManagement({ subMenu }: PadLockManagementProps) {
             variant="ghost"
             size="sm"
             onClick={() => openTypeForm('create', undefined, record.lockTypeId || record.id)}
-            className="h-8 px-2"
+            className="h-8 px-2 transition-colors hover:underline"
+            style={{ color: '#000000' }}
+            onMouseEnter={(e) => {
+              e.currentTarget.style.color = '#1677ff';
+              e.currentTarget.style.textDecoration = 'underline';
+              e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #1677ff');
+            }}
+            onMouseLeave={(e) => {
+              e.currentTarget.style.color = '#000000';
+              e.currentTarget.style.textDecoration = 'none';
+              e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #000000');
+            }}
           >
-            <Plus className="w-4 h-4" />
+            <Plus className="w-4 h-4" style={{ color: '#000000' }} />
             <span className="ml-1">新增</span>
           </UIButton>
           {record.parentTypeId !== 0 && (
@@ -527,9 +571,20 @@ export default function PadLockManagement({ subMenu }: PadLockManagementProps) {
               variant="ghost"
               size="sm"
               onClick={() => handleDeleteType(record.lockTypeId || record.id!, record.lockTypeName)}
-              className="h-8 px-2 text-red-600 hover:text-red-700"
+              className="h-8 px-2 transition-colors hover:underline"
+              style={{ color: '#000000' }}
+              onMouseEnter={(e) => {
+                e.currentTarget.style.color = '#1677ff';
+                e.currentTarget.style.textDecoration = 'underline';
+                e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #1677ff');
+              }}
+              onMouseLeave={(e) => {
+                e.currentTarget.style.color = '#000000';
+                e.currentTarget.style.textDecoration = 'none';
+                e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #000000');
+              }}
             >
-              <Trash2 className="w-4 h-4" />
+              <Trash2 className="w-4 h-4" style={{ color: '#000000' }} />
               <span className="ml-1">删除</span>
             </UIButton>
           )}

+ 22 - 4
src/components/PostManagement.tsx

@@ -366,9 +366,18 @@ export default function PostManagement() {
                           variant="ghost"
                           size="sm"
                           onClick={() => openForm('update', row.id)}
-                          className="h-8 px-2"
+                          className="h-8 px-2 transition-colors hover:underline"
+                          style={{ color: '#000000' }}
+                          onMouseEnter={(e) => {
+                            e.currentTarget.style.color = '#1677ff';
+                            e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #1677ff');
+                          }}
+                          onMouseLeave={(e) => {
+                            e.currentTarget.style.color = '#000000';
+                            e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #000000');
+                          }}
                         >
-                          <Edit2 className="w-4 h-4" />
+                          <Edit2 className="w-4 h-4" style={{ color: '#000000' }} />
                           <span className="ml-1">编辑</span>
                         </UIButton>
                       </PermissionWrapper>
@@ -377,9 +386,18 @@ export default function PostManagement() {
                           variant="ghost"
                           size="sm"
                           onClick={() => handleDelete(row.id!, row.name)}
-                          className="h-8 px-2 text-red-600 hover:text-red-700"
+                          className="h-8 px-2 transition-colors hover:underline"
+                          style={{ color: '#000000' }}
+                          onMouseEnter={(e) => {
+                            e.currentTarget.style.color = '#1677ff';
+                            e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #1677ff');
+                          }}
+                          onMouseLeave={(e) => {
+                            e.currentTarget.style.color = '#000000';
+                            e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #000000');
+                          }}
                         >
-                          <Trash2 className="w-4 h-4" />
+                          <Trash2 className="w-4 h-4" style={{ color: '#000000' }} />
                           <span className="ml-1">删除</span>
                         </UIButton>
                       </PermissionWrapper>

+ 44 - 8
src/components/RoleManagement.tsx

@@ -355,9 +355,18 @@ export default function RoleManagement() {
                           variant="ghost"
                           size="sm"
                           onClick={() => openForm('update', row.id)}
-                          className="h-8 px-2"
+                          className="h-8 px-2 transition-colors hover:underline"
+                          style={{ color: '#000000' }}
+                          onMouseEnter={(e) => {
+                            e.currentTarget.style.color = '#1677ff';
+                            e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #1677ff');
+                          }}
+                          onMouseLeave={(e) => {
+                            e.currentTarget.style.color = '#000000';
+                            e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #000000');
+                          }}
                         >
-                          <Edit2 className="w-4 h-4" />
+                          <Edit2 className="w-4 h-4" style={{ color: '#000000' }} />
                           <span className="ml-1">编辑</span>
                         </UIButton>
                       </PermissionWrapper>
@@ -366,9 +375,18 @@ export default function RoleManagement() {
                           variant="ghost"
                           size="sm"
                           onClick={() => openAssignMenuForm(row)}
-                          className="h-8 px-2"
+                          className="h-8 px-2 transition-colors hover:underline"
+                          style={{ color: '#000000' }}
+                          onMouseEnter={(e) => {
+                            e.currentTarget.style.color = '#1677ff';
+                            e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #1677ff');
+                          }}
+                          onMouseLeave={(e) => {
+                            e.currentTarget.style.color = '#000000';
+                            e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #000000');
+                          }}
                         >
-                          <Settings className="w-4 h-4" />
+                          <Settings className="w-4 h-4" style={{ color: '#000000' }} />
                           <span className="ml-1">菜单权限</span>
                         </UIButton>
                       </PermissionWrapper>
@@ -377,9 +395,18 @@ export default function RoleManagement() {
                           variant="ghost"
                           size="sm"
                           onClick={() => openDataPermissionForm(row)}
-                          className="h-8 px-2"
+                          className="h-8 px-2 transition-colors hover:underline"
+                          style={{ color: '#000000' }}
+                          onMouseEnter={(e) => {
+                            e.currentTarget.style.color = '#1677ff';
+                            e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #1677ff');
+                          }}
+                          onMouseLeave={(e) => {
+                            e.currentTarget.style.color = '#000000';
+                            e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #000000');
+                          }}
                         >
-                          <Shield className="w-4 h-4" />
+                          <Shield className="w-4 h-4" style={{ color: '#000000' }} />
                           <span className="ml-1">数据权限</span>
                         </UIButton>
                       </PermissionWrapper>
@@ -388,9 +415,18 @@ export default function RoleManagement() {
                           variant="ghost"
                           size="sm"
                           onClick={() => handleDelete(row.id!, row.name)}
-                          className="h-8 px-2 text-red-600 hover:text-red-700"
+                          className="h-8 px-2 transition-colors hover:underline"
+                          style={{ color: '#000000' }}
+                          onMouseEnter={(e) => {
+                            e.currentTarget.style.color = '#1677ff';
+                            e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #1677ff');
+                          }}
+                          onMouseLeave={(e) => {
+                            e.currentTarget.style.color = '#000000';
+                            e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #000000');
+                          }}
                         >
-                          <Trash2 className="w-4 h-4" />
+                          <Trash2 className="w-4 h-4" style={{ color: '#000000' }} />
                           <span className="ml-1">删除</span>
                         </UIButton>
                       </PermissionWrapper>

+ 26 - 4
src/components/SegregationPointManagement.tsx

@@ -281,9 +281,20 @@ export default function SegregationPointManagement({ subMenu }: SegregationPoint
               variant="ghost"
               size="sm"
               onClick={() => openForm('update', record.pointId)}
-              className="h-8 px-2"
+              className="h-8 px-2 transition-colors hover:underline"
+              style={{ color: '#000000' }}
+              onMouseEnter={(e) => {
+                e.currentTarget.style.color = '#1677ff';
+                e.currentTarget.style.textDecoration = 'underline';
+                e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #1677ff');
+              }}
+              onMouseLeave={(e) => {
+                e.currentTarget.style.color = '#000000';
+                e.currentTarget.style.textDecoration = 'none';
+                e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #000000');
+              }}
             >
-              <Edit2 className="w-4 h-4" />
+              <Edit2 className="w-4 h-4" style={{ color: '#000000' }} />
               <span className="ml-1">编辑</span>
             </UIButton>
           </PermissionWrapper>
@@ -292,9 +303,20 @@ export default function SegregationPointManagement({ subMenu }: SegregationPoint
               variant="ghost"
               size="sm"
               onClick={() => handleDelete(record.pointId)}
-              className="h-8 px-2 text-red-600 hover:text-red-700"
+              className="h-8 px-2 transition-colors hover:underline"
+              style={{ color: '#000000' }}
+              onMouseEnter={(e) => {
+                e.currentTarget.style.color = '#1677ff';
+                e.currentTarget.style.textDecoration = 'underline';
+                e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #1677ff');
+              }}
+              onMouseLeave={(e) => {
+                e.currentTarget.style.color = '#000000';
+                e.currentTarget.style.textDecoration = 'none';
+                e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #000000');
+              }}
             >
-              <Trash2 className="w-4 h-4" />
+              <Trash2 className="w-4 h-4" style={{ color: '#000000' }} />
               <span className="ml-1">删除</span>
             </UIButton>
           </PermissionWrapper>

+ 1 - 0
src/components/TaskManagement.tsx

@@ -1694,6 +1694,7 @@ export default function TaskManagement() {
                 e.preventDefault();
                 handleViewDetail(record);
               }}
+              className="transition-colors hover:text-[#1677ff] hover:underline"
             >
               {buttonText}
             </Button>

+ 40 - 5
src/components/UserManagement.tsx

@@ -413,9 +413,20 @@ export default function UserManagement({ subMenu }: UserManagementProps) {
                 variant="ghost"
                 size="sm"
                 onClick={() => openForm('update', record.id)}
-                className="h-8 px-2"
+                className="h-8 px-2 transition-colors hover:underline"
+                style={{ color: '#000000' }}
+                onMouseEnter={(e) => {
+                  e.currentTarget.style.color = '#1677ff';
+                  e.currentTarget.style.textDecoration = 'underline';
+                  e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #1677ff');
+                }}
+                onMouseLeave={(e) => {
+                  e.currentTarget.style.color = '#000000';
+                  e.currentTarget.style.textDecoration = 'none';
+                  e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #000000');
+                }}
               >
-                <Edit2 className="w-4 h-4" />
+                <Edit2 className="w-4 h-4" style={{ color: '#000000' }} />
                 <span className="ml-1">编辑</span>
               </UIButton>
             </PermissionWrapper>
@@ -439,12 +450,36 @@ export default function UserManagement({ subMenu }: UserManagementProps) {
                   gap: '4px',
                   padding: '4px 8px',
                   cursor: 'pointer',
-                  color: 'inherit',
+                  color: '#000000',
                   textDecoration: 'none'
                 }}
+                onMouseEnter={(e) => {
+                  e.currentTarget.style.color = '#1677ff';
+                  e.currentTarget.style.textDecoration = 'underline';
+                  const svg = e.currentTarget.querySelector('svg');
+                  if (svg) {
+                    svg.setAttribute('style', 'color: #1677ff');
+                  }
+                  const span = e.currentTarget.querySelector('span');
+                  if (span) {
+                    span.setAttribute('style', 'color: #1677ff');
+                  }
+                }}
+                onMouseLeave={(e) => {
+                  e.currentTarget.style.color = '#000000';
+                  e.currentTarget.style.textDecoration = 'none';
+                  const svg = e.currentTarget.querySelector('svg');
+                  if (svg) {
+                    svg.setAttribute('style', 'color: #000000');
+                  }
+                  const span = e.currentTarget.querySelector('span');
+                  if (span) {
+                    span.setAttribute('style', 'color: #000000');
+                  }
+                }}
               >
-                <MoreVertical className="w-4 h-4" />
-                <span>更多</span>
+                <MoreVertical className="w-4 h-4" style={{ color: '#000000' }} />
+                <span style={{ color: '#000000' }}>更多</span>
               </a>
               </Dropdown>
             )}

+ 13 - 2
src/components/lockCabinet/HardwareLockCabinetManagement.tsx

@@ -358,9 +358,20 @@ export default function HardwareLockCabinetManagement() {
                   variant="ghost"
                   size="sm"
                   onClick={() => lookDetail(record)}
-                  className="h-8 px-2"
+                  className="h-8 px-2 transition-colors hover:underline"
+                  style={{ color: '#000000' }}
+                  onMouseEnter={(e) => {
+                    e.currentTarget.style.color = '#1677ff';
+                    e.currentTarget.style.textDecoration = 'underline';
+                    e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #1677ff');
+                  }}
+                  onMouseLeave={(e) => {
+                    e.currentTarget.style.color = '#000000';
+                    e.currentTarget.style.textDecoration = 'none';
+                    e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #000000');
+                  }}
                 >
-                  <Eye className="w-4 h-4" />
+                  <Eye className="w-4 h-4" style={{ color: '#000000' }} />
                   <span className="ml-1">查看</span>
                 </Button>
               ),

+ 22 - 4
src/components/lockCabinet/SystemLockCabinetManagement.tsx

@@ -449,9 +449,18 @@ export default function SystemLockCabinetManagement() {
                       variant="ghost"
                       size="sm"
                       onClick={() => openForm('update', record.cabinetId || (record as any).id)}
-                      className="h-8 px-2"
+                      className="h-8 px-2 transition-colors hover:underline"
+                      style={{ color: '#000000' }}
+                      onMouseEnter={(e) => {
+                        e.currentTarget.style.color = '#1677ff';
+                        e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #1677ff');
+                      }}
+                      onMouseLeave={(e) => {
+                        e.currentTarget.style.color = '#000000';
+                        e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #000000');
+                      }}
                     >
-                      <Edit2 className="w-4 h-4" />
+                      <Edit2 className="w-4 h-4" style={{ color: '#000000' }} />
                       <span className="ml-1">编辑</span>
                     </Button>
                   </PermissionWrapper>
@@ -460,9 +469,18 @@ export default function SystemLockCabinetManagement() {
                       variant="ghost"
                       size="sm"
                       onClick={() => handleDelete(record.cabinetId || (record as any).id)}
-                      className="h-8 px-2 text-red-600 hover:text-red-700"
+                      className="h-8 px-2 transition-colors hover:underline"
+                      style={{ color: '#000000' }}
+                      onMouseEnter={(e) => {
+                        e.currentTarget.style.color = '#1677ff';
+                        e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #1677ff');
+                      }}
+                      onMouseLeave={(e) => {
+                        e.currentTarget.style.color = '#000000';
+                        e.currentTarget.querySelector('svg')?.setAttribute('style', 'color: #000000');
+                      }}
                     >
-                      <Trash2 className="w-4 h-4" />
+                      <Trash2 className="w-4 h-4" style={{ color: '#000000' }} />
                       <span className="ml-1">删除</span>
                     </Button>
                   </PermissionWrapper>

+ 3 - 3
src/components/mailTemplate/MailTemplateManagement.tsx

@@ -158,7 +158,7 @@ export default function MailTemplateManagement(props: MailTemplateManagementProp
               variant="ghost"
               size="sm"
               onClick={() => openSendForm(record.id!)}
-              className="h-8 px-2"
+              className="h-8 px-2 transition-colors hover:text-[#1677ff] hover:underline"
             >
               <Search className="w-4 h-4" />
               <span className="ml-1">测试</span>
@@ -167,7 +167,7 @@ export default function MailTemplateManagement(props: MailTemplateManagementProp
               variant="ghost"
               size="sm"
               onClick={() => openForm('update', record.id)}
-              className="h-8 px-2"
+              className="h-8 px-2 transition-colors hover:text-[#1677ff] hover:underline"
             >
               <Edit2 className="w-4 h-4" />
               <span className="ml-1">编辑</span>
@@ -176,7 +176,7 @@ export default function MailTemplateManagement(props: MailTemplateManagementProp
               variant="ghost"
               size="sm"
               onClick={() => handleDelete(record.id!)}
-              className="h-8 px-2 text-red-600 hover:text-red-700"
+              className="h-8 px-2 text-red-600 hover:text-[#1677ff] transition-colors hover:underline"
             >
               <Trash2 className="w-4 h-4" />
               <span className="ml-1">删除</span>

+ 2 - 2
src/components/notification/EmailNotifyManagement.tsx

@@ -187,7 +187,7 @@ export default function EmailNotifyManagement() {
               variant="ghost"
               size="sm"
               onClick={() => openForm('update', record.configId)}
-              className="h-8 px-2"
+              className="h-8 px-2 transition-colors hover:text-[#1677ff] hover:underline"
             >
               <Edit2 className="w-4 h-4" />
               <span className="ml-1">编辑</span>
@@ -196,7 +196,7 @@ export default function EmailNotifyManagement() {
               variant="ghost"
               size="sm"
               onClick={() => handleDelete(record.configId!)}
-              className="h-8 px-2 text-red-600 hover:text-red-700"
+              className="h-8 px-2 text-red-600 hover:text-[#1677ff] transition-colors hover:underline"
             >
               <Trash2 className="w-4 h-4" />
               <span className="ml-1">删除</span>

+ 44 - 7
src/styles/globals.css

@@ -215,7 +215,7 @@ table tbody td [data-slot="button"] {
   transition: color 0.2s ease, background-color 0.2s ease, border-color 0.2s ease !important;
 }
 
-/* 表格操作列按钮 hover 效果 - 变为蓝色(Ant Design 主蓝色 #1890ff) */
+/* 表格操作列按钮 hover 效果 - 蓝色文字和下划线(无背景色) */
 /* 使用最高优先级覆盖按钮组件的默认 hover 样式,包括 Tailwind 的 hover 类 */
 /* 直接覆盖所有可能的 hover 类,使用更简单的选择器 */
 table td button[data-slot="button"]:hover:not(:disabled):not([class*="text-red"]),
@@ -226,16 +226,16 @@ tbody td button[data-slot="button"]:hover:not(:disabled):not([class*="text-red"]
 tbody td [data-slot="button"]:hover:not(:disabled):not([class*="text-red"]),
 table tbody td button[data-slot="button"]:hover:not(:disabled):not([class*="text-red"]),
 table tbody td [data-slot="button"]:hover:not(:disabled):not([class*="text-red"]) {
-  color: #1890ff !important; /* Ant Design 主蓝色 */
-  background-color: rgba(24, 144, 255, 0.06) !important;
+  color: #1677ff !important;
+  text-decoration: underline !important;
 }
 
 /* 额外规则:确保覆盖所有包含 hover 类的按钮 */
 table td button:hover:not(:disabled):not([class*="text-red"]):not([class*="ant-btn-primary"]):not([class*="ant-btn-danger"]),
 td[data-slot="table-cell"] button:hover:not(:disabled):not([class*="text-red"]):not([class*="ant-btn-primary"]):not([class*="ant-btn-danger"]),
 tbody td button:hover:not(:disabled):not([class*="text-red"]):not([class*="ant-btn-primary"]):not([class*="ant-btn-danger"]) {
-  color: #1890ff !important;
-  background-color: rgba(24, 144, 255, 0.06) !important;
+  color: #1677ff !important;
+  text-decoration: underline !important;
 }
 
 /* 针对普通 button 标签 */
@@ -243,8 +243,8 @@ table td button:not([data-slot]):hover:not(:disabled):not([class*="text-red"]):n
 td[data-slot="table-cell"] button:not([data-slot]):hover:not(:disabled):not([class*="text-red"]):not([class*="ant-btn-primary"]):not([class*="ant-btn-danger"]),
 tbody td button:not([data-slot]):hover:not(:disabled):not([class*="text-red"]):not([class*="ant-btn-primary"]):not([class*="ant-btn-danger"]),
 table tbody td button:not([data-slot]):hover:not(:disabled):not([class*="text-red"]):not([class*="ant-btn-primary"]):not([class*="ant-btn-danger"]) {
-  color: #1890ff !important;
-  background-color: rgba(24, 144, 255, 0.06) !important;
+  color: #1677ff !important;
+  text-decoration: underline !important;
 }
 
 /* 针对 Ant Design Button 组件 */
@@ -258,6 +258,43 @@ tbody td .ant-btn-link:hover:not(:disabled) {
   border-color: #1890ff !important;
 }
 
+/* 表格操作列按钮 hover 效果 - 蓝色文字和下划线(无背景色) */
+table td button[data-slot="button"]:hover:not(:disabled):not([class*="text-red"]),
+table td [data-slot="button"]:hover:not(:disabled):not([class*="text-red"]),
+td[data-slot="table-cell"] button[data-slot="button"]:hover:not(:disabled):not([class*="text-red"]),
+td[data-slot="table-cell"] [data-slot="button"]:hover:not(:disabled):not([class*="text-red"]),
+tbody td button[data-slot="button"]:hover:not(:disabled):not([class*="text-red"]),
+tbody td [data-slot="button"]:hover:not(:disabled):not([class*="text-red"]),
+table tbody td button[data-slot="button"]:hover:not(:disabled):not([class*="text-red"]),
+table tbody td [data-slot="button"]:hover:not(:disabled):not([class*="text-red"]) {
+  color: #1677ff !important;
+  text-decoration: underline !important;
+}
+
+/* 表格操作列按钮内的 SVG 图标 hover 效果 */
+table td button[data-slot="button"]:hover:not(:disabled):not([class*="text-red"]) svg,
+table td [data-slot="button"]:hover:not(:disabled):not([class*="text-red"]) svg,
+td[data-slot="table-cell"] button[data-slot="button"]:hover:not(:disabled):not([class*="text-red"]) svg,
+td[data-slot="table-cell"] [data-slot="button"]:hover:not(:disabled):not([class*="text-red"]) svg,
+tbody td button[data-slot="button"]:hover:not(:disabled):not([class*="text-red"]) svg,
+tbody td [data-slot="button"]:hover:not(:disabled):not([class*="text-red"]) svg,
+table tbody td button[data-slot="button"]:hover:not(:disabled):not([class*="text-red"]) svg,
+table tbody td [data-slot="button"]:hover:not(:disabled):not([class*="text-red"]) svg {
+  color: #1677ff !important;
+}
+
+/* 表格操作列按钮内的文字 span hover 效果 */
+table td button[data-slot="button"]:hover:not(:disabled):not([class*="text-red"]) span,
+table td [data-slot="button"]:hover:not(:disabled):not([class*="text-red"]) span,
+td[data-slot="table-cell"] button[data-slot="button"]:hover:not(:disabled):not([class*="text-red"]) span,
+td[data-slot="table-cell"] [data-slot="button"]:hover:not(:disabled):not([class*="text-red"]) span,
+tbody td button[data-slot="button"]:hover:not(:disabled):not([class*="text-red"]) span,
+tbody td [data-slot="button"]:hover:not(:disabled):not([class*="text-red"]) span,
+table tbody td button[data-slot="button"]:hover:not(:disabled):not([class*="text-red"]) span,
+table tbody td [data-slot="button"]:hover:not(:disabled):not([class*="text-red"]) span {
+  color: #1677ff !important;
+}
+
 /* 针对删除按钮 - 保持红色,但添加背景色 */
 /* 使用最高优先级覆盖 hover:text-red-700 等 Tailwind 类 */
 table td button[class*="text-red"]:hover:not(:disabled),