Merge remote-tracking branch 'origin/dev' into dev

# Conflicts:
#	pages.json
This commit is contained in:
shidongli 2023-10-20 15:49:49 +08:00
commit 8a4509c6a5
16 changed files with 2820 additions and 66 deletions

View File

@ -24,6 +24,17 @@ export function savebp(data) {
})
}
//上传血脂
export function savebf(data) {
return request({
url: `/fd/ps/bf/save`,
method: 'post',
data,
header: {
Authorization: 'Bearer' + ' ' + uni.getStorageSync('token')
}
})
}
//上传体温
export function savetemp(data) {
return request({
@ -34,4 +45,40 @@ export function savetemp(data) {
Authorization: 'Bearer' + ' ' + uni.getStorageSync('token')
}
})
}
}
//上传BMI
export function savebmi(data) {
return request({
url: `/fd/ps/bmi/save`,
method: 'post',
data,
header: {
Authorization: 'Bearer' + ' ' + uni.getStorageSync('token')
}
})
}
//上传血氧
export function savebo(data) {
return request({
url: `/fd/ps/bo/save`,
method: 'post',
data,
header: {
Authorization: 'Bearer' + ' ' + uni.getStorageSync('token')
}
})
}
//上传心率
export function savehr(data) {
return request({
url: `/fd/ps/hr/save`,
method: 'post',
data,
header: {
Authorization: 'Bearer' + ' ' + uni.getStorageSync('token')
}
})
}

448
components/BMI/BMI.vue Normal file
View File

@ -0,0 +1,448 @@
<template>
<view class="app" v-if="current == 3">
<view class="titletexts">
<view class="title">
正常范围
</view>
<view class="add" @click="addBMI">
添加数据
</view>
<view class="texts">
<view class="text">
<view class="p">
过轻
</view>
<view class="ptwo" style="color:#FFA115">
18.5
</view>
</view>
<view class="text">
<view class="p">
正常
</view>
<view class="ptwo">
18.5~23.9
</view>
</view>
<view class="text">
<view class="p">
肥胖
</view>
<view class="ptwo">
28
</view>
</view>
</view>
</view>
<view class="bottomlist">
<view class="timelist">
<view class="item" v-for="(item,index) in timelist" :class="timeindex == index?'timeitem':''"
@tap='taptimeindex(index)'>
{{item.name}}
</view>
</view>
<view class="text">
:全部视图主要展示全部BMI数值的趋势曲线 单位:kg/m^2
</view>
<qiun-data-charts type="line" loadingType="0" :opts="line_opts" :ontouch="true" :chartData="datalist" />
</view>
<view class="bottomtexts">
<view class="lefttext">
<view class="pone">
平均
</view>
<view class="ptwo">
{{echartData.calc.avgVal?echartData.calc.avgVal:'暂无'}}
</view>
</view>
<view class="lefttext">
<view class="pone">
最大
</view>
<view class="ptwo">
{{echartData.calc.maxVal?echartData.calc.maxVal:'暂无'}}
</view>
</view>
<view class="righttext">
<view class="pone">
最小
</view>
<view class="ptwo">
{{echartData.calc.minVal?echartData.calc.minVal:'暂无'}}
</view>
</view>
</view>
<view class="charts-box">
<qiun-data-charts type="pie" :opts="pie_opts" :chartData="datalisttwo" />
</view>
</view>
</template>
<script>
export default {
props: {
current: {
type: Number,
require: true
},
echartData: {
type: Object,
require: true
}
},
computed: {},
data() {
return {
timelist: [{
name: '全部',
id: 0
},
{
name: '周',
id: 1
}, {
name: '月',
id: 2
}, {
name: '年',
id: 3
},
],
timeindex: 0,
socketOpen: false,
timer: null,
datalist: null,
datalisttwo: null,
pie_opts: {
color: ["#1890FF", "#91CB74", "#FAC858", "#EE6666", "#73C0DE", "#3CA272", "#FC8452", "#9A60B4",
"#ea7ccc"
],
padding: [5, 5, 5, 5],
enableScroll: false,
extra: {
pie: {
activeOpacity: 0.5,
activeRadius: 10,
offsetAngle: 0,
labelWidth: 15,
border: false,
borderWidth: 3,
borderColor: "#FFFFFF"
},
},
},
line_opts: {
color: ["#1890FF", "#91CB74", "#FAC858", "#EE6666", "#73C0DE", "#3CA272", "#FC8452", "#9A60B4",
"#ea7ccc"
],
dataLabel: true,
enableScroll: true,
touchMoveLimit: 24,
padding: [15, 10, 0, 15],
xAxis: {
lineHeight: 40,
disableGrid: true,
boundaryGap: "center",
fontSize: 10,
type: 'grid',
gridType: 'dash',
itemCount: 4, //x5
scrollShow: true, //false
scrollAlign: 'left', //
},
yAxis: {
gridType: "dash",
dashLength: 2
},
legend: {
show: true,
position: "top",
lineHeight: 25
},
extra: {
line: {
type: "straight",
width: 2,
activeType: "hollow"
}
}
},
}
},
created() {},
mounted() {
// if (this.current ==3) {
// this.scoket()
// }
this.getServerData()
},
destroyed() {
clearInterval(this.timer);
if (this.socketOpen == true) {
uni.closeSocket();
}
},
watch: {
echartData: {
handler() {
this.getServerData()
},
deep: true
},
current(newValue, oldValue) {
if (newValue != 3) {
clearInterval(this.timer);
if (this.socketOpen == true) {
uni.closeSocket();
}
} else {
setTimeout(() => {
this.scoket()
}, 800)
}
}
},
methods: {
taptimeindex(index) {
this.timeindex = index
this.$emit('taptimeindex', index);
},
addBMI() {
uni.navigateTo({
url: "/pagesC/addBMI/addBMI"
})
},
getServerData() {
if (this.echartData) {
setTimeout(() => {
let res = {
categories: [],
series: [{
name: "BMI",
data: []
}, ]
};
res.series[0].data = this.echartData.list.map(e => e.bmi)
res.categories = this.echartData.list.map(e => e.measureTime)
this.datalist = res
let restwo = {
series: [{
data: [{
"name": "正常" + this.echartData.calc.normalNum + "次",
"value": this.echartData.calc.normalNum
}, {
"name": "超标" + this.echartData.calc.overNum + "次",
"value": this.echartData.calc.overNum
}]
}]
};
this.datalisttwo = restwo
}, 500)
}
},
scoket() {
var SOCKETURL = 'ws://112.7.50.34:9002/webSocket/' + uni.getStorageSync('userInfo').cardNo
const that = this
uni.closeSocket()
this.socketOpen = false
try {
uni.connectSocket({
url: SOCKETURL
})
uni.onSocketOpen(res => {
console.log('webScoket连接已打开', res);
that.socketOpen = true
that.reset()
})
uni.onSocketError(err => {
console.log('webScoket连接打开失败', err);
if (err && err.code != 1000) {
setTimeout(() => {
that.socketOpen = true
uni.connectSocket({
url: SOCKETURL
})
}, 3 * 1000)
}
})
uni.onSocketClose(err => {
console.log('webScoket连接关闭', err);
if (err && err.code !== 1000) {
setTimeout(() => {
that.socketOpen = true
uni.connectSocket({
url: SOCKETURL
})
}, 3 * 1000)
}
})
uni.onSocketMessage(res => {
console.log("webScoket监听收到的信息", res);
// that.newsList.push({
// senderName: that.currentItem.senderName,
// content: JSON.parse(res.data).message
// })
this.$emit('websocket-message');
this.$forceUpdate()
})
} catch (e) {
console.log(e);
}
},
//
reset() {
let that = this
var SOCKETURL = 'ws://112.7.50.34:9002/webSocket/' + uni.getStorageSync('userInfo').cardNo
clearInterval(that.timer);
that.timer = setInterval(() => {
uni.sendSocketMessage({
data: 'ping',
success(res) {
console.log('正在发送心跳');
},
fail(err) {
console.log('心跳发送失败,重新连接...');
_socketOpen = true
uni.connectSocket({
url: SOCKETURL
})
}
})
}, 60000)
},
}
}
</script>
<style lang="scss">
page {
background-color: #F7F5F5;
}
.app {
width: 96%;
margin: 0 auto;
padding-bottom: 60rpx;
/* 请根据实际需求修改父元素尺寸,组件自动识别宽高 */
.charts-box {
width: 100%;
background-color: #fff;
}
.bottomtexts {
width: 100%;
display: flex;
background-color: #fff;
padding: 20rpx 0 40rpx;
.lefttext,
.righttext {
width: 50%;
text-align: center;
}
}
.bottomlist {
width: 100%;
background-color: #fff;
margin-top: 17rpx;
padding-bottom: 100rpx;
.text {
width: 90%;
margin: 20rpx auto 30rpx;
font-size: 18rpx;
font-weight: 400;
color: #595959;
}
.timelist {
width: 90%;
margin: 0 auto;
display: flex;
padding-top: 25rpx;
.item {
width: 25%;
height: 56rpx;
border-radius: 5rpx 0rpx 0rpx 5rpx;
text-align: center;
line-height: 56rpx;
background: #FFFFFF;
border: 2rpx solid #26A888;
border-radius: 0rpx 5rpx 5rpx 0rpx;
color: #26A888;
}
.timeitem {
background: #26A888;
color: #fff;
}
}
}
.titletexts {
width: 100%;
height: 300rpx;
background: #FFFFFF;
box-shadow: 0rpx 9rpx 31rpx 9rpx rgba(0, 0, 0, 0.03);
border-radius: 5rpx;
position: relative;
.texts {
width: 100%;
display: flex;
position: absolute;
top: 130rpx;
flex-wrap: wrap;
.text {
width: 33%;
margin-bottom: 40rpx;
.p {
text-align: center;
font-size: 24rpx;
font-weight: 500;
color: #000000;
}
.ptwo {
font-size: 30rpx;
font-weight: 500;
color: #26A888;
text-align: center;
margin-top: 20rpx;
}
}
}
.add {
width: 205rpx;
height: 64rpx;
background: #26A888;
border-radius: 32rpx 0rpx 0rpx 32rpx;
line-height: 64rpx;
text-align: center;
position: absolute;
right: 0%;
color: #fff;
top: 25rpx;
}
.title {
text-align: center;
font-size: 24rpx;
font-weight: 400;
color: #26A888;
width: 100%;
position: absolute;
top: 46rpx;
}
}
}
</style>

