bianyaqi 2 years ago
parent
commit
98c82ca395
  1. 710
      src/components/360View/afterPart/index.vue
  2. 704
      src/components/360View/commonForm/deveopmentFIle.vue
  3. 660
      src/components/360View/commonForm/eyesVision.vue
  4. 711
      src/components/360View/commonForm/optometryForm.vue
  5. 764
      src/components/360View/commonForm/threeVision.vue
  6. 336
      src/components/360View/dataInfo.vue
  7. 4
      src/components/360View/followUpRecord/index.vue
  8. 447
      src/components/360View/forePart/index.vue
  9. 134
      src/components/360View/index1.vue
  10. 215
      src/components/360View/info.vue
  11. 14
      src/components/360View/itemSelect/index.vue
  12. 2
      src/components/360View/key-indicators.vue
  13. 17
      src/components/360View/medicalRecord/index.vue
  14. 453
      src/components/360View/medicalRecord/outPatientRecord/index.vue
  15. 513
      src/components/360View/opticalFile/index.vue
  16. 402
      src/components/360View/opticalFile/outPatientRecord/index.vue
  17. 204
      src/components/360View/overView/index.vue
  18. 1626
      src/components/360View/pacs/img-reccrd.vue
  19. 543
      src/components/360View/pacs/patientList.vue
  20. 216
      src/components/360View/routine/index.vue
  21. 126
      src/components/360View/special/index.vue
  22. 243
      src/components/360View/specialExamine/index.vue
  23. 7
      src/components/360View/time-line.vue
  24. 209
      src/components/echarts/eyeCharts.vue
  25. 34
      src/components/echarts/yanya.vue
  26. 4
      src/components/hm-crf/tinymce/themes/silver/theme.js
  27. 251
      src/mixins/view-module.js
  28. 73
      src/page-subspecialty/router/index.js
  29. 2
      src/page-subspecialty/views/modules/optometryManagement/cornea/index.vue
  30. 317
      src/page-subspecialty/views/modules/optometryManagement/dioptric/HIS-add.vue
  31. 477
      src/page-subspecialty/views/modules/optometryManagement/dioptric/index.vue
  32. 430
      src/page-subspecialty/views/modules/optometryManagement/dioptric/patient-add-or-update.vue
  33. 25
      src/page-subspecialty/views/modules/outpatientManagement/call/HIS-add.vue
  34. 198
      src/page-subspecialty/views/modules/outpatientManagement/call/index.vue
  35. 22
      src/page-subspecialty/views/modules/outpatientManagement/call/patient-add-or-update.vue
  36. 25
      src/page-subspecialty/views/modules/outpatientManagement/treat/HIS-add.vue
  37. 188
      src/page-subspecialty/views/modules/outpatientManagement/treat/index.vue
  38. 17
      src/page-subspecialty/views/modules/outpatientManagement/treat/patient-add-or-update.vue
  39. 13
      src/page-subspecialty/views/modules/systemManagement/team/team-add-or-update.vue
  40. 4
      src/page-subspecialty/views/pages/login.vue
  41. 543
      src/page-subspecialty/views/pages/pacsManage/index.vue
  42. 8
      static/js/jquery-3.5.1/jquery.js

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

