fix(push): 移除点击复制服务器名称

名称点击恢复为与卡片/行一致的勾选行为。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Nexus Agent
2026-06-12 01:51:39 +08:00
parent 989b17902b
commit 724375c884
3 changed files with 65 additions and 28 deletions
@@ -0,0 +1,33 @@
# 审计 — 推送页移除点击复制名称
**Changelog**: `docs/changelog/2026-06-12-push-remove-name-copy.md`
## 范围(文件清单)
| 文件 | 变更 |
|------|------|
| `frontend/src/components/push/PushServerGrid.vue` | 移除名称点击复制 |
## Step 3 规则扫描
| H | 规则 | 结论 |
|---|------|------|
| H1 | 安全 | PASS — 无新 API |
| H2 | 无静默吞错 | PASS |
| H3 | 无新密钥 | PASS |
| H4 | CUD | N/A |
## Closure
| H | 判定 | 依据 |
|---|------|------|
| H1H4 | PASS | 纯前端交互回退 |
## DoD
- [x] type-check
- [ ] 生产 `#/push` 验证
## 验证
点击名称仅勾选服务器,无复制 toast。
@@ -0,0 +1,29 @@
# 推送页移除点击复制名称
**日期**2026-06-12
## 动机
用户不需要点击服务器名称复制到剪贴板;点击应仅用于勾选服务器。
## 变更
- 移除卡片/列表视图中名称的 `@click.stop` 与剪贴板写入
- 移除 `push-server-copy-name` 样式(copy 光标、虚线下划线)
- 保留悬停 `title` 展示完整名称(卡片含域名)
## 涉及文件
- `frontend/src/components/push/PushServerGrid.vue`
## 验证
```bash
cd frontend && npm run type-check
```
推送页:点击名称与卡片其他区域一样切换勾选;无复制 toast。
## 迁移
无。仅前端构建部署。
@@ -78,9 +78,8 @@
<div class="d-flex align-center ga-2 min-w-0">
<v-icon :color="serverOnlineColor(s.is_online)" size="12" class="flex-shrink-0">mdi-circle</v-icon>
<span
class="text-body-2 font-weight-medium push-server-card__name push-server-copy-name"
:title="`${serverLabelTitle(s)}\n点击复制名称`"
@click.stop="copyServerName(s.name)"
class="text-body-2 font-weight-medium push-server-card__name"
:title="serverLabelTitle(s)"
>{{ s.name }}</span>
</div>
<div
@@ -140,11 +139,7 @@
<v-icon :color="serverOnlineColor(s.is_online)" size="12">mdi-circle</v-icon>
</td>
<td class="push-server-list__name-cell">
<span
class="push-server-copy-name"
:title="`${s.name}\n点击复制名称`"
@click.stop="copyServerName(s.name)"
>{{ s.name }}</span>
<span :title="s.name">{{ s.name }}</span>
</td>
<td class="text-caption text-medium-emphasis push-server-list__ellipsis" :title="s.domain || ''">
{{ s.domain || '—' }}
@@ -177,7 +172,6 @@
<script setup lang="ts">
import { pushStatusChipColor, serverOnlineColor } from '@/composables/push/labels'
import { usePushServerViewMode } from '@/composables/push/usePushServerViewMode'
import { useSnackbar } from '@/composables/useSnackbar'
import type { PushServerItem } from '@/composables/push/types'
defineProps<{
@@ -199,24 +193,12 @@ defineEmits<{
}>()
const { viewMode } = usePushServerViewMode()
const snackbar = useSnackbar()
function serverLabelTitle(s: PushServerItem): string {
const parts = [s.name]
if (s.domain?.trim()) parts.push(s.domain.trim())
return parts.join('\n')
}
async function copyServerName(name: string) {
const text = name.trim()
if (!text) return
try {
await navigator.clipboard.writeText(text)
snackbar('名称已复制')
} catch {
snackbar('复制失败', 'error')
}
}
</script>
<style scoped>
@@ -235,13 +217,6 @@ async function copyServerName(name: string) {
text-overflow: ellipsis;
white-space: nowrap;
}
.push-server-copy-name {
cursor: copy;
}
.push-server-copy-name:hover {
text-decoration: underline;
text-decoration-style: dotted;
}
.push-server-list__col-check {
width: 44px;
}