Browse Source

feat: 分包优化;

pull/1/head
Fox-33 9 months ago
parent
commit
b4dc369a10
92 changed files with 757 additions and 2576 deletions
  1. +0
    -169
      components/config/PrivacyAgreementPoup.vue
  2. +1
    -1
      components/home/productSwiper.vue
  3. +0
    -336
      components/progress/progressCircleLine.vue
  4. +0
    -112
      components/user/productList.vue
  5. +0
    -130
      components/userShop/userShopCommission.vue
  6. +33
    -21
      pages.json
  7. +16
    -16
      pages/index/cart.vue
  8. +0
    -191
      pages/index/category.vue
  9. +0
    -353
      pages/index/center copy.vue
  10. +6
    -6
      pages/index/center.vue
  11. +33
    -32
      pages/index/index.vue
  12. +0
    -263
      pages/index/order.vue
  13. +6
    -6
      pages/index/product.vue
  14. +6
    -6
      pages/index/report.vue
  15. +39
    -0
      pages_order/auth/facialVerify.vue
  16. +0
    -0
      pages_order/cart/productCard.vue
  17. +0
    -0
      pages_order/center/accountCard.vue
  18. +0
    -0
      pages_order/center/orderCard.vue
  19. +0
    -0
      pages_order/center/reportCard.vue
  20. +0
    -0
      pages_order/center/styles/card.scss
  21. +1
    -1
      pages_order/checkup/checkupBook/apply.vue
  22. +1
    -1
      pages_order/checkup/checkupBook/detail.vue
  23. +5
    -5
      pages_order/checkup/checkupRecords.vue
  24. +160
    -2
      pages_order/checkup/checkupReport/index.vue
  25. +18
    -215
      pages_order/checkup/checkupReport/reportCommonView.vue
  26. +153
    -0
      pages_order/checkup/checkupReport/reportDetectView.vue
  27. +130
    -0
      pages_order/checkup/checkupReport/reportTableView.vue
  28. +86
    -0
      pages_order/checkup/checkupReport/style.scss
  29. +2
    -1
      pages_order/checkup/checkupServicePopup.vue
  30. +4
    -2
      pages_order/home/achievementIntro.vue
  31. +0
    -0
      pages_order/home/followUsIntro.vue
  32. +1
    -1
      pages_order/home/healthRecordsIntro.vue
  33. +1
    -1
      pages_order/home/recommendSwiper.vue
  34. +0
    -0
      pages_order/home/teamBgIntro.vue
  35. +0
    -172
      pages_order/mine/help.vue
  36. +0
    -283
      pages_order/mine/promotion.vue
  37. +0
    -109
      pages_order/mine/purse.vue
  38. +0
    -88
      pages_order/mine/runningWater.vue
  39. +0
    -0
      pages_order/product/productCard.vue
  40. +0
    -0
      pages_order/product/styles/tab.scss
  41. +0
    -0
      pages_order/product/tabCourse/courseLiveCard.vue
  42. +5
    -5
      pages_order/product/tabCourse/courseRecommendView.vue
  43. +4
    -3
      pages_order/product/tabCourse/index.vue
  44. +4
    -4
      pages_order/product/tabDetect/detectCustomView.vue
  45. +12
    -12
      pages_order/product/tabDetect/detectPackageView.vue
  46. +4
    -4
      pages_order/product/tabDetect/detectRecommendSwiper.vue
  47. +3
    -2
      pages_order/product/tabDetect/index.vue
  48. +2
    -2
      pages_order/product/tabNutrient/index.vue
  49. +1
    -1
      pages_order/product/tabNutrient/nutrientCustomView.vue
  50. +4
    -4
      pages_order/product/tabNutrient/nutrientRecommendSwiper.vue
  51. +5
    -5
      pages_order/report/nutritionProgram/index.vue
  52. +3
    -3
      pages_order/report/recommendTest.vue
  53. +1
    -1
      pages_order/report/reportRecordCard.vue
  54. +1
    -1
      pages_order/report/reportSummary/index.vue
  55. +3
    -3
      pages_order/report/reportSummary/progressCircle.vue
  56. +3
    -3
      pages_order/report/result/index.vue
  57. BIN
      pages_order/static/auth/Frame 1142814287.png
  58. BIN
      pages_order/static/checkup/qrcode.png
  59. BIN
      pages_order/static/index/achievement-1.png
  60. BIN
      pages_order/static/index/achievement-2.png
  61. BIN
      pages_order/static/index/achievement-3.png
  62. BIN
      pages_order/static/index/achievement-4.png
  63. BIN
      pages_order/static/index/achievement-5.png
  64. BIN
      pages_order/static/index/detection-step-bg.png
  65. BIN
      pages_order/static/index/follow-reason-1.png
  66. BIN
      pages_order/static/index/follow-reason-2.png
  67. BIN
      pages_order/static/index/follow-reason-3.png
  68. BIN
      pages_order/static/index/medicine-4.png
  69. BIN
      pages_order/static/index/medicine-5.png
  70. BIN
      pages_order/static/index/medicine-6.png
  71. BIN
      pages_order/static/index/swiper-bg.png
  72. BIN
      pages_order/static/product/course-1.png
  73. BIN
      pages_order/static/product/course-2.png
  74. BIN
      pages_order/static/product/course-3.png
  75. BIN
      pages_order/static/product/course-4.png
  76. BIN
      pages_order/static/product/detect-1.png
  77. BIN
      pages_order/static/product/detect-10.png
  78. BIN
      pages_order/static/product/detect-11.png
  79. BIN
      pages_order/static/product/detect-12.png
  80. BIN
      pages_order/static/product/detect-13.png
  81. BIN
      pages_order/static/product/detect-14.png
  82. BIN
      pages_order/static/product/detect-15.png
  83. BIN
      pages_order/static/product/detect-2.png
  84. BIN
      pages_order/static/product/detect-3.png
  85. BIN
      pages_order/static/product/detect-4.png
  86. BIN
      pages_order/static/product/detect-5.png
  87. BIN
      pages_order/static/product/detect-6.png
  88. BIN
      pages_order/static/product/detect-7.png
  89. BIN
      pages_order/static/product/detect-8.png
  90. BIN
      pages_order/static/product/detect-9.png
  91. BIN
      pages_order/static/product/live.png
  92. BIN
      pages_order/static/report/detection-eyes.png

+ 0
- 169
components/config/PrivacyAgreementPoup.vue View File

@ -1,169 +0,0 @@
<template>
<uv-popup ref="popup" z-index="99999" :closeOnClickOverlay="false" :customStyle="{ backgroundColor: 'transparent' }">
<view class="privacyPopup">
<view class="icon">
<image src="/static/image/PrivacyAgreementPoup/icon.png"
mode=""></image>
</view>
<view class="title">
<view>协议与隐私政策</view>
</view>
<view class="content_pri">
<view class="text">
欢迎来到酒店布草!我们根据最新的法律法规监管政策要求更新了用户协议隐私政策,请您认真阅读
</view>
</view>
<view class="config">
<uv-checkbox-group v-model="checkboxValue" shape="circle">
<view class="content">
<view style="display: flex;">
<!-- <uv-checkbox size="30rpx" :name="1"></uv-checkbox> -->
同意<text @click="goToPrivacy">酒店布草隐私政策</text>
</view>
<view class="">
以及<text @click="goToPrivacy">用户协议</text>
</view>
</view>
</uv-checkbox-group>
</view>
<view class="pri_btn">
<button class="confuse_btn" @click="confusePrivacy">拒绝</button>
<button
class="confirm_btn" id="agree-btn"
open-type="agreePrivacyAuthorization"
@agreeprivacyauthorization="handleAgreePrivacyAuthorization">同意</button>
</view>
</view>
</uv-popup>
</template>
<script>
export default {
name: 'PrivacyAgreementPoup',
data() {
return {
resolvePrivacyAuthorization: {},
checkboxValue : false
}
},
mounted() {
if(wx.getPrivacySetting){
wx.getPrivacySetting({
success: res => {
console.log(res)
if (res.needAuthorization) {
//
this.init()
}
},
fail: () => {}
})
}
},
methods: {
//
init(resolve) {
this.$refs.popup.open('center')
this.resolvePrivacyAuthorization = resolve
},
//
goToPrivacy() {
wx.openPrivacyContract({
success: () => {
console.log('打开成功');
}, //
fail: () => {
uni.showToast({
title: '打开失败,稍后重试',
icon: 'none'
})
} //
})
},
//
confusePrivacy() {
this.$refs.popup.close()
// this.resolvePrivacyAuthorization({
// event: 'disagree'
// })
},
//
handleAgreePrivacyAuthorization() {
// id
// this.resolvePrivacyAuthorization({
// buttonId: 'agree-btn',
// event: 'agree'
// })
this.$refs.popup.close()
}
}
}
</script>
<style lang="scss" scoped>
.privacyPopup {
width: 90%;
margin: 0rpx auto;
background: white;
border-radius: 20rpx;
box-sizing: border-box;
padding: 40rpx 30rpx;
.icon{
display: flex;
justify-content: center;
align-items: center;
padding-bottom: 30rpx;
image{
width: 90rpx;
height: 90rpx;
}
}
.title {
text-align: center;
font-size: 36rpx;
}
.content_pri {
padding: 30rpx 0rpx;
font-size: 28rpx;
}
.config {
font-size: 28rpx;
text-align: center;
line-height: 40rpx;
margin-bottom: 30rpx;
text {
color: $uni-color;
}
.content{
display: flex;
}
}
.pri_btn {
display: flex;
.confuse_btn{
background-color: #F2F2F2;
color: #BDBDBD;
}
button {
margin: 10rpx;
flex: 1;
background: $uni-color;
outline: none;
color: white;
font-size: 30rpx;
}
}
}
</style>

+ 1
- 1
components/home/productSwiper.vue View File

