feat: migrate static pages to native tabbar

This commit is contained in:
2026-04-23 21:25:24 +08:00
parent f3cd0c3a98
commit cd30f57f2c
116 changed files with 7143 additions and 311 deletions

View File

@@ -0,0 +1,50 @@
const { resolveScene } = require('../../../../utils/static-ux/shared')
const { ROUTES, openStaticRoute } = require('../../../../utils/static-ux/route-map')
function createTcmBianzhengPageData(rawScene) {
const scene = resolveScene(rawScene, ['default', 'result'], 'default')
return {
title: '辨证分析',
scene,
eyebrow: 'AI 辨证分析',
intro: '把症状整理成结构化输入,再输出学习型辨证结果。',
fields: [
{ key: 'mainSymptoms', label: '核心症状', placeholder: '主要症状,用逗号分隔' },
{ key: 'tongue', label: '舌象', placeholder: '舌象' },
{ key: 'pulse', label: '脉象', placeholder: '脉象' },
{ key: 'constitution', label: '体质', placeholder: '体质' },
{ key: 'duration', label: '病程', placeholder: '病程' }
],
result:
scene === 'result'
? {
title: '学习型辨证结果',
summary: '当前静态结果以“脾虚湿困”为例,用于承接老页面的信息层级和结果区块。',
references: ['《素问》重视脾胃运化', '症见困倦乏力、纳呆便溏可作为学习型线索']
}
: null,
primaryActionText: scene === 'result' ? '重新整理症状' : '提交辨证分析',
secondaryActionText: '返回 AI'
}
}
Page({
data: createTcmBianzhengPageData('default'),
onLoad(options) {
this.setData(createTcmBianzhengPageData(options.scene))
},
handlePrimaryTap() {
this.setData(createTcmBianzhengPageData(this.data.scene === 'result' ? 'default' : 'result'))
},
handleSecondaryTap() {
openStaticRoute(ROUTES.tabs.ai, wx)
}
})
module.exports = {
createTcmBianzhengPageData
}

View File

@@ -0,0 +1,5 @@
{
"navigationBarTitleText": "辨证分析",
"navigationBarBackgroundColor": "#f8ecd8",
"navigationBarTextStyle": "black"
}

View File

@@ -0,0 +1,30 @@
<view class="bianzheng-page">
<view class="hero-card">
<text class="hero-card__eyebrow">{{eyebrow}}</text>
<text class="hero-card__title">{{title}}</text>
<text class="hero-card__description">{{intro}}</text>
</view>
<view class="form-card">
<view class="field-block" wx:for="{{fields}}" wx:key="key">
<text class="field-block__label">{{item.label}}</text>
<input class="field-block__input" placeholder="{{item.placeholder}}" disabled="{{true}}" />
</view>
<view class="form-card__actions">
<view class="form-card__button" bindtap="handlePrimaryTap">{{primaryActionText}}</view>
<view class="form-card__button form-card__button--ghost" bindtap="handleSecondaryTap">
{{secondaryActionText}}
</view>
</view>
</view>
<view wx:if="{{result}}" class="result-card">
<text class="result-card__title">{{result.title}}</text>
<text class="result-card__summary">{{result.summary}}</text>
<view class="result-card__reference" wx:for="{{result.references}}" wx:key="index">
<text class="result-card__reference-dot">·</text>
<text class="result-card__reference-text">{{item}}</text>
</view>
</view>
</view>

View File

@@ -0,0 +1,120 @@
page {
min-height: 100%;
background: linear-gradient(180deg, #faf3e8 0%, #f1e9dd 100%);
}
.bianzheng-page {
box-sizing: border-box;
min-height: 100vh;
padding: 28rpx 20rpx 72rpx;
}
.hero-card,
.form-card,
.result-card {
margin-top: 18rpx;
padding: 26rpx;
border: 1rpx solid rgba(118, 83, 42, 0.08);
border-radius: 32rpx;
background: rgba(255, 250, 242, 0.92);
box-shadow: 0 18rpx 42rpx rgba(86, 58, 25, 0.08);
}
.hero-card {
margin-top: 0;
}
.hero-card__eyebrow {
display: inline-block;
padding: 8rpx 14rpx;
border-radius: 999rpx;
background: rgba(111, 66, 22, 0.08);
color: #6f4216;
font-size: 22rpx;
line-height: 1;
}
.hero-card__title,
.result-card__title {
display: block;
margin-top: 18rpx;
color: #2c2419;
font-family: 'STSong', 'Songti SC', serif;
font-size: 38rpx;
font-weight: 700;
line-height: 1.3;
}
.hero-card__description,
.result-card__summary,
.result-card__reference-text {
display: block;
margin-top: 12rpx;
color: #7c705e;
font-size: 26rpx;
line-height: 1.75;
}
.field-block {
margin-top: 16rpx;
}
.field-block:first-child {
margin-top: 0;
}
.field-block__label {
display: block;
color: #6f4b2d;
font-size: 24rpx;
line-height: 1.5;
}
.field-block__input {
box-sizing: border-box;
width: 100%;
margin-top: 10rpx;
padding: 18rpx 20rpx;
border: 1rpx solid rgba(199, 171, 133, 0.5);
border-radius: 22rpx;
background: rgba(255, 254, 250, 0.92);
color: #8f6842;
font-size: 26rpx;
line-height: 1.5;
}
.form-card__actions {
margin-top: 22rpx;
}
.form-card__button {
padding: 20rpx 24rpx;
border-radius: 24rpx;
background: linear-gradient(135deg, #9e652f 0%, #75441a 100%);
color: #fff7eb;
font-size: 28rpx;
line-height: 1;
text-align: center;
}
.form-card__button + .form-card__button {
margin-top: 12rpx;
}
.form-card__button--ghost {
background: rgba(111, 66, 22, 0.08);
color: #6f4216;
}
.result-card__reference {
display: flex;
align-items: flex-start;
margin-top: 10rpx;
}
.result-card__reference-dot {
margin-right: 10rpx;
color: #9a622d;
font-size: 28rpx;
line-height: 1.6;
}