index.vue 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934
  1. <template>
  2. <view class="container">
  3. <!-- <view class="uni-nav-bar">
  4. <uni-nav-bar fixed :statusBar="true" :border="false" title="健康档案" color="#fff" backgroundColor="transparent" left-icon="left" @click="$navBack()"></uni-nav-bar>
  5. <image class="uni-nav-bar_bg" src="@/static/images/healthRecords/jkda_top_bg.png" mode="widthFix"></image>
  6. </view> -->
  7. <image class="jkda_top_bg" :src="baseUrl+'/images/healthRecords/jkda_top_bg.png'" ></image>
  8. <view class="container-body">
  9. <view class="userbox">
  10. <view class="userbox-left">
  11. <view class="userbox-headimg">
  12. <image :src="defaultHeadimg" mode="aspectFill" style="width: 100%;height: 100%"></image>
  13. </view>
  14. <view class="userbox-info">
  15. <view>{{recordInfo.name || ""}}</view>
  16. <view class="userbox-info-tag">
  17. <view>{{recordInfo.sex == 1 ? '男':recordInfo.sex == 2 ? '女':'未知' }}</view>
  18. <view>{{recordInfo.age || "--"}}岁</view>
  19. </view>
  20. </view>
  21. </view>
  22. <!-- <view class="userbox-right">
  23. <image src="@/static/images/healthRecords/right_arrow_right_icon.png" mode="aspectFill"></image>
  24. </view> -->
  25. </view>
  26. <view class="box-title">
  27. <text>健康数据</text>
  28. <view class="box-title-right">
  29. <image :src="baseUrl+'/images/healthRecords/edit_add_orange_icon.png'" mode="aspectFill"></image>
  30. <text>绑定智能设备</text>
  31. </view>
  32. </view>
  33. <view class="cardbox">
  34. <view class="cardbox-item bmibox">
  35. <view class="cardbox-title">
  36. <view>
  37. <view class="cardbox-maintitle">BMI {{recordInfo.bmi || "--"}}</view>
  38. <view class="bmibox-tagbox"><view class="bmibox-tag" v-if="recordInfo.bmi">{{fat}}</view></view>
  39. </view>
  40. <image :src="baseUrl+'/images/healthRecords//BMI_icon.png'" mode="aspectFill"></image>
  41. </view>
  42. <view class="bmibox-info" style="margin-top: 46rpx;">
  43. <text class="bmibox-infolabel">身高</text>
  44. <view class="bmibox-infoval">{{recordInfo.height || "--"}}cm</view>
  45. <image class="bmibox-edit" :src="baseUrl+'/images/healthRecords/services_edit_icon.png'"
  46. @click="handleEdit('height')"></image>
  47. </view>
  48. <view class="bmibox-info" style="margin-top: 12rpx;">
  49. <text class="bmibox-infolabel">体重</text>
  50. <view class="bmibox-infoval">{{recordInfo.weight || "--"}}kg</view>
  51. <image class="bmibox-edit" :src="baseUrl+'/images/healthRecords/services_edit_icon.png'"
  52. @click="handleEdit('weight')"></image>
  53. </view>
  54. </view>
  55. <view class="cardbox-item" v-for="(item,index) in healthData" :key="index">
  56. <view class="cardbox-title">
  57. <view>
  58. <view class="cardbox-maintitle">{{item.title}}</view>
  59. <view>{{item.desc}}</view>
  60. </view>
  61. <image :src="item.icon" mode="aspectFill"></image>
  62. </view>
  63. <view class="cardbox-res resnum">{{item.data || '--'}}</view>
  64. <view class="cardbox-time">{{item.date && item.date.substring(5,16)}}</view>
  65. </view>
  66. </view>
  67. <!-- 健康史 -->
  68. <view class="box-title">
  69. <text>健康史</text>
  70. </view>
  71. <view class="cardbox">
  72. <view class="health-item" v-for="(item,index) in healthRecordsList" :key="index" @click="handleEditHealth(item,1)">
  73. <image class="health-bgicon" :src="item.bgicon"></image>
  74. <view class="health-item-info">
  75. <view class="cardbox-maintitle" style="margin-bottom: 0;">{{item.title}}</view>
  76. <view class="text-overflow" style="margin-top: 20rpx;">{{item.desc || "尚未记录"}}</view>
  77. </view>
  78. </view>
  79. </view>
  80. <!-- 生活习惯 -->
  81. <view class="box-title">
  82. <text>生活习惯</text>
  83. </view>
  84. <view class="cardbox">
  85. <view class="health-item" v-for="(item,index) in livingHabits" :key="index" @click="handleEditHealth(item,2)">
  86. <image class="health-bgicon" :src="item.bgicon"></image>
  87. <view class="health-item-info">
  88. <view class="cardbox-maintitle" style="margin-bottom: 0;">{{item.title}}</view>
  89. <view class="text-overflow" style="margin-top: 20rpx;">{{item.desc || "尚未记录"}}</view>
  90. </view>
  91. </view>
  92. </view>
  93. </view>
  94. <!-- 修改身高体重弹窗 -->
  95. <u-popup :show="show" @close="close" >
  96. <view class="popbox">
  97. <view class="popbox-title">{{title}}</view>
  98. <view class="uni-input-wrapper">
  99. <input class="uni-input" type="number" focus :placeholder="placeholder" maxlength="5"
  100. :value="inputValue" @input="clearInput" />
  101. <image class="uni-icon" :src="baseUrl+'/images/healthRecords/input_close_icon.png'" v-if="showClearIcon"
  102. @click="clearIcon"></image>
  103. <text>{{title =="身高"?'cm':title =="体重"?'kg':''}}</text>
  104. </view>
  105. <view class="popbox-footer">
  106. <button class="popbox-footer-btn cancel" @click="close">取消</button>
  107. <button class="popbox-footer-btn confirm" :loading="btnLoading" :disabled="btnLoading"
  108. @click="handleSubmit">确认</button>
  109. </view>
  110. </view>
  111. </u-popup>
  112. <!-- footer -->
  113. <view class="footer" >
  114. <view class="footer-btn" @click="editHealthRecordLife">填写个人健康专属档案</view>
  115. </view>
  116. </view>
  117. </template>
  118. <script>
  119. import {getUserInfo} from '@/api/user';
  120. import {
  121. myRecord,
  122. HealthDataList,
  123. HealthLife,
  124. editRecord
  125. } from '@/api/healthRecords.js'
  126. export default {
  127. data() {
  128. return {
  129. show:false,
  130. baseUrl:uni.getStorageSync('requestPath'),
  131. opacity: 1,
  132. hasRecord: true, //是否填过档案
  133. user: {},
  134. fat: "",
  135. recordInfo: {},
  136. title: "身高",
  137. placeholder: "请输入身高",
  138. showClearIcon: false,
  139. inputValue: '',
  140. btnLoading: false,
  141. top:0,
  142. defaultHeadimg:uni.getStorageSync('requestPath')+"/images/healthRecords/my_heads_icon.png",
  143. healthData: [{
  144. title: '血糖',
  145. desc: '血糖健康监测',
  146. data: '',
  147. date: '',
  148. icon: uni.getStorageSync('requestPath')+"/images/healthRecords/blood_sugar_icon.png",
  149. }],
  150. healthRecordsList: [{
  151. title: '疾病史',
  152. type: "healthHistory",
  153. desc: '',
  154. bgicon: uni.getStorageSync('requestPath')+"/images/healthRecords/jbs_icon.png",
  155. }, {
  156. title: '症状史',
  157. type: "symptomHistory",
  158. desc: '',
  159. bgicon: uni.getStorageSync('requestPath')+"/images/healthRecords/zzs_icon.png",
  160. }, {
  161. title: '家族史',
  162. type: "familyHistory",
  163. desc: '',
  164. bgicon:uni.getStorageSync('requestPath')+"/images/healthRecords/jzs_icon.png",
  165. }, {
  166. title: '用药史',
  167. type: "drugHistory",
  168. desc: '',
  169. bgicon: uni.getStorageSync('requestPath')+"/images/healthRecords/yys_icon.png",
  170. }, {
  171. title: '过敏史',
  172. type: "allergyHistory",
  173. desc: '',
  174. bgicon: uni.getStorageSync('requestPath')+"/images/healthRecords/gms_icon.png",
  175. }],
  176. livingHabits: [{
  177. title: '饮食',
  178. desc: '',
  179. type: "dietList",
  180. bgicon:uni.getStorageSync('requestPath')+"/images/healthRecords/ys_icon.png",
  181. }, {
  182. title: '睡眠情况',
  183. desc: '',
  184. type: "sleepList",
  185. bgicon:uni.getStorageSync('requestPath')+"/images/healthRecords/smqk_icon.png",
  186. }, {
  187. title: '运动',
  188. desc: '',
  189. type: "sportList",
  190. bgicon: uni.getStorageSync('requestPath')+"/images/healthRecords/yd_icon.png",
  191. }],
  192. }
  193. },
  194. onLoad(option) {
  195. if(option.isShare!=null){
  196. this.companyId=option.companyId;
  197. this.companyUserId=option.companyUserId;
  198. }
  199. else{
  200. this.companyId=uni.getStorageSync('companyId');
  201. this.companyUserId=uni.getStorageSync('companyUserId');
  202. }
  203. this.baseUrl=uni.getStorageSync('requestPath')
  204. },
  205. onShow() {
  206. this.user = {}
  207. this.$isLogin().then(
  208. res => {
  209. if(res){
  210. this.getUserInfo();
  211. }
  212. },
  213. rej => {}
  214. );
  215. },
  216. onShareAppMessage(res) {
  217. //禁止二次转发--
  218. uni.showShareMenu({
  219. withShareTicket: true
  220. });
  221. wx.updateShareMenu({
  222. isPrivateMessage: true,
  223. withShareTicket: true,
  224. success(res) {
  225. console.log('updateShareMenu: ', res);
  226. },
  227. fail() {}
  228. });
  229. //禁止二次转发--end
  230. return {
  231. title: "健康档案",
  232. imageUrl: 'https://hos-1309931967.cos.ap-chongqing.myqcloud.com/fs/20230106/6b459adfb1004c1a96219bcdf07e337c.png',
  233. path: "/pages_user/healthRecords/index?isShare=1&companyId="+this.companyId+"&companyUserId="+this.companyUserId,
  234. }
  235. },
  236. methods: {
  237. editHealthRecordLife() {
  238. uni.navigateTo({
  239. url: "/pages_user/healthRecords/add?formType=healthLife"
  240. })
  241. },
  242. getUserInfo(){
  243. getUserInfo().then(
  244. res => {
  245. if(res.code==200){
  246. if(res.user!=null){
  247. this.user=res.user;
  248. this.defaultHeadimg=this.user.avatar;
  249. this.getMyRecord()
  250. this.getHealthDataList()
  251. this.getHealthLife()
  252. }
  253. }else{
  254. uni.showToast({
  255. icon:'none',
  256. title: "请求失败",
  257. });
  258. }
  259. },
  260. rej => {}
  261. );
  262. },
  263. getImageUrl(url) {
  264. return new URL(url, import.meta.url).href;
  265. },
  266. getBmi() {
  267. let fat = ""
  268. if(this.recordInfo && JSON.stringify(this.recordInfo) != "{}") {
  269. if(!this.$isEmpty(this.recordInfo.weight) && !this.$isEmpty(this.recordInfo.weight)) {
  270. // 计算BMI值
  271. this.recordInfo.bmi = Math.round(this.recordInfo.weight / Math.pow(this.recordInfo.height / 100, 2));
  272. // 判断体重状态
  273. if (this.recordInfo.bmi < 18.5) {
  274. fat = "偏瘦";
  275. } else if (this.recordInfo.bmi < 24) {
  276. fat = "正常";
  277. } else if (this.recordInfo.bmi < 28) {
  278. fat = "超重";
  279. } else {
  280. fat = "肥胖";
  281. }
  282. // 添加推荐体重
  283. // let lowerBound = 18.5 * Math.pow(this.recordInfo.weight / 100, 2);
  284. // let upperBound = 24 * Math.pow(this.recordInfo.weight / 100, 2);
  285. }
  286. } else {
  287. this.recordInfo.bmi = ""
  288. }
  289. this.fat = fat
  290. },
  291. getHealthLife() {
  292. const param = {
  293. userId: this.user.userId
  294. }
  295. HealthLife(param).then(res => {
  296. if (res.code == 200 && res.data) {
  297. this.livingHabits[0].desc = res.data && res.data.eat ? this.resetData(JSON.parse(res.data.eat)) : ''
  298. this.livingHabits[1].desc = res.data && res.data.sleep ? this.resetData(JSON.parse(res.data.sleep)) : ''
  299. this.livingHabits[2].desc = res.data && res.data.sport ? this.resetData(JSON.parse(res.data.sport)) : ''
  300. }
  301. },
  302. rej => {}
  303. )
  304. },
  305. // 健康档案
  306. getMyRecord() {
  307. myRecord().then(res => {
  308. if (res.code == 200) {
  309. if(res.data) {
  310. this.hasRecord = true
  311. this.recordInfo = res.data
  312. this.healthRecordsList[0].desc = res.data.healthHistory ? this.resetData(JSON.parse(res.data.healthHistory)) : ""
  313. this.healthRecordsList[1].desc = res.data.symptomHistory ? this.resetData(JSON.parse(res.data.symptomHistory)) : ""
  314. this.healthRecordsList[2].desc = res.data.familyHistory ? this.resetData(JSON.parse(res.data.familyHistory)) : ""
  315. this.healthRecordsList[3].desc = res.data.drugHistory ? this.resetData(JSON.parse(res.data.drugHistory)) : ""
  316. this.healthRecordsList[4].desc = res.data.allergyHistory ? this.resetData(JSON.parse(res.data.allergyHistory)) : ""
  317. } else {
  318. this.hasRecord = false
  319. this.handelHealthRecord(1)
  320. }
  321. } else {
  322. uni.showToast({
  323. icon:'none',
  324. title: res.msg,
  325. });
  326. }
  327. this.getBmi()
  328. },
  329. rej => {}
  330. )
  331. },
  332. resetData(data) {
  333. let set = new Set();
  334. data.forEach(item => {
  335. item.question.forEach(it => {
  336. if (item.value.includes(it.name)) {
  337. if (it.isWrite == 1 && it.writeVal) {
  338. const str = it.name + "(" + it.writeVal + ")";
  339. set.add(str);
  340. } else {
  341. set.add(it.name);
  342. }
  343. } else if(item.name == '平时应酬' && it.name === '每周多少次'){
  344. if (it.writeVal) {
  345. const str = "每周" + it.writeVal + "次";
  346. set.add(str);
  347. }
  348. }
  349. });
  350. });
  351. return Array.from(set).join(",");
  352. },
  353. // 健康数据列表
  354. getHealthDataList() {
  355. const param = {
  356. pageNum: 1,
  357. pageSize: 10,
  358. userId: this.user.userId
  359. }
  360. HealthDataList(param).then(res => {
  361. if (res.code == 200 && res.data && res.data.length > 0) {
  362. this.healthData[0].data = res.data[0].bloodSugar
  363. this.healthData[0].date = res.data[0].creatTime
  364. } else {
  365. this.healthData[0].data = ""
  366. this.healthData[0].date = ""
  367. }
  368. },
  369. rej => {}
  370. );
  371. },
  372. handelHealthRecord(type) {
  373. if (type == 1) {
  374. uni.redirectTo({
  375. url: "./add"
  376. })
  377. } else {
  378. uni.navigateTo({
  379. url: "./add"
  380. })
  381. }
  382. },
  383. handleEditHealth(item,type) {
  384. // type 1:修改健康史相关 2:修改生活习惯
  385. if(type == 2 ) {
  386. uni.navigateTo({
  387. url: "./add?formType="+item.type
  388. })
  389. } else {
  390. uni.navigateTo({
  391. url: "./edit?id="+this.recordInfo.id + "&formType="+item.type
  392. })
  393. }
  394. },
  395. handleEdit(type) {
  396. if (type == "height") {
  397. this.title = "身高"
  398. this.placeholder = "请输入身高"
  399. this.inputValue = this.recordInfo.height || undefined
  400. } else if (type == "weight") {
  401. this.title = "体重"
  402. this.placeholder = "请输入体重"
  403. this.inputValue = this.recordInfo.weight || undefined
  404. }
  405. this.show=true;
  406. },
  407. close() {
  408. console.log(1)
  409. this.show=false;
  410. },
  411. // 修改身高/体重
  412. handleSubmit() {
  413. if(this.title == "身高") {
  414. // 判断字符串为正整数
  415. const reg = /^[1-9]\d*$/
  416. if(!reg.test(this.inputValue)) {
  417. uni.showToast({
  418. title: "请输入正确的身高",
  419. icon: "none"
  420. })
  421. return
  422. }
  423. }
  424. if(this.title == "体重") {
  425. // 判断字符串为数字且保留一位小数
  426. const reg = /^\d+(\.\d{1})?$/
  427. if(!reg.test(this.inputValue) || this.inputValue == 0) {
  428. uni.showToast({
  429. title: "请输入正确的体重",
  430. icon: "none"
  431. })
  432. return
  433. }
  434. }
  435. const param = {
  436. id: Number(this.recordInfo.id || 0),
  437. weight: this.title == "体重" ? this.inputValue : undefined,
  438. height: this.title == "身高" ? this.inputValue : undefined,
  439. };
  440. editRecord(param).then(res => {
  441. this.btnLoading = false
  442. if (res.code == 200) {
  443. this.recordInfo.weight = this.title == "体重" ? this.inputValue : this.recordInfo.weight
  444. this.recordInfo.height = this.title == "身高" ? this.inputValue : this.recordInfo.height
  445. this.getBmi()
  446. this.close()
  447. } else {
  448. uni.showToast({
  449. title: res.msg,
  450. icon: "none"
  451. })
  452. }
  453. },
  454. rej => {}
  455. )
  456. },
  457. clearInput(event) {
  458. this.inputValue = event.detail.value;
  459. if (event.detail.value.length > 0) {
  460. this.showClearIcon = true;
  461. } else {
  462. this.showClearIcon = false;
  463. }
  464. },
  465. clearIcon() {
  466. this.inputValue = '';
  467. this.showClearIcon = false;
  468. },
  469. }
  470. }
  471. </script>
  472. <style scoped lang="scss">
  473. .uni-nav-bar {
  474. position: fixed;
  475. top: 0;
  476. left: 0;
  477. width: 100%;
  478. z-index: 999;
  479. overflow: hidden;
  480. .uni-nav-bar_bg {
  481. width: 100%;
  482. position: absolute;
  483. top: 0;
  484. left: 0;
  485. }
  486. }
  487. .nav-bar{
  488. .grace-page-header {
  489. position: fixed;
  490. width: 100%;
  491. left: 0;
  492. top: 0;
  493. z-index: 98;
  494. border-bottom: 0px solid #FFFFFF;
  495. .grace-page-status-bar {
  496. width: 100%;
  497. height: 0;
  498. }
  499. .grace-page-header-nav {
  500. width: 100%;
  501. display: flex;
  502. flex-direction: row;
  503. flex-wrap: nowrap;
  504. align-items: center;
  505. justify-content: space-between;
  506. }
  507. }
  508. .title {
  509. font-family: PingFang SC, PingFang SC;
  510. font-weight: 500;
  511. font-size: 32rpx;
  512. color: #222222;
  513. line-height: 44rpx;
  514. }
  515. .content-header {
  516. height: 80rpx;
  517. padding: 0 24rpx;
  518. display: flex;
  519. flex-direction: row;
  520. align-items: center;
  521. justify-content: space-between;
  522. &-l {
  523. font-family: PingFang SC, PingFang SC;
  524. font-weight: 500;
  525. font-size: 26rpx;
  526. color: #FFFFFF;
  527. line-height: 28rpx;
  528. display: flex;
  529. flex-direction: row;
  530. align-items: center;
  531. justify-content: flex-start;
  532. .address {
  533. width: 20rpx;
  534. height: 30rpx;
  535. margin-right: 6rpx;
  536. }
  537. }
  538. &-title{
  539. display: flex;
  540. flex: 1;
  541. justify-content: center;
  542. align-items: center;
  543. font-size: 34rpx;
  544. font-weight: 444;
  545. color: #fff;
  546. }
  547. }
  548. }
  549. .container {
  550. position: relative;
  551. .jkda_top_bg {
  552. position: absolute;
  553. top: 0;
  554. left: 0;
  555. width: 100%;
  556. height: 300rpx;
  557. }
  558. &-body {
  559. position: relative;
  560. padding: 32rpx 24rpx;
  561. // #ifndef H5
  562. padding-top: calc(32rpx);
  563. // #endif
  564. // #ifdef H5
  565. padding-top: calc(var(--status-bar-height) + 100rpx);
  566. // #endif
  567. padding-bottom: calc(var(--window-bottom) + 170rpx);
  568. }
  569. }
  570. .popbox {
  571. background-color: #fff;
  572. // width: 630rpx;
  573. padding: 40rpx;
  574. box-sizing: border-box;
  575. border-radius: 32rpx 32rpx 32rpx 32rpx;
  576. overflow: hidden;
  577. font-family: PingFang SC, PingFang SC;
  578. font-weight: 500;
  579. &-title {
  580. font-size: 34rpx;
  581. color: #333333;
  582. text-align: center;
  583. }
  584. .uni-input-wrapper {
  585. width: 100%;
  586. height: 78rpx;
  587. margin-top: 36rpx;
  588. box-sizing: border-box;
  589. background: #FFFFFF;
  590. border-radius: 16rpx 16rpx 16rpx 16rpx;
  591. border: 2rpx solid #ECECEC;
  592. padding: 0 24rpx;
  593. display: flex;
  594. flex-direction: row;
  595. align-items: center;
  596. justify-content: space-between;
  597. .uni-icon {
  598. flex-shrink: 0;
  599. width: 32rpx;
  600. height: 32rpx;
  601. }
  602. }
  603. &-footer {
  604. margin-top: 40rpx;
  605. display: flex;
  606. flex-direction: row;
  607. align-items: center;
  608. justify-content: space-between;
  609. &-btn {
  610. width: 248rpx;
  611. height: 84rpx;
  612. border-radius: 42rpx 42rpx 42rpx 42rpx;
  613. font-size: 32rpx;
  614. vertical-align: middle;
  615. line-height: auto;
  616. align-items: center;
  617. text-align: center;
  618. &::after {
  619. border: none;
  620. }
  621. }
  622. .cancel {
  623. background: #F4F4F4;
  624. color: #757575;
  625. }
  626. .confirm {
  627. background: #FF5C03;
  628. color: #FFFFFF;
  629. }
  630. }
  631. }
  632. .userbox {
  633. margin-top: 80rpx;
  634. padding: 32rpx;
  635. background: #FFFFFF;
  636. border-radius: 16rpx 16rpx 16rpx 16rpx;
  637. display: flex;
  638. flex-direction: row;
  639. align-items: center;
  640. justify-content: space-between;
  641. &-headimg {
  642. flex-shrink: 0;
  643. width: 140rpx;
  644. height: 140rpx;
  645. image{
  646. width: 140rpx;
  647. height: 140rpx;
  648. border-radius: 50%;
  649. }
  650. }
  651. &-left {
  652. flex-shrink: 0;
  653. flex: 1;
  654. display: flex;
  655. flex-direction: row;
  656. align-items: center;
  657. justify-content: flex-start;
  658. }
  659. &-info {
  660. margin-left: 24rpx;
  661. font-family: PingFang SC, PingFang SC;
  662. font-weight: 600;
  663. font-size: 32rpx;
  664. color: #222222;
  665. &-tag {
  666. margin-top: 30rpx;
  667. font-weight: 400;
  668. font-size: 22rpx;
  669. color: #FF5C03;
  670. display: flex;
  671. flex-direction: row;
  672. align-items: center;
  673. justify-content: flex-start;
  674. view {
  675. min-width: 62rpx;
  676. height: 42rpx;
  677. padding: 0 20rpx;
  678. box-sizing: border-box;
  679. background: #FCF0E7;
  680. border-radius: 24rpx 24rpx 24rpx 24rpx;
  681. text-align: center;
  682. line-height: 42rpx;
  683. margin-right: 14rpx;
  684. }
  685. }
  686. }
  687. &-right {
  688. margin-left: 24rpx;
  689. image {
  690. width: 48rpx;
  691. height: 48rpx;
  692. }
  693. }
  694. }
  695. .box-title {
  696. height: 80rpx;
  697. line-height: 80rpx;
  698. border-radius: 16rpx 16rpx 16rpx 16rpx;
  699. font-family: PingFang SC, PingFang SC;
  700. font-weight: 500;
  701. font-size: 36rpx;
  702. color: #222222;
  703. margin: 20rpx 0;
  704. display: flex;
  705. flex-direction: row;
  706. align-items: center;
  707. justify-content: space-between;
  708. &-right {
  709. flex-shrink: 0;
  710. min-width: 240rpx;
  711. height: 64rpx;
  712. padding: 0 32rpx;
  713. box-sizing: border-box;
  714. background: #FFFFFF;
  715. border-radius: 32rpx 32rpx 32rpx 32rpx;
  716. font-size: 24rpx;
  717. color: #FF5C03;
  718. display: flex;
  719. flex-direction: row;
  720. align-items: center;
  721. justify-content: center;
  722. image {
  723. width: 24rpx;
  724. height: 24rpx;
  725. margin-right: 8rpx;
  726. }
  727. }
  728. }
  729. .cardbox {
  730. display: flex;
  731. flex-direction: row;
  732. align-items: center;
  733. justify-content: flex-start;
  734. flex-wrap: wrap;
  735. gap: 16rpx 14rpx;
  736. &-item {
  737. width: 344rpx;
  738. min-height: 264rpx;
  739. background: #FFFFFF;
  740. border-radius: 16rpx 16rpx 16rpx 16rpx;
  741. padding: 24rpx 24rpx 24rpx 24rpx;
  742. box-sizing: border-box;
  743. overflow: hidden;
  744. }
  745. .bmibox-tagbox {
  746. min-width: 72rpx;
  747. height: 40rpx;
  748. }
  749. .bmibox {
  750. &-tag {
  751. min-width: 72rpx;
  752. height: 40rpx;
  753. line-height: 40rpx;
  754. text-align: center;
  755. padding: 0 12rpx;
  756. box-sizing: border-box;
  757. display: inline-block;
  758. background: #FCF0E7;
  759. border-radius: 8rpx 8rpx 8rpx 8rpx;
  760. font-family: PingFang SC, PingFang SC;
  761. font-weight: 400;
  762. font-size: 24rpx;
  763. color: #FF5C03;
  764. }
  765. &-info {
  766. display: flex;
  767. flex-direction: row;
  768. align-items: center;
  769. justify-content: flex-start;
  770. font-family: PingFang SC, PingFang SC;
  771. font-weight: 400;
  772. font-size: 24rpx;
  773. color: #999999;
  774. }
  775. &-infolabel {
  776. min-width: 48rpx;
  777. flex-shrink: 0;
  778. }
  779. &-infoval {
  780. flex: 1;
  781. padding: 0 12rpx;
  782. text-align: center;
  783. font-weight: 500;
  784. color: #222222;
  785. }
  786. &-edit {
  787. width: 32rpx;
  788. height: 32rpx;
  789. flex-shrink: 0;
  790. }
  791. }
  792. &-maintitle {
  793. margin-bottom: 4rpx;
  794. font-weight: 600;
  795. font-size: 30rpx;
  796. color: #333333;
  797. }
  798. &-title {
  799. flex-direction: row;
  800. align-items: center;
  801. justify-content: space-between;
  802. font-weight: 400;
  803. font-size: 24rpx;
  804. color: #999999;
  805. image {
  806. width: 72rpx;
  807. height: 72rpx;
  808. flex-shrink: 0;
  809. }
  810. }
  811. .resnum {
  812. font-family: DIN, DIN;
  813. font-weight: 500;
  814. font-size: 64rpx;
  815. }
  816. &-res {
  817. height: 78rpx;
  818. margin: 20rpx 0 6rpx;
  819. font-family: PingFang SC, PingFang SC;
  820. font-weight: 600;
  821. font-size: 48rpx;
  822. color: #333333;
  823. }
  824. &-time {
  825. font-weight: 400;
  826. font-size: 22rpx;
  827. color: #999999;
  828. }
  829. }
  830. .health-item {
  831. width: 343rpx;
  832. height: 224rpx;
  833. padding: 24rpx;
  834. box-sizing: border-box;
  835. background: #FFFFFF;
  836. border-radius: 16rpx 16rpx 16rpx 16rpx;
  837. overflow: hidden;
  838. position: relative;
  839. font-family: PingFang SC, PingFang SC;
  840. font-weight: 400;
  841. font-size: 24rpx;
  842. color: #999999;
  843. }
  844. .health-item-info {
  845. position: relative;
  846. }
  847. .health-bgicon {
  848. position: absolute;
  849. right: 0;
  850. bottom: 0;
  851. width: 168rpx;
  852. height: 168rpx;
  853. }
  854. .text-overflow {
  855. word-break:break-all;
  856. overflow: hidden;
  857. text-overflow: ellipsis;
  858. display: -webkit-box;
  859. -webkit-line-clamp: 4;
  860. -webkit-box-orient: vertical;
  861. }
  862. .footer {
  863. width: 100%;
  864. height: 152rpx;
  865. padding: 20rpx 24rpx;
  866. box-sizing: border-box;
  867. background: #FFFFFF;
  868. box-shadow: 0rpx -6rpx 8rpx 0rpx rgba(114, 114, 114, 0.1);
  869. position: fixed;
  870. bottom: var(--window-bottom);
  871. left: 0;
  872. &-btn {
  873. height: 112rpx;
  874. background: #FF5C03;
  875. border-radius: 16rpx 16rpx 16rpx 16rpx;
  876. font-family: PingFang SC, PingFang SC;
  877. font-weight: 600;
  878. font-size: 34rpx;
  879. color: #FFFFFF;
  880. line-height: 112rpx;
  881. text-align: center;
  882. }
  883. }
  884. </style>