diff --git a/app.json b/app.json index 69bba56..df6bab4 100644 --- a/app.json +++ b/app.json @@ -4,6 +4,7 @@ "pages/ai/aichat", "pages/escort/itemdetail", "pages/escort/itemlist", + "pages/escort/attendantlist", "pages/escort/recordlist", "pages/escort/agreement", "pages/escort/recorddetail", diff --git a/custom-tab-bar/index.wxss b/custom-tab-bar/index.wxss index 4a6061d..ff1ef00 100644 --- a/custom-tab-bar/index.wxss +++ b/custom-tab-bar/index.wxss @@ -9,7 +9,8 @@ display: flex; padding: 12rpx 0 calc(12rpx + env(safe-area-inset-bottom)); background: #FFFFFF; - border-top: 2rpx solid #F0E9E0; + /* 与各页 --line 保持同一档(#ECE3D6):tabBar 是独立组件,读不到 page 上的 CSS 变量,只能硬编码 */ + border-top: 2rpx solid #ECE3D6; } .tab-item { diff --git a/pages/escort/attendantlist.js b/pages/escort/attendantlist.js new file mode 100644 index 0000000..3399086 --- /dev/null +++ b/pages/escort/attendantlist.js @@ -0,0 +1,62 @@ +const API = require('../../utils/api.js') + +// 陪诊师公示列表:数据来自后端公开接口 /health/attendant +// 该接口已做脱敏(不含手机号 / 身份证号 / 证书编号原文), +// 前端不再做二次裁剪,只把后端字段整形为展示所需结构 +Page({ + data: { + loading: true, + attendants: [] + }, + + onLoad() { + this.loadAttendants() + }, + + loadAttendants() { + API.escort.getAttendants() + .then((res) => { + if (res.code !== 0) { + this.setData({ loading: false }) + return + } + + const list = (res.data && res.data.attendants) || [] + this.setData({ + loading: false, + attendants: list.map((item) => { + const specialties = item.specialties || [] + const serviceAreas = item.serviceAreas || [] + const languages = item.languages || [] + + return { + id: item.id, + name: item.name, + avatar: item.avatar, + // 头像兜底用的首字:姓名已脱敏为「姓 + 陪诊师」,取第一个字即可 + initial: (item.name || '').slice(0, 1), + workYears: item.workYears || 0, + orderCount: item.orderCount || 0, + qualificationVerified: !!item.qualificationVerified, + // 擅长场景最多展示 3 个,避免长尾把卡片撑高 + specialtyTags: specialties.slice(0, 3), + // 数组在 WXML 里不能直接拼展示,这里先转成文本 + areaText: serviceAreas.join(' / '), + langText: languages.join(' / ') + } + }) + }) + }) + .catch((err) => { + console.log('获取陪诊师列表失败', err) + this.setData({ loading: false }) + }) + }, + + onShareAppMessage() { + return { + title: '暖橙陪诊 · 陪诊师团队', + path: '/pages/escort/attendantlist' + } + } +}) \ No newline at end of file diff --git a/pages/escort/attendantlist.json b/pages/escort/attendantlist.json new file mode 100644 index 0000000..83e920f --- /dev/null +++ b/pages/escort/attendantlist.json @@ -0,0 +1,6 @@ +{ + "navigationBarTitleText": "陪诊师团队", + "usingComponents": { + "t-icon": "tdesign-miniprogram/icon/icon" + } +} \ No newline at end of file diff --git a/pages/escort/attendantlist.wxml b/pages/escort/attendantlist.wxml new file mode 100644 index 0000000..cde52bb --- /dev/null +++ b/pages/escort/attendantlist.wxml @@ -0,0 +1,77 @@ + + + + + + + 陪诊师团队 + 每位都实名上岗,从业信息可核对 + + + + 加载中… + + + + 暂无陪诊师信息 + + + + + + + + + + {{ item.initial }} + + + + + {{ item.name }} + + + 资质已核验 + + + + 从业 {{ item.workYears }} 年 + + 已服务 {{ item.orderCount }} 次 + + + + + + + {{ tag }} + + + + + 服务区域 {{ item.areaText }} + + 语言 {{ item.langText }} + + + + + + + 以上为陪同人员信息公示,用于核对身份与从业信息,不含联系方式。 + + + + + \ No newline at end of file diff --git a/pages/escort/attendantlist.wxss b/pages/escort/attendantlist.wxss new file mode 100644 index 0000000..824aa30 --- /dev/null +++ b/pages/escort/attendantlist.wxss @@ -0,0 +1,229 @@ +/* pages/escort/attendantlist.wxss + 陪诊师公示页:与首页、陪诊指南页、联系我们页共用同一套暖橙 + 暖白令牌。 + 注意 CSS 变量定义在页面级 page{} 里,不是全局——新页面需要自带一份 */ +page { + --brand-strong: #C2410C; /* 实心块/按钮:白字 4.69:1,过 AA 正文 */ + --brand-soft: #FFF4E8; /* 图标衬底、标签底 */ + --brand-line: #FFE0C2; /* 浅橙衬底描边 */ + --brand-ink: #9A3412; /* 浅橙衬底上的文字/图标:6.8:1,过 AA */ + + --ink: #2B2521; + --ink-2: #4A4038; + --muted: #6F655C; /* 纸面 5.36:1 / 白卡 5.69:1,过 AA */ + --line: #ECE3D6; /* 米色发丝边:纸面 1.20:1 / 白卡 1.27:1 */ + --paper: #FAF8F5; /* 暖白纸面 */ + --white: #FFFFFF; + + --shadow-card: 0 2rpx 10rpx rgba(63, 43, 25, 0.07); + + background-color: var(--paper); +} + +.page-bg { + min-height: 100vh; + background: var(--paper); +} + +.container { + padding: 32rpx 32rpx 0; +} + +/* ===== 头部:小色带 + 深墨标题 ===== */ +.page-header { + padding: 24rpx 0 8rpx; +} + +.header-accent { + width: 64rpx; + height: 8rpx; + border-radius: 4rpx; + background: var(--brand-strong); +} + +.header-title { + display: block; + margin-top: 20rpx; + font-size: 46rpx; + font-weight: 700; + color: var(--ink); + letter-spacing: 1rpx; +} + +.header-subtitle { + display: block; + margin-top: 12rpx; + font-size: 26rpx; + color: var(--muted); + letter-spacing: 1rpx; +} + +/* ===== 加载 / 空状态 ===== */ +.state { + padding: 120rpx 0; + text-align: center; +} + +.state-text { + font-size: 26rpx; + color: var(--muted); +} + +/* ===== 陪诊师卡片:发丝边 + 紧阴影,与首页白卡同语言 ===== */ +.list { + display: flex; + flex-direction: column; + margin-top: 32rpx; +} + +.staff-card { + padding: 28rpx 26rpx; + border-radius: 28rpx; + background: var(--white); + border: 2rpx solid var(--line); + box-shadow: var(--shadow-card); +} + +.staff-card + .staff-card { + margin-top: 24rpx; +} + +.staff-head { + display: flex; + align-items: center; +} + +.staff-avatar { + width: 96rpx; + height: 96rpx; + border-radius: 24rpx; + flex-shrink: 0; +} + +/* 无头像兜底:浅橙衬底 + 姓氏首字。 + box-sizing 必须显式声明,否则 2rpx 描边会把 96rpx 撑成 100rpx */ +.staff-avatar-fallback { + display: flex; + align-items: center; + justify-content: center; + box-sizing: border-box; + background: var(--brand-soft); + border: 2rpx solid var(--brand-line); +} + +.staff-avatar-text { + font-size: 36rpx; + font-weight: 700; + color: var(--brand-ink); +} + +.staff-main { + /* min-width: 0 让长内容可收缩,避免把右侧徽标挤出行外 */ + flex: 1; + min-width: 0; + margin-left: 20rpx; +} + +.staff-name-row { + display: flex; + align-items: center; +} + +.staff-name { + font-size: 32rpx; + font-weight: 700; + color: var(--ink); + letter-spacing: 1rpx; +} + +/* 资质徽标:浅橙衬底 + 暖橙图标,不引入新的色相 */ +.staff-badge { + display: flex; + align-items: center; + flex-shrink: 0; + margin-left: 14rpx; + padding: 4rpx 12rpx; + border-radius: 8rpx; + background: var(--brand-soft); + border: 2rpx solid var(--brand-line); +} + +.staff-badge-text { + margin-left: 4rpx; + /* 中文最小 24rpx(12px),低于此不达可读下限 */ + font-size: 24rpx; + color: var(--brand-ink); +} + +.staff-meta { + display: flex; + align-items: center; + margin-top: 10rpx; +} + +.staff-meta-text { + font-size: 24rpx; + color: var(--muted); +} + +/* 竖分隔线:与场景行、页脚同一档 #E5DACC, + 比 --line 深一档,保证在浅橙底与白卡上都看得见 */ +.meta-sep { + width: 2rpx; + height: 20rpx; + flex-shrink: 0; + margin: 0 14rpx; + background: #E5DACC; +} + +/* ===== 擅长场景标签 ===== */ +.staff-tags { + display: flex; + flex-wrap: wrap; + margin-top: 20rpx; +} + +.staff-tag { + margin: 0 12rpx 12rpx 0; + padding: 6rpx 14rpx; + border-radius: 8rpx; + background: var(--brand-soft); + border: 2rpx solid var(--brand-line); + font-size: 24rpx; + color: var(--brand-ink); +} + +/* ===== 服务区域 / 语言 ===== */ +.staff-area { + display: flex; + align-items: center; + padding-top: 16rpx; + border-top: 2rpx solid var(--line); +} + +.staff-area-text { + font-size: 24rpx; + color: var(--muted); +} + +.area-sep { + width: 2rpx; + height: 20rpx; + flex-shrink: 0; + margin: 0 14rpx; + background: #E5DACC; +} + +/* ===== 底部说明 ===== */ +.notice { + margin-top: 32rpx; +} + +.notice-text { + font-size: 24rpx; + line-height: 1.6; + color: var(--muted); +} + +.footer-space { + height: 48rpx; +} \ No newline at end of file diff --git a/pages/escort/guide.wxss b/pages/escort/guide.wxss index d04059a..b2cfa5d 100644 --- a/pages/escort/guide.wxss +++ b/pages/escort/guide.wxss @@ -9,12 +9,14 @@ page { --ink: #2B2521; --ink-2: #4A4038; - --muted: #7A7068; /* 白底 4.8:1,过 AA 正文 */ - --line: #F0E9E0; /* 米色发丝边 */ - --paper: #FAF6F0; /* 暖白纸面 */ + --muted: #6F655C; /* 与首页同一档。原 #7A7068 在白卡上 4.8:1 达标, + 但 .header-subtitle 直接落在纸面上只有 4.49:1,不过 AA。 + 改后:纸面 5.36:1 / 白卡 5.69:1 */ + --line: #ECE3D6; /* 米色发丝边:纸面 1.20:1 / 白卡 1.27:1 */ + --paper: #FAF8F5; /* 暖白纸面:R−B 由 10 降到 5,去掉"旧纸"的黄闷感 */ --white: #FFFFFF; - --shadow-card: 0 2rpx 10rpx rgba(63, 43, 25, 0.04); + --shadow-card: 0 2rpx 10rpx rgba(63, 43, 25, 0.07); background-color: var(--paper); } diff --git a/pages/home/index.js b/pages/home/index.js index 2cb93eb..2da757c 100644 --- a/pages/home/index.js +++ b/pages/home/index.js @@ -159,6 +159,13 @@ Page({ }); }, + // 介绍卡信任行:「实名专业陪诊师」→ 陪诊师公示页 + goToAttendants() { + wx.navigateTo({ + url: '/pages/escort/attendantlist' + }); + }, + // 点击陪诊服务,直达服务详情下单 goToServiceDetail(e) { const id = e.currentTarget.dataset.id diff --git a/pages/home/index.wxml b/pages/home/index.wxml index 375e9b3..195f852 100644 --- a/pages/home/index.wxml +++ b/pages/home/index.wxml @@ -83,7 +83,13 @@ - 实名专业陪诊师 + + + 实名专业陪诊师 + + 熟悉医院流程 diff --git a/pages/home/index.wxss b/pages/home/index.wxss index 2843307..f2b3bd2 100644 --- a/pages/home/index.wxss +++ b/pages/home/index.wxss @@ -26,11 +26,20 @@ page { --muted: #6F655C; /* 纸面(--paper) 5.28:1 / 白卡 5.69:1,过 AA 正文。 原 #7A7068 在白卡上 4.83:1 达标,但落在暖白纸面上只有 4.49:1,压线不过 */ --faint: #A79C92; /* 仅用于非文字装饰 */ - --line: #F0E9E0; /* 米色发丝边 */ - --paper: #FAF6F0; /* 暖白纸面 */ + --line: #ECE3D6; /* 米色发丝边。原 #F0E9E0 落在纸面上只有 1.12:1,等于"看得见但看不清", + 而白卡与纸面的填充差本身只有 1.08:1——边界全靠这条边,它必须站得住。 + 压深一档后:纸面 1.20:1 / 白卡 1.27:1 */ + --paper: #FAF8F5; /* 暖白纸面。原 #FAF6F0 的 R−B=10,黄度偏重,大面积铺开会被读成 + "旧纸/发闷"而不是"暖白干净"(感知亮度受色饱和度影响, + 同明度下越黄越显沉)。压到 R−B=5,黄度减半, + 明度反而略升(L* 97.0 → 97.7),暖白身份保留 */ --white: #FFFFFF; - --shadow-card: 0 2rpx 10rpx rgba(63, 43, 25, 0.04); + /* 紧阴影:偏移与模糊半径不变(仍是"小偏移、小模糊"的锐利档),只提不透明度。 + 原因:上面的纸面去黄后,白卡与纸面的填充差从 1.08:1 降到 1.06:1, + 卡片需要阴影来补回"浮在纸面上"的层级,否则整页更平。 + 0.04 时阴影几乎不可见,提到 0.07 后边缘压深约等于那道填充差本身 */ + --shadow-card: 0 2rpx 10rpx rgba(63, 43, 25, 0.07); /* 彩色阴影原为 0 6rpx 16rpx/22%:全页只有它与品牌印记两处彩色阴影,且都在首屏, 是首屏显重的主要来源,也与"小偏移、小模糊"的锐利阴影偏好相悖,故收小一档 */ --shadow-cta: 0 2rpx 8rpx rgba(194, 65, 12, 0.16); @@ -236,6 +245,24 @@ page { flex-shrink: 0; } +/* 信任行里唯一的可点项:「实名专业陪诊师」→ 陪诊师公示页。 + 用 padding 16rpx 把热区撑到 56rpx(28px),再配等量负外边距抵消, + 信任行的行高与另两项保持完全不变 */ +.intro-trust-link { + display: flex; + align-items: center; + padding: 16rpx 0; + margin: -16rpx 0; +} + +.intro-trust-link:active { + opacity: 0.6; +} + +.intro-trust-link .intro-trust-item { + margin-right: 4rpx; +} + /* ===== 通用区块 ===== */ .section { margin-top: 56rpx; diff --git a/pages/mine/contact.wxss b/pages/mine/contact.wxss index a1196b0..b1b0163 100644 --- a/pages/mine/contact.wxss +++ b/pages/mine/contact.wxss @@ -7,12 +7,14 @@ page { --brand-ink: #9A3412; /* 浅橙衬底上的文字/图标:6.8:1,过 AA */ --ink: #2B2521; - --muted: #7A7068; /* 白底 4.8:1,过 AA 正文 */ - --line: #F0E9E0; /* 米色发丝边 */ - --paper: #FAF6F0; /* 暖白纸面 */ + --muted: #6F655C; /* 与首页同一档。原 #7A7068 在白卡上 4.8:1 达标, + 但 .header-subtitle 直接落在纸面上只有 4.49:1,不过 AA。 + 改后:纸面 5.36:1 / 白卡 5.69:1 */ + --line: #ECE3D6; /* 米色发丝边:纸面 1.20:1 / 白卡 1.27:1 */ + --paper: #FAF8F5; /* 暖白纸面:R−B 由 10 降到 5,去掉"旧纸"的黄闷感 */ --white: #FFFFFF; - --shadow-card: 0 2rpx 10rpx rgba(63, 43, 25, 0.04); + --shadow-card: 0 2rpx 10rpx rgba(63, 43, 25, 0.07); background-color: var(--paper); } diff --git a/utils/api.js b/utils/api.js index 0af6121..7986686 100644 --- a/utils/api.js +++ b/utils/api.js @@ -16,6 +16,8 @@ const API = { updateRecord: (id, data) => request.put(`/health/escort-record/${id}`, data), updateStatus: (id, data) => request.patch(`/health/escort-record/${id}/status`, data), deleteRecord: (id) => request.delete(`/health/escort-record/${id}`), + // 陪诊师公示列表(公开接口,后端已做脱敏) + getAttendants: (params) => request.get('/health/attendant', params), }, // 健康档案(就诊人):后端强制以 token 中的用户为准,无需传 userId