Commit 1b70b3d7 authored by spc's avatar spc

merge activity-page

parent 18232b63
......@@ -17,9 +17,9 @@
<image class="diamondbtn" :src="`${$baseUrl}${BABY_CLASS_IMAGES.DIAMOND.BTN}`" mode="aspectFit"
@click="jump('diamond')"></image>
<!-- <image class="diamonddesc" :src="`${$baseUrl}${BABY_CLASS_IMAGES.DIAMOND.DESC}`" mode="aspectFit"></image> -->
<view class="diamonddesc" :style="{ color: getColor() }">
<!-- <view class="diamonddesc" :style="{ color: getColor() }">
7类课程:⼩⼉常⻅病-急救,产后恢复运动实操课,痱⼦,尿布疹,⼩⼉常⻅病-常⻅疾病护理,新⽣⼉⻩疸,⼉童安全⽤药操作课
</view>
</view>-->
</view>
<view v-if="currentLevelName === 'starshine'" class="starshine">
......@@ -40,9 +40,9 @@
@click="jump('starshine')"></image>
<!-- <image class="starshinedesc" :src="`${$baseUrl}${BABY_CLASS_IMAGES.STARSHINE.DESC}`" mode="aspectFit">
</image> -->
<view class="starshinedesc" :style="{ color: getColor() }">
<!-- <view class="starshinedesc" :style="{ color: getColor() }">
7类课程:⼩⼉常⻅病-急救,产后恢复运动实操课,痱⼦,尿布疹,⼩⼉常⻅病-常⻅疾病护理,新⽣⼉⻩疸,⼉童安全⽤药操作课
</view>
</view>-->
</view>
<view v-if="currentLevelName === 'starlight'" class="starlight">
......@@ -63,9 +63,9 @@
@click="jump('starlight')"></image>
<!-- <image class="starlightdesc" :src="`${$baseUrl}${BABY_CLASS_IMAGES.STARLIGHT.DESC}`" mode="aspectFit">
</image> -->
<view class="starlightdesc" :style="{ color: getColor() }">
<!-- <view class="starlightdesc" :style="{ color: getColor() }">
7类课程:⼩⼉常⻅病-急救,产后恢复运动实操课,痱⼦,尿布疹,⼩⼉常⻅病-常⻅疾病护理,新⽣⼉⻩疸,⼉童安全⽤药操作课
</view>
</view>-->
</view>
<view v-if="currentLevelName === 'gold'" class="gold">
......@@ -80,9 +80,9 @@
<image class="goldbtn" :src="`${$baseUrl}${BABY_CLASS_IMAGES.GOLD.BTN}`" mode="aspectFit"
@click="jump('gold')"></image>
<!-- <image class="golddesc" :src="`${$baseUrl}${BABY_CLASS_IMAGES.GOLD.DESC}`" mode="aspectFit"></image> -->
<view class="golddesc" :style="{ color: getColor() }">
<!-- <view class="golddesc" :style="{ color: getColor() }">
5类课程:产检,⼉童疫苗,婴幼⼉护理,⼩⼉发热,⼩⼉7种常⻅病的治疗⽅法和⽤药原则
</view>
</view>-->
</view>
<view v-if="currentLevelName === 'platinum'" class="platinum">
......@@ -102,9 +102,9 @@
<image class="platinumbtn" :src="`${$baseUrl}${BABY_CLASS_IMAGES.PLATINUM.BTN}`" mode="aspectFit"
@click="jump('platinum')"></image>
<!-- <image class="platinumdesc" :src="`${$baseUrl}${BABY_CLASS_IMAGES.PLATINUM.DESC}`" mode="aspectFit"></image> -->
<view class="platinumdesc" :style="{ color: getColor() }">
<!-- <view class="platinumdesc" :style="{ color: getColor() }">
5类课程:产检,⼉童疫苗,婴幼⼉护理,⼩⼉发热,⼩⼉7种常⻅病的治疗⽅法和⽤药原则
</view>
</view>-->
</view>
</view>
......@@ -195,7 +195,8 @@ const jump = (level) => {
// 跳转到 H5 页面,地址暂时默认 https://www.baidu.com
// 可以根据不同等级跳转到不同的地址
const url = 'https://member.feihe.com/memberH5/#/courses'
//const url = 'https://member.feihe.com/memberH5/#/courses'
const url = 'https://mom.feihe.com/expertsView?from=home'
// 使用 uni.navigateTo 跳转到 webview 页面
uni.navigateTo({
......
......@@ -44,7 +44,7 @@
<template v-if="type == '2'">
{{ isType == '0' ? '添加状态' : isType == '3' ? '我知道了' : isType == '1' ? '切换状态' : '修改状态' }}
</template>
<button v-if="isNotLogin" type="primary" class="phone-button" open-type="getPhoneNumber"
<button v-if="false && isNotLogin" type="primary" class="phone-button" open-type="getPhoneNumber"
@getphonenumber="getRealtimePhoneNumber" />
</view>
</view>
......@@ -60,6 +60,7 @@ import {
watch
} from 'vue'
import { useUserStore } from "@/stores/user";
import {jump, JumpType} from "@/utils";
// 接受父组件参数
const props = defineProps({
type: {
......@@ -147,6 +148,10 @@ const modifyState = async () => {
// 跳转新增产检页面
const onAdd = () => {
if (props.isNotLogin == true) {
jump({
type: JumpType.INNER,
url: "/pages/activity/register",
})
return;
}
// 0 添加状态或者宝宝 1 切换状态 2 修改状态 3 宝宝已达上限
......
......@@ -812,4 +812,4 @@
}
]
}
}
\ No newline at end of file
}
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -5,350 +5,9 @@
"packages": {
"": {
"dependencies": {
"@vue/language-server": "^3.1.0",
"crypto-js": "^4.2.0"
}
},
"node_modules/@babel/helper-string-parser": {
"version": "7.27.1",
"resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
"integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-identifier": {
"version": "7.27.1",
"resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz",
"integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==",
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/parser": {
"version": "7.28.4",
"resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.28.4.tgz",
"integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==",
"license": "MIT",
"dependencies": {
"@babel/types": "^7.28.4"
},
"bin": {
"parser": "bin/babel-parser.js"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@babel/types": {
"version": "7.28.4",
"resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.28.4.tgz",
"integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==",
"license": "MIT",
"dependencies": {
"@babel/helper-string-parser": "^7.27.1",
"@babel/helper-validator-identifier": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@emmetio/abbreviation": {
"version": "2.3.3",
"resolved": "https://registry.npmmirror.com/@emmetio/abbreviation/-/abbreviation-2.3.3.tgz",
"integrity": "sha512-mgv58UrU3rh4YgbE/TzgLQwJ3pFsHHhCLqY20aJq+9comytTXUDNGG/SMtSeMJdkpxgXSXunBGLD8Boka3JyVA==",
"license": "MIT",
"dependencies": {
"@emmetio/scanner": "^1.0.4"
}
},
"node_modules/@emmetio/css-abbreviation": {
"version": "2.1.8",
"resolved": "https://registry.npmmirror.com/@emmetio/css-abbreviation/-/css-abbreviation-2.1.8.tgz",
"integrity": "sha512-s9yjhJ6saOO/uk1V74eifykk2CBYi01STTK3WlXWGOepyKa23ymJ053+DNQjpFcy1ingpaO7AxCcwLvHFY9tuw==",
"license": "MIT",
"dependencies": {
"@emmetio/scanner": "^1.0.4"
}
},
"node_modules/@emmetio/css-parser": {
"version": "0.4.0",
"resolved": "git+ssh://git@github.com/ramya-rao-a/css-parser.git#370c480ac103bd17c7bcfb34bf5d577dc40d3660",
"license": "MIT",
"dependencies": {
"@emmetio/stream-reader": "^2.2.0",
"@emmetio/stream-reader-utils": "^0.1.0"
}
},
"node_modules/@emmetio/html-matcher": {
"version": "1.3.0",
"resolved": "https://registry.npmmirror.com/@emmetio/html-matcher/-/html-matcher-1.3.0.tgz",
"integrity": "sha512-NTbsvppE5eVyBMuyGfVu2CRrLvo7J4YHb6t9sBFLyY03WYhXET37qA4zOYUjBWFCRHO7pS1B9khERtY0f5JXPQ==",
"license": "ISC",
"dependencies": {
"@emmetio/scanner": "^1.0.0"
}
},
"node_modules/@emmetio/scanner": {
"version": "1.0.4",
"resolved": "https://registry.npmmirror.com/@emmetio/scanner/-/scanner-1.0.4.tgz",
"integrity": "sha512-IqRuJtQff7YHHBk4G8YZ45uB9BaAGcwQeVzgj/zj8/UdOhtQpEIupUhSk8dys6spFIWVZVeK20CzGEnqR5SbqA==",
"license": "MIT"
},
"node_modules/@emmetio/stream-reader": {
"version": "2.2.0",
"resolved": "https://registry.npmmirror.com/@emmetio/stream-reader/-/stream-reader-2.2.0.tgz",
"integrity": "sha512-fXVXEyFA5Yv3M3n8sUGT7+fvecGrZP4k6FnWWMSZVQf69kAq0LLpaBQLGcPR30m3zMmKYhECP4k/ZkzvhEW5kw==",
"license": "MIT"
},
"node_modules/@emmetio/stream-reader-utils": {
"version": "0.1.0",
"resolved": "https://registry.npmmirror.com/@emmetio/stream-reader-utils/-/stream-reader-utils-0.1.0.tgz",
"integrity": "sha512-ZsZ2I9Vzso3Ho/pjZFsmmZ++FWeEd/txqybHTm4OgaZzdS8V9V/YYWQwg5TC38Z7uLWUV1vavpLLbjJtKubR1A==",
"license": "MIT"
},
"node_modules/@johnsoncodehk/pug-beautify": {
"version": "0.2.2",
"resolved": "https://registry.npmmirror.com/@johnsoncodehk/pug-beautify/-/pug-beautify-0.2.2.tgz",
"integrity": "sha512-qqNS/YD0Nck5wtQLCPHAfGVgWbbGafxSPjNh0ekYPFSNNqnDH2kamnduzYly8IiADmeVx/MfAE1njMEjVeHTMA==",
"license": "MIT"
},
"node_modules/@volar/language-core": {
"version": "2.4.23",
"resolved": "https://registry.npmmirror.com/@volar/language-core/-/language-core-2.4.23.tgz",
"integrity": "sha512-hEEd5ET/oSmBC6pi1j6NaNYRWoAiDhINbT8rmwtINugR39loROSlufGdYMF9TaKGfz+ViGs1Idi3mAhnuPcoGQ==",
"license": "MIT",
"dependencies": {
"@volar/source-map": "2.4.23"
}
},
"node_modules/@volar/language-server": {
"version": "2.4.23",
"resolved": "https://registry.npmmirror.com/@volar/language-server/-/language-server-2.4.23.tgz",
"integrity": "sha512-k0iO+tybMGMMyrNdWOxgFkP0XJTdbH0w+WZlM54RzJU3WZSjHEupwL30klpM7ep4FO6qyQa03h+VcGHD4Q8gEg==",
"license": "MIT",
"dependencies": {
"@volar/language-core": "2.4.23",
"@volar/language-service": "2.4.23",
"@volar/typescript": "2.4.23",
"path-browserify": "^1.0.1",
"request-light": "^0.7.0",
"vscode-languageserver": "^9.0.1",
"vscode-languageserver-protocol": "^3.17.5",
"vscode-languageserver-textdocument": "^1.0.11",
"vscode-uri": "^3.0.8"
}
},
"node_modules/@volar/language-service": {
"version": "2.4.23",
"resolved": "https://registry.npmmirror.com/@volar/language-service/-/language-service-2.4.23.tgz",
"integrity": "sha512-h5mU9DZ/6u3LCB9xomJtorNG6awBNnk9VuCioGsp6UtFiM8amvS5FcsaC3dabdL9zO0z+Gq9vIEMb/5u9K6jGQ==",
"license": "MIT",
"dependencies": {
"@volar/language-core": "2.4.23",
"vscode-languageserver-protocol": "^3.17.5",
"vscode-languageserver-textdocument": "^1.0.11",
"vscode-uri": "^3.0.8"
}
},
"node_modules/@volar/source-map": {
"version": "2.4.23",
"resolved": "https://registry.npmmirror.com/@volar/source-map/-/source-map-2.4.23.tgz",
"integrity": "sha512-Z1Uc8IB57Lm6k7q6KIDu/p+JWtf3xsXJqAX/5r18hYOTpJyBn0KXUR8oTJ4WFYOcDzWC9n3IflGgHowx6U6z9Q==",
"license": "MIT"
},
"node_modules/@volar/typescript": {
"version": "2.4.23",
"resolved": "https://registry.npmmirror.com/@volar/typescript/-/typescript-2.4.23.tgz",
"integrity": "sha512-lAB5zJghWxVPqfcStmAP1ZqQacMpe90UrP5RJ3arDyrhy4aCUQqmxPPLB2PWDKugvylmO41ljK7vZ+t6INMTag==",
"license": "MIT",
"dependencies": {
"@volar/language-core": "2.4.23",
"path-browserify": "^1.0.1",
"vscode-uri": "^3.0.8"
}
},
"node_modules/@vscode/emmet-helper": {
"version": "2.11.0",
"resolved": "https://registry.npmmirror.com/@vscode/emmet-helper/-/emmet-helper-2.11.0.tgz",
"integrity": "sha512-QLxjQR3imPZPQltfbWRnHU6JecWTF1QSWhx3GAKQpslx7y3Dp6sIIXhKjiUJ/BR9FX8PVthjr9PD6pNwOJfAzw==",
"license": "MIT",
"dependencies": {
"emmet": "^2.4.3",
"jsonc-parser": "^2.3.0",
"vscode-languageserver-textdocument": "^1.0.1",
"vscode-languageserver-types": "^3.15.1",
"vscode-uri": "^3.0.8"
}
},
"node_modules/@vscode/l10n": {
"version": "0.0.18",
"resolved": "https://registry.npmmirror.com/@vscode/l10n/-/l10n-0.0.18.tgz",
"integrity": "sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ==",
"license": "MIT"
},
"node_modules/@vue/compiler-core": {
"version": "3.5.22",
"resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.22.tgz",
"integrity": "sha512-jQ0pFPmZwTEiRNSb+i9Ow/I/cHv2tXYqsnHKKyCQ08irI2kdF5qmYedmF8si8mA7zepUFmJ2hqzS8CQmNOWOkQ==",
"license": "MIT",
"dependencies": {
"@babel/parser": "^7.28.4",
"@vue/shared": "3.5.22",
"entities": "^4.5.0",
"estree-walker": "^2.0.2",
"source-map-js": "^1.2.1"
}
},
"node_modules/@vue/compiler-dom": {
"version": "3.5.22",
"resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.22.tgz",
"integrity": "sha512-W8RknzUM1BLkypvdz10OVsGxnMAuSIZs9Wdx1vzA3mL5fNMN15rhrSCLiTm6blWeACwUwizzPVqGJgOGBEN/hA==",
"license": "MIT",
"dependencies": {
"@vue/compiler-core": "3.5.22",
"@vue/shared": "3.5.22"
}
},
"node_modules/@vue/language-core": {
"version": "3.1.0",
"resolved": "https://registry.npmmirror.com/@vue/language-core/-/language-core-3.1.0.tgz",
"integrity": "sha512-a7ns+X9vTbdmk7QLrvnZs8s4E1wwtxG/sELzr6F2j4pU+r/OoAv6jJGSz+5tVTU6e4+3rjepGhSP8jDmBBcb3w==",
"license": "MIT",
"dependencies": {
"@volar/language-core": "2.4.23",
"@vue/compiler-dom": "^3.5.0",
"@vue/shared": "^3.5.0",
"alien-signals": "^3.0.0",
"muggle-string": "^0.4.1",
"path-browserify": "^1.0.1",
"picomatch": "^4.0.2"
},
"peerDependencies": {
"typescript": "*"
},
"peerDependenciesMeta": {
"typescript": {
"optional": true
}
}
},
"node_modules/@vue/language-server": {
"version": "3.1.0",
"resolved": "https://registry.npmmirror.com/@vue/language-server/-/language-server-3.1.0.tgz",
"integrity": "sha512-T5KnkZxJxKuLx4scLMp+wQyYLl8Id/wZ+SQ/Fhz4OgQToBuyEm8BVm45ycsN5fRd9djOPzX895cYQJM+6UKaFw==",
"license": "MIT",
"dependencies": {
"@volar/language-server": "2.4.23",
"@vue/language-core": "3.1.0",
"@vue/language-service": "3.1.0",
"@vue/typescript-plugin": "3.1.0",
"vscode-uri": "^3.0.8"
},
"bin": {
"vue-language-server": "bin/vue-language-server.js"
},
"peerDependencies": {
"typescript": "*"
}
},
"node_modules/@vue/language-service": {
"version": "3.1.0",
"resolved": "https://registry.npmmirror.com/@vue/language-service/-/language-service-3.1.0.tgz",
"integrity": "sha512-LibzrvZz9sB4doS1j1ea7AezkkgCH44dpu9OGFFOHjldq3yYOjP3Wwf7RXrnyqhlBl40O4RL5B5qPnZt3qDdfQ==",
"license": "MIT",
"dependencies": {
"@volar/language-service": "2.4.23",
"@vue/language-core": "3.1.0",
"@vue/shared": "^3.5.0",
"path-browserify": "^1.0.1",
"volar-service-css": "0.0.65",
"volar-service-emmet": "0.0.65",
"volar-service-html": "0.0.65",
"volar-service-json": "0.0.65",
"volar-service-pug": "0.0.65",
"volar-service-pug-beautify": "0.0.65",
"volar-service-typescript": "0.0.65",
"vscode-html-languageservice": "^5.2.0",
"vscode-uri": "^3.0.8"
}
},
"node_modules/@vue/shared": {
"version": "3.5.22",
"resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.22.tgz",
"integrity": "sha512-F4yc6palwq3TT0u+FYf0Ns4Tfl9GRFURDN2gWG7L1ecIaS/4fCIuFOjMTnCyjsu/OK6vaDKLCrGAa+KvvH+h4w==",
"license": "MIT"
},
"node_modules/@vue/typescript-plugin": {
"version": "3.1.0",
"resolved": "https://registry.npmmirror.com/@vue/typescript-plugin/-/typescript-plugin-3.1.0.tgz",
"integrity": "sha512-7/1yeN+ZaHQJzCM80EXd1H9JHbNCmqL7jrtwc3bxL7AyArLvDq3RXnh6CLeIKDUb93rP5MTp1VCTDIyjT+5iAw==",
"license": "MIT",
"dependencies": {
"@volar/typescript": "2.4.23",
"@vue/language-core": "3.1.0",
"@vue/shared": "^3.5.0",
"path-browserify": "^1.0.1"
}
},
"node_modules/acorn": {
"version": "7.4.1",
"resolved": "https://registry.npmmirror.com/acorn/-/acorn-7.4.1.tgz",
"integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
"license": "MIT",
"bin": {
"acorn": "bin/acorn"
},
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/alien-signals": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/alien-signals/-/alien-signals-3.0.0.tgz",
"integrity": "sha512-JHoRJf18Y6HN4/KZALr3iU+0vW9LKG+8FMThQlbn4+gv8utsLIkwpomjElGPccGeNwh0FI2HN6BLnyFLo6OyLQ==",
"license": "MIT"
},
"node_modules/call-bind-apply-helpers": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
"integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0",
"function-bind": "^1.1.2"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/call-bound": {
"version": "1.0.4",
"resolved": "https://registry.npmmirror.com/call-bound/-/call-bound-1.0.4.tgz",
"integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
"license": "MIT",
"dependencies": {
"call-bind-apply-helpers": "^1.0.2",
"get-intrinsic": "^1.3.0"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/character-parser": {
"version": "2.2.0",
"resolved": "https://registry.npmmirror.com/character-parser/-/character-parser-2.2.0.tgz",
"integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==",
"license": "MIT",
"dependencies": {
"is-regex": "^1.0.3"
}
},
"node_modules/crypto-js": {
"version": "4.2.0",
"resolved": "http://npm.dui88.com:80/crypto-js/-/crypto-js-4.2.0.tgz",
......
......@@ -27,6 +27,20 @@
"navigationStyle": "custom"
}
},
{
"path": "pages/activity/index",
"style": {
"navigationBarTitleText": "",
"navigationStyle": "custom"
}
},
{
"path": "pages/activity/register",
"style": {
"navigationBarTitleText": "注册",
"navigationStyle": "custom"
}
},
{
"path": "pages/search/search",
"style": {
......@@ -198,17 +212,15 @@
}
},
{
"path" : "pages/middlePage/middlePage",
"style" :
{
"navigationBarTitleText" : ""
"path": "pages/middlePage/middlePage",
"style": {
"navigationBarTitleText": ""
}
},
{
"path" : "pages/heliaixinTools/heliaixinTools",
"style" :
{
"navigationBarTitleText" : "鹤礼爱心"
"path": "pages/heliaixinTools/heliaixinTools",
"style": {
"navigationBarTitleText": "鹤礼爱心"
}
}
],
......@@ -296,6 +308,23 @@
}
}
]
},
{
"root": "subPackages",
"pages": [
{
"path": "momclub/momclub",
"style": {
"navigationBarTitleText": ""
}
},
{
"path": "xmhAactivity/xmhAactivity",
"style": {
"navigationBarTitleText": ""
}
}
]
}
],
"globalStyle": {
......
<template>
<web-view :src="src" @message="onMessage"/>
</template>
<script setup>
import {ref, watch, nextTick} from "vue";
import {onLoad, onShow, onShareAppMessage, onShareTimeline} from "@dcloudio/uni-app";
import {useGlobalStore} from "../../stores/global";
import {useUserStore} from "../../stores/user";
import {jump, JumpType} from "../../utils";
const userStore = useUserStore();
const globalStore = useGlobalStore()
function getRegistered() {
return userStore.userInfo?.memberId !== "not_login"
}
const pageOptions = ref({})
const src = ref("");
const registered = ref(false)
const urlMap = {
//'main': 'http://192.168.0.5:8001/#/page',
'main': 'https://momclub-uat.feihe.com/h5/#/page',
};
const shareData = ref(null)
onShow(() => {
registered.value = getRegistered()
})
function joinUrlAndQs(url, qs) {
return qs
? url + (url.includes('?') ? (url.endsWith('?') ? '' : '&') : '?') + qs
: url
}
watch(() => registered.value, (newVal, oldVal) => {
if (newVal !== oldVal) {
const oldSrc = src.value
src.value = ''
nextTick(() => {
src.value = joinUrlAndQs(oldSrc, 'registered=' + newVal)
})
}
})
function initOk() {
console.log(userStore.userInfo)
let url = "";
const options = pageOptions.value
if (options.type) {
const type = options.type;
url = urlMap[type];
} else if (options.url) {
url = decodeURIComponent(options.url)
}
const params = {}
const {unionId, cuk} = globalStore
if (unionId && !params.unionId) params.unionId = unionId
if (cuk && !params.cuk) params.cuk = cuk
const {memberId} = userStore.userInfo
if (memberId) params.crmId = memberId
const paramStr = Object.keys(params)
.filter(key => params[key] !== undefined && params[key] !== null && params[key] !== '')
.map(key => `${key}=${encodeURIComponent(params[key])}`)
.join('&')
url = joinUrlAndQs(url, paramStr)
if(options.params){
url = joinUrlAndQs(url, decodeURIComponent(options.params))
}
src.value = url
console.log('webview url:', url)
}
onLoad(async (options) => {
pageOptions.value = options
console.log('页面参数:', options)
wx.showShareMenu({
withShareTicket: true,
menus: ['shareAppMessage', 'shareTimeline']
})
await userStore.normalAutoLogin()
await userStore.loadUserInfo()
registered.value = getRegistered()
if(options.needLogin && !registered.value) {
jump({
type: JumpType.INNER,
url: '/pages/activity/register',
})
}else{
initOk()
}
});
function onMessage(e) {
const data = e.detail.data
const lastData = data[data.length - 1]
console.log('webview 消息接收:', lastData)
switch (lastData.type) {
case 'share':
shareData.value = lastData.payload
break;
}
}
function shareHook() {
if (shareData.value) {
const {url, title, imageUrl = ''} = shareData.value
console.log('使用分享数据:', shareData.value)
return {
title,
path: url || '/pages/index/index',
imageUrl,
success: function (res) {
console.log('分享成功:', res)
//星妈会埋点方法,用户分享成功后触发事件
},
fail: function (res) {
console.log('分享失败:', res)
},
complete: function (res) {
console.log('分享完成:', res)
}
}
}
// 如果没有分享数据,返回默认分享
return {
path: '/pages/index/index'
}
}
onShareAppMessage((options) => {
console.log('分享给朋友数据:', shareData.value)
return shareHook()
})
onShareTimeline((options) => {
console.log('分享到朋友圈数据:', shareData.value)
return shareHook()
})
</script>
<script>
/*export default {
onShareAppMessage() {
return this.shareHook()
}
}*/
</script>
\ No newline at end of file
<script setup>
import {ref} from "vue";
import RegisterLayer from "../../components/RegisterLayer.vue";
import {useUserStore} from "../../stores/user";
import {jump, JumpType} from "../../utils";
import md from "../../md";
import Checkbox from "./toggle-button/index.vue";
const userStore = useUserStore();
const showRegisterLayer = ref(false);
const readProtocol = ref(false);
async function clickBack() {
uni.navigateBack({
delta: 1
})
}
async function onRegisterConfirm(data) {
console.log('注册确认:', data);
showRegisterLayer.value = false;
await Promise.all([
userStore.loadMemberInfo(),
userStore.loadUserInfo(),
])
uni.navigateBack({
delta: 1
})
}
async function getRealtimePhoneNumber(e) {
console.log("获取手机号码", e);
if (e.detail.errMsg !== "getPhoneNumber:ok") {
uni.showToast({
title: "请授权使用手机号",
icon: "none",
});
return;
}
await userStore.phoneCallback(e.detail, () => {
showRegisterLayer.value = true;
});
}
// 页面跳转
const navigateTo = (url) => {
uni.navigateTo({
url,
animationDuration: 0,
fail: (err) => {
console.error("页面跳转失败:", err);
uni.showToast({
title: "页面跳转失败",
icon: "none",
});
},
});
};
const handleHot = (e) => {
const type = e.currentTarget.dataset.type;
md.sensorLog(e);
console.log("handleHot", type);
md.sensorComponentLogTake({
xcxComponentClick: "true",
pageName: "我的页面",
componentName: "查看协议",
componentContent: type === "member" ? "会员规则" : "隐私协议"
})
if (type === "member") {
navigateTo("/pages/webview/webview?type=MEMBER_URL");
} else if (type === "privacy") {
navigateTo("/pages/webview/webview?type=PRIVACY_URL");
}
};
function clickRegister(e){
uni.showToast({
title: "请先阅读并同意协议《会员规则》及《隐私协议》",
icon: "none",
});
}
function testClick() {
jump({
type: JumpType.MINI,
url: '/subPackages/xmhMainProcess/mine/index',
extra: {
appId: 'wx4205ec55b793245e',
}
})
}
</script>
<template>
<div class="page">
<view >
<image src="@/assets/images/back-btn.png" class="btn-back" @click="clickBack"/>
</view>
<div class="content">
<div class="logo-container">
<image src="@/assets/logo.png" class="logo"/>
<text>星妈会</text>
</div>
<button v-if="readProtocol" class="register-button" open-type="getPhoneNumber" @getphonenumber="getRealtimePhoneNumber">
授权登录
</button>
<button v-else class="register-button disabled" @click="clickRegister">
授权登录
</button>
<!-- <button @click="testClick">
测试
</button>-->
<view class="protocol-container">
<Checkbox v-model="readProtocol" class="checkbox"/>
我已阅读并同意
<view class="link" :data-log="{
xcxClick: '注册页面点击',
pageName: '注册页面',
buttonName: '会员规则',
}" @click="handleHot" data-type="member">《会员规则》
</view>
<view class="link" :data-log="{
xcxClick: '注册页面点击',
pageName: '注册页面',
buttonName: '隐私协议',
}" @click="handleHot" data-type="privacy">《隐私协议》
</view>
</view>
</div>
<RegisterLayer v-model="showRegisterLayer" @confirm="onRegisterConfirm"/>
</div>
</template>
<style lang="less" scoped>
.page {
width: 100vw;
display: flex;
flex-direction: column;
align-items: center;
.btn-back{
position: absolute;
left: 10rpx;
top: 100rpx;
width: 60rpx;
height: 60rpx;
}
.logo-container{
width: 100vw;
display: flex;
align-items: center;
gap: 12rpx;
flex-direction: column;
background-image: linear-gradient(180deg, #F4E2B2 0%, transparent 100%);
padding-top: 350rpx;
padding-bottom: 80rpx;
.logo{
width: 176rpx;
height: 176rpx;
}
}
.content {
display: flex;
flex-direction: column;
align-items: center;
.register-button {
width: 600rpx;
height: 94rpx;
border-radius: 100rpx;
background-color: #d3a358;
color: white;
margin-top: 130rpx;
&.disabled{
background-color: #E3CC9E;
}
}
.protocol-container {
margin: 40rpx 0;
font-size: 24rpx;
display: flex;
align-items: center;
gap: 4rpx;
color: #797979;
.link {
color: #d3a358;
}
}
}
}
</style>
\ No newline at end of file
<script setup>
import { ref } from 'vue'
import checkSelectImg from './assets/check-select.png'
import checkUnselectImg from './assets/check-unselect.png'
const props = defineProps({
modelValue: {
type: Boolean,
default: false
}
})
const emit = defineEmits(['update:modelValue'])
const handleClick = () => {
emit('update:modelValue', !props.modelValue)
}
</script>
<template>
<div class="checkbox-wrapper">
<img :src="modelValue ? checkSelectImg : checkUnselectImg" class="checkbox" @click="handleClick"/>
</div>
</template>
<style scoped lang="less">
.checkbox-wrapper {
display: flex;
align-items: center;
justify-content: center;
.checkbox {
width: 22rpx;
height: 22rpx;
}
}
</style>
\ No newline at end of file
......@@ -209,6 +209,7 @@ import { showLoading, hideLoading, jump, JumpType } from '../../utils/index.js'
import { useXingmaLabStore } from '../../stores/xingmaLab'
import Xingmalabnotimepop from '../../components/xingmaLab/Xingmalabnotimepop.vue'
import md from '../../md';
import {useUserStore} from "@/stores/user";
// 定义组件名称
defineOptions({
......@@ -223,6 +224,7 @@ const cangpinList = ref([]);
const shoucangList = ref([]);
const xingmaLabStore = useXingmaLabStore();
const userStore = useUserStore();
// 弹窗显示状态
const showNoTimePopup = ref(false) // 无次数弹窗
......@@ -537,6 +539,13 @@ const switchSubTab = async (subTab) => {
}
const handleBottomNavFabu = () => {
if(userStore.userInfo?.memberId === "not_login"){
jump({
type: JumpType.INNER,
url: "/pages/activity/register",
})
return
}
md.sensorComponentLogTake({
xcxComponentClick: "true",
......
const hosts = [
{value: 'https://guide-api.feihe.com', alias: '生产环境'},
{value: 'https://guide-api-test.feihe.com', alias: 'test环境'},
{value: 'https://guide-api-uat.feihe.com', alias: 'uat环境'},
]
const pages = [
{value: '/mini/#/page/momHome/index', alias: '妈妈爱活动'},
{value: '/mini/#/page/home/index?page_source=3', alias: '路演活动'},
]
const mpPage = 'pages/activity/index'
function joinUrlAndQs(url, qs) {
return qs
? url + (url.includes('?') ? (url.endsWith('?') ? '' : '&') : '?') + qs
: url
}
for (const page of pages) {
for (const host of hosts) {
const url = joinUrlAndQs(mpPage, `url=${encodeURIComponent(host.value + page.value)}`)
console.log(`${page.alias}-${host.alias}: ${url}`)
}
}
import {
defineStore
defineStore
} from "pinia";
import {
autoLoginByCode,
fetchUserInfo,
fetchBabyInfo,
fetchMemberInfo,
fetchAutoPhone,
fetchBabyInfoById,
updateBabyInfo,
autoLoginByCode,
fetchUserInfo,
fetchBabyInfo,
fetchMemberInfo,
fetchAutoPhone,
fetchBabyInfoById,
updateBabyInfo,
} from "../api/user.js";
import {
useGlobalStore
useGlobalStore
} from "./global.js";
import {
useHomeStore
useHomeStore
} from "./home.js";
import md from "../md.js";
......@@ -47,315 +47,323 @@ export const useUserStore = defineStore("userInfo", {
this.memberInfo = memberInfo;
},
/**
* 更新宝宝信息
* @param {Object} babyInfo
*/
setBabyInfo(babyInfo) {
this.babyInfo = babyInfo;
},
async changeBabySelected(babyId) {
// 更新选中状态
const {
data
} = await fetchBabyInfoById(babyId);
console.log("babyInfo", data);
if (data?.memberId !== "not_login") {
this.babyInfo = data;
}
},
saveBabyInfo(babyInfo) {
this.babyInfo.allBabyBaseInfo.push(babyInfo);
},
/**
* 用户手机号验证的回调方法,用于获取encryptedData、iv、code,然后调用fetchAutoPhone接口完成手机号授权
* @param {Object} data : {encryptedData, iv, code}
* @returns
*/
async phoneCallback(data, onOpenRegisterFn = () => { }, cb = null, cb2 = null, invitationInfo = null) {
uni.login({
provider: "weixin",
success: async (res) => {
// console.log('wxAutoLogin', res);
if (res.errMsg === "login:ok") {
// 用户手机授权F
const {
data: babyExistence
} = await fetchAutoPhone({
phoneEncryptedData: data.encryptedData,
phoneIv: data.iv,
code: data.code,
codeLogin: res.code,
...invitationInfo,
});
!babyExistence && onOpenRegisterFn && onOpenRegisterFn();
if (!babyExistence.value && cb) {
cb();
}
const homeStore = useHomeStore();
await homeStore.setBabyExistence(babyExistence);
console.warn('授权后重新获取用户信息')
// 授权注册成功后做一次登录
this.wxAutoLogin(cb2);
} else {
uni.showToast({
title: res.errMsg,
icon: "error",
});
}
},
});
},
/**
* 获取用户信息
*/
async loadUserInfo() {
const {
data
} = await fetchUserInfo();
console.log("userInfo", data);
if (data?.memberId !== "not_login") {
// 缓存用户memberId
uni.setStorageSync('memberId', data?.memberId)
}
this.userInfo = data;
},
setBabyNickCache(id, name) {
const findIndex = this.babyNickCache.findIndex((item) => item.id === id);
console.log("this.babyNickCache", findIndex);
if (findIndex > -1) {
this.babyNickCache[findIndex].name = name;
} else {
this.babyNickCache.push({
id,
name
});
}
},
/**
* 获取宝宝信息
*/
// async loadBabyInfo() {
// const { data } = await fetchBabyInfo();
// console.log("babyInfo", data);
// if (data?.memberId !== "not_login") {
// this.babyInfo = data;
// console.log("this.11111", this.babyNickCache, data?.content?.id);
// const findItem = this.babyNickCache.find(
// (item) => item.id == data?.content?.id
// );
// if (data?.content?.id && findItem) {
// this.babyInfo.babyName = findItem.name;
// this.babyInfo.allBabyBaseInfo.forEach((item) => {
// if (item.id == data?.content?.id) {
// item.babyName = findItem.name;
// }
// });
// }
// }
// },
async loadBabyInfo(retryCount = 0) {
const MAX_RETRIES = 3;
const RETRY_DELAY = 1000; // 1 second
try {
const { data } = await fetchBabyInfo();
console.log("babyInfo-宝宝信息", data);
if (data?.memberId !== "not_login") {
this.babyInfo = data;
if (data.allBabyBaseInfo) {
if (this.babyInfo.babyAge == "0月龄") {
this.babyInfo.babyAge = "1月龄";
}
console.log("this.11111", this.babyNickCache, data?.content?.id);
const findItem = this.babyNickCache.find(
(item) => item.id == data?.content?.id
);
if (data?.content?.id && findItem) {
this.babyInfo.babyName = findItem.name;
this.babyInfo.allBabyBaseInfo.forEach((item) => {
if (item.id == data?.content?.id) {
item.babyName = findItem.name;
}
});
}
return; // Success case, exit the function
} else {
console.log("this.babyInfo", '重新请求接口');
if (retryCount < MAX_RETRIES - 1) {
await new Promise(resolve => setTimeout(resolve, RETRY_DELAY));
return this.loadBabyInfo(retryCount + 1);
} else {
console.log("Max retries reached, giving up");
// Show user notification when max retries reached
// uni.showToast({
// title: "系统繁忙,请稍后再试",
// icon: "none",
// });
}
}
}
} catch (error) {
console.log("🚀 ~ loadBabyInfo ~ error:", error);
if (retryCount >= MAX_RETRIES - 1) {
// Show user notification when max retries reached with error
uni.showToast({
title: "系统繁忙,请稍后再试",
icon: "none",
});
}
}
},
/**
* 获取用户积分信息
*/
async loadMemberInfo() {
const {
data
} = await fetchMemberInfo();
console.log("fetchMemberInfo=", data);
this.setMemberInfo(data);
// this.memberInfo = data;
// if (data?.memberId !== "not_login") {
// this.babyInfo = data;
// }
},
/**
* 获取宝宝信息
*/
async loadHomeInfo() {
const homeStore = useHomeStore();
await homeStore.loadHomeInfo();
},
/**
* wx.login 获取code后,调用此方法完成登录
* @param {String} code
*/
async autoLoginByCode(code) {
const {
data
} = await autoLoginByCode(code);
console.log("autoLoginByCode", data);
// 如果登录成功,获取用户信息和宝宝信息,更新到state中,方便全局使用
if (data && data.cuk) {
globalStore.setCuk(data.cuk, data.openId, data.unionId);
await this.loadUserInfo();
await this.loadBabyInfo();
await this.loadHomeInfo();
}
},
/**
* 用户自动登录
*/
async wxAutoLogin(cb = null) {
uni.login({
provider: "weixin",
success: async (res) => {
console.log("wxAutoLogin", res);
if (res.errMsg === "login:ok") {
await this.autoLoginByCode(res.code);
cb && cb();
} else {
uni.showToast({
title: res.errMsg,
icon: "error",
});
}
md.sensors.init();
},
});
},
/**
*
* @param {sy使用}
* @returns
*/
async syWxAutoLogin(cb = null) {
uni.login({
provider: "weixin",
success: async (res) => {
if (res.errMsg === "login:ok") {
const { data } = await autoLoginByCode(res.code);
// 如果登录成功,获取用户信息和宝宝信息,更新到state中,方便全局使用
if (data && data.cuk) {
globalStore.setCuk(data.cuk, data.openId, data.unionId);
cb && cb();
}
} else {
uni.showToast({
title: res.errMsg,
icon: "error",
});
}
md.sensors.init();
},
});
},
/**
*
* @param {sy使用}
* @returns
*/
async normalAutoLogin(cb = null) {
uni.login({
provider: "weixin",
success: async (res) => {
if (res.errMsg === "login:ok") {
const { data } = await autoLoginByCode(res.code);
// 如果登录成功,获取用户信息和宝宝信息,更新到state中,方便全局使用
if (data && data.cuk) {
globalStore.setCuk(data.cuk, data.openId, data.unionId);
cb && cb();
}
} else {
uni.showToast({
title: res.errMsg,
icon: "error",
});
}
md.sensors.init();
},
});
},
async createBabyInfo(babyInfo) {
console.log("createBabyInfo:", babyInfo);
const res = await updateBabyInfo(babyInfo);
if (res.success) {
await this.loadBabyInfo();
await this.loadUserInfo();
await this.loadHomeInfo();
return true;
} else {
return false;
}
},
},
/**
* 更新宝宝信息
* @param {Object} babyInfo
*/
setBabyInfo(babyInfo) {
this.babyInfo = babyInfo;
},
async changeBabySelected(babyId) {
// 更新选中状态
const {
data
} = await fetchBabyInfoById(babyId);
console.log("babyInfo", data);
if (data?.memberId !== "not_login") {
this.babyInfo = data;
}
},
saveBabyInfo(babyInfo) {
this.babyInfo.allBabyBaseInfo.push(babyInfo);
},
/**
* 用户手机号验证的回调方法,用于获取encryptedData、iv、code,然后调用fetchAutoPhone接口完成手机号授权
* @param {Object} data : {encryptedData, iv, code}
* @returns
*/
async phoneCallback(data, onOpenRegisterFn = () => {
}, cb = null, cb2 = null, invitationInfo = null) {
uni.login({
provider: "weixin",
success: async (res) => {
// console.log('wxAutoLogin', res);
if (res.errMsg === "login:ok") {
// 用户手机授权F
const {
data: {babyExistence}
} = await fetchAutoPhone({
phoneEncryptedData: data.encryptedData,
phoneIv: data.iv,
code: data.code,
codeLogin: res.code,
...invitationInfo,
});
!babyExistence && onOpenRegisterFn && onOpenRegisterFn();
if (!babyExistence.value && cb) {
cb();
}
const homeStore = useHomeStore();
await homeStore.setBabyExistence(babyExistence);
console.warn('授权后重新获取用户信息')
// 授权注册成功后做一次登录
this.wxAutoLogin(cb2);
} else {
uni.showToast({
title: res.errMsg,
icon: "error",
});
}
},
});
},
/**
* 获取用户信息
*/
async loadUserInfo() {
const {
data
} = await fetchUserInfo();
console.log("userInfo", data);
if (data?.memberId !== "not_login") {
// 缓存用户memberId
uni.setStorageSync('memberId', data?.memberId)
}
this.userInfo = data;
},
setBabyNickCache(id, name) {
const findIndex = this.babyNickCache.findIndex((item) => item.id === id);
console.log("this.babyNickCache", findIndex);
if (findIndex > -1) {
this.babyNickCache[findIndex].name = name;
} else {
this.babyNickCache.push({
id,
name
});
}
},
/**
* 获取宝宝信息
*/
// async loadBabyInfo() {
// const { data } = await fetchBabyInfo();
// console.log("babyInfo", data);
// if (data?.memberId !== "not_login") {
// this.babyInfo = data;
// console.log("this.11111", this.babyNickCache, data?.content?.id);
// const findItem = this.babyNickCache.find(
// (item) => item.id == data?.content?.id
// );
// if (data?.content?.id && findItem) {
// this.babyInfo.babyName = findItem.name;
// this.babyInfo.allBabyBaseInfo.forEach((item) => {
// if (item.id == data?.content?.id) {
// item.babyName = findItem.name;
// }
// });
// }
// }
// },
async loadBabyInfo(retryCount = 0) {
const MAX_RETRIES = 3;
const RETRY_DELAY = 1000; // 1 second
try {
const {data} = await fetchBabyInfo();
console.log("babyInfo-宝宝信息", data);
if (data?.memberId !== "not_login") {
this.babyInfo = data;
if (data.allBabyBaseInfo) {
if (this.babyInfo.babyAge == "0月龄") {
this.babyInfo.babyAge = "1月龄";
}
console.log("this.11111", this.babyNickCache, data?.content?.id);
const findItem = this.babyNickCache.find(
(item) => item.id == data?.content?.id
);
if (data?.content?.id && findItem) {
this.babyInfo.babyName = findItem.name;
this.babyInfo.allBabyBaseInfo.forEach((item) => {
if (item.id == data?.content?.id) {
item.babyName = findItem.name;
}
});
}
return; // Success case, exit the function
} else {
console.log("this.babyInfo", '重新请求接口');
if (retryCount < MAX_RETRIES - 1) {
await new Promise(resolve => setTimeout(resolve, RETRY_DELAY));
return this.loadBabyInfo(retryCount + 1);
} else {
console.log("Max retries reached, giving up");
// Show user notification when max retries reached
// uni.showToast({
// title: "系统繁忙,请稍后再试",
// icon: "none",
// });
}
}
}
} catch (error) {
console.log("🚀 ~ loadBabyInfo ~ error:", error);
if (retryCount >= MAX_RETRIES - 1) {
// Show user notification when max retries reached with error
uni.showToast({
title: "系统繁忙,请稍后再试",
icon: "none",
});
}
}
},
/**
* 获取用户积分信息
*/
async loadMemberInfo() {
const {
data
} = await fetchMemberInfo();
console.log("fetchMemberInfo=", data);
this.setMemberInfo(data);
// this.memberInfo = data;
// if (data?.memberId !== "not_login") {
// this.babyInfo = data;
// }
},
/**
* 获取宝宝信息
*/
async loadHomeInfo() {
const homeStore = useHomeStore();
await homeStore.loadHomeInfo();
},
/**
* wx.login 获取code后,调用此方法完成登录
* @param {String} code
*/
async autoLoginByCode(code) {
const {
data
} = await autoLoginByCode(code);
console.log("autoLoginByCode", data);
// 如果登录成功,获取用户信息和宝宝信息,更新到state中,方便全局使用
if (data && data.cuk) {
globalStore.setCuk(data.cuk, data.openId, data.unionId);
await this.loadUserInfo();
await this.loadBabyInfo();
await this.loadHomeInfo();
}
},
/**
* 用户自动登录
*/
async wxAutoLogin(cb = null) {
uni.login({
provider: "weixin",
success: async (res) => {
console.log("wxAutoLogin", res);
if (res.errMsg === "login:ok") {
await this.autoLoginByCode(res.code);
cb && cb();
} else {
uni.showToast({
title: res.errMsg,
icon: "error",
});
}
md.sensors.init();
},
});
},
/**
*
* @param {sy使用}
* @returns
*/
async syWxAutoLogin(cb = null) {
uni.login({
provider: "weixin",
success: async (res) => {
if (res.errMsg === "login:ok") {
const {data} = await autoLoginByCode(res.code);
// 如果登录成功,获取用户信息和宝宝信息,更新到state中,方便全局使用
if (data && data.cuk) {
globalStore.setCuk(data.cuk, data.openId, data.unionId);
cb && cb();
}
} else {
uni.showToast({
title: res.errMsg,
icon: "error",
});
}
md.sensors.init();
},
});
},
/**
*
* @param {sy使用}
* @returns
*/
normalAutoLogin(cb = null) {
return new Promise((resolve, reject) => {
uni.login({
provider: "weixin",
success: async (res) => {
if (res.errMsg === "login:ok") {
const {data} = await autoLoginByCode(res.code);
// 如果登录成功,获取用户信息和宝宝信息,更新到state中,方便全局使用
if (data && data.cuk) {
globalStore.setCuk(data.cuk, data.openId, data.unionId);
cb && cb();
resolve()
}
} else {
uni.showToast({
title: res.errMsg,
icon: "error",
});
reject(res.errMsg)
}
md.sensors.init();
},
fail: (err) => {
reject(err)
}
});
})
},
async createBabyInfo(babyInfo) {
console.log("createBabyInfo:", babyInfo);
const res = await updateBabyInfo(babyInfo);
if (res.success) {
await this.loadBabyInfo();
await this.loadUserInfo();
await this.loadHomeInfo();
return true;
} else {
return false;
}
},
},
});
\ No newline at end of file
<template>
<view>
</view>
</template>
<script>
export default {
data() {
return {
}
},
methods: {
}
}
</script>
<style>
</style>
<template>
<view>
</view>
</template>
<script>
export default {
data() {
return {
}
},
methods: {
}
}
</script>
<style>
</style>
......@@ -37,8 +37,10 @@ export function jump({ type, url, extra = {} }) {
console.log("jumpParams:", jumpParams);
if(extra.embedded || jumpParams.appId === 'wx4205ec55b793245e'){ // 星妈优选的小程序都为半屏拉起
console.log('半屏拉起', jumpParams)
uni.openEmbeddedMiniProgram(jumpParams);
}else{
console.log('直接跳转', jumpParams)
uni.navigateToMiniProgram(jumpParams);
}
break;
......@@ -64,7 +66,7 @@ export function formatDate(timestamp){
console.error('无效的时间戳:', timestamp);
return '';
}
const year = date.getFullYear()
const month = String(date.getMonth() + 1).padStart(2, '0')
const day = String(date.getDate()).padStart(2, '0')
......
......@@ -569,9 +569,9 @@ export default {
}
const { productId, skuId, contentImg, contentImgLen, shareTitle, shareImg, title, link } = item;
const tabName = this.productTabList[this.channelTabIndex];
if (productId && skuId) {
const url = `subPackages/shopMainProcess/product/index?productId=${productId}&skuId=${skuId}`;
if(productId && skuId){
const url = `subPackages/shopMainProcess/product/index?productId=${productId}&skuId=${skuId}&entrySource=xmh_wechatmp_brand_profamily`;
const type = JumpType.MINI;
const extra = {
appId: 'wx4205ec55b793245e', //星妈优选小程序
......
......@@ -26,7 +26,7 @@
<text class="current-xingyaodengji-tips"
v-if="getHuangjinMaxVal()[index] == -1 && !(memberInfo.grade == 0 && !memberInfo.orderUpgrade && points >= 1)"
:style="{ color: getColor('jifen')[index]?.currentPoints }"> {{ itemIndex == 4 ? '您已经升至最高等级' :
'您已超越该等级' }}</text>
'您已超越该等级' }}</text>
<button v-if="!islogin" type="primary" class="phone-button" open-type="getPhoneNumber"
......@@ -68,8 +68,8 @@
<!-- 进度条 -->
<view class="progress-bar-container">
<!-- 进度条背景图片 -->
<image :src="$baseUrl + `integral/${tupianBanben}/barBgVip${index}.png`"
class="progress-bar-bg" mode="aspectFit" @error="onProgressBarError" />
<image :src="$baseUrl + `integral/${tupianBanben}/barBgVip${index}.png`" class="progress-bar-bg"
mode="aspectFit" @error="onProgressBarError" />
<!-- 进度条填充图片 -->
<view class="progress-bar-mask">
<image :src="$baseUrl + `integral/${tupianBanben}/barVip${index}.png`"
......@@ -166,7 +166,7 @@
<view class="info-row" @click="integralDetailHandler">
<text class="count-text">{{ `当前:${points} 积分` }}</text>
<text class="expire-text" v-if="willExpiredPoints > 0">{{ `(${willExpiredPoints ?
willExpiredPoints : 0}积分将到期)`}}</text>
willExpiredPoints : 0}积分将到期)` }}</text>
<image class="integral-detail-arrow"
:src="$baseUrl + `integral/${tupianBanben}/integralArrow.png`" mode="aspectFit" />
</view>
......@@ -179,11 +179,12 @@
<view class="privilege-container">
<!-- 第一行 -->
<view class="privilege-header">
<text class="quanyi-title" :style="{ color: getColor('quanyiTitle')[itemIndex].titleColor }" @click="testGoto195">LV{{
(Number(itemIndex) + 1) }}专享权益</text>
<text class="quanyi-title" :style="{ color: getColor('quanyiTitle')[itemIndex].titleColor }"
@click="testGoto195">LV{{
(Number(itemIndex) + 1) }}专享权益</text>
<text class="title-text" :style="{ color: getColor('quanyiTitle')[itemIndex].quanyiNumColor }">当前可享<text
class="highlight"
:style="{ color: getColor('quanyiTitle')[itemIndex].quanyiNumColor }">{{ quanyiBgs[itemIndex].quanyiNum }}</text>项权益,升级解锁更多权益~</text>
class="highlight" :style="{ color: getColor('quanyiTitle')[itemIndex].quanyiNumColor }">{{
quanyiBgs[itemIndex].quanyiNum }}</text>项权益,升级解锁更多权益~</text>
<!-- <text class="title-text" v-if="!islogin"
:style="{ color: getColor('quanyiTitle')[itemIndex].quanyiNumColor }">最高可享 <text class="highlight"
:style="{ color: getColor('quanyiTitle')[itemIndex].quanyiNumColor }">10</text> 项权益会员</text> -->
......@@ -221,7 +222,7 @@
/> -->
<text class="quanyi-text" :style="{ color: getColor('quanyiNameColor')[itemIndex] }">{{ item.name
}}</text>
}}</text>
<image class="quanyi-text-img" v-if="index >= quanyiBgs[itemIndex].quanyiNum && index < 9"
:src="$baseUrl + `integral/${tupianBanben}/quanyiLockIcon${itemIndex}.png`" mode="aspectFit" />
......@@ -368,9 +369,9 @@
<text class="title-text1">{{ goodItem?.goodsName }}</text>
</view>
<text v-if="Number(goodItem?.priceSale) && Number(goodItem?.credits)" class="num0">低至{{
goodItem?.credits}}<text class="price-text0">积分</text><text
goodItem?.credits }}<text class="price-text0">积分</text><text
class="price-text1">+</text><text class="price-text0">¥</text>{{
goodItem?.priceSale}}</text>
goodItem?.priceSale }}</text>
<text v-else-if="Number(goodItem?.priceSale)" class="price-text"><text class="num">¥{{
goodItem?.priceSale }}</text></text>
<text v-else-if="Number(goodItem?.credits)" class="price-text"><text class="num">{{
......@@ -383,83 +384,55 @@
<!-- 商品内容 -->
<view class="goods-content">
<view
class="goods-list"
v-if="activeIndex === 0"
>
<view
class="goods-item"
v-for="i in goodsData[0]?.titles?.length"
:key="i"
:style="{
background:`url(${$baseUrl}integral/1022/listItemImgBg${itemIndex}.png) no-repeat center/contain`
}"
>
<view class="goods-item-container" @click="handleGoodsItemClick('xingpin',i)">
<image
class="goods-img"
:src="$baseUrl + `integral/${tupianBanben}/${goodsData[0]?.goodsImgs[i-1]}`"
mode="aspectFit"
/>
<view class="goods-list" v-if="activeIndex === 0">
<view class="goods-item" v-for="i in goodsData[0]?.titles?.length" :key="i" :style="{
background: `url(${$baseUrl}integral/1022/listItemImgBg${itemIndex}.png) no-repeat center/contain`
}">
<view class="goods-item-container" @click="handleGoodsItemClick('xingpin', i)">
<image class="goods-img"
:src="$baseUrl + `integral/${tupianBanben}/${goodsData[0]?.goodsImgs[i - 1]}`"
mode="aspectFit" />
<view class="title-container1">
<text class="title-text1">{{ goodsData[0]?.titles[i-1] }}</text>
<text class="title-text1">{{ goodsData[0]?.titles[i - 1] }}</text>
</view>
<text class="num0">{{ goodsData[0]?.prices[i-1].split("积分+")[0]}}<text class="price-text0">积分</text><text class="price-text1">+</text><text class="price-text0">¥</text>{{ goodsData[0]?.prices[i-1].split("积分+")[1] }}</text>
<text class="num0">{{ goodsData[0]?.prices[i - 1].split("积分+")[0] }}<text
class="price-text0">积分</text><text class="price-text1">+</text><text
class="price-text0">¥</text>{{ goodsData[0]?.prices[i - 1].split("积分+")[1]
}}</text>
</view>
</view>
</view>
<view
class="goods-list"
v-if="activeIndex === 1"
>
<view
class="goods-item"
v-for="i in goodsData[1]?.titles?.length"
:key="i"
:style="{
background:`url(${$baseUrl}integral/1022/listItemImgBg${itemIndex}.png) no-repeat center/contain`
}"
>
<view class="goods-item-container" @click="handleGoodsItemClick('lingyuan',i)">
<view class="goods-list" v-if="activeIndex === 1">
<view class="goods-item" v-for="i in goodsData[1]?.titles?.length" :key="i" :style="{
background: `url(${$baseUrl}integral/1022/listItemImgBg${itemIndex}.png) no-repeat center/contain`
}">
<view class="goods-item-container" @click="handleGoodsItemClick('lingyuan', i)">
<image
class="goods-img"
:src="$baseUrl + `integral/${tupianBanben}/${goodsData[1]?.goodsImgs[i-1]}`"
mode="aspectFit"
/>
<image class="goods-img"
:src="$baseUrl + `integral/${tupianBanben}/${goodsData[1]?.goodsImgs[i - 1]}`"
mode="aspectFit" />
<view class="title-container1">
<text class="title-text1">{{ goodsData[1]?.titles[i-1] }}</text>
<text class="title-text1">{{ goodsData[1]?.titles[i - 1] }}</text>
</view>
<text class="price-text"><text class="num">{{ goodsData[1]?.prices[i-1] }}</text>积分</text>
<text class="price-text"><text class="num">{{ goodsData[1]?.prices[i - 1] }}</text>积分</text>
</view>
</view>
</view>
<view
class="goods-list"
v-if="activeIndex === 2"
>
<view
class="goods-item"
v-for="i in goodsData[2]?.titles?.length"
:key="i"
:style="{
background:`url(${$baseUrl}integral/1022/listItemImgBg${itemIndex}.png) no-repeat center/contain`
}"
>
<view class="goods-item-container" @click="handleGoodsItemClick('beiwei',i)">
<image
class="goods-img"
:src="$baseUrl + `integral/${tupianBanben}/${goodsData[2]?.goodsImgs[i-1]}`"
mode="aspectFit"
/>
<view class="goods-list" v-if="activeIndex === 2">
<view class="goods-item" v-for="i in goodsData[2]?.titles?.length" :key="i" :style="{
background: `url(${$baseUrl}integral/1022/listItemImgBg${itemIndex}.png) no-repeat center/contain`
}">
<view class="goods-item-container" @click="handleGoodsItemClick('beiwei', i)">
<image class="goods-img"
:src="$baseUrl + `integral/${tupianBanben}/${goodsData[2]?.goodsImgs[i - 1]}`"
mode="aspectFit" />
<view class="title-container1">
<text class="title-text1">{{ goodsData[2]?.titles[i-1] }}</text>
<text class="title-text1">{{ goodsData[2]?.titles[i - 1] }}</text>
</view>
<text class="price-text"><text class="num">{{ goodsData[2]?.prices[i-1] }}</text>积分</text>
<text class="price-text"><text class="num">{{ goodsData[2]?.prices[i - 1] }}</text>积分</text>
</view>
......@@ -543,6 +516,7 @@ import TaskPop from '../components/renwu/TaskPop.vue';
import TaskPerson from '../components/renwu/TaskPerson.vue';
import bannerDataIntegral from '../mock/bannerDataIntegral.json';
import jifenGoodsData from '../mock/jifenGoodsData.json';
import { onShow } from "@dcloudio/uni-app";
// 进度条图片加载错误处理
const onProgressBarError = (e) => {
......@@ -551,10 +525,10 @@ const onProgressBarError = (e) => {
}
function testGoto195() {
jump({
type: JumpType.INNER,
url: '/activities/1015/home'
})
jump({
type: JumpType.INNER,
url: '/activities/1015/home'
})
}
const orderUpgrade = ref(false);
......@@ -2300,6 +2274,15 @@ const handleExchargeClick = () => {
//会员权益点击跳转
const handlePrivilegeClick = (item, index) => {
if (!islogin.value) {
needReinit.value = true
jump({
type: JumpType.INNER,
url: "/pages/activity/register",
})
return;
}
// jump({
// type: JumpType.H5,
......@@ -2646,7 +2629,7 @@ const handleTaskPersonSubmit = (formData) => {
// 任务点击事件
const handleTaskClick = (data) => {
console.log('任务点击:', data);
// 如果是完善信息任务,显示TaskPerson弹窗
if (data.task && data.task.title === '完善信息') {
showTaskPop.value = false; // 先关闭TaskPop
......@@ -2655,7 +2638,7 @@ const handleTaskClick = (data) => {
}, 100);
return;
}
// 其他任务的处理逻辑
// 这里可以添加具体的任务跳转逻辑
// uni.showToast({
......
......@@ -16,8 +16,7 @@
<image class="banner_cover" :src="$baseUrl + 'my/cover_white.png'" mode="aspectFill" />
</view>
<button v-if="!cfgStatus.isRegister" type="primary" class="phone-button" open-type="getPhoneNumber"
@getphonenumber="getRealtimePhoneNumber" />
<button v-if="!cfgStatus.isRegister" type="primary" class="phone-button" @click="clickRegisterShield"/>
<!-- 用户信息区域 -->
<view class="user-info" :style="{ 'min-height': cfgStatus.showDetail ? '343rpx' : '180rpx' }">
......@@ -95,13 +94,16 @@
<view class="tool-container" v-if="toolList?.length > 0">
<text class="tool-title"> 工具 </text>
<view class="tool-list">
<view class="tool-item" v-for="item in toolList" :key="item.title" @click="handleToolClick(item)">
<image class="tool-icon" :src="item.bgUrl?.includes('http') ? item.bgUrl : $baseUrl + item.bgUrl"
mode="aspectFit" />
<!-- || item.title == '产检提醒' || item.title == '喂养记录' || item.title == '生长测评' -->
<button v-if="(item.title == '医生问诊') && !cfgStatus.isRegister" class="tool-btn-register" type="primary"
open-type="getPhoneNumber" @getphonenumber="getRealtimePhoneNumber" />
</view>
<template v-for="item in toolList" :key="item.title">
<view v-if="!item.hidden" class="tool-item" @click="handleToolClick(item)">
<image class="tool-icon" :src="$baseUrl + item.bgUrl" mode="aspectFit" />
<!-- || item.title == '产检提醒' || item.title == '喂养记录' || item.title == '生长测评' -->
<button
v-if="(item.title == '医生问诊') && !cfgStatus.isRegister"
class="tool-btn-register" type="primary" open-type="getPhoneNumber"
@getphonenumber="getRealtimePhoneNumber" />
</view>
</template>
</view>
</view>
......@@ -204,6 +206,12 @@ const handleHot = (e) => {
}
};
function clickRegisterShield(){
jump({
type: JumpType.INNER,
url: "/pages/activity/register",
})
}
// 页面跳转
const navigateTo = (url) => {
......@@ -304,12 +312,12 @@ const handleEditProfile = (e) => {
componentContent: "资料编辑"
})
const type = userStore.babyInfo?.allBabyBaseInfo?.length == 0 ? "add" : "edit";
babyId.value = userStore.babyInfo?.allBabyBaseInfo.find(
(item) => item.selected
)?.id;
const type = userStore.babyInfo?.allBabyBaseInfo?.length ? "edit" : "add";
if (type === "edit") {
babyId.value = userStore.babyInfo?.allBabyBaseInfo.find(
(item) => item.selected
)?.id;
navigateTo(`/pages/person/person?type=${type}&id=${babyId.value}`);
} else {
navigateTo(`/pages/person/person?type=${type}`);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment