From ce01e3cff82b90c0f1c5e2ea231d4af40b8a55c8 Mon Sep 17 00:00:00 2001
From: "Ray.Hao" <1490493387@qq.com>
Date: Thu, 23 Jul 2026 17:46:16 +0800
Subject: [PATCH] =?UTF-8?q?refactor:=20APP=20=E6=89=AB=E7=A0=81=E7=99=BB?=
=?UTF-8?q?=E5=BD=95=E5=92=8C=E6=96=87=E6=A1=A3=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 2 +-
components.d.ts | 7 -
deploy.mjs | 31 +++
docs/images/qrcode/wechat-official.png | Bin 4268298 -> 0 bytes
package.json | 1 +
public/favicon.ico | Bin 35837 -> 4286 bytes
{docs => public}/images/preview/app-01.png | Bin
{docs => public}/images/preview/app-02.png | Bin
{docs => public}/images/preview/app-03.png | Bin
{docs => public}/images/preview/app-04.png | Bin
{docs => public}/images/qrcode/wechat-mp.jpg | Bin
public/images/qrcode/wechat-official.jpg | Bin 0 -> 27403 bytes
.../images/qrcode/wechat-personal.png | Bin
public/logo.png | Bin 0 -> 19649 bytes
src/api/auth.ts | 51 ++++
src/pages.json | 9 +
src/pages/login/index.vue | 12 +-
src/pages/mine/about/index.vue | 2 +-
src/pages/mine/index.vue | 31 ++-
src/pages/qr-code-confirm/index.vue | 219 ++++++++++++++++++
src/static/logo.png | Bin 42038 -> 0 bytes
src/store/modules/user.ts | 28 +++
src/types/uni-pages.d.ts | 1 +
23 files changed, 382 insertions(+), 12 deletions(-)
create mode 100644 deploy.mjs
delete mode 100644 docs/images/qrcode/wechat-official.png
rename {docs => public}/images/preview/app-01.png (100%)
rename {docs => public}/images/preview/app-02.png (100%)
rename {docs => public}/images/preview/app-03.png (100%)
rename {docs => public}/images/preview/app-04.png (100%)
rename {docs => public}/images/qrcode/wechat-mp.jpg (100%)
create mode 100644 public/images/qrcode/wechat-official.jpg
rename {docs => public}/images/qrcode/wechat-personal.png (100%)
create mode 100644 public/logo.png
create mode 100644 src/pages/qr-code-confirm/index.vue
delete mode 100644 src/static/logo.png
diff --git a/README.md b/README.md
index 2bf2fce..66dc1f2 100644
--- a/README.md
+++ b/README.md
@@ -171,7 +171,7 @@ youlai-app/
如果这个项目对你有帮助,欢迎关注公众号、体验小程序,也可以添加作者微信交流技术、问题反馈、二次开发和商务合作。
-
+
diff --git a/components.d.ts b/components.d.ts
index 2b980a0..3e67f27 100644
--- a/components.d.ts
+++ b/components.d.ts
@@ -19,14 +19,11 @@ declare module 'vue' {
QiunError: typeof import('./src/components/qiun-error/qiun-error.vue')['default']
QiunLoading: typeof import('./src/components/qiun-loading/qiun-loading.vue')['default']
WdActionSheet: typeof import('@wot-ui/ui/components/wd-action-sheet/wd-action-sheet.vue')['default']
- WdBadge: typeof import('@wot-ui/ui/components/wd-badge/wd-badge.vue')['default']
WdButton: typeof import('@wot-ui/ui/components/wd-button/wd-button.vue')['default']
- WdCalendar: typeof import('@wot-ui/ui/components/wd-calendar/wd-calendar.vue')['default']
WdCard: typeof import('@wot-ui/ui/components/wd-card/wd-card.vue')['default']
WdCascader: typeof import('@wot-ui/ui/components/wd-cascader/wd-cascader.vue')['default']
WdCell: typeof import('@wot-ui/ui/components/wd-cell/wd-cell.vue')['default']
WdCellGroup: typeof import('@wot-ui/ui/components/wd-cell-group/wd-cell-group.vue')['default']
- WdCheckbox: typeof import('@wot-ui/ui/components/wd-checkbox/wd-checkbox.vue')['default']
WdCollapse: typeof import('@wot-ui/ui/components/wd-collapse/wd-collapse.vue')['default']
WdCollapseItem: typeof import('@wot-ui/ui/components/wd-collapse-item/wd-collapse-item.vue')['default']
WdConfigProvider: typeof import('@wot-ui/ui/components/wd-config-provider/wd-config-provider.vue')['default']
@@ -38,9 +35,6 @@ declare module 'vue' {
WdFab: typeof import('@wot-ui/ui/components/wd-fab/wd-fab.vue')['default']
WdForm: typeof import('@wot-ui/ui/components/wd-form/wd-form.vue')['default']
WdFormItem: typeof import('@wot-ui/ui/components/wd-form-item/wd-form-item.vue')['default']
- WdGap: typeof import('@wot-ui/ui/components/wd-gap/wd-gap.vue')['default']
- WdGrid: typeof import('@wot-ui/ui/components/wd-grid/wd-grid.vue')['default']
- WdGridItem: typeof import('@wot-ui/ui/components/wd-grid-item/wd-grid-item.vue')['default']
WdIcon: typeof import('@wot-ui/ui/components/wd-icon/wd-icon.vue')['default']
WdImgCropper: typeof import('@wot-ui/ui/components/wd-img-cropper/wd-img-cropper.vue')['default']
WdInput: typeof import('@wot-ui/ui/components/wd-input/wd-input.vue')['default']
@@ -53,7 +47,6 @@ declare module 'vue' {
WdRadioGroup: typeof import('@wot-ui/ui/components/wd-radio-group/wd-radio-group.vue')['default']
WdSearch: typeof import('@wot-ui/ui/components/wd-search/wd-search.vue')['default']
WdSelectPicker: typeof import('@wot-ui/ui/components/wd-select-picker/wd-select-picker.vue')['default']
- WdSwiper: typeof import('@wot-ui/ui/components/wd-swiper/wd-swiper.vue')['default']
WdSwitch: typeof import('@wot-ui/ui/components/wd-switch/wd-switch.vue')['default']
WdTabbar: typeof import('@wot-ui/ui/components/wd-tabbar/wd-tabbar.vue')['default']
WdTabbarItem: typeof import('@wot-ui/ui/components/wd-tabbar-item/wd-tabbar-item.vue')['default']
diff --git a/deploy.mjs b/deploy.mjs
new file mode 100644
index 0000000..1a9fc4a
--- /dev/null
+++ b/deploy.mjs
@@ -0,0 +1,31 @@
+/* eslint-disable no-console */
+/**
+ * 部署 H5 到服务器 | 用法:pnpm run deploy
+ *
+ * 前置:SSH 免密登录(只需一次)
+ * 1. 如果 %USERPROFILE%\.ssh\id_rsa 已存在跳过,否则 ssh-keygen -t rsa 回车到底
+ *
+ * 2. 拷贝公钥到服务器(会提示输一次服务器密码):
+ * Windows: type %USERPROFILE%\.ssh\id_rsa.pub | ssh root@server "cat >> ~/.ssh/authorized_keys"
+ * Mac: ssh-copy-id root@server
+ *
+ * 3. ssh root@server 输完不弹密码直接连上即成功
+ */
+import { execSync } from "node:child_process";
+
+const HOST = "www.youlai.tech";
+const USER = "root";
+const PORT = 1010;
+const TARGET = "/mnt/nginx/html/app";
+// =========================================================
+
+console.log("构建中...");
+execSync("pnpm build:h5", { stdio: "inherit" });
+
+console.log(`部署 → ${USER}@${HOST}:${TARGET}`);
+execSync(`scp -o StrictHostKeyChecking=no -P ${PORT} -r "dist/build/h5/." "${USER}@${HOST}:${TARGET}/"`, {
+ stdio: "inherit",
+ shell: true,
+});
+
+console.log("部署完成");
diff --git a/docs/images/qrcode/wechat-official.png b/docs/images/qrcode/wechat-official.png
deleted file mode 100644
index 54f1e17f2608ddd6663a60467bc2a07587a43993..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 4268298
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