Compare commits

...

3 Commits

Author SHA1 Message Date
qcl_123 d267101341 123 2026-03-23 14:25:46 +08:00
qcl_123 057092a023 123 2026-03-23 14:23:51 +08:00
qcl_123 7f77e93069 123 2026-03-23 14:22:23 +08:00
30 changed files with 8385 additions and 654 deletions

26
App.vue
View File

@ -158,9 +158,35 @@
aud_id: uni.getStorageSync('userid') ? uni.getStorageSync('userid') : res.data[
0].id
})
that.handleLabelList( res.data[0].id)
that.handlePublicRecord(res.data[0].id)
}
}).catch(err => {})
},
//
handleLabelList(id) {
let that = this
that.$model.getLabelList({
aud_id: uni.getStorageSync('userid') ? uni.getStorageSync('userid') : id
}).then(res => {
console.log("公共卡片项目", res)
if (res.code == 0) {
that.$store.commit('changeLabelList', res.data)
}
})
},
//
handlePublicRecord(id) {
let that = this
that.$model.getPublicRecord({
aud_id: uni.getStorageSync('userid') ? uni.getStorageSync('userid') : id
}).then(res => {
console.log("公共手动记录", res)
if (res.code == 0) {
that.$store.commit('changePublicRecord', res.data)
}
})
},
}
}
</script>

View File

@ -0,0 +1,173 @@
<template>
<view class="wrapper">
<view class="bg" @click="onTap">
<view class="edit" @click.stop>
<view class="title">手动记录</view>
<view class="editem" @click="hideKeyboard">
<view class="left">项目</view>
<view class="right">
<picker :range="list" :value="lableTndex" @change="bindLableChange">
<view class="uni-input">{{name?name:'请选择'}}</view>
<icon class="iconfont icon-arrow-down-bold"></icon>
</picker>
</view>
</view>
<!-- -->
<view class="editem" @click="hideKeyboard">
<view class="left">日期</view>
<view class="right">
<picker mode="date" :end="endDate" @change="changeLog" fields="time">
<view class="uni-input">{{regTime?regTime:'请选择'}}</view>
<icon class="iconfont icon-arrow-down-bold"></icon>
</picker>
</view>
</view>
<view class="">
<view class="editem">
<view class="name">时长</view>
<view class="right">
<picker mode="multiSelector" :range="timeList" :value="timesTndex" @change="bindTimeChange">
<view class="size16">{{time_m?time_m+':':'请选择'}}{{time_s?time_s:''}}</view>
</picker>
<uni-icons type="bottom" class="ml-15 c666"></uni-icons>
</view>
</view>
</view>
<view class="btn close" @click="onTap()">取消</view>
<view class="btn" @click="handleTarget">确定</view>
</view>
</view>
</view>
</template>
<script>
import {
mapState
} from "vuex";
export default {
data() {
return {
name: "",
regTime: "",
number: '',
timeList: [],
time_m: "",
time_s: "",
timesTndex: [1, 0],
lableTndex: 0,
}
},
props: {
type: {},
},
computed: {
...mapState(["labelList"]),
list() {
let that = this
let list = []
that.labelList.forEach(ite => {
if (ite.acd_id == that.type) {
list = ite.list
}
})
return list
},
endDate() {
return this.$tools.getDate("start")
},
startDate() {
return this.$tools.GetDateStr(-90);
},
},
mounted() {
this.timeList = this.$tools.gethms()
},
methods: {
bindTimeChange(e) {
let that = this
let m = e.target.value[0]
let s = e.target.value[1]
that.timesTndex = e.target.value
let time_m = Number(that.timeList[0][m].substring(0, 2)) * 60
let time_s = Number(that.timeList[1][s].substring(0, 2))
if (Number(time_m + time_s) < 30) {
that.time_m = '00'
that.time_s = '30'
} else {
that.time_m = that.timeList[0][m].substring(0, 2)
that.time_s = that.timeList[1][s].substring(0, 2)
}
},
//
handleTarget() {
let that = this
if (!that.name) {
that.$tools.msg("请选择测量项目")
return
}
if (!that.regTime) {
that.$tools.msg("请选择日期")
return
}
if (!that.time_m || !that.time_s) {
that.$tools.msg("请输入时长")
return
}
that.$model.getpublicmeasure({
acd_id: that.type,
name: that.name,
record_time: that.regTime,
data: that.time_m + ':' + that.time_s,
aud_id: uni.getStorageSync('userid')
}).then(res => {
if (res.code != 0) return
that.$tools.msg(res.msg)
that.$store.commit("changeRecord", false);
that.$store.dispatch("getUserInfo", {
aud_id: uni.getStorageSync('userid'),
})
that.$store.dispatch("getPublicContent", {
acd_id: that.acd_id,
aud_id: uni.getStorageSync('userid')
})
that.regTime = ""
})
},
bindLableChange(e) {
let that = this
that.name = that.list[e.detail.value]
},
//
changeLog(e) {
this.regTime = e.detail.value
},
onTap() {
this.regTime = ""
this.name = ""
this.$store.commit("changeRecord", false);
},
hideKeyboard() {
uni.hideKeyboard()
},
}
}
</script>
<style scoped lang="scss">
.btn {
width: 40%;
float: right;
margin-top: 15px;
background: $maincolor !important;
}
.edit {
top: 20%
}
.close {
background: #fff !important;
float: left;
color: #333;
}
</style>

View File

