You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

363 lines
10 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<view>
<cpn-navbar title="回访详情" :is-back="true"></cpn-navbar>
<view class="container">
<view class="nursing-list">
<view class="list-item">
<view class="top">
<view class="time">{{detail.date}}</view>
</view>
<!-- <view class="line"></view> -->
<!-- <view style="padding: 20rpx 40rpx 0;font-size: 32rpx;line-height: 2;font-weight: 600;">
被护理人
</view>
<view class="center" v-if="detail.customer">
<view class="avatar">
<u-image :src="((detail.customer && detail.customer.idcard) ? getSexByIdcard(detail.customer.idcard) : '无') === '男' ? vuex_male_img : vuex_female_img" height="104"
width="104" shape="circle"></u-image>
</view>
<view class="user-info">
<view class="name">{{ detail.customer ? detail.customer.name : "" }}</view>
<view class="tel">
<view>
<u-icon name="phone" size="28" color="#1479FF"></u-icon>
</view>
<view class="text">{{ detail.customer ? detail.customer.phone : '无'}}</view>
</view>
<view class="address">
<view>
<u-icon name="map" size="28" color="#1479FF"></u-icon>
</view>
<view class="text">{{ detail.customer_address ? detail.customer_address.address : '无'}}</view>
</view>
</view>
<view class="sex">
<view class="sex-text">
{{ (detail.customer && detail.customer.idcard) ? getSexByIdcard(detail.customer.idcard) : '无' }}
</view>
</view>
</view> -->
<view class="line" style="margin-top: 22rpx;"></view>
<view class="bottom">
<view class="bottom-item">
<view class="bottom-item__title">护理员</view>
<view class="bottom-item__value">{{ detail.nurse_name?detail.nurse_name:'' }}</view>
</view>
<view class="bottom-item" v-for="item in detail.forms">
<block v-if="item.type==='checkbox'">
<view class="bottom-item__title">{{item.ask}}</view>
<view class="bottom-item__value">{{ joinSelectedOptions(item.options) }}</view>
</block>
<block v-else>
<view class="bottom-item__title">{{item.ask}}</view>
<view class="bottom-item__value">分值:{{ item.score }}</view>
</block>
</view>
<view class="bottom-item">
<view class="bottom-item__title">总分(得90分及以上为及格)</view>
<view class="bottom-item__value">{{ detail.total_score }}</view>
</view>
<view class="bottom-item">
<view class="bottom-item__title">对护理员哪些方面要求改进</view>
<view class="bottom-item__value">{{ detail.tip?detail.tip:'' }}</view>
</view>
<view class="bottom-item">
<view class="bottom-item__title">对护理员有哪些方面肯定</view>
<view class="bottom-item__value">{{ detail.sure?detail.sure:''}}</view>
</view>
<view class="bottom-item">
<view class="bottom-item__title">备注</view>
<view class="bottom-item__value">{{ detail.remark?detail.remark:'' }}</view>
</view>
<view class="bottom-item">
<view class="bottom-item__title">回访地址</view>
<view class="bottom-item__value">
{{ `${(detail.longitude || detail.latitude) ? ('(' + detail.longitude + ',' + detail.latitude + ')') : ''}${detail.address?detail.address:''}` }}
</view>
</view>
<view class="bottom-item">
<view class="bottom-item__title">回访图片</view>
<view class="bottom-item__value">
<u-image :width="150"
:height="150"
style="margin: 5rpx;"
:border-radius="8"
v-for="img in detail.files"
:key="img.id"
:src="img.url"
@click="showimg(img.url)"></u-image>
</view>
</view>
<view class="bottom-item sign">
<view class="bottom-item__title">服务对象/家属签名</view>
<view class="bottom-item__value">
<u-image :width="300"
:height="300"
style="margin-bottom: 10rpx;"
:border-radius="8"
:src="detail.sign_image ? detail.sign_image.url : ''"
@click="showimg(detail.sign_image ? detail.sign_image.url : '')"></u-image>
</view>
</view>
<view class="bottom-item sign">
<view class="bottom-item__title">调查人员签名</view>
<view class="bottom-item__value">
<u-image :width="300"
:height="300"
style="margin-bottom: 10rpx;"
:border-radius="8"
:src="detail.admin_sign_image ? detail.admin_sign_image.url : ''"
@click="showimg(detail.admin_sign_image ? detail.admin_sign_image.url : '')"></u-image>
</view>
</view>
</view>
</view>
</view>
<u-button class="operate-item"
:custom-style="{ width: '90%', 'margin-left': '5%' }"
type="primary"
size="medium"
ripple
@click="pageTo('/package_sub/pages/addQuality/addQuality' + '?customer_id=' + detail.customer_id + '&id=' + detail.id)">编辑</u-button>
</view>
</view>
</template>
<script>
import { getSexByIdcard } from "@/common/util"
export default {
data() {
return {
id: "",
detail: {},
};
},
methods: {
showimg(url) {
if (url)
this.$showimg({
imgs: [url],
current: 0
})
},
getSexByIdcard,
pageTo (url) {
uni.navigateTo({
url
})
},
async getDetail () {
const res = await this.$u.api.adminQualityDetail(this.id)
console.log(res)
this.detail = res;
},
/**
* 拼接选中项的名称
* @param {Array} options - 选项数组,每个元素包含 name 和 checked 属性
* @returns {string} - 选中项的名称用逗号拼接的字符串,若无选中项则返回空字符串
*/
joinSelectedOptions(options) {
// 过滤出 checked 为 true 的项
const selectedOptions = options.filter(option => option.checked === true);
// 提取这些项的 name 属性并使用逗号拼接
return selectedOptions.map(option => option.name).join('');
}
},
onLoad(option) {
this.id = option.id;
this.getDetail()
},
}
</script>
<style lang="scss">
.container {
padding-bottom: 20rpx;
}
.nursing-list {
margin-top: 20rpx;
.list-item {
width: 710rpx;
background: #FFFFFF;
box-shadow: 0rpx 4rpx 10rpx 0rpx rgba(219, 218, 218, 0.5);
margin: 0 20rpx 26rpx 22rpx;
.top {
display: flex;
justify-content: space-between;
align-items: center;
padding: 22rpx 0;
.time {
height: 40rpx;
font-size: 40rpx;
font-weight: 500;
color: #36596A;
line-height: 40rpx;
padding-left: 20rpx;
}
.status {
display: flex;
align-items: center;
.status-icon {
margin-right: 10rpx;
}
.status-text {
width: 84rpx;
height: 40rpx;
font-size: 28rpx;
font-weight: 500;
color: #36596A;
line-height: 40rpx;
margin-right: 20rpx;
}
}
}
.line {
width: 670rpx;
height: 2rpx;
border: 2rpx solid #EEEFF5;
margin: 0 auto;
}
.center {
display: flex;
justify-content: space-between;
padding-top: 24rpx;
.avatar {
padding-top: 4rpx;
padding-left: 20rpx;
}
.user-info {
flex: 1;
padding-left: 24rpx;
.name {
width: 270rpx;
height: 48rpx;
font-size: 32rpx;
font-weight: 500;
color: #333333;
}
.tel {
height: 40rpx;
font-size: 28rpx;
font-weight: 500;
color: #36596A;
line-height: 40rpx;
display: flex;
margin-top: 18rpx;
.text {
margin-left: 10rpx;
}
}
.address {
font-size: 28rpx;
font-weight: 500;
color: #36596A;
line-height: 40rpx;
display: flex;
margin-top: 14rpx;
.text {
margin-left: 10rpx;
}
}
}
.sex {
width: 40rpx;
height: 40rpx;
background: #FDECEC;
opacity: 0.5;
display: flex;
justify-content: center;
align-items: center;
margin-right: 20rpx;
.sex-text {
width: 28rpx;
height: 34rpx;
font-size: 28rpx;
font-weight: 500;
color: #36596A;
line-height: 34rpx;
}
}
}
.bottom {
margin-top: 16rpx;
padding: 10rpx 60rpx 26rpx;
&-item {
display: flex;
justify-content: space-between;
line-height: 2;
padding-left: 30rpx;
position: relative;
flex-wrap: wrap;
&__title {
flex-shrink: 0;
flex-basis: 100%;
}
&__value {
word-break: break-all;
font-weight: bolder;
display: flex;
}
&::before {
content: "";
width: 12rpx;
height: 12rpx;
border-radius: 100%;
background: #3877f6;
position: absolute;
top: calc(28rpx - 6rpx);
left: 0;
}
}
}
}
}
.sign ::v-deep .u-image {
transform: rotate(270deg);
}
</style>