Skip to content

Commit c7ed8bb

Browse files
committed
fix(ui): 为移动端添加车票卡片操作下拉菜单
修复桌面端操作按钮在移动端显示异常的问题,在移动端使用下拉菜单替代原有按钮组。 同时修正人脸查询中照片计数的逻辑,改为按photo_id去重统计。
1 parent aecd4f3 commit c7ed8bb

File tree

2 files changed

+51
-4
lines changed

2 files changed

+51
-4
lines changed

package/server/app/crud/face.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,10 +156,10 @@ def get_identities_with_details(
156156
min_photos: int = 0,
157157
photo_id: Optional[UUID] = None
158158
) -> List[FaceIdentitySchema]:
159-
# 1. 子查询:统计每个人脸身份的人脸数(按photo_id筛选
159+
# 1. 子查询:统计每个人脸身份的人脸数(按photo_id筛选并去重
160160
face_counts_subq = db.query(
161161
Face.face_identity_id,
162-
func.count(Face.id).label("count")
162+
func.count(func.distinct(Face.photo_id)).label("count")
163163
).filter(
164164
Face.is_deleted == False,
165165
Face.face_identity_id.isnot(None) # 修正:非空判断

package/website/src/components/TicketCard.vue

Lines changed: 49 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,8 @@
6565
</div>
6666
</div>
6767

68-
<div class="flex gap-2 opacity-100 md:opacity-0 group-hover:opacity-100 transition-opacity translate-y-0 md:translate-y-2 group-hover:translate-y-0">
68+
<!-- Desktop Buttons -->
69+
<div class="hidden md:flex gap-2 opacity-0 group-hover:opacity-100 transition-opacity translate-y-2 group-hover:translate-y-0">
6970
<button
7071
v-if="ticket.type === 'train'"
7172
@click.stop="handleViewPaper"
@@ -81,6 +82,37 @@
8182
<Trash2 class="w-4 h-4" />
8283
</button>
8384
</div>
85+
86+
<!-- Mobile Dropdown -->
87+
<div class="md:hidden" @click.stop>
88+
<el-dropdown trigger="click" @command="handleCommand">
89+
<button class="p-2 text-slate-400 hover:text-slate-600 dark:text-slate-500 dark:hover:text-slate-300 bg-slate-50 dark:bg-slate-700 rounded-md">
90+
<MoreHorizontal class="w-5 h-5" />
91+
</button>
92+
<template #dropdown>
93+
<el-dropdown-menu>
94+
<el-dropdown-item v-if="ticket.type === 'train'" command="viewPaper">
95+
<div class="flex items-center gap-2">
96+
<TicketIcon class="w-4 h-4" />
97+
<span>查看仿真车票</span>
98+
</div>
99+
</el-dropdown-item>
100+
<el-dropdown-item command="edit">
101+
<div class="flex items-center gap-2">
102+
<Pencil class="w-4 h-4" />
103+
<span>编辑</span>
104+
</div>
105+
</el-dropdown-item>
106+
<el-dropdown-item command="delete">
107+
<div class="flex items-center gap-2 text-red-500">
108+
<Trash2 class="w-4 h-4" />
109+
<span>删除</span>
110+
</div>
111+
</el-dropdown-item>
112+
</el-dropdown-menu>
113+
</template>
114+
</el-dropdown>
115+
</div>
84116
</div>
85117
</div>
86118
<div v-if="ticket.comments" class="bg-slate-50 dark:bg-slate-700/30 px-5 py-2 text-xs text-slate-500 dark:text-slate-400 border-t border-slate-200 dark:border-slate-700">
@@ -91,7 +123,7 @@
91123

92124
<script setup>
93125
import { computed } from 'vue';
94-
import { MoveRight, Clock, Route, Pencil, Trash2, Check, Plane, Ticket as TicketIcon } from 'lucide-vue-next';
126+
import { MoveRight, Clock, Route, Pencil, Trash2, Check, Plane, Ticket as TicketIcon, MoreHorizontal } from 'lucide-vue-next';
95127
96128
const props = defineProps({
97129
// 车票数据
@@ -150,6 +182,21 @@ const handleDelete = () => {
150182
const handleViewPaper = () => {
151183
emit('view-paper', props.ticket);
152184
};
185+
186+
// 处理下拉菜单命令
187+
const handleCommand = (command) => {
188+
switch (command) {
189+
case 'viewPaper':
190+
handleViewPaper();
191+
break;
192+
case 'edit':
193+
handleEdit();
194+
break;
195+
case 'delete':
196+
handleDelete();
197+
break;
198+
}
199+
};
153200
</script>
154201

155202
<style scoped>

0 commit comments

Comments
 (0)