diagnosis.wxml 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. <view class="diagnosis-page">
  2. <view class="ai-banner">
  3. <view class="ai-banner-tag">AI生成</view>
  4. <view class="ai-banner-text">本评估由人工智能(AI)生成,分析结果仅供健康参考,不能替代专业健康顾问的建议。</view>
  5. </view>
  6. <view class="topbar">
  7. <view class="user-switch" bindtap="openUserPopup">
  8. <text class="user-name">{{currentUser ? currentUser.nickName : '请选择成员'}}</text>
  9. <text class="user-meta" wx:if="{{currentUser}}">{{currentUser.sex == 1 ? '女' : '男'}} · {{currentUser.height || '--'}}cm</text>
  10. </view>
  11. <view class="record-btn" bindtap="viewRecords">评估记录</view>
  12. </view>
  13. <view wx:if="{{currentUser}}" class="user-detail-card">
  14. <view class="user-detail-title">成员信息</view>
  15. <view class="user-detail-tags" wx:if="{{currentUser.detailTags && currentUser.detailTags.length}}">
  16. <view class="user-detail-tag" wx:for="{{currentUser.detailTags}}" wx:key="index" wx:for-item="tag">{{tag}}</view>
  17. </view>
  18. <view wx:else class="user-detail-empty">当前成员尚未补充国家、人种、职业信息,建议完善后再评估。</view>
  19. </view>
  20. <view wx:if="{{currentStep == 0}}" class="step-page">
  21. <view class="tips-card">
  22. <view class="tips-title">{{photoTipsTitle}}</view>
  23. <view class="tips-item" wx:for="{{photoTips}}" wx:key="index">{{item}}</view>
  24. </view>
  25. <view class="upload-card" wx:for="{{uploadCards}}" wx:key="key">
  26. <view class="upload-content">
  27. <view class="upload-info">
  28. <view class="upload-title"><text class="required-mark" wx:if="{{item.required}}">*</text>{{item.title}}</view>
  29. <view class="upload-desc">{{item.desc}}</view>
  30. <view class="example-link" wx:if="{{item.key != 'body'}}" bindtap="openExample" data-kind="{{item.key}}" data-title="{{item.title}}">查看示例</view>
  31. </view>
  32. <view class="upload-box {{item.url ? 'done' : ''}}" bindtap="chooseImageSource" data-kind="{{item.key}}">
  33. <image wx:if="{{item.localPath}}" class="upload-image" src="{{item.localPath}}" mode="aspectFill" data-src="{{item.localPath}}" catchtap="previewCurrentImage"></image>
  34. <view wx:else class="upload-empty">
  35. <view class="upload-icon">+</view>
  36. <view class="upload-text">{{item.uploading ? '上传中' : '点击上传'}}</view>
  37. </view>
  38. <view wx:if="{{item.uploading}}" class="upload-mask">上传中</view>
  39. </view>
  40. </view>
  41. </view>
  42. </view>
  43. <view wx:if="{{currentStep == 1}}" class="step-page question-page">
  44. <view class="step-indicator">
  45. <view class="step-item active">
  46. <view class="step-dot">1</view>
  47. <view class="step-label">照片上传</view>
  48. </view>
  49. <view class="step-line active"></view>
  50. <view class="step-item active">
  51. <view class="step-dot">2</view>
  52. <view class="step-label">健康问答</view>
  53. </view>
  54. <view class="step-line"></view>
  55. <view class="step-item">
  56. <view class="step-dot pending">3</view>
  57. <view class="step-label pending">生成报告</view>
  58. </view>
  59. </view>
  60. <view wx:if="{{loadingQuestions}}" class="loading-box">健康问答题目加载中...</view>
  61. <block wx:else>
  62. <view class="question-card" wx:for="{{questionList}}" wx:key="key" wx:for-index="qIndex">
  63. <view class="question-head">
  64. <view class="question-title"><text class="required-mark" wx:if="{{item.required}}">*</text>{{item.title}}</view>
  65. <view class="question-mode">{{item.multiSelect ? '多选' : '单选'}}</view>
  66. </view>
  67. <view class="question-hint" wx:if="{{item.hint}}">{{item.hint}}</view>
  68. <view class="question-option {{opt.selected ? 'selected' : ''}} {{opt.disabled ? 'disabled' : ''}}" wx:for="{{item.options}}" wx:key="value" wx:for-item="opt" wx:for-index="oIndex" data-qindex="{{qIndex}}" data-oindex="{{oIndex}}" bindtap="toggleOption">
  69. <view class="option-label">{{opt.label}}</view>
  70. <view class="option-desc" wx:if="{{opt.description}}">{{opt.description}}</view>
  71. </view>
  72. <textarea wx:if="{{item.showCustomInput}}" class="custom-input" placeholder="请补充您的情况" data-qindex="{{qIndex}}" bindinput="updateCustomText" value="{{item.customText}}"></textarea>
  73. <view class="selected-text" wx:if="{{item.customText}}">{{item.customText}}</view>
  74. </view>
  75. <view class="question-card">
  76. <view class="question-title">补充说明</view>
  77. <textarea class="custom-input note-input" placeholder="可补充睡眠、饮食、近期状态等信息(选填)" bindinput="updateExtraNote" value="{{extraNote}}"></textarea>
  78. </view>
  79. </block>
  80. </view>
  81. <view class="bottom-action">
  82. <view wx:if="{{currentStep == 0}}" class="action-btn" bindtap="goQuestionsStep">下一步:健康问答</view>
  83. <view wx:if="{{currentStep == 1}}" class="action-group">
  84. <view class="secondary-btn" bindtap="goBackStep">返回上一步</view>
  85. <view class="action-btn submit {{submitting ? 'disabled-btn' : ''}}" bindtap="submitExam">{{submitting ? '提交中...' : '提交并生成报告'}}</view>
  86. </view>
  87. </view>
  88. <view class="mask" wx:if="{{showUserPopup}}" bindtap="closeUserPopup">
  89. <view class="popup user-popup" catchtap="noop">
  90. <view class="popup-title">选择成员</view>
  91. <view class="user-item {{currentUser && currentUser.ID == item.ID ? 'current-user' : ''}}" wx:for="{{scaleUsers}}" wx:key="ID" data-user="{{item}}" bindtap="selectUser">
  92. <view class="user-item-main">
  93. <view class="user-item-name">{{item.nickName}}</view>
  94. <view class="user-item-meta">{{item.sex == 1 ? '女' : '男'}} · {{item.height || '--'}}cm</view>
  95. <view class="user-item-tags" wx:if="{{item.detailTags && item.detailTags.length}}">
  96. <view class="user-item-tag" wx:for="{{item.detailTags}}" wx:key="index" wx:for-item="tag">{{tag}}</view>
  97. </view>
  98. </view>
  99. <view class="user-actions">
  100. <view class="user-action-btn" catchtap="editUser" data-user="{{item}}">编辑</view>
  101. <view class="user-action-btn danger" catchtap="deleteUser" data-user="{{item}}">删除</view>
  102. <view class="user-check">{{currentUser && currentUser.ID == item.ID ? '已选' : '选择'}}</view>
  103. </view>
  104. </view>
  105. <view class="popup-add-btn" bindtap="goUserForm">添加新用户</view>
  106. </view>
  107. </view>
  108. <view class="mask" wx:if="{{showExamplePopup}}" bindtap="closeExample">
  109. <view class="popup example-popup" catchtap="noop">
  110. <view class="popup-title">{{exampleTitle}}示例</view>
  111. <image wx:if="{{exampleImage}}" class="example-image" src="{{exampleImage}}" mode="aspectFit"></image>
  112. <view class="example-hint">请尽量按照示例角度、光线和构图上传照片。</view>
  113. </view>
  114. </view>
  115. </view>