17 changed files with 2604 additions and 725 deletions
@ -0,0 +1,93 @@ |
|||
<template> |
|||
<table> |
|||
<tbody> |
|||
<tr> |
|||
<td rowspan="2" style="width: 30%" /> |
|||
<td class="table_title">翔安医院</td> |
|||
</tr> |
|||
<tr> |
|||
<td>个案管理信息表</td> |
|||
</tr> |
|||
<tr><td colspan="2" style="font-weight: bold">无效联系记录</td></tr> |
|||
<tr> |
|||
<td colspan="2"> |
|||
<el-radio v-model="radio" label="1">拒接</el-radio> |
|||
<el-radio v-model="radio" label="2">未接</el-radio> |
|||
<el-radio v-model="radio" label="3">空号</el-radio> |
|||
</td> |
|||
</tr> |
|||
</tbody> |
|||
</table> |
|||
</template> |
|||
|
|||
<script> |
|||
export default { |
|||
name: 'Invalid', |
|||
props: { |
|||
followId: { |
|||
type: String, |
|||
default: '' |
|||
}, |
|||
jsonText: { |
|||
type: String, |
|||
default: '' |
|||
} |
|||
}, |
|||
data() { |
|||
return { |
|||
radio: '0' |
|||
} |
|||
}, |
|||
watch: { |
|||
jsonText(val) { |
|||
if (val) { |
|||
const data = val && JSON.parse(val) |
|||
this.radio = data.radio |
|||
} else { |
|||
this.radio = '0' |
|||
} |
|||
} |
|||
}, |
|||
created() { |
|||
if (this.jsonText) { |
|||
this.radio = this.jsonText && JSON.parse(this.jsonText).radio |
|||
} |
|||
}, |
|||
methods: { |
|||
addOrUpdateHandle() { |
|||
const jsonText = JSON.stringify({ |
|||
radio: this.radio |
|||
}) |
|||
const dataForm = { |
|||
flag: '7', |
|||
name: '无效联系', |
|||
patientId: this.patientId, |
|||
platform: this.platform, |
|||
id: this.followId, |
|||
updateTime: this.$moment().format('YYYY-MM-DD HH:mm:ss') |
|||
} |
|||
const params = { |
|||
jsonText: jsonText, |
|||
...dataForm |
|||
} |
|||
return this.$http.post('/case/update', params) |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
table{ |
|||
width: 100%; |
|||
margin-top: 20px; |
|||
font-size: 16px; |
|||
.table_title{ |
|||
font-size: 22px !important; |
|||
} |
|||
tr td{ |
|||
border: 1px solid #ccc; |
|||
text-align: center; |
|||
padding: 10px 0; |
|||
} |
|||
} |
|||
</style> |
@ -0,0 +1,356 @@ |
|||
<template> |
|||
<div> |
|||
<table> |
|||
<tbody> |
|||
<tr> |
|||
<td rowspan="2" style="width: 30%" /> |
|||
<td class="table_title" colspan="2">翔安医院</td> |
|||
</tr> |
|||
<tr> |
|||
<td colspan="2">个案管理信息表</td> |
|||
</tr> |
|||
<tr><td colspan="3" style="font-weight: bold">门诊随访记录</td></tr> |
|||
<tr> |
|||
<td colspan="3"> |
|||
<div class="flex">随访日期: |
|||
<el-date-picker |
|||
v-model="patientData.followDate" |
|||
type="date" |
|||
/> |
|||
</div> |
|||
</td> |
|||
</tr> |
|||
<tr> |
|||
<td colspan="3"> |
|||
<div class="flex a-c" style="width: 380px"> |
|||
主诉:<el-input v-model="patientData.mainSuit" style="flex: 1" /> |
|||
</div> |
|||
</td> |
|||
</tr> |
|||
<tr><td colspan="3"> |
|||
<div class="flex a-c"> |
|||
诊断: |
|||
<div class="flex" style="width: 180px">眼别:<el-input v-model="patientData.eyeLevel" style="flex: 1;margin-right: 15px" /></div> |
|||
<div class="flex" style="width: 280px">疾病诊断:<el-input v-model="patientData.diagnose" style="flex: 1;margin-right: 15px" /></div> |
|||
</div> |
|||
</td></tr> |
|||
<!-- 常规检查--> |
|||
<tr> |
|||
<td colspan="3"><div class="flex">常规检查</div></td> |
|||
</tr> |
|||
<tr v-for="(check,index) in checks" :key="index" class="content_input"> |
|||
<td>{{ check.name }}</td> |
|||
<td> |
|||
<div v-if="check.OD==='OD'">{{ check.OD }}</div> |
|||
<div v-else> |
|||
<el-input v-model="check.OD" /> |
|||
</div> |
|||
</td> |
|||
<td> |
|||
<div v-if="check.OS==='OS'">{{ check.OS }}</div> |
|||
<div v-else> |
|||
<el-input v-model="check.OS" /> |
|||
</div> |
|||
</td> |
|||
</tr> |
|||
<!-- 裂隙灯检查--> |
|||
<tr> |
|||
<td colspan="3"><div class="flex">裂隙灯检查</div></td> |
|||
</tr> |
|||
<tr v-for="(check,index) in slitChecks" :key="index+check.name" class="content_input"> |
|||
<td> |
|||
<el-checkbox v-if="check.name!=='检查内容'" v-model="check.isSelect">{{ check.name }}</el-checkbox> |
|||
<div v-else>{{ check.name }}</div> |
|||
</td> |
|||
<td> |
|||
<div v-if="check.OD==='OD'">{{ check.OD }}</div> |
|||
<div v-else> |
|||
<el-input v-model="check.OD" /> |
|||
</div> |
|||
</td> |
|||
<td> |
|||
<div v-if="check.OS==='OS'">{{ check.OS }}</div> |
|||
<div v-else> |
|||
<el-input v-model="check.OS" /> |
|||
</div> |
|||
</td> |
|||
</tr> |
|||
<!-- 诊断措施--> |
|||
<tr> |
|||
<td colspan="3"> |
|||
<div class="flex">诊断措施: |
|||
<div v-for="(item,idx) in diaMeasures" :key="idx+'_'+idx" style="margin-right: 15px"> |
|||
<el-input v-model="item.cure" :placeholder="item.placeholder" style="flex: 1;margin-right: 15px" /> |
|||
</div> |
|||
</div> |
|||
</td> |
|||
</tr> |
|||
<!-- 复查--> |
|||
<tr> |
|||
<td colspan="3"> |
|||
<div class="flex">复查备注(计划)</div> |
|||
<div class="flex" style="margin-top: 10px"> |
|||
<el-radio v-model="patientData.period" label="week">按计划随访</el-radio> |
|||
<el-radio v-model="patientData.period" label="month">临时调整</el-radio> |
|||
日期:<el-date-picker v-model="patientData.periodDate" type="date" /> |
|||
</div> |
|||
</td> |
|||
</tr> |
|||
</tbody> |
|||
</table> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
export default { |
|||
name: 'OutFollow', |
|||
props: { |
|||
patientId: { |
|||
type: String, |
|||
default: '' |
|||
}, |
|||
platform: { |
|||
type: String, |
|||
default: '' |
|||
}, |
|||
followId: { |
|||
type: String, |
|||
default: '' |
|||
}, |
|||
jsonText: { |
|||
type: String, |
|||
default: '' |
|||
} |
|||
}, |
|||
data() { |
|||
return { |
|||
initData: {}, |
|||
patientData: { |
|||
followDate: '', |
|||
mainSuit: '', |
|||
eyeLevel: '', |
|||
diagnose: '', |
|||
period: '', |
|||
periodDate: '' |
|||
}, |
|||
// 常规检查 |
|||
checks: [ |
|||
{ |
|||
name: '检查内容', |
|||
OD: 'OD', |
|||
OS: 'OS' |
|||
}, |
|||
{ |
|||
name: '视力', |
|||
OD: '', |
|||
OS: '' |
|||
}, |
|||
{ |
|||
name: '眼压', |
|||
OD: '', |
|||
OS: '' |
|||
}, |
|||
{ |
|||
name: 'C/D', |
|||
OD: '', |
|||
OS: '' |
|||
} |
|||
], |
|||
slitChecks: [ |
|||
{ |
|||
name: '检查内容', |
|||
OD: 'OD', |
|||
OS: 'OS' |
|||
}, |
|||
{ |
|||
name: '结膜/滤过泡', |
|||
isSelect: false, |
|||
OD: '', |
|||
OS: '' |
|||
}, |
|||
{ |
|||
name: '角膜', |
|||
isSelect: false, |
|||
OD: '', |
|||
OS: '' |
|||
}, |
|||
{ |
|||
name: '中央前房', |
|||
isSelect: false, |
|||
OD: '', |
|||
OS: '' |
|||
}, |
|||
{ |
|||
name: '周边前房', |
|||
isSelect: false, |
|||
OD: '', |
|||
OS: '' |
|||
}, |
|||
{ |
|||
name: '虹膜', |
|||
isSelect: false, |
|||
OD: '', |
|||
OS: '' |
|||
}, |
|||
{ |
|||
name: '瞳孔', |
|||
isSelect: false, |
|||
OD: '', |
|||
OS: '' |
|||
}, |
|||
{ |
|||
name: '直径', |
|||
isSelect: false, |
|||
OD: '', |
|||
OS: '' |
|||
}, |
|||
{ |
|||
name: '对光反射', |
|||
isSelect: false, |
|||
OD: '', |
|||
OS: '' |
|||
}, |
|||
{ |
|||
name: '晶体', |
|||
isSelect: false, |
|||
OD: '', |
|||
OS: '' |
|||
}, |
|||
{ |
|||
name: '盘沿', |
|||
isSelect: false, |
|||
OD: '', |
|||
OS: '' |
|||
}, |
|||
{ |
|||
name: '神经纤维层', |
|||
isSelect: false, |
|||
OD: '', |
|||
OS: '' |
|||
}, |
|||
{ |
|||
name: '动态房角镜', |
|||
isSelect: false, |
|||
OD: '', |
|||
OS: '' |
|||
}, |
|||
{ |
|||
name: '静态房角镜', |
|||
isSelect: false, |
|||
OD: '', |
|||
OS: '' |
|||
} |
|||
], |
|||
diaMeasures: [ |
|||
{ |
|||
placeholder: '降压用药', |
|||
cure: '' |
|||
}, |
|||
{ |
|||
placeholder: '手术', |
|||
cure: '' |
|||
}, |
|||
{ |
|||
placeholder: '激光', |
|||
cure: '' |
|||
} |
|||
] |
|||
} |
|||
}, |
|||
watch: { |
|||
jsonText(val) { |
|||
if (val) { |
|||
const data = JSON.parse(this.jsonText) |
|||
this.patientData = data.patientData |
|||
this.checks = data.checks |
|||
this.slitChecks = data.slitChecks |
|||
this.diaMeasures = data.diaMeasures |
|||
} else { |
|||
this.patientData = this.initData.patientData |
|||
this.checks = this.initData.checks |
|||
this.slitChecks = this.initData.slitChecks |
|||
this.diaMeasures = this.initData.diaMeasures |
|||
} |
|||
} |
|||
}, |
|||
created() { |
|||
// 初始化赋空 |
|||
const data = { |
|||
patientData: this.patientData, |
|||
checks: this.checks, |
|||
slitChecks: this.slitChecks, |
|||
diaMeasures: this.diaMeasures |
|||
} |
|||
this.initData = JSON.parse(JSON.stringify(data)) |
|||
// 赋值 |
|||
if (this.jsonText) { |
|||
const data = JSON.parse(this.jsonText) |
|||
this.patientData = data.patientData |
|||
this.checks = data.checks |
|||
this.slitChecks = data.slitChecks |
|||
this.diaMeasures = data.diaMeasures |
|||
} |
|||
}, |
|||
methods: { |
|||
addOrUpdateHandle() { |
|||
const jsonText = JSON.stringify({ |
|||
patientData: this.patientData, |
|||
checks: this.checks, |
|||
slitChecks: this.slitChecks, |
|||
diaMeasures: this.diaMeasures |
|||
}) |
|||
const dataForm = { |
|||
id: this.followId, |
|||
flag: '7', |
|||
name: '门诊随访', |
|||
patientId: this.patientId, |
|||
platform: this.platform, |
|||
updateTime: this.$moment().format('YYYY-MM-DD HH:mm:ss') |
|||
} |
|||
const params = { |
|||
jsonText: jsonText, |
|||
...dataForm |
|||
} |
|||
return this.$http.post('/case/update', params) |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.flex{ |
|||
display: flex; |
|||
} |
|||
table{ |
|||
width: 100%; |
|||
margin-top: 20px; |
|||
.table_title{ |
|||
font-size: 22px !important; |
|||
} |
|||
tr td{ |
|||
border: 1px solid #ccc; |
|||
text-align: center; |
|||
padding: 10px; |
|||
} |
|||
} |
|||
::v-deep .el-input__inner { |
|||
border: none; |
|||
height: 26px !important; |
|||
line-height: 26px !important; |
|||
text-align: center; |
|||
} |
|||
|
|||
::v-deep .el-input__inner { |
|||
border-bottom: 1px solid #ccc; |
|||
border-radius: 0; |
|||
padding: 0; |
|||
} |
|||
::v-deep .el-input__prefix { |
|||
display: none; |
|||
} |
|||
.content_input{ |
|||
::v-deep .el-input__inner{ |
|||
width: 150px; |
|||
} |
|||
} |
|||
</style> |
@ -0,0 +1,212 @@ |
|||
<template> |
|||
<table> |
|||
<tbody> |
|||
<tr> |
|||
<td rowspan="2" style="width: 30%" /> |
|||
<td class="table_title" colspan="2">翔安医院</td> |
|||
</tr> |
|||
<tr> |
|||
<td colspan="2">个案管理信息表</td> |
|||
</tr> |
|||
<tr><td colspan="3" style="font-weight: bold">电话随访记录</td></tr> |
|||
<tr> |
|||
<td colspan="3"> |
|||
<div class="flex a-c"> |
|||
<div class="flex a-c"> |
|||
随访日期:<el-date-picker |
|||
v-model="followData.followDate" |
|||
type="date" |
|||
/> |
|||
</div> |
|||
<div class="flex a-c">上次复查注意事项:<el-input v-model="followData.followDesc" style="flex: 1" /></div> |
|||
</div> |
|||
</td> |
|||
</tr> |
|||
<tr> |
|||
<td colspan="3"> |
|||
<div class="flex a-c"> |
|||
主诉:<el-input v-model="followData.mainSuit" style="flex: 1" /> |
|||
</div></td> |
|||
</tr> |
|||
<tr> |
|||
<td colspan="3"> |
|||
<div class="flex a-c"> |
|||
诊断:眼别:<el-input v-model="followData.eyeLevel" style="flex: 1;margin-right: 15px" /> |
|||
疾病诊断:<el-input v-model="followData.diagnose" style="flex: 1;margin-right: 15px" /> |
|||
后缀:<el-input v-model="followData.suffix" style="flex: 1" /> |
|||
</div> |
|||
</td> |
|||
</tr> |
|||
<!-- 常规检查--> |
|||
<tr> |
|||
<td colspan="3">常规检查</td> |
|||
</tr> |
|||
<tr> |
|||
<td>检查内容</td> |
|||
<td>OD</td> |
|||
<td>OS</td> |
|||
</tr> |
|||
<tr> |
|||
<td>视力</td> |
|||
<td><el-input v-model="followData.OD.vision" style="flex: 1" /></td> |
|||
<td><el-input v-model="followData.OD.pressure" style="flex: 1" /></td> |
|||
</tr> |
|||
<tr> |
|||
<td>眼压</td> |
|||
<td><el-input v-model="followData.OS.vision" style="flex: 1" /></td> |
|||
<td><el-input v-model="followData.OS.pressure" style="flex: 1" /></td> |
|||
</tr> |
|||
<!-- 处理选择--> |
|||
<tr> |
|||
<td colspan="3"> |
|||
处理选择: |
|||
<el-radio v-model="followData.selection" label="again">继续随访</el-radio> |
|||
<el-radio v-model="followData.selection" label="add">加药</el-radio> |
|||
<el-radio v-model="followData.selection" label="sub">减药</el-radio> |
|||
<el-radio v-model="followData.selection" label="goin">预约入院手术</el-radio> |
|||
</td> |
|||
</tr> |
|||
<!-- 用药--> |
|||
<tr> |
|||
<td colspan="3"> |
|||
<div class="flex a-c">用药:<el-input v-model="followData.pharmacy" style="flex: 1" /></div> |
|||
</td> |
|||
</tr> |
|||
<!-- 备注--> |
|||
<tr> |
|||
<td colspan="3"> |
|||
<div class="flex a-c">备注: |
|||
<el-radio v-model="followData.notes" label="suspicious">可疑进展</el-radio> |
|||
<el-radio v-model="followData.notes" label="confirm">确认进展</el-radio> |
|||
</div> |
|||
</td> |
|||
</tr> |
|||
<!-- 复查备注--> |
|||
<tr> |
|||
<td colspan="3"> |
|||
<div class="flex a-c">复查备注(计划): |
|||
<el-radio v-model="followData.schedule" label="onSchedule">按计划随访</el-radio> |
|||
<div style="width: 180px"><el-input v-model="followData.period" style="flex: 1" placeholder="请输入周期" /></div> |
|||
<el-radio v-model="followData.periodCircle" label="week">周</el-radio> |
|||
<el-radio v-model="followData.periodCircle" label="month">月</el-radio> |
|||
</div> |
|||
</td> |
|||
</tr> |
|||
</tbody> |
|||
</table> |
|||
</template> |
|||
|
|||
<script> |
|||
export default { |
|||
name: 'PhoneFollow', |
|||
props: { |
|||
followId: { |
|||
type: String, |
|||
default: '' |
|||
}, |
|||
jsonText: { |
|||
type: String, |
|||
default: '' |
|||
} |
|||
}, |
|||
data() { |
|||
return { |
|||
initData: {}, |
|||
followData: { |
|||
followDate: '', |
|||
followDesc: '', |
|||
mainSuit: '', |
|||
eyeLevel: '', |
|||
diagnose: '', // 疾病诊断 |
|||
suffix: '', // 后缀 |
|||
OD: { |
|||
vision: '', |
|||
pressure: '' |
|||
}, |
|||
OS: { |
|||
vision: '', |
|||
pressure: '' |
|||
}, |
|||
selection: '', // 处理选择 |
|||
pharmacy: '', |
|||
notes: '', // 备注 |
|||
schedule: '', |
|||
period: '', // 周期 |
|||
periodCircle: '' // 周期单选 |
|||
} |
|||
} |
|||
}, |
|||
watch: { |
|||
jsonText(val) { |
|||
if (val) { |
|||
this.followData = JSON.parse(this.jsonText) |
|||
} else { |
|||
this.followData = this.initData |
|||
} |
|||
} |
|||
}, |
|||
created() { |
|||
this.initData = JSON.parse(JSON.stringify(this.followData)) |
|||
if (this.jsonText) { |
|||
this.followData = JSON.parse(this.jsonText) |
|||
} |
|||
}, |
|||
methods: { |
|||
addOrUpdateHandle() { |
|||
const jsonText = JSON.stringify({ |
|||
...this.followData |
|||
}) |
|||
const dataForm = { |
|||
flag: '7', |
|||
name: '电话随访', |
|||
patientId: this.patientId, |
|||
platform: this.platform, |
|||
id: this.followId, |
|||
updateTime: this.$moment().format('YYYY-MM-DD HH:mm:ss') |
|||
} |
|||
const params = { |
|||
jsonText: jsonText, |
|||
...dataForm |
|||
} |
|||
return this.$http.post('/case/update', params) |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.flex{ |
|||
display: flex; |
|||
} |
|||
.a-c{ |
|||
align-items: center; |
|||
} |
|||
table{ |
|||
width: 100%; |
|||
margin-top: 20px; |
|||
font-size: 16px; |
|||
.table_title{ |
|||
font-size: 22px !important; |
|||
} |
|||
tr td{ |
|||
border: 1px solid #ccc; |
|||
text-align: center; |
|||
padding: 10px; |
|||
} |
|||
} |
|||
::v-deep .el-input__inner { |
|||
border: none; |
|||
height: 26px !important; |
|||
line-height: 26px !important; |
|||
text-align: center; |
|||
} |
|||
|
|||
::v-deep .el-input__inner { |
|||
border-bottom: 1px solid #ccc; |
|||
border-radius: 0; |
|||
padding: 0; |
|||
} |
|||
::v-deep .el-input__prefix { |
|||
display: none; |
|||
} |
|||
</style> |
@ -1,117 +1,118 @@ |
|||
// system入口
|
|||
import Vue from 'vue' |
|||
import Element from 'element-ui' |
|||
// import 'lib-flexible/flexible'
|
|||
import App from './App.vue' |
|||
import router from './router' |
|||
import store from './store' |
|||
import http from './utils/request' |
|||
import jQuery from 'jquery' |
|||
import 'element-ui/lib/theme-chalk/index.css' |
|||
import '@/icons' |
|||
import '@/assets/scss/aui.scss' |
|||
import '@/assets/scss/reset.scss' |
|||
import i18n from '@/i18n' |
|||
import * as filters from '@/filters' |
|||
import renRadioGroup from '@/components/ren-radio-group' |
|||
import renDeptTree from '@/components/ren-dept-tree' |
|||
import { hasPermission, getDictLabel } from '@/utils' |
|||
import cloneDeep from 'lodash/cloneDeep' |
|||
import 'xe-utils' |
|||
import VXETable from 'vxe-table' |
|||
import 'vxe-table/lib/index.css' |
|||
// import echarts from 'echarts'
|
|||
import * as echarts from 'echarts' |
|||
import moment from 'moment' |
|||
import VueChatScroll from 'vue-chat-scroll' |
|||
|
|||
// import jsNSV from '@/utils/js-NSV.js'
|
|||
|
|||
import Base64 from '@/utils/base64.js' |
|||
Vue.prototype.$Base64 = Base64 |
|||
|
|||
import Print from 'vue-print-nb' |
|||
Vue.use(Print) |
|||
|
|||
import { confirm } from '@/utils/confirm' |
|||
Vue.prototype.$confirmFun = confirm |
|||
|
|||
// import VueDragResize from 'vue-drag-resize'
|
|||
// Vue.component('vue-drag-resize', VueDragResize)
|
|||
|
|||
// 裁切工具
|
|||
import VueCropper from 'vue-cropper' |
|||
Vue.use(VueCropper) |
|||
|
|||
import Recorder from 'js-audio-recorder' |
|||
const recorder = new Recorder({ |
|||
sampleBits: 16, // 采样位数,支持 8 或 16,默认是16
|
|||
sampleRate: 16000, // 采样率,支持 11025、16000、22050、24000、44100、48000,根据浏览器默认值,我的chrome是48000
|
|||
numChannels: 1 // 声道,支持 1 或 2, 默认是1
|
|||
// compiling: false,(0.x版本中生效,1.x增加中) // 是否边录边转换,默认是false
|
|||
}) |
|||
Vue.prototype.$recorder = recorder |
|||
|
|||
// 全局监听DOM元素
|
|||
import ElementResizeDetectorMaker from 'element-resize-detector' |
|||
Vue.prototype.$erd = ElementResizeDetectorMaker() |
|||
|
|||
import animejs from 'animejs' |
|||
Vue.prototype.$anime = animejs |
|||
|
|||
moment.locale('zh-cn') // 设置语言 或 moment.lang('zh-cn');
|
|||
|
|||
Vue.use(Element, { |
|||
size: 'default', |
|||
i18n: (key, value) => i18n.t(key, value) |
|||
}) |
|||
|
|||
Object.keys(filters).forEach(key => { |
|||
Vue.filter(key, filters[key]) |
|||
}) |
|||
|
|||
// 全局组件
|
|||
Vue.use(renRadioGroup) |
|||
Vue.use(renDeptTree) |
|||
Vue.use(VueChatScroll) |
|||
Vue.use(VXETable) |
|||
|
|||
// DICOM
|
|||
import cornerstone from 'cornerstone-core' |
|||
import cornerstoneMath from 'cornerstone-math' |
|||
import cornerstoneTools from 'cornerstone-tools' |
|||
import Hammer from 'hammerjs' |
|||
import dicomParser from 'dicom-parser' |
|||
import cornerstoneWADOImageLoader from 'cornerstone-wado-image-loader' |
|||
import cornerstoneWebImageLoader from 'cornerstone-web-image-loader' |
|||
|
|||
cornerstoneTools.external.cornerstone = cornerstone |
|||
cornerstoneTools.external.Hammer = Hammer |
|||
cornerstoneTools.external.cornerstoneMath = cornerstoneMath |
|||
cornerstoneWADOImageLoader.external.dicomParser = dicomParser |
|||
cornerstoneWADOImageLoader.external.cornerstoneMath = cornerstoneMath |
|||
cornerstoneWADOImageLoader.external.cornerstone = cornerstone |
|||
cornerstoneWebImageLoader.external.cornerstone = cornerstone |
|||
cornerstone.registerImageLoader('http', cornerstoneWADOImageLoader.loadImage) |
|||
cornerstone.registerImageLoader('https', cornerstoneWADOImageLoader.loadImage) |
|||
cornerstone.registerImageLoader('http', cornerstoneWebImageLoader.loadImage) |
|||
Vue.prototype.$cornerstone = cornerstone |
|||
Vue.prototype.$cornerstoneTools = cornerstoneTools |
|||
|
|||
// 挂载全局
|
|||
Vue.prototype.$http = http |
|||
Vue.prototype.$ = jQuery |
|||
Vue.prototype.$hasPermission = hasPermission |
|||
Vue.prototype.$getDictLabel = getDictLabel |
|||
Vue.prototype.$moment = moment |
|||
Vue.prototype.$echarts = echarts |
|||
|
|||
Vue.config.productionTip = false |
|||
// 保存整站vuex本地储存初始状态
|
|||
window.SITE_CONFIG.storeState = cloneDeep(store.state) |
|||
new Vue({ |
|||
i18n, |
|||
router, |
|||
store, |
|||
render: h => h(App) |
|||
}).$mount('#app') |
|||
// system入口
|
|||
import Vue from "vue"; |
|||
import Element from "element-ui"; |
|||
// import 'lib-flexible/flexible'
|
|||
import App from "./App.vue"; |
|||
import router from "./router"; |
|||
import store from "./store"; |
|||
import http from "./utils/request"; |
|||
import jQuery from "jquery"; |
|||
import "element-ui/lib/theme-chalk/index.css"; |
|||
import "@/icons"; |
|||
import "@/assets/scss/aui.scss"; |
|||
import "@/assets/scss/reset.scss"; |
|||
import i18n from "@/i18n"; |
|||
import * as filters from "@/filters"; |
|||
import renRadioGroup from "@/components/ren-radio-group"; |
|||
import renDeptTree from "@/components/ren-dept-tree"; |
|||
import { hasPermission, getDictLabel } from "@/utils"; |
|||
import cloneDeep from "lodash/cloneDeep"; |
|||
import "xe-utils"; |
|||
import VXETable from "vxe-table"; |
|||
import "vxe-table/lib/index.css"; |
|||
// import echarts from 'echarts'
|
|||
import * as echarts from "echarts"; |
|||
import moment from "moment"; |
|||
import VueChatScroll from "vue-chat-scroll"; |
|||
import "default-passive-events"; |
|||
|
|||
// import jsNSV from '@/utils/js-NSV.js'
|
|||
|
|||
import Base64 from "@/utils/base64.js"; |
|||
Vue.prototype.$Base64 = Base64; |
|||
|
|||
import Print from "vue-print-nb"; |
|||
Vue.use(Print); |
|||
|
|||
import { confirm } from "@/utils/confirm"; |
|||
Vue.prototype.$confirmFun = confirm; |
|||
|
|||
// import VueDragResize from 'vue-drag-resize'
|
|||
// Vue.component('vue-drag-resize', VueDragResize)
|
|||
|
|||
// 裁切工具
|
|||
import VueCropper from "vue-cropper"; |
|||
Vue.use(VueCropper); |
|||
|
|||
import Recorder from "js-audio-recorder"; |
|||
const recorder = new Recorder({ |
|||
sampleBits: 16, // 采样位数,支持 8 或 16,默认是16
|
|||
sampleRate: 16000, // 采样率,支持 11025、16000、22050、24000、44100、48000,根据浏览器默认值,我的chrome是48000
|
|||
numChannels: 1, // 声道,支持 1 或 2, 默认是1
|
|||
// compiling: false,(0.x版本中生效,1.x增加中) // 是否边录边转换,默认是false
|
|||
}); |
|||
Vue.prototype.$recorder = recorder; |
|||
|
|||
// 全局监听DOM元素
|
|||
import ElementResizeDetectorMaker from "element-resize-detector"; |
|||
Vue.prototype.$erd = ElementResizeDetectorMaker(); |
|||
|
|||
import animejs from "animejs"; |
|||
Vue.prototype.$anime = animejs; |
|||
|
|||
moment.locale("zh-cn"); // 设置语言 或 moment.lang('zh-cn');
|
|||
|
|||
Vue.use(Element, { |
|||
size: "default", |
|||
i18n: (key, value) => i18n.t(key, value), |
|||
}); |
|||
|
|||
Object.keys(filters).forEach((key) => { |
|||
Vue.filter(key, filters[key]); |
|||
}); |
|||
|
|||
// 全局组件
|
|||
Vue.use(renRadioGroup); |
|||
Vue.use(renDeptTree); |
|||
Vue.use(VueChatScroll); |
|||
Vue.use(VXETable); |
|||
|
|||
// DICOM
|
|||
import cornerstone from "cornerstone-core"; |
|||
import cornerstoneMath from "cornerstone-math"; |
|||
import cornerstoneTools from "cornerstone-tools"; |
|||
import Hammer from "hammerjs"; |
|||
import dicomParser from "dicom-parser"; |
|||
import cornerstoneWADOImageLoader from "cornerstone-wado-image-loader"; |
|||
import cornerstoneWebImageLoader from "cornerstone-web-image-loader"; |
|||
|
|||
cornerstoneTools.external.cornerstone = cornerstone; |
|||
cornerstoneTools.external.Hammer = Hammer; |
|||
cornerstoneTools.external.cornerstoneMath = cornerstoneMath; |
|||
cornerstoneWADOImageLoader.external.dicomParser = dicomParser; |
|||
cornerstoneWADOImageLoader.external.cornerstoneMath = cornerstoneMath; |
|||
cornerstoneWADOImageLoader.external.cornerstone = cornerstone; |
|||
cornerstoneWebImageLoader.external.cornerstone = cornerstone; |
|||
cornerstone.registerImageLoader("http", cornerstoneWADOImageLoader.loadImage); |
|||
cornerstone.registerImageLoader("https", cornerstoneWADOImageLoader.loadImage); |
|||
cornerstone.registerImageLoader("http", cornerstoneWebImageLoader.loadImage); |
|||
Vue.prototype.$cornerstone = cornerstone; |
|||
Vue.prototype.$cornerstoneTools = cornerstoneTools; |
|||
|
|||
// 挂载全局
|
|||
Vue.prototype.$http = http; |
|||
Vue.prototype.$ = jQuery; |
|||
Vue.prototype.$hasPermission = hasPermission; |
|||
Vue.prototype.$getDictLabel = getDictLabel; |
|||
Vue.prototype.$moment = moment; |
|||
Vue.prototype.$echarts = echarts; |
|||
|
|||
Vue.config.productionTip = false; |
|||
// 保存整站vuex本地储存初始状态
|
|||
window.SITE_CONFIG.storeState = cloneDeep(store.state); |
|||
new Vue({ |
|||
i18n, |
|||
router, |
|||
store, |
|||
render: (h) => h(App), |
|||
}).$mount("#app"); |
|||
|
@ -1,352 +1,410 @@ |
|||
import Vue from 'vue' |
|||
import Router from 'vue-router' |
|||
import http from '../utils/request' |
|||
import { isURL } from '@/utils/validate' |
|||
import Cookies from 'js-cookie' |
|||
|
|||
Vue.use(Router) |
|||
|
|||
// 解决Vue-Router升级导致的Uncaught(in promise) navigation guard问题----------
|
|||
const originalPush = Router.prototype.push |
|||
Router.prototype.push = function push(location, onResolve, onReject) { |
|||
if (onResolve || onReject) return originalPush.call(this, location, onResolve, onReject) |
|||
return originalPush.call(this, location).catch(err => err) |
|||
} |
|||
// 解决Vue-Router升级导致的Uncaught(in promise) navigation guard问题----------
|
|||
|
|||
// 页面路由(独立页面)
|
|||
export const pageRoutes = [ |
|||
{ |
|||
path: '/404', |
|||
component: () => import('@/page-subspecialty/views/pages/404'), |
|||
name: '404', |
|||
meta: { title: '404未找到' }, |
|||
beforeEnter(to, from, next) { |
|||
// 拦截处理特殊业务场景
|
|||
// 如果, 重定向路由包含__双下划线, 为临时添加路由
|
|||
if (/__.*/.test(to.redirectedFrom)) { |
|||
return next(to.redirectedFrom.replace(/__.*/, '')) |
|||
} |
|||
next() |
|||
} |
|||
}, |
|||
{ |
|||
path: '/login', |
|||
component: () => import('@/page-subspecialty/views/pages/login'), |
|||
name: 'login', |
|||
meta: { title: '登录' } |
|||
}, |
|||
// 录音
|
|||
{ |
|||
path: '/luyin', |
|||
name: 'luyin', |
|||
component: () => import('@/page-subspecialty/views/pages/luyin') |
|||
}, |
|||
// 日程安排
|
|||
{ |
|||
path: '/schedule', |
|||
name: 'schedule', |
|||
component: () => import('@/page-subspecialty/views/pages/schedule') |
|||
}, |
|||
{ |
|||
path: '/question', |
|||
name: 'question', |
|||
component: () => import('@/page-subspecialty/views/pages/question') |
|||
}, |
|||
{ |
|||
path: '/satusScreen', |
|||
name: 'satusScreen', |
|||
component: () => import('@/page-subspecialty/views/pages/satusScreen') |
|||
}, |
|||
{ |
|||
path: '/imageEdit', |
|||
name: 'imageEdit', |
|||
component: () => import('@/page-subspecialty/views/pages/imageEdit') |
|||
}, |
|||
{ |
|||
path: '/articleContent', |
|||
name: 'articleContent', |
|||
component: () => import('@/page-subspecialty/views/modules/articleManagement/articleContent') |
|||
}, |
|||
{ |
|||
path: '/transfer', |
|||
name: 'transfer', |
|||
component: () => import('@/page-subspecialty/views/pages/transfer') |
|||
} |
|||
] |
|||
|
|||
// 模块路由(基于主入口布局页面)*8
|
|||
export const moduleRoutes = { |
|||
path: '/', |
|||
component: () => import('@/page-subspecialty/views/main'), |
|||
name: 'main', |
|||
redirect: { name: 'patientManagement' }, |
|||
meta: { title: '首页' }, |
|||
children: [ |
|||
{ |
|||
path: '/patientManagement', |
|||
component: () => import('@/page-subspecialty/views/modules/patientManagement/index'), |
|||
name: 'patientManagement', |
|||
meta: { title: '分诊管理', isTab: true } |
|||
}, |
|||
{ |
|||
path: '/patientDetail', |
|||
component: () => import('@/page-subspecialty/views/modules/patientDetail'), |
|||
name: 'patientDetail', |
|||
meta: { title: '档案管理', isTab: true } |
|||
}, |
|||
// ok镜
|
|||
{ |
|||
path: '/patientInfo', |
|||
name: 'patientInfo', |
|||
meta: { title: '详情', isTab: true }, |
|||
component: () => import('@/page-subspecialty/views/modules/optometryManagement/seeDoctor/index') |
|||
}, |
|||
{ |
|||
path: '/iframe', |
|||
component: null, |
|||
name: 'iframe', |
|||
meta: { title: 'iframe', isTab: true } |
|||
}, |
|||
{ |
|||
path: '/redirect', |
|||
name: 'redirect', |
|||
component: () => import('@/page-subspecialty/views/redirect') |
|||
} |
|||
] |
|||
} |
|||
|
|||
export function addDynamicRoute(routeParams, router) { |
|||
// 组装路由名称, 并判断是否已添加, 如是: 则直接跳转
|
|||
var routeName = routeParams.routeName |
|||
var dynamicRoute = window.SITE_CONFIG['dynamicRoutes'].filter(item => item.name === routeName)[0] |
|||
if (dynamicRoute) { |
|||
return router.push({ name: routeName, params: routeParams.params }) |
|||
} |
|||
// 否则: 添加并全局变量保存, 再跳转
|
|||
dynamicRoute = { |
|||
path: routeName, |
|||
component: () => Promise.resolve(require(`@/page-subspecialty/views/modules/${routeParams.path}`).default), |
|||
// component: () => import(`@/views/modules/${routeParams.path}`),
|
|||
name: routeName, |
|||
meta: { |
|||
...window.SITE_CONFIG['contentTabDefault'], |
|||
menuId: routeParams.menuId, |
|||
title: `${routeParams.title}` |
|||
} |
|||
} |
|||
router.addRoutes([ |
|||
{ |
|||
...moduleRoutes, |
|||
name: `main-dynamic__${dynamicRoute.name}`, |
|||
children: [dynamicRoute] |
|||
} |
|||
]) |
|||
window.SITE_CONFIG['dynamicRoutes'].push(dynamicRoute) |
|||
router.push({ name: dynamicRoute.name, params: routeParams.params }) |
|||
} |
|||
|
|||
const createRouter = () => new Router({ |
|||
mode: 'history', |
|||
scrollBehavior: () => ({ y: 0 }), |
|||
routes: pageRoutes.concat(moduleRoutes) |
|||
}) |
|||
const router = createRouter() |
|||
|
|||
// [vue-router] Duplicate named routes definition 重复的命名路由定义
|
|||
// 动态路由退出再登录会出现警告重复路由
|
|||
// 解决方案:在退出时调用resetRouter()方法
|
|||
export function resetRouter() { |
|||
const newRouter = createRouter() |
|||
router.matcher = newRouter.matcher // reset router
|
|||
} |
|||
|
|||
router.beforeEach((to, from, next) => { |
|||
// 添加动态(菜单)路由
|
|||
// 已添加或者当前路由为页面路由, 可直接访问
|
|||
if (window.SITE_CONFIG['dynamicMenuRoutesHasAdded'] || fnCurrentRouteIsPageRoute(to, pageRoutes)) { |
|||
return next() |
|||
} |
|||
if (to.path === from.path) { |
|||
return |
|||
} |
|||
if (to.name === 'login' || to.path === '/login' || to.path === 'satusScreen' || to.name === 'satusScreen') { |
|||
next() |
|||
} else { |
|||
// 获取字典列表, 添加并全局变量保存
|
|||
// http.get('/sys/dict/type/all').then(({ data: res }) => {
|
|||
// if (res.code !== 0) {
|
|||
// return
|
|||
// }
|
|||
// window.SITE_CONFIG['dictList'] = res.data
|
|||
// }).catch(() => {})
|
|||
|
|||
// 获取左侧菜单列表,添加并全局变量保存
|
|||
http.get('/sys/menu/nav').then(({ data: res }) => { |
|||
if (res.code !== 0) { |
|||
Vue.prototype.$message.error(res.msg) |
|||
return next({ name: 'login' }) |
|||
} |
|||
window.SITE_CONFIG['menuList'] = res.data |
|||
}).catch(() => { |
|||
return next({ name: 'login' }) |
|||
}) |
|||
|
|||
// 获取菜单管理菜单列表,并添加动态路由
|
|||
http.get('/sys/menu/list', { |
|||
params: { |
|||
type: 0 |
|||
} |
|||
}).then(({ data: res }) => { |
|||
if (res.code !== 0) { |
|||
Vue.prototype.$message.error(res.msg) |
|||
return next({ name: 'login' }) |
|||
} |
|||
// window.SITE_CONFIG['menuList'] = res.data
|
|||
const menuListChild = res.data.filter(item => item.children.length > 0) |
|||
// console.log(menuListChild)
|
|||
fnAddDynamicMenuRoutes(JSON.parse(JSON.stringify(res.data)), menuListChild.length) |
|||
|
|||
next({ ...to, replace: true }) |
|||
}).catch(() => { |
|||
// console.log(123)
|
|||
return next({ name: 'login' }) |
|||
}) |
|||
// 获取【字段字典表】, 添加并全局变量保存
|
|||
// http.get('/sys/table/dict/getList', { params: { type: 1 }}).then(({ data: res }) => {
|
|||
// window.SITE_CONFIG['dict_colSearch'] = res.data
|
|||
// })
|
|||
getInitData() |
|||
} |
|||
}) |
|||
function getInitData() { |
|||
// 获取字典列表, 添加并全局变量保存
|
|||
// http.get('/sys/dict/type/all').then(({ data: res }) => {
|
|||
// if (res.code !== 0) { return }
|
|||
// window.SITE_CONFIG['dictList'] = res.data
|
|||
// })
|
|||
|
|||
// 获取【字段字典表】, 添加并全局变量保存
|
|||
http.get('/table/dict/optionsColumn').then(({ data: res }) => { |
|||
window.SITE_CONFIG['dict_colAll'] = res.data |
|||
}) |
|||
|
|||
// 获取【字段字典表】, 添加并全局变量保存
|
|||
http.get('/table/dict/optionsColumn', { params: { type: 1 }}).then(({ data: res }) => { |
|||
window.SITE_CONFIG['dict_colSearch'] = res.data |
|||
}) |
|||
|
|||
// 获取【字段字典表】, 添加并全局变量保存
|
|||
http.get('/table/dict/optionsColumn', { params: { type: 2 }}).then(({ data: res }) => { |
|||
window.SITE_CONFIG['dict_colChart'] = res.data |
|||
}) |
|||
|
|||
// 获取【字段字典表】, 添加并全局变量保存
|
|||
http.get('/table/dict/optionsColumn', { params: { type: 3 }}).then(({ data: res }) => { |
|||
window.SITE_CONFIG['dict_colCrf'] = res.data |
|||
}) |
|||
|
|||
// 获取【字段字典表】, 添加并全局变量保存
|
|||
http.get('/table/dict/optionsColumn', { params: { type: 4 }}).then(({ data: res }) => { |
|||
window.SITE_CONFIG['dict_colExport'] = res.data |
|||
}) |
|||
|
|||
// 获取【检查项目字典】, 添加并全局变量保存
|
|||
// http.get('/table/dict/examItem').then(({ data: res }) => {
|
|||
// sortChinese(res.data, 'itemName')
|
|||
// window.SITE_CONFIG['dict_examItem'] = res.data
|
|||
// })
|
|||
|
|||
// 获取【设备信息字典】, 添加并全局变量保存
|
|||
// http.get('/device/getData2RelDeviceList').then(({ data: res }) => {
|
|||
// window.SITE_CONFIG['dict_device'] = res.data
|
|||
// })
|
|||
|
|||
// 获取【设备与检查项目字典】, 添加并全局变量保存
|
|||
// http.get('/device/getData2RelDeviceItemList').then(({ data: res }) => {
|
|||
// window.SITE_CONFIG['dict_device_item'] = res.data
|
|||
// })
|
|||
} |
|||
/** |
|||
* 判断当前路由是否为页面路由 |
|||
* @param {*} route 当前路由 |
|||
* @param {*} pageRoutes 页面路由 |
|||
*/ |
|||
function fnCurrentRouteIsPageRoute(route, pageRoutes = []) { |
|||
var temp = [] |
|||
for (var i = 0; i < pageRoutes.length; i++) { |
|||
if (route.path === pageRoutes[i].path) { |
|||
return true |
|||
} |
|||
if (pageRoutes[i].children && pageRoutes[i].children.length >= 1) { |
|||
temp = temp.concat(pageRoutes[i].children) |
|||
} |
|||
} |
|||
return temp.length >= 1 ? fnCurrentRouteIsPageRoute(route, temp) : false |
|||
} |
|||
|
|||
/** |
|||
* 添加动态(菜单)路由 |
|||
* PH:自上而下遍历,累积平铺 |
|||
* @param {*} menuList 菜单列表 |
|||
* @param {*} routes 递归创建的动态(菜单)路由 |
|||
*/ |
|||
function fnAddDynamicMenuRoutes(menuList = [], menuListChildLength, routes = []) { |
|||
let index = 0 |
|||
// console.log(menuList)
|
|||
menuList.forEach((item, i) => { |
|||
// eslint-disable-next-line
|
|||
let URL = (item.url || '').replace(/{{([^}}]+)?}}/g, (s1, s2) => eval(s2)) // URL支持{{ window.xxx }}占位符变量
|
|||
item['meta'] = { |
|||
...window.SITE_CONFIG['contentTabDefault'], |
|||
menuId: item.id, |
|||
title: item.name |
|||
} |
|||
if (isURL(URL)) { |
|||
item['path'] = item['name'] = `i-${item.id}` |
|||
item['meta'].push({ |
|||
iframeURL: URL |
|||
}) |
|||
} else { |
|||
// console.log(URL)
|
|||
URL = URL.replace(/^\//, '').replace(/_/g, '-') |
|||
item['path'] = '/' + URL.replace(/\//g, '-') |
|||
item['name'] = URL.replace(/\//g, '-') |
|||
// 坑!!!父级也必须要有component,父级要有自己的vue组件,父级路由必须有<router-view />占位符
|
|||
// 其孩子children才能展示出来,孩子展示在父级占位符的地方
|
|||
URL.includes('seeDoctor') ? URL = 'seeDoctor' : '' // 不同父级有相同子级seeDoctor,防止面包屑冲突,动态路由名字区分设置为seeDoctor、seeDoctorOne,在寻找组件时替换回seeDoctor,可以找到对应组件路径
|
|||
item['component'] = () => Promise.resolve(require(`@/page-subspecialty/views/modules/${URL}`).default) |
|||
// 如果是父级给父级添加重定向到子菜单第一项
|
|||
if (item.children.length > 0 && item.children[0].url) { |
|||
// console.log(item)
|
|||
// isShow:0显示不菜单 1显示菜单
|
|||
item.children[0].isShow === 0 ? '' : item['redirect'] = '/' + item.children[0].url.replace(/\//g, '-') |
|||
} |
|||
} |
|||
if (item.children.length > 0) { |
|||
index++ |
|||
fnAddDynamicMenuRoutes(item.children) |
|||
} |
|||
}) |
|||
// routes = menuList
|
|||
// console.log(routes)
|
|||
// 此处一定要加判断,因为此方法在递归,要等到递归完成后再执行下面的内容
|
|||
// 坑!!!如果不加此判断,this.$route.matched面包屑的父级就不会展示
|
|||
if (menuListChildLength === index) { |
|||
routes = menuList |
|||
// PH:底层调用一次
|
|||
// 添加路由
|
|||
router.addRoutes([ |
|||
{ |
|||
...moduleRoutes, |
|||
name: 'main-dynamic-menu', |
|||
children: [...routes] |
|||
}, |
|||
{ path: '*', redirect: { name: '404' }} |
|||
]) |
|||
// console.log('----------------------')
|
|||
window.SITE_CONFIG['dynamicMenuRoutes'] = routes |
|||
window.SITE_CONFIG['dynamicMenuRoutesHasAdded'] = true |
|||
} |
|||
} |
|||
export default router |
|||
import Vue from "vue"; |
|||
import Router from "vue-router"; |
|||
import http from "../utils/request"; |
|||
import { isURL } from "@/utils/validate"; |
|||
import Cookies from "js-cookie"; |
|||
|
|||
Vue.use(Router); |
|||
|
|||
// 解决Vue-Router升级导致的Uncaught(in promise) navigation guard问题----------
|
|||
const originalPush = Router.prototype.push; |
|||
Router.prototype.push = function push(location, onResolve, onReject) { |
|||
if (onResolve || onReject) { |
|||
return originalPush.call(this, location, onResolve, onReject); |
|||
} |
|||
return originalPush.call(this, location).catch((err) => err); |
|||
}; |
|||
// 解决Vue-Router升级导致的Uncaught(in promise) navigation guard问题----------
|
|||
|
|||
// 页面路由(独立页面)
|
|||
export const pageRoutes = [ |
|||
{ |
|||
path: "/404", |
|||
component: () => import("@/page-subspecialty/views/pages/404"), |
|||
name: "404", |
|||
meta: { title: "404未找到" }, |
|||
beforeEnter(to, from, next) { |
|||
// 拦截处理特殊业务场景
|
|||
// 如果, 重定向路由包含__双下划线, 为临时添加路由
|
|||
if (/__.*/.test(to.redirectedFrom)) { |
|||
return next(to.redirectedFrom.replace(/__.*/, "")); |
|||
} |
|||
next(); |
|||
}, |
|||
}, |
|||
{ |
|||
path: "/login", |
|||
component: () => import("@/page-subspecialty/views/pages/login"), |
|||
name: "login", |
|||
meta: { title: "登录" }, |
|||
}, |
|||
// 录音
|
|||
{ |
|||
path: "/luyin", |
|||
name: "luyin", |
|||
component: () => import("@/page-subspecialty/views/pages/luyin"), |
|||
}, |
|||
// 日程安排
|
|||
{ |
|||
path: "/schedule", |
|||
name: "schedule", |
|||
component: () => import("@/page-subspecialty/views/pages/schedule"), |
|||
}, |
|||
{ |
|||
path: "/question", |
|||
name: "question", |
|||
component: () => import("@/page-subspecialty/views/pages/question"), |
|||
}, |
|||
{ |
|||
path: "/satusScreen", |
|||
name: "satusScreen", |
|||
component: () => import("@/page-subspecialty/views/pages/satusScreen"), |
|||
}, |
|||
{ |
|||
path: "/imageEdit", |
|||
name: "imageEdit", |
|||
component: () => import("@/page-subspecialty/views/pages/imageEdit"), |
|||
}, |
|||
{ |
|||
path: "/articleContent", |
|||
name: "articleContent", |
|||
component: () => |
|||
import( |
|||
"@/page-subspecialty/views/modules/articleManagement/articleContent" |
|||
), |
|||
}, |
|||
{ |
|||
path: "/transfer", |
|||
name: "transfer", |
|||
component: () => import("@/page-subspecialty/views/pages/transfer"), |
|||
}, |
|||
]; |
|||
|
|||
// 模块路由(基于主入口布局页面)*8
|
|||
export const moduleRoutes = { |
|||
path: "/", |
|||
component: () => import("@/page-subspecialty/views/main"), |
|||
name: "main", |
|||
redirect: { name: "patientManagement" }, |
|||
meta: { title: "首页" }, |
|||
children: [ |
|||
{ |
|||
path: "/patientManagement", |
|||
component: () => |
|||
import("@/page-subspecialty/views/modules/patientManagement/index"), |
|||
name: "patientManagement", |
|||
meta: { title: "分诊管理", isTab: true }, |
|||
}, |
|||
{ |
|||
path: "/patientDetail", |
|||
component: () => |
|||
import("@/page-subspecialty/views/modules/patientDetail"), |
|||
name: "patientDetail", |
|||
meta: { title: "档案管理", isTab: true }, |
|||
}, |
|||
// ok镜
|
|||
{ |
|||
path: "/patientInfo", |
|||
name: "patientInfo", |
|||
meta: { title: "详情", isTab: true }, |
|||
component: () => |
|||
import( |
|||
"@/page-subspecialty/views/modules/optometryManagement/seeDoctor/index" |
|||
), |
|||
}, |
|||
{ |
|||
path: "/iframe", |
|||
component: null, |
|||
name: "iframe", |
|||
meta: { title: "iframe", isTab: true }, |
|||
}, |
|||
{ |
|||
path: "/redirect", |
|||
name: "redirect", |
|||
component: () => import("@/page-subspecialty/views/redirect"), |
|||
}, |
|||
{ |
|||
path: "/ot", |
|||
name: "ot", |
|||
component: () => |
|||
import("@/page-subspecialty/views/modules/formList/deveopmentFIle.vue"), |
|||
}, |
|||
], |
|||
}; |
|||
|
|||
export function addDynamicRoute(routeParams, router) { |
|||
// 组装路由名称, 并判断是否已添加, 如是: 则直接跳转
|
|||
var routeName = routeParams.routeName; |
|||
var dynamicRoute = window.SITE_CONFIG["dynamicRoutes"].filter( |
|||
(item) => item.name === routeName |
|||
)[0]; |
|||
if (dynamicRoute) { |
|||
return router.push({ name: routeName, params: routeParams.params }); |
|||
} |
|||
// 否则: 添加并全局变量保存, 再跳转
|
|||
dynamicRoute = { |
|||
path: routeName, |
|||
component: () => |
|||
Promise.resolve( |
|||
require(`@/page-subspecialty/views/modules/${routeParams.path}`).default |
|||
), |
|||
// component: () => import(`@/views/modules/${routeParams.path}`),
|
|||
name: routeName, |
|||
meta: { |
|||
...window.SITE_CONFIG["contentTabDefault"], |
|||
menuId: routeParams.menuId, |
|||
title: `${routeParams.title}`, |
|||
}, |
|||
}; |
|||
router.addRoutes([ |
|||
{ |
|||
...moduleRoutes, |
|||
name: `main-dynamic__${dynamicRoute.name}`, |
|||
children: [dynamicRoute], |
|||
}, |
|||
]); |
|||
window.SITE_CONFIG["dynamicRoutes"].push(dynamicRoute); |
|||
router.push({ name: dynamicRoute.name, params: routeParams.params }); |
|||
} |
|||
|
|||
const createRouter = () => |
|||
new Router({ |
|||
mode: "history", |
|||
scrollBehavior: () => ({ y: 0 }), |
|||
routes: pageRoutes.concat(moduleRoutes), |
|||
}); |
|||
const router = createRouter(); |
|||
|
|||
// [vue-router] Duplicate named routes definition 重复的命名路由定义
|
|||
// 动态路由退出再登录会出现警告重复路由
|
|||
// 解决方案:在退出时调用resetRouter()方法
|
|||
export function resetRouter() { |
|||
const newRouter = createRouter(); |
|||
router.matcher = newRouter.matcher; // reset router
|
|||
} |
|||
|
|||
router.beforeEach((to, from, next) => { |
|||
// 添加动态(菜单)路由
|
|||
// 已添加或者当前路由为页面路由, 可直接访问
|
|||
if ( |
|||
window.SITE_CONFIG["dynamicMenuRoutesHasAdded"] || |
|||
fnCurrentRouteIsPageRoute(to, pageRoutes) |
|||
) { |
|||
return next(); |
|||
} |
|||
if (to.path === from.path) { |
|||
return; |
|||
} |
|||
if ( |
|||
to.name === "login" || |
|||
to.path === "/login" || |
|||
to.path === "satusScreen" || |
|||
to.name === "satusScreen" |
|||
) { |
|||
next(); |
|||
} else { |
|||
// 获取字典列表, 添加并全局变量保存
|
|||
// http.get('/sys/dict/type/all').then(({ data: res }) => {
|
|||
// if (res.code !== 0) {
|
|||
// return
|
|||
// }
|
|||
// window.SITE_CONFIG['dictList'] = res.data
|
|||
// }).catch(() => {})
|
|||
|
|||
// 获取左侧菜单列表,添加并全局变量保存
|
|||
http |
|||
.get("/sys/menu/nav") |
|||
.then(({ data: res }) => { |
|||
if (res.code !== 0) { |
|||
Vue.prototype.$message.error(res.msg); |
|||
return next({ name: "login" }); |
|||
} |
|||
window.SITE_CONFIG["menuList"] = res.data; |
|||
}) |
|||
.catch(() => { |
|||
return next({ name: "login" }); |
|||
}); |
|||
|
|||
// 获取菜单管理菜单列表,并添加动态路由
|
|||
http |
|||
.get("/sys/menu/list", { |
|||
params: { |
|||
type: 0, |
|||
}, |
|||
}) |
|||
.then(({ data: res }) => { |
|||
if (res.code !== 0) { |
|||
Vue.prototype.$message.error(res.msg); |
|||
return next({ name: "login" }); |
|||
} |
|||
// window.SITE_CONFIG['menuList'] = res.data
|
|||
const menuListChild = res.data.filter( |
|||
(item) => item.children.length > 0 |
|||
); |
|||
// console.log(menuListChild)
|
|||
fnAddDynamicMenuRoutes( |
|||
JSON.parse(JSON.stringify(res.data)), |
|||
menuListChild.length |
|||
); |
|||
|
|||
next({ ...to, replace: true }); |
|||
}) |
|||
.catch(() => { |
|||
// console.log(123)
|
|||
return next({ name: "login" }); |
|||
}); |
|||
// 获取【字段字典表】, 添加并全局变量保存
|
|||
// http.get('/sys/table/dict/getList', { params: { type: 1 }}).then(({ data: res }) => {
|
|||
// window.SITE_CONFIG['dict_colSearch'] = res.data
|
|||
// })
|
|||
getInitData(); |
|||
} |
|||
}); |
|||
function getInitData() { |
|||
// 获取字典列表, 添加并全局变量保存
|
|||
// http.get('/sys/dict/type/all').then(({ data: res }) => {
|
|||
// if (res.code !== 0) { return }
|
|||
// window.SITE_CONFIG['dictList'] = res.data
|
|||
// })
|
|||
|
|||
// 获取【字段字典表】, 添加并全局变量保存
|
|||
http.get("/table/dict/optionsColumn").then(({ data: res }) => { |
|||
window.SITE_CONFIG["dict_colAll"] = res.data; |
|||
}); |
|||
|
|||
// 获取【字段字典表】, 添加并全局变量保存
|
|||
http |
|||
.get("/table/dict/optionsColumn", { params: { type: 1 } }) |
|||
.then(({ data: res }) => { |
|||
window.SITE_CONFIG["dict_colSearch"] = res.data; |
|||
}); |
|||
|
|||
// 获取【字段字典表】, 添加并全局变量保存
|
|||
http |
|||
.get("/table/dict/optionsColumn", { params: { type: 2 } }) |
|||
.then(({ data: res }) => { |
|||
window.SITE_CONFIG["dict_colChart"] = res.data; |
|||
}); |
|||
|
|||
// 获取【字段字典表】, 添加并全局变量保存
|
|||
http |
|||
.get("/table/dict/optionsColumn", { params: { type: 3 } }) |
|||
.then(({ data: res }) => { |
|||
window.SITE_CONFIG["dict_colCrf"] = res.data; |
|||
}); |
|||
|
|||
// 获取【字段字典表】, 添加并全局变量保存
|
|||
http |
|||
.get("/table/dict/optionsColumn", { params: { type: 4 } }) |
|||
.then(({ data: res }) => { |
|||
window.SITE_CONFIG["dict_colExport"] = res.data; |
|||
}); |
|||
|
|||
// 获取【检查项目字典】, 添加并全局变量保存
|
|||
// http.get('/table/dict/examItem').then(({ data: res }) => {
|
|||
// sortChinese(res.data, 'itemName')
|
|||
// window.SITE_CONFIG['dict_examItem'] = res.data
|
|||
// })
|
|||
|
|||
// 获取【设备信息字典】, 添加并全局变量保存
|
|||
// http.get('/device/getData2RelDeviceList').then(({ data: res }) => {
|
|||
// window.SITE_CONFIG['dict_device'] = res.data
|
|||
// })
|
|||
|
|||
// 获取【设备与检查项目字典】, 添加并全局变量保存
|
|||
// http.get('/device/getData2RelDeviceItemList').then(({ data: res }) => {
|
|||
// window.SITE_CONFIG['dict_device_item'] = res.data
|
|||
// })
|
|||
} |
|||
/** |
|||
* 判断当前路由是否为页面路由 |
|||
* @param {*} route 当前路由 |
|||
* @param {*} pageRoutes 页面路由 |
|||
*/ |
|||
function fnCurrentRouteIsPageRoute(route, pageRoutes = []) { |
|||
var temp = []; |
|||
for (var i = 0; i < pageRoutes.length; i++) { |
|||
if (route.path === pageRoutes[i].path) { |
|||
return true; |
|||
} |
|||
if (pageRoutes[i].children && pageRoutes[i].children.length >= 1) { |
|||
temp = temp.concat(pageRoutes[i].children); |
|||
} |
|||
} |
|||
return temp.length >= 1 ? fnCurrentRouteIsPageRoute(route, temp) : false; |
|||
} |
|||
|
|||
/** |
|||
* 添加动态(菜单)路由 |
|||
* PH:自上而下遍历,累积平铺 |
|||
* @param {*} menuList 菜单列表 |
|||
* @param {*} routes 递归创建的动态(菜单)路由 |
|||
*/ |
|||
function fnAddDynamicMenuRoutes( |
|||
menuList = [], |
|||
menuListChildLength, |
|||
routes = [] |
|||
) { |
|||
let index = 0; |
|||
// console.log(menuList)
|
|||
menuList.forEach((item, i) => { |
|||
// eslint-disable-next-line
|
|||
let URL = (item.url || "").replace(/{{([^}}]+)?}}/g, (s1, s2) => eval(s2)); // URL支持{{ window.xxx }}占位符变量
|
|||
item["meta"] = { |
|||
...window.SITE_CONFIG["contentTabDefault"], |
|||
menuId: item.id, |
|||
title: item.name, |
|||
}; |
|||
if (isURL(URL)) { |
|||
item["path"] = item["name"] = `i-${item.id}`; |
|||
item["meta"].push({ |
|||
iframeURL: URL, |
|||
}); |
|||
} else { |
|||
// console.log(URL)
|
|||
URL = URL.replace(/^\//, "").replace(/_/g, "-"); |
|||
item["path"] = "/" + URL.replace(/\//g, "-"); |
|||
item["name"] = URL.replace(/\//g, "-"); |
|||
// 坑!!!父级也必须要有component,父级要有自己的vue组件,父级路由必须有<router-view />占位符
|
|||
// 其孩子children才能展示出来,孩子展示在父级占位符的地方
|
|||
URL.includes("seeDoctor") ? (URL = "seeDoctor") : ""; // 不同父级有相同子级seeDoctor,防止面包屑冲突,动态路由名字区分设置为seeDoctor、seeDoctorOne,在寻找组件时替换回seeDoctor,可以找到对应组件路径
|
|||
item["component"] = () => |
|||
Promise.resolve( |
|||
require(`@/page-subspecialty/views/modules/${URL}`).default |
|||
); |
|||
// 如果是父级给父级添加重定向到子菜单第一项
|
|||
if (item.children.length > 0 && item.children[0].url) { |
|||
// console.log(item)
|
|||
// isShow:0显示不菜单 1显示菜单
|
|||
item.children[0].isShow === 0 |
|||
? "" |
|||
: (item["redirect"] = "/" + item.children[0].url.replace(/\//g, "-")); |
|||
} |
|||
} |
|||
if (item.children.length > 0) { |
|||
index++; |
|||
fnAddDynamicMenuRoutes(item.children); |
|||
} |
|||
}); |
|||
// routes = menuList
|
|||
// console.log(routes)
|
|||
// 此处一定要加判断,因为此方法在递归,要等到递归完成后再执行下面的内容
|
|||
// 坑!!!如果不加此判断,this.$route.matched面包屑的父级就不会展示
|
|||
if (menuListChildLength === index) { |
|||
routes = menuList; |
|||
// PH:底层调用一次
|
|||
// 添加路由
|
|||
router.addRoutes([ |
|||
{ |
|||
...moduleRoutes, |
|||
name: "main-dynamic-menu", |
|||
children: [...routes], |
|||
}, |
|||
{ path: "*", redirect: { name: "404" } }, |
|||
]); |
|||
// console.log('----------------------')
|
|||
window.SITE_CONFIG["dynamicMenuRoutes"] = routes; |
|||
window.SITE_CONFIG["dynamicMenuRoutesHasAdded"] = true; |
|||
} |
|||
} |
|||
export default router; |
|||
|
@ -0,0 +1,341 @@ |
|||
<template> |
|||
<div id="operation-record" style=" background: #fff; padding: 10px 20px 50px 20px;page-break-after:always"> |
|||
<div class="btnBox"> |
|||
<el-button v-print="'#threeFunc'" size="small">打印</el-button> |
|||
<el-button type="primary" size="small" @click="handleSaveTable">保存</el-button> |
|||
</div> |
|||
<div id="threeFunc" style="width: 840px;padding-right: 8px"> |
|||
<p style="color:#000000;font-size:32px;margin:0 0 30px 0;text-align:center;"> |
|||
眼科激光手术患者知情同意书 |
|||
</p> |
|||
<!--患者信息--> |
|||
<div class="flex"> |
|||
<div class="flex a-c item">姓名:<el-input v-model="patient.patientName" style="flex: 1" placeholder="" /></div> |
|||
<div class="flex a-c item">年龄:<el-input v-model="patient.age" style="flex: 1" placeholder="" />岁</div> |
|||
<div class="flex a-c item">性别:<el-input v-model="patient.sex" style="flex: 1" placeholder="" /></div> |
|||
<div class="flex a-c item">眼别:<el-input v-model="patient.eyeLevel" style="flex: 1" placeholder="" /></div> |
|||
</div> |
|||
<!--术前判断--> |
|||
<div> |
|||
<div class="formTitle"> |
|||
一、术前诊断: |
|||
</div> |
|||
<div v-for="(item, index) in judgement" :key="index" class="judgeItem"> |
|||
{{ `${index+1}. ${item.name}:` }} |
|||
<el-input v-if="item.isEdit" v-model="item.remark" style="flex: 1" /> |
|||
<template v-else> |
|||
<div v-for="(judge,idx) in item.symptom" :key="idx" class="flex a-c"> |
|||
<el-checkbox v-model="judge.isSelected" class="checkboxItem" /> |
|||
{{ judge.title }} |
|||
<el-input v-if="judge.isEdit" v-model="judge.remark" style="flex: 1" /> |
|||
</div> |
|||
</template> |
|||
</div> |
|||
</div> |
|||
<!--麻醉方式选择--> |
|||
<div> |
|||
<div class="formTitle">二、麻醉方式选择:</div> |
|||
<div class="flex"> |
|||
<div v-for="(sel,i) in modeSelect" :key="i" style="margin-right: 30px"><el-checkbox v-model="sel.isSelected" class="checkboxItem" />{{ sel.name }}</div> |
|||
</div> |
|||
</div> |
|||
<!--拟行激光术名称--> |
|||
<div> |
|||
<div class="formTitle">三、拟行激光术名称:</div> |
|||
<div class="proposed"> |
|||
<div v-for="(item,i) in proposedName" :key="i" style="margin-right: 35px"><el-checkbox v-model="item.isSelected" class="checkboxItem" /> |
|||
{{ item.name }} |
|||
<span v-if="item.area">( |
|||
<span v-for="(area,index) in item.area" :key="`${index}_${i}`" class="areaItem"><el-checkbox v-model="area.isSelected" class="checkboxItem" />{{ area.name }}</span> |
|||
)</span> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<!-- 术中可能发生的并发症及处理--> |
|||
<div> |
|||
<div class="formTitle">四、术中可能发生的并发症及处理:</div> |
|||
<div v-for="(item,index) in intraoperation" :key="index"> |
|||
{{ `${index+1}. ${item}` }} |
|||
</div> |
|||
</div> |
|||
<!-- 术后视力预后--> |
|||
<div> |
|||
<div class="formTitle">五、术后视力预后</div> |
|||
<div>取决于眼内情况,若眼底条件太差或者出现并发症,激光治疗后视力可能恢复不良。</div> |
|||
</div> |
|||
<!-- 术后可能发生下列并发症--> |
|||
<div> |
|||
<div class="formTitle">六、术后可能发生下列并发症</div> |
|||
<div class="proposed"> |
|||
<div v-for="(post,idx) in postoperative" :key="idx" class="postItem" style="margin-right: 30px"> |
|||
{{ `${idx+1},${post}` }} |
|||
</div> |
|||
</div> |
|||
<div class="btnBox"> |
|||
<div> |
|||
<div class="flex a-c">主诊/谈话医生签名:<el-input v-model="doctor.name" style="flex: 1" /></div> |
|||
<div class="flex a-c">日期:<el-input v-model="doctor.dateTime" style="flex: 1" /></div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<!-- 术前患者--> |
|||
<div> |
|||
<div class="formTitle">七、术前患者(或家属、单位意见):</div> |
|||
<div class="proposed"> |
|||
医生已和我详细讨论了治疗计划、手术方式、治疗目的以及术后可能的效果。我已详细阅读以上内容,并完全理解和接受手术可能出现的风险和并发症,我同意医生的治疗并接受手术。 |
|||
</div> |
|||
<div class="btnBox"> |
|||
<div> |
|||
<div class="flex a-c">患者或直系亲属签名:<el-input v-model="patientInfo.name" style="flex: 1" /></div> |
|||
<div class="flex a-c">日期:<el-input v-model="patientInfo.dateTime" style="flex: 1" /></div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
export default { |
|||
name: 'InformedConsent', |
|||
data() { |
|||
return { |
|||
// 患者信息 |
|||
patient: { |
|||
patientName: '', |
|||
age: '', |
|||
sex: '', |
|||
eyeLevel: '' |
|||
}, |
|||
// 主诊医生 |
|||
doctor: { |
|||
name: '', |
|||
dateTime: '' |
|||
}, |
|||
patientInfo: { |
|||
name: '', |
|||
dateTime: '' |
|||
}, |
|||
// 术前判断 |
|||
judgement: [ |
|||
{ |
|||
name: '白内障', |
|||
symptom: [{ |
|||
title: '后发性', |
|||
isSelected: false |
|||
}, { |
|||
title: '其他', |
|||
isSelected: false, |
|||
isEdit: true, |
|||
remark: '' |
|||
}] |
|||
}, { |
|||
name: '青光眼', |
|||
symptom: [{ |
|||
title: '闭角型', |
|||
isSelected: false |
|||
}, { |
|||
title: '开角型', |
|||
isSelected: false |
|||
}, { |
|||
title: '其他', |
|||
isSelected: false, |
|||
remark: '', |
|||
isEdit: true |
|||
}] |
|||
}, { |
|||
name: '眼底病', |
|||
symptom: [{ |
|||
title: '糖尿病视网膜病变', |
|||
isSelected: false |
|||
}, { |
|||
title: '视网膜裂孔', |
|||
isSelected: false |
|||
}, { |
|||
title: '视网膜变性', |
|||
isSelected: false |
|||
}, { |
|||
title: '黄斑部疾病', |
|||
isSelected: false |
|||
}, { |
|||
title: '其他', |
|||
isSelected: false, |
|||
isEdit: true, |
|||
remark: '' |
|||
}] |
|||
}, { |
|||
name: '视网膜血管性病变', |
|||
symptom: [{ |
|||
title: '视网膜静脉阻塞(中央)', |
|||
isSelected: false |
|||
}, { |
|||
title: '视网膜静脉阻塞(分支)', |
|||
isSelected: false |
|||
}, { |
|||
title: '视网膜静脉周围炎', |
|||
isSelected: false |
|||
}] |
|||
}, { |
|||
name: "Coat's 病", |
|||
symptom: [{ |
|||
title: '', |
|||
isSelected: false |
|||
}] |
|||
}, { |
|||
name: '其他', |
|||
isEdit: true, |
|||
remark: '', |
|||
symptom: [] |
|||
} |
|||
], |
|||
// 麻醉方式选择 |
|||
modeSelect: [ |
|||
{ |
|||
name: '表麻', |
|||
isSelected: false |
|||
}, { |
|||
name: '局麻', |
|||
isSelected: false |
|||
}, { |
|||
name: '局麻+镇静', |
|||
isSelected: false |
|||
}, { |
|||
name: '基础麻醉', |
|||
isSelected: false |
|||
}, { |
|||
name: '其他', |
|||
isSelected: false, |
|||
isEdit: true, |
|||
remark: '' |
|||
} |
|||
], |
|||
// 拟行激光术名称 |
|||
proposedName: [ |
|||
{ |
|||
name: '激光后囊切开术', |
|||
isSelected: false |
|||
}, { |
|||
name: '激光前囊切开术', |
|||
isSelected: false |
|||
}, { |
|||
name: '激光周边虹膜切除', |
|||
isSelected: false |
|||
}, { |
|||
name: '激光房角成形术', |
|||
isSelected: false |
|||
}, { |
|||
name: '激光睫状体光凝术', |
|||
isSelected: false |
|||
}, { |
|||
name: '激光断线', |
|||
isSelected: false |
|||
}, { |
|||
name: '视网膜光凝术', |
|||
isSelected: false, |
|||
area: [{ |
|||
name: '局部', |
|||
isSelected: false |
|||
}, { |
|||
name: '全', |
|||
isSelected: false |
|||
}, { |
|||
name: '黄斑区', |
|||
isSelected: false |
|||
}] |
|||
}, { |
|||
name: '激光瞳孔成形术', |
|||
isSelected: false |
|||
}, { |
|||
name: '激光瞳孔残膜切开术', |
|||
isSelected: false |
|||
}, { |
|||
name: '激光虹膜黏连剖除术', |
|||
isSelected: false |
|||
}, { |
|||
name: '玻璃体条索切开术', |
|||
isSelected: false |
|||
}, { |
|||
name: '激光倒睫术', |
|||
isSelected: false |
|||
}, { |
|||
name: '其他', |
|||
isSelected: false |
|||
} |
|||
], |
|||
// 术中 |
|||
intraoperation: ['麻醉意外:需进行抢救或暂停手术', '出血:需要压迫止血,推迟或暂停手术', '其他无法预计的并发症', '术中可能会根据具体情况变更手术方式'], |
|||
postoperative: ['暂时性眼压升高', '损伤人工晶体', '角膜内皮损伤', '虹膜炎症反应', '玻璃体前界膜破裂', '视功能损伤', '渗出性视网膜脱离', '黄斑水肿', '脉络膜脱离', '虹膜(视网膜、脉络膜)出血', '其他'] |
|||
} |
|||
}, |
|||
methods: { |
|||
handleSaveTable() { |
|||
const data = { |
|||
patient: this.patient, |
|||
doctor: this.doctor, |
|||
patientInfo: this.patientInfo, |
|||
judgement: this.judgement, |
|||
modeSelect: this.modeSelect, |
|||
proposedName: this.proposedName |
|||
} |
|||
console.log(data) |
|||
this.$emit('save', data) |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.flex{ |
|||
display: flex; |
|||
} |
|||
.a-c{ |
|||
align-items: center; |
|||
} |
|||
.item{ |
|||
&:not(:last-child){ |
|||
margin-right: 15px; |
|||
} |
|||
} |
|||
.formTitle{ |
|||
font-weight: bold; |
|||
margin-top: 10px; |
|||
} |
|||
.areaItem{ |
|||
&:not(:last-child){ |
|||
margin-right: 10px; |
|||
} |
|||
} |
|||
.judgeItem{ |
|||
display: flex; |
|||
align-items: center; |
|||
div{ |
|||
margin: 0 5px; |
|||
} |
|||
} |
|||
.checkboxItem{ |
|||
margin-right: 5px; |
|||
} |
|||
.proposed{ |
|||
display: flex; |
|||
flex-wrap: wrap; |
|||
} |
|||
.btnBox{ |
|||
display: flex; |
|||
justify-content: flex-end; |
|||
} |
|||
::v-deep .el-input__inner { |
|||
border: none; |
|||
height: 26px !important; |
|||
line-height: 26px !important; |
|||
text-align: center; |
|||
} |
|||
|
|||
::v-deep .el-input__inner { |
|||
border-bottom: 1px solid #ccc; |
|||
border-radius: 0; |
|||
padding: 0; |
|||
} |
|||
::v-deep .el-input__prefix { |
|||
display: none; |
|||
} |
|||
</style> |
@ -0,0 +1,609 @@ |
|||
<template> |
|||
<div id="operation-record" style=" background: #fff; padding: 10px 20px 50px 20px;page-break-after:always"> |
|||
<div class="btnBox"> |
|||
<el-button v-print="'#threeFunc'" size="small">打印</el-button> |
|||
<el-button type="primary" size="small" @click="handleSaveTable">保存</el-button> |
|||
</div> |
|||
<div id="threeFunc" style="width: 840px;padding-right: 8px"> |
|||
<p style="color:#000000;font-size:32px;margin:0 0 30px 0;text-align:center;"> |
|||
青少年儿童屈光发育档案 |
|||
</p> |
|||
<div class="operation-record-table"> |
|||
<el-table :data="headData" :span-method="headSpanMethod" border style="width: 820px; margin-top: 20px"> |
|||
<el-table-column label="" width="" align="center" :resizable="false"> |
|||
<template slot-scope="scope"> |
|||
<span>{{ scope.row.name }}</span> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column label="" width="" :resizable="false" prop="type"> |
|||
<template slot-scope="scope"> |
|||
<div v-if="scope.row.name == '姓名'"> |
|||
<div class="width-100 center"> |
|||
<el-input v-model="scope.row.patientName" placeholder="" /> |
|||
</div> |
|||
</div> |
|||
<div v-if="scope.row.name == '身高'"> |
|||
<div class="width-100 center"> |
|||
<el-input v-model="scope.row.height" placeholder="" /> |
|||
</div> |
|||
</div> |
|||
<div v-if="scope.row.name == '是否戴镜'"> |
|||
<div class="width-100 center"> |
|||
<el-input v-model="scope.row.isMirror" 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"> |
|||
性别 |
|||
</div> |
|||
</div> |
|||
<div v-if="scope.row.name == '身高'"> |
|||
<div class="width-100 center"> |
|||
体重 |
|||
</div> |
|||
</div> |
|||
<div v-if="scope.row.name == '是否戴镜'"> |
|||
<div class="width-100 center"> |
|||
戴镜习惯 |
|||
</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.sex" placeholder="" /> |
|||
</div> |
|||
</div> |
|||
<div v-if="scope.row.name == '身高'"> |
|||
<div class="width-100 center"> |
|||
<el-input v-model="scope.row.weight" placeholder="" /> |
|||
</div> |
|||
</div> |
|||
<div v-if="scope.row.name == '是否戴镜'"> |
|||
<div class="width-100 center"> |
|||
<el-input v-model="scope.row.mirrorHabit" 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"> |
|||
出生日期 |
|||
</div> |
|||
</div> |
|||
<div v-if="scope.row.name == '身高'"> |
|||
<div class="width-100 center"> |
|||
何时发现视力下降 |
|||
</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.birthday" placeholder="" /> |
|||
</div> |
|||
</div> |
|||
<div v-if="scope.row.name == '身高'"> |
|||
<div class="width-100 center"> |
|||
<el-input v-model="scope.row.time" placeholder="" /> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<el-table :data="tableData" :span-method="objectSpanMethod" border style="width: 820px"> |
|||
<el-table-column label="" width="" align="center" :resizable="false"> |
|||
<template slot-scope="scope"> |
|||
<span>{{ scope.row.name }}</span> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column label="" width="" :resizable="false" prop="type"> |
|||
<template slot-scope="scope"> |
|||
<div v-if="scope.row.name == '戴镜类型'"> |
|||
<div class="width-180 center"> |
|||
<el-checkbox-group v-model="scope.row.mirrorType"> |
|||
<el-checkbox label="框架" /> |
|||
<el-checkbox label="OK镜" /> |
|||
<el-checkbox label="RGP" /> |
|||
<el-checkbox label="软镜" /> |
|||
</el-checkbox-group> |
|||
</div> |
|||
</div> |
|||
<div v-if="scope.row.name == '旧镜参数'"> |
|||
<div class="width-120 center"> |
|||
OD:<el-input v-model="scope.row.od" placeholder="" /> |
|||
</div> |
|||
</div> |
|||
<div v-if="scope.row.name == '父母是否近视'"> |
|||
<div class="width-180 center"> |
|||
<el-checkbox-group v-model="scope.row.shortsighte"> |
|||
<el-checkbox label="父亲" /> |
|||
<el-checkbox label="母亲" /> |
|||
<el-checkbox label="父亲和母亲" /> |
|||
<el-checkbox label="均无" /> |
|||
</el-checkbox-group> |
|||
</div> |
|||
</div> |
|||
<div v-if="scope.row.name == '户外活动时间'"> |
|||
<div class="width-180 center"> |
|||
<el-checkbox-group v-model="scope.row.outTime"> |
|||
<el-checkbox label="<1h" /> |
|||
<el-checkbox label="1h-2h" /> |
|||
<el-checkbox label=">2h" /> |
|||
</el-checkbox-group> |
|||
</div> |
|||
</div> |
|||
<div v-if="scope.row.name == '备注'"> |
|||
<div class="width-180 center"> |
|||
<el-input v-model="scope.row.note" placeholder="" /> |
|||
</div> |
|||
</div> |
|||
<div v-if="scope.row.name == '项目'"> |
|||
<div class="width-180 center"> |
|||
OD |
|||
</div> |
|||
</div> |
|||
<div v-if="scope.row.name == '裸眼/旧镜视力'"> |
|||
<div class="width-180 center"> |
|||
<el-input v-model="scope.row.od" placeholder="" /> |
|||
</div> |
|||
</div> |
|||
<div v-if="scope.row.name == '是否散瞳'"> |
|||
<div class="width-180 center"> |
|||
<el-checkbox-group v-model="scope.row.mydriasis"> |
|||
<el-checkbox label="未散瞳" /> |
|||
<el-checkbox label="美多丽" /> |
|||
<el-checkbox label="阿托品" /> |
|||
<el-checkbox label="其他" /> |
|||
</el-checkbox-group> |
|||
</div> |
|||
</div> |
|||
<div v-if="scope.row.name == '主觉验光'"> |
|||
<div class="width-180 center"> |
|||
<el-input v-model="scope.row.od" placeholder="" style="width: 100px" /> |
|||
</div> |
|||
</div> |
|||
<div v-if="scope.row.name == '眼位'"> |
|||
<div class="width-180 center"> |
|||
<el-input v-model="scope.row.od" placeholder="" /> |
|||
</div> |
|||
</div> |
|||
<div v-if="scope.row.name == '眼压/mmHg'"> |
|||
<div class="width-180 center"> |
|||
<el-input v-model="scope.row.od" placeholder="" /> |
|||
</div> |
|||
</div> |
|||
<div v-if="scope.row.name == '角膜曲率/D'"> |
|||
<div class="width-180 center"> |
|||
<el-input v-model="scope.row.od" placeholder="" /> |
|||
</div> |
|||
</div> |
|||
<div v-if="scope.row.name == '角膜厚度/μm'"> |
|||
<div class="width-180 center"> |
|||
<el-input v-model="scope.row.od" placeholder="" /> |
|||
</div> |
|||
</div> |
|||
<div v-if="scope.row.name == '处方'"> |
|||
<div class="width-180 center"> |
|||
<el-input v-model="scope.row.od" placeholder="" /> |
|||
</div> |
|||
</div> |
|||
<div v-if="scope.row.name == '建议'"> |
|||
<div class="width-180 center"> |
|||
<el-checkbox-group v-model="scope.row.suggest"> |
|||
<el-checkbox label="框架" /> |
|||
<el-checkbox label="OK镜" /> |
|||
<el-checkbox label="RGP" /> |
|||
<el-checkbox label="软镜" /> |
|||
<el-checkbox label="其他" /> |
|||
</el-checkbox-group> |
|||
</div> |
|||
</div> |
|||
<div v-if="scope.row.name == '眼轴/眼底照/地形图'"> |
|||
<div class="width-180 center"> |
|||
<el-input v-model="scope.row.type" 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-120 center"> |
|||
OS:<el-input v-model="scope.row.os" placeholder="" /> |
|||
</div> |
|||
</div> |
|||
<div v-if="scope.row.name == '项目'"> |
|||
<div class="width-180 center"> |
|||
OS |
|||
</div> |
|||
</div> |
|||
<div v-if="scope.row.name == '裸眼/旧镜视力'"> |
|||
<div class="width-180 center"> |
|||
<el-input v-model="scope.row.os" placeholder="" /> |
|||
</div> |
|||
</div> |
|||
<div v-if="scope.row.name == '主觉验光'"> |
|||
<div class="width-180 center"> |
|||
<el-input v-model="scope.row.os" placeholder="" style="width: 100px" /> |
|||
</div> |
|||
</div> |
|||
<div v-if="scope.row.name == '眼位'"> |
|||
<div class="width-180 center"> |
|||
<el-input v-model="scope.row.os" placeholder="" /> |
|||
</div> |
|||
</div> |
|||
<div v-if="scope.row.name == '眼压/mmHg'"> |
|||
<div class="width-180 center"> |
|||
<el-input v-model="scope.row.os" placeholder="" /> |
|||
</div> |
|||
</div> |
|||
<div v-if="scope.row.name == '角膜曲率/D'"> |
|||
<div class="width-180 center"> |
|||
<el-input v-model="scope.row.os" placeholder="" /> |
|||
</div> |
|||
</div> |
|||
<div v-if="scope.row.name == '角膜厚度/μm'"> |
|||
<div class="width-180 center"> |
|||
<el-input v-model="scope.row.os" placeholder="" /> |
|||
</div> |
|||
</div> |
|||
<div v-if="scope.row.name == '处方'"> |
|||
<div class="width-180 center"> |
|||
<el-input v-model="scope.row.os" placeholder="" /> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
<script> |
|||
export default { |
|||
props: { |
|||
archiveCaseCRFItem: { |
|||
type: Object, |
|||
default: () => { } |
|||
}, |
|||
formContent: { |
|||
type: Object, |
|||
default: () => { } |
|||
} |
|||
}, |
|||
data() { |
|||
return { |
|||
dataForm: { |
|||
yghcValue: '', |
|||
operationListValueOD: [] |
|||
}, |
|||
headData: [ |
|||
{ |
|||
name: '个人基础信息', |
|||
type: '' |
|||
}, |
|||
{ |
|||
name: '姓名', |
|||
patientName: '', |
|||
sex: '', |
|||
birthday: '', |
|||
type: '' |
|||
}, { |
|||
name: '身高', |
|||
height: '', |
|||
weight: '', |
|||
time: '' |
|||
}, { |
|||
name: '是否戴镜', |
|||
isMirror: '', |
|||
mirrorHabit: '', |
|||
type: '' |
|||
}], |
|||
tableData: [ |
|||
{ |
|||
name: '戴镜类型', |
|||
mirrorType: [] |
|||
}, |
|||
{ |
|||
name: '旧镜参数', |
|||
od: '', |
|||
os: '', |
|||
type: '' |
|||
}, { |
|||
name: '父母是否近视', |
|||
shortsighte: [] |
|||
}, { |
|||
name: '户外活动时间', |
|||
outTime: [], |
|||
type: '' |
|||
}, { |
|||
name: '备注', |
|||
note: '' |
|||
}, { |
|||
name: '综合检查信息', |
|||
type: '1' |
|||
}, { |
|||
name: '项目' |
|||
}, { |
|||
name: '裸眼/旧镜视力', |
|||
od: '', |
|||
os: '' |
|||
}, { |
|||
name: '是否散瞳', |
|||
mydriasis: [] |
|||
}, { |
|||
name: '主觉验光', |
|||
od: '', |
|||
os: '', |
|||
vaod: '', |
|||
vaos: '', |
|||
type: '2' |
|||
}, { |
|||
name: '眼位', |
|||
od: '', |
|||
os: '', |
|||
type: '' |
|||
}, { |
|||
name: '眼压/mmHg', |
|||
od: '', |
|||
os: '' |
|||
}, { |
|||
name: '角膜曲率/D', |
|||
od: '', |
|||
os: '' |
|||
}, { |
|||
name: '角膜厚度/μm', |
|||
od: '', |
|||
os: '' |
|||
}, { |
|||
name: '处方', |
|||
od: '', |
|||
os: '' |
|||
}, { |
|||
name: '建议', |
|||
suggest: [] |
|||
}, { |
|||
name: '眼轴/眼底照/地形图', |
|||
type: '' |
|||
}] |
|||
} |
|||
}, |
|||
computed: { |
|||
operationRecord: { |
|||
get() { |
|||
return this.$store.getters.operationRecord |
|||
} |
|||
} |
|||
}, |
|||
watch: { |
|||
operationRecord: { |
|||
handler(value) { |
|||
console.log(value) |
|||
}, |
|||
deep: true, |
|||
immediate: true |
|||
} |
|||
}, |
|||
created() { |
|||
// this.printPage('threeFunc') |
|||
}, |
|||
methods: { |
|||
setData() { |
|||
this.headData = this.formContent.a |
|||
this.tableData = this.formContent.b |
|||
}, |
|||
// 签名 |
|||
singHandle(text) { |
|||
const value = { |
|||
text: text, |
|||
pageName: 'operationRecord' |
|||
} |
|||
this.$store.commit('beginSign', value) |
|||
}, |
|||
objectSpanMethod({ row, column, rowIndex, columnIndex }) { |
|||
if (columnIndex === 0) { |
|||
if (rowIndex === 5) { |
|||
return { |
|||
rowspan: 1, |
|||
colspan: 3 |
|||
} |
|||
} |
|||
} else if (columnIndex === 1) { |
|||
if (rowIndex === 0 || rowIndex === 2 || rowIndex === 3 || rowIndex === 4 || rowIndex === 8 || rowIndex === 15 || rowIndex === 16) { |
|||
return { |
|||
rowspan: 1, |
|||
colspan: 2 |
|||
} |
|||
} else if (rowIndex === 5) { |
|||
return { |
|||
rowspan: 0, |
|||
colspan: 0 |
|||
} |
|||
} |
|||
} else if (columnIndex === 2) { |
|||
if (rowIndex === 0 || rowIndex === 2 || rowIndex === 3 || rowIndex === 4 || rowIndex === 5 || rowIndex === 8 || rowIndex === 15 || rowIndex === 16) { |
|||
return { |
|||
rowspan: 0, |
|||
colspan: 0 |
|||
} |
|||
} |
|||
} |
|||
}, |
|||
headSpanMethod({ row, column, rowIndex, columnIndex }) { |
|||
if (columnIndex === 0) { |
|||
if (rowIndex === 0) { |
|||
return { |
|||
rowspan: 1, |
|||
colspan: 6 |
|||
} |
|||
} |
|||
} else if (columnIndex === 1 || columnIndex === 3) { |
|||
if (rowIndex === 3) { |
|||
return { |
|||
rowspan: 1, |
|||
colspan: 2 |
|||
} |
|||
} |
|||
} else if (columnIndex === 1 || columnIndex === 2 || columnIndex === 3 || columnIndex === 4 || columnIndex === 5) { |
|||
if (rowIndex === 0) { |
|||
return { |
|||
rowspan: 0, |
|||
colspan: 0 |
|||
} |
|||
} |
|||
} |
|||
}, |
|||
handlePrint() { |
|||
this.printPage('threeFunc') |
|||
}, |
|||
handleSaveTable() { |
|||
const data = { |
|||
a: this.headData, |
|||
b: this.tableData |
|||
} |
|||
this.$emit('save', data) |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss"> |
|||
|
|||
#operation-record { |
|||
//height: 93%; |
|||
// overflow: auto; |
|||
.btnBox{ |
|||
display: flex; |
|||
justify-content: flex-end; |
|||
} |
|||
.el-table--border{ |
|||
border-right: 1px solid #EBEEF5; |
|||
} |
|||
.operation-record-table { |
|||
//width: 100%; |
|||
width: 840px !important; |
|||
padding-right: 8px; |
|||
.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-180 { |
|||
.el-input { |
|||
width: 180px; |
|||
} |
|||
} |
|||
.el-input__inner { |
|||
border: none; |
|||
height: 26px !important; |
|||
line-height: 26px !important; |
|||
text-align: center; |
|||
} |
|||
|
|||
.el-input__inner { |
|||
border-bottom: 1px solid #ccc; |
|||
border-radius: 0; |
|||
padding: 0; |
|||
} |
|||
.el-input__prefix { |
|||
display: none; |
|||
} |
|||
//.el-date-editor.el-input, |
|||
//.el-date-editor.el-input__inner { |
|||
// width: 140px; |
|||
//} |
|||
//.el-input__suffix { |
|||
// top: -7px; |
|||
//} |
|||
//.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-radio__input.is-checked + .el-radio__label { |
|||
// color: #606266; |
|||
//} |
|||
//.el-radio__input.is-checked .el-radio__inner { |
|||
// background: #767676; |
|||
// border-color: #767676; |
|||
//} |
|||
//.el-radio { |
|||
// margin-right: 8px; |
|||
// display: block; |
|||
//} |
|||
//.el-radio__inner { |
|||
// border: 1px solid #767676 !important; |
|||
//} |
|||
//.el-radio__inner:hover { |
|||
// 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; |
|||
} |
|||
} |
|||
.el-table__header-wrapper{ |
|||
display: none; |
|||
} |
|||
} |
|||
</style> |
@ -0,0 +1,253 @@ |
|||
<template> |
|||
<div id="operation-record" style=" background: #fff; padding: 10px 20px 50px 20px;page-break-after:always"> |
|||
<div class="btnBox"> |
|||
<el-button v-print="'#threeFunc'" size="small">打印</el-button> |
|||
<el-button type="primary" size="small" @click="handleSaveTable">保存</el-button> |
|||
</div> |
|||
<div id="threeFunc" style="width: 840px;padding-right: 8px"> |
|||
<p style="color:#000000;font-size:32px;margin:0 0 30px 0;text-align:center;"> |
|||
眼科激光手术患者知情同意书 |
|||
</p> |
|||
<!--患者信息--> |
|||
<div> |
|||
<div class="flex"> |
|||
<div class="flex a-c item">姓名:<el-input v-model="patient.patientName" style="flex: 1" /></div> |
|||
<div class="flex a-c item">年龄:<el-input v-model="patient.age" style="flex: 1" />岁</div> |
|||
<div class="flex a-c item">性别:<el-input v-model="patient.sex" style="flex: 1" /></div> |
|||
<div class="flex a-c item">病例号:<el-input v-model="patient.caseNo" style="flex: 1" /></div> |
|||
</div> |
|||
<div class="flex"> |
|||
<div class="flex a-c">联系电话:<el-input v-model="patient.phone" style="flex: 1" /></div> |
|||
<div class="flex a-c item">家庭住址:<el-input v-model="patient.address" style="flex: 1" /></div> |
|||
</div> |
|||
<div class="flex a-c item">诊断:<el-input v-model="patient.diagnose" style="flex: 1" /></div> |
|||
</div> |
|||
<!-- 治疗前--> |
|||
<div class="subTitle">治疗前</div> |
|||
<table class="treatAction"> |
|||
<thead> |
|||
<tr> |
|||
<th colspan="2">OD</th> |
|||
<th colspan="2">OS</th> |
|||
</tr> |
|||
</thead> |
|||
<tbody> |
|||
<tr> |
|||
<td> |
|||
<div class="flex a-c">{{ beforeTreat.OD.eye.name }}:<el-input v-model="beforeTreat.OD.eye.level" style="flex: 1" /></div> |
|||
<div class="flex a-c">{{ beforeTreat.OD.illness.name }}:<el-input v-model="beforeTreat.OD.illness.desc" style="flex: 1" /></div> |
|||
</td> |
|||
<td> |
|||
<div class="descImg">示意图</div> |
|||
</td> |
|||
<td> |
|||
<div class="flex a-c">{{ beforeTreat.OS.eye.name }}:<el-input v-model="beforeTreat.OS.eye.level" style="flex: 1" /></div> |
|||
<div class="flex a-c">{{ beforeTreat.OS.illness.name }}:<el-input v-model="beforeTreat.OS.illness.desc" style="flex: 1" /></div> |
|||
</td> |
|||
<td> |
|||
<div class="descImg">示意图</div> |
|||
</td> |
|||
</tr> |
|||
</tbody> |
|||
</table> |
|||
<!-- 激光治疗--> |
|||
<div class="subTitle">激光治疗</div> |
|||
<table class="treatAction"> |
|||
<thead> |
|||
<tr> |
|||
<th colspan="2">OD</th> |
|||
<th colspan="2">OS</th> |
|||
</tr> |
|||
</thead> |
|||
<tbody> |
|||
<tr v-for="(item,index) in treatData" :key="index"> |
|||
<td> |
|||
<div class="flex a-c">日期:<el-input v-model="item.OD.data" style="flex: 1" /></div> |
|||
<div class="flex a-c">次数:<el-input v-model="item.OD.order" style="flex: 1" /></div> |
|||
<div class="flex a-c">视力:<el-input v-model="item.OD.vision" style="flex: 1" /></div> |
|||
<div class="flex a-c">光斑大小:<el-input v-model="item.OD.flareSize" style="flex: 1" /></div> |
|||
<div class="flex a-c">功率:<el-input v-model="item.OD.power" style="flex: 1" /></div> |
|||
<div class="flex a-c">点数:<el-input v-model="item.OD.count" style="flex: 1" /></div> |
|||
</td> |
|||
<td> |
|||
<div class="descImg">示意图</div> |
|||
</td> |
|||
<td> |
|||
<div class="flex a-c">日期:<el-input v-model="item.OS.data" style="flex: 1" /></div> |
|||
<div class="flex a-c">次数:<el-input v-model="item.OS.order" style="flex: 1" /></div> |
|||
<div class="flex a-c">视力:<el-input v-model="item.OS.vision" style="flex: 1" /></div> |
|||
<div class="flex a-c">光斑大小:<el-input v-model="item.OS.flareSize" style="flex: 1" /></div> |
|||
<div class="flex a-c">功率:<el-input v-model="item.OS.power" style="flex: 1" /></div> |
|||
<div class="flex a-c">点数:<el-input v-model="item.OS.count" style="flex: 1" /></div> |
|||
</td> |
|||
<td> |
|||
<div class="descImg">示意图</div> |
|||
</td> |
|||
</tr> |
|||
</tbody> |
|||
</table> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
export default { |
|||
name: 'LaserSurgery', |
|||
data() { |
|||
return { |
|||
// 患者信息 |
|||
patient: { |
|||
patientName: '', |
|||
age: '', |
|||
sex: '', |
|||
caseNo: '', |
|||
phone: '', |
|||
address: '', |
|||
diagnose: '' |
|||
}, |
|||
beforeTreat: { |
|||
OD: { |
|||
eye: { |
|||
name: '视力1', |
|||
level: '' |
|||
}, |
|||
illness: { |
|||
name: '疾病分期', |
|||
desc: '' |
|||
} |
|||
}, |
|||
OS: { |
|||
eye: { |
|||
name: '视力2', |
|||
level: '' |
|||
}, |
|||
illness: { |
|||
name: '疾病分期', |
|||
desc: '' |
|||
} |
|||
} |
|||
}, |
|||
treatData: [ |
|||
{ |
|||
OD: { |
|||
date: '', |
|||
order: '', |
|||
vision: '', |
|||
flareSize: '', |
|||
power: '', |
|||
count: '' |
|||
}, |
|||
OS: { |
|||
date: '', |
|||
order: '', |
|||
vision: '', |
|||
flareSize: '', |
|||
power: '', |
|||
count: '' |
|||
} |
|||
}, |
|||
{ |
|||
OD: { |
|||
date: '', |
|||
order: '', |
|||
vision: '', |
|||
flareSize: '', |
|||
power: '', |
|||
count: '' |
|||
}, |
|||
OS: { |
|||
date: '', |
|||
order: '', |
|||
vision: '', |
|||
flareSize: '', |
|||
power: '', |
|||
count: '' |
|||
} |
|||
}, |
|||
{ |
|||
OD: { |
|||
date: '', |
|||
order: '', |
|||
vision: '', |
|||
flareSize: '', |
|||
power: '', |
|||
count: '' |
|||
}, |
|||
OS: { |
|||
date: '', |
|||
order: '', |
|||
vision: '', |
|||
flareSize: '', |
|||
power: '', |
|||
count: '' |
|||
} |
|||
} |
|||
] |
|||
} |
|||
}, |
|||
methods: { |
|||
handleSaveTable() { |
|||
const data = { |
|||
treat: this.treatData, |
|||
beforeTreat: this.beforeTreat |
|||
} |
|||
// console.log(data) |
|||
this.$emit('save', data) |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.flex{ |
|||
display: flex; |
|||
} |
|||
.a-c{ |
|||
align-items: center; |
|||
} |
|||
.item{ |
|||
flex: 1; |
|||
&:not(:last-child){ |
|||
margin-right: 15px; |
|||
} |
|||
} |
|||
.subTitle{ |
|||
text-align: center; |
|||
font-size: 16px; |
|||
font-weight: 500; |
|||
margin-top: 30px; |
|||
} |
|||
.descImg{ |
|||
font-size: 12px; |
|||
height: 140px; |
|||
} |
|||
.treatAction{ |
|||
width: 100%; |
|||
tr td,tr th{ |
|||
border: 1px solid #ccc; |
|||
padding: 5px; |
|||
} |
|||
td{ |
|||
width: 25%; |
|||
} |
|||
} |
|||
.btnBox{ |
|||
display: flex; |
|||
justify-content: flex-end; |
|||
} |
|||
::v-deep .el-input__inner { |
|||
border: none; |
|||
height: 26px !important; |
|||
line-height: 26px !important; |
|||
text-align: center; |
|||
} |
|||
|
|||
::v-deep .el-input__inner { |
|||
border-bottom: 1px solid #ccc; |
|||
border-radius: 0; |
|||
padding: 0; |
|||
} |
|||
::v-deep .el-input__prefix { |
|||
display: none; |
|||
} |
|||
</style> |
Loading…
Reference in new issue