@ -44,7 +44,7 @@
</template>
<script>
import indicator from './indicator.vue'
import indicator from '@/components/home/indicator.vue'
export default {
components: {


+ 0
- 336
components/progress/progressCircleLine.vue View File

@ -1,336 +0,0 @@
<template>
<view class="progress_box">
<div class="bg-outer"></div>
<canvas class="progress progress-outer" canvas-id="cpouterline" type="2d"></canvas>
<div class="bg-inner"></div>
<canvas class="progress progress-inner" canvas-id="cpinnerline" type="2d"></canvas>
<div class="bg-score bg-score-min">0</div>
<div class="bg-score bg-score-max">100</div>
<div class="progress progress-info">
<div class="flex">
<div class="progress-score">{{ progress }}</div>
<div class="progress-unit"></div>
</div>
<div class="progress-desc">体检分数</div>
</div>
</view>
</template>
<script>
export default {
props: {
progress: {
type: Number,
default: 0
}
},
data() {
return {
outerCanvas: {},
innerCanvas: {},
ratio: 1,
dpr: 1,
}
},
mounted() {
this.init()
},
methods: {
init() {
uni.createSelectorQuery().in(this)
.select('.progress-outer')
.fields({
node: true,
size: true
})
.exec(async (res) => {
// Canvas
const width = res[0].width
const dpr = wx.getWindowInfo().pixelRatio
let Ratio = width / 446
this.outerCanvas = res[0]
this.ratio = Ratio
this.dpr = dpr
uni.createSelectorQuery().in(this)
.select('.progress-inner')
.fields({
node: true,
size: true
})
.exec(async (res) => {
this.innerCanvas = res[0]
this.drawOuterLine(this.progress)
this.drawInnerLine(this.progress)
})
})
},
drawOuterLine(step) {
uni.createSelectorQuery().in(this)
.select('.progress-outer')
.fields({
node: true,
size: true
})
.exec(async (res) => {
const canvas = res[0].node
// Canvas
const width = res[0].width
const height = res[0].height
//dpr
const dpr = wx.getWindowInfo().pixelRatio
canvas.width = width * dpr
canvas.height = height * dpr
let Ratio = width / 446
//
const ctx = canvas.getContext('2d')
ctx.scale(dpr, dpr)
ctx.clearRect(0, 0, width, height)
let r = 210 * Ratio
let x = this.outerCanvas.width / 2
let y = this.outerCanvas.height - this.innerCanvas.height / 2
let lineWidth = 10 * Ratio;
let lineHeight = 26 * Ratio;
let startAngle = 0
// (x--Yx++Y)
let gradient = ctx.createLinearGradient(x - r, y, x + r, y);
gradient.addColorStop('0', '#7451DE');
gradient.addColorStop('1.0', '#B1A4FF');
ctx.strokeStyle = '#E5E5E5';
ctx.save()
for (let i = 0; i < 11; i++) {
ctx.beginPath();
if (i % 5) {
lineWidth = 6 * Ratio;
lineHeight = 15 * Ratio;
} else {
lineWidth = 10 * Ratio;
lineHeight = 18 * Ratio;
}
if (step >= i * 10) {
ctx.strokeStyle = gradient;
} else {
ctx.restore();
}
ctx.lineWidth = lineWidth;
ctx.lineCap = 'round';
let angle = startAngle - Math.PI * i / 10
let x0 = x - r * Math.cos(angle)
let y0 = y + r * Math.sin(angle)
let x1 = x0 + lineHeight * Math.cos(angle)
let y1 = y0 - lineHeight * Math.sin(angle)
ctx.moveTo(x0, y0);
ctx.lineTo(x1, y1);
ctx.stroke();
ctx.closePath();
}
})
},
drawInnerLine(step) {
uni.createSelectorQuery().in(this)
.select('.progress-inner')
.fields({
node: true,
size: true
})
.exec(async (res) => {
const canvas = res[0].node
// Canvas
const width = res[0].width
const height = res[0].height
//dpr
const dpr = wx.getWindowInfo().pixelRatio
canvas.width = width * dpr
canvas.height = height * dpr
let Ratio = width / 356
//
const ctx = canvas.getContext('2d')
ctx.scale(dpr, dpr)
ctx.clearRect(0, 0, width, height)
let r = 140 * Ratio
let x = this.innerCanvas.width / 2
let y = this.innerCanvas.height / 2
let lineWidth = 5 * Ratio;
let lineHeight = 28 * Ratio;
// (x--Yx++Y)
let gradient = ctx.createLinearGradient(x - r, y, x + r, y);
gradient.addColorStop('0', '#E81717');
gradient.addColorStop('0.5', '#ECBD00');
gradient.addColorStop('1.0', '#0DB556');
ctx.lineWidth = lineWidth;
ctx.strokeStyle = '#989898';
ctx.save()
let angle = 0
let i = 0
while (angle > - Math.PI) {
ctx.beginPath();
if (i % 2) {
angle -= Math.PI / 50
i++
continue
}
if (step * Math.PI / 100 >= -angle) {
ctx.strokeStyle = gradient;
} else {
ctx.restore();
}
let x0 = x - r * Math.cos(angle)
let y0 = y + r * Math.sin(angle)
let x1 = x0 + lineHeight * Math.cos(angle)
let y1 = y0 - lineHeight * Math.sin(angle)
ctx.moveTo(x0, y0);
ctx.lineTo(x1, y1);
ctx.stroke();
ctx.closePath();
angle -= Math.PI / 100
i++
}
})
},
}
}
</script>
<style lang="scss" scoped>
$size: 356rpx;
.progress_box {
position: relative;
width: 100vw;
height: 402rpx;
}
.progress {
position: absolute;
left: 50%;
transform: translateX(-50%);
&-outer {
width: 446rpx;
height: 100%;
}
&-inner {
width: $size;
height: $size;
bottom: 0;
}
&-info {
position: absolute;
left: 50%;
bottom: calc(#{$size} / 2);
transform: translate(-50%, calc(50% + 5rpx));
}
&-score {
font-size: 48rpx;
font-weight: 600;
font-family: PingFang SC;
color: #000000;
}
&-unit {
font-size: 28rpx;
font-weight: 600;
font-family: PingFang SC;
color: #000000;
margin-left: 8rpx;
}
&-desc {
font-size: 26rpx;
font-weight: 400;
font-family: PingFang SC;
color: #989898;
text-align: center;
}
}
.bg {
&-outer {
position: absolute;
left: 50%;
transform: translateX(-50%);
bottom: 0;
width: $size;
height: $size;
border-radius: 50%;
box-shadow: inset 4px 4px 16px #8D96B466,
4px 4px 16px 0 rgba(141, 150, 180, 0.3),
// 2px 2px 2px 0 #8D96B466,
-2px -2px 8px 0 #FFFFFF,
-1px -1px 14px 0 #FFFFFF;
}
&-inner {
position: absolute;
left: 50%;
transform: translateX(-50%);
bottom: 28rpx;
width: 300rpx;
height: 300rpx;
background-color: #EEF0F6;
border-radius: 50%;
box-shadow: 6px 6px 6px 0 #0000000F,
-4px -4px 13px 0 #FFFFFF,
4px 4px 7px 0 #00000012,
}
&-score {
color: #989898;
font-size: 26rpx;
font-weight: 400;
position: absolute;
left: 50%;
top: 50%;
&-min {
transform: translate(-303rpx, 0);
}
&-max {
transform: translate(263rpx, 0);
}
}
}
</style>

+ 0
- 112
components/user/productList.vue View File

@ -1,112 +0,0 @@
<template>
<view class="list">
<view class="item"
v-for="(item, index) in 10"
@click="$utils.navigateTo('/pages_order/product/productDetail?id=123')"
:key="index">
<image
class="image"
src="https://img95.699pic.com/photo/50058/1378.jpg_wh860.jpg" mode=""></image>
<view class="info">
<view class="title">
桌布租赁
</view>
<view class="price">
<text>58</text>/
</view>
<view class="favorable">
<view class="t">
限时优惠
</view>
<view class="p">
48
</view>
</view>
<view class="num">
已售卖5000+
</view>
</view>
<view class="btn">
<uv-icon name="shopping-cart"
color="#fff"></uv-icon>
</view>
</view>
</view>
</template>
<script>
export default {
name:"productList",
data() {
return {
};
},
methods : {
},
}
</script>
<style scoped lang="scss">
.list{
display: flex;
flex-wrap: wrap;
.item{
position: relative;
width: 300rpx;
padding: 20rpx;
background-color: #fff;
border-radius: 20rpx;
margin-top: 20rpx;
&:nth-child(odd){
margin-right: 20rpx;
}
.image{
width: 300rpx;
height: 250rpx;
border-radius: 20rpx;
}
.info{
font-size: 26rpx;
.title{
font-size: 30rpx;
}
.price{
color: #D03F25;
margin-top: 6rpx;
text{
font-size: 34rpx;
font-weight: 900;
}
}
.favorable{
display: flex;
background-image: url(/static/image/product/favorable.png);
background-size: 100% 100%;
width: fit-content;
padding: 5rpx 10rpx;
font-size: 18rpx;
margin-top: 6rpx;
.p{
color: #fff;
margin-left: 10rpx;
}
}
.num{
margin-top: 6rpx;
font-size: 22rpx;
color: #888;
}
}
.btn{
position: absolute;
right: 20rpx;
bottom: 20rpx;
padding: 10rpx;
border-radius: 50%;
background-color: $uni-color;
}
}
}
</style>

+ 0
- 130
components/userShop/userShopCommission.vue View File

@ -1,130 +0,0 @@
<template>
<view class="commission">
<image src="/static/image/center/10.png" mode=""></image>
<view class="price">
<view class="title">
总佣金
</view>
<view class="num">
7890.34
</view>
</view>
<view class="font-menu"
v-if="purse">
<view @click="toRunningWater(index)"
v-for="(item, index) in list"
:key="index">{{ item.name }}</view>
</view>
<view class="btn"
v-if="!purse"
@click="toPurse">
提现
</view>
</view>
</template>
<script>
export default {
name: "userShopCommission",
props : {
purse : {
default : false,
},
},
data() {
return {
list : [
{
name : '余额记录',
},
{
name : '提现记录',
},
{
name : '佣金记录',
},
],
};
},
methods : {
//
toPurse(){
uni.navigateTo({
url:'/pages_order/mine/purse'
})
},
//
toRunningWater(index){
uni.navigateTo({
url:'/pages_order/mine/runningWater?status=' + index
})
},
}
}
</script>
<style scoped lang="scss">
.commission {
width: 700rpx;
height: 300rpx;
position: relative;
margin: 20rpx auto;
color: #fff;
image {
width: 700rpx;
height: 300rpx;
position: absolute;
border-radius: 20rpx;
}
.price {
position: absolute;
left: 50rpx;
top: 80rpx;
font-weight: 900;
.title {
font-size: 32rpx;
}
.num {
font-size: 44rpx;
margin-top: 20rpx;
}
}
.font-menu {
font-size: 24rpx;
font-family: PingFang SC, PingFang SC-Regular;
font-weight: 500;
text-align: center;
color: #ffffff;
line-height: 24rpx;
width: 710rpx;
position: absolute;
left: 0;
bottom: 25rpx;
display: flex;
view{
width: 160rpx;
}
}
.btn {
position: absolute;
right: 50rpx;
bottom: 50rpx;
background-color: #FDC440;
width: 160rpx;
height: 60rpx;
display: flex;
justify-content: center;
align-items: center;
border-radius: 30rpx;
}
}
</style>

+ 33
- 21
pages.json View File

@ -2,32 +2,58 @@
"pages": [{
"path": "pages/index/index",
"style": {
"navigationBarTitleText": ""
"navigationBarTitleText": "",
"componentPlaceholder": {
"recommend-swiper": "view",
"health-records-intro": "view",
"achievement-intro": "view",
"team-bg-intro": "view",
"follow-us-intro": "view"
}
}
},
{
"path": "pages/index/report",
"style": {
"navigationBarTitleText": "",
"componentPlaceholder": {
"report-summary": "view",
"recommend-test": "view",
"report-record-card": "view"
},
"enablePullDownRefresh": true
}
},
{
"path": "pages/index/product",
"style": {
"navigationBarTitleText": ""
"navigationBarTitleText": "",
"componentPlaceholder": {
"tab-nutrient": "view",
"tab-detect": "view",
"tab-course": "view"
}
}
},
{
"path": "pages/index/cart",
"style": {
"navigationBarTitleText": ""
"navigationBarTitleText": "",
"componentPlaceholder": {
"cart-product-card": "view",
"recommend-product-card": "view"
}
}
},
{
"path": "pages/index/center",
"style": {
"navigationBarTitleText": ""
"navigationBarTitleText": "",
"componentPlaceholder": {
"report-card": "view",
"order-card": "view",
"account-card": "view"
}
}
}
],
@ -52,6 +78,9 @@
{
"path": "auth/loginAndRegisterAndForgetPassword"
},
{
"path": "auth/facialVerify"
},
{
"path": "report/test/intro"
},
@ -111,23 +140,6 @@
},
{
"path": "checkup/checkupReport/index"
},
{
"path": "order/orderDetail"
},
{
"path": "mine/purse"
},
{
"path": "mine/runningWater"
},
{
"path": "mine/help"
},
{
"path": "mine/promotion"
}
]
}],


+ 16
- 16
pages/index/cart.vue View File

