功能:大屏 APK 原生播报及项目入口

具体项目页由 APK 原生轮询并播报三次,总览页不播报。总览项目卡片通过项目编码进入对应大屏。
This commit is contained in:
2026-08-11 00:58:17 +08:00
parent 5ad8bfcd03
commit e4e3e6a735
27 changed files with 728 additions and 236 deletions

View File

@@ -482,6 +482,7 @@ func newDisplayBatchDTO(batch model.CallBatch, tickets []displayTicketDTO) displ
func publicDisplayProjectView(project map[string]any) map[string]any {
return map[string]any{
"id": project["id"],
"code": project["code"],
"name": project["name"],
"status": project["status"],
"waiting_count": project["waiting_count"],

View File

@@ -33,7 +33,7 @@ func TestDisplayBatchDTOCannotSerializePersonalFields(t *testing.T) {
func TestPublicDisplayProjectViewOnlySerializesDisplayFields(t *testing.T) {
view := publicDisplayProjectView(map[string]any{
"id": "project-1", "name": "东门观光车", "status": model.ProjectRunning,
"id": "project-1", "code": "YYHHC", "name": "东门观光车", "status": model.ProjectRunning,
"waiting_count": 3, "waiting_ticket_count": 3, "waiting_people_count": 7,
"issued_ticket_count": 15, "latest_ticket_number": "00015", "experienced_people": 12,
"current_batch": map[string]any{"tickets": []map[string]any{{"ticket_number": "00013"}}},
@@ -51,7 +51,7 @@ func TestPublicDisplayProjectViewOnlySerializesDisplayFields(t *testing.T) {
t.Fatalf("public display overview leaked forbidden field %q: %s", forbidden, encoded)
}
}
for _, required := range []string{`"name":"东门观光车"`, `"ticket_number":"00013"`, `"waiting_people_count":7`} {
for _, required := range []string{`"code":"YYHHC"`, `"name":"东门观光车"`, `"ticket_number":"00013"`, `"waiting_people_count":7`} {
if !strings.Contains(encoded, required) {
t.Fatalf("public display overview missing field %q: %s", required, encoded)
}