From 7c2bffa1a495cc4a3a263f654c08c231009c5c4e Mon Sep 17 00:00:00 2001
From: zhou zhou <3272660260@qq.com>
Date: 星期四, 02 四月 2026 10:59:45 +0800
Subject: [PATCH] #i18n
---
rsf-design/src/components/core/forms/art-excel-export/index.vue | 53 +++++++++++++++++++++++++++++++++--------------------
1 files changed, 33 insertions(+), 20 deletions(-)
diff --git a/rsf-design/src/components/core/forms/art-excel-export/index.vue b/rsf-design/src/components/core/forms/art-excel-export/index.vue
index 47de522..ea1d955 100644
--- a/rsf-design/src/components/core/forms/art-excel-export/index.vue
+++ b/rsf-design/src/components/core/forms/art-excel-export/index.vue
@@ -1,4 +1,3 @@
-<!-- 瀵煎嚭 Excel 鏂囦欢 -->
<template>
<ElButton
:type="type"
@@ -12,19 +11,22 @@
<ElIcon class="is-loading">
<Loading />
</ElIcon>
- {{ loadingText }}
+ {{ resolvedLoadingText }}
</template>
- <slot>{{ buttonText }}</slot>
+ <slot>{{ resolvedButtonText }}</slot>
</ElButton>
</template>
<script setup>
import * as XLSX from 'xlsx'
import FileSaver from 'file-saver'
- import { ref, computed, nextTick } from 'vue'
+ import { ElMessage } from 'element-plus'
+ import { ref, computed, nextTick, readonly } from 'vue'
import { Loading } from '@element-plus/icons-vue'
import { useThrottleFn } from '@vueuse/core'
+ import { useI18n } from 'vue-i18n'
defineOptions({ name: 'ArtExcelExport' })
+ const { t } = useI18n()
const props = defineProps({
filename: {
required: false,
@@ -34,10 +36,10 @@
type: { required: false, default: 'primary' },
size: { required: false, default: 'default' },
disabled: { required: false, default: false },
- buttonText: { required: false, default: '瀵煎嚭 Excel' },
- loadingText: { required: false, default: '瀵煎嚭涓�...' },
+ buttonText: { required: false, default: '' },
+ loadingText: { required: false, default: '' },
autoIndex: { required: false, default: false },
- indexColumnTitle: { required: false, default: '搴忓彿' },
+ indexColumnTitle: { required: false, default: '' },
columns: { required: false, default: () => ({}) },
headers: { required: false, default: () => ({}) },
maxRows: { required: false, default: 1e5 },
@@ -56,15 +58,18 @@
}
const isExporting = ref(false)
const hasData = computed(() => Array.isArray(props.data) && props.data.length > 0)
+ const resolvedButtonText = computed(() => props.buttonText || t('common.actions.export'))
+ const resolvedLoadingText = computed(() => props.loadingText || t('common.actions.exporting'))
+ const resolvedIndexColumnTitle = computed(() => props.indexColumnTitle || t('table.index'))
const validateData = (data) => {
if (!Array.isArray(data)) {
- throw new ExportError('鏁版嵁蹇呴』鏄暟缁勬牸寮�', 'INVALID_DATA_TYPE')
+ throw new ExportError(t('message.exportInvalidDataType'), 'INVALID_DATA_TYPE')
}
if (data.length === 0) {
- throw new ExportError('娌℃湁鍙鍑虹殑鏁版嵁', 'NO_DATA')
+ throw new ExportError(t('message.exportNoData'), 'NO_DATA')
}
if (data.length > props.maxRows) {
- throw new ExportError(`鏁版嵁琛屾暟瓒呰繃闄愬埗锛�${props.maxRows}琛岋級`, 'EXCEED_MAX_ROWS', {
+ throw new ExportError(t('message.exportExceedMaxRows', { maxRows: props.maxRows }), 'EXCEED_MAX_ROWS', {
currentRows: data.length,
maxRows: props.maxRows
})
@@ -82,7 +87,7 @@
return value.toLocaleDateString('zh-CN')
}
if (typeof value === 'boolean') {
- return value ? '鏄�' : '鍚�'
+ return value ? t('common.status.yes') : t('common.status.no')
}
return String(value)
}
@@ -90,7 +95,7 @@
const processedData = data.map((item, index) => {
const processedItem = {}
if (props.autoIndex) {
- processedItem[props.indexColumnTitle] = String(index + 1)
+ processedItem[resolvedIndexColumnTitle.value] = String(index + 1)
}
Object.entries(item).forEach(([key, value]) => {
let columnTitle = key
@@ -131,13 +136,13 @@
if (props.workbookOptions) {
workbook.Props = {
Title: filename,
- Subject: '鏁版嵁瀵煎嚭',
+ Subject: t('message.exportWorkbookSubject'),
Author: props.workbookOptions.creator || 'Art Design Pro',
Manager: props.workbookOptions.lastModifiedBy || '',
- Company: '绯荤粺瀵煎嚭',
- Category: '鏁版嵁',
- Keywords: 'excel,export,data',
- Comments: '鐢辩郴缁熻嚜鍔ㄧ敓鎴�',
+ Company: t('message.exportWorkbookCompany'),
+ Category: t('message.exportWorkbookCategory'),
+ Keywords: t('message.exportWorkbookKeywords'),
+ Comments: t('message.exportWorkbookComments'),
CreatedDate: props.workbookOptions.created || /* @__PURE__ */ new Date(),
ModifiedDate: props.workbookOptions.modified || /* @__PURE__ */ new Date()
}
@@ -164,7 +169,11 @@
await nextTick()
return Promise.resolve()
} catch (error) {
- throw new ExportError(`Excel 瀵煎嚭澶辫触: ${error.message}`, 'EXPORT_FAILED', error)
+ throw new ExportError(
+ t('message.exportExcelFailed', { message: error.message }),
+ 'EXPORT_FAILED',
+ error
+ )
}
}
const handleExport = useThrottleFn(async () => {
@@ -177,7 +186,7 @@
emit('export-success', props.filename, props.data.length)
if (props.showSuccessMessage) {
ElMessage.success({
- message: `鎴愬姛瀵煎嚭 ${props.data.length} 鏉℃暟鎹甡,
+ message: t('message.exportSuccessWithCount', { count: props.data.length }),
duration: 3e3
})
}
@@ -185,7 +194,11 @@
const exportError =
error instanceof ExportError
? error
- : new ExportError(`瀵煎嚭澶辫触: ${error.message}`, 'UNKNOWN_ERROR', error)
+ : new ExportError(
+ t('message.exportFailedUnknown', { message: error.message }),
+ 'UNKNOWN_ERROR',
+ error
+ )
emit('export-error', exportError)
if (props.showErrorMessage) {
ElMessage.error({
--
Gitblit v1.9.1