bianyaqi 2 years ago
parent
commit
d3fc8d26d2
  1. 58
      src/components/360View/afterPart/index.vue
  2. 60
      src/components/360View/commonForm/deveopmentFIle.vue
  3. 228
      src/components/360View/commonForm/eyesVision.vue
  4. 45
      src/components/360View/commonForm/optometryForm.vue
  5. 34
      src/components/360View/commonForm/threeVision.vue
  6. 56
      src/components/360View/forePart/index.vue
  7. 219
      src/components/360View/img-reccrd.vue
  8. 67
      src/components/360View/index1.vue
  9. 71
      src/components/360View/itemSelect/index.vue
  10. 8
      src/components/360View/opticalFile/index.vue
  11. 213
      src/components/360View/routine/index.vue
  12. 156
      src/components/360View/show-file.vue
  13. 22
      src/components/360View/special/index.vue
  14. 249
      src/mixins/view-module.js
  15. 2
      src/page-subspecialty/App.vue
  16. 165
      src/page-subspecialty/main.js
  17. 369
      src/page-subspecialty/router/index.js
  18. 22
      src/page-subspecialty/views/modules/optometryManagement/dioptric/index.vue
  19. 110
      src/page-subspecialty/views/modules/outpatientManagement/call/index.vue
  20. 17
      src/page-subspecialty/views/modules/outpatientManagement/treat/index.vue
  21. 284
      src/page-subspecialty/views/pages/pacsManage/index.vue

58
src/components/360View/afterPart/index.vue

