解决合并冲突

This commit is contained in:
2025-12-10 14:20:24 +08:00
parent e1385cb3e6
commit 18f6a845e6
804 changed files with 61881 additions and 13577 deletions

View File

@@ -1,8 +1,4 @@
/*
* @Author: sjjh
* @Date: 2025-09-07 12:09:26
* @Description:
*/
import request from '@/utils/request'
// 申请单相关接口
@@ -48,6 +44,46 @@ export function getSurgery(queryParams) {
}
/**
* 查询护理医嘱信息
*/
export function getNursingOrdersInfos() {
return request({
url: '/reg-doctorstation/special-advice/nursing-orders',
method: 'get'
})
}
/**
* 保存护理医嘱信息
* @param {Object} data - 护理医嘱数据
* @param {number} data.encounterId - 就诊id
* @param {number} data.patientId - 患者id
* @param {number} data.conditionId - 诊断ID
* @param {number} data.encounterDiagnosisId - 就诊诊断id
* @param {string} data.startTime - 医嘱开始时间 (yyyy-MM-dd HH:mm:ss)
* @param {Array} data.nursingOrdersSaveDetailDtoList - 护理医嘱详情保存集合
* @param {number} data.nursingOrdersSaveDetailDtoList[].definitionId - 护理项目定义ID
* @param {number} data.nursingOrdersSaveDetailDtoList[].categoryEnum - 护理项目类别编码:
* 26(护理级别)、38(病情)、39(护理常规)、27(膳食)、40(体位)、41(陪护)、42(隔离等级)
*/
export function saveNursingOrders(data) {
return request({
url: '/reg-doctorstation/special-advice/nursing-orders',
method: 'post',
data: data
})
}
/**
* 获取患者护理状态信息(用于回显)
*/
export function getEncounterNursingOrders(params) {
return request({
url: '/reg-doctorstation/special-advice/encounter-nursing-orders',
method: 'get',
params: params
})
}

View File

@@ -2,6 +2,7 @@
<div>
<el-row :gutter="24">
<el-col :span="4" :xs="24">
<<<<<<< HEAD
<el-input
v-model="diagnosis"
placeholder="诊断名称"
@@ -23,40 +24,40 @@
:filter-node-method="filterNode"
@node-click="handleNodeClick"
>
=======
<div style="height: 44px; display: flex; align-items: center; flex: none">
<el-input v-model="diagnosis" placeholder="诊断名称" clearable style="width: 100%"
@keyup.enter="queryDiagnosisUse">
<template #append>
<el-button icon="Search" @click="queryDiagnosisUse" />
</template>
</el-input>
</div>
<el-tree ref="treeRef" :data="tree" node-key="id" :props="{ label: 'name', children: 'children' }"
highlight-current default-expand-all :filter-node-method="filterNode" @node-click="handleNodeClick">
>>>>>>> upstream/develop
<template #default="{ node, data }">
<div class="custom-tree-node">
<span>{{ node.label }}</span>
<span class="tree-node-actions">
<template v-if="node.level === 1 && data.name != '常用' && data.name != '历史'">
<el-button
style="color: #000000"
type="text"
size="small"
@click.stop="addChild(data)"
>
<el-icon><Plus /></el-icon>
<el-button style="color: #000000" type="text" size="small" @click.stop="addChild(data)">
<el-icon>
<Plus />
</el-icon>
</el-button>
</template>
<el-popconfirm
width="200"
:hide-after="10"
title="确认删除此常用诊断吗"
placement="top-start"
@confirm="deleteChild(data)"
>
<el-popconfirm width="200" :hide-after="10" title="确认删除此常用诊断吗" placement="top-start"
@confirm="deleteChild(data)">
<template #reference>
<el-button
style="color: #000000"
v-if="
node.level === 2 &&
node.parent.data.name != '常用' &&
node.parent.data.name != '历史'
"
type="text"
size="small"
@click.stop=""
>
<el-icon><Minus /></el-icon>
<el-button style="color: #000000" v-if="
node.level === 2 &&
node.parent.data.name != '常用' &&
node.parent.data.name != '历史'
" type="text" size="small" @click.stop="">
<el-icon>
<Minus />
</el-icon>
</el-button>
</template>
</el-popconfirm>
@@ -82,32 +83,17 @@
</el-table-column>
<el-table-column label="诊断排序" align="center" prop="diagSrtNo" width="120">
<template #default="scope">
<el-form-item
:prop="`diagnosisList.${scope.$index}.diagSrtNo`"
:rules="rules.diagSrtNo"
>
<el-input-number
v-model="scope.row.diagSrtNo"
controls-position="right"
:controls="false"
style="width: 80px"
/>
<el-form-item :prop="`diagnosisList.${scope.$index}.diagSrtNo`" :rules="rules.diagSrtNo">
<el-input-number v-model="scope.row.diagSrtNo" controls-position="right" :controls="false"
style="width: 80px" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="诊断类别" align="center" prop="diagSrtNo" width="180">
<template #default="scope">
<el-form-item
:prop="`diagnosisList.${scope.$index}.medTypeCode`"
:rules="rules.medTypeCode"
>
<el-form-item :prop="`diagnosisList.${scope.$index}.medTypeCode`" :rules="rules.medTypeCode">
<el-select v-model="scope.row.medTypeCode" placeholder=" " style="width: 150px">
<el-option
v-for="item in med_type"
:key="item.value"
:label="item.label"
:value="item.value"
/>
<el-option v-for="item in med_type" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
</template>
@@ -115,25 +101,12 @@
<el-table-column label="诊断名称" align="center" prop="name">
<template #default="scope">
<el-form-item :prop="`diagnosisList.${scope.$index}.name`" :rules="rules.name">
<el-popover
:popper-style="{ padding: '0' }"
placement="bottom-start"
:visible="scope.row.showPopover"
trigger="manual"
:width="800"
>
<diagnosislist
:diagnosisSearchkey="diagnosisSearchkey"
@selectDiagnosis="handleSelsectDiagnosis"
/>
<el-popover :popper-style="{ padding: '0' }" placement="bottom-start" :visible="scope.row.showPopover"
trigger="manual" :width="800">
<diagnosislist :diagnosisSearchkey="diagnosisSearchkey" @selectDiagnosis="handleSelsectDiagnosis" />
<template #reference>
<el-input
v-model="scope.row.name"
placeholder="请选择诊断"
@input="handleChange"
@focus="handleFocus(scope.row, scope.$index)"
@blur="handleBlur(scope.row)"
/>
<el-input v-model="scope.row.name" placeholder="请选择诊断" @input="handleChange"
@focus="handleFocus(scope.row, scope.$index)" @blur="handleBlur(scope.row)" />
</template>
</el-popover>
</el-form-item>
@@ -145,6 +118,7 @@
<el-table-column label="诊断代码" align="center" prop="ybNo" width="180" />
<el-table-column label="诊断类型" align="center" prop="maindiseFlag" width="120">
<template #default="scope">
<<<<<<< HEAD
<div style="display:flex;flex-direction:column;align-items:center;gap:5px;">
<el-checkbox
label="主诊断"
@@ -167,17 +141,21 @@
:label="item.label"
:value="item.value"
/>
=======
<el-checkbox label="主诊断" :trueLabel="1" :falseLabel="0" v-model="scope.row.maindiseFlag" border
size="small" @change="(value) => handleMaindise(value, scope.$index)" />
<el-select v-model="scope.row.verificationStatusEnum" placeholder=" "
style="width: 40%; padding-bottom: 5px; padding-left: 10px" size="small">
<el-option v-for="item in diagnosisOptions" :key="item.value" :label="item.label"
:value="item.value" />
>>>>>>> upstream/develop
</el-select>
</div>
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="130">
<template #default="scope">
<el-button
link
type="primary"
@click="handleDeleteDiagnosis(scope.row, scope.$index)"
>
<el-button link type="primary" @click="handleDeleteDiagnosis(scope.row, scope.$index)">
删除
</el-button>
</template>
@@ -186,6 +164,7 @@
</el-form>
</el-col>
</el-row>
<<<<<<< HEAD
<diagnosisdialog
:openDiagnosis="openDiagnosis"
@close="closeDiagnosisDialog"
@@ -196,6 +175,11 @@
:patientInfo="props.patientInfo"
@close="closeDiagnosisDialog"
/>
=======
<diagnosisdialog :openDiagnosis="openDiagnosis" @close="closeDiagnosisDialog" :radio="orgOrUser" />
<AddDiagnosisDialog :openAddDiagnosisDialog="openAddDiagnosisDialog" :patientInfo="patientInfo"
@close="closeDiagnosisDialog" />
>>>>>>> upstream/develop
</div>
</template>
@@ -292,7 +276,6 @@ function getList() {
form.value.diagnosisList = diagnosisList;
emits('diagnosisSave', false);
console.log(form.value.diagnosisList);
}
});
@@ -321,7 +304,6 @@ function getList() {
});
}
emits('diagnosisSave', false);
console.log(form.value.diagnosisList);
}
});
@@ -594,7 +576,7 @@ function closeDiagnosisDialog(str) {
getTree();
}
function queryDiagnosisUse(value) {}
function queryDiagnosisUse(value) { }
function handleChange(value) {
diagnosisSearchkey.value = value;
@@ -658,6 +640,7 @@ defineExpose({ getList, getDetail, handleSaveDiagnosis });
.el-checkbox.is-bordered.el-checkbox--small {
background-color: #ffffff;
}
.custom-tree-node {
display: flex;
align-items: center;

View File

@@ -93,6 +93,17 @@ export function geturger(data) {
})
}
/**
* 住院患者转科
*/
export function transferOrganization(data) {
return request({
url: '/reg-doctorstation/special-advice/transfer-organization-orders',
method: 'post',
data: data
})
}