View File

@ -0,0 +1,408 @@
<template>
<view class="app" v-if="current == 2">
<view class="titletexts">
<view class="title">
正常范围
</view>
<view class="add" @click="addBloodFat">
添加数据
</view>
<view class="texts">
<view class="text">
<view class="p">
血清总胆固醇
</view>
<view class="ptwo">
3.0-5.7mmol/L
</view>
</view>
<view class="text">
<view class="p">
甘油三酯
</view>
<view class="ptwo">
0.5-1.7mmol/L
</view>
</view>
<view class="text">
<view class="p">
高密度脂蛋白胆固醇
</view>
<view class="ptwo">
0.9-1.8mmol/L
</view>
</view>
<view class="text">
<view class="p">
低密度脂蛋白胆固醇
</view>
<view class="ptwo">
2.1-3.1mmol/L
</view>
</view>
</view>
</view>
<view class="bottomlist">
<view class="timelist">
<view class="item" v-for="(item,index) in timelist" :class="timeindex == index?'timeitem':''"
@tap='taptimeindex(index)'>
{{item.name}}
</view>
</view>
<view class="text">
:全部视图主要展示全部血脂数值的趋势曲线 单位:mmol/L
</view>
<qiun-data-charts type="line" loadingType="0" :opts="line_opts" :ontouch="true" :chartData="datalist" />
</view>
</view>
</template>
<script>
export default {
props: {
current: {
type: Number,
require: true
},
echartData: {
type: Object,
require: true
}
},
computed: {},
data() {
return {
timelist: [{
name: '全部',
id: 0
},
{
name: '周',
id: 1
}, {
name: '月',
id: 2
}, {
name: '年',
id: 3
},
],
timeindex: 0,
socketOpen: false,
timer: null,
datalist: null,
pie_opts: {
color: ["#1890FF", "#91CB74", "#FAC858", "#EE6666", "#73C0DE", "#3CA272", "#FC8452", "#9A60B4",
"#ea7ccc"
],
padding: [5, 5, 5, 5],
enableScroll: false,
extra: {
pie: {
activeOpacity: 0.5,
activeRadius: 10,
offsetAngle: 0,
labelWidth: 15,
border: false,
borderWidth: 3,
borderColor: "#FFFFFF"
},
},
},
line_opts: {
color: ["#1890FF", "#91CB74", "#FAC858", "#EE6666", "#73C0DE", "#3CA272", "#FC8452", "#9A60B4",
"#ea7ccc"
],
dataLabel: true,
enableScroll: true,
touchMoveLimit: 24,
padding: [15, 10, 0, 15],
xAxis: {
lineHeight: 40,
disableGrid: true,
boundaryGap: "center",
fontSize: 10,
type: 'grid',
gridType: 'dash',
itemCount: 4, //x5
scrollShow: true, //false
scrollAlign: 'left', //
},
yAxis: {
gridType: "dash",
dashLength: 2
},
legend: {
show: true,
position: "top",
lineHeight: 25
},
extra: {
line: {
type: "straight",
width: 2,
activeType: "hollow"
}
}
},
}
},
created() {},
mounted() {
// if (this.current ==2) {
// this.scoket()
// }
this.getServerData()
},
destroyed() {
clearInterval(this.timer);
if (this.socketOpen == true) {
uni.closeSocket();
}
},
watch: {
echartData: {
handler() {
this.getServerData()
},
deep: true
},
current(newValue, oldValue) {
if (newValue != 2) {
clearInterval(this.timer);
if (this.socketOpen == true) {
uni.closeSocket();
}
} else {
setTimeout(() => {
this.scoket()
}, 800)
}
}
},
methods: {
taptimeindex(index) {
this.timeindex = index
this.$emit('taptimeindex', index);
},
addBloodFat() {
uni.navigateTo({
url: "/pagesC/addBloodFat/addBloodFat"
})
},
getServerData() {
if (this.echartData) {
setTimeout(() => {
let res = {
categories: [],
series: [{
name: "血清总胆固醇",
data: []
},
{
name: "甘油三酯",
data: []
}, {
name: "高密度脂蛋白胆固醇",
data: []
}, {
name: "低密度脂蛋白胆固醇",
data: []
}
]
};
res.series[0].data = this.echartData.list.map(e => e.tc)
res.series[1].data = this.echartData.list.map(e => e.tg)
res.series[2].data = this.echartData.list.map(e => e.hdl)
res.series[3].data = this.echartData.list.map(e => e.ldl)
res.categories = this.echartData.list.map(e => e.measureTime)
this.datalist = res
}, 500)
}
},
scoket() {
var SOCKETURL = 'ws://112.7.50.34:9002/webSocket/' + uni.getStorageSync('userInfo').cardNo
const that = this
uni.closeSocket()
this.socketOpen = false
try {
uni.connectSocket({
url: SOCKETURL
})
uni.onSocketOpen(res => {
console.log('webScoket连接已打开', res);
that.socketOpen = true
that.reset()
})
uni.onSocketError(err => {
console.log('webScoket连接打开失败', err);
if (err && err.code != 1000) {
setTimeout(() => {
that.socketOpen = true
uni.connectSocket({
url: SOCKETURL
})
}, 3 * 1000)
}
})
uni.onSocketClose(err => {
console.log('webScoket连接关闭', err);
if (err && err.code !== 1000) {
setTimeout(() => {
that.socketOpen = true
uni.connectSocket({
url: SOCKETURL
})
}, 3 * 1000)
}
})
uni.onSocketMessage(res => {
console.log("webScoket监听收到的信息", res);
// that.newsList.push({
// senderName: that.currentItem.senderName,
// content: JSON.parse(res.data).message
// })
this.$emit('websocket-message');
this.$forceUpdate()
})
} catch (e) {
console.log(e);
}
},
//
reset() {
let that = this
var SOCKETURL = 'ws://112.7.50.34:9002/webSocket/' + uni.getStorageSync('userInfo').cardNo
clearInterval(that.timer);
that.timer = setInterval(() => {
uni.sendSocketMessage({
data: 'ping',
success(res) {
console.log('正在发送心跳');
},
fail(err) {
console.log('心跳发送失败,重新连接...');
_socketOpen = true
uni.connectSocket({
url: SOCKETURL
})
}
})
}, 60000)
},
}
}
</script>
<style lang="scss">
page {
background-color: #F7F5F5;
}
.app {
width: 96%;
margin: 0 auto;
padding-bottom: 60rpx;
.bottomlist {
width: 100%;
background-color: #fff;
margin-top: 17rpx;
padding-bottom: 100rpx;
.text {
width: 90%;
margin: 20rpx auto 30rpx;
font-size: 18rpx;
font-weight: 400;
color: #595959;
}
.timelist {
width: 90%;
margin: 0 auto;
display: flex;
padding-top: 25rpx;
.item {
width: 25%;
height: 56rpx;
border-radius: 5rpx 0rpx 0rpx 5rpx;
text-align: center;
line-height: 56rpx;
background: #FFFFFF;
border: 2rpx solid #26A888;
border-radius: 0rpx 5rpx 5rpx 0rpx;
color: #26A888;
}
.timeitem {
background: #26A888;
color: #fff;
}
}
}
.titletexts {
width: 100%;
height: 400rpx;
background: #FFFFFF;
box-shadow: 0rpx 9rpx 31rpx 9rpx rgba(0, 0, 0, 0.03);
border-radius: 5rpx;
position: relative;
.texts {
width: 100%;
display: flex;
position: absolute;
top: 130rpx;
flex-wrap: wrap;
.text {
width: 50%;
margin-bottom: 40rpx;
.p {
text-align: center;
font-size: 24rpx;
font-weight: 500;
color: #000000;
}
.ptwo {
font-size: 30rpx;
font-weight: 500;
color: #26A888;
text-align: center;
margin-top: 20rpx;
}
}
}
.add {
width: 205rpx;
height: 64rpx;
background: #26A888;
border-radius: 32rpx 0rpx 0rpx 32rpx;
line-height: 64rpx;
text-align: center;
position: absolute;
right: 0%;
color: #fff;
top: 25rpx;
}
.title {
text-align: center;
font-size: 24rpx;
font-weight: 400;
color: #26A888;
width: 100%;
position: absolute;
top: 46rpx;
}
}
}
</style>

