Browse Source

feat:“优化商户管理和结算账号功能,添加切换登陆功能,添加切换支付平台功能”

soobin 1 năm trước cách đây
mục cha
commit
30edc86b54

+ 41 - 10
src/assets/language/en.json

@@ -233,6 +233,7 @@
     }
   },
   "device": {
+    "managementCenter": "Device Management Center",
     "setAlarm": "set alarm",
     "equipmentName": "Equipment name",
     "selectDevice": "Select Device",
@@ -474,6 +475,7 @@
     "noPosition": "No positioning",
     "equipLocation": "Equipment location",
     "position": "Position",
+    "viewPositioning": "View positioning",
     "view": "view",
     "oneKeyFeed": "One key feeding",
     "replenishment": "replenishment",
@@ -484,8 +486,8 @@
     "stick": "stick",
     "water": "water",
     "wasteWater": "wasteWater",
-    "turnOffHibe": "Turn off hibernation",
-    "enableSleep": "Enable Sleep",
+    "turnOffSleep": "Turn off Sleep",
+    "turnOnSleep": "Turn on Sleep",
     "communiChannel": "Communication channel",
     "tweets": "Tweets",
     "mq": "Mq",
@@ -541,7 +543,8 @@
     "export": "export",
     "apply": "apply",
     "discount": "discount",
-    "termOfValidity": "term of validity",
+    "termOfValidity": "Valid until",
+    "expired": "(Expired)",
     "validDays": "Valid days",
     "usingTheMachine": "Using the machine",
     "purchaseDiscountCode": "Purchase discount code",
@@ -625,15 +628,25 @@
   },
   "airwallex": {
     "sunzee": "Sunzee",
+    "checkout": "Checkout",
     "airwallex": "Airwallex",
     "wallet": "Airwallex wallet",
     "amount": "Airwallex amount",
     "payment": "New transfer",
     "paymentDetail": "Payment details",
     "payout": "Payout",
-    "beneficiary": "Beneficiary"
+    "beneficiary": "Beneficiary",
+    "payForIt": "Pay For This",
+    "cancelOrder": "Cancel Order",
+    "productName": "Product Name",
+    "productsNum": "Products Number",
+    "totalPrice": "Total Price",
+    "shoppingVoucher": "Shopping Voucher"
   },
   "joinpayMch": {
+    "huifuAuditStatus": "Huifu settled status",
+    "joinpayAuditStatus": "JoinpayMch settled status",
+    "settlementAccount": "Settlement account",
     "withdrawalAccountNo": "Standby withdrawal account No",
     "merchantNameLabel": "Merchant name",
     "merchantNamePlaceholder": "Please enter the merchant name",
@@ -698,6 +711,8 @@
     "uploYourIdCard": "Please upload your ID card",
     "uploPortrait": "Upload portrait",
     "uploNatiEmblem": "Upload the National Emblem",
+    "upStatementCard": "Please upload your statement card",
+    "statementCard": "Statement card front",
     "businessLicensePlace": "Please upload the business license",
     "businessLicense": "Enterprise business license",
     "accountOpeningLicensePlace": "Please upload the account opening license",
@@ -775,7 +790,11 @@
     "bankAccount": "bank account",
     "bankNo": "Bank No",
     "theTwoPasswordsAreDifferent": "The two passwords are different",
-    "modificationSucceeded": "Modification succeeded"
+    "modificationSucceeded": "Modification succeeded",
+    "joinpayMch":"JoinpayMch status",
+    "huifuMch":"HuifuMch Status",
+    "tips": "Remind",
+    "autoLogin": "Do you want to switch login?"
   },
   "orderCenter": {
     "orderCenter": "Order Center",
@@ -890,6 +909,7 @@
     "orderExport": "Order Export",
     "shandeSubLedger": "Shande Sub ledger",
     "salesRanking": "Sales Ranking",
+    "settlementAccount": "Settlement account",
     "withdrawalAccountNo": "Withdrawal account No",
     "standbyWithdrawalAccountNo": "Standby withdrawal account No",
     "dataOverview": "Data overview",
@@ -1159,7 +1179,7 @@
     "header": "User Registration",
     "usernameLabel": "Account name",
     "usernamePlaceholder": "Please enter the account name",
-    "usernameRequired": "Please enter the account name",
+    "usernameRequired": "Alphanumeric with letter as the first character",
     "nameLabel": "User Name",
     "namePlaceholder": "Please enter the user name",
     "nameRequired": "Please enter the user name",
@@ -1175,7 +1195,7 @@
     "logonMode": "Logon mode",
     "phoneLabel": "Phone number",
     "phonePlaceholder": "Please enter your mobile number",
-    "phoneRequired": "Please enter your mobile number",
+    "phoneRequired": "Please enter the correct mobile number",
     "seedVerCode": "Send verification code",
     "codeLabel": "verification code",
     "codePlaceholder": "Please enter SMS verification code",
@@ -1188,8 +1208,8 @@
     "emailCodeRequired": "Please enter the email verification code",
     "registerButton": "Register",
     "replaysInSeconds": "Replays in seconds",
-    "emailRegistration": "Email registration",
-    "phoneRegistration": "Phone registration"
+    "emailRegistration": "Email",
+    "phoneRegistration": "Phone"
   },
   "robotRanking": {
     "machineSalesRanking": "Machine sales ranking",
@@ -1224,6 +1244,7 @@
     "rankMethod": "Ranking method"
   },
   "user": {
+    "personalCenter": "Personal Center",
     "essentialInformation": "essential information",
     "systemId": "System id",
     "myAccount": "My Account",
@@ -1238,6 +1259,7 @@
     "associateParentPlace": "Please enter the related superior",
     "commonOperations": "Common Operations",
     "taskMessage": "Task Message",
+    "settlementAccount": "Settlement account",
     "withdrawalAccountNo": "Withdrawal account No",
     "standbyWithdrawalAccountNo": "Standby withdrawal account No",
     "changePassword": "Change Password",
@@ -1250,7 +1272,15 @@
     "corrEmailPlace": "Please enter the correct email address",
     "corrPhonePlace": "Please enter the correct mobile number",
     "bindWechat": "Bind WeChat",
-    "airwallex": "Airwallex"
+    "airwallex": "Airwallex",
+    "currencySymbol": "Custom Currency",
+    "currencySymbolPlace": "Please enter currency symbol",
+    "szPayType": "Sunzee payment",
+    "scPayType": "Sevencloud payment",
+    "currentChoose": "Current selection",
+    "tips": "Remind",
+    "changeTips": "Whether to switch payment platforms?",
+    "changeSuccess": "Switchover successful"
   },
   "bindWechat": {
     "cancel": "Cancel",
@@ -1330,6 +1360,7 @@
     "title": "Acount operation",
     "accountAuthority": "Account authority",
     "distributionSettings": "Distribution Settings",
+    "settlementAccount": "Settlement account",
     "withdrawalAccountNo": "Standby withdrawal account No",
     "standbyWithdrawalAccountNo": "Standby withdrawal account No",
     "merchantManagement": "Merchant management",

+ 40 - 9
src/assets/language/zh.json

@@ -233,6 +233,7 @@
     }
   },
   "device": {
+    "managementCenter": "设备管理中心",
     "setAlarm": "设置闹钟",
     "equipmentName": "设备名称",
     "selectDevice": "选择设备",
@@ -490,6 +491,7 @@
     "noPosition": "暂无定位",
     "equipLocation": "设备位置",
     "position": "定位",
+    "viewPositioning": "查看定位",
     "view": "查看",
     "oneKeyFeed": "一键补料",
     "replenishment": "补料",
@@ -501,8 +503,8 @@
     "water": "清水",
     "wasteWater": "废水",
     "sentSuccessfully": "发送请求成功",
-    "turnOffHibe": "关闭休眠",
-    "enableSleep": "开启休眠",
+    "turnOffSleep": "关闭睡眠",
+    "turnOnSleep": "开启睡眠",
     "communiChannel": "通信通道",
     "tweets": "个推",
     "mq": "Mq",
@@ -542,7 +544,8 @@
     "export": "导出",
     "apply": "申请",
     "discount": "折扣",
-    "termOfValidity": "有效期",
+    "termOfValidity": "有效期至",
+    "expired": "(已过期)",
     "validDays": "有效天数",
     "usingTheMachine": "使用机器",
     "purchaseDiscountCode": "购买优惠码",
@@ -626,15 +629,25 @@
   },
   "airwallex": {
     "sunzee": "申泽智能",
+    "checkout": "结算",
     "airwallex": "空中云汇",
     "wallet": "空中云汇钱包",
     "amount": "钱包金额",
     "payment": "付款转账",
     "paymentDetail": "付款详情",
     "payout": "付款单",
-    "beneficiary": "收款人"
+    "beneficiary": "收款人",
+    "payForIt": "立即支付",
+    "cancelOrder": "取消订单",
+    "productName": "商品名称",
+    "productsNum": "商品数量",
+    "totalPrice": "合计金额",
+    "shoppingVoucher": "购物凭证"
   },
   "joinpayMch": {
+    "huifuAuditStatus": "汇付入驻状态",
+    "joinpayAuditStatus": "汇聚入驻状态",
+    "settlementAccount": "结算账号",
     "withdrawalAccountNo": "备用提现账号",
     "merchantNameLabel": "商户名称",
     "merchantNamePlaceholder": "请输入商户名称",
@@ -699,6 +712,8 @@
     "uploYourIdCard": "请上传身份证",
     "uploPortrait": "上传人像面",
     "uploNatiEmblem": "上传国徽面",
+    "upStatementCard": "请上传结算卡",
+    "statementCard": "结算卡正面",
     "businessLicensePlace": "请上传企业营业执照",
     "businessLicense": "企业营业执照",
     "accountOpeningLicensePlace": "请上传开户许可证",
@@ -774,9 +789,13 @@
     "corporateAccount": "对公账户",
     "bankAccountName": "银行账户名称",
     "bankAccount": "银行账号",
-    "bankNo": "行号",
+    "bankNo": "行号",
     "theTwoPasswordsAreDifferent": "两次密码输入不相同",
-    "modificationSucceeded": "修改成功"
+    "modificationSucceeded": "修改成功",
+    "joinpayMch": "汇聚账号状态",
+    "huifuMch": "汇付账号状态",
+    "tips": "提醒",
+    "autoLogin": "是否切换登陆?"
   },
   "orderCenter": {
     "orderCenter": "订单中心",
@@ -897,6 +916,7 @@
     "orderExport": "订单导出",
     "shandeSubLedger": "杉德分账",
     "salesRanking": "销售排行",
+    "settlementAccount": "结算账号",
     "withdrawalAccountNo": "提现账号",
     "standbyWithdrawalAccountNo": "备用提现账号",
     "dataOverview": "数据概览",
@@ -1171,7 +1191,7 @@
     "header": "用户注册",
     "usernameLabel": "账号名称",
     "usernamePlaceholder": "请输入账号名称",
-    "usernameRequired": "请输入账号名称",
+    "usernameRequired": "账号名称由字母或数字组成,且只能字母开头",
     "nameLabel": "用户姓名",
     "namePlaceholder": "请输入用户姓名",
     "nameRequired": "请输入用户姓名",
@@ -1187,7 +1207,7 @@
     "logonMode": "注册方式",
     "phoneLabel": "手机号码",
     "phonePlaceholder": "请输入手机号码",
-    "phoneRequired": "请输入手机号码",
+    "phoneRequired": "请输入正确的手机号码",
     "emailWordSpan": "输入注册海外账户邮箱",
     "emailWordSpanChina": "输入注册时的国内邮箱",
     "seedVerCode": "发送验证码",
@@ -1238,6 +1258,7 @@
     "rankMethod": "排行方式"
   },
   "user": {
+    "personalCenter": "个人中心",
     "essentialInformation": "基本信息",
     "systemId": "系统id",
     "myAccount": "我的账号",
@@ -1252,6 +1273,7 @@
     "associateParentPlace": "请输入关联上级",
     "commonOperations": "常用操作",
     "taskMessage": "任务消息",
+    "settlementAccount": "结算账号",
     "withdrawalAccountNo": "提现账号",
     "standbyWithdrawalAccountNo": "备用提现账号",
     "changePassword": "修改密码",
@@ -1264,7 +1286,15 @@
     "corrEmailPlace": "请输入正确的邮箱",
     "corrPhonePlace": "请输入正确的手机号",
     "bindWechat": "绑定微信",
-    "airwallex": "空中云汇"
+    "airwallex": "空中云汇",
+    "currencySymbol": "自定义货币",
+    "currencySymbolPlace": "请输入自定义货币",
+    "szPayType": "申泽支付平台",
+    "scPayType": "七云支付平台",
+    "currentChoose": "当前选择",
+    "tips": "提醒",
+    "changeTips": "是否切换支付平台?",
+    "changeSuccess": "切换成功"
   },
   "bindWechat": {
     "cancel": "取消",
@@ -1344,6 +1374,7 @@
     "title": "账户操作",
     "accountAuthority": "账户权限",
     "distributionSettings": "分销设置",
+    "settlementAccount": "结算账号",
     "withdrawalAccountNo": "提现账号",
     "standbyWithdrawalAccountNo": "备用提现账号",
     "merchantManagement": "商户管理",

+ 8 - 1
src/router/index.js

@@ -195,6 +195,13 @@ const router = createRouter({
       component: () => import("@/views/joinpayMch/index"),
       meta: { index: 1 },
     },
+    // 结算账号
+    {
+      path: "/settlement",
+      name: "settlement",
+      component: () => import("@/views/settlement/index"),
+      meta: { index: 1 },
+    },
     // 自充值
     {
       path: "/uniPay",
@@ -462,7 +469,7 @@ const router = createRouter({
       component: () => import("@/views/device/editAdRule/index"),
       meta: { index: 1 },
     },
-    // 跳转空中云汇
+    // 跳转空中云汇收单-消费者付款
     {
       path: "/hpp",
       name: "Hpp",

+ 15 - 0
src/service/huifuMch/index.js

@@ -16,6 +16,11 @@ export function uploadPic(params) {
     return axios.post(`/SZWL-SERVER/tHuifuMch/uploadPic`, params);
 }
 
+// 新上传材料图片
+export function newUploadPic(params) {
+    return axios.post(`/SZWL-SERVER/tHuifuMch/newUploadPic`, params);
+}
+
 // 提交审核
 export function submitHuifuCheck(params) {
     return axios.post(`/SZWL-SERVER/tHuifuMch/submitCheck`, params);
@@ -36,3 +41,13 @@ export function getHuifuId(params) {
     return axios.get(`/SZWL-SERVER/tHuifuMch/getHuifuId?${stringToUrl(params)}`);
 }
 
+// 直接审核商户修改
+export function auditMerchantUpdate(params) {
+    return axios.post(`/SZWL-SERVER/tHuifuMch/auditMerchantUpdate`, params);
+}
+
+// 汇付账号修改审批
+export function auditUpdateMerchant(params) {
+    return axios.get(`/SZWL-SERVER/tHuifuMch/auditUpdateMerchant?${stringToUrl(params)}`);
+}
+

+ 12 - 0
src/service/joinpayMch/index.js

@@ -17,7 +17,19 @@ export function updateJoinPayMchCheck(params) {
 export function sentImage(params) {
   return axios.post(`/SZWL-SERVER/tJoinpayMch/sentImage`, params);
 }
+// 更新图片审核情况
+export function updateApproveStatus(params) {
+  return axios.post(`/SZWL-SERVER/tJoinpayMch/updateApproveStatus`, params);
+}
 // 签约
 export function altMchSign(params) {
   return axios.get(`/SZWL-SERVER/tJoinpayMch/altMchSign?${stringToUrl(params)}`);
 }
+// 汇付账号入驻审批
+export function auditAddMerchant(params) {
+  return axios.get(`/SZWL-SERVER/tHuifuMch/auditAddMerchant?${stringToUrl(params)}`);
+}
+// 更新汇付签约状态
+export function updateConStat(params) {
+  return axios.post(`/SZWL-SERVER/tHuifuMch/updateConStat`, params);
+}

+ 8 - 0
src/service/merchantManage/index.js

@@ -27,3 +27,11 @@ export function updateAdmin(params) {
   // tAdmin/update
   return axios.post(`/SZWL-SERVER/tAdmin/update`, params);
 }
+// 获取汇付信息
+export function getHuifuMch(params) {
+  return axios.get(`/SZWL-SERVER/tHuifuMch/getHuifuMchCheck?${stringToUrl(params)}`);
+}
+// 切换登陆
+export function autoLoginMerchant(params) {
+  return axios.get(`/SZWL-SERVER/tAdmin/autoLogin?${stringToUrl(params)}`);
+}

+ 9 - 1
src/service/user.js

@@ -23,4 +23,12 @@ export function Api_getArea(params) {
 // 地址回显
 export function Api_getAreaDetail(params) {
   return axios.get(`/SZWL-SERVER/tArea/getById`, {params});
-}
+}
+// 是否海外用户
+export function getIfForeign(adminId) {
+  return axios.get(`/SZWL-SERVER/tAdmin/getIfForeign/${adminId}`);
+}
+// 批量修改支付平台
+export function updatePayPlatform(params) {
+  return axios.get(`/SZWL-SERVER/tAdmin/updatePayPlatform?${stringToUrl(params)}`, params);
+} 

+ 25 - 2
src/styles/device/index.less

@@ -291,6 +291,21 @@
               line-height: 13px;
             }
 
+            .clickable-link {
+              text-decoration: underline;
+              cursor: pointer;
+              font-size: 14px;
+            }
+            // .clickable-link:active {
+            //   color: rgb(26, 49, 117);
+            // }
+            .replenishment {
+              text-decoration: underline;
+              cursor: pointer;
+              font-size: 14px;
+              color: #4d6add;
+            }
+
             .layer5 {
               width: 100%;
 
@@ -342,7 +357,7 @@
             }
 
             .editDeviceBtnCon {
-              color: #2c87c8;
+              // color: #2c87c8;
 
               .box2 {
                 width: 18px;
@@ -351,6 +366,14 @@
                 background-size: 100%;
                 margin-top: 2px;
               }
+              .c-text-14 {
+                display: inline-block; /* 将行内文本转为块级元素 */
+                padding: 5px 15px; /* 添加内边距 */
+                background-color: #df5e4c;
+                border-radius: 14px; /* 添加圆角效果 */
+                color: #fff; /* 设置文本颜色 */
+                cursor: pointer; /* 设置光标样式 */
+              }
             }
 
             .bd8 {
@@ -522,7 +545,7 @@
 
             .info2 {
               overflow-wrap: break-word;
-              color: rgba(135, 135, 166, 1);
+              color: #2c87c8;
               font-size: 14px;
               text-align: center;
               white-space: nowrap;

+ 2 - 2
src/styles/discountCode/index.less

@@ -115,8 +115,8 @@
                     margin-right: 15px;
                     text-align: center;
                     background-color: #EDF0FC;
-                    color: #A5B4EE;
-                    border: 1px solid #A5B4EE;
+                    color: #e16959;
+                    border: 1px solid #7b91ea;
                     position: relative;
                 }
             }

+ 7 - 5
src/styles/home/index.less

@@ -49,11 +49,13 @@
         overflow-wrap: break-word;
         white-space: nowrap;
         line-height: 16px;
+        font-size: 15px;
         // margin-left: 36px;
         display: block;
       }
 
       .word2 {
+        font-size: 15px;
         height: 16px;
         overflow-wrap: break-word;
         white-space: nowrap;
@@ -118,8 +120,8 @@
           .txt10 {
             height: 17px;
             overflow-wrap: break-word;
-            color: rgba(64, 77, 116, 1);
-            font-size: 12px;
+            color: #2c87c8;
+            font-size: 14px;
             text-align: center;
             white-space: nowrap;
             line-height: 17px;
@@ -178,7 +180,7 @@
             height: 17px;
             overflow-wrap: break-word;
             color: rgba(135, 135, 166, 1);
-            font-size: 12px;
+            font-size: 15px;
             text-align: center;
             white-space: nowrap;
             line-height: 17px;
@@ -212,7 +214,7 @@
               height: 17px;
               overflow-wrap: break-word;
               color: rgba(135, 135, 166, 1);
-              font-size: 12px;
+              font-size: 15px;
               text-align: center;
               white-space: nowrap;
               line-height: 17px;
@@ -247,7 +249,7 @@
               height: 17px;
               overflow-wrap: break-word;
               color: rgba(135, 135, 166, 1);
-              font-size: 12px;
+              font-size: 15px;
               text-align: center;
               white-space: nowrap;
               line-height: 17px;

+ 230 - 219
src/styles/merchantManage/index.less

@@ -1,245 +1,256 @@
 .merchantPage {
-  width: 100%;
-
-  .merchantBox {
     width: 100%;
-    height: calc(100% - 44px);
-    overflow: auto;
-    overflow-x: hidden;
-
-    .searchRow {
-      width: 90%;
-      height: 48px;
-      margin: 0 auto;
-      background: rgba(255, 255, 255, 1) url("../../assets/home/line.png") bottom center no-repeat;
-      background-size: 100%;
-      align-items: center;
-
-      .bd3 {
-        width: 87px;
-        height: 16px;
-
-        .info2 {
-          height: 14px;
-          overflow-wrap: break-word;
-          color: rgba(64, 77, 116, 1);
-          font-size: 15px;
-          font-family: PingFangSC-Semibold;
-          text-align: left;
-          white-space: nowrap;
-          line-height: 15px;
-          margin-top: 3px;
-          display: block;
-        }
 
-        .info3 {
-          overflow-wrap: break-word;
-          color: #c84b2c;
-          font-size: 20px;
-          font-family: PingFangSC-Semibold;
-          text-align: left;
-          white-space: nowrap;
-          line-height: 20px;
-          display: block;
-          margin: 0 .3em;
-        }
+    .merchantBox {
+        width: 100%;
+        height: calc(100% - 44px);
+        overflow: auto;
+        overflow-x: hidden;
 
-        .info4 {
-          height: 14px;
-          overflow-wrap: break-word;
-          color: rgba(64, 77, 116, 1);
-          font-size: 15px;
-          font-family: PingFangSC-Semibold;
-          text-align: left;
-          white-space: nowrap;
-          line-height: 15px;
-          display: block;
-          margin-top: 3px;
-        }
-      }
+        .searchRow {
+            width: 90%;
+            height: 48px;
+            margin: 0 auto;
+            background: rgba(255, 255, 255, 1) url("../../assets/home/line.png") bottom center no-repeat;
+            background-size: 100%;
+            align-items: center;
 
-      .main5 {
-        width: 39px;
-        height: 16px;
+            .bd3 {
+                width: 87px;
+                height: 16px;
 
-        .label2 {
-          width: 14px;
-          height: 14px;
-          margin-top: 1px;
-        }
+                .info2 {
+                    height: 14px;
+                    overflow-wrap: break-word;
+                    color: rgba(64, 77, 116, 1);
+                    font-size: 15px;
+                    font-family: PingFangSC-Semibold;
+                    text-align: left;
+                    white-space: nowrap;
+                    line-height: 15px;
+                    margin-top: 3px;
+                    display: block;
+                }
 
-        .TextGroup2 {
-          height: 16px;
-          width: 22px;
-
-          .txt3 {
-            width: 22px;
-            height: 16px;
-            overflow-wrap: break-word;
-            color: rgba(64, 77, 116, 1);
-            font-size: 11px;
-            text-align: center;
-            white-space: nowrap;
-            line-height: 16px;
-            display: block;
-          }
-        }
-      }
-    }
+                .info3 {
+                    overflow-wrap: break-word;
+                    color: #c84b2c;
+                    font-size: 20px;
+                    font-family: PingFangSC-Semibold;
+                    text-align: left;
+                    white-space: nowrap;
+                    line-height: 20px;
+                    display: block;
+                    margin: 0 .3em;
+                }
 
-    .main4 {
-      width: 100%;
-      justify-content: space-between;
-      padding: 15px;
-
-      .bd1 {
-        box-shadow: 1px 1px 4px 2px rgba(70, 95, 198, 0.14);
-        background-color: rgba(255, 255, 255, 1);
-        border-radius: 4px;
-        height: 206px;
-        margin: 0 auto;
-        margin-bottom: 20px;
-        width: 100%;
+                .info4 {
+                    height: 14px;
+                    overflow-wrap: break-word;
+                    color: rgba(64, 77, 116, 1);
+                    font-size: 15px;
+                    font-family: PingFangSC-Semibold;
+                    text-align: left;
+                    white-space: nowrap;
+                    line-height: 15px;
+                    display: block;
+                    margin-top: 3px;
+                }
+            }
 
-        .outer2 {
-          width: 100%;
-          padding: 20px;
+            .main5 {
+                width: 39px;
+                height: 16px;
 
-          .box2 {
-            width: 100%;
-            height: 14px;
-
-            .word3 {
-              width: 202px;
-              height: 13px;
-              overflow-wrap: break-word;
-              color: rgba(64, 77, 116, 1);
-              font-size: 14px;
-              font-family: PingFangSC-Semibold;
-              text-align: left;
-              white-space: nowrap;
-              line-height: 14px;
-              display: block;
-            }
+                .label2 {
+                    width: 14px;
+                    height: 14px;
+                    margin-top: 1px;
+                }
+
+                .TextGroup2 {
+                    height: 16px;
+                    width: 22px;
 
-            .group6 {
-              width: 6px;
-              height: 12px;
-              background: url(https://lanhu.oss-cn-beijing.aliyuncs.com/SketchPng51122feddbc4a9b3e0b055ed6181d290e60825befaa5c777794f1412ff817e57) top center no-repeat;
-              background-size: 100%;
-              margin-top: 2px;
+                    .txt3 {
+                        width: 22px;
+                        height: 16px;
+                        overflow-wrap: break-word;
+                        color: rgba(64, 77, 116, 1);
+                        font-size: 11px;
+                        text-align: center;
+                        white-space: nowrap;
+                        line-height: 16px;
+                        display: block;
+                    }
+                }
             }
-          }
-
-          .word4 {
-            width: 122px;
-            height: 13px;
-            overflow-wrap: break-word;
-            color: rgba(64, 77, 116, 1);
-            font-size: 13px;
-            text-align: left;
-            white-space: nowrap;
-            line-height: 13px;
-            margin-top: 9px;
-            display: block;
-          }
-
-          .word5 {
-            width: 162px;
-            height: 13px;
-            overflow-wrap: break-word;
-            color: rgba(64, 77, 116, 1);
-            font-size: 13px;
-            text-align: left;
-            white-space: nowrap;
-            line-height: 13px;
-            margin-top: 10px;
-            display: block;
-          }
-
-          .word6 {
-            width: 177px;
-            height: 13px;
-            overflow-wrap: break-word;
-            color: rgba(64, 77, 116, 1);
-            font-size: 13px;
-            text-align: left;
-            white-space: nowrap;
-            line-height: 13px;
-            margin-top: 10px;
-            display: block;
-          }
-
-          .info6 {
-            width: 130px;
-            height: 13px;
-            overflow-wrap: break-word;
-            color: rgba(64, 77, 116, 1);
-            font-size: 13px;
-            text-align: left;
-            white-space: nowrap;
-            line-height: 13px;
-            margin-top: 10px;
-            display: block;
-          }
-
-          .txt2 {
-            width: 110px;
-            height: 13px;
-            overflow-wrap: break-word;
-            color: rgba(64, 77, 116, 1);
-            font-size: 13px;
-            text-align: left;
-            white-space: nowrap;
-            line-height: 13px;
-            margin-top: 10px;
-            display: block;
-          }
-
-          .box3 {
-            background-color: rgba(246, 247, 252, 1);
-            border-radius: 1px;
-            height: 26px;
-            margin-top: 10px;
+        }
+
+        .main4 {
             width: 100%;
+            justify-content: space-between;
+            padding: 15px;
+
+            .bd1 {
+                box-shadow: 1px 1px 4px 2px rgba(70, 95, 198, 0.14);
+                background-color: rgba(255, 255, 255, 1);
+                border-radius: 4px;
+                height: 250px;
+                margin: 0 auto;
+                margin-bottom: 20px;
+                width: 100%;
+
+                .outer2 {
+                    width: 100%;
+                    padding: 20px;
+
+                    .box2 {
+                        width: 100%;
+                        height: 14px;
+
+                        .word3 {
+                            width: 202px;
+                            height: 13px;
+                            overflow-wrap: break-word;
+                            color: rgba(64, 77, 116, 1);
+                            font-size: 14px;
+                            font-family: PingFangSC-Semibold;
+                            text-align: left;
+                            white-space: nowrap;
+                            line-height: 14px;
+                            display: block;
+                        }
 
-            .txt3 {
-              width: 184px;
-              height: 13px;
-              overflow-wrap: break-word;
-              color: rgba(135, 135, 166, 1);
-              font-size: 12px;
-              text-align: left;
-              white-space: nowrap;
-              line-height: 13px;
-              display: block;
-              margin: 8px 0 0 10px;
+                        .group6 {
+                            width: 6px;
+                            height: 12px;
+                            background: url(https://lanhu.oss-cn-beijing.aliyuncs.com/SketchPng51122feddbc4a9b3e0b055ed6181d290e60825befaa5c777794f1412ff817e57) top center no-repeat;
+                            background-size: 100%;
+                            margin-top: 2px;
+                        }
+                    }
+
+                    .word4 {
+                        width: 122px;
+                        height: 13px;
+                        overflow-wrap: break-word;
+                        color: rgba(64, 77, 116, 1);
+                        font-size: 13px;
+                        text-align: left;
+                        white-space: nowrap;
+                        line-height: 13px;
+                        margin-top: 9px;
+                        display: block;
+                    }
+
+                    .word5 {
+                        width: 162px;
+                        height: 13px;
+                        overflow-wrap: break-word;
+                        color: rgba(64, 77, 116, 1);
+                        font-size: 13px;
+                        text-align: left;
+                        white-space: nowrap;
+                        line-height: 13px;
+                        margin-top: 10px;
+                        display: block;
+                    }
+
+                    .word6 {
+                        width: 177px;
+                        height: 13px;
+                        overflow-wrap: break-word;
+                        color: rgba(64, 77, 116, 1);
+                        font-size: 13px;
+                        text-align: left;
+                        white-space: nowrap;
+                        line-height: 13px;
+                        margin-top: 10px;
+                        display: block;
+                    }
+
+                    .info6 {
+                        width: 130px;
+                        height: 13px;
+                        overflow-wrap: break-word;
+                        color: rgba(64, 77, 116, 1);
+                        font-size: 13px;
+                        text-align: left;
+                        white-space: nowrap;
+                        line-height: 13px;
+                        margin-top: 10px;
+                        display: block;
+                    }
+
+                    .txt2 {
+                        width: 110px;
+                        height: 13px;
+                        overflow-wrap: break-word;
+                        color: rgba(64, 77, 116, 1);
+                        font-size: 13px;
+                        text-align: left;
+                        white-space: nowrap;
+                        line-height: 13px;
+                        margin-top: 10px;
+                        display: block;
+                    }
+
+                    .box3 {
+                        background-color: rgba(246, 247, 252, 1);
+                        border-radius: 1px;
+                        height: 26px;
+                        margin: 10px 0;
+                        width: 100%;
+
+                        .txt3 {
+                            width: 184px;
+                            height: 13px;
+                            overflow-wrap: break-word;
+                            color: rgba(135, 135, 166, 1);
+                            font-size: 12px;
+                            text-align: left;
+                            white-space: nowrap;
+                            line-height: 13px;
+                            display: block;
+                            margin: 8px 0 0 10px;
+                        }
+                    }
+                    
+                    .button-container {
+                        display: flex;
+                        justify-content: center;
+
+                        .btn1 {
+                            margin: 0 30px;
+                            padding: 0 20px;
+                        }
+                    }
+                }
             }
-          }
         }
-      }
     }
-  }
 }
+
 .codeSearch {
-  width: 100%;
+    width: 100%;
 
-  .codeSearchPopup {
-    width: 90%;
-  }
+    .codeSearchPopup {
+        width: 90%;
+    }
 
-  .content {
-    padding-top: 1em;
-  }
+    .content {
+        padding-top: 1em;
+    }
 
-  .field .van-field__label {
-    width: auto;
-  }
+    .field .van-field__label {
+        width: auto;
+    }
 
-  .van-button--primary {
-    border-color: #2c87c8;
-    background-color: #2c87c8;
-  }
+    .van-button--primary {
+        border-color: #2c87c8;
+        background-color: #2c87c8;
+    }
 }
 
 .merchantSetPage {

+ 9 - 6
src/styles/orderCenter/index.less

@@ -252,7 +252,8 @@
         .wrap1 {
           width: 100%;
           height: 30px;
-          padding: 0 12px;
+          padding: 0 12px 5px;
+          align-items: center;
 
           .ImageText7 {
             height: 18px;
@@ -284,7 +285,7 @@
                   font-family: PingFangSC-Semibold;
                   text-align: left;
                   white-space: nowrap;
-                  line-height: 14px;
+                  line-height: 12px;
                   display: block;
                 }
               }
@@ -292,16 +293,18 @@
           }
 
           .ImageText8 {
-            height: 16px;
+            height: 18px;
+            margin-top: 1px;
+            width: 79px;
 
             .bd3 {
               height: 16px;
 
               .info4 {
-                height: 16px;
+                height: 14px;
                 overflow-wrap: break-word;
-                color: rgba(64, 77, 116, 1);
-                font-size: 11px;
+                color: #2c87c8;
+                font-size: 14px;
                 text-align: center;
                 white-space: nowrap;
                 line-height: 16px;

+ 3 - 3
src/utils/axios.js

@@ -64,9 +64,9 @@ service.interceptors.response.use(res => {
       case '00000':
         break;
       default:
-        if(res.data.message){
-          Toast.fail(res.data.message)
-        }
+        // if(res.data.message){
+        //   Toast.fail(res.data.message)
+        // }
         break;
     }
     if (res.data.code === 'L0006') {

+ 6 - 0
src/utils/dateUtil.js

@@ -43,6 +43,12 @@ const dateUtil = {
     }
     return format;
   },
+  formatDate(dateString) {
+    const year = dateString.slice(0, 4);
+    const month = dateString.slice(4, 6);
+    const day = dateString.slice(6, 8);
+    return `${year}-${month}-${day}`;
+  },
   // 根据时区转换时间
   timeZoneDate(currentDate) {
     // 获取设备的时区偏移量(分钟)

+ 232 - 133
src/views/Hpp.vue

@@ -1,93 +1,176 @@
 <template>
-  <div>
-    <h2>申泽智能</h2>
-    <button @click="redirectHpp()">Redirect to HPP</button>
-  </div>
+	<div>
+		<s-header :name="$t('airwallex.checkout')" :noback="true"></s-header>
+		<div>
+			<!-- <h2 style="text-align: center;">{{ $t('airwallex.sunzee') }}</h2> -->
+
+			<!-- 这里展示商品名称 * 商品数量  价格 -->
+			<div class="checkout">
+				<br>
+				<br>
+				<span style="text-align: center; display: block; font-size: medium; font-weight: bold;"> {{
+					$t('airwallex.shoppingVoucher') }}
+				</span>
+				<br>
+				<br>
+				<!-- 商品图片 -->
+				<!-- <span style="text-align: center; display: block;">
+					<van-image width="100" height="100" src="https://fastly.jsdelivr.net/npm/@vant/assets/cat.jpeg" />
+				</span> -->
+				<!-- 订单号  订单状态   订单金额 商品名称  数量 -->
+				<van-cell-group inset>
+					<van-cell :title="$t('airwallex.productName')">{{ productsName }}</van-cell>
+					<van-cell :title="$t('airwallex.productsNum')">{{ productsNum }}</van-cell>
+					<van-cell :title="$t('airwallex.totalPrice')">{{ totalPrice }}</van-cell>
+				</van-cell-group>
+
+				<br>
+				<br>
+				<br>
+				<div class="button-container">
+					<!-- 取消按钮 -->
+					<van-button color="#ee0a24" plain @click="cancelOrder()" round>{{ $t('airwallex.cancelOrder')
+					}}</van-button>
+					<!-- 支付按钮 -->
+					<van-button color="linear-gradient(to right, #ff6034, #ee0a24)" @click="redirectHpp()" round>{{
+						$t('airwallex.payForIt') }}</van-button>
+				</div>
+			</div>
+
+			<!-- <div>
+				<van-cell-group inset>
+					<van-cell title="单元格" value="内容" />
+					<van-cell title="单元格" value="内容" label="描述信息" />
+				</van-cell-group>
+			</div> -->
+
+			<!-- <div>
+				<van-contact-card type="edit" :tel="tel" :name="name" @click="onEdit" />
+			</div> -->
+
+			<!-- <div>
+				<van-submit-bar :price="3050" button-text="提交订单" @submit="onSubmit" />
+			</div> -->
+
+			<!-- <van-card num="2" price="2.00" desc="描述信息" title="商品标题" /> -->
+
+		</div>
+	</div>
 </template>
 
 <script>
 import { redirectToCheckout, loadAirwallex } from 'airwallex-payment-elements';
 import { useRoute } from "vue-router";
+// import { useI18n } from "vue-i18n";
+// import { ref } from 'vue';
+import sHeader from "@/components/SimpleHeader";
 
 export default {
-  name: 'Hpp',
-  
-  setup() {
-	const mode = 'payment';
-	const route = useRoute();
-	// const router = useRouter();
-	console.log(route.query.intent_id)
-  	const redirectHppForCheckout = () => {
-  	  redirectToCheckout({
-  	    env: 'demo',
-  	    mode,
-  	    currency: route.query.currency,
-  	    intent_id: route.query.intent_id,
-  	    client_secret: route.query.client_secret,
-  		//主题
-  	    theme: {
-  	      fonts: [
-  	        {
-  	          src: 'https://checkout.airwallex.com/fonts/CircularXXWeb/CircularXXWeb-Regular.woff2',
-  	          family: 'AxLLCircular',
-  	          weight: 400,
-  	        },
-  	      ],
-  	    },
-  	    // successUrl: 'https://www.baidu.com', // 支付成功跳转页面
-  	    // failUrl: 'https://www.baidu.com', // 支付失败跳转页面
-  		logoUrl: '', //支付页面展示商户LOGO
-  	  });
-  	};
-  	const redirectHppForRecurring = () => {
-  	  redirectToCheckout({
-  	    env: 'demo',
-  	    // mode,
-  	    // currency,
-  	    // client_secret,
-  	    recurringOptions: {
-  	      card: {
-  	        next_triggered_by: 'customer',
-  	        merchant_trigger_reason: 'scheduled',
-  	        // currency,
-  	      },
-  	    },
-  	    theme: {
-  	      fonts: [
-  	        {
-  	          src: 'https://checkout.airwallex.com/fonts/CircularXXWeb/CircularXXWeb-Regular.woff2',
-  	          family: 'AxLLCircular',
-  	          weight: 400,
-  	        },
-  	      ],
-  	    },
-  	    // successUrl: 'https://www.google.com',
-  	    // failUrl: 'https://www.google.com',
-  	  });
-  	};
-  	loadAirwallex({
-  	  env: 'demo', // Can choose other production environments, 'staging | 'demo' | 'prod'
-  	});
-  	const redirectHpp = async () => {
-  	  try {
-  	    await loadAirwallex({
-  	      env: 'demo', 
-  	    });
-  	    if (mode === 'payment') {
-  	      redirectHppForCheckout();
-  	    } else if (mode === 'recurring') {
-  	      redirectHppForRecurring();
-  	    }
-  	  } catch (error) {
-  	    window.alert('There was an error with HPP redirection', error);
-  	  }
-  	};
-	return {
-	  redirectHpp,
-	  redirectHppForCheckout,
-	  redirectHppForRecurring
-	};
-  }
+	name: 'Hpp',
+	components: { sHeader },
+
+	setup() {
+		// const { t } = useI18n();
+		// 将语言始终设置为英文
+		const curLang = localStorage.getItem('curLang');
+		if (curLang !== 'en') {
+			// 将 urllang 设置为 "en"
+			localStorage.setItem('curLang', 'en');
+		}
+
+
+		const urlParams = new URLSearchParams(window.location.href.split('?')[1]);
+		// console.log("urlParams是>>>" + urlParams.toString());
+		const productsName = urlParams.get('productName');
+		// console.log("productsName的value是:::" + productsName);
+		const productsNum = urlParams.get('productsNum');
+		const totalPrice = urlParams.get('totalPrice');
+
+
+		const mode = 'payment';
+		const route = useRoute();
+		// console.log("route.query.intent_id>>>>>>>" + route.query.intent_id);
+		const redirectHppForCheckout = () => {
+			redirectToCheckout({
+				env: 'demo',
+				mode,
+				currency: route.query.currency,
+				intent_id: route.query.intent_id,
+				client_secret: route.query.client_secret,
+				//主题
+				theme: {
+					fonts: [
+						{
+							src: 'https://checkout.airwallex.com/fonts/CircularXXWeb/CircularXXWeb-Regular.woff2',
+							family: 'AxLLCircular',
+							weight: 400,
+						},
+					],
+				},
+				// successUrl: 'https://www.baidu.com', // 支付成功跳转页面
+				// failUrl: 'https://www.baidu.com', // 支付失败跳转页面
+				logoUrl: '', //支付页面展示商户LOGO
+			});
+		};
+		const redirectHppForRecurring = () => {
+			redirectToCheckout({
+				env: 'demo',
+				// mode,
+				// currency,
+				// client_secret,
+				recurringOptions: {
+					card: {
+						next_triggered_by: 'customer',
+						merchant_trigger_reason: 'scheduled',
+						// currency,
+					},
+				},
+				theme: {
+					fonts: [
+						{
+							src: 'https://checkout.airwallex.com/fonts/CircularXXWeb/CircularXXWeb-Regular.woff2',
+							family: 'AxLLCircular',
+							weight: 400,
+						},
+					],
+				},
+				// successUrl: 'https://www.google.com',
+				// failUrl: 'https://www.google.com',
+			});
+		};
+		loadAirwallex({
+			env: 'demo', // Can choose other production environments, 'staging | 'demo' | 'prod'
+		});
+		const redirectHpp = async () => {
+			try {
+				await loadAirwallex({
+					env: 'demo',
+				});
+				if (mode === 'payment') {
+					redirectHppForCheckout();
+				} else if (mode === 'recurring') {
+					redirectHppForRecurring();
+				}
+			} catch (error) {
+				window.alert('There was an error with HPP redirection', error);
+			}
+		};
+
+		const cancelOrder = async () => {
+			// 返回浏览器历史记录上一页
+			window.history.back();
+		}
+
+		return {
+			redirectHpp,
+			redirectHppForCheckout,
+			redirectHppForRecurring,
+			productsName,
+			productsNum,
+			totalPrice,
+			cancelOrder,
+		};
+	}
 };
 
 /* const intent_id = this.$route.query.intent_id;
@@ -97,50 +180,50 @@ const mode = 'payment';
 // console.log(this.intent_id);
 const redirectHppForCheckout = () => {
   redirectToCheckout({
-    env: 'demo',
-    mode,
-    currency,
-    intent_id,
-    client_secret,
+	env: 'demo',
+	mode,
+	currency,
+	intent_id,
+	client_secret,
 	//主题
-    theme: {
-      fonts: [
-        {
-          src: 'https://checkout.airwallex.com/fonts/CircularXXWeb/CircularXXWeb-Regular.woff2',
-          family: 'AxLLCircular',
-          weight: 400,
-        },
-      ],
-    },
-    successUrl: 'https://www.baidu.com', // 支付成功跳转页面
-    failUrl: 'https://www.baidu.com', // 支付失败跳转页面
+	theme: {
+	  fonts: [
+		{
+		  src: 'https://checkout.airwallex.com/fonts/CircularXXWeb/CircularXXWeb-Regular.woff2',
+		  family: 'AxLLCircular',
+		  weight: 400,
+		},
+	  ],
+	},
+	successUrl: 'https://www.baidu.com', // 支付成功跳转页面
+	failUrl: 'https://www.baidu.com', // 支付失败跳转页面
 	logoUrl: '', //支付页面展示商户LOGO
   });
 };
 const redirectHppForRecurring = () => {
   redirectToCheckout({
-    env: 'demo',
-    mode,
-    currency,
-    client_secret,
-    recurringOptions: {
-      card: {
-        next_triggered_by: 'customer',
-        merchant_trigger_reason: 'scheduled',
-        currency,
-      },
-    },
-    theme: {
-      fonts: [
-        {
-          src: 'https://checkout.airwallex.com/fonts/CircularXXWeb/CircularXXWeb-Regular.woff2',
-          family: 'AxLLCircular',
-          weight: 400,
-        },
-      ],
-    },
-    successUrl: 'https://www.google.com',
-    failUrl: 'https://www.google.com',
+	env: 'demo',
+	mode,
+	currency,
+	client_secret,
+	recurringOptions: {
+	  card: {
+		next_triggered_by: 'customer',
+		merchant_trigger_reason: 'scheduled',
+		currency,
+	  },
+	},
+	theme: {
+	  fonts: [
+		{
+		  src: 'https://checkout.airwallex.com/fonts/CircularXXWeb/CircularXXWeb-Regular.woff2',
+		  family: 'AxLLCircular',
+		  weight: 400,
+		},
+	  ],
+	},
+	successUrl: 'https://www.google.com',
+	failUrl: 'https://www.google.com',
   });
 };
 loadAirwallex({
@@ -148,28 +231,44 @@ loadAirwallex({
 });
 const redirectHpp = async () => {
   try {
-    await loadAirwallex({
-      env: 'demo', 
-    });
-    if (mode === 'payment') {
-      redirectHppForCheckout();
-    } else if (mode === 'recurring') {
-      redirectHppForRecurring();
-    }
+	await loadAirwallex({
+	  env: 'demo', 
+	});
+	if (mode === 'payment') {
+	  redirectHppForCheckout();
+	} else if (mode === 'recurring') {
+	  redirectHppForRecurring();
+	}
   } catch (error) {
-    window.alert('There was an error with HPP redirection', error);
+	window.alert('There was an error with HPP redirection', error);
   }
 };
 export default {
   name: 'Hpp',
   data() {
-    return {
-      redirectHpp,
+	return {
+	  redirectHpp,
 	  msg: this.$route.query.intent_id,
 	  intent_id: this.$route.query.intent_id,
 	  client_secret: this.$route.query.client_secret,
 	  currency: this.$route.query.currency
-    };
+	};
   },
 }; */
-</script>
+</script>
+<style>
+.button-container {
+	display: flex;
+	justify-content: space-between;
+}
+
+.button-container button {
+	margin: 0 30px;
+	/* 根据需要调整按钮与容器边缘的距离 */
+}
+
+body {
+	background-color: #f8f8f8;
+	/* 设置背景颜色 */
+}
+</style>

+ 5 - 3
src/views/airwallex/beneficiary.vue

@@ -204,13 +204,15 @@ export default {
                 // 请求后端接口 caBeneficiary
                 const respResult = await createBeneficiary(caBeneficiaryReq);
                 const beneficiaryId = respResult.data.beneficiary_id;
-                console.log("收款人id:", beneficiaryId);
-
+                // console.log("收款人id:", beneficiaryId);
+                
                 // if 成功,将 beneficiary_id 缓存下来,跳转到付款单页面
                 if (beneficiaryId) {
                     router.push({
                         path: '/airwallexPayout',
-                        query: { beneficiaryId: beneficiaryId }
+                        query: { 
+                            beneficiaryId: beneficiaryId,
+                        }
                     })
                 }    
 

+ 3 - 6
src/views/airwallex/index.vue

@@ -32,22 +32,19 @@ export default {
     setup() {
         styleUrl("airwallex")
         const router = useRouter();
-        // TODO: 设置默认金额为 100
         const amount = ref(0.00);
 
         const loginUserStr = localStorage.getItem('loginUser');
         const loginUser = JSON.parse(loginUserStr);
         const adminId = loginUser.id;
-
-        console.log("adminId>>>", adminId);
+        // console.log("adminId>>>", adminId);
 
         onMounted(async () => {
             try {
                 // 请求后端接口: 获取钱包信息
                 const resp = await getWallet(adminId);
-                console.log("resp>>>", resp);
-                console.log("resp.data>>>", resp.data);
-                // amount = resp.data.;
+                // console.log("resp.data>>>", resp.data);
+                amount.value = resp.data.accountAmount;
             } catch (error) {
                 console.error(error);
                 // 处理异常情况

+ 40 - 85
src/views/airwallex/payout.vue

@@ -5,6 +5,9 @@
         <div class="form-container">
             <div id="payout-form-container" class="payout-form-container" style="height: 100%;"></div>
         </div>
+        <br>
+        <br>
+        <br>
         <div class="button-container">
             <van-button type="primary" class="cancel" @click="handleCancel">取消</van-button>
             <van-button type="primary" class="register" @click="handleSubmit">继续</van-button>
@@ -21,6 +24,8 @@ import { getAuthCode } from '@/service/airwallex/index';
 import { onMounted, ref } from 'vue';
 import { styleUrl } from '../../common/js/utils';
 import { useRouter, useRoute } from 'vue-router';
+import { getWallet } from '@/service/airwallex/index';
+
 
 
 export default {
@@ -31,12 +36,24 @@ export default {
         const ready = ref(false);
         let payoutComponent;
 
+        const loginUserStr = localStorage.getItem("loginUser");
+        const loginUser = JSON.parse(loginUserStr);
+        const userId = loginUser.id;
+        // console.log("userId是 >>> " + userId);
+
         onMounted(async () => {
             try {
                 // 获取从 beneficiary 页面获取到的 beneficiaryId
                 // const beneficiaryId = router.currentRoute.value.query.beneficiaryId;
                 const beneficiaryId = route.query.beneficiaryId;
                 console.log("beneficiaryId >>> " + beneficiaryId);
+                
+                // 请求后端接口: 获取钱包信息
+                const resp = await getWallet(userId);
+                const sourceAmount = resp.data.accountAmount;
+                // console.log("sourceAmount >>> " + sourceAmount);
+
+                
 
                 // generate code_verifier
                 const codeVerifier = generateCodeVerifier();
@@ -70,10 +87,33 @@ export default {
                 payoutComponent = await createElement(eleType, {
                     defaultValues: {
                         beneficiary_id: beneficiaryId,
+                        source_amount: sourceAmount,
+                        source_currency: 'USD',
                         // payment_currency: 'USD',
+                    },
+                    customizations: {
+                        fields: {
+                            source_amount: {
+                                disabled: true,
+                            },
+                            source_currency: {
+                                disabled: true,
+                            },
+                            payment_amount: {
+                                disabled: true,
+                            },
+                            // payment_currency: {
+                            //     disabled: true,
+                            // },
+                            // swift_charge_option: {
+                            //     disabled: true, // 禁用swift方式下的选框
+                            //     hidden: true, // 隐藏swift方式下的选框
+                            // },
+                        }
                     }
                 });
 
+
                 payoutComponent.mount('#payout-form-container');
 
                 payoutComponent.on('ready', () => {
@@ -145,91 +185,6 @@ export default {
             }
         }
 
-        // const handleSubmit = async () => {
-        //     if (ready.value) {
-        //         const formResult = await payoutComponent.submit();
-        //         // Handle form results
-        //         console.log('submit 执行结果:', formResult);
-
-        //         const {
-        //             values, additionalInfo
-        //         } = formResult;
-
-        //         const {
-        //             beneficiary_id,
-        //             source_currency,
-        //             payment_method,
-        //             payment_currency,
-        //             // source_amount,
-        //             // fee_paid_by,
-        //             // payment_date,
-        //         } = values;
-
-
-        //         // 校验 values 参数
-        //         if (
-        //             !beneficiary_id ||
-        //             !payment_currency ||
-        //             !payment_method ||
-        //             // !reason ||
-        //             // !reference ||
-        //             !source_currency
-        //         ) {
-        //             throw new Error('缺少必要参数');
-        //         }
-
-        //         // const reason = ref(additionalInfo.reason);
-
-        //         // 
-        //         // setTimeout(() => {
-        //         //     additionalInfo.value = {
-        //         //         reason: {
-        //         //             label: "Audiovisual services",
-        //         //             value: "audio_visual_services"
-        //         //         },
-        //         //         // 其他理由...
-        //         //     }
-        //         // }, 1000)
-
-        //         // const reason = additionalInfo.value.additionalInfo
-        //         // const regference = additionalInfo
-
-        //         // 把这些参数都带去新的页面,然后再去新的页面获取reason 和 sdfsdfs,最后再去请问
-
-        //         // 构建请求数据对象
-        //         // 后端必须的参数 
-        //         // beneficiary_id, 
-        //         // payment_currency, 
-        //         // payment_method, 
-        //         // reason, 
-        //         // reference, 
-        //         // request_id, 
-        //         // source_currency
-        //         const caPaymentReq = {
-        //             beneficiary_id: beneficiary_id,
-        //             payment_currency: payment_currency,
-        //             payment_method: payment_method,
-        //             // reason: reason,
-        //             // reference: reference,
-        //             // request_id: request_id,
-        //             source_currency: source_currency
-        //         }
-
-        //         // 请求后端接口
-        //         const resultsResp = await createPayment(caPaymentReq);
-        //         console.log("resultResp>>>", resultsResp);
-
-        //         // if 成功,将 
-        //         // if (resultsResp.code === "00000") {
-        //         //     router.push({
-        //         //         path: '/caPayment',
-        //         //         query: { beneficiaryId: beneficiaryId }
-        //         //     })
-        //         // }
-
-        //     }
-        // };
-
 
         // 生成 code_verifier
         const dec2hex = (dec) => {

+ 4 - 4
src/views/device/deviceOper.vue

@@ -111,7 +111,7 @@
         </div>
         <div class="operText">{{ $t("device.showGoods") }}</div>
       </div>
-      <div v-if="device.machineType === '1'" class="operItem" @click="changePasswordClk()">
+      <div v-if="user.type < 3" class="operItem" @click="changePasswordClk()">
         <div class="operIcon">
           <img class="operImg" src="../../assets/device/operIcon/password.png" />
         </div>
@@ -199,7 +199,7 @@ export default {
     const device = ref({});
     const operType = ref("");
     // 休眠按钮
-    const sleepTitle = ref(t("device.enableSleep"));
+    const sleepTitle = ref(t("device.turnOnSleep"));
     // 初始化页面获取列表
     onMounted(async () => {
       // 加载样式
@@ -212,9 +212,9 @@ export default {
       show.value = true;
       // isSleep=true,机器属于休眠状态,按钮是关闭休眠
       if (device.value.isSleep) {
-        sleepTitle.value = t("device.turnOffHibe");
+        sleepTitle.value = t("device.turnOffSleep");
       } else {
-        sleepTitle.value = t("device.enableSleep");
+        sleepTitle.value = t("device.turnOnSleep");
       }
     };
     // 重启炉头

+ 6 - 4
src/views/device/deviceSet.vue

@@ -106,12 +106,13 @@
               </div>
             </template>
           </van-field>
-        </div><!-- 优惠码功能开关 -->
-        <!-- <van-field colon readonly :label="`${$t('device.coupon')}`" placeholder="">
+        </div>
+        <!-- 优惠码功能开关 -->
+        <!-- <van-field colon readonly :label="`${$t('device.coupon')}`" placeholder=""  v-if="user.type < 2 && user.ifForeign === '0' ">
           <template #input>
             <div class="l-flex-RC">
               <span>{{ couponStatusNameComp }}</span>
-              <van-switch @change="couponStatusChg" v-model="deviceDetal.couponStatus" size="24" active-value="1"
+              <van-switch @change="couponStatusChg" v-model="deviceDetal.couponStatus" size="23px" active-value="1"
                           inactive-value="0" />
             </div>
           </template>
@@ -466,7 +467,7 @@ export default {
         Toast(res.data.message);
         setTimeout(() => {
           getDeviceDetalFun();
-        }, 1000);
+        }, 1500);
       });
     };
     const couponStatusNameComp = computed(() => {
@@ -504,6 +505,7 @@ export default {
       toEditAdRule,
       adRuleList,
       machineType,
+      user,
     };
   },
 };

+ 9 - 2
src/views/device/index.vue

@@ -1,7 +1,7 @@
 <template>
   <!-- 设备列表 -->
   <div class="devicePage flex-col">
-    <s-header :name="sys ? sys.title : $t('public.sysName')" :noback="false"></s-header>
+    <s-header :name="sys ? sys.title : $t('device.managementCenter')" :noback="true"></s-header>
     <div class="listBox">
       <van-list v-model:loading="loading" v-model:error="error" :error-text="$t('public.requestFailed')"
         :finished="finished" :finished-text="$t('public.noMore')" offset="300" :immediate-check="false" @load="onLoad">
@@ -130,7 +130,7 @@
                   <!-- <span class="txt5 o-ptb-10 kBordBott l-flex-RC"><span>远程开门:</span>
                     <van-button type="primary">开门</van-button>
                   </span> -->
-                  <span class="txt1 o-ptb-8">{{ item.fullName }}</span>
+                  <!-- <span class="txt1 o-ptb-8">{{ item.fullName }}</span>
                   <div>
                     <span v-if="item.latitude" class="txt5 o-ptb-5 kBordBott l-flex-RC">
                       <span class="info1">{{
@@ -139,6 +139,13 @@
                         $t("device.view")
                       }}</van-button>
                     </span>
+                  </div> -->
+                  <!-- 定位-->
+                  <div>
+                    <span v-if="item.latitude" class="txt5 o-ptb-4 kBordBott l-flex-RC">
+                      <span class="info1">{{ $t("device.position") }}:</span>
+                      <a class="clickable-link o-ptb-8" @click="viewPosiClk(item)">{{ item.fullName }}</a>
+                    </span>
                   </div>
                   <van-row class="layer5 o-ptb-8 kBordBott" justify="space-between"
                     v-if="(item.machineType == '0' || item.machineType == null) && item.equimentType != 'POP320'">

+ 16 - 6
src/views/device/modifyPrice/index.vue

@@ -27,7 +27,8 @@
             <van-field type="number" label-width="0" :border="false" v-model="item.rmbPrice" clearable label=" " />
           </div>
           <div v-else class="c-text-15" style="color: #df5e4c">
-            <span>¥</span>
+            <!-- <span>¥</span> -->
+            <span>{{ currencySymbol }}</span>
             <span>{{ item.rmbPrice }}</span>
           </div>
           <div v-if="!item.isEdit" @click="editClk(item, 1)" class="l-flex-RC o-ml-20">
@@ -46,11 +47,11 @@
     </div>
     <!-- 批量修改弹窗 -->
     <kDialog :isCloseForConfirm="false" :dialogTitle="$t('device.modifyPricePage.batchPrice')"
-             :confirmBtnTxt="$t('device.modifyPricePage.modifySubmit')" ref="kDialogRef" @confirmclk="confirmClk">
+      :confirmBtnTxt="$t('device.modifyPricePage.modifySubmit')" ref="kDialogRef" @confirmclk="confirmClk">
       <template #content>
         <div class="cust_vantBorder">
           <van-field type="number" clearable v-model="cofficentForm.price"
-                     :placeholder="$t('device.modifyPricePage.batchPricePlace')" :label="$t('device.modifyPricePage.batchPrice')">
+            :placeholder="$t('device.modifyPricePage.batchPricePlace')" :label="$t('device.modifyPricePage.batchPrice')">
           </van-field>
         </div>
       </template>
@@ -142,6 +143,16 @@ export default {
       price: "",
       type: "",
     });
+    // 自定义货币符号
+    const currencySymbol = ref('¥');
+    const loginUserStr = localStorage.getItem('loginUser');
+    const loginUser = JSON.parse(loginUserStr);
+    if (loginUser.currencySymbol) {
+      currencySymbol.value = loginUser.currencySymbol;
+    } else {
+      currencySymbol.value = '¥';
+    }
+
     // 点击修改
     const editClk = (row, idx) => {
       // 如果点击的是修改
@@ -182,11 +193,10 @@ export default {
       noticeClk,
       confirmClk,
       equipmentName,
+      currencySymbol,
     };
   },
 };
 </script>
 
-<style lang="less" scoped>
-
-</style>
+<style lang="less" scoped></style>

+ 12 - 4
src/views/discountCode/index.vue

@@ -41,11 +41,11 @@
               </div>
               <div class="itemRow"><span class="itemTitle">{{ $t('discountCode.creationTime') }}:&nbsp;</span>{{
                 showDateTime(item.createDate) }}</div>
-              <div class="itemRow"><span class="itemTitle">{{ $t('discountCode.usageTime') }}:&nbsp;</span>{{
+              <div class="itemRow" v-if="item.isUse !== '0'"><span class="itemTitle">{{ $t('discountCode.usageTime') }}:&nbsp;</span>{{
                 showDateTime(item.useDate) }}</div>
               <div class="itemRow"><span class="itemTitle">{{ $t('discountCode.termOfValidity') }}:&nbsp;</span>{{
-                showDate(item.lastUseDate) }}</div>
-              <div class="itemRow"><span class="itemTitle">{{ $t('discountCode.usingTheMachine') }}:&nbsp;</span>{{
+                showDate(item.lastUseDate) }} <span v-if="item.isUse === '0' && isExpired(item.lastUseDate)">{{ $t('discountCode.expired') }}</span></div>
+              <div class="itemRow" v-if="item.isUse !== '0'"><span class="itemTitle">{{ $t('discountCode.usingTheMachine') }}:&nbsp;</span>{{
                 item.useBy }}</div>
             </div>
             <div class="tipBox" v-if="item.isUse === '0'">{{ $t('discountCode.notUsed') }}</div>
@@ -135,6 +135,13 @@ export default {
       $M_ExportFile(data, headers);
     }
     const payCode = () => { router.push({ path: '/payCode' }); };
+
+    const isExpired = ref((lastUseDate) => {
+      const currentDate = new Date();
+      const lastUseDateTime = new Date(lastUseDate);
+      return currentDate > lastUseDateTime;
+    });
+
     return {
       searchRef,
       loading,
@@ -151,7 +158,8 @@ export default {
       showDate,
       showDateTime,
       exportClick,
-      payCode
+      payCode,
+      isExpired,
     };
   },
   components: { sHeader, codeSearch },

+ 15 - 6
src/views/home/index.vue

@@ -12,10 +12,9 @@
       <div class="nameDeviceRow flex-col">
         <span class="txt3">{{ userName }}</span>
         <div class="l-flex-RC">
-          <span class="info3">{{ equipStatus.machineTotalNum }}
-            {{ $t("home.totalEquipment") }}</span>
+          <span class="info3" style="color: #2c87c8;">{{ $t("home.totalEquipment") }} : {{ equipStatus.machineTotalNum }}</span>
           <div class="lineCon o-mlr-6"></div>
-          <span class="word2">{{ equipStatus.machineUseNum }} {{ $t("home.running") }}</span>
+          <span class="word2" style="color: #07c160;">{{ $t("home.running") }} : {{ equipStatus.machineUseNum }}</span>
         </div>
       </div>
       <!-- 没有数据概览M14权限的人看不到数据概览和ECharts -->
@@ -42,7 +41,8 @@
             <div class="outerBox flex-row">
               <div class="main4 flex-col justify-between">
                 <div class="main5 flex-row justify-center">
-                  <span class="word8">&yen;</span>
+                  <!-- <span class="word8">&yen;</span> -->
+                  <span class="word8">{{ currencySymbol }}</span>
                   <span class="word9">{{ salesVolume }}</span>
                 </div>
                 <span class="info5">{{ $t("home.totalIncome") }}</span>
@@ -187,6 +187,14 @@ export default {
     const router = useRouter();
     const userName = ref(user.name);
     const sys = ref(null);
+    // 自定义货币符号
+    const currencySymbol = ref("¥");
+    if (user.currencySymbol) {
+      currencySymbol.value = user.currencySymbol;
+    } else {
+      currencySymbol.value = "¥";
+    }
+
     // 图表对象
     const chartBox = ref();
     let chartObj = null;
@@ -213,7 +221,7 @@ export default {
         ...dateSelect.value,
         // ...typeSelectData,
         adminId: user.id,
-        ifForeign: typeSelectData.ifForeign === '' ? user.ifForeign :  typeSelectData.ifForeign,
+        ifForeign: typeSelectData.ifForeign === '' ? user.ifForeign : typeSelectData.ifForeign,
         payType: typeSelectData.payType,
         clientId: typeSelectData.clientId,
         username: typeSelectData.userName, // 商家
@@ -554,7 +562,8 @@ export default {
       showLogo,
       dateSelect,
       Format_time,
-      showDataDiv
+      showDataDiv,
+      currencySymbol,
     };
   },
 

+ 42 - 103
src/views/huifuMch/index.vue

@@ -273,7 +273,7 @@ import sHeader from "@/components/SimpleHeader";
 import dateUtil from "@/utils/dateUtil";
 import { Toast } from "vant";
 import { areaList } from "@vant/area-data";
-import { saveHuifuMch, getHuifuMchCheck, uploadPic, submitHuifuCheck } from "@/service/huifuMch";
+import { saveHuifuMch, getHuifuMchCheck, submitHuifuCheck, newUploadPic } from "@/service/huifuMch";
 import { getLoginUser } from "@/common/js/utils";
 import { useRouter } from "vue-router";
 import { useI18n } from "vue-i18n";
@@ -310,7 +310,7 @@ export default {
     const regAcctPic = ref();
     let addParams = reactive({
       adminId: user.id, // 当前登录账户的id
-      type: '0', // 类型 String 必填 对公企业:type=0; 个人:type=1
+      type: '0', // 类型 String 必填 对公企业:type=1; 个人:type=0
       regName: '', // 商户名称
       shortName: '', // 商户简称
       foundDate: '', // 成立时间
@@ -344,45 +344,30 @@ export default {
       certBeginDate: '', // 有效期开始日期
       certEndDate: '', // 有效期截止日期
     });
+    const params = {
+      adminId: user.id,
+      base64Str: null,
+      fileType: null,
+    };
     // 上传身份证正面
     const upCertFrontPic = async (file) => {
       file.status = 'uploading';
       file.message = '上传中...';
-      const formData = new FormData();
-      formData.append('file', file.file, file.file.name);
-      formData.append('adminId', user.id);
-      formData.append('fileType', "F40");
-      // console.log(formData.get("file"));
-      if (addParams.type === '1') {
-        formData.append('fileType', "F02");
+      params.base64Str = certFrontPic.value[0].content;
+      if (addParams.type === '0') {
+        params.fileType = "F40";
+      } else {
+        params.fileType = "F02";
       }
+      console.log("params", params);
       try {
-        const { data } = await uploadPic(formData, {
-          headers: {
-            'Content-Type': 'multipart/form-data',
-          },
-        });
-        if (addParams.type === '1') {
-          const { data1 } = await uploadPic(formData, {
-            headers: {
-              'Content-Type': 'multipart/form-data',
-            },
-          });
-          if (data.code == "00000" && data1.code == "00000") {
-            console.log(data);
-            file.status = 'done';
-          } else {
-            file.status = 'failed';
-            file.message = '上传失败';
-          }
+        const { data } = await newUploadPic(params);
+        if (data.code == "00000") {
+          console.log(data);
+          file.status = 'done';
         } else {
-          if (data.code == "00000") {
-            console.log(data);
-            file.status = 'done';
-          } else {
-            file.status = 'failed';
-            file.message = '上传失败';
-          }
+          file.status = 'failed';
+          file.message = '上传失败';
         }
       } catch {
         file.status = 'failed';
@@ -393,43 +378,21 @@ export default {
     const upCertBackPic = async (file) => {
       file.status = 'uploading';
       file.message = '上传中...';
-      // 此时可以自行将文件上传至服务器
-      // const fileObject = new File([file.content], file.file.name, { type: file.file.type });
-      const formData = new FormData();
-      formData.append('file', file.file, file.file.name);
-      formData.append('adminId', user.id);
-      formData.append('fileType', "F41");
-      if (addParams.type == '1') {
-        formData.append('fileType', "F03");
+      params.base64Str = certBackPic.value[0].content;
+      if (addParams.type === '0') {
+        params.fileType = "F41";
+      } else {
+        params.fileType = "F03";
       }
-      console.log(formData.get("file"));
+      console.log("params", params);
       try {
-        const { data } = await uploadPic(formData, {
-          headers: {
-            'Content-Type': 'multipart/form-data',
-          },
-        });
-        if (addParams.type == '1') {
-          const { data1 } = await uploadPic(formData, {
-            headers: {
-              'Content-Type': 'multipart/form-data',
-            },
-          });
-          if (data.code == "00000" && data1.code == "00000") {
-            console.log(data1);
-            file.status = 'done';
-          } else {
-            file.status = 'failed';
-            file.message = '上传失败';
-          }
+        const { data } = await newUploadPic(params);
+        if (data.code == "00000") {
+          console.log(data);
+          file.status = 'done';
         } else {
-          if (data.code == "00000") {
-            console.log(data);
-            file.status = 'done';
-          } else {
-            file.status = 'failed';
-            file.message = '上传失败';
-          }
+          file.status = 'failed';
+          file.message = '上传失败';
         }
       } catch {
         file.status = 'failed';
@@ -440,15 +403,10 @@ export default {
     const upCardFrontPic = async (file) => {
       file.status = 'uploading';
       file.message = '上传中...';
-      // 此时可以自行将文件上传至服务器
-      const formData = new FormData();
-      formData.append('file', file.file, file.file.name);
-      formData.append('adminId', user.id);
-      formData.append('fileType', "F13");
-      console.log(formData.get("file"));
+      params.base64Str = cardFrontPic.value[0].content;
+      params.fileType = "F13";
       try {
-        const { data } = await uploadPic(formData, 'multipart/form-data'
-        );
+        const { data } = await newUploadPic(params);
         if (data.code == "00000") {
           console.log(data);
           file.status = 'done';
@@ -465,18 +423,10 @@ export default {
     const upLicensePic = async (file) => {
       file.status = 'uploading';
       file.message = '上传中...';
-      // 此时可以自行将文件上传至服务器
-      const formData = new FormData();
-      formData.append('file', file.file, file.file.name);
-      formData.append('adminId', user.id);
-      formData.append('fileType', "F07");
-      console.log(formData.get("file"));
+      params.base64Str = licensePic.value[0].content;
+      params.fileType = "F07";
       try {
-        const { data } = await uploadPic(formData, {
-          headers: {
-            'Content-Type': 'multipart/form-data',
-          },
-        });
+        const { data } = await newUploadPic(params);
         if (data.code == "00000") {
           console.log(data);
           file.status = 'done';
@@ -493,21 +443,10 @@ export default {
     const upRegAcctPic = async (file) => {
       file.status = 'uploading';
       file.message = '上传中...';
-      // 此时可以自行将文件上传至服务器
-      // const fileObject = new File([file.content], file.file.name, { type: file.file.type });
-      // const formData = new FormData();
-      // formData.append('file', fileObject);
-      const formData = new FormData();
-      formData.append('file', file.file, file.file.name);
-      formData.append('adminId', user.id);
-      formData.append('fileType', "F08");
-      console.log(formData.get("file"));
+      params.base64Str = regAcctPic.value[0].content;
+      params.fileType = "F08";
       try {
-        const { data } = await uploadPic(formData, {
-          headers: {
-            'Content-Type': 'multipart/form-data',
-          },
-        });
+        const { data } = await newUploadPic(params);
         if (data.code == "00000") {
           console.log(data);
           file.status = 'done';
@@ -595,10 +534,10 @@ export default {
     });
     // 提交审核
     const submitCheck = async () => {
-      if (certBackPic.value == null) {
+      if (certFrontPic.value == null) {
         Toast("请上传身份证正面照片");
         return;
-      } else if (certFrontPic.value == null) {
+      } else if (certBackPic.value == null) {
         Toast("请上传身份证背面照片");
         return;
       }

+ 54 - 12
src/views/merchantManage/index.vue

@@ -23,20 +23,28 @@
           </div>
         </div>
         <div class="main4 flex-col">
-          <div class="bd1 flex-col" v-for="(item, index) in adminList" :key="index" @click="merchantSet(item)">
+          <div class="bd1 flex-col" v-for="(item, index) in adminList" :key="index">
             <div class="outer2 flex-col">
               <div class="box2 flex-row justify-between">
                 <span class="word3" v-html="item.username + '&nbsp;' + item.name"></span>
-                <div class="group6 flex-col"></div>
+                <!-- <div class="group6 flex-col"></div> -->
               </div>
-              <span class="word4" v-html="`${$t('merchantManage.telephone')}:` + item.phone"></span>
-              <span class="word5" v-html="`${$t('merchantManage.mailbox')}:` + item.email"></span>
-              <span class="word6" v-html="`${$t('merchantManage.loginTime')}:` + item.loginDate"></span>
-              <span class="info6" v-html="`${$t('merchantManage.loginIPAddress')}:` + item.loginIp"></span>
-              <span class="txt2" v-html="`${$t('merchantManage.managementSystemId')}:` + item.managerId"></span>
+              <span class="word4"
+                v-html="`${$t('merchantManage.telephone')}:` + (item.phone == null ? '' : item.phone)"></span>
+              <span class="word5"
+                v-html="`${$t('merchantManage.mailbox')}:` + (item.email == null ? '' : item.email)"></span>
+              <span class="word6"
+                v-html="`${$t('merchantManage.loginTime')}:` + (item.loginDate == null ? '' : item.loginDate)"></span>
+              <span class="info6"
+                v-html="`${$t('merchantManage.loginIPAddress')}:` + (item.loginIp == null ? '' : item.loginIp)"></span>
+              <span class="txt2"
+                v-html="`${$t('merchantManage.managementSystemId')}:` + (item.managerId == null ? '' : item.managerId)"></span>
               <div class="box3 flex-col">
-                <span class="txt3"
-                  v-html="`${$t('merchantManage.creationTime')}:` + Format_time(item.createDate)"></span>
+                <span class="txt3" v-html="`${$t('merchantManage.creationTime')}:` + Format_time(item.createDate)"></span>
+              </div>
+              <div class="button-container">
+                <van-button v-if="user.type < 2" class="btn1" round type="success" @click="autoLogin(item.id)">切换登陆</van-button>
+                <van-button class="btn1" round type="primary" @click="merchantSet(item)">详细信息</van-button>
               </div>
             </div>
           </div>
@@ -49,15 +57,18 @@
 <script>
 import { onMounted, reactive, ref } from "vue";
 import sHeader from "../../components/SimpleHeader";
-import { getAdminList } from '../../service/merchantManage';
-import { getLoginUser, Format_time, styleUrl } from "../../common/js/utils";
-import { Toast } from 'vant';
+import { getAdminList, autoLoginMerchant } from '../../service/merchantManage';
+import { getLoginUser, Format_time, styleUrl, setLocal } from "../../common/js/utils";
+import { Toast, Dialog } from 'vant';
 import merchantSearch from './merchantSearch.vue';
 import { useRouter } from "vue-router";
+import { useI18n } from "vue-i18n";
+
 
 export default {
   components: { sHeader, merchantSearch },
   setup() {
+    const { t } = useI18n();
     const user = getLoginUser();
     const router = useRouter();
     const searchRef = ref(null);
@@ -104,6 +115,35 @@ export default {
     };
     // 跳转设备编辑
     const merchantSet = (e) => { router.push({ path: 'merchantSet', query: { merchantId: e.id } }) }
+    // 切换登陆
+    const autoLogin = (id) => {
+      Dialog.confirm({
+        title: t('merchantManage.tips'),
+        message: t('merchantManage.autoLogin'),
+      }).then(() => {
+        autoLoginMerchant({ id }).then(res =>{
+          if (res.data.code === "00000") {
+            // 获取缓存的语言
+            const curLang = localStorage.getItem("curLang");
+            // 清空缓存
+            localStorage.clear();
+            localStorage.setItem("curLang", curLang);
+            setLocal("loginUser", JSON.stringify(res.data.data));
+            // console.log('loginUser JSON:', JSON.stringify(data.data));
+            Toast.success(t('login.loginSucess'));
+            // 需要刷新页面,否则 axios.js 文件里的 token 不会被重置
+            window.location.href = '/sc/';
+            setTimeout(() => {
+              router.push("/home");
+            }, 200);
+          } else {
+            Toast.fail(res.data.message);
+          }
+        });
+      }).catch((error) => {
+        console.error(error);
+      })
+    }
     return {
       adminList,
       adminTotal,
@@ -115,7 +155,9 @@ export default {
       searchRef,
       search,
       merchantSet,
+      autoLogin,
       Format_time,
+      user,
     };
   },
 };

+ 68 - 25
src/views/merchantManage/set.vue

@@ -17,15 +17,21 @@
               src="https://lanhu.oss-cn-beijing.aliyuncs.com/SketchPng8947935ab81635fdedd8124b11e305eef66286421b69c84fef22233014a3fa9a" />
           </div>
           <div v-if="tabType === '0'">
-            <div class="wrap2 l-flex-RC">
+            <!-- <div class="wrap2 l-flex-RC">
               <span class="info2">*</span>
               <span class="info3">{{ $t('merchantManage.region') }}:
-                <!-- 广东省&gt;广州市&gt;天河区 -->
               </span>
-            </div>
-            <span class="info4">{{ $t('merchantManage.accountNumber') }}:{{ adminObj.username }}</span>
-            <span class="info5">{{ $t('merchantManage.subscriptionAdministrator') }}:</span>
+            </div> -->
+
+            <!-- <span class="info5">{{ $t('merchantManage.subscriptionAdministrator') }}:</span> -->
             <van-form @submit="onSubmit">
+              <div class="van-cell van-field">
+                <div class="van-cell__title van-field__label"><span>{{ $t('merchantManage.accountNumber') }}</span>
+                </div>
+                <div class="van-cell__value van-field__value o-pt-8" style="text-align: left;">
+                  <span> {{ adminObj.username }}</span>
+                </div>
+              </div>
               <van-field v-model="adminObj.name" name="password" :label="$t('merchantManage.fullNameLabel')"
                 :placeholder="$t('merchantManage.fullNamePlaceholder')"
                 :rules="[{ required: true, message: $t('merchantManage.fullNamePlaceholder') }]" />
@@ -53,7 +59,7 @@
               </div>
               <div v-if="adminType === 0 || adminType === 1">
                 <div class="van-cell van-field">
-                  <div class="van-cell__title van-field__label"><span>{{ $t('merchantManage.discountCode') }}:</span>
+                  <div class="van-cell__title van-field__label"><span>{{ $t('merchantManage.discountCode') }}</span>
                   </div>
                   <div class="van-cell__value van-field__value radioBox">
                     <van-radio-group v-model="adminObj.promoCodeOpen" direction="horizontal">
@@ -63,12 +69,12 @@
                   </div>
                 </div>
                 <div class="van-cell van-field">
-                  <div class="van-cell__title van-field__label"><span>{{ $t('merchantManage.paymentPlatform') }}:</span>
+                  <div class="van-cell__title van-field__label"><span>{{ $t('merchantManage.paymentPlatform') }}</span>
                   </div>
                   <div class="van-cell__value van-field__value radioBox">
                     <van-radio-group v-model="adminObj.payPlatform" direction="horizontal">
                       <van-radio name="0" icon-size="18px">{{ $t('merchantManage.convergence') }}</van-radio>
-                      <van-radio name="1" icon-size="18px">{{ $t('merchantManage.shandePayment') }}</van-radio>
+                      <van-radio name="1" icon-size="18px">{{ $t('merchantManage.huifuPaymnt') }}</van-radio>
                     </van-radio-group>
                   </div>
                 </div>
@@ -82,7 +88,8 @@
           </div>
           <div v-if="tabType === '1'" class="tab2">
             <div class="kBordBott o-w o-pb-10">
-              <span class="info3">{{ $t('merchantManage.merchantType') }}:个人</span>
+              <span class="info3">{{ $t('merchantManage.merchantType') }}:{{ adminMchObj.altMerchantType == 10 ? "个人" :
+                (adminMchObj.altMerchantType == 12 ? "企业" : "") }}</span>
               <span class="info4">{{ $t('merchantManage.contactName') }}:{{ adminMchObj.busiContactName }}</span>
               <span class="word4">{{ $t('merchantManage.cellPhone') }}:{{ adminMchObj.busiContactMobileNo }}</span>
             </div>
@@ -95,22 +102,31 @@
               <span class="word6">{{ $t('merchantManage.legalPerson/IndividualIDNumber') }}:{{ adminMchObj.idCardNo
               }}</span>
               <span class="txt3">{{ $t('merchantManage.validityOfIDCard') }}:{{ adminMchObj.idCardExpiry }}</span>
-              <span class="txt4">{{ $t('merchantManage.businessLicenseCode') }}:{{ adminMchObj.licenseNo }}</span>
-              <span class="word7">{{ $t('merchantManage.validityOfBusinessLicense') }}:{{ adminMchObj.licenseExpiry
-              }}</span>
+              <span v-if="adminMchObj.altMerchantType == 12" class="txt4">{{ $t('merchantManage.businessLicenseCode')
+              }}:{{ adminMchObj.licenseNo }}</span>
+              <span v-if="adminMchObj.altMerchantType == 12" class="word7">{{
+                $t('merchantManage.validityOfBusinessLicense') }}:{{ adminMchObj.licenseExpiry
+  }}</span>
               <span class="txt5">{{ $t('merchantManage.natureOfBusiness') }}:{{ adminMchObj.manageScope }}</span> <span
                 class="word8">{{ $t('merchantManage.businessAddress') }}:{{ adminMchObj.manageAddr }}</span>
             </div>
 
             <div class="block5 flex-row justify-between">
-              <span class="txt6">{{ $t('merchantManage.accountType') }}:</span> <span class="word9">{{
-                adminMchObj.bankAccountType === 1 ? $t('merchantManage.debitCard') :
-                ''
-              }}{{ adminMchObj.bankAccountType === 4 ? $t('merchantManage.corporateAccount') : '' }}</span>
+              <span class="txt6">{{ $t('merchantManage.accountType') }}
+                :{{ adminMchObj.bankAccountType === 1 ? $t('merchantManage.debitCard') : (adminMchObj.bankAccountType === 4
+                  ? $t('merchantManage.corporateAccount') : "") }}</span>
+              <!-- <span class="word9"></span> -->
             </div>
             <span class="word10">{{ $t('merchantManage.bankAccountName') }}:{{ adminMchObj.bankAccountName }}</span>
             <span class="word11">{{ $t('merchantManage.bankAccount') }}:{{ adminMchObj.bankAccountNo }}</span>
-            <span class="word12">{{ $t('merchantManage.bankNo') }}:{{ adminMchObj.bankChannelNo }}</span>
+            <span v-if="adminMchObj.bankAccountType == 4" class="word12">{{ $t('merchantManage.bankNo') }}:{{
+              adminMchObj.bankChannelNo }}</span>
+            <div v-if="adminType < 2">
+              <span class="word12">{{ $t('merchantManage.joinpayMch') }}:{{ adminMchObj.signStatus == '签约成功' ?
+                adminMchObj.signStatus : '未签约' }}</span>
+              <span class="word12">{{ $t('merchantManage.huifuMch') }}:{{ huifuMchObj != null && huifuMchObj.conStat ==
+                '5' && huifuMchObj.status == '2' ? '签约成功' : '未签约' }}</span>
+            </div>
           </div>
         </div>
       </div>
@@ -119,11 +135,11 @@
 </template>
 <script>
 import { onMounted, ref } from "vue";
-import sHeader from "../../components/SimpleHeader";
-import { getAdmin, getAdminMch, updateAdmin } from "../../service/merchantManage";
+import sHeader from "@/components/SimpleHeader";
+import { getAdmin, getAdminMch, updateAdmin, getHuifuMch } from "@/service/merchantManage";
 import { Toast } from "vant";
 import { useRoute } from "vue-router";
-import { getLoginUser, styleUrl } from "../../common/js/utils";
+import { getLoginUser, styleUrl } from "@/common/js/utils";
 import { useI18n } from "vue-i18n";
 
 export default {
@@ -138,22 +154,44 @@ export default {
     const merchantId = ref('');
     const adminObj = ref({});
     const adminMchObj = ref({});
+    const huifuMchObj = ref({});
+    const ifForeign = ref('0');
     onMounted(async () => {
       // 加载样式
       styleUrl('merchantManage');
       merchantId.value = route.query.merchantId;
       getAdminFun();
+      console.log(ifForeign.value);
       getAdminMchFun();
+      getHuifuMchFun();
+
     });
     const getAdminFun = async () => {
       const { data } = await getAdmin({ id: merchantId.value });
-      if (data.code === "00000") { adminObj.value = data.data; adminObj.value.password = ''; adminObj.value.checkPassword = ''; } else { Toast.fail(data.message); }
+      if (data.code === "00000") {
+        adminObj.value = data.data;
+        adminObj.value.password = '';
+        adminObj.value.checkPassword = '';
+        if (data.data.payPlatform == null) {
+          adminObj.value.payPlatform = '0';
+        }
+        if (data.data.promoCodeOpen == null) {
+          adminObj.value.promoCodeOpen = '1';
+        }
+        ifForeign.value = data.data.ifForeign;
+      } else { Toast.fail(data.message); }
       console.log('getAdminFun', data);
     };
     const getAdminMchFun = async () => {
       const { data } = await getAdminMch({ id: merchantId.value });
       if (data.code === "00000") { adminMchObj.value = data.data; } else { Toast.fail(data.message); }
       console.log('getAdminMchFun', data);
+      console.log('adminMchObj', adminMchObj.value.signStatus);
+    }
+    const getHuifuMchFun = async () => {
+      const { data } = await getHuifuMch({ adminId: merchantId.value });
+      if (data.code === "00000") { huifuMchObj.value = data.data; } else { Toast.fail(data.message); }
+      console.log('getHuifuMchFun', data);
     }
     const onSubmit = async () => {
       const params = {
@@ -180,7 +218,13 @@ export default {
         }
       }
       const { data } = await updateAdmin(params);
-      if (data.code === "00000") { Toast.success(t('merchantManage.modificationSucceeded')); getAdminFun(); } else { Toast.fail(data.message); }
+      if (data.code === "00000") {
+        Toast.success(t('merchantManage.modificationSucceeded'));
+        setTimeout(() => {
+          // router.go(0);
+          getAdminFun();
+        }, 1500);
+      } else { Toast.fail(data.message); }
       console.log('onSubmit', data);
     }
     return {
@@ -188,11 +232,10 @@ export default {
       adminType,
       adminObj,
       adminMchObj,
+      huifuMchObj,
       onSubmit
     };
   },
 };
 </script>
-<style lang="less" scoped>
-@import "../../common/style/common.less";
-</style>
+<style lang="less" scoped>@import "../../common/style/common.less";</style>

+ 20 - 37
src/views/orderCenter/index.vue

@@ -35,7 +35,8 @@
               <div class="outerBox flex-row">
                 <div class="main4 flex-col justify-between">
                   <div class="main5 flex-row justify-center">
-                    <span class="word8">&yen;</span>
+                    <!-- <span class="word8">&yen;</span> -->
+                    <span class="word8">{{ currencySymbol }}</span>
                     <span class="word9">{{ salesVolume }}</span>
                   </div>
                   <span class="info5">{{ $t("home.totalIncome") }}</span>
@@ -60,8 +61,7 @@
         <div class="o-mtb-10" style="height: 10px; background: #f5f5f5"></div>
         <!-- 时间 -->
         <div class="c-text-c c-text-18">
-          {{ Format_time(searchParams.startDate, 'YYYY-MM-DD') }}--{{ Format_time(searchParams.endDate, 'YYYY-MM-DD')
-          }}
+          {{ Format_time(searchParams.startDate, 'YYYY-MM-DD') }}--{{ Format_time(searchParams.endDate, 'YYYY-MM-DD') }}
         </div>
         <div class="group7 flex-col justify-center">
           <div class="main9 flex-col justify-between">
@@ -99,12 +99,14 @@
                     <template #price>
                       <div class="pricBox flex-row align-end" :class="{ orderError: item.status === 0 }">
                         <span class="txt9">{{ item.statusText }}:</span>
-                        <span class="info5">&yen;</span>
+                        <!-- <span class="info5">&yen;</span> -->
+                        <span class="info5">{{ currencySymbol }}</span>
                         <span class="word12" v-if="item.status === 3">{{ item.price.toFixed(2) }}</span>
                         <span class="word12" v-else>{{ item.refundAmount == null ? item.price.toFixed(2) : (item.price -
                           item.refundAmount).toFixed(2) }}</span>
-                        <span class="word14">{{ $t('orderCenter.dividingDomesticService') }}:&yen;{{ showSubcom(item)
-                        }}</span>
+                        <!-- <span class="word14">{{ $t('orderCenter.dividingDomesticService') }}:&yen;{{ showSubcom(item)}}</span> -->
+                        <span class="word14">{{ $t('orderCenter.dividingDomesticService') }}:{{ currencySymbol
+                        }}{{ showSubcom(item) }}</span>
                       </div>
                     </template>
                     <template #price-top>
@@ -116,34 +118,6 @@
                         item.refundQuantity) }}</span>
                     </template>
                   </van-card>
-                  <!-- <div class="flex-row align-center">
-                    <div class="flex-col">
-                      <div class="flex-row align-center">
-                        <div class="main10 flex-col"></div>
-                        <span class="txt11">{{ showOrderTime(item, 1) }}</span>
-                      </div>
-                      <div class="flex-row align-center">
-                        <div class="sugerPhto" v-if="showSugerPhoto(item)">
-                          <img class="sugerImg" :src="showSugerPhoto(item)" />
-                        </div>
-                        <span class="word11">{{ $t('orderCenter.equipmentNo') }}:{{ showClientId(item) }}</span>
-                        <span class="word13">{{ $t('orderCenter.tradeName') }}:{{ item.productName }}</span>
-                      </div>
-                      <div class="flex-row align-center">
-                        <span class="word11">{{ $t('orderCenter.equipmentName') }}:{{ item.es }}</span>
-                        <span class="word13"></span>
-                      </div>
-                      <div class="flex-row align-end">
-                        <div class="pricBox flex-row align-end" :class="{ orderError: item.status === 0 }">
-                          <span class="txt9">{{ item.statusText }}:</span>
-                          <span class="info5">&yen;</span>
-                          <span class="word12">{{ item.price }}</span>
-                        </div>
-                        <span class="word14">{{ $t('orderCenter.dividingDomesticService') }}:&yen;{{ showSubcom(item)
-                        }}</span>
-                      </div>
-                    </div>
-                  </div> -->
                   <div v-if="typeof item.status === 'undefined'" class="main11 flex-col orderSuccess"></div>
                   <div v-else class="main11 flex-col" :class="{
                     orderSuccess: item.status === 1,
@@ -175,10 +149,10 @@
               </div>
             </div>
             <div class="layer1 flex-col"></div>
-            <div class="layer2 flex-row justify-between">
+            <!-- <div class="layer2 flex-row justify-between">
               <span class="info2">{{ $t('orderCenter.accountBalance') }}</span>
               <span class="txt6">{{ accountDetail.altAvilBalance }}</span>
-            </div>
+            </div> -->
             <div class="layer3 flex-row justify-between">
               <span class="word2">{{ $t('orderCenter.orderNo') }}</span>
               <span class="info3">{{ refundObject.sn }}</span>
@@ -243,7 +217,8 @@
           <van-checkbox class="checkAllBtn o-mt-5" v-model="checkedAll" @click="checkAll">全选</van-checkbox>
           <div class="o-mt-5">
             <span class="">{{ $t('orderCenter.totalRefund') }}:</span>
-            <span class="totalRefund o-pr-15">&yen; {{ totalRefund.toFixed(2) }}</span>
+            <!-- <span class="totalRefund o-pr-15">&yen; {{ totalRefund.toFixed(2) }}</span> -->
+            <span class="totalRefund o-pr-15">{{ currencySymbol }} {{ totalRefund.toFixed(2) }}</span>
           </div>
         </div>
       </template>
@@ -470,6 +445,13 @@ export default {
       }
     };
 
+    // 自定义货币符号
+    const currencySymbol = ref("¥");
+    if (user.currencySymbol) {
+      currencySymbol.value = user.currencySymbol;
+    } else {
+      currencySymbol.value = "¥";
+    }
 
     // 页面列表查询参数
     let searchParams = reactive({
@@ -833,6 +815,7 @@ export default {
       minusRefundGood,
       // isLoading,
       isRefund,
+      currencySymbol,
     };
   },
 };

+ 14 - 3
src/views/orderExport/index.vue

@@ -54,11 +54,11 @@
           </div>
           <!-- <van-pull-refresh disabled v-model="refreshing" @refresh="onRefresh"> -->
           <van-list v-model:loading="loading" v-model:error="error" :error-text="$t('public.requestFailed')"
-            :finished="finished" :finished-text="$t('public.noMore')" @load="onLoad"
-            :immediate-check="false">
+            :finished="finished" :finished-text="$t('public.noMore')" @load="onLoad" :immediate-check="false">
             <div v-for="(item, index) in tableData" :key="index" class="orderItem">
               <div class="mod9 flex-row">
-                <span class="info7">&yen;</span>
+                <!-- <span class="info7">&yen;</span> -->
+                <span class="info7">{{ currencySymbol }}</span>
                 <span class="info8">{{ item.priceTotal }}</span>
                 <span class="word9">{{ $t("orderExport.totalSales") }}</span>
               </div>
@@ -420,6 +420,16 @@ export default {
       getList();
       // onRefresh(1);
     };
+
+    // 自定义货币符号
+    const currencySymbol = ref('¥');
+    const loginUserStr = localStorage.getItem('loginUser');
+    const loginUser = JSON.parse(loginUserStr);
+    if (loginUser.currencySymbol) {
+      currencySymbol.value = loginUser.currencySymbol;
+    } else {
+      currencySymbol.value = '¥';
+    }
     return {
       ...toRefs(searchParams),
       companyTypePopConfirm,
@@ -453,6 +463,7 @@ export default {
       tableData,
       error,
       // ...toRefs(ruleData),
+      currencySymbol,
     };
   },
 };

+ 2 - 2
src/views/register.vue

@@ -6,7 +6,7 @@
       <van-form @submit="registerSubmit">
         <van-field v-model="username" name="username" :label="$t('register.usernameLabel')"
           :placeholder="$t('register.usernamePlaceholder')"
-          :rules="[{ required: true, message: $t('register.usernameRequired') }]" />
+          :rules="[{ pattern: /^[a-zA-Z][a-zA-Z0-9]*$/, message: $t('register.usernameRequired') }]" />
         <br>
         <van-field v-model="name" name="name" :label="$t('register.nameLabel')"
           :placeholder="$t('register.namePlaceholder')"
@@ -44,7 +44,7 @@
           <!-- 国内手机 -->
           <van-field v-if="logonMode === '10'" v-model="phone" name="phone" type="tel" :label="$t('register.phoneLabel')"
             :placeholder="$t('register.phonePlaceholder')"
-            :rules="[{ required: ifForeign === '0' && logonMode === '10', message: $t('register.phoneRequired') }]" />
+            :rules="[{ required: ifForeign === '0' && logonMode === '10', pattern: /^1[3456789]\d{9}$/, message: $t('register.phoneRequired') }]" />
           <br v-if="ifForeign === '0' && logonMode === '10'">
           <!-- 短信验证码 -->
           <van-field v-if="logonMode === '10'" v-model="code" name="code" :label="$t('register.codeLabel')"

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 1209 - 0
src/views/settlement/index.vue


+ 1 - 1
src/views/taskMessage/joinpayMchCheck/info/index.vue

@@ -157,7 +157,7 @@
           </div>
         </div>
       </div>
-      <div v-if="isOper" class="itemRow" style="display: flex; justify-content: center; padding: 0.5rem;">
+      <div v-if="isOper && (infoData.status == '1' || infoData.status == '4')" class="itemRow" style="display: flex; justify-content: center; padding: 0.5rem;">
         <van-button span="5" round type="primary"
           style="height: 2em; padding: 0 2em; margin: 0 1em; background: rgb(255 0 0 / 20%); color: #ff0000; border-color: #ff0000;"
           @click="changeStatusFun('3')">

+ 201 - 13
src/views/user.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="page flex-col">
-    <s-header :name="sys ? sys.title : $t('public.sysName')" :noback="true" :isFixed="false"></s-header>
+    <s-header :name="sys ? sys.title : $t('user.personalCenter')" :noback="true" :isFixed="false"></s-header>
     <div class="userPageBox">
       <div class="userBaseBox">
         <div class="baseRow flex-row justify-between">
@@ -106,6 +106,46 @@
             <span>{{ relationAdminName }}</span>
             <van-icon name="edit" class="editIcon" @click="editClk(1)" />
           </div>
+
+          <!-- 自定义货币符号 -->
+          <div v-if="!symbolShow" class="userInfo l-flex-between">
+            <span class="userInfoLeft">{{ $t("user.currencySymbol") }}: </span>
+            <div class="cust_vantBorder">
+              <van-field class="relationClass" v-model="cofficentForm.currencySymbol"
+                :placeholder="$t('user.currencySymbolPlace')">
+                <template #button>
+                  <van-button type="primary" @click="mailboxChg(cofficentForm.currencySymbol, 5)">{{
+                    $t("user.confirmLog") }}
+                  </van-button>
+                </template>
+              </van-field>
+            </div>
+            <van-icon name="edit" class="editIcon" @click="editClk(5)" />
+          </div>
+          <div v-else class="userInfo l-flex-between">
+            <span class="userInfoLeft">{{ $t("user.currencySymbol") }}: </span>
+            <span>{{ accountDetail.currencySymbol }}</span>
+            <van-icon name="edit" class="editIcon" @click="editClk(5)" />
+          </div>
+
+          <!-- 切换支付平台 -->
+          <div v-if="chaSzPayShow" class="userInfo l-flex-between">
+            <span class="userInfoLeft">{{ $t("user.szPayType") }}: </span>
+            <div class="cust_vantBorder o-pl-15">
+              <van-switch :model-value="sunzeePay" active-color="#0090fa" inactive-color="#30c25c" size="21px"
+                @update:model-value="changeSunzeePay" />
+            </div>
+            <span class="o-pl-50">{{ $t("user.currentChoose") }}: {{ sunzeePay ? "汇付" : "汇聚" }}</span>
+          </div>
+
+          <div v-if="chaScPayShow" class="userInfo l-flex-between">
+            <span class="userInfoLeft">{{ $t("user.scPayType") }}: </span>
+            <div class="cust_vantBorder o-pl-15">
+              <van-switch :model-value="sevencloudPay" active-color="#0090fa" inactive-color="#30c25c" size="21px"
+                @update:model-value="changeSevenCloudPay" />
+            </div>
+            <span class="o-pl-50">{{ $t("user.currentChoose") }}: {{ sevencloudPay ? "汇付" : "汇聚" }}</span>
+          </div>
         </div>
       </div>
       <div class="lineBox"></div>
@@ -125,31 +165,39 @@
           </div>
 
           <!-- 提现帐号 -->
-          <div v-if="isInland" class="taskListRow flex-col" @click="pushPageList('/huifuMch')">
+          <div v-if="isInland" class="taskListRow flex-col" @click="pushPageList('/settlement')">
             <div class="taskIcon joinPayMchIcon"></div>
             <div class="taskRight">
-              <div class="taskTitle">{{ $t("user.withdrawalAccountNo") }}</div>
+              <div class="taskTitle">{{ $t("user.settlementAccount") }}</div>
             </div>
           </div>
 
+          <!-- 提现帐号 -->
+          <!-- <div v-if="isInland" class="taskListRow flex-col" @click="pushPageList('/joinpayMch')">
+            <div class="taskIcon joinPayMchIcon"></div>
+            <div class="taskRight">
+              <div class="taskTitle">{{ $t("user.withdrawalAccountNo") }}</div>
+            </div>
+          </div> -->
+
           <!-- Airwallex 钱包 -->
-          <div v-if="isAbroad && user.companyType != '1'" class="taskListRow flex-col" @click="pushPageList('/airwallex')">
+          <!-- <div v-if="isAbroad && user.companyType != '1'" class="taskListRow flex-col"
+            @click="pushPageList('/airwallex')">
             <div class="taskIcon airwallexIcon"></div>
             <div class="taskRight">
               <div class="taskTitle">{{ $t("user.airwallex") }}</div>
             </div>
-          </div>
+          </div> -->
 
           <!-- 备用提现账号 -->
-          <div v-if="isInland" class="taskListRow flex-col" @click="pushPageList('/joinpayMch')">
+          <!-- <div v-if="isInland" class="taskListRow flex-col" @click="pushPageList('/huifuMch')">
             <div class="taskIcon shandeMchIcon"></div>
             <div class="taskRight">
               <div class="taskTitle">
                 {{ $t("user.standbyWithdrawalAccountNo") }}
               </div>
             </div>
-          </div>
-
+          </div> -->
           <!--          <div class="taskListRow flex-col" @click="pushPageList('/shandeMch')">
                       <div class="taskIcon shandeMchIcon"></div>
                       <div class="taskRight">
@@ -223,8 +271,8 @@ import {
   $M_PhoneTest,
 } from "@/common/js/utils";
 import { useRouter } from "vue-router";
-import { tAdminGetRelation, tAdminSetRelationAdmin } from "@/service/user";
-import { Toast } from "vant";
+import { tAdminGetRelation, tAdminSetRelationAdmin, updatePayPlatform } from "@/service/user";
+import { Toast, Dialog } from "vant";
 import { useI18n } from "vue-i18n";
 import { styleUrl } from "../common/js/utils";
 
@@ -235,15 +283,26 @@ export default {
     const { t } = useI18n();
     // 账户信息
     const accountDetail = ref({});
-    // 控制都去显示隐藏
+    // 控制地区显示隐藏
     const areaShow = ref(true);
     // 控制手机显示隐藏
     const phoneNumberShow = ref(true);
     // 控制邮箱显示隐藏
     const mailboxShow = ref(true);
+    // 控制货币显示隐藏 货币符号,默认“¥”
+    const symbolShow = ref(true);
+    // 控制切换支付平台按钮显示隐藏
+    const chaSzPayShow = ref(false);
+    const chaScPayShow = ref(false);
+
+
+    const sunzeePay = ref(false);
+    const sevencloudPay = ref(false);
+
     const user = getLoginUser();
     const router = useRouter();
     const relationAdminName = ref("");
+
     const relationType = ref(true);
     const sys = ref(null);
     // 修改的个人信息
@@ -252,6 +311,12 @@ export default {
       mailBox: accountDetail.value.email,
       phone: accountDetail.value.phone,
       area: "",
+      currencySymbol: accountDetail.value.currencySymbol,
+    });
+    // 
+    const params = reactive({
+      id: '', // 用户ID	
+      payPlatform: '', //支付平台	
     });
     // 点击修改图标
     const editClk = (idx) => {
@@ -262,6 +327,7 @@ export default {
           mailboxShow.value = true;
           phoneNumberShow.value = true;
           areaShow.value = true;
+          symbolShow.value = true;
           break;
         case 2:
           cofficentForm.mailBox = accountDetail.value.email;
@@ -269,6 +335,7 @@ export default {
           mailboxShow.value = !mailboxShow.value;
           phoneNumberShow.value = true;
           areaShow.value = true;
+          symbolShow.value = true;
           break;
         case 3:
           cofficentForm.phone = accountDetail.value.phone;
@@ -276,6 +343,7 @@ export default {
           mailboxShow.value = true;
           phoneNumberShow.value = !phoneNumberShow.value;
           areaShow.value = true;
+          symbolShow.value = true;
           break;
         case 4:
           cofficentForm.area = accountDetail.value.area;
@@ -283,6 +351,15 @@ export default {
           mailboxShow.value = true;
           phoneNumberShow.value = true;
           areaShow.value = !areaShow.value;
+          symbolShow.value = true;
+          break;
+        case 5:
+          cofficentForm.currencySymbol = accountDetail.value.currencySymbol;
+          relationType.value = true;
+          mailboxShow.value = true;
+          phoneNumberShow.value = true;
+          areaShow.value = true;
+          symbolShow.value = !symbolShow.value;
           break;
       }
     };
@@ -346,17 +423,57 @@ export default {
             }
           }
           break;
+        case 5:
+          if (!e) {
+            Toast(t("user.currencySymbolPlace"));
+          } else {
+            const params = {
+              id: user.id,
+              currencySymbol: e,
+            };
+            const { data } = await updateAdmin(params);
+            symbolShow.value = true;
+            if (data.code === "00000") {
+              Toast(data.message);
+              // 更新本地存储缓存中的currencySymbol的值
+              user.currencySymbol = e; // 将新的currencySymbol的值赋值给user
+              localStorage.setItem("loginUser", JSON.stringify(user));
+              setTimeout(() => {
+                getAcccountDetail();
+              }, 500);
+            }
+          }
+          break;
       }
     };
     // 获取账户详情
     const getAcccountDetail = () => {
       getAdmin({ id: user.id }).then((res) => {
         accountDetail.value = res.data.data;
-
         // 查询地址回显
         kCascaderRef.value.init(accountDetail.value.areaId);
       });
     };
+    // 获取申泽支付平台
+    const getSunzeeDetail = () => {
+      getAdmin({ id: 2738 }).then((res) => {
+        // sunzeePay.value = res.data.data.payPlatform;
+        if (res.data.data.payPlatform == '1') {
+          sunzeePay.value = true;
+        }
+        console.log("sunzeePay", sunzeePay.value)
+      });
+    };
+    // 获取七云支付平台
+    const getSevenCloudDetail = () => {
+      getAdmin({ id: 2739 }).then((res) => {
+        // sevencloudPay.value = res.data.data.payPlatform;
+        if (res.data.data.payPlatform == '1') {
+          sevencloudPay.value = true;
+        }
+        console.log("sevencloudPay", sevencloudPay.value)
+      });
+    };
     // 退出登录弹窗
     const kDialogRef = ref(null);
     // 点击右侧按钮
@@ -379,6 +496,56 @@ export default {
         }, 200);
       }
     };
+    //切换申泽支付平台
+    const changeSunzeePay = (value) => {
+      Dialog.confirm({
+        title: t('user.tips'),
+        message: t('user.changeTips'),
+      }).then(() => {
+        // checked.value = newValue;
+        console.log(value);
+        params.id = 2738;
+        if (value) {
+          params.payPlatform = '1';
+        } else {
+          params.payPlatform = '0';
+        }
+        const { data } = updatePayPlatform(params);
+        if (data.code) {
+          Toast.success(t('user.changeSuccess'));
+          sunzeePay.value = value;
+        } else {
+          Toast.fail(data.message);
+        }
+      }).catch((error) => {
+        console.error(error);
+      })
+    }
+    //切换七云支付平台
+    const changeSevenCloudPay = (value) => {
+      Dialog.confirm({
+        title: t('user.tips'),
+        message: t('user.changeTips'),
+      }).then(() => {
+        // checked.value = newValue;
+        console.log(value);
+        params.id = 2739;
+        if (value) {
+          params.payPlatform = '1';
+        } else {
+          params.payPlatform = '0';
+        }
+        const { data } = updatePayPlatform(params);
+        if (data.code) {
+          Toast.success(t('user.changeSuccess'));
+          sunzeePay.value = value;
+        } else {
+          Toast.fail(data.message);
+        }
+      }).catch((error) => {
+        console.error(error);
+      })
+    }
 
     // 初始化页面获取列表
     onMounted(async () => {
@@ -392,6 +559,19 @@ export default {
       gettAdminGetRelation();
       // 获取账户
       getAcccountDetail();
+      if (user.id == 1 ) {
+        chaSzPayShow.value = true;
+        chaScPayShow.value = true;
+        getSunzeeDetail();
+        getSevenCloudDetail();
+      } else if (user.id == 2738) {
+        chaSzPayShow.value = true;
+        getSunzeeDetail();
+      } else if (user.id == 2739) {
+        chaScPayShow.value = true;
+        getSevenCloudDetail();
+      }
+
     });
     const gettAdminGetRelation = async () => {
       const { data } = await tAdminGetRelation({
@@ -507,6 +687,7 @@ export default {
       phoneNumberShow,
       editClk,
       cofficentForm,
+      params,
       areaShow,
       accountDetail,
       fieldValue,
@@ -517,7 +698,14 @@ export default {
       getAreaName,
       isAbroad,
       checkIsAbroad,
-      isInland
+      isInland,
+      symbolShow,
+      chaSzPayShow,
+      chaScPayShow,
+      sunzeePay,
+      sevencloudPay,
+      changeSunzeePay,
+      changeSevenCloudPay,
     };
   }
 };