View File

@@ -121,7 +121,6 @@ const submitApplicationForm = () => {
}
};
const submitOk = () => {
debugger;
applicationFormDialogVisible.value = false;
applicationFormName.value = null;
};

View File

@@ -0,0 +1,59 @@
<template>
<el-dialog
v-model="dialogVisible"
destroy-on-close
width="600px"
:close-on-click-modal="false"
title="出院申请"
@close="closeDialog"
>
<div style="padding: 0 80px">
<el-form :model="form" :rules="rules" ref="formRef">
<el-form-item label="出院方式">
<el-select v-model="form.outpatientType">
<el-option
v-for="(item, index) in dscg_way"
:key="index"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="出院时间">
<el-radio-group v-model="form.outpatientTime">
<el-radio value="1">今日</el-radio>
<el-radio value="2">明日</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="出院描述"
><el-input v-model="form.outpatientDescription" type="textarea" rows="5" />
</el-form-item>
</el-form>
</div>
<template #footer>
<div class="dialog-footer">
<el-button @click="dialogVisible = false">取消</el-button>
<el-button type="primary" @click="submitApplicationForm"> 确认 </el-button>
</div>
</template>
</el-dialog>
</template>
<script setup>
const { proxy } = getCurrentInstance();
const { dscg_way } = proxy.useDict('dscg_way');
const dialogVisible = ref(false);
const form = reactive({
outpatientType: [],
outpatientTime: '',
outpatientDescription: '',
});
function openDialog() {
dialogVisible.value = true;
}
defineExpose({
openDialog,
});
</script>

View File