View File

@ -0,0 +1,425 @@
<template>
<view class="app" v-if="current == 4">
<view class="titletexts">
<view class="title">
正常范围
</view>
<view class="add" @click="addBloodOxygen">
添加数据
</view>
<view class="texts">
<view class="text">
<view class="p">
血氧饱和度SaO2
</view>
<view class="ptwo">
95
</view>
</view>
</view>
</view>
<view class="bottomlist">
<view class="timelist">
<view class="item" v-for="(item,index) in timelist" :class="timeindex == index?'timeitem':''"
@tap='taptimeindex(index)'>
{{item.name}}
</view>
</view>
<view class="text">
全部视图主要展示全部体温数值的趋势曲线
</view>
<qiun-data-charts type="line" loadingType="0" :opts="line_opts" :ontouch="true" :chartData="datalist" />
</view>
<view class="bottomtexts">
<view class="lefttext">
<view class="pone">
平均
</view>
<view class="ptwo">
{{echartData.calc.avgVal?echartData.calc.avgVal:'暂无'}}
</view>
</view>
<view class="lefttext">
<view class="pone">
最大
</view>
<view class="ptwo">
{{echartData.calc.maxVal?echartData.calc.maxVal:'暂无'}}
</view>
</view>
<view class="righttext">
<view class="pone">
最小
</view>
<view class="ptwo">
{{echartData.calc.minVal?echartData.calc.minVal:'暂无'}}
</view>
</view>
</view>
<view class="charts-box">
<qiun-data-charts type="pie" :opts="pie_opts" :chartData="datalisttwo" />
</view>
<!-- <qiun-data-charts type="pie" :opts="opts" :chartData="chartData" /> -->
</view>
</template>
<script>
export default {
props: {
current: {
type: Number,
require: true
},
echartData: {
type: Object,
require: true
}
},
computed: {},
data() {
return {
timelist: [{
name: '全部',
id: 0
},
{
name: '周',
id: 1
}, {
name: '月',
id: 2
}, {
name: '年',
id: 3
},
],
timeindex: 0,
socketOpen: false,
timer: null,
datalist: null,
datalisttwo: null,
pie_opts: {
color: ["#1890FF", "#91CB74", "#FAC858", "#EE6666", "#73C0DE", "#3CA272", "#FC8452", "#9A60B4",
"#ea7ccc"
],
padding: [5, 5, 5, 5],
enableScroll: false,
extra: {
pie: {
activeOpacity: 0.5,
activeRadius: 10,
offsetAngle: 0,
labelWidth: 15,
border: false,
borderWidth: 3,
borderColor: "#FFFFFF"
},
},
},
line_opts: {
color: ["#1890FF", "#91CB74", "#FAC858", "#EE6666", "#73C0DE", "#3CA272", "#FC8452", "#9A60B4",
"#ea7ccc"
],
dataLabel: true,
enableScroll: true,
touchMoveLimit: 24,
padding: [15, 10, 0, 15],
xAxis: {
lineHeight: 40,
disableGrid: true,
boundaryGap: "center",
fontSize: 10,
type: 'grid',
gridType: 'dash',
itemCount: 4, //x5
scrollShow: true, //false
scrollAlign: 'left', //
},
yAxis: {
gridType: "dash",
dashLength: 2
},
extra: {
line: {
type: "straight",
width: 2,
activeType: "hollow"
}
}
},
}
},
created() {},
mounted() {
// if (this.current == 4) {
// this.scoket()
// }
this.getServerData()
},
destroyed() {
clearInterval(this.timer);
if (this.socketOpen == true) {
uni.closeSocket();
}
},
watch: {
echartData: {
handler() {
this.getServerData()
},
deep: true
},
current(newValue, oldValue) {
if (newValue != 4) {
clearInterval(this.timer);
if (this.socketOpen == true) {
uni.closeSocket();
}
} else {
setTimeout(() => {
this.scoket()
}, 800)
}
}
},
methods: {
taptimeindex(index) {
this.timeindex = index
this.$emit('taptimeindex', index);
},
addBloodOxygen() {
uni.navigateTo({
url: "/pagesC/addBloodOxygen/addBloodOxygen"
})
},
getServerData() {
if (this.echartData) {
setTimeout(() => {
let res = {
categories: [],
series: [{
name: "血氧",
data: []
}]
};
res.series[0].data = this.echartData.list.map(e => e.spo2)
res.categories = this.echartData.list.map(e => e.measureTime)
this.datalist = res
let restwo = {
series: [{
data: [{
"name": "正常" + this.echartData.calc.normalNum + "次",
"value": this.echartData.calc.normalNum
}, {
"name": "超标" + this.echartData.calc.overNum + "次",
"value": this.echartData.calc.overNum
}]
}]
};
this.datalisttwo = restwo
}, 500)
}
},
scoket() {
var SOCKETURL = 'ws://112.7.50.34:9002/webSocket/' + uni.getStorageSync('userInfo').cardNo
const that = this
uni.closeSocket()
this.socketOpen = false
try {
uni.connectSocket({
url: SOCKETURL
})
uni.onSocketOpen(res => {
console.log('webScoket连接已打开', res);
that.socketOpen = true
that.reset()
})
uni.onSocketError(err => {
console.log('webScoket连接打开失败', err);
if (err && err.code != 1000) {
setTimeout(() => {
that.socketOpen = true
uni.connectSocket({
url: SOCKETURL
})
}, 3 * 1000)
}
})
uni.onSocketClose(err => {
console.log('webScoket连接关闭', err);
if (err && err.code !== 1000) {
setTimeout(() => {
that.socketOpen = true
uni.connectSocket({
url: SOCKETURL
})
}, 3 * 1000)
}
})
uni.onSocketMessage(res => {
console.log("webScoket监听收到的信息", res);
// that.newsList.push({
// senderName: that.currentItem.senderName,
// content: JSON.parse(res.data).message
// })
this.$emit('websocket-message');
this.$forceUpdate()
})
} catch (e) {
console.log(e);
}
},
//
reset() {
let that = this
var SOCKETURL = 'ws://112.7.50.34:9002/webSocket/' + uni.getStorageSync('userInfo').cardNo
clearInterval(that.timer);
that.timer = setInterval(() => {
uni.sendSocketMessage({
data: 'ping',
success(res) {
console.log('正在发送心跳');
},
fail(err) {
console.log('心跳发送失败,重新连接...');
_socketOpen = true
uni.connectSocket({
url: SOCKETURL
})
}
})
}, 60000)
},
}
}
</script>
<style lang="scss">
page {
background-color: #F7F5F5;
}
.app {
width: 96%;
margin: 0 auto;
padding-bottom: 60rpx;
/* 请根据实际需求修改父元素尺寸,组件自动识别宽高 */
.charts-box {
width: 100%;
background-color: #fff;
}
.bottomtexts {
width: 100%;
display: flex;
background-color: #fff;
padding: 20rpx 0 40rpx;
.lefttext,
.righttext {
width: 50%;
text-align: center;
}
}
.bottomlist {
width: 100%;
background-color: #fff;
margin-top: 17rpx;
.text {
width: 90%;
margin: 20rpx auto 30rpx;
font-size: 18rpx;
font-weight: 400;
color: #595959;
}
.timelist {
width: 90%;
margin: 0 auto;
display: flex;
padding-top: 25rpx;
.item {
width: 25%;
height: 56rpx;
border-radius: 5rpx 0rpx 0rpx 5rpx;
text-align: center;
line-height: 56rpx;
background: #FFFFFF;
border: 2rpx solid #26A888;
border-radius: 0rpx 5rpx 5rpx 0rpx;
color: #26A888;
}
.timeitem {
background: #26A888;
color: #fff;
}
}
}
.titletexts {
width: 100%;
height: 250rpx;
background: #FFFFFF;
box-shadow: 0rpx 9rpx 31rpx 9rpx rgba(0, 0, 0, 0.03);
border-radius: 5rpx;
position: relative;
.texts {
width: 100%;
display: flex;
position: absolute;
top: 130rpx;
.text {
width: 100%;
.p {
text-align: center;
font-size: 24rpx;
font-weight: 500;
color: #000000;
}
.ptwo {
font-size: 30rpx;
font-weight: 500;
color: #26A888;
text-align: center;
margin-top: 20rpx;
}
}
}
.add {
width: 205rpx;
height: 64rpx;
background: #26A888;
border-radius: 32rpx 0rpx 0rpx 32rpx;
line-height: 64rpx;
text-align: center;
position: absolute;
right: 0%;
color: #fff;
top: 25rpx;
}
.title {
text-align: center;
font-size: 24rpx;
font-weight: 400;
color: #26A888;
width: 100%;
position: absolute;
top: 46rpx;
}
}
}
</style>

