From 6bf56a4b4c4404568128acfb2f3f1aeca7c3487f Mon Sep 17 00:00:00 2001
From: sexygoat <1538832180@qq.com>
Date: Thu, 22 Jan 2026 17:25:30 +0800
Subject: [PATCH] first
---
.claude/settings.local.json | 9 +
.gitignore | 94 ++
App.vue | 594 +++++++++
api/request.js | 220 ++++
api/user.js | 757 ++++++++++++
index.html | 23 +
main.js | 24 +
manifest.json | 101 ++
package-lock.json | 1621 +++++++++++++++++++++++++
package.json | 11 +
pages.json | 61 +
pages/auth/auth.vue | 221 ++++
pages/bind/bind.vue | 148 +++
pages/error/error.vue | 21 +
pages/index/index.vue | 1102 +++++++++++++++++
pages/login/login.vue | 109 ++
pages/package-order/package-order.vue | 301 +++++
pages/switch/switch.vue | 234 ++++
static/authentication.png | Bin 0 -> 136886 bytes
static/back.png | Bin 0 -> 1547953 bytes
static/bind-phone.png | Bin 0 -> 161546 bytes
static/change.png | Bin 0 -> 153291 bytes
static/diagnosis.png | Bin 0 -> 189017 bytes
static/link.png | Bin 0 -> 54984 bytes
static/login.png | Bin 0 -> 183861 bytes
static/out.png | Bin 0 -> 133502 bytes
static/recover.png | Bin 0 -> 83355 bytes
static/restart.png | Bin 0 -> 157906 bytes
static/shop.png | Bin 0 -> 192707 bytes
store/index.js | 15 +
store/modules/user.js | 435 +++++++
tsconfig.json | 15 +
uni.promisify.adaptor.js | 13 +
uni.scss | 76 ++
utils/common.js | 92 ++
35 files changed, 6297 insertions(+)
create mode 100644 .claude/settings.local.json
create mode 100644 .gitignore
create mode 100644 App.vue
create mode 100644 api/request.js
create mode 100644 api/user.js
create mode 100644 index.html
create mode 100644 main.js
create mode 100644 manifest.json
create mode 100644 package-lock.json
create mode 100644 package.json
create mode 100644 pages.json
create mode 100644 pages/auth/auth.vue
create mode 100644 pages/bind/bind.vue
create mode 100644 pages/error/error.vue
create mode 100644 pages/index/index.vue
create mode 100644 pages/login/login.vue
create mode 100644 pages/package-order/package-order.vue
create mode 100644 pages/switch/switch.vue
create mode 100644 static/authentication.png
create mode 100644 static/back.png
create mode 100644 static/bind-phone.png
create mode 100644 static/change.png
create mode 100644 static/diagnosis.png
create mode 100644 static/link.png
create mode 100644 static/login.png
create mode 100644 static/out.png
create mode 100644 static/recover.png
create mode 100644 static/restart.png
create mode 100644 static/shop.png
create mode 100644 store/index.js
create mode 100644 store/modules/user.js
create mode 100644 tsconfig.json
create mode 100644 uni.promisify.adaptor.js
create mode 100644 uni.scss
create mode 100644 utils/common.js
diff --git a/.claude/settings.local.json b/.claude/settings.local.json
new file mode 100644
index 0000000..7b274cb
--- /dev/null
+++ b/.claude/settings.local.json
@@ -0,0 +1,9 @@
+{
+ "permissions": {
+ "allow": [
+ "Bash(git add:*)"
+ ],
+ "deny": [],
+ "ask": []
+ }
+}
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..71e2bf4
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,94 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# Runtime data
+pids
+*.pid
+*.seed
+*.pid.lock
+
+# Directory for instrumented libs generated by jscoverage/JSCover
+lib-cov
+
+# Coverage directory used by tools like istanbul
+coverage/
+
+# nyc test coverage
+.nyc_output
+
+# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
+.grunt
+
+# Bower dependency directory (https://bower.io/)
+bower_components
+
+# node-waf configuration
+.lock-wscript
+
+# Compiled binary addons (https://nodejs.org/api/addons.html)
+build/Release
+
+# Dependency directories
+node_modules/
+jspm_packages/
+
+# Optional npm cache directory
+.npm
+
+# Optional eslint cache
+.eslintcache
+
+# Optional REPL history
+.node_repl_history
+
+# Output of 'npm pack'
+*.tgz
+
+# Yarn Integrity file
+.yarn-integrity
+
+# dotenv environment variables file
+.env
+
+# parcel-bundler cache (https://parceljs.org/)
+.cache
+.parcel-cache
+
+# next.js build output
+.next
+
+# nuxt.js build output
+.nuxt
+
+# vuepress build output
+.vuepress/dist
+
+# Serverless directories
+.serverless
+
+# FuseBox cache
+.fusebox/
+
+# DynamoDB Local files
+.dynamodb/
+
+# uni-app
+unpackage/
+dist/
+
+# VS Code
+.vscode/
+
+# IDE
+.idea/
+*.swp
+*.swo
+*~
+
+# OS
+.DS_Store
+Thumbs.db
\ No newline at end of file
diff --git a/App.vue b/App.vue
new file mode 100644
index 0000000..6d0310d
--- /dev/null
+++ b/App.vue
@@ -0,0 +1,594 @@
+
+
+
\ No newline at end of file
diff --git a/api/request.js b/api/request.js
new file mode 100644
index 0000000..1cdbc70
--- /dev/null
+++ b/api/request.js
@@ -0,0 +1,220 @@
+/**
+ * 统一请求拦截器
+ */
+
+import {
+ userStore
+} from '@/store/index.js';
+
+// 基础配置
+const BASE_CONFIG = {
+ timeout: 30000, // 30秒超时
+ header: {
+ 'Content-Type': 'application/json',
+ 'X-Requested-With': 'XMLHttpRequest'
+ }
+};
+
+/**
+ * 创建请求实例
+ */
+class HttpRequest {
+ constructor() {
+ this.config = {
+ ...BASE_CONFIG
+ };
+ }
+
+ /**
+ * 响应拦截器 - 处理Cookie和错误
+ * @param {Object} response 响应对象
+ * @returns {Promise} 处理后的响应
+ */
+ async interceptResponse(response) {
+ try {
+ if (response.data.system_result_message_key) {
+ uni.showToast({
+ title: response.data.system_result_message_key + ",请重新登录",
+ icon: 'none'
+ });
+
+ // 等待 logout 操作完成
+ await userStore.actions.logout();
+
+ setTimeout(() => {
+ uni.navigateTo({
+ url: '/pages/login/login'
+ });
+ }, 500);
+ }
+
+ // 检查HTTP状态码
+ if (response.statusCode >= 200 && response.statusCode < 300) {
+ // 检查业务状态码
+ if (response.data && typeof response.data === 'object') {
+ if (response.data.code === '0' || response.data.code === 0 || response.data.code === 200) {
+ // 业务成功
+ return response.data;
+ } else {
+ // 业务失败
+ const error = new Error(response.data.message || response.data.msg || '请求失败');
+ error.code = response.data.code;
+ error.data = response.data;
+ throw error;
+ }
+ } else {
+ // 非JSON响应,直接返回
+ return response.data;
+ }
+ } else {
+ // HTTP状态码错误
+ const error = new Error(
+ `HTTP ${response.statusCode}: ${this.getStatusText(response.statusCode)}`
+ );
+ error.statusCode = response.statusCode;
+ error.response = response;
+ throw error;
+ }
+ } catch (error) {
+ console.error('响应拦截器错误:', error);
+ throw error;
+ }
+ }
+
+
+ /**
+ * 获取状态码描述
+ * @param {number} statusCode HTTP状态码
+ * @returns {string} 状态描述
+ */
+ getStatusText(statusCode) {
+ const statusMap = {
+ 400: 'Bad Request',
+ 401: 'Unauthorized',
+ 403: 'Forbidden',
+ 404: 'Not Found',
+ 500: 'Internal Server Error',
+ 502: 'Bad Gateway',
+ 503: 'Service Unavailable'
+ };
+ return statusMap[statusCode] || 'Unknown Error';
+ }
+
+ /**
+ * 通用请求方法
+ * @param {Object} options 请求选项
+ * @returns {Promise} 请求Promise
+ */
+ request(options) {
+ return new Promise((resolve, reject) => {
+ // 合并配置,特别处理 header
+ const config = {
+ ...this.config,
+ ...options,
+ header: {
+ ...this.config.header,
+ ...(options.header || options.headers || {})
+ },
+ withCredentials: false
+ };
+
+ // 发起请求
+ uni.request({
+ ...config,
+ success: (response) => {
+ this.interceptResponse(response)
+ .then(resolve)
+ .catch(reject);
+ },
+ fail: (error) => {
+ console.error('请求失败:', error);
+ const err = new Error(error.errMsg || '网络请求失败');
+ err.error = error;
+ reject(err);
+ }
+ });
+ });
+ }
+
+ /**
+ * GET请求
+ * @param {string} url 请求地址
+ * @param {Object} params 查询参数
+ * @param {Object} options 其他选项
+ * @returns {Promise} 请求Promise
+ */
+ get(url, params = {}, options = {}) {
+ // 构建查询字符串
+ const queryString = Object.keys(params)
+ .filter(key => params[key] !== undefined && params[key] !== null)
+ .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`)
+ .join('&');
+
+ const finalUrl = queryString ? `${url}${url.includes('?') ? '&' : '?'}${queryString}` : url;
+
+ return this.request({
+ url: finalUrl,
+ method: 'GET',
+ ...options
+ });
+ }
+
+ /**
+ * POST请求
+ * @param {string} url 请求地址
+ * @param {Object} data 请求体数据
+ * @param {Object} options 其他选项
+ * @returns {Promise} 请求Promise
+ */
+ post(url, data = {}, options = {}) {
+ return this.request({
+ url,
+ method: 'POST',
+ data,
+ ...options
+ });
+ }
+
+ /**
+ * PUT请求
+ * @param {string} url 请求地址
+ * @param {Object} data 请求体数据
+ * @param {Object} options 其他选项
+ * @returns {Promise} 请求Promise
+ */
+ put(url, data = {}, options = {}) {
+ return this.request({
+ url,
+ method: 'PUT',
+ data,
+ ...options
+ });
+ }
+
+ /**
+ * DELETE请求
+ * @param {string} url 请求地址
+ * @param {Object} params 查询参数
+ * @param {Object} options 其他选项
+ * @returns {Promise} 请求Promise
+ */
+ delete(url, params = {}, options = {}) {
+ return this.get(url, params, {
+ ...options,
+ method: 'DELETE'
+ });
+ }
+}
+
+// 创建请求实例
+const httpRequest = new HttpRequest();
+
+export default httpRequest;
+
+// 导出常用方法
+export const {
+ get,
+ post,
+ put,
+ delete: del
+} = httpRequest;
\ No newline at end of file
diff --git a/api/user.js b/api/user.js
new file mode 100644
index 0000000..5f7ae46
--- /dev/null
+++ b/api/user.js
@@ -0,0 +1,757 @@
+/**
+ * 用户相关API接口
+ */
+
+import httpRequest from './request.js';
+import {
+ generateRfm
+} from '@/utils/common.js';
+
+class UserApi {
+ constructor() {
+ this.baseUrl = '/kyhl-weixin-1.0';
+ this.cardBaseUrl = '/cm-api/v1'
+ }
+
+ // 检查是否有公众号OpenId(获取Cookie的关键接口)
+ async getCookie() {
+ try {
+ const fullUrl = `${this.cardBaseUrl}/auth/get-auth`;
+
+ const response = await httpRequest.post(fullUrl);
+
+ return response;
+ } catch (error) {
+ console.error('checkHasGzhOpenId请求失败:', error);
+ throw error;
+ }
+ }
+
+ // 获取设备信息(管理平台)
+ async getDeviceInfoAdmin(device_id) {
+ try {
+ const fullUrl = `${this.cardBaseUrl}/device/query`;
+
+ const response = await httpRequest.post(fullUrl, {
+ page: 1,
+ page_size: 1,
+ device_id
+ });
+
+ return response;
+ } catch (error) {
+ console.error('获取设备信息(管理平台):', error);
+ throw error;
+ }
+ }
+
+ // 获取WXUrl
+ /*
+ {
+ "code": "0",
+ "current_session_user_resource_ids_index": "",
+ "app_result_key": "0",
+ "wxAuthUrl": "",
+ "system_result_key": "0"
+ }
+ */
+ async getWxUrl() {
+ try {
+ const params = {
+ responseFunction: 'checkHasGzhOpenId',
+ needGzhOpenId: true,
+ currentPageUrl: 'https://m1.whjhft.com/pages/index/index',
+ checkFrom: 'cardlogin',
+ rfm: generateRfm()
+ };
+
+ const queryString = this.buildQueryString(params);
+ const fullUrl = `${this.baseUrl}/wxauth/checkHasGzhOpenId.do?${queryString}`;
+
+ const response = await httpRequest.post(fullUrl, null);
+
+ return response;
+ } catch (error) {
+ console.error('登录请求失败:', error);
+ throw error;
+ }
+ }
+
+
+ // 用户登录接口
+ async login(iccidMark) {
+ try {
+ console.log(iccidMark);
+ const params = {
+ responseFunction: 'findByiccidMarkCallback',
+ iccidMark,
+ rfm: generateRfm()
+ };
+
+ const queryString = this.buildQueryString(params);
+ const fullUrl = `${this.baseUrl}/card/login.do?${queryString}`;
+
+ const response = await httpRequest.post(fullUrl, null);
+
+ return response;
+ } catch (error) {
+ console.error('登录请求失败:', error);
+ throw error;
+ }
+ }
+
+ // 判断是否实名接口
+ async getRealNameInfo() {
+ try {
+ const params = {
+ iccidOrPhone: "",
+ responseFunction: "getRealNameInfoCallback",
+ rfm: generateRfm()
+ };
+
+ const queryString = this.buildQueryString(params);
+ const fullUrl = `${this.baseUrl}/user/getRealNameInfo.do?${queryString}`;
+
+ const response = await httpRequest.post(fullUrl, null);
+
+ return response;
+ } catch (error) {
+ console.error('获取实名信息失败:', error);
+ throw error;
+ }
+ }
+
+
+ // 获取用户信息接口
+ async getUserInfo() {
+ try {
+ const params = {
+ responseFunction: 'findByOpenIdCallback',
+ DoNotGetRealNameInfo: true,
+ rfm: generateRfm()
+ };
+
+ const queryString = this.buildQueryString(params);
+ const fullUrl = `${this.baseUrl}/user/findByOpenId.do?${queryString}`;
+
+ const response = await httpRequest.post(fullUrl, null);
+
+ return response;
+ } catch (error) {
+ console.error('获取用户信息失败:', error);
+ throw error;
+ }
+ }
+
+ // 切换运营商 1: 电信 2: 联通 3: 移动 esim参数值
+ async changeOperator(esim, iccidMark) {
+ try {
+ const params = {
+ responseFunction: 'updateWifi',
+ optwifi: "esim",
+ esim,
+ iccidMark,
+ rfm: generateRfm()
+ };
+
+ const queryString = this.buildQueryString(params);
+ const fullUrl = `${this.baseUrl}/card/updateWifi.do?${queryString}`;
+
+ const response = await httpRequest.post(fullUrl, null);
+
+ return response;
+ } catch (error) {
+ console.error('切换运营商失败:', error);
+ throw error;
+ }
+ }
+
+ // 进入实名是否只显示主卡
+ async getIsOnlyMainCard(iccidMark) {
+ try {
+ const fullUrl = `${this.cardBaseUrl}/call/device/${iccidMark}/exists`;
+
+ const response = await httpRequest.get(fullUrl);
+
+ return response;
+ } catch (error) {
+ console.error('进入实名是否只显示主卡请求失败:', error);
+ throw error;
+ }
+ }
+
+ // 获取openId接口
+ async getOpenId() {
+ try {
+ const params = {
+ responseFunction: 'getUserCardInfo',
+ DoNotGetRealNameInfo: true,
+ rfm: generateRfm()
+ };
+
+ const queryString = this.buildQueryString(params);
+ const fullUrl = `${this.baseUrl}/usercard/getUserCardInfo.do?${queryString}`;
+
+ const response = await httpRequest.post(fullUrl, null);
+
+ return response;
+ } catch (error) {
+ console.error('获取openId失败:', error);
+ throw error;
+ }
+ }
+
+ // 进行授权
+ async getAuthorize(code) {
+ try {
+ const params = {
+ origin_html_url: 'https://m1.whjhft.com/pages/index/index',
+ code: code,
+ state: null
+ };
+
+ const queryString = this.buildQueryString(params);
+ const fullUrl = `${this.baseUrl}/wxauth/recvCode.do?${queryString}`;
+
+ const response = await httpRequest.get(fullUrl);
+
+ return response;
+ } catch (error) {
+ console.error('获取授权失败:', error);
+ throw error;
+ }
+ }
+
+ // 获取微信支付签名
+ /*
+ {
+ "code": "0",
+ "signature": "3771f2fce5802b3630377e7d2618a7195d136007",
+ "current_session_user_resource_ids_index": "",
+ "appId": "wxea8c599fe100ce8a",
+ "nonceStr": "31565688940e48cb91827adbf6aeb499",
+ "system_result_key": "0",
+ "timestamp": 1766209145,
+ "isSuccess": "0"
+ }
+ */
+ async getWxPaySign() {
+ try {
+ const fullUrl = `${this.baseUrl}/weixinPay/getWxSign.do`;
+
+ const response = await httpRequest.get(fullUrl);
+
+ return response;
+ } catch (error) {
+ console.error('获取微信支付签名失败:', error);
+ throw error;
+ }
+ }
+
+ getCurrentPageUrl() {
+ try {
+ // #ifdef H5
+ if (typeof window !== 'undefined' && window.location) {
+ const currentUrl = window.location.href;
+ console.log('当前页面URL:', currentUrl);
+ return encodeURIComponent(currentUrl);
+ }
+ // #endif
+
+ const defaultUrl = "https://m1.whjhft.com/pages/index/index";
+ console.log('使用默认URL:', defaultUrl);
+ return encodeURIComponent(defaultUrl);
+ } catch (error) {
+ console.error('获取当前页面URL失败:', error);
+ return encodeURIComponent('https://m1.whjhft.com/pages/index/index');
+ }
+ }
+
+ // 获取套餐列表 smList
+ async getPackageList() {
+ try {
+ const params = {
+ responseFunction: 'findByCardNoCallback',
+ rfm: generateRfm()
+ };
+
+ const queryString = this.buildQueryString(params);
+ const fullUrl = `${this.baseUrl}//setmeal/findByCardNo.do?${queryString}`;
+
+ const response = await httpRequest.post(fullUrl, null);
+
+ return response;
+ } catch (error) {
+ console.error('获取套餐列表失败:', error);
+ throw error;
+ }
+ }
+
+
+ // 1. checkHasGzhOpenId 判断当前用户是否已经绑定了微信公众号的 OpenId
+ /*
+ {
+ "code": "0",
+ "current_session_user_resource_ids_index": "",
+ "app_result_key": "0",
+ "wxAuthUrl": "",
+ "system_result_key": "0"
+ }
+ */
+ // 如果返回的wxAuthUrl: 是空的就表示已经授权了, 没有就需要再来一次授权流程
+ async checkHasGzhOpenId() {
+ try {
+ const params = {
+ responseFunction: 'checkHasGzhOpenId',
+ needGzhOpenId: true,
+ currentPageUrl: "https://m1.whjhft.com/pages/package-order/package-order",
+ rfm: generateRfm()
+ };
+
+ const queryString = this.buildQueryString(params);
+ const fullUrl = `${this.baseUrl}//wxauth/checkHasGzhOpenId.do?${queryString}`;
+
+ const response = await httpRequest.post(fullUrl, null);
+
+ return response;
+ } catch (error) {
+ console.error('checkHasGzhOpenId:', error);
+ throw error;
+ }
+ }
+
+ // 2. checkYgosWxInfo 检查当前用户是否具有与微信支付相关的特定信息
+ async checkYgosWxInfo() {
+ try {
+ const params = {
+ responseFunction: 'checkYgosWxInfo',
+ hasYgGzhPm: false,
+ currentPageUrl: "https://m1.whjhft.com/pages/package-order/package-order",
+ rfm: generateRfm()
+ };
+
+ const queryString = this.buildQueryString(params);
+ const fullUrl = `${this.baseUrl}//weixinPay/checkYgosWxInfo.do?${queryString}`;
+
+ const response = await httpRequest.post(fullUrl, null);
+
+ return response;
+ } catch (error) {
+ console.error('checkYgosWxInfo:', error);
+ throw error;
+ }
+ }
+
+ // 3. checkXwzfWxInfo 检查微信信息
+ async checkXwzfWxInfo() {
+ try {
+ const params = {
+ responseFunction: 'checkXwzfWxInfo',
+ hasXwzfPm: false,
+ zwxMchId: "",
+ currentPageUrl: "https://m1.whjhft.com/pages/package-order/package-order",
+ rfm: generateRfm()
+ };
+
+ const queryString = this.buildQueryString(params);
+ const fullUrl = `${this.baseUrl}//weixinPay/checkXwzfWxInfo.do?${queryString}`;
+
+ const response = await httpRequest.post(fullUrl, null);
+
+ return response;
+ } catch (error) {
+ console.error('checkXwzfWxInfo:', error);
+ throw error;
+ }
+ }
+
+
+
+ // 4. 获取支付方式
+ /*
+ {
+ "onlyWalletRechargeCard": false,
+ "code": "0",
+ "walletBalance": 0.0,
+ "current_session_user_resource_ids_index": "",
+ "payMethodList": [
+ {
+ "mybatisRecordCount": 0,
+ "orderNo": "",
+ "jsonUpdateFlag": "0",
+ "id": "a333",
+ "createDate": "",
+ "createUserId": "",
+ "createUserName": "",
+ "payMethod": 2,
+ "showStatus": "",
+ "selectStatus": 2,
+ "sortNum": 44,
+ "showName": "余额支付",
+ "showIconUrl": "http://jh.whjhft.com/kyhl-weixin-1.0/img/yezf.png",
+ "appId": "",
+ "appSecret": "",
+ "gzhId": "",
+ "gzhName": "",
+ "gzhUsername": "",
+ "gzhPassword": "",
+ "mchId": "",
+ "mchKey": "",
+ "systemDomain": "",
+ "mchCertUrl": "",
+ "notifyUrl": "",
+ "returnUrl": "",
+ "profitSharingConfigNo": "",
+ "createDateStr": "",
+ "showApp": true,
+ "needOpenId": false,
+ "payMethodStr": "余额支付",
+ "showStatusStr": "",
+ "selectStatusStr": "否"
+ },
+ {
+ "mybatisRecordCount": 0,
+ "orderNo": "",
+ "jsonUpdateFlag": "0",
+ "id": "4F31156EE9654A35B16CF0E3A6569F53",
+ "createDate": "",
+ "createUserId": "",
+ "createUserName": "",
+ "payMethod": 1,
+ "showStatus": "",
+ "selectStatus": 1,
+ "sortNum": "",
+ "showName": "微信支付",
+ "showIconUrl": "http://jhft.whjhft.com/kyhl-weixin-1.0/img/wx.png",
+ "appId": "",
+ "appSecret": "",
+ "gzhId": "",
+ "gzhName": "",
+ "gzhUsername": "",
+ "gzhPassword": "",
+ "mchId": "",
+ "mchKey": "",
+ "systemDomain": "",
+ "mchCertUrl": "",
+ "notifyUrl": "",
+ "returnUrl": "",
+ "profitSharingConfigNo": "",
+ "createDateStr": "",
+ "showApp": false,
+ "needOpenId": true,
+ "payMethodStr": "微信支付",
+ "showStatusStr": "",
+ "selectStatusStr": "是"
+ }
+ ],
+ "app_result_key": "0",
+ "buyMealMealPrice": 29.0,
+ "pwdEmpty": false,
+ "system_result_key": "0",
+ "isSuccess": "1"
+ }
+ */
+ async getPayList(mealId) {
+ try {
+ const params = {
+ responseFunction: 'getNeedPayMoneyAndWalletBalance',
+ mealId,
+ getMealPrice: true,
+ allowWalletPay: true,
+ rfm: generateRfm()
+ };
+
+ const queryString = this.buildQueryString(params);
+ const fullUrl = `${this.baseUrl}//cardwallet/getNeedPayMoneyAndWalletBalance.do?${queryString}`;
+
+ const response = await httpRequest.post(fullUrl, null);
+
+ return response;
+ } catch (error) {
+ console.error('获取支付方式失败:', error);
+ throw error;
+ }
+ }
+ /*
+ {
+ "code": "0",
+ "current_session_user_resource_ids_index": "",
+ "wp": {
+ "appId": "wxea8c599fe100ce8a",
+ "timeStamp": "1766388518476",
+ "nonceStr": "1d64e63b37f349cfb3699643757268a3",
+ "prepayId": "prepay_id=wx2215283841316122e94a592ddd8e7f0000",
+ "paySign": "FDCD3D358E55C568725A10B4E7BC4F5B",
+ "signType": ""
+ },
+ "system_result_key": "0",
+ "isSuccess": "0"
+ }
+ */
+ // 5. 调用 orderPayPageUse.do 创建订单 并拉起支付 我只要微信支付即可
+ async createOrder(data) {
+ try {
+ const fullUrl = `${this.baseUrl}/weixinPay/orderPayPageUse.do`;
+
+ // 将数据转换为 URL 编码格式
+ const p = new URLSearchParams(data).toString();
+
+ // 确保 header 中的 Content-Type 为 x-www-form-urlencoded
+ const response = await httpRequest.post(fullUrl, p, {
+ header: {
+ 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
+ }
+ });
+
+ return response;
+ } catch (error) {
+ console.error('创建订单失败', error);
+ throw error;
+ }
+ }
+
+ // 获取切卡列表-设备流量-WIFI信息-连接数
+ async getSwitchCardList() {
+ try {
+ const params = {
+ responseFunction: 'findNetWorkInfo',
+ rfm: generateRfm()
+ };
+
+ const queryString = this.buildQueryString(params);
+ const fullUrl = `${this.baseUrl}/card/findCardMchInfo.do?${queryString}`;
+
+ const response = await httpRequest.post(fullUrl, null);
+
+ return response;
+ } catch (error) {
+ console.error('获取切卡列表-设备流量-WIFI信息-连接数异常:', error);
+ throw error;
+ }
+ }
+
+ // 获取卡信息(过期时间expireDate-状态statusStr)
+ async getCardInfo() {
+ try {
+ const params = {
+ iccidOrPhone: '',
+ responseFunction: 'findCardInfoCallback',
+ skipGift: true,
+ rfm: generateRfm()
+ };
+
+ const queryString = this.buildQueryString(params);
+ const fullUrl = `${this.baseUrl}/card/findCardInfo.do?${queryString}`;
+
+ const response = await httpRequest.post(fullUrl, null);
+
+ return response;
+ } catch (error) {
+ console.error('获取切卡列表-设备流量-WIFI信息-连接数异常:', error);
+ throw error;
+ }
+ }
+
+
+ // 修改WiFi信息
+ async modifyWifi({
+ cardNo,
+ ssid,
+ password
+ }) {
+ try {
+ const fullUrl = `${this.cardBaseUrl}/device/wifi-config`;
+
+ const response = await httpRequest.post(fullUrl, {
+ cardNo,
+ ssid,
+ password
+ });
+
+ return response;
+ } catch (error) {
+ console.error('修改WiFi信息失败:', error);
+ throw error;
+ }
+ }
+
+ // 重启设备
+ async restartDevice(deviceId) {
+
+ try {
+ const fullUrl = `${this.cardBaseUrl}/device/restart`;
+
+ const response = await httpRequest.post(fullUrl, {
+ cardNo: deviceId
+ });
+
+ return response;
+ } catch (error) {
+ console.error('重启设备失败:', error);
+ throw error;
+ }
+ }
+
+ // 恢复出厂设置
+ async restDevice(deviceId) {
+ try {
+ const fullUrl = `${this.cardBaseUrl}/device/factory-reset`;
+
+ const response = await httpRequest.post(fullUrl, {
+ cardNo: deviceId
+ });
+
+ return response;
+ } catch (error) {
+ console.error('恢复出厂设置失败:', error);
+ throw error;
+ }
+ }
+
+ // 获取实名地址
+ async getRealNameAddress(iccidMark) {
+ try {
+ const params = {
+ iccidOrPhone: "",
+ responseFunction: "getRealNameInfoCallback",
+ force: true,
+ iccidMark,
+ rfm: generateRfm()
+ };
+
+ const queryString = this.buildQueryString(params);
+ const fullUrl = `${this.baseUrl}/user/getRealNameInfo.do?${queryString}`;
+
+ const response = await httpRequest.post(fullUrl, null);
+
+ return response;
+ } catch (error) {
+ console.error('获取实名地址异常:', error);
+ throw error;
+ }
+ }
+
+ // 智能诊断
+ /*
+ {
+ "internalRetMsg": "",
+ "code": "0",
+ "current_session_user_resource_ids_index": "",
+ "app_result_key": "0",
+ "retMsg": "已提交复机申请,预计1小时内复机。",
+ "system_result_key": "0",
+ "isSuccess": "0"
+ }
+ */
+ async intelligentDiagnosis(iccidMark) {
+ try {
+ const params = {
+ responseFunction: "intelliDiagnose"
+ };
+
+ const queryString = this.buildQueryString(params);
+ const fullUrl = `${this.baseUrl}/card/intelliDiagnose.do?${queryString}`;
+
+ const response = await httpRequest.post(fullUrl, null);
+
+ return response;
+ } catch (error) {
+ console.error('智能诊断异常:', error);
+ throw error;
+ }
+ }
+
+ // 获取设备绑定的手机号
+ async getDeviceBindPhone() {
+ try {
+ const params = {
+ responseFunction: 'findMyBindRecord',
+ rfm: generateRfm()
+ };
+
+ const queryString = this.buildQueryString(params);
+ const fullUrl = `${this.baseUrl}/phonebindrecord/findMyBindRecord.do?${queryString}`;
+
+ const response = await httpRequest.post(fullUrl, null);
+
+ return response;
+ } catch (error) {
+ console.error('获取设备绑定的手机号异常:', error);
+ throw error;
+ }
+ }
+
+ // 获取短信验证码
+ async getSmsNumber(mobile) {
+ try {
+ const params = {
+ responseFunction: 'sendSms',
+ mobile,
+ rfm: generateRfm()
+ };
+
+ const queryString = this.buildQueryString(params);
+ const fullUrl = `${this.baseUrl}/phonebindrecord/sendSms.do?${queryString}`;
+
+ const response = await httpRequest.post(fullUrl, null);
+
+ return response;
+ } catch (error) {
+ console.error('获取短信验证码异常:', error);
+ throw error;
+ }
+ }
+
+ // 绑定手机号
+ async bindCardPhone(mobile, code) {
+ try {
+ const params = {
+ responseFunction: 'saveBind',
+ mobile,
+ code,
+ rfm: generateRfm()
+ };
+
+ const queryString = this.buildQueryString(params);
+ const fullUrl = `${this.baseUrl}/phonebindrecord/saveBind1.do?${queryString}`;
+
+ const response = await httpRequest.post(fullUrl, null);
+
+ return response;
+ } catch (error) {
+ console.error('绑定手机号异常:', error);
+ throw error;
+ }
+ }
+
+ // 退出登录
+ async logout() {
+ try {
+ const params = {
+ responseFunction: 'logoutCallback',
+ rfm: generateRfm()
+ };
+
+ const queryString = this.buildQueryString(params);
+ const fullUrl = `${this.baseUrl}/card/logout.do?${queryString}`;
+
+ const response = await httpRequest.post(fullUrl, null);
+
+ return response;
+ } catch (error) {
+ console.error('退出登录异常:', error);
+ throw error;
+ }
+ }
+
+ buildQueryString(params) {
+ return Object.keys(params)
+ .filter(key => params[key] !== undefined && params[key] !== null)
+ .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`)
+ .join('&');
+ }
+}
+
+const userApi = new UserApi();
+
+export default userApi;
\ No newline at end of file
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..01e05e3
--- /dev/null
+++ b/index.html
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/main.js b/main.js
new file mode 100644
index 0000000..b2a139f
--- /dev/null
+++ b/main.js
@@ -0,0 +1,24 @@
+import App from './App'
+import uviewPlus from 'uview-plus'
+
+// #ifndef VUE3
+import Vue from 'vue'
+import './uni.promisify.adaptor'
+Vue.config.productionTip = false
+App.mpType = 'app'
+const app = new Vue({
+ ...App
+})
+app.$mount()
+// #endif
+
+// #ifdef VUE3
+import { createSSRApp } from 'vue'
+export function createApp() {
+ const app = createSSRApp(App)
+ app.use(uviewPlus)
+ return {
+ app
+ }
+}
+// #endif
\ No newline at end of file
diff --git a/manifest.json b/manifest.json
new file mode 100644
index 0000000..998ee59
--- /dev/null
+++ b/manifest.json
@@ -0,0 +1,101 @@
+{
+ "name": "singer-card-h5",
+ "appid": "__UNI__45F0251",
+ "description": "",
+ "versionName": "1.0.0",
+ "versionCode": "100",
+ "transformPx": false,
+ /* 5+App特有相关 */
+ "app-plus": {
+ "usingComponents": true,
+ "nvueStyleCompiler": "uni-app",
+ "compilerVersion": 3,
+ "splashscreen": {
+ "alwaysShowBeforeRender": true,
+ "waiting": true,
+ "autoclose": true,
+ "delay": 0
+ },
+ /* 模块配置 */
+ "modules": {},
+ /* 应用发布信息 */
+ "distribute": {
+ /* android打包配置 */
+ "android": {
+ "permissions": [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ ""
+ ]
+ },
+ /* ios打包配置 */
+ "ios": {},
+ /* SDK配置 */
+ "sdkConfigs": {}
+ }
+ },
+ /* 快应用特有相关 */
+ "quickapp": {},
+ /* 小程序特有相关 */
+ "mp-weixin": {
+ "appid": "",
+ "setting": {
+ "urlCheck": false
+ },
+ "usingComponents": true
+ },
+ "mp-alipay": {
+ "usingComponents": true
+ },
+ "mp-baidu": {
+ "usingComponents": true
+ },
+ "mp-toutiao": {
+ "usingComponents": true
+ },
+ "uniStatistics": {
+ "enable": false
+ },
+ "vueVersion": "3",
+ "h5": {
+ "title": "物联网卡查询",
+ "template": "index.html",
+ "router": {
+ "mode": "history",
+ "base": "/singer-card/"
+ },
+ "optimization": {
+ "treeShaking": {
+ "enable": true
+ }
+ },
+ "publicPath": "./singer-card/",
+ "devServer": {
+ "proxy": {
+ "/kyhl-weixin-1.0": {
+ "target": "http://jhwl.whjhft.com",
+ "changeOrigin": true,
+ "secure": false
+ },
+ "/cm-api": {
+ "target": "http://report.whjhft.com",
+ "changeOrigin": true,
+ "secure": false
+ }
+ }
+ },
+ "sdkConfigs": {}
+ }
+}
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..7746928
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,1621 @@
+{
+ "name": "singer-card-h5",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "dependencies": {
+ "clipboard": "^2.0.11",
+ "dayjs": "^1.11.19",
+ "uview-plus": "^3.6.29"
+ },
+ "devDependencies": {
+ "sass": "^1.63.2",
+ "sass-loader": "^10.4.1"
+ }
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.13",
+ "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
+ "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.0",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/source-map": {
+ "version": "0.3.11",
+ "resolved": "https://registry.npmmirror.com/@jridgewell/source-map/-/source-map-0.3.11.tgz",
+ "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.25"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.31",
+ "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
+ "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "node_modules/@types/eslint": {
+ "version": "9.6.1",
+ "resolved": "https://registry.npmmirror.com/@types/eslint/-/eslint-9.6.1.tgz",
+ "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@types/estree": "*",
+ "@types/json-schema": "*"
+ }
+ },
+ "node_modules/@types/eslint-scope": {
+ "version": "3.7.7",
+ "resolved": "https://registry.npmmirror.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz",
+ "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@types/eslint": "*",
+ "@types/estree": "*"
+ }
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.8.tgz",
+ "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/@types/json-schema": {
+ "version": "7.0.15",
+ "resolved": "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.15.tgz",
+ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/node": {
+ "version": "25.0.3",
+ "resolved": "https://registry.npmmirror.com/@types/node/-/node-25.0.3.tgz",
+ "integrity": "sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "undici-types": "~7.16.0"
+ }
+ },
+ "node_modules/@webassemblyjs/ast": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmmirror.com/@webassemblyjs/ast/-/ast-1.14.1.tgz",
+ "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@webassemblyjs/helper-numbers": "1.13.2",
+ "@webassemblyjs/helper-wasm-bytecode": "1.13.2"
+ }
+ },
+ "node_modules/@webassemblyjs/floating-point-hex-parser": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmmirror.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz",
+ "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/@webassemblyjs/helper-api-error": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz",
+ "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/@webassemblyjs/helper-buffer": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz",
+ "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/@webassemblyjs/helper-numbers": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz",
+ "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@webassemblyjs/floating-point-hex-parser": "1.13.2",
+ "@webassemblyjs/helper-api-error": "1.13.2",
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "node_modules/@webassemblyjs/helper-wasm-bytecode": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz",
+ "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/@webassemblyjs/helper-wasm-section": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz",
+ "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.14.1",
+ "@webassemblyjs/helper-buffer": "1.14.1",
+ "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
+ "@webassemblyjs/wasm-gen": "1.14.1"
+ }
+ },
+ "node_modules/@webassemblyjs/ieee754": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmmirror.com/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz",
+ "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@xtuc/ieee754": "^1.2.0"
+ }
+ },
+ "node_modules/@webassemblyjs/leb128": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmmirror.com/@webassemblyjs/leb128/-/leb128-1.13.2.tgz",
+ "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "peer": true,
+ "dependencies": {
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "node_modules/@webassemblyjs/utf8": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmmirror.com/@webassemblyjs/utf8/-/utf8-1.13.2.tgz",
+ "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/@webassemblyjs/wasm-edit": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz",
+ "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.14.1",
+ "@webassemblyjs/helper-buffer": "1.14.1",
+ "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
+ "@webassemblyjs/helper-wasm-section": "1.14.1",
+ "@webassemblyjs/wasm-gen": "1.14.1",
+ "@webassemblyjs/wasm-opt": "1.14.1",
+ "@webassemblyjs/wasm-parser": "1.14.1",
+ "@webassemblyjs/wast-printer": "1.14.1"
+ }
+ },
+ "node_modules/@webassemblyjs/wasm-gen": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz",
+ "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.14.1",
+ "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
+ "@webassemblyjs/ieee754": "1.13.2",
+ "@webassemblyjs/leb128": "1.13.2",
+ "@webassemblyjs/utf8": "1.13.2"
+ }
+ },
+ "node_modules/@webassemblyjs/wasm-opt": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz",
+ "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.14.1",
+ "@webassemblyjs/helper-buffer": "1.14.1",
+ "@webassemblyjs/wasm-gen": "1.14.1",
+ "@webassemblyjs/wasm-parser": "1.14.1"
+ }
+ },
+ "node_modules/@webassemblyjs/wasm-parser": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz",
+ "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.14.1",
+ "@webassemblyjs/helper-api-error": "1.13.2",
+ "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
+ "@webassemblyjs/ieee754": "1.13.2",
+ "@webassemblyjs/leb128": "1.13.2",
+ "@webassemblyjs/utf8": "1.13.2"
+ }
+ },
+ "node_modules/@webassemblyjs/wast-printer": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmmirror.com/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz",
+ "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.14.1",
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "node_modules/@xtuc/ieee754": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmmirror.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
+ "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "peer": true
+ },
+ "node_modules/@xtuc/long": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmmirror.com/@xtuc/long/-/long-4.2.2.tgz",
+ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "peer": true
+ },
+ "node_modules/acorn": {
+ "version": "8.15.0",
+ "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.15.0.tgz",
+ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-import-phases": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmmirror.com/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz",
+ "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=10.13.0"
+ },
+ "peerDependencies": {
+ "acorn": "^8.14.0"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ajv-formats": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmmirror.com/ajv-formats/-/ajv-formats-2.1.1.tgz",
+ "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "ajv": "^8.0.0"
+ },
+ "peerDependencies": {
+ "ajv": "^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "ajv": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/ajv-formats/node_modules/ajv": {
+ "version": "8.17.1",
+ "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz",
+ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3",
+ "fast-uri": "^3.0.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ajv-formats/node_modules/json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/ajv-keywords": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
+ "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "ajv": "^6.9.1"
+ }
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/baseline-browser-mapping": {
+ "version": "2.9.10",
+ "resolved": "https://registry.npmmirror.com/baseline-browser-mapping/-/baseline-browser-mapping-2.9.10.tgz",
+ "integrity": "sha512-2VIKvDx8Z1a9rTB2eCkdPE5nSe28XnA+qivGnWHoB40hMMt/h1hSz0960Zqsn6ZyxWXUie0EBdElKv8may20AA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "peer": true,
+ "bin": {
+ "baseline-browser-mapping": "dist/cli.js"
+ }
+ },
+ "node_modules/big.js": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmmirror.com/big.js/-/big.js-5.2.2.tgz",
+ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/binary-extensions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.3.0.tgz",
+ "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fill-range": "^7.1.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.28.1",
+ "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.28.1.tgz",
+ "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "baseline-browser-mapping": "^2.9.0",
+ "caniuse-lite": "^1.0.30001759",
+ "electron-to-chromium": "^1.5.263",
+ "node-releases": "^2.0.27",
+ "update-browserslist-db": "^1.2.0"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001761",
+ "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001761.tgz",
+ "integrity": "sha512-JF9ptu1vP2coz98+5051jZ4PwQgd2ni8A+gYSN7EA7dPKIMf0pDlSUxhdmVOaV3/fYK5uWBkgSXJaRLr4+3A6g==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "CC-BY-4.0",
+ "peer": true
+ },
+ "node_modules/chokidar": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.6.0.tgz",
+ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/chrome-trace-event": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmmirror.com/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz",
+ "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=6.0"
+ }
+ },
+ "node_modules/clipboard": {
+ "version": "2.0.11",
+ "resolved": "https://registry.npmmirror.com/clipboard/-/clipboard-2.0.11.tgz",
+ "integrity": "sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==",
+ "license": "MIT",
+ "dependencies": {
+ "good-listener": "^1.2.2",
+ "select": "^1.1.2",
+ "tiny-emitter": "^2.0.0"
+ }
+ },
+ "node_modules/commander": {
+ "version": "2.20.3",
+ "resolved": "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/dayjs": {
+ "version": "1.11.19",
+ "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.19.tgz",
+ "integrity": "sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==",
+ "license": "MIT"
+ },
+ "node_modules/delegate": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmmirror.com/delegate/-/delegate-3.2.0.tgz",
+ "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==",
+ "license": "MIT"
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.5.267",
+ "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz",
+ "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==",
+ "dev": true,
+ "license": "ISC",
+ "peer": true
+ },
+ "node_modules/emojis-list": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmmirror.com/emojis-list/-/emojis-list-3.0.0.tgz",
+ "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/enhanced-resolve": {
+ "version": "5.18.4",
+ "resolved": "https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-5.18.4.tgz",
+ "integrity": "sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "graceful-fs": "^4.2.4",
+ "tapable": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/es-module-lexer": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/es-module-lexer/-/es-module-lexer-2.0.0.tgz",
+ "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/escalade": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz",
+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "peer": true,
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "peer": true,
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esrecurse/node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "peer": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "peer": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/events": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmmirror.com/events/-/events-3.3.0.tgz",
+ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.8.x"
+ }
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-uri": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmmirror.com/fast-uri/-/fast-uri-3.1.0.tgz",
+ "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ],
+ "license": "BSD-3-Clause",
+ "peer": true
+ },
+ "node_modules/fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/glob-to-regexp": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmmirror.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
+ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "peer": true
+ },
+ "node_modules/good-listener": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmmirror.com/good-listener/-/good-listener-1.2.2.tgz",
+ "integrity": "sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==",
+ "license": "MIT",
+ "dependencies": {
+ "delegate": "^3.1.2"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+ "dev": true,
+ "license": "ISC",
+ "peer": true
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/immutable": {
+ "version": "4.3.7",
+ "resolved": "https://registry.npmmirror.com/immutable/-/immutable-4.3.7.tgz",
+ "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/jest-worker": {
+ "version": "27.5.1",
+ "resolved": "https://registry.npmmirror.com/jest-worker/-/jest-worker-27.5.1.tgz",
+ "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@types/node": "*",
+ "merge-stream": "^2.0.0",
+ "supports-color": "^8.0.0"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ }
+ },
+ "node_modules/json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "json5": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/klona": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmmirror.com/klona/-/klona-2.0.6.tgz",
+ "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/loader-runner": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmmirror.com/loader-runner/-/loader-runner-4.3.1.tgz",
+ "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=6.11.5"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ }
+ },
+ "node_modules/loader-utils": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz",
+ "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^3.0.0",
+ "json5": "^2.1.2"
+ },
+ "engines": {
+ "node": ">=8.9.0"
+ }
+ },
+ "node_modules/merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/neo-async": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz",
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/node-releases": {
+ "version": "2.0.27",
+ "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.27.tgz",
+ "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "dev": true,
+ "license": "ISC",
+ "peer": true
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/punycode": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmmirror.com/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/randombytes": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz",
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/require-from-string": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmmirror.com/require-from-string/-/require-from-string-2.0.2.tgz",
+ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/sass": {
+ "version": "1.63.2",
+ "resolved": "https://registry.npmmirror.com/sass/-/sass-1.63.2.tgz",
+ "integrity": "sha512-u56TU0AIFqMtauKl/OJ1AeFsXqRHkgO7nCWmHaDwfxDo9GUMSqBA4NEh6GMuh1CYVM7zuROYtZrHzPc2ixK+ww==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "chokidar": ">=3.0.0 <4.0.0",
+ "immutable": "^4.0.0",
+ "source-map-js": ">=0.6.2 <2.0.0"
+ },
+ "bin": {
+ "sass": "sass.js"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/sass-loader": {
+ "version": "10.4.1",
+ "resolved": "https://registry.npmmirror.com/sass-loader/-/sass-loader-10.4.1.tgz",
+ "integrity": "sha512-aX/iJZTTpNUNx/OSYzo2KsjIUQHqvWsAhhUijFjAPdZTEhstjZI9zTNvkTTwsx+uNUJqUwOw5gacxQMx4hJxGQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "klona": "^2.0.4",
+ "loader-utils": "^2.0.0",
+ "neo-async": "^2.6.2",
+ "schema-utils": "^3.0.0",
+ "semver": "^7.3.2"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ },
+ "peerDependencies": {
+ "fibers": ">= 3.1.0",
+ "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0",
+ "sass": "^1.3.0",
+ "webpack": "^4.36.0 || ^5.0.0"
+ },
+ "peerDependenciesMeta": {
+ "fibers": {
+ "optional": true
+ },
+ "node-sass": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/schema-utils": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-3.3.0.tgz",
+ "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/json-schema": "^7.0.8",
+ "ajv": "^6.12.5",
+ "ajv-keywords": "^3.5.2"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ }
+ },
+ "node_modules/select": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmmirror.com/select/-/select-1.1.2.tgz",
+ "integrity": "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==",
+ "license": "MIT"
+ },
+ "node_modules/semver": {
+ "version": "7.7.3",
+ "resolved": "https://registry.npmmirror.com/semver/-/semver-7.7.3.tgz",
+ "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/serialize-javascript": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
+ "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "peer": true,
+ "dependencies": {
+ "randombytes": "^2.1.0"
+ }
+ },
+ "node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz",
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-support": {
+ "version": "0.5.21",
+ "resolved": "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz",
+ "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
+ "node_modules/tapable": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmmirror.com/tapable/-/tapable-2.3.0.tgz",
+ "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ }
+ },
+ "node_modules/terser": {
+ "version": "5.44.1",
+ "resolved": "https://registry.npmmirror.com/terser/-/terser-5.44.1.tgz",
+ "integrity": "sha512-t/R3R/n0MSwnnazuPpPNVO60LX0SKL45pyl9YlvxIdkH0Of7D5qM2EVe+yASRIlY5pZ73nclYJfNANGWPwFDZw==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "peer": true,
+ "dependencies": {
+ "@jridgewell/source-map": "^0.3.3",
+ "acorn": "^8.15.0",
+ "commander": "^2.20.0",
+ "source-map-support": "~0.5.20"
+ },
+ "bin": {
+ "terser": "bin/terser"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/terser-webpack-plugin": {
+ "version": "5.3.16",
+ "resolved": "https://registry.npmmirror.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.16.tgz",
+ "integrity": "sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@jridgewell/trace-mapping": "^0.3.25",
+ "jest-worker": "^27.4.5",
+ "schema-utils": "^4.3.0",
+ "serialize-javascript": "^6.0.2",
+ "terser": "^5.31.1"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ },
+ "peerDependencies": {
+ "webpack": "^5.1.0"
+ },
+ "peerDependenciesMeta": {
+ "@swc/core": {
+ "optional": true
+ },
+ "esbuild": {
+ "optional": true
+ },
+ "uglify-js": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/terser-webpack-plugin/node_modules/ajv": {
+ "version": "8.17.1",
+ "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz",
+ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3",
+ "fast-uri": "^3.0.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
+ "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3"
+ },
+ "peerDependencies": {
+ "ajv": "^8.8.2"
+ }
+ },
+ "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/terser-webpack-plugin/node_modules/schema-utils": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.3.3.tgz",
+ "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@types/json-schema": "^7.0.9",
+ "ajv": "^8.9.0",
+ "ajv-formats": "^2.1.1",
+ "ajv-keywords": "^5.1.0"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ }
+ },
+ "node_modules/tiny-emitter": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmmirror.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz",
+ "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==",
+ "license": "MIT"
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/undici-types": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-7.16.0.tgz",
+ "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/update-browserslist-db": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz",
+ "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "escalade": "^3.2.0",
+ "picocolors": "^1.1.1"
+ },
+ "bin": {
+ "update-browserslist-db": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/uview-plus": {
+ "version": "3.6.29",
+ "resolved": "https://registry.npmmirror.com/uview-plus/-/uview-plus-3.6.29.tgz",
+ "integrity": "sha512-zK522LR074rB4k3EARysmjsoOh+WjtFevIpvmV1wjVFqS3TT6brLZLd+gKa1ewxBsIgIPDTAabmnHWPsW9DWkQ==",
+ "dependencies": {
+ "clipboard": "^2.0.11",
+ "dayjs": "^1.11.3"
+ },
+ "engines": {
+ "HBuilderX": "^3.1.0",
+ "uni-app": "^4.66",
+ "uni-app-x": ""
+ }
+ },
+ "node_modules/watchpack": {
+ "version": "2.4.4",
+ "resolved": "https://registry.npmmirror.com/watchpack/-/watchpack-2.4.4.tgz",
+ "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "glob-to-regexp": "^0.4.1",
+ "graceful-fs": "^4.1.2"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/webpack": {
+ "version": "5.104.1",
+ "resolved": "https://registry.npmmirror.com/webpack/-/webpack-5.104.1.tgz",
+ "integrity": "sha512-Qphch25abbMNtekmEGJmeRUhLDbe+QfiWTiqpKYkpCOWY64v9eyl+KRRLmqOFA2AvKPpc9DC6+u2n76tQLBoaA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@types/eslint-scope": "^3.7.7",
+ "@types/estree": "^1.0.8",
+ "@types/json-schema": "^7.0.15",
+ "@webassemblyjs/ast": "^1.14.1",
+ "@webassemblyjs/wasm-edit": "^1.14.1",
+ "@webassemblyjs/wasm-parser": "^1.14.1",
+ "acorn": "^8.15.0",
+ "acorn-import-phases": "^1.0.3",
+ "browserslist": "^4.28.1",
+ "chrome-trace-event": "^1.0.2",
+ "enhanced-resolve": "^5.17.4",
+ "es-module-lexer": "^2.0.0",
+ "eslint-scope": "5.1.1",
+ "events": "^3.2.0",
+ "glob-to-regexp": "^0.4.1",
+ "graceful-fs": "^4.2.11",
+ "json-parse-even-better-errors": "^2.3.1",
+ "loader-runner": "^4.3.1",
+ "mime-types": "^2.1.27",
+ "neo-async": "^2.6.2",
+ "schema-utils": "^4.3.3",
+ "tapable": "^2.3.0",
+ "terser-webpack-plugin": "^5.3.16",
+ "watchpack": "^2.4.4",
+ "webpack-sources": "^3.3.3"
+ },
+ "bin": {
+ "webpack": "bin/webpack.js"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ },
+ "peerDependenciesMeta": {
+ "webpack-cli": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/webpack-sources": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.3.3.tgz",
+ "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/webpack/node_modules/ajv": {
+ "version": "8.17.1",
+ "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz",
+ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3",
+ "fast-uri": "^3.0.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/webpack/node_modules/ajv-keywords": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
+ "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3"
+ },
+ "peerDependencies": {
+ "ajv": "^8.8.2"
+ }
+ },
+ "node_modules/webpack/node_modules/json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/webpack/node_modules/schema-utils": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.3.3.tgz",
+ "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@types/json-schema": "^7.0.9",
+ "ajv": "^8.9.0",
+ "ajv-formats": "^2.1.1",
+ "ajv-keywords": "^5.1.0"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..ebb9f9b
--- /dev/null
+++ b/package.json
@@ -0,0 +1,11 @@
+{
+ "devDependencies": {
+ "sass": "^1.63.2",
+ "sass-loader": "^10.4.1"
+ },
+ "dependencies": {
+ "clipboard": "^2.0.11",
+ "dayjs": "^1.11.19",
+ "uview-plus": "^3.6.29"
+ }
+}
diff --git a/pages.json b/pages.json
new file mode 100644
index 0000000..1125c68
--- /dev/null
+++ b/pages.json
@@ -0,0 +1,61 @@
+{
+ "easycom": {
+ "autoscan": true,
+ // 注意一定要放在custom里,否则无效,https://ask.dcloud.net.cn/question/131175
+ "custom": {
+ "^u--(.*)": "uview-plus/components/u-$1/u-$1.vue",
+ "^up-(.*)": "uview-plus/components/u-$1/u-$1.vue",
+ "^u-([^-].*)": "uview-plus/components/u-$1/u-$1.vue"
+ }
+ },
+ "pages": [{
+ "path": "pages/login/login",
+ "style": {
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "pages/index/index",
+ "style": {
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "pages/package-order/package-order",
+ "style": {
+ "navigationBarTitleText": "套餐列表"
+ }
+ },
+ {
+ "path": "pages/switch/switch",
+ "style": {
+ "navigationBarTitleText": "切换运营商"
+ }
+ },
+ {
+ "path": "pages/bind/bind",
+ "style": {
+ "navigationBarTitleText": "绑定手机号"
+ }
+ },
+ {
+ "path": "pages/auth/auth",
+ "style": {
+ "navigationBarTitleText": "实名认证"
+ }
+ },
+ {
+ "path": "pages/error/error",
+ "style": {
+ "navigationStyle": "custom"
+ }
+ }
+ ],
+ "globalStyle": {
+ "navigationBarTextStyle": "black",
+ "navigationBarTitleText": "物联网卡查询",
+ "navigationBarBackgroundColor": "#F8F8F8",
+ "backgroundColor": "#F8F8F8"
+ },
+ "uniIdRouter": {}
+}
\ No newline at end of file
diff --git a/pages/auth/auth.vue b/pages/auth/auth.vue
new file mode 100644
index 0000000..921da12
--- /dev/null
+++ b/pages/auth/auth.vue
@@ -0,0 +1,221 @@
+
+
+
+
+
+
+
+
+
+ ICCID: {{item.iccidMark}}
+
+
+ 运营商: {{getLogo(item.category).name}}
+
+
+
+
+
+
+ 已实名
+
+
+ 去实名
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/bind/bind.vue b/pages/bind/bind.vue
new file mode 100644
index 0000000..bc023bc
--- /dev/null
+++ b/pages/bind/bind.vue
@@ -0,0 +1,148 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 绑定手机号
+
+
+
+
+
+
+
+
+
+
+
+
+ 更换绑定
+ 退出
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/error/error.vue b/pages/error/error.vue
new file mode 100644
index 0000000..ced36b7
--- /dev/null
+++ b/pages/error/error.vue
@@ -0,0 +1,21 @@
+
+
+ 请在微信中打开...
+
+
+
+
+
+
diff --git a/pages/index/index.vue b/pages/index/index.vue
new file mode 100644
index 0000000..5adc371
--- /dev/null
+++ b/pages/index/index.vue
@@ -0,0 +1,1102 @@
+
+
+
+
+
+
+
+
+
+ {{userInfo.nickname || "单卡用户"}}
+ 设备已运行:{{formatSecondsToTime(deviceInfo.run_time)}}
+
+
+ {{onlineStatus}}
+
+
+
+
+
+
+
+
+
+
+ 当前使用卡:{{deviceInfo.currentIccid || "无"}}
+
+
+
+ {{isRealName ? "已实名" : "未实名"}}
+
+
+
+
+
+ 到期时间:{{deviceInfo.expireDate}}
+
+
+ {{deviceInfo.statusStr}}
+
+
+
+
+
+
+
+ 信号强度
+ {{getSignalText(deviceInfo.rssi)}}
+
+
+ 设备电量
+ {{deviceInfo.battery || 0 }} %
+
+
+ 连接数量
+ {{deviceInfo.connCnt || 0}} 台
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 已使用
+
+ {{formatDataSize(deviceInfo.totalBytesCnt)}}
+ GB
+
+
+
+ 总流量
+
+ {{formatDataSize(deviceInfo.flowSize)}}
+ GB
+
+
+
+ 剩余
+
+ {{formatDataSize(deviceInfo.flowSize - deviceInfo.totalBytesCnt)}}
+ GB
+
+
+
+
+
+
+
+
+
+
+
+ 网络名称
+ {{deviceInfo.ssidName}}
+
+
+
+
+
+ 连接密码
+ {{deviceInfo.ssidPwd}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 套餐订购
+
+
+
+
+
+ 智能诊断
+
+
+
+
+
+ 后台管理
+
+
+
+
+
+
+
+ {{alreadyBindPhone ? "已绑定" : "未绑定" }}
+
+
+
+
+
+
+
+ {{isRealName ? "已实名" : "未实名"}}
+
+
+
+
+
+
+ 重启设备
+
+
+
+
+
+ 恢复出厂
+
+
+
+
+
+ 退出登录
+
+
+
+
+
+
+
+
+ 修改WIFI
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 在线客服
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/login/login.vue b/pages/login/login.vue
new file mode 100644
index 0000000..172caa9
--- /dev/null
+++ b/pages/login/login.vue
@@ -0,0 +1,109 @@
+
+
+
+
+ 物联网卡登录
+
+
+
+
+
+ 立即登录
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/package-order/package-order.vue b/pages/package-order/package-order.vue
new file mode 100644
index 0000000..5576e40
--- /dev/null
+++ b/pages/package-order/package-order.vue
@@ -0,0 +1,301 @@
+
+
+
+
+ {{item.name}}
+
+
+ ¥{{item.accountMoney}}
+
+
+ 请在套餐有效期内使用,有效期内流量用完可充值加餐包即可继续使用
+
+
+ 立即订购
+
+
+
+
+
+
+ 该设备暂无套餐, 请联系客服购买
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/switch/switch.vue b/pages/switch/switch.vue
new file mode 100644
index 0000000..c5c4414
--- /dev/null
+++ b/pages/switch/switch.vue
@@ -0,0 +1,234 @@
+
+
+
+
+
+
+
+
+
+
+
+ ICCID: {{item.iccidMark}}
+
+
+ {{getLogo(item.category).name}}
+
+
+
+
+ {{item.iccidMark===currentIccid ? "当前使用" : ""}}
+
+
+ {{item.iccidMark===currentIccidMain ? "当前主卡" : ""}}
+
+
+
+ {{item.isRealName ? "已实名" : "未实名"}}
+
+
+
+
+
+
+
+
+ 切换此运营商
+
+
+ 跳转实名页面
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/static/authentication.png b/static/authentication.png
new file mode 100644
index 0000000000000000000000000000000000000000..e0030356d5c5725b1bfa0bc90e42933676c5c627
GIT binary patch
literal 136886
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