17 Commits

Author SHA1 Message Date
anonymous 3868901358 fix: bug 2025-01-17 08:49:16 +08:00
anonymous 2516c3e049 fix: bug 2025-01-04 09:49:06 +08:00
anonymous 4ff9d1d182 fix: 修复bug 2025-01-03 22:39:31 +08:00
anonymous db653bba97 fix: 银行卡管理 2025-01-02 17:14:57 +08:00
anonymous e315d8d752 fix: 重载时清空数组 2025-01-02 16:39:36 +08:00
anonymous 0a3c768629 fix: 用户名称显示 2025-01-02 16:31:42 +08:00
anonymous 77316fd1ff chore: 切换生产环境 2025-01-02 13:45:26 +08:00
anonymous 3a3e9e3d7c 取消反向代理 2025-01-02 11:25:36 +08:00
anonymous 01bc4b186c fix: bug 2025-01-02 11:11:08 +08:00
anonymous ea852b97c1 fix: bug 2025-01-02 11:10:22 +08:00
anonymous 30369077af fix: 没数据时隐藏图片 2025-01-02 11:06:05 +08:00
anonymous bcd940efe3 feat: 对接完接口 2025-01-02 11:05:26 +08:00
anonymous 6d62cc0567 feat: 完成页面开发 2024-12-27 19:01:54 +08:00
anonymous b642a7d5e7 fix: 首页修复 2024-12-27 14:42:33 +08:00
anonymous 06679d50e2 feat: 路由管理 2024-12-27 14:37:17 +08:00
Your Name 8d6a9f3eec chore: 修改描述 2024-12-26 13:46:31 +08:00
Your Name 7dd5e5b259 first commit 2024-12-26 12:14:47 +08:00
126 changed files with 1832 additions and 1931 deletions
+1
View File
@@ -97,6 +97,7 @@
"useId": true,
"useModel": true,
"useTemplateRef": true,
"useCaptcha": true,
"useListPageRequest": true
}
}
+6
View File
@@ -33,6 +33,12 @@ module.exports = {
ignorePseudoClasses: ['global', 'export', 'v-deep', 'deep'],
},
],
'unit-no-unknown': [
true,
{
ignoreUnits: ['rpx'],
},
],
// 处理小程序page标签不认识的问题
'selector-type-no-unknown': [
true,
+1 -4
View File
@@ -41,11 +41,9 @@
"dcloudio",
"iconfont",
"qrcode",
"realname",
"refresherrefresh",
"scrolltolower",
"tabbar",
"unibest",
"uvui",
"WechatMiniprogram"
],
@@ -60,6 +58,5 @@
"CHANGELOG.md": "CHANGELOG*",
"package.json": "pnpm-lock.yaml,pnpm-workspace.yaml,LICENSE,.gitattributes,.gitignore,.gitpod.yml,CNAME,.npmrc,.browserslistrc",
".eslintrc.cjs": ".eslintignore,.prettierignore,.stylelintignore,.commitlintrc.*,.prettierrc.*,.stylelintrc.*,.eslintrc-auto-import.json,.editorconfig,.commitlint.cjs"
},
"i18n-ally.localesPaths": ["src/locale"]
}
}
+1 -1
View File
@@ -5,5 +5,5 @@
</p>
<h1 align="center">
<a href="https://github.com/feige996/unibest" target="_blank">unibest - 最好的 uniapp 开发框架</a>
<a href="https://github.com/feige996/unibest" target="_blank">x-1</a>
</h1>
Vendored
+2 -2
View File
@@ -7,8 +7,8 @@ VITE_WX_APPID = 'wxa2abb91f64032a2b'
# h5部署网站的base,配置到 manifest.config.ts 里的 h5.router.base
VITE_APP_PUBLIC_BASE=/
VITE_SERVER_BASEURL = 'https://api.maldiveswallet.com'
VITE_UPLOAD_BASEURL = 'https://ukw0y1.laf.run/upload'
VITE_SERVER_BASEURL = 'https://api.divine913.com'
VITE_UPLOAD_BASEURL = 'https://api.divine913.com/api/v1/UploadFile'
# h5是否需要配置代理
VITE_APP_PROXY=false
+1 -1
View File
@@ -14,7 +14,7 @@
'" />',
)
</script>
<title>unibest</title>
<title></title>
<!--preload-links-->
<!--app-context-->
</head>
+20 -21
View File
@@ -1,5 +1,5 @@
{
"name": "马尔代夫国际钱包",
"name": "中国经济",
"type": "commonjs",
"version": "2.5.3",
"description": "unibest - 最好的 uniapp 开发模板",
@@ -87,28 +87,27 @@
},
"dependencies": {
"@chenfengyuan/vue-qrcode": "^2.0.0",
"@dcloudio/uni-app": "3.0.0-alpha-4040320241223001",
"@dcloudio/uni-app-harmony": "3.0.0-alpha-4040320241223001",
"@dcloudio/uni-app-plus": "3.0.0-alpha-4040320241223001",
"@dcloudio/uni-components": "3.0.0-alpha-4040320241223001",
"@dcloudio/uni-h5": "3.0.0-alpha-4040320241223001",
"@dcloudio/uni-mp-alipay": "3.0.0-alpha-4040320241223001",
"@dcloudio/uni-mp-baidu": "3.0.0-alpha-4040320241223001",
"@dcloudio/uni-mp-jd": "3.0.0-alpha-4040320241223001",
"@dcloudio/uni-mp-kuaishou": "3.0.0-alpha-4040320241223001",
"@dcloudio/uni-mp-lark": "3.0.0-alpha-4040320241223001",
"@dcloudio/uni-mp-qq": "3.0.0-alpha-4040320241223001",
"@dcloudio/uni-mp-toutiao": "3.0.0-alpha-4040320241223001",
"@dcloudio/uni-mp-weixin": "3.0.0-alpha-4040320241223001",
"@dcloudio/uni-mp-xhs": "3.0.0-alpha-4040320241223001",
"@dcloudio/uni-quickapp-webview": "3.0.0-alpha-4040320241223001",
"@dcloudio/uni-app": "3.0.0-4020920240930001",
"@dcloudio/uni-app-harmony": "3.0.0-4020920240930001",
"@dcloudio/uni-app-plus": "3.0.0-4020920240930001",
"@dcloudio/uni-components": "3.0.0-4020920240930001",
"@dcloudio/uni-h5": "3.0.0-4020920240930001",
"@dcloudio/uni-mp-alipay": "3.0.0-4020920240930001",
"@dcloudio/uni-mp-baidu": "3.0.0-4020920240930001",
"@dcloudio/uni-mp-jd": "3.0.0-4020920240930001",
"@dcloudio/uni-mp-kuaishou": "3.0.0-4020920240930001",
"@dcloudio/uni-mp-lark": "3.0.0-4020920240930001",
"@dcloudio/uni-mp-qq": "3.0.0-4020920240930001",
"@dcloudio/uni-mp-toutiao": "3.0.0-4020920240930001",
"@dcloudio/uni-mp-weixin": "3.0.0-4020920240930001",
"@dcloudio/uni-mp-xhs": "3.0.0-4020920240930001",
"@dcloudio/uni-quickapp-webview": "3.0.0-4020920240930001",
"dayjs": "1.11.10",
"nprogress": "^0.2.0",
"pinia": "2.0.36",
"pinia-plugin-persistedstate": "3.2.1",
"qs": "6.5.3",
"vue": "3.4.21",
"vue-i18n": "9.1.9",
"wot-design-uni": "^1.4.0",
"z-paging": "^2.8.4"
},
@@ -116,10 +115,10 @@
"@commitlint/cli": "^18.6.1",
"@commitlint/config-conventional": "^18.6.3",
"@dcloudio/types": "^3.4.14",
"@dcloudio/uni-automator": "3.0.0-alpha-4040320241223001",
"@dcloudio/uni-cli-shared": "3.0.0-alpha-4040320241223001",
"@dcloudio/uni-stacktracey": "3.0.0-alpha-4040320241223001",
"@dcloudio/vite-plugin-uni": "3.0.0-alpha-4040320241223001",
"@dcloudio/uni-automator": "3.0.0-4020920240930001",
"@dcloudio/uni-cli-shared": "3.0.0-4020920240930001",
"@dcloudio/uni-stacktracey": "3.0.0-4020920240930001",
"@dcloudio/vite-plugin-uni": "3.0.0-4020920240930001",
"@esbuild/darwin-arm64": "0.20.2",
"@esbuild/darwin-x64": "0.20.2",
"@iconify-json/carbon": "^1.2.4",
+8 -9
View File
@@ -32,19 +32,18 @@ export default defineUniPages({
pagePath: 'pages/index/index',
text: '首页',
},
{
iconPath: 'static/tabbar/invest.png',
selectedIconPath: 'static/tabbar/investHL.png',
pagePath: 'pages/invest/index',
text: '投资',
},
{
iconPath: 'static/tabbar/house.png',
selectedIconPath: 'static/tabbar/houseHL.png',
pagePath: 'pages/invite/index',
text: '邀请好友',
pagePath: 'pages/house/index',
text: '房屋',
},
// {
// iconPath: 'static/tabbar/invest.png',
// selectedIconPath: 'static/tabbar/investHL.png',
// pagePath: 'pages/invest/index',
// text: '理财',
// },
{
iconPath: 'static/tabbar/personal.png',
selectedIconPath: 'static/tabbar/personalHL.png',
+242 -278
View File
@@ -15,50 +15,50 @@ importers:
specifier: ^2.0.0
version: 2.0.0(qrcode@1.5.4)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-app':
specifier: 3.0.0-alpha-4040320241223001
version: 3.0.0-alpha-4040320241223001(@dcloudio/types@3.4.14)(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
specifier: 3.0.0-4020920240930001
version: 3.0.0-4020920240930001(@dcloudio/types@3.4.14)(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-app-harmony':
specifier: 3.0.0-alpha-4040320241223001
version: 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vite@5.2.8(@types/node@20.17.9)(sass@1.77.8)(terser@5.36.0))(vue@3.4.21(typescript@5.7.2))
specifier: 3.0.0-4020920240930001
version: 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vite@5.2.8(@types/node@20.17.9)(sass@1.77.8)(terser@5.36.0))(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-app-plus':
specifier: 3.0.0-alpha-4040320241223001
version: 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vite@5.2.8(@types/node@20.17.9)(sass@1.77.8)(terser@5.36.0))(vue@3.4.21(typescript@5.7.2))
specifier: 3.0.0-4020920240930001
version: 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vite@5.2.8(@types/node@20.17.9)(sass@1.77.8)(terser@5.36.0))(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-components':
specifier: 3.0.0-alpha-4040320241223001
version: 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
specifier: 3.0.0-4020920240930001
version: 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-h5':
specifier: 3.0.0-alpha-4040320241223001
version: 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
specifier: 3.0.0-4020920240930001
version: 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-alipay':
specifier: 3.0.0-alpha-4040320241223001
version: 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
specifier: 3.0.0-4020920240930001
version: 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-baidu':
specifier: 3.0.0-alpha-4040320241223001
version: 3.0.0-alpha-4040320241223001(@dcloudio/types@3.4.14)(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
specifier: 3.0.0-4020920240930001
version: 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-jd':
specifier: 3.0.0-alpha-4040320241223001
version: 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
specifier: 3.0.0-4020920240930001
version: 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-kuaishou':
specifier: 3.0.0-alpha-4040320241223001
version: 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
specifier: 3.0.0-4020920240930001
version: 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-lark':
specifier: 3.0.0-alpha-4040320241223001
version: 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
specifier: 3.0.0-4020920240930001
version: 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-qq':
specifier: 3.0.0-alpha-4040320241223001
version: 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
specifier: 3.0.0-4020920240930001
version: 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-toutiao':
specifier: 3.0.0-alpha-4040320241223001
version: 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
specifier: 3.0.0-4020920240930001
version: 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-weixin':
specifier: 3.0.0-alpha-4040320241223001
version: 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
specifier: 3.0.0-4020920240930001
version: 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-xhs':
specifier: 3.0.0-alpha-4040320241223001
version: 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
specifier: 3.0.0-4020920240930001
version: 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-quickapp-webview':
specifier: 3.0.0-alpha-4040320241223001
version: 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
specifier: 3.0.0-4020920240930001
version: 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
dayjs:
specifier: 1.11.10
version: 1.11.10
@@ -77,9 +77,6 @@ importers:
vue:
specifier: 3.4.21
version: 3.4.21(typescript@5.7.2)
vue-i18n:
specifier: 9.1.9
version: 9.1.9(vue@3.4.21(typescript@5.7.2))
wot-design-uni:
specifier: ^1.4.0
version: 1.4.0(vue@3.4.21(typescript@5.7.2))
@@ -97,17 +94,17 @@ importers:
specifier: ^3.4.14
version: 3.4.14
'@dcloudio/uni-automator':
specifier: 3.0.0-alpha-4040320241223001
version: 3.0.0-alpha-4040320241223001(jest-environment-node@27.5.1)(jest@27.0.4)(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
specifier: 3.0.0-4020920240930001
version: 3.0.0-4020920240930001(jest-environment-node@27.5.1)(jest@27.0.4)(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-cli-shared':
specifier: 3.0.0-alpha-4040320241223001
version: 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
specifier: 3.0.0-4020920240930001
version: 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-stacktracey':
specifier: 3.0.0-alpha-4040320241223001
version: 3.0.0-alpha-4040320241223001
specifier: 3.0.0-4020920240930001
version: 3.0.0-4020920240930001
'@dcloudio/vite-plugin-uni':
specifier: 3.0.0-alpha-4040320241223001
version: 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vite@5.2.8(@types/node@20.17.9)(sass@1.77.8)(terser@5.36.0))(vue@3.4.21(typescript@5.7.2))
specifier: 3.0.0-4020920240930001
version: 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vite@5.2.8(@types/node@20.17.9)(sass@1.77.8)(terser@5.36.0))(vue@3.4.21(typescript@5.7.2))
'@esbuild/darwin-arm64':
specifier: 0.20.2
version: 0.20.2
@@ -965,113 +962,110 @@ packages:
'@dcloudio/types@3.4.14':
resolution: {integrity: sha512-VolQeZfTh8pQFsr2IlfIVX93blfvGTuBoJuZUc7iWOqtHV8gDrq6fXLhzsVlgZyuhhRZLOxlo33rkEqnY+ucAw==}
'@dcloudio/uni-app-harmony@3.0.0-alpha-4040320241223001':
resolution: {integrity: sha512-ewRYBDyrTq7KBq61Kz9Fa44iVecXnLZb9pWsTRcsdOkijmlOdsaMWw4xvv93cm+NmHqyH8cN39+0JBx/1HrwrA==}
'@dcloudio/uni-app-harmony@3.0.0-4020920240930001':
resolution: {integrity: sha512-YHAJSX1DCaLTr7MDc4mOJ/0JfECn2YS9b5EvMyl5WUy8CIDSupOxFpygnpcUHTlyExdQOivp35TerYfLa0BDew==}
'@dcloudio/uni-app-plus@3.0.0-alpha-4040320241223001':
resolution: {integrity: sha512-4KhT8w4gxvcCqnO6+ejj1FskIn5MSErYOy+aA2MXKcBG/ZavMLyYXAC1dP6O4IHMZYAa1RomZr4Gk752NZ8+nQ==}
'@dcloudio/uni-app-plus@3.0.0-4020920240930001':
resolution: {integrity: sha512-0MQx5lAZ+y8E5/jjkjSfpyZvhUNaqRZbcD7u+cragHjE17PndQo+h7wmyGYgzGQYmuikiD8CX+o+NtTo4Z/TiA==}
'@dcloudio/uni-app-uts@3.0.0-alpha-4040320241223001':
resolution: {integrity: sha512-t2uEagf/F1SwvDg+IBjg+rm/gYr8l6p+MsiqIvBye9bLv/7Y1urX5aAsiZ814MNqshCnBLpwmYadQRHhybnOeg==}
'@dcloudio/uni-app-uts@3.0.0-4020920240930001':
resolution: {integrity: sha512-OaEyI9hrjR6I8bNc9GdfOos/zWfiA0eIy4gLLVpkGxpMmAoqR9j5fs7g804SDAn3NtzNtzOJrAXx7sl5mJwsIw==}
'@dcloudio/uni-app-vite@3.0.0-alpha-4040320241223001':
resolution: {integrity: sha512-CGgtuV6HJ3QHUxERcPnZj2Jz170IzNrsB3fpyk/9V8hwhDHf5xD+HaHQp8oOh0sqSj8NKrgix8dV+t8J8impgg==}
'@dcloudio/uni-app-vite@3.0.0-4020920240930001':
resolution: {integrity: sha512-hG7aTOb1Clgli8qeMVFItadlAT51Kbw2J7CpbWJ5Pkv8uv63QAo2ruRiHs2eYTWRpfXRqr7nZ3J7d74VbrUZ7A==}
'@dcloudio/uni-app-vue@3.0.0-alpha-4040320241223001':
resolution: {integrity: sha512-QGsAFq3Kg4YhSqH0wUds/i2YGmzzVWJ5dOaYYFi03l0BLQ/vgxApbBLQLEkpbGRqfpkDL7Fh/X6U17JHetgS7Q==}
'@dcloudio/uni-app-vue@3.0.0-4020920240930001':
resolution: {integrity: sha512-GMmN0NJjyb0I/G3tE8kBN9DkvwTBKJjjnXzSCCPDbXJbH8YJiThjzyBBdyXb1cJwdgAhwTbwX8dWu7uyT+bllA==}
'@dcloudio/uni-app@3.0.0-alpha-4040320241223001':
resolution: {integrity: sha512-/IYlcA+vb3r9IVwC0Kssjq1DM6ADOd6E0lRYZiVo87U4/0wKJLLA4D+ac+e9O2r5HeZ/ltm4YJpK/cH2ncxIYw==}
'@dcloudio/uni-app@3.0.0-4020920240930001':
resolution: {integrity: sha512-Er2pOCUTss7h5sYL32gLAWbYysYyhYzj8ZYKAjF/1aX+YkigD7beU1oX4M/m5yOo1RoogsQNTs5dyUn7R1sFrA==}
peerDependencies:
'@dcloudio/types': ^3.4.14
'@dcloudio/types': ^3.4.11
'@dcloudio/uni-automator@3.0.0-alpha-4040320241223001':
resolution: {integrity: sha512-qrTqkU9jVOsZSxcoKBZc8pphWGtCnu6GMfTuO0Nh0c2/71z6cCgVluEk3nnKnCAfEB7Lk5fI1CEH5GUtoZJSFQ==}
'@dcloudio/uni-automator@3.0.0-4020920240930001':
resolution: {integrity: sha512-HsCw/ulfiG8Kavn1cz1bCHOcUiBxCvyphOjMMjnNIJZb/cgQl7HpJQ7PThpQXDpEn2oNRKw/6fKsX2ZTLWfWZA==}
peerDependencies:
jest: 27.0.4
jest-environment-node: 27.5.1
'@dcloudio/uni-cli-shared@3.0.0-alpha-4040320241223001':
resolution: {integrity: sha512-bgiEk2D6XWZlBrgslKQHYvNvv+8QOda9fl5Oa8GEJZwVgLf45/aIV/7gv8LcOPT30MEOVli7aaurbOaTFsWFNQ==}
'@dcloudio/uni-cli-shared@3.0.0-4020920240930001':
resolution: {integrity: sha512-DpKcXXtAiyZXX8WxDSSRjl/PuTYFPBvWDcS7UfWR3Vw13gM3TUEu3WPl1URgGlxmwr30x5YLv6ZA6UoXSZ6MNw==}
engines: {node: ^14.18.0 || >=16.0.0}
'@dcloudio/uni-cloud@3.0.0-alpha-4040320241223001':
resolution: {integrity: sha512-1oWMaRh2o16uA9MQVw+wdkG59bZhDG0um4Swvn2IKt4qW+xAlK6ZCgUsNB8FeEh4pDlYKhn3tbhliNWohrC0tA==}
'@dcloudio/uni-cloud@3.0.0-4020920240930001':
resolution: {integrity: sha512-N4/4mv+PhtQkg3w0xrjBnir2SA5t23gOs8ZC3Mp3q2+iMS9Lo4puc/81mGaQxc2pZhdsV5MzxWCoquFdbyWCzA==}
'@dcloudio/uni-components@3.0.0-alpha-4040320241223001':
resolution: {integrity: sha512-8KznEO+PE7ddCcmiChYLymu3zehL8fv/UUSh++nXtorev4aXRjzxbVlvwo+F4aGKmnZogms/NXkaFK+9Mt1hUg==}
'@dcloudio/uni-components@3.0.0-4020920240930001':
resolution: {integrity: sha512-ZC3z/RIeHtx3SkJtKwArKGAq+poDevzcQG3MV6gKLubwPAkri8UR4ptSjJwzvs7ESoGwGwqxy6aNndUIx6+fsw==}
'@dcloudio/uni-console@3.0.0-alpha-4040320241223001':
resolution: {integrity: sha512-Ck4jo4wXy5qXkCFPbgqHF4tnJS1qLDmtXCFiDAldYXZ0bEP01aAiooAwzAC3XMcKzUJmmx6Gs/gNSvHZSQ8sIA==}
'@dcloudio/uni-h5-vite@3.0.0-4020920240930001':
resolution: {integrity: sha512-9kZvdOmAl59vNcVDPH4doQRhnGhEB7oT+LEy6uW+BIDvkMZN/hw9MYUzv7WIysXCg51gY0vRJdIkU1OpDCz8tg==}
'@dcloudio/uni-h5-vite@3.0.0-alpha-4040320241223001':
resolution: {integrity: sha512-+VCt/K3ap4J3Eo/K3OtQXFb4X70jBiFSZz8iH2MI5Ui3QeVuoSGsOTsYDXz/5rZ1g2TRNO5hjWpvYVoQhx5qgA==}
'@dcloudio/uni-h5-vue@3.0.0-4020920240930001':
resolution: {integrity: sha512-kUfK+50xilnGJVQq35N8VHA5bb0q7JmT5Cc8I8mPVFuVdl38zpumsjG6Qg8dhS5E/9GqjjWqH3aWOn6ugTFMxQ==}
'@dcloudio/uni-h5-vue@3.0.0-alpha-4040320241223001':
resolution: {integrity: sha512-foJJBivutwbF/kgvhgWdf5q0KxIfqQ7WL6AhYi+/seXUwBHSZVV0d6ga35LyIAo1YvKZbyPXEbdu82HceNjmgw==}
'@dcloudio/uni-h5@3.0.0-4020920240930001':
resolution: {integrity: sha512-9M7UqJVVC1KEP6mcmRzmdWX8+VWp3Y+FSKGQ4ymWJ+T0Xest4i3oggj2nLBDTfyhYMEZ3hNFI885o5cUoolMCw==}
'@dcloudio/uni-h5@3.0.0-alpha-4040320241223001':
resolution: {integrity: sha512-tscU2q7cQzu54BSGu9okqGEFCgOrYEc8GqsoiPth1nAnKLUooaRmCb0/IDdcc7ls9IHMqLawAQqHIuIi/NNPXA==}
'@dcloudio/uni-i18n@3.0.0-4020920240930001':
resolution: {integrity: sha512-ltKiciML0ptWRytvbFt1dd4YglEjh4fsUc0D/dY+y5YKNxK7h/V2HT3qkQtP05T1kjEput4KrWNn23fczO3YFg==}
'@dcloudio/uni-i18n@3.0.0-alpha-4040320241223001':
resolution: {integrity: sha512-J+fT4EZnCk/WNwQbLHSGuw2njWD79BE/58+iE1km2fJgCpwEAgJxKDfBbFU89YdBuiWVjzcqdzVSKngA3WJ4TA==}
'@dcloudio/uni-mp-alipay@3.0.0-4020920240930001':
resolution: {integrity: sha512-52XHUPmZixd8TZQ9BKrme139Uq5wfYy6DjMdeSQRJ9DJRtVe4WsWxgJ6DoKdPJLtiG1OSljmZOjU5V35WuhsWA==}
'@dcloudio/uni-mp-alipay@3.0.0-alpha-4040320241223001':
resolution: {integrity: sha512-fZIjVTJmZF7j1vPFsC3Gft0PhmlxTwh5G2KNvjCIOrfWBtHWKonPuRrsP65pydNXl0FPWA1w+0iIoaabHK/R6A==}
'@dcloudio/uni-mp-baidu@3.0.0-4020920240930001':
resolution: {integrity: sha512-2MyZYMQdiU3Xog/f/HdRZLoQk5uVPICfysfnxirjdd4O/umhsRkdwMjq092mmmmkSEdTQIlwiQGK+8d3snLofQ==}
'@dcloudio/uni-mp-baidu@3.0.0-alpha-4040320241223001':
resolution: {integrity: sha512-yG21wR61Y3Y5EwmZlct0PvGJI3mfmYqNdLO2y4MHAIPQie2ZQlo/oGoHxcW3v3jnT9cTermrFJ72OkBQIzve3A==}
'@dcloudio/uni-mp-compiler@3.0.0-4020920240930001':
resolution: {integrity: sha512-ngbbKTDWCzE8j3Xf5ezBRdV4NiXPTIS9GylIvL1quJVjcWEwbfoSvROTCBxLv+i8unu5+UbtRa1+KdsrUKtFOQ==}
'@dcloudio/uni-mp-compiler@3.0.0-alpha-4040320241223001':
resolution: {integrity: sha512-3p8/THBvcFqCdl81OCbxcKJZz0epNWxDW8nIQb44apA1WjbAKSFdpl+E4ltbuihseMsNPi8fxdTgFoFyOhdQAA==}
'@dcloudio/uni-mp-jd@3.0.0-4020920240930001':
resolution: {integrity: sha512-L9WncaToo27wZcmLbFFZGkIo7iBKEk53bOy6fntUhECPJe0076q2KUnWyFF8Mq9euOz9KESazBo8u6PyoZkwuA==}
'@dcloudio/uni-mp-jd@3.0.0-alpha-4040320241223001':
resolution: {integrity: sha512-dnjiXCV70YexlTL1hgcSWtduUVXrF7ObAX/bwue8CB5GVwjcx/1EtThLwRl+Nayf8TGouLXnsuq9CgGFJfC6KQ==}
'@dcloudio/uni-mp-kuaishou@3.0.0-4020920240930001':
resolution: {integrity: sha512-y8xmnGZX1cjgx5A3V0g43+0LrNrafb6J7NjdYjjzvlelTalAICofMMxOB/TMY4kIvAcAO8pTrvJ8gsxQTj3Law==}
'@dcloudio/uni-mp-kuaishou@3.0.0-alpha-4040320241223001':
resolution: {integrity: sha512-ZH7J+OiRZGRmVZJK9pncj+MmIb5pV6fMjvETi2ayiIgk1UXtHDieWafd3ifZcq8rELeh+PQ/IFYtJ6xh2Dc47w==}
'@dcloudio/uni-mp-lark@3.0.0-4020920240930001':
resolution: {integrity: sha512-6siEc/tbZLGh3DDZin+3hEWtncUs+Nk6ttEsZgIyNwX+SPTf2pFDj23dZAq3h/Lc89EvIgSjyFOuKJ1yivrLdg==}
'@dcloudio/uni-mp-lark@3.0.0-alpha-4040320241223001':
resolution: {integrity: sha512-ow5qk75S7gQHpo+sdN+sMPkycC/yHPUsCdKhw424NzjSGFqXa8RnDzSOJmUiYpmnzssvA1QzYiS+4Kks+fWqCg==}
'@dcloudio/uni-mp-qq@3.0.0-4020920240930001':
resolution: {integrity: sha512-TD4HUZiXa/3pjhRFJo0uMygMCZZk09pbzmR9FPU/kMQk3pxfgrMrMAY3To9boMULKNJenT1pIVy/QxEXiTyH1Q==}
'@dcloudio/uni-mp-qq@3.0.0-alpha-4040320241223001':
resolution: {integrity: sha512-Xp62ct2rZjQAzkAp6GYHZ4Ios+5MIl9YiSxxCe1uUj2sHoo588RMYA5FuvcIvJyID6i//s16pjfBNDo4LEnEEA==}
'@dcloudio/uni-mp-toutiao@3.0.0-4020920240930001':
resolution: {integrity: sha512-eo0a+cwY9mgs/DxMplKpqTyIJmJUJpPr/hT2DPsqnPA8OXAbIKbhJBZbwC2z/EJDduOhzNpCkliHhv4Ahks2vQ==}
'@dcloudio/uni-mp-toutiao@3.0.0-alpha-4040320241223001':
resolution: {integrity: sha512-bfM2k/xV2WsUp3BBnjJQwkqnkAWSzPFKbajSYsKo4rDcBA/0Fbc4l+XsUQbJGipRZMJ/C3csORmzsL6KHvWEXw==}
'@dcloudio/uni-mp-vite@3.0.0-4020920240930001':
resolution: {integrity: sha512-awTd9X+yZ67shjBVxZ02bJ5ImU4/mODprz2lmYHA19RjjhzfNrDsIYBWAtfWMZ2WP5z1OL7WnZNiwPHWiuh9mQ==}
'@dcloudio/uni-mp-vite@3.0.0-alpha-4040320241223001':
resolution: {integrity: sha512-tjo1zf6o6Wry4ykdMEIBwjYDvdWPTh6ZHQpQQHfwJ9GrPzjss3DfLjDWXx0tM4hMRQ/RxYWTr5oSestj6mAQyA==}
'@dcloudio/uni-mp-vue@3.0.0-4020920240930001':
resolution: {integrity: sha512-65zNSA4jybW+sNRBLnR2Fni1dMNycJj0T6S1Lbhb/7ofJ7mosZdwjk8OFym3ZWjghov9x0Z3xAXGDIdWmSWNNw==}
'@dcloudio/uni-mp-vue@3.0.0-alpha-4040320241223001':
resolution: {integrity: sha512-DkpOa2XQunLBVRJ+dMddAtHwXGPWDK/81Ix4Xxb/cAS/lXQ5iQU1K9WUVgBsUx/+LLDD++3bBNQ5QCL8BkX1Gw==}
'@dcloudio/uni-mp-weixin@3.0.0-4020920240930001':
resolution: {integrity: sha512-ip/OtXFLlnkztxOXMXPsjktp9rSo+c1OxlCase32xBVn+Jt0GyIFiA6Js9icz5uwIXtt14jWi4mRXfjncUV7QA==}
'@dcloudio/uni-mp-weixin@3.0.0-alpha-4040320241223001':
resolution: {integrity: sha512-bMm1KBCweMnDPQZpxP9G2PVbz/RN1ZObAGQfSRh9FLsxapB4tSVQVmVSjDTC2zP7q2LO03z0qr0+8KQeO+semw==}
'@dcloudio/uni-mp-xhs@3.0.0-4020920240930001':
resolution: {integrity: sha512-4+3qaWsqfbIentMmFCSUdf7ngpQXqt/2k/TqT6+6985tfzXUKoi0YrGwnZbf5e6b6RVDMuLMsokm2z7kfSXdXw==}
'@dcloudio/uni-mp-xhs@3.0.0-alpha-4040320241223001':
resolution: {integrity: sha512-YhYUTVy3KzHcwzCqZooo93/LfsELTBgau6d7hebyZJygt9lr2Gt6BPei5pEbzDEu+/6+sfYSb/doodPgF+X67w==}
'@dcloudio/uni-nvue-styler@3.0.0-4020920240930001':
resolution: {integrity: sha512-bmMJKf4FoSQy6PfTfojOeskcc1239V38B3dtG/zFFll7pzBAVi68xYvgF9KgYDBkztTM0PmAukyVNRl1VAFOww==}
'@dcloudio/uni-nvue-styler@3.0.0-alpha-4040320241223001':
resolution: {integrity: sha512-0DksXJ0YQMSNLR7ZIIxezUqljFG8HUBzF633RaOlsJnZ8hy8ZAs3CQ8ajmTVEL8g+azdsmjeHa55iAAHQPlCTg==}
'@dcloudio/uni-push@3.0.0-4020920240930001':
resolution: {integrity: sha512-AL03ysBAi8d/VBQ0/UG0EqcC0Fiohb/pkzR88kNLxIn3VouMje3pw3h++zH5Oa/DppP4M47TTMDoGlcAqBpqrg==}
'@dcloudio/uni-push@3.0.0-alpha-4040320241223001':
resolution: {integrity: sha512-1PzDIgKIr7m1KrPwIk2myEMrxZQndyeKWhRkZcLATTpteyrmdjrhzJ6AB5YWzI1t8igSWyuvPRavtjPcy9kArw==}
'@dcloudio/uni-quickapp-webview@3.0.0-4020920240930001':
resolution: {integrity: sha512-P0G/u/DSJyEw+Txnpxbg8fMOJE1nNcRLwdTCWe43KefPBQRiRVo4n/tWWxBgV+tnbryqolPivkxLsLDfi358+w==}
'@dcloudio/uni-quickapp-webview@3.0.0-alpha-4040320241223001':
resolution: {integrity: sha512-FXzqzQ90QYVvZsA9GQY5hYvXI4/oPpkc4lZ9uNYJy+A4DT0/Cw7awDerI2U1+56EDhoBXge6AfjmLDWRR3Xrsw==}
'@dcloudio/uni-shared@3.0.0-4020920240930001':
resolution: {integrity: sha512-8EEQAaY+Y9BRCZIqpoaI7ciQFTO/sggxPO1kJNVAkxvJs/GVb4mawPlW9UNsMiWEqRvOJlV7KldCu6eMYlyyfg==}
'@dcloudio/uni-shared@3.0.0-alpha-4040320241223001':
resolution: {integrity: sha512-yhoux9oDOoxbPh9y/WyspkKI+KiTfzwmBoTQxTwPCmXDJGKLNlUD6QTAcKsNDEc7xjbW/IFzbCJoxP8SJBsBBA==}
'@dcloudio/uni-stacktracey@3.0.0-4020920240930001':
resolution: {integrity: sha512-YBAHXAWsiZiG4DbIcfle0W0PfILxG8Pymx/Lp2A2+OzMYANRjs2M2kq4S9g73ZVkIyUVxgHqqQRRdGgAwOUbhg==}
'@dcloudio/uni-stacktracey@3.0.0-alpha-4040320241223001':
resolution: {integrity: sha512-EFMvJItK1SalRl57aS5PTsSGpkfiTVODmsRmJnQhvkXvjcaEBoXaJlUsjsA7kiJJ5q1m6408G+HWLcZGwFry/A==}
'@dcloudio/uni-stat@3.0.0-4020920240930001':
resolution: {integrity: sha512-ZPn4WQPlZ3lObaZM9Q1fryewIsan1XD4qy+oWsqAuGop1kaHDQKUfg2D+jclAOCr4+95u4Jfn+RH0HNqrI0eqg==}
'@dcloudio/uni-stat@3.0.0-alpha-4040320241223001':
resolution: {integrity: sha512-TP2RghH1P3qQ+DcXgby8Lz8ZGNjGMa/4KmIzGe8eCwYzWVG6Mx6ge+6mzhrLq7DVQ4Wmp5tt2LDEBVPTWFTuog==}
'@dcloudio/vite-plugin-uni@3.0.0-alpha-4040320241223001':
resolution: {integrity: sha512-0FqVmq2dnE2Wh2cPo2J2OTvEjfdIF69aILaWSkOnbX62C49nXuoXtlHFnjO59YdpYOx0hUGk7Vk3czwrsNnqAA==}
'@dcloudio/vite-plugin-uni@3.0.0-4020920240930001':
resolution: {integrity: sha512-ZtV5x4Jj8d2FzaK8uamYdfYwzRbMseWY3l6MTUdc94uMNIvnb2fBhJccoY3xexSDYRFRElPKk7+ed6AQ7tYtuw==}
engines: {node: ^14.18.0 || >=16.0.0}
hasBin: true
peerDependencies:
@@ -5318,8 +5312,8 @@ packages:
resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
engines: {node: '>= 0.8'}
unplugin-auto-import@0.17.8:
resolution: {integrity: sha512-CHryj6HzJ+n4ASjzwHruD8arhbdl+UXvhuAIlHDs15Y/IMecG3wrf7FVg4pVH/DIysbq/n0phIjNHAjl7TG7Iw==}
unplugin-auto-import@0.16.7:
resolution: {integrity: sha512-w7XmnRlchq6YUFJVFGSvG1T/6j8GrdYN6Em9Wf0Ye+HXgD/22kont+WnuCAA0UaUoxtuvRR1u/mXKy63g/hfqQ==}
engines: {node: '>=14'}
peerDependencies:
'@nuxt/kit': ^3.2.2
@@ -5330,8 +5324,8 @@ packages:
'@vueuse/core':
optional: true
unplugin-auto-import@0.18.6:
resolution: {integrity: sha512-LMFzX5DtkTj/3wZuyG5bgKBoJ7WSgzqSGJ8ppDRdlvPh45mx6t6w3OcbExQi53n3xF5MYkNGPNR/HYOL95KL2A==}
unplugin-auto-import@0.17.8:
resolution: {integrity: sha512-CHryj6HzJ+n4ASjzwHruD8arhbdl+UXvhuAIlHDs15Y/IMecG3wrf7FVg4pVH/DIysbq/n0phIjNHAjl7TG7Iw==}
engines: {node: '>=14'}
peerDependencies:
'@nuxt/kit': ^3.2.2
@@ -5432,12 +5426,6 @@ packages:
peerDependencies:
eslint: '>=6.0.0'
vue-i18n@9.1.9:
resolution: {integrity: sha512-JeRdNVxS2OGp1E+pye5XB6+M6BBkHwAv9C80Q7+kzoMdUDGRna06tjC0vCB/jDX9aWrl5swxOMFcyAr7or8XTA==}
engines: {node: '>= 10'}
peerDependencies:
vue: ^3.0.0
vue-router@4.5.0:
resolution: {integrity: sha512-HDuk+PuH5monfNuY+ct49mNmkCRK4xJAV9Ts4z9UFc4rzdDnxQLyCMGGc8pKhZhHTVzfanpNwB/lwqevcBwI4w==}
peerDependencies:
@@ -6580,9 +6568,9 @@ snapshots:
'@dcloudio/types@3.4.14': {}
'@dcloudio/uni-app-harmony@3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vite@5.2.8(@types/node@20.17.9)(sass@1.77.8)(terser@5.36.0))(vue@3.4.21(typescript@5.7.2))':
'@dcloudio/uni-app-harmony@3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vite@5.2.8(@types/node@20.17.9)(sass@1.77.8)(terser@5.36.0))(vue@3.4.21(typescript@5.7.2))':
dependencies:
'@dcloudio/uni-app-vite': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vite@5.2.8(@types/node@20.17.9)(sass@1.77.8)(terser@5.36.0))(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-app-vite': 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vite@5.2.8(@types/node@20.17.9)(sass@1.77.8)(terser@5.36.0))(vue@3.4.21(typescript@5.7.2))
debug: 4.3.7
fs-extra: 10.1.0
licia: 1.46.0
@@ -6597,11 +6585,11 @@ snapshots:
- vite
- vue
'@dcloudio/uni-app-plus@3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vite@5.2.8(@types/node@20.17.9)(sass@1.77.8)(terser@5.36.0))(vue@3.4.21(typescript@5.7.2))':
'@dcloudio/uni-app-plus@3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vite@5.2.8(@types/node@20.17.9)(sass@1.77.8)(terser@5.36.0))(vue@3.4.21(typescript@5.7.2))':
dependencies:
'@dcloudio/uni-app-uts': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-app-vite': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vite@5.2.8(@types/node@20.17.9)(sass@1.77.8)(terser@5.36.0))(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-app-vue': 3.0.0-alpha-4040320241223001
'@dcloudio/uni-app-uts': 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-app-vite': 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vite@5.2.8(@types/node@20.17.9)(sass@1.77.8)(terser@5.36.0))(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-app-vue': 3.0.0-4020920240930001
debug: 4.3.7
fs-extra: 10.1.0
licia: 1.46.0
@@ -6616,14 +6604,14 @@ snapshots:
- vite
- vue
'@dcloudio/uni-app-uts@3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))':
'@dcloudio/uni-app-uts@3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))':
dependencies:
'@babel/parser': 7.26.2
'@babel/types': 7.26.0
'@dcloudio/uni-cli-shared': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-i18n': 3.0.0-alpha-4040320241223001
'@dcloudio/uni-nvue-styler': 3.0.0-alpha-4040320241223001
'@dcloudio/uni-shared': 3.0.0-alpha-4040320241223001
'@dcloudio/uni-cli-shared': 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-i18n': 3.0.0-4020920240930001
'@dcloudio/uni-nvue-styler': 3.0.0-4020920240930001
'@dcloudio/uni-shared': 3.0.0-4020920240930001
'@jridgewell/gen-mapping': 0.3.5
'@jridgewell/trace-mapping': 0.3.25
'@rollup/pluginutils': 5.1.3(rollup@4.28.0)
@@ -6649,12 +6637,12 @@ snapshots:
- ts-node
- vue
'@dcloudio/uni-app-vite@3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vite@5.2.8(@types/node@20.17.9)(sass@1.77.8)(terser@5.36.0))(vue@3.4.21(typescript@5.7.2))':
'@dcloudio/uni-app-vite@3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vite@5.2.8(@types/node@20.17.9)(sass@1.77.8)(terser@5.36.0))(vue@3.4.21(typescript@5.7.2))':
dependencies:
'@dcloudio/uni-cli-shared': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-i18n': 3.0.0-alpha-4040320241223001
'@dcloudio/uni-nvue-styler': 3.0.0-alpha-4040320241223001
'@dcloudio/uni-shared': 3.0.0-alpha-4040320241223001
'@dcloudio/uni-cli-shared': 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-i18n': 3.0.0-4020920240930001
'@dcloudio/uni-nvue-styler': 3.0.0-4020920240930001
'@dcloudio/uni-shared': 3.0.0-4020920240930001
'@rollup/pluginutils': 5.1.3(rollup@4.28.0)
'@vitejs/plugin-vue': 5.1.0(vite@5.2.8(@types/node@20.17.9)(sass@1.77.8)(terser@5.36.0))(vue@3.4.21(typescript@5.7.2))
'@vue/compiler-dom': 3.4.21
@@ -6672,18 +6660,17 @@ snapshots:
- vite
- vue
'@dcloudio/uni-app-vue@3.0.0-alpha-4040320241223001': {}
'@dcloudio/uni-app-vue@3.0.0-4020920240930001': {}
'@dcloudio/uni-app@3.0.0-alpha-4040320241223001(@dcloudio/types@3.4.14)(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))':
'@dcloudio/uni-app@3.0.0-4020920240930001(@dcloudio/types@3.4.14)(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))':
dependencies:
'@dcloudio/types': 3.4.14
'@dcloudio/uni-cloud': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-components': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-console': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-i18n': 3.0.0-alpha-4040320241223001
'@dcloudio/uni-push': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-shared': 3.0.0-alpha-4040320241223001
'@dcloudio/uni-stat': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-cloud': 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-components': 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-i18n': 3.0.0-4020920240930001
'@dcloudio/uni-push': 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-shared': 3.0.0-4020920240930001
'@dcloudio/uni-stat': 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@vue/shared': 3.4.21
transitivePeerDependencies:
- '@nuxt/kit'
@@ -6694,9 +6681,9 @@ snapshots:
- ts-node
- vue
'@dcloudio/uni-automator@3.0.0-alpha-4040320241223001(jest-environment-node@27.5.1)(jest@27.0.4)(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))':
'@dcloudio/uni-automator@3.0.0-4020920240930001(jest-environment-node@27.5.1)(jest@27.0.4)(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))':
dependencies:
'@dcloudio/uni-cli-shared': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-cli-shared': 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
address: 1.2.2
cross-env: 7.0.3
debug: 4.3.7
@@ -6721,15 +6708,15 @@ snapshots:
- utf-8-validate
- vue
'@dcloudio/uni-cli-shared@3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))':
'@dcloudio/uni-cli-shared@3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))':
dependencies:
'@ampproject/remapping': 2.3.0
'@babel/code-frame': 7.26.2
'@babel/core': 7.26.0
'@babel/parser': 7.26.2
'@babel/types': 7.26.0
'@dcloudio/uni-i18n': 3.0.0-alpha-4040320241223001
'@dcloudio/uni-shared': 3.0.0-alpha-4040320241223001
'@dcloudio/uni-i18n': 3.0.0-4020920240930001
'@dcloudio/uni-shared': 3.0.0-4020920240930001
'@intlify/core-base': 9.1.9
'@intlify/shared': 9.1.9
'@intlify/vue-devtools': 9.1.9
@@ -6768,7 +6755,7 @@ snapshots:
resolve: 1.22.8
source-map-js: 1.2.1
tapable: 2.2.1
unplugin-auto-import: 0.18.6(rollup@4.28.0)
unplugin-auto-import: 0.16.7(rollup@4.28.0)
xregexp: 3.1.0
transitivePeerDependencies:
- '@nuxt/kit'
@@ -6779,11 +6766,11 @@ snapshots:
- ts-node
- vue
'@dcloudio/uni-cloud@3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))':
'@dcloudio/uni-cloud@3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))':
dependencies:
'@dcloudio/uni-cli-shared': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-i18n': 3.0.0-alpha-4040320241223001
'@dcloudio/uni-shared': 3.0.0-alpha-4040320241223001
'@dcloudio/uni-cli-shared': 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-i18n': 3.0.0-4020920240930001
'@dcloudio/uni-shared': 3.0.0-4020920240930001
'@vue/shared': 3.4.21
fast-glob: 3.3.2
transitivePeerDependencies:
@@ -6795,11 +6782,11 @@ snapshots:
- ts-node
- vue
'@dcloudio/uni-components@3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))':
'@dcloudio/uni-components@3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))':
dependencies:
'@dcloudio/uni-cloud': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-h5': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-i18n': 3.0.0-alpha-4040320241223001
'@dcloudio/uni-cloud': 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-h5': 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-i18n': 3.0.0-4020920240930001
transitivePeerDependencies:
- '@nuxt/kit'
- '@vueuse/core'
@@ -6809,22 +6796,10 @@ snapshots:
- ts-node
- vue
'@dcloudio/uni-console@3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))':
'@dcloudio/uni-h5-vite@3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))':
dependencies:
'@dcloudio/uni-cli-shared': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
transitivePeerDependencies:
- '@nuxt/kit'
- '@vueuse/core'
- postcss
- rollup
- supports-color
- ts-node
- vue
'@dcloudio/uni-h5-vite@3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))':
dependencies:
'@dcloudio/uni-cli-shared': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-shared': 3.0.0-alpha-4040320241223001
'@dcloudio/uni-cli-shared': 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-shared': 3.0.0-4020920240930001
'@rollup/pluginutils': 5.1.3(rollup@4.28.0)
'@vue/compiler-dom': 3.4.21
'@vue/compiler-sfc': 3.4.21
@@ -6843,19 +6818,19 @@ snapshots:
- ts-node
- vue
'@dcloudio/uni-h5-vue@3.0.0-alpha-4040320241223001(vue@3.4.21(typescript@5.7.2))':
'@dcloudio/uni-h5-vue@3.0.0-4020920240930001(vue@3.4.21(typescript@5.7.2))':
dependencies:
'@dcloudio/uni-shared': 3.0.0-alpha-4040320241223001
'@dcloudio/uni-shared': 3.0.0-4020920240930001
'@vue/server-renderer': 3.4.21(vue@3.4.21(typescript@5.7.2))
transitivePeerDependencies:
- vue
'@dcloudio/uni-h5@3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))':
'@dcloudio/uni-h5@3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))':
dependencies:
'@dcloudio/uni-h5-vite': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-h5-vue': 3.0.0-alpha-4040320241223001(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-i18n': 3.0.0-alpha-4040320241223001
'@dcloudio/uni-shared': 3.0.0-alpha-4040320241223001
'@dcloudio/uni-h5-vite': 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-h5-vue': 3.0.0-4020920240930001(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-i18n': 3.0.0-4020920240930001
'@dcloudio/uni-shared': 3.0.0-4020920240930001
'@vue/server-renderer': 3.4.21(vue@3.4.21(typescript@5.7.2))
'@vue/shared': 3.4.21
debug: 4.3.7
@@ -6873,14 +6848,14 @@ snapshots:
- ts-node
- vue
'@dcloudio/uni-i18n@3.0.0-alpha-4040320241223001': {}
'@dcloudio/uni-i18n@3.0.0-4020920240930001': {}
'@dcloudio/uni-mp-alipay@3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))':
'@dcloudio/uni-mp-alipay@3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))':
dependencies:
'@dcloudio/uni-cli-shared': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-vite': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-vue': 3.0.0-alpha-4040320241223001
'@dcloudio/uni-shared': 3.0.0-alpha-4040320241223001
'@dcloudio/uni-cli-shared': 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-vite': 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-vue': 3.0.0-4020920240930001
'@dcloudio/uni-shared': 3.0.0-4020920240930001
'@vue/compiler-core': 3.4.21
'@vue/shared': 3.4.21
transitivePeerDependencies:
@@ -6892,15 +6867,14 @@ snapshots:
- ts-node
- vue
'@dcloudio/uni-mp-baidu@3.0.0-alpha-4040320241223001(@dcloudio/types@3.4.14)(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))':
'@dcloudio/uni-mp-baidu@3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))':
dependencies:
'@dcloudio/uni-app': 3.0.0-alpha-4040320241223001(@dcloudio/types@3.4.14)(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-cli-shared': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-compiler': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-vite': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-vue': 3.0.0-alpha-4040320241223001
'@dcloudio/uni-mp-weixin': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-shared': 3.0.0-alpha-4040320241223001
'@dcloudio/uni-cli-shared': 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-compiler': 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-vite': 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-vue': 3.0.0-4020920240930001
'@dcloudio/uni-mp-weixin': 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-shared': 3.0.0-4020920240930001
'@vue/compiler-core': 3.4.21
'@vue/shared': 3.4.21
jimp: 0.10.3
@@ -6909,7 +6883,6 @@ snapshots:
qrcode-terminal: 0.12.0
ws: 8.18.0
transitivePeerDependencies:
- '@dcloudio/types'
- '@nuxt/kit'
- '@vueuse/core'
- bufferutil
@@ -6921,13 +6894,13 @@ snapshots:
- utf-8-validate
- vue
'@dcloudio/uni-mp-compiler@3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))':
'@dcloudio/uni-mp-compiler@3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))':
dependencies:
'@babel/generator': 7.26.2
'@babel/parser': 7.26.2
'@babel/types': 7.26.0
'@dcloudio/uni-cli-shared': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-shared': 3.0.0-alpha-4040320241223001
'@dcloudio/uni-cli-shared': 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-shared': 3.0.0-4020920240930001
'@vue/compiler-core': 3.4.21
'@vue/compiler-dom': 3.4.21
'@vue/shared': 3.4.21
@@ -6941,13 +6914,13 @@ snapshots:
- ts-node
- vue
'@dcloudio/uni-mp-jd@3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))':
'@dcloudio/uni-mp-jd@3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))':
dependencies:
'@dcloudio/uni-cli-shared': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-compiler': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-vite': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-vue': 3.0.0-alpha-4040320241223001
'@dcloudio/uni-shared': 3.0.0-alpha-4040320241223001
'@dcloudio/uni-cli-shared': 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-compiler': 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-vite': 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-vue': 3.0.0-4020920240930001
'@dcloudio/uni-shared': 3.0.0-4020920240930001
'@vue/shared': 3.4.21
transitivePeerDependencies:
- '@nuxt/kit'
@@ -6958,14 +6931,14 @@ snapshots:
- ts-node
- vue
'@dcloudio/uni-mp-kuaishou@3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))':
'@dcloudio/uni-mp-kuaishou@3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))':
dependencies:
'@dcloudio/uni-cli-shared': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-compiler': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-vite': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-vue': 3.0.0-alpha-4040320241223001
'@dcloudio/uni-mp-weixin': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-shared': 3.0.0-alpha-4040320241223001
'@dcloudio/uni-cli-shared': 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-compiler': 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-vite': 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-vue': 3.0.0-4020920240930001
'@dcloudio/uni-mp-weixin': 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-shared': 3.0.0-4020920240930001
'@vue/compiler-core': 3.4.21
'@vue/shared': 3.4.21
transitivePeerDependencies:
@@ -6980,14 +6953,14 @@ snapshots:
- utf-8-validate
- vue
'@dcloudio/uni-mp-lark@3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))':
'@dcloudio/uni-mp-lark@3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))':
dependencies:
'@dcloudio/uni-cli-shared': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-compiler': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-toutiao': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-vite': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-vue': 3.0.0-alpha-4040320241223001
'@dcloudio/uni-shared': 3.0.0-alpha-4040320241223001
'@dcloudio/uni-cli-shared': 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-compiler': 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-toutiao': 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-vite': 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-vue': 3.0.0-4020920240930001
'@dcloudio/uni-shared': 3.0.0-4020920240930001
'@vue/compiler-core': 3.4.21
'@vue/shared': 3.4.21
transitivePeerDependencies:
@@ -6999,12 +6972,12 @@ snapshots:
- ts-node
- vue
'@dcloudio/uni-mp-qq@3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))':
'@dcloudio/uni-mp-qq@3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))':
dependencies:
'@dcloudio/uni-cli-shared': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-vite': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-vue': 3.0.0-alpha-4040320241223001
'@dcloudio/uni-shared': 3.0.0-alpha-4040320241223001
'@dcloudio/uni-cli-shared': 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-vite': 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-vue': 3.0.0-4020920240930001
'@dcloudio/uni-shared': 3.0.0-4020920240930001
'@vue/shared': 3.4.21
fs-extra: 10.1.0
transitivePeerDependencies:
@@ -7016,13 +6989,13 @@ snapshots:
- ts-node
- vue
'@dcloudio/uni-mp-toutiao@3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))':
'@dcloudio/uni-mp-toutiao@3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))':
dependencies:
'@dcloudio/uni-cli-shared': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-compiler': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-vite': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-vue': 3.0.0-alpha-4040320241223001
'@dcloudio/uni-shared': 3.0.0-alpha-4040320241223001
'@dcloudio/uni-cli-shared': 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-compiler': 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-vite': 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-vue': 3.0.0-4020920240930001
'@dcloudio/uni-shared': 3.0.0-4020920240930001
'@vue/compiler-core': 3.4.21
'@vue/shared': 3.4.21
transitivePeerDependencies:
@@ -7034,14 +7007,13 @@ snapshots:
- ts-node
- vue
'@dcloudio/uni-mp-vite@3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))':
'@dcloudio/uni-mp-vite@3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))':
dependencies:
'@dcloudio/uni-cli-shared': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-i18n': 3.0.0-alpha-4040320241223001
'@dcloudio/uni-mp-compiler': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-vue': 3.0.0-alpha-4040320241223001
'@dcloudio/uni-shared': 3.0.0-alpha-4040320241223001
'@vue/compiler-dom': 3.4.21
'@dcloudio/uni-cli-shared': 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-i18n': 3.0.0-4020920240930001
'@dcloudio/uni-mp-compiler': 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-vue': 3.0.0-4020920240930001
'@dcloudio/uni-shared': 3.0.0-4020920240930001
'@vue/compiler-sfc': 3.4.21
'@vue/shared': 3.4.21
debug: 4.3.7
@@ -7054,17 +7026,17 @@ snapshots:
- ts-node
- vue
'@dcloudio/uni-mp-vue@3.0.0-alpha-4040320241223001':
'@dcloudio/uni-mp-vue@3.0.0-4020920240930001':
dependencies:
'@dcloudio/uni-shared': 3.0.0-alpha-4040320241223001
'@dcloudio/uni-shared': 3.0.0-4020920240930001
'@vue/shared': 3.4.21
'@dcloudio/uni-mp-weixin@3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))':
'@dcloudio/uni-mp-weixin@3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))':
dependencies:
'@dcloudio/uni-cli-shared': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-vite': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-vue': 3.0.0-alpha-4040320241223001
'@dcloudio/uni-shared': 3.0.0-alpha-4040320241223001
'@dcloudio/uni-cli-shared': 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-vite': 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-vue': 3.0.0-4020920240930001
'@dcloudio/uni-shared': 3.0.0-4020920240930001
'@vue/shared': 3.4.21
jimp: 0.10.3
licia: 1.46.0
@@ -7083,13 +7055,13 @@ snapshots:
- utf-8-validate
- vue
'@dcloudio/uni-mp-xhs@3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))':
'@dcloudio/uni-mp-xhs@3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))':
dependencies:
'@dcloudio/uni-cli-shared': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-compiler': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-vite': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-vue': 3.0.0-alpha-4040320241223001
'@dcloudio/uni-shared': 3.0.0-alpha-4040320241223001
'@dcloudio/uni-cli-shared': 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-compiler': 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-vite': 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-vue': 3.0.0-4020920240930001
'@dcloudio/uni-shared': 3.0.0-4020920240930001
'@vue/shared': 3.4.21
transitivePeerDependencies:
- '@nuxt/kit'
@@ -7100,14 +7072,14 @@ snapshots:
- ts-node
- vue
'@dcloudio/uni-nvue-styler@3.0.0-alpha-4040320241223001':
'@dcloudio/uni-nvue-styler@3.0.0-4020920240930001':
dependencies:
parse-css-font: 4.0.0
postcss: 8.4.49
'@dcloudio/uni-push@3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))':
'@dcloudio/uni-push@3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))':
dependencies:
'@dcloudio/uni-cli-shared': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-cli-shared': 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
transitivePeerDependencies:
- '@nuxt/kit'
- '@vueuse/core'
@@ -7117,12 +7089,12 @@ snapshots:
- ts-node
- vue
'@dcloudio/uni-quickapp-webview@3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))':
'@dcloudio/uni-quickapp-webview@3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))':
dependencies:
'@dcloudio/uni-cli-shared': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-vite': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-vue': 3.0.0-alpha-4040320241223001
'@dcloudio/uni-shared': 3.0.0-alpha-4040320241223001
'@dcloudio/uni-cli-shared': 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-vite': 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-mp-vue': 3.0.0-4020920240930001
'@dcloudio/uni-shared': 3.0.0-4020920240930001
'@vue/shared': 3.4.21
transitivePeerDependencies:
- '@nuxt/kit'
@@ -7133,16 +7105,16 @@ snapshots:
- ts-node
- vue
'@dcloudio/uni-shared@3.0.0-alpha-4040320241223001':
'@dcloudio/uni-shared@3.0.0-4020920240930001':
dependencies:
'@vue/shared': 3.4.21
'@dcloudio/uni-stacktracey@3.0.0-alpha-4040320241223001': {}
'@dcloudio/uni-stacktracey@3.0.0-4020920240930001': {}
'@dcloudio/uni-stat@3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))':
'@dcloudio/uni-stat@3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))':
dependencies:
'@dcloudio/uni-cli-shared': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-shared': 3.0.0-alpha-4040320241223001
'@dcloudio/uni-cli-shared': 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-shared': 3.0.0-4020920240930001
debug: 4.3.7
transitivePeerDependencies:
- '@nuxt/kit'
@@ -7153,13 +7125,13 @@ snapshots:
- ts-node
- vue
'@dcloudio/vite-plugin-uni@3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vite@5.2.8(@types/node@20.17.9)(sass@1.77.8)(terser@5.36.0))(vue@3.4.21(typescript@5.7.2))':
'@dcloudio/vite-plugin-uni@3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vite@5.2.8(@types/node@20.17.9)(sass@1.77.8)(terser@5.36.0))(vue@3.4.21(typescript@5.7.2))':
dependencies:
'@babel/core': 7.26.0
'@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.26.0)
'@babel/plugin-transform-typescript': 7.25.9(@babel/core@7.26.0)
'@dcloudio/uni-cli-shared': 3.0.0-alpha-4040320241223001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-shared': 3.0.0-alpha-4040320241223001
'@dcloudio/uni-cli-shared': 3.0.0-4020920240930001(postcss@8.4.49)(rollup@4.28.0)(vue@3.4.21(typescript@5.7.2))
'@dcloudio/uni-shared': 3.0.0-4020920240930001
'@rollup/pluginutils': 5.1.3(rollup@4.28.0)
'@vitejs/plugin-legacy': 5.3.2(terser@5.36.0)(vite@5.2.8(@types/node@20.17.9)(sass@1.77.8)(terser@5.36.0))
'@vitejs/plugin-vue': 5.1.0(vite@5.2.8(@types/node@20.17.9)(sass@1.77.8)(terser@5.36.0))(vue@3.4.21(typescript@5.7.2))
@@ -7179,7 +7151,7 @@ snapshots:
magic-string: 0.30.14
picocolors: 1.1.1
terser: 5.36.0
unplugin-auto-import: 0.18.6(rollup@4.28.0)
unplugin-auto-import: 0.16.7(rollup@4.28.0)
vite: 5.2.8(@types/node@20.17.9)(sass@1.77.8)(terser@5.36.0)
transitivePeerDependencies:
- '@nuxt/kit'
@@ -12164,7 +12136,7 @@ snapshots:
unpipe@1.0.0: {}
unplugin-auto-import@0.17.8(rollup@4.28.0):
unplugin-auto-import@0.16.7(rollup@4.28.0):
dependencies:
'@antfu/utils': 0.7.10
'@rollup/pluginutils': 5.1.3(rollup@4.28.0)
@@ -12177,7 +12149,7 @@ snapshots:
transitivePeerDependencies:
- rollup
unplugin-auto-import@0.18.6(rollup@4.28.0):
unplugin-auto-import@0.17.8(rollup@4.28.0):
dependencies:
'@antfu/utils': 0.7.10
'@rollup/pluginutils': 5.1.3(rollup@4.28.0)
@@ -12266,14 +12238,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
vue-i18n@9.1.9(vue@3.4.21(typescript@5.7.2)):
dependencies:
'@intlify/core-base': 9.1.9
'@intlify/shared': 9.1.9
'@intlify/vue-devtools': 9.1.9
'@vue/devtools-api': 6.6.4
vue: 3.4.21(typescript@5.7.2)
vue-router@4.5.0(vue@3.4.21(typescript@5.7.2)):
dependencies:
'@vue/devtools-api': 6.6.4
Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

+1 -1
View File
@@ -19,7 +19,7 @@ const dependencies = [
'@dcloudio/uni-mp-xhs',
'@dcloudio/uni-quickapp-webview',
// i18n模板要注释掉下面的
// 'vue-i18n',
'vue-i18n',
]
// 使用exec执行命令
+3 -1
View File
@@ -1,5 +1,5 @@
<script setup lang="ts">
import { onLaunch, onHide } from '@dcloudio/uni-app'
import { onLaunch, onShow, onHide } from '@dcloudio/uni-app'
import { useUserStore } from './store'
import { checkWithRedirectLogin, loginRoute } from './interceptors/route'
@@ -19,6 +19,7 @@ onLaunch((options) => {
})
onPageNotFound(() => {
console.log(1)
uni.reLaunch({
url: '/',
})
@@ -35,6 +36,7 @@ const userStore = useUserStore()
/* 覆盖 uniapp 自带rpx效果 */
html {
font-family: 'PingFang SC', 'Helvetica Neue', Helvetica, Arial, sans-serif;
font-size: 16px !important;
}
/* stylelint-disable-next-line selector-type-no-unknown */
#app {
+1 -2
View File
@@ -20,9 +20,8 @@ defineProps({
block
overflow-hidden
rounded-full
bg-gray-100
style="background: linear-gradient(180deg, #96e517 0%, #8bc135 100%)"
class="h-full w-full"
mode="aspectFill"
:src="src ?? DefaultAavatar"
/>
</div>
-222
View File
@@ -1,222 +0,0 @@
<template>
<view
class="grid-lottery"
:style="{
height: gridLotteryHeight,
}"
>
<view class="lottery-list">
<view
v-for="(item, index) in formateList"
:key="item.id"
class="lottery-item"
:style="{
width: `${itemWidth}%`,
height: `${itemHeight}${itemHeightUnit}`,
transform: `translate(${place(index).x}%, ${place(index).y}${itemHeightUnit})`,
}"
>
<view class="relative">
<slot name="lottery-item" :data="item" :index="index" :currIndex="currIndex" />
</view>
</view>
</view>
<view
class="start-button"
:style="{
left: `${itemWidth}%`,
right: `${itemWidth}%`,
top: `${itemWidth}%`,
bottom: `${itemWidth}%`,
}"
@tap="onStart"
>
<slot name="start-button"></slot>
</view>
</view>
</template>
<script>
export default {
name: 'GridLottery',
props: {
// 转盘转动间隔
interval: {
type: Number,
default: 50,
},
// 是否逐渐减速
isIntervalIncrease: {
type: Boolean,
default: true,
},
// 减速开始时间
intervalIncreaseStartTime: {
type: Number,
default: 3000,
},
// 最小速度
maxInterval: {
type: Number,
default: 500,
},
// 奖项外框高度
itemHeight: {
type: Number,
default: 100,
},
// 高度单位
itemHeightUnit: {
type: String,
default: 'rpx',
},
// 总数必须为>=8 且被4整除
list: {
type: Array,
default() {
// return [
// {
// id: string,
// sort: number
// }
// ];
return []
},
},
},
data() {
return {
transform: {
x: 0,
y: 0,
},
currIndex: 0,
startFlag: false,
}
},
computed: {
gridLotteryHeight({ itemHeight, formateList, colunmCount, itemHeightUnit }) {
return `${itemHeight * ((formateList.length - colunmCount * 2) / 2 + 2)}${itemHeightUnit}`
},
itemWidth() {
return 100 / this.colunmCount
},
colunmCount() {
const len = this.list.length
if (len > 8) {
return 3 + Math.floor((len - 8) / 4)
}
return 3
},
formateList() {
const len = this.list.length
if (len > 7 && (len - 8) % 4 !== 0) {
console.warn(
'请检查数组,总数必须为>=8 且大余8部分部分能被4整除,如长度为8、12、16...的数组',
)
}
const _list = this.list || []
const formateList = _list.sort((a, b) => a.sort - b.sort)
return formateList
},
},
methods: {
// 通过索引获取定位
place(index) {
const len = this.list.length
// 序号
const indexToOrder = index + 1
if (indexToOrder > this.colunmCount) {
// 去除上下行,总行数
const rowCount = (len - this.colunmCount * 2) / 2
// 非处于左侧
if (index > this.colunmCount + rowCount) {
// 处于右侧
if (indexToOrder > this.colunmCount * 2 + rowCount) {
return {
x: 0,
y: this.itemHeight * (rowCount * 2 + this.colunmCount * 2 - index),
}
}
// 处于底部
return {
x: 100 * (this.colunmCount * 2 + rowCount - indexToOrder),
y: this.itemHeight * (rowCount + 1),
}
}
// 处于右侧
return {
x: 100 * (this.colunmCount - 1),
y: this.itemHeight * (indexToOrder - this.colunmCount),
}
}
// 处于顶部
return {
x: 100 * index,
y: 0,
}
},
/**
* 开始抽奖
* @param {string|number} id 获奖id
* @param {number} minTime 转盘最小持续时间
*/
async start(id, minTime) {
if (this.startFlag) return
const len = this.formateList.length
const activeIndex = this.formateList.findIndex((item) => item.id === id)
if (activeIndex === -1) {
const errorText = `没有找到该中奖id ${id}`
console.error(errorText)
return this.$emit('onError', errorText)
}
let time = minTime
// 动画速度
let interval = this.interval
const startRotate = () => {
this.startFlag = true
clearTimeout(this.timer)
this.timer = setTimeout(() => {
// 抽奖结束
if (time < 1 && this.currIndex === activeIndex) {
this.startFlag = false
clearTimeout(this.timer)
return this.$emit('onEnd', this.formateList[activeIndex])
}
time -= interval
if (time < 3000 && this.isIntervalIncrease) {
// 调整动画速度
interval = interval >= this.maxInterval ? this.maxInterval : interval + 20
}
this.currIndex = this.currIndex >= len - 1 ? 0 : this.currIndex + 1
this.transform = this.place(this.currIndex)
return startRotate()
}, interval)
}
startRotate()
},
onStart() {
this.$emit('onStart')
},
},
}
</script>
<style lang="scss" scoped>
.grid-lottery {
position: relative;
.start-button {
position: absolute;
}
.lottery-list {
display: flex;
flex-wrap: wrap;
.lottery-item {
position: absolute;
top: 0;
left: 0;
}
}
}
</style>
+6 -1
View File
@@ -22,4 +22,9 @@ const handleClickLeft = () => {
}
</script>
<style lang="scss"></style>
<style lang="scss">
:deep(.wd-navbar) {
--wot-navbar-title-font-size: 32rpx;
// --wot-navbar-title-font-weight: 400;
}
</style>
+11
View File
@@ -0,0 +1,11 @@
export const useCaptcha = () => {
const codeUrl = ref('')
const refreshCode = () => {
const baseUrl = import.meta.env.VITE_SERVER_BASEURL
codeUrl.value = baseUrl + '/api/v1/getCaptcha?t=' + Date.now()
}
onMounted(() => {
refreshCode()
})
return { codeUrl, refreshCode }
}
+9 -14
View File
@@ -1,10 +1,9 @@
import { formatTime, getImageUrl } from '@/utils'
import { onPullDownRefresh, onReachBottom } from '@dcloudio/uni-app'
import { computed, onMounted, ref } from 'vue'
interface PaginationRequest {
page?: number
limit?: number
pageIndex?: number
pageSize?: number
[key: string]: any
}
@@ -23,10 +22,10 @@ function useListPageRequest(
const moreLoading = ref(false)
// 全部数据加载完成
const totalPage = ref(0)
const finished = computed(() => totalPage.value <= pagingParams.value.page)
const finished = computed(() => totalPage.value <= pagingParams.value.pageIndex)
const pagingParams = ref<PaginationRequest>({
page: 1,
limit: 1000,
pageIndex: 1,
pageSize: 10,
})
const getPagingParams = computed(() => {
return {
@@ -50,17 +49,13 @@ function useListPageRequest(
...getPagingParams.value,
...customParams,
})
data.forEach((item: any) => {
item.createtime = formatTime(item.createtime)
item.image = getImageUrl(item.image)
})
// totalPage.value = data.count ? Math.ceil(data.count / pagingParams.value.limit!) : 0
list.value.push(...data)
totalPage.value = data.count ? Math.ceil(data.count / pagingParams.value.pageSize!) : 0
list.value.push(...data.list)
}
const onReload = async (params?: AnyObject) => {
loading.value = true
pagingParams.value.page = 1
pagingParams.value.pageIndex = 1
if (params) {
customParams = params
}
@@ -75,7 +70,7 @@ function useListPageRequest(
if (finished.value) {
return
}
pagingParams.value.page = pagingParams.value.page! + 1
pagingParams.value.pageIndex = pagingParams.value.pageIndex! + 1
moreLoading.value = true
try {
await loadData()
+1 -1
View File
@@ -17,7 +17,7 @@ type IUseRequestOptions<T> = {
*/
export default function useRequest<T>(
func: () => Promise<IResData<T>>,
options: IUseRequestOptions<T> = { immediate: false },
options: IUseRequestOptions<T> = { immediate: true },
) {
const loading = ref(false)
const error = ref(false)
+1 -1
View File
@@ -1,3 +1,3 @@
export { routeInterceptor, routerBeforeEachConfig } from './route'
export { routerBeforeEachConfig } from './route'
export { requestInterceptor } from './request'
export { prototypeInterceptor } from './prototype'
+3 -2
View File
@@ -51,8 +51,9 @@ const httpInterceptor = {
}
// 3. 添加 token 请求头标识
const userStore = useUserStore()
if (userStore.token) {
options.header.token = userStore.token
const token = userStore.token
if (token) {
options.header.Authorization = token
}
},
}
-12
View File
@@ -1,12 +0,0 @@
# 注意事项
> 文件夹名字必须为 `locale`, 这是 `uniapp` 官方约定的,如果改为别的,标题将不能正常切换多语言(其他内容还是正常)。
>
> `xxx.json` 的 `xxx` 多语言标识必须与 `uniapp` 官方约定的一致,否则也会出现 BUG。
>
> 查看截图 `screenshots/i18n.png`。
## 参考文档
[uniapp 国际化开发指南](https://uniapp.dcloud.net.cn/tutorial/i18n.html)
[uniapp 国际化-注意事项](https://uniapp.dcloud.net.cn/api/ui/locale.html#onlocalechange) 最下面的注意事项
-8
View File
@@ -1,8 +0,0 @@
{
"tabbar.home": "Home",
"tabbar.about": "About",
"app.name": "En Title",
"weight": "{heavy}KG",
"detail": "{0}cm, {1}KG",
"introduction": "I am {name},height:{detail.height},weight:{detail.weight}"
}
-80
View File
@@ -1,80 +0,0 @@
import { createI18n } from 'vue-i18n'
import en from './en.json'
import zhHans from './zh-Hans.json' // 简体中文
const messages = {
en,
'zh-Hans': zhHans, // key 不能乱写,查看截图 screenshots/i18n.png
}
const i18n = createI18n({
locale: uni.getLocale(), // 获取已设置的语言,fallback 语言需要再 manifest.config.ts 中设置
messages,
allowComposition: true,
})
console.log(uni.getLocale())
console.log(i18n.global.locale)
/**
* 可以拿到原始的语言模板,非 vue 文件使用这个方法,
* @param { string } key 多语言的keyeg: "app.name"
* @returns {string} 返回原始的多语言模板,eg: "{heavy}KG"
*/
export const getTemplateByKey = (key: string) => {
if (!key) {
console.error(`[i18n] Function getTemplateByKey(), key param is required`)
return ''
}
const locale = uni.getLocale()
console.log('locale:', locale)
const message = messages[locale] // 拿到某个多语言的所有模板(是一个对象)
if (Object.keys(message).includes(key)) {
return message[key]
}
try {
const keyList = key.split('.')
return keyList.reduce((pre, cur) => {
return pre[cur]
}, message)
} catch (error) {
console.error(`[i18n] Function getTemplateByKey(), key param ${key} is not existed.`)
return ''
}
}
/**
* formatI18n('我是{name},身高{detail.height},体重{detail.weight}',{name:'张三',detail:{height:178,weight:'75kg'}})
* 暂不支持数组
* @param template 多语言模板字符串,eg: `我是{name}`
* @param {Object|undefined} data 需要传递的数据对象,里面的key与多语言字符串对应,eg: `{name:'菲鸽'}`
* @returns
*/
function formatI18n(template: string, data?: any) {
return template.replace(/\{([^}]+)\}/g, function (match, key: string) {
// console.log( match, key) // => { detail.height } detail.height
const arr = key.trim().split('.')
let result = data
while (arr.length) {
const first = arr.shift()
result = result[first]
}
return result
})
}
/**
* t('introduction',{name:'张三',detail:{height:178,weight:'75kg'}})
* => formatI18n('我是{name},身高{detail.height},体重{detail.weight}',{name:'张三',detail:{height:178,weight:'75kg'}})
* 没有key的,可以不传 data;暂不支持数组
* @param template 多语言模板字符串,eg: `我是{name}`
* @param {Object|undefined} data 需要传递的数据对象,里面的key与多语言字符串对应,eg: `{name:'菲鸽'}`
* @returns
*/
export function t(key, data?) {
return formatI18n(getTemplateByKey(key), data)
}
export default i18n
-8
View File
@@ -1,8 +0,0 @@
{
"tabbar.home": "首页",
"tabbar.about": "关于",
"app.name": "中文标题",
"weight": "{heavy}公斤",
"detail": "{0}cm, {1}公斤",
"introduction": "我是 {name},身高:{detail.height},体重:{detail.weight}"
}
+37 -38
View File
@@ -1,4 +1,4 @@
<route lang="json5">
<route lang="json5" type="page">
{
style: {
navigationBarTitleText: '我的资产',
@@ -7,61 +7,60 @@
}
</route>
<script lang="ts" setup>
import { getMyAssetAPI } from '@/service'
import { useUserStore } from '@/store'
const userStore = useUserStore()
const detailInfo = ref({
point: 1,
score: 1000,
suminvest: '10000',
})
const { list: assetList } = useListPageRequest((params) =>
getMyAssetAPI(params).then((res) => {
detailInfo.value = res.data
res.data.data = res.data.list
return res.data
}),
)
</script>
<template>
<view class="min-h-screen py-15">
<view class="mx-15 text-16 font-bold text-#333">我的资产</view>
<view
class="mt-15 mx-15 rounded-20 text-#476FFF main-content p-15 rounded-10 shadow-[0_5px_30px_rgba(149,195,255,0.4)]"
class="mt-15 mx-15 text-white btn-gradient p-15 rounded-10 shadow-[0_5px_30px_rgba(55,230,236,0.4)]"
>
<view class="text-14 text-#6784C7">总投资金</view>
<view class="text-35 mt-10 font-bold">{{ detailInfo.suminvest }}</view>
<view class="text-14">总投资金</view>
<view class="text-35 mt-10 font-bold">{{ userStore.userInfo?.member_investment }}</view>
<view class="flex mt-15">
<view class="flex-1">
<view class="text-12 font-light">我的分红</view>
<view class="text-16 font-bold mt-5">{{ userStore.userInfo?.member_dividend }}</view>
</view>
<view class="flex-1">
<view class="text-12 font-light">数字人民币</view>
<view class="text-16 font-bold mt-5">{{ userStore.userInfo?.member_dividend }}</view>
</view>
<view class="flex-1">
<view class="text-12 font-light">认购点</view>
<view class="text-16 font-bold mt-5">{{ userStore.userInfo?.member_point }}</view>
</view>
</view>
</view>
<view class="text-16 mx-15 mb-15 font-bold text-#333 mt-30">资产记录</view>
<view
class="flex px-15 py-8 border-b items-center border-#E5E5E5 border-b-solid"
v-for="item in assetList"
v-for="item in list"
:key="item.id"
>
<image src="/static/images/page-sub/invite-icon.png" class="w-32 h-32 self-center" />
<view class="flex flex-col flex-1 ml-15">
<view class="text-14 text-#333">{{ item.memo }}</view>
<!-- <view class="text-12 mt-10 text-#999">奖励</view> -->
<view class="text-12 mt-10 text-#999">{{ item.createtime }}</view>
<view class="text-14 text-#333">{{ item.title }}</view>
<view class="text-12 mt-10 text-#999">奖励</view>
<view class="text-12 mt-10 text-#999">{{ item.create_time }}</view>
</view>
<view class="flex flex-col items-end">
<view class="text-14 font-bold text-#FF5F5F">{{ item.money }}</view>
<!-- <view class="text-14 mt-10 py-4 px-10 bg-#71C78A1A text-#71C78A">已到账</view> -->
<view class="text-14 font-bold text-#FF5F5F">
{{ item.action === 1 ? '+' : '-' }}{{ item.money }}
</view>
<!-- <view class="text-14 font-bold text-#FF5F5F">+2000 RMB</view> -->
<!-- <view class="text-14 font-bold text-#FF5F5F">+30 </view> -->
<view class="text-14 mt-10 py-4 px-10 bg-#71C78A1A text-#71C78A" v-if="item.status === 1">
{{ item.action === 1 ? '已到账' : '已扣除' }}
</view>
</view>
</view>
</view>
</template>
<style>
.main-content {
background-image: url('@/static/images/page-sub/team/main-bg.png');
background-repeat: no-repeat;
background-position: center;
background-size: 100% 100%;
}
</style>
<script setup lang="ts">
import { getBalanceRecordsAPI } from '@/service'
import { useUserStore } from '@/store'
const userStore = useUserStore()
const { list } = useListPageRequest(getBalanceRecordsAPI)
</script>
-84
View File
@@ -1,84 +0,0 @@
<route lang="json5">
{
style: {
navigationStyle: 'custom',
navigationBarTitleText: '转换',
},
}
</route>
<template>
<view class="min-h-screen pb-100">
<NavBar>
<template #right>
<image
@click="onWithdrawalDetail"
src="/static/images/page-sub/recharge.png"
class="w-24 h-24"
/>
</template>
</NavBar>
<view class="p-15">
<view class="mt-15">
<view class="flex items-center justify-between">
<view class="text-14 text-#333">我的股数</view>
<view class="text-12 text-#999">可转换股数{{ userStore.userInfo.score }}</view>
</view>
<view
class="flex items-center text-14 mt-15 text-#333 p-16 shadow-[0_0_10px_rgba(10,68,245,0.1)] rounded-10"
>
<input
v-model="convertNum"
type="number"
placeholder="请输入股数"
class="text-14 text-#333 flex-1"
/>
<view class="text-12 text-gradient" @click="convertNum = userStore.userInfo.score">
全部
</view>
</view>
<view class="text-12 text-#889BC6 mt-15">马尔代夫股权每股价值500元</view>
</view>
</view>
<view
class="bg-white fixed bottom-0 left-0 right-0 px-15 py-10 shadow-[0_0_10px_rgba(10,68,245,0.1)]"
>
<view class="flex items-center pb-safe">
<view
class="btn-gradient flex-1 text-center text-white rounded-full text-14 px-30 py-10"
@click="onSubmit"
>
确认转换至余额
</view>
</view>
</view>
</view>
</template>
<script setup lang="ts">
import NavBar from '@/components/NavBar.vue'
import { convertScoreAPI } from '@/service'
import { useUserStore } from '@/store'
import { mergeStep, showModal } from '@/utils'
const userStore = useUserStore()
const convertNum = ref('')
const onWithdrawalDetail = () => {
uni.navigateTo({
url: '/pages-sub/asset/index',
})
}
const onSubmit = mergeStep(async () => {
await showModal('确认转换?')
await convertScoreAPI({
score: convertNum.value,
})
await showModal('转换成功')
userStore.loadUserInfo()
onWithdrawalDetail()
})
</script>
<style scoped></style>
+12 -19
View File
@@ -1,34 +1,27 @@
<route lang="json5">
<route lang="json5" type="page">
{
style: {
navigationBarTitleText: '公司简介',
navigationBarBackgroundColor: '#fff',
},
}
</route>
<script setup lang="ts">
import { getCompanyInfoAPI } from '@/service'
const { data: companyInfo } = useRequest(() => getCompanyInfoAPI())
</script>
<template>
<view class="pt-15 pb-50 min-h-screen" v-if="introductionDetail">
<view class="text-center text-16 font-bold">{{ introductionDetail.name }}</view>
<view class="pt-15 pb-50 min-h-screen">
<view class="text-center text-16 font-bold">{{ companyInfo.title }}</view>
<image
class="w-345 h-170 rounded-10 mt-15 mx-auto block"
:src="introductionDetail.image"
:src="companyInfo.cover_image"
mode="aspectFill"
/>
<view class="text-gray-500 mx-16 text-14 mt-15 break-all">
{{ introductionDetail.content }}
<view class="text-gray-500 mx-16 text-14 mt-15">
{{ companyInfo.description }}
</view>
</view>
</template>
<script setup lang="ts">
import { getIntroductionAPI } from '@/service'
const { list: introductionList } = useListPageRequest((params) =>
getIntroductionAPI({ type: 3, ...params }),
)
const introductionDetail = computed(() => {
return introductionList.value[0]
})
</script>
+12 -11
View File
@@ -1,4 +1,4 @@
<route lang="json5">
<route lang="json5" type="page">
{
style: {
navigationBarTitleText: '投资记录',
@@ -6,32 +6,33 @@
},
}
</route>
<script lang="ts" setup>
import { getBuyFundOrderListAPI } from '@/service'
import { useListPageRequest } from '@/hooks/useListPageRequest'
import { formatTime } from '@/utils'
<script setup lang="ts">
import { getInvestmentRecordAPI } from '@/service'
const { list: investmentRecordList } = useListPageRequest(getInvestmentRecordAPI)
const { list: fundList } = useListPageRequest(getBuyFundOrderListAPI)
</script>
<template>
<view class="min-h-screen pb-100">
<template v-if="investmentRecordList.length">
<template v-if="fundList.length > 0">
<view
class="flex px-15 py-8 border-b border-#E5E5E5 border-b-solid"
v-for="item in investmentRecordList"
v-for="item in fundList"
:key="item.id"
>
<image src="/static/images/page-sub/money-icon.png" class="w-32 h-32 self-center" />
<view class="flex flex-col flex-1 justify-between ml-15">
<view class="text-14 text-#333">{{ item.name }}</view>
<view class="text-14 text-#333">{{ item.fund_name }}</view>
<view class="text-12 text-#999">投资</view>
<view class="text-12 text-#999">{{ item.createtime }}</view>
<view class="text-12 text-#999">{{ formatTime(item.create_time * 1000) }}</view>
</view>
<view class="flex flex-col items-end">
<view class="text-16 text-#FF5F5F">{{ item.money }}</view>
<view class="text-16 text-#FF5F5F">+{{ item.buy_price }} RMB</view>
<view
class="text-14 mt-18 py-4 px-10 bg-#71C78A1A text-#71C78A"
v-if="Number(item.status) === 1"
v-if="item.order_status === 1"
>
投资成功
</view>
+1 -1
View File
@@ -1,4 +1,4 @@
<route lang="json5">
<route lang="json5" type="page">
{
style: {
navigationStyle: 'custom',
+3 -3
View File
@@ -1,7 +1,7 @@
<route lang="json5">
<route lang="json5" type="page">
{
style: {
navigationBarTitleText: '投资成功',
navigationBarTitleText: '充值成功',
navigationBarBackgroundColor: '#fff',
},
}
@@ -9,7 +9,7 @@
<template>
<view class="min-h-screen flex flex-col items-center justify-center">
<image mode="aspectFit" src="/static/images/page-sub/invest-success.png" class="w-150 h-150" />
<view class="text-17 text-#333">恭喜您投资成功</view>
<view class="text-17 text-#333">恭喜您充值成功</view>
<!-- 返回 -->
<view class="mt-15">
<view @click="onBack" class="btn-gradient text-14 text-white rounded-full px-30 py-10">
+10 -21
View File
@@ -1,52 +1,41 @@
<route lang="json5">
<route lang="json5" type="page">
{
style: {
navigationBarTitleText: '邀请好友',
navigationBarBackgroundColor: '#fff',
navigationStyle: 'custom',
},
}
</route>
<script setup lang="ts">
import NavBar from '@/components/NavBar.vue'
import { useUserStore } from '@/store'
import VueQrcode from '@chenfengyuan/vue-qrcode'
const qrcodeValue = '/pages/register/index?invite=888888'
const userStore = useUserStore()
const qrcodeValue =
location.origin + '/#/pages/register/index?invite=' + userStore.userInfo?.invitation_code
const onCopy = (code: string) => {
uni.setClipboardData({
data: code,
})
}
const onLottery = () => {
uni.navigateTo({
url: '/pages-sub/lottery/index',
})
}
</script>
<template>
<view class="pb-100 min-h-screen invite-page">
<NavBar />
<view class="flex justify-center mt-80">
<view class="text-white btn-gradient rounded-full px-30 py-10 text-14">邀请好友</view>
<view class="ml-15 bg-white rounded-full px-30 py-10 text-14" @click="onLottery">
<text class="text-gradient">幸运大转盘</text>
</view>
</view>
<view class="flex flex-col items-center mt-180">
<view class="pt-250 pb-100 min-h-screen invite-page">
<view class="flex flex-col items-center">
<view
class="flex items-center text-16 text-#333 bg-[rgba(255,255,255,0.8)] rounded-full px-15 py-4 text-12 mt-8"
>
<view>
邀请码
<text class="font-bold">9999999</text>
<text class="font-bold">{{ userStore.userInfo.invitation_code }}</text>
</view>
<view
class="btn-gradient text-white rounded-full px-15 py-4 text-12 ml-10"
@click="onCopy('99999')"
@click="onCopy(userStore.userInfo.invitation_code)"
>
复制
</view>
-146
View File
@@ -1,146 +0,0 @@
<route lang="json5">
{
style: {
navigationBarTitleText: '转盘抽奖',
navigationBarBackgroundColor: '#fff',
navigationStyle: 'custom',
},
}
</route>
<script setup lang="ts">
import NavBar from '@/components/NavBar.vue'
import GridLottery from '@/components/GridLottery.vue'
import lotteryIcon from '@/static/images/home/nav-2.png'
const list = [
{
id: 1,
sort: 0,
title: '\u6BDB\u5DFE',
icon: lotteryIcon,
},
{
id: 2,
sort: 1,
title: '\u6BDB\u5DFE',
icon: lotteryIcon,
},
{
id: 3,
sort: 2,
title: '\u6BDB\u5DFE',
icon: lotteryIcon,
},
{
id: 4,
sort: 3,
title: '\u6BDB\u5DFE',
icon: lotteryIcon,
},
{
id: 5,
sort: 4,
title: '\u6BDB\u5DFE',
icon: lotteryIcon,
},
{
id: 6,
sort: 5,
title: '\u6BDB\u5DFE',
icon: lotteryIcon,
},
{
id: 7,
sort: 6,
title: '\u6BDB\u5DFE',
icon: lotteryIcon,
},
{
id: 8,
sort: 7,
title: '\u6BDB\u5DFE',
icon: lotteryIcon,
},
]
const gridLotteryRef = ref(null)
const onStart = () => {
// 中奖id,抽奖轮转时间毫秒
gridLotteryRef.value.start(3, 10000)
}
const onEnd = () => {
console.log('onEnd')
}
</script>
<template>
<view class="min-h-screen lottery-page">
<NavBar />
<view class="mt-240 w-315 h-315 flex items-center justify-center mx-auto lottery-container">
<grid-lottery
:itemHeight="186"
ref="gridLotteryRef"
class="w-280 ml-8 mt-8"
:list="list"
@onStart="onStart"
@onEnd="onEnd"
>
<!-- <view slot="lottery-item" slot-scope="slotProps">{{ slotProps }}</view> -->
<template #lottery-item="{ data, index, currIndex }">
<view
class="overflow-hidden relative lottery-item flex flex-col items-center justify-center rounded-10 bg-[linear-gradient(180deg,#fffdf7,#fff1ca)] w-86 h-86"
:class="{
mask: currIndex !== index,
}"
>
<image :src="data.icon" class="w-30 h-30" />
<view class="text-14 text-#333 mt-8">{{ data.title }}</view>
</view>
</template>
<template #start-button>
<view
class="w-86 flex flex-col items-center justify-center h-86 bg-[linear-gradient(180deg,#FF8282,#D73434)] text-#FBEDC6 text-25 rounded-10"
>
<view>点击</view>
<view>抽奖</view>
</view>
</template>
<template #activity-box>
<view class="w-86 h-86 bg-red-500"></view>
</template>
</grid-lottery>
</view>
<view class="text-16 mx-auto w-315 mb-15 font-bold text-#fff mt-30">抽奖规则</view>
<view class="text-12 mx-auto w-315 mb-15 text-#fff mt-15">
1. 每轮抽奖消耗10000认购点每轮抽奖次数为3次每轮抽奖结束后消耗的认购点将恢复为0
</view>
</view>
</template>
<style>
.lottery-item {
&.mask {
&::after {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
content: '';
background: rgba(0, 0, 0, 0.1);
}
}
}
.lottery-container {
background-image: url('@/static/images/lottery-bar.png');
background-size: 100% 100%;
}
.lottery-page {
background-color: #517aae;
background-image: url('@/static/images/lottery-bg.png');
background-repeat: no-repeat;
background-position: top;
background-size: 100%;
}
</style>
+7 -11
View File
@@ -7,26 +7,22 @@
}
</route>
<script setup lang="ts">
import { getIntroductionDetailAPI } from '@/service'
import { getImageUrl } from '@/utils'
import dayjs from 'dayjs'
import { getNewsDetailAPI } from '@/service'
const newsDetail = ref<any>({})
onLoad(async (options) => {
const { data } = await getIntroductionDetailAPI({ id: options.id })
const { data } = await getNewsDetailAPI({ news_id: options.id })
newsDetail.value = data
})
</script>
<template>
<view class="min-h-screen pb-100 pt-30 px-15">
<view class="text-20 text-black font-bold">{{ newsDetail.name }}</view>
<view class="text-20 text-black font-bold">{{ newsDetail.title }}</view>
<view class="flex justify-between py-10">
<view class="text-14 text-gray-500">{{ newsDetail.source }}</view>
<view class="text-14 text-gray-500">
{{ dayjs(newsDetail.createtime * 1000).format('YYYY-MM-DD HH:mm') }}
</view>
<view class="text-14 text-gray-500">{{ newsDetail.auther }}</view>
<view class="text-14 text-gray-500">{{ newsDetail.create_time }}</view>
</view>
<image class="w-full mt-15" mode="widthFix" :src="getImageUrl(newsDetail.image)" />
<view class="text-14 text-gray-600 mt-15">{{ newsDetail.content }}</view>
<image class="w-full mt-15" mode="widthFix" :src="newsDetail.cover_image" />
<view class="text-14 text-gray-600 mt-15">{{ newsDetail.description }}</view>
</view>
</template>
+21 -14
View File
@@ -1,4 +1,9 @@
<route lang="json5">
<script setup lang="ts">
import NavBar from '@/components/NavBar.vue'
import VueQrcode from '@chenfengyuan/vue-qrcode'
</script>
<route lang="json5" type="page">
{
style: {
navigationBarTitleText: '官方社群',
@@ -7,23 +12,25 @@
},
}
</route>
<script setup lang="ts">
import NavBar from '@/components/NavBar.vue'
import { getCustomerServiceAPI } from '@/service'
import VueQrcode from '@chenfengyuan/vue-qrcode'
const detail = ref('')
onLoad(async () => {
const { data } = await getCustomerServiceAPI()
detail.value = data
})
</script>
<template>
<view class="official-community-page">
<NavBar />
<view class="p-15 text-center bg-white rounded-10 m-15 shadow-[0_0_10px_rgba(0,0,0,0.1)]">
<view v-html="detail"></view>
<view class="text-16 font-bold text-#333">扫码进入</view>
<wd-icon name="arrow-down" color="#333" size="18px"></wd-icon>
<view class="btn-gradient rounded-full w-fit mx-auto text-16 text-white py-10 px-15">
微聊总群50101011
</view>
<VueQrcode class="!w-270 !h-270 mx-auto" :value="'qrcodeValue'" :options="{ size: 600 }" />
</view>
<view class="p-15 text-center bg-white rounded-10 m-15 shadow-[0_0_10px_rgba(0,0,0,0.1)]">
<view class="text-16 font-bold text-#333">扫码进入</view>
<wd-icon name="arrow-down" color="#333" size="18px"></wd-icon>
<view class="btn-gradient rounded-full w-fit mx-auto text-16 text-white py-10 px-15">
QQ群2群1011101011
</view>
<VueQrcode class="!w-270 !h-270 mx-auto" :value="'qrcodeValue'" :options="{ size: 600 }" />
</view>
</view>
</template>
@@ -31,7 +38,7 @@ onLoad(async () => {
<style>
.official-community-page {
min-height: 100vh;
padding-bottom: 50px;
padding-bottom: 100rpx;
background-image: url('@/static/images/bg.png');
background-position: top;
background-size: cover;
+127
View File
@@ -0,0 +1,127 @@
<template>
<view class="min-h-screen pt-50 pb-100">
<view
class="w-345 mx-auto rounded-10 btn-gradient px-30 pb-20 relative shadow-[0_5px_30px_rgba(55,230,236,0.4)]"
>
<view class="relative -top-30px">
<view class="relative w-70">
<Avatar class="w-70 h-70 box-border" />
<view
class="text-center left-1/2 whitespace-nowrap -translate-x-1/2 py-2 px-10 absolute -bottom-6 bg-[linear-gradient(180deg,#FFD54B,#FFB99A)] rounded-full text-10 left-0 text-#fff"
>
黄金会员
</view>
</view>
<view class="text-16 mt-15 text-#fff">132***0101</view>
</view>
<view class="absolute -bottom-10 right-30 text-90 leading-80 font-bold text-#ffffff20">
VIP
</view>
</view>
<view class="mt-30 w-345 mx-auto grid grid-cols-3 gap-10">
<view
class="bg-#fff py-40 rounded-10 text-center border border-#E5E5E5 border-solid"
v-for="(item, index) of vipList"
:key="item.id"
:class="{
'!bg-[linear-gradient(90deg,#3B81F320,#37E6EC20)]': currentVipIndex === index,
'!border-#3B81F3': currentVipIndex === index,
}"
@click="currentVipIndex = index"
>
<view class="text-14">{{ item.vip_name }}</view>
<view class="mt-10 text-20 font-bold">{{ item.buy_price }}</view>
</view>
</view>
<view class="text-center mt-30 mt-30 pt-30 border-t-8 border-#f7f7f7 border-t-solid">
<view class="text-18 font-500 text-#333">会员专属权益</view>
<view class="text-14 text-#666 mt-10">每日获得高收益分红</view>
</view>
<view class="mt-30 w-345 mx-auto grid grid-cols-3 gap-10">
<view class="bg-#fff py-20 rounded-10 text-center border border-#E5E5E5 border-solid">
<image
class="w-50 h-50"
src="@/static/images/page-sub/purchase-member/icon-1.png"
mode="scaleToFill"
/>
<view class="mt-10 text-12 text-#999">每日可以获取</view>
<view class="text-14 font-bold text-#FF5F5F">
{{ Number(vipList[currentVipIndex].award_investment) }}投资金
</view>
</view>
<view class="border border-#E5E5E5 border-solid py-20 rounded-10 text-center">
<image
class="w-50 h-50"
src="@/static/images/page-sub/purchase-member/icon-2.png"
mode="scaleToFill"
/>
<view class="mt-10 text-12 text-#999">数字人民币</view>
<view class="text-14 font-bold text-#FF5F5F">
{{ Number(vipList[currentVipIndex].award_currency) }}
</view>
</view>
<view class="bg-#fff py-20 rounded-10 text-center border border-#E5E5E5 border-solid">
<image
class="w-50 h-50"
src="@/static/images/page-sub/purchase-member/icon-3.png"
mode="scaleToFill"
/>
<view class="mt-10 text-12 text-#999">AI智能</view>
<view class="text-14 font-bold text-#FF5F5F">
{{ vipList[currentVipIndex].dividend_multiple }}
</view>
</view>
</view>
<view
class="bg-white fixed bottom-0 left-0 right-0 px-15 py-10 shadow-[0_0_10px_rgba(10,68,245,0.1)]"
>
<view class="flex items-center pb-safe">
<view
class="btn-gradient flex-1 text-center text-white rounded-full text-14 px-30 py-10"
@click="onSubmit"
>
立即购买
</view>
</view>
</view>
</view>
</template>
<script lang="ts" setup>
import Avatar from '@/components/Avatar.vue'
import { buyVIPAPI, getVipListAPI } from '@/service'
import { useUserStore } from '@/store'
import { mergeStep, showModal } from '@/utils'
const vipList = ref<any[]>([])
const currentVipIndex = ref(0)
onLoad(() => {
getVipListAPI().then((res) => {
vipList.value = res.data.list
})
})
const userStore = useUserStore()
const onSubmit = mergeStep(async () => {
console.log(vipList.value[currentVipIndex.value])
await showModal('确认购买吗?')
await buyVIPAPI({
fund_id: vipList.value[currentVipIndex.value].id,
})
await showModal('购买成功')
await userStore.loadUserInfo()
})
</script>
<route lang="json5" type="page">
{
style: {
navigationBarTitleText: '购买会员',
navigationBarBackgroundColor: '#fff',
},
}
</route>
+86 -62
View File
@@ -9,91 +9,115 @@
<template>
<view class="withdrawal-type-edit-page pb-100 min-h-screen">
<view class="p-15 m-15 shadow-[0_0_10px_rgba(10,68,245,0.1)] rounded-10">
<view class="flex items-center py-15 text-14">
<image src="@/static/images/page-sub/realname/realname-type.png" class="w-20 h-20" />
<view class="ml-8">证件类型</view>
<view class="flex-1 text-right text-14">身份证</view>
</view>
<view class="flex items-center py-15 text-14">
<image src="@/static/images/page-sub/realname/realname-name.png" class="w-20 h-20" />
<view class="ml-8">真实姓名</view>
<input
class="flex-1 text-right text-14"
placeholder-class=" text-#889BC6 text-right"
type="text"
placeholder="请输入真实姓名"
v-model="form.realname"
/>
</view>
<view class="flex items-center py-15 text-14">
<image src="@/static/images/page-sub/realname/realname-number.png" class="w-20 h-20" />
<view class="ml-8">身份证号</view>
<input
class="flex-1 text-right text-14"
placeholder-class=" text-#889BC6 text-right"
type="text"
placeholder="请输入身份证号"
v-model="form.cardnum"
/>
</view>
</view>
<view class="fixed bottom-0 left-0 right-0 pb-safe">
<button class="btn-gradient text-white rounded-full m-15 text-16" @click="onSubmit">
{{ realnameInfo ? '修改' : '提交' }}
<template v-if="Number(userStore.userInfo?.member_certification) === 2">
<image
src="@/static/images/page-sub/realname/realname-checking.png"
class="w-150 mx-auto h-150 block"
mode="aspectFit"
/>
<view class="text-center mt-15 text-14 text-#999">您的实名认证正在审核中请耐心等待</view>
<button class="btn-gradient px-30 text-white rounded-full m-15 text-16" @click="onBack">
返回
</button>
</view>
</template>
<template v-else-if="Number(userStore.userInfo?.member_certification) === 1">
<view class="flex flex-col items-center">
<image
src="@/static/images/page-sub/realname/realname-success.png"
class="w-150 h-150 block"
mode="aspectFit"
/>
<view class="text-center mt-15 text-14 text-#999">恭喜您实名认证成功</view>
<button class="btn-gradient px-30 text-white rounded-full m-15 text-16" @click="onBack">
返回
</button>
</view>
</template>
<template v-else-if="Number(userStore.userInfo?.member_certification) === 3">
<view class="flex flex-col items-center">
<image
src="@/static/images/page-sub/realname/realname-checking.png"
class="w-150 h-150 block"
mode="aspectFit"
/>
<view class="text-center mt-15 text-14 text-#999">您的实名认证审核未通过请重新提交</view>
<button
class="btn-gradient px-30 text-white rounded-full m-15 text-16"
@click="onReachBottom"
>
重新提交
</button>
</view>
</template>
<template v-else>
<view class="p-15 m-15 shadow-[0_0_10px_rgba(10,68,245,0.1)] rounded-10">
<view class="flex items-center py-15 text-14">
<image src="@/static/images/page-sub/realname/realname-type.png" class="w-20 h-20" />
<view class="ml-8">证件类型</view>
<view class="flex-1 text-right text-14">身份证</view>
</view>
<view class="flex items-center py-15 text-14">
<image src="@/static/images/page-sub/realname/realname-name.png" class="w-20 h-20" />
<view class="ml-8">真实姓名</view>
<input
class="flex-1 text-right text-14"
placeholder-class=" text-#889BC6 text-right"
type="text"
placeholder="请输入真实姓名"
v-model="form.credentials_name"
/>
</view>
<view class="flex items-center py-15 text-14">
<image src="@/static/images/page-sub/realname/realname-number.png" class="w-20 h-20" />
<view class="ml-8">身份证号</view>
<input
class="flex-1 text-right text-14"
placeholder-class=" text-#889BC6 text-right"
type="text"
placeholder="请输入身份证号"
v-model="form.credentials_number"
/>
</view>
</view>
<view class="fixed bottom-0 left-0 right-0 pb-safe">
<button class="btn-gradient text-white rounded-full m-15 text-16" @click="onSubmit">
提交
</button>
</view>
</template>
</view>
</template>
<script setup lang="ts">
import { editRealNameAuthAPI, getRealNameAuthAPI, realNameAuthAPI } from '@/service'
import { createAuthUser } from '@/service'
import { useUserStore } from '@/store'
import { showModal } from '@/utils'
import { ref } from 'vue'
const userStore = useUserStore()
const form = ref({
id: '',
realname: '',
cardnum: '',
credentials_name: '',
credentials_number: '',
})
const onBack = () => {
uni.navigateBack()
}
const realnameInfo = ref(null)
const loadRealnameInfo = async () => {
realnameInfo.value = await getRealNameAuthAPI().then((res) => {
return res.data
})
if (realnameInfo.value) {
form.value.realname = realnameInfo.value.realname
form.value.cardnum = realnameInfo.value.cardnum
form.value.id = realnameInfo.value.id
}
const onReachBottom = () => {
userStore.userInfo.member_certification = null
}
const onSubmit = async () => {
if (!form.value.realname || !form.value.cardnum) {
if (!form.value.credentials_name || !form.value.credentials_number) {
await showModal('请填写完整信息')
return
}
if (!/^\d{17}[\d|x]$/i.test(form.value.cardnum)) {
await showModal('身份证号格式错误')
return
}
if (form.value.id) {
await editRealNameAuthAPI(form.value)
await showModal('修改成功')
} else {
await realNameAuthAPI(form.value)
await showModal('实名认证成功')
}
loadRealnameInfo()
await createAuthUser(form.value)
await showModal('提交成功')
userStore.loadUserInfo()
}
onLoad(loadRealnameInfo)
</script>
<style lang="scss" scoped>
.withdrawal-type-edit-page {
+86
View File
@@ -0,0 +1,86 @@
<route lang="json5" type="page">
{
style: {
navigationBarTitleText: '充值记录',
navigationBarBackgroundColor: '#fff',
},
}
</route>
<template>
<view class="min-h-screen pb-100">
<template v-if="list.length">
<view
class="flex px-15 py-8 border-b border-#E5E5E5 border-b-solid"
v-for="item in list"
:key="item.id"
>
<image
v-if="getCurrentWallet(item.wall_id).wallet_crad_type === 1"
src="/static/images/invest/unionpay-icon.png"
class="w-32 h-32 self-center"
/>
<image
v-if="getCurrentWallet(item.wall_id).wallet_crad_type === 2"
src="/static/images/invest/alipay-icon.png"
class="w-32 h-32 self-center"
/>
<image
v-if="getCurrentWallet(item.wall_id).wallet_crad_type === 3"
src="/static/images/invest/wechat-icon.png"
class="w-32 h-32 self-center"
/>
<view class="flex flex-col flex-1 justify-between ml-15">
<view class="text-14 text-#333">{{ getCurrentWallet(item.wall_id).wallet_name }}</view>
<view class="text-12 text-#999">充值</view>
<view class="text-12 text-#999">{{ item.create_time }}</view>
</view>
<view class="flex flex-col items-end">
<view class="text-16 text-#FF5F5F">+{{ item.change_money }} RMB</view>
<view
class="text-14 mt-18 py-4 px-10 bg-gray-400 text-white"
v-if="item.change_status === 0"
>
审核中
</view>
<view
class="text-14 mt-18 py-4 px-10 bg-#71C78A1A text-#71C78A"
v-else-if="item.change_status === 1"
>
充值成功
</view>
<view
class="text-14 mt-18 py-4 px-10 bg-#FF5F5F text-white"
v-else-if="item.change_status === 2"
>
充值失败
</view>
</view>
</view>
</template>
<template v-else>
<wd-status-tip image="content" tip="暂无数据" />
</template>
</view>
</template>
<script setup lang="ts">
import { getRechargeRecordAPI, getSystemRechargeAccountAPI } from '@/service'
const { list } = useListPageRequest(getRechargeRecordAPI)
const walletList = ref<any[]>([])
onMounted(async () => {
const {
data: { list },
} = await getSystemRechargeAccountAPI({
wallet_type: 1,
})
walletList.value = list
})
const getCurrentWallet = (id: string) => {
return walletList.value.find((item) => item.id === id)
}
</script>
+224
View File
@@ -0,0 +1,224 @@
<route lang="json5">
{
style: {
navigationStyle: 'custom',
navigationBarTitleText: '充值',
},
}
</route>
<template>
<view class="recharge-page min-h-screen pb-100">
<NavBar>
<template #right>
<image @click="onRecharge" src="/static/images/page-sub/recharge.png" class="w-24 h-24" />
</template>
</NavBar>
<view class="p-15">
<view class="mt-15">
<view class="text-14 text-#333">充值金额</view>
<view class="text-14 mt-15 text-#333 p-16 shadow-[0_0_10px_rgba(10,68,245,0.1)] rounded-10">
<input
v-model="form.change_money"
type="number"
placeholder="请输入充值金额"
class="text-14 text-#333"
/>
</view>
</view>
<view class="mt-15">
<view class="text-14 text-#333">充值方式</view>
<view class="text-14 mt-15 text-#333 p-16 shadow-[0_0_10px_rgba(10,68,245,0.1)] rounded-10">
<wd-select-picker
type="radio"
custom-class="!p-0"
custom-value-class="text-14 text-#889BC6"
class="flex-1"
placeholder="请选择充值方式"
v-model="walletType"
:columns="columns"
></wd-select-picker>
<!-- 用卡片展示收款银行信息 -->
<view class="mt-15">
<!-- 银行卡信息 -->
<view class="mt-15" v-if="walletType === 1">
<view class="mt-15 flex items-center justify-between">
<view class="text-14 text-#333">银行名称</view>
<view class="text-14 text-#889BC6">{{ currentWallet.wallet_name }}</view>
</view>
<view class="mt-15 flex items-center justify-between">
<view class="text-14 text-#333">银行账号</view>
<view class="text-14 text-#889BC6">{{ currentWallet.wallet_account }}</view>
</view>
<view class="mt-15 flex items-center justify-between">
<view class="text-14 text-#333">银行户名</view>
<view class="text-14 text-#889BC6">{{ currentWallet.wallet_username }}</view>
</view>
</view>
<!-- 支付宝信息 -->
<view class="mt-15" v-if="walletType === 2">
<view class="mt-15 flex items-center justify-between">
<view class="text-14 text-#333">支付宝账号</view>
<view class="text-14 text-#889BC6">{{ currentWallet.wallet_account }}</view>
</view>
<view class="mt-15 flex items-center justify-between">
<view class="text-14 text-#333">支付宝户名</view>
<view class="text-14 text-#889BC6">{{ currentWallet.wallet_username }}</view>
</view>
</view>
<!-- 微信信息 -->
<view class="mt-15" v-if="walletType === 3">
<view class="mt-15 flex items-center justify-between">
<view class="text-14 text-#333">微信账号</view>
<view class="text-14 text-#889BC6">{{ currentWallet.wallet_account }}</view>
</view>
<view class="mt-15 flex items-center justify-between">
<view class="text-14 text-#333">微信户名</view>
<view class="text-14 text-#889BC6">{{ currentWallet.wallet_username }}</view>
</view>
</view>
</view>
</view>
</view>
<view class="mt-15">
<view class="text-14 text-#333">充值账号</view>
<view class="text-14 mt-15 text-#333 p-16 shadow-[0_0_10px_rgba(10,68,245,0.1)] rounded-10">
<input
v-model="form.bank_account"
type="number"
placeholder="请输入充值账号"
class="text-14 text-#333"
/>
</view>
</view>
<view class="mt-15">
<view class="text-14 text-#333">付款截图</view>
<view class="text-14 mt-15 text-#333 p-16 shadow-[0_0_10px_rgba(10,68,245,0.1)] rounded-10">
<view @click="handleUpload" class="text-14 text-gradient">上传截图</view>
<image
v-if="form.change_image"
mode="aspectFill"
@click="handlePreview"
class="w-100 h-100 mt-15 rounded-10"
:src="form.change_image"
/>
</view>
</view>
</view>
<view class="fixed bottom-0 left-0 right-0 px-15 pb-safe">
<view
class="btn-gradient mb-15 text-center text-white rounded-full text-16 px-30 py-10"
@click="onSubmit"
>
提交
</view>
</view>
</view>
</template>
<script setup lang="ts">
import NavBar from '@/components/NavBar.vue'
import { getSystemRechargeAccountAPI, rechargeAPI } from '@/service'
import { mergeStep, showModal } from '@/utils'
const walletType = ref(1)
const columns = [
{
label: '银行卡',
value: 1,
},
{
label: '支付宝',
value: 2,
},
{
label: '微信',
value: 3,
},
]
const form = ref({
change_money: '',
bank_account: '',
change_image: '',
wall_id: '',
})
const currentWallet = ref<any>(null)
watch(
() => columns[walletType.value - 1]?.value,
async (walletCradType) => {
const {
data: { list },
} = await getSystemRechargeAccountAPI({
wallet_type: 1,
wallet_crad_type: walletCradType,
})
currentWallet.value = list[0]
form.value.wall_id = list[0].id
},
{ immediate: true },
)
const { data, run } = useUpload<any>()
const handleUpload = () => {
run()
}
watch(data, async (newVal) => {
const path = JSON.parse(newVal)?.data?.path
form.value.change_image = path
})
const onRecharge = () => {
uni.navigateTo({
url: '/pages-sub/recharge-detail/index',
})
}
const onSubmit = mergeStep(async () => {
if (!form.value.change_image) {
uni.showToast({
title: '请上传付款截图',
icon: 'none',
})
return
}
if (!form.value.bank_account) {
uni.showToast({
title: '请输入充值账号',
icon: 'none',
})
return
}
if (!form.value.change_money) {
uni.showToast({
title: '请输入充值金额',
icon: 'none',
})
return
}
await rechargeAPI(form.value)
await showModal('充值成功')
uni.redirectTo({
url: '/pages-sub/recharge-detail/index',
})
})
const handlePreview = () => {
uni.previewImage({
urls: [form.value.change_image],
})
}
</script>
<style lang="scss" scoped>
.recharge-page {
--wot-input-placeholder-color: #889bc6;
--wot-cell-wrapper-padding: 0;
--wot-cell-padding: 0;
}
</style>
+41 -26
View File
@@ -1,4 +1,4 @@
<route lang="json5">
<route lang="json5" type="page">
{
style: {
navigationBarTitleText: '我的邀请',
@@ -15,15 +15,15 @@
<view @click="handleRule" class="text-14 text-#333">邀请奖励规则</view>
</template>
</NavBar>
<view class="px-15 py-30 relative rounded-10 mt-50 w-345 mx-auto main-content">
<view class="p-15 relative bg-white rounded-10 mt-50 w-345 mx-auto">
<image
class="w-150 h-150 rounded-10 mt-15 mx-auto block absolute right-15 bottom-30"
class="w-186 h-122 rounded-10 mt-15 mx-auto block absolute right-0 bottom-0"
src="@/static/images/page-sub/team/team-main-hero.png"
mode="aspectFit"
/>
<view class="flex flex-col">
<view class="text-14 text-#6784C7">邀请人数</view>
<view class="text-35 font-bold text-#476FFF mt-10 leading-35">{{ totalCount }}</view>
<view class="text-14 text-gradient">看看人数</view>
<view class="text-35 font-bold text-gradient mt-10 leading-35">{{ totalCount }}</view>
</view>
</view>
<image
@@ -41,28 +41,32 @@
}"
@click="() => (currentLevelIndex = index)"
>
<image class="w-30 h-30 rounded-10 mx-auto block" :src="item.icon" mode="aspectFill" />
<view class="text-14 mt-10 text-center">{{ item.title }}</view>
<image class="w-42 h-52 rounded-10 mx-auto block" :src="item.icon" mode="aspectFill" />
<view class="text-14 text-center">{{ item.title }}</view>
</view>
</view>
<view class="mt-25 bg-white rounded-10 w-345 mx-auto" v-if="list.length">
<view class="flex p-15 items-center" v-for="item in list" :key="item">
<Avatar class="w-40 h-40" :src="item.avatar" />
<view class="mt-25 bg-white rounded-10 w-345 mx-auto" v-if="list.length > 0">
<view class="flex p-15 items-center" v-for="item in list" :key="item.id">
<Avatar class="w-40 h-40" :src="item.member_portrait" />
<view class="flex-1 flex flex-col ml-15">
<view class="text-14 text-#333">{{ item.nickname }}</view>
<view class="text-12 mt-10 text-#999">{{ item.username }}</view>
<view class="text-12 mt-10 text-#999">{{ item.jointime }}</view>
<view class="text-12 mt-10 text-#999">{{ item.from_username }}</view>
<view class="text-12 mt-10 text-#999">{{ item.create_time }}</view>
</view>
<!-- <view class="bg-#71C78A80 text-white text-12 rounded-10 px-10 py-5">邀请成功</view> -->
<view class="text-14 font-bold text-#FF5F5F">+{{ item.score }} </view>
<view class="bg-#71C78A80 text-white text-12 rounded-10 px-10 py-5">邀请成功</view>
</view>
</view>
<view class="mt-25 bg-white rounded-10 w-345 mx-auto p-15" v-else>
<wd-status-tip image="content" tip="暂无内容" />
</view>
<wd-action-sheet v-model="showRule" title="邀请奖励规则">
<view class="text-16 text-#333 p-15">
<view class="mb-10 text-center">每邀请一人可以获得20股马尔代夫股权</view>
<view class="mb-10">1.每邀请一人可以获得1万投资金2000数字人民币 1点认购点</view>
<view class="mb-10">2.邀请满5人可以额外获得5万投资金1万数字人民币 5点认购点</view>
<view class="mb-10">3.邀请满10人可以额外获得10万投资金2万数字人民币 10点认购点</view>
<view class="mb-10">4.邀请满20人可以额外获得20万投资金5万数字人民币 20点认购点</view>
<view class="mb-10">5.邀请满50人可以额外获得50万投资金10万数字人民币 50点认购点</view>
</view>
</wd-action-sheet>
</view>
@@ -71,10 +75,13 @@
<script setup lang="ts">
import Avatar from '@/components/Avatar.vue'
import NavBar from '@/components/NavBar.vue'
import { getMyTeamAPI, getMyTeamApi } from '@/service'
import { getMyTeamAPI } from '@/service'
import Level1 from '@/static/images/page-sub/team/level-1.png'
import Level2 from '@/static/images/page-sub/team/level-2.png'
import Level3 from '@/static/images/page-sub/team/level-3.png'
import Level4 from '@/static/images/page-sub/team/level-4.png'
import Level5 from '@/static/images/page-sub/team/level-5.png'
import Level6 from '@/static/images/page-sub/team/level-6.png'
const showRule = ref(false)
@@ -99,14 +106,28 @@ const levelList = ref([
icon: Level3,
level: 3,
},
{
title: '四级用户',
icon: Level4,
level: 4,
},
{
title: '五级用户',
icon: Level5,
level: 5,
},
{
title: '六级用户',
icon: Level6,
level: 6,
},
])
const totalCount = ref(0)
const { list, onReload } = useListPageRequest((...rest) => {
return getMyTeamAPI(...rest).then((res) => {
totalCount.value = (res.data as any).num
res.data.data = res.data.list
return res.data
totalCount.value = (res.data as any).total_count
return res
})
})
@@ -123,15 +144,9 @@ watch(
<style lang="scss" scoped>
.team-page {
min-height: 100vh;
padding-bottom: 50px;
padding-bottom: 100rpx;
background-image: url('@/static/images/bg.png');
background-position: top;
background-size: cover;
}
.main-content {
background-image: url('@/static/images/page-sub/team/main-bg.png');
background-repeat: no-repeat;
background-position: center;
background-size: 100% 100%;
}
</style>
+56 -47
View File
@@ -1,4 +1,4 @@
<route lang="json5">
<route lang="json5" type="page">
{
style: {
navigationBarTitleText: '提现记录',
@@ -8,55 +8,60 @@
</route>
<template>
<view class="min-h-screen pb-100">
<view
class="flex px-15 py-8 border-b border-#E5E5E5 border-b-solid"
v-for="item in list"
:key="item.id"
>
<image
src="/static/images/invest/alipay-icon.png"
class="w-32 h-32 self-center"
v-if="item.typedata === '支付宝'"
/>
<image
src="/static/images/invest/wechat-icon.png"
class="w-32 h-32 self-center"
v-if="item.typedata === '微信'"
/>
<image
src="/static/images/invest/unionpay-icon.png"
class="w-32 h-32 self-center"
v-if="item.typedata === '银联'"
/>
<view class="flex flex-col flex-1 justify-between ml-15">
<view class="text-14 text-#333">{{ item.typedata }}</view>
<view class="text-12 text-#999">提现</view>
<view class="text-12 text-#999">{{ item.createtime }}</view>
</view>
<view class="flex flex-col items-end">
<view class="text-16 text-#FF5F5F">{{ item.money }}</view>
<view
class="text-14 mt-18 py-4 px-10 bg-#99999990 text-#fff"
v-if="Number(item.status) === 1"
>
审核中
<template v-if="list.length">
<view
class="flex px-15 py-8 border-b border-#E5E5E5 border-b-solid"
v-for="item in list"
:key="item.id"
>
<image
v-if="item.cash_type === 1"
src="/static/images/invest/unionpay-icon.png"
class="w-32 h-32 self-center"
/>
<image
v-if="item.cash_type === 2"
src="/static/images/invest/alipay-icon.png"
class="w-32 h-32 self-center"
/>
<image
v-if="item.cash_type === 3"
src="/static/images/invest/wechat-icon.png"
class="w-32 h-32 self-center"
/>
<view class="flex flex-col flex-1 justify-between ml-15">
<view class="text-14 text-#333">{{ typeName(item.cash_type) }}</view>
<view class="text-12 text-#999">提现</view>
<view class="text-12 text-#999">{{ item.create_time }}</view>
</view>
<view
class="text-14 mt-18 py-4 px-10 bg-#71C78A1A text-#71C78A"
v-if="Number(item.status) === 2"
>
提现成功
</view>
<view
class="text-14 mt-18 py-4 px-10 bg-#FF5F5F90 text-#fff"
v-if="Number(item.status) === 3"
>
提现失败
<view class="flex flex-col items-end">
<view class="text-16 text-#FF5F5F">-{{ item.cash_money }} RMB</view>
<view
class="text-14 mt-18 py-4 px-10 bg-gray-400 text-white"
v-if="item.cash_status === 0"
>
审核中
</view>
<view
class="text-14 mt-18 py-4 px-10 bg-#71C78A1A text-#71C78A"
v-else-if="item.cash_status === 1"
>
提现成功
</view>
<view
class="text-14 mt-18 py-4 px-10 bg-#FF5F5F text-white"
v-else-if="item.cash_status === 2"
>
提现失败
</view>
</view>
</view>
</view>
</template>
<template v-else>
<wd-status-tip image="content" tip="暂无内容" />
</template>
</view>
</template>
@@ -64,4 +69,8 @@
import { getWithdrawalRecordAPI } from '@/service'
const { list } = useListPageRequest(getWithdrawalRecordAPI)
const typeName = (item) => {
return ['银行卡', '支付宝', '微信'][Number(item.card_type) - 1]
}
</script>
+32 -21
View File
@@ -18,18 +18,28 @@
custom-value-class="text-14 text-#889BC6 text-right"
class="flex-1"
placeholder="请选择收款类型"
v-model="form.typedata"
v-model="form.card_type"
:columns="columns"
></wd-select-picker>
</view>
<view class="flex items-center py-15 text-14" v-if="form.typedata === 3">
<view class="flex items-center py-15 text-14" v-if="form.card_type === 1">
<view>开户行</view>
<input
class="flex-1 text-right text-14"
placeholder-class=" text-#889BC6 text-right"
type="text"
placeholder="请输入开户行"
v-model="form.kaihuhang"
v-model="form.bank_name"
/>
</view>
<view class="flex items-center py-15 text-14" v-if="form.card_type === 1">
<view>开户行地址</view>
<input
class="flex-1 text-right text-14"
placeholder-class=" text-#889BC6 text-right"
type="text"
placeholder="请输入开户行地址"
v-model="form.bank_address"
/>
</view>
<view class="flex items-center py-15 text-14">
@@ -39,17 +49,17 @@
placeholder-class=" text-#889BC6 text-right"
type="text"
:placeholder="`请输入${typeName}账号`"
v-model="form.banknum"
v-model="form.card_account"
/>
</view>
<view class="flex items-center py-15 text-14">
<view>{{ form.typedata === 3 ? '持卡人' : '' }}姓名</view>
<view>{{ form.card_type === 1 ? '持卡人' : '' }}姓名</view>
<input
class="flex-1 text-right text-14"
placeholder-class=" text-#889BC6 text-right"
type="text"
:placeholder="`请输入${form.typedata === 3 ? '持卡人' : ''}姓名`"
v-model="form.name"
:placeholder="`请输入${form.card_type === 1 ? '持卡人' : ''}姓名`"
v-model="form.card_name"
/>
</view>
@@ -73,58 +83,59 @@
</template>
<script setup lang="ts">
import { addBankCardAPI } from '@/service'
import { bindBankCardAPI } from '@/service'
import { mergeStep, showModal } from '@/utils'
import { ref } from 'vue'
const form = ref({
typedata: 1,
kaihuhang: '',
name: '',
banknum: '',
card_type: 1,
bank_name: '',
bank_address: '',
card_name: '',
card_account: '',
})
const columns = [
{
label: '支付宝',
label: '银行卡',
value: 1,
},
{
label: '微信',
label: '支付宝',
value: 2,
},
{
label: '银行卡',
label: '微信',
value: 3,
},
]
const typeName = computed(() => {
return ['支付宝', '微信', '银行卡'][Number(form.value.typedata) - 1]
return ['银行卡', '支付宝', '微信'][Number(form.value.card_type) - 1]
})
const onAddType = mergeStep(async () => {
if (form.value.typedata === 3) {
if (!form.value.kaihuhang) {
if (form.value.card_type === 1) {
if (!form.value.bank_name) {
return uni.showToast({
title: '请输入开户行',
icon: 'none',
})
}
}
if (!form.value.banknum) {
if (!form.value.card_account) {
return uni.showToast({
title: '请输入账号',
icon: 'none',
})
}
if (!form.value.name) {
if (!form.value.card_name) {
return uni.showToast({
title: '请输入姓名',
icon: 'none',
})
}
await addBankCardAPI(form.value)
await bindBankCardAPI(form.value)
await showModal('添加成功')
uni.navigateBack()
})
+9 -12
View File
@@ -16,28 +16,28 @@
@click="onSelectType(item)"
>
<image
v-if="Number(item.typedata) === 3"
v-if="Number(item.card_type) === 1"
class="w-45 h-45"
src="@/static/images/invest/unionpay-icon.png"
mode="aspectFit"
/>
<image
v-if="Number(item.typedata) === 1"
v-if="Number(item.card_type) === 2"
class="w-45 h-45"
src="@/static/images/invest/alipay-icon.png"
mode="aspectFit"
/>
<image
v-if="Number(item.typedata) === 2"
v-if="Number(item.card_type) === 3"
class="w-45 h-45"
src="@/static/images/invest/wechat-icon.png"
mode="aspectFit"
/>
<view class="flex-1 ml-15">
<view class="text-16 font-bold">
{{ ['支付宝', '微信', '银行卡'][Number(item.typedata) - 1] }}
{{ ['银行卡', '支付宝', '微信'][Number(item.card_type) - 1] }}
</view>
<view class="mt-10 text-14 text-#889BC6">{{ item.banknum }}</view>
<view class="mt-10 text-14 text-#889BC6">{{ item.card_account }}</view>
</view>
<wd-icon v-if="isSelect" name="arrow-right" size="14px"></wd-icon>
</view>
@@ -63,7 +63,7 @@
</template>
<script setup lang="ts">
import { deleteBankCardAPI, getBankCardAPI } from '@/service'
import { deleteBankCardAPI, getBankCardListAPI } from '@/service'
import { showModal } from '@/utils'
import { onLoad } from '@dcloudio/uni-app'
@@ -94,20 +94,17 @@ const onAddType = () => {
const onDelete = async (item) => {
await showModal('确认删除?')
await deleteBankCardAPI({
id: item.id,
card_account: item.card_account,
})
await showModal('删除成功')
loadData()
}
const list = ref([])
const loadData = async () => {
list.value = (await getBankCardAPI({
limit: 1000,
page: 1,
}).then((res) => res.data)) as any
list.value = (await getBankCardListAPI().then((res) => res.data)) as any
}
const list = ref([])
onShow(async () => {
loadData()
})
+46 -30
View File
@@ -1,4 +1,4 @@
<route lang="json5">
<route lang="json5" type="page">
{
style: {
navigationStyle: 'custom',
@@ -24,16 +24,21 @@
class="flex items-center text-14 mt-15 text-#333 p-16 shadow-[0_0_10px_rgba(10,68,245,0.1)] rounded-10"
>
<input
v-model="form.money"
v-model="form.cash_money"
type="number"
placeholder="请输入提现金额"
class="text-14 text-#333 flex-1"
/>
<view class="text-12 text-#04A9F9" @click="form.money = userStore.userInfo.money">
<view
class="text-12 text-#04A9F9"
@click="form.cash_money = Number(userStore.userInfo.member_dividend ?? 0)"
>
全部
</view>
</view>
<view class="text-12 text-#889BC6 mt-15">当前余额{{ userStore.userInfo.money }}</view>
<view class="text-12 text-#889BC6 mt-15">
当前余额{{ userStore.userInfo.member_dividend }}
</view>
</view>
<view class="mt-50">
@@ -43,7 +48,7 @@
@click="onSelectPayType"
>
<view class="flex-1">
{{ typeName ? `${typeName}${currentBank?.banknum}` : '请选择收款方式' }}
{{ typeName ? `${typeName}${currentBank?.card_account}` : '请选择收款方式' }}
</view>
<wd-icon name="arrow-right" size="16px"></wd-icon>
</view>
@@ -53,8 +58,8 @@
<view class="text-14 text-#333">交易密码</view>
<view class="text-14 mt-15 text-#333 p-16 shadow-[0_0_10px_rgba(10,68,245,0.1)] rounded-10">
<input
v-model="form.tpassword"
type="password"
v-model="form.pay_password"
placeholder="请输入交易密码"
class="text-14 text-#333"
/>
@@ -65,7 +70,7 @@
class="bg-white fixed bottom-0 left-0 right-0 px-15 py-10 shadow-[0_0_10px_rgba(10,68,245,0.1)]"
>
<view class="flex items-center pb-safe">
<view class="text-gradient flex-1 text-14">到账CNY:{{ form.money ?? '0' }}</view>
<view class="text-gradient flex-1 text-14">到账CNY:{{ form.cash_money }}</view>
<view
class="btn-gradient text-center text-white rounded-full text-14 px-30 py-10"
@click="onSubmit"
@@ -79,33 +84,35 @@
<script setup lang="ts">
import NavBar from '@/components/NavBar.vue'
import { submitWithdrawalAPI } from '@/service'
import { applyWithdrawalAPI } from '@/service'
import { useUserStore } from '@/store'
import { showModal } from '@/utils'
import { ref } from 'vue'
const userStore = useUserStore()
const form = ref({
money: '',
bankid: '6',
tpassword: '',
cash_money: 0,
cash_remark: '',
bank_id: '',
pay_password: '',
})
const typeName = computed(() => {
return ['银行卡', '支付宝', '微信'][Number(unref(currentBank)?.card_type) - 1]
})
const currentBank = ref<any>(null)
const onWithdrawalDetail = () => {
uni.navigateTo({
url: '/pages-sub/withdrawal-detail/index',
})
}
const typeName = computed(() => {
return ['支付宝', '微信', '银行卡'][Number(unref(currentBank)?.typedata) - 1]
})
const currentBank = ref<any>(null)
const onSelectPayType = () => {
uni.$once('withdrawal-type', (data: any) => {
form.value.bankid = data.id
console.log(data)
form.value.bank_id = data.id
currentBank.value = data
})
uni.navigateTo({
@@ -114,28 +121,37 @@ const onSelectPayType = () => {
}
const onSubmit = async () => {
if (!form.value.money) {
return uni.showToast({
title: '请输入提现金额',
icon: 'none',
})
}
if (!form.value.bankid) {
if (!form.value.bank_id) {
return uni.showToast({
title: '请选择收款方式',
icon: 'none',
})
}
if (!form.value.tpassword) {
if (!form.value.bank_id) {
return uni.showToast({
title: '请选择收款方式',
icon: 'none',
})
}
if (!form.value.pay_password) {
return uni.showToast({
title: '请输入交易密码',
icon: 'none',
})
}
await showModal('确认提现?')
await submitWithdrawalAPI(form.value)
await showModal('提交成功')
onWithdrawalDetail()
if (!form.value.cash_money) {
return uni.showToast({
title: '请输入提现金额',
icon: 'none',
})
}
await applyWithdrawalAPI(form.value)
await showModal('申请成功')
userStore.loadUserInfo()
uni.redirectTo({
url: '/pages-sub/withdrawal-detail/index',
})
}
</script>
+44 -34
View File
@@ -29,11 +29,17 @@
"pagePath": "pages/index/index",
"text": "首页"
},
{
"iconPath": "static/tabbar/invest.png",
"selectedIconPath": "static/tabbar/investHL.png",
"pagePath": "pages/invest/index",
"text": "投资"
},
{
"iconPath": "static/tabbar/house.png",
"selectedIconPath": "static/tabbar/houseHL.png",
"pagePath": "pages/invite/index",
"text": "邀请好友"
"pagePath": "pages/house/index",
"text": "房屋"
},
{
"iconPath": "static/tabbar/personal.png",
@@ -61,21 +67,20 @@
},
"notNeedLogin": false
},
{
"path": "pages/house/index",
"type": "page",
"style": {
"navigationStyle": "custom",
"navigationBarTitleText": "房屋"
}
},
{
"path": "pages/invest/index",
"type": "page",
"style": {
"navigationStyle": "custom",
"navigationBarTitleText": "投资理财"
}
},
{
"path": "pages/invite/index",
"type": "page",
"style": {
"navigationBarTitleText": "邀请好友",
"navigationBarBackgroundColor": "#fff",
"navigationStyle": "custom"
"navigationBarTitleText": "投资"
}
},
{
@@ -117,14 +122,6 @@
"navigationBarBackgroundColor": "#fff"
}
},
{
"path": "convert/index",
"type": "page",
"style": {
"navigationStyle": "custom",
"navigationBarTitleText": "转换"
}
},
{
"path": "demo/index",
"type": "page",
@@ -136,8 +133,7 @@
"path": "introduction/index",
"type": "page",
"style": {
"navigationBarTitleText": "公司简介",
"navigationBarBackgroundColor": "#fff"
"navigationBarTitleText": "公司简介"
}
},
{
@@ -160,7 +156,7 @@
"path": "invest-result/index",
"type": "page",
"style": {
"navigationBarTitleText": "投资成功",
"navigationBarTitleText": "充值成功",
"navigationBarBackgroundColor": "#fff"
}
},
@@ -169,17 +165,7 @@
"type": "page",
"style": {
"navigationBarTitleText": "邀请好友",
"navigationBarBackgroundColor": "#fff",
"navigationStyle": "custom"
}
},
{
"path": "lottery/index",
"type": "page",
"style": {
"navigationBarTitleText": "转盘抽奖",
"navigationBarBackgroundColor": "#fff",
"navigationStyle": "custom"
"navigationBarBackgroundColor": "#fff"
}
},
{
@@ -199,6 +185,14 @@
"navigationStyle": "custom"
}
},
{
"path": "purchase-member/index",
"type": "page",
"style": {
"navigationBarTitleText": "购买会员",
"navigationBarBackgroundColor": "#fff"
}
},
{
"path": "realname/index",
"type": "page",
@@ -207,6 +201,22 @@
"navigationBarBackgroundColor": "#fff"
}
},
{
"path": "recharge/index",
"type": "page",
"style": {
"navigationStyle": "custom",
"navigationBarTitleText": "充值"
}
},
{
"path": "recharge-detail/index",
"type": "page",
"style": {
"navigationBarTitleText": "充值记录",
"navigationBarBackgroundColor": "#fff"
}
},
{
"path": "team/index",
"type": "page",
+112 -44
View File
@@ -1,4 +1,4 @@
<route lang="json5">
<route lang="json5" type="page">
{
style: {
navigationBarTitleText: '忘记密码',
@@ -15,12 +15,52 @@
<view class="flex items-center py-15">
<image class="w-24 h-24" src="@/static/images/login/phone.png" mode="aspectFit" />
<input
v-model="form.account"
@blur="handleBlur"
v-model="form.member_username"
type="text"
placeholder-class="text-#889BC6"
class="text-right flex-1 text-14"
placeholder="请输入手机号"
placeholder="请输入用户名"
/>
</view>
<view class="flex items-center py-15">
<image class="w-24 h-24" src="@/static/images/login/password.png" mode="aspectFit" />
<input
v-model="form.old_password"
placeholder-class="text-#889BC6"
type="password"
class="text-right flex-1 text-14"
placeholder="请输入旧登录密码"
/>
</view>
<view class="flex items-center py-15">
<image class="w-24 h-24" src="@/static/images/login/password.png" mode="aspectFit" />
<input
v-model="form.member_password"
placeholder-class="text-#889BC6"
type="password"
class="text-right flex-1 text-14"
placeholder="请再次新登录密码"
/>
</view>
<view class="flex items-center py-15">
<image class="w-24 h-24" src="@/static/images/login/password.png" mode="aspectFit" />
<input
v-model="form.confirm_member_password"
placeholder-class="text-#889BC6"
type="password"
class="text-right flex-1 text-14"
placeholder="请再次输入新登录密码"
/>
</view>
<!-- <view class="flex items-center py-15">
<image class="w-24 h-24" src="@/static/images/login/password.png" mode="aspectFit" />
<input
placeholder-class="text-#889BC6"
type="password"
class="text-right flex-1 text-14"
placeholder="请输入支付密码"
/>
</view>
<view class="flex items-center py-15">
@@ -28,25 +68,25 @@
<input
placeholder-class="text-#889BC6"
type="password"
v-model="form.newpassword"
class="text-right flex-1 text-14"
placeholder="请输入新密码"
placeholder="请再次输入支付密码"
/>
</view>
<view class="flex items-center py-15" v-if="form.nosuth">
<image class="w-24 h-24" src="@/static/images/login/invite.png" mode="aspectFit" />
</view> -->
<view class="flex items-center py-15">
<image class="w-24 h-24" src="@/static/images/login/message.png" mode="aspectFit" />
<input
v-model="form.cardnum"
placeholder-class="text-#889BC6"
v-model="form.verify_code"
type="text"
placeholder-class="text-#889BC6"
class="text-right flex-1 text-14"
placeholder="请输入身份证号"
placeholder="请输入图形验证码"
/>
<image :src="codeUrl" class="ml-10 w-80 h-30" @click="handleGetCode" />
</view>
</view>
<view
class="mt-50 text-center py-12 rounded-full mx-15 text-15 text-white btn-gradient"
@click="handleSubmit"
@click="handleUpdatePassword"
>
确认
</view>
@@ -56,17 +96,17 @@
<script lang="ts" setup>
import NavBar from '@/components/NavBar.vue'
import { isLogged } from '@/interceptors/route'
import { editPasswordFirstAPI, editPasswordSecondAPI } from '@/service'
import { isLogged, loginRoute } from '@/interceptors/route'
import { getCodeAPI, updateUserAPI } from '@/service'
import { useUserStore } from '@/store/user'
import { showModal } from '@/utils'
const userStore = useUserStore()
const form = ref({
account: '',
newpassword: '',
cardnum: '',
nosuth: 0,
member_username: '',
member_password: '',
confirm_member_password: '',
verify_code: '',
old_password: '',
})
let redirect = '/'
@@ -74,38 +114,66 @@ onLoad((options) => {
redirect = options.redirect ?? '/'
})
async function handleBlur() {
const account = form.value.account
if (account) {
const { data } = await editPasswordFirstAPI({
account,
const { codeUrl, refreshCode: handleGetCode } = useCaptcha()
onLoad(async () => {
if (isLogged()) {
uni.reLaunch({
url: redirect,
})
form.value.nosuth = data?.nosuth ?? 0
}
}
const handleSubmit = async () => {
if (!form.value.account || !form.value.newpassword) {
})
const handleUpdatePassword = async () => {
if (!form.value.member_username) {
uni.showToast({
title: '请填写完整信息',
title: '请输入用户名',
icon: 'none',
})
return
}
if (form.value.nosuth) {
if (!form.value.cardnum) {
uni.showToast({
title: '请填写身份证号',
icon: 'none',
})
return
}
if (!form.value.old_password) {
uni.showToast({
title: '请输入旧登录密码',
icon: 'none',
})
return
}
await editPasswordSecondAPI(form.value)
await showModal('修改成功')
uni.reLaunch({
url: redirect,
if (!form.value.member_password) {
uni.showToast({
title: '请输入新登录密码',
icon: 'none',
})
return
}
if (form.value.member_password !== form.value.confirm_member_password) {
uni.showToast({
title: '两次输入的密码不一致',
icon: 'none',
})
return
}
if (!form.value.verify_code) {
uni.showToast({
title: '请输入图形验证码',
icon: 'none',
})
return
}
// userStore.setUserInfo({
// token: '123456',
// })
await updateUserAPI(form.value)
uni.showToast({
title: '修改密码成功',
icon: 'none',
})
uni.redirectTo({
url: loginRoute,
})
// uni.reLaunch({
// url: redirect,
// })
}
onLoad(() => {
if (isLogged()) {
@@ -120,7 +188,7 @@ onLoad(() => {
.login-container {
box-sizing: border-box;
min-height: 100vh;
padding-bottom: 50px;
padding-bottom: 200rpx;
background-image: url('@/static/images/login-bg.png');
background-repeat: no-repeat;
background-size: cover;
+78
View File
@@ -0,0 +1,78 @@
<!-- 使用 type="home" 属性设置首页其他页面不需要设置默认为page推荐使用json5更强大且允许注释 -->
<route lang="json5" type="page">
{
style: {
navigationStyle: 'custom',
navigationBarTitleText: '房屋',
},
}
</route>
<template>
<view class="house-page">
<NavBar />
<view class="p-15" v-for="cityItem in cityList" :key="cityItem.id">
<view class="text-16 pl-15">{{ cityItem.region }}</view>
<view class="mt-15 bg-white p-15 rounded-10 grid grid-cols-2 gap-15">
<view v-for="houseItem in cityItem.house_list" :key="houseItem.id">
<image class="w-150 h-170" :src="houseItem.house_image" mode="aspectFill" />
<view class="flex items-center justify-between py-10">
<view
class="text-14 bg-[linear-gradient(to_right,#3B81F3,#37E6EC)] text-transparent"
style="background-clip: text"
>
{{ houseItem.size }}
</view>
<view class="text-12 text-#999">认购点{{ houseItem.buy_price }}</view>
</view>
<view
class="text-12 text-center bg-[linear-gradient(to_right,#3B81F3,#37E6EC)] text-white py-8 rounded-full"
@click="handleClick(houseItem)"
>
领取
</view>
</view>
</view>
</view>
</view>
</template>
<script lang="ts" setup>
import NavBar from '@/components/NavBar.vue'
import { buyHouseAPI, getHouseListAPI } from '@/service'
import { useUserStore } from '@/store'
import { showModal } from '@/utils'
defineOptions({
name: 'Home',
})
const userStore = useUserStore()
const handleClick = async (item: any) => {
await showModal('确认领取?')
await buyHouseAPI({
house_id: item.id,
})
await userStore.loadUserInfo()
uni.showToast({
title: '领取成功',
icon: 'none',
})
}
const cityList = ref<any[]>([])
onMounted(async () => {
const res = await getHouseListAPI()
cityList.value = res.data.list
})
</script>
<style>
.house-page {
min-height: 100vh;
padding-bottom: 100rpx;
background-image: url('@/static/images/bg.png');
background-position: top;
background-size: cover;
}
</style>
+49 -92
View File
@@ -10,27 +10,24 @@
<template>
<view class="home-page">
<NavBar />
<image
class="mx-auto block w-345 h-170 mt-15 rounded-10 overflow-hidden"
src="@/static/images/home/main-bg.png"
mode="aspectFill"
/>
<view class="flex bg-#F5F9FF py-15 rounded-10 m-15 border-2 border-white border-solid">
<wd-swiper
v-if="bannerList.length"
class="w-345 bg-#ffffff30 mx-auto mt-15 rounded-10 overflow-hidden"
height="min(45.333vw, 272px)"
value-key="swipe_image"
:list="bannerList"
autoplay
@click="handleClick"
></wd-swiper>
<view class="flex bg-white py-15 rounded-10 m-15">
<view class="flex-1 flex flex-col items-center" @click="handleIntroduction">
<image class="w-30 h-30" src="@/static/images/home/nav-1.png" mode="aspectFill" />
<text class="mt-8 text-14 text-#333">简介</text>
</view>
<!-- <view class="flex-1 flex flex-col items-center" @click="handleInvite">
<view class="flex-1 flex flex-col items-center" @click="handleInvite">
<image class="w-30 h-30" src="@/static/images/home/nav-2.png" mode="aspectFill" />
<text class="mt-8 text-14 text-#333">抽奖转盘</text>
</view> -->
<view class="flex-1 flex flex-col items-center" @click="handleReward">
<image class="w-30 h-30" src="@/static/images/home/nav-2.png" mode="aspectFill" />
<text class="mt-8 text-14 text-#333">奖励制度</text>
</view>
<view class="flex-1 flex flex-col items-center" @click="handleDownload">
<image class="w-30 h-30" src="@/static/images/home/nav-2.png" mode="aspectFill" />
<text class="mt-8 text-14 text-#333">下载APP</text>
<text class="mt-8 text-14 text-#333">邀请好友</text>
</view>
<view class="flex-1 flex flex-col items-center" @click="handleOfficialCommunity">
<image class="w-30 h-30" src="@/static/images/home/nav-3.png" mode="aspectFill" />
@@ -38,89 +35,52 @@
</view>
</view>
<view class="flex bg-white py-8 px-15 rounded-10 m-15 items-center">
<view class="text-14 text-#333">系统公告</view>
<view class="flex-1">
<wd-notice-bar
color="#999999"
background-color="transparent"
:text="announcementList.map((item) => item.name)"
/>
</view>
</view>
<view class="bg-white py-15 px-15 rounded-10 m-15">
<view class="bg-white py-15 px-15 rounded-10 m-15" v-if="newsList.length">
<view class="text-14 text-#333">热点新闻</view>
<view
class="flex mt-15"
v-for="item in newsList"
:key="item.id"
@click="handleNewsDetail(item.id)"
v-for="(item, index) in newsList"
:key="item"
@click="handleNewsDetail(item)"
>
<image class="w-85 h-85 rounded-10" :src="item.image" mode="aspectFill" />
<view class="ml-15 flex-1 flex flex-col justify-between">
<view text-14>{{ item.name }}</view>
<view class="text-12 text-#999">{{ item.source }}</view>
</view>
<template v-if="index === 0">
<view>
<image class="w-323 h-160" :src="item.cover_image" mode="aspectFill" />
<view class="text-14 text-#000 mt-8">
{{ item.title }}
</view>
</view>
</template>
<template v-else>
<image class="w-85 h-85" :src="item.cover_image" mode="aspectFill" />
<view class="ml-10 flex-1 flex flex-col justify-between">
<view text-14>{{ item.title }}</view>
<view class="text-12 text-#999">{{ item.auther }}</view>
</view>
</template>
</view>
</view>
<wd-popup
v-model="showRealName"
custom-style="border-radius:0.2rem;"
:close-on-click-modal="false"
lockScroll
>
<image
class="w-300 h-416"
src="@/static/images/realname-popup.jpeg"
mode="widthFix"
@click="handleRealName"
/>
</wd-popup>
<wd-popup closable v-model="showReward" custom-style="border-radius:0.2rem;">
<image
class="w-300 h-416"
src="@/static/images/reward-bg.jpg"
mode="widthFix"
@click="showReward = false"
/>
</wd-popup>
</view>
</template>
<script lang="ts" setup>
import NavBar from '@/components/NavBar.vue'
import { downloadAppAPI, getIntroductionAPI, getRealNameAuthAPI } from '@/service'
import { showModal } from '@/utils'
import { useListPageRequest } from '@/hooks/useListPageRequest'
import { getBannerListAPI, getNewsListAPI } from '@/service'
defineOptions({
name: 'Home',
})
const { list: newsList } = useListPageRequest((params) =>
getIntroductionAPI({ type: 1, ...params }),
)
// 系统公告
const { list: announcementList } = useListPageRequest((params) =>
getIntroductionAPI({ type: 2, ...params }),
)
const handleIntroduction = () => {
uni.navigateTo({
url: '/pages-sub/introduction/index',
})
}
const handleNewsDetail = (id: number) => {
uni.navigateTo({
url: `/pages-sub/news-detail/index?id=${id}`,
})
}
const handleInvite = () => {
uni.navigateTo({
url: '/pages/invite/index',
url: '/pages-sub/invite/index',
})
}
@@ -130,35 +90,32 @@ const handleOfficialCommunity = () => {
})
}
const handleDownload = () => {
downloadAppAPI()
}
const showReward = ref(false)
const handleReward = () => {
showReward.value = true
const handleClick = (item) => {
console.log(item)
}
const showRealName = ref(false)
const handleRealName = () => {
const bannerList = ref<any[]>([])
const { list: newsList } = useListPageRequest(getNewsListAPI)
const handleNewsDetail = (item) => {
uni.navigateTo({
url: '/pages-sub/realname/index',
url: `/pages-sub/news-detail/index?id=${item.id}`,
})
showRealName.value = false
}
onShow(async () => {
const res = await getRealNameAuthAPI()
if (!res.data) {
uni.hideTabBar()
showRealName.value = true
}
onLoad(async () => {
getBannerListAPI().then((res) => {
bannerList.value = res.data.map((item) => ({
...item,
type: 'image',
}))
})
})
</script>
<style>
.home-page {
min-height: 100vh;
padding-bottom: 50px;
padding-bottom: 100rpx;
background-image: url('@/static/images/bg.png');
background-position: top;
background-size: cover;
+32 -44
View File
@@ -1,9 +1,9 @@
<!-- 使用 type="home" 属性设置首页其他页面不需要设置默认为page推荐使用json5更强大且允许注释 -->
<route lang="json5">
<route lang="json5" type="page">
{
style: {
navigationStyle: 'custom',
navigationBarTitleText: '投资理财',
navigationBarTitleText: '投资',
},
}
</route>
@@ -14,40 +14,44 @@
<view @click="onGoInvestDetail" class="text-14 text-#486CCF">投资明细</view>
</template>
</NavBar>
<view class="flex mt-30 flex-col mx-15 rounded-10 px-40 py-32 main-content">
<view class="text-14 text-#6784C7">我的投资金</view>
<view class="text-35 leading-35 mt-10 text-#BE7143 font-bold">
{{ userStore.userInfo?.money }}
</view>
<view
class="flex shadow-[0_1px_4px_rgba(255,255,255,0.8)] mt-100 pt-12 pb-8 flex-col mx-15 rounded-10 items-center bg-[linear-gradient(180deg,rgba(212,232,255,1),rgba(229,239,249,0.8))]"
>
<view class="text-15 text-#486CCF">我的投资金</view>
<view class="text-30 text-#333 font-bold">{{ userStore.userInfo.member_investment }}</view>
</view>
<view class="mt-100">
<view class="mt-60">
<view
v-for="item in investmentList"
v-for="item in fundList"
:key="item.id"
class="invest-item relative flex flex-col items-center pt-15"
>
<view class="text-15 text-#3F88F6">{{ item.name }}</view>
<view class="text-15 text-#3F88F6">{{ item.fund_name }}</view>
<view class="flex w-full mt-15">
<view class="flex-1 text-center">
<view class="text-22 text-#333 font-bold">{{ item.money }}</view>
<view class="text-12 mt-4 text-blue-red">投资金额</view>
<view class="text-22 text-#333 font-bold">{{ item.buy_price }}</view>
<view class="text-12 mt-4 text-#3B81F3">投资金额</view>
</view>
<view class="flex-1 text-center">
<view class="text-22 text-#FF3B30 font-bold">{{ item.dividend }}</view>
<view class="text-12 mt-4 text-blue-red">每日分红</view>
<view class="text-22 text-#FF3B30 font-bold">{{ item.day_income }}</view>
<view class="text-12 mt-4 text-#3B81F3">每日分红</view>
</view>
</view>
<view
class="text-center px-50 absolute bottom-0 left-0 text-12 text-#fff rounded-full py-8 bg-blue-red"
class="text-center px-50 absolute bottom-0 left-0 text-12 text-#fff rounded-full py-8 bg-[linear-gradient(80deg,rgba(59,129,243,1),rgba(55,230,236,1))]"
@click="onInvest(item)"
>
立即投资
</view>
<view
class="text-center px-16 absolute bottom-13 right-33 text-12 text-#fff rounded-br-10 rounded-tl-10 py-4 bg-blue-red"
class="text-center px-16 absolute bottom-13 right-33 text-12 text-#fff rounded-br-10 rounded-tl-10 py-4 bg-[linear-gradient(80deg,rgba(59,129,243,1),rgba(55,230,236,1))]"
:class="{
'!bg-[linear-gradient(80deg,#E2AF74,#FFCC40)]': item.is_ai,
'!text-#9B6F33': item.is_ai,
}"
>
{{ item.label }}
{{ item.is_ai ? '会员产品' : '新手体验' }}
</view>
</view>
</view>
@@ -60,13 +64,16 @@ import NavBar from '@/components/NavBar.vue'
import AlipayIcon from '@/static/images/invest/alipay-icon.png'
import WechatIcon from '@/static/images/invest/wechat-icon.png'
import UnionpayIcon from '@/static/images/invest/unionpay-icon.png'
import { getInvestmentListAPI, submitInvestAPI } from '@/service'
import { buyFundAPI, getFundListAPI } from '@/service'
import { useUserStore } from '@/store'
import { mergeStep, showModal } from '@/utils'
defineOptions({
name: 'Home',
})
const userStore = useUserStore()
const showPayType = ref(false)
const panels = ref([
{
@@ -83,10 +90,6 @@ const panels = ref([
},
])
const { list: investmentList } = useListPageRequest(getInvestmentListAPI)
const userStore = useUserStore()
const onGoInvestDetail = () => {
uni.navigateTo({
url: '/pages-sub/invest-detail/index',
@@ -100,9 +103,8 @@ const onSelectPayType = ({ item, index }: any) => {
const onInvest = mergeStep(async (item: any) => {
await showModal('确认投资?')
await submitInvestAPI({
investid: item.id,
type: 3,
await buyFundAPI({
fund_id: item.id,
})
await userStore.loadUserInfo()
uni.showToast({
@@ -110,40 +112,26 @@ const onInvest = mergeStep(async (item: any) => {
icon: 'none',
})
})
const { list: fundList } = useListPageRequest(getFundListAPI)
</script>
<style>
.invest-page {
min-height: 100vh;
padding-bottom: 100px;
background-color: #ebbf92;
background-image: url('@/static/images/invest/bg.png');
background-repeat: no-repeat;
background-attachment: fixed;
background-position: top -40px center;
background-position: top -80rpx center;
background-size: 100%;
}
.invest-item {
width: 345px;
height: 176px;
margin: 0 auto 15px;
width: 690rpx;
height: 352rpx;
margin: 0 auto 30rpx;
background-image: url('@/static/images/invest/item-bg.png');
background-repeat: no-repeat;
background-position: center;
background-size: 100%;
}
.main-content {
background-image: url('@/static/images/invest/main-bg.png');
background-repeat: no-repeat;
background-position: center;
background-size: 100% 100%;
}
.bg-blue-red {
background-image: linear-gradient(90.02deg, #8bb9ff 0.02%, #be4343 100.27%);
}
.text-blue-red {
background-image: linear-gradient(90.02deg, #8bb9ff 0.02%, #be4343 100.27%);
background-clip: text;
-webkit-text-fill-color: transparent;
}
</style>
-77
View File
@@ -1,77 +0,0 @@
<route lang="json5">
{
style: {
navigationBarTitleText: '邀请好友',
navigationBarBackgroundColor: '#fff',
navigationStyle: 'custom',
},
}
</route>
<script setup lang="ts">
import NavBar from '@/components/NavBar.vue'
import VueQrcode from '@chenfengyuan/vue-qrcode'
import { useUserStore } from '@/store'
const userStore = useUserStore()
const qrcodeValue =
location.origin + '/#/pages/register/index?invite=' + userStore.userInfo?.invitecode
const onCopy = (code: string) => {
uni.setClipboardData({
data: code,
})
}
const onLottery = () => {
uni.navigateTo({
url: '/pages-sub/lottery/index',
})
}
</script>
<template>
<view class="pb-100 min-h-screen invite-page">
<NavBar />
<view class="flex justify-center mt-80">
<view class="text-white btn-gradient rounded-full px-30 py-10 text-14">邀请好友</view>
<!-- <view class="ml-15 bg-white rounded-full px-30 py-10 text-14" @click="onLottery">
<text class="text-gradient">幸运大转盘</text>
</view> -->
</view>
<view class="flex flex-col items-center mt-180">
<view
class="flex items-center text-16 text-#333 bg-[rgba(255,255,255,0.8)] rounded-full px-15 py-4 text-12 mt-8"
>
<view>
邀请码
<text class="font-bold">{{ userStore.userInfo?.invitecode }}</text>
</view>
<view
class="btn-gradient text-white rounded-full px-15 py-4 text-12 ml-10"
@click="onCopy('99999')"
>
复制
</view>
</view>
<view class="mt-15 rounded-10 overflow-hidden flex">
<VueQrcode :value="qrcodeValue" :options="{ size: 200 }" />
</view>
<view
class="btn-gradient text-white rounded-full text-14 px-30 py-8 mt-30"
@click="onCopy(qrcodeValue)"
>
复制邀请链接
</view>
</view>
</view>
</template>
<style lang="scss" scoped>
.invite-page {
background-image: url('@/static/images/page-sub/invite-bg.png');
background-repeat: no-repeat;
background-position: top;
background-size: 100%;
}
</style>
+19 -18
View File
@@ -1,4 +1,4 @@
<route lang="json5">
<route lang="json5" type="page">
{
style: {
navigationBarTitleText: '登录',
@@ -10,7 +10,10 @@
<template>
<view class="login-container relative">
<NavBar />
<view class="mt-44 text-28 pl-32 text-gradient" style="-webkit-background-clip: text">
<view
class="mt-44 text-28 pl-32 bg-[linear-gradient(180deg,#04A9F9,#23C0CF)] text-transparent"
style="-webkit-background-clip: text"
>
登录
</view>
<view class="pt-45">
@@ -19,10 +22,10 @@
<image class="w-24 h-24" src="@/static/images/login/phone.png" mode="aspectFit" />
<input
type="text"
v-model="formData.account"
v-model="formData.member_username"
placeholder-class="text-#889BC6"
class="text-right flex-1 text-14"
placeholder="请输入手机号"
placeholder="请输入用户名"
/>
</view>
<view class="flex items-center py-15">
@@ -30,15 +33,15 @@
<input
placeholder-class="text-#889BC6"
type="password"
v-model="formData.password"
v-model="formData.member_password"
class="text-right flex-1 text-14"
placeholder="请输入登录密码"
/>
</view>
</view>
<view class="ml-auto mr-0 w-fit text-gradient text-14 p-15" @click="handleEditPassword">
<!-- <view class="ml-auto mr-0 w-fit text-#04A9F9 text-14 p-15" @click="handleEditPassword">
忘记密码
</view>
</view> -->
<view
class="mt-30 text-center py-12 rounded-full mx-15 text-15 text-white btn-gradient"
@click="handleLogin"
@@ -47,7 +50,7 @@
</view>
<view class="mt-30 text-center text-14 text-#999">
没有账号
<text class="text-gradient" @click="handleRegister">立即注册</text>
<text class="text-#04A9F9" @click="handleRegister">立即注册</text>
</view>
</view>
<view class="absolute bottom-15 left-50% -translate-x-50% text-#999 text-14">V1.0.0</view>
@@ -57,13 +60,13 @@
<script lang="ts" setup>
import NavBar from '@/components/NavBar.vue'
import { isLogged } from '@/interceptors/route'
import { loginUserAPI } from '@/service'
import { loginAPI } from '@/service'
import { useUserStore } from '@/store/user'
const userStore = useUserStore()
const formData = ref({
account: '',
password: '',
member_username: '',
member_password: '',
})
let redirect = '/'
@@ -72,17 +75,15 @@ onLoad((options) => {
})
const handleLogin = async () => {
if (!formData.value.account || !formData.value.password) {
if (!formData.value.member_username || !formData.value.member_password) {
return uni.showToast({
title: '请输入手机号和密码',
title: '请输入用户名和密码',
icon: 'none',
})
}
const {
data: {
userinfo: { token },
},
} = await loginUserAPI(formData.value)
data: { token },
} = await loginAPI(formData.value)
userStore.setToken(token)
uni.reLaunch({
url: redirect,
@@ -114,7 +115,7 @@ onLoad(() => {
.login-container {
box-sizing: border-box;
min-height: 100vh;
padding-bottom: 50px;
padding-bottom: 200rpx;
background-image: url('@/static/images/login-bg.png');
background-repeat: no-repeat;
background-size: cover;
+1 -1
View File
@@ -1,4 +1,4 @@
<route lang="json5">
<route lang="json5" type="page">
{
layout: 'demo',
style: {
+75 -54
View File
@@ -1,4 +1,4 @@
<route lang="json5">
<route lang="json5" type="page">
{
style: {
navigationStyle: 'custom',
@@ -11,63 +11,79 @@
<view class="my-page">
<NavBar />
<view class="flex flex-col items-center justify-center mt-30">
<Avatar class="w-80 h-80 mx-auto" :src="getImageUrl(userStore.userInfo.avatar)" />
<view class="text-16 mt-10">{{ userStore.userInfo.nickname }}</view>
<view class="text-12 mt-8">账号{{ userStore.userInfo.username }}</view>
<Avatar
class="w-80 h-80 mx-auto"
:src="userStore.userInfo?.member_portrait"
@click="uploadAvatar"
/>
<view class="text-16 mt-10">{{ userStore.userInfo?.member_username }}</view>
<!-- <view class="text-12 mt-8">账号{{ userStore.userInfo?.member_username }}</view> -->
</view>
<view class="flex justify-center text-center mt-30 items-center px-30">
<view class="flex-1">
<view class="text-30 font-bold">{{ Number(userStore.userInfo.money) }}</view>
<view class="text-14 mt-10 text-#3B81F3">我的余额</view>
<view class="flex justify-center text-center mt-15">
<view class="">
<view class="text-30 font-bold">{{ userStore.userInfo?.member_dividend }}</view>
<view class="text-14 mt-10 text-#3B81F3">我的分红</view>
</view>
<view class="w-50 h-50 relative">
<image
class="w-100 h-100 absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2"
src="@/static/images/my/translate.png"
mode="aspectFit"
/>
</view>
<view class="flex-1">
<view class="text-30 font-bold">{{ Number(userStore.userInfo.score) }}</view>
<view class="text-14 mt-10 text-#3B81F3">我的股数</view>
<view class="ml-30">
<view class="text-30 font-bold">{{ userStore.userInfo?.member_currency }}</view>
<view class="text-14 mt-10 text-#3B81F3">数字人民币</view>
</view>
</view>
<view class="flex px-15 mt-30">
<view class="flex px-15 mt-15">
<view
class="flex py-30 justify-center items-center rounded-tl-10 rounded-br-10 flex-1 bg-[linear-gradient(180deg,#D9EBFF,#9EDAFF)] border-1 border-#5FAEFF80 border-solid"
@click="handleWithdrawal"
>
<image class="w-40 h-40" src="@/static/images/my/withdrawal.png" mode="aspectFit" />
<view class="text-white text-14 px-15 py-5 ml-15 rounded-full btn-gradient">提现</view>
<view
class="text-white text-14 px-15 py-5 ml-15 rounded-full bg-[linear-gradient(45deg,#3B81F3_0%,#37E6EC_100%)]"
>
提现
</view>
</view>
<view
<!-- <view
class="ml-10 flex py-30 justify-center items-center rounded-tl-10 rounded-br-10 flex-1 bg-[linear-gradient(180deg,#D9EBFF,#9EDAFF)] border-1 border-#5FAEFF80 border-solid"
@click="handleConvert"
@click="handleWithdrawalRecord"
>
<image class="w-40 h-40" src="@/static/images/my/top-up.png" mode="aspectFit" />
<view class="text-white text-14 px-15 py-5 ml-15 rounded-full btn-gradient">转换</view>
<view
class="text-white text-14 px-15 py-5 ml-15 rounded-full bg-[linear-gradient(45deg,#3B81F3_0%,#37E6EC_100%)]"
>
提现记录
</view>
</view> -->
<view
class="ml-10 flex py-30 justify-center items-center rounded-tl-10 rounded-br-10 flex-1 bg-[linear-gradient(180deg,#D9EBFF,#9EDAFF)] border-1 border-#5FAEFF80 border-solid"
@click="handleRecharge"
>
<image class="w-40 h-40" src="@/static/images/my/top-up.png" mode="aspectFit" />
<view
class="text-white text-14 px-15 py-5 ml-15 rounded-full bg-[linear-gradient(45deg,#3B81F3_0%,#37E6EC_100%)]"
>
充值
</view>
</view>
</view>
<image
class="w-330 h-123 mx-auto mt-15 block"
src="@/static/images/my/recommend.png"
mode="widthFix"
@click="handleInvite"
mode="aspectFill"
@click="handlePurchaseMember"
/>
<view class="mt-15 grid grid-cols-2 gap-10 p-15">
<view
@click="handleTeam"
class="flex items-center justify-center rounded-tl-10 rounded-br-10 bg-[linear-gradient(45deg,#EFF7FF,#D1E8FF)] p-15 border border-#BEDCFF border-solid"
class="flex justify-center rounded-tl-10 rounded-br-10 bg-[linear-gradient(45deg,#EFF7FF,#D1E8FF)] p-15 border border-#BEDCFF border-solid"
>
<image class="w-24 h-24" src="@/static/images/my/team.png" mode="aspectFit" />
<view class="text-14 text-#333 ml-10">我的邀请</view>
</view>
<view
@click="handleAsset"
class="flex items-center justify-center rounded-tl-10 rounded-br-10 bg-[linear-gradient(45deg,#EFF7FF,#D1E8FF)] p-15 border border-#BEDCFF border-solid"
class="flex justify-center rounded-tl-10 rounded-br-10 bg-[linear-gradient(45deg,#EFF7FF,#D1E8FF)] p-15 border border-#BEDCFF border-solid"
>
<image class="w-24 h-24" src="@/static/images/my/house.png" mode="aspectFit" />
<view class="text-14 text-#333 ml-10">我的资产</view>
@@ -75,29 +91,22 @@
<view
@click="handleRealName"
class="flex items-center justify-center rounded-tl-10 rounded-br-10 bg-[linear-gradient(45deg,#EFF7FF,#D1E8FF)] p-15 border border-#BEDCFF border-solid"
class="flex justify-center rounded-tl-10 rounded-br-10 bg-[linear-gradient(45deg,#EFF7FF,#D1E8FF)] p-15 border border-#BEDCFF border-solid"
>
<image class="w-24 h-24" src="@/static/images/my/realname.png" mode="aspectFit" />
<view class="text-14 text-#333 ml-10">实名认证</view>
</view>
<view
@click="handleBankCard"
class="flex items-center justify-center rounded-tl-10 rounded-br-10 bg-[linear-gradient(45deg,#EFF7FF,#D1E8FF)] p-15 border border-#BEDCFF border-solid"
class="flex justify-center rounded-tl-10 rounded-br-10 bg-[linear-gradient(45deg,#EFF7FF,#D1E8FF)] p-15 border border-#BEDCFF border-solid"
>
<image class="w-24 h-24" src="@/static/images/my/card.png" mode="aspectFit" />
<image class="w-24 h-24" src="@/static/images/my/kefu.png" mode="aspectFit" />
<view class="text-14 text-#333 ml-10">我的银行卡</view>
</view>
<view
@click="downloadAppAPI"
class="flex items-center justify-center rounded-tl-10 rounded-br-10 bg-[linear-gradient(45deg,#EFF7FF,#D1E8FF)] p-15 border border-#BEDCFF border-solid"
>
<image class="w-24 h-24" src="@/static/images/my/download.png" mode="aspectFit" />
<view class="text-14 text-#333 ml-10">下载APP</view>
</view>
</view>
<view
class="mt-50 mx-auto w-294 btn-gradient rounded-full text-center text-14 text-white py-15 mt-15"
class="mt-50 mx-auto w-294 bg-[linear-gradient(45deg,#3B81F3,#37E6EC)] rounded-full text-center text-14 text-white py-15 mt-15"
@click="handleLogout"
>
退出登录
@@ -109,29 +118,28 @@
import Avatar from '@/components/Avatar.vue'
import NavBar from '@/components/NavBar.vue'
import { loginRoute } from '@/interceptors/route'
import { downloadAppAPI } from '@/service'
import { logoutAPI, updateUserAPI } from '@/service'
import { useUserStore } from '@/store/user'
import { getImageUrl, showModal } from '@/utils'
const userStore = useUserStore()
const handleLogout = () => {
const handleLogout = async () => {
// logoutAPI()
userStore.logout()
uni.reLaunch({
url: loginRoute,
})
}
const handleWithdrawalDetail = () => {
const handleRecharge = () => {
uni.navigateTo({
url: '/pages-sub/withdrawal-detail/index',
url: '/pages-sub/recharge/index',
})
}
const handleWithdrawal = () => {
showModal('1月26号开放提现')
// uni.navigateTo({
// url: '/pages-sub/withdrawal/index',
// })
uni.navigateTo({
url: '/pages-sub/withdrawal/index',
})
}
const handleTeam = () => {
@@ -158,24 +166,37 @@ const handleBankCard = () => {
})
}
const handleInvite = () => {
uni.switchTab({
url: '/pages/invite/index',
const handlePurchaseMember = () => {
uni.navigateTo({
url: '/pages-sub/purchase-member/index',
})
}
const handleConvert = () => {
const handleWithdrawalRecord = () => {
uni.navigateTo({
url: '/pages-sub/convert/index',
url: '/pages-sub/withdrawal-detail/index',
})
}
const { data, run } = useUpload<any>()
const uploadAvatar = () => {
run()
}
watch(data, async (newVal) => {
const path = JSON.parse(newVal)?.data?.path
await updateUserAPI({
member_portrait: path,
})
userStore.loadUserInfo()
})
</script>
<style lang="scss" scoped>
.my-page {
min-height: 100vh;
padding-bottom: 50px;
background-image: url('@/static/images/my/bg.jpg');
padding-bottom: 100rpx;
background-image: url('@/static/images/bg.png');
background-position: top;
background-size: cover;
}
+117 -98
View File
@@ -7,94 +7,6 @@
notNeedLogin: false,
}
</route>
<script lang="ts" setup>
import NavBar from '@/components/NavBar.vue'
import { isLogged } from '@/interceptors/route'
import { registerUserAPI } from '@/service'
import { useUserStore } from '@/store/user'
import { mergeStep } from '@/utils'
const userStore = useUserStore()
const form = ref({
username: '',
// member_nickname: '',
password: '',
retpassword: '',
invitecode: '',
tpassword: '',
rettpassword: '',
})
let redirect = '/'
onLoad((options) => {
redirect = options.redirect ?? '/'
form.value.invitecode = options.invitecode ?? ''
})
const handleRegister = mergeStep(async () => {
if (!/^\d{11}$/.test(form.value.username)) {
uni.showToast({
title: '请输入正确手机号(11位)',
icon: 'none',
})
return
}
if (!form.value.password) {
uni.showToast({
title: '请输入登录密码',
icon: 'none',
})
return
}
if (form.value.password !== form.value.retpassword) {
uni.showToast({
title: '两次输入的密码不一致',
icon: 'none',
})
return
}
if (!form.value.tpassword) {
uni.showToast({
title: '请输入支付密码',
icon: 'none',
})
return
}
if (form.value.tpassword !== form.value.rettpassword) {
uni.showToast({
title: '两次输入的支付密码不一致',
icon: 'none',
})
return
}
// if (!form.value.invitecode) {
// uni.showToast({
// title: '请输入邀请码',
// icon: 'none',
// })
// return
// }
const {
data: {
userinfo: { token },
},
} = await registerUserAPI(form.value)
userStore.setToken(token)
uni.reLaunch({
url: redirect,
})
})
onLoad(async (options) => {
if (isLogged()) {
uni.reLaunch({
url: redirect,
})
}
form.value.invitecode = options.invite ?? ''
})
</script>
<template>
<view class="login-container relative">
<NavBar />
@@ -103,18 +15,17 @@ onLoad(async (options) => {
<view class="flex items-center py-15">
<image class="w-24 h-24" src="@/static/images/login/phone.png" mode="aspectFit" />
<input
v-model="form.username"
type="number"
maxlength="11"
v-model="form.member_username"
type="text"
placeholder-class="text-#889BC6"
class="text-right flex-1 text-14"
placeholder="请输入手机号"
placeholder="请输入用户名"
/>
</view>
<view class="flex items-center py-15">
<image class="w-24 h-24" src="@/static/images/login/password.png" mode="aspectFit" />
<input
v-model="form.password"
v-model="form.member_password"
placeholder-class="text-#889BC6"
type="password"
class="text-right flex-1 text-14"
@@ -124,7 +35,7 @@ onLoad(async (options) => {
<view class="flex items-center py-15">
<image class="w-24 h-24" src="@/static/images/login/password.png" mode="aspectFit" />
<input
v-model="form.retpassword"
v-model="form.confirm_member_password"
placeholder-class="text-#889BC6"
type="password"
class="text-right flex-1 text-14"
@@ -134,7 +45,7 @@ onLoad(async (options) => {
<view class="flex items-center py-15">
<image class="w-24 h-24" src="@/static/images/login/password.png" mode="aspectFit" />
<input
v-model="form.tpassword"
v-model="form.pay_password"
placeholder-class="text-#889BC6"
type="password"
class="text-right flex-1 text-14"
@@ -144,7 +55,7 @@ onLoad(async (options) => {
<view class="flex items-center py-15">
<image class="w-24 h-24" src="@/static/images/login/password.png" mode="aspectFit" />
<input
v-model="form.rettpassword"
v-model="form.confirm_pay_password"
placeholder-class="text-#889BC6"
type="password"
class="text-right flex-1 text-14"
@@ -154,13 +65,24 @@ onLoad(async (options) => {
<view class="flex items-center py-15">
<image class="w-24 h-24" src="@/static/images/login/invite.png" mode="aspectFit" />
<input
v-model="form.invitecode"
v-model="form.invitation_code"
placeholder-class="text-#889BC6"
type="text"
class="text-right flex-1 text-14"
placeholder="请输入邀请码"
/>
</view>
<view class="flex items-center py-15">
<image class="w-24 h-24" src="@/static/images/login/message.png" mode="aspectFit" />
<input
v-model="form.verify_code"
type="text"
placeholder-class="text-#889BC6"
class="text-right flex-1 text-14"
placeholder="请输入图形验证码"
/>
<image :src="codeUrl" class="ml-10 w-80 h-30" @click="handleGetCode" />
</view>
</view>
<view
class="mt-50 text-center py-12 rounded-full mx-15 text-15 text-white btn-gradient"
@@ -172,11 +94,108 @@ onLoad(async (options) => {
</view>
</template>
<script lang="ts" setup>
import NavBar from '@/components/NavBar.vue'
import { isLogged } from '@/interceptors/route'
import { registerAPI } from '@/service'
import { useUserStore } from '@/store/user'
import { mergeStep } from '@/utils'
const userStore = useUserStore()
const form = ref({
member_username: '',
// member_nickname: '',
member_password: '',
confirm_member_password: '',
verify_code: '',
invitation_code: '',
pay_password: '',
confirm_pay_password: '',
})
let redirect = '/'
onLoad((options) => {
redirect = options.redirect ?? '/'
form.value.invitation_code = options.invitation_code ?? ''
})
const handleRegister = mergeStep(async () => {
if (!form.value.member_username) {
uni.showToast({
title: '请输入用户名',
icon: 'none',
})
return
}
if (!form.value.verify_code) {
uni.showToast({
title: '请输入图形验证码',
icon: 'none',
})
return
}
if (!form.value.member_password) {
uni.showToast({
title: '请输入登录密码',
icon: 'none',
})
return
}
if (form.value.member_password !== form.value.confirm_member_password) {
uni.showToast({
title: '两次输入的密码不一致',
icon: 'none',
})
return
}
if (!form.value.pay_password) {
uni.showToast({
title: '请输入支付密码',
icon: 'none',
})
return
}
if (form.value.pay_password !== form.value.confirm_pay_password) {
uni.showToast({
title: '两次输入的支付密码不一致',
icon: 'none',
})
return
}
// if (!form.value.invitation_code) {
// uni.showToast({
// title: '请输入邀请码',
// icon: 'none',
// })
// return
// }
const {
data: { token },
} = await registerAPI(form.value).catch(() => {
handleGetCode()
throw new Error('注册失败')
})
userStore.setToken(token)
uni.reLaunch({
url: redirect,
})
})
const { codeUrl, refreshCode: handleGetCode } = useCaptcha()
onLoad(async (options) => {
if (isLogged()) {
uni.reLaunch({
url: redirect,
})
}
form.value.invitation_code = options.invite ?? ''
})
</script>
<style lang="scss">
.login-container {
box-sizing: border-box;
min-height: 100vh;
padding-bottom: 50px;
padding-bottom: 200rpx;
background-image: url('@/static/images/login-bg.png');
background-repeat: no-repeat;
background-size: cover;
+127 -180
View File
@@ -1,187 +1,134 @@
import { http } from '@/utils/http'
// 注册用户
export const registerUserAPI = (data) =>
http({
url: '/api/user/register',
method: 'POST',
data,
})
// 登录
export const loginUserAPI = (data) =>
http({
url: '/api/user/login',
method: 'POST',
data,
})
// 获取用户信息
export const getUserInfoAPI = () =>
http({
url: '/api/user/index',
method: 'GET',
})
// 退出登录
export const logoutUserAPI = () =>
http({
url: '/api/user/logout',
method: 'POST',
})
// 简介、公告、新闻
export const getIntroductionAPI = (data) =>
http({
url: '/api/index/articlelist',
method: 'POST',
data,
})
// 新闻详情
export const getIntroductionDetailAPI = (data) =>
http({
url: '/api/index/articledetails',
method: 'POST',
data,
})
// 投资理财列表
export const getInvestmentListAPI = (data) =>
http({
url: '/api/index/investlist',
method: 'POST',
data,
})
// 提交投资
export const submitInvestAPI = (data) =>
http({
url: '/api/user/submitinvest',
method: 'POST',
data,
})
// 获取投资记录
export const getInvestmentRecordAPI = (data) =>
http({
url: '/api/user/myinvestlist',
method: 'POST',
data,
})
// 查询实名认证
export const getRealNameAuthAPI = () =>
http({
url: '/api/user/finduserauth',
method: 'POST',
})
// 实名认证
export const realNameAuthAPI = (data) =>
http({
url: '/api/user/userauth',
method: 'POST',
data,
})
// 我的邀请
export const getMyTeamAPI = (data) =>
http({
url: '/api/user/inviteelist',
method: 'POST',
data,
})
// 我的资产
export const getMyAssetAPI = (data) =>
http({
url: '/api/user/myassets',
method: 'POST',
data,
})
// 股数转换
export const convertScoreAPI = (data) =>
http({
url: '/api/user/conversion',
method: 'POST',
data,
})
// 添加银行卡
export const addBankCardAPI = (data) =>
http({
url: '/api/user/addbank',
method: 'POST',
data,
})
// 获取银行卡
export const getBankCardAPI = (data) =>
http({
url: '/api/user/banklist',
method: 'POST',
data,
})
// 删除银行卡
export const deleteBankCardAPI = (data) =>
http({
url: '/api/user/delbank',
method: 'POST',
data,
})
// 提交提现
export const submitWithdrawalAPI = (data) =>
http({
url: '/api/user/withdrawal',
method: 'POST',
data,
})
// 获取提现记录
export const getWithdrawalRecordAPI = (data) =>
http({
url: '/api/user/withdrawallist',
method: 'POST',
data,
})
// 下载APP
export const downloadAppAPI = () => {
location.href = 'https://r2.maldiveswallet.vip/app/maldiveswallet.apk'
/** 账号登录 */
export const loginAPI = (data) => {
return http.post<{ token: string }>('/api/v1/LoginUser', data)
}
// 修改密码第一步
export const editPasswordFirstAPI = (data) =>
http({
url: '/api/user/forgetpassone',
method: 'POST',
data,
hideErrorToast: true,
})
/** 修改密码 */
export const updateUserAPI = (data) => {
return http.post('/api/v1/UpgradeUser', data)
}
// 修改密码第二步
export const editPasswordSecondAPI = (data) =>
http({
url: '/api/user/forgetpasstwo',
method: 'POST',
data,
})
/** 注册账号 */
export const registerAPI = (data) => {
return http.post<{ token: string }>('/api/v1/RegisterUser', data)
}
/** 用户信息 */
export const getUserInfoAPI = () => {
return http.post<IUserInfo>('/api/v1/getUserInfo')
}
// 修改实名认证信息
export const editRealNameAuthAPI = (data) =>
http({
url: '/api/user/updateuserauth',
method: 'POST',
data,
})
/** 退出登录 */
export const logoutAPI = () => {
return http.post('/api/v1/Logiout')
}
// 获取客服信息
export const getCustomerServiceAPI = () =>
http({
url: '/api/index/kefu',
method: 'POST',
})
/** 实名认证 */
export const createAuthUser = (data) => {
return http.post('/api/v1/CreateAuthUser', data)
}
/** 轮播列表 */
export const getBannerListAPI = () => {
return http.post<any[]>('/api/v1/getSwipeList')
}
/** 新闻列表 */
export const getNewsListAPI = (data) => {
return http.post<any[]>('/api/v1/getNewsList', data)
}
/** 新闻详情 */
export const getNewsDetailAPI = (data) => {
return http.post<any>('/api/v1/getNewsDetail', data, data)
}
/** 公司简介 */
export const getCompanyInfoAPI = () => {
return http.post<any>('/api/v1/getCompanyProfile')
}
/** 基金列表 */
export const getFundListAPI = () => {
return http.post<any[]>('/api/v1/getFundList')
}
/** 购买基金 */
export const buyFundAPI = (data) => {
return http.post('/api/v1/buyFundOrder', data)
}
/** 购买基金订单列表 */
export const getBuyFundOrderListAPI = (data) => {
return http.post<any[]>('/api/v1/getFundOrderList', data)
}
/** 房屋列表 */
export const getHouseListAPI = () => {
return http.post<{ list: any[] }>('/api/v1/getHouseList')
}
/** 购买房屋 */
export const buyHouseAPI = (data) => {
return http.post('/api/v1/buyHouseOrder', data)
}
/** VIP列表 */
export const getVipListAPI = () => {
return http.post<{ list: any[] }>('/api/v1/getVipList')
}
/** 购买VIP */
export const buyVIPAPI = (data) => {
return http.post('/api/v1/buyFundOrder', data)
}
/** 我的团队 */
export const getMyTeamAPI = (data) => {
return http.post<{ list: any[] }>('/api/v1/getMyTeam', data)
}
/** 绑定收款卡号 */
export const bindBankCardAPI = (data) => {
return http.post('/api/v1/CreateCardUser', data)
}
/** 删除收款卡号 */
export const deleteBankCardAPI = (data) => {
return http.post('/api/v1/CannelUserCard', data)
}
/** 获取银行卡列表 */
export const getBankCardListAPI = () => {
return http.post('/api/v1/getCardList')
}
/** 申请提现 */
export const applyWithdrawalAPI = (data) => {
return http.post('/api/v1/CreateWithdrawal', data)
}
/** 提现记录 */
export const getWithdrawalRecordAPI = (data) => {
return http.post<{ list: any[] }>('/api/v1/WithdrawalOrder', data)
}
/** 余额明细 */
export const getBalanceRecordsAPI = (data) => {
return http.post<{ list: any[] }>('/api/v1/getBalanceRecords', data)
}
/** 系统充收款账号列表 */
export const getSystemRechargeAccountAPI = (data) => {
return http.post<{ list: any[] }>('/api/v1/getWalletList', data)
}
/** 充值 */
export const rechargeAPI = (data) => {
return http.post('/api/v1/CreateRechangeOrder', data)
}
/** 充值记录 */
export const getRechargeRecordAPI = (data) => {
return http.post<{ list: any[] }>('/api/v1/getRechangeOrder', data)
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 574 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 780 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 985 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 525 KiB

After

Width:  |  Height:  |  Size: 304 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 255 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 195 KiB

After

Width:  |  Height:  |  Size: 466 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 120 KiB

After

Width:  |  Height:  |  Size: 149 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 960 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 412 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

Some files were not shown because too many files have changed in this diff Show More