View File

@ -41,7 +41,7 @@
<view class="bottomtexts">
<view class="lefttext">
<view class="pone">
平均
平均
</view>
<view class="ptwo">
{{echartData.calc.avgVal?echartData.calc.avgVal:'暂无'}}
@ -134,7 +134,7 @@
color: ["#1890FF", "#91CB74", "#FAC858", "#EE6666", "#73C0DE", "#3CA272", "#FC8452", "#9A60B4",
"#ea7ccc"
],
dataLabel: false,
dataLabel: true,
enableScroll: true,
touchMoveLimit: 24,
padding: [15, 10, 0, 15],
@ -142,7 +142,7 @@
lineHeight: 40,
disableGrid: true,
boundaryGap: "center",
fontSize: 12,
fontSize: 10,
type: 'grid',
gridType: 'dash',
itemCount: 4, //x5
@ -442,4 +442,4 @@
}
}
}
</style>
</style>

View File

@ -120,7 +120,7 @@
color: ["#1890FF", "#91CB74", "#FAC858", "#EE6666", "#73C0DE", "#3CA272", "#FC8452", "#9A60B4",
"#ea7ccc"
],
dataLabel: false,
dataLabel: true,
enableScroll: true,
touchMoveLimit: 24,
padding: [15, 10, 0, 15],
@ -128,10 +128,10 @@
lineHeight: 40,
disableGrid: true,
boundaryGap: "center",
fontSize: 12,
fontSize: 10,
type: 'grid',
gridType: 'dash',
itemCount: 4, //x5
itemCount: 3, //x5
scrollShow: true, //false
scrollAlign: 'left', //
},
@ -435,4 +435,4 @@
}
}
}
</style>
</style>

View File

@ -0,0 +1,425 @@
<template>
<view class="app" v-if="current == 5">
<view class="titletexts">
<view class="title">
正常范围
</view>
<view class="add" @click="addHeartRate">
添加数据
</view>
<view class="texts">
<view class="text">
<view class="p">
心率
</view>
<view class="ptwo">
60100/分钟
</view>
</view>
</view>
</view>
<view class="bottomlist">
<view class="timelist">
<view class="item" v-for="(item,index) in timelist" :class="timeindex == index?'timeitem':''"
@tap='taptimeindex(index)'>
{{item.name}}
</view>
</view>
<view class="text">
全部视图主要展示全部体温数值的趋势曲线
</view>
<qiun-data-charts type="line" loadingType="0" :opts="line_opts" :ontouch="true" :chartData="datalist" />
</view>
<view class="bottomtexts">
<view class="lefttext">
<view class="pone">
平均
</view>
<view class="ptwo">
{{echartData.calc.avgVal?echartData.calc.avgVal:'暂无'}}
</view>
</view>
<view class="lefttext">
<view class="pone">
最大
</view>
<view class="ptwo">
{{echartData.calc.maxVal?echartData.calc.maxVal:'暂无'}}
</view>
</view>
<view class="righttext">
<view class="pone">
最小
</view>
<view class="ptwo">
{{echartData.calc.minVal?echartData.calc.minVal:'暂无'}}
</view>
</view>
</view>
<view class="charts-box">
<qiun-data-charts type="pie" :opts="pie_opts" :chartData="datalisttwo" />
</view>
<!-- <qiun-data-charts type="pie" :opts="opts" :chartData="chartData" /> -->
</view>
</template>
<script>
export default {
props: {
current: {
type: Number,
require: true
},
echartData: {
type: Object,
require: true
}
},
computed: {},
data() {
return {
timelist: [{
name: '全部',
id: 0
},
{
name: '周',
id: 1
}, {
name: '月',
id: 2
}, {
name: '年',
id: 3
},
],
timeindex: 0,
socketOpen: false,
timer: null,
datalist: null,
datalisttwo: null,
pie_opts: {
color: ["#1890FF", "#91CB74", "#FAC858", "#EE6666", "#73C0DE", "#3CA272", "#FC8452", "#9A60B4",
"#ea7ccc"
],
padding: [5, 5, 5, 5],
enableScroll: false,
extra: {
pie: {
activeOpacity: 0.5,
activeRadius: 10,
offsetAngle: 0,
labelWidth: 15,
border: false,
borderWidth: 3,
borderColor: "#FFFFFF"
},
},
},
line_opts: {
color: ["#1890FF", "#91CB74", "#FAC858", "#EE6666", "#73C0DE", "#3CA272", "#FC8452", "#9A60B4",
"#ea7ccc"
],
dataLabel: true,
enableScroll: true,
touchMoveLimit: 24,
padding: [15, 10, 0, 15],
xAxis: {
lineHeight: 40,
disableGrid: true,
boundaryGap: "center",
fontSize: 10,
type: 'grid',
gridType: 'dash',
itemCount: 4, //x5
scrollShow: true, //false
scrollAlign: 'left', //
},
yAxis: {
gridType: "dash",
dashLength: 2
},
extra: {
line: {
type: "straight",
width: 2,
activeType: "hollow"
}
}
},
}
},
created() {},
mounted() {
// if (this.current == 5) {
// this.scoket()
// }
this.getServerData()
},
destroyed() {
clearInterval(this.timer);
if (this.socketOpen == true) {
uni.closeSocket();
}
},
watch: {
echartData: {
handler() {
this.getServerData()
},
deep: true
},
current(newValue, oldValue) {
if (newValue != 5) {
clearInterval(this.timer);
if (this.socketOpen == true) {
uni.closeSocket();
}
} else {
setTimeout(() => {
this.scoket()
}, 800)
}
}
},
methods: {
taptimeindex(index) {
this.timeindex = index
this.$emit('taptimeindex', index);
},
addHeartRate() {
uni.navigateTo({
url: "/pagesC/addHeartRate/addHeartRate"
})
},
getServerData() {
if (this.echartData) {
setTimeout(() => {
let res = {
categories: [],
series: [{
name: "血氧",
data: []
}]
};
res.series[0].data = this.echartData.list.map(e => e.hr)
res.categories = this.echartData.list.map(e => e.measureTime)
this.datalist = res
let restwo = {
series: [{
data: [{
"name": "正常" + this.echartData.calc.normalNum + "次",
"value": this.echartData.calc.normalNum
}, {
"name": "超标" + this.echartData.calc.overNum + "次",
"value": this.echartData.calc.overNum
}]
}]
};
this.datalisttwo = restwo
}, 500)
}
},
scoket() {
var SOCKETURL = 'ws://112.7.50.34:9002/webSocket/' + uni.getStorageSync('userInfo').cardNo
const that = this
uni.closeSocket()
this.socketOpen = false
try {
uni.connectSocket({
url: SOCKETURL
})
uni.onSocketOpen(res => {
console.log('webScoket连接已打开', res);
that.socketOpen = true
that.reset()
})
uni.onSocketError(err => {
console.log('webScoket连接打开失败', err);
if (err && err.code != 1000) {
setTimeout(() => {
that.socketOpen = true
uni.connectSocket({
url: SOCKETURL
})
}, 3 * 1000)
}
})
uni.onSocketClose(err => {
console.log('webScoket连接关闭', err);
if (err && err.code !== 1000) {
setTimeout(() => {
that.socketOpen = true
uni.connectSocket({
url: SOCKETURL
})
}, 3 * 1000)
}
})
uni.onSocketMessage(res => {
console.log("webScoket监听收到的信息", res);
// that.newsList.push({
// senderName: that.currentItem.senderName,
// content: JSON.parse(res.data).message
// })
this.$emit('websocket-message');
this.$forceUpdate()
})
} catch (e) {
console.log(e);
}
},
//
reset() {
let that = this
var SOCKETURL = 'ws://112.7.50.34:9002/webSocket/' + uni.getStorageSync('userInfo').cardNo
clearInterval(that.timer);
that.timer = setInterval(() => {
uni.sendSocketMessage({
data: 'ping',
success(res) {
console.log('正在发送心跳');
},
fail(err) {
console.log('心跳发送失败,重新连接...');
_socketOpen = true
uni.connectSocket({
url: SOCKETURL
})
}
})
}, 60000)
},
}
}
</script>
<style lang="scss">
page {
background-color: #F7F5F5;
}
.app {
width: 96%;
margin: 0 auto;
padding-bottom: 60rpx;
/* 请根据实际需求修改父元素尺寸,组件自动识别宽高 */
.charts-box {
width: 100%;
background-color: #fff;
}
.bottomtexts {
width: 100%;
display: flex;
background-color: #fff;
padding: 20rpx 0 40rpx;
.lefttext,
.righttext {
width: 50%;
text-align: center;
}
}
.bottomlist {
width: 100%;
background-color: #fff;
margin-top: 17rpx;
.text {
width: 90%;
margin: 20rpx auto 30rpx;
font-size: 18rpx;
font-weight: 400;
color: #595959;
}
.timelist {
width: 90%;
margin: 0 auto;
display: flex;
padding-top: 25rpx;
.item {
width: 25%;
height: 56rpx;
border-radius: 5rpx 0rpx 0rpx 5rpx;
text-align: center;
line-height: 56rpx;
background: #FFFFFF;
border: 2rpx solid #26A888;
border-radius: 0rpx 5rpx 5rpx 0rpx;
color: #26A888;
}
.timeitem {
background: #26A888;
color: #fff;
}
}
}
.titletexts {
width: 100%;
height: 250rpx;
background: #FFFFFF;
box-shadow: 0rpx 9rpx 31rpx 9rpx rgba(0, 0, 0, 0.03);
border-radius: 5rpx;
position: relative;
.texts {
width: 100%;
display: flex;
position: absolute;
top: 130rpx;
.text {
width: 100%;
.p {
text-align: center;
font-size: 24rpx;
font-weight: 500;
color: #000000;
}
.ptwo {
font-size: 30rpx;
font-weight: 500;
color: #26A888;
text-align: center;
margin-top: 20rpx;
}
}
}
.add {
width: 205rpx;
height: 64rpx;
background: #26A888;
border-radius: 32rpx 0rpx 0rpx 32rpx;
line-height: 64rpx;
text-align: center;
position: absolute;
right: 0%;
color: #fff;
top: 25rpx;
}
.title {
text-align: center;
font-size: 24rpx;
font-weight: 400;
color: #26A888;
width: 100%;
position: absolute;
top: 46rpx;
}
}
}
</style>

