@ -1,83 +0,0 @@ |
|||||||
.popup1 { |
|
||||||
padding: 110rpx 0 0; |
|
||||||
width: 651rpx; |
|
||||||
height: 820rpx; |
|
||||||
box-sizing: border-box; |
|
||||||
|
|
||||||
.title { |
|
||||||
font-size: 40rpx; |
|
||||||
color: #222222; |
|
||||||
font-weight: bold; |
|
||||||
text-align: center; |
|
||||||
} |
|
||||||
|
|
||||||
.code { |
|
||||||
margin: 48rpx auto 0; |
|
||||||
display: block; |
|
||||||
width: 304rpx; |
|
||||||
height: 304rpx; |
|
||||||
} |
|
||||||
|
|
||||||
.tip { |
|
||||||
margin-top: 40rpx; |
|
||||||
font-size: 32rpx; |
|
||||||
color: #65686c; |
|
||||||
text-align: center; |
|
||||||
} |
|
||||||
.close { |
|
||||||
margin: 120rpx auto 0; |
|
||||||
display: block; |
|
||||||
width: 72rpx; |
|
||||||
height: 72rpx; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
.popup3 { |
|
||||||
.badge { |
|
||||||
position: relative; |
|
||||||
z-index: 1; |
|
||||||
display: block; |
|
||||||
margin: 0 auto; |
|
||||||
width: 264rpx; |
|
||||||
height: 264rpx; |
|
||||||
} |
|
||||||
.container { |
|
||||||
margin-top: -130rpx; |
|
||||||
padding: 136rpx 44rpx 0; |
|
||||||
width: 622rpx; |
|
||||||
height: 632rpx; |
|
||||||
box-sizing: border-box; |
|
||||||
background: linear-gradient(180deg, #e7f8ff 0%, #ffffff 100%); |
|
||||||
border-radius: 36rpx 36rpx 36rpx 36rpx; |
|
||||||
.title { |
|
||||||
font-size: 48rpx; |
|
||||||
color: #222222; |
|
||||||
font-weight: bold; |
|
||||||
text-align: center; |
|
||||||
} |
|
||||||
.tip { |
|
||||||
margin-top: 24rpx; |
|
||||||
font-size: 36rpx; |
|
||||||
color: #65686c; |
|
||||||
line-height: 56rpx; |
|
||||||
} |
|
||||||
.btn1 { |
|
||||||
margin-top: 44rpx; |
|
||||||
font-size: 36rpx; |
|
||||||
color: #ffffff; |
|
||||||
height: 88rpx; |
|
||||||
display: flex; |
|
||||||
align-items: center; |
|
||||||
justify-content: center; |
|
||||||
background: #3795f7; |
|
||||||
border-radius: 96rpx 96rpx 96rpx 96rpx; |
|
||||||
} |
|
||||||
.btn2 { |
|
||||||
margin-top: 16rpx; |
|
||||||
padding: 16rpx 32rpx; |
|
||||||
font-size: 32rpx; |
|
||||||
color: #3795f7; |
|
||||||
text-align: center; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
@ -1,39 +0,0 @@ |
|||||||
const _app = getApp<IAppOption>(); |
|
||||||
|
|
||||||
// pages/story/a.ts
|
|
||||||
Component({ |
|
||||||
/** |
|
||||||
* 组件的属性列表 |
|
||||||
*/ |
|
||||||
properties: { |
|
||||||
show: { |
|
||||||
type: Boolean, |
|
||||||
value: false, |
|
||||||
}, |
|
||||||
type: { |
|
||||||
type: Number, |
|
||||||
value: 0, |
|
||||||
}, |
|
||||||
params: { |
|
||||||
type: Object, |
|
||||||
value: {}, |
|
||||||
}, |
|
||||||
}, |
|
||||||
|
|
||||||
/** |
|
||||||
* 组件的初始数据 |
|
||||||
*/ |
|
||||||
data: {}, |
|
||||||
|
|
||||||
/** |
|
||||||
* 组件的方法列表 |
|
||||||
*/ |
|
||||||
methods: { |
|
||||||
handleConform() { |
|
||||||
this.triggerEvent('conform'); |
|
||||||
}, |
|
||||||
handleClose() { |
|
||||||
this.triggerEvent('close'); |
|
||||||
}, |
|
||||||
}, |
|
||||||
}); |
|
@ -1,32 +0,0 @@ |
|||||||
<van-popup show="{{ show }}" wx:if="{{type===1}}" custom-style="background: transparent;" bind:close="handleClose"> |
|
||||||
<view |
|
||||||
class="popup1" |
|
||||||
style="background: url('{{imageUrl}}popup1-bg.png?t={{Timestamp}}') no-repeat top center/100% 691rpx" |
|
||||||
> |
|
||||||
<view class="title">关注适中信息微信公众号</view> |
|
||||||
<image class="code" src="{{imageUrl}}{{params.mpPicture}}?t={{Timestamp}}" show-menu-by-longpress></image> |
|
||||||
<view class="tip">长按识别二维码关注</view> |
|
||||||
<image class="close" src="{{imageUrl}}icon-close.png?t={{Timestamp}}" bind:tap="handleClose"></image> |
|
||||||
</view> |
|
||||||
</van-popup> |
|
||||||
|
|
||||||
<van-popup show="{{ show }}" wx:if="{{type===2}}" custom-style="background: transparent;" bind:close="handleClose"> |
|
||||||
<view class="popup1" style="background: url('{{imageUrl}}popup1-bg.png?t={{Timestamp}}') no-repeat top center/100%"> |
|
||||||
<view class="title">添加适中信息企业微信</view> |
|
||||||
<image class="code" src="{{imageUrl}}{{params.qwPicture}}?t={{Timestamp}}" show-menu-by-longpress></image> |
|
||||||
<view class="tip">长按识别二维码添加</view> |
|
||||||
<image class="close" src="{{imageUrl}}icon-close.png?t={{Timestamp}}" bind:tap="handleClose"></image> |
|
||||||
</view> |
|
||||||
</van-popup> |
|
||||||
|
|
||||||
<van-popup show="{{ show }}" wx:if="{{type===3}}" custom-style="background: transparent;" bind:close="handleClose"> |
|
||||||
<view class="popup3"> |
|
||||||
<image class="badge" src="{{imageUrl}}badge.png?t={{Timestamp}}" show-menu-by-longpress></image> |
|
||||||
<view class="container"> |
|
||||||
<view class="title">该账号未开通阅读权益</view> |
|
||||||
<view class="tip">此小程序暂时仅供经邀请的企业用户使用,请使用有权益的手机号登录。</view> |
|
||||||
<view class="btn1" bind:tap="handleConform">换个手机号登录</view> |
|
||||||
<view class="btn2" bind:tap="handleClose">取消</view> |
|
||||||
</view> |
|
||||||
</view> |
|
||||||
</van-popup> |
|
@ -0,0 +1,93 @@ |
|||||||
|
.popup1 { |
||||||
|
padding: 220rpx 0 0; |
||||||
|
width: 630rpx; |
||||||
|
box-sizing: border-box; |
||||||
|
.container { |
||||||
|
padding: 32rpx; |
||||||
|
background: linear-gradient(180deg, #ebe4ff 0%, #ffffff 100%); |
||||||
|
border-radius: 24rpx; |
||||||
|
.user { |
||||||
|
padding: 24rpx; |
||||||
|
display: flex; |
||||||
|
align-items: center; |
||||||
|
border-radius: 24rpx; |
||||||
|
background-color: #fff; |
||||||
|
.avatar-wrapper { |
||||||
|
flex-shrink: 0; |
||||||
|
padding: 0; |
||||||
|
margin: 0; |
||||||
|
width: 108rpx; |
||||||
|
height: 108rpx; |
||||||
|
gap: 16rpx; |
||||||
|
outline: none; |
||||||
|
border: 2px solid #fff; |
||||||
|
border-radius: 50%; |
||||||
|
&::after { |
||||||
|
border: none; |
||||||
|
} |
||||||
|
.avatar { |
||||||
|
width: 100%; |
||||||
|
height: 100%; |
||||||
|
border-radius: 50%; |
||||||
|
} |
||||||
|
} |
||||||
|
.wrap { |
||||||
|
flex: 1; |
||||||
|
padding-left: 24rpx; |
||||||
|
.nickname { |
||||||
|
font-size: 36rpx; |
||||||
|
font-weight: bold; |
||||||
|
color: rgba(1, 1, 5, 1); |
||||||
|
} |
||||||
|
.hostipal { |
||||||
|
margin-top: 16rpx; |
||||||
|
line-height: 1; |
||||||
|
font-size: 28rpx; |
||||||
|
color: rgba(173, 172, 178, 1); |
||||||
|
.tag { |
||||||
|
display: inline-block; |
||||||
|
font-size: 24rpx; |
||||||
|
color: rgba(255, 255, 255, 1); |
||||||
|
padding: 2rpx 10rpx; |
||||||
|
background: #8c75d0; |
||||||
|
border-radius: 8rpx 8rpx 8rpx 8rpx; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
.popup2 { |
||||||
|
width: 590rpx; |
||||||
|
height: 880rpx; |
||||||
|
.p-img { |
||||||
|
width: 100%; |
||||||
|
height: 100%; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
.popup3 { |
||||||
|
width: 590rpx; |
||||||
|
height: 880rpx; |
||||||
|
.p-img { |
||||||
|
width: 100%; |
||||||
|
height: 100%; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
.popup4 { |
||||||
|
width: 590rpx; |
||||||
|
height: 620rpx; |
||||||
|
.p-img { |
||||||
|
width: 100%; |
||||||
|
height: 100%; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
.close { |
||||||
|
margin: 48rpx auto 0; |
||||||
|
display: block; |
||||||
|
width: 84rpx; |
||||||
|
height: 84rpx; |
||||||
|
} |
@ -0,0 +1,57 @@ |
|||||||
|
import { wxPromiseWrapper } from 'XrFrame/core/utils' |
||||||
|
|
||||||
|
const app = getApp<IAppOption>() |
||||||
|
|
||||||
|
Component({ |
||||||
|
properties: { |
||||||
|
show: { |
||||||
|
type: Boolean, |
||||||
|
value: false, |
||||||
|
}, |
||||||
|
type: String, |
||||||
|
params: { |
||||||
|
type: Object, |
||||||
|
value() { |
||||||
|
return {} |
||||||
|
}, |
||||||
|
}, |
||||||
|
}, |
||||||
|
|
||||||
|
data: { |
||||||
|
popup1Check1: false, |
||||||
|
|
||||||
|
imageUrl: app.globalData.imageUrl, |
||||||
|
Timestamp: app.globalData.Timestamp, |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
handleOk() { |
||||||
|
const { type } = this.data |
||||||
|
if (type === 'argument' && !this.data.popup1Check1) { |
||||||
|
wx.showToast({ |
||||||
|
title: '请同意隐私政策', |
||||||
|
icon: 'none', |
||||||
|
}) |
||||||
|
return |
||||||
|
} |
||||||
|
this.triggerEvent('ok') |
||||||
|
}, |
||||||
|
handleCancel() { |
||||||
|
this.triggerEvent('cancel') |
||||||
|
}, |
||||||
|
routerTo(e: any) { |
||||||
|
const { url } = e.currentTarget.dataset |
||||||
|
wx.navigateTo({ |
||||||
|
url, |
||||||
|
}) |
||||||
|
}, |
||||||
|
handlePopup1Check1() { |
||||||
|
if (this.data.popup1Check1) { |
||||||
|
app.mpBehavior({ PageName: 'BTN_PATIENTPRIVACY' }) |
||||||
|
} |
||||||
|
}, |
||||||
|
handleSelectStatus(e) { |
||||||
|
const { status } = e.currentTarget.dataset |
||||||
|
this.triggerEvent('ok', { type: 'selectStatusComplete', status }) |
||||||
|
}, |
||||||
|
}, |
||||||
|
}) |
@ -0,0 +1,46 @@ |
|||||||
|
<van-popup |
||||||
|
wx:if="{{show}}" |
||||||
|
bind:click-overlay="handleCancel" |
||||||
|
round |
||||||
|
z-index="{{100000}}" |
||||||
|
show="{{ true }}" |
||||||
|
custom-style="background:transparent;" |
||||||
|
position="{{params.position || 'center'}}" |
||||||
|
safe-area-inset-bottom="{{false}}" |
||||||
|
root-portal |
||||||
|
> |
||||||
|
<view |
||||||
|
class="popup1" |
||||||
|
style="background: url('/images/bg4.png') no-repeat top center/100% 304rpx" |
||||||
|
wx:if="{{type==='popup1'}}" |
||||||
|
> |
||||||
|
<view class="container"> |
||||||
|
<view class="user"> |
||||||
|
<button class="avatar-wrapper"> |
||||||
|
<image |
||||||
|
class="avatar" |
||||||
|
src="https://pic1.zhimg.com/50/v2-dcfbab1219ae4f7a7a6db168bb1580a2_720w.jpg?source=2c26e567" |
||||||
|
></image> |
||||||
|
</button> |
||||||
|
<view class="wrap"> |
||||||
|
<view class="nickname">XX医生</view> |
||||||
|
<view class="hostipal"> |
||||||
|
北京天坛医院 |
||||||
|
<view class="tag">三甲</view> |
||||||
|
</view> |
||||||
|
</view> |
||||||
|
</view> |
||||||
|
</view> |
||||||
|
</view> |
||||||
|
<view class="popup2" wx:if="{{type==='popup2'}}"> |
||||||
|
<image class="p-img" src="/images/bg5.png" show-menu-by-longpress></image> |
||||||
|
</view> |
||||||
|
<view class="popup3" wx:if="{{type==='popup3'}}"> |
||||||
|
<image class="p-img" src="/images/bg6.png" show-menu-by-longpress></image> |
||||||
|
</view> |
||||||
|
<view class="popup4" wx:if="{{type==='popup4'}}"> |
||||||
|
<image class="p-img" src="/images/bg7.png" show-menu-by-longpress></image> |
||||||
|
</view> |
||||||
|
|
||||||
|
<image wx:if="{{params.close}}" class="close" src="/images/icon11.png" bind:tap="handleCancel"></image> |
||||||
|
</van-popup> |
After Width: | Height: | Size: 152 KiB |
After Width: | Height: | Size: 314 KiB |
After Width: | Height: | Size: 313 KiB |
After Width: | Height: | Size: 205 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 2.5 KiB |
@ -1,10 +0,0 @@ |
|||||||
{ |
|
||||||
"navigationStyle": "default", |
|
||||||
"navigationBarTitleText": "详情", |
|
||||||
"usingComponents": { |
|
||||||
"van-slider": "@vant/weapp/slider/index", |
|
||||||
"van-popup": "@vant/weapp/popup/index", |
|
||||||
"mp-html": "mp-html", |
|
||||||
"global-toast":"/components/global-toast/index" |
|
||||||
} |
|
||||||
} |
|
@ -1,257 +0,0 @@ |
|||||||
.page { |
|
||||||
padding: 48rpx 20rpx 200rpx; |
|
||||||
|
|
||||||
.page-title { |
|
||||||
font-size: 44rpx; |
|
||||||
color: #222222; |
|
||||||
font-weight: bold; |
|
||||||
line-height: 48rpx; |
|
||||||
} |
|
||||||
|
|
||||||
.page-info { |
|
||||||
display: flex; |
|
||||||
align-items: center; |
|
||||||
justify-content: space-between; |
|
||||||
.page-date { |
|
||||||
margin-top: 24rpx; |
|
||||||
font-size: 28rpx; |
|
||||||
color: #999999; |
|
||||||
} |
|
||||||
.view-num { |
|
||||||
font-size: 28rpx; |
|
||||||
color: #999999; |
|
||||||
display: flex; |
|
||||||
align-items: center; |
|
||||||
gap: 12rpx; |
|
||||||
.icon { |
|
||||||
width: 28rpx; |
|
||||||
height: 28rpx; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
.audio-bar { |
|
||||||
margin-top: 32rpx; |
|
||||||
padding: 32rpx; |
|
||||||
--slider-disabled-opacity: 1; |
|
||||||
background-color: #f9fafb; |
|
||||||
border-radius: 24rpx; |
|
||||||
|
|
||||||
.a-header { |
|
||||||
display: flex; |
|
||||||
align-items: center; |
|
||||||
justify-content: space-between; |
|
||||||
|
|
||||||
.wrap { |
|
||||||
line-height: 1; |
|
||||||
|
|
||||||
.name { |
|
||||||
font-size: 32rpx; |
|
||||||
color: #000000; |
|
||||||
font-weight: bold; |
|
||||||
} |
|
||||||
|
|
||||||
.date { |
|
||||||
margin-top: 12rpx; |
|
||||||
font-size: 24rpx; |
|
||||||
color: #65686c; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
.icon { |
|
||||||
width: 64rpx; |
|
||||||
height: 64rpx; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
.progress { |
|
||||||
display: block; |
|
||||||
margin-top: 30rpx; |
|
||||||
.custom-button { |
|
||||||
position: relative; |
|
||||||
flex-shrink: 0; |
|
||||||
width: 20rpx; |
|
||||||
height: 20rpx; |
|
||||||
background: #ffffff; |
|
||||||
border-radius: 50%; |
|
||||||
border: 2rpx solid #3795f7; |
|
||||||
box-sizing: border-box; |
|
||||||
&::after { |
|
||||||
content: ''; |
|
||||||
display: block; |
|
||||||
position: absolute; |
|
||||||
top: 50%; |
|
||||||
left: 50%; |
|
||||||
transform: translate(-50%, -50%); |
|
||||||
width: 64rpx; |
|
||||||
height: 64rpx; |
|
||||||
background-color: transparent; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
.rich { |
|
||||||
margin-top: 32rpx; |
|
||||||
} |
|
||||||
|
|
||||||
.quick-article { |
|
||||||
margin-top: 24rpx; |
|
||||||
padding: 26rpx 32rpx; |
|
||||||
background: #f9fafb; |
|
||||||
line-height: 48rpx; |
|
||||||
border-radius: 16rpx 16rpx 16rpx 16rpx; |
|
||||||
color: #3795f7; |
|
||||||
font-size: 36rpx; |
|
||||||
|
|
||||||
.label { |
|
||||||
color: #3795f7; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
.type { |
|
||||||
margin-top: 48rpx; |
|
||||||
display: flex; |
|
||||||
align-items: center; |
|
||||||
flex-wrap: wrap; |
|
||||||
gap: 24rpx; |
|
||||||
|
|
||||||
.label { |
|
||||||
font-size: 32rpx; |
|
||||||
color: #999999; |
|
||||||
} |
|
||||||
|
|
||||||
.item { |
|
||||||
padding: 6rpx 24rpx; |
|
||||||
border-radius: 40rpx; |
|
||||||
font-size: 32rpx; |
|
||||||
color: #fff; |
|
||||||
background-color: #3795f7; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
.footer { |
|
||||||
position: fixed; |
|
||||||
bottom: 0; |
|
||||||
left: 0; |
|
||||||
width: 100%; |
|
||||||
padding: 30rpx 30rpx calc(30rpx + env(safe-area-inset-bottom)); |
|
||||||
display: flex; |
|
||||||
align-items: center; |
|
||||||
justify-content: space-between; |
|
||||||
box-shadow: 0 -6rpx 32.8rpx rgba(0, 0, 0, 0.1); |
|
||||||
background: #ffffff; |
|
||||||
|
|
||||||
.item { |
|
||||||
position: relative; |
|
||||||
flex: 1; |
|
||||||
display: flex; |
|
||||||
align-items: center; |
|
||||||
justify-content: center; |
|
||||||
gap: 12rpx; |
|
||||||
font-size: 36rpx; |
|
||||||
|
|
||||||
.icon { |
|
||||||
width: 56rpx; |
|
||||||
height: 56rpx; |
|
||||||
} |
|
||||||
.item-tip { |
|
||||||
position: absolute; |
|
||||||
left: 0; |
|
||||||
top: -45rpx; |
|
||||||
transform: translateY(-100%); |
|
||||||
padding: 16rpx 32rpx; |
|
||||||
font-size: 36rpx; |
|
||||||
color: #ffffff; |
|
||||||
background: rgba(0, 0, 0, 0.8); |
|
||||||
border-radius: 8rpx 8rpx 8rpx 8rpx; |
|
||||||
white-space: nowrap; |
|
||||||
.close { |
|
||||||
position: absolute; |
|
||||||
top: -12rpx; |
|
||||||
right: -12rpx; |
|
||||||
width: 36rpx; |
|
||||||
height: 36rpx; |
|
||||||
} |
|
||||||
&::after { |
|
||||||
content: ''; |
|
||||||
position: absolute; |
|
||||||
bottom: -10rpx; |
|
||||||
left: 40%; |
|
||||||
width: 0; |
|
||||||
height: 0; |
|
||||||
border-left: 12rpx solid transparent; |
|
||||||
border-right: 12rpx solid transparent; |
|
||||||
border-top: 12rpx solid rgba(0, 0, 0, 0.9); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
.popup-directory { |
|
||||||
.p-close-line { |
|
||||||
padding: 36rpx 32rpx; |
|
||||||
display: flex; |
|
||||||
justify-content: flex-end; |
|
||||||
.option { |
|
||||||
font-size: 32rpx; |
|
||||||
color: #999999; |
|
||||||
.icon { |
|
||||||
margin-left: 10rpx; |
|
||||||
width: 24rpx; |
|
||||||
height: 24rpx; |
|
||||||
transform: rotate(180deg); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
.p-title { |
|
||||||
padding: 0 32rpx; |
|
||||||
font-size: 44rpx; |
|
||||||
color: #222222; |
|
||||||
font-weight: bold; |
|
||||||
} |
|
||||||
.p-type { |
|
||||||
padding: 32rpx; |
|
||||||
display: flex; |
|
||||||
align-items: center; |
|
||||||
flex-wrap: wrap; |
|
||||||
|
|
||||||
.label { |
|
||||||
font-size: 32rpx; |
|
||||||
color: #999999; |
|
||||||
} |
|
||||||
|
|
||||||
.item { |
|
||||||
border-radius: 40rpx; |
|
||||||
font-size: 32rpx; |
|
||||||
color: #3795f7; |
|
||||||
} |
|
||||||
} |
|
||||||
.p-scroll { |
|
||||||
max-height: 50vh; |
|
||||||
font-size: 36rpx; |
|
||||||
.row { |
|
||||||
padding: 32rpx; |
|
||||||
position: relative; |
|
||||||
&::after { |
|
||||||
position: absolute; |
|
||||||
bottom: 0; |
|
||||||
left: 32rpx; |
|
||||||
content: ''; |
|
||||||
width: calc(100% - 64rpx); |
|
||||||
height: 1px; |
|
||||||
background-color: #f0f0f0; |
|
||||||
} |
|
||||||
&:last-of-type::after { |
|
||||||
display: none; |
|
||||||
} |
|
||||||
&.current { |
|
||||||
background: rgba(55, 149, 247, 0.06); |
|
||||||
} |
|
||||||
} |
|
||||||
.place-row { |
|
||||||
height: 120rpx; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
@ -1,349 +0,0 @@ |
|||||||
import { decryptData } from '@/utils/crypto'; |
|
||||||
const app = getApp<IAppOption>(); |
|
||||||
|
|
||||||
Page({ |
|
||||||
data: { |
|
||||||
show: false, |
|
||||||
BookId: '', |
|
||||||
ChapterId: '', |
|
||||||
chapterList: [], |
|
||||||
|
|
||||||
book: {} as any, |
|
||||||
chapter: {} as any, |
|
||||||
prevAndNext: {} as any, |
|
||||||
|
|
||||||
progress: 0, |
|
||||||
url: 'http://m10.music.126.net/20241126110303/3f2481d2d6d50acd2009359539eadda0/ymusic/5353/0f0f/0358/d99739615f8e5153d77042092f07fd77.mp3', |
|
||||||
play: false, |
|
||||||
time: '00:00/00:00', |
|
||||||
currentTime: 0, |
|
||||||
drag: false, |
|
||||||
|
|
||||||
chapterTip: false, |
|
||||||
|
|
||||||
toastShow: false, |
|
||||||
toastType: 3, |
|
||||||
previewImg: true, |
|
||||||
|
|
||||||
listener: false, |
|
||||||
globalStop: false, |
|
||||||
}, |
|
||||||
BackgroundAudioManager: null as WechatMiniprogram.BackgroundAudioManager | null, |
|
||||||
onLoad(options) { |
|
||||||
this.BackgroundAudioManager = wx.getBackgroundAudioManager(); |
|
||||||
this.setData({ |
|
||||||
BookId: options.id, |
|
||||||
globalStop: this.BackgroundAudioManager.paused, |
|
||||||
}); |
|
||||||
if (options.cid) { |
|
||||||
this.setData({ |
|
||||||
ChapterId: options.cid, |
|
||||||
}); |
|
||||||
} |
|
||||||
const previewImg = !['mac', 'windows'].includes(wx.getDeviceInfo().platform); |
|
||||||
this.setData({ |
|
||||||
previewImg, |
|
||||||
}); |
|
||||||
|
|
||||||
app.waitLogin(false, true).then(() => { |
|
||||||
this.getChapterList(); |
|
||||||
this.getDetail(); |
|
||||||
}); |
|
||||||
}, |
|
||||||
getChapterList() { |
|
||||||
wx.ajax({ |
|
||||||
method: 'GET', |
|
||||||
url: '?r=shizhong/book/chapter-list', |
|
||||||
data: { |
|
||||||
BookId: this.data.BookId, |
|
||||||
}, |
|
||||||
}).then((res) => { |
|
||||||
this.setData({ |
|
||||||
chapterList: res.list, |
|
||||||
}); |
|
||||||
}); |
|
||||||
}, |
|
||||||
getDetail() { |
|
||||||
wx.ajax({ |
|
||||||
method: 'GET', |
|
||||||
url: '?r=shizhong/book/detail', |
|
||||||
data: { |
|
||||||
BookId: this.data.BookId, |
|
||||||
ChapterId: this.data.ChapterId, |
|
||||||
}, |
|
||||||
showMsg: false, |
|
||||||
}) |
|
||||||
.then((res) => { |
|
||||||
if (res.chapter.content_encrypt === 1) { |
|
||||||
res.chapter.Content = decryptData(res.chapter.Content); |
|
||||||
} |
|
||||||
this.setData({ |
|
||||||
book: { |
|
||||||
...res.book, |
|
||||||
PublishDate: res.book.PublishTime.split(' ')[0], |
|
||||||
}, |
|
||||||
chapter: res.chapter, |
|
||||||
prevAndNext: { |
|
||||||
prev: Array.isArray(res.prevAndNext.prev) ? null : res.prevAndNext.prev, |
|
||||||
next: Array.isArray(res.prevAndNext.next) ? null : res.prevAndNext.next, |
|
||||||
}, |
|
||||||
ChapterId: res.chapter.Id, |
|
||||||
show: !this.data.ChapterId, |
|
||||||
}); |
|
||||||
if (res.chapter.AudioUrl?.url) { |
|
||||||
const time = `00:00/${this.formatTime(res.chapter.AudioUrl.duration)}`; |
|
||||||
this.setData({ |
|
||||||
time, |
|
||||||
}); |
|
||||||
} |
|
||||||
wx.setNavigationBarTitle({ |
|
||||||
title: res.book.BookName, |
|
||||||
}); |
|
||||||
this.handleView(); |
|
||||||
this.initBackgroundAudioManager(); |
|
||||||
}) |
|
||||||
.catch((err) => { |
|
||||||
if (err.data.code === 403) { |
|
||||||
this.setData({ |
|
||||||
toastShow: true, |
|
||||||
toastType: 3, |
|
||||||
}); |
|
||||||
} |
|
||||||
}); |
|
||||||
}, |
|
||||||
handleView() { |
|
||||||
wx.ajax({ |
|
||||||
method: 'POST', |
|
||||||
url: '?r=shizhong/book/add-browse-record', |
|
||||||
data: { |
|
||||||
BookId: this.data.BookId, |
|
||||||
ChapterId: this.data.ChapterId, |
|
||||||
}, |
|
||||||
}); |
|
||||||
}, |
|
||||||
handleDirectory() { |
|
||||||
this.setData({ |
|
||||||
show: true, |
|
||||||
}); |
|
||||||
}, |
|
||||||
handleSwitchDirectory(e) { |
|
||||||
const { id } = e.currentTarget.dataset; |
|
||||||
this.setData({ |
|
||||||
ChapterId: id, |
|
||||||
}); |
|
||||||
this.getDetail(); |
|
||||||
this.onClose(); |
|
||||||
}, |
|
||||||
onClose() { |
|
||||||
const chapterTip = !wx.getStorageSync('chapterTip'); |
|
||||||
this.setData({ |
|
||||||
show: false, |
|
||||||
chapterTip, |
|
||||||
}); |
|
||||||
if (chapterTip) { |
|
||||||
setTimeout(() => { |
|
||||||
this.handleTipClsoe(); |
|
||||||
}, 5000); |
|
||||||
} |
|
||||||
}, |
|
||||||
|
|
||||||
handleCollect() { |
|
||||||
const { Id } = this.data.book; |
|
||||||
wx.ajax({ |
|
||||||
method: 'POST', |
|
||||||
url: '?r=shizhong/book/collect', |
|
||||||
data: { BookId: Id }, |
|
||||||
}).then(() => { |
|
||||||
wx.showToast({ |
|
||||||
title: '您已收藏这本书,可在我的页查看', |
|
||||||
icon: 'none', |
|
||||||
}); |
|
||||||
this.setData({ |
|
||||||
[`book.IsCollect`]: 1, |
|
||||||
}); |
|
||||||
}); |
|
||||||
}, |
|
||||||
handleUnCollect() { |
|
||||||
const { Id } = this.data.book; |
|
||||||
wx.ajax({ |
|
||||||
method: 'POST', |
|
||||||
url: '?r=shizhong/book/cancel-collect', |
|
||||||
data: { BookId: Id }, |
|
||||||
}).then(() => { |
|
||||||
wx.showToast({ |
|
||||||
title: '取消收藏', |
|
||||||
icon: 'none', |
|
||||||
}); |
|
||||||
this.setData({ |
|
||||||
[`book.IsCollect`]: 0, |
|
||||||
}); |
|
||||||
}); |
|
||||||
}, |
|
||||||
initBackgroundAudioManager() { |
|
||||||
const { chapter } = this.data; |
|
||||||
if (this.BackgroundAudioManager) { |
|
||||||
if (this.BackgroundAudioManager.src === chapter.AudioUrl.url && !this.BackgroundAudioManager.paused) { |
|
||||||
this.setData({ |
|
||||||
play: true, |
|
||||||
}); |
|
||||||
this.backgroundAudioManagerListener(); |
|
||||||
} else { |
|
||||||
this.backgroundAudioManagerListener(); |
|
||||||
this.setData({ |
|
||||||
play: false, |
|
||||||
progress: 0, |
|
||||||
currentTime: 0, |
|
||||||
}); |
|
||||||
} |
|
||||||
} |
|
||||||
}, |
|
||||||
backgroundAudioManagerListener() { |
|
||||||
const { chapter } = this.data; |
|
||||||
if (!this.BackgroundAudioManager) return; |
|
||||||
const timeUpdateListener = () => { |
|
||||||
const isCurrent = this.BackgroundAudioManager?.src === chapter.AudioUrl.url; |
|
||||||
if (this.BackgroundAudioManager && !this.data.drag && this.data.play && isCurrent) { |
|
||||||
const { currentTime, duration } = this.BackgroundAudioManager; |
|
||||||
const time = `${this.formatTime(currentTime)}/${this.formatTime(duration)}`; |
|
||||||
const progress = (currentTime / duration) * 100; |
|
||||||
this.setData({ |
|
||||||
time, |
|
||||||
progress, |
|
||||||
currentTime, |
|
||||||
}); |
|
||||||
} |
|
||||||
}; |
|
||||||
const endedListener = () => { |
|
||||||
const time = `00:00/${this.formatTime(chapter.AudioUrl.duration)}`; |
|
||||||
this.setData({ |
|
||||||
play: false, |
|
||||||
progress: 0, |
|
||||||
time, |
|
||||||
currentTime: 0, |
|
||||||
globalStop: true, |
|
||||||
}); |
|
||||||
}; |
|
||||||
const playListener = () => { |
|
||||||
const isCurrent = this.BackgroundAudioManager?.src === chapter.AudioUrl.url; |
|
||||||
if (!isCurrent) return; |
|
||||||
this.setData({ |
|
||||||
play: true, |
|
||||||
}); |
|
||||||
}; |
|
||||||
const pauseListener = () => { |
|
||||||
this.setData({ |
|
||||||
play: false, |
|
||||||
}); |
|
||||||
}; |
|
||||||
const stopListener = () => { |
|
||||||
const time = `00:00/${this.formatTime(chapter.AudioUrl.duration)}`; |
|
||||||
this.setData({ |
|
||||||
play: false, |
|
||||||
globalStop: true, |
|
||||||
progress: 0, |
|
||||||
time, |
|
||||||
currentTime: 0, |
|
||||||
}); |
|
||||||
}; |
|
||||||
this.BackgroundAudioManager.onTimeUpdate(timeUpdateListener); |
|
||||||
this.BackgroundAudioManager.onEnded(endedListener); |
|
||||||
this.BackgroundAudioManager.onPlay(playListener); |
|
||||||
this.BackgroundAudioManager.onPause(pauseListener); |
|
||||||
this.BackgroundAudioManager.onStop(stopListener); |
|
||||||
this.setData({ |
|
||||||
listener: true, |
|
||||||
}); |
|
||||||
}, |
|
||||||
handlePlay() { |
|
||||||
const { chapter, currentTime, play, listener, globalStop } = this.data; |
|
||||||
if (play) return; |
|
||||||
if (this.BackgroundAudioManager) { |
|
||||||
if (this.BackgroundAudioManager.src !== chapter.AudioUrl.url || globalStop) { |
|
||||||
this.BackgroundAudioManager.title = chapter.ChapterName; |
|
||||||
this.BackgroundAudioManager.coverImgUrl = chapter.CoverUrl; |
|
||||||
this.BackgroundAudioManager.src = chapter.AudioUrl.url; |
|
||||||
} else { |
|
||||||
this.BackgroundAudioManager.play(); |
|
||||||
this.BackgroundAudioManager.seek(this.BackgroundAudioManager.currentTime || currentTime); |
|
||||||
} |
|
||||||
if (!listener) { |
|
||||||
this.backgroundAudioManagerListener(); |
|
||||||
} |
|
||||||
} |
|
||||||
this.setData({ |
|
||||||
globalStop: false, |
|
||||||
}); |
|
||||||
}, |
|
||||||
handlePause() { |
|
||||||
const { play } = this.data; |
|
||||||
if (this.BackgroundAudioManager && play) { |
|
||||||
this.setData({ |
|
||||||
play: false, |
|
||||||
}); |
|
||||||
this.BackgroundAudioManager.pause(); |
|
||||||
} |
|
||||||
}, |
|
||||||
handleDragStart() { |
|
||||||
this.setData({ |
|
||||||
drag: true, |
|
||||||
}); |
|
||||||
}, |
|
||||||
handleDragEnd() { |
|
||||||
this.setData({ |
|
||||||
drag: false, |
|
||||||
}); |
|
||||||
if (this.data.play) { |
|
||||||
this.BackgroundAudioManager?.seek(this.data.currentTime); |
|
||||||
} |
|
||||||
}, |
|
||||||
handleDrag(e: any) { |
|
||||||
const current = e.detail.value; |
|
||||||
const duration = this.BackgroundAudioManager?.duration || this.data.chapter.AudioUrl.duration; |
|
||||||
const currentTime = (current / 100) * duration; |
|
||||||
const time = `${this.formatTime(currentTime)}/${this.formatTime(duration)}`; |
|
||||||
this.setData({ |
|
||||||
time, |
|
||||||
currentTime, |
|
||||||
}); |
|
||||||
}, |
|
||||||
formatTime(time: number) { |
|
||||||
const minutes = Math.floor(time / 60); |
|
||||||
const seconds = Math.floor(time % 60); |
|
||||||
return `${minutes < 10 ? `0${minutes}` : minutes}:${seconds < 10 ? `0${seconds}` : seconds}`; |
|
||||||
}, |
|
||||||
handleAuthClose() { |
|
||||||
this.setData({ |
|
||||||
toastShow: false, |
|
||||||
}); |
|
||||||
wx.navigateBack({ |
|
||||||
fail() { |
|
||||||
wx.reLaunch({ |
|
||||||
url: '/pages/classify/index', |
|
||||||
}); |
|
||||||
}, |
|
||||||
}); |
|
||||||
}, |
|
||||||
handleAuthConform() { |
|
||||||
const { BookId, ChapterId } = this.data; |
|
||||||
const backPath = `/pages/article/index?id=${BookId}&cid=${ChapterId}`; |
|
||||||
app.globalData.backPath = backPath; |
|
||||||
wx.navigateTo({ |
|
||||||
url: '/pages/login/index?back=1', |
|
||||||
}); |
|
||||||
}, |
|
||||||
handleType() { |
|
||||||
wx.redirectTo({ |
|
||||||
url: `/pages/classify/index?id=${this.data.chapter.CateId}`, |
|
||||||
}); |
|
||||||
}, |
|
||||||
handleTipClsoe() { |
|
||||||
if (this.data.chapterTip) { |
|
||||||
wx.setStorageSync('chapterTip', 'open'); |
|
||||||
} |
|
||||||
this.setData({ |
|
||||||
chapterTip: false, |
|
||||||
}); |
|
||||||
}, |
|
||||||
}); |
|
||||||
|
|
||||||
export {}; |
|
@ -1,125 +0,0 @@ |
|||||||
<page-meta page-style="{{ show ? 'overflow: hidden;' : '' }}" /> |
|
||||||
<view class="page"> |
|
||||||
<view class="page-title">{{chapter.ChapterName}}</view> |
|
||||||
<view class="page-info"> |
|
||||||
<view class="page-date">{{book.PublishDate}}</view> |
|
||||||
<!-- <view class="view-num"> |
|
||||||
<image class="icon" src="{{imageUrl}}icon-eye.png?t={{Timestamp}}"></image> |
|
||||||
{{~~book.OperateNum + ~~book.BrowseNum}} |
|
||||||
</view> --> |
|
||||||
</view> |
|
||||||
<view class="audio-bar" wx:if="{{chapter.AudioUrl}}"> |
|
||||||
<view class="a-header"> |
|
||||||
<view class="wrap"> |
|
||||||
<view class="name">概要解读</view> |
|
||||||
<view class="date">{{time}}</view> |
|
||||||
</view> |
|
||||||
<image |
|
||||||
bind:tap="handlePause" |
|
||||||
wx:if="{{play}}" |
|
||||||
class="icon" |
|
||||||
src="{{imageUrl}}icon-stop.png?t={{Timestamp}}" |
|
||||||
></image> |
|
||||||
<image bind:tap="handlePlay" wx:else class="icon" src="{{imageUrl}}icon-play.png?t={{Timestamp}}"></image> |
|
||||||
</view> |
|
||||||
<van-slider |
|
||||||
class="progress" |
|
||||||
custom-class="progress" |
|
||||||
step="0.001" |
|
||||||
value="{{progress}}" |
|
||||||
bar-height="12rpx" |
|
||||||
active-color="#3795F7" |
|
||||||
inactive-color="#FFFFFF" |
|
||||||
use-button-slot |
|
||||||
bind:drag-start="handleDragStart" |
|
||||||
bind:drag-end="handleDragEnd" |
|
||||||
bind:drag="handleDrag" |
|
||||||
> |
|
||||||
<view class="custom-button" slot="button"></view> |
|
||||||
</van-slider> |
|
||||||
</view> |
|
||||||
<view class="rich"> |
|
||||||
<mp-html |
|
||||||
content="{{chapter.Content}}" |
|
||||||
scroll-table="{{true}}" |
|
||||||
preview-img="{{previewImg}}" |
|
||||||
show-img-menu="{{false}}" |
|
||||||
></mp-html> |
|
||||||
</view> |
|
||||||
<view |
|
||||||
class="quick-article" |
|
||||||
wx:if="{{prevAndNext.prev}}" |
|
||||||
bind:tap="handleSwitchDirectory" |
|
||||||
data-id="{{prevAndNext.prev.Id}}" |
|
||||||
> |
|
||||||
<text class="label">上一篇:</text> |
|
||||||
{{prevAndNext.prev.ChapterName}} |
|
||||||
</view> |
|
||||||
<view |
|
||||||
class="quick-article" |
|
||||||
wx:if="{{prevAndNext.next}}" |
|
||||||
bind:tap="handleSwitchDirectory" |
|
||||||
data-id="{{prevAndNext.next.Id}}" |
|
||||||
> |
|
||||||
<text class="label">下一篇:</text> |
|
||||||
{{prevAndNext.next.ChapterName}} |
|
||||||
</view> |
|
||||||
<view class="type" wx:if="{{chapter.CateName}}" bind:tap="handleType"> |
|
||||||
<view class="label">分类</view> |
|
||||||
<view class="item">{{chapter.CateName}}</view> |
|
||||||
</view> |
|
||||||
|
|
||||||
<view class="footer"> |
|
||||||
<view class="item" bind:tap="handleDirectory"> |
|
||||||
<image class="icon" src="{{imageUrl}}icon-directory.png?t={{Timestamp}}"></image> |
|
||||||
目录 |
|
||||||
<view class="item-tip" catch:tap="handleTipClsoe" wx:if="{{chapterTip}}"> |
|
||||||
查看全文目录,可点击这里 |
|
||||||
<image class="close" src="{{imageUrl}}item-tip-close.png?t={{Timestamp}}"></image> |
|
||||||
</view> |
|
||||||
</view> |
|
||||||
<view class="item" wx:if="{{book.IsCollect===1}}" bind:tap="handleUnCollect"> |
|
||||||
<image class="icon" src="{{imageUrl}}icon-collection-active.png?t={{Timestamp}}"></image> |
|
||||||
取消收藏 |
|
||||||
</view> |
|
||||||
<view class="item" wx:else bind:tap="handleCollect"> |
|
||||||
<image class="icon" src="{{imageUrl}}icon-collection1.png?t={{Timestamp}}"></image> |
|
||||||
收藏 |
|
||||||
</view> |
|
||||||
</view> |
|
||||||
</view> |
|
||||||
|
|
||||||
<van-popup show="{{ show }}" round position="bottom" bind:close="onClose"> |
|
||||||
<view class="popup-directory"> |
|
||||||
<view class="p-close-line" bind:tap="onClose"> |
|
||||||
<view class="option"> |
|
||||||
目录收起 |
|
||||||
<image class="icon" src="{{imageUrl}}fold-up.png?t={{Timestamp}}"></image> |
|
||||||
</view> |
|
||||||
</view> |
|
||||||
<view class="p-title">{{book.BookName}}</view> |
|
||||||
<view class="p-type" wx:if="{{chapter.CateName}}" bind:tap="handleType"> |
|
||||||
<view class="label">分类:</view> |
|
||||||
<view class="item">{{chapter.CateName}}</view> |
|
||||||
</view> |
|
||||||
<scroll-view class="p-scroll" scroll-y scroll-into-view="row{{ChapterId}}"> |
|
||||||
<view |
|
||||||
class="row {{ChapterId === item.Id && 'current'}} row{{ item.Id }}" |
|
||||||
wx:for="{{chapterList}}" |
|
||||||
wx:key="Id" |
|
||||||
bind:tap="handleSwitchDirectory" |
|
||||||
data-id="{{item.Id}}" |
|
||||||
> |
|
||||||
{{index+1}}. {{item.ChapterName}} |
|
||||||
</view> |
|
||||||
<view class="place-row"></view> |
|
||||||
</scroll-view> |
|
||||||
</view> |
|
||||||
</van-popup> |
|
||||||
|
|
||||||
<global-toast |
|
||||||
show="{{toastShow}}" |
|
||||||
type="{{toastType}}" |
|
||||||
bind:close="handleAuthClose" |
|
||||||
bind:conform="handleAuthConform" |
|
||||||
></global-toast> |
|
@ -1,8 +0,0 @@ |
|||||||
{ |
|
||||||
"navigationStyle": "default", |
|
||||||
"navigationBarTitleText": "", |
|
||||||
"usingComponents": { |
|
||||||
"van-icon": "@vant/weapp/icon/index", |
|
||||||
"van-divider": "@vant/weapp/divider/index" |
|
||||||
} |
|
||||||
} |
|
@ -1,137 +0,0 @@ |
|||||||
page { |
|
||||||
background-color: #f3f4f5; |
|
||||||
} |
|
||||||
.page { |
|
||||||
padding-top: 100rpx; |
|
||||||
padding-bottom: 80rpx; |
|
||||||
|
|
||||||
.scroll { |
|
||||||
position: fixed; |
|
||||||
top: 0; |
|
||||||
left: 0; |
|
||||||
z-index: 100000000000; |
|
||||||
width: 100%; |
|
||||||
background-color: #fff; |
|
||||||
} |
|
||||||
.nav { |
|
||||||
padding: 0 16rpx; |
|
||||||
display: flex; |
|
||||||
background-color: #fff; |
|
||||||
&::-webkit-scrollbar { |
|
||||||
display: none; |
|
||||||
} |
|
||||||
.nav-item { |
|
||||||
flex-shrink: 0; |
|
||||||
padding: 32rpx 16rpx; |
|
||||||
font-size: 36rpx; |
|
||||||
color: #222222; |
|
||||||
line-height: 36rpx; |
|
||||||
&.active { |
|
||||||
font-size: 36rpx; |
|
||||||
color: #3795f7; |
|
||||||
font-weight: bold; |
|
||||||
position: relative; |
|
||||||
&::after { |
|
||||||
position: absolute; |
|
||||||
bottom: 0; |
|
||||||
left: 50%; |
|
||||||
transform: translateX(-50%); |
|
||||||
content: ''; |
|
||||||
width: 44rpx; |
|
||||||
height: 8rpx; |
|
||||||
background: #3795f7; |
|
||||||
border-radius: 0rpx 0rpx 0rpx 0rpx; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
.types { |
|
||||||
padding: 32rpx 32rpx 0; |
|
||||||
display: flex; |
|
||||||
gap: 16rpx; |
|
||||||
flex-wrap: wrap; |
|
||||||
.type { |
|
||||||
min-width: 160rpx; |
|
||||||
padding: 8rpx 10rpx; |
|
||||||
box-sizing: border-box; |
|
||||||
font-size: 32rpx; |
|
||||||
color: #65686c; |
|
||||||
line-height: 40rpx; |
|
||||||
background-color: #fff; |
|
||||||
border-radius: 8rpx; |
|
||||||
text-align: center; |
|
||||||
&.active { |
|
||||||
color: #fff; |
|
||||||
background-color: #3795f7; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
.der { |
|
||||||
margin-top: 32rpx; |
|
||||||
font-size: 28rpx; |
|
||||||
color: #999999; |
|
||||||
text-align: center; |
|
||||||
} |
|
||||||
.card { |
|
||||||
margin: 32rpx 32rpx 24rpx; |
|
||||||
padding: 24rpx; |
|
||||||
display: flex; |
|
||||||
gap: 24rpx; |
|
||||||
background: linear-gradient(173deg, #ffffff 0%, #eff7ff 100%); |
|
||||||
border-radius: 24rpx 24rpx 24rpx 24rpx; |
|
||||||
border: 2rpx solid #ffffff; |
|
||||||
&:last-of-type { |
|
||||||
margin-bottom: 0; |
|
||||||
} |
|
||||||
.photo { |
|
||||||
flex-shrink: 0; |
|
||||||
width: 218rpx; |
|
||||||
height: 218rpx; |
|
||||||
border-radius: 16rpx; |
|
||||||
} |
|
||||||
.c-container { |
|
||||||
flex: 1; |
|
||||||
display: flex; |
|
||||||
flex-direction: column; |
|
||||||
justify-content: space-between; |
|
||||||
.title { |
|
||||||
font-size: 36rpx; |
|
||||||
color: #222222; |
|
||||||
font-weight: bold; |
|
||||||
line-height: 48rpx; |
|
||||||
} |
|
||||||
.type { |
|
||||||
margin-top: 16rpx; |
|
||||||
flex: 1; |
|
||||||
font-size: 32rpx; |
|
||||||
color: #999999; |
|
||||||
} |
|
||||||
.stat { |
|
||||||
margin-top: 42rpx; |
|
||||||
display: flex; |
|
||||||
align-items: center; |
|
||||||
justify-content: space-between; |
|
||||||
gap: 40rpx; |
|
||||||
.s-item { |
|
||||||
display: flex; |
|
||||||
align-items: center; |
|
||||||
gap: 8rpx; |
|
||||||
font-size: 28rpx; |
|
||||||
color: #999999; |
|
||||||
.icon { |
|
||||||
width: 32rpx; |
|
||||||
height: 32rpx; |
|
||||||
} |
|
||||||
&.active { |
|
||||||
color: #3795f7; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
.none { |
|
||||||
display: block; |
|
||||||
margin: 30rpx auto; |
|
||||||
width: 80%; |
|
||||||
} |
|
||||||
} |
|
@ -1,200 +0,0 @@ |
|||||||
const app = getApp<IAppOption>(); |
|
||||||
|
|
||||||
Page({ |
|
||||||
data: { |
|
||||||
background: 'transparent', |
|
||||||
|
|
||||||
list: [], |
|
||||||
pagination: { |
|
||||||
page: 1, |
|
||||||
pages: 1, |
|
||||||
count: 1, |
|
||||||
}, |
|
||||||
recommendList: [], |
|
||||||
recommendPagination: { |
|
||||||
page: 1, |
|
||||||
pages: 1, |
|
||||||
count: 0, |
|
||||||
}, |
|
||||||
|
|
||||||
cateList: [] as any, |
|
||||||
CateId: '', |
|
||||||
CateSecondId: '', |
|
||||||
cateSecondList: [] as any, |
|
||||||
|
|
||||||
scrollIntoView: '', |
|
||||||
}, |
|
||||||
onLoad(options) { |
|
||||||
this.setData({ |
|
||||||
CateId: options.id || '', |
|
||||||
}); |
|
||||||
app.waitLogin().then(() => { |
|
||||||
this.getCateList(); |
|
||||||
this.cateCallback(this.data.CateId, this.data.CateSecondId); |
|
||||||
}); |
|
||||||
}, |
|
||||||
getCateList() { |
|
||||||
wx.ajax({ |
|
||||||
method: 'GET', |
|
||||||
url: '?r=shizhong/book/cate-list', |
|
||||||
data: {}, |
|
||||||
}).then((res) => { |
|
||||||
this.setData({ |
|
||||||
cateList: res, |
|
||||||
}); |
|
||||||
if (this.data.CateId) { |
|
||||||
this.setData({ |
|
||||||
cateSecondList: res.find((item: any) => item.Id === this.data.CateId)?.Children || [], |
|
||||||
scrollIntoView: `nav-item${this.data.CateId}`, |
|
||||||
}); |
|
||||||
} |
|
||||||
}); |
|
||||||
}, |
|
||||||
handleCate(e) { |
|
||||||
const { index } = e.currentTarget.dataset; |
|
||||||
if (typeof index === 'number') { |
|
||||||
this.setData({ |
|
||||||
CateId: this.data.cateList[index].Id, |
|
||||||
CateSecondId: '', |
|
||||||
cateSecondList: this.data.cateList[index].Children, |
|
||||||
}); |
|
||||||
} else { |
|
||||||
this.setData({ CateId: '', CateSecondId: '', cateSecondList: [] }); |
|
||||||
} |
|
||||||
this.cateCallback(this.data.CateId, this.data.CateSecondId); |
|
||||||
}, |
|
||||||
handleSecondCate(e) { |
|
||||||
const { index } = e.currentTarget.dataset; |
|
||||||
if (typeof index === 'number') { |
|
||||||
this.setData({ |
|
||||||
CateSecondId: this.data.cateSecondList[index].Id, |
|
||||||
}); |
|
||||||
} else { |
|
||||||
this.setData({ CateSecondId: '' }); |
|
||||||
} |
|
||||||
this.cateCallback(this.data.CateId, this.data.CateSecondId); |
|
||||||
}, |
|
||||||
cateCallback(CateId, CateSecondId) { |
|
||||||
this.setData({ |
|
||||||
list: [], |
|
||||||
pagination: { |
|
||||||
page: 1, |
|
||||||
pages: 1, |
|
||||||
count: 1, |
|
||||||
}, |
|
||||||
recommendList: [], |
|
||||||
recommendPagination: { |
|
||||||
page: 1, |
|
||||||
pages: 1, |
|
||||||
count: this.data.CateSecondId ? 1 : 0, |
|
||||||
}, |
|
||||||
}); |
|
||||||
this.getList(1, CateId, CateSecondId); |
|
||||||
if (CateId && CateSecondId) { |
|
||||||
this.getRecommendList(1, CateId, CateSecondId); |
|
||||||
} |
|
||||||
}, |
|
||||||
getList(newPage = 1, CateId, CateSecondId) { |
|
||||||
wx.ajax({ |
|
||||||
method: 'GET', |
|
||||||
url: `?r=shizhong/book/list`, |
|
||||||
data: { |
|
||||||
page: newPage, |
|
||||||
CateId, |
|
||||||
CateSecondId, |
|
||||||
}, |
|
||||||
}).then((res) => { |
|
||||||
const list = res.page === 1 ? res.list : [...this.data.list, ...res.list]; |
|
||||||
this.setData({ |
|
||||||
list, |
|
||||||
pagination: { |
|
||||||
page: res.page, |
|
||||||
pages: res.pages, |
|
||||||
count: res.count, |
|
||||||
}, |
|
||||||
}); |
|
||||||
}); |
|
||||||
}, |
|
||||||
getRecommendList(newPage = 1, CateId, CateSecondId) { |
|
||||||
wx.ajax({ |
|
||||||
method: 'GET', |
|
||||||
url: '?r=shizhong/book/recommend-list', |
|
||||||
data: { |
|
||||||
CateId, |
|
||||||
CateSecondId, |
|
||||||
page: newPage, |
|
||||||
}, |
|
||||||
}).then((res) => { |
|
||||||
const recommendList = res.page === 1 ? res.list : [...this.data.recommendList, ...res.list]; |
|
||||||
this.setData({ |
|
||||||
recommendList, |
|
||||||
recommendPagination: { |
|
||||||
page: res.page, |
|
||||||
pages: res.pages, |
|
||||||
count: res.count, |
|
||||||
}, |
|
||||||
}); |
|
||||||
}); |
|
||||||
}, |
|
||||||
onReachBottom() { |
|
||||||
const { page, pages } = this.data.pagination; |
|
||||||
const { page: rPage, pages: rPages } = this.data.recommendPagination; |
|
||||||
if (pages > page && this.data.list.length) { |
|
||||||
this.getList(page + 1, this.data.CateId, this.data.CateSecondId); |
|
||||||
} else if (rPages > rPage && this.data.recommendList.length && this.data.CateId && this.data.CateSecondId) { |
|
||||||
this.getRecommendList(rPage + 1, this.data.CateId, this.data.CateSecondId); |
|
||||||
} |
|
||||||
}, |
|
||||||
handleCollect(e) { |
|
||||||
const { index, list } = e.currentTarget.dataset; |
|
||||||
const { Id } = this.data[list][index]; |
|
||||||
app.waitLogin(false, true).then(() => { |
|
||||||
wx.ajax({ |
|
||||||
method: 'POST', |
|
||||||
url: '?r=shizhong/book/collect', |
|
||||||
data: { BookId: Id }, |
|
||||||
}).then(() => { |
|
||||||
wx.showToast({ |
|
||||||
title: '您已收藏这本书,可在我的页查看', |
|
||||||
icon: 'none', |
|
||||||
}); |
|
||||||
this.setData({ |
|
||||||
[`${list}[${index}].IsCollect`]: '1', |
|
||||||
}); |
|
||||||
}); |
|
||||||
}); |
|
||||||
}, |
|
||||||
handleUnCollect(e) { |
|
||||||
const { index, list } = e.currentTarget.dataset; |
|
||||||
const { Id } = this.data[list][index]; |
|
||||||
app.waitLogin(false, true).then(() => { |
|
||||||
wx.ajax({ |
|
||||||
method: 'POST', |
|
||||||
url: '?r=shizhong/book/cancel-collect', |
|
||||||
data: { BookId: Id }, |
|
||||||
}).then(() => { |
|
||||||
wx.showToast({ |
|
||||||
title: '取消收藏', |
|
||||||
icon: 'none', |
|
||||||
}); |
|
||||||
this.setData({ |
|
||||||
[`${list}[${index}].IsCollect`]: '0', |
|
||||||
}); |
|
||||||
}); |
|
||||||
}); |
|
||||||
}, |
|
||||||
handleDetail(e) { |
|
||||||
const { id } = e.currentTarget.dataset; |
|
||||||
const backPath = `/pages/article/index?id=${id}`; |
|
||||||
app.waitLogin(false, true, backPath).then(() => { |
|
||||||
wx.navigateTo({ |
|
||||||
url: backPath, |
|
||||||
}); |
|
||||||
}); |
|
||||||
}, |
|
||||||
handleBack() { |
|
||||||
wx.navigateBack(); |
|
||||||
}, |
|
||||||
}); |
|
||||||
|
|
||||||
export {}; |
|
@ -1,102 +0,0 @@ |
|||||||
<view class="page"> |
|
||||||
<scroll-view class="scroll" scroll-x scroll-into-view="{{scrollIntoView}}"> |
|
||||||
<view class="nav"> |
|
||||||
<view class="nav-item {{!CateId && 'active'}}" bind:tap="handleCate">全部</view> |
|
||||||
<view |
|
||||||
class="nav-item {{CateId=== item.Id &&'active'}}" |
|
||||||
wx:for="{{cateList}}" |
|
||||||
wx:key="Id" |
|
||||||
bind:tap="handleCate" |
|
||||||
data-index="{{index}}" |
|
||||||
id="nav-item{{item.Id}}" |
|
||||||
> |
|
||||||
{{item.CateName}} |
|
||||||
</view> |
|
||||||
</view> |
|
||||||
</scroll-view> |
|
||||||
|
|
||||||
<view class="types" wx:if="{{CateId && cateSecondList.length}}"> |
|
||||||
<view class="type {{!CateSecondId && 'active'}}" bind:tap="handleSecondCate">全部</view> |
|
||||||
<view |
|
||||||
class="type {{CateSecondId=== item.Id && 'active'}}" |
|
||||||
wx:for="{{cateSecondList}}" |
|
||||||
wx:key="Id" |
|
||||||
bind:tap="handleSecondCate" |
|
||||||
data-index="{{index}}" |
|
||||||
> |
|
||||||
{{item.CateName}} |
|
||||||
</view> |
|
||||||
</view> |
|
||||||
<view class="card" wx:for="{{list}}" wx:key="Id" data-id="{{item.Id}}" bind:tap="handleDetail"> |
|
||||||
<image class="photo" mode="aspectFill" src="{{item.CoverUrl}}"></image> |
|
||||||
<view class="c-container"> |
|
||||||
<view class="title">{{item.BookName}}</view> |
|
||||||
<view class="type">{{item.CateName}}{{item.CateSecondName ? '/'+item.CateSecondName : ''}}</view> |
|
||||||
<view class="stat"> |
|
||||||
<view class="s-item"> |
|
||||||
<!-- <image class="icon" src="{{imageUrl}}icon-eye.png?t={{Timestamp}}"></image> --> |
|
||||||
阅读 {{~~item.OperateNum + ~~item.BrowseNum}} |
|
||||||
</view> |
|
||||||
<view |
|
||||||
class="s-item active" |
|
||||||
wx:if="{{item.IsCollect === '1'}}" |
|
||||||
catch:tap="handleUnCollect" |
|
||||||
data-index="{{index}}" |
|
||||||
data-list="list" |
|
||||||
> |
|
||||||
<image class="icon" src="{{imageUrl}}icon-collection-active.png?t={{Timestamp}}"></image> |
|
||||||
已收藏 |
|
||||||
</view> |
|
||||||
<view class="s-item" wx:else catch:tap="handleCollect" data-index="{{index}}" data-list="list"> |
|
||||||
<image class="icon" src="{{imageUrl}}icon-collection.png?t={{Timestamp}}"></image> |
|
||||||
收藏 |
|
||||||
</view> |
|
||||||
</view> |
|
||||||
</view> |
|
||||||
</view> |
|
||||||
<block wx:if="{{pagination.page >= pagination.pages}}"> |
|
||||||
<view class="der" wx:if="{{recommendList.length}}">— — 以下为本分类下其他内容 — —</view> |
|
||||||
<view class="card" wx:for="{{recommendList}}" wx:key="Id" bind:tap="handleDetail" data-id="{{item.Id}}"> |
|
||||||
<image class="photo" mode="aspectFill" src="{{item.CoverUrl}}"></image> |
|
||||||
<view class="c-container"> |
|
||||||
<view class="title">{{item.BookName}}</view> |
|
||||||
<view class="type">{{item.CateName}}{{item.CateSecondName ? '/'+item.CateSecondName : ''}}</view> |
|
||||||
<view class="stat"> |
|
||||||
<view class="s-item"> |
|
||||||
<!-- <image class="icon" src="{{imageUrl}}icon-eye.png?t={{Timestamp}}"></image> --> |
|
||||||
阅读 {{~~item.OperateNum + ~~item.BrowseNum}} |
|
||||||
</view> |
|
||||||
<view |
|
||||||
class="s-item active" |
|
||||||
wx:if="{{item.IsCollect === '1'}}" |
|
||||||
catch:tap="handleUnCollect" |
|
||||||
data-index="{{index}}" |
|
||||||
data-list="recommendList" |
|
||||||
> |
|
||||||
<image class="icon" src="{{imageUrl}}icon-collection-active.png?t={{Timestamp}}"></image> |
|
||||||
已收藏 |
|
||||||
</view> |
|
||||||
<view class="s-item" wx:else catch:tap="handleCollect" data-index="{{index}}" data-list="recommendList"> |
|
||||||
<image class="icon" src="{{imageUrl}}icon-collection.png?t={{Timestamp}}"></image> |
|
||||||
收藏 |
|
||||||
</view> |
|
||||||
</view> |
|
||||||
</view> |
|
||||||
</view> |
|
||||||
</block> |
|
||||||
<view class="pagintion"> |
|
||||||
<image |
|
||||||
class="none" |
|
||||||
src="{{imageUrl}}none.png?t={{Timestamp}}" |
|
||||||
wx:if="{{pagination.count==0 && recommendPagination.count==0}}" |
|
||||||
></image> |
|
||||||
<van-divider |
|
||||||
contentPosition="center" |
|
||||||
wx:elif="{{pagination.page<pagination.pages || recommendPagination.page < recommendPagination.pages}}" |
|
||||||
> |
|
||||||
<van-loading /> |
|
||||||
加载中... |
|
||||||
</van-divider> |
|
||||||
<van-divider contentPosition="center" wx:else>没有更多了</van-divider> |
|
||||||
</view> |
|
||||||
</view> |
|
@ -1,7 +0,0 @@ |
|||||||
{ |
|
||||||
"usingComponents": { |
|
||||||
"van-nav-bar": "@vant/weapp/nav-bar/index", |
|
||||||
"van-icon": "@vant/weapp/icon/index", |
|
||||||
"pagination":"/components/pagination/index" |
|
||||||
} |
|
||||||
} |
|
@ -1,60 +0,0 @@ |
|||||||
page { |
|
||||||
background-color: #f3f4f5; |
|
||||||
} |
|
||||||
.page { |
|
||||||
margin: 50rpx 32rpx 0; |
|
||||||
padding-bottom: 80rpx; |
|
||||||
.card { |
|
||||||
padding: 24rpx; |
|
||||||
display: flex; |
|
||||||
gap: 24rpx; |
|
||||||
background: linear-gradient(173deg, #ffffff 0%, #eff7ff 100%); |
|
||||||
border-radius: 24rpx 24rpx 24rpx 24rpx; |
|
||||||
border: 2rpx solid #ffffff; |
|
||||||
.photo { |
|
||||||
flex-shrink: 0; |
|
||||||
width: 218rpx; |
|
||||||
height: 218rpx; |
|
||||||
border-radius: 16rpx; |
|
||||||
} |
|
||||||
.c-container { |
|
||||||
flex: 1; |
|
||||||
display: flex; |
|
||||||
flex-direction: column; |
|
||||||
justify-content: space-between; |
|
||||||
.title { |
|
||||||
font-size: 36rpx; |
|
||||||
color: #222222; |
|
||||||
font-weight: bold; |
|
||||||
line-height: 48rpx; |
|
||||||
} |
|
||||||
.type { |
|
||||||
flex: 1; |
|
||||||
margin-top: 16rpx; |
|
||||||
font-size: 32rpx; |
|
||||||
color: #999999; |
|
||||||
} |
|
||||||
.stat { |
|
||||||
margin-top: 42rpx; |
|
||||||
display: flex; |
|
||||||
align-items: center; |
|
||||||
justify-content: space-between; |
|
||||||
gap: 40rpx; |
|
||||||
.s-item { |
|
||||||
display: flex; |
|
||||||
align-items: center; |
|
||||||
gap: 8rpx; |
|
||||||
font-size: 28rpx; |
|
||||||
color: #999999; |
|
||||||
.icon { |
|
||||||
width: 32rpx; |
|
||||||
height: 32rpx; |
|
||||||
} |
|
||||||
&.active { |
|
||||||
color: #3795f7; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
@ -1,94 +0,0 @@ |
|||||||
const app = getApp<IAppOption>(); |
|
||||||
|
|
||||||
Page({ |
|
||||||
data: { |
|
||||||
background: 'transparent', |
|
||||||
|
|
||||||
pagination: { |
|
||||||
page: 1, |
|
||||||
pages: 1, |
|
||||||
count: 1, |
|
||||||
}, |
|
||||||
list: [], |
|
||||||
}, |
|
||||||
onLoad() { |
|
||||||
app.waitLogin(false, true).then(() => { |
|
||||||
this.getList(); |
|
||||||
}); |
|
||||||
}, |
|
||||||
getList(newPage = 1) { |
|
||||||
wx.ajax({ |
|
||||||
method: 'GET', |
|
||||||
url: `?r=shizhong/book/collect-list`, |
|
||||||
data: { |
|
||||||
page: newPage, |
|
||||||
}, |
|
||||||
}).then((res) => { |
|
||||||
res.list.forEach((item) => { |
|
||||||
item.IsCollect = '1'; |
|
||||||
}); |
|
||||||
const list = res.page === 1 ? res.list : [...this.data.list, ...res.list]; |
|
||||||
this.setData({ |
|
||||||
list, |
|
||||||
pagination: { |
|
||||||
page: res.page, |
|
||||||
pages: res.pages, |
|
||||||
count: res.count, |
|
||||||
}, |
|
||||||
}); |
|
||||||
}); |
|
||||||
}, |
|
||||||
onReachBottom() { |
|
||||||
const { page, pages } = this.data.pagination; |
|
||||||
if (pages > page && this.data.list.length) { |
|
||||||
this.getList(page + 1); |
|
||||||
} |
|
||||||
}, |
|
||||||
handleCollect(e) { |
|
||||||
const { index, list } = e.currentTarget.dataset; |
|
||||||
const { BookId } = this.data[list][index]; |
|
||||||
wx.ajax({ |
|
||||||
method: 'POST', |
|
||||||
url: '?r=shizhong/book/collect', |
|
||||||
data: { BookId }, |
|
||||||
}).then(() => { |
|
||||||
wx.showToast({ |
|
||||||
title: '您已收藏这本书,可在我的页查看', |
|
||||||
icon: 'none', |
|
||||||
}); |
|
||||||
this.setData({ |
|
||||||
[`${list}[${index}].IsCollect`]: '1', |
|
||||||
}); |
|
||||||
}); |
|
||||||
}, |
|
||||||
handleUnCollect(e) { |
|
||||||
const { index, list } = e.currentTarget.dataset; |
|
||||||
const { BookId } = this.data[list][index]; |
|
||||||
wx.ajax({ |
|
||||||
method: 'POST', |
|
||||||
url: '?r=shizhong/book/cancel-collect', |
|
||||||
data: { BookId }, |
|
||||||
}).then(() => { |
|
||||||
wx.showToast({ |
|
||||||
title: '取消收藏', |
|
||||||
icon: 'none', |
|
||||||
}); |
|
||||||
this.setData({ |
|
||||||
[`${list}[${index}].IsCollect`]: '0', |
|
||||||
}); |
|
||||||
}); |
|
||||||
}, |
|
||||||
handleBack() { |
|
||||||
wx.navigateBack(); |
|
||||||
}, |
|
||||||
handleDetail(e) { |
|
||||||
const { id } = e.currentTarget.dataset; |
|
||||||
app.waitLogin(false, true).then(() => { |
|
||||||
wx.navigateTo({ |
|
||||||
url: `/pages/article/index?id=${id}`, |
|
||||||
}); |
|
||||||
}); |
|
||||||
}, |
|
||||||
}); |
|
||||||
|
|
||||||
export {}; |
|
@ -1,40 +0,0 @@ |
|||||||
<van-nav-bar |
|
||||||
title="我的收藏" |
|
||||||
border="{{false}}" |
|
||||||
custom-style="background:{{background}}" |
|
||||||
bind:click-left="handleBack" |
|
||||||
fixed |
|
||||||
> |
|
||||||
<van-icon name="arrow-left" slot="left" color="#000" size="46rpx" /> |
|
||||||
</van-nav-bar> |
|
||||||
|
|
||||||
<view class="page" style="padding-top:{{menuButtonInfo.bottom}}px;"> |
|
||||||
<view class="card" wx:for="{{list}}" wx:key="Id" bind:tap="handleDetail" data-id="{{item.BookId}}"> |
|
||||||
<image class="photo" mode="aspectFill" src="{{item.CoverUrl}}"></image> |
|
||||||
<view class="c-container"> |
|
||||||
<view class="title">{{item.BookName}}</view> |
|
||||||
<view class="type">{{item.CateName}}{{item.CateSecondName ? '/'+item.CateSecondName : ''}}</view> |
|
||||||
<view class="stat"> |
|
||||||
<view class="s-item"> |
|
||||||
<!-- <image class="icon" src="{{imageUrl}}icon-eye.png?t={{Timestamp}}"></image> --> |
|
||||||
阅读 {{~~item.OperateNum + ~~item.BrowseNum}} |
|
||||||
</view> |
|
||||||
<view |
|
||||||
class="s-item active" |
|
||||||
wx:if="{{item.IsCollect === '1'}}" |
|
||||||
catch:tap="handleUnCollect" |
|
||||||
data-index="{{index}}" |
|
||||||
data-list="list" |
|
||||||
> |
|
||||||
<image class="icon" src="{{imageUrl}}icon-collection-active.png?t={{Timestamp}}"></image> |
|
||||||
已收藏 |
|
||||||
</view> |
|
||||||
<view class="s-item" wx:else catch:tap="handleCollect" data-index="{{index}}" data-list="list"> |
|
||||||
<image class="icon" src="{{imageUrl}}icon-collection.png?t={{Timestamp}}"></image> |
|
||||||
收藏 |
|
||||||
</view> |
|
||||||
</view> |
|
||||||
</view> |
|
||||||
</view> |
|
||||||
<pagination pagination="{{pagination}}"></pagination> |
|
||||||
</view> |
|
@ -1,6 +1,7 @@ |
|||||||
{ |
{ |
||||||
"usingComponents": { |
"usingComponents": { |
||||||
"van-popup": "@vant/weapp/popup/index", |
"van-popup": "@vant/weapp/popup/index", |
||||||
"navbar": "/components/navbar/index" |
"navbar": "/components/navbar/index", |
||||||
|
"popup": "/components/popup/index" |
||||||
} |
} |
||||||
} |
} |
||||||
|
@ -1,10 +1,28 @@ |
|||||||
const app = getApp<IAppOption>(); |
const app = getApp<IAppOption>(); |
||||||
|
|
||||||
Page({ |
Page({ |
||||||
data: {}, |
data: { |
||||||
|
popupShow: false, |
||||||
|
// popupType: 'popup1', // 绑定医生弹窗
|
||||||
|
// popupType: 'popup2', // 去关注弹窗
|
||||||
|
// popupType: 'popup3', // 问题反馈弹窗
|
||||||
|
popupType: 'popup4', // 登录失败弹窗
|
||||||
|
popupParams: { |
||||||
|
close: true, |
||||||
|
} as any, |
||||||
|
}, |
||||||
onLoad() { |
onLoad() { |
||||||
// app.waitLogin().then(() => {});
|
// app.waitLogin().then(() => {});
|
||||||
}, |
}, |
||||||
|
handlePopupOk() { |
||||||
|
const { popupType } = this.data; |
||||||
|
}, |
||||||
|
handlePopupCancel() { |
||||||
|
const { popupType } = this.data; |
||||||
|
this.setData({ |
||||||
|
popupShow: false, |
||||||
|
}); |
||||||
|
}, |
||||||
}); |
}); |
||||||
|
|
||||||
export {}; |
export {}; |
||||||
|
@ -1,5 +0,0 @@ |
|||||||
{ |
|
||||||
"navigationStyle": "default", |
|
||||||
"navigationBarTitleText": "详情", |
|
||||||
"usingComponents": {} |
|
||||||
} |
|
@ -1,17 +0,0 @@ |
|||||||
const _app = getApp<IAppOption>(); |
|
||||||
|
|
||||||
Page({ |
|
||||||
data: { |
|
||||||
url: '', |
|
||||||
}, |
|
||||||
onLoad(options) { |
|
||||||
const { url } = options; |
|
||||||
if (url) { |
|
||||||
this.setData({ |
|
||||||
url: decodeURIComponent(url), |
|
||||||
}); |
|
||||||
} |
|
||||||
}, |
|
||||||
}); |
|
||||||
|
|
||||||
export {}; |
|
@ -1 +0,0 @@ |
|||||||
<image class="banner" mode="widthFix" src="{{url}}"></image> |
|
@ -1,7 +0,0 @@ |
|||||||
{ |
|
||||||
"navigationBarTitleText": "用户隐私协议", |
|
||||||
"navigationStyle": "default", |
|
||||||
"usingComponents": { |
|
||||||
"mp-html": "mp-html" |
|
||||||
} |
|
||||||
} |
|
@ -1,3 +0,0 @@ |
|||||||
<view class="page"> |
|
||||||
<mp-html content="{{content}}" scroll-table="{{true}}"></mp-html> |
|
||||||
</view> |
|
@ -1,7 +0,0 @@ |
|||||||
{ |
|
||||||
"usingComponents": { |
|
||||||
"van-nav-bar": "@vant/weapp/nav-bar/index", |
|
||||||
"van-icon": "@vant/weapp/icon/index", |
|
||||||
"pagination":"/components/pagination/index" |
|
||||||
} |
|
||||||
} |
|
@ -1,106 +0,0 @@ |
|||||||
page { |
|
||||||
background-color: #f3f4f5; |
|
||||||
} |
|
||||||
.page { |
|
||||||
padding-bottom: 80rpx; |
|
||||||
.search { |
|
||||||
margin: 34rpx 32rpx 0; |
|
||||||
padding: 0 0 0 24rpx; |
|
||||||
display: flex; |
|
||||||
align-items: center; |
|
||||||
background: linear-gradient(158deg, #ffffff 0%, #f2f9fe 100%); |
|
||||||
border-radius: 106rpx 106rpx 106rpx 106rpx; |
|
||||||
border: 1px solid #ffffff; |
|
||||||
.icon { |
|
||||||
width: 36rpx; |
|
||||||
height: 36rpx; |
|
||||||
} |
|
||||||
.input { |
|
||||||
flex: 1; |
|
||||||
padding: 16rpx; |
|
||||||
line-height: 40rpx; |
|
||||||
font-size: 28rpx; |
|
||||||
} |
|
||||||
.place-input { |
|
||||||
color: #c9cdd4; |
|
||||||
} |
|
||||||
} |
|
||||||
.tip { |
|
||||||
margin: 52rpx 32rpx 0; |
|
||||||
font-size: 28rpx; |
|
||||||
color: #222222; |
|
||||||
font-weight: bold; |
|
||||||
} |
|
||||||
.card { |
|
||||||
padding: 24rpx; |
|
||||||
margin: 24rpx 32rpx 0; |
|
||||||
display: flex; |
|
||||||
gap: 24rpx; |
|
||||||
background: linear-gradient(173deg, #ffffff 0%, #eff7ff 100%); |
|
||||||
border-radius: 24rpx 24rpx 24rpx 24rpx; |
|
||||||
border: 2rpx solid #ffffff; |
|
||||||
.photo { |
|
||||||
flex-shrink: 0; |
|
||||||
width: 218rpx; |
|
||||||
height: 218rpx; |
|
||||||
border-radius: 16rpx; |
|
||||||
} |
|
||||||
.c-container { |
|
||||||
flex: 1; |
|
||||||
display: flex; |
|
||||||
flex-direction: column; |
|
||||||
justify-content: space-between; |
|
||||||
.title { |
|
||||||
font-size: 36rpx; |
|
||||||
color: #222222; |
|
||||||
font-weight: bold; |
|
||||||
line-height: 48rpx; |
|
||||||
} |
|
||||||
.book-name { |
|
||||||
flex: 1; |
|
||||||
padding-top: 20rpx; |
|
||||||
font-size: 32rpx; |
|
||||||
color: #999999; |
|
||||||
} |
|
||||||
.c-footer { |
|
||||||
margin-top: 20px; |
|
||||||
display: flex; |
|
||||||
justify-content: space-between; |
|
||||||
gap: 20rpx; |
|
||||||
.type { |
|
||||||
font-size: 32rpx; |
|
||||||
color: #999999; |
|
||||||
} |
|
||||||
.stat { |
|
||||||
flex-shrink: 0; |
|
||||||
.s-item { |
|
||||||
display: flex; |
|
||||||
align-items: center; |
|
||||||
gap: 8rpx; |
|
||||||
font-size: 28rpx; |
|
||||||
color: #999999; |
|
||||||
.icon { |
|
||||||
width: 32rpx; |
|
||||||
height: 32rpx; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
.empty-search { |
|
||||||
.e-icon { |
|
||||||
margin: 186rpx auto 0; |
|
||||||
display: block; |
|
||||||
width: 217rpx; |
|
||||||
height: 236rpx; |
|
||||||
} |
|
||||||
.content { |
|
||||||
margin-top: 44rpx; |
|
||||||
font-size: 32rpx; |
|
||||||
line-height: 48rpx; |
|
||||||
color: #999999; |
|
||||||
text-align: center; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
@ -1,78 +0,0 @@ |
|||||||
const app = getApp<IAppOption>(); |
|
||||||
|
|
||||||
Page({ |
|
||||||
data: { |
|
||||||
background: 'transparent', |
|
||||||
|
|
||||||
focus: false, |
|
||||||
Search: '', |
|
||||||
pagination: { |
|
||||||
page: 1, |
|
||||||
pages: 1, |
|
||||||
count: 1, |
|
||||||
}, |
|
||||||
list: [], |
|
||||||
}, |
|
||||||
onLoad() { |
|
||||||
app.waitLogin().then(() => { |
|
||||||
this.setData({ |
|
||||||
focus: true, |
|
||||||
}); |
|
||||||
}); |
|
||||||
}, |
|
||||||
handleInput() { |
|
||||||
this.setData({ |
|
||||||
'pagination.count': 1, |
|
||||||
}); |
|
||||||
}, |
|
||||||
handleSearch() { |
|
||||||
if (!this.data.Search) { |
|
||||||
wx.showToast({ |
|
||||||
title: '请输入搜索内容', |
|
||||||
icon: 'none', |
|
||||||
}); |
|
||||||
return; |
|
||||||
} |
|
||||||
this.getList(); |
|
||||||
}, |
|
||||||
getList(newPage = 1) { |
|
||||||
wx.ajax({ |
|
||||||
method: 'GET', |
|
||||||
url: `?r=shizhong/book/search-list`, |
|
||||||
data: { |
|
||||||
page: newPage, |
|
||||||
Search: this.data.Search, |
|
||||||
}, |
|
||||||
}).then((res) => { |
|
||||||
const list = res.page === 1 ? res.list : [...this.data.list, ...res.list]; |
|
||||||
this.setData({ |
|
||||||
list, |
|
||||||
pagination: { |
|
||||||
page: res.page, |
|
||||||
pages: res.pages, |
|
||||||
count: res.count, |
|
||||||
}, |
|
||||||
}); |
|
||||||
}); |
|
||||||
}, |
|
||||||
onReachBottom() { |
|
||||||
const { page, pages } = this.data.pagination; |
|
||||||
if (pages > page && this.data.list.length) { |
|
||||||
this.getList(page + 1); |
|
||||||
} |
|
||||||
}, |
|
||||||
handleBack() { |
|
||||||
wx.navigateBack(); |
|
||||||
}, |
|
||||||
handleDetail(e) { |
|
||||||
const { id, cid } = e.currentTarget.dataset; |
|
||||||
const backPath = `/pages/article/index?id=${id}&cid=${cid}`; |
|
||||||
app.waitLogin(false, true, backPath).then(() => { |
|
||||||
wx.navigateTo({ |
|
||||||
url: backPath, |
|
||||||
}); |
|
||||||
}); |
|
||||||
}, |
|
||||||
}); |
|
||||||
|
|
||||||
export {}; |
|
@ -1,58 +0,0 @@ |
|||||||
<van-nav-bar |
|
||||||
title="搜索" |
|
||||||
border="{{false}}" |
|
||||||
custom-style="background:{{background}}" |
|
||||||
bind:click-left="handleBack" |
|
||||||
fixed |
|
||||||
> |
|
||||||
<van-icon name="arrow-left" slot="left" color="#000" size="46rpx" /> |
|
||||||
</van-nav-bar> |
|
||||||
<view class="page" style="padding-top:{{menuButtonInfo.bottom}}px;"> |
|
||||||
<view class="search"> |
|
||||||
<image class="icon" src="{{imageUrl}}icon-search.png?t={{Timestamp}}"></image> |
|
||||||
<input |
|
||||||
type="text" |
|
||||||
class="input" |
|
||||||
model:value="{{Search}}" |
|
||||||
focus="{{focus}}" |
|
||||||
placeholder-class="place-input" |
|
||||||
confirm-type="search" |
|
||||||
bindconfirm="handleSearch" |
|
||||||
placeholder="请输入要搜索的内容" |
|
||||||
bindinput="handleInput" |
|
||||||
/> |
|
||||||
</view> |
|
||||||
<view class="tip" wx:if="{{list.length}}">以下为搜到的内容</view> |
|
||||||
<view |
|
||||||
class="card" |
|
||||||
wx:for="{{list}}" |
|
||||||
wx:key="index" |
|
||||||
bind:tap="handleDetail" |
|
||||||
data-id="{{item.BookId}}" |
|
||||||
data-cid="{{item.ChapterId}}" |
|
||||||
> |
|
||||||
<image class="photo" mode="aspectFill" src="{{item.CoverUrl}}"></image> |
|
||||||
<view class="c-container"> |
|
||||||
<view class="title">{{item.ChapterName}}</view> |
|
||||||
<view class="book-name">{{item.BookName}}</view> |
|
||||||
<view class="c-footer"> |
|
||||||
<view class="type">{{item.CateName}}{{item.CateSecondName ? '/'+item.CateSecondName : ''}}</view> |
|
||||||
<view class="stat"> |
|
||||||
<view class="s-item"> |
|
||||||
<!-- <image class="icon" src="{{imageUrl}}icon-eye.png?t={{Timestamp}}"></image> --> |
|
||||||
阅读 {{~~item.OperateNum + ~~item.BrowseNum}} |
|
||||||
</view> |
|
||||||
</view> |
|
||||||
</view> |
|
||||||
</view> |
|
||||||
</view> |
|
||||||
<view class="empty-search" wx:if="{{Search && pagination.count==='0'}}"> |
|
||||||
<image class="e-icon" src="{{imageUrl}}empty-1.png?t={{Timestamp}}"></image> |
|
||||||
<view class="content"> |
|
||||||
抱歉,未搜到相关内容 |
|
||||||
<view></view> |
|
||||||
换个词试试吧 |
|
||||||
</view> |
|
||||||
</view> |
|
||||||
<pagination wx:elif="{{list.length}}" pagination="{{pagination}}"></pagination> |
|
||||||
</view> |
|
@ -1,6 +0,0 @@ |
|||||||
{ |
|
||||||
"usingComponents": { |
|
||||||
"van-icon": "@vant/weapp/icon/index", |
|
||||||
"van-nav-bar": "@vant/weapp/nav-bar/index" |
|
||||||
} |
|
||||||
} |
|
@ -1,161 +0,0 @@ |
|||||||
.page { |
|
||||||
.container { |
|
||||||
margin-top: 336rpx; |
|
||||||
padding: 64rpx 32rpx 0; |
|
||||||
background: linear-gradient(to bottom, rgba(255, 255, 255, 0.76) 0%, #ffffff 100%) no-repeat top center/100% 186rpx; |
|
||||||
border-radius: 32rpx; |
|
||||||
|
|
||||||
.tel { |
|
||||||
.input { |
|
||||||
padding: 24rpx 48rpx; |
|
||||||
background-color: #f4f7fa; |
|
||||||
border-radius: 96rpx; |
|
||||||
font-size: 32rpx; |
|
||||||
} |
|
||||||
|
|
||||||
.place-input { |
|
||||||
color: #babdc1; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
.code-row { |
|
||||||
margin-top: 32rpx; |
|
||||||
display: flex; |
|
||||||
align-items: center; |
|
||||||
gap: 30rpx; |
|
||||||
|
|
||||||
.code { |
|
||||||
flex: 1; |
|
||||||
padding: 24rpx 48rpx; |
|
||||||
background-color: #f4f7fa; |
|
||||||
border-radius: 96rpx; |
|
||||||
font-size: 32rpx; |
|
||||||
} |
|
||||||
|
|
||||||
.place-code { |
|
||||||
color: #babdc1; |
|
||||||
} |
|
||||||
|
|
||||||
.btn { |
|
||||||
flex-shrink: 0; |
|
||||||
padding: 24rpx; |
|
||||||
width: 7em; |
|
||||||
text-align: center; |
|
||||||
color: #fff; |
|
||||||
font-size: 32rpx; |
|
||||||
background-color: #3795f7; |
|
||||||
border-radius: 96rpx; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
.protool { |
|
||||||
margin-top: 56rpx; |
|
||||||
display: flex; |
|
||||||
align-items: center; |
|
||||||
font-size: 28rpx; |
|
||||||
color: #999; |
|
||||||
|
|
||||||
.radio { |
|
||||||
transform: scale(0.7); |
|
||||||
} |
|
||||||
|
|
||||||
.link { |
|
||||||
color: #3795f7; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
.submit { |
|
||||||
margin-top: 88rpx; |
|
||||||
padding: 22rpx; |
|
||||||
text-align: center; |
|
||||||
font-size: 36rpx; |
|
||||||
color: #fff; |
|
||||||
line-height: 44rpx; |
|
||||||
background: linear-gradient(90deg, #134df6 36%, #3795f7 100%); |
|
||||||
border-radius: 96rpx 96rpx 96rpx 96rpx; |
|
||||||
} |
|
||||||
|
|
||||||
.tel-btn { |
|
||||||
margin: 78rpx auto 0; |
|
||||||
padding: 12rpx 44rpx; |
|
||||||
border-radius: 52rpx; |
|
||||||
width: 352rpx; |
|
||||||
font-size: 32rpx; |
|
||||||
line-height: 40rpx; |
|
||||||
color: rgba(153, 153, 153, 1); |
|
||||||
display: flex; |
|
||||||
gap: 12rpx; |
|
||||||
align-items: center; |
|
||||||
justify-content: center; |
|
||||||
outline: none; |
|
||||||
|
|
||||||
.icon { |
|
||||||
width: 28rpx; |
|
||||||
height: 40rpx; |
|
||||||
} |
|
||||||
|
|
||||||
&::after { |
|
||||||
border: none; |
|
||||||
outline: none; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
.visitor { |
|
||||||
margin-top: 196rpx; |
|
||||||
display: flex; |
|
||||||
align-items: center; |
|
||||||
justify-content: center; |
|
||||||
font-size: 32rpx; |
|
||||||
line-height: 1; |
|
||||||
color: #3795f7; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
.popup { |
|
||||||
padding: 33rpx 0 0; |
|
||||||
|
|
||||||
.popup-container { |
|
||||||
padding: 280rpx 48rpx 0; |
|
||||||
width: 622rpx; |
|
||||||
height: 490rpx; |
|
||||||
box-sizing: border-box; |
|
||||||
background: linear-gradient(180deg, #e7f8ff 0%, #ffffff 100%); |
|
||||||
border-radius: 32rpx; |
|
||||||
position: relative; |
|
||||||
|
|
||||||
.badge { |
|
||||||
position: absolute; |
|
||||||
left: 0; |
|
||||||
top: -33px; |
|
||||||
width: 246rpx; |
|
||||||
height: 286rpx; |
|
||||||
} |
|
||||||
|
|
||||||
.title { |
|
||||||
position: absolute; |
|
||||||
top: 50rpx; |
|
||||||
right: 28rpx; |
|
||||||
width: 338rpx; |
|
||||||
height: 164rpx; |
|
||||||
} |
|
||||||
|
|
||||||
.conform { |
|
||||||
height: 88rpx; |
|
||||||
text-align: center; |
|
||||||
background: #3795f7; |
|
||||||
line-height: 88rpx; |
|
||||||
font-size: 36rpx; |
|
||||||
color: #FFFFFF; |
|
||||||
border-radius: 96rpx 96rpx 96rpx 96rpx; |
|
||||||
} |
|
||||||
|
|
||||||
.cancel{ |
|
||||||
margin-top: 10rpx; |
|
||||||
font-size: 32rpx; |
|
||||||
color: #999999; |
|
||||||
text-align: center; |
|
||||||
line-height: 88rpx; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
@ -1,95 +0,0 @@ |
|||||||
const app = getApp<IAppOption>(); |
|
||||||
let timer: number | null = 0; |
|
||||||
|
|
||||||
Page({ |
|
||||||
data: { |
|
||||||
menuButtonInfo: {}, |
|
||||||
mobile: '', |
|
||||||
code: '', |
|
||||||
codeText: '发送验证码', |
|
||||||
}, |
|
||||||
onLoad() {}, |
|
||||||
getCode() { |
|
||||||
if (timer) return; |
|
||||||
const mobile = this.data.mobile; |
|
||||||
if (!mobile) { |
|
||||||
wx.showToast({ |
|
||||||
title: '手机号不能为空', |
|
||||||
icon: 'none', |
|
||||||
}); |
|
||||||
return; |
|
||||||
} |
|
||||||
// 验证手机号
|
|
||||||
if (!/^1[3-9,]\d{9}$/.test(mobile)) { |
|
||||||
wx.showToast({ |
|
||||||
title: '手机号格式不正确', |
|
||||||
icon: 'none', |
|
||||||
}); |
|
||||||
return; |
|
||||||
} |
|
||||||
wx.ajax({ |
|
||||||
method: 'POST', |
|
||||||
url: '?r=shizhong/login/send-verify-code', |
|
||||||
data: { |
|
||||||
mobile, |
|
||||||
}, |
|
||||||
}).then(() => { |
|
||||||
wx.showToast({ |
|
||||||
icon: 'none', |
|
||||||
title: '验证码已发送~', |
|
||||||
}); |
|
||||||
let time = 60; |
|
||||||
timer = setInterval(() => { |
|
||||||
time--; |
|
||||||
this.setData({ |
|
||||||
codeText: `${time}s后重新发送`, |
|
||||||
}); |
|
||||||
if (time <= 0) { |
|
||||||
clearInterval(timer as number); |
|
||||||
timer = null; |
|
||||||
this.setData({ |
|
||||||
codeText: '发送验证码', |
|
||||||
}); |
|
||||||
} |
|
||||||
}, 1000); |
|
||||||
}); |
|
||||||
}, |
|
||||||
handleSubmit() { |
|
||||||
const { mobile, code } = this.data; |
|
||||||
if (!mobile) { |
|
||||||
wx.showToast({ |
|
||||||
title: '请输入手机号', |
|
||||||
icon: 'none', |
|
||||||
}); |
|
||||||
return; |
|
||||||
} |
|
||||||
if (!code) { |
|
||||||
wx.showToast({ |
|
||||||
title: '请输入验证码', |
|
||||||
icon: 'none', |
|
||||||
}); |
|
||||||
return; |
|
||||||
} |
|
||||||
wx.ajax({ |
|
||||||
method: 'POST', |
|
||||||
url: '?r=shizhong/login/reg-login', |
|
||||||
data: { |
|
||||||
mobile, |
|
||||||
code, |
|
||||||
}, |
|
||||||
}).then(() => { |
|
||||||
this.submitCallback(); |
|
||||||
}); |
|
||||||
}, |
|
||||||
submitCallback() { |
|
||||||
app.globalData.isLogin = 1; |
|
||||||
wx.reLaunch({ |
|
||||||
url: '/pages/home/index', |
|
||||||
}); |
|
||||||
}, |
|
||||||
handleBack(){ |
|
||||||
wx.navigateBack() |
|
||||||
} |
|
||||||
}); |
|
||||||
|
|
||||||
export {}; |
|
@ -1,35 +0,0 @@ |
|||||||
<van-nav-bar |
|
||||||
right-text="按钮" |
|
||||||
left-arrow |
|
||||||
fixed |
|
||||||
custom-style="background:transparent;" |
|
||||||
bind:click-left="handleBack" |
|
||||||
/> |
|
||||||
<view |
|
||||||
class="page" |
|
||||||
style="background: url('{{imageUrl}}login-bg.png?t={{Timestamp}}') no-repeat top center/100% 624rpx;padding-top:{{menuButtonInfo.bottom}}px;" |
|
||||||
> |
|
||||||
<view class="container"> |
|
||||||
<view class="tel"> |
|
||||||
<input |
|
||||||
type="number" |
|
||||||
model:value="{{mobile}}" |
|
||||||
placeholder-class="place-input" |
|
||||||
class="input" |
|
||||||
placeholder="请输入手机号" |
|
||||||
/> |
|
||||||
</view> |
|
||||||
<view class="code-row"> |
|
||||||
<input |
|
||||||
type="text" |
|
||||||
placeholder="请输入验证码" |
|
||||||
class="code" |
|
||||||
placeholder-class="place-code" |
|
||||||
model:value="{{code}}" |
|
||||||
type="number" |
|
||||||
/> |
|
||||||
<view class="btn" bind:tap="getCode">{{codeText}}</view> |
|
||||||
</view> |
|
||||||
<view class="submit" bind:tap="handleSubmit">切换账号</view> |
|
||||||
</view> |
|
||||||
</view> |
|
@ -1,8 +0,0 @@ |
|||||||
{ |
|
||||||
"usingComponents": { |
|
||||||
"van-progress": "@vant/weapp/progress/index", |
|
||||||
"van-nav-bar": "@vant/weapp/nav-bar/index", |
|
||||||
"van-icon": "@vant/weapp/icon/index", |
|
||||||
"van-popup": "@vant/weapp/popup/index" |
|
||||||
} |
|
||||||
} |
|
@ -1,219 +0,0 @@ |
|||||||
page { |
|
||||||
background: #f3f4f5 linear-gradient(180deg, #d2f1fe 0%, rgba(244, 248, 249, 0) 100%) no-repeat top center/100% 442rpx; |
|
||||||
} |
|
||||||
|
|
||||||
.page { |
|
||||||
min-height: 100vh; |
|
||||||
overflow: hidden; |
|
||||||
|
|
||||||
.swiper { |
|
||||||
width: 100%; |
|
||||||
height: 1632rpx; |
|
||||||
box-sizing: border-box; |
|
||||||
} |
|
||||||
|
|
||||||
.topic { |
|
||||||
position: relative; |
|
||||||
margin: 16rpx 48rpx; |
|
||||||
padding: 48rpx 40rpx 0; |
|
||||||
box-sizing: border-box; |
|
||||||
background: #ffffff; |
|
||||||
box-shadow: 0rpx 8rpx 32rpx 0rpx rgba(188, 188, 188, 0.18); |
|
||||||
border-radius: 24rpx 24rpx 24rpx 24rpx; |
|
||||||
&::before { |
|
||||||
content: ''; |
|
||||||
position: absolute; |
|
||||||
bottom: -50rpx; |
|
||||||
left: 52rpx; |
|
||||||
width: calc(100% - 104rpx); |
|
||||||
height: 50rpx; |
|
||||||
background: rgba(55, 149, 247, 0.24); |
|
||||||
border-radius: 0 0 24rpx 24rpx; |
|
||||||
} |
|
||||||
&::after { |
|
||||||
content: ''; |
|
||||||
position: absolute; |
|
||||||
bottom: -30rpx; |
|
||||||
left: 22rpx; |
|
||||||
width: calc(100% - 44rpx); |
|
||||||
height: 30rpx; |
|
||||||
background: rgba(55, 149, 247, 0.8); |
|
||||||
border-radius: 0 0 24rpx 24rpx; |
|
||||||
} |
|
||||||
|
|
||||||
.order { |
|
||||||
font-size: 60rpx; |
|
||||||
color: #3795f7; |
|
||||||
font-weight: bold; |
|
||||||
|
|
||||||
.all { |
|
||||||
font-size: 44rpx; |
|
||||||
color: #cdcdcd; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
.progress { |
|
||||||
margin-top: 26rpx; |
|
||||||
} |
|
||||||
|
|
||||||
.content { |
|
||||||
margin-top: 34rpx; |
|
||||||
font-size: 36rpx; |
|
||||||
color: #222222; |
|
||||||
line-height: 64rpx; |
|
||||||
white-space: pre-line; |
|
||||||
} |
|
||||||
|
|
||||||
.btn { |
|
||||||
margin-top: 32rpx; |
|
||||||
font-size: 36rpx; |
|
||||||
color: #65686c; |
|
||||||
line-height: 88rpx; |
|
||||||
text-align: center; |
|
||||||
height: 88rpx; |
|
||||||
background: #f4f7fa; |
|
||||||
border-radius: 84rpx 84rpx 84rpx 84rpx; |
|
||||||
|
|
||||||
&.active { |
|
||||||
color: #ffffff; |
|
||||||
background: #3795f7; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
.footer { |
|
||||||
width: 100%; |
|
||||||
padding: 60rpx 0; |
|
||||||
box-sizing: border-box; |
|
||||||
display: flex; |
|
||||||
align-items: center; |
|
||||||
justify-content: space-between; |
|
||||||
|
|
||||||
.prev { |
|
||||||
flex: 1; |
|
||||||
font-size: 36rpx; |
|
||||||
color: #3795f7; |
|
||||||
font-weight: bold; |
|
||||||
display: flex; |
|
||||||
align-items: center; |
|
||||||
justify-content: center; |
|
||||||
box-sizing: border-box; |
|
||||||
|
|
||||||
.icon { |
|
||||||
margin-right: 16rpx; |
|
||||||
width: 44rpx; |
|
||||||
height: 44rpx; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
.submit { |
|
||||||
width: 290rpx; |
|
||||||
height: 88rpx; |
|
||||||
font-size: 36rpx; |
|
||||||
color: #ffffff; |
|
||||||
background: #3795f7; |
|
||||||
border-radius: 96rpx 96rpx 96rpx 96rpx; |
|
||||||
text-align: center; |
|
||||||
line-height: 88rpx; |
|
||||||
font-weight: normal; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
.end { |
|
||||||
position: relative; |
|
||||||
margin: 272rpx 48rpx 16rpx; |
|
||||||
padding: 70rpx 52rpx 84rpx; |
|
||||||
box-sizing: border-box; |
|
||||||
background: #ffffff; |
|
||||||
box-shadow: 0rpx 8rpx 32rpx 0rpx rgba(188, 188, 188, 0.18); |
|
||||||
border-radius: 24rpx 24rpx 24rpx 24rpx; |
|
||||||
.badge { |
|
||||||
display: block; |
|
||||||
margin: 0 auto; |
|
||||||
width: 217rpx; |
|
||||||
height: 182rpx; |
|
||||||
} |
|
||||||
.title { |
|
||||||
font-size: 40rpx; |
|
||||||
color: #222222; |
|
||||||
font-weight: bold; |
|
||||||
text-align: center; |
|
||||||
} |
|
||||||
.content { |
|
||||||
margin-top: 30rpx; |
|
||||||
font-size: 32rpx; |
|
||||||
color: #222222; |
|
||||||
} |
|
||||||
.codes { |
|
||||||
margin-top: 30rpx; |
|
||||||
display: flex; |
|
||||||
justify-content: space-between; |
|
||||||
.c-item { |
|
||||||
.code { |
|
||||||
width: 246rpx; |
|
||||||
height: 246rpx; |
|
||||||
} |
|
||||||
.name { |
|
||||||
margin-top: 4rpx; |
|
||||||
text-align: center; |
|
||||||
font-size: 28rpx; |
|
||||||
color: #222222; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
.btn { |
|
||||||
margin-top: 54rpx; |
|
||||||
height: 88rpx; |
|
||||||
text-align: center; |
|
||||||
line-height: 88rpx; |
|
||||||
font-size: 36rpx; |
|
||||||
color: #fff; |
|
||||||
background: #3795f7; |
|
||||||
border-radius: 96rpx 96rpx 96rpx 96rpx; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
.relove { |
|
||||||
position: fixed; |
|
||||||
top: 50%; |
|
||||||
left: 50%; |
|
||||||
transform: translate(-50%, -50%); |
|
||||||
z-index: 10; |
|
||||||
width: 388rpx; |
|
||||||
height: 350rpx; |
|
||||||
background: rgba(0, 0, 0, 0.67); |
|
||||||
border-radius: 42rpx 42rpx 42rpx 42rpx; |
|
||||||
display: flex; |
|
||||||
align-items: center; |
|
||||||
justify-content: center; |
|
||||||
flex-direction: column; |
|
||||||
text-align: center; |
|
||||||
.icon { |
|
||||||
width: 84rpx; |
|
||||||
height: 84rpx; |
|
||||||
} |
|
||||||
.content { |
|
||||||
margin-top: 26rpx; |
|
||||||
font-size: 40rpx; |
|
||||||
color: #ffffff; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
.start { |
|
||||||
padding: 710rpx 32rpx 0; |
|
||||||
width: 654rpx; |
|
||||||
height: 860rpx; |
|
||||||
box-sizing: border-box; |
|
||||||
.btn { |
|
||||||
width: 596rpx; |
|
||||||
height: 88rpx; |
|
||||||
font-size: 36rpx; |
|
||||||
color: #FFFFFF; |
|
||||||
display: flex; |
|
||||||
align-items: center; |
|
||||||
justify-content: center; |
|
||||||
background: #3795f7; |
|
||||||
border-radius: 96rpx 96rpx 96rpx 96rpx; |
|
||||||
} |
|
||||||
} |
|
@ -1,146 +0,0 @@ |
|||||||
const app = getApp<IAppOption>(); |
|
||||||
// const licia = require('miniprogram-licia');
|
|
||||||
|
|
||||||
Page({ |
|
||||||
data: { |
|
||||||
nav: 0, |
|
||||||
percentage: 0, |
|
||||||
question: [] as { questionId: string; title: string; answer?: '1' | '2' }[], |
|
||||||
|
|
||||||
back: false, |
|
||||||
|
|
||||||
start: true, |
|
||||||
end: false, |
|
||||||
|
|
||||||
answerList: [ |
|
||||||
['非常了解', '一般了解', '完全不了解'], |
|
||||||
['非常了解', '一般了解', '完全不了解'], |
|
||||||
['非常了解', '一般了解', '完全不了解'], |
|
||||||
['非常了解', '一般了解', '完全不了解'], |
|
||||||
['很感兴趣', '一般兴趣', '不感兴趣'], |
|
||||||
['很感兴趣', '一般兴趣', '不感兴趣'], |
|
||||||
['很感兴趣', '一般兴趣', '不感兴趣'], |
|
||||||
['非常了解', '一般了解', '完全不了解'], |
|
||||||
['很感兴趣', '一般兴趣', '不感兴趣'], |
|
||||||
['很感兴趣', '一般兴趣', '不感兴趣'], |
|
||||||
['很感兴趣', '一般兴趣', '不感兴趣'], |
|
||||||
['很感兴趣', '一般兴趣', '不感兴趣'], |
|
||||||
['很感兴趣', '一般兴趣', '不感兴趣'], |
|
||||||
['很感兴趣', '一般兴趣', '不感兴趣'], |
|
||||||
['很感兴趣', '一般兴趣', '不感兴趣'], |
|
||||||
['很感兴趣', '一般兴趣', '不感兴趣'], |
|
||||||
['很感兴趣', '一般兴趣', '不感兴趣'], |
|
||||||
['很感兴趣', '一般兴趣', '不感兴趣'], |
|
||||||
['很感兴趣', '一般兴趣', '不感兴趣'], |
|
||||||
['很感兴趣', '一般兴趣', '不感兴趣'], |
|
||||||
], |
|
||||||
}, |
|
||||||
onLoad(options) { |
|
||||||
this.setData({ |
|
||||||
back: options.back === '1', |
|
||||||
}); |
|
||||||
app.waitLogin(true).then(() => { |
|
||||||
this.getList(); |
|
||||||
}); |
|
||||||
}, |
|
||||||
getList() { |
|
||||||
wx.ajax({ |
|
||||||
method: 'GET', |
|
||||||
url: '?r=shizhong/account/get-question', |
|
||||||
data: {}, |
|
||||||
}).then((res) => { |
|
||||||
this.setData({ |
|
||||||
question: res, |
|
||||||
}); |
|
||||||
}); |
|
||||||
}, |
|
||||||
handleEnd() { |
|
||||||
app.waitLogin().then(() => { |
|
||||||
wx.reLaunch({ |
|
||||||
url: '/pages/home/index', |
|
||||||
}); |
|
||||||
}); |
|
||||||
}, |
|
||||||
// handleBtn: licia.debounce(function (e) {
|
|
||||||
// const { index, id } = e.currentTarget.dataset;
|
|
||||||
// const { question, nav } = this.data;
|
|
||||||
// question[index].answer = id;
|
|
||||||
// this.setData({
|
|
||||||
// question,
|
|
||||||
// nav: nav === question.length - 1 ? nav : nav + 1,
|
|
||||||
// percentage: ((nav + 1) / question.length) * 100,
|
|
||||||
// });
|
|
||||||
// }, 200),
|
|
||||||
handleBtn(e) { |
|
||||||
const { index, id } = e.currentTarget.dataset; |
|
||||||
const { question, nav } = this.data; |
|
||||||
// 防止重复点击
|
|
||||||
if (question[index].answer && nav > index) return; |
|
||||||
question[index].answer = id; |
|
||||||
this.setData({ |
|
||||||
question, |
|
||||||
nav: nav === question.length - 1 ? nav : nav + 1, |
|
||||||
percentage: ((nav + 1) / question.length) * 100, |
|
||||||
}); |
|
||||||
}, |
|
||||||
handlePrev() { |
|
||||||
this.setData({ |
|
||||||
nav: this.data.nav - 1, |
|
||||||
}); |
|
||||||
}, |
|
||||||
handleSubmit() { |
|
||||||
const answer = this.data.question.map((item) => { |
|
||||||
return { |
|
||||||
qId: item.questionId, |
|
||||||
answer: item.answer, |
|
||||||
}; |
|
||||||
}); |
|
||||||
wx.ajax({ |
|
||||||
method: 'POST', |
|
||||||
url: '?r=shizhong/account/answer-question', |
|
||||||
data: { |
|
||||||
answer: JSON.stringify(answer), |
|
||||||
}, |
|
||||||
}).then(() => { |
|
||||||
this.setData({ |
|
||||||
end: true, |
|
||||||
}); |
|
||||||
}); |
|
||||||
}, |
|
||||||
bindtransition() { |
|
||||||
this.setData({ |
|
||||||
nav: this.data.nav, |
|
||||||
}); |
|
||||||
}, |
|
||||||
catchTouchMove() { |
|
||||||
return false; |
|
||||||
}, |
|
||||||
handleStart() { |
|
||||||
this.setData({ start: false }); |
|
||||||
}, |
|
||||||
handleBack() { |
|
||||||
if (this.data.end) { |
|
||||||
wx.navigateBack(); |
|
||||||
} else { |
|
||||||
wx.showModal({ |
|
||||||
title: '确认退出?', |
|
||||||
content: '还差一点就完成了,退出会清空所有答题,确认现在要退出吗?', |
|
||||||
cancelText: '退出', |
|
||||||
confirmText: '继续答题', |
|
||||||
success: (res) => { |
|
||||||
if (res.cancel) { |
|
||||||
if (this.data.back) { |
|
||||||
wx.navigateBack(); |
|
||||||
} else { |
|
||||||
wx.reLaunch({ |
|
||||||
url: '/pages/home/index', |
|
||||||
}); |
|
||||||
} |
|
||||||
} |
|
||||||
}, |
|
||||||
}); |
|
||||||
} |
|
||||||
}, |
|
||||||
}); |
|
||||||
|
|
||||||
export {}; |
|
@ -1,100 +0,0 @@ |
|||||||
<view |
|
||||||
class="page" |
|
||||||
style="background: url('{{imageUrl}}topic{{end?'-end':''}}-bg.png?t={{Timestamp}}') no-repeat left {{menuButtonInfo.bottom+102}}rpx /100% 1284rpx;" |
|
||||||
> |
|
||||||
<van-nav-bar title="" border="{{false}}" custom-style="background:transparent" bind:click-left="handleBack" fixed> |
|
||||||
<van-icon name="arrow-left" slot="left" color="#000" size="46rpx" /> |
|
||||||
</van-nav-bar> |
|
||||||
<swiper |
|
||||||
class="swiper" |
|
||||||
current="{{nav}}" |
|
||||||
bindtransition="bindtransition" |
|
||||||
style="margin-top:{{menuButtonInfo.bottom+73}}px;" |
|
||||||
wx:if="{{!end}}" |
|
||||||
> |
|
||||||
<swiper-item wx:for="{{question}}" wx:key="index" wx:for-item="questionItem" catch:touchmove="catchTouchMove"> |
|
||||||
<view class="topic"> |
|
||||||
<view class="order"> |
|
||||||
{{index + 1}}/ |
|
||||||
<text class="all">{{question.length}}</text> |
|
||||||
</view> |
|
||||||
<view class="progress"> |
|
||||||
<van-progress |
|
||||||
percentage="{{percentage}}" |
|
||||||
show-pivot="{{false}}" |
|
||||||
stroke-width="{{8}}" |
|
||||||
track-color="#F4F7FA" |
|
||||||
color="#3795F7" |
|
||||||
/> |
|
||||||
</view> |
|
||||||
<view class="content">{{questionItem.title}}</view> |
|
||||||
<view |
|
||||||
class="btn {{questionItem.answer==='1' && 'active'}}" |
|
||||||
bind:tap="handleBtn" |
|
||||||
data-id="1" |
|
||||||
data-index="{{index}}" |
|
||||||
> |
|
||||||
{{answerList[index][0]}} |
|
||||||
</view> |
|
||||||
<view |
|
||||||
class="btn {{questionItem.answer==='2' && 'active'}}" |
|
||||||
bind:tap="handleBtn" |
|
||||||
data-id="2" |
|
||||||
data-index="{{index}}" |
|
||||||
> |
|
||||||
{{answerList[index][1]}} |
|
||||||
</view> |
|
||||||
<view |
|
||||||
class="btn {{questionItem.answer==='3' && 'active'}}" |
|
||||||
bind:tap="handleBtn" |
|
||||||
data-id="3" |
|
||||||
data-index="{{index}}" |
|
||||||
> |
|
||||||
{{answerList[index][2]}} |
|
||||||
</view> |
|
||||||
<view class="footer"> |
|
||||||
<view class="prev" bind:tap="handlePrev" wx:if="{{index>0}}"> |
|
||||||
<image class="icon" src="{{imageUrl}}icon-prev.png?t={{Timestamp}}"></image> |
|
||||||
上一题 |
|
||||||
</view> |
|
||||||
<view |
|
||||||
class="submit" |
|
||||||
wx:if="{{index === question.length-1 && question[question.length-1].answer}}" |
|
||||||
bind:tap="handleSubmit" |
|
||||||
> |
|
||||||
提交 |
|
||||||
</view> |
|
||||||
</view> |
|
||||||
</view> |
|
||||||
</swiper-item> |
|
||||||
<swiper-item></swiper-item> |
|
||||||
</swiper> |
|
||||||
<view class="end" wx:if="{{end}}"> |
|
||||||
<image class="badge" src="{{imageUrl}}topic-start-badge.png?t={{Timestamp}}"></image> |
|
||||||
<view class="title"> |
|
||||||
提交成功 |
|
||||||
<view></view> |
|
||||||
感谢您的参与! |
|
||||||
</view> |
|
||||||
<view class="content"> |
|
||||||
欢迎使用适中健康信息小程序,您将看到一个查有可依、科学性、体系化的健康信息世界,化零为整,随时查阅。 |
|
||||||
</view> |
|
||||||
<view class="codes"> |
|
||||||
<view class="c-item"> |
|
||||||
<image class="code" src="{{imageUrl}}topic-start-code1.png?t={{Timestamp}}" show-menu-by-longpress></image> |
|
||||||
<view class="name">关注公众号</view> |
|
||||||
</view> |
|
||||||
<view class="c-item"> |
|
||||||
<image class="code" src="{{imageUrl}}topic-start-code2.png?t={{Timestamp}}" show-menu-by-longpress></image> |
|
||||||
<view class="name">关注企微号</view> |
|
||||||
</view> |
|
||||||
</view> |
|
||||||
<view class="btn" bind:tap="handleEnd">现在体验</view> |
|
||||||
</view> |
|
||||||
</view> |
|
||||||
|
|
||||||
<van-popup show="{{ start }}" custom-style="background:transparent" round> |
|
||||||
<view class="start" style="background: url('{{imageUrl}}topic-start.png?t={{Timestamp}}') no-repeat center /100%;"> |
|
||||||
<view class="btn" bind:tap="handleStart">开始答题</view> |
|
||||||
</view> |
|
||||||
</van-popup> |
|
@ -1,7 +0,0 @@ |
|||||||
{ |
|
||||||
"navigationStyle": "default", |
|
||||||
"navigationBarTitleText": "个人信息", |
|
||||||
"usingComponents": { |
|
||||||
"uploadFile": "/components/uploadFile/index" |
|
||||||
} |
|
||||||
} |
|
@ -1,56 +0,0 @@ |
|||||||
page { |
|
||||||
background-color: #f3f4f5; |
|
||||||
} |
|
||||||
.page { |
|
||||||
padding: 32rpx; |
|
||||||
.container { |
|
||||||
border-radius: 16rpx; |
|
||||||
background-color: #fff; |
|
||||||
.row { |
|
||||||
padding: 36rpx 32rpx; |
|
||||||
display: flex; |
|
||||||
align-items: center; |
|
||||||
justify-content: space-between; |
|
||||||
border-bottom: 1px solid #f0f0f0; |
|
||||||
&:last-of-type { |
|
||||||
border: none; |
|
||||||
} |
|
||||||
&.small { |
|
||||||
padding: 24rpx 32rpx; |
|
||||||
} |
|
||||||
.label { |
|
||||||
font-size: 36rpx; |
|
||||||
color: #222222; |
|
||||||
} |
|
||||||
.wrap { |
|
||||||
flex: 1; |
|
||||||
display: flex; |
|
||||||
justify-content: flex-end; |
|
||||||
.avatar { |
|
||||||
position: relative; |
|
||||||
width: 100rpx; |
|
||||||
height: 100rpx; |
|
||||||
.a-img { |
|
||||||
width: 100rpx; |
|
||||||
height: 100rpx; |
|
||||||
border-radius: 50%; |
|
||||||
} |
|
||||||
.icon { |
|
||||||
position: absolute; |
|
||||||
bottom: 0; |
|
||||||
right: 0; |
|
||||||
width: 32rpx; |
|
||||||
height: 32rpx; |
|
||||||
} |
|
||||||
} |
|
||||||
.input { |
|
||||||
text-align: right; |
|
||||||
font-size: 36rpx; |
|
||||||
} |
|
||||||
.place-input { |
|
||||||
color: #babdc1; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
@ -1,59 +0,0 @@ |
|||||||
const app = getApp<IAppOption>(); |
|
||||||
|
|
||||||
Page({ |
|
||||||
data: { |
|
||||||
username: '', |
|
||||||
userInfo: {} as any, |
|
||||||
}, |
|
||||||
onLoad() { |
|
||||||
app.waitLogin().then(() => { |
|
||||||
app.getUserInfo(this); |
|
||||||
}); |
|
||||||
}, |
|
||||||
handleFile(e) { |
|
||||||
const avatar = e.detail.fileUrl; |
|
||||||
this.setData({ |
|
||||||
'userInfo.avatar': avatar, |
|
||||||
}); |
|
||||||
this.updateUserInfo(); |
|
||||||
}, |
|
||||||
handleInputBlur(e) { |
|
||||||
this.setData({ |
|
||||||
username: e.detail.value, |
|
||||||
}); |
|
||||||
}, |
|
||||||
handleInputBlurPass(e) { |
|
||||||
if (e.detail.pass) { |
|
||||||
this.setData({ |
|
||||||
[`userInfo.username`]: this.data.username, |
|
||||||
}); |
|
||||||
this.updateUserInfo(); |
|
||||||
} |
|
||||||
}, |
|
||||||
updateUserInfo() { |
|
||||||
const { avatar, username } = this.data.userInfo; |
|
||||||
if (!username) { |
|
||||||
wx.showToast({ |
|
||||||
title: '请输入用户名', |
|
||||||
icon: 'none', |
|
||||||
}); |
|
||||||
return; |
|
||||||
} |
|
||||||
wx.ajax({ |
|
||||||
method: 'POST', |
|
||||||
url: '?r=shizhong/account/update-info', |
|
||||||
data: { |
|
||||||
userName: username, |
|
||||||
avatar, |
|
||||||
}, |
|
||||||
}).then(() => { |
|
||||||
app.getUserInfo(this); |
|
||||||
wx.showToast({ |
|
||||||
title: '保存成功', |
|
||||||
icon: 'none', |
|
||||||
}); |
|
||||||
}); |
|
||||||
}, |
|
||||||
}); |
|
||||||
|
|
||||||
export {}; |
|
@ -1,42 +0,0 @@ |
|||||||
<view class="page"> |
|
||||||
<view class="container"> |
|
||||||
<view class="row small"> |
|
||||||
<view class="label">头像</view> |
|
||||||
<view class="wrap"> |
|
||||||
<uploadFile |
|
||||||
class="avatar" |
|
||||||
chooseAvatar |
|
||||||
data-key="Img" |
|
||||||
bind:file="handleFile" |
|
||||||
> |
|
||||||
<image |
|
||||||
wx:if="{{userInfo.avatar}}" |
|
||||||
class="a-img" |
|
||||||
src="{{userInfo.avatar}}" |
|
||||||
></image> |
|
||||||
<image |
|
||||||
wx:else |
|
||||||
class="a-img" |
|
||||||
src="{{imageUrl}}user.png?t={{Timestamp}}" |
|
||||||
></image> |
|
||||||
<image class="icon" src="{{imageUrl}}icon-pic.png?t={{Timestamp}}"></image> |
|
||||||
</uploadFile> |
|
||||||
</view> |
|
||||||
</view> |
|
||||||
<view class="row"> |
|
||||||
<view class="label">昵称</view> |
|
||||||
<view class="wrap"> |
|
||||||
<input |
|
||||||
class="input" |
|
||||||
type="nickname" |
|
||||||
value="{{userInfo.username}}" |
|
||||||
placeholder-class="place-input" |
|
||||||
placeholder="请输入昵称" |
|
||||||
data-key="username" |
|
||||||
bindblur="handleInputBlur" |
|
||||||
bindnicknamereview="handleInputBlurPass" |
|
||||||
></input> |
|
||||||
</view> |
|
||||||
</view> |
|
||||||
</view> |
|
||||||
</view> |
|