Преглед на файлове

Merge branch 'master' of https://git.nanodreamtech.com/wkw/wallet_app

wkw преди 2 седмици
родител
ревизия
05a8d0ef8a

+ 2 - 1
.gitignore

@@ -29,4 +29,5 @@ coverage
 
 *.tsbuildinfo
 android
-ios
+ios
+bin

+ 8 - 0
README.md

@@ -86,4 +86,12 @@ ext {
     androidxEspressoCoreVersion = '3.6.1'
     cordovaAndroidVersion = '10.1.1'
 }
+```
+
+```
+{
+  "version": "1.0.2",               // 新 JS bundle 的版本号
+  "url": "https://yourdomain.com/updates/v1.0.2.zip", // 真实 ZIP 包地址
+  "minBinaryVersion": "1.0.0"       // 要求原生壳最低版本
+}
 ```

+ 1 - 0
android/app/capacitor.build.gradle

@@ -18,6 +18,7 @@ dependencies {
     implementation project(':capacitor-push-notifications')
     implementation project(':capacitor-status-bar')
     implementation project(':capacitor-toast')
+    implementation project(':capgo-capacitor-updater')
 
 }
 

+ 7 - 2
capacitor.config.ts

@@ -1,7 +1,7 @@
 import { CapacitorConfig } from '@capacitor/cli';
-// import { updateVersion } from './scripts/sync-version';
+import { updateVersion } from './scripts/sync-version';
 
-// updateVersion()
+updateVersion()
 
 
 
@@ -21,6 +21,11 @@ const config: CapacitorConfig = {
     // 注意:原JSON中嵌套了重复的"plugins"键,已修正
     PushNotifications: {
       presentationOptions: ['badge', 'sound', 'alert']
+    },
+
+    CapacitorUpdater: {
+      autoUpdate: false, // 自行控制 
+      statsUrl: '',   // 统计上报: POST /api/stats 接收 JSON(内容是插件的事件日志),返回 200 即可。
     }
   },
   // iOS专属配置

+ 5 - 1
package.json

@@ -5,13 +5,14 @@
   "type": "module",
   "scripts": {
     "dev": "vite --host",
+    "updata": "node ./updataSetVersion.js",
     "s": "cross-env DAPP_BUILD=1 npx cap sync",
     "a": "npx cap run android --live-reload --host=192.168.0.59 --port=5173",
     "app": "npx cap run android --live-reload --host=192.168.0.70 --port=5173",
     "ios": "npx cap run ios --live-reload --host=192.168.0.59 --port=5173",
     "android": "npx cap add android && npx cap sync",
     "android:clean": "(cd android && ./gradlew clean)",
-    "build": "vite build",
+    "build": "vite build && npm run updata",
     "build:apk": "npm run s && cross-env DAPP_BUILD=1 npx cap copy  && (cd android && ./gradlew assembleRelease)",
     "build:apk:windows": "vite build && npx cap copy && cd android && .\\gradlew.bat build",
     "icon": "npx capacitor-assets generate --android",
@@ -31,6 +32,7 @@
     "@capacitor/push-notifications": "^7.0.1",
     "@capacitor/status-bar": "^7.0.1",
     "@capacitor/toast": "^7.0.1",
+    "@capgo/capacitor-updater": "^7.8.7",
     "axios": "^1.10.0",
     "clipboard": "^2.0.11",
     "crypto-js": "^4.2.0",
@@ -41,6 +43,7 @@
     "pinia": "^3.0.1",
     "pinia-plugin-persistedstate": "^4.4.1",
     "qrcode.vue": "^3.6.0",
+    "semver": "^7.7.2",
     "sharp": "^0.34.2",
     "typescript": "^5.8.3",
     "vant": "^4.9.20",
@@ -55,6 +58,7 @@
     "@capacitor/assets": "^3.0.5",
     "@vitejs/plugin-vue": "^5.2.3",
     "@vitejs/plugin-vue-jsx": "^5.0.1",
+    "adm-zip": "^0.5.16",
     "code-inspector-plugin": "^0.20.12",
     "cordova-plugin-console": "^1.1.0",
     "cross-env": "^7.0.3",

+ 11 - 4
src/App.vue

@@ -12,15 +12,15 @@
   </div>
 </template>
 
-<script setup> 
-import { appStart } from "@/hooks/updataApp";
+<script setup>  
+import { checkAndUpdate } from "@/updater/index";
+
 import { getNotchHeight } from "@/utils/statusBar";
 const route = useRoute();
 const router = useRouter();
 
 const height = ref(0);
-const notchStyle = ref({});
-// const appMainViewStyle = ref({});
+const notchStyle = ref({}); 
 
 const appMainViewStyle = computed(() => {
   let mainHeight = 0
@@ -54,7 +54,14 @@ onBeforeMount(async () => {
   notchStyle.value = {
     paddingTop: `${height.value}px`,
   };
+
+
+ 
 });
+
+onMounted(() => { 
+  checkAndUpdate()
+})
 </script>
 
 <style lang="less">

+ 0 - 37
src/hooks/updataApp.js

@@ -1,37 +0,0 @@
-import { App } from "@capacitor/app";
-import { Capacitor } from "@capacitor/core";
-
- 
-
-// 检测是否有更新包
-export const checkUpdate = async () => {
-  // 判断是否是web端
-  if (Capacitor.getPlatform() === "web") {
-    return;
-  }
-  // 获取当前应用版本
-  const { version } = await App.getInfo();
-  console.log("当前版本:", info);
-
-  // 从服务器获取最新版本信息
-  const response = await fetch('https://your-server.com/api/check-update');
-  const serverData = await response.json();
-
-   // 对比版本号(建议使用语义化版本比较库,如 compare-versions)
-  if (compareVersions(serverData.latestVersion, version) > 0) {
-    console.log('发现新版本:', serverData.latestVersion);
-    return serverData; // 返回更新信息
-  }
-  return null; // 无更新
-};
-
-// 示例:在应用启动时检查
-export const appStart = async () => {
-  // const updateInfo = await checkUpdate();
-  // if (updateInfo) {
-  // showUpdateDialog(updateInfo); // 提示用户更新
-  // }
-
-  const dd = await checkUpdate();
-  console.log("当前版本:", dd);
-};

+ 7 - 0
src/i18n/zhHk/form.js

@@ -16,4 +16,11 @@ export default {
 
   LoginFailed: "登陸失敗",
   Loading: "加載中...",
+  BackupWallet:"備份錢包",
+  PleaseDoNotTakeScreenshots:"請勿截圖",
+  IfAnyoneObtainsYourMnemonicPhraseTheyWillDirectlyAccessYourAssetsPleaseCopyDownTheMnemonicPhraseAndStoreItInASafePlace:"如果有人獲取了你的助記詞將直接獲取你的資產請抄下助記詞並存放在安全的地方",
+  ImportingThePrivateKey:"私鑰導入",
+  ImportByEnteringThePlaintextPrivateKeyOrScanningTheQRCode:"通過輸入明文私鑰或掃描二維碼進行導入",
+  ImportMnemonicWords:"助記詞導入",
+  ImportByEnteringTheMnemonicPhraseOrScanningTheQRCode:"通過輸入助記詞或掃描二維碼進行導入",
 };

+ 52 - 1
src/i18n/zhHk/me.js

@@ -1,3 +1,54 @@
 export default {
-    
+    SelectiveNetwork:"選擇網絡",
+    AddressName:"地址名稱",
+    PleaseEnterTheNameOfTheAddress:"請輸入地址名稱",
+    EnterAddress:"輸入地址",
+    PleaseEnterTheAddress:"請輸入地址",
+    Notarize:"確認",
+    NoNewAddressAvailableAtTheMoment:"暫無新地址",
+    AddANewAddressTemporarily:"暫添加新地址",
+    AddANodeDividendAddressWhitelistTemporarily:"暫添添加節點分紅地址白名單",
+    PleaseEnterTheCompleteAddressOfYouWallet:"暫添請輸入錢包完整地址",
+    AddToTheWhitelist:"加入白名單",
+    RemoveTheWhitelist:"移除白名單",
+    JoinTheAdministratorGroup:"加入管理員",
+    RemoveAdministrator:"移除管理員",
+    AmountOfPledge:"質押數",
+    TheNumberThatCanBeClaimed:"可領取數",
+    TheEndTimeOfTheEarningsCycle:"收益週期截止時間",
+    ActivateTheGenesisNode:"激活創世節點",
+    ClaimSTT:"領取STT",
+    CollectionRecord:"領取記錄",
+    NoRecordsYet:"暂无记录!",
+    TemporarilyChangeTheNickname:"修改暱稱",
+    ScanTheQRCodeAboveForAMomentAndAddMeAsAFriend:"掃一掃上面的二維碼,加我爲好友",
+    PleaseEnterYourNickname:"請輸入暱稱",
+    Cancel:"取消",
+    Sure:"確定",
+    ModifyTheAvatar:"修改頭像",
+    AddressBook:"地址薄",
+    Downloadlink:"下載鏈接",
+    WalletManagement:"錢包管理",
+    PersonalInformation:"個人資料",
+    CurrentPriceSTT:"當前價(STT)",
+    WalletBalanceWGT:"錢包餘額(WGT)",
+    Buy:"買入",
+    CurrentCommission:"當前委託",
+    MarketTrading:"大盤成交",
+    SellOrder:"賣單",
+    Value:"價值",
+    Quantity:"數量",
+    Time:"時間",
+    Price:"價",
+    Revoke:"撤銷",
+    SalesOrderNumber:"賣單號",
+    PaymentNumber:"買單號",
+    TransactionPrice:"成交價",
+    TransactionDetails:"交易詳情",
+    AreYouSureToSubmit:"確認提交嗎?",
+    TheOtherPartyIsAddress:"對方地址",
+    PaymentAddress:"付款地址",
+    ReceivingAddress:"收款地址",
+    MinerIsfee:"礦工費",
+    IsItCertainToBeRevoked:"確定撤銷嗎?",
 };

+ 1 - 1
src/i18n/zhHk/settings.js

@@ -1,7 +1,7 @@
 export default {
   ServiceAndPrivacyPolicy: "服務條款及隱私政策",
   OfficialWebsite: "官方網站",
-  VersionUpdate: "版本更新",
+  VersionUpdate: "版本",
 
   Language: "語言",
   MonetaryUnit: "貨幣單位",

+ 38 - 1
src/i18n/zhHk/transaction.js

@@ -1,3 +1,40 @@
 export default {
-
+    CurrentPriceSTT:"當前價(STT)",
+    WalletBalanceWGT:"錢包餘額(WGT)",
+    Buy:"買入",
+    CurrentCommission:"當前委託",
+    MarketTrading:"大盤成交",
+    SellOrder:"賣單",
+    Value:"價值",
+    Quantity:"數量",
+    Time:"時間",
+    Price:"價",
+    Revoke:"撤銷",
+    SalesOrderNumber:"賣單號",
+    PaymentNumber:"買單號",
+    TransactionPrice:"成交價",
+    TransactionDetails:"交易詳情",
+    AreYouSureToSubmit:"確認提交嗎?",
+    TheOtherPartyIsAddress:"對方地址",
+    PaymentAddress:"付款地址",
+    ReceivingAddress:"收款地址",
+    MinerIsfee:"礦工費",
+    IsItCertainToBeRevoked:"確定撤銷嗎?",
+    PurchaseQuantitySTT:"買入數量(STT)",
+    OrderQuantityWGT:"委託數量(WGT)",
+    ReservationQuantityWGT:"預約數量(WGT)",
+    PleaseEnter:"請輸入",
+    BuyWGT:"買入WGT",
+    OrderToSellWGT:"委託賣出WGT",
+    BookNow:"立即預約",
+    Reservation:"預約",
+    Entrusted:"委託",
+    Current:"當前",
+    UnderCommission:"委託中",
+    Claim:"領取",
+    Sell:"賣出",
+    Buy:"買入",
+    ConfirmTheExchange:"確認兌換",
+    ExchangeInProgress:"兌換中…",
+    RedemptionSuccessful:"兌換成功",
 };

+ 56 - 0
src/i18n/zhHk/wallet.js

@@ -0,0 +1,56 @@
+export default {
+    ACCCollection:"ACC收款",
+    Copy:"複製",
+    Selectthecurrency:"選擇幣種",
+    DeliveryAddress:"收貨地址",
+    PleaseEnterTheDeliveryAddress:"請輸入收貨地址",
+    TransfeQuantity:"轉賬數量",
+    All:"全部",
+    DeliverAddress:"收貨地址",
+    SelectTheCurrency:"選擇幣種",
+    TransactionDetails:"交易詳情",
+    PaymentAddress:"付款地址:",
+    ReceivingAddress:"收款地址:",
+    MinerIsFee:"礦工費:",
+    PleaseEnterThePassword:"請輸入密碼",
+    Cancel:"取消",
+    Sure:"確定",
+    WalletName:"錢包名稱",
+    ViewThePrivateKey:"查看私鑰",
+    CheckTheMnemonicPhrase:"查看助記詞",
+    DeleteTheWallet:"刪除錢包",
+    PleaseEnterTheWalletName:"請輸入錢包名稱",
+    PleaseEnterTheCorrectPassword:"請輸入正確的密碼",
+    AvailableGoldCoins:"可用元寶",
+    ExchangeForGoldIngots:"兌換元寶",
+    FreezeTheGoldIngots:"凍結元寶",
+    WithdrawalTransferOut:"取款(轉出)",
+    Details:"明細",
+    Explanation:"說明",
+    Submit:"提交",
+    PleaseEnterAValidQuantity:"請輸入有效的數量",
+    TheQuantityMusBeGreaterThan0:"數量必須大於0",
+    Yuanbao:"元寶",
+    TheInputQuantityCannotExceedTheAvailableQuantity:"輸入數量不能大於可用數量",
+    CurrentBalanceOfTheWGTWallet:"當前WGT錢包餘額",
+    TheCurrentTotalAmountOfGoldIngots:"當前元寶總額",
+    PleaseEnterTheQuantityOfWgt:"請輸入wgt數量",
+    PleaseEnterTheQuantityOfGoldIngots:"請輸入元寶數量",
+    TheQuantityOfTheExchangeCurrencyWillBeConvertedIntoTheCorrespondingGoldCoinsBasedOnTheCurrentValueAndCreditedToTheAccountInRealTime:"兌換的幣種數量,將按照當前價值轉換成對應元寶實時到賬",
+    TheAmountOfGoldCoinsWithdrawnWillBeConvertedIntoTheExchangedCurrencyBasedOnTheCurrentValueAndCrediteToTheAccountInRealTime:"取款的元寶數量,按照當前價值轉換成兌換的幣種實時到賬",
+    GoldCoinExchange:"元寶兌換",
+    Collection:"收款",
+    Transfer:"轉賬",
+    Competition:"競賽",
+    BlockBrowser:"區塊瀏覽器",
+    Token:"代幣",
+    SelectWallet:"選擇錢包",
+    AddWallet:"添加錢包",
+    AddTokens:"添加代幣",
+    HistoricalRecords:"歷史記錄",
+    Success:"成功",
+    TransferAmount:"轉賬金額",
+    Time:"時間",
+    Send:"發送",
+    Receive:"接收",
+};

+ 67 - 0
src/updater/index.js

@@ -0,0 +1,67 @@
+import { CapacitorUpdater } from "@capgo/capacitor-updater";
+import { App } from "@capacitor/app";
+import semver from "semver";
+import { showDialog } from "vant";
+
+const HOST = "https://nim.angeltokens.io/updates/down/";
+const UPDATE_URL = HOST + "update.json";
+
+// 检查并更新: shasum -a 256
+export async function checkAndUpdate() {
+  // 判断是web 还是 ios
+  if (Capacitor.getPlatform() === "web") {
+    console.log("web 端不支持更新");
+    return;
+  }
+
+  // 1. 拉取元数据
+  const meta = await fetch(UPDATE_URL).then((r) => r.json());
+  console.log("更新", meta);
+
+  // 2. 基本校验
+  // 判断是ios 
+  if (Capacitor.getPlatform() === "ios") {
+    await CapacitorUpdater.ready(); // 等插件完全就绪
+  }else{
+    await new Promise(r => setTimeout(r, 3000));
+  }
+  const current = await CapacitorUpdater.current();
+  const { version } = await App.getInfo();
+
+  console.log("版本:", current.bundle.version, meta.version);
+  if (!current.bundle.version ||  current.bundle.version == "builtin") {
+    console.log("无新版本!");
+    return;
+  }
+  if (semver.gte(current.bundle.version, meta.version)) {
+    console.log("无新版本");
+    return;
+  }
+  if (version && semver.lt(version, meta.minBinaryVersion)) {
+    console.log("壳子太旧");
+    return;
+  }
+  // 4. 下载(带进度)
+  const update = await CapacitorUpdater.download({
+    url: `${HOST}v${meta.version}.zip`,
+    version: meta.version,
+    checksum: meta.checksum,
+  });
+
+  // 通知
+  if (meta.mandatory) {
+    await showDialog({
+      title: `v ${meta.version} 已發布`,
+      confirmButtonText: "立即體驗",
+      message: meta.upDataDescription,
+    }).then(async () => {
+      await CapacitorUpdater.set(update); // 设置新版本
+      console.log("✅ 已切换到新版本,准备重启");
+      await App.exitApp(); // 冷启动加载新 bundle
+    });
+  } else {
+    await CapacitorUpdater.set(update); // 设置新版本
+    console.log("✅ 已切换到新版本,准备重启");
+    await App.exitApp(); // 冷启动加载新 bundle
+  }
+}

+ 8 - 0
src/updater/update.json

@@ -0,0 +1,8 @@
+{
+  "version": "1.0.9",
+  "releaseDate": "2025-07-29 12:00:00", 
+  "checksum": "dbe314c14114dfce518bbc876ef71cf0827871250d88e5a20e54800f79097eca",
+  "minBinaryVersion": "1.0.0",
+  "mandatory": true,
+  "upDataDescription":"✨修正一些錯誤。。。。!!!"
+}

+ 3 - 3
src/views/login/createWallet/index.vue

@@ -56,10 +56,10 @@
   </van-form>
   <van-popup v-model:show="show" round position="bottom" style="height:387px">
     <div class="pop-content">
-      <div class="pop-title">备份钱包</div>
+      <div class="pop-title">{{ $t("form.BackupWallet") }}</div>
       <svg-icon class="pop-icon" name="bf"/>
-      <div class="pop-subtitle">请勿截图</div>
-      <div class="pop-text">如果有人获取了你的助记词将直接获取你的资产请抄下助记词并存放在安全的地方</div>
+      <div class="pop-subtitle">{{ $t("form.PleaseDoNotTakeScreenshots") }}</div>
+      <div class="pop-text">{{ $t("form.IfAnyoneObtainsYourMnemonicPhraseTheyWillDirectlyAccessYourAssetsPleaseCopyDownTheMnemonicPhraseAndStoreItInASafePlace") }}</div>
       <van-button class="pop-btn" round block @click="goTo">好的</van-button>
     </div>
   </van-popup>

+ 4 - 4
src/views/login/importMethod/index.vue

@@ -22,12 +22,12 @@
 const router = useRouter();
 const tabList = [
     {
-        name:'私鑰導入',
-        text:'通過輸入明文私鑰或掃描二維碼進行導入'
+        name:$t('form.ImportingThePrivateKey'),
+        text:$t('form.ImportByEnteringThePlaintextPrivateKeyOrScanningTheQRCode'),
     },
     {
-        name:'助記詞導入',
-        text:'通過輸入助記詞或掃描二維碼進行導入'
+        name:$t('form.ImportMnemonicWords'),
+        text:$t('form.ImportByEnteringTheMnemonicPhraseOrScanningTheQRCode'),
     },
     // {
     //     name:'keystore導入',

+ 7 - 7
src/views/me/addAddress/index.vue

@@ -2,7 +2,7 @@
     <div class="container">
         <div class="content">
             <div class="card-box">
-                <div class="card-title">选择网络</div>
+                <div class="card-title">{{ $t('me.SelectiveNetwork') }}</div>
                 <div class="card-input" style="justify-content: space-between;" @click="showWallet = true">
                     <div class="card-input-lf">
                         <van-image width="30px" height="30px" round :src="selectTokenInfo.logo"/>
@@ -12,18 +12,18 @@
                 </div>
             </div>
             <div class="card-box">
-                <div class="card-title">地址名称</div>
+                <div class="card-title">{{ $t('me.AddressName') }}</div>
                 <div class="card-input">
-                    <van-field v-model="addressName" placeholder="请输入地址名称" />
+                    <van-field v-model="addressName" :placeholder="$t('me.PleaseEnterTheNameOfTheAddress')" />
                 </div>
             </div>
             <div class="card-box">
-                <div class="card-title">输入地址</div>
+                <div class="card-title">{{ $t('me.EnterAddress') }}</div>
                 <div class="card-input" style="height:100%">
                     <van-field 
                         type="textarea"
                         v-model="walletAddress"
-                        placeholder="请输入地址"
+                        :placeholder="$t('me.PleaseEnterTheAddress')"
                         rows="1"
                         :autosize="true"
                     >
@@ -34,12 +34,12 @@
                 </div>
             </div>
         </div>
-        <van-button class="footer-btn" type="primary" size="large" :disabled="isConfirm" @click="confirm">确认</van-button>
+        <van-button class="footer-btn" type="primary" size="large" :disabled="isConfirm" @click="confirm">{{ $t('me.notarize') }}</van-button>
         <van-popup v-model:show="showWallet" position="bottom" round style="height:400px">
             <div class="pop-content" style="height:400px">
                 <div class="pop-title">
                     <svg-icon style="width: 24px; height: 24px;" name="left-arrow" @click="showWallet = false"/>
-                    <div class="title">选择网络</div>
+                    <div class="title">{{ $t('me.SelectiveNetwork') }}</div>
                 </div>
                 <div class="list-ul">
                     <div class="list-li" v-for="item in hotTokensList" @click="changeList(item)" :key="item.name">

+ 2 - 2
src/views/me/addressManagement/index.vue

@@ -24,10 +24,10 @@
             </div>
             <div class="no-more" v-if="list.length == 0">
                 <svg-icon style="width: 302px; height: 222px;" name="no-address"/>
-                <div class="no-more-text">暂无新地址</div>
+                <div class="no-more-text">{{ $t('me.NoNewAddressAvailableAtTheMoment') }}</div>
             </div>
         </div>
-        <van-button class="footer-btn" size="large" @click="goToAdd">添加新地址</van-button>
+        <van-button class="footer-btn" size="large" @click="goToAdd">{{ $t('me.AddANewAddressTemporarily') }}</van-button>
     </div>
 </template>
 

+ 7 - 7
src/views/me/administratorSettings/index.vue

@@ -1,14 +1,14 @@
 <template>
     <div>
-        <div class="title">添加节点分红地址白名单</div>
+        <div class="title">{{ $t('me.AddANodeDividendAddressWhitelistTemporarily') }}</div>
         <div class="input-box">
-            <van-field v-model="message" placeholder="请输入钱包完整地址" />
+            <van-field v-model="message" :placeholder="$t('me.PleaseEnterTheCompleteAddressOfYouWallet')" />
         </div>
         <div class="admin-btn">
-            <van-button class="add" @click="changeFun(1)">加入白名单</van-button>
-            <van-button class="delete" color="#4765DD" @click="changeFun(2)">移除白名单</van-button>
-            <van-button class="add" @click="changeFun(3)">加入管理员</van-button>
-            <van-button class="delete" color="#4765DD" @click="changeFun(4)">移除管理员</van-button>
+            <van-button class="add" @click="changeFun(1)">{{ $t('me.AddToTheWhitelist') }}</van-button>
+            <van-button class="delete" color="#4765DD" @click="changeFun(2)">{{ $t('me.RemoveTheWhitelist') }}</van-button>
+            <van-button class="add" @click="changeFun(3)">{{ $t('me.JoinTheAdministratorGroup') }}</van-button>
+            <van-button class="delete" color="#4765DD" @click="changeFun(4)">{{ $t('me.RemoveAdministrator') }}</van-button>
         </div>
     </div>
 </template>
@@ -19,7 +19,7 @@ import { showToast } from 'vant';
 const message = ref('');
 const changeFun = async (type) => {
     if (!message.value) {
-        showToast('请输入地址');
+        showToast($t('me.PleaseEnterTheAddress'));
 	    return;
 	}
     let res = ''

+ 4 - 4
src/views/me/index.vue

@@ -23,25 +23,25 @@
         <van-col span="6"  >
           <div class="user-bar-icon-box">
             <svg-icon class="user-bar-icon"  name="address-book" @click="goToaPage('meAddressManagement')"/> 
-            <span class="user-info-text">地址薄</span> 
+            <span class="user-info-text">{{ $t('me.AddressBook') }}</span> 
           </div>
         </van-col>
         <van-col span="6">
           <div class="user-bar-icon-box">
             <svg-icon class="user-bar-icon"  name="bar-url" @click="goToaPage('download')"/> 
-            <span class="user-info-text">下载链接</span> 
+            <span class="user-info-text">{{ $t('me.Downloadlink') }}</span> 
           </div>
         </van-col>
         <van-col span="6">
           <div class="user-bar-icon-box" @click="goToaPage('walletManagement')">
             <svg-icon class="user-bar-icon"  name="wallet"/> 
-            <span class="user-info-text">钱包管理</span> 
+            <span class="user-info-text">{{ $t('me.WalletManagement') }}</span> 
           </div>
         </van-col>
         <van-col span="6">
           <div class="user-bar-icon-box" @click="goToaPage('personalInformation')">
             <svg-icon class="user-bar-icon"  name="id-card"/> 
-            <span class="user-info-text">个人资料</span> 
+            <span class="user-info-text">{{ $t('me.PersonalInformation') }}</span> 
           </div>
         </van-col>
       </van-row>

+ 7 - 7
src/views/me/nodeDividend/index.vue

@@ -11,24 +11,24 @@
                         <svg-icon style="width: 50px; height: 50px;" name="pledge" />
                         <div class="box-item-text">
                             <div>{{ userData?.security_amount >= 10000 ? (userData.security_amount / 10000).toFixed(0) + 'W' : userData?.security_amount || 0 }}</div>
-                            <div>質押數</div>
+                            <div>{{ $t('me.AmountOfPledge') }}</div>
                         </div>
                     </div>
                     <div class="box-item-ri">
                         <svg-icon style="width: 50px; height: 50px;" name="available" />
                         <div class="box-item-text">
                             <div>{{userData?.stt || 0}} STT</div>
-                            <div>可領取數</div>
+                            <div>{{ $t('me.TheNumberThatCanBeClaimed') }}</div>
                         </div>
                     </div>
                 </div>
-                <div class="deadline">收益週期截止時間:{{userData?.end_time}}</div>
+                <div class="deadline">{{ $t('me.TheEndTimeOfTheEarningsCycle') }}:{{userData?.end_time}}</div>
                 <div class="btn">
-                    <van-button class="activate" color="#4765DD" :disabled="isDisabled" @click="changeactivate">激活創世節點</van-button>
-                    <van-button class="receive" color="#4765DD" :disabled="isLQDisabled" @click="collect">領取STT</van-button>
+                    <van-button class="activate" color="#4765DD" :disabled="isDisabled" @click="changeactivate">{{ $t('me.ActivateTheGenesisNode') }}</van-button>
+                    <van-button class="receive" color="#4765DD" :disabled="isLQDisabled" @click="collect">{{ $t('me.ClaimSTT') }}</van-button>
                 </div>
                 <div class="list-box">
-                    <div class="receive-record">領取記錄</div>
+                    <div class="receive-record">{{ $t('me.CollectionRecord') }}</div>
                     <div class="list-ul">
                         <van-pull-refresh v-model="loading" @refresh="onRefresh" style="height:100%">
                             <template v-if="list && list.length > 0 && !noMore">
@@ -38,7 +38,7 @@
                                 </div>
                             </template>
                             <template v-if="noMore">
-                                <view style="text-align: center;">暂无记录!</view>
+                                <view style="text-align: center;">{{ $t('me.NoRecordsYet') }}</view>
                             </template>
                         </van-pull-refresh>
                     </div>

+ 6 - 6
src/views/me/personalInformation/index.vue

@@ -10,12 +10,12 @@
     </div>
     <van-list class="user-bar-list">
       <van-cell
-        title="修改暱稱"
+        :title="$t('me.TemporarilyChangeTheNickname')"
         :value="walletStore.username"
         is-link
         @click="show = true"
       ></van-cell>
-      <van-cell class="user-bar-list-last" title="修改頭像">
+      <van-cell class="user-bar-list-last" :title="$t('me.ModifyTheAvatar')">
         <template #right-icon>
           <van-uploader :after-read="afterRead">
             <van-icon name="arrow" color="#969799" size="16" />
@@ -30,18 +30,18 @@
         :margin="2"
         background="transparent"
       />
-      <div class="text">掃一掃上面的二維碼,加我爲好友</div>
+      <div class="text">{{ $t('me.ScanTheQRCodeAboveForAMomentAndAddMeAsAFriend') }}</div>
     </div>
     <van-popup v-model:show="show" :style="{ borderRadius: '25px' }">
       <div class="pop-content">
-        <div class="pop-title">請輸入暱稱</div>
+        <div class="pop-title">{{ $t('me.PleaseEnterYourNickname') }}</div>
         <van-field v-model="nickname" class="pop-input" />
         <div class="pop-btn">
           <van-button type="default" class="btn cancel" @click="show = false"
-            >取消</van-button
+            >{{ $t('me.Cancel') }}</van-button
           >
           <van-button type="default" class="btn confirm" @click="updateUserName"
-            >確定</van-button
+            >{{ $t('me.Sure') }}</van-button
           >
         </div>
       </div>

+ 19 - 4
src/views/settings/aboutUs/index.vue

@@ -3,7 +3,7 @@
     <div class="logo-box">
       <svg-icon name="acc_logo" class="acc-logo" />
       <span class="logo-text">Angel Token</span>
-      <span class="logo-version">1.0.0</span>
+      <span class="logo-version">{{ version }}</span>
     </div>
 
     <van-list class="user-bar-list">
@@ -29,17 +29,32 @@
 </template>
 
 <script setup> 
+import { CapacitorUpdater } from "@capgo/capacitor-updater"
+
 const router = useRouter();
+const version = ref('');
 
-const vanListConfig = [
+const vanListConfig = ref([
   { title: $t('settings.ServiceAndPrivacyPolicy'), icon:"ingot",  url: 'agreement' },
   { title: $t('settings.OfficialWebsite'),   txt:"https://wallet.angeltokens.io" },
-  { title: $t('settings.VersionUpdate'),   url: 'nodeDividend' },
-]
+  { title: $t('settings.VersionUpdate'),   txt: '' },
+])
 
 const evGoPath = (path)=>{
   if(path == "agreement") router.push(path)
 }
+onMounted(async ()=>{
+  const current = await CapacitorUpdater.current();
+
+  if(current.bundle.version == "builtin" || current.bundle.version == ""){
+    version.value = "1.0.0"
+    vanListConfig.value[2].txt = "1.0.0" 
+    return
+  }
+  version.value = current.bundle.version
+  vanListConfig.value[2].txt = current.bundle.version
+   
+})
 
 </script>
 

+ 5 - 5
src/views/transaction/index.vue

@@ -5,7 +5,7 @@
         <!--  -->
         <div class="card-box">
           <div class="box-item m12">
-            <div class="box-item-lf-text">卖出</div>
+            <div class="box-item-lf-text">{{ $t('transaction.Sell') }}</div>
             <div class="box-item-ri-text">
               <svg-icon style="width: 16px; height: 16px;margin-right: 2px;" name="qb" />
               <span>{{STTLIST.balance}}</span>
@@ -33,7 +33,7 @@
         <!--  -->
         <div class="card-box">
           <div class="box-item m12">
-            <div class="box-item-lf-text">买入</div>
+            <div class="box-item-lf-text">{{ $t('transaction.Buy') }}</div>
             <div class="box-item-ri-text">
               <svg-icon style="width: 16px; height: 16px;margin-right: 2px;" name="qb" />
               <span>{{ACCLIST.balance}}</span>
@@ -59,7 +59,7 @@
           class="btn" 
           :class="isSellValid ? 'active-btn' : ''" 
           :disabled="!isSellValid"  
-          type="primary" size="large" @click="confirm">确认兑换
+          type="primary" size="large" @click="confirm">{{ $t('transaction.ConfirmTheExchange') }}
         </van-button>
       </div>
       <div class="information-box">
@@ -129,14 +129,14 @@ const confirm = async () => {
     _y:iv
   }
   showLoadingToast({
-    message: '兑换中…',
+    message: $t('transaction.ExchangeInProgress'),
     forbidClick: true,
     duration: 0,
   });
   params = generateSign(params);
   const res = await stt2acc(params);
   if(res.ret){
-    showToast('兑换成功');
+    showToast($t('transaction.RedemptionSuccessful'));
     gethotTokens();
     sell.value = ''
   }

+ 38 - 38
src/views/transaction/jys/index.vue

@@ -11,19 +11,19 @@
             </div>
             <div class="information-box">
                 <div class="information-ul">
-                    <div class="information-title">当前价(STT)</div>
+                    <div class="information-title">{{ $t('transaction.CurrentPriceSTT') }}</div>
                     <div class="rate">{{formatToFixed4(WGTLIST.rate)}}</div>
                     <div class="cny">≈CNY {{multiplyAndFormat4(WGTLIST.rate,WGTLIST.cny)}}</div>
-                    <div class="balance">钱包余额(WGT) {{formatToFixed4(WGTLIST.balance)}}</div>
+                    <div class="balance">{{ $t('transaction.WalletBalanceWGT') }} {{formatToFixed4(WGTLIST.balance)}}</div>
                 </div>
                 <div class="information-ul">
-                    <div class="information-title">{{tabActive == 0?'买入数量(STT)':tabActive == 1?'委托数量(WGT)':'预约数量(WGT)'}}</div>
-                    <van-field v-model="valueInput" class="rate" :placeholder="`请输入${tabActive == 0?'STT':'WGT'}数量`"/>
+                    <div class="information-title">{{tabActive == 0?$t('transaction.PurchaseQuantitySTT'):tabActive == 1?$t('transaction.OrderQuantityWGT'):$t('transaction.WalletBalanceWGT')}}</div>
+                    <van-field v-model="valueInput" class="rate" :placeholder="`$t('transaction.PleaseEnter')${tabActive == 0?'STT':'WGT'}{{ $t('transaction.Quantity') }}`"/>
                     <div class="cny">≈ {{sttAmount.toFixed(4)}} {{ tabActive == 0 ? 'WGT' : 'STT' }}</div>
-                    <div class="balance">钱包余额(STT) {{formatToFixed4(STTLIST.balance)}}</div>
+                    <div class="balance">{{ $t('transaction.WalletBalanceWGT') }} {{formatToFixed4(STTLIST.balance)}}</div>
                 </div>
             </div>
-            <van-button class="information-btn" type="primary" size="large" @click="changeBtn">{{tabActive == 0?'买入WGT':tabActive == 1?'委托卖出WGT':'立即预约'}}</van-button>
+            <van-button class="information-btn" type="primary" size="large" @click="changeBtn">{{tabActive == 0?$t('transaction.BuyWGT'):tabActive == 1?$t('transaction.OrderToSellWGT'):$t('transaction.BookNow')}}</van-button>
             <!-- 广告 -->
             <div class="card-box">
                 <div class="card-ul">
@@ -35,7 +35,7 @@
                         <div class="list-text">{{ formatToFixed4(item?.money) }}</div>
                         <div class="list-text">{{ formatToFixed4(item?.amount) }}</div>
                         <div class="list-text">
-                            <div class="list-btn" @click="purchase(item)">买入</div>
+                            <div class="list-btn" @click="purchase(item)">{{ $t('transaction.Buy') }}</div>
                         </div>
                     </div>
                 </div>
@@ -43,29 +43,29 @@
             <!--  -->
             <div class="delegation" v-if="tabActive != 0">
                 <div class="delegation-label">
-                    <div :class="delegationIndex == 1?'active-label':''" @click="delegationIndex = 1">当前委托</div>
-                    <div :class="delegationIndex == 2?'active-label':''" @click="delegationIndex = 2">大盘成交</div>
+                    <div :class="delegationIndex == 1?'active-label':''" @click="delegationIndex = 1">{{ $t('transaction.CurrentCommission') }}</div>
+                    <div :class="delegationIndex == 2?'active-label':''" @click="delegationIndex = 2">{{ $t('transaction.MarketTrading') }}</div>
                 </div>
                 <div class="delegation-ul">
                     <template v-if="delegationIndex == 1">
                         <div class="delegation-li" v-for="item in entrustMylist">
                             <div>
-                                <div class="m4"><text class="cell-label green">{{isSubscribe?'预约':''}}卖单</text>{{ formatAddress(item?.seller_trans_hash) }}</div>
-                                <div class="m4 red"><text class="cell-label">{{isSubscribe?'预约':'委托'}}价值</text>{{formatToFixed4(item?.money)}} STT</div>
-                                <div class="m4 blue"><text class="cell-label">{{isSubscribe?'预约':'委托'}}数量</text>{{ formatToFixed4(item?.amount) }} WGT</div>
-                                <div><text class="cell-label">{{isSubscribe?'预约':'委托'}}时间</text>{{item.created_at}}</div>
+                                <div class="m4"><text class="cell-label green">{{isSubscribe?$t('transaction.Reservation'):''}}{{ $t('transaction.SellOrder') }}</text>{{ formatAddress(item?.seller_trans_hash) }}</div>
+                                <div class="m4 red"><text class="cell-label">{{isSubscribe?$t('transaction.Reservation'):$t('transaction.Entrusted')}}{{ $t('transaction.Value') }}</text>{{formatToFixed4(item?.money)}} STT</div>
+                                <div class="m4 blue"><text class="cell-label">{{isSubscribe?$t('transaction.Reservation'):$t('transaction.Entrusted')}}{{ $t('transaction.Quantity') }}</text>{{ formatToFixed4(item?.amount) }} WGT</div>
+                                <div><text class="cell-label">{{isSubscribe?$t('transaction.Reservation'):$t('transaction.Entrusted')}}{{ $t('transaction.Time') }}</text>{{item.created_at}}</div>
                             </div>
                             <div class="green text-ri">
-                                <div class="m8">{{isSubscribe?'预约':'当前'}}价 {{ isSubscribe ? formatToFixed4(item.price) : formatToFixed4(WGTLIST.rate) }}</div>
+                                <div class="m8">{{isSubscribe?$t('transaction.Reservation'):$t('transaction.Current')}}{{ $t('transaction.Price') }} {{ isSubscribe ? formatToFixed4(item.price) : formatToFixed4(WGTLIST.rate) }}</div>
                                 <div style="display: flex;justify-content: flex-end;">
                                     <div v-if="isSubscribe" 
                                         class="cell-btn" 
                                         :class="item.status == 'N'?'box-entrust':'box-cancel'" 
-                                        @click="collect(item)">{{item.status == 'N'?'委托中':'领取'}}
+                                        @click="collect(item)">{{item.status == 'N'?$t('transaction.UnderCommission'):$t('transaction.Claim')}}
                                     </div>
                                     <div v-else 
                                         class="cell-btn red" 
-                                        style="border: 1px solid #FF0000;" @click="changeCancel(item)">撤销
+                                        style="border: 1px solid #FF0000;" @click="changeCancel(item)">{{ $t('transaction.Revoke') }}
                                     </div>
                                 </div>
                             </div>
@@ -74,15 +74,15 @@
                     <template v-if="delegationIndex == 2">
                         <div class="delegation-li" v-for="item in entrustBuylist">
                             <div>
-                                <div class="m4"><text class="cell-label">卖单号</text>{{ formatAddress(item?.seller_trans_hash) }}</div>
-                                <div class="m4"><text class="cell-label">买单号</text>{{ formatAddress(item?.pay_trans_hash) }}</div>
-                                <div class="m4 red"><text class="cell-label">成交价</text>{{ formatToFixed4(item?.pay_price) }} STT</div>
-                                <div><text class="cell-label">时间</text>{{item.pay_date}}</div>
+                                <div class="m4"><text class="cell-label">{{ $t('transaction.SalesOrderNumber') }}</text>{{ formatAddress(item?.seller_trans_hash) }}</div>
+                                <div class="m4"><text class="cell-label">{{ $t('transaction.PaymentNumber') }}</text>{{ formatAddress(item?.pay_trans_hash) }}</div>
+                                <div class="m4 red"><text class="cell-label">{{ $t('transaction.TransactionPrice') }}</text>{{ formatToFixed4(item?.pay_price) }} STT</div>
+                                <div><text class="cell-label">{{ $t('transaction.Time') }}</text>{{item.pay_date}}</div>
                             </div>
                             <div class="red text-ri">
                                 <div class="m4">WGT</div>
-                                <div class="m4">价值 {{ multiplyAndFormat4(item?.pay_price,item?.amount) }} STT</div>
-                                <div>数量 {{ formatToFixed4(item?.amount) }} WGT</div>
+                                <div class="m4">{{ $t('transaction.Value') }} {{ multiplyAndFormat4(item?.pay_price,item?.amount) }} STT</div>
+                                <div>{{ $t('transaction.Quantity') }} {{ formatToFixed4(item?.amount) }} WGT</div>
                             </div>
                         </div>
                     </template>
@@ -94,16 +94,16 @@
             <div class="pop-content">
                 <div class="pop-title">
                     <svg-icon style="width: 24px; height: 24px;" name="left-arrow" />
-                    <div class="title">交易详情</div>
+                    <div class="title">{{ $t('transaction.TransactionDetails') }}</div>
                 </div>
-                <div class="subtitle">确认提交吗?</div>
+                <div class="subtitle">{{ $t('transaction.AreYouSureToSubmit') }}</div>
                 <div class="address">
-                    <div>对方地址</div>
+                    <div>{{ $t('transaction.TheOtherPartyIsAddress') }}</div>
                     <div class="address-text">{{purchaseInfo.seller_address}}</div>
                 </div>
                 <div class="pop-btn">
-                    <van-button type="default" class="btn cancel" @click="isShowDetail = false">取消</van-button>
-                    <van-button type="default" class="btn confirm" @click="purchaseConfirm" :disabled="isPurchaseConfirm">確定</van-button>
+                    <van-button type="default" class="btn cancel" @click="isShowDetail = false">{{ $t('transaction.Cancel') }}</van-button>
+                    <van-button type="default" class="btn confirm" @click="purchaseConfirm" :disabled="isPurchaseConfirm">{{ $t('transaction.Sure') }}</van-button>
                 </div>
             </div>
         </van-popup>
@@ -111,25 +111,25 @@
             <div class="pop-content">
                 <div class="pop-title">
                     <svg-icon style="width: 24px; height: 24px;" name="left-arrow" @click="showWallet = false"/>
-                    <div class="title">交易详情</div>
+                    <div class="title">{{ $t('me.TransactionDetails') }}</div>
                 </div>
                 <div class="pop-detail">
                     <div class="pop-detail-cell">
-                        <div class="cell-label">付款地址:</div>
+                        <div class="cell-label">{{ $t('transaction.PaymentAddress') }}:</div>
                         <div class="cell-text">{{walletStore.account}}</div>
                     </div>
                     <div class="pop-detail-cell">
-                        <div class="cell-label">收款地址:</div>
+                        <div class="cell-label">{{ $t('transaction.ReceivingAddress') }}:</div>
                         <div class="cell-text">{{tabActive==2?'0x4F9b2Bc9d8080Ce7a812419DBDA0FA1C483C5368':'0x632e220EC1420e1c2B0A29a690C7A7eeeD0974e2'}}</div>
                     </div>
                     <div class="pop-detail-cell">
-                        <div class="cell-label">矿工费:</div>
+                        <div class="cell-label">{{ $t('transaction.MinerIsfee') }}:</div>
                         <div class="cell-text">{{ gasFee }} ACC</div>
                     </div>
                     <div class="pop-btn-detail">
                         <van-button class="btn-detail" 
                             type="primary" size="large" 
-                            color="#4765DD" @click="confirm" :disabled="!gasFee || gasFee === '0.0000' || isConfirm">确认
+                            color="#4765DD" @click="confirm" :disabled="!gasFee || gasFee === '0.0000' || isConfirm">{{ $t('transaction.Sure') }}
                         </van-button>
                     </div>
                 </div>
@@ -137,10 +137,10 @@
         </van-popup>
         <van-popup v-model:show="showCX" :style="{ borderRadius:'25px' }">
             <div class="pop-content-password">
-                <div class="pop-title-password">确定撤销吗?</div>
+                <div class="pop-title-password">{{ $t('transaction.IsItCertainToBeRevoked') }}</div>
                 <div class="pop-btn-password">
-                    <van-button type="default" class="btn-password cancel" @click="showCX = false">取消</van-button>
-                    <van-button type="default" class="btn-password confirm" @click="popConfirm" :disabled="isPopConfirm">確定</van-button>
+                    <van-button type="default" class="btn-password cancel" @click="showCX = false">{{ $t('transaction.Cancel') }}</van-button>
+                    <van-button type="default" class="btn-password confirm" @click="popConfirm" :disabled="isPopConfirm">{{ $t('transaction.Sure') }}</van-button>
                 </div>
             </div>
         </van-popup>
@@ -149,7 +149,7 @@
 
 <script setup>
 import { 
-    entrustList,entrustMy,subscribeMy,entrustBuy,entrustContractPublisher,
+    entrustList,entrustMy,subscribeMy,entrustBuy,entrustContractPublisher,   
     contractRevoke,subscribeContractPublisher,
     contractTransfer,subscribeContractReceive,contractBuy } from '@/api/path/jys.api'
 import { useWalletStore } from "@/stores/modules/walletStore";
@@ -161,8 +161,8 @@ const walletStore = useWalletStore();
 const web3 = new Web3(walletStore.rpcUrl);
 let {ciphertext, iv} = AES_CBC_ENCRYPT(walletStore.privateKey);
 
-const tabList = ['闪兑','委托卖出','预约卖出'];
-const cardList = ['地址','价值(STT)','数量(WGT)','操作']
+const tabList = ['閃兌','委託賣出','預約賣出'];
+const cardList = ['地址','價值(STT)','數量(WGT)','操作']
 const list = ref([])//广告列表
 const entrustMylist = ref([])//我的委托列表  或者  预约委托列表
 const entrustBuylist = ref([]) //大盘成交列表

+ 15 - 15
src/views/wallet/index.vue

@@ -41,28 +41,28 @@
       <div class="card-box">
         <div class="box-cont" @click="goToPage('exchange')">
           <svg-icon class="box-cont-icon" style="width: 30px; height: 30px;" name="1" />
-          <div>元宝兑换</div>
+          <div>{{ $t('wallet.GoldCoinExchange') }}</div>
         </div>
         <div class="box-cont" @click="goToPage('proceeds')">
           <svg-icon class="box-cont-icon" style="width: 30px; height: 30px;" name="2" />
-          <div>收款</div>
+          <div>{{ $t('wallet.Collection') }}</div>
         </div>
         <div class="box-cont" @click="goToPage('transferDetail')">
           <svg-icon class="box-cont-icon" style="width: 30px; height: 30px;" name="3" />
-          <div>转账</div>
+          <div>{{ $t('wallet.Transfer') }}</div>
         </div>
         <div class="box-cont" @click="goToDapp">
           <svg-icon class="box-cont-icon" style="width: 30px; height: 30px;" name="4" />
-          <div>竞赛</div>
+          <div>{{ $t('wallet.Competition') }}</div>
         </div>
         <div class="box-cont">
           <svg-icon class="box-cont-icon" style="width: 30px; height: 30px;" name="5" />
-          <div>区块浏览器</div>
+          <div>{{ $t('wallet.BlockBrowser') }}</div>
         </div>
       </div>
       <div class="list-box">
         <div class="list-title">
-          <div>代币</div>
+          <div>{{ $t('wallet.Token') }}</div>
           <svg-icon style="width: 24px; height: 24px;" name="add" @click="changePop(1)"/>
         </div>
         <div class="list-ul">
@@ -84,7 +84,7 @@
         <div class="pop-content">
           <div class="pop-title">
             <svg-icon style="width: 24px; height: 24px;" name="left-arrow" @click="showWallet = false"/>
-            <div class="title">选择钱包</div>
+            <div class="title">{{ $t('wallet.SelectWallet') }}</div>
           </div>
           <div class="tree">
             <div class="tree-lf">
@@ -121,7 +121,7 @@
           </div>
           <div class="pop-btn" @click="addWallet">
             <van-button class="btn" type="primary" size="large" color="#4765DD"> 
-              <svg-icon style="width: 24px; height: 24px;margin-right: 4px;" name="add1" />添加钱包
+              <svg-icon style="width: 24px; height: 24px;margin-right: 4px;" name="add1" />{{ $t('wallet.AddWallet') }}
             </van-button>
           </div>
         </div>
@@ -130,7 +130,7 @@
         <div class="pop-content" style="height:500px">
           <div class="pop-title">
             <svg-icon style="width: 24px; height: 24px;" name="left-arrow" @click="showHistory = false"/>
-            <div class="title">{{ type == 1?'添加代币':'历史记录' }}</div>
+            <div class="title">{{ type == 1?$t('wallet.AddTokens'):$t('wallet.HistoricalRecords') }}</div>
           </div>
           <!-- 1 -->
           <div class="pop-ul" v-if="type == 1">
@@ -156,19 +156,19 @@
               <svg-icon style="width: 24px; height: 24px;color: #fff;" :name="item.from?.hash == walletStore.account?'fs':'js'" />
               <div class="pop-list-ul">
                 <div class="pop-list-li">
-                  <div class="pop-list-li-title">{{item.from?.hash == walletStore.account?'发送':'接收'}}</div>
-                  <div class="pop-list-li-status">成功</div>
+                  <div class="pop-list-li-title">{{item.from?.hash == walletStore.account?$t('wallet.Send'):$t('wallet.Receive')}}</div>
+                  <div class="pop-list-li-status">{{ $t('wallet.Success') }}</div>
                 </div>
                 <div class="pop-list-li">
-                  <div>转账金额</div>
+                  <div>{{ $t('wallet.TransferAmount') }}</div>
                   <div>{{item.value}}{{selectUrl.name}}</div>
                 </div>
                 <div class="pop-list-li">
-                  <div>{{item.from?.hash == walletStore.account?'发送':'接收'}}时间</div>
+                  <div>{{item.from?.hash == walletStore.account?$t('wallet.Send'):$t('wallet.Receive')}}{{ $t('wallet.Time') }}</div>
                   <div>{{item.timestamp}}</div>
                 </div>
                 <div class="pop-list-li">
-                  <div>收款地址</div>
+                  <div>{{ $t('wallet.ReceivingAddress') }}</div>
                   <div>{{formatAddress(item.to?.hash)}}
                     <svg-icon class="im-copy-btn" style="width: 16px; height: 16px;" name="copy" :data-clipboard-text="item.to?.hash"/>
                   </div>
@@ -180,7 +180,7 @@
                   </div>
                 </div>
                 <div class="pop-list-li" v-if="selectUrl.name == 'ACC'">
-                  <div>矿工费</div>
+                  <div>{{ $t('wallet.MinerIsFee') }}</div>
                   <div>{{item.gas_price}}ACC</div>
                 </div>
               </div>

+ 2 - 2
src/views/wallet/proceeds/index.vue

@@ -3,14 +3,14 @@
         <div class="content">
             <div class="title">
                 <div class="logo"></div>
-                <div>ACC收款</div>
+                <div>{{ $t('wallet.ACCCollection') }}</div>
             </div>
             <div class="qrcode">
                 <qrcode-vue :value="qrtext" :size="239" :margin="2" background="transparent"/>
                 <div class="address">{{walletStore.account}}</div>
             </div>
         </div>
-        <van-button class="footer-btn" type="primary" size="large">复制</van-button>
+        <van-button class="footer-btn" type="primary" size="large">{{ $t('wallet.Copy') }}</van-button>
     </div>
 </template>
 

+ 13 - 13
src/views/wallet/transferDetail/index.vue

@@ -2,7 +2,7 @@
     <div class="container">
         <div class="content">
             <div class="card-box">
-                <div class="card-title">选择币种</div>
+                <div class="card-title">{{ $t('wallet.Selectthecurrency') }}</div>
                 <div class="card-input" @click="selectPop(1)">
                     <van-image width="30px" height="30px" round :src="selecctList.logo"/>
                     <div class="card-text">{{selecctList.name}}</div>
@@ -10,14 +10,14 @@
                 </div>
             </div>
             <div class="card-box">
-                <div class="card-title">收货地址
+                <div class="card-title">{{ $t('wallet.DeliveryAddress') }}
                     <svg-icon style="width: 16px; height: 16px;" name="address" @click="goToAddress"/>
                 </div>
                 <div class="card-input" style="height:100%">
                     <van-field 
                         type="textarea"
                         v-model="walletAddress"
-                        placeholder="请输入收货地址"
+                        :placeholder="$t('wallet.PleaseEnterTheDeliveryAddress')"
                         rows="1"
                         :autosize="true"
                     >
@@ -29,7 +29,7 @@
             </div>
             <div class="card-box">
                 <div class="card-title">
-                    <div>转账数量</div>
+                    <div>{{ $t('wallet.TransfeQuantity') }}</div>
                     <div>可用:{{selecctList.balance}} {{ selecctList.name }}</div>
                 </div>
                 <div class="card-input">
@@ -37,7 +37,7 @@
                     <div class="card-input-right">
                         <div>{{ selecctList.name }}</div>
                         <div class="line"></div>
-                        <div class="all" @click="unitNum = selecctList.balance">全部</div>
+                        <div class="all" @click="unitNum = selecctList.balance">{{ $t('wallet.All') }}</div>
                     </div>
                 </div>
             </div>
@@ -49,12 +49,12 @@
                 </div>
             </div> -->
         </div>
-        <van-button class="footer-btn" type="primary" size="large" @click="selectPop(2)" :disabled="isDisabled">确认</van-button>
+        <van-button class="footer-btn" type="primary" size="large" @click="selectPop(2)" :disabled="isDisabled">{{ $t('wallet.DeliverAddress') }}</van-button>
         <van-popup v-model:show="showWallet" position="bottom" round style="height:400px">
             <div class="pop-content" style="height:400px">
                 <div class="pop-title">
                     <svg-icon style="width: 24px; height: 24px;" name="left-arrow" @click="showWallet = false"/>
-                    <div class="title">{{selectType == 1?'选择币种':'交易详情'}}</div>
+                    <div class="title">{{selectType == 1?$t('wallet.SelectTheCurrency'):$t('wallet.TransactionDetails')}}</div>
                 </div>
                 <div class="list-ul" v-if="selectType == 1">
                     <div class="list-li" v-for="item in hotTokensList" @click="changeList(item)" :key="item.name">
@@ -71,15 +71,15 @@
                 <div class="pop-detail" v-if="selectType == 2">
                     <!-- <div class="pop-detail-title">-{{gasFee}} ACC</div> -->
                     <div class="pop-detail-cell">
-                        <div class="cell-label">付款地址:</div>
+                        <div class="cell-label">{{ $t('wallet.PaymentAddress') }}</div>
                         <div class="cell-text">{{walletStore.account}}</div>
                     </div>
                     <div class="pop-detail-cell">
-                        <div class="cell-label">收款地址:</div>
+                        <div class="cell-label">{{ $t('wallet.ReceivingAddress') }}</div>
                         <div class="cell-text">{{walletAddress}}</div>
                     </div>
                     <div class="pop-detail-cell">
-                        <div class="cell-label">矿工费:</div>
+                        <div class="cell-label">{{ $t('wallet.MinerIsFee') }}</div>
                         <div class="cell-text">{{ gasFee }} ACC</div>
                     </div>
                     <div class="pop-btn">
@@ -90,11 +90,11 @@
         </van-popup>
         <van-popup v-model:show="showPassWord" :style="{ borderRadius:'25px' }">
             <div class="pop-content-password">
-                <div class="pop-title-password">請輸入密碼</div>
+                <div class="pop-title-password">{{ $t('wallet.PleaseEnterThePassword') }}</div>
                 <van-field v-model="passWord" class="pop-input" type="password"/>
                 <div class="pop-btn-password">
-                    <van-button type="default" class="btn-password cancel" @click="cancel">取消</van-button>
-                    <van-button type="default" class="btn-password confirm" @click="popConfirm" :disabled="isDisabledConfirm">確定</van-button>
+                    <van-button type="default" class="btn-password cancel" @click="cancel">{{ $t('wallet.Cancel') }}</van-button>
+                    <van-button type="default" class="btn-password confirm" @click="popConfirm" :disabled="isDisabledConfirm">{{ $t('wallet.Sure') }}</van-button>
                 </div>
             </div>
         </van-popup>

+ 11 - 11
src/views/wallet/walletDetail/index.vue

@@ -16,37 +16,37 @@
 
         <van-list class="user-bar-list">
             <van-cell
-                title="錢包名稱"
+                :title="$t('wallet.WalletName')"
                 :value="currentWallet.username"
                 is-link
                 @click="changePop(1,'sy')"
             ></van-cell>
             <van-cell class="user-bar-list-last"
-                title="查看私鑰"
+                :title="$t('wallet.ViewThePrivateKey')"
                 value=""
                 is-link
                 @click="changePop(2)"
             ></van-cell>
-            <van-cell v-if="currentWallet.words"
-                title="查看助記詞" class="user-bar-list-last"
+            <van-cell v-if="currentWallet.words" class="user-bar-list-last"
+                :title="$t('wallet.CheckTheMnemonicPhrase')"
                 value=""
                 is-link
                 @click="changePop(2,'zjc')"
             ></van-cell>
         </van-list>
 
-        <van-button class="footer-btn" size="large" @click="changePop(3)">删除钱包</van-button>
+        <van-button class="footer-btn" size="large" @click="changePop(3)">{{ $t('wallet.DeleteTheWallet') }}</van-button>
 
         <!-- 弹窗:输入名称 / 密码 -->
         <van-popup v-model:show="show" :style="{ borderRadius: '25px' }">
             <div class="pop-content">
                 <div class="pop-title">
-                    {{ type == 1 ? '請輸入錢包名稱' : '請輸入密碼' }}
+                    {{ type == 1 ? $t('wallet.PleaseEnterTheWalletName') : $t('wallet.PleaseEnterThePassword') }}
                 </div>
                 <van-field v-model="text" class="pop-input" :type="type == 1 ? 'text' : 'password'"/>
                 <div class="pop-btn">
-                    <van-button type="default" class="btn cancel" @click="cancel">取消</van-button>
-                    <van-button type="default" class="btn confirm" @click="confirm">確定</van-button>
+                    <van-button type="default" class="btn cancel" @click="cancel">{{ $t('wallet.Cancel') }}</van-button>
+                    <van-button type="default" class="btn confirm" @click="confirm">{{ $t('wallet.Sure') }}</van-button>
                 </div>
             </div>
         </van-popup>
@@ -56,14 +56,14 @@
             <div>
                 <div class="pop-title-key">
                     <svg-icon style="width: 24px; height: 24px" name="left-arrow"/>
-                    <div class="title">{{status == 'zjc'?'查看助记词':'查看私钥'}}</div>
+                    <div class="title">{{status == 'zjc'?$t('wallet.CheckTheMnemonicPhrase'):$t('wallet.ViewThePrivateKey')}}</div>
                 </div>
                 <div class="pop-text">{{ qrtext }}</div>
                 <div class="qrcode">
                     <qrcode-vue :value="qrtext" :size="156" :margin="1" background="transparent"/>
                 </div>
                 <div class="pop-btn-key">
-                    <van-button class="btn-key" type="primary" size="large" color="#4765DD" @click="showkey = false">复制</van-button>
+                    <van-button class="btn-key" type="primary" size="large" color="#4765DD" @click="showkey = false">{{ $t('wallet.Copy') }}</van-button>
                 </div>
             </div>
         </van-popup>
@@ -124,7 +124,7 @@ const confirm = () => {
     } else if (type.value == 2) {
         // 查看私钥或者密码
         if (text.value !== cryptoDecode(currentWallet.value.accountPassword)) {
-            showNotify({ type: 'warning', message: '请输入正确的密码' });
+            showNotify({ type: 'warning', message: $t('wallet.PleaseEnterTheCorrectPassword') });
         } else {
             showkey.value = true;
         }

+ 17 - 17
src/views/wallet/ybExchange/index.vue

@@ -10,7 +10,7 @@
                         src="https://wallet.accshare.io/storage/images/aaa.jpg"
                     />
                     <div class="card-text">
-                        <div>元宝总额</div>
+                        <div>  </div>
                         <div class="balance">{{ybbalance}}</div>
                     </div>
                 </div>
@@ -18,18 +18,18 @@
 
             <div class="tab-box">
                 <div class="tab-item lf-bg">
-                    <div>可用元宝</div>
+                    <div>{{ $t('wallet.AvailableGoldCoins') }}</div>
                     <div class="lf-balance">{{ ybbalance }}</div>
-                    <van-button class="tab-lf-btn" type="primary" @click="changePop(1)">兑换元宝</van-button>
+                    <van-button class="tab-lf-btn" type="primary" @click="changePop(1)">{{ $t('wallet.ExchangeForGoldIngots') }}</van-button>
                 </div>
                 <div class="tab-item ri-bg">
-                    <div>冻结元宝</div>
+                    <div>{{ $t('wallet.FreezeTheGoldIngots') }}</div>
                     <div class="lf-balance">0</div>
-                    <van-button class="tab-ri-btn" type="primary" @click="changePop(2)">取款(转出)</van-button>
+                    <van-button class="tab-ri-btn" type="primary" @click="changePop(2)">{{ $t('wallet.WithdrawalTransferOut') }}</van-button>
                 </div>
             </div>
             <div class="list-box">
-                <div>明细</div>
+                <div>{{ $t('wallet.Details') }}</div>
                 <div class="list-box-ul">
                     <van-pull-refresh v-model="loading" @refresh="onRefresh">
                         <div class="list-box-li" v-for="(item,i) in list" :key="i">
@@ -45,16 +45,16 @@
         </div>
         <van-popup v-model:show="show" :style="{ borderRadius:'25px' }">
             <div class="pop-content">
-                <div class="pop-title">兑换元宝</div>
-                <div class="pop-balance">{{selectIndex == 1?`当前WGT钱包余额 ${WGTbalance}`:`当前元宝总额 ${ybbalance}`}}</div>
-                <van-field v-model="text" class="pop-input" :placeholder="selectIndex == 1?'请输入wgt数量':'请输入元宝数量'"/>
+                <div class="pop-title">{{ $t('wallet.ExchangeForGoldIngots') }}</div>
+                <div class="pop-balance">{{selectIndex == 1?`$t('wallet.CurrentBalanceOfTheWGTWallet') ${WGTbalance}`:`$t('wallet.TheCurrentTotalAmountOfGoldIngots') ${ybbalance}`}}</div>
+                <van-field v-model="text" class="pop-input" :placeholder="selectIndex == 1?$t('wallet.PleaseEnterTheQuantityOfWgt'):$t('wallet.PleaseEnterTheQuantityOfGoldIngots')"/>
                 <div class="pop-state">
-                    <div style="margin-bottom: 4px;">说明</div>
-                    <div>{{selectIndex == 1?'兑换的币种数量,将按照当前价值转换成对应元宝实时到账':'取款的元宝数量,按照当前价值转换成兑换的币种实时到账'}}</div>
+                    <div style="margin-bottom: 4px;">{{ $t('wallet.Explanation') }}</div>
+                    <div>{{selectIndex == 1?$t('wallet.TheQuantityOfTheExchangeCurrencyWillBeConvertedIntoTheCorrespondingGoldCoinsBasedOnTheCurrentValueAndCreditedToTheAccountInRealTime'):$t('wallet.TheAmountOfGoldCoinsWithdrawnWillBeConvertedIntoTheExchangedCurrencyBasedOnTheCurrentValueAndCrediteToTheAccountInRealTime')}}</div>
                 </div>
                 <div class="pop-btn">
-                    <van-button type="default" class="btn cancel" @click="cancel">取消</van-button>
-                    <van-button type="default" class="btn confirm" @click="confirm" :disabled="isDisabled">提交</van-button>
+                    <van-button type="default" class="btn cancel" @click="cancel">{{ $t('wallet.Cancel') }}</van-button>
+                    <van-button type="default" class="btn confirm" @click="confirm" :disabled="isDisabled">{{ $t('wallet.Submit') }}</van-button>
                 </div>
             </div>
         </van-popup>
@@ -104,19 +104,19 @@ const cancel = () => {
 const confirm = () => {
     const inputValue = parseFloat(text.value);
 	if (!text.value || isNaN(inputValue)) {
-        showToast('请输入有效的数量');
+        showToast($t('wallet.PleaseEnterAValidQuantity'));
 	    return;
 	}
 	
 	if (inputValue <= 0) {
-        showToast('数量必须大于0');
+        showToast($t('wallet.TheQuantityMusBeGreaterThan0'));
 	    return;
 	}
 	
 	let maxValue = selectIndex.value == 1 ? parseFloat(WGTbalance) : parseFloat(ybbalance.value);
-	let tokenName = selectIndex.value == 1 ? 'WGT' : '元宝';
+	let tokenName = selectIndex.value == 1 ? 'WGT' : $t('wallet.Yuanbao');
 	if (inputValue > maxValue) {
-        showToast(`输入数量不能大于可用${tokenName}数量`);
+        showToast($t('wallet.TheInputQuantityCannotExceedTheAvailableQuantity'));
 	    return;
 	}
     isDisabled.value = true;

+ 52 - 0
updataSetVersion.js

@@ -0,0 +1,52 @@
+import fs from "fs";
+import AdmZip from "adm-zip";
+import crypto from "crypto";
+
+// 读取 update.json
+const updateJsonPath = "bin/update.json"
+const upDataJson = fs.readFileSync("src/updater/update.json", "utf8");
+let updata = JSON.parse(upDataJson);
+
+console.log(updata.version);
+
+// 判断有没有bin 文件夹没有,就创建一个,有的话就删除bin中的所有内容
+if (!fs.existsSync("bin")) {
+  fs.mkdirSync("bin");
+} else {
+  fs.readdirSync("bin").forEach((file) => {
+    fs.unlinkSync(`bin/${file}`);
+  });
+}
+
+// 判断有没有dist 文件夹,有的话,进去dist中,吧里面所有内容打成一个zip包,名称为123.zip, 同时打印下123.zip 的shasum -a 256 内容
+// 检查 dist 文件夹并打包
+if (fs.existsSync("dist")) {
+  const files = fs.readdirSync("dist");
+  const zip = new AdmZip();
+  const zipName = `v${updata.version}.zip`;
+  // 添加所有文件到 ZIP
+  files.forEach((file) => {
+    const filePath = `dist/${file}`;
+    if (fs.statSync(filePath).isFile()) {
+      // 确保是文件(非子目录)
+      zip.addLocalFile(filePath);
+    }
+  });
+
+  // 保存 ZIP 文件
+  const zipPath = `bin/${zipName}`;
+  zip.writeZip(zipPath);
+  console.log(`ZIP 包已生成: ${zipPath}`);
+
+  // 计算 SHA-256
+  const zipData = fs.readFileSync(zipPath);
+  const hash = crypto.createHash("sha256").update(zipData).digest("hex");
+  console.log(`SHA-256: ${hash}`);
+
+  // 4. 修改 update.json 的 checksum
+  updata.checksum = hash; // 假设 update.json 有 checksum 字段
+  fs.writeFileSync(updateJsonPath, JSON.stringify(updata, null, 2)); // 2 空格缩进
+  console.log(`已更新 ${updateJsonPath} 的 checksum: ${hash}`);
+} else {
+  console.log("dist 文件夹不存在,跳过打包");
+}