@uxda/appkit 4.2.93 → 4.2.95

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -4,19 +4,21 @@ import '@nutui/nutui-taro/dist/packages/checkbox/style/css';
4
4
  import { defineComponent, reactive, openBlock, createBlock, withCtx, createElementBlock, Fragment, renderList, normalizeClass, createElementVNode, toDisplayString, createTextVNode, ref, computed, onUnmounted, resolveDirective, createCommentVNode, withDirectives, renderSlot, createVNode, normalizeStyle, unref, isRef, onMounted, createStaticVNode, watch, vShow, mergeModels, useModel, resolveComponent, vModelText, watchPostEffect, withModifiers } from 'vue';
5
5
  import '@nutui/nutui-taro/dist/packages/grid/style/css';
6
6
  import '@nutui/nutui-taro/dist/packages/griditem/style/css';
7
- import Taro, { showModal, getSystemInfoSync, getMenuButtonBoundingClientRect, uploadFile, request as request$1, showToast, chooseMedia, chooseMessageFile, showLoading, hideLoading, useRouter, useDidShow, getStorageSync } from '@tarojs/taro';
7
+ import Taro, { showModal, getSystemInfoSync, getMenuButtonBoundingClientRect, uploadFile, request as request$1, showToast, chooseMedia, chooseMessageFile, showLoading, hideLoading, getStorageSync, setStorageSync, getSystemInfo, getNetworkType, getEnv, getAccountInfoSync, getPerformance, onAppHide, useDidShow, onAppShow, onNetworkStatusChange, useRouter } from '@tarojs/taro';
8
8
  import '@nutui/nutui-taro/dist/packages/popup/style/css';
9
9
  import isMobilePhone from 'validator/es/lib/isMobilePhone';
10
10
  import isIdentityCard from 'validator/es/lib/isIdentityCard';
11
11
  import { NsForm, NsInput, NsButton, NsIcon, usePopup, useNutshell, NsButtonGroup, usePaging, NsPage, NsTabs, NsTabsItem, NsPageContent, NsSkeleton, NsRepeator, NsCard, NsEmpty, NsCheckbox } from '@uxda/nutshell/taro';
12
12
  import '@nutui/nutui-taro/dist/packages/actionsheet/style/css';
13
+ import pako from 'pako';
14
+ import dsBridge from 'dsbridge';
15
+ import { debounce as debounce$1 } from 'lodash-es';
13
16
  import debounce from 'lodash-es/debounce';
14
17
  import '@nutui/nutui-taro/dist/packages/dialog/style/css';
15
18
  import '@nutui/nutui-taro/dist/packages/datepicker/style/css';
16
19
  import dayjs from 'dayjs';
17
20
  import groupBy from 'lodash-es/groupBy';
18
21
  import { ScrollView, Swiper, SwiperItem } from '@tarojs/components';
19
- import dsBridge from 'dsbridge';
20
22
  import { IconFont } from '@nutui/icons-vue-taro';
21
23
  import '@nutui/nutui-taro/dist/packages/form/style/css';
22
24
  import '@nutui/nutui-taro/dist/packages/formitem/style/css';
@@ -1519,6 +1521,1081 @@ function createHttp(config) {
1519
1521
  };
1520
1522
  }
1521
1523
 
