Forráskód Böngészése

update:1.更新中英文国际化;2.更新代理商才能看到商家入驻

RuHu.Xu 5 hónapja
szülő
commit
6693685baa
100 módosított fájl, 2673 hozzáadás és 1355 törlés
  1. 0 43
      collect-chinese.js
  2. 679 79
      locale/en.json
  3. 10 16
      locale/index.js
  4. 678 69
      locale/zh-Hans.json
  5. 1 0
      main.js
  6. 32 29
      pages/app/sign.vue
  7. 10 10
      pages/goods/comment/add.vue
  8. 6 5
      pages/goods/comment/list.vue
  9. 4 4
      pages/goods/components/detail/detail-cell-sku.vue
  10. 4 4
      pages/goods/components/detail/detail-comment-card.vue
  11. 1 1
      pages/goods/components/detail/detail-content-card.vue
  12. 6 6
      pages/goods/components/detail/detail-navbar.vue
  13. 2 2
      pages/goods/components/detail/detail-tabbar.vue
  14. 10 10
      pages/goods/index.vue
  15. 9 9
      pages/goods/list.vue
  16. 11 11
      pages/index/cart.vue
  17. 1 1
      pages/index/category.vue
  18. 1 2
      pages/index/index.vue
  19. 19 20
      pages/index/login.vue
  20. 20 20
      pages/order/aftersale/apply.vue
  21. 29 31
      pages/order/aftersale/detail.vue
  22. 13 12
      pages/order/aftersale/list.vue
  23. 1 1
      pages/order/aftersale/log.vue
  24. 23 22
      pages/order/confirm.vue
  25. 39 37
      pages/order/detail.vue
  26. 4 4
      pages/order/express/log.vue
  27. 28 26
      pages/order/list.vue
  28. 16 15
      pages/pay/index.vue
  29. 12 12
      pages/pay/result.vue
  30. 13 12
      pages/pay/resultYuan.vue
  31. 64 65
      pages/public/merchant.vue
  32. 13 12
      pages/public/setting.vue
  33. 1 0
      pages/shop/index.vue
  34. 19 28
      pages/user/address/edit.vue
  35. 5 4
      pages/user/address/list.vue
  36. 16 24
      pages/user/dummyAddress/edit.vue
  37. 5 9
      pages/user/dummyAddress/list.vue
  38. 9 6
      pages/user/goods-collect.vue
  39. 11 9
      pages/user/goods-log.vue
  40. 9 8
      pages/user/qrcode-share.vue
  41. 7 4
      pages/user/setting.vue
  42. 6 5
      pages/user/wallet/ScoreLog.vue
  43. 4 3
      pages/user/wallet/consumptionLog.vue
  44. 25 24
      pages/user/wallet/consumptionTransfers.vue
  45. 3 3
      pages/user/wallet/maxScoreLog.vue
  46. 14 14
      pages/user/wallet/score.vue
  47. 11 10
      pages/user/wallet/scoreToConsumption.vue
  48. 10 9
      pages/user/wallet/team.vue
  49. 11 9
      pages/user/wallet/topupConsumptionPoints.vue
  50. 24 23
      pages/user/wallet/withdraw.vue
  51. 6 6
      pages/user/wallet/withdrawalLog.vue
  52. 4 1
      sheep/api/infra/file.js
  53. 3 3
      sheep/api/member/address.js
  54. 19 17
      sheep/api/member/auth.js
  55. 7 5
      sheep/api/member/social.js
  56. 14 12
      sheep/api/member/user.js
  57. 4 2
      sheep/api/migration/third.js
  58. 5 3
      sheep/api/product/favorite.js
  59. 5 3
      sheep/api/product/history.js
  60. 5 3
      sheep/api/promotion/coupon.js
  61. 5 3
      sheep/api/sale/sale.js
  62. 4 2
      sheep/api/trade/cart.js
  63. 2 2
      sheep/components/s-address-item/s-address-item.vue
  64. 8 8
      sheep/components/s-auth-modal/components/account-login.vue
  65. 9 8
      sheep/components/s-auth-modal/components/alipay-account.vue
  66. 10 9
      sheep/components/s-auth-modal/components/bank-account.vue
  67. 14 13
      sheep/components/s-auth-modal/components/change-mobile.vue
  68. 11 12
      sheep/components/s-auth-modal/components/change-password.vue
  69. 10 10
      sheep/components/s-auth-modal/components/mp-authorization.vue
  70. 7 7
      sheep/components/s-auth-modal/components/officialAccountFirstLogin.vue
  71. 5 5
      sheep/components/s-auth-modal/components/phone-international-input.vue
  72. 11 9
      sheep/components/s-auth-modal/components/register.vue
  73. 11 10
      sheep/components/s-auth-modal/components/sms-login.vue
  74. 3 3
      sheep/components/s-auth-modal/index.scss
  75. 20 18
      sheep/components/s-auth-modal/s-auth-modal.vue
  76. 2 1
      sheep/components/s-block-item/s-block-item.vue
  77. 8 5
      sheep/components/s-consumptionPoints-pop/s-consumptionPoints-pop.vue
  78. 3 3
      sheep/components/s-follow-modal/s-follow-modal.vue
  79. 1 0
      sheep/components/s-goods-card/s-goods-card.vue
  80. 10 9
      sheep/components/s-goods-column/s-goods-column.vue
  81. 85 28
      sheep/components/s-menu-grid/s-menu-grid.vue
  82. 9 6
      sheep/components/s-points-pop/s-points-pop.vue
  83. 8 3
      sheep/components/s-search-block/s-search-block.vue
  84. 19 19
      sheep/components/s-select-sku/s-select-sku.vue
  85. 9 8
      sheep/components/s-share-modal/canvas-poster/index.vue
  86. 3 1
      sheep/components/s-share-modal/canvas-poster/poster/index.js
  87. 1 0
      sheep/components/s-share-modal/canvas-poster/useCanvas.js
  88. 5 5
      sheep/components/s-share-modal/s-share-modal.vue
  89. 6 5
      sheep/components/s-signup-modal/s-signup-modal.vue
  90. 7 6
      sheep/components/s-wallet-modal/s-wallet-modal.vue
  91. 12 9
      sheep/helper/index.js
  92. 253 233
      sheep/hooks/useGoods.js
  93. 10 6
      sheep/hooks/useModal.js
  94. 4 2
      sheep/libs/sdk-h5-weixin.js
  95. 4 2
      sheep/platform/index.js
  96. 18 16
      sheep/platform/pay.js
  97. 6 4
      sheep/platform/provider/wechat/miniProgram.js
  98. 22 19
      sheep/request/index.js
  99. 16 8
      sheep/store/user.js
  100. 1 1
      sheep/ui/su-navbar/su-navbar.vue

+ 0 - 43
collect-chinese.js

@@ -1,43 +0,0 @@
-// collect-chinese.js
-const glob = require('glob');
-const fs = require('fs');
-const path = require('path');
-
-const projectPath = './sheep'; // 修改为你的项目路径
-const outputPath = './zh-cn-sheep-config.json'; // 配置表输出路径
-const chineseRegex = /['"`]([^'"`\n]*[\u4e00-\u9fa5]+[^'"`\n]*)['"`]/g;
-
-let configObject = {};
-
-function collectChinese() {
-  try {
-    const files = glob.sync(`${projectPath}/**/*.{js,vue,ts,html}`);
-
-    files.forEach((file) => {
-      const content = fs.readFileSync(file, 'utf8');
-      let match;
-      while ((match = chineseRegex.exec(content)) !== null) {
-        const chineseText = match[1];
-        if (!configObject[chineseText]) {
-          configObject[chineseText] = '';
-        }
-      }
-    });
-
-    saveConfigFile();
-  } catch (err) {
-    console.error('Error while scanning files:', err);
-  }
-}
-
-function saveConfigFile() {
-  const sortedConfig = Object.keys(configObject).sort().reduce((obj, key) => {
-    obj[key] = configObject[key];
-    return obj;
-  }, {});
-
-  fs.writeFileSync(outputPath, JSON.stringify(sortedConfig, null, 2));
-  console.log(`Config file saved to ${outputPath}`);
-}
-
-collectChinese();

+ 679 - 79
locale/en.json

@@ -10,19 +10,103 @@
 	"org_management": "Organization management",
 	"add_user": "Add a user",
 	"about": "About",
-	"title.home":"Home",
-	"title.userinfo":"User Information",
-	"title.settings":"Settings",
-	"title.usercenter":"User Center",
+	"title.home": "Home",
+	"title.userinfo": "User Information",
+	"title.settings": "Settings",
+	"title.usercenter": "User Center",
+	"title.product_category": "Categories",
+	"title.cart": "Cart",
+	"title.search": "Search",
+	"title.product_details": "Details",
+	"title.group_buying": "Group Buy",
+	"title.flash_sale": "Flash Sale",
+	"title.product_list": "Products",
+	"title.rate_product": "Rate Product",
+	"title.product_reviews": "Reviews",
+	"title.order_details": "Order Details",
+	"title.confirm_order": "Confirm Order",
+	"title.my_orders": "My Orders",
+	"title.apply_service": "After-Sales",
+	"title.return_logistics": "Return Logistics",
+	"title.after_sales_list": "After-Sales",
+	"title.after_sales_details": "Service Details",
+	"title.after_sales_progress": "Service Progress",
+	"title.logistics_tracking": "Tracking",
+	"title.share": "Share",
+	"title.my_favorites": "Favorites",
+	"title.my_footprints": "Footprints",
+	"title.physical_address": "Shipping Address",
+	"title.virtual_address": "Virtual Address",
+	"title.edit_invoice": "Edit Invoice",
+	"title.manage_invoice": "Manage Invoice",
+	"title.edit_address": "Edit Address",
+	"title.my_balance": "My Balance",
+	"title.wallet": "Wallet",
+	"title.points_source": "Points Source",
+	"title.points_recharge": "Points Recharge",
+	"title.points_transfer": "Points Transfer",
+	"title.commission_to_points": "Convert to Points",
+	"title.withdraw": "Withdraw",
+	"title.withdraw_records": "Withdrawals",
+	"title.commission_exchange": "Exchange",
+	"title.team": "Team",
+	"title.distribution": "Distribution",
+	"title.my_commission": "My Commission",
+	"title.promote_products": "Promote",
+	"title.distribution_orders": "Dist. Orders",
+	"title.my_team": "My Team",
+	"title.promoter_ranking": "Promoter Rank",
+	"title.commission_ranking": "Commission Rank",
+	"title.apply_withdraw": "Withdraw",
+	"title.check_in_center": "Check-In",
+	"title.shop_home": "Shop Home",
+	"title.system_settings": "Settings",
+	"title.rich_text": "Rich Text",
+	"title.faq": "FAQ",
+	"title.error_page": "Error Page",
+	"title.coupon_center": "Coupons",
+	"title.coupons": "Coupons",
+	"title.customer_service": "Support",
+	"title.checkout": "Checkout",
+	"title.fuiou_result": "Payment Result",
+	"title.payment_result": "Payment Result",
+	"title.recharge_balance": "Recharge",
+	"title.recharge_records": "Recharge History",
+	"title.group_details": "Group Details",
+	"title.my_groups": "My Groups",
+	"title.marketing_products": "Marketing",
+	"title.group_activities": "Group Activities",
+	"title.seckill_activities": "Seckill",
+	"title.bargain_list": "Bargain List",
+	"title.bargain_details": "Bargain Details",
+	// 通用
 	"common": {
+		"letcgo": "letcgo",
 		"home": "Home",
 		"category": "Category",
 		"cart": "Cart",
 		"my": "My",
-		"none":"None",
+		"product": "Product",
+		"review": "Review",
+		"detail": "Detail",
+		"view_all": "View All",
+		"none": "None",
+		"all": "All",
 		"search_products": "Search Products",
 		"buy_now": "Buy Now",
 		"sold": "Sold",
+		"sales_volume": "Sales Volume",
+		"go_buy": "Go Buy",
+		"add_to_cart": "Add to Cart",
+		"redeem_now": "Redeem Now",
+		"sold_out": "Sold Out",
+		"product_not_exist": "Product not available or has been removed",
+		"awaiting_your_first_review": "Awaiting Your First Review",
+		"browse_more": "Browse More",
+		"select_product_options": "Please Select Product Options",
+		"favorite": "Favorite",
+		"unfavorite": "Unfavorite",
+		"favorite_success": "Favorite Success",
 		"points": "Points",
 		"cancel": "Cancel",
 		"confirm": "Confirm",
@@ -37,6 +121,7 @@
 		"yes": "Yes",
 		"no": "No",
 		"ok": "OK",
+		"post": "Post",
 		"loading": "Loading...",
 		"refresh": "Refresh",
 		"search": "Search",
@@ -45,20 +130,358 @@
 		"update": "Update",
 		"upload": "Upload",
 		"download": "Download",
-		"level":"Level",
-		"no_level":"No Level"
+		"level": "Level",
+		"no_level": "No Level",
+		"select": "Select",
+		"select_product_specification": "Please Select Product Specification",
+		"clear": "Clear",
+		"delete_footprint": "Delete Footprint",
+		"select_all": "Select All",
+		"my_footprints": "My Footprints",
+		"total_goods": "Total {number} items",
+		"recommended": "Recommended",
+		"price_asc": "Price Low-High",
+		"price_desc": "Price High-Low",
+		"sales": "Sales",
+		"newest": "Newest",
+		"enter_keywords": "Enter Keywords",
+		"checkout": "Checkout",
+		"total": "Total",
+		"default": "Default",
+		"empty_cart": "Your cart is empty, go shop around!",
+		"select_area": "Select Area",
+		"click_to_load_more": "Click to Load More",
+		"system": "System",
+		"current_version": "Current Version",
+		"local_cache": "Local Cache",
+		"about_us": "About Us",
+		"logout_account": "Log Out",
+		"confirm_logout": "Confirm Log Out?",
+		"no_data": "No Data",
+		"uploading": "Uploading",
+		"verifying": "Verifying",
+		"fetching": "Fetching",
+		"save_success": "Save Successful",
+		"update_success": "Update Successful",
+		"logging_in": "Logging In",
+		"login_success": "Login Successful",
+		"registering": "Registering",
+		"register_success": "Registration Successful",
+		"sending": "Sending",
+		"send_success": "Send Successful",
+		"binding": "Binding",
+		"bind_success": "Bind Successful",
+		"unbind": "Unbinding",
+		"unbind_success": "Unbind Successful",
+		"claiming": "Claiming",
+		"claim_success": "Claim Successful",
+		"collect_success": "Collect Successful",
+		"cancel_success": "Cancel Successful",
+		"delete_success": "Delete Successful",
+		"clear_success": "Clear Successful",
+		"apply_success": "Apply Successful",
+		"change_success": "Change Successful",
+		"added_to_cart": "Added to Cart",
+		"just_now": "Just Now",
+		"minutes_ago": "{m} Minutes Ago",
+		"hours_ago": "{h} Hours Ago",
+		"days_ago": "{d} Days Ago",
+		"months_ago": "{m} Months Ago",
+		"years_ago": "{y} Years Ago",
+		"copy_success": "Copy Successful!",
+		"copy_fail": "Copy Failed!",
+		"sms_error": "SMS Sending Error",
+		"try_later": "Please Try Later",
+		"phone_format_error": "Incorrect Phone Format",
+		"get_verification_code": "Get Code",
+		"use_wechat_browser": "Please Open in WeChat Browser",
+		"platform_not_supported": "Platform Not Supported",
+		"payment_manually_cancelled": "Payment Manually Cancelled",
+		"alipay_payment": "Alipay Payment",
+		"copy_link_to_browser": "Copy Link to Browser",
+		"copy_link": "Copy Link",
+		"wechat_payment": "WeChat Payment",
+		"bind_wechat_for_payment": "Bind WeChat for Payment",
+		"bind": "Bind",
+		"balance_payment": "Balance Payment",
+		"mock_payment": "Mock Payment",
+		"update_prompt": "Update Prompt",
+		"new_version_ready": "New Version Ready, Restart Now?",
+		"latest_version": "Latest Version",
+		"server_error_try_later": "Server Error, Please Try Later",
+		"network_request_error": "Network Request Error",
+		"request_error": "Request Error",
+		"login_expired": "Your Login Has Expired",
+		"please_login": "Please Log In",
+		"access_denied": "Access Denied",
+		"request_error": "Request Error",
+		"request_timeout": "Request Timeout",
+		"frequent_requests": "Frequent Requests, Please Try Later",
+		"server_unavailable": "Service Unimplemented",
+		"network_error": "Network Error",
+		"service_unavailable": "Service Unavailable",
+		"network_timeout": "Network Timeout",
+		"http_not_supported": "HTTP Version Not Supported",
+		"server_exception": "Server Exception",
+		"check_network_connection": "Check Your Network Connection",
+		"not_bound_wechat": "WeChat Not Bound, Please Bind First"
+	},
+	"account": {
+		"account_login": "Account Login",
+		"sms_login": "SMS Login",
+		"register": "Register",
+		"read_and_agree": "I have read and agree to the",
+		"user_agreement": "User Agreement",
+		"privacy_policy": "Privacy Policy",
+		"and": "and",
+		"wechat_authorization_login": "WeChat Authorization Login",
+		"wechat_authorization_register": "WeChat Authorization Register",
+		"please_agree": "Please check to agree",
+		"register_by_sharing_only": "You can only register via sharing",
+		"quick_login_failed": "Quick Login Failed",
+		"username": "Username",
+		"password": "Password",
+		"enter_username": "Enter Username",
+		"enter_valid_username": "Please enter a valid username!",
+		"enter_password": "Enter Password",
+		"login": "Login",
+		"phone_number": "Phone",
+		"verification_code": "Verification Code",
+		"enter_verification_code": "Enter Verification Code",
+		"get_verification_code": "Get Code",
+		"incorrect_phone_format": "Incorrect Phone Format",
+		"enter_phone_number": "Enter Phone Number",
+		"username_exists": "Username Already Exists!",
+		"change_phone_number": "Change Phone",
+		"bind_phone_number": "Bind Phone",
+		"old_phone_number": "Old Phone",
+		"enter_old_phone_number": "Enter Old Phone",
+		"security_notice": "For security, use your personal phone number",
+		"new_phone_number": "New Phone",
+		"enter_new_phone_number": "Enter New Phone",
+		"login_again": "Update Successful, Log In Again",
+		"change_password": "Change Password",
+		"cancel_change": "Cancel Change",
+		"password_requirements": "6-12 chars with letters & numbers",
+		"modification_successful": "Successful Update",
+		"authorization_info": "Authorization Info",
+		"complete_profile": "Complete Your Profile",
+		"avatar": "Avatar",
+		"select_avatar": "Select Avatar",
+		"nickname": "Nickname",
+		"enter_nickname": "Enter Nickname",
+		"confirm_authorization": "Confirm Authorization",
+		"authorization_successful": "Authorization Successful",
+		"first_time_login": "First-time Login, Verify Phone",
+		"continue_login": "Continue Login",
+		"change_alipay_account": "Change Alipay Account",
+		"bind_alipay_account": "Bind Alipay Account",
+		"bind_realname_alipay": "Bind Real-name Verified Alipay Account",
+		"name": "Name",
+		"enter_name": "Enter Name",
+		"account": "Account",
+		"enter_account": "Enter Account",
+		"change_bank_card": "Change Bank Card",
+		"bind_bank_card": "Bind Bank Card",
+		"bank_branch": "Bank Branch",
+		"bank_branch_example": "E.g., XX Bank Ltd. XX Branch",
+		"account_holder": "Account Holder",
+		"account_holder_name": "Holder's Name",
+		"bank_account_number": "Bank Account Number",
+		"select_account_login": "Select Account Login",
+		"wechat_no_bind": "This WeChat is not linked to any account, please use another login method",
+		"wechat_register": "WeChat Register",
+		"wechat_no_account": "Your WeChat has no account, please register via sharing"
+	},
+	"review": {
+		"all_reviews": "All Reviews",
+		"positive": "Positive",
+		"neutral": "Neutral",
+		"negative": "Negative"
+	},
+	"confirm": {
+		"confirm_order": "Confirm Order",
+		"shipping_fee": "Shipping Fee",
+		"free_shipping": "Free Shipping",
+		"order_note": "Order Note",
+		"communication_advice": "Contact seller first",
+		"quantity": "Quantity",
+		"price_details": "Price Details",
+		"total_price": "Total Price",
+		"total_items": "Total {count} items",
+		"commission_deduction": "Commission Deduction",
+		"deduction": "Deduct {count} yuan",
+		"no_commission": "No Commission Use",
+		"consumption_point_deduction": "Point Use",
+		"no_consumption_points": "No Consumption Points",
+		"total_items_count": "Total {count} items",
+		"submit_order": "Submit Order",
+		"select_shipping_address": "Select Shipping Address",
+		"insufficient_commission": "Insufficient Commission",
+		"insufficient_consumption_points": "Insufficient Consumption Points",
+		"commission_points_no_mix": "Cannot Combine Commission with Consumption Points"
+	},
+	"address": {
+		"select_shipping_address": "Select Shipping Address",
+		"shipping_address": "Shipping Address",
+		"import_wechat_address": "Import from WeChat",
+		"add_new_shipping_address": "Add Address",
+		"no_shipping_address": "No Shipping Address",
+		"edit_address": "Edit Address",
+		"add_address": "Add Address",
+		"recipient": "Recipient",
+		"enter_recipient_name": "Enter Recipient's Name",
+		"province_city_district": "Province/City/District",
+		"select_province_city_district": "Select Province/City/District",
+		"detailed_address": "Detailed Address",
+		"enter_detailed_address": "Enter Detailed Address",
+		"set_as_default_address": "Set as Default Address",
+		"confirm_delete_address": "Confirm Delete This Address?",
+		"virtual_goods_address": "Virtual Address",
+		"edit_virtual_address": "Edit Virtual Address",
+		"add_virtual_address": "Add Virtual Address",
+		"set_as_default_virtual_address": "Set as Default Virtual Address"
+	},
+	"selectSku": {
+		"insufficient_stock": "Insufficient Stock",
+		"select_specification": "Select Specification",
+		"amount_less_than_min": "Amount Less Than Minimum Purchase",
+		"insufficient_points": "Insufficient Points",
+		"min_points_required": "Minimum of 1 Point Required",
+		"purchase_quantity": "Purchase Quantity",
+		"purchase_amount": "Purchase Amount",
+		"available_points": "Available Points: {points}"
+	},
+	"cashier": {
+		"cashier": "Cashier",
+		"select_payment_method": "Select Payment Method",
+		"phone_number": "Phone Number",
+		"enter_phone_number": "Enter Phone Number",
+		"verification_code": "Verification Code",
+		"enter_verification_code": "Enter Verification Code",
+		"checking_payment_environment": "Checking Payment Environment",
+		"payment_expired": "Payment Expired",
+		"pay_now": "Pay Now",
+		"verification_code_cannot_be_empty": "Verification Code Cannot Be Empty",
+		"choose_payment_method": "Choose Payment Method",
+		"order_paid": "Order Paid",
+		"no_payment_order_found": "No Payment Order Found",
+		"remaining_payment_time": "Remaining Payment Time {h}:{m}:{s}"
+	},
+	"share": {
+		"share": "Share",
+		"poster_loading": "Poster Loading...",
+		"long_press_to_save": "Long Press to Save",
+		"save_success": "Save Successful",
+		"save_failure": "Save Failed"
 	},
+	"merchant": {
+		"merchant_registration": "Merchant Signup",
+		"merchant_name": "Merchant Name",
+		"enter_merchant_name": "Enter Merchant Name",
+		"contact_person": "Contact Person",
+		"enter_contact_person": "Enter Contact Person",
+		"contact_phone": "Contact Phone",
+		"enter_contact_phone": "Enter Contact Phone",
+		"legal_person": "Legal Representative",
+		"enter_legal_person": "Enter Legal Representative",
+		"legal_person_phone": "Legal Representative Phone",
+		"enter_legal_person_phone": "Enter Legal Representative Phone",
+		"legal_person_id_front": "Legal ID Front",
+		"legal_person_id_back": "Legal ID Back",
+		"location": "Location",
+		"email": "Email",
+		"enter_email": "Enter Email",
+		"office_address": "Office Address",
+		"enter_office_address": "Enter Office Address",
+		"rights_phone": "Rights Phone",
+		"enter_rights_phone": "Enter Rights Phone",
+		"customer_service_phone": "Customer Service Phone",
+		"enter_customer_service_phone": "Enter Customer Service Phone",
+		"website": "Website",
+		"enter_website": "Enter Website",
+		"bank": "Bank",
+		"enter_bank": "Enter Bank",
+		"account_name": "Account Name",
+		"enter_account_name": "Enter Account Name",
+		"account_number": "Account Number",
+		"enter_account_number": "Enter Account Number",
+		"business_license": "Business License",
+		"brand_authorization": "Brand Authorization",
+		"download_template": "Download Template",
+		"other_certificates": "Other Certificates",
+		"introduction": "Introduction",
+		"enter_introduction": "Enter Introduction",
+		"status": "Status",
+		"review_in_progress": "Review in Progress",
+		"review_records": "Review Records",
+		"changes": "Changes",
+		"save_and_submit": "Save and Submit",
+		"existing_merchant_alert": "Existing merchant account for user ({user}), please apply with a different account!",
+		"merchant_name_required": "Merchant name is required",
+		"introduction_required": "Introduction is required",
+		"contact_required": "Contact is required",
+		"contact_phone_required": "Contact phone is required",
+		"customer_service_phone_required": "Customer service phone is required",
+		"legal_person_required": "Legal representative is required",
+		"legal_person_phone_required": "Legal representative phone is required",
+		"account_name_required": "Account name is required",
+		"account_number_required": "Account number is required",
+		"bank_required": "Bank is required",
+		"under_review": "Under Review",
+		"approved": "Approved",
+		"rejected": "Rejected",
+		"non_exclusive_authorization": "Non-exclusive Brand Authorization",
+		"select_location": "Select Location",
+		"select_legal_person_id_front": "Select Upload of Legal ID Front (National Emblem)",
+		"select_legal_person_id_back": "Select Upload of Legal ID Back (Portrait)",
+		"upload_business_license": "Upload Business License",
+		"upload_brand_authorization": "Upload Brand Authorization"
+	},
+	// useGoods.js
+	"useGoods": {
+		"redeemed": "Redeemed",
+		"in_stock": "In Stock",
+		"pending_payment": "Pending Payment",
+		"awaiting_shipment": "Awaiting Shipment",
+		"awaiting_write_off": "Awaiting Write-off",
+		"awaiting_delivery": "Awaiting Delivery",
+		"awaiting_review": "Awaiting Review",
+		"completed": "Completed",
+		"closed": "Closed",
+		"complete_payment_by": "Please complete the payment by {time}",
+		"merchant_not_shipped": "Merchant has not shipped yet, please be patient",
+		"merchant_shipped": "Merchant has shipped, please be patient",
+		"goods_received": "Goods received, go leave a review",
+		"transaction_completed": "Transaction completed, thank you for your support",
+		"transaction_closed": "Transaction closed",
+		"apply_for_after_sales": "Apply for after-sales",
+		"goods_awaiting_return": "Goods awaiting return",
+		"merchant_awaiting_goods": "Merchant awaiting goods",
+		"waiting_for_refund": "Waiting for refund",
+		"refund_successful": "Refund successful",
+		"buyer_cancelled": "Buyer cancelled",
+		"merchant_refused": "Merchant refused",
+		"merchant_refused_goods": "Merchant refused to receive goods",
+		"unknown_status": "Unknown status",
+		"refund_request_awaiting_merchant": "Refund request awaiting merchant",
+		"return_goods_fill_logistics": "Return goods and fill logistics information",
+		"return_refund_request_awaiting_merchant": "Return and refund request awaiting merchant",
+		"refund_closed": "Refund closed",
+		"merchant_disagrees_with_refund_request": "Merchant disagrees with refund request, reason:",
+		"merchant_refuses_to_accept_goods": "Merchant refuses to accept goods, disagrees with refund, reason:"
+	},
+	// 快捷菜单
 	"menu": {
-	    "quick_menu": "Quick Menu",
-	    "search": "Search",
-	    "personal_center": "Center",
-	    "shopping_cart": "Cart",
-	    "browsing_history": "History",
-	    "my_favorites": "Favorites",
-	    "customer_service": "Service"
-	},
-
-
+		"quick_menu": "Quick Menu",
+		"search": "Search",
+		"personal_center": "Center",
+		"shopping_cart": "Cart",
+		"browsing_history": "History",
+		"my_favorites": "Favorites",
+		"customer_service": "Service"
+	},
+	// 用户相关
 	"user": {
 		"name": "Name",
 		"username": "Username",
@@ -82,71 +505,204 @@
 		"female": "Female",
 		"user_info": "User Information",
 		"unbind_reminder": "Unbinding Reminder",
-		"please_login":"Please Login"
+		"please_login": "Please Login"
 	},
+	// 钱包相关
 	"wallet": {
-	    "wallet": "Wallet",
-	    "balance": "Balance",
-	    "commission": "Commission",
-	    "consumption_points": "Consumption Points",
-	    "team": "Team",
-		"people":"People",
+		"wallet": "Wallet",
+		"balance": "Balance",
+		"commission": "Commission",
+		"consumption_points": "Consumption",
+		"team": "Team",
+		"people": "People",
 		"generation_rules": "Net Worth Rules",
 		"benefits": "Net Worth Benefits",
-	    "recharge": "Recharge",
-	    "withdraw": "Withdraw",
-	    "transaction_record": "Transaction Record",
-	    "recharge_record": "Recharge Record",
-	    "withdraw_record": "Withdraw Record",
-	    "recharge_amount": "Recharge Amount",
-	    "recharge_method": "Recharge Method",
-	    "recharge_time": "Recharge Time",
-	    "withdraw_amount": "Withdraw Amount",
-	    "withdraw_method": "Withdraw Method",
-	    "withdraw_time": "Withdraw Time",
-	    "transaction_time": "Transaction Time",
-	    "transaction_type": "Transaction Type",
-	    "transaction_amount": "Transaction Amount",
-	    "transaction_status": "Transaction Status",
-	    "transaction_details": "Transaction Details",
-	    "recharge_success": "Recharge Successful",
-	    "withdraw_success": "Withdraw Successful",
-	    "recharge_failed": "Recharge Failed",
-	    "withdraw_failed": "Withdraw Failed",
-	    "recharge_processing": "Recharge Processing",
-	    "withdraw_processing": "Withdraw Processing",
-	    "recharge_confirm": "Confirm Recharge",
-	    "withdraw_confirm": "Confirm Withdraw",
-	    "recharge_confirm_message": "Are you sure you want to recharge?",
-	    "withdraw_confirm_message": "Are you sure you want to withdraw?",
-	    "recharge_success_message": "Recharge successful, please check your balance",
-	    "withdraw_success_message": "Withdraw successful, please check your balance",
-	    "recharge_failed_message": "Recharge failed, please try again later",
-	    "withdraw_failed_message": "Withdraw failed, please try again later",
-	    "recharge_processing_message": "Recharge processing, please try again later",
-	    "withdraw_processing_message": "Withdraw processing, please try again later",
-	    "recharge_amount_notnull": "Recharge amount cannot be empty",
-	    "withdraw_amount_notnull": "Withdraw amount cannot be empty",
-	    "recharge_method_notnull": "Recharge method cannot be empty",
-	    "withdraw_method_notnull": "Withdraw method cannot be empty",
-	    "recharge_amount_error": "Recharge amount must be greater than 0",
-	    "withdraw_amount_error": "Withdraw amount must be greater than 0",
-	    "recharge_amount_max": "Recharge amount cannot exceed 1,000,000",
-	    "withdraw_amount_max": "Withdraw amount cannot exceed 1,000,000",
-	    "recharge_amount_min": "Recharge amount cannot be less than 0.01",
-	    "withdraw_amount_min": "Withdraw amount cannot be less than 0.01",
-	    "recharge_amount_decimal": "Recharge amount can have at most two decimal places"
-	},
-	
+		"recharge": "Recharge",
+		"withdraw": "Withdraw",
+		"transfer_points": "Transfer Points",
+		"points_transfer": "Points Transfer",
+		"current_peak": "Current Peak Available:",
+		"commission_record": "Commission Record",
+		"points_record": "Points Record",
+		"withdrawal": "Withdrawal (expected within 24 hours)",
+		"commission_rules": "Commission Calculation Rules",
+		"exceed_limit": "Exceed Limit",
+		"withdrawal_records": "Withdrawal Records",
+		"wechat": "WeChat",
+		"alipay": "Alipay",
+		"bank_card": "Bank Card",
+		"credited": "Credited",
+		"withdrawal_failed": "Withdrawal Failed",
+		"withdrawing": "Withdrawing",
+		"select_withdrawal_method": "Select Withdrawal Method",
+		"not_bound_click_to_bind": "Not Bound, Click to Bind",
+		"withdrawal_amount": "Withdrawal Amount",
+		"actual_amount_received": "Actual Amount Received",
+		"note": "Note: Actual received amount {commission}, consumption points {consumption}.No withdrawal fee",
+		"withdraw_to_wechat": "Withdraw to WeChat",
+		"withdraw_to_alipay": "Withdraw to Alipay",
+		"withdraw_to_bank_card": "Withdraw to Bank Card",
+		"please_select_withdrawal_method": "Please Select Withdrawal Method",
+		"enter_withdrawal_amount": "Enter Withdrawal Amount",
+		"alipay_not_bound": "Alipay Account Not Bound",
+		"bank_card_not_bound": "Bank Card Not Bound",
+		"go_bind": "Go Bind",
+		"application_successful": "Application Successful",
+		"current_exchangeable_amount": "Your Current Exchangeable Amount:",
+		"commission_to_points": "Convert to Points",
+		"enter_transfer_amount": "Enter Conversion Amount",
+		"current_commission_available": "Current Commission Available",
+		"transfer_amount_cannot_be_empty": "Conversion Amount Cannot Be Empty",
+		"transfer_amount_cannot_be_zero": "Conversion Amount Must Be Greater Than Zero",
+		"commission_to_points_irreversible": "Conversion to points is irreversible. Proceed?",
+		"conversion_successful": "Conversion Successful",
+		"points_recharge": "Points Recharge",
+		"recharge_amount": "Recharge Amount",
+		"enter_recharge_amount": "Enter Recharge Amount",
+		"actual_points_received": "Actual Points Received",
+		"note_recharge_bonus": "Note: Recharge {amount} yuan or more to get {multiplier} times the points",
+		"recharge_amount_less_than": "Recharge Amount Cannot Be Less Than {point}",
+		"recipient": "Recipient",
+		"enter_recipient_username": "Enter Recipient's Username",
+		"recipient_phone": "Recipient's Phone",
+		"enter_recipient_phone": "Enter Recipient's Phone Number",
+		"transfer_amount": "Transfer Amount",
+		"enter_transfer_amount": "Enter Transfer Amount",
+		"current_transferable_amount": "Current Transferable Amount:",
+		"recipient_cannot_be_empty": "Recipient Cannot Be Empty",
+		"recipient_phone_cannot_be_empty": "Recipient's Phone Cannot Be Empty",
+		"verification_code_cannot_be_empty": "Verification Code Cannot Be Empty",
+		"transfer_amount_less_than_zero": "Transfer Amount Must Be Greater Than Zero",
+		"recipient_cannot_be_self": "Recipient Cannot Be Yourself",
+		"user_does_not_exist": "User Does Not Exist!",
+		"username_phone_mismatch": "Recipient's Username and Phone Number Do Not Match!",
+		"cannot_transfer_to_self": "Cannot Transfer to Oneself",
+		"transfer_successful": "Transfer Successful"
+	},
+	"team": {
+		"total_people": "Total {count} People",
+		"retain_performance": "Keep Score",
+		"referrer": "Referrer",
+		"direct_referral": "Direct Referral",
+		"team_count": "Team: {count} People",
+		"new_performance_value": "New Score",
+		"no_team_members": "No Team Members"
+	},
+	"sign": {
+		"check_in": "Check-in",
+		"check_in_gift": "Gift with Check-in",
+		"consecutive_check_ins": "Consecutive Check-ins:",
+		"sunday": "Sun",
+		"monday": "Mon",
+		"tuesday": "Tue",
+		"wednesday": "Wed",
+		"thursday": "Thu",
+		"friday": "Fri",
+		"saturday": "Sat",
+		"days": "Days",
+		"month_year": "{month}/{year}",
+		"already_checked_in": "Already Checked In",
+		"check_in_description": "Check-in Description",
+		"daily_check_in_fixed": "Daily check-in earns {social} social value",
+		"congratulations_on_check_in": "Congratulations on Successful Check-in",
+		"check_in_not_started": "Check-in Event Has Not Started",
+		"daily_check_in_reward": "Earn {social} Points of Social Value for Daily Check-in",
+		"level_upgraded": "Your Level has been Upgraded to {level}"
+	},
+	// 订单相关
 	"order": {
+		"payment_result": "Payment Result",
+		"payment_successful": "Payment Successful",
+		"payment_failed": "Payment Failed",
+		"order_closed": "Order Closed",
+		"checking_payment_result": "Checking Payment Result...",
+		"return_home": "Return Home",
+		"retry_payment": "Retry Payment",
+		"view_order": "View Order",
+		"view_wallet": "View Wallet",
+		"my_group_buying": "My Group Buying",
+		"get_realtime_shipping_info": "Get Real-time Shipping and Order Status",
+		"subscribe_now": "Subscribe Now",
 		"pending_payment": "Pay Now",
 		"pending_shipment": "To Ship",
 		"pending_receipt": "To Receive",
 		"pending_review": "To Review",
-		"all_orders": "All Orders"
+		"all_orders": "All",
+		"my_orders": "My Orders",
+		"no_orders": "No Orders",
+		"order_number": "Order Number",
+		"total_items": "Total {count} Items",
+		"total_amount": "Total Amount",
+		"group_details": "Group Buying Details",
+		"view_details": "View Details",
+		"view_logistics": "View Logistics",
+		"confirm_receipt": "Confirm Receipt",
+		"cancel_order": "Cancel",
+		"review_order": "Review",
+		"delete_order": "Delete",
+		"continue_payment": "Continue Payment",
+		"confirm_receipt_question": "Confirm Receipt?",
+		"upgrade_wechat": "Please Upgrade WeChat Version",
+		"confirm_cancel_order": "Are You Sure You Want to Cancel the Order?",
+		"confirm_delete_order": "Are You Sure You Want to Delete the Order?",
+		"order_details": "Order Details",
+		"apply_for_service": "Apply for Service",
+		"refund_in_progress": "Refund in Progress",
+		"refund_successful": "Refund Successful",
+		"copy": "Copy",
+		"customer_message": "Customer Message",
+		"order_time": "Order Time",
+		"payment_time": "Payment Time",
+		"payment_method": "Payment Method",
+		"shipping_fee": "Shipping Fee",
+		"use_commission": "Use Commission",
+		"use_points": "Use Points",
+		"discount_amount": "Discount Amount",
+		"paid": "Paid",
+		"amount_due": "Amount Due",
+		"refunded": "Refunded",
+		"cancel_request": "Cancel Request",
+		"fill_return": "Fill Return",
+		"confirm_cancel_request": "Are You Sure You Want to Cancel This Request?",
+		"not_logged_in": "You are not logged in, please log in as {user} to continue",
+		"account_switch_needed": "You are currently logged in as {user}, please switch to {user} to proceed",
+		"product_quality": "Product Quality",
+		"service_attitude": "Service Attitude",
+		"meet_expectations": "Did the item meet your expectations? Share your experience to help others decide.",
+		"confirm_post_review": "Post Review?",
+		"missing_order_info": "Missing order information, please check",
+		"no_reviews_pending": "No Reviews Pending",
+		"after_sales_list": "After-Sales List",
+		"apply_for_after_sales": "Apply for Service",
+		"reason_for_application": "Reason for Application",
+		"select_reason_for_application": "Select a Reason",
+		"customer_prompt": "Please describe your issue, photo upload recommended",
+		"contact_customer_service": "Contact Support",
+		"select_after_sales_type": "Select Service Type",
+		"please_fill_in_description": "Please Fill in the Description",
+		"after_sales_details": "After-Sales Details",
+		"total_refund": "Total Refund",
+		"refund_amount": "Refund Amount",
+		"refund_commission": "Refund Commission",
+		"refund_points": "Refund Points",
+		"service_order_number": "Service Id",
+		"application_time": "Application Time",
+		"after_sales_type": "After-Sales Type",
+		"application_reason": "Application Reason",
+		"related_description": "Related Description",
+		"no_after_sales_details": "No After-Sales Details for This Order",
+		"submit_application": "Apply Now",
+		"processing": "Processing",
+		"completed": "Completed",
+		"refund_only": "Refund Only",
+		"refund_and_return": "Refund and Return",
+		"after_sales_progress": "After-Sales Progress",
+		"logistics_tracking": "Logistics Tracking",
+		"tracking_number": "Track #",
+		"courier_company": "Courier",
+		"shipping_time": "Shipped"
 	},
-	
-
+	// 设置相关
 	"setting": {
 		"signature": "Personal Signature",
 		"set": "Settings",
@@ -166,8 +722,38 @@
 		"prompt": "Prompt",
 		"confirm_logout": "Confirm logout?"
 	},
-
-
+	// 弹窗相关
+	"pop": {
+		"confirm": "Confirm",
+		"cancel": "Cancel",
+		"Commission": {
+			"usingCommission": "Using Commission",
+			"availableCommission": "Your available commission",
+			"currentOrderTotalPrice": "Current order price ",
+			"canUseMaxCommission": ", maximum ",
+			"commission": " commission can be used"
+		},
+		"ConsumptionPoints": {
+			"usingPoints": "Using Consumption Points",
+			"availablePoints": "Your available consumption points",
+			"currentOrderTotalPrice": "Current order price ",
+			"canUseMaxPoints": ", maximum ",
+			"points": " consumption points can be used"
+		},
+		"congratulations": "Congratulations",
+		"commission_earned": "Commission Earned",
+		"social_value_earned": "Social Value Earned",
+		"order_success": "Order Successful",
+		"auto_checkin_success": "Congratulations! Auto Check-in Successful!",
+		"daily_checkin_reward": "Earned {point} Points for Daily Check-in",
+		"level_upgraded": "Your Level has been Upgraded to",
+		"follow_public_account": "Follow Our Public Account",
+		"long_press_qrcode_follow": "Long Press QR Code to Follow Public Account",
+		"wechat_friend": "WeChat Friend",
+		"create_poster": "Create Poster",
+		"copy_link": "Copy Link"
+	},
+	// 校验规则相关
 	"rules": {
 		"username": "Please enter your username",
 		"username_taken": "Username is already taken!",
@@ -190,10 +776,24 @@
 		"click_change_password": "Click to change password",
 		"modify_success": "Modification successful, please log in again",
 		"unbind_warning": "After unbinding, you will no longer be able to log in to this account via WeChat",
-		"bind_phone": "Please bind your phone number"
-
-
+		"bind_phone": "Please bind your phone number",
+		"enter_username": "Enter Username",
+		"username_required": "Username Required",
+		"enter_phone": "Enter Phone Number",
+		"incorrect_phone_format": "Incorrect Phone Format",
+		"enter_password": "Enter Password",
+		"password_requirements": "6-12 chars with letters & numbers",
+		"enter_verification_code": "Enter Verification Code",
+		"enter_name": "Enter Name",
+		"enter_chinese_characters": "Enter Chinese Characters",
+		"enter_invoice_title": "Enter Invoice Title",
+		"enter_tax_number": "Enter Tax Number",
+		"enter_bank": "Enter Bank",
+		"enter_bank_card_number": "Enter Bank Card Number",
+		"correct_bank_card_number": "Enter Correct Bank Card Number",
+		"enter_alipay_account": "Enter Alipay Account",
+		"correct_account_number": "Enter Correct Account",
+		"enter_email": "Enter Email",
+		"correct_email": "Enter Correct Email"
 	}
-
-
 }

+ 10 - 16
locale/index.js

@@ -4,38 +4,32 @@ import en from './en.json';   // 英文
 import zhHans from './zh-Hans.json';  // 中文
 import { ref } from 'vue'
 
-
-const userLanguage = ref(uni.getStorageSync('userLanguage'));
-// 如果没有设置语言,则默认使用系统语言
-if(!userLanguage.value){
-	setLanguage(uni.getLocale() || 'en')
-	userLanguage.value = uni.getStorageSync('userLanguage')
-}
-
+const userLanguage = ref( uni.getLocale() || 'en-US');
+uni.setStorageSync('userLanguage', userLanguage.value); // 存储到缓存
 //创建配置
 const i18n = createI18n({    
 	locale: userLanguage.value,
-	// legacy: false,
 	fallbackLocale: 'en-US',
 	messages: {
-		// legacy: false,
-		'en-US':en,
+		'en':en,
 		'zh-Hans':zhHans
-		
 	},
 })
  
-function setLanguage(language) {
+async function setLanguage(language) {
   userLanguage.value = language;
   uni.setStorageSync('userLanguage', language); // 存储到缓存
   uni.setLocale(language)
-  location.reload();
+  location.reload(); // 刷新页面
 }
 
-
+function t(key,params){
+	return i18n.global.t(key,params)
+}
 
 //导出配置
 export default i18n
 export {
-  setLanguage
+  setLanguage,
+  t
 }

+ 678 - 69
locale/zh-Hans.json

@@ -10,19 +10,103 @@
 	"org_management": "组织管理",
 	"add_user": "新增用户",
 	"about": "关于",
-	"title.home":"首页",
-	"title.userinfo":"用户信息",
-	"title.settings":"用户设置",
-	"title.usercenter":"用户中心",
+	"title.home": "首页",
+	"title.userinfo": "用户信息",
+	"title.settings": "用户设置",
+	"title.usercenter": "用户中心",
+	"title.product_category": "商品分类",
+	"title.cart": "购物车",
+	"title.search": "搜索",
+	"title.product_details": "商品详情",
+	"title.group_buying": "拼团商品",
+	"title.flash_sale": "秒杀商品",
+	"title.product_list": "商品列表",
+	"title.rate_product": "评价商品",
+	"title.product_reviews": "商品评价",
+	"title.order_details": "订单详情",
+	"title.confirm_order": "确认订单",
+	"title.my_orders": "我的订单",
+	"title.apply_service": "申请售后",
+	"title.return_logistics": "退货物流",
+	"title.after_sales_list": "售后列表",
+	"title.after_sales_details": "售后详情",
+	"title.after_sales_progress": "售后进度",
+	"title.logistics_tracking": "物流轨迹",
+	"title.share": "分享",
+	"title.my_favorites": "我的收藏",
+	"title.my_footprints": "我的足迹",
+	"title.physical_address": "实体商品收货地址",
+	"title.virtual_address": "虚拟商品收货地址",
+	"title.edit_invoice": "发票抬头编辑",
+	"title.manage_invoice": "发票抬头管理",
+	"title.edit_address": "编辑地址",
+	"title.my_balance": "我的余额",
+	"title.wallet": "钱包",
+	"title.points_source": "消费分来源",
+	"title.points_recharge": "消费分充值",
+	"title.points_transfer": "消费分转账",
+	"title.commission_to_points": "佣金转消费分",
+	"title.withdraw": "提现",
+	"title.withdraw_records": "提现记录",
+	"title.commission_exchange": "佣金兑换",
+	"title.team": "团队",
+	"title.distribution": "分销",
+	"title.my_commission": "我的佣金",
+	"title.promote_products": "推广商品",
+	"title.distribution_orders": "分销订单",
+	"title.my_team": "我的团队",
+	"title.promoter_ranking": "推广人排行榜",
+	"title.commission_ranking": "佣金排行榜",
+	"title.apply_withdraw": "申请提现",
+	"title.check_in_center": "签到中心",
+	"title.shop_home": "店铺首页",
+	"title.system_settings": "系统设置",
+	"title.rich_text": "富文本",
+	"title.faq": "常见问题",
+	"title.error_page": "错误页面",
+	"title.coupon_center": "领券中心",
+	"title.coupons": "优惠券",
+	"title.customer_service": "客服",
+	"title.checkout": "收银台",
+	"title.fuiou_result": "富友支付结果",
+	"title.payment_result": "支付结果",
+	"title.recharge_balance": "充值余额",
+	"title.recharge_records": "充值记录",
+	"title.group_details": "拼团详情",
+	"title.my_groups": "我的拼团",
+	"title.marketing_products": "营销商品",
+	"title.group_activities": "拼团活动",
+	"title.seckill_activities": "秒杀活动",
+	"title.bargain_list": "砍价列表",
+	"title.bargain_details": "砍价详情",
+	// 通用
 	"common": {
+		"letcgo": "常来此购",
 		"home": "首页",
 		"category": "分类",
 		"cart": "购物车",
 		"my": "我的",
-		"none":"无",
+		"product": "商品",
+		"review": "评价",
+		"detail": "详情",
+		"view_all": "查看全部",
+		"none": "无",
+		"all": "全部",
 		"search_products": "搜索商品",
 		"buy_now": "立即购买",
 		"sold": "已售",
+		"sales_volume": "销量",
+		"go_buy": "去购买",
+		"add_to_cart": "加入购物车",
+		"redeem_now": "立即兑换",
+		"sold_out": "已售罄",
+		"product_not_exist": "商品不存在或已下架",
+		"awaiting_your_first_review": "期待您的第一个评价",
+		"browse_more": "再逛逛",
+		"select_product_options": "请选择商品规格",
+		"favorite": "收藏",
+		"unfavorite": "取消收藏",
+		"favorite_success": "收藏成功",
 		"points": "积分",
 		"cancel": "取消",
 		"confirm": "确定",
@@ -37,6 +121,7 @@
 		"yes": "是",
 		"no": "否",
 		"ok": "好的",
+		"post": "发布",
 		"loading": "加载中...",
 		"refresh": "刷新",
 		"search": "搜索",
@@ -45,22 +130,365 @@
 		"update": "更新",
 		"upload": "上传",
 		"download": "下载",
-		"level":"等级",
-		"no_level":"无等级"
-		
+		"level": "等级",
+		"no_level": "无等级",
+		"select": "选择",
+		"select_product_specification": "请选择商品规格",
+		"clear": "清空",
+		"delete_footprint": "删除足迹",
+		"select_all": "全选",
+		"my_footprints": "我的足迹",
+		"total_goods": "共 {number} 件商品",
+		"recommended": "综合推荐",
+		"price_asc": "价格升序",
+		"price_desc": "价格降序",
+		"sales": "销量",
+		"newest": "新品优先",
+		"enter_keywords": "请输入关键词",
+		"checkout": "去结算",
+		"total": "合计",
+		"default": "默认",
+		"empty_cart": "购物车空空如也,快去逛逛吧~",
+		"select_area": "选择区域",
+		"click_to_load_more": "点击加载更多",
+		"system": "系统",
+		"current_version": "当前版本",
+		"local_cache": "本地缓存",
+		"about_us": "关于我们",
+		"logout_account": "注销账号",
+		"confirm_logout": "确认注销账号?",
+		"no_data": "暂无数据",
+		"uploading": "上传中",
+		"verifying": "验证中",
+		"fetching": "获取中",
+		"save_success": "保存成功",
+		"update_success": "更新成功",
+		"logging_in": "登录中",
+		"login_success": "登录成功",
+		"registering": "注册中",
+		"register_success": "注册成功",
+		"sending": "发送中",
+		"send_success": "发送成功",
+		"binding": "绑定中",
+		"bind_success": "绑定成功",
+		"unbind": "解除绑定",
+		"unbind_success": "解绑成功",
+		"claiming": "领取中",
+		"claim_success": "领取成功",
+		"collect_success": "收藏成功",
+		"cancel_success": "取消成功",
+		"delete_success": "删除成功",
+		"clear_success": "清空成功",
+		"apply_success": "申请成功",
+		"change_success": "变动成功",
+		"added_to_cart": "已添加到购物车",
+		"just_now": "刚刚",
+		"minutes_ago": "{m}分钟前",
+		"hours_ago": "{h}小时前",
+		"days_ago": "{d}天前",
+		"months_ago": "{m}个月前",
+		"years_ago": "{y}年前",
+		"copy_success": "复制成功!",
+		"copy_fail": "复制失败!",
+		"sms_error": "短信发送事件错误",
+		"try_later": "请稍后再试",
+		"phone_format_error": "手机号码格式不正确",
+		"get_verification_code": "获取验证码",
+		"use_wechat_browser": "请使用微信网页浏览器打开",
+		"platform_not_supported": "暂不支持该平台",
+		"payment_manually_cancelled": "支付已手动取消",
+		"alipay_payment": "支付宝支付",
+		"copy_link_to_browser": "复制链接到外部浏览器",
+		"copy_link": "复制链接",
+		"wechat_payment": "微信支付",
+		"bind_wechat_for_payment": "请先绑定微信再使用微信支付",
+		"bind": "绑定",
+		"balance_payment": "余额支付",
+		"mock_payment": "模拟支付",
+		"update_prompt": "更新提示",
+		"new_version_ready": "新版本已经准备好,是否重启应用?",
+		"latest_version": "当前为最新版本",
+		"server_error_try_later": "服务器开小差啦,请稍后再试~",
+		"network_request_error": "网络请求出错",
+		"request_error": "请求错误",
+		"login_expired": "您的登陆已过期",
+		"please_login": "请登录",
+		"access_denied": "拒绝访问",
+		"request_error": "请求出错",
+		"request_timeout": "请求超时",
+		"frequent_requests": "请求频繁, 请稍后再访问",
+		"server_unavailable": "服务未实现",
+		"network_error": "网络错误",
+		"service_unavailable": "服务不可用",
+		"network_timeout": "网络超时",
+		"http_not_supported": "HTTP 版本不受支持",
+		"server_exception": "服务器异常",
+		"check_network_connection": "请检查您的网络连接",
+		"not_bound_wechat": "您未绑定微信,请先绑定"
+	},
+	"account": {
+		"account_login": "账号登录",
+		"sms_login": "短信登录",
+		"register": "注册",
+		"read_and_agree": "我已阅读并遵守",
+		"user_agreement": "《用户协议》",
+		"privacy_policy": "《隐私协议》",
+		"and": "与",
+		"wechat_authorization_login": "微信授权登录",
+		"wechat_authorization_register": "微信授权注册",
+		"please_agree": "请勾选同意",
+		"register_by_sharing_only": "您只能通过分享注册",
+		"quick_login_failed": "快捷登录失败",
+		"username": "用户名",
+		"password": "密码",
+		"enter_username": "请输入用户名",
+		"enter_valid_username": "请输入正确的用户名!",
+		"enter_password": "请输入密码",
+		"login": "登录",
+		"phone_number": "手机号",
+		"verification_code": "验证码",
+		"enter_verification_code": "请输入验证码",
+		"get_verification_code": "获取验证码",
+		"incorrect_phone_format": "手机号码格式不正确",
+		"enter_phone_number": "请输入手机号",
+		"username_exists": "已存在用户名!",
+		"change_phone_number": "更换手机号",
+		"bind_phone_number": "绑定手机号",
+		"old_phone_number": "原手机号",
+		"enter_old_phone_number": "请输入原手机号",
+		"security_notice": "为了您的账号安全,请使用本人手机号码",
+		"new_phone_number": "新手机号",
+		"enter_new_phone_number": "请输入新手机号",
+		"login_again": "修改成功,请重新登录",
+		"change_password": "修改密码",
+		"cancel_change": "取消修改",
+		"password_requirements": "需包含字母和数字,长度在6-12之间",
+		"modification_successful": "修改成功",
+		"authorization_info": "授权信息",
+		"complete_profile": "完善您的头像、昵称、手机号",
+		"avatar": "头像",
+		"select_avatar": "请选择头像",
+		"nickname": "昵称",
+		"enter_nickname": "请输入昵称",
+		"confirm_authorization": "确认授权",
+		"authorization_successful": "授权成功",
+		"first_time_login": "您首次登录,请输入手机号验证",
+		"continue_login": "继续登录",
+		"change_alipay_account": "更换支付宝账号",
+		"bind_alipay_account": "绑定支付宝账号",
+		"bind_realname_alipay": "请绑定已实名认证的支付宝账号",
+		"name": "名称",
+		"enter_name": "请输入名称",
+		"account": "账号",
+		"enter_account": "请输入账号",
+		"change_bank_card": "更换银行卡",
+		"bind_bank_card": "绑定银行卡",
+		"bank_branch": "开户行",
+		"bank_branch_example": "例:xx银行股份有限公司xx分行xx支行",
+		"account_holder": "开户名",
+		"account_holder_name": "个人姓名",
+		"bank_account_number": "银行卡账号",
+		"select_account_login": "请选择账号登录",
+		"wechat_no_bind": "该微信暂绑定无账号,请使用其他登陆方式",
+		"wechat_register": "微信注册",
+		"wechat_no_account": "您的微信没有账号,请先注册"
+	},
+	// 评论
+	"review": {
+		"all_reviews": "全部评价",
+		"positive": "好评",
+		"neutral": "中评",
+		"negative": "差评"
 	},
+	// 提交订单
+	"confirm": {
+		"confirm_order": "确认订单",
+		"shipping_fee": "运费",
+		"free_shipping": "包邮",
+		"order_note": "订单备注",
+		"communication_advice": "建议留言前先与商家沟通",
+		"quantity": "数量",
+		"price_details": "价格明细",
+		"total_price": "商品总价",
+		"total_items": "共{count}件商品",
+		"commission_deduction": "佣金抵扣",
+		"deduction": "抵扣{count}元",
+		"no_commission": "不使用佣金",
+		"consumption_point_deduction": "消费分抵扣",
+		"no_consumption_points": "不使用消费分",
+		"total_items_count": "共{count}件",
+		"submit_order": "提交订单",
+		"select_shipping_address": "请选择收货地址",
+		"insufficient_commission": "可用佣金不足",
+		"insufficient_consumption_points": "可用消费分不足",
+		"commission_points_no_mix": "佣金不能搭配消费分使用"
+	},
+	// 地址
+	"address": {
+		"select_shipping_address": "请选择收货地址",
+		"shipping_address": "收货地址",
+		"import_wechat_address": "导入微信地址",
+		"add_new_shipping_address": "新增收货地址",
+		"no_shipping_address": "暂无收货地址",
+		"edit_address": "编辑地址",
+		"add_address": "新增地址",
+		"recipient": "收货人",
+		"enter_recipient_name": "请填写收货人姓名",
+		"province_city_district": "省市区",
+		"select_province_city_district": "请选择省市区",
+		"detailed_address": "详细地址",
+		"enter_detailed_address": "请输入详细地址",
+		"set_as_default_address": "设为默认地址",
+		"confirm_delete_address": "确认删除此收货地址吗?",
+		"virtual_goods_address": "虚拟商品收货地址",
+		"edit_virtual_address": "编辑虚拟地址",
+		"add_virtual_address": "新增虚拟地址",
+		"set_as_default_virtual_address": "设为默认虚拟地址"
+	},
+	"selectSku": {
+		"insufficient_stock": "库存不足",
+		"select_specification": "请选择规格",
+		"amount_less_than_min": "输入金额少于可购买数量",
+		"insufficient_points": "可用积分不足",
+		"min_points_required": "最低使用1积分",
+		"purchase_quantity": "购买数量",
+		"purchase_amount": "购买金额",
+		"available_points": "当前可用积分:{points}"
+	},
+	// 收银台
+	"cashier": {
+		"cashier": "收银台",
+		"select_payment_method": "选择支付方式",
+		"phone_number": "手机号",
+		"enter_phone_number": "请输入手机号",
+		"verification_code": "验证码",
+		"enter_verification_code": "请输入验证码",
+		"checking_payment_environment": "检测支付环境中",
+		"payment_expired": "支付已过期",
+		"pay_now": "立即支付",
+		"verification_code_cannot_be_empty": "验证码不能为空",
+		"choose_payment_method": "请选择支付方式",
+		"order_paid": "该订单已支付",
+		"no_payment_order_found": "未查询到支付单信息",
+		"remaining_payment_time": "剩余支付时间 {h}:{m}:{s}"
+	},
+	// 分享页
+	"share": {
+		"share": "分享",
+		"poster_loading": "海报加载中...",
+		"long_press_to_save": "长按图片保存",
+		"save_success": "保存成功",
+		"save_failure": "保存失败"
+	},
+	"merchant": {
+		"merchant_registration": "商家入驻",
+		"merchant_name": "商家名称",
+		"enter_merchant_name": "请输入商家名称",
+		"contact_person": "联络人",
+		"enter_contact_person": "请输入联络人",
+		"contact_phone": "联络人手机号",
+		"enter_contact_phone": "请输入联络人手机号",
+		"legal_person": "法人",
+		"enter_legal_person": "请输入法人",
+		"legal_person_phone": "法人手机号",
+		"enter_legal_person_phone": "请输入法人手机号",
+		"legal_person_id_front": "法人身份证正面",
+		"legal_person_id_back": "法人身份证反面",
+		"location": "所在地",
+		"email": "邮箱",
+		"enter_email": "请输入邮箱",
+		"office_address": "办公地址",
+		"enter_office_address": "请输入办公地址",
+		"rights_phone": "维权电话",
+		"enter_rights_phone": "请输入维权电话",
+		"customer_service_phone": "客服电话",
+		"enter_customer_service_phone": "请输入客服电话",
+		"website": "官网",
+		"enter_website": "请输入官网",
+		"bank": "开户银行",
+		"enter_bank": "请输入开户银行",
+		"account_name": "账户名称",
+		"enter_account_name": "请输入账户名称",
+		"account_number": "账户号码",
+		"enter_account_number": "请输入账户号码",
+		"business_license": "营业执照",
+		"brand_authorization": "品牌授权书",
+		"download_template": "下载模板",
+		"other_certificates": "其他证书",
+		"introduction": "简介",
+		"enter_introduction": "请输入简介",
+		"status": "状态",
+		"review_in_progress": "审核中",
+		"review_records": "审核记录",
+		"changes": "变动",
+		"save_and_submit": "保存并提交",
+		"existing_merchant_alert": "当前用户({user}),已存在商户账号,请更换账号申请!",
+		"merchant_name_required": "商户名称不能为空",
+		"introduction_required": "简介不能为空",
+		"contact_required": "联络人不能为空",
+		"contact_phone_required": "联络人手机号不能为空",
+		"customer_service_phone_required": "客服电话不能为空",
+		"legal_person_required": "法人不能为空",
+		"legal_person_phone_required": "法人电话不能为空",
+		"account_name_required": "账户名称不能为空",
+		"account_number_required": "账户号码不能为空",
+		"bank_required": "开户银行不能为空",
+		"under_review": "审核中",
+		"approved": "通过",
+		"rejected": "拒绝",
+		"non_exclusive_authorization": "非独家品牌授权书",
+		"select_location": "请选择所在地",
+		"select_legal_person_id_front": "请选择上传法人身份证正面(国徽面)",
+		"select_legal_person_id_back": "请选择上传法人身份证背面(人像面)",
+		"upload_business_license": "请上传营业执照",
+		"upload_brand_authorization": "请上传品牌授权书"
+	},
+	// useGoods.js
+	"useGoods": {
+		"redeemed": "已兑换",
+		"in_stock": "库存",
+		"pending_payment": "待付款",
+		"awaiting_shipment": "待发货",
+		"awaiting_write_off": "待核销",
+		"awaiting_delivery": "待收货",
+		"awaiting_review": "待评价",
+		"completed": "已完成",
+		"closed": "已关闭",
+		"complete_payment_by": "请在 {time} 前完成支付",
+		"merchant_not_shipped": "商家未发货,请耐心等待",
+		"merchant_shipped": "商家已发货,请耐心等待",
+		"goods_received": "已收货,快去评价一下吧",
+		"transaction_completed": "交易完成,感谢您的支持",
+		"transaction_closed": "交易关闭",
+		"apply_for_after_sales": "申请售后",
+		"goods_awaiting_return": "商品待退货",
+		"merchant_awaiting_goods": "商家待收货",
+		"waiting_for_refund": "等待退款",
+		"refund_successful": "退款成功",
+		"buyer_cancelled": "买家取消",
+		"merchant_refused": "商家拒绝",
+		"merchant_refused_goods": "商家拒收货",
+		"unknown_status": "未知状态",
+		"refund_request_awaiting_merchant": "退款申请待商家处理",
+		"return_goods_fill_logistics": "请退货并填写物流信息",
+		"return_refund_request_awaiting_merchant": "退货退款申请待商家处理",
+		"refund_closed": "退款关闭",
+		"merchant_disagrees_with_refund_request": "商家不同意退款申请,拒绝原因:",
+		"merchant_refuses_to_accept_goods": "商家拒绝收货,不同意退款,拒绝原因:"
+	},
+	// 快捷菜单
 	"menu": {
-	    "quick_menu": "快捷菜单",
-	    "search": "搜索",
-	    "personal_center": "个人中心",
-	    "shopping_cart": "购物车",
-	    "browsing_history": "浏览记录",
-	    "my_favorites": "我的收藏",
-	    "customer_service": "客服",
-	},
-
+		"quick_menu": "快捷菜单",
+		"search": "搜索",
+		"personal_center": "个人中心",
+		"shopping_cart": "购物车",
+		"browsing_history": "浏览记录",
+		"my_favorites": "我的收藏",
+		"customer_service": "客服",
+	},
+	// 用户相关
 	"user": {
-		"name":"名称",
+		"name": "名称",
 		"username": "用户名",
 		"nickname": "昵称",
 		"password": "密码",
@@ -82,69 +510,204 @@
 		"female": "女",
 		"user_info": "用户信息",
 		"unbind_reminder": "解绑提醒",
-		"please_login":"请登录"
+		"please_login": "请登录"
 	},
+	// 钱包相关
 	"wallet": {
 		"wallet": "钱包",
 		"balance": "余额",
-		"commission":"佣金",
-		"consumption_points":"消费分",
-		"team":"团队",
-		"people":"人",
+		"commission": "佣金",
+		"consumption_points": "消费分",
+		"team": "团队",
+		"people": "人",
 		"generation_rules": "身价产生规则",
 		"benefits": "身价权益",
 		"recharge": "充值",
 		"withdraw": "提现",
-		"transaction_record": "交易记录",
-		"recharge_record": "充值记录",
-		"withdraw_record": "提现记录",
+		"transfer_points": "转消费分",
+		"points_transfer": "消费分转让",
+		"current_peak": "当前可获得峰值:",
+		"commission_record": "佣金记录",
+		"points_record": "消费分记录",
+		"withdrawal": "提现 (预计24小时左右到账)",
+		"commission_rules": "佣金计算规则",
+		"exceed_limit": "超出额度",
+		"withdrawal_records": "提现记录",
+		"wechat": "微信",
+		"alipay": "支付宝",
+		"bank_card": "银行卡",
+		"credited": "已到账",
+		"withdrawal_failed": "提现失败",
+		"withdrawing": "提现中",
+		"select_withdrawal_method": "选择提现方式",
+		"not_bound_click_to_bind": "暂未绑定,点击绑定",
+		"withdrawal_amount": "提现金额",
+		"actual_amount_received": "实到金额",
+		"note": "备注:实际到账金额{commission},消费分{consumption}。免提现手续费",
+		"withdraw_to_wechat": "提现到微信",
+		"withdraw_to_alipay": "提现到支付宝",
+		"withdraw_to_bank_card": "提现到银行卡",
+		"please_select_withdrawal_method": "请选择提现方式",
+		"enter_withdrawal_amount": "请输入提现金额",
+		"alipay_not_bound": "未绑定支付宝账号",
+		"bank_card_not_bound": "未绑定银行卡",
+		"go_bind": "去绑定",
+		"application_successful": "申请成功",
+		"current_exchangeable_amount": "您当前可兑换金额:",
+		"commission_to_points": "佣金转消费分",
+		"enter_transfer_amount": "请输入转换金额",
+		"current_commission_available": "您当前可转换的佣金额度",
+		"transfer_amount_cannot_be_zero": "转换金额不能小于等于0",
+		"commission_to_points_irreversible": "佣金转为消费分后不可逆,是否转换?",
+		"conversion_successful": "转换成功",
+		"points_recharge": "消费分充值",
 		"recharge_amount": "充值金额",
-		"recharge_method": "充值方式",
-		"recharge_time": "充值时间",
-		"withdraw_amount": "提现金额",
-		"withdraw_method": "提现方式",
-		"withdraw_time": "提现时间",
-		"transaction_time": "交易时间",
-		"transaction_type": "交易类型",
-		"transaction_amount": "交易金额",
-		"transaction_status": "交易状态",
-		"transaction_details": "交易详情",
-		"recharge_success": "充值成功",
-		"withdraw_success": "提现成功",
-		"recharge_failed": "充值失败",
-		"withdraw_failed": "提现失败",
-		"recharge_processing": "充值处理中",
-		"withdraw_processing": "提现处理中",
-		"recharge_confirm": "确认充值",
-		"withdraw_confirm": "确认提现",
-		"recharge_confirm_message": "您确定要充值吗?",
-		"withdraw_confirm_message": "您确定要提现吗?",
-		"recharge_success_message": "充值成功,请查看您的余额",
-		"withdraw_success_message": "提现成功,请查看您的余额",
-		"recharge_failed_message": "充值失败,请稍后再试",
-		"withdraw_failed_message": "提现失败,请稍后再试",
-		"recharge_processing_message": "充值处理中,请稍后再试",
-		"withdraw_processing_message": "提现处理中,请稍后再试",
-		"recharge_amount_notnull": "充值金额不能为空",
-		"withdraw_amount_notnull": "提现金额不能为空",
-		"recharge_method_notnull": "充值方式不能为空",
-		"withdraw_method_notnull": "提现方式不能为空",
-		"recharge_amount_error": "充值金额必须大于0",
-		"withdraw_amount_error": "提现金额必须大于0",
-		"recharge_amount_max": "充值金额不能超过1000000",
-		"withdraw_amount_max": "提现金额不能超过1000000",
-		"recharge_amount_min": "充值金额不能小于0.01",
-		"withdraw_amount_min": "提现金额不能小于0.01",
-		"recharge_amount_decimal": "充值金额最多只能有两位小数"
+		"enter_recharge_amount": "请输入充值金额",
+		"actual_points_received": "实到消费分",
+		"note_recharge_bonus": "备注:充值{amount}元及以上,可获得{multiplier}倍消费分",
+		"recharge_amount_less_than": "充值金额不能少于{point}",
+		"recipient": "接收人",
+		"enter_recipient_username": "请输入接收人用户名",
+		"recipient_phone": "接收人手机号",
+		"enter_recipient_phone": "请输入接收人手机号",
+		"transfer_amount": "转让金额",
+		"enter_transfer_amount": "请输入转让金额",
+		"current_transferable_amount": "您当前可转让的金额:",
+		"recipient_cannot_be_empty": "接收人不能为空",
+		"recipient_phone_cannot_be_empty": "接收人手机号不能为空",
+		"verification_code_cannot_be_empty": "验证码不能为空",
+		"transfer_amount_cannot_be_empty": "转让金额不能为空",
+		"transfer_amount_less_than_zero": "转让金额不能小于等于0",
+		"recipient_cannot_be_self": "接收人不能为自己",
+		"user_does_not_exist": "用户不存在!",
+		"username_phone_mismatch": "接收人用户名与手机号不匹配!",
+		"cannot_transfer_to_self": "不能给自己转账",
+		"transfer_successful": "转账成功"
+	},
+	"team": {
+		"total_people": "共{count}人",
+		"retain_performance": "保留绩效值",
+		"referrer": "推荐人",
+		"direct_referral": "直推人",
+		"team_count": "团队:{count}人",
+		"new_performance_value": "新增绩效值:",
+		"no_team_members": "暂无团队成员"
+	},
+	"sign": {
+		"check_in": "签到",
+		"check_in_gift": "签到有礼",
+		"consecutive_check_ins": "已连续签到",
+		"days": "天",
+		"sunday": "日",
+		"monday": "一",
+		"tuesday": "二",
+		"wednesday": "三",
+		"thursday": "四",
+		"friday": "五",
+		"saturday": "六",
+		"month_year": "{year}年{month}月",
+		"already_checked_in": "已签到",
+		"check_in_description": "签到说明",
+		"daily_check_in_fixed": "每日签到固定 {social} 身价",
+		"congratulations_on_check_in": "恭喜签到成功",
+		"check_in_not_started": "签到活动还未开始",
+		"daily_check_in_reward": "获得每日签到{social}点身价",
+		"level_upgraded": "您已升级等级为{level}"
 	},
+	// 订单相关
 	"order": {
+		"payment_result": "支付结果",
+		"payment_successful": "支付成功",
+		"payment_failed": "支付失败",
+		"order_closed": "该订单已关闭",
+		"checking_payment_result": "检测支付结果...",
+		"return_home": "返回首页",
+		"retry_payment": "重新支付",
+		"view_order": "查看订单",
+		"view_wallet": "查看钱包",
+		"my_group_buying": "我的拼团",
+		"get_realtime_shipping_info": "获取实时发货信息与订单状态",
+		"subscribe_now": "立即订阅",
 		"pending_payment": "待付款",
 		"pending_shipment": "待发货",
 		"pending_receipt": "待收货",
 		"pending_review": "待评价",
-		"all_orders": "全部订单"
+		"all_orders": "全部订单",
+		"my_orders": "我的订单",
+		"no_orders": "暂无订单",
+		"order_number": "订单号",
+		"total_items": "共 {count} 件商品",
+		"total_amount": "总金额",
+		"group_details": "拼团详情",
+		"view_details": "查看详情",
+		"view_logistics": "查看物流",
+		"confirm_receipt": "确认收货",
+		"cancel_order": "取消订单",
+		"review_order": "评价",
+		"delete_order": "删除订单",
+		"continue_payment": "继续支付",
+		"confirm_receipt_question": "确认收货?",
+		"upgrade_wechat": "请升级微信版本",
+		"confirm_cancel_order": "确定要取消订单吗?",
+		"confirm_delete_order": "确定要删除订单吗?",
+		"order_details": "订单详情",
+		"apply_for_service": "申请售后",
+		"refund_in_progress": "退款中",
+		"refund_successful": "退款成功",
+		"copy": "复制",
+		"customer_message": "用户留言",
+		"order_time": "下单时间",
+		"payment_time": "支付时间",
+		"payment_method": "支付方式",
+		"shipping_fee": "运费",
+		"use_commission": "使用佣金",
+		"use_points": "使用消费分",
+		"discount_amount": "优惠金额",
+		"paid": "已付款",
+		"amount_due": "需付款",
+		"refunded": "已退款",
+		"cancel_request": "取消申请",
+		"fill_return": "填写退货",
+		"confirm_cancel_request": "确定要取消此申请吗",
+		"not_logged_in": "您尚未登录,请登录: {user}后再试",
+		"account_switch_needed": "您当前登录的账号是{user},请切换到{user}后再试",
+		"product_quality": "商品质量",
+		"service_attitude": "服务态度",
+		"meet_expectations": "宝贝满足你的期待吗?说说你的使用心得,分享给想买的他们吧~",
+		"confirm_post_review": "发布评论?",
+		"missing_order_info": "缺少订单信息,请检查",
+		"no_reviews_pending": "无待评价订单",
+		"after_sales_list": "售后列表",
+		"apply_for_after_sales": "申请售后",
+		"reason_for_application": "申请原因",
+		"select_reason_for_application": "请选择申请原因",
+		"customer_prompt": "客官~请描述您遇到的问题,建议上传照片",
+		"contact_customer_service": "联系客服",
+		"select_after_sales_type": "请选择售后类型",
+		"please_fill_in_description": "请填写相关描述",
+		"after_sales_details": "售后详情",
+		"total_refund": "退款总额",
+		"refund_amount": "退款金额",
+		"refund_commission": "退款佣金",
+		"refund_points": "退款消费分",
+		"service_order_number": "服务单号",
+		"application_time": "申请时间",
+		"after_sales_type": "售后类型",
+		"application_reason": "申请原因",
+		"related_description": "相关描述",
+		"no_after_sales_details": "暂无该订单售后详情",
+		"submit_application": "提交申请",
+		"processing": "处理中",
+		"completed": "完成",
+		"refund_only": "仅退款",
+		"refund_and_return": "退款退货",
+		"after_sales_progress": "售后进度",
+		"logistics_tracking": "物流追踪",
+		"tracking_number": "快递单号",
+		"courier_company": "快递公司",
+		"shipping_time": "发货时间"
 	},
-	
+	// 设置相关
 	"setting": {
 		"signature": "个性签名",
 		"set": "设置",
@@ -164,7 +727,38 @@
 		"prompt": "提示",
 		"confirm_logout": "确认退出账号?"
 	},
-	
+	// 弹窗相关
+	"pop": {
+		"confirm": "确定",
+		"cancel": "取消",
+		"Commission": {
+			"usingCommission": "使用佣金",
+			"availableCommission": "您的可用佣金",
+			"currentOrderTotalPrice": "当前订单价格",
+			"canUseMaxCommission": ",可使用最高",
+			"commission": "佣金"
+		},
+		"ConsumptionPoints": {
+			"usingPoints": "使用消费分",
+			"availablePoints": "您的可用消费分",
+			"currentOrderTotalPrice": "当前订单价格",
+			"canUseMaxPoints": ",可使用最高",
+			"points": "消费分"
+		},
+		"congratulations": "恭喜",
+		"commission_earned": "获得佣金",
+		"social_value_earned": "获得身价",
+		"order_success": "下单成功",
+		"auto_checkin_success": "恭喜!自动签到成功!",
+		"daily_checkin_reward": "获得每日签到{point}点身价",
+		"level_upgraded": "您已升级等级为",
+		"follow_public_account": "关注公众号",
+		"long_press_qrcode_follow": "长按二维码关注公众号",
+		"wechat_friend": "微信好友",
+		"create_poster": "生成海报",
+		"copy_link": "复制链接"
+	},
+	// 校验规则相关
 	"rules": {
 		"username": "请输入用户名",
 		"username_taken": "用户名已被使用!",
@@ -187,8 +781,23 @@
 		"click_change_password": "点击修改密码",
 		"bind_phone": "请绑定手机号",
 		"unbind_warning": "解绑后您将无法通过微信登录此账号",
-		"modify_success": "修改成功,请重新登录"
+		"modify_success": "修改成功,请重新登录",
+		"enter_username": "请输入用户名",
+		"username_required": "用户名不能为空",
+		"enter_phone": "请输入手机号",
+		"enter_password": "请输入密码",
+		"password_requirements": "需包含字母和数字,长度在6-12之间",
+		"enter_verification_code": "请输入验证码",
+		"enter_name": "请输入姓名",
+		"enter_chinese_characters": "请输入汉字",
+		"enter_invoice_title": "请输入发票抬头名称",
+		"enter_tax_number": "请输入税号",
+		"enter_bank": "请输入开户行",
+		"enter_bank_card_number": "请输入银行卡号",
+		"correct_bank_card_number": "请输入正确的银行卡号",
+		"enter_alipay_account": "请输入支付宝账号",
+		"correct_account_number": "请输入正确账号",
+		"enter_email": "请输入邮箱",
+		"correct_email": "请输入正确邮箱账号"
 	}
-
-
 }

+ 1 - 0
main.js

@@ -2,6 +2,7 @@ import App from './App';
 import { createSSRApp } from 'vue';
 import { setupPinia } from './sheep/store';
 import i18n from './locale';
+
 function clearLinkId() {
   uni.removeStorageSync('linkId');
 }

+ 32 - 29
pages/app/sign.vue

@@ -1,23 +1,24 @@
 <!-- 页面  -->
 <template>
-	<s-layout title="签到有礼">
+	<s-layout :title="t('sign.check_in_gift')">
 		<view v-if="state.loading"></view>
 		<view class="sign-wrap" v-else-if="state.data && !state.loading">
 			<!-- 签到日历 -->
 			<view class="content-box calendar">
 				<view class="sign-everyday ss-flex ss-col-center ss-row-between ss-p-x-30">
-					<text class="sign-everyday-title">签到日历</text>
+					<text class="sign-everyday-title">{{t('sign.check_in')}}</text>
 					<view class="sign-num-box">
-						已连续签到
+						
+						{{t('sign.consecutive_check_ins')}}
 						<text class="sign-num">{{ state.continue_days }}</text>
-						
+						{{t('sign.days')}}
 					</view>
 				</view>
 
 				<!-- 切换年月 -->
 				<view class="bar ss-flex ss-col-center ss-row-center">
 					<view class="previous" @tap="handleCalendar(0)"><text class="cicon-back"></text></view>
-					<view class="date ss-m-x-20">{{ state.cur_year || '--' }} 年 {{ state.cur_month || '--' }} 月</view>
+					<view class="date ss-m-x-20"> {{t('sign.month_year',{year:state.cur_year || '--',month:state.cur_month || '--'})}}</view>
 					<view class="next" @tap="handleCalendar(1)"><text class="cicon-forward"></text></view>
 				</view>
 
@@ -62,51 +63,53 @@
 
 					<!-- 签到按钮 -->
 					<view class="ss-flex ss-col-center ss-row-center sign-box ss-m-y-40">
-						<button class="ss-reset-button sign-btn" v-if="state.isSign === 0" @tap="onSign">签到</button>
-						<button class="ss-reset-button already-btn" v-if="state.isSign === 1" disabled>已签到</button>
+						<button class="ss-reset-button sign-btn" v-if="state.isSign === 0" @tap="onSign">{{t('sign.check_in')}}</button>
+						<button class="ss-reset-button already-btn" v-if="state.isSign === 1" disabled>{{t('sign.already_checked_in')}}</button>
 					</view>
 				</view>
 			</view>
 			<view class="bg-white ss-m-t-16 ss-p-t-30 ss-p-b-60 ss-p-x-40">
-				<view class="activity-title ss-m-b-30">签到说明</view>
+				<view class="activity-title ss-m-b-30">{{t('sign.check_in_description')}}</view>
 				<view class="activity-des">
-					1、每日签到固定 {{ state.data.signInSocialStatus }} 身价
+					1.{{t('sign.daily_check_in_fixed',{social:state.data.signInSocialStatus})}}
 					<!-- <text v-if="state.data.rules.is_inc == '1'">
 						,次日递增奖励 {{ state.data.rules.inc_num }} 身价,直到
 						{{ state.data.rules.until_day }} 天之后不再增加
 					</text> -->
 				</view>
-				<view class="activity-des" v-if="state.data.rules.discounts?.length > 0">
+				<!-- <view class="activity-des" v-if="state.data.rules.discounts?.length > 0">
 					2、<text class="" v-for="i in state.data.rules.discounts" :key="i">
 						连续签到 {{ i.full }} 天,奖励 {{ i.value }} 身价;
 					</text>
-				</view>
-				<view class="activity-des" v-if="state.data.rules.is_replenish == '1'">
+				</view> -->
+				<!-- <view class="activity-des" v-if="state.data.rules.is_replenish == '1'">
 					{{ state.data.rules.discounts?.length > 0 ? '3' : '2' }}、用户在
 					{{ state.data.rules.replenish_limit }} 天内,可补签
 					{{ state.data.rules.replenish_days }} 天,每次补签消耗
 					{{ state.data.rules.replenish_num }}身价
-				</view>
+				</view> -->
 			</view>
 		</view>
-		<s-empty v-else-if="!state.data && !state.loading" icon="/static/data-empty.png" text="签到活动还未开始">
+		<s-empty v-else-if="!state.data && !state.loading" icon="/static/data-empty.png" :text="t('sign.check_in_not_started')">
 		</s-empty>
 		<su-popup :show="state.showModel" type="center" round="10" :isMaskClick="false">
 			<view class="model-box ss-flex-col">
 				<view class="ss-m-t-56 ss-flex-col ss-col-center">
 					<text class="cicon-check-round"></text>
-					<view class="score-title">恭喜签到成功</view>
+					<view class="score-title">{{t('sign.congratulations_on_check_in')}}</view>
 					<view class="model-title ss-flex ss-col-center ss-m-t-22 ss-m-b-30">
-						获得每日签到{{state.signin.social}}点身价
+						{{t('sign.daily_check_in_reward',{social:state.signin.social})}}
+						
 					</view> 
-					<view class="model-title ss-flex ss-col-center ss-m-b-30" v-if="state?.upgradeOrNot ">
-						您已升级等级为{{ state?.socialStatusName }}
+					<view class="model-title ss-flex ss-col-center ss-m-b-30" v-if="state?.upgradeOrNot ">
+						{{t('sign.level_upgraded',{level:state?.socialStatusName})}}
+						
 					</view>
 				</view>
 				<view class="model-bg ss-flex-col ss-col-center ss-row-right">
 					<!-- <view class="title ss-m-b-64">签到成功</view> -->
 					<view class="ss-m-b-40">
-						<button class="ss-reset-button confirm-btn" @click="onConfirm()">确认</button>
+						<button class="ss-reset-button confirm-btn" @click="onConfirm()">{{t('common.confirm')}}</button>
 					</view>
 				</view>
 			</view>
@@ -146,7 +149,7 @@
 		onMounted
 	} from 'vue';
 	import SignInApi from '@/sheep/api/member/signin';
-
+	import { t } from '@/locale'
 	const headerBg = sheep.$url.css('/static/images/sign.png');
 
 	const state = reactive({
@@ -158,31 +161,31 @@
 		cur_month: 0, //当前选的月
 		cur_day: 0, //当前选择的天
 		weeks_ch: [{
-				title: '日',
+				title: t('sign.sunday'),
 				value: '0',
 			},
 			{
-				title: '一',
+				title: t('sign.monday'),
 				value: '1',
 			},
 			{
-				title: '二',
+				title:  t('sign.tuesday'),
 				value: '2',
 			},
 			{
-				title: '三',
+				title:  t('sign.wednesday'),
 				value: '3',
 			},
 			{
-				title: '四',
+				title:  t('sign.thursday'),
 				value: '4',
 			},
 			{
-				title: '五',
+				title:  t('sign.friday'),
 				value: '5',
 			},
 			{
-				title: '六',
+				title:  t('sign.saturday'),
 				value: '6',
 			},
 		], //星期
@@ -325,7 +328,7 @@
 	const handleCalendar = (type) => {
 		const cur_year = parseInt(state.cur_year);
 		const cur_month = parseInt(state.cur_month);
-		console.log(cur_year,cur_month)
+		// console.log(cur_year,cur_month)
 		var newMonth;
 		var newYear = cur_year;
 		if (type === 0) {
@@ -346,7 +349,7 @@
 				newMonth = '0' + newMonth;
 			}
 		}
-		console.log(newYear + '-' + newMonth)
+		// console.log(newYear + '-' + newMonth)
 		getData({
 			month: newYear + '-' + newMonth,
 		});

+ 10 - 10
pages/goods/comment/add.vue

@@ -1,6 +1,6 @@
 <!-- 评价  -->
 <template>
-	<s-layout title="评价">
+	<s-layout :title="t('order.review_order')">
 		<view>
 			<view v-for="(item, index) in state.orderInfo.items" :key="item.id">
 				<view>
@@ -14,18 +14,18 @@
 					<view class="form-item">
 						<!-- 评分 -->
 						<view class="star-box ss-flex ss-col-center">
-							<view class="star-title ss-m-r-40">商品质量</view>
+							<view class="star-title ss-m-r-40">{{ t('order.product_quality') }}</view>
 							<uni-rate v-model="state.commentList[index].descriptionScores" />
 						</view>
 						<view class="star-box ss-flex ss-col-center">
-							<view class="star-title ss-m-r-40">服务态度</view>
+							<view class="star-title ss-m-r-40">{{ t('order.service_attitude') }}</view>
 							<uni-rate v-model="state.commentList[index].benefitScores" />
 						</view>
 						<!-- 评价 -->
 						<view class="area-box">
 							<uni-easyinput :inputBorder="false" type="textarea" maxlength="120" autoHeight
 								v-model="state.commentList[index].content"
-								placeholder="宝贝满足你的期待吗?说说你的使用心得,分享给想买的他们吧~" />
+								:placeholder="t('order.meet_expectations')" />
 							<!-- TODO 非繁人:文件上传 -->
 							<view class="img-box">
 								<s-uploader v-model:url="state.commentList[index].picUrls" fileMediatype="image"
@@ -41,7 +41,7 @@
 		<su-fixed bottom placeholder>
 			<view class="foot_box ss-flex ss-row-center ss-col-center">
 				<button class="ss-reset-button post-btn ui-BG-Main-Gradient ui-Shadow-Main" @tap="onSubmit">
-					发布
+					{{ t('common.post') }}
 				</button>
 			</view>
 		</su-fixed>
@@ -57,7 +57,7 @@
 		reactive
 	} from 'vue';
 	import OrderApi from '@/sheep/api/trade/order';
-
+	import { t } from '@/locale'
 	const state = reactive({
 		orderInfo: {},
 		commentList: [],
@@ -66,8 +66,8 @@
 
 	async function onSubmit() {
 		uni.showModal({
-			title: '提示',
-			content: '是否评论?',
+			title: t('setting.prompt'),
+			content: t('order.confirm_post_review'),
 			success: async function(res) {
 				if (!res.confirm) {
 					return;
@@ -86,7 +86,7 @@
 
 	onLoad(async (options) => {
 		if (!options.id) {
-			sheep.$helper.toast(`缺少订单信息,请检查`);
+			sheep.$helper.toast(t('order.missing_order_info'));
 			return
 		}
 		state.id = options.id;
@@ -96,7 +96,7 @@
 			data
 		} = await OrderApi.getOrder(state.id);
 		if (code !== 0) {
-			sheep.$helper.toast('无待评价订单');
+			sheep.$helper.toast(t('order.no_reviews_pending'));
 			return
 		}
 		// 处理评论

+ 6 - 5
pages/goods/comment/list.vue

@@ -1,6 +1,6 @@
 <!-- 商品评论的分页 -->
 <template>
-  <s-layout title="全部评价">
+  <s-layout :title="$t('review.all_reviews')">
     <su-tabs
       :list="state.type"
       :scrollable="false"
@@ -32,14 +32,15 @@
   import { reactive } from 'vue';
   import _ from 'lodash';
   import commentItem from '../components/detail/comment-item.vue';
+  import { t } from '@/locale'
 
   const state = reactive({
     id: 0, // 商品 SPU 编号
     type: [
-      { type: 0, name: '全部' },
-      { type: 1, name: '好评' },
-      { type: 2, name: '中评' },
-      { type: 3, name: '差评' },
+      { type: 0, name: t('common.all') },
+      { type: 1, name: t('review.positive') },
+      { type: 2, name: t('review.neutral') },
+      { type: 3, name: t('review.negative') },
     ],
     currentTab: 0, // 选中的 TAB
     loadStatus: '',

+ 4 - 4
pages/goods/components/detail/detail-cell-sku.vue

@@ -1,7 +1,7 @@
 <template>
 	<!-- SKU 选择的提示框 -->
 
-	<detail-cell label="选择" :value="value" />
+	<detail-cell :label="$t('common.select')" :value="value" />
 </template>
 
 <script setup>
@@ -9,8 +9,8 @@
 		computed
 	} from 'vue';
 	import detailCell from './detail-cell.vue';
-
-	const props = defineProps({
+	import { t } from '@/locale'
+ 	const props = defineProps({
 		modelValue: {
 			type: Array,
 			default () {
@@ -23,7 +23,7 @@
 	});
 	const value = computed(() => {
 		if (!props.sku?.id) {
-			return '请选择商品规格';
+			return t('common.select_product_specification');
 		}
 		let str = '';
 		props.sku.properties.forEach(property => {

+ 4 - 4
pages/goods/components/detail/detail-comment-card.vue

@@ -4,7 +4,7 @@
     <view class="card-header ss-flex ss-col-center ss-row-between ss-p-b-30">
       <view class="ss-flex ss-col-center">
         <view class="line"></view>
-        <view class="title ss-m-l-20 ss-m-r-10">评价</view>
+        <view class="title ss-m-l-20 ss-m-r-10">{{ $t('common.review')}}</view>
         <view class="des">({{ state.total }})</view>
       </view>
       <view
@@ -12,7 +12,7 @@
         @tap="sheep.$router.go('/pages/goods/comment/list', { id: goodsId })"
         v-if="state.commentList.length > 0"
       >
-        <button class="ss-reset-button more-btn">查看全部</button>
+        <button class="ss-reset-button more-btn">{{ $t('common.view_all')}}</button>
         <text class="cicon-forward" />
       </view>
     </view>
@@ -25,7 +25,7 @@
         v-if="state.commentList.length === 0"
         paddingTop="0"
         icon="/static/comment-empty.png"
-        text="期待您的第一个评价"
+        :text="t('common.awaiting_your_first_review')"
       />
     </view>
   </view>
@@ -36,7 +36,7 @@
   import sheep from '@/sheep';
   import CommentApi from '@/sheep/api/product/comment';
   import commentItem from './comment-item.vue';
-
+import  { t } from '@/locale'
   const props = defineProps({
     goodsId: {
       type: [Number, String],

+ 1 - 1
pages/goods/components/detail/detail-content-card.vue

@@ -3,7 +3,7 @@
   <view class="detail-content-card bg-white ss-m-x-20 ss-p-t-20">
     <view class="card-header ss-flex ss-col-center ss-m-b-30 ss-m-l-20">
       <view class="line"></view>
-      <view class="title ss-m-l-20 ss-m-r-20">详情</view>
+      <view class="title ss-m-l-20 ss-m-r-20">{{ $t('common.detail')}}</view>
     </view>
     <view class="card-content">
       <mp-html :content="content" />

+ 6 - 6
pages/goods/components/detail/detail-navbar.vue

@@ -80,7 +80,7 @@
 	import {
 		showShareModal
 	} from '@/sheep/hooks/useModal';
-	
+	import { t } from '@/locale'
 	import { showAuthModal } from '@/sheep/hooks/useModal';
 	import FavoriteApi from '@/sheep/api/product/favorite';
 	const isLogin = computed(() => sheep.$store('user').isLogin);
@@ -95,17 +95,17 @@
 		tabOpacityVal: 0,
 		curTab: 'goods',
 		tabList: [{
-				label: '商品',
+				label: t('common.product'),
 				value: 'goods',
 				to: 'detail-swiper-selector',
 			},
 			{
-				label: '评价',
+				label: t('common.review'),
 				value: 'comment',
 				to: 'detail-comment-selector',
 			},
 			{
-				label: '详情',
+				label: t('common.detail'),
 				value: 'detail',
 				to: 'detail-content-selector',
 			},
@@ -193,7 +193,7 @@
 			if (code !== 0) {
 				return
 			}
-			sheep.$helper.toast('取消收藏');
+			sheep.$helper.toast(t('common.unfavorite'));
 			props.modelValue.favorite = false;
 			// 情况二:添加收藏
 		} else {
@@ -206,7 +206,7 @@
 			if (code !== 0) {
 				return
 			}
-			sheep.$helper.toast('收藏成功');
+			sheep.$helper.toast(t('common.favorite_success'));
 			props.modelValue.favorite = true;
 		}
 	}

+ 2 - 2
pages/goods/components/detail/detail-tabbar.vue

@@ -7,7 +7,7 @@
 					@tap="onIndex">
 					<image class="item-icon" src="@/static/icon/index.png"
 						mode="aspectFit" />
-					<view class="item-title">首页</view>
+					<view class="item-title">{{$t('common.home')}}</view>
 				</view>
 				<!-- <view v-if="serviceIcon" class="detail-tabbar-item ss-flex ss-flex-col ss-row-center ss-col-center"
 					@tap="onShopIndex">
@@ -26,7 +26,7 @@
 					@tap="sheep.$router.go('/pages/index/cart');">
 					<image class="item-icon" src="@/static/icon/cart.png"
 						mode="aspectFit" />
-					<view class="item-title">购物车</view>
+					<view class="item-title">{{$t('common.buy_now')}}</view>
 				</view>
 				<slot></slot>
 			</view>

+ 10 - 10
pages/goods/index.vue

@@ -30,7 +30,7 @@
 									</text>
 								</view>
 								<view class="origin-price-text" v-if="state.goodsInfo.promotionFee >= 0">
-									积分:{{ fen2yuan(state.selectedSku.promotionFee || state.goodsInfo.promotionFee)  }}
+									{{$t('common.points')}}:{{ fen2yuan(state.selectedSku.promotionFee || state.goodsInfo.promotionFee)  }}
 								</view>
 							</view>
 							<view class="sales-text">
@@ -86,28 +86,28 @@
 					<!-- 如果有库存并且不是积分商品和虚拟商品 可以加入购物车和购买 -->
 					<view class="buy-box ss-flex ss-col-center ss-p-r-20" v-if="state.goodsInfo.stock > 0 && state.goodsInfo.spuType && state.goodsInfo.spuPayType == 1">
 						<button class="ss-reset-button add-btn ui-Shadow-Main"  @tap="state.showSelectSku = true">
-							加入购物车
+							{{$t('common.add_to_cart')}}
 						</button>
 						<button class="ss-reset-button buy-btn ui-Shadow-Main" @tap="state.showSelectSku = true">
-							立即购买
+							{{$t('common.buy_now')}}
 						</button>
 					</view>
 
 					<view class="buy-box ss-flex ss-col-center ss-p-r-20"  v-else-if="state.goodsInfo.stock > 0 &&  state.goodsInfo.spuPayType != 1 || !state.goodsInfo.spuType">
 						<button class="ss-reset-button disabled-btn buy-btn ui-Shadow-Main " @tap="state.showSelectSku = true">
 							<template v-if="state.goodsInfo.spuPayType != 1 && !state.goodsInfo.spuType" >
-								立即兑换
+								{{$t('common.redeem_now')}}
 							</template>	
 							 <template v-else-if="!state.goodsInfo.spuType">
-								 立即购买
+								 {{$t('common.buy_now')}}
 							 </template>	
 							 <template v-else>
-								 立即兑换
+								 {{$t('common.redeem_now')}}
 							 </template>
 						</button>
 					</view>
 					<view class="buy-box ss-flex ss-col-center ss-p-r-20" v-else>
-						<button class="ss-reset-button disabled-btn" disabled style="background: #999999;"> 已售罄 </button>
+						<button class="ss-reset-button disabled-btn" disabled style="background: #999999;"> {{$t('common.sold_out')}} </button>
 					</view>
 				</detail-tabbar>
 
@@ -159,7 +159,7 @@
 	import SpuApi from '@/sheep/api/product/spu';
 	import ShareApi from '@/sheep/api/distri/share';
 	import { showAuthModal } from '@/sheep/hooks/useModal';
-
+	import { t } from '@/locale'
 	onPageScroll(() => {});
 
 	const state = reactive({
@@ -184,7 +184,7 @@
 	// 添加购物车
 	function onAddCart(e) {
 		if (!e.id) {
-			sheep.$helper.toast('请选择商品规格');
+			sheep.$helper.toast(t('common.select_product_options'));
 			return;
 		}
 		if(!isLogin.value){
@@ -199,7 +199,7 @@
 		
 		
 		if (!state.selectedSku.id) {
-			sheep.$helper.toast('请选择商品规格');
+			sheep.$helper.toast(t('common.select_product_options'));
 			return;
 		}
 		sheep.$router.go('/pages/order/confirm', {

+ 9 - 9
pages/goods/list.vue

@@ -90,9 +90,9 @@
 	import { onLoad, onReachBottom } from '@dcloudio/uni-app';
 	import sheep from '@/sheep';
 	import _ from 'lodash';
-  import { resetPagination } from '@/sheep/util';
-  import SpuApi from '@/sheep/api/product/spu';
-
+	import { resetPagination } from '@/sheep/util';
+	import SpuApi from '@/sheep/api/product/spu';
+	import { t } from '@/locale'
 	const sys_navBar = sheep.$platform.navbar;
 	const emits = defineEmits(['close', 'change']);
 
@@ -112,29 +112,29 @@
     keyword: '',
     categoryId: 0,
 		tabList: [{
-				name: '综合推荐',
+				name: t('common.recommended'),
 				list: [{
-						label: '综合推荐'
+						label: t('common.recommended')
 					},
 					{
-						label: '价格升序',
+						label: t('common.price_asc'),
 						sort: 'price',
 						order: true,
 					},
 					{
-						label: '价格降序',
+						label: t('common.price_desc'),
 						sort: 'price',
 						order: false,
 					},
 				],
 			},
 			{
-				name: '销量',
+				name: t('common.sales'),
 				sort: 'salesCount',
 				order: false
 			},
 			{
-				name: '新品优先',
+				name: t('common.newest'),
 				value: 'createTime',
         order: false
 			},

+ 11 - 11
pages/index/cart.vue

@@ -1,21 +1,21 @@
 <template>
-	<s-layout title="购物车" tabbar="/pages/index/cart" :bgStyle="{ color: '#fff' }">
-		<s-empty v-if="state.list.length === 0" text="购物车空空如也,快去逛逛吧~" icon="/static/cart-empty.png" />
+	<s-layout :title="$t('common.cart')" tabbar="/pages/index/cart" :bgStyle="{ color: '#fff' }">
+		<s-empty v-if="state.list.length === 0" :text="$t('common.empty_cart')" icon="/static/cart-empty.png" />
 
 		<!-- 头部 -->
 		<view class="cart-box ss-flex ss-flex-col ss-row-between" v-if="state.list.length">
 			<view class="cart-header ss-flex ss-col-center ss-row-between ss-p-x-30">
 				<view class="header-left ss-flex ss-col-center ss-font-26">
-					
-					<text class="goods-number ui-TC-Main ss-flex">{{ state.list.length }}</text>
-					件商品
+					
+					<text class="goods-number ui-TC-Main ss-flex"> {{ $t('common.total_goods',{number:state.list.length}) }}</text>
+					
 				</view>
 				<view class="header-right">
 					<button v-if="state.editMode" class="ss-reset-button" @tap="state.editMode = false">
-						取消
+						 {{ $t('common.cancel') }}
 					</button>
 					<button v-else class="ss-reset-button ui-TC-Main" @tap="state.editMode = true">
-						编辑
+						{{ $t('common.edit') }}
 					</button>
 				</view>
 			</view>
@@ -59,9 +59,9 @@
 						<label class="check-box ss-flex ss-col-center ss-p-r-30" @tap="onSelectAll">
 							<radio :checked="state.isAllSelected" color="var(--ui-BG-Main)"
 								style="transform: scale(0.8)" @tap.stop="onSelectAll" />
-							<view class="ss-m-l-8"> 全选 </view>
+							<view class="ss-m-l-8"> {{ $t('common.all') }} </view>
 						</label>
-						<text>合计:</text>
+						<text>{{ $t('common.total') }}:</text>
 						<view class="text-price price-text">
 							{{ fen2yuan(state.totalPriceSelected)}}
 						</view>
@@ -69,11 +69,11 @@
 					<view class="footer-right">
 						<button v-if="state.editMode" class="ss-reset-button ui-BG-Main-Gradient pay-btn ui-Shadow-Main"
 							@tap="onDelete">
-							删除
+							{{ $t('common.delete') }}
 						</button>
 						<button v-else class="ss-reset-button ui-BG-Main-Gradient pay-btn ui-Shadow-Main"
 							@tap="onConfirm">
-							去结算
+							{{ $t('common.checkout') }}
 							{{ state.selectedIds?.length ? `(${state.selectedIds.length})` : '' }}
 						</button>
 					</view>

+ 1 - 1
pages/index/category.vue

@@ -1,6 +1,6 @@
 <!-- 商品分类列表 -->
 <template>
-	<s-layout title="分类" tabbar="/pages/index/category" :bgStyle="{ color: '#fff' }">
+	<s-layout :title="$t('common.category')" tabbar="/pages/index/category" :bgStyle="{ color: '#fff' }">
 		<view class="s-category">
 			<view class="three-level-wrap ss-flex ss-col-top" :style="[{ height: pageHeight + 'px' }]">
 				<!-- 商品分类(左) -->

+ 1 - 2
pages/index/index.vue

@@ -6,6 +6,7 @@
 		<s-layout :title="$t('common.home')" navbar="custom" tabbar="/pages/index/index" :bgStyle="template.page"
 			:navbarStyle="template.style?.navbar" onShareAppMessage>
 			<s-block v-for="(item, index) in template.components" :key="index" :styles="item.property.style">
+				
 				<s-block-item :type="item.id" :data="item.property" :styles="item.property.style" />
 			</s-block>
 		</s-layout>
@@ -28,8 +29,6 @@
 		showWalletModal,
 		colseWalletModal
 	} from '@/sheep/hooks/useModal';
-
-	import { setLanguage } from '@/locale';
 	// 隐藏原生tabBar
 	uni.hideTabBar();
 	

+ 19 - 20
pages/index/login.vue

@@ -1,13 +1,13 @@
 <!-- 微信公众号的登录回调页 -->
 <template>
 	<view />
-	<!-- 佣金确权 -->
+	
 	<su-popup :show="selectSocialUsers" type="center" round="10" :isMaskClick="false">
 		<view class="head-nav">
 			<view class="head-box">
 				<view class="ss-flex ss-m-b-20">
 					<view class="isActive head-title">
-						请选择账号登录
+						{{ t('account.select_account_login') }}
 					</view>
 				</view>
 			</view>
@@ -21,9 +21,7 @@
 					<view>{{user.username}}</view>
 				</view>
 				<view v-if="!state.socialUsers.length" style="padding: 20rpx;width: 520rpx;text-align: center;margin-top: 100rpx;">
-					该微信暂绑定无账号
-					<br/>
-					请使用其他登陆方式
+					{{ t('account.wechat_no_bind') }}
 				</view>
 			</scroll-view>
 		</view>
@@ -33,15 +31,15 @@
 			<view class="head-box">
 				<view class="ss-flex ss-m-b-20">
 					<view class="isActive head-title">
-						微信注册
+						{{ t('account.wechat_register') }}
 					</view>
 				</view>
 			</view>
 			<!-- 表单项 -->
 			<uni-forms  v-model="state.model" :rules="state.rules" validateTrigger="bind"
 				labelWidth="140" labelAlign="center" class="loginUniForm">
-				<uni-forms-item name="username" label="用户名" class="loginUniFormItem" :error-message="state.usernameErrorMsg">
-					<uni-easyinput placeholder="请输入用户名" v-model="state.registerReqVO.username" :inputBorder="false"
+				<uni-forms-item name="username" :label="t('account.username')" class="loginUniFormItem" :error-message="state.usernameErrorMsg">
+					<uni-easyinput :placeholder="t('account.enter_username')" v-model="state.registerReqVO.username" :inputBorder="false"
 						:clearable="false" @blur="verifyUsername">
 						<template v-slot:right>
 							<view v-if="!state.verifyUsername" class="icon">
@@ -54,18 +52,18 @@
 					</uni-easyinput>
 				</uni-forms-item>
 
-				<uni-forms-item name="mobile" label="手机号" class="mobile loginUniFormItem ss-p-t-10" :error-message="state.mobileErrorMsg">
+				<uni-forms-item name="mobile" :label="t('account.phone_number')" class="mobile loginUniFormItem ss-p-t-10" :error-message="state.mobileErrorMsg">
 					<phoneInternationalInput :verify-username="state.verifyUsername" @input="mobileInput"/>
 				</uni-forms-item>
-				<uni-forms-item name="code" label="验证码" class="loginUniFormItem">
-					<uni-easyinput placeholder="请输入验证码" v-model="state.model.code" :inputBorder="false" type="number"
+				<uni-forms-item name="code" :label="t('account.verification_code')" class="loginUniFormItem">
+					<uni-easyinput :placeholder="t('account.enter_verification_code')" v-model="state.model.code" :inputBorder="false" type="number"
 						maxlength="4">
 					</uni-easyinput>
 				</uni-forms-item>
 			</uni-forms>
 			<view
 				style="display: flex;justify-content: space-between;padding: 40rpx;padding-bottom: 0rpx;padding-bottom: 40rpx">
-				<button class="ss-reset-button login-btn-start" @tap="officialRegister"> 注册 </button>
+				<button class="ss-reset-button login-btn-start" @tap="officialRegister"> {{ t('account.register') }} </button>
 			</view>
 		</view>
 	</su-popup>
@@ -95,6 +93,7 @@
 	} from '@/sheep/validate/form';
 	import AuthUtil from '@/sheep/api/member/auth';
 	import phoneInternationalInput from '@/sheep/components/s-auth-modal/components/phone-international-input.vue';
+	import { t } from '@/locale'
 	const mobileInput = (mobile,mobileError)=>{
 		state.model.mobile = mobile;
 		state.mobileErrorMsg = mobileError;
@@ -180,7 +179,7 @@
 			state.usernameErrorMsg = ''
 			state.verifyUsername = data
 		}else {
-			state.usernameErrorMsg = '已存在用户名!'
+			state.usernameErrorMsg = t('account.username_exists')
 			state.verifyUsername = data
 		}
 	}
@@ -188,10 +187,10 @@
 	async function officialRegister() {
 		// 没有linkId 不给注册
 		const linkId = uni.getStorageSync("linkId");
-		if (!linkId) {
-			sheep.$helper.toast('您只能通过分享注册');
-			return false;
-		}
+		// if (!linkId) {
+		// 	sheep.$helper.toast(t('account.register_by_sharing_only'));
+		// 	return false;
+		// }
 		state.registerReqVO.linkId = linkId
 		const {
 			code
@@ -239,11 +238,11 @@
 			console.log("login.vue的res", res)
 			if (!res) {
 				uni.showModal({
-					title: '提示',
-					content: '您的微信没有账号,请通过分享注册',
+					title: t('setting.prompt'),
+					content: t('account.wechat_no_account'),
 					confirmColor: '#0e932e', //确定字体颜色
 					showCancel: false, //没有取消按钮的弹框
-					buttonText: '确定',
+					buttonText: t('common.confirm'),
 					success: function(res) {
 						if (res.confirm) {
 							sheep.$router.go('/pages/index/index')

+ 20 - 20
pages/order/aftersale/apply.vue

@@ -1,6 +1,6 @@
 <!-- 售后申请 -->
 <template>
-  <s-layout title="申请售后">
+  <s-layout :title="t('order.apply_for_after_sales')">
     <!-- 售后商品 -->
     <view class="goods-box">
       <s-goods-item
@@ -15,7 +15,7 @@
     <uni-forms ref="form" v-model="formData" :rules="rules" label-position="top">
       <!-- 售后类型 -->
       <view class="refund-item">
-        <view class="item-title ss-m-b-20">售后类型</view>
+        <view class="item-title ss-m-b-20">{{t('order.after_sales_type')}}</view>
         <view class="ss-flex-col">
           <radio-group @change="onRefundChange">
             <label
@@ -36,24 +36,24 @@
       </view>
       <!-- 退款金额 -->
       <view class="refund-item ss-flex ss-col-center ss-row-between" @tap="state.showModal = true">
-        <text class="item-title">退款金额</text>
+        <text class="item-title">{{t('order.refund_amount')}}</text>
         <view class="ss-flex refund-cause ss-col-center">
           <text class="ss-m-r-20">¥{{ fen2yuan(state.item.payPrice) }}</text>
         </view>
       </view>
       <!-- 申请原因 -->
       <view class="refund-item ss-flex ss-col-center ss-row-between" @tap="state.showModal = true">
-        <text class="item-title">申请原因</text>
+        <text class="item-title">{{t('order.application_reason')}}</text>
         <view class="ss-flex refund-cause ss-col-center">
           <text class="ss-m-r-20" v-if="formData.applyReason">{{ formData.applyReason }}</text>
-          <text class="ss-m-r-20" v-else>请选择申请原因~</text>
+          <text class="ss-m-r-20" v-else>{{t('order.select_reason_for_application')}}</text>
           <text class="cicon-forward" style="height: 28rpx"></text>
         </view>
       </view>
 
       <!-- 留言 -->
       <view class="refund-item">
-        <view class="item-title ss-m-b-20">相关描述</view>
+        <view class="item-title ss-m-b-20">{{t('order.related_description')}}</view>
         <view class="describe-box">
           <uni-easyinput
             :inputBorder="false"
@@ -62,7 +62,7 @@
             maxlength="120"
             autoHeight
             v-model="formData.applyDescription"
-            placeholder="客官~请描述您遇到的问题,建议上传照片"
+            :placeholder="t('order.customer_prompt')"
           />
           <!-- TODO 非繁人:上传的测试 -->
           <view class="upload-img">
@@ -82,10 +82,10 @@
     <su-fixed bottom placeholder>
       <view class="foot-wrap">
         <view class="foot_box ss-flex ss-col-center ss-row-between ss-p-x-30">
-          <button class="ss-reset-button contcat-btn" @tap="sheep.$router.go('/pages/chat/index')">
+          <!-- <button class="ss-reset-button contcat-btn" @tap="sheep.$router.go('/pages/chat/index')">
             联系客服
-          </button>
-          <button class="ss-reset-button ui-BG-Main-Gradient sub-btn" @tap="submit">提交</button>
+          </button> -->
+          <button class="ss-reset-button ui-BG-Main-Gradient sub-btn" @tap="submit">{{t('common.submit')}}</button>
         </view>
       </view>
     </su-fixed>
@@ -94,7 +94,7 @@
     <su-popup :show="state.showModal" round="10" :showClose="true" @close="state.showModal = false">
       <view class="modal-box page_box">
         <view class="modal-head item-title head_box ss-flex ss-row-center ss-col-center">
-          申请原因
+          {{t('order.application_reason')}}
         </view>
         <view class="modal-content content_box">
           <radio-group @change="onChange">
@@ -114,7 +114,7 @@
         </view>
         <view class="modal-foot foot_box ss-flex ss-row-center ss-col-center">
           <button class="ss-reset-button close-btn ui-BG-Main-Gradient" @tap="onReason">
-            确定
+            {{t('common.confirm')}}
           </button>
         </view>
       </view>
@@ -130,7 +130,7 @@
   import TradeConfigApi from '@/sheep/api/trade/config';
   import { fen2yuan } from '@/sheep/hooks/useGoods';
   import AfterSaleApi from '@/sheep/api/trade/afterSale';
-
+  import { t } from '@/locale'
   const form = ref(null);
   const state = reactive({
     orderId: 0, // 订单编号
@@ -142,11 +142,11 @@
     // 售后类型
     wayList: [
       // {
-      //   text: '仅退款',
+      //   text: t('order.refund_only')
       //   value: '10',
       // },
       {
-        text: '退款退货',
+        text: t('order.refund_and_return'),
         value: '20',
       },
     ],
@@ -166,7 +166,7 @@
   async function submit() {
     if(formData.way == ""){
 	  	uni.showToast({
-	  		title: '请选择售后类型',
+	  		title: t('order.select_after_sales_type'),
 	  		icon: 'error',    
 	  		duration: 1000   
 	  	})  
@@ -174,7 +174,7 @@
 	  }
 	  if(state.currentValue == ""){
 	  	uni.showToast({
-	  		title: '请选择申请原因',
+	  		title: t('order.reason_for_application'),
 	  		icon: 'error',    
 	  		duration: 1000    
 	  	})  
@@ -182,7 +182,7 @@
 	  }
     if(formData.applyDescription == ""){
 	  	uni.showToast({
-	  		title: '请填写相关描述',
+	  		title:t('order.please_fill_in_description'),
 	  		icon: 'error',    
 	  		duration: 1000   
 	  	})  
@@ -202,7 +202,7 @@
     const { code } = await AfterSaleApi.createAfterSale(data);
     if (code === 0) {
       uni.showToast({
-        title: '申请成功',
+        title: t('wallet.application_successful')
       });
       sheep.$router.go('/pages/order/aftersale/list');
     }
@@ -321,7 +321,7 @@
     background-color: #fff;
 
     .sub-btn {
-      width: 336rpx;
+      width: 100%;
       line-height: 74rpx;
       border-radius: 38rpx;
       color: rgba(#fff, 0.9);

+ 29 - 31
pages/order/aftersale/detail.vue

@@ -1,6 +1,6 @@
 <!-- 售后详情 -->
 <template>
-	<s-layout title="售后详情" :navbar="!isEmpty(state.info) && state.loading ? 'inner' : 'normal'">
+	<s-layout :title="t('order.after_sales_details')" :navbar="!isEmpty(state.info) && state.loading ? 'inner' : 'normal'">
 		
 		<view class="content_box" v-if="!isEmpty(state.info) && state.loading">
 			<!-- 步骤条 -->
@@ -49,21 +49,21 @@
 			<!-- 退款金额 -->
 			<view class="aftersale-content ss-m-y-20">
 				<view class="aftersale-item ss-flex ss-col-center">
-					<view class="item-title">退款总额:</view>
+					<view class="item-title">{{ t('order.total_refund') }}:</view>
 					<view class="item-content">
 						¥{{ fen2yuan(state.info.refundPriceTotal) }}
 					</view>
 				</view>
 				<view class="aftersale-item ss-flex ss-col-center">
-					<view class="item-title">退款金额:</view>
+					<view class="item-title">{{ t('order.refund_amount') }}:</view>
 					<view class="item-content">¥{{ fen2yuan(state.info.refundPrice) }}</view>
 				</view>
 				<view class="aftersale-item ss-flex ss-col-center">
-					<view class="item-title">退款佣金:</view>
+					<view class="item-title"> {{ t('order.refund_commission') }}:</view>
 					<view class="item-content">¥{{ points2point(state.info.refundIntegral) }}</view>
 				</view>
 				<view class="aftersale-item ss-flex ss-col-center">
-					<view class="item-title">退款消费分:</view>
+					<view class="item-title"> {{ t('order.refund_points') }}:</view>
 					<view class="item-content">¥{{ points2point(state.info.refundConsumptionPoints) }}</view>
 				</view>
 			</view>
@@ -79,42 +79,42 @@
 			<!-- 服务内容 -->
 			<view class="aftersale-content">
 				<view class="aftersale-item ss-flex ss-col-center">
-					<view class="item-title">服务单号:</view>
+					<view class="item-title">{{ t('order.service_order_number') }}:</view>
 					<view class="item-content ss-m-r-16">{{ state.info.no }}</view>
-					<button class="ss-reset-button copy-btn" @tap="onCopy">复制</button>
+					<button class="ss-reset-button copy-btn" @tap="onCopy"> {{ t('order.copy') }} </button>
 				</view>
 				<view class="aftersale-item ss-flex ss-col-center">
-					<view class="item-title">申请时间:</view>
+					<view class="item-title">{{ t('order.application_time') }}:</view>
 					<view class="item-content">
 						{{ sheep.$helper.timeFormat(state.info.createTime, 'yyyy-mm-dd hh:MM:ss') }}
 					</view>
 				</view>
 				<view class="aftersale-item ss-flex ss-col-center">
-					<view class="item-title">售后类型:</view>
-					<view class="item-content">{{ state.info.way === 10 ? '仅退款' : '退款退货' }}</view>
+					<view class="item-title">{{ t('order.after_sales_type') }}:</view>
+					<view class="item-content">{{ state.info.way === 10 ? t('order.refund_only') : t('order.refund_and_return') }}</view>
 				</view>
 				<view class="aftersale-item ss-flex ss-col-center">
-					<view class="item-title">申请原因:</view>
+					<view class="item-title">{{ t('order.application_reason') }}:</view>
 					<view class="item-content">{{ state.info.applyReason }}</view>
 				</view>
 				<view class="aftersale-item ss-flex ss-col-center">
-					<view class="item-title">相关描述:</view>
+					<view class="item-title">{{ t('order.related_description') }}:</view>
 					<view class="item-content">{{ state.info.applyDescription }}</view>
 				</view>
 			</view>
 		</view>
 
 		<!-- 操作区 -->
-		<s-empty v-if="isEmpty(state.info) && state.loading" icon="/static/order-empty.png" text="暂无该订单售后详情" />
+		<s-empty v-if="isEmpty(state.info) && state.loading" icon="/static/order-empty.png" :text="t('order.no_after_sales_details')" />
 		<su-fixed bottom placeholder bg="bg-white" v-if="!isEmpty(state.info)">
 			<view class="foot_box">
 				<button class="ss-reset-button btn" v-if="state.info.buttons?.includes('cancel')"
 					@tap="onApply(state.info.id)">
-					取消申请
+					{{ t('order.cancel_request') }}
 				</button>
 				 <button class="ss-reset-button btn" v-if="state.info.buttons?.includes('delivery')"
 					@tap="sheep.$router.go('/pages/order/aftersale/return-delivery', { id: state.info.id })">
-					填写退货
+					{{ t('order.fill_return') }}
 				</button> 
 				<!-- <button class="ss-reset-button contcat-btn btn" @tap="sheep.$router.go('/pages/chat/index')">
 					联系客服
@@ -147,6 +147,7 @@
 		handleAfterSaleButtons
 	} from '@/sheep/hooks/useGoods';
 	import AfterSaleApi from '@/sheep/api/trade/afterSale';
+	import { t } from '@/locale';
 	const userInfo = sheep.$store('user').userInfo;
 	const statusBarHeight = sheep.$platform.device.statusBarHeight * 2;
 	const headerBg = sheep.$url.css('/static/img/shop/order/order_bg.png');
@@ -156,18 +157,18 @@
 		loading: false,
 		active: 0, // 在 list 的激活位置
 		list: [{
-			title: '提交申请',
+			title: t('order.submit_application'),
 		}, {
-			title: '处理中',
+			title: t('order.processing'),
 		}, {
-			title: '完成'
+			title: t('order.completed')
 		}], // 时间轴
 	});
 
 	function onApply(id) {
 		uni.showModal({
-			title: '提示',
-			content: '确定要取消此申请吗?',
+			title: t('setting.prompt'),
+			content: t('order.confirm_cancel_request'),
 			success: async function(res) {
 				if (!res.confirm) {
 					return;
@@ -226,25 +227,21 @@
 		//如果没登陆就进来则有可能是在微信消息推送进来的 提示登陆
 		if (!isLogin.value) {
 			showAuthModal();
-			sheep.$helper.toast("您尚未登录,请登录:" + options.username + "后再试", 3000);
-			return false;
+			sheep.$helper.toast(t('order.not_logged_in',{user:options.username}), 3000);
 		} else {
 			
 			// 如果
 			if (options.username) {
 				//  如果登陆了但不是该订单的账号,提示有问题
-				console.log(JSON.parse(uni.getStorageSync("user-store")).userInfo.username)
-				if (options.username != JSON.parse(uni.getStorageSync("user-store")).userInfo.username) {
-					sheep.$helper.toast("您当前登录的账号是" + JSON.parse(uni.getStorageSync("user-store")).userInfo.username + ",请切换到" + options.username +
-						"后再试",
-						3000);
-					return false;
-				}
+					console.log(JSON.parse(uni.getStorageSync("user-store")).userInfo.username)
+					if (options.username != JSON.parse(uni.getStorageSync("user-store")).userInfo.username) {
+						sheep.$helper.toast(t('order.account_switch_needed',{user1:JSON.parse(uni.getStorageSync("user-store")).userInfo.username,user2:options.username}),3000);
+					}
 			}
 		}
 
 		if (!options.id) {
-			sheep.$helper.toast(`缺少订单信息,请检查`);
+			sheep.$helper.toast(t('order.missing_order_info'));
 			return
 		}
 		state.id = options.id;
@@ -400,7 +397,8 @@
 		justify-content: flex-end;
 
 		.btn {
-			width: 160rpx;
+			// width: 160rpx;
+			padding:0 10rpx;
 			line-height: 60rpx;
 			background: rgba(238, 238, 238, 1);
 			border-radius: 30rpx;

+ 13 - 12
pages/order/aftersale/list.vue

@@ -1,17 +1,17 @@
 <!-- 售后列表 -->
 <template>
-	<s-layout title="售后列表">
+	<s-layout :title="t('order.after_sales_list')">
 		<!-- tab -->
 		<su-sticky bgColor="#fff">
 			<su-tabs :list="tabMaps" :scrollable="false" @change="onTabsChange" :current="state.currentTab" />
 		</su-sticky>
-		<s-empty v-if="state.pagination.total === 0" icon="/static/data-empty.png" text="暂无数据" />
+		<s-empty v-if="state.pagination.total === 0" icon="/static/data-empty.png" :text="t('common.no_data')" />
 		<!-- 列表 -->
 		<view v-if="state.pagination.total > 0">
 			<view class="list-box ss-m-y-20" v-for="order in state.pagination.list" :key="order.id"
 				@tap="sheep.$router.go('/pages/order/aftersale/detail', { id: order.id })">
 				<view class="order-head ss-flex ss-col-center ss-row-between">
-					<text class="no">服务单号:{{ order.no }}</text>
+					<text class="no">{{t('order.service_order_number')}}:{{ order.no }}</text>
 					<text class="state">{{ formatAfterSaleStatus(order) }}</text>
 				</view>
 				<s-goods-item
@@ -22,7 +22,7 @@
         />
 				<view class="apply-box ss-flex ss-col-center ss-row-between border-bottom ss-p-x-20">
 					<view class="ss-flex ss-col-center">
-						<view class="title ss-m-r-20">{{ order.way === 10 ? '仅退款' : '退款退货' }}</view>
+						<view class="title ss-m-r-20">{{ order.way === 10 ? t('order.refund_only') : t('order.refund_and_return') }}</view>
 						 <view class="value">{{ formatAfterSaleStatusDescription(order) }}</view>
 					</view>
 					<text class="_icon-forward"></text>
@@ -31,7 +31,7 @@
           <!-- TODO 功能缺失:填写退货信息 -->
 					<view>
 						<button class="ss-reset-button tool-btn" @tap.stop="onApply(order.id)"
-							v-if="order?.buttons.includes('cancel')">取消申请</button>
+							v-if="order?.buttons.includes('cancel')">{{t('order.cancel_request')}}</button>
 					</view>
 				</view>
 			</view>
@@ -47,9 +47,9 @@
 	import { onLoad, onReachBottom } from '@dcloudio/uni-app';
 	import { reactive } from 'vue';
 	import _ from 'lodash';
-  import { formatAfterSaleStatus, formatAfterSaleStatusDescription, handleAfterSaleButtons } from '@/sheep/hooks/useGoods';
-  import AfterSaleApi from '@/sheep/api/trade/afterSale';
-
+	import { formatAfterSaleStatus, formatAfterSaleStatusDescription, handleAfterSaleButtons } from '@/sheep/hooks/useGoods';
+	import AfterSaleApi from '@/sheep/api/trade/afterSale';
+	import { t } from '@/locale'
 	const paginationNull = {
 		list: [],
     total: 0,
@@ -71,7 +71,7 @@
 
   // TODO 非繁人:优化点,增加筛选
 	const tabMaps = [{
-			name: '全部',
+			name: t('common.all'),
 			value: 'all',
 		},
 		// {
@@ -118,8 +118,8 @@
 
 	function onApply(orderId) {
 		uni.showModal({
-			title: '提示',
-			content: '确定要取消此申请吗?',
+			title: t('setting.prompt'),
+			content:  t('order.confirm_cancel_request'),
 			success: async function(res) {
 				if (!res.confirm) {
           return;
@@ -181,7 +181,8 @@
 			height: 100rpx;
 
 			.tool-btn {
-				width: 160rpx;
+				// width: 160rpx;
+				padding:0 10rpx;
 				height: 60rpx;
 				background: #f6f6f6;
 				border-radius: 30rpx;

+ 1 - 1
pages/order/aftersale/log.vue

@@ -1,6 +1,6 @@
 <!-- 售后日志列表  -->
 <template>
-  <s-layout title="售后进度">
+  <s-layout :title="$t('order.after_sales_progress')">
     <view class="log-box">
       <view v-for="(item, index) in state.list" :key="item.id">
         <log-item :item="item" :index="index" :data="state.list" />

+ 23 - 22
pages/order/confirm.vue

@@ -1,5 +1,5 @@
 <template>
-	<s-layout title="确认订单">
+	<s-layout :title="t('confirm.confirm_order')">
 		<!-- TODO:这个判断先删除 v-if="state.orderInfo.need_address === 1" -->
 		<view class="bg-white address-box ss-m-b-14 ss-r-b-10" @tap="onSelectAddress">
 			<s-address-item :item="state.addressInfo" :spuType="state.orderPayload.spuType" :hasBorderBottom="false">
@@ -23,9 +23,9 @@
 				:price="item.highPrecisionPrice ?  item?.highPrecisionPrice :item?.price " :num="item?.count"
 				:virtualPirce="item.highPrecisionPrice ? true :false " />
 			<view class="order-item ss-flex ss-col-center ss-row-between ss-p-x-20 bg-white ss-r-10">
-				<view class="item-title">运费</view>
+				<view class="item-title">{{ t('confirm.shipping_fee') }}</view>
 				<view class="ss-flex ss-col-center">
-					{{items.price.deliveryPrice?"¥"+fen2yuan(items.price.deliveryPrice):"包邮"}}
+					{{items.price.deliveryPrice?"¥"+fen2yuan(items.price.deliveryPrice):t('confirm.free_shipping')}}
 				</view>
 			</view>
 			<!-- 暂不做开发票 -->
@@ -42,23 +42,23 @@
 				</view>
 			</view> -->
 			<view class="order-item ss-flex ss-col-center ss-row-between ss-p-x-20 bg-white ss-r-10">
-				<view class="item-title">订单备注</view>
+				<view class="item-title">{{ t('confirm.order_note') }}</view>
 				<view class="ss-flex ss-col-center">
-					<uni-easyinput maxlength="20" placeholder="建议留言前先与商家沟通" v-model="items.remark" :inputBorder="false"
+					<uni-easyinput maxlength="20" :placeholder="t('confirm.communication_advice')" v-model="items.remark" :inputBorder="false"
 						:clearable="false" />
 				</view>
 			</view>
 
 			<view class="order-item ss-flex ss-col-center ss-row-between ss-p-x-20 bg-white ss-r-10"
 				v-if="state.orderPayload.spuType == 0">
-				<view class="item-title">数量</view>
+				<view class="item-title">{{ t('confirm.quantity') }}</view>
 				<view class="ss-flex ss-col-center">
 
 					{{totalItemCount}}
 				</view>
 			</view>
 			<view class="order-item ss-flex ss-col-center ss-row-between ss-p-x-20 bg-white ss-r-10" v-else>
-				<view class="item-title">总价</view>
+				<view class="item-title">{{ t('common.total') }}</view>
 				<view class="ss-flex ss-col-center">
 					<image src="@/static/icon/points.png" v-if="state.orderPayload.spuPayType == 2"
 						style="width:30rpx;height:30rpx"></image>
@@ -71,11 +71,11 @@
 		<!-- 价格信息 -->
 		<view class="bg-white total-card-box ss-p-20 ss-m-b-14 ss-r-10">
 			<view class="title-text">
-				价格明细
+				{{ t('confirm.price_details') }}
 			</view>
 			<view class="total-box-content border-bottom">
 				<view class="order-item ss-flex ss-col-center ss-row-between">
-					<view class="item-title">商品总价 共{{totalItemCount}}件商品</view>
+					<view class="item-title">{{ t('confirm.total_price') }} {{ t('confirm.total_items',{count:totalItemCount}) }}</view>
 					<view class="ss-flex ss-col-center">
 						<text class="item-value ss-m-r-24">
 							<image src="@/static/icon/points.png" v-if="state.orderPayload.spuPayType == 2"
@@ -92,7 +92,7 @@
 				</view>
 				<!-- TODO 非繁人:接入佣金 -->
 				<view class="order-item ss-flex ss-col-center ss-row-between">
-					<view class="item-title">运费</view>
+					<view class="item-title">{{ t('confirm.shipping_fee') }}</view>
 					<view class="ss-flex ss-col-center">
 						<text class="item-value ss-m-r-24">
 							<image src="@/static/icon/points.png" v-if="state.orderPayload.spuPayType == 2"
@@ -103,23 +103,23 @@
 					</view>
 				</view>
 				<view class="order-item ss-flex ss-col-center ss-row-between" v-if="state.orderPayload.spuPayType != 2">
-					<view class="item-title">佣金抵扣</view>
+					<view class="item-title">{{ t('confirm.commission_deduction') }}</view>
 					<view class="ss-flex ss-col-center" @tap="state.showPoints = true">
 						<!-- <text class="item-value text-red">
 		    </text> -->
 						<text class="item-value" :class="state.usedPoint > 0 ? 'text-red' : 'text-disabled'">
-							{{ state.usedPoint > 0 ?  ' 抵扣' + state.usedPoint + '元' : '不使用佣金' }}
+							{{ state.usedPoint > 0 ?  t('confirm.deduction',{count:state.usedPoint})  : t('confirm.no_commission') }}
 						</text>
 						<text class="_icon-forward item-icon" />
 					</view>
 				</view>
 				<view class="order-item ss-flex ss-col-center ss-row-between" v-if="state.orderPayload.spuPayType != 2">
-						<view class="item-title">消费分抵扣</view>
+						<view class="item-title">{{ t('confirm.consumption_point_deduction') }}</view>
 						<view class="ss-flex ss-col-center" @tap="state.showConsumptionPoints = true">
 							<!-- <text class="item-value text-red">
 				</text> -->
 							<text class="item-value" :class="state.usedConsumptionPoints > 0 ? 'text-red' : 'text-disabled'">
-								{{ state.usedConsumptionPoints > 0 ?  ' 抵扣' + state.usedConsumptionPoints + '元' : '不使用消费分' }}
+								{{ state.usedConsumptionPoints > 0 ?  t('confirm.deduction',{count:state.usedPoint}) : t('confirm.no_consumption_points') }}
 							</text>
 							<text class="_icon-forward item-icon" />
 						</view>
@@ -164,9 +164,10 @@
 			</view>
 			<view class="total-box-footer ss-font-28 ss-flex ss-row-right ss-col-center ss-m-r-28">
 				<view class="total-num ss-m-r-20">
-					共{{ totalItemCount }}件
+					{{   t('confirm.total_items_count',{count:totalItemCount})  }}
+					
 				</view>
-				<view>合计:</view>
+				<view>{{   t('common.total')  }}:</view>
 				<view class="total-num text-red ss-flex">
 
 					<image src="@/static/icon/points.png" class='ss-m-r-10' v-if="state.orderPayload.spuPayType == 2"
@@ -222,7 +223,7 @@
 					</view>
 				</view>
 				<button class="ss-reset-button ui-BG-Main-Gradient ss-r-40 submit-btn ui-Shadow-Main" @tap="onConfirm">
-					提交订单
+					{{   t('confirm.submit_order')  }}
 				</button>
 			</view>
 		</su-fixed>
@@ -248,7 +249,7 @@
 		points2point,
 		fen2yuan6
 	} from '@/sheep/hooks/useGoods';
-
+	import { t } from '@/locale'
 	const state = reactive({
 		orderPayload: {},
 		orderInfo: {
@@ -346,20 +347,20 @@
 	function onConfirm() {
 
 		if (!state.addressInfo.id) {
-			sheep.$helper.toast('请选择收货地址');
+			sheep.$helper.toast(t('confirm.select_shipping_address'))
 			return;
 		}
 		// 如果使用的佣金为0 那就不需要提示
 		if (parseFloat(state.usedPoint) && parseFloat(state.usedPoint) > parseFloat(state.currentMemberPoints)) {
-			sheep.$helper.toast('可用佣金不足');
+			sheep.$helper.toast(t('confirm.insufficient_commission'));
 			return;
 		}
 		if (parseFloat(state.usedConsumptionPoints) && parseFloat(state.usedConsumptionPoints) > parseFloat(state.currentMemberConsumptionPoints)) {
-			sheep.$helper.toast('可用消费分不足');
+			sheep.$helper.toast(t('confirm.insufficient_consumption_points'));
 			return;
 		}
 		if (parseFloat(state.usedPoint) && parseFloat(state.usedConsumptionPoints) ) {
-			sheep.$helper.toast('佣金不能搭配消费分使用');
+			sheep.$helper.toast(t('confirm.commission_points_no_mix'));
 			return;
 		}
 		submitOrder();

+ 39 - 37
pages/order/detail.vue

@@ -1,6 +1,6 @@
 <!-- 订单详情 -->
 <template>
-	<s-layout title="订单详情" class="index-wrap" navbar="inner">
+	<s-layout :title="t('order.order_details')" class="index-wrap" navbar="inner">
 		<!-- 订单状态 TODO -->
 		<view class="state-box ss-flex-col ss-col-center ss-row-right" :style="[
         {
@@ -63,21 +63,21 @@
                       itemId: item.id,
                     })
                   ">
-									申请售后
+									 {{ t('order.apply_for_service') }}
 								</button>
 								<button class="ss-reset-button apply-btn" v-if="item.afterSaleStatus === 10" @tap.stop="
                     sheep.$router.go('/pages/order/aftersale/detail', {
                       id: item.afterSaleId,
                     })
                   ">
-									退款中
+									 {{ t('order.refund_in_progress') }}
 								</button>
 								<button class="ss-reset-button apply-btn" v-if="item.afterSaleStatus === 20" @tap.stop="
                     sheep.$router.go('/pages/order/aftersale/detail', {
                       id: item.afterSaleId,
                     })
                   ">
-									退款成功
+									 {{ t('order.refund_successful') }}
 								</button>
 							</view>
 						</template>
@@ -96,33 +96,33 @@
 			<view class="notice-box__content">
 				<view class="notice-item--center">
 					<view class="ss-flex ss-flex-1">
-						<text class="title">订单编号:</text>
+						<text class="title"> {{ t('order.order_number') }}:</text>
 						<text class="detail">{{ state.orderInfo.no }}</text>
 					</view>
-					<button class="ss-reset-button copy-btn" @tap="onCopy">复制</button>
+					<button class="ss-reset-button copy-btn" @tap="onCopy">{{ t('order.copy') }}</button>
 				</view>
 
 				
 				<view class="notice-item">
-					<text class="title">用户留言:</text>
+					<text class="title">{{ t('order.customer_message') }}:</text>
 					<text class="detail">
-						{{ state.orderInfo.userRemark || '无' }}
+						{{ state.orderInfo.userRemark || t('common.none') }}
 					</text>
 				</view>
 				<view class="notice-item">
-					<text class="title">下单时间:</text>
+					<text class="title">{{ t('order.order_time') }}:</text>
 					<text class="detail">
 						{{ sheep.$helper.timeFormat(state.orderInfo.createTime, 'yyyy-mm-dd hh:MM:ss') }}
 					</text>
 				</view>
 				<view class="notice-item" v-if="state.orderInfo.payTime">
-					<text class="title">支付时间:</text>
+					<text class="title">{{ t('order.payment_time') }}:</text>
 					<text class="detail">
 						{{ sheep.$helper.timeFormat(state.orderInfo.payTime, 'yyyy-mm-dd hh:MM:ss') }}
 					</text>
 				</view>
 				<view class="notice-item">
-					<text class="title">支付方式:</text>
+					<text class="title">{{ t('order.payment_method') }}:</text>
 					<text class="detail">{{ state.orderInfo.payChannelName || '-' }}</text>
 				</view>
 			</view>
@@ -131,34 +131,34 @@
 		<!-- 价格信息 -->
 		<view class="order-price-box">
 			<view class="notice-item ss-flex ss-row-between">
-				<text class="title">商品总额</text>
+				<text class="title">{{ t('order.total_amount') }}</text>
 				<view class="ss-flex">
 					<text class="detail">¥{{ fen2yuan(state.orderInfo.totalPrice) }}</text>
 				</view>
 			</view>
 			<view class="notice-item ss-flex ss-row-between">
-				<text class="title">运费</text>
+				<text class="title">{{ t('order.shipping_fee') }}</text>
 				<text class="detail">¥{{ fen2yuan(state.orderInfo.deliveryPrice) }}</text>
 			</view>
 			<view class="notice-item ss-flex ss-row-between" v-if="state.orderInfo.payIntegral > 0">
-				<text class="title">使用佣金</text>
+				<text class="title">{{ t('order.use_commission') }}</text>
 				<text class="detail">{{ points2point(state.orderInfo.payIntegral) }}</text>
 			</view>
 			<view class="notice-item ss-flex ss-row-between" v-if="state.orderInfo.payConsumptionPoints > 0">
-				<text class="title">使用消费分</text>
+				<text class="title">{{ t('order.use_points') }}</text>
 				<text class="detail">{{ points2point(state.orderInfo.payConsumptionPoints) }}</text>
 			</view>
 			<!-- TODO 非繁人:优惠劵抵扣、佣金抵扣 -->
 			<view class="notice-item ss-flex ss-row-between" v-if="state.orderInfo.discountPrice > 0">
-				<text class="title">优惠金额</text>
+				<text class="title">{{ t('order.discount_amount') }}</text>
 				<text class="detail">¥{{ fen2yuan(state.orderInfo.discountPrice) }}</text>
 			</view>
 			<view class="notice-item all-rpice-item ss-flex ss-m-t-20">
-				<text class="title">{{ state.orderInfo.payStatus ? '已付款' : '需付款' }}</text>
+				<text class="title">{{ state.orderInfo.payStatus ? t('order.paid') : t('order.amount_due') }}</text>
 				<text class="detail all-price">¥{{ fen2yuan(state.orderInfo.payPrice) }}</text>
 			</view>
 			<view class="notice-item all-rpice-item ss-flex ss-m-t-20" v-if="state.orderInfo.refundPrice > 0">
-				<text class="title">已退款</text>
+				<text class="title">{{ t('order.refunded') }}</text>
 				<text class="detail all-price">¥{{ fen2yuan(state.orderInfo.refundPrice) }}</text>
 			</view>
 		</view>
@@ -171,12 +171,12 @@
 				<!-- {{state.orderInfo.buttons}} -->
 				<button class="ss-reset-button cancel-btn" v-if="state.orderInfo.buttons?.includes('cancel')"
 					@tap="onCancel(state.orderInfo.id)">
-					取消订单
+					{{ t('order.cancel_order') }}
 				</button>
 				
 				<button class="ss-reset-button pay-btn ui-BG-Main-Gradient"
 					v-if="state.orderInfo.buttons?.includes('pay')" @tap="onPay(state.orderInfo.payOrderId)">
-					继续支付
+					{{ t('order.continue_payment') }}
 				</button>
 				<!-- TODO 非繁人:拼团接入 -->
 				<!-- <button class="ss-reset-button cancel-btn" v-if="state.orderInfo.buttons?.includes('combination')" @tap="
@@ -190,24 +190,24 @@
 				<!-- 商家发货&&用户不售后就能看到物流 -->
 				<button class="ss-reset-button cancel-btn" v-if="state.orderInfo.buttons?.includes('express') && !state.orderInfo.items[0]?.refundStatus"
 					@tap="onExpress(state.orderInfo.id)">
-					查看物流
+					{{ t('order.view_logistics') }}
 				</button>
 				<button class="ss-reset-button cancel-btn" v-if="state.orderInfo.buttons?.includes('confirm')"
 					@tap="onConfirm(state.orderInfo.id)">
-					确认收货
+					{{ t('order.confirm_receipt') }}
 				</button>
 				<button class="ss-reset-button cancel-btn" v-if="state.orderInfo.buttons?.includes('comment')"
 					@tap="onComment(state.orderInfo.id)">
-					评价
+					{{ t('order.review_order') }}
 				</button>
 				<!-- 售后用户退货 -->
 				<button class="ss-reset-button cancel-btn" v-if="state.orderInfo.buttons?.includes('aftersaleCancel')"
 					@tap="onApply(state.orderInfo.items[0].afterSaleId)">
-					取消申请
+					{{ t('order.cancel_request') }}
 				</button>
 				<button class="ss-reset-button cancel-btn" v-if="state.orderInfo.buttons?.includes('aftersaleDelivery')"
 					@tap="sheep.$router.go('/pages/order/aftersale/return-delivery', { id: state.orderInfo.items[0].afterSaleId })">
-					填写退货
+					{{ t('order.fill_return') }}
 				</button>
 			</view>
 		</su-fixed>
@@ -239,6 +239,7 @@
 	import {
 		showAuthModal
 	} from '@/sheep/hooks/useModal';
+	import { t } from '@/locale'
 	const userInfo = sheep.$store('user').userInfo;
 	const statusBarHeight = sheep.$platform.device.statusBarHeight * 2;
 	const headerBg = sheep.$url.css('/static/images/order_bg.png');
@@ -274,8 +275,8 @@
 	// 取消订单
 	async function onCancel(orderId) {
 		uni.showModal({
-			title: '提示',
-			content: '确定要取消订单吗?',
+			title: t('setting.prompt'),
+			content:  t('order.confirm_cancel_order'),
 			success: async function(res) {
 				if (!res.confirm) {
 					return;
@@ -305,8 +306,8 @@
 		// 2.如果开启了走mpConfirm方法,需要在App.vue的show方法中拿到确认收货结果
 		let isOpenBusinessView = true;
 		uni.showModal({
-			title: '提示',
-			content: '确认收货?',
+			title: t('setting.prompt'),
+			content:  t('order.confirm_receipt_question'),
 			success: async function(res) {
 				if (res.confirm) {
 					if (
@@ -337,7 +338,7 @@
 	// 小程序确认收货组件
 	function mpConfirm(orderId) {
 		if (!wx.openBusinessView) {
-			sheep.$helper.toast(`请升级微信版本`);
+			sheep.$helper.toast(t('order.upgrade_wechat'));
 			return;
 		}
 		wx.openBusinessView({
@@ -373,8 +374,8 @@
 	// 取消售后申请
 	function onApply(id) {
 		uni.showModal({
-			title: '提示',
-			content: '确定要取消此申请吗?',
+			title: t('setting.prompt'),
+			content: t('order.confirm_cancel_request'),
 			success: async function(res) {
 				if (!res.confirm) {
 					return;
@@ -424,7 +425,7 @@
 		//如果没登陆就进来则有可能是在微信消息推送进来的 提示登陆
 		if (!isLogin.value) {
 			showAuthModal();
-			sheep.$helper.toast("您尚未登录,请登录:" + options.username + "后再试", 3000);
+			sheep.$helper.toast(t('order.not_logged_in',{user:options.username}), 3000);
 		} else {
 			
 			// 如果
@@ -432,8 +433,7 @@
 				//  如果登陆了但不是该订单的账号,提示有问题
 					console.log(JSON.parse(uni.getStorageSync("user-store")).userInfo.username)
 					if (options.username != JSON.parse(uni.getStorageSync("user-store")).userInfo.username) {
-						sheep.$helper.toast("您当前登录的账号是" + JSON.parse(uni.getStorageSync("user-store")).userInfo.username + ",请切换到" + options.username + "后再试",
-							3000);
+						sheep.$helper.toast(t('order.account_switch_needed',{user1:JSON.parse(uni.getStorageSync("user-store")).userInfo.username,user2:options.username}),3000);
 					}
 			}
 		}
@@ -459,7 +459,8 @@
 	}
 
 	.apply-btn {
-		width: 140rpx;
+		padding:0 10rpx;
+		// width: 140rpx;
 		height: 50rpx;
 		border-radius: 25rpx;
 		font-size: 24rpx;
@@ -654,7 +655,8 @@
 		padding-right: 20rpx;
 
 		.cancel-btn {
-			width: 160rpx;
+			// width: 160rpx;
+			padding:0 10rpx;
 			height: 60rpx;
 			background: #eeeeee;
 			border-radius: 30rpx;

+ 4 - 4
pages/order/express/log.vue

@@ -1,6 +1,6 @@
 <!-- 物流追踪 -->
 <template>
-	<s-layout title="物流追踪">
+	<s-layout :title="$t('order.logistics_tracking')">
 		<view class="log-wrap">
 			<!-- 商品信息 -->
 			<view class="log-card ss-flex ss-m-20 ss-r-10" v-if="goodsImages.length > 0">
@@ -21,10 +21,10 @@
 					<!--            <view>物流状态:</view>-->
 					<!--            <view class="warning-color">{{ state.info.status_text }}</view>-->
 					<!--          </view>-->
-					<view class="ss-m-b-16 TrackingNumber">快递单号:{{ state.info.logisticsNo }}</view>
-					<view class="ss-m-b-16">快递公司:{{ state.info.logisticsName }}</view>
+					<view class="ss-m-b-16 TrackingNumber">{{$t('order.tracking_number')+":"+ state.info.logisticsNo }}</view>
+					<view class="ss-m-b-16">{{$t('order.courier_company')+":"+  state.info.logisticsName }}</view>
 					<view>
-						发货时间:{{ sheep.$helper.timeFormat(state.info.deliveryTime, 'yyyy-mm-dd hh:MM') }}</view>
+						{{ $t('order.shipping_time')+":"+  sheep.$helper.timeFormat(state.info.deliveryTime, 'yyyy-mm-dd hh:MM') }}</view>
 				</view>
 			</view>
 

+ 28 - 26
pages/order/list.vue

@@ -1,15 +1,15 @@
 <!-- 订单列表 -->
 <template>
-	<s-layout title="我的订单">
+	<s-layout :title="t('order.my_orders')">
 		<su-sticky bgColor="#fff">
 			<su-tabs :list="tabMaps" :scrollable="false" @change="onTabsChange" :current="state.currentTab" :badge="true"/>
 		</su-sticky>
-		<s-empty v-if="state.pagination.total === 0" icon="/static/order-empty.png" text="暂无订单" />
+		<s-empty v-if="state.pagination.total === 0" icon="/static/order-empty.png" :text="t('order.no_orders')" />
 		<view v-if="state.pagination.total > 0">
 			<view class="bg-white order-list-card-box ss-r-10 ss-m-t-14 ss-m-20" v-for="(order,index) in state.pagination.list"
 				:key="order.id" @tap="onOrderDetail(order.id)">
 				<view class="order-card-header ss-flex ss-col-center ss-row-between ss-p-x-20">
-					<view class="order-no">订单号:{{ order.no }}</view>
+					<view class="order-no">{{ t('order.order_number') }}:{{ order.no }}</view>
 					<view class="order-state ss-font-26" :class="formatOrderColor(order)">
 						
 						{{ formatOrderStatus(order) }}
@@ -25,9 +25,9 @@
 				</view>
 				<view class="pay-box ss-m-t-30 ss-flex ss-row-right ss-p-r-20">
 					<view class="ss-flex ss-col-center">
-						<view class="discounts-title pay-color">共 {{ order.productCount }} 件商品,总金额:</view>
+						<view class="discounts-title pay-color">  {{ t('order.total_items',{count:order.productCount})}} ,</view>
 						<view class="discounts-money pay-color">
-							¥{{ fen2yuan(order.payPrice) }}
+							{{ t('order.total_amount') }}:¥{{ fen2yuan(order.payPrice) }}
 						</view>
 					</view>
 				</view>
@@ -37,37 +37,37 @@
 					<view class="ss-flex ss-col-center">
 						<button v-if="order.buttons.includes('combination')" class="tool-btn ss-reset-button"
 							@tap.stop="onOrderGroupon(order)">
-							拼团详情
+							{{ t('order.group_details') }}
 						</button>
 						<button v-if="order.buttons.length === 0" class="tool-btn ss-reset-button"
 							@tap.stop="onOrderDetail(order.id)">
-							查看详情
+							{{ t('order.view_details') }}
 						</button>
 						<button v-if="order.buttons.includes('express')" class="tool-btn ss-reset-button"
 							@tap.stop="onExpress(order.id)">
-							查看物流
+							{{ t('order.view_logistics') }}
 						</button>
 						<button v-if="order.buttons.includes('confirm')" class="tool-btn ss-reset-button"
 							@tap.stop="onConfirm(order)">
-							确认收货
+							{{ t('order.confirm_receipt') }}
 						</button>
 						
 						<button v-if="order.buttons.includes('cancel')" class="tool-btn ss-reset-button"
 							@tap.stop="onCancel(order.id)">
-							取消订单
+							{{ t('order.cancel_order') }}
 						</button>
 						<button v-if="order.buttons.includes('comment')" class="tool-btn ss-reset-button"
 							@tap.stop="onComment(order.id)">
-							评价
+							{{ t('order.review_order') }}
 						</button>
 						<button v-if="order.buttons.includes('delete')" class="delete-btn ss-reset-button"
 							@tap.stop="onDelete(order.id)">
-							删除订单
+							{{ t('order.delete_order') }}
 						</button>
 						
 						<button v-if="order.buttons.includes('pay')"
 							class="tool-btn ss-reset-button ui-BG-Main-Gradient" @tap.stop="onPay(order.payOrderId)">
-							继续支付
+							{{ t('order.continue_payment') }}
 						</button>
 					</view>
 				</view>
@@ -108,6 +108,7 @@
 		showWalletModal,
 		colseWalletModal
 	} from '@/sheep/hooks/useModal';
+	import { t } from '@/locale'
 	const pagination = {
 		list: [],
 		current_page: 1,
@@ -128,30 +129,30 @@
 	});
 	const tabMaps = reactive([
 		{
-			name: '全部',
+			name: t('order.all_orders'),
 			num: 0,
 			isShow:false
 		},
 		{
-			name: '待付款',
+			name: t('order.pending_payment'),
 			value: 0,
 			num: 0,
 			isShow:true
 		},
 		{
-			name: '待发货',
+			name: t('order.pending_shipment'),
 			value: 10,
 			num:0,
 			isShow:true
 		},
 		{
-			name: '待收货',
+			name: t('order.pending_receipt'),
 			value: 20,
 			num: 0,
 			isShow:true
 		},
 		{
-			name: '待评价',
+			name: t('order.pending_review'),
 			value: 30,
 			num: 0,
 			isShow:true
@@ -210,8 +211,8 @@
 		// 2.如果开启了走mpConfirm方法,需要在App.vue的show方法中拿到确认收货结果
 		let isOpenBusinessView = true;
 		 uni.showModal({
-		 	title: '提示',
-		 	content: '确认收货?',
+		 	title: t('setting.prompt'),
+		 	content:  t('order.confirm_receipt_question'),
 		 	success: async function(res) {
 		 		if (res.confirm) {
 		 			if (
@@ -243,7 +244,7 @@
 	// 小程序确认收货组件
 	function mpConfirm(order) {
 		if (!wx.openBusinessView) {
-			sheep.$helper.toast(`请升级微信版本`);
+			sheep.$helper.toast(t('order.upgrade_wechat'));
 			return;
 		}
 		wx.openBusinessView({
@@ -281,8 +282,8 @@
 	// 取消订单
 	async function onCancel(orderId) {
 		uni.showModal({
-			title: '提示',
-			content: '确定要取消订单吗?',
+			title:t('setting.prompt'),
+			content: t('order.confirm_cancel_order'),
 			success: async function(res) {
 				if (!res.confirm) {
 					return;
@@ -306,8 +307,8 @@
 	// 删除订单
 	function onDelete(orderId) {
 		uni.showModal({
-			title: '提示',
-			content: '确定要删除订单吗?',
+			title: t('setting.prompt'),
+			content:t('order.confirm_delete_order'),
 			success: async function(res) {
 				if (res.confirm) {
 					const {
@@ -418,7 +419,8 @@
 	}
 
 	.tool-btn {
-		width: 160rpx;
+		// width: 160rpx;
+		padding:0 10rpx;
 		height: 60rpx;
 		background: #f6f6f6;
 		font-size: 26rpx;

+ 16 - 15
pages/pay/index.vue

@@ -1,6 +1,6 @@
 <!-- 收银台 -->
 <template>
-	<s-layout title="收银台">
+	<s-layout :title="t('cashier.cashier')">
 		<view class="bg-white ss-modal-box ss-flex-col">
 			<!-- 订单信息 -->
 			<view class="modal-header ss-flex-col ss-col-center ss-row-center">
@@ -13,7 +13,7 @@
 			</view>
 			<!-- 支付方式 -->
 			<view class="modal-content ss-flex-1" v-if="state.orderInfo.price">
-				<view class="pay-title ss-p-l-30 ss-m-y-30">选择支付方式</view>
+				<view class="pay-title ss-p-l-30 ss-m-y-30">{{t('cashier.select_payment_method')}}</view>
 				<radio-group @change="onTapPay">
 					<label class="pay-type-item" v-for="item in state.payMethods" :key="item.title">
 						<view class="pay-item ss-flex ss-col-center ss-row-between ss-p-x-30 border-bottom"
@@ -42,9 +42,9 @@
 					class="form-box" labelWidth='200' ref="FormRef">
 					<view class="bg-white ss-p-x-30">
 
-						<uni-forms-item name="mobile" label="手机号" class="mobile loginUniFormItem ss-p-t-10">
+						<uni-forms-item name="mobile" :label="t('cashier.phone_number')" class="mobile loginUniFormItem ss-p-t-10">
 							<uni-easyinput v-model="state.model.smsCodeUseReqDTO.mobile" type="smsCodeUseReqDTO"
-								placeholder="请输入手机号" :inputBorder="false" :clearable="false" :disabled="true">
+								:placeholder="t('cashier.enter_phone_number')" :inputBorder="false" :clearable="false" :disabled="true">
 								<template v-slot:right>
 									<button class="ss-reset-button code-btn code-btn-start"
 										:disabled="state.payStatus !== 1"
@@ -54,9 +54,9 @@
 								</template>
 							</uni-easyinput>
 						</uni-forms-item>
-						<uni-forms-item name="smsCodeUseReqDTO.code" label="验证码" :required="true">
+						<uni-forms-item name="smsCodeUseReqDTO.code" :label="t('cashier.verification_code')" :required="true">
 							<uni-easyinput v-model="state.model.smsCodeUseReqDTO.code" type="number"
-								placeholder="请输入验证码" :inputBorder="false" :clearable="false">
+								:placeholder="t('cashier.enter_verification_code')" :inputBorder="false" :clearable="false">
 							</uni-easyinput>
 						</uni-forms-item>
 
@@ -66,20 +66,20 @@
 			<!-- 工具 -->
 			<view class="modal-footer ss-flex ss-row-center ss-col-center ss-m-t-80 ss-m-b-40">
 				<button v-if="state.payStatus === 0" class="ss-reset-button past-due-btn">
-					检测支付环境中
+					{{t('cashier.checking_payment_environment')}}
 				</button>
 				<button v-else-if="state.payStatus === -1" class="ss-reset-button past-due-btn" disabled>
-					支付已过期
+					{{t('cashier.payment_expired')}}
 				</button>
 				<!-- 支付状态没过期,并且支付金额不为0 -->
 				<button v-else-if="state.payStatus === 1 && state.orderInfo.price" class="ss-reset-button save-btn"
 					@tap="onPay" :disabled="state.payStatus !== 1" :class="{ 'disabled-btn': state.payStatus !== 1 }">
-					立即支付
+					{{t('cashier.pay_now')}}
 				</button>
 				<!-- 支付状态没过期,并且支付金额为0 -->
 				<button v-else class="ss-reset-button save-btn" @tap="onZeroPay" :disabled="state.payStatus !== 1"
 					:class="{ 'disabled-btn': state.payStatus !== 1 }">
-					立即支付
+					{{t('cashier.pay_now')}}
 				</button>
 			</view>
 		</view>
@@ -113,6 +113,7 @@
 		getSmsCode,
 		getSmsTimer
 	} from '@/sheep/hooks/useModal';
+	import { t } from '@/locale'
 	const userWallet = computed(() => sheep.$store('user').userWallet);
 	const userInfo = computed(() => sheep.$store('user').userInfo);
 	// 检测支付环境
@@ -135,7 +136,7 @@
 			"smsCodeUseReqDTO.code": {
 				rules: [{
 					required: true,
-					errorMessage: '验证码不能为空',
+					errorMessage: t('cashier.verification_code_cannot_be_empty'),
 				}, ],
 			},
 
@@ -144,7 +145,7 @@
 
 	const onPay = () => {
 		if (state.payment === '') {
-			sheep.$helper.toast('请选择支付方式');
+			sheep.$helper.toast(t('cashier.choose_payment_method'));
 			return;
 		}
 		sheep.$platform.pay(state.payment, state.orderType, state.orderInfo.id , state.model.type);
@@ -173,7 +174,7 @@
 	// 支付文案提示
 	const payDescText = computed(() => {
 		if (state.payStatus === 2) {
-			return '该订单已支付';
+			return t('cashier.order_paid');
 		}
 		if (state.payStatus === 1) {
 			const time = useDurationTime(state.orderInfo.expireTime);
@@ -181,10 +182,10 @@
 				state.payStatus = -1;
 				return '';
 			}
-			return `剩余支付时间 ${time.h}:${time.m}:${time.s} `;
+			return t('cashier.remaining_payment_time',{h:time.h,m:time.m,s:time.s}) ;
 		}
 		if (state.payStatus === -2) {
-			return '未查询到支付单信息';
+			return t('cashier.no_payment_order_found');
 		}
 		return '';
 	});

+ 12 - 12
pages/pay/result.vue

@@ -8,41 +8,41 @@
 				:src="sheep.$url.static('/static/images/order_pay_success.gif')" />
 			<image class="pay-img ss-m-b-30" v-if="['failed', 'closed'].includes(payResult)"
 				:src="sheep.$url.static('/static/images/order_paty_fail.gif')" />
-			<view class="tip-text ss-m-b-30" v-if="payResult === 'success'">支付成功</view>
-			<view class="tip-text ss-m-b-30" v-if="payResult === 'failed'">支付失败</view>
-			<view class="tip-text ss-m-b-30" v-if="payResult === 'closed'">该订单已关闭</view>
-			<view class="tip-text ss-m-b-30" v-if="payResult === 'waiting'">检测支付结果...</view>
+			<view class="tip-text ss-m-b-30" v-if="payResult === 'success'">{{ t('order.payment_successful') }}</view>
+			<view class="tip-text ss-m-b-30" v-if="payResult === 'failed'">{{ t('order.payment_failed') }}</view>
+			<view class="tip-text ss-m-b-30" v-if="payResult === 'closed'">{{ t('order.order_closed') }}</view>
+			<view class="tip-text ss-m-b-30" v-if="payResult === 'waiting'">{{ t('order.checking_payment_result') }}</view>
 			<view class="pay-total-num ss-flex" v-if="payResult === 'success'">
 				<view>¥{{ fen2yuan(state.orderInfo.price) }}</view>
 			</view>
 			<!-- 操作区 -->
 			<view class="btn-box ss-flex ss-row-center ss-m-t-50">
 				<button class="back-btn ss-reset-button" @tap="goBack">
-					返回首页
+					{{ t('order.return_home') }}
 				</button>
 				<!-- <button class="check-btn ss-reset-button" v-if="payResult === 'failed'" @tap="
             sheep.$router.redirect('/pages/pay/index', { id: state.id, orderType: state.orderType })
           ">
-					重新支付
+					{{ t('order.retry_payment') }}
 				</button> -->
 				<button class="check-btn ss-reset-button" v-if="payResult === 'success' && !isTopUp" @tap="goOrderList">
-					查看订单
+					{{ t('order.view_order') }}
 				</button>
 				<button class="check-btn ss-reset-button" v-if="payResult === 'success' && isTopUp" @tap="goWallet">
-					查看钱包
+					{{ t('order.view_wallet') }}
 				</button>
 				<!-- TODO 非繁人:拼团接入 -->
 				<!-- <button class="check-btn ss-reset-button" v-if="payResult === 'success' && state.tradeOrder.type === 3"
 					@tap="sheep.$router.redirect('/pages/activity/groupon/order')">
-					我的拼团
+					{{ t('order.my_group_buying') }}
 				</button> -->
 			</view>
 			<!-- TODO 非繁人:订阅 -->
 			<!-- #ifdef MP -->
 			<!-- <view class="subscribe-box ss-flex ss-m-t-44">
 				<image class="subscribe-img" :src="sheep.$url.static('/static/images/cargo.png')" />
-				<view class="subscribe-title ss-m-r-48 ss-m-l-16">获取实时发货信息与订单状态</view>
-				<view class="subscribe-start" @tap="subscribeMessage">立即订阅</view>
+				<view class="subscribe-title ss-m-r-48 ss-m-l-16">{{ t('order.get_realtime_shipping_info') }}</view>
+				<view class="subscribe-start" @tap="subscribeMessage">{{ t('order.subscribe_now') }}</view>
 			</view> -->
 			<!-- #endif -->
 		</view>
@@ -77,7 +77,7 @@
 		showWalletModal,
 		colseWalletModal
 	} from '@/sheep/hooks/useModal';
-	
+	import { t } from '@/locale'
 	const order = ref({});
 	const result = ref({});
 	const url = ref('https://payapp.weixin.qq.com');

+ 13 - 12
pages/pay/resultYuan.vue

@@ -1,6 +1,6 @@
 <!-- 支付结果页面 -->
 <template>
-	<s-layout title="支付结果" :bgStyle="{ color: '#FFF' }">
+	<s-layout :title="t('order.payment_result')" :bgStyle="{ color: '#FFF' }">
 		<view class="pay-result-box ss-flex-col ss-row-center ss-col-center">
 			<!-- 信息展示 -->
 			<view class="pay-waiting ss-m-b-30" v-if="payResult === 'waiting'" />
@@ -8,41 +8,41 @@
 				:src="sheep.$url.static('/static/images/order_pay_success.gif')" />
 			<image class="pay-img ss-m-b-30" v-if="['failed', 'closed'].includes(payResult)"
 				:src="sheep.$url.static('/static/images/order_paty_fail.gif')" />
-			<view class="tip-text ss-m-b-30" v-if="payResult === 'success'">支付成功</view>
-			<view class="tip-text ss-m-b-30" v-if="payResult === 'failed'">支付失败</view>
-			<view class="tip-text ss-m-b-30" v-if="payResult === 'closed'">该订单已关闭</view>
-			<view class="tip-text ss-m-b-30" v-if="payResult === 'waiting'">检测支付结果...</view>
+			<view class="tip-text ss-m-b-30" v-if="payResult === 'success'">{{ t('order.payment_successful') }}</view>
+			<view class="tip-text ss-m-b-30" v-if="payResult === 'failed'">{{ t('order.payment_failed') }}</view>
+			<view class="tip-text ss-m-b-30" v-if="payResult === 'closed'">{{ t('order.order_closed') }}</view>
+			<view class="tip-text ss-m-b-30" v-if="payResult === 'waiting'">{{ t('order.checking_payment_result') }}...</view>
 			<view class="pay-total-num ss-flex" v-if="payResult === 'success'">
 				<view>¥{{ fen2yuan(state.orderInfo.price) }}</view>
 			</view>
 			<!-- 操作区 -->
 			<view class="btn-box ss-flex ss-row-center ss-m-t-50">
 				<button class="back-btn ss-reset-button" @tap="sheep.$router.go('/pages/index/index')">
-					返回首页
+					{{ t('order.return_home') }}
 				</button>
 				<button class="check-btn ss-reset-button" v-if="payResult === 'failed'" @tap="
             sheep.$router.redirect('/pages/pay/index', { id: state.id, orderType: state.orderType })
           ">
-					重新支付
+					{{ t('order.retry_payment') }}
 				</button>
 				<button class="check-btn ss-reset-button" v-if="payResult === 'success' && !isTopUp" @tap="onOrder">
-					查看订单
+					{{ t('order.view_order') }}
 				</button>
 				<button class="check-btn ss-reset-button" v-if="payResult === 'success' && isTopUp" @tap="sheep.$router.redirect('/pages/user/wallet/score')">
-					查看钱包
+					{{ t('order.view_wallet') }}
 				</button>
 				<!-- TODO 非繁人:拼团接入 -->
 				<button class="check-btn ss-reset-button" v-if="payResult === 'success' && state.tradeOrder.type === 3"
 					@tap="sheep.$router.redirect('/pages/activity/groupon/order')">
-					我的拼团
+					{{ t('order.my_group_buying') }}
 				</button>
 			</view>
 			<!-- TODO 非繁人:订阅 -->
 			<!-- #ifdef MP -->
 			<view class="subscribe-box ss-flex ss-m-t-44">
 				<image class="subscribe-img" :src="sheep.$url.static('/static/images/cargo.png')" />
-				<view class="subscribe-title ss-m-r-48 ss-m-l-16">获取实时发货信息与订单状态</view>
-				<view class="subscribe-start" @tap="subscribeMessage">立即订阅</view>
+				<view class="subscribe-title ss-m-r-48 ss-m-l-16">{{ t('order.get_realtime_shipping_info') }}</view>
+				<view class="subscribe-start" @tap="subscribeMessage">{{ t('order.subscribe_now') }}</view>
 			</view>
 			<!-- #endif -->
 		</view>
@@ -73,6 +73,7 @@
 		showWalletModal,
 		colseWalletModal
 	} from '@/sheep/hooks/useModal';
+	import { t } from '@/locale'
 	const state = reactive({
 		id: 0, // 支付单号
 		orderType: 'goods', // 订单类型

+ 64 - 65
pages/public/merchant.vue

@@ -1,87 +1,87 @@
 <template>
-	<s-layout class="set-wrap" title="商家入驻" :bgStyle="{ color: '#FFF' }">
+	<s-layout class="set-wrap" :title="t('merchant.merchant_registration')" :bgStyle="{ color: '#FFF' }">
 		<template v-if="state.canUse">
 			<uni-forms :model="state.model" :rules="state.rules" validateTrigger="bind" labelPosition="left" border
 				class="form-box" labelWidth='200' ref="merchantFormRef">
 				<view class="bg-white ss-p-x-30">
-					<uni-forms-item name="name" label="商家名称" :required="!state.formStatus">
-						<uni-easyinput v-model="state.model.name" type="name" placeholder="请输入商家名称" :inputBorder="false"
+					<uni-forms-item name="name" :label="t('merchant.merchant_name')" :required="!state.formStatus">
+						<uni-easyinput v-model="state.model.name" type="name" ::placeholder="t('merchant.merchant_name')" :inputBorder="false"
 							:placeholderStyle="placeholderStyle" :clearable="false" :disabled="state.formStatus" />
 					</uni-forms-item>
-					<uni-forms-item name="contact" label="联络人" :required="!state.formStatus">
-						<uni-easyinput v-model="state.model.contact" type="contact" placeholder="请输入联络人"
+					<uni-forms-item name="contact" :label="t('merchant.contact_person')" :required="!state.formStatus">
+						<uni-easyinput v-model="state.model.contact" type="contact" :placeholder="t('merchant.enter_contact_person')"
 							:inputBorder="false" :placeholderStyle="placeholderStyle" :clearable="false"
 							:disabled="state.formStatus" />
 					</uni-forms-item>
-					<uni-forms-item name="contactNumber" label="联络人手机号" :required="!state.formStatus">
-						<uni-easyinput v-model="state.model.contactNumber" type="contactNumber" placeholder="请输入联络人手机号"
+					<uni-forms-item name="contactNumber" :label="t('merchant.contact_phone')" :required="!state.formStatus">
+						<uni-easyinput v-model="state.model.contactNumber" type="contactNumber" :placeholder="t('merchant.enter_contact_phone')"
 							:inputBorder="false" :placeholderStyle="placeholderStyle" :clearable="false"
 							:disabled="state.formStatus" />
 					</uni-forms-item>
-					<uni-forms-item name="legalPerson" label="法人" :required="!state.formStatus">
-						<uni-easyinput v-model="state.model.legalPerson" type="legalPerson" placeholder="请输入法人"
+					<uni-forms-item name="legalPerson" :label="t('merchant.legal_person')" :required="!state.formStatus">
+						<uni-easyinput v-model="state.model.legalPerson" type="legalPerson" :placeholder="t('merchant.enter_legal_person')"
 							:inputBorder="false" :placeholderStyle="placeholderStyle" :clearable="false"
 							:disabled="state.formStatus" />
 					</uni-forms-item>
-					<uni-forms-item name="legalPersonNumber" label="法人手机号" :required="!state.formStatus">
+					<uni-forms-item name="legalPersonNumber" :label="t('merchant.legal_person_phone')" :required="!state.formStatus">
 						<uni-easyinput v-model="state.model.legalPersonNumber" type="legalPersonNumber"
-							placeholder="请输入法人手机号" :inputBorder="false" :placeholderStyle="placeholderStyle"
+							:placeholder="t('merchant.enter_legal_person_phone')" :inputBorder="false" :placeholderStyle="placeholderStyle"
 							:clearable="false" :disabled="state.formStatus" />
 					</uni-forms-item>
-					<uni-forms-item name="identityCardFront" label="法人身份证正面" :required="!state.formStatus"
+					<uni-forms-item name="identityCardFront" :label="t('merchant.legal_person_id_front')" :required="!state.formStatus"
 						:errorMessage="state.identityCardFrontError">
 						<s-uploader v-model:url="state.model.identityCardFront" fileMediatype="image" limit="1"
 							mode="grid" :imageStyles="{ width: '299rpx', height: '168rpx' }"
 							:readonly="state.formStatus" />
 					</uni-forms-item>
-					<uni-forms-item name="identityCardReverseSide" label="法人身份证反面" :required="!state.formStatus"
+					<uni-forms-item name="identityCardReverseSide" :label="t('merchant.legal_person_id_back')" :required="!state.formStatus"
 						:errorMessage="identityCardReverseSideError">
 						<s-uploader v-model:url="state.model.identityCardReverseSide" fileMediatype="image" limit="1"
 							mode="grid" :imageStyles="{ width: '299rpx', height: '168rpx' }"
 							:readonly="state.formStatus" />
 					</uni-forms-item>
-					<uni-forms-item name="areaId" label="所在地" :required="!state.formStatus"
+					<uni-forms-item name="areaId" :label="t('merchant.location')" :required="!state.formStatus"
 						:errorMessage="state.areaIdError">
 						<uni-data-picker v-model="state.model.areaId" :localdata="areaTree"
 							:readonly="state.formStatus" />
 					</uni-forms-item>
 
-					<uni-forms-item name="email" label="邮箱" :required="!state.formStatus">
-						<uni-easyinput v-model="state.model.email" type="email" placeholder="请输入邮箱" :inputBorder="false"
+					<uni-forms-item name="email" :label="t('merchant.email')" :required="!state.formStatus">
+						<uni-easyinput v-model="state.model.email" type="email" :placeholder="t('merchant.enter_email')" :inputBorder="false"
 							:placeholderStyle="placeholderStyle" :clearable="false" :disabled="state.formStatus" />
 					</uni-forms-item>
-					<uni-forms-item name="address" label="办公地址">
-						<uni-easyinput v-model="state.model.address" type="address" placeholder="请输入办公地址"
+					<uni-forms-item name="address" :label="t('merchant.office_address')">
+						<uni-easyinput v-model="state.model.address" type="address" :placeholder="t('merchant.office_address')"
 							:inputBorder="false" :placeholderStyle="placeholderStyle" :clearable="false"
 							:disabled="state.formStatus" />
 					</uni-forms-item>
-					<uni-forms-item name="complaintsHotline" label="维权电话">
+					<uni-forms-item name="complaintsHotline" :label="t('merchant.rights_phone')">
 						<uni-easyinput v-model="state.model.complaintsHotline" type="complaintsHotline"
-							placeholder="请输入维权电话" :inputBorder="false" :placeholderStyle="placeholderStyle"
+							:placeholder="t('merchant.enter_rights_phone')" :inputBorder="false" :placeholderStyle="placeholderStyle"
 							:clearable="false" :disabled="state.formStatus" />
 					</uni-forms-item>
-					<uni-forms-item name="customerServiceHotline" label="客服电话" :required="!state.formStatus">
+					<uni-forms-item name="customerServiceHotline" :label="t('merchant.customer_service_phone')" :required="!state.formStatus">
 						<uni-easyinput v-model="state.model.customerServiceHotline" type="customerServiceHotline"
-							placeholder="请输入客服电话" :inputBorder="false" :placeholderStyle="placeholderStyle"
+							:placeholder="t('merchant.enter_customer_service_phone')" :inputBorder="false" :placeholderStyle="placeholderStyle"
 							:clearable="false" :disabled="state.formStatus" />
 					</uni-forms-item>
-					<uni-forms-item name="website" label="官网">
-						<uni-easyinput v-model="state.model.website" type="website" placeholder="请输入官网"
+					<uni-forms-item name="website" :label="t('merchant.website')">
+						<uni-easyinput v-model="state.model.website" type="website" :placeholder="t('merchant.enter_website')"
 							:inputBorder="false" :placeholderStyle="placeholderStyle" :clearable="false"
 							:disabled="state.formStatus" />
 					</uni-forms-item>
-					<uni-forms-item name="bankName" label="开户银行" :required="!state.formStatus">
-						<uni-easyinput v-model="state.model.bankName" type="bankName" placeholder="请输入开户银行"
+					<uni-forms-item name="bankName" :label="t('merchant.bank')" :required="!state.formStatus">
+						<uni-easyinput v-model="state.model.bankName" type="bankName" :placeholder="t('merchant.enter_bank')"
 							:inputBorder="false" :placeholderStyle="placeholderStyle" :clearable="false"
 							:disabled="state.formStatus" />
 					</uni-forms-item>
-					<uni-forms-item name="accountName" label="账户名称" :required="!state.formStatus">
-						<uni-easyinput v-model="state.model.accountName" type="accountName" placeholder="请输入账户名称"
+					<uni-forms-item name="accountName" :label="t('merchant.account_name')" :required="!state.formStatus">
+						<uni-easyinput v-model="state.model.accountName" type="accountName" :placeholder="t('merchant.enter_account_name')"
 							:inputBorder="false" :placeholderStyle="placeholderStyle" :clearable="false"
 							:disabled="state.formStatus" />
 					</uni-forms-item>
-					<uni-forms-item name="accountNumber" label="账户号码" :required="!state.formStatus">
-						<uni-easyinput v-model="state.model.accountNumber" type="number" placeholder="请输入账户号码"
+					<uni-forms-item name="accountNumber" :label="t('merchant.account_number')" :required="!state.formStatus">
+						<uni-easyinput v-model="state.model.accountNumber" type="number" :placeholder="t('merchant.enter_account_number')"
 							:inputBorder="false" :placeholderStyle="placeholderStyle" :clearable="false"
 							:disabled="state.formStatus" />
 					</uni-forms-item>
@@ -90,37 +90,37 @@
 						<s-uploader v-model:url="state.model.logoUrl" fileMediatype="image" limit="1" mode="grid"
 							:imageStyles="{ width: '299rpx', height: '168rpx' }" :readonly="state.formStatus" />
 					</uni-forms-item>
-					<uni-forms-item name="businessLicensePicture" label="营业执照" :required="!state.formStatus"
+					<uni-forms-item name="businessLicensePicture" :label="t('merchant.business_license')" :required="!state.formStatus"
 						:errorMessage="state.businessLicensePictureError">
 						<s-uploader v-model:url="state.model.businessLicensePicture" fileMediatype="image" limit="1"
 							mode="grid" :imageStyles="{ width: '299rpx', height: '168rpx' }"
 							:readonly="state.formStatus" />
 
 					</uni-forms-item>
-					<uni-forms-item name="brandLicensing" label="品牌授权书" :required="!state.formStatus"
+					<uni-forms-item name="brandLicensing" :label="t('merchant.brand_authorization')" :required="!state.formStatus"
 						:errorMessage="state.brandLicensingError">
 						<s-uploader v-model:url="state.model.brandLicensing" fileMediatype="image" limit="1" mode="grid"
 							:imageStyles="{ width: '299rpx', height: '168rpx' }" :readonly="state.formStatus" />
 						<view class="ss-m-t-20 " style="color: var(--ui-BG-Main);" @click="downloadTemplate"
 							v-if="!state.model.brandLicensing">
-							下载模板
+							{{ t('merchant.download_template') }}
 						</view>
 
 					</uni-forms-item>
-					<uni-forms-item name="otherCertificate" label="其他证书">
+					<uni-forms-item name="otherCertificate" :label="t('merchant.other_certificates')">
 						<s-uploader v-model:url="state.model.otherCertificate" fileMediatype="image" limit="9"
 							mode="grid" :imageStyles="{ width: '299rpx', height: '168rpx' }"
 							:readonly="state.formStatus" />
 
 					</uni-forms-item>
-					<uni-forms-item name="description" label="简介" :required="!state.formStatus">
+					<uni-forms-item name="description" :label="t('merchant.introduction')" :required="!state.formStatus">
 
-						<uni-easyinput v-model="state.model.description" type="description" placeholder="请输入简介"
+						<uni-easyinput v-model="state.model.description" type="description" :placeholder="t('merchant.enter_introduction')"
 							:inputBorder="false" :placeholderStyle="placeholderStyle" :clearable="false"
 							:disabled="state.formStatus" />
 					</uni-forms-item>
 
-					<uni-forms-item name="description" label="状态" v-if="state.userApplyStatus">
+					<uni-forms-item name="description" :label="t('merchant.status')" v-if="state.userApplyStatus">
 						<uni-easyinput v-model="statusName" type="description"  :inputBorder="false"
 							:placeholderStyle="placeholderStyle" :clearable="false" :disabled="true" />
 					</uni-forms-item>
@@ -133,20 +133,20 @@
 					<!-- {{"用户是否申请过:"+state.userApplyStatus}}
 				{{"当前状态"+state.model.checkStatus}}
 				{{"当前状态是否能改动:" + !state.formStatus}} -->
-					<button class="ss-rest-button btn" @tap="onSubmit" v-if="!state.userApplyStatus">提交</button>
+					<button class="ss-rest-button btn" @tap="onSubmit" v-if="!state.userApplyStatus">{{ t('common.submit') }}</button>
 
 
 					<template v-if="[0].includes(state.model.checkStatus)">
-						<button class="ss-rest-button btn">审核中</button>
+						<button class="ss-rest-button btn">{{ t('merchant.review_in_progress') }}</button>
 					</template>
 					<template v-if="[1,2].includes(state.model.checkStatus)">
 						<template v-if="!state.changeIng">
-							<button class="ss-rest-button btn-two" @tap="openList">审核记录</button>
-							<button class="ss-rest-button btn-two" @tap="onChange">变动</button>
+							<button class="ss-rest-button btn-two" @tap="openList">{{ t('merchant.review_records') }}</button>
+							<button class="ss-rest-button btn-two" @tap="onChange">{{ t('merchant.changes') }}</button>
 						</template>
 						<template v-else>
-							<button class="ss-rest-button btn-two" @tap="onCancel">取消</button>
-							<button class="ss-rest-button btn-two" @tap="onSave">保存并提交</button>
+							<button class="ss-rest-button btn-two" @tap="onCancel">{{ t('common.cancel') }}</button>
+							<button class="ss-rest-button btn-two" @tap="onSave">{{ t('merchant.save_and_submit') }}</button>
 						</template>
 					</template>
 
@@ -154,9 +154,7 @@
 			</su-fixed>
 		</template>
 		<template v-if="!state.canUse">
-			<view style="position: fixed;top: 50%;left: 50%;transform: translate(-50%,-50%);text-align:center">当前用户({{userInfo.mobile}})<br/>
-已存在商户账号<br/>
-请更换账号申请!
+			<view style="position: fixed;top: 50%;left: 50%;transform: translate(-50%,-50%);text-align:center">{{ t('merchant.existing_merchant_alert',{user:userInfo.mobile}) }} 
 			</view>
 		</template>
 	</s-layout>
@@ -188,6 +186,7 @@
 	import {
 		showAuthModal
 	} from '@/sheep/hooks/useModal';
+	import { t } from '@/locale'
 	const userInfo = computed(() => sheep.$store('user').userInfo);
 	const state = reactive({
 		canUse: true, //用户是否可以打开页面true 可以,false不行
@@ -231,63 +230,63 @@
 			name: {
 				rules: [{
 					required: true,
-					errorMessage: '商户名称不能为空',
+					errorMessage: t('merchant.merchant_name_required'),
 				}, ],
 			},
 			description: {
 				rules: [{
 					required: true,
-					errorMessage: '简介不能为空',
+					errorMessage: t('merchant.introduction_required'),
 				}, ],
 			},
 			contact: {
 				rules: [{
 					required: true,
-					errorMessage: '联络人不能为空',
+					errorMessage: t('merchant.contact_required'),
 				}, ],
 			},
 			contactNumber: {
 				rules: [{
 					required: true,
-					errorMessage: '联络人手机号不能为空',
+					errorMessage: t('merchant.contact_phone_required'),
 				}, ],
 			},
 
 			customerServiceHotline: {
 				rules: [{
 					required: true,
-					errorMessage: '客服电话不能为空',
+					errorMessage:  t('merchant.customer_service_phone_required'),
 				}, ],
 			},
 			email,
 			legalPerson: {
 				rules: [{
 					required: true,
-					errorMessage: '法人不能为空',
+					errorMessage: t('merchant.legal_person_required'),
 				}, ],
 			},
 			legalPersonNumber: {
 				rules: [{
 					required: true,
-					errorMessage: '法人电话不能为空',
+					errorMessage:  t('merchant.legal_person_phone_required'),
 				}, ],
 			},
 			accountName: {
 				rules: [{
 					required: true,
-					errorMessage: '账户名称不能为空',
+					errorMessage: t('merchant.account_name_required'),
 				}, ],
 			},
 			accountNumber: {
 				rules: [{
 					required: true,
-					errorMessage: '账户号码不能为空',
+					errorMessage:  t('merchant.account_number_required'),
 				}, ],
 			},
 			bankName: {
 				rules: [{
 					required: true,
-					errorMessage: '开户银行不能为空',
+					errorMessage:  t('merchant.bank_required'),
 				}, ],
 			},
 		}
@@ -297,11 +296,11 @@
 	const statusName = computed(() => {
 		const status = state.model.checkStatus;
 		if (status === 0) {
-			return '审核中';
+			return   t('merchant.under_review');
 		} else if (status === 1) {
-			return '通过';
+			return  t('merchant.approved');
 		} else if (status === 2) {
-			return '拒绝';
+			return t('merchant.rejected');
 		} else {
 			return '';
 		}
@@ -317,7 +316,7 @@
 		// 创建并触发下载链接
 		const a = document.createElement('a');
 		a.href = fileUrl;
-		a.download = '非独家品牌授权书.docx'; // 下载文件的名称(可以修改为你希望的名称)
+		a.download =  t('merchant.non_exclusive_authorization') + '.docx'; // 下载文件的名称(可以修改为你希望的名称)
 		document.body.appendChild(a);
 		a.click();
 
@@ -346,23 +345,23 @@
 			return;
 		}
 		if (!state.model.areaId) {
-			state.areaIdError = '请选择所在地';
+			state.areaIdError = t('merchant.select_location');
 			return;
 		}
 		if (!state.model.identityCardFront) {
-			state.identityCardFrontError = '请选择上传法人身份证正面(国徽面)';
+			state.identityCardFrontError = t('merchant.select_legal_person_id_front');
 			return;
 		}
 		if (!state.model.identityCardReverseSide) {
-			state.identityCardReverseSideError = '请选择上传法人身份证背面(人像面)';
+			state.identityCardReverseSideError = t('merchant.select_legal_person_id_back');
 			return;
 		}
 		if (!state.model.businessLicensePicture) {
-			state.businessLicensePictureError = '请上传营业执照';
+			state.businessLicensePictureError = t('merchant.upload_business_license');
 			return;
 		}
 		if (!state.model.brandLicensing) {
-			state.brandLicensingError = '请上传品牌授权书';
+			state.brandLicensingError = t('merchant.upload_brand_authorization');
 			return;
 		}
 

+ 13 - 12
pages/public/setting.vue

@@ -1,5 +1,5 @@
 <template>
-	<s-layout class="set-wrap" title="系统设置" :bgStyle="{ color: '#fff' }">
+	<s-layout class="set-wrap" :title="t('common.system')" :bgStyle="{ color: '#fff' }">
 		<view class="header-box ss-flex-col ss-row-center ss-col-center">
 			<image class="logo-img ss-m-b-46" src="@/static/zxlogo.png" mode="aspectFit"></image>
 			<view class="name ss-m-b-24">{{ appInfo.name }}</view>
@@ -7,17 +7,17 @@
 
 		<view class="container-list">
 			<uni-list :border="false">
-				<uni-list-item title="当前版本" :rightText="appInfo.version" showArrow clickable :border="false"
+				<uni-list-item :title="t('common.current_version')" :rightText="appInfo.version" showArrow clickable :border="false"
 					class="list-border" @tap="onCheckUpdate" />
-				<uni-list-item title="本地缓存" :rightText="storageSize" showArrow :border="false" class="list-border" />
-				<uni-list-item title="关于我们" showArrow clickable :border="false" class="list-border" @tap="
+				<uni-list-item :title="t('common.local_cache')" :rightText="storageSize" showArrow :border="false" class="list-border" />
+				<uni-list-item :title="t('common.about_us')" showArrow clickable :border="false" class="list-border" @tap="
             sheep.$router.go('/pages/public/richtext', {
               title: '关于我们'
             })
           " />
 				<!-- 为了过审 只有 iOS-App 有注销账号功能 -->
 				<uni-list-item v-if="isLogin && sheep.$platform.os === 'ios' && sheep.$platform.name === 'App'"
-					title="注销账号" rightText="" showArrow clickable :border="false" class="list-border"
+					:title="t('common.logout_account')" rightText="" showArrow clickable :border="false" class="list-border"
 					@click="onLogoff" />
 			</uni-list>
 		</view>
@@ -29,15 +29,16 @@
                 title: '用户协议'
               })
             ">
-						《用户协议》
+						
+						{{ t('account.user_agreement') }} 
 					</view>
-					<view class="agreement-text"></view>
+					<view class="agreement-text">&nbsp; {{ t('account.and') }} &nbsp;</view>
 					<view class="tcp-text" @tap="
               sheep.$router.go('/pages/public/richtext', {
                 title: '隐私协议'
               })
-            ">
-						《隐私协议》
+            ">	
+						 {{ t('account.privacy_policy') }}
 					</view>
 				</view>
 			</view>
@@ -61,7 +62,7 @@
 		reactive
 	} from 'vue';
 	import AuthUtil from '@/sheep/api/member/auth';
-
+	import { t } from '@/locale'
 	const appInfo = computed(() => sheep.$store('app').info);
 	const isLogin = computed(() => sheep.$store('user').isLogin);
 	const storageSize = uni.getStorageInfoSync().currentSize + 'Kb';
@@ -80,8 +81,8 @@
 	// 注销账号
 	function onLogoff() {
 		uni.showModal({
-			title: '提示',
-			content: '确认注销账号?',
+			title: t('setting.prompt'),
+			content: t('common.confirm_logout'),
 			success: async function(res) {
 				if (!res.confirm) {
 					return;

+ 1 - 0
pages/shop/index.vue

@@ -4,6 +4,7 @@
 		<s-layout title="xxx店" navbar="normal" tabbar="/pages/index/index" :bgStyle="template.page"
 			:navbarStyle="template.style?.navbar" onShareAppMessage >
 			<s-block v-for="(item, index) in template.components" :key="index" :styles="item.property.style">
+				
 				<s-block-item :type="item.id" :data="item.property" :styles="item.property.style" />
 			</s-block>
 		</s-layout>

+ 19 - 28
pages/user/address/edit.vue

@@ -1,49 +1,48 @@
 <!-- 收货地址的新增/编辑 -->
 <template>
-	<!-- {{ru}} -->
-	<s-layout :title="state.model.id ? '编辑地址' : '新增地址'">
+	<s-layout :title="state.model.id ? t('address.edit_address') : t('address.add_address')">
 		<uni-forms ref="addressFormRef" v-model="state.model" :rules="rules" validateTrigger="bind" labelWidth="160"
 			labelAlign="left" border :labelStyle="{ fontWeight: 'bold' }">
 			<view class="bg-white form-box ss-p-x-30">
-				<uni-forms-item name="name" label="收货人" class="form-item">
-					<uni-easyinput v-model="state.model.name" placeholder="请填写收货人姓名" :inputBorder="false"
+				<uni-forms-item name="name" :label="t('address.recipient')" class="form-item">
+					<uni-easyinput v-model="state.model.name" :placeholder="t('address.enter_recipient_name')" :inputBorder="false"
 						placeholderStyle="color:#BBBBBB;font-size:30rpx;font-weight:400;line-height:normal" :maxlength='10' />
 				</uni-forms-item>
 
-				<uni-forms-item name="mobile" label="手机号" class="form-item">
-					<uni-easyinput v-model="state.model.mobile" type="number" placeholder="请输入手机号" :inputBorder="false"
+				<uni-forms-item name="mobile" :label="t('account.phone_number')" class="form-item">
+					<uni-easyinput v-model="state.model.mobile" type="number" :placeholder="t('account.enter_phone_number')" :inputBorder="false"
 						placeholderStyle="color:#BBBBBB;font-size:30rpx;font-weight:400;line-height:normal">
 					</uni-easyinput>
 				</uni-forms-item>
-				<uni-forms-item name="areaName" label="省市区" @tap="state.showRegion = true" class="form-item">
+				<uni-forms-item name="areaName" :label="t('address.province_city_district')" @tap="state.showRegion = true" class="form-item">
 					<uni-easyinput v-model="state.model.areaName" disabled :inputBorder="false"
 						:styles="{ disableColor: '#fff', color: '#333' }"
 						placeholderStyle="color:#BBBBBB;font-size:30rpx;font-weight:400;line-height:normal"
-						placeholder="请选择省市区">
+						:placeholder="t('address.select_province_city_district')">
 						<template v-slot:right>
 							<uni-icons type="right" />
 						</template>
 					</uni-easyinput>
 				</uni-forms-item>
-				<uni-forms-item name="detailAddress" label="详细地址" :formItemStyle="{ alignItems: 'flex-start' }"
+				<uni-forms-item name="detailAddress" :label="t('address.detailed_address')" :formItemStyle="{ alignItems: 'flex-start' }"
 					:labelStyle="{ lineHeight: '5em' }" class="textarea-item">
 					<uni-easyinput :inputBorder="false" type="textarea" v-model="state.model.detailAddress"
 						placeholderStyle="color:#BBBBBB;font-size:30rpx;font-weight:400;line-height:normal"
-						placeholder="请输入详细地址" clearable />
+						:placeholder="t('address.enter_detailed_address')" clearable />
 				</uni-forms-item>
 			</view>
 			<view class="ss-m-y-20 bg-white ss-p-x-30 ss-flex ss-row-between ss-col-center default-box">
-				<view class="default-box-title"> 设为默认地址 </view>
+				<view class="default-box-title"> {{ t('address.set_as_default_address') }} </view>
 				<su-switch style="transform: scale(0.8)" v-model="state.model.defaultStatus" />
 			</view>
 		</uni-forms>
 		<su-fixed bottom :opacity="false" bg="" placeholder :noFixed="false" :index="10">
 			<view class="footer-box ss-flex-col ss-row-between ss-p-20">
 				<view class="ss-m-b-20">
-					<button class="ss-reset-button save-btn ui-Shadow-Main" @tap="onSave">保存</button>
+					<button class="ss-reset-button save-btn ui-Shadow-Main" @tap="onSave">{{ t('common.save') }}</button>
 				</view>
 				<button v-if="state.model.id" class="ss-reset-button cancel-btn" @tap="onDelete">
-					删除
+					{{ t('common.delete') }}
 				</button>
 			</view>
 		</su-fixed>
@@ -70,6 +69,7 @@
 	import AreaApi from '@/sheep/api/system/area';
 	import AddressApi from '@/sheep/api/member/address';
 	import $helper from '@/sheep/helper';
+	import { t } from '@/locale'
 	const addressFormRef = ref(null);
 	const state = reactive({
 		showRegion: false,
@@ -87,20 +87,20 @@
 		name: {
 			rules: [{
 				required: true,
-				errorMessage: '请输入收货人姓名',
+				errorMessage: t('address.enter_recipient_name'),
 			}, ],
 		},
 		mobile,
 		detailAddress: {
 			rules: [{
 				required: true,
-				errorMessage: '请输入详细地址',
+				errorMessage: t('address.enter_detailed_address'),
 			}]
 		},
 		areaName: {
 			rules: [{
 				required: true,
-				errorMessage: '请选择您的位置'
+				errorMessage: t('address.select_province_city_district')
 			}]
 		},
 	};
@@ -152,8 +152,8 @@
 	// 删除收货地址
 	const onDelete = () => {
 		uni.showModal({
-			title: '提示',
-			content: '确认删除此收货地址吗?',
+			title: t('setting.prompt'),
+			content: t('address.confirm_delete_address'),
 			success: async function(res) {
 				if (!res.confirm) {
 					return;
@@ -170,16 +170,7 @@
 
 	onLoad(async (options) => {
 
-		// ru.value = {
-		// 	'consignee': 'aa',
-		// 	'mobile': '1595505005050',
-		// 	'province_name': '广东省',
-		// 	'city_name': '湛江市',
-		// 	'district_name': '廉江市',
-		// 	'address': 'yyyyyyyyy',
-		// 	'region': '',
-		// 	'is_default': 'false',
-		// }
+		
 
 		// 获得地区数据
 		getAreaData();

+ 5 - 4
pages/user/address/list.vue

@@ -1,6 +1,6 @@
 <!-- 收件地址列表 -->
 <template>
-	<s-layout title="收货地址" :bgStyle="{ color: '#FFF' }">
+	<s-layout :title="t('address.shipping_address')" :bgStyle="{ color: '#FFF' }">
 		<view v-if="state.list.length">
 			<s-address-item hasBorderBottom v-for="item in state.list" :key="item.id" :item="item"
 				@tap="onSelect(item)" />
@@ -13,15 +13,15 @@
 					@tap="importWechatAddress"
 					class="border ss-reset-button sync-wxaddress ss-m-20 ss-flex ss-row-center ss-col-center">
 					<text class="cicon-weixin ss-p-r-10" style="color: #09bb07; font-size: 40rpx"></text>
-					导入微信地址
+					{{ t('address.import_wechat_address') }}
 				</button>
 				<button class="add-btn ss-reset-button ui-Shadow-Main"
 					@tap="sheep.$router.go('/pages/user/address/edit')">
-					新增收货地址
+					{{ t('address.add_new_shipping_address') }}
 				</button>
 			</view>
 		</su-fixed>
-		<s-empty v-if="state.list.length === 0 && !state.loading" text="暂无收货地址" icon="/static/data-empty.png" />
+		<s-empty v-if="state.list.length === 0 && !state.loading" :text="t('no_shipping_address')" icon="/static/data-empty.png" />
 	</s-layout>
 </template>
 
@@ -40,6 +40,7 @@
 	import AreaApi from '@/sheep/api/system/area';
 	import AddressApi from '@/sheep/api/member/address';
 	import $helper from '@/sheep/helper';
+	import { t } from '@/locale'
 	const state = reactive({
 		list: [], // 地址列表
 		loading: true,

+ 16 - 24
pages/user/dummyAddress/edit.vue

@@ -1,40 +1,40 @@
 <!-- 收货地址的新增/编辑 -->
 <template>
 	<!-- {{ru}} -->
-	<s-layout :title="state.model.id ? '编辑虚拟地址' : '新增虚拟地址'">
+	<s-layout :title="state.model.id ? t('address.edit_virtual_address') : t('address.add_virtual_address')">
 		<uni-forms ref="addressFormRef" v-model="state.model" :rules="rules" validateTrigger="bind" labelWidth="160"
 			labelAlign="left" border :labelStyle="{ fontWeight: 'bold' }">
 			<view class="bg-white form-box ss-p-x-30">
-				<uni-forms-item name="name" label="收货人" class="form-item">
-					<uni-easyinput v-model="state.model.name" placeholder="请填写收货人姓名" :inputBorder="false"
+				<uni-forms-item name="name" :label="t('address.recipient')" class="form-item">
+					<uni-easyinput v-model="state.model.name" :placeholder="t('address.enter_recipient_name')"  :inputBorder="false"
 						placeholderStyle="color:#BBBBBB;font-size:30rpx;font-weight:400;line-height:normal" :maxlength='10'/>
 				</uni-forms-item>
 
-				<uni-forms-item name="mobile" label="手机号" class="form-item">
-					<uni-easyinput v-model="state.model.mobile" type="number" placeholder="请输入手机号" :inputBorder="false"
+				<uni-forms-item name="mobile" :label="t('account.phone_number')" class="form-item">
+					<uni-easyinput v-model="state.model.mobile" type="number" :placeholder="t('account.enter_phone_number')" :inputBorder="false"
 						placeholderStyle="color:#BBBBBB;font-size:30rpx;font-weight:400;line-height:normal">
 					</uni-easyinput>
 				</uni-forms-item>
 
-				<uni-forms-item name="detailAddress" label="详细地址" :formItemStyle="{ alignItems: 'flex-start' }"
+				<uni-forms-item name="detailAddress" :label="t('address.detailed_address')" :formItemStyle="{ alignItems: 'flex-start' }"
 					:labelStyle="{ lineHeight: '5em' }" class="textarea-item">
 					<uni-easyinput :inputBorder="false" type="textarea" v-model="state.model.detailAddress"
 						placeholderStyle="color:#BBBBBB;font-size:30rpx;font-weight:400;line-height:normal"
-						placeholder="请输入详细地址" clearable />
+						:placeholder="t('address.enter_detailed_address')" clearable />
 				</uni-forms-item>
 			</view>
 			<view class="ss-m-y-20 bg-white ss-p-x-30 ss-flex ss-row-between ss-col-center default-box">
-				<view class="default-box-title"> 设为默认虚拟地址 </view>
+				<view class="default-box-title"> {{ t('address.set_as_default_virtual_address') }} </view>
 				<su-switch style="transform: scale(0.8)" v-model="state.model.defaultStatus" />
 			</view>
 		</uni-forms>
 		<su-fixed bottom :opacity="false" bg="" placeholder :noFixed="false" :index="10">
 			<view class="footer-box ss-flex-col ss-row-between ss-p-20">
 				<view class="ss-m-b-20">
-					<button class="ss-reset-button save-btn ui-Shadow-Main" @tap="onSave">保存</button>
+					<button class="ss-reset-button save-btn ui-Shadow-Main" @tap="onSave">{{ t('common.save') }}</button>
 				</view>
 				<button v-if="state.model.id" class="ss-reset-button cancel-btn" @tap="onDelete">
-					删除
+					{{ t('common.delete') }}
 				</button>
 			</view>
 		</su-fixed>
@@ -61,6 +61,7 @@
 	import AreaApi from '@/sheep/api/system/area';
 	import AddressApi from '@/sheep/api/member/address';
 	import $helper from '@/sheep/helper';
+	import { t } from '@/locale'
 	const addressFormRef = ref(null);
 	const state = reactive({
 		showRegion: false,
@@ -79,14 +80,14 @@
 		name: {
 			rules: [{
 				required: true,
-				errorMessage: '请输入收货人姓名',
+				errorMessage: t('address.enter_recipient_name'),
 			}, ],
 		},
 		mobile,
 		detailAddress: {
 			rules: [{
 				required: true,
-				errorMessage: '请输入详细地址',
+				errorMessage: t('address.enter_detailed_address'),
 			}]
 		},
 
@@ -139,8 +140,8 @@
 	// 删除收货地址
 	const onDelete = () => {
 		uni.showModal({
-			title: '提示',
-			content: '确认删除此收货地址吗?',
+			title: t('setting.prompt'),
+			content: t('address.confirm_delete_address'),
 			success: async function(res) {
 				if (!res.confirm) {
 					return;
@@ -157,16 +158,7 @@
 
 	onLoad(async (options) => {
 
-		// ru.value = {
-		// 	'consignee': 'aa',
-		// 	'mobile': '1595505005050',
-		// 	'province_name': '广东省',
-		// 	'city_name': '湛江市',
-		// 	'district_name': '廉江市',
-		// 	'address': 'yyyyyyyyy',
-		// 	'region': '',
-		// 	'is_default': 'false',
-		// }
+		
 
 		// 获得地区数据
 		getAreaData();

+ 5 - 9
pages/user/dummyAddress/list.vue

@@ -1,6 +1,6 @@
 <!-- 收件地址列表 -->
 <template>
-	<s-layout title="虚拟商品收货地址" :bgStyle="{ color: '#FFF' }">
+	<s-layout :title="t('address.virtual_goods_address')" :bgStyle="{ color: '#FFF' }">
 		<view v-if="state.list.length">
 			<s-address-item spuType="0" hasBorderBottom v-for="item in state.list" :key="item.id" :item="item"
 				@tap="onSelect(item)" />
@@ -9,19 +9,14 @@
 		<su-fixed bottom placeholder>
 			<view class="footer-box ss-flex ss-row-between ss-p-20">
 				<!-- 微信小程序和微信H5 -->
-				<!-- <button v-if="['WechatMiniProgram', 'WechatOfficialAccount'].includes(sheep.$platform.name)"
-					@tap="importWechatAddress"
-					class="border ss-reset-button sync-wxaddress ss-m-20 ss-flex ss-row-center ss-col-center">
-					<text class="cicon-weixin ss-p-r-10" style="color: #09bb07; font-size: 40rpx"></text>
-					导入微信地址
-				</button> -->
+				
 				<button class="add-btn ss-reset-button ui-Shadow-Main"
 					@tap="sheep.$router.go('/pages/user/dummyAddress/edit')">
-					新增收货地址
+					{{ t('address.add_new_shipping_address') }}
 				</button>
 			</view>
 		</su-fixed>
-		<s-empty v-if="state.list.length === 0 && !state.loading" text="暂无收货地址" icon="/static/data-empty.png" />
+		<s-empty v-if="state.list.length === 0 && !state.loading" :text="t('address.no_shipping_address')" icon="/static/data-empty.png" />
 	</s-layout>
 </template>
 
@@ -40,6 +35,7 @@
 	import AreaApi from '@/sheep/api/system/area';
 	import AddressApi from '@/sheep/api/member/address';
 	import $helper from '@/sheep/helper';
+	import { t } from '@/locale'
 	const state = reactive({
 		list: [], // 地址列表
 		loading: true,

+ 9 - 6
pages/user/goods-collect.vue

@@ -1,11 +1,14 @@
 <!-- 我的商品收藏 -->
 <template>
-  <s-layout title="商品收藏">
+  <s-layout :title="$t('common.favorite')">
     <view class="cart-box ss-flex ss-flex-col ss-row-between">
       <!-- 头部 -->
       <view class="cart-header ss-flex ss-col-center ss-row-between ss-p-x-30">
         <view class="header-left ss-flex ss-col-center ss-font-26">
-          共 <text class="goods-number ui-TC-Main ss-flex">{{ state.pagination.total }}</text> 件商品
+			
+          <text class="goods-number ui-TC-Main ss-flex">
+			{{ $t('common.total_goods',{number:state.pagination.total}) }}
+		  </text> 
         </view>
         <view class="header-right">
           <button
@@ -13,14 +16,14 @@
             class="ss-reset-button"
             @tap="state.editMode = false"
           >
-            取消
+            {{ $t('common.cancel') }}
           </button>
           <button
             v-if="!state.editMode && state.pagination.total"
             class="ss-reset-button ui-TC-Main"
             @tap="state.editMode = true"
           >
-            编辑
+            {{ $t('common.edit') }}
           </button>
         </view>
       </view>
@@ -71,14 +74,14 @@
                 style="transform: scale(0.7)"
                 @tap.stop="onSelectAll"
               />
-              <view> 全选 </view>
+              <view>  {{ $t('common.all') }} </view>
             </label>
           </view>
           <view class="footer-right">
             <button
               class="ss-reset-button ui-BG-Main-Gradient pay-btn ss-font-28 ui-Shadow-Main"
               @tap="onCancel">
-              取消收藏
+               {{ $t('common.delete') }}
             </button>
           </view>
         </view>

+ 11 - 9
pages/user/goods-log.vue

@@ -1,15 +1,17 @@
 <!-- 商品浏览记录  -->
 <template>
-  <s-layout title="我的足迹" :bgStyle="{ color: '#f2f2f2' }">
+  <s-layout :title="$t('common.delete_footprint')" :bgStyle="{ color: '#f2f2f2' }">
     <view class="cart-box ss-flex ss-flex-col ss-row-between">
       <!-- 头部 -->
       <view class="cart-header ss-flex ss-col-center ss-row-between ss-p-x-30">
         <view class="header-left ss-flex ss-col-center ss-font-26">
-          共
+          <!--  -->
           <text class="goods-number ui-TC-Main ss-flex">
-            {{ state.pagination.total }}
+            <!-- {{ state.pagination.total }} -->
+			{{$t('common.total_goods',{number:state.pagination.total})}}
           </text>
-          件商品
+          <!-- 件商品 -->
+		  
         </view>
         <view class="header-right">
           <button
@@ -17,14 +19,14 @@
             class="ss-reset-button"
             @tap="state.editMode = false"
           >
-            取消
+            {{$t('common.cancel')}}
           </button>
           <button
             v-if="!state.editMode && state.pagination.total"
             class="ss-reset-button ui-TC-Main"
             @tap="state.editMode = true"
           >
-            编辑
+            {{$t('common.edit')}}
           </button>
         </view>
       </view>
@@ -76,7 +78,7 @@
                 style="transform: scale(0.7)"
                 @tap.stop="onSelectAll"
               />
-              <view>全选</view>
+              <view>{{$t('common.select_all')}}</view>
             </label>
           </view>
           <view class="footer-right ss-flex">
@@ -88,13 +90,13 @@
                   }]"
               @tap="onDelete"
             >
-              删除足迹
+              {{$t('common.delete_footprint')}}
             </button>
             <button
               class="ss-reset-button ui-BG-Main-Gradient pay-btn ss-font-28 ui-Shadow-Main ml-2"
               @tap="onClean"
             >
-              清空
+              {{$t('common.clear')}}
             </button>
           </view>
         </view>

+ 9 - 8
pages/user/qrcode-share.vue

@@ -1,11 +1,12 @@
 <template>
-	<s-layout title="我的二维码/分享页" class="set-userinfo-wrap">
+	<s-layout :title="t('share.share')" class="set-userinfo-wrap">
+		
 		<view class="ss-flex-col ss-col-center ss-row-center">
 		<view v-if="poster.src === ''" class="poster-title ss-flex ss-row-center" :style="{
 		  height: poster.height + 'px',
 		  width: poster.width + 'px',
 		}">
-				海报加载中...
+				{{ t('share.poster_loading') }}
 			</view>
 		<image v-else class="poster-img ss-m-20" :src="poster.src" :style="{
 		  height: poster.height + 'px',
@@ -20,8 +21,8 @@
 		<view class="modal-footer ss-flex ss-p-x-20">
 			<button class="confirm-btn" @tap="onSavePoster">{{
 		    ['wechatOfficialAccount', 'H5'].includes(sheep.$platform.name)
-		      ? '长按图片保存'
-		      : '长按图片保存'
+		      ? t('share.long_press_to_save') 
+		      : t('share.long_press_to_save') 
 		  }}</button>
 			<!-- <button class="confirm-btn" @tap="showShareModal">分享</button> -->
 		</view>
@@ -47,7 +48,7 @@
 		showShareModal
 	} from '@/sheep/hooks/useModal';
 	import ShareApi from '@/sheep/api/distri/share';
-
+	import { t } from '@/locale'
 	const state = reactive({
 		linkId:0
 	})
@@ -91,17 +92,17 @@
 	// 保存海报图片
 	const onSavePoster = () => {
 		if (['WechatOfficialAccount', 'H5'].includes(sheep.$platform.name)) {
-			sheep.$helper.toast('请长按图片保存');
+			sheep.$helper.toast(t('share.long_press_to_save') );
 			return;
 		}
 		uni.saveImageToPhotosAlbum({
 			filePath: poster.src,
 			success: (res) => {
 				onClosePoster();
-				sheep.$helper.toast('保存成功');
+				sheep.$helper.toast(t('share.save_success') );
 			},
 			fail: (err) => {
-				sheep.$helper.toast('保存失败');
+				sheep.$helper.toast(t('share.save_failure') );
 				console.log('图片保存失败:', err);
 			},
 		});

+ 7 - 4
pages/user/setting.vue

@@ -124,7 +124,7 @@
 					>
 						<template v-slot:body>
 							<p style="width: 100%"
-								>{{currentLang === 'en-US' ? 'Switch to Chinese': '切换为英文'}}
+								>{{currentLang === 'en' ? 'Switch to Chinese': '切换为英文'}}
 							</p>
 						</template>
 					</uni-list-item>
@@ -357,13 +357,16 @@
 	const currentLang = computed(() => {
 		return uni.getStorageSync('userLanguage');
 	});
-	const changeLanguage = () => {
+	const changeLanguage = async () => {
 		// setLanguage()
+		
 		console.log(currentLang.value)
-		if(currentLang.value === 'en-US'){
+		if(currentLang.value === 'en'){
+			await UserApi.updateUser({language: 'zh-Hans'});
 			setLanguage('zh-Hans');
 		}else{
-			setLanguage('en-US');
+			await UserApi.updateUser({language: 'en'});
+			setLanguage('en');
 		}
 	}
 

+ 6 - 5
pages/user/wallet/ScoreLog.vue

@@ -25,8 +25,8 @@
 									{{sheep.$helper.timeFormat(item.createTime, 'yyyy-mm-dd hh:MM')}}
 									<!-- 冻结佣金 -->
 									<text style="float: right;"
-										v-if="isFreeze == 'true'">余额:{{ points2point(item.afterFreezeAmount)}}</text>
-									<text style="float: right;" v-else>余额:{{points2point(item.afterAmount)}}</text>
+										v-if="isFreeze == 'true'">{{ t('wallet.balance') }}:{{ points2point(item.afterFreezeAmount)}}</text>
+									<text style="float: right;" v-else>{{ t('wallet.balance') }}:{{points2point(item.afterAmount)}}</text>
 								</view>
 							</view>
 						</view>
@@ -34,7 +34,7 @@
 				</view>
 				<s-empty v-else text="暂无数据" paddingTop="200" icon="/static/data-empty.png" />
 				<uni-load-more v-if="state.pagination.total > 0" :status="state.loadStatus" :content-text="{
-					  contentdown: '点击加载更多',
+					  contentdown:t('common.click_to_load_more'),
 					}" @tap="onLoadMore(true)" @scrolltolower="onLoadMore(true)" />
 			</scroll-view>
 
@@ -62,6 +62,7 @@
 		resetPagination
 	} from '@/sheep/util';
 	import ScoreApi from '@/sheep/api/distri/score';
+	import { t } from '@/locale'
 	const userWallet = computed(() => sheep.$store('user').userWallet);
 	const statusBarHeight = sheep.$platform.device.statusBarHeight * 2;
 	const userInfo = computed(() => sheep.$store('user').userInfo);
@@ -120,10 +121,10 @@
 		// 	title += "-转确权"
 		// }
 		if([3].includes(item.profitStatus) && props.isFreeze == 'false' && item.ancestorQuotaAmount){
-			title += '(超出额度:' + points2point(item.ancestorQuotaAmount) + ')'
+			title += '('+t('wallet.exceed_limit')+':' + points2point(item.ancestorQuotaAmount) + ')'
 		}
 		if([22].includes(item.profitStatus) && props.isFreeze == 'false' && item.accumulatedQuotaAmount){
-			title += '(超出额度:' + points2point(item.accumulatedQuotaAmount) + ')'
+			title += '('+t('wallet.exceed_limit')+':' + points2point(item.accumulatedQuotaAmount) + ')'
 		}
 		// title += ")"
 		return title;

+ 4 - 3
pages/user/wallet/consumptionLog.vue

@@ -11,7 +11,7 @@
 						<view class="ss-flex ss-col-center" style="width: 100%;">
 							<view class="ss-flex ss-m-t-10"
 								style="flex-direction: column;align-items: flex-start;width: 100%;">
-								<view class="name" style="width: 100%;"> {{ item.consumptionStatusName  }}{{ [3,4].includes(item.consumptionStatus) ? "(" + item.generateUserName +")" : ""}} {{ item.consumptionStatus === 1 ? "(金额:" + points2point(item.practicalConsumptionPoints)+")" : ""}}
+								<view class="name" style="width: 100%;"> {{ item.consumptionStatusName  }}{{ [3,4].includes(item.consumptionStatus) ? "(" + item.generateUserName +")" : ""}} {{ item.consumptionStatus === 1 ? "("+t('wallet.balance') +":" + points2point(item.practicalConsumptionPoints)+")" : ""}}
 									<text  style="float: right;" class="color-red"
 										:class="{'color-green':item.consumptionPoints < 0}" > 
 										{{item.consumptionPoints > 0 ? '+'+points2point(item.consumptionPoints) : points2point(item.consumptionPoints)}}
@@ -20,7 +20,7 @@
 								</view>
 								<view class="time " style="width: 100%;">
 									{{sheep.$helper.timeFormat(item.createTime, 'yyyy-mm-dd hh:MM')}}
-									<text style="float: right;">余额:{{ points2point(item.afterConsumptionPoints)}}</text>
+									<text style="float: right;">{{ t('wallet.balance') }}:{{ points2point(item.afterConsumptionPoints)}}</text>
 								</view>
 							</view>
 						</view>
@@ -28,7 +28,7 @@
 				</view>
 				<s-empty v-else text="暂无数据" paddingTop="200" icon="/static/data-empty.png" />
 				<uni-load-more v-if="state.pagination.total > 0" :status="state.loadStatus" :content-text="{
-					  contentdown: '点击加载更多',
+					  contentdown: t('common.click_to_load_more'),
 					}" @tap="onLoadMore(true)" @scrolltolower="onLoadMore(true)" />
 			</scroll-view>
 
@@ -56,6 +56,7 @@
 		resetPagination
 	} from '@/sheep/util';
 	import ConsumptionApi from '@/sheep/api/distri/consumption';
+	import { t } from '@/locale'
 	const userWallet = computed(() => sheep.$store('user').userWallet);
 	const statusBarHeight = sheep.$platform.device.statusBarHeight * 2;
 	const userInfo = computed(() => sheep.$store('user').userInfo);

+ 25 - 24
pages/user/wallet/consumptionTransfers.vue

@@ -1,12 +1,12 @@
 <template>
-	<s-layout class="set-wrap" title="消费分转让" :bgStyle="{ color: '#FFF' }">
+	<s-layout class="set-wrap" :title="t('wallet.points_transfer')" :bgStyle="{ color: '#FFF' }">
 		<uni-forms :model="state.model" :rules="state.rules" validateTrigger="bind" labelPosition="left" border
 			class="form-box" labelWidth='200' ref="FormRef">
 			<view class="bg-white ss-p-x-30">
-				<uni-forms-item name="recipientUserName" label="接收人" :required="true"
+				<uni-forms-item name="recipientUserName" :label="t('wallet.recipient')" :required="true"
 					:error-message="state.usernameErrorMsg">
 					<uni-easyinput v-model="state.model.recipientUserName" type="recipientUserName"
-						placeholder="请输入接收人用户名" :inputBorder="false" :clearable="false" @blur="verifyUsername">
+						:placeholder="t('wallet.enter_recipient_username')" :inputBorder="false" :clearable="false" @blur="verifyUsername">
 						<template v-slot:right>
 							<view v-if="state.verifyUsername" class="icon">
 								<image style :src="sheep.$url.static('/static/images/shibai.png')" />
@@ -17,10 +17,10 @@
 						</template>
 					</uni-easyinput>
 				</uni-forms-item>
-				<uni-forms-item name="recipientUserPhone" label="接收人手机号" :required="true"
+				<uni-forms-item name="recipientUserPhone" :label="t('wallet.recipient_phone')" :required="true"
 					:error-message="state.mobileErrorMsg">
 					<uni-easyinput v-model="state.model.recipientUserPhone" type="number"
-						placeholder="请输入接收人手机号" :inputBorder="false" :clearable="false"
+						:placeholder="t('wallet.enter_recipient_phone')" :inputBorder="false" :clearable="false"
 						@blur="verifyPhone" >
 						<template v-slot:right>
 							<view v-if="state.verifyMobile" class="icon">
@@ -32,10 +32,10 @@
 						</template>
 					</uni-easyinput>
 				</uni-forms-item>
-				<uni-forms-item name="mobile" label="手机号" class="mobile loginUniFormItem ss-p-t-10"
+				<uni-forms-item name="mobile" :label="t('account.phone_number')" class="mobile loginUniFormItem ss-p-t-10"
 					>
 					<uni-easyinput v-model="state.model.smsCodeUseReqDTO.mobile" type="smsCodeUseReqDTO"
-						placeholder="请输入验证码" :inputBorder="false" :clearable="false" :disabled="true">
+						:placeholder="t('account.enter_phone_number')" :inputBorder="false" :clearable="false" :disabled="true">
 						<template v-slot:right>
 							<button class="ss-reset-button code-btn code-btn-start" :disabled="verifyUsername == true || state.verifyMobile == true"
 								:class="{ 'disabled': verifyUsername == true || state.verifyMobile == true }"
@@ -45,27 +45,27 @@
 						</template>
 					</uni-easyinput>
 				</uni-forms-item>
-				<uni-forms-item name="smsCodeUseReqDTO.code" label="验证码" :required="true">
+				<uni-forms-item name="smsCodeUseReqDTO.code" :label="t('account.verification_code')" :required="true">
 					<uni-easyinput v-model="state.model.smsCodeUseReqDTO.code" type="number"
-						placeholder="请输入验证码" :inputBorder="false" :clearable="false" >
+						:placeholder="t('account.enter_verification_code')" :inputBorder="false" :clearable="false" >
 					</uni-easyinput>
 				</uni-forms-item>
-				<uni-forms-item name="consumptionPoints" label="转让金额" :required="true">
+				<uni-forms-item name="consumptionPoints" :label="t('wallet.transfer_amount')" :required="true">
 					<uni-easyinput v-model="state.model.consumptionPoints" type="number"
-						placeholder="请输入转让金额" :inputBorder="false" :clearable="false" @input="validateInput" />
+						:placeholder="t('wallet.enter_transfer_amount')" :inputBorder="false" :clearable="false" @input="validateInput" />
 				</uni-forms-item>
 
 
 			</view>
 		</uni-forms>
 		<view class="ss-flex ss-row-center ss-col-center ss-m-t-30">
-			您当前可转让的金额:<text class="text-red">{{canUseConsumptionPoints}}</text>
-			<!-- <button class="ss-m-l-10 all-btn " @click="useAllPonints">全部</button> -->
+			{{t('wallet.current_transferable_amount')}}<text class="text-red">{{canUseConsumptionPoints}}</text>
+			<!-- <button class="ss-m-l-10 all-btn " @click="useAllPonints">{{t('common.all')}}</button> -->
 
 		</view>
 		<su-fixed bottom placeholder bg="none">
 			<view class="footer-box ss-p-20 ss-flex">
-				<button class="ss-rest-button btn" @tap="onSubmit">确定</button>
+				<button class="ss-rest-button btn" @tap="onSubmit">{{t('common.confirm')}}</button>
 			</view>
 		</su-fixed>
 
@@ -107,6 +107,7 @@
 		showWalletModal,
 		colseWalletModal
 	} from '@/sheep/hooks/useModal';
+	import { t } from '@/locale'
 	const userInfo = computed(() => sheep.$store('user').userInfo);
 	const userWallet = computed(() => sheep.$store('user').userWallet);
 	const state = reactive({
@@ -129,31 +130,31 @@
 			recipientUserName: {
 				rules: [{
 					required: true,
-					errorMessage: '接收人不能为空',
+					errorMessage: t('wallet.recipient_cannot_be_empty'),
 				}, ],
 			},
 			recipientUserPhone: {
 				rules: [{
 					required: true,
-					errorMessage: '接收人手机号不能为空',
+					errorMessage: t('wallet.recipient_phone_cannot_be_empty'),
 				}, ],
 			},
 			"smsCodeUseReqDTO.code": {
 				rules: [{
 					required: true,
-					errorMessage: '验证码不能为空',
+					errorMessage: t('wallet.verification_code_cannot_be_empty'),
 				}, ],
 			},
 			consumptionPoints: {
 				rules: [{
 					required: true,
-					errorMessage: '转让金额不能为空',
+					errorMessage: t('wallet.transfer_amount_cannot_be_empty'),
 				}, 
 				{
 				  validateFunction: function (rule, value, data, callback) {
 
 				    if (value<=0) {
-				      callback('转让金额不能小于等于0');
+				      callback(t('wallet.transfer_amount_less_than_zero'));
 				    }
 				    return true;
 				  },
@@ -171,7 +172,7 @@
 			state.verifyUsername = true
 			return false;
 		}else if (username === userInfo.value.username) {
-			state.usernameErrorMsg = '接收人不能为自己'
+			state.usernameErrorMsg = t('wallet.recipient_cannot_be_self')
 			return false;
 		}
 		lastUsername.value = username
@@ -180,7 +181,7 @@
 			data
 		} = await AuthUtil.verifyUsername(username);
 		if (data) {
-			state.usernameErrorMsg = '用户不存在!'
+			state.usernameErrorMsg = t('wallet.user_does_not_exist')
 		} else {
 			state.usernameErrorMsg = ''
 		}
@@ -201,7 +202,7 @@
 		} = await AuthUtil.verifyPhone(state.model.recipientUserName, phone);
 		// false就是已经有这个用户名,可以登录,true是没有,不可以登录
 		if (!data || data.mobile !== phone ) {
-			state.mobileErrorMsg = '接收人用户名与手机号不匹配!'
+			state.mobileErrorMsg = t('wallet.username_phone_mismatch')
 			state.verifyMobile = true
 		} else {
 			state.mobileErrorMsg = ''
@@ -241,7 +242,7 @@
 		
 		if(state.model.recipientUserName === userInfo.value.username){
 			uni.showToast({
-				title: '不能给自己转账',
+				title: t('wallet.cannot_transfer_to_self'),
 				icon: 'none',
 				duration: 2000
 			})
@@ -265,7 +266,7 @@
 			code
 		} = await ConsumptionApi.createConsumptionLog(state.model);
 		if (code === 0) {
-			showWalletModal({msg:"转账成功"})
+			showWalletModal({msg:t('wallet.transfer_successful')})
 			uni.$emit('consumptionTransfersComplete');
 			sheep.$router.redirect('/pages/user/wallet/score')
 		}

+ 3 - 3
pages/user/wallet/maxScoreLog.vue

@@ -29,7 +29,7 @@
 				</view>
 				<s-empty v-else text="暂无数据" paddingTop="200" icon="/static/data-empty.png" />
 				<uni-load-more v-if="state.pagination.total > 0" :status="state.loadStatus" :content-text="{
-					  contentdown: '点击加载更多',
+					  contentdown: t('common.click_to_load_more'),
 					}" @tap="onLoadMore(true)" @scrolltolower="onLoadMore(true)" />
 			</scroll-view>
 
@@ -57,7 +57,7 @@
 		resetPagination
 	} from '@/sheep/util';
 	import ScoreApi from '@/sheep/api/distri/score';
-
+	import { t } from '@/locale'
 	const userWallet = computed(() => sheep.$store('user').userWallet);
 	const statusBarHeight = sheep.$platform.device.statusBarHeight * 2;
 	const userInfo = computed(() => sheep.$store('user').userInfo);
@@ -119,7 +119,7 @@
 		// 	value += '余额:'
 		// 	value += points2point(item.afterMaxAvailablePointsAmount)
 		// }
-		value += '余额:'
+		value += t('wallet.balance') + ':'
 		value += points2point(item.afterMaxAvailablePointsAmount)
 		return value;
 	}

+ 14 - 14
pages/user/wallet/score.vue

@@ -1,11 +1,11 @@
 <!-- 我的佣金 -->
 <template>
-	<s-layout class="wallet-wrap" :bgStyle="{'backgroundColor':'#ffffff'}" title="钱包" navbar="normal">
+	<s-layout class="wallet-wrap" :bgStyle="{'backgroundColor':'#ffffff'}" :title="t('wallet.wallet')" navbar="normal">
 		<view class="score-box bg-white ss-flex-col ss-row-center ss-col-center">
 			<view class="ss-flex ss-m-y-30 w-100">
 				<view class="ss-flex"  style="flex-direction: column;flex:1;border-right:1px solid #f6f6f6">
 					<view class="ss-m-b-10  circle value-box ss-flex ss-row-center" :style="circleStyle">
-						<view>佣金</view>
+						<view>{{ t('wallet.commission') }}</view>
 					</view>
 					<view class="ss-m-b-30 ss-font-40" :style="{color:percentageColor}">
 						<text class="all-title ss-m-r-8">{{ points2point(userWallet.integralDO.currentQuota) }}</text>
@@ -13,19 +13,19 @@
 					<view class="ss-flex">
 						<view class="all-title ss-m-r-8">
 							<button class="btn ss-reset-button" @tap="sheep.$router.go('/pages/user/wallet/withdraw')">
-								提现
+								{{ t('wallet.withdraw') }}
 							</button>
 						</view>
 						<view class="all-title ss-m-r-8">
 							<button class="btn ss-reset-button" @tap="sheep.$router.go('/pages/user/wallet/scoreToConsumption')">
-								转消费分
+								{{ t('wallet.transfer_points') }}
 							</button>
 						</view>
 					</view>
 				</view>
 				<view class="ss-flex" style="flex-direction: column;flex:1;">
 					<view class="ss-m-b-10  circle value-box ss-flex ss-row-center" style="background:#0c912f">
-						<view>消费分</view>
+						<view>{{ t('wallet.consumption_points') }}</view>
 					</view>
 					<view class="ss-m-b-30 ss-font-40" style="color:#0c912f">
 						<text class="all-title ss-m-r-8">{{ points2point(userWallet.integralDO.consumptionPoints) }}</text>
@@ -33,13 +33,13 @@
 					<view class="ss-flex">
 						<view class="all-title ss-m-x-8" >
 							<button class="btn ss-reset-button" @tap="sheep.$router.go('/pages/user/wallet/topupConsumptionPoints')">
-								充值
+								{{ t('wallet.recharge') }}
 							</button>
 						</view>
 						<view class="all-title ss-m-x-8">
 							
 							<button class="btn ss-reset-button" @tap="sheep.$router.go('/pages/user/wallet/consumptionTransfers')">
-								消费分转让
+								{{ t('wallet.points_transfer') }}
 							</button>
 						</view>
 					</view>
@@ -52,7 +52,7 @@
 					showArrow :border="false">
 					<template v-slot:body>
 						<p style="width: 100%">
-							当前可获得峰值:{{ points2point(userWallet.integralDO.accumulatedQuota + userWallet.integralDO.ancestorQuota) }}/{{ points2point(userWallet.integralDO.highQuotaTotal) }}
+							{{t('wallet.current_peak')+ points2point(userWallet.integralDO.accumulatedQuota + userWallet.integralDO.ancestorQuota) }}/{{ points2point(userWallet.integralDO.highQuotaTotal) }}
 						</p>
 					</template>
 				</uni-list-item>
@@ -65,13 +65,13 @@
 				<uni-list-item clickable @tap="sheep.$router.go('/pages/user/wallet/ScoreLog',{isFreeze: false})"
 					title="佣金记录" showArrow :border="false">
 					<template v-slot:body>
-						<p style="width: 100%">佣金记录</p>
+						<p style="width: 100%">{{ t('wallet.commission_record') }}</p>
 					</template>
 				</uni-list-item>
 				<uni-list-item clickable @tap="sheep.$router.go('/pages/user/wallet/consumptionLog')"
 					title="消费分记录" showArrow :border="false">
 					<template v-slot:body>
-						<p style="width: 100%">消费分记录</p>
+						<p style="width: 100%">{{ t('wallet.points_record') }}</p>
 					</template>
 				</uni-list-item>
 				<!-- <uni-list-item clickable @tap="sheep.$router.go('/pages/user/wallet/consumptionTransfersLog')"
@@ -83,12 +83,12 @@
 				<uni-list-item clickable @tap="sheep.$router.go('/pages/user/wallet/withdrawalLog')" title="提现记录"
 					showArrow :border="false">
 					<template v-slot:body>
-						<p style="width: 100%">提现 (预计24小时左右到账)</p>
+						<p style="width: 100%">{{ t('wallet.withdrawal') }}</p>
 					</template>
 				</uni-list-item>
 				<uni-list-item clickable @tap="state.showModel = true" title="佣金计算规则" :border="false">
 					<template v-slot:body>
-						<p style="width: 100%">佣金计算规则</p>
+						<p style="width: 100%">{{ t('wallet.commission_rules') }}</p>
 					</template>
 				</uni-list-item>
 			</uni-list>
@@ -98,7 +98,7 @@
 		<su-popup :show="state.showModel" type="center" round="10" :isMaskClick="false" showClose @close="close">
 			<view class="head-nav">
 				<view :class="state.navIndex==0?'activite':''" class="ss-m-l-20" @click="checkIndex(0)">
-					佣金计算规则
+					{{ t('wallet.commission_rules') }}
 				</view>
 			</view>
 			<scroll-view class="scroll-view_H" scroll-y="true">
@@ -134,7 +134,7 @@
 	import ScoreApi from '@/sheep/api/distri/score';
 	import ScoreLog from './ScoreLog'
 	import richtext from '@/pages/public/richtext'
-
+	import { t } from '@/locale'
 	const userWallet = computed(() => sheep.$store('user').userWallet);
 	const statusBarHeight = sheep.$platform.device.statusBarHeight * 2;
 	const userInfo = computed(() => sheep.$store('user').userInfo);

+ 11 - 10
pages/user/wallet/scoreToConsumption.vue

@@ -1,24 +1,24 @@
 <template>
-	<s-layout class="set-wrap" title="佣金转消费分" :bgStyle="{ color: '#FFF' }">
+	<s-layout class="set-wrap" :title="t('wallet.commission_to_points')" :bgStyle="{ color: '#FFF' }">
 		<uni-forms :model="state.model" :rules="state.rules" validateTrigger="bind" labelPosition="left" border
 			class="form-box" labelWidth='200' ref="FormRef">
 			<view class="bg-white ss-p-x-30">
-				<uni-forms-item name="quota" label="消费分" :required="true">
+				<uni-forms-item name="quota" :label="t('wallet.consumption_points')" :required="true">
 					<uni-easyinput v-model="state.model.quota" type="number"
-						placeholder="请输入转换金额" :inputBorder="false" :clearable="false" @input="validateInput" />
+						:placeholder="t('wallet.enter_transfer_amount')" :inputBorder="false" :clearable="false" @input="validateInput" />
 				</uni-forms-item>
 
 
 			</view>
 		</uni-forms>
 		<view class="ss-flex ss-row-center ss-col-center ss-m-t-30">
-			您当前可转换的佣金额度:<text class="text-red">{{currentQuota}}</text>
+			{{t('wallet.current_commission_available')}}:<text class="text-red">{{currentQuota}}</text>
 			<!-- <button class="ss-m-l-10 all-btn " @click="useAllPonints">全部</button> -->
 
 		</view>
 		<su-fixed bottom placeholder bg="none">
 			<view class="footer-box ss-p-20 ss-flex">
-				<button class="ss-rest-button btn" @tap="onSubmit">确定</button>
+				<button class="ss-rest-button btn" @tap="onSubmit">{{ t('common.confirm') }}</button>
 			</view>
 		</su-fixed>
 
@@ -55,6 +55,7 @@
 	import {
 		showAuthModal,
 	} from '@/sheep/hooks/useModal';
+	import { t } from '@/locale'
 	const userInfo = computed(() => sheep.$store('user').userInfo);
 	const userWallet = computed(() => sheep.$store('user').userWallet);
 	const state = reactive({
@@ -66,12 +67,12 @@
 			quota: {
 				rules: [{
 					required: true,
-					errorMessage: '转换金额不能为空',
+					errorMessage: t('wallet.transfer_amount_cannot_be_empty'),
 				}, 
 				{
 				  validateFunction: function (rule, value, data, callback) {
 				    if (value<=0) {
-				      callback('转换金额不能小于等于0');
+				      callback(t('wallet.transfer_amount_cannot_be_zero'));
 				    }
 				    return true;
 				  },
@@ -118,8 +119,8 @@
 			return;
 		}
 		uni.showModal({
-			title: '提示',
-			content: '佣金转为消费分后不可逆,是否转换?',
+			title: t('setting.prompt'),
+			content: t('wallet.commission_to_points_irreversible'),
 			
 			success: async function(res) {
 				if (!res.confirm) {
@@ -131,7 +132,7 @@
 				} = await ConsumptionApi.quotaTransition(state.model.quota);
 				if (code === 0) {
 					uni.showToast({
-						title: '转换成功',
+						title: t('wallet.conversion_successful'),
 						icon: 'none',
 						duration: 2000
 					});

+ 10 - 9
pages/user/wallet/team.vue

@@ -4,7 +4,7 @@
 
 		<view class="model-box ss-flex-col">
 			<view class="all-title ss-p-x-45 ss-p-t-30">
-				<text style="float: right;">共{{state.teamCount}}人</text>
+				<text style="float: right;">{{ t('team.total_people',{count:state.teamCount}) }}</text>
 			</view>
 
 			<view class="list-box" style="width: 100%;padding: 0;height: calc(100vh - 7.5rem) ;">
@@ -27,11 +27,11 @@
 									<text
 										style="width:50%;display: inline-block;">{{ state.ancestor.username ||'昵称:'+state.ancestor.descNickName  }}</text>
 									<text class="time"
-										style="float: right;color: #666666">保留绩效值:{{points2point(state.ancestor.residueSocial)}}</text>
+										style="float: right;color: #666666">{{ t('team.retain_performance') }}:{{points2point(state.ancestor.residueSocial)}}</text>
 								</view>
 								<view class="time" style="width: 100%;color: #999;">
-									<text>{{state.ancestor.socialStatusLevel || "等级1" }}</text> / <text>推荐人</text>
-									<text style="float: right;">团队:{{state.ancestor.descendantsCount}}人</text>
+									<text>{{state.ancestor.socialStatusLevel || "等级1" }}</text> / <text>{{t('team.referrer')}}</text>
+									<text style="float: right;"> {{ t('team.team_count',{count:state.ancestor.descendantsCount}) }}</text>
 								</view>
 							</view>
 						</view>
@@ -60,26 +60,26 @@
 											<text style="width:50%;display: inline-block;">
 												{{ item.username || '昵称:'+ item.descNickName}}</text>
 											<text class="time"
-												style="float: right;color: #666666;">新增绩效值:{{points2point(item.residueSocial)}}</text>
+												style="float: right;color: #666666;">{{t('team.new_performance_value')}}:{{points2point(item.residueSocial)}}</text>
 										</view>
 
 										<view class="time" style="width: 100%;color: #999">
-											{{item.socialStatusLevel}} / <text>{{item.depth == 1?'直推人':''}}</text>
-											<text style="float: right;">团队:{{item.descendantsCount}}人</text>
+											{{item.socialStatusLevel}} / <text>{{item.depth == 1? t('team.direct_referral') :''}}</text>
+											<text style="float: right;"> {{ t('team.team_count',{count:item.descendantsCount}) }}</text>
 
 										</view>
 									</view>
 								</view>
 							</view>
 						</view>
-						<s-empty v-else text="暂无团队成员" icon="/static/data-empty.png" />
+						<s-empty v-else :text="t('team.no_team_members')" icon="/static/data-empty.png" />
 					</scroll-view>
 
 				</view>
 			</view>
 		</view>
 		<uni-load-more v-if="state.descendants.total > 0" :status="state.loadStatus" :content-text="{
-		  contentdown: '点击加载更多',
+		  contentdown: t('common.click_to_load_more'),
 		}" @tap="loadMore" />
 	</s-layout>
 </template>
@@ -103,6 +103,7 @@
 	import {
 		points2point
 	} from '@/sheep/hooks/useGoods';
+	import { t } from '@/locale'
 	const statusBarHeight = sheep.$platform.device.statusBarHeight * 2;
 	const userInfo = computed(() => sheep.$store('user').userInfo);
 	const sys_navBar = sheep.$platform.navbar;

+ 11 - 9
pages/user/wallet/topupConsumptionPoints.vue

@@ -1,6 +1,6 @@
 <!-- 消费分充值 -->
 <template>
-	<s-layout title="消费分充值">
+	<s-layout :title="t('wallet.points_recharge')">
 		<view class="bg-white ss-modal-box ss-flex-col">
 
 			<!-- 提现金额 -->
@@ -8,11 +8,11 @@
 				<uni-forms :model="state.model" :rules="state.rules" validateTrigger="bind" labelPosition="left" border
 					class="form-box" labelWidth='200' ref="FormRef">
 					<view class="bg-white ss-p-x-30">
-						<uni-forms-item name="quota" label="充值金额" :required="true">
-							<uni-easyinput v-model="state.payPrice" type="number" placeholder="请输入金额"
+						<uni-forms-item name="quota" :label="t('wallet.recharge_amount')" :required="true">
+							<uni-easyinput v-model="state.payPrice" type="number" :placeholder="t('wallet.enter_recharge_amount')"
 								:inputBorder="false" :clearable="false" @input="validateInput" :maxlength="9" />
 						</uni-forms-item>
-						<uni-forms-item name="quota" label="实到消费分">
+						<uni-forms-item name="quota" :label="t('wallet.actual_points_received')">
 							<view class="ss-flex ss-h-100">
 								{{consumption}}
 							</view>
@@ -20,12 +20,13 @@
 
 					</view>
 				</uni-forms>
-				<view class="ss-flex ss-row-center ss-col-center ss-m-t-30 text-red text-center">备注:充值{{state.percentage.triggerMagnificationPoints}}元及以上,可获得{{parseFloat(state.percentage.consumptionMagnification)}}倍消费分
+				<view class="ss-flex ss-row-center ss-col-center ss-m-t-30 text-red text-center">
+				{{ t('wallet.note_recharge_bonus',{amount:state.percentage.triggerMagnificationPoints,multiplier:parseFloat(state.percentage.consumptionMagnification)}) }}
 				</view>
 			</view>
 			<view class="modal-footer ss-flex ss-row-center ss-col-center ss-m-t-80 ss-m-b-40 ss-flex-5">
 				<button class="ss-reset-button save-btn" @tap="submit">
-					确定
+					{{ t('common.confirm') }}
 				</button>
 			</view>
 		</view>
@@ -57,6 +58,7 @@
 		showAuthModal,
 		showShareModal
 	} from '@/sheep/hooks/useModal';
+	import { t } from '@/locale'
 	const userWallet = computed(() => sheep.$store('user').userWallet);
 	const userInfo = computed(() => sheep.$store('user').userInfo);
 
@@ -90,18 +92,18 @@
 		const [integerPart, decimalPart] = strPoints.split('.')
 		if (decimalPart) {
 			nextTick(() => {
-				state.payPrice = integerPart;
+				// state.payPrice = integerPart;
 			});
 		}
 	}
 
 	const submit = async () => {
 		if (!state.payPrice) {
-			sheep.$helper.toast('请输入充值金额');
+			sheep.$helper.toast(t('wallet.enter_recharge_amount'));
 			return;
 		}
 		if (parseFloat(state.payPrice) < state.percentage.userTopUpConsumptionPoints) {
-			sheep.$helper.toast(`充值金额不能少于${state.percentage.userTopUpConsumptionPoints}`);
+			sheep.$helper.toast(t('wallet.recharge_amount_less_than',{point:state.percentage.userTopUpConsumptionPoints}));
 			return;
 		}
 		let {

+ 24 - 23
pages/user/wallet/withdraw.vue

@@ -1,10 +1,10 @@
 <!-- 提现 -->
 <template>
-	<s-layout title="提现">
+	<s-layout :title="t('wallet.withdraw')">
 		<view class="bg-white ss-modal-box ss-flex-col">
 			<!-- 提现方式 -->
 			<view class="modal-content">
-				<view class="out-title ss-p-l-30 ss-m-y-30">选择提现方式</view>
+				<view class="out-title ss-p-l-30 ss-m-y-30">{{ t('wallet.select_withdrawal_method') }}</view>
 				<radio-group @change="onTapOut">
 					<label class="out-type-item" v-for="item in state.outMethods" :key="item.title">
 						
@@ -24,7 +24,7 @@
 								
 							</view>
 							<text style="float: right;" v-if="item.account">{{item.account}}</text>
-							<text style="float: right;" v-else @click="handleBind(item.value)">暂未绑定,点击绑定&nbsp;></text>
+							<text style="float: right;" v-else @click="handleBind(item.value)">{{ t('wallet.not_bound_click_to_bind') }}&nbsp;></text>
 						</view>
 						
 					</label>
@@ -35,16 +35,16 @@
 				<uni-forms :model="state.model" :rules="state.rules" validateTrigger="bind" labelPosition="left" border
 					class="form-box" labelWidth='200' ref="FormRef">
 					<view class="bg-white ss-p-x-30">
-						<uni-forms-item name="quota" label="提现金额" :required="true">
+						<uni-forms-item name="quota" :label="t('wallet.withdrawal_amount')" :required="true">
 							<uni-easyinput v-model="state.outMoney" type="number"
-								placeholder="请输入金额" :inputBorder="false" :clearable="false"  />
+								:placeholder="t('wallet.enter_withdrawal_amount')" :inputBorder="false" :clearable="false"  />
 						</uni-forms-item>
-						<uni-forms-item name="quota" label="实到金额">
+						<uni-forms-item name="quota" :label="t('wallet.actual_amount_received')">
 							<view class="ss-flex ss-h-100">
 								{{commission}}
 							</view>
 						</uni-forms-item>
-						<uni-forms-item name="quota" label="消费分">
+						<uni-forms-item name="quota" :label="t('wallet.consumption_points')">
 							<view class="ss-flex ss-h-100">
 								{{consumption}}
 							</view>
@@ -60,11 +60,11 @@
 						placeholder="请输入金额"  />
 				</view> -->
 				<view class="ss-flex ss-row-center ss-col-center ss-m-t-30">
-					您当前可兑换金额:¥<text class="text-red">{{canUseMoney}}</text> 
-					<button class="ss-m-l-10 all-btn " @click="useAllPonints">全部</button>
+					{{ t('wallet.current_exchangeable_amount') }}<text class="text-red">{{canUseMoney}}</text> 
+					<button class="ss-m-l-10 all-btn " @click="useAllPonints">{{ t('common.all') }}</button>
 					
 				</view>
-				<view class="ss-flex ss-row-center ss-col-center ss-m-t-30 text-red text-center">备注:实际到账金额{{withdrawCommission}},消费分{{withdrawConsumption}}。<br>免提现手续费</view> 
+				<view class="ss-flex ss-row-center ss-col-center ss-m-t-30 text-red text-center">{{ t('wallet.note',{commission:withdrawCommission,consumption:withdrawConsumption}) }}</view> 
 			</view>
 			
 			
@@ -73,7 +73,7 @@
 			<view class="modal-footer ss-flex ss-row-center ss-col-center ss-m-t-80 ss-m-b-40 ss-flex-5">
 				<button class="ss-reset-button save-btn" @tap="submit"  :disabled="state.disabled" :class="{ 'disabled-btn': state.disabled  }"
 					>
-					确定
+					{{ t('common.confirm') }}
 				</button>
 			</view>
 		</view>
@@ -100,6 +100,7 @@
 	import PayWalletApi from '@/sheep/api/pay/wallet';
 	import WithdrawalApi from '@/sheep/api/distri/withdrawal';
 	import { showAuthModal, showShareModal } from '@/sheep/hooks/useModal';
+	import { t } from '@/locale'
 	const userWallet = computed(() => sheep.$store('user').userWallet);
 	const userInfo = computed(() => sheep.$store('user').userInfo);
 	const canUseMoney = computed(() => points2point(userWallet.value.integralDO.currentQuota));
@@ -144,16 +145,16 @@
 		},
 		outMethods: [
 			// {
-			// 	title: "提现到微信",
+			// 	title: t('wallet.withdraw_to_wechat'),
 			// 	value: '1'
 			// },
 			{
-				title: "提现到支付宝",
+				title: t('wallet.withdraw_to_alipay'),
 				value: '2',
 				account:''
 			},
 			{
-				title: "提现到银行卡",
+				title: t('wallet.withdraw_to_bank_card'),
 				value: '3',
 				account:''
 			}
@@ -193,19 +194,19 @@
 	}
 	const submit = async () => {
 		if (state.outMent === '') {
-			sheep.$helper.toast('请选择提现方式');
+			sheep.$helper.toast(t('wallet.please_select_withdrawal_method'));
 			return;
 		}
 		if (!state.outMoney) {
-			sheep.$helper.toast('请输入提现金额');
+			sheep.$helper.toast(t('wallet.enter_withdrawal_amount'));
 			return;
 		}
 		if (state.outMent === '2' && !userInfo.value.alipayAccount){
 			// 没绑定支付宝
 			uni.showModal({
-				title: '提示',
-				content: '未绑定支付宝账号',
-				confirmText:'去绑定',
+				title: t('setting.prompt'),
+				content: t('wallet.alipay_not_bound'),
+				confirmText:t('wallet.go_bind'),
 				success: async function(res) {
 					if (!res.confirm) {
 						return;
@@ -218,9 +219,9 @@
 		if (state.outMent === '3' && !userInfo.value.bankAccount){
 			// 没绑定银行卡
 			uni.showModal({
-				title: '提示',
-				content: '未绑定银行卡',
-				confirmText:'去绑定',
+				title: t('setting.prompt'),
+				content: t('wallet.bank_card_not_bound'),
+				confirmText:t('wallet.go_bind'),
 				success: async function(res) {
 					if (!res.confirm) {
 						return;
@@ -241,7 +242,7 @@
 		if(code === 0){
 			uni.showToast({
 				icon: 'success',
-				title: "申请成功",
+				title: t('wallet.application_successful'),
 			});
 			sheep.$router.redirect('/pages/user/wallet/withdrawalLog')
 			uni.$emit('createWithDrawComplete');

+ 6 - 6
pages/user/wallet/withdrawalLog.vue

@@ -1,6 +1,6 @@
 <template>
 	<!-- 提现记录 -->
-	<s-layout class="wallet-wrap" :bgStyle="{'backgroundColor':'#ffffff'}" title="提现记录" navbar="normal">
+	<s-layout class="wallet-wrap" :bgStyle="{'backgroundColor':'#ffffff'}" :title="t('wallet.withdrawal_records')" navbar="normal">
 		<view class="model-box ss-flex-col">
 			<scroll-view class="list-box" scroll-y="true" @touchmove.stop>
 				<view v-if="state.pagination.total > 0" style="padding: 20rpx;">
@@ -11,16 +11,16 @@
 							<view class="ss-flex ss-m-t-10"
 								style="flex-direction: column;align-items: flex-start;width: 100%;">
 								<view class="name" style="width: 100%;"> 
-									{{item.withdrawalType === 1 ? '微信' : item.withdrawalType === 2 ? '支付宝' : '银行卡'}}
+									{{item.withdrawalType === 1 ? t('wallet.wechat') : item.withdrawalType === 2 ? t('wallet.alipay') : t('wallet.bank_card')}}
 									({{item.withdrawalAccount}})
 									
 									<text  style="float: right;" class="color-red">
-										¥{{fen2yuan(item.amount) }} (消费分{{points2point(item.withdrawConsumption)}})
+										¥{{fen2yuan(item.amount) }} ({{t('wallet.consumption_points')+ points2point(item.withdrawConsumption)}})
 									</text>
 								</view>
 								<view class="time " style="width: 100%;">
 									{{sheep.$helper.timeFormat(item.createTime, 'yyyy-mm-dd hh:MM')}}
-									<text style="float: right;"	>{{item.status  ? item.status === 1 ? '已到账' : '提现失败' : '提现中'}}</text>
+									<text style="float: right;"	>{{item.status  ? item.status === 1 ? t('wallet.credited') : t('wallet.withdrawal_failed') : t('wallet.withdrawing')}}</text>
 									
 								</view>
 							</view>
@@ -29,7 +29,7 @@
 				</view>
 				<s-empty v-else text="暂无数据" paddingTop="200" icon="/static/data-empty.png" />
 				<uni-load-more v-if="state.pagination.total > 0" :status="state.loadStatus" :content-text="{
-					  contentdown: '点击加载更多',
+					  contentdown: t('common.click_to_load_more'),
 					}" @tap="onLoadMore(true)" @scrolltolower="onLoadMore(true)" />
 			</scroll-view>
 		</view>
@@ -57,7 +57,7 @@
 		resetPagination
 	} from '@/sheep/util';
 	import WithdrawalApi from '@/sheep/api/distri/withdrawal';
-
+	import { t } from '@/locale'
 	const userWallet = computed(() => sheep.$store('user').userWallet);
 	const statusBarHeight = sheep.$platform.device.statusBarHeight * 2;
 	const userInfo = computed(() => sheep.$store('user').userInfo);

+ 4 - 1
sheep/api/infra/file.js

@@ -2,6 +2,9 @@ import {
 	baseUrl,
 	apiPath
 } from '@/sheep/config';
+import {
+	t
+} from '@/locale';
 import request from '@/sheep/request';
 const FileApi = {
 	// 上传文件
@@ -9,7 +12,7 @@ const FileApi = {
 		// TODO 非繁人:访问令牌的接入;
 		const token = uni.getStorageSync('token');
 		uni.showLoading({
-			title: '上传中',
+			title: t('common.uploading'),
 		});
 		return new Promise((resolve, reject) => {
 			uni.uploadFile({

+ 3 - 3
sheep/api/member/address.js

@@ -1,5 +1,5 @@
 import request from '@/sheep/request';
-
+import { t } from '@/locale';
 const AddressApi = {
   // 获得用户收件地址列表
   getAddressList: (addressType = 1) => {
@@ -17,7 +17,7 @@ const AddressApi = {
       data,
       custom: {
         showSuccess: true,
-        successMsg: '保存成功'
+        successMsg: t('common.save_success')
       },
     });
   },
@@ -29,7 +29,7 @@ const AddressApi = {
       data,
       custom: {
         showSuccess: true,
-        successMsg: '更新成功'
+        successMsg: t('common.update_success')
       },
     });
   },

+ 19 - 17
sheep/api/member/auth.js

@@ -1,5 +1,7 @@
 import request from '@/sheep/request';
-
+import {
+	t
+} from '@/locale';
 const AuthUtil = {
 	// 使用手机 + 密码登录
 	login: (data) => {
@@ -9,8 +11,8 @@ const AuthUtil = {
 			data,
 			custom: {
 				showSuccess: true,
-				loadingMsg: '登录中',
-				successMsg: '登录成功',
+				loadingMsg: t('common.logging_in'),
+				successMsg: t('common.login_success'),
 			},
 		});
 	},
@@ -22,8 +24,8 @@ const AuthUtil = {
 			data,
 			custom: {
 				showSuccess: true,
-				loadingMsg: '登录中',
-				successMsg: '登录成功',
+				loadingMsg: t('common.logging_in'),
+				successMsg: t('common.login_success'),
 			},
 		});
 	},
@@ -36,8 +38,8 @@ const AuthUtil = {
 			data,
 			custom: {
 				showSuccess: true,
-				loadingMsg: '注册中',
-				successMsg: '注册成功',
+				loadingMsg: t('common.registering'),
+				successMsg: t('common.register_success'),
 			},
 		});
 	},
@@ -65,9 +67,9 @@ const AuthUtil = {
 				scene,
 			},
 			custom: {
-				loadingMsg: '发送中',
+				loadingMsg: t('common.sending'),
 				showSuccess: true,
-				successMsg: '发送成功',
+				successMsg: t('common.send_success'),
 			},
 		});
 	},
@@ -92,8 +94,8 @@ const AuthUtil = {
 			data,
 			custom: {
 				showSuccess: true,
-				loadingMsg: '登录中',
-				successMsg: '登录成功',
+				loadingMsg: t('common.logging_in'),
+				successMsg: t('common.login_success'),
 			},
 		});
 	},
@@ -105,8 +107,8 @@ const AuthUtil = {
 			data,
 			custom: {
 				showSuccess: true,
-				loadingMsg: '注册中',
-				successMsg: '注册成功',
+				loadingMsg: t('common.registering'),
+				successMsg: t('common.register_success'),
 			},
 		});
 	},
@@ -153,7 +155,7 @@ const AuthUtil = {
 			},
 			custom: {
 				showSuccess: true,
-				loadingMsg: '登陆中',
+				loadingMsg: t('common.logging_in'),
 			},
 		});
 	},
@@ -169,7 +171,7 @@ const AuthUtil = {
 			},
 			custom: {
 				showSuccess: true,
-				loadingMsg: '登陆中',
+				loadingMsg: t('common.logging_in'),
 			},
 		});
 	},
@@ -185,8 +187,8 @@ const AuthUtil = {
 			},
 			custom: {
 				showSuccess: true,
-				loadingMsg: '登陆中',
-				successMsg: '登录成功',
+				loadingMsg: t('common.logging_in'),
+				successMsg: t('common.login_success'),
 			},
 		});
 	},

+ 7 - 5
sheep/api/member/social.js

@@ -1,5 +1,7 @@
 import request from '@/sheep/request';
-
+import {
+	t
+} from '@/locale';
 const SocialApi = {
   // 获得社交用户
   getSocialUser: (type) => {
@@ -27,8 +29,8 @@ const SocialApi = {
       custom: {
         custom: {
           showSuccess: true,
-          loadingMsg: '绑定中',
-          successMsg: '绑定成功',
+          loadingMsg: t('common.binding'),
+          successMsg: t('common.bind_success'),
         },
       },
     });
@@ -44,8 +46,8 @@ const SocialApi = {
       },
       custom: {
         showLoading: false,
-        loadingMsg: '解除绑定',
-        successMsg: '解绑成功',
+        loadingMsg: t('common.unbind'),
+        successMsg: t('common.unbind_success'),
       },
     });
   },

+ 14 - 12
sheep/api/member/user.js

@@ -1,5 +1,7 @@
 import request from '@/sheep/request';
-
+import {
+	t
+} from '@/locale';
 const UserApi = {
   // 获得基本信息
   getUserInfo: () => {
@@ -22,7 +24,7 @@ const UserApi = {
       custom: {
         auth: true,
         showSuccess: true,
-        successMsg: '更新成功'
+        successMsg: t('common.update_success')
       },
     });
   },
@@ -34,7 +36,7 @@ const UserApi = {
       custom: {
         auth: true,
         showSuccess: true,
-        successMsg: '更新成功'
+        successMsg: t('common.update_success')
       },
     });
   },
@@ -46,7 +48,7 @@ const UserApi = {
       custom: {
         auth: true,
         showSuccess: true,
-        successMsg: '更新成功'
+        successMsg: t('common.update_success')
       },
     });
   },
@@ -57,9 +59,9 @@ const UserApi = {
       method: 'PUT',
       data,
       custom: {
-        loadingMsg: '验证中',
+        loadingMsg: t('common.verifying'),
         showSuccess: true,
-        successMsg: '修改成功'
+        successMsg: t('account.modification_successful')
       },
     });
   },
@@ -73,8 +75,8 @@ const UserApi = {
       },
       custom: {
         showSuccess: true,
-        loadingMsg: '获取中',
-        successMsg: '修改成功'
+        loadingMsg: t('common.fetching'),
+        successMsg: t('account.modification_successful')
       },
     });
   },
@@ -85,9 +87,9 @@ const UserApi = {
       method: 'PUT',
       data,
       custom: {
-        loadingMsg: '验证中',
+        loadingMsg: t('common.verifying'),
         showSuccess: true,
-        successMsg: '修改成功'
+        successMsg: t('account.modification_successful')
       },
     });
   },
@@ -98,9 +100,9 @@ const UserApi = {
       method: 'PUT',
       data,
       custom: {
-        loadingMsg: '验证中',
+        loadingMsg: t('common.verifying'),
         showSuccess: true,
-        successMsg: '修改成功'
+        successMsg: t('account.modification_successful')
       }
     });
   },

+ 4 - 2
sheep/api/migration/third.js

@@ -1,6 +1,8 @@
 import request from '@/sheep/request';
 import { baseUrl, apiPath } from '@/sheep/config';
-
+import {
+	t
+} from '@/locale';
 export default {
   // 微信相关
   wechat: {
@@ -37,7 +39,7 @@ export default {
         data,
         custom: {
           showSuccess: true,
-          loadingMsg: '登陆中',
+          loadingMsg: t('common.logging_in'),
         },
       }),
   },

+ 5 - 3
sheep/api/product/favorite.js

@@ -1,5 +1,7 @@
 import request from '@/sheep/request';
-
+import {
+	t
+} from '@/locale';
 const FavoriteApi = {
   // 获得商品收藏分页
   getFavoritePage: (data) => {
@@ -30,7 +32,7 @@ const FavoriteApi = {
       custom: {
         auth: true,
         showSuccess: true,
-        successMsg: '收藏成功',
+        successMsg: t('common.collect_success'),
       },
     });
   },
@@ -55,7 +57,7 @@ const FavoriteApi = {
       custom: {
         auth: true,
         showSuccess: true,
-        successMsg: '取消成功',
+        successMsg: t('common.cancel_success'),
       },
     });
   },

+ 5 - 3
sheep/api/product/history.js

@@ -1,5 +1,7 @@
 import request from '@/sheep/request';
-
+import {
+	t
+} from '@/locale';
 const SpuHistoryApi = {
   // 删除商品浏览记录
   deleteBrowseHistory: (spuIds) => {
@@ -9,7 +11,7 @@ const SpuHistoryApi = {
       data: { spuIds },
       custom: {
         showSuccess: true,
-        successMsg: '删除成功',
+        successMsg: t('common.delete_success'),
       },
     });
   },
@@ -20,7 +22,7 @@ const SpuHistoryApi = {
       method: 'DELETE',
       custom: {
         showSuccess: true,
-        successMsg: '清空成功',
+        successMsg: t('common.clear_success'),
       },
     });
   },

+ 5 - 3
sheep/api/promotion/coupon.js

@@ -1,5 +1,7 @@
 import request from '@/sheep/request';
-
+import {
+	t
+} from '@/locale';
 const CouponApi = {
   // 获得优惠劵模板列表
   getCouponTemplateListByIds: (ids) => {
@@ -54,9 +56,9 @@ const CouponApi = {
       custom: {
         auth: true,
         showLoading: true,
-        loadingMsg: '领取中',
+        loadingMsg: t('common.claiming'),
         showSuccess: true,
-        successMsg: '领取成功',
+        successMsg: t('common.claim_success'),
       },
     });
   },

+ 5 - 3
sheep/api/sale/sale.js

@@ -1,5 +1,7 @@
 import request from '@/sheep/request';
-
+import {
+	t
+} from '@/locale';
 const SaleApi = {
   // 申请成为商户
   createMerchant: (data) => {
@@ -9,7 +11,7 @@ const SaleApi = {
       data,
       custom: {
         showSuccess: true,
-        successMsg: '申请成功'
+        successMsg: t('common.apply_success')
       },
     });
   },
@@ -28,7 +30,7 @@ const SaleApi = {
       data,
       custom: {
         showSuccess: true,
-        successMsg: '变动成功'
+        successMsg: t('common.change_success')
       },
     });
   },

+ 4 - 2
sheep/api/trade/cart.js

@@ -1,5 +1,7 @@
 import request from '@/sheep/request';
-
+import {
+	t
+} from '@/locale';
 const CartApi = {
   addCart: (data) => {
     return request({
@@ -8,7 +10,7 @@ const CartApi = {
       data: data,
       custom: {
         showSuccess: true,
-        successMsg: '已添加到购物车~',
+        successMsg: t('common.added_to_cart'),
       }
     });
   },

+ 2 - 2
sheep/components/s-address-item/s-address-item.vue

@@ -11,7 +11,7 @@
           size="small"
           custom-style="background-color: var(--ui-BG-Main); border-color: var(--ui-BG-Main); color: #fff;"
           v-if="props.item.defaultStatus"
-          text="默认"
+          :text="$t('common.default')"
         />
         {{ props.item.areaName }}
       </view>
@@ -23,7 +23,7 @@
       </view>
     </view>
     <view v-else>
-      <view class="address-text ss-m-b-10">请选择收货地址</view>
+      <view class="address-text ss-m-b-10">{{$t('address.select_shipping_address')}}</view>
     </view>
     <slot>
       <button class="ss-reset-button edit-btn" @tap.stop="onEdit">

+ 8 - 8
sheep/components/s-auth-modal/components/account-login.vue

@@ -3,14 +3,14 @@
 	<view>
 		<!-- 表单项 -->
 		<uni-forms ref="accountLoginRef" v-model="state.model" :rules="state.rules" validateTrigger="bind"
-			labelWidth="140" labelAlign="center" class="loginUniForm">
-			<uni-forms-item name="username" label="用户名" class="loginUniFormItem">
-				<uni-easyinput placeholder="请输入用户名" v-model="state.model.username" :inputBorder="false">
+			labelWidth="160" labelAlign="center" class="loginUniForm">
+			<uni-forms-item name="username" :label="t('account.username')" class="loginUniFormItem">
+				<uni-easyinput :placeholder="t('account.enter_username')" v-model="state.model.username" :inputBorder="false">
 				</uni-easyinput>
 			</uni-forms-item>
 
-			<uni-forms-item name="password" label="密码" class="loginUniFormItem">
-				<uni-easyinput type="password" placeholder="请输入密码" v-model="state.model.password" :inputBorder="false">
+			<uni-forms-item name="password" :label="t('account.password')" class="loginUniFormItem">
+				<uni-easyinput type="password" :placeholder="t('account.enter_password')" v-model="state.model.password" :inputBorder="false">
 				</uni-easyinput>
 			</uni-forms-item>
 		</uni-forms>
@@ -18,7 +18,7 @@
 			<!-- <button class="ss-reset-button forgot-btn" @tap="showAuthModal('resetPassword')">
 				忘记密码
 			</button> -->
-			<button class="ss-reset-button login-btn-start" @tap="accountLoginSubmit">登录</button>
+			<button class="ss-reset-button login-btn-start" @tap="accountLoginSubmit">{{ t('account.login') }}</button>
 		</view>
 	</view>
 </template>
@@ -40,7 +40,7 @@
 		closeAuthModal
 	} from '@/sheep/hooks/useModal';
 	import AuthUtil from '@/sheep/api/member/auth';
-
+	import { t } from '@/locale'
 	const accountLoginRef = ref(null);
 
 	const emits = defineEmits(['onConfirm']);
@@ -76,7 +76,7 @@
 		// 同意协议
 		if (!props.agreeStatus) {
 			emits('onConfirm', true)
-			sheep.$helper.toast('请勾选同意');
+			sheep.$helper.toast( t('account.please_agree'));
 			return;
 		}
 		// 提交数据

+ 9 - 8
sheep/components/s-auth-modal/components/alipay-account.vue

@@ -4,19 +4,19 @@
 		<!-- 标题栏 -->
 		<view class="head-box ss-m-b-60">
 			<view class="head-title ss-m-b-20">
-				{{ userInfo.alipayName && userInfo.alipayAccount ? '更换支付宝账号' : '绑定支付宝账号' }}
+				{{ userInfo.alipayName && userInfo.alipayAccount ? t('account.change_alipay_account') : t('account.bind_alipay_account') }}
 			</view>
-			<view class="head-subtitle">请绑定已实名认证的支付宝账号</view>
+			<view class="head-subtitle">{{ t('account.bind_realname_alipay') }}</view>
 		</view>
 		<!-- 表单项 -->
 		<uni-forms ref="alipayAccountRef" v-model="state.model" :rules="state.rules" validateTrigger="bind"
 			labelWidth="140" labelAlign="center" class="loginUniForm">
-			<uni-forms-item label="名称" class="loginUniFormItem">
-				<uni-easyinput placeholder="请输入名称" v-model="state.model.alipayName" :inputBorder="false">
+			<uni-forms-item :label="t('account.name')" class="loginUniFormItem">
+				<uni-easyinput :placeholder="t('account.enter_name')" v-model="state.model.alipayName" :inputBorder="false">
 				</uni-easyinput>
 			</uni-forms-item>
-			<uni-forms-item name="alipayAccount"  label="账号" class="loginUniFormItem">
-				<uni-easyinput placeholder="请输入账号" v-model="state.model.alipayAccount" :inputBorder="false">
+			<uni-forms-item name="alipayAccount"  :label="t('account.account')" class="loginUniFormItem">
+				<uni-easyinput :placeholder="t('account.enter_account')" v-model="state.model.alipayAccount" :inputBorder="false">
 				</uni-easyinput>
 			</uni-forms-item>
 		</uni-forms>
@@ -24,7 +24,7 @@
 			<!-- <button class="ss-reset-button forgot-btn" @tap="showAuthModal('resetPassword')">
 				忘记密码
 			</button> -->
-			<button class="ss-reset-button login-btn-start" @tap="submit">确定</button>
+			<button class="ss-reset-button login-btn-start" @tap="submit">{{ t('common.confirm') }}</button>
 		</view>
 	</view>
 </template>
@@ -49,6 +49,7 @@
 	import {
 		onLoad
 	} from '@dcloudio/uni-app';
+	import { t } from '@/locale'
 	const userInfo = computed(() => sheep.$store('user').userInfo);
 	const alipayAccountRef = ref(null);
 
@@ -106,7 +107,7 @@
 		if (code === 0) {
 			uni.showToast({
 				icon: 'success',
-				title: "修改成功",
+				title: t('account.change_password'),
 			});
 			closeAuthModal();
 			uni.$emit('alipayAccountChangeComplete');

+ 10 - 9
sheep/components/s-auth-modal/components/bank-account.vue

@@ -4,25 +4,25 @@
 		<!-- 标题栏 -->
 		<view class="head-box ss-m-b-60">
 			<view class="head-title ss-m-b-20">
-				{{ userInfo.bankName && userInfo.accountName && userInfo.bankAccount ? '更换银行卡' : '绑定银行卡' }}
+				{{ userInfo.bankName && userInfo.accountName && userInfo.bankAccount ? t('account.change_bank_card') : t('account.bind_bank_card') }}
 			</view>
 			<!-- <view class="head-subtitle">请绑定已实名认证的支付宝开户行</view> -->
 		</view>
 		<!-- 表单项 -->
 		<uni-forms ref="alipayAccountRef" v-model="state.model" :rules="state.rules" validateTrigger="bind"
 			labelWidth="160" labelAlign="left" class="loginUniForm" >
-			<uni-forms-item  label="开户行" class="loginUniFormItem">
-				<uni-easyinput placeholder="例:xx银行股份有限公司xx分行xx支行" v-model="state.model.bankName" :inputBorder="false">
+			<uni-forms-item  :label="t('account.bank_branch')" class="loginUniFormItem">
+				<uni-easyinput :placeholder="t('account.bank_branch_example')" v-model="state.model.bankName" :inputBorder="false">
 				</uni-easyinput>
 			</uni-forms-item>
 			
-			<uni-forms-item label="开户名" class="loginUniFormItem">
-				<uni-easyinput placeholder="个人姓名" v-model="state.model.accountName" :inputBorder="false">
+			<uni-forms-item :label="t('account.account_holder')" class="loginUniFormItem">
+				<uni-easyinput :placeholder="t('account.account_holder_name')" v-model="state.model.accountName" :inputBorder="false">
 				</uni-easyinput>
 			</uni-forms-item>
 			
-			<uni-forms-item  label="银行卡账号" name="bankCode"  class="loginUniFormItem">
-				<uni-easyinput placeholder="银行卡账号" v-model="state.model.bankAccount" :inputBorder="false">
+			<uni-forms-item  :label="t('account.bank_account_number')" name="bankCode"  class="loginUniFormItem">
+				<uni-easyinput :placeholder="t('account.bank_account_number')" v-model="state.model.bankAccount" :inputBorder="false">
 				</uni-easyinput>
 			</uni-forms-item>
 		</uni-forms>
@@ -30,7 +30,7 @@
 			<!-- <button class="ss-reset-button forgot-btn" @tap="showAuthModal('resetPassword')">
 				忘记密码
 			</button> -->
-			<button class="ss-reset-button login-btn-start" @tap="submit">确定</button>
+			<button class="ss-reset-button login-btn-start" @tap="submit">{{ t('common.confirm') }}</button>
 		</view>
 	</view>
 </template>
@@ -55,6 +55,7 @@
 	import {
 		onLoad
 	} from '@dcloudio/uni-app';
+	import { t } from '@/locale'
 	const userInfo = computed(() => sheep.$store('user').userInfo);
 	const alipayAccountRef = ref(null);
 
@@ -114,7 +115,7 @@
 		if (code === 0) {
 			uni.showToast({
 				icon: 'success',
-				title: "修改成功",
+				title: t('account.change_password'),
 			});
 			closeAuthModal();
 			uni.$emit('bankAccountChangeComplete');

+ 14 - 13
sheep/components/s-auth-modal/components/change-mobile.vue

@@ -4,16 +4,16 @@
 		<!-- 标题栏 -->
 		<view class="head-box ss-m-b-60">
 			<view class="head-title ss-m-b-20">
-				{{ userInfo.mobile ? '更换手机号' : '绑定手机号' }}
+				{{ userInfo.mobile ? t('account.change_phone_number') : t('account.bind_phone_number') }}
 			</view>
-			<view class="head-subtitle">为了您的账号安全,请使用本人手机号码</view>
+			<view class="head-subtitle">{{ t('account.security_notice') }}</view>
 		</view>
 
 		<!-- 表单项 -->
 		<uni-forms ref="changeMobileRef" v-model="state.model" :rules="state.rules" validateTrigger="bind"
 			labelWidth="140" labelAlign="center" v-if="!step">
-			<uni-forms-item name="mobile" label="原手机号">
-				<uni-easyinput placeholder="请输入原手机号" v-model="state.model.oldMobile" :inputBorder="false" type="number">
+			<uni-forms-item name="mobile" :label="t('account.old_phone_number')">
+				<uni-easyinput :placeholder="t('account.enter_old_phone_number')" v-model="state.model.oldMobile" :inputBorder="false" type="number">
 					<template v-slot:right>
 						<button class="ss-reset-button code-btn-start" :disabled="state.isMobileEnd"
 							:class="{ 'code-btn-end': state.isMobileEnd }"
@@ -24,19 +24,19 @@
 				</uni-easyinput>
 			</uni-forms-item>
 
-			<uni-forms-item name="code" label="验证码">
-				<uni-easyinput placeholder="请输入验证码" v-model="state.model.oldCode" :inputBorder="false" type="number"
+			<uni-forms-item name="code" :label="t('account.verification_code')">
+				<uni-easyinput :placeholder="t('account.enter_verification_code')" v-model="state.model.oldCode" :inputBorder="false" type="number"
 					maxlength="4">
 				</uni-easyinput>
 			</uni-forms-item>
 			<button class="ss-reset-button login-btn-start" @tap="nextStep">
-				下一步
+				{{t('common.next')}}
 			</button>
 		</uni-forms>
 		<uni-forms ref="changeMobileRef" v-model="state.model" :rules="state.rules" validateTrigger="bind"
 			labelWidth="140" labelAlign="center" v-else>
-			<uni-forms-item name="mobile" label="新手机号">
-				<uni-easyinput placeholder="请输入新手机号" v-model="state.model.mobile" :inputBorder="false" type="number">
+			<uni-forms-item name="mobile" :label="t('account.new_phone_number')">
+				<uni-easyinput :placeholder="t('account.enter_new_phone_number')" v-model="state.model.mobile" :inputBorder="false" type="number">
 					<template v-slot:right>
 						<button class="ss-reset-button code-btn-start" :disabled="state.isMobileEnd"
 							:class="{ 'code-btn-end': state.isMobileEnd }"
@@ -47,13 +47,13 @@
 				</uni-easyinput>
 			</uni-forms-item>
 		
-			<uni-forms-item name="code" label="验证码">
-				<uni-easyinput placeholder="请输入验证码" v-model="state.model.code" :inputBorder="false" type="number"
+			<uni-forms-item name="code" :label="t('account.verification_code')">
+				<uni-easyinput :placeholder="t('account.enter_verification_code')" v-model="state.model.code" :inputBorder="false" type="number"
 					maxlength="4">
 				</uni-easyinput>
 			</uni-forms-item>
 			<button class="ss-reset-button login-btn-start" @tap="changeMobileSubmit">
-				确定
+				{{ t('common.confirm') }}
 			</button>
 		</uni-forms>
 		<!-- 微信独有:读取手机号 -->
@@ -87,6 +87,7 @@
 	} from '@/sheep/hooks/useModal';
 	import UserApi from '@/sheep/api/member/user';
 	import AuthUtil from '@/sheep/api/member/auth';
+	import { t } from '@/locale'
 	const step = ref(0);
 	const changeMobileRef = ref(null);
 	const userInfo = computed(() => sheep.$store('user').userInfo);
@@ -143,7 +144,7 @@
 		}
 		uni.showToast({
 			icon: 'success',
-			title: "修改成功,请重新登录",
+			title: t('account.login_again'),
 		});
 		// 成功后,只需要1秒后推出登录关闭弹窗
 		setTimeout(function(){

+ 11 - 12
sheep/components/s-auth-modal/components/change-password.vue

@@ -3,15 +3,15 @@
 	<view>
 		<!-- 标题栏 -->
 		<view class="head-box ss-m-b-60">
-			<view class="head-title ss-m-b-20">修改密码</view>
-			<view class="head-subtitle">如密码丢失或未设置,请点击忘记密码重新设置</view>
+			<view class="head-title ss-m-b-20">{{ t('account.change_password') }}</view>
+			<!-- <view class="head-subtitle">如密码丢失或未设置,请点击忘记密码重新设置</view> -->
 		</view>
 
 		<!-- 表单项 -->
 		<uni-forms ref="changePasswordRef" v-model="state.model" :rules="state.rules" validateTrigger="bind"
 			labelWidth="140" labelAlign="center">
-			<uni-forms-item name="code" label="验证码">
-				<uni-easyinput placeholder="请输入验证码" v-model="state.model.code" type="number" maxlength="4"
+			<uni-forms-item name="code" :label="t('account.verification_code')">
+				<uni-easyinput :placeholder="t('account.enter_verification_code')" v-model="state.model.code" type="number" maxlength="4"
 					:inputBorder="false">
 					<template v-slot:right>
 						<button class="ss-reset-button code-btn code-btn-start" :disabled="state.isMobileEnd"
@@ -22,11 +22,11 @@
 				</uni-easyinput>
 			</uni-forms-item>
 
-			<uni-forms-item name="reNewPassword" label="密码">
-				<uni-easyinput type="password" placeholder="请输入密码" v-model="state.model.password" :inputBorder="false">
+			<uni-forms-item name="reNewPassword" :label="t('account.password')">
+				<uni-easyinput type="password" :placeholder="t('account.enter_password')" v-model="state.model.password" :inputBorder="false">
 					<template v-slot:right>
 						<button class="ss-reset-button login-btn-start" @tap="changePasswordSubmit">
-							确认
+							{{t('common.confirm')}}
 						</button>
 					</template>
 				</uni-easyinput>
@@ -34,7 +34,7 @@
 		</uni-forms>
 
 		<button class="ss-reset-button type-btn" @tap="closeAuthModal">
-			取消修改
+			{{t('account.cancel_change')}}
 		</button>
 	</view>
 </template>
@@ -56,7 +56,7 @@
 		getSmsTimer
 	} from '@/sheep/hooks/useModal';
 	import UserApi from '@/sheep/api/member/user';
-
+	import { t } from '@/locale';
 	const changePasswordRef = ref(null);
 
 	// 数据
@@ -78,10 +78,9 @@
 	async function changePasswordSubmit() {
 
 		if (!/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]+\S{5,12}$/.test(state.model.password)) {
-			console.log(123)
 			uni.showToast({
 				icon: 'error',
-				title: "需包含字母和数字,长度在6-12之间",
+				title: t('account.password_requirements'),
 			});
 		}
 		// 参数校验
@@ -102,7 +101,7 @@
 		}
 		uni.showToast({
 			icon: 'success',
-			title: "修改成功",
+			title: t('account.modification_successful'),
 		});
 		
 		// 成功后,只需要1秒后推出登录关闭弹窗

+ 10 - 10
sheep/components/s-auth-modal/components/mp-authorization.vue

@@ -4,9 +4,9 @@
     <!-- 标题栏 -->
     <view class="head-box ss-m-b-60 ss-flex-col">
       <view class="ss-flex ss-m-b-20">
-        <view class="head-title ss-m-r-40 head-title-animation">授权信息</view>
+        <view class="head-title ss-m-r-40 head-title-animation">{{ t('account.authorization_info')}}</view>
       </view>
-      <view class="head-subtitle">完善您的头像、昵称、手机号</view>
+      <view class="head-subtitle">{{ t('account.complete_profile') }}</view>
     </view>
 
     <!-- 表单项 -->
@@ -19,7 +19,7 @@
       labelAlign="center"
     >
       <!-- 获取头像昵称:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/userProfile.html -->
-      <uni-forms-item name="avatar" label="头像">
+      <uni-forms-item name="avatar" :label="t('account.avatar')">
         <button
           class="ss-reset-button avatar-btn"
           open-type="chooseAvatar"
@@ -34,16 +34,16 @@
           <text class="cicon-forward" />
         </button>
       </uni-forms-item>
-      <uni-forms-item name="nickname" label="昵称">
+      <uni-forms-item name="nickname" :label="t('account.nickname')">
         <uni-easyinput
           type="nickname"
-          placeholder="请输入昵称"
+          :placeholder="t('account.enter_nickname')"
           v-model="state.model.nickname"
           :inputBorder="false"
         />
       </uni-forms-item>
       <view class="foot-box">
-        <button class="ss-reset-button authorization-btn" @tap="onConfirm"> 确认授权 </button>
+        <button class="ss-reset-button authorization-btn" @tap="onConfirm"> {{ t('account.confirm_authorization') }} </button>
       </view>
     </uni-forms>
   </view>
@@ -55,7 +55,7 @@
   import { closeAuthModal } from '@/sheep/hooks/useModal';
   import FileApi from '@/sheep/api/infra/file';
   import UserApi from '@/sheep/api/member/user';
-
+  import { t } from '@/locale'
   const props = defineProps({
     agreeStatus: {
       type: Boolean,
@@ -100,11 +100,11 @@
     const { model } = state;
     const { nickname, avatar } = model;
     if (!nickname) {
-      sheep.$helper.toast('请输入昵称');
+      sheep.$helper.toast(t('account.select_avatar'));
       return;
     }
     if (!avatar) {
-      sheep.$helper.toast('请选择头像');
+      sheep.$helper.toast(t('account.enter_nickname'));
       return;
     }
     // 发起更新
@@ -114,7 +114,7 @@
     });
     // 更新成功
     if (code === 0) {
-      sheep.$helper.toast('授权成功');
+      sheep.$helper.toast(t('account.authorization_successful'));
       await sheep.$store('user').getInfo();
       closeAuthModal();
     }

+ 7 - 7
sheep/components/s-auth-modal/components/officialAccountFirstLogin.vue

@@ -4,15 +4,15 @@
 		<view class="head-box ">
 			<view class="ss-flex ss-m-b-20">
 				<view class="isActive head-title">
-					您首次登录,请输入手机号验证
+					{{ t('account.first_time_login') }}
 				</view>
 			</view>
 		</view>
 		<!-- 表单项 -->
 		<uni-forms ref="smsLoginRef" v-model="state.model" :rules="state.rules" validateTrigger="bind" labelWidth="140"
 			labelAlign="center" class="loginUniForm">
-			<uni-forms-item name="mobile" label="手机号" class="loginUniFormItem">
-				<uni-easyinput placeholder="请输入手机号" v-model="state.model.mobile" :inputBorder="false" type="number">
+			<uni-forms-item name="mobile" :label="t('account.phone_number')" class="loginUniFormItem">
+				<uni-easyinput :placeholder="t('account.enter_phone_number')" v-model="state.model.mobile" :inputBorder="false" type="number">
 					<template v-slot:right>
 						<button class="ss-reset-button code-btn code-btn-start" :disabled="state.isMobileEnd"
 							:class="{ 'code-btn-end': state.isMobileEnd }"
@@ -23,14 +23,14 @@
 				</uni-easyinput>
 			</uni-forms-item>
 
-			<uni-forms-item name="code" label="验证码" class="loginUniFormItem">
-				<uni-easyinput placeholder="请输入验证码" v-model="state.model.code" :inputBorder="false" type="number"
+			<uni-forms-item name="code" :label="t('account.verification_code')" class="loginUniFormItem">
+				<uni-easyinput :placeholder="t('account.enter_verification_code')" v-model="state.model.code" :inputBorder="false" type="number"
 					maxlength="4">
 				</uni-easyinput>
 			</uni-forms-item>
 		</uni-forms>
 		<view style="display: flex;justify-content: space-between;margin-top: 20rpx;">
-			<button class="ss-reset-button login-btn-start" @tap="OfficialEnterLogin"> 继续登录 </button>
+			<button class="ss-reset-button login-btn-start" @tap="OfficialEnterLogin"> {{ t('account.continue_login') }} </button>
 		</view>
 	</view>
 </template>
@@ -54,7 +54,7 @@
 		getSmsTimer
 	} from '@/sheep/hooks/useModal';
 	import AuthUtil from '@/sheep/api/member/auth';
-
+	import { t } from '@/locale'
 	const smsLoginRef = ref(null);
 
 	const emits = defineEmits(['onConfirm']);

+ 5 - 5
sheep/components/s-auth-modal/components/phone-international-input.vue

@@ -6,7 +6,7 @@
 			<image src="@/static/icon/select-icon.png" style="width: 20rpx;height: 20rpx;" />
 		</view>
 	</picker>
-	<uni-easyinput placeholder="请输入手机号" v-model="state.model.mobile"  @input="verifyMobile" :inputBorder="false" type="number" 	style="float: left;width: calc(100% - 110rpx);">
+	<uni-easyinput :placeholder="t('account.phone_number')" v-model="state.model.mobile"  @input="verifyMobile" :inputBorder="false" type="number" 	style="float: left;width: calc(100% - 110rpx);">
 		<template v-slot:right>
 			<button class="ss-reset-button code-btn code-btn-start" :disabled="!verifyUsername || selectedCode != 86"
 				:class="{ 'disabled': !verifyUsername || selectedCode != 86}" @tap="getSmsCode('smsLogin', state.model.mobile)">
@@ -35,7 +35,7 @@
 	import countryData from '@/sheep/libs/country.json';
 	import {parsePhoneNumberFromString,AsYouType  } from 'libphonenumber-js';
 	import parseMobile from 'libphonenumber-js/mobile'
-
+	import { t } from '@/locale'
 	const country = ref(countryData);
 	const selectedCode = ref('');
 	const selectedCountryCode = ref('');
@@ -70,14 +70,14 @@
 		// console.log(e.detail.value)
 		const phone = e;
 		if(phone == ''){
-			emits('input',phone,'请输入手机号')
+			emits('input',phone,t('account.phone_number'))
 		} else {
 			try{
 				const phoneParseMobile = parseMobile(phone, selectedCountryCode.value);
 				if(phoneParseMobile.isValid()){
 					emits('input',phone,'')
 				}else{
-					emits('input',phone,'手机号码格式不正确')
+					emits('input',phone,t('account.incorrect_phone_format'))
 				}
 			}catch(e){
 				// console.log(e)
@@ -86,7 +86,7 @@
 	}
 	// 账号注册数据
 	const state = reactive({
-		codeText: '获取验证码',
+		codeText: t('account.get_verification_code'),
 		model: {
 			mobile: '', // 手机号
 		}

+ 11 - 9
sheep/components/s-auth-modal/components/register.vue

@@ -1,28 +1,29 @@
 <!-- 短信注册  -->
 <template>
 	<view>
+		
 		<!-- 表单项 -->
 		<uni-forms ref="smsLoginRef" v-model="state.model" :rules="state.rules" validateTrigger="bind" labelWidth="140"
 			labelAlign="center" class="loginUniForm">
-			<uni-forms-item name="username" label="用户名" class="loginUniFormItem" :error-message="state.usernameErrorMsg">
-				<uni-easyinput placeholder="请输入用户名" v-model="state.model.username" :inputBorder="false" :clearable="false" @blur="verifyUsername">
+			<uni-forms-item name="username" :label="t('account.username')" class="loginUniFormItem" :error-message="state.usernameErrorMsg">
+				<uni-easyinput :placeholder="t('account.enter_username')" v-model="state.model.username" :inputBorder="false" :clearable="false" @blur="verifyUsername">
 				<template v-slot:right>
 					<view v-if="!state.verifyUsername" class="icon"><image style :src="sheep.$url.static('/static/images/shibai.png')" /></view>
 					<view v-else class="icon"> <image :src="sheep.$url.static('/static/images/chenggong.png')" /></view>
 				</template>
 				</uni-easyinput>
 			</uni-forms-item>
-			<uni-forms-item name="password" label="密码" class="loginUniFormItem">
-				<uni-easyinput type="password" placeholder="请输入密码" v-model="state.model.password" :inputBorder="false">
+			<uni-forms-item name="password" :label="t('account.password')" class="loginUniFormItem">
+				<uni-easyinput type="password" :placeholder="t('account.enter_password')" v-model="state.model.password" :inputBorder="false">
 				</uni-easyinput>
 			</uni-forms-item>
 			
-			<uni-forms-item name="mobile" label="手机号" class="mobile loginUniFormItem ss-p-t-10" :error-message="state.mobileErrorMsg">
+			<uni-forms-item name="mobile" :label="t('account.phone_number')" class="mobile loginUniFormItem ss-p-t-10" :error-message="state.mobileErrorMsg">
 				<phoneInternationalInput :verify-username="state.verifyUsername" @input="mobileInput"/>
 			</uni-forms-item>
 
-			<uni-forms-item name="code" label="验证码" class="loginUniFormItem">
-				<uni-easyinput placeholder="请输入验证码" v-model="state.model.code" :inputBorder="false" type="number"
+			<uni-forms-item name="code" :label="t('account.verification_code')" class="loginUniFormItem">
+				<uni-easyinput :placeholder="t('account.enter_verification_code')" v-model="state.model.code" :inputBorder="false" type="number"
 					maxlength="4">
 				</uni-easyinput>
 			</uni-forms-item>
@@ -31,7 +32,7 @@
 			<!-- <button class="ss-reset-button forgot-btn" @tap="showAuthModal('resetPassword')">
 		  忘记密码
 		</button> -->
-			<button class="ss-reset-button login-btn-start" @tap="registerSubmit"> 注册 </button>
+			<button class="ss-reset-button login-btn-start" @tap="registerSubmit"> {{ t('account.register')}} </button>
 		</view>
 	</view>
 </template>
@@ -58,7 +59,8 @@
 	} from '@/sheep/hooks/useModal';
 	import AuthUtil from '@/sheep/api/member/auth';
 	import phoneInternationalInput from './phone-international-input.vue';
-	const mobileInput = (mobile,mobileError)=>{
+	import { t } from '@/locale'
+ 	const mobileInput = (mobile,mobileError)=>{
 		// console.log(mobile,mobileError);
 		state.model.mobile = mobile;
 		state.mobileErrorMsg = mobileError;

+ 11 - 10
sheep/components/s-auth-modal/components/sms-login.vue

@@ -3,21 +3,21 @@
 	<view>
 
 		<!-- 表单项 -->
-		<uni-forms ref="smsLoginRef" v-model="state.model" :rules="state.rules" validateTrigger="bind" labelWidth="140"
+		<uni-forms ref="smsLoginRef" v-model="state.model" :rules="state.rules" validateTrigger="bind" labelWidth="160"
 			labelAlign="center" class="loginUniForm">
-			<uni-forms-item name="username" label="用户名" class="loginUniFormItem" :error-message="state.usernameErrorMsg">
-				<uni-easyinput placeholder="请输入用户名" v-model="state.model.username" :inputBorder="false" :clearable="false" @blur="verifyUsername">
+			<uni-forms-item name="username" :label="t('account.username')" class="loginUniFormItem" :error-message="state.usernameErrorMsg">
+				<uni-easyinput :placeholder="t('account.enter_username')" v-model="state.model.username" :inputBorder="false" :clearable="false" @blur="verifyUsername">
 					<template v-slot:right>
 						<view v-if="state.verifyUsername" class="icon"><image style :src="sheep.$url.static('/static/images/shibai.png')" /></view>
 						<view v-else class="icon"> <image :src="sheep.$url.static('/static/images/chenggong.png')" /></view>
 					</template>
 				</uni-easyinput>
 			</uni-forms-item>
-			<uni-forms-item name="mobile" label="手机号" class="mobile loginUniFormItem ss-p-t-10" :error-message="state.mobileErrorMsg">
+			<uni-forms-item name="mobile" :label="t('account.phone_number')" class="mobile loginUniFormItem ss-p-t-10" :error-message="state.mobileErrorMsg">
 				<phoneInternationalInput :verify-username="!state.verifyUsername" @input="mobileInput"/>
 			</uni-forms-item>
-			<uni-forms-item name="code" label="验证码" class="loginUniFormItem">
-				<uni-easyinput placeholder="请输入验证码" v-model="state.model.code" :inputBorder="false" type="number"
+			<uni-forms-item name="code" :label="t('account.verification_code')" class="loginUniFormItem">
+				<uni-easyinput :placeholder="t('account.enter_verification_code')" v-model="state.model.code" :inputBorder="false" type="number"
 					maxlength="4">
 				</uni-easyinput>
 			</uni-forms-item>
@@ -26,7 +26,7 @@
 			<!-- <button class="ss-reset-button forgot-btn" @tap="showAuthModal('resetPassword')">
 		  忘记密码
 		</button> -->
-			<button class="ss-reset-button login-btn-start" @tap="smsLoginSubmit"> 登录 </button>
+			<button class="ss-reset-button login-btn-start" @tap="smsLoginSubmit"> {{ t('account.login') }} </button>
 		</view>
 	</view>
 </template>
@@ -57,6 +57,7 @@
 		state.model.mobile = mobile;
 		state.mobileErrorMsg = mobileError;
 	}
+	import { t } from '@/locale'
 	const smsLoginRef = ref(null);
 
 	const emits = defineEmits(['onConfirm']);
@@ -73,7 +74,7 @@
 		verifyUsername: true ,
 		usernameErrorMsg:'',
 		isMobileEnd: false, // 手机号输入完毕
-		codeText: '获取验证码',
+		codeText: t('account.get_verification_code'),
 		mobileErrorMsg:'',
 		model: {
 			username:'',
@@ -98,7 +99,7 @@
 		const { data } = await AuthUtil.verifyUsername(username);
 		// false就是已经有这个用户名,可以登录,true是没有,不可以登录
 		if(data){
-			state.usernameErrorMsg = '请输入正确的用户名!'
+			state.usernameErrorMsg = t('account.enter_valid_username')
 			state.verifyUsername = data
 		}else {
 			state.usernameErrorMsg = ''
@@ -124,7 +125,7 @@
 		if (!props.agreeStatus) {
 			emits('onConfirm', true)
 			//onConfirm(true)
-			sheep.$helper.toast('请勾选同意');
+			sheep.$helper.toast(t('account.please_agree'));
 			return;
 		}
 

+ 3 - 3
sheep/components/s-auth-modal/index.scss

@@ -16,14 +16,14 @@
 
 .head-box {
   .head-title {
-    min-width: 160rpx;
+    // min-width: 160rpx;
     font-size: 36rpx;
     font-weight: bold;
     color: #333333;
     line-height: 36rpx;
   }
   .head-title-active {
-    width: 160rpx;
+    // width: 160rpx;
     font-size: 32rpx;
     font-weight: 600;
     color: #999;
@@ -94,7 +94,7 @@
 .type-btn {
   padding: 20rpx;
   margin: 40rpx auto;
-  width: 200rpx;
+  // width: 200rpx;
   font-size: 30rpx;
   font-weight: 500;
   color: #999999;

+ 20 - 18
sheep/components/s-auth-modal/s-auth-modal.vue

@@ -10,18 +10,19 @@
 						:class="[isActive=='accountLogin' ?`head-title ss-m-r-40 head-title-animation`:`head-title-active ss-m-r-40`]"
 						@tap="isActive='accountLogin';showAuthModal('accountLogin','accountLogin')">
 						
-						账号登录
+						{{t('account.account_login')}}
 					</view>
 					<view
 						:class="[isActive=='smsLogin'?`head-title head-title-line head-title-animation ss-m-r-40`:` ss-m-r-40 head-title-active head-title-line`]"
 						@tap="isActive='smsLogin';showAuthModal('smsLogin','smsLogin')">
 						
-						短信登录
+						{{t('account.sms_login')}}
 					</view>
 					<view
 						:class="[isActive=='register' ?`head-title head-title-line head-title-animation`:`head-title-active head-title-line`]"
-						@tap="isActive='register';showAuthModal('register','register')"  v-if="linkId"> 
-						注册
+						@tap="isActive='register';showAuthModal('register','register')" > 
+						<!--  v-if="linkId" -->
+						{{t('account.register')}}
 					</view>
 				</view>
 			</view>
@@ -32,13 +33,13 @@
 					<radio :checked="state.protocol" color="var(--ui-BG-Main)" style="transform: scale(0.8)"
 						@tap.stop="onChange" />
 					<view class="agreement-text ss-flex ss-col-center ss-m-l-8">
-						我已阅读并遵守
+						{{t('account.read_and_agree')}}
 						<view class="tcp-text" @tap.stop="onProtocol('用户协议')">
-							《用户协议》
+							{{t('account.user_agreement')}}
 						</view>
-						<view class="agreement-text"></view>
+						<view class="agreement-text">{{t('account.and')}}</view>
 						<view class="tcp-text" @tap.stop="onProtocol('隐私协议')">
-							《隐私协议》
+							{{t('account.privacy_policy')}}
 						</view>
 					</view>
 				</label>
@@ -51,7 +52,7 @@
 
 					<image class=" auto-login-img" :src="sheep.$url.static('/static/images/wechat.png')" />
 
-					<text>微信授权登录</text>
+					<text>{{t('account.wechat_authorization_login')}}</text>
 				</view>
 			</view>
 			<!-- 微信公众号授权登陆 在账号注册中显示 -->
@@ -61,7 +62,7 @@
 			
 					<image class=" auto-login-img" :src="sheep.$url.static('/static/images/wechat.png')" />
 			
-					<text>微信授权注册</text>
+					<text>{{t('account.wechat_authorization_register')}}</text>
 				</view>
 			</view>
 			<!-- 1. 微信公众号授权登录 第一次登陆时弹窗绑定手机号 accountLogin -->
@@ -159,6 +160,7 @@
 		showAuthModal
 	} from '@/sheep/hooks/useModal';
 	import wx from "weixin-js-sdk";
+	import { t } from '@/locale'
 	const appInfo = computed(() => sheep.$store('app').info);
 	const linkId = uni.getStorageSync("linkId");
 	const modalStore = sheep.$store('modal');
@@ -211,7 +213,7 @@
 			setTimeout(() => {
 				currentProtocol.value = false;
 			}, 1000);
-			sheep.$helper.toast('请勾选同意');
+			sheep.$helper.toast(t('account.please_agree'));
 			return;
 		}
 		
@@ -242,14 +244,14 @@
 			setTimeout(() => {
 				currentProtocol.value = false;
 			}, 1000);
-			sheep.$helper.toast('请勾选同意');
+			sheep.$helper.toast(t('account.please_agree'));
 			return;
 		}
-		const linkId = uni.getStorageSync("linkId");
-		if (!linkId) {
-			sheep.$helper.toast('您只能通过分享注册');
-			return false;
-		}
+		// const linkId = uni.getStorageSync("linkId");
+		// if (!linkId) {
+		// 	sheep.$helper.toast(t('account.register_by_sharing_only'));
+		// 	return false;
+		// }
 		const loginRes = await sheep.$platform.useProvider(provider).register();
 		if (loginRes) {
 			closeAuthModal();
@@ -264,7 +266,7 @@
 	// 微信小程序的“手机号快速验证”:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/getPhoneNumber.html
 	const getPhoneNumber = async (e) => {
 		if (e.detail.errMsg !== 'getPhoneNumber:ok') {
-			sheep.$helper.toast('快捷登录失败');
+			sheep.$helper.toast(t('account.quick_login_failed'));
 			return;
 		}
 		let result = await sheep.$platform.useProvider().mobileLogin(e.detail);

+ 2 - 1
sheep/components/s-block-item/s-block-item.vue

@@ -1,7 +1,8 @@
 <template>
   <view>
+	  
     <!-- 基础组件:搜索框 -->
-    <s-search-block v-if="type === 'SearchBar'" :data="data" :styles="styles" :navbar="false" />
+    <s-search-block v-if="type === 'SearchBar'" :data="data" :styles="styles" :navbar="false"   />
     <!-- 基础组件:公告栏 -->
     <s-notice-block v-if="type === 'NoticeBar'" :data="data" />
     <!-- 基础组件:菜单导航 -->

+ 8 - 5
sheep/components/s-consumptionPoints-pop/s-consumptionPoints-pop.vue

@@ -1,18 +1,21 @@
 <!-- 订单确认的使用消费分弹窗 -->
 <template>
 	<su-popup :show="show" type="bottom" round="10" @close="emits('close')" showClose backgroundColor="#ffffff">
-		<view class="title ss-m-t-16 ss-m-l-20 ss-flex">使用消费分</view>
+		<view class="title ss-m-t-16 ss-m-l-20 ss-flex">{{ $t('pop.ConsumptionPoints.usingPoints') }}</view>
 		<view class="model-box ss-p-x-30">
 			<input v-model.number="state.points" class="uni-input input-points ss-m-b-10" type="number"
 				placeholder="请输入抵扣消费分" oninput="this.value=this.value.replace(/\D/g);" :disabled="state.disabled"/>
 		</view>
 		<view class="modal-footer text-center">
-			<view class="subtitle text-disabled">您的可用消费分<text class="text-red">{{currentMemberConsumptionPoints}}</text></view>
-			<view class="subtitle text-disabled">当前订单价格<text class="text-red">¥{{currentOrderTotalPrice}}</text>,可使用最高<text class="text-red"> {{canUesPoint}} </text>消费分 </view>
+			<view class="subtitle text-disabled">{{ $t('pop.ConsumptionPoints.availablePoints') }}:<text class="text-red">{{currentMemberConsumptionPoints}}</text></view>
+			<view class="subtitle text-disabled">
+			  {{ $t('pop.ConsumptionPoints.currentOrderTotalPrice') }}<text class="text-red">¥{{ currentOrderTotalPrice }}</text>{{ $t('pop.ConsumptionPoints.canUseMaxPoints') }}<text class="text-red"> {{ canUesPoint }} </text>{{ $t('pop.ConsumptionPoints.points') }}
+			</view>
+
 			<view class="ss-flex ss-m-y-20 ss-col-center">
 				<button class="confirm-btn ss-reset-button"
-					@tap="state.points = 0;emits('confirm', state.points)">取消</button>
-				<button class="confirm-btn ss-reset-button" @tap="onConfirm">确认</button>
+					@tap="state.points = 0;emits('confirm', state.points)">{{ $t('pop.cancel') }}</button>
+				<button class="confirm-btn ss-reset-button" @tap="onConfirm">{{ $t('pop.confirm') }}</button>
 			</view>
 		</view>
 	</su-popup>

+ 3 - 3
sheep/components/s-follow-modal/s-follow-modal.vue

@@ -5,7 +5,7 @@
 			<view class="head-box">
 				<view class=" ss-m-b-20">
 					<view class="head-title ss-m-r-40 head-title-animation">
-						关注公众号
+						{{ t('pop.follow_public_account') }}
 					</view>
 					<view class="ss-flex ss-row-center">
 						<canvas class="hideCanvas" canvas-id="myCanvas" style="width: 300px; height: 300px;"></canvas>
@@ -37,7 +37,7 @@
 		closeSubscribeModal,
 		
 	} from '@/sheep/hooks/useModal';
-
+	import { t } from '@/locale'
 	const show = computed(() => sheep.$store('modal').subscribe);
 	
 	// 创建一个响应式的图像路径变量
@@ -75,7 +75,7 @@
 		
 		  // 绘制文字
 		    await qsc.drawText({
-		      val: '长按二维码关注公众号', // 文字内容
+		      val: t('pop.long_press_qrcode_follow'), // 文字内容
 		      x: textX,
 		      y: textY,
 		      maxWidth: 250, // 文字的最大宽度,确保文字不会超出画布

+ 1 - 0
sheep/components/s-goods-card/s-goods-card.vue

@@ -23,6 +23,7 @@
           :bottomRadius="data.borderRadiusBottom"
           @click="sheep.$router.go('/pages/goods/index', { id: item.id })"
         >
+		
           <!-- 购买按钮 -->
           <template v-slot:cart>
             <button class="ss-reset-button cart-btn" :style="[buyStyle]">

+ 10 - 9
sheep/components/s-goods-column/s-goods-column.vue

@@ -32,7 +32,7 @@
 				</view>
 				<view>
 					<view class="origin-price-text" v-if="data.promotionFee >= 0">
-						积分:{{ fen2yuan(data.promotionFee ) }}
+						{{$t('common.points')}}:{{ fen2yuan(data.promotionFee ) }}
 					</view>
 				</view>
 			</view>
@@ -65,7 +65,7 @@
 					</text>
 				</view>
 				<view class="origin-price-text" v-if="data.promotionFee >= 0">
-					积分:{{ fen2yuan(data.promotionFee ) }}
+					{{$t('common.points')}}:{{ fen2yuan(data.promotionFee ) }}
 				</view>
 			</view>
 		</view>
@@ -109,7 +109,7 @@
 
 					<view class="origin-price-text"
 						v-if="data.promotionFee >= 0">
-						积分:{{ fen2yuan(data.promotionFee ) }}
+						{{$t('common.points')}}:{{ fen2yuan(data.promotionFee ) }}
 					</view>
 				</view>
 
@@ -174,7 +174,7 @@
 					<view class="ss-flex ss-col-bottom ss-m-b-10">
 						<view class="origin-price-text"
 							v-if="data.promotionFee >= 0">
-							积分:{{ fen2yuan(data.promotionFee) }}
+							{{$t('common.points')}}:{{ fen2yuan(data.promotionFee) }}
 						</view>
 					</view>
 					<view class="ss-m-t-8 ss-flex ss-col-center ss-flex-wrap">
@@ -185,7 +185,8 @@
 
 			<slot name="cart">
 				<view class="buy-box ss-flex ss-col-center ss-row-center" v-if="buttonShow">
-					去购买
+					
+					{{$t('common.go_buy')}}
 				</view>
 			</slot>
 		</view>
@@ -227,7 +228,7 @@
 						</view>
 						<view class="origin-price-text"
 							v-if="data.promotionFee >= 0">
-							积分:{{ fen2yuan(data.promotionFee) }}
+							{{$t('common.points')}}:{{ fen2yuan(data.promotionFee) }}
 						</view>
 						
 					</view>
@@ -238,7 +239,7 @@
 			</view>
 
 			<slot name="cart">
-				<view class="buy-box ss-flex ss-col-center ss-row-center">去购买</view>
+				<view class="buy-box ss-flex ss-col-center ss-row-center">{{$t('common.go_buy')}}</view>
 			</slot>
 		</view>
 	</view>
@@ -527,8 +528,8 @@
 
 	.sales-text {
 		display: table;
-		font-size: 24rpx;
-		transform: scale(0.8);
+		font-size: 22rpx;
+		// transform: scale(0.8);
 		margin-left: 0rpx;
 		color: #c4c4c4;
 	}

+ 85 - 28
sheep/components/s-menu-grid/s-menu-grid.vue

@@ -1,45 +1,102 @@
 <!-- 装修基础组件:宫格导航 -->
 <template>
-  <uni-grid :showBorder="Boolean(data.border)" :column="data.column">
-    <uni-grid-item
-      v-for="(item, index) in data.list"
-      :key="index"
-      @tap="sheep.$router.go(item.url)"
-    >
-      <view class="grid-item-box ss-flex ss-flex-col ss-row-center ss-col-center">
-        <view class="img-box">
-          <view
-            class="tag-box"
-            v-if="item.badge.show"
-            :style="[{ background: item.badge.bgColor, color: item.badge.textColor }]"
-          >
-            {{ item.badge.text }}
-          </view>
-          <image class="menu-image" :src="sheep.$url.cdn(item.iconUrl)"></image>
-        </view>
+  <uni-grid :showBorder="Boolean(data.border)" :column="data.column" v-if="initData && initData.length > 0">
 
-        <view class="title-box ss-flex ss-flex-col ss-row-center ss-col-center">
-          <view class="grid-text" :style="[{ color: item.titleColor }]">
-            {{ item.title }}
-          </view>
-          <view class="grid-tip" :style="[{ color: item.subtitleColor }]">
-            {{ item.subtitle }}
-          </view>
-        </view>
-      </view>
-    </uni-grid-item>
+	<template  v-for="(item, index) in initData">
+		<uni-grid-item
+		  :key="index"
+		  @tap="sheep.$router.go(item.url)"
+		  v-if="item.isVisible"
+		>
+			
+		  <view class="grid-item-box ss-flex ss-flex-col ss-row-center ss-col-center">
+		    <view class="img-box">
+		      <view
+		        class="tag-box"
+		        v-if="item.badge.show"
+		        :style="[{ background: item.badge.bgColor, color: item.badge.textColor }]"
+		      >
+		        {{ item.badge.text }}
+		      </view>
+		      <image class="menu-image" :src="sheep.$url.cdn(item.iconUrl)"></image>
+		    </view>
+		
+		    <view class="title-box ss-flex ss-flex-col ss-row-center ss-col-center">
+		      <view class="grid-text" :style="[{ color: item.titleColor }]">
+		        {{ item.title }}
+		      </view>
+		      <view class="grid-tip" :style="[{ color: item.subtitleColor }]">
+		        {{ item.subtitle }}
+		      </view>
+		    </view>
+		  </view>
+		</uni-grid-item>
+	</template>
+    
   </uni-grid>
 </template>
 
 <script setup>
   import sheep from '@/sheep';
-
+  import UserApi from '@/sheep/api/member/user';
+  import { ref, watch, onMounted } from 'vue';
   const props = defineProps({
     data: {
       type: Object,
       default() {},
     },
   });
+  
+  // 使用 ref 来存储初始化后的数据
+  const initData = ref([]);
+  
+  watch(
+    () => props.data.list,
+    (newList) => {
+      if (Array.isArray(newList) && newList.length > 0) {
+        initData.value = newList.map(item => ({
+			...item,
+			isVisible: item.title === '商户入驻' ? false : (item.isVisible !== undefined ? item.isVisible : true),
+
+        }));
+      } else {
+        initData.value = [];
+      }
+    },
+    { immediate: true }
+  );
+  
+  // 在组件挂载后获取用户信息并更新 initData
+  onMounted(() => {
+	  try {	
+		UserApi.getUserInfo()
+		  .then((res) => {
+			const userInfo = res.data;
+	  
+			// 检查用户信息后修改 initData 的 isVisible 属性
+			if (userInfo?.agent) {
+			  const targetIndex = initData.value.findIndex(
+				(item) => item.title === '商户入驻'
+			  );
+			  if (targetIndex !== -1) {
+				// 使用 splice 替换对象,确保响应性
+				const updatedItem = {
+				  ...initData.value[targetIndex],
+				  isVisible: true,
+				};
+				initData.value.splice(targetIndex, 1, updatedItem);
+			  }
+			}
+		  })
+		  .catch((error) => {
+			console.error('获取用户信息时发生错误:', error);
+		  });
+	  } catch (error) {
+			console.log(error);
+	  }
+	  // console.log(initData.value);
+  });
+  
 </script>
 
 <style lang="scss" scoped>

+ 9 - 6
sheep/components/s-points-pop/s-points-pop.vue

@@ -1,18 +1,21 @@
 <!-- 订单确认的使用佣金弹窗 -->
 <template>
 	<su-popup :show="show" type="bottom" round="10" @close="emits('close')" showClose backgroundColor="#ffffff">
-		<view class="title ss-m-t-16 ss-m-l-20 ss-flex">使用佣金</view>
+		<view class="title ss-m-t-16 ss-m-l-20 ss-flex">{{ $t('pop.Commission.usingCommission') }}</view>
 		<view class="model-box ss-p-x-30">
 			<input v-model.number="state.points" class="uni-input input-points ss-m-b-10" type="number"
 				placeholder="请输入抵扣佣金" oninput="this.value=this.value.replace(/\D/g);" :disabled="state.disabled"/>
 		</view>
 		<view class="modal-footer text-center">
-			<view class="subtitle text-disabled">您的可用佣金<text class="text-red">{{currentMemberPoints}}</text></view>
-			<view class="subtitle text-disabled">当前订单价格<text class="text-red">¥{{currentOrderTotalPrice}}</text>,可使用最高<text class="text-red"> {{canUesPoint}} </text>佣金 </view>
+			<view class="subtitle text-disabled">{{ $t('pop.Commission.availableCommission') }}:<text class="text-red">{{currentMemberPoints }}</text></view>
+			<view class="subtitle text-disabled">
+			  {{ $t('pop.Commission.currentOrderTotalPrice') }}<text class="text-red">¥{{ currentOrderTotalPrice }}</text>{{ $t('pop.Commission.canUseMaxCommission') }}<text class="text-red"> {{ canUesPoint }} </text>{{ $t('pop.Commission.commission') }}
+			</view>
+
 			<view class="ss-flex ss-m-y-20 ss-col-center">
 				<button class="confirm-btn ss-reset-button"
-					@tap="state.points = 0;emits('confirm', state.points)">取消</button>
-				<button class="confirm-btn ss-reset-button" @tap="onConfirm">确认</button>
+					@tap="state.points = 0;emits('confirm', state.points)">{{ $t('pop.cancel') }}</button>
+				<button class="confirm-btn ss-reset-button" @tap="onConfirm">{{ $t('pop.confirm') }}</button>
 			</view>
 		</view>
 	</su-popup>
@@ -28,7 +31,7 @@
 	} from 'vue';
 
 	const props = defineProps({
-		modelValue: { // 优惠劵列表
+		modelValue: { 
 			type: Object,
 			default () {},
 		},

+ 8 - 3
sheep/components/s-search-block/s-search-block.vue

@@ -1,4 +1,5 @@
 <template>
+	
 	<view class="search-content ss-flex ss-col-center ss-row-between" @tap="click" :style="[
       {
         borderRadius: radius + 'px',
@@ -7,14 +8,17 @@
         width: width,
       },
     ]" :class="[{ 'border-content': navbar }]">
+	
 		<view class="ss-flex ss-col-center" v-if="navbar">
 			<view class="search-icon _icon-search ss-m-l-10" :style="[{ color: props.iconColor }]"></view>
 			<view class="search-input ss-flex-1 ss-line-1" :style="[{ color: fontColor, width: width }]">
-				{{ placeholder }}
+				{{ placeholder }} 
 			</view>
 		</view>
+		
 		<uni-search-bar v-if="!navbar" class="ss-flex-1" :radius="data.borderRadius" :placeholder="data.placeholder"
 			cancelButton="none" clearButton="none" @confirm="onSearch" v-model="state.searchVal" />
+			
 		<view class="keyword-link ss-flex">
 			<view v-for="(item, index) in data.hotKeywords" :key="index">
 				<view class="ss-m-r-16" :style="[{ color: data.textColor }]"
@@ -26,6 +30,7 @@
 				:style="[{ color: data.textColor, marginRight: '10rpx' }]">
 				{{ item }}
 			</button>
+			
 		</view>
 	</view>
 </template>
@@ -58,7 +63,7 @@
 
 	// 事件页面
 	const emits = defineEmits(['click']);
-
+	
 	// 接收参数
 	const props = defineProps({
 		data: {
@@ -102,7 +107,7 @@
 			default: true,
 		},
 	});
-
+	
 	// 点击
 	const click = () => {
 		emits('click');

+ 19 - 19
sheep/components/s-select-sku/s-select-sku.vue

@@ -29,7 +29,7 @@
 									state.selectedSku.promotionFee >= 0 ||
 									goodsInfo.promotionFee >= 0
 								">
-								积分:{{
+								{{$t('common.points')}}:{{
 									fen2yuan(
 										state.selectedSku.promotionFee || goodsInfo.promotionFee,
 									)
@@ -46,6 +46,7 @@
 			<!-- 属性选择 -->
 			<view class="modal-content ss-flex-1">
 				<scroll-view scroll-y="true" class="modal-content-scroll" @touchmove.stop>
+					
 					<view class="sku-item ss-m-b-20" v-for="property in propertyList" :key="property.id">
 						<view class="label-text ss-m-b-20">{{ property.name }}</view>
 						<view class="ss-flex ss-col-center ss-flex-wrap">
@@ -64,11 +65,9 @@
 					</view>
 					<view class="buy-num-box ss-flex ss-col-center ss-row-between ss-m-b-40"
 						v-if="goodsInfo.spuPayType == 2">
-						<view class="label-text">购买金额 (当前可用积分:{{
-								points2point(userWallet.integralDO.currentQuota)
-							}})</view>
+						<view class="label-text">{{$t('selectSku.purchase_amount')}} {{$t('selectSku.available_points',{points:points2point(userWallet.integralDO.currentQuota)}) }}</view>
 						<view class="ss-flex ss-col-center">
-							<button class="ss-reset-button all-btn " @click="useAllPonints">全部</button>
+							<button class="ss-reset-button all-btn " @click="useAllPonints">{{ $t('commmon.all' )}}</button>
 							<image src="@/static/icon/points.png" v-if="goodsInfo.spuPayType == 2"
 								style="width: 30rpx; height: 30rpx"></image>
 							<input v-model="state.selectedSku.use_points" class="uni-input input-points"
@@ -77,7 +76,7 @@
 						</view>
 					</view>
 					<view class="buy-num-box ss-flex ss-col-center ss-row-between ss-m-b-40" v-else>
-						<view class="label-text">购买数量</view>
+						<view class="label-text">{{ $t('selectSku.purchase_quantity' )}}</view>
 						<su-number-box :min="1" :max="state.selectedSku.stock" :step="1"
 							v-model="state.selectedSku.goods_num" @change="onNumberChange($event)" />
 					</view>
@@ -87,19 +86,19 @@
 			<view class="modal-footer border-top">
 				<view class="buy-box ss-flex ss-col-center ss-flex ss-col-center ss-row-center"
 					v-if="goodsInfo.spuType && goodsInfo.spuPayType == 1">
-					<button class="ss-reset-button add-btn ui-Shadow-Main" @tap="onAddCart">加入购物车</button>
-					<button class="ss-reset-button buy-btn ui-Shadow-Main" @tap="onBuy">立即购买</button>
+					<button class="ss-reset-button add-btn ui-Shadow-Main" @tap="onAddCart">{{$t('common.add_to_cart')}}</button>
+					<button class="ss-reset-button buy-btn ui-Shadow-Main" @tap="onBuy">{{$t('common.buy_now')}}</button>
 				</view>
 				<view class="buy-box ss-flex ss-col-center ss-p-r-20" v-else>
 					<button class="ss-reset-button disabled-btn one-buy-btn ui-Shadow-Main " @tap="onBuy">
 						<template v-if="goodsInfo.spuPayType != 1 && !goodsInfo.spuType">
-							立即兑换
+							{{$t('common.redeem_now')}}
 						</template>
 						<template v-else-if="!goodsInfo.spuType">
-							立即购买
+							{{$t('common.buy_now')}}
 						</template>
 						<template v-else>
-							立即兑换
+							{{$t('common.redeem_now')}}
 						</template>
 					</button>
 				</view>
@@ -126,6 +125,7 @@
 
 	} from '@/sheep/hooks/useGoods';
 	import PayWalletApi from '@/sheep/api/pay/wallet';
+	import { t } from '@/locale'
 	const emits = defineEmits(['change', 'addCart', 'buy', 'close']);
 	const props = defineProps({
 		goodsInfo: {
@@ -185,7 +185,7 @@
 		})
 		
 		if (points <= 0) {
-			sheep.$helper.toast('最低使用1积分');
+			sheep.$helper.toast(t('selectSku.min_points_required'))
 			if (userCanUsePoints>=1) {
 				nextTick(() => {
 					state.selectedSku.use_points = 1;
@@ -200,7 +200,7 @@
 		}
 
 		if (points > userCanUsePoints) {
-			sheep.$helper.toast('可用积分不足');
+			sheep.$helper.toast(t('selectSku.insufficient_points'));
 			// console.log('输入的积分大于可用积分了', points, userCanUsePoints);
 			nextTick(() => {
 				state.selectedSku.use_points = parseInt(userCanUsePoints);
@@ -228,11 +228,11 @@
 	// 加入购物车
 	function onAddCart() {
 		if (state.selectedSku.id <= 0) {
-			sheep.$helper.toast('请选择规格');
+			sheep.$helper.toast(t('selectSku.select_specification'));
 			return;
 		}
 		if (state.selectedSku.stock <= 0) {
-			sheep.$helper.toast('库存不足');
+			sheep.$helper.toast(t('selectSku.insufficient_stock'));
 			return;
 		}
 
@@ -246,13 +246,13 @@
 			const {code,data} = await PayWalletApi.getDuserInfo();
 			const userCanUsePoints = parseFloat(points2point(data.integralDO.currentQuota));
 			if(userCanUsePoints<state.selectedSku.use_points){
-				sheep.$helper.toast('可用积分不足');
+				sheep.$helper.toast(t('selectSku.min_points_required'));
 				return false
 			}
 			
 			// return false
 			if (state.selectedSku.goods_num < 1 || !state.selectedSku.use_points) {
-				sheep.$helper.toast('输入金额少于可购买数量');
+				sheep.$helper.toast(t('selectSku.amount_less_than_min'));
 				return;
 			}
 			// 下单时检测如果库存不足
@@ -262,11 +262,11 @@
 			}
 		}
 		if (state.selectedSku.id <= 0) {
-			sheep.$helper.toast('请选择规格');
+			sheep.$helper.toast(t('selectSku.select_specification'));
 			return;
 		}
 		if (state.selectedSku.stock <= 0) {
-			sheep.$helper.toast('库存不足');
+			sheep.$helper.toast(t('selectSku.insufficient_stock'));
 			return;
 		}
 

+ 9 - 8
sheep/components/s-share-modal/canvas-poster/index.vue

@@ -7,7 +7,7 @@
           height: poster.height + 'px',
           width: poster.width + 'px',
         }">
-				海报加载中...
+				{{ t('share.poster_loading') }}
 			</view>
 			<image v-else class="poster-img" :src="poster.src" :style="{
           height: poster.height + 'px',
@@ -18,9 +18,9 @@
           width: poster.width + 'px',
         }" />
 			<view class="poster-btn-box ss-m-t-20 ss-flex ss-row-between ss-col-center" v-if="poster.src !== ''">
-				<button class="cancel-btn ss-reset-button" @tap="onClosePoster">取消</button>
+				<button class="cancel-btn ss-reset-button" @tap="onClosePoster">{{ t('common.cancel') }}</button>
 				<button class="save-btn ss-reset-button ui-BG-Main" @tap="onSavePoster">
-					长按图片保存
+					{{t('share.long_press_to_save') }}
 					<!-- {{
             ['wechatOfficialAccount', 'H5'].includes(sheep.$platform.name)
               ? '保存图片'
@@ -41,6 +41,7 @@
 	} from 'vue';
 	import sheep from '@/sheep';
 	import useCanvas from './useCanvas';
+	import { t } from '@/locale'
 	// import FileApi from '@/sheep/api/infra/file';
 	const props = defineProps({
 		show: {
@@ -70,17 +71,17 @@
 	// 保存海报图片
 	const onSavePoster = () => {
 		if (['WechatOfficialAccount', 'H5'].includes(sheep.$platform.name)) {
-			sheep.$helper.toast('请长按图片保存');
+			sheep.$helper.toast(t('share.long_press_to_save') );
 			return;
 		}
 		uni.saveImageToPhotosAlbum({
 			filePath: poster.src,
 			success: (res) => {
 				onClosePoster();
-				sheep.$helper.toast('保存成功');
+				sheep.$helper.toast(t('share.save_success'));
 			},
 			fail: (err) => {
-				sheep.$helper.toast('保存失败');
+				sheep.$helper.toast(t('share.save_failure'));
 				console.log('图片保存失败:', err);
 			},
 		});
@@ -124,7 +125,7 @@
 		bottom: -80rpx;
 
 		.cancel-btn {
-			width: 240rpx;
+			width: 280rpx;
 			height: 70rpx;
 			line-height: 70rpx;
 			background: $white;
@@ -135,7 +136,7 @@
 		}
 
 		.save-btn {
-			width: 240rpx;
+			width: 280rpx;
 			height: 70rpx;
 			line-height: 70rpx;
 			border-radius: 35rpx;

+ 3 - 1
sheep/components/s-share-modal/canvas-poster/poster/index.js

@@ -22,9 +22,11 @@ async function getFileURL(file) {
 }
 export async function getPosterData(options) {
 	const userInfo = sheep.$store('user').userInfo;
-	console.log(JSON.parse(uni.getStorageSync("user-store")).userInfo)
+	// console.log(JSON.parse(uni.getStorageSync("user-store")).userInfo)
 	let avatar = userInfo.avatar
+	
 	switch (options.shareInfo.poster.type) {
+		
 		case 'user':
 			await getFileURL(avatar)
 			options.avatar = locaImage.value

+ 1 - 0
sheep/components/s-share-modal/canvas-poster/useCanvas.js

@@ -48,6 +48,7 @@ export default async function useCanvas(options, vm) {
 		
 		// 绘制文字
 		if (item.type === 'text') {
+			console.log(item)
 			await qsc.drawText(item);
 		}
 		// 绘制图片

+ 5 - 5
sheep/components/s-share-modal/s-share-modal.vue

@@ -15,14 +15,14 @@
 						class="share-item share-btn ss-flex-col ss-col-center" open-type="share"
 						@tap="onShareByForward">
 						<image class="share-img" :src="sheep.$url.static('/static/images/share_wx.png')" mode="" />
-						<text class="share-title">微信好友</text>
+						<text class="share-title">{{ t('pop.wechat_friend') }}</text>
 					</button>
 
 					<!-- 操作 ②:生成海报图片 -->
 					<button v-if="shareConfig.methods.includes('poster')"
 						class="share-item share-btn ss-flex-col ss-col-center" @tap="onShareByPoster">
 						<image class="share-img" :src="sheep.$url.static('/static/images/share_poster.png')" mode="" />
-						<text class="share-title">生成海报</text>
+						<text class="share-title">{{ t('pop.create_poster') }}</text>
 					</button>
 
 					<!-- 操作 ③:生成链接 -->
@@ -30,11 +30,11 @@
 						class="share-item share-btn ss-flex-col ss-col-center" @tap="onShareByCopyLink">
 						<image class="share-img" :src="sheep.$url.static('/static/images/share_link.png')"
 							mode="" />
-						<text class="share-title">复制链接</text>
+						<text class="share-title">{{ t('pop.copy_link') }}</text>
 					</button> -->
 				</view>
 				<view class="share-foot ss-flex ss-row-center ss-col-center" @tap="closeShareModal">
-					取消
+					{{ t('common.cancel') }}
 				</view>
 			</view>
 		</su-popup>
@@ -62,7 +62,7 @@ import {
 	showAuthModal
 } from '@/sheep/hooks/useModal';
 import ShareApi from '@/sheep/api/distri/share';
-
+import { t } from '@/locale'
 const show = computed(() => sheep.$store('modal').share);
 const shareConfig = computed(() => sheep.$store('app').platform.share);
 const SharePosterRef = ref('');

+ 6 - 5
sheep/components/s-signup-modal/s-signup-modal.vue

@@ -5,17 +5,18 @@
 		<view class="model-box ss-flex-col">
 			<view class="ss-m-t-56 ss-flex-col ss-col-center">
 				<text class="cicon-check-round"></text>
-				<view class="score-title">恭喜!自动签到成功!</view>
+				<view class="score-title">{{ t('pop.auto_checkin_success') }}</view>
 				<view class="model-title ss-flex ss-col-center ss-m-t-22 ss-m-b-30">
-					获得每日签到{{state?.social}}点身价
+					{{ t('pop.daily_checkin_reward',{point:state?.social}) }}
+					<!-- 获得每日签到{{state?.social}}点身价 -->
 				</view>
 				<view class="model-title ss-flex ss-col-center ss-m-b-30" v-if="state?.upgradeOrNot ">
-					您已升级等级为{{ state?.socialStatusName }}
+					{{ t('pop.level_upgraded') }}{{ state?.socialStatusName }}
 				</view>
 			</view>
 			<view class="model-bg ss-flex-col ss-col-center ss-row-right">
 				<view class="ss-m-b-40">
-					<button class="ss-reset-button confirm-btn" @tap="colseSignUpModal();">确认</button>
+					<button class="ss-reset-button confirm-btn" @tap="colseSignUpModal();">{{ t('common.cancel') }}</button>
 				</view>
 			</view>
 		</view>
@@ -30,7 +31,7 @@
 		watch
 	} from 'vue';
 	import sheep from '@/sheep';
-
+	import { t } from '@/locale'
 	import {
 		colseSignUpModal,
 		showSignUpModal

+ 7 - 6
sheep/components/s-wallet-modal/s-wallet-modal.vue

@@ -6,18 +6,18 @@
 			<view class="ss-m-t-56 ss-flex-col ss-col-center">
 				<text class="cicon-check-round"></text>
 				<template v-if="!state.msg">
-					<view class="score-title">恭喜</view>
+					<view class="score-title">{{ t('pop.congratulations') }}</view>
 					<template v-if="state.points && state.points  !== 'null' && points2point(state.points) > 0 || state.socialStatus && state.socialStatus  !== 'null'">
 						<view class="model-title ss-flex ss-col-center ss-m-t-15 ss-font-35" v-if="state.points && points2point(state.points) > 0"> 
-							获得佣金:{{ points2point(state.points) }}
+							{{ t('pop.commission_earned') }}:{{ points2point(state.points) }}
 						</view>
 						<view class="model-title ss-flex ss-col-center ss-m-t-15 ss-font-35" v-if="state.socialStatus">
-							获得身价:{{state.socialStatus}}
+							{{ t('pop.social_value_earned') }}:{{state.socialStatus}}
 						</view>
 					</template>
 					<template v-else>
 						<view class="model-title ss-flex ss-col-center ss-m-y-15 " >
-							下单成功
+							{{ t('pop.order_success') }}
 						</view>
 					</template>
 				</template>
@@ -29,7 +29,7 @@
 			</view>
 			<view class="model-bg ss-flex-col ss-col-center ss-row-right">
 				<view class="ss-m-b-40">
-					<button class="ss-reset-button confirm-btn" @tap="colseWalletModal();">确认</button>
+					<button class="ss-reset-button confirm-btn" @tap="colseWalletModal();">{{ t('common.confirm') }}</button>
 				</view>
 			</view>
 		</view>
@@ -52,7 +52,8 @@
 	import {
 		points2point
 	} from '@/sheep/hooks/useGoods';
-	const headerBg = sheep.$url.css('/static/images/sign.png');
+	import { t } from '@/locale'
+ 	const headerBg = sheep.$url.css('/static/images/sign.png');
 	const show = computed(() => sheep.$store('modal').getWallet);
 	const state = computed(() => sheep.$store('modal').getWalletInfo)
 	// 监听签到成功 3s之后自动关闭

+ 12 - 9
sheep/helper/index.js

@@ -1,5 +1,8 @@
 import test from './test.js';
 import { round } from './digit.js';
+import {
+	t
+} from '@/locale';
 import wx from 'weixin-js-sdk';
 /**
  * @description 如果value小于min,取min;如果value大于max,取max
@@ -340,24 +343,24 @@ function timeFrom(timestamp = null, format = 'yyyy-mm-dd') {
   let tips = '';
   switch (true) {
     case timer < 300:
-      tips = '刚刚';
+      tips = t('common.just_now');
       break;
     case timer >= 300 && timer < 3600:
-      tips = `${parseInt(timer / 60)}分钟前`;
+      tips = t('common.minutes_ago',{m:parseInt(timer / 60)});
       break;
     case timer >= 3600 && timer < 86400:
-      tips = `${parseInt(timer / 3600)}小时前`;
+      tips = t('common.hours_ago',{h:parseInt(timer / 3600)});
       break;
     case timer >= 86400 && timer < 2592000:
-      tips = `${parseInt(timer / 86400)}天前`;
+      tips = t('common.days_ago',{d:parseInt(timer / 86400)});
       break;
     default:
       // 如果format为false,则无论什么时间戳,都显示xx之前
       if (format === false) {
         if (timer >= 2592000 && timer < 365 * 86400) {
-          tips = `${parseInt(timer / (86400 * 30))}个月前`;
+          tips = t('common.months_ago',{m:parseInt(timer / (86400 * 30))});
         } else {
-          tips = `${parseInt(timer / (86400 * 365))}年前`;
+          tips = t('common.years_ago',{y:parseInt(timer / (86400 * 365))});
         }
       } else {
         tips = timeFormat(timestamp, format);
@@ -656,10 +659,10 @@ export function copyText(text) {
   uni.setClipboardData({
     data: text,
     success: function () {
-      toast('复制成功!');
+      toast(t('common.copy_success'));
     },
     fail: function () {
-      toast('复制失败!');
+      toast(t('common.copy_fail'));
     },
   });
   // #endif
@@ -671,7 +674,7 @@ export function copyText(text) {
   document.execCommand('Copy');
   createInput.className = 'createInput';
   createInput.style.display = 'none';
-  toast('复制成功');
+  toast(t('common.copy_success'));
   // #endif
 }
 

+ 253 - 233
sheep/hooks/useGoods.js

@@ -1,7 +1,16 @@
-import { ref } from 'vue';
+import {
+	ref
+} from 'vue';
 import dayjs from 'dayjs';
 import $url from '@/sheep/url';
-import { formatDate } from '@/sheep/util';
+import {
+	formatDate
+} from '@/sheep/util';
+import {
+	t
+} from '@/locale';
+
+
 
 
 
@@ -12,8 +21,8 @@ import { formatDate } from '@/sheep/util';
  * @return {string} 格式化后的销量字符串
  */
 export function formatSales(type, num) {
-  let prefix = type !== 'exact' && num < 10 ? '销量' : '已售';
-  return formatNum(prefix, type, num)
+	let prefix = type !== 'exact' && num < 10 ? t('common.sales_volume') : t('common.sold');
+	return formatNum(prefix, type, num)
 }
 
 /**
@@ -23,7 +32,7 @@ export function formatSales(type, num) {
  * @return {string} 格式化后的销量字符串
  */
 export function formatExchange(type, num) {
-  return formatNum('已兑换', type, num)
+	return formatNum(t('useGoods.redeemed'), type, num)
 }
 
 
@@ -34,7 +43,7 @@ export function formatExchange(type, num) {
  * @return {string} 格式化后的销量字符串
  */
 export function formatStock(type, num) {
-  return formatNum('库存', type, num)
+	return formatNum(t('useGoods.in_stock'), type, num)
 }
 
 /**
@@ -45,25 +54,25 @@ export function formatStock(type, num) {
  * @return {string} 格式化后的销量字符串
  */
 export function formatNum(prefix, type, num) {
-  num = (num || 0);
-  // 情况一:精确数值
-  if (type === 'exact') {
-    return prefix + num;
-  }
-  // 情况二:小于等于 10
-  if (num < 10) {
-    return `${prefix}≤10`;
-  }
-  // 情况三:大于 10,除第一位外,其它位都显示为0
-  // 例如:100  - 199  显示为 100+
-  //      9000 - 9999 显示为 9000+
-  let pow = Math.pow(10, `${num}`.length - 1);
-  return `${prefix}${(num / pow) * pow}+`;
+	num = (num || 0);
+	// 情况一:精确数值
+	if (type === 'exact') {
+		return prefix + num;
+	}
+	// 情况二:小于等于 10
+	if (num < 10) {
+		return `${prefix}≤10`;
+	}
+	// 情况三:大于 10,除第一位外,其它位都显示为0
+	// 例如:100  - 199  显示为 100+
+	//      9000 - 9999 显示为 9000+
+	let pow = Math.pow(10, `${num}`.length - 1);
+	return `${prefix}${(num / pow) * pow}+`;
 }
 
 // 格式化价格
 export function formatPrice(e) {
-  return e.length === 1 ? e[0] : e.join('~');
+	return e.length === 1 ? e[0] : e.join('~');
 }
 
 
@@ -77,12 +86,15 @@ const VIDEO_SUFFIX_LIST = ['.avi', '.mp4']
  * @return {{src: string, type: 'video' | 'image' }[]}  转换后的链接列表
  */
 export function formatGoodsSwiper(urlList) {
-  return urlList?.filter(url => url).map((url, key) => {
-    const isVideo = VIDEO_SUFFIX_LIST.some(suffix => url.includes(suffix));
-    const type = isVideo ? 'video' : 'image'
-    const src = $url.cdn(url);
-    return { type, src }
-  }) || [];
+	return urlList?.filter(url => url).map((url, key) => {
+		const isVideo = VIDEO_SUFFIX_LIST.some(suffix => url.includes(suffix));
+		const type = isVideo ? 'video' : 'image'
+		const src = $url.cdn(url);
+		return {
+			type,
+			src
+		}
+	}) || [];
 }
 
 /**
@@ -92,18 +104,18 @@ export function formatGoodsSwiper(urlList) {
  * @return {string} 颜色的 class 名称
  */
 export function formatOrderColor(order) {
-  if (order.status === 0) {
-    return 'info-color';
-  }
-  if (order.status === 10
-    || order.status === 20
-    || (order.status === 30 && !order.commentStatus)) {
-    return 'warning-color';
-  }
-  if (order.status === 30 && order.commentStatus) {
-    return 'success-color';
-  }
-  return 'danger-color';
+	if (order.status === 0) {
+		return 'info-color';
+	}
+	if (order.status === 10 ||
+		order.status === 20 ||
+		(order.status === 30 && !order.commentStatus)) {
+		return 'warning-color';
+	}
+	if (order.status === 30 && order.commentStatus) {
+		return 'success-color';
+	}
+	return 'danger-color';
 }
 
 /**
@@ -113,26 +125,34 @@ export function formatOrderColor(order) {
  */
 export function formatOrderStatus(order) {
 	// console.log(order.status,order.deliveryType);
-  if (order.status === 0) {
-    return '待付款';
-  }
-  // 快递发货 虚拟发货都走这条
-  if (order.status === 10 && order.deliveryType === 1  ||  order.status === 10 && order.deliveryType === 3) {
-    return '待发货';
-  }
-  if (order.status === 10 && order.deliveryType === 2) {
-    return '待核销';
-  }
-  if (order.status === 20) {
-    return '待收货';
-  }
-  if (order.status === 30 && !order.commentStatus) {
-    return '待评价';
-  }
-  if (order.status === 30 && order.commentStatus) {
-    return '已完成';
-  }
-  return '已关闭';
+	if (order.status === 0) {
+		// 待付款
+		return t('useGoods.pending_payment');
+	}
+	// 快递发货 虚拟发货都走这条
+	if (order.status === 10 && order.deliveryType === 1 || order.status === 10 && order.deliveryType === 3) {
+		// 待发货
+		return t('useGoods.awaiting_shipment');
+	}
+	if (order.status === 10 && order.deliveryType === 2) {
+		// 待核销
+		return t('useGoods.awaiting_write_off');
+	}
+	if (order.status === 20) {
+		// 待收货
+		return t('useGoods.awaiting_delivery');
+	}
+	if (order.status === 30 && !order.commentStatus) {
+		// 待评价
+		return t('useGoods.awaiting_review');
+		
+	}
+	if (order.status === 30 && order.commentStatus) {
+		// 已完成
+		return t('useGoods.completed');
+	}
+	// 已关闭
+	return t('useGoods.closed');
 }
 
 /**
@@ -141,22 +161,22 @@ export function formatOrderStatus(order) {
  * @param order 订单
  */
 export function formatOrderStatusDescription(order) {
-  if (order.status === 0) {
-    return `请在 ${ formatDate(order.payExpireTime) } 前完成支付`;
-  }
-  if (order.status === 10) {
-    return '商家未发货,请耐心等待';
-  }
-  if (order.status === 20) {
-    return '商家已发货,请耐心等待';
-  }
-  if (order.status === 30 && !order.commentStatus) {
-    return '已收货,快去评价一下吧';
-  }
-  if (order.status === 30 && order.commentStatus) {
-    return '交易完成,感谢您的支持';
-  }
-  return '交易关闭';
+	if (order.status === 0) {
+		return t('useGoods.complete_payment_by',{time:formatDate(order.payExpireTime)});
+	}
+	if (order.status === 10) {
+		return  t('useGoods.merchant_not_shipped');
+	}
+	if (order.status === 20) {
+		return t('useGoods.merchant_shipped');
+	}
+	if (order.status === 30 && !order.commentStatus) {
+		return t('useGoods.goods_received');
+	}
+	if (order.status === 30 && order.commentStatus) {
+		return t('useGoods.transaction_completed');
+	}
+	return t('useGoods.transaction_closed');
 }
 
 /**
@@ -166,34 +186,34 @@ export function formatOrderStatusDescription(order) {
  */
 export function handleOrderButtons(order) {
 	console.log()
-  order.buttons = []
-  if (order.type === 3) { // 查看拼团
-    order.buttons.push('combination');
-  }
-  if (order.status === 20) { // 确认收货
-	order.buttons.push('express');
-    order.buttons.push('confirm');
-  }
-  if (order.logisticsId > 0) { // 查看物流
-    order.buttons.push('express');
-  }
-  if (order.status === 0) { // 取消订单 / 发起支付
-    order.buttons.push('cancel');
-    order.buttons.push('pay');
-  }
-  if (order.status === 30 && !order.commentStatus) { // 发起评价
-    order.buttons.push('comment');
-  }
-  if (order.status === 40) { // 删除订单
-    order.buttons.push('delete');
-  }
-  if ([10, 20, 30].includes(order.items[0]?.refundStatus)) { // 取消订单
-    order.buttons.push('aftersaleCancel');
-  }
-  // 如果订单是发起了售后,商家同意了。待用户发货回平台
-  if (order.items[0]?.refundStatus === 20){
-	order.buttons.push('aftersaleDelivery');
-  }
+	order.buttons = []
+	if (order.type === 3) { // 查看拼团
+		order.buttons.push('combination');
+	}
+	if (order.status === 20) { // 确认收货
+		order.buttons.push('express');
+		order.buttons.push('confirm');
+	}
+	if (order.logisticsId > 0) { // 查看物流
+		order.buttons.push('express');
+	}
+	if (order.status === 0) { // 取消订单 / 发起支付
+		order.buttons.push('cancel');
+		order.buttons.push('pay');
+	}
+	if (order.status === 30 && !order.commentStatus) { // 发起评价
+		order.buttons.push('comment');
+	}
+	if (order.status === 40) { // 删除订单
+		order.buttons.push('delete');
+	}
+	if ([10, 20, 30].includes(order.items[0]?.refundStatus)) { // 取消订单
+		order.buttons.push('aftersaleCancel');
+	}
+	// 如果订单是发起了售后,商家同意了。待用户发货回平台
+	if (order.items[0]?.refundStatus === 20) {
+		order.buttons.push('aftersaleDelivery');
+	}
 }
 
 /**
@@ -202,31 +222,31 @@ export function handleOrderButtons(order) {
  * @param afterSale 售后
  */
 export function formatAfterSaleStatus(afterSale) {
-  if (afterSale.status === 10) {
-    return '申请售后';
-  }
-  if (afterSale.status === 20) {
-    return '商品待退货';
-  }
-  if (afterSale.status === 30) {
-    return '商家待收货';
-  }
-  if (afterSale.status === 40) {
-    return '等待退款';
-  }
-  if (afterSale.status === 50) {
-    return '退款成功';
-  }
-  if (afterSale.status === 61) {
-    return '买家取消';
-  }
-  if (afterSale.status === 62) {
-    return '商家拒绝';
-  }
-  if (afterSale.status === 63) {
-    return '商家拒收货';
-  }
-  return '未知状态';
+	if (afterSale.status === 10) {
+		return t('useGoods.apply_for_after_sales');
+	}
+	if (afterSale.status === 20) {
+		return t('useGoods.goods_awaiting_return');
+	}
+	if (afterSale.status === 30) {
+		return t('useGoods.merchant_awaiting_goods');
+	}
+	if (afterSale.status === 40) {
+		return t('useGoods.waiting_for_refund');
+	}
+	if (afterSale.status === 50) {
+		return t('useGoods.refund_successful');
+	}
+	if (afterSale.status === 61) {
+		return t('useGoods.buyer_cancelled');
+	}
+	if (afterSale.status === 62) {
+		return t('useGoods.merchant_refused');
+	}
+	if (afterSale.status === 63) {
+		return t('useGoods.merchant_refused_goods');
+	}
+	return t('useGoods.unknown_status');
 }
 
 /**
@@ -235,31 +255,31 @@ export function formatAfterSaleStatus(afterSale) {
  * @param afterSale 售后
  */
 export function formatAfterSaleStatusDescription(afterSale) {
-  if (afterSale.status === 10) {
-    return '退款申请待商家处理';
-  }
-  if (afterSale.status === 20) {
-    return '请退货并填写物流信息';
-  }
-  if (afterSale.status === 30) {
-    return '退货退款申请待商家处理';
-  }
-  if (afterSale.status === 40) {
-    return '等待退款';
-  }
-  if (afterSale.status === 50) {
-    return '退款成功';
-  }
-  if (afterSale.status === 61) {
-    return '退款关闭';
-  }
-  if (afterSale.status === 62) {
-    return `商家不同意退款申请,拒绝原因:${afterSale.auditReason}`;
-  }
-  if (afterSale.status === 63) {
-    return `商家拒绝收货,不同意退款,拒绝原因:${afterSale.auditReason}`;
-  }
-  return '未知状态';
+	if (afterSale.status === 10) {
+		return t('useGoods.refund_request_awaiting_merchant');
+	}
+	if (afterSale.status === 20) {
+		return t('useGoods.return_goods_fill_logistics');
+	}
+	if (afterSale.status === 30) {
+		return t('useGoods.return_refund_request_awaiting_merchant');
+	}
+	if (afterSale.status === 40) {
+		return t('useGoods.waiting_for_refund');
+	}
+	if (afterSale.status === 50) {
+		return t('useGoods.refund_successful');
+	}
+	if (afterSale.status === 61) {
+		return t('useGoods.refund_closed');
+	}
+	if (afterSale.status === 62) {
+		return t('useGoods.merchant_disagrees_with_refund_request')+`${afterSale.auditReason}`;
+	}
+	if (afterSale.status === 63) {
+		return t('useGoods.merchant_refuses_to_accept_goods')+`${afterSale.auditReason}`;
+	}
+	return t('useGoods.unknown_status');
 }
 
 /**
@@ -268,14 +288,14 @@ export function formatAfterSaleStatusDescription(afterSale) {
  * @param afterSale 售后
  */
 export function handleAfterSaleButtons(afterSale) {
-console.log(afterSale)
-  afterSale.buttons = [];
-  if ([10, 20, 30].includes(afterSale.status)) { // 取消订单
-    afterSale.buttons.push('cancel');
-  }
-  if (afterSale.status === 20) { // 退货信息
-    afterSale.buttons.push('delivery');
-  }
+	console.log(afterSale)
+	afterSale.buttons = [];
+	if ([10, 20, 30].includes(afterSale.status)) { // 取消订单
+		afterSale.buttons.push('cancel');
+	}
+	if (afterSale.status === 20) { // 退货信息
+		afterSale.buttons.push('delivery');
+	}
 }
 
 /**
@@ -285,28 +305,28 @@ console.log(afterSale)
  * @return {{s: string, ms: number, h: string, m: string}} 持续时间
  */
 export function useDurationTime(toTime, fromTime = '') {
-  toTime = getDayjsTime(toTime);
-  if (fromTime === '') {
-    fromTime = dayjs();
-  }
-  let duration = ref(toTime - fromTime);
-  if (duration.value > 0) {
-    setTimeout(() => {
-      if (duration.value > 0) {
-        duration.value -= 1000;
-      }
-    }, 1000);
-  }
+	toTime = getDayjsTime(toTime);
+	if (fromTime === '') {
+		fromTime = dayjs();
+	}
+	let duration = ref(toTime - fromTime);
+	if (duration.value > 0) {
+		setTimeout(() => {
+			if (duration.value > 0) {
+				duration.value -= 1000;
+			}
+		}, 1000);
+	}
 
-  let durationTime = dayjs.duration(duration.value);
-  return {
-    h: (durationTime.months() * 30 * 24 + durationTime.days() * 24 + durationTime.hours())
-      .toString()
-      .padStart(2, '0'),
-    m: durationTime.minutes().toString().padStart(2, '0'),
-    s: durationTime.seconds().toString().padStart(2, '0'),
-    ms: durationTime.$ms,
-  };
+	let durationTime = dayjs.duration(duration.value);
+	return {
+		h: (durationTime.months() * 30 * 24 + durationTime.days() * 24 + durationTime.hours())
+			.toString()
+			.padStart(2, '0'),
+		m: durationTime.minutes().toString().padStart(2, '0'),
+		s: durationTime.seconds().toString().padStart(2, '0'),
+		ms: durationTime.$ms,
+	};
 }
 
 /**
@@ -315,19 +335,19 @@ export function useDurationTime(toTime, fromTime = '') {
  * @return {dayjs.Dayjs}
  */
 function getDayjsTime(time) {
-  time = time.toString();
-  if (time.indexOf('-') > 0) {
-    // 'date'
-    return dayjs(time);
-  }
-  if (time.length > 10) {
-    // 'timestamp'
-    return dayjs(parseInt(time));
-  }
-  if (time.length === 10) {
-    // 'unixTime'
-    return dayjs.unix(parseInt(time));
-  }
+	time = time.toString();
+	if (time.indexOf('-') > 0) {
+		// 'date'
+		return dayjs(time);
+	}
+	if (time.length > 10) {
+		// 'timestamp'
+		return dayjs(parseInt(time));
+	}
+	if (time.length === 10) {
+		// 'unixTime'
+		return dayjs.unix(parseInt(time));
+	}
 }
 
 /**
@@ -337,7 +357,7 @@ function getDayjsTime(time) {
  * @returns {string} 元,例如说 1.00 元
  */
 export function fen2yuan(price) {
-  return (price / 100.0).toFixed(2)
+	return (price / 100.0).toFixed(2)
 }
 
 /**
@@ -347,7 +367,7 @@ export function fen2yuan(price) {
  * @returns {string} 元,例如说 1.000000 元
  */
 export function fen2yuan6(price) {
-  return (price / 100.0).toFixed(6)
+	return (price / 100.0).toFixed(6)
 }
 
 
@@ -358,7 +378,7 @@ export function fen2yuan6(price) {
  * @returns {string} 分,例如说 1.00 分
  */
 export function points2point(point) {
-  return (point / 1000000.0).toFixed(3).slice(0, -1) // 干掉四舍五入 实际返回不四舍五入的两位小数
+	return (point / 1000000.0).toFixed(3).slice(0, -1) // 干掉四舍五入 实际返回不四舍五入的两位小数
 }
 
 
@@ -377,33 +397,33 @@ export function points2point(point) {
  * @param skus 商品 SKU 数组
  */
 export function convertProductPropertyList(skus) {
-  let result = [];
-  for (const sku of skus) {
-    if (!sku.properties) {
-      continue
-    }
-    for (const property of sku.properties) {
-      // ① 先处理属性
-      let resultProperty = result.find(item => item.id === property.propertyId)
-      if (!resultProperty) {
-        resultProperty = {
-          id: property.propertyId,
-          name: property.propertyName,
-          values: []
-        }
-        result.push(resultProperty)
-      }
-      // ② 再处理属性值
-      let resultValue = resultProperty.values.find(item => item.id === property.valueId)
-      if (!resultValue) {
-        resultProperty.values.push({
-          id: property.valueId,
-          name: property.valueName
-        })
-      }
-    }
-  }
-  return result;
+	let result = [];
+	for (const sku of skus) {
+		if (!sku.properties) {
+			continue
+		}
+		for (const property of sku.properties) {
+			// ① 先处理属性
+			let resultProperty = result.find(item => item.id === property.propertyId)
+			if (!resultProperty) {
+				resultProperty = {
+					id: property.propertyId,
+					name: property.propertyName,
+					values: []
+				}
+				result.push(resultProperty)
+			}
+			// ② 再处理属性值
+			let resultValue = resultProperty.values.find(item => item.id === property.valueId)
+			if (!resultValue) {
+				resultProperty.values.push({
+					id: property.valueId,
+					name: property.valueName
+				})
+			}
+		}
+	}
+	return result;
 }
 
 /**
@@ -414,11 +434,11 @@ export function convertProductPropertyList(skus) {
  * @returns {string} 规格字符串
  */
 export function formatRewardActivityRule(activity, rule) {
-  if (activity.conditionType === 10) {
-    return `满 ${fen2yuan(rule.limit)} 元减 ${fen2yuan(rule.discountPrice)} 元`;
-  }
-  if (activity.conditionType === 20) {
-    return `满 ${rule.limit} 件减 ${fen2yuan(rule.discountPrice)} 元`;
-  }
-  return '';
-}
+	if (activity.conditionType === 10) {
+		return `满 ${fen2yuan(rule.limit)} 元减 ${fen2yuan(rule.discountPrice)} 元`;
+	}
+	if (activity.conditionType === 20) {
+		return `满 ${rule.limit} 件减 ${fen2yuan(rule.discountPrice)} 元`;
+	}
+	return '';
+}

+ 10 - 6
sheep/hooks/useModal.js

@@ -9,8 +9,12 @@ import test from '@/sheep/helper/test.js';
 import AuthUtil from '@/sheep/api/member/auth';
 import sheep from '@/sheep';
 import SignInApi from '@/sheep/api/member/signin';
+import {
+	t
+} from '@/locale';
 let time = 30;
 let timer = null;
+
 // 登录
 async function onSign() {
 	const {
@@ -176,19 +180,19 @@ export function getSmsCode(event, mobile) {
 	const modalStore = $store('modal');
 	const lastSendTimer = modalStore.lastTimer[event];
 	if (typeof lastSendTimer === 'undefined') {
-		$helper.toast('短信发送事件错误');
+		$helper.toast(t('common.sms_error'));
 		return;
 	}
 
 	const duration = dayjs().unix() - lastSendTimer;
 	const canSend = duration >= 60;
 	if (!canSend) {
-		$helper.toast('请稍后再试');
+		$helper.toast(t('common.try_later'));
 		return;
 	}
 	// 只有 mobile 非空时才校验。因为部分场景(修改密码),不需要输入手机
 	if (mobile && !test.mobile(mobile)) {
-		$helper.toast('手机号码格式不正确');
+		$helper.toast(t('common.phone_format_error'));
 		return;
 	}
 
@@ -231,20 +235,20 @@ export function getSmsTimer(event, mobile = '') {
 	const modalStore = $store('modal');
 	const lastSendTimer = modalStore.lastTimer[event];
 	if (typeof lastSendTimer === 'undefined') {
-		$helper.toast('短信发送事件错误');
+		$helper.toast(t('common.sms_error'));
 		return;
 	}
 	const duration = ref(dayjs().unix() - lastSendTimer - 60);
 	const canSend = duration.value >= 0;
 	if (canSend) {
-		return '获取验证码';
+		return t('common.get_verification_code');
 	}
 
 	if (!canSend) {
 		setTimeout(() => {
 			duration.value++;
 		}, 1000);
-		return -duration.value.toString() + ' ';
+		return -duration.value.toString() + ' s';
 	}
 }
 

+ 4 - 2
sheep/libs/sdk-h5-weixin.js

@@ -8,7 +8,9 @@ import jweixin, {
 } from 'weixin-js-sdk';
 import $helper from '@/sheep/helper';
 import AuthUtil from '@/sheep/api/member/auth';
-
+import {
+	t
+} from '@/locale';
 let configSuccess = false;
 
 export default {
@@ -26,7 +28,7 @@ export default {
 	// 初始化 JSSDK
 	async init(callback) {
 		if (!this.isWechat()) {
-			$helper.toast('请使用微信网页浏览器打开');
+			$helper.toast(t('common.use_wechat_browser'));
 			return;
 		}
 

+ 4 - 2
sheep/platform/index.js

@@ -17,7 +17,9 @@ import wechat from './provider/wechat/index.js';
 import apple from './provider/apple';
 import share from './share';
 import Pay from './pay';
-
+import {
+	t
+} from '@/locale';
 const device = uni.getSystemInfoSync();
 
 const os = device.platform;
@@ -55,7 +57,7 @@ provider = 'wechat';
 
 if (isEmpty(name)) {
   uni.showToast({
-    title: '暂不支持该平台',
+    title: t('common.platform_not_supported'),
     icon: 'none',
   });
 }

+ 18 - 16
sheep/platform/pay.js

@@ -6,7 +6,9 @@ import {
 	getRootUrl
 } from '@/sheep/helper';
 import PayOrderApi from '@/sheep/api/pay/order';
-
+import {
+	t
+} from '@/locale';
 /**
  * 支付
  *
@@ -215,7 +217,7 @@ export default class SheepPay {
 				this.payResult('success');
 			},
 			cancel: () => {
-				sheep.$helper.toast('支付已手动取消');
+				sheep.$helper.toast(t('common.payment_manually_cancelled'));
 			},
 			fail: (error) => {
 				
@@ -244,7 +246,7 @@ export default class SheepPay {
 				this.payResult('success');
 			},
 			cancel: () => {
-				sheep.$helper.toast('支付已手动取消');
+				sheep.$helper.toast(t('common.payment_manually_cancelled'));
 			},
 			fail: (error) => {
 				if (error.errMsg.indexOf('chooseWXPay:没有此SDK或暂不支持此SDK模拟') >= 0) {
@@ -308,7 +310,7 @@ export default class SheepPay {
 			},
 			fail: (err) => {
 				if (err.errMsg === 'requestPayment:fail cancel') {
-					sheep.$helper.toast('支付已手动取消');
+					sheep.$helper.toast(t('common.payment_manually_cancelled'));
 				} else {
 					this.payResult('fail');
 				}
@@ -342,9 +344,9 @@ export default class SheepPay {
 		if (error === 0) {
 			// 引入showModal 点击确认 复制链接;
 			uni.showModal({
-				title: '支付宝支付',
-				content: '复制链接到外部浏览器',
-				confirmText: '复制链接',
+				title: t('common.alipay_payment'),
+				content: t('common.copy_link_to_browser'),
+				confirmText: t('common.copy_link'),
 				success: (res) => {
 					if (res.confirm) {
 						sheep.$helper.copyText(data.pay_data);
@@ -370,7 +372,7 @@ export default class SheepPay {
 				},
 				fail: (err) => {
 					if (err.errMsg === 'requestPayment:fail [paymentAlipay:62001]user cancel') {
-						sheep.$helper.toast('支付已手动取消');
+						sheep.$helper.toast(t('common.payment_manually_cancelled'));
 					} else {
 						that.payResult('fail');
 					}
@@ -413,9 +415,9 @@ export default class SheepPay {
 	// 引导绑定微信
 	bindWeixin() {
 		uni.showModal({
-			title: '微信支付',
-			content: '请先绑定微信再使用微信支付',
-			confirmText: '绑定',
+			title: t('common.wechat_payment'),
+			content: t('common.bind_wechat_for_payment'),
+			confirmText: t('common.bind'),
 			success: function(res) {
 				if (res.confirm) {
 					sheep.$platform.useProvider('wechat').bind();
@@ -431,25 +433,25 @@ export function getPayMethods(channels) {
 	let payMethods = [
 		{
 			icon: '/static/images/wechat.png',
-			title: '微信支付',
+			title: t('common.wechat_payment'),
 			value: 'wx_pub',
 			disabled: false,
 		},
 		{
 			icon: '/static/images/wechat.png',
-			title: '微信支付',
+			title: t('common.wechat_payment'),
 			value: 'JSAPI',
 			disabled: false,
 		},
 		{
 			icon: '/static/images/alipay.png',
-			title: '支付宝支付',
+			title: t('common.alipay_payment'),
 			value: 'alipay',
 			disabled: false,
 		},
 		{
 		  icon: '/static/images/wallet.png',
-		  title: '余额支付',
+		  title: t('common.balance_payment'),
 		  value: 'wallet',
 		  disabled: false,
 		},
@@ -461,7 +463,7 @@ export function getPayMethods(channels) {
 		},
 		{
 		  icon: '/static/images/wallet.png',
-		  title: '模拟支付',
+		  title: t('common.mock_payment'),
 		  value: 'mock',
 		  disabled: false,
 		}

+ 6 - 4
sheep/platform/provider/wechat/miniProgram.js

@@ -2,7 +2,9 @@ import third from '@/sheep/api/migration/third';
 import AuthUtil from '@/sheep/api/member/auth';
 import SocialApi from '@/sheep/api/member/social';
 import UserApi from '@/sheep/api/member/user';
-
+import {
+	t
+} from '@/locale';
 const socialType = 34; // 社交类型 - 微信小程序
 
 let subscribeEventList = [];
@@ -133,8 +135,8 @@ const checkUpdate = async (silence = true) => {
       if (res.hasUpdate) {
         updateManager.onUpdateReady(function () {
           uni.showModal({
-            title: '更新提示',
-            content: '新版本已经准备好,是否重启应用?',
+            title: t('common.update_prompt'),
+            content: t('common.new_version_ready'),
             success: function (res) {
               if (res.confirm) {
                 // 新的版本已经下载好,调用 applyUpdate 应用新版本并重启
@@ -153,7 +155,7 @@ const checkUpdate = async (silence = true) => {
       } else {
         if (!silence) {
           uni.showModal({
-            title: '当前为最新版本',
+            title: t('common.latest_version'),
             showCancel: false,
           });
         }

+ 22 - 19
sheep/request/index.js

@@ -11,7 +11,9 @@ import {
 	showAuthModal, cancelAutoSign
 } from '@/sheep/hooks/useModal';
 import AuthUtil from '@/sheep/api/member/auth';
-
+import {
+	t
+} from '@/locale';
 const options = {
 	// 显示操作成功消息 默认不显示
 	showSuccess: false,
@@ -24,7 +26,7 @@ const options = {
 	// 显示请求时loading模态框 默认显示
 	showLoading: true,
 	// loading提醒文字
-	loadingMsg: '加载中',
+	loadingMsg: t('common.loading'),
 	// 需要授权才能请求 默认放开
 	auth: false,
 	// ...
@@ -55,6 +57,7 @@ const http = new Request({
 		Accept: 'text/json',
 		'Content-Type': 'application/json;charset=UTF-8',
 		platform: $platform.name,
+		"Accept-Language": uni.getStorageSync('userLanguage') || uni.getLocale(),
 	},
 	// #ifdef APP-PLUS
 	sslVerify: false,
@@ -132,7 +135,7 @@ http.interceptors.response.use(
 			if (response.config.custom.showError) {
 				cancelAutoSign()
 				uni.showToast({
-					title: response.data.msg || '服务器开小差啦,请稍后再试~',
+					title: response.data.msg || t('common.server_error_try_later'),
 					icon: 'none',
 					mask: true,
 				});
@@ -157,51 +160,51 @@ http.interceptors.response.use(
 		cancelAutoSign()
 		const userStore = $store('user');
 		const isLogin = userStore.isLogin;
-		let errorMessage = '网络请求出错';
+		let errorMessage = t('common.network_request_error');
 		if (error !== undefined) {
 			switch (error.statusCode) {
 				case 400:
-					errorMessage = '请求错误';
+					errorMessage = t('common.request_error');
 					break;
 				case 401:
-					errorMessage = isLogin ? '您的登陆已过期' : '请登录';
+					errorMessage = isLogin ? t('common.login_expired') : t('common.please_login');
 					// 正常情况下,后端不会返回 401 错误,所以这里不处理 handleAuthorized
 					break;
 				case 403:
-					errorMessage = '拒绝访问';
+					errorMessage = t('common.access_denied');
 					break;
 				case 404:
-					errorMessage = '请求出错';
+					errorMessage = t('common.request_error');
 					break;
 				case 408:
-					errorMessage = '请求超时';
+					errorMessage = t('common.request_timeout');
 					break;
 				case 429:
-					errorMessage = '请求频繁, 请稍后再访问';
+					errorMessage = t('common.frequent_requests');
 					break;
 				case 500:
-					errorMessage = '服务器开小差啦,请稍后再试~';
+					errorMessage = t('common.server_error_try_later');
 					break;
 				case 501:
-					errorMessage = '服务未实现';
+					errorMessage = t('common.server_unavailable');
 					break;
 				case 502:
-					errorMessage = '网络错误';
+					errorMessage = t('common.network_error');
 					break;
 				case 503:
-					errorMessage = '服务不可用';
+					errorMessage = t('common.service_unavailable');
 					break;
 				case 504:
-					errorMessage = '网络超时';
+					errorMessage = t('common.network_timeout');
 					break;
 				case 505:
-					errorMessage = 'HTTP 版本不受支持';
+					errorMessage = t('common.http_not_supported');
 					break;
 			}
-			if (error.errMsg.includes('timeout')) errorMessage = '请求超时';
+			if (error.errMsg.includes('timeout')) errorMessage = t('common.request_timeout');
 			// #ifdef H5
 			if (error.errMsg.includes('Network'))
-				errorMessage = window.navigator.onLine ? '服务器异常' : '请检查您的网络连接';
+				errorMessage = window.navigator.onLine ? t('common.server_exception') : t('common.check_network_connection');
 			// #endif
 		}
 
@@ -285,7 +288,7 @@ const handleAuthorized = () => {
 	// 登录超时
 	return Promise.reject({
 		code: 401,
-		msg: userStore.isLogin ? '您的登陆已过期' : '请登录'
+		msg: userStore.isLogin ? t('common.login_expired') : t('common.please_login')
 	})
 }
 

+ 16 - 8
sheep/store/user.js

@@ -26,6 +26,10 @@ import PayWalletApi from '@/sheep/api/pay/wallet';
 import OrderApi from '@/sheep/api/trade/order';
 import CouponApi from '@/sheep/api/promotion/coupon';
 import { isAndroid,getAndroidJiGuangId } from '@/sheep/hooks/useApp'
+import {
+	t,
+	setLanguage
+} from '@/locale';
 const android = computed(() => isAndroid());
 const androidJiGuangId = computed(() => getAndroidJiGuangId());
 
@@ -160,15 +164,23 @@ const user = defineStore({
 				this.isLogin = true;
 				uni.setStorageSync('token', token);
 				uni.setStorageSync('refresh-token', refreshToken);
-				this.loginAfter();
+				await this.loginAfter();
 				
+				if (!this.userInfo.language) {
+					const language = uni.getStorageSync('userLanguage') //从缓存中拿到当前的语言
+					await UserApi.updateUser({language})
+					setLanguage(language)
+				}else{
+					setLanguage(this.userInfo.language)
+				}
+
 				// 用户未绑定公众号,则弹出绑定公众号的弹窗
 				const openid = await sheep.$platform.useProvider('wechat').getOpenid(true);
 				if(!openid) {
 					uni.showModal({
-						title: '常来此购',
-						content: '您未绑定微信,请先绑定',
-						confirmText: '绑定',
+						title: t('common.letcgo'),
+						content: t('common.not_bound_wechat'),
+						confirmText: t('common.bind'),
 						success: function(res) {
 							if (res.confirm) {
 								sheep.$platform.useProvider('wechat').bind()
@@ -231,8 +243,6 @@ const user = defineStore({
 			$share.getShareInfo();
 			// 自动签到
 			autoSign();
-			
-			
 			// 提醒绑定手机号
 			// if (app().platform.bind_mobile && !this.userInfo.mobile) {
 			// 	showAuthModal('changeMobile');
@@ -245,7 +255,6 @@ const user = defineStore({
 					...shareLog,
 				});
 			}
-			
 			setTimeout(async() => {
 				const openid = await sheep.$platform.useProvider('wechat').getOpenid(true);
 				if(!this.userInfo.subscribe && openid) {
@@ -254,7 +263,6 @@ const user = defineStore({
 					showSubscribeModal();
 				}
 			}, 800);
-			
 		},
 		
 		// 登出系统

+ 1 - 1
sheep/ui/su-navbar/su-navbar.vue

@@ -57,7 +57,7 @@
             <uni-search-bar
               class="ss-flex-1 search-box"
               :radius="20"
-              placeholder="请输入关键词"
+              :placeholder="$t('common.enter_keywords')"
               cancelButton="none"
               v-model="searchModel"
               @confirm="onSearch"

Nem az összes módosított fájl került megjelenítésre, mert túl sok fájl változott