@ -1,53 +1,132 @@
<template>
<div class="foreBox">
<el-table
:data="tableData"
style="width: 100%;margin-top: 32px"
@selection-change="handleSelectionChange"
>
<el-table-column
type="selection"
width="55"
/>
<el-table-column
align="center"
prop="name"
label="OD"
<div class="afterBox">
<div class="moveIcon">
<p @click="moveAll(1)"><i class="el-icon-back" /></p>
<p style="margin-top: 5px" @click="moveAll(2)"><i class="el-icon-back" style="transform: rotateY(180deg)" /></p>
</div>
<div style="display: flex;margin-top: 32px">
<div style="width: 200px;padding-right: 8px;text-align: left">
<p style="font-weight: bold;margin-bottom: 12px;text-align: left">描述项模板</p>
<el-button v-if="!treeCaseList.length" type="primary" size="small" @click="append(1)">+新增</el-button>
<el-tree
ref="tree"
:data="treeCaseList"
:props="treeProps"
:render-content="renderContent"
:default-expand-all="true"
:expand-on-click-node="false"
@node-click="templateData"
/>
</div>
<el-table
id="foreCheck"
ref="multipleTable"
:data="tableData"
style="margin: 8px 8px 0 0"
@selection-change="handleSelectionChange"
>
<template slot-scope="scope">
<!-- <inputSelect :arrayList="arrayList" @getInputNum="getInputNum" />-->
<div>
</div>
</template>
</el-table-column>
<el-table-column
prop="date"
label="同步"
align="center"
width="120"
>
<template slot-scope="scope">
<p><i class="el-icon-back" /></p>
<p style="margin-top: 5px"><i class="el-icon-back" style="transform: rotateY(180deg)" /></p>
</template>
</el-table-column>
<el-table-column
align="center"
prop="name"
label="OS"
/>
</el-table>
<el-table-column
type="selection"
width="55"
/>
<el-table-column
align="center"
label="OD"
>
<template slot-scope="scope">
<div>
<span v-if="!scope.row.sort && scope.row.id">
<treeSelect v-model="scope.row.od" :options="scope.row.data" :props="treeProps" :multiple="true" :filterable="true" :check-strictly="true" :default-expand-all="true" @handleNode="handleNode(scope.$index,'od', $event)" @add="addTree(scope.row, $event)" @remove="removeTree" />
</span>
<span v-if="!scope.row.sort && !scope.row.id">{{ scope.row.name }}</span>
<span v-if="scope.row.sort === 3">
<span style="margin-right: 16px">视盘视神经</span><treeSelect v-model="scope.row.od" :props="treeProps" style="display: inline-block;width: 60%" :options="scope.row.data" :multiple="true" :filterable="true" :check-strictly="true" :default-expand-all="true" @handleNode="handleNode(scope.$index,'od', $event)" @add="addTree(scope.row, $event)" />
</span>
<span v-if="scope.row.sort === 4">
<span style="margin-right: 16px">视盘CDR</span><treeSelect v-model="scope.row.od" :props="treeProps" style="display: inline-block;width: 60%" :options="scope.row.data" :multiple="true" :filterable="true" :check-strictly="true" :default-expand-all="true" @handleNode="handleNode(scope.$index,'od', $event)" @add="addTree(scope.row, $event)" />
</span>
</div>
</template>
</el-table-column>
<el-table-column
class="move"
align="center"
width="120"
>
<template slot-scope="scope">
<div v-if="scope.row.sort">
<p @click="moveHandle(scope.$index,1, scope.row.os)"><i class="el-icon-back" /></p>
<p style="margin-top: 5px" @click="moveHandle(scope.$index,2, scope.row.od)"><i class="el-icon-back" style="transform: rotateY(180deg)" /></p>
</div>
</template>
</el-table-column>
<el-table-column
align="center"
label="OS"
width="300"
>
<template slot-scope="scope">
<div>
<span v-if="!scope.row.sort && scope.row.id">
<treeSelect v-model="scope.row.os" :options="scope.row.data" :props="treeProps" :multiple="true" :filterable="true" :check-strictly="true" :default-expand-all="true" @handleNode="handleNode(scope.$index,'os', $event)" @add="addTree(scope.row, $event)" />
</span>
<span v-if="!scope.row.sort && !scope.row.id">{{ scope.row.name }}</span>
<span v-if="scope.row.sort === 3">
<span style="margin-right: 16px">视盘视神经</span><treeSelect v-model="scope.row.os" :props="treeProps" style="display: inline-block;width: 60%" :options="scope.row.data" :multiple="true" :filterable="true" :check-strictly="true" :default-expand-all="true" @handleNode="handleNode(scope.$index,'os', $event)" @add="addTree(scope.row, $event)" />
</span>
<span v-if="scope.row.sort === 4">
<span style="margin-right: 16px">视盘CDR</span><treeSelect v-model="scope.row.os" :props="treeProps" style="display: inline-block;width: 60%" :options="scope.row.data" :multiple="true" :filterable="true" :check-strictly="true" :default-expand-all="true" @handleNode="handleNode(scope.$index,'os', $event)" @add="addTree(scope.row, $event)" />
</span>
</div>
</template>
</el-table-column>
</el-table>
</div>
<el-dialog :title="title" :visible.sync="dialogFormVisible">
<el-form :model="form" style="margin-top: 16px">
<el-form-item label="名称:" label-width="120px">
<el-input v-model="form.name" auto-complete="off" style="width: 300px" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogFormVisible = false"> </el-button>
<el-button type="primary" @click="handSaveBtn"> </el-button>
</div>
</el-dialog>
<el-dialog title="保存模板" :visible.sync="templateFlag">
<el-form :model="form" style="margin-top: 16px">
<el-form-item label="名称:" label-width="120px">
<el-input v-model="form.name" auto-complete="off" style="width: 300px" />
</el-form-item>
<el-form-item label="选择节点:" label-width="120px">
<el-tree
ref="tree"
:data="treeTemplate"
:props="treeProps"
:default-expand-all="true"
:expand-on-click-node="false"
@node-click="templateNodeClick"
/>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="templateFlag = false"> </el-button>
<el-button type="primary" @click="saveTreeTemplete"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import inputSelect from '@/components/input-select'
import treeGrid from '@/components/360View/treeSelect'
import { dateFilterTwo } from '@/filters/index.js'
import _ from 'lodash'
import eventBus from '@/page-subspecialty/utils/eventBus'
import treeSelect from '@/components/360View/itemSelect'
import axios from 'axios'
import Cookies from 'js-cookie'
const Base64 = require('js-base64').Base64
export default {
components: {
inputSelect,
treeGrid
treeSelect
},
mixins: [],
props: {
@ -63,115 +142,520 @@ export default {
inject: ['refresh'],
data() {
return {
checked: '',
radio2: '',
value: '',
shiliAndYanya: {},
userData: {},
title: '',
addType: '',
sourceData: [],
treeCaseList: [],
treeTemplate: [],
treeProps: {
value: 'id',
label: 'name',
children: 'child'
},
type: '',
doctorId: '',
deleteId: '',
treeId: '',
treeName: '',
weight: '',
parentId: 0,
collectId: '',
form: {
name: ''
},
multipleSelection: [],
arrayList: [
{
code: '1',
text: '111'
},
{
code: '3',
text: '333'
},
templateFlag: false,
dialogFormVisible: false,
tableData: [
{
code: '5',
text: '555'
}
],
inputSelectData: '', //
tableData: [{
date: '2016-05-02',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
date: '2016-05-04',
name: '王小虎',
address: '上海市普陀区金沙江路 1517 弄'
}],
options: [{
value: '选项1',
label: '红绿色盲'
}, {
value: '选项2',
label: '双皮奶'
}, {
value: '选项3',
label: '蚵仔煎'
}, {
value: '选项5',
label: '北京烤鸭'
}]
name: '黄斑'
}, {
name: '黄斑',
id: 14,
type: 'hangman',
od: '',
os: ''
}, {
name: '视盘'
}, {
name: '视盘',
id: 15,
sort: 3,
type: 'shipman',
od: '',
os: ''
}, {
name: '视盘',
id: 16,
sort: 4,
type: 'shipman',
od: '',
os: ''
}, {
name: '视网膜'
}, {
name: '视网膜',
id: 17,
type: 'showing',
od: '',
os: ''
}, {
name: '脉络膜'
}, {
name: '脉络膜',
id: 18,
type: 'mailbomb',
od: '',
os: ''
}, {
name: '玻璃体 vitreous'
}, {
name: '玻璃体 vitreous',
id: 19,
type: 'blit',
od: '',
os: ''
}, {
name: '血管'
}, {
name: '血管',
id: 20,
type: 'began',
od: '',
os: ''
}, {
name: '巩膜'
}, {
name: '巩膜',
id: 21,
type: 'gong',
od: '',
os: ''
}, {
name: '边缘 periphery'
}, {
name: '边缘 periphery',
id: 22,
type: 'banyan',
od: '',
os: ''
}],
treeList: []
}
},
created() {
},
mounted() {
this.getShiLiAndYanYaData()
this.userData = JSON.parse(window.localStorage.getItem('qg-userData'))
this.doctorId = this.userData.id
this.getforeList('3').then(() => {
this.queryOptions()
})
this.queryTreeCase()
},
methods: {
//
getInputNum(data) {
console.log('this is data of input-select: ', data)
this.inputSelectData = data
},
async getShiLiAndYanYaData() {
const { data: res } = await this.$http.get('/patient/view/getYanZouAndYanYaData', {
async getforeList(flag) {
const { data: res } = await this.$http.get('/case/getCase', {
params: {
patientId: '200203836'
// patientId: this.patientId
patientId: this.patientId,
platform: 1,
flag: flag // 1234
}
})
if (res.code === 0) {
this.shiliAndYanya = res.data
// this.tableData = res.data ? JSON.parse(res.data.jsonText) : []
this.collectId = res.data ? res.data.id : ''
} else {
this.shiliAndYanya = {}
this.$message.error(res.msg)
}
},
//
handleSelectionChange(val) {
this.multipleSelection = val
console.log(this.multipleSelection)
},
handleNode(index, type, event) {
if (type === 'os') {
this.tableData[index].osValue = event
} else {
this.tableData[index].odValue = event
}
},
//
addAfterData() {
const data = this.multipleSelection.filter(item => {
return item.id >= 1
})
eventBus.$emit('sendForData', data)
},
// ,
queryOptions() {
console.log(12555553,this.tableData)
const treeList = []
this.tableData.forEach(item => {
if (item.type) {
const p = this.queryTree(item.type)
treeList.push(p)
}
})
Promise.all(treeList).then((result) => {
if (result.length) {
result.forEach(item => {
item.forEach(row => {
this.tableData.forEach(e => {
if (e.type === row.type) {
e.data = [row]
}
})
})
})
}
this.sourceData = _.cloneDeep(this.tableData) || []
}).catch((error) => {
console.log(error)
})
},
//
moveAll(type) {
if (type === 1) {
this.tableData.forEach(item => {
if (item.sort) {
item.od = item.os
}
})
} else {
this.tableData.forEach(item => {
if (item.sort) {
item.os = item.od
}
})
}
},
//
moveHandle(index, type, row) {
if (type === 1) {
this.tableData[index].od = row
} else {
this.tableData[index].os = row
}
},
//
async saveAfter() {
const params = {
flag: 3, // 1234
jsonText: JSON.stringify(this.tableData),
name: '后段检查',
patientId: this.patientId,
platform: 1
}
let url = ''
if (this.collectId) {
url = '/case/update'
params.id = this.collectId
} else {
url = '/case/save'
}
const { data: res } = await this.$http.post(url, params)
if (res.code === 0) {
this.$message.success('保存成功')
await this.getforeList('3')
} else {
this.$message.error(res.msg)
}
},
handSaveBtn() {
if (this.addType === 1) {
this.handleSaveTree()
} else {
this.handleSaveCase()
}
},
//
addTree(item, event) {
this.title = '新增子级'
this.addType = 1
this.form.name = ''
this.type = event.type
this.parentId = event.id
this.dialogFormVisible = true
},
// -
async handleSaveTree() {
const params = {
doctorId: this.doctorId,
name: this.form.name,
flag: 1, // 1,2
type: this.type,
parentId: this.parentId,
platform: 1
}
const { data: res } = await this.$http.post('/treetag/addTree', params)
if (res.code === 0) {
this.dialogFormVisible = false
this.updataList()
this.$message.success('保存成功')
} else {
this.$message.error(res.msg)
}
},
//
handleRecord() {
//
removeTree(item) {
this.type = item.type
this.deleteId = item.id
this.$confirm('确定删除该节点?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.handleRemove()
}).catch(() => {
})
},
async handleRemove() {
const params = {
id: this.deleteId
}
const { data: res } = await this.$http.post('/treetag/deleteTree', params)
if (res.code === 0) {
this.$message.success('删除成功')
this.updataList()
} else {
this.$message.error(res.msg)
}
},
//
updataList() {
this.queryTree(this.type).then((res) => {
this.tableData.forEach(item => {
if (item.type === this.type) {
const sort = item.sort
item.sort = ''
this.$nextTick(() => {
item.sort = sort
})
item.data = res
}
})
})
},
objectSpanMethod({ row, column, rowIndex, columnIndex }) {
if (columnIndex === 0) {
if (rowIndex % 2 === 0) {
return {
rowspan: 2,
colspan: 1
queryTree(type) {
// 47.110.224.240:8036
// 192.168.4.24:8036
return new Promise((resolve, reject) => {
axios.defaults.headers.common['token'] = Cookies.get('xa-token') || ''
axios.get('http://192.168.4.83:8036/xiangan-crf/treetag/findTree', {
params: {
doctorId: this.doctorId,
type: type,
platform: 1
}
} else {
return {
rowspan: 0,
colspan: 0
}).then(res => {
if (res.data.code === 0) {
const data = res.data
resolve(data.data)
}
})
.catch(error => {
reject(error)
})
})
},
//
templateData(data, node) {
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('请勾选模板内容!')
this.form.name = ''
this.queryTemplate()
this.templateFlag = true
},
//
templateNodeClick(node) {
this.treeId = node.id
},
//
async saveTreeTemplete() {
const params = {
caseJson: JSON.stringify(this.multipleSelection),
doctorId: this.doctorId,
name: this.form.name,
type: 3, // 2 3
treeId: this.treeId
}
const { data: res } = await this.$http.post('/treetemplate/addTreeCase', params)
if (res.code === 0) {
this.templateFlag = false
this.queryTreeCase()
this.$message.success('保存成功')
} else {
this.$message.error(res.msg)
}
},
//
append(type, data) {
this.addType = 2
this.form.name = ''
type === 1 ? this.title = '新增父级' : this.title = '新增子级'
type === 1 ? this.parentId = 0 : this.parentId = data.id
this.dialogFormVisible = true
console.log(this.title)
},
//
async handleSaveCase() {
const params = {
doctorId: this.doctorId,
name: this.form.name,
weight: this.weight,
parentId: this.parentId,
platform: 1
}
const { data: res } = await this.$http.post('/treetemplate/addTree', params)
if (res.code === 0) {
this.dialogFormVisible = false
this.queryTreeCase()
this.$message.success('保存成功')
} else {
this.$message.error(res.msg)
}
},
// /
remove(node, data) {
this.deleteId = data.id
let url = ''
if (data.type) {
//
url = '/treetemplate/deleteTreeCase'
} else {
//
url = '/treetemplate/deleteTree'
}
this.$confirm('确定删除该节点?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.removeTemplate(url)
}).catch(() => {
})
},
// /
async removeTemplate(url) {
const params = {
id: this.deleteId
}
const { data: res } = await this.$http.post(url, params)
if (res.code === 0) {
this.$message.success('删除成功')
this.queryTreeCase()
this.getforeList('2')
} else {
this.$message.error(res.msg)
}
},
//
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 icon='el-icon-plus' style='font-size: 12px;color: black' type='text' on-click={ () => this.append(2, data) }>
</el-button>
<el-button icon='el-icon-delete' style='font-size: 12px;color: black' type='text' on-click={ () => this.remove(node, data) }>
</el-button>
</span>
</span>)
},
//
async queryTemplate() {
const { data: res } = await this.$http.get('/treetemplate/findTree', {
params: {
platform: 1,
doctorId: this.doctorId
}
})
if (res.code === 0) {
this.treeTemplate = res.data
} else {
this.$message.error(res.msg)
}
},
// data Node
handleMoveCopyNodeClick(data) {
this.currentNodeKey = data.id
// 使child
fn(data) {
data.forEach((item, i) => {
if (item.list && item.list.length) {
item.child = item.child.concat(item.list)
//
}
if (item.child) {
this.fn(item.child)
}
})
return data
},
//
async queryTreeCase() {
const { data: res } = await this.$http.get('/treetemplate/findTreeCase', {
params: {
type: 3, // 2 3
platform: 1,
doctorId: this.doctorId
}
})
if (res.code === 0) {
this.treeCaseList = this.fn(res.data)
console.log(this.treeCaseList)
} else {
this.$message.error(res.msg)
}
}
}
}
</script>
<style lang="scss" scoped>
.foreBox{
.afterBox{
width: 100%;
height: 100%;
padding: 16px;
//padding: 16px;
box-sizing: border-box;
overflow-y: auto;
position: relative;
.btnBox{
position: fixed;
right: 84px;
text-align: right;
margin-right: 16px;
background-color: white;
z-index: 999;
}
.moveIcon{
position: absolute;
left: calc(50% + 120px);
top: 40px;
z-index: 9;
}
}
</style>
<style lang="scss">
.foreBox{
.afterBox{
.el-form-item__content{
text-align: left;
}
}
</style>

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

@ -0,0 +1,704 @@
<template>
<div id="operation-record" style=" background: #fff; padding: 10px 20px 50px 20px;page-break-after:always">
<div class="btnBox">
<el-button v-print="'#threeFunc'" size="small">打印</el-button>
<el-button type="primary" size="small" @click="handleSaveTable">保存</el-button>
<el-button type="danger" size="small" @click="handleDelete">删除</el-button>
</div>
<div id="threeFunc" style="width: 840px;padding-right: 8px">
<p style="color:#000000;font-size:32px;margin:0 0 30px 0;text-align:center;">
青少年儿童屈光发育档案
</p>
<div class="operation-record-table">
<el-table :data="headData" :span-method="headSpanMethod" border style="width: 820px; margin-top: 20px">
<el-table-column label="" width="" align="center" :resizable="false">
<template slot-scope="scope">
<span>{{ scope.row.name }}</span>
</template>
</el-table-column>
<el-table-column label="" width="" :resizable="false" prop="type">
<template slot-scope="scope">
<div v-if="scope.row.name == '姓名'">
<div class="width-100 center">
<el-input v-model="scope.row.patientName" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '身高'">
<div class="width-100 center">
<el-input v-model="scope.row.height" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '是否戴镜'">
<div class="width-100 center">
<el-input v-model="scope.row.isMirror" placeholder="" />
</div>
</div>
</template>
</el-table-column>
<el-table-column label="" width="" :resizable="false">
<template slot-scope="scope">
<div v-if="scope.row.name == '姓名'">
<div class="width-100 center">
性别
</div>
</div>
<div v-if="scope.row.name == '身高'">
<div class="width-100 center">
体重
</div>
</div>
<div v-if="scope.row.name == '是否戴镜'">
<div class="width-100 center">
戴镜习惯
</div>
</div>
</template>
</el-table-column>
<el-table-column label="" width="" :resizable="false">
<template slot-scope="scope">
<div v-if="scope.row.name == '姓名'">
<div class="width-100 center">
<el-input v-model="scope.row.sex" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '身高'">
<div class="width-100 center">
<el-input v-model="scope.row.weight" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '是否戴镜'">
<div class="width-100 center">
<el-input v-model="scope.row.mirrorHabit" placeholder="" />
</div>
</div>
</template>
</el-table-column>
<el-table-column label="" width="" :resizable="false">
<template slot-scope="scope">
<div v-if="scope.row.name == '姓名'">
<div class="width-100 center">
出生日期
</div>
</div>
<div v-if="scope.row.name == '身高'">
<div class="width-100 center">
何时发现视力下降
</div>
</div>
</template>
</el-table-column>
<el-table-column label="" width="" :resizable="false">
<template slot-scope="scope">
<div v-if="scope.row.name == '姓名'">
<div class="width-100 center">
<el-input v-model="scope.row.birthday" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '身高'">
<div class="width-100 center">
<el-input v-model="scope.row.time" placeholder="" />
</div>
</div>
</template>
</el-table-column>
</el-table>
<el-table :data="tableData" :span-method="objectSpanMethod" border style="width: 820px">
<el-table-column label="" width="" align="center" :resizable="false">
<template slot-scope="scope">
<span>{{ scope.row.name }}</span>
</template>
</el-table-column>
<el-table-column label="" width="" :resizable="false" prop="type">
<template slot-scope="scope">
<div v-if="scope.row.name == '戴镜类型'">
<div class="width-180 center">
<el-checkbox-group v-model="scope.row.mirrorType">
<el-checkbox label="框架" />
<el-checkbox label="OK镜" />
<el-checkbox label="RGP" />
<el-checkbox label="软镜" />
</el-checkbox-group>
</div>
</div>
<div v-if="scope.row.name == '旧镜参数'">
<div class="width-120 center">
OD:<el-input v-model="scope.row.od" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '父母是否近视'">
<div class="width-180 center">
<el-checkbox-group v-model="scope.row.shortsighte">
<el-checkbox label="父亲" />
<el-checkbox label="母亲" />
<el-checkbox label="父亲和母亲" />
<el-checkbox label="均无" />
</el-checkbox-group>
</div>
</div>
<div v-if="scope.row.name == '户外活动时间'">
<div class="width-180 center">
<el-checkbox-group v-model="scope.row.outTime">
<el-checkbox label="<1h" />
<el-checkbox label="1h-2h" />
<el-checkbox label=">2h" />
</el-checkbox-group>
</div>
</div>
<div v-if="scope.row.name == '备注'">
<div class="width-180 center">
<el-input v-model="scope.row.note" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '项目'">
<div class="width-180 center">
OD
</div>
</div>
<div v-if="scope.row.name == '裸眼/旧镜视力'">
<div class="width-180 center">
<el-input v-model="scope.row.od" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '是否散瞳'">
<div class="width-180 center">
<el-checkbox-group v-model="scope.row.mydriasis">
<el-checkbox label="未散瞳" />
<el-checkbox label="美多丽" />
<el-checkbox label="阿托品" />
<el-checkbox label="其他" />
</el-checkbox-group>
</div>
</div>
<div v-if="scope.row.name == '主觉验光'">
<div class="width-180 center">
<el-input v-model="scope.row.od" placeholder="" style="width: 100px" />
</div>
</div>
<div v-if="scope.row.name == '眼位'">
<div class="width-180 center">
<el-input v-model="scope.row.od" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '眼压/mmHg'">
<div class="width-180 center">
<el-input v-model="scope.row.od" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '角膜曲率/D'">
<div class="width-180 center">
<el-input v-model="scope.row.od" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '角膜厚度/μm'">
<div class="width-180 center">
<el-input v-model="scope.row.od" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '处方'">
<div class="width-180 center">
<el-input v-model="scope.row.od" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '建议'">
<div class="width-180 center">
<el-checkbox-group v-model="scope.row.suggest">
<el-checkbox label="框架" />
<el-checkbox label="OK镜" />
<el-checkbox label="RGP" />
<el-checkbox label="软镜" />
<el-checkbox label="其他" />
</el-checkbox-group>
</div>
</div>
<div v-if="scope.row.name == '眼轴/眼底照/地形图'">
<div class="width-180 center">
<el-input v-model="scope.row.type" placeholder="" />
</div>
</div>
</template>
</el-table-column>
<el-table-column label="" width="" :resizable="false">
<template slot-scope="scope">
<div v-if="scope.row.name == '旧镜参数'">
<div class="width-120 center">
OS:<el-input v-model="scope.row.os" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '项目'">
<div class="width-180 center">
OS
</div>
</div>
<div v-if="scope.row.name == '裸眼/旧镜视力'">
<div class="width-180 center">
<el-input v-model="scope.row.os" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '主觉验光'">
<div class="width-180 center">
<el-input v-model="scope.row.os" placeholder="" style="width: 100px" />
</div>
</div>
<div v-if="scope.row.name == '眼位'">
<div class="width-180 center">
<el-input v-model="scope.row.os" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '眼压/mmHg'">
<div class="width-180 center">
<el-input v-model="scope.row.os" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '角膜曲率/D'">
<div class="width-180 center">
<el-input v-model="scope.row.os" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '角膜厚度/μm'">
<div class="width-180 center">
<el-input v-model="scope.row.os" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '处方'">
<div class="width-180 center">
<el-input v-model="scope.row.os" placeholder="" />
</div>
</div>
</template>
</el-table-column>
</el-table>
</div>
</div>
</div>
</template>
<script>
export default {
props: {
archiveCaseCRFItem: {
type: Object,
default: () => { }
},
formContent: {
type: Object,
default: () => { }
}
},
data() {
return {
dataForm: {
yghcValue: '',
operationListValueOD: []
},
headData: [
{
name: '个人基础信息',
type: ''
},
{
name: '姓名',
patientName: '',
sex: '',
birthday: '',
type: ''
}, {
name: '身高',
height: '',
weight: '',
time: ''
}, {
name: '是否戴镜',
isMirror: '',
mirrorHabit: '',
type: ''
}],
tableData: [
{
name: '戴镜类型',
mirrorType: []
},
{
name: '旧镜参数',
od: '',
os: '',
type: ''
}, {
name: '父母是否近视',
shortsighte: []
}, {
name: '户外活动时间',
outTime: [],
type: ''
}, {
name: '备注',
note: ''
}, {
name: '综合检查信息',
type: '1'
}, {
name: '项目'
}, {
name: '裸眼/旧镜视力',
od: '',
os: ''
}, {
name: '是否散瞳',
mydriasis: []
}, {
name: '主觉验光',
od: '',
os: '',
vaod: '',
vaos: '',
type: '2'
}, {
name: '眼位',
od: '',
os: '',
type: ''
}, {
name: '眼压/mmHg',
od: '',
os: ''
}, {
name: '角膜曲率/D',
od: '',
os: ''
}, {
name: '角膜厚度/μm',
od: '',
os: ''
}, {
name: '处方',
od: '',
os: ''
}, {
name: '建议',
suggest: []
}, {
name: '眼轴/眼底照/地形图',
type: ''
}]
}
},
computed: {
operationRecord: {
get() {
return this.$store.getters.operationRecord
}
}
},
watch: {
operationRecord: {
handler(value) {
console.log(value)
},
deep: true,
immediate: true
}
},
created() {
// this.printPage('threeFunc')
},
methods: {
setData() {
this.headData = this.formContent.a
this.tableData = this.formContent.b
},
reSet() {
this.headData = [
{
name: '个人基础信息',
type: ''
},
{
name: '姓名',
patientName: '',
sex: '',
birthday: '',
type: ''
}, {
name: '身高',
height: '',
weight: '',
time: ''
}, {
name: '是否戴镜',
isMirror: '',
mirrorHabit: '',
type: ''
}]
this.tableData = [
{
name: '戴镜类型',
mirrorType: []
},
{
name: '旧镜参数',
od: '',
os: '',
type: ''
}, {
name: '父母是否近视',
shortsighte: []
}, {
name: '户外活动时间',
outTime: [],
type: ''
}, {
name: '备注',
note: ''
}, {
name: '综合检查信息',
type: '1'
}, {
name: '项目'
}, {
name: '裸眼/旧镜视力',
od: '',
os: ''
}, {
name: '是否散瞳',
mydriasis: []
}, {
name: '主觉验光',
od: '',
os: '',
vaod: '',
vaos: '',
type: '2'
}, {
name: '眼位',
od: '',
os: '',
type: ''
}, {
name: '眼压/mmHg',
od: '',
os: ''
}, {
name: '角膜曲率/D',
od: '',
os: ''
}, {
name: '角膜厚度/μm',
od: '',
os: ''
}, {
name: '处方',
od: '',
os: ''
}, {
name: '建议',
suggest: []
}, {
name: '眼轴/眼底照/地形图',
type: ''
}]
},
handleDelete() {
this.$emit('del')
},
//
singHandle(text) {
const value = {
text: text,
pageName: 'operationRecord'
}
this.$store.commit('beginSign', value)
},
objectSpanMethod({ row, column, rowIndex, columnIndex }) {
if (columnIndex === 0) {
if (rowIndex === 5) {
return {
rowspan: 1,
colspan: 3
}
}
} else if (columnIndex === 1) {
if (rowIndex === 0 || rowIndex === 2 || rowIndex === 3 || rowIndex === 4 || rowIndex === 8 || rowIndex === 15 || rowIndex === 16) {
return {
rowspan: 1,
colspan: 2
}
} else if (rowIndex === 5) {
return {
rowspan: 0,
colspan: 0
}
}
} else if (columnIndex === 2) {
if (rowIndex === 0 || rowIndex === 2 || rowIndex === 3 || rowIndex === 4 || rowIndex === 5 || rowIndex === 8 || rowIndex === 15 || rowIndex === 16) {
return {
rowspan: 0,
colspan: 0
}
}
}
},
headSpanMethod({ row, column, rowIndex, columnIndex }) {
if (columnIndex === 0) {
if (rowIndex === 0) {
return {
rowspan: 1,
colspan: 6
}
}
} else if (columnIndex === 1 || columnIndex === 3) {
if (rowIndex === 3) {
return {
rowspan: 1,
colspan: 2
}
}
} else if (columnIndex === 1 || columnIndex === 2 || columnIndex === 3 || columnIndex === 4 || columnIndex === 5) {
if (rowIndex === 0) {
return {
rowspan: 0,
colspan: 0
}
}
}
},
handlePrint() {
this.printPage('threeFunc')
},
handleSaveTable() {
const data = {
a: this.headData,
b: this.tableData
}
this.$emit('save', data)
}
}
}
</script>
<style lang="scss">
#operation-record {
//height: 93%;
// overflow: auto;
.btnBox{
display: flex;
justify-content: flex-end;
}
.el-table--border{
border-right: 1px solid #EBEEF5;
}
.operation-record-table {
//width: 100%;
width: 840px !important;
padding-right: 8px;
.operation-text {
font-weight: 700;
}
.text {
font-weight: 700;
}
.sign {
cursor: pointer;
color: #46a1ff;
font-weight: 400;
}
}
.center {
text-align: center;
}
.left {
text-align: left;
}
.width-50 {
.el-input {
width: 50px;
}
}
.width-70 {
.el-input {
width: 70px;
}
}
.width-100 {
.el-input {
width: 100px;
}
}
.width-120 {
.el-input {
width: 120px;
}
}
.width-180 {
.el-input {
width: 180px;
}
}
.el-input__inner {
border: none;
height: 26px !important;
line-height: 26px !important;
text-align: center;
}
.el-input__inner {
border-bottom: 1px solid #ccc;
border-radius: 0;
padding: 0;
}
.el-input__prefix {
display: none;
}
//.el-date-editor.el-input,
//.el-date-editor.el-input__inner {
// width: 140px;
//}
//.el-input__suffix {
// top: -7px;
//}
//.el-checkbox__input.is-checked + .el-checkbox__label {
// color: #606266;
//}
//.el-checkbox__input.is-checked .el-checkbox__inner,
//.el-checkbox__input.is-indeterminate .el-checkbox__inner {
// background: #767676;
// border-color: #767676;
//}
//.el-checkbox__inner:hover,
//.el-checkbox__inner {
// border-color: #767676;
//}
//.el-radio__input.is-checked + .el-radio__label {
// color: #606266;
//}
//.el-radio__input.is-checked .el-radio__inner {
// background: #767676;
// border-color: #767676;
//}
//.el-radio {
// margin-right: 8px;
// display: block;
//}
//.el-radio__inner {
// border: 1px solid #767676 !important;
//}
//.el-radio__inner:hover {
// border-color: #767676;
//}
.el-table--enable-row-hover .el-table__body tr:hover>td.el-table__cell {
background: none !important;
}
.has-gutter {
display: none;
.cell {
font-weight: 700;
}
.el-table__cell {
background: #ced4d9;
}
}
.el-table__header-wrapper{
display: none;
}
}
</style>

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

@ -0,0 +1,660 @@
<template>
<div id="operation-record" style=" background: #fff; padding: 10px 20px 50px 20px;page-break-after:always">
<div class="btnBox">
<el-button v-print="'#eyesFunc'" size="small">打印</el-button>
<el-button type="primary" size="small" @click="handleSaveTable">保存</el-button>
<el-button type="danger" size="small" @click="handleDelete">删除</el-button>
</div>
<div id="eyesFunc" style="width: 840px;padding-right: 8px">
<p style="color:#000000;font-size:32px;margin:0 0 30px 0;text-align:center;">
双眼视功能检查报告单
</p>
<div style="display: flex;justify-content: space-around">
<span>登记号<el-input v-model="dataForm.number" style="width: 120px" size="small" clearable placeholder="" /></span>
<span>姓名<el-input v-model="dataForm.name" style="width: 120px" size="small" clearable placeholder="" /></span>
<span>性别<el-input v-model="dataForm.sex" style="width: 120px" size="small" clearable placeholder="" /></span>
<span>年龄<el-input v-model="dataForm.age" style="width: 120px" size="small" clearable placeholder="" /></span>
</div>
<div class="operation-record-table">
<el-table :data="tableData" :span-method="objectSpanMethod" border style="width: 100%; margin-top: 20px">
<el-table-column label="" width="" align="center" :resizable="false">
<template slot-scope="scope">
<div v-if="scope.row.name == 1">
<div class="width-180 center">
OS<el-input v-model="scope.row.os" placeholder="" />
</div>
</div>
<div v-else-if="scope.row.name == 'FV'">
<div class="width-180 center">
远BO<el-input v-model="scope.row.a" placeholder="" />
</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" />
</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="" />
</div>
<div class="width-180" style="text-align: left">
医师<el-input v-model="scope.row.b" placeholder="" />
</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>
</template>
</el-table-column>
<el-table-column label="" width="" :resizable="false" prop="type">
<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="" />
</div>
</div>
<div v-if="scope.row.name == '屈光状态'">
<div class="width-180 center">
OD<el-input v-model="scope.row.od" placeholder="" />
</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>
</div>
</div>
<div v-if="scope.row.name == '集合近点(NPC)'">
<div class="width-180 center">
破裂点<el-input v-model="scope.row.a" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == 'Worth-4-dot'">
<div class="width-180 center">
<el-input v-model="scope.row.a" placeholder="" />
@D(
<el-input v-model="scope.row.b" placeholder="" />
)
</div>
</div>
<div v-if="scope.row.name == '立体视(stereo)'">
<div class="width-180 center">
RDD()<el-input v-model="scope.row.a" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '眼位'">
<div class="width-180 center">
<el-input v-model="scope.row.a" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '梯度性AC/A'">
<div class="width-180 center">
<el-input v-model="scope.row.a" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '融像性聚散(FV)'">
<div class="width-180 center">
远BI<el-input v-model="scope.row.a" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == 'FV'">
<div class="width-180 center">
近BO<el-input v-model="scope.row.b" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '相对调节(RA)'">
<div class="width-180 center">
NRA<el-input v-model="scope.row.a" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '调节幅度(AMP)'">
<div class="width-180 center">
<div>
OD<el-input v-model="scope.row.a" placeholder="" />
</div>
OS<el-input v-model="scope.row.b" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '调节灵活度(AF)'">
<div class="width-180 center">
<div>
OD<el-input v-model="scope.row.a" placeholder="" />
</div>
OS<el-input v-model="scope.row.b" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '调节反应(FCC)'">
<div class="width-180 center">
<div>
OD<el-input v-model="scope.row.a" placeholder="" />
</div>
OS<el-input v-model="scope.row.b" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '初步诊断'">
<div class="width-180">
<div style="margin-bottom: 8px">
<el-checkbox v-model="scope.row.value">正常</el-checkbox>
</div>
<div style="display: flex">
<p style="width: 220px;">聚散功能异常</p>
<el-checkbox-group v-model="scope.row.a">
<el-checkbox label="集合不足" />
<el-checkbox label="集合过度" />
<el-checkbox label="散开不足" />
<el-checkbox label="散开过度" />
<el-checkbox label="内隐科" />
<el-checkbox label="外隐科" />
<el-checkbox label="假性集合不足" />
<el-checkbox label="融像性聚散功能异常" />
</el-checkbox-group>
</div>
<div style="display: flex">
<p style="width: 140px;">调节功能异常</p>
<el-checkbox-group v-model="scope.row.b">
<el-checkbox label="调节灵敏度下降" />
<el-checkbox label="调节不能持久" />
<el-checkbox label="调节不足" />
<el-checkbox label="调节过度" />
<el-checkbox label="调节麻痹" />
</el-checkbox-group>
</div>
<div style="display: flex">
<span>斜视</span>
<el-checkbox-group v-model="scope.row.c">
<el-checkbox label="内斜视" />
<el-checkbox label="外斜视" />
<el-checkbox label="间歇性外斜视" />
<el-checkbox label="垂直斜" />
</el-checkbox-group>
</div>
</div>
</div>
<!-- &lt;!&ndash; 签字 &ndash;&gt;-->
<!-- <div v-if="scope.row" class="sign center">-->
<!-- &lt;!&ndash; <span v-if="!operationRecord.doctorSignImg" class="sign" @click="singHandle('doctorSignImg')">点击签字</span>&ndash;&gt;-->
<!-- &lt;!&ndash; <img v-if="operationRecord.doctorSignImg" :src="operationRecord.doctorSignImg" alt="" width="90px" @click="singHandle('doctorSignImg')">&ndash;&gt;-->
<!-- </div>-->
</template>
</el-table-column>
<el-table-column label="" width="" :resizable="false">
<template slot-scope="scope">
<div v-if="scope.row.name == '屈光状态'">
<div class="width-180 center">
VA<el-input v-model="scope.row.osVa" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '交替遮盖试验(CT)'">
<div class="width-180 center">
眼球运动<el-input v-model="scope.row.c" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '集合近点(NPC)'">
<div class="width-180 center">
恢复点<el-input v-model="scope.row.b" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '立体视(stereo)'">
<div class="width-180 center">
TNO()<el-input v-model="scope.row.b" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '眼位'">
<div class="width-180 center">
<el-input v-model="scope.row.b" placeholder="" />
</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="" />
</div>
</div>
<div v-if="scope.row.name == '融像性聚散(FV)'">
<div class="width-180 center">
近BI<el-input v-model="scope.row.b" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '相对调节(RA)'">
<div class="width-180 center">
PRA<el-input v-model="scope.row.b" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '调节幅度(AMP)'">
<div class="width-180 center">
OU<el-input v-model="scope.row.c" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '调节灵活度(AF)'">
<div class="width-180 center">
OU<el-input v-model="scope.row.c" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '调节反应(FCC)'">
<div class="width-180 center">
OU<el-input v-model="scope.row.c" placeholder="" />
</div>
</div>
<!-- &lt;!&ndash; 签字 &ndash;&gt;-->
<!-- <div v-if="scope.row" class="sign center">-->
<!-- &lt;!&ndash; <span v-if="!operationRecord.doctorSignImg" class="sign" @click="singHandle('doctorSignImg')">点击签字</span>&ndash;&gt;-->
<!-- &lt;!&ndash; <img v-if="operationRecord.doctorSignImg" :src="operationRecord.doctorSignImg" alt="" width="90px" @click="singHandle('doctorSignImg')">&ndash;&gt;-->
<!-- </div>-->
</template>
</el-table-column>
<!-- <el-table-column label="手术记录" :resizable="false">-->
<!-- <template slot-scope="scope">-->
<!-- <span v-if="scope.row.name !=='手术日期/主刀签字'">-->
<!--&lt;!&ndash; <span v-if="!operationRecord.nurseSignImgOne" class="sign" @click="singHandle('nurseSignImgOne')">点击签字</span>&ndash;&gt;-->
<!--&lt;!&ndash; <img v-if="operationRecord.nurseSignImgOne" :src="operationRecord.nurseSignImgOne" alt="" width="90px" @click="singHandle('nurseSignImgOne')">&ndash;&gt;-->
<!-- </span>-->
<!-- </template>-->
<!-- </el-table-column>-->
</el-table>
</div>
</div>
</div>
</template>
<script>
export default {
props: {
archiveCaseCRFItem: {
type: Object,
default: () => { }
},
formContent: {
type: Object,
default: () => { }
}
},
data() {
return {
dataForm: {
number: '',
name: '',
sex: '',
age: ''
},
tableData: [
{
name: '屈光状态',
osVa: '',
od: '',
type: ''
}, {
name: '1',
odVa: '',
os: '',
type: ''
}, {
name: '交替遮盖试验(CT)',
a: '',
b: '',
type: ''
}, {
name: '集合近点(NPC)',
a: '',
b: '',
type: ''
}, {
name: 'Worth-4-dot',
a: '',
b: '',
type: ''
}, {
name: '立体视(stereo)',
a: '',
b: ''
}, {
name: '眼位',
a: '',
b: ''
}, {
name: '梯度性AC/A',
a: '',
b: ''
}, {
name: '融像性聚散(FV)',
a: '',
b: ''
}, {
name: 'FV',
a: '',
b: '',
type: ''
}, {
name: '相对调节(RA)',
a: '',
b: '',
}, {
name: '调节幅度(AMP)',
a: '',
b: '',
c: ''
}, {
name: '调节灵活度(AF)',
a: '',
b: '',
c: ''
}, {
name: '调节反应(FCC)',
a: '',
b: '',
c: ''
}, {
name: '初步诊断',
value: '',
a: [],
b: [],
c: []
}, {
name: '建议',
value: ''
}, {
name: '签名',
a: '',
b: '',
c: ''
}]
}
},
computed: {
operationRecord: {
get() {
return this.$store.getters.operationRecord
}
}
},
watch: {
operationRecord: {
handler(value) {
console.log(value)
},
deep: true,
immediate: true
}
},
created() {
},
methods: {
setData() {
this.dataForm = this.formContent.a
this.tableData = this.formContent.b
console.log(this.tableData)
},
reSet() {
this.dataForm = {
number: '',
name: '',
sex: '',
age: '',
file: '',
fileNUm: ''
}
this.tableData = [
{
name: '屈光状态',
osVa: '',
od: '',
type: ''
}, {
name: '1',
odVa: '',
os: '',
type: ''
}, {
name: '交替遮盖试验(CT)',
a: '',
b: '',
type: ''
}, {
name: '集合近点(NPC)',
a: '',
b: '',
type: ''
}, {
name: 'Worth-4-dot',
a: '',
b: '',
type: ''
}, {
name: '立体视(stereo)',
a: '',
b: ''
}, {
name: '眼位',
a: '',
b: ''
}, {
name: '梯度性AC/A',
a: '',
b: ''
}, {
name: '融像性聚散(FV)',
a: '',
b: ''
}, {
name: 'FV',
a: '',
b: '',
type: ''
}, {
name: '相对调节(RA)',
a: '',
b: '',
}, {
name: '调节幅度(AMP)',
a: '',
b: '',
c: ''
}, {
name: '调节灵活度(AF)',
a: '',
b: '',
c: ''
}, {
name: '调节反应(FCC)',
a: '',
b: '',
c: ''
}, {
name: '初步诊断',
value: '',
a: [],
b: [],
c: []
}, {
name: '建议',
value: ''
}, {
name: '签名',
a: '',
b: '',
c: ''
}]
},
handleSaveTable() {
const data = {
a: this.dataForm,
b: this.tableData
}
this.$emit('save', data)
},
handleDelete() {
this.$emit('del')
},
//
singHandle(text) {
const value = {
text: text,
pageName: 'operationRecord'
}
this.$store.commit('beginSign', value)
},
objectSpanMethod({ row, column, rowIndex, columnIndex }) {
if (columnIndex === 0) {
if (rowIndex === 0 || rowIndex === 8) {
return {
rowspan: 2,
colspan: 1
}
} else if (rowIndex === 15 || rowIndex === 16) {
return {
rowspan: 1,
colspan: 3
}
}
} else if (rowIndex === 4) {
if (columnIndex === 1) {
return {
rowspan: 1,
colspan: 2
}
}
} else if (rowIndex === 14) {
if (columnIndex === 1) {
return {
rowspan: 1,
colspan: 2
}
}
}
}
}
}
</script>
<style lang="scss">
#operation-record {
height: 100%;
overflow: auto;
.operation-record-table {
width: 100%;
.operation-text {
font-weight: 700;
}
.text {
font-weight: 700;
}
.sign {
cursor: pointer;
color: #46a1ff;
font-weight: 400;
}
}
.center {
text-align: center;
}
.left {
text-align: left;
}
.width-50 {
.el-input {
width: 50px;
}
}
.width-70 {
.el-input {
width: 70px;
}
}
.width-100 {
.el-input {
width: 100px;
}
}
.width-120 {
.el-input {
width: 120px;
}
}
.width-180 {
.el-input {
width: 180px;
}
}
.el-input__inner {
border: none;
height: 26px !important;
line-height: 26px !important;
text-align: center;
}
.el-input__inner {
border-bottom: 1px solid #ccc;
border-radius: 0;
padding: 0;
}
.el-input__prefix {
display: none;
}
.el-date-editor.el-input,
.el-date-editor.el-input__inner {
width: 140px;
}
.el-input__suffix {
top: -7px;
}
.el-checkbox__input.is-checked + .el-checkbox__label {
color: #606266;
}
.el-checkbox__input.is-checked .el-checkbox__inner,
.el-checkbox__input.is-indeterminate .el-checkbox__inner {
background: #767676;
border-color: #767676;
}
.el-checkbox__inner:hover,
.el-checkbox__inner {
border-color: #767676;
}
.el-radio__input.is-checked + .el-radio__label {
color: #606266;
}
.el-radio__input.is-checked .el-radio__inner {
background: #767676;
border-color: #767676;
}
.el-radio {
margin-right: 8px;
display: block;
}
.el-radio__inner {
border: 1px solid #767676 !important;
}
.el-radio__inner:hover {
border-color: #767676;
}
.el-table--enable-row-hover .el-table__body tr:hover>td.el-table__cell {
background: none !important;
}
.has-gutter {
display: none;
.cell {
font-weight: 700;
}
.el-table__cell {
background: #ced4d9;
}
}
// .el-table--border .el-table__cell, .el-table__body-wrapper .el-table--border.is-scrolling-left~.el-table__fixed {
// border-right: 1px solid #808080;
// }
// .el-table td.el-table__cell, .el-table th.el-table__cell.is-leaf {
// border-bottom: 1px solid #808080 !important;
// }
// .el-table--border, .el-table--group {
// border: 1px solid #808080;
// }
// .el-table--border {
// border-bottom: 0;
// }
}
</style>

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

@ -0,0 +1,711 @@
<template>
<div id="operation-record" style=" background: #fff; padding: 10px 20px 50px 20px;page-break-after:always">
<div class="btnBox">
<el-button v-print="'#optomeFunc'" size="small">打印</el-button>
<el-button type="primary" size="small" @click="handleSaveTable">保存</el-button>
<el-button type="danger" size="small" @click="handleDelete">删除</el-button>
</div>
<div id="optomeFunc" style="width: 840px;padding-right: 8px">
<p style="color:#000000;font-size:32px;margin:0 0 30px 0;text-align:center;">
验光报告单
</p>
<div style="display: flex;justify-content: space-around">
<span>登记号<el-input v-model="dataForm.number" style="width: 80px" size="small" clearable placeholder="" /></span>
<span>姓名<el-input v-model="dataForm.name" style="width: 80px" size="small" clearable placeholder="" /></span>
<span>性别<el-input v-model="dataForm.sex" style="width: 60px" size="small" clearable placeholder="" /></span>
<span>年龄<el-input v-model="dataForm.age" style="width: 60px" size="small" clearable placeholder="" /></span>
<span>屈光发育档案<el-input v-model="dataForm.file" style="width: 60px" size="small" clearable placeholder="" /></span>
<span>档案号<el-input v-model="dataForm.fileNUm" style="width: 80px" size="small" clearable placeholder="" /></span>
</div>
<div class="operation-record-table">
<el-table :data="tableData" :span-method="objectSpanMethod" border style="width: 100%; margin-top: 20px">
<el-table-column label="" width="" align="center" :resizable="false">
<template slot-scope="scope">
<div v-if="scope.row.name == 1">
<div class="width-180 center">
瞳孔
</div>
</div>
<div v-else-if="scope.row.name == 2">
<div class="width-180 center">
检查方法
</div>
</div>
<div v-else-if="scope.row.name == 3">
<div class="width-180 center">
右眼
</div>
</div>
<div v-else-if="scope.row.name == 4">
<div class="width-180 center">
左眼
</div>
</div>
<div v-else-if="scope.row.name == 5">
<div class="width-180 center">
右眼
</div>
</div>
<div v-else-if="scope.row.name == 6">
<div class="width-180 center">
左眼
</div>
</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="" />
</div>
<div class="width-180" style="text-align: left">
医师<el-input v-model="scope.row.b" placeholder="" />
</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>
</template>
</el-table-column>
<el-table-column label="" width="" :resizable="false">
<template slot-scope="scope">
<div v-if="scope.row.name == '1'">
<div class="width-180">
<el-checkbox-group v-model="scope.row.pupil">
<el-checkbox label="正常瞳孔" />
<el-checkbox label="复方托吡卡胺" />
<el-checkbox label="美多丽" />
<el-checkbox label="赛飞杰" />
<el-checkbox label="阿托品" />
</el-checkbox-group>
</div>
</div>
<div v-if="scope.row.name == '2'">
<div class="width-180">
<el-checkbox-group v-model="scope.row.examine">
<el-checkbox label="检影" />
<el-checkbox label="综合" />
</el-checkbox-group>
</div>
</div>
<div v-if="scope.row.name == '3'">
<div class="width-100 center">
<el-input v-model="scope.row.a" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '4'">
<div class="width-100 center">
<el-input v-model="scope.row.a" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '5'">
<div class="width-100 center">
<el-input v-model="scope.row.a" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '6'">
<div class="width-100 center">
<el-input v-model="scope.row.a" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '基本信息'">
<div class="width-100 center">
裸眼视力
</div>
</div>
<div v-if="scope.row.name == '最终处方'">
<div class="width-100">
<el-checkbox-group v-model="scope.row.value">
<el-checkbox label="远用" />
<el-checkbox label="近用" />
</el-checkbox-group>
</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>
</div>
<div v-if="scope.row.name == '备注'">
<div class="width-180">
<el-input v-model="scope.row.value" placeholder="" />
</div>
</div>
</template>
</el-table-column>
<el-table-column label="" width="" :resizable="false">
<template slot-scope="scope">
<div v-if="scope.row.name == '基本信息'">
<div class="width-180 center">
右眼
</div>
</div>
<div v-if="scope.row.name == '验光检查'">
<div class="width-180 center">
球镜(DS)
</div>
</div>
<div v-if="scope.row.name == '3'">
<div class="width-100 center">
<el-input v-model="scope.row.b" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '4'">
<div class="width-100 center">
<el-input v-model="scope.row.b" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '5'">
<div class="width-100 center">
<el-input v-model="scope.row.b" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '6'">
<div class="width-100 center">
<el-input v-model="scope.row.b" placeholder="" />
</div>
</div>
<!-- <div v-if="scope.row.name == '最终处方'">-->
<!-- <div class="width-100 center">-->
<!-- 恢复点<el-input v-model="scope.row.value" placeholder="" />-->
<!-- </div>-->
<!-- </div>-->
<!-- <div v-if="scope.row.name == '立体视(stereo)'">-->
<!-- <div class="width-100 center">-->
<!-- TNO()<el-input v-model="scope.row.value" placeholder="" />-->
<!-- </div>-->
<!-- </div>-->
</template>
</el-table-column>
<el-table-column label="" width="" :resizable="false">
<template slot-scope="scope">
<div v-if="scope.row.name == '基本信息'">
<div class="width-100 center">
<el-input v-model="scope.row.od" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '验光检查'">
<div class="width-100 center">
柱镜(DC)
</div>
</div>
<div v-if="scope.row.name == '3'">
<div class="width-100 center">
<el-input v-model="scope.row.c" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '4'">
<div class="width-100 center">
<el-input v-model="scope.row.c" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '5'">
<div class="width-100 center">
<el-input v-model="scope.row.c" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '6'">
<div class="width-100 center">
<el-input v-model="scope.row.c" placeholder="" />
</div>
</div>
</template>
</el-table-column>
<el-table-column label="" width="" :resizable="false">
<template slot-scope="scope">
<div v-if="scope.row.name == '基本信息'">
<div class="width-180 center">
左眼
</div>
</div>
<div v-if="scope.row.name == '验光检查'">
<div class="width-180 center">
轴位(A)
</div>
</div>
<div v-if="scope.row.name == '3'">
<div class="width-100 center">
<el-input v-model="scope.row.d" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '4'">
<div class="width-100 center">
<el-input v-model="scope.row.d" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '5'">
<div class="width-100 center">
<el-input v-model="scope.row.d" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '6'">
<div class="width-100 center">
<el-input v-model="scope.row.d" placeholder="" />
</div>
</div>
</template>
</el-table-column>
<el-table-column label="" width="" :resizable="false">
<template slot-scope="scope">
<div v-if="scope.row.name == '基本信息'">
<div class="width-100 center">
<el-input v-model="scope.row.os" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '验光检查'">
<div class="width-180 center">
矫正视力(VA)
</div>
</div>
<div v-if="scope.row.name == '3'">
<div class="width-100 center">
<el-input v-model="scope.row.e" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '4'">
<div class="width-100 center">
<el-input v-model="scope.row.e" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '5'">
<div class="width-100 center">
<el-input v-model="scope.row.e" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '6'">
<div class="width-100 center">
<el-input v-model="scope.row.e" placeholder="" />
</div>
</div>
</template>
</el-table-column>
<el-table-column label="" width="" :resizable="false">
<template slot-scope="scope">
<div v-if="scope.row.name == '验光检查'">
<div class="width-180 center">
下加光(ADD)
</div>
</div>
</template>
</el-table-column>
</el-table>
<p style="text-align: left;margin-top: 3px">说明1.持本报告但配镜仅供参考 2.本报告单有效期3个月</p>
</div>
</div>
</div>
</template>
<script>
export default {
props: {
archiveCaseCRFItem: {
type: Object,
default: () => { }
},
formContent: {
type: Object,
default: () => { }
}
},
data() {
return {
dataForm: {
number: '',
name: '',
sex: '',
age: '',
file: '',
fileNUm: ''
},
tableData: [
{
name: '基本信息',
od: '',
os: '',
type: ''
}, {
name: '1',
pupil: [],
type: ''
}, {
name: '2',
examine: [],
type: ''
}, {
name: '验光检查',
type: ''
}, {
name: '3',
a: '',
b: '',
c: '',
d: '',
e: '',
type: ''
}, {
name: '4',
type: '',
a: '',
b: '',
c: '',
d: '',
e: ''
}, {
name: '最终处方',
value: [],
type: ''
}, {
name: '5',
type: '',
a: '',
b: '',
c: '',
d: '',
e: ''
}, {
name: '6',
type: '',
a: '',
b: '',
c: '',
d: '',
e: ''
}, {
name: '配镜建议',
suggest: [],
value: ''
}, {
name: '备注',
value: ''
}, {
name: '7',
a: '',
b: '',
c: ''
}]
}
},
computed: {
operationRecord: {
get() {
return this.$store.getters.operationRecord
}
}
},
watch: {
operationRecord: {
handler(value) {
console.log(value)
},
deep: true,
immediate: true
}
},
created() {
// this.queryData()
},
methods: {
setData() {
this.dataForm = this.formContent.a
this.tableData = this.formContent.b
console.log(this.tableData)
},
reSet() {
this.dataForm = {
number: '',
name: '',
sex: '',
age: '',
file: '',
fileNUm: ''
}
this.tableData = [
{
name: '基本信息',
od: '',
os: '',
type: ''
}, {
name: '1',
pupil: [],
type: ''
}, {
name: '2',
examine: [],
type: ''
}, {
name: '验光检查',
type: ''
}, {
name: '3',
a: '',
b: '',
c: '',
d: '',
e: '',
type: ''
}, {
name: '4',
type: '',
a: '',
b: '',
c: '',
d: '',
e: ''
}, {
name: '最终处方',
value: [],
type: ''
}, {
name: '5',
type: '',
a: '',
b: '',
c: '',
d: '',
e: ''
}, {
name: '6',
type: '',
a: '',
b: '',
c: '',
d: '',
e: ''
}, {
name: '配镜建议',
suggest: [],
value: ''
}, {
name: '备注',
value: ''
}, {
name: '7',
a: '',
b: '',
c: ''
}]
},
queryData() {
const ws = new WebSocket('ws://192.168.4.24:8036/xiangan-crf/websocket/0071')
ws.onopen = function() {
console.log('连接成功')
}
ws.onerror = function() {
console.log('连接失败')
}
// ws.send()
ws.onmessage = function(msg) {
const data = JSON.parse(JSON.stringify(msg.data))
// console.log(msg.data)
console.log(data)
}
},
handleSaveTable() {
const data = {
a: this.dataForm,
b: this.tableData
}
this.$emit('save', data)
},
handleDelete() {
this.$emit('del')
},
//
singHandle(text) {
const value = {
text: text,
pageName: 'operationRecord'
}
this.$store.commit('beginSign', value)
},
objectSpanMethod({ row, column, rowIndex, columnIndex }) {
if (columnIndex === 0) {
if (rowIndex === 0 || rowIndex === 3 || rowIndex === 6) {
// [0,0][0,3][0,6] 31
return {
rowspan: 3,
colspan: 1
}
}
// [0,11] 71
if (rowIndex === 11) {
return {
rowspan: 1,
colspan: 7
}
}
} else if (columnIndex === 1) {
if (rowIndex === 6 || rowIndex === 9 || rowIndex === 10) {
return {
rowspan: 1,
colspan: 6
}
}
if (rowIndex === 1 || rowIndex === 2) {
return {
rowspan: 1,
colspan: 6
}
}
} else if (columnIndex === 4) {
if (rowIndex === 0) {
return {
rowspan: 1,
colspan: 2
}
}
} else if (rowIndex === 6 || rowIndex === 9 || rowIndex === 10) {
if (columnIndex === 2 || columnIndex === 3 || columnIndex === 4 || columnIndex === 5 || columnIndex === 6) {
return {
rowspan: 0,
colspan: 0
}
}
}
}
}
}
</script>
<style lang="scss">
#operation-record {
//height: 93%;
// overflow: auto;
.operation-record-table {
width: 100%;
.operation-text {
font-weight: 700;
}
.text {
font-weight: 700;
}
.sign {
cursor: pointer;
color: #46a1ff;
font-weight: 400;
}
}
.center {
text-align: center;
}
.left {
text-align: left;
}
.width-50 {
.el-input {
width: 50px;
}
}
.width-70 {
.el-input {
width: 70px;
}
}
.width-100 {
.el-input {
width: 100px;
}
}
.width-120 {
.el-input {
width: 120px;
}
}
.width-180 {
.el-input {
width: 180px;
}
}
.el-input__inner {
border: none;
height: 26px !important;
line-height: 26px !important;
text-align: center;
}
.el-input__inner {
border-bottom: 1px solid #ccc;
border-radius: 0;
padding: 0;
}
.el-input__prefix {
display: none;
}
.el-date-editor.el-input,
.el-date-editor.el-input__inner {
width: 140px;
}
.el-input__suffix {
top: -7px;
}
.el-checkbox__input.is-checked + .el-checkbox__label {
color: #606266;
}
.el-checkbox__input.is-checked .el-checkbox__inner,
.el-checkbox__input.is-indeterminate .el-checkbox__inner {
background: #767676;
border-color: #767676;
}
.el-checkbox__inner:hover,
.el-checkbox__inner {
border-color: #767676;
}
.el-radio__input.is-checked + .el-radio__label {
color: #606266;
}
.el-radio__input.is-checked .el-radio__inner {
background: #767676;
border-color: #767676;
}
.el-radio {
margin-right: 8px;
display: block;
}
.el-radio__inner {
border: 1px solid #767676 !important;
}
.el-radio__inner:hover {
border-color: #767676;
}
.el-table--enable-row-hover .el-table__body tr:hover>td.el-table__cell {
background: none !important;
}
.has-gutter {
display: none;
.cell {
font-weight: 700;
}
.el-table__cell {
background: #ced4d9;
}
}
// .el-table--border .el-table__cell, .el-table__body-wrapper .el-table--border.is-scrolling-left~.el-table__fixed {
// border-right: 1px solid #808080;
// }
// .el-table td.el-table__cell, .el-table th.el-table__cell.is-leaf {
// border-bottom: 1px solid #808080 !important;
// }
// .el-table--border, .el-table--group {
// border: 1px solid #808080;
// }
// .el-table--border {
// border-bottom: 0;
// }
}
</style>

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

@ -0,0 +1,764 @@
<template>
<div id="operation-record" style=" background: #fff; padding: 10px 20px 50px 20px;page-break-after:always">
<div class="btnBox">
<el-button v-print="'#threeFunc'" size="small">打印</el-button>
<el-button type="primary" size="small" @click="handleSaveTable">保存</el-button>
<el-button type="danger" size="small" @click="handleDelete">删除</el-button>
</div>
<div id="threeFunc" style="width: 840px;padding-right: 8px">
<p style="color:#000000;font-size:32px;margin:0 0 30px 0;text-align:center;">
三级视功能检查报告单
</p>
<div style="display: flex;justify-content: space-around">
<span>登记号<el-input v-model="dataForm.num" style="width: 120px" size="small" clearable placeholder="" /></span>
<span>姓名<el-input v-model="dataForm.name" style="width: 120px" size="small" clearable placeholder="" /></span>
<span>性别<el-input v-model="dataForm.sex" style="width: 120px" size="small" clearable placeholder="" /></span>
<span>年龄<el-input v-model="dataForm.age" style="width: 120px" size="small" clearable placeholder="" /></span>
</div>
<div class="operation-record-table">
<el-table :data="tableData" :span-method="objectSpanMethod" border style="width: 820px; margin-top: 20px">
<el-table-column label="" width="" align="center" :resizable="false">
<template slot-scope="scope">
<div v-if="scope.row.name === 'ODOS'" style="position: relative;height: 180px">
<div style="display: flex">
<p style="width: 50%">OD</p>
<p style="width: 50%">OS</p>
</div>
<div class="rowLine"></div>
<div class="cloLine"></div>
<div class="rowLine-l"></div>
<div class="cloLine-l"></div>
<div class="Rline">R</div>
<div class="Rline-os">R</div>
<div class="Lline">L</div>
<div class="Lline-os">L</div>
<el-input class="ipt-a" v-model="scope.row.a" placeholder="" />
<el-input class="ipt-b" v-model="scope.row.b" placeholder="" />
<el-input class="ipt-c" v-model="scope.row.c" placeholder="" />
<el-input class="ipt-d" v-model="scope.row.d" placeholder="" />
<el-input class="ipt-e" v-model="scope.row.e" placeholder="" />
<el-input class="ipt-f" v-model="scope.row.f" placeholder="" />
<el-input class="ipt-g" v-model="scope.row.g" placeholder="" />
<el-input class="ipt-h" v-model="scope.row.h" placeholder="" />
<el-input class="ipt-j" v-model="scope.row.i" placeholder="" />
<el-input class="iptos-a" v-model="scope.row.j" placeholder="" />
<el-input class="iptos-b" v-model="scope.row.k" placeholder="" />
<el-input class="iptos-c" v-model="scope.row.l" placeholder="" />
<el-input class="iptos-d" v-model="scope.row.m" placeholder="" />
<el-input class="iptos-e" v-model="scope.row.n" placeholder="" />
<el-input class="iptos-f" v-model="scope.row.o" placeholder="" />
<el-input class="iptos-g" v-model="scope.row.p" placeholder="" />
<el-input class="iptos-h" v-model="scope.row.q" placeholder="" />
<el-input class="iptos-j" v-model="scope.row.r" placeholder="" />
</div>
<div v-else-if="scope.row.name === 'TITMUS()'">
<span>TITMUS():</span>
<el-input v-model="scope.row.a" style="width: 60%" placeholder="" />
</div>
<div v-else-if="scope.row.name === '报告描述'">
<span>报告描述:</span>
<el-input v-model="scope.row.value" placeholder="" style="width: 80%" />
</div>
<div v-else-if="scope.row.name === '签名'" style="display: flex;justify-content: space-between;padding: 0 16px">
<div>
<span>视光师:</span>
<el-input v-model="scope.row.a" style="width: 160px" placeholder="" />
</div>
<div>
<span>日期:</span>
<el-date-picker
v-model="scope.row.b"
type="date"
placeholder="选择日期"
/>
</div>
</div>
<span v-else>{{ scope.row.name }}</span>
</template>
</el-table-column>
<el-table-column label="" width="" :resizable="false" prop="type">
<template slot-scope="scope">
<!-- {{scope.row.name}}-->
<div v-if="scope.row.name == '屈光状态'">
<div class="width-180 center">
OD<el-input v-model="scope.row.OD" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '屈光状态a'">
<div class="width-180 center">
OS<el-input v-model="scope.row.OS" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == 'CT+Prism'">
<div class="width-180 center">
<el-input v-model="scope.row.ct" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '检查画片' && scope.row.type == '1'">
<div class="width-180 center">
<el-input v-model="scope.row.value" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '主观斜视角'">
<div class="width-180 center">
<el-input v-model="scope.row.od" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '客观斜视角'">
<div class="width-180 center">
<el-input v-model="scope.row.od" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '检查画片' && scope.row.type == '2'">
<div class="width-180 center">
<el-input v-model="scope.row.value" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '融合点'">
<div class="width-180 center">
<el-input v-model="scope.row.od" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == 'Worth-4-dot'">
<div class="width-180 center">
<el-input v-model="scope.row.a" placeholder="" style="width: 100px" />
@D
<el-input v-model="scope.row.b" placeholder="" style="width: 100px" />
</div>
</div>
<div v-if="scope.row.name == 'TITMUS(近)'">
<div class="width-180 center">
TNO():
<el-input v-model="scope.row.b" placeholder="" />
</div>
</div>
</template>
</el-table-column>
<el-table-column label="" width="" :resizable="false">
<template slot-scope="scope">
<div v-if="scope.row.name == '屈光状态'">
<div class="width-180 center">
VA<el-input v-model="scope.row.VA" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '屈光状态a'">
<div class="width-180 center">
VA<el-input v-model="scope.row.VA" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '主观斜视角'">
<div class="width-180 center">
<el-input v-model="scope.row.os" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '客观斜视角'">
<div class="width-180 center">
<el-input v-model="scope.row.os" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == '融合点'">
<div class="width-180 center">
<el-input v-model="scope.row.os" placeholder="" />
</div>
</div>
<div v-if="scope.row.name == 'Worth-4-dot'">
<div class="width-180 center">
<el-input v-model="scope.row.c" placeholder="" style="width: 100px" />
@N
<el-input v-model="scope.row.d" placeholder="" style="width: 100px" />
</div>
</div>
<div v-if="scope.row.name == 'TITMUS(近)'">
<div class="width-180 center">
RDD()<el-input v-model="scope.row.c" placeholder="" />
</div>
</div>
<!-- <div v-if="scope.row.name == '同视机九方位检查'">-->
<!-- <div class="width-180 center">-->
<!-- OU<el-input v-model="scope.row.b.yghcValue" placeholder="" />-->
<!-- </div>-->
<!-- </div>-->
<!-- &lt;!&ndash; 签字 &ndash;&gt;-->
<!-- <div v-if="scope.row" class="sign center">-->
<!-- &lt;!&ndash; <span v-if="!operationRecord.doctorSignImg" class="sign" @click="singHandle('doctorSignImg')">点击签字</span>&ndash;&gt;-->
<!-- &lt;!&ndash; <img v-if="operationRecord.doctorSignImg" :src="operationRecord.doctorSignImg" alt="" width="90px" @click="singHandle('doctorSignImg')">&ndash;&gt;-->
<!-- </div>-->
</template>
</el-table-column>
</el-table>
</div>
</div>
</div>
</template>
<script>
export default {
props: {
archiveCaseCRFItem: {
type: Object,
default: () => { }
},
formContent: {
type: Object,
default: () => { }
}
},
data() {
return {
dataForm: {
num: '',
name: '',
sex: '',
age: ''
},
tableData: [
{
name: '基础信息',
type: ''
},
{
name: '屈光状态',
OD: '',
VA: '',
type: ''
}, {
name: '屈光状态a',
OS: '',
VA: '',
type: ''
}, {
name: 'CT+Prism',
ct: '',
type: ''
}, {
name: '同时视检查',
type: ''
}, {
name: '检查画片',
value: '',
type: '1'
}, {
name: '主观斜视角',
od: '',
os: ''
}, {
name: '客观斜视角',
od: '',
os: ''
}, {
name: '融合功能检查'
}, {
name: '检查画片',
value: '',
type: '2'
}, {
name: '融合点',
od: '',
os: '',
type: ''
}, {
name: 'Worth-4-dot',
a: '',
b: '',
c: '',
d: ''
}, {
name: '立体式检查',
value: ''
}, {
name: 'TITMUS(近)',
a: '',
b: '',
c: ''
}, {
name: '同视机九方位检查'
}, {
name: 'ODOS',
a: '',
b: '',
c: '',
d: '',
e: '',
f: '',
g: '',
h: '',
i: '',
j: '',
k: '',
l: '',
m: '',
n: '',
o: '',
p: '',
q: '',
r: ''
}, {
name: '报告描述',
value: ''
}, {
name: '签名',
a: '',
b: ''
}]
}
},
computed: {
operationRecord: {
get() {
return this.$store.getters.operationRecord
}
}
},
watch: {
operationRecord: {
handler(value) {
console.log(value)
},
deep: true,
immediate: true
}
},
created() {
// this.printPage('threeFunc')
},
methods: {
setData() {
this.dataForm = this.formContent.a
this.tableData = this.formContent.b
console.log(this.tableData)
},
reSet() {
this.dataForm = {
num: '',
name: '',
sex: '',
age: ''
}
this.tableData = [
{
name: '基础信息',
type: ''
},
{
name: '屈光状态',
OD: '',
VA: '',
type: ''
}, {
name: '屈光状态a',
OS: '',
VA: '',
type: ''
}, {
name: 'CT+Prism',
ct: '',
type: ''
}, {
name: '同时视检查',
type: ''
}, {
name: '检查画片',
value: '',
type: '1'
}, {
name: '主观斜视角',
od: '',
os: ''
}, {
name: '客观斜视角',
od: '',
os: ''
}, {
name: '融合功能检查'
}, {
name: '检查画片',
value: '',
type: '2'
}, {
name: '融合点',
od: '',
os: '',
type: ''
}, {
name: 'Worth-4-dot',
a: '',
b: '',
c: '',
d: ''
}, {
name: '立体式检查',
value: ''
}, {
name: 'TITMUS(近)',
a: '',
b: '',
c: ''
}, {
name: '同视机九方位检查'
}, {
name: 'ODOS'
}, {
name: '报告描述',
value: ''
}, {
name: '签名',
a: '',
b: ''
}]
},
//
singHandle(text) {
const value = {
text: text,
pageName: 'operationRecord'
}
this.$store.commit('beginSign', value)
},
objectSpanMethod({ row, column, rowIndex, columnIndex }) {
if (columnIndex === 0) {
if (rowIndex === 0 || rowIndex === 4 || rowIndex === 8 || rowIndex === 12 || rowIndex === 17 || rowIndex === 15 || rowIndex === 16 || rowIndex === 14) {
return {
rowspan: 1,
colspan: 3
}
} else if (rowIndex === 1) {
return {
rowspan: 2,
colspan: 1
}
} else if (rowIndex === 2 || rowIndex === 4) {
return {
rowspan: 0,
colspan: 0
}
}
} else if (columnIndex === 1) {
if (rowIndex === 3 || rowIndex === 5 || rowIndex === 9) {
return {
rowspan: 1,
colspan: 2
}
} else if (rowIndex === 0 || rowIndex === 4 || rowIndex === 8 || rowIndex === 9 || rowIndex === 12 || rowIndex === 14 || rowIndex === 15 || rowIndex === 16 || rowIndex === 17) {
return {
rowspan: 0,
colspan: 0
}
}
} else if (columnIndex === 2 || columnIndex === 1) {
if (rowIndex === 0 || rowIndex === 3 || rowIndex === 4 || rowIndex === 5 || rowIndex === 9 || rowIndex === 8 || rowIndex === 12 || rowIndex === 14 || rowIndex === 15 || rowIndex === 16 || rowIndex === 17) {
return {
rowspan: 0,
colspan: 0
}
}
}
},
handlePrint() {
this.printPage('threeFunc')
},
handleSaveTable() {
const data = {
a: this.dataForm,
b: this.tableData
}
this.$emit('save', data)
},
handleDelete() {
this.$emit('del')
},
}
}
</script>
<style lang="scss">
#operation-record {
//height: 93%;
// overflow: auto;
.btnBox{
display: flex;
justify-content: flex-end;
}
.el-table--border{
border-right: 1px solid #EBEEF5;
}
.operation-record-table {
//width: 100%;
width: 840px !important;
padding-right: 8px;
.Rline{
position: absolute;
left: 60px;
top: 80px;
}
.Rline-os{
position: absolute;
right: 60px;
top: 80px;
}
.Lline{
position: absolute;
left: 330px;
top: 80px;
}
.Lline-os{
position: absolute;
right: 330px;
top: 80px;
}
.rowLine{
width: 200px;
height: 50px;
position: absolute;
left: 100px;
top: 70px;
border-top: 1px solid #000;
border-bottom: 1px solid #000;
}
.rowLine-l{
width: 200px;
height: 50px;
position: absolute;
right: 100px;
top: 70px;
border-top: 1px solid #000;
border-bottom: 1px solid #000;
}
.cloLine{
width: 60px;
height: 160px;
left: 170px;
top: 20px;
position: absolute;
border-left: 1px solid #000;
border-right: 1px solid #000;
}
.cloLine-l{
width: 60px;
height: 160px;
right: 170px;
top: 20px;
position: absolute;
border-left: 1px solid #000;
border-right: 1px solid #000;
}
.ipt-a{
width: 50px;
left: 114px;
top: 33px;
position: absolute;
}
.ipt-b{
width: 50px;
left: 176px;
top: 33px;
position: absolute;
}
.ipt-c{
width: 50px;
left: 242px;
top: 33px;
position: absolute;
}
.ipt-d{
width: 50px;
left: 114px;
top: 80px;
position: absolute;
}
.ipt-e{
width: 50px;
left: 176px;
top: 80px;
position: absolute;
}
.ipt-f{
width: 50px;
left: 242px;
top: 80px;
position: absolute;
}
.ipt-g{
width: 50px;
left: 114px;
top: 133px;
position: absolute;
}
.ipt-h{
width: 50px;
left: 176px;
top: 133px;
position: absolute;
}
.ipt-j{
width: 50px;
left: 242px;
top: 133px;
position: absolute;
}
.iptos-a {
width: 50px;
right: 114px;
top: 33px;
position: absolute;
}
.iptos-b {
width: 50px;
right: 176px;
top: 33px;
position: absolute;
}
.iptos-c {
width: 50px;
right: 242px;
top: 33px;
position: absolute;
}
.iptos-d {
width: 50px;
right: 114px;
top: 80px;
position: absolute;
}
.iptos-e {
width: 50px;
right: 176px;
top: 80px;
position: absolute;
}
.iptos-f {
width: 50px;
right: 242px;
top: 80px;
position: absolute;
}
.iptos-g {
width: 50px;
right: 114px;
top: 133px;
position: absolute;
}
.iptos-h {
width: 50px;
right: 176px;
top: 133px;
position: absolute;
}
.iptos-j {
width: 50px;
right: 242px;
top: 133px;
position: absolute;
}
.operation-text {
font-weight: 700;
}
.text {
font-weight: 700;
}
.sign {
cursor: pointer;
color: #46a1ff;
font-weight: 400;
}
}
.center {
text-align: center;
}
.left {
text-align: left;
}
.width-50 {
.el-input {
width: 50px;
}
}
.width-70 {
.el-input {
width: 70px;
}
}
.width-100 {
.el-input {
width: 100px;
}
}
.width-120 {
.el-input {
width: 120px;
}
}
.width-180 {
.el-input {
width: 180px;
}
}
.el-input__inner {
border: none;
height: 26px !important;
line-height: 26px !important;
text-align: center;
}
.el-input__inner {
border-bottom: 1px solid #ccc;
border-radius: 0;
padding: 0;
}
.el-input__prefix {
display: none;
}
//.el-date-editor.el-input,
//.el-date-editor.el-input__inner {
// width: 140px;
//}
//.el-input__suffix {
// top: -7px;
//}
//.el-checkbox__input.is-checked + .el-checkbox__label {
// color: #606266;
//}
//.el-checkbox__input.is-checked .el-checkbox__inner,
//.el-checkbox__input.is-indeterminate .el-checkbox__inner {
// background: #767676;
// border-color: #767676;
//}
//.el-checkbox__inner:hover,
//.el-checkbox__inner {
// border-color: #767676;
//}
//.el-radio__input.is-checked + .el-radio__label {
// color: #606266;
//}
//.el-radio__input.is-checked .el-radio__inner {
// background: #767676;
// border-color: #767676;
//}
//.el-radio {
// margin-right: 8px;
// display: block;
//}
//.el-radio__inner {
// border: 1px solid #767676 !important;
//}
//.el-radio__inner:hover {
// border-color: #767676;
//}
.el-table--enable-row-hover .el-table__body tr:hover>td.el-table__cell {
background: none !important;
}
.has-gutter {
display: none;
.cell {
font-weight: 700;
}
.el-table__cell {
background: #ced4d9;
}
}
.el-table__header-wrapper{
display: none;
}
}
</style>

336
src/components/360View/dataInfo.vue

@ -0,0 +1,336 @@
<template>
<div class="component-container info">
<div v-if="foreList.length" style="padding: 6px">
<el-table
max-height="450"
:data="foreList"
style="width:100%;margin: 8px 8px 0 0"
>
<el-table-column
align="center"
prop="name"
label="项目"
width="120"
/>
<el-table-column
align="center"
label="OD"
width="120"
>
<template slot-scope="scope">
<div>
<span v-if="scope.row.sort === 1">
<span style="margin-right: 16px">结膜充血</span>{{ scope.row.odValue }}
</span>
<span v-else-if="scope.row.sort === 2">
<span style="margin-right: 16px">结膜分泌物</span>{{ scope.row.odValue }}
</span>
<span v-else-if="scope.row.sort === 3">
<span style="margin-right: 16px">视盘视神经</span>{{ scope.row.odValue }}
</span>
<span v-else-if="scope.row.sort === 4">
<span style="margin-right: 16px">视盘CDR</span>{{ scope.row.odValue }}
</span>
<span v-else-if="scope.row.sort === 5">
<div v-if="scope.row.eyeType === 'OD'">
<p style="margin-right: 16px">球镜 DS{{ scope.row.odSph }}</p>
<p style="margin-right: 16px">柱镜 DC{{ scope.row.odCyl }}</p>
<p style="margin-right: 16px">轴位 Axis{{ scope.row.odAx }}</p>
<p style="margin-right: 16px">等效球镜{{ scope.row.odSe }}</p>
</div>
</span>
<span v-else-if="scope.row.sort === 6">
<div v-if="scope.row.eyeType === 'OD'">
<p style="margin-right: 16px">球镜 DS{{ scope.row.odSph }}</p>
<p style="margin-right: 16px">柱镜 DC{{ scope.row.odCyl }}</p>
<p style="margin-right: 16px">轴位 Axis{{ scope.row.odAx }}</p>
<p style="margin-right: 16px">矫正视力VA{{ scope.row.odVa }}</p>
</div>
</span>
<span v-else>
{{ scope.row.odValue }}
</span>
</div>
</template>
</el-table-column>
<el-table-column
align="center"
label="OS"
width="120"
>
<template slot-scope="scope">
<div>
<span v-if="scope.row.sort === 1">
<span style="margin-right: 16px">结膜充血</span>{{ scope.row.osValue }}
</span>
<span v-else-if="scope.row.sort === 2">
<span style="margin-right: 16px">结膜分泌物</span>{{ scope.row.osValue }}
</span>
<span v-else-if="scope.row.sort === 3">
<span style="margin-right: 16px">视盘视神经</span>{{ scope.row.osValue }}
</span>
<span v-else-if="scope.row.sort === 4">
<span style="margin-right: 16px">视盘CDR</span>{{ scope.row.osValue }}
</span>
<span v-else-if="scope.row.sort === 5">
<div v-if="scope.row.eyeType === 'OS'">
<p style="margin-right: 16px">球镜 DS{{ scope.row.odSph }}</p>
<p style="margin-right: 16px">柱镜 DC{{ scope.row.odCyl }}</p>
<p style="margin-right: 16px">轴位 Axis{{ scope.row.odAx }}</p>
<p style="margin-right: 16px">等效球镜{{ scope.row.odSe }}</p>
</div>
</span>
<span v-else-if="scope.row.sort === 6">
<div v-if="scope.row.eyeType === 'OS'">
<p style="margin-right: 16px">球镜 DS{{ scope.row.odSph }}</p>
<p style="margin-right: 16px">柱镜 DC{{ scope.row.odCyl }}</p>
<p style="margin-right: 16px">轴位 Axis{{ scope.row.odAx }}</p>
<p style="margin-right: 16px">矫正视力VA{{ scope.row.odVa }}</p>
</div>
</span>
<span v-else>
{{ scope.row.osValue }}
</span>
</div>
</template>
</el-table-column>
<el-table-column
align="center"
label="OU"
width="120"
>
<template slot-scope="scope">
<div>
<span v-if="scope.row.sort === 1">
<span style="margin-right: 16px" />{{ scope.row.ouValue }}
</span>
<span v-else-if="scope.row.sort === 5">
<div v-if="scope.row.eyeType === 'OU'">
<p style="margin-right: 16px">球镜 DS{{ scope.row.odSph }}</p>
<p style="margin-right: 16px">柱镜 DC{{ scope.row.odCyl }}</p>
<p style="margin-right: 16px">轴位 Axis{{ scope.row.odAx }}</p>
<p style="margin-right: 16px">等效球镜{{ scope.row.odSe }}</p>
</div>
</span>
<span v-else-if="scope.row.sort === 6">
<div v-if="scope.row.eyeType === 'OU'">
<p style="margin-right: 16px">球镜 DS{{ scope.row.odSph }}</p>
<p style="margin-right: 16px">柱镜 DC{{ scope.row.odCyl }}</p>
<p style="margin-right: 16px">轴位 Axis{{ scope.row.odAx }}</p>
<p style="margin-right: 16px">矫正视力VA{{ scope.row.odVa }}</p>
</div>
</span>
<span v-else>
{{ scope.row.ouValue }}
</span>
</div>
</template>
</el-table-column>
<el-table-column label="操作" align="center">
<template slot-scope="scope">
<span
class="cell-cursor"
style="margin-left: 5px;"
:class="scope.$index === 0 ? 'table-column-disable' : ''"
@click="handleMove(scope, 'up', foreList)"
>上移</span>
<span
class="cell-cursor"
style="margin-left: 5px;"
:class="scope.$index === foreList.length - 1 ? 'table-column-disable' : ''"
@click="handleMove(scope, 'down', foreList)"
>下移</span>
<span
class="cell-cursor"
style="margin-left: 5px;color: #FF4D4F"
@click="handleDel(scope.$index, foreList)"
>
删除
<!-- <i class="el-icon-delete"></i>-->
</span>
</template>
</el-table-column>
</el-table>
</div>
<!-- <div v-if="afterList.length">-->
<!-- <el-table-->
<!-- max-height="450"-->
<!-- :data="afterList"-->
<!-- style="width:100%;margin: 8px 8px 0 0"-->
<!-- >-->
<!-- <el-table-column-->
<!-- align="center"-->
<!-- label="OD"-->
<!-- width="140"-->
<!-- >-->
<!-- <template slot-scope="scope">-->
<!-- <div>-->
<!-- <span v-if="scope.row.sort === 1">-->
<!-- {{ scope.row.odValue }}-->
<!-- </span>-->
<!-- <span v-if="!scope.row.sort">{{ scope.row.name }}</span>-->
<!-- <span v-if="scope.row.sort === 2">-->
<!-- <span style="margin-right: 16px">结膜充血</span>{{ scope.row.odValue }}-->
<!-- </span>-->
<!-- <span v-if="scope.row.sort === 3">-->
<!-- <span style="margin-right: 16px">结膜分泌物</span>{{ scope.row.odValue }}-->
<!-- </span>-->
<!-- </div>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column-->
<!-- align="center"-->
<!-- label="OS"-->
<!-- width="140"-->
<!-- >-->
<!-- <template slot-scope="scope">-->
<!-- <div>-->
<!-- <span v-if="scope.row.sort === 1">-->
<!-- {{ scope.row.osValue }}-->
<!-- </span>-->
<!-- <span v-if="!scope.row.sort">{{ scope.row.name }}</span>-->
<!-- <span v-if="scope.row.sort === 2">-->
<!-- <span style="margin-right: 16px">结膜充血</span>{{ scope.row.osValue }}-->
<!-- </span>-->
<!-- <span v-if="scope.row.sort === 3">-->
<!-- <span style="margin-right: 16px">结膜分泌物</span>{{ scope.row.osValue }}-->
<!-- </span>-->
<!-- </div>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column label="操作" align="center">-->
<!-- <template slot-scope="scope">-->
<!-- <span-->
<!-- class="cell-cursor"-->
<!-- style="margin-left: 5px;"-->
<!-- :class="scope.$index === 0 ? 'table-column-disable' : ''"-->
<!-- @click="handleMove(scope, 'up', afterList)"-->
<!-- >上移</span>-->
<!-- <span-->
<!-- class="cell-cursor"-->
<!-- style="margin-left: 5px;"-->
<!-- :class="scope.$index === afterList.length - 1 ? 'table-column-disable' : ''"-->
<!-- @click="handleMove(scope, 'down', afterList)"-->
<!-- >下移</span>-->
<!-- <span-->
<!-- class="cell-cursor"-->
<!-- style="margin-left: 5px;color: #FF4D4F"-->
<!-- @click="handleDel(scope.$index, afterList)"-->
<!-- >-->
<!-- 删除-->
<!-- &lt;!&ndash; <i class="el-icon-delete"></i>&ndash;&gt;-->
<!-- </span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- </el-table>-->
<!-- </div>-->
<div style="width: 100%;margin-top: 16px;display: flex;justify-content: space-between">
<el-button style="width: 48%;" type="primary" size="small" @click="addExamine">引入专科检查</el-button>
<el-button style="width: 48%" size="small">复制</el-button>
</div>
</div>
</template>
<script>
import dialogjs from '@/mixins/dialog'
import infoDetail from './infoDetail'
import eventBus from '@/page-subspecialty/utils/eventBus'
export default {
components: {
infoDetail
},
mixins: [dialogjs],
props: {
patientIdNumber: {
type: String,
default: ''
},
dataList: {
type: Array,
default() {
return []
}
},
foreList: {
type: Array,
default() {
return []
}
},
afterList: {
type: Array,
default() {
return []
}
},
sourceData: {
type: String,
default: ''
}
},
data() {
return {
setPlanList: [],
addFollowList: [],
patientInfoHeadHeight: '',
crfSelectVisible: false
}
},
watch: {
},
created() {
},
mounted() {
},
methods: {
addData() {
},
//
handleMove(scope, moveType, list) {
const { $index } = scope
if (moveType === 'up') {
if ($index === 0) return
const isUp = list[$index - 1]
list.splice($index - 1, 1)
list.splice($index, 0, isUp)
} else {
if ($index === list.length - 1) return
const isDown = list[$index + 1]
list.splice($index + 1, 1)
list.splice($index, 0, isDown)
}
},
//
handleDel(index, list) {
list = list.splice(index, 1)
},
//
addExamine() {
eventBus.$emit('sendDataToExamine', this.foreList)
}
}
}
</script>
<style lang="scss" >
</style>
<style lang="scss" scoped>
.info {
width: 600px;
height: 100%;
overflow-y: auto;
.cell-cursor {
cursor: pointer;
color: #1e79ff;
}
.table-column-disable {
color: #dddd;
}
}
</style>

4
src/components/360View/followUpRecord/index.vue

@ -81,6 +81,10 @@ export default {
platform: {
type: String,
default: ''
},
onlyRead: {
type: Boolean,
default: false
}
},
inject: ['refresh'],

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

@ -1,32 +1,34 @@
<template>
<div class="foreBox">
<div class="btnBox">
<el-button v-print="'#foreCheck'" size="small">打印</el-button>
<el-button type="primary" size="small" @click="saveFore('2', '前段检查')">保存</el-button>
<el-button type="primary" size="small">保存为模板</el-button>
<div size="small" style="display:inline-block;margin-left:10px;text-align:center;width: 32px;height: 32px;background-color: #1e79ff;border-radius: 4px;vertical-align: bottom" @click="addForeData">
<img :src="require('@/assets/img/data.png')" alt="" style="width: 17px;height: 16px;margin-top: 3px">
</div>
</div>
<!-- <div class="btnBox">-->
<!-- <el-button v-print="'#foreCheck'" size="small">打印</el-button>-->
<!-- <el-button type="primary" size="small" @click="saveFore('2', '前段检查')">保存</el-button>-->
<!-- <el-button type="primary" size="small" @click="handleTemplate">保存为模板</el-button>-->
<!-- <div size="small" style="display:inline-block;margin-left:10px;text-align:center;width: 32px;height: 32px;background-color: #1e79ff;border-radius: 4px;vertical-align: bottom" @click="addForeData">-->
<!-- <img :src="require('@/assets/img/data.png')" alt="" style="width: 17px;height: 16px;margin-top: 5px">-->
<!-- </div>-->
<!-- </div>-->
<div class="moveIcon">
<p @click="moveAll(1)"><i class="el-icon-back" /></p>
<p style="margin-top: 5px" @click="moveAll(2)"><i class="el-icon-back" style="transform: rotateY(180deg)" /></p>
</div>
<div style="display: flex;margin-top: 32px">
<div style="width: 200px;padding-right: 8px">
<div style="width: 200px;padding-right: 8px;text-align: left">
<p style="font-weight: bold;margin-bottom: 12px;text-align: left">描述项模板</p>
<el-button v-if="!treeCaseList.length" type="primary" size="small" @click="append(1)">+新增</el-button>
<el-tree
ref="tree"
:data="treeTemplate"
:data="treeCaseList"
:props="treeProps"
:render-content="renderContent"
:default-expand-all="true"
:expand-on-click-node="false"
@node-click="nodeClick"
@node-click="templateData"
/>
</div>
<el-table
id="foreCheck"
ref="multipleTable"
:data="tableData"
style="margin: 8px 8px 0 0"
@selection-change="handleSelectionChange"
@ -42,15 +44,15 @@
<template slot-scope="scope">
<div>
<span v-if="scope.row.sort === 1">
<treeSelect v-model="scope.row.od" :options="scope.row.data" :props="treeProps" :multiple="true" :filterable="true" :check-strictly="true" :default-expand-all="true" @add="addTree(scope.row, $event)" @remove="removeTree" />
<span style="margin-right: 16px">结膜充血</span><treeSelect v-model="scope.row.od" :props="treeProps" style="display: inline-block;width: 60%" :options="scope.row.data" :multiple="true" :filterable="true" :check-strictly="true" :default-expand-all="true" @handleNode="handleNode(scope.$index,'od', $event)" @add="addTree(scope.row, $event)" />
</span>
<span v-if="!scope.row.sort">{{ scope.row.name }}</span>
<span v-if="scope.row.sort === 2">
<span style="margin-right: 16px">结膜充血</span><treeSelect v-model="scope.row.od" :props="treeProps" style="display: inline-block;width: 60%" :options="scope.row.data" :multiple="true" :filterable="true" :check-strictly="true" :default-expand-all="true" @add="addTree(scope.row, $event)" />
<span style="margin-right: 16px">结膜分泌物</span><treeSelect v-model="scope.row.od" :props="treeProps" style="display: inline-block;width: 60%" :options="scope.row.data" :multiple="true" :filterable="true" :check-strictly="true" :default-expand-all="true" @handleNode="handleNode(scope.$index,'od', $event)" @add="addTree(scope.row, $event)" />
</span>
<span v-if="scope.row.sort === 3">
<span style="margin-right: 16px">结膜分泌物</span><treeSelect v-model="scope.row.od" :props="treeProps" style="display: inline-block;width: 60%" :options="scope.row.data" :multiple="true" :filterable="true" :check-strictly="true" :default-expand-all="true" @add="addTree(scope.row, $event)" />
<span v-if="!scope.row.sort && scope.row.id">
<treeSelect v-model="scope.row.od" :options="scope.row.data" :props="treeProps" :multiple="true" :filterable="true" :check-strictly="true" :default-expand-all="true" @handleNode="handleNode(scope.$index,'od', $event)" @add="addTree(scope.row, $event)" />
</span>
<span v-if="!scope.row.sort && !scope.row.id">{{ scope.row.name }}</span>
</div>
</template>
</el-table-column>
@ -74,21 +76,21 @@
<template slot-scope="scope">
<div>
<span v-if="scope.row.sort === 1">
<treeSelect v-model="scope.row.os" :options="scope.row.data" :props="treeProps" :multiple="true" :filterable="true" :check-strictly="true" :default-expand-all="true" @add="addTree(scope.row, $event)" />
<span style="margin-right: 16px">结膜充血</span><treeSelect v-model="scope.row.os" :props="treeProps" style="display: inline-block;width: 60%" :options="scope.row.data" :multiple="true" :filterable="true" :check-strictly="true" :default-expand-all="true" @handleNode="handleNode(scope.$index,'os', $event)" @add="addTree(scope.row, $event)" />
</span>
<span v-if="!scope.row.sort">{{ scope.row.name }}</span>
<span v-if="scope.row.sort === 2">
<span style="margin-right: 16px">结膜充血</span><treeSelect v-model="scope.row.os" :props="treeProps" style="display: inline-block;width: 60%" :options="scope.row.data" :multiple="true" :filterable="true" :check-strictly="true" :default-expand-all="true" @add="addTree(scope.row, $event)" />
<span style="margin-right: 16px">结膜分泌物</span><treeSelect v-model="scope.row.os" :props="treeProps" style="display: inline-block;width: 60%" :options="scope.row.data" :multiple="true" :filterable="true" :check-strictly="true" :default-expand-all="true" @handleNode="handleNode(scope.$index,'os', $event)" @add="addTree(scope.row, $event)" />
</span>
<span v-if="scope.row.sort === 3">
<span style="margin-right: 16px">结膜分泌物</span><treeSelect v-model="scope.row.os" :props="treeProps" style="display: inline-block;width: 60%" :options="scope.row.data" :multiple="true" :filterable="true" :check-strictly="true" :default-expand-all="true" @add="addTree(scope.row, $event)" />
<span v-if="!scope.row.sort && scope.row.id">
<treeSelect v-model="scope.row.os" :options="scope.row.data" :props="treeProps" :multiple="true" :filterable="true" :check-strictly="true" :default-expand-all="true" @handleNode="handleNode(scope.$index,'os', $event)" @add="addTree(scope.row, $event)" />
</span>
<span v-if="!scope.row.sort && !scope.row.id">{{ scope.row.name }}</span>
</div>
</template>
</el-table-column>
</el-table>
</div>
<el-dialog title="新增子级" :visible.sync="dialogFormVisible">
<el-dialog :title="title" :visible.sync="dialogFormVisible">
<el-form :model="form" style="margin-top: 16px">
<el-form-item label="名称:" label-width="120px">
<el-input v-model="form.name" auto-complete="off" style="width: 300px" />
@ -96,12 +98,34 @@
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogFormVisible = false"> </el-button>
<el-button type="primary" @click="handleSaveTree"> </el-button>
<el-button type="primary" @click="handSaveBtn"> </el-button>
</div>
</el-dialog>
<el-dialog title="保存模板" :visible.sync="templateFlag">
<el-form :model="form" style="margin-top: 16px">
<el-form-item label="名称:" label-width="120px">
<el-input v-model="form.name" auto-complete="off" style="width: 300px" />
</el-form-item>
<el-form-item label="选择节点:" label-width="120px">
<el-tree
ref="tree"
:data="treeTemplate"
:props="treeProps"
:default-expand-all="true"
:expand-on-click-node="false"
@node-click="templateNodeClick"
/>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="templateFlag = false"> </el-button>
<el-button type="primary" @click="saveTreeTemplete"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import _ from 'lodash'
import eventBus from '@/page-subspecialty/utils/eventBus'
import treeSelect from '@/components/360View/itemSelect'
import axios from 'axios'
@ -126,7 +150,11 @@ export default {
data() {
return {
userData: {},
title: '',
sourceData: [],
treeCaseList: [],
treeTemplate: [],
addType: '',
treeProps: {
value: 'id',
label: 'name',
@ -135,55 +163,23 @@ export default {
type: '',
doctorId: '',
deleteId: '',
treeId: '',
treeName: '',
weight: '',
parentId: 0,
collectId: '',
form: {
name: ''
},
multipleSelection: [],
templateFlag: false,
dialogFormVisible: false,
data: [
{
value: 1,
label: '一级 1',
children: [{
value: 4,
label: '二级 1-1',
children: [{
value: 9,
label: '三级 1-1-1'
}, {
value: 10,
label: '三级 1-1-2'
}]
}]
}, {
value: 2,
label: '一级 2',
children: [{
value: 5,
label: '二级 2-1'
}, {
value: 6,
label: '二级 2-2'
}]
}, {
value: 3,
label: '一级 3',
children: [{
value: 7,
label: '二级 3-1'
}, {
value: 8,
label: '二级 3-2'
}]
}],
tableData: [
{
name: '眼睑'
}, {
name: '眼睑',
sort: 1,
id: 1,
type: 'anion',
od: '',
os: ''
@ -191,13 +187,15 @@ export default {
name: '结膜'
}, {
name: '结膜',
sort: 2,
id: 2,
sort: 1,
type: 'jimmy',
od: '',
os: ''
}, {
name: '结膜',
sort: 3,
id: 3,
sort: 2,
type: 'jimmy',
od: '',
os: ''
@ -205,7 +203,7 @@ export default {
name: '泪器'
}, {
name: '泪器',
sort: 1,
id: 4,
type: 'liq',
od: '',
os: ''
@ -213,7 +211,7 @@ export default {
name: '角膜'
}, {
name: '角膜',
sort: 1,
id: 5,
type: 'Giacomo',
od: '',
os: ''
@ -221,7 +219,7 @@ export default {
name: '前房'
}, {
name: '前房',
sort: 1,
id: 6,
type: 'Jianfeng',
od: '',
os: ''
@ -229,7 +227,7 @@ export default {
name: '虹膜'
}, {
name: '虹膜',
sort: 1,
id: 7,
type: 'mongo',
od: '',
os: ''
@ -237,7 +235,7 @@ export default {
name: '瞳孔'
}, {
name: '瞳孔',
sort: 1,
id: 8,
type: 'tonguing',
od: '',
os: ''
@ -245,7 +243,7 @@ export default {
name: '晶状体'
}, {
name: '晶状体',
sort: 1,
id: 9,
type: 'jingling',
od: '',
os: ''
@ -253,7 +251,7 @@ export default {
name: '睫状体'
}, {
name: '睫状体',
sort: 1,
id: 10,
type: 'jingles',
od: '',
os: ''
@ -261,7 +259,7 @@ export default {
name: '眼位'
}, {
name: '眼位',
sort: 1,
id: 11,
type: 'yawn',
od: '',
os: ''
@ -269,7 +267,7 @@ export default {
name: '眼眶'
}, {
name: '眼眶',
sort: 1,
id: 12,
type: 'yanking',
od: '',
os: ''
@ -277,12 +275,11 @@ export default {
name: '眼球运动'
}, {
name: '眼球运动',
sort: 1,
id: 13,
type: 'yang',
od: '',
os: ''
}],
treeList: []
}]
}
},
created() {
@ -291,10 +288,9 @@ export default {
this.userData = JSON.parse(window.localStorage.getItem('qg-userData'))
this.doctorId = this.userData.id
this.getforeList('2').then(() => {
console.log(123)
// this.queryOptions()
this.queryOptions()
})
this.queryTemplate()
this.queryTreeCase()
},
methods: {
async getforeList(flag) {
@ -302,35 +298,45 @@ export default {
params: {
patientId: this.patientId,
platform: 1,
flag: flag
flag: flag // 1234
}
})
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)
}
},
//
handleSelectionChange(val) {
this.multipleSelection = val
console.log(this.multipleSelection)
},
handleNode(index, type, event) {
if (type === 'os') {
this.tableData[index].osValue = event
} else {
this.tableData[index].odValue = event
}
},
//
addForeData() {
console.log(this.$parent)
eventBus.$emit('sendData', this.multipleSelection)
const data = this.multipleSelection.filter(item => {
return item.type !== undefined
})
console.log(this.multipleSelection, data)
eventBus.$emit('sendForData', data)
},
//
// ,
queryOptions() {
this.treeList = []
const treeList = []
this.tableData.forEach(item => {
if (item.type) {
const p = this.queryTree(item.type)
this.treeList.push(p)
treeList.push(p)
}
})
Promise.all(this.treeList).then((result) => {
Promise.all(treeList).then((result) => {
if (result.length) {
result.forEach(item => {
item.forEach(row => {
@ -342,8 +348,8 @@ export default {
})
})
}
this.sourceData = _.cloneDeep(this.tableData) || []
}).catch((error) => {
console.log(error)
})
},
//
@ -364,7 +370,6 @@ export default {
},
//
moveHandle(index, type, row) {
console.log(index, type, row)
if (type === 1) {
this.tableData[index].od = row
} else {
@ -372,11 +377,11 @@ export default {
}
},
//
async saveFore(flag, name) {
async saveFore() {
const params = {
flag: flag,
flag: 2,
jsonText: JSON.stringify(this.tableData),
name: name,
name: '前段检查',
patientId: this.patientId,
platform: 1
}
@ -395,22 +400,87 @@ export default {
this.$message.error(res.msg)
}
},
//
handSaveBtn() {
if (this.addType === 1) {
this.handleSaveTree()
} else {
this.handleSaveCase()
}
},
//
addTree(item, event) {
this.title = '新增子级'
this.addType = 1
this.form.name = ''
this.type = event.type
this.parentId = event.id
this.dialogFormVisible = true
},
// -
async handleSaveTree() {
const params = {
doctorId: this.doctorId,
name: this.form.name,
flag: 1,
type: this.type,
parentId: this.parentId,
platform: 1
}
const { data: res } = await this.$http.post('/treetag/addTree', params)
if (res.code === 0) {
this.dialogFormVisible = false
this.updataList()
this.$message.success('保存成功')
} else {
this.$message.error(res.msg)
}
},
//
removeTree(item) {
console.log(item)
this.type = item.type
this.deleteId = item.id
this.remove()
this.$confirm('确定删除该节点?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.handleRemove()
}).catch(() => {
})
},
//
async handleRemove() {
const params = {
id: this.deleteId
}
const { data: res } = await this.$http.post('/treetag/deleteTree', params)
if (res.code === 0) {
this.$message.success('删除成功')
this.updataList()
} else {
this.$message.error(res.msg)
}
},
//
updataList() {
this.queryTree(this.type).then((res) => {
this.tableData.forEach(item => {
if (item.type === this.type) {
const sort = item.sort
item.sort = ''
this.$nextTick(() => {
item.sort = sort
})
item.data = res
}
})
})
},
//
queryTree(type) {
// 47.110.224.240:8036
// 192.168.4.24:8036
console.log(11)
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', {
@ -428,112 +498,128 @@ export default {
.catch(error => {
reject(error)
})
// const { data: res } = this.$http.get('/treetag/findTree', {
// params: {
// doctorId: this.doctorId,
// type: type,
// platform: 1
// }
// })
// console.log(res)
// resolve(res.data)
// if (res.code === 0) {
// resolve(res.data)
// } else {
// reject(res.msg)
// this.$message.error(res.msg)
// }
})
},
//
async handleSaveTree() {
//
templateData(data, node) {
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('请勾选模板内容!')
this.form.name = ''
this.queryTemplate()
this.templateFlag = true
},
//
templateNodeClick(node) {
this.treeId = node.id
},
//
async saveTreeTemplete() {
const params = {
caseJson: JSON.stringify(this.multipleSelection),
doctorId: this.doctorId,
name: this.form.name,
flag: 1,
type: this.type,
type: 2,
treeId: this.treeId
}
const { data: res } = await this.$http.post('/treetemplate/addTreeCase', params)
if (res.code === 0) {
this.templateFlag = false
this.queryTreeCase()
this.$message.success('保存成功')
} else {
this.$message.error(res.msg)
}
},
//
append(type, data) {
this.addType = 2
this.form.name = ''
type === 1 ? this.title = '新增父级' : this.title = '新增子级'
type === 1 ? this.parentId = 0 : this.parentId = data.id
this.dialogFormVisible = true
},
//
async handleSaveCase() {
const params = {
doctorId: this.doctorId,
name: this.form.name,
weight: this.weight,
parentId: this.parentId,
platform: 1
}
const { data: res } = await this.$http.post('/treetag/addTree', params)
const { data: res } = await this.$http.post('/treetemplate/addTree', params)
if (res.code === 0) {
this.dialogFormVisible = false
this.updataList()
this.queryTreeCase()
this.$message.success('保存成功')
} else {
this.$message.error(res.msg)
}
},
//
updataList() {
this.queryTree(this.type).then((res) => {
this.tableData.forEach(item => {
if (item.type === this.type) {
const sort = item.sort
item.sort = ''
this.$nextTick(() => {
item.sort = sort
})
item.data = res
}
})
console.log(this.tableData)
})
},
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 icon='el-icon-plus' style='font-size: 12px;color: black' type='text' on-click={ () => this.append(data) }>
</el-button>
<el-button icon='el-icon-delete' style='font-size: 12px;color: black' type='text' on-click={ () => this.remove(node, data) }>
</el-button>
</span>
</span>)
},
//
nodeClick(node) {
},
append(data) {
// const newChild = { value: value++, label: 'testtest', children: [] }
// if (!data.children) {
// this.$set(data, 'children', [])
// }
// data.children.push(newChild)
},
// /
remove(node, data) {
this.deleteId = data.id
let url = ''
if (data.type) {
//
url = '/treetemplate/deleteTreeCase'
} else {
//
url = '/treetemplate/deleteTree'
}
this.$confirm('确定删除该节点?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.handleRemove()
this.removeTemplate(url)
}).catch(() => {
this.$message({
type: 'info',
message: '已取消删除'
})
})
// const parent = node.parent
// const children = parent.data.children || parent.data
// const index = children.findIndex(d => d.id === data.id)
// children.splice(index, 1)
},
async handleRemove() {
// /
async removeTemplate(url) {
const params = {
id: this.deleteId
}
const { data: res } = await this.$http.post('/treetag/deleteTree', params)
const { data: res } = await this.$http.post(url, params)
if (res.code === 0) {
this.$message.success('删除成功')
this.updataList()
this.queryTreeCase()
this.getforeList('2')
} else {
this.$message.error(res.msg)
}
},
//
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 icon='el-icon-plus' style='font-size: 12px;color: black' type='text' on-click={ () => this.append(2, data) }>
</el-button>
<el-button icon='el-icon-delete' style='font-size: 12px;color: black' type='text' on-click={ () => this.remove(node, data) }>
</el-button>
</span>
</span>)
},
//
async queryTemplate() {
const { data: res } = await this.$http.get('/treetemplate/findTree', {
params: {
@ -547,22 +633,33 @@ export default {
this.$message.error(res.msg)
}
},
async queryTreeTemplate() {
// 使child
fn(data) {
data.forEach((item, i) => {
if (item.list && item.list.length) {
item.child = item.child.concat(item.list)
//
}
if (item.child) {
this.fn(item.child)
}
})
return data
},
//
async queryTreeCase() {
const { data: res } = await this.$http.get('/treetemplate/findTreeCase', {
params: {
nodeId: this.nodeId,
type: 2,
platform: 1,
doctorId: this.doctorId
}
})
if (res.code === 0) {
this.treeTemplate = res.data
this.treeCaseList = this.fn(res.data)
} else {
this.$message.error(res.msg)
}
},
// data Node
handleMoveCopyNodeClick(data) {
this.currentNodeKey = data.id
}
}
}

134
src/components/360View/index1.vue

@ -32,18 +32,21 @@
/>
</div>
<div class="rightBox">
<el-tabs type="border-card" :value="type" style="height: 100%">
<el-tabs type="border-card" :value="type" style="height: 100%" @tab-click="tabClick">
<el-tab-pane name="病史总览" label="病史总览" style="height: 100%">
<overView />
<overView :patient-id="patientId" />
</el-tab-pane>
<el-tab-pane name="门诊病历" label="门诊病历" style="height: 100%">
<medicalRecord :patient-id="patientId" />
<medicalRecord :patient-id="patientId" :is-search="isSearch" :only-read="onlyRead" />
</el-tab-pane>
<el-tab-pane name="常规检查" label="常规检查" style="height: 100%">
<routine />
<routine :patient-id="patientId" :date="date" :only-read="onlyRead" />
</el-tab-pane>
<el-tab-pane name="特殊检查" label="特殊检查" style="height: 100%">
<special />
<special :patient-id="patientId" :only-read="onlyRead" />
</el-tab-pane>
<el-tab-pane v-if="isSearch === '3'" name="视光档案" label="视光档案" style="height: 100%">
<opticalFile :patient-id="patientId" />
</el-tab-pane>
<el-tab-pane name="诊断" label="诊断">
<el-table
@ -186,7 +189,7 @@
</el-table>
</el-tab-pane>
<el-tab-pane name="随访记录" label="随访记录" style="height: 100%">
<followUpRecord :platform="platform" :patient-id="patientId" />
<followUpRecord :platform="platform" :patient-id="patientId" :only-read="onlyRead" />
</el-tab-pane>
</el-tabs>
</div>
@ -204,7 +207,7 @@
:patient-id="patientBaseData.patientId"
/>
<!-- 数据集-->
<dataInfo v-if="dataType === 2" :source-data="source" :data-list="collectList" />
<dataInfo v-if="dataType === 2" :fore-list="foreList" :after-list="afterList" />
<!-- 病历收藏-->
<collection v-if="dataType === 3" :platform="platform" :patient-id="patientId" />
<!-- 常用业务-->
@ -212,8 +215,9 @@
</drawer>
<!-- 图像与报告 -->
<keep-alive>
<el-dialog title="" class="detail-view" :fullscreen="true" :visible.sync="isActive" append-to-body @close="backList">
<imgRecord :patient-info="patientBaseData" />
<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>
</div>
@ -222,7 +226,7 @@
import timeLine from './time-line.vue'
import shrink from '@/components/360View/shrink'
import drawer from '@/components/360View/drawer'
import dataInfo from './info' //
import dataInfo from './dataInfo' //
import collection from './collection' //
import business from './business' //
import overView from '@/components/360View/overView' //
@ -231,12 +235,14 @@ import special from '@/components/360View/special' // 特殊检查
import followUpRecord from '@/components/360View/followUpRecord'
import keyIndicators from './key-indicators'
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 {
components: { timeLine, drawer, keyIndicators, shrink, business, collection, imgRecord, overView, medicalRecord, dataInfo, routine, special, followUpRecord },
components: { timeLine, drawer, keyIndicators, shrink, business, collection, imgRecord, overView, medicalRecord, dataInfo, routine, special, followUpRecord, opticalFile, pacsList },
directives: {
move(el, bindings) {
el.onmousedown = (e) => {
@ -264,6 +270,10 @@ export default {
type: String,
default: ''
},
onlyRead: {
type: Boolean,
default: false
},
isSearch: {
type: String,
default: ''
@ -279,10 +289,15 @@ export default {
sharkFlag: true,
patientBaseData: {},
timeAxisNodeInfo: [], //
date: '', //
source: '', //
collectList: [], //
drawerWidth: '',
timeAxisData: [], //
timeAxisAll: [], //
timeAxisType: '', // tab
foreList: [], //
afterList: [], //
dataType: 1,
kpilist: [], // kpicheckbox
ShiLiAndYanYaData: {}, //
@ -302,28 +317,49 @@ export default {
// this.patientIdNumber = '330282200110051983'
this.getPatientData()
this.getTimeAxisData()
// this.getTimeAxisMz()
},
mounted() {
//
eventBus.$on('sendData', data => {
console.log(data)
this.dataType = 2
this.display = true
this.source = 'fore'
this.collectList = data
this.$nextTick(() => {
this.$refs.drawers.$el.style.display = 'inline-block'
this.$refs.shrinks.$el.style.zIndex = 999
this.$refs.drawers.selectShrink()
})
})
this.computerData()
},
methods: {
//
tabClick(type) {
this.timeAxisType = type.name
},
selectType(type) {
console.log(type)
this.dataType = type
this.display = true
},
computerData() {
//
eventBus.$on('sendForData', data => {
console.log(data)
const arr = this.foreList.concat(data)
const id = 'id'
this.foreList = arr.reduce((all, next) => all.some((item) => item[id] == next[id]) ? all : [...all, next], [])
console.log(this.foreList)
this.openDataDrink()
})
// eventBus.$on('sendAfterData', data => {
// console.log(data)
// this.afterList = data
// this.openDataDrink()
// })
},
openDataDrink() {
this.dataType = 2
this.display = true
this.$nextTick(() => {
if (this.$refs.drawers && this.$refs.drawers.$el) {
this.$refs.drawers.$el.style.display = 'inline-block'
}
if (this.$refs.shrinks && this.$refs.shrinks.$el) {
this.$refs.shrinks.$el.style.zIndex = 999
this.$refs.drawers.selectShrink()
}
})
},
handleDisplay(val) {
this.dataType = 1
if (val) {
@ -341,7 +377,18 @@ export default {
},
// 360
handlePacs() {
this.isActive = true
const { href } = this.$router.resolve({
name: 'pacs',
query: {
id: 1
}
})
window.open(href, '_blank')
// this.isActive = true
},
// 360
closePacs() {
this.isActive = false
},
//
shrinkClick() {
@ -382,7 +429,11 @@ export default {
if (res.code === 0) {
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 (!res.data.length) {
this.timeAxisNodeInfo = []
@ -393,6 +444,32 @@ export default {
this.$message.error(res.msg)
}
},
async getTimeAxisMz(typeScreenCheckArr) {
// const type = ['', '', '', '', '', '', '访']
const { data: res } = await this.$http.get(
'/patient/view/getTimeAxisDataMzss',
{
params: {
// patientId: this.patientId
patientId: '797064'
// type: typeScreenCheckArr !== undefined ? typeScreenCheckArr : type
}
}
)
if (res.code === 0) {
if (res.data.length > 0) {
// this.timeAxisData = res.data.length > 0 ? res.data : []
// this.type = res.data[0].data[0].itemList[0].groupName
}
if (!res.data.length) {
// this.timeAxisNodeInfo = []
// this.type = ''
// this.isVisit = ''
}
} else {
this.$message.error(res.msg)
}
},
// --
async getTimeAxisNodeInfo(item) {
this.type = item.groupName
@ -431,6 +508,11 @@ export default {
height: calc(100% - 48px);
}
}
.detail-view{
.el-dialog > .el-dialog__body {
height: calc(100% - 50px);
}
}
</style>
<style lang="scss" scoped>
.container{

215
src/components/360View/info.vue

@ -1,215 +0,0 @@
<template>
<div class="component-container info">
<div v-if="sourceData === 'fore'" style="padding: 6px">
<el-table
height="450"
:data="dataList"
style="width:100%;margin: 8px 8px 0 0"
>
<el-table-column
align="center"
label="OD"
width="140"
>
<template slot-scope="scope">
<div>
<span v-if="scope.row.sort === 1">
{{ scope.row.od }}
<!-- <treeSelect v-model="scope.row.od" :options="scope.row.data" :props="treeProps" :multiple="true" :filterable="true" :check-strictly="true" :default-expand-all="true" @add="addTree(scope.row, $event)" @remove="removeTree" />-->
</span>
<span v-if="!scope.row.sort">{{ scope.row.name }}</span>
<span v-if="scope.row.sort === 2">
{{ scope.row.od }}
<!-- <span style="margin-right: 16px">结膜充血</span><treeSelect v-model="scope.row.od" :props="treeProps" style="display: inline-block;width: 60%" :options="scope.row.data" :multiple="true" :filterable="true" :check-strictly="true" :default-expand-all="true" @add="addTree(scope.row, $event)" />-->
</span>
<span v-if="scope.row.sort === 3">
{{ scope.row.od }}
<!-- <span style="margin-right: 16px">结膜分泌物</span><treeSelect v-model="scope.row.od" :props="treeProps" style="display: inline-block;width: 60%" :options="scope.row.data" :multiple="true" :filterable="true" :check-strictly="true" :default-expand-all="true" @add="addTree(scope.row, $event)" />-->
</span>
</div>
</template>
</el-table-column>
<el-table-column
align="center"
label="OS"
width="140"
>
<template slot-scope="scope">
<div>
<span v-if="scope.row.sort === 1">
<!-- <treeSelect v-model="scope.row.os" :options="scope.row.data" :props="treeProps" :multiple="true" :filterable="true" :check-strictly="true" :default-expand-all="true" @add="addTree(scope.row, $event)" />-->
</span>
<span v-if="!scope.row.sort">{{ scope.row.name }}</span>
<span v-if="scope.row.sort === 2">
<!--/* <span style="margin-right: 16px">结膜:充血</span><treeSelect v-model="scope.row.os" :props="treeProps" style="display: inline-block;width: 60%" :options="scope.row.data" :multiple="true" :filterable="true" :check-strictly="true" :default-expand-all="true" @add="addTree(scope.row, $event)" />*/-->
</span>
<span v-if="scope.row.sort === 3">
<!--/* <span style="margin-right: 16px">结膜:分泌物</span><treeSelect v-model="scope.row.os" :props="treeProps" style="display: inline-block;width: 60%" :options="scope.row.data" :multiple="true" :filterable="true" :check-strictly="true" :default-expand-all="true" @add="addTree(scope.row, $event)" />*/-->
</span>
</div>
</template>
</el-table-column>
<el-table-column label="操作" align="center">
<template slot-scope="scope">
<span
class="cell-cursor"
style="margin-left: 5px;"
:class="scope.$index === 0 ? 'table-column-disable' : ''"
@click="handleMove(scope, 'up', dataList)"
>上移</span>
<span
class="cell-cursor"
style="margin-left: 5px;"
:class="scope.$index === dataList.length - 1 ? 'table-column-disable' : ''"
@click="handleMove(scope, 'down', dataList)"
>下移</span>
<span
class="cell-cursor"
style="margin-left: 5px;color: #FF4D4F"
@click="handleDel(scope.$index, dataList)"
>
删除
<!-- <i class="el-icon-delete"></i>-->
</span>
</template>
</el-table-column>
</el-table>
</div>
<div>
<!-- <el-table-->
<!-- :data="dataList"-->
<!-- stripe-->
<!-- style="width: 100%"-->
<!-- >-->
<!-- <el-table-column-->
<!-- align="center"-->
<!-- prop="date"-->
<!-- label="日期"-->
<!-- width="180"-->
<!-- />-->
<!-- <el-table-column-->
<!-- align="center"-->
<!-- prop="name"-->
<!-- label="姓名"-->
<!-- width="180"-->
<!-- />-->
<!-- <el-table-column-->
<!-- align="center"-->
<!-- prop="address"-->
<!-- label="地址"-->
<!-- />-->
<!-- <el-table-column label="操作" width="150" align="center">-->
<!-- <template slot-scope="scope">-->
<!-- <span-->
<!-- class="cell-cursor"-->
<!-- style="margin-left: 5px;"-->
<!-- :class="scope.$index === 0 ? 'table-column-disable' : ''"-->
<!-- @click="handleMove(scope, 'up', dataList)"-->
<!-- >上移</span>-->
<!-- <span-->
<!-- class="cell-cursor"-->
<!-- style="margin-left: 5px;"-->
<!-- :class="scope.$index === dataList.length - 1 ? 'table-column-disable' : ''"-->
<!-- @click="handleMove(scope, 'down', dataList)"-->
<!-- >下移</span>-->
<!-- <span-->
<!-- class="cell-cursor"-->
<!-- style="margin-left: 5px;color: #FF4D4F"-->
<!-- @click="handleDel(scope, 'down', dataList)"-->
<!-- >-->
<!-- 删除-->
<!-- &lt;!&ndash; <i class="el-icon-delete"></i>&ndash;&gt;-->
<!-- </span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- </el-table>-->
</div>
<!-- <el-button style="width: 100%;margin: 16px 0" size="small" @click="addData">+ 添加数据</el-button>-->
<div v-if="sourceData" style="width: 100%;margin-top: 16px;display: flex;justify-content: space-between">
<el-button style="width: 48%;" type="primary" size="small">引入专科检查</el-button>
<el-button style="width: 48%" size="small">复制</el-button>
</div>
</div>
</template>
<script>
import dialogjs from '@/mixins/dialog'
import infoDetail from './infoDetail'
export default {
components: {
infoDetail
},
mixins: [dialogjs],
props: {
patientIdNumber: {
type: String,
default: ''
},
dataList: {
type: Array,
default: []
},
sourceData: {
type: String,
default: ''
}
},
data() {
return {
setPlanList: [],
addFollowList: [],
patientInfoHeadHeight: '',
crfSelectVisible: false
}
},
watch: {
},
created() {
},
mounted() {
},
methods: {
addData() {
},
//
handleMove(scope, moveType, list) {
const { $index } = scope
if (moveType === 'up') {
if ($index === 0) return
const isUp = list[$index - 1]
list.splice($index - 1, 1)
list.splice($index, 0, isUp)
} else {
if ($index === list.length - 1) return
const isDown = list[$index + 1]
list.splice($index + 1, 1)
list.splice($index, 0, isDown)
}
},
handleDel(index, list) {
list = list.splice(index, 1)
}
}
}
</script>
<style lang="scss" >
</style>
<style lang="scss" scoped>
.info {
width: 600px;
.cell-cursor {
cursor: pointer;
color: #1e79ff;
}
.table-column-disable {
color: #dddd;
}
}
</style>

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

@ -34,15 +34,18 @@
:expand-on-click-node="false"
:check-strictly="checkStrictly"
:filter-node-method="treeFilter"
empty-text=""
@node-click="nodeClick"
@check-change="nodeCheck"
/>
<!-- <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 {
name: 'VElTreeSelect',
props: {
@ -131,15 +134,13 @@ export default {
})
label.a = a.join(',')
label.b = b.join(',')
console.log(label)
}
} else { //
if (value) {
label = this.queryTree(this.options, value)
}
console.log(label)
}
this.emitVal(label.a)
this.$emit('handleNode', label.a)
return label.a
},
//
@ -173,6 +174,9 @@ export default {
}
}
return label
},
addNode() {
},
// queryTree(tree, id) {
// let stark = []
@ -242,10 +246,10 @@ export default {
},
//
nodeCheck() {
console.log(this.showLabel, this.curNode)
// console.log(this.$refs.tree.getCheckedKeys())
// this.emitVal(this.$refs.tree.getCheckedKeys())
this.emitVal(this.$refs.tree.getCheckedKeys())
// this.emitVal(this.curNode)
console.log(this.showLabel)
},
append(data) {
this.$emit('add', data)

2
src/components/360View/key-indicators.vue

@ -68,7 +68,7 @@
<script>
import echartsShili from '@/components/echarts/shili'
import echartsLine from '@/components/echarts/line'
import echartsYanya from '@/components/echarts/yanya'
import echartsYanya from '@/components/echarts/eyeCharts'
export default {
components: { echartsShili, echartsYanya, echartsLine },

17
src/components/360View/medicalRecord/index.vue

@ -1,7 +1,7 @@
<template>
<div class="archives">
<div class="archives-content">
<div class="content-left">
<div class="content-left" v-if="isSearch === '2'">
<div class="content-left-top">
<el-tree
ref="my-tree"
@ -49,10 +49,11 @@
</div>
<div class="comonForm-tab">
<el-radio-group v-model="radio" size="small">
<el-radio-button label="电子病历" name="1" style="width: 85px"></el-radio-button>
<el-radio-button label="其他" name="2" style="width: 85px"></el-radio-button>
<el-radio-button label="门诊" name="1" style=""></el-radio-button>
<el-radio-button label="手术" name="2" style=""></el-radio-button>
<el-radio-button label="其他" name="3" style=""></el-radio-button>
</el-radio-group>
<div v-if="radio === '电子病历'" class="record" @click="addRecord">
<div v-if="radio === '门诊'" class="record" @click="addRecord">
<p>门诊病历</p>
<img :src="require('@/assets/img/add.png')" alt="">
</div>
@ -60,7 +61,7 @@
</div>
</div>
<div class="content-right">
<ourPatientRecord :patientId="patientId"></ourPatientRecord>
<ourPatientRecord :patientId="patientId" :only-read="onlyRead"></ourPatientRecord>
</div>
</div>
<!-- 批量打印 -->
@ -77,7 +78,7 @@ export default {
},
mixins: [],
props: {
editorIDName: {
isSearch: {
type: String,
default: ''
},
@ -89,6 +90,10 @@ export default {
type: String,
default: ''
},
onlyRead: {
type: Boolean,
default: false
},
currentArchiveList: {
type: Object,
default: () => { }

453
src/components/360View/medicalRecord/outPatientRecord/index.vue

@ -1,182 +1,127 @@
<template>
<div class="recordContainer">
<el-tabs v-model="comonFormActive" stretch type="border-card" @tab-click="handleClick">
<el-tab-pane label="病史采集" name="病史采集">
<div class="btnBox">
<el-button v-print="'#medHistory'" size="small">打印</el-button>
<el-button type="primary" size="small" @click="saveMedical('1', '病史采集')">保存</el-button>
</div>
<el-form id="medHistory" ref="form" :model="formData" label-width="120px">
<div v-if="onlyRead" class="btnBox">
<el-button v-print="'#foreCheck'" size="small">打印</el-button>
<el-button type="primary" size="small" @click="handleSaveTable">保存</el-button>
<el-button v-if="comonFormActive === '2' || comonFormActive === '3'" type="primary" size="small" @click="handleTemplate">保存为模板</el-button>
<div v-if="comonFormActive === '2' || comonFormActive === '3'" size="small" style="display:inline-block;margin-left:10px;text-align:center;width: 32px;height: 32px;background-color: #1e79ff;border-radius: 4px;vertical-align: bottom" @click="addData">
<img :src="require('@/assets/img/data.png')" alt="" style="width: 17px;height: 16px;margin-top: 5px">
</div>
</div>
<el-tabs v-model="comonFormActive" type="border-card" @tab-click="handleClick">
<el-tab-pane label="病史采集" name="1">
<el-form id="medHistory" ref="form" :model="formData" label-width="120px" style="margin-top: 32px">
<el-form-item label="主诉:" style="width: 540px">
<el-select
v-model="formData.zs"
clearable
filterable
allow-create
placeholder="主诉"
@blur="selectZs"
>
<el-option
v-for="item in options5"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
<el-input v-model="formData.zs" type="textarea" auto-complete="off" style="width: 420px" />
</el-form-item>
<el-form-item label="现病史:" style="width: 540px">
<el-select
v-model="formData.xbs"
clearable
filterable
allow-create
placeholder="现病史"
@blur="selectZs"
>
<el-option
v-for="item in options5"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
<el-input v-model="formData.xbs" type="textarea" auto-complete="off" style="width: 420px" />
</el-form-item>
<el-form-item label="既往病史:" style="width: 540px">
<el-select
v-model="formData.jwbs"
clearable
filterable
allow-create
placeholder="既往病史"
@blur="selectZs"
>
<el-option
v-for="item in options5"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
<el-input v-model="formData.jwbs" type="textarea" auto-complete="off" style="width: 420px" />
</el-form-item>
<el-form-item label="过敏史:" style="width: 540px">
<el-select
v-model="formData.gms"
clearable
filterable
allow-create
placeholder="过敏史"
@blur="selectZs"
>
<el-option
v-for="item in options5"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
<el-input v-model="formData.gms" type="textarea" auto-complete="off" style="width: 420px" />
<!-- <el-select-->
<!-- v-model="formData.gms"-->
<!-- clearable-->
<!-- filterable-->
<!-- allow-create-->
<!-- placeholder="过敏史"-->
<!-- @blur="selectZs"-->
<!-- >-->
<!-- <el-option-->
<!-- v-for="item in options5"-->
<!-- :key="item.value"-->
<!-- :label="item.label"-->
<!-- :value="item.value"-->
<!-- />-->
<!-- </el-select>-->
</el-form-item>
<el-form-item label="周身其他病史:" style="width: 540px">
<el-select
v-model="formData.zsqtbs"
clearable
filterable
allow-create
placeholder="周身其他病史"
@blur="selectZs"
>
<el-option
v-for="item in options5"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
<el-input v-model="formData.zsqtbs" type="textarea" auto-complete="off" style="width: 420px" />
<!-- <el-select-->
<!-- v-model="formData.zsqtbs"-->
<!-- clearable-->
<!-- filterable-->
<!-- allow-create-->
<!-- placeholder="周身其他病史"-->
<!-- @blur="selectZs"-->
<!-- >-->
<!-- <el-option-->
<!-- v-for="item in options5"-->
<!-- :key="item.value"-->
<!-- :label="item.label"-->
<!-- :value="item.value"-->
<!-- />-->
<!-- </el-select>-->
</el-form-item>
</el-form>
</el-tab-pane>
<el-tab-pane label="前段检查" name="前段检查" style="height: 100%">
<!-- <forePart :patient-id="patientId" />-->
<el-tab-pane label="前段检查" name="2" style="height: 100%">
<forePart ref="foreParts" :patient-id="patientId" />
</el-tab-pane>
<el-tab-pane label="后段检查" name="后段检查">
<afterPart :patient-id="patientId" />
<el-tab-pane label="后段检查" name="3" style="height: 100%">
<afterPart ref="afterParts" :patient-id="patientId" />
</el-tab-pane>
<el-tab-pane label="专科检查" name="专科检查">
<el-table
:data="tableData"
:span-method="objectSpanMethod"
style="width: 100%;margin-top: 32px"
>
<el-table-column
type="index"
label="序号"
width="180"
/>
<el-table-column
prop="name"
label="项目"
/>
<el-table-column
prop="name"
label="内容"
/>
</el-table>
<el-tab-pane label="专科检查" name="4" style="height: 100%">
<specialExamine ref="examines" :patient-id="patientId" />
</el-tab-pane>
<el-tab-pane label="诊断处置" name="诊断处置">
<div class="btnBox">
<el-button v-print="'#formDiagnosis'" size="small">打印</el-button>
<el-button type="primary" size="small">保存</el-button>
</div>
<el-form id="formDiagnosis" :model="formData" label-width="120px">
<el-tab-pane label="诊断处置" name="5">
<el-form id="formDiagnosis" :model="diagnosis" label-width="120px" style="margin-top: 32px">
<el-form-item label="诊断:" style="width: 540px">
<el-select
v-model="value10"
clearable
filterable
allow-create
placeholder="诊断"
@blur="selectZs"
>
<el-option
v-for="item in options5"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
<el-input v-model="diagnosis.zd" type="textarea" auto-complete="off" style="width: 420px" />
<!-- <el-select-->
<!-- v-model="diagnosis.zd"-->
<!-- clearable-->
<!-- filterable-->
<!-- allow-create-->
<!-- placeholder="诊断"-->
<!-- @blur="selectZs"-->
<!-- >-->
<!-- <el-option-->
<!-- v-for="item in options5"-->
<!-- :key="item.value"-->
<!-- :label="item.label"-->
<!-- :value="item.value"-->
<!-- />-->
<!-- </el-select>-->
</el-form-item>
<el-form-item label="处理:" style="width: 540px">
<el-select
v-model="value10"
clearable
filterable
allow-create
placeholder="处理"
@blur="selectZs"
>
<el-option
v-for="item in options5"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
<el-input v-model="diagnosis.cl" type="textarea" auto-complete="off" style="width: 420px" />
<!-- <el-select-->
<!-- v-model="diagnosis.cl"-->
<!-- clearable-->
<!-- filterable-->
<!-- allow-create-->
<!-- placeholder="处理"-->
<!-- @blur="selectZs"-->
<!-- >-->
<!-- <el-option-->
<!-- v-for="item in options5"-->
<!-- :key="item.value"-->
<!-- :label="item.label"-->
<!-- :value="item.value"-->
<!-- />-->
<!-- </el-select>-->
</el-form-item>
<el-form-item label="治疗意见:" style="width: 540px">
<el-select
v-model="value10"
clearable
filterable
allow-create
placeholder="治疗意见"
@blur="selectZs"
>
<el-option
v-for="item in options5"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
<el-input v-model="diagnosis.yj" type="textarea" auto-complete="off" style="width: 420px" />
<!-- <el-select-->
<!-- v-model="diagnosis.yj"-->
<!-- clearable-->
<!-- filterable-->
<!-- allow-create-->
<!-- placeholder="治疗意见"-->
<!-- @blur="selectZs"-->
<!-- >-->
<!-- <el-option-->
<!-- v-for="item in options5"-->
<!-- :key="item.value"-->
<!-- :label="item.label"-->
<!-- :value="item.value"-->
<!-- />-->
<!-- </el-select>-->
</el-form-item>
</el-form>
</el-tab-pane>
@ -186,11 +131,14 @@
<script>
import forePart from '@/components/360View/forePart'
import afterPart from '@/components/360View/afterPart'
import specialExamine from '@/components/360View/specialExamine'
const Base64 = require('js-base64').Base64
export default {
components: {
forePart,
afterPart
afterPart,
specialExamine
},
mixins: [],
props: {
@ -201,6 +149,10 @@ export default {
patientId: {
type: String,
default: ''
},
onlyRead: {
type: Boolean,
default: false
}
},
inject: ['refresh'],
@ -211,73 +163,65 @@ export default {
xbs: '',
jwbs: '',
gms: '',
zsqtbs: ''
},
flag: '', // 12345 6 789
tableData: [
{
date: '2016-05-02',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
date: '2016-05-04',
name: '王小虎',
address: '上海市普陀区金沙江路 1517 弄'
}, {
date: '2016-05-02',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
date: '2016-05-04',
name: '王小虎',
address: '上海市普陀区金沙江路 1517 弄'
}, {
date: '2016-05-02',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
date: '2016-05-04',
name: '王小虎',
address: '上海市普陀区金沙江路 1517 弄'
}],
options: [
{
value: '选项1',
label: '红绿色盲'
}, {
value: '选项2',
label: '双皮奶'
}, {
value: '选项3',
label: '蚵仔煎'
}, {
value: '选项5',
label: '北京烤鸭'
}],
options5: [
{
value: 'HTML',
label: 'HTML'
}, {
value: 'CSS',
label: 'CSS'
}, {
value: 'JavaScript',
label: 'JavaScript'
}],
value10: [],
commeFormTabs: [],
commeFormList: [],
comonFormActive: '病史采集'
zsqtbs: '',
id: ''
}, //
formId: '',
diagnosisId: '',
diagnosis: {
zd: '',
cl: '',
yj: '',
id: ''
}, //
flag: '', // 1 2 3 4 5
comonFormActive: '1'
}
},
created() {
},
mounted() {
this.getOutPatientList(1)
this.getOutPatientList('1')
this.getOutPatientList('5')
},
methods: {
//
handleSaveTable() {
// this.saveTableData('1', '')
// this.$refs.foreParts.saveFore()
// this.$refs.afterParts.saveAfter()
// this.$refs.examines.saveExamine()
// this.saveTableData('5', '')
if (this.comonFormActive === '1') {
this.saveTableData('1', '病史采集')
} else if (this.comonFormActive === '2') {
this.$refs.foreParts.saveFore()
} else if (this.comonFormActive === '3') {
this.$refs.afterParts.saveAfter()
} else if (this.comonFormActive === '4') {
this.$refs.examines.saveExamine()
} else if (this.comonFormActive === '5') {
this.saveTableData('5', '诊断处置')
}
},
//
handleTemplate() {
if (this.comonFormActive === '2') {
this.$refs.foreParts.handleTemplate()
} else if (this.comonFormActive === '3') {
this.$refs.afterParts.handleTemplate()
}
},
//
addData() {
if (this.comonFormActive === '2') {
this.$refs.foreParts.addForeData()
} else if (this.comonFormActive === '3') {
this.$refs.afterParts.addAfterData()
}
},
//
async getOutPatientList(flag) {
const { data: res } = await this.$http.get('/case/getCase', {
params: {
@ -287,38 +231,55 @@ export default {
}
})
if (res.code === 0) {
this.formData = res.data ? JSON.parse(res.data.jsonText) : {}
this.collectId = res.data ? res.data.id : ''
if (flag === '1') {
this.formData = res.data ? JSON.parse(res.data.jsonText) : {}
this.formId = res.data ? res.data.id : ''
} else if (flag === '5') {
this.diagnosis = res.data ? JSON.parse(res.data.jsonText) : {}
this.diagnosisId = res.data ? res.data.id : ''
}
} else {
this.$message.error(res.msg)
}
},
async saveMedical(flag, name) {
//
async saveTableData(flag, name) {
let data = ''
let url = ''
const params = {
flag: flag,
jsonText: JSON.stringify(this.formData),
name: name,
patientId: this.patientId,
platform: 1
}
let url = ''
if (this.collectId) {
url = '/case/update'
params.id = this.collectId
} else {
url = '/case/save'
if (flag === '1') {
data = JSON.stringify(this.formData)
params.jsonText = data
if (this.formId) {
url = '/case/update'
params.id = this.formId
} else {
url = '/case/save'
}
} else if (flag === '5') {
data = JSON.stringify(this.diagnosis)
params.jsonText = data
if (this.diagnosisId) {
url = '/case/update'
params.id = this.diagnosisId
} else {
url = '/case/save'
}
}
const { data: res } = await this.$http.post(url, params)
if (res.code === 0) {
this.$message.success('保存成功')
this.getOutPatientList(1)
this.getOutPatientList(flag)
} else {
this.$message.error(res.msg)
}
},
selectZs(e) {
this.value10 = e.target.value
},
//
printerHandle() {
console.log(this)
@ -327,29 +288,8 @@ export default {
this.printPage('medHistory')
// this.$refs.formDiagnosis.$el.contentWindow.print()
},
objectSpanMethod({ row, column, rowIndex, columnIndex }) {
if (columnIndex === 0) {
if (rowIndex === 0) {
return {
rowspan: 4,
colspan: 1
}
} else if (rowIndex === 4) {
return {
rowspan: 2,
colspan: 1
}
} else {
return {
rowspan: 0,
colspan: 0
}
}
}
},
// tab
handleClick(el) {
this.comonFormCurrentIndex = 0
handleClick() {
}
}
}
@ -362,9 +302,10 @@ export default {
.btnBox{
text-align: right;
//position: absolute;
//right: 0;
//top: 50px;
position: absolute;
right: 0px;
top: -1px;
z-index: 9;
}
}
</style>

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

@ -0,0 +1,513 @@
<template>
<!-- 视光档案-->
<div class="opticalFile">
<div class="opticalFile-content">
<div class="content-left">
<div class="content-left-top">
<div v-for="(item, index) in formList" :key="index" class="formBox" style="margin-top: 12px" :class="[index === curIndex ? 'active' : '']" @click="handleForm(index, item)">
<p :class="[index === curIndex ? 'activeFont' : 'curFont']">{{ item.createTime }}</p>
<p>{{ item.name }}</p>
</div>
<img v-if="!formList.length" src="@/assets/img/nodata.png" alt="" class="nodata">
<!-- <div class="button"><i class="el-icon-plus" /> 新建表单</div> -->
</div>
<div class="content-left-bottom">
<div class="commonForm-text ">
<span>常用表单</span>
<span class="line" />
<el-checkbox v-model="defaultChecked">默认新建今日</el-checkbox>
</div>
<div class="record" @click="addRecord(1,'屈光发育档案')">
<p>屈光发育档案</p>
<img :src="require('@/assets/img/add.png')" alt="">
</div>
<div class="comonForm-tab">
<el-radio-group v-model="formType" size="small">
<el-radio-button label="报告单" name="1" style="" />
<el-radio-button label="其他" name="2" style="" />
</el-radio-group>
<div v-if="formType === '报告单'">
<div class="record">
<p>双眼视功能检查报告单</p>
<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,'验光报告单')">
</div>
<div class="record" @click="addRecord(4,'三级视功能检查报告单')">
<p>三级视功能检查报告单</p>
<img :src="require('@/assets/img/add.png')" alt="" @click="addRecord(4,'三级视功能检查报告单')">
</div>
</div>
</div>
</div>
</div>
<div class="content-right">
<eyesVision v-if="name === '双眼视功能检查报告单'" ref="eyes" :form-content="eyesData" @save="updateForm" @del="deleteForm"/>
<optometryForm v-if="name === '验光报告单'" ref="optome" :form-content="optomeData" @save="updateForm" @del="deleteForm" />
<threeVision v-if="name === '三级视功能检查报告单'" ref="three" :form-content="threeData" @save="updateForm" @del="deleteForm" />
<deveopmentFile v-show="name === '屈光发育档案'" ref="deveope" :form-content="deveopData" @save="updateForm" @del="deleteForm" />
</div>
</div>
<!-- 批量打印 -->
<!-- <add-print v-if="addPrintVisible" ref="addPrintRef" @closedDialog="addPrintVisible=false" />-->
</div>
</template>
<script>
import { dateFilterTwo } from '@/filters/index.js'
import ourPatientRecord from './outPatientRecord'
const Base64 = require('js-base64').Base64
import eyesVision from '@/components/360View/commonForm/eyesVision' //
import threeVision from '@/components/360View/commonForm/threeVision' //
import optometryForm from '@/components/360View/commonForm/optometryForm' //
import deveopmentFile from '@/components/360View/commonForm/deveopmentFIle' //
export default {
components: {
ourPatientRecord,
eyesVision,
optometryForm,
deveopmentFile,
threeVision
},
mixins: [],
props: {
patientIdNumber: {
type: String,
default: ''
},
patientId: {
type: String,
default: ''
}
},
inject: ['refresh'],
data() {
return {
id: '',
name: '',
defaultChecked: [],
curIndex: 0,
formList: [],
deveopData: {},
threeData: {},
optomeData: {},
eyesData: {},
formType: '报告单'
}
},
mounted() {
this.getFormList()
},
methods: {
handleForm(index, item) {
console.log(item)
this.curIndex = index
this.id = item.id
this.name = item.name
if (item.name === '双眼视功能检查报告单') {
this.eyesData = item.jsonText ? JSON.parse(item.jsonText) : {}
if (item.jsonText) {
this.$nextTick(() => {
this.$refs.eyes.setData()
})
} else {
this.$nextTick(() => {
this.$refs.eyes.reSet()
})
}
} else if (item.name === '验光报告单') {
this.optomeData = item.jsonText ? JSON.parse(item.jsonText) : {}
if (item.jsonText) {
this.$nextTick(() => {
this.$refs.optome.setData()
})
} else {
this.$nextTick(() => {
this.$refs.optome.reSet()
})
}
} else if (item.name === '三级视功能检查报告单') {
this.threeData = item.jsonText ? JSON.parse(item.jsonText) : {}
if (item.jsonText) {
this.$nextTick(() => {
this.$refs.three.setData()
})
} else {
this.$nextTick(() => {
this.$refs.three.reSet()
})
}
} else if (item.name === '屈光发育档案') {
this.deveopData = item.jsonText ? JSON.parse(item.jsonText) : {}
if (item.jsonText) {
this.$nextTick(() => {
this.$refs.deveope.setData()
})
} else {
this.$nextTick(() => {
this.$refs.deveope.reSet()
})
}
}
},
//
addRecord(index, name) {
this.saveTableData(name)
},
async saveTableData(name) {
const date = dateFilterTwo(this.$moment().format('L'))
const params = {
flag: 6,
name: name,
createTime: date + ' 00:00:00',
patientId: this.patientId,
platform: 2
}
const { data: res } = await this.$http.post('/case/save', params)
if (res.code === 0) {
this.$message.success('保存成功')
this.getFormList()
} else {
this.$message.error(res.msg)
}
},
async updateForm(data) {
console.log(data)
// const data = data
const params = {
flag: 6,
name: this.name,
jsonText: JSON.stringify(data),
patientId: this.patientId,
id: this.id,
platform: 2
}
const { data: res } = await this.$http.post('/case/update', params)
if (res.code === 0) {
this.$message.success('保存成功')
this.getFormList()
} else {
this.$message.error(res.msg)
}
},
async deleteForm(data) {
console.log(data)
const params = {
id: this.id
}
const { data: res } = await this.$http.post('/case/delete', params)
if (res.code === 0) {
this.$message.success('删除成功')
this.getFormList()
} else {
this.$message.error(res.msg)
}
},
async getFormList() {
const { data: res } = await this.$http.get('/patient/view/getCases', {
params: {
patientId: this.patientId,
platform: 2,
flag: 6
}
})
if (res.code === 0) {
this.formList = res.data || []
this.curIndex = 0
this.id = this.formList.length ? this.formList[0].id : ''
this.name = this.formList.length ? this.formList[0].name : ''
} else {
this.$message.error(res.msg)
}
},
// async getSingleForm() {
// const { data: res } = await this.$http.get('/case/getCase', {
// params: {
// patientId: this.patientId,
// platform: 2,
// flag: 6
// }
// })
// if (res.code === 0) {
// this.collectId = res.data ? res.data.id : ''
// } else {
// this.$message.error(res.msg)
// }
// },
//
// tab
handleClick(el) {
this.comonFormCurrentIndex = 0
},
// CRF
printerHandle() {
this.$refs.crfComponent.$el.contentWindow.print()
},
//
allPrintPreview() {
this.addPrintVisible = true
this.$nextTick(() => {
this.$refs.addPrintRef.archiveId = this.currentArchiveList.id
this.$refs.addPrintRef.init()
})
},
//
handlePrint() {
this.archiveCaseCRFItem.formName === '眼科病史问卷调查' ? this.printPage('eyeQuestionPrint') : this.printPage('beforeOperationPrint')
}
}
}
</script>
<style lang="scss" scoped>
.opticalFile {
height: 100%;
.active {
color: white;
background-color: #1C76FD;
}
.curFont {
color: #A6A4A4;
}
.activeFont {
color: #D9D9D9;
}
.text-ellipsis {
white-space: nowrap; //
text-overflow: ellipsis;
overflow: hidden;
}
.printer {
border: 1px solid #ccc;
width: 56px;
height: 32px;
border-radius: 3px;
margin: 0;
margin-left: 10px;
cursor: pointer;
}
.formBox{
cursor: pointer;
padding: 2px 8px;
border-radius: 2px;
}
.opticalFile-content {
display: flex;
height: 100%;
overflow: hidden;
.content-left {
width: 185px;
height: 100%;
margin-right: 14px;
.nodata {
width: 185px;
margin-top: 30px;
}
.content-left-top,
.content-left-bottom {
height: 50%;
}
.tree-botton-arr {
margin-left: 10px;
}
.tree-date {
padding-right: 10px;
}
.content-left-top {
overflow-y: auto;
margin-bottom: 16px;
.CRFList-list {
display: flex;
justify-content: space-between;
align-items: center;
padding-left: 24px;
padding-right: 16px;
color: #000;
}
.CRFList-list {
height: 40px;
line-height: 40px;
font-size: 14px;
cursor: pointer;
.el-icon-more {
transform: rotate(90deg);
}
}
.CRFList-icon:hover {
color: #ff2929;
}
.CRFList-list-active {
background-color: #1890ff;
color: #fff;
.el-icon-more {
color: #fff;
}
}
.button {
margin-top: 16px;
background: #f2f3f5;
border-radius: 4px;
height: 40px;
line-height: 40px;
text-align: center;
cursor: pointer;
}
.button:hover,
.el-icon-plus:hover {
color: #1890ff;
}
}
.content-left-bottom {
.commonForm-text {
display: flex;
align-items: center;
font-size: 14px;
font-weight: 700;
}
.line {
border-bottom: 1px solid #e5e6eb;
flex: 1;
display: inline-block;
margin: 0 10px;
}
.comonForm-tab {
margin-top: 10px;
}
.comonForm-tab-Pane {
margin-top: 10px;
}
.comonForm-list {
height: 40px;
line-height: 40px;
font-size: 14px;
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 10px;
cursor: pointer;
}
.comonForm-list:hover {
background-color: #f4f8fb;
color: #1d2129;
}
.comonForm-icon:hover {
color: #1890ff;
font-weight: 700;
}
}
}
.record{
display: flex;
justify-content: space-between;
padding-top: 12px;
cursor: pointer;
p {
display: inline-block;
font-size: 14px;
color: rgba(0, 0, 0, 0.85);
letter-spacing: 1px;
}
img {
width: 16px;
height: 16px;
margin-top: 3px;
}
}
}
.content-right {
padding: 12px;
position: relative;
flex: 1;
text-align: center;
background-color: #F0F2F5;
overflow-y: hidden;
.content-right-buttonClick {
display: flex;
justify-content: flex-end;
background: #2e2e2e;
padding: 10px;
}
.editor-CRF {
height: 93%;
}
.content-right-CRF {
background: #5c5c5c;
overflow-x: auto;
padding: 16px 16px 16px 16px;
position: relative;
height: 100%;
}
.content-right-CRF-class {
padding-right: 178px;
}
.suspension-button {
position: absolute;
right: 10px;
top: 10px;
z-index: 1;
}
.case-template,
.intelligent-filling {
cursor: pointer;
height: 140px;
width: 32px;
background: #fff;
border-radius: 4px;
display: flex;
flex-direction: column;
justify-content: space-around;
align-items: center;
box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);
span {
writing-mode: vertical-rl;
letter-spacing: 6px;
}
}
.case-template:hover,
.intelligent-filling:hover {
background: linear-gradient(270deg, #f4f8fb 0%, #deebff 66.15%);
}
.case-template {
margin-bottom: 6px;
}
}
}
</style>
<style lang="scss">
.opticalFile {
.el-button .el-button--text .el-button--mini {
padding: 0;
}
}
.comonForm-tab {
#tab-mz {
padding-left: 14px !important;
}
.el-tabs__nav-wrap::after {
height: 0;
}
.el-tabs__header {
padding-right: 0 !important;
}
.el-tabs__item.is-active {
color: #fff;
background: #1890ff;
}
.el-tabs__item {
background: #f2f3f5;
padding: 0 14px;
margin-left: 1px;
height: 35px;
line-height: 35px;
}
.el-tabs__content {
padding: 0 !important;
}
}
.see-doctor .comonForm-tab .el-tabs__item:last-child {
padding-right: 14px !important;
}
.see-doctor .comonForm-tab .el-tabs__item:nth-child(2) {
padding-left: 14px !important;
}
</style>

402
src/components/360View/opticalFile/outPatientRecord/index.vue

@ -0,0 +1,402 @@
<template>
<div class="recordContainer">
<div class="btnBox">
<el-button v-print="'#foreCheck'" size="small">打印</el-button>
<el-button type="primary" size="small" @click="handleSaveTable">保存</el-button>
<el-button v-if="comonFormActive === '2' || comonFormActive === '3'" type="primary" size="small" @click="handleTemplate">保存为模板</el-button>
<div size="small" v-if="comonFormActive === '2' || comonFormActive === '3'" style="display:inline-block;margin-left:10px;text-align:center;width: 32px;height: 32px;background-color: #1e79ff;border-radius: 4px;vertical-align: bottom" @click="addData">
<img :src="require('@/assets/img/data.png')" alt="" style="width: 17px;height: 16px;margin-top: 5px">
</div>
</div>
<el-tabs v-model="comonFormActive" type="border-card" @tab-click="handleClick">
<el-tab-pane label="病史采集" name="1">
<el-form id="medHistory" ref="form" :model="formData" label-width="120px" style="margin-top: 32px">
<el-form-item label="主诉:" style="width: 540px">
<el-select
v-model="formData.zs"
clearable
filterable
allow-create
placeholder="主诉"
@blur="selectZs"
>
<el-option
v-for="item in options5"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="现病史:" style="width: 540px">
<el-select
v-model="formData.xbs"
clearable
filterable
allow-create
placeholder="现病史"
@blur="selectZs"
>
<el-option
v-for="item in options5"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="既往病史:" style="width: 540px">
<el-select
v-model="formData.jwbs"
clearable
filterable
allow-create
placeholder="既往病史"
@blur="selectZs"
>
<el-option
v-for="item in options5"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="过敏史:" style="width: 540px">
<el-select
v-model="formData.gms"
clearable
filterable
allow-create
placeholder="过敏史"
@blur="selectZs"
>
<el-option
v-for="item in options5"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="周身其他病史:" style="width: 540px">
<el-select
v-model="formData.zsqtbs"
clearable
filterable
allow-create
placeholder="周身其他病史"
@blur="selectZs"
>
<el-option
v-for="item in options5"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-form>
</el-tab-pane>
<el-tab-pane label="前段检查" name="2" style="height: 100%">
<forePart ref="foreParts" :patient-id="patientId" />
</el-tab-pane>
<el-tab-pane label="后段检查" name="3" style="height: 100%">
<afterPart ref="afterParts" :patient-id="patientId" />
</el-tab-pane>
<el-tab-pane label="专科检查" name="4" style="height: 100%">
<specialExamine ref="examines" :patient-id="patientId" />
</el-tab-pane>
<el-tab-pane label="诊断处置" name="5">
<el-form id="formDiagnosis" :model="diagnosis" label-width="120px" style="margin-top: 32px">
<el-form-item label="诊断:" style="width: 540px">
<el-select
v-model="diagnosis.zd"
clearable
filterable
allow-create
placeholder="诊断"
@blur="selectZs"
>
<el-option
v-for="item in options5"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="处理:" style="width: 540px">
<el-select
v-model="diagnosis.cl"
clearable
filterable
allow-create
placeholder="处理"
@blur="selectZs"
>
<el-option
v-for="item in options5"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="治疗意见:" style="width: 540px">
<el-select
v-model="diagnosis.yj"
clearable
filterable
allow-create
placeholder="治疗意见"
@blur="selectZs"
>
<el-option
v-for="item in options5"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-form>
</el-tab-pane>
</el-tabs>
</div>
</template>
<script>
import forePart from '@/components/360View/forePart'
import afterPart from '@/components/360View/afterPart'
import specialExamine from '@/components/360View/specialExamine'
const Base64 = require('js-base64').Base64
export default {
components: {
forePart,
afterPart,
specialExamine
},
mixins: [],
props: {
patientIdNumber: {
type: String,
default: ''
},
patientId: {
type: String,
default: ''
}
},
inject: ['refresh'],
data() {
return {
formData: {
zs: '',
xbs: '',
jwbs: '',
gms: '',
zsqtbs: ''
}, //
diagnosis: {
zd: '',
cl: '',
yj: ''
},
flag: '', // 1 2 3 4 5
tableData: [
{
date: '2016-05-02',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
date: '2016-05-04',
name: '王小虎',
address: '上海市普陀区金沙江路 1517 弄'
}, {
date: '2016-05-02',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
date: '2016-05-04',
name: '王小虎',
address: '上海市普陀区金沙江路 1517 弄'
}, {
date: '2016-05-02',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
date: '2016-05-04',
name: '王小虎',
address: '上海市普陀区金沙江路 1517 弄'
}],
options: [
{
value: '选项1',
label: '红绿色盲'
}, {
value: '选项2',
label: '双皮奶'
}, {
value: '选项3',
label: '蚵仔煎'
}, {
value: '选项5',
label: '北京烤鸭'
}],
options5: [
{
value: 'HTML',
label: 'HTML'
}, {
value: 'CSS',
label: 'CSS'
}, {
value: 'JavaScript',
label: 'JavaScript'
}],
value10: [],
comonFormActive: '1'
}
},
created() {
},
mounted() {
this.getOutPatientList('1')
this.getOutPatientList('5')
},
methods: {
//
handleSaveTable() {
this.saveTableData('1', '病史采集')
this.$refs.foreParts.saveFore()
this.$refs.afterParts.saveAfter()
this.$refs.examines.saveExamine()
this.saveTableData('5', '诊断处置')
// if (this.comonFormActive === '1') {
// this.saveTableData('1', '')
// } else if (this.comonFormActive === '2') {
// this.$refs.foreParts.saveFore()
// } else if (this.comonFormActive === '3') {
// this.$refs.afterParts.saveAfter()
// } else if (this.comonFormActive === '4') {
// this.$refs.examines.saveExamine()
// } else if (this.comonFormActive === '5') {
// this.saveTableData('5', '')
// }
},
//
handleTemplate() {
if (this.comonFormActive === '2') {
this.$refs.foreParts.handleTemplate()
} else if (this.comonFormActive === '3') {
this.$refs.afterParts.handleTemplate()
}
},
//
addData() {
if (this.comonFormActive === '2') {
this.$refs.foreParts.addForeData()
} else if (this.comonFormActive === '3') {
this.$refs.afterParts.addAfterData()
}
},
//
async getOutPatientList(flag) {
const { data: res } = await this.$http.get('/case/getCase', {
params: {
patientId: this.patientId,
platform: 1,
flag: flag
}
})
if (res.code === 0) {
if (flag === '1') {
this.formData = res.data ? JSON.parse(res.data.jsonText) : {}
} else if (flag === '5') {
this.diagnosis = res.data ? JSON.parse(res.data.jsonText) : {}
}
this.collectId = res.data ? res.data.id : ''
} else {
this.$message.error(res.msg)
}
},
//
async saveTableData(flag, name) {
let data = ''
if (flag === '1') {
data = JSON.stringify(this.formData)
} else if (flag === '5') {
data = JSON.stringify(this.diagnosis)
}
const params = {
flag: flag,
jsonText: data,
name: name,
patientId: this.patientId,
platform: 1
}
let url = ''
if (this.collectId) {
url = '/case/update'
params.id = this.collectId
} else {
url = '/case/save'
}
const { data: res } = await this.$http.post(url, params)
if (res.code === 0) {
this.$message.success('保存成功')
this.getOutPatientList(flag)
} else {
this.$message.error(res.msg)
}
},
selectZs(e) {
},
//
printerHandle() {
console.log(this)
// this.$print(this.$refs.formDiagnosis)
// this.printPage('formDiagnosis')
this.printPage('medHistory')
// this.$refs.formDiagnosis.$el.contentWindow.print()
},
// tab
handleClick() {
console.log(this.comonFormActive)
}
}
}
</script>
<style lang="scss" scoped>
.recordContainer{
width: 100%;
height: 100%;
position: relative;
.btnBox{
text-align: right;
position: absolute;
right: 0px;
top: -1px;
z-index: 9;
}
}
</style>
<style lang="scss">
.recordContainer{
.el-tabs{
height: 100%;
}
.el-tabs--border-card{
border: none;
}
.el-tabs__header{
background-color: white;
}
.el-tabs__content{
padding: 8px;
}
}
</style>

204
src/components/360View/overView/index.vue

@ -1,37 +1,66 @@
<template>
<div class="overView">
<el-table
:data="tableData"
style="width: 100%;margin-top: 16px"
>
<el-table-column
prop="name"
label="门诊"
>
<template slot-scope="scope">
<p>主诉要求眼部视力检查</p>
<p>现病史要求眼部视力检查</p>
<p>既往史要求眼部视力检查</p>
<p>诊断要求眼部视力检查</p>
<p>治疗意见要求眼部视力检查</p>
</template>
</el-table-column>
</el-table>
<el-table
:data="tableData"
style="width: 100%;margin-top: 16px"
>
<el-table-column
prop="name"
label="手术"
>
<template slot-scope="scope">
<p>手术名称要求眼部视力检查</p>
<p>主刀医生要求眼部视力检查</p>
<p>手术记录要求眼部视力检查</p>
</template>
</el-table-column>
</el-table>
<div v-for="(item, index) in tableData" :key="index" style="width: 100%;">
<div class="vieweBox">
<span class="title">{{ item.category }}</span>
<span class="time">{{ item.createTime }}</span>
</div>
<div v-if="item.category === '门诊'" style="width: 100%;padding-right: 24px;display: flex;justify-content: space-between">
<div>
<p class="info">
<span class="mr16">主诉:</span>
<span>{{ item.zs }}</span>
</p>
<p class="info">
<span class="mr16">现病史:</span>
<span>{{ item.xbs }}</span>
</p>
<p class="info">
<span class="mr16">既往史:</span>
<span>{{ item.jws }}</span>
</p>
<p class="info">
<span class="mr16">诊断:</span>
<span>{{ item.zd }}</span>
</p>
<p class="info">
<span class="mr16">治疗意见:</span>
<span>{{ item.zlyj }}</span>
</p>
</div>
<div>
<p class="info">
<span class="mr16">处置:</span>
</p>
<p class="info">
<span class="mr16">检查:</span>
<span>{{ item.jc }}</span>
</p>
<p class="info">
<span class="mr16">用药:</span>
<span>{{ item.yy }}</span>
</p>
<p class="info">
<span class="mr16">治疗:</span>
<span>{{ item.zl }}</span>
</p>
</div>
</div>
<div v-if="item.category === '手术'">
<p class="info">
<span class="mr16">手术名称:</span>
<span>{{ item.opName }}</span>
</p>
<p class="info">
<span class="mr16">主刀医生:</span>
<span>{{ item.mainDrName }}</span>
</p>
<p class="info">
<span class="mr16">手术记录:</span>
<span></span>
</p>
</div>
</div>
</div>
</template>
<script>
@ -41,10 +70,6 @@ export default {
},
mixins: [],
props: {
editorIDName: {
type: String,
default: ''
},
patientIdNumber: {
type: String,
default: ''
@ -53,47 +78,32 @@ export default {
type: String,
default: ''
},
currentArchiveList: {
type: Object,
default: () => { }
}
},
inject: ['refresh'],
data() {
return {
checked: '',
radio2: '',
value: '',
shiliAndYanya: {},
tableData: [],
multipleSelection: [],
tableData: [{
date: '2016-05-02',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
date: '2016-05-04',
name: '王小虎',
address: '上海市普陀区金沙江路 1517 弄'
}]
}
},
created() {
},
mounted() {
this.getHistoryData()
},
methods: {
async getShiLiAndYanYaData() {
const { data: res } = await this.$http.get('/patient/view/getYanZouAndYanYaData', {
async getHistoryData() {
const { data: res } = await this.$http.get('/patient/view/getHistory', {
params: {
patientId: '200203836'
patientId: '797064'
// patientId: this.patientId
}
})
if (res.code === 0) {
this.shiliAndYanya = res.data
this.tableData = res.data || []
} else {
this.shiliAndYanya = {}
this.tableData = []
this.$message.error(res.msg)
}
},
@ -132,70 +142,34 @@ export default {
height: 100%;
box-sizing: border-box;
overflow-y: auto;
.header{
width: 100%;
display: flex;
justify-content: space-between;
height: 49px;
line-height: 49px;
padding: 0px 16px;
box-sizing: border-box;
margin-bottom: 32px;
border: 1px solid rgba(0, 0, 0, 0.06);
.mt15{
margin-top: 16px;
}
.content{
width: 100%;
//display: flex;
//justify-content: space-between;
box-sizing: border-box;
.mr16{
margin-right: 16px;
}
.lineBox{
//width: 48%;
.vieweBox{
width: 100%;
height: 260px;
padding: 16px;
box-sizing: border-box;
border: 1px solid rgba(0, 0, 0, 0.06);
margin-bottom: 32px;
}
.scroll-echearts {
padding: 5px 0;
flex: 1;
margin-bottom: 16px;
//background: #171515;
border-radius: 4px;
}
.eyeBox{
width: 480px;
height: 180px;
display: flex;
margin-left: 32px;
border: 1px solid rgba(0, 0, 0, 0.06);
.eye{
width: 50%;
display: flex;
flex-direction: column;
padding-left: 16px;
height: 48px;
line-height: 48px;
background-color: #E8F5FF;
div{
height: 45px;
line-height: 45px;
text-align: center;
}
.info{
display: flex;
justify-content: space-between;
padding: 0 14px;
border-top: 1px solid rgba(0, 0, 0, 0.06);
}
.title{
font-size: 16px;
font-weight: 500;
color: rgba(0, 0, 0, 0.88);
margin-right: 16px;
}
.el{
background: rgba(0, 0, 0, 0.04);
.time{
color: rgba(0, 0, 0, 0.45);
}
}
.mr30{
margin-right: 30px;
.info{
width: 100%;
height: 48px;
line-height: 48px;
padding-left: 20px;
}
}
</style>

1626
src/components/360View/pacs/img-reccrd.vue

File diff suppressed because it is too large

543
src/components/360View/pacs/patientList.vue

@ -0,0 +1,543 @@
<template>
<div class="containerBox">
<div class="patientBox">
<div>
<el-dropdown class="mr20">
<span class="el-dropdown-link">
病人ID<i class="el-icon-arrow-down el-icon--right"></i>
</span>
<el-dropdown-menu slot="dropdown">
<el-input v-model="patientId" placeholder="请输入病人ID" />
</el-dropdown-menu>
</el-dropdown>
<el-dropdown class="mr20">
<span class="el-dropdown-link">
姓名<i class="el-icon-arrow-down el-icon--right"></i>
</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--right"></i>
</span>
<el-dropdown-menu slot="dropdown">
<el-input v-model="remark" placeholder="请输入备注" allow-clear />
</el-dropdown-menu>
</el-dropdown>
<el-dropdown class="mr20">
<span class="el-dropdown-link">
用药<i class="el-icon-arrow-down el-icon--right"></i>
</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>
</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>
</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>
</div>
</template>
<script>
// import api from '../../api/interface'
import moment from 'moment'
// import patientModel from './patientInfo'
export default {
components: {
// patientModel
},
data() {
return {
labelCol: {
xs: { span: 24 },
sm: { span: 7 }
},
midCol: {
xs: { span: 24 },
sm: { span: 12 }
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 14 }
},
checkDate: [],
page: 1,
limit: 10,
total: 0,
// patientId: '2328656',
patientId: '2553716',
patientName: '', //
userName: '', //
childInfo: {
patientId: '',
detailFlag: false
},
tagName: '', //
deviceId: '', //
remark: '', //
medication: '', //
startDate: '', //
endDate: '', //
infoFlag: false, //
patientIdFlag: false,
nameFlag: false,
deviceFlag: false,
brandFlag: false,
tagFlag: false,
remarkFlag: false,
medicationFlag: false,
dateFlag: false,
infoConfirm: false,
deviceType: [],
brandList: [],
patientList: [],
selectedRowKeys: [],
columns: [
{
title: '病人id',
dataIndex: 'id',
width: 120
},
{
title: '姓名',
dataIndex: 'name',
width: 120
},
{
title: '性别',
dataIndex: 'sex',
width: 120
},
{
title: '年龄',
dataIndex: 'age',
width: 120
},
{
title: '标签',
dataIndex: 'lebal',
scopedSlots: { customRender: 'lebal' }
},
{
title: '备注',
dataIndex: 'remark',
width: 150,
scopedSlots: { customRender: 'note' }
},
{
title: '操作',
dataIndex: 'operate',
width: 150,
scopedSlots: { customRender: 'operate' }
}
]
}
},
computed: {
hasSelected() {
return this.selectedRowKeys.length > 0
}
},
mounted() {
this.userName = window.localStorage.getItem('userName')
// this.queryDeviceType()
this.queryPatientList()
},
methods: {
moment,
//
reset() {
this.patientId = ''
this.patientName = ''
this.deviceId = ''
this.tagName = ''
this.remark = ''
this.medication = ''
this.startDate = null
this.endDate = null
},
handleClickId() {
this.patientIdFlag = true
},
handleClickName() {
this.nameFlag = true
},
handleClickDevice() {
this.deviceFlag = true
},
handleClickBrand() {
this.brandFlag = true
},
handleClickTag() {
this.tagFlag = true
},
handleClickRemark() {
this.remarkFlag = true
},
handleClickMedication() {
this.medicationFlag = true
},
handleClickDate() {
this.dateFlag = true
},
// 退
handleOut() {
this.$router.push('/login')
},
selectBrand(deviceId) {
this.deviceId = deviceId
},
selectDate(val) {
if (val.length) {
this.startDate = val[0].format('YYYY-MM-DD')
this.endDate = val[1].format('YYYY-MM-DD')
}
},
//
async queryDeviceType() {
const { data: res } = await this.$http.get('/dataBrower/patient/getDeviceTypeList')
if (res.code === 0) {
this.deviceType = res.data || []
} else {
this.$message.error(res.msg)
}
},
//
async selectDeviceType(deviceType) {
const { data: res } = await this.$http.get('/dataBrower/patient/getDeviceTypeList', { params: {
deviceType: deviceType
}
})
if (res.code === 0) {
this.brandList = res.data || []
} else {
this.$message.error(res.msg)
}
},
onSelectChange(selectedRowKeys) {
this.selectedRowKeys = selectedRowKeys
},
//
cancelSelected() {
this.selectedRowKeys = []
},
//
exportData() {
const token = window.localStorage.getItem('token')
const url = `${api.interfaceConfig.downLoad}?patientId=${this.patientId}&token=${token}`
window.location.href = url
},
//
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' })
}
}
}
},
//
handleInfo() {
this.infoFlag = true
this.childInfo.patientId = this.patientId
this.$nextTick(() => {
// this.$refs.infoComponent.openModal()
})
},
//
async queryPatientList() {
console.log(123)
const params = {
page: this.page,
limit: this.limit,
patientId: this.patientId,
patientName: this.patientName,
tagName: this.tagName,
deviceId: this.deviceId,
medication: this.medication,
startDate: this.startDate,
endDate: this.endDate,
remark: this.remark
}
Object.keys(params).map((item) => {
if (!params[item]) {
delete params[item]
}
return true
})
const { data: res } = await this.$http.get('/patient/pac30/page', { params: params })
if (res.code === 0) {
this.patientList = res.data ? res.data.list : []
this.total = res.data ? res.data.total : 0
} else {
this.$message.error(res.msg)
}
},
//
onShowSizeChange(current, pageSize) {
this.limit = pageSize
this.queryPatientList()
},
//
selectPagination(pageNumber) {
this.page = pageNumber
this.queryPatientList()
}
}
}
</script>
<style lang="scss" scoped>
.containerBox{
width: 100%;
height: calc(100% - 50px) !important;
background: #141414;
.patientBox {
width: 100%;
height: 100%;
background-color: #141414;
padding: 16px;
}
.header{
width: 100%;
height: 48px;
line-height: 48px;
padding: 0;
background-color: #0B182E;
.logo{
height: 48px;
position: absolute;
left: 0;
top: 0;
}
}
.userName{
color: #FFFFFF;
font-size: 16px;
}
.logOut{
float: right;
padding-right: 10px;
}
.searchBox{
width: 100%;
display: flex;
justify-content: space-around;
}
.cancelSel{
color: #4797FF;
font-size: 14px;
font-family: PingFang SC;
margin-left: 8px;
cursor: pointer;
}
.exportBtn{
width: 100%;
height: 54px;
line-height: 54px;
padding: 0 6px 0 32px;
background-color: rgba(71, 151, 255, 0.1);
border: 1px solid rgba(71, 151, 255, 0.3);
margin: 16px 0 16px 0;
display: flex;
justify-content: space-between;
.export_l{
font-size: 14px;
font-family: PingFang SC;
color: #FFFFFF;
letter-spacing: 2px;
}
.export_r{
font-size: 14px;
font-family: PingFang SC;
color: #4797FF;
letter-spacing: 1px;
cursor: pointer;
}
}
.pagination{
float: right;
margin-top: 16px;
}
.lebalBox{
display: inline-block;
height: 22px;
padding: 0 8px;
margin-right: 5px;
color: #52C41A;
letter-spacing: 1px;
background-color: #162312;
border: 1px dotted #274916;
box-sizing: content-box;
}
.noteBox{
letter-spacing: 1px;
}
.detail{
font-size: 14px;
font-family: PingFang SC;
color: #4797FF;
letter-spacing: 1px;
cursor: pointer;
}
.mr20{
margin-right: 40px;
}
}
</style>
<style lang="scss">
.containerBox{
.el-dropdown{
color: white;
}
.el-pager{
li {
background-color: transparent;
}
}
.btn-next,.btn-prev,.el-pagination button:disabled{
background-color: transparent;
}
.el-input__inner{
color: white;
background-color: transparent;
border: 1px solid #000000;
}
.el-table__empty-block{
background-color: #0c1016;
.el-table__empty-text{
color: white;
}
}
}
.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>

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

@ -17,21 +17,20 @@
/>
</el-select>
</div>
<div>
<el-button size="small">打印</el-button>
<el-button type="primary" size="small">保存</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">
<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>
</div>
</div>
<div class="content">
<div class="lineBox">
<el-checkbox v-model="checked">视力</el-checkbox>
<el-checkbox v-model="checkedShiLi">视力</el-checkbox>
<div style="display: flex">
<echarts-yanya
:id-name="'key-indicators-shili'"
:chart-data="shiliAndYanya.yanZhouList"
:id-name="'indicators-shili'"
:chart-data="routineData.shili"
class="scroll-echearts"
/>
<div class="eyeBox">
@ -42,129 +41,125 @@
<div>矫正视力</div>
</div>
<div class="eye">
<div>2023-02-10</div>
<div>{{ shiliLast.length ? shiliLast[0].examTime : '' }}</div>
<div class="info">
<span>OD</span>
<span>OS</span>
<span class="eye_w">OD</span>
<span class="eye_w">OS</span>
</div>
<div class="info">
<span>0.4</span>
<span>0.3</span>
<span class="eye_w">{{ shiliLast.length ? shiliLast[0].odVan : '' }}</span>
<span class="eye_w">{{ shiliLast.length ? shiliLast[0].osVan : '' }}</span>
</div>
<div class="info">
<span>1.0</span>
<span>1.2</span>
<span class="eye_w">{{ shiliLast.length ? shiliLast[0].odVag : '' }}</span>
<span class="eye_w">{{ shiliLast.length ? shiliLast[0].osVag : '' }}</span>
</div>
</div>
</div>
</div>
</div>
<div class="lineBox">
<el-checkbox v-model="checked">眼压</el-checkbox>
<el-checkbox v-model="checkedYanYa">眼压</el-checkbox>
<div style="display: flex">
<echarts-yanya
:id-name="'key-indicators-shili'"
:chart-data="shiliAndYanya.yanZhouList"
:id-name="'indicators-yanya'"
:chart-data="routineData.yanya"
class="scroll-echearts"
/>
<div class="eyeBox">
<div class="eyeBox" style="height: 135px">
<div class="eye el">
<div>最近一次</div>
<div>眼别</div>
<div>眼压</div>
</div>
<div class="eye">
<div>2023-02-10</div>
<div>{{ yanyaLast.length ? yanyaLast[0].examTime : '' }}</div>
<div class="info">
<span>OD</span>
<span>OS</span>
<span class="eye_w">OD</span>
<span class="eye_w">OS</span>
</div>
<div class="info">
<span>0.4</span>
<span>0.3</span>
<span class="eye_w">{{ yanyaLast.length ? yanyaLast[0].odIop : '' }}</span>
<span class="eye_w">{{ yanyaLast.length ? yanyaLast[0].osIop : '' }}</span>
</div>
</div>
</div>
</div>
</div>
<div class="lineBox">
<el-checkbox v-model="checked">电脑验光</el-checkbox>
<el-checkbox v-model="checkedDL">电脑验光</el-checkbox>
<el-table
:data="tableData"
:span-method="objectSpanMethod"
:data="routineData.dNyanguang"
style="width: 100%;margin-top: 32px"
>
<el-table-column
prop="date"
prop="examTime"
label="时间"
width="180"
/>
<el-table-column
prop="name"
prop="eyeType"
label="眼别"
width="180"
/>
<el-table-column
prop="name"
prop="odSph"
label="球镜 DS"
/>
<el-table-column
prop="name"
prop="odCyl"
label="柱镜 DC"
/>
<el-table-column
prop="name"
prop="odAx"
label="轴位 Axis"
/>
<el-table-column
prop="name"
prop="odSe"
label="等效球镜"
/>
</el-table>
</div>
<div class="lineBox">
<el-checkbox v-model="checked">主觉验光</el-checkbox>
<el-checkbox v-model="checkedZJ">主觉验光</el-checkbox>
<el-table
:data="tableData"
:span-method="objectSpanMethod"
:data="routineData.zJyanguang"
style="width: 100%;margin-top: 32px"
>
<el-table-column
prop="date"
prop="examTime"
label="时间"
width="180"
/>
<el-table-column
prop="name"
prop="eyeType"
label="眼别"
width="180"
/>
<el-table-column
prop="name"
prop="odSph"
label="球镜 DS"
/>
<el-table-column
prop="name"
prop="odCyl"
label="柱镜 DC"
/>
<el-table-column
prop="name"
prop="odAx"
label="轴位 Axis"
/>
<el-table-column
prop="name"
prop="odVa"
label="矫正视力VA"
/>
</el-table>
</div>
</div>
<!-- 批量打印 -->
<!-- <add-print v-if="addPrintVisible" ref="addPrintRef" @closedDialog="addPrintVisible=false" />-->
</div>
</template>
<script>
import eventBus from '@/page-subspecialty/utils/eventBus'
import echartsYanya from '@/components/echarts/yanya'
import { dateFilterTwo } from '@/filters/index.js'
const Base64 = require('js-base64').Base64
export default {
components: {
@ -172,10 +167,6 @@ export default {
},
mixins: [],
props: {
editorIDName: {
type: String,
default: ''
},
patientIdNumber: {
type: String,
default: ''
@ -184,40 +175,29 @@ export default {
type: String,
default: ''
},
currentArchiveList: {
type: Object,
default: () => { }
onlyRead: {
type: Boolean,
default: false
},
date: {
type: String,
default: ''
}
},
inject: ['refresh'],
data() {
return {
checkedShiLi: false,
checkedYanYa: false,
checkedDL: false,
checkedZJ: false,
checked: '',
radio2: '',
value: '',
shiliAndYanya: {},
tableData: [{
date: '2016-05-02',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
date: '2016-05-04',
name: '王小虎',
address: '上海市普陀区金沙江路 1517 弄'
}],
options: [{
value: '选项1',
label: '红绿色盲'
}, {
value: '选项2',
label: '双皮奶'
}, {
value: '选项3',
label: '蚵仔煎'
}, {
value: '选项5',
label: '北京烤鸭'
}]
options: [],
routineData: {},
shiliLast: [],
yanyaLast: []
}
},
watch: {
@ -227,20 +207,24 @@ export default {
},
mounted() {
this.getShiLiAndYanYaData()
this.getroutineDataData()
},
methods: {
async getShiLiAndYanYaData() {
const { data: res } = await this.$http.get('/patient/view/getYanZouAndYanYaData', {
async getroutineDataData() {
const { data: res } = await this.$http.get('/patient/view/getVaAndIopAndRefAndLast', {
params: {
patientId: '200203836'
patientId: '797064',
date: '2011-05-21'
// date: this.date
// patientId: this.patientId
}
})
if (res.code === 0) {
this.shiliAndYanya = res.data
this.routineData = res.data
this.shiliLast = res.data.shiliLast || []
this.yanyaLast = res.data.yanyaLast || []
} else {
this.shiliAndYanya = {}
this.routineData = {}
this.$message.error(res.msg)
}
},
@ -250,22 +234,73 @@ export default {
return {
rowspan: 2,
colspan: 1
};
}
} else {
return {
rowspan: 0,
colspan: 0
};
}
}
}
},
//
addRecord() {
//
addDataList() {
let data = [{
name: '',
odValue: '',
osValue: ''
}]
if (this.checkedShiLi) {
console.log(this.shiliLast[0])
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)
}
if (this.checkedYanYa) {
const yanya = this.yanyaLast[0]
yanya.name = '眼压'
yanya.odValue = yanya.odIop
yanya.osValue = yanya.osIop
yanya.id = 'YY001'
data = data.concat(this.yanyaLast)
}
if (this.checkedDL) {
this.routineData.dNyanguang.forEach((item, index) => {
item.name = '电脑验光',
item.id = 'dl' + index,
item.sort = 5
})
data = data.concat(this.routineData.dNyanguang)
}
if (this.checkedZJ) {
this.routineData.zJyanguang.forEach((item, index) => {
item.name = '主觉验光',
item.id = 'zj' + index,
item.sort = 6
})
data = data.concat(this.routineData.zJyanguang)
}
eventBus.$emit('sendForData', data)
},
// data Node
handleMoveCopyNodeClick(data) {
this.currentNodeKey = data.id
//
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)
}
}
}
}
@ -334,6 +369,11 @@ export default {
padding: 0 14px;
border-top: 1px solid rgba(0, 0, 0, 0.06);
}
.eye_w{
display: inline-block;
width: 80px;
text-align: center;
}
}
.el{
background: rgba(0, 0, 0, 0.04);

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

@ -5,12 +5,12 @@
style="width: 100%;margin-top: 16px"
>
<el-table-column
prop="date"
prop="examTime"
label="时间"
width="180"
/>
<el-table-column
prop="name"
prop="examineItem"
label="检查项目"
width="180"
/>
@ -20,10 +20,10 @@
width="180"
>
<template slot-scope="scope">
<el-button type="text" size="small" @click.native.prevent="handleRecord(scope.$index, tableData4)">
<el-button type="text" size="small" @click.native.prevent="handleRecord(scope.row)">
当次报告
</el-button>
<el-button type="text" size="small" @click.native.prevent="handleRecord(scope.$index, tableData4)">
<el-button type="text" size="small" @click.native.prevent="handleRecord(scope.row)">
所有报告
</el-button>
</template>
@ -32,13 +32,13 @@
<div style="margin: 16px 0 0 16px">
<div style="display: flex;justify-content: space-between">
<span style="font-size: 16px;font-weight: 500;color: rgba(0, 0, 0, 0.88);margin-top: 4px">提取数据</span>
<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">
<div v-if="onlyRead" 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>
</div>
<el-table
class="tableBox"
:data="tableData"
:data="extractData"
style="width: 100%;margin-top: 16px"
@selection-change="handleSelectionChange"
>
@ -68,20 +68,24 @@
/>
</el-table>
</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 { dateFilterTwo } from '@/filters/index.js'
import imgRecord from '@/components/360View/img-reccrd'
import eventBus from '@/page-subspecialty/utils/eventBus'
const Base64 = require('js-base64').Base64
export default {
components: {
imgRecord
},
mixins: [],
props: {
editorIDName: {
type: String,
default: ''
},
patientIdNumber: {
type: String,
default: ''
@ -90,89 +94,79 @@ export default {
type: String,
default: ''
},
currentArchiveList: {
type: Object,
default: () => { }
}
onlyRead: {
type: Boolean,
default: false
},
},
inject: ['refresh'],
data() {
return {
checked: '',
radio2: '',
value: '',
shiliAndYanya: {},
date: '2017-06-20',
multipleSelection: [],
tableData: [{
date: '2016-05-02',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
date: '2016-05-04',
name: '王小虎',
address: '上海市普陀区金沙江路 1517 弄'
}],
options: [{
value: '选项1',
label: '红绿色盲'
}, {
value: '选项2',
label: '双皮奶'
}, {
value: '选项3',
label: '蚵仔煎'
}, {
value: '选项5',
label: '北京烤鸭'
}]
tableData: [],
extractData: [],
patientBaseData: {},
isActive: false
}
},
created() {
},
mounted() {
this.getShiLiAndYanYaData()
this.getPatientData()
this.getSpecialItem()
},
methods: {
async getShiLiAndYanYaData() {
const { data: res } = await this.$http.get('/patient/view/getYanZouAndYanYaData', {
//
async getSpecialItem() {
const { data: res } = await this.$http.get('/patient/view/getExamineItem', {
params: {
patientId: '200203836'
// patientId: this.patientId
patientId: '1693275',
date: this.date
}
})
if (res.code === 0) {
this.shiliAndYanya = res.data
this.tableData = res.data || []
} else {
this.shiliAndYanya = {}
this.tableData = []
this.$message.error(res.msg)
}
},
handleSelectionChange(val) {
this.multipleSelection = val
},
//
handleRecord() {
},
objectSpanMethod({ row, column, rowIndex, columnIndex }) {
if (columnIndex === 0) {
if (rowIndex % 2 === 0) {
return {
rowspan: 2,
colspan: 1
}
} else {
return {
rowspan: 0,
colspan: 0
// id--
async getPatientData() {
const { data: res } = await this.$http.get(
'/patient/view/getPatientData',
{
params: {
// patientId: this.patientId
patientId: '797064'
}
}
)
if (res.code === 0) {
this.patientBaseData = res.data ? res.data : {}
} else {
this.$message.error(res.msg)
}
},
// data Node
handleMoveCopyNodeClick(data) {
this.currentNodeKey = data.id
//
handleRecord(item) {
console.log(item)
this.isActive = true
},
// 360
closePacs() {
this.isActive = false
},
//
addDataList() {
console.log(this.multipleSelection)
const data = this.multipleSelection
eventBus.$emit('sendForData', data)
}
}
}

243
src/components/360View/specialExamine/index.vue

@ -0,0 +1,243 @@
<template>
<div class="examineBox">
<div style="display: flex;margin-top: 32px">
<el-table
max-height="450"
:data="tableData"
style="width:100%;margin: 8px 8px 0 0"
>
<el-table-column
align="center"
type="index"
label="序号"
/>
<el-table-column
align="center"
prop="name"
label="项目"
/>
<el-table-column
align="center"
label="OD"
>
<template slot-scope="scope">
<div>
<span v-if="scope.row.sort === 1">
<span style="margin-right: 16px">结膜充血</span>{{ scope.row.odValue }}
</span>
<span v-else-if="scope.row.sort === 2">
<span style="margin-right: 16px">结膜分泌物</span>{{ scope.row.odValue }}
</span>
<span v-else-if="scope.row.sort === 3">
<span style="margin-right: 16px">视盘视神经</span>{{ scope.row.odValue }}
</span>
<span v-else-if="scope.row.sort === 4">
<span style="margin-right: 16px">视盘CDR</span>{{ scope.row.odValue }}
</span>
<span v-else-if="scope.row.sort === 5">
<div v-if="scope.row.eyeType === 'OD'">
<p style="margin-right: 16px">球镜 DS{{ scope.row.odSph }}</p>
<p style="margin-right: 16px">柱镜 DC{{ scope.row.odCyl }}</p>
<p style="margin-right: 16px">轴位 Axis{{ scope.row.odAx }}</p>
<p style="margin-right: 16px">等效球镜{{ scope.row.odSe }}</p>
</div>
</span>
<span v-else-if="scope.row.sort === 6">
<div v-if="scope.row.eyeType === 'OD'">
<p style="margin-right: 16px">球镜 DS{{ scope.row.odSph }}</p>
<p style="margin-right: 16px">柱镜 DC{{ scope.row.odCyl }}</p>
<p style="margin-right: 16px">轴位 Axis{{ scope.row.odAx }}</p>
<p style="margin-right: 16px">矫正视力VA{{ scope.row.odVa }}</p>
</div>
</span>
<span v-else>
{{ scope.row.odValue }}
</span>
</div>
</template>
</el-table-column>
<el-table-column
align="center"
label="OS"
>
<template slot-scope="scope">
<div>
<span v-if="scope.row.sort === 1">
<span style="margin-right: 16px">结膜充血</span>{{ scope.row.osValue }}
</span>
<span v-else-if="scope.row.sort === 2">
<span style="margin-right: 16px">结膜分泌物</span>{{ scope.row.osValue }}
</span>
<span v-else-if="scope.row.sort === 3">
<span style="margin-right: 16px">视盘视神经</span>{{ scope.row.osValue }}
</span>
<span v-else-if="scope.row.sort === 4">
<span style="margin-right: 16px">视盘CDR</span>{{ scope.row.osValue }}
</span>
<span v-else-if="scope.row.sort === 5">
<div v-if="scope.row.eyeType === 'OS'">
<p style="margin-right: 16px">球镜 DS{{ scope.row.odSph }}</p>
<p style="margin-right: 16px">柱镜 DC{{ scope.row.odCyl }}</p>
<p style="margin-right: 16px">轴位 Axis{{ scope.row.odAx }}</p>
<p style="margin-right: 16px">等效球镜{{ scope.row.odSe }}</p>
</div>
</span>
<span v-else-if="scope.row.sort === 6">
<div v-if="scope.row.eyeType === 'OS'">
<p style="margin-right: 16px">球镜 DS{{ scope.row.odSph }}</p>
<p style="margin-right: 16px">柱镜 DC{{ scope.row.odCyl }}</p>
<p style="margin-right: 16px">轴位 Axis{{ scope.row.odAx }}</p>
<p style="margin-right: 16px">矫正视力VA{{ scope.row.odVa }}</p>
</div>
</span>
<span v-else>
{{ scope.row.osValue }}
</span>
</div>
</template>
</el-table-column>
<el-table-column
align="center"
label="OU"
>
<template slot-scope="scope">
<div>
<span v-if="scope.row.sort === 1">
<span style="margin-right: 16px" />{{ scope.row.ouValue }}
</span>
<span v-else-if="scope.row.sort === 5">
<div v-if="scope.row.eyeType === 'OU'">
<p style="margin-right: 16px">球镜 DS{{ scope.row.odSph }}</p>
<p style="margin-right: 16px">柱镜 DC{{ scope.row.odCyl }}</p>
<p style="margin-right: 16px">轴位 Axis{{ scope.row.odAx }}</p>
<p style="margin-right: 16px">等效球镜{{ scope.row.odSe }}</p>
</div>
</span>
<span v-else-if="scope.row.sort === 6">
<div v-if="scope.row.eyeType === 'OU'">
<p style="margin-right: 16px">球镜 DS{{ scope.row.odSph }}</p>
<p style="margin-right: 16px">柱镜 DC{{ scope.row.odCyl }}</p>
<p style="margin-right: 16px">轴位 Axis{{ scope.row.odAx }}</p>
<p style="margin-right: 16px">矫正视力VA{{ scope.row.odVa }}</p>
</div>
</span>
<span v-else>
{{ scope.row.ouValue }}
</span>
</div>
</template>
</el-table-column>
</el-table>
</div>
</div>
</template>
<script>
import eventBus from '@/page-subspecialty/utils/eventBus'
import treeSelect from '@/components/360View/itemSelect'
const Base64 = require('js-base64').Base64
export default {
components: {
treeSelect
},
mixins: [],
props: {
patientIdNumber: {
type: String,
default: ''
},
patientId: {
type: String,
default: ''
}
},
inject: ['refresh'],
data() {
return {
userData: {},
collectId: '',
tableData: []
}
},
created() {
},
mounted() {
this.getOutPatientList()
eventBus.$on('sendDataToExamine', data => {
this.tableData = data
})
},
methods: {
//
async getOutPatientList() {
const { data: res } = await this.$http.get('/case/getCase', {
params: {
patientId: this.patientId,
platform: 1,
flag: 4
}
})
if (res.code === 0) {
this.tableData = res.data ? JSON.parse(res.data.jsonText) : []
this.collectId = res.data ? res.data.id : ''
} else {
this.$message.error(res.msg)
}
},
//
async saveExamine() {
const params = {
flag: 4,
jsonText: JSON.stringify(this.tableData),
name: '专科检查',
patientId: this.patientId,
platform: 1
}
let url = ''
if (this.collectId) {
url = '/case/update'
params.id = this.collectId
} else {
url = '/case/save'
}
const { data: res } = await this.$http.post(url, params)
if (res.code === 0) {
this.$message.success('保存成功')
await this.getOutPatientList()
} else {
this.$message.error(res.msg)
}
}
}
}
</script>
<style lang="scss" scoped>
.examineBox{
width: 100%;
height: 100%;
box-sizing: border-box;
overflow-y: auto;
position: relative;
.btnBox{
position: fixed;
right: 84px;
text-align: right;
margin-right: 16px;
background-color: white;
z-index: 999;
}
.moveIcon{
position: absolute;
left: calc(50% + 120px);
top: 40px;
z-index: 9;
}
}
</style>
<style lang="scss">
.examineBox{
.el-form-item__content{
text-align: left;
}
}
</style>

7
src/components/360View/time-line.vue

@ -1,8 +1,8 @@
<template>
<div class="component-container time-line">
<el-input placeholder="快速检索" v-model="input1" class="input-with-select">
<el-button slot="append" icon="el-icon-search"></el-button>
</el-input>
<!-- <el-input placeholder="快速检索" v-model="input1" class="input-with-select">-->
<!-- <el-button slot="append" icon="el-icon-search"></el-button>-->
<!-- </el-input>-->
<div v-if="timeAxisData.length>0" :class="activeNames==1 ? 'scroll-father-open':'scroll-father-close'">
<el-scrollbar class="scrollbar-wrapper" style="height:100%;padding-bottom: 30px">
<div v-for="(item,index) in timeAxisData" :key="index">
@ -105,7 +105,6 @@ export default {
<style lang="scss" scoped>
$color: #fff;
// $containerBgColor: #f8fafa;
$containerBgColor: #0c1016;
$borderColor: #424242;
$paddingRight: 0px;

209
src/components/echarts/eyeCharts.vue

@ -0,0 +1,209 @@
<template>
<div>
<div :id="idName" ref="yanyaRef" :style="{ height: height, width: width }" />
</div>
</template>
<script>
import moment from 'moment' //
export default {
props: {
idName: { type: String, default: 'chart' },
width: { type: String, default: '100%' },
height: { type: String, default: '200px' },
chartData: { type: Array, default: () => [] },
desc: { type: String, default: '' }
},
data() {
return {
date: [],
typeList: {
OD: [],
OS: [],
typeNull: []
},
legendData: [],
seriesData: [],
disabled: false
}
},
watch: {
chartData: {
handler(val, olVal) {
this.initFun()
},
deep: true
}
},
mounted() {
this.initFun()
},
methods: {
initFun() {
this.date = []
this.typeList = {
OD: [],
OS: [],
typeNull: []
}
this.legendData = []
this.seriesData = []
if (this.chartData && this.chartData.length > 0) {
this.disabled = false
this.chartData.forEach(item => {
this.date.push(moment(item.examTime).format('l'))
if (item.type === 'OD') {
this.typeList.OD.push([item.date, item.value])
this.legendData[0] = 'OD'
}
if (item.type === 'OS') {
this.typeList.OS.push([item.date, item.value])
this.legendData[1] = 'OS'
}
if (item.type === null) {
this.typeList.typeNull.push([item.date, item.value])
this.legendData = []
}
})
} else {
this.disabled = true
}
this.$nextTick(() => {
this.visionFun()
})
},
visionFun() {
// domecharts
const yanya = this.$echarts.init(document.getElementById(this.idName))
var colors = ['#4462FF', '#0DB760', '#000000']
Object.keys(this.typeList).forEach((item, index) => {
if (this.typeList[item].length > 0) {
this.seriesData.push({
name: item,
type: 'line',
// stack: index,
data: this.typeList[item],
label: {
show: true,
position: item === 'OD' ? [-25, -30] : [10, -5],
backgroundColor: item === 'OD' ? '#4a6bff' : '#0db760',
padding: [6, 6],
color: '#ffffff',
// color: 'rgba(24, 24, 24, 0.1)',
borderRadius: 10
},
smooth: true,
itemStyle: {
color: colors[index]
},
symbolSize: 10
})
}
})
// domecharts
yanya.setOption({
title: {
text: this.desc,
textStyle: {
'color': '#000000'
},
left: 10
},
tooltip: {
// trigger: 'axis'
backgroundColor: '#ece6e6',
textStyle: {
color: '#000000' //
},
formatter(params) {
console.log(params)
return params.seriesName + '<br/>' + params.data[0] + '&nbsp&nbsp&nbsp' + params.data[1]
}
},
legend: {
data: this.legendData,
icon: 'pin',
textStyle: {
color: '#000000'
},
right: 30
},
dataZoom: [
{
type: 'inside',
disabled: this.disabled,
start: 0,
end: 100
}
],
grid: {
top: 55,
left: 50,
right: 50,
bottom: 30,
containLabel: false
},
xAxis: {
type: 'time',
boundaryGap: false,
axisLabel: {
show: true,
showMaxLabel: true,
textStyle: {
color: '#000000'
},
formatter: function(value, index) {
const showD = moment(value).format('YYYY/M/D')
return showD
}
},
axisLine: {
lineStyle: {
color: 'rgba(24, 24, 24, 0.1)'
}
},
// 线
splitLine: {
show: true
}
},
yAxis: {
type: 'value',
min: function(value) { //
return Math.floor(value.min)
},
max: function(value) { //
return Math.ceil(value.max)
},
splitNumber: 1, //
axisLabel: {
show: true,
textStyle: {
color: '#000000'
}
},
axisLine: {
lineStyle: {
color: 'rgba(24, 24, 24, 0.1)'
}
}
},
series: [
...this.seriesData
]
})
//
window.addEventListener('resize', () => { yanya.resize() })
// div
this.$erd.listenTo(this.$refs.yanyaRef, () => {
this.$nextTick(() => {
yanya.resize()
})
})
}
}
}
</script>
<style style="scss" scoped>
</style>

34
src/components/echarts/yanya.vue

@ -50,19 +50,23 @@ export default {
if (this.chartData && this.chartData.length > 0) {
this.disabled = false
this.chartData.forEach(item => {
this.date.push(moment(item.date).format('l'))
if (item.type === 'OD') {
this.typeList.OD.push([item.date, item.value])
this.legendData[0] = 'OD'
}
if (item.type === 'OS') {
this.typeList.OS.push([item.date, item.value])
this.legendData[1] = 'OS'
}
if (item.type === null) {
this.typeList.typeNull.push([item.date, item.value])
this.legendData = []
}
this.date.push(moment(item.examTime).format('l'))
this.typeList.OD.push([item.examTime, item.odVan])
this.legendData[0] = 'OD'
this.typeList.OS.push([item.examTime, item.osVan])
this.legendData[1] = 'OS'
// if (item.type === 'OD') {
// this.typeList.OD.push([item.date, item.value])
// this.legendData[0] = 'OD'
// }
// if (item.type === 'OS') {
// this.typeList.OS.push([item.date, item.value])
// this.legendData[1] = 'OS'
// }
// if (item.type === null) {
// this.typeList.typeNull.push([item.date, item.value])
// this.legendData = []
// }
})
} else {
this.disabled = true
@ -102,7 +106,7 @@ export default {
// domecharts
yanya.setOption({
title: {
text: this.desc,
text: '',
textStyle: {
'color': '#000000'
},
@ -110,7 +114,7 @@ export default {
},
tooltip: {
// trigger: 'axis'
backgroundColor: '#000000',
backgroundColor: '#ece6e6',
textStyle: {
color: '#000000' //
},

4
src/components/hm-crf/tinymce/themes/silver/theme.js

@ -23637,12 +23637,12 @@
eventOrder: (_d = {}, _d[mousedown()] = [
'focusing',
'alloy.base.behaviour',
'common-button-display-events'
'commonForm-button-display-events'
], _d),
buttonBehaviours: derive$1([
DisablingConfigs.toolbarButton(providersBackstage.isDisabled),
receivingConfig(),
config('common-button-display-events', [run(mousedown(), function (button, se) {
config('commonForm-button-display-events', [run(mousedown(), function (button, se) {
se.event.prevent();
emit(button, focusButtonEvent);
})])

251
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,162 +9,205 @@ 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.mixinViewModuleOptions.getDataListURL ? this.$http.get(
this.mixinViewModuleOptions.getDataListURL, {
params: {
// order: this.order,
// orderField: this.orderField,
page: this.mixinViewModuleOptions.getDataListIsPage ? this.page : null,
limit: this.mixinViewModuleOptions.getDataListIsPage ? this.limit : null,
...this.dataForm
}
}
).then(({ data: res }) => {
this.dataListLoading = false
if (res.code !== 0) {
this.dataList = []
this.total = 0
return this.$message.error(res.msg)
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;
})
: "";
},
dealObjectValue(obj) {
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];
}
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
}) : ''
}
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
})
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(() => {})
}).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() {
@ -173,6 +216,6 @@ export default {
// ...this.dataForm
// })
// window.location.href = `${window.SITE_CONFIG.apiURL}${this.mixinViewModuleOptions.exportURL}?${params}`
}
}
}
},
},
};

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

@ -9,9 +9,8 @@ Vue.use(Router);
// 解决Vue-Router升级导致的Uncaught(in promise) navigation guard问题----------
const originalPush = Router.prototype.push;
Router.prototype.push = function push(location, onResolve, onReject) {
if (onResolve || onReject) {
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问题----------
@ -38,6 +37,12 @@ export const pageRoutes = [
name: "login",
meta: { title: "登录" },
},
{
path: "/pacs",
component: () => import("@/page-subspecialty/views/pages/pacsManage/index"),
name: "pacs",
meta: { title: "pacs浏览器", isTab: true },
},
// 录音
{
path: "/luyin",
@ -123,12 +128,6 @@ export const moduleRoutes = {
name: "redirect",
component: () => import("@/page-subspecialty/views/redirect"),
},
{
path: "/ot",
name: "ot",
component: () =>
import("@/page-subspecialty/views/modules/formList/deveopmentFIle.vue"),
},
],
};
@ -266,51 +265,39 @@ function getInitData() {
// if (res.code !== 0) { return }
// window.SITE_CONFIG['dictList'] = res.data
// })
// 获取【字段字典表】, 添加并全局变量保存
http.get("/table/dict/optionsColumn").then(({ data: res }) => {
window.SITE_CONFIG["dict_colAll"] = res.data;
});
// 获取【字段字典表】, 添加并全局变量保存
http
.get("/table/dict/optionsColumn", { params: { type: 1 } })
.then(({ data: res }) => {
window.SITE_CONFIG["dict_colSearch"] = res.data;
});
// 获取【字段字典表】, 添加并全局变量保存
http
.get("/table/dict/optionsColumn", { params: { type: 2 } })
.then(({ data: res }) => {
window.SITE_CONFIG["dict_colChart"] = res.data;
});
// 获取【字段字典表】, 添加并全局变量保存
http
.get("/table/dict/optionsColumn", { params: { type: 3 } })
.then(({ data: res }) => {
window.SITE_CONFIG["dict_colCrf"] = res.data;
});
// 获取【字段字典表】, 添加并全局变量保存
http
.get("/table/dict/optionsColumn", { params: { type: 4 } })
.then(({ data: res }) => {
window.SITE_CONFIG["dict_colExport"] = res.data;
});
// http.get('/table/dict/optionsColumn').then(({ data: res }) => {
// window.SITE_CONFIG['dict_colAll'] = res.data
// })
//
// // 获取【字段字典表】, 添加并全局变量保存
// http.get('/table/dict/optionsColumn', { params: { type: 1 }}).then(({ data: res }) => {
// window.SITE_CONFIG['dict_colSearch'] = res.data
// })
//
// // 获取【字段字典表】, 添加并全局变量保存
// http.get('/table/dict/optionsColumn', { params: { type: 2 }}).then(({ data: res }) => {
// window.SITE_CONFIG['dict_colChart'] = res.data
// })
//
// // 获取【字段字典表】, 添加并全局变量保存
// http.get('/table/dict/optionsColumn', { params: { type: 3 }}).then(({ data: res }) => {
// window.SITE_CONFIG['dict_colCrf'] = res.data
// })
//
// // 获取【字段字典表】, 添加并全局变量保存
// http.get('/table/dict/optionsColumn', { params: { type: 4 }}).then(({ data: res }) => {
// window.SITE_CONFIG['dict_colExport'] = res.data
// })
// 获取【检查项目字典】, 添加并全局变量保存
// http.get('/table/dict/examItem').then(({ data: res }) => {
// sortChinese(res.data, 'itemName')
// window.SITE_CONFIG['dict_examItem'] = res.data
// })
// 获取【设备信息字典】, 添加并全局变量保存
// http.get('/device/getData2RelDeviceList').then(({ data: res }) => {
// window.SITE_CONFIG['dict_device'] = res.data
// })
// 获取【设备与检查项目字典】, 添加并全局变量保存
// http.get('/device/getData2RelDeviceItemList').then(({ data: res }) => {
// window.SITE_CONFIG['dict_device_item'] = res.data

2
src/page-subspecialty/views/modules/optometryManagement/cornea/index.vue

@ -113,7 +113,7 @@ export default {
data() {
return {
mixinViewModuleOptions: {
getDataListURL: '/sg/patient/page',
getDataListURL: '/patient/page',
getDataListIsPage: true
},
cheackAllFooter: false,

317
src/page-subspecialty/views/modules/optometryManagement/dioptric/HIS-add.vue

@ -1,150 +1,167 @@
<template>
<el-dialog
class="HIS-dialog"
:visible.sync="visible"
width="60%"
title="HIS查询"
>
<el-form ref="dataFormHis" :inline="true" :model="dataFormHis" class="demo-form-inline" :rules="dataRule" @keyup.enter.native="findHandle(2)">
<el-form-item prop="patientId">
<el-input v-model="dataFormHis.patientId" placeholder="请输入病历号" clearable @clear="findHandle(1)" />
</el-form-item>
<el-form-item prop="patientName">
<el-input v-model="dataFormHis.patientName" placeholder="请输入姓名" clearable @clear="findHandle(1)" />
</el-form-item>
<el-form-item prop="patientIdNumber">
<el-input v-model="dataFormHis.patientIdNumber" placeholder="请输入身份证号" clearable @clear="findHandle(1)" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="findHandle(2)">查询</el-button>
</el-form-item>
</el-form>
<el-table v-loading="loading" :data="tableData">
<template slot="empty">
<span style="color: #969799;">{{ tableText }}</span>
</template>
<el-table-column property="patId" label="病历号" width="100" />
<el-table-column property="patName" label="患者姓名" width="100" />
<el-table-column property="patIdNumber" label="身份证号" />
<el-table-column property="patPhone" label="联系电话" />
<el-table-column property="patAddress" label="家庭地址" />
<el-table-column label="操作" width="80">
<template slot-scope="scope">
<p class="introduce" @click="introduceHandle(scope.row)">引入</p>
</template></el-table-column>
</el-table>
</el-dialog>
</template>
<script>
export default {
props: {
patientTypeList: {
type: Array,
default: () => []
}
},
data() {
return {
visible: false,
dataFormHis: {
patientId: '',
patientName: '',
patientIdNumber: ''
},
dataForm: {},
tableData: [],
tableText: '请查询所需数据',
loading: false
}
},
computed: {
dataRule() {
return {
patientId: [
{ message: '请输入病历号', trigger: 'blur' }
],
patientName: [
{ message: '请输入姓名', trigger: 'blur' }
],
patientIdNumber: [
{ message: '请输入身份证号', trigger: 'blur' }
]
}
}
},
methods: {
init() {
this.visible = true
this.$nextTick(() => {
this.tableText = '请查询所需数据'
this.$refs.dataFormHis.resetFields() //
this.tableData = []
this.findHandle(1)
})
},
// His
async findHandle(flag) {
this.loading = true
if (flag === 2 && !this.dataFormHis.patientId && !this.dataFormHis.patientName && !this.dataFormHis.patientIdNumber) {
return this.$message.error('搜索内容不能为空')
}
const { data: res } = await this.$http.get('/pat/Manage/getHisPatientList', {
params: this.dataFormHis
})
if (res.code === 0) {
this.loading = false
this.tableData = res.data
if (res.data.length <= 0 && flag === 2) {
this.tableText = '查询成功,未查询到相关数据'
} else if (res.data.length <= 0 && flag === 1) {
this.tableText = '请查询所需数据'
}
} else {
this.loading = false
this.tableText = res.msg
this.$message.error(res.msg)
}
},
//
introduceHandle(scopwRow) {
this.$parent.addOrUpdateHandle('', scopwRow, 'HIS引入')
}
}
}
</script>
<style lang="scss" scoped>
.HIS-dialog {
.cycle-display {
.el-form-item__content {
display: flex;
}
.el-input-number {
width: 100px;
margin-right: 16px;
}
}
.introduce {
color: #1F78FF;
cursor: pointer;
}
}
</style>
<style lang="scss">
.HIS-dialog {
.el-form {
display: flex;
}
.el-dialog__header {
margin-bottom:12px
}
.el-dialog__body {
padding-right: 30px;
}
.formItemOne .el-form-item__content {
display: flex;
}
}
</style>
<template>
<el-dialog
class="HIS-dialog"
:visible.sync="visible"
width="60%"
title="HIS查询"
>
<el-form ref="dataFormHis" :inline="true" :model="dataFormHis" class="demo-form-inline" :rules="dataRule" @keyup.enter.native="findHandle(2)">
<el-form-item prop="patientId">
<el-input v-model="dataFormHis.patientId" placeholder="请输入病历号" clearable @clear="findHandle(1)" />
</el-form-item>
<el-form-item prop="patientName">
<el-input v-model="dataFormHis.patientName" placeholder="请输入姓名" clearable @clear="findHandle(1)" />
</el-form-item>
<el-form-item prop="patientIdNumber">
<el-input v-model="dataFormHis.patientIdNumber" placeholder="请输入身份证号" clearable @clear="findHandle(1)" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="findHandle(2)">查询</el-button>
</el-form-item>
</el-form>
<el-table v-loading="loading" :data="tableData" style="margin-bottom: 32px">
<template slot="empty">
<span style="color: #969799;">{{ tableText }}</span>
</template>
<el-table-column property="patientId" label="病历号" width="100" />
<el-table-column property="patientName" label="患者姓名" width="100" />
<el-table-column property="patientIdNumber" label="身份证号" />
<el-table-column property="patientPhone" label="联系电话" />
<el-table-column property="patientAddress" label="家庭地址" />
<el-table-column label="操作" width="80">
<template slot-scope="scope">
<p class="introduce" @click="introduceHandle(scope.row)">引入</p>
</template>
</el-table-column>
</el-table>
</el-dialog>
</template>
<script>
export default {
props: {
patientTypeList: {
type: Array,
default: () => []
},
isSearch: {
type: String,
default: ''
}
},
data() {
return {
visible: false,
dataFormHis: {
patientId: '',
patientName: '',
patientIdNumber: ''
},
dataForm: {},
tableData: [],
tableText: '请查询所需数据',
loading: false
}
},
computed: {
dataRule() {
return {
patientId: [
{ message: '请输入病历号', trigger: 'blur' }
],
patientName: [
{ message: '请输入姓名', trigger: 'blur' }
],
patientIdNumber: [
{ message: '请输入身份证号', trigger: 'blur' }
]
}
}
},
methods: {
init() {
this.visible = true
this.$nextTick(() => {
this.tableText = '请查询所需数据'
this.$refs.dataFormHis.resetFields() //
this.tableData = []
})
},
// His
async findHandle(flag) {
this.loading = true
if (flag === 2 && !this.dataFormHis.patientId && !this.dataFormHis.patientName && !this.dataFormHis.patientIdNumber) {
return this.$message.error('搜索内容不能为空')
}
const { data: res } = await this.$http.get('/patient/getHisPatient', {
params: this.dataFormHis
})
if (res.code === 0) {
this.loading = false
this.tableData = res.data
if (res.data.length <= 0 && flag === 2) {
this.tableText = '查询成功,未查询到相关数据'
} else if (res.data.length <= 0 && flag === 1) {
this.tableText = '请查询所需数据'
}
} else {
this.loading = false
this.tableText = res.msg
this.$message.error(res.msg)
}
},
//
async introduceHandle(item) {
console.log(item)
const { data: res } = await this.$http.get('/patient/doLeadIn', {
params: {
patientId: item.patientId,
platform: this.isSearch
}
})
if (res.code === 0) {
this.$message.success('引入成功!')
this.$parent.getDataListInitial()
} else {
this.tableText = res.msg
this.$message.error(res.msg)
}
}
}
}
</script>
<style lang="scss" scoped>
.HIS-dialog {
.cycle-display {
.el-form-item__content {
display: flex;
}
.el-input-number {
width: 100px;
margin-right: 16px;
}
}
.introduce {
color: #1F78FF;
cursor: pointer;
}
}
</style>
<style lang="scss">
.HIS-dialog {
.el-form {
display: flex;
}
.el-dialog__header {
margin-bottom:12px
}
.el-dialog__body {
padding-right: 30px;
}
.formItemOne .el-form-item__content {
display: flex;
}
}
</style>

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

@ -1,185 +1,234 @@
<template>
<!-- 屈光发育档案 -->
<div class="dioptricMgt">
<template>
<div v-if="!detailViewVisible">
<div class="patient-info-head">
<el-form :inline="true" :model="dataForm" class="demo-form-inline" @keyup.enter.native="search()">
<el-form-item label="登记号:">
<el-input v-model="dataForm.patId" size="small" clearable placeholder="登记号" @clear="search()" />
</el-form-item>
<el-form-item label="就诊号:">
<el-input v-model="dataForm.patId" size="small" clearable placeholder="就诊号" @clear="search()" />
</el-form-item>
<el-form-item label="患者姓名:">
<el-input v-model="dataForm.patName" placeholder="患者姓名" size="small" clearable @clear="search()" />
</el-form-item>
<el-form-item label="身份证:">
<el-input v-model="dataForm.patIdNumber" size="small" clearable placeholder="身份证" @clear="search()" />
</el-form-item>
<el-form-item prop="dateRange" label="就诊时间" class="form-item-date">
<el-date-picker
v-model="nextVisitTime"
size="small"
type="daterange"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="yyyy-MM-dd"
@change="dateChange"
/>
</el-form-item>
<el-form-item style="flex:1">
<el-button type="primary" icon="el-icon-search" size="small" @click="search()">查询</el-button>
</el-form-item>
</el-form>
</div>
<div style="display: flex;justify-content: space-between;background-color: white;padding: 16px 16px 0">
<div>
<el-select v-model="time" placeholder="请选择" style="width:120px;float: left;margin-right: 16px" size="small">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
<el-button style="margin-left: 0px" size="small" color="white">全部</el-button>
<el-button style="margin-left: 0px" size="small" color="white">未报到</el-button>
<el-button style="margin-left: 0px" size="small" color="white">未诊</el-button>
<el-button style="margin-left: 0px" size="small" color="white">回诊</el-button>
<el-button style="margin-left: 0px" size="small" color="white">就诊中</el-button>
<el-button style="margin-left: 0px" size="small" color="white">已诊</el-button>
</div>
<div>
<el-button size="small" icon="el-icon-plus" @click="addOrUpdateHandle('','','新增患者')">新增</el-button>
<el-button type="primary" size="small" @click="HISHandle">
<svg-icon icon-class="icon-HIS-up" style="font-size:12px;" />
<span style="padding-left:5px;vertical-align: middle;">HIS引入</span>
</el-button>
</div>
<div v-if="!detailViewVisible" style="height: 100%">
<div class="patient-info-head">
<el-form :inline="true" :model="dataForm" class="demo-form-inline" @keyup.enter.native="getDataListInitial()">
<el-form-item label="登记号:">
<el-input v-model="dataForm.patientId" size="small" clearable placeholder="登记号" @clear="getDataListInitial()" />
</el-form-item>
<el-form-item label="患者姓名:">
<el-input v-model="dataForm.patientName" placeholder="患者姓名" size="small" clearable @clear="getDataListInitial()" />
</el-form-item>
<el-form-item label="身份证:">
<el-input v-model="dataForm.patientIdNumber" size="small" clearable placeholder="身份证" @clear="getDataListInitial()" />
</el-form-item>
<el-form-item prop="dateRange" label="就诊时间" class="form-item-date">
<el-date-picker
v-model="nextVisitTime"
size="small"
type="daterange"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="yyyy-MM-dd"
@change="dateChange"
/>
</el-form-item>
<el-form-item style="flex:1">
<el-button type="primary" icon="el-icon-getDataListInitial" size="small" @click="getDataListInitial()">查询</el-button>
</el-form-item>
</el-form>
</div>
<div style="display: flex;justify-content: space-between;background-color: white;padding: 16px 16px 0">
<div>
<el-select v-model="dataForm.searchType" placeholder="请选择" style="width:120px;float: left;margin-right: 16px" size="small" @change="getDataListInitial">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
<el-button v-for="(item,index) in typeList" :key="index" style="margin-left: 0px" size="small" color="white" @click="handleType(item.value)">{{ item.label }}</el-button>
</div>
<div class="patient-info-content">
<el-table
ref="multipleTable"
:data="dataList"
tooltip-effect="dark"
style="width: 100%"
@selection-change="handleSelectionChange"
@sort-change="dataListSortChangeHandle"
>
<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="patientName" label="患者姓名" header-align="center" align="center" />
<el-table-column prop="patientSex" label="患者性别" header-align="center" align="center" />
<el-table-column label="出生日期" header-align="center" align="center">
<template slot-scope="scope">
{{ scope.row.patientBirthday ? $options.filters.dateFilterTwo( scope.row.patientBirthday): '- ' }}
</template>
</el-table-column>
<el-table-column prop="patientSex" label="门诊医师" header-align="center" align="center" />
<el-table-column prop="patientSex" label="视光医师" header-align="center" align="center" />
<el-table-column prop="patientSex" label="就诊时间" header-align="center" align="center" />
<el-table-column prop="patientSex" label="分诊序号" header-align="center" align="center" />
<el-table-column prop="patientSex" label="叫号状态" header-align="center" align="center" />
<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>
<span
style="color: #1890ff; padding-right: 8px"
class="operation-details"
@click="browseClick(scope.row)"
>接诊</span>
<span
style="color: #1890ff; padding-right: 8px"
class="operation-details"
@click="showDetail(scope.row)"
>患者360</span>
</template>
</el-table-column>
</el-table>
<el-pagination background layout="total,prev, pager, next" :total="total" :current-page.sync="page" @current-change="pageCurrentChangeHandle" />
<div>
<el-button type="primary" size="small" icon="el-icon-plus" @click="addOrUpdateHandle('','','新增患者')">新增</el-button>
<el-button type="primary" size="small" @click="HISHandle">
<svg-icon icon-class="icon-HIS-up" style="font-size:12px;" />
<span style="padding-left:5px;vertical-align: middle;">HIS引入</span>
</el-button>
</div>
</div>
<!-- 弹窗, 新增 / 修改 -->
<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" :patient-type-list="patientTypeList" @refreshDataList="search" />
<!-- 修改身份证 -->
<edit-patid v-if="editPatidVisible" ref="editPatidRef" @editPatidVisible="editPatidVisible=false" @refreshDataList="search" />
<!-- HIS引入弹框 -->
<his-add v-if="HisAddVisible" ref="HisAddRef" />
<!-- 详情页 -->
<detail-view v-if="detailViewVisible" :id="detailId" ref="viewRef" platform="3" :patient-id="patientId" :patient-id-number="patientIdNumber" is-search="" @detailViewVisible="detailViewVisible=false" />
</template>
<div class="patient-info-content">
<el-table
ref="multipleTable"
:data="dataList"
tooltip-effect="dark"
style="width: 100%"
>
<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 }}
</template>
</el-table-column>
<el-table-column label="患者姓名" header-align="center" align="center">
<template slot-scope="scope">
{{ scope.row.patientName }}
</template>
</el-table-column>
<el-table-column prop="patientSex" label="患者性别" header-align="center" align="center" />
<el-table-column label="出生日期" header-align="center" align="center">
<template slot-scope="scope">
{{ scope.row.patientBirthday ? $options.filters.dateFilterTwo( scope.row.patientBirthday): '- ' }}
</template>
</el-table-column>
<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="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="showDetail(scope.row)"
>接诊</span>
<span
style="color: #1890ff; padding-right: 8px"
class="operation-details"
@click="showDetail(scope.row)"
>患者360</span>
</template>
</el-table-column>
</el-table>
<el-pagination background layout="total,prev, pager, next" :total="total" :current-page.sync="page" @current-change="pageCurrentChangeHandle" />
</div>
</div>
<!-- 弹窗, 新增 / 修改 -->
<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" :patient-type-list="patientTypeList" @refreshDataList="getDataListInitial" />
<!-- HIS引入弹框 -->
<his-add v-if="HisAddVisible" ref="HisAddRef" :is-search="'3'" />
<!-- 详情页 -->
<detail-view v-if="detailViewVisible" ref="viewRef" :is-search="'3'" :patient-id="patientId" :patient-id-number="patientIdNumber" @detailViewVisible="detailViewVisible=false" />
</div>
</template>
<script>
import checked from '@/mixins/checked'
import headTemplate from '@/components/head'
import mixinViewModule from '@/mixins/view-module'
import tableAutoHeight from '@/mixins/tableAutoHeight'
import AddOrUpdate from './patient-add-or-update'
import editPatid from './editPatid'
import hisAdd from './HIS-add'
import detailView from '@/components/360View/index1' // 360
export default {
components: {
headTemplate,
hisAdd,
AddOrUpdate,
editPatid,
detailView,
hisAdd
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: [checked, mixinViewModule],
mixins: [mixinViewModule, tableAutoHeight],
data() {
return {
options: [{
value: '选项1',
label: '今日'
}, {
value: '选项2',
label: '近三天'
}, {
value: '选项3',
label: '近一周'
}, {
value: '选项4',
label: '近一个月 '
}, {
value: '选项5',
label: '全部'
}],
time: '',
mixinViewModuleOptions: {
getDataListURL: '/sg/patient/page',
getDataListURL: '/patient/page',
getDataListIsPage: true
},
cheackAllFooter: false,
options: [
{
value: '0',
label: '今日'
}, {
value: '1',
label: '近三天'
}, {
value: '2',
label: '近一周'
}, {
value: '3',
label: '近一个月 '
}, {
value: '',
label: '全部'
}],
typeList: [
{
value: '',
label: '全部'
}, {
value: '1',
label: '未报到'
}, {
value: '2',
label: '未诊'
}, {
value: '4',
label: '回诊 '
}, {
value: '3',
label: '就诊中'
}, {
value: '已诊',
label: '已诊'
}],
nextVisitTime: [],
isShowPatient: true,
patientTypeList: [],
detailViewVisible: false,
HisAddVisible: false,
editPatidVisible: false,
dataForm: {
platform: '3',
patId: '',
patName: '',
doctorName: '',
platform: 3,
patientId: '',
beginDate: '',
endDate: '',
slBeginDate: '',
slEndDate: '',
diagNoseName: '',
patIdNumber: ''
},
deleteParams: {
drgsName: window.localStorage.getItem('identity')
searchType: '',
patientName: '',
patientStatus: '',
patientIdNumber: ''
},
doctorNameList: [],
patientTypeList: [],
currentTableList: [],
addGroupVisible: false,
patientId: '',
patientIdNumber: '',
detailId: ''
}
@ -198,54 +247,57 @@ export default {
methods: {
//
browseClick(scopeRow) {
window.sessionStorage.removeItem('itemCurrentIndex')
window.sessionStorage.removeItem('itemListIndex')
this.$router.push({
path: '/patientInfo',
path: '/seeDoctor',
query: {
info: this.$Base64.encode(JSON.stringify({
patientIdNumber: scopeRow.patientIdNumber,
patientId: scopeRow.patientId
// id: scopeRow.id,
patientCentreId: scopeRow.patientCentreId,
title: '门诊'
// crfId: scopeRow.crfId,
// patId: scopeRow.patId
// patientId: scopeRow.patientId
}))
}
})
},
//
dateChange(e) {
if (this.dataForm.drgsName === '青光眼') {
this.dataForm.beginDate = e ? e[0] : ''
this.dataForm.endDate = e ? e[1] : ''
} else {
this.dataForm.slBeginDate = e ? e[0] : ''
this.dataForm.slEndDate = e ? e[1] : ''
}
this.search()
this.dataForm.beginDate = e ? e[0] : ''
this.dataForm.endDate = e ? e[1] : ''
this.getDataListInitial()
},
//
handleType(value) {
this.dataForm.patientStatus = value
this.getDataListInitial()
},
//
showDetail(scopeRow) {
console.log(scopeRow)
this.detailViewVisible = true
this.patientId = scopeRow.patientId
this.patientIdNumber = scopeRow.patientIdNumber
this.patientIdNumber = '330282200110051983'
this.patientId = '797064'
this.$nextTick(() => {
// // id--
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()
})
},
//
noticeClick(patIdNumber, scopeRow) {
this.$router.push({
path: '/seeDoctor',
query: {
info: this.$Base64.encode(JSON.stringify({
patientIdNumber: scopeRow.patIdNumber,
patId: scopeRow.patId
}))
}
// His
HISHandle() {
this.HisAddVisible = true
this.$nextTick(() => {
this.$refs.HisAddRef.init()
})
},
//
@ -260,43 +312,6 @@ export default {
} else {
this.$message.error(res.msg)
}
},
// //
// async gettPatType() {
// const { data: res } = await this.$http.get('/pat/Manage/selectPatType', {
// params: {
// drgsName: window.localStorage.getItem('identity')
// }
// })
// if (res.code === 0) {
// this.patientTypeList = res.data
// } else {
// this.$message.error(res.msg)
// }
// },
//
handleCommandDropdowm(patIdNumber, scopeRow, e) {
if (e === '编辑') {
this.addOrUpdateHandle(patIdNumber, scopeRow, '修改患者')
} else if (e === '修改身份证') {
this.editPatidVisible = true
this.$nextTick(() => {
this.$refs.editPatidRef.dataForm.newIdNumber = patIdNumber
this.$refs.editPatidRef.dataForm.oldIdNumber = patIdNumber
this.$refs.editPatidRef.init()
})
} else if (e === '告知书') {
this.noticeClick(patIdNumber, scopeRow, e)
} else if (e === '删除') {
this.deleteHandle(patIdNumber, 'patIdNumber')
}
},
// His
HISHandle() {
this.HisAddVisible = true
this.$nextTick(() => {
this.$refs.HisAddRef.init()
})
}
}
@ -304,8 +319,7 @@ export default {
</script>
<style lang="scss" scoped>
.dioptricMgt {
width: 100%;
height: calc(100vh - 70px);
height: 100%;
.patient-info-head,
.patient-info-content {
background: #fff;
@ -314,11 +328,12 @@ export default {
}
}
.patient-info-content {
padding: 16px;
margin-bottom: 45px;
width: 100%;
padding: 10px 16px;
box-sizing: border-box;
}
.patient-info-head {
margin-bottom: 16px;
margin-bottom: 10px;
padding: 10px 16px;
}
.operation-delete,
@ -350,33 +365,11 @@ export default {
width: 100%;
}
.form-item-date .el-form-item__content {
min-width: 180px;
}
min-width: 180px;
}
}
.el-select {
width: 100%;
}
.detail-view {
height: 100%;
background: #0c1016;
padding: 0;
}
.detail-view .el-dialog .el-dialog__header > .el-dialog__title{
color: #FFFFFF;
}
.detail-view .el-dialog > .el-dialog__header{
width: 100%;
height: 48px;
line-height: 48px;
text-align: center;
background: linear-gradient(180deg,#0c1016, #2c3543 100%);
padding: 0;
}
.detail-view .el-dialog > .el-dialog__body{
height: calc(100% - 48px);
flex: 1;
background: #0c1016;
padding: 0;
}
}
</style>

430
src/page-subspecialty/views/modules/optometryManagement/dioptric/patient-add-or-update.vue

@ -1,216 +1,214 @@
<template>
<el-dialog
class="patientDialog"
:visible.sync="visible"
width="30%"
:title="dataForm.title"
>
<el-form ref="dataForm" :model="dataForm" :rules="dataRule">
<el-form-item v-if="dataForm.drgsName == '眼视光'" label="病历号:" label-width="90px" prop="patId" class="formItemOne">
<el-input v-model="dataForm.patId" placeholder="请输入病历号" />
</el-form-item>
<el-form-item v-if="dataForm.drgsName == '青光眼'" label="患者ID:" label-width="90px" prop="patId" class="formItemOne">
<el-input v-model="dataForm.patId" placeholder="请输入患者ID" />
</el-form-item>
<el-form-item label="患者姓名:" label-width="90px" prop="patName">
<el-input v-model="dataForm.patName" placeholder="请输入姓名" />
</el-form-item>
<el-form-item v-if="!dataForm.id" label="身份证号:" label-width="90px" prop="patIdNumber">
<el-input v-model="dataForm.patIdNumber" placeholder="请输入身份证号 " />
</el-form-item>
<el-form-item label="联系电话:" label-width="90px" prop="patPhone">
<el-input v-model="dataForm.patPhone" placeholder="请输入手机号" />
</el-form-item>
<el-form-item label="家庭地址:" label-width="90px" prop="patAddress">
<el-input v-model="dataForm.patAddress" placeholder="请输入地址" />
</el-form-item>
<!-- <el-form-item v-if="dataForm.drgsName == '眼视光'" label="患者类别:" label-width="90px" prop="patType">
<el-select v-model="dataForm.patType" placeholder="请选择患者类别" clearable>
<el-option v-for="(item,index) in patientTypeList " :key="index" :label="item" :value="item" />
</el-select>
</el-form-item> -->
<!-- <el-form-item v-if="dataForm.drgsName == '青光眼'" label="周期:" label-width="90px" prop="revisitCycles" class="cycle-display">
<el-input-number
v-model="dataForm.revisitCycles"
controls-position="right"
:min="1"
/>
<el-radio-group v-model="dataForm.revisitCyclesUnit">
<el-radio-button label="3"></el-radio-button>
<el-radio-button label="4"></el-radio-button>
<el-radio-button label="2"></el-radio-button>
</el-radio-group>
</el-form-item> -->
<el-form-item v-if="dataForm.drgsName == '青光眼'" label="备注:" label-width="90px" prop="remarks">
<el-input v-model="dataForm.remarks" type="textarea" />
</el-form-item>
</el-form>
<template slot="footer">
<el-button @click="visible = false">{{ $t('cancel') }}</el-button>
<el-button type="primary" @click="dataFormSubmitHandle()">{{ $t('confirm') }}</el-button>
</template>
</el-dialog>
</template>
<script>
import debounce from 'lodash/debounce'
import { isMobile, isIDNumber } from '@/utils/validate'
export default {
props: {
patientTypeList: {
type: Array,
default: () => []
}
},
data() {
return {
visible: false,
dataForm: {
patId: '',
patName: '',
patIdNumber: '',
patPhone: '',
patAddress: '',
// patType: '',
revisitCycles: '1', //
revisitCyclesUnit: '3', // 1234
remarks: '',
drgsName: window.localStorage.getItem('identity')
}
}
},
computed: {
dataRule() {
var validataMobile = (rule, value, callback) => {
if (value && !isMobile(value)) {
return callback(new Error('您输入的手机号格式不正确'))
}
callback()
}
// var validataIDNumber = (rule, value, callback) => {
// if (value && !isIDNumber(value)) {
// return callback(new Error(''))
// } else if (!value) {
// return callback(new Error(''))
// }
// callback()
// }
return {
patId: [
{ required: true, message: '请输入病历号', trigger: 'blur' }
],
patName: [
{ required: true, message: '请输入患者姓名', trigger: 'blur' }
],
patIdNumber: [
{ required: true, message: '请输入身份证号', trigger: 'blur' }
],
patPhone: [
{ validator: validataMobile, trigger: 'blur' }
],
patAddress: [
{ message: '请输入家庭地址', trigger: 'blur' }
]
// patType: [
// { message: '', trigger: 'change' }
// ]
}
}
},
methods: {
init() {
this.visible = true
this.$nextTick(() => {
this.$refs.dataForm.resetFields() //
this.dataForm.patIdNumber = ''
this.dataForm.patName = ''
this.dataForm.patAddress = ''
this.dataForm.revisitCycles = '1'
this.dataForm.revisitCyclesUnit = '3'
if (this.dataForm.params.patIdNumber && this.dataForm.title !== 'HIS引入') {
this.getInfo()
} else if (this.dataForm.title === 'HIS引入') {
this.getHisInfo()
}
})
},
//
getInfo() {
this.$http.get('/pat/Manage', {
params: {
patIdNumber: this.dataForm.params.patIdNumber,
drgsName: this.dataForm.drgsName,
isSearch: ''
}
}).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.dataForm = {
...this.dataForm,
...res.data
}
}).catch(() => {})
},
// His
getHisInfo() {
this.dataForm = { ...this.dataForm, ...this.dataForm.params, drgsName: window.localStorage.getItem('identity') }
this.dataForm.revisitCycles = this.dataForm.revisitCycles ? this.dataForm.revisitCycles : '1'
this.dataForm.revisitCyclesUnit = this.dataForm.revisitCyclesUnit ? this.dataForm.revisitCyclesUnit : '3'
},
//
dataFormSubmitHandle: debounce(function() {
if (this.dataForm.title === 'HIS引入') {
// this.$parent.HisAddVisible = false
}
this.$refs.dataForm.validate((valid) => {
if (!valid) {
return false
}
this.$http[!this.dataForm.id ? 'post' : 'put']('/pat/Manage', this.dataForm).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: () => {
this.visible = false
this.$emit('refreshDataList')
}
})
}).catch(() => {})
})
}, 1000, { leading: true, trailing: false })
}
}
</script>
<style lang="scss" scoped>
.patientDialog {
.cycle-display {
.el-form-item__content {
display: flex;
}
.el-input-number {
width: 100px;
margin-right: 16px;
}
}
}
</style>
<style lang="scss">
.patientDialog {
.el-dialog__header {
margin-bottom:12px
}
.el-dialog__body {
padding-right: 30px;
}
.formItemOne .el-form-item__content {
display: flex;
}
}
</style>
<template>
<el-dialog
class="patientDialog"
:visible.sync="visible"
width="40%"
:title="dataForm.title"
@close="closeDialog"
>
<el-form ref="dataForm" :model="dataForm" :rules="dataRule">
<el-form-item label="病历号:" label-width="90px" prop="patientId" class="formItemOne">
<el-input v-model="dataForm.patientId" placeholder="请输入病历号" />
</el-form-item>
<el-form-item label="患者姓名:" label-width="90px" prop="patientName">
<el-input v-model="dataForm.patientName" placeholder="请输入姓名" />
</el-form-item>
<el-form-item label="身份证号:" label-width="90px" prop="patientIdNumber">
<el-input v-model="dataForm.patientIdNumber" placeholder="请输入身份证号 " />
</el-form-item>
<el-form-item label="出生日期:" label-width="90px" prop="patientBirthday">
<el-date-picker
v-model="dataForm.patientBirthday"
align="right"
type="date"
placeholder="选择日期"
value-format="yyyy-MM-dd"
/>
</el-form-item>
<el-form-item label="性别:" label-width="90px" prop="gender">
<el-radio-group v-model="dataForm.patientSex" size="medium">
<el-radio-button label="男"></el-radio-button>
<el-radio-button label="女"></el-radio-button>
<el-radio-button label="保密">保密</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item label="联系电话:" label-width="90px" prop="patientPhone">
<el-input v-model="dataForm.patientPhone" placeholder="请输入手机号" />
</el-form-item>
<el-form-item label="家庭地址:" label-width="90px" prop="patientAddress">
<el-input v-model="dataForm.patientAddress" placeholder="请输入地址" />
</el-form-item>
<!-- <el-form-item label="随访方案:" label-width="90px" prop="visitId">-->
<!-- <el-select v-model="dataForm.visitId" placeholder="请选择随访方案">-->
<!-- <el-option v-for="item in visitList" :key="item.id" :label="item.name" :value="item.id" />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<el-form-item label="备注:" label-width="90px" prop="remarks">
<el-input v-model="dataForm.remark" type="textarea" />
</el-form-item>
</el-form>
<template slot="footer">
<el-button @click="visible = false">{{ $t('cancel') }}</el-button>
<el-button type="primary" @click="dataFormSubmitHandle()">{{ $t('confirm') }}</el-button>
</template>
</el-dialog>
</template>
<script>
import debounce from 'lodash/debounce'
import { isMobile, isIDNumber } from '@/utils/validate'
export default {
props: {
patientTypeList: {
type: Array,
default: () => []
}
},
data() {
return {
visible: false,
dataForm: {
platform: 3,
patientId: '',
patientName: '',
patientIdNumber: '',
patientSex: '男',
patientPhone: '',
patientAddress: '',
patientBirthday: '',
visitId: '',
remark: ''
},
params: {},
visitList: []
}
},
computed: {
dataRule() {
var validataMobile = (rule, value, callback) => {
if (value && !isMobile(value)) {
return callback(new Error('您输入的手机号格式不正确'))
}
callback()
}
// var validataIDNumber = (rule, value, callback) => {
// if (value && !isIDNumber(value)) {
// return callback(new Error(''))
// } else if (!value) {
// return callback(new Error(''))
// }
// callback()
// }
return {
patientId: [
{ required: true, message: '请输入病历号', trigger: 'blur' }
],
patientName: [
{ required: true, message: '请输入患者姓名', trigger: 'blur' }
],
patientIdNumber: [
{ required: true, message: '请输入患者身份证号', trigger: 'blur' }
]
}
}
},
methods: {
init() {
this.visible = true
this.$nextTick(() => {
this.$refs.dataForm.resetFields() //
// this.getVisitList() // 访
if (this.params.patientIdNumber && this.dataForm.title !== 'HIS引入') {
this.getInfo()
} else if (this.dataForm.title === 'HIS引入') {
this.getHisInfo()
}
})
},
//
getInfo() {
this.$http.get(`/patient/manage/${this.params.patientCentreId}/${this.params.patientIdNumber}`).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.dataForm = {
...this.dataForm,
...res.data
}
}).catch(() => {})
},
// His
getHisInfo() {
this.dataForm = { ...this.dataForm, ...this.params }
this.dataForm.revisitCycles = this.dataForm.revisitCycles ? this.dataForm.revisitCycles : '1'
this.dataForm.revisitCyclesUnit = this.dataForm.revisitCyclesUnit ? this.dataForm.revisitCyclesUnit : '3'
console.log(this.dataForm)
},
// 访
async getVisitList() {
const { data: res } = await this.$http.get('/visit/getList')
if (res.code === 0) {
this.visitList = res.data
} else {
this.$message.error(res.msg)
}
},
//
dataFormSubmitHandle: debounce(function() {
this.$refs.dataForm.validate((valid) => {
if (!valid) {
return false
}
this.$http[!this.dataForm.id ? 'post' : 'put']('/patient/savePatient', this.dataForm).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: () => {
this.visible = false
this.$emit('refreshDataList')
}
})
}).catch(() => {})
})
}, 1000, { leading: true, trailing: false }),
//
closeDialog() {
this.$emit('closeDialog')
}
}
}
</script>
<style lang="scss" scoped>
.patientDialog {
.cycle-display {
.el-form-item__content {
display: flex;
}
.el-input-number {
width: 100px;
margin-right: 16px;
}
}
}
</style>
<style lang="scss">
.patientDialog {
.el-dialog__header {
margin-bottom:12px
}
.el-dialog__body {
padding-right: 30px;
}
.formItemOne .el-form-item__content {
display: flex;
}
.el-date-editor.el-input, .el-date-editor.el-input__inner {
width: 100%;
}
}
</style>

25
src/page-subspecialty/views/modules/outpatientManagement/call/HIS-add.vue

@ -19,7 +19,7 @@
<el-button type="primary" @click="findHandle(2)">查询</el-button>
</el-form-item>
</el-form>
<el-table v-loading="loading" :data="tableData">
<el-table v-loading="loading" :data="tableData" style="margin-bottom: 32px">
<template slot="empty">
<span style="color: #969799;">{{ tableText }}</span>
</template>
@ -43,6 +43,10 @@ export default {
patientTypeList: {
type: Array,
default: () => []
},
isSearch: {
type: String,
default: ''
}
},
data() {
@ -89,7 +93,7 @@ export default {
if (flag === 2 && !this.dataFormHis.patientId && !this.dataFormHis.patientName && !this.dataFormHis.patientIdNumber) {
return this.$message.error('搜索内容不能为空')
}
const { data: res } = await this.$http.get('/patient/manage/getHisPatientList', {
const { data: res } = await this.$http.get('/patient/getHisPatient', {
params: this.dataFormHis
})
if (res.code === 0) {
@ -107,8 +111,21 @@ export default {
}
},
//
introduceHandle(scopwRow) {
this.$parent.addOrUpdateHandle('', scopwRow, 'HIS引入')
async introduceHandle(item) {
console.log(item)
const { data: res } = await this.$http.get('/patient/doLeadIn', {
params: {
patientId: item.patientId,
platform: this.isSearch
}
})
if (res.code === 0) {
this.$message.success('引入成功!')
this.$parent.getDataListInitial()
} else {
this.tableText = res.msg
this.$message.error(res.msg)
}
}
}
}

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

@ -5,13 +5,13 @@
<div class="patient-info-head">
<el-form :inline="true" :model="dataForm" class="demo-form-inline" @keyup.enter.native="getDataListInitial()">
<el-form-item label="登记号:">
<el-input v-model="dataForm.patId" size="small" clearable placeholder="登记号" @clear="getDataListInitial()" />
<el-input v-model="dataForm.patientId" size="small" clearable placeholder="登记号" @clear="getDataListInitial()" />
</el-form-item>
<el-form-item label="患者姓名:">
<el-input v-model="dataForm.patName" placeholder="患者姓名" size="small" clearable @clear="getDataListInitial()" />
<el-input v-model="dataForm.patientName" placeholder="患者姓名" size="small" clearable @clear="getDataListInitial()" />
</el-form-item>
<el-form-item label="身份证:">
<el-input v-model="dataForm.patIdNumber" size="small" clearable placeholder="身份证" @clear="getDataListInitial()" />
<el-input v-model="dataForm.patientIdNumber" size="small" clearable placeholder="身份证" @clear="getDataListInitial()" />
</el-form-item>
<el-form-item prop="dateRange" label="就诊时间" class="form-item-date">
<el-date-picker
@ -32,7 +32,7 @@
</div>
<div style="display: flex;justify-content: space-between;background-color: white;padding: 16px 16px 0">
<div>
<el-select v-model="time" placeholder="请选择" style="width:120px;float: left;margin-right: 16px" size="small">
<el-select v-model="dataForm.searchType" placeholder="请选择" style="width:120px;float: left;margin-right: 16px" size="small" @change="getDataListInitial">
<el-option
v-for="item in options"
:key="item.value"
@ -40,7 +40,7 @@
:value="item.value"
/>
</el-select>
<el-button style="margin-left: 0px" size="small" color="white" v-for="(item,index) in typeList" :key="index">{{ item.value }}</el-button>
<el-button v-for="(item,index) in typeList" :key="index" style="margin-left: 0px" size="small" color="white" @click="handleType(item.value)">{{ item.label }}</el-button>
</div>
<div>
<el-button type="primary" size="small" icon="el-icon-plus" @click="addOrUpdateHandle('','','新增患者')">新增</el-button>
@ -58,7 +58,11 @@
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 label="状态" header-align="center" align="center">
<template slot-scope="scope">
{{ scope.row.patientStatus | patientStatus }}
</template>
</el-table-column>
<el-table-column label="患者姓名" header-align="center" align="center">
<template slot-scope="scope">
{{ scope.row.patientName }}
@ -70,27 +74,32 @@
{{ scope.row.patientBirthday ? $options.filters.dateFilterTwo( scope.row.patientBirthday): '- ' }}
</template>
</el-table-column>
<el-table-column prop="patientSex" label="门诊医师" header-align="center" align="center" />
<el-table-column prop="patientSex" label="视光医师" header-align="center" align="center" />
<el-table-column prop="patientSex" label="就诊时间" header-align="center" align="center" />
<el-table-column prop="patientSex" label="分诊序号" header-align="center" align="center" />
<el-table-column prop="patientSex" label="叫号状态" header-align="center" align="center" />
<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="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>
<span
style="color: #1890ff; padding-right: 8px"
class="operation-details"
@click="browseClick(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>
@ -101,9 +110,9 @@
<!-- 弹窗, 新增 / 修改 -->
<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" :patient-type-list="patientTypeList" @refreshDataList="getDataListInitial" />
<!-- HIS引入弹框 -->
<his-add v-if="HisAddVisible" ref="HisAddRef" />
<his-add v-if="HisAddVisible" ref="HisAddRef" :is-search="'1'" />
<!-- 详情页 -->
<detail-view v-if="detailViewVisible" platform="1" :id="detailId" ref="viewRef" :patient-id="patientId" :patient-id-number="patientIdNumber" @detailViewVisible="detailViewVisible=false" />
<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" />
</div>
</template>
<script>
@ -116,7 +125,48 @@ export default {
components: {
hisAdd,
AddOrUpdate,
detailView,
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() {
@ -125,60 +175,60 @@ export default {
getDataListURL: '/patient/page',
getDataListIsPage: true
},
options: [{
value: '选项1',
label: '今日'
}, {
value: '选项2',
label: '近三天'
}, {
value: '选项3',
label: '近一周'
}, {
value: '选项4',
label: '近一个月 '
}, {
value: '选项5',
label: '全部'
}],
typeList: [{
value: '全部',
label: '全部'
}, {
value: '未报到',
label: '未报到'
}, {
value: '未诊',
label: '未诊'
}, {
value: '回诊',
label: '回诊 '
}, {
value: '就诊中',
label: '就诊中'
}, {
value: '已诊',
label: '已诊'
}],
options: [
{
value: '0',
label: '今日'
}, {
value: '1',
label: '近三天'
}, {
value: '2',
label: '近一周'
}, {
value: '3',
label: '近一个月 '
}, {
value: '',
label: '全部'
}],
typeList: [
{
value: '',
label: '全部'
}, {
value: '1',
label: '未报到'
}, {
value: '2',
label: '未诊'
}, {
value: '4',
label: '回诊 '
}, {
value: '3',
label: '就诊中'
}, {
value: '已诊',
label: '已诊'
}],
nextVisitTime: [],
patientTypeList: [],
detailViewVisible: false,
HisAddVisible: false,
onlyRead: false,
dataForm: {
platform: 1,
patientId: '',
beginDate: '',
endDate: '',
searchType: '',
patientName: '',
// doctorName: '',
// beginDate: '',
// endDate: '',
// slBeginDate: '',
// slEndDate: '',
// diagNoseName: '',
patientIdNumber: '',
platform: '1'
patientStatus: '',
patientIdNumber: ''
},
doctorNameList: [],
currentTableList: [],
time: '',
patientId: '',
patientIdNumber: '',
detailId: ''
@ -215,17 +265,19 @@ export default {
},
//
dateChange(e) {
if (this.dataForm.drgsName === '青光眼') {
this.dataForm.beginDate = e ? e[0] : ''
this.dataForm.endDate = e ? e[1] : ''
} else {
this.dataForm.slBeginDate = e ? e[0] : ''
this.dataForm.slEndDate = e ? e[1] : ''
}
this.dataForm.beginDate = e ? e[0] : ''
this.dataForm.endDate = e ? e[1] : ''
this.getDataListInitial()
},
//
handleType(value) {
this.dataForm.patientStatus = value
this.getDataListInitial()
},
//
showDetail(scopeRow) {
showDetail(scopeRow, index) {
console.log(scopeRow)
this.onlyRead = index !== 2
this.detailViewVisible = true
this.patientId = scopeRow.patientId
this.patientIdNumber = scopeRow.patientIdNumber

22
src/page-subspecialty/views/modules/outpatientManagement/call/patient-add-or-update.vue

@ -38,13 +38,13 @@
<el-form-item label="家庭地址:" label-width="90px" prop="patientAddress">
<el-input v-model="dataForm.patientAddress" placeholder="请输入地址" />
</el-form-item>
<el-form-item label="随访方案:" label-width="90px" prop="visitId">
<el-select v-model="dataForm.visitId" placeholder="请选择随访方案">
<el-option v-for="item in visitList" :key="item.id" :label="item.name" :value="item.id" />
</el-select>
</el-form-item>
<!-- <el-form-item label="随访方案:" label-width="90px" prop="visitId">-->
<!-- <el-select v-model="dataForm.visitId" placeholder="请选择随访方案">-->
<!-- <el-option v-for="item in visitList" :key="item.id" :label="item.name" :value="item.id" />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<el-form-item label="备注:" label-width="90px" prop="remarks">
<el-input v-model="dataForm.remarks" type="textarea" />
<el-input v-model="dataForm.remark" type="textarea" />
</el-form-item>
</el-form>
<template slot="footer">
@ -68,6 +68,7 @@ export default {
return {
visible: false,
dataForm: {
platform: 1,
patientId: '',
patientName: '',
patientIdNumber: '',
@ -76,7 +77,7 @@ export default {
patientAddress: '',
patientBirthday: '',
visitId: '',
remarks: ''
remark: ''
},
params: {},
visitList: []
@ -116,7 +117,7 @@ export default {
this.visible = true
this.$nextTick(() => {
this.$refs.dataForm.resetFields() //
this.getVisitList() // 访
// this.getVisitList() // 访
if (this.params.patientIdNumber && this.dataForm.title !== 'HIS引入') {
this.getInfo()
} else if (this.dataForm.title === 'HIS引入') {
@ -154,14 +155,11 @@ export default {
},
//
dataFormSubmitHandle: debounce(function() {
if (this.dataForm.title === 'HIS引入') {
// this.$parent.HisAddVisible = false
}
this.$refs.dataForm.validate((valid) => {
if (!valid) {
return false
}
this.$http[!this.dataForm.id ? 'post' : 'put']('/patient/manage', this.dataForm).then(({ data: res }) => {
this.$http[!this.dataForm.id ? 'post' : 'put']('/patient/savePatient', this.dataForm).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}

25
src/page-subspecialty/views/modules/outpatientManagement/treat/HIS-add.vue

@ -19,7 +19,7 @@
<el-button type="primary" @click="findHandle(2)">查询</el-button>
</el-form-item>
</el-form>
<el-table v-loading="loading" :data="tableData">
<el-table v-loading="loading" :data="tableData" style="margin-bottom: 32px">
<template slot="empty">
<span style="color: #969799;">{{ tableText }}</span>
</template>
@ -43,6 +43,10 @@ export default {
patientTypeList: {
type: Array,
default: () => []
},
isSearch: {
type: String,
default: ''
}
},
data() {
@ -89,7 +93,7 @@ export default {
if (flag === 2 && !this.dataFormHis.patientId && !this.dataFormHis.patientName && !this.dataFormHis.patientIdNumber) {
return this.$message.error('搜索内容不能为空')
}
const { data: res } = await this.$http.get('/patient/manage/getHisPatientList', {
const { data: res } = await this.$http.get('/patient/getHisPatient', {
params: this.dataFormHis
})
if (res.code === 0) {
@ -107,8 +111,21 @@ export default {
}
},
//
introduceHandle(scopwRow) {
this.$parent.addOrUpdateHandle('', scopwRow, 'HIS引入')
async introduceHandle(item) {
console.log(item)
const { data: res } = await this.$http.get('/patient/doLeadIn', {
params: {
patientId: item.patientId,
platform: this.isSearch
}
})
if (res.code === 0) {
this.$message.success('引入成功!')
this.$parent.getDataListInitial()
} else {
this.tableText = res.msg
this.$message.error(res.msg)
}
}
}
}

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

@ -5,16 +5,13 @@
<div class="patient-info-head">
<el-form :inline="true" :model="dataForm" class="demo-form-inline" @keyup.enter.native="getDataListInitial()">
<el-form-item label="登记号:">
<el-input v-model="dataForm.patId" size="small" clearable placeholder="登记号" @clear="getDataListInitial()" />
</el-form-item>
<el-form-item label="就诊号:">
<el-input v-model="dataForm.patId" size="small" clearable placeholder="就诊号" @clear="getDataListInitial()" />
<el-input v-model="dataForm.patientId" size="small" clearable placeholder="登记号" @clear="getDataListInitial()" />
</el-form-item>
<el-form-item label="患者姓名:">
<el-input v-model="dataForm.patName" placeholder="患者姓名" size="small" clearable @clear="getDataListInitial()" />
<el-input v-model="dataForm.patientName" placeholder="患者姓名" size="small" clearable @clear="getDataListInitial()" />
</el-form-item>
<el-form-item label="身份证:">
<el-input v-model="dataForm.patIdNumber" size="small" clearable placeholder="身份证" @clear="getDataListInitial()" />
<el-input v-model="dataForm.patientIdNumber" size="small" clearable placeholder="身份证" @clear="getDataListInitial()" />
</el-form-item>
<el-form-item prop="dateRange" label="就诊时间" class="form-item-date">
<el-date-picker
@ -35,7 +32,7 @@
</div>
<div style="display: flex;justify-content: space-between;background-color: white;padding: 16px 16px 0">
<div>
<el-select v-model="time" placeholder="请选择" style="width:120px;float: left;margin-right: 16px" size="small">
<el-select v-model="dataForm.searchType" placeholder="请选择" style="width:120px;float: left;margin-right: 16px" size="small" @change="getDataListInitial">
<el-option
v-for="item in options"
:key="item.value"
@ -43,7 +40,7 @@
:value="item.value"
/>
</el-select>
<el-button v-for="(item,index) in typeList" :key="index" style="margin-left: 0px" size="small" color="white">{{ item.value }}</el-button>
<el-button v-for="(item,index) in typeList" :key="index" style="margin-left: 0px" size="small" color="white" @click="handleType(item.value)">{{ item.label }}</el-button>
</div>
<div>
<el-button type="primary" size="small" icon="el-icon-plus" @click="addOrUpdateHandle('','','新增患者')">新增</el-button>
@ -61,22 +58,33 @@
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 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 }}
</template>
</el-table-column>
<el-table-column prop="patientName" label="患者姓名" header-align="center" align="center" />
<!-- <el-table-column prop="patientSex" label="患者性别" header-align="center" align="center" />-->
<el-table-column label="出生日期" header-align="center" align="center">
<template slot-scope="scope">
{{ scope.row.patientBirthday ? $options.filters.dateFilterTwo( scope.row.patientBirthday): '- ' }}
</template>
</el-table-column>
<el-table-column prop="patientSex" label="门诊医师" header-align="center" align="center" />
<el-table-column prop="patientSex" label="治疗项目" header-align="center" align="center" />
<el-table-column prop="patientSex" label="眼别" header-align="center" align="center" />
<el-table-column prop="mzDoctorName" label="门诊医师" header-align="center" align="center" />
<el-table-column prop="zlPorject" label="治疗项目" header-align="center" align="center" />
<el-table-column prop="zlEye" label="眼别" header-align="center" align="center">
<template slot-scope="scope">
{{ scope.row.zlEye === 'os' ? '左眼' : ( scope.row.zlEye === 'od' ? '右眼' : '') }}
</template>
</el-table-column>
<el-table-column prop="patientSex" label="治疗医师" header-align="center" align="center" />
<el-table-column prop="patientSex" label="就诊时间" header-align="center" align="center" />
<el-table-column prop="patientSex" label="分诊序号" header-align="center" align="center" />
<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="patientSex" 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
@ -103,9 +111,9 @@
<!-- 弹窗, 新增 / 修改 -->
<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" :patient-type-list="patientTypeList" @refreshDataList="getDataListInitial" />
<!-- HIS引入弹框 -->
<his-add v-if="HisAddVisible" ref="HisAddRef" />
<his-add v-if="HisAddVisible" ref="HisAddRef" :is-search="'2'" />
<!-- 详情页 -->
<detail-view v-if="detailViewVisible" :id="detailId" ref="viewRef" platform="2" :patient-id="patientId" :patient-id-number="patientIdNumber" @detailViewVisible="detailViewVisible=false" />
<detail-view v-if="detailViewVisible" :id="detailId" ref="viewRef" platform="2" :is-search="'2'" :patient-id="patientId" :patient-id-number="patientIdNumber" @detailViewVisible="detailViewVisible=false" />
</div>
</template>
<script>
@ -120,6 +128,47 @@ 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 {
@ -127,56 +176,56 @@ export default {
getDataListURL: '/patient/page',
getDataListIsPage: true
},
options: [{
value: '选项1',
label: '今日'
}, {
value: '选项2',
label: '近三天'
}, {
value: '选项3',
label: '近一周'
}, {
value: '选项4',
label: '近一个月 '
}, {
value: '选项5',
label: '全部'
}],
typeList: [{
value: '全部',
label: '全部'
}, {
value: '未报到',
label: '未报到'
}, {
value: '未诊',
label: '未诊'
}, {
value: '回诊',
label: '回诊 '
}, {
value: '就诊中',
label: '就诊中'
}, {
value: '已诊',
label: '已诊'
}],
options: [
{
value: '0',
label: '今日'
}, {
value: '1',
label: '近三天'
}, {
value: '2',
label: '近一周'
}, {
value: '3',
label: '近一个月 '
}, {
value: '',
label: '全部'
}],
typeList: [
{
value: '',
label: '全部'
}, {
value: '1',
label: '未报到'
}, {
value: '2',
label: '未诊'
}, {
value: '4',
label: '回诊 '
}, {
value: '3',
label: '就诊中'
}, {
value: '已诊',
label: '已诊'
}],
nextVisitTime: [],
patientTypeList: [],
detailViewVisible: false,
HisAddVisible: false,
dataForm: {
platform: 2,
patientId: '',
beginDate: '',
endDate: '',
searchType: '',
patientName: '',
// doctorName: '',
// beginDate: '',
// endDate: '',
// slBeginDate: '',
// slEndDate: '',
// diagNoseName: '',
patientIdNumber: '',
platform: '2'
patientStatus: '',
patientIdNumber: ''
},
doctorNameList: [],
currentTableList: [],
@ -217,14 +266,13 @@ export default {
},
//
dateChange(e) {
if (this.dataForm.drgsName === '青光眼') {
this.dataForm.beginDate = e ? e[0] : ''
this.dataForm.endDate = e ? e[1] : ''
} else {
this.dataForm.slBeginDate = e ? e[0] : ''
this.dataForm.slEndDate = e ? e[1] : ''
}
this.dataForm.beginDate = e ? e[0] : ''
this.dataForm.endDate = e ? e[1] : ''
this.getDataListInitial()
},
//
handleType(value) {
this.dataForm.patientStatus = value
this.getDataListInitial()
},
//

17
src/page-subspecialty/views/modules/outpatientManagement/treat/patient-add-or-update.vue

@ -38,13 +38,13 @@
<el-form-item label="家庭地址:" label-width="90px" prop="patientAddress">
<el-input v-model="dataForm.patientAddress" placeholder="请输入地址" />
</el-form-item>
<el-form-item label="随访方案:" label-width="90px" prop="visitId">
<el-select v-model="dataForm.visitId" placeholder="请选择随访方案">
<el-option v-for="item in visitList" :key="item.id" :label="item.name" :value="item.id" />
</el-select>
</el-form-item>
<!-- <el-form-item label="随访方案:" label-width="90px" prop="visitId">-->
<!-- <el-select v-model="dataForm.visitId" placeholder="请选择随访方案">-->
<!-- <el-option v-for="item in visitList" :key="item.id" :label="item.name" :value="item.id" />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<el-form-item label="备注:" label-width="90px" prop="remarks">
<el-input v-model="dataForm.remarks" type="textarea" />
<el-input v-model="dataForm.remark" type="textarea" />
</el-form-item>
</el-form>
<template slot="footer">
@ -68,6 +68,7 @@ export default {
return {
visible: false,
dataForm: {
platform: 2,
patientId: '',
patientName: '',
patientIdNumber: '',
@ -76,7 +77,7 @@ export default {
patientAddress: '',
patientBirthday: '',
visitId: '',
remarks: ''
remark: ''
},
params: {},
visitList: []
@ -161,7 +162,7 @@ export default {
if (!valid) {
return false
}
this.$http[!this.dataForm.id ? 'post' : 'put']('/patient/manage', this.dataForm).then(({ data: res }) => {
this.$http[!this.dataForm.id ? 'post' : 'put']('/patient/savePatient', this.dataForm).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}

13
src/page-subspecialty/views/modules/systemManagement/team/team-add-or-update.vue

@ -30,11 +30,11 @@
<el-input v-model="dataForm.doctorJob" placeholder="请输入医生职位" />
</el-form-item> -->
<!-- superAdmin0普通用户 1是慧目管理员 -->
<el-form-item v-if="loginInfo.superAdmin===1" label="所属医院:" label-width="90px" prop="centreId">
<el-select v-model="dataForm.centreId" placeholder="请选择">
<el-option v-for="item in centerList" :key="item.id" :label="item.name" :value="item.id" />
</el-select>
</el-form-item>
<!-- <el-form-item v-if="loginInfo.superAdmin===1" label="所属医院:" label-width="90px" prop="centreId">-->
<!-- <el-select v-model="dataForm.centreId" placeholder="请选择">-->
<!-- <el-option v-for="item in centerList" :key="item.id" :label="item.name" :value="item.id" />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<el-form-item label="用户类型:" label-width="90px" prop="positionListValue">
<el-cascader
v-model="dataForm.positionListValue"
@ -182,9 +182,6 @@ export default {
],
mobile: [
{ required: true, validator: validataMobile, trigger: 'blur' }
],
centreId: [
{ required: true, vmessage: '请选择中心', trigger: 'blur' }
]
// doctorJob: [
// { required: true, message: '', trigger: 'blur' }

4
src/page-subspecialty/views/pages/login.vue

@ -9,7 +9,7 @@
<!-- <img src="../../../assets/img/login_bgm.png" alt="" class="login-bgm"> -->
<div class="login-content">
<div class="login-content-title">
<p class="main-title">屈光信息系统</p>
<p class="main-title">眼科信息系统</p>
<p class="subtitle-title">登录</p>
</div>
<el-form
@ -108,7 +108,7 @@ export default {
}
Cookies.set('xa-token', res.data.token)
window.localStorage.setItem('qg-userData', JSON.stringify(res.data.currentUser))
this.$router.push({ name: 'patientManagement' })
this.$router.push({ name: 'outpatientManagement-call' })
// const positionName = res.data.currentUser.positionList.length > 0 ? res.data.currentUser.positionList[0].positionName : ''
// positionName && positionName.includes('') ? this.$router.push({ name: 'outpatientManagement' }) : this.$router.push({ name: 'patientManagement' })
//

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

@ -0,0 +1,543 @@
<template>
<div class="containerBox">
<div class="patientBox">
<div>
<el-dropdown class="mr20">
<span class="el-dropdown-link">
病人ID<i class="el-icon-arrow-down el-icon--right"></i>
</span>
<el-dropdown-menu slot="dropdown">
<el-input v-model="patientId" placeholder="请输入病人ID" />
</el-dropdown-menu>
</el-dropdown>
<el-dropdown class="mr20">
<span class="el-dropdown-link">
姓名<i class="el-icon-arrow-down el-icon--right"></i>
</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--right"></i>
</span>
<el-dropdown-menu slot="dropdown">
<el-input v-model="remark" placeholder="请输入备注" allow-clear />
</el-dropdown-menu>
</el-dropdown>
<el-dropdown class="mr20">
<span class="el-dropdown-link">
用药<i class="el-icon-arrow-down el-icon--right"></i>
</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>
</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>
</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>
</div>
</template>
<script>
// import api from '../../api/interface'
import moment from 'moment'
// import patientModel from './patientInfo'
export default {
components: {
// patientModel
},
data() {
return {
labelCol: {
xs: { span: 24 },
sm: { span: 7 }
},
midCol: {
xs: { span: 24 },
sm: { span: 12 }
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 14 }
},
checkDate: [],
page: 1,
limit: 10,
total: 0,
// patientId: '2328656',
// patientId: '2553716',
patientId: '',
patientName: '', //
userName: '', //
childInfo: {
patientId: '',
detailFlag: false
},
tagName: '', //
deviceId: '', //
remark: '', //
medication: '', //
startDate: '', //
endDate: '', //
infoFlag: false, //
patientIdFlag: false,
nameFlag: false,
deviceFlag: false,
brandFlag: false,
tagFlag: false,
remarkFlag: false,
medicationFlag: false,
dateFlag: false,
infoConfirm: false,
deviceType: [],
brandList: [],
patientList: [],
selectedRowKeys: [],
columns: [
{
title: '病人id',
dataIndex: 'id',
width: 120
},
{
title: '姓名',
dataIndex: 'name',
width: 120
},
{
title: '性别',
dataIndex: 'sex',
width: 120
},
{
title: '年龄',
dataIndex: 'age',
width: 120
},
{
title: '标签',
dataIndex: 'lebal',
scopedSlots: { customRender: 'lebal' }
},
{
title: '备注',
dataIndex: 'remark',
width: 150,
scopedSlots: { customRender: 'note' }
},
{
title: '操作',
dataIndex: 'operate',
width: 150,
scopedSlots: { customRender: 'operate' }
}
]
}
},
computed: {
hasSelected() {
return this.selectedRowKeys.length > 0
}
},
mounted() {
this.userName = window.localStorage.getItem('userName')
// this.queryDeviceType()
this.queryPatientList()
},
methods: {
moment,
//
reset() {
this.patientId = ''
this.patientName = ''
this.deviceId = ''
this.tagName = ''
this.remark = ''
this.medication = ''
this.startDate = null
this.endDate = null
},
handleClickId() {
this.patientIdFlag = true
},
handleClickName() {
this.nameFlag = true
},
handleClickDevice() {
this.deviceFlag = true
},
handleClickBrand() {
this.brandFlag = true
},
handleClickTag() {
this.tagFlag = true
},
handleClickRemark() {
this.remarkFlag = true
},
handleClickMedication() {
this.medicationFlag = true
},
handleClickDate() {
this.dateFlag = true
},
// 退
handleOut() {
this.$router.push('/login')
},
selectBrand(deviceId) {
this.deviceId = deviceId
},
selectDate(val) {
if (val.length) {
this.startDate = val[0].format('YYYY-MM-DD')
this.endDate = val[1].format('YYYY-MM-DD')
}
},
//
async queryDeviceType() {
const { data: res } = await this.$http.get('/dataBrower/patient/getDeviceTypeList')
if (res.code === 0) {
this.deviceType = res.data || []
} else {
this.$message.error(res.msg)
}
},
//
async selectDeviceType(deviceType) {
const { data: res } = await this.$http.get('/dataBrower/patient/getDeviceTypeList', { params: {
deviceType: deviceType
}
})
if (res.code === 0) {
this.brandList = res.data || []
} else {
this.$message.error(res.msg)
}
},
onSelectChange(selectedRowKeys) {
this.selectedRowKeys = selectedRowKeys
},
//
cancelSelected() {
this.selectedRowKeys = []
},
//
exportData() {
const token = window.localStorage.getItem('token')
const url = `${api.interfaceConfig.downLoad}?patientId=${this.patientId}&token=${token}`
window.location.href = url
},
//
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' })
}
}
}
},
//
handleInfo() {
this.infoFlag = true
this.childInfo.patientId = this.patientId
this.$nextTick(() => {
// this.$refs.infoComponent.openModal()
})
},
//
async queryPatientList() {
const params = {
page: this.page,
limit: this.limit,
patientId: this.patientId,
patientName: this.patientName,
tagName: this.tagName,
deviceId: this.deviceId,
medication: this.medication,
startDate: this.startDate,
endDate: this.endDate,
remark: this.remark
}
Object.keys(params).map((item) => {
if (!params[item]) {
delete params[item]
}
return true
})
const { data: res } = await this.$http.get('/patient/pac30/page', { params: params })
if (res.code === 0) {
this.patientList = res.data ? res.data.list : []
this.total = res.data ? res.data.total : 0
} else {
this.$message.error(res.msg)
}
},
//
onShowSizeChange(current, pageSize) {
this.limit = pageSize
this.queryPatientList()
},
//
selectPagination(pageNumber) {
this.page = pageNumber
this.queryPatientList()
}
}
}
</script>
<style lang="scss" scoped>
.containerBox{
width: 100%;
height: 100%;
background: #141414;
.patientBox {
width: 100%;
height: 100%;
background-color: #141414;
padding: 16px;
}
.header{
width: 100%;
height: 48px;
line-height: 48px;
padding: 0;
background-color: #0B182E;
.logo{
height: 48px;
position: absolute;
left: 0;
top: 0;
}
}
.userName{
color: #FFFFFF;
font-size: 16px;
}
.logOut{
float: right;
padding-right: 10px;
}
.searchBox{
width: 100%;
display: flex;
justify-content: space-around;
}
.cancelSel{
color: #4797FF;
font-size: 14px;
font-family: PingFang SC;
margin-left: 8px;
cursor: pointer;
}
.exportBtn{
width: 100%;
height: 54px;
line-height: 54px;
padding: 0 6px 0 32px;
background-color: rgba(71, 151, 255, 0.1);
border: 1px solid rgba(71, 151, 255, 0.3);
margin: 16px 0 16px 0;
display: flex;
justify-content: space-between;
.export_l{
font-size: 14px;
font-family: PingFang SC;
color: #FFFFFF;
letter-spacing: 2px;
}
.export_r{
font-size: 14px;
font-family: PingFang SC;
color: #4797FF;
letter-spacing: 1px;
cursor: pointer;
}
}
.pagination{
float: right;
margin-top: 16px;
}
.lebalBox{
display: inline-block;
height: 22px;
padding: 0 8px;
margin-right: 5px;
color: #52C41A;
letter-spacing: 1px;
background-color: #162312;
border: 1px dotted #274916;
box-sizing: content-box;
}
.noteBox{
letter-spacing: 1px;
}
.detail{
font-size: 14px;
font-family: PingFang SC;
color: #4797FF;
letter-spacing: 1px;
cursor: pointer;
}
.mr20{
margin-right: 40px;
}
}
</style>
<style lang="scss">
.containerBox{
.el-dropdown{
color: white;
}
.el-pager{
li {
background-color: transparent;
}
}
.btn-next,.btn-prev,.el-pagination button:disabled{
background-color: transparent;
}
.el-input__inner{
color: white;
background-color: transparent;
border: 1px solid #000000;
}
.el-table__empty-block{
background-color: #0c1016;
.el-table__empty-text{
color: white;
}
}
}
.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>

8
static/js/jquery-3.5.1/jquery.js

@ -41,7 +41,7 @@
// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be commonForm
// enough that all such attempts are guarded in a try block.
"use strict";
@ -1581,7 +1581,7 @@ setDocument = Sizzle.setDocument = function( node ) {
return i ?
// Do a sibling check if the nodes have a common ancestor
// Do a sibling check if the nodes have a commonForm ancestor
siblingCheck( ap[ i ], bp[ i ] ) :
// Otherwise nodes in our document sort first
@ -5789,7 +5789,7 @@ jQuery.Event.prototype = {
}
};
// Includes all common event props including KeyEvent and MouseEvent specific props
// Includes all commonForm event props including KeyEvent and MouseEvent specific props
jQuery.each( {
altKey: true,
bubbles: true,
@ -8449,7 +8449,7 @@ jQuery.fn.extend( {
ret = elem.value;
// Handle most common string cases
// Handle most commonForm string cases
if ( typeof ret === "string" ) {
return ret.replace( rreturn, "" );
}

Loading…
Cancel
Save