@ -1,15 +1,99 @@
<template>
<view v-if="isRecord">
<recordWeight v-if="rtype==2"></recordWeight>
<skipAdd v-if="rtype==6"></skipAdd>
<lungAdd v-if="rtype==8"></lungAdd>
<view class="wrapper" v-if="isRecord">
<view class="bg" @click="onTap">
<view class="edit" @click.stop>
<view class="title">手动记录</view>
<view class="editem">
<view class="left">日期</view>
<view class="right">
<picker mode="date" :end="endDate" @change="changeLog" fields="time">
<view class="uni-input">{{regTime?regTime:'请选择'}}</view>
<icon class="iconfont icon-arrow-down-bold"></icon>
</picker>
</view>
</view>
<view v-if="rtype!=8">
<!-- 项目 -->
<view class="editem" v-if="info&&info.list.length">
<view class="left">项目</view>
<view class="right">
<picker :range="info.list" range-key="name" :value="lableTndex" @change="bindLableChange">
<view class="uni-input">{{name?name:'请选择'}}</view>
<icon class="iconfont icon-arrow-down-bold"></icon>
</picker>
</view>
</view>
<!-- 项目时长类型 -->
<view class="editem" v-if="info&&info.list.length&&listType">
<view class="name">{{listType==1?'个数':'时长'}}</view>
<view class="right" v-if="listType==4">
<picker mode="multiSelector" :range="timeList" :value="timesTndex" @change="bindTimeChange">
<view class="size16">{{time_m?time_m+':':'请选择'}}{{time_s?time_s:''}}</view>
</picker>
<uni-icons type="bottom" class="ml-15 c666"></uni-icons>
</view>
<view class="right" v-if="listType!=4">
<input :type="listType==1?'number':'digit'" v-model="number" placeholder="请输入">
{{listType==1?'个':'秒'}}
</view>
</view>
<view class="editem" v-if="info.time">
<view class="name">时长</view>
<view class="right">
<picker mode="multiSelector" :range="timeList" :value="timesTndex" @change="bindTimeChange">
<view class="size16">{{time_m?time_m+':':'请选择'}}{{time_s?time_s:''}}</view>
</picker>
<uni-icons type="bottom" class="ml-15 c666"></uni-icons>
</view>
</view>
<view class="editem" v-if="info.number">
<view class="name">个数</view>
<view class="right">
<input type="number" v-model="number" placeholder="请输入">
</view>
</view>
<view class="editem" v-if="info.height">
<view class="name">身高</view>
<view class="right">
<input type="digit" v-model="height" placeholder="请输入身高" />cm
</view>
</view>
<view class="editem" v-if="info.weight">
<view class="name">体重</view>
<view class="right">
<input type="digit" v-model="weight" placeholder="请输入体重">kg
</view>
</view>
</view>
<!-- 肺活量 -->
<view class="" v-if="rtype==8">
<view class="editem">
<view class="name">第一次</view>
<view class="right">
<input type="digit" v-model="number1" placeholder="请输入">ml
</view>
</view>
<view class="editem">
<view class="name">第二次</view>
<view class="right">
<input type="digit" v-model="number2" placeholder="请输入">ml
</view>
</view>
<view class="editem">
<view class="name">第三次</view>
<view class="right">
<input type="digit" v-model="number3" placeholder="请输入">ml
</view>
</view>
</view>
<view class="btn close" @click="onTap()">取消</view>
<view class="btn" @click="handleTarget">确定</view>
</view>
</view>
</view>
</template>
<script>
import recordWeight from './weightAdd.vue';
import skipAdd from "./skipAdd.vue"
import lungAdd from "./lungAdd.vue"
import {
mapState
} from "vuex";
@ -17,19 +101,244 @@
props: {
rtype: {},
},
components: {
skipAdd,
lungAdd,
recordWeight
},
data() {
return {}
return {
name: "",
number: '',
regTime: "",
number1: '',
number2: "",
number3: "",
time_m: "",
time_s: "",
weight: "",
height: '',
timeList: [],
lableTndex: 0,
timesTndex: [1, 0],
listType: null,
}
},
computed: {
...mapState(["isRecord"]),
...mapState(["isRecord", "PublicRecord", "labelList"]),
info() {
let that = this
let info = {}
if (that.PublicRecord.length) {
that.PublicRecord.forEach(ite => {
if (ite.id == that.rtype) {
info = ite
}
})
}
console.log("手动内容", info, that.rtype)
return info
},
endDate() {
return this.$tools.getDate("start")
},
startDate() {
return this.$tools.GetDateStr(-90);
},
},
mounted() {
let that = this
that.timeList = that.$tools.gethms()
},
methods: {
//
handleTarget() {
let that = this
if (that.rtype == 2) {
that.handleinsertmeasure()
} else if (that.rtype == 6) {
that.handleskipmeasure()
} else if (that.rtype == 8) {
that.handleLungmeasure()
} else {
that.handlepublicmeasure()
}
},
//
handlepublicmeasure() {
let that = this
if (!that.name) {
that.$tools.msg("请选择测量项目")
return
}
if (!that.regTime) {
that.$tools.msg("请选择日期")
return
}
if (that.listType == 4 && (!that.time_m || !that.time_s)) {
that.$tools.msg("请输入时长")
return
}
if (that.listType != 4 && !that.number) {
let msg = that.listType == 1 ? '请输入个数' : '请输入时长'
that.$tools.msg(msg)
return
}
let time_m = that.time_m + ':' + that.time_s
that.$model.getpublicmeasure({
acd_id: that.rtype,
name: that.name,
record_time: that.regTime,
data: that.listType == 4 ? time_m : that.number,
aud_id: uni.getStorageSync('userid')
}).then(res => {
if (res.code != 0) return
that.$tools.msg(res.msg)
that.$store.dispatch("getUserInfo", {
aud_id: uni.getStorageSync('userid'),
})
that.$store.dispatch("getPublicContent", {
acd_id: that.acd_id,
aud_id: uni.getStorageSync('userid')
})
that.onTap()
})
},
//
handleLungmeasure() {
let that = this
if (!that.regTime) {
that.$tools.msg("请选择测量日期")
return
}
if (!that.number1) {
that.$tools.msg("请输入第一次吸气值")
return
}
if (!that.number2) {
that.$tools.msg("请输入第二次吸气值")
return
}
if (!that.number3) {
that.$tools.msg("请输入第三次吸气值")
return
}
that.$model.getLungmeasure({
aud_id: uni.getStorageSync('userid'),
time: that.regTime,
one: that.number1,
two: that.number2,
three: that.number3
}).then(res => {
if (res.code != 0) return
that.$tools.msg(res.msg)
that.$store.dispatch("getUserInfo", {
aud_id: uni.getStorageSync('userid')
})
that.$store.dispatch("getLungResult", {
aud_id: uni.getStorageSync('userid')
})
that.onTap()
})
},
//
handleskipmeasure() {
let that = this
if (!that.regTime) {
that.$tools.msg("请选择测量日期")
return
}
if (!that.number) {
that.$tools.msg("请输入跳绳个数")
return
}
that.$model.getskipmeasure({
aud_id: uni.getStorageSync('userid'),
num: that.number,
r_time: that.regTime,
time_m: that.time_m,
time_s: that.time_s,
type: "free",
}).then(res => {
if (res.code != 0) return
that.$tools.msg(res.msg)
that.$store.dispatch("getUserInfo", {
aud_id: uni.getStorageSync('userid'),
})
that.$store.dispatch("getSkipResult", {
aud_id: uni.getStorageSync('userid'),
})
that.onTap()
})
},
//
handleinsertmeasure() {
let that = this
if (!that.regTime) {
that.$tools.msg("请选择测量日期")
return
}
if (!that.height) {
that.$tools.msg("请输入测量身高")
return
}
if (!that.weight) {
that.$tools.msg("请输入测量体重")
return
}
that.$model.getinsertmeasure({
aud_id: uni.getStorageSync('userid'),
time: that.regTime,
weight: that.weight,
height: that.height,
}).then(res => {
if (res.code != 0) return
that.$tools.msg(res.msg)
that.$store.dispatch("getResult", {
aud_id: uni.getStorageSync('userid')
})
that.$store.dispatch("getUserInfo", {
aud_id: uni.getStorageSync('userid')
})
that.$store.dispatch("GetBodyTrendList", {
aud_id: uni.getStorageSync('userid'),
s_time: that.startDate,
e_time: that.endDate
})
that.onTap()
})
},
bindTimeChange(e) {
let that = this
let m = e.target.value[0]
let s = e.target.value[1]
that.timesTndex = e.target.value
let time_m = Number(that.timeList[0][m].substring(0, 2)) * 60
let time_s = Number(that.timeList[1][s].substring(0, 2))
that.time_m = that.timeList[0][m].substring(0, 2)
that.time_s = that.timeList[1][s].substring(0, 2)
},
bindLableChange(e) {
console.log("e", e)
this.name = this.info.list[e.detail.value].name
this.listType = this.info.list[e.detail.value].type
},
changeLog(e) {
this.regTime = e.detail.value
},
onTap() {
let that = this
that.name = ""
that.weight = ""
that.height = ""
that.regTime = ""
that.number1 = ""
that.number2 = ""
that.number3 = ""
that.number = ''
that.time_m = ""
that.time_s = ""
that.timeList = []
that.lableTndex = 0
that.timesTndex = [1, 0]
that.listType = null
that.$store.commit("changeRecord", false);
},
}
}
</script>

View File

@ -2,11 +2,11 @@
<view class="calendar-wrapper">
<view class="header">
<view class="pre" @click="changeMonth('pre')">
<uni-icons type="back"></uni-icons>
<uni-icons type="back" size="26"></uni-icons>
</view>
<view>{{y+'年'+formatNum(m)+'月'}}</view>
<view class="next" @click="changeMonth('next')">
<uni-icons type="forward"></uni-icons>
<uni-icons type="forward" size="26"></uni-icons>
</view>
</view>
<view class="week">

View File

