天波h5前端应用
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.

200 lines
7.3KB

  1. <template>
  2. <div class="psychological-main-container">
  3. <van-nav-bar title="今日情绪" :border="true" @click-left="onNavBack">
  4. <template #left>
  5. <div v-show="isShowLeft" class="nav-bar-title">
  6. <van-icon name="arrow-left" size="23"/><span>返回</span>
  7. </div>
  8. </template>
  9. <template #title>
  10. <span>今日情绪</span>
  11. </template>
  12. </van-nav-bar>
  13. <div class="main">
  14. <div class="list">
  15. <div v-for="(item,index) in healhtList" :key="index" :class="['item', item.class]" @click="onClick(item)">
  16. <p class="health-value" :style="{ color: calcColor(item.value) }">
  17. {{ item.value || '--' }}
  18. </p>
  19. <p class="health-name">
  20. {{ item.name || '--'}}
  21. </p>
  22. <div class="health-result">
  23. <div :class="['left', item.class]">
  24. <p class="result">
  25. {{ item.result || '暂无数据'}}
  26. </p>
  27. </div>
  28. <div class="right">
  29. <!-- img -->
  30. <img :src="item.img" alt="">
  31. </div>
  32. </div>
  33. <div class="health-time">
  34. <p class="time">{{ item.time || '--' }}</p>
  35. </div>
  36. </div>
  37. </div>
  38. </div>
  39. </div>
  40. </template>
  41. <script>
  42. import axios from "axios";
  43. import { isNotNull } from "@/utils/index";
  44. import { PsyBaseUrl } from "@/config/models";
  45. import APICore from "@/api/core";
  46. export default {
  47. name: 'psychologicalMain',
  48. data(){
  49. return {
  50. healhtList: [
  51. /* { value: 40, name: '抑郁指数', class: 'depression',result: '无抑郁倾向', time: '17:52', img: require('@/assets/img/regardless.png') },
  52. { value: 55, name: '压力指数', class: 'stress', result: '轻度压力', time: '17:52', img: require('@/assets/img/regardless.png') },
  53. { value: 75, name: '疲劳指数', class: 'tiredness', result: '中度疲劳', time: '17:52', img: require('@/assets/img/moderate.png') }, */
  54. ],
  55. uid: '',
  56. routeDate: '',
  57. params: {}
  58. }
  59. },
  60. computed: {
  61. isShowLeft() {
  62. return isNotNull(this.$route.query.fromUrl);
  63. }
  64. },
  65. mounted() {
  66. this.loadParams();
  67. this.$store.commit('tabClick', 0);
  68. window.document.title = '心理呵护';
  69. },
  70. methods: {
  71. // 获取b端token
  72. getAuth() {
  73. let manufactorId = "5bf13062-a41e-4d00-ba14-1101aad12650";
  74. let that = this;
  75. return new Promise((resolve, reject) => {
  76. APICore.getAuth({ manufactorId: manufactorId }).then(res => {
  77. let data = res.data;
  78. if(data.code === 0) {
  79. resolve(res.data.data);
  80. } else {
  81. this.$toast.fail(`${data.message}`);
  82. reject('');
  83. }
  84. })
  85. })
  86. },
  87. // 加载路由参数
  88. async loadParams() {
  89. let params = this.$route.query;
  90. if (params) {
  91. this.uid = params.uid;
  92. this.routeDate = params.date;
  93. this.params = params;
  94. if(!params.accessToken) {
  95. let authToken = await this.getAuth();
  96. this.$store.commit('ssjlToken', authToken);
  97. } else {
  98. this.$store.commit('ssjlToken', params.accessToken);
  99. }
  100. this.getHomeData();
  101. }
  102. },
  103. // 获取首页数据
  104. getHomeData() {
  105. this.$toast.loading('数据加载中');
  106. let reqUrl = `${PsyBaseUrl}/api/Data/GetHomeData`;
  107. let reqParams = {
  108. uid: this.uid,
  109. date: this.routeDate || this.$dayjs(new Date()).format('YYYY-MM-DD')
  110. };
  111. axios.get(reqUrl, {
  112. params: { ...reqParams },
  113. headers: { 'AccessToken': this.$store.getters.ssjlToken }
  114. }).then(res => {
  115. const data = res.data.response;
  116. if(!data) {
  117. return this.$toast.fail(res.data.msg);
  118. }
  119. this.healhtList = [
  120. // 2023.12.5 修改菜单顺序
  121. // 疲劳指数
  122. { value: data.TirScore, name: '疲劳指数', class: 'tiredness', result: data.TirDesc, time: data.TirMeasureUpdateTime ? this.$dayjs(data.TirMeasureUpdateTime).format('HH:mm') : '', level: data.TirLevel, img: data.TirScore ? this.calcImg(data.TirLevel, 'tiredness') : '' },
  123. // 压力指数
  124. { value: data.StressScore, name: '压力指数', class: 'stress', result: data.StressDesc, time: data.StressMeasureUpdateTime ? this.$dayjs(data.StressMeasureUpdateTime).format('HH:mm') : '', level: data.StressLevel, img: data.StressScore ? this.calcImg(data.StressLevel, 'stress') : ''},
  125. // 抑郁
  126. { value: data.DepScore, name: '抑郁指数', class: 'depression', result: data.DepDesc, time: data.DepMeasureUpdateTime ? this.$dayjs(data.DepMeasureUpdateTime).format('HH:mm'): '', level: data.DepLevel, img: data.DepScore ? this.calcImg(data.DepLevel, 'depression') : ''},
  127. ];
  128. this.$toast.success('数据加载完成');
  129. }).catch(() =>{}).finally(() => { })
  130. },
  131. onClick(item) {
  132. this.params.name = item.class;
  133. this.$router.replace({
  134. name: 'psychological',
  135. query: {
  136. name: item.class,
  137. uid: this.uid,
  138. date: this.routeDate,
  139. ...this.params
  140. }
  141. })
  142. },
  143. onNavBack() {
  144. if(this.isShowLeft) {
  145. window.location.href = `${this.$route.query.fromUrl}/#/${ this.$route.query.fromMenu || 'device'}`;
  146. } else {
  147. this.$router.go(-1);
  148. }
  149. },
  150. // 计算表情
  151. calcImg(level, name) {
  152. let imgUrl = '';
  153. /* imgUrl = require(`@/assets/img/psychological/${name}_${level}.png`); */
  154. let numLevel = Number(level);
  155. console.log(`@/assets/img/psychological/${name}_${numLevel}.png`);
  156. imgUrl = require(`@/assets/img/psychological/${name}_${numLevel + 1}.png`);
  157. /* switch(level) {
  158. case '0':
  159. imgUrl = require(`@/assets/img/psychological/${name}_${numLevel + 1}.png`);
  160. break;
  161. case '1':
  162. imgUrl = require('@/assets/img/regardless.png');
  163. break;
  164. case '2':
  165. imgUrl = require('@/assets/img/moderate.png');
  166. break;
  167. case '3':
  168. imgUrl = require('@/assets/img/moderate.png');
  169. break;
  170. } */
  171. return imgUrl;
  172. },
  173. // 计算颜色
  174. calcColor(value) {
  175. let color = "";
  176. if (value <= 40) {
  177. color = "#62BD48";
  178. } else if (value > 40 && value <= 65) {
  179. color = "#FEC350";
  180. } else if (value > 65 && value <= 80) {
  181. color = "#F86825";
  182. } else if (value > 80) {
  183. color = "#EB1D15";
  184. } else {
  185. color = "";
  186. }
  187. return color;
  188. }
  189. }
  190. }
  191. </script>
  192. <style scoped lang="scss">
  193. @import "./index.scss";
  194. </style>