From ad5db85e540947e82c7a4d5612879b3b3ecdf459 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期五, 21 八月 2026 10:38:07 +0800
Subject: [PATCH] update
---
mingdaojingjiang_guide_app/constants/mock.js | 87 ----
mingdaojingjiang_guide_app/dist/build/mp-weixin/components/guide-nav-bar/guide-nav-bar.wxss | 2
mingdaojingjiang_guide_app/pages/withdrawal-success/index.vue | 2
mingdaojingjiang_guide_app/dist/build/mp-weixin/components/guide-nav-bar/guide-nav-bar.wxml | 2
mingdaojingjiang_guide_app/dist/build/mp-weixin/pages/profile/index.js | 2
frontend/src/styles/index.css | 3
mingdaojingjiang_guide_app/pages/withdrawal/index.vue | 10
backend/db/schema.sql | 36 +
backend/src/main/java/com/tourguide/modules/user/entity/GuideUser.java | 3
backend/src/main/java/com/tourguide/modules/user/service/GuideReceivingService.java | 7
backend/src/main/java/com/tourguide/modules/user/mapper/GuideUserMapper.java | 12
backend/src/test/java/com/tourguide/modules/finance/service/GuideElectronicLedgerServiceTest.java | 20 +
mingdaojingjiang_guide_app/dist/build/mp-weixin/common/assets.js | 2
backend/src/main/java/com/tourguide/modules/finance/mapper/GuideWithdrawalAccountMapper.java | 5
backend/src/test/java/com/tourguide/modules/order/service/MiniTourOrderCommandServiceTest.java | 5
mingdaojingjiang_guide_app/dist/build/mp-weixin/components/guide-nav-bar/guide-nav-bar.js | 2
mingdaojingjiang_guide_app/pages/onboarding/index.vue | 26 +
frontend/src/views/LoginView.vue | 1
mingdaojingjiang_guide_app/manifest.json | 4
backend/src/main/java/com/tourguide/modules/order/entity/TourOrder.java | 9
backend/src/main/java/com/tourguide/modules/finance/service/AdminFinanceService.java | 22
mingdaojingjiang_guide_app/pages/onboarding-pending/index.vue | 4
backend/src/main/java/com/tourguide/modules/finance/service/GuideElectronicLedgerService.java | 11
mingdaojingjiang_guide_app/pages/bank-card-select/index.vue | 48 ++
backend/src/main/java/com/tourguide/common/huifu/biz/DouGongUserWithdrawalProfile.java | 12
backend/src/main/java/com/tourguide/modules/finance/dto/WithdrawalResponse.java | 28 +
frontend/src/views/WithdrawalsView.vue | 9
mingdaojingjiang_guide_app/dist/build/mp-weixin/pages/earnings/index.js | 2
mingdaojingjiang_guide_app/pages/bank-branch-select/index.vue | 2
backend/src/main/java/com/tourguide/modules/finance/entity/GuideWithdrawal.java | 33 +
mingdaojingjiang_guide_app/dist/build/mp-weixin/project.config.json | 11
backend/src/main/java/com/tourguide/modules/finance/entity/GuideWithdrawalAccount.java | 56 +++
backend/src/main/java/com/tourguide/common/huifu/biz/DouGongWithdrawBiz.java | 161 +++-----
backend/src/main/java/com/tourguide/modules/order/mapper/TourOrderMapper.java | 16
mingdaojingjiang_guide_app/dist/build/mp-weixin/pages/earnings/index.wxml | 2
mingdaojingjiang_guide_app/services/withdrawal.js | 54 --
backend/src/main/java/com/tourguide/modules/finance/mapper/GuideWithdrawalMapper.java | 29 +
mingdaojingjiang_guide_app/services/settlement.js | 116 +----
backend/src/main/java/com/tourguide/common/huifu/DouGongNotifyController.java | 15
backend/src/main/java/com/tourguide/common/huifu/biz/FenZhangUtil.java | 12
backend/src/main/java/com/tourguide/modules/order/service/MiniTourOrderCommandService.java | 2
backend/src/main/java/com/tourguide/common/huifu/biz/DouGongBasicDataBiz.java | 115 ++++++
mingdaojingjiang_guide_app/docs/开发说明.md | 7
mingdaojingjiang_guide_app/dist/build/mp-weixin/app.json | 8
backend/src/main/resources/application.yml | 2
mingdaojingjiang_guide_app/pages/bank-card-add/index.vue | 3
mingdaojingjiang_guide_app/dist/build/mp-weixin/common/vendor.js | 2
47 files changed, 625 insertions(+), 397 deletions(-)
diff --git a/backend/db/schema.sql b/backend/db/schema.sql
index 0296cd4..9d51089 100644
--- a/backend/db/schema.sql
+++ b/backend/db/schema.sql
@@ -120,6 +120,7 @@
`rating` DECIMAL(3,2) NOT NULL DEFAULT 0.00 COMMENT '平均评分,范围0到5',
`auto_disable_whitelisted` TINYINT NOT NULL DEFAULT 0 COMMENT '自动禁用白名单:0否,1是',
`wechat_open_id` VARCHAR(128) DEFAULT NULL COMMENT '导游收款微信 openID',
+ `balance` DECIMAL(12,2) NOT NULL DEFAULT 0.00 COMMENT '导游可提现余额',
`status` TINYINT NOT NULL DEFAULT 1 COMMENT '账号状态:0停用,1启用',
`deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '逻辑删除标记:0正常,1删除',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
@@ -321,6 +322,9 @@
`commission_rate` DECIMAL(5,2) DEFAULT NULL COMMENT '接单时平台抽成比例快照,单位百分比',
`commission_team_id` BIGINT UNSIGNED DEFAULT NULL COMMENT '讲解队抽成来源ID,个人导游为空',
`guide_earning_amount` DECIMAL(10,2) DEFAULT NULL COMMENT '导游实际业绩金额快照',
+ `settlement_days` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT '下单时结算周期快照,单位天',
+ `settlement_due_at` DATETIME DEFAULT NULL COMMENT '预计可分账时间',
+ `settled_at` DATETIME DEFAULT NULL COMMENT '实际分账入余额时间',
`accepted_at` DATETIME DEFAULT NULL COMMENT '导游接单时间',
`arrived_at` DATETIME DEFAULT NULL COMMENT '导游到达汇合点时间',
`service_started_at` DATETIME DEFAULT NULL COMMENT '讲解开始时间',
@@ -340,6 +344,7 @@
KEY `idx_tour_order_visitor` (`visitor_id`),
KEY `idx_tour_order_guide` (`guide_id`),
KEY `idx_tour_order_guide_earning` (`guide_id`, `status`, `completed_at`),
+ KEY `idx_tour_order_settlement` (`status`, `settled_at`, `settlement_due_at`),
KEY `idx_tour_order_scenic` (`scenic_name`),
KEY `idx_tour_order_status` (`status`),
KEY `idx_tour_order_created_at` (`created_at`),
@@ -407,7 +412,18 @@
`guide_name` VARCHAR(64) NOT NULL COMMENT '导游姓名快照',
`guide_mobile` VARCHAR(20) NOT NULL COMMENT '导游手机号快照',
`amount` DECIMAL(10,2) NOT NULL COMMENT '提现金额',
- `status` VARCHAR(16) NOT NULL DEFAULT 'PENDING' COMMENT '状态:PENDING、APPROVED、REJECTED',
+ `bank_card_id` INT DEFAULT NULL COMMENT '提现结算卡账户主键',
+ `bank_name` VARCHAR(64) DEFAULT NULL COMMENT '收款银行快照',
+ `card_masked` VARCHAR(32) DEFAULT NULL COMMENT '收款卡号掩码',
+ `transfer_req_seq_id` VARCHAR(32) DEFAULT NULL COMMENT '主账户划账请求流水号',
+ `transfer_req_date` CHAR(8) DEFAULT NULL COMMENT '主账户划账请求日期',
+ `transfer_hf_seq_id` VARCHAR(64) DEFAULT NULL COMMENT '主账户划账汇付全局流水号',
+ `transferred_at` DATETIME DEFAULT NULL COMMENT '主账户划账完成时间',
+ `cash_req_seq_id` VARCHAR(32) DEFAULT NULL COMMENT '导游账户取现请求流水号',
+ `cash_req_date` CHAR(8) DEFAULT NULL COMMENT '导游账户取现请求日期',
+ `cash_hf_seq_id` VARCHAR(64) DEFAULT NULL COMMENT '导游账户取现汇付全局流水号',
+ `payout_message` VARCHAR(255) DEFAULT NULL COMMENT '资金处理状态说明',
+ `status` VARCHAR(16) NOT NULL DEFAULT 'PENDING' COMMENT '状态:PENDING、TRANSFERRING、TRANSFERRED、PROCESSING、APPROVED、REJECTED',
`audit_remark` VARCHAR(255) DEFAULT NULL COMMENT '处理备注',
`processor` VARCHAR(64) DEFAULT NULL COMMENT '后台处理人',
`applied_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '申请时间',
@@ -417,6 +433,8 @@
PRIMARY KEY (`id`),
UNIQUE KEY `uk_guide_withdrawal_no` (`withdrawal_no`),
KEY `idx_guide_withdrawal_guide` (`guide_id`),
+ KEY `idx_guide_withdrawal_guide_status` (`guide_id`, `status`),
+ KEY `idx_guide_withdrawal_payout` (`status`, `updated_at`),
KEY `idx_guide_withdrawal_status` (`status`),
KEY `idx_guide_withdrawal_applied_at` (`applied_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='导游提现申请表';
@@ -762,6 +780,22 @@
ALTER TABLE `guide_team` ADD COLUMN `deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '逻辑删除标记:0正常,1删除';
ALTER TABLE `guide_team_scenic_config` ADD COLUMN `deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '逻辑删除标记:0正常,1删除';
ALTER TABLE `guide_withdrawal` ADD COLUMN `deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '逻辑删除标记:0正常,1删除';
+
+CREATE TABLE IF NOT EXISTS `guide_bank_branch` (
+ `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '开户行主键',
+ `bank_name` VARCHAR(64) NOT NULL COMMENT '银行名称',
+ `branch_name` VARCHAR(128) NOT NULL COMMENT '开户行名称',
+ `branch_code` VARCHAR(32) NOT NULL COMMENT '联行号',
+ `city_code` VARCHAR(16) NOT NULL COMMENT '城市行政区划编码',
+ `status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态:1启用,0停用',
+ `deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '逻辑删除:0正常,1删除',
+ `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+ `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `uk_guide_bank_branch_code` (`branch_code`),
+ KEY `idx_guide_bank_branch_city_status` (`city_code`, `status`),
+ KEY `idx_guide_bank_branch_name` (`bank_name`, `branch_name`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='导游结算卡开户行基础表';
ALTER TABLE `operation_scenic_meeting_point` ADD COLUMN `deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '逻辑删除标记:0正常,1删除';
ALTER TABLE `operation_scenic_pricing` ADD COLUMN `deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '逻辑删除标记:0正常,1删除';
ALTER TABLE `sys_admin_user_post` ADD COLUMN `deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '逻辑删除标记:0正常,1删除';
diff --git a/backend/src/main/java/com/tourguide/common/huifu/DouGongNotifyController.java b/backend/src/main/java/com/tourguide/common/huifu/DouGongNotifyController.java
index 86252cd..40826b8 100644
--- a/backend/src/main/java/com/tourguide/common/huifu/DouGongNotifyController.java
+++ b/backend/src/main/java/com/tourguide/common/huifu/DouGongNotifyController.java
@@ -3,6 +3,7 @@
import com.alibaba.fastjson.JSONObject;
import com.tourguide.modules.order.service.HuifuPaymentCallbackService;
import com.tourguide.modules.order.service.HuifuRefundCallbackService;
+import com.tourguide.modules.finance.service.GuideWithdrawalService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestParam;
@@ -23,13 +24,16 @@
private final HuifuCallbackVerifier callbackVerifier;
private final HuifuPaymentCallbackService paymentCallbackService;
private final HuifuRefundCallbackService refundCallbackService;
+ private final GuideWithdrawalService withdrawalService;
public DouGongNotifyController(HuifuCallbackVerifier callbackVerifier,
HuifuPaymentCallbackService paymentCallbackService,
- HuifuRefundCallbackService refundCallbackService) {
+ HuifuRefundCallbackService refundCallbackService,
+ GuideWithdrawalService withdrawalService) {
this.callbackVerifier = callbackVerifier;
this.paymentCallbackService = paymentCallbackService;
this.refundCallbackService = refundCallbackService;
+ this.withdrawalService = withdrawalService;
}
@PostMapping("/pay-notify")
@@ -73,7 +77,14 @@
@PostMapping("/encashment")
public String encashment(@RequestParam(value = "sign", required = false) String sign,
@RequestParam(value = "resp_data", required = false) String respData) {
- return handleNotify("dougong-encashment", sign, respData);
+ try {
+ JSONObject body = callbackVerifier.verify(sign, respData);
+ withdrawalService.handleCallback(body);
+ return "200";
+ } catch (Exception exception) {
+ log.warn("dougong-encashment callback failed: {}", exception.getMessage());
+ return "FAIL";
+ }
}
private String handleNotify(String bizName, String sign, String respData) {
diff --git a/backend/src/main/java/com/tourguide/common/huifu/biz/DouGongBasicDataBiz.java b/backend/src/main/java/com/tourguide/common/huifu/biz/DouGongBasicDataBiz.java
index eb2df3d..0518339 100644
--- a/backend/src/main/java/com/tourguide/common/huifu/biz/DouGongBasicDataBiz.java
+++ b/backend/src/main/java/com/tourguide/common/huifu/biz/DouGongBasicDataBiz.java
@@ -76,6 +76,19 @@
log.info("个人用户基本信息开户返回参数:{}", response);
return response;
}
+
+ /** 企业用户基础资料进件。 */
+ public Map<String, Object> userBasicDataEnt(DouGongUserWithdrawalProfile userWithdrawal) throws Exception {
+ DouGongRequestSupport.initBasePay(huiFuProperties);
+ Map<String, Object> paramsInfo = enterpriseParams(userWithdrawal);
+ paramsInfo.put("req_seq_id", DouGongRequestSupport.generateForHuiFu());
+ paramsInfo.put("req_date", DouGongRequestSupport.todayForHuiFu());
+ log.info("企业用户基本信息开户请求参数:{}", paramsInfo);
+ Map<String, Object> response = BasePayRequest.requestBasePay(
+ "v2/user/basicdata/ent", paramsInfo, null, false);
+ log.info("企业用户基本信息开户返回参数:{}", response);
+ return response;
+ }
/**
* 个人用户基本信息修改
* @return
@@ -113,6 +126,39 @@
// 3. 发起API调用
Map<String, Object> response = BasePayRequest.requestBasePay("v2/user/basicdata/indv/modify", paramsInfo, null, false);
log.info("个人用户基本信息修改返回参数:{}", response);
+ return response;
+ }
+
+ /** 企业用户基础资料修改,用于审核驳回后的重新提交。 */
+ public Map<String, Object> userBasicDataEntModify(DouGongUserWithdrawalProfile userWithdrawal) throws Exception {
+ DouGongRequestSupport.initBasePay(huiFuProperties);
+ Map<String, Object> paramsInfo = enterpriseParams(userWithdrawal);
+ paramsInfo.put("req_seq_id", DouGongRequestSupport.generateForHuiFu());
+ paramsInfo.put("req_date", DouGongRequestSupport.todayForHuiFu());
+ paramsInfo.put("huifu_id", userWithdrawal.getHuifuId());
+ log.info("企业用户基本信息修改请求参数:{}", paramsInfo);
+ Map<String, Object> response = BasePayRequest.requestBasePay(
+ "v2/user/basicdata/ent/modify", paramsInfo, null, false);
+ log.info("企业用户基本信息修改返回参数:{}", response);
+ return response;
+ }
+
+ /** 查询个人或企业用户的进件申请状态。 */
+ public Map<String, Object> userApplyQuery(DouGongUserWithdrawalProfile userWithdrawal,
+ String applyNo) throws Exception {
+ if (applyNo == null || applyNo.trim().isEmpty() || applyNo.trim().length() > 18) {
+ throw new IllegalArgumentException("斗拱进件状态查询申请单号不能为空且长度不能超过18个字符");
+ }
+ DouGongRequestSupport.initBasePay(huiFuProperties);
+ Map<String, Object> paramsInfo = new HashMap<>();
+ paramsInfo.put("huifu_id", userWithdrawal.getHuifuId());
+ paramsInfo.put("req_seq_id", DouGongRequestSupport.generateForHuiFu());
+ paramsInfo.put("req_date", DouGongRequestSupport.todayForHuiFu());
+ paramsInfo.put("apply_no", applyNo.trim());
+ log.info("用户进件申请状态查询请求参数:{}", paramsInfo);
+ Map<String, Object> response = BasePayRequest.requestBasePay(
+ "v2/user/apply/query", paramsInfo, null, false);
+ log.info("用户进件申请状态查询返回参数:{}", response);
return response;
}
/**
@@ -266,13 +312,68 @@
// 3. 发起API调用
Map<String, Object> response = BasePayRequest.requestBasePay("v2/trade/acctpayment/balance/query", paramsInfo, null, false);
log.info("账户余额信息查询返回参数:{}", response);
- String string = response.get("acctInfo_list").toString();
- JSONArray accountList = JSONArray.parseArray(string);
- if (accountList != null && !accountList.isEmpty()) {
- JSONObject acctInfo = accountList.getJSONObject(0);
- log.info("账户余额信息查询返回余额:{}", acctInfo.getString("avail_bal"));
- return acctInfo.getBigDecimal("avail_bal");
+ return availableBalance(response);
+ }
+
+ static BigDecimal availableBalance(Map<String, Object> response) {
+ if (response == null) return BigDecimal.ZERO;
+ Object accountData = response.get("acctInfo_list");
+ if (accountData == null) accountData = response.get("acct_info_list");
+ if (accountData == null) return BigDecimal.ZERO;
+ JSONArray accountList = accountData instanceof JSONArray
+ ? (JSONArray) accountData
+ : JSONArray.parseArray(accountData instanceof String
+ ? (String) accountData : JSONObject.toJSONString(accountData));
+ if (accountList == null || accountList.isEmpty()) return BigDecimal.ZERO;
+ JSONObject acctInfo = accountList.getJSONObject(0);
+ if (acctInfo == null || acctInfo.get("avail_bal") == null) return BigDecimal.ZERO;
+ BigDecimal balance = acctInfo.getBigDecimal("avail_bal");
+ return balance == null ? BigDecimal.ZERO : balance;
+ }
+
+ private Map<String, Object> enterpriseParams(DouGongUserWithdrawalProfile profile) {
+ Map<String, Object> params = new HashMap<>();
+ params.put("reg_name", profile.getEnterpriseName());
+ params.put("license_code", profile.getCreditCode());
+ params.put("license_validity_type", validityType(profile.getLicenseValidityType()));
+ params.put("license_begin_date", compactDate(profile.getLicenseBeginDate()));
+ putFixedEndDate(params, "license_end_date", profile.getLicenseValidityType(), profile.getLicenseEndDate());
+ params.put("reg_prov_id", profile.getRegisteredProvinceCode());
+ params.put("reg_area_id", profile.getRegisteredCityCode());
+ params.put("reg_district_id", profile.getRegisteredDistrictCode());
+ params.put("reg_detail", profile.getRegisteredAddress());
+ params.put("legal_name", profile.getCertificateName());
+ params.put("legal_cert_type", "00");
+ params.put("legal_cert_no", profile.getCertificateCode());
+ String[] certificateDates = certificateDates(profile.getCertificateExpireTime());
+ params.put("legal_cert_validity_type", "长期".equals(certificateDates[1]) ? "1" : "0");
+ params.put("legal_cert_begin_date", compactDate(certificateDates[0]));
+ if (!"长期".equals(certificateDates[1])) {
+ params.put("legal_cert_end_date", compactDate(certificateDates[1]));
}
- return BigDecimal.ZERO;
+ params.put("legal_cert_nationality", "CHN");
+ params.put("contact_name", profile.getContactName());
+ params.put("contact_mobile", profile.getPhone());
+ return params;
+ }
+
+ private String validityType(String value) {
+ return "long_term".equals(value) ? "1" : "0";
+ }
+
+ private void putFixedEndDate(Map<String, Object> params, String key, String validityType, String value) {
+ if (!"long_term".equals(validityType) && value != null && !value.trim().isEmpty()) {
+ params.put(key, compactDate(value));
+ }
+ }
+
+ private String compactDate(String value) {
+ return value == null ? null : value.replace("-", "");
+ }
+
+ private String[] certificateDates(String value) {
+ String normalized = value == null ? "" : value.replace(",", ",");
+ String[] values = normalized.split(",", -1);
+ return values.length >= 2 ? values : new String[]{normalized, "长期"};
}
}
diff --git a/backend/src/main/java/com/tourguide/common/huifu/biz/DouGongUserWithdrawalProfile.java b/backend/src/main/java/com/tourguide/common/huifu/biz/DouGongUserWithdrawalProfile.java
index 60229b7..d156143 100644
--- a/backend/src/main/java/com/tourguide/common/huifu/biz/DouGongUserWithdrawalProfile.java
+++ b/backend/src/main/java/com/tourguide/common/huifu/biz/DouGongUserWithdrawalProfile.java
@@ -1,7 +1,19 @@
package com.tourguide.common.huifu.biz;
public interface DouGongUserWithdrawalProfile {
+ String getSubjectType();
+ String getEnterpriseName();
+ String getCreditCode();
+ String getLicenseValidityType();
+ String getLicenseBeginDate();
+ String getLicenseEndDate();
+ String getRegisteredProvinceCode();
+ String getRegisteredCityCode();
+ String getRegisteredDistrictCode();
+ String getRegisteredAddress();
+ String getContactName();
String getPhone();
+ String getCertificateName();
String getOpenAccountName();
String getCertificateCode();
String getCertificateExpireTime();
diff --git a/backend/src/main/java/com/tourguide/common/huifu/biz/DouGongWithdrawBiz.java b/backend/src/main/java/com/tourguide/common/huifu/biz/DouGongWithdrawBiz.java
index 6c1d780..5b24da8 100644
--- a/backend/src/main/java/com/tourguide/common/huifu/biz/DouGongWithdrawBiz.java
+++ b/backend/src/main/java/com/tourguide/common/huifu/biz/DouGongWithdrawBiz.java
@@ -1,133 +1,82 @@
package com.tourguide.common.huifu.biz;
import com.alibaba.fastjson.JSONObject;
+import com.huifu.bspay.sdk.opps.core.net.BasePayRequest;
import com.tourguide.common.huifu.properties.HuiFuProperties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.http.*;
import org.springframework.stereotype.Component;
-import org.springframework.web.client.RestTemplate;
import java.math.BigDecimal;
-import java.security.KeyFactory;
-import java.security.PrivateKey;
-import java.security.Signature;
-import java.security.spec.PKCS8EncodedKeySpec;
-import java.text.SimpleDateFormat;
-import java.util.Base64;
-import java.util.Date;
+import java.math.RoundingMode;
+import java.util.HashMap;
+import java.util.Map;
-/**
- * 斗拱主动提现业务。
- *
- * 备注:该类只向斗拱发起提现,导游余额扣减、提现单状态变更应在本项目业务服务中幂等完成。
- */
+/** 斗拱主动取现和出金交易查询。 */
@Component
public class DouGongWithdrawBiz {
private static final Logger log = LoggerFactory.getLogger(DouGongWithdrawBiz.class);
- @Autowired
- private HuiFuProperties huiFuProperties;
- @Autowired
- @Qualifier("huifuRestTemplate")
- private RestTemplate restTemplate;
+ private final HuiFuProperties huiFuProperties;
- private static final String ENCASHMENT_URL = "https://api.huifu.com/v2/trade/settlement/encashment";
- /**
- * 主动取现接口。
- *
- * @param cashAmt 取现金额,单位元
- * @param huifuId 取现方汇付 ID
- * @param tokenNo 绑定取现卡后返回的取现卡序列号
- * @return 斗拱响应结果
- */
- public JSONObject encashment(BigDecimal cashAmt, String huifuId, String tokenNo) {
+ public DouGongWithdrawBiz(HuiFuProperties huiFuProperties) {
+ this.huiFuProperties = huiFuProperties;
+ }
+
+ public JSONObject encashment(BigDecimal cashAmt, String huifuId, String tokenNo,
+ String requestSequence, String requestDate) {
try {
- log.info("开始调用斗拱提现接口,取现方ID: {}, 取现金额: {}", huifuId, cashAmt);
-
- JSONObject data = new JSONObject();
- SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
- String reqDate = dateFormat.format(new Date());
-
- data.put("req_date", reqDate);
- data.put("req_seq_id", DouGongRequestSupport.generateForHuiFu("TX"));
- data.put("cash_amt", cashAmt.toString());
- data.put("huifu_id", huifuId);
- // 备注:提现到账周期先固定 D1,后续如果后台提供提现规则,再从配置或提现申请中读取。
- data.put("into_acct_date_type", "D1");
- data.put("token_no", tokenNo);
- data.put("notify_url", huiFuProperties.getCallbackPath() + "/base/dougong/encashment");
-
- String dataStr = data.toJSONString();
- log.info("业务参数data: {}", dataStr);
-
- JSONObject requestJson = new JSONObject();
- requestJson.put("sys_id", huiFuProperties.getSysId());
- requestJson.put("product_id", huiFuProperties.getProductId());
- requestJson.put("data", dataStr);
-
- // 备注:主动提现接口按完整报文签名,不复用支付创建接口只签 data 的逻辑。
- String signData = requestJson.toJSONString();
- log.info("待签名报文: {}", signData);
-
- String signature = sign(signData, huiFuProperties.getRsaPrivateKey());
- if (signature == null) {
- log.error("签名生成失败");
- return createErrorResult("签名生成失败");
- }
-
- requestJson.put("sign", signature);
-
- HttpHeaders headers = new HttpHeaders();
- headers.setContentType(MediaType.APPLICATION_JSON);
-
- HttpEntity<String> requestEntity = new HttpEntity<>(requestJson.toJSONString(), headers);
-
- log.info("发送斗拱提现请求到: {}", ENCASHMENT_URL);
- ResponseEntity<String> response = restTemplate.exchange(
- ENCASHMENT_URL,
- HttpMethod.POST,
- requestEntity,
- String.class
- );
-
- log.info("斗拱提现接口响应状态: {}, 响应内容: {}", response.getStatusCode(), response.getBody());
-
- // 解析响应
- JSONObject result = JSONObject.parseObject(response.getBody());
- return result;
-
- } catch (Exception e) {
- log.error("调用斗拱提现接口异常: {}", e.getMessage(), e);
- return createErrorResult("调用接口异常: " + e.getMessage());
+ DouGongRequestSupport.initBasePay(huiFuProperties);
+ Map<String, Object> params = new HashMap<>();
+ params.put("req_date", requestDate);
+ params.put("req_seq_id", requestSequence);
+ params.put("cash_amt", cashAmt.setScale(2, RoundingMode.HALF_UP).toString());
+ params.put("huifu_id", huifuId);
+ params.put("into_acct_date_type", "D1");
+ params.put("token_no", tokenNo);
+ params.put("enchashment_channel", "00");
+ params.put("notify_url", callbackBaseUrl() + "/base/dougong/encashment");
+ log.info("调用斗拱取现接口,reqSeqId={},huifuId={},cashAmt={}",
+ requestSequence, huifuId, cashAmt);
+ return json(BasePayRequest.requestBasePay(
+ "v2/trade/settlement/encashment", params, null, false));
+ } catch (Exception exception) {
+ log.error("调用斗拱取现接口异常,reqSeqId={},原因={}",
+ requestSequence, exception.getMessage(), exception);
+ return error(exception.getMessage());
}
}
+ public JSONObject query(String huifuId, String requestDate, String requestSequence) {
+ try {
+ DouGongRequestSupport.initBasePay(huiFuProperties);
+ Map<String, Object> params = new HashMap<>();
+ params.put("huifu_id", huifuId);
+ params.put("org_req_date", requestDate);
+ params.put("org_req_seq_id", requestSequence);
+ return json(BasePayRequest.requestBasePay(
+ "v2/trade/settlement/query", params, null, false));
+ } catch (Exception exception) {
+ log.warn("查询斗拱取现状态异常,reqSeqId={},原因={}", requestSequence, exception.getMessage());
+ return error(exception.getMessage());
+ }
+ }
- private JSONObject createErrorResult(String errorMsg) {
+ private JSONObject json(Map<String, Object> response) {
+ return response == null ? null : JSONObject.parseObject(JSONObject.toJSONString(response));
+ }
+
+ private JSONObject error(String message) {
JSONObject result = new JSONObject();
result.put("code", "9999");
- result.put("msg", errorMsg);
+ result.put("msg", message == null ? "斗拱服务调用异常" : message);
result.put("success", false);
return result;
}
- public static String sign(String data, String privateKeyBase64) {
- // Base64 --> Key
- try {
- byte[] bytes = Base64.getDecoder().decode(privateKeyBase64);
- PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(bytes);
- KeyFactory keyFactory;
- keyFactory = KeyFactory.getInstance("RSA");
- PrivateKey privateKey = keyFactory.generatePrivate(keySpec);
- // Sign
- Signature signature = Signature.getInstance("SHA256WithRSA");
- signature.initSign(privateKey);
- signature.update(data.getBytes("UTF-8"));
- return Base64.getEncoder().encodeToString(signature.sign());
- } catch (Exception e) {
- return null;
- }
+
+ private String callbackBaseUrl() {
+ String value = huiFuProperties.getCallbackPath().trim();
+ while (value.endsWith("/")) value = value.substring(0, value.length() - 1);
+ return value;
}
}
diff --git a/backend/src/main/java/com/tourguide/common/huifu/biz/FenZhangUtil.java b/backend/src/main/java/com/tourguide/common/huifu/biz/FenZhangUtil.java
index 37fd194..a3583f6 100644
--- a/backend/src/main/java/com/tourguide/common/huifu/biz/FenZhangUtil.java
+++ b/backend/src/main/java/com/tourguide/common/huifu/biz/FenZhangUtil.java
@@ -4,6 +4,8 @@
import com.alibaba.fastjson.JSONObject;
import com.huifu.bspay.sdk.opps.core.net.BasePayRequest;
import com.tourguide.common.huifu.properties.HuiFuProperties;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
@@ -16,6 +18,7 @@
*/
@Component
public class FenZhangUtil {
+ private static final Logger log = LoggerFactory.getLogger(FenZhangUtil.class);
private final HuiFuProperties huiFuProperties;
public FenZhangUtil(HuiFuProperties huiFuProperties) {
@@ -34,7 +37,12 @@
paramsInfo.put("acct_split_bunch", acctSplitBunch(amount, receiverHuifuId));
paramsInfo.put("risk_check_data", riskCheckData());
paramsInfo.put("trans_fee_take_flag", "OUT");
- return BasePayRequest.requestBasePay("v2/trade/acctpayment/pay", paramsInfo, null, false);
+ log.info("调用斗拱主账户划账,reqSeqId={},receiverHuifuId={},amount={}",
+ reqSeqId, receiverHuifuId, amount);
+ Map<String, Object> response = BasePayRequest.requestBasePay(
+ "v2/trade/acctpayment/pay", paramsInfo, null, false);
+ log.info("斗拱主账户划账响应,reqSeqId={},response={}", reqSeqId, response);
+ return response;
}
public Map<String, Object> queryFenzhang(String reqSeqId, String reqDate) throws Exception {
@@ -78,7 +86,7 @@
private String riskCheckData() {
JSONObject data = new JSONObject();
data.put("sub_product", "1");
- data.put("transfer_type", "05");
+ data.put("transfer_type", "04");
return data.toJSONString();
}
}
diff --git a/backend/src/main/java/com/tourguide/modules/finance/dto/WithdrawalResponse.java b/backend/src/main/java/com/tourguide/modules/finance/dto/WithdrawalResponse.java
index dfded33..70e3a34 100644
--- a/backend/src/main/java/com/tourguide/modules/finance/dto/WithdrawalResponse.java
+++ b/backend/src/main/java/com/tourguide/modules/finance/dto/WithdrawalResponse.java
@@ -11,6 +11,15 @@
private final String guideName;
private final String guideMobile;
private final BigDecimal amount;
+ private final Integer bankCardId;
+ private final String bankName;
+ private final String cardMasked;
+ private final String transferReqSeqId;
+ private final String transferHfSeqId;
+ private final LocalDateTime transferredAt;
+ private final String cashReqSeqId;
+ private final String cashHfSeqId;
+ private final String payoutMessage;
private final String status;
private final String auditRemark;
private final String processor;
@@ -24,6 +33,15 @@
this.guideName = withdrawal.getGuideName();
this.guideMobile = withdrawal.getGuideMobile();
this.amount = withdrawal.getAmount();
+ this.bankCardId = withdrawal.getBankCardId();
+ this.bankName = withdrawal.getBankName();
+ this.cardMasked = withdrawal.getCardMasked();
+ this.transferReqSeqId = withdrawal.getTransferReqSeqId();
+ this.transferHfSeqId = withdrawal.getTransferHfSeqId();
+ this.transferredAt = withdrawal.getTransferredAt();
+ this.cashReqSeqId = withdrawal.getCashReqSeqId();
+ this.cashHfSeqId = withdrawal.getCashHfSeqId();
+ this.payoutMessage = withdrawal.getPayoutMessage();
this.status = withdrawal.getStatus();
this.auditRemark = withdrawal.getAuditRemark();
this.processor = withdrawal.getProcessor();
@@ -37,8 +55,18 @@
public String getGuideName() { return guideName; }
public String getGuideMobile() { return guideMobile; }
public BigDecimal getAmount() { return amount; }
+ public Integer getBankCardId() { return bankCardId; }
+ public String getBankName() { return bankName; }
+ public String getCardMasked() { return cardMasked; }
+ public String getTransferReqSeqId() { return transferReqSeqId; }
+ public String getTransferHfSeqId() { return transferHfSeqId; }
+ public LocalDateTime getTransferredAt() { return transferredAt; }
+ public String getCashReqSeqId() { return cashReqSeqId; }
+ public String getCashHfSeqId() { return cashHfSeqId; }
+ public String getPayoutMessage() { return payoutMessage; }
public String getStatus() { return status; }
public String getAuditRemark() { return auditRemark; }
+ public String getReason() { return auditRemark; }
public String getProcessor() { return processor; }
public LocalDateTime getAppliedAt() { return appliedAt; }
public LocalDateTime getProcessedAt() { return processedAt; }
diff --git a/backend/src/main/java/com/tourguide/modules/finance/entity/GuideWithdrawal.java b/backend/src/main/java/com/tourguide/modules/finance/entity/GuideWithdrawal.java
index d02aff3..0091f7b 100644
--- a/backend/src/main/java/com/tourguide/modules/finance/entity/GuideWithdrawal.java
+++ b/backend/src/main/java/com/tourguide/modules/finance/entity/GuideWithdrawal.java
@@ -17,6 +17,17 @@
private String guideName;
private String guideMobile;
private BigDecimal amount;
+ private Integer bankCardId;
+ private String bankName;
+ private String cardMasked;
+ private String transferReqSeqId;
+ private String transferReqDate;
+ private String transferHfSeqId;
+ private LocalDateTime transferredAt;
+ private String cashReqSeqId;
+ private String cashReqDate;
+ private String cashHfSeqId;
+ private String payoutMessage;
private String status;
private String auditRemark;
private String processor;
@@ -37,6 +48,28 @@
public void setGuideMobile(String guideMobile) { this.guideMobile = guideMobile; }
public BigDecimal getAmount() { return amount; }
public void setAmount(BigDecimal amount) { this.amount = amount; }
+ public Integer getBankCardId() { return bankCardId; }
+ public void setBankCardId(Integer bankCardId) { this.bankCardId = bankCardId; }
+ public String getBankName() { return bankName; }
+ public void setBankName(String bankName) { this.bankName = bankName; }
+ public String getCardMasked() { return cardMasked; }
+ public void setCardMasked(String cardMasked) { this.cardMasked = cardMasked; }
+ public String getTransferReqSeqId() { return transferReqSeqId; }
+ public void setTransferReqSeqId(String transferReqSeqId) { this.transferReqSeqId = transferReqSeqId; }
+ public String getTransferReqDate() { return transferReqDate; }
+ public void setTransferReqDate(String transferReqDate) { this.transferReqDate = transferReqDate; }
+ public String getTransferHfSeqId() { return transferHfSeqId; }
+ public void setTransferHfSeqId(String transferHfSeqId) { this.transferHfSeqId = transferHfSeqId; }
+ public LocalDateTime getTransferredAt() { return transferredAt; }
+ public void setTransferredAt(LocalDateTime transferredAt) { this.transferredAt = transferredAt; }
+ public String getCashReqSeqId() { return cashReqSeqId; }
+ public void setCashReqSeqId(String cashReqSeqId) { this.cashReqSeqId = cashReqSeqId; }
+ public String getCashReqDate() { return cashReqDate; }
+ public void setCashReqDate(String cashReqDate) { this.cashReqDate = cashReqDate; }
+ public String getCashHfSeqId() { return cashHfSeqId; }
+ public void setCashHfSeqId(String cashHfSeqId) { this.cashHfSeqId = cashHfSeqId; }
+ public String getPayoutMessage() { return payoutMessage; }
+ public void setPayoutMessage(String payoutMessage) { this.payoutMessage = payoutMessage; }
public String getStatus() { return status; }
public void setStatus(String status) { this.status = status; }
public String getAuditRemark() { return auditRemark; }
diff --git a/backend/src/main/java/com/tourguide/modules/finance/entity/GuideWithdrawalAccount.java b/backend/src/main/java/com/tourguide/modules/finance/entity/GuideWithdrawalAccount.java
index 2648c84..ac721ec 100644
--- a/backend/src/main/java/com/tourguide/modules/finance/entity/GuideWithdrawalAccount.java
+++ b/backend/src/main/java/com/tourguide/modules/finance/entity/GuideWithdrawalAccount.java
@@ -16,6 +16,28 @@
private Integer userId;
@TableField("userType")
private Integer userType;
+ @TableField("subjectType")
+ private String subjectType;
+ @TableField("enterpriseName")
+ private String enterpriseName;
+ @TableField("creditCode")
+ private String creditCode;
+ @TableField("licenseValidityType")
+ private String licenseValidityType;
+ @TableField("licenseBeginDate")
+ private String licenseBeginDate;
+ @TableField("licenseEndDate")
+ private String licenseEndDate;
+ @TableField("registeredProvinceCode")
+ private String registeredProvinceCode;
+ @TableField("registeredCityCode")
+ private String registeredCityCode;
+ @TableField("registeredDistrictCode")
+ private String registeredDistrictCode;
+ @TableField("registeredAddress")
+ private String registeredAddress;
+ @TableField("contactName")
+ private String contactName;
@TableField("certificateName")
private String certificateName;
@TableField("certificateType")
@@ -34,6 +56,8 @@
private String bankCode;
@TableField("bankBranchCode")
private String bankBranchCode;
+ @TableField("bankBranchName")
+ private String bankBranchName;
@TableField("openAccountName")
private String openAccountName;
@TableField("transactionAuthorizationCode")
@@ -83,6 +107,10 @@
private String bankCardProvinceCode;
@TableField("tokenNo")
private String tokenNo;
+ @TableField("bankCardStatus")
+ private String bankCardStatus;
+ @TableField("bankCardReason")
+ private String bankCardReason;
public Integer getId() { return id; }
public void setId(Integer id) { this.id = id; }
@@ -90,6 +118,28 @@
public void setUserId(Integer userId) { this.userId = userId; }
public Integer getUserType() { return userType; }
public void setUserType(Integer userType) { this.userType = userType; }
+ public String getSubjectType() { return subjectType; }
+ public void setSubjectType(String subjectType) { this.subjectType = subjectType; }
+ public String getEnterpriseName() { return enterpriseName; }
+ public void setEnterpriseName(String enterpriseName) { this.enterpriseName = enterpriseName; }
+ public String getCreditCode() { return creditCode; }
+ public void setCreditCode(String creditCode) { this.creditCode = creditCode; }
+ public String getLicenseValidityType() { return licenseValidityType; }
+ public void setLicenseValidityType(String licenseValidityType) { this.licenseValidityType = licenseValidityType; }
+ public String getLicenseBeginDate() { return licenseBeginDate; }
+ public void setLicenseBeginDate(String licenseBeginDate) { this.licenseBeginDate = licenseBeginDate; }
+ public String getLicenseEndDate() { return licenseEndDate; }
+ public void setLicenseEndDate(String licenseEndDate) { this.licenseEndDate = licenseEndDate; }
+ public String getRegisteredProvinceCode() { return registeredProvinceCode; }
+ public void setRegisteredProvinceCode(String registeredProvinceCode) { this.registeredProvinceCode = registeredProvinceCode; }
+ public String getRegisteredCityCode() { return registeredCityCode; }
+ public void setRegisteredCityCode(String registeredCityCode) { this.registeredCityCode = registeredCityCode; }
+ public String getRegisteredDistrictCode() { return registeredDistrictCode; }
+ public void setRegisteredDistrictCode(String registeredDistrictCode) { this.registeredDistrictCode = registeredDistrictCode; }
+ public String getRegisteredAddress() { return registeredAddress; }
+ public void setRegisteredAddress(String registeredAddress) { this.registeredAddress = registeredAddress; }
+ public String getContactName() { return contactName; }
+ public void setContactName(String contactName) { this.contactName = contactName; }
public String getCertificateName() { return certificateName; }
public void setCertificateName(String certificateName) { this.certificateName = certificateName; }
public Integer getCertificateType() { return certificateType; }
@@ -108,6 +158,8 @@
public void setBankCode(String bankCode) { this.bankCode = bankCode; }
public String getBankBranchCode() { return bankBranchCode; }
public void setBankBranchCode(String bankBranchCode) { this.bankBranchCode = bankBranchCode; }
+ public String getBankBranchName() { return bankBranchName; }
+ public void setBankBranchName(String bankBranchName) { this.bankBranchName = bankBranchName; }
public String getOpenAccountName() { return openAccountName; }
public void setOpenAccountName(String openAccountName) { this.openAccountName = openAccountName; }
public String getTransactionAuthorizationCode() { return transactionAuthorizationCode; }
@@ -160,4 +212,8 @@
public void setBankCardProvinceCode(String bankCardProvinceCode) { this.bankCardProvinceCode = bankCardProvinceCode; }
public String getTokenNo() { return tokenNo; }
public void setTokenNo(String tokenNo) { this.tokenNo = tokenNo; }
+ public String getBankCardStatus() { return bankCardStatus; }
+ public void setBankCardStatus(String bankCardStatus) { this.bankCardStatus = bankCardStatus; }
+ public String getBankCardReason() { return bankCardReason; }
+ public void setBankCardReason(String bankCardReason) { this.bankCardReason = bankCardReason; }
}
diff --git a/backend/src/main/java/com/tourguide/modules/finance/mapper/GuideWithdrawalAccountMapper.java b/backend/src/main/java/com/tourguide/modules/finance/mapper/GuideWithdrawalAccountMapper.java
index 9e2a3dd..a64c8f9 100644
--- a/backend/src/main/java/com/tourguide/modules/finance/mapper/GuideWithdrawalAccountMapper.java
+++ b/backend/src/main/java/com/tourguide/modules/finance/mapper/GuideWithdrawalAccountMapper.java
@@ -2,6 +2,11 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.tourguide.modules.finance.entity.GuideWithdrawalAccount;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
public interface GuideWithdrawalAccountMapper extends BaseMapper<GuideWithdrawalAccount> {
+ @Select("SELECT * FROM t_user_withdrawal WHERE userId = #{guideId} AND userType = 2 " +
+ "AND type = 1 AND status = 1 ORDER BY id DESC LIMIT 1 FOR UPDATE")
+ GuideWithdrawalAccount selectCurrentForUpdate(@Param("guideId") int guideId);
}
diff --git a/backend/src/main/java/com/tourguide/modules/finance/mapper/GuideWithdrawalMapper.java b/backend/src/main/java/com/tourguide/modules/finance/mapper/GuideWithdrawalMapper.java
index 11b343e..57fcbaa 100644
--- a/backend/src/main/java/com/tourguide/modules/finance/mapper/GuideWithdrawalMapper.java
+++ b/backend/src/main/java/com/tourguide/modules/finance/mapper/GuideWithdrawalMapper.java
@@ -2,6 +2,35 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.tourguide.modules.finance.entity.GuideWithdrawal;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.Update;
+
+import java.time.LocalDateTime;
+import java.util.List;
public interface GuideWithdrawalMapper extends BaseMapper<GuideWithdrawal> {
+ @Select("SELECT * FROM guide_withdrawal WHERE id = #{id} AND deleted = 0 FOR UPDATE")
+ GuideWithdrawal selectForUpdate(@Param("id") Long id);
+
+ @Select("SELECT * FROM guide_withdrawal WHERE deleted = 0 " +
+ "AND (cash_req_seq_id = #{requestSequence} OR withdrawal_no = #{requestSequence}) " +
+ "LIMIT 1 FOR UPDATE")
+ GuideWithdrawal selectByPayoutSequenceForUpdate(@Param("requestSequence") String requestSequence);
+
+ @Select("SELECT id FROM guide_withdrawal WHERE deleted = 0 " +
+ "AND status IN ('TRANSFERRING', 'TRANSFERRED', 'PROCESSING') " +
+ "AND updated_at <= #{beforeTime} ORDER BY updated_at, id LIMIT #{limit}")
+ List<Long> selectPendingPayoutIds(@Param("beforeTime") LocalDateTime beforeTime,
+ @Param("limit") int limit);
+
+ @Update("UPDATE guide_withdrawal SET status = 'TRANSFERRED', " +
+ "cash_req_seq_id = NULL, cash_req_date = NULL, cash_hf_seq_id = NULL, " +
+ "payout_message = #{message}, processed_at = #{processedAt}, updated_at = #{updatedAt} " +
+ "WHERE id = #{id} AND deleted = 0 AND status IN ('PROCESSING', 'TRANSFERRED')")
+ int resetCashForRetry(@Param("id") Long id,
+ @Param("message") String message,
+ @Param("processedAt") LocalDateTime processedAt,
+ @Param("updatedAt") LocalDateTime updatedAt);
+
}
diff --git a/backend/src/main/java/com/tourguide/modules/finance/service/AdminFinanceService.java b/backend/src/main/java/com/tourguide/modules/finance/service/AdminFinanceService.java
index 7f8b108..d4081b0 100644
--- a/backend/src/main/java/com/tourguide/modules/finance/service/AdminFinanceService.java
+++ b/backend/src/main/java/com/tourguide/modules/finance/service/AdminFinanceService.java
@@ -39,15 +39,18 @@
private final GuideUserMapper guideUserMapper;
private final GuideTeamMapper guideTeamMapper;
private final PlatformSettingsService settingsService;
+ private final GuideWithdrawalService guideWithdrawalService;
public AdminFinanceService(TourOrderMapper orderMapper, GuideWithdrawalMapper withdrawalMapper,
GuideUserMapper guideUserMapper, GuideTeamMapper guideTeamMapper,
- PlatformSettingsService settingsService) {
+ PlatformSettingsService settingsService,
+ GuideWithdrawalService guideWithdrawalService) {
this.orderMapper = orderMapper;
this.withdrawalMapper = withdrawalMapper;
this.guideUserMapper = guideUserMapper;
this.guideTeamMapper = guideTeamMapper;
this.settingsService = settingsService;
+ this.guideWithdrawalService = guideWithdrawalService;
}
public FinanceLedgerPageResponse ledger(long page, long size, String direction, String keyword,
@@ -92,18 +95,7 @@
@Transactional
public WithdrawalResponse processWithdrawal(Long id, WithdrawalProcessRequest request, String processor) {
- GuideWithdrawal withdrawal = withdrawalMapper.selectById(id);
- if (withdrawal == null) throw new BusinessException(404, "提现申请不存在");
- if (!"PENDING".equals(withdrawal.getStatus())) throw new BusinessException(409, "提现申请已处理");
- if ("REJECTED".equals(request.getStatus()) && !StringUtils.hasText(request.getAuditRemark())) {
- throw new BusinessException(400, "驳回提现时请填写处理备注");
- }
- withdrawal.setStatus(request.getStatus());
- withdrawal.setAuditRemark(StringUtils.hasText(request.getAuditRemark()) ? request.getAuditRemark().trim() : null);
- withdrawal.setProcessor(processor);
- withdrawal.setProcessedAt(LocalDateTime.now());
- withdrawalMapper.updateById(withdrawal);
- return new WithdrawalResponse(withdrawal);
+ return guideWithdrawalService.process(id, request.getStatus(), request.getAuditRemark(), processor);
}
private LambdaQueryWrapper<TourOrder> ledgerQuery(boolean refund, String keyword, String paymentMethod,
@@ -149,8 +141,8 @@
guideIncome = guideIncome.negate();
amount = amount.negate();
}
- LocalDateTime settledAt = order.getCompletedAt() == null ? null
- : order.getCompletedAt().plusDays(settings.getSettlementDays());
+ LocalDateTime settledAt = order.getSettledAt() == null
+ ? order.getSettlementDueAt() : order.getSettledAt();
Long teamId = order.getCommissionTeamId() != null
? order.getCommissionTeamId()
: guide == null ? null : guide.getTeamId();
diff --git a/backend/src/main/java/com/tourguide/modules/finance/service/GuideElectronicLedgerService.java b/backend/src/main/java/com/tourguide/modules/finance/service/GuideElectronicLedgerService.java
index b6f5d80..861070b 100644
--- a/backend/src/main/java/com/tourguide/modules/finance/service/GuideElectronicLedgerService.java
+++ b/backend/src/main/java/com/tourguide/modules/finance/service/GuideElectronicLedgerService.java
@@ -29,13 +29,16 @@
private final GuideWithdrawalAccountMapper accountMapper;
private final GuideUserService guideUserService;
private final DouGongBasicDataBiz douGongBasicDataBiz;
+ private final GuideWithdrawableBalanceService balanceService;
public GuideElectronicLedgerService(GuideWithdrawalAccountMapper accountMapper,
GuideUserService guideUserService,
- DouGongBasicDataBiz douGongBasicDataBiz) {
+ DouGongBasicDataBiz douGongBasicDataBiz,
+ GuideWithdrawableBalanceService balanceService) {
this.accountMapper = accountMapper;
this.guideUserService = guideUserService;
this.douGongBasicDataBiz = douGongBasicDataBiz;
+ this.balanceService = balanceService;
}
public GuideElectronicLedgerResponse create(Long guideId, GuideElectronicLedgerRequest request) {
@@ -124,11 +127,7 @@
if (!StringUtils.hasText(account.getHuifuId())) {
throw new BusinessException(409, "请先完成斗拱进件");
}
- try {
- return douGongBasicDataBiz.balanceQuery(account.getHuifuId());
- } catch (Exception exception) {
- throw new BusinessException(502, "斗拱账户余额查询失败");
- }
+ return balanceService.getAvailableAmount(guideId);
}
private GuideWithdrawalAccount findCurrent(Long guideId) {
diff --git a/backend/src/main/java/com/tourguide/modules/order/entity/TourOrder.java b/backend/src/main/java/com/tourguide/modules/order/entity/TourOrder.java
index 602ba72..c3296c0 100644
--- a/backend/src/main/java/com/tourguide/modules/order/entity/TourOrder.java
+++ b/backend/src/main/java/com/tourguide/modules/order/entity/TourOrder.java
@@ -48,6 +48,9 @@
private BigDecimal commissionRate;
private Long commissionTeamId;
private BigDecimal guideEarningAmount;
+ private Integer settlementDays;
+ private LocalDateTime settlementDueAt;
+ private LocalDateTime settledAt;
private LocalDateTime acceptedAt;
private LocalDateTime arrivedAt;
private LocalDateTime serviceStartedAt;
@@ -133,6 +136,12 @@
public void setCommissionTeamId(Long commissionTeamId) { this.commissionTeamId = commissionTeamId; }
public BigDecimal getGuideEarningAmount() { return guideEarningAmount; }
public void setGuideEarningAmount(BigDecimal guideEarningAmount) { this.guideEarningAmount = guideEarningAmount; }
+ public Integer getSettlementDays() { return settlementDays; }
+ public void setSettlementDays(Integer settlementDays) { this.settlementDays = settlementDays; }
+ public LocalDateTime getSettlementDueAt() { return settlementDueAt; }
+ public void setSettlementDueAt(LocalDateTime settlementDueAt) { this.settlementDueAt = settlementDueAt; }
+ public LocalDateTime getSettledAt() { return settledAt; }
+ public void setSettledAt(LocalDateTime settledAt) { this.settledAt = settledAt; }
public LocalDateTime getAcceptedAt() { return acceptedAt; }
public void setAcceptedAt(LocalDateTime acceptedAt) { this.acceptedAt = acceptedAt; }
public LocalDateTime getArrivedAt() { return arrivedAt; }
diff --git a/backend/src/main/java/com/tourguide/modules/order/mapper/TourOrderMapper.java b/backend/src/main/java/com/tourguide/modules/order/mapper/TourOrderMapper.java
index 12767f6..cea1a02 100644
--- a/backend/src/main/java/com/tourguide/modules/order/mapper/TourOrderMapper.java
+++ b/backend/src/main/java/com/tourguide/modules/order/mapper/TourOrderMapper.java
@@ -56,6 +56,22 @@
"AND scenic_name IS NOT NULL AND scenic_name <> '' ORDER BY scenic_name")
List<String> selectGuideEarningScenics(Long guideId);
+ @Select("SELECT id FROM tour_order WHERE deleted = 0 AND status = 'COMPLETED' " +
+ "AND settled_at IS NULL AND settlement_due_at IS NOT NULL " +
+ "AND settlement_due_at <= #{now} AND guide_id IS NOT NULL " +
+ "AND guide_earning_amount IS NOT NULL " +
+ "AND (refund_status IS NULL OR refund_status <> 'REFUNDED') " +
+ "ORDER BY settlement_due_at, id LIMIT #{limit}")
+ List<Long> selectDueSettlementIds(@Param("now") LocalDateTime now, @Param("limit") int limit);
+
+ @Update("UPDATE tour_order SET status = 'COMPLETED', completed_at = #{completedAt}, " +
+ "settlement_due_at = TIMESTAMPADD(DAY, COALESCE(settlement_days, 1), #{completedAt}), " +
+ "updated_at = NOW() WHERE guide_id = #{guideId} AND receiving_session_id = #{sessionId} " +
+ "AND deleted = 0 AND status = 'IN_SERVICE'")
+ int completeSessionOrders(@Param("guideId") Long guideId,
+ @Param("sessionId") Long sessionId,
+ @Param("completedAt") LocalDateTime completedAt);
+
@Update("UPDATE tour_order SET status = 'CANCELLED', refund_status = 'REFUNDING', updated_at = NOW() " +
"WHERE id = #{id} AND deleted = 0 AND status = 'PENDING_ACCEPT' " +
"AND payment_time IS NOT NULL AND (refund_status IS NULL OR refund_status = 'NONE')")
diff --git a/backend/src/main/java/com/tourguide/modules/order/service/MiniTourOrderCommandService.java b/backend/src/main/java/com/tourguide/modules/order/service/MiniTourOrderCommandService.java
index 17f17ae..8114c54 100644
--- a/backend/src/main/java/com/tourguide/modules/order/service/MiniTourOrderCommandService.java
+++ b/backend/src/main/java/com/tourguide/modules/order/service/MiniTourOrderCommandService.java
@@ -101,6 +101,8 @@
order.setAmount(subtotalAmount);
order.setPlacedAt(now);
order.setMeetingPointCount(1);
+ Integer settlementDays = platformSettingsService.getSettings().getSettlementDays();
+ order.setSettlementDays(settlementDays == null ? 1 : Math.max(0, settlementDays));
order.setStatus(OrderStatus.PENDING_PAYMENT.getCode());
order.setRefundStatus(RefundStatus.NONE.getCode());
orderMapper.insert(order);
diff --git a/backend/src/main/java/com/tourguide/modules/user/entity/GuideUser.java b/backend/src/main/java/com/tourguide/modules/user/entity/GuideUser.java
index 9d90aae..1d42510 100644
--- a/backend/src/main/java/com/tourguide/modules/user/entity/GuideUser.java
+++ b/backend/src/main/java/com/tourguide/modules/user/entity/GuideUser.java
@@ -35,6 +35,7 @@
private BigDecimal rating;
private Integer autoDisableWhitelisted;
private String wechatOpenId;
+ private BigDecimal balance;
private Integer status;
@TableLogic
private Integer deleted;
@@ -85,6 +86,8 @@
public void setAutoDisableWhitelisted(Integer autoDisableWhitelisted) { this.autoDisableWhitelisted = autoDisableWhitelisted; }
public String getWechatOpenId() { return wechatOpenId; }
public void setWechatOpenId(String wechatOpenId) { this.wechatOpenId = wechatOpenId; }
+ public BigDecimal getBalance() { return balance; }
+ public void setBalance(BigDecimal balance) { this.balance = balance; }
public Integer getStatus() { return status; }
public void setStatus(Integer status) { this.status = status; }
public Integer getDeleted() { return deleted; }
diff --git a/backend/src/main/java/com/tourguide/modules/user/mapper/GuideUserMapper.java b/backend/src/main/java/com/tourguide/modules/user/mapper/GuideUserMapper.java
index d37320e..3f18848 100644
--- a/backend/src/main/java/com/tourguide/modules/user/mapper/GuideUserMapper.java
+++ b/backend/src/main/java/com/tourguide/modules/user/mapper/GuideUserMapper.java
@@ -3,11 +3,23 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.tourguide.modules.user.entity.GuideUser;
import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import java.math.BigDecimal;
public interface GuideUserMapper extends BaseMapper<GuideUser> {
+ @Select("SELECT COALESCE(balance, 0) FROM guide_user WHERE id = #{guideId} AND deleted = 0")
+ BigDecimal selectBalance(@Param("guideId") Long guideId);
+
+ @Update("UPDATE guide_user SET balance = balance + #{amount}, updated_at = NOW() " +
+ "WHERE id = #{guideId} AND deleted = 0")
+ int increaseBalance(@Param("guideId") Long guideId, @Param("amount") BigDecimal amount);
+
+ @Update("UPDATE guide_user SET balance = balance - #{amount}, updated_at = NOW() " +
+ "WHERE id = #{guideId} AND deleted = 0 AND balance >= #{amount}")
+ int decreaseBalance(@Param("guideId") Long guideId, @Param("amount") BigDecimal amount);
+
@Update("UPDATE guide_user SET accepted_order_count = accepted_order_count + 1, " +
"current_month_order_count = current_month_order_count + 1, updated_at = NOW() " +
"WHERE id = #{guideId} AND deleted = 0 AND status = 1")
diff --git a/backend/src/main/java/com/tourguide/modules/user/service/GuideReceivingService.java b/backend/src/main/java/com/tourguide/modules/user/service/GuideReceivingService.java
index 53b13e7..3b34657 100644
--- a/backend/src/main/java/com/tourguide/modules/user/service/GuideReceivingService.java
+++ b/backend/src/main/java/com/tourguide/modules/user/service/GuideReceivingService.java
@@ -151,12 +151,7 @@
}
LocalDateTime now = LocalDateTime.now();
- int orderCount = orderMapper.update(null, new LambdaUpdateWrapper<TourOrder>()
- .eq(TourOrder::getGuideId, guideId)
- .eq(TourOrder::getReceivingSessionId, session.getId())
- .eq(TourOrder::getStatus, OrderStatus.IN_SERVICE.getCode())
- .set(TourOrder::getStatus, OrderStatus.COMPLETED.getCode())
- .set(TourOrder::getCompletedAt, now));
+ int orderCount = orderMapper.completeSessionOrders(guideId, session.getId(), now);
if (orderCount == 0) {
throw new BusinessException(400, "no active service order");
}
diff --git a/backend/src/main/resources/application.yml b/backend/src/main/resources/application.yml
index 733d1ee..f2877ad 100644
--- a/backend/src/main/resources/application.yml
+++ b/backend/src/main/resources/application.yml
@@ -68,7 +68,7 @@
huifu:
product-id: ${HUIFU_PRODUCT_ID:KAZX}
- sys-id: ${HUIFU_SYS_ID:6666000212191071}
+ sys-id: ${HUIFU_SYS_ID:66660002121910711}
rsa-private-key: ${HUIFU_RSA_PRIVATE_KEY:MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCcsR3R3nUFCv/4l6vczGk6j4UgZhuMm/fTs2MQQqFkIuoISd38TOiIMaLS3KLYL+D+qhUCps56svOK/3M/kdyXfPsBphJyXB5Ar7il8pJ6BDa38StzTrlRm+IXX+4diJvqxUimetjpx0OfnqRkNYQWc/ZVeoEdQbITqLyxogy0R3rkR/wnOTwxHBbkCYsDCxSon4W0SoM5fLs3o947INbPUbUsf0vL5l6NiqlV9YsZ3qAWvvPoPX4HI1s5maMiVKfUwe27P3ARW9n6n3tadBzbB6lrmAEcFoihXpZjNN9UaRKjYfYjTS9JRkDqRyYGhz5cHp9GthEksMvhLP84oEanAgMBAAECggEAKV6d5+Ya8TzpPiIVTxNtCPgRhu9OgL5BHVS0Z/ufjselEJEoGc/YaPTp71AvcnKZrcMMDwopY73RjTZKoFMLcbeesd296xGlLyD12GKGB88K/1+eQDBdv00v0UoTnRqPR9nUh5fRo09n7EG/V3HFsQPm2sSgSDArKwOW5jNJtWLsGIVCW8gg3RQ9YlZ5HW85neBnjBFnrMA9S/hxwZD336M8CiViIa0v9o5CS7qxAqXMzzoOC7Vr3hZ/X0i/5GrSH9DRO7ougSmP4F/zCEc2dViA0rOJ6m3OuS0osh5FulihOBOjI5uLETEt4K/7PuV9xOd4oAz0OBpJ2bhPf3YpGQKBgQDQdEcmnlULa3jTSrbr0vYA3iMpcls/8F8+I/QymMXHAUeVyc8XKuGzblx+/n3x8ZoAvdVg1ZAO5wgLh/P0BEL74iWhfHedjt8xcdk2R5U0RuOnx1TUTKrmLKRZ5gStNFnGlK4yVwpiNqHn/cr+gYYeZSPARFVi00WdXbqVbEEf2wKBgQDAbmo4uHrmHN5GYvt8lVmT9aha1IpKOOLenjd+Y/vKGJcvHzOVCHnOh8OGO/4p7CxOq0sshER713jW2cFGO3xpFEFpIc45pDQ8Ut0XuSoOjKtwPzid8vKX7A1If6FDLMNy7bYR1qqnIJNJnN/f3lsksX+es7QTuRShhA0X0mnEJQKBgBE5OlPHi1FZPO+AYeLUWH0z3YXkLAP5cXUp9Vhk5RqPUYHf3duVMHbp7HyVvIRMKSRciw/oNXH1xuVlA1QrMfmr8t4H8b4z+t8UABWLDpn2LYNEZg7wksJX9/Bxn/tLswtEZ6xDItmAmBoaDza+Lv2975lITCHRQRRClVMZUbw3AoGAVFrSs6SjM2aqRZ60ccuipgrFT3PmX10Kjt46o2w+/zvCYoTB/u3lP5UiMCDybPw7/Ax4+r3Mq6EsNrrkT95ZzlJzzhtkpL4Hq/4DL5gbCJ+/s4fzUMIkeFahCAvy7FieIS51ZuJ8kqDkEBv1w9RcjfxFXpOWOCMlGRyjBLNXbAUCgYEAjcTEuXctlGEjtO1MBaHc4hkkpiPG7gxV/Bq1XXLszv4LTaOfDEpjGGBpVYtb3URYrif/HzX8T1KHELvPziuqP2ghaJQzbztep1TGQ48A5VpOvHdA/w/+k4JJl0PyKBPrFXiHIw1if7rnvOLt27TymwXSaJquSz7Sz2+wXFxzKJk=}
rsa-public-key: ${HUIFU_RSA_PUBLIC_KEY:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAgxOuXt1UEdZNPk6sntqiIlcs7e+0fZ3CVgKMV2Qv4ixwKmha5etL5WyIONmjoGEHePHpanYkXvm0kHkbbDkjpyHDFdEshuP1eGx5tRUTISRvXY/iFuD3xyeWSsvvjW6hS29OvqVCPcnBUC7jcRj15dJS2IpYR0iDGNS+/M0TyOFwRQME07At+qO+MSjKu4aRIjlglukjD7YbE2s35uV066nsBUCZUNpGPuju1pieUW4zyoIW6K70dyXCQy61oRI6JmA4JRCOJV1BE80N3GrLI4Pbq1C3ZBTgOPi5RWYNq1hfu807BDkPLc3dJKYt22Ea1jPJsg6e/B9Xbzh6JaUNAQIDAQAB}
huifu-id: ${HUIFU_ID:6666000212191071}
diff --git a/backend/src/test/java/com/tourguide/modules/finance/service/GuideElectronicLedgerServiceTest.java b/backend/src/test/java/com/tourguide/modules/finance/service/GuideElectronicLedgerServiceTest.java
index ecf9d30..66c6ee9 100644
--- a/backend/src/test/java/com/tourguide/modules/finance/service/GuideElectronicLedgerServiceTest.java
+++ b/backend/src/test/java/com/tourguide/modules/finance/service/GuideElectronicLedgerServiceTest.java
@@ -21,12 +21,14 @@
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoInteractions;
import static org.mockito.Mockito.when;
class GuideElectronicLedgerServiceTest {
private GuideWithdrawalAccountMapper accountMapper;
private GuideUserService guideUserService;
private DouGongBasicDataBiz douGongBasicDataBiz;
+ private GuideWithdrawableBalanceService balanceService;
private GuideElectronicLedgerService service;
@BeforeEach
@@ -34,7 +36,9 @@
accountMapper = mock(GuideWithdrawalAccountMapper.class);
guideUserService = mock(GuideUserService.class);
douGongBasicDataBiz = mock(DouGongBasicDataBiz.class);
- service = new GuideElectronicLedgerService(accountMapper, guideUserService, douGongBasicDataBiz);
+ balanceService = mock(GuideWithdrawableBalanceService.class);
+ service = new GuideElectronicLedgerService(accountMapper, guideUserService,
+ douGongBasicDataBiz, balanceService);
}
@Test
@@ -95,6 +99,20 @@
verify(accountMapper, org.mockito.Mockito.atLeastOnce()).updateById(any(GuideWithdrawalAccount.class));
}
+ @Test
+ void balanceShouldUseLocalWithdrawableAmount() {
+ GuideUser guide = new GuideUser();
+ guide.setId(8L);
+ GuideWithdrawalAccount account = new GuideWithdrawalAccount();
+ account.setHuifuId("HF100");
+ when(guideUserService.findEnabledById(8L)).thenReturn(guide);
+ when(accountMapper.selectOne(any())).thenReturn(account);
+ when(balanceService.getAvailableAmount(8L)).thenReturn(new java.math.BigDecimal("504.30"));
+
+ assertThat(service.balance(8L)).isEqualByComparingTo("504.30");
+ verifyNoInteractions(douGongBasicDataBiz);
+ }
+
private GuideElectronicLedgerRequest request() {
GuideElectronicLedgerRequest request = new GuideElectronicLedgerRequest();
request.setCertificateName("张三");
diff --git a/backend/src/test/java/com/tourguide/modules/order/service/MiniTourOrderCommandServiceTest.java b/backend/src/test/java/com/tourguide/modules/order/service/MiniTourOrderCommandServiceTest.java
index 9686cb6..5cf75d4 100644
--- a/backend/src/test/java/com/tourguide/modules/order/service/MiniTourOrderCommandServiceTest.java
+++ b/backend/src/test/java/com/tourguide/modules/order/service/MiniTourOrderCommandServiceTest.java
@@ -6,6 +6,7 @@
import com.tourguide.modules.operation.mapper.OperationScenicSpotMapper;
import com.tourguide.modules.operation.mapper.ScenicMeetingPointMapper;
import com.tourguide.modules.operation.mapper.ScenicPricingMapper;
+import com.tourguide.modules.operation.dto.PlatformSettingsResponse;
import com.tourguide.modules.operation.service.PlatformSettingsService;
import com.tourguide.modules.order.domain.OrderStatus;
import com.tourguide.modules.order.dto.MiniOrderCreateRequest;
@@ -89,6 +90,9 @@
pricing.setDiscountPrice(new BigDecimal("36.00"));
pricing.setMaxParticipants(10);
when(pricingMapper.selectOne(any())).thenReturn(pricing);
+ PlatformSettingsResponse settings = new PlatformSettingsResponse();
+ settings.setSettlementDays(7);
+ when(platformSettingsService.getSettings()).thenReturn(settings);
doAnswer(invocation -> {
TourOrder order = invocation.getArgument(0);
order.setId(99L);
@@ -111,6 +115,7 @@
assertThat(order.getPaymentOrderNo()).isNull();
assertThat(order.getPaymentAmount()).isNull();
assertThat(order.getPaymentTime()).isNull();
+ assertThat(order.getSettlementDays()).isEqualTo(7);
assertThat(response.getStatus()).isEqualTo(OrderStatus.PENDING_PAYMENT.getCode());
}
diff --git a/frontend/src/styles/index.css b/frontend/src/styles/index.css
index 68151fe..da54e6b 100644
--- a/frontend/src/styles/index.css
+++ b/frontend/src/styles/index.css
@@ -41,9 +41,8 @@
.login-card { align-self: center; margin: 40px; padding: 44px; border-radius: 18px; background: white; box-shadow: 0 24px 70px rgba(16, 42, 67, 0.13); }
.login-heading { display: flex; gap: 14px; align-items: center; margin-bottom: 36px; }
.login-heading h2, .login-heading p { margin: 0; }
-.login-heading p, .login-tip { color: #829ab1; }
+.login-heading p { color: #829ab1; }
.login-button { width: 100%; margin-top: 8px; }
-.login-tip { margin-top: 24px; text-align: center; font-size: 12px; }
.welcome-panel { display: flex; justify-content: space-between; align-items: center; padding: 32px; color: white; border-radius: 16px; background: #163f55; }
.welcome-panel h1 { margin: 8px 0; }
.welcome-panel p { margin: 0; color: #bcccdc; }
diff --git a/frontend/src/views/LoginView.vue b/frontend/src/views/LoginView.vue
index 1aba75c..449b74b 100644
--- a/frontend/src/views/LoginView.vue
+++ b/frontend/src/views/LoginView.vue
@@ -38,7 +38,6 @@
<el-form-item label="密码"><el-input v-model="form.password" type="password" show-password size="large" /></el-form-item>
<el-button type="primary" size="large" :loading="loading" class="login-button" @click="submit">登录后台</el-button>
</el-form>
- <p class="login-tip">本地初始账号:admin / Admin@123456</p>
</section>
</main>
</template>
diff --git a/frontend/src/views/WithdrawalsView.vue b/frontend/src/views/WithdrawalsView.vue
index 3dc8f37..8cc23cb 100644
--- a/frontend/src/views/WithdrawalsView.vue
+++ b/frontend/src/views/WithdrawalsView.vue
@@ -13,7 +13,7 @@
const current = ref(null)
const query = reactive({ page: 1, size: 10, keyword: '', status: '' })
const processForm = reactive({ status: 'APPROVED', auditRemark: '' })
-const statusMap = { PENDING: { label: '未处理', type: 'primary' }, APPROVED: { label: '已通过', type: 'success' }, REJECTED: { label: '已驳回', type: 'danger' } }
+const statusMap = { PENDING: { label: '未处理', type: 'primary' }, TRANSFERRING: { label: '划账处理中', type: 'warning' }, TRANSFERRED: { label: '待发起取现', type: 'warning' }, PROCESSING: { label: '到账处理中', type: 'warning' }, APPROVED: { label: '已到账', type: 'success' }, REJECTED: { label: '已驳回', type: 'danger' } }
const formatMoney = (value) => Number(value || 0).toFixed(2)
const formatDateTime = (value) => value ? value.replace('T', ' ').slice(0, 19) : '-'
@@ -36,7 +36,7 @@
processing.value = true
try {
await processWithdrawal(current.value.id, { status: processForm.status, auditRemark: processForm.auditRemark.trim() || undefined })
- ElMessage.success(processForm.status === 'APPROVED' ? '提现申请已通过' : '提现申请已驳回')
+ ElMessage.success(processForm.status === 'APPROVED' ? '提现申请已受理,等待到账结果' : '提现申请已驳回')
dialogVisible.value = false
loadWithdrawals()
} finally { processing.value = false }
@@ -51,7 +51,7 @@
<el-form class="query-form" label-position="left" label-width="70px" @submit.prevent="search">
<el-form-item label="导游搜索"><el-input v-model="query.keyword" clearable placeholder="请输入导游手机号/导游姓名/提现编号" @keyup.enter="search" /></el-form-item>
<el-form-item label="申请时间"><el-date-picker v-model="dateRange" type="daterange" value-format="YYYY-MM-DD" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" /></el-form-item>
- <el-form-item label="状态"><el-select v-model="query.status" clearable placeholder="全部"><el-option label="未处理" value="PENDING" /><el-option label="已通过" value="APPROVED" /><el-option label="已驳回" value="REJECTED" /></el-select></el-form-item>
+ <el-form-item label="状态"><el-select v-model="query.status" clearable placeholder="全部"><el-option label="未处理" value="PENDING" /><el-option label="划账处理中" value="TRANSFERRING" /><el-option label="待发起取现" value="TRANSFERRED" /><el-option label="到账处理中" value="PROCESSING" /><el-option label="已到账" value="APPROVED" /><el-option label="已驳回" value="REJECTED" /></el-select></el-form-item>
<div class="query-actions"><el-button type="primary" :icon="Search" @click="search">查询</el-button><el-button :icon="Refresh" @click="reset">重置</el-button></div>
</el-form>
<el-table v-loading="loading" :data="records" border row-key="id">
@@ -72,6 +72,9 @@
<el-descriptions-item label="导游手机号">{{ current.guideMobile }}</el-descriptions-item><el-descriptions-item label="提现金额">{{ formatMoney(current.amount) }}</el-descriptions-item>
<el-descriptions-item label="申请时间" :span="2">{{ formatDateTime(current.appliedAt) }}</el-descriptions-item>
<el-descriptions-item v-if="current.processor" label="处理人">{{ current.processor }}</el-descriptions-item><el-descriptions-item v-if="current.processedAt" label="处理时间">{{ formatDateTime(current.processedAt) }}</el-descriptions-item>
+ <el-descriptions-item v-if="current.transferReqSeqId" label="划账流水" :span="2">{{ current.transferReqSeqId }}</el-descriptions-item>
+ <el-descriptions-item v-if="current.cashReqSeqId" label="取现流水" :span="2">{{ current.cashReqSeqId }}</el-descriptions-item>
+ <el-descriptions-item v-if="current.payoutMessage" label="资金状态" :span="2">{{ current.payoutMessage }}</el-descriptions-item>
</el-descriptions>
<el-form v-if="current?.status === 'PENDING'" class="process-form" label-width="82px">
<el-form-item label="处理结果"><el-radio-group v-model="processForm.status"><el-radio-button value="APPROVED">通过</el-radio-button><el-radio-button value="REJECTED">驳回</el-radio-button></el-radio-group></el-form-item>
diff --git a/mingdaojingjiang_guide_app/constants/mock.js b/mingdaojingjiang_guide_app/constants/mock.js
index a058a34..9b04976 100644
--- a/mingdaojingjiang_guide_app/constants/mock.js
+++ b/mingdaojingjiang_guide_app/constants/mock.js
@@ -143,92 +143,5 @@
{ id: 'E20260615003', title: '包团 · 快讲', orderNo: 'MJ20260615003', amountCent: 32200, status: '已入账', time: '06-15 11:12' }
]
-export const GUIDE_WITHDRAWALS_KEY = 'mingdao_guide_withdrawals'
-export const GUIDE_ONBOARDING_KEY = 'mingdao_guide_onboarding'
-export const GUIDE_BANK_CARDS_KEY = 'mingdao_guide_bank_cards'
export const GUIDE_SELECTED_BANK_KEY = 'mingdao_guide_selected_bank_id'
export const GUIDE_SELECTED_BRANCH_KEY = 'mingdao_guide_selected_branch'
-
-export const withdrawalSummary = {
- availableAmount: 590.80
-}
-
-export const initialOnboarding = {
- status: 'unsubmitted',
- reason: '',
- submittedAt: ''
-}
-
-export const initialBankCards = [
- {
- id: 'card_001',
- bankName: '招商银行',
- branchName: '招商银行成都高新支行',
- cardMasked: '****5678',
- status: 'approved',
- reason: ''
- },
- {
- id: 'card_002',
- bankName: '中国银行',
- branchName: '中国银行都江堰支行',
- cardMasked: '****1024',
- status: 'pending',
- reason: ''
- },
- {
- id: 'card_003',
- bankName: '工商银行',
- branchName: '工商银行青城山支行',
- cardMasked: '****8899',
- status: 'rejected',
- reason: '开户名与进件主体不一致'
- }
-]
-
-export const bankBranches = [
- { id: 'br_001', bankName: '招商银行', branchName: '招商银行成都高新支行', branchCode: 'CMB51010001' },
- { id: 'br_002', bankName: '招商银行', branchName: '招商银行都江堰支行', branchCode: 'CMB51010002' },
- { id: 'br_003', bankName: '中国银行', branchName: '中国银行成都天府支行', branchCode: 'BOC51010001' },
- { id: 'br_004', bankName: '中国银行', branchName: '中国银行都江堰支行', branchCode: 'BOC51010002' },
- { id: 'br_005', bankName: '工商银行', branchName: '工商银行成都春熙路支行', branchCode: 'ICBC51010001' },
- { id: 'br_006', bankName: '工商银行', branchName: '工商银行青城山支行', branchCode: 'ICBC51010002' },
- { id: 'br_007', bankName: '建设银行', branchName: '建设银行成都高新支行', branchCode: 'CCB51010001' },
- { id: 'br_008', bankName: '农业银行', branchName: '农业银行都江堰支行', branchCode: 'ABC51010001' }
-]
-
-export const initialWithdrawals = [
- {
- id: 'WD20260808001',
- withdrawalNo: 'WD202608081643001',
- amount: 200.00,
- status: 'APPROVED',
- reason: '',
- bankName: '招商银行',
- cardMasked: '****5678',
- appliedAt: '2026-08-08 16:43:42',
- processedAt: '2026-08-09 09:12:18'
- },
- {
- id: 'WD20260805002',
- withdrawalNo: 'WD202608051020002',
- amount: 86.50,
- status: 'PENDING',
- reason: '',
- bankName: '招商银行',
- cardMasked: '****5678',
- appliedAt: '2026-08-05 10:20:11',
- processedAt: ''
- },
- {
- id: 'WD20260728003',
- withdrawalNo: 'WD202607281530003',
- amount: 120.00,
- status: 'REJECTED',
- reason: '收款账户信息与实名信息不一致',
- bankName: '招商银行',
- cardMasked: '****5678',
- appliedAt: '2026-07-28 15:30:06',
- processedAt: '2026-07-28 18:02:41'
- }
-]
diff --git a/mingdaojingjiang_guide_app/dist/build/mp-weixin/app.json b/mingdaojingjiang_guide_app/dist/build/mp-weixin/app.json
index 5aa9453..d4cac47 100644
--- a/mingdaojingjiang_guide_app/dist/build/mp-weixin/app.json
+++ b/mingdaojingjiang_guide_app/dist/build/mp-weixin/app.json
@@ -9,6 +9,14 @@
"pages/meeting-point/index",
"pages/orders/index",
"pages/earnings/index",
+ "pages/withdrawal/index",
+ "pages/withdrawal-detail/index",
+ "pages/withdrawal-success/index",
+ "pages/onboarding/index",
+ "pages/onboarding-pending/index",
+ "pages/bank-card-select/index",
+ "pages/bank-card-add/index",
+ "pages/bank-branch-select/index",
"pages/rating/index",
"pages/profile/index",
"pages/change-phone-old/index",
diff --git a/mingdaojingjiang_guide_app/dist/build/mp-weixin/common/assets.js b/mingdaojingjiang_guide_app/dist/build/mp-weixin/common/assets.js
index ebb955d..8e8dfa5 100644
--- a/mingdaojingjiang_guide_app/dist/build/mp-weixin/common/assets.js
+++ b/mingdaojingjiang_guide_app/dist/build/mp-weixin/common/assets.js
@@ -1 +1 @@
-"use strict";exports._imports_0="/assets/smartphone.8a2dc6ec.svg",exports._imports_0$1="/assets/login-hero.0cd19add.png",exports._imports_0$2="/assets/chevron-right.4048b2e0.svg",exports._imports_0$3="/assets/user-round-white.a65212c3.svg",exports._imports_0$4="/assets/chevron-down.0636f458.svg",exports._imports_0$5="/assets/calendar-days.ae91e56f.svg",exports._imports_0$6="/assets/user-round.e134fa3c.svg",exports._imports_0$7="/assets/chevron-left-white.e65aa4e1.svg",exports._imports_1="/assets/shield-check.10456553.svg",exports._imports_1$1="/assets/bell-white.dc176045.svg",exports._imports_1$2="/assets/plus.edcd136d.svg",exports._imports_3="/assets/chevron-right-white.cd5ca132.svg";
+"use strict";exports._imports_0="/assets/smartphone.8a2dc6ec.svg",exports._imports_0$1="/assets/login-hero.0cd19add.png",exports._imports_0$2="/assets/chevron-right.4048b2e0.svg",exports._imports_0$3="/assets/user-round-white.a65212c3.svg",exports._imports_0$4="/assets/chevron-down.0636f458.svg",exports._imports_0$5="/assets/calendar-days.ae91e56f.svg",exports._imports_0$6="/assets/search.0a2fc983.svg",exports._imports_0$7="/assets/user-round.e134fa3c.svg",exports._imports_1="/assets/shield-check.10456553.svg",exports._imports_1$1="/assets/bell-white.dc176045.svg",exports._imports_1$2="/assets/plus.edcd136d.svg",exports._imports_3="/assets/chevron-right-white.cd5ca132.svg";
diff --git a/mingdaojingjiang_guide_app/dist/build/mp-weixin/common/vendor.js b/mingdaojingjiang_guide_app/dist/build/mp-weixin/common/vendor.js
index 9a954c9..a97d6e4 100644
--- a/mingdaojingjiang_guide_app/dist/build/mp-weixin/common/vendor.js
+++ b/mingdaojingjiang_guide_app/dist/build/mp-weixin/common/vendor.js
@@ -4,4 +4,4 @@
* (c) 2018-present Yuxi (Evan) You and Vue contributors
* @license MIT
**/
-function e(e,t){const n=new Set(e.split(","));return e=>n.has(e)}const t={},n=[],o=()=>{},r=()=>!1,i=e=>111===e.charCodeAt(0)&&110===e.charCodeAt(1)&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),s=e=>e.startsWith("onUpdate:"),c=Object.assign,a=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},u=Object.prototype.hasOwnProperty,l=(e,t)=>u.call(e,t),p=Array.isArray,f=e=>"[object Map]"===x(e),d=e=>"[object Set]"===x(e),h=e=>"function"==typeof e,g=e=>"string"==typeof e,m=e=>"symbol"==typeof e,v=e=>null!==e&&"object"==typeof e,y=e=>(v(e)||h(e))&&h(e.then)&&h(e.catch),_=Object.prototype.toString,x=e=>_.call(e),w=e=>"[object Object]"===x(e),b=e=>g(e)&&"NaN"!==e&&"-"!==e[0]&&""+parseInt(e,10)===e,S=e(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),$=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},P=/-(\w)/g,k=$(e=>e.replace(P,(e,t)=>t?t.toUpperCase():"")),O=/\B([A-Z])/g,C=$(e=>e.replace(O,"-$1").toLowerCase()),E=$(e=>e.charAt(0).toUpperCase()+e.slice(1)),I=$(e=>e?`on${E(e)}`:""),A=(e,t)=>!Object.is(e,t),T=(e,t)=>{for(let n=0;n<e.length;n++)e[n](t)},N=e=>{const t=parseFloat(e);return isNaN(t)?e:t};function L(e){if(p(e)){const t={};for(let n=0;n<e.length;n++){const o=e[n],r=g(o)?D(o):L(o);if(r)for(const e in r)t[e]=r[e]}return t}if(g(e)||v(e))return e}const R=/;(?![^(]*\))/g,j=/:([^]+)/,M=/\/\*[^]*?\*\//g;function D(e){const t={};return e.replace(M,"").split(R).forEach(e=>{if(e){const n=e.split(j);n.length>1&&(t[n[0].trim()]=n[1].trim())}}),t}function V(e){let t="";if(g(e))t=e;else if(p(e))for(let n=0;n<e.length;n++){const o=V(e[n]);o&&(t+=o+" ")}else if(v(e))for(const n in e)e[n]&&(t+=n+" ");return t.trim()}const U=(e,t)=>t&&t.__v_isRef?U(e,t.value):f(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((e,[t,n],o)=>(e[H(t,o)+" =>"]=n,e),{})}:d(t)?{[`Set(${t.size})`]:[...t.values()].map(e=>H(e))}:m(t)?H(t):!v(t)||p(t)||w(t)?t:String(t),H=(e,t="")=>{var n;return m(e)?`Symbol(${null!=(n=e.description)?n:t})`:e},B="onShow",W="onHide",z="onLaunch",F="onError",G="onThemeChange",q="onPageNotFound",K="onUnhandledRejection",J="onLoad",X="onReady",Z="onUnload",Q="onInit",Y="onSaveExitState",ee="onUploadDouyinVideo",te="onLiveMount",ne="onTitleClick",oe="onResize",re="onBackPress",ie="onPageScroll",se="onTabItemTap",ce="onReachBottom",ae="onPullDownRefresh",ue="onShareTimeline",le="onShareChat",pe="onCopyUrl",fe="onAddToFavorites",de="onShareAppMessage",he="onNavigationBarButtonTap",ge="onNavigationBarSearchInputClicked",me="onNavigationBarSearchInputChanged",ve="onNavigationBarSearchInputConfirmed",ye="onNavigationBarSearchInputFocusChanged",_e="virtualHostId",xe=/:/g;function we(e,t=null){let n;return(...o)=>(e&&(n=e.apply(t,o),e=null),n)}function be(e,t){if(!g(t))return;const n=(t=t.replace(/\[(\d+)\]/g,".$1")).split(".");let o=n[0];return e||(e={}),1===n.length?e[o]:be(e[o],n.slice(1).join("."))}const Se=encodeURIComponent;function $e(e,t=Se){const n=e?Object.keys(e).map(n=>{let o=e[n];return void 0===typeof o||null===o?o="":w(o)&&(o=JSON.stringify(o)),t(n)+"="+t(o)}).filter(e=>e.length>0).join("&"):null;return n?`?${n}`:""}const Pe=[Q,J,B,W,Z,oe,re,ie,se,ce,ae,ue,de,le,pe,ee,te,ne,fe,Y,he,ge,me,ve,ye];const ke=[B,W,z,F,G,q,K,"onExit",Q,J,X,Z,oe,re,ie,se,ce,ae,ue,fe,de,le,pe,ee,te,ne,Y,he,ge,me,ve,ye,"onLastPageBackPress"],Oe=(()=>({onPageScroll:1,onShareAppMessage:2,onShareTimeline:4,onShareChat:8,onCopyUrl:16,onUploadDouyinVideo:32,onLiveMount:64,onTitleClick:128}))();function Ce(e,t,n=!0){return!(n&&!h(t))&&(ke.indexOf(e)>-1||0===e.indexOf("on"))}let Ee;const Ie=[];const Ae=we((e,t)=>t(e)),Te=function(){};Te.prototype={_id:1,on:function(e,t,n){var o=this.e||(this.e={});return(o[e]||(o[e]=[])).push({fn:t,ctx:n,_id:this._id}),this._id++},once:function(e,t,n){var o=this;function r(){o.off(e,r),t.apply(n,arguments)}return r._=t,this.on(e,r,n)},emit:function(e){for(var t=[].slice.call(arguments,1),n=((this.e||(this.e={}))[e]||[]).slice(),o=0,r=n.length;o<r;o++)n[o].fn.apply(n[o].ctx,t);return this},off:function(e,t){var n=this.e||(this.e={}),o=n[e],r=[];if(o&&t){for(var i=o.length-1;i>=0;i--)if(o[i].fn===t||o[i].fn._===t||o[i]._id===t){o.splice(i,1);break}r=o}return r.length?n[e]=r:delete n[e],this}};var Ne=Te;const Le="zh-Hans",Re="zh-Hant",je="en";function Me(e,t){if(!e)return;if("chinese"===(e=(e=e.trim().replace(/_/g,"-")).toLowerCase()))return Le;if(0===e.indexOf("zh"))return e.indexOf("-hans")>-1?Le:e.indexOf("-hant")>-1?Re:(n=e,["-tw","-hk","-mo","-cht"].find(e=>-1!==n.indexOf(e))?Re:Le);var n;const o=function(e,t){return t.find(t=>0===e.indexOf(t))}(e,[je,"fr","es"]);return o||void 0}function De(e){return function(){try{return e.apply(e,arguments)}catch(t){console.error(t)}}}let Ve=1;const Ue={};function He(e,t,n){if("number"==typeof e){const o=Ue[e];if(o)return o.keepAlive||delete Ue[e],o.callback(t,n)}return t}const Be="success",We="fail",ze="complete";function Fe(e,t={},{beforeAll:n,beforeSuccess:o}={}){w(t)||(t={});const{success:r,fail:i,complete:s}=function(e){const t={};for(const n in e){const o=e[n];h(o)&&(t[n]=De(o),delete e[n])}return t}(t),c=h(r),a=h(i),u=h(s),l=Ve++;return function(e,t,n,o=!1){Ue[e]={name:t,keepAlive:o,callback:n}}(l,e,l=>{(l=l||{}).errMsg=function(e,t){return e&&-1!==e.indexOf(":fail")?t+e.substring(e.indexOf(":fail")):t+":ok"}(l.errMsg,e),h(n)&&n(l),l.errMsg===e+":ok"?(h(o)&&o(l,t),c&&r(l)):a&&i(l),u&&s(l)}),l}const Ge="success",qe="fail",Ke="complete",Je={},Xe={};function Ze(e,t){return function(n){return e(n,t)||n}}function Qe(e,t,n){let o=!1;for(let r=0;r<e.length;r++){const i=e[r];if(o)o=Promise.resolve(Ze(i,n));else{const e=i(t,n);if(y(e)&&(o=Promise.resolve(e)),!1===e)return{then(){},catch(){}}}}return o||{then:e=>e(t),catch(){}}}function Ye(e,t={}){return[Ge,qe,Ke].forEach(n=>{const o=e[n];if(!p(o))return;const r=t[n];t[n]=function(e){Qe(o,e,t).then(e=>h(r)&&r(e)||e)}}),t}function et(e,t){const n=[];p(Je.returnValue)&&n.push(...Je.returnValue);const o=Xe[e];return o&&p(o.returnValue)&&n.push(...o.returnValue),n.forEach(e=>{t=e(t)||t}),t}function tt(e){const t=Object.create(null);Object.keys(Je).forEach(e=>{"returnValue"!==e&&(t[e]=Je[e].slice())});const n=Xe[e];return n&&Object.keys(n).forEach(e=>{"returnValue"!==e&&(t[e]=(t[e]||[]).concat(n[e]))}),t}function nt(e,t,n,o){const r=tt(e);if(r&&Object.keys(r).length){if(p(r.invoke)){return Qe(r.invoke,n).then(n=>t(Ye(tt(e),n),...o))}return t(Ye(r,n),...o)}return t(n,...o)}function ot(e,t){return(n={},...o)=>function(e){return!(!w(e)||![Be,We,ze].find(t=>h(e[t])))}(n)?et(e,nt(e,t,c({},n),o)):et(e,new Promise((r,i)=>{nt(e,t,c({},n,{success:r,fail:i}),o)}))}function rt(e,t,n,o={}){const r=t+":fail";let i="";return i=n?0===n.indexOf(r)?n:r+" "+n:r,delete o.errCode,He(e,c({errMsg:i},o))}function it(e,t,n,o){const r=function(e){e[0]}(t);if(r)return r}function st(e,t,n,o){return n=>{const r=Fe(e,n,o),i=it(0,[n]);return i?rt(r,e,i):t(n,{resolve:t=>function(e,t,n){return He(e,c(n||{},{errMsg:t+":ok"}))}(r,e,t),reject:(t,n)=>rt(r,e,function(e){return!e||g(e)?e:e.stack?("undefined"!=typeof globalThis&&globalThis.harmonyChannel||console.error(e.message+"\n"+e.stack),e.message):e}(t),n)})}}function ct(e,t,n,o){return function(e,t){return(...e)=>{const n=it(0,e);if(n)throw new Error(n);return t.apply(null,e)}}(0,t)}let at=!1,ut=0,lt=0;const pt=ct(0,(e,t)=>{if(0===ut&&function(){var e,t;let n,o,r;{const i=(null===(e=wx.getWindowInfo)||void 0===e?void 0:e.call(wx))||wx.getSystemInfoSync(),s=(null===(t=wx.getDeviceInfo)||void 0===t?void 0:t.call(wx))||wx.getSystemInfoSync();n=i.windowWidth,o=i.pixelRatio,r=s.platform}ut=n,lt=o,at="ios"===r}(),0===(e=Number(e)))return 0;let n=e/750*(t||ut);return n<0&&(n=-n),n=Math.floor(n+1e-4),0===n&&(n=1!==lt&&at?.5:1),e<0?-n:n});function ft(e,t){Object.keys(t).forEach(n=>{h(t[n])&&(e[n]=function(e,t){const n=t?e?e.concat(t):p(t)?t:[t]:e;return n?function(e){const t=[];for(let n=0;n<e.length;n++)-1===t.indexOf(e[n])&&t.push(e[n]);return t}(n):n}(e[n],t[n]))})}function dt(e,t){e&&t&&Object.keys(t).forEach(n=>{const o=e[n],r=t[n];p(o)&&h(r)&&a(o,r)})}const ht=ct(0,(e,t)=>{g(e)&&w(t)?ft(Xe[e]||(Xe[e]={}),t):w(e)&&ft(Je,e)}),gt=ct(0,(e,t)=>{g(e)?w(t)?dt(Xe[e],t):delete Xe[e]:w(e)&&dt(Je,e)});const mt=new class{constructor(){this.$emitter=new Ne}on(e,t){return this.$emitter.on(e,t)}once(e,t){return this.$emitter.once(e,t)}off(e,t){e?this.$emitter.off(e,t):this.$emitter.e={}}emit(e,...t){this.$emitter.emit(e,...t)}},vt=ct(0,(e,t)=>(mt.on(e,t),()=>mt.off(e,t))),yt=ct(0,(e,t)=>(mt.once(e,t),()=>mt.off(e,t))),_t=ct(0,(e,t)=>{p(e)||(e=e?[e]:[]),e.forEach(e=>{mt.off(e,t)})}),xt=ct(0,(e,...t)=>{mt.emit(e,...t)});let wt,bt,St;function $t(e){try{return JSON.parse(e)}catch(t){}return e}const Pt=[];function kt(e,t){Pt.forEach(n=>{n(e,t)}),Pt.length=0}const Ot=ot(Ct="getPushClientId",function(e,t,n,o){return st(e,t,0,o)}(Ct,(e,{resolve:t,reject:n})=>{Promise.resolve().then(()=>{void 0===St&&(St=!1,wt="",bt="uniPush is not enabled"),Pt.push((e,o)=>{e?t({cid:e}):n(o)}),void 0!==wt&&kt(wt,bt)})},0,Et));var Ct,Et;const It=[],At=/^\$|__f__|getLocale|setLocale|sendNativeEvent|restoreGlobal|requireGlobal|getCurrentSubNVue|getMenuButtonBoundingClientRect|^report|interceptors|Interceptor$|getSubNVueById|requireNativePlugin|upx2px|rpx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64|getDeviceInfo|getAppBaseInfo|getWindowInfo|getSystemSetting|getAppAuthorizeSetting/,Tt=/^create|Manager$/,Nt=["createBLEConnection"],Lt=["request","downloadFile","uploadFile","connectSocket"],Rt=["createBLEConnection"],jt=/^on|^off/;function Mt(e){return Tt.test(e)&&-1===Nt.indexOf(e)}function Dt(e){return At.test(e)&&-1===Rt.indexOf(e)}function Vt(e){return-1!==Lt.indexOf(e)}function Ut(e){return!(Mt(e)||Dt(e)||function(e){return jt.test(e)&&"onPush"!==e}(e))}function Ht(e,t){return Ut(e)&&h(t)?function(n={},...o){return h(n.success)||h(n.fail)||h(n.complete)?et(e,nt(e,t,c({},n),o)):et(e,new Promise((r,i)=>{nt(e,t,c({},n,{success:r,fail:i}),o)}))}:t}Promise.prototype.finally||(Promise.prototype.finally=function(e){const t=this.constructor;return this.then(n=>t.resolve(e&&e()).then(()=>n),n=>t.resolve(e&&e()).then(()=>{throw n}))});const Bt=["success","fail","cancel","complete"];const Wt=()=>{const e=h(getApp)&&getApp({allowDefault:!0});return e&&e.$vm?e.$vm.$locale:function(){var e;let t="";{const n=(null===(e=wx.getAppBaseInfo)||void 0===e?void 0:e.call(wx))||wx.getSystemInfoSync();t=Me(n&&n.language?n.language:je)||je}return t}()},zt=[];"undefined"!=typeof global&&(global.getLocale=Wt);const Ft="__DC_STAT_UUID";let Gt;function qt(e=wx){return function(t,n){Gt=Gt||e.getStorageSync(Ft),Gt||(Gt=Date.now()+""+Math.floor(1e7*Math.random()),wx.setStorage({key:Ft,data:Gt})),n.deviceId=Gt}}function Kt(e,t){if(e.safeArea){const n=e.safeArea;t.safeAreaInsets={top:n.top,left:n.left,right:e.windowWidth-n.right,bottom:e.screenHeight-n.bottom}}}function Jt(e,t){let n="",o="";switch(n=t,o=e.split(" ")[1]||"",n=n.toLowerCase(),n){case"harmony":case"ohos":case"openharmonyos":case"openharmony":n="harmonyos";break;case"iphone os":n="ios";break;case"mac":case"darwin":n="macos";break;case"windows_nt":n="windows"}return{osName:n,osVersion:o,system:e}}function Xt(e){return"ohos"===(e=e.toLowerCase())&&(e="harmonyos"),e}function Zt(e,t){const n=e.platform||"";let o=e.deviceType||"phone";{const e={ipad:"pad",windows:"pc",mac:"pc",linux:"pc",pc:"pc"},n=Object.keys(e),r=t.toLowerCase();for(let t=0;t<n.length;t++){const i=n[t];if(-1!==r.indexOf(i)){o=e[i];break}}}return"ohos_pc"===n&&(o="pc"),o}function Qt(e){let t=e;return t&&(t=t.toLowerCase()),t}function Yt(e){return Wt?Wt():e}function en(e){let t=e.hostName||"WeChat";return e.environment?t=e.environment:e.host&&e.host.env&&(t=e.host.env),t}const tn={returnValue:(e,t)=>{Kt(e,t),qt()(e,t),function(e,t){const{brand:n="",model:o="",system:r="",language:i="",theme:s,version:a,platform:u,fontSizeSetting:l,SDKVersion:p,pixelRatio:f,deviceOrientation:d}=e,{osName:h,osVersion:g,system:m}=Jt(r,u);let v=a,y=Zt(e,o),_=Qt(n),x=en(e),w=d,b=f,S=p;const $=(i||"").replace(/_/g,"-"),P={appId:"__UNI__F7E10FB",appName:"com.mingdao.guide",appVersion:"1.0.0",appVersionCode:"100",appLanguage:Yt($),uniCompileVersion:"5.12",uniCompilerVersion:"5.12",uniRuntimeVersion:"5.12",uniPlatform:"mp-weixin",deviceBrand:_,deviceModel:o,deviceType:y,devicePixelRatio:b,deviceOrientation:w,osName:h,osVersion:g,hostTheme:s,hostVersion:v,hostLanguage:$,hostName:x,hostSDKVersion:S,hostFontSizeSetting:l,windowTop:0,windowBottom:0,platform:Xt(u),system:m,osLanguage:void 0,osTheme:void 0,ua:void 0,hostPackageName:void 0,browserName:void 0,browserVersion:void 0,isUniAppX:!1};c(t,P)}(e,t)}},nn=tn,on={args(e,t){let n=parseInt(e.current);if(isNaN(n))return;const o=e.urls;if(!p(o))return;const r=o.length;return r?(n<0?n=0:n>=r&&(n=r-1),n>0?(t.current=o[n],t.urls=o.filter((e,t)=>!(t<n)||e!==o[n])):t.current=o[0],{indicator:!1,loop:!1}):void 0}},rn={args(e,t){t.alertText=e.title}},sn={returnValue:(e,t)=>{const{brand:n,model:o,system:r="",platform:i=""}=e;let s=Zt(e,o),a=Qt(n);qt()(e,t);const{osName:u,osVersion:l}=Jt(r,i);t=c(t,{deviceType:s,deviceBrand:a,deviceModel:o,osName:u,osVersion:l,platform:Xt(i)})}},cn={returnValue:(e,t)=>{const{version:n,language:o,SDKVersion:r,theme:i}=e;let s=en(e),a=(o||"").replace(/_/g,"-");const u={appId:"__UNI__F7E10FB",appName:"com.mingdao.guide",appVersion:"1.0.0",appVersionCode:"100",appLanguage:Yt(a),hostVersion:n,hostLanguage:a,hostName:s,hostSDKVersion:r,hostTheme:i,isUniAppX:!1,uniPlatform:"mp-weixin",uniCompileVersion:"5.12",uniCompilerVersion:"5.12",uniRuntimeVersion:"5.12"};c(t,u)}},an={returnValue:(e,t)=>{Kt(e,t),t=c(t,{windowTop:0,windowBottom:0})}},un={args(e){const t=getApp({allowDefault:!0})||{};t.$vm?zr(F,e,t.$vm.$):(wx.$onErrorHandlers||(wx.$onErrorHandlers=[]),wx.$onErrorHandlers.push(e))}},ln={args(e){const t=getApp({allowDefault:!0})||{};if(t.$vm){if(e.__weh){const n=t.$vm.$[F];if(n){const t=n.indexOf(e.__weh);t>-1&&n.splice(t,1)}}}else{if(!wx.$onErrorHandlers)return;const t=wx.$onErrorHandlers.findIndex(t=>t===e);-1!==t&&wx.$onErrorHandlers.splice(t,1)}}},pn={args(){if(wx.__uni_console__){if(wx.__uni_console_warned__)return;wx.__uni_console_warned__=!0,console.warn("开发模式下小程序日志回显会使用 socket 连接,为了避免冲突,建议使用 SocketTask 的方式去管理 WebSocket 或手动关闭日志回显功能。[详情](https://uniapp.dcloud.net.cn/tutorial/run/mp-log.html)")}}},fn=pn,dn={$on:vt,$off:_t,$once:yt,$emit:xt,upx2px:pt,rpx2px:pt,interceptors:{},addInterceptor:ht,removeInterceptor:gt,onCreateVueApp:function(e){if(Ee)return e(Ee);Ie.push(e)},invokeCreateVueAppHook:function(e){Ee=e,Ie.forEach(t=>t(e))},getLocale:Wt,setLocale:e=>{const t=h(getApp)&&getApp();if(!t)return!1;return t.$vm.$locale!==e&&(t.$vm.$locale=e,zt.forEach(t=>t({locale:e})),!0)},onLocaleChange:e=>{-1===zt.indexOf(e)&&zt.push(e)},getPushClientId:Ot,onPushMessage:e=>{-1===It.indexOf(e)&&It.push(e)},offPushMessage:e=>{if(e){const t=It.indexOf(e);t>-1&&It.splice(t,1)}else It.length=0},invokePushCallback:function(e){if("enabled"===e.type)St=!0;else if("clientId"===e.type)wt=e.cid,bt=e.errMsg,kt(wt,e.errMsg);else if("pushMsg"===e.type){const t={type:"receive",data:$t(e.message)};for(let e=0;e<It.length;e++){if((0,It[e])(t),t.stopped)break}}else"click"===e.type&&It.forEach(t=>{t({type:"click",data:$t(e.message)})})},__f__:function(e,t,...n){t&&n.push(t),console[e].apply(console,n)}};const hn=["qy","env","error","version","lanDebug","cloud","serviceMarket","router","worklet","__webpack_require_UNI_MP_PLUGIN__"],gn=["lanDebug","router","worklet"],mn=wx.getLaunchOptionsSync?wx.getLaunchOptionsSync():null;function vn(e){return(!mn||1154!==mn.scene||!gn.includes(e))&&(hn.indexOf(e)>-1||"function"==typeof wx[e])}function yn(){const e={};for(const t in wx)vn(t)&&(e[t]=wx[t]);return"undefined"!=typeof globalThis&&"undefined"==typeof requireMiniProgram&&(globalThis.wx=e),e}const _n=["__route__","__wxExparserNodeId__","__wxWebviewId__"],xn=(wn={oauth:["weixin"],share:["weixin"],payment:["wxpay"],push:["weixin"]},function({service:e,success:t,fail:n,complete:o}){let r;wn[e]?(r={errMsg:"getProvider:ok",service:e,provider:wn[e]},h(t)&&t(r)):(r={errMsg:"getProvider:fail:服务["+e+"]不存在"},h(n)&&n(r)),h(o)&&o(r)});var wn;const bn=yn();bn.getAppBaseInfo&&bn.getAppBaseInfo()||(bn.getAppBaseInfo=bn.getSystemInfoSync),bn.getWindowInfo&&bn.getWindowInfo()||(bn.getWindowInfo=bn.getSystemInfoSync),bn.getDeviceInfo&&bn.getDeviceInfo()||(bn.getDeviceInfo=bn.getSystemInfoSync);let Sn=bn.getAppBaseInfo&&bn.getAppBaseInfo();Sn||(Sn=bn.getSystemInfoSync());const $n=Sn?Sn.host:null,Pn=$n&&"SAAASDK"===$n.env?bn.miniapp.shareVideoMessage:bn.shareVideoMessage;var kn=Object.freeze({__proto__:null,createSelectorQuery:function(){const e=bn.createSelectorQuery(),t=e.in;return e.in=function(e){return e.$scope?t.call(this,e.$scope):t.call(this,function(e){const t=Object.create(null);return _n.forEach(n=>{t[n]=e[n]}),t}(e))},e},getProvider:xn,shareVideoMessage:Pn});const On={args(e,t){e.compressedHeight&&!t.compressHeight&&(t.compressHeight=e.compressedHeight),e.compressedWidth&&!t.compressWidth&&(t.compressWidth=e.compressedWidth)}};var Cn=function(e,t,n=wx){const o=function(e){function t(e,t,n){return function(r){return t(o(e,r,n))}}function n(e,n,o={},r={},i=!1){if(w(n)){const s=!0===i?n:{};h(o)&&(o=o(n,s)||{});for(const c in n)if(l(o,c)){let t=o[c];h(t)&&(t=t(n[c],n,s)),t?g(t)?s[t]=n[c]:w(t)&&(s[t.name?t.name:c]=t.value):console.warn(`微信小程序 ${e} 暂不支持 ${c}`)}else if(-1!==Bt.indexOf(c)){const o=n[c];h(o)&&(s[c]=t(e,o,r))}else i||l(s,c)||(s[c]=n[c]);return s}return h(n)&&(h(o)&&o(n,{}),n=t(e,n,r)),n}function o(t,o,r,i=!1){return h(e.returnValue)&&(o=e.returnValue(t,o)),n(t,o,r,{},i||!1)}return function(t,r){const i=l(e,t);if(!i&&"function"!=typeof wx[t])return r;const s=i||h(e.returnValue)||Mt(t)||Vt(t),c=i||h(r);if(!i&&!r)return function(){console.error(`微信小程序 暂不支持${t}`)};if(!s||!c)return r;const a=e[t];return function(e,r){let i=a||{};h(a)&&(i=a(e));const s=[e=n(t,e,i.args,i.returnValue)];void 0!==r&&s.push(r);const c=wx[i.name||t].apply(wx,s);return(Mt(t)||Vt(t))&&c&&!c.__v_skip&&(c.__v_skip=!0),Dt(t)?o(t,c,i.returnValue,Mt(t)):c}}}(t);return new Proxy({},{get:(t,r)=>l(t,r)?t[r]:l(e,r)?Ht(r,e[r]):l(dn,r)?Ht(r,dn[r]):Ht(r,o(r,n[r]))})}(kn,Object.freeze({__proto__:null,compressImage:On,getAppAuthorizeSetting:{returnValue:function(e,t){const{locationReducedAccuracy:n}=e;t.locationAccuracy="unsupported",!0===n?t.locationAccuracy="reduced":!1===n&&(t.locationAccuracy="full")}},getAppBaseInfo:cn,getDeviceInfo:sn,getSystemInfo:tn,getSystemInfoSync:nn,getWindowInfo:an,offError:ln,onError:un,onSocketMessage:fn,onSocketOpen:pn,previewImage:on,redirectTo:{},showActionSheet:rn}),yn());let En,In;class An{constructor(e=!1){this.detached=e,this._active=!0,this.effects=[],this.cleanups=[],this.parent=En,!e&&En&&(this.index=(En.scopes||(En.scopes=[])).push(this)-1)}get active(){return this._active}run(e){if(this._active){const t=En;try{return En=this,e()}finally{En=t}}}on(){En=this}off(){En=this.parent}stop(e){if(this._active){let t,n;for(t=0,n=this.effects.length;t<n;t++)this.effects[t].stop();for(t=0,n=this.cleanups.length;t<n;t++)this.cleanups[t]();if(this.scopes)for(t=0,n=this.scopes.length;t<n;t++)this.scopes[t].stop(!0);if(!this.detached&&this.parent&&!e){const e=this.parent.scopes.pop();e&&e!==this&&(this.parent.scopes[this.index]=e,e.index=this.index)}this.parent=void 0,this._active=!1}}}class Tn{constructor(e,t,n,o){this.fn=e,this.trigger=t,this.scheduler=n,this.active=!0,this.deps=[],this._dirtyLevel=4,this._trackId=0,this._runnings=0,this._shouldSchedule=!1,this._depsLength=0,function(e,t=En){t&&t.active&&t.effects.push(e)}(this,o)}get dirty(){if(2===this._dirtyLevel||3===this._dirtyLevel){this._dirtyLevel=1,Un();for(let e=0;e<this._depsLength;e++){const t=this.deps[e];if(t.computed&&(Nn(t.computed),this._dirtyLevel>=4))break}1===this._dirtyLevel&&(this._dirtyLevel=0),Hn()}return this._dirtyLevel>=4}set dirty(e){this._dirtyLevel=e?4:0}run(){if(this._dirtyLevel=0,!this.active)return this.fn();let e=Mn,t=In;try{return Mn=!0,In=this,this._runnings++,Ln(this),this.fn()}finally{Rn(this),this._runnings--,In=t,Mn=e}}stop(){var e;this.active&&(Ln(this),Rn(this),null==(e=this.onStop)||e.call(this),this.active=!1)}}function Nn(e){return e.value}function Ln(e){e._trackId++,e._depsLength=0}function Rn(e){if(e.deps.length>e._depsLength){for(let t=e._depsLength;t<e.deps.length;t++)jn(e.deps[t],e);e.deps.length=e._depsLength}}function jn(e,t){const n=e.get(t);void 0!==n&&t._trackId!==n&&(e.delete(t),0===e.size&&e.cleanup())}let Mn=!0,Dn=0;const Vn=[];function Un(){Vn.push(Mn),Mn=!1}function Hn(){const e=Vn.pop();Mn=void 0===e||e}function Bn(){Dn++}function Wn(){for(Dn--;!Dn&&Fn.length;)Fn.shift()()}function zn(e,t,n){if(t.get(e)!==e._trackId){t.set(e,e._trackId);const n=e.deps[e._depsLength];n!==t?(n&&jn(n,e),e.deps[e._depsLength++]=t):e._depsLength++}}const Fn=[];function Gn(e,t,n){Bn();for(const o of e.keys()){let n;o._dirtyLevel<t&&(null!=n?n:n=e.get(o)===o._trackId)&&(o._shouldSchedule||(o._shouldSchedule=0===o._dirtyLevel),o._dirtyLevel=t),o._shouldSchedule&&(null!=n?n:n=e.get(o)===o._trackId)&&(o.trigger(),o._runnings&&!o.allowRecurse||2===o._dirtyLevel||(o._shouldSchedule=!1,o.scheduler&&Fn.push(o.scheduler)))}Wn()}const qn=(e,t)=>{const n=new Map;return n.cleanup=e,n.computed=t,n},Kn=new WeakMap,Jn=Symbol(""),Xn=Symbol("");function Zn(e,t,n){if(Mn&&In){let t=Kn.get(e);t||Kn.set(e,t=new Map);let o=t.get(n);o||t.set(n,o=qn(()=>t.delete(n))),zn(In,o)}}function Qn(e,t,n,o,r,i){const s=Kn.get(e);if(!s)return;let c=[];if("clear"===t)c=[...s.values()];else if("length"===n&&p(e)){const e=Number(o);s.forEach((t,n)=>{("length"===n||!m(n)&&n>=e)&&c.push(t)})}else switch(void 0!==n&&c.push(s.get(n)),t){case"add":p(e)?b(n)&&c.push(s.get("length")):(c.push(s.get(Jn)),f(e)&&c.push(s.get(Xn)));break;case"delete":p(e)||(c.push(s.get(Jn)),f(e)&&c.push(s.get(Xn)));break;case"set":f(e)&&c.push(s.get(Jn))}Bn();for(const a of c)a&&Gn(a,4);Wn()}const Yn=e("__proto__,__v_isRef,__isVue"),eo=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>"arguments"!==e&&"caller"!==e).map(e=>Symbol[e]).filter(m)),to=no();function no(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...e){const n=Wo(this);for(let t=0,r=this.length;t<r;t++)Zn(n,0,t+"");const o=n[t](...e);return-1===o||!1===o?n[t](...e.map(Wo)):o}}),["push","pop","shift","unshift","splice"].forEach(t=>{e[t]=function(...e){Un(),Bn();const n=Wo(this)[t].apply(this,e);return Wn(),Hn(),n}}),e}function oo(e){const t=Wo(this);return Zn(t,0,e),t.hasOwnProperty(e)}class ro{constructor(e=!1,t=!1){this._isReadonly=e,this._isShallow=t}get(e,t,n){const o=this._isReadonly,r=this._isShallow;if("__v_isReactive"===t)return!o;if("__v_isReadonly"===t)return o;if("__v_isShallow"===t)return r;if("__v_raw"===t)return n===(o?r?Ro:Lo:r?No:To).get(e)||Object.getPrototypeOf(e)===Object.getPrototypeOf(n)?e:void 0;const i=p(e);if(!o){if(i&&l(to,t))return Reflect.get(to,t,n);if("hasOwnProperty"===t)return oo}const s=Reflect.get(e,t,n);return(m(t)?eo.has(t):Yn(t))?s:(o||Zn(e,0,t),r?s:Xo(s)?i&&b(t)?s:s.value:v(s)?o?Do(s):Mo(s):s)}}class io extends ro{constructor(e=!1){super(!1,e)}set(e,t,n,o){let r=e[t];if(!this._isShallow){const t=Ho(r);if(Bo(n)||Ho(n)||(r=Wo(r),n=Wo(n)),!p(e)&&Xo(r)&&!Xo(n))return!t&&(r.value=n,!0)}const i=p(e)&&b(t)?Number(t)<e.length:l(e,t),s=Reflect.set(e,t,n,o);return e===Wo(o)&&(i?A(n,r)&&Qn(e,"set",t,n):Qn(e,"add",t,n)),s}deleteProperty(e,t){const n=l(e,t);e[t];const o=Reflect.deleteProperty(e,t);return o&&n&&Qn(e,"delete",t,void 0),o}has(e,t){const n=Reflect.has(e,t);return m(t)&&eo.has(t)||Zn(e,0,t),n}ownKeys(e){return Zn(e,0,p(e)?"length":Jn),Reflect.ownKeys(e)}}class so extends ro{constructor(e=!1){super(!0,e)}set(e,t){return!0}deleteProperty(e,t){return!0}}const co=new io,ao=new so,uo=new io(!0),lo=e=>e,po=e=>Reflect.getPrototypeOf(e);function fo(e,t,n=!1,o=!1){const r=Wo(e=e.__v_raw),i=Wo(t);n||(A(t,i)&&Zn(r,0,t),Zn(r,0,i));const{has:s}=po(r),c=o?lo:n?Go:Fo;return s.call(r,t)?c(e.get(t)):s.call(r,i)?c(e.get(i)):void(e!==r&&e.get(t))}function ho(e,t=!1){const n=this.__v_raw,o=Wo(n),r=Wo(e);return t||(A(e,r)&&Zn(o,0,e),Zn(o,0,r)),e===r?n.has(e):n.has(e)||n.has(r)}function go(e,t=!1){return e=e.__v_raw,!t&&Zn(Wo(e),0,Jn),Reflect.get(e,"size",e)}function mo(e){e=Wo(e);const t=Wo(this);return po(t).has.call(t,e)||(t.add(e),Qn(t,"add",e,e)),this}function vo(e,t){t=Wo(t);const n=Wo(this),{has:o,get:r}=po(n);let i=o.call(n,e);i||(e=Wo(e),i=o.call(n,e));const s=r.call(n,e);return n.set(e,t),i?A(t,s)&&Qn(n,"set",e,t):Qn(n,"add",e,t),this}function yo(e){const t=Wo(this),{has:n,get:o}=po(t);let r=n.call(t,e);r||(e=Wo(e),r=n.call(t,e)),o&&o.call(t,e);const i=t.delete(e);return r&&Qn(t,"delete",e,void 0),i}function _o(){const e=Wo(this),t=0!==e.size,n=e.clear();return t&&Qn(e,"clear",void 0,void 0),n}function xo(e,t){return function(n,o){const r=this,i=r.__v_raw,s=Wo(i),c=t?lo:e?Go:Fo;return!e&&Zn(s,0,Jn),i.forEach((e,t)=>n.call(o,c(e),c(t),r))}}function wo(e,t,n){return function(...o){const r=this.__v_raw,i=Wo(r),s=f(i),c="entries"===e||e===Symbol.iterator&&s,a="keys"===e&&s,u=r[e](...o),l=n?lo:t?Go:Fo;return!t&&Zn(i,0,a?Xn:Jn),{next(){const{value:e,done:t}=u.next();return t?{value:e,done:t}:{value:c?[l(e[0]),l(e[1])]:l(e),done:t}},[Symbol.iterator](){return this}}}}function bo(e){return function(...t){return"delete"!==e&&("clear"===e?void 0:this)}}function So(){const e={get(e){return fo(this,e)},get size(){return go(this)},has:ho,add:mo,set:vo,delete:yo,clear:_o,forEach:xo(!1,!1)},t={get(e){return fo(this,e,!1,!0)},get size(){return go(this)},has:ho,add:mo,set:vo,delete:yo,clear:_o,forEach:xo(!1,!0)},n={get(e){return fo(this,e,!0)},get size(){return go(this,!0)},has(e){return ho.call(this,e,!0)},add:bo("add"),set:bo("set"),delete:bo("delete"),clear:bo("clear"),forEach:xo(!0,!1)},o={get(e){return fo(this,e,!0,!0)},get size(){return go(this,!0)},has(e){return ho.call(this,e,!0)},add:bo("add"),set:bo("set"),delete:bo("delete"),clear:bo("clear"),forEach:xo(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(r=>{e[r]=wo(r,!1,!1),n[r]=wo(r,!0,!1),t[r]=wo(r,!1,!0),o[r]=wo(r,!0,!0)}),[e,n,t,o]}const[$o,Po,ko,Oo]=So();function Co(e,t){const n=t?e?Oo:ko:e?Po:$o;return(t,o,r)=>"__v_isReactive"===o?!e:"__v_isReadonly"===o?e:"__v_raw"===o?t:Reflect.get(l(n,o)&&o in t?n:t,o,r)}const Eo={get:Co(!1,!1)},Io={get:Co(!1,!0)},Ao={get:Co(!0,!1)},To=new WeakMap,No=new WeakMap,Lo=new WeakMap,Ro=new WeakMap;function jo(e){return e.__v_skip||!Object.isExtensible(e)?0:function(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}((e=>x(e).slice(8,-1))(e))}function Mo(e){return Ho(e)?e:Vo(e,!1,co,Eo,To)}function Do(e){return Vo(e,!0,ao,Ao,Lo)}function Vo(e,t,n,o,r){if(!v(e))return e;if(e.__v_raw&&(!t||!e.__v_isReactive))return e;const i=r.get(e);if(i)return i;const s=jo(e);if(0===s)return e;const c=new Proxy(e,2===s?o:n);return r.set(e,c),c}function Uo(e){return Ho(e)?Uo(e.__v_raw):!(!e||!e.__v_isReactive)}function Ho(e){return!(!e||!e.__v_isReadonly)}function Bo(e){return!(!e||!e.__v_isShallow)}function Wo(e){const t=e&&e.__v_raw;return t?Wo(t):e}function zo(e){return Object.isExtensible(e)&&((e,t,n)=>{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})})(e,"__v_skip",!0),e}const Fo=e=>v(e)?Mo(e):e,Go=e=>v(e)?Do(e):e;class qo{constructor(e,t,n,o){this.getter=e,this._setter=t,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this.effect=new Tn(()=>e(this._value),()=>Jo(this,2===this.effect._dirtyLevel?2:3)),this.effect.computed=this,this.effect.active=this._cacheable=!o,this.__v_isReadonly=n}get value(){const e=Wo(this);return e._cacheable&&!e.effect.dirty||!A(e._value,e._value=e.effect.run())||Jo(e,4),Ko(e),e.effect._dirtyLevel>=2&&Jo(e,2),e._value}set value(e){this._setter(e)}get _dirty(){return this.effect.dirty}set _dirty(e){this.effect.dirty=e}}function Ko(e){var t;Mn&&In&&(e=Wo(e),zn(In,null!=(t=e.dep)?t:e.dep=qn(()=>e.dep=void 0,e instanceof qo?e:void 0)))}function Jo(e,t=4,n){const o=(e=Wo(e)).dep;o&&Gn(o,t)}function Xo(e){return!(!e||!0!==e.__v_isRef)}function Zo(e){return function(e,t){if(Xo(e))return e;return new Qo(e,t)}(e,!1)}class Qo{constructor(e,t){this.__v_isShallow=t,this.dep=void 0,this.__v_isRef=!0,this._rawValue=t?e:Wo(e),this._value=t?e:Fo(e)}get value(){return Ko(this),this._value}set value(e){const t=this.__v_isShallow||Bo(e)||Ho(e);e=t?e:Wo(e),A(e,this._rawValue)&&(this._rawValue=e,this._value=t?e:Fo(e),Jo(this,4))}}function Yo(e){return Xo(e)?e.value:e}const er={get:(e,t,n)=>Yo(Reflect.get(e,t,n)),set:(e,t,n,o)=>{const r=e[t];return Xo(r)&&!Xo(n)?(r.value=n,!0):Reflect.set(e,t,n,o)}};function tr(e){return Uo(e)?e:new Proxy(e,er)}function nr(e,t,n,o){try{return o?e(...o):e()}catch(r){rr(r,t,n)}}function or(e,t,n,o){if(h(e)){const r=nr(e,t,n,o);return r&&y(r)&&r.catch(e=>{rr(e,t,n)}),r}const r=[];for(let i=0;i<e.length;i++)r.push(or(e[i],t,n,o));return r}function rr(e,t,n,o=!0){const r=t?t.vnode:null;if(t){let o=t.parent;const r=t.proxy,i=`https://vuejs.org/error-reference/#runtime-${n}`;for(;o;){const t=o.ec;if(t)for(let n=0;n<t.length;n++)if(!1===t[n](e,r,i))return;o=o.parent}const s=t.appContext.config.errorHandler;if(s)return void nr(s,null,10,[e,r,i])}ir(e,n,r,o)}function ir(e,t,n,o=!0){console.error(e)}let sr=!1,cr=!1;const ar=[];let ur=0;const lr=[];let pr=null,fr=0;const dr=Promise.resolve();let hr=null;function gr(e){const t=hr||dr;return e?t.then(this?e.bind(this):e):t}function mr(e){ar.length&&ar.includes(e,sr&&e.allowRecurse?ur+1:ur)||(null==e.id?ar.push(e):ar.splice(function(e){let t=ur+1,n=ar.length;for(;t<n;){const o=t+n>>>1,r=ar[o],i=xr(r);i<e||i===e&&r.pre?t=o+1:n=o}return t}(e.id),0,e),vr())}function vr(){sr||cr||(cr=!0,hr=dr.then(br))}function yr(e){p(e)?lr.push(...e):pr&&pr.includes(e,e.allowRecurse?fr+1:fr)||lr.push(e),vr()}function _r(e,t,n=(sr?ur+1:0)){for(;n<ar.length;n++){const e=ar[n];e&&e.pre&&(ar.splice(n,1),n--,e())}}const xr=e=>null==e.id?1/0:e.id,wr=(e,t)=>{const n=xr(e)-xr(t);if(0===n){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function br(e){cr=!1,sr=!0,ar.sort(wr);try{for(ur=0;ur<ar.length;ur++){const e=ar[ur];e&&!1!==e.active&&nr(e,null,14)}}finally{ur=0,ar.length=0,function(){if(lr.length){const e=[...new Set(lr)].sort((e,t)=>xr(e)-xr(t));if(lr.length=0,pr)return void pr.push(...e);for(pr=e,fr=0;fr<pr.length;fr++)pr[fr]();pr=null,fr=0}}(),sr=!1,hr=null,(ar.length||lr.length)&&br()}}function Sr(e,n,...o){if(e.isUnmounted)return;const r=e.vnode.props||t;let i=o;const s=n.startsWith("update:"),c=s&&n.slice(7);if(c&&c in r){const e=`${"modelValue"===c?"model":c}Modifiers`,{number:n,trim:s}=r[e]||t;s&&(i=o.map(e=>g(e)?e.trim():e)),n&&(i=o.map(N))}let a,u=r[a=I(n)]||r[a=I(k(n))];!u&&s&&(u=r[a=I(C(n))]),u&&or(u,e,6,i);const l=r[a+"Once"];if(l){if(e.emitted){if(e.emitted[a])return}else e.emitted={};e.emitted[a]=!0,or(l,e,6,i)}}function $r(e,t,n=!1){const o=t.emitsCache,r=o.get(e);if(void 0!==r)return r;const i=e.emits;let s={},a=!1;if(!h(e)){const o=e=>{const n=$r(e,t,!0);n&&(a=!0,c(s,n))};!n&&t.mixins.length&&t.mixins.forEach(o),e.extends&&o(e.extends),e.mixins&&e.mixins.forEach(o)}return i||a?(p(i)?i.forEach(e=>s[e]=null):c(s,i),v(e)&&o.set(e,s),s):(v(e)&&o.set(e,null),null)}function Pr(e,t){return!(!e||!i(t))&&(t=t.slice(2).replace(/Once$/,""),l(e,t[0].toLowerCase()+t.slice(1))||l(e,C(t))||l(e,t))}let kr=null;function Or(e){const t=kr;return kr=e,e&&e.type.__scopeId,t}function Cr(e,t){return e&&(e[t]||e[k(t)]||e[E(k(t))])}const Er={};function Ir(e,t,n){return Ar(e,t,n)}function Ar(e,n,{immediate:r,deep:i,flush:s,once:c,onTrack:u,onTrigger:l}=t){if(n&&c){const e=n;n=(...t)=>{e(...t),P()}}const f=Ni,d=e=>!0===i?e:Lr(e,!1===i?1:void 0);let g,m,v=!1,y=!1;if(Xo(e)?(g=()=>e.value,v=Bo(e)):Uo(e)?(g=()=>d(e),v=!0):p(e)?(y=!0,v=e.some(e=>Uo(e)||Bo(e)),g=()=>e.map(e=>Xo(e)?e.value:Uo(e)?d(e):h(e)?nr(e,f,2):void 0)):g=h(e)?n?()=>nr(e,f,2):()=>(m&&m(),or(e,f,3,[_])):o,n&&i){const e=g;g=()=>Lr(e())}let _=e=>{m=S.onStop=()=>{nr(e,f,4),m=S.onStop=void 0}},x=y?new Array(e.length).fill(Er):Er;const w=()=>{if(S.active&&S.dirty)if(n){const e=S.run();(i||v||(y?e.some((e,t)=>A(e,x[t])):A(e,x)))&&(m&&m(),or(n,f,3,[e,x===Er?void 0:y&&x[0]===Er?[]:x,_]),x=e)}else S.run()};let b;w.allowRecurse=!!n,"sync"===s?b=w:"post"===s?b=()=>Ci(w,f&&f.suspense):(w.pre=!0,f&&(w.id=f.uid),b=()=>mr(w));const S=new Tn(g,o,b),$=En,P=()=>{S.stop(),$&&a($.effects,S)};return n?r?w():x=S.run():"post"===s?Ci(S.run.bind(S),f&&f.suspense):S.run(),P}function Tr(e,t,n){const o=this.proxy,r=g(e)?e.includes(".")?Nr(o,e):()=>o[e]:e.bind(o,o);let i;h(t)?i=t:(i=t.handler,n=t);const s=Mi(this),c=Ar(r,i.bind(o),n);return s(),c}function Nr(e,t){const n=t.split(".");return()=>{let t=e;for(let e=0;e<n.length&&t;e++)t=t[n[e]];return t}}function Lr(e,t,n=0,o){if(!v(e)||e.__v_skip)return e;if(t&&t>0){if(n>=t)return e;n++}if((o=o||new Set).has(e))return e;if(o.add(e),Xo(e))Lr(e.value,t,n,o);else if(p(e))for(let r=0;r<e.length;r++)Lr(e[r],t,n,o);else if(d(e)||f(e))e.forEach(e=>{Lr(e,t,n,o)});else if(w(e))for(const r in e)Lr(e[r],t,n,o);return e}function Rr(){return{app:null,config:{isNativeTag:r,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let jr=0;let Mr=null;function Dr(e,t,n=!1){const o=Ni||kr;if(o||Mr){const r=o?null==o.parent?o.vnode.appContext&&o.vnode.appContext.provides:o.parent.provides:Mr._context.provides;if(r&&e in r)return r[e];if(arguments.length>1)return n&&h(t)?t.call(o&&o.proxy):t}}const Vr=e=>e.type.__isKeepAlive;function Ur(e,t){Br(e,"a",t)}function Hr(e,t){Br(e,"da",t)}function Br(e,t,n=Ni){const o=e.__wdc||(e.__wdc=()=>{let t=n;for(;t;){if(t.isDeactivated)return;t=t.parent}return e()});if(zr(t,o,n),n){let e=n.parent;for(;e&&e.parent;)Vr(e.parent.vnode)&&Wr(o,t,n,e),e=e.parent}}function Wr(e,t,n,o){const r=zr(t,e,o,!0);Zr(()=>{a(o[t],r)},n)}function zr(e,t,n=Ni,o=!1){if(n){(function(e){return Pe.indexOf(e)>-1})(e)&&(n=n.root);const r=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{if(n.isUnmounted)return;Un();const r=Mi(n),i=or(t,n,e,o);return r(),Hn(),i});return o?r.unshift(i):r.push(i),i}}const Fr=e=>(t,n=Ni)=>(!Ui||"sp"===e)&&zr(e,(...e)=>t(...e),n),Gr=Fr("bm"),qr=Fr("m"),Kr=Fr("bu"),Jr=Fr("u"),Xr=Fr("bum"),Zr=Fr("um"),Qr=Fr("sp"),Yr=Fr("rtg"),ei=Fr("rtc");function ti(e,t=Ni){zr("ec",e,t)}const ni=e=>e?Vi(e)?Wi(e)||e.proxy:ni(e.parent):null;const oi=c(Object.create(null),{$:function(e){return e},$el:e=>e.__$el||(e.__$el={}),$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>ni(e.parent),$root:e=>ni(e.root),$emit:e=>e.emit,$options:e=>pi(e),$forceUpdate:e=>e.f||(e.f=()=>{e.effect.dirty=!0,mr(e.update)}),$watch:e=>Tr.bind(e)}),ri=(e,n)=>e!==t&&!e.__isScriptSetup&&l(e,n),ii={get({_:e},n){const{ctx:o,setupState:r,data:i,props:s,accessCache:c,type:a,appContext:u}=e;let p;if("$"!==n[0]){const a=c[n];if(void 0!==a)switch(a){case 1:return r[n];case 2:return i[n];case 4:return o[n];case 3:return s[n]}else{if(ri(r,n))return c[n]=1,r[n];if(i!==t&&l(i,n))return c[n]=2,i[n];if((p=e.propsOptions[0])&&l(p,n))return c[n]=3,s[n];if(o!==t&&l(o,n))return c[n]=4,o[n];ci&&(c[n]=0)}}const f=oi[n];let d,h;return f?("$attrs"===n&&Zn(e,0,n),f(e)):(d=a.__cssModules)&&(d=d[n])?d:o!==t&&l(o,n)?(c[n]=4,o[n]):e.exposed&&l(e.exposed,n)?e.exposed[n]:(h=u.config.globalProperties,l(h,n)?h[n]:void 0)},set({_:e},n,o){const{data:r,setupState:i,ctx:s}=e;return ri(i,n)?(i[n]=o,!0):r!==t&&l(r,n)?(r[n]=o,!0):!l(e.props,n)&&(("$"!==n[0]||!(n.slice(1)in e))&&(s[n]=o,!0))},has({_:{data:e,setupState:n,accessCache:o,ctx:r,appContext:i,propsOptions:s}},c){let a;return!!o[c]||e!==t&&l(e,c)||ri(n,c)||(a=s[0])&&l(a,c)||l(r,c)||l(oi,c)||l(i.config.globalProperties,c)},defineProperty(e,t,n){return null!=n.get?e._.accessCache[t]=0:l(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function si(e){return p(e)?e.reduce((e,t)=>(e[t]=null,e),{}):e}let ci=!0;function ai(e){const t=pi(e),n=e.proxy,r=e.ctx;ci=!1,t.beforeCreate&&ui(t.beforeCreate,e,"bc");const{data:i,computed:s,methods:c,watch:a,provide:u,inject:l,created:f,beforeMount:d,mounted:g,beforeUpdate:m,updated:y,activated:_,deactivated:x,beforeDestroy:w,beforeUnmount:b,destroyed:S,unmounted:$,render:P,renderTracked:k,renderTriggered:O,errorCaptured:C,serverPrefetch:E,expose:I,inheritAttrs:A,components:T,directives:N,filters:L}=t;if(l&&function(e,t){p(e)&&(e=gi(e));for(const n in e){const o=e[n];let r;r=v(o)?"default"in o?Dr(o.from||n,o.default,!0):Dr(o.from||n):Dr(o),Xo(r)?Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:()=>r.value,set:e=>r.value=e}):t[n]=r}}(l,r),c)for(const o in c){const e=c[o];h(e)&&(r[o]=e.bind(n))}if(i){const t=i.call(n,n);v(t)&&(e.data=Mo(t))}if(ci=!0,s)for(const p in s){const e=s[p],t=h(e)?e.bind(n,n):h(e.get)?e.get.bind(n,n):o,i=!h(e)&&h(e.set)?e.set.bind(n):o,c=zi({get:t,set:i});Object.defineProperty(r,p,{enumerable:!0,configurable:!0,get:()=>c.value,set:e=>c.value=e})}if(a)for(const o in a)li(a[o],r,n,o);function R(e,t){p(t)?t.forEach(t=>e(t.bind(n))):t&&e(t.bind(n))}if(function(){if(u){const e=h(u)?u.call(n):u;Reflect.ownKeys(e).forEach(t=>{!function(e,t){if(Ni){let n=Ni.provides;const o=Ni.parent&&Ni.parent.provides;o===n&&(n=Ni.provides=Object.create(o)),n[e]=t,"app"===Ni.type.mpType&&Ni.appContext.app.provide(e,t)}}(t,e[t])})}}(),f&&ui(f,e,"c"),R(Gr,d),R(qr,g),R(Kr,m),R(Jr,y),R(Ur,_),R(Hr,x),R(ti,C),R(ei,k),R(Yr,O),R(Xr,b),R(Zr,$),R(Qr,E),p(I))if(I.length){const t=e.exposed||(e.exposed={});I.forEach(e=>{Object.defineProperty(t,e,{get:()=>n[e],set:t=>n[e]=t})})}else e.exposed||(e.exposed={});P&&e.render===o&&(e.render=P),null!=A&&(e.inheritAttrs=A),T&&(e.components=T),N&&(e.directives=N),e.ctx.$onApplyOptions&&e.ctx.$onApplyOptions(t,e,n)}function ui(e,t,n){or(p(e)?e.map(e=>e.bind(t.proxy)):e.bind(t.proxy),t,n)}function li(e,t,n,o){const r=o.includes(".")?Nr(n,o):()=>n[o];if(g(e)){const n=t[e];h(n)&&Ir(r,n)}else if(h(e))Ir(r,e.bind(n));else if(v(e))if(p(e))e.forEach(e=>li(e,t,n,o));else{const o=h(e.handler)?e.handler.bind(n):t[e.handler];h(o)&&Ir(r,o,e)}}function pi(e){const t=e.type,{mixins:n,extends:o}=t,{mixins:r,optionsCache:i,config:{optionMergeStrategies:s}}=e.appContext,c=i.get(t);let a;return c?a=c:r.length||n||o?(a={},r.length&&r.forEach(e=>fi(a,e,s,!0)),fi(a,t,s)):a=t,v(t)&&i.set(t,a),a}function fi(e,t,n,o=!1){const{mixins:r,extends:i}=t;i&&fi(e,i,n,!0),r&&r.forEach(t=>fi(e,t,n,!0));for(const s in t)if(o&&"expose"===s);else{const o=di[s]||n&&n[s];e[s]=o?o(e[s],t[s]):t[s]}return e}const di={data:hi,props:yi,emits:yi,methods:vi,computed:vi,beforeCreate:mi,created:mi,beforeMount:mi,mounted:mi,beforeUpdate:mi,updated:mi,beforeDestroy:mi,beforeUnmount:mi,destroyed:mi,unmounted:mi,activated:mi,deactivated:mi,errorCaptured:mi,serverPrefetch:mi,components:vi,directives:vi,watch:function(e,t){if(!e)return t;if(!t)return e;const n=c(Object.create(null),e);for(const o in t)n[o]=mi(e[o],t[o]);return n},provide:hi,inject:function(e,t){return vi(gi(e),gi(t))}};function hi(e,t){return t?e?function(){return c(h(e)?e.call(this,this):e,h(t)?t.call(this,this):t)}:t:e}function gi(e){if(p(e)){const t={};for(let n=0;n<e.length;n++)t[e[n]]=e[n];return t}return e}function mi(e,t){return e?[...new Set([].concat(e,t))]:t}function vi(e,t){return e?c(Object.create(null),e,t):t}function yi(e,t){return e?p(e)&&p(t)?[...new Set([...e,...t])]:c(Object.create(null),si(e),si(null!=t?t:{})):t}function _i(e,t,n,o=!1){const r={},i={};e.propsDefaults=Object.create(null),xi(e,t,r,i);for(const s in e.propsOptions[0])s in r||(r[s]=void 0);n?e.props=o?r:Vo(r,!1,uo,Io,No):e.type.props?e.props=r:e.props=i,e.attrs=i}function xi(e,n,o,r){const[i,s]=e.propsOptions;let c,a=!1;if(n)for(let t in n){if(S(t))continue;const u=n[t];let p;i&&l(i,p=k(t))?s&&s.includes(p)?(c||(c={}))[p]=u:o[p]=u:Pr(e.emitsOptions,t)||t in r&&u===r[t]||(r[t]=wi(e,t,u),a=!0)}if(s){const n=Wo(o),r=c||t;for(let t=0;t<s.length;t++){const c=s[t];o[c]=bi(i,n,c,r[c],e,!l(r,c))}}return a}function wi(e,t,n){return n}function bi(e,t,n,o,r,i){const s=function(e,t,n,o,r,i){const s=e[n];if(null!=s){const e=l(s,"default");if(e&&void 0===o){const e=s.default;if(s.type!==Function&&!s.skipFactory&&h(e)){const{propsDefaults:i}=r;if(n in i)o=i[n];else{const s=Mi(r);o=i[n]=e.call(null,t),s()}}else o=e}s[0]&&(i&&!e?o=!1:!s[1]||""!==o&&o!==C(n)||(o=!0))}return o}(e,t,n,o,r,i);return s}function Si(e,o,r=!1){const i=o.propsCache,s=i.get(e);if(s)return s;const a=e.props,u={},f=[];let d=!1;if(!h(e)){const t=e=>{d=!0;const[t,n]=Si(e,o,!0);c(u,t),n&&f.push(...n)};!r&&o.mixins.length&&o.mixins.forEach(t),e.extends&&t(e.extends),e.mixins&&e.mixins.forEach(t)}if(!a&&!d)return v(e)&&i.set(e,n),n;if(p(a))for(let n=0;n<a.length;n++){const e=k(a[n]);$i(e)&&(u[e]=t)}else if(a)for(const t in a){const e=k(t);if($i(e)){const n=a[t],o=u[e]=p(n)||h(n)?{type:n}:c({},n);if(o){const t=Oi(Boolean,o.type),n=Oi(String,o.type);o[0]=t>-1,o[1]=n<0||t<n,(t>-1||l(o,"default"))&&f.push(e)}}}const g=[u,f];return v(e)&&i.set(e,g),g}function $i(e){return"$"!==e[0]&&!S(e)}function Pi(e){if(null===e)return"null";if("function"==typeof e)return e.name||"";if("object"==typeof e){return e.constructor&&e.constructor.name||""}return""}function ki(e,t){return Pi(e)===Pi(t)}function Oi(e,t){return p(t)?t.findIndex(t=>ki(t,e)):h(t)&&ki(t,e)?0:-1}const Ci=yr;function Ei(e){return e?Uo(t=e)||Ho(t)||"__vInternal"in e?c({},e):e:null;var t}const Ii=Rr();let Ai=0;function Ti(e,n,o){const r=e.type,i=(n?n.appContext:e.appContext)||Ii,s={uid:Ai++,vnode:e,type:r,parent:n,appContext:i,root:null,next:null,subTree:null,effect:null,update:null,scope:new An(!0),render:null,proxy:null,exposed:null,exposeProxy:null,withProxy:null,provides:n?n.provides:Object.create(i.provides),accessCache:null,renderCache:[],components:null,directives:null,propsOptions:Si(r,i),emitsOptions:$r(r,i),emit:null,emitted:null,propsDefaults:t,inheritAttrs:r.inheritAttrs,ctx:t,data:t,props:t,attrs:t,slots:t,refs:t,setupState:t,setupContext:null,attrsProxy:null,slotsProxy:null,suspense:o,suspenseId:o?o.pendingId:0,asyncDep:null,asyncResolved:!1,isMounted:!1,isUnmounted:!1,isDeactivated:!1,bc:null,c:null,bm:null,m:null,bu:null,u:null,um:null,bum:null,da:null,a:null,rtg:null,rtc:null,ec:null,sp:null,$uniElements:new Map,$templateUniElementRefs:[],$templateUniElementStyles:{},$eS:{},$eA:{}};return s.ctx={_:s},s.root=n?n.root:s,s.emit=Sr.bind(null,s),e.ce&&e.ce(s),s}let Ni=null;const Li=()=>Ni||kr;let Ri,ji;Ri=e=>{Ni=e},ji=e=>{Ui=e};const Mi=e=>{const t=Ni;return Ri(e),e.scope.on(),()=>{e.scope.off(),Ri(t)}},Di=()=>{Ni&&Ni.scope.off(),Ri(null)};function Vi(e){return 4&e.vnode.shapeFlag}let Ui=!1;function Hi(e,t=!1){t&&ji(t);const{props:n}=e.vnode,o=Vi(e);_i(e,n,o,t);const r=o?function(e){const t=e.type;e.accessCache=Object.create(null),e.proxy=zo(new Proxy(e.ctx,ii));const{setup:n}=t;if(n){const t=e.setupContext=n.length>1?function(e){const t=t=>{e.exposed=t||{}};return{get attrs(){return function(e){return e.attrsProxy||(e.attrsProxy=new Proxy(e.attrs,{get:(t,n)=>(Zn(e,0,"$attrs"),t[n])}))}(e)},slots:e.slots,emit:e.emit,expose:t}}(e):null,o=Mi(e);Un();const r=nr(n,e,0,[e.props,t]);Hn(),o(),y(r)?r.then(Di,Di):function(e,t){h(t)?e.render=t:v(t)&&(e.setupState=tr(t));Bi(e)}(e,r)}else Bi(e)}(e):void 0;return t&&ji(!1),r}function Bi(e,t,n){const r=e.type;e.render||(e.render=r.render||o);{const t=Mi(e);Un();try{ai(e)}finally{Hn(),t()}}}function Wi(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(tr(zo(e.exposed)),{get:(t,n)=>n in t?t[n]:e.proxy[n],has:(e,t)=>t in e||t in oi}))}const zi=(e,t)=>{const n=function(e,t,n=!1){let r,i;const s=h(e);return s?(r=e,i=o):(r=e.get,i=e.set),new qo(r,i,s||!i,n)}(e,0,Ui);return n},Fi="3.4.21";function Gi(e){return Yo(e)}const qi="[object Array]",Ki="[object Object]";function Ji(e,t){const n={};return Xi(e,t),Zi(e,t,"",n),n}function Xi(e,t){if((e=Gi(e))===t)return;const n=x(e),o=x(t);if(n==Ki&&o==Ki)for(let r in t){const n=e[r];void 0===n?e[r]=null:Xi(n,t[r])}else n==qi&&o==qi&&e.length>=t.length&&t.forEach((t,n)=>{Xi(e[n],t)})}function Zi(e,t,n,o){if((e=Gi(e))===t)return;const r=x(e),i=x(t);if(r==Ki)if(i!=Ki||Object.keys(e).length<Object.keys(t).length)Qi(o,n,e);else for(let s in e){const r=Gi(e[s]),i=t[s],c=x(r),a=x(i);if(c!=qi&&c!=Ki)r!=i&&Qi(o,(""==n?"":n+".")+s,r);else if(c==qi)a!=qi||r.length<i.length?Qi(o,(""==n?"":n+".")+s,r):r.forEach((e,t)=>{Zi(e,i[t],(""==n?"":n+".")+s+"["+t+"]",o)});else if(c==Ki)if(a!=Ki||Object.keys(r).length<Object.keys(i).length)Qi(o,(""==n?"":n+".")+s,r);else for(let e in r)Zi(r[e],i[e],(""==n?"":n+".")+s+"."+e,o)}else r==qi?i!=qi||e.length<t.length?Qi(o,n,e):e.forEach((e,r)=>{Zi(e,t[r],n+"["+r+"]",o)}):Qi(o,n,e)}function Qi(e,t,n){e[t]=n}function Yi(e){const t=e.ctx.__next_tick_callbacks;if(t&&t.length){const e=t.slice(0);t.length=0;for(let t=0;t<e.length;t++)e[t]()}}function es(e,t){const n=e.ctx;if(!n.__next_tick_pending&&!function(e){return ar.includes(e.update)}(e))return gr(t&&t.bind(e.proxy));let o;return n.__next_tick_callbacks||(n.__next_tick_callbacks=[]),n.__next_tick_callbacks.push(()=>{t?nr(t.bind(e.proxy),e,14):o&&o(e.proxy)}),new Promise(e=>{o=e})}function ts(e,t){const n=typeof(e=Gi(e));if("object"===n&&null!==e){let n=t.get(e);if(void 0!==n)return n;if(p(e)){const o=e.length;n=new Array(o),t.set(e,n);for(let r=0;r<o;r++)n[r]=ts(e[r],t)}else{n={},t.set(e,n);for(const o in e)l(e,o)&&(n[o]=ts(e[o],t))}return n}if("symbol"!==n)return e}function ns(e){return ts(e,"undefined"!=typeof WeakMap?new WeakMap:new Map)}function os(e,t,n){if(!t)return;(t=ns(t)).$eS=e.$eS||{},t.$eA=e.$eA||{};const o=e.ctx,r=o.mpType;if("page"===r||"component"===r){t.r0=1;const n=o.$scope,r=Ji(t,function(e,t){const n=e.data,o=Object.create(null);return t.forEach(e=>{o[e]=n[e]}),o}(n,Object.keys(t)));Object.keys(r).length?(o.__next_tick_pending=!0,n.setData(r,()=>{o.__next_tick_pending=!1,Yi(e)}),_r()):Yi(e)}}function rs(e,t,n){t.appContext.config.globalProperties.$applyOptions(e,t,n);const o=e.computed;if(o){const e=Object.keys(o);if(e.length){const n=t.ctx;n.$computedKeys||(n.$computedKeys=[]),n.$computedKeys.push(...e)}}delete t.ctx.$onApplyOptions}function is(e,t=!1){const{setupState:n,$templateRefs:o,$templateUniElementRefs:r,ctx:{$scope:i,$mpPlatform:s}}=e;if(!i||!o&&!r)return;if(t)return"mp-alipay"!==s&&o&&o.forEach(e=>ss(e,null,n)),void(r&&r.forEach(e=>ss(e,null,n)));const c="mp-baidu"===s||"mp-toutiao"===s,a=e=>{if(0===e.length)return[];const t=(i.selectAllComponents(".r")||[]).concat(i.selectAllComponents(".r-i-f")||[]);return e.filter(e=>{const o=function(e,t){const n=e.find(e=>e&&(e.properties||e.props).uI===t);if(n){const e=n.$vm;return e?Wi(e.$)||e:function(e){v(e)&&zo(e);return e}(n)}return null}(t,e.i);return!(!c||null!==o)||(ss(e,o,n),!1)})},u=()=>{if(o){const t=a(o);t.length&&e.proxy&&e.proxy.$scope&&e.proxy.$scope.setData({r1:1},()=>{a(t)})}};"mp-alipay"!==s&&(i._$setRef?i._$setRef(u):es(e,u)),r&&r.length&&es(e,()=>{r.forEach(e=>{p(e.v)?e.v.forEach(t=>{ss(e,t,n)}):ss(e,e.v,n)})})}function ss({r:e,f:t},n,o){if(h(e))e(n,{});else{const r=g(e),i=Xo(e);if(r||i)if(t){if(!i)return;p(e.value)||(e.value=[]);const t=e.value;if(-1===t.indexOf(n)){if(t.push(n),!n)return;n.$&&Xr(()=>a(t,n),n.$)}}else r?l(o,e)&&(o[e]=n):Xo(e)&&(e.value=n)}}const cs=yr;function as(e,t){const n=e.component=Ti(e,t.parentComponent,null);return n.renderer=t.mpType?t.mpType:"component",n.ctx.$onApplyOptions=rs,n.ctx.$children=[],"app"===t.mpType&&(n.render=o),t.onBeforeSetup&&t.onBeforeSetup(n,t),Hi(n),t.parentComponent&&n.proxy&&t.parentComponent.ctx.$children.push(Wi(n)||n.proxy),function(e){const t=hs.bind(e);e.$updateScopedSlots=()=>gr(()=>mr(t));const n=()=>{if(e.isMounted){const{next:t,bu:n,u:o}=e;gs(e,!1),ds(),n&&T(n),gs(e,!0),os(e,ps(e)),o&&cs(o)}else Xr(()=>{is(e,!0)},e),os(e,ps(e))},r=e.effect=new Tn(n,o,()=>mr(i),e.scope),i=e.update=()=>{r.dirty&&r.run()};i.id=e.uid,gs(e,!0),i()}(n),n.proxy}const us=e=>{let t;for(const n in e)("class"===n||"style"===n||i(n))&&((t||(t={}))[n]=e[n]);return t};function ls(e){return e?e.filter(e=>{const t=e.v;return!(!t||"object"!=typeof t||!["UNI-LOADING-ELEMENT","UNI-CLOUD-DB-ELEMENT"].includes(t.nodeName))}):[]}function ps(e){const{type:t,vnode:n,proxy:o,withProxy:r,props:i,propsOptions:[s],slots:c,attrs:a,emit:u,render:l,renderCache:p,data:f,setupState:d,ctx:h,uid:g,appContext:{app:{config:{globalProperties:{pruneComponentPropsCache:m}}}},inheritAttrs:v}=e;let y;e.$uniElementIds=new Map,e.$templateRefs=ls(e.$templateRefs||[]),e.$templateUniElementRefs=ls(e.$templateUniElementRefs||[]),e.$templateUniElementStyles={},e.$ei=0,m(g),e.__counter=0===e.__counter?1:0;const _=Or(e);try{if(4&n.shapeFlag){fs(v,i,s,a);const e=r||o;y=l.call(e,e,p,i,d,f,h)}else{fs(v,i,s,t.props?a:us(a));const e=t;y=e.length>1?e(i,{attrs:a,slots:c,emit:u}):e(i,null)}}catch(x){rr(x,e,1),y=!1}return is(e),Or(_),y}function fs(e,t,n,o){if(t&&o&&!1!==e){const e=Object.keys(o).filter(e=>"class"!==e&&"style"!==e);if(!e.length)return;n&&e.some(s)?e.forEach(e=>{s(e)&&e.slice(9)in n||(t[e]=o[e])}):e.forEach(e=>t[e]=o[e])}}const ds=e=>{Un(),_r(),Hn()};function hs(){const e=this.$scopedSlotsData;if(!e||0===e.length)return;const t=this.ctx.$scope,n=t.data,o=Object.create(null);e.forEach(({path:e,index:t,data:r})=>{const i=be(n,e),s=g(t)?`${e}.${t}`:`${e}[${t}]`;if(void 0===i||void 0===i[t])o[s]=r;else{const e=Ji(r,i[t]);Object.keys(e).forEach(t=>{o[s+"."+t]=e[t]})}}),e.length=0,Object.keys(o).length&&t.setData(o)}function gs({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}const ms=function(e,t=null){h(e)||(e=c({},e)),null==t||v(t)||(t=null);const n=Rr(),o=new WeakSet,r=n.app={_uid:jr++,_component:e,_props:t,_container:null,_context:n,_instance:null,version:Fi,get config(){return n.config},set config(e){},use:(e,...t)=>(o.has(e)||(e&&h(e.install)?(o.add(e),e.install(r,...t)):h(e)&&(o.add(e),e(r,...t))),r),mixin:e=>(n.mixins.includes(e)||n.mixins.push(e),r),component:(e,t)=>t?(n.components[e]=t,r):n.components[e],directive:(e,t)=>t?(n.directives[e]=t,r):n.directives[e],mount(){},unmount(){},provide:(e,t)=>(n.provides[e]=t,r),runWithContext(e){const t=Mr;Mr=r;try{return e()}finally{Mr=t}}};return r};function vs(e,t=null){("undefined"!=typeof window?window:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof global?global:"undefined"!=typeof my?my:void 0).__VUE__=!0;const n=ms(e,t),r=n._context;r.config.globalProperties.$nextTick=function(e){return es(this.$,e)};const i=e=>(e.appContext=r,e.shapeFlag=6,e),s=function(e,t){return as(i(e),t)},c=function(e){return e&&function(e){const{bum:t,scope:n,update:o,um:r}=e;t&&T(t);{const t=e.parent;if(t){const n=t.ctx.$children,o=Wi(e)||e.proxy,r=n.indexOf(o);r>-1&&n.splice(r,1)}}n.stop(),o&&(o.active=!1),r&&cs(r),cs(()=>{e.isUnmounted=!0})}(e.$)};return n.mount=function(){e.render=o;const t=as(i({type:e}),{mpType:"app",mpInstance:null,parentComponent:null,slots:[],props:null});return n._instance=t.$,t.$app=n,t.$createComponent=s,t.$destroyComponent=c,r.$appInstance=t,t},n.unmount=function(){},n}function ys(e,t,n,o){h(t)&&zr(e,t.bind(n),o)}function _s(e,t,n){!function(e,t,n){const o=e.mpType||n.$mpType;!o||"component"===o||"page"===o&&"component"===t.renderer||Object.keys(e).forEach(o=>{if(Ce(o,e[o],!1)){const r=e[o];p(r)?r.forEach(e=>ys(o,e,n,t)):ys(o,r,n,t)}})}(e,t,n)}function xs(e,t,n){return e[t]=n}function ws(e,...t){const n=this[e];return n?n(...t):(console.error(`method ${e} not found`),null)}function bs(e){const t=e.config.errorHandler;return function(n,o,r){t&&t(n,o,r);const i=e._instance;if(!i||!i.proxy)throw n;i[F]?i.proxy.$callHook(F,n):ir(n,0,o&&o.$.vnode,!1)}}function Ss(e,t){return e?[...new Set([].concat(e,t))]:t}let $s;const Ps="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",ks=/^(?:[A-Za-z\d+/]{4})*?(?:[A-Za-z\d+/]{2}(?:==)?|[A-Za-z\d+/]{3}=?)?$/;function Os(){const e=Cn.getStorageSync("uni_id_token")||"",t=e.split(".");if(!e||3!==t.length)return{uid:null,role:[],permission:[],tokenExpired:0};let n;try{n=JSON.parse((o=t[1],decodeURIComponent($s(o).split("").map(function(e){return"%"+("00"+e.charCodeAt(0).toString(16)).slice(-2)}).join(""))))}catch(r){throw new Error("获取当前用户信息出错,详细错误信息为:"+r.message)}var o;return n.tokenExpired=1e3*n.exp,delete n.exp,delete n.iat,n}function Cs(e){const t=e.config;var n;t.errorHandler=Ae(e,bs),n=t.optionMergeStrategies,ke.forEach(e=>{n[e]=Ss});const o=t.globalProperties;!function(e){e.uniIDHasRole=function(e){const{role:t}=Os();return t.indexOf(e)>-1},e.uniIDHasPermission=function(e){const{permission:t}=Os();return this.uniIDHasRole("admin")||t.indexOf(e)>-1},e.uniIDTokenValid=function(){const{tokenExpired:e}=Os();return e>Date.now()}}(o),o.$set=xs,o.$applyOptions=_s,o.$callMethod=ws,Cn.invokeCreateVueAppHook(e)}$s="function"!=typeof atob?function(e){if(e=String(e).replace(/[\t\n\f\r ]+/g,""),!ks.test(e))throw new Error("Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.");var t;e+="==".slice(2-(3&e.length));for(var n,o,r="",i=0;i<e.length;)t=Ps.indexOf(e.charAt(i++))<<18|Ps.indexOf(e.charAt(i++))<<12|(n=Ps.indexOf(e.charAt(i++)))<<6|(o=Ps.indexOf(e.charAt(i++))),r+=64===n?String.fromCharCode(t>>16&255):64===o?String.fromCharCode(t>>16&255,t>>8&255):String.fromCharCode(t>>16&255,t>>8&255,255&t);return r}:atob;const Es=Object.create(null);function Is(e){delete Es[e]}function As(e){if(!e)return;const[t,n]=e.split(",");return Es[t]?Es[t][parseInt(n)]:void 0}var Ts={install(e){Cs(e),e.config.globalProperties.pruneComponentPropsCache=Is;const t=e.mount;e.mount=function(n){const o=t.call(e,n),r=function(){const e="createApp";if("undefined"!=typeof global&&void 0!==global[e])return global[e];if("undefined"!=typeof my)return my[e]}();return r?r(o):"undefined"!=typeof createMiniProgramApp&&createMiniProgramApp(o),o}}};function Ns(e){return g(e)?e:function(e){let t="";if(!e||g(e))return t;for(const n in e)t+=`${n.startsWith("--")?n:C(n)}:${e[n]};`;return t}(L(e))}function Ls(e,t){const n=Li(),r=n.ctx,i=void 0===t||"mp-weixin"!==r.$mpPlatform&&"mp-qq"!==r.$mpPlatform&&"mp-xhs"!==r.$mpPlatform||!g(t)&&"number"!=typeof t?"":"_"+t,s="e"+n.$ei+++i,a=r.$scope;if(!e)return delete a[s],s;const u=a[s];return u?u.value=e:a[s]=function(e,t){const n=e=>{var r;(r=e).type&&r.target&&(r.preventDefault=o,r.stopPropagation=o,r.stopImmediatePropagation=o,l(r,"detail")||(r.detail={}),l(r,"markerId")&&(r.detail="object"==typeof r.detail?r.detail:{},r.detail.markerId=r.markerId),w(r.detail)&&l(r.detail,"checked")&&!l(r.detail,"value")&&(r.detail.value=r.detail.checked),w(r.detail)&&(r.target=c({},r.target,r.detail)));let i=[e];t&&t.ctx.$getTriggerEventDetail&&"number"==typeof e.detail&&(e.detail=t.ctx.$getTriggerEventDetail(e.detail)),e.detail&&e.detail.__args__&&(i=e.detail.__args__);const s=n.value,a=()=>or(function(e,t){if(p(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n&&n.call(e),e._stopped=!0},t.map(e=>t=>!t._stopped&&e(t))}return t}(e,s),t,5,i),u=e.target,f=!!u&&(!!u.dataset&&"true"===String(u.dataset.eventsync));if(!Rs.includes(e.type)||f){const t=a();if("input"===e.type&&(p(t)||y(t)))return;return t}setTimeout(a)};return n.value=e,n}(e,n),s}const Rs=["tap","longpress","longtap","transitionend","animationstart","animationiteration","animationend","touchforcechange"];const js=function(e,t=null){return e&&(e.mpType="app"),vs(e,t).use(Ts)};const Ms=["externalClasses"];const Ds=/_(.*)_worklet_factory_/;function Vs(e,t){const n=e.$children;for(let r=n.length-1;r>=0;r--){const e=n[r];if(e.$scope._$vueId===t)return e}let o;for(let r=n.length-1;r>=0;r--)if(o=Vs(n[r],t),o)return o}const Us=["createSelectorQuery","createIntersectionObserver","selectAllComponents","selectComponent"];function Hs(e,t){const n=e.ctx;n.mpType=t.mpType,n.$mpType=t.mpType,n.$mpPlatform="mp-weixin",n.$scope=t.mpInstance,Object.defineProperties(n,{[_e]:{get(){const e=this.$scope.data[_e];return void 0===e?"":e}}}),n.$mp={},n._self={},e.slots={},p(t.slots)&&t.slots.length&&(t.slots.forEach(t=>{e.slots[t]=!0}),e.slots.d&&(e.slots.default=!0)),n.getOpenerEventChannel=function(){return t.mpInstance.getOpenerEventChannel()},n.$hasHook=Bs,n.$callHook=Ws,e.emit=function(e,t){return function(n,...o){const r=t.$scope;if(r&&n){const e={__args__:o};r.triggerEvent(n,e)}return e.apply(this,[n,...o])}}(e.emit,n)}function Bs(e){const t=this.$[e];return!(!t||!t.length)}function Ws(e,t){"mounted"===e&&(Ws.call(this,"bm"),this.$.isMounted=!0,e="m");const n=this.$[e];return n&&((e,t)=>{let n;for(let o=0;o<e.length;o++)n=e[o](t);return n})(n,t)}const zs=[J,B,W,Z,oe,se,ce,ae,fe];function Fs(e,t=new Set){if(e){Object.keys(e).forEach(n=>{Ce(n,e[n])&&t.add(n)});{const{extends:n,mixins:o}=e;o&&o.forEach(e=>Fs(e,t)),n&&Fs(n,t)}}return t}function Gs(e,t,n){-1!==n.indexOf(t)||l(e,t)||(e[t]=function(e){return this.$vm&&this.$vm.$callHook(t,e)})}const qs=[X];function Ks(e,t,n=qs){t.forEach(t=>Gs(e,t,n))}function Js(e,t,n=qs){Fs(t).forEach(t=>Gs(e,t,n))}const Xs=we(()=>{const e=[],t=h(getApp)&&getApp({allowDefault:!0});if(t&&t.$vm&&t.$vm.$){const n=t.$vm.$.appContext.mixins;if(p(n)){const t=Object.keys(Oe);n.forEach(n=>{t.forEach(t=>{l(n,t)&&!e.includes(t)&&e.push(t)})})}}return e});const Zs=[B,W,F,G,q,K];function Qs(e,t){const n=e.$,o={globalData:e.$options&&e.$options.globalData||{},$vm:e,onLaunch(t){this.$vm=e;const o=n.ctx;this.$vm&&o.$scope&&o.$callHook||(Hs(n,{mpType:"app",mpInstance:this,slots:[]}),o.globalData=this.globalData,e.$callHook(z,t))}},r=wx.$onErrorHandlers;r&&(r.forEach(e=>{zr(F,e,n)}),r.length=0),function(e){const t=Zo(function(){var e;let t="";{const n=(null===(e=wx.getAppBaseInfo)||void 0===e?void 0:e.call(wx))||wx.getSystemInfoSync();t=Me(n&&n.language?n.language:je)||je}return t}());Object.defineProperty(e,"$locale",{get:()=>t.value,set(e){t.value=e}})}(e);const i=e.$.type;Ks(o,Zs),Js(o,i);{const e=i.methods;e&&c(o,e)}return o}function Ys(e,t){if(h(e.onLaunch)){const t=wx.getLaunchOptionsSync&&wx.getLaunchOptionsSync();e.onLaunch(t)}h(e.onShow)&&wx.onAppShow&&wx.onAppShow(e=>{t.$callHook("onShow",e)}),h(e.onHide)&&wx.onAppHide&&wx.onAppHide(e=>{t.$callHook("onHide",e)})}const ec=["eO","uR","uRIF","uI","uT","uP","uS"];function tc(e){e.properties||(e.properties={}),c(e.properties,function(e,t=!1){const n={};if(!t){let e=function(e){const t=Object.create(null);e&&e.forEach(e=>{t[e]=!0}),this.setData({$slots:t})};ec.forEach(e=>{n[e]={type:null,value:""}}),n.uS={type:null,value:[]},n.uS.observer=e}return e.behaviors&&e.behaviors.includes("wx://form-field")&&(e.properties&&e.properties.name||(n.name={type:null,value:""}),e.properties&&e.properties.value||(n.value={type:null,value:""})),n}(e),function(e){const t={};return e&&e.virtualHost&&(t.virtualHostStyle={type:null,value:""},t.virtualHostClass={type:null,value:""},t.virtualHostHidden={type:null,value:""},t[_e]={type:null,value:""}),t}(e.options))}const nc=[String,Number,Boolean,Object,Array,null];function oc(e,t){const n=function(e){return p(e)&&1===e.length?e[0]:e}(e);return-1!==nc.indexOf(n)?n:null}function rc(e,t){return(t?function(e){const t={};w(e)&&Object.keys(e).forEach(n=>{-1===ec.indexOf(n)&&(t[n]=e[n])});return t}(e):As(e.uP))||{}}function ic(e){const t=function(){const e=this.properties.uP;e&&(this.$vm?function(e,t){const n=Wo(t.props),o=As(e)||{};sc(n,o)&&(!function(e,t,n){const{props:o,attrs:r,vnode:{patchFlag:i}}=e,s=Wo(o),[c]=e.propsOptions;let a=!1;if(i>0&&!(16&i)){if(8&i){const n=e.vnode.dynamicProps;for(let i=0;i<n.length;i++){let u=n[i];if(Pr(e.emitsOptions,u))continue;const p=t[u];if(c)if(l(r,u))p!==r[u]&&(r[u]=wi(0,0,p),a=!0);else{const t=k(u);o[t]=bi(c,s,t,p,e,!1)}else p!==r[u]&&(r[u]=wi(0,0,p),a=!0)}}}else{let i;xi(e,t,o,r)&&(a=!0);for(const r in s)t&&(l(t,r)||(i=C(r))!==r&&l(t,i))||(c?!n||void 0===n[r]&&void 0===n[i]||(o[r]=bi(c,s,r,void 0,e,!0)):delete o[r]);if(r!==s)for(const e in r)t&&l(t,e)||(delete r[e],a=!0)}a&&Qn(e,"set","$attrs")}(t,o,n),r=t.update,ar.indexOf(r)>-1&&function(e){const t=ar.indexOf(e);t>ur&&ar.splice(t,1)}(t.update),t.update());var r}(e,this.$vm.$):"m"===this.properties.uT&&function(e,t){const n=t.properties,o=As(e)||{};sc(n,o,!1)&&t.setData(o)}(e,this))};e.observers||(e.observers={}),e.observers.uP=t}function sc(e,t,n=!0){const o=Object.keys(t);if(n&&o.length!==Object.keys(e).length)return!0;for(let r=0;r<o.length;r++){const n=o[r];if(t[n]!==e[n])return!0}return!1}function cc(e,t){e.data={},e.behaviors=function(e){const t=e.behaviors;let n=e.props;n||(e.props=n=[]);const o=[];return p(t)&&t.forEach(e=>{o.push(e.replace("uni://","wx://")),"uni://form-field"===e&&(p(n)?(n.push("name"),n.push("modelValue")):(n.name={type:String,default:""},n.modelValue={type:[String,Number,Boolean,Array,Object,Date],default:""}))}),o}(t)}function ac(e,{parse:t,mocks:n,isPage:o,isPageInProject:r,initRelation:i,handleLink:s,initLifetimes:a}){e=e.default||e;const u={multipleSlots:!0,addGlobalClass:!0,pureDataPattern:/^uP$/};p(e.mixins)&&e.mixins.forEach(e=>{v(e.options)&&c(u,e.options)}),e.options&&c(u,e.options);const f={options:u,lifetimes:a({mocks:n,isPage:o,initRelation:i,vueOptions:e}),pageLifetimes:{show(){this.$vm&&this.$vm.$callHook("onPageShow")},hide(){this.$vm&&this.$vm.$callHook("onPageHide")},resize(e){this.$vm&&this.$vm.$callHook("onPageResize",e)}},methods:{__l:s}};var d,h,g,m;return cc(f,e),tc(f),ic(f),function(e,t){Ms.forEach(n=>{l(t,n)&&(e[n]=t[n])})}(f,e),d=f.methods,h=e.wxsCallMethods,p(h)&&h.forEach(e=>{d[e]=function(t){return this.$vm[e](t)}}),g=f.methods,(m=e.methods)&&Object.keys(m).forEach(e=>{const t=e.match(Ds);if(t){const n=t[1];g[e]=m[e],g[n]=m[n]}}),t&&t(f,{handleLink:s}),f}let uc,lc;function pc(){return getApp().$vm}function fc(e,t){const{parse:n,mocks:o,isPage:r,initRelation:i,handleLink:s,initLifetimes:c}=t,a=ac(e,{mocks:o,isPage:r,isPageInProject:!0,initRelation:i,handleLink:s,initLifetimes:c});!function({properties:e},t){p(t)?t.forEach(t=>{e[t]={type:String,value:""}}):w(t)&&Object.keys(t).forEach(n=>{const o=t[n];if(w(o)){let t=o.default;h(t)&&(t=t());const r=o.type;o.type=oc(r),e[n]={type:o.type,value:t}}else e[n]={type:oc(o)}})}(a,(e.default||e).props);const u=a.methods;return u.onLoad=function(e){var t;return this.options=e,this.$page={fullPath:(t=this.route+$e(e),function(e){return 0===e.indexOf("/")}(t)?t:"/"+t)},this.$vm&&this.$vm.$callHook(J,e)},Ks(u,zs),Js(u,e),function(e,t){if(!t)return;Object.keys(Oe).forEach(n=>{t&Oe[n]&&Gs(e,n,[])})}(u,e.__runtimeHooks),Ks(u,Xs()),n&&n(a,{handleLink:s}),a}const dc=Page,hc=Component;function gc(e){const t=e.triggerEvent,n=function(n,...o){return t.apply(e,[(r=n,k(r.replace(xe,"-"))),...o]);var r};try{e.triggerEvent=n}catch(o){e._triggerEvent=n}}function mc(e,t,n){const o=t[e];t[e]=o?function(...e){return gc(this),o.apply(this,e)}:function(){gc(this)}}Page=function(e){return mc(J,e),dc(e)},Component=function(e){mc("created",e);return e.properties&&e.properties.uP||(tc(e),ic(e)),hc(e)};var vc=Object.freeze({__proto__:null,handleLink:function(e){const t=e.detail||e.value,n=t.vuePid;let o;n&&(o=Vs(this.$vm,n)),o||(o=this.$vm),t.parent=o},initLifetimes:function({mocks:e,isPage:t,initRelation:n,vueOptions:o}){return{attached(){let r=this.properties;!function(e,t){if(!e)return;const n=e.split(","),o=n.length;1===o?t._$vueId=n[0]:2===o&&(t._$vueId=n[0],t._$vuePid=n[1])}(r.uI,this);const i={vuePid:this._$vuePid};n(this,i);const s=this,c=t(s);let a=r;this.$vm=function(e,t){uc||(uc=pc().$createComponent);const n=uc(e,t);return Wi(n.$)||n}({type:o,props:rc(a,c)},{mpType:c?"page":"component",mpInstance:s,slots:r.uS||{},parentComponent:i.parent&&i.parent.$,onBeforeSetup(t,n){!function(e,t){Object.defineProperty(e,"refs",{get(){const e={};return function(e,t,n){e.selectAllComponents(t).forEach(e=>{const t=e.properties.uR;n[t]=e.$vm||e})}(t,".r",e),t.selectAllComponents(".r-i-f").forEach(t=>{const n=t.properties.uR;n&&(e[n]||(e[n]=[]),e[n].push(t.$vm||t))}),e}})}(t,s),function(e,t,n){const o=e.ctx;n.forEach(n=>{l(t,n)&&(e[n]=o[n]=t[n])})}(t,s,e),function(e,t){Hs(e,t);const n=e.ctx;Us.forEach(e=>{n[e]=function(...t){const o=n.$scope;if(o&&o[e])return o[e].apply(o,t)}})}(t,n)}}),c||function(e){const t=e.$options;p(t.behaviors)&&t.behaviors.includes("uni://form-field")&&e.$watch("modelValue",()=>{e.$scope&&e.$scope.setData({name:e.name,value:e.modelValue})},{immediate:!0})}(this.$vm)},ready(){this.$vm&&(this.$vm.$callHook("mounted"),this.$vm.$callHook(X))},detached(){var e;this.$vm&&(Is(this.$vm.$.uid),e=this.$vm,lc||(lc=pc().$destroyComponent),lc(e))}}},initRelation:function(e,t){e.triggerEvent("__l",t)},isPage:function(e){return!!e.route},mocks:["__route__","__wxExparserNodeId__","__wxWebviewId__"]});const yc=function(e){return App(Qs(e))},_c=(xc=vc,function(e){return Component(fc(e,xc))});var xc;const wc=function(e){return function(t){return Component(ac(t,e))}}(vc),bc=function(e){Ys(Qs(e),e)},Sc=function(e){const t=Qs(e),n=h(getApp)&&getApp({allowDefault:!0});if(!n)return;e.$.ctx.$scope=n;const o=n.globalData;o&&Object.keys(t.globalData).forEach(e=>{l(o,e)||(o[e]=t.globalData[e])}),Object.keys(t).forEach(e=>{l(n,e)||(n[e]=t[e])}),Ys(t,e)};!function(){if(h(wx.preloadAssets)){const e=String.fromCharCode(99,100,110,49,46,100,99,108,111,117,100,46,110,101,116,46,99,110);setTimeout(()=>{wx.preloadAssets({data:[{type:"image",src:"https://"+e+"/526a64464d54424751673d3d/img/shadow-grey.png"}]})},3e3)}}(),wx.createApp=global.createApp=yc,wx.createPage=_c,wx.createComponent=wc,wx.createPluginApp=global.createPluginApp=bc,wx.createSubpackageApp=global.createSubpackageApp=Sc,Math;const $c="mingdao_guide_login_state",Pc={id:"guide_001",name:"赵明",phone:"13800000000",avatar:"/static/logo.png",rating:4.9,orderCount:286,serviceMinutes:12840,auditStatus:"approved",onlineStatus:"offline",groupName:"都江堰精讲一团",tags:["都江堰水利工程","亲子讲解","川西历史","普通话"]},kc=[{id:"dujiangyan",name:"都江堰景区",city:"成都",meetingPoints:[{id:"south_gate",name:"都江堰南门",guideCount:6,latitude:31.001472,longitude:103.648278,address:"四川省成都市都江堰市公园路都江堰景区南门"},{id:"north_gate",name:"都江堰北门",guideCount:3,latitude:31.005846,longitude:103.646812,address:"四川省成都市都江堰市离堆公园路都江堰景区北门"}]},{id:"qingchengshan",name:"青城山景区",city:"成都",meetingPoints:[{id:"front_gate",name:"青城山前山门",guideCount:4,latitude:30.905982,longitude:103.569027,address:"四川省成都市都江堰市青城山镇青城山景区前山门"},{id:"parking",name:"游客中心停车场",guideCount:2,latitude:30.909683,longitude:103.571938,address:"四川省成都市都江堰市青城山景区游客中心停车场"}]}];const Oc=({}.VITE_API_BASE_URL||"http://127.0.0.1:8011/api").replace(/\/$/,""),Cc=Oc.replace(/\/api$/,""),Ec="/pages/login/index";let Ic=!1;function Ac({url:e,method:t="GET",data:n,authenticated:o=!0,headers:r={}}){const i=Cn.getStorageSync($c),s={"Content-Type":"application/json",...r};return o&&i&&i.token&&(s.Authorization=`Bearer ${i.token}`),new Promise((r,i)=>{Cn.request({url:`${Oc}${e}`,method:t,data:n,header:s,success(e){const t=e.data||{};if(Nc(e.statusCode,t,o))return jc(),void i(Lc(t.message||t.msg));e.statusCode>=200&&e.statusCode<300&&0===t.code?r(t.data):i(Rc(t,e.statusCode))},fail(e){i(new Error(e.errMsg||"网络连接失败"))}})})}function Tc({url:e,filePath:t,name:n="file",header:o={},authenticated:r=!0}){const i=Cn.getStorageSync($c),s={...o};return r&&i&&i.token&&(s.Authorization=`Bearer ${i.token}`),new Promise((o,i)=>{Cn.uploadFile({url:`${Oc}${e}`,filePath:t,name:n,header:s,success(e){let t=e.data;try{t="string"==typeof t?JSON.parse(t):t}catch(n){return void i(new Error("上传响应格式不正确"))}if(Nc(e.statusCode,t,r))return jc(),void i(Lc(t&&(t.message||t.msg)));e.statusCode>=200&&e.statusCode<300&&t&&0===t.code?o(t.data):i(Rc(t,e.statusCode,"上传失败"))},fail(e){i(new Error(e.errMsg||"文件上传失败"))}})})}function Nc(e,t={},n=!0){return!!n&&(401===e||t&&(401===t.code||"401"===t.code))}function Lc(e){const t=new Error(e||"登录已过期,请重新登录");return t.authExpired=!0,t}function Rc(e={},t,n="请求失败"){const o=e||{},r=new Error(o.message||o.msg||`${n}(${t})`);return r.code=o.code,r.statusCode=t,r}function jc(){try{Cn.removeStorageSync($c)}catch(e){}Ic||function(){const e="function"==typeof getCurrentPages?getCurrentPages():[],t=e[e.length-1];return t&&`/${t.route}`===Ec}()||(Ic=!0,Cn.showToast({title:"登录已过期,请重新登录",icon:"none"}),setTimeout(()=>{Cn.reLaunch({url:Ec,complete(){setTimeout(()=>{Ic=!1},500)}})},300))}const Mc={onLaunch(){console.log("Guide App Launch")},onShow(){}};function Dc(){return{app:js(Mc)}}function Vc(){const e=Cn.getStorageSync($c)||null;return e&&e.expiresAt&&Number(e.expiresAt)<=Date.now()?(Cn.removeStorageSync($c),null):e}function Uc(e,t="navigateTo"){const n=function(e){return e?String(e):""}(e);if(!n)return;const o=Cn[t]||Cn.navigateTo;try{o({url:n,fail(){Cn.showToast({title:"页面未注册,请重新运行项目",icon:"none"})}})}catch(r){Cn.showToast({title:"页面未注册,请重新运行项目",icon:"none"})}}Dc().app.mount("#app");const Hc="mingdao_guide_phone_change_state";function Bc(e){const t=Cn.getStorageSync($c),n=function(e={},t={}){return{...t,...e,name:e.realName||e.name||e.username||t.name||"",phone:e.mobile||e.phone||t.phone||"",avatar:(n=e.avatar||t.avatar||"",n?/^https?:\/\//i.test(n)||n.startsWith("wxfile://")||n.startsWith("blob:")?n:`${Cc}${n.startsWith("/")?n:`/${n}`}`:""),orderCount:Number(e.acceptedOrderCount??e.orderCount??t.orderCount??0),rating:Number(e.rating??t.rating??0),groupName:e.teamName||t.groupName||("个人"===e.teamType?"个人导游":"")};var n}(e,t&&t.guide||Pc);return t&&(t.guide=n,Cn.setStorageSync($c,t)),n}function Wc(e){const t=Number(e);return Number.isFinite(t)?t:0}function zc(){return kc.reduce((e,t)=>{const n=(t.meetingPoints||[]).map(e=>({scenicId:t.id,scenicName:t.name,city:t.city,...e}));return e.concat(n)},[])}function Fc(e={}){const t=kc.find(t=>t.id===e.scenicId||t.name===e.scenicName),n=t?t.meetingPoints||[]:zc(),o=n.find(t=>t.id===e.meetingPointId)||n.find(t=>t.name===e.meetingPointName)||zc().find(t=>t.id===e.meetingPointId||t.name===e.meetingPointName),r=Wc(e.meetingPointLatitude||e.latitude||o&&o.latitude),i=Wc(e.meetingPointLongitude||e.longitude||o&&o.longitude);return o||r&&i?{scenicId:e.scenicId||t&&t.id||o&&o.scenicId||"",scenicName:e.scenicName||t&&t.name||o&&o.scenicName||"",city:o&&o.city||t&&t.city||"",id:e.meetingPointId||o&&o.id||"",name:e.meetingPointName||o&&o.name||"汇合点",address:e.meetingPointAddress||e.address||o&&o.address||"",guideCount:o&&o.guideCount||0,latitude:r,longitude:i}:null}function Gc(e,t={}){const n=Cn.getStorageSync($c);return n&&n.guide&&(n.guide.onlineStatus=e,"online"!==e&&"serving"!==e||(n.guide.receivingConfig=t),"offline"===e&&(n.guide.receivingConfig=null),Cn.setStorageSync($c,n)),e}function qc(e){const t=Number(e);return Number.isFinite(t)?t:0}function Kc(e={}){return Boolean(qc(e.latitude||e.meetingPointLatitude)&&qc(e.longitude||e.meetingPointLongitude))}function Jc(e={}){const t=qc(e.latitude||e.meetingPointLatitude),n=qc(e.longitude||e.meetingPointLongitude);return{scenicId:e.scenicId||"",scenicName:e.scenicName||"",meetingPointId:e.id||e.meetingPointId||"",meetingPointName:e.name||e.meetingPointName||"汇合点",meetingPointAddress:e.address||e.meetingPointAddress||"",latitude:t,longitude:n}}function Xc(e={}){const t=Jc(e);return Kc(t)?new Promise((e,n)=>{Cn.openLocation({latitude:t.latitude,longitude:t.longitude,scale:18,name:t.meetingPointName,address:t.meetingPointAddress,success(){e(t)},fail(e){n(e)}})}):(Cn.showToast({title:"汇合点坐标暂未配置",icon:"none"}),Promise.reject(new Error("Missing meeting point coordinates")))}function Zc(e){return"active"===e||"pending"===e?"accepted":"history"===e?"completed":e||"all"}function Qc(e={}){const t=function(e={}){const t=Fc({scenicId:e.scenicId,scenicName:e.scenicName,meetingPointId:e.meetingPointId,meetingPointName:e.meetingPointName,meetingPointLatitude:e.meetingPointLatitude,meetingPointLongitude:e.meetingPointLongitude,meetingPointAddress:e.meetingPointAddress});return t?{...e,scenicId:e.scenicId||t.scenicId,meetingPointId:e.meetingPointId||t.id,meetingPointName:e.meetingPointName||t.name,meetingPointLatitude:e.meetingPointLatitude||t.latitude,meetingPointLongitude:e.meetingPointLongitude||t.longitude,meetingPointAddress:e.meetingPointAddress||t.address}:e}({...e,quantity:Number(e.quantity??e.peopleCount??0),receiveTime:Yc(e.receiveTime||e.acceptedAt||e.createdAt),receiveStartTime:Yc(e.receiveStartTime||e.receiveTime||e.acceptedAt||e.createdAt),lectureStartTime:Yc(e.lectureStartTime||e.serviceStartedAt||e.arrivedAt),lectureEndTime:Yc(e.lectureEndTime||e.completedAt),completedAt:Yc(e.completedAt),customers:(e.customers||[]).map(e=>({...e,time:Yc(e.time)}))});return{...t,customers:t.customers&&t.customers.length?t.customers:[{no:1,phone:t.customerPhone||"",people:t.quantity||0,time:t.receiveStartTime||""}]}}function Yc(e){return e?String(e).replace("T"," "):""}function ea(e){return{...e,time:e.time?e.time.replace("T"," "):"",url:e.targetUrl||(e.orderId?`/pages/order-detail/index?id=${e.orderId}`:"")}}const ta="mingdao_guide_registration_state";function na(){return Cn.getStorageSync(ta)||null}function oa(e,t){return Tc({url:"/guide/registration/documents",filePath:e,header:{"X-Registration-Token":t}}).then(e=>e.url)}const ra={user:"GUIDE_USER_AGREEMENT",service:"EXPLANATION_SERVICE_COOPERATION",reward:"GUIDE_REWARD_PUNISHMENT"};function ia(e){return ra[e]||e||ra.user}exports.GUIDE_ORDERS_KEY="mingdao_guide_orders",exports._export_sfc=(e,t)=>{const n=e.__vccOpts||e;for(const[o,r]of t)n[o]=r;return n},exports.backOrHome=function(e="/pages/workbench/index"){("function"==typeof getCurrentPages?getCurrentPages():[]).length>1?Cn.navigateBack():Uc(e,"reLaunch")},exports.buildMeetingPointCircles=function(e={}){const t=Jc(e);return Kc(t)?[{latitude:t.latitude,longitude:t.longitude,radius:36,strokeWidth:4,color:"#4d8fe899",fillColor:"#4d8fe833"}]:[]},exports.cancelAccount=function(){return Ac({url:"/guide/push-device",method:"DELETE"}).catch(()=>{}).then(()=>Ac({url:"/guide/auth/account",method:"DELETE"})).then(e=>(Cn.removeStorageSync($c),e))},exports.changeGuidePhone=function(e,t){const n=Cn.getStorageSync(Hc);return n&&n.changeToken?Ac({url:"/guide/profile/phone",method:"PUT",data:{changeToken:n.changeToken,newPhone:e,code:t}}).then(e=>(Cn.removeStorageSync(Hc),Bc(e))):Promise.reject(new Error("旧手机号验证已失效,请重新验证"))},exports.createApp=Dc,exports.e=(e,...t)=>c(e,...t),exports.f=(e,t)=>function(e,t){let n;if(p(e)||g(e)){n=new Array(e.length);for(let o=0,r=e.length;o<r;o++)n[o]=t(e[o],o,o)}else if("number"==typeof e){n=new Array(e);for(let o=0;o<e;o++)n[o]=t(o+1,o,o)}else if(v(e))if(e[Symbol.iterator])n=Array.from(e,(e,n)=>t(e,n,n));else{const o=Object.keys(e);n=new Array(o.length);for(let r=0,i=o.length;r<i;r++){const i=o[r];n[r]=t(e[i],i,r)}}else n=[];return n}(e,t),exports.finishGuideLecture=function(){return Ac({url:"/guide/receiving/finish",method:"PUT"}).then(()=>Gc("offline"))},exports.formatDuration=function(e=0){if(e<60)return`${e}分钟`;const t=Math.floor(e/60),n=e%60;return n?`${t}小时${n}分钟`:`${t}小时`},exports.formatMoney=function(e=0){return`¥${(Number(e||0)/100).toFixed(2)}`},exports.formatRatingStars=function(e){const t=Math.max(0,Math.min(5,Math.round(Number(e)||0)));return`${"★".repeat(t)}${"☆".repeat(5-t)}`},exports.getCurrentGuideReceivingSession=function(){return Ac({url:"/guide/receiving/current"})},exports.getEarnings=function(e={}){const t={pageNum:e.pageNum||1,pageSize:e.pageSize||50};return e.serviceType&&(t.serviceType=e.serviceType),e.scenicName&&(t.scenicName=e.scenicName),e.date&&(t.date=e.date),Ac({url:"/guide/earnings",data:t})},exports.getGuideAgreement=function(e){const t=ia(e);return Ac({url:`/guide/agreements/${encodeURIComponent(t)}`,authenticated:!1})},exports.getGuideAgreements=function(){return Ac({url:"/guide/agreements",authenticated:!1})},exports.getGuideOrders=function(e="all"){return Ac({url:`/guide/orders?tab=${encodeURIComponent(Zc(e))}&page=1&size=50`}).then(e=>(e.records||[]).map(Qc))},exports.getGuideProfile=function(){return Ac({url:"/guide/profile"}).then(Bc)},exports.getGuideRatings=function({date:e="",pageNum:t=1,pageSize:n=100}={}){const o={pageNum:t,pageSize:n};return e&&(o.date=e),Ac({url:"/guide/ratings",data:o})},exports.getGuideReceivingOptions=function(){return Ac({url:"/guide/receiving/options"})},exports.getLoginState=Vc,exports.getMessageList=function(){return Ac({url:"/guide/notifications"}).then(e=>e.map(ea))},exports.getOrderDetail=function(e){return Ac({url:`/guide/orders/${e}`}).then(Qc)},exports.getRegistrationState=na,exports.getRegistrationTeams=function(){return Ac({url:"/guide/registration/teams",authenticated:!1})},exports.getStatusBarHeight=function(){try{return Cn.getSystemInfoSync().statusBarHeight||0}catch(e){return 0}},exports.getWorkbenchData=function(){return Ac({url:"/guide/workbench"})},exports.hasMeetingPointLocation=Kc,exports.index=Cn,exports.isLoggedIn=function(){const e=Vc();return Boolean(e&&e.token)},exports.loginByPhone=function({phone:e,code:t}){return e&&t?Ac({url:"/guide/auth/login",method:"POST",authenticated:!1,data:{phone:e,code:t}}).then(t=>{const n=t.user||{},o={token:t.token,expiresIn:t.expiresIn,expiresAt:Date.now()+1e3*Number(t.expiresIn||0),guide:{...Pc,id:n.id,name:n.realName||n.username||Pc.name,phone:n.mobile||e,avatar:n.avatar||Pc.avatar,rating:Number(n.rating||0),orderCount:n.acceptedOrderCount||0,auditStatus:(r=n.status,1===r?"approved":2===r?"pending":0===r?"disabled":"pending"),onlineStatus:"offline",groupName:n.teamName||("个人"===n.teamType?"个人导游":Pc.groupName)}};var r;return Cn.setStorageSync($c,o),Promise.resolve(!1),o}):Promise.reject(new Error("请输入手机号和验证码"))},exports.logout=function(){const e=Vc();return e&&e.token?Ac({url:"/guide/push-device",method:"DELETE"}).catch(()=>{}).then(()=>Ac({url:"/guide/auth/logout",method:"POST"})).finally(()=>Cn.removeStorageSync($c)):(Cn.removeStorageSync($c),Promise.resolve())},exports.markMessageRead=function(e){return Ac({url:`/guide/notifications/${e}/read`,method:"PUT"})},exports.maskPhone=function(e=""){return e.replace(/^(\d{3})\d{4}(\d{4})$/,"$1****$2")},exports.n=e=>V(e),exports.o=(e,t)=>Ls(e,t),exports.openMeetingPointPage=function(e={}){const t=Jc(e);Kc(t)?Xc(t).catch(e=>{console.log("Open meeting point location failed",e),Cn.showToast({title:"暂时无法打开地图导航",icon:"none"})}):Cn.showToast({title:"汇合点坐标暂未配置",icon:"none"})},exports.openSystemLocation=Xc,exports.p=e=>function(e){const{uid:t,__counter:n}=Li();return t+","+((Es[t]||(Es[t]=[])).push(Ei(e))-1)+","+n}(e),exports.parseMeetingPointPayload=function(e=""){if(!e)return null;try{return Jc(JSON.parse(decodeURIComponent(e)))}catch(t){return console.log("Parse meeting point payload failed",t),null}},exports.playNotificationAlert=function(){void 0!==Cn&&Cn.vibrateShort&&Cn.vibrateShort({type:"medium"});try{"undefined"!=typeof plus&&plus.device&&plus.device.beep&&(plus.device.beep(1),1)||function(){if("undefined"==typeof window)return!1;const e=window.AudioContext||window.webkitAudioContext;if(!e)return!1;const t=new e,n=t.createOscillator(),o=t.createGain();n.type="sine",n.frequency.value=880,o.gain.setValueAtTime(.12,t.currentTime),o.gain.exponentialRampToValueAtTime(.001,t.currentTime+.22),n.connect(o),o.connect(t.destination),n.start(),n.stop(t.currentTime+.22)}()}catch(e){return!1}return!0},exports.resolveAgreementCode=ia,exports.resolveComponent=function(e,t){return function(e,t,n=!0,o=!1){const r=kr||Ni;if(r){const n=r.type;{const e=function(e,t=!0){return h(e)?e.displayName||e.name:e.name||t&&e.__name}(n,!1);if(e&&(e===t||e===k(t)||e===E(k(t))))return n}const i=Cr(r[e]||n[e],t)||Cr(r.appContext[e],t);return!i&&o?n:i}}("components",e,!0,t)||e},exports.resolveMeetingPoint=Fc,exports.routeTo=Uc,exports.s=e=>Ns(e),exports.sendLoginCode=function(e){return Ac({url:"/guide/auth/sms-code",method:"POST",authenticated:!1,data:{phone:e,scene:"login"}})},exports.sendNewPhoneCode=function(e){const t=Cn.getStorageSync(Hc);return t&&t.changeToken?Ac({url:"/guide/profile/phone-change/new-code",method:"POST",data:{changeToken:t.changeToken,newPhone:e}}):Promise.reject(new Error("旧手机号验证已失效,请重新验证"))},exports.sendOldPhoneCode=function(e){return Ac({url:"/guide/profile/phone-change/old-code",method:"POST",data:{phone:e}})},exports.sendRegistrationCode=function(e){return Ac({url:"/guide/registration/sms-code",method:"POST",authenticated:!1,data:{phone:e}})},exports.submitCertification=function(e){const t=Cn.getStorageSync($c);return t&&t.guide&&(t.guide.auditStatus="pending",Cn.setStorageSync($c,t)),Promise.resolve({...e,auditStatus:"pending"})},exports.submitFeedback=function(e){return Ac({url:"/guide/feedback",method:"POST",data:{content:e}})},exports.submitGuideRegistration=function(e){const t=na();if(!t||!t.registrationToken)return Promise.reject(new Error("手机号验证已失效,请重新验证"));const n=[oa(e.idFront,t.registrationToken),oa(e.idBack,t.registrationToken),oa(e.guideLicense,t.registrationToken),e.guideCert?oa(e.guideCert,t.registrationToken):Promise.resolve("")];return Promise.all(n).then(([n,o,r,i])=>Ac({url:"/guide/registration/applications",method:"POST",authenticated:!1,data:{realName:e.name,gender:"男"===e.gender?1:2,ageRange:e.age,workYearRange:e.workYear,guideType:e.guideType,teamId:e.teamId,idCardNo:e.idNo,idCardFrontUrl:n,idCardBackUrl:o,guideCertificateUrl:r,qualificationCertificateUrl:i},headers:{"X-Registration-Token":t.registrationToken}})).then(e=>(Cn.removeStorageSync(ta),e))},exports.t=e=>(e=>g(e)?e:null==e?"":p(e)||v(e)&&(e.toString===_||!h(e.toString))?JSON.stringify(e,U,2):String(e))(e),exports.updateGuideOnlineStatus=function(e,t={}){let n=Promise.resolve(e);return"online"===e?n=Ac({url:"/guide/receiving/start",method:"POST",data:t}):"offline"===e&&(n=Ac({url:"/guide/receiving/stop",method:"PUT"})),n.then(()=>Gc(e,t))},exports.uploadGuideAvatar=function(e){return Tc({url:"/guide/profile/avatar",filePath:e}).then(Bc)},exports.upxToPx=function(e){try{return Cn.upx2px(e)}catch(t){return 0}},exports.verifyOldPhone=function(e,t){return Ac({url:"/guide/profile/phone-change/verify-old",method:"POST",data:{phone:e,code:t}}).then(e=>(Cn.setStorageSync(Hc,e),e))},exports.verifyRegistrationPhone=function(e,t){return Ac({url:"/guide/registration/verify-phone",method:"POST",authenticated:!1,data:{phone:e,code:t}}).then(t=>{const n={phone:e,...t};return Cn.setStorageSync(ta,n),n})};
+function e(e,t){const n=new Set(e.split(","));return e=>n.has(e)}const t={},n=[],o=()=>{},r=()=>!1,i=e=>111===e.charCodeAt(0)&&110===e.charCodeAt(1)&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),s=e=>e.startsWith("onUpdate:"),c=Object.assign,a=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},u=Object.prototype.hasOwnProperty,l=(e,t)=>u.call(e,t),p=Array.isArray,d=e=>"[object Map]"===x(e),f=e=>"[object Set]"===x(e),h=e=>"function"==typeof e,g=e=>"string"==typeof e,m=e=>"symbol"==typeof e,v=e=>null!==e&&"object"==typeof e,y=e=>(v(e)||h(e))&&h(e.then)&&h(e.catch),_=Object.prototype.toString,x=e=>_.call(e),b=e=>"[object Object]"===x(e),w=e=>g(e)&&"NaN"!==e&&"-"!==e[0]&&""+parseInt(e,10)===e,S=e(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),$=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},P=/-(\w)/g,k=$(e=>e.replace(P,(e,t)=>t?t.toUpperCase():"")),O=/\B([A-Z])/g,C=$(e=>e.replace(O,"-$1").toLowerCase()),E=$(e=>e.charAt(0).toUpperCase()+e.slice(1)),I=$(e=>e?`on${E(e)}`:""),A=(e,t)=>!Object.is(e,t),T=(e,t)=>{for(let n=0;n<e.length;n++)e[n](t)},N=e=>{const t=parseFloat(e);return isNaN(t)?e:t};function L(e){if(p(e)){const t={};for(let n=0;n<e.length;n++){const o=e[n],r=g(o)?D(o):L(o);if(r)for(const e in r)t[e]=r[e]}return t}if(g(e)||v(e))return e}const R=/;(?![^(]*\))/g,j=/:([^]+)/,M=/\/\*[^]*?\*\//g;function D(e){const t={};return e.replace(M,"").split(R).forEach(e=>{if(e){const n=e.split(j);n.length>1&&(t[n[0].trim()]=n[1].trim())}}),t}function V(e){let t="";if(g(e))t=e;else if(p(e))for(let n=0;n<e.length;n++){const o=V(e[n]);o&&(t+=o+" ")}else if(v(e))for(const n in e)e[n]&&(t+=n+" ");return t.trim()}const B=(e,t)=>t&&t.__v_isRef?B(e,t.value):d(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((e,[t,n],o)=>(e[U(t,o)+" =>"]=n,e),{})}:f(t)?{[`Set(${t.size})`]:[...t.values()].map(e=>U(e))}:m(t)?U(t):!v(t)||p(t)||b(t)?t:String(t),U=(e,t="")=>{var n;return m(e)?`Symbol(${null!=(n=e.description)?n:t})`:e},H="onShow",W="onHide",z="onLaunch",F="onError",G="onThemeChange",q="onPageNotFound",K="onUnhandledRejection",J="onLoad",X="onReady",Z="onUnload",Q="onInit",Y="onSaveExitState",ee="onUploadDouyinVideo",te="onLiveMount",ne="onTitleClick",oe="onResize",re="onBackPress",ie="onPageScroll",se="onTabItemTap",ce="onReachBottom",ae="onPullDownRefresh",ue="onShareTimeline",le="onShareChat",pe="onCopyUrl",de="onAddToFavorites",fe="onShareAppMessage",he="onNavigationBarButtonTap",ge="onNavigationBarSearchInputClicked",me="onNavigationBarSearchInputChanged",ve="onNavigationBarSearchInputConfirmed",ye="onNavigationBarSearchInputFocusChanged",_e="virtualHostId",xe=/:/g;function be(e,t=null){let n;return(...o)=>(e&&(n=e.apply(t,o),e=null),n)}function we(e,t){if(!g(t))return;const n=(t=t.replace(/\[(\d+)\]/g,".$1")).split(".");let o=n[0];return e||(e={}),1===n.length?e[o]:we(e[o],n.slice(1).join("."))}const Se=encodeURIComponent;function $e(e,t=Se){const n=e?Object.keys(e).map(n=>{let o=e[n];return void 0===typeof o||null===o?o="":b(o)&&(o=JSON.stringify(o)),t(n)+"="+t(o)}).filter(e=>e.length>0).join("&"):null;return n?`?${n}`:""}const Pe=[Q,J,H,W,Z,oe,re,ie,se,ce,ae,ue,fe,le,pe,ee,te,ne,de,Y,he,ge,me,ve,ye];const ke=[H,W,z,F,G,q,K,"onExit",Q,J,X,Z,oe,re,ie,se,ce,ae,ue,de,fe,le,pe,ee,te,ne,Y,he,ge,me,ve,ye,"onLastPageBackPress"],Oe=(()=>({onPageScroll:1,onShareAppMessage:2,onShareTimeline:4,onShareChat:8,onCopyUrl:16,onUploadDouyinVideo:32,onLiveMount:64,onTitleClick:128}))();function Ce(e,t,n=!0){return!(n&&!h(t))&&(ke.indexOf(e)>-1||0===e.indexOf("on"))}let Ee;const Ie=[];const Ae=be((e,t)=>t(e)),Te=function(){};Te.prototype={_id:1,on:function(e,t,n){var o=this.e||(this.e={});return(o[e]||(o[e]=[])).push({fn:t,ctx:n,_id:this._id}),this._id++},once:function(e,t,n){var o=this;function r(){o.off(e,r),t.apply(n,arguments)}return r._=t,this.on(e,r,n)},emit:function(e){for(var t=[].slice.call(arguments,1),n=((this.e||(this.e={}))[e]||[]).slice(),o=0,r=n.length;o<r;o++)n[o].fn.apply(n[o].ctx,t);return this},off:function(e,t){var n=this.e||(this.e={}),o=n[e],r=[];if(o&&t){for(var i=o.length-1;i>=0;i--)if(o[i].fn===t||o[i].fn._===t||o[i]._id===t){o.splice(i,1);break}r=o}return r.length?n[e]=r:delete n[e],this}};var Ne=Te;const Le="zh-Hans",Re="zh-Hant",je="en";function Me(e,t){if(!e)return;if("chinese"===(e=(e=e.trim().replace(/_/g,"-")).toLowerCase()))return Le;if(0===e.indexOf("zh"))return e.indexOf("-hans")>-1?Le:e.indexOf("-hant")>-1?Re:(n=e,["-tw","-hk","-mo","-cht"].find(e=>-1!==n.indexOf(e))?Re:Le);var n;const o=function(e,t){return t.find(t=>0===e.indexOf(t))}(e,[je,"fr","es"]);return o||void 0}function De(e){return function(){try{return e.apply(e,arguments)}catch(t){console.error(t)}}}let Ve=1;const Be={};function Ue(e,t,n){if("number"==typeof e){const o=Be[e];if(o)return o.keepAlive||delete Be[e],o.callback(t,n)}return t}const He="success",We="fail",ze="complete";function Fe(e,t={},{beforeAll:n,beforeSuccess:o}={}){b(t)||(t={});const{success:r,fail:i,complete:s}=function(e){const t={};for(const n in e){const o=e[n];h(o)&&(t[n]=De(o),delete e[n])}return t}(t),c=h(r),a=h(i),u=h(s),l=Ve++;return function(e,t,n,o=!1){Be[e]={name:t,keepAlive:o,callback:n}}(l,e,l=>{(l=l||{}).errMsg=function(e,t){return e&&-1!==e.indexOf(":fail")?t+e.substring(e.indexOf(":fail")):t+":ok"}(l.errMsg,e),h(n)&&n(l),l.errMsg===e+":ok"?(h(o)&&o(l,t),c&&r(l)):a&&i(l),u&&s(l)}),l}const Ge="success",qe="fail",Ke="complete",Je={},Xe={};function Ze(e,t){return function(n){return e(n,t)||n}}function Qe(e,t,n){let o=!1;for(let r=0;r<e.length;r++){const i=e[r];if(o)o=Promise.resolve(Ze(i,n));else{const e=i(t,n);if(y(e)&&(o=Promise.resolve(e)),!1===e)return{then(){},catch(){}}}}return o||{then:e=>e(t),catch(){}}}function Ye(e,t={}){return[Ge,qe,Ke].forEach(n=>{const o=e[n];if(!p(o))return;const r=t[n];t[n]=function(e){Qe(o,e,t).then(e=>h(r)&&r(e)||e)}}),t}function et(e,t){const n=[];p(Je.returnValue)&&n.push(...Je.returnValue);const o=Xe[e];return o&&p(o.returnValue)&&n.push(...o.returnValue),n.forEach(e=>{t=e(t)||t}),t}function tt(e){const t=Object.create(null);Object.keys(Je).forEach(e=>{"returnValue"!==e&&(t[e]=Je[e].slice())});const n=Xe[e];return n&&Object.keys(n).forEach(e=>{"returnValue"!==e&&(t[e]=(t[e]||[]).concat(n[e]))}),t}function nt(e,t,n,o){const r=tt(e);if(r&&Object.keys(r).length){if(p(r.invoke)){return Qe(r.invoke,n).then(n=>t(Ye(tt(e),n),...o))}return t(Ye(r,n),...o)}return t(n,...o)}function ot(e,t){return(n={},...o)=>function(e){return!(!b(e)||![He,We,ze].find(t=>h(e[t])))}(n)?et(e,nt(e,t,c({},n),o)):et(e,new Promise((r,i)=>{nt(e,t,c({},n,{success:r,fail:i}),o)}))}function rt(e,t,n,o={}){const r=t+":fail";let i="";return i=n?0===n.indexOf(r)?n:r+" "+n:r,delete o.errCode,Ue(e,c({errMsg:i},o))}function it(e,t,n,o){const r=function(e){e[0]}(t);if(r)return r}function st(e,t,n,o){return n=>{const r=Fe(e,n,o),i=it(0,[n]);return i?rt(r,e,i):t(n,{resolve:t=>function(e,t,n){return Ue(e,c(n||{},{errMsg:t+":ok"}))}(r,e,t),reject:(t,n)=>rt(r,e,function(e){return!e||g(e)?e:e.stack?("undefined"!=typeof globalThis&&globalThis.harmonyChannel||console.error(e.message+"\n"+e.stack),e.message):e}(t),n)})}}function ct(e,t,n,o){return function(e,t){return(...e)=>{const n=it(0,e);if(n)throw new Error(n);return t.apply(null,e)}}(0,t)}let at=!1,ut=0,lt=0;const pt=ct(0,(e,t)=>{if(0===ut&&function(){var e,t;let n,o,r;{const i=(null===(e=wx.getWindowInfo)||void 0===e?void 0:e.call(wx))||wx.getSystemInfoSync(),s=(null===(t=wx.getDeviceInfo)||void 0===t?void 0:t.call(wx))||wx.getSystemInfoSync();n=i.windowWidth,o=i.pixelRatio,r=s.platform}ut=n,lt=o,at="ios"===r}(),0===(e=Number(e)))return 0;let n=e/750*(t||ut);return n<0&&(n=-n),n=Math.floor(n+1e-4),0===n&&(n=1!==lt&&at?.5:1),e<0?-n:n});function dt(e,t){Object.keys(t).forEach(n=>{h(t[n])&&(e[n]=function(e,t){const n=t?e?e.concat(t):p(t)?t:[t]:e;return n?function(e){const t=[];for(let n=0;n<e.length;n++)-1===t.indexOf(e[n])&&t.push(e[n]);return t}(n):n}(e[n],t[n]))})}function ft(e,t){e&&t&&Object.keys(t).forEach(n=>{const o=e[n],r=t[n];p(o)&&h(r)&&a(o,r)})}const ht=ct(0,(e,t)=>{g(e)&&b(t)?dt(Xe[e]||(Xe[e]={}),t):b(e)&&dt(Je,e)}),gt=ct(0,(e,t)=>{g(e)?b(t)?ft(Xe[e],t):delete Xe[e]:b(e)&&ft(Je,e)});const mt=new class{constructor(){this.$emitter=new Ne}on(e,t){return this.$emitter.on(e,t)}once(e,t){return this.$emitter.once(e,t)}off(e,t){e?this.$emitter.off(e,t):this.$emitter.e={}}emit(e,...t){this.$emitter.emit(e,...t)}},vt=ct(0,(e,t)=>(mt.on(e,t),()=>mt.off(e,t))),yt=ct(0,(e,t)=>(mt.once(e,t),()=>mt.off(e,t))),_t=ct(0,(e,t)=>{p(e)||(e=e?[e]:[]),e.forEach(e=>{mt.off(e,t)})}),xt=ct(0,(e,...t)=>{mt.emit(e,...t)});let bt,wt,St;function $t(e){try{return JSON.parse(e)}catch(t){}return e}const Pt=[];function kt(e,t){Pt.forEach(n=>{n(e,t)}),Pt.length=0}const Ot=ot(Ct="getPushClientId",function(e,t,n,o){return st(e,t,0,o)}(Ct,(e,{resolve:t,reject:n})=>{Promise.resolve().then(()=>{void 0===St&&(St=!1,bt="",wt="uniPush is not enabled"),Pt.push((e,o)=>{e?t({cid:e}):n(o)}),void 0!==bt&&kt(bt,wt)})},0,Et));var Ct,Et;const It=[],At=/^\$|__f__|getLocale|setLocale|sendNativeEvent|restoreGlobal|requireGlobal|getCurrentSubNVue|getMenuButtonBoundingClientRect|^report|interceptors|Interceptor$|getSubNVueById|requireNativePlugin|upx2px|rpx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64|getDeviceInfo|getAppBaseInfo|getWindowInfo|getSystemSetting|getAppAuthorizeSetting/,Tt=/^create|Manager$/,Nt=["createBLEConnection"],Lt=["request","downloadFile","uploadFile","connectSocket"],Rt=["createBLEConnection"],jt=/^on|^off/;function Mt(e){return Tt.test(e)&&-1===Nt.indexOf(e)}function Dt(e){return At.test(e)&&-1===Rt.indexOf(e)}function Vt(e){return-1!==Lt.indexOf(e)}function Bt(e){return!(Mt(e)||Dt(e)||function(e){return jt.test(e)&&"onPush"!==e}(e))}function Ut(e,t){return Bt(e)&&h(t)?function(n={},...o){return h(n.success)||h(n.fail)||h(n.complete)?et(e,nt(e,t,c({},n),o)):et(e,new Promise((r,i)=>{nt(e,t,c({},n,{success:r,fail:i}),o)}))}:t}Promise.prototype.finally||(Promise.prototype.finally=function(e){const t=this.constructor;return this.then(n=>t.resolve(e&&e()).then(()=>n),n=>t.resolve(e&&e()).then(()=>{throw n}))});const Ht=["success","fail","cancel","complete"];const Wt=()=>{const e=h(getApp)&&getApp({allowDefault:!0});return e&&e.$vm?e.$vm.$locale:function(){var e;let t="";{const n=(null===(e=wx.getAppBaseInfo)||void 0===e?void 0:e.call(wx))||wx.getSystemInfoSync();t=Me(n&&n.language?n.language:je)||je}return t}()},zt=[];"undefined"!=typeof global&&(global.getLocale=Wt);const Ft="__DC_STAT_UUID";let Gt;function qt(e=wx){return function(t,n){Gt=Gt||e.getStorageSync(Ft),Gt||(Gt=Date.now()+""+Math.floor(1e7*Math.random()),wx.setStorage({key:Ft,data:Gt})),n.deviceId=Gt}}function Kt(e,t){if(e.safeArea){const n=e.safeArea;t.safeAreaInsets={top:n.top,left:n.left,right:e.windowWidth-n.right,bottom:e.screenHeight-n.bottom}}}function Jt(e,t){let n="",o="";switch(n=t,o=e.split(" ")[1]||"",n=n.toLowerCase(),n){case"harmony":case"ohos":case"openharmonyos":case"openharmony":n="harmonyos";break;case"iphone os":n="ios";break;case"mac":case"darwin":n="macos";break;case"windows_nt":n="windows"}return{osName:n,osVersion:o,system:e}}function Xt(e){return"ohos"===(e=e.toLowerCase())&&(e="harmonyos"),e}function Zt(e,t){const n=e.platform||"";let o=e.deviceType||"phone";{const e={ipad:"pad",windows:"pc",mac:"pc",linux:"pc",pc:"pc"},n=Object.keys(e),r=t.toLowerCase();for(let t=0;t<n.length;t++){const i=n[t];if(-1!==r.indexOf(i)){o=e[i];break}}}return"ohos_pc"===n&&(o="pc"),o}function Qt(e){let t=e;return t&&(t=t.toLowerCase()),t}function Yt(e){return Wt?Wt():e}function en(e){let t=e.hostName||"WeChat";return e.environment?t=e.environment:e.host&&e.host.env&&(t=e.host.env),t}const tn={returnValue:(e,t)=>{Kt(e,t),qt()(e,t),function(e,t){const{brand:n="",model:o="",system:r="",language:i="",theme:s,version:a,platform:u,fontSizeSetting:l,SDKVersion:p,pixelRatio:d,deviceOrientation:f}=e,{osName:h,osVersion:g,system:m}=Jt(r,u);let v=a,y=Zt(e,o),_=Qt(n),x=en(e),b=f,w=d,S=p;const $=(i||"").replace(/_/g,"-"),P={appId:"__UNI__F7E10FB",appName:"com.mingdao.guide",appVersion:"1.0.0",appVersionCode:"100",appLanguage:Yt($),uniCompileVersion:"5.12",uniCompilerVersion:"5.12",uniRuntimeVersion:"5.12",uniPlatform:"mp-weixin",deviceBrand:_,deviceModel:o,deviceType:y,devicePixelRatio:w,deviceOrientation:b,osName:h,osVersion:g,hostTheme:s,hostVersion:v,hostLanguage:$,hostName:x,hostSDKVersion:S,hostFontSizeSetting:l,windowTop:0,windowBottom:0,platform:Xt(u),system:m,osLanguage:void 0,osTheme:void 0,ua:void 0,hostPackageName:void 0,browserName:void 0,browserVersion:void 0,isUniAppX:!1};c(t,P)}(e,t)}},nn=tn,on={args(e,t){let n=parseInt(e.current);if(isNaN(n))return;const o=e.urls;if(!p(o))return;const r=o.length;return r?(n<0?n=0:n>=r&&(n=r-1),n>0?(t.current=o[n],t.urls=o.filter((e,t)=>!(t<n)||e!==o[n])):t.current=o[0],{indicator:!1,loop:!1}):void 0}},rn={args(e,t){t.alertText=e.title}},sn={returnValue:(e,t)=>{const{brand:n,model:o,system:r="",platform:i=""}=e;let s=Zt(e,o),a=Qt(n);qt()(e,t);const{osName:u,osVersion:l}=Jt(r,i);t=c(t,{deviceType:s,deviceBrand:a,deviceModel:o,osName:u,osVersion:l,platform:Xt(i)})}},cn={returnValue:(e,t)=>{const{version:n,language:o,SDKVersion:r,theme:i}=e;let s=en(e),a=(o||"").replace(/_/g,"-");const u={appId:"__UNI__F7E10FB",appName:"com.mingdao.guide",appVersion:"1.0.0",appVersionCode:"100",appLanguage:Yt(a),hostVersion:n,hostLanguage:a,hostName:s,hostSDKVersion:r,hostTheme:i,isUniAppX:!1,uniPlatform:"mp-weixin",uniCompileVersion:"5.12",uniCompilerVersion:"5.12",uniRuntimeVersion:"5.12"};c(t,u)}},an={returnValue:(e,t)=>{Kt(e,t),t=c(t,{windowTop:0,windowBottom:0})}},un={args(e){const t=getApp({allowDefault:!0})||{};t.$vm?zr(F,e,t.$vm.$):(wx.$onErrorHandlers||(wx.$onErrorHandlers=[]),wx.$onErrorHandlers.push(e))}},ln={args(e){const t=getApp({allowDefault:!0})||{};if(t.$vm){if(e.__weh){const n=t.$vm.$[F];if(n){const t=n.indexOf(e.__weh);t>-1&&n.splice(t,1)}}}else{if(!wx.$onErrorHandlers)return;const t=wx.$onErrorHandlers.findIndex(t=>t===e);-1!==t&&wx.$onErrorHandlers.splice(t,1)}}},pn={args(){if(wx.__uni_console__){if(wx.__uni_console_warned__)return;wx.__uni_console_warned__=!0,console.warn("开发模式下小程序日志回显会使用 socket 连接,为了避免冲突,建议使用 SocketTask 的方式去管理 WebSocket 或手动关闭日志回显功能。[详情](https://uniapp.dcloud.net.cn/tutorial/run/mp-log.html)")}}},dn=pn,fn={$on:vt,$off:_t,$once:yt,$emit:xt,upx2px:pt,rpx2px:pt,interceptors:{},addInterceptor:ht,removeInterceptor:gt,onCreateVueApp:function(e){if(Ee)return e(Ee);Ie.push(e)},invokeCreateVueAppHook:function(e){Ee=e,Ie.forEach(t=>t(e))},getLocale:Wt,setLocale:e=>{const t=h(getApp)&&getApp();if(!t)return!1;return t.$vm.$locale!==e&&(t.$vm.$locale=e,zt.forEach(t=>t({locale:e})),!0)},onLocaleChange:e=>{-1===zt.indexOf(e)&&zt.push(e)},getPushClientId:Ot,onPushMessage:e=>{-1===It.indexOf(e)&&It.push(e)},offPushMessage:e=>{if(e){const t=It.indexOf(e);t>-1&&It.splice(t,1)}else It.length=0},invokePushCallback:function(e){if("enabled"===e.type)St=!0;else if("clientId"===e.type)bt=e.cid,wt=e.errMsg,kt(bt,e.errMsg);else if("pushMsg"===e.type){const t={type:"receive",data:$t(e.message)};for(let e=0;e<It.length;e++){if((0,It[e])(t),t.stopped)break}}else"click"===e.type&&It.forEach(t=>{t({type:"click",data:$t(e.message)})})},__f__:function(e,t,...n){t&&n.push(t),console[e].apply(console,n)}};const hn=["qy","env","error","version","lanDebug","cloud","serviceMarket","router","worklet","__webpack_require_UNI_MP_PLUGIN__"],gn=["lanDebug","router","worklet"],mn=wx.getLaunchOptionsSync?wx.getLaunchOptionsSync():null;function vn(e){return(!mn||1154!==mn.scene||!gn.includes(e))&&(hn.indexOf(e)>-1||"function"==typeof wx[e])}function yn(){const e={};for(const t in wx)vn(t)&&(e[t]=wx[t]);return"undefined"!=typeof globalThis&&"undefined"==typeof requireMiniProgram&&(globalThis.wx=e),e}const _n=["__route__","__wxExparserNodeId__","__wxWebviewId__"],xn=(bn={oauth:["weixin"],share:["weixin"],payment:["wxpay"],push:["weixin"]},function({service:e,success:t,fail:n,complete:o}){let r;bn[e]?(r={errMsg:"getProvider:ok",service:e,provider:bn[e]},h(t)&&t(r)):(r={errMsg:"getProvider:fail:服务["+e+"]不存在"},h(n)&&n(r)),h(o)&&o(r)});var bn;const wn=yn();wn.getAppBaseInfo&&wn.getAppBaseInfo()||(wn.getAppBaseInfo=wn.getSystemInfoSync),wn.getWindowInfo&&wn.getWindowInfo()||(wn.getWindowInfo=wn.getSystemInfoSync),wn.getDeviceInfo&&wn.getDeviceInfo()||(wn.getDeviceInfo=wn.getSystemInfoSync);let Sn=wn.getAppBaseInfo&&wn.getAppBaseInfo();Sn||(Sn=wn.getSystemInfoSync());const $n=Sn?Sn.host:null,Pn=$n&&"SAAASDK"===$n.env?wn.miniapp.shareVideoMessage:wn.shareVideoMessage;var kn=Object.freeze({__proto__:null,createSelectorQuery:function(){const e=wn.createSelectorQuery(),t=e.in;return e.in=function(e){return e.$scope?t.call(this,e.$scope):t.call(this,function(e){const t=Object.create(null);return _n.forEach(n=>{t[n]=e[n]}),t}(e))},e},getProvider:xn,shareVideoMessage:Pn});const On={args(e,t){e.compressedHeight&&!t.compressHeight&&(t.compressHeight=e.compressedHeight),e.compressedWidth&&!t.compressWidth&&(t.compressWidth=e.compressedWidth)}};var Cn=function(e,t,n=wx){const o=function(e){function t(e,t,n){return function(r){return t(o(e,r,n))}}function n(e,n,o={},r={},i=!1){if(b(n)){const s=!0===i?n:{};h(o)&&(o=o(n,s)||{});for(const c in n)if(l(o,c)){let t=o[c];h(t)&&(t=t(n[c],n,s)),t?g(t)?s[t]=n[c]:b(t)&&(s[t.name?t.name:c]=t.value):console.warn(`微信小程序 ${e} 暂不支持 ${c}`)}else if(-1!==Ht.indexOf(c)){const o=n[c];h(o)&&(s[c]=t(e,o,r))}else i||l(s,c)||(s[c]=n[c]);return s}return h(n)&&(h(o)&&o(n,{}),n=t(e,n,r)),n}function o(t,o,r,i=!1){return h(e.returnValue)&&(o=e.returnValue(t,o)),n(t,o,r,{},i||!1)}return function(t,r){const i=l(e,t);if(!i&&"function"!=typeof wx[t])return r;const s=i||h(e.returnValue)||Mt(t)||Vt(t),c=i||h(r);if(!i&&!r)return function(){console.error(`微信小程序 暂不支持${t}`)};if(!s||!c)return r;const a=e[t];return function(e,r){let i=a||{};h(a)&&(i=a(e));const s=[e=n(t,e,i.args,i.returnValue)];void 0!==r&&s.push(r);const c=wx[i.name||t].apply(wx,s);return(Mt(t)||Vt(t))&&c&&!c.__v_skip&&(c.__v_skip=!0),Dt(t)?o(t,c,i.returnValue,Mt(t)):c}}}(t);return new Proxy({},{get:(t,r)=>l(t,r)?t[r]:l(e,r)?Ut(r,e[r]):l(fn,r)?Ut(r,fn[r]):Ut(r,o(r,n[r]))})}(kn,Object.freeze({__proto__:null,compressImage:On,getAppAuthorizeSetting:{returnValue:function(e,t){const{locationReducedAccuracy:n}=e;t.locationAccuracy="unsupported",!0===n?t.locationAccuracy="reduced":!1===n&&(t.locationAccuracy="full")}},getAppBaseInfo:cn,getDeviceInfo:sn,getSystemInfo:tn,getSystemInfoSync:nn,getWindowInfo:an,offError:ln,onError:un,onSocketMessage:dn,onSocketOpen:pn,previewImage:on,redirectTo:{},showActionSheet:rn}),yn());let En,In;class An{constructor(e=!1){this.detached=e,this._active=!0,this.effects=[],this.cleanups=[],this.parent=En,!e&&En&&(this.index=(En.scopes||(En.scopes=[])).push(this)-1)}get active(){return this._active}run(e){if(this._active){const t=En;try{return En=this,e()}finally{En=t}}}on(){En=this}off(){En=this.parent}stop(e){if(this._active){let t,n;for(t=0,n=this.effects.length;t<n;t++)this.effects[t].stop();for(t=0,n=this.cleanups.length;t<n;t++)this.cleanups[t]();if(this.scopes)for(t=0,n=this.scopes.length;t<n;t++)this.scopes[t].stop(!0);if(!this.detached&&this.parent&&!e){const e=this.parent.scopes.pop();e&&e!==this&&(this.parent.scopes[this.index]=e,e.index=this.index)}this.parent=void 0,this._active=!1}}}class Tn{constructor(e,t,n,o){this.fn=e,this.trigger=t,this.scheduler=n,this.active=!0,this.deps=[],this._dirtyLevel=4,this._trackId=0,this._runnings=0,this._shouldSchedule=!1,this._depsLength=0,function(e,t=En){t&&t.active&&t.effects.push(e)}(this,o)}get dirty(){if(2===this._dirtyLevel||3===this._dirtyLevel){this._dirtyLevel=1,Bn();for(let e=0;e<this._depsLength;e++){const t=this.deps[e];if(t.computed&&(Nn(t.computed),this._dirtyLevel>=4))break}1===this._dirtyLevel&&(this._dirtyLevel=0),Un()}return this._dirtyLevel>=4}set dirty(e){this._dirtyLevel=e?4:0}run(){if(this._dirtyLevel=0,!this.active)return this.fn();let e=Mn,t=In;try{return Mn=!0,In=this,this._runnings++,Ln(this),this.fn()}finally{Rn(this),this._runnings--,In=t,Mn=e}}stop(){var e;this.active&&(Ln(this),Rn(this),null==(e=this.onStop)||e.call(this),this.active=!1)}}function Nn(e){return e.value}function Ln(e){e._trackId++,e._depsLength=0}function Rn(e){if(e.deps.length>e._depsLength){for(let t=e._depsLength;t<e.deps.length;t++)jn(e.deps[t],e);e.deps.length=e._depsLength}}function jn(e,t){const n=e.get(t);void 0!==n&&t._trackId!==n&&(e.delete(t),0===e.size&&e.cleanup())}let Mn=!0,Dn=0;const Vn=[];function Bn(){Vn.push(Mn),Mn=!1}function Un(){const e=Vn.pop();Mn=void 0===e||e}function Hn(){Dn++}function Wn(){for(Dn--;!Dn&&Fn.length;)Fn.shift()()}function zn(e,t,n){if(t.get(e)!==e._trackId){t.set(e,e._trackId);const n=e.deps[e._depsLength];n!==t?(n&&jn(n,e),e.deps[e._depsLength++]=t):e._depsLength++}}const Fn=[];function Gn(e,t,n){Hn();for(const o of e.keys()){let n;o._dirtyLevel<t&&(null!=n?n:n=e.get(o)===o._trackId)&&(o._shouldSchedule||(o._shouldSchedule=0===o._dirtyLevel),o._dirtyLevel=t),o._shouldSchedule&&(null!=n?n:n=e.get(o)===o._trackId)&&(o.trigger(),o._runnings&&!o.allowRecurse||2===o._dirtyLevel||(o._shouldSchedule=!1,o.scheduler&&Fn.push(o.scheduler)))}Wn()}const qn=(e,t)=>{const n=new Map;return n.cleanup=e,n.computed=t,n},Kn=new WeakMap,Jn=Symbol(""),Xn=Symbol("");function Zn(e,t,n){if(Mn&&In){let t=Kn.get(e);t||Kn.set(e,t=new Map);let o=t.get(n);o||t.set(n,o=qn(()=>t.delete(n))),zn(In,o)}}function Qn(e,t,n,o,r,i){const s=Kn.get(e);if(!s)return;let c=[];if("clear"===t)c=[...s.values()];else if("length"===n&&p(e)){const e=Number(o);s.forEach((t,n)=>{("length"===n||!m(n)&&n>=e)&&c.push(t)})}else switch(void 0!==n&&c.push(s.get(n)),t){case"add":p(e)?w(n)&&c.push(s.get("length")):(c.push(s.get(Jn)),d(e)&&c.push(s.get(Xn)));break;case"delete":p(e)||(c.push(s.get(Jn)),d(e)&&c.push(s.get(Xn)));break;case"set":d(e)&&c.push(s.get(Jn))}Hn();for(const a of c)a&&Gn(a,4);Wn()}const Yn=e("__proto__,__v_isRef,__isVue"),eo=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>"arguments"!==e&&"caller"!==e).map(e=>Symbol[e]).filter(m)),to=no();function no(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...e){const n=Wo(this);for(let t=0,r=this.length;t<r;t++)Zn(n,0,t+"");const o=n[t](...e);return-1===o||!1===o?n[t](...e.map(Wo)):o}}),["push","pop","shift","unshift","splice"].forEach(t=>{e[t]=function(...e){Bn(),Hn();const n=Wo(this)[t].apply(this,e);return Wn(),Un(),n}}),e}function oo(e){const t=Wo(this);return Zn(t,0,e),t.hasOwnProperty(e)}class ro{constructor(e=!1,t=!1){this._isReadonly=e,this._isShallow=t}get(e,t,n){const o=this._isReadonly,r=this._isShallow;if("__v_isReactive"===t)return!o;if("__v_isReadonly"===t)return o;if("__v_isShallow"===t)return r;if("__v_raw"===t)return n===(o?r?Ro:Lo:r?No:To).get(e)||Object.getPrototypeOf(e)===Object.getPrototypeOf(n)?e:void 0;const i=p(e);if(!o){if(i&&l(to,t))return Reflect.get(to,t,n);if("hasOwnProperty"===t)return oo}const s=Reflect.get(e,t,n);return(m(t)?eo.has(t):Yn(t))?s:(o||Zn(e,0,t),r?s:Xo(s)?i&&w(t)?s:s.value:v(s)?o?Do(s):Mo(s):s)}}class io extends ro{constructor(e=!1){super(!1,e)}set(e,t,n,o){let r=e[t];if(!this._isShallow){const t=Uo(r);if(Ho(n)||Uo(n)||(r=Wo(r),n=Wo(n)),!p(e)&&Xo(r)&&!Xo(n))return!t&&(r.value=n,!0)}const i=p(e)&&w(t)?Number(t)<e.length:l(e,t),s=Reflect.set(e,t,n,o);return e===Wo(o)&&(i?A(n,r)&&Qn(e,"set",t,n):Qn(e,"add",t,n)),s}deleteProperty(e,t){const n=l(e,t);e[t];const o=Reflect.deleteProperty(e,t);return o&&n&&Qn(e,"delete",t,void 0),o}has(e,t){const n=Reflect.has(e,t);return m(t)&&eo.has(t)||Zn(e,0,t),n}ownKeys(e){return Zn(e,0,p(e)?"length":Jn),Reflect.ownKeys(e)}}class so extends ro{constructor(e=!1){super(!0,e)}set(e,t){return!0}deleteProperty(e,t){return!0}}const co=new io,ao=new so,uo=new io(!0),lo=e=>e,po=e=>Reflect.getPrototypeOf(e);function fo(e,t,n=!1,o=!1){const r=Wo(e=e.__v_raw),i=Wo(t);n||(A(t,i)&&Zn(r,0,t),Zn(r,0,i));const{has:s}=po(r),c=o?lo:n?Go:Fo;return s.call(r,t)?c(e.get(t)):s.call(r,i)?c(e.get(i)):void(e!==r&&e.get(t))}function ho(e,t=!1){const n=this.__v_raw,o=Wo(n),r=Wo(e);return t||(A(e,r)&&Zn(o,0,e),Zn(o,0,r)),e===r?n.has(e):n.has(e)||n.has(r)}function go(e,t=!1){return e=e.__v_raw,!t&&Zn(Wo(e),0,Jn),Reflect.get(e,"size",e)}function mo(e){e=Wo(e);const t=Wo(this);return po(t).has.call(t,e)||(t.add(e),Qn(t,"add",e,e)),this}function vo(e,t){t=Wo(t);const n=Wo(this),{has:o,get:r}=po(n);let i=o.call(n,e);i||(e=Wo(e),i=o.call(n,e));const s=r.call(n,e);return n.set(e,t),i?A(t,s)&&Qn(n,"set",e,t):Qn(n,"add",e,t),this}function yo(e){const t=Wo(this),{has:n,get:o}=po(t);let r=n.call(t,e);r||(e=Wo(e),r=n.call(t,e)),o&&o.call(t,e);const i=t.delete(e);return r&&Qn(t,"delete",e,void 0),i}function _o(){const e=Wo(this),t=0!==e.size,n=e.clear();return t&&Qn(e,"clear",void 0,void 0),n}function xo(e,t){return function(n,o){const r=this,i=r.__v_raw,s=Wo(i),c=t?lo:e?Go:Fo;return!e&&Zn(s,0,Jn),i.forEach((e,t)=>n.call(o,c(e),c(t),r))}}function bo(e,t,n){return function(...o){const r=this.__v_raw,i=Wo(r),s=d(i),c="entries"===e||e===Symbol.iterator&&s,a="keys"===e&&s,u=r[e](...o),l=n?lo:t?Go:Fo;return!t&&Zn(i,0,a?Xn:Jn),{next(){const{value:e,done:t}=u.next();return t?{value:e,done:t}:{value:c?[l(e[0]),l(e[1])]:l(e),done:t}},[Symbol.iterator](){return this}}}}function wo(e){return function(...t){return"delete"!==e&&("clear"===e?void 0:this)}}function So(){const e={get(e){return fo(this,e)},get size(){return go(this)},has:ho,add:mo,set:vo,delete:yo,clear:_o,forEach:xo(!1,!1)},t={get(e){return fo(this,e,!1,!0)},get size(){return go(this)},has:ho,add:mo,set:vo,delete:yo,clear:_o,forEach:xo(!1,!0)},n={get(e){return fo(this,e,!0)},get size(){return go(this,!0)},has(e){return ho.call(this,e,!0)},add:wo("add"),set:wo("set"),delete:wo("delete"),clear:wo("clear"),forEach:xo(!0,!1)},o={get(e){return fo(this,e,!0,!0)},get size(){return go(this,!0)},has(e){return ho.call(this,e,!0)},add:wo("add"),set:wo("set"),delete:wo("delete"),clear:wo("clear"),forEach:xo(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(r=>{e[r]=bo(r,!1,!1),n[r]=bo(r,!0,!1),t[r]=bo(r,!1,!0),o[r]=bo(r,!0,!0)}),[e,n,t,o]}const[$o,Po,ko,Oo]=So();function Co(e,t){const n=t?e?Oo:ko:e?Po:$o;return(t,o,r)=>"__v_isReactive"===o?!e:"__v_isReadonly"===o?e:"__v_raw"===o?t:Reflect.get(l(n,o)&&o in t?n:t,o,r)}const Eo={get:Co(!1,!1)},Io={get:Co(!1,!0)},Ao={get:Co(!0,!1)},To=new WeakMap,No=new WeakMap,Lo=new WeakMap,Ro=new WeakMap;function jo(e){return e.__v_skip||!Object.isExtensible(e)?0:function(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}((e=>x(e).slice(8,-1))(e))}function Mo(e){return Uo(e)?e:Vo(e,!1,co,Eo,To)}function Do(e){return Vo(e,!0,ao,Ao,Lo)}function Vo(e,t,n,o,r){if(!v(e))return e;if(e.__v_raw&&(!t||!e.__v_isReactive))return e;const i=r.get(e);if(i)return i;const s=jo(e);if(0===s)return e;const c=new Proxy(e,2===s?o:n);return r.set(e,c),c}function Bo(e){return Uo(e)?Bo(e.__v_raw):!(!e||!e.__v_isReactive)}function Uo(e){return!(!e||!e.__v_isReadonly)}function Ho(e){return!(!e||!e.__v_isShallow)}function Wo(e){const t=e&&e.__v_raw;return t?Wo(t):e}function zo(e){return Object.isExtensible(e)&&((e,t,n)=>{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})})(e,"__v_skip",!0),e}const Fo=e=>v(e)?Mo(e):e,Go=e=>v(e)?Do(e):e;class qo{constructor(e,t,n,o){this.getter=e,this._setter=t,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this.effect=new Tn(()=>e(this._value),()=>Jo(this,2===this.effect._dirtyLevel?2:3)),this.effect.computed=this,this.effect.active=this._cacheable=!o,this.__v_isReadonly=n}get value(){const e=Wo(this);return e._cacheable&&!e.effect.dirty||!A(e._value,e._value=e.effect.run())||Jo(e,4),Ko(e),e.effect._dirtyLevel>=2&&Jo(e,2),e._value}set value(e){this._setter(e)}get _dirty(){return this.effect.dirty}set _dirty(e){this.effect.dirty=e}}function Ko(e){var t;Mn&&In&&(e=Wo(e),zn(In,null!=(t=e.dep)?t:e.dep=qn(()=>e.dep=void 0,e instanceof qo?e:void 0)))}function Jo(e,t=4,n){const o=(e=Wo(e)).dep;o&&Gn(o,t)}function Xo(e){return!(!e||!0!==e.__v_isRef)}function Zo(e){return function(e,t){if(Xo(e))return e;return new Qo(e,t)}(e,!1)}class Qo{constructor(e,t){this.__v_isShallow=t,this.dep=void 0,this.__v_isRef=!0,this._rawValue=t?e:Wo(e),this._value=t?e:Fo(e)}get value(){return Ko(this),this._value}set value(e){const t=this.__v_isShallow||Ho(e)||Uo(e);e=t?e:Wo(e),A(e,this._rawValue)&&(this._rawValue=e,this._value=t?e:Fo(e),Jo(this,4))}}function Yo(e){return Xo(e)?e.value:e}const er={get:(e,t,n)=>Yo(Reflect.get(e,t,n)),set:(e,t,n,o)=>{const r=e[t];return Xo(r)&&!Xo(n)?(r.value=n,!0):Reflect.set(e,t,n,o)}};function tr(e){return Bo(e)?e:new Proxy(e,er)}function nr(e,t,n,o){try{return o?e(...o):e()}catch(r){rr(r,t,n)}}function or(e,t,n,o){if(h(e)){const r=nr(e,t,n,o);return r&&y(r)&&r.catch(e=>{rr(e,t,n)}),r}const r=[];for(let i=0;i<e.length;i++)r.push(or(e[i],t,n,o));return r}function rr(e,t,n,o=!0){const r=t?t.vnode:null;if(t){let o=t.parent;const r=t.proxy,i=`https://vuejs.org/error-reference/#runtime-${n}`;for(;o;){const t=o.ec;if(t)for(let n=0;n<t.length;n++)if(!1===t[n](e,r,i))return;o=o.parent}const s=t.appContext.config.errorHandler;if(s)return void nr(s,null,10,[e,r,i])}ir(e,n,r,o)}function ir(e,t,n,o=!0){console.error(e)}let sr=!1,cr=!1;const ar=[];let ur=0;const lr=[];let pr=null,dr=0;const fr=Promise.resolve();let hr=null;function gr(e){const t=hr||fr;return e?t.then(this?e.bind(this):e):t}function mr(e){ar.length&&ar.includes(e,sr&&e.allowRecurse?ur+1:ur)||(null==e.id?ar.push(e):ar.splice(function(e){let t=ur+1,n=ar.length;for(;t<n;){const o=t+n>>>1,r=ar[o],i=xr(r);i<e||i===e&&r.pre?t=o+1:n=o}return t}(e.id),0,e),vr())}function vr(){sr||cr||(cr=!0,hr=fr.then(wr))}function yr(e){p(e)?lr.push(...e):pr&&pr.includes(e,e.allowRecurse?dr+1:dr)||lr.push(e),vr()}function _r(e,t,n=(sr?ur+1:0)){for(;n<ar.length;n++){const e=ar[n];e&&e.pre&&(ar.splice(n,1),n--,e())}}const xr=e=>null==e.id?1/0:e.id,br=(e,t)=>{const n=xr(e)-xr(t);if(0===n){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function wr(e){cr=!1,sr=!0,ar.sort(br);try{for(ur=0;ur<ar.length;ur++){const e=ar[ur];e&&!1!==e.active&&nr(e,null,14)}}finally{ur=0,ar.length=0,function(){if(lr.length){const e=[...new Set(lr)].sort((e,t)=>xr(e)-xr(t));if(lr.length=0,pr)return void pr.push(...e);for(pr=e,dr=0;dr<pr.length;dr++)pr[dr]();pr=null,dr=0}}(),sr=!1,hr=null,(ar.length||lr.length)&&wr()}}function Sr(e,n,...o){if(e.isUnmounted)return;const r=e.vnode.props||t;let i=o;const s=n.startsWith("update:"),c=s&&n.slice(7);if(c&&c in r){const e=`${"modelValue"===c?"model":c}Modifiers`,{number:n,trim:s}=r[e]||t;s&&(i=o.map(e=>g(e)?e.trim():e)),n&&(i=o.map(N))}let a,u=r[a=I(n)]||r[a=I(k(n))];!u&&s&&(u=r[a=I(C(n))]),u&&or(u,e,6,i);const l=r[a+"Once"];if(l){if(e.emitted){if(e.emitted[a])return}else e.emitted={};e.emitted[a]=!0,or(l,e,6,i)}}function $r(e,t,n=!1){const o=t.emitsCache,r=o.get(e);if(void 0!==r)return r;const i=e.emits;let s={},a=!1;if(!h(e)){const o=e=>{const n=$r(e,t,!0);n&&(a=!0,c(s,n))};!n&&t.mixins.length&&t.mixins.forEach(o),e.extends&&o(e.extends),e.mixins&&e.mixins.forEach(o)}return i||a?(p(i)?i.forEach(e=>s[e]=null):c(s,i),v(e)&&o.set(e,s),s):(v(e)&&o.set(e,null),null)}function Pr(e,t){return!(!e||!i(t))&&(t=t.slice(2).replace(/Once$/,""),l(e,t[0].toLowerCase()+t.slice(1))||l(e,C(t))||l(e,t))}let kr=null;function Or(e){const t=kr;return kr=e,e&&e.type.__scopeId,t}function Cr(e,t){return e&&(e[t]||e[k(t)]||e[E(k(t))])}const Er={};function Ir(e,t,n){return Ar(e,t,n)}function Ar(e,n,{immediate:r,deep:i,flush:s,once:c,onTrack:u,onTrigger:l}=t){if(n&&c){const e=n;n=(...t)=>{e(...t),P()}}const d=Ni,f=e=>!0===i?e:Lr(e,!1===i?1:void 0);let g,m,v=!1,y=!1;if(Xo(e)?(g=()=>e.value,v=Ho(e)):Bo(e)?(g=()=>f(e),v=!0):p(e)?(y=!0,v=e.some(e=>Bo(e)||Ho(e)),g=()=>e.map(e=>Xo(e)?e.value:Bo(e)?f(e):h(e)?nr(e,d,2):void 0)):g=h(e)?n?()=>nr(e,d,2):()=>(m&&m(),or(e,d,3,[_])):o,n&&i){const e=g;g=()=>Lr(e())}let _=e=>{m=S.onStop=()=>{nr(e,d,4),m=S.onStop=void 0}},x=y?new Array(e.length).fill(Er):Er;const b=()=>{if(S.active&&S.dirty)if(n){const e=S.run();(i||v||(y?e.some((e,t)=>A(e,x[t])):A(e,x)))&&(m&&m(),or(n,d,3,[e,x===Er?void 0:y&&x[0]===Er?[]:x,_]),x=e)}else S.run()};let w;b.allowRecurse=!!n,"sync"===s?w=b:"post"===s?w=()=>Ci(b,d&&d.suspense):(b.pre=!0,d&&(b.id=d.uid),w=()=>mr(b));const S=new Tn(g,o,w),$=En,P=()=>{S.stop(),$&&a($.effects,S)};return n?r?b():x=S.run():"post"===s?Ci(S.run.bind(S),d&&d.suspense):S.run(),P}function Tr(e,t,n){const o=this.proxy,r=g(e)?e.includes(".")?Nr(o,e):()=>o[e]:e.bind(o,o);let i;h(t)?i=t:(i=t.handler,n=t);const s=Mi(this),c=Ar(r,i.bind(o),n);return s(),c}function Nr(e,t){const n=t.split(".");return()=>{let t=e;for(let e=0;e<n.length&&t;e++)t=t[n[e]];return t}}function Lr(e,t,n=0,o){if(!v(e)||e.__v_skip)return e;if(t&&t>0){if(n>=t)return e;n++}if((o=o||new Set).has(e))return e;if(o.add(e),Xo(e))Lr(e.value,t,n,o);else if(p(e))for(let r=0;r<e.length;r++)Lr(e[r],t,n,o);else if(f(e)||d(e))e.forEach(e=>{Lr(e,t,n,o)});else if(b(e))for(const r in e)Lr(e[r],t,n,o);return e}function Rr(){return{app:null,config:{isNativeTag:r,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let jr=0;let Mr=null;function Dr(e,t,n=!1){const o=Ni||kr;if(o||Mr){const r=o?null==o.parent?o.vnode.appContext&&o.vnode.appContext.provides:o.parent.provides:Mr._context.provides;if(r&&e in r)return r[e];if(arguments.length>1)return n&&h(t)?t.call(o&&o.proxy):t}}const Vr=e=>e.type.__isKeepAlive;function Br(e,t){Hr(e,"a",t)}function Ur(e,t){Hr(e,"da",t)}function Hr(e,t,n=Ni){const o=e.__wdc||(e.__wdc=()=>{let t=n;for(;t;){if(t.isDeactivated)return;t=t.parent}return e()});if(zr(t,o,n),n){let e=n.parent;for(;e&&e.parent;)Vr(e.parent.vnode)&&Wr(o,t,n,e),e=e.parent}}function Wr(e,t,n,o){const r=zr(t,e,o,!0);Zr(()=>{a(o[t],r)},n)}function zr(e,t,n=Ni,o=!1){if(n){(function(e){return Pe.indexOf(e)>-1})(e)&&(n=n.root);const r=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{if(n.isUnmounted)return;Bn();const r=Mi(n),i=or(t,n,e,o);return r(),Un(),i});return o?r.unshift(i):r.push(i),i}}const Fr=e=>(t,n=Ni)=>(!Bi||"sp"===e)&&zr(e,(...e)=>t(...e),n),Gr=Fr("bm"),qr=Fr("m"),Kr=Fr("bu"),Jr=Fr("u"),Xr=Fr("bum"),Zr=Fr("um"),Qr=Fr("sp"),Yr=Fr("rtg"),ei=Fr("rtc");function ti(e,t=Ni){zr("ec",e,t)}const ni=e=>e?Vi(e)?Wi(e)||e.proxy:ni(e.parent):null;const oi=c(Object.create(null),{$:function(e){return e},$el:e=>e.__$el||(e.__$el={}),$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>ni(e.parent),$root:e=>ni(e.root),$emit:e=>e.emit,$options:e=>pi(e),$forceUpdate:e=>e.f||(e.f=()=>{e.effect.dirty=!0,mr(e.update)}),$watch:e=>Tr.bind(e)}),ri=(e,n)=>e!==t&&!e.__isScriptSetup&&l(e,n),ii={get({_:e},n){const{ctx:o,setupState:r,data:i,props:s,accessCache:c,type:a,appContext:u}=e;let p;if("$"!==n[0]){const a=c[n];if(void 0!==a)switch(a){case 1:return r[n];case 2:return i[n];case 4:return o[n];case 3:return s[n]}else{if(ri(r,n))return c[n]=1,r[n];if(i!==t&&l(i,n))return c[n]=2,i[n];if((p=e.propsOptions[0])&&l(p,n))return c[n]=3,s[n];if(o!==t&&l(o,n))return c[n]=4,o[n];ci&&(c[n]=0)}}const d=oi[n];let f,h;return d?("$attrs"===n&&Zn(e,0,n),d(e)):(f=a.__cssModules)&&(f=f[n])?f:o!==t&&l(o,n)?(c[n]=4,o[n]):e.exposed&&l(e.exposed,n)?e.exposed[n]:(h=u.config.globalProperties,l(h,n)?h[n]:void 0)},set({_:e},n,o){const{data:r,setupState:i,ctx:s}=e;return ri(i,n)?(i[n]=o,!0):r!==t&&l(r,n)?(r[n]=o,!0):!l(e.props,n)&&(("$"!==n[0]||!(n.slice(1)in e))&&(s[n]=o,!0))},has({_:{data:e,setupState:n,accessCache:o,ctx:r,appContext:i,propsOptions:s}},c){let a;return!!o[c]||e!==t&&l(e,c)||ri(n,c)||(a=s[0])&&l(a,c)||l(r,c)||l(oi,c)||l(i.config.globalProperties,c)},defineProperty(e,t,n){return null!=n.get?e._.accessCache[t]=0:l(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function si(e){return p(e)?e.reduce((e,t)=>(e[t]=null,e),{}):e}let ci=!0;function ai(e){const t=pi(e),n=e.proxy,r=e.ctx;ci=!1,t.beforeCreate&&ui(t.beforeCreate,e,"bc");const{data:i,computed:s,methods:c,watch:a,provide:u,inject:l,created:d,beforeMount:f,mounted:g,beforeUpdate:m,updated:y,activated:_,deactivated:x,beforeDestroy:b,beforeUnmount:w,destroyed:S,unmounted:$,render:P,renderTracked:k,renderTriggered:O,errorCaptured:C,serverPrefetch:E,expose:I,inheritAttrs:A,components:T,directives:N,filters:L}=t;if(l&&function(e,t){p(e)&&(e=gi(e));for(const n in e){const o=e[n];let r;r=v(o)?"default"in o?Dr(o.from||n,o.default,!0):Dr(o.from||n):Dr(o),Xo(r)?Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:()=>r.value,set:e=>r.value=e}):t[n]=r}}(l,r),c)for(const o in c){const e=c[o];h(e)&&(r[o]=e.bind(n))}if(i){const t=i.call(n,n);v(t)&&(e.data=Mo(t))}if(ci=!0,s)for(const p in s){const e=s[p],t=h(e)?e.bind(n,n):h(e.get)?e.get.bind(n,n):o,i=!h(e)&&h(e.set)?e.set.bind(n):o,c=zi({get:t,set:i});Object.defineProperty(r,p,{enumerable:!0,configurable:!0,get:()=>c.value,set:e=>c.value=e})}if(a)for(const o in a)li(a[o],r,n,o);function R(e,t){p(t)?t.forEach(t=>e(t.bind(n))):t&&e(t.bind(n))}if(function(){if(u){const e=h(u)?u.call(n):u;Reflect.ownKeys(e).forEach(t=>{!function(e,t){if(Ni){let n=Ni.provides;const o=Ni.parent&&Ni.parent.provides;o===n&&(n=Ni.provides=Object.create(o)),n[e]=t,"app"===Ni.type.mpType&&Ni.appContext.app.provide(e,t)}}(t,e[t])})}}(),d&&ui(d,e,"c"),R(Gr,f),R(qr,g),R(Kr,m),R(Jr,y),R(Br,_),R(Ur,x),R(ti,C),R(ei,k),R(Yr,O),R(Xr,w),R(Zr,$),R(Qr,E),p(I))if(I.length){const t=e.exposed||(e.exposed={});I.forEach(e=>{Object.defineProperty(t,e,{get:()=>n[e],set:t=>n[e]=t})})}else e.exposed||(e.exposed={});P&&e.render===o&&(e.render=P),null!=A&&(e.inheritAttrs=A),T&&(e.components=T),N&&(e.directives=N),e.ctx.$onApplyOptions&&e.ctx.$onApplyOptions(t,e,n)}function ui(e,t,n){or(p(e)?e.map(e=>e.bind(t.proxy)):e.bind(t.proxy),t,n)}function li(e,t,n,o){const r=o.includes(".")?Nr(n,o):()=>n[o];if(g(e)){const n=t[e];h(n)&&Ir(r,n)}else if(h(e))Ir(r,e.bind(n));else if(v(e))if(p(e))e.forEach(e=>li(e,t,n,o));else{const o=h(e.handler)?e.handler.bind(n):t[e.handler];h(o)&&Ir(r,o,e)}}function pi(e){const t=e.type,{mixins:n,extends:o}=t,{mixins:r,optionsCache:i,config:{optionMergeStrategies:s}}=e.appContext,c=i.get(t);let a;return c?a=c:r.length||n||o?(a={},r.length&&r.forEach(e=>di(a,e,s,!0)),di(a,t,s)):a=t,v(t)&&i.set(t,a),a}function di(e,t,n,o=!1){const{mixins:r,extends:i}=t;i&&di(e,i,n,!0),r&&r.forEach(t=>di(e,t,n,!0));for(const s in t)if(o&&"expose"===s);else{const o=fi[s]||n&&n[s];e[s]=o?o(e[s],t[s]):t[s]}return e}const fi={data:hi,props:yi,emits:yi,methods:vi,computed:vi,beforeCreate:mi,created:mi,beforeMount:mi,mounted:mi,beforeUpdate:mi,updated:mi,beforeDestroy:mi,beforeUnmount:mi,destroyed:mi,unmounted:mi,activated:mi,deactivated:mi,errorCaptured:mi,serverPrefetch:mi,components:vi,directives:vi,watch:function(e,t){if(!e)return t;if(!t)return e;const n=c(Object.create(null),e);for(const o in t)n[o]=mi(e[o],t[o]);return n},provide:hi,inject:function(e,t){return vi(gi(e),gi(t))}};function hi(e,t){return t?e?function(){return c(h(e)?e.call(this,this):e,h(t)?t.call(this,this):t)}:t:e}function gi(e){if(p(e)){const t={};for(let n=0;n<e.length;n++)t[e[n]]=e[n];return t}return e}function mi(e,t){return e?[...new Set([].concat(e,t))]:t}function vi(e,t){return e?c(Object.create(null),e,t):t}function yi(e,t){return e?p(e)&&p(t)?[...new Set([...e,...t])]:c(Object.create(null),si(e),si(null!=t?t:{})):t}function _i(e,t,n,o=!1){const r={},i={};e.propsDefaults=Object.create(null),xi(e,t,r,i);for(const s in e.propsOptions[0])s in r||(r[s]=void 0);n?e.props=o?r:Vo(r,!1,uo,Io,No):e.type.props?e.props=r:e.props=i,e.attrs=i}function xi(e,n,o,r){const[i,s]=e.propsOptions;let c,a=!1;if(n)for(let t in n){if(S(t))continue;const u=n[t];let p;i&&l(i,p=k(t))?s&&s.includes(p)?(c||(c={}))[p]=u:o[p]=u:Pr(e.emitsOptions,t)||t in r&&u===r[t]||(r[t]=bi(e,t,u),a=!0)}if(s){const n=Wo(o),r=c||t;for(let t=0;t<s.length;t++){const c=s[t];o[c]=wi(i,n,c,r[c],e,!l(r,c))}}return a}function bi(e,t,n){return n}function wi(e,t,n,o,r,i){const s=function(e,t,n,o,r,i){const s=e[n];if(null!=s){const e=l(s,"default");if(e&&void 0===o){const e=s.default;if(s.type!==Function&&!s.skipFactory&&h(e)){const{propsDefaults:i}=r;if(n in i)o=i[n];else{const s=Mi(r);o=i[n]=e.call(null,t),s()}}else o=e}s[0]&&(i&&!e?o=!1:!s[1]||""!==o&&o!==C(n)||(o=!0))}return o}(e,t,n,o,r,i);return s}function Si(e,o,r=!1){const i=o.propsCache,s=i.get(e);if(s)return s;const a=e.props,u={},d=[];let f=!1;if(!h(e)){const t=e=>{f=!0;const[t,n]=Si(e,o,!0);c(u,t),n&&d.push(...n)};!r&&o.mixins.length&&o.mixins.forEach(t),e.extends&&t(e.extends),e.mixins&&e.mixins.forEach(t)}if(!a&&!f)return v(e)&&i.set(e,n),n;if(p(a))for(let n=0;n<a.length;n++){const e=k(a[n]);$i(e)&&(u[e]=t)}else if(a)for(const t in a){const e=k(t);if($i(e)){const n=a[t],o=u[e]=p(n)||h(n)?{type:n}:c({},n);if(o){const t=Oi(Boolean,o.type),n=Oi(String,o.type);o[0]=t>-1,o[1]=n<0||t<n,(t>-1||l(o,"default"))&&d.push(e)}}}const g=[u,d];return v(e)&&i.set(e,g),g}function $i(e){return"$"!==e[0]&&!S(e)}function Pi(e){if(null===e)return"null";if("function"==typeof e)return e.name||"";if("object"==typeof e){return e.constructor&&e.constructor.name||""}return""}function ki(e,t){return Pi(e)===Pi(t)}function Oi(e,t){return p(t)?t.findIndex(t=>ki(t,e)):h(t)&&ki(t,e)?0:-1}const Ci=yr;function Ei(e){return e?Bo(t=e)||Uo(t)||"__vInternal"in e?c({},e):e:null;var t}const Ii=Rr();let Ai=0;function Ti(e,n,o){const r=e.type,i=(n?n.appContext:e.appContext)||Ii,s={uid:Ai++,vnode:e,type:r,parent:n,appContext:i,root:null,next:null,subTree:null,effect:null,update:null,scope:new An(!0),render:null,proxy:null,exposed:null,exposeProxy:null,withProxy:null,provides:n?n.provides:Object.create(i.provides),accessCache:null,renderCache:[],components:null,directives:null,propsOptions:Si(r,i),emitsOptions:$r(r,i),emit:null,emitted:null,propsDefaults:t,inheritAttrs:r.inheritAttrs,ctx:t,data:t,props:t,attrs:t,slots:t,refs:t,setupState:t,setupContext:null,attrsProxy:null,slotsProxy:null,suspense:o,suspenseId:o?o.pendingId:0,asyncDep:null,asyncResolved:!1,isMounted:!1,isUnmounted:!1,isDeactivated:!1,bc:null,c:null,bm:null,m:null,bu:null,u:null,um:null,bum:null,da:null,a:null,rtg:null,rtc:null,ec:null,sp:null,$uniElements:new Map,$templateUniElementRefs:[],$templateUniElementStyles:{},$eS:{},$eA:{}};return s.ctx={_:s},s.root=n?n.root:s,s.emit=Sr.bind(null,s),e.ce&&e.ce(s),s}let Ni=null;const Li=()=>Ni||kr;let Ri,ji;Ri=e=>{Ni=e},ji=e=>{Bi=e};const Mi=e=>{const t=Ni;return Ri(e),e.scope.on(),()=>{e.scope.off(),Ri(t)}},Di=()=>{Ni&&Ni.scope.off(),Ri(null)};function Vi(e){return 4&e.vnode.shapeFlag}let Bi=!1;function Ui(e,t=!1){t&&ji(t);const{props:n}=e.vnode,o=Vi(e);_i(e,n,o,t);const r=o?function(e){const t=e.type;e.accessCache=Object.create(null),e.proxy=zo(new Proxy(e.ctx,ii));const{setup:n}=t;if(n){const t=e.setupContext=n.length>1?function(e){const t=t=>{e.exposed=t||{}};return{get attrs(){return function(e){return e.attrsProxy||(e.attrsProxy=new Proxy(e.attrs,{get:(t,n)=>(Zn(e,0,"$attrs"),t[n])}))}(e)},slots:e.slots,emit:e.emit,expose:t}}(e):null,o=Mi(e);Bn();const r=nr(n,e,0,[e.props,t]);Un(),o(),y(r)?r.then(Di,Di):function(e,t){h(t)?e.render=t:v(t)&&(e.setupState=tr(t));Hi(e)}(e,r)}else Hi(e)}(e):void 0;return t&&ji(!1),r}function Hi(e,t,n){const r=e.type;e.render||(e.render=r.render||o);{const t=Mi(e);Bn();try{ai(e)}finally{Un(),t()}}}function Wi(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(tr(zo(e.exposed)),{get:(t,n)=>n in t?t[n]:e.proxy[n],has:(e,t)=>t in e||t in oi}))}const zi=(e,t)=>{const n=function(e,t,n=!1){let r,i;const s=h(e);return s?(r=e,i=o):(r=e.get,i=e.set),new qo(r,i,s||!i,n)}(e,0,Bi);return n},Fi="3.4.21";function Gi(e){return Yo(e)}const qi="[object Array]",Ki="[object Object]";function Ji(e,t){const n={};return Xi(e,t),Zi(e,t,"",n),n}function Xi(e,t){if((e=Gi(e))===t)return;const n=x(e),o=x(t);if(n==Ki&&o==Ki)for(let r in t){const n=e[r];void 0===n?e[r]=null:Xi(n,t[r])}else n==qi&&o==qi&&e.length>=t.length&&t.forEach((t,n)=>{Xi(e[n],t)})}function Zi(e,t,n,o){if((e=Gi(e))===t)return;const r=x(e),i=x(t);if(r==Ki)if(i!=Ki||Object.keys(e).length<Object.keys(t).length)Qi(o,n,e);else for(let s in e){const r=Gi(e[s]),i=t[s],c=x(r),a=x(i);if(c!=qi&&c!=Ki)r!=i&&Qi(o,(""==n?"":n+".")+s,r);else if(c==qi)a!=qi||r.length<i.length?Qi(o,(""==n?"":n+".")+s,r):r.forEach((e,t)=>{Zi(e,i[t],(""==n?"":n+".")+s+"["+t+"]",o)});else if(c==Ki)if(a!=Ki||Object.keys(r).length<Object.keys(i).length)Qi(o,(""==n?"":n+".")+s,r);else for(let e in r)Zi(r[e],i[e],(""==n?"":n+".")+s+"."+e,o)}else r==qi?i!=qi||e.length<t.length?Qi(o,n,e):e.forEach((e,r)=>{Zi(e,t[r],n+"["+r+"]",o)}):Qi(o,n,e)}function Qi(e,t,n){e[t]=n}function Yi(e){const t=e.ctx.__next_tick_callbacks;if(t&&t.length){const e=t.slice(0);t.length=0;for(let t=0;t<e.length;t++)e[t]()}}function es(e,t){const n=e.ctx;if(!n.__next_tick_pending&&!function(e){return ar.includes(e.update)}(e))return gr(t&&t.bind(e.proxy));let o;return n.__next_tick_callbacks||(n.__next_tick_callbacks=[]),n.__next_tick_callbacks.push(()=>{t?nr(t.bind(e.proxy),e,14):o&&o(e.proxy)}),new Promise(e=>{o=e})}function ts(e,t){const n=typeof(e=Gi(e));if("object"===n&&null!==e){let n=t.get(e);if(void 0!==n)return n;if(p(e)){const o=e.length;n=new Array(o),t.set(e,n);for(let r=0;r<o;r++)n[r]=ts(e[r],t)}else{n={},t.set(e,n);for(const o in e)l(e,o)&&(n[o]=ts(e[o],t))}return n}if("symbol"!==n)return e}function ns(e){return ts(e,"undefined"!=typeof WeakMap?new WeakMap:new Map)}function os(e,t,n){if(!t)return;(t=ns(t)).$eS=e.$eS||{},t.$eA=e.$eA||{};const o=e.ctx,r=o.mpType;if("page"===r||"component"===r){t.r0=1;const n=o.$scope,r=Ji(t,function(e,t){const n=e.data,o=Object.create(null);return t.forEach(e=>{o[e]=n[e]}),o}(n,Object.keys(t)));Object.keys(r).length?(o.__next_tick_pending=!0,n.setData(r,()=>{o.__next_tick_pending=!1,Yi(e)}),_r()):Yi(e)}}function rs(e,t,n){t.appContext.config.globalProperties.$applyOptions(e,t,n);const o=e.computed;if(o){const e=Object.keys(o);if(e.length){const n=t.ctx;n.$computedKeys||(n.$computedKeys=[]),n.$computedKeys.push(...e)}}delete t.ctx.$onApplyOptions}function is(e,t=!1){const{setupState:n,$templateRefs:o,$templateUniElementRefs:r,ctx:{$scope:i,$mpPlatform:s}}=e;if(!i||!o&&!r)return;if(t)return"mp-alipay"!==s&&o&&o.forEach(e=>ss(e,null,n)),void(r&&r.forEach(e=>ss(e,null,n)));const c="mp-baidu"===s||"mp-toutiao"===s,a=e=>{if(0===e.length)return[];const t=(i.selectAllComponents(".r")||[]).concat(i.selectAllComponents(".r-i-f")||[]);return e.filter(e=>{const o=function(e,t){const n=e.find(e=>e&&(e.properties||e.props).uI===t);if(n){const e=n.$vm;return e?Wi(e.$)||e:function(e){v(e)&&zo(e);return e}(n)}return null}(t,e.i);return!(!c||null!==o)||(ss(e,o,n),!1)})},u=()=>{if(o){const t=a(o);t.length&&e.proxy&&e.proxy.$scope&&e.proxy.$scope.setData({r1:1},()=>{a(t)})}};"mp-alipay"!==s&&(i._$setRef?i._$setRef(u):es(e,u)),r&&r.length&&es(e,()=>{r.forEach(e=>{p(e.v)?e.v.forEach(t=>{ss(e,t,n)}):ss(e,e.v,n)})})}function ss({r:e,f:t},n,o){if(h(e))e(n,{});else{const r=g(e),i=Xo(e);if(r||i)if(t){if(!i)return;p(e.value)||(e.value=[]);const t=e.value;if(-1===t.indexOf(n)){if(t.push(n),!n)return;n.$&&Xr(()=>a(t,n),n.$)}}else r?l(o,e)&&(o[e]=n):Xo(e)&&(e.value=n)}}const cs=yr;function as(e,t){const n=e.component=Ti(e,t.parentComponent,null);return n.renderer=t.mpType?t.mpType:"component",n.ctx.$onApplyOptions=rs,n.ctx.$children=[],"app"===t.mpType&&(n.render=o),t.onBeforeSetup&&t.onBeforeSetup(n,t),Ui(n),t.parentComponent&&n.proxy&&t.parentComponent.ctx.$children.push(Wi(n)||n.proxy),function(e){const t=hs.bind(e);e.$updateScopedSlots=()=>gr(()=>mr(t));const n=()=>{if(e.isMounted){const{next:t,bu:n,u:o}=e;gs(e,!1),fs(),n&&T(n),gs(e,!0),os(e,ps(e)),o&&cs(o)}else Xr(()=>{is(e,!0)},e),os(e,ps(e))},r=e.effect=new Tn(n,o,()=>mr(i),e.scope),i=e.update=()=>{r.dirty&&r.run()};i.id=e.uid,gs(e,!0),i()}(n),n.proxy}const us=e=>{let t;for(const n in e)("class"===n||"style"===n||i(n))&&((t||(t={}))[n]=e[n]);return t};function ls(e){return e?e.filter(e=>{const t=e.v;return!(!t||"object"!=typeof t||!["UNI-LOADING-ELEMENT","UNI-CLOUD-DB-ELEMENT"].includes(t.nodeName))}):[]}function ps(e){const{type:t,vnode:n,proxy:o,withProxy:r,props:i,propsOptions:[s],slots:c,attrs:a,emit:u,render:l,renderCache:p,data:d,setupState:f,ctx:h,uid:g,appContext:{app:{config:{globalProperties:{pruneComponentPropsCache:m}}}},inheritAttrs:v}=e;let y;e.$uniElementIds=new Map,e.$templateRefs=ls(e.$templateRefs||[]),e.$templateUniElementRefs=ls(e.$templateUniElementRefs||[]),e.$templateUniElementStyles={},e.$ei=0,m(g),e.__counter=0===e.__counter?1:0;const _=Or(e);try{if(4&n.shapeFlag){ds(v,i,s,a);const e=r||o;y=l.call(e,e,p,i,f,d,h)}else{ds(v,i,s,t.props?a:us(a));const e=t;y=e.length>1?e(i,{attrs:a,slots:c,emit:u}):e(i,null)}}catch(x){rr(x,e,1),y=!1}return is(e),Or(_),y}function ds(e,t,n,o){if(t&&o&&!1!==e){const e=Object.keys(o).filter(e=>"class"!==e&&"style"!==e);if(!e.length)return;n&&e.some(s)?e.forEach(e=>{s(e)&&e.slice(9)in n||(t[e]=o[e])}):e.forEach(e=>t[e]=o[e])}}const fs=e=>{Bn(),_r(),Un()};function hs(){const e=this.$scopedSlotsData;if(!e||0===e.length)return;const t=this.ctx.$scope,n=t.data,o=Object.create(null);e.forEach(({path:e,index:t,data:r})=>{const i=we(n,e),s=g(t)?`${e}.${t}`:`${e}[${t}]`;if(void 0===i||void 0===i[t])o[s]=r;else{const e=Ji(r,i[t]);Object.keys(e).forEach(t=>{o[s+"."+t]=e[t]})}}),e.length=0,Object.keys(o).length&&t.setData(o)}function gs({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}const ms=function(e,t=null){h(e)||(e=c({},e)),null==t||v(t)||(t=null);const n=Rr(),o=new WeakSet,r=n.app={_uid:jr++,_component:e,_props:t,_container:null,_context:n,_instance:null,version:Fi,get config(){return n.config},set config(e){},use:(e,...t)=>(o.has(e)||(e&&h(e.install)?(o.add(e),e.install(r,...t)):h(e)&&(o.add(e),e(r,...t))),r),mixin:e=>(n.mixins.includes(e)||n.mixins.push(e),r),component:(e,t)=>t?(n.components[e]=t,r):n.components[e],directive:(e,t)=>t?(n.directives[e]=t,r):n.directives[e],mount(){},unmount(){},provide:(e,t)=>(n.provides[e]=t,r),runWithContext(e){const t=Mr;Mr=r;try{return e()}finally{Mr=t}}};return r};function vs(e,t=null){("undefined"!=typeof window?window:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof global?global:"undefined"!=typeof my?my:void 0).__VUE__=!0;const n=ms(e,t),r=n._context;r.config.globalProperties.$nextTick=function(e){return es(this.$,e)};const i=e=>(e.appContext=r,e.shapeFlag=6,e),s=function(e,t){return as(i(e),t)},c=function(e){return e&&function(e){const{bum:t,scope:n,update:o,um:r}=e;t&&T(t);{const t=e.parent;if(t){const n=t.ctx.$children,o=Wi(e)||e.proxy,r=n.indexOf(o);r>-1&&n.splice(r,1)}}n.stop(),o&&(o.active=!1),r&&cs(r),cs(()=>{e.isUnmounted=!0})}(e.$)};return n.mount=function(){e.render=o;const t=as(i({type:e}),{mpType:"app",mpInstance:null,parentComponent:null,slots:[],props:null});return n._instance=t.$,t.$app=n,t.$createComponent=s,t.$destroyComponent=c,r.$appInstance=t,t},n.unmount=function(){},n}function ys(e,t,n,o){h(t)&&zr(e,t.bind(n),o)}function _s(e,t,n){!function(e,t,n){const o=e.mpType||n.$mpType;!o||"component"===o||"page"===o&&"component"===t.renderer||Object.keys(e).forEach(o=>{if(Ce(o,e[o],!1)){const r=e[o];p(r)?r.forEach(e=>ys(o,e,n,t)):ys(o,r,n,t)}})}(e,t,n)}function xs(e,t,n){return e[t]=n}function bs(e,...t){const n=this[e];return n?n(...t):(console.error(`method ${e} not found`),null)}function ws(e){const t=e.config.errorHandler;return function(n,o,r){t&&t(n,o,r);const i=e._instance;if(!i||!i.proxy)throw n;i[F]?i.proxy.$callHook(F,n):ir(n,0,o&&o.$.vnode,!1)}}function Ss(e,t){return e?[...new Set([].concat(e,t))]:t}let $s;const Ps="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",ks=/^(?:[A-Za-z\d+/]{4})*?(?:[A-Za-z\d+/]{2}(?:==)?|[A-Za-z\d+/]{3}=?)?$/;function Os(){const e=Cn.getStorageSync("uni_id_token")||"",t=e.split(".");if(!e||3!==t.length)return{uid:null,role:[],permission:[],tokenExpired:0};let n;try{n=JSON.parse((o=t[1],decodeURIComponent($s(o).split("").map(function(e){return"%"+("00"+e.charCodeAt(0).toString(16)).slice(-2)}).join(""))))}catch(r){throw new Error("获取当前用户信息出错,详细错误信息为:"+r.message)}var o;return n.tokenExpired=1e3*n.exp,delete n.exp,delete n.iat,n}function Cs(e){const t=e.config;var n;t.errorHandler=Ae(e,ws),n=t.optionMergeStrategies,ke.forEach(e=>{n[e]=Ss});const o=t.globalProperties;!function(e){e.uniIDHasRole=function(e){const{role:t}=Os();return t.indexOf(e)>-1},e.uniIDHasPermission=function(e){const{permission:t}=Os();return this.uniIDHasRole("admin")||t.indexOf(e)>-1},e.uniIDTokenValid=function(){const{tokenExpired:e}=Os();return e>Date.now()}}(o),o.$set=xs,o.$applyOptions=_s,o.$callMethod=bs,Cn.invokeCreateVueAppHook(e)}$s="function"!=typeof atob?function(e){if(e=String(e).replace(/[\t\n\f\r ]+/g,""),!ks.test(e))throw new Error("Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.");var t;e+="==".slice(2-(3&e.length));for(var n,o,r="",i=0;i<e.length;)t=Ps.indexOf(e.charAt(i++))<<18|Ps.indexOf(e.charAt(i++))<<12|(n=Ps.indexOf(e.charAt(i++)))<<6|(o=Ps.indexOf(e.charAt(i++))),r+=64===n?String.fromCharCode(t>>16&255):64===o?String.fromCharCode(t>>16&255,t>>8&255):String.fromCharCode(t>>16&255,t>>8&255,255&t);return r}:atob;const Es=Object.create(null);function Is(e){delete Es[e]}function As(e){if(!e)return;const[t,n]=e.split(",");return Es[t]?Es[t][parseInt(n)]:void 0}var Ts={install(e){Cs(e),e.config.globalProperties.pruneComponentPropsCache=Is;const t=e.mount;e.mount=function(n){const o=t.call(e,n),r=function(){const e="createApp";if("undefined"!=typeof global&&void 0!==global[e])return global[e];if("undefined"!=typeof my)return my[e]}();return r?r(o):"undefined"!=typeof createMiniProgramApp&&createMiniProgramApp(o),o}}};function Ns(e){return g(e)?e:function(e){let t="";if(!e||g(e))return t;for(const n in e)t+=`${n.startsWith("--")?n:C(n)}:${e[n]};`;return t}(L(e))}function Ls(e,t){const n=Li(),r=n.ctx,i=void 0===t||"mp-weixin"!==r.$mpPlatform&&"mp-qq"!==r.$mpPlatform&&"mp-xhs"!==r.$mpPlatform||!g(t)&&"number"!=typeof t?"":"_"+t,s="e"+n.$ei+++i,a=r.$scope;if(!e)return delete a[s],s;const u=a[s];return u?u.value=e:a[s]=function(e,t){const n=e=>{var r;(r=e).type&&r.target&&(r.preventDefault=o,r.stopPropagation=o,r.stopImmediatePropagation=o,l(r,"detail")||(r.detail={}),l(r,"markerId")&&(r.detail="object"==typeof r.detail?r.detail:{},r.detail.markerId=r.markerId),b(r.detail)&&l(r.detail,"checked")&&!l(r.detail,"value")&&(r.detail.value=r.detail.checked),b(r.detail)&&(r.target=c({},r.target,r.detail)));let i=[e];t&&t.ctx.$getTriggerEventDetail&&"number"==typeof e.detail&&(e.detail=t.ctx.$getTriggerEventDetail(e.detail)),e.detail&&e.detail.__args__&&(i=e.detail.__args__);const s=n.value,a=()=>or(function(e,t){if(p(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n&&n.call(e),e._stopped=!0},t.map(e=>t=>!t._stopped&&e(t))}return t}(e,s),t,5,i),u=e.target,d=!!u&&(!!u.dataset&&"true"===String(u.dataset.eventsync));if(!Rs.includes(e.type)||d){const t=a();if("input"===e.type&&(p(t)||y(t)))return;return t}setTimeout(a)};return n.value=e,n}(e,n),s}const Rs=["tap","longpress","longtap","transitionend","animationstart","animationiteration","animationend","touchforcechange"];const js=function(e,t=null){return e&&(e.mpType="app"),vs(e,t).use(Ts)};const Ms=["externalClasses"];const Ds=/_(.*)_worklet_factory_/;function Vs(e,t){const n=e.$children;for(let r=n.length-1;r>=0;r--){const e=n[r];if(e.$scope._$vueId===t)return e}let o;for(let r=n.length-1;r>=0;r--)if(o=Vs(n[r],t),o)return o}const Bs=["createSelectorQuery","createIntersectionObserver","selectAllComponents","selectComponent"];function Us(e,t){const n=e.ctx;n.mpType=t.mpType,n.$mpType=t.mpType,n.$mpPlatform="mp-weixin",n.$scope=t.mpInstance,Object.defineProperties(n,{[_e]:{get(){const e=this.$scope.data[_e];return void 0===e?"":e}}}),n.$mp={},n._self={},e.slots={},p(t.slots)&&t.slots.length&&(t.slots.forEach(t=>{e.slots[t]=!0}),e.slots.d&&(e.slots.default=!0)),n.getOpenerEventChannel=function(){return t.mpInstance.getOpenerEventChannel()},n.$hasHook=Hs,n.$callHook=Ws,e.emit=function(e,t){return function(n,...o){const r=t.$scope;if(r&&n){const e={__args__:o};r.triggerEvent(n,e)}return e.apply(this,[n,...o])}}(e.emit,n)}function Hs(e){const t=this.$[e];return!(!t||!t.length)}function Ws(e,t){"mounted"===e&&(Ws.call(this,"bm"),this.$.isMounted=!0,e="m");const n=this.$[e];return n&&((e,t)=>{let n;for(let o=0;o<e.length;o++)n=e[o](t);return n})(n,t)}const zs=[J,H,W,Z,oe,se,ce,ae,de];function Fs(e,t=new Set){if(e){Object.keys(e).forEach(n=>{Ce(n,e[n])&&t.add(n)});{const{extends:n,mixins:o}=e;o&&o.forEach(e=>Fs(e,t)),n&&Fs(n,t)}}return t}function Gs(e,t,n){-1!==n.indexOf(t)||l(e,t)||(e[t]=function(e){return this.$vm&&this.$vm.$callHook(t,e)})}const qs=[X];function Ks(e,t,n=qs){t.forEach(t=>Gs(e,t,n))}function Js(e,t,n=qs){Fs(t).forEach(t=>Gs(e,t,n))}const Xs=be(()=>{const e=[],t=h(getApp)&&getApp({allowDefault:!0});if(t&&t.$vm&&t.$vm.$){const n=t.$vm.$.appContext.mixins;if(p(n)){const t=Object.keys(Oe);n.forEach(n=>{t.forEach(t=>{l(n,t)&&!e.includes(t)&&e.push(t)})})}}return e});const Zs=[H,W,F,G,q,K];function Qs(e,t){const n=e.$,o={globalData:e.$options&&e.$options.globalData||{},$vm:e,onLaunch(t){this.$vm=e;const o=n.ctx;this.$vm&&o.$scope&&o.$callHook||(Us(n,{mpType:"app",mpInstance:this,slots:[]}),o.globalData=this.globalData,e.$callHook(z,t))}},r=wx.$onErrorHandlers;r&&(r.forEach(e=>{zr(F,e,n)}),r.length=0),function(e){const t=Zo(function(){var e;let t="";{const n=(null===(e=wx.getAppBaseInfo)||void 0===e?void 0:e.call(wx))||wx.getSystemInfoSync();t=Me(n&&n.language?n.language:je)||je}return t}());Object.defineProperty(e,"$locale",{get:()=>t.value,set(e){t.value=e}})}(e);const i=e.$.type;Ks(o,Zs),Js(o,i);{const e=i.methods;e&&c(o,e)}return o}function Ys(e,t){if(h(e.onLaunch)){const t=wx.getLaunchOptionsSync&&wx.getLaunchOptionsSync();e.onLaunch(t)}h(e.onShow)&&wx.onAppShow&&wx.onAppShow(e=>{t.$callHook("onShow",e)}),h(e.onHide)&&wx.onAppHide&&wx.onAppHide(e=>{t.$callHook("onHide",e)})}const ec=["eO","uR","uRIF","uI","uT","uP","uS"];function tc(e){e.properties||(e.properties={}),c(e.properties,function(e,t=!1){const n={};if(!t){let e=function(e){const t=Object.create(null);e&&e.forEach(e=>{t[e]=!0}),this.setData({$slots:t})};ec.forEach(e=>{n[e]={type:null,value:""}}),n.uS={type:null,value:[]},n.uS.observer=e}return e.behaviors&&e.behaviors.includes("wx://form-field")&&(e.properties&&e.properties.name||(n.name={type:null,value:""}),e.properties&&e.properties.value||(n.value={type:null,value:""})),n}(e),function(e){const t={};return e&&e.virtualHost&&(t.virtualHostStyle={type:null,value:""},t.virtualHostClass={type:null,value:""},t.virtualHostHidden={type:null,value:""},t[_e]={type:null,value:""}),t}(e.options))}const nc=[String,Number,Boolean,Object,Array,null];function oc(e,t){const n=function(e){return p(e)&&1===e.length?e[0]:e}(e);return-1!==nc.indexOf(n)?n:null}function rc(e,t){return(t?function(e){const t={};b(e)&&Object.keys(e).forEach(n=>{-1===ec.indexOf(n)&&(t[n]=e[n])});return t}(e):As(e.uP))||{}}function ic(e){const t=function(){const e=this.properties.uP;e&&(this.$vm?function(e,t){const n=Wo(t.props),o=As(e)||{};sc(n,o)&&(!function(e,t,n){const{props:o,attrs:r,vnode:{patchFlag:i}}=e,s=Wo(o),[c]=e.propsOptions;let a=!1;if(i>0&&!(16&i)){if(8&i){const n=e.vnode.dynamicProps;for(let i=0;i<n.length;i++){let u=n[i];if(Pr(e.emitsOptions,u))continue;const p=t[u];if(c)if(l(r,u))p!==r[u]&&(r[u]=bi(0,0,p),a=!0);else{const t=k(u);o[t]=wi(c,s,t,p,e,!1)}else p!==r[u]&&(r[u]=bi(0,0,p),a=!0)}}}else{let i;xi(e,t,o,r)&&(a=!0);for(const r in s)t&&(l(t,r)||(i=C(r))!==r&&l(t,i))||(c?!n||void 0===n[r]&&void 0===n[i]||(o[r]=wi(c,s,r,void 0,e,!0)):delete o[r]);if(r!==s)for(const e in r)t&&l(t,e)||(delete r[e],a=!0)}a&&Qn(e,"set","$attrs")}(t,o,n),r=t.update,ar.indexOf(r)>-1&&function(e){const t=ar.indexOf(e);t>ur&&ar.splice(t,1)}(t.update),t.update());var r}(e,this.$vm.$):"m"===this.properties.uT&&function(e,t){const n=t.properties,o=As(e)||{};sc(n,o,!1)&&t.setData(o)}(e,this))};e.observers||(e.observers={}),e.observers.uP=t}function sc(e,t,n=!0){const o=Object.keys(t);if(n&&o.length!==Object.keys(e).length)return!0;for(let r=0;r<o.length;r++){const n=o[r];if(t[n]!==e[n])return!0}return!1}function cc(e,t){e.data={},e.behaviors=function(e){const t=e.behaviors;let n=e.props;n||(e.props=n=[]);const o=[];return p(t)&&t.forEach(e=>{o.push(e.replace("uni://","wx://")),"uni://form-field"===e&&(p(n)?(n.push("name"),n.push("modelValue")):(n.name={type:String,default:""},n.modelValue={type:[String,Number,Boolean,Array,Object,Date],default:""}))}),o}(t)}function ac(e,{parse:t,mocks:n,isPage:o,isPageInProject:r,initRelation:i,handleLink:s,initLifetimes:a}){e=e.default||e;const u={multipleSlots:!0,addGlobalClass:!0,pureDataPattern:/^uP$/};p(e.mixins)&&e.mixins.forEach(e=>{v(e.options)&&c(u,e.options)}),e.options&&c(u,e.options);const d={options:u,lifetimes:a({mocks:n,isPage:o,initRelation:i,vueOptions:e}),pageLifetimes:{show(){this.$vm&&this.$vm.$callHook("onPageShow")},hide(){this.$vm&&this.$vm.$callHook("onPageHide")},resize(e){this.$vm&&this.$vm.$callHook("onPageResize",e)}},methods:{__l:s}};var f,h,g,m;return cc(d,e),tc(d),ic(d),function(e,t){Ms.forEach(n=>{l(t,n)&&(e[n]=t[n])})}(d,e),f=d.methods,h=e.wxsCallMethods,p(h)&&h.forEach(e=>{f[e]=function(t){return this.$vm[e](t)}}),g=d.methods,(m=e.methods)&&Object.keys(m).forEach(e=>{const t=e.match(Ds);if(t){const n=t[1];g[e]=m[e],g[n]=m[n]}}),t&&t(d,{handleLink:s}),d}let uc,lc;function pc(){return getApp().$vm}function dc(e,t){const{parse:n,mocks:o,isPage:r,initRelation:i,handleLink:s,initLifetimes:c}=t,a=ac(e,{mocks:o,isPage:r,isPageInProject:!0,initRelation:i,handleLink:s,initLifetimes:c});!function({properties:e},t){p(t)?t.forEach(t=>{e[t]={type:String,value:""}}):b(t)&&Object.keys(t).forEach(n=>{const o=t[n];if(b(o)){let t=o.default;h(t)&&(t=t());const r=o.type;o.type=oc(r),e[n]={type:o.type,value:t}}else e[n]={type:oc(o)}})}(a,(e.default||e).props);const u=a.methods;return u.onLoad=function(e){var t;return this.options=e,this.$page={fullPath:(t=this.route+$e(e),function(e){return 0===e.indexOf("/")}(t)?t:"/"+t)},this.$vm&&this.$vm.$callHook(J,e)},Ks(u,zs),Js(u,e),function(e,t){if(!t)return;Object.keys(Oe).forEach(n=>{t&Oe[n]&&Gs(e,n,[])})}(u,e.__runtimeHooks),Ks(u,Xs()),n&&n(a,{handleLink:s}),a}const fc=Page,hc=Component;function gc(e){const t=e.triggerEvent,n=function(n,...o){return t.apply(e,[(r=n,k(r.replace(xe,"-"))),...o]);var r};try{e.triggerEvent=n}catch(o){e._triggerEvent=n}}function mc(e,t,n){const o=t[e];t[e]=o?function(...e){return gc(this),o.apply(this,e)}:function(){gc(this)}}Page=function(e){return mc(J,e),fc(e)},Component=function(e){mc("created",e);return e.properties&&e.properties.uP||(tc(e),ic(e)),hc(e)};var vc=Object.freeze({__proto__:null,handleLink:function(e){const t=e.detail||e.value,n=t.vuePid;let o;n&&(o=Vs(this.$vm,n)),o||(o=this.$vm),t.parent=o},initLifetimes:function({mocks:e,isPage:t,initRelation:n,vueOptions:o}){return{attached(){let r=this.properties;!function(e,t){if(!e)return;const n=e.split(","),o=n.length;1===o?t._$vueId=n[0]:2===o&&(t._$vueId=n[0],t._$vuePid=n[1])}(r.uI,this);const i={vuePid:this._$vuePid};n(this,i);const s=this,c=t(s);let a=r;this.$vm=function(e,t){uc||(uc=pc().$createComponent);const n=uc(e,t);return Wi(n.$)||n}({type:o,props:rc(a,c)},{mpType:c?"page":"component",mpInstance:s,slots:r.uS||{},parentComponent:i.parent&&i.parent.$,onBeforeSetup(t,n){!function(e,t){Object.defineProperty(e,"refs",{get(){const e={};return function(e,t,n){e.selectAllComponents(t).forEach(e=>{const t=e.properties.uR;n[t]=e.$vm||e})}(t,".r",e),t.selectAllComponents(".r-i-f").forEach(t=>{const n=t.properties.uR;n&&(e[n]||(e[n]=[]),e[n].push(t.$vm||t))}),e}})}(t,s),function(e,t,n){const o=e.ctx;n.forEach(n=>{l(t,n)&&(e[n]=o[n]=t[n])})}(t,s,e),function(e,t){Us(e,t);const n=e.ctx;Bs.forEach(e=>{n[e]=function(...t){const o=n.$scope;if(o&&o[e])return o[e].apply(o,t)}})}(t,n)}}),c||function(e){const t=e.$options;p(t.behaviors)&&t.behaviors.includes("uni://form-field")&&e.$watch("modelValue",()=>{e.$scope&&e.$scope.setData({name:e.name,value:e.modelValue})},{immediate:!0})}(this.$vm)},ready(){this.$vm&&(this.$vm.$callHook("mounted"),this.$vm.$callHook(X))},detached(){var e;this.$vm&&(Is(this.$vm.$.uid),e=this.$vm,lc||(lc=pc().$destroyComponent),lc(e))}}},initRelation:function(e,t){e.triggerEvent("__l",t)},isPage:function(e){return!!e.route},mocks:["__route__","__wxExparserNodeId__","__wxWebviewId__"]});const yc=function(e){return App(Qs(e))},_c=(xc=vc,function(e){return Component(dc(e,xc))});var xc;const bc=function(e){return function(t){return Component(ac(t,e))}}(vc),wc=function(e){Ys(Qs(e),e)},Sc=function(e){const t=Qs(e),n=h(getApp)&&getApp({allowDefault:!0});if(!n)return;e.$.ctx.$scope=n;const o=n.globalData;o&&Object.keys(t.globalData).forEach(e=>{l(o,e)||(o[e]=t.globalData[e])}),Object.keys(t).forEach(e=>{l(n,e)||(n[e]=t[e])}),Ys(t,e)};!function(){if(h(wx.preloadAssets)){const e=String.fromCharCode(99,100,110,49,46,100,99,108,111,117,100,46,110,101,116,46,99,110);setTimeout(()=>{wx.preloadAssets({data:[{type:"image",src:"https://"+e+"/526a64464d54424751673d3d/img/shadow-grey.png"}]})},3e3)}}(),wx.createApp=global.createApp=yc,wx.createPage=_c,wx.createComponent=bc,wx.createPluginApp=global.createPluginApp=wc,wx.createSubpackageApp=global.createSubpackageApp=Sc,Math;const $c="mingdao_guide_login_state",Pc={id:"guide_001",name:"赵明",phone:"13800000000",avatar:"/static/logo.png",rating:4.9,orderCount:286,serviceMinutes:12840,auditStatus:"approved",onlineStatus:"offline",groupName:"都江堰精讲一团",tags:["都江堰水利工程","亲子讲解","川西历史","普通话"]},kc=[{id:"dujiangyan",name:"都江堰景区",city:"成都",meetingPoints:[{id:"south_gate",name:"都江堰南门",guideCount:6,latitude:31.001472,longitude:103.648278,address:"四川省成都市都江堰市公园路都江堰景区南门"},{id:"north_gate",name:"都江堰北门",guideCount:3,latitude:31.005846,longitude:103.646812,address:"四川省成都市都江堰市离堆公园路都江堰景区北门"}]},{id:"qingchengshan",name:"青城山景区",city:"成都",meetingPoints:[{id:"front_gate",name:"青城山前山门",guideCount:4,latitude:30.905982,longitude:103.569027,address:"四川省成都市都江堰市青城山镇青城山景区前山门"},{id:"parking",name:"游客中心停车场",guideCount:2,latitude:30.909683,longitude:103.571938,address:"四川省成都市都江堰市青城山景区游客中心停车场"}]}],Oc="mingdao_guide_selected_bank_id",Cc="mingdao_guide_selected_branch";const Ec=({}.VITE_API_BASE_URL||"http://127.0.0.1:8011/api").replace(/\/$/,""),Ic=Ec.replace(/\/api$/,""),Ac="/pages/login/index";let Tc=!1;function Nc({url:e,method:t="GET",data:n,authenticated:o=!0,headers:r={}}){const i=Cn.getStorageSync($c),s={"Content-Type":"application/json",...r};return o&&i&&i.token&&(s.Authorization=`Bearer ${i.token}`),new Promise((r,i)=>{Cn.request({url:`${Ec}${e}`,method:t,data:n,header:s,success(e){const t=e.data||{};if(Rc(e.statusCode,t,o))return Dc(),void i(jc(t.message||t.msg));e.statusCode>=200&&e.statusCode<300&&0===t.code?r(t.data):i(Mc(t,e.statusCode))},fail(e){i(new Error(e.errMsg||"网络连接失败"))}})})}function Lc({url:e,filePath:t,name:n="file",header:o={},authenticated:r=!0}){const i=Cn.getStorageSync($c),s={...o};return r&&i&&i.token&&(s.Authorization=`Bearer ${i.token}`),new Promise((o,i)=>{Cn.uploadFile({url:`${Ec}${e}`,filePath:t,name:n,header:s,success(e){let t=e.data;try{t="string"==typeof t?JSON.parse(t):t}catch(n){return void i(new Error("上传响应格式不正确"))}if(Rc(e.statusCode,t,r))return Dc(),void i(jc(t&&(t.message||t.msg)));e.statusCode>=200&&e.statusCode<300&&t&&0===t.code?o(t.data):i(Mc(t,e.statusCode,"上传失败"))},fail(e){i(new Error(e.errMsg||"文件上传失败"))}})})}function Rc(e,t={},n=!0){return!!n&&(401===e||t&&(401===t.code||"401"===t.code))}function jc(e){const t=new Error(e||"登录已过期,请重新登录");return t.authExpired=!0,t}function Mc(e={},t,n="请求失败"){const o=e||{},r=new Error(o.message||o.msg||`${n}(${t})`);return r.code=o.code,r.statusCode=t,r}function Dc(){try{Cn.removeStorageSync($c)}catch(e){}Tc||function(){const e="function"==typeof getCurrentPages?getCurrentPages():[],t=e[e.length-1];return t&&`/${t.route}`===Ac}()||(Tc=!0,Cn.showToast({title:"登录已过期,请重新登录",icon:"none"}),setTimeout(()=>{Cn.reLaunch({url:Ac,complete(){setTimeout(()=>{Tc=!1},500)}})},300))}const Vc={onLaunch(){console.log("Guide App Launch")},onShow(){}};function Bc(){return{app:js(Vc)}}function Uc(){const e=Cn.getStorageSync($c)||null;return e&&e.expiresAt&&Number(e.expiresAt)<=Date.now()?(Cn.removeStorageSync($c),null):e}function Hc(e,t="navigateTo"){const n=function(e){return e?String(e):""}(e);if(!n)return;const o=Cn[t]||Cn.navigateTo;try{o({url:n,fail(){Cn.showToast({title:"页面未注册,请重新运行项目",icon:"none"})}})}catch(r){Cn.showToast({title:"页面未注册,请重新运行项目",icon:"none"})}}Bc().app.mount("#app");const Wc="mingdao_guide_phone_change_state";function zc(e){const t=Cn.getStorageSync($c),n=function(e={},t={}){return{...t,...e,name:e.realName||e.name||e.username||t.name||"",phone:e.mobile||e.phone||t.phone||"",avatar:(n=e.avatar||t.avatar||"",n?/^https?:\/\//i.test(n)||n.startsWith("wxfile://")||n.startsWith("blob:")?n:`${Ic}${n.startsWith("/")?n:`/${n}`}`:""),orderCount:Number(e.acceptedOrderCount??e.orderCount??t.orderCount??0),rating:Number(e.rating??t.rating??0),groupName:e.teamName||t.groupName||("个人"===e.teamType?"个人导游":"")};var n}(e,t&&t.guide||Pc);return t&&(t.guide=n,Cn.setStorageSync($c,t)),n}function Fc(e){const t=Number(e);return Number.isFinite(t)?t:0}function Gc(){return kc.reduce((e,t)=>{const n=(t.meetingPoints||[]).map(e=>({scenicId:t.id,scenicName:t.name,city:t.city,...e}));return e.concat(n)},[])}function qc(e={}){const t=kc.find(t=>t.id===e.scenicId||t.name===e.scenicName),n=t?t.meetingPoints||[]:Gc(),o=n.find(t=>t.id===e.meetingPointId)||n.find(t=>t.name===e.meetingPointName)||Gc().find(t=>t.id===e.meetingPointId||t.name===e.meetingPointName),r=Fc(e.meetingPointLatitude||e.latitude||o&&o.latitude),i=Fc(e.meetingPointLongitude||e.longitude||o&&o.longitude);return o||r&&i?{scenicId:e.scenicId||t&&t.id||o&&o.scenicId||"",scenicName:e.scenicName||t&&t.name||o&&o.scenicName||"",city:o&&o.city||t&&t.city||"",id:e.meetingPointId||o&&o.id||"",name:e.meetingPointName||o&&o.name||"汇合点",address:e.meetingPointAddress||e.address||o&&o.address||"",guideCount:o&&o.guideCount||0,latitude:r,longitude:i}:null}function Kc(e,t={}){const n=Cn.getStorageSync($c);return n&&n.guide&&(n.guide.onlineStatus=e,"online"!==e&&"serving"!==e||(n.guide.receivingConfig=t),"offline"===e&&(n.guide.receivingConfig=null),Cn.setStorageSync($c,n)),e}function Jc(e){const t=Number(e);return Number.isFinite(t)?t:0}function Xc(e={}){return Boolean(Jc(e.latitude||e.meetingPointLatitude)&&Jc(e.longitude||e.meetingPointLongitude))}function Zc(e={}){const t=Jc(e.latitude||e.meetingPointLatitude),n=Jc(e.longitude||e.meetingPointLongitude);return{scenicId:e.scenicId||"",scenicName:e.scenicName||"",meetingPointId:e.id||e.meetingPointId||"",meetingPointName:e.name||e.meetingPointName||"汇合点",meetingPointAddress:e.address||e.meetingPointAddress||"",latitude:t,longitude:n}}function Qc(e={}){const t=Zc(e);return Xc(t)?new Promise((e,n)=>{Cn.openLocation({latitude:t.latitude,longitude:t.longitude,scale:18,name:t.meetingPointName,address:t.meetingPointAddress,success(){e(t)},fail(e){n(e)}})}):(Cn.showToast({title:"汇合点坐标暂未配置",icon:"none"}),Promise.reject(new Error("Missing meeting point coordinates")))}function Yc(e){return"active"===e||"pending"===e?"accepted":"history"===e?"completed":e||"all"}function ea(e={}){const t=function(e={}){const t=qc({scenicId:e.scenicId,scenicName:e.scenicName,meetingPointId:e.meetingPointId,meetingPointName:e.meetingPointName,meetingPointLatitude:e.meetingPointLatitude,meetingPointLongitude:e.meetingPointLongitude,meetingPointAddress:e.meetingPointAddress});return t?{...e,scenicId:e.scenicId||t.scenicId,meetingPointId:e.meetingPointId||t.id,meetingPointName:e.meetingPointName||t.name,meetingPointLatitude:e.meetingPointLatitude||t.latitude,meetingPointLongitude:e.meetingPointLongitude||t.longitude,meetingPointAddress:e.meetingPointAddress||t.address}:e}({...e,quantity:Number(e.quantity??e.peopleCount??0),receiveTime:ta(e.receiveTime||e.acceptedAt||e.createdAt),receiveStartTime:ta(e.receiveStartTime||e.receiveTime||e.acceptedAt||e.createdAt),lectureStartTime:ta(e.lectureStartTime||e.serviceStartedAt||e.arrivedAt),lectureEndTime:ta(e.lectureEndTime||e.completedAt),completedAt:ta(e.completedAt),customers:(e.customers||[]).map(e=>({...e,time:ta(e.time)}))});return{...t,customers:t.customers&&t.customers.length?t.customers:[{no:1,phone:t.customerPhone||"",people:t.quantity||0,time:t.receiveStartTime||""}]}}function ta(e){return e?String(e).replace("T"," "):""}function na(e){return{...e,time:e.time?e.time.replace("T"," "):"",url:e.targetUrl||(e.orderId?`/pages/order-detail/index?id=${e.orderId}`:"")}}const oa="mingdao_guide_registration_state";function ra(){return Cn.getStorageSync(oa)||null}function ia(e,t){return Lc({url:"/guide/registration/documents",filePath:e,header:{"X-Registration-Token":t}}).then(e=>e.url)}function sa(){return Nc({url:"/guide/settlement/onboarding/status"})}const ca={user:"GUIDE_USER_AGREEMENT",service:"EXPLANATION_SERVICE_COOPERATION",reward:"GUIDE_REWARD_PUNISHMENT"};function aa(e){return ca[e]||e||ca.user}exports.GUIDE_ORDERS_KEY="mingdao_guide_orders",exports._export_sfc=(e,t)=>{const n=e.__vccOpts||e;for(const[o,r]of t)n[o]=r;return n},exports.addBankCard=function(e){return Nc({url:"/guide/settlement/bank-cards",method:"POST",data:e})},exports.areaCityCodes=[["110100"],["310100"],["500100"],["510100","510300","510400","510500","510600","510700","510800","510900","511000","511100","511300","511400","511500","511600","511700","511800","511900","512000"],["440100","440300","440400","440600","441900"]],exports.areaCityNames=[["北京市"],["上海市"],["重庆市"],["成都市","自贡市","攀枝花市","泸州市","德阳市","绵阳市","广元市","遂宁市","内江市","乐山市","南充市","眉山市","宜宾市","广安市","达州市","雅安市","巴中市","资阳市"],["广州市","深圳市","珠海市","佛山市","东莞市"]],exports.areaProvinceCodes=["110000","310000","500000","510000","440000"],exports.areaProvinceNames=["北京","上海","重庆","四川省","广东省"],exports.backOrHome=function(e="/pages/workbench/index"){("function"==typeof getCurrentPages?getCurrentPages():[]).length>1?Cn.navigateBack():Hc(e,"reLaunch")},exports.buildMeetingPointCircles=function(e={}){const t=Zc(e);return Xc(t)?[{latitude:t.latitude,longitude:t.longitude,radius:36,strokeWidth:4,color:"#4d8fe899",fillColor:"#4d8fe833"}]:[]},exports.cancelAccount=function(){return Nc({url:"/guide/push-device",method:"DELETE"}).catch(()=>{}).then(()=>Nc({url:"/guide/auth/account",method:"DELETE"})).then(e=>(Cn.removeStorageSync($c),e))},exports.changeGuidePhone=function(e,t){const n=Cn.getStorageSync(Wc);return n&&n.changeToken?Nc({url:"/guide/profile/phone",method:"PUT",data:{changeToken:n.changeToken,newPhone:e,code:t}}).then(e=>(Cn.removeStorageSync(Wc),zc(e))):Promise.reject(new Error("旧手机号验证已失效,请重新验证"))},exports.consumeSelectedBankId=function(){const e=Cn.getStorageSync(Oc);return e&&Cn.removeStorageSync(Oc),e||""},exports.consumeSelectedBranch=function(){const e=Cn.getStorageSync(Cc);if(!e)return null;if(Cn.removeStorageSync(Cc),"object"==typeof e)return e;try{return JSON.parse(e)}catch(t){return{branchName:e,bankName:e,branchCode:""}}},exports.createApp=Bc,exports.createWithdrawal=function(e,t){return Nc({url:"/guide/withdrawals",method:"POST",data:{amount:Number(Number(e).toFixed(2)),bankCardId:t&&t.id}})},exports.e=(e,...t)=>c(e,...t),exports.f=(e,t)=>function(e,t){let n;if(p(e)||g(e)){n=new Array(e.length);for(let o=0,r=e.length;o<r;o++)n[o]=t(e[o],o,o)}else if("number"==typeof e){n=new Array(e);for(let o=0;o<e;o++)n[o]=t(o+1,o,o)}else if(v(e))if(e[Symbol.iterator])n=Array.from(e,(e,n)=>t(e,n,n));else{const o=Object.keys(e);n=new Array(o.length);for(let r=0,i=o.length;r<i;r++){const i=o[r];n[r]=t(e[i],i,r)}}else n=[];return n}(e,t),exports.finishGuideLecture=function(){return Nc({url:"/guide/receiving/finish",method:"PUT"}).then(()=>Kc("offline"))},exports.formatDuration=function(e=0){if(e<60)return`${e}分钟`;const t=Math.floor(e/60),n=e%60;return n?`${t}小时${n}分钟`:`${t}小时`},exports.formatMoney=function(e=0){return`¥${(Number(e||0)/100).toFixed(2)}`},exports.formatRatingStars=function(e){const t=Math.max(0,Math.min(5,Math.round(Number(e)||0)));return`${"★".repeat(t)}${"☆".repeat(5-t)}`},exports.getBankCards=function(){return Nc({url:"/guide/settlement/bank-cards"})},exports.getCurrentGuideReceivingSession=function(){return Nc({url:"/guide/receiving/current"})},exports.getEarnings=function(e={}){const t={pageNum:e.pageNum||1,pageSize:e.pageSize||50};return e.serviceType&&(t.serviceType=e.serviceType),e.scenicName&&(t.scenicName=e.scenicName),e.date&&(t.date=e.date),Nc({url:"/guide/earnings",data:t})},exports.getGuideAgreement=function(e){const t=aa(e);return Nc({url:`/guide/agreements/${encodeURIComponent(t)}`,authenticated:!1})},exports.getGuideAgreements=function(){return Nc({url:"/guide/agreements",authenticated:!1})},exports.getGuideOrders=function(e="all"){return Nc({url:`/guide/orders?tab=${encodeURIComponent(Yc(e))}&page=1&size=50`}).then(e=>(e.records||[]).map(ea))},exports.getGuideProfile=function(){return Nc({url:"/guide/profile"}).then(zc)},exports.getGuideRatings=function({date:e="",pageNum:t=1,pageSize:n=100}={}){const o={pageNum:t,pageSize:n};return e&&(o.date=e),Nc({url:"/guide/ratings",data:o})},exports.getGuideReceivingOptions=function(){return Nc({url:"/guide/receiving/options"})},exports.getLoginState=Uc,exports.getMessageList=function(){return Nc({url:"/guide/notifications"}).then(e=>e.map(na))},exports.getOnboardingStatus=sa,exports.getOrderDetail=function(e){return Nc({url:`/guide/orders/${e}`}).then(ea)},exports.getRegistrationState=ra,exports.getRegistrationTeams=function(){return Nc({url:"/guide/registration/teams",authenticated:!1})},exports.getStatusBarHeight=function(){try{return Cn.getSystemInfoSync().statusBarHeight||0}catch(e){return 0}},exports.getWithdrawalSummary=function(){return Nc({url:"/guide/withdrawals/summary"})},exports.getWithdrawals=function(e=1,t=50){return Nc({url:"/guide/withdrawals",data:{page:e,size:t}})},exports.getWorkbenchData=function(){return Nc({url:"/guide/workbench"})},exports.hasMeetingPointLocation=Xc,exports.index=Cn,exports.isLoggedIn=function(){const e=Uc();return Boolean(e&&e.token)},exports.loginByPhone=function({phone:e,code:t}){return e&&t?Nc({url:"/guide/auth/login",method:"POST",authenticated:!1,data:{phone:e,code:t}}).then(t=>{const n=t.user||{},o={token:t.token,expiresIn:t.expiresIn,expiresAt:Date.now()+1e3*Number(t.expiresIn||0),guide:{...Pc,id:n.id,name:n.realName||n.username||Pc.name,phone:n.mobile||e,avatar:n.avatar||Pc.avatar,rating:Number(n.rating||0),orderCount:n.acceptedOrderCount||0,auditStatus:(r=n.status,1===r?"approved":2===r?"pending":0===r?"disabled":"pending"),onlineStatus:"offline",groupName:n.teamName||("个人"===n.teamType?"个人导游":Pc.groupName)}};var r;return Cn.setStorageSync($c,o),Promise.resolve(!1),o}):Promise.reject(new Error("请输入手机号和验证码"))},exports.logout=function(){const e=Uc();return e&&e.token?Nc({url:"/guide/push-device",method:"DELETE"}).catch(()=>{}).then(()=>Nc({url:"/guide/auth/logout",method:"POST"})).finally(()=>Cn.removeStorageSync($c)):(Cn.removeStorageSync($c),Promise.resolve())},exports.markMessageRead=function(e){return Nc({url:`/guide/notifications/${e}/read`,method:"PUT"})},exports.maskPhone=function(e=""){return e.replace(/^(\d{3})\d{4}(\d{4})$/,"$1****$2")},exports.n=e=>V(e),exports.o=(e,t)=>Ls(e,t),exports.openBankCardBusiness=function(e){return Nc({url:"/guide/settlement/bank-cards/"+encodeURIComponent(e)+"/business-open",method:"POST"})},exports.openMeetingPointPage=function(e={}){const t=Zc(e);Xc(t)?Qc(t).catch(e=>{console.log("Open meeting point location failed",e),Cn.showToast({title:"暂时无法打开地图导航",icon:"none"})}):Cn.showToast({title:"汇合点坐标暂未配置",icon:"none"})},exports.openSystemLocation=Qc,exports.p=e=>function(e){const{uid:t,__counter:n}=Li();return t+","+((Es[t]||(Es[t]=[])).push(Ei(e))-1)+","+n}(e),exports.parseMeetingPointPayload=function(e=""){if(!e)return null;try{return Zc(JSON.parse(decodeURIComponent(e)))}catch(t){return console.log("Parse meeting point payload failed",t),null}},exports.playNotificationAlert=function(){void 0!==Cn&&Cn.vibrateShort&&Cn.vibrateShort({type:"medium"});try{"undefined"!=typeof plus&&plus.device&&plus.device.beep&&(plus.device.beep(1),1)||function(){if("undefined"==typeof window)return!1;const e=window.AudioContext||window.webkitAudioContext;if(!e)return!1;const t=new e,n=t.createOscillator(),o=t.createGain();n.type="sine",n.frequency.value=880,o.gain.setValueAtTime(.12,t.currentTime),o.gain.exponentialRampToValueAtTime(.001,t.currentTime+.22),n.connect(o),o.connect(t.destination),n.start(),n.stop(t.currentTime+.22)}()}catch(e){return!1}return!0},exports.refreshOnboardingStatus=function(){return sa()},exports.resolveAgreementCode=aa,exports.resolveComponent=function(e,t){return function(e,t,n=!0,o=!1){const r=kr||Ni;if(r){const n=r.type;{const e=function(e,t=!0){return h(e)?e.displayName||e.name:e.name||t&&e.__name}(n,!1);if(e&&(e===t||e===k(t)||e===E(k(t))))return n}const i=Cr(r[e]||n[e],t)||Cr(r.appContext[e],t);return!i&&o?n:i}}("components",e,!0,t)||e},exports.resolveMeetingPoint=qc,exports.routeTo=Hc,exports.s=e=>Ns(e),exports.saveSelectedBankId=function(e){Cn.setStorageSync(Oc,e)},exports.saveSelectedBranch=function(e){Cn.setStorageSync(Cc,JSON.stringify(e))},exports.searchBankBranches=function(e="",t=""){return Nc({url:"/guide/settlement/bank-branches",data:{keyword:String(e||"").trim()||void 0,cityCode:String(t||"").trim()||void 0}})},exports.sendLoginCode=function(e){return Nc({url:"/guide/auth/sms-code",method:"POST",authenticated:!1,data:{phone:e,scene:"login"}})},exports.sendNewPhoneCode=function(e){const t=Cn.getStorageSync(Wc);return t&&t.changeToken?Nc({url:"/guide/profile/phone-change/new-code",method:"POST",data:{changeToken:t.changeToken,newPhone:e}}):Promise.reject(new Error("旧手机号验证已失效,请重新验证"))},exports.sendOldPhoneCode=function(e){return Nc({url:"/guide/profile/phone-change/old-code",method:"POST",data:{phone:e}})},exports.sendRegistrationCode=function(e){return Nc({url:"/guide/registration/sms-code",method:"POST",authenticated:!1,data:{phone:e}})},exports.submitCertification=function(e){const t=Cn.getStorageSync($c);return t&&t.guide&&(t.guide.auditStatus="pending",Cn.setStorageSync($c,t)),Promise.resolve({...e,auditStatus:"pending"})},exports.submitFeedback=function(e){return Nc({url:"/guide/feedback",method:"POST",data:{content:e}})},exports.submitGuideRegistration=function(e){const t=ra();if(!t||!t.registrationToken)return Promise.reject(new Error("手机号验证已失效,请重新验证"));const n=[ia(e.idFront,t.registrationToken),ia(e.idBack,t.registrationToken),ia(e.guideLicense,t.registrationToken),e.guideCert?ia(e.guideCert,t.registrationToken):Promise.resolve("")];return Promise.all(n).then(([n,o,r,i])=>Nc({url:"/guide/registration/applications",method:"POST",authenticated:!1,data:{realName:e.name,gender:"男"===e.gender?1:2,ageRange:e.age,workYearRange:e.workYear,guideType:e.guideType,teamId:e.teamId,idCardNo:e.idNo,idCardFrontUrl:n,idCardBackUrl:o,guideCertificateUrl:r,qualificationCertificateUrl:i},headers:{"X-Registration-Token":t.registrationToken}})).then(e=>(Cn.removeStorageSync(oa),e))},exports.submitOnboarding=function(e){return Nc({url:"/guide/settlement/onboarding",method:"POST",data:e})},exports.t=e=>(e=>g(e)?e:null==e?"":p(e)||v(e)&&(e.toString===_||!h(e.toString))?JSON.stringify(e,B,2):String(e))(e),exports.updateGuideOnlineStatus=function(e,t={}){let n=Promise.resolve(e);return"online"===e?n=Nc({url:"/guide/receiving/start",method:"POST",data:t}):"offline"===e&&(n=Nc({url:"/guide/receiving/stop",method:"PUT"})),n.then(()=>Kc(e,t))},exports.uploadGuideAvatar=function(e){return Lc({url:"/guide/profile/avatar",filePath:e}).then(zc)},exports.upxToPx=function(e){try{return Cn.upx2px(e)}catch(t){return 0}},exports.verifyOldPhone=function(e,t){return Nc({url:"/guide/profile/phone-change/verify-old",method:"POST",data:{phone:e,code:t}}).then(e=>(Cn.setStorageSync(Wc,e),e))},exports.verifyRegistrationPhone=function(e,t){return Nc({url:"/guide/registration/verify-phone",method:"POST",authenticated:!1,data:{phone:e,code:t}}).then(t=>{const n={phone:e,...t};return Cn.setStorageSync(oa,n),n})};
diff --git a/mingdaojingjiang_guide_app/dist/build/mp-weixin/components/guide-nav-bar/guide-nav-bar.js b/mingdaojingjiang_guide_app/dist/build/mp-weixin/components/guide-nav-bar/guide-nav-bar.js
index 52f490e..791cef8 100644
--- a/mingdaojingjiang_guide_app/dist/build/mp-weixin/components/guide-nav-bar/guide-nav-bar.js
+++ b/mingdaojingjiang_guide_app/dist/build/mp-weixin/components/guide-nav-bar/guide-nav-bar.js
@@ -1 +1 @@
-"use strict";const t=require("../../common/vendor.js"),e=require("../../common/assets.js"),a={name:"GuideNavBar",props:{title:{type:String,default:""},showBack:{type:Boolean,default:!0},backgroundColor:{type:String,default:"#4d8fe8"}},data:()=>({statusBarHeight:t.getStatusBarHeight()}),computed:{navHeightPx(){return this.statusBarHeight+t.upxToPx(98)},navStyle(){return{paddingTop:`${this.statusBarHeight}px`,height:`${this.navHeightPx}px`,background:this.backgroundColor}}},methods:{handleBack(){this.$emit("back")}}};const o=t._export_sfc(a,[["render",function(a,o,r,s,n,i){return t.e({a:r.showBack},r.showBack?{b:e._imports_0$7,c:t.o((...t)=>i.handleBack&&i.handleBack(...t),"b6")}:{},{d:t.t(r.title),e:t.s(i.navStyle)})}]]);wx.createComponent(o);
+"use strict";const t=require("../../common/vendor.js"),e={name:"GuideNavBar",props:{title:{type:String,default:""},showBack:{type:Boolean,default:!0},backgroundColor:{type:String,default:"#4d8fe8"},actionText:{type:String,default:""},theme:{type:String,default:"brand"}},data:()=>({statusBarHeight:t.getStatusBarHeight()}),computed:{isLight(){return"light"===this.theme},backIcon(){return this.isLight?"/static/icons/chevron-left.svg":"/static/icons/chevron-left-white.svg"},barBackground(){return this.isLight&&"#4d8fe8"===this.backgroundColor?"#f4f6f9":this.backgroundColor},navHeightPx(){return this.statusBarHeight+t.upxToPx(98)},navStyle(){return{paddingTop:`${this.statusBarHeight}px`,height:`${this.navHeightPx}px`,background:this.barBackground}}},methods:{handleBack(){this.$emit("back")},handleAction(){this.$emit("action")}}};const a=t._export_sfc(e,[["render",function(e,a,n,i,o,r){return t.e({a:n.showBack},n.showBack?{b:r.backIcon,c:t.o((...t)=>r.handleBack&&r.handleBack(...t),"fc")}:{},{d:t.t(n.title),e:n.actionText},n.actionText?{f:t.t(n.actionText),g:t.o((...t)=>r.handleAction&&r.handleAction(...t),"93")}:{},{h:t.n("is-"+n.theme),i:t.s(r.navStyle)})}]]);wx.createComponent(a);
diff --git a/mingdaojingjiang_guide_app/dist/build/mp-weixin/components/guide-nav-bar/guide-nav-bar.wxml b/mingdaojingjiang_guide_app/dist/build/mp-weixin/components/guide-nav-bar/guide-nav-bar.wxml
index bf46cc7..ba989e9 100644
--- a/mingdaojingjiang_guide_app/dist/build/mp-weixin/components/guide-nav-bar/guide-nav-bar.wxml
+++ b/mingdaojingjiang_guide_app/dist/build/mp-weixin/components/guide-nav-bar/guide-nav-bar.wxml
@@ -1 +1 @@
-<view class="guide-nav-bar" style="{{e}}"><view class="guide-nav-bar__row"><button wx:if="{{a}}" class="guide-nav-bar__back" bindtap="{{c}}"><image class="guide-nav-bar__icon" src="{{b}}" mode="aspectFit"/></button><text class="guide-nav-bar__title">{{d}}</text></view></view>
\ No newline at end of file
+<view class="{{['guide-nav-bar', h]}}" style="{{i}}"><view class="guide-nav-bar__row"><view wx:if="{{a}}" class="guide-nav-bar__back" bindtap="{{c}}"><image class="guide-nav-bar__icon" src="{{b}}" mode="aspectFit"/></view><text class="guide-nav-bar__title">{{d}}</text><view wx:if="{{e}}" class="guide-nav-bar__action" bindtap="{{g}}"><text class="guide-nav-bar__action-text">{{f}}</text></view></view></view>
\ No newline at end of file
diff --git a/mingdaojingjiang_guide_app/dist/build/mp-weixin/components/guide-nav-bar/guide-nav-bar.wxss b/mingdaojingjiang_guide_app/dist/build/mp-weixin/components/guide-nav-bar/guide-nav-bar.wxss
index b20cb6c..90b3db0 100644
--- a/mingdaojingjiang_guide_app/dist/build/mp-weixin/components/guide-nav-bar/guide-nav-bar.wxss
+++ b/mingdaojingjiang_guide_app/dist/build/mp-weixin/components/guide-nav-bar/guide-nav-bar.wxss
@@ -1 +1 @@
-.guide-nav-bar{position:relative;display:flex;align-items:flex-end;justify-content:center;box-sizing:border-box;flex-shrink:0}.guide-nav-bar__row{position:relative;display:flex;align-items:center;justify-content:center;width:100%;height:98rpx}.guide-nav-bar__back{position:absolute;left:24rpx;top:50%;display:flex;align-items:center;justify-content:center;width:88rpx;height:64rpx;padding:0;border:0;background:transparent;transform:translateY(-50%)}.guide-nav-bar__back:after{border:0}.guide-nav-bar__icon{width:34rpx;height:34rpx}.guide-nav-bar__title{max-width:460rpx;color:#fff;font-size:32rpx;font-weight:800;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
\ No newline at end of file
+.guide-nav-bar{position:relative;display:flex;align-items:flex-end;justify-content:center;box-sizing:border-box;flex-shrink:0}.guide-nav-bar__row{position:relative;display:flex;align-items:center;justify-content:center;width:100%;height:98rpx}.guide-nav-bar__back{position:absolute;left:24rpx;top:50%;display:flex;align-items:center;justify-content:center;width:88rpx;height:64rpx;padding:0;transform:translateY(-50%)}.guide-nav-bar__icon{width:34rpx;height:34rpx}.guide-nav-bar__title{max-width:360rpx;color:#fff;font-size:32rpx;font-weight:800;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.guide-nav-bar__action{position:absolute;right:24rpx;top:50%;display:flex;align-items:center;justify-content:center;min-width:104rpx;height:52rpx;padding:0 22rpx;border-radius:10rpx;background:#fff;transform:translateY(-50%)}.guide-nav-bar__action-text{color:#4d8fe8;font-size:26rpx;font-weight:700;line-height:1}.guide-nav-bar.is-light .guide-nav-bar__title{color:#202b3e;font-size:34rpx;font-weight:700}.guide-nav-bar.is-light .guide-nav-bar__icon{width:38rpx;height:38rpx}
\ No newline at end of file
diff --git a/mingdaojingjiang_guide_app/dist/build/mp-weixin/pages/earnings/index.js b/mingdaojingjiang_guide_app/dist/build/mp-weixin/pages/earnings/index.js
index 2037b89..bc9aed7 100644
--- a/mingdaojingjiang_guide_app/dist/build/mp-weixin/pages/earnings/index.js
+++ b/mingdaojingjiang_guide_app/dist/build/mp-weixin/pages/earnings/index.js
@@ -1 +1 @@
-"use strict";const e=require("../../common/vendor.js"),i=require("../../common/assets.js"),t={components:{GuideNavBar:()=>"../../components/guide-nav-bar/guide-nav-bar.js"},data:()=>({data:{todayEarnings:0,monthEarnings:0,records:[]},orderTypes:[{label:"讲解类型",value:""},{label:"快讲",value:"QUICK"},{label:"精讲",value:"PREMIUM"}],scenicOptions:["景区选择"],orderTypeIndex:0,scenicIndex:0,selectedDate:"",loading:!1,isLeaving:!1}),computed:{orderTypeLabels(){return this.orderTypes.map(e=>e.label)},visibleRows(){return this.data.records.map(e=>({...e,scenicName:e.scenicName||"",serviceName:e.serviceName||this.serviceName(e.orderType),time:this.formatDateTime(e.completedAt)}))}},onShow(){this.loadData()},methods:{goBack(){this.isLeaving||(this.isLeaving=!0,setTimeout(()=>{e.backOrHome()},280))},loadData(){this.loading||(this.loading=!0,e.getEarnings({serviceType:this.orderTypes[this.orderTypeIndex].value,scenicName:this.scenicIndex>0?this.scenicOptions[this.scenicIndex]:"",date:this.selectedDate}).then(e=>{this.data=e;const i=this.scenicIndex>0?this.scenicOptions[this.scenicIndex]:"";this.scenicOptions=["景区选择",...e.scenicOptions||[]],this.scenicIndex=i?Math.max(this.scenicOptions.indexOf(i),0):0}).catch(i=>{e.index.showToast({title:i.message||"业绩数据加载失败",icon:"none"})}).finally(()=>{this.loading=!1}))},moneyNumber:(e=0)=>Number(e||0).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}),serviceName:e=>String(e||"").includes("QUICK")?"快讲":"精讲",formatDateTime:e=>e?e.replace("T"," ").slice(0,19):"-",changeOrderType(e){this.orderTypeIndex=Number(e.detail.value),this.loadData()},changeScenic(e){this.scenicIndex=Number(e.detail.value),this.loadData()},changeDate(e){this.selectedDate=e.detail.value,this.loadData()}}};if(!Array){e.resolveComponent("guide-nav-bar")()}Math;const a=e._export_sfc(t,[["render",function(t,a,s,n,c,o){return e.e({a:e.o(o.goBack,"cd"),b:e.p({title:"业绩明细"}),c:e.t(o.moneyNumber(c.data.todayEarnings)),d:e.t(o.moneyNumber(c.data.monthEarnings)),e:e.t(o.orderTypeLabels[c.orderTypeIndex]),f:i._imports_0$4,g:o.orderTypeLabels,h:c.orderTypeIndex,i:e.o((...e)=>o.changeOrderType&&o.changeOrderType(...e),"8a"),j:e.t(c.scenicOptions[c.scenicIndex]),k:i._imports_0$4,l:c.scenicOptions,m:c.scenicIndex,n:e.o((...e)=>o.changeScenic&&o.changeScenic(...e),"0c"),o:e.t(c.selectedDate||"选择日期"),p:i._imports_0$5,q:c.selectedDate,r:e.o((...e)=>o.changeDate&&o.changeDate(...e),"f4"),s:e.f(o.visibleRows,(i,t,a)=>({a:e.t(i.scenicName),b:e.t(i.serviceName),c:e.t(i.time),d:e.t(o.moneyNumber(i.earningAmount)),e:i.id})),t:!o.visibleRows.length},(o.visibleRows.length,{}),{v:c.isLeaving?1:""})}]]);wx.createPage(a);
+"use strict";const e=require("../../common/vendor.js"),i=require("../../common/assets.js"),t={components:{GuideNavBar:()=>"../../components/guide-nav-bar/guide-nav-bar.js"},data:()=>({data:{todayEarnings:0,monthEarnings:0,records:[]},orderTypes:[{label:"讲解类型",value:""},{label:"快讲",value:"QUICK"},{label:"精讲",value:"PREMIUM"}],scenicOptions:["景区选择"],orderTypeIndex:0,scenicIndex:0,selectedDate:"",loading:!1,isLeaving:!1}),computed:{orderTypeLabels(){return this.orderTypes.map(e=>e.label)},visibleRows(){return this.data.records.map(e=>({...e,scenicName:e.scenicName||"",serviceName:e.serviceName||this.serviceName(e.orderType),time:this.formatDateTime(e.completedAt)}))}},onShow(){this.loadData()},methods:{goBack(){this.isLeaving||(this.isLeaving=!0,setTimeout(()=>{e.backOrHome()},280))},goWithdraw(){e.routeTo("/pages/withdrawal/index")},loadData(){this.loading||(this.loading=!0,e.getEarnings({serviceType:this.orderTypes[this.orderTypeIndex].value,scenicName:this.scenicIndex>0?this.scenicOptions[this.scenicIndex]:"",date:this.selectedDate}).then(e=>{this.data=e;const i=this.scenicIndex>0?this.scenicOptions[this.scenicIndex]:"";this.scenicOptions=["景区选择",...e.scenicOptions||[]],this.scenicIndex=i?Math.max(this.scenicOptions.indexOf(i),0):0}).catch(i=>{e.index.showToast({title:i.message||"业绩数据加载失败",icon:"none"})}).finally(()=>{this.loading=!1}))},moneyNumber:(e=0)=>Number(e||0).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}),serviceName:e=>String(e||"").includes("QUICK")?"快讲":"精讲",formatDateTime:e=>e?e.replace("T"," ").slice(0,19):"-",changeOrderType(e){this.orderTypeIndex=Number(e.detail.value),this.loadData()},changeScenic(e){this.scenicIndex=Number(e.detail.value),this.loadData()},changeDate(e){this.selectedDate=e.detail.value,this.loadData()}}};if(!Array){e.resolveComponent("guide-nav-bar")()}Math;const a=e._export_sfc(t,[["render",function(t,a,s,n,c,o){return e.e({a:e.o(o.goBack,"46"),b:e.o(o.goWithdraw,"7a"),c:e.p({title:"业绩明细","action-text":"提现"}),d:e.t(o.moneyNumber(c.data.todayEarnings)),e:e.t(o.moneyNumber(c.data.monthEarnings)),f:e.t(o.orderTypeLabels[c.orderTypeIndex]),g:i._imports_0$4,h:o.orderTypeLabels,i:c.orderTypeIndex,j:e.o((...e)=>o.changeOrderType&&o.changeOrderType(...e),"e9"),k:e.t(c.scenicOptions[c.scenicIndex]),l:i._imports_0$4,m:c.scenicOptions,n:c.scenicIndex,o:e.o((...e)=>o.changeScenic&&o.changeScenic(...e),"36"),p:e.t(c.selectedDate||"选择日期"),q:i._imports_0$5,r:c.selectedDate,s:e.o((...e)=>o.changeDate&&o.changeDate(...e),"86"),t:e.f(o.visibleRows,(i,t,a)=>({a:e.t(i.scenicName),b:e.t(i.serviceName),c:e.t(i.time),d:e.t(o.moneyNumber(i.earningAmount)),e:i.id})),v:!o.visibleRows.length},(o.visibleRows.length,{}),{w:c.isLeaving?1:""})}]]);wx.createPage(a);
diff --git a/mingdaojingjiang_guide_app/dist/build/mp-weixin/pages/earnings/index.wxml b/mingdaojingjiang_guide_app/dist/build/mp-weixin/pages/earnings/index.wxml
index 8ee7a19..28aaa8b 100644
--- a/mingdaojingjiang_guide_app/dist/build/mp-weixin/pages/earnings/index.wxml
+++ b/mingdaojingjiang_guide_app/dist/build/mp-weixin/pages/earnings/index.wxml
@@ -1 +1 @@
-<view class="{{['performance-page', v && 'leaving']}}"><guide-nav-bar wx:if="{{b}}" bindback="{{a}}" u-i="936ea45e-0" bind:__l="__l" u-p="{{b}}"/><view class="summary-area"><view class="income-card"><view class="income-label">今日收益</view><view class="income-value">{{c}}</view></view><view class="income-card"><view class="income-label">本月收益</view><view class="income-value">{{d}}</view></view></view><view class="filter-bar"><picker mode="selector" range="{{g}}" value="{{h}}" bindchange="{{i}}"><view class="filter-item"><text>{{e}}</text><image class="filter-arrow" src="{{f}}" mode="aspectFit"/></view></picker><picker mode="selector" range="{{l}}" value="{{m}}" bindchange="{{n}}"><view class="filter-item"><text>{{j}}</text><image class="filter-arrow" src="{{k}}" mode="aspectFit"/></view></picker><picker mode="date" value="{{q}}" bindchange="{{r}}"><view class="filter-item date-filter"><text>{{o}}</text><image class="calendar-icon" src="{{p}}" mode="aspectFit"/></view></picker></view><scroll-view class="detail-list" scroll-y><view wx:for="{{s}}" wx:for-item="row" wx:key="e" class="detail-row"><view class="detail-main"><view class="detail-title">{{row.a}} {{row.b}}</view><view class="detail-time">{{row.c}}</view></view><view class="detail-money">{{row.d}}</view></view><view wx:if="{{t}}" class="empty-text">暂无业绩明细</view></scroll-view></view>
\ No newline at end of file
+<view class="{{['performance-page', w && 'leaving']}}"><guide-nav-bar wx:if="{{c}}" bindback="{{a}}" bindaction="{{b}}" u-i="936ea45e-0" bind:__l="__l" u-p="{{c}}"/><view class="summary-area"><view class="income-card"><view class="income-label">今日收益</view><view class="income-value">{{d}}</view></view><view class="income-card"><view class="income-label">本月收益</view><view class="income-value">{{e}}</view></view></view><view class="filter-bar"><picker mode="selector" range="{{h}}" value="{{i}}" bindchange="{{j}}"><view class="filter-item"><text>{{f}}</text><image class="filter-arrow" src="{{g}}" mode="aspectFit"/></view></picker><picker mode="selector" range="{{m}}" value="{{n}}" bindchange="{{o}}"><view class="filter-item"><text>{{k}}</text><image class="filter-arrow" src="{{l}}" mode="aspectFit"/></view></picker><picker mode="date" value="{{r}}" bindchange="{{s}}"><view class="filter-item date-filter"><text>{{p}}</text><image class="calendar-icon" src="{{q}}" mode="aspectFit"/></view></picker></view><scroll-view class="detail-list" scroll-y><view wx:for="{{t}}" wx:for-item="row" wx:key="e" class="detail-row"><view class="detail-main"><view class="detail-title">{{row.a}} {{row.b}}</view><view class="detail-time">{{row.c}}</view></view><view class="detail-money">{{row.d}}</view></view><view wx:if="{{v}}" class="empty-text">暂无业绩明细</view></scroll-view></view>
\ No newline at end of file
diff --git a/mingdaojingjiang_guide_app/dist/build/mp-weixin/pages/profile/index.js b/mingdaojingjiang_guide_app/dist/build/mp-weixin/pages/profile/index.js
index e7d75ae..9756c01 100644
--- a/mingdaojingjiang_guide_app/dist/build/mp-weixin/pages/profile/index.js
+++ b/mingdaojingjiang_guide_app/dist/build/mp-weixin/pages/profile/index.js
@@ -1 +1 @@
-"use strict";const e=require("../../common/vendor.js"),o=require("../../common/assets.js"),a={components:{GuideNavBar:()=>"../../components/guide-nav-bar/guide-nav-bar.js"},data:()=>({guide:{},isLeaving:!1}),computed:{maskedPhone(){return e.maskPhone(this.guide.phone||"13600004562")}},onShow(){e.getGuideProfile().then(e=>{this.guide=e}).catch(o=>{e.index.showToast({title:o.message||"个人资料加载失败",icon:"none"})})},methods:{goBack(){this.isLeaving||(this.isLeaving=!0,setTimeout(()=>{e.backOrHome()},280))},chooseAvatar(){e.index.chooseImage({count:1,sizeType:["compressed"],sourceType:["album","camera"],success:o=>{const a=o.tempFilePaths&&o.tempFilePaths[0];a&&(e.index.showLoading({title:"上传中"}),e.uploadGuideAvatar(a).then(o=>{this.guide=o,e.index.showToast({title:"头像已更新",icon:"none"})}).catch(o=>{e.index.showToast({title:o.message||"头像上传失败",icon:"none"})}).finally(()=>{e.index.hideLoading()}))}})},goPhoneStepOld(){e.routeTo("/pages/change-phone-old/index")}}};if(!Array){e.resolveComponent("guide-nav-bar")()}Math;const t=e._export_sfc(a,[["render",function(a,t,i,s,n,d){return e.e({a:e.o(d.goBack,"ad"),b:e.p({title:"个人中心"}),c:n.guide.avatar},n.guide.avatar?{d:n.guide.avatar}:{e:o._imports_0$6},{f:o._imports_0$2,g:e.o((...e)=>d.chooseAvatar&&d.chooseAvatar(...e),"06"),h:e.t(d.maskedPhone),i:o._imports_0$2,j:e.o((...e)=>d.goPhoneStepOld&&d.goPhoneStepOld(...e),"e9"),k:n.isLeaving?1:""})}]]);wx.createPage(t);
+"use strict";const e=require("../../common/vendor.js"),o=require("../../common/assets.js"),a={components:{GuideNavBar:()=>"../../components/guide-nav-bar/guide-nav-bar.js"},data:()=>({guide:{},isLeaving:!1}),computed:{maskedPhone(){return e.maskPhone(this.guide.phone||"13600004562")}},onShow(){e.getGuideProfile().then(e=>{this.guide=e}).catch(o=>{e.index.showToast({title:o.message||"个人资料加载失败",icon:"none"})})},methods:{goBack(){this.isLeaving||(this.isLeaving=!0,setTimeout(()=>{e.backOrHome()},280))},chooseAvatar(){e.index.chooseImage({count:1,sizeType:["compressed"],sourceType:["album","camera"],success:o=>{const a=o.tempFilePaths&&o.tempFilePaths[0];a&&(e.index.showLoading({title:"上传中"}),e.uploadGuideAvatar(a).then(o=>{this.guide=o,e.index.showToast({title:"头像已更新",icon:"none"})}).catch(o=>{e.index.showToast({title:o.message||"头像上传失败",icon:"none"})}).finally(()=>{e.index.hideLoading()}))}})},goPhoneStepOld(){e.routeTo("/pages/change-phone-old/index")}}};if(!Array){e.resolveComponent("guide-nav-bar")()}Math;const t=e._export_sfc(a,[["render",function(a,t,i,s,n,d){return e.e({a:e.o(d.goBack,"ad"),b:e.p({title:"个人中心"}),c:n.guide.avatar},n.guide.avatar?{d:n.guide.avatar}:{e:o._imports_0$7},{f:o._imports_0$2,g:e.o((...e)=>d.chooseAvatar&&d.chooseAvatar(...e),"06"),h:e.t(d.maskedPhone),i:o._imports_0$2,j:e.o((...e)=>d.goPhoneStepOld&&d.goPhoneStepOld(...e),"e9"),k:n.isLeaving?1:""})}]]);wx.createPage(t);
diff --git a/mingdaojingjiang_guide_app/dist/build/mp-weixin/project.config.json b/mingdaojingjiang_guide_app/dist/build/mp-weixin/project.config.json
index 242001d..5f686e6 100644
--- a/mingdaojingjiang_guide_app/dist/build/mp-weixin/project.config.json
+++ b/mingdaojingjiang_guide_app/dist/build/mp-weixin/project.config.json
@@ -29,8 +29,15 @@
"list": []
},
"miniprogram": {
- "current": -1,
- "list": []
+ "current": 0,
+ "list": [
+ {
+ "name": "",
+ "path": "",
+ "query": "",
+ "id": 0
+ }
+ ]
}
}
}
\ No newline at end of file
diff --git "a/mingdaojingjiang_guide_app/docs/\345\274\200\345\217\221\350\257\264\346\230\216.md" "b/mingdaojingjiang_guide_app/docs/\345\274\200\345\217\221\350\257\264\346\230\216.md"
index c50c830..43419e1 100644
--- "a/mingdaojingjiang_guide_app/docs/\345\274\200\345\217\221\350\257\264\346\230\216.md"
+++ "b/mingdaojingjiang_guide_app/docs/\345\274\200\345\217\221\350\257\264\346\230\216.md"
@@ -13,8 +13,8 @@
- `pages/orders/index.vue`:历史订单页,按全部讲解、接单中、讲解中、已完成筛选。
- `pages/earnings/index.vue`:业绩明细页,展示今日收益、本月收益、筛选栏和收益明细列表;右上角「提现」进入导游提现。
- `pages/withdrawal/index.vue`:导游提现列表,展示当前可提、提现按钮和提现记录;按进件状态跳转进件、审核中或提现详情。
-- `pages/onboarding/index.vue`:导游进件表单,支持企业/个人主体资料提交审核。
-- `pages/onboarding-pending/index.vue`:进件审核中 / 审核未通过状态页;静态 mock 可通过「刷新审核状态」变为已通过。
+- `pages/onboarding/index.vue`:导游进件表单,支持企业/个人主体资料提交真实接口审核。
+- `pages/onboarding-pending/index.vue`:进件审核中 / 审核未通过状态页;刷新时查询斗拱真实审核状态。
- `pages/withdrawal-detail/index.vue`:填写提现金额,并选择 / 更换审核通过的银行卡后提交。
- `pages/bank-card-select/index.vue`:银行卡列表,仅已通过的卡可选用,支持添加银行卡。
- `pages/bank-card-add/index.vue`:填写卡号、开户省份/城市和开户行。
@@ -108,7 +108,7 @@
## 当前限制
-- 登录、短信验证码、资质认证、提现、导航均为前端占位。
+- 短信验证码、资质认证和导航仍有前端占位;提现流程已接入后端和斗拱。
- 汇合点地图当前使用前端 mock 坐标,真实经纬度、地址和导航文案以后端配置为准。
- 订单数据使用本地 storage mock,会随操作改变状态。
- 真实接单提醒、声音弹窗、位置上报、后台保活需要结合 App / 小程序平台能力继续设计。
@@ -149,3 +149,4 @@
| 2026-08-14 | 业绩明细右上角增加「提现」入口,复用商户端提现静态流程:列表、填写金额、提交成功;当前为 App 本地 mock。 |
| 2026-08-14 | 补齐提现完整静态流程:导游进件、审核状态、选择/填写银行卡、选择开户行;提现详情支持选择或更换已通过银行卡。 |
| 2026-08-14 | 提现复用页顶栏改为浅色(灰底深色标题),与原商户端一致;业绩明细等导游主流程页仍用蓝底导航。 |
+| 2026-08-14 | 提现模块接入真实接口:区分个人/企业进件,审核通过后绑定结算卡,并支持余额、提现记录、提现申请、后台受理和斗拱到账回调。 |
diff --git a/mingdaojingjiang_guide_app/manifest.json b/mingdaojingjiang_guide_app/manifest.json
index 92d28b0..28bb7a3 100644
--- a/mingdaojingjiang_guide_app/manifest.json
+++ b/mingdaojingjiang_guide_app/manifest.json
@@ -47,7 +47,9 @@
]
},
/* ios打包配置 */
- "ios" : {},
+ "ios" : {
+ "dSYMs" : false
+ },
/* SDK配置 */
"sdkConfigs" : {
"geolocation" : {
diff --git a/mingdaojingjiang_guide_app/pages/bank-branch-select/index.vue b/mingdaojingjiang_guide_app/pages/bank-branch-select/index.vue
index 057d5a6..82a0c57 100644
--- a/mingdaojingjiang_guide_app/pages/bank-branch-select/index.vue
+++ b/mingdaojingjiang_guide_app/pages/bank-branch-select/index.vue
@@ -97,7 +97,7 @@
loadBranches() {
this.loading = true
this.loadError = false
- searchBankBranches(this.searchKeyword.trim()).then((items) => {
+ searchBankBranches(this.searchKeyword.trim(), this.cityCode).then((items) => {
this.branches = items || []
this.loading = false
}).catch(() => {
diff --git a/mingdaojingjiang_guide_app/pages/bank-card-add/index.vue b/mingdaojingjiang_guide_app/pages/bank-card-add/index.vue
index 8131572..0dc57ca 100644
--- a/mingdaojingjiang_guide_app/pages/bank-card-add/index.vue
+++ b/mingdaojingjiang_guide_app/pages/bank-card-add/index.vue
@@ -237,13 +237,14 @@
this.submitting = true
addBankCard({
cardNumber: this.cardNumber.trim(),
+ provinceCode: this.selectedProvinceCode,
cityCode: this.selectedCityCode,
bankName: this.selectedBankName,
branchName: this.selectedBranch,
branchCode: this.selectedBranchCode
}).then(() => {
this.submitting = false
- uni.showToast({ title: '已提交审核', icon: 'success' })
+ uni.showToast({ title: '银行卡已添加', icon: 'success' })
setTimeout(() => {
uni.navigateBack()
}, 500)
diff --git a/mingdaojingjiang_guide_app/pages/bank-card-select/index.vue b/mingdaojingjiang_guide_app/pages/bank-card-select/index.vue
index e22611a..81cf894 100644
--- a/mingdaojingjiang_guide_app/pages/bank-card-select/index.vue
+++ b/mingdaojingjiang_guide_app/pages/bank-card-select/index.vue
@@ -9,7 +9,9 @@
<view v-for="card in cards" :key="card.id" class="card" @tap="selectCard(card)">
<view class="row">
<text class="name">{{ card.bankName }}</text>
- <text :class="'status ' + card.status">{{ statusText(card.status) }}</text>
+ <text :class="'status ' + card.status">
+ {{ openingId === card.id ? '入驻中' : statusText(card.status) }}
+ </text>
</view>
<text class="number">{{ card.cardMasked }}</text>
<text class="branch">{{ card.branchName }}</text>
@@ -21,7 +23,7 @@
<script>
import GuideNavBar from '../../components/guide-nav-bar/guide-nav-bar.vue'
-import { getBankCards, saveSelectedBankId } from '../../services/settlement'
+import { getBankCards, openBankCardBusiness, saveSelectedBankId } from '../../services/settlement'
import { backOrHome, routeTo } from '../../utils/router'
export default {
@@ -32,6 +34,7 @@
return {
loading: false,
cards: [],
+ openingId: '',
isLeaving: false
}
},
@@ -53,19 +56,42 @@
},
statusText(value) {
if (value === 'approved') return '已通过'
- if (value === 'rejected') return '未通过'
- return '审核中'
+ if (value === 'pending') return '入驻中'
+ if (value === 'rejected') return '入驻失败'
+ return '待入驻'
},
selectCard(card) {
- if (card.status !== 'approved') {
- uni.showToast({
- title: card.reason || '该银行卡尚未审核通过',
- icon: 'none'
- })
+ if (this.openingId) {
return
}
+ if (card.status === 'approved') {
+ this.finishSelection(card)
+ return
+ }
+ this.openingId = card.id
+ openBankCardBusiness(card.id).then((result) => {
+ this.replaceCard(result)
+ if (result && result.status === 'approved') {
+ this.finishSelection(result)
+ return
+ }
+ uni.showToast({ title: (result && result.reason) || '银行卡业务入驻处理中', icon: 'none' })
+ }).catch((error) => {
+ uni.showToast({ title: (error && error.message) || '银行卡业务入驻失败', icon: 'none' })
+ this.load()
+ }).finally(() => {
+ this.openingId = ''
+ })
+ },
+ finishSelection(card) {
saveSelectedBankId(card.id)
uni.navigateBack()
+ },
+ replaceCard(card) {
+ if (!card) return
+ const index = this.cards.findIndex((item) => item.id === card.id)
+ if (index < 0) return
+ this.cards.splice(index, 1, card)
},
load() {
this.loading = true
@@ -174,6 +200,10 @@
color: #e58b28;
}
+.local {
+ color: #667085;
+}
+
.rejected {
color: #e95b5b;
}
diff --git a/mingdaojingjiang_guide_app/pages/onboarding-pending/index.vue b/mingdaojingjiang_guide_app/pages/onboarding-pending/index.vue
index 6139bb8..c59ae09 100644
--- a/mingdaojingjiang_guide_app/pages/onboarding-pending/index.vue
+++ b/mingdaojingjiang_guide_app/pages/onboarding-pending/index.vue
@@ -38,6 +38,7 @@
data() {
return {
status: 'pending',
+ subjectType: 'individual',
reason: '',
refreshing: false,
isLeaving: false
@@ -78,6 +79,7 @@
loadStatus() {
getOnboardingStatus().then((item) => {
this.status = (item && item.status) || 'pending'
+ this.subjectType = item && item.subjectType === 'enterprise' ? 'enterprise' : 'individual'
this.reason = (item && item.reason) || ''
})
},
@@ -101,7 +103,7 @@
})
},
resubmit() {
- routeTo('/pages/onboarding/index')
+ routeTo('/pages/onboarding/index?subjectType=' + encodeURIComponent(this.subjectType))
},
goWithdraw() {
routeTo('/pages/withdrawal-detail/index')
diff --git a/mingdaojingjiang_guide_app/pages/onboarding/index.vue b/mingdaojingjiang_guide_app/pages/onboarding/index.vue
index 0b71d6b..9132e85 100644
--- a/mingdaojingjiang_guide_app/pages/onboarding/index.vue
+++ b/mingdaojingjiang_guide_app/pages/onboarding/index.vue
@@ -19,6 +19,21 @@
<text class="section-title">企业资料</text>
<view class="field-block">
+ <text class="field-label">企业名称</text>
+ <view class="input-shell" :class="{ 'field-invalid': invalidField === 'enterpriseName' }">
+ <input
+ class="text-input"
+ v-model="enterpriseName"
+ maxlength="128"
+ placeholder="请输入营业执照上的企业名称"
+ placeholder-class="input-placeholder"
+ @input="clearFieldError('enterpriseName')"
+ />
+ </view>
+ <text v-if="invalidField === 'enterpriseName'" class="field-error">{{ errorMessage }}</text>
+ </view>
+
+ <view class="field-block">
<text class="field-label">统一社会信用代码</text>
<view class="input-shell" :class="{ 'field-invalid': invalidField === 'creditCode' }">
<input
@@ -246,6 +261,7 @@
return {
submitting: false,
merchantType: 'enterprise',
+ enterpriseName: '',
creditCode: '',
businessValidity: '固定期限',
businessStartDate: '',
@@ -269,6 +285,11 @@
isLeaving: false,
merchantTypeOptions: ['企业', '个人'],
validityOptions: ['固定期限', '长期']
+ }
+ },
+ onLoad(options) {
+ if (options && (options.subjectType === 'individual' || options.subjectType === 'enterprise')) {
+ this.merchantType = options.subjectType
}
},
methods: {
@@ -387,6 +408,10 @@
return true
},
validateEnterprise() {
+ if (!this.enterpriseName.trim()) {
+ this.setFieldError('enterpriseName', '请输入企业名称')
+ return false
+ }
if (!(/^[0-9A-Z]{18}$/).test(this.creditCode.trim())) {
this.setFieldError('creditCode', '请输入正确的18位统一社会信用代码')
return false
@@ -458,6 +483,7 @@
const contactMobile = this.merchantType === 'enterprise' ? this.administratorPhone.trim() : this.personalPhone.trim()
submitOnboarding({
subjectType: this.merchantType,
+ enterpriseName: this.enterpriseName.trim(),
subjectName: this.subjectName.trim(),
creditCode: this.creditCode.trim(),
subjectIdNumber: this.subjectIdNumber.trim(),
diff --git a/mingdaojingjiang_guide_app/pages/withdrawal-success/index.vue b/mingdaojingjiang_guide_app/pages/withdrawal-success/index.vue
index 4d27eae..c8b8ebf 100644
--- a/mingdaojingjiang_guide_app/pages/withdrawal-success/index.vue
+++ b/mingdaojingjiang_guide_app/pages/withdrawal-success/index.vue
@@ -8,7 +8,7 @@
</view>
<text class="result-title">提交成功,等待审核</text>
<text v-if="withdrawalNo" class="withdrawal-no">提现单号:{{ withdrawalNo }}</text>
- <text class="result-tip">审核通过后将发起到账处理,请留意提现记录状态。</text>
+ <text class="result-tip">提现申请已提交,平台审核通过后将发起到账处理,请留意提现记录状态。</text>
<view class="return-button" @tap="returnToWithdrawal">
<text>返回</text>
</view>
diff --git a/mingdaojingjiang_guide_app/pages/withdrawal/index.vue b/mingdaojingjiang_guide_app/pages/withdrawal/index.vue
index 39c405f..449c5d4 100644
--- a/mingdaojingjiang_guide_app/pages/withdrawal/index.vue
+++ b/mingdaojingjiang_guide_app/pages/withdrawal/index.vue
@@ -10,7 +10,7 @@
<view class="heading">
<text>提现记录</text>
- <text>共 {{ records.length }} 条</text>
+ <text>共 {{ total }} 条</text>
</view>
<scroll-view class="record-list" scroll-y>
@@ -46,6 +46,7 @@
loading: false,
availableAmount: 0,
records: [],
+ total: 0,
isLeaving: false
}
},
@@ -79,8 +80,8 @@
return
}
routeTo('/pages/onboarding/index')
- }).catch(() => {
- routeTo('/pages/onboarding/index')
+ }).catch((error) => {
+ uni.showToast({ title: (error && error.message) || '进件状态查询失败', icon: 'none' })
})
},
loadData() {
@@ -91,6 +92,7 @@
]).then(([summary, page]) => {
this.availableAmount = Number(summary && summary.availableAmount || 0)
this.records = (page && page.records) || []
+ this.total = Number(page && page.total || 0)
}).catch((error) => {
uni.showToast({ title: error.message || '提现记录加载失败', icon: 'none' })
}).finally(() => {
@@ -112,11 +114,13 @@
statusText(status) {
if (status === 'APPROVED') return '已到账'
if (status === 'REJECTED') return '已驳回'
+ if (status === 'PROCESSING') return '到账处理中'
return '待审核'
},
statusClass(status) {
if (status === 'APPROVED') return 'paid'
if (status === 'REJECTED') return 'rejected'
+ if (status === 'PROCESSING') return 'pending'
return 'pending'
}
}
diff --git a/mingdaojingjiang_guide_app/services/settlement.js b/mingdaojingjiang_guide_app/services/settlement.js
index c07d6e0..226cc57 100644
--- a/mingdaojingjiang_guide_app/services/settlement.js
+++ b/mingdaojingjiang_guide_app/services/settlement.js
@@ -1,107 +1,49 @@
-import {
- GUIDE_BANK_CARDS_KEY,
- GUIDE_ONBOARDING_KEY,
- GUIDE_SELECTED_BANK_KEY,
- GUIDE_SELECTED_BRANCH_KEY,
- bankBranches,
- initialBankCards,
- initialOnboarding
-} from '../constants/mock'
-
-function formatNow() {
- const now = new Date()
- const pad = (value) => String(value).padStart(2, '0')
- return `${now.getFullYear()}-${pad(now.getMonth() + 1)}-${pad(now.getDate())} ${pad(now.getHours())}:${pad(now.getMinutes())}:${pad(now.getSeconds())}`
-}
-
-function maskCard(cardNumber) {
- const digits = String(cardNumber || '').replace(/\D/g, '')
- return `****${digits.slice(-4)}`
-}
-
-function readOnboarding() {
- const stored = uni.getStorageSync(GUIDE_ONBOARDING_KEY)
- if (stored && stored.status) {
- return stored
- }
- uni.setStorageSync(GUIDE_ONBOARDING_KEY, { ...initialOnboarding })
- return { ...initialOnboarding }
-}
-
-function writeOnboarding(data) {
- uni.setStorageSync(GUIDE_ONBOARDING_KEY, data)
-}
-
-function readBankCards() {
- const stored = uni.getStorageSync(GUIDE_BANK_CARDS_KEY)
- if (Array.isArray(stored) && stored.length) {
- return stored
- }
- uni.setStorageSync(GUIDE_BANK_CARDS_KEY, initialBankCards)
- return initialBankCards.slice()
-}
-
-function writeBankCards(cards) {
- uni.setStorageSync(GUIDE_BANK_CARDS_KEY, cards)
-}
+import { GUIDE_SELECTED_BANK_KEY, GUIDE_SELECTED_BRANCH_KEY } from '../constants/mock'
+import { request } from '../utils/request'
export function getOnboardingStatus() {
- return Promise.resolve(readOnboarding())
+ return request({ url: '/guide/settlement/onboarding/status' })
}
export function submitOnboarding(payload) {
- const next = {
- status: 'pending',
- reason: '',
- submittedAt: formatNow(),
- payload: payload || {}
- }
- writeOnboarding(next)
- return Promise.resolve(next)
+ return request({
+ url: '/guide/settlement/onboarding',
+ method: 'POST',
+ data: payload
+ })
}
export function refreshOnboardingStatus() {
- const current = readOnboarding()
- if (current.status === 'pending') {
- const next = {
- ...current,
- status: 'approved',
- reason: '',
- reviewedAt: formatNow()
- }
- writeOnboarding(next)
- return Promise.resolve(next)
- }
- return Promise.resolve(current)
+ return getOnboardingStatus()
}
export function getBankCards() {
- return Promise.resolve(readBankCards())
+ return request({ url: '/guide/settlement/bank-cards' })
}
export function addBankCard(payload) {
- const cards = readBankCards()
- const created = {
- id: `card_${Date.now()}`,
- bankName: payload.bankName,
- branchName: payload.branchName,
- cardMasked: maskCard(payload.cardNumber),
- status: 'pending',
- reason: ''
- }
- writeBankCards([created, ...cards])
- return Promise.resolve(created)
+ return request({
+ url: '/guide/settlement/bank-cards',
+ method: 'POST',
+ data: payload
+ })
}
-export function searchBankBranches(keyword = '') {
- const query = String(keyword || '').trim()
- const items = bankBranches.filter((item) => {
- if (!query) {
- return true
- }
- return item.bankName.indexOf(query) >= 0 || item.branchName.indexOf(query) >= 0
+export function openBankCardBusiness(cardId) {
+ return request({
+ url: '/guide/settlement/bank-cards/' + encodeURIComponent(cardId) + '/business-open',
+ method: 'POST'
})
- return Promise.resolve(items)
+}
+
+export function searchBankBranches(keyword = '', cityCode = '') {
+ return request({
+ url: '/guide/settlement/bank-branches',
+ data: {
+ keyword: String(keyword || '').trim() || undefined,
+ cityCode: String(cityCode || '').trim() || undefined
+ }
+ })
}
export function saveSelectedBankId(id) {
diff --git a/mingdaojingjiang_guide_app/services/withdrawal.js b/mingdaojingjiang_guide_app/services/withdrawal.js
index 3907234..6eda9f9 100644
--- a/mingdaojingjiang_guide_app/services/withdrawal.js
+++ b/mingdaojingjiang_guide_app/services/withdrawal.js
@@ -1,49 +1,23 @@
-import { GUIDE_WITHDRAWALS_KEY, initialWithdrawals, withdrawalSummary } from '../constants/mock'
-
-function readWithdrawals() {
- const records = uni.getStorageSync(GUIDE_WITHDRAWALS_KEY)
- if (Array.isArray(records) && records.length) {
- return records
- }
- uni.setStorageSync(GUIDE_WITHDRAWALS_KEY, initialWithdrawals)
- return initialWithdrawals.slice()
-}
-
-function writeWithdrawals(records) {
- uni.setStorageSync(GUIDE_WITHDRAWALS_KEY, records)
-}
-
-function formatNow() {
- const now = new Date()
- const pad = (value) => String(value).padStart(2, '0')
- return `${now.getFullYear()}-${pad(now.getMonth() + 1)}-${pad(now.getDate())} ${pad(now.getHours())}:${pad(now.getMinutes())}:${pad(now.getSeconds())}`
-}
+import { request } from '../utils/request'
export function getWithdrawalSummary() {
- return Promise.resolve({ ...withdrawalSummary })
+ return request({ url: '/guide/withdrawals/summary' })
}
-export function getWithdrawals() {
- const records = readWithdrawals()
- return Promise.resolve({
- records,
- total: records.length
+export function getWithdrawals(page = 1, size = 50) {
+ return request({
+ url: '/guide/withdrawals',
+ data: { page, size }
})
}
export function createWithdrawal(amount, bank) {
- const records = readWithdrawals()
- const created = {
- id: `WD${Date.now()}`,
- withdrawalNo: `WD${Date.now()}`,
- amount: Number(Number(amount).toFixed(2)),
- status: 'PENDING',
- reason: '',
- bankName: (bank && bank.bankName) || '',
- cardMasked: (bank && bank.cardMasked) || '',
- appliedAt: formatNow(),
- processedAt: ''
- }
- writeWithdrawals([created, ...records])
- return Promise.resolve(created)
+ return request({
+ url: '/guide/withdrawals',
+ method: 'POST',
+ data: {
+ amount: Number(Number(amount).toFixed(2)),
+ bankCardId: bank && bank.id
+ }
+ })
}
--
Gitblit v1.7.1