feat: 添加分销功能并优化订单和支付流程
此次提交主要实现了以下功能: 1. 添加了分销功能,包括分销员申请、佣金计算和分享功能。 2. 优化了订单和支付流程,增加了订单退款状态的处理。 3. 修改了发票申请逻辑,增加了用户发票信息检查。 4. 更新了商品展示页面,支持特殊套餐的展示和购买。 5. 修复了多个页面的样式问题和功能缺陷。 这些改动旨在提升用户体验,支持分销业务,并优化现有功能的稳定性和性能。
This commit is contained in:
parent
a93999c041
commit
0540292497
@ -27,3 +27,10 @@ export function getInvoiceApplicationDetail(id) {
|
||||
export function getUserInvoiceInfo(id) {
|
||||
return api.get(`/invoiceapplication/get?id=${id}`, {}, { login: false })
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断用户是否已经填写开发票所需信息
|
||||
*/
|
||||
export function checkUserInvoiceInfo() {
|
||||
return api.get(`/invoiceapplication/check-info`,{ login: false })
|
||||
}
|
||||
|
2
main.js
2
main.js
@ -5,6 +5,7 @@
|
||||
* @Description:
|
||||
*/
|
||||
import util from '@/utils'
|
||||
import shareConfig from '@/utils/share.js'
|
||||
|
||||
import App from './App'
|
||||
|
||||
@ -16,6 +17,7 @@ export function createApp() {
|
||||
const app = createSSRApp(App)
|
||||
app.use(util)
|
||||
app.use(createPinia())
|
||||
app.mixin(shareConfig)
|
||||
return {
|
||||
app,
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name" : "yshop-miniapp",
|
||||
"appid" : "__UNI__800DD11",
|
||||
"name" : "aiyushantp-miniapp",
|
||||
"appid" : "__UNI__6588C0E",
|
||||
"description" : "",
|
||||
"versionName" : "1.0.0",
|
||||
"versionCode" : 1,
|
||||
|
645
package-lock.json
generated
645
package-lock.json
generated
@ -10,6 +10,7 @@
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"@vant/area-data": "^1.5.0",
|
||||
"@vue/server-renderer": "^3.5.13",
|
||||
"add": "^2.0.6",
|
||||
"flyio": "^0.6.14",
|
||||
"jweixin-module": "^1.6.0",
|
||||
@ -25,7 +26,6 @@
|
||||
"resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz",
|
||||
"integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
@ -35,7 +35,6 @@
|
||||
"resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
|
||||
"integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
@ -45,7 +44,6 @@
|
||||
"resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.27.0.tgz",
|
||||
"integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@babel/types": "^7.27.0"
|
||||
},
|
||||
@ -61,7 +59,6 @@
|
||||
"resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.27.0.tgz",
|
||||
"integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@babel/helper-string-parser": "^7.25.9",
|
||||
"@babel/helper-validator-identifier": "^7.25.9"
|
||||
@ -100,7 +97,6 @@
|
||||
"resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.13.tgz",
|
||||
"integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@babel/parser": "^7.25.3",
|
||||
"@vue/shared": "3.5.13",
|
||||
@ -113,15 +109,13 @@
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz",
|
||||
"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
|
||||
"license": "MIT",
|
||||
"peer": true
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@vue/compiler-dom": {
|
||||
"version": "3.5.13",
|
||||
"resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz",
|
||||
"integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@vue/compiler-core": "3.5.13",
|
||||
"@vue/shared": "3.5.13"
|
||||
@ -157,7 +151,6 @@
|
||||
"resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz",
|
||||
"integrity": "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@vue/compiler-dom": "3.5.13",
|
||||
"@vue/shared": "3.5.13"
|
||||
@ -207,8 +200,6 @@
|
||||
"version": "3.5.13",
|
||||
"resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.13.tgz",
|
||||
"integrity": "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@vue/compiler-ssr": "3.5.13",
|
||||
"@vue/shared": "3.5.13"
|
||||
@ -346,7 +337,6 @@
|
||||
"resolved": "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz",
|
||||
"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
|
||||
"license": "BSD-2-Clause",
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=0.12"
|
||||
},
|
||||
@ -698,7 +688,6 @@
|
||||
"resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz",
|
||||
"integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
|
||||
"license": "BSD-3-Clause",
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
@ -881,20 +870,17 @@
|
||||
"@babel/helper-string-parser": {
|
||||
"version": "7.25.9",
|
||||
"resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz",
|
||||
"integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==",
|
||||
"peer": true
|
||||
"integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA=="
|
||||
},
|
||||
"@babel/helper-validator-identifier": {
|
||||
"version": "7.25.9",
|
||||
"resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
|
||||
"integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
|
||||
"peer": true
|
||||
"integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="
|
||||
},
|
||||
"@babel/parser": {
|
||||
"version": "7.27.0",
|
||||
"resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.27.0.tgz",
|
||||
"integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==",
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"@babel/types": "^7.27.0"
|
||||
}
|
||||
@ -903,7 +889,6 @@
|
||||
"version": "7.27.0",
|
||||
"resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.27.0.tgz",
|
||||
"integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==",
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"@babel/helper-string-parser": "^7.25.9",
|
||||
"@babel/helper-validator-identifier": "^7.25.9"
|
||||
@ -935,7 +920,6 @@
|
||||
"version": "3.5.13",
|
||||
"resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.13.tgz",
|
||||
"integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==",
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"@babel/parser": "^7.25.3",
|
||||
"@vue/shared": "3.5.13",
|
||||
@ -947,8 +931,7 @@
|
||||
"estree-walker": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz",
|
||||
"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
|
||||
"peer": true
|
||||
"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -956,7 +939,6 @@
|
||||
"version": "3.5.13",
|
||||
"resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz",
|
||||
"integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==",
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"@vue/compiler-core": "3.5.13",
|
||||
"@vue/shared": "3.5.13"
|
||||
@ -991,7 +973,6 @@
|
||||
"version": "3.5.13",
|
||||
"resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz",
|
||||
"integrity": "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==",
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"@vue/compiler-dom": "3.5.13",
|
||||
"@vue/shared": "3.5.13"
|
||||
@ -1037,7 +1018,6 @@
|
||||
"version": "3.5.13",
|
||||
"resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.13.tgz",
|
||||
"integrity": "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==",
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"@vue/compiler-ssr": "3.5.13",
|
||||
"@vue/shared": "3.5.13"
|
||||
@ -1149,8 +1129,7 @@
|
||||
"entities": {
|
||||
"version": "4.5.0",
|
||||
"resolved": "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz",
|
||||
"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
|
||||
"peer": true
|
||||
"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="
|
||||
},
|
||||
"extend": {
|
||||
"version": "3.0.2",
|
||||
@ -1392,8 +1371,7 @@
|
||||
"source-map-js": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz",
|
||||
"integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
|
||||
"peer": true
|
||||
"integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="
|
||||
},
|
||||
"sshpk": {
|
||||
"version": "1.17.0",
|
||||
@ -1506,11 +1484,11 @@
|
||||
"version": "file:",
|
||||
"requires": {
|
||||
"@vant/area-data": "^1.5.0",
|
||||
"@vue/server-renderer": "*",
|
||||
"add": "^2.0.6",
|
||||
"flyio": "^0.6.14",
|
||||
"jweixin-module": "^1.6.0",
|
||||
"pinia": "^2.1.6",
|
||||
"pinia-plugin-persistedstate": "^4.2.0",
|
||||
"vant": "^4.6.2",
|
||||
"weixin-js-sdk": "^1.6.3",
|
||||
"yarn": "^1.22.19",
|
||||
@ -1520,20 +1498,17 @@
|
||||
"@babel/helper-string-parser": {
|
||||
"version": "7.25.9",
|
||||
"resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz",
|
||||
"integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==",
|
||||
"peer": true
|
||||
"integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA=="
|
||||
},
|
||||
"@babel/helper-validator-identifier": {
|
||||
"version": "7.25.9",
|
||||
"resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
|
||||
"integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
|
||||
"peer": true
|
||||
"integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="
|
||||
},
|
||||
"@babel/parser": {
|
||||
"version": "7.27.0",
|
||||
"resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.27.0.tgz",
|
||||
"integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==",
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"@babel/types": "^7.27.0"
|
||||
}
|
||||
@ -1542,7 +1517,6 @@
|
||||
"version": "7.27.0",
|
||||
"resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.27.0.tgz",
|
||||
"integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==",
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"@babel/helper-string-parser": "^7.25.9",
|
||||
"@babel/helper-validator-identifier": "^7.25.9"
|
||||
@ -1551,69 +1525,8 @@
|
||||
"@jridgewell/sourcemap-codec": {
|
||||
"version": "1.5.0",
|
||||
"resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
|
||||
"integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="
|
||||
},
|
||||
"@nodelib/fs.scandir": {
|
||||
"version": "2.1.5",
|
||||
"resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
|
||||
"integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
|
||||
"requires": {
|
||||
"@nodelib/fs.stat": "2.0.5",
|
||||
"run-parallel": "^1.1.9"
|
||||
}
|
||||
},
|
||||
"@nodelib/fs.stat": {
|
||||
"version": "2.0.5",
|
||||
"resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
|
||||
"integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="
|
||||
},
|
||||
"@nodelib/fs.walk": {
|
||||
"version": "1.2.8",
|
||||
"resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
|
||||
"integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
|
||||
"requires": {
|
||||
"@nodelib/fs.scandir": "2.1.5",
|
||||
"fastq": "^1.6.0"
|
||||
}
|
||||
},
|
||||
"@nuxt/kit": {
|
||||
"version": "3.16.2",
|
||||
"resolved": "https://registry.npmmirror.com/@nuxt/kit/-/kit-3.16.2.tgz",
|
||||
"integrity": "sha512-K1SAUo2vweTfudKZzjKsZ5YJoxPLTspR5qz5+G61xtZreLpsdpDYfBseqsIAl5VFLJuszeRpWQ01jP9LfQ6Ksw==",
|
||||
"requires": {
|
||||
"c12": "^3.0.2",
|
||||
"consola": "^3.4.2",
|
||||
"defu": "^6.1.4",
|
||||
"destr": "^2.0.3",
|
||||
"errx": "^0.1.0",
|
||||
"exsolve": "^1.0.4",
|
||||
"globby": "^14.1.0",
|
||||
"ignore": "^7.0.3",
|
||||
"jiti": "^2.4.2",
|
||||
"klona": "^2.0.6",
|
||||
"knitwork": "^1.2.0",
|
||||
"mlly": "^1.7.4",
|
||||
"ohash": "^2.0.11",
|
||||
"pathe": "^2.0.3",
|
||||
"pkg-types": "^2.1.0",
|
||||
"scule": "^1.3.0",
|
||||
"semver": "^7.7.1",
|
||||
"std-env": "^3.8.1",
|
||||
"ufo": "^1.5.4",
|
||||
"unctx": "^2.4.1",
|
||||
"unimport": "^4.1.3",
|
||||
"untyped": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"@sindresorhus/merge-streams": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmmirror.com/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz",
|
||||
"integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg=="
|
||||
},
|
||||
"@types/estree": {
|
||||
"version": "1.0.7",
|
||||
"resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.7.tgz",
|
||||
"integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ=="
|
||||
"integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
|
||||
"peer": true
|
||||
},
|
||||
"@vant/area-data": {
|
||||
"version": "1.5.0",
|
||||
@ -1635,7 +1548,6 @@
|
||||
"version": "3.5.13",
|
||||
"resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.13.tgz",
|
||||
"integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==",
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"@babel/parser": "^7.25.3",
|
||||
"@vue/shared": "3.5.13",
|
||||
@ -1647,8 +1559,7 @@
|
||||
"estree-walker": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz",
|
||||
"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
|
||||
"peer": true
|
||||
"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -1656,7 +1567,6 @@
|
||||
"version": "3.5.13",
|
||||
"resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz",
|
||||
"integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==",
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"@vue/compiler-core": "3.5.13",
|
||||
"@vue/shared": "3.5.13"
|
||||
@ -1691,7 +1601,6 @@
|
||||
"version": "3.5.13",
|
||||
"resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz",
|
||||
"integrity": "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==",
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"@vue/compiler-dom": "3.5.13",
|
||||
"@vue/shared": "3.5.13"
|
||||
@ -1737,7 +1646,6 @@
|
||||
"version": "3.5.13",
|
||||
"resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.13.tgz",
|
||||
"integrity": "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==",
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"@vue/compiler-ssr": "3.5.13",
|
||||
"@vue/shared": "3.5.13"
|
||||
@ -1748,11 +1656,6 @@
|
||||
"resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.13.tgz",
|
||||
"integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ=="
|
||||
},
|
||||
"acorn": {
|
||||
"version": "8.14.1",
|
||||
"resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.14.1.tgz",
|
||||
"integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg=="
|
||||
},
|
||||
"add": {
|
||||
"version": "2.0.6",
|
||||
"resolved": "https://registry.npmmirror.com/add/-/add-2.0.6.tgz",
|
||||
@ -1805,54 +1708,11 @@
|
||||
"tweetnacl": "^0.14.3"
|
||||
}
|
||||
},
|
||||
"braces": {
|
||||
"version": "3.0.3",
|
||||
"resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.3.tgz",
|
||||
"integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
|
||||
"requires": {
|
||||
"fill-range": "^7.1.1"
|
||||
}
|
||||
},
|
||||
"c12": {
|
||||
"version": "3.0.3",
|
||||
"resolved": "https://registry.npmmirror.com/c12/-/c12-3.0.3.tgz",
|
||||
"integrity": "sha512-uC3MacKBb0Z15o5QWCHvHWj5Zv34pGQj9P+iXKSpTuSGFS0KKhUWf4t9AJ+gWjYOdmWCPEGpEzm8sS0iqbpo1w==",
|
||||
"requires": {
|
||||
"chokidar": "^4.0.3",
|
||||
"confbox": "^0.2.2",
|
||||
"defu": "^6.1.4",
|
||||
"dotenv": "^16.4.7",
|
||||
"exsolve": "^1.0.4",
|
||||
"giget": "^2.0.0",
|
||||
"jiti": "^2.4.2",
|
||||
"ohash": "^2.0.11",
|
||||
"pathe": "^2.0.3",
|
||||
"perfect-debounce": "^1.0.0",
|
||||
"pkg-types": "^2.1.0",
|
||||
"rc9": "^2.1.2"
|
||||
}
|
||||
},
|
||||
"caseless": {
|
||||
"version": "0.12.0",
|
||||
"resolved": "https://registry.npmmirror.com/caseless/-/caseless-0.12.0.tgz",
|
||||
"integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
|
||||
},
|
||||
"chokidar": {
|
||||
"version": "4.0.3",
|
||||
"resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-4.0.3.tgz",
|
||||
"integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
|
||||
"requires": {
|
||||
"readdirp": "^4.0.1"
|
||||
}
|
||||
},
|
||||
"citty": {
|
||||
"version": "0.1.6",
|
||||
"resolved": "https://registry.npmmirror.com/citty/-/citty-0.1.6.tgz",
|
||||
"integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==",
|
||||
"requires": {
|
||||
"consola": "^3.2.3"
|
||||
}
|
||||
},
|
||||
"combined-stream": {
|
||||
"version": "1.0.8",
|
||||
"resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz",
|
||||
@ -1861,16 +1721,6 @@
|
||||
"delayed-stream": "~1.0.0"
|
||||
}
|
||||
},
|
||||
"confbox": {
|
||||
"version": "0.2.2",
|
||||
"resolved": "https://registry.npmmirror.com/confbox/-/confbox-0.2.2.tgz",
|
||||
"integrity": "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ=="
|
||||
},
|
||||
"consola": {
|
||||
"version": "3.4.2",
|
||||
"resolved": "https://registry.npmmirror.com/consola/-/consola-3.4.2.tgz",
|
||||
"integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA=="
|
||||
},
|
||||
"core-util-is": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.2.tgz",
|
||||
@ -1890,31 +1740,11 @@
|
||||
"assert-plus": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"deep-pick-omit": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmmirror.com/deep-pick-omit/-/deep-pick-omit-1.2.1.tgz",
|
||||
"integrity": "sha512-2J6Kc/m3irCeqVG42T+SaUMesaK7oGWaedGnQQK/+O0gYc+2SP5bKh/KKTE7d7SJ+GCA9UUE1GRzh6oDe0EnGw=="
|
||||
},
|
||||
"defu": {
|
||||
"version": "6.1.4",
|
||||
"resolved": "https://registry.npmmirror.com/defu/-/defu-6.1.4.tgz",
|
||||
"integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg=="
|
||||
},
|
||||
"delayed-stream": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
||||
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
|
||||
},
|
||||
"destr": {
|
||||
"version": "2.0.5",
|
||||
"resolved": "https://registry.npmmirror.com/destr/-/destr-2.0.5.tgz",
|
||||
"integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA=="
|
||||
},
|
||||
"dotenv": {
|
||||
"version": "16.4.7",
|
||||
"resolved": "https://registry.npmmirror.com/dotenv/-/dotenv-16.4.7.tgz",
|
||||
"integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ=="
|
||||
},
|
||||
"ecc-jsbn": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmmirror.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
|
||||
@ -1927,31 +1757,7 @@
|
||||
"entities": {
|
||||
"version": "4.5.0",
|
||||
"resolved": "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz",
|
||||
"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
|
||||
"peer": true
|
||||
},
|
||||
"errx": {
|
||||
"version": "0.1.0",
|
||||
"resolved": "https://registry.npmmirror.com/errx/-/errx-0.1.0.tgz",
|
||||
"integrity": "sha512-fZmsRiDNv07K6s2KkKFTiD2aIvECa7++PKyD5NC32tpRw46qZA3sOz+aM+/V9V0GDHxVTKLziveV4JhzBHDp9Q=="
|
||||
},
|
||||
"escape-string-regexp": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
|
||||
"integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="
|
||||
},
|
||||
"estree-walker": {
|
||||
"version": "3.0.3",
|
||||
"resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-3.0.3.tgz",
|
||||
"integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
|
||||
"requires": {
|
||||
"@types/estree": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"exsolve": {
|
||||
"version": "1.0.4",
|
||||
"resolved": "https://registry.npmmirror.com/exsolve/-/exsolve-1.0.4.tgz",
|
||||
"integrity": "sha512-xsZH6PXaER4XoV+NiT7JHp1bJodJVT+cxeSH1G0f0tlT0lJqYuHUP3bUx2HtfTDvOagMINYp8rsqusxud3RXhw=="
|
||||
"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="
|
||||
},
|
||||
"extend": {
|
||||
"version": "3.0.2",
|
||||
@ -1968,39 +1774,11 @@
|
||||
"resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
|
||||
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
|
||||
},
|
||||
"fast-glob": {
|
||||
"version": "3.3.3",
|
||||
"resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.3.tgz",
|
||||
"integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
|
||||
"requires": {
|
||||
"@nodelib/fs.stat": "^2.0.2",
|
||||
"@nodelib/fs.walk": "^1.2.3",
|
||||
"glob-parent": "^5.1.2",
|
||||
"merge2": "^1.3.0",
|
||||
"micromatch": "^4.0.8"
|
||||
}
|
||||
},
|
||||
"fast-json-stable-stringify": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
|
||||
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
|
||||
},
|
||||
"fastq": {
|
||||
"version": "1.19.1",
|
||||
"resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.19.1.tgz",
|
||||
"integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==",
|
||||
"requires": {
|
||||
"reusify": "^1.0.4"
|
||||
}
|
||||
},
|
||||
"fill-range": {
|
||||
"version": "7.1.1",
|
||||
"resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.1.1.tgz",
|
||||
"integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
|
||||
"requires": {
|
||||
"to-regex-range": "^5.0.1"
|
||||
}
|
||||
},
|
||||
"flyio": {
|
||||
"version": "0.6.14",
|
||||
"resolved": "https://registry.npmmirror.com/flyio/-/flyio-0.6.14.tgz",
|
||||
@ -2032,40 +1810,6 @@
|
||||
"assert-plus": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"giget": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/giget/-/giget-2.0.0.tgz",
|
||||
"integrity": "sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==",
|
||||
"requires": {
|
||||
"citty": "^0.1.6",
|
||||
"consola": "^3.4.0",
|
||||
"defu": "^6.1.4",
|
||||
"node-fetch-native": "^1.6.6",
|
||||
"nypm": "^0.6.0",
|
||||
"pathe": "^2.0.3"
|
||||
}
|
||||
},
|
||||
"glob-parent": {
|
||||
"version": "5.1.2",
|
||||
"resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz",
|
||||
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
|
||||
"requires": {
|
||||
"is-glob": "^4.0.1"
|
||||
}
|
||||
},
|
||||
"globby": {
|
||||
"version": "14.1.0",
|
||||
"resolved": "https://registry.npmmirror.com/globby/-/globby-14.1.0.tgz",
|
||||
"integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==",
|
||||
"requires": {
|
||||
"@sindresorhus/merge-streams": "^2.1.0",
|
||||
"fast-glob": "^3.3.3",
|
||||
"ignore": "^7.0.3",
|
||||
"path-type": "^6.0.0",
|
||||
"slash": "^5.1.0",
|
||||
"unicorn-magic": "^0.3.0"
|
||||
}
|
||||
},
|
||||
"har-schema": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/har-schema/-/har-schema-2.0.0.tgz",
|
||||
@ -2090,29 +1834,6 @@
|
||||
"sshpk": "^1.7.0"
|
||||
}
|
||||
},
|
||||
"ignore": {
|
||||
"version": "7.0.3",
|
||||
"resolved": "https://registry.npmmirror.com/ignore/-/ignore-7.0.3.tgz",
|
||||
"integrity": "sha512-bAH5jbK/F3T3Jls4I0SO1hmPR0dKU0a7+SY6n1yzRtG54FLO8d6w/nxLFX2Nb7dBu6cCWXPaAME6cYqFUMmuCA=="
|
||||
},
|
||||
"is-extglob": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz",
|
||||
"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="
|
||||
},
|
||||
"is-glob": {
|
||||
"version": "4.0.3",
|
||||
"resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz",
|
||||
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
|
||||
"requires": {
|
||||
"is-extglob": "^2.1.1"
|
||||
}
|
||||
},
|
||||
"is-number": {
|
||||
"version": "7.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz",
|
||||
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
|
||||
},
|
||||
"is-typedarray": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/is-typedarray/-/is-typedarray-1.0.0.tgz",
|
||||
@ -2123,16 +1844,6 @@
|
||||
"resolved": "https://registry.npmmirror.com/isstream/-/isstream-0.1.2.tgz",
|
||||
"integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g=="
|
||||
},
|
||||
"jiti": {
|
||||
"version": "2.4.2",
|
||||
"resolved": "https://registry.npmmirror.com/jiti/-/jiti-2.4.2.tgz",
|
||||
"integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A=="
|
||||
},
|
||||
"js-tokens": {
|
||||
"version": "9.0.1",
|
||||
"resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-9.0.1.tgz",
|
||||
"integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="
|
||||
},
|
||||
"jsbn": {
|
||||
"version": "0.1.1",
|
||||
"resolved": "https://registry.npmmirror.com/jsbn/-/jsbn-0.1.1.tgz",
|
||||
@ -2169,48 +1880,15 @@
|
||||
"resolved": "https://registry.npmmirror.com/jweixin-module/-/jweixin-module-1.6.0.tgz",
|
||||
"integrity": "sha512-dGk9cf+ipipHmtzYmKZs5B2toX+p4hLyllGLF6xuC8t+B05oYxd8fYoaRz0T30U2n3RUv8a4iwvjhA+OcYz52w=="
|
||||
},
|
||||
"klona": {
|
||||
"version": "2.0.6",
|
||||
"resolved": "https://registry.npmmirror.com/klona/-/klona-2.0.6.tgz",
|
||||
"integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA=="
|
||||
},
|
||||
"knitwork": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmmirror.com/knitwork/-/knitwork-1.2.0.tgz",
|
||||
"integrity": "sha512-xYSH7AvuQ6nXkq42x0v5S8/Iry+cfulBz/DJQzhIyESdLD7425jXsPy4vn5cCXU+HhRN2kVw51Vd1K6/By4BQg=="
|
||||
},
|
||||
"local-pkg": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmmirror.com/local-pkg/-/local-pkg-1.1.1.tgz",
|
||||
"integrity": "sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==",
|
||||
"requires": {
|
||||
"mlly": "^1.7.4",
|
||||
"pkg-types": "^2.0.1",
|
||||
"quansync": "^0.2.8"
|
||||
}
|
||||
},
|
||||
"magic-string": {
|
||||
"version": "0.30.17",
|
||||
"resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.17.tgz",
|
||||
"integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==",
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"@jridgewell/sourcemap-codec": "^1.5.0"
|
||||
}
|
||||
},
|
||||
"merge2": {
|
||||
"version": "1.4.1",
|
||||
"resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz",
|
||||
"integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="
|
||||
},
|
||||
"micromatch": {
|
||||
"version": "4.0.8",
|
||||
"resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.8.tgz",
|
||||
"integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
|
||||
"requires": {
|
||||
"braces": "^3.0.3",
|
||||
"picomatch": "^2.3.1"
|
||||
}
|
||||
},
|
||||
"mime-db": {
|
||||
"version": "1.52.0",
|
||||
"resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz",
|
||||
@ -2224,82 +1902,17 @@
|
||||
"mime-db": "1.52.0"
|
||||
}
|
||||
},
|
||||
"mlly": {
|
||||
"version": "1.7.4",
|
||||
"resolved": "https://registry.npmmirror.com/mlly/-/mlly-1.7.4.tgz",
|
||||
"integrity": "sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==",
|
||||
"requires": {
|
||||
"acorn": "^8.14.0",
|
||||
"pathe": "^2.0.1",
|
||||
"pkg-types": "^1.3.0",
|
||||
"ufo": "^1.5.4"
|
||||
},
|
||||
"dependencies": {
|
||||
"confbox": {
|
||||
"version": "0.1.8",
|
||||
"resolved": "https://registry.npmmirror.com/confbox/-/confbox-0.1.8.tgz",
|
||||
"integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w=="
|
||||
},
|
||||
"pkg-types": {
|
||||
"version": "1.3.1",
|
||||
"resolved": "https://registry.npmmirror.com/pkg-types/-/pkg-types-1.3.1.tgz",
|
||||
"integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==",
|
||||
"requires": {
|
||||
"confbox": "^0.1.8",
|
||||
"mlly": "^1.7.4",
|
||||
"pathe": "^2.0.1"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"nanoid": {
|
||||
"version": "3.3.11",
|
||||
"resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.11.tgz",
|
||||
"integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
|
||||
"peer": true
|
||||
},
|
||||
"node-fetch-native": {
|
||||
"version": "1.6.6",
|
||||
"resolved": "https://registry.npmmirror.com/node-fetch-native/-/node-fetch-native-1.6.6.tgz",
|
||||
"integrity": "sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ=="
|
||||
},
|
||||
"nypm": {
|
||||
"version": "0.6.0",
|
||||
"resolved": "https://registry.npmmirror.com/nypm/-/nypm-0.6.0.tgz",
|
||||
"integrity": "sha512-mn8wBFV9G9+UFHIrq+pZ2r2zL4aPau/by3kJb3cM7+5tQHMt6HGQB8FDIeKFYp8o0D2pnH6nVsO88N4AmUxIWg==",
|
||||
"requires": {
|
||||
"citty": "^0.1.6",
|
||||
"consola": "^3.4.0",
|
||||
"pathe": "^2.0.3",
|
||||
"pkg-types": "^2.0.0",
|
||||
"tinyexec": "^0.3.2"
|
||||
}
|
||||
},
|
||||
"oauth-sign": {
|
||||
"version": "0.9.0",
|
||||
"resolved": "https://registry.npmmirror.com/oauth-sign/-/oauth-sign-0.9.0.tgz",
|
||||
"integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
|
||||
},
|
||||
"ohash": {
|
||||
"version": "2.0.11",
|
||||
"resolved": "https://registry.npmmirror.com/ohash/-/ohash-2.0.11.tgz",
|
||||
"integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ=="
|
||||
},
|
||||
"path-type": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/path-type/-/path-type-6.0.0.tgz",
|
||||
"integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ=="
|
||||
},
|
||||
"pathe": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmmirror.com/pathe/-/pathe-2.0.3.tgz",
|
||||
"integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="
|
||||
},
|
||||
"perfect-debounce": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/perfect-debounce/-/perfect-debounce-1.0.0.tgz",
|
||||
"integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA=="
|
||||
},
|
||||
"performance-now": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmmirror.com/performance-now/-/performance-now-2.1.0.tgz",
|
||||
@ -2311,11 +1924,6 @@
|
||||
"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
|
||||
"peer": true
|
||||
},
|
||||
"picomatch": {
|
||||
"version": "2.3.1",
|
||||
"resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz",
|
||||
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
|
||||
},
|
||||
"pinia": {
|
||||
"version": "2.3.1",
|
||||
"resolved": "https://registry.npmmirror.com/pinia/-/pinia-2.3.1.tgz",
|
||||
@ -2325,27 +1933,6 @@
|
||||
"vue-demi": "^0.14.10"
|
||||
}
|
||||
},
|
||||
"pinia-plugin-persistedstate": {
|
||||
"version": "4.2.0",
|
||||
"resolved": "https://registry.npmmirror.com/pinia-plugin-persistedstate/-/pinia-plugin-persistedstate-4.2.0.tgz",
|
||||
"integrity": "sha512-3buhA7ac+ssbOIx3VRCC8oHkoFwhDM9oHRCjo7nj+O8WUqnW+jRqh7eYT5eS/DNa3H28zp3dYf/nd/Vc8zj8eQ==",
|
||||
"requires": {
|
||||
"@nuxt/kit": "^3.14.1592",
|
||||
"deep-pick-omit": "^1.2.1",
|
||||
"defu": "^6.1.4",
|
||||
"destr": "^2.0.3"
|
||||
}
|
||||
},
|
||||
"pkg-types": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmmirror.com/pkg-types/-/pkg-types-2.1.0.tgz",
|
||||
"integrity": "sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==",
|
||||
"requires": {
|
||||
"confbox": "^0.2.1",
|
||||
"exsolve": "^1.0.1",
|
||||
"pathe": "^2.0.3"
|
||||
}
|
||||
},
|
||||
"postcss": {
|
||||
"version": "8.5.3",
|
||||
"resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.3.tgz",
|
||||
@ -2372,30 +1959,6 @@
|
||||
"resolved": "https://registry.npmmirror.com/qs/-/qs-6.5.3.tgz",
|
||||
"integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA=="
|
||||
},
|
||||
"quansync": {
|
||||
"version": "0.2.10",
|
||||
"resolved": "https://registry.npmmirror.com/quansync/-/quansync-0.2.10.tgz",
|
||||
"integrity": "sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A=="
|
||||
},
|
||||
"queue-microtask": {
|
||||
"version": "1.2.3",
|
||||
"resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz",
|
||||
"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="
|
||||
},
|
||||
"rc9": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmmirror.com/rc9/-/rc9-2.1.2.tgz",
|
||||
"integrity": "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==",
|
||||
"requires": {
|
||||
"defu": "^6.1.4",
|
||||
"destr": "^2.0.3"
|
||||
}
|
||||
},
|
||||
"readdirp": {
|
||||
"version": "4.1.2",
|
||||
"resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-4.1.2.tgz",
|
||||
"integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="
|
||||
},
|
||||
"request": {
|
||||
"version": "2.88.2",
|
||||
"resolved": "https://registry.npmmirror.com/request/-/request-2.88.2.tgz",
|
||||
@ -2423,19 +1986,6 @@
|
||||
"uuid": "^3.3.2"
|
||||
}
|
||||
},
|
||||
"reusify": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.1.0.tgz",
|
||||
"integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="
|
||||
},
|
||||
"run-parallel": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz",
|
||||
"integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
|
||||
"requires": {
|
||||
"queue-microtask": "^1.2.2"
|
||||
}
|
||||
},
|
||||
"safe-buffer": {
|
||||
"version": "5.2.1",
|
||||
"resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz",
|
||||
@ -2446,26 +1996,10 @@
|
||||
"resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz",
|
||||
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
|
||||
},
|
||||
"scule": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmmirror.com/scule/-/scule-1.3.0.tgz",
|
||||
"integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g=="
|
||||
},
|
||||
"semver": {
|
||||
"version": "7.7.1",
|
||||
"resolved": "https://registry.npmmirror.com/semver/-/semver-7.7.1.tgz",
|
||||
"integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA=="
|
||||
},
|
||||
"slash": {
|
||||
"version": "5.1.0",
|
||||
"resolved": "https://registry.npmmirror.com/slash/-/slash-5.1.0.tgz",
|
||||
"integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg=="
|
||||
},
|
||||
"source-map-js": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz",
|
||||
"integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
|
||||
"peer": true
|
||||
"integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="
|
||||
},
|
||||
"sshpk": {
|
||||
"version": "1.17.0",
|
||||
@ -2483,54 +2017,6 @@
|
||||
"tweetnacl": "~0.14.0"
|
||||
}
|
||||
},
|
||||
"std-env": {
|
||||
"version": "3.9.0",
|
||||
"resolved": "https://registry.npmmirror.com/std-env/-/std-env-3.9.0.tgz",
|
||||
"integrity": "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw=="
|
||||
},
|
||||
"strip-literal": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/strip-literal/-/strip-literal-3.0.0.tgz",
|
||||
"integrity": "sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==",
|
||||
"requires": {
|
||||
"js-tokens": "^9.0.1"
|
||||
}
|
||||
},
|
||||
"tinyexec": {
|
||||
"version": "0.3.2",
|
||||
"resolved": "https://registry.npmmirror.com/tinyexec/-/tinyexec-0.3.2.tgz",
|
||||
"integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="
|
||||
},
|
||||
"tinyglobby": {
|
||||
"version": "0.2.12",
|
||||
"resolved": "https://registry.npmmirror.com/tinyglobby/-/tinyglobby-0.2.12.tgz",
|
||||
"integrity": "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==",
|
||||
"requires": {
|
||||
"fdir": "^6.4.3",
|
||||
"picomatch": "^4.0.2"
|
||||
},
|
||||
"dependencies": {
|
||||
"fdir": {
|
||||
"version": "6.4.3",
|
||||
"resolved": "https://registry.npmmirror.com/fdir/-/fdir-6.4.3.tgz",
|
||||
"integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==",
|
||||
"requires": {}
|
||||
},
|
||||
"picomatch": {
|
||||
"version": "4.0.2",
|
||||
"resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.2.tgz",
|
||||
"integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"to-regex-range": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz",
|
||||
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
|
||||
"requires": {
|
||||
"is-number": "^7.0.0"
|
||||
}
|
||||
},
|
||||
"tough-cookie": {
|
||||
"version": "2.5.0",
|
||||
"resolved": "https://registry.npmmirror.com/tough-cookie/-/tough-cookie-2.5.0.tgz",
|
||||
@ -2553,100 +2039,6 @@
|
||||
"resolved": "https://registry.npmmirror.com/tweetnacl/-/tweetnacl-0.14.5.tgz",
|
||||
"integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA=="
|
||||
},
|
||||
"ufo": {
|
||||
"version": "1.6.1",
|
||||
"resolved": "https://registry.npmmirror.com/ufo/-/ufo-1.6.1.tgz",
|
||||
"integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA=="
|
||||
},
|
||||
"unctx": {
|
||||
"version": "2.4.1",
|
||||
"resolved": "https://registry.npmmirror.com/unctx/-/unctx-2.4.1.tgz",
|
||||
"integrity": "sha512-AbaYw0Nm4mK4qjhns67C+kgxR2YWiwlDBPzxrN8h8C6VtAdCgditAY5Dezu3IJy4XVqAnbrXt9oQJvsn3fyozg==",
|
||||
"requires": {
|
||||
"acorn": "^8.14.0",
|
||||
"estree-walker": "^3.0.3",
|
||||
"magic-string": "^0.30.17",
|
||||
"unplugin": "^2.1.0"
|
||||
}
|
||||
},
|
||||
"unicorn-magic": {
|
||||
"version": "0.3.0",
|
||||
"resolved": "https://registry.npmmirror.com/unicorn-magic/-/unicorn-magic-0.3.0.tgz",
|
||||
"integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA=="
|
||||
},
|
||||
"unimport": {
|
||||
"version": "4.2.0",
|
||||
"resolved": "https://registry.npmmirror.com/unimport/-/unimport-4.2.0.tgz",
|
||||
"integrity": "sha512-mYVtA0nmzrysnYnyb3ALMbByJ+Maosee2+WyE0puXl+Xm2bUwPorPaaeZt0ETfuroPOtG8jj1g/qeFZ6buFnag==",
|
||||
"requires": {
|
||||
"acorn": "^8.14.1",
|
||||
"escape-string-regexp": "^5.0.0",
|
||||
"estree-walker": "^3.0.3",
|
||||
"local-pkg": "^1.1.1",
|
||||
"magic-string": "^0.30.17",
|
||||
"mlly": "^1.7.4",
|
||||
"pathe": "^2.0.3",
|
||||
"picomatch": "^4.0.2",
|
||||
"pkg-types": "^2.1.0",
|
||||
"scule": "^1.3.0",
|
||||
"strip-literal": "^3.0.0",
|
||||
"tinyglobby": "^0.2.12",
|
||||
"unplugin": "^2.2.2",
|
||||
"unplugin-utils": "^0.2.4"
|
||||
},
|
||||
"dependencies": {
|
||||
"picomatch": {
|
||||
"version": "4.0.2",
|
||||
"resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.2.tgz",
|
||||
"integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"unplugin": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmmirror.com/unplugin/-/unplugin-2.3.0.tgz",
|
||||
"integrity": "sha512-zNTDfbzOZzkbgXvH1QgQFW5nAyvjA0q3q9FGPFx2sKpDnaoU09VP1wT1mE+LYa6EF2rfezfd1y2EPLLR8ka6nw==",
|
||||
"requires": {
|
||||
"acorn": "^8.14.1",
|
||||
"picomatch": "^4.0.2",
|
||||
"webpack-virtual-modules": "^0.6.2"
|
||||
},
|
||||
"dependencies": {
|
||||
"picomatch": {
|
||||
"version": "4.0.2",
|
||||
"resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.2.tgz",
|
||||
"integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"unplugin-utils": {
|
||||
"version": "0.2.4",
|
||||
"resolved": "https://registry.npmmirror.com/unplugin-utils/-/unplugin-utils-0.2.4.tgz",
|
||||
"integrity": "sha512-8U/MtpkPkkk3Atewj1+RcKIjb5WBimZ/WSLhhR3w6SsIj8XJuKTacSP8g+2JhfSGw0Cb125Y+2zA/IzJZDVbhA==",
|
||||
"requires": {
|
||||
"pathe": "^2.0.2",
|
||||
"picomatch": "^4.0.2"
|
||||
},
|
||||
"dependencies": {
|
||||
"picomatch": {
|
||||
"version": "4.0.2",
|
||||
"resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.2.tgz",
|
||||
"integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"untyped": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/untyped/-/untyped-2.0.0.tgz",
|
||||
"integrity": "sha512-nwNCjxJTjNuLCgFr42fEak5OcLuB3ecca+9ksPFNvtfYSLpjf+iJqSIaSnIile6ZPbKYxI5k2AfXqeopGudK/g==",
|
||||
"requires": {
|
||||
"citty": "^0.1.6",
|
||||
"defu": "^6.1.4",
|
||||
"jiti": "^2.4.2",
|
||||
"knitwork": "^1.2.0",
|
||||
"scule": "^1.3.0"
|
||||
}
|
||||
},
|
||||
"uri-js": {
|
||||
"version": "4.4.1",
|
||||
"resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz",
|
||||
@ -2706,11 +2098,6 @@
|
||||
"integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==",
|
||||
"requires": {}
|
||||
},
|
||||
"webpack-virtual-modules": {
|
||||
"version": "0.6.2",
|
||||
"resolved": "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz",
|
||||
"integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ=="
|
||||
},
|
||||
"weixin-js-sdk": {
|
||||
"version": "1.6.3",
|
||||
"resolved": "https://registry.npmmirror.com/weixin-js-sdk/-/weixin-js-sdk-1.6.3.tgz",
|
||||
|
@ -10,6 +10,7 @@
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"@vant/area-data": "^1.5.0",
|
||||
"@vue/server-renderer": "^3.5.13",
|
||||
"add": "^2.0.6",
|
||||
"flyio": "^0.6.14",
|
||||
"jweixin-module": "^1.6.0",
|
||||
|
@ -30,12 +30,13 @@
|
||||
</view>
|
||||
</view>
|
||||
</scroll-view>
|
||||
|
||||
</view>
|
||||
<view class="fixed-bottom flex justify-between align-center bg-white ">
|
||||
<view class="mx-2 ont-weight-light">
|
||||
<view>商品总价: ¥{{ (getCartGoodsPrice - getPackingFee).toFixed(2) }}</view>
|
||||
<view>打包费: ¥{{ getPackingFee.toFixed(2) }}</view>
|
||||
<view>应付: <text class="text-danger">¥{{ getCartGoodsPrice }}</text></view>
|
||||
<view class="fixed-bottom flex justify-between align-center bg-white">
|
||||
<view class="mx-2">
|
||||
<view class="text-sm">商品总价: ¥{{ (getCartGoodsPrice - getPackingFee).toFixed(2) }}</view>
|
||||
<view class="text-xs text-gray-500">打包费: ¥{{ getPackingFee.toFixed(2) }}</view>
|
||||
<view class="text-base font-medium">应付: <text class="text-danger">¥{{ getCartGoodsPrice }}</text></view>
|
||||
</view>
|
||||
<view>
|
||||
<uv-button
|
||||
@ -265,4 +266,22 @@ const toPay = () => {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.fixed-bottom {
|
||||
.text-sm {
|
||||
font-size: 24rpx;
|
||||
}
|
||||
.text-xs {
|
||||
font-size: 22rpx;
|
||||
}
|
||||
.text-base {
|
||||
font-size: 28rpx;
|
||||
}
|
||||
.text-gray-500 {
|
||||
color: #999;
|
||||
}
|
||||
.font-medium {
|
||||
font-weight: 500;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
@ -1,43 +1,42 @@
|
||||
<template>
|
||||
<uv-navbar
|
||||
:fixed="false"
|
||||
:title="title"
|
||||
left-arrow
|
||||
@leftClick="$onClickLeft"
|
||||
/>
|
||||
<uv-navbar :fixed="false" :title="title" left-arrow @leftClick="$onClickLeft" />
|
||||
<view class="container">
|
||||
<view class="form-box">
|
||||
<view class="form">
|
||||
<list-cell :hover="false">
|
||||
<view class="form-input">
|
||||
<view class="label">收货人</view>
|
||||
<input class="input" placeholder="请输入收货人" v-model="form.realName" placeholder-class="text-color-assist" />
|
||||
<input class="input" placeholder="请输入收货人" v-model="form.realName"
|
||||
placeholder-class="text-color-assist" />
|
||||
</view>
|
||||
</list-cell>
|
||||
<list-cell :hover="false">
|
||||
<view class="form-input">
|
||||
<view class="label">联系方式</view>
|
||||
<input class="input" placeholder="请输入收货人联系方式" v-model="form.phone" placeholder-class="text-color-assist" />
|
||||
<input class="input" placeholder="请输入收货人联系方式" v-model="form.phone"
|
||||
placeholder-class="text-color-assist" />
|
||||
</view>
|
||||
</list-cell>
|
||||
<list-cell :hover="false">
|
||||
<view class="form-input">
|
||||
<view class="label">收货地址</view>
|
||||
<view class="input" @click="chooseLocation">{{form.address ? form.address : '请选择收货地址'}}</view>
|
||||
<view class="input" @click="chooseLocation">{{ form.address ? form.address : '请选择收货地址' }}</view>
|
||||
</view>
|
||||
</list-cell>
|
||||
<list-cell :hover="false">
|
||||
<view class="form-input">
|
||||
<view class="label">详细地址</view>
|
||||
<input class="input" placeholder="请输入收货人详细地址" v-model="form.detail" placeholder-class="text-color-assist" />
|
||||
<input class="input" placeholder="请输入收货人详细地址" v-model="form.detail"
|
||||
placeholder-class="text-color-assist" />
|
||||
</view>
|
||||
</list-cell>
|
||||
<list-cell :hover="false">
|
||||
<view class="form-input">
|
||||
<view class="label">默认地址</view>
|
||||
<view class="radio-group">
|
||||
<view class="radio" :class="{'checked': !form.isDefault}" style="margin-right: 10rpx;" @tap="form.isDefault=0">否</view>
|
||||
<view class="radio" :class="{'checked': form.isDefault}" @tap="form.isDefault=1">是</view>
|
||||
<view class="radio" :class="{ 'checked': !form.isDefault }" style="margin-right: 10rpx;"
|
||||
@tap="form.isDefault = 0">否</view>
|
||||
<view class="radio" :class="{ 'checked': form.isDefault }" @tap="form.isDefault = 1">是</view>
|
||||
</view>
|
||||
</view>
|
||||
</list-cell>
|
||||
@ -56,13 +55,13 @@ import {
|
||||
} from 'vue'
|
||||
import { useMainStore } from '@/store/store'
|
||||
import { storeToRefs } from 'pinia'
|
||||
import { onLoad,onShow } from '@dcloudio/uni-app'
|
||||
import { formatDateTime,prePage } from '@/utils/util'
|
||||
import { onLoad, onShow } from '@dcloudio/uni-app'
|
||||
import { formatDateTime, prePage } from '@/utils/util'
|
||||
import {
|
||||
getAddressAddAndEdit
|
||||
} from '@/api/address'
|
||||
const main = useMainStore()
|
||||
const { isLogin,addresses } = storeToRefs(main)
|
||||
const { isLogin, addresses } = storeToRefs(main)
|
||||
const title = ref('编辑地址')
|
||||
|
||||
const form = ref({
|
||||
@ -77,13 +76,13 @@ const form = ref({
|
||||
|
||||
onLoad((option) => {
|
||||
//为了方便演示,这里用本地缓存
|
||||
console.log('option:',option)
|
||||
console.log('option:', option)
|
||||
if (option.id) {
|
||||
form.value = addresses.value.find(item => item.id == option.id)
|
||||
}
|
||||
})
|
||||
|
||||
const save = async() => {
|
||||
const save = async () => {
|
||||
let data = {}
|
||||
if (form.value.hasOwnProperty('id')) {
|
||||
data = await getAddressAddAndEdit(form.value);
|
||||
@ -91,13 +90,11 @@ const save = async() => {
|
||||
data = await getAddressAddAndEdit(form.value);
|
||||
}
|
||||
if (data) {
|
||||
setTimeout(function(){
|
||||
uni.navigateBack()
|
||||
}, 2000);
|
||||
}
|
||||
}
|
||||
|
||||
const chooseLocation = async() => {
|
||||
const chooseLocation = async () => {
|
||||
uni.chooseLocation({
|
||||
success: function (res) {
|
||||
form.value.address = res.address + ' ' + res.name;
|
||||
@ -116,7 +113,7 @@ const chooseLocation = async() => {
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.form-box {
|
||||
.form-box {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
padding: 30rpx;
|
||||
@ -179,5 +176,5 @@ const chooseLocation = async() => {
|
||||
justify-content: center;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
@ -1,19 +1,17 @@
|
||||
<template>
|
||||
<uv-navbar
|
||||
:fixed="false"
|
||||
:title="title"
|
||||
left-arrow
|
||||
@leftClick="$onClickLeft"
|
||||
/>
|
||||
<uv-navbar :fixed="false" :title="title" left-arrow @leftClick="$onClickLeft" />
|
||||
<view>
|
||||
<view class="wrap">
|
||||
<view class="bg-white" v-if="cate == 0">
|
||||
<uv-tabs activeColor="#f29100" ref="tabs" :list="list" :current="current" @change="change" :scrollable="false" swiperWidth="750"></uv-tabs>
|
||||
<uv-tabs activeColor="#f29100" ref="tabs" :list="list" :current="current" @change="change"
|
||||
:scrollable="false" swiperWidth="750"></uv-tabs>
|
||||
</view>
|
||||
<view class="bg-white" v-else>
|
||||
<uv-tabs activeColor="#f29100" ref="tabs" :list="list1" :current="current" @change="change" :scrollable="false" swiperWidth="750"></uv-tabs>
|
||||
<uv-tabs activeColor="#f29100" ref="tabs" :list="list1" :current="current" @change="change"
|
||||
:scrollable="false" swiperWidth="750"></uv-tabs>
|
||||
</view>
|
||||
<swiper class="swiper-box" :current="swiperCurrent" @transition="transition" @animationfinish="animationfinish">
|
||||
<swiper class="swiper-box" :current="swiperCurrent" @transition="transition"
|
||||
@animationfinish="animationfinish">
|
||||
|
||||
<swiper-item class="swiper-item" v-for="(item, index) in orderList" :key="index">
|
||||
<scroll-view scroll-y style="height: 100%;width: 100%;" @scrolltolower="reachBottom">
|
||||
@ -35,15 +33,15 @@
|
||||
<view v-else>
|
||||
<view class="order" v-for="(res, resIndex) in orderList[index]" :key="resIndex">
|
||||
<view class="type">
|
||||
<view>{{res.title}}</view>
|
||||
<view>{{res.mark}}</view>
|
||||
<view>{{ res.title }}</view>
|
||||
<view>{{ res.mark }}</view>
|
||||
</view>
|
||||
<view class="total">
|
||||
<view>
|
||||
{{res.pm == 0 ? '-':'+'}}¥{{res.number}}元
|
||||
{{ res.pm == 0 ? '-' : '+' }}¥{{ res.number }}元
|
||||
</view>
|
||||
<view>
|
||||
{{formatDateTime(res.createTime)}}
|
||||
{{ formatDateTime(res.createTime) }}
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
@ -64,7 +62,7 @@ import {
|
||||
} from 'vue'
|
||||
import { useMainStore } from '@/store/store'
|
||||
import { storeToRefs } from 'pinia'
|
||||
import { onLoad,onShow} from '@dcloudio/uni-app'
|
||||
import { onLoad, onShow } from '@dcloudio/uni-app'
|
||||
import { formatDateTime } from '@/utils/util'
|
||||
import {
|
||||
balanceGetBillList
|
||||
@ -86,7 +84,7 @@ const list = ref([
|
||||
{
|
||||
name: '退款'
|
||||
}
|
||||
]
|
||||
]
|
||||
)
|
||||
const list1 = ref([
|
||||
{
|
||||
@ -95,40 +93,40 @@ const list1 = ref([
|
||||
{
|
||||
name: '消费'
|
||||
}
|
||||
]
|
||||
]
|
||||
)
|
||||
const current = ref(0)
|
||||
const swiperCurrent = ref(0)
|
||||
const tabsHeight =ref(0)
|
||||
const tabsHeight = ref(0)
|
||||
const dx = ref(0)
|
||||
const loadStatus = ref(['loadmore','loadmore','loadmore','loadmore'])
|
||||
const loadStatus = ref(['loadmore', 'loadmore', 'loadmore', 'loadmore'])
|
||||
const page = ref(1)
|
||||
const pageSize = ref(20)
|
||||
const tabs = ref()
|
||||
const cate = ref(0)
|
||||
|
||||
onLoad((option) => {
|
||||
console.log('cate:',option.cate)
|
||||
console.log('cate:', option.cate)
|
||||
cate.value = option.cate
|
||||
getBill();
|
||||
})
|
||||
|
||||
const getBill = async() => {
|
||||
const getBill = async () => {
|
||||
if (loadStatus.value[swiperCurrent.value] == 'loading') {
|
||||
return;
|
||||
}
|
||||
loadStatus.value.splice(swiperCurrent.value,1,"loading")
|
||||
let data = await balanceGetBillList({cate:cate.value,type:swiperCurrent.value,page:page.value,pagesize:pageSize.value});
|
||||
if (page.value == 1 ){
|
||||
loadStatus.value.splice(swiperCurrent.value, 1, "loading")
|
||||
let data = await balanceGetBillList({ cate: cate.value, type: swiperCurrent.value, page: page.value, pagesize: pageSize.value });
|
||||
if (page.value == 1) {
|
||||
orderList.value[swiperCurrent.value] = [];
|
||||
}
|
||||
if (data && data.length > 0) {
|
||||
page.value++;
|
||||
orderList.value[swiperCurrent.value] = orderList.value[swiperCurrent.value].concat(data);
|
||||
|
||||
loadStatus.value.splice(swiperCurrent.value,1,"loadmore")
|
||||
} else{
|
||||
loadStatus.value.splice(swiperCurrent.value,1,"nomore")
|
||||
loadStatus.value.splice(swiperCurrent.value, 1, "loadmore")
|
||||
} else {
|
||||
loadStatus.value.splice(swiperCurrent.value, 1, "nomore")
|
||||
}
|
||||
}
|
||||
const reachBottom = () => {
|
||||
@ -139,8 +137,14 @@ const reachBottom = () => {
|
||||
}
|
||||
// tab栏切换
|
||||
const change = (e) => {
|
||||
if (e.name == '退款') {
|
||||
swiperCurrent.value = 3;
|
||||
page.value = 1;
|
||||
|
||||
} else {
|
||||
swiperCurrent.value = e.index;
|
||||
page.value = 1;
|
||||
}
|
||||
}
|
||||
const transition = ({ detail: { dx } }) => {
|
||||
}
|
||||
@ -160,6 +164,7 @@ page {
|
||||
height: 100%;
|
||||
background-color: #f2f2f2;
|
||||
}
|
||||
|
||||
/* #endif */
|
||||
</style>
|
||||
|
||||
@ -180,29 +185,35 @@ page {
|
||||
.total-price {
|
||||
font-size: 36rpx;
|
||||
}
|
||||
|
||||
float: right;
|
||||
}
|
||||
|
||||
.type {
|
||||
display: inline-block;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.centre {
|
||||
text-align: center;
|
||||
margin: 200rpx auto;
|
||||
font-size: 32rpx;
|
||||
|
||||
image {
|
||||
width: 164rpx;
|
||||
height: 164rpx;
|
||||
border-radius: 50%;
|
||||
margin-bottom: 20rpx;
|
||||
}
|
||||
|
||||
.tips {
|
||||
font-size: 24rpx;
|
||||
color: #999999;
|
||||
margin-top: 20rpx;
|
||||
}
|
||||
|
||||
.btn {
|
||||
margin: 80rpx auto;
|
||||
width: 200rpx;
|
||||
@ -213,17 +224,19 @@ page {
|
||||
background: linear-gradient(270deg, rgba(249, 116, 90, 1) 0%, rgba(255, 158, 1, 1) 100%);
|
||||
}
|
||||
}
|
||||
|
||||
.wrap {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: calc(100vh - var(--window-top));
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.swiper-box {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.swiper-item {
|
||||
height: 100%;
|
||||
}
|
||||
</style>
|
||||
|
||||
|
@ -21,10 +21,10 @@
|
||||
<text class="invite-code" @tap="showInviteCodePopup">邀请码</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="share-btn" @tap="share">
|
||||
<button class="share-btn" open-type="share" hover-class="none">
|
||||
<image class="share-icon" src="/static/images/share.png" mode="aspectFill"></image>
|
||||
<text class="share-text">分享</text>
|
||||
</view>
|
||||
</button>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
@ -67,11 +67,13 @@
|
||||
<view class="detail-info">
|
||||
<text class="detail-name">{{ item.name }}</text>
|
||||
<text class="detail-date">下单日期: {{ item.date }}</text>
|
||||
<text class="detail-date">结算时间: {{ item.commissionTime }}</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="detail-amount">
|
||||
<text class="add-icon">+</text>
|
||||
<text>{{ item.amount }}</text>
|
||||
<text class="add-icon" v-if="item.refundStatus !== 2">+</text>
|
||||
<text v-if="item.refundStatus !== 2">{{ item.amount }}</text>
|
||||
<text v-else class="refund-text">已退款</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
@ -94,7 +96,7 @@
|
||||
<image class="invite-popup-avatar" :src="userAvatar" mode="aspectFill"></image>
|
||||
<view class="invite-popup-id">分销员ID: {{ userId }}</view>
|
||||
<view class="invite-popup-qrcode-container">
|
||||
<uv-qrcode ref="qrcode" canvas-id="qrcode" :value="userId" :size="260" background-color="#FFFFFF"
|
||||
<uv-qrcode ref="qrcode" canvas-id="qrcode" :value="qrcodeValue" :size="200" background-color="#FFFFFF"
|
||||
foreground-color="#000000"></uv-qrcode>
|
||||
</view>
|
||||
</view>
|
||||
@ -104,10 +106,10 @@
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, onMounted } from "vue";
|
||||
import { ref, onMounted, computed } from "vue";
|
||||
import { useMainStore } from "@/store/store";
|
||||
import { storeToRefs } from "pinia";
|
||||
import { onLoad } from "@dcloudio/uni-app";
|
||||
import { onLoad, onShow } from "@dcloudio/uni-app";
|
||||
import { getDistributorInfo, getCommissionList } from "@/api/distributor";
|
||||
|
||||
const main = useMainStore();
|
||||
@ -147,6 +149,7 @@ const showInvitePopup = ref(false);
|
||||
|
||||
// 页面加载
|
||||
onLoad((options) => {
|
||||
uni.hideShareMenu();
|
||||
if (!isLogin.value) {
|
||||
uni.navigateTo({ url: "/pages/components/pages/login/login" });
|
||||
}
|
||||
@ -154,6 +157,7 @@ onLoad((options) => {
|
||||
// 获取传递的分销员ID参数
|
||||
if (options && options.spreadUid) {
|
||||
spreadUid.value = options.spreadUid;
|
||||
console.log("spreadUid:", spreadUid.value);
|
||||
}
|
||||
|
||||
uni.showLoading({
|
||||
@ -161,6 +165,16 @@ onLoad((options) => {
|
||||
});
|
||||
getCommissionData();
|
||||
uni.hideLoading();
|
||||
|
||||
setTimeout(() => {
|
||||
uni.$mpShare = shareData.value; // 分享配置
|
||||
}, 1000);
|
||||
});
|
||||
|
||||
onShow(() => {
|
||||
setTimeout(() => {
|
||||
uni.$mpShare = shareData.value; // 分享配置
|
||||
}, 1000);
|
||||
});
|
||||
|
||||
// 获取分销员数据
|
||||
@ -188,7 +202,9 @@ const getOrderCommissionList = async () => {
|
||||
avatar: item.avatar || '/static/images/avatar.png',
|
||||
name: item.realName || '用户',
|
||||
date: formatDate(item.createTime) || '', // 修改这里,使用formatDate函数格式化时间
|
||||
amount: item.commission || '0.00'
|
||||
amount: item.commission || '0.00',
|
||||
refundStatus: item.refundStatus || 0,
|
||||
commissionTime: formatDate(item.commissionTime) || ''
|
||||
}));
|
||||
orderCount.value = data.length;
|
||||
}
|
||||
@ -207,14 +223,6 @@ const formatDate = (timestamp) => {
|
||||
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
|
||||
};
|
||||
|
||||
// 分享
|
||||
const share = () => {
|
||||
uni.showToast({
|
||||
title: "分享功能",
|
||||
icon: "none",
|
||||
});
|
||||
};
|
||||
|
||||
// 添加佣金(演示用)
|
||||
const addCommission = () => {
|
||||
// uni.showToast({
|
||||
@ -239,6 +247,35 @@ const showInviteCodePopup = () => {
|
||||
const closeInviteCodePopup = () => {
|
||||
showInvitePopup.value = false;
|
||||
};
|
||||
|
||||
const qrcodeValue = computed(() => {
|
||||
return `https://www.aiyushantp.com/pages/menu/menu?distributorId=${userId.value}`;
|
||||
});
|
||||
|
||||
|
||||
// 分享配置
|
||||
|
||||
const shareData = computed(() => { // 分享的数据
|
||||
return {
|
||||
title: "爱愈膳汤浦",
|
||||
path: '/pages/menu/menu?distributorId=' + userId.value,
|
||||
imageUrl: "https://file.aiyushantp.com/file/b22aa4e4625714e2747b15cfa174ea2351e59df4bacec69d338f9c87c7dae5ca.png"
|
||||
}
|
||||
})
|
||||
// const onShareAppMessage = () => {
|
||||
// return {
|
||||
// title: '1111',
|
||||
// path: `/pages/menu/menu?distributorId=${userId.value}`,
|
||||
// imageUrl: "https://file.aiyushantp.com/file/b22aa4e4625714e2747b15cfa174ea2351e59df4bacec69d338f9c87c7dae5ca.png"
|
||||
// }
|
||||
// };
|
||||
// const onShareTimeline = () => {
|
||||
// return {
|
||||
// title: '11111',
|
||||
// path: `/pages/menu/menu?distributorId=${userId.value}`,
|
||||
// imageUrl: "https://file.aiyushantp.com/file/b22aa4e4625714e2747b15cfa174ea2351e59df4bacec69d338f9c87c7dae5ca.png"
|
||||
// }
|
||||
// }
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
@ -307,9 +344,16 @@ const closeInviteCodePopup = () => {
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
margin-bottom: 10rpx;
|
||||
padding: 20rpx;
|
||||
}
|
||||
|
||||
.invite-popup-qrcode-container>>>.uqrcode {
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.refund-text {
|
||||
color: #ff0000;
|
||||
font-weight: bold;
|
||||
font-size: 28rpx;
|
||||
}
|
||||
</style>
|
||||
|
@ -42,7 +42,7 @@
|
||||
}
|
||||
|
||||
.form-label {
|
||||
width: 160rpx;
|
||||
width: 170rpx;
|
||||
font-size: 30rpx;
|
||||
color: #333333;
|
||||
padding-right: 20rpx;
|
||||
|
@ -1,10 +1,5 @@
|
||||
<template>
|
||||
<uv-navbar
|
||||
:fixed="false"
|
||||
title="申请成为分销员"
|
||||
left-arrow
|
||||
@leftClick="$onClickLeft"
|
||||
/>
|
||||
<uv-navbar :fixed="false" title="申请成为分销员" left-arrow @leftClick="$onClickLeft" />
|
||||
<view class="page">
|
||||
<!-- 头部导航 -->
|
||||
<!-- <view class="header">
|
||||
@ -21,80 +16,62 @@
|
||||
<!-- 姓名 -->
|
||||
<view class="form-item" style="">
|
||||
<text class="form-label">姓名<text style="color: red;"> *</text></text>
|
||||
<input
|
||||
class="form-input"
|
||||
type="text"
|
||||
v-model="formData.name"
|
||||
placeholder="请输入姓名"
|
||||
placeholder-class="placeholder"
|
||||
/>
|
||||
<input class="form-input" type="text" v-model="formData.name" placeholder="请输入姓名"
|
||||
placeholder-class="placeholder" />
|
||||
</view>
|
||||
|
||||
<!-- 电话 -->
|
||||
<view class="form-item">
|
||||
<text class="form-label">电话<text style="color: red;"> *</text></text>
|
||||
<input
|
||||
class="form-input"
|
||||
type="number"
|
||||
v-model="formData.phone"
|
||||
placeholder="请输入电话"
|
||||
placeholder-class="placeholder"
|
||||
maxlength="11"
|
||||
/>
|
||||
<input class="form-input" type="number" v-model="formData.phone" placeholder="请输入电话"
|
||||
placeholder-class="placeholder" maxlength="11" />
|
||||
</view>
|
||||
|
||||
<!-- 工作单位 -->
|
||||
<view class="form-item">
|
||||
<text class="form-label">工作单位</text>
|
||||
<input
|
||||
class="form-input"
|
||||
type="text"
|
||||
v-model="formData.workUnit"
|
||||
placeholder="请输入工作单位"
|
||||
placeholder-class="placeholder"
|
||||
/>
|
||||
<input class="form-input" type="text" v-model="formData.workUnit" placeholder="请输入工作单位"
|
||||
placeholder-class="placeholder" />
|
||||
</view>
|
||||
|
||||
<!-- 银行卡号 -->
|
||||
<view class="form-item">
|
||||
<text class="form-label">银行卡号<text style="color: red;"> *</text></text>
|
||||
<input
|
||||
class="form-input"
|
||||
type="number"
|
||||
v-model="formData.bankCardNumber"
|
||||
placeholder="请输入银行卡号(结算佣金时需要)"
|
||||
placeholder-class="placeholder"
|
||||
/>
|
||||
<input class="form-input" type="number" v-model="formData.bankCardNumber" placeholder="请输入银行卡号(结算佣金时需要)"
|
||||
placeholder-class="placeholder" />
|
||||
</view>
|
||||
|
||||
<!-- 收款人姓名 -->
|
||||
<view class="form-item">
|
||||
<text class="form-label">开户名<text style="color: red;"> *</text></text>
|
||||
<input
|
||||
class="form-input"
|
||||
type="text"
|
||||
v-model="formData.recipientName"
|
||||
placeholder="请输入开户名(结算佣金时需要)"
|
||||
placeholder-class="placeholder"
|
||||
/>
|
||||
<input class="form-input" type="text" v-model="formData.recipientName" placeholder="请输入开户名(结算佣金时需要)"
|
||||
placeholder-class="placeholder" />
|
||||
</view>
|
||||
|
||||
<!-- 开户行 -->
|
||||
<view class="form-item">
|
||||
<text class="form-label">开户行<text style="color: red;"> *</text></text>
|
||||
<input
|
||||
class="form-input"
|
||||
type="text"
|
||||
v-model="formData.bankName"
|
||||
placeholder="请输入开户行(结算佣金时需要)"
|
||||
placeholder-class="placeholder"
|
||||
/>
|
||||
<input class="form-input" type="text" v-model="formData.bankName" placeholder="请输入开户行(结算佣金时需要)"
|
||||
placeholder-class="placeholder" />
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 提交按钮 -->
|
||||
<view class="action-area">
|
||||
<view class="submit-btn" @tap="submitForm">提交</view>
|
||||
<view class="benefit-box">
|
||||
<view class="benefit-title" style="font-weight: bold; font-size: 36rpx;">为什么要加入我们?</view>
|
||||
<view class="benefit-item">
|
||||
<text class="benefit-text">加入我们的分销团队,不仅能共享潜力巨大的健康市场红利,更是爱的传递。</text>
|
||||
</view>
|
||||
<view class="benefit-item">
|
||||
<text class="benefit-text">高比例佣金回报、轻松销售模式已备好;</text>
|
||||
</view>
|
||||
<view class="benefit-title" style="font-weight: bold; font-size: 36rpx;">如何加入我们?</view>
|
||||
<view class="benefit-item">
|
||||
<text class="benefit-text">填写分销员申请表,审批通过即可获得专属分销码,客户扫码下单即可赚取收益,一起用爱创造价值!</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
@ -230,4 +207,38 @@ onLoad((options) => {
|
||||
|
||||
<style scoped>
|
||||
@import "./fenxiaorequestform.css";
|
||||
|
||||
.benefit-box {
|
||||
margin-top: 40rpx;
|
||||
padding: 30rpx;
|
||||
background-color: #f8f8f8;
|
||||
border-radius: 16rpx;
|
||||
border: 1rpx solid #eee;
|
||||
}
|
||||
|
||||
.benefit-title {
|
||||
font-size: 32rpx;
|
||||
font-weight: bold;
|
||||
color: #333;
|
||||
margin-bottom: 10rpx;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.benefit-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 20rpx 0;
|
||||
}
|
||||
|
||||
.benefit-icon {
|
||||
width: 40rpx;
|
||||
height: 40rpx;
|
||||
margin-right: 20rpx;
|
||||
}
|
||||
|
||||
.benefit-text {
|
||||
font-size: 28rpx;
|
||||
color: #666;
|
||||
flex: 1;
|
||||
}
|
||||
</style>
|
||||
|
@ -250,14 +250,14 @@ const getUserInvoice = async (id) => {
|
||||
const data = await getUserInvoiceInfo(id)
|
||||
|
||||
if (data) {
|
||||
console.log('获取到发票信息:', data)
|
||||
// console.log('获取到发票信息:', data)
|
||||
|
||||
// 根据返回的发票类型设置当前选中的类型
|
||||
if (data.invoiceType === 'enterprise') {
|
||||
invoiceType.value = 'company'
|
||||
|
||||
// 填充企业发票信息
|
||||
companyForm.userId = data.userId || userInfo.value?.uid || ''
|
||||
companyForm.userId = data.userId || ''
|
||||
companyForm.invoiceTitle = data.invoiceTitle || ''
|
||||
companyForm.taxNumber = data.taxNumber || ''
|
||||
companyForm.companyAddress = data.companyAddress || ''
|
||||
@ -268,19 +268,12 @@ const getUserInvoice = async (id) => {
|
||||
invoiceType.value = 'personal'
|
||||
|
||||
// 填充个人发票信息
|
||||
personalForm.userId = data.userId || userInfo.value?.uid || ''
|
||||
personalForm.userId = data.userId || ''
|
||||
personalForm.invoiceTitle = data.invoiceTitle || ''
|
||||
}
|
||||
} else {
|
||||
// 如果没有获取到信息,使用当前用户ID
|
||||
companyForm.userId = userInfo.value?.uid || ''
|
||||
personalForm.userId = userInfo.value?.uid || ''
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('获取发票信息失败:', error)
|
||||
// 设置默认用户ID
|
||||
companyForm.userId = userInfo.value?.uid || ''
|
||||
personalForm.userId = userInfo.value?.uid || ''
|
||||
} finally {
|
||||
loading.value = false
|
||||
uni.hideLoading()
|
||||
@ -288,8 +281,11 @@ const getUserInvoice = async (id) => {
|
||||
}
|
||||
|
||||
onLoad((option) => {
|
||||
if (!isLogin.value) {
|
||||
uni.navigateTo({ url: "/pages/components/pages/login/login" });
|
||||
}
|
||||
// 获取用户信息
|
||||
console.log('用户ID:', member.value.id)
|
||||
console.log('用户ID:', option.userId)
|
||||
|
||||
// 接收传入的userId参数
|
||||
if (option.userId) {
|
||||
@ -306,7 +302,7 @@ onLoad((option) => {
|
||||
}
|
||||
|
||||
// 获取用户发票信息
|
||||
getUserInvoice(member.value.id)
|
||||
getUserInvoice(option.userId);
|
||||
})
|
||||
</script>
|
||||
|
||||
|
@ -1,16 +1,12 @@
|
||||
<template>
|
||||
<view class="container">
|
||||
<uv-navbar
|
||||
:fixed="false"
|
||||
title="客服中心"
|
||||
left-arrow
|
||||
@leftClick="$onClickLeft"
|
||||
/>
|
||||
<uv-navbar :fixed="false" title="客服中心" left-arrow @leftClick="$onClickLeft" />
|
||||
<view class="service-content">
|
||||
<view class="section-title">常见问题</view>
|
||||
|
||||
<view class="question-list">
|
||||
<view class="question-item" v-for="(item, index) in questionList" :key="index" @click="showDetail(item)">
|
||||
<view class="question-item" v-for="(item, index) in questionList" :key="index"
|
||||
@click="showDetail(item)">
|
||||
<text class="question-text">{{ item.title }}</text>
|
||||
<view class="arrow-icon">
|
||||
<uv-icon name="arrow-right" size="16" color="#C8C9CC"></uv-icon>
|
||||
@ -58,7 +54,7 @@ const questionList = ref([
|
||||
{
|
||||
title: '外送订单超时',
|
||||
content: [
|
||||
'点击“订单”查看订单详情,了解订单状态;','配送时间超过30分钟,可点击帮助中心底部客服电话人工咨询'
|
||||
'点击“订单”查看订单详情,了解订单状态;', '配送时间超过30分钟,可点击帮助中心底部客服电话人工咨询'
|
||||
]
|
||||
},
|
||||
{
|
||||
@ -70,7 +66,7 @@ const questionList = ref([
|
||||
{
|
||||
title: '外送订单退款',
|
||||
content: [
|
||||
'订单申请取消成功后,钱款和优惠券都将自动返还支付账户;','如遇退款异常情况,可点击帮助中心底部客服电话人工咨询'
|
||||
'订单申请取消成功后,钱款和优惠券都将自动返还支付账户;', '如遇退款异常情况,可点击帮助中心底部客服电话人工咨询'
|
||||
]
|
||||
},
|
||||
{
|
||||
@ -82,6 +78,12 @@ const questionList = ref([
|
||||
|
||||
]);
|
||||
|
||||
onLoad((options) => {
|
||||
if (options && options.phone) {
|
||||
phoneNumber.value = options.phone;
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
|
||||
// 弹窗控制
|
||||
@ -177,8 +179,10 @@ const callService = () => {
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
margin-bottom: 0;
|
||||
padding-bottom: constant(safe-area-inset-bottom); /* iOS 11.0 */
|
||||
padding-bottom: env(safe-area-inset-bottom); /* iOS 11.2+ */
|
||||
padding-bottom: constant(safe-area-inset-bottom);
|
||||
/* iOS 11.0 */
|
||||
padding-bottom: env(safe-area-inset-bottom);
|
||||
/* iOS 11.2+ */
|
||||
}
|
||||
|
||||
/* 弹窗样式 */
|
||||
|
@ -42,13 +42,19 @@
|
||||
<view class="font-size-lg text-color-error">订单未支付</view>
|
||||
</view>
|
||||
<view
|
||||
v-if="order.paid > 0"
|
||||
v-if="order.paid == 1 && order.refundStatus == 2"
|
||||
class="d-flex align-items-center just-content-center mb-40"
|
||||
>
|
||||
<view class="font-size-lg text-color-error">订单已退款</view>
|
||||
</view>
|
||||
<view
|
||||
v-if="order.paid > 0 && order.refundStatus == 0"
|
||||
class="d-flex align-items-center just-content-center"
|
||||
>
|
||||
<view class="sort-num">{{ order.numberId }}</view>
|
||||
</view>
|
||||
<!-- steps begin -->
|
||||
<view v-if="order.paid > 0" class="d-flex just-content-center">
|
||||
<view v-if="order.paid > 0 && order.refundStatus == 0" class="d-flex just-content-center">
|
||||
<view class="steps d-flex flex-column w-80">
|
||||
<view class="steps__img-column">
|
||||
<view class="steps__img-column-item">
|
||||
@ -230,6 +236,10 @@
|
||||
<view>订单金额</view>
|
||||
<view class="font-weight-bold">¥{{ order.totalPrice }}</view>
|
||||
</view>
|
||||
<view class="pay-cell">
|
||||
<view>打包费</view>
|
||||
<view class="font-weight-bold">¥{{ order.payBox }}</view>
|
||||
</view>
|
||||
<view class="pay-cell" v-if="order.orderType == 'takeout'">
|
||||
<view>配送费</view>
|
||||
<view class="font-weight-bold">¥{{ order.payPostage }}</view>
|
||||
@ -280,7 +290,7 @@
|
||||
<view class="pay-cell">
|
||||
<view>取餐时间</view>
|
||||
<view class="font-weight-bold">{{
|
||||
order.getTime ? formatDateTime(order.getTime) : "立即取餐"
|
||||
order.getTime ? formatDateTime(order.getTime) : "无"
|
||||
}}</view>
|
||||
</view>
|
||||
<view class="pay-cell">
|
||||
@ -292,7 +302,7 @@
|
||||
<view class="pay-cell">
|
||||
<view>备注</view>
|
||||
<view class="font-weight-bold">{{
|
||||
order.remark ? order.remark : "无"
|
||||
order.mark ? order.mark : "无"
|
||||
}}</view>
|
||||
</view>
|
||||
</view>
|
||||
|
919
pages/components/pages/pay/pay copy.vue
Normal file
919
pages/components/pages/pay/pay copy.vue
Normal file
@ -0,0 +1,919 @@
|
||||
<template>
|
||||
<uv-navbar :fixed="false" :title="title" left-arrow @leftClick="$onClickLeft" />
|
||||
<view class="container position-relative">
|
||||
<view style="margin-bottom: 130rpx">
|
||||
<view class="section-1">
|
||||
<template v-if="store.distance > 0">
|
||||
<list-cell class="location">
|
||||
<view class="flex-fill d-flex justify-content-between align-items-center">
|
||||
<view class="store-name flex-fill">{{
|
||||
orderType == "takeout" ? "外卖配送" : "点餐自取"
|
||||
}}</view>
|
||||
<uv-switch activeColor="#52ac41" v-model="active" @change="takout">
|
||||
</uv-switch>
|
||||
</view>
|
||||
</list-cell>
|
||||
</template>
|
||||
|
||||
<template v-if="orderType == 'takeout'">
|
||||
<list-cell @click="chooseAddress">
|
||||
<view v-if="address.realName" class="w-100 d-flex flex-column">
|
||||
<view class="d-flex align-items-center justify-content-between mb-10">
|
||||
<view class="font-size-lg text-color-base">
|
||||
{{ address.address + " " + address.detail }}
|
||||
</view>
|
||||
<image src="/static/images/navigator-1.png" class="arrow"></image>
|
||||
</view>
|
||||
<view class="d-flex text-color-assist font-size-sm align-items-center">
|
||||
<view class="mr-10">{{ address.realName }}</view>
|
||||
<view>{{ address.phone }}</view>
|
||||
</view>
|
||||
</view>
|
||||
<view v-else class="flex-fill d-flex justify-content-between align-items-center">
|
||||
<view class="store-name flex-fill">选择收货地址</view>
|
||||
<image src="/static/images/navigator-1.png" class="arrow"></image>
|
||||
</view>
|
||||
</list-cell>
|
||||
</template>
|
||||
</view>
|
||||
|
||||
<view class="section-1">
|
||||
<template>
|
||||
<list-cell class="location">
|
||||
<view class="flex-fill d-flex justify-content-between align-items-center">
|
||||
<view class="store-name flex-fill">{{ store.name }}</view>
|
||||
<!-- <image src="/static/images/navigator-1.png" class="arrow"></image> -->
|
||||
</view>
|
||||
</list-cell>
|
||||
</template>
|
||||
|
||||
<template>
|
||||
<list-cell arrow class="meal-time" v-if="orderType == 'takein'">
|
||||
<view class="flex-fill d-flex justify-content-between align-items-center" @click="takeinTIme = !takeinTIme">
|
||||
<view class="title">取餐时间</view>
|
||||
<view class="time">
|
||||
{{ takeinRange[defaultSelector[0]].name }}
|
||||
<u-picker v-model="takeinTIme" :range="takeinRange" range-key="name" mode="selector"
|
||||
@cancel="takeinCancelTime" @confirm="takeinConfirmTime"
|
||||
:default-selector="defaultSelector"></u-picker>
|
||||
</view>
|
||||
</view>
|
||||
</list-cell>
|
||||
<list-cell class="contact" last :hover="false" v-if="orderType == 'takein'">
|
||||
<view class="flex-fill d-flex justify-content-between align-items-center">
|
||||
<view class="title flex-fill">联系电话</view>
|
||||
<view class="time"><input class="text-right" placeholder="请输入手机号码" :value="member.mobile" />
|
||||
</view>
|
||||
<!-- <button class="contact-tip font-size-sm" @click="fillMobile">自动填写</button> -->
|
||||
</view>
|
||||
</list-cell>
|
||||
</template>
|
||||
<template v-if="orderType == 'takeout'">
|
||||
<list-cell>
|
||||
<view class="w-100 d-flex flex-column">
|
||||
<view class="d-flex align-items-center font-size-base text-color-base">
|
||||
<view class="flex-fill">预计送达时间</view>
|
||||
<view class="mr-10">
|
||||
{{ defaultTime }}
|
||||
<u-picker :default-time="defaultTime" v-model="takeoutTIme" :params="paramsTime" mode="time"
|
||||
@cancel="cancelTime" @confirm="choiceTime"></u-picker>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</list-cell>
|
||||
</template>
|
||||
</view>
|
||||
<!-- 购物车列表 begin -->
|
||||
<view class="section-2">
|
||||
<view class="cart d-flex flex-column">
|
||||
<list-cell last v-for="(item, index) in cart" :key="index">
|
||||
<view class="w-100 d-flex flex-column">
|
||||
<view class="d-flex align-items-center mb-10">
|
||||
<view class="d-flex flex-fill justify-content-between align-items-center text-color-base font-size-lg">
|
||||
<image style="width: 80rpx; height: 80rpx" mode="aspectFill" :src="item.image">
|
||||
</image>
|
||||
</view>
|
||||
<view class="name-and-props overflow-hidden">
|
||||
<view class="text-color-base font-size-lg">{{
|
||||
item.name
|
||||
}}</view>
|
||||
</view>
|
||||
<view class="d-flex flex-fill justify-content-between align-items-center text-color-base font-size-lg">
|
||||
<view>x{{ item.number }}</view>
|
||||
<view>¥{{ item.price }}</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="text-truncate font-size-base text-color-assist">{{
|
||||
item.valueStr
|
||||
}}</view>
|
||||
</view>
|
||||
</list-cell>
|
||||
</view>
|
||||
<!-- <list-cell>
|
||||
<view class="flex-fill d-flex justify-content-between align-items-center">
|
||||
<view class="text-color-base">分销员ID</view>
|
||||
<input
|
||||
type="number"
|
||||
placeholder="请输入分销员ID"
|
||||
v-model="distributorId"
|
||||
class="text-right"
|
||||
style="width: 200rpx;"
|
||||
/>
|
||||
</view>
|
||||
</list-cell> -->
|
||||
|
||||
<!-- <list-cell>
|
||||
<view v-if="orderType == 'takeout'"class="flex-fill d-flex justify-content-between align-items-center">
|
||||
<view class="text-color-base">餐盒费:({{ store.canheDesc}})</view>
|
||||
<view>¥{{ store.canhePrice }}</view>
|
||||
</view>
|
||||
</list-cell> -->
|
||||
<list-cell>
|
||||
<view class="flex-fill d-flex justify-content-between align-items-center">
|
||||
<view class="text-color-base">打包费</view>
|
||||
<view>¥{{ getPackingFee.toFixed(2) }}</view>
|
||||
</view>
|
||||
</list-cell>
|
||||
|
||||
<list-cell v-if="orderType == 'takeout'">
|
||||
<view class="flex-fill d-flex justify-content-between align-items-center">
|
||||
<view class="text-color-base">配送费</view>
|
||||
<view>¥{{ store.deliveryPrice }}</view>
|
||||
</view>
|
||||
</list-cell>
|
||||
|
||||
<list-cell arrow @click="goToPackages">
|
||||
<view class="flex-fill d-flex justify-content-between align-items-center">
|
||||
<view class="text-color-base">优惠券</view>
|
||||
<!-- <view v-if="orderType == 'takeout'">餐盒费¥({{ store.canheDesc}}){{ store.canhePrice }}</view> -->
|
||||
|
||||
<view v-if="coupons == 0" class="text-color-base">暂无可用</view>
|
||||
<view v-else-if="coupon.title" class="text-color-danger">
|
||||
{{ coupon.title }}(满{{ coupon.least }}减{{ coupon.value }})
|
||||
</view>
|
||||
<view v-else class="text-color-primary">可用优惠券{{ coupons }}张</view>
|
||||
</view>
|
||||
</list-cell>
|
||||
<list-cell last>
|
||||
<view class="flex-fill d-flex justify-content-end align-items-center">
|
||||
<view>
|
||||
总计¥{{ total }}
|
||||
<!-- <text v-if="orderType == 'takeout'">,配送费¥{{ store.deliveryPrice }}</text> -->
|
||||
|
||||
<text v-if="coupon.value">,¥-{{ coupon.value }}</text>
|
||||
,实付
|
||||
</view>
|
||||
<view class="font-size-extra-lg font-weight-bold">¥{{ amount }}</view>
|
||||
</view>
|
||||
</list-cell>
|
||||
</view>
|
||||
<!-- 购物车列表 end -->
|
||||
<view class="d-flex align-items-center justify-content-start font-size-sm text-color-warning"
|
||||
style="padding: 20rpx 0">
|
||||
</view>
|
||||
<!-- 支付方式 begin -->
|
||||
<view class="payment">
|
||||
<list-cell last :hover="false"><text>支付方式</text></list-cell>
|
||||
<!-- <list-cell>
|
||||
<view class="d-flex align-items-center justify-content-between w-100 disabled"
|
||||
@click="setPayType('yue')">
|
||||
<view class="iconfont iconbalance line-height-100 payment-icon"></view>
|
||||
<view class="flex-fill">余额支付(余额¥{{ member.nowMoney }})</view>
|
||||
<view class="font-size-sm" v-if="member.nowMoney == 0">余额不足</view>
|
||||
<view class="iconfont line-height-100 checkbox checked iconradio-button-on" v-if="payType == 'yue'">
|
||||
</view>
|
||||
<view class="iconfont line-height-100 checkbox iconradio-button-off" v-else></view>
|
||||
</view>
|
||||
</list-cell> -->
|
||||
<list-cell last>
|
||||
<view class="d-flex align-items-center justify-content-between w-100" @click="setPayType('weixin')">
|
||||
<view class="iconfont iconwxpay line-height-100 payment-icon" style="color: #52ac41"></view>
|
||||
<view class="flex-fill">微信支付</view>
|
||||
<view class="iconfont line-height-100 checkbox checked iconradio-button-on" style="color: #52ac41"
|
||||
v-if="payType == 'weixin'">
|
||||
</view>
|
||||
<view class="iconfont line-height-100 checkbox iconradio-button-off" v-else></view>
|
||||
</view>
|
||||
</list-cell>
|
||||
<!-- #ifdef H5 -->
|
||||
<!-- <list-cell>
|
||||
<view class="d-flex align-items-center justify-content-between w-100" @click="setPayType('alipay')">
|
||||
<view class="iconfont-yshop icon-alipay line-height-100 payment-icon" style="color: #07b4fd"></view>
|
||||
<view class="flex-fill">支付宝</view>
|
||||
<view class="iconfont line-height-100 checkbox checked iconradio-button-on" v-if="payType == 'alipay'">
|
||||
</view>
|
||||
<view class="iconfont line-height-100 checkbox iconradio-button-off" v-else></view>
|
||||
</view>
|
||||
</list-cell> -->
|
||||
<!-- #endif -->
|
||||
</view>
|
||||
<!-- 支付方式 end -->
|
||||
<!-- 备注 begin -->
|
||||
<list-cell last @click="goToRemark">
|
||||
<view class="d-flex flex-fill align-items-center justify-content-between overflow-hidden"
|
||||
style="margin-bottom: 110rpx">
|
||||
<view class="flex-shrink-0 mr-20">备注</view>
|
||||
<view class="flex-fill text-truncate text-right" style="">{{ form.remark ||
|
||||
"" }}
|
||||
</view>
|
||||
</view>
|
||||
</list-cell>
|
||||
<!-- 备注 end -->
|
||||
</view>
|
||||
<!-- 付款栏 begin -->
|
||||
<view style="z-index: 1"
|
||||
class="w-100 pay-box position-fixed fixed-bottom d-flex align-items-center justify-content-between bg-white">
|
||||
<view class="font-size-sm" style="margin-left: 20rpx">合计:</view>
|
||||
<view class="font-size-lg flex-fill">¥{{ amount }}</view>
|
||||
<view class="bg-primary h-100 d-flex align-items-center just-content-center text-color-white font-size-base"
|
||||
style="padding: 0 60rpx; background-color: #52ac41" @tap="debounce(submit, 500)">付款</view>
|
||||
</view>
|
||||
<!-- 付款栏 end -->
|
||||
<modal :show="ensureAddressModalVisible" custom :mask-closable="false" :radius="'0rpx'" width="90%">
|
||||
<view class="modal-content">
|
||||
<view class="d-flex justify-content-end">
|
||||
<image src="/static/images/pay/close.png" style="width: 40rpx; height: 40rpx"
|
||||
@tap="ensureAddressModalVisible = false"></image>
|
||||
</view>
|
||||
<view class="d-flex just-content-center align-items-center" style="margin-bottom: 40px">
|
||||
<view class="font-size-extra-lg text-color-base">请再次确认下单地址</view>
|
||||
</view>
|
||||
<view
|
||||
class="d-flex font-size-base text-color-base font-weight-bold align-items-center justify-content-between mb-20">
|
||||
<view>{{ address.realName }}</view>
|
||||
<view>{{ address.phone }}</view>
|
||||
</view>
|
||||
<view class="d-flex font-size-sm text-color-assist align-items-center justify-content-between mb-40">
|
||||
<view style="max-width: 60%">{{
|
||||
address.address + address.detail
|
||||
}}</view>
|
||||
<button type="primary" size="mini" plain class="change-address-btn" style="white-space: nowrap"
|
||||
@click="chooseAddress">
|
||||
修改地址
|
||||
</button>
|
||||
</view>
|
||||
<button type="primary" class="pay_btn" @tap="debounce(pay, 500)">
|
||||
确认并付款
|
||||
</button>
|
||||
</view>
|
||||
</modal>
|
||||
<uv-toast ref="uToast"></uv-toast>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, computed, nextTick } from "vue";
|
||||
import { useMainStore } from "@/store/store";
|
||||
import { storeToRefs } from "pinia";
|
||||
import { onLoad, onShow, onPullDownRefresh, onHide } from "@dcloudio/uni-app";
|
||||
import { formatDateTime, isWeixin } from "@/utils/util";
|
||||
import debounce from "@/uni_modules/uv-ui-tools/libs/function/debounce";
|
||||
|
||||
import { orderSubmit, payUnify, getWechatConfig } from "@/api/order";
|
||||
import { couponCount } from "@/api/coupon";
|
||||
// #ifdef H5
|
||||
import * as jweixin from "weixin-js-sdk";
|
||||
// #endif
|
||||
const main = useMainStore();
|
||||
const { orderType, address, store, location, isLogin, member, mycoupon } =
|
||||
storeToRefs(main);
|
||||
const distributorId = ref(null); // 分销商ID
|
||||
const active = ref(false);
|
||||
const title = ref("支付");
|
||||
const jsStr = ref("");
|
||||
const cart = ref([]);
|
||||
const form = ref({
|
||||
remark: "",
|
||||
});
|
||||
const ensureAddressModalVisible = ref(false);
|
||||
const takeoutTIme = ref(false); // 外卖取餐时间picker
|
||||
const paramsTime = ref({
|
||||
year: false,
|
||||
month: false,
|
||||
day: false,
|
||||
hour: true,
|
||||
minute: true,
|
||||
second: false,
|
||||
});
|
||||
const defaultTime = ref("00:00");
|
||||
const takeinTIme = ref(false); // 到店自取时间selector
|
||||
const takeinRange = ref([
|
||||
{
|
||||
name: "立即用餐",
|
||||
value: 0,
|
||||
},
|
||||
{
|
||||
name: "10分钟后",
|
||||
value: 10,
|
||||
},
|
||||
{
|
||||
name: "20分钟后",
|
||||
value: 20,
|
||||
},
|
||||
{
|
||||
name: "30分钟后",
|
||||
value: 30,
|
||||
},
|
||||
{
|
||||
name: "40分钟后",
|
||||
value: 40,
|
||||
},
|
||||
{
|
||||
name: "50分钟后",
|
||||
value: 50,
|
||||
},
|
||||
]);
|
||||
const defaultSelector = ref([0]);
|
||||
const payType = ref("weixin"); // 付款方式
|
||||
const coupons = ref(0); // 可用优惠券数量
|
||||
const coupon = ref(main.mycoupon); // 选中的
|
||||
const subscribeMss = ref({
|
||||
takein: "",
|
||||
takeout: "",
|
||||
takein_made: "",
|
||||
takeout_made: "",
|
||||
}); // 微信订阅信息
|
||||
const uToast = ref();
|
||||
|
||||
// 在script部分添加打包费计算属性
|
||||
const getPackingFee = computed(() => {
|
||||
// 计算打包费(根据每个商品的boxFee计算)
|
||||
return cart.value.reduce((acc, cur) => acc + cur.number * (cur.boxFee || 0), 0);
|
||||
});
|
||||
|
||||
// 修改total计算属性
|
||||
const total = computed(() => {
|
||||
let total = cart.value.reduce((acc, cur) => acc + cur.number * cur.price, 0) + getPackingFee.value;
|
||||
|
||||
// 加配送费
|
||||
if (store.value.distance > 0 && orderType.value == "takeout") {
|
||||
total += parseFloat(store.value.deliveryPrice);
|
||||
}
|
||||
|
||||
return total.toFixed(2);
|
||||
});
|
||||
|
||||
// 修改amount计算属性
|
||||
const amount = computed(() => {
|
||||
let amount = cart.value.reduce((acc, cur) => acc + cur.number * cur.price, 0) + getPackingFee.value;
|
||||
|
||||
// 加配送费
|
||||
if (store.value.distance > 0 && orderType.value == "takeout") {
|
||||
amount += parseFloat(store.value.deliveryPrice);
|
||||
}
|
||||
|
||||
// 减去优惠券
|
||||
if (main.mycoupon.hasOwnProperty("id")) {
|
||||
amount -= parseFloat(main.mycoupon.value);
|
||||
}
|
||||
return amount.toFixed(2);
|
||||
});
|
||||
|
||||
onShow(() => {
|
||||
coupon.value = main.mycoupon;
|
||||
let date = new Date(new Date().getTime() + 1200000); // 一个小时后
|
||||
let hour = date.getHours();
|
||||
let minute = date.getMinutes();
|
||||
if (hour < 10) {
|
||||
hour = "0" + hour;
|
||||
}
|
||||
if (minute < 10) {
|
||||
minute = "0" + minute;
|
||||
}
|
||||
defaultTime.value = hour + ":" + minute;
|
||||
|
||||
console.log("member:", member.value);
|
||||
|
||||
if (member.value.spreadUid && distributorId.value && member.value.spreadUid === distributorId.value) {
|
||||
nextTick(() => {
|
||||
uToast.value.show({
|
||||
message: "不能使用自己的分销ID支付",
|
||||
type: "error"
|
||||
});
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
if (orderType.value == "takeout") {
|
||||
active.value = true;
|
||||
} else {
|
||||
active.value = false;
|
||||
}
|
||||
|
||||
getCoupons();
|
||||
|
||||
let paytype = uni.getStorageSync("paytype");
|
||||
payType.value = paytype ? paytype : "weixin";
|
||||
});
|
||||
onHide(() => {
|
||||
subscribeMss.value = [];
|
||||
coupons.value = 0;
|
||||
});
|
||||
onLoad((option) => {
|
||||
cart.value = uni.getStorageSync("cart");
|
||||
if (option.remark) {
|
||||
form.value.remark = option.remark;
|
||||
}
|
||||
// 接收分销员ID参数
|
||||
if (option.distributorId) {
|
||||
distributorId.value = option.distributorId;
|
||||
}
|
||||
});
|
||||
|
||||
const getSubscribeMss = async () => {
|
||||
let data = [];
|
||||
if (data) {
|
||||
subscribeMss.value = data;
|
||||
}
|
||||
};
|
||||
// 更改支付方式
|
||||
const setPayType = (paytype) => {
|
||||
payType.value = "weixin";
|
||||
payType.value = paytype;
|
||||
uni.setStorage({
|
||||
key: "paytype",
|
||||
data: paytype,
|
||||
});
|
||||
};
|
||||
const getCoupons = async () => {
|
||||
//0=通用,1=自取,2=外卖
|
||||
let type = orderType.value == "takein" ? 1 : 2;
|
||||
let data = await couponCount({
|
||||
shop_id: store.value.id ? store.value.id : 0,
|
||||
type: type,
|
||||
});
|
||||
if (data) {
|
||||
coupons.value = data;
|
||||
}
|
||||
};
|
||||
// 选择时间
|
||||
const choiceTime = (value) => {
|
||||
let hour = value.hour;
|
||||
let minute = value.minute;
|
||||
|
||||
let date = new Date(new Date().getTime() + 1200000); // 一个小时后
|
||||
let nowhour = date.getHours();
|
||||
let nowminute = date.getMinutes();
|
||||
|
||||
if (
|
||||
(hour * 60 * 60 + minute * 60) * 1000 - 1200000 <
|
||||
(nowhour * 60 * 60 + nowminute * 60) * 1000
|
||||
) {
|
||||
uToast.value.show({
|
||||
message: "请至少选择一个小时之后",
|
||||
type: "error",
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
if (hour < 10) {
|
||||
hour = "0" + hour;
|
||||
}
|
||||
if (minute < 10) {
|
||||
minute = "0" + minute;
|
||||
}
|
||||
defaultTime, (value = hour + ":" + minute);
|
||||
takeoutTIme.value = false;
|
||||
};
|
||||
const cancelTime = (value) => {
|
||||
takeoutTIme.value = false;
|
||||
};
|
||||
// 到店自取-取消选择取餐时间
|
||||
const takeinCancelTime = (value) => {
|
||||
takeinTIme.value = false;
|
||||
};
|
||||
// 到店自取-选择取餐时间
|
||||
const takeinConfirmTime = (value) => {
|
||||
defaultSelector.value = value;
|
||||
};
|
||||
// 是否外卖开关
|
||||
const takout = (value) => {
|
||||
let type = "takeout";
|
||||
if (value == false) {
|
||||
type = "takein";
|
||||
}
|
||||
main.SET_ORDER_TYPE(type);
|
||||
|
||||
// 如果存在优惠券看看需不需要清除
|
||||
if (coupon.value.hasOwnProperty("type")) {
|
||||
//0=通用,1=自取,2=外卖
|
||||
if (coupon.value.type != 0) {
|
||||
if (coupon.value.type == 1 && orderType.value == "takeout") {
|
||||
coupon.value = {};
|
||||
}
|
||||
if (coupon.value.type == 2 && orderType.value == "takeint") {
|
||||
coupon.value = {};
|
||||
}
|
||||
}
|
||||
}
|
||||
subscribeMss.value = [];
|
||||
coupons.value = 0;
|
||||
getCoupons();
|
||||
};
|
||||
const goToRemark = () => {
|
||||
uni.redirectTo({
|
||||
url: "/pages/components/pages/remark/remark?remark=" + form.value.remark,
|
||||
});
|
||||
};
|
||||
const chooseAddress = () => {
|
||||
uni.navigateTo({
|
||||
url: "/pages/components/pages/address/address?is_choose=true&scene=pay",
|
||||
});
|
||||
};
|
||||
const goToPackages = () => {
|
||||
let newamount = amount.value;
|
||||
let coupon_id = coupon.value.id ? coupon.value.id : 0;
|
||||
let type = orderType.value == "takein" ? 1 : 2;
|
||||
let shop_id = store.value.id;
|
||||
uni.navigateTo({
|
||||
url:
|
||||
"/pages/components/pages/packages/index?amount=" +
|
||||
newamount +
|
||||
"&coupon_id=" +
|
||||
coupon_id +
|
||||
"&shop_id=" +
|
||||
shop_id +
|
||||
"&type=" +
|
||||
type,
|
||||
});
|
||||
};
|
||||
const goToShop = () => {
|
||||
uni.navigateTo({
|
||||
url: `/pages/components/pages/shop/shop`,
|
||||
});
|
||||
};
|
||||
const submit = () => {
|
||||
if (orderType.value == "takeout") {
|
||||
// 检查是否有商品可以单独配送
|
||||
const hasAloneSell = cart.value.some(item => item.aloneSell === 1);
|
||||
if (!hasAloneSell) {
|
||||
uToast.value.show({
|
||||
message: "所选商品不能单独配送",
|
||||
type: "error",
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
// 外卖类型
|
||||
if (typeof address.value.id == "undefined") {
|
||||
uToast.value.show({
|
||||
message: "请选择收货地址",
|
||||
type: "error",
|
||||
});
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// 起送价钱
|
||||
if (store.value.min_price > total.value) {
|
||||
uToast.value.show({
|
||||
message: "本店外卖起送价为¥" + store.value.min_price,
|
||||
type: "error",
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
pay();
|
||||
} else {
|
||||
pay();
|
||||
}
|
||||
};
|
||||
const pay = async () => {
|
||||
let that = this;
|
||||
// #ifdef MP-WEIXIN
|
||||
await new Promise(function (revolve) {
|
||||
//订阅号信息id
|
||||
let subscribeMss = ["8qDIfzfL19eFT-qG1PRQJBbzZSTxpzUDo3nDa1bxc3M"];
|
||||
|
||||
// wx.showModal({ // 显示微信模态对话框
|
||||
// title: '温馨提示', // 对话框标题
|
||||
// content: '为更好的促进您与商家的交流,小程序需要在您成交时向您发送消息', // 对话框内容
|
||||
// confirmText: "同意", // 确认按钮文本
|
||||
// cancelText: "拒绝", // 取消按钮文本
|
||||
// success: function(res) { // 用户点击按钮后的回调
|
||||
// if (res.confirm) { // 如果用户点击了"同意"
|
||||
// uni.requestSubscribeMessage({ // 调用uni-app的订阅消息API
|
||||
// tmplIds: subscribeMss, // 订阅消息模板ID数组
|
||||
// complete(res) { // 订阅完成回调
|
||||
// console.log(res,"打印11111111111111111") // 打印订阅结果
|
||||
// revolve(true) // 解析Promise,继续执行后续逻辑
|
||||
// }
|
||||
// });
|
||||
// } else { // 如果用户点击了"拒绝"
|
||||
// revolve(true) // 仍然解析Promise,继续执行后续逻辑
|
||||
// }
|
||||
// }
|
||||
// })
|
||||
revolve(true);
|
||||
});
|
||||
|
||||
// #endif
|
||||
uni.showLoading({
|
||||
title: "加载中",
|
||||
});
|
||||
|
||||
let data = {
|
||||
orderType: orderType.value, // 购买类型:takein=自取,takeout=外卖
|
||||
addressId: orderType.value == "takeout" ? address.value.id : 0, // 外卖配送地址
|
||||
shopId: store.value.id, // 店铺id
|
||||
mobile: member.value.mobile, // 联系电话
|
||||
gettime: takeinRange.value[defaultSelector.value[0]].value, // 取餐时间
|
||||
payType: payType.value, // 支付类型
|
||||
remark: form.value.remark, // 备注
|
||||
productId: [],
|
||||
spec: [],
|
||||
number: [],
|
||||
couponId: coupon.value.id ? coupon.value.id : 0, // 优惠券id
|
||||
distributorId: distributorId.value ? distributorId.value : null, // 分销商id
|
||||
};
|
||||
|
||||
cart.value.forEach((item, index) => {
|
||||
data.productId.push(item.id);
|
||||
data.spec.push(item.valueStr.replace(/,/g, "|"));
|
||||
//data.spec.push(item.valueStr);
|
||||
data.number.push(item.number);
|
||||
});
|
||||
|
||||
if (!data.orderType || !data.shopId || data.shopId == "undefined" || data.shopId == null) {
|
||||
uToast.value.show({
|
||||
message: "订单信息不完整,请重新下单",
|
||||
type: "error"
|
||||
});
|
||||
setTimeout(() => {
|
||||
uni.switchTab({
|
||||
url: "/pages/menu/menu"
|
||||
});
|
||||
}, 3000);
|
||||
return;
|
||||
}
|
||||
|
||||
//console.log(data);
|
||||
let order = await orderSubmit(data);
|
||||
if (!order) {
|
||||
uni.hideLoading();
|
||||
return;
|
||||
}
|
||||
|
||||
main.DEL_COUPON();
|
||||
|
||||
if (payType.value == "weixin") {
|
||||
// 微信支付
|
||||
weixinPay(order);
|
||||
} else if (payType.value == "yue") {
|
||||
// 余额支付
|
||||
balancePay(order);
|
||||
} else if (payType.value == "alipay") {
|
||||
// 余额支付
|
||||
aliPay(order);
|
||||
}
|
||||
uni.hideLoading();
|
||||
return;
|
||||
};
|
||||
const balancePay = async (order) => {
|
||||
let from = "routine";
|
||||
// #ifdef H5
|
||||
from = "h5";
|
||||
// #endif
|
||||
let pay = await payUnify({
|
||||
uni: order.orderId,
|
||||
from: from,
|
||||
paytype: "yue",
|
||||
});
|
||||
|
||||
uni.hideLoading();
|
||||
if (!pay) {
|
||||
return;
|
||||
}
|
||||
|
||||
member.value.money -= amount.value;
|
||||
main.SET_MEMBER(member.value);
|
||||
uni.removeStorageSync("cart");
|
||||
uni.switchTab({
|
||||
url: "/pages/order/order",
|
||||
fail(res) {
|
||||
console.log(res);
|
||||
},
|
||||
});
|
||||
};
|
||||
const weixinPay = async (order) => {
|
||||
let from = "routine";
|
||||
// #ifdef H5
|
||||
from = "h5";
|
||||
if (isWeixin()) {
|
||||
from = "wechat";
|
||||
}
|
||||
|
||||
// #endif
|
||||
//let that = this;
|
||||
let data = await payUnify({
|
||||
uni: order.orderId,
|
||||
from: from,
|
||||
paytype: "weixin",
|
||||
});
|
||||
console.log("param2:", data);
|
||||
if (!data) {
|
||||
uni.hideLoading();
|
||||
return;
|
||||
}
|
||||
if (data.trade_type == "MWEB") {
|
||||
// #ifdef H5
|
||||
// 微信外的H5
|
||||
console.log("data:", data);
|
||||
location.href = data.data;
|
||||
// #endif
|
||||
console.log("data1:", data);
|
||||
} else if (data.trade_type == "JSAPI") {
|
||||
console.log("param:", data);
|
||||
|
||||
// #ifdef MP-WEIXIN
|
||||
uni.requestPayment({
|
||||
provider: "wxpay",
|
||||
timeStamp: data.data.timeStamp,
|
||||
nonceStr: data.data.nonceStr,
|
||||
package: data.data.package,
|
||||
signType: "MD5",
|
||||
paySign: data.data.paySign,
|
||||
success: function (res) {
|
||||
uni.removeStorageSync("cart");
|
||||
uni.switchTab({
|
||||
url: `/pages/order/order`,
|
||||
});
|
||||
},
|
||||
fail: function (err) {
|
||||
console.log("fail:" + JSON.stringify(err));
|
||||
},
|
||||
});
|
||||
// #endif
|
||||
} else if (data.trade_type == "W-JSAPI") {
|
||||
//公众号支付
|
||||
} else if (data.trade_type == "APP") {
|
||||
}
|
||||
};
|
||||
const aliPay = async (order) => {
|
||||
// #ifdef H5
|
||||
//let that = this;
|
||||
if (isWeixin()) {
|
||||
uni.showToast({
|
||||
title: "请普通浏览器打开进行支付宝支付~",
|
||||
icon: "none",
|
||||
});
|
||||
return;
|
||||
}
|
||||
let data = await payUnify({
|
||||
uni: order.orderId,
|
||||
from: "h5",
|
||||
paytype: "alipay",
|
||||
});
|
||||
|
||||
console.log("data:", data.data);
|
||||
// 支付宝支付,这里只要提交表单
|
||||
let form = data.data;
|
||||
const div = document.createElement("formdiv");
|
||||
div.innerHTML = form;
|
||||
document.body.appendChild(div);
|
||||
//document.forms[0].setAttribute('target', ' self');
|
||||
document.forms[0].submit();
|
||||
//div.remove();
|
||||
|
||||
// #endif
|
||||
};
|
||||
|
||||
const fillMobile = () => {
|
||||
if (member.value && member.value.mobile) {
|
||||
member.value.mobile = member.value.mobile;
|
||||
} else {
|
||||
uToast.value.show({
|
||||
message: "未获取到手机号",
|
||||
type: "error"
|
||||
});
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.container {
|
||||
padding: 30rpx;
|
||||
}
|
||||
|
||||
.arrow {
|
||||
width: 50rpx;
|
||||
height: 50rpx;
|
||||
position: relative;
|
||||
margin-right: -10rpx;
|
||||
}
|
||||
|
||||
.location {
|
||||
.store-name {
|
||||
font-size: $font-size-lg;
|
||||
}
|
||||
|
||||
.iconfont {
|
||||
font-size: 50rpx;
|
||||
line-height: 100%;
|
||||
color: $color-primary;
|
||||
// color: #52ac41;
|
||||
}
|
||||
}
|
||||
|
||||
.section-1 {
|
||||
margin-bottom: 30rpx;
|
||||
|
||||
.contact {
|
||||
.contact-tip {
|
||||
margin-left: 10rpx;
|
||||
// border: 2rpx solid $color-primary;
|
||||
border: 2rpx solid #52ac41;
|
||||
|
||||
padding: 6rpx 10rpx;
|
||||
// color: $color-primary;
|
||||
color: #52ac41;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.section-2 {
|
||||
.name-and-props {
|
||||
width: 65%;
|
||||
}
|
||||
}
|
||||
|
||||
.payment {
|
||||
margin-bottom: 30rpx;
|
||||
|
||||
.disabled {
|
||||
color: $text-color-grey;
|
||||
}
|
||||
|
||||
.payment-icon {
|
||||
font-size: 44rpx;
|
||||
margin-right: 10rpx;
|
||||
}
|
||||
|
||||
.checkbox {
|
||||
font-size: 36rpx;
|
||||
margin-left: 10rpx;
|
||||
}
|
||||
|
||||
.checked {
|
||||
color: $color-primary;
|
||||
}
|
||||
}
|
||||
|
||||
.pay-box {
|
||||
box-shadow: 0 0 20rpx rgba(0, 0, 0, 0.1);
|
||||
height: 100rpx;
|
||||
}
|
||||
|
||||
.modal-content {
|
||||
.change-address-btn {
|
||||
line-height: 2;
|
||||
padding: 0 1em;
|
||||
}
|
||||
|
||||
.pay_btn {
|
||||
width: 100%;
|
||||
border-radius: 50rem !important;
|
||||
line-height: 3;
|
||||
}
|
||||
}
|
||||
|
||||
.choice {
|
||||
background-color: $bg-color-grey;
|
||||
border-radius: 38rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
font-size: $font-size-sm;
|
||||
padding: 0 38rpx;
|
||||
color: $text-color-assist;
|
||||
|
||||
.dinein,
|
||||
.takeout {
|
||||
width: 50%;
|
||||
position: relative;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
&.active {
|
||||
padding: 14rpx 38rpx;
|
||||
color: #ffffff;
|
||||
background-color: $color-primary;
|
||||
border-radius: 38rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.takeout {
|
||||
margin-left: 20rpx;
|
||||
height: 100%;
|
||||
flex: 1;
|
||||
padding: 14rpx 0;
|
||||
}
|
||||
|
||||
.dinein.active {
|
||||
//margin-left: -38rpx;
|
||||
}
|
||||
|
||||
.takeout.active {
|
||||
//margin-right: -38rpx;
|
||||
}
|
||||
}
|
||||
</style>
|
@ -196,7 +196,7 @@
|
||||
</view>
|
||||
</list-cell>
|
||||
<!-- #ifdef H5 -->
|
||||
<list-cell>
|
||||
<!-- <list-cell>
|
||||
<view class="d-flex align-items-center justify-content-between w-100" @click="setPayType('alipay')">
|
||||
<view class="iconfont-yshop icon-alipay line-height-100 payment-icon" style="color: #07b4fd"></view>
|
||||
<view class="flex-fill">支付宝</view>
|
||||
@ -204,17 +204,24 @@
|
||||
</view>
|
||||
<view class="iconfont line-height-100 checkbox iconradio-button-off" v-else></view>
|
||||
</view>
|
||||
</list-cell>
|
||||
</list-cell> -->
|
||||
<!-- #endif -->
|
||||
</view>
|
||||
<!-- 支付方式 end -->
|
||||
<!-- 备注 begin -->
|
||||
<list-cell last @click="goToRemark">
|
||||
<view class="d-flex flex-fill align-items-center justify-content-between overflow-hidden"
|
||||
style="margin-bottom: 110rpx">
|
||||
<list-cell last>
|
||||
<!-- <view class="d-flex flex-fill align-items-center justify-content-between overflow-hidden">
|
||||
<view class="flex-shrink-0 mr-20">备注</view>
|
||||
<view class="text-color-primary flex-fill text-truncate text-right" style="color: #52ac41">{{ form.remark ||
|
||||
"备注" }}
|
||||
|
||||
</view> -->
|
||||
<view class="flex-fill">
|
||||
<textarea placeholder-class="text-color-assist font-size-base" v-model="form.remark"
|
||||
class="bg-white w-100 border-box font-size-base"
|
||||
:class="{ 'text-color-danger': remarkLength > 50, 'text-color-assist': remarkLength <= 50 }"
|
||||
placeholder="请填写备注信息" />
|
||||
<view class="tips"
|
||||
:class="{ 'text-color-danger': remarkLength > 50, 'text-color-assist': remarkLength <= 50 }">
|
||||
{{ remarkLength }}/50
|
||||
</view>
|
||||
</view>
|
||||
</list-cell>
|
||||
@ -371,7 +378,7 @@ const amount = computed(() => {
|
||||
|
||||
onShow(() => {
|
||||
coupon.value = main.mycoupon;
|
||||
let date = new Date(new Date().getTime() + 3600000); // 一个小时后
|
||||
let date = new Date(new Date().getTime() + 1200000); // 一个小时后
|
||||
let hour = date.getHours();
|
||||
let minute = date.getMinutes();
|
||||
if (hour < 10) {
|
||||
@ -384,6 +391,16 @@ onShow(() => {
|
||||
|
||||
console.log("member:", member.value);
|
||||
|
||||
if (member.value.spreadUid && distributorId.value && member.value.spreadUid === distributorId.value) {
|
||||
nextTick(() => {
|
||||
uToast.value.show({
|
||||
message: "不能使用自己的分销ID支付",
|
||||
type: "error"
|
||||
});
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
if (orderType.value == "takeout") {
|
||||
active.value = true;
|
||||
} else {
|
||||
@ -404,6 +421,10 @@ onLoad((option) => {
|
||||
if (option.remark) {
|
||||
form.value.remark = option.remark;
|
||||
}
|
||||
// 接收分销员ID参数
|
||||
if (option.distributorId) {
|
||||
distributorId.value = option.distributorId;
|
||||
}
|
||||
});
|
||||
|
||||
const getSubscribeMss = async () => {
|
||||
@ -437,12 +458,12 @@ const choiceTime = (value) => {
|
||||
let hour = value.hour;
|
||||
let minute = value.minute;
|
||||
|
||||
let date = new Date(new Date().getTime() + 3600000); // 一个小时后
|
||||
let date = new Date(new Date().getTime() + 1200000); // 一个小时后
|
||||
let nowhour = date.getHours();
|
||||
let nowminute = date.getMinutes();
|
||||
|
||||
if (
|
||||
(hour * 60 * 60 + minute * 60) * 1000 - 3600000 <
|
||||
(hour * 60 * 60 + minute * 60) * 1000 - 1200000 <
|
||||
(nowhour * 60 * 60 + nowminute * 60) * 1000
|
||||
) {
|
||||
uToast.value.show({
|
||||
@ -497,10 +518,19 @@ const takout = (value) => {
|
||||
getCoupons();
|
||||
};
|
||||
const goToRemark = () => {
|
||||
uni.navigateTo({
|
||||
uni.redirectTo({
|
||||
url: "/pages/components/pages/remark/remark?remark=" + form.value.remark,
|
||||
});
|
||||
};
|
||||
|
||||
const remarkLength = computed(() => {
|
||||
return form.value.remark.length
|
||||
})
|
||||
|
||||
const isDanger = computed(() => {
|
||||
return form.value.remark.length > 50
|
||||
})
|
||||
|
||||
const chooseAddress = () => {
|
||||
uni.navigateTo({
|
||||
url: "/pages/components/pages/address/address?is_choose=true&scene=pay",
|
||||
@ -529,6 +559,15 @@ const goToShop = () => {
|
||||
});
|
||||
};
|
||||
const submit = () => {
|
||||
|
||||
if (form.value.remark.length > 50) {
|
||||
uToast.value.show({
|
||||
message: '备注不能超过50个字符',
|
||||
type: 'error'
|
||||
});
|
||||
return
|
||||
}
|
||||
|
||||
if (orderType.value == "takeout") {
|
||||
// 检查是否有商品可以单独配送
|
||||
const hasAloneSell = cart.value.some(item => item.aloneSell === 1);
|
||||
@ -902,4 +941,9 @@ const fillMobile = () => {
|
||||
//margin-right: -38rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.tips {
|
||||
font-size: 0.8em;
|
||||
text-align: right;
|
||||
}
|
||||
</style>
|
||||
|
@ -64,9 +64,9 @@ const submit = () => {
|
||||
});
|
||||
return
|
||||
}
|
||||
uni.navigateTo({
|
||||
uni.redirectTo({
|
||||
url: "/pages/components/pages/pay/pay?remark=" + remark.value
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
background-color: rgba(255, 255, 255, 1);
|
||||
position: relative;
|
||||
width: 750rpx;
|
||||
height: 1624rpx;
|
||||
height: auto;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
@ -19,13 +19,13 @@
|
||||
|
||||
.group_8 {
|
||||
width: 507rpx;
|
||||
height: 178rpx;
|
||||
height: auto;
|
||||
margin: 111rpx 0 0 121rpx;
|
||||
}
|
||||
|
||||
.group_9 {
|
||||
width: 136rpx;
|
||||
height: 171rpx;
|
||||
height: auto;
|
||||
margin-top: 7rpx;
|
||||
}
|
||||
|
||||
@ -70,7 +70,7 @@
|
||||
|
||||
.image-text_7 {
|
||||
width: 136rpx;
|
||||
height: 178rpx;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.image_2 {
|
||||
|
@ -5,15 +5,15 @@
|
||||
offset-top="0"
|
||||
customNavHeight="0"
|
||||
>
|
||||
<uv-navbar
|
||||
<!-- <uv-navbar
|
||||
:fixed="false"
|
||||
:safeAreaInsetTop="true"
|
||||
height="0"
|
||||
bgColor="transparent"
|
||||
leftIcon=""
|
||||
/>
|
||||
/> -->
|
||||
<!-- #ifndef MP -->
|
||||
<blank size="10"></blank>
|
||||
<blank size="0"></blank>
|
||||
<!-- #endif -->
|
||||
|
||||
<blank size="0"></blank>
|
||||
@ -31,6 +31,7 @@
|
||||
class="image_1"
|
||||
referrerpolicy="no-referrer"
|
||||
src="/static/images/index/store_pickup.png"
|
||||
mode="widthFix"
|
||||
/>
|
||||
<view class="text-group_13 flex-col justify-between">
|
||||
<text class="text_1">到店自取</text>
|
||||
@ -175,6 +176,20 @@ onLoad(() => {
|
||||
// main.init()
|
||||
handGetListAds()
|
||||
})
|
||||
const onShareAppMessage = (res) => {
|
||||
return {
|
||||
title: '爱愈膳汤浦', // 分享卡片标题
|
||||
path: '/pages/index/index', // 分享后打开的页面路径(可携带参数)
|
||||
imageUrl: 'https://file.aiyushantp.com/file/b22aa4e4625714e2747b15cfa174ea2351e59df4bacec69d338f9c87c7dae5ca.png' // 分享卡片图片(建议300x300像素)
|
||||
}
|
||||
}
|
||||
|
||||
const onShareTimeline = () => {
|
||||
return {
|
||||
title: '爱愈膳汤浦', // 分享卡片标题
|
||||
imageUrl: 'https://file.aiyushantp.com/file/b22aa4e4625714e2747b15cfa174ea2351e59df4bacec69d338f9c87c7dae5ca.png' // 分享卡片图片(建议300x300像素)
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
|
@ -30,13 +30,15 @@
|
||||
</view>
|
||||
<view class="left overflow-hidden" v-else>
|
||||
<view class="store-name flex-row align-center" @click="selectShop()">
|
||||
<view>{{ store.name }}
|
||||
<text class="small" v-if="store.distance > 0 && orderType == 'takeout'">(配送距离:
|
||||
{{ store.distance }}km)</text>
|
||||
<text class="small" v-else-if="orderType == 'takeout'">(本店不支持外卖)</text>
|
||||
</view>
|
||||
<view style="font-weight: 800">{{ store.name }}</view>
|
||||
|
||||
<view class="iconfont iconarrow-right"></view>
|
||||
</view>
|
||||
<view class="store-location flex-row align-center">
|
||||
<text class="small" v-if="store.distance > 0 && orderType == 'takeout'">(配送距离: {{
|
||||
store.distance }}km)</text>
|
||||
<text class="small" v-else-if="orderType == 'takeout'">(本店不支持外卖)</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="order-type flex-row">
|
||||
@ -101,13 +103,59 @@
|
||||
<view class="category-items">
|
||||
<!-- 商品 begin -->
|
||||
<view class="good-card" v-for="(good, key) in item.goodsList" :key="key"
|
||||
:class="{ 'sold-out': good.stock <= 0 }">
|
||||
:class="{ 'sold-out': good.stock <= 0, 'large-image': isSpecialPackage(good.storeName) }">
|
||||
<template v-if="isSpecialPackage(good.storeName)">
|
||||
<image mode="aspectFill" :src="good.image" class="good-image-large"
|
||||
@tap="showGoodDetailModal(item, good)"></image>
|
||||
<view class="good-details-large flex-row justify-between">
|
||||
<view class="good-info" style="flex: 2; padding-right: 20rpx;">
|
||||
<text class="good-name">{{ good.storeName }}</text>
|
||||
<text class="good-description">{{ good.storeInfo }}</text>
|
||||
</view>
|
||||
<view class="price-action" style="flex: 1;">
|
||||
<text class="good-price">¥{{ good.price }}</text>
|
||||
<view class="action-buttons" v-if="good.stock > 0">
|
||||
<button type="primary" class="spec-button"
|
||||
hover-class="none" size="mini"
|
||||
@tap="showGoodDetailModal(item, good)">
|
||||
<view class="iconfont iconadd-select"></view>
|
||||
</button>
|
||||
<view class="item-badge" v-if="goodCartNum(good.id)">
|
||||
{{ goodCartNum(good.id) }}
|
||||
</view>
|
||||
</view>
|
||||
<view class="sold-out-label" v-if="good.stock == 0">已售罄
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<template v-else>
|
||||
<image mode="aspectFill" :src="good.image" class="good-image"
|
||||
@tap="showGoodDetailModal(item, good)"></image>
|
||||
<!-- <image mode="aspectFill"
|
||||
src="https://lanhu-oss-2537-2.lanhuapp.com/FigmaDDSSlicePNG62414071ec6e0e4e00603407efd42e53.png"
|
||||
class="good-image" @tap="showGoodDetailModal(item, good)"></image> -->
|
||||
<!-- https://lanhu-oss-2537-2.lanhuapp.com/FigmaDDSSlicePNG62414071ec6e0e4e00603407efd42e53.png -->
|
||||
<view class="good-details">
|
||||
<text class="good-name">{{ good.storeName }}</text>
|
||||
<text class="good-description">{{ good.storeInfo }}</text>
|
||||
<view
|
||||
class="price-action flex-row justify-between align-center">
|
||||
<text class="good-price">¥{{ good.price }}</text>
|
||||
<view class="action-buttons" v-if="good.stock > 0">
|
||||
<button type="primary" class="spec-button"
|
||||
hover-class="none" size="mini"
|
||||
@tap="showGoodDetailModal(item, good)">
|
||||
<view class="iconfont iconadd-select"></view>
|
||||
</button>
|
||||
<view class="item-badge" v-if="goodCartNum(good.id)">
|
||||
{{ goodCartNum(good.id) }}
|
||||
</view>
|
||||
</view>
|
||||
<view class="sold-out-label" v-if="good.stock == 0">已售罄
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
<!-- <image mode="aspectFill" :src="good.image" class="good-image"
|
||||
@tap="showGoodDetailModal(item, good)"></image>
|
||||
<view class="good-details">
|
||||
<text class="good-name">{{ good.storeName }}</text>
|
||||
<text class="good-description">{{ good.storeInfo }}</text>
|
||||
@ -119,19 +167,33 @@
|
||||
@tap="showGoodDetailModal(item, good)">
|
||||
<view class="iconfont iconadd-select"></view>
|
||||
</button>
|
||||
<view class="item-badge" v-show="goodCartNum(good.id)">
|
||||
<view class="item-badge" v-if="goodCartNum(good.id)">
|
||||
{{ goodCartNum(good.id) }}
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="sold-out-label" v-if="good.stock == 0">已售罄</view>
|
||||
</view>
|
||||
</view>
|
||||
</view> -->
|
||||
</view>
|
||||
<!-- 商品 end -->
|
||||
|
||||
</view>
|
||||
</view>
|
||||
<!-- category end -->
|
||||
<!-- 提示 begin -->
|
||||
<view class="title_title flex-row justify-between">
|
||||
<image
|
||||
class="title_image"
|
||||
referrerpolicy="no-referrer"
|
||||
src="https://file.aiyushantp.com/file/ea023e706e727e5c6dd4437382df9e36ea43d742c2d364e8c4b79997abfa6131.png"
|
||||
/>
|
||||
<text class="title_a">致敏物质提示:</text>
|
||||
</view>
|
||||
<text class="title_content">
|
||||
本菜单中含有含麸质的谷物及其制品,甲壳类动物及甲壳类动物制品,蛋类及蛋类制品,鱼类及鱼类制品,花生、大豆及其制品,奶类及奶类制品,木本坚果及坚果制品。汤内含有当归,当归不适宜人群有脾胃虚弱、腹泻、孕妇、经期女性、热盛出血及当归过敏者。
|
||||
</text>
|
||||
<!-- 提示 end -->
|
||||
</view>
|
||||
</view>
|
||||
</scroll-view>
|
||||
@ -172,8 +234,9 @@
|
||||
<view class="modal-content">
|
||||
<view class="good-basic-info">
|
||||
<view class="good-title">{{ good.storeName }}</view>
|
||||
<view class="good-subtitle flex justify-between">{{ good.storeInfo }} <text
|
||||
class="points-info">可获积分:10</text></view>
|
||||
<view class="good-subtitle flex justify-between">{{ good.storeInfo }}
|
||||
<!-- <text class="points-info">可获积分:10</text> -->
|
||||
</view>
|
||||
</view>
|
||||
<view class="good-properties">
|
||||
<view class="property-item" v-for="(item, index) in good.productAttr" :key="index">
|
||||
@ -332,6 +395,7 @@ const newValue = ref([]);
|
||||
const shopAd = ref(
|
||||
"https://lanhu-oss-2537-2.lanhuapp.com/FigmaDDSSlicePNGca115cd446d280796935fea74b5cd20f.png"
|
||||
);
|
||||
const distributorId = ref(null); // 配送员id
|
||||
const isCartShow = ref(true);
|
||||
const popup = ref();
|
||||
const headerHeight = ref(300); // 头部区域高度(rpx)
|
||||
@ -401,7 +465,27 @@ uni.$on("refreshMenu", () => {
|
||||
onPullDownRefresh(() => {
|
||||
init();
|
||||
});
|
||||
onLoad(() => {
|
||||
onLoad((options) => {
|
||||
// 处理扫描二维码进入的情况
|
||||
if (options && options.q) {
|
||||
try {
|
||||
// 解码URL
|
||||
const decodedUrl = decodeURIComponent(options.q);
|
||||
// 使用正则表达式提取参数
|
||||
const distributorIdMatch = decodedUrl.match(/distributorId=([^&]*)/);
|
||||
const disId = distributorIdMatch ? distributorIdMatch[1] : null;
|
||||
if (disId) {
|
||||
// 处理分销员ID逻辑
|
||||
distributorId.value = disId;
|
||||
}
|
||||
} catch (e) {
|
||||
console.error('解析二维码URL失败:', e);
|
||||
}
|
||||
}
|
||||
if (options && options.distributorId) {
|
||||
console.log("distributorId111111111111111分销员页面分享:", options.distributorId);
|
||||
distributorId.value = options.distributorId;
|
||||
}
|
||||
init();
|
||||
refreshCart();
|
||||
nextTick(() => {
|
||||
@ -409,6 +493,7 @@ onLoad(() => {
|
||||
currentCateId.value = goods.value[0].id;
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
onHide(() => {
|
||||
// 重新进入要重新计算页面高度,否则有问题
|
||||
@ -741,11 +826,10 @@ const calcLayoutHeights = () => {
|
||||
// sizeCalcState.value = true
|
||||
// }
|
||||
const handleAddToCart = (cate, newGood, num) => {
|
||||
console.log("handleAddToCart121212:", cate, newGood, num);
|
||||
//添加到购物车
|
||||
const index = cart.value.findIndex((item) => {
|
||||
if (newGood) {
|
||||
return item.id === newGood.id && item.props_text === good.value.valueStr;
|
||||
return item.id === newGood.id && item.valueStr === good.value.valueStr;
|
||||
} else {
|
||||
return item.id === newGood.id;
|
||||
}
|
||||
@ -916,7 +1000,7 @@ const toPay = () => {
|
||||
uni.setStorageSync("cart", JSON.parse(JSON.stringify(cart.value)));
|
||||
|
||||
uni.navigateTo({
|
||||
url: "/pages/components/pages/pay/pay",
|
||||
url: `/pages/components/pages/pay/pay?distributorId=${distributorId.value}`,
|
||||
});
|
||||
}
|
||||
|
||||
@ -933,6 +1017,16 @@ const toPackingFeeDetail = () => {
|
||||
// url: "/pages/components/pages/packing-fee/packing-fee"
|
||||
// });
|
||||
};
|
||||
|
||||
const isSpecialPackage = (name) => {
|
||||
const specialNames = [
|
||||
"原鲜本味鸽子汤套餐",
|
||||
"原味老鸡汤套餐",
|
||||
"黑毛猪浓香筒骨汤套餐",
|
||||
"杜仲劲爽半筋牛肉汤套餐"
|
||||
];
|
||||
return specialNames.includes(name);
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@ -972,7 +1066,7 @@ page {
|
||||
|
||||
.flex-row {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.justify-between {
|
||||
@ -1020,7 +1114,7 @@ page {
|
||||
|
||||
.store-name {
|
||||
font-size: 32rpx;
|
||||
font-weight: 500;
|
||||
font-weight: 800;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
@ -1184,17 +1278,19 @@ page {
|
||||
.good-description {
|
||||
font-size: 22rpx;
|
||||
color: #999;
|
||||
margin-bottom: 30rpx;
|
||||
}
|
||||
|
||||
.price-action {
|
||||
margin-top: auto;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: flex-end;
|
||||
}
|
||||
|
||||
.good-price {
|
||||
font-size: 32rpx;
|
||||
font-weight: 500;
|
||||
color: #000;
|
||||
margin-bottom: 10rpx;
|
||||
}
|
||||
|
||||
.action-buttons {
|
||||
@ -1545,4 +1641,62 @@ button[type="primary"] {
|
||||
height: 6rpx;
|
||||
margin: 194rpx 0 0 319rpx;
|
||||
}
|
||||
|
||||
.good-image-large {
|
||||
width: 100%;
|
||||
height: 300rpx;
|
||||
border-radius: 8rpx;
|
||||
object-fit: cover;
|
||||
}
|
||||
|
||||
.good-details-large {
|
||||
width: 100%;
|
||||
margin-top: 20rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.large-image {
|
||||
flex-direction: column;
|
||||
padding: 20rpx;
|
||||
}
|
||||
|
||||
.good-info {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.title_title {
|
||||
width: 183rpx;
|
||||
height: 34rpx;
|
||||
}
|
||||
|
||||
.title_image {
|
||||
width: 32rpx;
|
||||
height: 32rpx;
|
||||
margin-top: 1rpx;
|
||||
}
|
||||
|
||||
.title_a {
|
||||
width: 151rpx;
|
||||
height: 34rpx;
|
||||
overflow-wrap: break-word;
|
||||
color: rgba(153, 153, 153, 1);
|
||||
font-size: 24rpx;
|
||||
font-family: PingFang SC-Regular;
|
||||
font-weight: normal;
|
||||
text-align: left;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.title_content {
|
||||
width: 540rpx;
|
||||
height: 155rpx;
|
||||
overflow-wrap: break-word;
|
||||
color: rgba(153, 153, 153, 1);
|
||||
font-size: 22rpx;
|
||||
font-family: PingFang SC-Regular;
|
||||
font-weight: normal;
|
||||
text-align: left;
|
||||
}
|
||||
</style>
|
@ -2,28 +2,20 @@
|
||||
<view class="page flex-col">
|
||||
<view class="box_1 flex-row">
|
||||
<view class="image-wrapper_1 flex-col">
|
||||
<image
|
||||
class="image_1"
|
||||
:src="
|
||||
isLogin
|
||||
<image class="image_1" :src="isLogin
|
||||
? member.avatar
|
||||
? member.avatar
|
||||
: '/static/images/mine/default.png'
|
||||
: '/static/images/mine/default.png'
|
||||
"
|
||||
/>
|
||||
" />
|
||||
</view>
|
||||
<view class="text-group_1 flex-col justify-between">
|
||||
<text
|
||||
class="text_1"
|
||||
v-if="isLogin"
|
||||
@tap="
|
||||
<text class="text_1" v-if="isLogin" @tap="
|
||||
serv({
|
||||
type: 'pages',
|
||||
pages: '/pages/components/pages/mine/userinfo',
|
||||
})
|
||||
"
|
||||
>
|
||||
">
|
||||
Hi, {{ member.nickname }}
|
||||
</text>
|
||||
<text class="text_1" v-else @tap="login"> Hi, 游客 </text>
|
||||
@ -37,20 +29,14 @@
|
||||
<text class="text_4">积分</text>
|
||||
<view class="group_3 flex-row justify-between">
|
||||
<text class="text_5">{{ isLogin ? member.integral : 0 }}</text>
|
||||
<view
|
||||
class="box_7 flex-row justify-end"
|
||||
@tap="
|
||||
<view class="box_7 flex-row justify-end" @tap="
|
||||
serv({
|
||||
type: 'pages',
|
||||
pages: '/pages/components/pages/balance/bill?cate=1',
|
||||
})
|
||||
"
|
||||
>
|
||||
">
|
||||
<text class="text_6">去兑换</text>
|
||||
<image
|
||||
class="label_2"
|
||||
src="/static/images/mine/arrow_right_small.png"
|
||||
/>
|
||||
<image class="label_2" src="/static/images/mine/arrow_right_small.png" />
|
||||
</view>
|
||||
</view>
|
||||
<text class="text_7">积分可用于兑换产品</text>
|
||||
@ -60,20 +46,14 @@
|
||||
<text class="text_8">优惠券</text>
|
||||
<view class="section_1 flex-row justify-between">
|
||||
<text class="text_9">{{ isLogin ? member.couponCount : 0 }}</text>
|
||||
<view
|
||||
class="block_1 flex-row justify-end"
|
||||
@tap="
|
||||
<view class="block_1 flex-row justify-end" @tap="
|
||||
serv({
|
||||
type: 'pages',
|
||||
pages: '/pages/components/pages/coupons/coupons',
|
||||
})
|
||||
"
|
||||
>
|
||||
">
|
||||
<text class="text_10">去使用</text>
|
||||
<image
|
||||
class="label_3"
|
||||
src="/static/images/mine/arrow_right_small.png"
|
||||
/>
|
||||
<image class="label_3" src="/static/images/mine/arrow_right_small.png" />
|
||||
</view>
|
||||
</view>
|
||||
<text class="text_11">使用优惠券享受更多优惠</text>
|
||||
@ -91,19 +71,16 @@
|
||||
<image class="label_5" src="/static/images/mine/arrow_right.png" />
|
||||
</view> -->
|
||||
<!-- 订单 -->
|
||||
<view v-if="index === 0" class="box_8 flex-row" @tap="serv(item)">
|
||||
<!-- <view v-if="index === 1" class="box_8 flex-row" @tap="serv(item)">
|
||||
<view class="image-wrapper_3 flex-col">
|
||||
<image
|
||||
class="label_4"
|
||||
:src="item.image || '/static/images/mine/order_icon.png'"
|
||||
/>
|
||||
<image class="label_4" :src="item.image || '/static/images/mine/order_icon.png'" />
|
||||
</view>
|
||||
<text class="text_12">{{ item.name }}</text>
|
||||
<image class="label_5" src="/static/images/mine/arrow_right.png" />
|
||||
</view>
|
||||
</view> -->
|
||||
|
||||
<!-- 历史消费 -->
|
||||
<view
|
||||
<!-- <view
|
||||
v-else-if="index === 1"
|
||||
class="box_9 flex-row"
|
||||
@tap="
|
||||
@ -121,10 +98,10 @@
|
||||
</view>
|
||||
<text class="text_13">历史消费</text>
|
||||
<image class="label_6" src="/static/images/mine/arrow_right.png" />
|
||||
</view>
|
||||
</view> -->
|
||||
|
||||
<!-- 客服 -->
|
||||
<view v-else-if="index === 2" class="box_11 flex-row" @tap="serv(item)">
|
||||
<!-- <view v-else-if="index === 2" class="box_11 flex-row" @tap="serv(item)">
|
||||
<view class="image-wrapper_5 flex-col">
|
||||
<image
|
||||
class="label_7"
|
||||
@ -135,10 +112,10 @@
|
||||
</view>
|
||||
<text class="text_14">{{ item.name }}</text>
|
||||
<image class="label_8" src="/static/images/mine/arrow_right.png" />
|
||||
</view>
|
||||
</view> -->
|
||||
|
||||
<!-- 地址 -->
|
||||
<view v-else-if="index === 3" class="box_12 flex-row" @tap="serv(item)">
|
||||
<!-- <view v-else-if="index === 3" class="box_12 flex-row" @tap="serv(item)">
|
||||
<view class="section_3 flex-col">
|
||||
<image
|
||||
class="label_4"
|
||||
@ -147,15 +124,12 @@
|
||||
</view>
|
||||
<text class="text_15">{{ item.name }}</text>
|
||||
<image class="label_9" src="/static/images/mine/arrow_right.png" />
|
||||
</view>
|
||||
</view> -->
|
||||
|
||||
<!-- 其他服务项 -->
|
||||
<view v-else class="box_14 flex-row" @tap="serv(item)">
|
||||
<view class="box_14 flex-row" @tap="serv(item)">
|
||||
<view class="image-wrapper_6 flex-col">
|
||||
<image
|
||||
class="label_10"
|
||||
:src="item.image || '/static/images/mine/help_center_icon.png'"
|
||||
/>
|
||||
<image class="label_10" :src="item.image || '/static/images/mine/help_center_icon.png'" />
|
||||
</view>
|
||||
<text class="text_16">{{ item.name }}</text>
|
||||
<image class="label_11" src="/static/images/mine/arrow_right.png" />
|
||||
@ -248,10 +222,25 @@ const serv = (item) => {
|
||||
url: `${item.pages}?spreadUid=${member.value.spreadUid}`,
|
||||
});
|
||||
}
|
||||
} else if(item.pages === "/pages/components/pages/invoice/invoice") {
|
||||
} else if (item.pages === "/pages/components/pages/invoice/invoice") {
|
||||
uni.navigateTo({
|
||||
url: `/pages/components/pages/invoice/invoice?userId=${member.value.id}`,
|
||||
});
|
||||
} else if (item.pages === "/pages/order/order") {
|
||||
uni.switchTab({
|
||||
url: '/pages/order/order'
|
||||
});
|
||||
} else if (item.pages === "/pages/components/pages/mine/helpcenter") {
|
||||
uni.navigateTo({
|
||||
url:
|
||||
"/pages/components/pages/mine/helpcenter?id=" +
|
||||
item.id +
|
||||
"&name=" +
|
||||
item.name +
|
||||
"&phone=" +
|
||||
item.phone,
|
||||
});
|
||||
break;
|
||||
} else {
|
||||
uni.navigateTo({
|
||||
url: item.pages,
|
||||
|
@ -8,33 +8,21 @@
|
||||
</view>
|
||||
</view>
|
||||
<view class="text-wrapper_9 flex-row justify-between">
|
||||
<text
|
||||
v-for="(item, index) in tabList"
|
||||
:key="index"
|
||||
:class="[
|
||||
<text v-for="(item, index) in tabList" :key="index" :class="[
|
||||
'tab-text',
|
||||
current === index ? 'tab-active' : 'tab-inactive',
|
||||
]"
|
||||
@tap="change({ type: item.type, index })"
|
||||
>
|
||||
]" @tap="change({ type: item.type, index })">
|
||||
{{ item.name }}
|
||||
</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="box_5 flex-col">
|
||||
<!-- 订单列表 -->
|
||||
<view
|
||||
v-for="(item, index) in orders"
|
||||
:key="index"
|
||||
class="section_4 flex-col"
|
||||
@tap="detail(item.orderId)"
|
||||
>
|
||||
<view v-for="(item, index) in orders" :key="index" class="section_4 flex-col" @tap="detail(item.orderId)">
|
||||
<view class="group_3 flex-row justify-between">
|
||||
<view class="text-group_3 flex-col justify-between">
|
||||
<text class="text_6">{{ item.shop.name }}</text>
|
||||
<text class="text_7"
|
||||
>下单日期:{{ formatDateTime(item.createTime) }}</text
|
||||
>
|
||||
<text class="text_7">下单日期:{{ formatDateTime(item.createTime) }}</text>
|
||||
</view>
|
||||
<view class="section_9 flex-col justify-between">
|
||||
<!-- <view class="text-wrapper_4 flex-col">
|
||||
@ -53,22 +41,12 @@
|
||||
|
||||
<!-- 订单商品信息 -->
|
||||
<view class="order-goods flex-col">
|
||||
<view
|
||||
class="flex goods-item"
|
||||
v-for="(good, goodIndex) in item.cartInfo"
|
||||
:key="goodIndex"
|
||||
>
|
||||
<image
|
||||
:src="good.image"
|
||||
mode="aspectFill"
|
||||
class="goods-image"
|
||||
></image>
|
||||
<view class="flex goods-item" v-for="(good, goodIndex) in item.cartInfo" :key="goodIndex">
|
||||
<image :src="good.image" mode="aspectFill" class="goods-image"></image>
|
||||
<view class="flex flex-column goods-info">
|
||||
<view class="goods-title">{{ good.title }}</view>
|
||||
<view class="goods-spec">{{ good.spec }}</view>
|
||||
<view class="goods-price"
|
||||
>×{{ good.number }} ¥{{ good.price }}</view
|
||||
>
|
||||
<view class="goods-price">×{{ good.number }} ¥{{ good.price }}</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
@ -76,19 +54,13 @@
|
||||
<!-- 操作按钮 -->
|
||||
<!-- 支付按钮 -->
|
||||
<view class="group_4 flex-row">
|
||||
<view
|
||||
v-if="item.statusDto.type === '0'"
|
||||
class="text-wrapper_6 flex-col action-button"
|
||||
@tap.stop="handlePay(item)"
|
||||
>
|
||||
<view v-if="item.statusDto.type === '0'" class="text-wrapper_6 flex-col action-button"
|
||||
@tap.stop="handlePay(item)">
|
||||
<text class="text_11">支付</text>
|
||||
</view>
|
||||
<!-- 发票按钮 -->
|
||||
<view
|
||||
v-if="item.statusDto.type === '4'"
|
||||
class="text-wrapper_6 flex-col action-button"
|
||||
@tap.stop="handleInvoice(item)"
|
||||
>
|
||||
<view v-if="item.statusDto.type === '4'" class="text-wrapper_6 flex-col action-button"
|
||||
@tap.stop="handleInvoice(item)">
|
||||
<text class="text_11">
|
||||
{{
|
||||
item.invoiceStatus === "UNREQUESTED"
|
||||
@ -102,17 +74,16 @@
|
||||
</text>
|
||||
</view>
|
||||
|
||||
<view
|
||||
v-if="item.paid > 0 && item.status < 2 && item.refundStatus == 0"
|
||||
class="text-wrapper_6 flex-col action-button"
|
||||
@tap.stop="receive(item)"
|
||||
>
|
||||
<view v-if="item.paid > 0 && item.status < 2 && item.refundStatus == 0"
|
||||
class="text-wrapper_6 flex-col action-button" @tap.stop="receive(item)">
|
||||
<text class="text_11">确认收到餐</text>
|
||||
</view>
|
||||
<view
|
||||
class="text-wrapper_6 flex-col action-button detail-button"
|
||||
@tap.stop="detail(item.orderId)"
|
||||
>
|
||||
<view v-if="item.refundStatus == 2" class="text-wrapper_6 flex-col action-button"
|
||||
style="background-color: #f0f0f0;">
|
||||
<text class="text_11" style="color: #999;">已退款</text>
|
||||
</view>
|
||||
|
||||
<view class="text-wrapper_6 flex-col action-button detail-button" @tap.stop="detail(item.orderId)">
|
||||
<text class="text_11">订单详情</text>
|
||||
</view>
|
||||
</view>
|
||||
@ -136,6 +107,7 @@ import {
|
||||
} from "@dcloudio/uni-app";
|
||||
import { formatDateTime, kmUnit } from "@/utils/util";
|
||||
import { orderGetOrders, orderReceive } from "@/api/order";
|
||||
import { checkUserInvoiceInfo } from "@/api/invoice";
|
||||
import { applyInvoice } from "@/api/order";
|
||||
|
||||
// 确保导入payUnify方法
|
||||
@ -143,7 +115,7 @@ import { payUnify } from "@/api/order";
|
||||
import { isWeixin } from "@/utils/util";
|
||||
|
||||
const main = useMainStore();
|
||||
const { isLogin } = storeToRefs(main);
|
||||
const { member, isLogin } = storeToRefs(main);
|
||||
const title = ref("我的订单");
|
||||
|
||||
const page = ref(1);
|
||||
@ -186,7 +158,9 @@ onLoad(() => {
|
||||
if (!isLogin.value) {
|
||||
uni.navigateTo({ url: "/pages/components/pages/login/login" });
|
||||
}
|
||||
onShow();
|
||||
if (isLogin.value) {
|
||||
getOrders(true); // 每次显示页面时刷新订单数据
|
||||
}
|
||||
});
|
||||
onShow(() => {
|
||||
if (isLogin.value) {
|
||||
@ -289,12 +263,28 @@ const handlePay = async (item) => {
|
||||
const handleInvoice = async (item) => {
|
||||
if (item.invoiceStatus === "UNREQUESTED") {
|
||||
// 申请发票
|
||||
|
||||
const checkInvoice = await checkUserInvoiceInfo();
|
||||
if (checkInvoice) {
|
||||
const res = await applyInvoice(item.orderId);
|
||||
if (res) {
|
||||
uni.showToast({ title: "发票申请已提交", icon: "success" });
|
||||
await getOrders(true); // 刷新订单列表
|
||||
}
|
||||
} else {
|
||||
// 提示用户未填写开发票所需信息
|
||||
uni.showToast({
|
||||
title: '未填写开发票所需信息,请先填写',
|
||||
icon: 'none',
|
||||
duration: 1500
|
||||
});
|
||||
// 2s 后跳转到指定页面
|
||||
setTimeout(() => {
|
||||
uni.navigateTo({
|
||||
url: `/pages/components/pages/invoice/invoice?userId=${member.value.id}`,
|
||||
});
|
||||
}, 1500);
|
||||
}
|
||||
|
||||
} else if (item.invoiceStatus === "SUCCESS") {
|
||||
// 下载发票
|
||||
if (item.invoiceAddress) {
|
||||
|
24
utils/share.js
Normal file
24
utils/share.js
Normal file
@ -0,0 +1,24 @@
|
||||
// utils/share.js
|
||||
export default {
|
||||
onLoad() { // 创建时设置统一页面的默认值
|
||||
uni.$mpShare = {
|
||||
title: '爱愈膳汤浦',
|
||||
path: '/pages/index/index',
|
||||
imageUrl: 'https://file.aiyushantp.com/file/b22aa4e4625714e2747b15cfa174ea2351e59df4bacec69d338f9c87c7dae5ca.png' // 全局图片链接
|
||||
}
|
||||
},
|
||||
onShareAppMessage() { //发送给朋友
|
||||
console.log(uni.$mpShare);
|
||||
return uni.$mpShare
|
||||
},
|
||||
onShareTimeline() { //分享到朋友圈
|
||||
return uni.$mpShare
|
||||
},
|
||||
onUnload() { // 关闭页面时重置
|
||||
uni.$mpShare = {
|
||||
title: '爱愈膳汤浦',
|
||||
path: '/pages/index/index',
|
||||
imageUrl: 'https://file.aiyushantp.com/file/b22aa4e4625714e2747b15cfa174ea2351e59df4bacec69d338f9c87c7dae5ca.png' // 全局图片链接
|
||||
}
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user