Commit 4642b6e4 authored by 李智书's avatar 李智书

Merge branch 'develop' into uat

parents b4b91278 a836e44d
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -4,7 +4,10 @@
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<link rel="shortcut icon" type="image/x-icon" href="./faceico.ico"/>
<meta http-equiv="pragram" content="no-cache">
<meta http-equiv="cache-control" content="no-cache, must-revalidate">
<meta http-equiv="expires" content="0">
<link rel="shortcut icon" type="image/x-icon" href="./static/faceico.ico"/>
<title>
<%= htmlWebpackPlugin.options.title %>
</title>
......
......@@ -8,6 +8,11 @@
},
onHide: function() {
console.log('App Hide')
},
onPageNotFound: function(res) {
uni.redirectTo({
url: "/pages/NotFound/NotFound"
})
}
}
</script>
......
......@@ -374,7 +374,7 @@
"enablePullDownRefresh": false
}
},{
}, {
"path": "pages/TemperatureRecords/TemperatureStatistics/TemperatureStatistics",
"style": {
"navigationBarTitleText": "体温记录",
......@@ -382,7 +382,7 @@
"enablePullDownRefresh": false
}
},{
}, {
"path": "pages/TemperatureRecords/HighTemperature/HighTemperature",
"style": {
"navigationBarTitleText": "高温",
......@@ -390,7 +390,7 @@
"enablePullDownRefresh": false
}
},{
}, {
"path": "pages/TemperatureRecords/LowTemperature/LowTemperature",
"style": {
"navigationBarTitleText": "低温",
......@@ -398,7 +398,7 @@
"enablePullDownRefresh": false
}
},{
}, {
"path": "pages/TemperatureRecords/NormalTemperatrue/NormalTemperatrue",
"style": {
"navigationBarTitleText": "正常",
......@@ -406,7 +406,7 @@
"enablePullDownRefresh": false
}
},{
}, {
"path": "pages/TemperatureRecords/Undetected/Undetected",
"style": {
"navigationBarTitleText": "未测量",
......@@ -414,7 +414,7 @@
"enablePullDownRefresh": false
}
},{
}, {
"path": "pages/SchoolReport/SchoolReport",
"style": {
"navigationBarTitleText": "校园报告",
......@@ -424,6 +424,15 @@
}
, {
"path": "pages/NotFound/NotFound",
"style": {
"navigationBarTitleText": "抱歉!没有找到您想要的资源",
"navigationStyle": "custom",
"enablePullDownRefresh": false
}
}
],
"globalStyle": {
"navigationBarTextStyle": "black",
......
......@@ -571,14 +571,27 @@ export default {
},
// 代扣状态查询
async signStatusQuery() {
let respes = await this.$http.post({
// url: "http://159.75.47.27:8091/bank-wechat/bohai/comprehensive/signStatusQuery",
url: orderApi + "/bank-wechat/bohai/comprehensive/signStatusQuery",
let loading = Toast.loading({
message: "加载中...",
forbidClick: true,
loadingType: "spinner",
duration: 0,
});
$.ajax({
url: gHost + "/bank-wechat/bohai/comprehensive/signStatusQuery",
type: "POST",
contentType: "application/x-www-form-urlencoded",
data: {
schoolId: bankInfo.schoolId, //学校id
userId: userID, //用户id
sessionid: sessionID,
wechattype: 1
},
});
headers: {
sessionid: sessionID,
},
success: function (respes) {
loading.clear();
if (respes.code == "10000") {
console.log(respes, "respes");
if (respes.results.dkstatus != 1) {
......@@ -607,6 +620,13 @@ export default {
throw new Error("代扣状态查询,请重试!");
}
},
error: function (err) {
loading.clear();
Toast(err || "代扣状态查询,请重试!");
throw new Error("代扣状态查询,请重试!");
},
});
},
// 充值验证获取验证码
async SendSms() {
if (MyTimer) {
......
<template>
<view class="noData hideToShow" :style="{ backgroundColor: bgColor }">
<view class="image">
<image :src="noDataImg"></image>
</view>
<!-- 网络连接失败默认显示内容 -->
<view class="content">
<text class="title" :style="{ color: mainColor }">不存在的内容</text>
<text class="desc" :style="{ color: viceColor }">没有找到您想要的东西</text>
</view>
<!-- 自定义内容 -->
<slot />
</view>
</template>
<script>
export default {
name: "NotFound",
props: {
isShow: {
type: Boolean,
default: false
},
/* 背景颜色自定义 */
bgColor: {
type: String,
default: '#ffffff'
},
/* 标题颜色自定义 */
mainColor: {
type: String,
default: '#373a40'
},
/* 描述颜色自定义 */
viceColor: {
type: String,
default: '#8b8b8b'
},
// 是否开启自定义
custom: {
type: false,
default: false
}
},
data() {
return {
type: '',
netType: "",
mainText: '网络居然崩溃了',
viceText: '别紧张,去检测一下网络设置',
netWorkImg: '/static/images/noNetWork.png',
noDataImg: '/static/images/notFound.png'
}
},
methods: {
}
}
</script>
<style lang="scss" scoped>
.noData {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
padding-top: 400rpx;
.image {
width: 187upx;
height: 144upx;
image {
width: 100%;
height: 100%;
}
}
.content {
width: 100%;
display: flex;
align-items: center;
flex-direction: column;
justify-content: center;
letter-spacing: 1upx;
.title {
font-size: 36upx;
}
.desc {
font-size: 28upx;
margin-top: 6upx;
}
.btn {
width: 160upx;
height: 65upx;
color: #868d91;
font-size: 24upx;
margin-top: 34upx;
border-radius: 36upx;
border: 1upx solid #d4d4d4;
}
.btn::after {
border: none;
}
}
}
</style>
<template>
<view class="tainer" :style="{height:containerHeight+'rpx'}">
<view>
<view v-if="showReport">
<view class="school-report-header">
<view class="school-report-header-item">
<view class="user-avatar">
......@@ -41,15 +41,18 @@
<view class="school-report-context">
<view class="school-report-context-tab">
<view class="school-report-context-tab-item">
<view class="school-report-context-tab-item-one active">
<view class="school-report-context-tab-item-one" :class="tabIndex==1?'active':''"
@tap="tabTap(1)">
<text>消费报告</text>
</view>
<!-- <view class="school-report-context-tab-item-one">
<text>门禁报告</text>
<view v-if="isAttendanceOpen" class="school-report-context-tab-item-one"
:class="tabIndex==2?'active':''" @tap="tabTap(2)">
<text>出入校报告</text>
</view>
<view class="school-report-context-tab-item-one">
<view v-if="isPubTalkOpen" class="school-report-context-tab-item-one"
:class="tabIndex==3?'active':''" @tap="tabTap(3)">
<text>公话报告</text>
</view> -->
</view>
</view>
<view class="school-report-context-tab-item-two">
<view class="share-button" @tap="shareHandler">
......@@ -61,13 +64,14 @@
</view>
</view>
</view>
<view class="school-report-context-bgImg">
<view :class="['consumer-report-bgImg','attendance-report-bgImg','pubTalk-report-bgImg'][tabIndex-1]">
</view>
<view class="school-report-context-card">
<view class="school-report-context-card-one">
<view class="school-report-context-card-one-img">
<view class="school-report-context-card-one" :style="{height:[598,256,525][tabIndex-1]+'rpx'}">
<view :class="['consumer-report-img','attendance-report-img','pubTalk-report-img'][tabIndex-1]">
</view>
<view class="school-report-context-card-one-context">
<!-- 消费报告 -->
<view v-show="tabIndex==1" class="school-report-context-card-one-context">
<view class="school-report-context-card-one-context-item">
<view class="school-report-context-card-one-context-dot">
<view class="school-report-context-card-one-context-dot-item">
......@@ -88,7 +92,7 @@
</view>
</view>
<view class="school-report-context-card-one-context-txt">
<text v-if="isEatLow">食堂消费占比<text
<text v-if="isEatLow">正餐消费占比<text
class="txt-important-two">过低</text>,请及时调整饮食习惯</text>
<text v-else>饮食较<text class="txt-important-two">均衡</text>,继续保持哦</text>
</view>
......@@ -99,7 +103,7 @@
</view>
</view>
<view class="school-report-context-card-one-context-txt">
消费总额 <text class="txt-important">{{consumerAmountObj.consumerAmount}}</text>元,超过全校
消费 <text class="txt-important">{{consumerAmountObj.consumerAmount}}</text>元,超过全校
<text class="txt-important">{{consumerAmountObj.exceedRate}}%</text>
的同学<text v-if="isReasonable">,请及时评估生活费是否合理</text>
</view>
......@@ -117,9 +121,66 @@
</view>
</view>
</view>
<!-- 出入校报告 -->
<view v-show="tabIndex==2" class="attendance-report-context-card-one-context">
<view class="attendance-report-context-card-one-context-item">
<text v-if="attendanceReport.abnormalNum&&attendanceReport.abnormalNum!=-1"><text
class="txt-important">{{attendanceReport.abnormalNum}}</text>天出勤异常,请及时关注</text>
<text v-else-if="attendanceReport.abnormalNum==-1">风雨无阻上学路,继续加油哦</text>
<text v-else>恭喜<text
class="txt-important">{{userInfo.userName}}</text>荣获全勤好学生,风雨无阻上学路</text>
</view>
</view>
<view class="school-report-context-card-two">
<!-- 公话报告 -->
<view v-show="tabIndex==3" class="pubTalk-report-context-card-one-context">
<view class="pubTalk-report-context-card-one-context-item" v-if="pubTalkReport.talkText1">
<view class="pubTalk-report-context-card-one-context-dot">
<view class="pubTalk-report-context-card-one-context-dot-item">
</view>
</view>
<view class="pubTalk-report-context-card-one-context-txt">
<text>最喜欢和<text class="txt-important">{{pubTalkReport.talkText1}}</text>沟通,共通话<text
class="txt-important">{{pubTalkReport.talkText2}}{{pubTalkReport.talkText3}}分钟</text>,超过全校<text
class="txt-important">{{pubTalkReport.talkText4}}</text>的同学</text>
</view>
</view>
<view class="pubTalk-report-context-card-one-context-item" v-else>
<view class="pubTalk-report-context-card-one-context-dot">
<view class="pubTalk-report-context-card-one-context-dot-item">
</view>
</view>
<view class="pubTalk-report-context-card-one-context-txt">
<text class="txt-important">有事没事记得和家人多联系哦~</text>
</view>
</view>
<view class="pubTalk-report-context-card-one-context-item" v-if="pubTalkReport.talkText5">
<view class="pubTalk-report-context-card-one-context-dot">
<view class="pubTalk-report-context-card-one-context-dot-item">
</view>
</view>
<view class="pubTalk-report-context-card-one-context-txt">
<text><text class="txt-important">{{pubTalkReport.talkText5}}</text>沟通最少,共通话<text
class="txt-important">{{pubTalkReport.talkText6}}{{pubTalkReport.talkText7}}分钟</text>,超过全校<text
class="txt-important">{{pubTalkReport.talkText8}}</text>的同学</text>
</view>
</view>
<view
class="pubTalk-report-context-card-one-context-item pubTalk-report-context-card-one-context-item-last"
v-if="pubTalkReport.talkText9">
<view class="pubTalk-report-context-card-one-context-dot">
<view class="pubTalk-report-context-card-one-context-dot-item">
</view>
</view>
<view class="pubTalk-report-context-card-one-context-txt">
<text><text
class="txt-important">{{pubTalkReport.talkText9}}</text>是默默的守护,有时也不要忘记多和<text
class="txt-important">{{pubTalkReport.talkText9}}</text>进行交流</text>
</view>
</view>
</view>
</view>
<!-- 消费报告 -->
<view v-show="tabIndex==1" class="school-report-context-card-two">
<view class="school-report-context-card-title">
<view class="school-report-context-card-title-img">
<text>就餐情况</text>
......@@ -128,7 +189,7 @@
<view class="school-report-context-card-two-conclusion">
<view class="school-report-context-card-two-conclusion-txt">
<text>{{['',''][reportTypeIndex]}}<text
class="abnormal-days">{{diningSituations.notRepastDay}}</text>就餐异常</text>
class="abnormal-days">{{diningSituations.notRepastDay}}</text>未就餐</text>
</view>
<view class="school-report-context-card-two-conclusion-logo">
<view class="school-report-context-card-two-conclusion-logo-item">
......@@ -142,10 +203,10 @@
</view>
</view>
<view class="school-report-context-card-two-calendar">
<van-calendar :formatter="formatter" :min-date="minDate" :max-date="maxDate"
:default-date="minDate" :show-title="false" :show-subtitle="false" :show-mark="false"
:poppable="false" :show-confirm="false" :style="{ height: '575rpx' }"
@select="dateSelect" />
<van-calendar v-show="tabIndex==1" :formatter="formatter" :min-date="minDate"
:max-date="maxDate" :default-date="minDate" :row-height="44" :show-title="false"
:show-subtitle="false" :show-mark="false" :poppable="false" :show-confirm="false"
:style="{ height: '575rpx' }" @select="dateSelect" />
</view>
<view class="school-report-context-card-two-details">
<view class="school-report-context-card-two-details-item">
......@@ -157,11 +218,12 @@
<text>早餐</text>
</view>
<view class="school-report-context-card-two-details-meal-logo">
<view v-if="diningSituations.notRepastDetails.breakfastStatus"
<view v-if="diningSituations.notRepastDetails.breakfastStatus==1"
class="school-report-context-card-two-details-meal-img">
<image src="../../static/images/eatted.png" mode=""></image>
</view>
<view v-else class="school-report-context-card-two-details-meal-noeat">
<view v-else-if="diningSituations.notRepastDetails.breakfastStatus==0"
class="school-report-context-card-two-details-meal-noeat">
<text></text>
</view>
</view>
......@@ -170,11 +232,12 @@
</view>
<view
class="school-report-context-card-two-details-meal-logo school-report-context-card-two-details-meal-logo-two">
<view v-if="diningSituations.notRepastDetails.lunchStatus"
<view v-if="diningSituations.notRepastDetails.lunchStatus==1"
class="school-report-context-card-two-details-meal-img">
<image src="../../static/images/eatted.png" mode=""></image>
</view>
<view v-else class="school-report-context-card-two-details-meal-noeat">
<view v-else-if="diningSituations.notRepastDetails.lunchStatus==0"
class="school-report-context-card-two-details-meal-noeat">
<text></text>
</view>
</view>
......@@ -183,11 +246,12 @@
</view>
<view
class="school-report-context-card-two-details-meal-logo school-report-context-card-two-details-meal-logo-three">
<view v-if="diningSituations.notRepastDetails.supperStatus"
<view v-if="diningSituations.notRepastDetails.supperStatus==1"
class="school-report-context-card-two-details-meal-img">
<image src="../../static/images/eatted.png" mode=""></image>
</view>
<view v-else class="school-report-context-card-two-details-meal-noeat">
<view v-else-if="diningSituations.notRepastDetails.supperStatus==0"
class="school-report-context-card-two-details-meal-noeat">
<text></text>
</view>
</view>
......@@ -195,7 +259,7 @@
</view>
</view>
</view>
<view v-if="isOpen" class="school-report-context-card-three">
<view v-if="tabIndex==1&&isOpen" class="school-report-context-card-three">
<view class="school-report-context-card-title">
<view class="school-report-context-card-title-img">
<text>消费偏好</text>
......@@ -203,7 +267,7 @@
</view>
<view class="school-report-context-card-three-conclusion">
<view class="school-report-context-card-three-conclusion-item">
<text v-if="isEatLow">食堂消费占比<text
<text v-if="isEatLow">正餐消费占比<text
class="school-report-context-card-three-conclusion-item-describe">过低</text>,请及时调整饮食习惯</text>
<text v-else>饮食较<text
class="school-report-context-card-three-conclusion-item-describe">均衡</text>,继续保持哦</text>
......@@ -212,15 +276,15 @@
<view id="consumer-preferences-pie">
</view>
</view>
<view v-if="isOpen" class="school-report-context-card-four">
<view v-if="tabIndex==1&&isOpen" class="school-report-context-card-four">
<view class="school-report-context-card-title">
<view class="school-report-context-card-title-img">
<text>消费总额</text>
<text>生活费额度</text>
</view>
</view>
<view class="school-report-context-card-four-conclusion">
<view class="school-report-context-card-four-conclusion-item">
<text>消费总额<text
<text>消费<text
class="consume-total">{{consumerAmountObj.consumerAmount}}</text>元,超过全校<text
class="consume-total">{{consumerAmountObj.exceedRate}}%</text>的同学<text
v-if="isReasonable">,请及时评估生活费是否合理</text></text>
......@@ -253,7 +317,7 @@
</view>
</view>
</view>
<view v-if="isOpen" class="school-report-context-card-five">
<view v-if="tabIndex==1&&isOpen" class="school-report-context-card-five">
<view class="school-report-context-card-title">
<view class="school-report-context-card-title-img">
<text>消费趋势</text>
......@@ -284,7 +348,195 @@
</view>
</view>
</view>
<view v-if="isOpen" class="school-report-footer">
<!-- 出入校报告 -->
<view v-show="tabIndex==2" class="attendance-report-context-card-two">
<view class="school-report-context-card-title">
<view class="school-report-context-card-title-img">
<text>出勤情况</text>
</view>
</view>
<view class="attendance-report-context-card-two-conclusion">
<view class="attendance-report-context-card-two-conclusion-txt">
<text v-if="attendanceReport.abnormalNum!=-1">{{['',''][reportTypeIndex]}}<text
class="abnormal-days">{{attendanceReport.abnormalNum}}</text>天出勤异常</text>
</view>
<view class="attendance-report-context-card-two-conclusion-logo">
<view class="attendance-report-context-card-two-conclusion-logo-item">
<view class="attendance-report-context-card-two-conclusion-logo-item-dot leave">
</view>
<view class="attendance-report-context-card-two-conclusion-logo-item-txt">
<text>请假</text>
</view>
</view>
<view class="attendance-report-context-card-two-conclusion-logo-item">
<view class="attendance-report-context-card-two-conclusion-logo-item-dot">
</view>
<view class="attendance-report-context-card-two-conclusion-logo-item-txt">
<text>异常</text>
</view>
</view>
</view>
</view>
<view class="attendance-report-context-card-two-calendar">
<van-calendar v-show="tabIndex==2" :formatter="formatter" :min-date="minDate"
:max-date="maxDate" :default-date="minDate" :row-height="44" :show-title="false"
:show-subtitle="false" :show-mark="false" :poppable="false" :show-confirm="false"
:style="{ height: '575rpx' }" @select="attendanceDateSelect">
<template #top-info="item">
<span v-if="item.topInfo=='请假'" class="mark-green">请假</span>
<span v-if="item.topInfo=='迟到'" class="mark-orange">迟到</span>
<span v-if="item.topInfo=='旷课'" class="mark-orange">旷课</span>
<span v-if="item.topInfo=='早退'" class="mark-orange">早退</span>
<span v-if="item.topInfo=='冠军'" class="mark-yellow">冠军</span>
</template>
</van-calendar>
</view>
</view>
<view v-if="tabIndex==2&&attendanceReportDatail.length" class="attendance-report-context-details">
<view v-for="(detailItem,detailIndex) in attendanceReportDatail" :key="detailIndex">
<view v-if="detailItem.attendIntervalType&&detailItem.attendIntervalType!=-1"
class="attendance-report-context-card-two-details">
<view class="attendance-report-context-card-two-details-item">
<view class="attendance-report-context-card-two-details-time">
<view class="attendance-report-context-card-two-details-time-img">
</view>
<view class="attendance-report-context-card-two-details-time-txt txt-details">
<text>考勤时间</text>
</view>
<view class="attendance-report-context-card-two-details-time-txt">
<text>{{detailItem.attendIntervalName}}</text>
</view>
</view>
<view v-if="detailIndex==0" class="attendance-report-context-card-two-details-date">
<text>{{attendanceSituations.attendanceDate}}</text>
</view>
</view>
</view>
<view v-else-if="detailItem.attendIntervalType==-1"
class="attendance-report-context-card-two-details">
<view class="attendance-report-context-card-two-details-item">
<view class="attendance-report-context-card-two-details-time">
<view class="attendance-report-context-card-two-details-time-txt txt-details">
<text>未设置考勤时间</text>
</view>
</view>
<view class="attendance-report-context-card-two-details-date">
<text>{{attendanceSituations.attendanceDate}}</text>
</view>
</view>
</view>
<view class="attendance-report-context-card-three">
<view v-for="(item,index) in detailItem.attendDetailReportDTOList" :key="index">
<view class="attendance-report-details">
<view class="dashed-line-box">
<view v-if="index" class="dashed-line">
</view>
<view v-else class="dashed-line-first">
</view>
<view v-if="index" class="attendance-report-dot"
:style="{border:item.border}">
</view>
<view v-else class="attendance-report-dot-first"
:style="{border:item.border}">
</view>
</view>
<view class="attendance-report-details-item-box"
:style="{top: 18+index*170+'rpx'}">
<view class="attendance-report-details-item">
<view class="attendance-report-time">
<view class="attendance-report-time-txt">
<text>{{item.iotTypeName}}</text>
</view>
<view class="attendance-report-time-item">
<text>{{item.timeContent}}</text>
</view>
<view v-if="item.describeContent=='当日早到冠军'" class="early-champions">
<view class="early-champions-img">
</view>
<view class="early-champions-txt">
<text>早到冠军</text>
</view>
</view>
</view>
</view>
<view class="attendance-report-details-img-item">
<view class="attendance-report-time-details">
<view v-if="item.describeContent!='当日早到冠军'"
class="attendance-report-time-details-item">
<text>{{item.describeContent}}</text>
</view>
<view class="attendance-report-time-details-icon">
</view>
</view>
<view class="attendance-report-details-img-box">
<image v-if="item.attendImage" :src="item.attendImage" mode=""
@click="imageClick(item.attendImage)">
</image>
</view>
</view>
</view>
</view>
</view>
</view>
</view>
</view>
<van-dialog v-model="imageDialogShow" width="620rpx">
<view class="image-dialog">
<image :src="imageDialogSrc" mode=""></image>
</view>
</van-dialog>
<!-- 公话报告 -->
<view v-show="tabIndex==3" class="pubTalk-report-context-card-two">
<view class="school-report-context-card-title">
<view class="school-report-context-card-title-img">
<text>通话次数</text>
</view>
</view>
<view class="call-number-bar-unit">
<text>(次)</text>
</view>
<view id="call-number-bar">
</view>
</view>
<view v-show="tabIndex==3&&isPubTalkOpen" class="pubTalk-report-context-card-three">
<view class="school-report-context-card-title">
<view class="school-report-context-card-title-img">
<text>通话时长</text>
</view>
</view>
<view class="call-duration-bar-unit">
<text>(min)</text>
</view>
<view id="call-duration-bar">
</view>
</view>
<view v-show="tabIndex==3&&isPubTalkOpen" class="pubTalk-report-context-card-four">
<view class="school-report-context-card-title">
<view class="school-report-context-card-title-img">
<text>亲子留言</text>
</view>
</view>
<view class="leave-message-summary" v-if="pubTalkReport.messageText1">
<text><text class="txt-important">{{pubTalkReport.messageText1}}</text> 最喜欢和你留言,共 <text
class="txt-important">{{pubTalkReport.messageText2}}</text> 次,超过全校<text
class="txt-important">{{pubTalkReport.messageText3}}</text>的同学</text>
</view>
<view class="leave-message-summary" v-else>
<text class="txt-important">想家人了可以多多留言哦~</text>
</view>
<view class="leave-message-summary leave-message-less-summary"
v-if="pubTalkReport.messageText4">
<text><text class="txt-important">{{pubTalkReport.messageText4}}</text> 留言最少,共 <text
class="txt-important">{{pubTalkReport.messageText5}}</text> 次,超过全校<text
class="txt-important">{{pubTalkReport.messageText6}}</text>的同学</text>
</view>
<view class="leave-message-bar-unit">
<text>(次)</text>
</view>
<view id="leave-message-bar">
</view>
</view>
<view v-if="isOpen||isPubTalkOpen||isAttendanceOpen" class="school-report-footer">
<view class="school-report-footer-item">
<view class="school-report-footer-item-txt">
<text>到期后将无法查看完整报告</text>
......@@ -302,10 +554,11 @@
</view>
</view>
</view>
<view v-if="!isOpen" class="no-open">
<view v-if="flag==tabIndex" class="no-open"
:style="{height:[915,845,891][tabIndex-1]+'rpx',top:[1425,1099,1260][tabIndex-1]+'rpx'}">
<view class="no-open-solution" @tap="equityPay">
<view class="no-open-solution-txt">
<text>最低 {{memberInfo.leastAmount}}元/天开通,查看完整消费报告</text>
<text>最低{{memberInfo.leastAmount||''}}元/天开通,查看完整{{['消费','出入校','公话'][tabIndex-1]}}报告</text>
</view>
<view class="no-open-solution-item">
</view>
......@@ -317,16 +570,19 @@
<view class="open-results-items">
<view class="open-results-items-summary">
<view class="summary-item">
<text>月度消费报告</text>
<text>{{['月度消费报告','实时推送','音视频通话'][tabIndex-1]}}</text>
</view>
<view class="summary-item-icon">
<view class="summary-item-icon"
:class="['consumer-report-icon','attendance-report-icon','pubTalk-report-icon'][tabIndex-1]">
<text>+</text>
</view>
<view class="summary-item">
<text>消费总结</text>
<text>{{['消费总结','月度出入校报告','月度公话报告'][tabIndex-1]}}</text>
</view>
</view>
<view class="open-results-items-details">
<!-- 消费报告 -->
<view v-if="tabIndex==1">
<view class="open-results-items-details-item">
<view class="dining-situations-img">
</view>
......@@ -355,7 +611,7 @@
<view class="consumer-num-img">
</view>
<view class="open-results-items-details-item-txt">
<text>消费总额分析</text>
<text>生活费额度分析</text>
</view>
</view>
<view class="open-results-items-details-item">
......@@ -366,17 +622,107 @@
</view>
</view>
</view>
<!-- 出入校报告 -->
<view v-else-if="tabIndex==2">
<view class="open-results-items-details-item">
<view class="admission-notice-img">
</view>
<view class="open-results-items-details-item-txt">
<text>出入校通知</text>
</view>
<view class="admission-analysis-img">
</view>
<view class="open-results-items-details-item-txt">
<text>出勤情况分析</text>
</view>
</view>
<view class="open-results-items-details-item">
<view class="admission-record-img">
</view>
<view class="open-results-items-details-item-txt">
<text>出入校记录</text>
</view>
</view>
<view class="open-results-items-details-item">
<view class="admission-image-img">
</view>
<view class="open-results-items-details-item-txt">
<text>出入校图片</text>
</view>
</view>
</view>
<!-- 公话报告 -->
<view v-else>
<view class="open-results-items-details-item">
<view class="video-call-img">
</view>
<view class="open-results-items-details-item-txt">
<text>视频通话</text>
</view>
<view class="communication-advice-img">
</view>
<view class="open-results-items-details-item-txt">
<text>家庭沟通建议</text>
</view>
</view>
<view class="open-results-items-details-item">
<view class="voice-call-img">
</view>
<view class="open-results-items-details-item-txt">
<text>语音通话</text>
</view>
<view class="call-count-img">
</view>
<view class="open-results-items-details-item-txt">
<text>通话次数分析</text>
</view>
</view>
<view class="open-results-items-details-item">
<view class="leave-word-img">
</view>
<view class="open-results-items-details-item-txt">
<text>亲子留言</text>
</view>
<view class="call-duration-img">
</view>
<view class="open-results-items-details-item-txt">
<text>通话时长分析</text>
</view>
</view>
<view class="open-results-items-details-item">
<view class="face-call-img">
</view>
<view class="open-results-items-details-item-txt">
<text>刷脸通话</text>
</view>
<view class="leave-word-analysis-img">
</view>
<view class="open-results-items-details-item-txt">
<text>家庭留言分析</text>
</view>
</view>
</view>
</view>
</view>
</view>
</view>
</view>
<van-dialog class="htmlCanvas" id="htmlCanvas" ref="imgCanvas" v-model="dialogShow" show-cancel-button
style="width: 100%; max-height: 80% !important;overflow: scroll">
<view v-else class="nodata">
<view class="nodataImg">
<img style="width: 100%"
src="https://xiaopay2020.oss-cn-shenzhen.aliyuncs.com/static/weapp/images/purchaseChart.gif" />
</view>
<view class="nodataTxt">
<text>当前为使用高峰期,请稍后再试</text>
</view>
</view>
<van-dialog class="htmlCanvas" id="htmlCanvas" ref="imgCanvas" v-model="dialogShow" confirm-button-text='长按保存'
close-on-click-overlay style="width: 100%; max-height: 80% !important;overflow: scroll">
</van-dialog>
</view>
</view>
</template>
<script>
import html2cancas from "html2canvas"
var gHost = "https://" + window.location.host;
......@@ -398,10 +744,13 @@
}
// 时间处理模块
import dayjs from 'dayjs'
import moment from "moment";
export default {
name: 'SchoolReport',
data() {
return {
showReport: true,
nodataImgUrl: this.$ImgUrl,
userInfo: {},
reportTypeIndex: 0,
reportTypeArr: ['月报', '周报'],
......@@ -416,6 +765,7 @@
maxDate: new Date(),
imgUrl: '', // 存储base64图片
dialogShow: false,
tabIndex: 1,
// 就餐情况
diningSituations: {
diningSituationsDate: '',
......@@ -430,7 +780,7 @@
// 消费偏好
pieDatas: [],
isEatLow: false,
// 消费总额
// 生活费额度
consumerAmountObj: {},
isReasonable: false,
schoolAverageHeight: '',
......@@ -439,8 +789,36 @@
consumerTrend: {},
isAbnormal: false,
lineDatas: [],
// 出入校报告数据
attendanceSituations: {
attendanceDate: '',
abnomalDateList: [],
},
imageDialogShow: false,
imageDialogSrc: '',
// 公话报告数据
pubTalkReport: {
// 通话次数
callNumberInfoList: [],
// 通话时长
callDurationInfoList: [],
// 亲子留言
leaveMessageInfoList: []
},
// 出入校报告数据
attendanceReport: {
abnormalNum: 0,
abnomalDateList: [],
},
attendanceReportDatail: [],
// 会员信息
// 消费
isOpen: false,
// 出入校
isAttendanceOpen: false,
// 公话
isPubTalkOpen: false,
flag: 0,
memberInfo: {
leastAmount: '',
invalidDateStr: '',
......@@ -450,56 +828,60 @@
}
},
mounted() {
this.queryIsDredgeMember().then(() => {
if (this.isPeakPeriod()) {
this.showReport = false;
return
}
this.showReport = true;
if (new Date().getTime() <= new Date('2022/06/30').getTime()) {
this.isAttendanceOpen = true;
this.isPubTalkOpen = true;
} else {
this.queryIsDredgeMember(2002);
this.queryIsDredgeMember(3002);
}
// 消费报告
this.queryIsDredgeMember(1002).then(() => {
if (this.isOpen) {
this.queryMemberValidTime().then(e => {
this.queryMemberValidTime(1002).then(e => {
if (new Date(this.memberInfo.invalidDate).getTime() <= new Date('2022/06/30')
.getTime()) {
this.isOpen = true;
this.flag = 0;
this.memberInfo.invalidDateStr = '2022年6月30日';
this.memberInfo.differDay = dayjs('2022/06/30').diff(dayjs(), 'day');
this.containerHeight = 4200;
this.queryStudentConsumerPreference(1).then(e => this.piechart());
this.queryDayConsumerTrend(1).then(e => this.linechart(this.reportTypeIndex));
} else {
this.queryIsDredgeMember(1).then(() => {
if (this.isOpen) {
this.queryIsDredgeMember(1002, 1).then(() => {
this.queryStudentConsumerPreference(1).then(e => this
.piechart());
this.queryDayConsumerTrend(1).then(e => this.linechart(this
.reportTypeIndex));
} else {
this.queryStudentConsumerPreference();
this.queryDayConsumerTrend();
}
});
}
})
} else {
if (new Date().getTime() <= new Date('2022/06/30').getTime()) {
this.isOpen = true;
this.flag = 0;
this.memberInfo.invalidDateStr = '2022年6月30日';
this.memberInfo.differDay = dayjs('2022/06/30').diff(dayjs(), 'day');
this.containerHeight = 4200;
this.queryStudentConsumerPreference(1).then(e => this.piechart());
this.queryDayConsumerTrend(1).then(e => this.linechart(this.reportTypeIndex));
} else {
this.queryIsDredgeMember(1).then(() => {
if (this.isOpen) {
this.queryStudentConsumerPreference(1).then(e => this.piechart());
this.queryDayConsumerTrend(1).then(e => this.linechart(this
.reportTypeIndex));
} else {
this.queryIsDredgeMember(1002, 1).then(() => {
this.queryStudentConsumerPreference();
this.queryDayConsumerTrend();
}
});
}
}
});
let tmpArr = []
// 获取时间
for (let i = 0; i <= 11; i++) {
for (let i = 1; i <= 11; i++) {
let startWeek = dayjs().subtract(i, 'month').startOf('month');
let endWeek = dayjs().$d.getTime() > dayjs().subtract(i, 'month').endOf('month').$d.getTime() ? dayjs()
.subtract(i, 'month').endOf('month') : dayjs();
......@@ -515,14 +897,165 @@
this.maxDate = new Date(this.dataRangeArr[this.dataRangeIndex].endDate);
this.diningSituations.diningSituationsRequestDate = this.dataRangeArr[this.dataRangeIndex].startDate;
this.diningSituations.diningSituationsDate = this.formatDate(this.minDate);
this.attendanceSituations.attendanceDate = this.formatDate(this.minDate);
this.queryCampusStudentInfo();
this.queryNotRepastDetails(this.diningSituations.diningSituationsRequestDate, this.diningSituations
.diningSituationsRequestDate, 1);
let tmpDate = this.formatDateTwo(this.minDate);
this.queryNotRepastDetails(this.dataRangeArr[this.dataRangeIndex].startDate, this.dataRangeArr[this
.dataRangeIndex].endDate, 2);
.dataRangeIndex].endDate).then(() => {
if (this.diningSituations.notRepastDetailsDTOS) {
let today = this.diningSituations.notRepastDetailsDTOS.filter(e => e.repastDate === tmpDate)[
0];
this.diningSituations.notRepastDetails = today;
} else {
this.diningSituations.notRepastDetails = {};
}
});
this.queryConsumerTrend();
},
methods: {
// 当天6:30 ~ 9:00,11:30 ~ 12:00, 17:30 ~ 19:00属于高峰期
isPeakPeriod() {
let first = this.timeIn("06:30:00", "09:00:00");
let second = this.timeIn("11:00:00", "12:00:00");
let three = this.timeIn("17:30:00", "19:00:00");
console.log(first, "first", second, "second", three, "three");
return first || second || three;
},
/*在某段时间内*/
timeIn(s, e) {
let t = moment().format("YYYY-MM-DD");
if (
moment(t + " " + s).diff(moment()) < 0 &&
moment(t + " " + e).diff(moment()) > 0
) {
return true;
}
return false;
},
tabTap: function(num) {
this.tabIndex = num;
if (num == 1) {
this.$nextTick(() => {
if (this.isOpen) {
this.queryStudentConsumerPreference(1).then(e => this.piechart());
this.queryDayConsumerTrend(1).then(e => this.linechart(this
.reportTypeIndex));
} else {
this.queryStudentConsumerPreference();
this.queryDayConsumerTrend();
}
})
} else if (num == 2) {
this.memberInfo.differDay = '';
this.memberInfo.invalidDateStr = '';
this.memberInfo.leastAmount = '';
this.queryIsDredgeMember(3002).then(() => {
if (this.isAttendanceOpen) {
if (new Date(this.memberInfo.invalidDate).getTime() <= new Date('2022/06/30')
.getTime()) {
this.isAttendanceOpen = true;
this.flag = 0;
this.memberInfo.invalidDateStr = '2022年6月30日';
this.memberInfo.differDay = dayjs('2022/06/30').diff(dayjs(), 'day');
this.statisAttendanceAbnormal();
this.attendanceReprotDatail(this.dataRangeArr[this.dataRangeIndex].startDate)
.then(e => {
if (this.attendanceReportDatail.length) {
this.containerHeight = 2762;
} else {
this.containerHeight = 1904;
}
});
} else {
this.queryIsDredgeMember(3002, 2);
this.statisAttendanceAbnormal();
this.attendanceReprotDatail(this.dataRangeArr[this.dataRangeIndex].startDate)
.then(e => {
if (this.attendanceReportDatail.length) {
this.containerHeight = 2762;
} else {
this.containerHeight = 1904;
}
});
}
} else {
if (new Date().getTime() <= new Date('2022/06/30').getTime()) {
this.isAttendanceOpen = true;
this.flag = 0;
this.memberInfo.invalidDateStr = '2022年6月30日';
this.memberInfo.differDay = dayjs('2022/06/30').diff(dayjs(), 'day');
this.statisAttendanceAbnormal();
this.attendanceReprotDatail(this.dataRangeArr[this.dataRangeIndex].startDate)
.then(e => {
if (this.attendanceReportDatail.length) {
this.containerHeight = 2762;
} else {
this.containerHeight = 1904;
}
});
} else {
this.queryIsDredgeMember(3002, 2);
}
}
})
} else {
this.memberInfo.differDay = '';
this.memberInfo.invalidDateStr = '';
this.memberInfo.leastAmount = '';
this.queryIsDredgeMember(2002).then(() => {
if (this.isPubTalkOpen) {
if (new Date(this.memberInfo.invalidDate).getTime() <= new Date('2022/06/30')
.getTime()) {
this.isPubTalkOpen = true;
this.flag = 0;
this.memberInfo.invalidDateStr = '2022年6月30日';
this.memberInfo.differDay = dayjs('2022/06/30').diff(dayjs(), 'day');
this.containerHeight = 3290;
this.getPubTalkReport().then(e => {
this.$nextTick(() => {
this.callNumberBarchart();
this.callDurationBarchart();
this.leaveMessageBarchart();
})
})
} else {
this.queryIsDredgeMember(2002, 3).then(() => {
this.$nextTick(() => {
this.callNumberBarchart();
this.callDurationBarchart();
this.leaveMessageBarchart();
})
});
}
} else {
if (new Date().getTime() <= new Date('2022/06/30').getTime()) {
this.isPubTalkOpen = true;
this.flag = 0;
this.memberInfo.invalidDateStr = '2022年6月30日';
this.memberInfo.differDay = dayjs('2022/06/30').diff(dayjs(), 'day');
this.containerHeight = 3290;
this.getPubTalkReport().then(e => {
this.$nextTick(() => {
this.callNumberBarchart();
this.callDurationBarchart();
this.leaveMessageBarchart();
})
})
} else {
this.queryIsDredgeMember(2002, 3).then(() => {
this.queryStudentConsumerPreference();
this.queryDayConsumerTrend();
this.getPubTalkReport().then(e => {
this.$nextTick(() => {
this.callNumberBarchart();
})
})
});
}
}
})
}
},
toImage: function() {
this.$nextTick(() => {
html2cancas(document.getElementsByClassName("tainer")[0], {
......@@ -572,8 +1105,7 @@
this.dataRangeArr = tmpArr;
} else {
let tmpArr = []
if (new Date().getDate() > 5) {
for (let i = 0; i <= 11; i++) {
for (let i = 1; i <= 11; i++) {
let startWeek = dayjs().subtract(i, 'month').startOf('month');
let endWeek = dayjs().$d.getTime() > dayjs().subtract(i, 'month').endOf('month').$d
.getTime() ?
......@@ -585,31 +1117,25 @@
endDate: endWeek.format("YYYY-MM-DD")
})
}
} else {
for (let i = 1; i <= 11; i++) {
let startWeek = dayjs().subtract(i, 'month').startOf('month');
let endWeek = dayjs().$d.getTime() > dayjs().subtract(i, 'month').endOf('month').$d
.getTime() ?
dayjs().subtract(i, 'month').endOf('month') : dayjs();
tmpArr.push({
week: (startWeek.format("YYYY/MM/DD")) + '~' + (endWeek.format("YYYY/MM/DD")),
weekstr: (startWeek.format("MM/DD")) + '~' + (endWeek.format("MM/DD")),
startDate: startWeek.format("YYYY-MM-DD"),
endDate: endWeek.format("YYYY-MM-DD")
})
}
}
this.dataRangeArr = tmpArr;
}
this.minDate = new Date(this.dataRangeArr[this.dataRangeIndex].startDate);
this.maxDate = new Date(this.dataRangeArr[this.dataRangeIndex].endDate);
if (this.tabIndex == 1) {
this.diningSituations.diningSituationsDate = this.formatDate(this.minDate);
this.diningSituations.diningSituationsRequestDate = this.dataRangeArr[this.dataRangeIndex]
.startDate;
this.queryNotRepastDetails(this.diningSituations.diningSituationsRequestDate, this.diningSituations
.diningSituationsRequestDate, 1);
let tmpDate = this.formatDateTwo(this.minDate);
this.queryNotRepastDetails(this.dataRangeArr[this.dataRangeIndex].startDate, this.dataRangeArr[this
.dataRangeIndex].endDate, 2);
.dataRangeIndex].endDate).then(() => {
if (this.diningSituations.notRepastDetailsDTOS) {
let today = this.diningSituations.notRepastDetailsDTOS.filter(e => e.repastDate ===
tmpDate)[0];
this.diningSituations.notRepastDetails = today;
} else {
this.diningSituations.notRepastDetails = {};
}
});
this.queryConsumerTrend();
if (this.isOpen) {
this.queryStudentConsumerPreference(1).then(e => this.piechart());
......@@ -618,6 +1144,19 @@
this.queryStudentConsumerPreference();
this.queryDayConsumerTrend();
}
} else if (this.tabIndex == 2) {
this.attendanceSituations.attendanceDate = this.formatDate(this.minDate);
this.statisAttendanceAbnormal();
this.attendanceReprotDatail(this.dataRangeArr[this.dataRangeIndex].startDate);
} else {
this.getPubTalkReport().then(() => {
this.$nextTick(() => {
this.callNumberBarchart();
this.callDurationBarchart();
this.leaveMessageBarchart();
})
})
}
},
formatter(day) {
const year = day.date.getFullYear();
......@@ -626,6 +1165,8 @@
const date = day.date.getDate();
const datestr = date < 10 ? '0' + date : date;
const sum = year + '-' + monthstr + '-' + datestr;
if (this.tabIndex == 1) { // 消费报告
if (this.diningSituations.notRepastDetailsDTOS) {
const contrastList = this.diningSituations.notRepastDetailsDTOS.filter(e => e
.dayNotEatNumber != 0);
contrastList.forEach(item => {
......@@ -637,6 +1178,37 @@
day.className = 'notice-day'
}
})
}
} else if (this.tabIndex == 2) { // 出入校报告
if (this.attendanceReport.abnomalDateList && this.attendanceReport.abnomalDateList.length) {
const abnomalList = this.attendanceReport.abnomalDateList.filter(e => e.abnomalType == 2 || e
.abnomalType == 3 || e.abnomalType == 5);
const leaveList = this.attendanceReport.abnomalDateList.filter(e => e.abnomalType == 4);
const championList = this.attendanceReport.abnomalDateList.filter(e => e.abnomalType == 6);
// 迟到 早退 旷课
abnomalList.forEach(item => {
if (sum == item.attendDate.slice(0, 10)) {
var topInfo = item.abnomalType == 5 ? '旷课' : item.abnomaleName;
day.topInfo = topInfo;
day.className = 'late-day';
}
})
// 请假
leaveList.forEach(item => {
if (sum == item.attendDate.slice(0, 10)) {
day.topInfo = item.abnomaleName;
day.className = 'leave-day';
}
})
// 冠军
championList.forEach(item => {
if (sum == item.attendDate.slice(0, 10)) {
day.topInfo = item.abnomaleName;
day.className = 'champion-day';
}
})
}
}
return day;
},
formatDate(date) {
......@@ -649,7 +1221,16 @@
this.diningSituations.diningSituationsDate = this.formatDate(date);
var dateStr =
`${date.getFullYear()}-${date.getMonth()<9?'0'+(date.getMonth()+1):date.getMonth()+1}-${date.getDate()<10?'0'+date.getDate():date.getDate()}`;
this.queryNotRepastDetails(dateStr, dateStr, 1);
if (this.diningSituations.notRepastDetailsDTOS) {
let today = this.diningSituations.notRepastDetailsDTOS.filter(e => e.repastDate === dateStr)[0];
this.diningSituations.notRepastDetails = today;
} else {
this.diningSituations.notRepastDetails = {};
}
},
attendanceDateSelect(date) {
this.attendanceSituations.attendanceDate = this.formatDate(date);
this.attendanceReprotDatail(this.formatDateTwo(date));
},
piechart: function() {
var myChart = echarts.init(document.getElementById('consumer-preferences-pie'));
......@@ -709,7 +1290,7 @@
var mySize = document.getElementById('consumer-trend-line');
mySize.style.width = 360 + 'px';
mySize.style.height = 260 + 'px';
var myChart = echarts.init(mySize);
var myLineChart = echarts.init(mySize);
var xdata = this.lineDatas.map(v => v.name);
var year = this.dataRangeArr[this.dataRangeIndex].startDate.slice(0, 4);
var month = this.dataRangeArr[this.dataRangeIndex].startDate.slice(5, 7);
......@@ -809,9 +1390,11 @@
color: 'transparent'
}
},
extraCssText: `width:109px;height:55px;line-height:33rpx;background: no-repeat center/100% url(../../static/images/consumeTrendbgm.png);
font-size:24rpx;font-family: PingFangSC-Medium, PingFang SC;font-weight: 500;
color: #FF8646;padding:13rpx 12rpx 30rpx 17rpx;`,
extraCssText: `width:109px;height:55px;line-height:33rpx;background: no-repeat center/100% url(./static/images/consumeTrendbgm.png);
font-size:24rpx;font-family: PingFangSC-Medium, PingFang SC;font-weight: 500;
color: #FF8646;padding:13rpx 12rpx 30rpx 17rpx;`,
confine: true,
position: function(pt) {
return [pt[0] - 27, pt[1] - 73];
......@@ -822,9 +1405,249 @@
}
},
};
option && myChart.setOption(option);
option && myLineChart.setOption(option);
window.addEventListener('resize', function() {
myChart.resize();
myLineChart.resize();
})
},
callNumberBarchart: function() {
var mySize = document.getElementById('call-number-bar');
mySize.style.width = 350 + 'px';
mySize.style.height = 260 + 'px';
var myCallNumberBarchart = echarts.init(mySize);
var xdata = this.pubTalkReport.callNumberInfoList.map(v => v.nickname);
var seriesData = this.pubTalkReport.callNumberInfoList.map(v => v.callNumber);
var option = {
xAxis: {
type: 'category',
data: xdata,
axisLabel: {
show: true,
interval: 0,
textStyle: {
color: 'rgba(0, 0, 0, 0.5)',
fontSize: 12
},
formatter: function(params) {
var newParamsName = "";
var tempParamsName = "";
var paramsNameNumber = params.length;
var provideNumber = 2;
var rowNumber = Math.ceil(paramsNameNumber / provideNumber);
if (paramsNameNumber > provideNumber) {
for (var p = 0; p < rowNumber; p++) {
var tempStr = "";
var start = p * provideNumber;
var end = start + provideNumber;
if (p == rowNumber - 1) {
tempStr = params.substring(start, paramsNameNumber);
} else {
tempStr = params.substring(start, end) + "\n";
}
tempParamsName += tempStr;
}
} else {
tempParamsName = params;
}
if (tempParamsName.length > 9) {
newParamsName = tempParamsName.substring(0, 10) + '...';
} else {
newParamsName = tempParamsName;
}
return newParamsName;
}
}
},
yAxis: {
type: 'value',
min: 0,
max: function(value) {
return Math.ceil(value.max) + 1
},
minInterval: 1
},
series: [{
data: seriesData,
type: 'bar',
itemStyle: {
color: '#FF9523',
barBorderRadius: [5, 5, 0, 0],
},
label: {
show: true,
position: 'top',
color: '#FE931F',
fontSize: '14px',
formatter: (params) => {
return params.value[params.encode.x[0]];
}
},
barWidth: 25
}]
};
option && myCallNumberBarchart.setOption(option);
window.addEventListener('resize', function() {
myCallNumberBarchart.resize();
})
},
callDurationBarchart: function() {
var mySize = document.getElementById('call-duration-bar');
mySize.style.width = 340 + 'px';
mySize.style.height = 260 + 'px';
var myCallDurationBarchart = echarts.init(mySize);
var xdata = this.pubTalkReport.callDurationInfoList.map(v => v.nickname);
var seriesData = this.pubTalkReport.callDurationInfoList.map(v => v.duration);
var option = {
xAxis: {
type: 'category',
data: xdata,
axisLabel: {
show: true,
interval: 0,
textStyle: {
color: 'rgba(0, 0, 0, 0.5)',
fontSize: 12
},
formatter: function(params) {
var newParamsName = "";
var tempParamsName = "";
var paramsNameNumber = params.length;
var provideNumber = 2;
var rowNumber = Math.ceil(paramsNameNumber / provideNumber);
if (paramsNameNumber > provideNumber) {
for (var p = 0; p < rowNumber; p++) {
var tempStr = "";
var start = p * provideNumber;
var end = start + provideNumber;
if (p == rowNumber - 1) {
tempStr = params.substring(start, paramsNameNumber);
} else {
tempStr = params.substring(start, end) + "\n";
}
tempParamsName += tempStr;
}
} else {
tempParamsName = params;
}
if (tempParamsName.length > 9) {
newParamsName = tempParamsName.substring(0, 10) + '...';
} else {
newParamsName = tempParamsName;
}
return newParamsName;
}
}
},
yAxis: {
type: 'value',
min: 0,
max: function(value) {
return Math.ceil(value.max)
},
minInterval: 1
},
series: [{
data: seriesData,
type: 'bar',
itemStyle: {
color: '#D59F00',
barBorderRadius: [5, 5, 0, 0],
},
label: {
show: true,
position: 'top',
color: '#D59F00',
fontSize: '14px',
formatter: (params) => {
return params.value[params.encode.x[0]];
}
},
barWidth: 25
}]
};
option && myCallDurationBarchart.setOption(option);
window.addEventListener('resize', function() {
myCallDurationBarchart.resize();
})
},
leaveMessageBarchart: function() {
var mySize = document.getElementById('leave-message-bar');
mySize.style.width = 350 + 'px';
mySize.style.height = 260 + 'px';
var myLeaveMessageBarchart = echarts.init(mySize);
var xdata = this.pubTalkReport.leaveMessageInfoList.map(v => v.nickname);
var seriesData = this.pubTalkReport.leaveMessageInfoList.map(v => v.leaveMessageNumber);
var option = {
xAxis: {
type: 'category',
data: xdata,
axisLabel: {
show: true,
interval: 0,
textStyle: {
color: 'rgba(0, 0, 0, 0.5)',
fontSize: 12
},
formatter: function(params) {
var newParamsName = "";
var tempParamsName = "";
var paramsNameNumber = params.length;
var provideNumber = 2;
var rowNumber = Math.ceil(paramsNameNumber / provideNumber);
if (paramsNameNumber > provideNumber) {
for (var p = 0; p < rowNumber; p++) {
var tempStr = "";
var start = p * provideNumber;
var end = start + provideNumber;
if (p == rowNumber - 1) {
tempStr = params.substring(start, paramsNameNumber);
} else {
tempStr = params.substring(start, end) + "\n";
}
tempParamsName += tempStr;
}
} else {
tempParamsName = params;
}
if (tempParamsName.length > 9) {
newParamsName = tempParamsName.substring(0, 10) + '...';
} else {
newParamsName = tempParamsName;
}
return newParamsName;
}
}
},
yAxis: {
type: 'value',
min: 0,
max: function(value) {
return Math.ceil(value.max)
},
minInterval: 1
},
series: [{
data: seriesData,
type: 'bar',
itemStyle: {
color: '#00AB6C',
barBorderRadius: [5, 5, 0, 0],
},
label: {
show: true,
position: 'top',
color: '#00AB6C',
fontSize: '14px',
formatter: (params) => {
return params.value[params.encode.x[0]];
}
},
barWidth: 25
}]
};
option && myLeaveMessageBarchart.setOption(option);
window.addEventListener('resize', function() {
myLeaveMessageBarchart.resize();
})
},
// 查询学生信息
......@@ -844,8 +1667,7 @@
})
return
}
this.userInfo = data.obj;
this.userInfo = data.obj || {};
} catch (e) {
//TODO handle the exception
console.log(e);
......@@ -857,7 +1679,7 @@
}
},
// 查询就餐情况
async queryNotRepastDetails(startDate, endDate, num) {
async queryNotRepastDetails(startDate, endDate) {
try {
let data = await this.$http.get({
url: gHost +
......@@ -876,11 +1698,10 @@
})
return
}
switch (num) {
case 1:
this.diningSituations.notRepastDetails = data.obj.notRepastDetailsDTOS[0];
break;
case 2:
if (!data.obj) {
this.diningSituations = {};
return;
}
this.diningSituations.notRepastDay = data.obj.notRepastDay;
this.diningSituations.notRepastDetailsDTOS = data.obj.notRepastDetailsDTOS;
this.diningSituations.cateringLevel = data.obj.cateringLevel;
......@@ -893,8 +1714,6 @@
'早餐吃好,一天才能活力满满哦',
'及时补充能量,下午才能集中精神学习哦', '晚餐好好吃,身体才能更健康'
][this.diningSituations.cateringLevel - 1] : '';
break;
}
} catch (e) {
//TODO handle the exception
console.log(e);
......@@ -925,12 +1744,13 @@
})
return
}
if (!data.obj) return;
const tmpObj = data.obj;
this.isEatLow = tmpObj.canteenAmount / tmpObj.grossAmount < 0.5 ? true : false;
if (num) {
this.pieDatas = [
[{
name: '食堂',
name: '正餐',
value: tmpObj.canteenAmount
}, {
name: '超市',
......@@ -951,7 +1771,7 @@
})
}
},
// 查询消费总额
// 查询生活费额度
async queryConsumerTrend() {
try {
let data = await this.$http.get({
......@@ -971,6 +1791,7 @@
})
return
}
if (!data.obj) return;
this.consumerAmountObj = data.obj;
this.isReasonable = this.consumerAmountObj.exceedRate >= 40 && this
.consumerAmountObj.exceedRate <=
......@@ -1012,6 +1833,7 @@
})
return
}
if (!data.obj) return;
var exceptionDate = data.obj.exceptionDate;
this.isAbnormal = exceptionDate.length ? true : false;
var clues = '';
......@@ -1041,8 +1863,115 @@
})
}
},
// 是否开通消费报告
async queryIsDredgeMember(num) {
// 获取公话报告
async getPubTalkReport() {
try {
let data = await this.$http.post({
url: gHost +
'/report-push/vpt-web-report/pubTalkReport/getPubTalkReport'
}, {
schoolId: getQueryParams('schoolId'),
studentId: getQueryParams('userId'),
startDate: this.dataRangeArr[this.dataRangeIndex].startDate,
endDate: this.dataRangeArr[this.dataRangeIndex].endDate,
})
if (data.code != 0) {
uni.showToast({
icon: "none",
mask: true,
title: data.message
})
return
}
this.pubTalkReport = data.data || {};
} catch (e) {
//TODO handle the exception
console.log(e);
uni.showToast({
icon: "none",
mask: true,
title: e.message
})
}
},
// 出入校报告
// 统计异常天数
async statisAttendanceAbnormal() {
try {
let data = await this.$http.post({
url: gHost +
'/report-push/attemdance-report/statisAttendanceAbnormal'
}, {
schoolId: getQueryParams('schoolId'),
userId: getQueryParams('userId'),
startTime: this.dataRangeArr[this.dataRangeIndex].startDate,
endTime: this.dataRangeArr[this.dataRangeIndex].endDate,
classId: this.userInfo.classId
})
if (data.code != 200) {
uni.showToast({
icon: "none",
mask: true,
title: data.message
})
return
}
this.attendanceReport = data.data || {};
} catch (e) {
//TODO handle the exception
console.log(e);
uni.showToast({
icon: "none",
mask: true,
title: e.message
})
}
},
// 出勤情况明细
async attendanceReprotDatail(currentDate) {
try {
let data = await this.$http.post({
url: gHost +
'/report-push/attemdance-report/attendanceReprotDatail'
}, {
schoolId: getQueryParams('schoolId'),
userId: getQueryParams('userId'),
currentDate,
classId: this.userInfo.classId
})
if (data.code != 200) {
uni.showToast({
icon: "none",
mask: true,
title: data.message
})
return
}
var tempList = data.data;
if (tempList && tempList.length) {
tempList.forEach(e => {
e.attendDetailReportDTOList.forEach(c => {
c.border = c.describeContent && c.describeContent != '当日早到冠军' ?
'4rpx solid #F9793F' :
'4rpx solid rgba(0, 0, 0, 0.25)'
})
})
this.attendanceReportDatail = tempList || [];
} else {
this.attendanceReportDatail = [];
}
} catch (e) {
//TODO handle the exception
console.log(e);
uni.showToast({
icon: "none",
mask: true,
title: e.message
})
}
},
// 是否开通会员功能
async queryIsDredgeMember(serviceItemCode, num) {
try {
let data = await this.$http.get({
url: gHost +
......@@ -1050,7 +1979,7 @@
}, {
schoolId: getQueryParams('schoolId'),
userId: getQueryParams('userId'),
serviceItemCode: 4001
serviceItemCode
})
if (data.code != 200) {
uni.showToast({
......@@ -1060,15 +1989,53 @@
})
return
}
switch (serviceItemCode) {
case 1002:
this.isOpen = data.obj.status;
if (!this.isOpen) {
this.flag = 1;
}
break;
case 2002:
this.isPubTalkOpen = data.obj.status;
if (!this.isPubTalkOpen) {
this.flag = 3;
}
break;
case 3002:
this.isAttendanceOpen = data.obj.status;
if (!this.isAttendanceOpen) {
this.flag = 2;
}
break;
}
if (num == 1) {
if (this.isOpen) {
this.queryMemberValidTime();
this.queryMemberValidTime(serviceItemCode);
this.containerHeight = 4200;
this.flag = 0;
} else {
this.queryMemberConsumerAmount();
this.queryMemberConsumerAmount(serviceItemCode);
this.containerHeight = 2340;
}
} else if (num == 2) {
if (this.isAttendanceOpen) {
this.queryMemberValidTime(serviceItemCode);
this.containerHeight = 2762;
this.flag = 0;
} else {
this.queryMemberConsumerAmount(serviceItemCode);
this.containerHeight = 1944;
}
} else if (num == 3) {
if (this.isPubTalkOpen) {
this.queryMemberValidTime(serviceItemCode);
this.containerHeight = 3290;
this.flag = 0;
} else {
this.queryMemberConsumerAmount(serviceItemCode);
this.containerHeight = 2130;
}
}
} catch (e) {
//TODO handle the exception
......@@ -1081,7 +2048,7 @@
}
},
// 查询会员消费金额
async queryMemberConsumerAmount() {
async queryMemberConsumerAmount(serviceItemCode) {
try {
let data = await this.$http.get({
url: gHost +
......@@ -1089,7 +2056,7 @@
}, {
schoolId: getQueryParams('schoolId'),
userId: getQueryParams('userId'),
serviceItemCode: 4001
serviceItemCode
})
if (data.code != 200) {
uni.showToast({
......@@ -1099,7 +2066,7 @@
})
return
}
this.memberInfo.leastAmount = data.obj.leastAmount;
this.memberInfo.leastAmount = data.obj.leastAmount || '';
} catch (e) {
//TODO handle the exception
console.log(e);
......@@ -1111,7 +2078,7 @@
}
},
// 查询会员有效期
async queryMemberValidTime() {
async queryMemberValidTime(serviceItemCode) {
try {
let data = await this.$http.get({
url: gHost +
......@@ -1119,7 +2086,7 @@
}, {
schoolId: getQueryParams('schoolId'),
userId: getQueryParams('userId'),
serviceItemCode: 4001
serviceItemCode
})
if (data.code != 200) {
uni.showToast({
......@@ -1131,6 +2098,7 @@
}
this.memberInfo.differDay = data.obj.differDay;
this.memberInfo.invalidDate = data.obj.invalidDate;
if (data.obj.invalidDate) {
let month = data.obj.invalidDate.slice(5, 6) == 0 ? data
.obj.invalidDate.slice(6, 7) : data.obj
.invalidDate.slice(5, 7);
......@@ -1139,6 +2107,9 @@
.invalidDate.slice(8);
this.memberInfo.invalidDateStr = data.obj.invalidDate
.slice(0, 4) + '' + month + '' + date + '';
} else {
this.memberInfo.invalidDateStr = '';
}
} catch (e) {
//TODO handle the exception
console.log(e);
......@@ -1163,11 +2134,38 @@
}
});
},
imageClick: function(src) {
this.imageDialogSrc = src;
this.imageDialogShow = true;
},
},
}
</script>
<style lang="scss" scope>
<style lang="scss">
.nodata {
position: absolute;
left: 50%;
top: 0%;
width: 100%;
transform: translate(-50%, 0);
.nodataImg {
width: 100%;
text-align: center;
}
.nodataTxt {
margin-top: -100rpx;
display: flex;
justify-content: center;
font-size: 30rpx;
font-family: PingFang SC;
font-weight: 500;
color: #999999;
}
}
.tainer {
.school-report-header {
height: 88rpx;
......@@ -1237,7 +2235,6 @@
}
}
.school-report-screen-item-two {
width: 270rpx;
display: flex;
......@@ -1321,41 +2318,89 @@
}
}
.school-report-context-bgImg {
.consumer-report-bgImg {
width: 100%;
height: 452rpx;
background: no-repeat center/100% url(../../static/images/consumeReportBg.png);
}
.school-report-context-card {
.attendance-report-bgImg {
width: 100%;
background: #E5F8F1;
padding: 0 30rpx;
position: absolute;
top: 650rpx;
box-sizing: border-box;
height: 452rpx;
background: no-repeat center/100% url(../../static/images/attendanceReportBg.png);
}
.school-report-context-card-one {
.pubTalk-report-bgImg {
width: 100%;
height: 598rpx;
background: #FFFFFF;
border-radius: 16rpx;
margin-bottom: 40rpx;
.school-report-context-card-one-img {
width: 428rpx;
height: 428rpx;
background: no-repeat center/100% url(../../static/images/consumeReport.png);
position: absolute;
top: -172rpx;
left: 160rpx;
height: 452rpx;
background: no-repeat center/100% url(../../static/images/pubTalkReportBg.png);
}
.school-report-context-card-one-context {
width: 613rpx;
margin: 0 30rpx 0 47rpx;
position: absolute;
top: 163rpx;
.school-report-context-card-title {
height: 62rpx;
display: flex;
justify-content: center;
.school-report-context-card-title-img {
width: 318rpx;
background: no-repeat center/100% url(../../static/images/cardBg.png);
font-size: 32rpx;
font-family: PingFangSC-Semibold, PingFang SC;
font-weight: 600;
color: rgba(0, 0, 0, 0.85);
line-height: 45rpx;
display: flex;
justify-content: center;
align-items: center;
}
}
.school-report-context-card {
width: 100%;
background: #E5F8F1;
padding: 0 30rpx;
position: absolute;
top: 650rpx;
box-sizing: border-box;
.school-report-context-card-one {
width: 100%;
background: #FFFFFF;
border-radius: 16rpx;
margin-bottom: 40rpx;
.consumer-report-img {
width: 428rpx;
height: 428rpx;
background: no-repeat center/100% url(../../static/images/consumeReport.png);
position: absolute;
top: -172rpx;
left: 160rpx;
}
.attendance-report-img {
width: 428rpx;
height: 428rpx;
background: no-repeat center/100% url(../../static/images/attendanceReport.png);
position: absolute;
top: -172rpx;
left: 160rpx;
}
.pubTalk-report-img {
width: 428rpx;
height: 428rpx;
background: no-repeat center/100% url(../../static/images/pubTalkReport.png);
position: absolute;
top: -172rpx;
left: 160rpx;
}
.school-report-context-card-one-context {
width: 613rpx;
margin: 0 30rpx 0 47rpx;
position: absolute;
top: 163rpx;
.school-report-context-card-one-context-item {
margin: 0 0 32rpx;
......@@ -1393,24 +2438,68 @@
}
}
}
}
.school-report-context-card-title {
height: 62rpx;
display: flex;
justify-content: center;
.attendance-report-context-card-one-context {
padding: 163rpx 0 0;
box-sizing: border-box;
.school-report-context-card-title-img {
width: 318rpx;
background: no-repeat center/100% url(../../static/images/cardBg.png);
font-size: 32rpx;
font-family: PingFangSC-Semibold, PingFang SC;
font-weight: 600;
.attendance-report-context-card-one-context-item {
height: 40rpx;
font-size: 28rpx;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: rgba(0, 0, 0, 0.85);
line-height: 45rpx;
display: flex;
justify-content: center;
.txt-important {
color: #04B871;
margin: 0 4rpx;
}
}
}
.pubTalk-report-context-card-one-context {
width: 613rpx;
margin: 0 30rpx 0 47rpx;
position: absolute;
top: 163rpx;
.pubTalk-report-context-card-one-context-item {
margin: 0 0 32rpx;
display: flex;
.pubTalk-report-context-card-one-context-dot {
height: 40rpx;
display: flex;
align-items: center;
.pubTalk-report-context-card-one-context-dot-item {
width: 10rpx;
height: 10rpx;
background: #04B871;
border-radius: 10rpx;
margin-right: 16rpx;
}
}
.pubTalk-report-context-card-one-context-txt {
line-height: 40rpx;
.txt-important {
color: #04B871;
margin: 0 4rpx;
}
.txt-important-two {
color: #04B871;
}
}
&.pubTalk-report-context-card-one-context-item-last {
margin: 0;
}
}
}
}
......@@ -1464,10 +2553,230 @@
}
}
.school-report-context-card-two-calendar {
.school-report-context-card-two-calendar {
height: 575rpx;
width: 690rpx;
/deep/ .van-calendar__weekdays {
background: #F7FAF8;
}
/deep/ .van-calendar__weekday {
text-align: left;
padding-left: 30rpx;
box-sizing: border-box;
}
/deep/ .van-calendar__weekday:first-of-type {
color: rgba(0, 0, 0, 0.25);
}
/deep/ .van-calendar__weekday:last-of-type {
color: rgba(0, 0, 0, 0.25);
}
/deep/ .van-calendar__month-title {
display: none;
}
/deep/ .van-calendar__days {
margin: 10rpx 0 0;
}
/deep/ .van-calendar__day {
margin: 0 0 8rpx;
border-radius: 22rpx;
display: flex;
align-items: flex-end;
}
/deep/ .van-calendar__selected-day {
background: rgba(0, 0, 0, .1);
color: #F9793F;
display: flex;
align-items: flex-end;
border-radius: 22rpx;
}
/deep/ .van-calendar__top-info {
top: 0;
font-size: 20rpx;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #F9793F;
line-height: 28rpx;
margin: 12rpx 0 4rpx;
}
/deep/ .notice-day {
color: #F9793F;
background: rgba(249, 121, 63, .1);
border-radius: 22rpx;
width: 88rpx;
height: 88rpx;
margin-right: 10rpx;
display: flex;
align-items: flex-end;
}
}
.school-report-context-card-two-details {
height: 132rpx;
background: no-repeat center/100% url(../../static/images/diningSituations.png);
padding: 55rpx 42rpx 30rpx 29rpx;
box-sizing: border-box;
border-radius: 0 0 16rpx 16rpx;
.school-report-context-card-two-details-item {
display: flex;
height: 43rpx;
.school-report-context-card-two-details-date {
width: 130rpx;
height: 43rpx;
border-radius: 8rpx;
border: 1rpx solid #04B871;
font-size: 28rpx;
font-family: FontName;
font-weight: 700;
font-style: italic;
color: #04B871;
margin-right: 65rpx;
display: flex;
justify-content: center;
}
.school-report-context-card-two-details-meal {
display: flex;
.school-report-context-card-two-details-meal-txt {
width: 56rpx;
margin-right: 8rpx;
font-size: 28rpx;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: rgba(0, 0, 0, 0.85);
line-height: 40rpx;
}
.school-report-context-card-two-details-meal-logo {
display: flex;
align-items: center;
margin-right: 48rpx;
&.school-report-context-card-two-details-meal-logo-two {
margin-right: 56rpx;
}
&.school-report-context-card-two-details-meal-logo-three {
margin: 0;
}
.school-report-context-card-two-details-meal-img {
width: 48rpx;
height: 40rpx;
image {
height: 100%;
width: 100%;
max-height: 100%;
max-width: 100%;
}
}
.school-report-context-card-two-details-meal-noeat {
width: 40rpx;
height: 40rpx;
background: rgba(249, 121, 63, 0.17);
border-radius: 12rpx;
font-size: 24rpx;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #F9793F;
display: flex;
justify-content: center;
align-items: center;
}
}
}
}
}
}
.attendance-report-context-card-two {
height: 748rpx;
background: #FFFFFF;
border-radius: 16rpx 16rpx 0 0;
.attendance-report-context-card-two-conclusion {
height: 40rpx;
padding: 0 30rpx 0;
box-sizing: border-box;
margin: 36rpx 0 29rpx;
display: flex;
justify-content: space-between;
.attendance-report-context-card-two-conclusion-txt {
font-size: 32rpx;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: rgba(0, 0, 0, 0.85);
line-height: 40rpx;
.abnormal-days {
color: #F9793F;
margin: 0 5rpx;
}
}
.attendance-report-context-card-two-conclusion-logo {
width: 190rpx;
display: flex;
justify-content: space-between;
.attendance-report-context-card-two-conclusion-logo-item {
display: flex;
align-items: center;
.attendance-report-context-card-two-conclusion-logo-item-dot {
width: 12rpx;
height: 12rpx;
background: #F9793F;
border-radius: 12rpx;
&.leave {
background: #04B871;
}
}
.attendance-report-context-card-two-conclusion-logo-item-txt {
font-size: 28rpx;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: rgba(0, 0, 0, 0.5);
margin-left: 14rpx;
}
}
}
}
.attendance-report-context-card-two-calendar {
height: 575rpx;
width: 690rpx;
.mark-green {
color: #04B871;
}
.mark-orange {
color: #F9793F;
}
.mark-yellow {
color: #DAA000;
}
/deep/ .van-calendar__weekdays {
background: #F7FAF8;
}
......@@ -1497,6 +2806,8 @@
/deep/ .van-calendar__day {
margin: 0 0 8rpx;
border-radius: 22rpx;
display: flex;
align-items: flex-end;
}
/deep/ .van-calendar__selected-day {
......@@ -1505,8 +2816,6 @@
display: flex;
align-items: flex-end;
border-radius: 22rpx;
width: 88rpx;
height: 88rpx;
}
/deep/ .van-calendar__top-info {
......@@ -1519,100 +2828,343 @@
margin: 12rpx 0 4rpx;
}
/deep/ .notice-day {
/deep/ .late-day {
color: #F9793F;
background: rgba(249, 121, 63, .1);
border-radius: 22rpx;
width: 88rpx;
height: 88rpx;
margin-right: 10rpx;
display: flex;
align-items: flex-end;
margin-left: 10rpx;
}
/deep/ .leave-day {
color: #04B871;
background: rgba(4, 184, 113, .09);
border-radius: 22rpx;
width: 88rpx;
height: 88rpx;
margin-left: 10rpx;
}
.school-report-context-card-two-details {
height: 132rpx;
background: no-repeat center/100% url(../../static/images/diningSituations.png);
padding: 55rpx 42rpx 30rpx 29rpx;
/deep/ .champion-day {
color: #DAA000;
background: url(../../static/images/champion.png) no-repeat -4rpx center/100%;
border-radius: 22rpx;
width: 88rpx;
height: 88rpx;
margin-left: 10rpx;
}
}
}
.attendance-report-context-details {
height: 858rpx;
overflow: scroll;
.attendance-report-context-card-two-details {
position: relative;
top: -30rpx;
height: 146rpx;
background: #F5F7F7;
padding: 57rpx 39rpx 0 34rpx;
box-sizing: border-box;
border-radius: 0 0 16rpx 16rpx;
.school-report-context-card-two-details-item {
.attendance-report-context-card-two-details-item {
height: 50rpx;
display: flex;
height: 43rpx;
justify-content: space-between;
.school-report-context-card-two-details-date {
.attendance-report-context-card-two-details-time {
display: flex;
align-items: center;
.attendance-report-context-card-two-details-time-img {
width: 25rpx;
height: 25rpx;
background: no-repeat center/100% url(../../static/images/attendanceTime.png);
}
.attendance-report-context-card-two-details-time-txt {
font-size: 28rpx;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: rgba(0, 0, 0, 0.85);
&.txt-details {
margin: 0 16rpx 0 13rpx;
}
}
}
.attendance-report-context-card-two-details-date {
width: 130rpx;
height: 43rpx;
border-radius: 8rpx;
border: 1rpx solid #04B871;
font-size: 28rpx;
font-family: FontName;
font-weight: 600;
font-weight: 700;
font-style: italic;
color: #04B871;
margin-right: 65rpx;
display: flex;
justify-content: center;
align-items: center;
}
}
}
.school-report-context-card-two-details-meal {
.attendance-report-context-card-three {
background: #F5F7F7;
margin: -40rpx 0 0;
position: relative;
border-radius: 0 0 16rpx 16rpx;
.attendance-report-details {
width: 572rpx;
height: 168rpx;
.dashed-line-box {
position: relative;
top: -40rpx;
width: 16rpx;
height: 212rpx;
.dashed-line-first {
width: 2rpx;
height: 66rpx;
border-left: 2rpx dashed rgba(0, 0, 0, .25);
position: absolute;
left: 44rpx;
}
.attendance-report-dot-first {
width: 16rpx;
height: 16rpx;
background: #FFFFFF;
border: 4rpx solid rgba(0, 0, 0, 0.25);
border-radius: 16rpx;
position: absolute;
top: 66rpx;
left: 34rpx;
}
.dashed-line {
width: 2rpx;
height: 146rpx;
border-left: 2rpx dashed rgba(0, 0, 0, .25);
position: absolute;
left: 44rpx;
top: -76rpx;
}
.attendance-report-dot {
width: 16rpx;
height: 16rpx;
background: #FFFFFF;
border: 4rpx solid rgba(0, 0, 0, 0.25);
border-radius: 16rpx;
position: absolute;
top: 70rpx;
left: 34rpx;
}
}
.attendance-report-details-item-box {
width: 83.5%;
display: flex;
justify-content: space-between;
position: absolute;
margin-left: 71rpx;
.school-report-context-card-two-details-meal-txt {
width: 56rpx;
margin-right: 8rpx;
.attendance-report-details-item {
height: 40rpx;
.attendance-report-time {
display: flex;
font-size: 28rpx;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: rgba(0, 0, 0, 0.85);
line-height: 40rpx;
.attendance-report-time-item {
color: #F9793F;
margin: 0 21rpx 0 15rpx;
}
.school-report-context-card-two-details-meal-logo {
.early-champions {
width: 183rpx;
background: #F7E4BB;
border-radius: 20rpx;
padding: 0 26rpx 0 23rpx;
box-sizing: border-box;
display: flex;
align-items: center;
margin-right: 48rpx;
&.school-report-context-card-two-details-meal-logo-two {
margin-right: 56rpx;
.early-champions-img {
width: 32rpx;
height: 29rpx;
background: no-repeat center/100% url(../../static/images/champions.png);
margin-right: 2rpx;
}
&.school-report-context-card-two-details-meal-logo-three {
margin: 0;
.early-champions-txt {
font-size: 24rpx;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #916610;
}
}
}
}
.school-report-context-card-two-details-meal-img {
width: 48rpx;
.attendance-report-details-img-item {
display: flex;
flex-direction: column;
align-items: flex-end;
.attendance-report-time-details {
width: 212rpx;
display: flex;
align-items: center;
justify-content: flex-end;
margin: 0 0 11rpx;
.attendance-report-time-details-item {
font-size: 28rpx;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #F9793F;
line-height: 40rpx;
width: 165rpx;
height: 40rpx;
display: flex;
justify-content: flex-end;
}
.attendance-report-time-details-icon {
width: 21rpx;
height: 12rpx;
background: no-repeat center/100% url(../../static/images/arrowUp.png);
margin-left: 30rpx;
}
}
.attendance-report-details-img-box {
width: 155rpx;
height: 95rpx;
display: flex;
justify-content: flex-end;
image {
width: 100%;
height: 100%;
}
}
}
}
}
}
}
.image-dialog {
width: 620rpx;
height: 800rpx;
image {
width: 100%;
max-height: 100%;
max-width: 100%;
height: 100%;
}
}
.school-report-context-card-two-details-meal-noeat {
width: 40rpx;
height: 40rpx;
background: rgba(249, 121, 63, 0.17);
border-radius: 12rpx;
.pubTalk-report-context-card-two {
height: 506rpx;
background: #FFFFFF;
border-radius: 16rpx;
margin: 0 0 40rpx;
.call-number-bar-unit {
margin: 0 0 28rpx 28rpx;
height: 33rpx;
font-size: 24rpx;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #F9793F;
display: flex;
justify-content: center;
align-items: center;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: rgba(0, 0, 0, 0.5);
line-height: 33rpx;
}
#call-number-bar {
position: relative;
top: -110rpx;
left: 18rpx;
z-index: 100;
}
}
.pubTalk-report-context-card-three {
height: 537rpx;
background: #FFFFFF;
border-radius: 16rpx;
margin: 0 0 40rpx;
.call-duration-bar-unit {
margin: 0 0 28rpx 28rpx;
height: 33rpx;
font-size: 24rpx;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: rgba(0, 0, 0, 0.5);
line-height: 33rpx;
}
#call-duration-bar {
position: relative;
top: -88rpx;
left: 28rpx;
z-index: 100;
}
}
.pubTalk-report-context-card-four {
height: 756rpx;
background: #FFFFFF;
border-radius: 16rpx;
.leave-message-summary {
height: 90rpx;
margin: 42rpx 36rpx 0;
font-size: 32rpx;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: rgba(0, 0, 0, 0.85);
line-height: 45rpx;
.txt-important {
color: #04B871;
margin: 0 4rpx;
}
&.leave-message-less-summary {
margin: 0 36rpx 0;
}
}
.leave-message-bar-unit {
margin: 43rpx 0 28rpx 28rpx;
height: 33rpx;
font-size: 24rpx;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: rgba(0, 0, 0, 0.5);
line-height: 33rpx;
}
#leave-message-bar {
position: relative;
top: -116rpx;
left: 18rpx;
z-index: 100;
}
}
......@@ -1757,7 +3309,6 @@
height: 634rpx;
background: #FFFFFF;
border-radius: 16rpx;
margin-bottom: 37rpx;
position: relative;
.school-report-context-card-five-conclusion {
......@@ -1781,6 +3332,7 @@
#consumer-trend-line {
position: absolute;
top: 120rpx;
left: 10rpx;
z-index: 100;
}
......@@ -1824,13 +3376,12 @@
}
}
}
}
.school-report-footer {
height: 169rpx;
margin: 0 0 43rpx;
margin: 40rpx 0 43rpx;
padding: 33rpx 34rpx 42rpx 42rpx;
box-sizing: border-box;
background: no-repeat center/100% url(../../static/images/extendPermissionsBg.png);
......@@ -1881,16 +3432,17 @@
}
}
}
// 出入校报告
}
.no-open {
width: 100%;
height: 915rpx;
background: linear-gradient(180deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.97) 38%, #FFFFFF 100%);
position: absolute;
top: 1425rpx;
background: linear-gradient(180deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.97) 38%, #FFFFFF 100%);
padding: 309rpx 30rpx 63rpx;
box-sizing: border-box;
z-index: 101;
.no-open-solution {
height: 40rpx;
......@@ -1957,8 +3509,19 @@
.summary-item-icon {
font-size: 40rpx;
line-height: 45rpx;
}
.consumer-report-icon {
margin: 0 45rpx 0 70rpx;
}
.attendance-report-icon {
margin: 0 35rpx 0 134rpx;
}
.pubTalk-report-icon {
margin: 0 35rpx 0 102rpx;
}
}
.open-results-items-details {
......@@ -2018,6 +3581,92 @@
background: no-repeat center/100% url(../../static/images/consumerTrend.png);
margin-right: 25rpx;
}
// 出入校报告
.admission-notice-img {
width: 30rpx;
height: 27rpx;
background: no-repeat center/100% url(../../static/images/admissionNotice.png);
margin-right: 23rpx;
}
.admission-analysis-img {
width: 30rpx;
height: 32rpx;
background: no-repeat center/100% url(../../static/images/admissionAnalysis.png);
margin: 0 25rpx 0 135rpx;
}
.admission-record-img {
width: 29rpx;
height: 31rpx;
background: no-repeat center/100% url(../../static/images/admissionRecord.png);
margin-right: 24rpx;
}
.admission-image-img {
width: 29rpx;
height: 29rpx;
background: no-repeat center/100% url(../../static/images/admissionImage.png);
margin-right: 24rpx;
}
// 公话报告
.video-call-img {
width: 31rpx;
height: 24rpx;
background: no-repeat center/100% url(../../static/images/videoCall.png);
margin-right: 21rpx;
}
.communication-advice-img {
width: 38rpx;
height: 31rpx;
background: no-repeat center/100% url(../../static/images/communicationAdvice.png);
margin: 0 24rpx 0 165rpx;
}
.voice-call-img {
width: 25rpx;
height: 34rpx;
background: no-repeat center/100% url(../../static/images/voiceCall.png);
margin-right: 26rpx;
}
.call-count-img {
width: 30rpx;
height: 30rpx;
background: no-repeat center/100% url(../../static/images/callCount.png);
margin: 0 31rpx 0 165rpx;
}
.leave-word-img {
width: 30rpx;
height: 28rpx;
background: no-repeat center/100% url(../../static/images/leaveWord.png);
margin-right: 22rpx;
}
.call-duration-img {
width: 31rpx;
height: 35rpx;
background: no-repeat center/100% url(../../static/images/callDuration.png);
margin: 0 23rpx 0 165rpx;
}
.face-call-img {
width: 32rpx;
height: 31rpx;
background: no-repeat center/100% url(../../static/images/faceCall.png);
margin-right: 21rpx;
}
.leave-word-analysis-img {
width: 31rpx;
height: 31rpx;
background: no-repeat center/100% url(../../static/images/leaveWordAnalysis.png);
margin: 0 23rpx 0 165rpx;
}
}
}
}
......
......@@ -14,7 +14,7 @@
</view>
<view class="cardBox">
<view v-if="ifShow">
<view class="card" v-for="item of detailsList">
<view class="card" v-for="(item,index) of detailsList" :key="index">
<view class="temperatureResult">
<view class="studentInfo">
<view class="studentName">
......
......@@ -14,7 +14,7 @@
</view>
<view class="cardBox">
<view v-if="ifShow">
<view class="card" v-for="item of detailsList">
<view class="card" v-for="(item,index) of detailsList" :key="index">
<view class="temperatureResult">
<view class="studentInfo">
<view class="studentName">
......
......@@ -14,7 +14,7 @@
</view>
<view class="cardBox">
<view v-if="ifShow">
<view class="card" v-for="item of detailsList">
<view class="card" v-for="(item,index) of detailsList" :key="index">
<view class="temperatureResult">
<view class="studentInfo">
<view class="studentName">
......
......@@ -14,7 +14,7 @@
</view>
<view class="cardBox">
<view v-if="ifShow">
<view class="card" v-for="item of detailsList">
<view class="card" v-for="(item,index) of detailsList" :key="index">
<view class="temperatureResult">
<view class="studentInfo">
<view class="studentName">
......
......@@ -4,7 +4,10 @@
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<link rel="shortcut icon" type="image/x-icon" href="./faceico.ico"/>
<meta http-equiv="pragram" content="no-cache">
<meta http-equiv="cache-control" content="no-cache, must-revalidate">
<meta http-equiv="expires" content="0">
<link rel="shortcut icon" type="image/x-icon" href="./static/faceico.ico"/>
<title>
<%= htmlWebpackPlugin.options.title %>
</title>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment