解决合并冲突
This commit is contained in:
@@ -300,16 +300,16 @@ function handleCardClick(item, index) {
|
||||
}
|
||||
}
|
||||
}
|
||||
::v-deep .el-tabs__header {
|
||||
:deep(.el-tabs__header) {
|
||||
padding: 0;
|
||||
position: relative;
|
||||
margin: 0 0 5px !important;
|
||||
}
|
||||
|
||||
::v-deep .el-drawer__header {
|
||||
:deep(.el-drawer__header) {
|
||||
margin-bottom: 15px !important;
|
||||
}
|
||||
::v-deep .el-drawer__body {
|
||||
:deep(.el-drawer__body) {
|
||||
padding: 10px !important;
|
||||
}
|
||||
.el-badge {
|
||||
|
||||
@@ -108,7 +108,7 @@
|
||||
"top": 58.5,
|
||||
"height": 13.5,
|
||||
"width": 145.5,
|
||||
"title": "机构名称:医院",
|
||||
"title": "机构名称:长春大学医院",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 9,
|
||||
|
||||
@@ -357,7 +357,7 @@ async function print() {
|
||||
...reportValue.value, // 将 reportValue.value 中的所有属性展开到 result 中
|
||||
nickName: userStore.nickName,
|
||||
orgName: userStore.orgName,
|
||||
fixmedinsName: '医院',
|
||||
fixmedinsName: '长春大学医院',
|
||||
queryTime: queryTime.value[0] + '~' + queryTime.value[1],
|
||||
zfAmount: new Decimal(reportValue.value.zhSum || 0).add(reportValue.value.fundSum || 0),
|
||||
feeAmount: new Decimal(reportValue.value.DIAGNOSTIC_FEE || 0)
|
||||
|
||||
@@ -92,7 +92,7 @@
|
||||
</el-col>
|
||||
<el-col :span="5">
|
||||
<span class="label">机构:</span>
|
||||
<span class="value">{{ '医院' }}</span>
|
||||
<span class="value">{{ userStore.hospitalName }}</span>
|
||||
</el-col>
|
||||
<el-col :span="7">
|
||||
<span class="label">时间:</span>
|
||||
@@ -449,7 +449,7 @@ async function print() {
|
||||
...reportValue.value, // 将 reportValue.value 中的所有属性展开到 result 中
|
||||
nickName: userStore.nickName,
|
||||
orgName: userStore.orgName,
|
||||
fixmedinsName: '医院',
|
||||
fixmedinsName: userStore.hospitalName,
|
||||
createTime: formatDateStr(new Date(), 'YYYY-MM-DD HH:mm:ss'),
|
||||
scheduler: userStore.nickName,
|
||||
timeRange: queryTime.value[0] + '~' + queryTime.value[1],
|
||||
|
||||
@@ -1,92 +1,94 @@
|
||||
import request from '@/utils/request'
|
||||
import request from '@/utils/request';
|
||||
|
||||
/**
|
||||
* 获取患者列表
|
||||
*/
|
||||
export function getList(queryParams) {
|
||||
return request({
|
||||
export function getList (queryParams) {
|
||||
return request ({
|
||||
url: '/outpatient-manage/treatment/encounter-list',
|
||||
method: 'get',
|
||||
params: queryParams
|
||||
})
|
||||
params: queryParams,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 诊疗列表
|
||||
*/
|
||||
export function getDisposalList(encounterId) {
|
||||
return request({
|
||||
url: '/outpatient-manage/treatment/treatment-list?encounterId=' + encounterId,
|
||||
export function getDisposalList (encounterId, serviceCategory) {
|
||||
return request ({
|
||||
url: '/outpatient-manage/treatment/treatment-list?encounterId=' +
|
||||
encounterId +
|
||||
(serviceCategory ? '&serviceCategory=' + serviceCategory : ''),
|
||||
method: 'get',
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 执行列表
|
||||
*/
|
||||
export function getExecuteList(queryParams) {
|
||||
return request({
|
||||
export function getExecuteList (queryParams) {
|
||||
return request ({
|
||||
url: '/outpatient-manage/treatment/execute-list',
|
||||
method: 'get',
|
||||
params: queryParams
|
||||
})
|
||||
params: queryParams,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化
|
||||
*/
|
||||
export function init() {
|
||||
return request({
|
||||
export function init () {
|
||||
return request ({
|
||||
url: '/outpatient-manage/treatment/init',
|
||||
method: 'get',
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 执行
|
||||
*/
|
||||
export function execute(data) {
|
||||
return request({
|
||||
export function execute (data) {
|
||||
return request ({
|
||||
url: '/outpatient-manage/treatment/perform',
|
||||
method: 'put',
|
||||
data: data
|
||||
})
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 取消
|
||||
*/
|
||||
export function cancel(data) {
|
||||
return request({
|
||||
export function cancel (data) {
|
||||
return request ({
|
||||
url: '/outpatient-manage/treatment/cancel-perform',
|
||||
method: 'put',
|
||||
data: data
|
||||
})
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取执行记录
|
||||
*/
|
||||
export function getPerformRecord(params) {
|
||||
return request({
|
||||
export function getPerformRecord (params) {
|
||||
return request ({
|
||||
url: '/outpatient-manage/treatment/perform-record',
|
||||
method: 'get',
|
||||
params: params
|
||||
})
|
||||
params: params,
|
||||
});
|
||||
}
|
||||
|
||||
export function listWesternmedicine(query) {
|
||||
return request({
|
||||
export function listWesternmedicine (query) {
|
||||
return request ({
|
||||
url: '/pharmacy-manage/western-medicine-dispense/prescription-list',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
params: query,
|
||||
});
|
||||
}
|
||||
|
||||
export function printBloodCode(query) {
|
||||
return request({
|
||||
export function printBloodCode (query) {
|
||||
return request ({
|
||||
url: '/outpatient-manage/treatment/blood-transfusion-patch',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
params: query,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
"top": 22.5,
|
||||
"height": 12,
|
||||
"width": 88.5,
|
||||
"title": "医院",
|
||||
"title": "长春大学医院",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontSize": 13.5,
|
||||
|
||||
@@ -1,25 +1,17 @@
|
||||
<template>
|
||||
<el-dialog
|
||||
title="执行记录"
|
||||
v-model="props.open"
|
||||
:model-value="props.open"
|
||||
width="1000px"
|
||||
append-to-body
|
||||
destroy-on-close
|
||||
@close="close"
|
||||
@open="openDialog"
|
||||
>
|
||||
<el-table
|
||||
:data="recordList"
|
||||
highlight-current-row
|
||||
@row-click="handlePatientSelect"
|
||||
max-height="650"
|
||||
style="width: 100%"
|
||||
border
|
||||
>
|
||||
<el-table-column prop="occurrenceTime" label="执行时间" align="center" width="150" />
|
||||
<el-table :data="recordList" highlight-current-row max-height="650" style="width: 100%" border>
|
||||
<el-table-column prop="occurrenceTime" label="执行时间" align="center" />
|
||||
<el-table-column prop="statusEnum_enumText" label="执行状态" align="center" />
|
||||
<el-table-column prop="orgName" label="执行科室" align="center" width="100" />
|
||||
<el-table-column prop="practitionerName" label="执行人" align="center" width="100" />
|
||||
<el-table-column prop="orgName" label="执行科室" align="center" />
|
||||
<el-table-column prop="practitionerName" label="执行人" align="center" />
|
||||
</el-table>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
@@ -36,7 +28,7 @@ const props = defineProps({
|
||||
default: false,
|
||||
},
|
||||
recordList: {
|
||||
type: [],
|
||||
type: Array,
|
||||
},
|
||||
});
|
||||
const emit = defineEmits(['close']);
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
"top": 16.5,
|
||||
"height": 22.5,
|
||||
"width": 120,
|
||||
"title": "医院",
|
||||
"title": "长春大学医院",
|
||||
"coordinateSync": false,
|
||||
"widthHeightSync": false,
|
||||
"fontFamily": "Microsoft YaHei",
|
||||
|
||||
@@ -1,222 +1,311 @@
|
||||
<template>
|
||||
<div class="his-container">
|
||||
<!-- 主体内容区域 -->
|
||||
<div class="main-content">
|
||||
<!-- 左侧患者列表区域 -->
|
||||
<div class="section patient-section">
|
||||
<div class="section-header">
|
||||
<div class="section-title">
|
||||
<i class="el-icon-user"></i>
|
||||
<h2>患者列表</h2>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-area">
|
||||
<el-input
|
||||
v-model="queryParams.searchKey"
|
||||
style="width: 45%; margin-bottom: 10px"
|
||||
placeholder="搜索患者"
|
||||
clearable
|
||||
class="search-input"
|
||||
@keydown.enter="getPatientList"
|
||||
>
|
||||
<template #append>
|
||||
<el-button icon="Search" @click="getPatientList" />
|
||||
</template>
|
||||
</el-input>
|
||||
<el-date-picker
|
||||
v-model="receptionTime"
|
||||
@change="getPatientList"
|
||||
type="daterange"
|
||||
style="width: 55%; margin-bottom: 10px"
|
||||
placeholder="挂号时间"
|
||||
format="YYYY-MM-DD"
|
||||
value-format="YYYY-MM-DD"
|
||||
/>
|
||||
</div>
|
||||
<el-table
|
||||
:data="patientList"
|
||||
highlight-current-row
|
||||
@row-click="handlePatientSelect"
|
||||
max-height="650"
|
||||
style="width: 100%"
|
||||
border
|
||||
>
|
||||
<el-table-column prop="encounterNo" label="就诊号" align="center" width="150" />
|
||||
<el-table-column prop="patientName" label="姓名" align="center" />
|
||||
<el-table-column prop="genderEnum_enumText" label="性别" align="center" width="100" />
|
||||
<el-table-column prop="age" label="年龄" align="center" width="100" />
|
||||
</el-table>
|
||||
<pagination
|
||||
v-show="total > 0"
|
||||
:total="total"
|
||||
v-model:page="queryParams.pageNo"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
layout="total, sizes, prev, pager, next"
|
||||
@pagination="getPatientList"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<!-- 右侧区域 -->
|
||||
<div class="right-section">
|
||||
<!-- 处置项目区域 -->
|
||||
<div class="section treatment-section">
|
||||
<div class="section-header">
|
||||
<div class="section-title">
|
||||
<i class="el-icon-first-aid-kit"></i>
|
||||
<h2>处置项目</h2>
|
||||
<el-button type="primary" plain @click="printBottleLabel()">打印瓶签</el-button>
|
||||
<el-button type="primary" plain @click="printBloodBarcode()">打印采血条码</el-button>
|
||||
<el-button type="primary" plain @click="printPrescription()">打印处方</el-button>
|
||||
<el-button type="primary" plain @click="printDisposal()">打印处置单</el-button>
|
||||
</div>
|
||||
</div>
|
||||
<el-table
|
||||
:data="activityList"
|
||||
ref="activityListRef"
|
||||
height="calc(100% - 60px)"
|
||||
style="width: 100%"
|
||||
border
|
||||
v-loading="loading"
|
||||
:span-method="operationSpanMethod"
|
||||
>
|
||||
<el-table-column type="selection" align="center" width="50" />
|
||||
<el-table-column label="序号" align="center" prop="sortNumber" width="60" />
|
||||
<el-table-column align="center" prop="busNo" label="项目编号" width="150" />
|
||||
<el-table-column align="center" prop="itemName" label="项目名称" />
|
||||
<!-- <el-table-column align="center" prop="medicationName" label="药品名称" /> -->
|
||||
<el-table-column
|
||||
align="center"
|
||||
prop="serviceCategory_dictText"
|
||||
label="项目类型"
|
||||
width="80"
|
||||
<div class="app-container">
|
||||
<el-row :gutter="20">
|
||||
<el-col :xs="24" :sm="24" :md="8" :lg="8" :xl="6">
|
||||
<el-card>
|
||||
<template #header>患者信息</template>
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="10" :xs="24" :sm="10" :md="10">
|
||||
<el-input
|
||||
v-model="queryParams.searchKey"
|
||||
placeholder="搜索患者"
|
||||
clearable
|
||||
class="search-input"
|
||||
style="width: 100%"
|
||||
@keydown.enter="getPatientList"
|
||||
>
|
||||
<template #append>
|
||||
<el-button icon="Search" @click="getPatientList" />
|
||||
</template>
|
||||
</el-input>
|
||||
</el-col>
|
||||
<el-col :span="14" :xs="24" :sm="14" :md="14">
|
||||
<el-date-picker
|
||||
v-model="receptionTime"
|
||||
@change="getPatientList"
|
||||
type="daterange"
|
||||
placeholder="挂号时间"
|
||||
format="YYYY-MM-DD"
|
||||
value-format="YYYY-MM-DD"
|
||||
style="width: 100%"
|
||||
/>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="24" :xs="24">
|
||||
<el-table
|
||||
:data="patientList"
|
||||
highlight-current-row
|
||||
@row-click="handlePatientSelect"
|
||||
style="width: 100%; height: calc(100vh - 300px)"
|
||||
border
|
||||
>
|
||||
<el-table-column prop="encounterNo" label="就诊号" align="center" width="150" />
|
||||
<el-table-column prop="patientName" label="姓名" align="center" />
|
||||
<el-table-column prop="genderEnum_enumText" label="性别" align="center" />
|
||||
<el-table-column prop="age" label="年龄" align="center" />
|
||||
</el-table>
|
||||
<pagination
|
||||
v-show="total > 0"
|
||||
:total="total"
|
||||
v-model:page="queryParams.pageNo"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
layout="total, sizes, prev, pager, next"
|
||||
@pagination="getPatientList"
|
||||
/>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-card>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="24" :md="16" :lg="16" :xl="18">
|
||||
<el-row :gutter="20">
|
||||
<el-col :xs="24" :sm="24" :md="12" class="mb8">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
icon="Printer"
|
||||
@click="printBottleLabel()"
|
||||
:disabled="isCurrentPatient"
|
||||
>
|
||||
<template #default="scope">
|
||||
{{
|
||||
scope.row.medCategory
|
||||
? scope.row.medCategory_dictText
|
||||
: scope.row.serviceCategory_dictText
|
||||
}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="size" label="数量" width="100">
|
||||
<template #default="scope">
|
||||
{{ scope.row.quantity + ' ' + scope.row.unitCode_dictText }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="size" label="规格" width="100" />
|
||||
<el-table-column align="center" prop="executeNum" label="执行次数" width="90" />
|
||||
<el-table-column align="center" label="已执行次数" width="90">
|
||||
<template #default="scope">
|
||||
{{ scope.row.performCount - scope.row.cancelCount }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
align="right"
|
||||
header-align="center"
|
||||
prop="unitPrice"
|
||||
label="单价"
|
||||
width="90"
|
||||
打印瓶签
|
||||
</el-button>
|
||||
<el-button
|
||||
type="danger"
|
||||
plain
|
||||
icon="Printer"
|
||||
@click="printBloodBarcode()"
|
||||
:disabled="isCurrentPatient"
|
||||
>
|
||||
<template #default="scope">
|
||||
<span>
|
||||
打印采血条码
|
||||
</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
icon="Printer"
|
||||
@click="printPrescription()"
|
||||
:disabled="isCurrentPatient"
|
||||
>
|
||||
打印处方
|
||||
</el-button>
|
||||
<el-button
|
||||
type="danger"
|
||||
plain
|
||||
icon="Printer"
|
||||
@click="printDisposal()"
|
||||
:disabled="isCurrentPatient"
|
||||
>
|
||||
打印处置单
|
||||
</el-button>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="12" :md="6">
|
||||
<el-form
|
||||
ref="queryRef"
|
||||
:model="queryParams"
|
||||
inline-style="width: 100%"
|
||||
label-width="150px"
|
||||
:rules="rules"
|
||||
>
|
||||
<el-form-item label="处置类型" prop="serviceCategory" label-width="100px">
|
||||
<el-select
|
||||
v-model="queryParams.serviceCategory"
|
||||
placeholder="请选择"
|
||||
clearable
|
||||
filterable
|
||||
style="width: 100%"
|
||||
@change="handleServiceCategoryChange"
|
||||
:disabled="isCurrentPatient"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in activityCategoryList"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="12" :md="6" class="mb8">
|
||||
<el-button
|
||||
type="primary"
|
||||
icon="Check"
|
||||
@click="handleBatchExecute()"
|
||||
:disabled="isMultiple"
|
||||
>
|
||||
批量执行
|
||||
</el-button>
|
||||
<el-button
|
||||
type="danger"
|
||||
icon="Delete"
|
||||
@click="handleBatchCancel()"
|
||||
:disabled="isMultiple"
|
||||
>
|
||||
批量取消
|
||||
</el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<div class="cards-column">
|
||||
<el-card class="half-card">
|
||||
<template #header>处置项目</template>
|
||||
<el-table
|
||||
:data="activityList"
|
||||
ref="activityListRef"
|
||||
style="width: 100%; height: 100%"
|
||||
border
|
||||
v-loading="loading"
|
||||
:span-method="operationSpanMethod"
|
||||
@select="handleSelectionChange"
|
||||
>
|
||||
<el-table-column type="selection" align="center" width="50" />
|
||||
<el-table-column label="组" align="center" width="40" prop="groupIcon" />
|
||||
<!-- <el-table-column label="序号" align="center" prop="sortNumber" width="60" /> -->
|
||||
<el-table-column align="center" prop="busNo" label="项目编号" width="150" />
|
||||
<el-table-column align="center" prop="itemName" label="项目名称" />
|
||||
<el-table-column
|
||||
align="center"
|
||||
prop="serviceStatus_enumText"
|
||||
label="状态"
|
||||
width="100"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<el-tag type="primary" size="small">
|
||||
{{
|
||||
row.serviceStatus_enumText
|
||||
? row.serviceStatus_enumText
|
||||
: row.chargeStatus_enumText
|
||||
}}
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
align="center"
|
||||
prop="serviceCategory_dictText"
|
||||
label="项目类型"
|
||||
width="80"
|
||||
>
|
||||
<template #default="scope">
|
||||
{{
|
||||
scope.row.unitPrice ? scope.row.unitPrice.toFixed(2) + ' 元' : '0.00' + ' 元'
|
||||
scope.row.medCategory
|
||||
? scope.row.medCategory_dictText
|
||||
: scope.row.serviceCategory_dictText
|
||||
}}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
align="right"
|
||||
header-align="center"
|
||||
prop="totalPrice"
|
||||
label="总价"
|
||||
width="90"
|
||||
>
|
||||
<template #default="scope">
|
||||
<span>{{
|
||||
scope.row.totalPrice ? scope.row.totalPrice.toFixed(2) + ' 元' : '0.00' + ' 元'
|
||||
}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="serviceStatus_enumText" label="状态" width="100">
|
||||
<template #default="{ row }">
|
||||
<el-tag type="primary" size="small">
|
||||
{{
|
||||
row.serviceStatus_enumText
|
||||
? row.serviceStatus_enumText
|
||||
: row.chargeStatus_enumText
|
||||
}}
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" width="200" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button type="text" @click="handleExecute(row)"> 执行 </el-button>
|
||||
<el-button type="danger" link @click="handleCancel(row)"> 取消 </el-button>
|
||||
<el-button type="text" @click="getRecord(row)">执行记录</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="size" label="数量" width="100">
|
||||
<template #default="scope">
|
||||
<span v-if="scope.row.quantity !== 0 && scope.row.unitCode_dictText">
|
||||
{{ scope.row.quantity + ' ' + scope.row.unitCode_dictText }}
|
||||
</span>
|
||||
<span v-else> - </span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="size" label="规格" width="100" />
|
||||
<el-table-column align="center" prop="executeNum" label="执行次数" width="90" />
|
||||
<el-table-column align="center" label="已执行次数" width="120">
|
||||
<template #default="scope">
|
||||
{{ scope.row.performCount - scope.row.cancelCount }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
align="right"
|
||||
header-align="center"
|
||||
prop="unitPrice"
|
||||
label="单价"
|
||||
width="90"
|
||||
>
|
||||
<template #default="scope">
|
||||
<span>
|
||||
{{
|
||||
scope.row.unitPrice ? scope.row.unitPrice.toFixed(2) + ' 元' : '0.00' + ' 元'
|
||||
}}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
align="right"
|
||||
header-align="center"
|
||||
prop="totalPrice"
|
||||
label="总价"
|
||||
width="90"
|
||||
>
|
||||
<template #default="scope">
|
||||
<span>
|
||||
{{
|
||||
scope.row.totalPrice
|
||||
? scope.row.totalPrice.toFixed(2) + ' 元'
|
||||
: '0.00' + ' 元'
|
||||
}}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<!-- 耗材区域 -->
|
||||
<div class="section material-section">
|
||||
<div class="section-header">
|
||||
<div class="section-title">
|
||||
<i class="el-icon-box"></i>
|
||||
<h2>耗材使用</h2>
|
||||
</div>
|
||||
</div>
|
||||
<el-table
|
||||
:data="deviceList"
|
||||
height="calc(100% - 60px)"
|
||||
style="width: 100%"
|
||||
ref="deviceListRef"
|
||||
v-loading="loading"
|
||||
border
|
||||
>
|
||||
<el-table-column type="selection" align="center" width="50" />
|
||||
<el-table-column type="index" label="序号" align="center" width="60" />
|
||||
<el-table-column prop="itemName" align="center" label="耗材名称" />
|
||||
<el-table-column prop="size" align="center" label="规格" />
|
||||
<el-table-column prop="quantity" align="center" label="使用数量">
|
||||
<template #default="scope">
|
||||
<span>{{ scope.row.quantity + ' ' + scope.row.unitCode_dictText }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="right" header-align="center" prop="unitPrice" label="单价">
|
||||
<template #default="scope">
|
||||
<span>{{ scope.unitPrice ? scope.unitPrice.toFixed(2) : '0.00' + ' 元' }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="right" header-align="center" prop="totalPrice" label="总价">
|
||||
<template #default="scope">
|
||||
<span>{{ scope.totalPrice ? scope.totalPrice.toFixed(2) : '0.00' + ' 元' }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="serviceStatus_enumText" label="状态">
|
||||
<template #default="{ row }">
|
||||
<el-tag type="primary" size="small">
|
||||
{{ row.dispenseStatus_enumText }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- <el-table-column label="操作" width="80">
|
||||
<template #default="{ row }">
|
||||
<el-button type="text" size="small" @click="removeMaterial(row)">移除</el-button>
|
||||
</template>
|
||||
</el-table-column> -->
|
||||
</el-table>
|
||||
<el-table-column
|
||||
label="操作"
|
||||
align="center"
|
||||
width="150"
|
||||
fixed="right"
|
||||
class-name="no-hover-column"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<!-- <el-button type="text" @click="handleExecute(row)"> 执行 </el-button> -->
|
||||
<!-- <el-button type="danger" link @click="handleCancel(row)"> 取消 </el-button> -->
|
||||
<el-button link type="primary" icon="EditPen" @click="getRecord(row)">
|
||||
执行记录
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-card>
|
||||
<el-card class="half-card">
|
||||
<template #header> 耗材使用 </template>
|
||||
<el-table
|
||||
:data="deviceList"
|
||||
style="width: 100%; height: 100%"
|
||||
ref="deviceListRef"
|
||||
v-loading="loading"
|
||||
border
|
||||
>
|
||||
<el-table-column type="selection" align="center" width="50" />
|
||||
<el-table-column type="index" label="序号" align="center" width="60" />
|
||||
<el-table-column prop="itemName" align="center" label="耗材名称" />
|
||||
<el-table-column align="center" prop="serviceStatus_enumText" label="状态">
|
||||
<template #default="{ row }">
|
||||
<el-tag type="primary" size="small">
|
||||
{{ row.dispenseStatus_enumText }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="size" align="center" label="规格" />
|
||||
<el-table-column prop="quantity" align="center" label="使用数量">
|
||||
<template #default="scope">
|
||||
<span>{{ scope.row.quantity + ' ' + scope.row.unitCode_dictText }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" prop="unitPrice" label="单价">
|
||||
<template #default="scope">
|
||||
<span>
|
||||
{{ scope.unitPrice ? scope.unitPrice.toFixed(2) : '0.00' + ' 元' }}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" prop="totalPrice" label="总价">
|
||||
<template #default="scope">
|
||||
<span>
|
||||
{{ scope.totalPrice ? scope.totalPrice.toFixed(2) : '0.00' + ' 元' }}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-card>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<PerformRecordDialog :open="openDialog" :recordList="recordList" @close="openDialog = false" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { getCurrentInstance } from 'vue';
|
||||
import { getCurrentInstance, ref, computed } from 'vue';
|
||||
import {
|
||||
getList,
|
||||
getDisposalList,
|
||||
@@ -235,6 +324,7 @@ import { formatDateStr } from '@/utils';
|
||||
import { hiprint } from 'vue-plugin-hiprint';
|
||||
import { advicePrint } from '@/api/public';
|
||||
import useUserStore from '@/store/modules/user';
|
||||
import { getGroupMarkers } from '@/utils/his';
|
||||
// 患者搜索
|
||||
const queryParams = ref({
|
||||
pageNo: 1,
|
||||
@@ -254,6 +344,7 @@ const deviceList = ref([]);
|
||||
// 诊疗项目 + 耗材 打印处置单用
|
||||
const deviceActivityList = ref([]);
|
||||
const userStore = useUserStore();
|
||||
const { proxy } = getCurrentInstance();
|
||||
|
||||
// 当前选中的患者
|
||||
const currentPatient = ref({});
|
||||
@@ -261,21 +352,40 @@ const recordList = ref([]);
|
||||
const openDialog = ref(false);
|
||||
const loading = ref(false);
|
||||
const activityListRef = ref(null);
|
||||
|
||||
const { proxy } = getCurrentInstance();
|
||||
|
||||
// 总费用计算
|
||||
const totalCost = computed(() => {
|
||||
if (!currentPatient.value.id) return 0;
|
||||
|
||||
const treatmentCost = currentPatient.value.treatments.reduce((sum, item) => sum + item.cost, 0);
|
||||
|
||||
const materialCost = currentPatient.value.materials.reduce(
|
||||
(sum, item) => sum + item.cost * item.quantity,
|
||||
0
|
||||
const deviceListRef = ref(null);
|
||||
const rules = ref({
|
||||
serviceCategory: [{ required: true, message: '请选择处置类型', trigger: 'blur' }],
|
||||
});
|
||||
//
|
||||
const { activity_category_code } = proxy.useDict('activity_category_code');
|
||||
const activityCategoryList = computed(() => {
|
||||
const keywords = ['检验', '检查', '治疗'];
|
||||
return (activity_category_code.value || []).filter((item) =>
|
||||
keywords.some((k) => String(item.label || '').includes(k))
|
||||
);
|
||||
});
|
||||
const activitySelectedList = ref([]);
|
||||
const deviceSelectedList = ref([]);
|
||||
// 是否有批量选择:无任何选择时禁用
|
||||
const isMultiple = computed(() => {
|
||||
// 未选择患者或为空对象时禁用
|
||||
if (!currentPatient.value || Object.keys(currentPatient.value).length === 0) {
|
||||
return true;
|
||||
}
|
||||
// 选中 处置列表
|
||||
activitySelectedList.value = activityListRef.value?.getSelectionRows
|
||||
? activityListRef.value.getSelectionRows()
|
||||
: [];
|
||||
|
||||
return treatmentCost + materialCost;
|
||||
// 选中 耗材列表
|
||||
deviceSelectedList.value = deviceListRef.value?.getSelectionRows
|
||||
? deviceListRef.value.getSelectionRows()
|
||||
: [];
|
||||
return deviceSelectedList.value.length === 0 && activitySelectedList.value.length === 0;
|
||||
});
|
||||
// 是否为当前患者
|
||||
const isCurrentPatient = computed(() => {
|
||||
return Object.keys(currentPatient.value).length === 0;
|
||||
});
|
||||
getPatientList();
|
||||
function getPatientList() {
|
||||
@@ -286,9 +396,32 @@ function getPatientList() {
|
||||
total.value = res.data.total;
|
||||
});
|
||||
}
|
||||
// 切换处置类型
|
||||
function handleServiceCategoryChange(value) {
|
||||
// 就诊id
|
||||
let encounterId = currentPatient.value.encounterId;
|
||||
// 处置类型
|
||||
let serviceCategory = value;
|
||||
// 如果就诊id和处置类型不为空,则获取处置列表
|
||||
if (encounterId && serviceCategory) {
|
||||
getDisposalList(encounterId, serviceCategory).then((res) => {
|
||||
deviceList.value = res.data.records.filter((item) => {
|
||||
return item.requestTable == 'wor_device_request';
|
||||
});
|
||||
activityList.value = res.data.records.filter((item) => {
|
||||
return (
|
||||
item.requestTable == 'wor_service_request' ||
|
||||
item.requestTable == 'med_medication_request'
|
||||
);
|
||||
});
|
||||
deviceActivityList.value = res.data.records.filter((item) => {
|
||||
return item.deviceCategory == '7' || item.serviceCategory == '21';
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function handlePatientSelect(row) {
|
||||
console.log(row, 3456789);
|
||||
loading.value = true;
|
||||
currentPatient.value = row;
|
||||
getDisposalList(row.encounterId).then((res) => {
|
||||
@@ -300,14 +433,84 @@ function handlePatientSelect(row) {
|
||||
item.requestTable == 'wor_service_request' || item.requestTable == 'med_medication_request'
|
||||
);
|
||||
});
|
||||
activityList.value = getGroupMarkers(activityList.value);
|
||||
deviceActivityList.value = res.data.records.filter((item) => {
|
||||
return item.deviceCategory == '7' || item.serviceCategory == '21';
|
||||
});
|
||||
loading.value = false;
|
||||
console.log(activityList.value, 345678);
|
||||
});
|
||||
}
|
||||
// 批量操作校验
|
||||
function handleBatchValidate(type) {
|
||||
let params = [];
|
||||
// 是否批量选择了数据
|
||||
if (isMultiple.value) {
|
||||
proxy.$modal.msgError('请选择要执行的项目');
|
||||
return;
|
||||
}
|
||||
if (type === 'execute') {
|
||||
let activityList = activitySelectedList.value
|
||||
.filter((item) => {
|
||||
return item.chargeStatus === 5;
|
||||
})
|
||||
.map((item) => {
|
||||
return {
|
||||
requestId: item.requestId,
|
||||
dispenseId: item.dispenseId,
|
||||
requestTable: item.requestTable,
|
||||
chargeStatus: item.chargeStatus_enumText,
|
||||
dispenseStatus: item.dispenseStatus_enumText,
|
||||
name: item.itemName,
|
||||
};
|
||||
});
|
||||
let deviceList = deviceSelectedList.value
|
||||
.filter((item) => {
|
||||
return item.dispenseStatus === 2;
|
||||
})
|
||||
.map((item) => {
|
||||
return {
|
||||
requestId: item.requestId,
|
||||
dispenseId: item.dispenseId,
|
||||
requestTable: item.requestTable,
|
||||
chargeStatus: item.chargeStatus_enumText,
|
||||
dispenseStatus: item.dispenseStatus_enumText,
|
||||
name: item.itemName,
|
||||
};
|
||||
});
|
||||
|
||||
return [...activityList, ...deviceList];
|
||||
} else if (type === 'cancel') {
|
||||
let list = [...activitySelectedList.value, ...deviceSelectedList.value];
|
||||
list.forEach((item) => {
|
||||
params.push({
|
||||
requestId: item.requestId,
|
||||
dispenseId: item.dispenseId,
|
||||
requestTable: item.requestTable,
|
||||
});
|
||||
});
|
||||
return list;
|
||||
}
|
||||
}
|
||||
// 批量执行
|
||||
function handleBatchExecute() {
|
||||
// 获取校验后数据
|
||||
let params = handleBatchValidate('execute');
|
||||
// 如果参数数组为空 不执行
|
||||
if (params.length == 0) {
|
||||
proxy.$modal.msgError('不存在需要执行的处置或耗材!');
|
||||
return;
|
||||
}
|
||||
// 执行批量操作
|
||||
execute(params).then((res) => {
|
||||
if (res.code == 200) {
|
||||
proxy.$modal.msgSuccess('执行成功');
|
||||
handlePatientSelect(currentPatient.value);
|
||||
} else {
|
||||
proxy.$modal.msgError(res.message);
|
||||
}
|
||||
});
|
||||
}
|
||||
// 单个执行
|
||||
function handleExecute(row) {
|
||||
let data = {
|
||||
requestId: row.requestId,
|
||||
@@ -316,7 +519,9 @@ function handleExecute(row) {
|
||||
};
|
||||
let params = activityList.value
|
||||
.filter((item) => {
|
||||
return item.groupId == row.groupId;
|
||||
return (
|
||||
(item.medCategory != null || item.medCategory != undefined) && item.groupId == row.groupId
|
||||
);
|
||||
})
|
||||
.map((item) => {
|
||||
return {
|
||||
@@ -325,14 +530,16 @@ function handleExecute(row) {
|
||||
requestTable: item.requestTable,
|
||||
};
|
||||
});
|
||||
let list = proxy.$refs.deviceListRef.getSelectionRows().map((item) => {
|
||||
let list = (
|
||||
deviceListRef.value?.getSelectionRows ? deviceListRef.value.getSelectionRows() : []
|
||||
).map((item) => {
|
||||
return {
|
||||
requestId: item.requestId,
|
||||
dispenseId: item.dispenseId,
|
||||
requestTable: item.requestTable,
|
||||
};
|
||||
});
|
||||
list.push(data);
|
||||
params.push(...list);
|
||||
execute(params).then((res) => {
|
||||
if (res.code == 200) {
|
||||
proxy.$modal.msgSuccess('执行成功');
|
||||
@@ -346,7 +553,7 @@ function handleExecute(row) {
|
||||
// 添加操作列的合并方法
|
||||
function operationSpanMethod({ row, column, rowIndex, columnIndex }) {
|
||||
// 操作列是最后一列,索引为11 (从0开始)
|
||||
if (columnIndex === 11) {
|
||||
if (columnIndex === 12) {
|
||||
const groupId = row.groupId;
|
||||
// 如果没有groupId,则不合并
|
||||
if (groupId === undefined || groupId === null) {
|
||||
@@ -377,6 +584,7 @@ function operationSpanMethod({ row, column, rowIndex, columnIndex }) {
|
||||
return [1, 1];
|
||||
}
|
||||
|
||||
// 打印处方
|
||||
function printPrescription() {
|
||||
// 取出状态为已收费已发药的requestId
|
||||
let requestIds = activityList.value
|
||||
@@ -387,6 +595,10 @@ function printPrescription() {
|
||||
return item.requestId;
|
||||
})
|
||||
.join(',');
|
||||
if (requestIds.length == 0) {
|
||||
proxy.$modal.msgWarning('没有可打印的处方!');
|
||||
return;
|
||||
}
|
||||
advicePrint({ requestIds: requestIds, isPrescription: 1 }).then((res) => {
|
||||
// 按 sortNumber 排序
|
||||
const sortedList = res.data.adviceItemList.sort((a, b) => {
|
||||
@@ -430,7 +642,7 @@ function printPrescription() {
|
||||
}); //开始打印
|
||||
});
|
||||
}
|
||||
|
||||
// 打印处置单
|
||||
function printDisposal() {
|
||||
let requestIds = deviceActivityList.value
|
||||
.map((item) => {
|
||||
@@ -469,6 +681,7 @@ function isFirstRowInGroup(rowIndex) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// 打印血条码
|
||||
function printBloodBarcode() {
|
||||
const selectedRows = activityListRef.value.getSelectionRows();
|
||||
if (selectedRows.length === 0) {
|
||||
@@ -488,6 +701,27 @@ function printBloodBarcode() {
|
||||
}
|
||||
}
|
||||
|
||||
// 批量取消
|
||||
function handleBatchCancel() {
|
||||
// 获取校验后数据
|
||||
let params = handleBatchValidate('cancel');
|
||||
|
||||
// 如果参数数组为空 不执行
|
||||
if (params.length == 0) {
|
||||
proxy.$modal.msgError('不存在需要执行的处置或耗材!');
|
||||
return;
|
||||
}
|
||||
//
|
||||
cancel(params).then((res) => {
|
||||
if (res.code == 200) {
|
||||
proxy.$modal.msgSuccess('操作成功');
|
||||
handlePatientSelect(currentPatient.value);
|
||||
} else {
|
||||
proxy.$modal.msgError(res.message);
|
||||
}
|
||||
});
|
||||
}
|
||||
// 单个取消
|
||||
function handleCancel(row) {
|
||||
let data = {
|
||||
requestId: row.requestId,
|
||||
@@ -514,13 +748,22 @@ function handleCancel(row) {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 打印瓶贴
|
||||
function printBottleLabel() {
|
||||
let result = [];
|
||||
// 过滤出全部输液药品
|
||||
let printLiist = activityList.value.filter((item) => {
|
||||
return item.medCategory == '2';
|
||||
});
|
||||
let selectRows = activityListRef.value.getSelectionRows();
|
||||
let printLiist = [];
|
||||
// 有选中的优先打印选中行,没有的话打印全部的输液药品
|
||||
if (selectRows.length > 0) {
|
||||
printLiist = selectRows.filter((item) => {
|
||||
return item.medCategory == '2' || item.medCategory == '1';
|
||||
});
|
||||
} else {
|
||||
printLiist = activityList.value.filter((item) => {
|
||||
return item.medCategory == '2' || item.medCategory == '1';
|
||||
});
|
||||
}
|
||||
// 按照groupId分组,但将多天的项目展开为独立项目
|
||||
let expandedList = [];
|
||||
|
||||
@@ -585,6 +828,7 @@ function printBottleLabel() {
|
||||
var hiprintTemplate = new hiprint.PrintTemplate({ template: printElements }); // 定义模板
|
||||
console.log(result, '打印机列表');
|
||||
hiprintTemplate.print2(result, {
|
||||
// printer: 'Xprinter XP-365B',
|
||||
height: 210,
|
||||
width: 148,
|
||||
});
|
||||
@@ -599,6 +843,18 @@ function printBottleLabel() {
|
||||
});
|
||||
}
|
||||
|
||||
// 选择框改变时的处理
|
||||
function handleSelectionChange(selection, row) {
|
||||
const isSelected = selection.some((item) => item.requestId === row.requestId);
|
||||
activityList.value
|
||||
.filter((item) => {
|
||||
return item.groupId && item.groupId == row?.groupId;
|
||||
})
|
||||
.forEach((row) => {
|
||||
activityListRef.value.toggleRowSelection(row, isSelected);
|
||||
});
|
||||
}
|
||||
|
||||
function getRecord(row) {
|
||||
getPerformRecord({ reqId: row.requestId }).then((res) => {
|
||||
recordList.value = res.data;
|
||||
@@ -618,26 +874,6 @@ function getRecord(row) {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.main-content {
|
||||
display: flex;
|
||||
flex: 1;
|
||||
gap: 20px;
|
||||
overflow: hidden;
|
||||
height: calc(100% - 70px);
|
||||
}
|
||||
|
||||
.patient-section {
|
||||
min-width: 400px;
|
||||
width: 28%;
|
||||
background: white;
|
||||
border-radius: 12px;
|
||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
|
||||
padding: 20px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.right-section {
|
||||
flex: 2;
|
||||
display: flex;
|
||||
@@ -646,6 +882,28 @@ function getRecord(row) {
|
||||
min-width: 600px;
|
||||
}
|
||||
|
||||
.cards-column {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 12px;
|
||||
height: calc(90vh - 140px);
|
||||
min-height: 300px;
|
||||
}
|
||||
|
||||
.half-card {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
min-height: 0;
|
||||
}
|
||||
|
||||
.half-card :deep(.el-card__body) {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
min-height: 0;
|
||||
}
|
||||
|
||||
.current-patient {
|
||||
background: white;
|
||||
border-radius: 12px;
|
||||
@@ -773,4 +1031,12 @@ function getRecord(row) {
|
||||
width: 200px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
:deep(.no-hover-column) .cell:hover {
|
||||
background-color: transparent !important;
|
||||
}
|
||||
|
||||
:deep(.el-table__body) tr:hover td.no-hover-column {
|
||||
background-color: inherit !important;
|
||||
}
|
||||
</style>
|
||||
@@ -27,7 +27,7 @@
|
||||
<span>CF0000000001</span>
|
||||
</div>
|
||||
<div style="text-align: center">
|
||||
<h2>医院</h2>
|
||||
<h2>长春大学医院</h2>
|
||||
</div>
|
||||
<div style="text-align: center">
|
||||
<h3>处方单</h3>
|
||||
|
||||
@@ -112,7 +112,7 @@ import historicalPrescriptionDetail from './component/details.vue';
|
||||
import Prescription from './component/prescription.vue';
|
||||
const { proxy } = getCurrentInstance();
|
||||
|
||||
const { item_type } = proxy.useDict('item_type');
|
||||
const { item_category_code } = proxy.useDict('item_category_code');
|
||||
const prescriptionNo = ref('');
|
||||
const typeDetail = ref('1');
|
||||
const purchaseinventoryList = ref([]);
|
||||
|
||||
Reference in New Issue
Block a user