服务记录

This commit is contained in:
闫晓茹 2023-10-18 15:14:17 +08:00
parent 93d3baec6c
commit df4263551a
3 changed files with 423 additions and 283 deletions

View File

@ -0,0 +1,24 @@
import request from "../../request.js"
export function record(identity) {
return request({
url: `/applet/service/apply/record/${identity}`,
method: 'get',
header: {
region: uni.getStorageSync('region'),
Authorization: 'Bearer' + ' ' + uni.getStorageSync('token')
},
})
}
export function add(data) {
return request({
url: '/system/orderEvaluateInfo/add',
method: 'post',
header: {
region: uni.getStorageSync('region'),
Authorization: 'Bearer' + ' ' + uni.getStorageSync('token')
},
data:data
})
}

View File

@ -1,233 +1,235 @@
@charset "UTF-8";
/**
* 这里是uni-app内置的常用样式变量
*
* uni-app 官方扩展插件及插件市场https://ext.dcloud.net.cn上很多三方插件均使用了这些样式变量
* 如果你是插件开发者建议你使用scss预处理并在插件代码中直接使用这些变量无需 import 这个文件方便用户通过搭积木的方式开发整体风格一致的App
*
*/
/**
* 如果你是App开发者插件使用者你可以通过修改这些变量来定制自己的插件主题实现自定义主题功能
*
* 如果你的项目同样使用了scss预处理你也可以直接在你的 scss 代码中使用如下变量同时无需 import 这个文件
*/
/* 颜色变量 */
/* 行为相关颜色 */
/* 文字基本颜色 */
/* 背景颜色 */
/* 边框颜色 */
/* 尺寸变量 */
/* 文字尺寸 */
/* 图片尺寸 */
/* Border Radius */
/* 水平间距 */
/* 垂直间距 */
/* 透明度 */
/* 文章场景相关 */
.app {
background-color: #F7F5F5;
height: 100vh;
// height: 100%;
width: 100%;
color: #000000;
padding-top: 20rpx;
overflow: scroll;
background-color: #F7F5F5;
height: 100vh;
width: 100%;
color: #000000;
padding-top: 20rpx;
overflow: scroll;
}
.app .u-tabs-scroll-flex {
background: #F7F5F5;
width: 60%;
}
.app .u-scroll-view {
background: #F7F5F5 !important;
}
.app .record {
width: 95%;
height: 392rpx;
background: #FFFFFF;
box-shadow: 0rpx 9rpx 31rpx 9rpx rgba(0, 0, 0, 0.03);
border-radius: 5rpx;
margin: 0 auto;
position: relative;
font-family: Source Han Sans CN;
margin-bottom: 15rpx;
}
.app .record .top {
position: absolute;
background: red;
width: 90%;
left: 5%;
top: 7%;
}
.app .record .top ._span:nth-child(1) {
font-size: 26rpx;
font-weight: 600;
color: #000000;
position: absolute;
width: 80%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.app .record .top ._span:nth-child(2) {
font-weight: 500;
color: #868585;
position: absolute;
font-weight: 500;
font-size: 24rpx;
font-weight: 500;
color: #868585;
position: absolute;
left: 78%;
}
.app .record .top ._span:nth-child(3) {
font-weight: 500;
font-size: 28rpx;
font-weight: 600;
color: #26A888;
position: absolute;
right: 0%;
}
.app .record .recorddata {
width: 95%;
position: relative;
top: 23%;
left: 50%;
-webkit-transform: translateX(-50%);
transform: translateX(-50%);
border-bottom: 1rpx solid #E6E6E6;
padding-left: 3%;
}
.app .record .recorddata .recordbottom {
margin-bottom: 30rpx !important;
}
.app .record .recorddata .recorditem {
width: 100%;
font-size: 27rpx;
font-family: Source Han Sans CN;
font-weight: 400;
color: #868585;
margin-bottom: 20rpx;
}
.app .record .recorddata .recorditem ._span {
margin-left: 20rpx;
}
.app .record .evaluate .evaluatedata {
position: absolute;
width: 169rpx;
height: 61rpx;
background: #26A888;
border-radius: 5rpx;
text-align: center;
font-size: 28rpx;
font-weight: 400;
color: #FFFFFF;
line-height: 61rpx;
bottom: 8%;
right: 4%;
}
.app .record .evaluate ._span:nth-child(1) {
display: inline-block;
position: absolute;
height: 22rpx;
font-size: 28rpx;
font-weight: 400;
color: #868585;
left: 5%;
bottom: 16%;
}
.app .record .evaluate ._span:nth-child(2) {
display: inline-block;
position: absolute;
height: 22rpx;
font-size: 28rpx;
font-weight: 400;
color: #868585;
left: 30%;
bottom: 16%;
}
.app .record .evaluate ._span:nth-child(3) {
display: inline-block;
position: absolute;
right: 3%;
bottom: 10%;
}
.app .evaluateserver {
width: 100%;
font-size: 38rpx;
color: #000000;
line-height: 120rpx;
font-weight: 400;
text-align: center;
}
.app .evaluateserver .u-close {
top: 8% !important;
}
.app .star {
position: relative;
left: 11%;
height: 80rpx;
margin-bottom: 40rpx;
}
.app .star .evaluatstar {
font-family: Source Han Sans CN;
}
.app .star .evaluatstar .u-rate {
position: absolute !important;
left: 14% !important;
top: 50%;
-webkit-transform: translateY(-50%);
transform: translateY(-50%);
}
.app .star .evaluatstar .u-input__textarea {
background: #F6F6F6;
height: 200rpx !important;
}
.app .star .evaluatstar .u-input {
width: 66% !important;
height: 171rpx;
position: absolute;
left: 16%;
}
.app .star .evaluatstar ._span:nth-child(1) {
position: absolute;
display: inline;
font-size: 36rpx;
color: #000000;
font-weight: 400;
letter-spacing: 0.2em;
top: 50%;
-webkit-transform: translateY(-50%);
transform: translateY(-50%);
}
.app .star .evaluatstar ._span:nth-child(2) {
position: absolute;
display: inline-block;
}
.app .submits {
font-family: Source Han Sans CN;
font-size: 31rpx;
position: relative;
display: flex;
justify-content: space-around;
top: 23%;
text-align: center;
}
.app .submits ._span:nth-child(1) {
display: inline-block;
width: 290rpx;
height: 62rpx;
line-height: 62rpx;
background: #FFFFFF;
border: 1px solid #26A888;
border-radius: 5rpx;
font-weight: 500;
color: #26A888;
}
.app .submits ._span:nth-child(2) {
width: 290rpx;
height: 62rpx;
line-height: 62rpx;
background: #26A888;
border-radius: 5rpx;
font-weight: 500;
color: #FFFFFF;
display: inline-block;
}
::v-deep .u-tabs-scroll-flex {
background: #F7F5F5;
width: 60%;
}
::v-deep .u-scroll-view {
background: #F7F5F5 !important;
}
.record {
width: 95%;
height: 392rpx;
background: #FFFFFF;
box-shadow: 0rpx 9rpx 31rpx 9rpx rgba(0, 0, 0, 0.03);
border-radius: 5rpx;
margin: 0 auto;
position: relative;
font-family: Source Han Sans CN;
margin-bottom: 15rpx;
.top {
position: absolute;
background: red;
width: 90%;
left: 5%;
top: 7%;
span:nth-child(1) {
font-size: 32rpx;
font-weight: 600;
color: #000000;
position: absolute;
}
span:nth-child(2) {
font-weight: 500;
font-size: 32rpx;
font-weight: 500;
color: #868585;
position: absolute;
left: 18%;
}
span:nth-child(3) {
font-weight: 500;
font-size: 28rpx;
font-weight: 600;
color: #26A888;
position: absolute;
// left: 18%;
right: 0%;
}
}
.recorddata {
width: 95%;
position: relative;
top: 23%;
left: 50%;
transform: translateX(-50%);
border-bottom: 1rpx solid #E6E6E6;
padding-left: 3%;
.recordbottom {
margin-bottom: 30rpx !important;
}
.recorditem {
width: 100%;
font-size: 28rpx;
font-family: Source Han Sans CN;
font-weight: 400;
color: #868585;
margin-bottom: 20rpx;
span {
margin-left: 20rpx;
}
}
}
.evaluate {
.evaluatedata {
position: absolute;
width: 169rpx;
height: 61rpx;
background: #26A888;
border-radius: 5rpx;
text-align: center;
font-size: 28rpx;
font-weight: 400;
color: #FFFFFF;
line-height: 61rpx;
bottom: 8%;
right: 4%;
}
span:nth-child(1) {
display: inline-block;
position: absolute;
height: 22rpx;
font-size: 28rpx;
font-weight: 400;
color: #868585;
left: 5%;
bottom: 16%;
}
span:nth-child(2) {
display: inline-block;
position: absolute;
height: 22rpx;
font-size: 28rpx;
font-weight: 400;
color: #868585;
left: 30%;
bottom: 16%;
}
span:nth-child(3) {
display: inline-block;
position: absolute;
right: 3%;
bottom: 10%;
}
}
}
.evaluateserver {
width: 100%;
font-size: 38rpx;
color: #000000;
line-height: 120rpx;
font-weight: 400;
text-align: center;
::v-deep .u-close {
top: 8% !important;
}
}
.star {
position: relative;
left: 11%;
height: 80rpx;
margin-bottom: 40rpx;
.evaluatstar {
::v-deep .u-rate {
position: absolute !important;
left: 14% !important;
top: 50%;
transform: translateY(-50%);
}
::v-deep .u-input__textarea {
background: #F6F6F6;
height: 200rpx !important;
}
::v-deep .u-input {
width: 66% !important;
height: 171rpx;
position: absolute;
left: 16%;
}
font-family: Source Han Sans CN;
span:nth-child(1) {
position: absolute;
display: inline;
font-size: 36rpx;
color: #000000;
font-weight: 400;
letter-spacing: 0.2em;
top: 50%;
transform: translateY(-50%);
}
span:nth-child(2) {
position: absolute;
display: inline-block;
}
}
}
.submits {
font-family: Source Han Sans CN;
font-size: 31rpx;
position: relative;
display: flex;
justify-content: space-around;
top: 23%;
text-align: center;
span:nth-child(1) {
display: inline-block;
width: 290rpx;
height: 62rpx;
line-height: 62rpx;
background: #FFFFFF;
border: 1px solid #26A888;
border-radius: 5rpx;
font-weight: 500;
color: #26A888;
}
span:nth-child(2) {
width: 290rpx;
height: 62rpx;
line-height: 62rpx;
background: #26A888;
border-radius: 5rpx;
font-weight: 500;
color: #FFFFFF;
display: inline-block;
}
}
}

