2025-09-16 16:19:29 +08:00

171 lines
3.8 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="page">
<!-- 顶部导航 -->
<view class="nav">
<view class="back" @click="onBack">
<uni-icons type="left" color="#8B2316" size="24"></uni-icons>
</view>
<view class="title">群发消息</view>
<view class="right"></view>
</view>
<!-- 时间展示 -->
<view class="time-row">{{ currentTime }}</view>
<!-- 卡片区域 -->
<view class="card">
<view class="card-header">
<text class="label">{{ patientCount }}位患者</text>
<view class="close" @click="onClear">
<text>×</text>
</view>
</view>
<view class="card-body">
<view class="line">{{ patientName }}</view>
<view class="line phone">{{ patientPhone }}</view>
</view>
<view class="card-footer">
<view class="btn-outline" @click="onResend">再发一条</view>
</view>
</view>
<!-- 占位滚动区域 -->
<view class="spacer" />
<!-- 底部按钮 -->
<view class="bottom-bar">
<view class="btn-primary" @click="onSendGroup">群发消息</view>
</view>
</view>
</template>
<script setup>
import { ref, onMounted } from 'vue'
const currentTime = ref('')
const patientCount = ref(1)
const patientName = ref('测试')
const patientPhone = ref('155555555')
const pad = (n) => (n < 10 ? `0${n}` : `${n}`)
const updateTime = () => {
const d = new Date()
currentTime.value = `${d.getFullYear()}-${pad(d.getMonth()+1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`
}
onMounted(() => {
updateTime()
// 每秒刷新一次时间(如不需要可删除)
setInterval(updateTime, 1000)
})
const onBack = () => {
uni.navigateBack()
}
const onClear = () => {
// 清空选择的患者(占位)
patientCount.value = 0
patientName.value = ''
patientPhone.value = ''
}
const onResend = () => {
uni.showToast({ title: '已触发再发一条', icon: 'none' })
}
const onSendGroup = () => {
uni.showToast({ title: '已触发群发', icon: 'none' })
}
</script>
<style lang="scss" scoped>
$page-bg: #f5f5f5;
$brand: #8B2316;
$brand-deep: #8B2316;
$primary: #00cbc0;
$red: #D32F2F;
.page {
background: $page-bg;
min-height: 100vh;
position: relative;
}
.nav {
height: 88rpx;
padding: 0 24rpx;
display: flex;
align-items: center;
background: #fff;
box-shadow: 0 2rpx 8rpx rgba(0,0,0,0.05);
.back { width: 80rpx; display: flex; align-items: center; }
.title { flex: 1; text-align: center; font-size: 34rpx; color: $red; font-weight: 600; }
.right { width: 80rpx; }
}
.time-row {
text-align: center;
font-size: 32rpx;
padding: 32rpx 0;
color: #333;
background: #fff;
}
.card {
margin: 24rpx;
background: #fff;
border-radius: 16rpx;
box-shadow: 0 4rpx 16rpx rgba(0,0,0,0.06);
overflow: hidden;
.card-header {
position: relative;
padding: 28rpx 28rpx 12rpx 28rpx;
.border { height: 2rpx; background: #eee; }
.label { font-size: 32rpx; color: #333; }
.close {
position: absolute;
right: 0;
top: 0;
width: 100rpx;
height: 100rpx;
border-bottom-left-radius: 100rpx;
background: #8B2316;
display: flex; align-items: center; justify-content: center;
text { color: #fff; font-size: 40rpx; font-weight: 500; }
}
}
.card-body {
padding: 20rpx 28rpx 8rpx 28rpx;
.line { font-size: 32rpx; color: #333; padding: 16rpx 0; }
.phone { font-size: 36rpx; }
}
.card-footer {
display: flex;
justify-content: flex-end;
padding: 16rpx 28rpx 28rpx 28rpx;
.btn-outline {
border: 2rpx solid $red;
color: $red;
padding: 10rpx 24rpx;
border-radius: 28rpx;
font-size: 28rpx;
}
}
}
.spacer { height: 200rpx; }
.bottom-bar {
position: fixed;
left: 0; right: 0; bottom: 0;
background: #00cbc0;
height: 100rpx;
display: flex;
align-items: center;
justify-content: center;
.btn-primary {
color: #fff;
font-size: 34rpx;
font-weight: 600;
}
}
</style>