@ -103,6 +103,7 @@ export default {
type: '',
doctorId: '',
deleteId: '',
treeFlag: '',
treeId: '',
treeName: '',
weight: '',
@ -119,6 +120,7 @@ export default {
name: '黄斑'
}, {
name: '黄斑',
sort: 99,
id: 14,
type: 'hangman',
od: '',
@ -143,6 +145,7 @@ export default {
name: '视网膜'
}, {
name: '视网膜',
sort: 99,
id: 17,
type: 'showing',
od: '',
@ -151,6 +154,7 @@ export default {
name: '脉络膜'
}, {
name: '脉络膜',
sort: 99,
id: 18,
type: 'mailbomb',
od: '',
@ -159,6 +163,7 @@ export default {
name: '玻璃体 vitreous'
}, {
name: '玻璃体 vitreous',
sort: 99,
id: 19,
type: 'blit',
od: '',
@ -167,6 +172,7 @@ export default {
name: '血管'
}, {
name: '血管',
sort: 99,
id: 20,
type: 'began',
od: '',
@ -175,6 +181,7 @@ export default {
name: '巩膜'
}, {
name: '巩膜',
sort: 99,
id: 21,
type: 'gong',
od: '',
@ -183,6 +190,7 @@ export default {
name: '边缘 periphery'
}, {
name: '边缘 periphery',
sort: 99,
id: 22,
type: 'banyan',
od: '',
@ -240,8 +248,9 @@ export default {
},
//
addAfterData() {
if (!this.multipleSelection.length) return this.$message.warning('请勾选数据!')
const data = this.multipleSelection.filter(item => {
return item.id >= 1
return item.type !== undefined
})
eventBus.$emit('sendForData', data)
},
@ -260,7 +269,12 @@ export default {
item.forEach(row => {
this.tableData.forEach(e => {
if (e.type === row.type) {
e.data = [row]
e.data = item
const sort = item.sort
item.sort = ''
this.$nextTick(() => {
item.sort = sort
})
}
})
})
@ -278,12 +292,24 @@ export default {
this.tableData.forEach(item => {
if (item.sort) {
item.od = item.os
item.odValue = item.osValue
const sort = item.sort
item.sort = ''
this.$nextTick(() => {
item.sort = sort
})
}
})
} else {
this.tableData.forEach(item => {
if (item.sort) {
item.os = item.od
item.osValue = item.odValue
const sort = item.sort
item.sort = ''
this.$nextTick(() => {
item.sort = sort
})
}
})
}
@ -295,15 +321,20 @@ export default {
} else {
this.tableData[value.index].os = value.row
}
const sort = this.tableData[index].sort
this.tableData[index].sort = ''
this.$nextTick(() => {
this.tableData[index].sort = sort
})
},
//
async saveAfter() {
const params = {
flag: 3, // 1234
flag: '3', // 1234
jsonText: JSON.stringify(this.tableData),
name: '后段检查',
patientId: this.patientId,
platform: 1
platform: '1'
}
let url = ''
if (this.collectId) {
@ -341,7 +372,7 @@ export default {
const params = {
doctorId: this.doctorId,
name: this.form.name,
flag: 1, // 1,2
flag: this.treeFlag, // 1,2
type: this.type,
parentId: this.parentId,
platform: 1
@ -423,18 +454,13 @@ export default {
if (data && data.caseJson) {
this.tableData = JSON.parse(data.caseJson)
//
this.$nextTick(() => {
this.tableData.forEach(item => {
this.$refs.multipleTable.toggleRowSelection(item, true)
})
})
} else {
this.tableData = _.cloneDeep(this.sourceData)
}
},
//
handleTemplate() {
if (!this.multipleSelection.length) return this.$message.warning('请勾选模板内容!')
// if (!this.multipleSelection.length) return this.$message.warning('!')
this.form.name = ''
this.queryTemplate()
this.templateFlag = true
@ -445,8 +471,9 @@ export default {
},
//
async saveTreeTemplete() {
if (!this.treeId) return this.$message.warning('请选择节点!')
const params = {
caseJson: JSON.stringify(this.multipleSelection),
caseJson: JSON.stringify(this.tableData),
doctorId: this.doctorId,
name: this.form.name,
type: 3, // 2 3
@ -455,7 +482,7 @@ export default {
const { data: res } = await this.$http.post('/treetemplate/addTreeCase', params)
if (res.code === 0) {
this.templateFlag = false
this.queryTreeCase()
await this.queryTreeCase()
this.$message.success('保存成功')
} else {
this.$message.error(res.msg)
@ -517,8 +544,8 @@ export default {
const { data: res } = await this.$http.post(url, params)
if (res.code === 0) {
this.$message.success('删除成功')
this.queryTreeCase()
this.getforeList('2')
await this.queryTreeCase()
await this.getforeList('3')
} else {
this.$message.error(res.msg)
}
@ -576,7 +603,6 @@ export default {
})
if (res.code === 0) {
this.treeCaseList = this.fn(res.data)
console.log(this.treeCaseList)
} else {
this.$message.error(res.msg)
}

60
src/components/360View/commonForm/deveopmentFIle.vue

@ -1,7 +1,7 @@
<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 v-print="printObj" 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>
@ -122,7 +122,9 @@
</div>
<div v-if="scope.row.name == '旧镜参数'">
<div class="width-120 center">
OD:<el-input v-model="scope.row.od" placeholder="" />
<el-input v-model="scope.row.od" placeholder="" >
<template slot="prepend">OD:</template>
</el-input>
</div>
</div>
<div v-if="scope.row.name == '父母是否近视'">
@ -221,7 +223,9 @@
<template slot-scope="scope">
<div v-if="scope.row.name == '旧镜参数'">
<div class="width-120 center">
OS:<el-input v-model="scope.row.os" placeholder="" />
<el-input v-model="scope.row.os" placeholder="" >
<template slot="prepend">OS:</template>
</el-input>
</div>
</div>
<div v-if="scope.row.name == '项目'">
@ -285,6 +289,10 @@ export default {
},
data() {
return {
printObj: {
id: 'threeFunc',
extraHead: '<meta http-equiv="Content-Language"content="zh-cn"/>,<style>  #printId { width: 100%; !important; } <style>'
},
dataForm: {
yghcValue: '',
operationListValueOD: []
@ -574,8 +582,25 @@ export default {
</script>
<style lang="scss">
.operation-record-table{
.el-input__inner {
border: none;
height: 26px !important;
line-height: 26px !important;
text-align: center;
}
.el-input-group__append, .el-input-group__prepend{
background-color: transparent;
color: #606266;
border: none;
}
.el-table__header-wrapper{
display: none;
}
}
#operation-record {
//height: 93%;
// overflow: auto;
.btnBox{
@ -600,6 +625,20 @@ export default {
color: #46a1ff;
font-weight: 400;
}
.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;
}
}
.center {
text-align: center;
@ -618,7 +657,6 @@ export default {
width: 70px;
}
}
.width-100 {
.el-input {
width: 100px;
@ -634,21 +672,7 @@ export default {
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;

228
src/components/360View/commonForm/eyesVision.vue

@ -5,7 +5,7 @@
<el-button type="primary" size="small" @click="handleSaveTable">保存</el-button>
<el-button type="danger" size="small" @click="handleDelete">删除</el-button>
</div>
<div id="eyesFunc" style="width: 840px;padding-right: 8px">
<div id="eyesFunc" style="width: 840px;padding-right: 8px" class="printBox">
<p style="color:#000000;font-size:32px;margin:0 0 30px 0;text-align:center;">
双眼视功能检查报告单
</p>
@ -21,25 +21,35 @@
<template slot-scope="scope">
<div v-if="scope.row.name == 1">
<div class="width-180 center">
OS<el-input v-model="scope.row.os" placeholder="" />
<el-input v-model="scope.row.os" placeholder="">
<template slot="prepend">OS:</template>
</el-input>
</div>
</div>
<div v-else-if="scope.row.name == 'FV'">
<div class="width-180 center">
远BO<el-input v-model="scope.row.a" placeholder="" />
<el-input v-model="scope.row.a" placeholder="">
<template slot="prepend">远BO:</template>
</el-input>
</div>
</div>
<div v-else-if="scope.row.name == '建议'">
<div class="width-180" style="text-align: left">
建议<el-input v-model="scope.row.value" placeholder="" style="width: 640px" />
<el-input v-model="scope.row.value" placeholder="" style="width: 640px">
<template slot="prepend">建议:</template>
</el-input>
</div>
</div>
<div v-else-if="scope.row.name == '签名'" style="display: flex;justify-content: space-between">
<div class="width-180" style="text-align: left">
视光师<el-input v-model="scope.row.a" placeholder="" />
<el-input v-model="scope.row.a" placeholder="">
<template slot="prepend">视光师:</template>
</el-input>
</div>
<div class="width-180" style="text-align: left">
医师<el-input v-model="scope.row.b" placeholder="" />
<el-input v-model="scope.row.b" placeholder="">
<template slot="prepend">医师:</template>
</el-input>
</div>
<div class="width-180" style="text-align: left">
日期<el-date-picker
@ -56,27 +66,44 @@
<template slot-scope="scope">
<div v-if="scope.row.name == '1'">
<div class="width-180 center">
VA<el-input v-model="scope.row.odVa" placeholder="" />
<el-input v-model="scope.row.odVa" placeholder="">
<template slot="prepend">VA:</template>
</el-input>
</div>
</div>
<div v-if="scope.row.name == '屈光状态'">
<div class="width-180 center">
OD<el-input v-model="scope.row.od" placeholder="" />
<el-input v-model="scope.row.od" placeholder="">
<template slot="prepend">OD:</template>
</el-input>
</div>
</div>
<div v-if="scope.row.name == '交替遮盖试验(CT)'">
<div class="width-180 center">
<p><el-input v-model="scope.row.a" placeholder="" /></p>
<p><el-input v-model="scope.row.b" placeholder="" /></p>
<p>
<el-input v-model="scope.row.a" placeholder="">
<template slot="prepend">:</template>
</el-input>
</p>
<p>
<el-input v-model="scope.row.b" placeholder="">
<template slot="prepend">:</template>
</el-input>
</p>
</div>
</div>
<div v-if="scope.row.name == '集合近点(NPC)'">
<div class="width-180 center">
破裂点<el-input v-model="scope.row.a" placeholder="" />
<el-input v-model="scope.row.a" placeholder="">
<template slot="prepend">破裂点:</template>
</el-input>
</div>
</div>
<div v-if="scope.row.name == 'Worth-4-dot'">
<div class="width-180 center">
<!-- <el-input v-model="scope.row.b" placeholder="">-->
<!-- <template slot="prepend">:</template>-->
<!-- </el-input>-->
<el-input v-model="scope.row.a" placeholder="" />
@D(
<el-input v-model="scope.row.b" placeholder="" />
@ -85,12 +112,16 @@
</div>
<div v-if="scope.row.name == '立体视(stereo)'">
<div class="width-180 center">
RDD()<el-input v-model="scope.row.a" placeholder="" />
<el-input v-model="scope.row.a" placeholder="">
<template slot="prepend">RDD():</template>
</el-input>
</div>
</div>
<div v-if="scope.row.name == '眼位'">
<div class="width-180 center">
<el-input v-model="scope.row.a" placeholder="" />
<el-input v-model="scope.row.a" placeholder="">
<template slot="prepend">:</template>
</el-input>
</div>
</div>
<div v-if="scope.row.name == '梯度性AC/A'">
@ -100,41 +131,59 @@
</div>
<div v-if="scope.row.name == '融像性聚散(FV)'">
<div class="width-180 center">
远BI<el-input v-model="scope.row.a" placeholder="" />
<el-input v-model="scope.row.a" placeholder="">
<template slot="prepend">远BI:</template>
</el-input>
</div>
</div>
<div v-if="scope.row.name == 'FV'">
<div class="width-180 center">
近BO<el-input v-model="scope.row.b" placeholder="" />
<el-input v-model="scope.row.b" placeholder="">
<template slot="prepend">近BO:</template>
</el-input>
</div>
</div>
<div v-if="scope.row.name == '相对调节(RA)'">
<div class="width-180 center">
NRA<el-input v-model="scope.row.a" placeholder="" />
<el-input v-model="scope.row.a" placeholder="">
<template slot="prepend">NRA:</template>
</el-input>
</div>
</div>
<div v-if="scope.row.name == '调节幅度(AMP)'">
<div class="width-180 center">
<div>
OD<el-input v-model="scope.row.a" placeholder="" />
<el-input v-model="scope.row.a" placeholder="">
<template slot="prepend">OD:</template>
</el-input>
</div>
OS<el-input v-model="scope.row.b" placeholder="" />
<el-input v-model="scope.row.b" placeholder="">
<template slot="prepend">OS:</template>
</el-input>
</div>
</div>
<div v-if="scope.row.name == '调节灵活度(AF)'">
<div class="width-180 center">
<div>
OD<el-input v-model="scope.row.a" placeholder="" />
<el-input v-model="scope.row.a" placeholder="">
<template slot="prepend">OD:</template>
</el-input>
</div>
OS<el-input v-model="scope.row.b" placeholder="" />
<el-input v-model="scope.row.b" placeholder="">
<template slot="prepend">OS:</template>
</el-input>
</div>
</div>
<div v-if="scope.row.name == '调节反应(FCC)'">
<div class="width-180 center">
<div>
OD<el-input v-model="scope.row.a" placeholder="" />
<el-input v-model="scope.row.a" placeholder="">
<template slot="prepend">OD:</template>
</el-input>
</div>
OS<el-input v-model="scope.row.b" placeholder="" />
<el-input v-model="scope.row.b" placeholder="">
<template slot="prepend">OS:</template>
</el-input>
</div>
</div>
<div v-if="scope.row.name == '初步诊断'">
@ -187,57 +236,79 @@
<template slot-scope="scope">
<div v-if="scope.row.name == '屈光状态'">
<div class="width-180 center">
VA<el-input v-model="scope.row.osVa" placeholder="" />
<el-input v-model="scope.row.osVa" placeholder="">
<template slot="prepend">VA:</template>
</el-input>
</div>
</div>
<div v-if="scope.row.name == '交替遮盖试验(CT)'">
<div class="width-180 center">
眼球运动<el-input v-model="scope.row.c" placeholder="" />
<el-input v-model="scope.row.c" placeholder="">
<template slot="prepend">眼球运动:</template>
</el-input>
</div>
</div>
<div v-if="scope.row.name == '集合近点(NPC)'">
<div class="width-180 center">
恢复点<el-input v-model="scope.row.b" placeholder="" />
<el-input v-model="scope.row.b" placeholder="">
<template slot="prepend">恢复点:</template>
</el-input>
</div>
</div>
<div v-if="scope.row.name == '立体视(stereo)'">
<div class="width-180 center">
TNO()<el-input v-model="scope.row.b" placeholder="" />
<el-input v-model="scope.row.b" placeholder="">
<template slot="prepend">TNO():</template>
</el-input>
</div>
</div>
<div v-if="scope.row.name == '眼位'">
<div class="width-180 center">
<el-input v-model="scope.row.b" placeholder="" />
<el-input v-model="scope.row.b" placeholder="">
<template slot="prepend">:</template>
</el-input>
</div>
</div>
<div v-if="scope.row.name == '梯度性AC/A'">
<div class="width-180 center">
计算性AC/A<el-input v-model="scope.row.b" placeholder="" />
<el-input v-model="scope.row.b" placeholder="">
<template slot="prepend">计算性AC/A:</template>
</el-input>
</div>
</div>
<div v-if="scope.row.name == '融像性聚散(FV)'">
<div class="width-180 center">
近BI<el-input v-model="scope.row.b" placeholder="" />
<el-input v-model="scope.row.b" placeholder="">
<template slot="prepend">近BI:</template>
</el-input>
</div>
</div>
<div v-if="scope.row.name == '相对调节(RA)'">
<div class="width-180 center">
PRA<el-input v-model="scope.row.b" placeholder="" />
<el-input v-model="scope.row.b" placeholder="">
<template slot="prepend">PRA:</template>
</el-input>
</div>
</div>
<div v-if="scope.row.name == '调节幅度(AMP)'">
<div class="width-180 center">
OU<el-input v-model="scope.row.c" placeholder="" />
<el-input v-model="scope.row.c" placeholder="">
<template slot="prepend">OU:</template>
</el-input>
</div>
</div>
<div v-if="scope.row.name == '调节灵活度(AF)'">
<div class="width-180 center">
OU<el-input v-model="scope.row.c" placeholder="" />
<el-input v-model="scope.row.c" placeholder="">
<template slot="prepend">OU:</template>
</el-input>
</div>
</div>
<div v-if="scope.row.name == '调节反应(FCC)'">
<div class="width-180 center">
OU<el-input v-model="scope.row.c" placeholder="" />
<el-input v-model="scope.row.c" placeholder="">
<template slot="prepend">OU:</template>
</el-input>
</div>
</div>
<!-- &lt;!&ndash; 签字 &ndash;&gt;-->
@ -330,7 +401,7 @@ export default {
}, {
name: '相对调节(RA)',
a: '',
b: '',
b: ''
}, {
name: '调节幅度(AMP)',
a: '',
@ -447,7 +518,7 @@ export default {
}, {
name: '相对调节(RA)',
a: '',
b: '',
b: ''
}, {
name: '调节幅度(AMP)',
a: '',
@ -531,6 +602,20 @@ export default {
</script>
<style lang="scss">
.printBox{
.el-input__inner {
border: none;
height: 26px !important;
line-height: 26px !important;
text-align: center;
border-bottom: 1px solid #ccc;
border-radius: 0;
padding: 0;
}
.el-table tr{
page-break-inside: avoid;
}
}
#operation-record {
height: 100%;
overflow: auto;
@ -581,21 +666,6 @@ export default {
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;
@ -615,35 +685,35 @@ export default {
.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-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--border .el-table__cell, .el-table__body-wrapper .el-table--border.is-scrolling-left~.el-table__fixed {
// border-right: 1px solid #808080;
// }

45
src/components/360View/commonForm/optometryForm.vue

@ -5,7 +5,7 @@
<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">
<div id="optomeFunc" style="width: 840px;padding-right: 8px" class="printBox">
<p style="color:#000000;font-size:32px;margin:0 0 30px 0;text-align:center;">
验光报告单
</p>
@ -53,17 +53,21 @@
</div>
<div v-else-if="scope.row.name == 7" style="display: flex;justify-content: space-between">
<div class="width-180" style="text-align: left">
视光师<el-input v-model="scope.row.a" placeholder="" />
<el-input v-model="scope.row.a" placeholder="">
<template slot="prepend">视光师:</template>
</el-input>
</div>
<div class="width-180" style="text-align: left">
医师<el-input v-model="scope.row.b" placeholder="" />
<el-input v-model="scope.row.b" placeholder="">
<template slot="prepend">医师:</template>
</el-input>
</div>
<div class="width-180" style="text-align: left">
日期<el-date-picker
v-model="scope.row.c"
type="date"
placeholder="选择日期"
/>
/>
</div>
</div>
<p v-else>{{ scope.row.name }}</p>
@ -124,19 +128,19 @@
</div>
</div>
<div v-if="scope.row.name == '配镜建议'">
<div class="width-180">
<div style="display: flex">
<el-checkbox-group v-model="scope.row.suggest">
<el-checkbox label="单光" />
<el-checkbox label="离焦镜片" />
<el-checkbox label="软镜" />
<el-checkbox label="RGP" />
<el-checkbox label="OK镜" />
</el-checkbox-group>
<p style="margin-left: 16px">
其他<el-input v-model="scope.row.value" placeholder="" />
</p>
</div>
<div style="display: flex">
<el-checkbox-group v-model="scope.row.suggest">
<el-checkbox label="单光" />
<el-checkbox label="离焦镜片" />
<el-checkbox label="软镜" />
<el-checkbox label="RGP" />
<el-checkbox label="OK镜" />
</el-checkbox-group>
<p style="margin-left: 16px">
<el-input v-model="scope.row.value" placeholder="">
<template slot="prepend">其他:</template>
</el-input>
</p>
</div>
</div>
<div v-if="scope.row.name == '备注'">
@ -582,6 +586,13 @@ export default {
</script>
<style lang="scss">
.printBox{
.el-input__inner {
border-bottom: 1px solid #ccc;
border-radius: 0;
padding: 0;
}
}
#operation-record {
//height: 93%;
// overflow: auto;

34
src/components/360View/commonForm/threeVision.vue

@ -5,7 +5,7 @@
<el-button type="primary" size="small" @click="handleSaveTable">保存</el-button>
<el-button type="danger" size="small" @click="handleDelete">删除</el-button>
</div>
<div id="threeFunc" style="width: 840px;padding-right: 8px">
<div id="threeFunc" style="width: 840px;padding-right: 8px" class="printBox">
<p style="color:#000000;font-size:32px;margin:0 0 30px 0;text-align:center;">
三级视功能检查报告单
</p>
@ -81,12 +81,16 @@
<!-- {{scope.row.name}}-->
<div v-if="scope.row.name == '屈光状态'">
<div class="width-180 center">
OD<el-input v-model="scope.row.OD" placeholder="" />
<el-input v-model="scope.row.OD" placeholder="" >
<template slot="prepend">OD:</template>
</el-input>
</div>
</div>
<div v-if="scope.row.name == '屈光状态a'">
<div class="width-180 center">
OS<el-input v-model="scope.row.OS" placeholder="" />
<el-input v-model="scope.row.OS" placeholder="" >
<template slot="prepend">OS:</template>
</el-input>
</div>
</div>
<div v-if="scope.row.name == 'CT+Prism'">
@ -138,12 +142,16 @@
<template slot-scope="scope">
<div v-if="scope.row.name == '屈光状态'">
<div class="width-180 center">
VA<el-input v-model="scope.row.VA" placeholder="" />
<el-input v-model="scope.row.VA" placeholder="" >
<template slot="prepend">VA:</template>
</el-input>
</div>
</div>
<div v-if="scope.row.name == '屈光状态a'">
<div class="width-180 center">
VA<el-input v-model="scope.row.VA" placeholder="" />
<el-input v-model="scope.row.VA" placeholder="" >
<template slot="prepend">VA:</template>
</el-input>
</div>
</div>
<div v-if="scope.row.name == '主观斜视角'">
@ -324,7 +332,6 @@ export default {
setData() {
this.dataForm = this.formContent.a
this.tableData = this.formContent.b
console.log(this.tableData)
},
reSet() {
this.dataForm = {
@ -464,16 +471,23 @@ export default {
},
handleDelete() {
this.$emit('del')
},
}
}
}
</script>
<style lang="scss">
.printBox{
.el-input__inner {
border-bottom: 1px solid #ccc;
border-radius: 0;
padding: 0;
}
.el-input__prefix {
display: none;
}
}
#operation-record {
//height: 93%;
// overflow: auto;
.btnBox{
display: flex;
justify-content: flex-end;

56
src/components/360View/forePart/index.vue

@ -108,6 +108,7 @@ export default {
doctorId: '',
deleteId: '',
treeId: '',
treeFlag: '',
treeName: '',
weight: '',
parentId: 0,
@ -123,6 +124,7 @@ export default {
name: '眼睑'
}, {
name: '眼睑',
sort: 99,
id: 1,
type: 'anion',
od: '',
@ -147,6 +149,7 @@ export default {
name: '泪器'
}, {
name: '泪器',
sort: 99,
id: 4,
type: 'liq',
od: '',
@ -155,6 +158,7 @@ export default {
name: '角膜'
}, {
name: '角膜',
sort: 99,
id: 5,
type: 'Giacomo',
od: '',
@ -163,6 +167,7 @@ export default {
name: '前房'
}, {
name: '前房',
sort: 99,
id: 6,
type: 'Jianfeng',
od: '',
@ -171,6 +176,7 @@ export default {
name: '虹膜'
}, {
name: '虹膜',
sort: 99,
id: 7,
type: 'mongo',
od: '',
@ -179,6 +185,7 @@ export default {
name: '瞳孔'
}, {
name: '瞳孔',
sort: 99,
id: 8,
type: 'tonguing',
od: '',
@ -187,6 +194,7 @@ export default {
name: '晶状体'
}, {
name: '晶状体',
sort: 99,
id: 9,
type: 'jingling',
od: '',
@ -195,6 +203,7 @@ export default {
name: '睫状体'
}, {
name: '睫状体',
sort: 99,
id: 10,
type: 'jingles',
od: '',
@ -203,6 +212,7 @@ export default {
name: '眼位'
}, {
name: '眼位',
sort: 99,
id: 11,
type: 'yawn',
od: '',
@ -211,6 +221,7 @@ export default {
name: '眼眶'
}, {
name: '眼眶',
sort: 99,
id: 12,
type: 'yanking',
od: '',
@ -219,6 +230,7 @@ export default {
name: '眼球运动'
}, {
name: '眼球运动',
sort: 99,
id: 13,
type: 'yang',
od: '',
@ -244,6 +256,7 @@ export default {
this.getforeList('2').then(() => {
this.queryOptions()
})
//
this.queryTreeCase()
},
methods: {
@ -256,7 +269,7 @@ export default {
}
})
if (res.code === 0) {
// this.tableData = res.data ? JSON.parse(res.data.jsonText) : []
this.tableData = res.data ? JSON.parse(res.data.jsonText) : []
this.collectId = res.data ? res.data.id : ''
} else {
this.$message.error(res.msg)
@ -268,10 +281,10 @@ export default {
},
//
addForeData() {
if (!this.multipleSelection.length) return this.$message.warning('请勾选数据!')
const data = this.multipleSelection.filter(item => {
return item.type !== undefined
})
console.log(this.multipleSelection, data)
eventBus.$emit('sendForData', data)
},
// ,
@ -284,12 +297,18 @@ export default {
}
})
Promise.all(treeList).then((result) => {
console.log(result)
if (result.length) {
result.forEach(item => {
item.forEach(row => {
this.tableData.forEach(e => {
if (e.type === row.type) {
e.data = [row]
e.data = item
const sort = item.sort
item.sort = ''
this.$nextTick(() => {
item.sort = sort
})
}
})
})
@ -306,12 +325,24 @@ export default {
this.tableData.forEach(item => {
if (item.sort) {
item.od = item.os
item.odValue = item.osValue
const sort = item.sort
item.sort = ''
this.$nextTick(() => {
item.sort = sort
})
}
})
} else {
this.tableData.forEach(item => {
if (item.sort) {
item.os = item.od
item.osValue = item.odValue
const sort = item.sort
item.sort = ''
this.$nextTick(() => {
item.sort = sort
})
}
})
}
@ -319,11 +350,11 @@ export default {
//
async saveFore() {
const params = {
flag: 2,
flag: '2', // 1234
jsonText: JSON.stringify(this.tableData),
name: '前段检查',
patientId: this.patientId,
platform: 1
platform: '1'
}
let url = ''
if (this.collectId) {
@ -359,7 +390,7 @@ export default {
const params = {
doctorId: this.doctorId,
name: this.form.name,
flag: 1,
flag: this.treeFlag, // // 1,2
type: this.type,
parentId: this.parentId,
platform: 1
@ -375,6 +406,7 @@ export default {
},
//
removeTree(item) {
console.log(123, item)
this.type = item.type
this.deleteId = item.id
this.$confirm('确定删除该节点?', '提示', {
@ -417,11 +449,12 @@ export default {
},
//
queryTree(type) {
// http://47.110.224.240:8036/xiangan-crf/treetag/findTree
// 47.110.224.240:8036
// 192.168.4.24:8036
// 192.168.4.83:8036
return new Promise((resolve, reject) => {
axios.defaults.headers.common['token'] = Cookies.get('xa-token') || ''
axios.get('http://47.110.224.240:8036/xiangan-crf/treetag/findTree', {
axios.get('http://192.168.4.83:8036/xiangan-crf/treetag/findTree', {
params: {
doctorId: this.doctorId,
type: type,
@ -454,7 +487,7 @@ export default {
},
//
handleTemplate() {
if (!this.multipleSelection.length) return this.$message.warning('请勾选模板内容!')
// if (!this.multipleSelection.length) return this.$message.warning('!')
this.form.name = ''
this.queryTemplate()
this.templateFlag = true
@ -465,11 +498,12 @@ export default {
},
//
async saveTreeTemplete() {
if (!this.treeId) return this.$message.warning('请选择节点!')
const params = {
caseJson: JSON.stringify(this.multipleSelection),
caseJson: JSON.stringify(this.tableData),
doctorId: this.doctorId,
name: this.form.name,
type: 2,
type: 2, // 2 3
treeId: this.treeId
}
const { data: res } = await this.$http.post('/treetemplate/addTreeCase', params)

219
src/components/360View/img-reccrd.vue

@ -40,7 +40,7 @@
<span class="ml16" @click="selectUnChecked">反选</span>
</div>
<div>
<!-- <img class="noteBox" :src="require('@/assets/img/button-preview.png')" alt="" @click="handlePreview()">-->
<img class="noteBox" :src="require('@/assets/img/button-preview.png')" alt="" @click="handlePreview()">
</div>
</div>
<div class="treeSide">
@ -54,13 +54,12 @@
:default-expand-all="true"
:expand-on-click-node="false"
show-checkbox
node-key="rownows"
@node-click="onSelect"
@check="onChange"
>
<span slot-scope="{ node, data }" class="custom-tree-node">
<span style="display: inline-block;width: 100%;">
{{ data.name }}
{{ data.text }}
</span>
<el-popover
ref="examPopover"
@ -104,23 +103,22 @@
{{ item.name }}
</el-button>
</el-button-group>
<draggable v-model="dragList" class="scrollContain" :options="dragOptions" @end="fileDragEnd">
<div v-for="(item,index) in dragList" ref="file" :key="index" class="fileBox" :class="{fileActive:index === dragIndex}" @click="handleClickFile(item,index)">
<img v-if="item.fileType == 'JPG' || item.fileType == 'PNG'" class="fileImg" :src="item.filePath" alt="">
<div v-if="item.fileType == 'DCM'" :ref="'fileSolt' + index" class="fileImg" />
<div v-if="item.fileType == 'PDF'" :ref="'pdfSolt' + index" class="fileImg">
<div class="pdf-thumbnail">
<img v-if="dragList.length<0" class="fileImg" :src="require('@/assets/img/PDF.png')" alt="">
<pdf
v-else
ref="pdf"
:src="item.filePath"
style="width:100px;"
/>
<draggable class="scrollContain" v-model="dragList" :options="dragOptions" @end="fileDragEnd">
<div class="fileBox" ref="file" v-for="(item,index) in dragList" :key="index" @click="handleClickFile(item,index)" :class="{fileActive:index === dragIndex}">
<div style="width: 100%;height: 100%" v-if="item.instanceList && item.instanceList.length">
<img v-if="item.instanceList[0].imageType == 'JPG' || item.instanceList[0].imageType == 'PNG'" class="fileImg" :src="item.instanceList[0].imageId" alt="">
<div v-show="item.instanceList[0].imageType == 'DCM'" :ref="'fileSolt' + index" class="fileImg" style="padding-left: 3px"/>
<div v-show="item.instanceList[0].imageType == 'PDF'" :ref="'pdfSolt' + index" class="fileImg" style="padding-left: 3px">
<div class="pdf-thumbnail">
<img class="fileImg" :src="require('@/assets/img/PDF.png')" alt="">
</div>
</div>
<p class="imgName" :title="item.seriesDescription + item.laterality">
{{ item.seriesDescription }}
<span class="" v-if="item.laterality">({{ item.laterality }})</span>
</p>
<p class="imgName">{{ item.time }}</p>
</div>
<p class="imgName">{{ item.fileName }}</p>
<p class="imgName">{{ item.time }}</p>
</div>
</draggable>
</div>
@ -338,14 +336,15 @@ export default {
},
data() {
return {
searchChild: 1, // 1:2:
checkAll: false,
packFlag: true,
proFlag: true,
loading: false,
examineType: 2, //
treeProps: {
children: 'examItemVOS',
label: 'name'
children: 'children',
label: 'text'
},
risNo: '',
examNo: '',
@ -418,6 +417,7 @@ export default {
},
mounted() {
// this.queryPatientTag()
console.log(this.patientInfo)
this.queryProgramTree(2)
},
methods: {
@ -465,49 +465,113 @@ export default {
// /
async queryProgramTree(type) {
this.examineType = type
const { data: res } = await this.$http.get('/patient/view/getPatientTree', { params: {
type: type,
const { data: res } = await this.$http.get('/patient/pac30/getPatientTree', { params: {
treeType: type,
// patientId: this.patientInfo.patientId
patientId: '2553716'
// patientId: '25490'
}
})
if (res.code === 0) {
this.treeData = res.data || []
this.examNoList = []
if (this.treeData.length) {
this.examNoList.push(this.treeData[0].examItemVOS[0].examNo)
this.$nextTick(() => {
this.$refs.examineTree.setCurrentKey(this.treeData[0].examItemVOS[0].rownows)
})
for (let i = 0; i < this.treeData.length; i++) {
const temp = this.treeData[i].examItemVOS
const data = res.data || []
for (let i = 0; i < data.length; i++) {
const temp = data[i].children
for (let j = 0; j < temp.length; j++) {
if (type === 1) {
// temp[j].name = temp[j].examineItem || ''
} else {
temp[j].examTime = temp[j].examTime ? temp[j].examTime.substring(0, 11) : ''
}
}
}
this.allExamine = []
if (res.data.length) {
for (let i = 0; i < data.length; i++) {
const cur = data[i]
const temp = data[i].children
if (type === 1) {
this.examDate = data[0].id
} else {
this.examItemCode = data[0].id
}
for (let j = 0; j < temp.length; j++) {
if (type === 1) {
temp[j].name = temp[j].examineItem || ''
} else {
temp[j].name = temp[j].examTime ? temp[j].examTime.substring(0, 11) : ''
// this.allExamine.push(`${temp[j].examNo}||${temp[j].risNo}`)
if (this.examineType === 1) {
temp[j].examDate = cur.id
}
}
this.defaultExpandedKeys = this.allExamine
}
this.treeData = data || []
console.log(this.treeData)
this.queryExamine()
}
// this.treeData = res.data || []
// this.examNoList = []
// if (this.treeData.length) {
// this.examNoList.push(this.treeData[0].children[0].examNo)
// this.$nextTick(() => {
// this.$refs.examineTree.setCurrentKey(this.treeData[0].children[0].rownows)
// })
// for (let i = 0; i < this.treeData.length; i++) {
// const temp = this.treeData[i].children
// for (let j = 0; j < temp.length; j++) {
// if (type === 1) {
// temp[j].name = temp[j].examineItem || ''
// } else {
// temp[j].name = temp[j].examTime ? temp[j].examTime.substring(0, 11) : ''
// }
// }
// }
// this.queryExamine()
// }
} else {
this.$message.error(res.msg)
}
},
//
onSelect(selectedKeys) {
this.examNoList = []
const tempKey = selectedKeys.examItemVOS || []
if (tempKey && tempKey.length) {
console.log('点击项目', selectedKeys)
// if (!selectedKeys.length) return
// const tempKey = selectedKeys[0]
if (selectedKeys.children && selectedKeys.children.length) {
//
tempKey.forEach((item) => {
this.examNoList.push(item.examNo)
})
this.searchChild = 1
if (this.examineType === 2) {
//
this.examItemCode = selectedKeys.text
this.examDate = ''
this.examNo = ''
} else {
//
this.examDate = selectedKeys.text
this.examNo = ''
this.examItemCode = ''
}
} else {
//
this.examNoList.push(selectedKeys.examNo)
this.searchChild = 2
this.examNo = selectedKeys.examNo
this.examItemCode = selectedKeys.id
if (this.examineType === 2) {
console.log('子节点', selectedKeys)
this.examDate = selectedKeys.text
} else {
this.examDate = selectedKeys.examDate
}
}
// this.examNoList = []
// const tempKey = selectedKeys.examItemVOS || []
// if (tempKey && tempKey.length) {
// //
// tempKey.forEach((item) => {
// this.examNoList.push(item.examNo)
// })
// } else {
// //
// this.examNoList.push(selectedKeys.examNo)
// }
this.queryExamine()
},
//
@ -529,18 +593,50 @@ export default {
},
//
promiseExamine() {
const data = {
examNos: this.examNoList,
odOs: this.eyeType,
const params = {
searchType: this.examineType,
searchChild: this.searchChild,
patientId: this.patientInfo.patientId,
eyeType: this.eyeType,
fileType: this.fileType
}
if (this.examineType === 1) {
//
params.examDate = this.examDate
if (this.searchChild === 2) {
params.examNo = this.examNo
}
} else {
//
params.itemCode = this.examItemCode
if (this.searchChild === 2) {
params.examDate = this.examDate ? this.examDate.substring(0, 11) : this.examDate
params.examNo = this.examNo
}
}
Object.keys(params).map((item) => {
if (!params[item]) {
delete params[item]
}
return true
})
return new Promise((resolve, reject) => {
const { data: res } = this.$http.post('/patient/view/getExamFiles', data).then((res) => {
const { data: res } = this.$http.get('/patient/pac30/getExamFileList', { params: params }).then((res) => {
if (res.data && res.data.code === 0) {
const data = res.data.data
if (data && data.length) {
data.forEach(item => {
item.time = item.createTime.length > 10 ? item.createTime.substring(0, 10) : item.createTime
if (item.seriesList && item.seriesList.length) {
item.seriesList.forEach(row => {
row.time = row.seriesDate && row.seriesDate.length > 10 ? row.seriesDate.substring(0, 10) : row.seriesDate
row.instanceList.forEach(e => {
const type = e.imageId.substring(e.imageId.length - 3)
e.imageId = 'http://z1.huimucloud.com:8001/' + e.imageId
e.imageType = type.toLocaleUpperCase()
})
})
}
})
}
resolve(res.data)
@ -551,25 +647,33 @@ export default {
//
queryExamine() {
this.promiseExamine().then((res) => {
this.dragList = res.data || []
let curList = []
const data = res.data || []
data.forEach(item =>{
curList = curList.concat(item.seriesList)
})
this.dragList = curList
console.log(this.dragList)
this.dragIndex = 0
this.handleLayout(1)
this.getDcmFile()
})
},
//
selectEye(item, index) {
this.eyeType = item.id === 1 ? '' : (item.id === 2 ? 'OD' : 'OS')
this.eyeType = item.id === 1 ? '' : (item.id === 2 ? '右眼' : '左眼')
this.eyeIndex = index
this.queryExamine()
},
//
selectFileType(item, index) {
this.fileType = item.id === 1 ? '' : (item.id === 2 ? 'image' : 'PDF')
this.fileType = item.id === 1 ? '' : (item.id === 2 ? '2' : '1')
this.fileIndex = index
this.queryExamine()
},
//
handleClickFile(item, index) {
console.log(item)
this.dragIndex = index
//
this.replaceFile('data-one', item)
@ -627,11 +731,12 @@ export default {
if (!this.dragList.length) return
this.$nextTick(() => {
this.dragList.forEach((item, index) => {
if (item.fileType === 'DCM') {
const data = item.instanceList[0]
if (data.imageType === 'DCM') {
const name = 'fileSolt' + index
const element = this.$refs[name]
this.$cornerstone.enable(element[0])
this.loadImage(element[0], item)
this.loadImage(element[0], data.imageId)
}
})
})
@ -816,9 +921,9 @@ export default {
}
},
//
loadImage(element, item) {
loadImage(element, url) {
const self = this
const imageId = 'wadouri:' + item.filePath
const imageId = 'wadouri:' + url
this.$cornerstone.loadImage(imageId).then(function(image) {
const viewport = self.$cornerstone.getDefaultViewportForImage(element, image)
self.viewportDefault = viewport
@ -883,6 +988,8 @@ export default {
</div>
<div style="position: absolute;padding: 2px;left: 0;bottom: 0;" v-if="fileItem.fileType != 'PDF'">
<p style="font-size: 12px;color: #418AE8;margin-bottom: 0">Render Time:{{fileIns.renderTime}} ms</p>
<p style="font-size: 12px;color: #418AE8;margin-bottom: 0">lmage # {{fileIns.curIndex}}/{{fileIns.total}} </p>
<!-- <p style="font-size: 12px;color: #418AE8;margin-bottom: 0">lmage # {{fileIns.curIndex}}/{{fileIns.total}} </p>-->
<!-- <p style="font-size: 12px;color: #418AE8;margin-bottom: 0">Series # 1</p>-->
<!-- <p style="font-size: 12px;color: #418AE8;margin-bottom: 0">1205824 </p>-->
@ -1106,6 +1213,7 @@ export default {
.leftBox{
width: 100%;
padding-top: 16px;
//height: calc(100% - 48px);
height: 100%;
display: flex;
justify-content: flex-start;
@ -1349,6 +1457,7 @@ export default {
}
.imgName{
font-size: 12px;
text-align: center;
font-family: PingFang SC;
color: #FFFFFF;
margin-bottom: 0;
@ -1358,7 +1467,7 @@ export default {
text-overflow: ellipsis;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
display: -webkit-box;
//display: -webkit-box;
}
}

67
src/components/360View/index1.vue

@ -13,7 +13,7 @@
</p>
<p class="head-b">
<img v-if="patientBaseData.patientIdNumber" :src="require('@/assets/img/id.png')" alt="" style="margin-right: 6px;vertical-align: middle">
<span class="mr16" style="vertical-align: middle">{{ patientBaseData.patientIdNumber }}</span>
<span class="mr16" style="vertical-align: middle">{{ maskId(patientBaseData.patientIdNumber) }}</span>
<img v-if="patientBaseData.patientPhone" :src="require('@/assets/img/phone.png')" alt="" style="margin-right: 6px;vertical-align: middle">
<span class="mr16" style="vertical-align: middle">{{ patientBaseData.patientPhone }}</span>
<img v-if="patientBaseData.patientAddress" :src="require('@/assets/img/position.png')" alt="" style="margin-right: 6px;vertical-align: middle">
@ -32,20 +32,20 @@
/>
</div>
<div class="rightBox">
<el-tabs type="border-card" :value="type" style="height: 100%" @tab-click="tabClick">
<el-tabs type="border-card" :value="timeAxisType" style="height: 100%" @tab-click="tabClick">
<el-tab-pane name="病史总览" label="病史总览" style="height: 100%">
<overView :patient-id="patientId" />
</el-tab-pane>
<el-tab-pane name="门诊病历" label="门诊病历" style="height: 100%">
<medicalRecord :patient-id="patientId" :is-search="isSearch" :only-read="onlyRead" />
<medicalRecord :patient-id="patientId" :is-search="isSearch" :only-read="onlyRead"/>
</el-tab-pane>
<el-tab-pane name="常规检查" label="常规检查" style="height: 100%">
<routine :patient-id="patientId" :date="date" :only-read="onlyRead" />
<routine :patient-id="patientId" :date="date" :only-read="onlyRead"/>
</el-tab-pane>
<el-tab-pane name="特殊检查" label="特殊检查" style="height: 100%">
<el-tab-pane name="特殊检查" label="特殊检查" style="height: 100%" >
<special :patient-id="patientId" :only-read="onlyRead" />
</el-tab-pane>
<el-tab-pane v-if="isSearch === '3'" name="视光档案" label="视光档案" style="height: 100%">
<el-tab-pane name="视光档案" label="视光档案" style="height: 100%" v-if="isSearch === '3'">
<opticalFile :patient-id="patientId" />
</el-tab-pane>
<el-tab-pane name="诊断" label="诊断">
@ -189,7 +189,7 @@
</el-table>
</el-tab-pane>
<el-tab-pane name="随访记录" label="随访记录" style="height: 100%">
<followUpRecord :platform="platform" :patient-id="patientId" :only-read="onlyRead" />
<followUpRecord :patient-id="patientId" :only-read="onlyRead" />
</el-tab-pane>
</el-tabs>
</div>
@ -209,17 +209,17 @@
<!-- 数据集-->
<dataInfo v-if="dataType === 2" :fore-list="foreList" :after-list="afterList" />
<!-- 病历收藏-->
<collection v-if="dataType === 3" :platform="platform" :patient-id="patientId" />
<collection v-if="dataType === 3" />
<!-- 常用业务-->
<business v-if="dataType === 4" />
</drawer>
<!-- 图像与报告 -->
<keep-alive>
<el-dialog title="" class="detail-view" :fullscreen="true" :visible.sync="isActive" append-to-body @close="closePacs">
<!-- <imgRecord :patient-info="patientBaseData" />-->
<pacsList />
</el-dialog>
</keep-alive>
<!-- <keep-alive>-->
<!-- <el-dialog title="" class="detail-view" :fullscreen="true" :visible.sync="isActive" append-to-body @close="closePacs">-->
<!--&lt;!&ndash; <imgRecord :patient-info="patientBaseData" />&ndash;&gt;-->
<!-- <pacsList></pacsList>-->
<!-- </el-dialog>-->
<!-- </keep-alive>-->
</div>
</template>
<script>
@ -238,7 +238,6 @@ import imgRecord from './img-reccrd.vue'
import pacsList from '@/components/360View/pacs/patientList'
import medicalRecord from '@/components/360View/medicalRecord' //
import opticalFile from '@/components/360View/opticalFile' //
import moment from 'moment' //
const Base64 = require('js-base64').Base64
import eventBus from '@/page-subspecialty/utils/eventBus'
export default {
@ -277,10 +276,6 @@ export default {
isSearch: {
type: String,
default: ''
},
platform: {
type: String,
default: ''
}
},
data() {
@ -291,7 +286,7 @@ export default {
timeAxisNodeInfo: [], //
date: '', //
source: '', //
collectList: [], //
collectList: '', //
drawerWidth: '',
timeAxisData: [], //
timeAxisAll: [], //
@ -308,7 +303,6 @@ export default {
label: 'tagName'
},
jsArr: [],
isVisit: '',
crfVisible: false,
dataForm: {}
}
@ -331,6 +325,12 @@ export default {
this.dataType = type
this.display = true
},
maskId(idCard) {
if (idCard) {
const reg = /^(.{6})(?:\d+)(.{4})$/
return idCard.replace(reg, '\$1******\$2')
}
},
computerData() {
//
eventBus.$on('sendForData', data => {
@ -379,11 +379,11 @@ export default {
handlePacs() {
const { href } = this.$router.resolve({
name: 'pacs',
query: {
id: 1
}
})
window.open(href, '_blank')
// query: {
// id: 1
// }
});
window.open(href, '_blank');
// this.isActive = true
},
// 360
@ -430,15 +430,17 @@ export default {
if (res.data.length > 0) {
this.timeAxisData = res.data.length > 0 ? res.data : []
const curItem = res.data[0].data[0].itemList.length ? res.data[0].data[0].itemList[0] : ''
this.type = res.data[0].data[0].itemList[0].groupName
if (curItem) {
this.getTimeAxisNodeInfo(curItem)
if (this.isSearch === '3') {
this.timeAxisType = '视光档案'
} else {
this.timeAxisType = res.data[0].data[0].itemList[0].groupName
if (curItem) {
this.getTimeAxisNodeInfo(curItem)
}
}
}
if (!res.data.length) {
this.timeAxisNodeInfo = []
this.type = ''
this.isVisit = ''
}
} else {
this.$message.error(res.msg)
@ -472,8 +474,7 @@ export default {
},
// --
async getTimeAxisNodeInfo(item) {
this.type = item.groupName
this.isVisit = item.isVisit
this.timeAxisType = item.groupName
const { data: res } = await this.$http.get('/patient/view/getTimeAxisNodeInfo', {
params: {
// date: moment(item.date).format('YYYY-MM-DD'),

71
src/components/360View/itemSelect/index.vue

@ -15,7 +15,7 @@
@visible-change="visibleChange"
@change="selectChange"
@focus="selectFocus"
@clear="emitVal"
@clear="clearSelect"
>
<el-option class="option_li" :style="{height: optionHeight+'px'}" :value="showLabel" :label="showLabel">
<el-scrollbar class="option_li_scroll">
@ -38,12 +38,11 @@
@node-click="nodeClick"
@check-change="nodeCheck"
/>
<!-- <el-button v-if="!options.length" type="primary" plain size="small" @click="addNode">+</el-button>-->
<!-- <el-button v-if="!options.length" type="primary" plain size="small" @click="addNode">+</el-button>-->
</el-scrollbar>
</el-option>
</el-select>
</template>
<script type="es6">
let value = 1000
export default {
@ -108,6 +107,7 @@ export default {
},
data() {
return {
newChild: [],
curNode: '',
optionHeight: 247 // el-option
}
@ -119,19 +119,27 @@ export default {
b: ''
}
const value = this.value
console.log(value)
if (this.multiple) { //
if (Array.isArray(value) && value.length > 0) {
const labelArr = []
const a = []
const b = []
value.forEach(value => {
labelArr.push(this.queryTree(this.options, value))
if (value.self) {
console.log(labelArr)
labelArr.push({ a: value.label })
} else {
labelArr.push(this.queryTree(this.options, value))
}
})
// label = labelArr.join(',')
console.log(136, labelArr)
labelArr.forEach(item => {
a.push(item.a)
b.push(item.b)
})
console.log('a', a)
label.a = a.join(',')
label.b = b.join(',')
}
@ -175,8 +183,12 @@ export default {
}
return label
},
addNode() {
clearSelect(val) {
if (!val) {
val = this.multiple ? [] : ''
}
this.newChild = []
this.$emit('input', val)
},
// queryTree(tree, id) {
// let stark = []
@ -195,6 +207,7 @@ export default {
// },
//
emitVal(val) {
console.log(val)
if (!val) {
val = this.multiple ? [] : ''
}
@ -232,13 +245,17 @@ export default {
}
},
selectChange(node) {
const newChild = { value: value++, label: node, children: [] }
console.log(1, node)
console.log('newChild',this.newChild)
const newChild = { value: value++, label: node, self: 999, children: [] }
const keys = this.$refs.tree.getCheckedKeys()
const news = keys.concat([newChild.value])
this.newChild = this.newChild.concat([newChild])
const news = keys.concat(this.newChild)
this.emitVal(news)
},
//
nodeClick(node) {
console.log(2, node)
if (!this.multiple) {
this.emitVal(node[this.props.value])
this.$refs.select.blur() // 使select
@ -246,9 +263,9 @@ export default {
},
//
nodeCheck() {
// console.log(this.$refs.tree.getCheckedKeys())
this.emitVal(this.$refs.tree.getCheckedKeys())
// this.emitVal(this.curNode)
const keys = this.$refs.tree.getCheckedKeys()
const news = keys.concat(this.newChild)
this.emitVal(news)
console.log(this.showLabel)
},
append(data) {
@ -267,16 +284,28 @@ export default {
// children.splice(index, 1)
},
renderContent(h, { node, data, store }) {
return (
<span style='flex: 1; display: flex; align-items: center; justify-content: space-between; font-size: 14px; padding-right: 8px;'>
<span>
<span>{node.label}</span>
</span>
<span>
<el-button style='font-size: 12px;' type='text' on-click={ () => this.append(data) }>新增子级</el-button>
<el-button style='font-size: 12px;' type='text' on-click={ () => this.remove(data) }>删除</el-button>
</span>
</span>)
if (node.label === '公共' || node.label === '个人') {
return (
<span style='flex: 1; display: flex; align-items: center; justify-content: space-between; font-size: 14px; padding-right: 8px;'>
<span>
<span>{node.label}</span>
</span>
<span>
<el-button style='font-size: 12px;' type='text' on-click={ () => this.append(data) }>新增子级</el-button>
</span>
</span>)
} else {
return (
<span style='flex: 1; display: flex; align-items: center; justify-content: space-between; font-size: 14px; padding-right: 8px;'>
<span>
<span>{node.label}</span>
</span>
<span>
<el-button style='font-size: 12px;' type='text' on-click={ () => this.append(data) }>新增子级</el-button>
<el-button style='font-size: 12px;' type='text' on-click={ () => this.remove(data) }>删除</el-button>
</span>
</span>)
}
}
}
}

8
src/components/360View/opticalFile/index.vue

@ -17,8 +17,8 @@
<span class="line" />
<el-checkbox v-model="defaultChecked">默认新建今日</el-checkbox>
</div>
<div class="record" @click="addRecord(1,'屈光发育档案')">
<p>屈光发育档案</p>
<div class="record" @click="addRecord(1,'验光报告单')">
<p>验光报告单</p>
<img :src="require('@/assets/img/add.png')" alt="">
</div>
<div class="comonForm-tab">
@ -32,8 +32,8 @@
<img :src="require('@/assets/img/add.png')" alt="" @click="addRecord(2,'双眼视功能检查报告单')">
</div>
<div class="record">
<p>验光报告单</p>
<img :src="require('@/assets/img/add.png')" alt="" @click="addRecord(3,'验光报告单')">
<p>屈光发育档案</p>
<img :src="require('@/assets/img/add.png')" alt="" @click="addRecord(1,'屈光发育档案')">
</div>
<div class="record" @click="addRecord(4,'三级视功能检查报告单')">
<p>三级视功能检查报告单</p>

213
src/components/360View/routine/index.vue

@ -2,13 +2,20 @@
<div class="routineBox">
<div class="header">
<div>
<el-checkbox v-model="checked" class="mr30">色盲</el-checkbox>
<el-radio-group v-model="radio2" class="mr30" style="margin-bottom: 2px">
<el-radio :label="3"></el-radio>
<el-radio :label="6"></el-radio>
</el-radio-group>
<span>类型</span>
<el-select v-model="value" placeholder="请选择" style="display: inline-block;width: 150px" size="small">
<el-checkbox v-model="checkedSeJue" class="mr30">色觉检查</el-checkbox>
<span style="margin-right: 16px">眼别{{ osType }}</span>
<span>结果</span>
<el-select v-model="osStatus" placeholder="请选择" style="display: inline-block;width: 120px" size="small">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
<span style="margin-left: 32px;margin-right: 16px">眼别{{ odType }}</span>
<span>结果</span>
<el-select v-model="odStatus" placeholder="请选择" style="display: inline-block;width: 120px;" size="small">
<el-option
v-for="item in options"
:key="item.value"
@ -18,7 +25,6 @@
</el-select>
</div>
<div v-if="onlyRead">
<el-button type="primary" size="small" @click="saveRoutine">保存</el-button>
<div size="small" style="display:inline-block;margin-left:10px;width: 32px;height: 32px;line-height:32px;text-align:center;background-color: #1e79ff;border-radius: 4px;vertical-align: middle" @click="addDataList">
<img :src="require('@/assets/img/data.png')" alt="" style="width: 17px;height: 16px;margin-bottom: 2px">
</div>
@ -87,11 +93,17 @@
</div>
</div>
<div class="lineBox">
<el-checkbox v-model="checkedDL">电脑验光</el-checkbox>
<el-checkbox v-model="checkedDL" @change="changeDL">电脑验光</el-checkbox>
<el-table
ref="tableDL"
:data="routineData.dNyanguang"
style="width: 100%;margin-top: 32px"
@selection-change="handleSelectionDL"
>
<el-table-column
type="selection"
width="55"
/>
<el-table-column
prop="examTime"
label="时间"
@ -121,11 +133,17 @@
</el-table>
</div>
<div class="lineBox">
<el-checkbox v-model="checkedZJ">主觉验光</el-checkbox>
<el-checkbox v-model="checkedZJ" @change="changeZJ">主觉验光</el-checkbox>
<el-table
ref="tableZJ"
:data="routineData.zJyanguang"
style="width: 100%;margin-top: 32px"
@selection-change="handleSelectionZJ"
>
<el-table-column
type="selection"
width="55"
/>
<el-table-column
prop="examTime"
label="时间"
@ -187,15 +205,36 @@ export default {
inject: ['refresh'],
data() {
return {
checkedSeJue: false,
checkedShiLi: false,
checkedYanYa: false,
checkedDL: false,
checkedZJ: false,
checked: '',
radio2: '',
value: '',
options: [],
options: [
{
value: '',
label: '全部'
},
{
value: '10',
label: '正常'
},
{
value: '20',
label: '色盲'
},
{
value: '30',
label: '色弱'
}
],
routineData: {},
osType: '',
osStatus: '',
odType: '',
odStatus: '',
selectionDL: [],
selectionZJ: [],
shiliLast: [],
yanyaLast: []
}
@ -214,13 +253,16 @@ export default {
const { data: res } = await this.$http.get('/patient/view/getVaAndIopAndRefAndLast', {
params: {
patientId: '797064',
date: '2011-05-21'
// date: this.date
date: ''
// patientId: this.patientId
}
})
if (res.code === 0) {
this.routineData = res.data
this.osType = res.data.sejue.length ? res.data.sejue[0].eyeType : ''
this.osStatus = res.data.sejue.length ? res.data.sejue[0].eyeStatus : ''
this.odType = res.data.sejue.length ? res.data.sejue[1].eyeType : ''
this.odStatus = res.data.sejue.length ? res.data.sejue[1].eyeStatus : ''
this.shiliLast = res.data.shiliLast || []
this.yanyaLast = res.data.yanyaLast || []
} else {
@ -243,64 +285,115 @@ export default {
}
}
},
handleSelectionDL(val) {
this.selectionDL = val
},
handleSelectionZJ(val) {
this.selectionZJ = val
},
changeDL() {
if (this.checkedDL) {
const data = this.routineData.dNyanguang.slice(0, 2)
if (data.length) {
data.forEach(row => {
this.$refs.tableDL.toggleRowSelection(row)
})
}
} else {
this.$refs.tableDL.clearSelection()
}
},
changeZJ() {
if (this.checkedZJ) {
const data = this.routineData.zJyanguang.slice(0, 2)
if (data.length) {
data.forEach(row => {
this.$refs.tableZJ.toggleRowSelection(row)
})
}
} else {
this.$refs.tableZJ.clearSelection()
}
},
setResult(data) {
switch (data) {
case '10':
return '正常'
case '20':
return '色盲'
case '30':
return '色弱'
}
},
//
addDataList() {
let data = [{
name: '',
odValue: '',
osValue: ''
}]
let dataArray = []
if (this.checkedSeJue) {
const data = [{
name: '',
odValue: '',
osValue: ''
}]
data[0].name = '色觉检查'
data[0].odValue = this.osType === 'OD' ? this.setResult(this.osStatus) : this.setResult(this.odStatus)
data[0].osValue = this.osType === 'OS' ? this.setResult(this.osStatus) : this.setResult(this.odStatus)
data[0].id = 'SJ001'
dataArray = dataArray.concat(data)
}
if (this.checkedShiLi) {
console.log(this.shiliLast[0])
const data = [
{
name: '',
odValue: '',
osValue: ''
},
{
name: '',
odValue: '',
osValue: ''
}]
const shili = this.shiliLast[0]
shili.name = '裸眼视力'
shili.odValue = shili.odVan
shili.osValue = shili.osVan
shili.id = 'LY001'
data[0].name = '矫正视力'
data[0].odValue = shili.odVag
data[0].osValue = shili.osVag
data[0].id = 'JZ001'
data = data.concat(this.shiliLast)
data[0].name = '裸眼视力'
data[0].odValue = shili.odVan
data[0].osValue = shili.osVan
data[0].id = 'LY001'
data[1].name = '矫正视力'
data[1].odValue = shili.odVag
data[1].osValue = shili.osVag
data[1].id = 'JZ001'
dataArray = dataArray.concat(data)
}
if (this.checkedYanYa) {
const data = [{
name: '',
odValue: '',
osValue: ''
}]
const yanya = this.yanyaLast[0]
yanya.name = '眼压'
yanya.odValue = yanya.odIop
yanya.osValue = yanya.osIop
yanya.id = 'YY001'
data = data.concat(this.yanyaLast)
data[0].name = '眼压'
data[0].odValue = yanya.odIop
data[0].osValue = yanya.osIop
data[0].id = 'YY001'
dataArray = dataArray.concat(data)
}
if (this.checkedDL) {
this.routineData.dNyanguang.forEach((item, index) => {
item.name = '电脑验光',
item.id = 'dl' + index,
if (this.selectionDL) {
console.log(this.selectionDL)
this.selectionDL.forEach((item, index) => {
item.name = '电脑验光'
item.id = 'dl' + index
item.sort = 5
})
data = data.concat(this.routineData.dNyanguang)
dataArray = dataArray.concat(this.selectionDL)
}
if (this.checkedZJ) {
this.routineData.zJyanguang.forEach((item, index) => {
item.name = '主觉验光',
item.id = 'zj' + index,
if (this.selectionZJ) {
this.selectionZJ.forEach((item, index) => {
item.name = '主觉验光'
item.id = 'zj' + index
item.sort = 6
})
data = data.concat(this.routineData.zJyanguang)
}
eventBus.$emit('sendForData', data)
},
//
async saveRoutine() {
const { data: res } = await this.$http.post('/medical/record', {
archiveId: this.currentArchiveList.id,
patientCentreId: this.currentArchiveList.patientCentreId,
patientIdNumber: this.currentArchiveList.patientIdNumber
})
if (res.code === 0) {
} else {
this.$message.error(res.msg)
dataArray = dataArray.concat(this.selectionZJ)
}
eventBus.$emit('sendForData', dataArray)
}
}
}

156
src/components/360View/show-file.vue

@ -1,8 +1,14 @@
<template>
<div id="fileId" v-resize="handleResize" class="container" file-solt-id="fileId">
<iframe v-if="curFile.fileType == 'PDF'" :src="curFile.filePath + '#view=FitH,top&pagemode=thumbs'" frameborder="0" style="width: 100%; height: 100%" />
<div v-if="curFile.fileType == 'DCM'" ref="dicomElement" class="dicom" />
<div v-if="curFile.fileType == 'JPG' || curFile.fileType == 'PNG'" ref="imgElement" class="dicom" />
<div v-if="fileType == 'PDF' && instanceList.length > 1" style="margin: 2px">
<el-pagination simple :current-page="curIndex" :total="instanceList.length" defaultPageSize="1" @current-change="handleCurrentChange" />
</div>
<iframe v-if="fileType == 'PDF'" :src="pdfUrl + '#view=FitH,top&pagemode=thumbs'" frameborder="0" style="width: 100%; height: 100%"></iframe>
<div v-if="fileType == 'DCM'" class="dicom" ref="dicomElement"></div>
<div v-if="fileType == 'JPG'" style="width: 100%;height: 100%" class="dicom" ref="dicomElement"></div>
<!-- <iframe v-if="curFile.fileType == 'PDF'" :src="curFile.filePath + '#view=FitH,top&pagemode=thumbs'" frameborder="0" style="width: 100%; height: 100%" />-->
<!-- <div v-if="curFile.fileType == 'DCM'" ref="dicomElement" class="dicom" />-->
<!-- <div v-if="curFile.fileType == 'JPG' || curFile.fileType == 'PNG'" ref="imgElement" class="dicom" />-->
</div>
</template>
@ -33,10 +39,16 @@ export default {
return {
curFile: this.fileObject,
curElement: '',
fileType: '',
viewportDefault: '',
zoomValue: '',
wwwcValue: '',
renderTime: ''
renderTime: '',
pdfUrl: '',
curIndex: 1,
total: 1,
childrenList: [],
instanceList: []
}
},
watch: {
@ -44,33 +56,65 @@ export default {
this.curFile = val
}
},
created() {
this.instanceList = this.fileObject.instanceList || []
this.fileType = this.instanceList.length ? this.instanceList[0].imageType : ''
},
mounted() {
this.initData()
},
methods: {
handleCurrentChange (val) {
console.log(val)
this.pdfUrl = this.instanceList[val - 1].imageId
},
// DICM
drawCornerStone(imageUrl, type) {
let imageId = ''
const self = this
let element = ''
let imageId = ''
if (type === 'DCM') {
imageId = 'wadouri:' + imageUrl // dicom'wadouri:'
element = this.$refs.dicomElement
imageId = 'wadouri:' + imageUrl// dicom'wadouri:'
} else {
element = this.$refs.dicomElement
imageId = imageUrl
}
this.$cornerstoneTools.init()
this.$cornerstone.enable(this.curElement)
this.curElement.width = document.documentElement.clientWidth
this.curElement.height = document.documentElement.clientHeight
this.$cornerstone.loadImage(imageId).then(function(image) {
//
const viewport = self.$cornerstone.getDefaultViewportForImage(self.curElement, image)
self.viewportDefault = viewport
this.$cornerstone.enable(element)
element.width = document.documentElement.clientWidth
element.height = document.documentElement.clientHeight
this.$cornerstone.loadImage(imageId).then(function (image) {
if (type === 'DCM') {
self.$cornerstone.displayImage(self.curElement, image, viewport)
const viewport = self.$cornerstone.getDefaultViewportForImage(element, image)
self.viewportDefault = viewport
self.$cornerstone.displayImage(element, image, viewport)
} else {
self.$cornerstone.displayImage(self.curElement, image)
self.$cornerstone.displayImage(element, image)
}
})
element.addEventListener('cornerstoneimagerendered', this.getZoomRate)//
// let imageId = ''
// const self = this
// if (type === 'DCM') {
// imageId = 'wadouri:' + imageUrl // dicom'wadouri:'
// } else {
// imageId = imageUrl
// }
// this.$cornerstoneTools.init()
// this.$cornerstone.enable(this.curElement)
// this.curElement.width = document.documentElement.clientWidth
// this.curElement.height = document.documentElement.clientHeight
// this.$cornerstone.loadImage(imageId).then(function(image) {
// //
// const viewport = self.$cornerstone.getDefaultViewportForImage(self.curElement, image)
// self.viewportDefault = viewport
// if (type === 'DCM') {
// self.$cornerstone.displayImage(self.curElement, image, viewport)
// } else {
// self.$cornerstone.displayImage(self.curElement, image)
// }
// })
},
//
handleResize() {
@ -125,51 +169,91 @@ export default {
this.$cornerstone.reset(this.curElement)
},
setScroll() {
const scheme = 'wadouri'
const baseUrl = 'https://mypacs.com/dicoms/'
const series = [
'image_1.dcm',
'image_2.dcm'
]
const self = this
const element = this.$refs.dicomElement
const imageIds = series.map(seriesImage => `${scheme}:${baseUrl}${seriesImage}`)
const stackScrollMouseWheelTool = this.$cornerstoneTools.StackScrollMouseWheelTool
if (!element) return
this.$cornerstoneTools.init()
this.$cornerstone.enable(element)
const s = document.getElementById('fileId')
element.width = s.clientWidth
element.height = s.clientHeight
const series = this.childrenList
let imageIds = ''
if (this.fileType === 'DCM') {
const scheme = 'wadouri'
imageIds = series.map(seriesImage => `${scheme}:${seriesImage.imageId}`)
} else {
imageIds = series.map(seriesImage => `${seriesImage.imageId}`)
}
const StackScrollTool = this.$cornerstoneTools.StackScrollTool
this.total = imageIds.length
const stack = {
currentImageIdIndex: 0,
imageIds
}
// load images and set the stack
// loadAndCacheImage
this.$cornerstone.loadImage(imageIds[0]).then((image) => {
this.$cornerstone.displayImage(element, image)
const viewport = this.$cornerstone.getDefaultViewportForImage(element, image)
self.viewportDefault = viewport
this.$cornerstone.displayImage(element, image, viewport)
this.$cornerstoneTools.addStackStateManager(element, ['stack'])
this.$cornerstoneTools.addToolState(element, 'stack', stack)
})
this.$cornerstoneTools.addTool(stackScrollMouseWheelTool)
this.$cornerstoneTools.setToolActive('StackScrollMouseWheelTool ', { })
this.$cornerstoneTools.addTool(StackScrollTool)
this.$cornerstoneTools.setToolActive('StackScroll', {mouseButtonMask: 1})
element.addEventListener('cornerstoneimagerendered', function (e) {
self.getZoomRate(e)
})//
},
// ///
getZoomRate(e) {
if (!this.curElement) return
const contextData = e.detail
const viewport = this.$cornerstone.getViewport(this.curElement)
const dcmaxTools = this.$cornerstoneTools.getToolState(this.curElement, 'stack')
this.zoomValue = viewport.scale.toFixed(2)
this.wwwcValue = Math.round(viewport.voi.windowWidth) + '/' + Math.round(viewport.voi.windowCenter)
this.renderTime = contextData.renderTimeInMs.toFixed(2)
if (dcmaxTools && dcmaxTools.data && dcmaxTools.data.length) {
this.curIndex = dcmaxTools.data[0].currentImageIdIndex + 1
}
},
initData() {
if (this.curFile && this.curFile.fileType === 'DCM') {
this.curElement = this.$refs.dicomElement
const imageUrl = this.curFile.filePath
if (this.instanceList.length === 1 && this.fileType === 'DCM') {
const imageUrl = this.instanceList[0].imageId
this.drawCornerStone(imageUrl, 'DCM')
// cornerstoneCornerstoneImageRendered
this.curElement.addEventListener('cornerstoneimagerendered', this.getZoomRate)//
} else if (this.curFile && (this.curFile.fileType === 'JPG' || this.curFile.fileType === 'PNG')) {
const imageUrl = this.curFile.filePath
this.curElement = this.$refs.imgElement
this.handleResize()
} else if (this.instanceList.length === 1 && (this.fileType === 'JPG' || this.fileType === 'PNG')) {
const imageUrl = this.instanceList[0].imageId
this.drawCornerStone(imageUrl, 'JPG')
this.curElement.addEventListener('cornerstoneimagerendered', this.getZoomRate)//
this.handleResize()
} else if (this.instanceList.length > 1 && (this.fileType === 'JPG' || this.fileType === 'PNG')) {
this.childrenList = this.instanceList
this.setScroll()
this.handleResize()
} else if (this.instanceList.length > 1 && this.fileType === 'DCM') {
console.log('序列', this.instanceList)
this.childrenList = this.instanceList
this.setScroll()
this.handleResize()
} else if (this.fileType === 'PDF') {
console.log('pdf')
this.pdfUrl = this.instanceList[0].imageId
this.total = this.instanceList.length
}
// if (this.curFile && this.curFile.fileType === 'DCM') {
// this.curElement = this.$refs.dicomElement
// const imageUrl = this.curFile.filePath
// this.drawCornerStone(imageUrl, 'DCM')
// // cornerstoneCornerstoneImageRendered
// this.curElement.addEventListener('cornerstoneimagerendered', this.getZoomRate)//
// } else if (this.curFile && (this.curFile.fileType === 'JPG' || this.curFile.fileType === 'PNG')) {
// const imageUrl = this.curFile.filePath
// this.curElement = this.$refs.imgElement
// this.drawCornerStone(imageUrl, 'JPG')
// this.curElement.addEventListener('cornerstoneimagerendered', this.getZoomRate)//
// }
}
}
}

22
src/components/360View/special/index.vue

@ -103,6 +103,8 @@ export default {
data() {
return {
date: '2017-06-20',
examNo: '',
examineItem: '',
multipleSelection: [],
tableData: [],
extractData: [],
@ -128,11 +130,31 @@ export default {
})
if (res.code === 0) {
this.tableData = res.data || []
if (res.data.length) {
this.examNo = res.data[0].examNo
this.examineItem = res.data[0].examineItem
// this.getItemData()
}
} else {
this.tableData = []
this.$message.error(res.msg)
}
},
async getItemData() {
const { data: res } = await this.$http.get('/patient/view/getExtractData', {
params: {
examNo: this.examNo,
// examNo: 'MZ17345997_0',
examineItem: this.examineItem
// examineItem: 'B'
}
})
if (res.code === 0) {
this.extractData = res.data || []
} else {
this.$message.error(res.msg)
}
},
handleSelectionChange(val) {
this.multipleSelection = val
},

249
src/mixins/view-module.js

@ -1,6 +1,6 @@
// import Cookies from 'js-cookie'
import qs from "qs";
import qs from 'qs'
// import qs from 'qs'
export default {
@ -9,205 +9,172 @@ export default {
return {
// 设置属性
mixinViewModuleOptions: {
createdIsNeed: true, // 此页面是否在创建时,调用查询数据列表接口?
activatedIsNeed: false, // 此页面是否在激活(进入)时,调用查询数据列表接口?
getDataListURL: "", // 数据列表接口,API地址
createdIsNeed: true, // 此页面是否在创建时,调用查询数据列表接口?
activatedIsNeed: false, // 此页面是否在激活(进入)时,调用查询数据列表接口?
getDataListURL: '', // 数据列表接口,API地址
getDataListIsPage: false, // 数据列表接口,是否需要分页?
deleteURL: "", // 删除接口,API地址
deleteIsBatch: false, // 删除接口,是否需要批量?
deleteIsBatchKey: "id", // 删除接口,批量状态下由那个key进行标记操作?比如:pid,uid...
exportURL: "", // 导出接口,API地址
deleteURL: '', // 删除接口,API地址
deleteIsBatch: false, // 删除接口,是否需要批量?
deleteIsBatchKey: 'id', // 删除接口,批量状态下由那个key进行标记操作?比如:pid,uid...
exportURL: '' // 导出接口,API地址
},
// 默认属性
dataForm: {}, // 查询条件
dataList: [], // 数据列表
order: "", // 排序,asc/desc
orderField: "", // 排序,字段
page: 1, // 当前页码
limit: 10, // 每页数
total: 0, // 总条数
dataListLoading: false, // 数据列表,loading状态
dataListSelections: [], // 数据列表,多选项
addOrUpdateVisible: false, // 新增/更新,弹窗visible状态
deleteParams: {},
};
dataForm: {}, // 查询条件
dataList: [], // 数据列表
order: '', // 排序,asc/desc
orderField: '', // 排序,字段
page: 1, // 当前页码
limit: 10, // 每页数
total: 0, // 总条数
dataListLoading: false, // 数据列表,loading状态
dataListSelections: [], // 数据列表,多选项
addOrUpdateVisible: false, // 新增/更新,弹窗visible状态
deleteParams:{}
}
/* eslint-enable */
},
created() {
if (this.mixinViewModuleOptions.createdIsNeed) {
this.getDataList();
this.getDataList()
}
},
activated() {
if (this.mixinViewModuleOptions.activatedIsNeed) {
this.getDataList();
this.getDataList()
}
},
methods: {
// 获取数据列表
getDataList() {
this.dataListLoading = true;
this.dataListLoading = true
let params = {
page: this.mixinViewModuleOptions.getDataListIsPage ? this.page : null,
limit: this.mixinViewModuleOptions.getDataListIsPage
? this.limit
: null,
...this.dataForm,
};
params = this.dealObjectValue(params);
this.mixinViewModuleOptions.getDataListURL
? this.$http
.get(this.mixinViewModuleOptions.getDataListURL, {
params: params,
})
.then(({ data: res }) => {
this.dataListLoading = false;
if (res.code !== 0) {
this.dataList = [];
this.total = 0;
return this.$message.error(res.msg);
}
this.dataList = this.mixinViewModuleOptions.getDataListIsPage
? res.data.list
: res.data;
res.data.drgsName ? (this.drgsName = res.data.drgsName) : "";
this.total = this.mixinViewModuleOptions.getDataListIsPage
? res.data.total
: 0;
})
.catch(() => {
this.dataListLoading = false;
})
: "";
limit: this.mixinViewModuleOptions.getDataListIsPage ? this.limit : null,
...this.dataForm
}
params = this.dealObjectValue(params)
this.mixinViewModuleOptions.getDataListURL ? this.$http.get(
this.mixinViewModuleOptions.getDataListURL, {
params: params
}
).then(({ data: res }) => {
this.dataListLoading = false
if (res.code !== 0) {
this.dataList = []
this.total = 0
return this.$message.error(res.msg)
}
this.dataList = this.mixinViewModuleOptions.getDataListIsPage ? res.data.list : res.data
res.data.drgsName ? this.drgsName = res.data.drgsName : ''
this.total = this.mixinViewModuleOptions.getDataListIsPage ? res.data.total : 0
}).catch(() => {
this.dataListLoading = false
}) : ''
},
dealObjectValue(obj) {
const param = {};
if (obj === null || obj === undefined || obj === "") return param;
const param = {}
if (obj === null || obj === undefined || obj === '') return param
for (var key in obj) {
if (obj[key] !== null && obj[key] !== undefined && obj[key] !== "") {
param[key] = obj[key];
if (obj[key] !== null && obj[key] !== undefined && obj[key] !== '') {
param[key] = obj[key]
}
}
return param;
return param
},
// 多选
dataListSelectionChangeHandle(val) {
this.dataListSelections = val;
this.dataListSelections = val
},
// 排序
dataListSortChangeHandle(data) {
if (!data.order || !data.prop) {
this.order = "";
this.orderField = "";
return false;
this.order = ''
this.orderField = ''
return false
}
this.order = data.order.replace(/ending$/, "");
this.orderField = data.prop.replace(/([A-Z])/g, "_$1").toLowerCase();
this.getDataList();
this.order = data.order.replace(/ending$/, '')
this.orderField = data.prop.replace(/([A-Z])/g, '_$1').toLowerCase()
this.getDataList()
},
// 分页, 每页条数
pageSizeChangeHandle(val) {
this.page = 1;
this.limit = val;
this.getDataList();
this.page = 1
this.limit = val
this.getDataList()
},
// 分页, 当前页
pageCurrentChangeHandle(val) {
this.page = val;
this.getDataList();
this.page = val
this.getDataList()
},
// 初始化查询
getDataListInitial() {
this.page = 1;
this.getDataList();
this.page = 1
this.getDataList()
},
// 新增 / 修改
addOrUpdateHandle(id, params, title, noParams) {
this.addOrUpdateVisible = true;
this.addOrUpdateVisible = true
this.$nextTick(() => {
this.$refs.addOrUpdate.dataForm.id = id;
noParams ? "" : (this.$refs.addOrUpdate.params = params || {});
this.$refs.addOrUpdate.dataForm.title = title;
this.$refs.addOrUpdate.dataForm.id = id
noParams ? '' : this.$refs.addOrUpdate.params = params || {}
this.$refs.addOrUpdate.dataForm.title = title
// 存在BUG,params无法覆盖,弃用
// this.$refs.addOrUpdate.dataForm = { id, ...params, title }
this.$refs.addOrUpdate.init();
});
this.$refs.addOrUpdate.init()
})
},
// 分配人员
assignPeopleHandle(scope) {
this.currentPeopleId = scope.id;
this.dialogVisible = true;
this.currentPeopleId = scope.id
this.dialogVisible = true
// 添加科研人员时,获取人员列表
this.getUserList(scope.id);
this.getUserList(scope.id)
},
// 关闭当前窗口
closeCurrentTab(data) {
var tabName = this.$store.state.contentTabsActiveName;
this.$store.state.contentTabs = this.$store.state.contentTabs.filter(
(item) => item.name !== tabName
);
var tabName = this.$store.state.contentTabsActiveName
this.$store.state.contentTabs = this.$store.state.contentTabs.filter(item => item.name !== tabName)
if (this.$store.state.contentTabs.length <= 0) {
this.$store.state.sidebarMenuActiveName =
this.$store.state.contentTabsActiveName = "home";
return false;
this.$store.state.sidebarMenuActiveName = this.$store.state.contentTabsActiveName = 'home'
return false
}
if (tabName === this.$store.state.contentTabsActiveName) {
this.$router.push({
name: this.$store.state.contentTabs[
this.$store.state.contentTabs.length - 1
].name,
});
this.$router.push({ name: this.$store.state.contentTabs[this.$store.state.contentTabs.length - 1].name })
}
},
// 删除
deleteHandle(id, callback) {
if (
this.mixinViewModuleOptions.deleteIsBatch &&
!id &&
this.dataListSelections.length <= 0
) {
if (this.mixinViewModuleOptions.deleteIsBatch && !id && this.dataListSelections.length <= 0) {
return this.$message({
message: this.$t("prompt.deleteBatch"),
type: "warning",
duration: 500,
});
}
this.$confirm(
this.$t("prompt.info", { handle: this.$t("delete") }),
this.$t("prompt.title"),
{
confirmButtonText: this.$t("confirm"),
cancelButtonText: this.$t("cancel"),
type: "warning",
}
)
.then(() => {
(Array.isArray(id)
? this.$http({
url: this.mixinViewModuleOptions.deleteURL,
method: "delete",
data: id,
})
: this.$http.delete(
this.mixinViewModuleOptions.deleteURL + `/${id}`
)
)
.then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg);
}
this.$message({
message: this.$t("prompt.success"),
type: "success",
duration: 500,
onClose: () => {
callback ? callback() : this.getDataList();
},
});
})
.catch(() => {});
message: this.$t('prompt.deleteBatch'),
type: 'warning',
duration: 500
})
.catch(() => {});
}
this.$confirm(this.$t('prompt.info', { handle: this.$t('delete') }), this.$t('prompt.title'), {
confirmButtonText: this.$t('confirm'),
cancelButtonText: this.$t('cancel'),
type: 'warning'
}).then(() => {
(Array.isArray(id) ? this.$http({
url: this.mixinViewModuleOptions.deleteURL,
method: 'delete',
data: id
}) : this.$http.delete(this.mixinViewModuleOptions.deleteURL + `/${id}`)).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.$message({
message: this.$t('prompt.success'),
type: 'success',
duration: 500,
onClose: () => {
callback ? callback() : this.getDataList()
}
})
}).catch(() => {})
}).catch(() => {})
},
// 导出
exportHandle() {
@ -216,6 +183,6 @@ export default {
// ...this.dataForm
// })
// window.location.href = `${window.SITE_CONFIG.apiURL}${this.mixinViewModuleOptions.exportURL}?${params}`
},
},
};
}
}
}

2
src/page-subspecialty/App.vue

@ -56,7 +56,7 @@ export default {
padding: 0;
}
.detail-view .el-dialog > .el-dialog__body{
height: 100%;
height: calc(100% - 48px);
flex: 1;
background: #0c1016;
padding: 0;

165
src/page-subspecialty/main.js

@ -1,118 +1,117 @@
// system入口
import Vue from "vue";
import Element from "element-ui";
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 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 * 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 Base64 from '@/utils/base64.js'
Vue.prototype.$Base64 = Base64
import Print from "vue-print-nb";
Vue.use(Print);
import Print from 'vue-print-nb'
Vue.use(Print)
import { confirm } from "@/utils/confirm";
Vue.prototype.$confirmFun = confirm;
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 VueCropper from 'vue-cropper'
Vue.use(VueCropper)
import Recorder from "js-audio-recorder";
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;
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 ElementResizeDetectorMaker from 'element-resize-detector'
Vue.prototype.$erd = ElementResizeDetectorMaker()
import animejs from "animejs";
Vue.prototype.$anime = animejs;
import animejs from 'animejs'
Vue.prototype.$anime = animejs
moment.locale("zh-cn"); // 设置语言 或 moment.lang('zh-cn');
moment.locale('zh-cn') // 设置语言 或 moment.lang('zh-cn');
Vue.use(Element, {
size: "default",
i18n: (key, value) => i18n.t(key, value),
});
size: 'default',
i18n: (key, value) => i18n.t(key, value)
})
Object.keys(filters).forEach((key) => {
Vue.filter(key, filters[key]);
});
Object.keys(filters).forEach(key => {
Vue.filter(key, filters[key])
})
// 全局组件
Vue.use(renRadioGroup);
Vue.use(renDeptTree);
Vue.use(VueChatScroll);
Vue.use(VXETable);
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;
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;
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);
window.SITE_CONFIG.storeState = cloneDeep(store.state)
new Vue({
i18n,
router,
store,
render: (h) => h(App),
}).$mount("#app");
render: h => h(App)
}).$mount('#app')

369
src/page-subspecialty/router/index.js

@ -1,206 +1,183 @@
import Vue from "vue";
import Router from "vue-router";
import http from "../utils/request";
import { isURL } from "@/utils/validate";
import Cookies from "js-cookie";
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.use(Router)
// 解决Vue-Router升级导致的Uncaught(in promise) navigation guard问题----------
const originalPush = Router.prototype.push;
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);
};
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未找到" },
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(/__.*/, ""));
return next(to.redirectedFrom.replace(/__.*/, ''))
}
next();
},
next()
}
},
{
path: "/login",
component: () => import("@/page-subspecialty/views/pages/login"),
name: "login",
meta: { title: "登录" },
path: '/login',
component: () => import('@/page-subspecialty/views/pages/login'),
name: 'login',
meta: { title: '登录' }
},
{
path: "/pacs",
component: () => import("@/page-subspecialty/views/pages/pacsManage/index"),
name: "pacs",
meta: { title: "pacs浏览器", isTab: true },
path: '/pacs',
component: () => import('@/page-subspecialty/views/pages/pacsManage/index'),
name: 'pacs',
meta: { title: 'pacs浏览器', isTab: true }
},
// 录音
{
path: "/luyin",
name: "luyin",
component: () => import("@/page-subspecialty/views/pages/luyin"),
path: '/luyin',
name: 'luyin',
component: () => import('@/page-subspecialty/views/pages/luyin')
},
// 日程安排
{
path: "/schedule",
name: "schedule",
component: () => import("@/page-subspecialty/views/pages/schedule"),
path: '/schedule',
name: 'schedule',
component: () => import('@/page-subspecialty/views/pages/schedule')
},
{
path: "/question",
name: "question",
component: () => import("@/page-subspecialty/views/pages/question"),
path: '/question',
name: 'question',
component: () => import('@/page-subspecialty/views/pages/question')
},
{
path: "/satusScreen",
name: "satusScreen",
component: () => import("@/page-subspecialty/views/pages/satusScreen"),
path: '/satusScreen',
name: 'satusScreen',
component: () => import('@/page-subspecialty/views/pages/satusScreen')
},
{
path: "/imageEdit",
name: "imageEdit",
component: () => import("@/page-subspecialty/views/pages/imageEdit"),
path: '/imageEdit',
name: 'imageEdit',
component: () => import('@/page-subspecialty/views/pages/imageEdit')
},
{
path: "/articleContent",
name: "articleContent",
component: () =>
import(
"@/page-subspecialty/views/modules/articleManagement/articleContent"
),
path: '/articleContent',
name: 'articleContent',
component: () => import('@/page-subspecialty/views/modules/articleManagement/articleContent')
},
{
path: "/transfer",
name: "transfer",
component: () => import("@/page-subspecialty/views/pages/transfer"),
},
];
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: "首页" },
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: '/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 },
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: '/patientInfo',
name: 'patientInfo',
meta: { title: '详情', isTab: true },
component: () => import('@/page-subspecialty/views/modules/optometryManagement/seeDoctor/index')
},
{
path: "/iframe",
path: '/iframe',
component: null,
name: "iframe",
meta: { title: "iframe", isTab: true },
name: 'iframe',
meta: { title: 'iframe', isTab: true }
},
{
path: "/redirect",
name: "redirect",
component: () => import("@/page-subspecialty/views/redirect"),
},
],
};
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];
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 });
return router.push({ name: routeName, params: routeParams.params })
}
// 否则: 添加并全局变量保存, 再跳转
dynamicRoute = {
path: routeName,
component: () =>
Promise.resolve(
require(`@/page-subspecialty/views/modules/${routeParams.path}`).default
),
component: () => Promise.resolve(require(`@/page-subspecialty/views/modules/${routeParams.path}`).default),
// component: () => import(`@/views/modules/${routeParams.path}`),
name: routeName,
meta: {
...window.SITE_CONFIG["contentTabDefault"],
...window.SITE_CONFIG['contentTabDefault'],
menuId: routeParams.menuId,
title: `${routeParams.title}`,
},
};
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 });
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();
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
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 (window.SITE_CONFIG['dynamicMenuRoutesHasAdded'] || fnCurrentRouteIsPageRoute(to, pageRoutes)) {
return next()
}
if (to.path === from.path) {
return;
return
}
if (
to.name === "login" ||
to.path === "/login" ||
to.path === "satusScreen" ||
to.name === "satusScreen"
) {
next();
if (to.name === 'login' || to.path === '/login' || to.path === 'satusScreen' || to.name === 'satusScreen') {
next()
} else {
// 获取字典列表, 添加并全局变量保存
// http.get('/sys/dict/type/all').then(({ data: res }) => {
@ -211,60 +188,50 @@ router.beforeEach((to, from, next) => {
// }).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/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
);
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" });
});
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();
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
@ -289,15 +256,18 @@ function getInitData() {
// 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
@ -309,16 +279,16 @@ function getInitData() {
* @param {*} pageRoutes 页面路由
*/
function fnCurrentRouteIsPageRoute(route, pageRoutes = []) {
var temp = [];
var temp = []
for (var i = 0; i < pageRoutes.length; i++) {
if (route.path === pageRoutes[i].path) {
return true;
return true
}
if (pageRoutes[i].children && pageRoutes[i].children.length >= 1) {
temp = temp.concat(pageRoutes[i].children);
temp = temp.concat(pageRoutes[i].children)
}
}
return temp.length >= 1 ? fnCurrentRouteIsPageRoute(route, temp) : false;
return temp.length >= 1 ? fnCurrentRouteIsPageRoute(route, temp) : false
}
/**
@ -327,71 +297,62 @@ function fnCurrentRouteIsPageRoute(route, pageRoutes = []) {
* @param {*} menuList 菜单列表
* @param {*} routes 递归创建的动态(菜单)路由
*/
function fnAddDynamicMenuRoutes(
menuList = [],
menuListChildLength,
routes = []
) {
let index = 0;
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"],
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,
};
title: item.name
}
if (isURL(URL)) {
item["path"] = item["name"] = `i-${item.id}`;
item["meta"].push({
iframeURL: 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, "-");
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
);
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, "-"));
item.children[0].isShow === 0 ? '' : item['redirect'] = '/' + item.children[0].url.replace(/\//g, '-')
}
}
if (item.children.length > 0) {
index++;
fnAddDynamicMenuRoutes(item.children);
index++
fnAddDynamicMenuRoutes(item.children)
}
});
})
// routes = menuList
// console.log(routes)
// 此处一定要加判断,因为此方法在递归,要等到递归完成后再执行下面的内容
// 坑!!!如果不加此判断,this.$route.matched面包屑的父级就不会展示
if (menuListChildLength === index) {
routes = menuList;
routes = menuList
// PH:底层调用一次
// 添加路由
router.addRoutes([
{
...moduleRoutes,
name: "main-dynamic-menu",
children: [...routes],
name: 'main-dynamic-menu',
children: [...routes]
},
{ path: "*", redirect: { name: "404" } },
]);
{ path: '*', redirect: { name: '404' }}
])
// console.log('----------------------')
window.SITE_CONFIG["dynamicMenuRoutes"] = routes;
window.SITE_CONFIG["dynamicMenuRoutesHasAdded"] = true;
window.SITE_CONFIG['dynamicMenuRoutes'] = routes
window.SITE_CONFIG['dynamicMenuRoutesHasAdded'] = true
}
}
export default router;
export default router

22
src/page-subspecialty/views/modules/optometryManagement/dioptric/index.vue

@ -77,12 +77,12 @@
<el-table-column prop="mzDoctorName" label="门诊医师" header-align="center" align="center" />
<el-table-column prop="sgDoctorName" label="视光医师" header-align="center" align="center" />
<el-table-column prop="createDate" label="就诊时间" header-align="center" align="center" />
<el-table-column prop="callSort" label="分诊序号" header-align="center" align="center" />
<el-table-column prop="callStatus" label="叫号状态" header-align="center" align="center">
<template slot-scope="scope">
{{ scope.row.callStatus | callStatus }}
</template>
</el-table-column>
<!-- <el-table-column prop="callSort" label="分诊序号" header-align="center" align="center" />-->
<!-- <el-table-column prop="callStatus" label="叫号状态" header-align="center" align="center">-->
<!-- <template slot-scope="scope">-->
<!-- {{ scope.row.callStatus | callStatus }}-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column prop="operation" label="操作" header-align="center" align="center" width="180">
<template slot-scope="scope">
<!-- <span-->
@ -94,12 +94,12 @@
<span
style="color: #1890ff; padding-right: 8px"
class="operation-details"
@click="showDetail(scope.row)"
@click="showDetail(scope.row, 1)"
>接诊</span>
<span
style="color: #1890ff; padding-right: 8px"
class="operation-details"
@click="showDetail(scope.row)"
@click="showDetail(scope.row, 2)"
>患者360</span>
</template>
</el-table-column>
@ -112,7 +112,7 @@
<!-- HIS引入弹框 -->
<his-add v-if="HisAddVisible" ref="HisAddRef" :is-search="'3'" />
<!-- 详情页 -->
<detail-view v-if="detailViewVisible" ref="viewRef" platform="3" :is-search="'3'" :patient-id="patientId" :patient-id-number="patientIdNumber" @detailViewVisible="detailViewVisible=false" />
<detail-view v-if="detailViewVisible" ref="viewRef" platform="3" :only-read="onlyRead" :is-search="'3'" :patient-id="patientId" :patient-id-number="patientIdNumber" @detailViewVisible="detailViewVisible=false" />
</div>
</template>
<script>
@ -214,6 +214,7 @@ export default {
}],
nextVisitTime: [],
patientTypeList: [],
onlyRead: false,
detailViewVisible: false,
HisAddVisible: false,
dataForm: {
@ -274,8 +275,9 @@ export default {
this.getDataListInitial()
},
//
showDetail(scopeRow) {
showDetail(scopeRow, index) {
console.log(scopeRow)
this.onlyRead = index !== 1
this.detailViewVisible = true
this.patientId = scopeRow.patientId
this.patientIdNumber = scopeRow.patientIdNumber

110
src/page-subspecialty/views/modules/outpatientManagement/call/index.vue

@ -77,20 +77,20 @@
<el-table-column prop="mzDoctorName" label="门诊医师" header-align="center" align="center" />
<el-table-column prop="sgDoctorName" label="视光医师" header-align="center" align="center" />
<el-table-column prop="createDate" label="就诊时间" header-align="center" align="center" />
<el-table-column prop="callSort" label="分诊序号" header-align="center" align="center" />
<!-- <el-table-column prop="callStatus" label="叫号状态" header-align="center" align="center">-->
<!-- <template slot-scope="scope">-->
<!-- {{ scope.row.callStatus | callStatus }}-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column prop="callSort" label="分诊序号" header-align="center" align="center" />-->
<!-- <el-table-column prop="callStatus" label="叫号状态" header-align="center" align="center">-->
<!-- <template slot-scope="scope">-->
<!-- {{ scope.row.callStatus | callStatus }}-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column prop="operation" label="操作" header-align="center" align="center" width="180">
<template slot-scope="scope">
<!-- <span-->
<!-- style="color: #1890ff; padding-right: 8px"-->
<!-- class="operation-details"-->
<!-- @click="browseClick(scope.row)"-->
<!-- >叫号</span>-->
<!-- v-if="scope.row.callStatus !== '1' && scope.row.callStatus !== '3' && scope.row.callStatus !== '5'"-->
<!-- <span-->
<!-- style="color: #1890ff; padding-right: 8px"-->
<!-- class="operation-details"-->
<!-- @click="browseClick(scope.row)"-->
<!-- >叫号</span>-->
<!-- v-if="scope.row.callStatus !== '1' && scope.row.callStatus !== '3' && scope.row.callStatus !== '5'"-->
<span
style="color: #1890ff; padding-right: 8px"
class="operation-details"
@ -112,7 +112,7 @@
<!-- HIS引入弹框 -->
<his-add v-if="HisAddVisible" ref="HisAddRef" :is-search="'1'" />
<!-- 详情页 -->
<detail-view v-if="detailViewVisible" :id="detailId" ref="viewRef" platform="1" :only-read="onlyRead" :is-search="'1'" :patient-id="patientId" :patient-id-number="patientIdNumber" @detailViewVisible="detailViewVisible=false" />
<detail-view v-if="detailViewVisible" :only-read="onlyRead" :is-search="'1'" ref="viewRef" :patient-id="patientId" :patient-id-number="patientIdNumber" @detailViewVisible="detailViewVisible=false" />
</div>
</template>
<script>
@ -127,47 +127,6 @@ export default {
AddOrUpdate,
detailView
},
filters: {
callStatus(val) {
switch (val) {
case '1':
return '未叫号'
break
case '2':
return '已叫号'
break
case '3':
return '过号'
break
case '4':
return '呼叫中'
break
default:
return val
}
},
patientStatus(val) {
switch (val) {
case '1':
return '未报到'
break
case '2':
return '未诊断'
break
case '3':
return '就诊中'
break
case '4':
return '回诊'
break
case '5':
return '已诊'
break
default:
return val
}
}
},
mixins: [mixinViewModule, tableAutoHeight],
data() {
return {
@ -234,6 +193,47 @@ export default {
detailId: ''
}
},
filters: {
callStatus(val) {
switch (val) {
case '1':
return '未叫号'
break
case '2':
return '已叫号'
break
case '3':
return '过号'
break
case '4':
return '呼叫中'
break
default:
return val
}
},
patientStatus(val) {
switch (val) {
case '1':
return '未报到'
break
case '2':
return '未诊断'
break
case '3':
return '就诊中'
break
case '4':
return '回诊'
break
case '5':
return '已诊'
break
default:
return val
}
},
},
watch: {
$route(val) {
//
@ -277,7 +277,7 @@ export default {
//
showDetail(scopeRow, index) {
console.log(scopeRow)
this.onlyRead = index !== 2
this.onlyRead = index !== 1
this.detailViewVisible = true
this.patientId = scopeRow.patientId
this.patientIdNumber = scopeRow.patientIdNumber

17
src/page-subspecialty/views/modules/outpatientManagement/treat/index.vue

@ -58,7 +58,7 @@
style="width: 100%"
>
<el-table-column prop="patientId" label="登记号" header-align="center" align="center" />
<!-- <el-table-column prop="patientId" label="就诊号" header-align="center" align="center" />-->
<!-- <el-table-column prop="patientId" label="就诊号" header-align="center" align="center" />-->
<el-table-column label="状态" header-align="center" align="center">
<template slot-scope="scope">
{{ scope.row.patientStatus | patientStatus }}
@ -79,7 +79,7 @@
</el-table-column>
<el-table-column prop="patientSex" label="治疗医师" header-align="center" align="center" />
<el-table-column prop="createDate" label="就诊时间" header-align="center" align="center" />
<el-table-column prop="callSort" label="分诊序号" header-align="center" align="center" />
<!-- <el-table-column prop="callSort" label="分诊序号" header-align="center" align="center" />-->
<!-- <el-table-column prop="patientSex" label="叫号状态" header-align="center" align="center">-->
<!-- <template slot-scope="scope">-->
<!-- {{ scope.row.callStatus | callStatus }}-->
@ -100,7 +100,7 @@
<span
style="color: #1890ff; padding-right: 8px"
class="operation-details"
@click="showDetail(scope.row)"
@click="showDetail(scope.row, 2)"
>患者360</span>
</template>
</el-table-column>
@ -113,7 +113,7 @@
<!-- HIS引入弹框 -->
<his-add v-if="HisAddVisible" ref="HisAddRef" :is-search="'2'" />
<!-- 详情页 -->
<detail-view v-if="detailViewVisible" :id="detailId" ref="viewRef" platform="2" :is-search="'2'" :patient-id="patientId" :patient-id-number="patientIdNumber" @detailViewVisible="detailViewVisible=false" />
<detail-view v-if="detailViewVisible" :id="detailId" ref="viewRef" :is-search="'2'" :patient-id="patientId" :patient-id-number="patientIdNumber" @detailViewVisible="detailViewVisible=false" />
</div>
</template>
<script>
@ -276,7 +276,8 @@ export default {
this.getDataListInitial()
},
//
showDetail(scopeRow) {
showDetail(scopeRow, index) {
this.onlyRead = index !== 1
this.detailViewVisible = true
this.patientId = scopeRow.patientId
this.patientIdNumber = scopeRow.patientIdNumber
@ -286,12 +287,6 @@ export default {
this.$refs.viewRef.getPatientData()
// // --
this.$refs.viewRef.getTimeAxisData()
// // tab
// this.$refs.viewRef.visible = true
// this.$refs.viewRef.drawer = true
// this.$refs.viewRef.isActive = 1
// this.$refs.viewRef.init()
// this.$refs.viewRef.setIndex()
})
},
// His

284
src/page-subspecialty/views/pages/pacsManage/index.vue

@ -1,10 +1,10 @@
<template>
<div class="containerBox">
<div class="patientBox">
<div>
<div style="width: 100%;padding: 16px;box-sizing: border-box">
<el-dropdown class="mr20">
<span class="el-dropdown-link">
病人ID<i class="el-icon-arrow-down el-icon--right"></i>
病人ID<i class="el-icon-arrow-down el-icon--right" />
</span>
<el-dropdown-menu slot="dropdown">
<el-input v-model="patientId" placeholder="请输入病人ID" />
@ -12,30 +12,30 @@
</el-dropdown>
<el-dropdown class="mr20">
<span class="el-dropdown-link">
姓名<i class="el-icon-arrow-down el-icon--right"></i>
姓名<i class="el-icon-arrow-down el-icon--right" />
</span>
<el-dropdown-menu slot="dropdown">
<el-input v-model="patientName" placeholder="请输入姓名" />
</el-dropdown-menu>
</el-dropdown>
<!-- <el-dropdown class="mr20">-->
<!-- <span class="el-dropdown-link">-->
<!-- 设备类型<i class="el-icon-arrow-down el-icon&#45;&#45;right"></i>-->
<!-- </span>-->
<!-- <el-dropdown-menu slot="dropdown">-->
<!-- <el-select default-value="全部" style="width: 180px" @change="selectDeviceType">-->
<!-- <el-select-option :value="0">-->
<!-- 全部-->
<!-- </el-select-option>-->
<!-- <el-select-option v-for="(item,index) in deviceType" :key="index" :value="item.deviceType">-->
<!-- {{ item.deviceTypeName }}-->
<!-- </el-select-option>-->
<!-- </el-select>-->
<!-- </el-dropdown-menu>-->
<!-- </el-dropdown>-->
<!-- <el-dropdown class="mr20">-->
<!-- <span class="el-dropdown-link">-->
<!-- 设备类型<i class="el-icon-arrow-down el-icon&#45;&#45;right"></i>-->
<!-- </span>-->
<!-- <el-dropdown-menu slot="dropdown">-->
<!-- <el-select default-value="全部" style="width: 180px" @change="selectDeviceType">-->
<!-- <el-select-option :value="0">-->
<!-- 全部-->
<!-- </el-select-option>-->
<!-- <el-select-option v-for="(item,index) in deviceType" :key="index" :value="item.deviceType">-->
<!-- {{ item.deviceTypeName }}-->
<!-- </el-select-option>-->
<!-- </el-select>-->
<!-- </el-dropdown-menu>-->
<!-- </el-dropdown>-->
<el-dropdown class="mr20">
<span class="el-dropdown-link">
备注<i class="el-icon-arrow-down el-icon--right"></i>
备注<i class="el-icon-arrow-down el-icon--right" />
</span>
<el-dropdown-menu slot="dropdown">
<el-input v-model="remark" placeholder="请输入备注" allow-clear />
@ -43,49 +43,96 @@
</el-dropdown>
<el-dropdown class="mr20">
<span class="el-dropdown-link">
用药<i class="el-icon-arrow-down el-icon--right"></i>
用药<i class="el-icon-arrow-down el-icon--right" />
</span>
<el-dropdown-menu slot="dropdown">
<el-input v-model="medication" placeholder="请输入用药" allow-clear />
</el-dropdown-menu>
</el-dropdown>
<el-button style="float: right;margin-bottom: 10px;margin-left: 10px" type="primary" icon="search" @click="selectPagination(1)">查询</el-button>
<el-button style="float: right;margin-bottom: 10px" type="primary" icon="search" @click="reset()">重置</el-button>
<el-button size="small" style="float: right;margin-bottom: 10px;margin-left: 10px" type="primary" icon="search" @click="selectPagination(1)">查询</el-button>
<el-button size="small" style="float: right;margin-bottom: 10px" type="primary" icon="search" @click="reset()">重置</el-button>
</div>
<div class="exportBtn">
<div>
<span class="export_l">已选择 {{ selectedRowKeys.length }} </span>
<span v-if="selectedRowKeys.length > 0" class="cancelSel" @click="cancelSelected">取消选择</span>
</div>
<span class="export_r" @click="exportData">导出数据</span>
</div>
<el-table :custom-row="handleClickRow" :row-selection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}" :columns="columns" :data-source="patientList" :pagination="false">
<template slot="lebal" slot-scope="text, record, index">
<span v-for="item in record.tagList" v-if="record.tagList.length" class="lebalBox">{{ item.length > 20 ? item.slice(0, 20) + '...' : item }}</span>
</template>
<template slot="note" slot-scope="text, record, index">
<span class="noteBox">{{ record.note }}</span>
</template>
<template slot="operate" slot-scope="text, record, index">
<span class="detail" @click.stop="handleInfo(record.id)">查看信息</span>
</template>
<!-- <div class="exportBtn">-->
<!-- <div>-->
<!-- <span class="export_l">已选择 {{ selectedRowKeys.length }} </span>-->
<!-- <span v-if="selectedRowKeys.length > 0" class="cancelSel" @click="cancelSelected">取消选择</span>-->
<!-- </div>-->
<!-- <span class="export_r" @click="exportData">导出数据</span>-->
<!-- </div>-->
<el-table :data="patientList" :cell-style="tableClassName" style="width: 100%" @row-click="handleClickRow">
<el-table-column
prop="id"
label="病人id"
/>
<el-table-column
prop="name"
label="姓名"
/>
<el-table-column
prop="sex"
label="性别"
/>
<el-table-column
prop="age"
label="年龄"
/>
<el-table-column
prop="lebal"
label="标签"
>
<template slot-scope="scope">
<div v-if="scope.row.tagList.length">
<span v-for="(item, index) in scope.row.tagList" :key="index" class="lebalBox">{{ item.length > 20 ? item.slice(0, 20) + '...' : item }}</span>
</div>
</template>
</el-table-column>
<el-table-column
prop="remark"
label="备注"
/>
<!-- <el-table-column-->
<!-- label="操作"-->
<!-- width="180"-->
<!-- >-->
<!-- <template slot-scope="scope">-->
<!-- <span class="detail" @click.stop="handleInfo(scope.row.id)"></span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <template slot="lebal" slot-scope="text, record, index">-->
<!-- <span v-for="item in record.tagList" v-if="record.tagList.length" class="lebalBox">{{ item.length > 20 ? item.slice(0, 20) + '...' : item }}</span>-->
<!-- </template>-->
<!-- <template slot="note" slot-scope="text, record, index">-->
<!-- <span class="noteBox">{{ record.note }}</span>-->
<!-- </template>-->
<!-- <template slot="operate" slot-scope="text, record, index">-->
<!-- <span class="detail" @click.stop="handleInfo(record.id)">查看信息</span>-->
<!-- </template>-->
</el-table>
<el-pagination class="pagination" size="small" :current="page" :total="total" show-size-changer show-quick-jumper :page-size="limit" @showSizeChange="onShowSizeChange" @change="selectPagination" />
</div>
<!-- 图像与报告 -->
<keep-alive>
<el-dialog title="" class="detail-view" :fullscreen="true" :visible.sync="isActive" append-to-body @close="closePacs">
<imgRecord :patient-info="patientBaseData" />
</el-dialog>
</keep-alive>
</div>
</template>
<script>
import imgRecord from '@/components/360View/img-reccrd'
// import api from '../../api/interface'
import moment from 'moment'
// import patientModel from './patientInfo'
export default {
components: {
// patientModel
imgRecord
},
data() {
return {
patientBaseData: {},
isActive: false,
labelCol: {
xs: { span: 24 },
sm: { span: 7 }
@ -179,7 +226,7 @@ export default {
},
mounted() {
this.userName = window.localStorage.getItem('userName')
// this.queryDeviceType()
// this.getPatientData()
this.queryPatientList()
},
methods: {
@ -195,6 +242,25 @@ export default {
this.startDate = null
this.endDate = null
},
// id--
async getPatientData() {
const { data: res } = await this.$http.get(
'/patient/view/getPatientData',
{
params: {
patientId: this.patientId
}
}
)
if (res.code === 0) {
this.patientBaseData = res.data ? res.data : {}
} else {
this.$message.error(res.msg)
}
},
tableClassName({ row, rowIndex }) {
return 'background: transparent;'
},
handleClickId() {
this.patientIdFlag = true
},
@ -268,20 +334,29 @@ export default {
},
//
handleClickRow(record, index) {
return {
on: {
click: () => {
console.log(record)
// window.localStorage.setItem('patientId', '88163664')
window.localStorage.setItem('patientId', '2553716')
// window.localStorage.setItem('patientId', record.id)
window.localStorage.setItem('name', record.name)
window.localStorage.setItem('age', record.age)
window.localStorage.setItem('sex', record.sex)
this.$router.push({ name: 'patientDetail' })
}
}
}
console.log(record)
this.patientId = record.id
this.getPatientData()
// this.patientBaseData = record
this.isActive = true
// return {
// on: {
// click: () => {
// console.log(record)
// // window.localStorage.setItem('patientId', '88163664')
// window.localStorage.setItem('patientId', '2553716')
// // window.localStorage.setItem('patientId', record.id)
// window.localStorage.setItem('name', record.name)
// window.localStorage.setItem('age', record.age)
// window.localStorage.setItem('sex', record.sex)
// this.$router.push({ name: 'patientDetail' })
// }
// }
// }
},
// 360
closePacs() {
this.isActive = false
},
//
handleInfo() {
@ -315,6 +390,7 @@ export default {
if (res.code === 0) {
this.patientList = res.data ? res.data.list : []
this.total = res.data ? res.data.total : 0
console.log(this.patientList)
} else {
this.$message.error(res.msg)
}
@ -438,6 +514,25 @@ export default {
</style>
<style lang="scss">
.containerBox{
.el-table th.el-table__cell{
color: white;
background-color: #141414;
}
.el-table tr{
color: white;
background-color: #141414;
}
.el-table td.el-table__cell, .el-table th.el-table__cell.is-leaf{
border: 1px solid #141414;
}
.el-table, .el-table__expanded-cell{
background-color: #141414;
}
.el-table--border::after, .el-table--group::after, .el-table::before{
content: '';
position: absolute;
background-color: #141414;
}
.el-dropdown{
color: white;
}
@ -461,83 +556,4 @@ export default {
}
}
}
.ant-form-item{
margin: 16px 0;
}
.ant-form-item-label>label{
color: #FFFFFF !important;
}
.ant-table-placeholder{
border-top: none;
border-bottom: 1px solid #0C1016;
background-color: transparent;
}
.ant-empty-normal{
color: #FFFFFF;
}
.ant-table-thead>tr>th{
color: #FFFFFF;
background: #434343;
border-bottom: none;
}
.ant-table-tbody>tr>td{
color: #FFFFFF !important;
border-bottom: none;
}
.ant-table-tbody>tr:nth-child(odd){
background: #1F2329 !important;
}
.ant-table-tbody>tr:nth-child(even){
background: #141414 !important;
}
.ant-table-tbody>tr:nth-child(odd):hover:not(.ant-table-expanded-row) > td{
background: #1F2329 !important;
}
.ant-table-tbody>tr:nth-child(even):hover:not(.ant-table-expanded-row) > td{
background: #141414 !important;
}
.ant-table-tbody>tr:nth-child(odd).ant-table-row-selected td{
background: #1F2329 !important;
}
.ant-table-tbody>tr:nth-child(even).ant-table-row-selected td{
background: #141414 !important;
}
.ant-pagination-next a, .ant-pagination-prev a, .ant-pagination-item-ellipsis{
color: #D9D9D9 !important;
}
.ant-pagination-item{
width: 32px !important;
height: 32px !important;
line-height: 30px !important;
background-color: #1F1F1F !important;
}
.ant-pagination-item-active a{
color: #40a9ff !important;
}
.ant-pagination-item:hover{
border-color: #40a9ff !important;
}
.ant-pagination-item a, .ant-pagination.mini .ant-pagination-options-quick-jumper, .ant-select-sm .ant-select-selection--single{
color: #FFFFFF;
height: 32px !important;
}
.ant-select-sm .ant-select-selection__rendered{
line-height: 32px !important;
}
.pagination .ant-select-selection, .ant-pagination-options-quick-jumper input{
color: #FFFFFF ;
height: 32px !important;
background-color: #1F1F1F !important;
border: 1px solid rgba(103, 103, 103, 0.38);
}
.ant-select-arrow{
color: #FFFFFF;
}
.ant-dropdown-link{
color: #FFFFFF;
font-size: 14px;
font-family: PingFang SC;
}
</style>

Loading…
Cancel
Save