feat: migrate static pages to native tabbar
This commit is contained in:
50
packages/tcm/pages/bianzheng/index.js
Normal file
50
packages/tcm/pages/bianzheng/index.js
Normal 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
|
||||
}
|
||||
5
packages/tcm/pages/bianzheng/index.json
Normal file
5
packages/tcm/pages/bianzheng/index.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"navigationBarTitleText": "辨证分析",
|
||||
"navigationBarBackgroundColor": "#f8ecd8",
|
||||
"navigationBarTextStyle": "black"
|
||||
}
|
||||
30
packages/tcm/pages/bianzheng/index.wxml
Normal file
30
packages/tcm/pages/bianzheng/index.wxml
Normal 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>
|
||||
120
packages/tcm/pages/bianzheng/index.wxss
Normal file
120
packages/tcm/pages/bianzheng/index.wxss
Normal 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;
|
||||
}
|
||||
Reference in New Issue
Block a user