View File

@ -33,7 +33,7 @@
<view class="bottomtexts">
<view class="lefttext">
<view class="pone">
平均
平均
</view>
<view class="ptwo">
{{echartData.calc.avgVal?echartData.calc.avgVal:'暂无'}}
@ -120,7 +120,7 @@
color: ["#1890FF", "#91CB74", "#FAC858", "#EE6666", "#73C0DE", "#3CA272", "#FC8452", "#9A60B4",
"#ea7ccc"
],
dataLabel: false,
dataLabel: true,
enableScroll: true,
touchMoveLimit: 24,
padding: [15, 10, 0, 15],
@ -128,7 +128,7 @@
lineHeight: 40,
disableGrid: true,
boundaryGap: "center",
fontSize: 12,
fontSize: 10,
type: 'grid',
gridType: 'dash',
itemCount: 4, //x5

View File

@ -11,15 +11,12 @@
}
},
{
"path": "pages/startup/startup",
"path": "pages/register/register",
"style": {
"navigationStyle": "custom",
"navigationBarTitleText": "注册",
"enablePullDownRefresh": false
}
},
{
"path": "pages/homepage/homepage",
@ -27,14 +24,20 @@
"enablePullDownRefresh": false,
"navigationStyle": "custom"
}
},
}, {
"path": "pages/startup/startup",
"style": {
"navigationStyle": "custom",
"enablePullDownRefresh": false
}
},
{
"path": "pages/medicalservice/medicalservice",
"style": {
"enablePullDownRefresh": false,
"navigationStyle": "custom"
}
}, {
}, {
"path": "pages/login/login",
"style": {
"navigationBarTitleText": "登录",
@ -47,7 +50,7 @@
"navigationStyle": "custom"
}
},
{
{
"path": "pages/facecollection/facecollection",
"style": {
"navigationBarTitleText": "人脸采集",
@ -324,7 +327,7 @@
"style": {
"navigationBarTitleText": "家庭成员详情",
"enablePullDownRefresh": false
}
}, {
"path": "consultationplatform/consultationplatform",
@ -400,19 +403,26 @@
"navigationBarTitleText": "履约详情",
"enablePullDownRefresh": false
}
},{
"path" : "AddMembers/AddMembers",
"style" :
{
"navigationBarTitleText": "添加成员",
"enablePullDownRefresh": false
}
}, {
"path": "AddMembers/AddMembers",
"style": {
"navigationBarTitleText": "添加成员",
"enablePullDownRefresh": false
}
}, {
"path": "Serviceevaluation/Serviceevaluation",
"style": {
"navigationBarTitleText": "服务评价",
"enablePullDownRefresh": false
}
}
]
,{
"path" : "Serviceevaluation/Serviceevaluation",
"style" :
{
"onReachBottomDistance": 40,
"onReachBottomDistance": 40,
"navigationBarTitleText": "服务评价",
"enablePullDownRefresh": false,
"onReachBottom": true
@ -421,24 +431,24 @@
}
,{
"path" : "evaluate/evaluate",
"style" :
"style" :
{
"navigationBarTitleText": "评价",
"onReachBottomDistance": 40,
"onReachBottomDistance": 40,
"enablePullDownRefresh": false,
"onReachBottom": true
}
},
{
"path" : "myevaluation/myevaluation",
"style" :
"style" :
{
"navigationBarTitleText": "我的评价",
"enablePullDownRefresh": false
}
}
]
}, {
@ -583,14 +593,31 @@
"navigationBarTitleText": "记录体温",
"enablePullDownRefresh": false
}
}, {
"path": "addBloodFat/addBloodFat",
"style": {
"navigationBarTitleText": "记录血脂",
"enablePullDownRefresh": false
}
}, {
"path": "addBMI/addBMI",
"style": {
"navigationBarTitleText": "记录BMI",
"enablePullDownRefresh": false
}
}, {
"path": "addBloodOxygen/addBloodOxygen",
"style": {
"navigationBarTitleText": "记录血氧",
"enablePullDownRefresh": false
}
}, {
"path": "addHeartRate/addHeartRate",
"style": {
"navigationBarTitleText": "记录心率",
"enablePullDownRefresh": false
}
}
// {
// "path": "contractsigningprotocol/contractsigningprotocol",
// "style": {
// "navigationBarTitleText": "签约协议",
// "enablePullDownRefresh": false
// }
// }
]
}],
"globalStyle": {

View File

@ -23,26 +23,30 @@
</view>
<view class="line"></view>
<view class="title">
<!-- <view></view> -->
<text>基本信息</text>
</view>
<u-form labelPosition="left" :model="formData" :rules="rules" ref="form1">
<u-form :model="formData" :rules="rules" ref="form1">
<u-form-item label="预约机构" labelWidth="80">
<view class="uniDataSelectClass">
<!-- <input type="text">111 -->
<uni-data-select v-model="formData.hospitalId" :localdata="DeptList" @change="changeDept"
:clear="false">
</uni-data-select>
</view>
</u-form-item>
<u-form-item label="预约项目" labelWidth="80">
<view class="uniDataSelectClass">
<uni-data-select v-model="formData.projectId" :localdata="ProList" @change="changePro"
:clear="false">
</uni-data-select>
</view>
</u-form-item>
<view class="">
<u-form-item label="预约项目" labelWidth="80">
<view class="" @click="appointitem" v-if="formData.hospitalId==''">
<uni-data-select v-model="formData.projectId" :localdata="ProList" @change="changePro"
:clear="false" disabled>
</uni-data-select>
</view>
<view class="" @click="appointitem" v-else>
<uni-data-select v-model="formData.projectId" :localdata="ProList" @change="changePro"
:clear="false">
</uni-data-select>
</view>
</u-form-item>
</view>
<u-form-item label="预约时间" labelWidth="80">
<uni-datetime-picker v-model="datetimerange" type="datetimerange" rangeSeparator="至" />
</u-form-item>
@ -122,6 +126,7 @@
],
DeptList: [],
ProList: [],
hospitalId: '',
test1: [{
text: '同意《用户服务协议》及《隐私政策》',
value: '1'
@ -204,6 +209,16 @@
},
methods: {
appointitem(e) {
// console.log(e, '67')
var that = this
if (that.formData.hospitalId == '') {
this.$refs.uToast.show({
title: '请先选择预约机构',
type: 'error',
})
}
},
getDeptAndPro() {
getDeptList().then(res => {
this.DeptList = res.data.map(item => {
@ -213,9 +228,13 @@
}
})
})
},
infolist() {
getProlist({
projectType: 1,
status: 0
status: 0,
hospitalId: this.hospitalId
}).then(res => {
if (res.code == 200) {
this.ProList = res.data.map(item => {
@ -228,6 +247,11 @@
})
},
changeDept(e) {
console.log(e, '99')
console.log(this.formData, '9')
this.formData.projectId = ''
this.hospitalId = e
this.infolist()
this.formData.hospitalName = this.DeptList.find(item => item.value == e).text
},
changePro(e) {
@ -360,11 +384,11 @@
</script>
<style lang="scss">
.uniDataSelectClass {
.uni-select__selector {
z-index: 99;
}
}
// .uniDataSelectClass {
// .uni-select__selector {
// z-index: 99;
// }
// }
::v-deep.u-form-item--left__content__label.data-v-5e7216f1 {
display: flex;

236
pagesC/addBMI/addBMI.vue Normal file
View File

@ -0,0 +1,236 @@
<template>
<view class="app">
<view class="uptext">
<view class="pressureg">
身高
</view>
<input placeholder="请输入数值" border="bottom" v-model="height" fontSize='50rpx' inputAlign='center'
type="number"></input>
<view class="text">
cm
</view>
</view>
<view class="uptext">
<view class="pressureg">
体重
</view>
<input placeholder="请输入数值" border="bottom" v-model="weight" fontSize='50rpx' inputAlign='center'
type="number"></input>
<view class="text">
KG
</view>
</view>
<view class="uptext">
<view class="pressureg">
BMI
</view>
<input placeholder="请输入数值" border="bottom" v-model="bmi" fontSize='50rpx' inputAlign='center'
disabled></input>
<view class="text">
kg/m^2
</view>
</view>
<view class="time">
<view style="display: flex;align-items: center;">
<text style="margin-left: 50rpx">记录时间</text>
<view style="display: flex;margin: 0 auto; color: #999;">
<uni-datetime-picker v-model="measureTime" @change="timeconfirm">{{measureTime}}
<image style="margin-right: 40rpx;" src="../../static/huijiantou.png" mode="widthFix" />
</uni-datetime-picker>
</uni-datetime-picker>
</view>
</view>
</view>
<view class="submit" @tap="submit">
保存
</view>
<u-toast ref="uToast" />
</view>
</template>
<script>
import {
savebmi
} from '@/api/examinationapi/add.js'
export default {
data() {
return {
weight: '',
height: '',
timetext: this.formatDate(Date.now()),
measureTime: this.formatDate(Date.now()),
};
},
computed: {
bmi() {
return (this.weight / ((this.height / 100) * (this.height / 100))).toFixed(2);
},
},
methods: {
formatDate(timestamp) {
const now = new Date(parseInt(timestamp))
const year = now.getFullYear();
const month = now.getMonth() + 1;
const date = now.getDate();
const hour = now.getHours();
const minute = now.getMinutes();
const second = now.getSeconds();
return year + "-" + ((month < 10) ? '0' + month : month) + "-" + ((date < 10) ? '0' + date : date) + " " +
((hour < 10) ? '0' + hour : hour) + ":" + ((minute < 10) ? '0' + minute : minute) + ":" + ((second <
10) ? '0' + second : second);
},
timeconfirm(time) {
this.timetext = time
},
submit() {
if (this.height && this.weight) {
this.bmi
let data = {
bmi: (this.weight / ((this.height / 100) * (this.height / 100))).toFixed(2),
height: this.height,
weight: this.weight,
// identity: uni.getStorageSync('userinfo').cardNo
identity: '370882199909092123',
measureTime: this.timetext,
}
savebmi(data).then(res => {
if (res.code == 200) {
this.$refs.uToast.show({
title: '保存成功',
type: 'success',
})
setTimeout(() => {
uni.navigateBack({
delta: 1
})
}, 1000)
}
})
} else {
this.$refs.uToast.show({
title: '各项格式为正整数,请重新输入',
type: 'error',
})
}
},
}
}
</script>
<style lang="scss">
page {
background-color: #fff;
}
.app {
.submit {
width: 60%;
height: 98rpx;
margin: 60rpx auto;
background-color: #55d0df;
border-radius: 10rpx;
border: solid 0rpx #0c0c0c;
color: #ffffff;
text-align: center;
line-height: 98rpx;
}
.time {
margin-top: 100rpx;
position: relative;
border-bottom: 1rpx solid #f0f1f6;
height: 80rpx;
line-height: 65rpx;
image {
width: 20rpx;
height: 20rpx;
position: absolute;
right: 10rpx;
top: 20%;
}
// text:nth-child(1) {
// margin-left: 50rpx;
// }
text:nth-child(2) {
float: right;
margin-right: 100rpx;
color: #999999;
font-size: 28rpx;
}
}
.uptext:nth-child(4) {
margin-top: 80rpx;
}
.uptext:nth-child(3) {
margin-top: 80rpx;
}
.uptext:nth-child(2) {
margin-top: 80rpx;
}
.uptext:nth-child(1) {
margin-top: 40rpx;
}
.uptext {
width: 100%;
height: 300rpx;
position: relative;
border-bottom: 1rpx solid #f0f1f6;
.pressured {
margin-left: 20rpx;
font-size: 32rpx;
line-height: 34rpx;
letter-spacing: 2rpx;
color: #d34141;
}
.pressureg {
margin-left: 20rpx;
font-size: 32rpx;
line-height: 34rpx;
letter-spacing: 2rpx;
color: #41d36d;
}
.heart {
margin-left: 20rpx;
font-size: 32rpx;
line-height: 34rpx;
letter-spacing: 2rpx;
color: #00aaff;
}
.text {
position: absolute;
top: 75%;
width: 20%;
text-align: center;
left: 40%;
font-size: 30rpx;
line-height: 34rpx;
letter-spacing: 1rpx;
color: #999999;
}
/deep/ input {
text-align: center;
font-size: 40rpx;
border-bottom: 2rpx solid #f0f1f6;
position: absolute;
width: 40%;
height: 10%;
top: 50%;
left: 30%;
}
}
}
</style>

View File

@ -0,0 +1,247 @@
<template>
<view class="app">
<view class="uptext">
<view class="pressureg">
高密度脂蛋白胆固醇
</view>
<input placeholder="请输入数值" border="bottom" v-model="hdl" fontSize='50rpx' inputAlign='center'></input>
<view class="text">
mmol/L
</view>
</view>
<view class="uptext">
<view class="pressured">
低密度脂蛋白胆固醇
</view>
<input placeholder="请输入数值" border="bottom" v-model="ldl" fontSize='50rpx' inputAlign='center'></input>
<view class="text">
mmol/L
</view>
</view>
<view class="uptext">
<view class="heart">
血清总胆固醇
</view>
<input placeholder="请输入数值" border="bottom" v-model="tc" fontSize='50rpx' inputAlign='center'></input>
<view class="text">
mmol/L
</view>
</view>
<view class="uptext">
<view class="heart" style="color:yellowgreen;">
甘油三酯
</view>
<input placeholder="请输入数值" border="bottom" v-model="tg" fontSize='50rpx' inputAlign='center'></input>
<view class="text">
mmol/L
</view>
</view>
<view class="time">
<view style="display: flex;align-items: center;">
<text style="margin-left: 50rpx">记录时间</text>
<view style="display: flex;margin: 0 auto; color: #999;">
<uni-datetime-picker v-model="measureTime" @change="timeconfirm">{{measureTime}}
<image style="margin-right: 40rpx;" src="../../static/huijiantou.png" mode="widthFix" />
</uni-datetime-picker>
</uni-datetime-picker>
</view>
</view>
</view>
<view class="submit" @tap="submit">
保存
</view>
<u-toast ref="uToast" />
</view>
</template>
<script>
import {
savebf
} from '@/api/examinationapi/add.js'
export default {
data() {
return {
hdl: '',
ldl: '',
tc: '',
tg: '',
timetext: this.formatDate(Date.now()),
measureTime: this.formatDate(Date.now()),
};
},
methods: {
formatDate(timestamp) {
const now = new Date(parseInt(timestamp))
const year = now.getFullYear();
const month = now.getMonth() + 1;
const date = now.getDate();
const hour = now.getHours();
const minute = now.getMinutes();
const second = now.getSeconds();
return year + "-" + ((month < 10) ? '0' + month : month) + "-" + ((date < 10) ? '0' + date : date) + " " +
((hour < 10) ? '0' + hour : hour) + ":" + ((minute < 10) ? '0' + minute : minute) + ":" + ((second <
10) ? '0' + second : second);
},
timeconfirm(time) {
this.timetext = time
},
submit() {
if (this.hdl && this.ldl && this.tc && this.tg) {
let data = {
hdl: this.hdl,
ldl: this.ldl,
tc: this.tc,
tg: this.tg,
// identity: uni.getStorageSync('userinfo').cardNo
identity: '370882199909092123',
measureTime: this.timetext,
}
savebf(data).then(res => {
if (res.code == 200) {
this.$refs.uToast.show({
title: '保存成功',
type: 'success',
})
setTimeout(() => {
uni.navigateBack({
delta: 1
})
}, 1000)
}
})
} else {
this.$refs.uToast.show({
title: '各项格式为正整数,请重新输入',
type: 'error',
})
}
},
ruls(num) {
let reg = /^((?!0)\d{1,9})$/;
if (!num.match(reg)) {
return false
} else {
return true
}
}
}
}
</script>
<style lang="scss">
page {
background-color: #fff;
}
.app {
.submit {
width: 60%;
height: 98rpx;
margin: 60rpx auto;
background-color: #55d0df;
border-radius: 10rpx;
border: solid 0rpx #0c0c0c;
color: #ffffff;
text-align: center;
line-height: 98rpx;
}
.time {
margin-top: 100rpx;
position: relative;
border-bottom: 1rpx solid #f0f1f6;
height: 80rpx;
line-height: 65rpx;
image {
width: 20rpx;
height: 20rpx;
position: absolute;
right: 10rpx;
top: 20%;
}
// text:nth-child(1) {
// margin-left: 50rpx;
// }
text:nth-child(2) {
float: right;
margin-right: 100rpx;
color: #999999;
font-size: 28rpx;
}
}
.uptext:nth-child(4) {
margin-top: 80rpx;
}
.uptext:nth-child(3) {
margin-top: 80rpx;
}
.uptext:nth-child(2) {
margin-top: 80rpx;
}
.uptext:nth-child(1) {
margin-top: 40rpx;
}
.uptext {
width: 100%;
height: 300rpx;
position: relative;
border-bottom: 1rpx solid #f0f1f6;
.pressured {
margin-left: 20rpx;
font-size: 32rpx;
line-height: 34rpx;
letter-spacing: 2rpx;
color: #d34141;
}
.pressureg {
margin-left: 20rpx;
font-size: 32rpx;
line-height: 34rpx;
letter-spacing: 2rpx;
color: #41d36d;
}
.heart {
margin-left: 20rpx;
font-size: 32rpx;
line-height: 34rpx;
letter-spacing: 2rpx;
color: #00aaff;
}
.text {
position: absolute;
top: 75%;
width: 20%;
text-align: center;
left: 40%;
font-size: 30rpx;
line-height: 34rpx;
letter-spacing: 1rpx;
color: #999999;
}
/deep/ input {
text-align: center;
font-size: 40rpx;
border-bottom: 2rpx solid #f0f1f6;
position: absolute;
width: 40%;
height: 10%;
top: 50%;
left: 30%;
}
}
}
</style>

View File

@ -0,0 +1,225 @@
<template>
<view class="app">
<view class="uptext">
<view class="pressureg">
脉搏
</view>
<input placeholder="请输入数值" border="bottom" v-model="pulse" fontSize='50rpx' inputAlign='center'></input>
<view class="text">
/
</view>
</view>
<view class="uptext">
<view class="pressured">
血氧
</view>
<input placeholder="请输入数值" border="bottom" v-model="spo2" fontSize='50rpx' inputAlign='center'></input>
<view class="text">
%
</view>
</view>
<view class="time">
<view style="display: flex;align-items: center;">
<text style="margin-left: 50rpx">记录时间</text>
<view style="display: flex;margin: 0 auto; color: #999;">
<uni-datetime-picker v-model="measureTime" @change="timeconfirm">{{measureTime}}
<image style="margin-right: 40rpx;" src="../../static/huijiantou.png" mode="widthFix" />
</uni-datetime-picker>
</uni-datetime-picker>
</view>
</view>
</view>
<view class="submit" @tap="submit">
保存
</view>
<u-toast ref="uToast" />
</view>
</template>
<script>
import {
savebo
} from '@/api/examinationapi/add.js'
export default {
data() {
return {
spo2: '',
pulse: '',
timetext: this.formatDate(Date.now()),
measureTime: this.formatDate(Date.now()),
};
},
methods: {
formatDate(timestamp) {
const now = new Date(parseInt(timestamp))
const year = now.getFullYear();
const month = now.getMonth() + 1;
const date = now.getDate();
const hour = now.getHours();
const minute = now.getMinutes();
const second = now.getSeconds();
return year + "-" + ((month < 10) ? '0' + month : month) + "-" + ((date < 10) ? '0' + date : date) + " " +
((hour < 10) ? '0' + hour : hour) + ":" + ((minute < 10) ? '0' + minute : minute) + ":" + ((second <
10) ? '0' + second : second);
},
timeconfirm(time) {
this.timetext = time
},
submit() {
if (this.spo2 && this.pulse) {
let data = {
pulse: this.pulse,
spo2: this.spo2,
// identity: uni.getStorageSync('userinfo').cardNo
identity: '370882199909092123',
measureTime: this.timetext,
}
savebo(data).then(res => {
if (res.code == 200) {
this.$refs.uToast.show({
title: '保存成功',
type: 'success',
})
setTimeout(() => {
uni.navigateBack({
delta: 1
})
}, 1000)
}
})
} else {
this.$refs.uToast.show({
title: '各项格式为正整数,请重新输入',
type: 'error',
})
}
},
ruls(num) {
let reg = /^((?!0)\d{1,9})$/;
if (!num.match(reg)) {
return false
} else {
return true
}
}
}
}
</script>
<style lang="scss">
page {
background-color: #fff;
}
.app {
.submit {
width: 60%;
height: 98rpx;
margin: 60rpx auto;
background-color: #55d0df;
border-radius: 10rpx;
border: solid 0rpx #0c0c0c;
color: #ffffff;
text-align: center;
line-height: 98rpx;
}
.time {
margin-top: 100rpx;
position: relative;
border-bottom: 1rpx solid #f0f1f6;
height: 80rpx;
line-height: 65rpx;
image {
width: 20rpx;
height: 20rpx;
position: absolute;
right: 10rpx;
top: 20%;
}
// text:nth-child(1) {
// margin-left: 50rpx;
// }
text:nth-child(2) {
float: right;
margin-right: 100rpx;
color: #999999;
font-size: 28rpx;
}
}
.uptext:nth-child(4) {
margin-top: 80rpx;
}
.uptext:nth-child(3) {
margin-top: 80rpx;
}
.uptext:nth-child(2) {
margin-top: 80rpx;
}
.uptext:nth-child(1) {
margin-top: 40rpx;
}
.uptext {
width: 100%;
height: 300rpx;
position: relative;
border-bottom: 1rpx solid #f0f1f6;
.pressured {
margin-left: 20rpx;
font-size: 32rpx;
line-height: 34rpx;
letter-spacing: 2rpx;
color: #d34141;
}
.pressureg {
margin-left: 20rpx;
font-size: 32rpx;
line-height: 34rpx;
letter-spacing: 2rpx;
color: #41d36d;
}
.heart {
margin-left: 20rpx;
font-size: 32rpx;
line-height: 34rpx;
letter-spacing: 2rpx;
color: #00aaff;
}
.text {
position: absolute;
top: 75%;
width: 20%;
text-align: center;
left: 40%;
font-size: 30rpx;
line-height: 34rpx;
letter-spacing: 1rpx;
color: #999999;
}
/deep/ input {
text-align: center;
font-size: 40rpx;
border-bottom: 2rpx solid #f0f1f6;
position: absolute;
width: 40%;
height: 10%;
top: 50%;
left: 30%;
}
}
}
</style>

View File

@ -0,0 +1,215 @@
<template>
<view class="app">
<view class="uptext">
<view class="pressureg">
心率
</view>
<input placeholder="请输入数值" border="bottom" v-model="hr" fontSize='50rpx' inputAlign='center'></input>
<view class="text">
/
</view>
</view>
<view class="time">
<view style="display: flex;align-items: center;">
<text style="margin-left: 50rpx">记录时间</text>
<view style="display: flex;margin: 0 auto; color: #999;">
<uni-datetime-picker v-model="measureTime" @change="timeconfirm">{{measureTime}}
<image style="margin-right: 40rpx;" src="../../static/huijiantou.png" mode="widthFix" />
</uni-datetime-picker>
</uni-datetime-picker>
</view>
</view>
</view>
<view class="submit" @tap="submit">
保存
</view>
<u-toast ref="uToast" />
</view>
</template>
<script>
import {
savehr
} from '@/api/examinationapi/add.js'
export default {
data() {
return {
hr: '',
timetext: this.formatDate(Date.now()),
measureTime: this.formatDate(Date.now()),
};
},
methods: {
formatDate(timestamp) {
const now = new Date(parseInt(timestamp))
const year = now.getFullYear();
const month = now.getMonth() + 1;
const date = now.getDate();
const hour = now.getHours();
const minute = now.getMinutes();
const second = now.getSeconds();
return year + "-" + ((month < 10) ? '0' + month : month) + "-" + ((date < 10) ? '0' + date : date) + " " +
((hour < 10) ? '0' + hour : hour) + ":" + ((minute < 10) ? '0' + minute : minute) + ":" + ((second <
10) ? '0' + second : second);
},
timeconfirm(time) {
this.timetext = time
},
submit() {
if (this.hr) {
let data = {
hr: this.hr,
uploadType: 1,
// identity: uni.getStorageSync('userinfo').cardNo
identity: '370882199909092123',
measureTime: this.timetext,
}
savehr(data).then(res => {
if (res.code == 200) {
this.$refs.uToast.show({
title: '保存成功',
type: 'success',
})
setTimeout(() => {
uni.navigateBack({
delta: 1
})
}, 1000)
}
})
} else {
this.$refs.uToast.show({
title: '各项格式为正整数,请重新输入',
type: 'error',
})
}
},
ruls(num) {
let reg = /^((?!0)\d{1,9})$/;
if (!num.match(reg)) {
return false
} else {
return true
}
}
}
}
</script>
<style lang="scss">
page {
background-color: #fff;
}
.app {
.submit {
width: 60%;
height: 98rpx;
margin: 60rpx auto;
background-color: #55d0df;
border-radius: 10rpx;
border: solid 0rpx #0c0c0c;
color: #ffffff;
text-align: center;
line-height: 98rpx;
}
.time {
margin-top: 100rpx;
position: relative;
border-bottom: 1rpx solid #f0f1f6;
height: 80rpx;
line-height: 65rpx;
image {
width: 20rpx;
height: 20rpx;
position: absolute;
right: 10rpx;
top: 20%;
}
// text:nth-child(1) {
// margin-left: 50rpx;
// }
text:nth-child(2) {
float: right;
margin-right: 100rpx;
color: #999999;
font-size: 28rpx;
}
}
.uptext:nth-child(4) {
margin-top: 80rpx;
}
.uptext:nth-child(3) {
margin-top: 80rpx;
}
.uptext:nth-child(2) {
margin-top: 80rpx;
}
.uptext:nth-child(1) {
margin-top: 40rpx;
}
.uptext {
width: 100%;
height: 300rpx;
position: relative;
border-bottom: 1rpx solid #f0f1f6;
.pressured {
margin-left: 20rpx;
font-size: 32rpx;
line-height: 34rpx;
letter-spacing: 2rpx;
color: #d34141;
}
.pressureg {
margin-left: 20rpx;
font-size: 32rpx;
line-height: 34rpx;
letter-spacing: 2rpx;
color: #41d36d;
}
.heart {
margin-left: 20rpx;
font-size: 32rpx;
line-height: 34rpx;
letter-spacing: 2rpx;
color: #00aaff;
}
.text {
position: absolute;
top: 75%;
width: 20%;
text-align: center;
left: 40%;
font-size: 30rpx;
line-height: 34rpx;
letter-spacing: 1rpx;
color: #999999;
}
/deep/ input {
text-align: center;
font-size: 40rpx;
border-bottom: 2rpx solid #f0f1f6;
position: absolute;
width: 40%;
height: 10%;
top: 50%;
left: 30%;
}
}
}
</style>

View File

@ -22,7 +22,7 @@
<view class="heart">
心率
</view>
<input placeholder="请输入心率值" border="bottom" v-model="hr" fontSize='50rpx' inputAlign='center'></input>
<input placeholder="请输入值" border="bottom" v-model="hr" fontSize='50rpx' inputAlign='center'></input>
<view class="text">
/分钟
</view>
@ -161,7 +161,10 @@
color: #999999;
font-size: 28rpx;
}
}
.uptext:nth-child(3) {
margin-top: 80rpx;
}
.uptext:nth-child(2) {
@ -226,4 +229,4 @@
}
}
}
</style>
</style>

View File

@ -11,9 +11,25 @@
<blood-pressure :current="tabindex" :echartData="list" @taptimeindex='taptimeindex'
v-on:websocket-message="handleWebSocketMessage"></blood-pressure>
</view>
<view v-if="tabindex == 2">
<BloodFat :current="tabindex" :echartData="list" @taptimeindex='taptimeindex'
v-on:websocket-message="handleWebSocketMessage"></BloodFat>
</view>
<view v-if="tabindex == 3">
<BMI :current="tabindex" :echartData="list" @taptimeindex='taptimeindex'
v-on:websocket-message="handleWebSocketMessage"></BMI>
</view>
<view v-if="tabindex == 4">
<Blood-oxygen :current="tabindex" :echartData="list" @taptimeindex='taptimeindex'
v-on:websocket-message="handleWebSocketMessage"></Blood-oxygen>
</view>
<view v-if="tabindex == 5">
<Heart-rate :current="tabindex" :echartData="list" @taptimeindex='taptimeindex'
v-on:websocket-message="handleWebSocketMessage"></Heart-rate>
</view>
<view v-if="tabindex == 6">
<Bloodtemperature :current="tabindex" :echartData="list" @taptimeindex='taptimeindex'
v-on:websocket-message="handleWebSocketMessage"></Bloodtemperature>
<Temperature :current="tabindex" :echartData="list" @taptimeindex='taptimeindex'
v-on:websocket-message="handleWebSocketMessage"></Temperature>
</view>
</view>
</view>
@ -25,12 +41,20 @@
} from '@/api/pagesC/healthdata/index.js'
import BloodPressure from '../../components/BloodPressure/BloodPressure.vue'
import BloodSugar from '../../components/BloodSugar/BloodSugar.vue'
import Bloodtemperature from '../../components/Bloodtemperature/Bloodtemperature.vue'
import Temperature from '../../components/Temperature/Temperature.vue'
import BloodFat from '../../components/BloodFat/BloodFat.vue'
import BMI from '../../components/BMI/BMI.vue'
import BloodOxygen from '../../components/BloodOxygen/BloodOxygen.vue'
import HeartRate from '../../components/HeartRate/HeartRate.vue'
export default {
components: {
BloodPressure,
BloodSugar,
Bloodtemperature
Temperature,
BloodFat,
BMI,
BloodOxygen,
HeartRate
},
data() {
return {