@ -40,11 +40,11 @@
<template v-if="total">
<view>
<view class="card" v-for="(item, index) in list" :key="item.id">
<productCard
<cart-product-card
:data="item"
@select="onSelect(index, $event)"
@change="onChange(index, $event)"
></productCard>
></cart-product-card>
</view>
</view>
</template>
@ -55,11 +55,11 @@
</view>
<view class="recommend">
<view v-for="item in recommendList" :key="item.id">
<recommendProductCard
<recommend-product-card
:data="item"
cardStyle="width: 100%; height: 210px;"
imgStyle="width: 100%; height: 110px;"
></recommendProductCard>
></recommend-product-card>
</view>
</view>
</template>
@ -96,13 +96,13 @@
import mixinsList from '@/mixins/list.js'
import tabber from '@/components/base/tabbar.vue'
import productCard from '@/components/cart/productCard.vue'
import recommendProductCard from '@/components/product/productCard.vue'
import cartProductCard from '@/pages_order/cart/productCard.vue'
import recommendProductCard from '@/pages_order/product/productCard.vue'
export default {
mixins: [mixinsList],
components: {
productCard,
cartProductCard,
recommendProductCard,
tabber,
},
@ -140,7 +140,7 @@
this.list = [
{
id: '001',
url: '/pages_order/static/index/recommend-pic.png',
url: '',
name: '月度装定制营养包',
price: 688,
count: 1,
@ -155,7 +155,7 @@
},
{
id: '002',
url: '/pages_order/static/index/recommend-pic.png',
url: '',
name: '月度装定制营养包',
price: 688,
count: 1,
@ -170,7 +170,7 @@
},
{
id: '003',
url: '/pages_order/static/index/recommend-pic.png',
url: '',
name: '月度装定制营养包',
price: 688,
count: 1,
@ -185,7 +185,7 @@
},
{
id: '004',
url: '/pages_order/static/index/recommend-pic.png',
url: '',
name: '月度装定制营养包',
price: 688,
count: 1,
@ -200,7 +200,7 @@
},
{
id: '005',
url: '/pages_order/static/index/recommend-pic.png',
url: '',
name: '月度装定制营养包',
price: 688,
count: 1,
@ -230,7 +230,7 @@
this.recommendList = [
{
id: '001',
url: '/pages_order/static/index/recommend-pic.png',
url: '',
name: '月度装定制营养包',
sales: 24770,
price: 688.00,
@ -238,7 +238,7 @@
},
{
id: '002',
url: '/pages_order/static/index/recommend-pic.png',
url: '',
name: '月度装定制营养包',
sales: 24770,
price: 688.00,
@ -246,7 +246,7 @@
},
{
id: '003',
url: '/pages_order/static/index/recommend-pic.png',
url: '',
name: '月度装定制营养包',
sales: 24770,
price: 688.00,
@ -254,7 +254,7 @@
},
{
id: '004',
url: '/pages_order/static/index/recommend-pic.png',
url: '',
name: '月度装定制营养包',
sales: 24770,
price: 688.00,


+ 0
- 191
pages/index/category.vue View File

@ -1,191 +0,0 @@
<template>
<view class="page">
<navbar/>
<view class="category">
<uv-vtabs
:chain="chain"
:list="category"
height="1000px"
:barItemBadgeStyle="{right:'20px',top:'12px'}"
@change="change">
<uv-vtabs-item>
<view class="category-title">
租赁
</view>
<view class="list">
<view class="item" v-for="(item,index) in list" :key="index"
@click="$utils.navigateTo('/pages_order/product/productDetail?id=123')">
<view class="item-image">
<image
:src="item.image"
mode="aspectFill"></image>
</view>
<view class="item-unit">
<text class="text">{{item.unit}}</text>
</view>
</view>
</view>
</uv-vtabs-item>
</uv-vtabs>
</view>
<tabber select="category" />
</view>
</template>
<script>
import tabber from '@/components/base/tabbar.vue'
export default {
components: {
tabber,
},
data() {
return {
category: [
{
name : '桌布'
},
{
name : '桌布'
},
{
name : '桌布'
},
],
list : [
{
unit : '100*50*60',
image : 'https://img95.699pic.com/photo/50058/1378.jpg_wh860.jpg',
},
{
unit : '100*50*60',
image : 'https://img95.699pic.com/photo/50058/1378.jpg_wh860.jpg',
},
{
unit : '100*50*60',
image : 'https://img95.699pic.com/photo/50058/1378.jpg_wh860.jpg',
},
{
unit : '100*50*60',
image : 'https://img95.699pic.com/photo/50058/1378.jpg_wh860.jpg',
},
{
unit : '100*50*60',
image : 'https://img95.699pic.com/photo/50058/1378.jpg_wh860.jpg',
},
{
unit : '100*50*60',
image : 'https://img95.699pic.com/photo/50058/1378.jpg_wh860.jpg',
},
{
unit : '100*50*60',
image : 'https://img95.699pic.com/photo/50058/1378.jpg_wh860.jpg',
},
{
unit : '100*50*60',
image : 'https://img95.699pic.com/photo/50058/1378.jpg_wh860.jpg',
},
{
unit : '100*50*60',
image : 'https://img95.699pic.com/photo/50058/1378.jpg_wh860.jpg',
},
],
chain: false,
value: 0
}
},
computed: {
list2() {
const _list = this.list[this.value]?.childrens;
return _list ? _list : [];
}
},
onReady() {
},
methods: {
change(index) {
console.log('选项改变:', index)
this.value = index;
}
}
}
</script>
<style scoped lang="scss">
.page{
/deep/ .uv-vtabs{
height: calc(100vh - 360rpx) !important;
}
/deep/ .uv-vtabs__bar{
height: calc(100vh - 360rpx) !important;
}
/deep/ .uv-vtabs__content{
height: calc(100vh - 360rpx) !important;
}
}
.category {
font-size: 30rpx;
color: #333;
.category-title{
position: relative;
display: flex;
justify-content: center;
align-items: center;
height: 120rpx;
&::before,
&::after {
position: absolute;
top: 50%;
content: '';
width: 10%;
border-top: 2rpx solid black;
}
&::before {
left: 25%;
}
&::after {
right: 25%;
}
}
.list{
display: flex;
flex-wrap: wrap;
margin: 0 auto;
width: 490rpx;
.item {
padding: 10rpx 20rpx;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
margin-bottom: 20rpx;
.item-image {
width: 120rpx;
height: 120rpx;
image{
height: 100%;
width: 100%;
border-radius: 50%;
}
}
.item-unit {
font-size: 24rpx;
margin-top: 15rpx;
color: #555;
}
}
.gap {
padding: 0 30rpx;
}
}
}
</style>

+ 0
- 353
pages/index/center copy.vue View File

@ -1,353 +0,0 @@
<template>
<view class="page">
<navbar title="个人中心" />
<view class="head">
<view class="headImage">
<image src="" mode=""></image>
</view>
<view class="info">
<view class="name">
倾心.
</view>
<!-- <view class="vip">
VIP1
</view> -->
<view class="tips">
今天是您来的的第32天
</view>
</view>
<!-- <view class="headBtn" @click="headBtn">
角色切换
</view> -->
<view class="setting">
<uv-icon name="setting" size="40rpx"></uv-icon>
</view>
</view>
<!-- 水洗店 -->
<view class="userShop" v-if="userShop">
<userShopCommission />
<view class="userList">
<view class="title">
我的用户
</view>
<view class="list">
<view class="item" v-for="(item, index) in 20" :key="index">
<view class="name">
客户王生
</view>
<view class="num">
剩余水洗布198
</view>
</view>
</view>
</view>
</view>
<!-- 酒店 -->
<view class="user" v-else>
<view class="line">
<view class="item">
<view class="image">
<image src="/static/image/center/1.png" mode=""></image>
</view>
<view class="">
余额3000
</view>
</view>
<view class="item">
<view class="image">
<image src="/static/image/center/4.png" mode=""></image>
</view>
<view class="">
押金30000
</view>
</view>
</view>
<view class="line grid">
<view class="title">
常用功能
</view>
<uv-grid :col="4" :border="false">
<uv-grid-item @click="$utils.navigateTo('/pages_order/mine/address')">
<image class="image" src="/static/image/center/7.png" mode=""></image>
<text class="grid-text">地址管理</text>
</uv-grid-item>
<uv-grid-item @click="$utils.redirectTo('/index/order')">
<image class="image" src="/static/image/center/8.png" mode=""></image>
<text class="grid-text">订单管理</text>
</uv-grid-item>
<uv-grid-item @click="$utils.navigateTo('/pages_order/order/refundsOrExchange?index='+0)">
<image class="image" src="/static/image/center/5.png" mode=""></image>
<text class="grid-text">换货</text>
</uv-grid-item>
<uv-grid-item @click="$utils.navigateTo('/pages_order/order/refundsOrExchange?index='+1)">
<image class="image" src="/static/image/center/7.png" mode=""></image>
<text class="grid-text">退货</text>
</uv-grid-item>
</uv-grid>
</view>
<view class="line grid">
<uv-grid :col="4" :border="false">
<uv-grid-item @click="contactUs">
<image class="image" src="/static/image/center/9.png" mode=""></image>
<text class="grid-text">联系客服</text>
</uv-grid-item>
<uv-grid-item>
<image class="image" src="/static/image/center/6.png" mode=""></image>
<text class="grid-text">我的租赁</text>
</uv-grid-item>
<uv-grid-item @click="$utils.redirectTo('/index/cart')">
<image class="image" src="/static/image/center/7.png" mode=""></image>
<text class="grid-text">租赁车</text>
</uv-grid-item>
<uv-grid-item
@click="$utils.navigateTo('/pages_order/auth/loginAndRegisterAndForgetPassword?index='+2)">
<image class="image" src="/static/image/center/7.png" mode=""></image>
<text class="grid-text">申请成为水洗店</text>
</uv-grid-item>
</uv-grid>
</view>
</view>
<tabber select="center" />
</view>
</template>
<script>
import tabber from '@/components/base/tabbar.vue'
import {
mapGetters
} from 'vuex'
import userShopCommission from '@/components/userShop/userShopCommission.vue'
export default {
components: {
tabber,
userShopCommission,
},
computed: {
...mapGetters(['userShop']),
},
data() {
return {
}
},
methods: {
headBtn() {
let self = this
uni.showModal({
title: '演示切换角色之后的效果',
success(res) {
if (res.confirm) {
self.$store.state.shop = !self.$store.state.shop
}
}
})
},
}
}
</script>
<style scoped lang="scss">
.page {
.warp {
display: flex;
align-items: center;
justify-content: center;
height: 100%;
}
.rect {
width: 600rpx;
height: 300rpx;
background-color: #fff;
border-radius: 20rpx;
overflow: hidden;
.title {
padding: 10rpx 0 0 15rpx;
background-color: #fd5100;
color: #FFF;
text-align: left;
width: 100%;
height: 18%;
font-size: 36rpx;
}
.center {
height: 40%;
display: flex;
justify-content: center;
align-items: center;
font-size: 36rpx;
}
.bottom {
display: flex;
justify-content: center;
gap: 50rpx;
}
}
}
image {
width: 100%;
height: 100%;
}
.head {
display: flex;
background-color: #fff;
padding: 40rpx 20rpx;
align-items: center;
position: relative;
.headImage {
width: 120rpx;
height: 120rpx;
// background-image: url(/static/image/center/3.png);
background-size: 100% 100%;
overflow: hidden;
border-radius: 50%;
margin-right: 40rpx;
}
.info {
font-size: 28rpx;
.vip {
background-color: #FCCC92;
color: #FA6239;
width: 100rpx;
display: flex;
justify-content: center;
align-items: center;
height: 40rpx;
border-radius: 20rpx;
margin-top: 20rpx;
}
.name {
font-size: 32rpx;
}
.tips {
font-size: 26rpx;
color: #ABABAB;
}
}
.headBtn {
margin-left: auto;
padding: 15rpx 20rpx;
background-color: $uni-color;
color: #fff;
border-radius: 20rpx;
margin-top: 50rpx;
}
.setting {
position: absolute;
right: 50rpx;
top: 50rpx;
}
}
.userShop {
.userList {
.title {
font-size: 32rpx;
font-weight: 900;
padding: 20rpx;
}
.list {
display: flex;
flex-wrap: wrap;
.item {
width: 270rpx;
margin: 20rpx;
display: flex;
flex-direction: column;
padding: 40rpx 30rpx;
background-color: #fff;
border-radius: 30rpx;
line-height: 60rpx;
.name {}
.num {
color: $uni-color;
font-weight: 600;
font-size: 28rpx;
}
}
}
}
}
.user {
.line {
display: flex;
background-color: #fff;
margin-top: 20rpx;
padding: 20rpx 0;
.item {
flex: 1;
display: flex;
justify-content: center;
align-items: center;
padding: 20rpx 0;
&:nth-child(1) {
border-right: 1px solid #00000013;
}
.image {
width: 100rpx;
height: 70rpx;
margin-right: 20rpx;
}
}
}
.grid {
flex-direction: column;
font-size: 26rpx;
padding: 20rpx;
.title {
margin-bottom: 30rpx;
font-size: 28rpx;
font-weight: 600;
}
.image {
width: 70rpx;
height: 70rpx;
margin-bottom: 10rpx;
}
text {
text-align: center;
width: 120rpx;
}
}
}
</style>

+ 6
- 6
pages/index/center.vue View File

@ -20,9 +20,9 @@
</view>
</view>
<reportCard></reportCard>
<orderCard></orderCard>
<accountCard></accountCard>
<report-card></report-card>
<order-card></order-card>
<account-card></account-card>
<view class="card">
<view v-for="item in list1" :key="item.id">
@ -62,9 +62,9 @@
import { mapState } from 'vuex'
import tabber from '@/components/base/tabbar.vue'
import reportCard from '@/components/center/reportCard.vue'
import orderCard from '@/components/center/orderCard.vue'
import accountCard from '@/components/center/accountCard.vue'
import reportCard from '@/pages_order/center/reportCard.vue'
import orderCard from '@/pages_order/center/orderCard.vue'
import accountCard from '@/pages_order/center/accountCard.vue'
export default {
components: {


+ 33
- 32
pages/index/index.vue View File

@ -10,17 +10,17 @@
<view class="section">
<sectionHeader title="个性推荐" desc="Personal Recommendation"></sectionHeader>
<recommendSwiper :list="recommendList"></recommendSwiper>
<healthRecordsIntro :list="detectionStepList"></healthRecordsIntro>
<recommend-swiper :list="recommendList"></recommend-swiper>
<health-records-intro :list="detectionStepList"></health-records-intro>
</view>
<view class="section">
<achievementIntro :list="achievementList"></achievementIntro>
<achievement-intro :list="achievementList"></achievement-intro>
</view>
<view class="section">
<sectionHeader title="团队成员背景" desc="Background of Team Members"></sectionHeader>
<teamBgIntro :list="medicineList"></teamBgIntro>
<team-bg-intro :list="medicineList"></team-bg-intro>
</view>
<view class="section">
@ -29,7 +29,7 @@
关注我们<br/>参与更多健康活动
</template>
</sectionHeader>
<followUsIntro :articleList="followReasonList" :wayList="followWayList"></followUsIntro>
<follow-us-intro :articleList="followReasonList" :wayList="followWayList"></follow-us-intro>
</view>
</view>
@ -41,13 +41,13 @@
<script>
import tabber from '@/components/base/tabbar.vue'
import productSwiper from '@/components/home/productSwiper.vue'
import sectionHeader from '@/components/home/sectionHeader.vue'
import recommendSwiper from '@/components/home/recommendSwiper.vue'
import healthRecordsIntro from '@/components/home/healthRecordsIntro.vue'
import achievementIntro from '@/components/home/achievementIntro.vue'
import teamBgIntro from '@/components/home/teamBgIntro.vue'
import followUsIntro from '@/components/home/followUsIntro.vue'
import productSwiper from '@/components/home/productSwiper.vue'
import recommendSwiper from '@/pages_order/home/recommendSwiper.vue'
import healthRecordsIntro from '@/pages_order/home/healthRecordsIntro.vue'
import achievementIntro from '@/pages_order/home/achievementIntro.vue'
import teamBgIntro from '@/pages_order/home/teamBgIntro.vue'
import followUsIntro from '@/pages_order/home/followUsIntro.vue'
export default {
components: {
@ -72,10 +72,11 @@
}
},
onLoad() {
this.productSwiperList = [
{
id: '001',
url: '/pages_order/static/index/swiper-bg.png',
url: '',
arr: [
{ text: '你是独一无二的', class: 'font1' },
{ text: '你的健康数据也是', class: 'font2' },
@ -88,7 +89,7 @@
},
{
id: '002',
url: '/pages_order/static/index/swiper-bg.png',
url: '',
arr: [
{ text: '你是独一无二的', class: 'font1' },
{ text: '你的健康数据也是', class: 'font2' },
@ -101,7 +102,7 @@
},
{
id: '003',
url: '/pages_order/static/index/swiper-bg.png',
url: '',
arr: [
{ text: '你是独一无二的', class: 'font1' },
{ text: '你的健康数据也是', class: 'font2' },
@ -117,7 +118,7 @@
this.recommendList = [
{
id: '001',
url: '/pages_order/static/index/recommend-pic.png',
url: '',
arr: [
{ text: '你的身体在“说话”', class: 'font1' },
{ text: '你听懂了吗?', class: 'font2' },
@ -127,7 +128,7 @@
},
{
id: '002',
url: '/pages_order/static/index/recommend-pic.png',
url: '',
arr: [
{ text: '你的健康', class: 'font1' },
{ text: '需要“管理员”', class: 'font2' },
@ -137,7 +138,7 @@
},
{
id: '003',
url: '/pages_order/static/index/recommend-pic.png',
url: '',
arr: [
{ text: '你的身体在“说话”', class: 'font1' },
{ text: '你听懂了吗?', class: 'font2' },
@ -151,19 +152,19 @@
{
id: '001',
title: '定制检测',
url: '/pages_order/static/index/detection-step-bg.png',
url: '',
desc: '测评读懂你的身体语言,完成定制化检测。',
},
{
id: '002',
title: '定制检测',
url: '/pages_order/static/index/detection-step-bg.png',
url: '',
desc: '用数据精准跟踪你的健康档案。',
},
{
id: '003',
title: '定制检测',
url: '/pages_order/static/index/detection-step-bg.png',
url: '',
desc: '测评读懂你的身体语言,完成定制化检测。',
},
]
@ -171,52 +172,52 @@
this.achievementList = [
{
id: '001',
url: '/pages_order/static/index/achievement-1.png',
url: '',
},
{
id: '002',
url: '/pages_order/static/index/achievement-2.png',
url: '',
},
{
id: '003',
url: '/pages_order/static/index/achievement-3.png',
url: '',
},
]
this.medicineList = [
{
id: '001',
url: '/pages_order/static/index/medicine-1.png',
url: '',
zh: '维生素D',
en: 'Vitamin D',
},
{
id: '002',
url: '/pages_order/static/index/medicine-2.png',
url: '',
zh: '维生素B2',
en: 'Vitamin B2',
},
{
id: '003',
url: '/pages_order/static/index/medicine-3.png',
url: '',
zh: '维生素P',
en: 'Vitamin P',
},
{
id: '004',
url: '/pages_order/static/index/medicine-4.png',
url: '',
zh: '维生素M',
en: 'Vitamin M',
},
{
id: '005',
url: '/pages_order/static/index/medicine-5.png',
url: '',
zh: '维生素B1',
en: 'Vitamin B1',
},
{
id: '006',
url: '/pages_order/static/index/medicine-6.png',
url: '',
zh: '维生素C',
en: 'Vitamin C',
},
@ -225,17 +226,17 @@
this.followReasonList = [
{
id: '001',
url: '/pages_order/static/index/follow-reason-1.png',
url: '',
path: '/pages_order/auth/wxLogin',
},
{
id: '002',
url: '/pages_order/static/index/follow-reason-2.png',
url: '',
path: '/pages_order/auth/wxLogin',
},
{
id: '003',
url: '/pages_order/static/index/follow-reason-3.png',
url: '',
path: '/pages_order/auth/wxLogin',
},
]


+ 0
- 263
pages/index/order.vue View File

@ -1,263 +0,0 @@
<template>
<view class="page">
<navbar
title="订单中心"
/>
<uv-tabs :list="tabs"
:activeStyle="{color : '#FD5100', fontWeight : 600}"
lineColor="#FD5100"
lineHeight="8rpx"
lineWidth="50rpx"
@click="clickTabs"></uv-tabs>
<view v-if="orderList.length > 0" class="list">
<view class="item"
v-for="(item, index) in orderList.records"
@click="toOrderDetail(item.id)"
:key="index">
<view class="top">
<view class="service">
<text>{{item.projectId_dictText}}</text>
<text>{{item.type_dictText}}</text>
</view>
<view class="status">
<text> {{item.state_dictText}}</text>
</view>
</view>
<view class="content">
<view class="left">
<image mode="aspectFill" :src="item.image"></image>
</view>
<view class="right">
<view class="text-hidden-1">
客户姓名{{item.name}}
</view>
<view class="text-hidden-1">
产品规格{{item.unit}}
</view>
<view class="text-hidden-1">
租赁地址{{item.address}}
</view>
<!-- <view class="text-hidden-1">
总计时间{{item.useTime}}分钟
</view> -->
</view>
</view>
<view class="bottom">
<view class="price">
总价格<text class="num">{{item.money}}</text>
</view>
<view class="b1">
查看物流
</view>
<!-- <view @click.stop="toPayOrder(item)" class="b2" v-if="item.state == 0">
立即付款
</view>
<view class="b1" @click.stop="moreOrder(item.projectId,toPlaceorder)" v-if="item.state == 3">
再来一单
</view>
<view class="b2" @click.stop="toEvaluate(item.id,item.projectId,item.technicianId)" v-if="item.state == 3">
立即评价
</view>
<view class="b2" @click.stop="moreOrder(item.projectId,toPlaceorder)" v-if="item.state == 4">
再来一单
</view> -->
</view>
</view>
</view>
<tabber select="order"/>
</view>
</template>
<script>
import tabber from '@/components/base/tabbar.vue'
import { mapGetters } from 'vuex'
export default {
components : {
tabber,
},
computed : {
...mapGetters(['userShop']),
},
data() {
return {
tabs: [{
name: '全部'
},
{
name: '租赁押金'
},
{
name: '水洗租赁'
},
{
name: '破损换货'
},
{
name: '退货退款'
}
],
queryParams: {
pageNo: 1,
pageSize: 10
},
// orderList: [
// {
// money : 99.99,
// address : '广广C32802',
// name : '**',
// phone : '150*****091',
// unit : '120*40*75',
// image : 'https://img95.699pic.com/photo/50058/1378.jpg_wh860.jpg',
// state_dictText : '',
// }
// ], //
orderList : {
records : [],
total : 0,
},
state : -1,
}
},
onShow() {
this.orderPage()
},
//
onReachBottom() {
if(this.queryParams.pageSize < this.orderList.total){
this.queryParams.pageSize += 10
this.orderPage()
}
},
methods: {
orderPage(){
let queryParams = {
...this.queryParams,
}
if(this.state != -1){
queryParams.state = this.state
}
this.$api('orderPage', queryParams, res => {
if(res.code == 200){
this.orderList = res.result
}
})
},
//tab
clickTabs(index) {
if (index == 0) {
this.state = -1;
} else {
this.state = index - 1;
}
this.queryParams.pageSize = 10
this.orderPage()
},
//
toOrderDetail(id) {
uni.navigateTo({
url: '/pages_order/order/orderDetail?id=' + id
})
},
getOrderList(){
},
}
}
</script>
<style scoped lang="scss">
.page{
}
.list {
.item {
width: calc(100% - 40rpx);
background-color: #fff;
margin: 20rpx;
box-sizing: border-box;
border-radius: 16rpx;
padding: 30rpx;
.top {
display: flex;
justify-content: space-between;
align-items: center;
font-size: 30rpx;
.service {}
.status {
font-size: 26rpx;
font-weight: 600;
}
}
.content {
display: flex;
margin: 10rpx 0;
.left {
width: 150rpx;
height: 150rpx;
border-radius: 10rpx;
image {
width: 150rpx;
height: 150rpx;
border-radius: 10rpx;
}
}
.right {
width: calc(100% - 160rpx);
color: #777;
font-size: 24rpx;
padding-left: 20rpx;
line-height: 40rpx;
background-color: #F8F8F8;
}
}
.bottom {
display: flex;
justify-content: space-between;
font-size: 25rpx;
.price {
font-weight: 900;
text {
color: #ff780099;
font-size: 30rpx;
}
}
.b1 {
border: 1px solid #777;
color: #777;
box-sizing: border-box;
}
.b2 {
background: linear-gradient(178deg, #4FD3BC, #60C285);
color: #fff;
}
view {
margin: 12rpx;
border-radius: 28rpx;
padding: 8rpx 28rpx;
margin-bottom: 0;
}
}
}
}
</style>

+ 6
- 6
pages/index/product.vue View File

@ -29,11 +29,11 @@
</navbar>
<!-- 营养素 -->
<tabNutrient v-if="current == 0"></tabNutrient>
<tab-nutrient v-if="current == 0"></tab-nutrient>
<!-- 检测 -->
<tabDetect v-else-if="current == 1"></tabDetect>
<tab-detect v-else-if="current == 1"></tab-detect>
<!-- 课程 -->
<tabCourse v-else-if="current == 2"></tabCourse>
<tab-course v-else-if="current == 2"></tab-course>
<tabber select="product" />
@ -42,9 +42,9 @@
<script>
import tabber from '@/components/base/tabbar.vue'
import tabNutrient from '@/components/product/tabNutrient.vue'
import tabDetect from '@/components/product/tabDetect.vue'
import tabCourse from '@/components/product/tabCourse.vue'
import tabNutrient from '@/pages_order/product/tabNutrient/index.vue'
import tabDetect from '@/pages_order/product/tabDetect/index.vue'
import tabCourse from '@/pages_order/product/tabCourse/index.vue'
export default {
components: {


+ 6
- 6
pages/index/report.vue View File

@ -6,10 +6,10 @@
</navbar>
<view class="content">
<reportSummary></reportSummary>
<report-summary></report-summary>
<view class="section">
<recommendTest></recommendTest>
<recommend-test></recommend-test>
</view>
<view class="section">
@ -24,7 +24,7 @@
</view>
</view>
<view>
<reportRecordCard v-for="item in list" :key="item.id" :data="item"></reportRecordCard>
<report-record-card v-for="item in list" :key="item.id" :data="item"></report-record-card>
</view>
</view>
</view>
@ -38,9 +38,9 @@
import mixinsList from '@/mixins/list.js'
import tabber from '@/components/base/tabbar.vue'
import reportSummary from '@/components/report/reportSummary.vue'
import recommendTest from '@/components/report/recommendTest.vue'
import reportRecordCard from '@/components/report/reportRecordCard.vue'
import reportSummary from '@/pages_order/report/reportSummary/index.vue'
import recommendTest from '@/pages_order/report/recommendTest.vue'
import reportRecordCard from '@/pages_order/report/reportRecordCard.vue'
export default {
mixins: [mixinsList],


+ 39
- 0
pages_order/auth/facialVerify.vue View File

@ -0,0 +1,39 @@
<<template>
<view>
<button style="margin-top: 100px;" @click="onClick">人脸识别</button>
</view>
</template>
<script>
export default {
methods: {
onClick() {
console.log('onClick')
wx.startFacialRecognitionVerify({
name: '江燕汾', //
idCardNumber: '440603199901174222', //
checkAliveType: 2, //(0,)
success: function (res) {
var verifyResult = res.verifyResult; //
console.log("res", res)
if(res.errCode == 0){
// res.verifyResult
// this.verify(userName, userIdCard,verifyResult)
}else{
tipInfo("识别失败")
}
},
fail: err => {
console.log("err", err)
wx.showToast('请保持光线充足,面部正对手机,且无遮挡')
}
})
},
},
}
</script>
<style>
</style>>

components/cart/productCard.vue → pages_order/cart/productCard.vue View File


components/center/accountCard.vue → pages_order/center/accountCard.vue View File


components/center/orderCard.vue → pages_order/center/orderCard.vue View File


components/center/reportCard.vue → pages_order/center/reportCard.vue View File


components/center/styles/card.scss → pages_order/center/styles/card.scss View File


+ 1
- 1
pages_order/checkup/checkupBook/apply.vue View File

@ -459,7 +459,7 @@
const detail = {
id: '003',
url: '/pages_order/static/product/detect-8.png',
url: '',
title: '孕产妇体检套餐',
userName: '周小艺',
phone: '15558661691',


+ 1
- 1
pages_order/checkup/checkupBook/detail.vue View File

@ -160,7 +160,7 @@
let detail = {
id: '003',
url: '/pages_order/static/product/detect-8.png',
url: '',
title: '孕产妇体检套餐',
userName: '周小艺',
phone: '15558661691',


+ 5
- 5
pages_order/checkup/checkupRecords.vue View File

@ -82,7 +82,7 @@
this.list = [
{
id: '001',
url: '/pages_order/static/product/detect-8.png',
url: '',
title: '月度装定制营养包',
userName: '周小艺',
phone: '15558661691',
@ -94,7 +94,7 @@
},
{
id: '002',
url: '/pages_order/static/product/detect-8.png',
url: '',
title: '青少年体检套餐',
userName: '周小艺',
phone: '15558661691',
@ -106,7 +106,7 @@
},
{
id: '003',
url: '/pages_order/static/product/detect-8.png',
url: '',
title: '孕产妇体检套餐',
userName: '周小艺',
phone: '15558661691',
@ -117,7 +117,7 @@
},
{
id: '004',
url: '/pages_order/static/product/detect-8.png',
url: '',
title: '青少年体检套餐',
userName: '周小艺',
phone: '15558661691',
@ -129,7 +129,7 @@
},
{
id: '005',
url: '/pages_order/static/product/detect-8.png',
url: '',
title: '青少年体检套餐',
userName: '周小艺',
phone: '15558661691',


+ 160
- 2
pages_order/checkup/checkupReport/index.vue View File

@ -16,12 +16,20 @@
</view>
<view class="section">
<reportCommonView :data="detail"></reportCommonView>
<reportCommonView :list="detail.commonlist"></reportCommonView>
</view>
<view class="section">
<reportDetectView :data="detail"></reportDetectView>
</view>
<view class="section">
<reportTableView :list="detail.tableList"></reportTableView>
</view>
</view>
<view class="bottom">
<button class="flex btn" @click="jumpToNutritionProgram">查看营养方案</button>
<button class="flex btn" @click="onDownload">下载PDF</button>
</view>
</view>
</template>
@ -31,6 +39,8 @@
import reportMainIndexView from './reportMainIndexView.vue'
import reportAbnormalView from './reportAbnormalView.vue'
import reportCommonView from './reportCommonView.vue'
import reportDetectView from './reportDetectView.vue'
import reportTableView from './reportTableView.vue'
export default {
components: {
@ -38,6 +48,8 @@
reportMainIndexView,
reportAbnormalView,
reportCommonView,
reportDetectView,
reportTableView,
},
data() {
return {
@ -115,6 +127,78 @@
desc: '建议进一步监测;常规测甲状腺功能全套,甲状腺。',
},
],
commonlist: [
{
id: '001',
label: '血小板',
value: '5.2',
standrad: '125~350×10^9/L',
status: 1,
},
{
id: '002',
label: '血红蛋白',
value: '4.8',
standrad: '110 ~ 150g/L',
status: 1,
},
{
id: '003',
label: '白细胞',
value: '3.0',
standrad: '3.9-6.1mmol/L',
status: 1,
},
{
id: '004',
label: '转氨酶',
value: '7.0',
standrad: '3.9-6.1mmol/L',
status: 1,
},
{
id: '005',
label: '胆红素',
value: '17',
standrad: '3.9-6.1mmol/L',
status: 1,
},
{
id: '006',
label: '白蛋白',
value: '15',
standrad: '3.9-6.1mmol/L',
status: 1,
},
{
id: '007',
label: '肌酐',
value: '4',
standrad: '3.9-6.1mmol/L',
status: 1,
},
{
id: '008',
label: '尿酸',
value: '556',
standrad: '3.9-6.1mmol/L',
status: 0,
},
{
id: '009',
label: '血压',
value: '23',
standrad: '3.9-6.1mmol/L',
status: 0,
},
{
id: '010',
label: '甘油三酯',
value: '56',
standrad: '3.9-6.1mmol/L',
status: 0,
},
],
chronicFoodAllergyList: [
{
id: '001',
@ -271,6 +355,80 @@
{ id: '009', label: '心理', value: 78 },
{ id: '010', label: '心理', value: 100 },
],
tableList: [
{
id: '001',
name: '慢性食物过敏',
significance: '评估个体对特定食物的免疫反应,主要检测IgG抗体水平。了解个体对不同食物的免疫反应程度,以帮助识别可能引起不适症状的食物,并指导个体的饮食调整和管理策略。辅助诊断和管理相关的消化问题和炎症疾病。',
sampling: '指尖血',
weight: 5,
done: 1,
},
{
id: '002',
name: '肠道菌群基因测序',
significance: '评估和分析个体肠道内微生物的组成和功能,以了解肠道健康状况和相关疾病的风险。以制定个性化的益生菌+ 营养策略和有害菌应对方案。',
sampling: '指尖血',
weight: 5,
done: 1,
},
{
id: '003',
name: '营养与毒性元素',
significance: '评估和分析个体肠道内微生物的组成和功能,以了解肠道健康状况和相关疾病的风险。以制定个性化的益生菌+ 营养策略和有害菌应对方案。',
sampling: '指尖血',
weight: 5,
done: 1,
},
{
id: '004',
name: '精准基因',
significance: '评估和分析个体肠道内微生物的组成和功能,以了解肠道健康状况和相关疾病的风险。以制定个性化的益生菌+ 营养策略和有害菌应对方案。',
sampling: '指尖血',
weight: 5,
done: 1,
},
{
id: '005',
name: '新陈代谢',
significance: '评估和分析个体肠道内微生物的组成和功能,以了解肠道健康状况和相关疾病的风险。以制定个性化的益生菌+ 营养策略和有害菌应对方案。',
sampling: '指尖血',
weight: 5,
done: 1,
},
{
id: '006',
name: '女性荷尔蒙&抗缪',
significance: '评估和分析个体肠道内微生物的组成和功能,以了解肠道健康状况和相关疾病的风险。以制定个性化的益生菌+ 营养策略和有害菌应对方案。',
sampling: '指尖血',
weight: 5,
done: 1,
},
{
id: '007',
name: '环境荷尔蒙',
significance: '评估和分析个体肠道内微生物的组成和功能,以了解肠道健康状况和相关疾病的风险。以制定个性化的益生菌+ 营养策略和有害菌应对方案。',
sampling: '指尖血',
weight: 5,
done: 1,
},
{
id: '008',
name: '抗压力荷尔蒙评估',
significance: '评估和分析个体肠道内微生物的组成和功能,以了解肠道健康状况和相关疾病的风险。以制定个性化的益生菌+ 营养策略和有害菌应对方案。',
sampling: '指尖血',
weight: 5,
done: 1,
},
{
id: '009',
name: '慢病风险',
significance: '评估和分析个体肠道内微生物的组成和功能,以了解肠道健康状况和相关疾病的风险。以制定个性化的益生菌+ 营养策略和有害菌应对方案。',
sampling: '指尖血',
weight: 5,
done: 1,
},
],
}
console.log('detail', this.detail)


+ 18
- 215
pages_order/checkup/checkupReport/reportCommonView.vue View File

@ -1,239 +1,42 @@
<template>
<view class="card">
<view class="card card-detect">
<view class="flex card-header">
<view class="title">检测数据</view>
<view class="title">常见指标</view>
</view>
<view class="section">
<view class="section-header">
<view class="title">慢性食物过敏检测</view>
<view class="desc">Chronic food allergy testing</view>
</view>
<view class="section-content index">
<view
class="index-item"
v-for="item in data.chronicFoodAllergyList"
:key="item.id"
>
<view class="flex top">
<view class="label">{{ item.label }}</view>
<view class="tag is-error" v-if="item.status === 0">{{ item.label }}</view>
</view>
<view class="flex main">
<text>当前</text><text class="value">{{ item.value }}</text>
</view>
<view class="bottom desc">{{ `* 标准值:${item.standrad}` }}</view>
<view class="section index">
<view
class="index-item"
v-for="item in list"
:key="item.id"
>
<view class="flex top">
<view class="label">{{ item.label }}</view>
<view class="tag is-error" v-if="item.status === 0">{{ item.label }}</view>
</view>
</view>
</view>
<view class="section">
<view class="section-header">
<view class="title">肠道菌群检测</view>
<view class="desc">Gut microbiome testing</view>
</view>
<view class="section-content index">
<view
class="index-item"
v-for="item in data.gutMicrobiomeList"
:key="item.id"
>
<view class="flex top">
<view class="label">{{ item.label }}</view>
<view class="tag is-error" v-if="item.status === 0">{{ item.label }}</view>
</view>
<view class="flex main">
<text>当前</text><text class="value">{{ item.value }}</text>
</view>
<view class="bottom desc">{{ `* 标准值:${item.standrad}` }}</view>
</view>
</view>
</view>
<view class="section">
<view class="section-header">
<view class="title">肠道菌群检测</view>
<view class="desc">Gut microbiome testing</view>
</view>
<view class="section-content score">
<view
class="score-item"
v-for="(item, index) in data.scoreList"
:key="item.id"
>
<view>
<progressLine :progress="item.value" :activeColor="getColor(index)"></progressLine>
</view>
<view class="flex info">
<view class="label">{{ `${item.label}` }}</view>
<view class="value">{{ item.value }}</view>
</view>
<view class="flex main">
<text>当前</text><text class="value">{{ item.value }}</text>
</view>
<view class="bottom desc">{{ `* 标准值:${item.standrad}` }}</view>
</view>
</view>
</view>
</template>
<script>
import progressLine from './progressLine.vue';
const COLORS = [
'#43B741',
'#43B741',
'#ECB501',
'#ECB501',
'#EB7F09',
'#EB7F09',
'#009CEF',
'#009CEF',
'#7451DE',
'#7451DE',
]
export default {
components: {
progressLine,
},
props: {
data: {
type: Object,
list: {
type: Array,
default() {
return {
chronicFoodAllergyList: [],
gutMicrobiomeList: [],
scoreList: [],
}
return []
}
},
},
data() {
return {
}
},
onLoad() {
console.log('onLoad', this.data)
},
methods: {
getColor(index) {
return COLORS[index % 10]
},
},
}
}
</script>
<style lang="scss" scoped>
@import './style.scss';
.card {
padding: 32rpx 24rpx;
background-image: linear-gradient(#F2EDFF, #FCFEFE);
border: 8rpx solid #F9F7FF;
border-radius: 64rpx;
&-header {
.title {
padding: 6rpx 14rpx;
display: inline-flex;
font-family: PingFang SC;
font-weight: 400;
font-size: 28rpx;
line-height: 1.5;
color: #252545;
border: 2rpx solid #252545;
border-radius: 30rpx;
}
}
.section {
margin-top: 40rpx;
&-header {
font-family: PingFang SC;
line-height: 1.4;
color: #252545;
.title {
font-weight: 600;
font-size: 32rpx;
}
.desc {
font-weight: 400;
font-size: 24rpx;
}
}
&-content {
margin-top: 32rpx;
}
}
}
.index {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 32rpx;
&-item {
font-family: PingFang SC;
font-weight: 400;
line-height: 1.4;
.top {
justify-content: space-between;
}
.main {
justify-content: flex-start;
column-gap: 12rpx;
font-size: 24rpx;
color: #8B8B8B;
}
.label {
font-size: 30rpx;
color: #000000;
}
.value {
font-weight: 400;
font-size: 28rpx;
color: #000000;
}
.desc {
font-size: 22rpx;
line-height: 1.6;
color: #989898;
}
}
}
.score {
display: grid;
grid-template-columns: repeat(2, 1fr);
column-gap: 32rpx;
row-gap: 36rpx;
&-item {
.info {
margin-top: 18rpx;
justify-content: flex-start;
column-gap: 12rpx;
font-family: PingFang SC;
line-height: 1.4;
.label {
font-weight: 400;
font-size: 24rpx;
}
.value {
font-weight: 500;
font-size: 28rpx;
}
}
}
}
</style>

+ 153
- 0
pages_order/checkup/checkupReport/reportDetectView.vue View File

@ -0,0 +1,153 @@
<template>
<view class="card card-detect">
<view class="flex card-header">
<view class="title">检测数据</view>
</view>
<view class="section">
<view class="section-header">
<view class="title">慢性食物过敏检测</view>
<view class="desc">Chronic food allergy testing</view>
</view>
<view class="section-content index">
<view
class="index-item"
v-for="item in data.chronicFoodAllergyList"
:key="item.id"
>
<view class="flex top">
<view class="label">{{ item.label }}</view>
<view class="tag is-error" v-if="item.status === 0">{{ item.label }}</view>
</view>
<view class="flex main">
<text>当前</text><text class="value">{{ item.value }}</text>
</view>
<view class="bottom desc">{{ `* 标准值:${item.standrad}` }}</view>
</view>
</view>
</view>
<view class="section">
<view class="section-header">
<view class="title">肠道菌群检测</view>
<view class="desc">Gut microbiome testing</view>
</view>
<view class="section-content index">
<view
class="index-item"
v-for="item in data.gutMicrobiomeList"
:key="item.id"
>
<view class="flex top">
<view class="label">{{ item.label }}</view>
<view class="tag is-error" v-if="item.status === 0">{{ item.label }}</view>
</view>
<view class="flex main">
<text>当前</text><text class="value">{{ item.value }}</text>
</view>
<view class="bottom desc">{{ `* 标准值:${item.standrad}` }}</view>
</view>
</view>
</view>
<view class="section">
<view class="section-header">
<view class="title">肠道菌群检测</view>
<view class="desc">Gut microbiome testing</view>
</view>
<view class="section-content score">
<view
class="score-item"
v-for="(item, index) in data.scoreList"
:key="item.id"
>
<view>
<progressLine :progress="item.value" :activeColor="getColor(index)"></progressLine>
</view>
<view class="flex info">
<view class="label">{{ `${item.label}` }}</view>
<view class="value">{{ item.value }}</view>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
import progressLine from './progressLine.vue';
const COLORS = [
'#43B741',
'#43B741',
'#ECB501',
'#ECB501',
'#EB7F09',
'#EB7F09',
'#009CEF',
'#009CEF',
'#7451DE',
'#7451DE',
]
export default {
components: {
progressLine,
},
props: {
data: {
type: Object,
default() {
return {
chronicFoodAllergyList: [],
gutMicrobiomeList: [],
scoreList: [],
}
}
},
},
data() {
return {
}
},
onLoad() {
console.log('onLoad', this.data)
},
methods: {
getColor(index) {
return COLORS[index % 10]
},
},
}
</script>
<style lang="scss" scoped>
@import './style.scss';
.score {
display: grid;
grid-template-columns: repeat(2, 1fr);
column-gap: 32rpx;
row-gap: 36rpx;
&-item {
.info {
margin-top: 18rpx;
justify-content: flex-start;
column-gap: 12rpx;
font-family: PingFang SC;
line-height: 1.4;
.label {
font-weight: 400;
font-size: 24rpx;
}
.value {
font-weight: 500;
font-size: 28rpx;
}
}
}
}
</style>

+ 130
- 0
pages_order/checkup/checkupReport/reportTableView.vue View File

@ -0,0 +1,130 @@
<template>
<view class="card card-detect">
<view class="flex card-header">
<view class="title">检测项目</view>
</view>
<view class="section">
<view class="table">
<view class="table-cell table-th" v-for="item in headers" :key="item.key">
{{ item.label }}
</view>
<template v-for="(row, index) in list">
<view :class="['table-cell', index % 2 ? 'is-double-row' : '']" v-for="item in headers" :key="getKey(row.id, item.key)" :style="item.style">
<template v-if="item.key === 'weight'">
<uv-rate :value="row.weight" size="48rpx" gutter="16rpx" activeColor="#F7BA1E" :allowHalf="true" :minCount="0.5" readonly></uv-rate>
</template>
<template v-else-if="item.key === 'done'">
{{ row.done ? '是' : '否' }}
</template>
<template v-else>
{{ row[item.key] }}
</template>
</view>
</template>
</view>
</view>
</view>
</template>
<script>
export default {
props: {
list: {
type: Array,
default() {
return []
}
}
},
data() {
return {
headers: [
{ key: 'name', label: '医学检测项目' },
{ key: 'significance', label: '检测意义', style: 'justify-content: flex-start;' },
{ key: 'sampling', label: '采样' },
{ key: 'weight', label: '权重' },
{ key: 'done', label: '是否检测' },
],
}
},
methods: {
getKey(id, key) {
return `${id}-${key}`
},
onDownload(result) {
console.log('onDownload')
// todo
uni.downloadFile({
url: result, //
success: (response) => {
if (response.statusCode === 200) {
console.log('下载成功');
//
const fileManager = wx.getFileSystemManager();
fileManager.saveFile({
tempFilePath: response.tempFilePath,
success: (res) => {
console.log(res, '下载成功');
uni.hideLoading();
},
fail: (err) => {
console.error('保存文件失败', err);
}
});
}
}
});
},
},
}
</script>
<style lang="scss" scoped>
@import './style.scss';
.table {
width: auto;
overflow-x: auto;
display: grid;
grid-template-columns: 385rpx 385rpx auto auto auto;
border: 2rpx solid #E6E6E6;
border-radius: 24rpx;
&-cell {
display: inline-flex;
align-items: center;
justify-content: center;
padding: 53rpx 8rpx;
box-sizing: border-box;
font-family: PingFang SC;
font-weight: 400;
font-size: 28rpx;
line-height: 1.5;
color: #080808;
background: #FCFBFF;
border-right: 2rpx solid #E6E6E6;
border-bottom: 2rpx solid #E6E6E6;
&:nth-child(5n) {
border-right: none;
}
&:nth-last-child(-n+5) {
border-bottom: none;
}
&.is-double-row {
background: #F7F4FF;
}
}
&-th {
white-space: nowrap;
padding: 24rpx 32rpx;
color: #252545;
background: #E6E6E6;
}
}
</style>

+ 86
- 0
pages_order/checkup/checkupReport/style.scss View File

@ -1,5 +1,91 @@
.card.card-detect {
padding: 32rpx 24rpx;
background-image: linear-gradient(#F2EDFF, #FCFEFE);
border: 8rpx solid #F9F7FF;
border-radius: 64rpx;
.card-header {
.title {
padding: 6rpx 14rpx;
display: inline-flex;
font-family: PingFang SC;
font-weight: 400;
font-size: 28rpx;
line-height: 1.5;
color: #252545;
border: 2rpx solid #252545;
border-radius: 30rpx;
}
}
.section {
margin-top: 40rpx;
&-header {
font-family: PingFang SC;
line-height: 1.4;
color: #252545;
.title {
font-weight: 600;
font-size: 32rpx;
}
.desc {
font-weight: 400;
font-size: 24rpx;
}
}
&-content {
margin-top: 32rpx;
}
}
.index {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 32rpx;
&-item {
font-family: PingFang SC;
font-weight: 400;
line-height: 1.4;
.top {
justify-content: space-between;
}
.main {
justify-content: flex-start;
column-gap: 12rpx;
font-size: 24rpx;
color: #8B8B8B;
}
.label {
font-size: 30rpx;
color: #000000;
}
.value {
font-weight: 400;
font-size: 28rpx;
color: #000000;
}
.desc {
font-size: 22rpx;
line-height: 1.6;
color: #989898;
}
}
}
}
.tag {
padding: 6rpx 16rpx;
font-family: PingFang SC;


+ 2
- 1
pages_order/checkup/checkupServicePopup.vue View File

@ -4,7 +4,8 @@
<view class="flex flex-column popup__view">
<view class="header">添加客服微信</view>
<view class="content">
<image class="qrcode" src="@/pages_order/static/checkup/qrcode.png" mode="widthFix"></image>
<!-- todo -->
<image class="qrcode" src="" mode="widthFix"></image>
</view>
</view>
</uv-popup>


components/home/achievementIntro.vue → pages_order/home/achievementIntro.vue View File

@ -14,7 +14,8 @@
我们携手<text class="highlight">营养学博士医学博士</text>以及<text class="highlight">人工智能算法工程师</text>组建了一支顶尖的专业团队
</view>
<view class="flex desc">
<image class="desc-img" src="@/pages_order/static/index/achievement-4.png" mode="scaleToFill"></image>
<!-- todo -->
<image class="desc-img" src="" mode="scaleToFill"></image>
<view class="desc-text">
团队依托<text class="highlight">先进的AI智能算法世界领先的检测手段与设备</text>充分考量用户个人的独特性参考国人的生活方式地域差异以及饮食习惯<br/>
为每一位客户建立个人专属健康档案并量身定制个性化的健康管理方案
@ -32,7 +33,8 @@
<view class="intro">
合作实验室以<text class="highlight">ISO 15189</text>为标准建立质量管理体系 保证实验室的有效且可靠的运营
</view>
<image class="intro-img" src="@/pages_order/static/index/achievement-5.png" mode="scaleToFill"></image>
<!-- todo -->
<image class="intro-img" src="" mode="scaleToFill"></image>
</view>
</view>
</view>

components/home/followUsIntro.vue → pages_order/home/followUsIntro.vue View File


components/home/healthRecordsIntro.vue → pages_order/home/healthRecordsIntro.vue View File

@ -48,7 +48,7 @@
</template>
<script>
import indicator from './indicator.vue'
import indicator from '@/components/home/indicator.vue'
export default {
components: {

components/home/recommendSwiper.vue → pages_order/home/recommendSwiper.vue View File

@ -41,7 +41,7 @@
</template>
<script>
import indicator from './indicator.vue'
import indicator from '@/components/home/indicator.vue'
export default {
components: {

components/home/teamBgIntro.vue → pages_order/home/teamBgIntro.vue View File


+ 0
- 172
pages_order/mine/help.vue View File

@ -1,172 +0,0 @@
<template>
<!-- 帮助与反馈 -->
<view class="help">
<navbar title="帮助与反馈" leftClick @leftClick="$utils.navigateBack" />
<view class="help-box">
<view>
<view class="help-issue">
<text>问题和意见</text>
<text style="color: #BD3624;">*</text>
</view>
<uv-textarea v-model="form.question" :count="true" border="none" height="400"
placeholder="请把发现的问题提交给我们,感谢您的参与(必填)"
:text-style="{color:'#BCB7B7',fontSize:'28rpx'}" />
</view>
<view>
<view class="help-issue">
<text>问题截图</text>
<!-- <text style="color: #BD3624;">*</text> -->
</view>
<view class="help-screenshot">
<uv-upload :fileList="fileList" multiple :maxCount="3" width="180rpx"
height="180rpx" multiple @afterRead="afterRead" @delete="deleteImage">
<image src="../static/help/uploading.png" mode="aspectFill"
style="width: 180rpx;height: 180rpx;" />
</uv-upload>
</view>
</view>
<view>
<view class="help-issue">
<text>联系方式</text>
<text style="color: #BD3624;">*</text>
</view>
<view class="form-sheet-cell">
<view>
联系姓名
</view>
<input placeholder="请输入联系姓名" v-model="form.name" />
</view>
<view class="form-sheet-cell">
<view>
联系电话
</view>
<input placeholder="请输入联系电话" v-model="form.phone" />
</view>
</view>
<view class="help-button">
<!-- <view>历史提交</view> -->
<view @click="submit">确认</view>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
form : {
question : '',
phone : '',
name : '',
image : '',
},
fileList: []
}
},
onLoad(args) {
},
methods: {
deleteImage(e){
this.fileList.splice(e.index, 1)
},
afterRead(e){
let self = this
e.file.forEach(file => {
self.$Oss.ossUpload(file.url).then(url => {
self.fileList.push({
url
})
})
})
},
submit(){
let data = JSON.parse(JSON.stringify(this.form))
if(this.$utils.verificationAll(this.form, {
question : '请输入你的问题和意见',//
// image : '',//
name : '请输入姓名',//
phone : '请输入手机号码',//
})){
return
}
data.image = this.fileList.map((item) => item.url).join(",")
this.$api('addAdvice', data, res => {
if(res.code == 200){
uni.showToast({
title: res.message,
icon:'none'
})
setTimeout(uni.navigateBack, 800, -1)
}
})
},
}
}
</script>
<style scoped lang="scss">
.help {
.help-box {
width: 92%;
margin-left: 4%;
.help-issue {
margin: 20rpx;
font-size: 28rpx;
font-weight: 600;
color: #333333;
}
.help-screenshot {
display: flex;
align-items: center;
background-color: #fff;
padding: 20rpx;
}
.form-sheet-cell{
display: flex;
background-color: #fff;
padding: 20rpx 30rpx;
font-size: 24rpx;
align-items: center;
view{
width: 150rpx;
}
}
.help-button {
display: flex;
justify-content: center;
font-size: 24rpx;
flex-shrink: 0;
margin-top: 60rpx;
view {
padding: 14rpx 120rpx;
border-radius: 38rpx;
}
view:nth-child(1) {
background: $uni-color;
color: #fff;
}
view:nth-child(2) {
color: #FFFDF6;
background-color: #C83741;
}
}
}
}
</style>

+ 0
- 283
pages_order/mine/promotion.vue View File

@ -1,283 +0,0 @@
<template>
<view class="promotion">
<navbar title="二维码"
bgColor="#A3D250"
color="#fff"
leftClick @leftClick="$utils.navigateBack" />
<view class="promotion-card">
<!-- <view class="user-info"> -->
<!-- <image class="image" :src="userInfo.headImage" mode="widthFix"></image> -->
<!-- <image class="image" src="../../static/logo.png" mode="widthFix"></image> -->
<!-- <view class="user-name">{{ userInfo.nickName }}</view> -->
<!-- <view class="user-name">湖南第一深情</view> -->
<!-- </view> -->
<!-- <view class="invitation-code-img">
<image
style="width: 400rpx;"
:src="imagePath" mode="widthFix"></image>
</view> -->
<image style="width: 100%;" :src="imagePath" mode="widthFix"></image>
<!-- <view class="invitation-code">加油站: {{ title }}</view> -->
<canvas id="myCanvas" type="2d" canvas-id="firstCanvas1"></canvas>
</view>
<view class="btns">
<view class="btn"
@click="preservationImg(imagePath)">保存</view>
<!-- <view class="btn">立即邀请</view> -->
</view>
</view>
</template>
<script>
import { mapState } from 'vuex'
export default {
name: 'Promotion',
computed: {
...mapState(['userInfo']),
},
data() {
return {
url: '',
title: '123123',
baseUrl: 'https://dianpin-img.xzaiyp.top/',
canvas: {},
imagePath: '',
}
},
onShow() {
this.getQrCode()
this.$store.commit('getUserInfo')
},
methods: {
getQrCode() {
this.$api('getInviteCode', res => {
if (res.code == 200) {
this.url = res.result.url
this.title = res.result.name
this.draw()
}
})
},
draw() {
uni.showLoading({
title: "拼命绘画中..."
})
wx.createSelectorQuery()
.select('#myCanvas') // canvasid
.fields({
node: true,
size: true
})
.exec((res) => {
const canvas = res[0].node
//
const ctx = canvas.getContext('2d')
// Canvas
const width = res[0].width
const height = res[0].height
//
const dpr = wx.getWindowInfo().pixelRatio
//dpr
// dpr 2 4
// 3 6
let Ratio = dpr * 2
console.log("bug", dpr)
canvas.width = width * dpr
canvas.height = height * dpr
this.canvas = canvas
ctx.scale(dpr, dpr)
ctx.clearRect(0, 0, width, height)
ctx.fillStyle = '#fff'
ctx.fillRect(0, 0, canvas.width, canvas.height)
//
// const image = canvas.createImage()
// image.onload = () => {
// ctx.drawImage(image, 30, 18, 40, 40)
// }
// image.src = '/public/img/wechar_1.png'
// image.src = this.userInfo.headImage
ctx.fillStyle = 'black'
ctx.font = '22px PingFangSC-regular';
let s = this.title || '加油站'
ctx.fillText(s, canvas.width / Ratio - s.length * 11, 50);
//
const coderImage = canvas.createImage()
coderImage.src = this.baseUrl + this.url
coderImage.onload = () => {
ctx.drawImage(coderImage,
canvas.width / Ratio - 240 / 2, 100, 240, 240)
}
//
setTimeout(() => {
wx.canvasToTempFilePath({
x: 0,
y: 0,
width: this.canvas.width,
height: this.canvas.height,
canvas,
success: (res) => {
var tempFilePath = res.tempFilePath;
this.imagePath = tempFilePath
uni.hideLoading()
}
});
}, 600);
})
},
back() {
uni.navigateBack(-1)
},
preservationImg(img) {
let that = this
uni.authorize({
/* scope.writePhotosAlbum 类型是保存到相册 */
scope: 'scope.writePhotosAlbum',
success() {
/* 已授权进入 */
/* 保存图片到相册方法方法 */
that.imgApi(img);
},
complete(res) {
/* 判断如果没有授权就打开设置选项让用户重新授权 */
uni.getSetting({
success(res) {
if (!res.authSetting['scope.writePhotosAlbum']) {
/* 打开设置的方法 */
that.openInstall();
}
}
});
}
});
},
imgApi(image) {
/* 获取图片的信息 */
uni.getImageInfo({
src: image,
success: function(image) {
/* 保存图片到手机相册 */
uni.saveImageToPhotosAlbum({
filePath: image.path,
success: function() {
uni.showModal({
title: '保存成功',
content: '图片已成功保存到相册',
showCancel: false
});
},
complete(res) {
console.log(res);
}
});
}
});
},
}
}
</script>
<style lang="scss" scoped>
.promotion {
width: 100%;
height: 100vh;
background-color: $uni-color;
.promotion-card {
width: 90%;
margin: 100rpx auto 0rpx auto;
box-shadow: 0rpx 0rpx 15rpx rgba(0, 0, 0, .2);
border-radius: 15rpx;
padding: 40rpx 30rpx;
box-sizing: border-box;
background-color: #fff;
.user-info {
display: flex;
align-items: center;
.image {
width: 80rpx;
height: 80rpx;
border-radius: 50%;
margin-right: 10rpx;
}
.user-name {
font-size: 30rpx;
}
}
.invitation-code-img {
display: flex;
align-items: center;
justify-content: center;
margin: 100rpx 0rpx;
.image {
width: 30%;
border-radius: 50%;
}
}
.invitation-code {
text-align: center;
color: #818181;
font-size: 28rpx;
}
}
.btns {
position: fixed;
left: 0;
bottom: 0;
width: 100%;
height: 120rpx;
display: flex;
background: #fff;
font-size: 28rpx;
color: $uni-color;
.btn {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
&:nth-child(2) {
background: orange;
}
}
}
}
#myCanvas {
position: fixed;
left: 100%;
/* visibility: hidden */
/* visibility: hidden; */
/* margin-top: 100rpx; */
margin: 68rpx auto;
width: 750rpx;
height: 750rpx;
/* line-height: 20px; */
background-color: rgba(255, 255, 255, 1);
text-align: center;
}
</style>

+ 0
- 109
pages_order/mine/purse.vue View File

@ -1,109 +0,0 @@
<template>
<view class="purse">
<navbar title="立即提现" leftClick @leftClick="$utils.navigateBack" />
<!-- 水洗店 -->
<view class="userShop">
<userShopCommission purse />
</view>
<view class="from-body">
<view>我要提现</view>
<view class="from-line">
<input placeholder="请输入提现金额" />
</view>
<view class="from-line">
<input placeholder="请输入姓名" />
</view>
<view class="from-line">
<input placeholder="请输入开户行" />
</view>
<view class="from-line">
<input placeholder="请输入银行卡卡号" />
</view>
<view class="mt56">提现说明</view>
<view style="line-height: 45rpx; font-size: 24rpx;color: #666666;" v-html="notice">
</view>
<!-- <p>1本次提现必须通过银行卡提现暂不支持其他途径</p>
<p>2如若遇到24小时提现未到账请联系客服</p> -->
</view>
<view class="b-fiexd">
<view class="button-submit">提交</view>
</view>
</view>
</template>
<script>
import userShopCommission from '@/components/userShop/userShopCommission.vue'
export default {
components: {
userShopCommission,
},
data() {
return {
notice : ''
}
},
methods: {
}
}
</script>
<style scoped lang="scss">
.purse{
min-height: 100vh;
background-color: #ffffff;
.from-body {
padding: 40rpx 20rpx;
font-size: 28rpx;
font-family: PingFang SC, PingFang SC-Bold;
font-weight: 700;
text-align: left;
color: #333333;
line-height: 40px;
padding-bottom: 160rpx;
.from-line {
margin-top: 40rpx;
}
input {
width: 612rpx;
height: 90rpx;
line-height: 90rpx;
background: #F5F5F5;
border-radius: 46rpx;
padding: 0 50rpx;
font-size: 28rpx;
font-family: PingFang SC, PingFang SC-Regular;
font-weight: 400;
text-align: left;
color: #333;
}
}
.button-submit {
width: 596rpx;
height: 90rpx;
line-height: 90rpx;
background: $uni-color;
border-radius: 46rpx;
margin: 20rpx auto;
font-size: 28rpx;
font-family: PingFang SC, PingFang SC-Regular;
font-weight: 400;
text-align: center;
color: #ffffff;
}
}
</style>

+ 0
- 88
pages_order/mine/runningWater.vue View File

@ -1,88 +0,0 @@
<template>
<view class="running-water">
<navbar :title="title[status]" leftClick @leftClick="leftClick" />
<view class="tab-box">
<view class="tab-box1" v-if="agentFlow && agentFlow.total">
<uv-cell center border :title="item.title"
v-for="(item, index) in agentFlow.records"
:value="x[item.type] + item.money" :label="item.createTime" />
</view>
<view
style="padding: 100rpx 0;"
v-else>
<uv-empty
mode="history"
textSize="28rpx"
iconSize="100rpx"/>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
title : ['余额记录','提现记录','佣金记录'],
agentFlow : {
total : 0,
records : [
{
type : 0,
money : 100,
createTime : '2024-04-02 20:00',
title : "佣金提现",
},
{
type : 0,
money : 100,
createTime : '2024-04-02 20:00',
title : "佣金提现",
},
{
type : 0,
money : 100,
createTime : '2024-04-02 20:00',
title : "佣金提现",
},
]
},
x : ['+', '-' , '-' , '+'],
status : 0,
}
},
onLoad(e) {
this.status = e.status
},
methods: {
leftClick() { //
uni.navigateBack(-1)
},
getAgentFlow(){ //
let type = this.status;
this.$api('getAgentFlow', { type }, res => {
if(res.code == 200){
this.agentFlow = res.result
}
})
},
}
}
</script>
<style lang="scss" scoped>
.running-water{
width: 750rpx;
background: #F5F5F5;
margin: 0 auto;
min-height: 100vh;
.tab-box{
margin: 20rpx;
background-color: #fff;
border-radius: 20rpx;
overflow: hidden;
}
}
</style>

components/product/productCard.vue → pages_order/product/productCard.vue View File


components/product/styles/tab.scss → pages_order/product/styles/tab.scss View File


components/product/courseLiveCard.vue → pages_order/product/tabCourse/courseLiveCard.vue View File


components/product/courseRecommendView.vue → pages_order/product/tabCourse/courseRecommendView.vue View File

@ -41,7 +41,7 @@
</template>
<script>
import productCard from '@/components/product/productCard.vue'
import productCard from '@/pages_order/product/productCard.vue'
export default {
components: {
@ -64,7 +64,7 @@
this.list = [
{
id: '001',
url: '/pages_order/static/product/course-1.png',
url: '',
name: '情绪管理课程',
sales: 24770,
price: 688.00,
@ -72,7 +72,7 @@
},
{
id: '002',
url: '/pages_order/static/product/course-2.png',
url: '',
name: '我认知与成长课程',
sales: 24770,
price: 688.00,
@ -80,7 +80,7 @@
},
{
id: '003',
url: '/pages_order/static/product/course-3.png',
url: '',
name: '情绪管理课程',
sales: 24770,
price: 688.00,
@ -88,7 +88,7 @@
},
{
id: '004',
url: '/pages_order/static/product/course-4.png',
url: '',
name: '我认知与成长课程',
sales: 24770,
price: 688.00,

components/product/tabCourse.vue → pages_order/product/tabCourse/index.vue View File

@ -36,7 +36,7 @@
</template>
<script>
import sectionHeader from './sectionHeader.vue'
import sectionHeader from '@/components/home/sectionHeader.vue'
import courseLiveCard from './courseLiveCard.vue'
import courseRecommendView from './courseRecommendView.vue'
@ -56,7 +56,7 @@
this.liveList = [
{
id: '001',
url: '/pages_order/static/product/live.png',
url: '',
startTime: '2025-07-25 19:30:00',
},
]
@ -81,5 +81,6 @@
</script>
<style scoped lang="scss">
@import './styles/tab.scss';
@import '../styles/tab.scss';
</style>

components/product/detectCustomView.vue → pages_order/product/tabDetect/detectCustomView.vue View File

@ -11,7 +11,7 @@
</template>
<script>
import productCard from '@/components/product/productCard.vue'
import productCard from '@/pages_order/product/productCard.vue'
export default {
components: {
@ -27,7 +27,7 @@
this.list = [
{
id: '001',
url: '/pages_order/static/product/detect-3.png',
url: '',
name: '腹部超声',
sales: 24770,
price: 688.00,
@ -35,7 +35,7 @@
},
{
id: '002',
url: '/pages_order/static/product/detect-4.png',
url: '',
name: '血常规',
sales: 24770,
price: 688.00,
@ -43,7 +43,7 @@
},
{
id: '003',
url: '/pages_order/static/product/detect-3.png',
url: '',
name: '腹部超声',
sales: 24770,
price: 688.00,

components/product/detectPackageView.vue → pages_order/product/tabDetect/detectPackageView.vue View File

@ -31,10 +31,10 @@ export default {
title: '儿童体检套餐',
desc: '适合3-12岁的儿童',
children: [
{ id: '0011', label: '腹部超声', url: '/pages_order/static/product/detect-3.png', },
{ id: '0012', label: '视力检查', url: '/pages_order/static/product/detect-5.png', },
{ id: '0013', label: '骨龄检测', url: '/pages_order/static/product/detect-6.png', },
{ id: '0014', label: '生长激素水平检测', url: '/pages_order/static/product/detect-7.png', },
{ id: '0011', label: '腹部超声', url: '', },
{ id: '0012', label: '视力检查', url: '', },
{ id: '0013', label: '骨龄检测', url: '', },
{ id: '0014', label: '生长激素水平检测', url: '', },
],
},
{
@ -42,10 +42,10 @@ export default {
title: '青少年体检套餐',
desc: '适用于13-18岁的青少年',
children: [
{ id: '0021', label: '身高', url: '/pages_order/static/product/detect-8.png', },
{ id: '0022', label: '血常规', url: '/pages_order/static/product/detect-9.png', },
{ id: '0023', label: '胸部 X 光', url: '/pages_order/static/product/detect-10.png', },
{ id: '0024', label: '心电图检查', url: '/pages_order/static/product/detect-11.png', },
{ id: '0021', label: '身高', url: '', },
{ id: '0022', label: '血常规', url: '', },
{ id: '0023', label: '胸部 X 光', url: '', },
{ id: '0024', label: '心电图检查', url: '', },
],
},
{
@ -53,10 +53,10 @@ export default {
title: '孕产妇体检套餐',
desc: '适用于孕期女性',
children: [
{ id: '0031', label: '胎儿超声检查', url: '/pages_order/static/product/detect-12.png', },
{ id: '0032', label: '唐氏筛查', url: '/pages_order/static/product/detect-13.png', },
{ id: '0033', label: '糖筛查试验', url: '/pages_order/static/product/detect-14.png', },
{ id: '0034', label: '血压', url: '/pages_order/static/product/detect-15.png', },
{ id: '0031', label: '胎儿超声检查', url: '', },
{ id: '0032', label: '唐氏筛查', url: '', },
{ id: '0033', label: '糖筛查试验', url: '', },
{ id: '0034', label: '血压', url: '', },
],
},
]

components/product/detectRecommendSwiper.vue → pages_order/product/tabDetect/detectRecommendSwiper.vue View File

@ -29,7 +29,7 @@
</template>
<script>
import productCard from '@/components/product/productCard.vue'
import productCard from '@/pages_order/product/productCard.vue'
import indicator from '@/components/home/indicator.vue'
export default {
@ -47,21 +47,21 @@
this.list = [
{
id: '001',
url: '/pages_order/static/product/detect-1.png',
url: '',
name: '心电图检查',
price: 688.00,
originalPrice: 1664,
},
{
id: '002',
url: '/pages_order/static/product/detect-2.png',
url: '',
name: '甲状腺功能检查',
price: 688.00,
originalPrice: 1664,
},
{
id: '003',
url: '/pages_order/static/product/detect-1.png',
url: '',
name: '心电图检查',
price: 688.00,
originalPrice: 1664,

components/product/tabDetect.vue → pages_order/product/tabDetect/index.vue View File

@ -51,7 +51,7 @@
</template>
<script>
import sectionHeader from './sectionHeader.vue'
import sectionHeader from '@/components/home/sectionHeader.vue'
import detectRecommendSwiper from './detectRecommendSwiper.vue'
import detectPackageViewVue from './detectPackageView.vue'
import detectCustomView from './detectCustomView.vue'
@ -91,5 +91,6 @@
</script>
<style scoped lang="scss">
@import './styles/tab.scss';
@import '../styles/tab.scss';
</style>

components/product/tabNutrient.vue → pages_order/product/tabNutrient/index.vue View File

@ -47,7 +47,7 @@
</template>
<script>
import sectionHeader from './sectionHeader.vue'
import sectionHeader from '@/components/home/sectionHeader.vue'
import nutrientRecommendSwiper from './nutrientRecommendSwiper.vue'
import nutrientCustomView from './nutrientCustomView.vue'
@ -84,6 +84,6 @@
</script>
<style scoped lang="scss">
@import './styles/tab.scss';
@import '../styles/tab.scss';
</style>

components/product/nutrientCustomView.vue → pages_order/product/tabNutrient/nutrientCustomView.vue View File

@ -65,7 +65,7 @@
</template>
<script>
import productCard from '@/components/product/productCard.vue'
import productCard from '@/pages_order/product/productCard.vue'
export default {
components: {

components/product/nutrientRecommendSwiper.vue → pages_order/product/tabNutrient/nutrientRecommendSwiper.vue View File

@ -26,7 +26,7 @@
</template>
<script>
import productCard from '@/components/product/productCard.vue'
import productCard from '@/pages_order/product/productCard.vue'
import indicator from '@/components/home/indicator.vue'
export default {
@ -44,7 +44,7 @@
this.list = [
{
id: '001',
url: '/pages_order/static/index/recommend-pic.png',
url: '',
name: '月度装定制营养包',
sales: 24770,
price: 688.00,
@ -52,7 +52,7 @@
},
{
id: '002',
url: '/pages_order/static/index/recommend-pic.png',
url: '',
name: '月度装定制营养包',
sales: 24770,
price: 688.00,
@ -60,7 +60,7 @@
},
{
id: '003',
url: '/pages_order/static/index/recommend-pic.png',
url: '',
name: '月度装定制营养包',
sales: 24770,
price: 688.00,

+ 5
- 5
pages_order/report/nutritionProgram/index.vue View File

@ -94,7 +94,7 @@
const detectionList = [
{
id: '0011',
url: '/pages_order/static/report/detection-eyes.png',
url: '',
name: '眼科检查',
desc: '早期发现眼部疾病',
originalPrice: 168,
@ -107,7 +107,7 @@
const baseList = [
{
id: '0021',
url: '/pages_order/static/index/medicine-1.png',
url: '',
name: '全株印度人参',
desc: '安享睡眠情绪舒展',
originalPrice: 688,
@ -119,7 +119,7 @@
},
{
id: '0022',
url: '/pages_order/static/index/medicine-2.png',
url: '',
name: '御氧虾青素',
desc: '安享睡眠情绪舒展',
originalPrice: 688,
@ -131,7 +131,7 @@
},
{
id: '0023',
url: '/pages_order/static/index/medicine-3.png',
url: '',
name: '全株印度人参',
desc: '安享睡眠情绪舒展',
originalPrice: 688,
@ -143,7 +143,7 @@
},
{
id: '0024',
url: '/pages_order/static/index/medicine-4.png',
url: '',
name: '全株印度人参',
desc: '安享睡眠情绪舒展',
originalPrice: 688,


components/report/recommendTest.vue → pages_order/report/recommendTest.vue View File

@ -11,7 +11,7 @@
</template>
<script>
import productCard from '@/components/product/productCard.vue'
import productCard from '@/pages_order/product/productCard.vue'
export default {
components: {
@ -26,7 +26,7 @@
this.list = [
{
id: '001',
url: '/pages_order/static/index/recommend-pic.png',
url: '',
name: '月度装定制营养包',
sales: 24770,
price: 688.00,
@ -34,7 +34,7 @@
},
{
id: '002',
url: '/pages_order/static/index/recommend-pic.png',
url: '',
name: '月度装定制营养包',
sales: 24770,
price: 688.00,

components/report/reportRecordCard.vue → pages_order/report/reportRecordCard.vue View File

@ -24,7 +24,7 @@
</template>
<script>
import reportScoreView from './reportScoreView.vue'
import reportScoreView from '@/components/report/reportScoreView.vue'
export default {
components: {

components/report/reportSummary.vue → pages_order/report/reportSummary/index.vue View File

@ -25,7 +25,7 @@
</template>
<script>
import progressCircle from '@/components/progress/progressCircle.vue'
import progressCircle from './progressCircle.vue'
export default {
components: {

components/progress/progressCircle.vue → pages_order/report/reportSummary/progressCircle.vue View File

@ -197,9 +197,9 @@ export default {
ctx.lineWidth = w; //
ctx.strokeStyle = gradient; //
ctx.lineCap = 'round'; //
ctx.shadowOffsetX = 8;
ctx.shadowOffsetY = 8;
ctx.shadowBlur = 32;
ctx.shadowOffsetX = 2 * Ratio;
ctx.shadowOffsetY = 2 * Ratio;
ctx.shadowBlur = 8 * Ratio;
ctx.shadowColor = "rgba(64, 0, 255, 0.3)";
ctx.beginPath();
let x = width / 2

+ 3
- 3
pages_order/report/result/index.vue View File

@ -87,7 +87,7 @@
this.list = [
{
id: '001',
url: '/pages_order/static/index/recommend-pic.png',
url: '',
name: '维生素 D',
nameEn: 'Vitamin D',
use: '推荐使用·每日一粒',
@ -96,7 +96,7 @@
},
{
id: '002',
url: '/pages_order/static/index/recommend-pic.png',
url: '',
name: '维生素 D',
nameEn: 'Vitamin D',
use: '推荐使用·每日一粒',
@ -105,7 +105,7 @@
},
{
id: '003',
url: '/pages_order/static/index/recommend-pic.png',
url: '',
name: '维生素 D',
nameEn: 'Vitamin D',
use: '推荐使用·每日一粒',


BIN
pages_order/static/auth/Frame 1142814287.png View File

Before After
Width: 295  |  Height: 53  |  Size: 4.4 KiB

BIN
pages_order/static/checkup/qrcode.png View File

Before After
Width: 122  |  Height: 122  |  Size: 8.3 KiB

BIN
pages_order/static/index/achievement-1.png View File

Before After
Width: 700  |  Height: 204  |  Size: 212 KiB

BIN
pages_order/static/index/achievement-2.png View File

Before After
Width: 700  |  Height: 204  |  Size: 207 KiB

BIN
pages_order/static/index/achievement-3.png View File

Before After
Width: 700  |  Height: 204  |  Size: 220 KiB

BIN
pages_order/static/index/achievement-4.png View File

Before After
Width: 183  |  Height: 236  |  Size: 61 KiB

BIN
pages_order/static/index/achievement-5.png View File

Before After
Width: 343  |  Height: 200  |  Size: 80 KiB

BIN
pages_order/static/index/detection-step-bg.png View File

Before After
Width: 301  |  Height: 227  |  Size: 28 KiB

BIN
pages_order/static/index/follow-reason-1.png View File

Before After
Width: 173  |  Height: 65  |  Size: 17 KiB

BIN
pages_order/static/index/follow-reason-2.png View File

Before After
Width: 173  |  Height: 65  |  Size: 16 KiB

BIN
pages_order/static/index/follow-reason-3.png View File

Before After
Width: 173  |  Height: 65  |  Size: 20 KiB

BIN
pages_order/static/index/medicine-4.png View File

Before After
Width: 165  |  Height: 165  |  Size: 32 KiB

BIN
pages_order/static/index/medicine-5.png View File

Before After
Width: 165  |  Height: 165  |  Size: 32 KiB

BIN
pages_order/static/index/medicine-6.png View File

Before After
Width: 165  |  Height: 165  |  Size: 31 KiB

BIN
pages_order/static/index/swiper-bg.png View File

Before After
Width: 172  |  Height: 274  |  Size: 34 KiB

BIN
pages_order/static/product/course-1.png View File

Before After
Width: 82  |  Height: 55  |  Size: 7.3 KiB

BIN
pages_order/static/product/course-2.png View File

Before After
Width: 83  |  Height: 55  |  Size: 5.9 KiB

BIN
pages_order/static/product/course-3.png View File

Before After
Width: 82  |  Height: 55  |  Size: 7.0 KiB

BIN
pages_order/static/product/course-4.png View File

Before After
Width: 83  |  Height: 55  |  Size: 7.0 KiB

BIN
pages_order/static/product/detect-1.png View File

Before After
Width: 82  |  Height: 55  |  Size: 11 KiB

BIN
pages_order/static/product/detect-10.png View File

Before After
Width: 480  |  Height: 361  |  Size: 207 KiB

BIN
pages_order/static/product/detect-11.png View File

Before After
Width: 480  |  Height: 320  |  Size: 170 KiB

BIN
pages_order/static/product/detect-12.png View File

Before After
Width: 480  |  Height: 720  |  Size: 282 KiB

BIN
pages_order/static/product/detect-13.png View File

Before After
Width: 768  |  Height: 1024  |  Size: 751 KiB

BIN
pages_order/static/product/detect-14.png View File

Before After
Width: 924  |  Height: 2000  |  Size: 2.2 MiB

BIN
pages_order/static/product/detect-15.png View File

Before After
Width: 355  |  Height: 2200  |  Size: 533 KiB

BIN
pages_order/static/product/detect-2.png View File

Before After
Width: 83  |  Height: 55  |  Size: 9.4 KiB

BIN
pages_order/static/product/detect-3.png View File

Before After
Width: 82  |  Height: 55  |  Size: 9.3 KiB

BIN
pages_order/static/product/detect-4.png View File

Before After
Width: 83  |  Height: 55  |  Size: 10 KiB

BIN
pages_order/static/product/detect-5.png View File

Before After
Width: 480  |  Height: 320  |  Size: 152 KiB

BIN
pages_order/static/product/detect-6.png View File

Before After
Width: 480  |  Height: 320  |  Size: 160 KiB

BIN
pages_order/static/product/detect-7.png View File

Before After
Width: 480  |  Height: 576  |  Size: 482 KiB

BIN
pages_order/static/product/detect-8.png View File

Before After
Width: 480  |  Height: 1075  |  Size: 302 KiB

BIN
pages_order/static/product/detect-9.png View File

Before After
Width: 480  |  Height: 315  |  Size: 142 KiB

BIN
pages_order/static/product/live.png View File

Before After
Width: 172  |  Height: 79  |  Size: 19 KiB

BIN
pages_order/static/report/detection-eyes.png View File

Before After
Width: 72  |  Height: 72  |  Size: 7.5 KiB

Loading…
Cancel
Save