天波h5前端应用
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

275 lignes
8.1KB

  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: calcResultColor(item.level) }">
  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.appType) {
  95. this.$store.commit("appType", params.appType);
  96. }
  97. if (!params.accessToken) {
  98. let authToken = await this.getAuth();
  99. this.$store.commit("ssjlToken", authToken);
  100. } else {
  101. this.$store.commit("ssjlToken", params.accessToken);
  102. }
  103. this.getHomeData();
  104. }
  105. },
  106. // 获取首页数据
  107. getHomeData() {
  108. this.$toast.loading("数据加载中");
  109. let reqUrl = `${PsyBaseUrl}/api/Data/GetHomeData`;
  110. let reqParams = {
  111. uid: this.uid,
  112. date: this.routeDate || this.$dayjs(new Date()).format("YYYY-MM-DD"),
  113. };
  114. axios
  115. .get(reqUrl, {
  116. params: { ...reqParams },
  117. headers: { AccessToken: this.$store.getters.ssjlToken },
  118. })
  119. .then((res) => {
  120. console.log("res", res);
  121. const data = res.data.response;
  122. if (!data) {
  123. return this.$toast.fail(res.data.msg);
  124. }
  125. this.healhtList = [
  126. // 2023.12.5 修改菜单顺序
  127. // 疲劳指数
  128. {
  129. value: data.TirScore,
  130. name: "疲劳指数",
  131. class: "tiredness",
  132. result: data.TirDesc,
  133. time: data.TirMeasureUpdateTime
  134. ? this.$dayjs(data.TirMeasureUpdateTime).format("HH:mm")
  135. : "",
  136. level: data.TirLevel,
  137. img: data.TirScore
  138. ? this.calcImg(data.TirLevel, "tiredness")
  139. : "",
  140. },
  141. // 压力指数
  142. {
  143. value: data.StressScore,
  144. name: "压力指数",
  145. class: "stress",
  146. result: data.StressDesc,
  147. time: data.StressMeasureUpdateTime
  148. ? this.$dayjs(data.StressMeasureUpdateTime).format("HH:mm")
  149. : "",
  150. level: data.StressLevel,
  151. img: data.StressScore
  152. ? this.calcImg(data.StressLevel, "stress")
  153. : "",
  154. },
  155. // 抑郁指数
  156. {
  157. value: data.DepScore,
  158. name: this.$replaceAll(`抑郁指数`, '抑郁', '忧郁'),
  159. class: "depression",
  160. result: this.$replaceAll(data.DepDesc, '抑郁', '忧郁'),
  161. time: data.DepMeasureUpdateTime
  162. ? this.$dayjs(data.DepMeasureUpdateTime).format("HH:mm")
  163. : "",
  164. level: data.DepLevel,
  165. img: data.DepScore
  166. ? this.calcImg(data.DepLevel, "depression")
  167. : "",
  168. },
  169. ];
  170. this.$toast.success("数据加载完成");
  171. })
  172. .catch(() => { })
  173. .finally(() => { });
  174. },
  175. onClick(item) {
  176. this.params.name = item.class;
  177. this.$router.replace({
  178. name: "psychological",
  179. query: {
  180. name: item.class,
  181. uid: this.uid,
  182. date: this.routeDate,
  183. ...this.params,
  184. },
  185. });
  186. },
  187. onNavBack() {
  188. if (this.isShowLeft) {
  189. window.location.href = `${this.$route.query.fromUrl}/#/${this.$route.query.fromMenu || "device"
  190. }`;
  191. } else {
  192. this.$router.go(-1);
  193. }
  194. },
  195. // 计算表情
  196. calcImg(level, name) {
  197. let imgUrl = "";
  198. /* imgUrl = require(`@/assets/img/psychological/${name}_${level}.png`); */
  199. let numLevel = Number(level);
  200. console.log(`@/assets/img/psychological/${name}_${numLevel}.png`);
  201. if (numLevel < 0) {
  202. imgUrl = require(`@/assets/img/psychological/${name}_1.png`);
  203. } else {
  204. imgUrl = require(`@/assets/img/psychological/${name}_${numLevel + 1}.png`);
  205. }
  206. /* switch(level) {
  207. case '0':
  208. imgUrl = require(`@/assets/img/psychological/${name}_${numLevel + 1}.png`);
  209. break;
  210. case '1':
  211. imgUrl = require('@/assets/img/regardless.png');
  212. break;
  213. case '2':
  214. imgUrl = require('@/assets/img/moderate.png');
  215. break;
  216. case '3':
  217. imgUrl = require('@/assets/img/moderate.png');
  218. break;
  219. } */
  220. return imgUrl;
  221. },
  222. // 计算颜色
  223. calcColor(value) {
  224. let color = "";
  225. if (value <= 40) {
  226. color = "#62BD48";
  227. } else if (value > 40 && value <= 65) {
  228. color = "#FEC350";
  229. } else if (value > 65 && value <= 80) {
  230. color = "#F86825";
  231. } else if (value > 80) {
  232. color = "#EB1D15";
  233. } else {
  234. color = "";
  235. }
  236. return color;
  237. },
  238. // 计算结果采用哪种颜色
  239. calcResultColor(value, isCallBackClass) {
  240. let color = "";
  241. let className = "";
  242. switch (Number(value)) {
  243. case 0:
  244. color = "#62BD48";
  245. className = "none";
  246. break;
  247. case 1:
  248. color = "#ffde00";
  249. className = "mild";
  250. break;
  251. case 2:
  252. color = "#ff8a00";
  253. className = "moderate";
  254. break;
  255. case 3:
  256. color = "#d70d0d";
  257. className = "severe";
  258. break;
  259. }
  260. return isCallBackClass ? className : color;
  261. },
  262. },
  263. };
  264. </script>
  265. <style scoped lang="scss">
  266. @import "./index.scss";
  267. </style>