Compare commits
10 Commits
| Author | SHA1 | Date |
|---|---|---|
|
|
957454fa40 | 8 hours ago |
|
|
3a3eecdfc5 | 10 hours ago |
|
|
2617836a4c | 11 hours ago |
|
|
5748cc3468 | 15 hours ago |
|
|
e5eeffffb7 | 2 days ago |
|
|
8e242c2227 | 2 days ago |
|
|
1d07555c45 | 2 days ago |
|
|
b554bc3bd8 | 3 days ago |
|
|
04e39b9eb0 | 3 days ago |
|
|
90eae5c44c | 3 days ago |
@ -1,6 +1,9 @@
@@ -1,6 +1,9 @@
|
||||
/* components/pagination/index.wxss */ |
||||
.pagination { |
||||
--divider-text-color: rgba(148, 163, 184, 1); |
||||
.none { |
||||
display: block; |
||||
margin: 30rpx auto; |
||||
width: 80%; |
||||
} |
||||
} |
||||
|
||||
@ -1,6 +1,8 @@
@@ -1,6 +1,8 @@
|
||||
<view class="pagination"> |
||||
<image class="none" src="{{imageUrl}}none.png" wx:if="{{pagination.count==0}}"></image> |
||||
<van-divider contentPosition="center" wx:elif="{{pagination.page<pagination.pages}}"> |
||||
<van-loading /> |
||||
加载中... |
||||
</van-divider> |
||||
<van-divider contentPosition="center" wx:elif="{{pagination.page>=pagination.pages}}">没有更多了</van-divider> |
||||
</view> |
||||
|
||||
|
After Width: | Height: | Size: 79 KiB |
|
After Width: | Height: | Size: 63 KiB |
|
After Width: | Height: | Size: 195 KiB |
|
After Width: | Height: | Size: 213 KiB |
|
After Width: | Height: | Size: 197 KiB |
|
After Width: | Height: | Size: 2.4 KiB |
|
After Width: | Height: | Size: 409 KiB |
|
After Width: | Height: | Size: 5.5 KiB |
|
After Width: | Height: | Size: 2.3 KiB |
|
After Width: | Height: | Size: 133 KiB |
|
After Width: | Height: | Size: 1.5 MiB |
|
After Width: | Height: | Size: 192 KiB |
|
After Width: | Height: | Size: 364 KiB |
|
Before Width: | Height: | Size: 291 KiB After Width: | Height: | Size: 792 KiB |
|
After Width: | Height: | Size: 3.3 MiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 356 B After Width: | Height: | Size: 567 B |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 2.5 KiB |
|
After Width: | Height: | Size: 750 B |
|
Before Width: | Height: | Size: 750 B After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 640 B |
|
Before Width: | Height: | Size: 700 B After Width: | Height: | Size: 910 B |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 615 B |
|
After Width: | Height: | Size: 684 B |
|
After Width: | Height: | Size: 660 B |
|
After Width: | Height: | Size: 841 B |
|
Before Width: | Height: | Size: 822 B After Width: | Height: | Size: 812 B |
|
Before Width: | Height: | Size: 815 B After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 500 B After Width: | Height: | Size: 717 B |
|
Before Width: | Height: | Size: 692 B After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 783 KiB |
|
Before Width: | Height: | Size: 791 B After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 18 KiB |
@ -0,0 +1,9 @@
@@ -0,0 +1,9 @@
|
||||
{ |
||||
"navigationStyle": "custom", |
||||
"usingComponents": { |
||||
"popup": "/components/popup/index", |
||||
"navbar": "/components/navbar/index", |
||||
"van-popup": "@vant/weapp/popup/index", |
||||
"van-icon": "@vant/weapp/icon/index" |
||||
} |
||||
} |
||||
@ -0,0 +1,355 @@
@@ -0,0 +1,355 @@
|
||||
page { |
||||
background-color: #f7fafc; |
||||
} |
||||
|
||||
.page-title { |
||||
font-size: 36rpx; |
||||
color: rgba(51, 51, 51, 1); |
||||
padding-right: 100rpx; |
||||
} |
||||
|
||||
.page { |
||||
padding-bottom: 260rpx; |
||||
.hero { |
||||
padding: 0 40rpx; |
||||
display: flex; |
||||
align-items: flex-start; |
||||
justify-content: space-between; |
||||
|
||||
.hero-text { |
||||
padding-top: 78rpx; |
||||
.hero-title1 { |
||||
display: block; |
||||
width: 233rpx; |
||||
} |
||||
|
||||
.hero-title2 { |
||||
margin-top: 20rpx; |
||||
display: block; |
||||
width: 353rpx; |
||||
height: 56rpx; |
||||
} |
||||
|
||||
.hero-sub { |
||||
margin-top: 24rpx; |
||||
font-size: 28rpx; |
||||
font-weight: 400; |
||||
color: #64748b; |
||||
line-height: 40rpx; |
||||
} |
||||
} |
||||
|
||||
.hero-decor { |
||||
margin-top: 48rpx; |
||||
width: 356rpx; |
||||
height: 356rpx; |
||||
flex-shrink: 0; |
||||
} |
||||
} |
||||
|
||||
.card { |
||||
margin: 30rpx; |
||||
padding: 0; |
||||
border-radius: 32rpx; |
||||
border: 2rpx solid #fff; |
||||
background: rgba(255, 255, 255, 0.7); |
||||
box-shadow: 0 8rpx 64rpx 0 rgba(0, 99, 132, 0.08); |
||||
backdrop-filter: blur(10rpx); |
||||
overflow: hidden; |
||||
} |
||||
|
||||
.step { |
||||
display: flex; |
||||
align-items: center; |
||||
gap: 24rpx; |
||||
padding: 24rpx 32rpx; |
||||
background: rgba(47, 130, 169, 0.08); |
||||
border: 2rpx solid #fff; |
||||
border-radius: 24rpx; |
||||
margin: 32rpx 32rpx 0; |
||||
|
||||
.step-badge { |
||||
width: 64rpx; |
||||
height: 64rpx; |
||||
border-radius: 50%; |
||||
background: linear-gradient(270deg, #439fc7 0%, #2f82a9 100%); |
||||
display: flex; |
||||
align-items: center; |
||||
justify-content: center; |
||||
color: #fff; |
||||
font-size: 29rpx; |
||||
font-weight: 700; |
||||
line-height: 44rpx; |
||||
flex-shrink: 0; |
||||
} |
||||
|
||||
.step-title { |
||||
font-size: 36rpx; |
||||
font-weight: 500; |
||||
color: #2f82a9; |
||||
line-height: 44rpx; |
||||
} |
||||
} |
||||
|
||||
.card-body { |
||||
padding: 48rpx 32rpx 54rpx; |
||||
|
||||
.card-desc { |
||||
padding-left: 12rpx; |
||||
width: 400rpx; |
||||
font-size: 28rpx; |
||||
color: #64748b; |
||||
line-height: 38rpx; |
||||
padding-right: 20rpx; |
||||
white-space: pre-line; |
||||
} |
||||
.upload-grid { |
||||
margin-top: 53rpx; |
||||
} |
||||
|
||||
.rejected { |
||||
margin-top: 24rpx; |
||||
padding: 16rpx 24rpx; |
||||
border-radius: 16rpx; |
||||
background: rgba(186, 26, 26, 0.08); |
||||
box-sizing: border-box; |
||||
font-size: 28rpx; |
||||
color: rgba(186, 26, 26, 1); |
||||
line-height: 40rpx; |
||||
display: flex; |
||||
.icon { |
||||
margin-top: 4rpx; |
||||
display: inline-block; |
||||
flex-shrink: 0; |
||||
margin-right: 16rpx; |
||||
width: 32rpx; |
||||
height: 32rpx; |
||||
vertical-align: -4rpx; |
||||
} |
||||
.blod { |
||||
display: inline-block; |
||||
font-weight: bold; |
||||
} |
||||
} |
||||
} |
||||
.upload-grid { |
||||
display: grid; |
||||
grid-template-columns: repeat(3, 1fr); |
||||
gap: 24rpx; |
||||
.upload-item { |
||||
aspect-ratio: 1 / 1; |
||||
.upload-empty { |
||||
width: 100%; |
||||
height: 100%; |
||||
border-radius: 24rpx; |
||||
background: #f7fafc; |
||||
border: 2rpx dashed rgba(148, 163, 184, 0.26); |
||||
display: flex; |
||||
flex-direction: column; |
||||
align-items: center; |
||||
justify-content: center; |
||||
gap: 16rpx; |
||||
box-sizing: border-box; |
||||
|
||||
.upload-icon { |
||||
width: 56rpx; |
||||
height: 56rpx; |
||||
} |
||||
|
||||
.upload-placeholder { |
||||
font-size: 28rpx; |
||||
color: rgba(148, 163, 184, 0.51); |
||||
} |
||||
} |
||||
.upload { |
||||
position: relative; |
||||
width: 100%; |
||||
height: 100%; |
||||
border-radius: 24rpx; |
||||
overflow: hidden; |
||||
.u-img { |
||||
display: block; |
||||
width: 100%; |
||||
height: 100%; |
||||
} |
||||
.mask { |
||||
position: absolute; |
||||
top: 0; |
||||
left: 0; |
||||
width: 100%; |
||||
height: 100%; |
||||
background-color: rgba(0, 0, 0, 0.29); |
||||
display: flex; |
||||
flex-direction: column; |
||||
align-items: center; |
||||
justify-content: center; |
||||
.icon { |
||||
width: 44rpx; |
||||
height: 44rpx; |
||||
} |
||||
.status { |
||||
margin-top: 12rpx; |
||||
font-size: 28rpx; |
||||
color: rgba(255, 255, 255, 1); |
||||
} |
||||
} |
||||
.del { |
||||
position: absolute; |
||||
right: 0; |
||||
top: 0; |
||||
width: 40rpx; |
||||
height: 40rpx; |
||||
z-index: 9; |
||||
background-color: rgba(4, 4, 4, 0.31); |
||||
border-radius: 0 16rpx; |
||||
color: #fff; |
||||
font-size: 28rpx; |
||||
display: flex; |
||||
align-items: center; |
||||
justify-content: center; |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
.card-body2 { |
||||
padding: 36rpx 32rpx 32rpx; |
||||
.c-item { |
||||
display: flex; |
||||
gap: 20rpx; |
||||
&.c-item2 { |
||||
margin-top: 50rpx; |
||||
} |
||||
.aside { |
||||
flex-shrink: 0; |
||||
display: flex; |
||||
flex-direction: column; |
||||
align-items: center; |
||||
gap: 16rpx; |
||||
padding-bottom: 23rpx; |
||||
.order { |
||||
width: 40rpx; |
||||
height: 40rpx; |
||||
border-radius: 50%; |
||||
font-size: 24rpx; |
||||
color: rgba(255, 255, 255, 1); |
||||
background: linear-gradient(270deg, #439fc7 0%, #2f82a9 100%); |
||||
display: flex; |
||||
align-items: center; |
||||
justify-content: center; |
||||
} |
||||
.line { |
||||
flex: 1; |
||||
border-right: 1px dashed rgba(47, 130, 169, 0.38); |
||||
} |
||||
} |
||||
.container { |
||||
flex: 1; |
||||
.title { |
||||
font-size: 32rpx; |
||||
color: rgba(30, 41, 59, 1); |
||||
font-weight: bold; |
||||
} |
||||
.content { |
||||
width: 338rpx; |
||||
margin-top: 12rpx; |
||||
font-size: 28rpx; |
||||
line-height: 40rpx; |
||||
color: rgba(100, 116, 139, 1); |
||||
.high { |
||||
display: inline; |
||||
color: rgba(47, 130, 169, 1); |
||||
} |
||||
} |
||||
.share { |
||||
margin-top: 24rpx; |
||||
display: flex; |
||||
align-items: center; |
||||
gap: 34rpx; |
||||
.share-img { |
||||
width: 212rpx; |
||||
height: 318rpx; |
||||
border-radius: 32rpx; |
||||
} |
||||
.btn { |
||||
padding: 8rpx 16rpx; |
||||
font-size: 32rpx; |
||||
color: rgba(47, 130, 169, 1); |
||||
line-height: 48rpx; |
||||
border-radius: 12rpx; |
||||
border: 1px solid rgba(47, 130, 169, 0.16); |
||||
box-sizing: border-box; |
||||
} |
||||
} |
||||
.upload-grid { |
||||
margin-top: 24rpx; |
||||
gap: 22rpx; |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
.consent { |
||||
margin: 32rpx 30rpx; |
||||
font-size: 26rpx; |
||||
color: rgba(148, 163, 184, 1); |
||||
line-height: 40rpx; |
||||
.check-content { |
||||
padding-top: 4rpx; |
||||
display: inline-block; |
||||
} |
||||
.wx-checkbox-input { |
||||
width: 32rpx; |
||||
height: 32rpx; |
||||
border-radius: 8rpx; |
||||
&.wx-checkbox-input-checked { |
||||
border-color: #fff !important; |
||||
background: linear-gradient(270deg, #439fc7 0%, #2f82a9 100%); |
||||
background-clip: border-box; |
||||
&::before { |
||||
font-size: 28rpx; |
||||
color: #fff; |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
.footer { |
||||
display: flex; |
||||
gap: 24rpx; |
||||
padding: 24rpx 30rpx calc(env(safe-area-inset-bottom) + 24rpx); |
||||
box-sizing: border-box; |
||||
|
||||
.btn { |
||||
flex: 1; |
||||
display: flex; |
||||
flex-direction: column; |
||||
align-items: center; |
||||
justify-content: center; |
||||
padding: 24rpx 0; |
||||
border-radius: 24rpx; |
||||
|
||||
.btn-title { |
||||
font-size: 32rpx; |
||||
font-weight: 700; |
||||
color: #fff; |
||||
line-height: 44rpx; |
||||
} |
||||
|
||||
.btn-sub { |
||||
font-size: 28rpx; |
||||
font-weight: 400; |
||||
color: #fff; |
||||
line-height: 40rpx; |
||||
} |
||||
} |
||||
|
||||
.btn-disabled { |
||||
background: rgba(148, 163, 184, 0.5); |
||||
} |
||||
|
||||
.btn-primary { |
||||
background: linear-gradient(270deg, #439fc7 0%, #2f82a9 100%); |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,139 @@
@@ -0,0 +1,139 @@
|
||||
type UploadStatus = 'reviewing' | 'approved' | 'rejected' |
||||
|
||||
interface UploadItem { |
||||
url: string |
||||
status: UploadStatus |
||||
rejectReason?: string |
||||
} |
||||
|
||||
const app = getApp<IAppOption>() |
||||
|
||||
Page({ |
||||
data: { |
||||
popupShow: false, |
||||
popupType: 'popup4', |
||||
popupParams: { |
||||
position: 'center', |
||||
close: true, |
||||
} as any, |
||||
|
||||
id: '', |
||||
detail: {} as any, |
||||
|
||||
// 上传列表(已上传项),null 表示空位待上传
|
||||
step1Slots: [null, null, null] as (UploadItem | null)[], |
||||
step2Slots: [null, null, null] as (UploadItem | null)[], |
||||
agreed: false, |
||||
}, |
||||
onLoad() {}, |
||||
onShow() {}, |
||||
handleBack() { |
||||
wx.navigateBack() |
||||
}, |
||||
|
||||
// 选择并上传图片
|
||||
handleChooseMedia(e: any) { |
||||
const { step, index } = e.currentTarget.dataset |
||||
const key = step === 1 ? 'step1Slots' : 'step2Slots' |
||||
const slots = [...this.data[key]] |
||||
|
||||
wx.chooseMedia({ |
||||
count: 1, |
||||
mediaType: ['image'], |
||||
sourceType: ['album', 'camera'], |
||||
sizeType: ['original', 'compressed'], |
||||
success: (res) => { |
||||
const tempFile = res.tempFiles[0] |
||||
this.uploadImage(tempFile.tempFilePath, key, index, slots) |
||||
}, |
||||
}) |
||||
}, |
||||
|
||||
// 上传图片到服务器
|
||||
uploadImage(filePath: string, key: string, index: number, slots: (UploadItem | null)[]) { |
||||
wx.showLoading({ title: '正在上传' }) |
||||
const url = `${app.globalData.upFileUrl}?r=file-service/upload-img` |
||||
wx.uploadFile({ |
||||
filePath, |
||||
name: 'file', |
||||
url, |
||||
success: (res) => { |
||||
const data = JSON.parse(res.data) |
||||
const imgUrl = data.data.Url |
||||
// 新上传默认为审核中状态
|
||||
slots[index] = { url: imgUrl, status: 'reviewing' } |
||||
this.setData({ [key]: [...slots] }) |
||||
}, |
||||
fail: () => { |
||||
wx.showToast({ title: '上传失败', icon: 'error' }) |
||||
}, |
||||
complete: () => { |
||||
wx.hideLoading() |
||||
}, |
||||
}) |
||||
}, |
||||
|
||||
// 预览图片
|
||||
handlePreviewImage(e: any) { |
||||
const { step, index } = e.currentTarget.dataset |
||||
const key = step === 1 ? 'step1Slots' : 'step2Slots' |
||||
const slots = this.data[key] as (UploadItem | null)[] |
||||
const urls = slots.filter((item): item is UploadItem => !!item).map((item) => item.url) |
||||
wx.previewImage({ current: urls[index] || urls[0], urls }) |
||||
}, |
||||
|
||||
// 删除上传项(仅审核中、驳回可删)
|
||||
handleDeleteUpload(e: any) { |
||||
const { step, index } = e.currentTarget.dataset |
||||
const key = step === 1 ? 'step1Slots' : 'step2Slots' |
||||
const slots = [...this.data[key]] |
||||
slots[index] = null |
||||
this.setData({ [key]: [...slots] }) |
||||
}, |
||||
|
||||
toggleAgree() { |
||||
this.setData({ agreed: !this.data.agreed }) |
||||
}, |
||||
|
||||
handleDownloadPoster() { |
||||
wx.showToast({ title: '海报下载开发中', icon: 'none' }) |
||||
}, |
||||
|
||||
// 获取已上传(非驳回)的图片 URL 列表
|
||||
getValidImages(slots: (UploadItem | null)[]): string[] { |
||||
return slots |
||||
.filter((item): item is UploadItem => !!item && item.status !== 'rejected') |
||||
.map((item) => item.url) |
||||
}, |
||||
|
||||
handleStep1Submit() { |
||||
const { step1Slots, agreed } = this.data |
||||
const validImages = this.getValidImages(step1Slots as (UploadItem | null)[]) |
||||
if (!validImages.length) { |
||||
wx.showToast({ title: '请先上传病例', icon: 'none' }) |
||||
return |
||||
} |
||||
if (!agreed) { |
||||
wx.showToast({ title: '请先勾选确认', icon: 'none' }) |
||||
return |
||||
} |
||||
wx.showToast({ title: '提交开发中', icon: 'none' }) |
||||
}, |
||||
|
||||
handleAllSubmit() { |
||||
const { step1Slots, step2Slots, agreed } = this.data |
||||
const valid1 = this.getValidImages(step1Slots as (UploadItem | null)[]) |
||||
const valid2 = this.getValidImages(step2Slots as (UploadItem | null)[]) |
||||
if (!valid1.length || !valid2.length) { |
||||
wx.showToast({ title: '请完成全部任务', icon: 'none' }) |
||||
return |
||||
} |
||||
if (!agreed) { |
||||
wx.showToast({ title: '请先勾选确认', icon: 'none' }) |
||||
return |
||||
} |
||||
wx.showToast({ title: '提交开发中', icon: 'none' }) |
||||
}, |
||||
}) |
||||
|
||||
export {} |
||||
@ -0,0 +1,144 @@
@@ -0,0 +1,144 @@
|
||||
<navbar fixed custom-style="background:{{background}}" back> |
||||
<view class="page-title" slot="left" bind:tap="handleBack"> |
||||
<van-icon name="arrow-left" /> |
||||
</view> |
||||
</navbar> |
||||
|
||||
<view |
||||
class="page" |
||||
style="background: url('{{imageUrl}}bg6.png?t={{Timestamp}}') no-repeat top center/100% 478rpx;padding-top: {{pageTop}}px;" |
||||
> |
||||
<view class="hero"> |
||||
<view class="hero-text"> |
||||
<image class="hero-title1" mode="widthFix" src="{{imageUrl}}title1.png?t={{Timestamp}}"></image> |
||||
<image class="hero-title2" mode="widthFix" src="{{imageUrl}}title2.png?t={{Timestamp}}"></image> |
||||
<view class="hero-sub"> |
||||
上传病例并完成任务,领取 |
||||
<view></view> |
||||
安心随行礼包 |
||||
</view> |
||||
</view> |
||||
<image class="hero-decor" src="{{imageUrl}}bg19.png?t={{Timestamp}}" mode="aspectFill"></image> |
||||
</view> |
||||
|
||||
<view class="card" style="background: url('{{imageUrl}}bg18.png?t={{Timestamp}}') no-repeat top 100rpx right -53rpx/385rpx 355rpx"> |
||||
<view class="step"> |
||||
<view class="step-badge">1</view> |
||||
<view class="step-title">上传病例,获得随行小礼</view> |
||||
</view> |
||||
<view class="card-body"> |
||||
<view class="card-desc">上传您的病例即可获得专属随行小礼哦~病历,诊断证明,心电图照片 任意一项</view> |
||||
<view class="upload-grid"> |
||||
<view class="upload-item" wx:for="{{step1Slots}}" wx:key="index" data-step="1" data-index="{{index}}"> |
||||
<view class="upload-empty" bind:tap="handleChooseMedia" data-step="1" data-index="{{index}}" wx:if="{{item}}"> |
||||
<image class="upload-icon" src="{{imageUrl}}icon44.png?t={{Timestamp}}" mode="aspectFit"></image> |
||||
<view class="upload-placeholder">待上传</view> |
||||
</view> |
||||
<view class="upload"> |
||||
<image class="u-img" src="{{imageUrl}}bg1.png?t={{Timestamp}}"></image> |
||||
<view class="mask"> |
||||
<image class="icon" src="{{imageUrl}}icon45.png?t={{Timestamp}}"></image> |
||||
<view class="status">审核中</view> |
||||
<!-- <image class="icon" src="{{imageUrl}}icon45.png?t={{Timestamp}}"></image> --> |
||||
<!-- <view class="status">驳回</view> --> |
||||
<!-- <image class="icon" src="{{imageUrl}}icon46.png?t={{Timestamp}}"></image> --> |
||||
<!-- <view class="status">审核通过</view> --> |
||||
</view> |
||||
<view class="del"> |
||||
<van-icon name="cross" /> |
||||
</view> |
||||
</view> |
||||
</view> |
||||
</view> |
||||
<view class="rejected"> |
||||
<image class="icon" src="{{imageUrl}}icon39.png?t={{Timestamp}}"></image> |
||||
<view> |
||||
<view class="blod">驳回原因:</view> |
||||
驳回原因:清上传病例、诊断证明心点图照片确诊信息 |
||||
</view> |
||||
</view> |
||||
</view> |
||||
</view> |
||||
|
||||
<view class="card"> |
||||
<view class="step"> |
||||
<view class="step-badge">2</view> |
||||
<view class="step-title">分享星动守护 解锁安心随行礼</view> |
||||
</view> |
||||
<view class="card-body2" style="background: url('{{imageUrl}}bg19.png?t={{Timestamp}}') no-repeat top 0 right 8rpx/252rpx 234rpx"> |
||||
<view class="c-item"> |
||||
<view class="aside"> |
||||
<view class="order">1</view> |
||||
<view class="line"></view> |
||||
</view> |
||||
<view class="container"> |
||||
<view class="title">发布到小红书</view> |
||||
<view class="content"> |
||||
推荐星动守护平台分享到小红书,带上话题: |
||||
<view class="high">#星动守护PSVT小助手</view> |
||||
</view> |
||||
<view class="share"> |
||||
<image class="share-img" mode="aspectFill" src="{{imageUrl}}share-img1.png?t={{Timestamp}}"></image> |
||||
<view class="btn">一键下载</view> |
||||
</view> |
||||
</view> |
||||
</view> |
||||
<view class="c-item c-item2"> |
||||
<view class="aside"> |
||||
<view class="order">2</view> |
||||
</view> |
||||
<view class="container"> |
||||
<view class="title">上传发布截图</view> |
||||
<view class="content">用于确认任务是否完成</view> |
||||
<view class="upload-grid"> |
||||
<view class="upload-item" wx:for="{{step1Slots}}" wx:key="index" data-step="1" data-index="{{index}}"> |
||||
<view |
||||
class="upload-empty" |
||||
bind:tap="handleChooseMedia" |
||||
data-step="1" |
||||
data-index="{{index}}" |
||||
wx:if="{{!item}}" |
||||
> |
||||
<image class="upload-icon" src="{{imageUrl}}icon44.png?t={{Timestamp}}" mode="aspectFit"></image> |
||||
<view class="upload-placeholder">待上传</view> |
||||
</view> |
||||
</view> |
||||
</view> |
||||
</view> |
||||
</view> |
||||
</view> |
||||
</view> |
||||
|
||||
<view class="consent"> |
||||
<checkbox class="check"> |
||||
<view class="check-content">我已确认上传内容真实有效,并同意用于活动资格审核。</view> |
||||
</checkbox> |
||||
</view> |
||||
|
||||
<view class="footer"> |
||||
<block wx:if="{{true}}"> |
||||
<view class="btn btn-disabled" bind:tap="handleStep1Submit"> |
||||
<view class="btn-title">完成第1步任务</view> |
||||
<view class="btn-sub">领取随心小礼></view> |
||||
</view> |
||||
<view class="btn btn-primary" bind:tap="handleAllSubmit"> |
||||
<view class="btn-title">完成全部任务</view> |
||||
<view class="btn-sub">领取随行大礼包></view> |
||||
</view> |
||||
</block> |
||||
<view class="btn btn-primary" wx:elif="{{false}}"> |
||||
<view class="btn-title">添加客服,获得审批结果></view> |
||||
</view> |
||||
<view class="btn btn-primary" wx:elif="{{false}}"> |
||||
<view class="btn-title">重新提交</view> |
||||
</view> |
||||
</view> |
||||
</view> |
||||
|
||||
<popup |
||||
show="{{popupShow}}" |
||||
type="{{popupType}}" |
||||
params="{{popupParams}}" |
||||
bind:ok="handlePopupOk" |
||||
bind:cancel="handlePopupCancel" |
||||
></popup> |
||||
@ -0,0 +1,7 @@
@@ -0,0 +1,7 @@
|
||||
{ |
||||
"navigationStyle": "custom", |
||||
"usingComponents": { |
||||
"navbar": "/components/navbar/index", |
||||
"van-icon": "@vant/weapp/icon/index" |
||||
} |
||||
} |
||||
@ -0,0 +1,155 @@
@@ -0,0 +1,155 @@
|
||||
page { |
||||
background-color: #f7fafc; |
||||
} |
||||
|
||||
.page-title { |
||||
font-size: 36rpx; |
||||
color: rgba(51, 51, 51, 1); |
||||
padding-right: 100rpx; |
||||
} |
||||
|
||||
.page { |
||||
position: relative; |
||||
min-height: 100vh; |
||||
padding-bottom: 60rpx; |
||||
} |
||||
|
||||
.bg-pattern { |
||||
position: absolute; |
||||
top: 0; |
||||
left: 0; |
||||
width: 100%; |
||||
height: 692rpx; |
||||
opacity: 0.68; |
||||
pointer-events: none; |
||||
} |
||||
|
||||
// 吉祥物区域 |
||||
.mascot-wrap { |
||||
display: flex; |
||||
flex-direction: column; |
||||
align-items: center; |
||||
margin-top: 32rpx; |
||||
position: relative; |
||||
} |
||||
|
||||
.greeting-bubble { |
||||
position: relative; |
||||
display: flex; |
||||
align-items: center; |
||||
justify-content: center; |
||||
width: 304rpx; |
||||
height: 98rpx; |
||||
|
||||
.greeting-bg { |
||||
position: absolute; |
||||
width: 100%; |
||||
height: 100%; |
||||
} |
||||
|
||||
.greeting-text { |
||||
position: relative; |
||||
z-index: 1; |
||||
font-size: 32rpx; |
||||
font-weight: 700; |
||||
color: #fff; |
||||
line-height: 48rpx; |
||||
} |
||||
} |
||||
|
||||
.mascot { |
||||
width: 302rpx; |
||||
height: 384rpx; |
||||
margin-top: 12rpx; |
||||
} |
||||
|
||||
// 信息卡片 |
||||
.info-card { |
||||
margin: 24rpx 30rpx 0; |
||||
padding: 32rpx; |
||||
background: #fff; |
||||
border-radius: 32rpx; |
||||
} |
||||
|
||||
.card-header { |
||||
display: flex; |
||||
align-items: center; |
||||
gap: 14rpx; |
||||
margin-bottom: 24rpx; |
||||
|
||||
.card-icon { |
||||
width: 40rpx; |
||||
height: 40rpx; |
||||
flex-shrink: 0; |
||||
} |
||||
|
||||
.card-title { |
||||
font-size: 32rpx; |
||||
font-weight: 700; |
||||
color: #2f82a9; |
||||
line-height: 48rpx; |
||||
} |
||||
} |
||||
|
||||
.card-desc { |
||||
font-size: 28rpx; |
||||
font-weight: 400; |
||||
color: #475569; |
||||
line-height: 48rpx; |
||||
} |
||||
|
||||
// 升级按钮 |
||||
.upgrade-btn { |
||||
margin: 48rpx auto 0; |
||||
display: flex; |
||||
flex-direction: column; |
||||
align-items: center; |
||||
justify-content: center; |
||||
width: 434rpx; |
||||
padding: 16rpx 0; |
||||
background: linear-gradient(270deg, #439fc7 0%, #2f82a9 100%); |
||||
border-radius: 32rpx; |
||||
|
||||
.upgrade-line1 { |
||||
font-size: 28rpx; |
||||
font-weight: 700; |
||||
color: #fff; |
||||
line-height: 42rpx; |
||||
} |
||||
|
||||
.upgrade-line2 { |
||||
font-size: 28rpx; |
||||
font-weight: 400; |
||||
color: #fff; |
||||
line-height: 42rpx; |
||||
} |
||||
} |
||||
|
||||
// 通知勾选 |
||||
.notify { |
||||
margin: 32rpx 30rpx; |
||||
font-size: 26rpx; |
||||
color: rgba(148, 163, 184, 1); |
||||
line-height: 40rpx; |
||||
display: flex; |
||||
align-items: center; |
||||
justify-content: center; |
||||
.check-content { |
||||
padding-top: 4rpx; |
||||
display: inline-block; |
||||
} |
||||
.wx-checkbox-input { |
||||
width: 32rpx; |
||||
height: 32rpx; |
||||
border-radius: 8rpx; |
||||
&.wx-checkbox-input-checked { |
||||
border-color: #fff !important; |
||||
background: linear-gradient(270deg, #439fc7 0%, #2f82a9 100%); |
||||
background-clip: border-box; |
||||
&::before { |
||||
font-size: 28rpx; |
||||
color: #fff; |
||||
} |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,25 @@
@@ -0,0 +1,25 @@
|
||||
Page({ |
||||
data: { |
||||
notifyChecked: false, |
||||
}, |
||||
onLoad() {}, |
||||
onShow() {}, |
||||
handleBack() { |
||||
wx.navigateBack() |
||||
}, |
||||
toggleNotify() { |
||||
const notifyChecked = !this.data.notifyChecked |
||||
this.setData({ notifyChecked }) |
||||
if (notifyChecked) { |
||||
wx.showToast({ title: '已开启上线通知', icon: 'none' }) |
||||
} |
||||
}, |
||||
handleNotify() { |
||||
if (!this.data.notifyChecked) { |
||||
this.setData({ notifyChecked: true }) |
||||
wx.showToast({ title: '已开启上线通知', icon: 'none' }) |
||||
} |
||||
}, |
||||
}) |
||||
|
||||
export {} |
||||
@ -0,0 +1,55 @@
@@ -0,0 +1,55 @@
|
||||
<navbar fixed custom-style="background:{{background}}" back> |
||||
<view class="page-title" slot="left" bind:tap="handleBack"> |
||||
<van-icon name="arrow-left" /> |
||||
</view> |
||||
</navbar> |
||||
|
||||
<view |
||||
class="page" |
||||
style="background: url('{{imageUrl}}bg6.png?t={{Timestamp}}') no-repeat top center/100% 478rpx;padding-top: {{pageTop}}px;" |
||||
> |
||||
<!-- 背景装饰 --> |
||||
<image class="bg-pattern" src="{{imageUrl}}chat/chat-bg.svg?t={{Timestamp}}" mode="aspectFill"></image> |
||||
|
||||
<!-- 吉祥物 + 问候气泡 --> |
||||
<view class="mascot-wrap"> |
||||
<view class="greeting-bubble"> |
||||
<image class="greeting-bg" src="{{imageUrl}}chat/chat-btn-bg.svg?t={{Timestamp}}" mode="aspectFill"></image> |
||||
<text class="greeting-text">Hello,我是小豚</text> |
||||
</view> |
||||
<image class="mascot" src="{{imageUrl}}chat/chat-mascot.png?t={{Timestamp}}" mode="aspectFill"></image> |
||||
</view> |
||||
|
||||
<!-- 卡片:我是谁 --> |
||||
<view class="info-card"> |
||||
<view class="card-header"> |
||||
<image class="card-icon" src="{{imageUrl}}chat/icon-who.svg?t={{Timestamp}}" mode="aspectFit"></image> |
||||
<text class="card-title">我是谁</text> |
||||
</view> |
||||
<view class="card-desc">hello,我是你的智能助手小豚,为你提供阵发性 室上速健康科普与慢病管理服务。</view> |
||||
</view> |
||||
|
||||
<!-- 卡片:我能干嘛 --> |
||||
<view class="info-card"> |
||||
<view class="card-header"> |
||||
<image class="card-icon" src="{{imageUrl}}chat/icon-what.svg?t={{Timestamp}}" mode="aspectFit"></image> |
||||
<text class="card-title">我能干嘛</text> |
||||
</view> |
||||
<view class="card-desc"> |
||||
作为阵发性室上速(PSVT)智能助手,我将为你 提供解答疾病问题、指导急性发作处理、提醒定 |
||||
期复诊等全周期健康管理服务,你有任何关于 PSVT的问题都可随时咨询我。往后日常生活里, |
||||
我将长久相伴,全程守护你的健康。 |
||||
</view> |
||||
</view> |
||||
|
||||
<!-- 升级中按钮 --> |
||||
<view class="upgrade-btn" bind:tap="handleNotify"> |
||||
<view class="upgrade-line1">我在努力学习升级中,</view> |
||||
<view class="upgrade-line2">很快就和您见面啦!</view> |
||||
</view> |
||||
|
||||
<!-- 上线通知勾选 --> |
||||
<view class="notify" bind:tap="toggleNotify"> |
||||
<checkbox class="check">上线时通知我</checkbox> |
||||
</view> |
||||
</view> |
||||