工作台 8 项指标全部改为明确中文标题。
ISO 8601 时间统一转换为北京时间,例如 2026/07/23 22:29。 审计日志、缴费确认时间、通知发布时间统一使用时间格式化。 管理员层级、流程类型、录取状态等建立统一中文映射。 工作台、流程设计、学校管理等管理页面的装饰性英文标题改为中文。 历史审计记录中的 plan、draft 等枚举也会自动翻译。 更新静态资源版本号,避免浏览器继续使用旧缓存。
This commit is contained in:
1 parent
9931c8e0d3
commit
ef8222c138
15 files changed
+860
-3627
No files matched your search
@@ -196,6 +196,7 @@ internal static class AdminPublicationProjector
|
|||||||
["summary"] = summary,
|
["summary"] = summary,
|
||||||
["author"] = "系统自动发布",
|
["author"] = "系统自动发布",
|
||||||
["publishedAt"] = publishedAt,
|
["publishedAt"] = publishedAt,
|
||||||
|
["publicVisible"] = visible,
|
||||||
["visible"] = visible,
|
["visible"] = visible,
|
||||||
["status"] = visible ? "visible" : "hidden"
|
["status"] = visible ? "visible" : "hidden"
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -82,13 +82,13 @@ async function copyCodes() {
|
|||||||
<div class="security-stack">
|
<div class="security-stack">
|
||||||
<div v-if="error" class="form-error">{{ error }}</div>
|
<div v-if="error" class="form-error">{{ error }}</div>
|
||||||
<section v-if="recoveryCodes.length" class="recovery-code-panel">
|
<section v-if="recoveryCodes.length" class="recovery-code-panel">
|
||||||
<div><p>RECOVERY CODES</p><h2>立即保存恢复码</h2><span>每个恢复码只能使用一次,关闭页面后系统不会再次展示本组代码。</span></div>
|
<div><p>账户恢复</p><h2>立即保存恢复码</h2><span>每个恢复码只能使用一次,关闭页面后系统不会再次展示本组代码。</span></div>
|
||||||
<div class="recovery-code-grid"><code v-for="code in recoveryCodes" :key="code">{{ code }}</code></div>
|
<div class="recovery-code-grid"><code v-for="code in recoveryCodes" :key="code">{{ code }}</code></div>
|
||||||
<button class="app-button app-button--primary" type="button" @click="copyCodes">复制全部恢复码</button>
|
<button class="app-button app-button--primary" type="button" @click="copyCodes">复制全部恢复码</button>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<form class="business-form security-card" @submit.prevent="changePassword">
|
<form class="business-form security-card" @submit.prevent="changePassword">
|
||||||
<header><div><p>LOGIN PASSWORD</p><h2>修改登录密码</h2></div><StatusBadge value="active" /></header>
|
<header><div><p>登录安全</p><h2>修改登录密码</h2></div><StatusBadge value="active" /></header>
|
||||||
<span>账号:{{ sessionStore.state.user?.username || sessionStore.state.user?.candidateNumber }}。新密码至少 8 位,并应与当前密码不同。</span>
|
<span>账号:{{ sessionStore.state.user?.username || sessionStore.state.user?.candidateNumber }}。新密码至少 8 位,并应与当前密码不同。</span>
|
||||||
<label><span>当前密码</span><input v-model="password.currentPassword" type="password" autocomplete="current-password" required></label>
|
<label><span>当前密码</span><input v-model="password.currentPassword" type="password" autocomplete="current-password" required></label>
|
||||||
<label><span>新密码</span><input v-model="password.newPassword" type="password" autocomplete="new-password" minlength="8" required></label>
|
<label><span>新密码</span><input v-model="password.newPassword" type="password" autocomplete="new-password" minlength="8" required></label>
|
||||||
@@ -97,7 +97,7 @@ async function copyCodes() {
|
|||||||
</form>
|
</form>
|
||||||
|
|
||||||
<section class="business-form security-card">
|
<section class="business-form security-card">
|
||||||
<header><div><p>TWO-STEP VERIFICATION</p><h2>TOTP 二次验证</h2></div><StatusBadge :value="status.enabled ? 'active' : 'disabled'" /></header>
|
<header><div><p>二次验证</p><h2>动态验证码(TOTP)</h2></div><StatusBadge :value="status.enabled ? 'active' : 'disabled'" /></header>
|
||||||
<template v-if="!status.enabled && !setup">
|
<template v-if="!status.enabled && !setup">
|
||||||
<span>使用验证器应用生成的动态验证码,为账号增加独立于密码的第二层保护。</span>
|
<span>使用验证器应用生成的动态验证码,为账号增加独立于密码的第二层保护。</span>
|
||||||
<form class="inline-security-form" @submit.prevent="beginSetup"><label><span>确认当前密码</span><input v-model="setupPassword" type="password" autocomplete="current-password" required></label><button class="app-button app-button--primary" :disabled="busy">开始绑定验证器</button></form>
|
<form class="inline-security-form" @submit.prevent="beginSetup"><label><span>确认当前密码</span><input v-model="setupPassword" type="password" autocomplete="current-password" required></label><button class="app-button app-button--primary" :disabled="busy">开始绑定验证器</button></form>
|
||||||
|
|||||||
@@ -1,13 +1,9 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
|
import { statusLabel } from '@/lib/business-labels';
|
||||||
|
|
||||||
const props = defineProps({ value: { type: [String, Boolean, Number], default: '' } });
|
const props = defineProps({ value: { type: [String, Boolean, Number], default: '' } });
|
||||||
const labels = {
|
|
||||||
approved: '已通过', pending: '待处理', rejected: '已退回', draft: '草稿', published: '已发布',
|
|
||||||
open: '开放中', upcoming: '即将开放', closed: '已结束', archived: '已归档', completed: '已完成',
|
|
||||||
active: '正常', disabled: '已停用', unpaid: '未缴费', paid: '已缴费', final: '正式录取',
|
|
||||||
school_review: '学校审核', withdrawal_pending: '退档待审', reported: '已报到', not_reported: '未报到'
|
|
||||||
};
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<span :class="['status-badge', `is-${String(props.value).replaceAll('_', '-')}`]">{{ labels[props.value] || props.value || '—' }}</span>
|
<span :class="['status-badge', `is-${String(props.value).replaceAll('_', '-')}`]">{{ statusLabel(props.value) }}</span>
|
||||||
</template>
|
</template>
|
||||||
Loaded 3 of 15 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user