@@ -0,0 +1,148 @@
<template>
<el-dialog
v-model="dialogVisible"
destroy-on-close
width="600px"
:close-on-click-modal="false"
title="转科申请"
@close="closeDialog"
>
<div style="padding: 0 80px">
<el-form :model="form" :rules="rules" ref="formRef">
<el-form-item label="转入科室" prop="targetOrganizationId">
<el-select
v-model="form.targetOrganizationId"
@change="fetchWardList"
placeholder="请选择转入科室"
>
<el-option
v-for="item in deptList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="转入病区" prop="targetLocationId">
<el-select v-model="form.targetLocationId" no-data-text="请先选择科室" placeholder="请选择转入病区">
<el-option
v-for="item in wardList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="转科时间" prop="startTime">
<el-radio-group v-model="form.startTime">
<el-radio :value="today">今日</el-radio>
<el-radio :value="tomorrow">明日</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="转科原因" prop="reasonText">
<el-input
v-model="form.reasonText"
type="textarea"
rows="5"
placeholder="请输入转科原因"
/>
</el-form-item>
</el-form>
</div>
<template #footer>
<div class="dialog-footer">
<el-button @click="dialogVisible = false">取消</el-button>
<el-button type="primary" @click="submitApplicationForm"> 确认 </el-button>
</div>
</template>
</el-dialog>
</template>
<script setup>
import { transferOrganization } from './api.js';
import { getWardList, getOrgList } from '@/api/public.js';
import { patientInfo } from '../../../store/patient.js';
const { proxy } = getCurrentInstance();
const dialogVisible = ref(false);
const deptList = ref([]); // 科室列表
const wardList = ref([]); // 病区列表
const today = ref(proxy.formatDateStr(new Date(),'YYYY-MM-DD HH:mm:ss'))
const tomorrow = ref(proxy.formatDateStr(new Date().setDate(new Date + 1),'YYYY-MM-DD HH:mm:ss'))
const form = reactive({
targetOrganizationId: '',
targetLocationId: '',
startTime: '',
reasonText: '',
});
// 表单校验规则
const rules = ref({
targetOrganizationId: [{ required: true, message: '请选择转入科室', trigger: 'change' }],
targetLocationId: [{ required: true, message: '请选择转入病区', trigger: 'change' }],
startTime: [{ required: true, message: '请选择转科时间', trigger: 'change' }],
reasonText: [{ required: false }],
});
// 获取科室列表
function fetchDeptList() {
getOrgList().then((response) => {
deptList.value = response.data;
});
}
// 获取病区列表
function fetchWardList() {
getWardList({ orgId: form.targetOrganizationId }).then((response) => {
wardList.value = response.data;
});
}
function openDialog() {
dialogVisible.value = true;
// 打开对话框时获取数据
fetchDeptList();
}
// 提交表单
function submitApplicationForm() {
proxy.$refs.formRef.validate((valid) => {
console.log(patientInfo.value);
if (valid) {
form.encounterId = patientInfo.value.encounterId
form.patientId = patientInfo.value.patientId
// 表单校验通过,执行提交逻辑
transferOrganization(form).then((res) => {
if (res.code == 200) {
proxy.$modal.msgSuccess('转科申请已提交');
dialogVisible.value = false;
}
});
} else {
// 表单校验不通过
proxy.$modal.msgWarning('请完善必填信息');
return false;
}
});
}
// 关闭对话框
function closeDialog() {
// 重置表单
proxy.$refs.formRef.resetFields();
// 重置数据
Object.assign(form, {
targetOrganizationId: '',
targetLocationId: '',
startTime: '',
reasonText: '',
});
}
defineExpose({
openDialog,
});
</script>

View File

