From ecd77996d50d4255b992d0847c925d0d2fed6a48 Mon Sep 17 00:00:00 2001
From: zhangrenyuan <18990852002@163.com>
Date: Wed, 10 Dec 2025 18:50:17 +0800
Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat:=20=E5=AE=8C=E5=96=84=E5=A4=9A?=
=?UTF-8?q?=E8=AF=AD=E8=A8=80=E6=94=AF=E6=8C=81=EF=BC=8C=E4=BC=98=E5=8C=96?=
=?UTF-8?q?=E5=B7=A5=E4=BD=9C=E5=8F=B0=E7=BB=84=E4=BB=B6=E6=96=87=E6=9C=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/components/locales/lang/zh-CN.js | 82 +++++++++++++++++++++++++++
src/components/workspace/CashManagement.vue | 46 ++++++++-------
src/components/workspace/GoldGraph.vue | 73 ++++++++++++------------
src/components/workspace/GoldGraphMarkets.vue | 57 ++++++++++---------
src/components/workspace/GoldManagement.vue | 56 +++++++++---------
src/views/workspace/index.vue | 7 ++-
6 files changed, 210 insertions(+), 111 deletions(-)
diff --git a/src/components/locales/lang/zh-CN.js b/src/components/locales/lang/zh-CN.js
index 734d19f..22f0350 100644
--- a/src/components/locales/lang/zh-CN.js
+++ b/src/components/locales/lang/zh-CN.js
@@ -150,6 +150,10 @@ export default {
executed: '执行完成',
errorExecution: '执行出错',
unknownStatus: '未知状态',
+ // 获取
+ getMarketListFailed: '获取市场列表失败,请稍后重试',
+ getChartDataFailed: '获取图表数据失败,请稍后重试',
+ renderChartFailed: '图表渲染失败,请稍后重试',
},
// 通用列表字段组
@@ -425,4 +429,82 @@ export default {
refund: '退款',
}
},
+
+ // 工作台组
+ workbench: {
+ // 头部
+ dataOverview: '数据总览',
+ loading: '加载中...',
+ // 现金管理
+ cashManagement: '现金管理',
+ dataExplanationTitle: '数据说明',
+ dataExplanationContent: '此数据实时计算,存在误差,请勿作为最终数据使用。',
+ totalRevenue: '总营收',
+ SGD: '新币',
+ collect: '代收',
+ Singapore: '新加坡',
+ Malaysia: '马来西亚',
+ HongKong: '香港',
+ Thailand: '泰国',
+ VietnamHCM: '越南HCM',
+ Canada: '加拿大',
+ MYR: '马币',
+ HKD: '港币',
+ CAD: '加币',
+ THB: '泰铢',
+ VND: '越南盾',
+ // 金币管理
+ goldManagement: '金币管理',
+ lastUpdateTime: '最后更新时间:',
+ noData: '该地区暂无数据',
+ // card1
+ currentGoldBalance: '当前金币余量',
+ compareToPreviousDay: '较前一日',
+ permanentGold: '永久金币',
+ freeGold: '免费金币',
+ taskGold: '任务金币',
+ goldExpireIn6Months: '6月到期:',
+ goldExpireIn12Months: '12月到期:',
+ // card2
+ annualCumulativeRecharge: '全年累计充值金币数:',
+ convertedSGDCumulativeAmount: '折合新币累计金额:',
+ yesterdayNew: '昨日新增金币:',
+ wherePermanentGold: '其中永久金币:',
+ // card3
+ annualCumulativeConsume: '全年累计消费金币数:',
+ consume: '消耗:',
+ refund: '退款:',
+ yesterdayNewAll: '昨日新增消费:',
+ yesterdayNewConsume: '昨日新增消耗:',
+ yesterdayNewRefund: '昨日新增退款:',
+ // card4
+ annualCumulativeRechargePeople: '全年累计充值人头数:',
+ weekYearOnYear: '周同比:',
+ dayYearOnYear: '日同比:',
+ yesterdayRechargePeople: '昨日充值人数:',
+ whereFirstRecharge: '其中首充:',
+ // 总部/研发部,地区表
+ coinRecharge: '金币充值',
+ coinConsume: '金币消费',
+ total: '合计:',
+ yesterday: '昨天',
+ today: '今天',
+ thisWeek: '本周',
+ thisMonth: '本月',
+ thisYear: '本年',
+ startTime: '开始时间',
+ endTime: '结束时间',
+ query: '查询',
+ // 筛选统计表
+ gold: '金币',
+ recharge: '充值',
+ consume: '消费',
+ rank: '排名',
+ allTypes: '全部类型',
+ region: '地区',
+ goldCount: '金币数量',
+ all: '总',
+ marketTitle: '数据说明',
+ marketContent: '若统计周期跨越 40 天以上,将展示月份维度的数据。',
+ }
}
\ No newline at end of file
diff --git a/src/components/workspace/CashManagement.vue b/src/components/workspace/CashManagement.vue
index b488801..bb397dc 100644
--- a/src/components/workspace/CashManagement.vue
+++ b/src/components/workspace/CashManagement.vue
@@ -2,16 +2,16 @@
- 现金管理
+ {{ t('workbench.cashManagement') }}
- 总营收:{{ totalIncome.toFixed(2) }} 新币
+ {{ t('workbench.totalRevenue') }}:{{ totalIncome.toFixed(2) }} {{ t('workbench.SGD') }}
@@ -39,11 +39,11 @@
{{ market.name }}:
- {{ market.value.toLocaleString() }} 新币
+ {{ market.value.toLocaleString() }} {{ t('workbench.SGD') }}
- 代收{{ item.name }}:
- {{ item.value.toLocaleString() }}
+ {{ t('workbench.collect')}}{{ item.name }}:
+ {{ item.value.toLocaleString() }}
@@ -61,6 +61,9 @@ import {onMounted, ref} from 'vue'
import request from "@/util/http.js";
import API from "@/util/http.js";
import {Warning, Service} from "@element-plus/icons-vue";
+import { useI18n } from 'vue-i18n'
+
+const { t } = useI18n()
const chartRef = ref(null)
@@ -75,12 +78,12 @@ const markets = ref()
// 定义默认市场
const defaultMarkets = [
- {name: '新加坡', value: 0},
- {name: '马来西亚', value: 0},
- {name: '香港', value: 0},
- {name: '泰国', value: 0},
- {name: '越南HCM', value: 0},
- {name: '加拿大', value: 0},
+ {name: t('workbench.Singapore'), value: 0},
+ {name: t('workbench.Malaysia'), value: 0},
+ {name: t('workbench.HongKong'), value: 0},
+ {name: t('workbench.Thailand'), value: 0},
+ {name: t('workbench.VietnamHCM'), value: 0},
+ {name: t('workbench.Canada'), value: 0},
// {name: '未知', value: 0},
// { name: '其他', value: 0 },
// {name: '市场部', value: 0},
@@ -132,14 +135,14 @@ const fetchCashData = async () => {
value: resMap.get(m.name) ?? 0
}))
} else if (marksFlag.value=== false) {
-// 1. 定义币种中英文对照表
+// 1. 定义币种中英文对照表 代收地区的币种
const currencyMap = {
- sgd: '新币',
- myr: '马币',
- hkd: '港币',
- cad: '加币',
- thb: '泰铢',
- vdn: '越南盾',
+ sgd: t('workbench.SGD'),
+ myr: t('workbench.MYR'),
+ hkd: t('workbench.HKD'),
+ cad: t('workbench.CAD'),
+ thb: t('workbench.THB'),
+ vdn: t('workbench.VND'),
};
// 2. 取出所有币种字段(排除 market 与 totalSGD),只保留 currencyMap 中定义的币种
@@ -191,7 +194,8 @@ const getAdminData = async function () {
try {
loading.value = true; // 开始加载
const result = await API({url: '/admin/userinfo', data: {}});
- marksFlag.value = result.markets === '总部' || result.markets === '研发部';
+ marksFlag.value = result.markets === '总部' || result.markets === '研发部'
+ || result.markets === 'headquarters' || result.markets === 'R&D Department';
console.log("marksFlag", marksFlag.value);
// alert(marksFlag.value)
} catch (error) {
diff --git a/src/components/workspace/GoldGraph.vue b/src/components/workspace/GoldGraph.vue
index 48512e9..5675178 100644
--- a/src/components/workspace/GoldGraph.vue
+++ b/src/components/workspace/GoldGraph.vue
@@ -3,46 +3,46 @@
-
-
+
+
-
合计:{{ sumConsume / 100 }}
- 永久金币: {{ activeTab === 'recharge' ? sumRechargePermanent / 100 : sumConsumePermanent / 100 }}
- 免费金币: {{ activeTab === 'recharge' ? sumRechargeFree / 100 : sumConsumeFree / 100 }}
- 任务金币: {{ activeTab === 'recharge' ? sumRechargeTask / 100 : sumConsumeTask / 100 }}
+
{{ t('workbench.total') }} {{ sumConsume / 100 }}
+ {{ t('workbench.permanentGold') }}:{{ activeTab === 'recharge' ? sumRechargePermanent / 100 : sumConsumePermanent / 100 }}
+ {{ t('workbench.freeGold') }}:{{ activeTab === 'recharge' ? sumRechargeFree / 100 : sumConsumeFree / 100 }}
+ {{ t('workbench.taskGold') }}:{{ activeTab === 'recharge' ? sumRechargeTask / 100 : sumConsumeTask / 100 }}
昨天
+ @click="getYes()" size="default">{{ t('workbench.yesterday') }}
今天
+ @click="getToday()" size="default">{{ t('workbench.today') }}
本周
+ @click="getWeek()" size="default">{{ t('workbench.thisWeek') }}
本月
+ @click="getMonth()" size="default">{{ t('workbench.thisMonth') }}
本年
+ @click="getYear()" size="default">{{ t('workbench.thisYear') }}
- 查询
+ {{ t('workbench.query') }}
@@ -54,22 +54,22 @@
- 金币{{ activeTab === 'recharge' ? '充值' : '消费' }}排名
+ {{ t('workbench.gold') }}{{ activeTab === 'recharge' ? t('workbench.recharge') : t('workbench.consume') }}{{ t('workbench.rank') }}
-
-
-
-
+
+
+
+
-
-
+
+
{{ marketMapping[scope.row.market] || scope.row.market }}
-
+
{{ row.coinAmount.toLocaleString() }}
@@ -90,6 +90,9 @@ import {ElMessage} from 'element-plus'
import dayjs from 'dayjs';
import utc from 'dayjs-plugin-utc'
import {marketMapping} from "@/utils/marketMap.js";
+import { useI18n } from 'vue-i18n'
+
+const { t } = useI18n()
dayjs.extend(utc)
@@ -359,11 +362,11 @@ const getMarkets = async () => {
console.log('市场列表获取成功:', markets.value)
} else {
console.error('获取市场列表失败', response)
- ElMessage.error('获取市场列表失败')
+ ElMessage.error(t('elmessage.getMarketListFailed'))
}
} catch (error) {
console.error('获取市场列表失败:', error)
- ElMessage.error('获取市场列表失败')
+ ElMessage.error(t('elmessage.getMarketListFailed'))
}
}
@@ -398,11 +401,11 @@ const getChartData = async () => {
processRankingData(response.marketGraphs)
} else {
console.error('获取图表数据失败:', response)
- ElMessage.error('获取图表数据失败')
+ ElMessage.error(t('elmessage.getChartDataFailed'))
}
} catch (error) {
console.error('获取图表数据失败:', error)
- ElMessage.error('获取图表数据失败')
+ ElMessage.error(t('elmessage.getChartDataFailed'))
}
}
// 处理图表数据
@@ -524,7 +527,7 @@ const updateChart = (chartData) => {
if (activeTab.value === 'recharge') {
series = [
{
- name: '永久金币',
+ name: t('workbench.permanentGold'),
type: 'bar',
stack: 'recharge',
data: chartData.rechargePermanent,
@@ -532,7 +535,7 @@ const updateChart = (chartData) => {
barWidth: 30
},
{
- name: '免费金币',
+ name: t('workbench.freeGold'),
type: 'bar',
stack: 'recharge',
data: chartData.rechargeFree,
@@ -540,7 +543,7 @@ const updateChart = (chartData) => {
barWidth: 30
},
{
- name: '任务金币',
+ name: t('workbench.taskGold'),
type: 'bar',
stack: 'recharge',
data: chartData.rechargeTask,
@@ -548,11 +551,11 @@ const updateChart = (chartData) => {
barWidth: 30
}
]
- legend = ['永久金币', '免费金币', '任务金币']
+ legend = [t('workbench.permanentGold'), t('workbench.freeGold'), t('workbench.taskGold')]
} else {
series = [
{
- name: '永久金币',
+ name: t('workbench.permanentGold'),
type: 'bar',
stack: 'consume',
data: chartData.consumePermanent,
@@ -560,7 +563,7 @@ const updateChart = (chartData) => {
barWidth: 30
},
{
- name: '免费金币',
+ name: t('workbench.freeGold'),
type: 'bar',
stack: 'consume',
data: chartData.consumeFree,
@@ -568,7 +571,7 @@ const updateChart = (chartData) => {
barWidth: 30
},
{
- name: '任务金币',
+ name: t('workbench.taskGold'),
type: 'bar',
stack: 'consume',
data: chartData.consumeTask,
@@ -576,7 +579,7 @@ const updateChart = (chartData) => {
barWidth: 30
}
]
- legend = ['永久金币', '免费金币', '任务金币']
+ legend = [t('workbench.permanentGold'), t('workbench.freeGold'), t('workbench.taskGold')]
}
const option = {
@@ -592,7 +595,7 @@ const updateChart = (chartData) => {
result += `${param.seriesName}: ${param.value.toLocaleString()}
`;
total += param.value;
})
- result += `总${activeTab.value === 'recharge' ? '充值' : '消费'}: ${total.toLocaleString()}`;
+ result += `${t('workbench.all')}${activeTab.value === 'recharge' ? t('workbench.recharge') : t('workbench.consume')}: ${total.toLocaleString()}`;
return result
}
},
@@ -648,7 +651,7 @@ const updateChart = (chartData) => {
chartInstance.setOption(option)
} catch (error) {
console.error('图表更新失败:', error)
- ElMessage.error('图表渲染失败')
+ ElMessage.error(t('elmessage.renderChartFailed'))
} finally {
setTimeout(() => {
chartLoading.value = false
diff --git a/src/components/workspace/GoldGraphMarkets.vue b/src/components/workspace/GoldGraphMarkets.vue
index ef22360..9bc0d63 100644
--- a/src/components/workspace/GoldGraphMarkets.vue
+++ b/src/components/workspace/GoldGraphMarkets.vue
@@ -5,55 +5,55 @@
-
-
+
+
-
合计:{{ sumConsume }}
- 永久金币: {{ activeTab === 'recharge' ? sumRechargePermanent : sumConsumePermanent }}
- 免费金币: {{ activeTab === 'recharge' ? sumRechargeFree : sumConsumeFree }}
- 任务金币: {{ activeTab === 'recharge' ? sumRechargeTask : sumConsumeTask }}
+
{{ t('workbench.total') }} {{ sumConsume }}
+ {{ t('workbench.permanentGold') }}: {{ activeTab === 'recharge' ? sumRechargePermanent : sumConsumePermanent }}
+ {{ t('workbench.freeGold') }}: {{ activeTab === 'recharge' ? sumRechargeFree : sumConsumeFree }}
+ {{ t('workbench.taskGold') }}: {{ activeTab === 'recharge' ? sumRechargeTask : sumConsumeTask }}
昨天
+ @click="getYes()" size="default">{{ t('workbench.yesterday') }}
今天
+ @click="getToday()" size="default">{{ t('workbench.today') }}
本周
+ @click="getWeek()" size="default">{{ t('workbench.thisWeek') }}
本月
+ @click="getMonth()" size="default">{{ t('workbench.thisMonth') }}
本年
+ @click="getYear()" size="default">{{ t('workbench.thisYear') }}
- 查询
+ {{ t('workbench.query') }}
{
})
if (!response.marketGraphs || !Array.isArray(response.marketGraphs)) {
- ElMessage.error('获取图表数据失败')
+ ElMessage.error(t('elmessage.getChartDataFailed'))
return
}
@@ -415,7 +418,7 @@ const getChartData = async () => {
})
} catch (error) {
console.error('获取图表数据失败:', error)
- ElMessage.error('获取图表数据失败')
+ ElMessage.error(t('elmessage.getChartDataFailed'))
}
}
@@ -436,47 +439,47 @@ const updateChart = (chartData) => {
if (activeTab.value === 'recharge') {
series = [
{
- name: '永久金币',
+ name: t('workbench.permanentGold'),
type: 'bar',
stack: 'recharge',
data: chartData.rechargePermanent,
},
{
- name: '免费金币',
+ name: t('workbench.freeGold'),
type: 'bar',
stack: 'recharge',
data: chartData.rechargeFree,
},
{
- name: '任务金币',
+ name: t('workbench.taskGold'),
type: 'bar',
stack: 'recharge',
data: chartData.rechargeTask,
}
]
- legend = ['永久金币', '免费金币', '任务金币']
+ legend = [t('workbench.permanentGold'), t('workbench.freeGold'), t('workbench.taskGold')]
} else {
series = [
{
- name: '永久金币',
+ name: t('workbench.permanentGold'),
type: 'bar',
stack: 'consume',
data: chartData.consumePermanent,
},
{
- name: '免费金币',
+ name: t('workbench.freeGold'),
type: 'bar',
stack: 'consume',
data: chartData.consumeFree,
},
{
- name: '任务金币',
+ name: t('workbench.taskGold'),
type: 'bar',
stack: 'consume',
data: chartData.consumeTask,
}
]
- legend = ['永久金币', '免费金币', '任务金币']
+ legend = [t('workbench.permanentGold'), t('workbench.freeGold'), t('workbench.taskGold')]
}
const option = {
@@ -490,7 +493,7 @@ const updateChart = (chartData) => {
result += `${param.seriesName}: ${param.value.toLocaleString()}
`
total += param.value
})
- result += `总${activeTab.value === 'recharge' ? '充值' : '消费'}: ${total.toLocaleString()}`
+ result += `${t('workbench.all')}${activeTab.value === 'recharge' ? t('workbench.recharge') : t('workbench.consume')}: ${total.toLocaleString()}`
return result
}
},
@@ -545,7 +548,7 @@ const updateChart = (chartData) => {
chartInstance.setOption(option)
} catch (error) {
console.error('图表更新失败:', error)
- ElMessage.error('图表渲染失败')
+ ElMessage.error(t('elmessage.renderChartFailed'))
} finally {
setTimeout(() => (chartLoading.value = false), 300)
}
diff --git a/src/components/workspace/GoldManagement.vue b/src/components/workspace/GoldManagement.vue
index a5e62f0..140ecf8 100644
--- a/src/components/workspace/GoldManagement.vue
+++ b/src/components/workspace/GoldManagement.vue
@@ -2,9 +2,9 @@
- 金币管理
- 最后更新时间:{{
- workDataUpdateTime && workDataUpdateTime !== '1970-01-01 08:00:00' ? workDataUpdateTime : '该地区暂无数据'
+ {{ t('workbench.goldManagement') }}
+ {{ t('workbench.lastUpdateTime') }}{{
+ workDataUpdateTime && workDataUpdateTime !== '1970-01-01 08:00:00' ? workDataUpdateTime : t('workbench.noData')
}}
@@ -13,10 +13,11 @@
-
当前金币余量
+
+ {{ t('workbench.currentGoldBalance') }}
{{
currentGold / 100
- }} 较前一日
+ }} {{ t('workbench.compareToPreviousDay') }}
{{ dailyChange / 100 }}
@@ -33,26 +34,26 @@
- 永久金币:{{ currentPermanent / 100 }}
+ {{ t('workbench.permanentGold') }}:{{ currentPermanent / 100 }}
- 免费金币:{{ currentFree / 100 }}
+ {{ t('workbench.freeGold') }}:{{ currentFree / 100 }}
- [6月到期:{{ currentFreeJune / 100 }}]
+ [{{ t('workbench.goldExpireIn6Months')}}{{ currentFreeJune / 100 }}]
- 任务金币:{{ currentTask / 100 }}
+ {{ t('workbench.taskGold') }}:{{ currentTask / 100 }}
- [12月到期:{{ currentFreeDecember / 100 }}]
+ [{{ t('workbench.goldExpireIn12Months')}}{{ currentFreeDecember / 100 }}]
@@ -63,17 +64,17 @@
-
全年累计充值金币数:{{ yearlyRecharge / 100 }}
+
{{ t('workbench.annualCumulativeRecharge')}}{{ yearlyRecharge / 100 }}
- 折合新币累计金额
+ {{ t('workbench.convertedSGDCumulativeAmount') }}
- {{ yearlyMoney / 100 }}新币
+ {{ yearlyMoney / 100 }}{{ t('workbench.SGD') }}
- 昨日新增金币:{{ recharge / 100 }}
+ {{ t('workbench.yesterdayNew')}}{{ recharge / 100 }}
- 其中永久金币:{{ money / 100 }}
+ {{ t('workbench.wherePermanentGold')}}{{ money / 100 }}
@@ -85,7 +86,7 @@
-
全年累计消费金币数:{{ yearlyReduce / 100 }}
+
{{ t('workbench.annualCumulativeConsume')}}{{ yearlyReduce / 100 }}
@@ -99,19 +100,19 @@
-
全年累计充值人头数:{{ yearlyRechargeNum }}
+
{{ t('workbench.annualCumulativeRechargePeople')}}{{ yearlyRechargeNum }}
-
周同比:{{ sumWow }}%
+
{{ t('workbench.weekYearOnYear')}}{{ sumWow }}%
- 日环比:{{ sumDaily }}%
+ {{ t('workbench.dayYearOnYear')}}{{ sumDaily }}%
@@ -145,6 +146,9 @@ import svg2 from '@/assets/SvgIcons/wow.svg'
import upArrow from '@/assets/SvgIcons/up-arrow.svg'
import downArrow from '@/assets/SvgIcons/down-arrow.svg'
import pingArrow from '@/assets/SvgIcons/unchanged.svg'
+import { useI18n } from 'vue-i18n'
+
+const { t } = useI18n()
dayjs.extend(utc)
@@ -388,14 +392,14 @@ const initConsumeChart = () => {
data: [
{
value: yearlyConsume.value / 100,
- name: '消耗:' + yearlyConsume.value / 100,
+ name: t('workbench.consume') + yearlyConsume.value / 100,
// name: '消耗:' + 1234567890,
itemStyle: {color: '#7DB7FA'}
},
{
value: yearlyRefund.value / 100,
- name: '退款:' + yearlyRefund.value / 100,
+ name: t('workbench.refund') + yearlyRefund.value / 100,
itemStyle: {color: '#F7D47C'}
}
@@ -436,7 +440,7 @@ const initConsumeDetailChart = () => {
data: [
{
value: dailyConsume.value / 100,
- name: '昨日新增消费:' + dailyConsume.value / 100,
+ name: t('workbench.yesterdayNewAll') + dailyConsume.value / 100,
itemStyle: {color: '#65C9C9'}
}
]
@@ -453,13 +457,13 @@ const initConsumeDetailChart = () => {
data: [
{
value: dailyReduce.value / 100,
- name: '昨日新增消耗:' + dailyReduce.value / 100,
+ name: t('workbench.yesterdayNewConsume') + dailyReduce.value / 100,
// name: '昨日新增消耗:' + 1234567890,
itemStyle: {color: '#9469D1'}
},
{
value: dailyRefund.value / 100,
- name: '昨日新增退款:' + dailyRefund.value / 100,
+ name: t('workbench.yesterdayNewRefund') + dailyRefund.value / 100,
itemStyle: {color: '#B8DB6E'}
}
]
@@ -498,7 +502,7 @@ const initRechargePeopleChart = () => {
data: [
{
value: ydayRechargeNum.value,
- name: '昨日充值人数:' + ydayRechargeNum.value,
+ name: t('workbench.yesterdayRechargePeople') + ydayRechargeNum.value,
itemStyle: {color: '#65C9C9'}
},
],
@@ -513,7 +517,7 @@ const initRechargePeopleChart = () => {
data: [
{
value: firstRecharge.value,
- name: '其中首充:' + firstRecharge.value,
+ name: t('workbench.whereFirstRecharge') + firstRecharge.value,
itemStyle: {color: '#9469D1'}
},
{
diff --git a/src/views/workspace/index.vue b/src/views/workspace/index.vue
index e808213..d052dc3 100644
--- a/src/views/workspace/index.vue
+++ b/src/views/workspace/index.vue
@@ -1,7 +1,7 @@
@@ -15,7 +15,7 @@
- 加载中...
+ {{ t('workbench.loading') }}
@@ -30,6 +30,9 @@ import GoldGraphMarkets from "@/components/workspace/GoldGraphMarkets.vue";
import API from "@/util/http.js";
import {onMounted, ref} from "vue";
import GoldGraph from "@/components/workspace/GoldGraph.vue";
+import { useI18n } from 'vue-i18n'
+
+const { t } = useI18n()
const GraphFlag = ref();
const loading = ref(true); // 新增加载状态