| @ -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,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坐标-半径-边宽,中心Y坐标,中心x坐标+半径+边宽,中心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坐标-半径-边宽,中心Y坐标,中心x坐标+半径+边宽,中心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> | |||
| @ -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> | |||
| @ -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> | |||
| @ -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> | |||
| @ -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> | |||
| @ -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 : '广东省广州市越秀区城南故事C3栋2802', | |||
| // 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> | |||
| @ -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>> | |||
| @ -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> | |||
| @ -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> | |||
| @ -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> | |||
| @ -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> | |||
| @ -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') // 绘制的canvas的id | |||
| .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> | |||
| @ -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> | |||
| @ -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> | |||