Files
wxapp_escort/pages/escort/recorddetail.wxss
T
2026-10-07 14:55:06 +08:00

719 lines
16 KiB
Plaintext
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.
/* pages/escort/recorddetail.wxss
设计方向:本页是一张陪诊订单的详情,按「状态抬头 → 就诊人 → 医院预约 → 需求与症状 → 服务与费用 → 订单」铺开。
- 配色并入全站暖橙体系(doc/DESIGN.md):令牌来自 app.wxss,本页不留副本;
状态色只用 §三 四档,旧版渐变横幅与金色体系全部移除
- 抬头:短横色标 + 状态胶囊 + 状态说明,是唯一的非卡片区(内页规范,不做整块主色面板);
下方用 2rpx --line 通栏发丝线收口,靠字号两档差(32 胶囊 / 26 说明)与留白立住,不套第二套容器
- 分区:标题在纸面上(8×32rpx 单竖条),内容统一收进同一种白卡
(§2.3:2rpx --line + 中性阴影 --shadow-card;圆角本页取 24rpx 为例外,见下方 .card 注释)
- 展示去表单化:不铺「标签左/值右」清单行,层级由结构给出——
就诊人用首字牌、医院预约用预约时间条、费用用字号差;元信息一律竖线分隔行
- 编辑全部收进底部弹窗:页面只读,表单只活在弹窗里
- 按钮:底栏与弹窗的主操作实心胶囊、其余空心胶囊,同类实心块全页只保留一处(§2.1)
- 字号阶梯:40 首字牌 / 32 分节标题 · 卡片主名 · 金额 · 状态胶囊 / 28 服务名 · 备注正文 · 预约日期
/ 26 次强 · 「修改」入口 · 预约时段 · 订单号 / 24 元信息 · 已支付 · 支付指引,最小 24rpx(12px) */
page {
background-color: var(--paper);
/* 底栏上向阴影:小偏移、小模糊,令牌不在全局色板内,故本页登记 */
--shadow-bar: 0 -2rpx 8rpx rgba(63, 43, 25, 0.06);
}
.page-bg {
min-height: 100vh;
background: var(--paper);
}
.container {
padding: 0 32rpx 40rpx;
}
/* ===== 抬头状态 ===== */
.page-header {
/* 抬头自成一区,靠空间 + 一条线立住,不引入第二套容器语言:
上方留白 40rpx(比卡间距 48rpx 略紧,让抬头贴住顶栏而非浮在中间);
左右负 margin 抵消 .container 的 32rpx 内距,使下方发丝线通栏顶到屏幕两侧,
同时用 padding 把色标与胶囊重新拉回卡片同一条左对齐线 */
margin: 0 -32rpx;
padding: 40rpx 32rpx 28rpx;
border-bottom: 2rpx solid var(--line);
}
.header-accent {
width: 64rpx;
height: 8rpx;
border-radius: 4rpx;
background: var(--brand-strong);
}
.status-row {
margin-top: 22rpx;
display: flex;
align-items: center;
}
/* 状态胶囊:底色 + 描边 + 字色三件套,颜色只做强化,文字才是信息(§三) */
.status-chip {
display: inline-flex;
align-items: center;
padding: 6rpx 18rpx;
border: 2rpx solid transparent;
border-radius: 12rpx;
font-size: 24rpx;
font-weight: 700;
letter-spacing: 1rpx;
line-height: 1.4;
white-space: nowrap;
}
.status-chip-lg {
padding: 8rpx 22rpx;
/* 28rpx 抬到 32rpx:与分节标题、卡片主名同档。
同字号下胶囊靠状态底色 + 2rpx 描边 + 内距压过裸字标题,
层级才回到「单据抬头 > 卡片标题」,不再是从前抬头比它统领的内容还小 */
font-size: 32rpx;
}
.header-subtitle {
margin-left: 20rpx;
/* 28rpx 降到 26rpx:说明退到「次强」档,与 32rpx 的胶囊拉开一档差,
抬头内部才有焦点;此前两者同为 28rpx,只靠字重区分,谁都不是主角 */
font-size: 26rpx;
color: var(--muted);
line-height: 1.6;
letter-spacing: 1rpx;
}
/* ===== 分区:纸面留白分隔,标题在纸面上、内容在白卡里 ===== */
.section {
margin-top: 48rpx;
}
.section-head {
display: flex;
align-items: center;
}
.section-bar {
flex-shrink: 0;
width: 8rpx;
/* 色标高度跟随标题字号,缩字号时同步收,保持「短横 + 标题」的等高一档 */
height: 32rpx;
border-radius: 4rpx;
background: var(--brand-strong);
}
/* 34rpx 降一档到 32rpx:与 attendantdetail / agreement / about 的分区标题同一档,
不新增字号档位(DESIGN.md 字号阶梯) */
.section-title {
margin-left: 16rpx;
font-size: 32rpx;
font-weight: 700;
color: var(--ink);
letter-spacing: 1rpx;
}
/* 区块右侧入口:用 padding 撑热区、负 margin 抵消,保持标题行高度 */
.section-link {
display: flex;
align-items: center;
margin: -16rpx 0 -16rpx auto;
padding: 16rpx 0 16rpx 24rpx;
}
.section-link:active {
opacity: 0.6;
}
/* 「修改」降为中性字:全页三处入口若都用暖橙,会和所在行的标题抢注意力,
一个分组标题下不该有两个同权重焦点。入口靠位置(标题行右端)和热区成立,
不靠颜色——颜色留给底栏主按钮 */
.section-link-text {
margin-right: 4rpx;
/* 26rpx 与图标同档:入口降为中性的同时留一点体量,
避免和卡片正文(26rpx)拉开层级后又退到看不清 */
font-size: 26rpx;
color: var(--muted);
}
/* ===== 白卡:全页唯一的容器语言(§2.3 主规则) =====
2rpx --line 发丝边、中性阴影 --shadow-card;
卡内首尾留白由卡片自己的 padding 给。
本页例外(已登记):圆角取 24rpx 而非 §2.3 的 28rpx——
与卡内首字牌(24rpx)同档,圆角家族内部不倒挂;
注意全站其余九页的白卡仍是 28rpx,从订单列表切进本页时卡片会略方一点 */
.card {
box-sizing: border-box;
margin-top: 16rpx;
padding: 20rpx 24rpx;
background: var(--white);
border: 2rpx solid var(--line);
border-radius: 24rpx;
box-shadow: var(--shadow-card);
}
/* ===== 通用元信息行:竖线分隔,空值已在 JS 整项剔除 ===== */
.meta-list {
display: flex;
align-items: center;
flex-wrap: wrap;
}
.meta-item {
font-size: 24rpx;
color: var(--muted);
letter-spacing: 1rpx;
line-height: 1.6;
}
/* 元信息竖线:2rpx×20rpx,取 --sep(比 --line 深一档,白卡与纸面上都看得见) */
.meta-sep {
flex-shrink: 0;
width: 2rpx;
height: 20rpx;
margin: 0 14rpx;
background: var(--sep);
}
/* ===== 就诊人卡:首字牌 + 元信息行 + 发丝线下的拨打动作 ===== */
.patient-head {
display: flex;
align-items: center;
}
/* 首字牌:浅橙衬底 + --brand-line 描边,与陪诊师列表的兜底头像同源 */
.patient-mark {
box-sizing: border-box;
flex-shrink: 0;
display: flex;
align-items: center;
justify-content: center;
width: 88rpx;
height: 88rpx;
border: 2rpx solid var(--brand-line);
border-radius: 24rpx;
background: var(--brand-soft);
}
.patient-mark-text {
font-size: 40rpx;
font-weight: 700;
color: var(--brand-ink);
letter-spacing: 1rpx;
}
/* 首字牌右侧纵列:姓名 / 体征元信息 / 证件号自上而下 */
.patient-info {
flex: 1;
min-width: 0;
margin-left: 20rpx;
}
/* 姓名 32rpx/700:低于区块标题 34rpx 一档,不与标题争层级 */
.patient-name {
font-size: 32rpx;
font-weight: 700;
color: var(--ink);
letter-spacing: 1rpx;
}
.patient-meta-row {
margin-top: 10rpx;
}
/* 身份证 18 位,折行而不是撑破卡片 */
.patient-id {
display: block;
margin-top: 8rpx;
font-size: 24rpx;
color: var(--muted);
letter-spacing: 1rpx;
word-break: break-all;
}
/* 发丝线之上是「是谁」,之下是「怎么联系」;整行即热区 */
.patient-contact {
display: flex;
align-items: center;
margin-top: 22rpx;
padding-top: 20rpx;
border-top: 2rpx solid var(--line);
}
.patient-contact-text {
margin-left: 10rpx;
font-size: 28rpx;
font-weight: 700;
color: var(--brand-ink);
letter-spacing: 1rpx;
}
.patient-contact:active {
opacity: 0.6;
}
/* ===== 医院预约卡:日历牌是全卡视觉锚点 ===== */
.hospital-head {
display: flex;
align-items: baseline;
justify-content: space-between;
}
.hospital-name {
flex: 1;
min-width: 0;
font-size: 32rpx;
font-weight: 700;
color: var(--ink);
letter-spacing: 1rpx;
line-height: 1.4;
}
.hospital-name.is-empty {
font-weight: 400;
color: var(--muted);
}
.hospital-province {
margin-left: 20rpx;
font-size: 24rpx;
color: var(--muted);
letter-spacing: 1rpx;
line-height: 1.4;
white-space: nowrap;
}
.hospital-meta {
margin-top: 12rpx;
}
.hospital-address {
display: block;
margin-top: 10rpx;
font-size: 24rpx;
color: var(--muted);
letter-spacing: 1rpx;
line-height: 1.5;
}
/* 预约时间条:发丝线之上是「去哪看」,之下是「什么时候看」——日期左、时段右 */
.schedule-row {
display: flex;
align-items: baseline;
justify-content: space-between;
margin-top: 22rpx;
padding-top: 20rpx;
border-top: 2rpx solid var(--line);
}
.schedule-date {
flex: 1;
min-width: 0;
font-size: 28rpx;
font-weight: 700;
color: var(--ink);
letter-spacing: 1rpx;
}
.schedule-date.is-empty {
font-weight: 400;
color: var(--muted);
}
.schedule-time {
margin-left: 20rpx;
font-size: 26rpx;
font-weight: 700;
color: var(--brand-ink);
letter-spacing: 1rpx;
white-space: nowrap;
}
/* ===== 服务与费用卡:金额是全卡唯一的大字号焦点 ===== */
.service-head {
display: flex;
align-items: center;
justify-content: space-between;
}
.service-name {
font-size: 28rpx;
font-weight: 700;
color: var(--ink);
letter-spacing: 1rpx;
}
.service-meta {
margin-top: 10rpx;
}
.fee-row {
display: flex;
align-items: baseline;
justify-content: space-between;
margin-top: 18rpx;
padding-top: 18rpx;
border-top: 2rpx solid var(--line);
}
.fee-main {
display: flex;
align-items: baseline;
}
.fee-label {
font-size: 26rpx;
color: var(--muted);
}
.fee-amount {
margin-left: 16rpx;
/* 34rpx 降一档到 32rpx,与分区标题同一档,不新增字号档位;
仍明显高于标签(26rpx)与「已支付」(24rpx),保住金额在卡内的大字号焦点地位 */
font-size: 32rpx;
font-weight: 700;
color: var(--brand-strong);
letter-spacing: 1rpx;
}
.fee-paid {
font-size: 24rpx;
color: var(--muted);
letter-spacing: 1rpx;
}
/* 未付清时的出口指引:与元信息同一档(24rpx / --muted),只做说明不做按钮——
付款动作发生在客服侧,本页给不出可点的东西,硬做描边按钮会是空动作 */
.pay-hint {
display: block;
margin-top: 12rpx;
font-size: 24rpx;
color: var(--muted);
letter-spacing: 1rpx;
line-height: 1.6;
}
/* ===== 订单卡:编号为主,时间收进元信息行 ===== */
.order-no {
display: block;
font-size: 26rpx;
color: var(--ink-2);
letter-spacing: 1rpx;
word-break: break-all;
}
.order-meta {
margin-top: 10rpx;
}
/* ===== 备注(只读文本块) ===== */
.note-block {
margin-top: 18rpx;
}
.note-block:first-child {
margin-top: 4rpx;
}
.note-label {
display: block;
margin-bottom: 6rpx;
font-size: 24rpx;
color: var(--muted);
}
.note-text {
display: block;
font-size: 28rpx;
color: var(--ink-2);
line-height: 1.7;
letter-spacing: 1rpx;
}
.note-empty {
padding: 6rpx 0;
}
.note-empty-text {
font-size: 28rpx;
color: var(--muted);
}
/* ===== 表单行:只活在编辑弹窗里 =====
行结构仍是「标签左、值右、发丝线分隔」,但它是弹窗内的输入语境,不是页面展示语言 */
.form-row {
display: flex;
align-items: center;
justify-content: space-between;
min-height: 72rpx;
padding: 12rpx 0;
border-bottom: 2rpx solid var(--line);
}
.form-row:last-child {
border-bottom: none;
}
.form-label {
flex-shrink: 0;
font-size: 26rpx;
color: var(--muted);
}
.form-input {
flex: 1;
min-width: 0;
margin-left: 24rpx;
font-size: 28rpx;
color: var(--ink);
text-align: right;
}
.form-picker {
flex: 1;
min-width: 0;
margin-left: 24rpx;
}
.form-picker-value {
font-size: 28rpx;
color: var(--ink);
text-align: right;
}
.note-textarea {
box-sizing: border-box;
width: 100%;
min-height: 200rpx;
padding: 24rpx;
border: 2rpx solid var(--line);
border-radius: 16rpx;
background: var(--paper);
font-size: 28rpx;
color: var(--ink-2);
line-height: 1.7;
}
.input-placeholder {
color: var(--muted);
}
/* ===== 底部占位与操作栏 ===== */
.bottom-placeholder {
height: 160rpx;
}
.bottom-bar {
position: fixed;
left: 0;
right: 0;
bottom: 0;
z-index: 100;
display: flex;
align-items: center;
gap: 16rpx;
padding: 20rpx 32rpx;
padding-bottom: calc(20rpx + env(safe-area-inset-bottom));
background: var(--white);
border-top: 2rpx solid var(--line);
box-shadow: var(--shadow-bar);
}
/* 按钮等宽铺满:与同页弹窗脚(.popup-btn 的 flex:1)同一套排布,
热区也更大;单个按钮时即整条通栏主操作 */
.action-btn {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
padding: 18rpx 44rpx;
border-radius: 999rpx;
font-size: 30rpx;
line-height: 1.4;
}
.action-btn:active {
opacity: 0.7;
}
.action-ghost {
border: 3rpx solid var(--sep);
color: var(--muted);
background: transparent;
}
/* 破坏性动作:只换字色为状态色「已取消」档(#B4231A 已在色板内,不新增色相),
与并排的取消订单区分开——删除不可恢复,确认弹窗也已走同色 */
.action-danger {
color: #B4231A;
}
.action-primary {
background: var(--brand-strong);
color: var(--white);
font-weight: 700;
box-shadow: var(--shadow-cta);
}
/* ===== 底部弹窗(编辑与取消共用一套骨架) ===== */
.popup-mask {
position: fixed;
left: 0;
right: 0;
top: 0;
bottom: 0;
z-index: 200;
background: rgba(43, 37, 33, 0.45);
opacity: 0;
visibility: hidden;
transition: opacity 0.3s ease, visibility 0.3s ease;
}
.popup-mask.show {
opacity: 1;
visibility: visible;
}
.popup-content {
position: fixed;
left: 0;
right: 0;
bottom: 0;
z-index: 201;
display: flex;
flex-direction: column;
max-height: 70vh;
background: var(--white);
border-radius: 32rpx 32rpx 0 0;
transform: translateY(100%);
transition: transform 0.3s ease-out;
}
/* 医院预约编辑有 9 行表单,弹窗加高 */
.popup-content.popup-tall {
max-height: 86vh;
}
.popup-content.show {
transform: translateY(0);
}
.popup-header {
display: flex;
align-items: center;
justify-content: space-between;
flex-shrink: 0;
padding: 28rpx 32rpx;
border-bottom: 2rpx solid var(--line);
}
.popup-title {
font-size: 32rpx;
font-weight: 700;
color: var(--ink);
}
.popup-close {
padding: 8rpx;
margin: -8rpx;
}
.popup-close:active {
opacity: 0.5;
}
.popup-body {
flex: 1;
overflow-y: auto;
padding: 20rpx 32rpx 28rpx;
}
/* ===== 取消订单弹窗内的原因单选 ===== */
.cancel-tip {
font-size: 28rpx;
color: var(--muted);
line-height: 1.6;
}
.cancel-reason-list {
display: flex;
flex-direction: column;
margin-top: 8rpx;
}
.cancel-reason-item {
display: flex;
align-items: center;
padding: 20rpx 16rpx;
border-radius: 16rpx;
transition: background-color 0.15s ease;
}
.cancel-reason-item.active {
background: var(--brand-soft);
}
.reason-radio {
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
box-sizing: border-box;
width: 36rpx;
height: 36rpx;
border: 3rpx solid var(--sep);
border-radius: 50%;
}
.cancel-reason-item.active .reason-radio {
border-color: var(--brand-strong);
}
.reason-radio-inner {
width: 18rpx;
height: 18rpx;
border-radius: 50%;
background: var(--brand-strong);
}
.reason-text {
margin-left: 16rpx;
font-size: 28rpx;
color: var(--ink-2);
}
.popup-footer {
display: flex;
gap: 16rpx;
flex-shrink: 0;
padding: 20rpx 32rpx;
padding-bottom: calc(20rpx + env(safe-area-inset-bottom));
border-top: 2rpx solid var(--line);
}
.popup-btn {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
padding: 22rpx 0;
border-radius: 999rpx;
font-size: 30rpx;
line-height: 1.4;
}
.popup-btn:active {
opacity: 0.7;
}
.popup-btn-ghost {
border: 3rpx solid var(--sep);
color: var(--muted);
}
.popup-btn-primary {
background: var(--brand-strong);
color: var(--white);
font-weight: 700;
}