|
|
|
|
@ -0,0 +1,363 @@
|
|
|
|
|
<template>
|
|
|
|
|
<div>
|
|
|
|
|
<Modal v-model="isShow" width="800" title="质控管理">
|
|
|
|
|
<table id="print-table">
|
|
|
|
|
<thead style="border: none">
|
|
|
|
|
<tr style="visibility: hidden">
|
|
|
|
|
<th class="border-none" style="width: calc(100% / 6)" />
|
|
|
|
|
<th class="border-none" style="width: calc(100% / 6)" />
|
|
|
|
|
<th class="border-none" style="width: calc(100% / 6)" />
|
|
|
|
|
<th class="border-none" style="width: calc(100% / 6)" />
|
|
|
|
|
<th class="border-none" style="width: calc(100% / 6)" />
|
|
|
|
|
<th class="border-none" style="width: calc(100% / 6)" />
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<th colspan="6">
|
|
|
|
|
<p style="font-size: 17px; letter-spacing: 1px">
|
|
|
|
|
四世同堂质控考评表
|
|
|
|
|
</p>
|
|
|
|
|
</th>
|
|
|
|
|
</tr>
|
|
|
|
|
</thead>
|
|
|
|
|
<tbody>
|
|
|
|
|
<tr>
|
|
|
|
|
<td colspan="2">
|
|
|
|
|
<span style="font-weight: 600">回访日期:</span>
|
|
|
|
|
{{ $moment(detail.created_at).format("YYYY年MM月DD日") }}
|
|
|
|
|
</td>
|
|
|
|
|
<td colspan="4">
|
|
|
|
|
<span style="font-weight: 600">护理员:</span>
|
|
|
|
|
{{ detail.nurse_name }}
|
|
|
|
|
</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
|
|
|
|
|
<td colspan="2">
|
|
|
|
|
<span style="font-weight: 600">姓名:</span>
|
|
|
|
|
{{ detail.customer ? detail.customer.name : "" }}
|
|
|
|
|
</td>
|
|
|
|
|
<td colspan="4">
|
|
|
|
|
<span style="font-weight: 600">性别:</span>
|
|
|
|
|
{{ detail.customer ? detail.customer.sex : "" }}
|
|
|
|
|
</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
|
|
|
|
|
<td colspan="2">
|
|
|
|
|
<span style="font-weight: 600">联系电话:</span>
|
|
|
|
|
{{ detail.customer ? detail.customer.phone : "" }}
|
|
|
|
|
</td>
|
|
|
|
|
<td colspan="4">
|
|
|
|
|
<span style="font-weight: 600">身份证号:</span>
|
|
|
|
|
{{ detail.customer ? detail.customer.idcard : "" }}
|
|
|
|
|
</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
|
|
|
|
|
<td colspan="2">
|
|
|
|
|
<span style="font-weight: 600">紧急联系人:</span>
|
|
|
|
|
{{ detail.customer ? detail.customer.contact_name : "" }}
|
|
|
|
|
</td>
|
|
|
|
|
<td colspan="4">
|
|
|
|
|
<span style="font-weight: 600">紧急联系电话:</span>
|
|
|
|
|
{{ detail.customer ? detail.customer.contact_phone : "" }}
|
|
|
|
|
</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td colspan="6">
|
|
|
|
|
<span style="font-weight: 600">服务对象住址:</span>
|
|
|
|
|
{{ detail.customer ? detail.customer.idcard_address : "" }}
|
|
|
|
|
</td>
|
|
|
|
|
</tr>
|
|
|
|
|
|
|
|
|
|
<tr>
|
|
|
|
|
<th
|
|
|
|
|
rowspan="2"
|
|
|
|
|
colspan="1"
|
|
|
|
|
style="
|
|
|
|
|
writing-mode: vertical-rl;
|
|
|
|
|
text-align: center;
|
|
|
|
|
letter-spacing: 2px;
|
|
|
|
|
"
|
|
|
|
|
>
|
|
|
|
|
考评详情
|
|
|
|
|
</th>
|
|
|
|
|
|
|
|
|
|
</tr>
|
|
|
|
|
|
|
|
|
|
<tr>
|
|
|
|
|
<td colspan="5">
|
|
|
|
|
<div v-if="detail.forms && detail.forms.length > 0" style="margin-top: 10px;">
|
|
|
|
|
<div
|
|
|
|
|
v-for="(form, index) in detail.forms"
|
|
|
|
|
:key="index"
|
|
|
|
|
style="margin-bottom: 5px;"
|
|
|
|
|
>
|
|
|
|
|
<span style="font-weight: 500;">{{ index + 1 }}. {{ form.ask }}:</span>
|
|
|
|
|
<span v-if="form.type === 'checkbox'">
|
|
|
|
|
{{ joinSelectedOptions(form.options || []) }}
|
|
|
|
|
</span>
|
|
|
|
|
<span v-else>
|
|
|
|
|
{{ form.score !== '' ? form.score : '-' }} 分
|
|
|
|
|
</span>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div v-else style="color: #999;">暂无考评数据</div>
|
|
|
|
|
</td>
|
|
|
|
|
</tr>
|
|
|
|
|
|
|
|
|
|
<tr>
|
|
|
|
|
<td colspan="1">
|
|
|
|
|
<span style="font-weight: 600">总分:</span>
|
|
|
|
|
|
|
|
|
|
</td>
|
|
|
|
|
<td colspan="5">
|
|
|
|
|
{{ detail.total_score }}
|
|
|
|
|
</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td colspan="6">
|
|
|
|
|
<div style="font-weight: 600">对护理员哪些方面要求改进:</div>
|
|
|
|
|
<div>{{ detail.tip }}</div>
|
|
|
|
|
</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td colspan="6">
|
|
|
|
|
<div style="font-weight: 600">对护理员有哪些方面肯定:</div>
|
|
|
|
|
<div>{{ detail.sure }}</div>
|
|
|
|
|
</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td colspan="6">
|
|
|
|
|
<div style="font-weight: 600">备注:</div>
|
|
|
|
|
<div>{{ detail.remark }}</div>
|
|
|
|
|
</td>
|
|
|
|
|
</tr>
|
|
|
|
|
|
|
|
|
|
<tr>
|
|
|
|
|
<th>服务对象/家属签字</th>
|
|
|
|
|
<td colspan="2">
|
|
|
|
|
<div style="position: relative; height: 100px">
|
|
|
|
|
<img
|
|
|
|
|
style="
|
|
|
|
|
width: 100px;
|
|
|
|
|
object-fit: contain;
|
|
|
|
|
transform: rotate(270deg) translateY(-50px);
|
|
|
|
|
position: absolute;
|
|
|
|
|
top: -50px;
|
|
|
|
|
transform-origin: center;
|
|
|
|
|
left: 50%;
|
|
|
|
|
"
|
|
|
|
|
:src="detail.sign_image ? detail.sign_image.url : ''"
|
|
|
|
|
alt=""
|
|
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
</td>
|
|
|
|
|
|
|
|
|
|
<th rowspan="2">
|
|
|
|
|
回访图片
|
|
|
|
|
</th>
|
|
|
|
|
<td colspan="3" rowspan="2">
|
|
|
|
|
<img
|
|
|
|
|
v-for="img in detail.files"
|
|
|
|
|
:key="img.id"
|
|
|
|
|
:src="img.url"
|
|
|
|
|
:alt="img.original_name"
|
|
|
|
|
style="max-height: 100px;margin-right: 4px;"
|
|
|
|
|
/>
|
|
|
|
|
</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<th>调查人员签字</th>
|
|
|
|
|
<td colspan="2">
|
|
|
|
|
<div style="position: relative; height: 100px">
|
|
|
|
|
<img
|
|
|
|
|
style="
|
|
|
|
|
width: 100px;
|
|
|
|
|
object-fit: contain;
|
|
|
|
|
transform: rotate(270deg) translateY(-50px);
|
|
|
|
|
position: absolute;
|
|
|
|
|
top: -50px;
|
|
|
|
|
transform-origin: center;
|
|
|
|
|
left: 50%;
|
|
|
|
|
"
|
|
|
|
|
:src="
|
|
|
|
|
detail.admin_sign_image ? detail.admin_sign_image.url : ''
|
|
|
|
|
"
|
|
|
|
|
alt=""
|
|
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<th>调查日期</th>
|
|
|
|
|
<td colspan="5">
|
|
|
|
|
<div style="text-align: center; letter-spacing: 1px">
|
|
|
|
|
{{ $moment(detail.created_at).format("YYYY年MM月DD日") }}
|
|
|
|
|
</div>
|
|
|
|
|
</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<th>回访地址</th>
|
|
|
|
|
<td colspan="5">
|
|
|
|
|
<div style="text-align: center; letter-spacing: 1px">
|
|
|
|
|
{{ detail.address }}
|
|
|
|
|
</div>
|
|
|
|
|
</td>
|
|
|
|
|
</tr>
|
|
|
|
|
</tbody>
|
|
|
|
|
</table>
|
|
|
|
|
|
|
|
|
|
<template #footer>
|
|
|
|
|
<div>
|
|
|
|
|
<Button type="text" @click="hide">取消</Button>
|
|
|
|
|
<Button type="primary" @click="exportPrint">打印</Button>
|
|
|
|
|
</div>
|
|
|
|
|
</template>
|
|
|
|
|
</Modal>
|
|
|
|
|
</div>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<script>
|
|
|
|
|
import { getForm } from '@/api/quality'
|
|
|
|
|
|
|
|
|
|
export default {
|
|
|
|
|
data() {
|
|
|
|
|
return {
|
|
|
|
|
isShow: false,
|
|
|
|
|
id: '',
|
|
|
|
|
detail: {}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
computed: {
|
|
|
|
|
isMark() {
|
|
|
|
|
return function(markName, str) {
|
|
|
|
|
const arr = str?.split('|') || []
|
|
|
|
|
return arr.indexOf(markName) !== -1 ? '✓' : ''
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
otherVal() {
|
|
|
|
|
return function(options, str) {
|
|
|
|
|
const arr = str?.split('|') || []
|
|
|
|
|
return (
|
|
|
|
|
arr.filter((i) => options.findIndex((j) => j === i) === -1)[0] || ' '
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
joinSelectedOptions() {
|
|
|
|
|
return function(options) {
|
|
|
|
|
// 过滤出 checked 为 true 的项
|
|
|
|
|
const selectedOptions = options.filter(option => option.checked === true)
|
|
|
|
|
// 提取这些项的 name 属性并使用逗号拼接
|
|
|
|
|
return selectedOptions.map(option => option.name).join(',')
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
watch: {
|
|
|
|
|
isShow(newVal) {
|
|
|
|
|
if (newVal) {
|
|
|
|
|
this.getDetail()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
methods: {
|
|
|
|
|
show() {
|
|
|
|
|
this.isShow = true
|
|
|
|
|
},
|
|
|
|
|
hide() {
|
|
|
|
|
this.isShow = false
|
|
|
|
|
},
|
|
|
|
|
setId(id) {
|
|
|
|
|
this.id = id
|
|
|
|
|
},
|
|
|
|
|
async getDetail() {
|
|
|
|
|
const res = await getForm(this.id)
|
|
|
|
|
console.log(res)
|
|
|
|
|
this.detail = res
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
exportPrint() {
|
|
|
|
|
const table = document.getElementById('print-table').outerHTML
|
|
|
|
|
const printWindow = window.open('', '_blank')
|
|
|
|
|
printWindow.document.write('<html><head><title>打印表格</title>')
|
|
|
|
|
printWindow.document.write(`
|
|
|
|
|
</head><style>
|
|
|
|
|
table {
|
|
|
|
|
width: 100%;
|
|
|
|
|
border-collapse: collapse;
|
|
|
|
|
margin: 20px 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
th, td {
|
|
|
|
|
border: 1px solid #ddd;
|
|
|
|
|
padding: 8px;
|
|
|
|
|
text-align: left;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
thead {
|
|
|
|
|
background-color: #f2f2f2;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
th {
|
|
|
|
|
word-break: keep-all;
|
|
|
|
|
text-align: center;
|
|
|
|
|
height: 40px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.border-none {
|
|
|
|
|
border: none;
|
|
|
|
|
}
|
|
|
|
|
.border-bottom-none {
|
|
|
|
|
border-top: none;
|
|
|
|
|
border-bottom: none;
|
|
|
|
|
}</style><body>`)
|
|
|
|
|
printWindow.document.write(table)
|
|
|
|
|
printWindow.document.write('</body></html>')
|
|
|
|
|
printWindow.document.close()
|
|
|
|
|
const imgEl = printWindow.document.querySelectorAll('img')
|
|
|
|
|
let temp = 0
|
|
|
|
|
imgEl.forEach((el) => {
|
|
|
|
|
el.addEventListener('load', (_) => {
|
|
|
|
|
temp++
|
|
|
|
|
if (temp === imgEl.length) {
|
|
|
|
|
printWindow.print()
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<style scoped lang="scss">
|
|
|
|
|
table {
|
|
|
|
|
width: 100%;
|
|
|
|
|
border-collapse: collapse;
|
|
|
|
|
margin: 20px 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
th,
|
|
|
|
|
td {
|
|
|
|
|
border: 1px solid #ddd;
|
|
|
|
|
padding: 8px;
|
|
|
|
|
text-align: left;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
thead {
|
|
|
|
|
background-color: #f2f2f2;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
th {
|
|
|
|
|
word-break: keep-all;
|
|
|
|
|
text-align: center;
|
|
|
|
|
height: 40px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.border-none {
|
|
|
|
|
border: none;
|
|
|
|
|
}
|
|
|
|
|
.border-bottom-none {
|
|
|
|
|
border-top: none;
|
|
|
|
|
border-bottom: none;
|
|
|
|
|
}
|
|
|
|
|
</style>
|