diff --git a/apps/frontend/package.json b/apps/frontend/package.json
index ebb9b13..41e4985 100644
--- a/apps/frontend/package.json
+++ b/apps/frontend/package.json
@@ -7,7 +7,7 @@
"dev": "vite",
"build": "vue-tsc -b && vite build",
"preview": "vite preview",
- "test": "node --test --experimental-strip-types src/app/theme.test.ts src/components/templates/template-config.test.ts src/views/dashboard-license.test.ts",
+ "test": "node --test --experimental-strip-types src/app/theme.test.ts src/components/templates/template-config.test.ts src/utils/format.test.ts src/views/dashboard-license.test.ts",
"typecheck": "vue-tsc -b",
"lint": "eslint . --fix",
"lint:check": "eslint .",
diff --git a/apps/frontend/src/utils/format.test.ts b/apps/frontend/src/utils/format.test.ts
new file mode 100644
index 0000000..6b39f69
--- /dev/null
+++ b/apps/frontend/src/utils/format.test.ts
@@ -0,0 +1,9 @@
+import assert from 'node:assert/strict'
+import test from 'node:test'
+import { statusLabel, statusTone } from './format.ts'
+
+test('formats token_expired status for check-in records', () => {
+ assert.equal(statusLabel('token_expired'), '凭证过期')
+ assert.equal(statusTone('token_expired'), 'danger')
+ assert.equal(statusLabel('token-expired'), 'token-expired')
+})
diff --git a/apps/frontend/src/utils/format.ts b/apps/frontend/src/utils/format.ts
index fe9e829..3112590 100644
--- a/apps/frontend/src/utils/format.ts
+++ b/apps/frontend/src/utils/format.ts
@@ -35,6 +35,7 @@ export function statusLabel(status?: string | null) {
running: '进行中',
already_submitted: '已提交',
out_of_time: '超出时间',
+ token_expired: '凭证过期',
unknown: '未知',
manual: '手动',
scheduler: '定时',
@@ -47,7 +48,14 @@ export function statusLabel(status?: string | null) {
export function statusTone(status?: string | null) {
if (status === 'success' || status === 'already_submitted') return 'success'
if (status === 'pending' || status === 'running') return 'warning'
- if (status === 'failure' || status === 'failed' || status === 'out_of_time') return 'danger'
+ if (
+ status === 'failure' ||
+ status === 'failed' ||
+ status === 'out_of_time' ||
+ status === 'token_expired'
+ ) {
+ return 'danger'
+ }
return 'neutral'
}
diff --git a/apps/frontend/src/views/RecordsView.vue b/apps/frontend/src/views/RecordsView.vue
index 68264c5..4cfe4b9 100644
--- a/apps/frontend/src/views/RecordsView.vue
+++ b/apps/frontend/src/views/RecordsView.vue
@@ -48,6 +48,7 @@ onMounted(load)
+