@ -2,8 +2,8 @@
"name" : "Reedaw",
"appid" : "__UNI__20604F1",
"description" : "面向儿童青少年的健康体质测量APP",
"versionName" : "1.2.1",
"versionCode" : 121,
"versionName" : "1.2.2",
"versionCode" : 122,
"transformPx" : false,
/* 5+App */
"app-plus" : {

View File

@ -269,6 +269,36 @@
"navigationBarTitleText": "",
"enablePullDownRefresh": false
}
},
{
"path": "pages/PublicCards/PublicCards",
"style": {
"navigationBarTitleText": ""
}
},
{
"path": "pages/PublicCards/charts",
"style": {
"navigationBarTitleText": "运动曲线"
}
},
{
"path": "pages/PublicCards/history",
"style": {
"navigationBarTitleText": "历史记录"
}
},
{
"path": "pages/PublicCards/contrast",
"style": {
"navigationBarTitleText": "数据对比"
}
},
{
"path": "pages/PublicCards/pkdetail",
"style": {
"navigationBarTitleText": "对比详情"
}
}
],
"globalStyle": {

View File

@ -0,0 +1,396 @@
<template>
<view class="content ">
<view class="tabbar">
<scroll-view class="scroll-menu" scroll-x="true" style="white-space: nowrap;">
<view v-for="(item,index) in labelList" :class="[active==index?'active':'']"
@click="handleActive(item,index)">
<text>{{item}}</text>
</view>
</scroll-view>
</view>
<!-- -->
<view class="desc">
<view class="statuevue">
<view class="bi">
<view class="peobox" :style="'left:'+offset+'%'">
<view class="xx"></view>
</view>
<view class="item" v-for="(ite,ind) in lineList" :key="ind" :style="{backgroundColor:ite.color}">
<view class="span1">{{ite.text}}</view>
<view class="span" v-if="ind<lineList.length-1">{{ite.max_val}}</view>
</view>
</view>
</view>
</view>
<!-- -->
<view v-for="(ite,ind) in label_data" v-if="active == ind">
<view class="info">
<view class="left">
<view class="left_view">
<view class="title">{{ite.this_time_title}}:</view>
<view class="val">
<text class="yello"></text>
{{ite.this_time_value?ite.this_time_value:'-'}}
</view>
</view>
<view class="left_view">
<view class="title">{{ite.today_time_title}}:</view>
<view class="val">
<text class="yello"></text>
{{ite.today_time_value?ite.today_time_value:'-'}}
</view>
</view>
<view class="left_view">
<view class="title"></view>
<view class="val">
<text class="blues yello"></text>
{{ite.today_times?ite.today_times:'-'}}
</view>
</view>
<view class="left_view">
<view class="title">{{ite.all_time_title}}:</view>
<view class="val">
<text class="yello"></text>
{{ite.all_time_value?ite.all_time_value:'-'}}
</view>
</view>
<view class="left_view">
<view class="title"></view>
<view class="val">
<text class="blues yello"></text>
{{ite.all_times?ite.all_times:'-'}}
</view>
</view>
</view>
<view class="right">
<view class="title bold">训练成绩为</view>
<view class="charts">
<qiun-data-charts type="arcbar" :chartData="chartData" />
<view class="name">{{ite.score?ite.score:'-'}}</view>
</view>
<view class="standard" v-if="ite.standard">
<text :style="{backgroundColor:ite.color}">{{ite.standard}}</text>
</view>
<view v-if="ite.max_score" class="size12 c999"> 总成绩为{{ite.max_score}}</view>
</view>
</view>
<!-- 说明 -->
<view class="info describe" v-if="ite.describe">
{{ite.describe}}
</view>
</view>
<!-- -->
<view class="gridList">
<view class="data">
<view class="item" @click="navTo('/pages/PublicCards/charts?acd_id='+acd_id)">
<view class="image">
<image src="@/static/charts.png"></image>
</view>
<view class="name">运动曲线</view>
</view>
<view class="item" @click="navTo('/pages/PublicCards/history?acd_id='+acd_id)">
<view class="image">
<image src="@/static/add.png"></image>
</view>
<view class="name">历史记录</view>
</view>
<view class="item" @click="navTo('/pages/PublicCards/contrast?acd_id='+acd_id)">
<view class="image">
<image src="@/static/pk.png"></image>
</view>
<view class="name">数据对比</view>
</view>
<view class="item" @click="$store.commit('changeRecord',true)">
<view class="image">
<image src="@/static/history.png"></image>
</view>
<view class="name">添加记录</view>
</view>
</view>
</view>
<!-- 手动记录 -->
<record :rtype='acd_id'></record>
</view>
</template>
<script>
import {
mapState
} from "vuex";
import record from '@/element/manuallyAdd/record.vue';
import qiunDataCharts from '@/uni_modules/qiun-data-charts/components/qiun-data-charts/qiun-data-charts.vue';
export default {
data() {
return {
active: 0,
acd_id: 10,
lineList: [],
label_data: [],
offset: 0,
labelName: "",
chartData: {
series: [{
name: "正确率",
color: "#4687F9",
data: 0.8
}]
},
}
},
components: {
record,
qiunDataCharts
},
computed: {
...mapState(["PublicContent"]),
labelList() {
let that = this
if (that.PublicContent) {
that.labelName = that.PublicContent.label_list[0]
that.lineList = that.PublicContent.line_list
that.label_data = that.PublicContent.label_data
that.offset = that.PublicContent.label_data[0].offset
}
return that.PublicContent ? that.PublicContent.label_list : []
},
},
onLoad(options) {
let that = this
that.acd_id = options.acd_id
that.$store.dispatch("getPublicContent", {
acd_id: that.acd_id,
aud_id: uni.getStorageSync('userid')
})
},
methods: {
handleActive(ite, ind) {
let that = this
that.active = ind
that.labelName = ite
that.offset = that.label_data[ind].offset
},
//
reload() {
let that = this
console.log('返回历史页', that.acd_id)
this.$nextTick(() => {
that.$store.dispatch("getPublicContent", {
acd_id: that.acd_id,
aud_id: uni.getStorageSync('userid')
})
})
},
navTo(url) {
uni.navigateTo({
url: url
})
},
}
}
</script>
<style scoped lang="scss">
.content {
width: calc(100% - 30px);
min-height: calc(100vh - 80px);
padding: 65px 15px 15px;
background-color: #f7f7f7;
}
.tabbar {
display: flex;
position: fixed;
top: 0;
left: 0;
right: 0;
z-index: 999;
justify-content: space-between;
border-bottom: 1px solid #f7f7f7;
box-shadow: 0px 1px 5px 2px #dfe2e1fc;
background-color: #fff;
.scroll-menu {
width: 100%;
white-space: nowrap;
view {
height: 55px;
line-height: 55px;
display: inline-block;
min-width: 100px;
margin: 0 10px;
text-align: center;
}
}
.active {
color: $maincolor;
font-weight: bold;
border-bottom: 2px solid $maincolor;
}
}
.desc {
padding: 15px;
text-align: left;
width: calc(100%-20px);
height: auto;
border-radius: 5px;
font-size: 30rpx;
color: #999;
margin-top: 15px;
background: #fff;
.statuevue {
height: 35px;
position: relative;
width: 100% !important;
margin: 20px auto 10px;
.bi {
display: flex;
justify-content: space-between;
width: auto;
padding-top: 10px;
.peobox {
position: absolute;
right: 0;
top: -1px;
.xx {
width: 5px;
height: 5px;
border-radius: 50%;
background: #fff;
position: absolute;
z-index: 9;
border: 2px solid #1b2086;
top: 9px;
}
}
}
.item {
position: relative;
margin: 0;
flex: 1;
height: 5px;
color: #666;
font-size: 30rpx;
.span1 {
width: 100%;
text-align: center;
position: absolute;
top: -23px;
}
.span {
margin-top: 8px;
position: absolute;
right: -8px;
}
}
}
}
.describe {
color: #666;
font-size: 28rpx;
line-height: 25px;
}
.info {
background-color: #fff;
padding: 15px;
margin-top: 15px;
border-radius: 5px;
display: flex;
justify-content: space-between;
.left {
width: calc(100% - 280rpx);
display: flex;
flex-wrap: wrap;
.left_view {
width: 100%;
display: flex;
align-items: center;
}
.title {
width: 80px;
font-weight: bold;
margin-right: 10px;
}
}
.right {
width: 260rpx;
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: center;
.charts {
width: 260upx;
height: 260upx;
margin: 10px 0;
position: relative;
display: flex;
align-items: center;
justify-content: center;
.name {
width: 100%;
text-align: center;
font-size: 56rpx;
color: #4687F9;
position: absolute;
}
}
.title {
width: 100%;
text-align: center;
}
}
}
.standard {
width: 100%;
text-align: center;
margin-top: -3px;
margin-bottom: 8px;
text {
width: 100px;
color: #fff;
font-size: 14px;
padding: 2px 10px;
border-radius: 5px;
}
}
.yello {
width: 8px;
height: 8px;
border-radius: 50%;
display: inline-block;
margin-right: 5px;
background-color: $btncolor;
}
.blues {
background-color: $maincolor;
}
.gridList {
margin: 0;
}
</style>

View File

@ -0,0 +1,202 @@
<template>
<view class="TrendPage">
<view class="charts">
<!-- 时间选择 -->
<view class="boxTime">
<view class="one">
<picker mode="date" :end="endDate" @change="handStartTimeH" fields="time"
:value="startTime?startTime:startDate">
<view class="uni-input mr-10">{{startTime?startTime:startDate}}</view>
<icon class="iconfont icon-arrow-down-bold"></icon>
</picker>
<view class="center">~</view>
<picker mode="date" :end="endDate" @change="handEndTimeH" fields="time"
:value="endTime?endTime:endDate">
<view class="uni-input mr-10">{{endTime?endTime:endDate}}</view>
<icon class="iconfont icon-arrow-down-bold"></icon>
</picker>
</view>
</view>
</view>
<!-- 曲线图 -->
<view class="box">
<view class="boxLine">
<view class="line" v-for="(item,index) in weightList">
<view v-if="item.line.categories.length" class="mt-15 mb-15">
<qiunDataCharts type="area" :chartData="item.line" :canvas2d="true" :canvasId="'1025'+ index"
:cHeight="400" :cWidth="720" :animation="false"
:opts="{enableScroll:true,xAxis:{scrollShow:false,itemCount:3}}" :ontouch="true" />
</view>
<view class="nolist" v-else>
<image src="../../static/none.png"></image>
<text>暂无数据请手动添加~</text>
</view>
<view class="title">
<text :style="{'backgroundColor':item.line.series[0].color}"></text>
{{item.title}}
</view>
</view>
</view>
</view>
</view>
</template>
<script>
import {
mapState
} from "vuex";
import qiunDataCharts from '@/uni_modules/qiun-data-charts/components/qiun-data-charts/qiun-data-charts.vue';
export default {
components: {
qiunDataCharts,
},
computed: {
...mapState(["labelList"]),
endDate() {
return this.$tools.getDate("start")
},
startDate() {
return this.$tools.GetDateStr(-90);
},
},
data() {
return {
name: "",
list: [],
acd_id: 0,
handTrue: true,
active: 0,
startTime: "",
endTime: "",
weightList: [],
};
},
onLoad(options) {
let that = this
that.active = 0
that.acd_id = options.acd_id
that.time = that.startDate
that.labelList.forEach(ite => {
if (ite.acd_id == that.acd_id) {
that.list = ite.list
that.name = that.list[0]
return
}
})
that.handlePublicTrendList()
},
methods: {
handStartTimeH(e) {
let that = this
if (that.endTime) {
if (Date.parse(e.detail.value) > Date.parse(that.endTime)) {
that.$tools.msg("请选择正确的时间")
return
}
} else {
if (Date.parse(e.detail.value) > Date.parse(that.endDate)) {
that.$tools.msg("请选择正确的时间")
return
}
}
that.startTime = e.detail.value
that.handlePublicTrendList()
},
handEndTimeH(e) {
let that = this
if (that.startTime) {
if (Date.parse(e.detail.value) < Date.parse(that.startTime)) {
that.$tools.msg("请选择正确的时间")
return
}
} else {
if (Date.parse(e.detail.value) < Date.parse(that.startDate)) {
that.$tools.msg("请选择正确的时间")
return
}
}
that.endTime = e.detail.value
that.handlePublicTrendList()
},
handlePublicTrendList() {
let that = this
that.$model.getPublicTrendList({
aud_id: uni.getStorageSync('userid'),
acd_id: that.acd_id,
s_time: that.startTime ? that.startTime : that.startDate,
e_time: that.endTime ? that.endTime : that.endDate
}).then(res => {
// 线
if (res.code == 0) {
that.weightList = res.data
}
console.log("公共曲线", that.weightList)
})
},
navTo(url) {
uni.navigateTo({
url: url
})
}
},
}
</script>
<style lang="scss" scoped>
.TrendPage {
min-height: 100vh;
}
.boxTime {
display: flex;
justify-content: center;
align-items: center;
background-color: #fff;
border-radius: 10px 10px 0 0;
.one {
width: 100%;
display: flex;
line-height: 25px;
justify-content: space-between;
align-items: center;
}
.center {
width: 10%;
margin: 0 15px;
}
picker {
width: 50%;
border: none;
display: flex;
justify-content: center;
}
.iconfont {
color: #333333;
font-size: 36rpx;
}
}
.line {
padding-top: 15px;
}
.title {
width: 100%;
text-align: center;
color: #999;
font-size: 14PX;
margin-top: 15px;
text {
width: 15px;
height: 10px;
margin-right: 5px;
display: inline-block;
}
}
</style>

View File

@ -0,0 +1,256 @@
<template>
<view class="content">
<view class="tabbar">
<scroll-view class="scroll-menu" scroll-x="true" style="white-space: nowrap;">
<view v-for="(item,index) in labellist" :class="[active==index?'active':'']"
@click="handleActive(item,index)">
<text>{{item}}</text>
</view>
</scroll-view>
</view>
<view class=" calendar">
<!-- 日历 -->
<ren-calendar ref='ren' :markDays='markDays' @onDayClick='onDayClick' @onMonthClickPre='onMonthClickPre'
v-if="isShow">
</ren-calendar>
<!-- -->
<view class="box" v-if="infoList.length">
<view class="list" v-for="(item,index) in infoList" :key="index" @click="addMemberTags(item.id,item)">
<view class="item">
<view class="check">
<uni-icons :type="isActive.indexOf(item.id)!=-1?'checkbox-filled':'circle'" size="22"
:color="isActive.indexOf(item.id)!=-1?'#FEC407':'#dfdfdf'"></uni-icons>
</view>
<view>{{item.v1}}<text>{{item.v1_name}}</text></view>
<view v-if="item.v2">{{item.v2}}<text>{{item.v2_name}}</text></view>
<view v-if="item.v3">{{item.v3}}<text>{{item.v3_name}}</text></view>
</view>
</view>
</view>
<!-- -->
<view class="bottom">
<view class="list" v-for="(ite,ind) in ActiveDays" :key="ind" v-if="isActive"
@click="addMemberTags(ite.id,ite)">
<view class="item borderRadius">
<view class="time">{{ite.r_t}}</view>
<view>{{ite.v1}}<text>{{ite.v1_name}}</text></view>
<view v-if="ite.v2">{{ite.v2}}<text>{{ite.v2_name}}</text></view>
<view v-if="ite.v3">{{ite.v3}}<text>{{ite.v3_name}}</text></view>
<view class="check">
<uni-icons type="clear" size="22" color="#999"></uni-icons>
</view>
</view>
</view>
<view class="pkclass" v-if="length==2">vs</view>
<!-- <view :class="{'active':length!=2}" class="btn" @click="handlePK">对比</view> -->
</view>
</view>
</view>
</template>
<script>
import RenCalendar from '@/element/ren-calendar/ren-calendar.vue';
import {
mapState
} from "vuex";
export default {
data() {
return {
markDays: [],
infoList: [],
list: [],
isActive: [],
ActiveDays: [],
token: null,
startM: null,
endM: null,
isShow: true,
acd_id: "",
active: 0,
labelName: "",
}
},
components: {
RenCalendar,
},
computed: {
...mapState(["user", "TrendPk", "labelList"]),
labellist() {
let that = this
let list = []
that.labelList.forEach(ite => {
if (ite.acd_id == that.acd_id) {
list = ite.list
that.labelName = ite.list[0]
}
})
return list
},
length() {
return this.isActive.length
},
endDate() {
return this.$tools.getDate("start")
},
},
onLoad(optoins) {
let that = this
that.acd_id = optoins.acd_id
that.startM = that.$tools.getDate("m").substring(0, 10)
that.endM = that.$tools.getDate("m").substring(11, 21)
that.markDays = []
that.list = []
that.isActive = []
that.ActiveDays = []
that.$nextTick(() => {
that.isShow = true
that.getList(that.startM, that.endM)
})
},
methods: {
getList(start, end) {
let that = this
that.$model.getPublicResultdiff({
aud_id: uni.getStorageSync('userid'),
acd_id: that.acd_id,
s_time: start,
e_time: end,
name: that.labelName
}).then(res => {
if (res) {
that.markDays = res.Dlist
that.list = res.data
for (var i = 0; i < res.data.length; i++) {
if (Date.parse(that.endDate) == Date.parse(res.data[i].r_t)) {
that.infoList.push(res.data[i])
}
}
console.log("对比", res, )
}
})
},
onMonthClickPre(data) {
console.log("onMonthClickPre", data)
let that = this
let start = data.substring(0, 10)
let end = data.substring(11, 21)
that.infoList = []
that.markDays = []
that.list = []
that.getList(start, end)
},
onDayClick(data) {
let that = this
this.infoList = []
for (var i = 0; i < that.list.length; i++) {
if (Date.parse(data.date) == Date.parse(that.list[i].r_t)) { //includes
this.infoList.push(that.list[i]);
}
}
},
addMemberTags(index, item) {
var that = this;
console.log("addMemberTags", index, item)
if (that.isActive.indexOf(index) == -1) {
that.isActive.push(index);
that.ActiveDays.push(item);
} else {
that.isActive.splice(that.isActive.indexOf(index), 1);
that.ActiveDays.splice(that.ActiveDays.indexOf(item), 1);
}
if (that.isActive.length > 2) {
that.isActive.splice(0, 1)
that.ActiveDays.splice(0, 1);
}
},
handlePK() {
let that = this
if (that.isActive.length != 2) {
that.$tools.msg("请先选择数据!")
return
}
let info = {}
info.type = that.acd_id
info.before_id = that.isActive[0]
info.after_id = that.isActive[1]
console.log("1111", info, that.isActive)
uni.navigateTo({
url: "/pages/compk/pkdetail?info=" + JSON.stringify(info)
})
},
handleActive(ite, ind) {
let that = this
that.active = ind
that.labelName = ite
that.startM = that.$tools.getDate("m").substring(0, 10)
that.endM = that.$tools.getDate("m").substring(11, 21)
that.list = []
that.infoList = []
that.markDays = []
that.isActive = []
that.ActiveDays = []
that.$nextTick(() => {
that.isShow = true
that.getList(that.startM, that.endM)
})
},
},
}
</script>
<style scoped lang="scss">
.calendar {
padding-top: 60px;
}
/deep/.calendar-wrapper {
margin: 15px;
.header {
background-color: #fff;
color: $maincolor;
border-radius: 10px 10px 0 0;
}
/deep/uni-icons {
color: $maincolor;
}
}
.item {
font-size: 30rpx !important;
}
.tabbar {
display: flex;
position: fixed;
top: 0;
left: 0;
right: 0;
z-index: 999;
justify-content: space-between;
border-bottom: 1px solid #f7f7f7;
box-shadow: 0px 1px 5px 2px #dfe2e1fc;
background-color: #fff;
.scroll-menu {
width: 100%;
white-space: nowrap;
view {
height: 55px;
line-height: 55px;
display: inline-block;
min-width: 100px;
margin: 0 10px;
text-align: center;
}
}
.active {
color: $maincolor;
font-weight: bold;
border-bottom: 2px solid $maincolor;
}
}
</style>

View File

@ -0,0 +1,272 @@
<template>
<view class="common">
<view class="tabbar">
<scroll-view class="scroll-menu" scroll-x="true" style="white-space: nowrap;">
<view v-for="(item,index) in labellist" :class="[active==index?'active':'']"
@click="handleActive(item,index)">
<text>{{item}}</text>
</view>
</scroll-view>
</view>
<view class="history">
<uni-swipe-action>
<uni-swipe-action-item :right-options="item.options" v-for="(item, index) in ranklist" :key="index"
@click="swipeClick($event, index)">
<view class='list'>
<view class="item">
<view class="time">
<icon class="t-icon t-icon-shijian-mianxing-0"></icon>
<text>{{item.record_time}}</text>
</view>
<view>{{item.v1}}<text>{{item.v1_name}}</text></view>
<view>{{item.v2}}<text>{{item.v2_name}}</text></view>
</view>
</view>
</uni-swipe-action-item>
</uni-swipe-action>
<view class="endtext" v-if="!lastPage || page >= lastPage"> 到底了看看别的吧 </view>
</view>
<view class="nolist" v-if="!lastPage">
<image src="../../static/none.png"></image>
<text>暂无数据</text>
</view>
</view>
</template>
<script>
import {
mapState
} from "vuex";
export default {
computed: {
...mapState(['user', 'labelList']),
labellist() {
let that = this
let list = []
that.labelList.forEach(ite => {
if (ite.acd_id == that.acd_id) {
list = ite.list
that.labelName = ite.list[0]
}
})
return list
},
endDate() {
return this.$tools.getDate("start")
},
startDate() {
return this.$tools.GetDateStr(-90);
},
},
data() {
return {
ranklist: [],
page: 1,
isDelete: false,
lastPage: '',
acd_id: "",
active: 0,
labelName: "",
}
},
onLoad(options) {
let that = this
that.acd_id = options.acd_id
that.$nextTick(() => {
that.getList()
})
},
onUnload() {
console.log('关闭页面');
let that = this
var pages = getCurrentPages();
var Page = pages[pages.length - 1]; //
var prevPage = pages[pages.length - 2];
if (that.isDelete) { //
prevPage.$vm.reload()
}
},
onReachBottom() {
let that = this
console.log("onReachBottom", this.lastPage)
if (!this.lastPage || this.page >= this.lastPage) {
uni.showToast({
title: '没有更多数据!',
icon: 'none'
})
return
}
this.page++
this.getList()
},
methods: {
swipeClick(e, index) {
let that = this
let id = that.ranklist[index].id
uni.showModal({
title: '友情提示',
content: '是否删除当前测量记录?',
success: function(res) {
if (res.confirm) {
that.$model.getPublicHistoryDel({
id: id,
}).then((res) => {
if (res.code != 0) {
that.$tools.msg(res.msg)
return
}
that.ranklist.splice(index, 1)
that.$store.dispatch("getUserInfo", {
aud_id: uni.getStorageSync('userid')
})
that.isDelete = true
that.$tools.msg("删除成功")
})
} else if (res.cancel) {
that.$tools.msg("您已取消操作!");
}
},
})
},
getList() {
let that = this
that.$model.getPublicHistory({
aud_id: uni.getStorageSync('userid'),
acd_id: that.acd_id,
page: that.page,
name: that.labelName
}).then((res) => {
console.log("历史记录", res)
if (res.code != 0) return
let options = [{
text: '删除',
style: {
backgroundColor: '#dd524d'
}
}]
res.data.rows.forEach(item => {
item.options = options
})
this.ranklist = this.ranklist.concat(res.data.rows)
this.lastPage = res.data.totalpage
})
},
handleActive(ite, ind) {
let that = this
that.active = ind
that.labelName = ite
that.page = 1
that.ranklist = []
that.lastPage = ""
that.getList()
},
}
}
</script>
<style scoped="scoped" lang="scss">
.common {
width: 100%;
min-height: 100.5vh; //
overflow-y: scroll;
background-color: #f7f7f7;
}
.tabbar {
display: flex;
position: fixed;
top: 0;
left: 0;
right: 0;
z-index: 999;
justify-content: space-between;
border-bottom: 1px solid #f7f7f7;
box-shadow: 0px 1px 5px 2px #dfe2e1fc;
background-color: #fff;
.scroll-menu {
width: 100%;
white-space: nowrap;
view {
height: 55px;
line-height: 55px;
display: inline-block;
min-width: 100px;
margin: 0 10px;
text-align: center;
}
}
.active {
color: $maincolor;
font-weight: bold;
border-bottom: 2px solid $maincolor;
}
}
.history {
width: calc(100% - 30px);
height: auto;
margin: 70px 15px 0;
padding-bottom: 40px;
.list {
width: 100%;
margin-top: 12px;
position: relative;
.item {
width: calc(100% - 20px);
height: auto;
background: #fff;
padding: 10px;
display: flex;
justify-content: space-between;
border-radius: 10px;
align-items: center;
font-weight: 700;
font-size: 30rpx !important;
text {
width: 100%;
display: block;
color: #666;
text-align: center;
font-weight: 500;
font-size: 28rpx;
}
view {
width: 28%;
display: flex;
flex-wrap: wrap;
justify-content: center;
}
}
.time {
width: 44% !important;
font-size: 28rpx;
color: #666;
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: center;
icon {
width: 40rpx;
height: 40rpx;
margin-right: 5px;
}
text {
width: 100%;
font-size: 30rpx;
margin-top: 3px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
}
}
}
</style>

View File

@ -0,0 +1,156 @@
<template>
<view class="content pkconp">
<view class="headerTop">
<view class="left">
<image :src="memInfo.headimg" class="image1"></image>
</view>
<view class="right">
<view class="name">{{memInfo.name?memInfo.name:memInfo.nickname}}</view>
<view class="top">
<view>性别{{memInfo.gender=='0'?'未知':memInfo.gender=='1'?'男':'女'}}</view>
<view class="ml-15">年龄{{user.age}}</view>
</view>
</view>
</view>
<view class="box" v-if="acd_id==2">
<view class="item">
<view>{{memInfo.day?memInfo.day:'0'}}</view>
<text>时间()</text>
</view>
<view class="item">
<view>{{memInfo.weightdiff?Math.abs(memInfo.weightdiff):0}}</view>
<text v-if="Number(memInfo.weightdiff)>0">增重(kg)</text>
<text v-else>减重(kg)</text>
</view>
<view class="item">
<view>{{memInfo.fat_wdiff?Math.abs(memInfo.fat_wdiff):0}}</view>
<text v-if="Number(memInfo.fat_wdiff)>0">增脂(kg)</text>
<text v-else>减脂(kg)</text>
</view>
<view class="time">
<view>
<uni-icons class="t-icon t-icon-shijian-mianxing-0"></uni-icons>{{memInfo.time}}
</view>数据变化
</view>
</view>
<view class="boxTime" v-else>
<view class=" mt-10 mb-10">
<uni-icons class="t-icon t-icon-shijian-mianxing-0 mr-10 size18"></uni-icons>
{{memInfo.time}}
</view>
数据变化
</view>
<view class="control">
<!-- 名称 -->
<view class="title">
<view class="name"></view>
<view>趋势</view>
<view>之前</view>
<view>之后</view>
</view>
<view v-for="(ite,ind) in listStr" :key="ind" class="li">
<view class="name">
<text>{{ite.title}}</text>
</view>
<view class="num">
<text
v-if="ite.diffval!=0||ite.diffval=='0.00'||ite.diffval=='00:00:00'">{{acd_id!=6?Math.abs(ite.diffval):ite.diffval}}</text>
<icon class="t-icon t-icon-shang" v-if="Number(ite.diffval)>0"></icon>
<icon class="t-icon t-icon-xia" v-if="Number(ite.diffval)<0"></icon>
<icon class="t-icon t-icon-hengxian"
v-if="!ite.diffval||ite.diffval=='0.00'||ite.diffval=='00:00:00'"></icon>
</view>
<view class="f">
<view>{{ite.firstresult?ite.firstresult.value:'-'}}</view>
<text>{{ite.firstresult.level}}</text>
</view>
<view class="f">
<view>{{ite.secondresult?ite.secondresult.value:'-'}}</view>
<text>{{ite.secondresult.level}}</text>
</view>
</view>
</view>
</view>
</template>
<script>
import {
mapState
} from "vuex";
export default {
onLoad(options) {
let that = this
//
console.log("options", options)
if (options.info) {
let info = JSON.parse(options.info)
that.acd_id = info.type
that.handleSharepic(JSON.parse(options.info))
}
},
computed: {
...mapState(["user", "appTheme"]),
},
methods: {
handleSharepic(info) {
let that = this
that.$model.getresultcontrast({
type: info.type,
before_id: info.before_id,
after_id: info.after_id,
}).then(res => {
console.log("res", res)
if (res.code != 0) {
this.$tools.msg(res.msg)
return
}
res.data.list.forEach(ite => {
if (ite.firstresult && ite.firstresult.name == 'weight') {
res.data.weightdiff = ite.diffval
}
if (ite.firstresult && ite.firstresult.name == 'fat_w') {
res.data.fat_wdiff = ite.diffval
}
if (ite.firstresult || ite.secondresult) {
ite.name = ite.firstresult ? ite.firstresult.name : ite.secondresult.name
ite.title = ite.firstresult ? ite.firstresult.title : ite.secondresult.title
}
})
that.memInfo = res.data
that.listStr = res.data.list
})
},
},
data() {
return {
memInfo: {},
listStr: [],
acd_id: "",
}
},
}
</script>
<style scoped lang="scss">
.age {
margin-right: 20px;
}
.icon {
width: 18px;
height: 18px;
padding: 3px;
margin-right: 7px;
background-color: #aaa;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
}
.t-icon-hengxian {
height: 2px;
width: 10px;
}
</style>

View File

@ -54,7 +54,7 @@
uni.onBluetoothAdapterStateChange(function(res) {
that.$store.commit("changeBluetooth", res.available);
})
console.log("搜索")
},
onUnload() {
console.log("onUnload")

View File

@ -4,11 +4,13 @@
<headerIndex :isArea="false"></headerIndex>
<!-- 卡片数据 -->
<view class="radius50"></view>
<view class="list">
<view class="list" v-if="user">
<view v-for="(item,index) in user.card_data_list">
<!-- 标题 -->
<view class="card box" @click="handlerReport(item)"
:class="[item.acd_id==6?'tiao':item.acd_id==8?'fei':'shen']">
<view class="card box" @click="handlerReport(item)" :style="{'backgroundColor':item.background_color}">
<view class="boxBg">
<image :src="item.background_pic"></image>
</view>
<view class="title border">
<view class="name2">{{item.card_name}}</view>
<view class="time">
@ -79,7 +81,7 @@
},
onLoad(options) {
let that = this
console.log("首页options",options)
console.log("首页options", options)
if (options && options.type == 1) {
that.handleUserList()
}
@ -124,13 +126,37 @@
aud_id: uni.getStorageSync('userid') ? uni.getStorageSync('userid') : res.data[0].id
})
that.$store.dispatch("getCardList", {
aud_id: uni.getStorageSync('userid') ? uni.getStorageSync('userid') : res.data[
0].id
aud_id: uni.getStorageSync('userid') ? uni.getStorageSync('userid') : res.data[0].id
})
that.handleLabelList(res.data[0].id)
that.handlePublicRecord(res.data[0].id)
}
}).catch(err => {})
},
//
handleLabelList(id) {
let that = this
that.$model.getLabelList({
aud_id: uni.getStorageSync('userid') ? uni.getStorageSync('userid') : id
}).then(res => {
console.log("公共卡片项目", res)
if (res.code == 0) {
that.$store.commit('changeLabelList', res.data)
}
})
},
//
handlePublicRecord(id) {
let that = this
that.$model.getPublicRecord({
aud_id: uni.getStorageSync('userid') ? uni.getStorageSync('userid') : id
}).then(res => {
console.log("公共手动记录", res)
if (res.code == 0) {
that.$store.commit('changePublicRecord', res.data)
}
})
},
//
handleCard() {
uni.navigateTo({
@ -241,44 +267,18 @@
overflow: hidden;
}
.tiao {
background-color: #dff3fe !important;
}
.fei {
background-color: #fcf0f0 !important;
}
.card::after {
content: '';
.boxBg {
width: 250rpx;
height: 215rpx;
position: absolute;
right: 15px;
z-index: 9;
}
.shen::after {
content: '';
bottom: -50rpx;
background: url("../../static/Fill0.png") no-repeat;
background-size: 100% 100%;
}
.tiao:after {
content: '';
bottom: -50rpx;
background: url("../../static/Fill2.png") no-repeat;
background-size: 100% 100%;
}
.fei:after {
content: '';
bottom: -50rpx;
background: url("../../static/Fill1.png") no-repeat;
background-size: 100% 100%;
image {
width: 100%;
height: 100%;
}
}
.content {

View File

@ -4,7 +4,7 @@
<view class="headbox">
<view class="touxiang">
<image v-if="headimg" :src="headimg" class="headimage" />
<icon v-else class="iconfont icon-user-filling headimage" @click="handleUpImg"></icon>
<icon v-else class="iconfont icon-user-filling headimage"></icon>
</view>
</view>
<view class="lan border-bottom">
@ -213,36 +213,6 @@
this.index = e.detail.value
this.memInfo.grade = this.gradeList[e.target.value].id
},
handleUpImg() {
let that = this
uni.chooseImage({
count: 1, //9
sourceType: ['album', 'camera'], //
success: function(res) {
uni.showLoading({
title: '识别中...'
})
uni.uploadFile({
header: {
'Authorization': "Bearer " + uni.getStorageSync('token'),
'X-Authorization': "Bearer " + uni.getStorageSync('refreshtoken'),
},
url: that.$http.baseUrl + '/api/app/wxopen/uploadimg',
filePath: res.tempFilePaths[0],
name: 'file',
success: (res) => {
let attr = JSON.parse(res.data)
uni.hideLoading()
if (attr.code == 0) {
that.headimg = attr.data.url
} else {
that.$tools.msg("不支持该图像")
}
}
})
}
})
},
},
};

View File

@ -5,7 +5,7 @@
<view class="tips" v-for="(ite,ind) in list" :key="ind">
<view class="title">{{ite.recordtime}}</view>
<uni-swipe-action>
<uni-swipe-action-item :right-options="ite.options" @click="handledetail($event, ind)">
<uni-swipe-action-item :right-options="ite.options">
<view class="list">
<icon class="t-icon t-icon-a-ziyuan265"></icon>
<view class="info">
@ -47,64 +47,8 @@
let that = this
that.page = 1
that.list = []
that.token = uni.getStorageSync("token")
},
onReachBottom() {
let that = this
if (!this.lastPage || this.page >= this.lastPage) {
uni.showToast({
title: '没有更多数据!',
icon: 'none'
})
return
}
this.page++
},
methods: {
getList(page) {
let that = this
that.$model.getNotepadList({
pageNo: this.page,
pageSize: 10,
petid: uni.getStorageSync('petid'),
}).then((res) => {
if (res.code != 0) return
this.list = this.list.concat(res.data.rows)
this.lastPage = res.data.totalpage
})
},
handledetail(e, index) {
let that = this
if (e.content.text === "删除") {
let id = that.list[index].id
uni.showModal({
title: '友情提示',
content: '确定删除该条记录吗?',
success: function(res) {
if (res.confirm) {
that.$model.getNotepadDelete({
id: id
}).then(res => {
if (res.code != 0) return
that.list.splice(index, 1)
that.$tools.msg("删除成功!");
})
} else if (res.cancel) {
that.$tools.msg("您已取消删除!");
}
}
});
return
}
},
handleAdd() {
uni.navigateTo({
url: "/pages/notepad/addNotepad"
})
},
}
methods: {}
}
</script>

