全局中文化

This commit is contained in:
Cheng Zhou
2026-01-12 11:14:04 +08:00
parent 9021c7fe2b
commit 1338fa7e2b
103 changed files with 2443 additions and 1533 deletions
@@ -1,7 +1,7 @@
<template>
<el-card>
<div class="header">
<span>附件</span>
<span>{{ TEXT.common.labels.attachments }}</span>
<AttachmentUploader
:study-id="studyId"
:entity-type="entityType"
@@ -10,23 +10,23 @@
/>
</div>
<el-table :data="attachments" v-loading="loading" style="width: 100%">
<el-table-column prop="filename" label="文件名" min-width="200" />
<el-table-column label="大小" width="120">
<el-table-column prop="filename" :label="TEXT.common.labels.filename" min-width="200" />
<el-table-column :label="TEXT.common.labels.size" width="120">
<template #default="scope">{{ formatFileSize(scope.row.file_size ?? scope.row.size) }}</template>
</el-table-column>
<el-table-column label="上传人" width="180">
<el-table-column :label="TEXT.common.labels.uploader" width="180">
<template #default="scope">
{{ uploaderLabel(scope.row) }}
</template>
</el-table-column>
<el-table-column prop="uploaded_at" label="上传时间" width="180">
<el-table-column prop="uploaded_at" :label="TEXT.common.labels.uploadedAt" width="180">
<template #default="scope">
{{ displayDateTime(scope.row.uploaded_at) }}
</template>
</el-table-column>
<el-table-column label="操作" width="180">
<el-table-column :label="TEXT.common.labels.actions" width="180">
<template #default="scope">
<el-button link type="primary" size="small" @click="download(scope.row)">下载</el-button>
<el-button link type="primary" size="small" @click="download(scope.row)">{{ TEXT.common.actions.download }}</el-button>
<el-button
v-if="canDelete(scope.row)"
link
@@ -34,7 +34,7 @@
size="small"
@click="remove(scope.row)"
>
删除
{{ TEXT.common.actions.delete }}
</el-button>
</template>
</el-table-column>
@@ -52,6 +52,7 @@ import { useAuthStore } from "../../store/auth";
import { useStudyStore } from "../../store/study";
import { listMembers } from "../../api/members";
import { displayDateTime, displayUser, getMemberDisplayName, getUserDisplayName } from "../../utils/display";
import { TEXT } from "../../locales";
const props = defineProps<{
studyId: string;
@@ -72,7 +73,7 @@ const load = async () => {
const { data } = await fetchAttachments(props.studyId, props.entityType, props.entityId);
attachments.value = data.items || data || [];
} catch (e: any) {
ElMessage.error(e?.response?.data?.message || "附件加载失败");
ElMessage.error(e?.response?.data?.message || TEXT.common.messages.loadFailed);
} finally {
loading.value = false;
}
@@ -95,7 +96,7 @@ const uploaderLabel = (row: any) => {
return acc;
}, {});
if (row?.uploaded_by && typeof row.uploaded_by === "object") {
return getUserDisplayName(row.uploaded_by) || row.uploaded_by.id || "—";
return getUserDisplayName(row.uploaded_by) || row.uploaded_by.id || TEXT.common.fallback;
}
return displayUser(row.uploaded_by_id || row.uploaded_by, { members: memberMap });
};
@@ -116,14 +117,14 @@ const canDelete = (row: any) => {
};
const remove = async (row: any) => {
const ok = await ElMessageBox.confirm("确认删除该附件?", "提示").catch(() => null);
const ok = await ElMessageBox.confirm(TEXT.common.confirm.delete, TEXT.common.labels.tips).catch(() => null);
if (!ok) return;
try {
await deleteAttachment(row.id);
ElMessage.success("已删除");
ElMessage.success(TEXT.common.messages.deleteSuccess);
load();
} catch (e: any) {
ElMessage.error(e?.response?.data?.message || "删除失败");
ElMessage.error(e?.response?.data?.message || TEXT.common.messages.deleteFailed);
}
};
@@ -7,7 +7,7 @@
:disabled="loading"
:auto-upload="true"
>
<el-button type="primary" :loading="loading">上传附件</el-button>
<el-button type="primary" :loading="loading">{{ TEXT.common.actions.upload }}</el-button>
</el-upload>
<el-progress v-if="progress > 0 && progress < 100" :percentage="progress" :stroke-width="6" />
</div>
@@ -17,6 +17,7 @@
import { ref } from "vue";
import { ElMessage } from "element-plus";
import { uploadAttachment } from "../../api/attachments";
import { TEXT } from "../../locales";
const props = defineProps<{
studyId: string;
@@ -34,7 +35,7 @@ const doUpload = async (options: any) => {
const file: File = options.file;
if (!file) return;
if (file.size > maxSize * 1024 * 1024) {
ElMessage.error(`文件大小不能超过 ${maxSize}MB`);
ElMessage.error(`${TEXT.common.messages.fileTooLarge} ${maxSize}MB`);
return;
}
progress.value = 0;
@@ -47,10 +48,10 @@ const doUpload = async (options: any) => {
}
},
});
ElMessage.success("上传成功");
ElMessage.success(TEXT.common.messages.uploadSuccess);
emit("uploaded");
} catch (e: any) {
ElMessage.error(e?.response?.data?.message || "上传失败");
ElMessage.error(e?.response?.data?.message || TEXT.common.messages.uploadFailed);
} finally {
progress.value = 0;
loading.value = false;