You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

484 lines
16 KiB

<template>
<!-- 门诊治疗 -->
<div class="patient-info">
<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 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 prop="dateRange" label="预约时间" class="form-item-date">
<el-date-picker
v-model="appointRange"
size="small"
type="daterange"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="yyyy-MM-dd"
@change="appointChange"
/>
</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 style="display: flex;align-items: center">
<el-select v-model="dataForm.searchType" 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" :class="[curIndex === index ? 'active' : '']" style="margin-left: 0px" size="small" color="white" @click="handleType(item.value, index)">{{ item.label }}</el-button>
<div style="margin-left: 16px; display: flex;align-items: center">
<span style="flex: 1">项目名称:</span>
<el-select
v-model="dataForm.projectCode"
style="width:220px"
placeholder="项目名称"
size="small"
filterable
:remote-method="queryProjectList"
@change="getDataListInitial"
>
<el-option
v-for="item in projectList"
:key="item.itemId"
:label="item.itemName"
:value="item.itemId"
/>
</el-select>
</div>
</div>
<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>
<div v-loading="dataListLoading" 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" width="120" />
<el-table-column label="状态" header-align="center" align="center" width="70">
<template slot-scope="scope">
{{ scope.row.patientStatus | patientStatus }}
</template>
</el-table-column>
<el-table-column prop="patientName" label="患者姓名" header-align="center" align="center" width="95" />
<el-table-column label="出生日期" header-align="center" align="center" width="110">
<template slot-scope="scope">
{{ scope.row.patientBirthday ? $options.filters.dateFilterTwo( scope.row.patientBirthday): '- ' }}
</template>
</el-table-column>
<el-table-column prop="zlEye" label="眼别" header-align="center" align="center" width="100">
<template slot-scope="scope">
<el-select v-model="scope.row.zlEye" class="eyeType" placeholder="" size="small" @change="value=>changeEyeType(value,scope)">
<el-option
v-for="item in eyeList"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</template>
</el-table-column>
<el-table-column prop="mzDoctorName" label="门诊医师" header-align="center" align="center" width="95" />
<el-table-column label="操作员" header-align="center" align="center" width="95">
<template slot-scope="scope">
{{ getOperator(scope.row.zlProjectList) }}
</template>
</el-table-column>
<el-table-column prop="zlPorject" label="医疗项目" header-align="center" align="center">
<template slot-scope="scope">
{{ getYLProject(scope.row.zlProjectList) }}
</template>
</el-table-column>
<el-table-column prop="remark" label="备注" header-align="center" align="center" />
<el-table-column prop="updateDate" label="就诊时间" header-align="center" align="center" width="165" />
<el-table-column prop="appointDate" label="预约时间" header-align="center" align="center" width="165" />
<!-- <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="210">
<template slot-scope="scope">
<span
style="color: #1890ff; padding-right: 8px"
class="operation-details"
@click="showDetail(scope.row, 1)"
>开始</span>
<span
v-if="scope.row.registerType==='1'"
style="color: #ff0000; padding-right: 8px"
class="operation-details"
@click="deleteTreat(scope.row)"
>删除</span>
<span
style="color: #1890ff; padding-right: 8px"
class="operation-details"
@click="finishTreat(scope.row)"
>结束</span>
<span
style="color: #1890ff; padding-right: 8px"
class="operation-details"
@click="showDetail(scope.row, 2)"
>患者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" @refreshDataList="getDataListInitial" />
<!-- HIS引入弹框 -->
<his-add v-if="HisAddVisible" ref="HisAddRef" @openAdd="getHisData" />
<!-- 详情页 -->
<detail-view v-if="detailViewVisible" ref="viewRef" :only-read="onlyRead" :is-search="'2'" :patient-id="patientId" @detailViewVisible="detailViewVisible=false" />
</div>
</template>
<script>
import mixinViewModule from '@/mixins/view-module'
import tableAutoHeight from '@/mixins/tableAutoHeight'
import AddOrUpdate from './patient-add-or-update'
import hisAdd from './HIS-add'
import detailView from '@/components/360View/index' // 360试图
export default {
components: {
hisAdd,
AddOrUpdate,
detailView
},
filters: {
callStatus(val) {
switch (val) {
case '1':
return '未叫号'
case '2':
return '已叫号'
case '3':
return '过号'
case '4':
return '呼叫中'
default:
return val
}
},
patientStatus(val) {
switch (val) {
case '200':
return '未报到'
case '300':
return '未诊断'
case '400':
return '已诊'
default:
return val
}
}
},
mixins: [mixinViewModule, tableAutoHeight],
data() {
return {
mixinViewModuleOptions: {
getDataListURL: '/patient/page',
getDataListIsPage: true
},
curIndex: 0,
options: [
{
value: '0',
label: '今天'
}, {
value: '1',
label: '昨天'
}, {
value: '2',
label: '前天'
}, {
value: '3',
label: '近三天'
}, {
value: '4',
label: '近一周'
}, {
value: '5',
label: '近一个月 '
}, {
value: '6',
label: '近半年 '
}, {
value: '',
label: '全部'
}],
typeList: [
{
value: '',
label: '全部'
}, {
value: '200',
label: '未报到'
}, {
value: '300',
label: '未诊'
}, {
value: '400',
label: '已诊'
}],
eyeList: [
{
value: 'OD',
label: 'OD'
}, {
value: 'OS',
label: 'OS'
}, {
value: 'OU',
label: 'OU'
}],
nextVisitTime: [],
appointRange: [],
onlyRead: false,
detailViewVisible: false,
HisAddVisible: false,
dataForm: {
platform: 2,
patientId: '',
beginDate: '',
endDate: '',
appointBeginDate: '',
appointEndDate: '',
searchType: '0',
projectCode: '',
patientName: '',
patientStatus: '',
patientIdNumber: ''
},
projectList: [],
patientId: ''
}
},
watch: {
$route(val) {
// 如果两级以上就隐藏父级
this.isShowPatient = !(val.matched.length > 2)
}
},
created() {
this.isShowPatient = !(this.$route.matched.length > 2)
this.queryProjectList()
},
methods: {
reFresh() {
this.pageCurrentChangeHandle(this.page)
},
// 展示列表项目列
getYLProject(list) {
if (!list.length) {
return
}
const projects = list.map(item => item.porjectName).join('、')
return projects
},
getHisData(val) {
this.addOrUpdateHandle('', { ...val }, 'HIS引入')
},
// 展示列表操作者列
getOperator(list) {
if (!list.length) {
return ''
}
return list[0].finishUserName
},
// 获取项目列表
queryProjectList(value) {
this.$http.get('/patient/getZlItemDict', {
params: { category: 'T', itemName: value }
}).then(data => {
this.projectList = data.data.data
this.projectList.unshift({
caseName: '',
enable: 1,
itemId: '',
itemName: '全部项目'
})
})
},
changeEyeType(value, scope) {
const idList = scope.row.zlProjectList.map(item => item.id)
this.$http.post('/patient/updateProjectEyeType', {
ids: idList,
zlEye: value
}).then(res => {
if (res.data.data) {
this.$message.error(res.data.data)
}
})
},
// 日期改变时
dateChange(e) {
this.dataForm.beginDate = e ? e[0] : ''
this.dataForm.endDate = e ? e[1] : ''
this.dataForm.searchType = e ? '' : '0'
this.getDataListInitial()
},
// 日期改变时
appointChange(e) {
this.dataForm.appointBeginDate = e ? e[0] : ''
this.dataForm.appointEndDate = e ? e[1] : ''
this.dataForm.searchType = e ? '' : '0'
this.getDataListInitial()
},
// 根据就诊状态查询
handleType(value, index) {
this.curIndex = index
this.dataForm.patientStatus = value
this.getDataListInitial()
},
async receiveTreat(item) {
const { data: res } = await this.$http.get('/patient/updateSGDoctorAndJzStatus', {
params: {
isAppoint: item.isAppoint,
patientId: item.patientId,
jzNumber: item.jzNumber,
risNo: item.risNo,
platform: 2
}
})
if (res.code === 0) {
} else {
this.$message.error(res.msg)
}
},
// 结束
finishTreat(scope) {
const idList = scope.zlProjectList.map(item => item.id)
if (!idList.length) {
this.$message.error('项目状态更新失败')
return
}
this.receiveTreat(scope)
this.$http.post('/patient/updateProjectStatus', idList).then((res) => {
this.$message.success(res.data.data)
this.pageCurrentChangeHandle(this.page)
})
},
// 查看详情
showDetail(scopeRow, index) {
if (index === 1) {
this.receiveTreat(scopeRow)
}
this.onlyRead = index !== 1
this.detailViewVisible = true
this.patientId = scopeRow.patientId
const mzName = scopeRow.mzDoctorName ? scopeRow.mzDoctorName : ''
const jzNumber = scopeRow.jzNumber ? scopeRow.jzNumber : ''
window.sessionStorage.setItem('mzDoctorName', mzName)
window.sessionStorage.setItem('jzNumber', jzNumber)
},
deleteTreat(scopeRow) {
this.$confirmFun('你确定要删除吗?').then(() => {
this.$http.get('/patient/delRepeatPatientType', { params: {
jzNumber: scopeRow.jzNumber,
patientId: scopeRow.patientId,
type: '2'
}}).then(res => {
this.$message.success(res.data.data)
this.pageCurrentChangeHandle(this.page)
})
})
},
// His引入
HISHandle() {
this.HisAddVisible = true
this.$nextTick(() => {
this.$refs.HisAddRef.init()
})
}
}
}
</script>
<style lang="scss" scoped>
.patient-info {
height: 100%;
.patient-info-head,
.patient-info-content {
background: #fff;
.head {
padding-bottom: 10px;
}
}
.patient-info-content {
width: 100%;
padding: 10px 16px;
box-sizing: border-box;
}
.patient-info-head {
margin-bottom: 10px;
padding: 10px;
}
.operation-delete,
.operation-details {
cursor: pointer;
}
.active{
color: #3ea3f6;
background-color: #e0f2fd;
border-color: #3ea3f6;
}
}
.eyeType{
::v-deep .el-input__inner{
font-size: 16px !important;
}
}
</style>
<style lang="scss">
.patient-info {
.patient-info-head {
.el-form {
display: flex;
justify-content: space-between;
}
.el-form-item__content,
.el-select,
.el-range-editor--small.el-input__inner {
width: 100%;
}
.el-form-item {
display: flex;
margin-bottom: 0;
width: 25%;
}
}
}
</style>