|
|
|
<template>
|
|
|
|
<div id="operation-record" style=" background: #fff; padding: 10px 20px 50px 20px;page-break-after:always">
|
|
|
|
<div v-if="!onlyRead" class="btnBox">
|
|
|
|
<el-button v-print="print" size="small">打印</el-button>
|
|
|
|
<el-button type="primary" size="small" @click="handleSaveTable">保存</el-button>
|
|
|
|
<el-button type="danger" size="small" @click="handleDelete">删除</el-button>
|
|
|
|
</div>
|
|
|
|
<div id="optomeFunc" style="width: 840px;padding-right: 8px" class="printBox">
|
|
|
|
<div class="flex j-c" style="padding-bottom: 8px">
|
|
|
|
<img width="320" src="@/assets/img/xianganlogo.png">
|
|
|
|
</div>
|
|
|
|
<p style="color:#000000;font-size:24px;font-weight: 700;letter-spacing: 10px;text-align:center;margin-bottom: 10px;word-spacing: 3px">
|
|
|
|
验光报告单
|
|
|
|
</p>
|
|
|
|
<div style="display: flex;justify-content: space-around">
|
|
|
|
<span class="bold">登记号:<el-input v-model="dataForm.patientId" style="width: 80px" placeholder="" /></span>
|
|
|
|
<span class="bold">姓名:<el-input v-model="dataForm.patientName" style="width: 90px" placeholder="" /></span>
|
|
|
|
<span class="bold">性别:<el-input v-model="dataForm.patientSex" style="width: 60px" placeholder="" /></span>
|
|
|
|
<span class="bold">年龄:<el-input v-model="dataForm.patientAge" style="width: 60px" placeholder="" /></span>
|
|
|
|
<span class="bold">屈光发育档案:
|
|
|
|
<el-select v-model="dataForm.file" placeholder="" style="display: inline-block;width: 100px">
|
|
|
|
<el-option
|
|
|
|
v-for="item in fileList"
|
|
|
|
:key="item.id"
|
|
|
|
:label="item.name"
|
|
|
|
:value="item.name"
|
|
|
|
/>
|
|
|
|
</el-select>
|
|
|
|
</span>
|
|
|
|
</div>
|
|
|
|
<div class="operation-record-table">
|
|
|
|
<el-table :data="tableData" :span-method="objectSpanMethod" border style="width: 100%; margin-top: 5px">
|
|
|
|
<el-table-column label="" width="" align="center" :resizable="false">
|
|
|
|
<template slot-scope="scope">
|
|
|
|
<div v-if="scope.row.name == '1'">
|
|
|
|
<div class="width-180 center">
|
|
|
|
瞳孔状态
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div v-else-if="scope.row.name == '基本信息'">
|
|
|
|
<div class="width-180 center">
|
|
|
|
基本信息
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div v-else-if="scope.row.name == '3'">
|
|
|
|
<div class="width-180 center">
|
|
|
|
右眼
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div v-else-if="scope.row.name == '4'">
|
|
|
|
<div class="width-180 center">
|
|
|
|
左眼
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div v-else-if="scope.row.name == '5'">
|
|
|
|
<div class="width-180 center">
|
|
|
|
左眼
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div v-else-if="scope.row.name == '最终处方'">
|
|
|
|
<div class="width-180 center">
|
|
|
|
<el-button type="text" plain style="font-size: 16px;padding: 3px 8px" @click="copyData">最终处方</el-button>
|
|
|
|
<div style="display: flex;flex-wrap: wrap;">
|
|
|
|
<div v-for="(item,index) in remoteUse" :key="index" class="check" style="margin-left: 22px;font-size: 14px" @click="item.isSelect = !item.isSelect">
|
|
|
|
<input type="checkbox" :checked="item.isSelect">
|
|
|
|
<div>{{ item.name }}</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<p v-else>{{ scope.row.name }}</p>
|
|
|
|
</template>
|
|
|
|
</el-table-column>
|
|
|
|
<el-table-column label="" width="" :resizable="false">
|
|
|
|
<template slot-scope="scope">
|
|
|
|
<div v-if="scope.row.name == '1'">
|
|
|
|
<div class="">
|
|
|
|
<div style="display: flex;flex-wrap: wrap">
|
|
|
|
<el-select v-model="scope.row.value" placeholder="" style="width: 100%">
|
|
|
|
<el-option
|
|
|
|
v-for="item in pupil"
|
|
|
|
:key="item.id"
|
|
|
|
:label="item.name"
|
|
|
|
:value="item.name"
|
|
|
|
/>
|
|
|
|
</el-select>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div v-if="scope.row.name == '3'">
|
|
|
|
<div class="width-100 center">
|
|
|
|
<el-input v-model="scope.row.a" placeholder="" />
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div v-if="scope.row.name == '4'">
|
|
|
|
<div class="width-100 center">
|
|
|
|
<el-input v-model="scope.row.a" placeholder="" />
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div v-if="scope.row.name == '5'">
|
|
|
|
<div class="width-100 center">
|
|
|
|
<el-input v-model="scope.row.a" placeholder="" />
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div v-if="scope.row.name == '基本信息'">
|
|
|
|
<div class="width-100 center">
|
|
|
|
<el-select v-model="scope.row.vision" placeholder="" style="width: 100%" @change="selectVision">
|
|
|
|
<el-option
|
|
|
|
v-for="item in visionList"
|
|
|
|
:key="item.id"
|
|
|
|
:label="item.name"
|
|
|
|
:value="item.id"
|
|
|
|
/>
|
|
|
|
</el-select>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div v-if="scope.row.name == '最终处方'">
|
|
|
|
<div class="width-100 center" style="text-align: center">
|
|
|
|
右眼
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div v-if="scope.row.name == '配镜建议'">
|
|
|
|
<div style="display: flex">
|
|
|
|
<div style="display: flex;flex-wrap: wrap">
|
|
|
|
<div v-for="(item,index) in suggest" :key="index" class="check" @click="item.isSelect = !item.isSelect">
|
|
|
|
<input type="checkbox" :checked="item.isSelect">
|
|
|
|
<div>{{ item.name }}</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div style="margin-left: 26px">
|
|
|
|
<span>其他:</span>
|
|
|
|
<el-select v-model="scope.row.value" placeholder="" style="width: 220px;display: inline-block">
|
|
|
|
<el-option
|
|
|
|
v-for="item in others"
|
|
|
|
:key="item.id"
|
|
|
|
:label="item.name"
|
|
|
|
:value="item.name"
|
|
|
|
/>
|
|
|
|
</el-select>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div v-if="scope.row.name == '备注'">
|
|
|
|
<div>
|
|
|
|
<el-input v-model="scope.row.value" type="textarea" :autosize="{ minRows: 1, maxRows: 3}" placeholder="" />
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</template>
|
|
|
|
</el-table-column>
|
|
|
|
<el-table-column label="" width="" :resizable="false">
|
|
|
|
<template slot-scope="scope">
|
|
|
|
<div v-if="scope.row.name == '基本信息'">
|
|
|
|
<div class="width-180 center">
|
|
|
|
右眼
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div v-if="scope.row.name == '验光检查'">
|
|
|
|
<div class="width-180 center">
|
|
|
|
球镜(DS)
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div v-if="scope.row.name == '1'">
|
|
|
|
<div class="width-180 center">
|
|
|
|
检查方法
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div v-if="scope.row.name == '3'">
|
|
|
|
<div class="width-100 center">
|
|
|
|
<el-input v-model="scope.row.b" placeholder="" />
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div v-if="scope.row.name == '4'">
|
|
|
|
<div class="width-100 center">
|
|
|
|
<el-input v-model="scope.row.b" placeholder="" />
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div v-if="scope.row.name == '5'">
|
|
|
|
<div class="width-100 center">
|
|
|
|
<el-input v-model="scope.row.b" placeholder="" />
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div v-if="scope.row.name == '最终处方'">
|
|
|
|
<div class="width-100 center">
|
|
|
|
<el-input v-model="scope.row.a" placeholder="" />
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</template>
|
|
|
|
</el-table-column>
|
|
|
|
<el-table-column label="" width="" :resizable="false">
|
|
|
|
<template slot-scope="scope">
|
|
|
|
<div v-if="scope.row.name == '基本信息'">
|
|
|
|
<div class="width-100 center">
|
|
|
|
<el-input v-model="scope.row.od" placeholder="" />
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div v-if="scope.row.name == '验光检查'">
|
|
|
|
<div class="width-100 center">
|
|
|
|
柱镜(DC)
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div v-if="scope.row.name == '1'">
|
|
|
|
<div>
|
|
|
|
<div style="display: flex;flex-wrap: wrap">
|
|
|
|
<el-select v-model="scope.row.examValue" placeholder="">
|
|
|
|
<el-option
|
|
|
|
v-for="item in examine"
|
|
|
|
:key="item.id"
|
|
|
|
:label="item.name"
|
|
|
|
:value="item.name"
|
|
|
|
/>
|
|
|
|
</el-select>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div v-if="scope.row.name == '3'">
|
|
|
|
<div class="width-100 center">
|
|
|
|
<el-input v-model="scope.row.c" placeholder="" />
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div v-if="scope.row.name == '4'">
|
|
|
|
<div class="width-100 center">
|
|
|
|
<el-input v-model="scope.row.c" placeholder="" />
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div v-if="scope.row.name == '5'">
|
|
|
|
<div class="width-100 center">
|
|
|
|
<el-input v-model="scope.row.c" placeholder="" />
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div v-if="scope.row.name == '最终处方'">
|
|
|
|
<div class="width-100 center">
|
|
|
|
<el-input v-model="scope.row.b" placeholder="" />
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</template>
|
|
|
|
</el-table-column>
|
|
|
|
<el-table-column label="" width="" :resizable="false">
|
|
|
|
<template slot-scope="scope">
|
|
|
|
<div v-if="scope.row.name == '基本信息'">
|
|
|
|
<div class="width-180 center">
|
|
|
|
左眼
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div v-if="scope.row.name == '验光检查'">
|
|
|
|
<div class="width-180 center">
|
|
|
|
轴位(A)
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div v-if="scope.row.name == '3'">
|
|
|
|
<div class="width-100 center">
|
|
|
|
<el-input v-model="scope.row.d" placeholder="" />
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div v-if="scope.row.name == '4'">
|
|
|
|
<div class="width-100 center">
|
|
|
|
<el-input v-model="scope.row.d" placeholder="" />
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div v-if="scope.row.name == '5'">
|
|
|
|
<div class="width-100 center">
|
|
|
|
<el-input v-model="scope.row.d" placeholder="" />
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div v-if="scope.row.name == '最终处方'">
|
|
|
|
<div class="width-100 center">
|
|
|
|
<el-input v-model="scope.row.c" placeholder="" />
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</template>
|
|
|
|
</el-table-column>
|
|
|
|
<el-table-column label="" width="" :resizable="false">
|
|
|
|
<template slot-scope="scope">
|
|
|
|
<div v-if="scope.row.name == '基本信息'">
|
|
|
|
<div class="width-100 center">
|
|
|
|
<el-input v-model="scope.row.os" placeholder="" />
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div v-if="scope.row.name == '验光检查'">
|
|
|
|
<div class="width-180 center">
|
|
|
|
矫正视力(VA)
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div v-if="scope.row.name == '3'">
|
|
|
|
<div class="width-100 center">
|
|
|
|
<el-input v-model="scope.row.e" placeholder="" />
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div v-if="scope.row.name == '4'">
|
|
|
|
<div class="width-100 center">
|
|
|
|
<el-input v-model="scope.row.e" placeholder="" />
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div v-if="scope.row.name == '5'">
|
|
|
|
<div class="width-100 center">
|
|
|
|
<el-input v-model="scope.row.e" placeholder="" />
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div v-if="scope.row.name == '最终处方'">
|
|
|
|
<div class="width-100 center">
|
|
|
|
<el-input v-model="scope.row.d" placeholder="" />
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</template>
|
|
|
|
</el-table-column>
|
|
|
|
<el-table-column label="" width="" :resizable="false">
|
|
|
|
<template slot-scope="scope">
|
|
|
|
<div v-if="scope.row.name == '验光检查'">
|
|
|
|
<div class="width-180 center">
|
|
|
|
下加光(ADD)
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div v-if="scope.row.name == '3'">
|
|
|
|
<div class="width-100 center">
|
|
|
|
<el-input v-model="scope.row.f" placeholder="" />
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div v-if="scope.row.name == '4'">
|
|
|
|
<div class="width-100 center">
|
|
|
|
<el-input v-model="scope.row.f" placeholder="" />
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div v-if="scope.row.name == '5'">
|
|
|
|
<div class="width-100 center">
|
|
|
|
<el-input v-model="scope.row.f" placeholder="" />
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div v-if="scope.row.name == '最终处方'">
|
|
|
|
<div class="width-100 center">
|
|
|
|
<el-input v-model="scope.row.e" placeholder="" />
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</template>
|
|
|
|
</el-table-column>
|
|
|
|
</el-table>
|
|
|
|
<div style="display: flex;justify-content: space-between">
|
|
|
|
<div class="width-180" style="text-align: left">
|
|
|
|
<span style="display: inline-block;margin-top: 12px">视光师:</span>
|
|
|
|
<img v-if="dataForm.optometrist" :src="dataForm.optometrist" alt="" style="width: 80px;height: 50px;border-style:none;">
|
|
|
|
</div>
|
|
|
|
<div class="width-180" style="text-align: left">
|
|
|
|
<el-input v-model="dataForm.physician" placeholder="" style="margin-top: 12px">
|
|
|
|
<template slot="prepend">医师:</template>
|
|
|
|
</el-input>
|
|
|
|
</div>
|
|
|
|
<div class="width-180" style="text-align: left;margin-top: 12px">
|
|
|
|
日期:<el-date-picker
|
|
|
|
v-model="dataForm.date"
|
|
|
|
type="date"
|
|
|
|
placeholder="选择日期"
|
|
|
|
/>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<p style="text-align: left;margin-top: 12px;font-size: 14px">说明:1.持本报告但配镜仅供参考。 2.本报告单有效期3个月</p>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</template>
|
|
|
|
<script>
|
|
|
|
export default {
|
|
|
|
props: {
|
|
|
|
isSearch: {
|
|
|
|
type: String,
|
|
|
|
default: ''
|
|
|
|
},
|
|
|
|
patientId: {
|
|
|
|
type: String,
|
|
|
|
default: ''
|
|
|
|
},
|
|
|
|
formContent: {
|
|
|
|
type: Object,
|
|
|
|
default: () => { }
|
|
|
|
},
|
|
|
|
onlyRead: {
|
|
|
|
type: Boolean,
|
|
|
|
default: false
|
|
|
|
}
|
|
|
|
},
|
|
|
|
data() {
|
|
|
|
return {
|
|
|
|
ws: null, // 建立的连接
|
|
|
|
lockReconnect: false, // 是否真正建立连接
|
|
|
|
timeout: 28 * 1000, // 30秒一次心跳
|
|
|
|
timeoutObj: null, // 心跳心跳倒计时
|
|
|
|
serverTimeoutObj: null, // 心跳倒计时
|
|
|
|
timeoutnum: null, // 断开 重连倒计时
|
|
|
|
dataForm: {
|
|
|
|
patientId: '',
|
|
|
|
patientName: '',
|
|
|
|
patientSex: '',
|
|
|
|
patientAge: '',
|
|
|
|
file: '',
|
|
|
|
optometrist: '',
|
|
|
|
physician: '',
|
|
|
|
date: ''
|
|
|
|
},
|
|
|
|
fileList: [
|
|
|
|
{
|
|
|
|
name: '是',
|
|
|
|
id: '1'
|
|
|
|
}, {
|
|
|
|
name: '否',
|
|
|
|
id: '2'
|
|
|
|
}],
|
|
|
|
visionList: [
|
|
|
|
{
|
|
|
|
name: '裸眼视力',
|
|
|
|
id: '1'
|
|
|
|
}, {
|
|
|
|
name: '矫正视力',
|
|
|
|
id: '2'
|
|
|
|
}],
|
|
|
|
pupil: [
|
|
|
|
{
|
|
|
|
name: '正常瞳孔',
|
|
|
|
id: '1',
|
|
|
|
isSelect: false
|
|
|
|
}, {
|
|
|
|
name: '复方托吡卡胺',
|
|
|
|
id: '2',
|
|
|
|
isSelect: false
|
|
|
|
}, {
|
|
|
|
name: '美多丽',
|
|
|
|
id: '3',
|
|
|
|
isSelect: false
|
|
|
|
}, {
|
|
|
|
name: '赛飞杰',
|
|
|
|
id: '4',
|
|
|
|
isSelect: false
|
|
|
|
}, {
|
|
|
|
name: '阿托品',
|
|
|
|
id: '5',
|
|
|
|
isSelect: false
|
|
|
|
}
|
|
|
|
],
|
|
|
|
examine: [
|
|
|
|
{
|
|
|
|
name: '检影',
|
|
|
|
id: '1',
|
|
|
|
isSelect: false
|
|
|
|
}, {
|
|
|
|
name: '综合',
|
|
|
|
id: '2',
|
|
|
|
isSelect: false
|
|
|
|
}
|
|
|
|
],
|
|
|
|
remoteUse: [
|
|
|
|
{
|
|
|
|
name: '远用',
|
|
|
|
isSelect: false
|
|
|
|
}, {
|
|
|
|
name: '近用',
|
|
|
|
isSelect: false
|
|
|
|
}
|
|
|
|
],
|
|
|
|
suggest: [
|
|
|
|
{
|
|
|
|
name: '单光',
|
|
|
|
isSelect: false
|
|
|
|
}, {
|
|
|
|
name: '离焦镜片',
|
|
|
|
isSelect: false
|
|
|
|
}, {
|
|
|
|
name: '软镜',
|
|
|
|
isSelect: false
|
|
|
|
}, {
|
|
|
|
name: 'RGP',
|
|
|
|
isSelect: false
|
|
|
|
}, {
|
|
|
|
name: 'OK镜',
|
|
|
|
isSelect: false
|
|
|
|
}
|
|
|
|
],
|
|
|
|
others: [
|
|
|
|
{
|
|
|
|
name: '抗疲劳',
|
|
|
|
id: '1'
|
|
|
|
}, {
|
|
|
|
name: '渐进',
|
|
|
|
id: '2'
|
|
|
|
}, {
|
|
|
|
name: '低视力助视器',
|
|
|
|
id: '3'
|
|
|
|
}],
|
|
|
|
originTableData: [],
|
|
|
|
tableData: [
|
|
|
|
{
|
|
|
|
name: '基本信息',
|
|
|
|
vision: '1',
|
|
|
|
od: '', // 右眼
|
|
|
|
os: '' // 左眼
|
|
|
|
}, {
|
|
|
|
name: '1',
|
|
|
|
value: '', // 瞳孔状态
|
|
|
|
examValue: '' // 检查方法
|
|
|
|
}, {
|
|
|
|
name: '验光检查'
|
|
|
|
}, {
|
|
|
|
name: '3', // 验光检查 右眼
|
|
|
|
a: '', // 球镜(DS)
|
|
|
|
b: '', // 柱镜(DC)
|
|
|
|
c: '', // 轴位(A)
|
|
|
|
d: '', // 矫正视力(VA)
|
|
|
|
e: '' // 下加光(ADD)
|
|
|
|
}, {
|
|
|
|
name: '4', // 验光检查 左眼
|
|
|
|
a: '',
|
|
|
|
b: '',
|
|
|
|
c: '',
|
|
|
|
d: '',
|
|
|
|
e: ''
|
|
|
|
}, {
|
|
|
|
name: '最终处方', // 最终处方 右眼
|
|
|
|
a: '',
|
|
|
|
b: '',
|
|
|
|
c: '',
|
|
|
|
d: '',
|
|
|
|
e: ''
|
|
|
|
}, {
|
|
|
|
name: '5', // 最终处方 右眼
|
|
|
|
a: '',
|
|
|
|
b: '',
|
|
|
|
c: '',
|
|
|
|
d: '',
|
|
|
|
e: ''
|
|
|
|
}, {
|
|
|
|
name: '配镜建议',
|
|
|
|
value: '' // 其他
|
|
|
|
}, {
|
|
|
|
name: '备注',
|
|
|
|
value: '' // 备注
|
|
|
|
}],
|
|
|
|
print: {
|
|
|
|
id: 'optomeFunc'
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
destroyed() {
|
|
|
|
this.ws.close()
|
|
|
|
},
|
|
|
|
mounted() {
|
|
|
|
this.originTableData = JSON.parse(JSON.stringify(this.tableData))
|
|
|
|
this.setSign()
|
|
|
|
this.initWebSoket()
|
|
|
|
this.getPatientData()
|
|
|
|
this.setVision()
|
|
|
|
},
|
|
|
|
methods: {
|
|
|
|
setSign() {
|
|
|
|
const userData = window.sessionStorage.getItem('qg-userData')
|
|
|
|
const date = this.$moment().format('YYYY-MM-DD')
|
|
|
|
const mzName = window.sessionStorage.getItem('mzDoctorName')
|
|
|
|
this.dataForm.optometrist = userData.signImgBase
|
|
|
|
this.dataForm.physician = mzName
|
|
|
|
this.dataForm.date = date
|
|
|
|
},
|
|
|
|
setData() {
|
|
|
|
this.dataForm = this.formContent.a
|
|
|
|
this.tableData = this.formContent.b
|
|
|
|
this.setSign()
|
|
|
|
this.getPatientData()
|
|
|
|
},
|
|
|
|
reSet() {
|
|
|
|
this.dataForm = {
|
|
|
|
patientId: '',
|
|
|
|
patientName: '',
|
|
|
|
patientSex: '',
|
|
|
|
patientAge: '',
|
|
|
|
file: '',
|
|
|
|
optometrist: '',
|
|
|
|
physician: '',
|
|
|
|
date: ''
|
|
|
|
}
|
|
|
|
this.tableData = Object.assign([], this.originTableData)
|
|
|
|
this.setSign()
|
|
|
|
this.setVision()
|
|
|
|
this.getPatientData()
|
|
|
|
},
|
|
|
|
setVision() {
|
|
|
|
const data = window.sessionStorage.getItem('shili') ? JSON.parse(window.sessionStorage.getItem('shili')) : []
|
|
|
|
if (data.length) {
|
|
|
|
const one = data[0].odVan
|
|
|
|
const two = data[0].odVag
|
|
|
|
if (one) {
|
|
|
|
this.tableData[0].vision = '1'
|
|
|
|
this.selectVision('1')
|
|
|
|
} else if (two && !one) {
|
|
|
|
this.tableData[0].vision = '2'
|
|
|
|
this.selectVision('2')
|
|
|
|
} else {
|
|
|
|
this.tableData[0].vision = '1'
|
|
|
|
this.selectVision('1')
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
selectVision(id) {
|
|
|
|
if (id === '1') {
|
|
|
|
// 裸眼视力
|
|
|
|
const data = window.sessionStorage.getItem('shili') ? JSON.parse(window.sessionStorage.getItem('shili')) : []
|
|
|
|
if (data.length) {
|
|
|
|
this.tableData[0].od = data[0].odVan
|
|
|
|
this.tableData[0].os = data[0].osVan
|
|
|
|
} else {
|
|
|
|
this.tableData[0].od = ''
|
|
|
|
this.tableData[0].os = ''
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
const data = window.sessionStorage.getItem('shili') ? JSON.parse(window.sessionStorage.getItem('shili')) : []
|
|
|
|
if (data.length) {
|
|
|
|
this.tableData[0].od = data[0].odVag
|
|
|
|
this.tableData[0].os = data[0].osVag
|
|
|
|
} else {
|
|
|
|
this.tableData[0].od = ''
|
|
|
|
this.tableData[0].os = ''
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
copyData() {
|
|
|
|
const ods = this.tableData.filter(item => item.name === '3')
|
|
|
|
const oss = this.tableData.filter(item => item.name === '4')
|
|
|
|
this.tableData.forEach(item => {
|
|
|
|
if (item.name === '最终处方') {
|
|
|
|
item.a = ods[0].a
|
|
|
|
item.b = ods[0].b
|
|
|
|
item.c = ods[0].c
|
|
|
|
item.d = ods[0].d
|
|
|
|
item.e = ods[0].e
|
|
|
|
}
|
|
|
|
if (item.name === '5') {
|
|
|
|
item.a = oss[0].a
|
|
|
|
item.b = oss[0].b
|
|
|
|
item.c = oss[0].c
|
|
|
|
item.d = oss[0].d
|
|
|
|
item.e = oss[0].e
|
|
|
|
}
|
|
|
|
})
|
|
|
|
},
|
|
|
|
async getPatientData() {
|
|
|
|
const { data: res } = await this.$http.get(
|
|
|
|
'/patient/view/getPatientData',
|
|
|
|
{
|
|
|
|
params: {
|
|
|
|
patientId: this.patientId
|
|
|
|
}
|
|
|
|
}
|
|
|
|
)
|
|
|
|
if (res.code === 0) {
|
|
|
|
const data = res.data
|
|
|
|
this.dataForm.patientId = data.patientId
|
|
|
|
this.dataForm.patientName = data.patientName
|
|
|
|
this.dataForm.patientSex = data.patientSex
|
|
|
|
this.dataForm.patientAge = data.patientAge
|
|
|
|
} else {
|
|
|
|
this.$message.error(res.msg)
|
|
|
|
}
|
|
|
|
},
|
|
|
|
reconnect() { // 重新连接
|
|
|
|
const that = this
|
|
|
|
if (that.lockReconnect) {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
that.lockReconnect = true
|
|
|
|
// 没连接上会一直重连,设置延迟避免请求过多
|
|
|
|
that.timeoutnum && clearTimeout(that.timeoutnum)
|
|
|
|
that.timeoutnum = setTimeout(function() {
|
|
|
|
// 新连接
|
|
|
|
that.initWebSoket()
|
|
|
|
that.lockReconnect = false
|
|
|
|
}, 5000)
|
|
|
|
},
|
|
|
|
resetHeart() { // 重置心跳
|
|
|
|
const that = this
|
|
|
|
// 清除时间
|
|
|
|
clearTimeout(that.timeoutObj)
|
|
|
|
clearTimeout(that.serverTimeoutObj)
|
|
|
|
// 重启心跳
|
|
|
|
that.start()
|
|
|
|
},
|
|
|
|
start() { // 开启心跳
|
|
|
|
const self = this
|
|
|
|
self.timeoutObj && clearTimeout(self.timeoutObj)
|
|
|
|
self.serverTimeoutObj && clearTimeout(self.serverTimeoutObj)
|
|
|
|
self.timeoutObj = setTimeout(function() {
|
|
|
|
// 这里发送一个心跳,后端收到后,返回一个心跳消息,
|
|
|
|
if (self.ws.readyState == 1) { // 如果连接正常
|
|
|
|
self.ws.send('heartCheck')
|
|
|
|
} else { // 否则重连
|
|
|
|
self.reconnect()
|
|
|
|
}
|
|
|
|
self.serverTimeoutObj = setTimeout(function() {
|
|
|
|
// 超时关闭
|
|
|
|
self.ws.close()
|
|
|
|
}, self.timeout)
|
|
|
|
}, self.timeout)
|
|
|
|
},
|
|
|
|
initWebSoket() {
|
|
|
|
// wss://127.0.0.1:8030/data
|
|
|
|
// const url = 'ws://47.110.224.240:8036/xiangan-crf/websocket/0071'
|
|
|
|
// const url = 'ws://192.168.0.167:8036/xiangan-crf/websocket/0071'
|
|
|
|
const url = 'ws://127.0.0.1:8030/data'
|
|
|
|
const self = this
|
|
|
|
this.ws = new WebSocket(url)
|
|
|
|
this.ws.onopen = function() {
|
|
|
|
console.log('连接成功')
|
|
|
|
self.start()
|
|
|
|
}
|
|
|
|
this.ws.onclose = function() {
|
|
|
|
// console.log('连接关闭')
|
|
|
|
self.reconnect()
|
|
|
|
}
|
|
|
|
this.ws.onerror = function() {
|
|
|
|
// console.log('连接失败')
|
|
|
|
self.reconnect()
|
|
|
|
}
|
|
|
|
this.ws.onmessage = function(msg) {
|
|
|
|
const message = JSON.parse(msg.data)
|
|
|
|
// const data = JSON.parse(msg.data)
|
|
|
|
// const message = JSON.parse(data.msgTxt)
|
|
|
|
console.log(message)
|
|
|
|
self.tableData.forEach(item => {
|
|
|
|
if (item.name == '3') {
|
|
|
|
item.a = message.RData.DS
|
|
|
|
item.b = message.RData.DC
|
|
|
|
item.c = message.RData.AXIS
|
|
|
|
item.d = message.RData.VA
|
|
|
|
item.e = message.RData.ADD
|
|
|
|
} else if (item.name == '4') {
|
|
|
|
item.a = message.LData.DS
|
|
|
|
item.b = message.LData.DC
|
|
|
|
item.c = message.LData.AXIS
|
|
|
|
item.d = message.LData.VA
|
|
|
|
item.e = message.LData.ADD
|
|
|
|
}
|
|
|
|
})
|
|
|
|
self.resetHeart()
|
|
|
|
}
|
|
|
|
},
|
|
|
|
handleSaveTable() {
|
|
|
|
const data = {
|
|
|
|
a: this.dataForm,
|
|
|
|
b: this.tableData
|
|
|
|
}
|
|
|
|
this.$emit('save', data)
|
|
|
|
},
|
|
|
|
handleDelete() {
|
|
|
|
this.$emit('del')
|
|
|
|
},
|
|
|
|
objectSpanMethod({ row, column, rowIndex, columnIndex }) {
|
|
|
|
if (columnIndex === 0) {
|
|
|
|
if (rowIndex === 0 || rowIndex === 5) {
|
|
|
|
// [0,0][0,3][0,6] 合并单元格 3行合并1列
|
|
|
|
return {
|
|
|
|
rowspan: 2,
|
|
|
|
colspan: 1
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (rowIndex === 2) {
|
|
|
|
return {
|
|
|
|
rowspan: 3,
|
|
|
|
colspan: 1
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// [0,11] 最后一行 9列合并城1行
|
|
|
|
if (rowIndex === 9) {
|
|
|
|
return {
|
|
|
|
rowspan: 1,
|
|
|
|
colspan: 9
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else if (columnIndex === 1) {
|
|
|
|
if (rowIndex === 7 || rowIndex === 8) {
|
|
|
|
return {
|
|
|
|
rowspan: 1,
|
|
|
|
colspan: 8
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (rowIndex === 1) {
|
|
|
|
return {
|
|
|
|
rowspan: 1,
|
|
|
|
colspan: 2
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else if (columnIndex === 3) {
|
|
|
|
if (rowIndex === 0) {
|
|
|
|
return {
|
|
|
|
rowspan: 1,
|
|
|
|
colspan: 2
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (rowIndex === 1) {
|
|
|
|
return {
|
|
|
|
rowspan: 1,
|
|
|
|
colspan: 3
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else if (columnIndex === 5) {
|
|
|
|
if (rowIndex === 0) {
|
|
|
|
return {
|
|
|
|
rowspan: 1,
|
|
|
|
colspan: 3
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else if (rowIndex === 7 || rowIndex === 8) {
|
|
|
|
if (columnIndex === 2 || columnIndex === 3 || columnIndex === 4 || columnIndex === 5 || columnIndex === 6) {
|
|
|
|
return {
|
|
|
|
rowspan: 0,
|
|
|
|
colspan: 0
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
</script>
|
|
|
|
|
|
|
|
<style lang="scss">
|
|
|
|
.printBox{
|
|
|
|
page-break-inside: avoid !important;
|
|
|
|
}
|
|
|
|
#operation-record {
|
|
|
|
height: 100%;
|
|
|
|
overflow: auto;
|
|
|
|
.check {
|
|
|
|
cursor: pointer;
|
|
|
|
user-select: none;
|
|
|
|
display: flex;
|
|
|
|
margin-right: 18px;
|
|
|
|
input{
|
|
|
|
-webkit-appearance: checkbox !important;
|
|
|
|
margin-right: 5px;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
.flex{
|
|
|
|
display: flex;
|
|
|
|
}
|
|
|
|
.j-c{
|
|
|
|
justify-content: center;
|
|
|
|
}
|
|
|
|
.btnBox{
|
|
|
|
display: flex;
|
|
|
|
justify-content: flex-end;
|
|
|
|
}
|
|
|
|
.operation-record-table {
|
|
|
|
width: 100%;
|
|
|
|
.el-input-group__append, .el-input-group__prepend{
|
|
|
|
background-color: transparent;
|
|
|
|
color: #606266;
|
|
|
|
border: none;
|
|
|
|
}
|
|
|
|
.el-table__header-wrapper{
|
|
|
|
display: none;
|
|
|
|
}
|
|
|
|
.operation-text {
|
|
|
|
font-weight: 700;
|
|
|
|
}
|
|
|
|
.text {
|
|
|
|
font-weight: 700;
|
|
|
|
}
|
|
|
|
.sign {
|
|
|
|
cursor: pointer;
|
|
|
|
color: #46a1ff;
|
|
|
|
font-weight: 400;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
.center {
|
|
|
|
text-align: center;
|
|
|
|
}
|
|
|
|
.left {
|
|
|
|
text-align: left;
|
|
|
|
}
|
|
|
|
.width-50 {
|
|
|
|
.el-input {
|
|
|
|
width: 50px;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
.width-70 {
|
|
|
|
.el-input {
|
|
|
|
width: 70px;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
.width-100 {
|
|
|
|
.el-input {
|
|
|
|
width: 100px;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
.width-120 {
|
|
|
|
.el-input {
|
|
|
|
width: 120px;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
.width-160 {
|
|
|
|
.el-input {
|
|
|
|
width: 160px;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
.width-80 {
|
|
|
|
.el-input {
|
|
|
|
width: 80px;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
.width-180 {
|
|
|
|
.el-input {
|
|
|
|
width: 180px;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
.el-input__inner {
|
|
|
|
font-size: 16px;
|
|
|
|
border: none;
|
|
|
|
height: 26px !important;
|
|
|
|
line-height: 26px !important;
|
|
|
|
text-align: center;
|
|
|
|
border-bottom: 1px solid #8e8c8c;
|
|
|
|
border-radius: 0;
|
|
|
|
padding: 0;
|
|
|
|
}
|
|
|
|
.el-textarea__inner{
|
|
|
|
border: none;
|
|
|
|
}
|
|
|
|
.el-input__prefix {
|
|
|
|
display: none;
|
|
|
|
}
|
|
|
|
.el-date-editor.el-input,
|
|
|
|
.el-date-editor.el-input__inner {
|
|
|
|
width: 140px;
|
|
|
|
}
|
|
|
|
//.el-checkbox__input.is-checked + .el-checkbox__label {
|
|
|
|
// color: #606266;
|
|
|
|
//}
|
|
|
|
//.el-checkbox__input.is-checked .el-checkbox__inner,
|
|
|
|
//.el-checkbox__input.is-indeterminate .el-checkbox__inner {
|
|
|
|
// background: #767676;
|
|
|
|
// border-color: #767676;
|
|
|
|
//}
|
|
|
|
//.el-checkbox__inner:hover,
|
|
|
|
//.el-checkbox__inner {
|
|
|
|
// border-color: #767676;
|
|
|
|
//}
|
|
|
|
.el-table--enable-row-hover .el-table__body tr:hover>td.el-table__cell {
|
|
|
|
background: none !important;
|
|
|
|
}
|
|
|
|
.has-gutter {
|
|
|
|
display: none;
|
|
|
|
.cell {
|
|
|
|
font-weight: 700;
|
|
|
|
}
|
|
|
|
.el-table__cell {
|
|
|
|
background: #ced4d9;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
::v-deep .el-table .el-table__cell{
|
|
|
|
padding: 5px 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
</style>
|
|
|
|
<style lang="scss">
|
|
|
|
#optomeFunc{
|
|
|
|
.check {
|
|
|
|
cursor: pointer;
|
|
|
|
user-select: none;
|
|
|
|
display: flex;
|
|
|
|
margin-right: 18px;
|
|
|
|
input{
|
|
|
|
-webkit-appearance: checkbox !important;
|
|
|
|
margin-right: 5px;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
.bold{
|
|
|
|
font-weight: 700;
|
|
|
|
}
|
|
|
|
.el-table th {
|
|
|
|
border-color: #8e8c8c !important;
|
|
|
|
}
|
|
|
|
.el-table td {
|
|
|
|
border-color: #8e8c8c !important;
|
|
|
|
}
|
|
|
|
.el-table--group,
|
|
|
|
.el-table--border {
|
|
|
|
border: 1px solid #8e8c8c !important;
|
|
|
|
border-bottom: none !important;
|
|
|
|
}
|
|
|
|
.el-input__inner, .el-input-group__prepend {
|
|
|
|
font-size: 16px;
|
|
|
|
}
|
|
|
|
.el-table__cell{
|
|
|
|
padding: 2px !important;
|
|
|
|
}
|
|
|
|
.el-textarea__inner{
|
|
|
|
border: none;
|
|
|
|
}
|
|
|
|
.el-input__suffix-inner{
|
|
|
|
display: none;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@media print {
|
|
|
|
img {
|
|
|
|
box-shadow: none !important;
|
|
|
|
-webkit-print-color-adjust: exact;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
</style>
|
|
|
|
|