View File

@ -267,12 +267,14 @@
}
});
} else {
that.islink = -1
that.$tools.msg("请先添加设备!")
setTimeout(function() {
uni.switchTab({
url: "/pages/business/business"
})
}, 500)
that.$Bluetooth.stopBluetoothDevicesDiscovery()
// setTimeout(function() {
// uni.switchTab({
// url: "/pages/business/business"
// })
// }, 500)
}
},
//

View File

@ -96,6 +96,19 @@ export default {
}
})
},
// 公共
getPublicContent({ //报告
commit
}, account) {
return model.getpublicContent(account).then((res) => {
console.log("公共报告", res)
if (res.code == 0) {
commit('changePublicContent', res.data)
} else {
commit('changePublicContent', null)
}
})
},
GetBodyTrendList({ //趋势
commit
@ -105,7 +118,6 @@ export default {
commit('changeTrend', res.data)
})
},
gethistoryList({ // 获取历史记录
commit
}, account) {

View File

@ -31,8 +31,10 @@ export default new Vuex.Store({
MeasureSkip: null,
MeasureResult: null,
MeasureLung: null,
PublicContent: null,
familayList: [],
historyList: [],
PublicRecord: [],
cardList: {
user: [],
all: []
@ -49,6 +51,7 @@ export default new Vuex.Store({
isBluetoothTyle: false,
LungLevel: [], //肺活量标准
devicesList: [], //筛选设备列表
labelList: [],
phoneInfo: {
info: {},
versionUrl: null,
@ -90,6 +93,14 @@ export default new Vuex.Store({
changeMeasureLung(state, newData) {
state.MeasureLung = newData
},
// 公共
changePublicContent(state, newData) {
state.PublicContent = newData
},
// 公共手动记录内容
changePublicRecord(state, newData) {
state.PublicRecord = newData
},
// 信息弹框
changeEdit(state, newData) {
@ -147,7 +158,12 @@ export default new Vuex.Store({
}, //
changedevicesList(state, newData) {
state.devicesList = newData
},
// 公共卡片
changeLabelList(state, newData) {
state.labelList = newData
}
},
// 模块化vuex
modules: {},

View File

@ -1,6 +1,7 @@
import tools from '@/toolJs/tools.js'
import store from '../store'
let baseUrl = "http://tc.pcxbc.com"
// let baseUrl = "http://tc.pcxbc.com"
let baseUrl = "http://tc.pcxbc.com/testedition"
const httpRequest = (url, method = "get", data) => {
data.token = uni.getStorageSync('token')
data.aan_id = uni.getStorageSync('aan_id')

View File

@ -273,4 +273,54 @@ export default {
return res
})
},
// 通用卡片
getPublicRecord(param) { //手动记录内容
return http.post("/obtain_manual_record_content", param).then(res => {
return res
})
},
getpublicmeasure(param) { //手动记录
return http.post("/public_data_save", param).then(res => {
return res
})
},
getpublicContent(param) { //卡片内容详情
return http.post("/get_card_content", param).then(res => {
return res
})
},
getLabelList(param) { //卡片内标签项目信息
return http.post("/get_label_list", param).then(res => {
return res
})
},
getPublicTrendList(param) { //公共曲线
return http.post("/card_motion_curve", param).then(res => {
return res
})
},
getPublicHistory(param) { //公共历史
return http.post("/obtain_history_record", param).then(res => {
return res
})
},
getPublicHistoryDel(param) { //公共历史删除
return http.post("/history_record_del", param).then(res => {
return res
})
},
getPublicResultdiff(param) { //公共对比
return http.post("/data_contrast_obtain_data", param).then(res => {
if (res.code == 0) {
let Dlist = []
for (var i = 0; i < res.data.length; i++) {
if (!Dlist.includes(res.data[i].r_t)) { //includes 检测数组是否有某个值
Dlist.push(res.data[i].r_t);
}
}
res.Dlist = Dlist
}
return res
})
},
}

View File

@ -1,5 +1,5 @@
[appleAppid]
appleAppid=api.zztc.pcxbc
appleAppid=com.pcxbc.tc
[iosStyle]
iosStyle=

View File

@ -1,3 +1,3 @@
iosProfile=C:/Users/gh/WPS Cloud Files/appuploader_win_latest/ios描述文件.mobileprovision
ioscertFile=C:\Users\gh\WPS Cloud Files\appuploader_win_latest\ios开发证书.p12
ioscertPassword=e7l98mrpB0Uj4WWFn9y0Mg==
iosProfile=F:/证书/发布Development描述文件/Reedaw.mobileprovision
ioscertFile=F:/证书/发布Development证书/证书.p12
ioscertPassword=ep/Tdjka4Y7WYqDB6/S7dw==

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
{"@platforms":["android","iPhone","iPad"],"id":"__UNI__20604F1","name":"Reedaw","version":{"name":"1.2.1","code":121},"description":"面向儿童青少年的健康体质测量APP","launch_path":"__uniappview.html","developer":{"name":"","email":"","url":""},"permissions":{"Bluetooth":{},"UniNView":{"description":"UniNView原生渲染"}},"plus":{"useragent":{"value":"uni-app","concatenate":true},"splashscreen":{"target":"id:1","autoclose":true,"waiting":true,"delay":0},"popGesture":"close","launchwebview":{"id":"1","kernel":"WKWebview"},"statusbar":{"immersed":"supportedDevice","style":"light","background":"#37cc92"},"usingComponents":true,"nvueStyleCompiler":"uni-app","compilerVersion":3,"template":"index.html","compattible":{"ignoreVersion":true},"distribute":{"icons":{"android":{"hdpi":"unpackage/res/icons/72x72.png","xhdpi":"unpackage/res/icons/96x96.png","xxhdpi":"unpackage/res/icons/144x144.png","xxxhdpi":"unpackage/res/icons/192x192.png"},"ios":{"appstore":"unpackage/res/icons/1024x1024.png","ipad":{"app":"unpackage/res/icons/76x76.png","app@2x":"unpackage/res/icons/152x152.png","notification":"unpackage/res/icons/20x20.png","notification@2x":"unpackage/res/icons/40x40.png","proapp@2x":"unpackage/res/icons/167x167.png","settings":"unpackage/res/icons/29x29.png","settings@2x":"unpackage/res/icons/58x58.png","spotlight":"unpackage/res/icons/40x40.png","spotlight@2x":"unpackage/res/icons/80x80.png"},"iphone":{"app@2x":"unpackage/res/icons/120x120.png","app@3x":"unpackage/res/icons/180x180.png","notification@2x":"unpackage/res/icons/40x40.png","notification@3x":"unpackage/res/icons/60x60.png","settings@2x":"unpackage/res/icons/58x58.png","settings@3x":"unpackage/res/icons/87x87.png","spotlight@2x":"unpackage/res/icons/80x80.png","spotlight@3x":"unpackage/res/icons/120x120.png"}}},"splashscreen":{"androidStyle":"common","android":{"hdpi":"static/logo.png","xhdpi":"static/logo.png","xxhdpi":"static/logo.png"},"useOriginalMsgbox":true},"google":{"permissions":["<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>","<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>","<uses-permission android:name=\"android.permission.VIBRATE\"/>","<uses-permission android:name=\"android.permission.READ_LOGS\"/>","<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>","<uses-feature android:name=\"android.hardware.camera.autofocus\"/>","<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>","<uses-permission android:name=\"android.permission.CAMERA\"/>","<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>","<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>","<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>","<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>","<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>","<uses-feature android:name=\"android.hardware.camera\"/>","<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"],"abiFilters":["arm64-v8a","x86"]},"apple":{"dSYMs":false,"idfa":false,"privacyDescription":{"NSBluetoothAlwaysUsageDescription":"需要蓝牙权限来连接设备","NSBluetoothPeripheralUsageDescription":"使用蓝牙与外设通信"}},"plugins":{"share":{},"ad":{},"geolocation":{"system":{"__platform__":["ios"]}},"audio":{"mp3":{"description":"Android平台录音支持MP3格式文件"}}}},"uniStatistics":{"enable":false,"version":"2"},"allowsInlineMediaPlayback":true,"safearea":{"background":"#fff","bottom":{"offset":"auto"}},"uni-app":{"compilerVersion":"4.24","control":"uni-v3","nvueCompiler":"uni-app","renderer":"auto","nvue":{"flex-direction":"column"},"nvueLaunchMode":"normal"},"tabBar":{"color":"#333","fontSize":"13px","selectedColor":"#37cc92","backgroundColor":"#fff","list":[{"pagePath":"pages/home/home","iconPath":"static/shou.png","selectedIconPath":"static/shou2.png","text":"首页"},{"pagePath":"pages/score/score","iconPath":"static/ping.png","selectedIconPath":"static/ping2.png","text":"估分"},{"pagePath":"pages/business/business","iconPath":"static/bei.png","selectedIconPath":"static/bei2.png","text":"设备"},{"pagePath":"pages/my/me","iconPath":"static/wo.png","selectedIconPath":"static/wo2.png","text":"我的"}],"borderStyle":"rgba(0,0,0,0.4)","height":"50px","child":["lauchwebview"],"selected":0},"launch_path":"__uniappview.html"},"locale":"zh-Hans"}
{"@platforms":["android","iPhone","iPad"],"id":"__UNI__20604F1","name":"Reedaw","version":{"name":"1.2.2","code":122},"description":"面向儿童青少年的健康体质测量APP","launch_path":"__uniappview.html","developer":{"name":"","email":"","url":""},"permissions":{"Bluetooth":{},"UniNView":{"description":"UniNView原生渲染"}},"plus":{"useragent":{"value":"uni-app","concatenate":true},"splashscreen":{"target":"id:1","autoclose":true,"waiting":true,"delay":0},"popGesture":"close","launchwebview":{"id":"1","kernel":"WKWebview"},"statusbar":{"immersed":"supportedDevice","style":"light","background":"#37cc92"},"usingComponents":true,"nvueStyleCompiler":"uni-app","compilerVersion":3,"template":"index.html","compattible":{"ignoreVersion":true},"distribute":{"icons":{"android":{"hdpi":"unpackage/res/icons/72x72.png","xhdpi":"unpackage/res/icons/96x96.png","xxhdpi":"unpackage/res/icons/144x144.png","xxxhdpi":"unpackage/res/icons/192x192.png"},"ios":{"appstore":"unpackage/res/icons/1024x1024.png","ipad":{"app":"unpackage/res/icons/76x76.png","app@2x":"unpackage/res/icons/152x152.png","notification":"unpackage/res/icons/20x20.png","notification@2x":"unpackage/res/icons/40x40.png","proapp@2x":"unpackage/res/icons/167x167.png","settings":"unpackage/res/icons/29x29.png","settings@2x":"unpackage/res/icons/58x58.png","spotlight":"unpackage/res/icons/40x40.png","spotlight@2x":"unpackage/res/icons/80x80.png"},"iphone":{"app@2x":"unpackage/res/icons/120x120.png","app@3x":"unpackage/res/icons/180x180.png","notification@2x":"unpackage/res/icons/40x40.png","notification@3x":"unpackage/res/icons/60x60.png","settings@2x":"unpackage/res/icons/58x58.png","settings@3x":"unpackage/res/icons/87x87.png","spotlight@2x":"unpackage/res/icons/80x80.png","spotlight@3x":"unpackage/res/icons/120x120.png"}}},"splashscreen":{"androidStyle":"common","android":{"hdpi":"static/logo.png","xhdpi":"static/logo.png","xxhdpi":"static/logo.png"},"useOriginalMsgbox":true},"google":{"permissions":["<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>","<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>","<uses-permission android:name=\"android.permission.VIBRATE\"/>","<uses-permission android:name=\"android.permission.READ_LOGS\"/>","<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>","<uses-feature android:name=\"android.hardware.camera.autofocus\"/>","<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>","<uses-permission android:name=\"android.permission.CAMERA\"/>","<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>","<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>","<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>","<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>","<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>","<uses-feature android:name=\"android.hardware.camera\"/>","<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"],"abiFilters":["arm64-v8a","x86"]},"apple":{"dSYMs":false,"idfa":false,"privacyDescription":{"NSBluetoothAlwaysUsageDescription":"需要蓝牙权限来连接设备","NSBluetoothPeripheralUsageDescription":"使用蓝牙与外设通信"}},"plugins":{"share":{},"ad":{},"geolocation":{"system":{"__platform__":["ios"]}},"audio":{"mp3":{"description":"Android平台录音支持MP3格式文件"}}}},"uniStatistics":{"enable":false,"version":"2"},"allowsInlineMediaPlayback":true,"safearea":{"background":"#fff","bottom":{"offset":"auto"}},"uni-app":{"compilerVersion":"4.24","control":"uni-v3","nvueCompiler":"uni-app","renderer":"auto","nvue":{"flex-direction":"column"},"nvueLaunchMode":"normal"},"tabBar":{"color":"#333","fontSize":"13px","selectedColor":"#37cc92","backgroundColor":"#fff","list":[{"pagePath":"pages/home/home","iconPath":"static/shou.png","selectedIconPath":"static/shou2.png","text":"首页"},{"pagePath":"pages/score/score","iconPath":"static/ping.png","selectedIconPath":"static/ping2.png","text":"估分"},{"pagePath":"pages/business/business","iconPath":"static/bei.png","selectedIconPath":"static/bei2.png","text":"设备"},{"pagePath":"pages/my/me","iconPath":"static/wo.png","selectedIconPath":"static/wo2.png","text":"我的"}],"borderStyle":"rgba(0,0,0,0.4)","height":"50px","child":["lauchwebview"],"selected":0},"launch_path":"__uniappview.html"},"locale":"zh-Hans"}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -1 +1 @@
{"@platforms":["android","iPhone","iPad"],"id":"__UNI__20604F1","name":"Reedaw","version":{"name":"1.2.1","code":121},"description":"面向儿童青少年的健康体质测量APP","launch_path":"__uniappview.html","developer":{"name":"","email":"","url":""},"permissions":{"Bluetooth":{},"UniNView":{"description":"UniNView原生渲染"}},"plus":{"useragent":{"value":"uni-app","concatenate":true},"splashscreen":{"target":"id:1","autoclose":true,"waiting":true,"delay":0},"popGesture":"close","launchwebview":{"id":"1","kernel":"WKWebview"},"statusbar":{"immersed":"supportedDevice","style":"light","background":"#37cc92"},"usingComponents":true,"nvueStyleCompiler":"uni-app","compilerVersion":3,"template":"index.html","compattible":{"ignoreVersion":true},"distribute":{"icons":{"android":{"hdpi":"unpackage/res/icons/72x72.png","xhdpi":"unpackage/res/icons/96x96.png","xxhdpi":"unpackage/res/icons/144x144.png","xxxhdpi":"unpackage/res/icons/192x192.png"},"ios":{"appstore":"unpackage/res/icons/1024x1024.png","ipad":{"app":"unpackage/res/icons/76x76.png","app@2x":"unpackage/res/icons/152x152.png","notification":"unpackage/res/icons/20x20.png","notification@2x":"unpackage/res/icons/40x40.png","proapp@2x":"unpackage/res/icons/167x167.png","settings":"unpackage/res/icons/29x29.png","settings@2x":"unpackage/res/icons/58x58.png","spotlight":"unpackage/res/icons/40x40.png","spotlight@2x":"unpackage/res/icons/80x80.png"},"iphone":{"app@2x":"unpackage/res/icons/120x120.png","app@3x":"unpackage/res/icons/180x180.png","notification@2x":"unpackage/res/icons/40x40.png","notification@3x":"unpackage/res/icons/60x60.png","settings@2x":"unpackage/res/icons/58x58.png","settings@3x":"unpackage/res/icons/87x87.png","spotlight@2x":"unpackage/res/icons/80x80.png","spotlight@3x":"unpackage/res/icons/120x120.png"}}},"splashscreen":{"androidStyle":"common","android":{"hdpi":"static/logo.png","xhdpi":"static/logo.png","xxhdpi":"static/logo.png"},"useOriginalMsgbox":true},"google":{"permissions":["<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>","<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>","<uses-permission android:name=\"android.permission.VIBRATE\"/>","<uses-permission android:name=\"android.permission.READ_LOGS\"/>","<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>","<uses-feature android:name=\"android.hardware.camera.autofocus\"/>","<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>","<uses-permission android:name=\"android.permission.CAMERA\"/>","<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>","<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>","<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>","<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>","<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>","<uses-feature android:name=\"android.hardware.camera\"/>","<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"],"abiFilters":["arm64-v8a","x86"]},"apple":{"dSYMs":false,"idfa":false,"privacyDescription":{"NSBluetoothAlwaysUsageDescription":"需要蓝牙权限来连接设备","NSBluetoothPeripheralUsageDescription":"使用蓝牙与外设通信"}},"plugins":{"share":{},"ad":{},"geolocation":{"system":{"__platform__":["ios"]}},"audio":{"mp3":{"description":"Android平台录音支持MP3格式文件"}}}},"uniStatistics":{"enable":false,"version":"2"},"allowsInlineMediaPlayback":true,"safearea":{"background":"#fff","bottom":{"offset":"auto"}},"uni-app":{"compilerVersion":"4.24","control":"uni-v3","nvueCompiler":"uni-app","renderer":"auto","nvue":{"flex-direction":"column"},"nvueLaunchMode":"normal"},"tabBar":{"color":"#333","fontSize":"13px","selectedColor":"#37cc92","backgroundColor":"#fff","list":[{"pagePath":"pages/home/home","iconPath":"static/shou.png","selectedIconPath":"static/shou2.png","text":"首页"},{"pagePath":"pages/score/score","iconPath":"static/ping.png","selectedIconPath":"static/ping2.png","text":"估分"},{"pagePath":"pages/business/business","iconPath":"static/bei.png","selectedIconPath":"static/bei2.png","text":"设备"},{"pagePath":"pages/my/me","iconPath":"static/wo.png","selectedIconPath":"static/wo2.png","text":"我的"}],"borderStyle":"rgba(0,0,0,0.4)","height":"50px","child":["lauchwebview"],"selected":0},"launch_path":"__uniappview.html"},"locale":"zh-Hans"}
{"@platforms":["android","iPhone","iPad"],"id":"__UNI__20604F1","name":"Reedaw","version":{"name":"1.2.2","code":122},"description":"面向儿童青少年的健康体质测量APP","launch_path":"__uniappview.html","developer":{"name":"","email":"","url":""},"permissions":{"Bluetooth":{},"UniNView":{"description":"UniNView原生渲染"}},"plus":{"useragent":{"value":"uni-app","concatenate":true},"splashscreen":{"target":"id:1","autoclose":true,"waiting":true,"delay":0},"popGesture":"close","launchwebview":{"id":"1","kernel":"WKWebview"},"statusbar":{"immersed":"supportedDevice","style":"light","background":"#37cc92"},"usingComponents":true,"nvueStyleCompiler":"uni-app","compilerVersion":3,"template":"index.html","compattible":{"ignoreVersion":true},"distribute":{"icons":{"android":{"hdpi":"unpackage/res/icons/72x72.png","xhdpi":"unpackage/res/icons/96x96.png","xxhdpi":"unpackage/res/icons/144x144.png","xxxhdpi":"unpackage/res/icons/192x192.png"},"ios":{"appstore":"unpackage/res/icons/1024x1024.png","ipad":{"app":"unpackage/res/icons/76x76.png","app@2x":"unpackage/res/icons/152x152.png","notification":"unpackage/res/icons/20x20.png","notification@2x":"unpackage/res/icons/40x40.png","proapp@2x":"unpackage/res/icons/167x167.png","settings":"unpackage/res/icons/29x29.png","settings@2x":"unpackage/res/icons/58x58.png","spotlight":"unpackage/res/icons/40x40.png","spotlight@2x":"unpackage/res/icons/80x80.png"},"iphone":{"app@2x":"unpackage/res/icons/120x120.png","app@3x":"unpackage/res/icons/180x180.png","notification@2x":"unpackage/res/icons/40x40.png","notification@3x":"unpackage/res/icons/60x60.png","settings@2x":"unpackage/res/icons/58x58.png","settings@3x":"unpackage/res/icons/87x87.png","spotlight@2x":"unpackage/res/icons/80x80.png","spotlight@3x":"unpackage/res/icons/120x120.png"}}},"splashscreen":{"androidStyle":"common","android":{"hdpi":"static/logo.png","xhdpi":"static/logo.png","xxhdpi":"static/logo.png"},"useOriginalMsgbox":true},"google":{"permissions":["<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>","<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>","<uses-permission android:name=\"android.permission.VIBRATE\"/>","<uses-permission android:name=\"android.permission.READ_LOGS\"/>","<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>","<uses-feature android:name=\"android.hardware.camera.autofocus\"/>","<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>","<uses-permission android:name=\"android.permission.CAMERA\"/>","<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>","<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>","<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>","<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>","<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>","<uses-feature android:name=\"android.hardware.camera\"/>","<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"],"abiFilters":["arm64-v8a","x86"]},"apple":{"dSYMs":false,"idfa":false,"privacyDescription":{"NSBluetoothAlwaysUsageDescription":"需要蓝牙权限来连接设备","NSBluetoothPeripheralUsageDescription":"使用蓝牙与外设通信"}},"plugins":{"share":{},"ad":{},"geolocation":{"system":{"__platform__":["ios"]}},"audio":{"mp3":{"description":"Android平台录音支持MP3格式文件"}}}},"uniStatistics":{"enable":false,"version":"2"},"allowsInlineMediaPlayback":true,"safearea":{"background":"#fff","bottom":{"offset":"auto"}},"uni-app":{"compilerVersion":"4.24","control":"uni-v3","nvueCompiler":"uni-app","renderer":"auto","nvue":{"flex-direction":"column"},"nvueLaunchMode":"normal"},"tabBar":{"color":"#333","fontSize":"13px","selectedColor":"#37cc92","backgroundColor":"#fff","list":[{"pagePath":"pages/home/home","iconPath":"static/shou.png","selectedIconPath":"static/shou2.png","text":"首页"},{"pagePath":"pages/score/score","iconPath":"static/ping.png","selectedIconPath":"static/ping2.png","text":"估分"},{"pagePath":"pages/business/business","iconPath":"static/bei.png","selectedIconPath":"static/bei2.png","text":"设备"},{"pagePath":"pages/my/me","iconPath":"static/wo.png","selectedIconPath":"static/wo2.png","text":"我的"}],"borderStyle":"rgba(0,0,0,0.4)","height":"50px","child":["lauchwebview"],"selected":0},"launch_path":"__uniappview.html"},"locale":"zh-Hans"}