@@ -10,10 +10,20 @@
<el-button type="warning" plain @click="handleSingOut()" :disabled="false">
撤回
</el-button>
<el-button type="primary" plain @click="proxy.$refs.orderFroupRef.handleOpen()" :disabled="false">
<el-button
type="primary"
plain
@click="proxy.$refs.orderFroupRef.handleOpen()"
:disabled="false"
>
组套
</el-button>
<el-button type="primary" plain :disabled="false" @click="proxy.$refs.prescriptionHistoryRef.handleOpen()">
<el-button
type="primary"
plain
:disabled="false"
@click="proxy.$refs.prescriptionHistoryRef.handleOpen()"
>
历史
</el-button>
<el-button type="default" @click="combination()" :disabled="false"> 组合 </el-button>
@@ -24,13 +34,22 @@
<el-button type="danger" plain @click="handleDelete()" :disabled="false"> 删除 </el-button>
<span class="descriptions-item-label"> 诊断 </span>
<el-select v-model="conditionDefinitionId" placeholder="诊断" style="width: 180px">
<el-option v-for="item in diagnosisList" :key="item.conditionId" :label="item.name" :value="item.definitionId"
@click="handleDiagnosisChange(item)" />
<el-option
v-for="item in diagnosisList"
:key="item.conditionId"
:label="item.name"
:value="item.definitionId"
@click="handleDiagnosisChange(item)"
/>
</el-select>
<span class="descriptions-item-label"> 费用性质 </span>
<el-select v-model="accountId" placeholder="费用性质" style="width: 180px">
<el-option v-for="item in contractList" :key="item.accountId" :label="item.contractName"
:value="item.accountId" />
<el-option
v-for="item in contractList"
:key="item.accountId"
:label="item.contractName"
:value="item.accountId"
/>
</el-select>
<span class="descriptions-item-label">
合计金额{{ totalAmount ? totalAmount.toFixed(2) : 0 }}
@@ -47,19 +66,38 @@
<el-radio-button label="临时" value="2" />
</el-radio-group>
<el-select v-model="orderClassCode" placeholder="医嘱类型" style="width: 240px">
<el-option v-for="item in adviceTypeList" :key="item.value" :label="item.label" :value="item.value" />
<el-option
v-for="item in adviceTypeList"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
<el-select v-model="orderStatus" placeholder="医嘱状态" style="width: 240px"> </el-select>
<el-button link type="primary" @click="handleTransferOrg">转科</el-button>
<el-button link type="primary" @click="handleLeaveHospital">出院</el-button>
</el-space>
</div>
</div>
<div class="inpatientDoctor-order-table">
<el-table max-height="650" ref="prescriptionRef" :data="prescriptionList" row-key="uniqueKey" border
@cell-click="clickRow" @row-dblclick="clickRowDb" v-loading="loading" :expand-row-keys="expandOrder">
<el-table
max-height="650"
ref="prescriptionRef"
:data="prescriptionList"
row-key="uniqueKey"
border
@cell-click="clickRow"
@row-dblclick="clickRowDb"
v-loading="loading"
:expand-row-keys="expandOrder"
>
<el-table-column type="expand" width="1" style="width: 0">
<template #default="scope">
<el-form :model="scope.row" :rules="rowRules" :ref="'formRef' + scope.$index">
<div class="expend_div" style="padding: 16px; background: #f8f9fa; border-radius: 8px">
<div
class="expend_div"
style="padding: 16px; background: #f8f9fa; border-radius: 8px"
>
<template v-if="scope.row.adviceType == 1">
<div style="display: flex; align-items: center; margin-bottom: 16px; gap: 16px">
<span class="medicine-title">
@@ -92,10 +130,17 @@
</el-select>
</el-form-item> -->
<el-form-item prop="lotNumber" label="药房:">
<el-select v-model="scope.row.inventoryId" style="width: 180px; margin-right: 20px"
placeholder="药房">
<el-option v-for="item in scope.row.stockList" :key="item.inventoryId" :value="item.inventoryId"
:label="item.locationName +
<el-select
v-model="scope.row.inventoryId"
style="width: 180px; margin-right: 20px"
placeholder="药房"
>
<el-option
v-for="item in scope.row.stockList"
:key="item.inventoryId"
:value="item.inventoryId"
:label="
item.locationName +
' ' +
'批次号: ' +
item.lotNumber +
@@ -111,19 +156,32 @@
item.price.toFixed(2) +
'/' +
item.unitCode_dictText
" @click="handleNumberClick(item, scope.$index)" />
"
@click="handleNumberClick(item, scope.$index)"
/>
</el-select>
</el-form-item>
<el-form-item label="执行次数:" prop="executeNum" class="required-field" data-prop="executeNum"
v-if="scope.row.injectFlag == 1">
<el-input-number :min="1" v-model="scope.row.executeNum" controls-position="right"
:controls="false" :ref="(el) => (inputRefs.executeNum = el)"
<el-form-item
label="执行次数:"
prop="executeNum"
class="required-field"
data-prop="executeNum"
v-if="scope.row.injectFlag == 1"
>
<el-input-number
:min="1"
v-model="scope.row.executeNum"
controls-position="right"
:controls="false"
:ref="(el) => (inputRefs.executeNum = el)"
@keyup.enter.prevent="handleEnter('executeNum', scope.row, scope.$index)"
style="width: 70px; margin-right: 20px" />
</el-form-item>x
<span class="medicine-info"> 诊断{{ diagnosisName }} </span>x
style="width: 70px; margin-right: 20px"
/> </el-form-item
>x <span class="medicine-info"> 诊断{{ diagnosisName }} </span>x
<span class="medicine-info"> 皮试{{ scope.row.skinTestFlag_enumText }} </span>
<span class="medicine-info"> 注射药品{{ scope.row.injectFlag_enumText }} </span>
<span class="medicine-info">
注射药品{{ scope.row.injectFlag_enumText }}
</span>
<span class="total-amount">
总金额{{ scope.row.totalPrice ? scope.row.totalPrice + ' 元' : '0.00 元' }}
</span>
@@ -131,104 +189,200 @@
<div style="display: flex; align-items: center; gap: 12px; flex-wrap: wrap">
<div class="form-group">
<!-- 单次剂量 -->
<el-form-item label="单次用量:" prop="doseQuantity" class="required-field" data-prop="doseQuantity">
<el-input-number :min="0" v-model="scope.row.doseQuantity" controls-position="right"
:controls="false" style="width: 70px; margin-right: 20px"
:ref="(el) => (inputRefs.doseQuantity = el)" @input="convertValues(scope.row, scope.$index)"
@keyup.enter.prevent="handleEnter('doseQuantity', scope.row, scope.$index)" />
<el-form-item
label="单次用量:"
prop="doseQuantity"
class="required-field"
data-prop="doseQuantity"
>
<el-input-number
:min="0"
v-model="scope.row.doseQuantity"
controls-position="right"
:controls="false"
style="width: 70px; margin-right: 20px"
:ref="(el) => (inputRefs.doseQuantity = el)"
@input="convertValues(scope.row, scope.$index)"
@keyup.enter.prevent="
handleEnter('doseQuantity', scope.row, scope.$index)
"
/>
</el-form-item>
<!-- 剂量单位 -->
<el-select v-model="scope.row.minUnitCode" style="width: 70px; margin-right: 20px"
placeholder=" ">
<el-select
v-model="scope.row.minUnitCode"
style="width: 70px; margin-right: 20px"
placeholder=" "
>
<template v-for="item in scope.row.unitCodeList" :key="item.value">
<el-option v-if="
scope.row.unitCodeList.length == 3
? item.type == unitMap['minUnit']
: item.type == unitMap['unit']
" :value="item.value" :label="item.label" />
<el-option
v-if="
scope.row.unitCodeList.length == 3
? item.type == unitMap['minUnit']
: item.type == unitMap['unit']
"
:value="item.value"
:label="item.label"
/>
</template>
</el-select>
<span>=</span>
<!-- 单次剂量 -->
<el-form-item prop="dose" class="required-field" data-prop="dose">
<el-input-number v-model="scope.row.dose" controls-position="right" :controls="false"
style="width: 70px; margin: 0 20px" :ref="(el) => (inputRefs.dose = el)"
<el-input-number
v-model="scope.row.dose"
controls-position="right"
:controls="false"
style="width: 70px; margin: 0 20px"
:ref="(el) => (inputRefs.dose = el)"
@input="convertDoseValues(scope.row, scope.$index)"
@keyup.enter.prevent="handleEnter('dose', scope.row, scope.$index)" />
@keyup.enter.prevent="handleEnter('dose', scope.row, scope.$index)"
/>
</el-form-item>
<!-- 全部单位 -->
<el-select v-model="scope.row.doseUnitCode" style="width: 70px" placeholder=" "
@change="convertValues(scope.row, scope.$index)">
<el-option v-for="item in scope.row.unitCodeList" :value="item.value" :label="item.label"
:key="item.value" />
<el-select
v-model="scope.row.doseUnitCode"
style="width: 70px"
placeholder=" "
@change="convertValues(scope.row, scope.$index)"
>
<el-option
v-for="item in scope.row.unitCodeList"
:value="item.value"
:label="item.label"
:key="item.value"
/>
</el-select>
</div>
<div class="form-group">
<el-form-item label="给药途径:" prop="methodCode" class="required-field" data-prop="methodCode">
<el-select v-model="scope.row.methodCode" placeholder="给药途径" clearable filterable
:ref="(el) => (inputRefs.methodCode = el)" @keyup.enter.prevent="
<el-form-item
label="给药途径:"
prop="methodCode"
class="required-field"
data-prop="methodCode"
>
<el-select
v-model="scope.row.methodCode"
placeholder="给药途径"
clearable
filterable
:ref="(el) => (inputRefs.methodCode = el)"
@keyup.enter.prevent="
() => {
inputRefs.methodCode.blur();
}
" @visible-change="
(value) => {
if (!value) {
handleEnter('methodCode', scope.row, scope.$index);
"
@visible-change="
(value) => {
if (!value) {
handleEnter('methodCode', scope.row, scope.$index);
}
}
}
">
<el-option v-for="dict in method_code" :key="dict.value" :label="dict.label"
:value="dict.value" />
"
>
<el-option
v-for="dict in method_code"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="用药频次:" prop="rateCode" class="required-field" data-prop="rateCode">
<el-select v-model="scope.row.rateCode" placeholder="频次" style="width: 120px" filterable
<el-form-item
label="用药频次:"
prop="rateCode"
class="required-field"
data-prop="rateCode"
>
<el-select
v-model="scope.row.rateCode"
placeholder="频次"
style="width: 120px"
filterable
@keyup.enter.prevent="
() => {
inputRefs.rateCode.blur();
}
" @change="calculateTotalAmount(scope.row, scope.$index)" @visible-change="
(value) => {
if (!value) {
handleEnter('rateCode', scope.row, scope.$index);
"
@change="calculateTotalAmount(scope.row, scope.$index)"
@visible-change="
(value) => {
if (!value) {
handleEnter('rateCode', scope.row, scope.$index);
}
}
}
" :ref="(el) => (inputRefs.rateCode = el)">
<el-option v-for="dict in rate_code" :key="dict.value" :label="dict.label"
:value="dict.value" />
"
:ref="(el) => (inputRefs.rateCode = el)"
>
<el-option
v-for="dict in rate_code"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</div>
</div>
<div style="
display: flex;
align-items: center;
gap: 12px;
flex-wrap: wrap;
margin-top: 10px;
">
<div
style="
display: flex;
align-items: center;
gap: 12px;
flex-wrap: wrap;
margin-top: 10px;
"
>
<div class="form-group">
<el-form-item label="用药天数:" prop="dispensePerDuration" class="required-field"
data-prop="dispensePerDuration">
<el-input-number v-model="scope.row.dispensePerDuration" style="width: 80px" :min="1"
controls-position="right" :controls="false"
:ref="(el) => (inputRefs.dispensePerDuration = el)" @keyup.enter.prevent="
<el-form-item
label="用药天数:"
prop="dispensePerDuration"
class="required-field"
data-prop="dispensePerDuration"
>
<el-input-number
v-model="scope.row.dispensePerDuration"
style="width: 80px"
:min="1"
controls-position="right"
:controls="false"
:ref="(el) => (inputRefs.dispensePerDuration = el)"
@keyup.enter.prevent="
handleEnter('dispensePerDuration', scope.row, scope.$index)
">
"
>
<template #suffix>天</template>
</el-input-number>
</el-form-item>
<el-form-item label="总量:" prop="quantity" class="required-field" data-prop="quantity">
<el-input-number v-model="scope.row.quantity" style="width: 70px" controls-position="right"
:controls="false" :ref="(el) => (inputRefs.quantity = el)"
<el-form-item
label="总量:"
prop="quantity"
class="required-field"
data-prop="quantity"
>
<el-input-number
v-model="scope.row.quantity"
style="width: 70px"
controls-position="right"
:controls="false"
:ref="(el) => (inputRefs.quantity = el)"
@keyup.enter.prevent="handleEnter('quantity', scope.row, scope.$index)"
@input="calculateTotalPrice(scope.row, scope.$index)" />
@input="calculateTotalPrice(scope.row, scope.$index)"
/>
</el-form-item>
<el-select v-model="scope.row.unitCode" style="width: 70px; margin-right: 20px" placeholder=" "
@change="calculateTotalAmount(scope.row, scope.$index)">
<el-select
v-model="scope.row.unitCode"
style="width: 70px; margin-right: 20px"
placeholder=" "
@change="calculateTotalAmount(scope.row, scope.$index)"
>
<template v-for="item in scope.row.unitCodeList" :key="item.value">
<el-option v-if="item.type != unitMap['dose']" :value="item.value" :label="item.label" />
<el-option
v-if="item.type != unitMap['dose']"
:value="item.value"
:label="item.label"
/>
</template>
</el-select>
</div>
@@ -251,10 +405,17 @@
}}
</span>
<div class="form-group">
<el-select v-model="scope.row.lotNumber" style="width: 180px; margin-right: 20px"
placeholder="药房">
<el-option v-for="item in scope.row.stockList" :key="item.lotNumber" :value="item.lotNumber"
:label="item.locationName +
<el-select
v-model="scope.row.lotNumber"
style="width: 180px; margin-right: 20px"
placeholder="药房"
>
<el-option
v-for="item in scope.row.stockList"
:key="item.lotNumber"
:value="item.lotNumber"
:label="
item.locationName +
' ' +
'批次号: ' +
item.lotNumber +
@@ -270,26 +431,49 @@
item.price.toFixed(2) +
'/' +
item.unitCode_dictText
" @click="handleNumberClick(item, scope.$index)" />
"
@click="handleNumberClick(item, scope.$index)"
/>
</el-select>
<el-form-item label="数量:" prop="quantity" class="required-field" data-prop="quantity">
<el-input-number placeholder="数量" v-model="scope.row.quantity" style="width: 70px"
controls-position="right" :controls="false"
<el-form-item
label="数量:"
prop="quantity"
class="required-field"
data-prop="quantity"
>
<el-input-number
placeholder="数量"
v-model="scope.row.quantity"
style="width: 70px"
controls-position="right"
:controls="false"
@keyup.enter.prevent="handleEnter('quantity', scope.row, scope.$index)"
@input="calculateTotalAmount(scope.row, scope.$index)" />
@input="calculateTotalAmount(scope.row, scope.$index)"
/>
</el-form-item>
<el-select v-model="scope.row.unitCode" style="width: 70px; margin-right: 20px" placeholder=" "
@change="calculateTotalAmount(scope.row, scope.$index)">
<el-select
v-model="scope.row.unitCode"
style="width: 70px; margin-right: 20px"
placeholder=" "
@change="calculateTotalAmount(scope.row, scope.$index)"
>
<template v-for="item in scope.row.unitCodeList" :key="item.value">
<el-option v-if="item.type != unitMap['dose']" :value="item.value" :label="item.label" @click="
() => {
scope.row.unitCode_dictText = item.label;
}
" />
<el-option
v-if="item.type != unitMap['dose']"
:value="item.value"
:label="item.label"
@click="
() => {
scope.row.unitCode_dictText = item.label;
}
"
/>
</template>
</el-select>
<span class="total-amount">
总金额:{{ scope.row.totalPrice ? scope.row.totalPrice + ' 元' : '0.00 元' }}
总金额:{{
scope.row.totalPrice ? scope.row.totalPrice + ' 元' : '0.00 元'
}}
</span>
</div>
<el-button type="primary" @click="handleSaveSign(scope.row, scope.$index)">
@@ -308,20 +492,45 @@
}}
</span>
<div class="form-group">
<el-form-item label="执行次数:" prop="quantity" class="required-field" data-prop="quantity">
<el-input-number placeholder="执行次数" style="width: 100px; margin: 0 20px"
v-model="scope.row.quantity" controls-position="right" :controls="false"
<el-form-item
label="执行次数:"
prop="quantity"
class="required-field"
data-prop="quantity"
>
<el-input-number
placeholder="执行次数"
style="width: 100px; margin: 0 20px"
v-model="scope.row.quantity"
controls-position="right"
:controls="false"
@keyup.enter.prevent="handleEnter('quantity', scope.row, scope.$index)"
@input="calculateTotalPrice(scope.row, scope.$index)" />
@input="calculateTotalPrice(scope.row, scope.$index)"
/>
</el-form-item>
<el-form-item label="执行科室:" prop="orgId" class="required-field" data-prop="orgId">
<el-tree-select clearable v-model="scope.row.orgId" style="width: 200px" :data="organization"
:props="{ value: 'id', label: 'name', children: 'children' }" value-key="id" check-strictly
default-expand-all @change="(value) => handleOrgChange(value, scope.$index)"
placeholder="请选择执行科室" />
<el-form-item
label="执行科室:"
prop="orgId"
class="required-field"
data-prop="orgId"
>
<el-tree-select
clearable
v-model="scope.row.orgId"
style="width: 200px"
:data="organization"
:props="{ value: 'id', label: 'name', children: 'children' }"
value-key="id"
check-strictly
default-expand-all
@change="(value) => handleOrgChange(value, scope.$index)"
placeholder="请选择执行科室"
/>
</el-form-item>
<span class="total-amount">
总金额:{{ scope.row.totalPrice ? scope.row.totalPrice + ' 元' : '0.00 元' }}
总金额:{{
scope.row.totalPrice ? scope.row.totalPrice + ' 元' : '0.00 元'
}}
</span>
<span style="font-size: 16px; font-weight: 600">
<!-- 金额: {{ scope.row.priceList[0].price }} -->
@@ -338,18 +547,25 @@
</el-table-column>
<el-table-column label="" align="center" prop="groupId" width="60">
<template #header>
<el-checkbox v-model="checkAll" @change="
(value) => {
prescriptionList.forEach((item, index) => {
groupIndexList.push(index);
item.check = value;
});
}
" />
<el-checkbox
v-model="checkAll"
@change="
(value) => {
prescriptionList.forEach((item, index) => {
groupIndexList.push(index);
item.check = value;
});
}
"
/>
</template>
<template #default="scope">
<el-checkbox v-model="scope.row.check" @dblclick.stop="" placeholder=""
@change="(value) => handleCheckBoxChange(value, scope.$index, scope.row)" />
<el-checkbox
v-model="scope.row.check"
@dblclick.stop=""
placeholder=""
@change="(value) => handleCheckBoxChange(value, scope.$index, scope.row)"
/>
</template>
</el-table-column>
<el-table-column label="组" align="center" width="60">
@@ -363,11 +579,18 @@
</el-table-column>
<el-table-column label="类型" align="center" prop="" width="120">
<template #default="scope">
<el-radio-group v-model="scope.row.therapyEnum" size="small" v-if="getRowDisabled(scope.row)">
<el-radio-group
v-model="scope.row.therapyEnum"
size="small"
v-if="getRowDisabled(scope.row)"
>
<el-radio-button label="长期" value="1" />
<el-radio-button label="临时" value="2" />
</el-radio-group>
<span v-else :style="scope.row.therapyEnum == '1' ? 'color: #a6745c' : 'color: #3787a5'">
<span
v-else
:style="scope.row.therapyEnum == '1' ? 'color: #a6745c' : 'color: #3787a5'"
>
{{ scope.row.therapyEnum_enumText }}
</span>
</template>
@@ -375,31 +598,54 @@
<el-table-column label="医嘱" align="center" prop="productName" width="300">
<template #default="scope">
<template v-if="getRowDisabled(scope.row)">
<el-select style="width: 35%; margin-right: 20px" v-model="scope.row.adviceType"
:ref="'adviceTypeRef' + scope.$index" @change="
<el-select
style="width: 35%; margin-right: 20px"
v-model="scope.row.adviceType"
:ref="'adviceTypeRef' + scope.$index"
@change="
(value) => {
expandOrder = [];
prescriptionList[scope.$index].adviceName = undefined;
adviceQueryParams.adviceType = value;
}
">
<el-option v-for="item in adviceTypeList" :key="item.value" :label="item.label" :value="item.value"
"
>
<el-option
v-for="item in adviceTypeList"
:key="item.value"
:label="item.label"
:value="item.value"
@click="
() => {
prescriptionList[scope.$index].adviceType = item.value;
prescriptionList[scope.$index].adviceType_dictText = item.label;
}
" />
"
/>
</el-select>
<el-popover :popper-style="{ padding: '0' }" placement="bottom-start" :visible="scope.row.showPopover"
:width="1200">
<adviceBaseList ref="adviceTableRef" :popoverVisible="scope.row.showPopover"
:adviceQueryParams="adviceQueryParams" :patientInfo="patientInfo"
@selectAdviceBase="(row) => selectAdviceBase(scope.row.uniqueKey, row)" />
<el-popover
:popper-style="{ padding: '0' }"
placement="bottom-start"
:visible="scope.row.showPopover"
:width="1200"
>
<adviceBaseList
ref="adviceTableRef"
:popoverVisible="scope.row.showPopover"
:adviceQueryParams="adviceQueryParams"
:patientInfo="patientInfo"
@selectAdviceBase="(row) => selectAdviceBase(scope.row.uniqueKey, row)"
/>
<template #reference>
<el-input :ref="'adviceRef' + scope.$index" style="width: 50%" v-model="scope.row.adviceName"
placeholder="请选择项目" @input="handleChange" @click="handleFocus(scope.row, scope.$index)"
@keyup.enter.stop="handleFocus(scope.row, scope.$index)" @keydown="
<el-input
:ref="'adviceRef' + scope.$index"
style="width: 50%"
v-model="scope.row.adviceName"
placeholder="请选择项目"
@input="handleChange"
@click="handleFocus(scope.row, scope.$index)"
@keyup.enter.stop="handleFocus(scope.row, scope.$index)"
@keydown="
(e) => {
if (!scope.row.showPopover) return;
// 拦截上下键和回车事件
@@ -409,7 +655,9 @@
adviceTableRef.handleKeyDown(e);
}
}
" @blur="handleBlur(scope.row)" />
"
@blur="handleBlur(scope.row)"
/>
</template>
</el-popover>
</template>
@@ -464,11 +712,11 @@
{{
scope.row.rateCode_dictText
? scope.row.rateCode_dictText +
' ' +
scope.row.dispensePerDuration +
'天' +
' ' +
scope.row.methodCode_dictText
' ' +
scope.row.dispensePerDuration +
'天' +
' ' +
scope.row.methodCode_dictText
: ''
}}
</span>
@@ -510,8 +758,8 @@
:patientInfo="patientInfo.value"
@userPrescriptionHistory="handleSaveHistory"
/> -->
<LeaveHospitalDialog ref="leaveHospitalDialogRef" />
<TransferOrganizationDialog ref="transferOrganizationRef" />
</div>
</template>
@@ -537,6 +785,8 @@ import { patientInfo } from '../../store/patient.js';
import Decimal from 'decimal.js';
import useUserStore from '@/store/modules/user';
import ApplicationFormBottomBtn from './applicationForm/applicationFormBottomBtn.vue';
import LeaveHospitalDialog from './applicationForm/leaveHospitalDialog.vue';
import TransferOrganizationDialog from './applicationForm/transferOrganizationDialog.vue';
const emit = defineEmits(['selectDiagnosis']);
const total = ref(0);
const queryParams = ref({});
@@ -1376,7 +1626,7 @@ function handleSingOut() {
function handleStopAdvice() {
let requestIdList = prescriptionList.value
.filter((item) => {
return item.check && item.therapyEnum == '1';
return item.check;
})
.map((item) => {
return {
@@ -1384,10 +1634,10 @@ function handleStopAdvice() {
adviceType: item.adviceType,
};
});
if (requestIdList.length == 0) {
proxy.$modal.msgWarning('仅长期医嘱可停止');
return;
}
// if (requestIdList.length == 0) {
// proxy.$modal.msgWarning('仅长期医嘱可停止');
// return;
// }
stopAdvice(requestIdList).then((res) => {
if (res.code == 200) {
proxy.$modal.msgSuccess('操作成功');
@@ -1743,10 +1993,12 @@ function sortPrescriptionList() {
});
}
// 获取全部选中行
// function getSelectRows() {
// return prescriptionList.value.filter((item) => item.check);
// }
function handleLeaveHospital() {
proxy.$refs['leaveHospitalDialogRef'].openDialog();
}
function handleTransferOrg() {
proxy.$refs['transferOrganizationRef'].openDialog();
}
// 处理行chexkbox选中
function handleCheckBoxChange(value, index, row) {
@@ -1893,7 +2145,7 @@ defineExpose({ getListInfo, getDiagnosisInfo });
.order-operate-btn {
flex: none;
}
.inpatientDoctor-order-table{
.inpatientDoctor-order-table {
flex: auto;
width: 100%;
}

View File

@@ -5,26 +5,31 @@
-->
<template>
<div class="emr-use-container">
<div class="template-tree-container">
<div class="search-box">
<el-input placeholder="病历名称搜索..." v-model="queryParams.name">
<template #append>
<el-button @click="queryTemplateTree">查询</el-button>
</template>
</el-input>
<div class="disBtn" :class="{'disLeftBtnNor':leftShow,'disLeftBtnAct':!leftShow}" @click="disNode"><img src="../../../../assets/icons/svg/foldup.svg"></div>
<div class="disBtn" :class="{'disRightBtnNor':rightShow,'disRightBtnAct':!rightShow}" @click="disNode_R"><img src="../../../../assets/icons/svg/foldup.svg"></div>
<transition name="el-zoom-in-left">
<div class="template-tree-container" v-if="leftShow">
<div class="search-box">
<el-input placeholder="病历名称搜索..." v-model="queryParams.name">
<template #append>
<el-button @click="queryTemplateTree">查询</el-button>
</template>
</el-input>
</div>
<el-scrollbar class="template-tree-scrollbar">
<el-tree
ref="templateTree"
:data="templateData"
:props="defaultProps"
auto-expand-parent
node-key="id"
@node-click="handleNodeClick"
class="template-tree"
></el-tree>
</el-scrollbar>
</div>
<el-scrollbar class="template-tree-scrollbar">
<el-tree
ref="templateTree"
:data="templateData"
:props="defaultProps"
auto-expand-parent
node-key="id"
@node-click="handleNodeClick"
class="template-tree"
></el-tree>
</el-scrollbar>
</div>
</transition>
<div class="operate-container">
<div class="operate-btns">
<el-space>
@@ -40,25 +45,29 @@
</el-scrollbar>
</div>
</div>
<div class="quickly-container">
<el-tabs v-model="quicklyactiveName" type="card">
<el-tab-pane label="历史" name="history">
<History
@historyClick="handleHistoryClick"
ref="historyRef"
v-model:definitionId="currentSelectTemplate.id"
/>
</el-tab-pane>
<el-tab-pane label="模版" name="model">
<Template
@templateClick="handleTemplateClick"
ref="templateRef"
v-model:definitionId="currentSelectTemplate.id"
@edit="templateEdit"
/>
</el-tab-pane>
</el-tabs>
</div>
<transition name="el-zoom-in-left">
<div class="quickly-container" v-if="rightShow">
<el-tabs v-model="quicklyactiveName" type="card">
<el-tab-pane label="历史" name="history">
<History
@historyClick="handleHistoryClick"
ref="historyRef"
v-model:definitionId="currentSelectTemplate.id"
/>
</el-tab-pane>
<el-tab-pane label="模版" name="model">
<Template
@templateClick="handleTemplateClick"
ref="templateRef"
v-model:definitionId="currentSelectTemplate.id"
@edit="templateEdit"
/>
</el-tab-pane>
</el-tabs>
</div>
</transition>
<TemplateEdit
ref="templateEditRef"
:formData="editTemplateForm"
@@ -93,6 +102,9 @@ const currentSelectTemplate = ref({
const currentComponent = ref('');
const emrComponentRef = ref(null);
const quicklyactiveName = ref('history');
const leftShow = ref(true);
const rightShow = ref(true);
// 树配置(模板树)
const defaultProps = {
@@ -175,7 +187,6 @@ const handleSubmitOk = async (data) => {
if (currentOperate.value === 'add') {
//
try {
// debugger;
if (!patientInfo.value?.encounterId || !patientInfo.value?.patientId) {
ElMessage.error('请先选择患者!');
return;
@@ -263,11 +274,77 @@ onMounted(() => {
});
defineExpose({ state });
const disNode = () => {
leftShow.value = !leftShow.value;
}
const disNode_R = () => {
rightShow.value = !rightShow.value;
}
</script>
<style lang="scss" scoped>
.emr-use-container {
display: flex;
height: 100%;
img {
width: 200%;
height: 200%;
}
.disBtn {
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
overflow: hidden;
}
.disLeftBtnNor {
cursor: pointer;
position: absolute;
top: 40%;
left: 18%;
width: 20px;
height: 60px;
z-index: 1111;
img {
transform: rotate(-90deg) ;
}
}
.disLeftBtnAct {
cursor: pointer;
position: absolute;
top: 40%;
left: 0;
width: 20px;
height: 60px;
z-index: 1111;
img {
transform: rotate(90deg);
}
}
.disRightBtnNor {
cursor: pointer;
position: absolute;
top: 40%;
right: 18.5%;
width: 20px;
height: 60px;
z-index: 1111;
img {
transform: rotate(90deg);
}
}
.disRightBtnAct {
cursor: pointer;
position: absolute;
top: 40%;
right: 0;
width: 20px;
height: 60px;
z-index: 1111;
img {
transform: rotate(-90deg);
}
}
.template-tree-container {
border-right: 1px solid #ebeef5;
@@ -293,8 +370,9 @@ defineExpose({ state });
}
.operate-container {
width: 300px;
flex: auto;
width: 100%;
//width: 300px;
//flex: auto;
display: flex;
flex-direction: column;
padding: 0 8px 8px 8px;
@@ -323,4 +401,12 @@ defineExpose({ state });
}
}
}
@layer utilities {
.transition-width {
transition-property: width;
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
transition-duration: 300ms;
}
}
</style>

View File

@@ -11,4 +11,5 @@ import BloodTtransfusionAapplication from './components/applicationShow/bloodTtr
import ExamineApplication from './components/applicationShow/examineApplication.vue'
import SurgeryApplication from './components/applicationShow/surgeryApplication.vue'
import TestApplication from './components/applicationShow/testApplication.vue'
export { PatientList, PatientCard, Advice,Diagnose, BloodTtransfusionAapplication, ExamineApplication, SurgeryApplication, TestApplication }
import NursingStatus from './components/applicationShow/nursingStatus.vue'
export { PatientList, PatientCard, Advice,Diagnose, BloodTtransfusionAapplication, ExamineApplication, SurgeryApplication, TestApplication, NursingStatus }

View File

@@ -21,8 +21,8 @@
<el-tab-pane label="诊断录入" name="diagnosis">
<Diagnose ref="diagnosisRef" :patientInfo="patientInfo" />
</el-tab-pane>
<el-tab-pane label="住院病历" name="emr">
<emr />
<el-tab-pane label="住院病历" name="inhospitalEmr">
<Emr ref="inhospitalEmrRef"/>
</el-tab-pane>
<el-tab-pane label="医技报告" name="fourth">Task</el-tab-pane>
<el-tab-pane label="检验申请" name="test">
@@ -37,6 +37,9 @@
<el-tab-pane label="输血申请" name="blood">
<BloodTtransfusionAapplication />
</el-tab-pane>
<el-tab-pane label="护理状态" name="nursing">
<NursingStatus />
</el-tab-pane>
</el-tabs>
</el-main>
</el-container>
@@ -48,7 +51,7 @@ import { getCurrentInstance, onBeforeMount, onMounted, reactive, ref } from 'vue
// const { proxy } = getCurrentInstance()
// const emits = defineEmits([])
// const props = defineProps({})
import Emr from "./emr/index.vue";
import Emr from './emr/index.vue';
import inPatientBarDoctorFold from '@/components/patientBar/inPatientBarDoctorFold.vue';
import {
PatientList,
@@ -58,6 +61,7 @@ import {
ExamineApplication,
SurgeryApplication,
TestApplication,
NursingStatus,
} from './index.js';
const state = reactive({});
onBeforeMount(() => {});