与牧同行-小程序用户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

485 lines
8.5 KiB

  1. .diagnosis-container {
  2. min-height: 100vh;
  3. width: 100%;
  4. display: flex;
  5. flex-direction: column;
  6. background: linear-gradient(180deg, #f8fafc 0%, #f0f9ff 100%);
  7. }
  8. /* 顶部功能选择 */
  9. .nav-right {
  10. position: absolute;
  11. right: 30rpx;
  12. top: 30rpx;
  13. }
  14. .more-btn {
  15. width: 64rpx;
  16. height: 64rpx;
  17. border-radius: 50%;
  18. background:#86D8D0;
  19. display: flex;
  20. align-items: center;
  21. justify-content: center;
  22. color: white;
  23. font-size: 36rpx;
  24. font-weight: bold;
  25. }
  26. /* 医生信息卡片 */
  27. .doctor-card {
  28. background: white;
  29. margin: 24rpx 32rpx;
  30. padding: 32rpx;
  31. border-radius: 20rpx;
  32. display: flex;
  33. align-items: center;
  34. box-shadow: 0 8rpx 24rpx rgba(0, 0, 0, 0.06);
  35. position: relative;
  36. }
  37. .doctor-avatar {
  38. width: 120rpx;
  39. height: 120rpx;
  40. border-radius: 50%;
  41. background: linear-gradient(135deg, #86D8D0 0%, #A8E6CF 100%);
  42. display: flex;
  43. align-items: center;
  44. justify-content: center;
  45. margin-right: 24rpx;
  46. overflow: hidden;
  47. }
  48. .avatar-img {
  49. width: 100rpx;
  50. height: 100rpx;
  51. }
  52. .doctor-info {
  53. flex: 1;
  54. }
  55. .doctor-name {
  56. display: block;
  57. font-size: 32rpx;
  58. font-weight: 600;
  59. color: #333;
  60. margin-bottom: 8rpx;
  61. }
  62. .doctor-title {
  63. display: block;
  64. font-size: 24rpx;
  65. color: #86D8D0;
  66. margin-bottom: 16rpx;
  67. }
  68. .doctor-tags {
  69. display: flex;
  70. gap: 12rpx;
  71. }
  72. .tag {
  73. font-size: 20rpx;
  74. padding: 6rpx 12rpx;
  75. background: #E8F4F3;
  76. color: #6BC4BC;
  77. border-radius: 20rpx;
  78. }
  79. .online-status {
  80. position: absolute;
  81. right: 32rpx;
  82. bottom: 32rpx;
  83. font-size: 22rpx;
  84. padding: 4rpx 12rpx;
  85. border-radius: 12rpx;
  86. }
  87. .online-status.online {
  88. background: #e8f1f4;
  89. color: #6b8fc4;
  90. }
  91. /* 聊天容器 */
  92. .chat-container {
  93. flex: 1;
  94. /* padding: 0 32rpx; */
  95. display: flex;
  96. flex-direction: column;
  97. }
  98. /* 消息样式 */
  99. .message-wrapper {
  100. display: flex;
  101. margin: 40rpx 0;
  102. animation: fadeIn 0.3s ease;
  103. }
  104. @keyframes fadeIn {
  105. from { opacity: 0; transform: translateY(20rpx); }
  106. to { opacity: 1; transform: translateY(0); }
  107. }
  108. .message-wrapper.user {
  109. justify-content: flex-end;
  110. }
  111. .message-content {
  112. max-width: 70%;
  113. display: flex;
  114. flex-direction: column;
  115. }
  116. .message-wrapper.user .message-content {
  117. align-items: flex-end;
  118. }
  119. .message-wrapper.assistant .message-content {
  120. align-items: flex-start;
  121. }
  122. .message-avatar {
  123. width: 80rpx;
  124. height: 80rpx;
  125. border-radius: 50%;
  126. overflow: hidden;
  127. margin: 0 20rpx;
  128. align-self: flex-end;
  129. }
  130. .avatar {
  131. width: 100%;
  132. height: 100%;
  133. }
  134. /* 消息气泡 */
  135. .message-bubble {
  136. padding: 24rpx;
  137. border-radius: 24rpx;
  138. position: relative;
  139. line-height: 1.5;
  140. }
  141. .assistant-bubble {
  142. background: #E8F4F3;
  143. border-radius: 0 24rpx 24rpx 24rpx;
  144. }
  145. .user-bubble {
  146. background: #86D8D0;
  147. border-radius: 24rpx 0 24rpx 24rpx;
  148. }
  149. .message-text {
  150. font-size: 28rpx;
  151. color: #333;
  152. }
  153. .user-bubble .message-text {
  154. color: white;
  155. }
  156. /* 消息时间 */
  157. .message-time {
  158. font-size: 22rpx;
  159. color: #999;
  160. margin-top: 8rpx;
  161. }
  162. /* 诊断结果卡片 */
  163. .diagnosis-card {
  164. background: white;
  165. border-radius: 16rpx;
  166. padding: 24rpx;
  167. margin-top: 20rpx;
  168. border-left: 6rpx solid #86D8D0;
  169. box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.08);
  170. }
  171. .diagnosis-header {
  172. margin-bottom: 20rpx;
  173. }
  174. .diagnosis-title {
  175. font-size: 28rpx;
  176. font-weight: 600;
  177. color: #333;
  178. }
  179. .diagnosis-item {
  180. display: flex;
  181. margin-bottom: 16rpx;
  182. align-items: flex-start;
  183. }
  184. .diagnosis-label {
  185. font-size: 26rpx;
  186. color: #666;
  187. width: 140rpx;
  188. flex-shrink: 0;
  189. }
  190. .diagnosis-value {
  191. font-size: 26rpx;
  192. color: #333;
  193. flex: 1;
  194. line-height: 1.4;
  195. }
  196. .severity-level {
  197. padding: 4rpx 16rpx;
  198. border-radius: 20rpx;
  199. font-size: 24rpx;
  200. font-weight: 500;
  201. }
  202. .severity-level.low {
  203. background: #E8F4F3;
  204. color: #6BC4BC;
  205. }
  206. .severity-level.moderate {
  207. background: #FFF3E0;
  208. color: #FF9800;
  209. }
  210. .severity-level.high {
  211. background: #FFEBEE;
  212. color: #F44336;
  213. }
  214. .diagnosis-footer {
  215. margin-top: 20rpx;
  216. padding-top: 16rpx;
  217. border-top: 1rpx solid #eee;
  218. }
  219. .disclaimer {
  220. font-size: 22rpx;
  221. color: #999;
  222. font-style: italic;
  223. }
  224. /* AI正在输入 */
  225. .typing {
  226. min-width: 200rpx;
  227. }
  228. .typing-indicator {
  229. display: flex;
  230. align-items: center;
  231. gap: 8rpx;
  232. }
  233. .typing-dot {
  234. width: 12rpx;
  235. height: 12rpx;
  236. background: #86D8D0;
  237. border-radius: 50%;
  238. animation: typingAnimation 1.4s infinite ease-in-out;
  239. }
  240. .typing-dot:nth-child(1) { animation-delay: -0.32s; }
  241. .typing-dot:nth-child(2) { animation-delay: -0.16s; }
  242. @keyframes typingAnimation {
  243. 0%, 80%, 100% { transform: scale(0.8); opacity: 0.5; }
  244. 40% { transform: scale(1); opacity: 1; }
  245. }
  246. .typing-text {
  247. font-size: 26rpx;
  248. color: #666;
  249. margin-left: 12rpx;
  250. }
  251. /* 快捷症状选择 */
  252. .symptom-quick-select {
  253. padding: 0 32rpx 20rpx;
  254. }
  255. .section-title {
  256. display: block;
  257. font-size: 26rpx;
  258. color: #666;
  259. margin-bottom: 20rpx;
  260. }
  261. .symptom-tags {
  262. white-space: nowrap;
  263. display: flex;
  264. gap: 20rpx;
  265. }
  266. .symptom-tag {
  267. display: inline-block;
  268. padding: 16rpx 24rpx;
  269. background: white;
  270. border-radius: 24rpx;
  271. border: 1rpx solid #E8F4F3;
  272. box-shadow: 0 2rpx 8rpx rgba(134, 216, 208, 0.1);
  273. transition: all 0.2s ease;
  274. }
  275. .symptom-tag:active {
  276. transform: scale(0.95);
  277. background: #E8F4F3;
  278. }
  279. .tag-text {
  280. font-size: 26rpx;
  281. color: #666;
  282. }
  283. /* 输入区域 */
  284. .input-area {
  285. background: white;
  286. padding: 20rpx 32rpx 40rpx;
  287. border-top: 1rpx solid #f0f0f0;
  288. display: flex;
  289. align-items: flex-end;
  290. gap: 20rpx;
  291. }
  292. .input-wrapper {
  293. flex: 1;
  294. background: #f8fafc;
  295. border-radius: 24rpx;
  296. padding: 16rpx 24rpx;
  297. border: 1rpx solid #E8F4F3;
  298. }
  299. .message-input {
  300. font-size: 28rpx;
  301. min-height: 60rpx;
  302. line-height: 1.5;
  303. }
  304. .placeholder {
  305. color: #aaa;
  306. }
  307. .send-btn {
  308. width: 80rpx;
  309. height: 80rpx;
  310. border-radius: 50%;
  311. background: #86D8D0;
  312. display: flex;
  313. align-items: center;
  314. justify-content: center;
  315. box-shadow: 0 4rpx 12rpx rgba(134, 216, 208, 0.3);
  316. transition: all 0.2s ease;
  317. }
  318. .send-btn-hover {
  319. background: #6BC4BC;
  320. transform: translateY(-2rpx);
  321. box-shadow: 0 6rpx 16rpx rgba(134, 216, 208, 0.4);
  322. }
  323. .send-icon {
  324. color: white;
  325. font-size: 36rpx;
  326. font-weight: 300;
  327. }
  328. /* 更多菜单 */
  329. .modal-overlay {
  330. position: fixed;
  331. top: 0;
  332. left: 0;
  333. width: 100%;
  334. height: 100%;
  335. background: rgba(0, 0, 0, 0.5);
  336. z-index: 1000;
  337. display: flex;
  338. justify-content: flex-end;
  339. align-items: flex-start;
  340. padding-top: 120rpx;
  341. padding-right: 32rpx;
  342. }
  343. .more-menu {
  344. background: white;
  345. border-radius: 16rpx;
  346. padding: 16rpx 0;
  347. box-shadow: 0 8rpx 32rpx rgba(0, 0, 0, 0.15);
  348. min-width: 240rpx;
  349. animation: slideIn 0.3s ease;
  350. }
  351. @keyframes slideIn {
  352. from { opacity: 0; transform: translateY(-20rpx); }
  353. to { opacity: 1; transform: translateY(0); }
  354. }
  355. .menu-item {
  356. display: flex;
  357. align-items: center;
  358. padding: 24rpx 32rpx;
  359. gap: 16rpx;
  360. }
  361. .menu-item:active {
  362. background: #f8fafc;
  363. }
  364. .menu-icon {
  365. font-size: 28rpx;
  366. }
  367. .menu-text {
  368. font-size: 28rpx;
  369. color: #333;
  370. }
  371. /* 加载动画 */
  372. .loading-overlay {
  373. position: fixed;
  374. top: 0;
  375. left: 0;
  376. width: 100%;
  377. height: 100%;
  378. background: rgba(255, 255, 255, 0.9);
  379. z-index: 1001;
  380. display: flex;
  381. align-items: center;
  382. justify-content: center;
  383. }
  384. .loading-content {
  385. display: flex;
  386. flex-direction: column;
  387. align-items: center;
  388. }
  389. .pulse-animation {
  390. position: relative;
  391. width: 120rpx;
  392. height: 120rpx;
  393. }
  394. .pulse-circle {
  395. position: absolute;
  396. width: 100%;
  397. height: 100%;
  398. border: 4rpx solid #86D8D0;
  399. border-radius: 50%;
  400. animation: pulse 2s infinite ease-in-out;
  401. }
  402. .pulse-circle:nth-child(2) { animation-delay: 0.5s; }
  403. .pulse-circle:nth-child(3) { animation-delay: 1s; }
  404. @keyframes pulse {
  405. 0% { transform: scale(0.8); opacity: 1; }
  406. 100% { transform: scale(1.5); opacity: 0; }
  407. }
  408. .loading-text {
  409. margin-top: 40rpx;
  410. font-size: 28rpx;
  411. color: #666;
  412. }