View File

@ -2,54 +2,90 @@
<view class="app">
<u-tabs :list="tabslist" :is-scroll="false" :current="tabscurrent" @change="tabschange" :show-bar='false'
active-color='#26A888'></u-tabs>
<view class="record">
<view class="top">
<span>大生化</span>
<span>(1/2)</span>
<span>未评价</span>
</view>
<view class="recorddata">
<view class="recorditem">
高血压个性服务包
<view class="" v-if="tabscurrent==0">
<!-- tabscurrent==0?servicelist:tabscurrent==1?noFileLists:tabscurrent==2?FileList:'' -->
<view class="record" v-for="(item,indexc) in servicelist" :key="indexc">
<view class="top">
<span>{{item.formName}}</span>
<span>{{item.performanceCount}}/{{item.serviceFreq}}</span>
<span v-if="item.orderEvaluateInfo==null">未评价</span>
<span v-if="item.orderEvaluateInfo">已评价</span>
</view>
<view class="recorditem">
履约时间2023-12-12<span>08:30</span>
<view class="recorddata">
<view class="recorditem">
{{item.packageName}}
</view>
<view class="recorditem">
履约时间{{item.performanceTime}}
</view>
<view class="recorditem recordbottom">
下次履约时间
<span v-if="item.performanceNextTime!=null">{{item.performanceNextTime}}</span>
</view>
</view>
<view class="recorditem recordbottom">
下次履约时间2023-12-12<span>08:30</span>
<view class="evaluate" @tap="evaluatetime(item)" v-if="item.orderEvaluateInfo==null">
<view class="evaluatedata">
立即评价
</view>
</view>
</view>
<view class="evaluate" @tap="evaluatetime">
<view class="evaluatedata">
立即评价
</view>
<view class="" v-for="(item,indexa) in noFileLists" :key="indexa">
<view class="record" v-if="tabscurrent==1&&item.orderEvaluateInfo==null">
<view class="top">
<span>{{item.formName}}</span>
<span>{{item.performanceCount}}/{{item.serviceFreq}}</span>
<span v-if="item.orderEvaluateInfo==null">未评价</span>
<span v-if="item.orderEvaluateInfo">已评价</span>
</view>
<view class="recorddata">
<view class="recorditem">
{{item.packageName}}
</view>
<view class="recorditem">
履约时间{{item.performanceTime}}
</view>
<view class="recorditem recordbottom">
下次履约时间
<span v-if="item.performanceNextTime!=null">{{item.performanceNextTime}}</span>
</view>
</view>
<view class="evaluate" @tap="evaluatetime(item)" v-if="item.orderEvaluateInfo==null">
<view class="evaluatedata">
立即评价
</view>
</view>
</view>
</view>
<view class="" v-for="(item,indexb) in FileList" :key="indexb">
<view class="record" v-if="item.orderEvaluateInfo!=null&&tabscurrent==2">
<view class="top">
<span>{{item.formName}}</span>
<span>{{item.performanceCount}}/{{item.serviceFreq}}</span>
<span v-if="item.orderEvaluateInfo==null">未评价</span>
<span v-if="item.orderEvaluateInfo">已评价</span>
</view>
<view class="recorddata">
<view class="recorditem">
{{item.packageName}}
</view>
<view class="recorditem">
履约时间{{item.performanceTime}}
</view>
<view class="recorditem recordbottom">
下次履约时间<span v-if="item.performanceNextTime!=null">{{item.performanceNextTime}}</span>
</view>
</view>
<view class="evaluate" @tap="evaluatetime(item)" v-if="item.orderEvaluateInfo==null">
<view class="evaluatedata">
立即评价
</view>
</view>
</view>
</view>
<view class="record">
<view class="top">
<span>大生化</span>
<span>(2/2)</span>
<span>已评价</span>
</view>
<view class="recorddata">
<view class="recorditem">
高血压个性服务包
</view>
<view class="recorditem">
履约时间2023-12-12<span>08:30</span>
</view>
<view class="recorditem recordbottom">
下次履约时间2023-12-12<span>08:30</span>
</view>
</view>
<view class="evaluate">
<span>2023-12-20</span>
<span>08:30:33</span>
<span><u-rate v-model="value" size="50" active-color="#FFA115" inactive-color="#b2b2b2" gutter="20"
disabled></u-rate></span>
</view>
</view>
<u-empty v-if="servicelist.orderEvaluateInfo==0" text="暂无"></u-empty>
<u-popup v-model="evaluateshow" mode="bottom" length="45%" border-radius="30" :closeable='true'>
<view class="evaluateserver">
立即评价
@ -57,56 +93,134 @@
<view class="star">
<view class="evaluatstar">
<span>评分</span>
<u-rate size="50" active-color="#FFA115" inactive-color="#b2b2b2" gutter="20"></u-rate>
<u-rate size="50" active-color="#FFA115" inactive-color="#b2b2b2" gutter="20" :count="count"
v-model="list.compositeScore"></u-rate>
</view>
</view>
<view class="star">
<view class="evaluatstar">
<span>评价</span>
<u-input v-model="cancelAppointmentReason" type="textarea" placeholder="请输入" />
<u-input v-model="list.evaluateContent" type="textarea" placeholder="请输入" />
</view>
</view>
<view class="submits">
<span>取消</span>
<span>提交</span>
<span @tap="submit(item)">提交</span>
</view>
</u-popup>
<u-toast ref="uToast" />
</view>
</template>
<script>
import {
record,
add
} from '@/api/pagesC/servicerecord/servicerecord.js'
export default {
data() {
return {
count: 4,
value: 2,
tabslist: [{
name: '全部',
orderStatus: '',
}, {
name: '未评价',
orderStatus: 'WAIT_PAY',
orderStatus: '1',
}, {
name: '已评价',
orderStatus: 'WAIT_RECEIVED_GOODS',
orderStatus: '2',
}, ],
servicelist: [],
tabscurrent: 0,
value: 4,
evaluateshow: false,
list: {
compositeScore: '',
evaluateContent: '',
patientId: '',
openId: '',
orderNo: '',
orderSource: 'FAMILY_DOCTOR',
evaluateChanne: 'WE_CHAT_APPLET',
},
query: {
pageNum: 1,
pageSize: 10,
identity: '',
isEvaluate: '',
},
FileList: [],
noFileLists: [],
}
},
onShow() {
const value = uni.getStorageSync('userinfo');
this.query.identity=value.cardNo
this.info()
},
methods: {
submit(item) {
console.log(this.list, '45')
add(this.list).then(res => {
if (res.code == 200) {
this.$refs.uToast.show({
title: '评价成功',
type: 'success',
duration: '1500'
})
this.evaluateshow = false;
this.info()
} else if (res.code == 500) {
this.$refs.uToast.show({
title: res.msg,
type: 'error',
duration: '1500'
})
}
})
},
info() {
this.FileList=[]
this.noFileLists=[]
this.servicelist=[]
record(this.query.identity).then(res => {
if(res.code==200){
res.data.forEach(e => {
if (e.orderEvaluateInfo) {
this.FileList.push(e)
} else {
this.noFileLists.push(e)
}
})
this.servicelist = res.data
}else if(res.code==500){
this.$refs.uToast.show({
title: res.msg,
type: 'error',
duration: '1500'
})
}
})
},
//tabs
tabschange(index) {
// console.log(this.tabslist)
this.tabscurrent = index;
// this.orderStatus = this.tabslist[index].orderStatus
// this.goodsOrderinfo();
},
//
evaluatetime() {
evaluatetime(item) {
console.log(item, '58')
this.evaluateshow = true;
this.list = item
this.list.orderNo = item.performanceNo
this.list.patientId = uni.getStorageSync('patientId');
this.list.openId = uni.getStorageSync('openid');
this.list.orderSource = 'FAMILY_DOCTOR'
this.list.evaluateChanne = 'WE_CHAT_APPLET'
}
}
@ -115,4 +229,4 @@
<style lang="scss">
@import './servicerecord.scss'
</style>
</style>