Ver Fonte

Signed-off-by: 李妹妹 <1639016684@qq.com>

李妹妹 há 2 dias atrás
pai
commit
1c50e65dbb
81 ficheiros alterados com 5059 adições e 984 exclusões
  1. 25 0
      .hbuilderx/launch.json
  2. 0 2
      App.vue
  3. 3 3
      androidPrivacy.json
  4. 5 1
      api/user.js
  5. 12 1
      assets/css/common.less
  6. 2 2
      common/request.js
  7. 85 0
      components/CustomToast.vue
  8. 8 2
      main.js
  9. 4 4
      manifest.json
  10. 86 0
      pages.json
  11. 1 1
      pages/auth/loginIndex.vue
  12. 17 17
      pages/common/launch.vue
  13. 686 0
      pages/device/pulse/transition.vue
  14. 425 56
      pages/device/tongue/facePhoto.nvue
  15. 358 65
      pages/device/tongue/indexOld.nvue
  16. 23 0
      pages/index/agreement.vue
  17. 134 0
      pages/index/error.vue
  18. 120 48
      pages/index/index.vue
  19. 146 0
      pages/index/loading.vue
  20. 568 551
      pages/user/healthReport.vue
  21. 666 0
      pages/user/healthReportOld.vue
  22. 518 0
      pages/user/question.vue
  23. 334 0
      pages/user/success.vue
  24. 393 185
      pages/user/userInfo.vue
  25. 2 2
      postcss.config.js
  26. BIN
      static/image/new/bg_home.png
  27. 45 0
      static/image/new/bg_home.svg
  28. 6 0
      static/image/new/bg_mountain.svg
  29. BIN
      static/image/new/bg_popup.png
  30. 27 0
      static/image/new/bg_popup.svg
  31. 21 0
      static/image/new/bg_square.svg
  32. 7 0
      static/image/new/bg_step.svg
  33. 14 0
      static/image/new/bg_title.svg
  34. BIN
      static/image/new/face.png
  35. 7 0
      static/image/new/icon_arrow.svg
  36. 5 0
      static/image/new/icon_back.svg
  37. BIN
      static/image/new/icon_back1.png
  38. 5 0
      static/image/new/icon_back1.svg
  39. 11 0
      static/image/new/icon_blood.svg
  40. 8 0
      static/image/new/icon_check.svg
  41. 5 0
      static/image/new/icon_check_default.svg
  42. 8 0
      static/image/new/icon_face.svg
  43. 5 0
      static/image/new/icon_female.svg
  44. 5 0
      static/image/new/icon_femalebai.svg
  45. 5 0
      static/image/new/icon_hand.svg
  46. 7 0
      static/image/new/icon_heat.svg
  47. BIN
      static/image/new/icon_home.png
  48. 7 0
      static/image/new/icon_home.svg
  49. 2 0
      static/image/new/icon_item.svg
  50. 5 0
      static/image/new/icon_man.svg
  51. 5 0
      static/image/new/icon_manbai.svg
  52. 13 0
      static/image/new/icon_question.svg
  53. 13 0
      static/image/new/icon_report.svg
  54. 14 0
      static/image/new/icon_sad.svg
  55. 6 0
      static/image/new/icon_safe.svg
  56. 5 0
      static/image/new/icon_selected.svg
  57. BIN
      static/image/new/icon_success.png
  58. 11 0
      static/image/new/icon_taiji.svg
  59. 5 0
      static/image/new/icon_tone.svg
  60. 6 0
      static/image/new/icon_warning.svg
  61. 1 0
      static/image/new/img_advice.svg
  62. 6 0
      static/image/new/img_cloud.svg
  63. 3 0
      static/image/new/img_cloud1.svg
  64. 3 0
      static/image/new/img_cloud2.svg
  65. 6 0
      static/image/new/img_error.svg
  66. BIN
      static/image/new/img_example.png
  67. 12 0
      static/image/new/img_finish.svg
  68. BIN
      static/image/new/img_scan.png
  69. BIN
      static/image/new/img_title1.png
  70. 12 0
      static/image/new/img_title1.svg
  71. BIN
      static/image/new/img_title2.png
  72. 12 0
      static/image/new/img_title2.svg
  73. BIN
      static/image/new/img_tongue.png
  74. 2 0
      static/image/new/img_welcom.svg
  75. 20 0
      static/image/new/logo.svg
  76. 19 0
      static/image/new/logo2.svg
  77. BIN
      static/image/new/mask_face.png
  78. BIN
      static/image/new/mask_tongue.png
  79. BIN
      static/logo2.png
  80. 54 39
      uni_modules/gb-progress/package.json
  81. 5 5
      utils/config.js

+ 25 - 0
.hbuilderx/launch.json

@@ -0,0 +1,25 @@
+{
+    "version" : "1.0",
+    "configurations" : [
+        {
+            "playground" : "custom",
+            "type" : "uni-app:app-android"
+        },
+        {
+            "app" : {
+                "launchtype" : "local"
+            },
+            "default" : {
+                "launchtype" : "local"
+            },
+            "h5" : {
+                "launchtype" : "local"
+            },
+            "mp-weixin" : {
+                "launchtype" : "local"
+            },
+            "provider" : "aliyun",
+            "type" : "uniCloud"
+        }
+    ]
+}

+ 0 - 2
App.vue

@@ -16,7 +16,6 @@
 		mapGetters,
 		mapActions
 	} from 'vuex';
-
 	let updateDownloadTask = null;
 	let notificationIntance = null;
 	let pausing = false;
@@ -38,7 +37,6 @@
 
 	let offlineMsg = null;
 	let offlineHandleNewMsg = null;
-
 	export default {
 		globalData: {
 			wsUrl: 'ws://doctor.ai.cdwjyyh.com',

+ 3 - 3
androidPrivacy.json

@@ -2,7 +2,7 @@
     "version" : "1",
     "prompt" : "template",
     "title" : "服务协议和隐私政策",
-    "message" : "非常感谢您使用医疗设备,我们深知保护个人隐私的重要性,所以请您在使用前,仔细阅读并充分理解<a href=\"https://userapp.his.cdwjyyh.com/web/userAgreement\">《用户协议》</a>和<a href=\"https://userapp.his.cdwjyyh.com/web/privacyPolicy\">《隐私政策》</a>的内容。<br/>如您同意,请点击\"同意并使用开始\"开始使用我们的产品和服务。",
+    "message" : "非常感谢您使用四诊仪,我们深知保护个人隐私的重要性,所以请您在使用前,仔细阅读并充分理解<a href=\"https://userapp.his.cdwjyyh.com/web/userAgreement\">《用户协议》</a>和<a href=\"https://userapp.his.cdwjyyh.com/web/privacyPolicy\">《隐私政策》</a>的内容。<br/>如您同意,请点击\"同意并使用开始\"开始使用我们的产品和服务。",
     "buttonAccept" : "同意并接受",
     "buttonRefuse" : "暂不同意",
     "hrefLoader" : "system",
@@ -29,10 +29,10 @@
             "color" : "#333"
         },
         "buttonRefuse" : {
-            "color" : "#88570B"
+            "color" : "#37C3A0"
         },
         "buttonVisitor" : {
-            "color" : "#88570B"
+            "color" : "#37C3A0"
         }
     }
 }

+ 5 - 1
api/user.js

@@ -37,7 +37,11 @@ let request = new Request().http
  
  //新增客户
  export function addUser(data) {
- 	 return request('/app/fsUser/add',data,'POST','application/json;charset=UTF-8');
+ 	 return request('/app/fsUser/addV2',data,'POST','application/json;charset=UTF-8');
+ }
+ //问诊
+ export function consultationCollect(data) {
+ 	 return request('/app/fsUser/consultationCollect',data,'POST','application/json;charset=UTF-8');
  }
  //修改客户
  export function editUser(data) {

+ 12 - 1
assets/css/common.less

@@ -100,7 +100,12 @@
     flex-direction: column;
     align-items: flex-end;
   }
-  
+  .y-c {
+    display: flex;
+    flex-direction: column;
+	align-items: center;
+   justify-content: center;
+  }
   /*y竖直居中*/
   .y-f {
     display: flex;
@@ -122,6 +127,12 @@
     align-items: center;
     justify-content: space-between;
   }
+  .y-ac {
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    justify-content: space-around;
+  }
  /* layout */
  .acea-row {
    display: flex;

+ 2 - 2
common/request.js

@@ -2,8 +2,8 @@
 export default class Request {
 	http(router, data = {}, method,contentType) {
 		let that = this;
-	    //let path ='http://192.168.110.11:8007';//app
-		let path='https://devapi.ylrzfs.com/prod-api';
+	    //let path ='http://192.168.110.10:8007';//app
+	    let path='https://devapi.ylrzfs.com/prod-api';
 		let token = uni.getStorageSync('AppToken');
 		
 		// // #ifdef H5

+ 85 - 0
components/CustomToast.vue

@@ -0,0 +1,85 @@
+<template>
+  <view class="custom-toast" v-if="show" id="CustomToast">
+    <view class="toast-content">
+		<image class="imgbox" src="/static/image/new/icon_warning.svg"></image>
+      <text class="toast-text">{{ text }}</text>
+    </view>
+  </view>
+</template>
+
+<script>
+export default {
+  name: 'CustomToast',
+  data() {
+    return {
+      show: false,
+      text: '',
+      duration: 1500, // 默认时间
+      timer: null
+    };
+  },
+  methods: {
+    // 显示提示
+    showToast(options) {
+      // 清除之前的定时器
+      if (this.timer) clearTimeout(this.timer);
+      
+      this.text = options.title || '';
+      this.duration = options.duration || 1500;
+      this.show = true;
+      
+      // 自动隐藏
+      this.timer = setTimeout(() => {
+        this.show = false;
+      }, this.duration);
+    },
+    // 手动隐藏
+    hideToast() {
+      this.show = false;
+      if (this.timer) clearTimeout(this.timer);
+    }
+  },
+  beforeDestroy() {
+    if (this.timer) clearTimeout(this.timer);
+  }
+};
+</script>
+
+<style scoped>
+.custom-toast {
+  position: fixed;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  pointer-events: none; /* 不阻挡底层点击 */
+  z-index: 99999;
+}
+
+.toast-content {
+  background: rgba(0, 0, 0, 0.7);
+  color: #fff;
+  padding: 28px 38px;
+  border-radius: 20px;
+  max-width: 70%;
+  text-align: center;
+  display: flex;
+  align-items: center;
+}
+.imgbox{
+	margin-right: 40px;
+	width: 56px;
+	height: 56px;
+}
+/* 核心:自定义文字大小(按需调整) */
+.toast-text {
+  font-family: PingFang SC, PingFang SC;
+  font-weight: 400;
+  font-size: 28px;
+  color: #FFFFFF;
+  line-height: 42px;
+}
+</style>

+ 8 - 2
main.js

@@ -5,7 +5,6 @@ import Vue from 'vue'
 import store from './store'
 // 引入全局uView
 import uView from "@/node_modules/uview-ui";
-
 import {parseIDCardInfo,logout,parseText,getDictLabelName,parseIdCard,getAge,parsePhone,isEmpty,
 isLogin,navBack,navTo,getUserInfo,formatHour,dateFormatStr,registerIdCode,updateMsgDot,handleBindCompanyFsUser,
 setSource,companyUserIsLogin,checkWechatInstalled,isAndroid,isIos,loginNavTo} from './utils/common.js'
@@ -19,7 +18,6 @@ import timeFormat from './utils/timeFormat.js'
 import dataProcess from './utils/dataProcess.js'
 // Vuex
 import Vuex from 'vuex'
-
 // #ifndef VUE3
 import './uni.promisify.adaptor'
 Vue.config.productionTip = false
@@ -77,6 +75,14 @@ export function createApp() {
 	app.use(uviewPlus)
 	app.use(Vuex)
 	app.use(store)
+	app.config.globalProperties.$toast = (options) => {
+	   // 创建虚拟节点
+	   const toastVnode = createVNode(CustomToast);
+	   // 挂载到DOM
+	   render(toastVnode, document.body);
+	   // 调用组件的showToast方法
+	   toastVnode.component.exposed.showToast(options);
+	 };
 	app.config.globalProperties.$isLogin = isLogin
 	app.config.globalProperties.$isEmpty = isEmpty
 	app.config.globalProperties.$parsePhone = parsePhone

+ 4 - 4
manifest.json

@@ -1,9 +1,9 @@
 {
-    "name" : "医疗设备",
+    "name" : "AI四诊仪",
     "appid" : "__UNI__5EE3147",
     "description" : "汇集丰富的中医药知识,足不出户学中医。包含药膳、经络、中药、名方等,靠谱的医学科普让您学会居家调养,健康生活。",
-    "versionName" : "1.1.1",
-    "versionCode" : 111,
+    "versionName" : "1.1.2",
+    "versionCode" : 112,
     "transformPx" : false,
     /* 5+App特有相关 */
     "app-plus" : {
@@ -303,7 +303,7 @@
     //     "MODE" : 2 // 启用Vue2兼容模式
     // }
     "h5" : {
-        "title" : "医疗设备",
+        "title" : "AI四诊仪",
         "devServer" : {
             "https" : false
         },

+ 86 - 0
pages.json

@@ -98,6 +98,18 @@
 				"navigationStyle": "custom"
 			}
 		},
+		{
+			"path": "pages/device/pulse/transition",
+			"style": {
+				"navigationBarTitleText": "动画",
+				"navigationStyle": "custom",
+				"enablePullDownRefresh": false,
+				"navigationBarBackgroundColor": "#ffffff",
+				"scrollIndicator": "none",
+				"bounce": "none",
+				"navigationBarTextStyle": "black"
+			}
+		},
 		// {
 		// 	"path": "pages/auth/login",
 		// 	"aliasPath": "/",
@@ -140,6 +152,42 @@
 
 			}
 		},
+		{
+			"path": "pages/index/error",
+			"style": {
+				"navigationBarTitleText": "系统报错",
+				"navigationStyle": "custom",
+				"enablePullDownRefresh": false,
+				"navigationBarBackgroundColor": "#ffffff",
+				"scrollIndicator": "none",
+				"bounce": "none",
+				"navigationBarTextStyle": "black"
+			}
+		},
+		{
+			"path": "pages/index/agreement",
+			"style": {
+				"navigationBarTitleText": "用户协议",
+				"navigationStyle": "custom",
+				"enablePullDownRefresh": false,
+				"navigationBarBackgroundColor": "#ffffff",
+				"scrollIndicator": "none",
+				"bounce": "none",
+				"navigationBarTextStyle": "black"
+			}
+		},
+		{
+			"path": "pages/index/loading",
+			"style": {
+				"navigationBarTitleText": "分析中",
+				"navigationStyle": "custom",
+				"enablePullDownRefresh": false,
+				"navigationBarBackgroundColor": "#ffffff",
+				"scrollIndicator": "none",
+				"bounce": "none",
+				"navigationBarTextStyle": "black"
+			}
+		},
 		{
 			"path": "pages/user/myUserList",
 			"style": {
@@ -158,6 +206,31 @@
 			"path": "pages/user/userInfo",
 			"style": {
 				"navigationBarTitleText": "个人信息",
+				"navigationStyle": "custom",
+				"enablePullDownRefresh": false,
+				"navigationBarBackgroundColor": "#ffffff",
+				"scrollIndicator": "none",
+				"bounce": "none",
+				"navigationBarTextStyle": "black"
+			}
+		},
+		{
+			"path": "pages/user/success",
+			"style": {
+				"navigationBarTitleText": "提交成功",
+				"navigationStyle": "custom",
+				"enablePullDownRefresh": false,
+				"navigationBarBackgroundColor": "#ffffff",
+				"scrollIndicator": "none",
+				"bounce": "none",
+				"navigationBarTextStyle": "black"
+			}
+		},
+		{
+			"path": "pages/user/question",
+			"style": {
+				"navigationBarTitleText": "问诊",
+				"navigationStyle": "custom",
 				"enablePullDownRefresh": false,
 				"navigationBarBackgroundColor": "#ffffff",
 				"scrollIndicator": "none",
@@ -177,6 +250,18 @@
 				"navigationBarTextStyle": "black"
 			}
 		},
+		{
+			"path": "pages/user/healthReportOld",
+			"style": {
+				"navigationBarTitleText": "健康报告",
+				"navigationStyle": "custom",
+				"enablePullDownRefresh": false,
+				"navigationBarBackgroundColor": "#ffffff",
+				"scrollIndicator": "none",
+				"bounce": "none",
+				"navigationBarTextStyle": "black"
+			}
+		},
 		// {
 		// 	"path": "pages/auth/h5WxLogin",
 		// 	"style": {
@@ -295,6 +380,7 @@
 
 	],
 	"globalStyle": {
+		"autoscan": true,
 		"navigationBarTextStyle": "white",
 		"navigationBarTitleText": "",
 		"navigationBarBackgroundColor": "#ffffff",

+ 1 - 1
pages/auth/loginIndex.vue

@@ -246,7 +246,7 @@ page {
 .border-box {
 	width: 100vw;
 	height: 100vh;
-	background-image: url(/static/image/device/ipad_yjf_boder.png);
+	background-image:url(/static/image/device/ipad_yjf_boder.png);
 	background-repeat: no-repeat;
 	position: relative;
 	background-size: 100% 100%;

+ 17 - 17
pages/common/launch.vue

@@ -18,24 +18,24 @@
 		},
 		methods: {
 			navigatHandler: function() {
-				if (!this.$isLogin()) {
-						setTimeout(()=>{
-							uni.reLaunch({
-								url: '../auth/loginIndex',
-								//url: '../index/typulse',
-								animationType: 'none',
-								animationDuration: 2000
-							})
-						},200);
+				// if (!this.$isLogin()) {
+				// 		setTimeout(()=>{
+				// 			uni.reLaunch({
+				// 				url: '../auth/loginIndex',
+				// 				//url: '../index/index',
+				// 				animationType: 'none',
+				// 				animationDuration: 2000
+				// 			})
+				// 		},200);
 						
-					 // #ifdef APP-PLUS
-						 plus.navigator.closeSplashscreen();
-					// #endif
+				// 	 // #ifdef APP-PLUS
+				// 		 plus.navigator.closeSplashscreen();
+				// 	// #endif
 						
-				} else {
-					if(uni.getStorageSync("openUrl")) {
-						return
-					}
+				// } else {
+				// 	if(uni.getStorageSync("openUrl")) {
+				// 		return
+				// 	}
 					uni.reLaunch({
 						url: '../index/index',
 						// url: '../course/index',
@@ -43,7 +43,7 @@
 						animationType: 'none',
 						animationDuration: 2000
 					})
-			 	}
+			 	// }
 			},
 			getDicts:function(){
 				getDicts().then(

+ 686 - 0
pages/device/pulse/transition.vue

@@ -0,0 +1,686 @@
+<template>
+	<view class="content">
+		<!-- 个人信息 -->
+		<view class="blur-bg-2"></view>
+		<view class="top-btn">
+			<view class="back x-c" @click="$navBack()">
+				<image src='/static/image/new/icon_back.svg'></image>
+				返回
+			</view>
+			<view class="title x-c">
+				<image src='/static/image/new/img_title1.svg'></image>
+				<text>脉诊</text>
+				<image src='/static/image/new/img_title2.svg'></image>
+			</view>
+			<view class="index x-c" @click="goIndex">
+				<image src='/static/image/new/icon_home.svg'></image>
+				首页
+			</view>
+		</view>
+		<view class="userBox y-bc">
+			<view class="tranBox">
+				<view>引导动画</view>
+			</view>
+			<view class="btnBox">
+				<view class="timer x-c" v-if="status == 'init'|| status == 'disinfecting'">
+					<image src='/static/image/new/icon_safe.svg'></image>
+					一键消毒,安心检测~
+				</view>
+				<view class="timer2 y-c" v-if="status == 'fail'">
+					<image src='/static/image/new/icon_sad.svg'></image>
+					采集失败,调整下姿势,再试一试呢
+				</view>
+				<view class="timer3 y-c" v-if="status == 'collecting'">
+					<view class="progress">
+						<u-line-progress :percentage="30" :showText="false" height="18" inactiveColor="#fff" activeColor="#3CD3AD"></u-line-progress>
+					</view>
+					正在精准采集中...
+				</view>
+				<view class="timer4 y-c" v-if="status == 'guide'">
+					<view class="item x-c">
+						<image src='/static/image/new/icon_item.svg'></image>
+						请将手放在脉诊垫上
+					</view>
+					<view class="item x-c">
+						<image src='/static/image/new/icon_item.svg'></image>
+						手腕放松,掌心向上
+					</view>
+				</view>
+				<view class="timer5 y-c" v-if="status == 'sensing'">
+					<view class="progress">
+						<u-loading-icon mode="circle" color="#3CD3AD" size="62"></u-loading-icon>
+					</view>
+					正在感知您的脉象 请保持放松
+				</view>
+				<view class="btn" @click="toConnect" v-if="status == 'init'">去脉诊</view>
+				<!-- <view class="btn" @click="start" v-if="status == 'init'">一键消毒</view>
+				<view class="btn loading-btn" v-if="status == 'disinfecting'">
+					<u-loading-icon color="#fff" size="48"></u-loading-icon>消毒中
+				</view>
+				<view class="btn" @click="restartDetect" v-if="status == 'fail'">重新检测</view> -->
+			</view>
+		</view>
+		<view v-if="isShow" class="mask">
+			<view class="popup-container">
+				<image class="bg" src='/static/image/new/bg_popup.svg'></image>
+				<view class="title-t x-c">
+					<image src='/static/image/new/img_title1.svg'></image>
+					<text>提示</text>
+					<image src='/static/image/new/img_title2.svg'></image>
+					</view>
+				<view class="title-r">点击确认查看检测报告</view>
+				<!-- <image style="width: 200px;height: 200px;margin-bottom: 20px;" :src="qUrl"></image> -->
+				<view class="x-c">
+					<!-- <view class="btn-l" @click="close">取消</view> -->
+					<view class="btn-r" @click="closeP">确认</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		getUserInfoByUserId,
+		getUserInfo
+	} from '@/api/user.js';
+	import {
+		addPulse
+	} from '@/api/healthTongue.js'
+	export default {
+		data() {
+			return {
+				// 状态:init(初始)/disinfecting(消毒中)/collecting(采集ing)/fail(失败)/guide(引导)
+				status: 'init',
+				progressPercent: 0, // 进度条百分比
+				progressTimer: null ,// 定时器
+				showProgress: false, // 是否显示进度条
+				info: null,
+				// 插件实例
+				tyPulse: null,
+				// 状态
+				initStatus: false,
+				deviceConnected: false,
+				measuring: false,
+				// 设备信息
+				deviceInfo: null,
+				// 测量相关
+				measureProgress: 0,
+				currentStage: '待机',
+				lastResult: null,
+				appId: "nehijR6y",
+				appSecret: "f740435d1b84b9944a52f064dd1ecf6e8a76f546",
+				uid: "userid000067",
+				qUrl: '',
+				isShow:false,
+				initData:{},
+				user:{}
+			}
+		},
+		onLoad(option) {
+			//this.startCountDown();
+			this.initPlugin()
+		},
+		onShow() {
+			this.user=JSON.parse(uni.getStorageSync('userInfo'));
+	// 清除所有定时器,防止内存泄漏
+			clearInterval(this.progressTimer);
+			this.progressTimer = null;
+		},
+		methods: {
+			//开始消毒
+			start() {
+				this.status = 'disinfecting';
+				//this.status = 'sensing';
+								this.showProgress = true;
+								// 模拟消毒进度
+								this.progressPercent = 0;
+								this.progressTimer = setInterval(() => {
+									if (this.progressPercent >= 100) {
+										clearInterval(this.progressTimer);
+										this.progressTimer = null;
+										// 消毒完成后进入引导状态
+										this.status = 'guide';
+										this.showProgress = false;
+										// 3秒后自动进入脉象感知状态
+										setTimeout(() => {
+											this.startSensePulse();
+										}, 3000);
+										return;
+									}
+									this.progressPercent += 2;
+								}, 100);
+			},
+				/**
+						 * 开始感知脉象
+						 */
+						startSensePulse() {
+							this.status = 'sensing';
+							this.showProgress = false;
+							
+							// 模拟脉象感知过程(5秒)
+							setTimeout(() => {
+								// 感知完成后进入精准采集状态
+								this.startCollect();
+							}, 5000);
+						},
+						
+						/**
+						 * 开始精准采集
+						 */
+						startCollect() {
+							this.status = 'collecting';
+							this.showProgress = true;
+							this.progressPercent = 0;
+							// 模拟采集进度(随机失败/成功)
+							this.progressTimer = setInterval(() => {
+								if (this.progressPercent >= 100) {
+									clearInterval(this.progressTimer);
+									this.progressTimer = null;
+									// 随机模拟采集结果(70%成功,30%失败)
+									const isSuccess = Math.random() > 0.3;
+									if (isSuccess) {
+										// 采集成功,跳转到分析页面
+										//this.goAnalysis();
+									} else {
+										// 采集失败
+										this.status = 'fail';
+										this.showProgress = false;
+									}
+									return;
+								}
+								this.progressPercent += 1;
+							}, 150);
+						},
+			//重新检测
+			restartDetect() {
+				this.status = 'init';
+			},
+			//跳转分析
+			goAnalysis() {
+				uni.redirectTo({
+					url: '/pages/index/loading', // 替换为实际分析页面路径
+					fail: (err) => {
+						console.error('跳转失败:', err);
+						uni.showToast({
+							title: '跳转失败',
+							icon: 'none'
+						});
+					}
+				});
+			},
+			// 初始化插件
+			async initPlugin() {
+				try {
+					// this.addLog('开始初始化插件...');
+					// 获取插件实例
+					this.tyPulse = uni.requireNativePlugin('TyPulseManager');
+					if (!this.tyPulse) {
+						throw new Error('无法获取插件实例');
+					}
+					// 初始化
+					await new Promise((resolve, reject) => {
+						this.tyPulse.initSDK(this.appId, this.appSecret, this.uid, (
+							result) => {
+							if (result.success) {
+								resolve();
+							} else {
+								reject(new Error(result.error));
+							}
+						});
+					});
+			
+					this.initStatus = true;
+					console.log('插件初始化成功');
+					// uni.showToast({
+					// 	title: '初始化成功',
+					// 	icon: 'success'
+					// });
+			
+				} catch (error) {
+					console.log(`初始化失败: ${error.message}`);
+					uni.showToast({
+						title: '初始化失败',
+						icon: 'error'
+					});
+				}
+			},
+			toMeasure() {
+				try {
+					// 设置自动屏幕方向
+					this.tyPulse.toMeasure((result) => {
+						if (result.success) {
+							if (result.cmdType == "pulseResult") {
+								this.info = result;
+								console.log('脉诊回调结果:', result);
+								this.addPulse()
+							}
+							if (result.cmdType == "deviceConnect") {
+								//获取设备信息
+								this.getDeviceInfo();
+							}
+						}
+					});
+				} catch (error) {
+					console.log(`测脉失败: ${error.message}`);
+				}
+			},
+			// 获取设备信息
+			getDeviceInfo() {
+				try {
+					this.tyPulse.getDeviceInfo((result) => {
+						if (result.success && result.data) {
+							this.deviceInfo = result.data;
+							this.deviceConnected = result.data.isConnected;
+							//console.log('设备信息获取成功:' + JSON.stringify(result.data));
+						}
+					});
+				} catch (error) {
+					console.log(`获取设备信息失败: ${error.message}`);
+				}
+			},
+			toConnect() {
+				// if (this.$isEmpty(this.selectUser)) {
+				// 	uni.showToast({
+				// 		title: '请先选择就诊人',
+				// 		icon: 'none'
+				// 	});
+				// 	return;
+				// }
+				this.isConnect = true
+				this.toMeasure()
+			},
+			addPulse() {
+				if (this.$isEmpty(this.info)) {
+					uni.showToast({
+						title: '测量失败,请重试',
+						icon: 'none'
+					});
+					return;
+				}
+				const data = {
+					userId: this.user.fsUserId,
+					sex: this.user.sex,
+					name: this.user.username,
+					pulseEquipmentResult: {
+						reportData: JSON.parse(this.info.reportData),
+						success: this.info.success,
+						measureId: this.info.measureId,
+						pulseUrl: JSON.parse(this.info.pr)
+					}
+				}
+				console.log("qxj addPulse data",data);
+				uni.showLoading({
+					title: "处理中...",
+					mask: true
+				})
+				addPulse(data).then(res => {
+						console.log('zaizz', data, res)
+						if (res.code == 200) {
+							uni.hideLoading();
+							//this.qUrl = res.codeImage
+							this.isConnect = false
+							this.isResult = true
+						} else {
+							uni.hideLoading();
+							this.isConnect = false
+							this.errMsg = res.msg;
+							uni.showToast({
+								icon: 'none',
+								title: res.msg,
+							});
+						}
+					},
+					rej => {}
+				);
+			},
+			closeP() {
+				this.isResult = false
+				uni.navigateTo({
+					url: "/pages/user/healthReportOld?userId="+this.user.fsUserId
+				})
+			
+			},
+			//首页
+			goIndex() {
+				uni.reLaunch({
+					url: '/pages/index/index',
+					animationType: 'none',
+					animationDuration: 2000
+				})
+			},
+
+		}
+	}
+</script>
+
+
+<style scoped lang="scss">
+	page {
+		background: #fff;
+		font-size: 16px
+	}
+/* 遮罩层样式 */
+	.mask {
+		position: fixed;
+		top: 0;
+		left: 0;
+		right: 0;
+		bottom: 0;
+		background-color: rgba(0, 0, 0, 0.5);
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		z-index: 999;
+		animation: fadeIn 0.3s ease;
+	}
+
+	/* 弹窗容器样式 */
+	.popup-container {
+		//width: 50%;
+		width: 620px;
+		height: 352px;
+		background: #FFFFFF;
+		border-radius: 39px 39px 39px 39px;
+		animation: scaleIn 0.3s ease;
+		overflow: hidden;
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+		justify-content: space-between;
+		padding:43px;
+		position: relative;
+		.bg{
+			width: 100%;
+			height: 244px;
+			position: absolute;
+			top:0
+		}
+		.title-t {
+			image{
+				width: 153px;
+				height: 25px;
+			}
+			text{
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 500;
+				font-size: 32px;
+				color: #333333;
+				margin: 0 10px;
+			}
+		}
+
+		.title-r {
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
+			font-size: 28px;
+			color: #333333;
+		}
+       .btn-l{
+		   display: flex;
+		   align-items: center;
+		   justify-content: center;
+		   font-family: PingFang SC, PingFang SC;
+		   font-weight: 600;
+		   font-size: 28px;
+		   color: #37C3A0;
+		   width: 220px;
+		   height: 64px;
+		   border-radius: 121px 121px 121px 121px;
+		   border: 2px solid #37C3A0;
+		   margin-right: 40px;
+	   }
+		.btn-r {
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			width: 220px;
+			height: 64px;
+			background: #37C3A0;
+			border-radius: 121px 121px 121px 121px;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 600;
+			font-size: 28px;
+			color: #FFFFFF;
+		}
+	}
+	.content {
+		width: 100%;
+		height: 100vh;
+		background: #D8F6EF;
+		padding: 28px;
+		display: flex;
+		flex-direction: column;
+
+		.blur-bg-2 {
+			width: 350px;
+			height: 350px;
+			background: #FFFDCC;
+			// opacity: 0.47;
+			filter: blur(200px);
+			position: absolute;
+			z-index: 1;
+			top: 60px;
+			right: calc(0px - 107px);
+			pointer-events: none
+		}
+	}
+
+	.top-btn {
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		z-index: 2;
+
+		.back {
+			width: 140px;
+			height: 48px;
+			background: rgba(255, 255, 255, 0.64);
+			border-radius: 45px 45px 45px 45px;
+			border: 2px solid #FFFFFF;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 500;
+			font-size: 22px;
+			color: #327E6F;
+
+			image {
+				margin-right: 4px;
+				width: 24px;
+				height: 24px;
+			}
+		}
+
+		.title {
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 600;
+			font-size: 36px;
+			color: #327E6F;
+			line-height: 54px;
+
+			text {
+				margin: 0 14px;
+			}
+
+			image {
+
+				width: 153px;
+				height: 25px;
+			}
+		}
+
+		.index {
+			width: 140px;
+			height: 48px;
+			background: rgba(255, 255, 255, 0.64);
+			border-radius: 55px 55px 55px 55px;
+			border: 2px solid #FFFFFF;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 500;
+			font-size: 22px;
+			color: #327E6F;
+
+			image {
+				margin-right: 4px;
+				width: 24px;
+				height: 24px;
+			}
+		}
+	}
+
+	.userBox {
+		flex: 1;
+		margin-top: 28px;
+		background: rgba(255, 255, 255, 0.7);
+		border-radius: 24px 24px 24px 24px;
+		padding: 27px 40px;
+		z-index: 9;
+
+		.tranBox {
+			display: flex;
+			align-items: center;
+			flex-direction: column;
+			justify-content: center;
+			margin-top: 85px;
+			width: 727px;
+			height: 442px;
+			background: #FFFFFF;
+			border-radius: 36px 36px 36px 36px;
+
+			view {
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 600;
+				font-size: 40px;
+				color: #7FD7C5;
+			}
+
+			image {
+				width: 99px;
+				height: 99px;
+			}
+
+			.title {
+				margin-top: 42px;
+				width: 468px;
+				height: 57px;
+				line-height: 57px;
+				text-align: center;
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 500;
+				font-size: 35px;
+				color: #333333;
+				background-image: url(/static/image/new/img_cloud.svg);
+				background-repeat: no-repeat;
+				position: relative;
+				background-size: 100% 100%;
+			}
+
+			.text {
+				margin-top: 11px;
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 400;
+				font-size: 28px;
+				color: #333333;
+			}
+		}
+
+		.btnBox {
+			display: flex;
+			align-items: center;
+			flex-direction: column;
+
+			.timer {
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 400;
+				font-size: 32px;
+				color: #333333;
+				line-height: 72px;
+
+				image {
+					width: 32px;
+					height: 32px;
+					margin-right: 20px;
+				}
+			}
+
+			.timer2 {
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 400;
+				font-size: 28px;
+				color: #333333;
+				line-height: 38px;
+
+				image {
+					width: 84px;
+					height: 84px;
+				}
+			}
+
+.timer3 {
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 400;
+				font-size: 28px;
+				color: #333333;
+				line-height: 72px;
+				margin-bottom: 56px;
+				.progress{
+					width: 420px;
+					margin-bottom: 33px;
+				}
+			}
+.timer4 {
+	margin-bottom: 60px;
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 400;
+				font-size: 32px;
+				color: #333333;
+				line-height: 48px;
+               .item{
+				   margin-top: 28px;
+			   }
+				image {
+					width: 32px;
+					height: 32px;
+					margin-right: 30px;
+				}
+			}
+			.timer5 {
+				margin-bottom: 56px;
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 400;
+				font-size: 28px;
+				color: #333333;
+				line-height: 45px;
+				.progress{
+					margin-bottom: 32px;
+				}
+						}
+			.btn {
+				margin-top: 28px;
+				margin-bottom: 29px;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				width: 360px;
+				height: 68px;
+				background: #37C3A0;
+				border-radius: 121px 121px 121px 121px;
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 600;
+				font-size: 28px;
+				color: #FFFFFF;
+				transition: all 0.3s;
+
+				// 消毒中按钮样式
+				&.loading-btn {
+					display: flex;
+					align-items: center;
+					justify-content: center;
+					background: #37C3A0;
+					opacity: 0.6;
+					pointer-events: none; // 禁用点击
+				}
+			}
+		}
+
+	}
+</style>

+ 425 - 56
pages/device/tongue/facePhoto.nvue

@@ -5,27 +5,50 @@
 		
 		<cover-view class="cover-view" :style="{width: width + 'px',height: height + 'px'}">
 			<cover-view class="uni-nav-bar" :style="{width: width + 'px'}">
-				<cover-view :style="{height: statusBarHeight,width: width + 'px'}"></cover-view>
-					<cover-view class="uni-nav-barbox">
-						<cover-view class="flex-center boder-box" @click="back">
-							<cover-image class="uni-nav-back" src="@/static/image/device/back_icon33.png" mode="aspectFill"></cover-image>
-							<text class="uni-nav-title-t">返回</text>
+				<cover-view class="uni-nav-bar" :style="{width: width + 'px',top:statusBarHeight}">
+					<!-- <cover-view :style="{height: statusBarHeight,width: width + 'px'}"></cover-view> -->
+						<cover-view class="uni-nav-barbox">
+							<cover-view class="flex-center" @click="back">
+								<cover-image class="uni-nav-back" src="@/static/image/new/icon_back1.png" mode="aspectFill"></cover-image>
+								<text class="uni-nav-title-t">返回</text>
+							</cover-view>
 						</cover-view>
-					</cover-view>
+						<cover-view class="title-box" :style="{width: width + 'px'}">
+							<cover-view :style="{height: statusBarHeight,width: width + 'px'}"></cover-view>
+							<text class="title">请您正对摄像头</text>
+							<text class="tips">确保正脸在辅助框内,保持面部无遮挡,表情自然</text>
+						</cover-view>
+						<!-- <cover-view :style="{height: statusBarHeight,width: width + 'px'}"></cover-view> -->
+							<cover-view class="uni-nav-barbox">
+								<cover-view class="flex-center" @click="showConfirmModal">
+									<cover-image class="uni-nav-back" src="@/static/image/new/icon_home.png" mode="aspectFill"></cover-image>
+									<text class="uni-nav-title-t">首页</text>
+								</cover-view>
+							</cover-view>
+				</cover-view>
 			</cover-view>
-			<cover-view class="title-box" :style="{width: width + 'px'}">
+			<!-- <cover-view class="title-box" :style="{width: width + 'px'}">
 				<cover-view :style="{height: statusBarHeight,width: width + 'px'}"></cover-view>
-				<text class="title">请拍摄面部</text>
-				<text class="tips">面部保持在中间,无遮挡,平视摄像头</text>
-			</cover-view>
+				<text class="title">请您正对摄像头</text>
+				<text class="tips">确保正脸在辅助框内,保持面部无遮挡,表情自然</text>
+			</cover-view> -->
+			<cover-view class="imagebox" :style="{width:width + 'px',height: height+ 'px'}">
+					<!-- <view v-if="width<height" :style="{width:width + 'px',height: height/4+ 'px'}" style="background:#262523 ;"></view> -->
+					<image  class="face"  :style="{width:width + 'px',height: height+ 'px'}" src="@/static/image/new/mask_face.png" mode="aspectFill"></image>
+			  <cover-view class="countdown-box" :style="{width:width + 'px',height: height+ 'px'}">
+			  <text class="title" v-if="countdownTimer && currentCount > 0">{{ currentCount }}</text>
+			 <image  v-if="isResult" class="success" src="@/static/image/new/icon_success.png" mode="aspectFill"></image>
+			 <text v-if="isResult" class="desc">即将开始舌诊检测 {{countDown2}}s</text>
+			 <text v-if="hasTakenPhoto" class="error"  @click="handleReScan">重新扫描</text>
+			  </cover-view>
+			  </cover-view>
 			<!-- <cover-view class="box" :style="{width:width + 'px',height: height + 'px'}">
 					<cover-view class="imagebox" :style="{width:width + 'px'}">
 						<cover-image class="face" :style="{width:width + 'px'}" src="@/static/image/device/facial_photography_mask_bg.png" mode="aspectFill"></cover-image>
 					</cover-view>
 			</cover-view> -->
 		</cover-view>
-	
-		<view class="camera-footer" id="camera-footer" :style="{width: width + 'px'}">
+		<!-- <view class="camera-footer" id="camera-footer" :style="{width: width + 'px'}">
 			<view class="camera-options" :style="{width: width + 'px'}">
 				<view class="camera-options-left camera-item" @click="handleAlbum">
 					<image src="@/static/image/device/album_icon24.png" mode="scaleToFill" style="width: 34rpx;height:34rpx;margin-bottom: 5rpx;"></image>
@@ -39,7 +62,7 @@
 					<text class="camera-item-t">切换摄像头</text>
 				</view>
 			</view>
-		</view>
+		</view> -->
 	</view>
 
 </template>
@@ -47,7 +70,7 @@
 <script>
 	import { isAgreePrivacy } from '@/utils/common.js'
 	import shareBox from "@/components/share-box/share-boxN.vue"
-	import {getCount} from '@/api/healthTongue.js'
+	import {getCount,add,addFace} from '@/api/healthTongue.js'
 	import { premissionCheck } from "@/js_sdk/wa-permission/permission.js"
 	// 这个组件仅限APP使用!!!
 	export default {
@@ -106,26 +129,41 @@
 				currentQuality:0,
 				currentZoomMode:"FACE", // 默认使用舌诊模式
 				statusMessage:"",
-				windowResizeCallback:null
+				windowResizeCallback:null,
+				cameraReady: false, // 相机是否初始化完成
+				 countdown: 5, // 倒计时总时长(秒)
+				 currentCount: 0, // 当前剩余倒计时
+				 countdownTimer: null, // 倒计时定时器实例(用于后续清除)
+				 hasTakenPhoto: false, // 是否已完成拍照,避免重复触发
+				 user:{},
+				 isResult:false,//结果
+				 countDown2: 3, // 初始倒计时5秒
+				 timer: null ,// 定时器标识
+				 isShow:false//中途退出
 			}
+                
 		},
 		created(){
 			let that=this;
-			uni.$on('navigateBack', function(data) {
-				that.handleReversal();
-			});
+			// uni.$on('navigateBack', function(data) {
+			// 	that.handleReversal();
+			// });
 		},
 		onLoad() {
 			//this.getCount();
 			this.setListener();
+			
+			
 		},
 		mounted() {
 			// 强制应用配置,确保平板设备使用后置摄像头
-			this.$nextTick(() => {
-				this.forceApplyConfig();
-			});
+			// this.$nextTick(() => {
+			// 	this.forceApplyConfig();
+			// });
 		},
 		onShow() {
+			this.user=JSON.parse(uni.getStorageSync('userInfo'));
+			console.log("用户缓存",this.user)
 			this.windowResizeCallback = (res) => {
 				// 重新获取屏幕尺寸
 				this.getScreenSize(res.size);
@@ -138,19 +176,79 @@
 			},200);
 		},
 		onUnload() {
+			this.clearCountdownTimer();
+			clearInterval(this.timer);
+			this.timer = null;
 			 if (this.windowResizeCallback) {
 			      uni.offWindowResize(this.windowResizeCallback);
 			      this.windowResizeCallback = null;
 			    }
-			uni.$off('navigateBack');
+			// uni.$off('navigateBack');
 		},
-		
 		methods: {
+			showConfirmModal() {
+				this.clearCountdownTimer()
+			  uni.showModal({
+			    title: "提示", // 弹窗标题
+			    content: "确定要中断当前操作,返回首页吗~", // 弹窗内容
+			    showCancel: true, // 是否显示取消按钮(默认 true)
+			    cancelText: "取消", // 取消按钮文本
+			    confirmText: "确定", // 确认按钮文本
+			    cancelColor: "#37C3A0", // 取消按钮颜色
+			    confirmColor: "#37C3A0", // 确认按钮颜色
+			    success: (res) => {
+			      // 回调:用户点击确认/取消
+			      if (res.confirm) {
+					  uni.reLaunch({
+					  	url: '/pages/index/index',
+					  	animationType: 'none',
+					  	animationDuration: 2000
+					  })
+			        console.log("用户点击确定");
+			        // 执行后续业务逻辑(如删除数据)
+			      } else if (res.cancel) {
+			        console.log("用户点击取消");
+			      }
+			    }
+			  });
+			},
+			   // 清除倒计时定时器
+			    clearCountdownTimer() {
+			      if (this.countdownTimer) {
+			        clearInterval(this.countdownTimer);
+			        this.countdownTimer = null;
+					//this.hasTakenPhoto=true
+			      }
+			    },
+				// 倒计时逻辑
+				   startCountDown() {
+				     this.timer = setInterval(() => {
+				       if (this.countDown2 > 0) {
+				         this.countDown2--;
+				       } else {
+				         // 倒计时结束,清除定时器
+				         clearInterval(this.timer);
+				         this.timer = null;
+						 this.isResult=false;
+						 this.hasTakenPhoto = false;
+						uni.redirectTo({
+						  url:"/pages/device/tongue/indexOld"
+						});
+				       }
+				     }, 1000);
+				   },
+				//重新扫描
+				handleReScan() {
+				      this.isResult = false;
+				      this.hasTakenPhoto = false;
+				      this.startCountdownTakePhoto();
+				    },
 			getScreenSize(res) {
 				this.width = res.windowWidth
 			    this.height = res.windowHeight
 				if (this.$refs.cameraView) { 
-				      this.switchZoomMode(this.loadData.autoZoomMode);
+					
+				    this.switchZoomMode(this.loadData.autoZoomMode);
 				    } else {
 				        
 				    }
@@ -160,6 +258,8 @@
 				this.$refs.cameraView.setAutoZoom((result) => {
 					if (result.ok) {
 						console.log('自动变焦设置成功:', this.loadData.autoZoomMode);
+						this.cameraReady=true
+						this.startCountdownTakePhoto();
 					} else {
 						console.error('自动变焦模式:', result.msg);
 					}
@@ -196,9 +296,10 @@
 						  console.log("qxj takePicture",res);
 						  plus.io.resolveLocalFileSystemURL(filePath, (entry) => {
 								 let url= entry.toLocalURL();
-								 uni.redirectTo({
-								 	url:"/pages/device/tongue/index?rightUrl="+url
-								 })
+								 this.startDetectionFace(url)
+								 // uni.navigateTo({
+								 // 	url:"/pages/device/tongue/index?rightUrl="+url
+								 // })
 						   }, (error) => {
 								console.error('Failed to resolve file system URL:', error);
 						   });
@@ -206,6 +307,63 @@
 					
 				}
 			},
+			//面诊
+			startDetectionFace(url){
+				if(!url){
+					uni.showToast({
+						title: '扫描失败,请重试',
+						icon: 'none'
+					});
+					return;
+				}
+				uni.showLoading({
+					title:"扫描中...",
+					mask:true
+				})
+				uni.uploadFile({
+					url: uni.getStorageSync('requestPath')+'/app/common/uploadOSS', //仅为示例,非真实的接口地址
+					filePath: url,
+					name: 'file',
+					formData: {
+						'user': 'test'  // 上传附带参数
+					},
+					success: (uploadFileRes) => {
+						console.log('---',this.user)
+						// console.log('---',JSON.parse(uploadFileRes.data).url)
+						var data={
+							userId:this.user.fsUserId,
+							sex:this.user.sex,
+							name:this.user.username,
+							surfaceUrl:JSON.parse(uploadFileRes.data).url,
+						}
+						addFace(data).then(res => {
+							    console.log('zaiFC',data,res)
+								if(res.code==200){
+									uni.hideLoading();
+								    this.isResult=true
+									this.startCountDown()
+								}else{
+									uni.hideLoading();
+									this.errMsg= res.msg;
+									this.hasTakenPhoto=true
+									uni.showToast({
+										icon:'none',
+										title: res.msg,
+									});
+								}
+							},
+							rej => {}
+						);
+					},fail: (err) => {
+								uni.hideLoading();
+								uni.showToast({
+									title: '上传失败,请重试',
+									icon: 'none'
+								});
+								console.error('上传失败:', err);
+							}
+				});
+			},
 			// 相册
 			async handleAlbum() {
 				// #ifdef APP-PLUS
@@ -295,12 +453,46 @@
 					url: "/pages/user/tongue/tongueList"
 				})
 			},
+			// 启动5秒倒计时,结束后拍照
+			    startCountdownTakePhoto() {
+			      // 边界判断:相机未就绪、已拍照、定时器已存在,直接返回
+			      if (!this.cameraReady || this.countdownTimer) {
+			        return;
+			      }
+			      
+			      // 初始化当前剩余倒计时
+			      this.currentCount = this.countdown;
+			      console.log(`倒计时开始:${this.currentCount} 秒`);
+			      
+			      // 启动倒计时定时器(每秒执行一次)
+			      this.countdownTimer = setInterval(() => {
+			        // 倒计时递减
+			        this.currentCount--;
+			        console.log(`剩余:${this.currentCount} 秒`);
+			        
+			        // 倒计时结束
+			        if (this.currentCount <= 0) {
+			          this.clearCountdownTimer(); // 清除定时器
+			          this.handleShutter(); // 触发自动拍照
+			        }
+			      }, 1000); // 1000毫秒 = 1秒
+			      
+			      // 可选:如果不需要可视倒计时,直接延迟5秒拍照(更简洁)
+			      // setTimeout(() => {
+			      //   this.autoTakePhoto();
+			      // }, 5000);
+			    },
 			setListener() {
 				this.$refs.cameraView.setListener((res) => {
 					console.log("qxj setListener",res);
 					if (res.action == "error") {
 						this.showToast(res.msg)
-					}
+					}else{ // 新增:监听相机初始化就绪事件(需子组件支持)
+          this.cameraReady = true;
+          console.log("相机初始化完成,即将开始5秒倒计时");
+          // 相机就绪后,启动倒计时拍照
+          
+        }
 				});
 			},
 			showToast(msg) {
@@ -330,38 +522,161 @@
 		align-items: $alignI;
 		justify-content: $justifyC;
 	}
+	/* 遮罩层样式 */
+		.mask {
+			position: fixed;
+			top: 0;
+			left: 0;
+			right: 0;
+			bottom: 0;
+			background-color: rgba(0, 0, 0, 0.5);
+			display: flex;
+			justify-content: center;
+			align-items: center;
+			z-index: 999;
+			animation: fadeIn 0.3s ease;
+		}
+	
+		/* 弹窗容器样式 */
+		.popup-container {
+			//width: 50%;
+			width: 620px;
+			height: 352px;
+			background: #FFFFFF;
+			border-radius: 39px 39px 39px 39px;
+			animation: scaleIn 0.3s ease;
+			overflow: hidden;
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+			justify-content: space-between;
+			padding:43px;
+			position: relative;
+			.bg{
+				width: 1005;
+				height: 244px;
+				position: absolute;
+				top:0
+			}
+			.title-t {
+				image{
+					width: 153px;
+					height: 25px;
+				}
+				text{
+					font-family: PingFang SC, PingFang SC;
+					font-weight: 500;
+					font-size: 32px;
+					color: #333333;
+					margin: 0 10px;
+				}
+			}
+	
+			.title-r {
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 400;
+				font-size: 28px;
+				color: #333333;
+			}
+	       .btn-l{
+			   display: flex;
+			   align-items: center;
+			   justify-content: center;
+			   font-family: PingFang SC, PingFang SC;
+			   font-weight: 600;
+			   font-size: 28px;
+			   color: #37C3A0;
+			   width: 220px;
+			   height: 64px;
+			   border-radius: 121px 121px 121px 121px;
+			   border: 2px solid #37C3A0;
+			   margin-right: 40px;
+		   }
+			.btn-r {
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				width: 220px;
+				height: 64px;
+				background: #37C3A0;
+				border-radius: 121px 121px 121px 121px;
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 600;
+				font-size: 28px;
+				color: #FFFFFF;
+			}
+		}
 	.flex-center {
 		@include u-flex(row, center, center);
 	}
 	.live-pusher-box {
+		background: #666;
 		@include u-flex(column, center, center);
 	}
 	.imagebox {
-		top:0;
-		left: 0;
-		right: 0; // 新增:让容器铺满屏幕宽度,确保文本居中生效
-		overflow: hidden;
+		// margin-top: 200px;
+		// top:0;
+		// left: 0;
+		// right: 0; // 新增:让容器铺满屏幕宽度,确保文本居中生效
+		// overflow: hidden;
 		display: flex;
 		flex-direction: column;
 		align-items: center;
 		justify-content: center;
+		position: relative;
+		// padding-bottom: 100rpx;
+		.desc{
+			margin-top: 20px;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 500;
+			font-size: 24px;
+			color: #fff;
+		}
 	}
 	.face {
-	 width: 100%;
+		 width: 100%;
+		 height: 100%;
+	}
+	.countdown-box{
+		  position: absolute;
+		  display: flex;
+		  align-items: center;
+		  justify-content: center;
+		  top:0;
+		  z-index: 99;
+		  .title{
+			  font-family: PingFang SC, PingFang SC;
+			  font-weight: 500;
+			  font-size: 240px;
+			  line-height: 300px !important;
+			  color: #fff;
+		  }
+		  .success{
+			  width: 180px;
+			  height: 180px;
+		  }
+		  .error{
+			  text-align: center;
+			  line-height:68px;
+			  width: 200px;
+			  height: 68px;
+			  background: #37C3A0;
+			  border-radius: 69px 69px 69px 69px;
+			  font-family: PingFang SC, PingFang SC;
+			  font-weight: 600;
+			  font-size: 28px;
+			  color: #FFFFFF;
+		  }
 	}
 	.cover-view {
 		width: 100%;
 		position: absolute;
 		top: 0;
 		left: 0;
-		@include u-flex(column, center, center);
-	}
-	.box {
-		
+	   @include u-flex(column, center, center);
 	}
 	.title-box{
 		 position: fixed;
-		  top: 0;
 		  left: 0;
 		  right: 0; // 新增:让容器铺满屏幕宽度,确保文本居中生效
 		  z-index: 998; // 低于导航栏 z-index:999,避免遮挡导航栏
@@ -369,19 +684,20 @@
 	}
 	.title {
 		// margin-top: calc(var(--status-bar-height) + 130rpx);
-		font-family: SourceHanSansCN-Medium;
+		font-family: PingFang SC, PingFang SC;
 		font-weight: 500;
-		font-size: 18rpx;
-		color: #fff;
+		font-size: 36px;
+		color: #FFFFFF;
+		// line-height: 54px;
 		text-align: center;
 	}
 	.tips {
-		margin-top: 10rpx;
+		margin-top: 20px;
 		// margin-bottom: 60rpx;
-		font-family: SourceHanSansSC-Regular;
+		font-family: PingFang SC, PingFang SC;
 		font-weight: 400;
-		font-size: 14rpx;
-		color: #fff;
+		font-size: 28px;
+		color: #FFFFFF;
 		text-align: center;
 	}
 	.boder-box{
@@ -393,23 +709,24 @@
 	}
 	.uni-nav-bar {
 		position: fixed;
-		top: 0;
-		left: 0;
+		left: 0px;
 		width: 100%;
 		z-index: 999;
 		overflow: hidden;
 		font-family: PingFang SC, PingFang SC;
 		font-weight: 500;
 		color: #fff;
+		padding-left: 28px;
+		padding-right: 28px;
 		// background-color: #000;
+		@include u-flex(row, center, space-between);
 		.uni-nav-barbox {
-			// width: 100%;
-			// height: 88rpx;
-			padding: 0 24rpx;
-			// box-sizing: border-box;
-		// @include u-flex(row, center,space-between);
-			// position: relative;
-			font-size: 24rpx;
+		width: 140px;
+		height: 48px;
+		background: rgba(2,2,2,0.15);
+		border-radius: 41px 41px 41px 41px;
+		border: 1px solid rgba(255,255,255,0.3);
+		@include u-flex(row, center, center);
 		}
 		.uni-nav-title-t {
 			font-family: SourceHanSansSC;
@@ -424,9 +741,47 @@
 			/* #endif */
 		}
 		.uni-nav-title {
-			// flex-shrink: 0;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 500;
+			font-size: 22px;
+			color: #FFFFFF;
+			text-align: left;
+			@include u-flex(row, center, center);
+			.ques {
+				// flex-shrink: 0;
+				width: 33rpx;
+				height: 33rpx;
+				margin-left: 9rpx;
+			}
+		}
+		.uni-nav-back {
+			width: 16rpx;
+			height: 16rpx;
+		}
+	}
+	.uni-nav-bar2 {
+		position: fixed;
+		 top: 28px;
+		right: 28px;
+		width: 100%;
+		z-index: 999;
+		overflow: hidden;
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 500;
+		color: #fff;
+		// background-color: #000;
+		.uni-nav-barbox {
+		width: 140px;
+		height: 48px;
+		background: rgba(2,2,2,0.15);
+		border-radius: 41px 41px 41px 41px;
+		border: 1px solid rgba(255,255,255,0.3);
+		@include u-flex(row, center, center);
+		}
+		.uni-nav-title-t {
 			font-family: SourceHanSansSC;
 			font-weight: 400;
+			margin-left: 5rpx;
 			color: #fff;
 			/* #ifdef APP-PLUS */
 			font-size: 14rpx;
@@ -434,7 +789,14 @@
 			/* #ifndef APP-PLUS */
 			font-size: 14rpx;
 			/* #endif */
-			@include u-flex(row, center, flex-start);
+		}
+		.uni-nav-title {
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 500;
+			font-size: 22px;
+			color: #FFFFFF;
+			text-align: left;
+			@include u-flex(row, center, center);
 			.ques {
 				// flex-shrink: 0;
 				width: 33rpx;
@@ -447,6 +809,12 @@
 			height: 16rpx;
 		}
 	}
+	// .center-box{
+	// 	width: 100%;
+	// 	display: flex;
+	// 	align-items: center;
+	// 	justify-content: space-around;
+	// }
 	.camera-footer {
 		background-color: #000;
 		overflow: hidden;
@@ -499,4 +867,5 @@
 		background: #8F6726;
 		border-radius: 50%;
 	}
+
 </style>

+ 358 - 65
pages/device/tongue/indexOld.nvue

@@ -3,33 +3,50 @@
 	<view class="live-pusher-box" :style="{width: width + 'px',height: height + 'px'}"> 
 		<Ba-CameraView ref="cameraView" :load="loadData" :style="{flex: 1,width: width + 'px',display:'none'}" ></Ba-CameraView>
 		<cover-view class="cover-view" :style="{width: width + 'px',height: height + 'px'}">
-			<cover-view class="uni-nav-bar" :style="{width: width + 'px'}">
-				<cover-view :style="{height: statusBarHeight,width: width + 'px'}"></cover-view>
+			<cover-view class="uni-nav-bar" :style="{width: width + 'px',top:statusBarHeight}">
+				<!-- <cover-view :style="{height: statusBarHeight,width: width + 'px'}"></cover-view> -->
 					<cover-view class="uni-nav-barbox">
-						<cover-view class="flex-center boder-box" @click="back">
-							<cover-image class="uni-nav-back" src="@/static/image/device/back_icon33.png" mode="aspectFill"></cover-image>
+						<cover-view class="flex-center" @click="back">
+							<cover-image class="uni-nav-back" src="@/static/image/new/icon_back1.png" mode="aspectFill"></cover-image>
 							<text class="uni-nav-title-t">返回</text>
 						</cover-view>
 					</cover-view>
+					<cover-view class="title-box" :style="{width: width + 'px'}">
+						<cover-view :style="{height: statusBarHeight,width: width + 'px'}"></cover-view>
+						<text class="title">请您拍摄舌头正面</text>
+						<text class="tips">将舌头自然伸出口外,舌尖微微向下,不要用力</text>
+					</cover-view>
+					<!-- <cover-view :style="{height: statusBarHeight,width: width + 'px'}"></cover-view> -->
+						<cover-view class="uni-nav-barbox">
+							<cover-view class="flex-center" @click="showConfirmModal">
+								<cover-image class="uni-nav-back" src="@/static/image/new/icon_home.png" mode="aspectFill"></cover-image>
+								<text class="uni-nav-title-t">首页</text>
+							</cover-view>
+						</cover-view>
 			</cover-view>
-			<cover-view class="title-box" :style="{width: width + 'px'}">
+			<!-- <cover-view class="title-box" :style="{width: width + 'px'}">
 				<cover-view :style="{height: statusBarHeight,width: width + 'px'}"></cover-view>
-				<text class="title">请拍摄舌面</text>
-				<text class="tips">舌尖放松,舌面平展,舌尖略向下,口张大不要太用力</text>
-			</cover-view>
+				<text class="title">请拍摄舌头正面</text>
+				<text class="tips">将舌头自然伸出口外,舌尖微微向下,不要用力</text>
+			</cover-view> -->
 				  
-		    <cover-view class="imagebox" :style="{width:width + 'px',height: height + 'px'}">
+		    <cover-view class="imagebox" :style="{width:width + 'px',height: height+ 'px'}">
 					<!-- <view v-if="width<height" :style="{width:width + 'px',height: height/4+ 'px'}" style="background:#262523 ;"></view> -->
-					<!-- <image v-if="width>height" class="tongue" :style="{width: width  + 'px',height: height + 'px'}" src="@/static/image/device/lingual_surface_mask.png" mode="aspectFill"></image>
-					<image v-if="width<height" class="tongue" :style="{width: width  + 'px',height: height/1.5 + 'px'}" src="@/static/image/device/lingual_surface_mask.png" mode="aspectFill"></image> -->
-			
+					<image class="tongue"  :style="{width:width + 'px',height: height+ 'px'}" src="@/static/image/new/mask_tongue.png" mode="aspectFill"></image>
+			<cover-view class="countdown-box" :style="{width:width + 'px',height: height+ 'px'}">
+			 <text class="title" v-if="countdownTimer && currentCount > 0">{{ currentCount }}</text>
+			<image  v-if="isResult" class="success" src="@/static/image/new/icon_success.png" mode="aspectFill"></image>
+			<text v-if="isResult" class="desc">即将开始问诊 {{countDown2}}s</text>
+			<text v-if="hasTakenPhoto" class="error"  @click="handleReScan">重新扫描</text>
+			 </cover-view>
 		      </cover-view>
-					
-			</cover-view>
 		</cover-view>
 	
-	
-		<view class="camera-footer" id="camera-footer" :style="{width: width + 'px'}">
+	<cover-view class="example">
+		<text class="title">舌象示例图</text>
+		<image class="she"  src="@/static/image/new/img_example.png" mode="aspectFill"></image>
+	</cover-view>
+		<!-- <view class="camera-footer" id="camera-footer" :style="{width: width + 'px'}">
 			<view class="camera-options" :style="{width: width + 'px'}">
 				<view class="camera-options-left camera-item" @click="handleAlbum">
 					<image src="@/static/image/device/album_icon24.png" mode="scaleToFill" style="width: 34rpx;height:34rpx;margin-bottom: 5rpx;"></image>
@@ -43,7 +60,7 @@
 					<text class="camera-item-t">切换摄像头</text>
 				</view>
 			</view>
-		</view>
+		</view> -->
 	</view>
 
 </template>
@@ -51,7 +68,7 @@
 <script>
 	import { isAgreePrivacy } from '@/utils/common.js'
 	import shareBox from "@/components/share-box/share-boxN.vue"
-	import {getCount} from '@/api/healthTongue.js'
+	import {getCount,add,addFace} from '@/api/healthTongue.js'
 	import { premissionCheck } from "@/js_sdk/wa-permission/permission.js"
 	// 这个组件仅限APP使用!!!
 	export default {
@@ -111,17 +128,28 @@
 				currentZoomMode:"TONGUE", // 默认使用舌诊模式
 				isShowCamera:false,
 				statusMessage:"",
-				windowResizeCallback:null
+				windowResizeCallback2:null,
+				cameraReady: false, // 相机是否初始化完成
+				 countdown: 5, // 倒计时总时长(秒)
+				 currentCount: 0, // 当前剩余倒计时
+				 countdownTimer: null, // 倒计时定时器实例(用于后续清除)
+				 hasTakenPhoto: false, // 是否已完成拍照,避免重复触发
+				 user:{},
+				 isResult:false,//结果
+				 countDown2: 3, // 初始倒计时5秒
+				 timer: null ,// 定时器标识
+				 isShow:false//中途退出
 			}
 		},
 		created(){
 			let that=this;
-			uni.$on('navigateBack', function(data) {
-				that.handleReversal();
-			});
+			// uni.$on('navigateBack', function(data) {
+			// 	that.handleReversal();
+			// });
 		},
 		onLoad() {
-			//this.setListener();
+		    
+		    this.setListener();
 			console.log('onLoad - 当前配置:', {
 				isTablet: this.isTablet,
 				isFacingFront: this.loadData.isFacingFront,
@@ -130,32 +158,98 @@
 		},
 		mounted() {
 			// 强制应用配置,确保平板设备使用后置摄像头
-			this.$nextTick(() => {
-				//this.forceApplyConfig();
-			});
+			// this.$nextTick(() => {
+			//    this.forceApplyConfig();
+			// });
 		},
 		onShow() {
-			this.windowResizeCallback = (res) => {
+			this.user=JSON.parse(uni.getStorageSync('userInfo'));
+			console.log("用户缓存",this.user)
+			this.windowResizeCallback2 = (res) => {
 				// 重新获取屏幕尺寸
 				this.getScreenSize(res.size);
 		     }
-			uni.onWindowResize(this.windowResizeCallback);
+			uni.onWindowResize(this.windowResizeCallback2);
+		},
+		onReady() {
+			setTimeout(()=>{
+				this.switchZoomMode1(this.loadData.autoZoomMode);
+			},200);
 		},
-		
 		onUnload() {
-			 if (this.windowResizeCallback) {
-			      uni.offWindowResize(this.windowResizeCallback);
-			      this.windowResizeCallback = null;
+			this.clearCountdownTimer();
+			clearInterval(this.timer);
+			this.timer = null;
+			 if (this.windowResizeCallback2) {
+			      uni.offWindowResize(this.windowResizeCallback2);
+			      this.windowResizeCallback2 = null;
 			    }
-			uni.$off('navigateBack');
+			// uni.$off('navigateBack');
 		},
 		
 		methods: {
+			showConfirmModal() {
+				this.clearCountdownTimer()
+			  uni.showModal({
+			    title: "提示", // 弹窗标题
+			    content: "确定要中断当前操作,返回首页吗~", // 弹窗内容
+			    showCancel: true, // 是否显示取消按钮(默认 true)
+			    cancelText: "取消", // 取消按钮文本
+			    confirmText: "确定", // 确认按钮文本
+			    cancelColor: "#37C3A0", // 取消按钮颜色
+			    confirmColor: "#37C3A0", // 确认按钮颜色
+			    success: (res) => {
+			      // 回调:用户点击确认/取消
+			      if (res.confirm) {
+					  uni.reLaunch({
+					  	url: '/pages/index/index',
+					  	animationType: 'none',
+					  	animationDuration: 2000
+					  })
+			        console.log("用户点击确定");
+			        // 执行后续业务逻辑(如删除数据)
+			      } else if (res.cancel) {
+			        console.log("用户点击取消");
+			      }
+			    }
+			  });
+			},
+			   // 清除倒计时定时器
+			    clearCountdownTimer() {
+			      if (this.countdownTimer) {
+			        clearInterval(this.countdownTimer);
+			        this.countdownTimer = null;
+					//this.hasTakenPhoto=true
+			      }
+			    },
+				// 倒计时逻辑
+				   startCountDown() {
+				     this.timer = setInterval(() => {
+				       if (this.countDown2 > 0) {
+				         this.countDown2--;
+				       } else {
+				         // 倒计时结束,清除定时器
+				         clearInterval(this.timer);
+				         this.timer = null;
+						 this.isResult=false;
+						 this.hasTakenPhoto = false;
+									  uni.navigateTo({
+									  	url:"/pages/user/question"
+									  });
+				       }
+				     }, 1000);
+				   },
+				//重新扫描
+				handleReScan() {
+				      this.isResult = false;
+				      this.hasTakenPhoto = false;
+				      this.startCountdownTakePhoto2();
+				    },
 			getScreenSize(res) {
 			   this.width = res.windowWidth
 			   this.height = res.windowHeight
 			   if (this.$refs.cameraView) { 
-			         this.switchZoomMode(this.loadData.autoZoomMode);
+			         this.switchZoomMode1(this.loadData.autoZoomMode);
 			       } else {
 			         console.warn("Ba-CameraView 组件尚未初始化,暂不执行 setAutoZoom");
 			       }
@@ -164,6 +258,8 @@
 				//启动舌诊模式自动变焦
 				this.$refs.cameraView.setAutoZoom((result) => {
 					if (result.ok) {
+						this.cameraReady=true
+						this.startCountdownTakePhoto2();
 						console.log('自动变焦设置成功:', this.loadData.autoZoomMode);
 					} else {
 						console.error('自动变焦模式:', result.msg);
@@ -181,6 +277,8 @@
 				if (this.loadData.autoZoomEnabled) {
 					this.$refs.cameraView.setAutoZoom((result) => {
 						if (result.ok) {
+							this.cameraReady=true
+							this.startCountdownTakePhoto2();
 							this.statusMessage = `变焦模式已切换到: ${this.currentZoomMode}`;
 							console.log('Zoom mode switched to:', this.currentZoomMode);
 						} else {
@@ -224,9 +322,10 @@
 						  console.log("qxj takePicture",res);
 						  plus.io.resolveLocalFileSystemURL(filePath, (entry) => {
 								 let url= entry.toLocalURL();
-								 uni.redirectTo({
-								 	url:"/pages/device/tongue/index?leftUrl="+url
-								 })
+								 this.startDetection(url)
+								 // uni.redirectTo({
+								 // 	url:"/pages/device/tongue/index?leftUrl="+url
+								 // })
 						   }, (error) => {
 								console.error('Failed to resolve file system URL:', error);
 						   });
@@ -234,6 +333,92 @@
 					
 				}
 			},
+			//舌诊
+			startDetection(url){
+				if(!url){
+					uni.showToast({
+						title: '扫描失败,请重试',
+						icon: 'none'
+					});
+					return;
+				}
+				uni.showLoading({
+					title:"扫描中...",
+					mask:true
+				})
+				uni.uploadFile({
+					url: uni.getStorageSync('requestPath')+'/app/common/uploadOSS', //仅为示例,非真实的接口地址
+					filePath: url,
+					name: 'file',
+					formData: {
+						'user': 'test'  // 上传附带参数
+					},
+					success: (uploadFileRes) => {
+						console.log('---',uploadFileRes)
+						// console.log('---',JSON.parse(uploadFileRes.data).url)
+						var data={
+							userId:this.user.fsUserId,
+							patientId:this.user.fsUserId,
+							sex:this.user.sex,
+							name:this.user.username,
+							tongueUrl:JSON.parse(uploadFileRes.data).url,
+						}
+						add(data).then(res => {
+							console.log('zaizz',data,res)
+								if(res.code==200){
+									this.isResult=true
+									this.startCountDown()
+								}else{
+									uni.hideLoading();
+									this.errMsg= res.msg;
+									this.hasTakenPhoto=true
+									uni.showToast({
+										icon:'none',
+										title: res.msg,
+									});
+								}
+							},
+							rej => {}
+						);
+					},fail: (err) => {
+								uni.showToast({
+									title: '上传失败,请重试',
+									icon: 'none'
+								});
+								uni.hideLoading();
+								console.error('上传失败:', err);
+							}
+				});
+			},
+			// 启动5秒倒计时,结束后拍照
+			    startCountdownTakePhoto2() {
+			      // 边界判断:相机未就绪、已拍照、定时器已存在,直接返回
+			      if (!this.cameraReady|| this.countdownTimer) {
+			        return;
+			      }
+			      
+			      // 初始化当前剩余倒计时
+			      this.currentCount = this.countdown;
+			      console.log(`倒计时开始:${this.currentCount} 秒`);
+			      
+			      // 启动倒计时定时器(每秒执行一次)
+			      this.countdownTimer = setInterval(() => {
+			        // 倒计时递减
+			        this.currentCount--;
+			        console.log(`剩余:${this.currentCount} 秒`);
+			        
+			        // 倒计时结束
+			        if (this.currentCount <= 0) {
+			          this.clearCountdownTimer(); // 清除定时器
+			          this.handleShutter(); // 触发自动拍照
+			        }
+			      }, 1000); // 1000毫秒 = 1秒
+			      
+			      // 可选:如果不需要可视倒计时,直接延迟5秒拍照(更简洁)
+			      // setTimeout(() => {
+			      //   this.autoTakePhoto();
+			      // }, 5000);
+			    },
 			// 相册
 			async handleAlbum() {
 				// #ifdef APP-PLUS
@@ -339,8 +524,6 @@
 					mode: this.currentZoomMode
 				});
 			},
-			
-			
 			// 舌诊记录
 			handleReportlist() {
 				uni.navigateTo({
@@ -385,22 +568,86 @@
 		@include u-flex(row, center, center);
 	}
 	.live-pusher-box {
+		background: #666;
 		@include u-flex(column, center, center);
 	}
+	.example{
+		position: absolute;
+		z-index: 9999;
+		left: 60px;
+		bottom: 54px;
+		width: 303px;
+		height: 212px;
+		background: rgba(255,255,255,0.2);
+		border-radius: 23px 23px 23px 23px;
+		padding: 28px 47px;
+		@include u-flex(row, center, space-between);
+		.title{
+			width: 35px;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
+			font-size: 24px;
+			color: #FFFFFF;
+		}
+		.she{
+			width: 154px;
+			height: 154px;
+		}
+	}
 	.imagebox {
-		top:0;
-		left: 0;
-		right: 0; // 新增:让容器铺满屏幕宽度,确保文本居中生效
-		overflow: hidden;
+		// margin-top: 200px;
+		// top:0;
+		// left: 0;
+		// right: 0; // 新增:让容器铺满屏幕宽度,确保文本居中生效
+		// overflow: hidden;
 		display: flex;
 		flex-direction: column;
 		align-items: center;
 		justify-content: center;
-		padding-bottom: 100rpx;
+		position: relative;
+		// padding-bottom: 100rpx;
+		.desc{
+			margin-top: 20px;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 500;
+			font-size: 24px;
+			color: #fff;
+		}
 	}
 	.tongue {
-		width: 100%;
-		 
+		 width: 100%;
+		 height: 100%;
+	}
+	.countdown-box{
+		  position: absolute;
+		  display: flex;
+		  align-items: center;
+		  justify-content: center;
+		  top:0;
+		  z-index: 99;
+		  .title{
+			  font-family: PingFang SC, PingFang SC;
+			  font-weight: 500;
+			  font-size: 240px;
+			  line-height: 300px !important;
+			  color: #fff;
+		  }
+		  .success{
+			  width: 180px;
+			  height: 180px;
+		  }
+		  .error{
+			  text-align: center;
+			  line-height:68px;
+			  width: 200px;
+			  height: 68px;
+			  background: #37C3A0;
+			  border-radius: 69px 69px 69px 69px;
+			  font-family: PingFang SC, PingFang SC;
+			  font-weight: 600;
+			  font-size: 28px;
+			  color: #FFFFFF;
+		  }
 	}
 	.cover-view {
 		width: 100%;
@@ -411,7 +658,6 @@
 	}
 	.title-box{
 		 position: fixed;
-		  top: 20px;
 		  left: 0;
 		  right: 0; // 新增:让容器铺满屏幕宽度,确保文本居中生效
 		  z-index: 998; // 低于导航栏 z-index:999,避免遮挡导航栏
@@ -419,19 +665,20 @@
 	}
 	.title {
 		// margin-top: calc(var(--status-bar-height) + 130rpx);
-		font-family: SourceHanSansCN-Medium;
+		font-family: PingFang SC, PingFang SC;
 		font-weight: 500;
-		font-size: 18rpx;
-		color: #fff;
+		font-size: 36px;
+		color: #FFFFFF;
+		// line-height: 54px;
 		text-align: center;
 	}
 	.tips {
-		margin-top: 20rpx;
+		margin-top: 20px;
 		// margin-bottom: 60rpx;
-		font-family: SourceHanSansSC-Regular;
+		font-family: PingFang SC, PingFang SC;
 		font-weight: 400;
-		font-size: 16rpx;
-		color: #fff;
+		font-size: 28px;
+		color: #FFFFFF;
 		text-align: center;
 	}
 	.boder-box{
@@ -443,23 +690,24 @@
 	}
 	.uni-nav-bar {
 		position: fixed;
-		 top: 20px;
-		left: 0;
+		left: 0px;
 		width: 100%;
 		z-index: 999;
 		overflow: hidden;
 		font-family: PingFang SC, PingFang SC;
 		font-weight: 500;
 		color: #fff;
+		padding-left: 28px;
+		padding-right: 28px;
 		// background-color: #000;
+		@include u-flex(row, center, space-between);
 		.uni-nav-barbox {
-			// width: 100%;
-			// height: 88rpx;
-			padding: 0 24rpx;
-			// box-sizing: border-box;
-		// @include u-flex(row, center,space-between);
-			// position: relative;
-			font-size: 24rpx;
+		width: 140px;
+		height: 48px;
+		background: rgba(2,2,2,0.15);
+		border-radius: 41px 41px 41px 41px;
+		border: 1px solid rgba(255,255,255,0.3);
+		@include u-flex(row, center, center);
 		}
 		.uni-nav-title-t {
 			font-family: SourceHanSansSC;
@@ -474,9 +722,47 @@
 			/* #endif */
 		}
 		.uni-nav-title {
-			// flex-shrink: 0;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 500;
+			font-size: 22px;
+			color: #FFFFFF;
+			text-align: left;
+			@include u-flex(row, center, center);
+			.ques {
+				// flex-shrink: 0;
+				width: 33rpx;
+				height: 33rpx;
+				margin-left: 9rpx;
+			}
+		}
+		.uni-nav-back {
+			width: 16rpx;
+			height: 16rpx;
+		}
+	}
+	.uni-nav-bar2 {
+		position: fixed;
+		 top: 28px;
+		right: 28px;
+		width: 100%;
+		z-index: 999;
+		overflow: hidden;
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 500;
+		color: #fff;
+		// background-color: #000;
+		.uni-nav-barbox {
+		width: 140px;
+		height: 48px;
+		background: rgba(2,2,2,0.15);
+		border-radius: 41px 41px 41px 41px;
+		border: 1px solid rgba(255,255,255,0.3);
+		@include u-flex(row, center, center);
+		}
+		.uni-nav-title-t {
 			font-family: SourceHanSansSC;
 			font-weight: 400;
+			margin-left: 5rpx;
 			color: #fff;
 			/* #ifdef APP-PLUS */
 			font-size: 14rpx;
@@ -484,7 +770,14 @@
 			/* #ifndef APP-PLUS */
 			font-size: 14rpx;
 			/* #endif */
-			@include u-flex(row, center, flex-start);
+		}
+		.uni-nav-title {
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 500;
+			font-size: 22px;
+			color: #FFFFFF;
+			text-align: left;
+			@include u-flex(row, center, center);
 			.ques {
 				// flex-shrink: 0;
 				width: 33rpx;

Diff do ficheiro suprimidas por serem muito extensas
+ 23 - 0
pages/index/agreement.vue


+ 134 - 0
pages/index/error.vue

@@ -0,0 +1,134 @@
+<template>
+	<view class="content">
+		<!-- 个人信息 -->
+		<view class="blur-bg-2"></view>
+		<view class="userBox y-c">
+			<view class="errorBox">
+				<image src='/static/image/new/img_error.svg'></image>
+				<view class="title">哎呀~出错了</view>
+				<view class="text">请联系工作人员或稍后再试</view>
+			</view>
+            <view class="btnBox">
+				<view class="btn" @click="goIndex">返回首页</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		getUserInfoByUserId,
+		getUserInfo
+	} from '@/api/user.js';
+	export default {
+		data() {
+			return {
+				
+			}
+		},
+		onLoad(option) {
+			
+		},
+		onShow() {
+			
+		},
+		 
+		methods: {
+			//首页
+			goIndex(){
+				uni.reLaunch({
+					url: '/pages/index/index',
+					animationType: 'none',
+					animationDuration: 2000
+				})
+			},
+		}
+	}
+</script>
+
+
+<style scoped lang="scss">
+	page {
+		background: #fff;
+		font-size: 16px
+	}
+
+	.content {
+		width: 100%;
+		height: 100vh;
+		background: #D8F6EF;
+		padding: 28px;
+		display: flex;
+		flex-direction: column;
+		.blur-bg-2 {
+		   width: 350px;
+		   height: 350px;
+		   background: #FFFDCC;
+		   // opacity: 0.47;
+		   filter: blur(200px);
+		   position: absolute;
+		   z-index: 1;
+		   top: 60px;
+		   right: calc(0px - 107px); 
+		   pointer-events: none
+		}
+	}
+
+	
+
+	.userBox {
+		flex: 1;
+		background: rgba(255, 255, 255, 0.7);
+		border-radius: 24px 24px 24px 24px;
+		padding: 27px 40px;
+        z-index: 9;
+		.errorBox{
+			display: flex;
+			align-items: center;
+			flex-direction: column;
+			image{
+				width: 485px;
+				height: 485px;
+			}
+			.title{
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 600;
+				font-size: 32px;
+				color: #327E6F;
+				line-height: 48px;
+			}
+			.text{
+				margin-top: 11px;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 500;
+			font-size: 24px;
+			color: #327E6F;
+			line-height: 36px;
+			}
+		}
+		.btnBox{
+			display: flex;
+			align-items: center;
+			flex-direction: column;
+			.btn {
+				margin-top: 97px;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				width: 360px;
+				height: 68px;
+				background: #37C3A0;
+				border-radius: 121px 121px 121px 121px;
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 600;
+				font-size: 28px;
+				color: #FFFFFF;
+			}
+		}
+		
+	}
+	@keyframes pulse {
+	  from { opacity: 0.8; }
+	  to { opacity: 1; }
+	}
+</style>

+ 120 - 48
pages/index/index.vue

@@ -1,28 +1,21 @@
 <template>
 	<!-- <page-meta :page-font-size="`${this.scaleFontSize}px`"  :root-font-size="`${this.scaleFontSize}px`"></page-meta> -->
 	<view class="border-box">
-	<view class="content y-bc">
-		<view style="width: 100%;">
-			<view class="logo">
-				<image src='/static/image/device/title.png'></image>
+	<view class="content y-ac">
+		<view class="logo">
+			<image class="logo-1" src='/static/image/new/logo.svg'></image>
+			<image class="logo-2" src='/static/image/new/img_welcom.svg'></image>
+		</view>
+		<view class="checkbox">
+			<view class="btn" @click="goTest()">开始检测</view>
+			<view class="checkbox-icon x-c" @tap="handleAgree">
+				<image src="/static/image/new/icon_check_default.svg" v-show="!agree"></image>
+				<image src="/static/image/new/icon_check.svg" v-show="agree"></image>
+				<view class="checkbox-text">我已阅读并同意<text @tap="goToWeb(0)">《用户协议》</text><text @tap="goToWeb(1)">《隐私政策》</text></view>
 			</view>
 			
-			<view class="btn-box x-f">
-				<!-- <view class="item-box x-c">
-					<image src="/static/image/device/code_icon32.png"></image>
-					<view>邀请二维码</view>
-				</view>
-				<view class="item-box x-c">
-					<image src="/static/image/device/company_manage_icon32.png"></image>
-					<view>公司管理</view>
-				</view> -->
-				<view class="item-box x-c" @click="logout">
-					<image src="/static/image/device/exit_icon32.png"></image>
-					<view>退出登录</view>
-				</view>
-			</view>
 		</view>
-		<view class="center-box" :class="{ 'flex-box': width < height }">
+		<!-- <view class="center-box" :class="{ 'flex-box': width < height }">
 			<view class="bg-item y-start" @click="goTest()">
 				<view class="title">体质辨识</view>
 				<view class="more">
@@ -35,11 +28,11 @@
 					<text>点击了解</text>
 				</view>
 			</view>
-		</view>
-		<view class="footer">
+		</view> -->
+		<!-- <view class="footer">
 			<view>登录账号:{{info.userName||'-'}}</view>
 			<view>姓名:{{info.nickName||'-'}}</view>
-		</view>
+		</view> -->
 	</view>
 	</view>
 </template>
@@ -63,7 +56,8 @@
 				// locCity: '国健通',
 				scaleFontSize: uni.getStorageSync('fontSize'),
 				info:{},
-				user:{}
+				user:{},
+				agree: false,
 			
 			};
 		},
@@ -93,8 +87,8 @@
 			});
 			uni.setStorageSync('indexTemplate', 0);
 			this.option = option;
-			this.user=JSON.parse(uni.getStorageSync('userInfo'));
-			this.selectUserInfo();
+			// this.user=JSON.parse(uni.getStorageSync('userInfo'));
+			// this.selectUserInfo();
 			//this.scaleFontSize = store.state.timStore.fontSize;
 			// this.$nextTick(()=>{
 			// 	  this.$refs[this.template].initLoad(this.option)
@@ -105,15 +99,26 @@
 			// this.$refs[this.template].initReady();
 		},
 		onShow() {
-			if (!this.$isLogin()) {
-				uni.navigateTo({
-					url: '/pages/auth/loginIndex'
-				});
-			} else {
-				// this.$updateMsgDot();
-			}
+			// if (!this.$isLogin()) {
+			// 	uni.navigateTo({
+			// 		url: '/pages/auth/loginIndex'
+			// 	});
+			// } else {
+			// 	// this.$updateMsgDot();
+			// }
 		},
 		methods: {
+			// 同意
+			handleAgree() {
+				this.agree = !this.agree
+			},
+			goToWeb(index) {
+				// uni.setStorageSync('url', index == 0 ? "https://userapp.his.cdwjyyh.com/web/userAgreement" :
+				// 	"https://userapp.his.cdwjyyh.com/web/privacyPolicy");
+				uni.navigateTo({
+					url: "/pages/index/agreement"
+				})
+			},
 			selectUserInfo(){
 				selectUserInfo().then(res => {
 						if(res.code==200){
@@ -158,11 +163,19 @@
 				 })
 			 },
 			 goTest(){
-			 		// uni.redirectTo({
-			 		// 	url: '/pages/device/tongue/index?userId='+this.user.userId
-			 		// });	
+				 if (!this.agree) {
+				 	uni.showToast({
+				 		title: "请同意相关协议",
+				 		icon: 'none'
+				 	});
+				 	return
+				 }
+			 	// 	uni.navigateTo({
+			 	// 	//url:"/pages/device/tongue/indexOld"
+					// url:"/pages/device/tongue/facePhoto"
+			 	// 	});
 						uni.navigateTo({
-						 url:'/pages/device/tongue/index?userId='+this.user.userId
+						 url:'/pages/user/userInfo'
 						})
 			 },
 			changeTemplate(e) {
@@ -396,29 +409,36 @@
  .border-box{
 	width: 100vw;
 	height: 100vh;
-	background-image:url(/static/image/device/ipad_yjf_boder.png);
-	background-repeat: no-repeat;
-	position: relative;
-	background-size: 100% 100%;
-	box-sizing: border-box;
-	padding: 10px;
+	// background-image:url(/static/image/device/ipad_yjf_boder.png);
+	// background-repeat: no-repeat;
+	// position: relative;
+	// background-size: 100% 100%;
+	// box-sizing: border-box;
+	// padding: 10px;
  }
  .content{
  	 // display: flex;
 	 width: 100%;
 	 height: 100%;
-	 background-image:url(/static/image/device/ipad_home_bg.png);
+	 background-image:url(/static/image/new/bg_home.png);
 	 background-repeat: no-repeat;
 	 background-size: 100% 100%;
 	 position: relative;
-	 padding-top: 20px;
+	 // padding-top: 20px;
 	 .logo{
+		 margin-top: 30px;
 		 width: 100%;
 		 display: flex;
-		 justify-content: center;
-		 image{
-			 width:593px;
-			 height: 148px;
+		align-items: center;
+		 flex-direction: column;
+		 .logo-1{
+			 width: 536px;
+			 height: 263px;
+		 }
+		 .logo-2{
+			 margin-top: 55px;
+			 width: 490px;
+			 height: 104px;
 		 }
 	 }
 	 .btn-box{
@@ -516,6 +536,58 @@
 		 }
 	 }
  }
+ .checkbox {
+ 	// margin: 20px;
+ 	margin-top: 20px;
+ 	display: flex;
+ 	// flex-direction: row;
+ 	align-items: center;
+ 	// justify-content: flex-start;
+ 	font-family: PingFang SC, PingFang SC;
+ 	font-weight: 400;
+ 	font-size: 18px;
+ 	color: #999999;
+ 	// line-height: 38px;
+ 	text-align: left;
+	flex-direction: column;
+ 	.uni-label-pointer{
+ 		display: flex;
+ 		// flex-direction: row;
+ 		align-items: center;
+ 	}
+ 	text {
+ 		color: #3BABAF;
+ 	}
+ 	&-icon {
+ 		flex-shrink: 0;
+ 		
+ 		image {
+ 			height: 24px;
+ 			width: 24px;
+			margin-right: 10px;
+ 		}
+ 	}
+	&-text{
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 400;
+		font-size: 22px;
+		color: #333333;
+	}
+	.btn{
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		width: 535px;
+		height: 95px;
+		background: #37C3A0;
+		border-radius: 158px 158px 158px 158px;
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 600;
+		font-size: 40px;
+		color: #FFFFFF;
+		margin-bottom: 40px;
+	}
+ }
 // @media screen and (max-width: 1149px) and (min-aspect-ratio: 1/1) {
 //   .bg-item{
 // 	  margin-left: 0 !important;

+ 146 - 0
pages/index/loading.vue

@@ -0,0 +1,146 @@
+<template>
+	<view class="content">
+		<!-- 个人信息 -->
+		<view class="blur-bg-2"></view>
+		<view class="userBox y-c">
+			<view class="loadBox">
+				<image src='/static/image/new/logo2.svg'></image>
+				<view class="progress">
+					<u-line-progress :percentage="progressPercent" :showText="false" height="18" inactiveColor="#fff" activeColor="#3CD3AD"></u-line-progress>
+				</view>
+				<view class="text">AI大脑正在为您综合分析数据...</view>
+			</view>
+            <!-- <view class="btnBox">
+				<view class="btn" @click="goIndex">返回首页</view>
+			</view> -->
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		getUserInfoByUserId,
+		getUserInfo
+	} from '@/api/user.js';
+	export default {
+		data() {
+			return {
+				progressPercent: 0, // 进度条百分比
+			    progressTimer: null // 定时器
+			}
+		},
+		onLoad(option) {
+			this.startProgress();
+		},
+		onShow() {
+			
+		},
+		onUnload() {
+		 			// 清除定时器,防止内存泄漏
+		 	clearInterval(this.progressTimer);
+		 	this.progressTimer = null;
+		},
+		methods: {
+			//首页
+			goIndex(){
+				uni.reLaunch({
+					url: '/pages/index/index',
+					animationType: 'none',
+					animationDuration: 2000
+				})
+			},
+			startProgress() {
+							const step = 2; // 每次增加的进度
+							const target = 100; // 目标进度
+							
+							this.progressTimer = setInterval(() => {
+								if (this.progressPercent >= target) {
+									clearInterval(this.progressTimer);
+									this.progressTimer = null;
+									// 加载完成后跳转到目标页面(示例:首页)
+									//this.goIndex();
+									return;
+								}
+								this.progressPercent += step;
+							}, 100);
+						},
+		}
+	}
+</script>
+
+
+<style scoped lang="scss">
+	page {
+		background: #fff;
+		font-size: 16px
+	}
+
+	.content {
+		width: 100%;
+		height: 100vh;
+		background: #D8F6EF;
+		padding: 28px;
+		display: flex;
+		flex-direction: column;
+		background:#D8F6EF;
+		background-image:url(/static/image/new/bg_mountain.svg);
+		background-repeat: no-repeat;
+		position: relative;
+		background-size: 100% 100%;
+	}
+
+	
+
+	.userBox {
+		flex: 1;
+		// background: rgba(255, 255, 255, 0.7);
+		// border-radius: 24px 24px 24px 24px;
+		padding: 27px 40px;
+        z-index: 9;
+		.loadBox{
+			display: flex;
+			align-items: center;
+			flex-direction: column;
+			image{
+				width: 197px;
+				height: 197px;
+			}
+			.text{
+				margin-top: 11px;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
+			font-size: 28px;
+			color: #333333;
+			}
+			.progress{
+				width: 100%;
+				margin-top:200px ;
+				margin-bottom: 33px;
+			}
+		}
+		.btnBox{
+			display: flex;
+			align-items: center;
+			flex-direction: column;
+			.btn {
+				margin-top: 97px;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				width: 360px;
+				height: 68px;
+				background: #37C3A0;
+				border-radius: 121px 121px 121px 121px;
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 600;
+				font-size: 28px;
+				color: #FFFFFF;
+			}
+		}
+		
+	}
+	@keyframes pulse {
+	  from { opacity: 0.8; }
+	  to { opacity: 1; }
+	}
+</style>

+ 568 - 551
pages/user/healthReport.vue

@@ -1,149 +1,116 @@
 <template>
 	<view class="content">
 		<!-- 个人信息 -->
-		<view :style="{height:statusBarHeight}"></view>
-		<view class="top-box" >
-			<view class="back-box x-f">
-				<image src="/static/image/device/back_icon32.png"></image>
-				<view @click="goBack()">返回</view>
+		<!-- <view class="blur-bg-2"></view> -->
+		<view class="top-btn">
+			
+			<view class="back x-c">
+				<!-- <image src='/static/image/new/icon_back.svg'></image>
+				返回 -->
 			</view>
-			<view class="tab-box">
-				健康报告
+			<view class="title x-c">
+				<image src='/static/image/new/img_title1.svg'></image>
+				<text>检测报告</text>
+				<image src='/static/image/new/img_title2.svg'></image>
 			</view>
-<!-- 			<view :style="{width: width < height ?'18px':'102px'}"></view> -->
-		</view>
-		<view class="user-info">
-			<view class="info-box">
-				<view class="left">
-					<view class="head-box">
-						<image class="img" src="@/static/images/pages_watch/images/my_heads_icon.png" mode="aspectFill">
-						</image>
-					</view>
-					<view class="info">
-						<text class="name one-t">{{userInfo.username}}</text>
-						<div class="info-top">
-							<text class="sex">性别:{{userInfo.sex==1?'男':userInfo.sex==0?'女':'-'}}</text>
-							<text>年龄:{{userInfo.age|| '-'}}岁</text>
-						</div>
-						<div class="phone">
-							手机号:{{userInfo.phone|| '-'}}
-						</div>
-					</view>
-				</view>
-				<!-- <image  class="right" src="@/static/image/my/icon_edit.png" mode="aspectFill" @click="editInfo"></image> -->
-			</view>
-			<view class="userinfo-list x-bc">
-				<view class="userinfo-item x-bc">
-					<view>
-						<view>身高</view>
-						<view style="margin-top: 8rpx;"><text class="num">{{userInfo.height || '--'}}</text>cm</view>
-					</view>
-					<image src="@/static/images/pages_watch/icons/height_icon.png" mode="aspectFill"></image>
-				</view>
-				<view class="userinfo-item x-bc">
-					<view>
-						<view>体重</view>
-						<view style="margin-top: 8rpx;"><text class="num">{{userInfo.weight || '--'}}</text>kg</view>
-					</view>
-					<image src="@/static/images/pages_watch/icons/weight_icon.png" mode="aspectFill"></image>
-				</view>
-			</view>
-			<view class="userinfo-list x-bc">
-				<view class="userinfo-item">
-					<view>
-						<view>既往病史</view>
-						<view style="margin-top: 8rpx;height: 80rpx;" class="two-t"><text
-								class="txt">{{userInfo.previousMedicalHistory|| '--'}}</text></view>
-					</view>
-					<!-- <image src="@/static/images/pages_watch/icons/weight_icon.png" mode="aspectFill"></image> -->
-				</view>
-				<view class="userinfo-item">
-					<view>
-						<view>过敏史</view>
-						<view style="margin-top: 8rpx;height: 80rpx;" class="two-t"><text
-								class="txt">{{userInfo.historyOfAllergies|| '--'}}</text></view>
-					</view>
-					<!-- <image src="@/static/image/healthRecords/gms_icon.png" mode="aspectFill"></image> -->
-				</view>
+			<view class="index x-c" @click="goIndex">
+				<image src='/static/image/new/icon_home.svg'></image>
+				首页
 			</view>
 		</view>
-		<!-- 详细信息 -->
-		<view class="info-detail">
-			<view class="item">
-				<view class="x-bc">
-					<text class="label">舌诊</text>
-					<text class="time">{{infoTongue.createTime||'-'}}</text>
-				</view>
-
-				<view class="content" v-if="infoTongue">
-					<view class="desc">
-						{{infoTongue.taiseName||'无'}}:{{infoTongue.taiseDesc||'-'}}
+		<view class="userBox">
+			<view class="left">
+				<view class="tizhi">
+					<view class="title-l x-f">
+						<image src='/static/image/new/icon_taiji.svg'></image>
+						您的主体质为
 					</view>
-					<view class="desc">
-						{{infoTongue.shemianName||'无'}}:{{infoTongue.shemianDesc||'-'}}
-					</view>
-					<view class="desc">
-						{{infoTongue.botai==1?"有剥苔":"未见剥苔"}}:{{infoTongue.botaiDesc||'-'}}
+					<view class="titbox">
+						<image class="img-l"  src='/static/image/new/img_cloud1.svg'></image>
+						<view class="x-c">
+							<view class="textbg x-c">阳</view>
+							<view class="textbg x-c">虚</view>
+							<view class="textbg x-c">质</view>
+						</view>
+						<image  class="img-r" src='/static/image/new/img_cloud2.svg'></image>
 					</view>
-					<view class="desc">
-						{{infoTongue.liewen==1?"有裂纹":"未见裂纹"}}:{{infoTongue.liewenDesc||'-'}}
+					<view class="constitution x-bc">
+						<view class="constitution-charts">
+							<qiun-data-charts type="radar" :opts="constitutionOpts" :chartData="constitutiontData" />
+						</view>
+						<view class="table-wrapper">
+							<view class="table topf" style="grid-template-columns:1fr .8fr">
+								<view class="table-list u-f-ajc">
+									体质
+								</view>
+								<view class="table-list u-f-ajc">
+									积分
+								</view>
+							</view>
+							<view class="">
+								<view class="table color2 bgF u-f-ajc" style="grid-template-columns:1fr .8fr" v-for="(item,index) in constitution"
+									:key="index">
+									<view class="table-list u-f-ajc" style="border-right: 1px solid #96E5D1;background: #F4FFFC;">
+										{{item.name}}
+									</view>
+									<view class="u-f-ajc">
+										{{item.score}}
+									</view>
+								</view>
+							</view>
+						</view>
 					</view>
+				</view>
+				<view class="suggest">
+						<image  class="tit" src='/static/image/new/img_advice.svg'></image>
 					<view class="desc">
-						{{infoTongue.chihen==1?"有齿痕":"未见齿痕"}}:{{infoTongue.chihenDesc||'-'}}
+						日常宜温补阳气,多摄入生姜、韭菜、核桃,避冰饮、生食;规律作息,晨起适度运动,可艾灸足三里、关元穴。
 					</view>
 				</view>
 			</view>
-			<view class="item column">
-				<view class="left">
-					<view class="x-bc">
-						<text class="label">面诊</text>
-						<text class="time">{{formatCreateTime(infoSurface.createTime)||'-'}}</text>
-					</view>
-					<view class="content">
-						<view class="desc">
-							面色:{{infoSurface.complexionResult||'-'}}
-						</view>
-						<view class="desc">
-							区域色斑:{{infoSurface.spotProblems||'-'}}
-						</view>
-						<view class="desc">
-							浮肿特征:{{infoSurface.swellingProblems||'-'}}
-						</view>
-						<view class="desc">
-							光泽度:{{infoSurface.glowResult||'-'}}
+			<view class="right">
+				<view class="temp x-start">
+					
+				 <view class="title-box x-start">
+					 <image src='/static/image/new/icon_heat.svg'></image>
+					 <view class="y-start">
+						 <text class="txt">体温</text>
+						 <view class="num x-end">36.5
+						 <text class="unit">°C</text>
+						 </view>
+					 </view>
+					 
+				 </view>
+				 <view class="status x-c">正常</view>
+				</view>
+				<view class="pressure x-start">
+					
+					<view class="title-box x-start">
+						<image src='/static/image/new/icon_blood.svg'></image>
+						<view class="y-start">
+							<text class="txt">血压</text>
+							<view class="num x-end">145/95
+							<text class="unit">mmHg</text>
+							</view>
+							<view class="other">收缩压/舒张压</view>
 						</view>
+										
 					</view>
+					<view class="status2 x-c">偏高</view>
 				</view>
-			</view>
-			<view class="item">
-				<view class="x-bc">
-					<text class="label">脉诊</text>
-					<text class="time">{{infoPulse.createTime||'-'}}</text>
-				</view>
-				<view class="content">
-					<view class="desc">
-						左手:{{leftHandResult}}
+				<view class="code">
+					<view class="title-box x-f">
+						<image src='/static/image/new/icon_report.svg'></image>
+										 <text class="txt">获取详细报告</text>
 					</view>
-					<view class="desc">
-						右手:{{rightHandResult}}
+					<view class="tips">
+						您的健康报告与个性化调理方案已生成,手机扫码查看。报告链接也会发送到您预留的手机上。
 					</view>
-					<view class="desc">
-						脉搏总结:{{infoPulse.pulseSummary||'-'}}
+					<view class="code-box">
+						<image src="/static/logo_icon.png"></image>
 					</view>
 				</view>
 			</view>
-
-		</view>
-		<view class="footer" @click="addApp">
-			<text>更多报告详情,请下载芳华未来APP</text>
-		</view>
-		<view v-if="isCode" class="mask">
-			<view class="popup-container2">
-				<view class="title-t">扫码下载APP</view>
-				<!-- <view class="title-r">点击确认查看检测报告</view> -->
-				<image style="width: 200px;height: 200px;margin-bottom: 20px;" src="@/static/images/afangh.png"></image>
-				<view class="btn-r" @click="closeP">关闭</view>
-			</view>
 		</view>
 	</view>
 </template>
@@ -151,130 +118,169 @@
 <script>
 	import {
 		getUserInfoByUserId,
-		selectQueryFsUser,
-		getDiagnosis
+		getUserInfo
 	} from '@/api/user.js';
 	export default {
 		data() {
 			return {
-				statusBarHeight: uni.getSystemInfoSync().statusBarHeight + 'px',
-				avatar: "",
-				nickName: "",
-				deptName: "",
-				postNames: "",
-				phonenumber: "",
-				email: "",
-				sex: "",
-				isShow: false,
-				isCode:false,
-				userId: undefined,
-				userInfo: {},
-				infoTongue: {},
-				infoSurface: {},
-				infoPulse: {},
-				leftHandResult:null,
-				rightHandResult:null,
-				userId:null
+				form: {
+					username: '', // 姓名
+					phone: '', // 手机号
+					sex: 1, // 性别(1-男,0-女)
+					age: '', // 年龄
+					height: '', // 身高
+					weight: '', // 体重
+					idCard:'',
+					// previousMedicalHistory: '', // 既往病史
+					// habitList: [], //饮食习惯
+					// historyOfAllergies: '' //过敏史
+				},
+				// 每个输入框的高亮状态
+				highlightStatus: {
+					username: false,
+					phone: false,
+					idCard: false,
+					age: false,
+					height: false,
+					weight: false
+				},
+				constitution: [
+					{name:'阳虚质',score:73},
+					{name:'气虚质',score:56},
+					{name:'阴虚质',score:50},
+					{name:'痰湿质',score:42},
+					{name:'湿热质',score:18},
+					{name:'气郁质',score:9},
+					{name:'特禀质',score:8},
+					{name:'平和质',score:2},
+					{name:'血瘀质',score:0},
+				],
+				constitutionOption:[
+					{
+					"特禀质": {
+						  "定义": "属于先天禀赋异常,主要表现为对花粉、尘螨、某些食物或药物等过敏,易患哮喘、荨麻疹、过敏性鼻炎等过敏性疾病。",
+						  "成因": "主要与先天遗传因素、环境因素或药物因素等密切相关。",
+						  "经络": ["肺经", "脾经", "肾经"],
+						  "分析": "特禀质以先天禀赋异常为主,肺经主卫外固表,脾经主运化水湿,肾经主藏精抗邪。拍打肺经增强卫外功能,脾经健脾益气,肾经固本培元,三经协同提高机体对过敏原的耐受性,减少哮喘、荨麻疹等发作。"
+						}
+					},
+					{
+					"平和质": {
+						  "定义": "中医所推崇的理想体质状态,表现为阴阳气血调和,体态适中,面色红润且富有光泽,精力充沛,性格随和开朗,对环境的适应能力强,不易患病且恢复迅速。",
+						  "成因": "主要与先天禀赋良好及后天调养得当密切相关,如作息规律、饮食均衡、心态平和等。",
+						  "经络": ["肺经", "脾经", "肾经"],
+						  "分析": "平和质者阴阳气血调和,肺经主气司呼吸,脾经主运化升清,肾经主藏精生髓,三经气血运行通畅,共同维持机体平衡。肺经通畅保障呼吸功能,脾经健运促进水谷精微吸收,肾经充盈支撑先天之本,三者协同维持健康状态。"
+						}
+					},
+					{
+					"气虚质": {
+						  "定义": "以元气不足为主要特征,常表现为疲乏无力、气短懒言、精神不振、易出汗、舌淡红且边有齿痕,抵抗力较弱,易患感冒等疾病。",
+						  "成因": "多因先天禀赋不足、后天脾胃虚弱、过度劳累或久病耗伤气血所致。",
+						  "经络": ["肺经", "脾经", "胃经"],
+						  "分析": "气虚质以肺脾两虚为主,肺经主气不足则呼吸短促,脾经运化无力则气血生化不足。胃经为多气多血之经,拍打胃经可增强脾胃功能,促进气血生成。三经调理需以补益肺气、健脾和胃为重点,改善乏力、气短症状。"
+						}
+					},
+					{
+					"阳虚质": {
+						  "定义": "表现为阳气不足,以畏寒怕冷、手足不温、喜热饮食、精神不振、舌淡胖嫩且边有齿痕为主要特征,耐夏不耐冬。",
+						  "成因": "主要与先天禀赋不足、久居寒冷环境、过度劳累耗伤阳气或年老体衰等因素有关。",
+						  "经络": ["肾经", "脾经", "膀胱经"],
+						  "分析": "阳虚质以肾阳不足为核心,肾经主温煦全身,脾经运化失司则水湿内停,膀胱经主一身之表,阳虚者易感外寒。拍打肾经可温补肾阳,脾经增强运化,膀胱经促进排寒,三经协同改善畏寒、四肢不温等症状。"
+						}
+					},
+					{
+					"阴虚质": {
+						  "定义": "以体内阴液亏少为主要特征,常表现为口燥咽干、手足心热、潮热盗汗、心烦易怒、失眠多梦、大便干结、舌红少津。",
+						  "成因": "多因先天阴液不足、久病伤阴、长期熬夜、过食辛辣燥热之品或高温环境工作等因素导致。",
+						  "经络": ["肾经", "肝经", "心经"],
+						  "分析": "阴虚质以肾阴亏虚为主,肾经失养则腰膝酸软,肝经阴虚则肝阳上亢(如潮热、盗汗),心经阴虚则心烦失眠。拍打肾经滋阴补肾,肝经平肝潜阳,心经清心除烦,三经调理可缓解口干、五心烦热等症。"
+						}
+					},
+					{
+					"痰湿质": {
+						  "定义": "以痰湿凝聚为主要特征,表现为形体肥胖、腹部肥满松软、面部皮肤油脂较多、多汗且黏、胸闷痰多、口黏腻或甜、舌体胖大且苔白腻。",
+						  "成因": "主要与先天禀赋因素、后天饮食不节(如暴饮暴食、嗜食肥甘厚味)、缺乏运动或年老脾胃功能减弱等因素有关。",
+						  "经络": ["脾经", "肺经", "胃经"],
+						  "分析": "痰湿质以脾失健运为核心,脾经运化水湿功能减弱,肺经通调水道受阻,胃经受纳腐熟异常则痰湿内生。拍打脾经可健脾祛湿,肺经宣肺化痰,胃经和胃降浊,三经协同改善肥胖、胸闷痰多等症状。"
+						}
+					},
+					{
+					"湿热质": {
+						  "定义": "以湿热内蕴为主要特征,表现为面垢油光、易生痤疮粉刺、口苦口干、身重困倦、大便黏滞不爽或燥结、小便短黄、舌质偏红且苔黄腻。",
+						  "成因": "多因先天湿热内蕴、长期居住潮湿环境、过食辛辣油腻食物或脾胃运化失常等因素导致。",
+						  "经络": ["脾经", "胃经", "膀胱经"],
+						  "分析": "湿热质以脾胃湿热为主,脾经运化失司致湿邪内生,胃经受纳腐熟异常则热邪蕴结,膀胱经排湿不畅则湿热下注。拍打脾经清热利湿,胃经清胃泻火,膀胱经利尿排湿,三经调理可缓解口苦、大便黏滞等症。"
+						}
+					},
+					{
+					"血瘀质": {
+						  "定义": "以血液运行不畅为主要特征,表现为肤色晦暗、色素沉着、易出现瘀斑、口唇黯淡或紫、舌黯有瘀点且舌下络脉紫黯或增粗、脉涩。",
+						  "成因": "主要与先天体质因素、外伤、久病入络或长期情绪抑郁等因素有关。",
+						  "经络": ["肝经", "心经", "脾经"],
+						  "分析": "血瘀质以肝郁气滞、心血瘀阻为主,肝经主疏泄,气滞则血瘀;心经主血脉,瘀阻则胸痛;脾经统血,脾虚则血行不畅。拍打肝经疏肝理气,心经活血通络,脾经健脾益气,三经协同改善面色晦暗、瘀斑等症状。"
+						}
+					},
+					{
+					"气郁质": {
+						  "定义": "以气机郁滞为主要特征,表现为神情抑郁、忧虑脆弱、烦闷不乐、胸胁胀满、乳房胀痛、睡眠较差、舌淡红且苔薄白、脉弦。",
+						  "成因": "多因先天性格内向、长期情志不舒、生活压力大或精神刺激等因素导致。",
+						  "经络": ["肝经", "胆经", "三焦经"],
+						  "分析": "气郁质以肝胆气机郁滞为核心,肝经主疏泄,胆经主决断,三焦经主气机升降。拍打肝经可疏肝解郁,胆经畅达气机,三焦经通调水道,三经协同缓解抑郁、胸胁胀满等症状。"
+						}
+					}
+				],
+				constitutionOpts: {
+					padding: [0,0,0,0],
+					dataLabel: false,
+					enableScroll: false,
+					legend: {
+					  show: false,
+					},
+					fontSize: 22,
+					color:['#37C3A0'],
+					extra: {
+					  radar: {
+						gridType: "radar",
+						gridColor: "rgba(55,195,160,0.3)",
+						gridCount: 6,
+						opacity: 0.2,
+						max: 100,
+						labelShow: true,
+						border: true,
+						radius: 200
+					  }
+					}
+				},
+				constitutiontData: {},
 			}
 		},
-		onLoad(options) {
-			if (options.userId) {
-				this.userId=options.userId
-				this.getDiagnosis(this.userId)
-			}
-			//this.getDiagnosis('4054874814')
+		onLoad(option) {
+			this.getConstitutiont('阴虚质')
 		},
 		onShow() {
-
 		},
 		methods: {
-			goBack(){
-				uni.navigateBack({
-					delta:1
+			//首页
+			goIndex(){
+				uni.reLaunch({
+					url: '/pages/index/index',
+					animationType: 'none',
+					animationDuration: 2000
 				})
 			},
-			formatCreateTime(rawTime) {
-				// 先处理“无时间”的情况,返回默认值 "-"
-				if (!rawTime) return "-";
-
-				const date = new Date(rawTime); // 将原始时间转为 Date 对象
-				const year = date.getFullYear();
-				const month = String(date.getMonth() + 1).padStart(2, "0"); // 月份从0开始,补0成两位数
-				const day = String(date.getDate()).padStart(2, "0"); // 日期补0
-				const hour = String(date.getHours()).padStart(2, "0"); // 小时补0
-				const minute = String(date.getMinutes()).padStart(2, "0"); // 分钟补0
-				const second = String(date.getSeconds()).padStart(2, "0");
-				// 返回最终格式(可按需调整,如只显示日期则去掉 hour:minute)
-				return `${year}-${month}-${day} ${hour}:${minute}:${second}`;
-			},
-			closeP(){
-				this.isCode=false
-			},
-			addApp() {
-				this.isCode=true
-				// let platform = uni.getSystemInfoSync().platform;
-				// // let isAndroid=platform=="android";
-				// if (platform === 'android') {
-				// 	// #ifdef H5
-				// 	window.open("https://m.malink.cn/s/2UZjMz", '_blank');
-				// 	// #endif
-				// } else if(platform === 'ios'){
-				// 	// #ifdef H5
-				// 	window.open("https://apps.apple.com/cn/app/%E8%8A%B3%E5%8D%8E%E6%9C%AA%E6%9D%A5/id6738688148",
-				// 		'_blank');
-				// 	// #endif
-				// }
-			},
-			selectQueryFsUser(userId) {
-				uni.showLoading({
-					title: '加载中'
-				})
-				var data = {
-					userId: userId
-				};
-				selectQueryFsUser(data).then(
-					res => {
-						if (res.code == 200) {
-							this.userInfo = res.data
-							uni.hideLoading()
-						} else {
-							uni.showToast({
-								title: res.msg,
-								icon: 'none'
-							});
-							uni.hideLoading()
-						}
-					},
-					rej => {}
-				);
-			},
-			getDiagnosis(userId) {
-				uni.showLoading({
-					title: '加载中'
-				})
-				var data = {
-					userId: userId
-				};
-				getDiagnosis(data).then(
-					res => {
-						if (res.code == 200) {
-							this.userInfo = res.data.user
-							this.infoSurface = res.data.HealthSurface?res.data.HealthSurface:'暂无信息'
-							this.infoTongue = res.data.HealthTongue?res.data.HealthTongue:'暂无信息'
-							this.infoPulse = res.data.HealthPulse?res.data.HealthPulse:'暂无信息'
-							this.leftHandResult=res.data.HealthPulse.leftHandResult?JSON.parse(res.data.HealthPulse.leftHandResult).leftHandResult:'-'
-							this.rightHandResult=res.data.HealthPulse.rightHandResult?JSON.parse(res.data.HealthPulse.rightHandResult).rightHandResult:'-'
-							uni.hideLoading()
-						} else {
-							uni.showToast({
-								title: res.msg,
-								icon: 'none'
-							});
-							uni.hideLoading()
-						}
-					},
-					rej => {}
-				);
+			getConstitutiont(name) {
+			 const data = this.constitutionOption.find(item => item[name]);
+			 this.constitutionResult = data[name]
+			 let res = {
+			 	categories: this.constitution.map(it=>it.name),
+			 	series: [
+			 	  {
+			 		name: "体质",
+			 		data: this.constitution.map(it=>it.score)
+			 	  }
+			 	]
+			   };
+			 this.constitutiontData = JSON.parse(JSON.stringify(res));
 			},
 		}
 	}
@@ -283,366 +289,377 @@
 
 <style scoped lang="scss">
 	page {
-		background: linear-gradient(#FBF4EE 0%, #fff 100%);
-		background-repeat: no-repeat;
+		background: #fff;
+		font-size: 16px
 	}
-	
-	.top-box {
-		padding: 0 24rpx;
-		margin-top: 20px;
-		width: 100%;
-		display: flex;
-		align-items: center;
-		justify-content: space-between;
-		margin-bottom: 30px;
-	
-		.title {
-			font-family: Source Han Serif CN, Source Han Serif CN;
-			font-weight: bold;
-			font-size: 30px;
-			color: #8F6726;
-			text-align: center;
-		}
-	     .tab-box{
-			 font-size: 36rpx;
-			 color: #8F6726;
-		 }
-		.back-box {
-			width: 102px;
-			height: 47px;
-			background: #FFFFFF;
-			border-radius: 6px 6px 6px 6px;
-			border: 1px solid #8F6726;
-			// padding: 12px 8px;
-			justify-content: center;
-	
-			view {
-				font-family: PingFang SC, PingFang SC;
-				font-weight: 400;
-				font-size: 18px;
-				color: #8F6726;
-				text-align: center;
-				margin-left: 10px;
-			}
-	
-			// position: absolute;
-			// left: 30px;
-			image {
-				width: 24px;
-				height: 24px;
+    .constitution {
+    	&-charts {
+    		width: 480px;
+    		height: 416px;
+    	}
+    }
+	.table-wrapper{
+		min-width:180px;
+		margin-top: 30px;
+		.table-list {
+			padding: 6px 18px;
+			&:last-child{
+				padding: 6px 11px !important;
 			}
 		}
+	}
+	.table {
+		display: grid;
+		grid-template-columns: 1fr 2fr 1fr;
+		border: 1px solid #96E5D1;
+		border-radius: 6px 0px 0px 0px;
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 400;
+		font-size: 20px;
+		color: #222222;
+		&.topf{
+			background: linear-gradient( 180deg, #E0FFF7 0%, #8DE2CC 100%);
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
+			font-size: 20px;
+			color: #4E6E66;
+		}
+		&:last-child {
+			border-bottom: 1px solid #96E5D1;
+		}
 	
-		.select {
-			min-width: 160px;
-			height: 47px;
-			background: #FFFFFF;
-			border-radius: 6px 6px 6px 6px;
-			border: 1px solid #8F6726;
-			padding: 12px;
-			display: flex;
-			align-items: center;
-			justify-content: center;
-	
-			image {
-				width: 24px;
-				height: 24px;
-	
-				&:last-child {
-					width: 12px;
-					height: 12px;
-				}
-			}
-	
-			.date {
-				width: 100%;
-				display: flex;
-				align-items: center;
-				justify-content: space-between;
-			}
-	
-			.text {
-				margin-left: 10px;
-				margin-right: 10px;
-				font-family: PingFang SC, PingFang SC;
-				font-weight: 400;
-				font-size: 18px;
-				color: #8F6726;
-				text-align: center;
+		.table-list {
+			&:nth-child(2n) {
+				border-left: 1px solid #96E5D1;
+				border-right: 1px solid #96E5D1;
 			}
 		}
 	}
-.mask {
-		position: fixed;
-		top: 0;
-		left: 0;
-		right: 0;
-		bottom: 0;
-		background-color: rgba(0, 0, 0, 0.5);
+	.content {
+		width: 100%;
+		height: 100vh;
+		background: #D8F6EF;
+		padding: 28px;
 		display: flex;
-		justify-content: center;
-		align-items: center;
-		z-index: 999;
-		animation: fadeIn 0.3s ease;
+		flex-direction: column;
+		.blur-bg-2 {
+		   width: 350px;
+		   height: 350px;
+		   background: #FFFDCC;
+		   // opacity: 0.47;
+		   filter: blur(200px);
+		   position: absolute;
+		   z-index: 1;
+		   top: 60px;
+		   right: calc(0px - 107px); 
+		   pointer-events: none
+		}
 	}
 
-	/* 弹窗容器样式 */
-	.popup-container2 {
-		//width: 50%;
-		min-height: 250px;
-		background: #FBF4EE;
-		border-radius: 12px;
-		box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15);
-		animation: scaleIn 0.3s ease;
-		overflow: hidden;
+	.top-btn {
 		display: flex;
-		flex-direction: column;
 		align-items: center;
 		justify-content: space-between;
-		padding: 30px 50px;
+z-index:2;
+		.back {
+			width: 144px;
+			height: 48px;
+			// background: rgba(255, 255, 255, 0.64);
+			// border-radius: 45px 45px 45px 45px;
+			// border: 2px solid #FFFFFF;
+			// font-family: PingFang SC, PingFang SC;
+			// font-weight: 500;
+			// font-size: 22px;
+			// color: #327E6F;
 
-		.title-t {
-			font-size: 24px;
-			font-weight: bold;
-			color: #8F6726;
-			text-align: center;
-			margin-bottom: 20px;
+			image {
+				margin-right: 4px;
+				width: 24px;
+				height: 24px;
+			}
 		}
 
-		.title-r {
-			font-size: 20px;
-			color: #8F6726;
-			text-align: center;
-			padding: 20px 0;
-		}
+		.title {
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 600;
+			font-size: 36px;
+			color: #327E6F;
+			line-height: 54px;
+
+			text {
+				margin: 0 14px;
+			}
 
-		.btn-r {
-			text-align: center;
-			background: #8F6726;
-			font-size: 20px;
-			color: #FBF4EE;
-			border-radius: 12px;
-			width: 100%;
-			height: 50px;
-			line-height: 50px;
+			image {
+
+				width: 153px;
+				height: 25px;
+			}
 		}
-	}
 
-	.one-t {
-		white-space: nowrap;
-		/* 强制文本不换行 */
-		overflow: hidden;
-		/* 隐藏超出容器的内容 */
-		text-overflow: ellipsis;
-		/* 超出部分显示省略号 */
-	}
+		.index {
+			width: 140px;
+			height: 48px;
+			background: rgba(255, 255, 255, 0.64);
+			border-radius: 55px 55px 55px 55px;
+			border: 2px solid #FFFFFF;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 500;
+			font-size: 22px;
+			color: #327E6F;
 
-	.two-t {
-		display: -webkit-box;
-		-webkit-box-orient: vertical;
-		-webkit-line-clamp: 2;
-		/* 强制显示2行,超出部分省略 */
-		overflow: hidden;
+			image {
+				margin-right: 4px;
+				width: 24px;
+				height: 24px;
+			}
+		}
 	}
 
-	.content {
-		padding-bottom: 30rpx;
-		// background: #FBF4EE;
-		// 个人信息
-		.user-info {
-			// background: #FBF4EE;
-			padding: 0 24rpx;
-
-			.info-box {
-				margin-top: 20rpx;
-				margin-bottom: 20rpx;
-				display: flex;
-				align-items: center;
-				justify-content: space-between;
+	.userBox {
+		flex: 1;
+		margin-top: 28px;
+		background: rgba(255, 255, 255, 0.7);
+		border-radius: 24px 24px 24px 24px;
+		padding: 28px;
+        z-index: 9;
+		display: flex;
+        align-items:start;
+		.left{
+			margin-right: 28px;
+			.tizhi{
+				padding: 28px;
+				width: 798px;
+				height: 650px;
 				background: #FFFFFF;
-				border-radius: 16rpx 16rpx 16rpx 16rpx;
-
-				.left {
+				box-shadow: 0px 4px 14px 0px rgba(55,195,160,0.06);
+				border-radius: 20px 20px 20px 20px;
+            .title-l{
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 500;
+				font-size: 24px;
+				color: #333333;
+				line-height: 42px;
+				image{
+					margin-right: 16px;
+					width: 32px;
+					height: 32px;
+				}
+				}
+				.titbox{
 					width: 100%;
+					height: 112px;
+					background: rgba(55,195,160,0.13);
+					border-radius: 20px 20px 20px 20px;
+					position: relative;
 					display: flex;
 					align-items: center;
-					padding: 20rpx;
-
-					.head-box {
-						width: 120rpx;
-						height: 120rpx;
-						line-height: 100rpx;
-						font-size: 30rpx;
-						text-align: center;
-						margin-right: 20rpx;
-
-						.img {
-							border-radius: 50%;
-							width: 100%;
-							height: 100%;
+					justify-content: center;
+					.textbg{
+						width: 55px;
+						height: 55px;
+						font-family: PingFang SC, PingFang SC;
+						font-weight: 600;
+						font-size: 31px;
+						line-height: 44px;
+						color: #333333;
+						background-image:url(/static/image/new/bg_square.svg);
+						background-repeat: no-repeat;
+						background-size: 100% 100%;
+						margin-right: 20px;
+						&:last-child{
+							margin-right: 0;
 						}
 					}
-
-					.info {
-						width: calc(100% - 140rpx);
-						height: 120rpx;
-						display: flex;
-						flex-direction: column;
-						justify-content: space-between;
-						color: #333;
-
-						.name {
-							font-size: 30rpx;
-
-						}
-
-						.info-top {
-							color: #999999;
-							font-size: 24rpx;
-
-							.sex {
-								margin-right: 20rpx;
-							}
-						}
-
-						.phone {
-							font-size: 24rpx;
-							color: #999999;
-						}
-
-						.title {
-							font-size: 28rpx;
-						}
+					.img-l{
+						position: absolute;
+						top: 16px;
+						left:34px;
+						width: 138px;
+						height: 50px;
+					}
+					.img-r{
+						position: absolute;
+						bottom:20px;
+						right: 48px;
+						width: 118px;
+						height: 34px;
 					}
-				}
-
-				.right {
-					width: 40rpx;
-					height: 40rpx;
 				}
 			}
-
-			.userinfo-list {
-				margin: 0 -16rpx 0 0;
-
-				.userinfo-item {
-					flex: 1;
-					min-height: 136rpx;
-					padding: 24rpx;
-					box-sizing: border-box;
-					margin: 0 16rpx 16rpx 0;
-					background: #FFFFFF;
-					border-radius: 16rpx 16rpx 16rpx 16rpx;
-					font-family: PingFang SC;
+			.suggest{
+				padding: 28px;
+				margin-top: 28px;
+				width: 798px;
+				height: 159px;
+				background: #FFFFFF;
+				box-shadow: 0px 4px 14px 0px rgba(55,195,160,0.06);
+				border-radius: 20px 20px 20px 20px;
+				
+				.tit{
+						width: 88px;
+						height: 33px;
+					
+				}
+				.desc{
+					font-family: PingFang SC, PingFang SC;
 					font-weight: 400;
-					font-size: 24rpx;
-					color: #757575;
-
-					image {
-						width: 56rpx;
-						height: 56rpx;
-					}
-
-					.num {
-						font-family: DIN, DIN;
-						font-weight: 500;
-						font-size: 36rpx;
-						color: #333333;
-						margin-right: 10rpx;
-					}
-
-					.txt {
-						font-family: PingFang SC;
-						font-weight: 500;
-						font-size: 24rpx;
-						color: #333333;
-					}
+					font-size: 22px;
+					color: #333333;
+					line-height: 34px;
 				}
 			}
-
-			.comp-info {
-				padding: 20rpx 0 40rpx;
-				display: flex;
-				align-items: center;
-
-				.img {
-					width: 30rpx;
-					height: 30rpx;
-					margin-right: 20rpx;
+		}
+		.right{
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+			.status{
+				width: 56px;
+				height: 32px;
+				background: rgba(55,195,160,0.13);
+				border-radius: 8px 8px 8px 8px;
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 400;
+				font-size: 18px;
+				color: #37C3A0;
+				position: absolute;
+				top:20px;
+				right: 28px;
+			}
+			.status2{
+				width: 56px;
+				height: 32px;
+				background: rgba(255,162,31,0.13);
+				border-radius: 8px 8px 8px 8px;
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 400;
+				font-size: 18px;
+				color: #E89209;
+				position: absolute;
+				top:20px;
+				right: 28px;
+			}
+			.temp{
+				padding:20px 28px;
+				width: 342px;
+				height: 165px;
+				background: #FFFFFF;
+				box-shadow: 0px 4px 14px 0px rgba(55,195,160,0.06);
+				border-radius: 20px 20px 20px 20px;
+				flex-direction: row;
+				justify-content: space-between;
+				position: relative;
+				image{
+					width: 32px;
+					height: 32px;
+					margin-right: 20px;
 				}
-
-				.text {
-					font-size: 30rpx;
-					color: #fff;
+				.txt{
+					font-family: PingFang SC, PingFang SC;
+					font-weight: 500;
+					font-size: 24px;
+					color: #333333;
+				}
+				.num{
+					margin-top: 10px;
+					font-family: PingFang SC, PingFang SC;
+					font-weight: 600;
+					font-size: 36px;
+					color: #333333;
+				}
+				.unit{
+					font-weight: 600;
+					font-size: 24px;
 				}
 			}
-		}
-
-		// 详细信息
-		.info-detail {
-			padding: 0 24rpx;
-			margin-top: 20rpx;
-			overflow: hidden;
-
-			.item {
-				margin-bottom: 20rpx;
-				border-bottom: 1px solid #f7f7f7;
-				display: flex;
-				flex-direction: column;
+			.pressure{
+				margin-top: 28px;
+				padding:20px 28px;
+				width: 342px;
+				height: 165px;
+				background: #FFFFFF;
+				box-shadow: 0px 4px 14px 0px rgba(55,195,160,0.06);
+				border-radius: 20px 20px 20px 20px;
+				flex-direction: row;
 				justify-content: space-between;
-
-				.label {
-					font-size: 36rpx;
-					font-weight: bold;
-					margin-right: 20rpx;
+				position: relative;
+				image{
+					width: 32px;
+					height: 32px;
+					margin-right: 20px;
 				}
-
-				.time {
+				.txt{
+					font-family: PingFang SC, PingFang SC;
+					font-weight: 500;
+					font-size: 24px;
+					color: #333333;
+				}
+				.num{
+					margin-top: 10px;
+					font-family: PingFang SC, PingFang SC;
+					font-weight: 600;
+					font-size: 36px;
+					color: #333333;
+				}
+				.unit{
+					font-weight: 600;
+					font-size: 24px;
+				}
+				.other{
+					font-family: PingFang SC, PingFang SC;
 					font-weight: 400;
-					font-size: 24rpx;
-					color: #666666;
+					font-size: 18px;
+					color: #999999;
 				}
-
-				.content {
-					margin-top: 20rpx;
-					padding: 20rpx;
-					font-family: PingFang SC;
+			}
+			.code{
+				margin-top: 28px;
+				padding:20px 28px;
+				width: 342px;
+				height: 451px;
+				background: linear-gradient( 180deg, #DDFFF6 0%, #FFFFFF 100%);
+				box-shadow: 0px 4px 14px 0px rgba(55,195,160,0.06);
+				border-radius: 20px 20px 20px 20px;
+				border: 2px solid #37C3A0;
+				.title-box{
+					image{
+						width: 32px;
+						height: 32px;
+						margin-right: 20px;
+					}
+					.txt{
+						font-family: PingFang SC, PingFang SC;
+						font-weight: 500;
+						font-size: 24px;
+						color: #333333;
+					}
+					
+				}
+				.tips{
+					margin-top: 28px;
+					font-family: PingFang SC, PingFang SC;
 					font-weight: 400;
-					font-size: 28rpx;
-					background: #FFFFFF;
-					border-radius: 16rpx 16rpx 16rpx 16rpx;
-					border: 1px solid #FBF4EE;
-
-					.desc {
-						margin-bottom: 20rpx;
-						padding-left: 20rpx;
-						position: relative;
-						line-height: 40rpx;
-
-						&::before {
-							content: '';
-							position: absolute;
-							z-index: 9;
-							top: 15rpx;
-							left: 0;
-							width: 10rpx;
-							height: 10rpx;
-							background: #8F6726;
-							border-radius: 5rpx;
-						}
+					font-size: 22px;
+					color: #666666;
+					line-height: 34px;
+					margin-bottom: 40px;
+				}
+				.code-box{
+					margin: 0 auto;
+					width: 148px;
+					height: 148px;
+					border-radius: 5px 5px 5px 5px;
+					border: 1px solid #37C3A0;
+					display: flex;
+					align-items: center;
+					justify-content: center;
+					image{
+						width: 124px;
+						height: 124px;
 					}
 				}
 			}
 		}
-
-		.footer {
-			margin: 30rpx 20rpx 0;
-			padding: 20rpx 0;
-			border-radius: 16rpx 16rpx 16rpx 16rpx;
-			background: #8F6726;
-			font-size: 28rpx;
-			color: #fff;
-			text-align: center;
-		}
 	}
 </style>

+ 666 - 0
pages/user/healthReportOld.vue

@@ -0,0 +1,666 @@
+<template>
+	<view class="content">
+		<!-- 个人信息 -->
+		<view :style="{height:statusBarHeight}"></view>
+		<view class="top-box" >
+			<!-- <view class="back-box x-f">
+				<image src="/static/image/device/back_icon32.png"></image>
+				<view @click="goBack()">返回</view>
+			</view> -->
+			<view class="back x-c" @click="$navBack()">
+				<image src='/static/image/new/icon_back.svg'></image>
+				返回
+			</view>
+			<view class="tab-box">
+				健康报告
+			</view>
+<!-- 			<view :style="{width: width < height ?'18px':'102px'}"></view> -->
+		</view>
+		<view class="user-info">
+			<view class="info-box">
+				<view class="left">
+					<view class="head-box">
+						<image class="img" src="@/static/images/pages_watch/images/my_heads_icon.png" mode="aspectFill">
+						</image>
+					</view>
+					<view class="info">
+						<text class="name one-t">{{userInfo.username}}</text>
+						<div class="info-top">
+							<text class="sex">性别:{{userInfo.sex==1?'男':userInfo.sex==0?'女':'-'}}</text>
+							<text>年龄:{{userInfo.age|| '-'}}岁</text>
+						</div>
+						<div class="phone">
+							手机号:{{userInfo.phone|| '-'}}
+						</div>
+					</view>
+				</view>
+				<!-- <image  class="right" src="@/static/image/my/icon_edit.png" mode="aspectFill" @click="editInfo"></image> -->
+			</view>
+			<view class="userinfo-list x-bc">
+				<view class="userinfo-item x-bc">
+					<view>
+						<view>身高</view>
+						<view style="margin-top: 8rpx;"><text class="num">{{userInfo.height || '--'}}</text>cm</view>
+					</view>
+					<image src="@/static/images/pages_watch/icons/height_icon.png" mode="aspectFill"></image>
+				</view>
+				<view class="userinfo-item x-bc">
+					<view>
+						<view>体重</view>
+						<view style="margin-top: 8rpx;"><text class="num">{{userInfo.weight || '--'}}</text>kg</view>
+					</view>
+					<image src="@/static/images/pages_watch/icons/weight_icon.png" mode="aspectFill"></image>
+				</view>
+			</view>
+			<!-- <view class="userinfo-list x-bc">
+				<view class="userinfo-item">
+					<view>
+						<view>既往病史</view>
+						<view style="margin-top: 8rpx;height: 80rpx;" class="two-t"><text
+								class="txt">{{userInfo.previousMedicalHistory|| '--'}}</text></view>
+					</view>
+					
+				</view>
+				<view class="userinfo-item">
+					<view>
+						<view>过敏史</view>
+						<view style="margin-top: 8rpx;height: 80rpx;" class="two-t"><text
+								class="txt">{{userInfo.historyOfAllergies|| '--'}}</text></view>
+					</view>
+					
+				</view>
+			</view> -->
+		</view>
+		<!-- 详细信息 -->
+		<view class="info-detail">
+			<view class="item">
+				<view class="x-bc">
+					<text class="label">舌诊</text>
+					<text class="time">{{infoTongue.createTime||'-'}}</text>
+				</view>
+
+				<view class="content" v-if="infoTongue">
+					<view class="desc">
+						{{infoTongue.taiseName||'无'}}:{{infoTongue.taiseDesc||'-'}}
+					</view>
+					<view class="desc">
+						{{infoTongue.shemianName||'无'}}:{{infoTongue.shemianDesc||'-'}}
+					</view>
+					<view class="desc">
+						{{infoTongue.botai==1?"有剥苔":"未见剥苔"}}:{{infoTongue.botaiDesc||'-'}}
+					</view>
+					<view class="desc">
+						{{infoTongue.liewen==1?"有裂纹":"未见裂纹"}}:{{infoTongue.liewenDesc||'-'}}
+					</view>
+					<view class="desc">
+						{{infoTongue.chihen==1?"有齿痕":"未见齿痕"}}:{{infoTongue.chihenDesc||'-'}}
+					</view>
+				</view>
+			</view>
+			<view class="item column">
+				<view class="left">
+					<view class="x-bc">
+						<text class="label">面诊</text>
+						<text class="time">{{formatCreateTime(infoSurface.createTime)||'-'}}</text>
+					</view>
+					<view class="content">
+						<view class="desc">
+							面色:{{infoSurface.complexionResult||'-'}}
+						</view>
+						<view class="desc">
+							区域色斑:{{infoSurface.spotProblems||'-'}}
+						</view>
+						<view class="desc">
+							浮肿特征:{{infoSurface.swellingProblems||'-'}}
+						</view>
+						<view class="desc">
+							光泽度:{{infoSurface.glowResult||'-'}}
+						</view>
+					</view>
+				</view>
+			</view>
+			<view class="item">
+				<view class="x-bc">
+					<text class="label">脉诊</text>
+					<text class="time">{{infoPulse.createTime||'-'}}</text>
+				</view>
+				<view class="content">
+					<view class="desc">
+						左手:{{leftHandResult}}
+					</view>
+					<view class="desc">
+						右手:{{rightHandResult}}
+					</view>
+					<view class="desc">
+						脉搏总结:{{infoPulse.pulseSummary||'-'}}
+					</view>
+				</view>
+			</view>
+
+		</view>
+		<view class="footer" @click="addApp">
+			<text>更多报告详情,请下载芳华未来APP</text>
+		</view>
+		<view v-if="isCode" class="mask">
+			<view class="popup-container2">
+				<view class="title-t">扫码下载APP</view>
+				<!-- <view class="title-r">点击确认查看检测报告</view> -->
+				<image style="width: 200px;height: 200px;margin-bottom: 20px;" src="@/static/images/afangh.png"></image>
+				<view class="btn-r" @click="closeP">关闭</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		getUserInfoByUserId,
+		selectQueryFsUser,
+		getDiagnosis
+	} from '@/api/user.js';
+	export default {
+		data() {
+			return {
+				statusBarHeight: uni.getSystemInfoSync().statusBarHeight + 'px',
+				avatar: "",
+				nickName: "",
+				deptName: "",
+				postNames: "",
+				phonenumber: "",
+				email: "",
+				sex: "",
+				isShow: false,
+				isCode:false,
+				userId: undefined,
+				userInfo: {},
+				infoTongue: {},
+				infoSurface: {},
+				infoPulse: {},
+				leftHandResult:null,
+				rightHandResult:null,
+				userId:null
+			}
+		},
+		onLoad(options) {
+			if (options.userId) {
+				this.userId=options.userId
+				this.getDiagnosis(this.userId)
+			}
+			//this.getDiagnosis('4054874814')
+		},
+		onShow() {
+
+		},
+		methods: {
+			goBack(){
+				uni.navigateBack({
+					delta:1
+				})
+			},
+			formatCreateTime(rawTime) {
+				// 先处理“无时间”的情况,返回默认值 "-"
+				if (!rawTime) return "-";
+
+				const date = new Date(rawTime); // 将原始时间转为 Date 对象
+				const year = date.getFullYear();
+				const month = String(date.getMonth() + 1).padStart(2, "0"); // 月份从0开始,补0成两位数
+				const day = String(date.getDate()).padStart(2, "0"); // 日期补0
+				const hour = String(date.getHours()).padStart(2, "0"); // 小时补0
+				const minute = String(date.getMinutes()).padStart(2, "0"); // 分钟补0
+				const second = String(date.getSeconds()).padStart(2, "0");
+				// 返回最终格式(可按需调整,如只显示日期则去掉 hour:minute)
+				return `${year}-${month}-${day} ${hour}:${minute}:${second}`;
+			},
+			closeP(){
+				this.isCode=false
+			},
+			addApp() {
+				this.isCode=true
+				// let platform = uni.getSystemInfoSync().platform;
+				// // let isAndroid=platform=="android";
+				// if (platform === 'android') {
+				// 	// #ifdef H5
+				// 	window.open("https://m.malink.cn/s/2UZjMz", '_blank');
+				// 	// #endif
+				// } else if(platform === 'ios'){
+				// 	// #ifdef H5
+				// 	window.open("https://apps.apple.com/cn/app/%E8%8A%B3%E5%8D%8E%E6%9C%AA%E6%9D%A5/id6738688148",
+				// 		'_blank');
+				// 	// #endif
+				// }
+			},
+			selectQueryFsUser(userId) {
+				uni.showLoading({
+					title: '加载中'
+				})
+				var data = {
+					userId: userId
+				};
+				selectQueryFsUser(data).then(
+					res => {
+						if (res.code == 200) {
+							this.userInfo = res.data
+							uni.hideLoading()
+						} else {
+							uni.showToast({
+								title: res.msg,
+								icon: 'none'
+							});
+							uni.hideLoading()
+						}
+					},
+					rej => {}
+				);
+			},
+			getDiagnosis(userId) {
+				uni.showLoading({
+					title: '加载中'
+				})
+				var data = {
+					userId: userId
+				};
+				getDiagnosis(data).then(
+					res => {
+						if (res.code == 200) {
+							this.userInfo = res.data.user
+							this.infoSurface = res.data.HealthSurface?res.data.HealthSurface:'暂无信息'
+							this.infoTongue = res.data.HealthTongue?res.data.HealthTongue:'暂无信息'
+							this.infoPulse = res.data.HealthPulse?res.data.HealthPulse:'暂无信息'
+							this.leftHandResult=res.data.HealthPulse.leftHandResult?JSON.parse(res.data.HealthPulse.leftHandResult).leftHandResult:'-'
+							this.rightHandResult=res.data.HealthPulse.rightHandResult?JSON.parse(res.data.HealthPulse.rightHandResult).rightHandResult:'-'
+							uni.hideLoading()
+						} else {
+							uni.showToast({
+								title: res.msg,
+								icon: 'none'
+							});
+							uni.hideLoading()
+						}
+					},
+					rej => {}
+				);
+			},
+		}
+	}
+</script>
+
+
+<style scoped lang="scss">
+	page {
+		background: #D8F6EF !important;
+	}
+	.back {
+		width: 140px;
+		height: 48px;
+		background: rgba(255, 255, 255, 0.64);
+		border-radius: 45px 45px 45px 45px;
+		border: 2px solid #FFFFFF;
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 500;
+		font-size: 22px;
+		color: #327E6F;
+	
+		image {
+			margin-right: 4px;
+			width: 24px;
+			height: 24px;
+		}
+	}
+	.top-box {
+		padding: 0 24rpx;
+		margin-top: 20px;
+		width: 100%;
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		margin-bottom: 30px;
+	
+		.title {
+			font-family: Source Han Serif CN, Source Han Serif CN;
+			font-weight: bold;
+			font-size: 30px;
+			color: #37C3A0;
+			text-align: center;
+		}
+	     .tab-box{
+			 font-size: 36rpx;
+			 color: #37C3A0;
+		 }
+		.back-box {
+			width: 102px;
+			height: 47px;
+			background: #FFFFFF;
+			border-radius: 6px 6px 6px 6px;
+			border: 1px solid #37C3A0;
+			// padding: 12px 8px;
+			justify-content: center;
+	
+			view {
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 400;
+				font-size: 18px;
+				color: #37C3A0;
+				text-align: center;
+				margin-left: 10px;
+			}
+	
+			// position: absolute;
+			// left: 30px;
+			image {
+				width: 24px;
+				height: 24px;
+			}
+		}
+	
+		.select {
+			min-width: 160px;
+			height: 47px;
+			background: #FFFFFF;
+			border-radius: 6px 6px 6px 6px;
+			border: 1px solid #37C3A0;
+			padding: 12px;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+	
+			image {
+				width: 24px;
+				height: 24px;
+	
+				&:last-child {
+					width: 12px;
+					height: 12px;
+				}
+			}
+	
+			.date {
+				width: 100%;
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+			}
+	
+			.text {
+				margin-left: 10px;
+				margin-right: 10px;
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 400;
+				font-size: 18px;
+				color: #37C3A0;
+				text-align: center;
+			}
+		}
+	}
+.mask {
+		position: fixed;
+		top: 0;
+		left: 0;
+		right: 0;
+		bottom: 0;
+		background-color: rgba(0, 0, 0, 0.5);
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		z-index: 999;
+		animation: fadeIn 0.3s ease;
+	}
+
+	/* 弹窗容器样式 */
+	.popup-container2 {
+		//width: 50%;
+		min-height: 250px;
+		background: #FBF4EE;
+		border-radius: 12px;
+		box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15);
+		animation: scaleIn 0.3s ease;
+		overflow: hidden;
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+		justify-content: space-between;
+		padding: 30px 50px;
+
+		.title-t {
+			font-size: 24px;
+			font-weight: bold;
+			color: #37C3A0;
+			text-align: center;
+			margin-bottom: 20px;
+		}
+
+		.title-r {
+			font-size: 20px;
+			color: #37C3A0;
+			text-align: center;
+			padding: 20px 0;
+		}
+
+		.btn-r {
+			text-align: center;
+			background: #37C3A0;
+			font-size: 20px;
+			color: #FBF4EE;
+			border-radius: 12px;
+			width: 100%;
+			height: 50px;
+			line-height: 50px;
+		}
+	}
+
+	.one-t {
+		white-space: nowrap;
+		/* 强制文本不换行 */
+		overflow: hidden;
+		/* 隐藏超出容器的内容 */
+		text-overflow: ellipsis;
+		/* 超出部分显示省略号 */
+	}
+
+	.two-t {
+		display: -webkit-box;
+		-webkit-box-orient: vertical;
+		-webkit-line-clamp: 2;
+		/* 强制显示2行,超出部分省略 */
+		overflow: hidden;
+	}
+
+	.content {
+		padding-bottom: 30rpx;
+		// 个人信息
+		.user-info {
+			// background: #FBF4EE;
+			padding: 0 24rpx;
+
+			.info-box {
+				margin-top: 20rpx;
+				margin-bottom: 20rpx;
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				background: #FFFFFF;
+				border-radius: 16rpx 16rpx 16rpx 16rpx;
+
+				.left {
+					width: 100%;
+					display: flex;
+					align-items: center;
+					padding: 20rpx;
+
+					.head-box {
+						width: 120rpx;
+						height: 120rpx;
+						line-height: 100rpx;
+						font-size: 30rpx;
+						text-align: center;
+						margin-right: 20rpx;
+
+						.img {
+							border-radius: 50%;
+							width: 100%;
+							height: 100%;
+						}
+					}
+
+					.info {
+						width: calc(100% - 140rpx);
+						height: 120rpx;
+						display: flex;
+						flex-direction: column;
+						justify-content: space-between;
+						color: #333;
+
+						.name {
+							font-size: 30rpx;
+
+						}
+
+						.info-top {
+							color: #999999;
+							font-size: 24rpx;
+
+							.sex {
+								margin-right: 20rpx;
+							}
+						}
+
+						.phone {
+							font-size: 24rpx;
+							color: #999999;
+						}
+
+						.title {
+							font-size: 28rpx;
+						}
+					}
+				}
+
+				.right {
+					width: 40rpx;
+					height: 40rpx;
+				}
+			}
+
+			.userinfo-list {
+				margin: 0 -16rpx 0 0;
+
+				.userinfo-item {
+					flex: 1;
+					min-height: 136rpx;
+					padding: 24rpx;
+					box-sizing: border-box;
+					margin: 0 16rpx 16rpx 0;
+					background: #FFFFFF;
+					border-radius: 16rpx 16rpx 16rpx 16rpx;
+					font-family: PingFang SC;
+					font-weight: 400;
+					font-size: 24rpx;
+					color: #757575;
+
+					image {
+						width: 56rpx;
+						height: 56rpx;
+					}
+
+					.num {
+						font-family: DIN, DIN;
+						font-weight: 500;
+						font-size: 36rpx;
+						color: #333333;
+						margin-right: 10rpx;
+					}
+
+					.txt {
+						font-family: PingFang SC;
+						font-weight: 500;
+						font-size: 24rpx;
+						color: #333333;
+					}
+				}
+			}
+
+			.comp-info {
+				padding: 20rpx 0 40rpx;
+				display: flex;
+				align-items: center;
+
+				.img {
+					width: 30rpx;
+					height: 30rpx;
+					margin-right: 20rpx;
+				}
+
+				.text {
+					font-size: 30rpx;
+					color: #fff;
+				}
+			}
+		}
+
+		// 详细信息
+		.info-detail {
+			padding: 0 24rpx;
+			margin-top: 20rpx;
+			overflow: hidden;
+
+			.item {
+				margin-bottom: 20rpx;
+				border-bottom: 1px solid #f7f7f7;
+				display: flex;
+				flex-direction: column;
+				justify-content: space-between;
+
+				.label {
+					font-size: 36rpx;
+					font-weight: bold;
+					margin-right: 20rpx;
+				}
+
+				.time {
+					font-weight: 400;
+					font-size: 24rpx;
+					color: #666666;
+				}
+
+				.content {
+					margin-top: 20rpx;
+					padding: 20rpx;
+					font-family: PingFang SC;
+					font-weight: 400;
+					font-size: 28rpx;
+					background: #FFFFFF;
+					border-radius: 16rpx 16rpx 16rpx 16rpx;
+					border: 1px solid #FBF4EE;
+
+					.desc {
+						margin-bottom: 20rpx;
+						padding-left: 20rpx;
+						position: relative;
+						line-height: 40rpx;
+
+						&::before {
+							content: '';
+							position: absolute;
+							z-index: 9;
+							top: 15rpx;
+							left: 0;
+							width: 10rpx;
+							height: 10rpx;
+							background: #37C3A0;
+							border-radius: 5rpx;
+						}
+					}
+				}
+			}
+		}
+
+		.footer {
+			margin: 30rpx 20rpx 0;
+			padding: 20rpx 0;
+			border-radius: 16rpx 16rpx 16rpx 16rpx;
+			background: #37C3A0;
+			font-size: 28rpx;
+			color: #fff;
+			text-align: center;
+		}
+	}
+</style>

+ 518 - 0
pages/user/question.vue

@@ -0,0 +1,518 @@
+<template>
+	<view class="content">
+		<!-- 个人信息 -->
+		<view class="blur-bg-2"></view>
+		<view class="top-btn">
+			<view class="back x-c" @click="$navBack()">
+				<image src='/static/image/new/icon_back.svg'></image>
+				返回
+			</view>
+			<view class="title x-c">
+				<image src='/static/image/new/img_title1.svg'></image>
+				<text>问诊</text>
+				<image src='/static/image/new/img_title2.svg'></image>
+			</view>
+			<view class="index x-c" @click="isShow=true">
+				<image src='/static/image/new/icon_home.svg'></image>
+				首页
+			</view>
+		</view>
+		<view class="userBox y-c" v-if="currentIndex === index" v-for="(item,index) in qw" :key="index">
+			<view class="toptitle">
+				<view class="tips">
+					<view class="num x-c">{{index+1}}/{{qw.length}}</view>
+					<view class="select x-c" v-if="index!=4">多选</view>
+				</view>
+				<view class="topic">{{item.name}}</view>
+			</view>
+			<view class="userInfo y-bc">
+			    <view class="item" v-for="(it,idx) in  item.option" :key="idx" :class="{ 'active': item.selected.includes(idx) }" @click="selectOption(index, idx)">
+					<view class="option-text">{{it.name}}</view>
+					<image src='/static/image/new/icon_selected.svg' v-if="item.selected.includes(idx)"></image>
+				</view>
+				<view class="btn-box x-ac">
+					<view class="last-btn" v-if="currentIndex>0" @click="lastItem(index)">上一题</view>
+					<view class="next-btn" @click="nextItem(index)">{{index === qw.length - 1 ? '提交' : '下一题'}}</view>
+				</view>
+			</view>
+		</view>
+		<view v-if="isShow" class="mask">
+			<view class="popup-container">
+				<image class="bg" src='/static/image/new/bg_popup.svg'></image>
+				<view class="title-t x-c">
+					<image src='/static/image/new/img_title1.svg'></image>
+					<text>提示</text>
+					<image src='/static/image/new/img_title2.svg'></image>
+					</view>
+				<view class="title-r">确定要中断当前操作,返回首页吗~</view>
+				<!-- <image style="width: 200px;height: 200px;margin-bottom: 20px;" :src="qUrl"></image> -->
+				<view class="x-c">
+					<view class="btn-l" @click="close">取消</view>
+					<view class="btn-r" @click="goIndex">确认</view>
+				</view>
+			</view>
+		</view>
+		<CustomToast ref="toast"></CustomToast>
+	</view>
+</template>
+
+<script>
+	import {
+		getUserInfoByUserId,
+		getUserInfo,
+	   consultationCollect
+	} from '@/api/user.js';
+	import CustomToast from '@/components/CustomToast.vue';
+	export default {
+		components: { CustomToast },
+		data() {
+			return {
+				isShow:false,
+				currentIndex: 0, // 当前显示的题目索引
+				qw:[
+					{
+						qid:1,
+						name:"您平时是否有以下状况?",
+						option:[
+							{id:1,name:"高血压"},
+							{id:2,name:"高血脂"},
+							{id:3,name:"高血糖"},
+							{id:4,name:"高尿酸"},
+							{id:5,name:"无"},
+						],
+						selected: [] // 存储选中的选项索引
+					},
+					{
+						qid:2,
+						name:"您是否有以下情况?",
+						option:[
+							{id:1,name:"手术史"},
+							{id:2,name:"长期用药"},
+							{id:3,name:"过敏史"},
+							{id:4,name:"遗传疾病"},
+							{id:5,name:"无"},
+						],
+						selected: [] // 存储选中的选项索引
+					},
+					{
+						qid:3,
+						name:"您是否有以下不良生活习惯?",
+						option:[
+							{id:1,name:"吸烟"},
+							{id:2,name:"喝酒"},
+							{id:3,name:"熬夜"},
+							{id:4,name:"精神压力过大"},
+							{id:5,name:"无"},
+						],
+						selected: [] // 存储选中的选项索引
+					},
+					{
+						qid:4,
+						name:"您是否有以下不良饮食习惯?",
+						option:[
+							{id:1,name:"偏咸饮食"},
+							{id:2,name:"喜欢吃辣"},
+							{id:3,name:"重甜食油腻"},
+							{id:4,name:"贪食寒凉"},
+							{id:5,name:"无"},
+						],
+						selected: [] // 存储选中的选项索引
+					},
+					{
+						qid:5,
+						name:"您平时的运动情况是?",
+						option:[
+							{id:1,name:"每天规律运动,每次半小时以上"},
+							{id:2,name:"每周运动5次以上,每次半小时以上"},
+							{id:3,name:"每周运动3次以上,每次半小时以上"},
+							{id:4,name:"每周运动1-2次,每次半小时以上"},
+							{id:5,name:"基本不运动"},
+						],
+						selected: [] // 存储选中的选项索引
+					}
+				]
+			}
+		},
+		onLoad(option) {
+			
+		},
+		onShow() {
+		},
+		methods: {
+			//首页
+			goIndex(){
+				this.isShow=false
+				uni.reLaunch({
+					url: '/pages/index/index',
+					animationType: 'none',
+					animationDuration: 2000
+				})
+			},
+			close(){
+				this.isShow=false
+			},
+			 // 选中/取消选中选项
+			    selectOption(quesIndex, optIndex) {
+			      const question = this.qw[quesIndex];
+			      // 判断是否已选中:选中则取消,未选中则添加
+				  if (quesIndex === 4) {
+				          question.selected = [optIndex]; // 单选直接替换数组
+				        } else {
+			      if (question.selected.includes(optIndex)) {
+			        question.selected = question.selected.filter(idx => idx !== optIndex);
+			      } else {
+			        question.selected.push(optIndex);
+			      }
+				  }
+			    },
+				// 上一题
+				    lastItem(index) {
+				      // 第一题禁用上一题
+				      if (index === 0) return;
+				      // 切换到上一题并滚动到顶部
+				      this.currentIndex = index - 1;
+				    },
+				  // 下一题/提交答案
+				    nextItem(index) {
+				      // 验证:未选中任何选项时提示
+				      if (!this.qw[index].selected.length) {
+						this.$refs.toast.showToast({ title: '还没选择选项呢,选好再继续呀~'})
+				        return;
+				      }
+				       // 最后一题:提交答案
+				            if (index === this.qw.length - 1) {
+				              this.submitAnswers();
+				              return;
+				            }
+				      
+				            // 非最后一题:切换到下一题
+				            this.currentIndex = index + 1;
+				    },
+			// 提交所有答案
+			    submitAnswers() {
+			      // 整理答案数据(示例格式)
+				  // questionIndex: idx + 1,
+				  // question: item.name,
+				  // selectedOptions: item.selected.map(i => item.option[i].name),
+				  // selectedIndexes: item.selected,
+				  const getSelectedStr = (item) => {
+				    // 边界处理:防止item/selected/option不存在导致报错
+				    if (!item || !Array.isArray(item.selected) || !item.option) return '';
+				    // 映射并过滤空值,避免无效逗号
+				    return item.selected.map(i => item.option[i]?.name || '').filter(Boolean).join(',');
+				  };
+const answers = {
+  conditions: getSelectedStr(this.qw[0]) || '',
+  situations: getSelectedStr(this.qw[1]) || '',
+  liftHabits: getSelectedStr(this.qw[2]) || '',
+  eatHabits: getSelectedStr(this.qw[3]) || '',
+  exercise: getSelectedStr(this.qw[4]) || ''
+};
+			     var token = uni.getStorageSync('AppToken');
+				 console.log('token',token)
+			      console.log('提交的答案:', answers);
+			      // 模拟接口提交
+			      uni.showLoading({ title: '提交中...' });
+				  consultationCollect(answers).then(res => {
+					  if(res.code==200){
+						  setTimeout(() => {
+						    uni.hideLoading();
+							uni.showToast({ title: '提交成功', icon: 'success' });
+						    // 提交成功后跳转(示例)
+						    uni.navigateTo({ url: '/pages/device/pulse/transition' });
+						  }, 1000);
+					  }else{
+						  this.$refs.toast.showToast({title: res.msg});
+					  }
+				  },rej => {});
+			      
+			    }
+		}
+	}
+</script>
+
+
+<style scoped lang="scss">
+	page {
+		background: #fff;
+		font-size: 16px
+	}
+/* 遮罩层样式 */
+	.mask {
+		position: fixed;
+		top: 0;
+		left: 0;
+		right: 0;
+		bottom: 0;
+		background-color: rgba(0, 0, 0, 0.5);
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		z-index: 999;
+		animation: fadeIn 0.3s ease;
+	}
+
+	/* 弹窗容器样式 */
+	.popup-container {
+		//width: 50%;
+		width: 620px;
+		height: 352px;
+		background: #FFFFFF;
+		border-radius: 39px 39px 39px 39px;
+		animation: scaleIn 0.3s ease;
+		overflow: hidden;
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+		justify-content: space-between;
+		padding:43px;
+		position: relative;
+		.bg{
+			width: 100%;
+			height: 244px;
+			position: absolute;
+			top:0
+		}
+		.title-t {
+			image{
+				width: 153px;
+				height: 25px;
+			}
+			text{
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 500;
+				font-size: 32px;
+				color: #333333;
+				margin: 0 10px;
+			}
+		}
+
+		.title-r {
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
+			font-size: 28px;
+			color: #333333;
+		}
+       .btn-l{
+		   display: flex;
+		   align-items: center;
+		   justify-content: center;
+		   font-family: PingFang SC, PingFang SC;
+		   font-weight: 600;
+		   font-size: 28px;
+		   color: #37C3A0;
+		   width: 220px;
+		   height: 64px;
+		   border-radius: 121px 121px 121px 121px;
+		   border: 2px solid #37C3A0;
+		   margin-right: 40px;
+	   }
+		.btn-r {
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			width: 220px;
+			height: 64px;
+			background: #37C3A0;
+			border-radius: 121px 121px 121px 121px;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 600;
+			font-size: 28px;
+			color: #FFFFFF;
+		}
+	}
+	.content {
+		width: 100%;
+		height: 100%;
+		background: #D8F6EF;
+		padding: 28px;
+		display: flex;
+		flex-direction: column;
+		.blur-bg-2 {
+		   width: 350px;
+		   height: 350px;
+		   background: #FFFDCC;
+		   // opacity: 0.47;
+		   filter: blur(200px);
+		   position: absolute;
+		   z-index: 1;
+		   top: 60px;
+		   right: calc(0px - 107px); 
+		   pointer-events: none
+		}
+	}
+
+	.top-btn {
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+z-index:2;
+		.back {
+			width: 140px;
+			height: 48px;
+			background: rgba(255, 255, 255, 0.64);
+			border-radius: 45px 45px 45px 45px;
+			border: 2px solid #FFFFFF;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 500;
+			font-size: 22px;
+			color: #327E6F;
+
+			image {
+				margin-right: 4px;
+				width: 24px;
+				height: 24px;
+			}
+		}
+
+		.title {
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 600;
+			font-size: 36px;
+			color: #327E6F;
+			line-height: 54px;
+
+			text {
+				margin: 0 14px;
+			}
+
+			image {
+
+				width: 153px;
+				height: 25px;
+			}
+		}
+
+		.index {
+			width: 140px;
+			height: 48px;
+			background: rgba(255, 255, 255, 0.64);
+			border-radius: 55px 55px 55px 55px;
+			border: 2px solid #FFFFFF;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 500;
+			font-size: 22px;
+			color: #327E6F;
+
+			image {
+				margin-right: 4px;
+				width: 24px;
+				height: 24px;
+			}
+		}
+	}
+
+	.userBox {
+		flex: 1;
+		margin-top: 28px;
+		background: rgba(255, 255, 255, 0.7);
+		border-radius: 24px 24px 24px 24px;
+		padding: 27px 40px;
+        z-index: 9;
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+		.toptitle {
+			width: 720px;
+			display: flex;
+			flex-direction: column;
+            align-items: start;
+			margin-top: 12px;
+			.tips {
+				display: flex;
+				align-items: center;
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 600;
+				font-size: 24px;
+				margin-bottom: 20px;
+				.num{
+					width: 80px;
+					height: 36px;
+					background: #37C3A0;
+					border-radius: 55px 55px 55px 55px;
+					color: #fff;
+					margin-right:16px ;
+				}
+				.select{
+					width: 80px;
+					height: 36px;
+					background: #FFFFFF;
+					border-radius: 55px 55px 55px 55px;
+					border: 2px solid #E3B419;
+				    color: #E9A615;
+				}
+			}
+			.topic{
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 500;
+				font-size: 28px;
+				color: #333333;
+			}
+		}
+		.userInfo{
+			.item{
+				width: 720px;
+				height: 80px;
+				background: rgba(55,195,160,0.08);
+				border-radius: 24px 24px 24px 24px;
+				text-align: center;
+				position: relative;
+				margin-top: 32px;
+				.option-text{
+					font-family: PingFang SC, PingFang SC;
+					font-weight: 400;
+					font-size: 28px;
+					line-height: 80px;
+					color: #333333;
+					
+				}
+				&.active{
+					background: rgba(55,195,160,0.2);
+					border: 2px solid #37C3A0;
+					image{
+						position: absolute;
+						top:18px;
+						right: 32px;
+						width: 44px;
+						height: 44px;
+					}
+				}
+			}
+		}
+		.btn-box {
+			margin-top: 50px;
+			margin-bottom: 16px;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			.last-btn{
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				width: 280px;
+				height: 68px;
+				border-radius: 121px 121px 121px 121px;
+				border: 2px solid #37C3A0;
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 600;
+				font-size: 28px;
+				color: #37C3A0;
+				margin-right: 40px;
+			}
+			.next-btn{
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				width: 280px;
+				height: 68px;
+				background: #37C3A0;
+				border-radius: 121px 121px 121px 121px;
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 600;
+				font-size: 28px;
+				color: #fff;
+			}
+			
+		}
+	}
+</style>

+ 334 - 0
pages/user/success.vue

@@ -0,0 +1,334 @@
+<template>
+	<view class="content">
+		<!-- 个人信息 -->
+		<view class="blur-bg-2"></view>
+		<view class="top-btn">
+			<view class="back x-c" @click="$navBack()">
+				<image src='/static/image/new/icon_back.svg'></image>
+				返回
+			</view>
+			<view class="title x-c">
+				<image src='/static/image/new/img_title1.svg'></image>
+				<text>信息采集</text>
+				<image src='/static/image/new/img_title2.svg'></image>
+			</view>
+			<view class="index x-c" @click="goIndex">
+				<image src='/static/image/new/icon_home.svg'></image>
+				首页
+			</view>
+		</view>
+		<view class="userBox y-bc">
+			<view class="successBox">
+				<image src='/static/image/new/img_finish.svg'></image>
+				<view class="title">信息采集完成</view>
+				<view class="text">接下来,我开始为您做健康检测啦~</view>
+			</view>
+			<view class="stepBox">
+				<view class="title">检测环节</view>
+				<view class="stepInfo x-bc">
+					<view class="step y-c">
+						<image src='/static/image/new/icon_face.svg'></image>
+						<text>面诊</text>
+					</view>
+					<image class="arrow" src='/static/image/new/icon_arrow.svg'></image>
+					<view class="step y-c">
+						<image src='/static/image/new/icon_tone.svg'></image>
+						<text>舌诊</text>
+					</view>
+					<image class="arrow" src='/static/image/new/icon_arrow.svg'></image>
+					<view class="step y-c">
+						<image src='/static/image/new/icon_question.svg'></image>
+						<text>问诊</text>
+					</view>
+					<image class="arrow" src='/static/image/new/icon_arrow.svg'></image>
+					<view class="step y-c">
+						<image src='/static/image/new/icon_hand.svg'></image>
+						<text>脉诊</text>
+					</view>
+				</view>
+			</view>
+            <view class="btnBox">
+				<view class="timer">即将开始检测 {{countDown}}s</view>
+				<view class="btn" @click="goTest">立即开始</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		getUserInfoByUserId,
+		getUserInfo
+	} from '@/api/user.js';
+	export default {
+		data() {
+			return {
+				countDown: 5, // 初始倒计时5秒
+				timer: null // 定时器标识
+			}
+		},
+		onLoad(option) {
+			this.startCountDown();
+		},
+		onShow() {
+			if (this.countDown <= 0) {
+			      this.countDown = 5;
+			      this.startCountDown();
+			    }
+		},
+		  onUnload() {
+		    // 页面销毁时清除定时器,避免内存泄漏
+		    clearInterval(this.timer);
+		    this.timer = null;
+		  },
+		methods: {
+			 // 倒计时逻辑
+			    startCountDown() {
+			      this.timer = setInterval(() => {
+			        if (this.countDown > 0) {
+			          this.countDown--;
+			        } else {
+			          // 倒计时结束,清除定时器
+			          clearInterval(this.timer);
+			          this.timer = null;
+					  // uni.navigateTo({
+					  // 	url:"/pages/device/tongue/facePhoto"
+					  // });
+			        }
+			      }, 1000);
+			    },
+			//首页
+			goIndex(){
+				uni.reLaunch({
+					url: '/pages/index/index',
+					animationType: 'none',
+					animationDuration: 2000
+				})
+			},
+			// 性别切换
+			genderChange(sex) {
+				this.form.sex = sex;
+			},
+			// 设置输入框高亮状态
+			setHighlight(field, status) {
+				this.$set(this.highlightStatus, field, status);
+			},
+			// 确认提交
+			goTest(){
+				uni.navigateTo({
+					url:"/pages/device/tongue/facePhoto"
+				});
+			},
+		}
+	}
+</script>
+
+
+<style scoped lang="scss">
+	page {
+		background: #fff;
+		font-size: 16px
+	}
+
+	.content {
+		width: 100%;
+		height: 100vh;
+		background: #D8F6EF;
+		padding: 28px;
+		display: flex;
+		flex-direction: column;
+		.blur-bg-2 {
+		   width: 350px;
+		   height: 350px;
+		   background: #FFFDCC;
+		   // opacity: 0.47;
+		   filter: blur(200px);
+		   position: absolute;
+		   z-index: 1;
+		   top: 60px;
+		   right: calc(0px - 107px); 
+		   pointer-events: none
+		}
+	}
+
+	.top-btn {
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+z-index:2;
+		.back {
+			width: 140px;
+			height: 48px;
+			background: rgba(255, 255, 255, 0.64);
+			border-radius: 45px 45px 45px 45px;
+			border: 2px solid #FFFFFF;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 500;
+			font-size: 22px;
+			color: #327E6F;
+
+			image {
+				margin-right: 4px;
+				width: 24px;
+				height: 24px;
+			}
+		}
+
+		.title {
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 600;
+			font-size: 36px;
+			color: #327E6F;
+			line-height: 54px;
+
+			text {
+				margin: 0 14px;
+			}
+
+			image {
+
+				width: 153px;
+				height: 25px;
+			}
+		}
+
+		.index {
+			width: 140px;
+			height: 48px;
+			background: rgba(255, 255, 255, 0.64);
+			border-radius: 55px 55px 55px 55px;
+			border: 2px solid #FFFFFF;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 500;
+			font-size: 22px;
+			color: #327E6F;
+
+			image {
+				margin-right: 4px;
+				width: 24px;
+				height: 24px;
+			}
+		}
+	}
+
+	.userBox {
+		flex: 1;
+		margin-top: 28px;
+		background: rgba(255, 255, 255, 0.7);
+		border-radius: 24px 24px 24px 24px;
+		padding: 27px 40px;
+        z-index: 9;
+		.successBox{
+			display: flex;
+			align-items: center;
+			flex-direction: column;
+			margin-top: 80px;
+			image{
+				width: 99px;
+				height: 99px;
+			}
+			.title{
+				margin-top: 42px;
+				width: 468px;
+				height: 57px;
+				line-height: 57px;
+				text-align: center;
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 500;
+				font-size: 35px;
+				color: #333333;
+				background-image:url(/static/image/new/img_cloud.svg);
+				background-repeat: no-repeat;
+				position: relative;
+				background-size: 100% 100%;
+			}
+			.text{
+				margin-top: 11px;
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 400;
+				font-size: 28px;
+				color: #333333;
+			}
+		}
+		.stepBox{
+			display: flex;
+			align-items: center;
+			flex-direction: column;
+			justify-content: center;
+			width: 525px;
+			height: 220px;
+			background-image:url(/static/image/new/bg_step.svg);
+			background-repeat: no-repeat;
+			position: relative;
+			background-size: 100% 100%;
+			.title{
+				position: absolute;
+				top:-21px;
+				width: 170px;
+				height: 42px;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				background-image:url(/static/image/new/bg_title.svg);
+				background-repeat: no-repeat;
+				background-size: 100% 100%;
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 500;
+				font-size: 24px;
+				color: #FFFFFF;
+			}
+			.arrow{
+				width: 27px;
+				height: 19px;
+				margin: 0 12px;
+				padding-top: 22px;
+			}
+			.step{
+				image{
+					width: 64px;
+					height: 64px;
+				}
+				text{
+					margin-top: 15px;
+					font-family: PingFang SC, PingFang SC;
+					font-weight: 400;
+					font-size: 24px;
+					color: #333333;
+				}
+			}
+			
+		}
+		.btnBox{
+			display: flex;
+			align-items: center;
+			flex-direction: column;
+			.timer{
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 400;
+				font-size: 24px;
+				color: #37C3A0;
+				animation: pulse 1s infinite alternate;
+			}
+			.btn {
+				margin-top: 28px;
+				margin-bottom: 16px;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				width: 360px;
+				height: 68px;
+				background: #37C3A0;
+				border-radius: 121px 121px 121px 121px;
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 600;
+				font-size: 28px;
+				color: #FFFFFF;
+			}
+		}
+		
+	}
+	@keyframes pulse {
+	  from { opacity: 0.8; }
+	  to { opacity: 1; }
+	}
+</style>

+ 393 - 185
pages/user/userInfo.vue

@@ -1,231 +1,439 @@
 <template>
 	<view class="content">
 		<!-- 个人信息 -->
-		<view class="user-info">
-			<view class="info-box">
-				<view class="left">
-					<view class="head-box">
-						<image class="img" :src="avatar" mode="aspectFill"></image>
-					</view>
-					<view class="info">
-						<text class="name">{{nickName}}</text>
-						<text class="title">{{postNames}}</text>
-					</view>
-				</view>
-				<!-- <image  class="right" src="@/static/image/my/icon_edit.png" mode="aspectFill" @click="editInfo"></image> -->
-			</view>
+		<view class="blur-bg-2"></view>
+		<view class="top-btn">
 		
-		</view>
-		<!-- 详细信息 -->
-		<view class="info-detail">
-			<view class="item">
-				<text class="label">姓名</text>
-				<text class="text">{{nickName}}</text>
+			<view class="back x-c" @click="$navBack()">
+				<image src='/static/image/new/icon_back.svg'></image>
+				返回
 			</view>
-			<view class="item column" @click="callPhone(phonenumber)">
-				<view class="left">
-					<text class="label">手机</text>
-					<text class="text">{{phonenumber}}</text>
-				</view>
-				<image class="img" src="/static/images/icon_phone_left.png" mode="aspectFill"  ></image>
+			<view class="title x-c">
+				<image src='/static/image/new/img_title1.svg'></image>
+				<text>信息采集</text>
+				<image src='/static/image/new/img_title2.svg'></image>
 			</view>
-			<view class="item">
-				<text class="label">性别</text>
-				<text class="text">{{sex}}</text>
+			<view class="index x-c" @click="goIndex">
+				<image src='/static/image/new/icon_home.svg'></image>
+				首页
 			</view>
-			<view class="item">
-				<text class="label">邮箱</text>
-				<text class="text">{{email}}</text>
+		</view>
+		<view class="userBox">
+			<view class="toptitle">
+				<view class="tips">首先</view>
+				请您填写一些基本信息,这将帮助我为您提供更精准的分析。
+			</view>
+			<view class="userInfo y-bc">
+				<view class="form-item">
+					<text class="label">姓名</text>
+					<input type="text" v-model="form.username" class="form-input" placeholder="请输入姓名"
+						placeholder-class="text-input" :class="{'input-highlight': highlightStatus.username }"
+						@focus="setHighlight('username', true)" @blur="setHighlight('username', false)" />
+				</view>
+
+				<view class="form-item">
+					<text class="label">性别</text>
+					<radio-group class="r-box x-f">
+						<view class="select x-c" :class="form.sex==1?'active':''" @click="genderChange(1)">
+							<image
+								:src="form.sex==1?'/static/image/new/icon_manbai.svg':'/static/image/new/icon_man.svg'">
+							</image>
+							<text>男</text>
+						</view>
+						<view class="select x-c" :class="form.sex==0?'active':''" @click="genderChange(0)">
+							<image
+								:src="form.sex==0?'/static/image/new/icon_femalebai.svg':'/static/image/new/icon_female.svg'">
+							</image>
+							<text>女</text>
+						</view>
+					</radio-group>
+				</view>
+				<view class="form-item">
+					<text class="label">手机号</text>
+					<input type="number" v-model="form.phone" maxlength="11" class="form-input" placeholder="请输入手机号"
+						placeholder-class="text-input" :class="{'input-highlight': highlightStatus.phone }"
+						@focus="setHighlight('phone', true)" @blur="setHighlight('phone', false)" />
+				</view>
+				<view class="form-item">
+					<text class="label">身份证号</text>
+					<input type="text" v-model="form.idCard" maxlength="18" class="form-input" placeholder="请输入身份证号"
+						placeholder-class="text-input" :class="{'input-highlight': highlightStatus.idCard }"
+						@focus="setHighlight('idCard', true)" @blur="setHighlight('idCard', false)" />
+				</view>
+				<view class="form-item">
+					<text class="label">年龄</text>
+					<input type="number" v-model="form.age" class="form-input" placeholder="请输入年龄"
+						placeholder-class="text-input" :class="{'input-highlight': highlightStatus.age }"
+						@focus="setHighlight('age', true)" @blur="setHighlight('age', false)" />
+				</view>
+				<view class="form-item">
+					<text class="label">身高(cm)</text>
+					<input type="digit" v-model="form.height" class="form-input" placeholder="请输入身高"
+						placeholder-class="text-input" :class="{'input-highlight': highlightStatus.height }"
+						@focus="setHighlight('height', true)" @blur="setHighlight('height', false)" />
+
+				</view>
+				<view class="form-item">
+					<text class="label">体重(kg)</text>
+					<input type="digit" v-model="form.weight" class="form-input" placeholder="请输入体重"
+						placeholder-class="text-input" :class="{'input-highlight': highlightStatus.weight }"
+						@focus="setHighlight('weight', true)" @blur="setHighlight('weight', false)" />
+
+				</view>
+				<view class="btn-box" @click="onConfirm">提交</view>
 			</view>
 
 		</view>
+		<CustomToast ref="toast"></CustomToast>
 	</view>
 </template>
 
 <script>
-	import {getUserInfoByUserId,getUserInfo} from '@/api/user.js';
+	import {
+		getUserInfoByUserId,
+		getUserInfo,addUser
+	} from '@/api/user.js';
+	import CustomToast from '@/components/CustomToast.vue';
 	export default {
+		components: { CustomToast },
 		data() {
 			return {
-				avatar:"/static/images/detault_head.jpg", 
-				nickName:"",
-				deptName:"",
-				postNames:"",
-				phonenumber:"",
-				email:"",
-				sex:"",
-				isShow:false,
-				userId:undefined,
+				form: {
+					username: '', // 姓名
+					phone: '', // 手机号
+					sex: 1, // 性别(1-男,0-女)
+					age: '', // 年龄
+					height: '', // 身高
+					weight: '', // 体重
+					idCard:'',
+					// previousMedicalHistory: '', // 既往病史
+					// habitList: [], //饮食习惯
+					// historyOfAllergies: '' //过敏史
+				},
+				// 每个输入框的高亮状态
+				highlightStatus: {
+					username: false,
+					phone: false,
+					idCard: false,
+					age: false,
+					height: false,
+					weight: false
+				}
 			}
 		},
 		onLoad(option) {
-			// 修改顶部导航背景色
-			// uni.setNavigationBarColor({
-			// 	frontColor: '#ffffff',
-			// 	backgroundColor: '#FF5C03',
-			// 	animation: {
-			// 		duration: 400,
-			// 		timingFunc: 'easeIn'
-			// 	}
-			// });
-			if(!this.$isEmpty(option.userId)){
-				this.userId = option.userId;
-				this.isShow=true;
-			}
-			
 		},
 		onShow() {
-			this.getUserInfo();
 		},
 		methods: {
-			bindUser(data){
-				var that=this;
-				that.nickName=data.user.nickName;
-				that.phonenumber=data.user.phone;
-				that.email=data.user.email;
-				if(data.user.sex==0){
-					that.sex="男";
-				}
-				else if(data.user.sex==1){
-					that.sex="女";
-				}
-				else if(data.user.sex==2){
-					that.sex="未知";
-				}
-				if(!that.$isEmpty(data.user.avatar)){
-					that.avatar=data.user.avatar;
-				}
+			//首页
+			goIndex(){
+				uni.reLaunch({
+					url: '/pages/index/index',
+					animationType: 'none',
+					animationDuration: 2000
+				})
 			},
-			getUserInfoByUserId(userId){
-				var data = {userId:userId};
-				var that=this;
-				getUserInfoByUserId(data).then(
-					res => {
-						that.bindUser(res);
-						
-					},
-					rej => {}
-				);
+			// 性别切换
+			genderChange(sex) {
+				this.form.sex = sex;
 			},
-			getUserInfo(){
-				var data = {};
-				var that=this;
-				getUserInfo(data).then(
-					res => {
-						that.bindUser(res);
-					},
-					rej => {}
-				);
+			// 设置输入框高亮状态
+			setHighlight(field, status) {
+				this.$set(this.highlightStatus, field, status);
 			},
-			// 拨打电话
-			callPhone(tel){
-				uni.makePhoneCall({
-					phoneNumber: tel
-				})
+			// 确认提交
+			onConfirm() {
+				// 表单校验
+				if (this.form.username == null || this.form.username == '') {
+					this.$refs.toast.showToast({
+					  title: "姓名不能为空",
+					});
+					return
+				}
+				const phoneReg = /^1[3-9]\d{9}$/;
+				      if (!phoneReg.test(this.form.phone)) {
+						  this.$refs.toast.showToast({
+						    title: "请输入正确的手机号",
+						  });
+				        return
+				      }
+					  const idCardReg = /(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
+					       if (!idCardReg.test(this.form.idCard)) {
+							 this.$refs.toast.showToast({
+							   title: "请输入正确的身份证号",
+							 });
+					         return
+					       }
+					 if (this.form.age == null || this.form.age == '') {
+						this.$refs.toast.showToast({
+						  title: "年龄不能为空",
+						});
+					 	return
+					 }
+					 
+					 if (this.form.height == null || this.form.height == '') {
+						this.$refs.toast.showToast({
+						  title: "身高不能为空",
+						});
+					 	return
+						
+					 }
+					 if (this.form.weight == null || this.form.weight == '') {
+						this.$refs.toast.showToast({
+						  title: "体重不能为空",
+						});
+					 	return
+					 }
+					  console.log('表单提交数据:', this.form);
+					  
+					  uni.showLoading({
+					  	title: "提交中...",
+					  	mask: true
+					  })
+					  addUser(this.form).then(res => {
+						  if (res.code == 200) {
+							  setTimeout(() => {
+							    uni.hideLoading();
+							    // this.$refs.toast.showToast({ title: '提交成功', icon: 'success' })
+							    // uni.showToast({ title: '提交成功', icon: 'success' });
+								uni.setStorageSync('AppToken', res.token);
+								uni.setStorageSync('userInfo', JSON.stringify(res.additionalData));
+							    uni.navigateTo({
+							    	url: '/pages/user/success'
+							    });
+							    // 重置表单+高亮状态
+							    this.form = {
+							      username: '',
+							      sex: 1,
+							      phone: '',
+							      idCard: '',
+							      age: '',
+							      height: '',
+							      weight: ''
+							    };
+							    // 重置高亮状态
+							    Object.keys(this.highlightStatus).forEach(key => {
+							      this.$set(this.highlightStatus, key, false);
+							    });
+							  }, 500);
+						  }else {
+					  			this.$refs.toast.showToast({title: res.msg});
+					  		}
+					  },rej => {});
 			},
-			// 个人信息编辑
-			editInfo() {
-				uni.navigateTo({
-					url: './editUser'
-				})
-			}
 		}
 	}
 </script>
 
 
 <style scoped lang="scss">
-	page{
+	page {
 		background: #fff;
+		font-size: 16px
 	}
-	.content{
-		background: #fff;
-		// 个人信息
-		.user-info{
-			background: #f7f7f7;
-			padding: 0 30upx;
-			.info-box{
-				display: flex;
-				align-items: center;
-				justify-content: space-between;
-				.left{
-					display: flex;
-					align-items: center;
-					justify-content: center;
-					padding: 20upx 0;
-					.head-box{
-						width: 120upx;
-						height: 120upx;
-						line-height: 100upx;
-						font-size: 30upx;
-						text-align: center;
-						margin-right: 20upx;
-						.img{
-							border-radius: 50%;
-							width: 100%;
-							height: 100%;
-						}
+
+	.content {
+		width: 100%;
+		height: 100%;
+		overflow: hidden;
+		background: #D8F6EF;
+		padding: 28px;
+		display: flex;
+		flex-direction: column;
+		.blur-bg-2 {
+		   width: 350px;
+		   height: 350px;
+		   background: #FFFDCC;
+		   // opacity: 0.47;
+		   filter: blur(200px);
+		   position: absolute;
+		   z-index: 1;
+		   top: 60px;
+		   right: calc(0px - 107px); 
+		   pointer-events: none
+		}
+	}
+
+	.top-btn {
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+z-index:2;
+		.back {
+			width: 140px;
+			height: 48px;
+			background: rgba(255, 255, 255, 0.64);
+			border-radius: 45px 45px 45px 45px;
+			border: 2px solid #FFFFFF;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 500;
+			font-size: 22px;
+			color: #327E6F;
+
+			image {
+				margin-right: 4px;
+				width: 24px;
+				height: 24px;
+			}
+		}
+
+		.title {
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 600;
+			font-size: 36px;
+			color: #327E6F;
+			line-height: 54px;
+
+			text {
+				margin: 0 14px;
+			}
+
+			image {
+
+				width: 153px;
+				height: 25px;
+			}
+		}
+
+		.index {
+			width: 140px;
+			height: 48px;
+			background: rgba(255, 255, 255, 0.64);
+			border-radius: 55px 55px 55px 55px;
+			border: 2px solid #FFFFFF;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 500;
+			font-size: 22px;
+			color: #327E6F;
+
+			image {
+				margin-right: 4px;
+				width: 24px;
+				height: 24px;
+			}
+		}
+	}
+
+	.userBox {
+		flex: 1;
+		margin-top: 28px;
+		background: rgba(255, 255, 255, 0.7);
+		border-radius: 24px 24px 24px 24px;
+		padding: 27px 40px;
+        z-index: 9;
+		.toptitle {
+			display: flex;
+			align-items: center;
+			width: 100%;
+			height: 66px;
+			background: rgba(55, 195, 160, 0.17);
+			border-radius: 12px 12px 12px 12px;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
+			font-size: 22px;
+			color: #0C4035;
+			line-height: 66px;
+			padding: 0 22px;
+
+			.tips {
+				width: 56px;
+				height: 28px;
+				margin-right: 14px;
+				line-height: 28px;
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 500;
+				font-size: 19px;
+				color: #FFFFFF;
+				text-align: center;
+				background: linear-gradient(95deg, #3DDAB3 0%, #50D7E0 100%);
+				border-radius: 5px 5px 5px 5px;
+			}
+		}
+
+		.form-item {
+			display: flex;
+			align-items: center;
+			margin-top: 32px;
+
+			.label {
+				width: 150px;
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 400;
+				font-size: 24px;
+				color: #333333;
+			}
+
+			.r-box {
+				width: 460px;
+
+				.select {
+					width: 128px;
+					height: 48px;
+					border-radius: 44px 44px 44px 44px;
+					border: 2px solid #37C3A0;
+					margin-right: 30px;
+
+					text {
+						font-family: PingFang SC, PingFang SC;
+						font-weight: 400;
+						font-size: 24px;
+						color: #37C3A0;
+						line-height: 48px;
+						margin-left: 12px;
 					}
-					.info{
-						height: 80upx;
-						display: flex;
-						flex-direction: column;
-						justify-content: space-between;
-						color: #333;
-						.name{
-							font-size: 30upx;
-						}
-						.title{
-							font-size: 28upx;
+
+					image {
+						width: 24px;
+						height: 24px;
+					}
+
+					&.active {
+						background: #37C3A0;
+
+						text {
+							color: #FFFFFF;
 						}
 					}
 				}
-				.right{
-					width: 40upx;
-					height: 40upx;
-				}
 			}
-			.comp-info{
-				padding: 20upx 0 40upx;
-				display: flex;
-				align-items: center;
-				.img{
-					width: 30upx;
-					height: 30upx;
-					margin-right: 20upx;
-				}
-				.text{
-					font-size: 30upx;
-					color: #fff;
+
+			.form-input {
+				width: 460px;
+				height: 60px;
+				padding: 7px 22px;
+				box-sizing: border-box;
+				background: #FFFFFF;
+				box-shadow: 0px 2px 12px 0px rgba(86, 162, 143, 0.12);
+				border-radius: 62px 62px 62px 62px;
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 400;
+				font-size: 24px;
+				&.input-highlight {
+				 box-shadow: 0px 2px 12px 0px rgba(86,162,143,0.12);
+				 border: 2px solid #37C3A0;
 				}
 			}
-		}
-		// 详细信息
-		.info-detail{
-			padding: 0 24upx;
-			margin-top: 20rpx;
-			.item{
-				padding: 20upx 0;
-				border-bottom: 1px solid #f7f7f7;
-				.label{
-					font-size: 30upx;
-					color: #999;
-					margin-right: 20upx;
-				}
-				.text{
-					font-size: 30upx;
-					color: #333;
-				}
-				&.column{
-					display: flex;
-					align-items: center;
-					justify-content: space-between;
-					.img{
-						width: 50upx;
-						height: 50upx;
-					}
-				}
+
+			.text-input {
+				color: #B1B1B1;
 			}
 		}
+
+		.btn-box {
+			margin-top: 50px;
+			margin-bottom: 16px;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			width: 360px;
+			height: 68px;
+			background: #37C3A0;
+			border-radius: 121px 121px 121px 121px;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 600;
+			font-size: 28px;
+			color: #FFFFFF;
+		}
 	}
-</style>
+</style>

+ 2 - 2
postcss.config.js

@@ -22,7 +22,7 @@ module.exports = {
     // 以下配置,可以将px转换为rem,如果要调整比例,可以调整 viewportWidth 来实现
     'postcss-px-to-viewport': {
       unitToConvert: 'px', // 需要转换的单位。我这里是px,如果你的项目都是用的rpx,就改成rpx
-      viewportWidth: 1280,// 密度,一般为750 || 375。这里可以自己修改
+      viewportWidth: 1024,// 密度,一般为750 || 375。这里可以自己修改
       unitPrecision: 5,
       propList: ['*'],
 	  viewportUnit: "vh", // 指定需要转换成的视窗单位,默认vw
@@ -34,7 +34,7 @@ module.exports = {
       exclude: undefined,
       include: undefined,
       landscape:false,
-	  landscapeUnit: 'vw', // 横屏时使用的单位
+	  landscapeUnit: 'vh', // 横屏时使用的单位
 	  landscapeWidth: 1280 // 横屏时使用的视窗宽度
     },
     '@dcloudio/vue-cli-plugin-uni/packages/postcss': {}

BIN
static/image/new/bg_home.png


Diff do ficheiro suprimidas por serem muito extensas
+ 45 - 0
static/image/new/bg_home.svg


Diff do ficheiro suprimidas por serem muito extensas
+ 6 - 0
static/image/new/bg_mountain.svg


BIN
static/image/new/bg_popup.png


+ 27 - 0
static/image/new/bg_popup.svg

@@ -0,0 +1,27 @@
+<svg width="620" height="244" viewBox="0 0 620 244" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="bg_popup">
+<mask id="mask0_375_2913" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="0" y="0" width="620" height="244">
+<rect id="Rectangle 819" width="620" height="244" rx="39" fill="white"/>
+</mask>
+<g mask="url(#mask0_375_2913)">
+<g id="Ellipse 396" opacity="0.47" filter="url(#filter0_f_375_2913)">
+<circle cx="440" cy="-36" r="175" fill="#FFFCB2"/>
+</g>
+<g id="Ellipse 397" opacity="0.2" filter="url(#filter1_f_375_2913)">
+<circle cx="196" cy="-40" r="179" fill="#5CF3DA"/>
+</g>
+</g>
+</g>
+<defs>
+<filter id="filter0_f_375_2913" x="65" y="-411" width="750" height="750" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
+<feFlood flood-opacity="0" result="BackgroundImageFix"/>
+<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
+<feGaussianBlur stdDeviation="100" result="effect1_foregroundBlur_375_2913"/>
+</filter>
+<filter id="filter1_f_375_2913" x="-183" y="-419" width="758" height="758" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
+<feFlood flood-opacity="0" result="BackgroundImageFix"/>
+<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
+<feGaussianBlur stdDeviation="100" result="effect1_foregroundBlur_375_2913"/>
+</filter>
+</defs>
+</svg>

+ 21 - 0
static/image/new/bg_square.svg

@@ -0,0 +1,21 @@
+<svg width="55" height="58" viewBox="0 0 55 58" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="bg_square">
+<g id="Rectangle 775" filter="url(#filter0_d_345_1784)">
+<rect width="54.8057" height="54.8057" rx="7.82938" fill="white"/>
+<rect x="0.652449" y="0.652449" width="53.5008" height="53.5008" rx="7.17694" stroke="#37C3A0" stroke-width="1.3049"/>
+</g>
+<path id="Vector 179" d="M1.30566 27.4028H53.5016" stroke="#37C3A0" stroke-width="0.652449" stroke-dasharray="2.61 2.61"/>
+<path id="Vector 180" d="M27.4033 1.30469L27.4033 53.5006" stroke="#37C3A0" stroke-width="0.652449" stroke-dasharray="2.61 2.61"/>
+</g>
+<defs>
+<filter id="filter0_d_345_1784" x="0" y="0" width="54.8057" height="57.4155" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
+<feFlood flood-opacity="0" result="BackgroundImageFix"/>
+<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
+<feOffset dy="2.60979"/>
+<feComposite in2="hardAlpha" operator="out"/>
+<feColorMatrix type="matrix" values="0 0 0 0 0.215686 0 0 0 0 0.764706 0 0 0 0 0.627451 0 0 0 1 0"/>
+<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_345_1784"/>
+<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_345_1784" result="shape"/>
+</filter>
+</defs>
+</svg>

Diff do ficheiro suprimidas por serem muito extensas
+ 7 - 0
static/image/new/bg_step.svg


+ 14 - 0
static/image/new/bg_title.svg

@@ -0,0 +1,14 @@
+<svg width="170" height="43" viewBox="0 0 170 43" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="bg_title">
+<path id="Rectangle 759" d="M17.8484 1.27855C18.566 0.465638 19.598 0 20.6823 0H149.318C150.402 0 151.434 0.465638 152.152 1.27855L168.896 20.2493C169.527 20.9639 169.527 22.0361 168.896 22.7507L152.152 41.7214C151.434 42.5344 150.402 43 149.318 43H20.6823C19.598 43 18.566 42.5344 17.8484 41.7214L1.10389 22.7507C0.473226 22.0361 0.473227 20.9639 1.10389 20.2493L17.8484 1.27855Z" fill="url(#paint0_linear_293_2003)"/>
+<path id="Rectangle 760" d="M22.8633 2.23633H147.137C148.118 2.23635 149.055 2.64333 149.726 3.36035L165.621 20.3711C166.215 21.0067 166.215 21.9933 165.621 22.6289L149.726 39.6396C149.055 40.3567 148.118 40.7636 147.137 40.7637H22.8633C21.8819 40.7636 20.9445 40.3567 20.2744 39.6396L4.37891 22.6289C3.78499 21.9933 3.78499 21.0067 4.37891 20.3711L20.2744 3.36035C20.9445 2.64333 21.8819 2.23636 22.8633 2.23633Z" stroke="white" stroke-width="0.472483"/>
+<circle id="Ellipse 397" cx="21.5" cy="21.5" r="3.5" fill="#EFFDF9"/>
+<circle id="Ellipse 396" cx="148.5" cy="21.5" r="3.5" fill="#EFFDF9"/>
+</g>
+<defs>
+<linearGradient id="paint0_linear_293_2003" x1="0" y1="21.5" x2="149.918" y2="21.5" gradientUnits="userSpaceOnUse">
+<stop stop-color="#37C3A0"/>
+<stop offset="1" stop-color="#6CD4BA"/>
+</linearGradient>
+</defs>
+</svg>

BIN
static/image/new/face.png


+ 7 - 0
static/image/new/icon_arrow.svg

@@ -0,0 +1,7 @@
+<svg width="28" height="20" viewBox="0 0 28 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="icon_arrow">
+<path id="Polygon 2" opacity="0.3" d="M26.4006 8.55934C27.1436 9.12665 27.1436 10.2452 26.4006 10.8125L19.1684 16.3349C18.2356 17.0472 16.8907 16.3821 16.8907 15.2084L16.8907 4.16346C16.8907 2.98976 18.2356 2.32459 19.1684 3.03689L26.4006 8.55934Z" fill="#37C3A0"/>
+<circle id="Ellipse 402" opacity="0.2" cx="10.8673" cy="9.92217" r="2.36242" fill="#37C3A0"/>
+<circle id="Ellipse 403" opacity="0.1" cx="2.36242" cy="9.92217" r="2.36242" fill="#37C3A0"/>
+</g>
+</svg>

+ 5 - 0
static/image/new/icon_back.svg

@@ -0,0 +1,5 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="icon_back">
+<path id="Vector" d="M7.1999 11.7L15.5459 3L17.3999 4.9332L10.9079 11.7L17.3999 18.4668L15.5459 20.4L8.1275 12.6672L7.1999 11.7Z" fill="#327E6F"/>
+</g>
+</svg>

BIN
static/image/new/icon_back1.png


+ 5 - 0
static/image/new/icon_back1.svg

@@ -0,0 +1,5 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="icon_back1">
+<path id="Vector" d="M7.1999 11.7L15.5459 3L17.3999 4.9332L10.9079 11.7L17.3999 18.4668L15.5459 20.4L8.1275 12.6672L7.1999 11.7Z" fill="white"/>
+</g>
+</svg>

+ 11 - 0
static/image/new/icon_blood.svg

@@ -0,0 +1,11 @@
+<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="icon_blood">
+<path id="Vector" d="M20.1983 12.519C20.1983 12.519 18.0455 18.5872 17.0225 19.6466C15.9994 20.706 14.3112 20.7355 13.2518 19.7124C12.1923 18.6894 12.1629 17.0012 13.1859 15.9418C14.209 14.8824 20.1983 12.519 20.1983 12.519Z" fill="#37C3A0" stroke="#37C3A0" stroke-width="1.8519" stroke-linejoin="round"/>
+<path id="Vector_2" d="M25.8995 25.899C28.433 23.3655 30 19.8655 30 15.9995C30 8.26751 23.732 1.99951 16 1.99951C8.268 1.99951 2 8.26751 2 15.9995C2 19.8655 3.56701 23.3655 6.10051 25.899" stroke="#37C3A0" stroke-width="2.46919" stroke-linecap="round" stroke-linejoin="round"/>
+<path id="Vector_3" d="M16 2.6665V5.33317" stroke="#37C3A0" stroke-width="1.8519" stroke-linecap="round" stroke-linejoin="round"/>
+<path id="Vector_4" d="M25.8966 7.42773L23.8242 9.10587" stroke="#37C3A0" stroke-width="1.8519" stroke-linecap="round" stroke-linejoin="round"/>
+<path id="Vector_5" d="M28.3483 18.155L25.75 17.5552" stroke="#37C3A0" stroke-width="1.8519" stroke-linecap="round" stroke-linejoin="round"/>
+<path id="Vector_6" d="M3.65137 18.155L6.24969 17.5552" stroke="#37C3A0" stroke-width="1.8519" stroke-linecap="round" stroke-linejoin="round"/>
+<path id="Vector_7" d="M6.10254 7.42773L8.17492 9.10593" stroke="#37C3A0" stroke-width="1.8519" stroke-linecap="round" stroke-linejoin="round"/>
+</g>
+</svg>

+ 8 - 0
static/image/new/icon_check.svg

@@ -0,0 +1,8 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="icon_check">
+<circle id="Ellipse 388" cx="12" cy="12" r="11" fill="white" stroke="#D3D3D3" stroke-width="2"/>
+<g id="success">
+<path id="checked" d="M12.0005 0.000305176C18.6277 0.000569061 24.0005 5.37305 24.0005 12.0003C24.0003 18.6274 18.6276 24 12.0005 24.0003C5.37317 24.0003 0.000653218 18.6276 0.000488281 12.0003C0.000488281 5.37289 5.37307 0.000305176 12.0005 0.000305176ZM18.3853 8.10382C18.2462 7.97427 17.998 7.96432 17.8394 8.08429L10.7788 13.43C10.6473 13.5296 10.4051 13.541 10.2642 13.4534L7.59229 11.7894C7.42499 11.6851 7.18757 11.7225 7.06104 11.8714L6.75244 12.2347C6.62074 12.39 6.64479 12.6069 6.79443 12.7464L10.0981 15.8245C10.3408 16.0505 10.7277 16.0606 10.9634 15.8411L18.5405 8.77863C18.6992 8.63077 18.7104 8.40698 18.5591 8.26593L18.3853 8.10382Z" fill="#37C3A0"/>
+</g>
+</g>
+</svg>

+ 5 - 0
static/image/new/icon_check_default.svg

@@ -0,0 +1,5 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="icon_check_default">
+<circle id="Ellipse 388" cx="12" cy="12" r="11" fill="white" stroke="#D3D3D3" stroke-width="2"/>
+</g>
+</svg>

Diff do ficheiro suprimidas por serem muito extensas
+ 8 - 0
static/image/new/icon_face.svg


+ 5 - 0
static/image/new/icon_female.svg

@@ -0,0 +1,5 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="icon_female">
+<path id="Vector" d="M14.0173 4.42733C10.7652 4.42733 8.11741 7.07028 8.11741 10.3224C8.11741 13.5697 10.7628 16.2151 14.0173 16.2151C17.2718 16.2151 19.9196 13.5721 19.9196 10.3224C19.922 7.07028 17.2718 4.42733 14.0173 4.42733ZM14.0173 18.7285C11.9427 18.7285 10.0457 17.9731 8.57549 16.7259L7.36434 17.9371L9.35255 19.9253L7.57299 21.7024L5.58479 19.7142L3.2776 22.0166L1.49805 20.2395L3.80283 17.9371L1.69711 15.8337L3.47666 14.0566L5.58239 16.1599L6.92065 14.8241C6.08843 13.5194 5.59918 11.9772 5.59918 10.3224C5.59918 5.68645 9.37413 1.91629 14.0173 1.91629C18.6604 1.91629 22.4378 5.68645 22.4378 10.3224C22.4378 14.956 18.6604 18.7285 14.0173 18.7285Z" fill="#37C3A0"/>
+</g>
+</svg>

+ 5 - 0
static/image/new/icon_femalebai.svg

@@ -0,0 +1,5 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="icon_female">
+<path id="Vector" d="M14.0173 4.42733C10.7652 4.42733 8.11741 7.07028 8.11741 10.3224C8.11741 13.5697 10.7628 16.2151 14.0173 16.2151C17.2718 16.2151 19.9196 13.5721 19.9196 10.3224C19.922 7.07028 17.2718 4.42733 14.0173 4.42733ZM14.0173 18.7285C11.9427 18.7285 10.0457 17.9731 8.57549 16.7259L7.36434 17.9371L9.35255 19.9253L7.57299 21.7024L5.58479 19.7142L3.2776 22.0166L1.49805 20.2395L3.80283 17.9371L1.69711 15.8337L3.47666 14.0566L5.58239 16.1599L6.92065 14.8241C6.08843 13.5194 5.59918 11.9772 5.59918 10.3224C5.59918 5.68645 9.37413 1.91629 14.0173 1.91629C18.6604 1.91629 22.4378 5.68645 22.4378 10.3224C22.4378 14.956 18.6604 18.7285 14.0173 18.7285Z" fill="white"/>
+</g>
+</svg>

Diff do ficheiro suprimidas por serem muito extensas
+ 5 - 0
static/image/new/icon_hand.svg


+ 7 - 0
static/image/new/icon_heat.svg

@@ -0,0 +1,7 @@
+<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="icon_heat">
+<path id="Vector" d="M11.626 19.1544C11.4887 19.1544 11.3529 19.1273 11.2261 19.0748C11.0993 19.0223 10.9841 18.9453 10.8871 18.8483C10.7901 18.7513 10.7131 18.6361 10.6606 18.5093C10.6081 18.3825 10.5811 18.2467 10.5811 18.1094V5.02129C10.5846 2.25387 12.7422 0 15.3919 0C18.0417 0 20.2028 2.25387 20.2028 5.02129V17.6922C20.2028 17.9693 20.0927 18.2351 19.8968 18.4311C19.7008 18.627 19.435 18.7371 19.1579 18.7371C18.8808 18.7371 18.615 18.627 18.419 18.4311C18.2231 18.2351 18.113 17.9693 18.113 17.6922V5.02129C18.113 3.40577 16.8898 2.08982 15.3919 2.08982C13.8941 2.08982 12.6744 3.40577 12.6744 5.02129V18.1094C12.6744 18.247 12.6473 18.3831 12.5946 18.5101C12.5418 18.6371 12.4645 18.7525 12.3671 18.8496C12.2697 18.9466 12.1541 19.0235 12.0269 19.0758C11.8997 19.1281 11.7635 19.1548 11.626 19.1544ZM21.4795 4.65753H24.6535V6.594H21.4795V4.65753ZM21.4795 7.58542H24.6535V9.5219H21.4795V7.58542ZM21.4795 10.4741H24.6535V12.4106H21.4795V10.4741Z" fill="#37C3A0"/>
+<path id="Vector_2" d="M15.3917 31.9998C13.6697 31.9964 11.9942 31.4405 10.6116 30.4139C9.22897 29.3874 8.21224 27.9443 7.71086 26.2968C7.20949 24.6494 7.24993 22.8846 7.82624 21.2618C8.40255 19.6391 9.48432 18.2441 10.9125 17.2819C11.1419 17.1402 11.4172 17.0927 11.6809 17.1493C11.9445 17.2059 12.1761 17.3622 12.3271 17.5856C12.4782 17.8089 12.537 18.082 12.4914 18.3478C12.4458 18.6135 12.2991 18.8514 12.0822 19.0115C11.0229 19.7235 10.2203 20.7569 9.79268 21.9595C9.3651 23.162 9.33517 24.4702 9.7073 25.6911C10.0794 26.9119 10.8339 27.981 11.8596 28.7406C12.8853 29.5002 14.1278 29.9103 15.4042 29.9103C16.6805 29.9103 17.9231 29.5002 18.9488 28.7406C19.9744 27.981 20.7289 26.9119 21.1011 25.6911C21.4732 24.4702 21.4433 23.162 21.0157 21.9595C20.5881 20.7569 19.7855 19.7235 18.7261 19.0115C18.4958 18.8569 18.3364 18.6171 18.2829 18.3449C18.2294 18.0727 18.2862 17.7904 18.4408 17.5601C18.5955 17.3298 18.8353 17.1703 19.1075 17.1168C19.3797 17.0633 19.662 17.1201 19.8923 17.2748C21.3228 18.2382 22.4059 19.6356 22.9822 21.2611C23.5586 22.8866 23.5975 24.6542 23.0934 26.3035C22.5893 27.9528 21.5688 29.3966 20.1822 30.4221C18.7956 31.4477 17.1163 32.0007 15.3917 31.9998Z" fill="#37C3A0"/>
+<path id="Vector_3" d="M17.1998 19.8852V15.3347C17.2108 15.0931 17.1737 14.8518 17.0906 14.6247C17.0076 14.3975 16.8802 14.1892 16.716 14.0117C16.5518 13.8342 16.3539 13.6911 16.1339 13.5907C15.9139 13.4903 15.6762 13.4345 15.4345 13.4268C15.1928 13.4345 14.955 13.4903 14.735 13.5907C14.5151 13.6911 14.3172 13.8342 14.153 14.0117C13.9887 14.1892 13.8614 14.3975 13.7784 14.6247C13.6953 14.8518 13.6582 15.0931 13.6692 15.3347V19.8638C12.706 20.2613 11.9097 20.9794 11.4152 21.8965C10.9207 22.8137 10.7585 23.8736 10.9559 24.8968C11.1533 25.9199 11.6982 26.8433 12.4984 27.5107C13.2986 28.1781 14.3049 28.5485 15.3468 28.559C16.3888 28.5695 17.4023 28.2196 18.2159 27.5685C19.0294 26.9174 19.5929 26.0051 19.8109 24.9862C20.0289 23.9673 19.8881 22.9043 19.4122 21.9773C18.9364 21.0503 18.1548 20.3163 17.1998 19.8995V19.8852Z" fill="#37C3A0"/>
+</g>
+</svg>

BIN
static/image/new/icon_home.png


+ 7 - 0
static/image/new/icon_home.svg

@@ -0,0 +1,7 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="icon_home">
+<path id="Vector (Stroke)" d="M11.3066 1.95996C11.7558 1.66017 12.3532 1.68097 12.7812 2.02344L20.2812 8.02344C20.5778 8.26065 20.75 8.62027 20.75 9V21C20.75 21.6904 20.1904 22.25 19.5 22.25H4.5C3.80964 22.25 3.25 21.6904 3.25 21V9C3.25 8.62027 3.42223 8.26065 3.71875 8.02344L11.2188 2.02344L11.3066 1.95996ZM5.75 9.60156V19.75H18.25V9.60156L12 4.60156L5.75 9.60156Z" fill="#327E6F"/>
+<path id="Vector (Stroke)_2" d="M14.5 13.25C15.1904 13.25 15.75 13.8096 15.75 14.5V21C15.75 21.6904 15.1904 22.25 14.5 22.25H9.5C8.80964 22.25 8.25 21.6904 8.25 21V14.5C8.25 13.8096 8.80964 13.25 9.5 13.25H14.5ZM10.75 19.75H13.25V15.75H10.75V19.75Z" fill="#327E6F"/>
+<path id="Vector" d="M4.5 21H19.5" stroke="#327E6F" stroke-width="2" stroke-linecap="round"/>
+</g>
+</svg>

Diff do ficheiro suprimidas por serem muito extensas
+ 2 - 0
static/image/new/icon_item.svg


+ 5 - 0
static/image/new/icon_man.svg

@@ -0,0 +1,5 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="icon_man">
+<path id="Vector" d="M10.1848 8.02958C6.93264 8.02958 4.28969 10.6414 4.28969 13.8551C4.28969 17.0665 6.93504 19.6782 10.1848 19.6782C13.4345 19.6782 16.0822 17.0641 16.0822 13.8551C16.0798 10.6414 13.4345 8.02958 10.1848 8.02958ZM22.4354 9.50695H19.6437V6.37954L17.1927 8.80184C18.2431 10.2192 18.8715 11.9628 18.8715 13.8527C18.8715 18.5846 14.9766 22.4339 10.1848 22.4339C5.39532 22.4339 1.49805 18.5846 1.49805 13.8527C1.49805 9.12082 5.39532 5.26911 10.1848 5.26911C12.0579 5.26911 13.787 5.8639 15.2069 6.8616L17.8474 4.25223H14.2931V1.49416H22.4354V9.50695Z" fill="#37C3A0"/>
+</g>
+</svg>

+ 5 - 0
static/image/new/icon_manbai.svg

@@ -0,0 +1,5 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="icon_man">
+<path id="Vector" d="M10.1843 8.02958C6.93215 8.02958 4.2892 10.6414 4.2892 13.8551C4.2892 17.0665 6.93455 19.6782 10.1843 19.6782C13.434 19.6782 16.0818 17.0641 16.0818 13.8551C16.0794 10.6414 13.434 8.02958 10.1843 8.02958ZM22.4349 9.50695H19.6433V6.37954L17.1922 8.80184C18.2426 10.2192 18.871 11.9628 18.871 13.8527C18.871 18.5846 14.9761 22.4339 10.1843 22.4339C5.39483 22.4339 1.49756 18.5846 1.49756 13.8527C1.49756 9.12082 5.39483 5.26911 10.1843 5.26911C12.0574 5.26911 13.7866 5.8639 15.2064 6.8616L17.8469 4.25223H14.2926V1.49416H22.4349V9.50695Z" fill="white"/>
+</g>
+</svg>

+ 13 - 0
static/image/new/icon_question.svg

@@ -0,0 +1,13 @@
+<svg width="64" height="64" viewBox="0 0 64 64" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="icon_question">
+<circle id="Ellipse 399" cx="32" cy="32" r="28.7638" stroke="#37C3A0" stroke-width="0.472483"/>
+<circle id="Ellipse 392" cx="32" cy="32" r="31.2913" stroke="#37C3A0" stroke-width="1.41745"/>
+<g id="Frame">
+<path id="Rectangle 760 (Stroke)" d="M42 38.5V21.5C42 20.9477 41.5523 20.5 41 20.5H24C23.4477 20.5 23 20.9477 23 21.5V38H21V21.5C21 19.8431 22.3431 18.5 24 18.5H41C42.6569 18.5 44 19.8431 44 21.5V38.5C44 40.2395 43.4064 41.8432 42.4116 43.1157C41.0406 44.8695 38.9021 46 36.5 46H33.25V44H36.5C38.2605 44 39.8276 43.174 40.8359 41.8843C41.5656 40.9509 42 39.7775 42 38.5Z" fill="#37C3A0"/>
+<path id="Rectangle 761 (Stroke)" d="M37 41C37 39.3431 35.6569 38 34 38H22C20.3431 38 19 39.3431 19 41C19 42.6569 20.3431 44 22 44H34C35.6569 44 37 42.6569 37 41ZM39 41C39 43.7614 36.7614 46 34 46H22C19.2386 46 17 43.7614 17 41C17 38.2386 19.2386 36 22 36H34C36.7614 36 39 38.2386 39 41Z" fill="#37C3A0"/>
+<path id="Ellipse 401 (Stroke)" d="M37 41C37 39.3431 35.6569 38 34 38C32.3431 38 31 39.3431 31 41C31 42.6569 32.3431 44 34 44C35.6569 44 37 42.6569 37 41ZM39 41C39 43.7614 36.7614 46 34 46C31.2386 46 29 43.7614 29 41C29 38.2386 31.2386 36 34 36C36.7614 36 39 38.2386 39 41Z" fill="#37C3A0"/>
+<rect id="Rectangle 762" x="26.5" y="24.5001" width="11.5" height="2" rx="1" fill="#37C3A0"/>
+<rect id="Rectangle 763" x="26.5" y="29.5001" width="8.5" height="2" rx="1" fill="#37C3A0"/>
+</g>
+</g>
+</svg>

+ 13 - 0
static/image/new/icon_report.svg

@@ -0,0 +1,13 @@
+<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="icon_report">
+<g id="Group 9541">
+<rect id="Rectangle 776" x="7.2" y="24.8" width="14.6" height="17.6" transform="rotate(-90 7.2 24.8)" stroke="#37C3A0" stroke-width="2.4"/>
+<rect id="Rectangle 777" x="3.02168" y="27.577" width="22.5553" height="4.2323" rx="2.11615" transform="rotate(-90 3.02168 27.577)" stroke="#37C3A0" stroke-width="2.4"/>
+<rect id="Rectangle 781" x="25.009" y="27.577" width="22.5553" height="4.2323" rx="2.11615" transform="rotate(-90 25.009 27.577)" stroke="#37C3A0" stroke-width="2.4"/>
+<rect id="Rectangle 779" x="10.0234" y="13.8564" width="9.16151" height="2.4" rx="1.2" fill="#37C3A0"/>
+<rect id="Rectangle 782" x="3" y="5" width="4.27537" height="3.66461" rx="1.8323" fill="#37C3A0"/>
+<rect id="Rectangle 783" x="24.9873" y="5" width="4.27537" height="3.66461" rx="1.8323" fill="#37C3A0"/>
+<rect id="Rectangle 780" x="10.0234" y="18.521" width="6.10768" height="2.4" rx="1.2" fill="#37C3A0"/>
+</g>
+</g>
+</svg>

+ 14 - 0
static/image/new/icon_sad.svg

@@ -0,0 +1,14 @@
+<svg width="84" height="84" viewBox="0 0 84 84" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="icon_sad">
+<path id="Shape" d="M42.056 74.2269C63.3563 74.2269 74.0001 59.9247 74.0001 42.2819C74.0001 24.6392 63.3563 10.3369 42.056 10.3369C20.7556 10.3369 10.1118 24.6392 10.1118 42.2819C10.1118 59.9247 20.7556 74.2269 42.056 74.2269Z" fill="#FFBF56"/>
+<path id="Union" d="M29.4229 29.1626C34.7789 29.1627 39.121 33.5047 39.1211 38.8608C39.1211 44.2171 34.7789 48.559 29.4229 48.5591C24.0667 48.5591 19.7246 44.2171 19.7246 38.8608C19.7247 33.5046 24.0668 29.1626 29.4229 29.1626ZM54.5205 29.1626C59.8764 29.1628 64.2177 33.5048 64.2178 38.8608C64.2178 44.217 59.8764 48.5588 54.5205 48.5591C49.1644 48.5591 44.8223 44.2171 44.8223 38.8608C44.8224 33.5047 49.1645 29.1626 54.5205 29.1626Z" fill="white"/>
+<g id="Union_2">
+<path d="M28.4022 20.3103C27.9671 21.9165 27.2036 23.4041 25.9704 24.4873C24.7553 25.5545 22.9892 26.3135 20.3758 26.3135C19.7457 26.3135 19.2349 26.8243 19.2349 27.4545C19.2349 28.0846 19.7457 28.5954 20.3758 28.5954C23.4672 28.5954 25.7908 27.6821 27.4762 26.2018C29.1435 24.7374 30.0914 22.802 30.6047 20.9068C30.7694 20.2986 30.4099 19.672 29.8017 19.5072C29.1935 19.3425 28.5669 19.702 28.4022 20.3103Z" fill="#333333"/>
+<path d="M55.7057 20.3103C56.1407 21.9165 56.9042 23.4041 58.1375 24.4873C59.3526 25.5545 61.1186 26.3135 63.732 26.3135C64.3622 26.3135 64.873 26.8243 64.873 27.4545C64.873 28.0846 64.3622 28.5954 63.732 28.5954C60.6406 28.5954 58.317 27.6821 56.6316 26.2018C54.9643 24.7374 54.0164 22.802 53.5031 20.9068C53.3384 20.2986 53.6979 19.672 54.3061 19.5072C54.9143 19.3425 55.5409 19.702 55.7057 20.3103Z" fill="#333333"/>
+<path d="M36.8218 59.8746C37.459 59.2373 39.12 58.261 42.0539 58.261C44.8551 58.261 46.6603 59.2488 47.2861 59.8746C48.1772 60.7658 49.622 60.7658 50.5132 59.8746C51.4043 58.9835 51.4043 57.5386 50.5132 56.6474C48.8571 54.9913 45.7942 53.6971 42.0539 53.6971C38.1422 53.6971 35.2393 55.0027 33.5947 56.6474C32.7035 57.5386 32.7035 58.9835 33.5947 59.8746C34.4858 60.7658 35.9306 60.7658 36.8218 59.8746Z" fill="#333333"/>
+<path d="M35.2082 38.8643C35.2082 41.3849 33.1649 43.4282 30.6444 43.4282C28.1239 43.4282 26.0806 41.3849 26.0806 38.8643C26.0806 36.3437 28.1239 34.3004 30.6444 34.3004C33.1649 34.3004 35.2082 36.3437 35.2082 38.8643Z" fill="#333333"/>
+<path d="M58.0273 38.8643C58.0273 41.3849 55.984 43.4282 53.4634 43.4282C50.9429 43.4282 48.8996 41.3849 48.8996 38.8643C48.8996 36.3437 50.9429 34.3004 53.4634 34.3004C55.984 34.3004 58.0273 36.3437 58.0273 38.8643Z" fill="#333333"/>
+</g>
+<path id="Rectangle 61" d="M9.15349 4.01681C9.39152 3.57851 10.0247 3.57408 10.2671 4.00996C17.2721 16.6052 19.4106 20.5813 19.4106 28.5454C19.4106 33.8361 15.0654 38.125 9.70532 38.125C4.34522 38.125 0 33.8361 0 28.5454C0 20.5732 1.98705 17.2124 9.15349 4.01681Z" fill="#3FA2FF"/>
+</g>
+</svg>

+ 6 - 0
static/image/new/icon_safe.svg

@@ -0,0 +1,6 @@
+<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="icon_safe">
+<path id="Vector (Stroke)" d="M2.5 13.3521V6.17049C2.5 5.50391 2.94019 4.9168 3.58008 4.73006L15.5859 1.22713L15.6895 1.20076C15.9329 1.14822 16.1866 1.15697 16.4268 1.22713L28.4209 4.73006C29.0605 4.91697 29.5 5.50411 29.5 6.17049V13.356C29.4999 21.554 24.2531 28.8319 16.4756 31.4234C16.1679 31.5259 15.835 31.5259 15.5273 31.4234C7.74784 28.8319 2.5 21.552 2.5 13.3521ZM5.5 13.3521C5.5 20.0921 9.70934 26.0917 16.001 28.4078C22.2913 26.092 26.4999 20.0945 26.5 13.356V7.29451L16.0049 4.2281L5.5 7.29451V13.3521Z" fill="#37C3A0"/>
+<path id="Vector (Stroke)_2" d="M21.6065 10.9393C22.1923 10.3536 23.1419 10.3535 23.7276 10.9393C24.3132 11.525 24.3132 12.4746 23.7276 13.0604L15.7276 21.0604C15.1419 21.6461 14.1923 21.646 13.6065 21.0604L8.9395 16.3934C8.35388 15.8076 8.35377 14.858 8.9395 14.2723C9.52525 13.6867 10.4749 13.6867 11.0606 14.2723L14.667 17.8787L21.6065 10.9393Z" fill="#37C3A0"/>
+</g>
+</svg>

+ 5 - 0
static/image/new/icon_selected.svg

@@ -0,0 +1,5 @@
+<svg width="44" height="44" viewBox="0 0 44 44" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="icon_selected">
+<path id="Vector" d="M43.98 9.68562C43.98 9.68562 36.9432 12.0312 28.7336 21.4136C21.1104 29.9164 19.3512 33.4348 16.4192 38.126C16.126 37.8328 11.728 29.33 0 23.1728L6.15719 17.3088C6.15719 17.3088 11.728 21.1204 15.5396 28.1572C15.5396 28.1572 25.2152 13.204 43.98 5.87402V9.68562Z" fill="#37C3A0"/>
+</g>
+</svg>

BIN
static/image/new/icon_success.png


+ 11 - 0
static/image/new/icon_taiji.svg

@@ -0,0 +1,11 @@
+<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="icon_taiji" clip-path="url(#clip0_362_2567)">
+<path id="Vector" d="M16.4263 8.89772C16.0697 7.56656 14.6956 6.77327 13.3645 7.12996C12.0333 7.48664 11.24 8.86065 11.5967 10.1918C11.9534 11.523 13.3274 12.3163 14.6586 11.9596C15.9897 11.6029 16.783 10.2289 16.4263 8.89772Z" fill="#37C3A0"/>
+<path id="Vector_2" d="M19.6234 29.5229C27.0791 27.5251 31.5206 19.8322 29.5229 12.3765C27.5251 4.92074 19.8322 0.479223 12.3765 2.47698C12.3221 2.49154 12.2716 2.50831 12.2173 2.52287C12.1901 2.53015 12.1621 2.53441 12.135 2.54169L12.1366 2.54772C4.82731 4.64535 0.501036 12.2492 2.47696 19.6234C4.38737 26.7532 11.5007 31.1203 18.6379 29.7449C18.6628 29.7415 18.687 29.735 18.7089 29.7323C18.851 29.7072 18.9937 29.6722 19.1342 29.641C19.2165 29.6222 19.2974 29.6103 19.3789 29.5884L19.3773 29.5824C19.4618 29.5597 19.5419 29.5447 19.6234 29.5229ZM18.1525 24.9995C16.8213 25.3561 15.4473 24.5629 15.0907 23.2317C14.734 21.9005 15.5273 20.5265 16.8584 20.1698C18.1896 19.8131 19.5636 20.6064 19.9203 21.9376C20.277 23.2688 19.4837 24.6428 18.1525 24.9995ZM3.44288 19.3646C1.60203 12.4944 5.64752 5.41233 12.4761 3.48879C15.7784 2.65247 19.1636 4.62477 20.0484 7.92703C20.9406 11.2565 18.9585 14.6896 15.629 15.5817C11.7683 16.6162 9.46804 20.6004 10.5025 24.4611C11.0112 26.3597 12.2329 27.8765 13.8026 28.8082C8.96133 27.9702 4.79602 24.4146 3.44288 19.3646Z" fill="#37C3A0"/>
+</g>
+<defs>
+<clipPath id="clip0_362_2567">
+<rect width="32" height="32" fill="white"/>
+</clipPath>
+</defs>
+</svg>

Diff do ficheiro suprimidas por serem muito extensas
+ 5 - 0
static/image/new/icon_tone.svg


+ 6 - 0
static/image/new/icon_warning.svg

@@ -0,0 +1,6 @@
+<svg width="56" height="56" viewBox="0 0 56 56" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="icon_warning">
+<circle id="Ellipse 387" cx="28" cy="28" r="26" stroke="white" stroke-width="4"/>
+<path id="Shape" fill-rule="evenodd" clip-rule="evenodd" d="M26.2719 15.7917C26.2648 15.4703 26.4942 15.2099 26.8309 15.2099H30.0623C30.3783 15.2099 30.6289 15.4541 30.6214 15.7917L30.1612 36.3793C30.154 36.7007 29.8812 36.9611 29.5862 36.9611H27.307C26.9967 36.9611 26.7396 36.7169 26.7321 36.3793L26.2719 15.7917ZM28.4467 43.4863C27.2454 43.4863 26.2716 42.5125 26.2716 41.3112C26.2716 40.1099 27.2454 39.1361 28.4467 39.1361C29.648 39.1361 30.6219 40.1099 30.6219 41.3112C30.6219 42.5125 29.648 43.4863 28.4467 43.4863Z" fill="white"/>
+</g>
+</svg>

Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 0
static/image/new/img_advice.svg


+ 6 - 0
static/image/new/img_cloud.svg

@@ -0,0 +1,6 @@
+<svg width="469" height="58" viewBox="0 0 469 58" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="img_cloud">
+<path id="Union" opacity="0.78" d="M418.423 0C416.3 5.38367e-08 414.33 0.652773 412.7 1.7666H447.571C452.204 1.76663 455.961 5.52212 455.961 10.1553C455.961 14.7886 452.205 18.5449 447.571 18.5449H399.46C399.555 18.6098 399.651 18.6736 399.748 18.7354H369.475C363.866 18.7356 359.319 23.2829 359.319 28.8916C359.319 34.5001 363.866 39.0466 369.475 39.0469H416.279C420.913 39.0469 424.669 42.8032 424.669 47.4365C424.669 52.0698 420.913 55.8262 416.279 55.8262H309C310.63 56.9399 312.6 57.5917 314.723 57.5918H428.643C434.251 57.5918 438.799 53.0453 438.799 47.4365C438.799 41.8277 434.251 37.2803 428.643 37.2803H380.036C375.419 37.2608 371.683 33.5128 371.683 28.8916C371.683 24.2582 375.439 20.502 380.072 20.502H441.087C440.992 20.4368 440.894 20.3735 440.797 20.3115H458.168C463.777 20.3115 468.324 15.7641 468.324 10.1553C468.324 4.54666 463.777 6.82716e-07 458.168 0H418.423Z" fill="#CCF5EB"/>
+<path id="Union_2" d="M60.6846 12.496C65.4375 12.496 69.2909 16.3495 69.291 21.1024C69.291 25.8555 65.4376 29.7089 60.6846 29.7089H21.0215C17.0952 29.709 13.9121 32.8919 13.9121 36.8183C13.9123 40.7444 17.0953 43.9275 21.0215 43.9276H111.933C110.552 44.8715 108.882 45.4237 107.083 45.4237H10.5449C5.792 45.4237 1.93865 41.5711 1.93848 36.8183C1.93848 32.0652 5.79189 28.2118 10.5449 28.2118H51.7051C55.6313 28.2116 58.8145 25.0287 58.8145 21.1024C58.8144 17.1763 55.6312 13.9933 51.7051 13.9931H0C1.38102 13.0492 3.05061 12.496 4.84961 12.496H60.6846Z" fill="#CCF5EB"/>
+</g>
+</svg>

+ 3 - 0
static/image/new/img_cloud1.svg

@@ -0,0 +1,3 @@
+<svg width="139" height="50" viewBox="0 0 139 50" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path id="img_cloud1" opacity="0.16" d="M43.3232 0C45.1663 3.76792e-05 46.8772 0.566202 48.292 1.5332H18.0166C13.9942 1.53336 10.7335 4.79397 10.7334 8.81641C10.7334 12.8389 13.9941 16.1004 18.0166 16.1006H59.7861C59.7033 16.1572 59.619 16.2118 59.5342 16.2656H85.8184C90.6877 16.2658 94.6348 20.2136 94.6348 25.083C94.6346 29.9522 90.6876 33.8992 85.8184 33.8994H45.1836C41.1611 33.8995 37.9004 37.1611 37.9004 41.1836C37.9006 45.206 41.1612 48.4667 45.1836 48.4668H138.321C136.907 49.4337 135.196 49.9999 133.354 50H34.4502C29.5808 50 25.633 46.0529 25.6328 41.1836C25.6328 36.3141 29.5807 32.3662 34.4502 32.3662H76.6182C80.6405 32.366 83.9012 29.1053 83.9014 25.083C83.9014 21.0605 80.6406 17.799 76.6182 17.7988H23.6465C23.7291 17.7424 23.8129 17.6875 23.8975 17.6338H8.81641C3.94704 17.6337 0 13.6858 0 8.81641C7.24081e-05 3.94707 3.94708 0.00011089 8.81641 0H43.3232Z" fill="#37C3A0"/>
+</svg>

+ 3 - 0
static/image/new/img_cloud2.svg

@@ -0,0 +1,3 @@
+<svg width="119" height="35" viewBox="0 0 119 35" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path id="img_cloud2" opacity="0.16" d="M54.2969 0C49.2611 6.12983e-07 45.1787 4.08236 45.1787 9.11816C45.1787 14.1539 49.2611 18.2363 54.2969 18.2363H96.3193C100.479 18.2364 103.852 21.6086 103.852 25.7686C103.852 29.9285 100.479 33.3008 96.3193 33.3008H0C1.46311 34.3007 3.23177 34.8867 5.1377 34.8867H107.42C112.456 34.8865 116.538 30.8042 116.538 25.7686C116.538 20.7329 112.456 16.6506 107.42 16.6504H63.8115C59.6515 16.6504 56.2783 13.2782 56.2783 9.11816C56.2783 4.95815 59.6515 1.58594 63.8115 1.58594H118.592C117.129 0.585948 115.36 8.01452e-05 113.454 0H54.2969Z" fill="#37C3A0"/>
+</svg>

Diff do ficheiro suprimidas por serem muito extensas
+ 6 - 0
static/image/new/img_error.svg


BIN
static/image/new/img_example.png


+ 12 - 0
static/image/new/img_finish.svg

@@ -0,0 +1,12 @@
+<svg width="127" height="127" viewBox="0 0 127 127" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="img_finish">
+<g id="Vector">
+<path d="M63.2188 112.997C50.0167 112.997 37.3554 107.752 28.0202 98.4171C18.6849 89.0818 13.4404 76.4205 13.4404 63.2185C13.4404 50.0164 18.6849 37.3551 28.0202 28.0199C37.3554 18.6846 50.0167 13.4401 63.2188 13.4401C76.4208 13.4401 89.0821 18.6846 98.4173 28.0199C107.753 37.3551 112.997 50.0164 112.997 63.2185C112.997 76.4205 107.753 89.0818 98.4173 98.4171C89.0821 107.752 76.4208 112.997 63.2188 112.997Z" fill="#37C3A0"/>
+<path d="M63.9209 6.72433C78.4177 6.90428 92.292 12.6515 102.67 22.7751L103.169 23.2683L103.662 23.7673C113.949 34.3126 119.717 48.4682 119.717 63.2185C119.717 78.2028 113.764 92.5732 103.169 103.169C92.5734 113.764 78.2031 119.717 63.2188 119.717C48.2344 119.717 33.8641 113.764 23.2686 103.169C12.6731 92.5732 6.7207 78.2028 6.7207 63.2185C6.7207 48.2342 12.6731 33.8638 23.2686 23.2683C33.8641 12.6728 48.2344 6.72042 63.2188 6.72042L63.9209 6.72433Z" stroke="#37C3A0" stroke-opacity="0.17" stroke-width="13.4401"/>
+</g>
+<g id="Vector_2">
+<path d="M53.8005 83.8891C53.1713 83.6285 52.5996 83.2464 52.1181 82.7648L35.6996 66.3462C35.218 65.8647 34.836 65.293 34.5754 64.6638C34.3148 64.0346 34.1807 63.3602 34.1807 62.6792C34.1807 61.3038 34.727 59.9848 35.6996 59.0122C36.6721 58.0397 37.9912 57.4933 39.3666 57.4933C40.742 57.4933 42.061 58.0397 43.0336 59.0122L55.5611 71.5398L83.5531 43.9957C84.5257 43.0232 85.8447 42.4768 87.2201 42.4768C88.5955 42.4768 89.9146 43.0232 90.8871 43.9957C91.8597 44.9683 92.4061 46.2874 92.4061 47.6627C92.4061 49.0381 91.8597 50.3572 90.8871 51.3298L59.4521 82.7648C58.9706 83.2464 58.399 83.6285 57.7698 83.8891C57.1406 84.1498 56.4662 84.284 55.7851 84.284C55.1041 84.284 54.4297 84.1498 53.8005 83.8891Z" fill="white"/>
+<path d="M87.2197 35.7571C90.3774 35.7571 93.4059 37.0116 95.6387 39.2444C97.8713 41.4771 99.1259 44.5049 99.126 47.6624C99.126 50.82 97.8715 53.8485 95.6387 56.0813L64.2041 87.5169L64.2031 87.5159C63.0977 88.6214 61.7861 89.4995 60.3418 90.0979C58.8972 90.6964 57.3488 91.0042 55.7852 91.0042C54.2215 91.0042 52.6731 90.6963 51.2285 90.0979C49.7839 89.4994 48.4708 88.6217 47.3652 87.5159V87.5149L30.9482 71.0979C29.8427 69.9924 28.9655 68.68 28.3672 67.2356C27.7689 65.7911 27.4609 64.2425 27.4609 62.679C27.461 59.5214 28.7155 56.4928 30.9482 54.26C33.1809 52.0276 36.2089 50.7738 39.3662 50.7737L39.957 50.7874C42.8996 50.9334 45.6919 52.167 47.7852 54.26L55.5986 62.0735L78.8398 39.2053L78.8408 39.2073C81.0698 36.9983 84.0802 35.7572 87.2197 35.7571Z" stroke="#37C3A0" stroke-opacity="0.17" stroke-width="13.4401"/>
+</g>
+</g>
+</svg>

BIN
static/image/new/img_scan.png


BIN
static/image/new/img_title1.png


+ 12 - 0
static/image/new/img_title1.svg

@@ -0,0 +1,12 @@
+<svg width="154" height="26" viewBox="0 0 154 26" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="img_title1">
+<rect id="Rectangle 768" x="140.728" y="2.82843" width="14" height="14" rx="2" transform="rotate(45 140.728 2.82843)" stroke="#37C3A0" stroke-width="4"/>
+<rect id="Rectangle 765" width="120" height="4" rx="2" transform="matrix(-1 0 0 1 120 10.5695)" fill="url(#paint0_linear_506_614)"/>
+</g>
+<defs>
+<linearGradient id="paint0_linear_506_614" x1="0" y1="2" x2="120" y2="2" gradientUnits="userSpaceOnUse">
+<stop stop-color="#37C3A0"/>
+<stop offset="1" stop-color="#37C3A0" stop-opacity="0"/>
+</linearGradient>
+</defs>
+</svg>

BIN
static/image/new/img_title2.png


+ 12 - 0
static/image/new/img_title2.svg

@@ -0,0 +1,12 @@
+<svg width="154" height="26" viewBox="0 0 154 26" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="img_title2">
+<rect id="Rectangle 768" y="2.82843" width="14" height="14" rx="2" transform="matrix(-0.707107 0.707107 0.707107 0.707107 10.7278 0.828427)" stroke="#37C3A0" stroke-width="4"/>
+<rect id="Rectangle 765" x="33.4558" y="10.5695" width="120" height="4" rx="2" fill="url(#paint0_linear_506_617)"/>
+</g>
+<defs>
+<linearGradient id="paint0_linear_506_617" x1="33.4558" y1="12.5695" x2="153.456" y2="12.5695" gradientUnits="userSpaceOnUse">
+<stop stop-color="#37C3A0"/>
+<stop offset="1" stop-color="#37C3A0" stop-opacity="0"/>
+</linearGradient>
+</defs>
+</svg>

BIN
static/image/new/img_tongue.png


Diff do ficheiro suprimidas por serem muito extensas
+ 2 - 0
static/image/new/img_welcom.svg


Diff do ficheiro suprimidas por serem muito extensas
+ 20 - 0
static/image/new/logo.svg


Diff do ficheiro suprimidas por serem muito extensas
+ 19 - 0
static/image/new/logo2.svg


BIN
static/image/new/mask_face.png


BIN
static/image/new/mask_tongue.png


BIN
static/logo2.png


+ 54 - 39
uni_modules/gb-progress/package.json

@@ -9,10 +9,12 @@
     "vue",
     "环形进度条",
     "组件"
-],
+  ],
   "repository": "",
   "engines": {
-    "HBuilderX": "^3.3.13"
+    "HBuilderX": "^3.3.13",
+    "uni-app": "^3.1.0",
+    "uni-app-x": "^3.1.0"
   },
   "dcloudext": {
     "type": "component-vue",
@@ -32,52 +34,65 @@
       "data": "无",
       "permissions": "无"
     },
-    "npmurl": ""
+    "npmurl": "",
+    "darkmode": "-",
+    "i18n": "-",
+    "widescreen": "-"
   },
   "uni_modules": {
     "dependencies": [],
     "encrypt": [],
     "platforms": {
       "cloud": {
-        "tcb": "y",
-        "aliyun": "y"
+        "tcb": "",
+        "aliyun": ""
       },
       "client": {
-        "Vue": {
-          "vue2": "y",
-          "vue3": "y"
+        "uni-app": {
+          "vue": {
+            "vue2": "-",
+            "vue3": "-"
+          },
+          "web": {
+            "safari": "-",
+            "chrome": "-"
+          },
+          "app": {
+            "vue": "-",
+            "nvue": "-",
+            "android": "-",
+            "ios": "-",
+            "harmony": "-"
+          },
+          "mp": {
+            "weixin": "-",
+            "alipay": "-",
+            "toutiao": "-",
+            "baidu": "-",
+            "kuaishou": "-",
+            "jd": "-",
+            "harmony": "-",
+            "qq": "-",
+            "lark": "-"
+          },
+          "quickapp": {
+            "huawei": "-",
+            "union": "-"
+          }
         },
-        "App": {
-          "app-vue": "y",
-          "app-nvue": "y"
-        },
-        "H5-mobile": {
-          "Safari": "y",
-          "Android Browser": "y",
-          "微信浏览器(Android)": "y",
-          "QQ浏览器(Android)": "y"
-        },
-        "H5-pc": {
-          "Chrome": "y",
-          "IE": "y",
-          "Edge": "y",
-          "Firefox": "y",
-          "Safari": "y"
-        },
-        "小程序": {
-          "微信": "y",
-          "阿里": "y",
-          "百度": "y",
-          "字节跳动": "y",
-          "QQ": "y",
-          "钉钉": "y",
-          "快手": "y",
-          "飞书": "y",
-          "京东": "y"
-        },
-        "快应用": {
-          "华为": "y",
-          "联盟": "y"
+        "uni-app-x": {
+          "web": {
+            "safari": "-",
+            "chrome": "-"
+          },
+          "app": {
+            "android": "-",
+            "ios": "-",
+            "harmony": "-"
+          },
+          "mp": {
+            "weixin": "-"
+          }
         }
       }
     }

+ 5 - 5
utils/config.js

@@ -1,19 +1,19 @@
 
 export const qconfig={
-	mainThemeHColor:'#8F6726',
+	mainThemeHColor:'#37C3A0',
 	pageColor:"#FBF4EE",
-	lineColor:"#8F6726",
-	qbadgeColor:"#8F6726",
+	lineColor:"#37C3A0",
+	qbadgeColor:"#37C3A0",
 	qTitleColor:"#333333",
 	qContentColor:"#666666",
 	qDescribeColor:"#999999",
 	// qDescribeColor:"#b2b2b2",
 	sepLineColor:"#d2d2d2",
-	appName:"医疗设备",
+	appName:"AI四诊仪",
 	applyLogin:false,
 	isAppStore:true
 };
  
-const mainThemeHColor='#FF5C03';
+const mainThemeHColor='#37C3A0';
 
 

Alguns ficheiros não foram mostrados porque muitos ficheiros mudaram neste diff