1524
+ function dataURItoBlob(dataURI) {
1525
+ const byteString = atob(dataURI.split(",")[1]);
1526
+ const mimeString = dataURI.split(",")[0].split(":")[1].split(";")[0];
1527
+ const ab = new ArrayBuffer(byteString.length);
1528
+ const ia = new Uint8Array(ab);
1529
+ for (let i = 0; i < byteString.length; i++) {
1530
+ ia[i] = byteString.charCodeAt(i);
1531
+ }
1532
+ return new Blob([ab], { type: mimeString });
1533
+ }
1534
+ function isWeb() {
1535
+ const env = process.env.TARO_ENV || "";
1536
+ return env === "h5" || Taro.getEnv() === "WEB";
1537
+ }
1538
+ function isApp() {
1539
+ return dsBridge.hasNativeMethod("openWebPage");
1540
+ }
1541
+
1542
+ var __defProp = Object.defineProperty;
1543
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1544
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
1545
+ const DEFAULT_CONFIG = {
1546
+ enabled: true,
1547
+ debug: false,
1548
+ batchSize: 30,
1549
+ flushInterval: 1e5,
1550
+ apiEndpoint: ""
1551
+ };
1552
+ class TrackingSDK {
1553
+ // 用户信息(优先使用)
1554
+ constructor(config = {}) {
1555
+ __publicField(this, "config");
1556
+ __publicField(this, "eventQueue", []);
1557
+ __publicField(this, "currentPage", "");
1558
+ __publicField(this, "pageStartTime", 0);
1559
+ __publicField(this, "flushTimer", null);
1560
+ __publicField(this, "isInitialized", false);
1561
+ __publicField(this, "pageHistory", []);
1562
+ // 页面历史记录
1563
+ __publicField(this, "PAGE_HISTORY_KEY", "tracking_page_history");
1564
+ // 存储键
1565
+ __publicField(this, "MAX_HISTORY_LENGTH", 10);
1566
+ // 最大历史记录数
1567
+ __publicField(this, "userInfo");
1568
+ this.config = { ...DEFAULT_CONFIG, ...config };
1569
+ if (config.userInfo) {
1570
+ this.userInfo = config.userInfo;
1571
+ }
1572
+ this.init();
1573
+ }
1574
+ /**
1575
+ * 初始化SDK
1576
+ */
1577
+ init() {
1578
+ if (this.isInitialized) return;
1579
+ this.isInitialized = true;
1580
+ this.loadPageHistory();
1581
+ this.setupAutoTracking();
1582
+ this.startFlushTimer();
1583
+ if (this.config.debug) {
1584
+ console.log("[TrackingSDK] \u521D\u59CB\u5316\u5B8C\u6210", this.config);
1585
+ }
1586
+ }
1587
+ /**
1588
+ * 加载页面历史记录
1589
+ */
1590
+ loadPageHistory() {
1591
+ try {
1592
+ const historyStr = getStorageSync(this.PAGE_HISTORY_KEY);
1593
+ if (historyStr) {
1594
+ this.pageHistory = JSON.parse(historyStr);
1595
+ }
1596
+ } catch (error) {
1597
+ if (this.config.debug) {
1598
+ console.log("[TrackingSDK] \u52A0\u8F7D\u9875\u9762\u5386\u53F2\u5931\u8D25:", error);
1599
+ }
1600
+ this.pageHistory = [];
1601
+ }
1602
+ }
1603
+ /**
1604
+ * 简单的Token加密 (Base64 + 反转)
1605
+ * @returns 加密后的token字符串
1606
+ */
1607
+ encryptToken() {
1608
+ const raw = `Ddjf@Log1125|${Date.now()}`;
1609
+ let base64;
1610
+ if (typeof btoa !== "undefined") {
1611
+ base64 = btoa(unescape(encodeURIComponent(raw)));
1612
+ } else {
1613
+ base64 = this.base64Encode(raw);
1614
+ }
1615
+ return base64.split("").reverse().join("");
1616
+ }
1617
+ /**
1618
+ * Base64 编码(降级方案)
1619
+ */
1620
+ base64Encode(str) {
1621
+ const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
1622
+ let output = "";
1623
+ let i = 0;
1624
+ while (i < str.length) {
1625
+ const a = str.charCodeAt(i++);
1626
+ const b = i < str.length ? str.charCodeAt(i++) : 0;
1627
+ const c = i < str.length ? str.charCodeAt(i++) : 0;
1628
+ const bitmap = a << 16 | b << 8 | c;
1629
+ output += chars.charAt(bitmap >> 18 & 63);
1630
+ output += chars.charAt(bitmap >> 12 & 63);
1631
+ output += i - 2 < str.length ? chars.charAt(bitmap >> 6 & 63) : "=";
1632
+ output += i - 1 < str.length ? chars.charAt(bitmap & 63) : "=";
1633
+ }
1634
+ return output;
1635
+ }
1636
+ /**
1637
+ * 保存页面历史记录
1638
+ */
1639
+ savePageHistory() {
1640
+ try {
1641
+ setStorageSync(this.PAGE_HISTORY_KEY, JSON.stringify(this.pageHistory));
1642
+ } catch (error) {
1643
+ if (this.config.debug) {
1644
+ console.log("[TrackingSDK] \u4FDD\u5B58\u9875\u9762\u5386\u53F2\u5931\u8D25:", error);
1645
+ }
1646
+ }
1647
+ }
1648
+ /**
1649
+ * 添加页面到历史记录
1650
+ */
1651
+ addPageToHistory(route, title) {
1652
+ const history = {
1653
+ route,
1654
+ title,
1655
+ timestamp: Date.now()
1656
+ };
1657
+ this.pageHistory.push(history);
1658
+ if (this.pageHistory.length > this.MAX_HISTORY_LENGTH) {
1659
+ this.pageHistory.shift();
1660
+ }
1661
+ this.savePageHistory();
1662
+ }
1663
+ /**
1664
+ * 获取上一页信息(从历史记录中)
1665
+ */
1666
+ getLastPageFromHistory() {
1667
+ if (this.pageHistory.length >= 2) {
1668
+ return this.pageHistory[this.pageHistory.length - 2];
1669
+ }
1670
+ return null;
1671
+ }
1672
+ /**
1673
+ * 清空页面历史记录
1674
+ */
1675
+ clearPageHistory() {
1676
+ this.pageHistory = [];
1677
+ this.savePageHistory();
1678
+ }
1679
+ /**
1680
+ * 获取用户信息
1681
+ * 优先级:1. 初始化时传入的userInfo 2. Storage中的用户信息 3. 生成新的sessionId
1682
+ */
1683
+ getUserInfo() {
1684
+ if (this.userInfo) {
1685
+ return {
1686
+ userId: this.userInfo.userId,
1687
+ tenantId: this.userInfo.tenantId,
1688
+ sessionId: this.userInfo.sessionId || this.generateSessionId()
1689
+ };
1690
+ }
1691
+ return { sessionId: this.generateSessionId() };
1692
+ }
1693
+ /**
1694
+ * 生成会话ID
1695
+ */
1696
+ generateSessionId() {
1697
+ return `session_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
1698
+ }
1699
+ /**
1700
+ * 获取设备信息
1701
+ */
1702
+ async getDeviceInfo() {
1703
+ try {
1704
+ const systemInfo = await getSystemInfo();
1705
+ let networkType = "";
1706
+ try {
1707
+ const networkInfo = await getNetworkType();
1708
+ networkType = networkInfo.networkType || "";
1709
+ } catch {
1710
+ networkType = "";
1711
+ }
1712
+ return {
1713
+ device_type: systemInfo.platform === "ios" || systemInfo.platform === "android" ? "mobile" : "desktop",
1714
+ os: systemInfo.platform,
1715
+ os_version: systemInfo.system,
1716
+ brand: systemInfo.brand || "",
1717
+ model: systemInfo.model || "",
1718
+ network_type: networkType
1719
+ };
1720
+ } catch {
1721
+ return {};
1722
+ }
1723
+ }
1724
+ /**
1725
+ * 获取应用信息
1726
+ */
1727
+ getAppInfo() {
1728
+ try {
1729
+ const env = getEnv();
1730
+ if (env === "WEAPP") {
1731
+ const accountInfo = getAccountInfoSync?.();
1732
+ return {
1733
+ app_version: accountInfo?.miniProgram?.version || "1.0.0",
1734
+ package_name: accountInfo?.miniProgram?.appId || "",
1735
+ app_channel: "WeChat"
1736
+ };
1737
+ } else {
1738
+ return {
1739
+ app_version: "1.0.0",
1740
+ package_name: "",
1741
+ app_channel: env === "WEB" ? "H5" : "App Store"
1742
+ };
1743
+ }
1744
+ } catch {
1745
+ return {
1746
+ app_version: "1.0.0",
1747
+ package_name: "",
1748
+ app_channel: getEnv() === "WEB" ? "H5" : "Unknown"
1749
+ };
1750
+ }
1751
+ }
1752
+ /**
1753
+ * 获取来源类型
1754
+ */
1755
+ getSourceType() {
1756
+ const env = getEnv();
1757
+ if (isApp()) return "app";
1758
+ if (env === "WEB") return "H5";
1759
+ if (env === "WEAPP") return "app";
1760
+ return "PC";
1761
+ }
1762
+ /**
1763
+ * 获取页面性能数据
1764
+ */
1765
+ async getPerformanceData() {
1766
+ try {
1767
+ const performanceData = {};
1768
+ const env = getEnv();
1769
+ if (env === "WEB") {
1770
+ if (typeof window !== "undefined" && window.performance) {
1771
+ const perfEntries = window.performance.getEntriesByType("navigation");
1772
+ if (perfEntries && perfEntries.length > 0) {
1773
+ const navigationTiming = perfEntries[0];
1774
+ performanceData.page_load_time = Math.round(navigationTiming.duration || 0);
1775
+ performanceData.response_time = Math.round(
1776
+ (navigationTiming.responseEnd || 0) - (navigationTiming.requestStart || 0)
1777
+ );
1778
+ }
1779
+ const memory = window.performance.memory;
1780
+ if (memory) {
1781
+ const usedMemory = memory.usedJSHeapSize || 0;
1782
+ const totalMemory = memory.jsHeapSizeLimit || 0;
1783
+ if (totalMemory > 0) {
1784
+ performanceData.memory_usage = Number((usedMemory / totalMemory * 100).toFixed(2));
1785
+ }
1786
+ }
1787
+ }
1788
+ } else {
1789
+ const performance = await getPerformance();
1790
+ if (performance) {
1791
+ const entryList = performance.getEntriesByType?.("navigation");
1792
+ if (entryList && entryList.length > 0) {
1793
+ const navigationTiming = entryList[0];
1794
+ performanceData.page_load_time = Math.round(navigationTiming.duration || 0);
1795
+ performanceData.response_time = Math.round(
1796
+ (navigationTiming.responseEnd || 0) - (navigationTiming.requestStart || 0)
1797
+ );
1798
+ }
1799
+ if (env === "WEAPP") {
1800
+ try {
1801
+ const performanceObj = performance;
1802
+ const memoryInfo = performanceObj?.getMemoryInfo?.();
1803
+ if (memoryInfo) {
1804
+ const usedMemory = memoryInfo.usedJSHeapSize || 0;
1805
+ const totalMemory = memoryInfo.totalJSHeapSize || memoryInfo.jsHeapSizeLimit || 0;
1806
+ if (totalMemory > 0) {
1807
+ performanceData.memory_usage = Number(
1808
+ (usedMemory / totalMemory * 100).toFixed(2)
1809
+ );
1810
+ }
1811
+ }
1812
+ } catch {
1813
+ }
1814
+ }
1815
+ }
1816
+ }
1817
+ return performanceData;
1818
+ } catch (error) {
1819
+ if (this.config.debug) {
1820
+ console.log("[TrackingSDK] \u83B7\u53D6\u6027\u80FD\u6570\u636E\u5931\u8D25:", error);
1821
+ }
1822
+ return {};
1823
+ }
1824
+ }
1825
+ /**
1826
+ * 创建基础埋点数据(新版数据结构)
1827
+ */
1828
+ async createBaseTrackingData(eventType, customData) {
1829
+ const userInfo = this.getUserInfo();
1830
+ const pagePath = customData?.pagePath || this.currentPage || "";
1831
+ const now = Date.now();
1832
+ const pageData = {};
1833
+ const eventData = {};
1834
+ let logType = "";
1835
+ let appInfo = {};
1836
+ let deviceInfo = {};
1837
+ let performanceData = {};
1838
+ if (eventType === "app_device_info" /* APP_DEVICE_INFO */) {
1839
+ deviceInfo = await this.getDeviceInfo();
1840
+ appInfo = this.getAppInfo();
1841
+ } else {
1842
+ if (pagePath) {
1843
+ pageData.page_url = pagePath;
1844
+ pageData.page_name = customData?.pageTitle || this.getPageTitle(pagePath);
1845
+ pageData.page_referrer = customData?.lastPagePath || "";
1846
+ pageData.previous_page_name = customData?.lastPageTitle || "";
1847
+ if (this.pageStartTime) {
1848
+ pageData.page_start_time = new Date(this.pageStartTime).toISOString();
1849
+ pageData.page_duration = now - this.pageStartTime;
1850
+ }
1851
+ }
1852
+ if (eventType === "click" /* CLICK */) {
1853
+ eventData.event_type = "click";
1854
+ eventData.event_name = customData?.elementText || customData?.businessData?.elementText || "\u70B9\u51FB\u4E8B\u4EF6";
1855
+ eventData.element_id = customData?.elementId || "";
1856
+ } else if (eventType === "custom" /* CUSTOM */) {
1857
+ eventData.event_type = "custom";
1858
+ eventData.event_name = customData?.businessData?.eventName || "\u81EA\u5B9A\u4E49\u4E8B\u4EF6";
1859
+ } else {
1860
+ eventData.event_type = eventType;
1861
+ eventData.event_name = eventType;
1862
+ }
1863
+ if (eventType === "page_view" /* PAGE_VIEW */ || customData?.businessData?.performance) {
1864
+ performanceData = await this.getPerformanceData();
1865
+ }
1866
+ }
1867
+ if (["click" /* CLICK */, "custom" /* CUSTOM */].includes(eventType)) {
1868
+ logType = "event";
1869
+ } else if (["page_view" /* PAGE_VIEW */, "page_leave" /* PAGE_LEAVE */].includes(eventType)) {
1870
+ logType = "page";
1871
+ } else if (["app_device_info" /* APP_DEVICE_INFO */].includes(eventType)) {
1872
+ logType = "device";
1873
+ }
1874
+ const finalPerformanceData = {
1875
+ ...performanceData,
1876
+ ...customData?.businessData?.performance
1877
+ };
1878
+ const logData = {};
1879
+ if (Object.keys(pageData).length > 0) {
1880
+ logData.page = pageData;
1881
+ }
1882
+ if (Object.keys(eventData).length > 0) {
1883
+ logData.event = eventData;
1884
+ }
1885
+ if (Object.keys(appInfo).length > 0) {
1886
+ logData.app = appInfo;
1887
+ }
1888
+ if (Object.keys(deviceInfo).length > 0) {
1889
+ logData.device = deviceInfo;
1890
+ }
1891
+ if (Object.keys(finalPerformanceData).length > 0) {
1892
+ logData.performance = finalPerformanceData;
1893
+ }
1894
+ const errorData = customData?.businessData?.error;
1895
+ if (errorData && Object.keys(errorData).length > 0) {
1896
+ logData.error = errorData;
1897
+ }
1898
+ const trackingData = {
1899
+ log_id: `${now}_${Math.random().toString(36).substr(2, 9)}`,
1900
+ log_time: now,
1901
+ log_type: logType || "event",
1902
+ tenant_id: customData?.tenantId || userInfo.tenantId || "",
1903
+ user_id: customData?.userId || userInfo.userId || "",
1904
+ source: this.getSourceType(),
1905
+ session_id: userInfo.sessionId || "",
1906
+ log_data: logData
1907
+ };
1908
+ return trackingData;
1909
+ }
1910
+ /**
1911
+ * 根据页面路径获取页面标题
1912
+ */
1913
+ getPageTitle(pagePath) {
1914
+ const titleMap = {
1915
+ "/aiapprove/pages": "AI\u5BA1\u6279",
1916
+ "/aiapprove/views": "\u4F01\u660E\u661F",
1917
+ "/pages/beidou": "\u5317\u6597\u661F",
1918
+ "/pages/contracts": "\u8702\u9E1F\u7B7E\u7EA6",
1919
+ "/pages/user": "\u6211\u7684"
1920
+ };
1921
+ for (const [path, title] of Object.entries(titleMap)) {
1922
+ if (pagePath.includes(path)) {
1923
+ return title;
1924
+ }
1925
+ }
1926
+ return pagePath;
1927
+ }
1928
+ /**
1929
+ * 添加埋点数据到队列
1930
+ */
1931
+ addToQueue(data) {
1932
+ if (!this.config.enabled) return;
1933
+ this.eventQueue.push(data);
1934
+ if (this.config.debug) {
1935
+ console.log("[TrackingSDK] \u6DFB\u52A0\u57CB\u70B9\u6570\u636E:", data);
1936
+ }
1937
+ if (this.eventQueue.length >= this.config.batchSize) {
1938
+ this.flush();
1939
+ }
1940
+ }
1941
+ /**
1942
+ * 发送埋点数据
1943
+ */
1944
+ async flush() {
1945
+ if (this.eventQueue.length === 0) return;
1946
+ const events = [...this.eventQueue];
1947
+ this.eventQueue = [];
1948
+ try {
1949
+ const jsonStr = JSON.stringify(events);
1950
+ const compressed = pako.deflate(jsonStr);
1951
+ const encryptedToken = this.encryptToken();
1952
+ const { success } = await this.http({
1953
+ url: `${this.config.apiEndpoint}?contentId=${encryptedToken}`,
1954
+ method: "POST",
1955
+ data: compressed,
1956
+ header: {
1957
+ "Content-Encoding": "deflate"
1958
+ }
1959
+ });
1960
+ if (success && this.config.debug) {
1961
+ console.log("[TrackingSDK] \u57CB\u70B9\u6570\u636E\u53D1\u9001\u6210\u529F:", events.length, "\u6761");
1962
+ }
1963
+ } catch (error) {
1964
+ console.error("[TrackingSDK] \u57CB\u70B9\u6570\u636E\u53D1\u9001\u5931\u8D25:", error);
1965
+ if (events.length > 0) {
1966
+ this.eventQueue.unshift(...events);
1967
+ }
1968
+ }
1969
+ }
1970
+ /**
1971
+ * 请求拦截
1972
+ */
1973
+ http(params) {
1974
+ return new Promise((resolve, reject) => {
1975
+ request$1({
1976
+ url: params.url,
1977
+ method: params.method || "GET",
1978
+ data: params.data,
1979
+ header: params.header
1980
+ }).then((res) => {
1981
+ console.log("===res", res);
1982
+ resolve(res.data);
1983
+ }).catch((err) => {
1984
+ reject(err);
1985
+ });
1986
+ });
1987
+ }
1988
+ /**
1989
+ * 启动定时刷新
1990
+ */
1991
+ startFlushTimer() {
1992
+ if (this.flushTimer) {
1993
+ clearInterval(this.flushTimer);
1994
+ }
1995
+ this.flushTimer = setInterval(() => {
1996
+ this.flush();
1997
+ }, this.config.flushInterval);
1998
+ }
1999
+ /**
2000
+ * 设置自动埋点
2001
+ */
2002
+ setupAutoTracking() {
2003
+ onAppHide(() => {
2004
+ this.trackPageLeave();
2005
+ this.flushNow();
2006
+ });
2007
+ if (getEnv() === "WEB" && typeof window !== "undefined") {
2008
+ window.addEventListener("beforeunload", () => {
2009
+ this.flushNow();
2010
+ });
2011
+ document.addEventListener("visibilitychange", () => {
2012
+ if (document.visibilityState === "hidden") {
2013
+ this.flushNow();
2014
+ }
2015
+ });
2016
+ window.addEventListener("pagehide", () => {
2017
+ this.flushNow();
2018
+ });
2019
+ }
2020
+ }
2021
+ /**
2022
+ * 手动埋点 - 页面访问
2023
+ */
2024
+ async trackPageView(pageTitle) {
2025
+ const currentPage = this.getPageInfoByIndex();
2026
+ const currentPath = currentPage.route || "";
2027
+ const currentTitle = pageTitle || currentPage.options?.title || currentPage.config?.navigationBarTitleText || "";
2028
+ if (currentPath) {
2029
+ this.addPageToHistory(currentPath, currentTitle);
2030
+ }
2031
+ let lastPath = "";
2032
+ let lastTitle = "";
2033
+ const lastPageHistory = this.getLastPageFromHistory();
2034
+ if (lastPageHistory) {
2035
+ lastPath = lastPageHistory.route;
2036
+ lastTitle = lastPageHistory.title;
2037
+ }
2038
+ this.currentPage = currentPath;
2039
+ this.pageStartTime = Date.now();
2040
+ const data = await this.createBaseTrackingData("page_view" /* PAGE_VIEW */, {
2041
+ pagePath: currentPath,
2042
+ pageTitle: currentTitle,
2043
+ lastPagePath: lastPath,
2044
+ lastPageTitle: lastTitle
2045
+ });
2046
+ this.addToQueue(data);
2047
+ }
2048
+ /**
2049
+ * 手动埋点 - 页面离开
2050
+ */
2051
+ async trackPageLeave(pagePath) {
2052
+ const path = pagePath || this.currentPage;
2053
+ if (!path) return;
2054
+ const data = await this.createBaseTrackingData("page_leave" /* PAGE_LEAVE */, {
2055
+ pagePath: path
2056
+ });
2057
+ this.addToQueue(data);
2058
+ }
2059
+ /**
2060
+ * 手动埋点 - 点击事件
2061
+ */
2062
+ async trackClick(elementId, elementText) {
2063
+ const data = await this.createBaseTrackingData("click" /* CLICK */, {
2064
+ elementId,
2065
+ elementText
2066
+ });
2067
+ this.addToQueue(data);
2068
+ }
2069
+ /**
2070
+ * 手动埋点 - 自定义事件
2071
+ */
2072
+ async trackCustom(eventName, customData) {
2073
+ const data = await this.createBaseTrackingData("custom" /* CUSTOM */, {
2074
+ businessData: {
2075
+ eventName,
2076
+ ...customData
2077
+ }
2078
+ });
2079
+ this.addToQueue(data);
2080
+ }
2081
+ /**
2082
+ * 手动埋点 - 业务事件
2083
+ */
2084
+ async trackBusiness(event, businessData) {
2085
+ const data = await this.createBaseTrackingData(event, {
2086
+ businessData
2087
+ });
2088
+ this.addToQueue(data);
2089
+ }
2090
+ /**
2091
+ * 手动埋点 - app 和 device 信息
2092
+ */
2093
+ async trackAppDeviceInfo() {
2094
+ const data = await this.createBaseTrackingData("app_device_info" /* APP_DEVICE_INFO */, {});
2095
+ this.addToQueue(data);
2096
+ }
2097
+ /**
2098
+ * 获取指定页面信息
2099
+ */
2100
+ getPageInfoByIndex(index = 1) {
2101
+ try {
2102
+ const pages = getCurrentPages();
2103
+ const currentPage = pages[pages.length - index];
2104
+ return currentPage || {};
2105
+ } catch {
2106
+ return {};
2107
+ }
2108
+ }
2109
+ /**
2110
+ * 更新配置
2111
+ */
2112
+ updateConfig(newConfig) {
2113
+ this.config = {
2114
+ enabled: newConfig.enabled ?? this.config.enabled,
2115
+ debug: newConfig.debug ?? this.config.debug,
2116
+ batchSize: newConfig.batchSize ?? this.config.batchSize,
2117
+ flushInterval: newConfig.flushInterval ?? this.config.flushInterval,
2118
+ apiEndpoint: newConfig.apiEndpoint ?? this.config.apiEndpoint,
2119
+ userInfo: newConfig.userInfo ?? this.userInfo
2120
+ };
2121
+ if (newConfig.userInfo !== void 0) {
2122
+ this.userInfo = newConfig.userInfo;
2123
+ }
2124
+ if (newConfig.flushInterval) {
2125
+ this.startFlushTimer();
2126
+ }
2127
+ }
2128
+ /**
2129
+ * 立即发送所有待发送的数据(同步方式)
2130
+ */
2131
+ flushNow() {
2132
+ if (this.eventQueue.length === 0) return;
2133
+ const events = [...this.eventQueue];
2134
+ this.eventQueue = [];
2135
+ try {
2136
+ const env = getEnv();
2137
+ if (env === "WEB" && typeof navigator !== "undefined" && navigator.sendBeacon) {
2138
+ const blob = new Blob([JSON.stringify(events)], {
2139
+ type: "application/json"
2140
+ });
2141
+ const encryptedToken = this.encryptToken();
2142
+ const sent = navigator.sendBeacon(
2143
+ `${this.config.apiEndpoint}?contentId=${encryptedToken}`,
2144
+ blob
2145
+ );
2146
+ if (this.config.debug) {
2147
+ console.log(
2148
+ "[TrackingSDK] \u4F7F\u7528 sendBeacon \u53D1\u9001:",
2149
+ sent ? "\u6210\u529F" : "\u5931\u8D25",
2150
+ events.length,
2151
+ "\u6761"
2152
+ );
2153
+ }
2154
+ if (!sent) {
2155
+ this.eventQueue.unshift(...events);
2156
+ this.flush().catch(console.error);
2157
+ }
2158
+ } else {
2159
+ this.flush().catch((error) => {
2160
+ console.error("[TrackingSDK] \u7ACB\u5373\u53D1\u9001\u5931\u8D25:", error);
2161
+ this.eventQueue.unshift(...events);
2162
+ });
2163
+ }
2164
+ } catch (error) {
2165
+ console.error("[TrackingSDK] flushNow \u6267\u884C\u5931\u8D25:", error);
2166
+ this.eventQueue.unshift(...events);
2167
+ }
2168
+ }
2169
+ /**
2170
+ * 销毁SDK
2171
+ */
2172
+ destroy() {
2173
+ if (this.flushTimer) {
2174
+ clearInterval(this.flushTimer);
2175
+ this.flushTimer = null;
2176
+ }
2177
+ this.flushNow();
2178
+ this.isInitialized = false;
2179
+ }
2180
+ }
2181
+ const trackingSDK = new TrackingSDK();
2182
+
2183
+ function useAutoTracking(config = {}) {
2184
+ const { trackPageView = true, trackClicks = true, pageTitle, customData = {} } = config;
2185
+ const pageStartTime = ref(0);
2186
+ const isPageVisible = ref(true);
2187
+ const handlePageShow = () => {
2188
+ isPageVisible.value = true;
2189
+ pageStartTime.value = Date.now();
2190
+ if (trackPageView) {
2191
+ trackingSDK.trackPageView(pageTitle);
2192
+ }
2193
+ };
2194
+ const handlePageHide = () => {
2195
+ isPageVisible.value = false;
2196
+ };
2197
+ const handleClick = (event) => {
2198
+ if (!trackClicks || !isPageVisible.value) return;
2199
+ const target = event.target || event.currentTarget;
2200
+ const elementId = target?.id;
2201
+ const elementClass = target?.className;
2202
+ const elementText = target?.textContent || target?.innerText;
2203
+ trackingSDK.trackClick(elementId || elementClass, elementText);
2204
+ };
2205
+ const trackEvent = (eventName, data) => {
2206
+ trackingSDK.trackCustom(eventName, { ...customData, ...data });
2207
+ };
2208
+ const trackBusinessEvent = (event, businessData) => {
2209
+ trackingSDK.trackBusiness(event, businessData);
2210
+ };
2211
+ useDidShow(() => {
2212
+ handlePageShow();
2213
+ });
2214
+ onUnmounted(() => {
2215
+ handlePageHide();
2216
+ });
2217
+ return {
2218
+ // 状态
2219
+ isPageVisible,
2220
+ pageStartTime,
2221
+ // 事件处理函数
2222
+ handleClick,
2223
+ // 手动埋点方法
2224
+ trackEvent,
2225
+ trackBusinessEvent,
2226
+ // 页面生命周期
2227
+ handlePageShow,
2228
+ handlePageHide
2229
+ };
2230
+ }
2231
+ function usePageTracking(config = {}) {
2232
+ return useAutoTracking(config);
2233
+ }
2234
+
2235
+ function getElementInfo(el) {
2236
+ return {
2237
+ id: el.id,
2238
+ className: el.className,
2239
+ text: (el.textContent || el.innerText || "").trim()
2240
+ };
2241
+ }
2242
+ function getClickPosition(event) {
2243
+ const e = event;
2244
+ if ("touches" in e && e.touches.length > 0) {
2245
+ return {
2246
+ x: e.touches[0].clientX,
2247
+ y: e.touches[0].clientY
2248
+ };
2249
+ } else if ("clientX" in e) {
2250
+ return {
2251
+ x: e.clientX,
2252
+ y: e.clientY
2253
+ };
2254
+ }
2255
+ return { x: 0, y: 0 };
2256
+ }
2257
+ function bindClickEvent(el, binding) {
2258
+ const oldHandler = el.__trackClickHandler;
2259
+ const oldOptions = el.__trackClickOptions;
2260
+ if (oldHandler) {
2261
+ el.removeEventListener("click", oldHandler, oldOptions);
2262
+ delete el.__trackClickHandler;
2263
+ delete el.__trackClickOptions;
2264
+ }
2265
+ const value = binding.value;
2266
+ const config = typeof value === "string" ? { event: value } : value || {};
2267
+ const { data = {}, elementId, elementText, preventDefault = false } = config;
2268
+ const elementInfo = getElementInfo(el);
2269
+ const finalElementId = elementId || elementInfo.id;
2270
+ const finalElementClass = elementInfo.className;
2271
+ const finalElementText = elementText || elementInfo.text;
2272
+ const handleClick = (clickEvent) => {
2273
+ if (preventDefault) {
2274
+ clickEvent.preventDefault();
2275
+ }
2276
+ const position = getClickPosition(clickEvent);
2277
+ trackingSDK.trackClick(finalElementId || finalElementClass, finalElementText);
2278
+ if (config.event && config.event !== "click") {
2279
+ trackingSDK.trackCustom(config.event, {
2280
+ elementId: finalElementId || finalElementClass,
2281
+ elementText: finalElementText,
2282
+ position,
2283
+ ...data
2284
+ });
2285
+ }
2286
+ };
2287
+ const eventOptions = { capture: true, passive: !preventDefault };
2288
+ el.addEventListener("click", handleClick, eventOptions);
2289
+ el.__trackClickHandler = handleClick;
2290
+ el.__trackClickOptions = eventOptions;
2291
+ }
2292
+ const trackClickDirective = {
2293
+ mounted(el, binding) {
2294
+ setTimeout(() => {
2295
+ bindClickEvent(el, binding);
2296
+ }, 0);
2297
+ },
2298
+ updated(el, binding) {
2299
+ bindClickEvent(el, binding);
2300
+ },
2301
+ unmounted(el) {
2302
+ const handler = el.__trackClickHandler;
2303
+ const options = el.__trackClickOptions;
2304
+ if (handler) {
2305
+ el.removeEventListener("click", handler, options);
2306
+ delete el.__trackClickHandler;
2307
+ delete el.__trackClickOptions;
2308
+ }
2309
+ }
2310
+ };
2311
+ function installTrackClickDirective(app) {
2312
+ app.directive("track-click", trackClickDirective);
2313
+ }
2314
+
2315
+ const trackPageDirective = {
2316
+ mounted(el, binding) {
2317
+ const value = binding.value;
2318
+ const config = typeof value === "string" ? { pageTitle: value } : value || {};
2319
+ const { pageTitle, customData = {}, trackStay = true } = config;
2320
+ trackingSDK.trackPageView(pageTitle);
2321
+ if (Object.keys(customData).length > 0) {
2322
+ trackingSDK.trackCustom("page_view_custom", customData);
2323
+ }
2324
+ if (trackStay) {
2325
+ el.__trackPageStartTime = Date.now();
2326
+ }
2327
+ }
2328
+ };
2329
+ function installTrackPageDirective(app) {
2330
+ app.directive("track-page", trackPageDirective);
2331
+ }
2332
+
2333
+ const trackScrollDirective = {
2334
+ mounted(el, binding) {
2335
+ const value = binding.value;
2336
+ const config = typeof value === "boolean" ? { threshold: 0.5, trackDirection: value } : value || {};
2337
+ const { threshold = 0.5, data = {}, trackDirection = false } = config;
2338
+ let hasTracked = false;
2339
+ let lastScrollTop = 0;
2340
+ const handleScroll = () => {
2341
+ if (hasTracked) return;
2342
+ const rect = el.getBoundingClientRect();
2343
+ const windowHeight = window.innerHeight;
2344
+ const elementTop = rect.top;
2345
+ const elementHeight = rect.height;
2346
+ const visibleHeight = Math.min(elementHeight, windowHeight - Math.max(0, elementTop));
2347
+ const visibleRatio = visibleHeight / elementHeight;
2348
+ if (visibleRatio >= threshold) {
2349
+ hasTracked = true;
2350
+ const scrollTop = window.pageYOffset || document.documentElement.scrollTop;
2351
+ const scrollDirection = scrollTop > lastScrollTop ? "down" : "up";
2352
+ lastScrollTop = scrollTop;
2353
+ trackingSDK.trackCustom("scroll_into_view", {
2354
+ elementId: el.id,
2355
+ visibleRatio,
2356
+ scrollDirection: trackDirection ? scrollDirection : void 0,
2357
+ scrollTop,
2358
+ ...data
2359
+ });
2360
+ }
2361
+ };
2362
+ if ("IntersectionObserver" in window) {
2363
+ const observer = new IntersectionObserver(
2364
+ (entries) => {
2365
+ entries.forEach((entry) => {
2366
+ if (entry.isIntersecting && entry.intersectionRatio >= threshold) {
2367
+ hasTracked = true;
2368
+ trackingSDK.trackCustom("scroll_into_view", {
2369
+ elementId: el.id,
2370
+ intersectionRatio: entry.intersectionRatio,
2371
+ ...data
2372
+ });
2373
+ observer.unobserve(el);
2374
+ }
2375
+ });
2376
+ },
2377
+ { threshold }
2378
+ );
2379
+ observer.observe(el);
2380
+ el.__scrollObserver = observer;
2381
+ } else {
2382
+ if (typeof window !== "undefined") {
2383
+ window.addEventListener("scroll", handleScroll, { passive: true });
2384
+ el.__scrollHandler = handleScroll;
2385
+ }
2386
+ }
2387
+ },
2388
+ unmounted(el) {
2389
+ const observer = el.__scrollObserver;
2390
+ if (observer) {
2391
+ observer.disconnect();
2392
+ delete el.__scrollObserver;
2393
+ }
2394
+ const handler = el.__scrollHandler;
2395
+ if (handler && typeof window !== "undefined") {
2396
+ window.removeEventListener("scroll", handler);
2397
+ delete el.__scrollHandler;
2398
+ }
2399
+ }
2400
+ };
2401
+ function installTrackScrollDirective(app) {
2402
+ app.directive("track-scroll", trackScrollDirective);
2403
+ }
2404
+
2405
+ function getSearchElementInfo(el) {
2406
+ let placeholder;
2407
+ if (el.placeholder) {
2408
+ placeholder = el.placeholder;
2409
+ } else if (el.querySelector("input")) {
2410
+ placeholder = el.querySelector("input").placeholder;
2411
+ }
2412
+ return {
2413
+ id: el.id,
2414
+ className: el.className,
2415
+ placeholder: placeholder || ""
2416
+ };
2417
+ }
2418
+ const trackSearchDirective = {
2419
+ mounted(el, binding) {
2420
+ const value = binding.value;
2421
+ const config = typeof value === "string" ? { event: value } : value || {};
2422
+ const {
2423
+ event = "search",
2424
+ data = {},
2425
+ elementId,
2426
+ trackInput = true,
2427
+ trackSubmit = true,
2428
+ debounceTime = 500,
2429
+ minLength = 1
2430
+ } = config;
2431
+ const elementInfo = getSearchElementInfo(el);
2432
+ const finalElementId = elementId || elementInfo.id;
2433
+ const finalElementClass = elementInfo.className;
2434
+ const handleInput = (event2) => {
2435
+ const target = event2.target;
2436
+ const searchValue = target.value.trim();
2437
+ if (searchValue.length < minLength) {
2438
+ return;
2439
+ }
2440
+ trackingSDK.trackCustom("search_input", {
2441
+ elementId: finalElementId || finalElementClass,
2442
+ searchValue,
2443
+ searchLength: searchValue.length,
2444
+ placeholder: elementInfo.placeholder,
2445
+ ...data
2446
+ });
2447
+ };
2448
+ const handleSubmit = (event2) => {
2449
+ const target = event2.target;
2450
+ const searchValue = target.value.trim();
2451
+ if (searchValue.length < minLength) {
2452
+ return;
2453
+ }
2454
+ trackingSDK.trackCustom("search_submit", {
2455
+ elementId: finalElementId || finalElementClass,
2456
+ searchValue,
2457
+ searchLength: searchValue.length,
2458
+ placeholder: elementInfo.placeholder,
2459
+ ...data
2460
+ });
2461
+ };
2462
+ const debouncedHandleInput = debounce$1(handleInput, debounceTime || 500);
2463
+ if (trackInput) {
2464
+ el.addEventListener("input", debouncedHandleInput, { passive: true });
2465
+ el.__trackSearchInputHandler = debouncedHandleInput;
2466
+ }
2467
+ if (trackSubmit) {
2468
+ el.addEventListener("keydown", (event2) => {
2469
+ if (event2.key === "Enter") {
2470
+ handleSubmit(event2);
2471
+ }
2472
+ });
2473
+ el.__trackSearchSubmitHandler = handleSubmit;
2474
+ }
2475
+ const form = el.closest("form");
2476
+ if (form && trackSubmit) {
2477
+ form.addEventListener("submit", handleSubmit);
2478
+ el.__trackSearchFormHandler = handleSubmit;
2479
+ }
2480
+ },
2481
+ updated(el, binding) {
2482
+ const inputHandler = el.__trackSearchInputHandler;
2483
+ if (inputHandler) {
2484
+ el.removeEventListener("input", inputHandler);
2485
+ delete el.__trackSearchInputHandler;
2486
+ trackSearchDirective.mounted?.(el, binding);
2487
+ }
2488
+ },
2489
+ unmounted(el) {
2490
+ const inputHandler = el.__trackSearchInputHandler;
2491
+ const submitHandler = el.__trackSearchSubmitHandler;
2492
+ const formHandler = el.__trackSearchFormHandler;
2493
+ if (inputHandler) {
2494
+ el.removeEventListener("input", inputHandler);
2495
+ delete el.__trackSearchInputHandler;
2496
+ }
2497
+ if (submitHandler) {
2498
+ el.removeEventListener("submit", submitHandler);
2499
+ delete el.__trackSearchSubmitHandler;
2500
+ }
2501
+ if (formHandler) {
2502
+ const form = el.closest("form");
2503
+ if (form) {
2504
+ form.removeEventListener("submit", formHandler);
2505
+ }
2506
+ delete el.__trackSearchFormHandler;
2507
+ }
2508
+ }
2509
+ };
2510
+ function installTrackSearchDirective(app) {
2511
+ app.directive("track-search", trackSearchDirective);
2512
+ }
2513
+
2514
+ function installTrackingDirectives(app) {
2515
+ installTrackClickDirective(app);
2516
+ installTrackPageDirective(app);
2517
+ installTrackScrollDirective(app);
2518
+ installTrackSearchDirective(app);
2519
+ console.log("[TrackingDirectives] \u6240\u6709\u57CB\u70B9\u6307\u4EE4\u5B89\u88C5\u5B8C\u6210");
2520
+ }
2521
+
2522
+ async function initTracking(config = {}) {
2523
+ try {
2524
+ console.log("[TrackingInit] \u5F00\u59CB\u521D\u59CB\u5316\u57CB\u70B9\u7CFB\u7EDF...");
2525
+ const sdkConfig = {
2526
+ enabled: config.enabled,
2527
+ debug: config.debug,
2528
+ apiEndpoint: config.apiEndpoint,
2529
+ batchSize: config.batchSize,
2530
+ flushInterval: config.flushInterval,
2531
+ userInfo: config.userInfo
2532
+ // 传递用户信息
2533
+ };
2534
+ trackingSDK.updateConfig(sdkConfig);
2535
+ setupGlobalErrorHandling();
2536
+ setupPageLifecycleTracking();
2537
+ setupGlobalProperties();
2538
+ trackingSDK.clearPageHistory();
2539
+ console.log("[TrackingInit] \u57CB\u70B9\u7CFB\u7EDF\u521D\u59CB\u5316\u5B8C\u6210");
2540
+ await trackingSDK.trackCustom("tracking_init_complete", {
2541
+ logTime: Date.now()
2542
+ });
2543
+ } catch (error) {
2544
+ console.error("[TrackingInit] \u57CB\u70B9\u7CFB\u7EDF\u521D\u59CB\u5316\u5931\u8D25:", error);
2545
+ }
2546
+ }
2547
+ function setupGlobalErrorHandling() {
2548
+ window.addEventListener("error", () => {
2549
+ });
2550
+ window.addEventListener("unhandledrejection", (event) => {
2551
+ });
2552
+ }
2553
+ function setupPageLifecycleTracking() {
2554
+ onAppShow(() => {
2555
+ trackingSDK.trackCustom("app_show", {
2556
+ logTime: Date.now()
2557
+ }).catch(console.error);
2558
+ });
2559
+ onAppHide(() => {
2560
+ trackingSDK.trackCustom("app_hide", {
2561
+ logTime: Date.now()
2562
+ }).catch(console.error);
2563
+ });
2564
+ onNetworkStatusChange((res) => {
2565
+ trackingSDK.trackCustom("network_status_change", {
2566
+ isConnected: res.isConnected,
2567
+ networkType: res.networkType,
2568
+ logTime: Date.now()
2569
+ }).catch(console.error);
2570
+ });
2571
+ }
2572
+ function setupGlobalProperties() {
2573
+ if (typeof window !== "undefined") {
2574
+ window.__trackingSDK = trackingSDK;
2575
+ }
2576
+ if (typeof globalThis !== "undefined") {
2577
+ globalThis.track = trackingSDK.trackCustom.bind(trackingSDK);
2578
+ globalThis.trackPage = trackingSDK.trackPageView.bind(trackingSDK);
2579
+ globalThis.trackClick = trackingSDK.trackClick.bind(trackingSDK);
2580
+ }
2581
+ }
2582
+ function installTrackingPlugin(app) {
2583
+ installTrackingDirectives(app);
2584
+ app.config.globalProperties.$track = async (event, data) => {
2585
+ await trackingSDK.trackCustom(event, data);
2586
+ };
2587
+ app.config.globalProperties.$trackPage = async (pageTitle, customData) => {
2588
+ await trackingSDK.trackPageView(pageTitle);
2589
+ if (customData) {
2590
+ await trackingSDK.trackCustom("page_custom", customData);
2591
+ }
2592
+ };
2593
+ app.config.globalProperties.$trackClick = async (elementId, elementText) => {
2594
+ await trackingSDK.trackClick(elementId, elementText);
2595
+ };
2596
+ console.log("[TrackingInit] Vue\u57CB\u70B9\u63D2\u4EF6\u5B89\u88C5\u5B8C\u6210");
2597
+ }
2598
+
1522
2599
  const endpointsList$2 = {
1523
2600
  /**
1524
2601
  * 获取充值套餐包列表
@@ -1551,7 +2628,8 @@ const endpointsList$2 = {
1551
2628
  certificateNo: params.user,
1552
2629
  accountAuthFlag: params.accountAuthFlag || false,
1553
2630
  channelCode: params.channelCode || null,
1554
- payFinishJumpUrl: params.payFinishJumpUrl || null
2631
+ payFinishJumpUrl: params.payFinishJumpUrl || null,
2632
+ clientInfo: params.clientInfo || null
1555
2633
  }),
1556
2634
  transform: (data) => {
1557
2635
  let json = null;
@@ -1894,7 +2972,8 @@ var script$E = /* @__PURE__ */ defineComponent({
1894
2972
  accountAuthFlag: false,
1895
2973
  channelCode: "centergzh",
1896
2974
  payFinishJumpUrl: props.payFinishJumpUrl,
1897
- fromMini: !!params.from
2975
+ fromMini: !!params.from,
2976
+ clientInfo: "H5"
1898
2977
  }).then((result) => {
1899
2978
  console.log(result, "------requestBrandWCPay");
1900
2979
  state.buttonLoading = false;
@@ -3098,24 +4177,6 @@ var script$u = /* @__PURE__ */ defineComponent({
3098
4177
 
3099
4178
  script$u.__file = "src/balance/components/Tip.vue";
3100
4179
 
3101
- function dataURItoBlob(dataURI) {
3102
- const byteString = atob(dataURI.split(",")[1]);
3103
- const mimeString = dataURI.split(",")[0].split(":")[1].split(";")[0];
3104
- const ab = new ArrayBuffer(byteString.length);
3105
- const ia = new Uint8Array(ab);
3106
- for (let i = 0; i < byteString.length; i++) {
3107
- ia[i] = byteString.charCodeAt(i);
3108
- }
3109
- return new Blob([ab], { type: mimeString });
3110
- }
3111
- function isWeb() {
3112
- const env = process.env.TARO_ENV || "";
3113
- return env === "h5" || Taro.getEnv() === "WEB";
3114
- }
3115
- function isApp() {
3116
- return dsBridge.hasNativeMethod("openWebPage");
3117
- }
3118
-
3119
4180
  const _hoisted_1$q = { class: "account-view" };
3120
4181
  const _hoisted_2$k = { class: "scroll-content" };
3121
4182
  const _hoisted_3$e = { class: "row jusify-right" };
@@ -10140,4 +11201,4 @@ const AppKit = {
10140
11201
  }
10141
11202
  };
10142
11203
 
10143
- export { script$t as AccountView, script$M as AmountPicker, script$K as AppDrawer, script$J as AppVerify, script$z as BalanceCard, script$s as BalanceReminder, script$r as DateRange, script$H as DeviceVersion, script$p as ListFilter, script$4 as LoginSetting, script$i as NoticeBanner, script$h as NoticeEntry, script$f as NoticeList, script$e as NoticeList2, script$F as OcrBusinessLicense, script$G as OcrIcon, script$L as PageHeader, script$o as PromoterCard, script$C as RechargeResult, script$E as RechargeView, script$k as SelfRegistration, script as SharePoster, script$A as TradeView, script$D as UserAgreement, script$2 as UserAuth, script$a as UserBinding, script$9 as UserBindingSuccess, script$d as UserEntry, script$6 as UserFeedback, script$5 as UserFeedbackEntry, script$7 as UserHeadCrop, script$b as UserInfo, script$3 as UserResourceEmpty, components, createHttp, AppKit as default, defaultCryptoConfig, generateUniqueId, getSdkConfig, jssdkServices, requestPayment$2 as requestPayment, requestWxH5Pay, services$1 as services, useAppKit, useCountdown, useCrypto, useEncode, useLogger, useSafeArea, useTabbar, useUpload, useValidator, useWxAuth };
11204
+ export { script$t as AccountView, script$M as AmountPicker, script$K as AppDrawer, script$J as AppVerify, script$z as BalanceCard, script$s as BalanceReminder, script$r as DateRange, script$H as DeviceVersion, script$p as ListFilter, script$4 as LoginSetting, script$i as NoticeBanner, script$h as NoticeEntry, script$f as NoticeList, script$e as NoticeList2, script$F as OcrBusinessLicense, script$G as OcrIcon, script$L as PageHeader, script$o as PromoterCard, script$C as RechargeResult, script$E as RechargeView, script$k as SelfRegistration, script as SharePoster, script$A as TradeView, script$D as UserAgreement, script$2 as UserAuth, script$a as UserBinding, script$9 as UserBindingSuccess, script$d as UserEntry, script$6 as UserFeedback, script$5 as UserFeedbackEntry, script$7 as UserHeadCrop, script$b as UserInfo, script$3 as UserResourceEmpty, components, createHttp, AppKit as default, defaultCryptoConfig, generateUniqueId, getSdkConfig, initTracking, installTrackingPlugin, jssdkServices, requestPayment$2 as requestPayment, requestWxH5Pay, services$1 as services, trackingSDK, useAppKit, useCountdown, useCrypto, useEncode, useLogger, usePageTracking, useSafeArea, useTabbar, useUpload, useValidator, useWxAuth };