天波h5前端应用
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

330 Zeilen
9.0KB

  1. <template>
  2. <div class="page" v-if="isSHowPage">
  3. <van-nav-bar title="" :border="true" :left-arrow="true" @click-left="onNavBack" v-if="showLeftArrow">
  4. <template #left>
  5. <van-icon name="arrow-left" size="23" style="padding: 0"/>返回
  6. </template>
  7. </van-nav-bar>
  8. <div class="tip">
  9. <div class="icon">
  10. <i class="iconfont icon-tishi"></i>
  11. </div>
  12. <div class="info">
  13. <div class="titie">温馨提醒:</div>
  14. <div class="content">
  15. 首次佩戴,需完成以下2步,建立情绪模型。完成初始化建模后,将为您计算抑郁、压力、疲劳分值。
  16. </div>
  17. </div>
  18. </div>
  19. <div v-if="info">
  20. <div class="step" v-show="info.progress !== 1">
  21. <div class="name">第一步</div>
  22. <div class="title">
  23. <div class="text">连续佩戴两小时</div>
  24. <div class="status success" v-if="info.progress === 1">
  25. <span class="icon"
  26. ><i class="iconfont icon-caozuochenggong"></i
  27. ></span>
  28. <span>已完成</span>
  29. </div>
  30. <div class="status" v-else>{{ stateText}}</div>
  31. </div>
  32. <div class="schedule">
  33. <van-progress
  34. :percentage="(info.progress) * 100"
  35. stroke-width="10px"
  36. color="#638ee4"
  37. :show-pivot="true"
  38. ></van-progress>
  39. </div>
  40. <div class="sub_title">
  41. 请连续佩戴不低于2小时,有助于为您输出更加精准的情绪分析指标。
  42. </div>
  43. </div>
  44. <div class="step" v-show="info.initScaleState !== 1">
  45. <div class="name">第二步</div>
  46. <div class="title">
  47. <div class="text">情绪初始化评估</div>
  48. <div class="status success" v-if="info.initScaleState === 1">
  49. <span class="icon"
  50. ><i class="iconfont icon-caozuochenggong"></i
  51. ></span>
  52. <span>已完成</span>
  53. </div>
  54. <div class="status" v-else>待完成</div>
  55. </div>
  56. <div class="sub_title">
  57. 完成一次“情绪初始化评估”,有助于建立您的个人情绪模型。
  58. </div>
  59. </div>
  60. <div class="button">
  61. <van-button
  62. round
  63. type="info"
  64. style="width: 100%; height: 100%"
  65. @click="toQuestion"
  66. v-if="info.initScaleState !== 1"
  67. >去完成</van-button
  68. >
  69. </div>
  70. </div>
  71. </div>
  72. </template>
  73. <script>
  74. import axios from 'axios'
  75. export default {
  76. name: 'PsychologicalModeling',
  77. data() {
  78. return {
  79. info: null,
  80. showLeftArrow: null,
  81. isSHowPage: false,
  82. fromUrl: '',
  83. }
  84. },
  85. computed: {
  86. stateText() {
  87. return this.info.progress > 0 ? '进行中' : '待完成';
  88. },
  89. autoJump() {
  90. return this.$route.query.autoJump === '1';
  91. }
  92. },
  93. mounted() {
  94. //页面标题
  95. window.document.title = '情绪初始化建模'
  96. //页面传参
  97. let params = { ...this.$route.query }
  98. if (params.uid) {
  99. this.uid = params.uid;
  100. // 缓存从随手精灵传过来的token
  101. this.$store.commit('ssjlToken', params.token);
  102. // 缓存从随手精灵传过来的标识
  103. this.$store.commit('fromSsjl', params.fromSsjl);
  104. // 是否显示 返回标签
  105. this.showLeftArrow = this.$store.getters.fromSsjl === 'true';
  106. this.fromUrl = params.fromUrl;
  107. console.log("fromUrl", this.fromUrl);
  108. //初始化
  109. this.init()
  110. } else {
  111. this.$toast('参数错误')
  112. }
  113. },
  114. methods: {
  115. onNavBack() {
  116. let fromSsjl = this.$store.getters.fromSsjl === 'true';
  117. if(fromSsjl) {
  118. let baseUrl = this.fromUrl;
  119. window.location.href = `${baseUrl}/#/device`;
  120. } else {
  121. this.$router.go(-1);
  122. }
  123. },
  124. async init() {
  125. let ssjlToken = this.$store.getters.ssjlToken;
  126. let re = await this.api('/api/Question/Progress', {
  127. method: 'GET',
  128. sslVerify: false,
  129. withCredentials: false,
  130. params: {
  131. uid: this.uid,
  132. },
  133. }, ssjlToken)
  134. if (re.success) {
  135. if (re.response && re.response.state === -1) {
  136. this.$toast('用户不存在或未绑定手表')
  137. } else if (re.response && re.response.initScaleState === 1 && re.response.progress === 1 && !this.autoJump) {
  138. // 2023.6.1 需求变更,建模完成直接跳到心理健康汇总页面
  139. this.$router.replace(`/psychologicalMain?uid=${this.uid}&fromUrl=${this.fromUrl || ''}`);
  140. } else {
  141. this.info = re.response
  142. }
  143. } else {
  144. this.$toast(re.msg)
  145. }
  146. setTimeout(() => {
  147. this.isSHowPage = true;
  148. }, 800)
  149. },
  150. toQuestion() {
  151. this.$router.replace(`/PsychologicalQuestionnaire?uid=${this.uid}`)
  152. },
  153. api(url, config, token) {
  154. let baseUrl = 'https://dbmq.rzliot.com/heart'
  155. setTimeout(() => {
  156. this.$toast.loading({
  157. message: '',
  158. forbidClick: true,
  159. duration: 0,
  160. })
  161. }, 100)
  162. return new Promise((res) => {
  163. axios({
  164. url: `${baseUrl}${url}`,
  165. ...config,
  166. // 增加请求头部 token
  167. headers: {
  168. 'AuthToken': token
  169. }
  170. })
  171. .then((re) => {
  172. if (re) {
  173. if (re.data) {
  174. console.log(re.data)
  175. res(re.data)
  176. this.$toast.clear()
  177. return
  178. }
  179. this.$toast(`信息获取失败-${re.status}`)
  180. res(true)
  181. this.$toast.clear()
  182. return
  183. }
  184. this.$toast(`信息获取失败-${url}`)
  185. res(true)
  186. this.$toast.clear()
  187. })
  188. .catch((e) => {
  189. this.$toast(`信息获取失败-${url}`)
  190. res(true)
  191. this.$toast.clear()
  192. console.log(e)
  193. })
  194. })
  195. },
  196. },
  197. }
  198. </script>
  199. <style lang="scss" scoped>
  200. @font-face {
  201. font-family: 'iconfont'; /* Project id 2652084 */
  202. src: url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAAQoAAsAAAAACFQAAAPaAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHFQGYACDBgqEIIQDATYCJAMMCwgABCAFhGcHQRtqBxEVnBvJPhLjmMRz8aCJJho3wfN8ne+5817QmS/XTApqUAGT1kmpHaidloBWXGdzOaZE+Aj1S75l+ek70v5OL82zLE6hFEIiJEbx96dyFkjAnwUAJnXNTcUP1HiBAtaxhhUr2KsXyLuo1/rCrIx6BgFM6tACo12HbjZpk4bPmkIRGksqkFbKpPFjhxOWRnRLpRBGCEKXamQTATDWGo+AjeHn5RdRCYNBQGHt0mtM+1Hc+Zr+1VZ+0gf1Gl+CgIcbQABQQI2NmWVIu7MfKk7WQGHWKTUpDKIRjEkjySSEglIHt/zHM0CCWMoUTFVRGBclugwEvto8VnH9qyAIhIDrIApTOVMVOr2mNDQjKSPHeM4zz6ZrPrYDY3fjR7a4+xTrY15tvZVw5KkZtx/X+HznyRPHnvCeqZskVmTOjMmRnF1girdzz7F4ju3uiB/xc53CoFi1HdXMW9Vu1TonY+gTzqB98OucaHakkW3GjxWJhX9kQXymq/AjJ5sfbS5Hc9nm5+KfvW9ZiYfnRXbG8tzG6nK7+u265yW2Hv38lNG3PmqlJo7Hjv0enTXu0fJ0ouuAIf1WL94ysHiw9aA5vca2mth0ZPGOvtu99JioF7HtiBd95LA4E7Gj3qPSVmO6tC3erV1e54F9yvUsu3Bh2Z7l+lwiLGETNtvRp9ylmtsGlm7eieOF8GLvn+zifT/067/LLFd8TdeujrureHTFyFEf+hbPVft+SK96RrBXE7tqx8rt21XpUO2QwwZswmZvsZsOz8+pN3TsrzXZ143c71m5NwLL+4xyo30jdTbxttGdTvRcMG4rPzrU0SFdrfTjHqXWlOrxuHR1FdK1219m/7yFvU52Hh3x6th9I25U9b0QTS1XvFyq35thACTvqtuqZZiOq5kq9v9/w/jtj8cOTW/2P2xpAN5vbXsP+5NxDcwN4RfjFPjbqkFApFYhULpOcFsQQLEkk4cBmLYJfm81QBZvh6uzweUghMlOwSBEcVCEKYdpqhoEsIhCkDDNwaQ67VdbZPsIzBFdDKjEC4GQwRsM0rgKigw+mKa+ECCPHwTJ4A8mrqy2s6gkZs2oBC3oB9SGBudoJJR7QD92iqtiF+RY4wjkSVbM7HFAHmNGvPpCxIFj6mHHT8OuIwhMDRpJKpFQpqmre0liqJ+sYRCFgFgAzQOgxkAMOB8t+e87gHhGOhQMxC52JlKeyAdyEjIAtlcOoLYb6R254ikQBEdHORiiB9gpO9LZSQII9YMaEIOQUA2IB0pSgnJQZbK8un+5XYCJtaUSQ5Ro0kcqeo5kKhy8J7dhKXWs6skEAAA=');
  203. }
  204. .iconfont {
  205. font-family: 'iconfont' !important;
  206. // font-size: 16px;
  207. font-style: normal;
  208. -webkit-font-smoothing: antialiased;
  209. -moz-osx-font-smoothing: grayscale;
  210. }
  211. .icon-caozuochenggong:before {
  212. content: '\e60f';
  213. }
  214. .icon-tishi:before {
  215. content: '\e654';
  216. }
  217. .page {
  218. width: 100%;
  219. min-height: 100%;
  220. box-sizing: border-box;
  221. font-size: 3.6vw;
  222. text-align: left;
  223. background: #f4f4f4;
  224. padding-bottom: 30vw;
  225. .tip {
  226. display: flex;
  227. font-size: 3.3vw;
  228. padding: 6vw 4vw;
  229. justify-content: space-between;
  230. align-items: center;
  231. background: white;
  232. .icon {
  233. overflow: hidden;
  234. display: flex;
  235. justify-content: center;
  236. align-items: center;
  237. width: 40px;
  238. height: 40px;
  239. color: #ff865a;
  240. font-size: 6vw;
  241. border-radius: 50%;
  242. background: #fff5f1;
  243. }
  244. .info {
  245. width: calc(100% - 50px);
  246. line-height: 20px;
  247. text-align: left;
  248. .titie {
  249. color: #ff865a;
  250. }
  251. .content {
  252. color: gray;
  253. }
  254. }
  255. }
  256. .step {
  257. margin-top: 3vw;
  258. padding: 4vw 8vw;
  259. padding-right: 4vw;
  260. background: white;
  261. .name {
  262. display: flex;
  263. align-items: center;
  264. font-size: 3.8vw;
  265. padding-bottom: 2vw;
  266. &::before {
  267. content: '';
  268. display: block;
  269. width: 1vw;
  270. height: 1vw;
  271. border: 2px solid #638ee4;
  272. border-radius: 50%;
  273. margin-left: calc(-2vw - 4px);
  274. margin-right: 1vw;
  275. }
  276. }
  277. .title {
  278. display: flex;
  279. justify-content: space-between;
  280. padding: 3vw 0;
  281. .status {
  282. color: #ff865a;
  283. }
  284. .success {
  285. color: #638ee4;
  286. .icon {
  287. font-size: 4vw;
  288. margin-right: 1vw;
  289. }
  290. }
  291. }
  292. .sub_title {
  293. padding: 3vw 0;
  294. color: gray;
  295. }
  296. }
  297. .button {
  298. position: fixed;
  299. left: 0;
  300. right: 0;
  301. bottom: 15vw;
  302. width: 75vw;
  303. height: 14vw;
  304. margin: auto;
  305. .van-button--info {
  306. background-color: #638ee4;
  307. border: 1px solid #638ee4;
  308. }
  309. }
  310. }
  311. </style>