提交merge1.3

This commit is contained in:
2025-12-27 15:30:40 +08:00
parent 088861f66e
commit 3c497417dc
167 changed files with 0 additions and 17577 deletions

View File

@@ -104,14 +104,6 @@
style="width: 200px"
:class="{ 'error-border': scope.row.error }"
>
<<<<<<< HEAD
<el-option
v-for="dict in med_category_code"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
=======
<template v-if="scope.row.itemCode == '1'">
<el-option
v-for="dict in med_category_code"
@@ -128,7 +120,6 @@
:value="dict.value"
/>
</template>
>>>>>>> v1.3
</el-select>
</div>
</template>
@@ -226,15 +217,11 @@ import {
deletePharmacyDepartment,
} from './components/pharmacyDepartment';
const { proxy } = getCurrentInstance();
<<<<<<< HEAD
const { med_category_code } = proxy.useDict('med_category_code');
=======
const { distribution_category_code, med_category_code, device_category_code } = proxy.useDict(
'distribution_category_code',
'med_category_code',
'device_category_code'
);
>>>>>>> v1.3
import { nextTick } from 'vue';
const diagnosisTreatmentList = ref([]);

View File

@@ -36,12 +36,8 @@ export function updateWarehouse(data) {
// 删除
export function deleteWarehouse(data) {
return request({
<<<<<<< HEAD
url: '/base-data-manage/location/location',
=======
// url: '/base-data-manage/location/location?locationId=' + data.locationId,
url: '/base-data-manage/location/location?busNo=' + data.busNo,
>>>>>>> v1.3
method: 'delete',
params: {
locationId: data.locationId,

View File

@@ -292,38 +292,12 @@ function submitForm() {
// 删除
function handelDelete(data) {
<<<<<<< HEAD
proxy.$modal.confirm('是否确认删除该仓库位置?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
loading.value = true;
deleteWarehouse({ locationId: data.id, busNo: data.busNo }).then((res) => {
if (res.code === 200) {
proxy.$modal.msgSuccess('删除成功');
getPageList();
} else {
// 检查错误信息是否与药品数据关联有关
if (res.msg && res.msg.includes('药品')) {
proxy.$modal.msgError('该仓库名称已有药品信息请核对确认');
} else {
proxy.$modal.msgError('删除失败:' + (res.msg || '未知错误'));
}
}
}).catch(() => {
proxy.$modal.msgError('删除失败');
}).finally(() => {
loading.value = false;
});
=======
loading.value = true;
console.log(data, 'data');
deleteWarehouse({ busNo: data.busNo }).then((res) => {
proxy.$modal.msgSuccess('操作成功');
loading.value = false;
getPageList();
>>>>>>> v1.3
});
}
// // 停用

View File

@@ -757,11 +757,7 @@ const transformFormData = (form) => {
ybNo,
title,
comment,
<<<<<<< HEAD
practitionerId,
=======
busNo,
>>>>>>> v1.3
} = form.value;
return {
@@ -779,11 +775,7 @@ const transformFormData = (form) => {
appointmentRequiredFlag,
extraDetails,
comment,
<<<<<<< HEAD
practitionerId,
=======
busNo,
>>>>>>> v1.3
},
chargeItemDefinitionFormData: {
id,
@@ -822,11 +814,7 @@ const transformFormEditData = (form) => {
ybNo,
title,
comment,
<<<<<<< HEAD
practitionerId,
=======
busNo,
>>>>>>> v1.3
} = form.value;
return {
@@ -844,11 +832,7 @@ const transformFormEditData = (form) => {
appointmentRequiredFlag,
extraDetails,
comment,
<<<<<<< HEAD
practitionerId,
=======
busNo,
>>>>>>> v1.3
},
};
};

View File

@@ -94,14 +94,6 @@
v-model="form.unitCode"
clearable
filterable
<<<<<<< HEAD
remote
reserve-keyword
:remote-method="handleUnitCodeSearch"
:loading="unitCodeLoading"
@focus="handleUnitCodeFocus"
=======
>>>>>>> v1.3
@change="handleUnitCodeChange"
:disabled="form.isEditInfoDisable === 1 || form.isEditInfoDisable === 2"
>
@@ -269,11 +261,7 @@
clearable
filterable
style="width: 240px"
<<<<<<< HEAD
:disabled="form.isEditInfoDisable === 1"
=======
:disabled="form.isEditInfoDisable === 1 || form.isEditInfoDisable === 2"
>>>>>>> v1.3
>
<el-option
v-for="dict in med_chrgitm_type"
@@ -479,12 +467,7 @@ function getDeptTree() {
/** 查询地点下拉树结构 */
function getLocationTree() {
<<<<<<< HEAD
locationTreeSelect({ formList: '11,16,17' }).then((response) => {
console.log(response, 'response查询部门下拉树结构');
=======
locationTreeSelect({ formList: '11,16' }).then((response) => {
>>>>>>> v1.3
locationOptions.value = response.data.records;
});
}

View File

@@ -103,12 +103,7 @@
:data="deviceList"
@selection-change="handleSelectionChange"
width="90%"
<<<<<<< HEAD
/>
<el-table v-loading="loading" :data="deviceList" @selection-change="handleSelectionChange" width="90%" border resizable-column>
=======
>
>>>>>>> v1.3
<el-table-column type="selection" width="50" align="center" />
<el-table-column
label="编码"
@@ -116,11 +111,7 @@
key="busNo"
prop="busNo"
:show-overflow-tooltip="true"
<<<<<<< HEAD
width="200"
=======
width="150"
>>>>>>> v1.3
/>
<el-table-column
label="器材名称"
@@ -128,9 +119,6 @@
key="name"
prop="name"
:show-overflow-tooltip="true"
<<<<<<< HEAD
width="200"
=======
width="100"
/>
<el-table-column
@@ -140,7 +128,6 @@
prop="size"
width="100"
:show-overflow-tooltip="true"
>>>>>>> v1.3
/>
<!-- <el-table-column
label="拼音"
@@ -174,17 +161,6 @@
width="100"
/>
<el-table-column
<<<<<<< HEAD
label="包装规格"
align="center"
key="size"
prop="size"
width="200"
:show-overflow-tooltip="true"
/>
<el-table-column
=======
>>>>>>> v1.3
label="拆零比"
align="center"
key="partPercent"
@@ -206,11 +182,7 @@
key="minUnitCode_dictText"
prop="minUnitCode_dictText"
:show-overflow-tooltip="true"
<<<<<<< HEAD
width="120"
=======
width="100"
>>>>>>> v1.3
/>
<!-- <el-table-column
label="所属科室"

View File

@@ -129,11 +129,7 @@
clearable
filterable
style="width: 240px"
<<<<<<< HEAD
:disabled="form.isEditInfoDisable === 1"
=======
:disabled="form.isEditInfoDisable === 1 || form.isEditInfoDisable === 2"
>>>>>>> v1.3
>
<el-option
v-for="dict in med_chrgitm_type"
@@ -210,18 +206,9 @@
</el-col>
<el-col :span="8">
<el-form-item label="财务类型" prop="itemTypeCode">
<<<<<<< HEAD
<el-select
v-model="form.itemTypeCode"
clearable
filterable
:disabled="form.isEditInfoDisable === 1"
>
=======
<el-select v-model="form.itemTypeCode" clearable filterable>
<!-- :disabled="form.isEditInfoDisable === 1" -->
>>>>>>> v1.3
<el-option
v-for="category in fin_type_code"
:key="category.value"
@@ -263,10 +250,6 @@
<el-row :gutter="24">
<el-col :span="8">
<el-form-item label="诊疗子项">
<<<<<<< HEAD
<div v-if="form.isEditInfoDisable === 0" style="position: relative">
<PopoverList @search="handleSearch" :width="1000" :modelValue="item.name">
=======
<div style="position: relative">
<PopoverList
@search="handleSearch"
@@ -274,7 +257,6 @@
:modelValue="item.name"
@focus="popoverListhandleFocus(item.name)"
>
>>>>>>> v1.3
<template #popover-content="{}">
<medicineList
@selectRow="(row) => selectRow(row, index)"
@@ -300,11 +282,7 @@
"
/>
</div>
<<<<<<< HEAD
<span v-else>{{ item.name || '' }}</span>
=======
<!-- <span v-else>{{ item.name || '' }}</span> -->
>>>>>>> v1.3
</el-form-item>
</el-col>
<el-col :span="8">
@@ -409,10 +387,6 @@ const diagnosisTreatmentList = ref([]);
const data = reactive({
form: {},
rules: {
<<<<<<< HEAD
busNo: [{ required: true, message: "编码不能为空", trigger: "blur" }],
=======
>>>>>>> v1.3
name: [{ required: true, message: '名称不能为空', trigger: 'blur' }],
categoryCode: [{ required: true, message: '诊疗目录不能为空', trigger: 'blur' }],
permittedUnitCode: [{ required: true, message: '使用单位不能为空', trigger: 'blur' }],
@@ -678,8 +652,6 @@ function handleSearch(value) {
medicineSearchKey.value = value;
}
<<<<<<< HEAD
=======
function popoverListhandleFocus(value) {
// debugger;
console.log(value);
@@ -689,15 +661,11 @@ function popoverListhandleFocus(value) {
medicineSearchKey.value = value;
}
>>>>>>> v1.3
function selectRow(row, index) {
treatmentItems.value[index].name = row.name;
treatmentItems.value[index].adviceDefinitionId = row.id;
treatmentItems.value[index].retailPrice = row.retailPrice || 0;
<<<<<<< HEAD
=======
medicineSearchKey.value = '';
>>>>>>> v1.3
calculateTotalPrice();
}

View File

@@ -101,86 +101,6 @@
</el-col> -->
</el-row>
<<<<<<< HEAD
<!-- 添加外层滚动容器确保表格可以水平滚动 -->
<div class="table-scroll-container">
<!-- 移除style="width: 100%"让Element UI表格根据内容自动调整 -->
<el-table v-loading="loading" :data="diseaseList" @selection-change="handleSelectionChange" border resizable>
<el-table-column type="selection" width="50" align="center" />
<!-- 使用prop属性并设置合适的最小宽度启用列宽调整 -->
<el-table-column label="编码" align="center" prop="conditionCode" min-width="150" />
<!-- 名称列使用标准配置 -->
<el-table-column
label="名称"
align="center"
prop="name"
min-width="280"
/>
<!-- 其他列使用标准配置 -->
<el-table-column
label="疾病分类"
align="center"
prop="sourceEnum_enumText"
min-width="180"
/>
<el-table-column
label="拼音助记码"
align="center"
prop="pyStr"
min-width="220"
/>
<el-table-column
label="类型"
align="center"
prop="typeCode_dictText"
min-width="120"
/>
<el-table-column
label="医保编码"
align="center"
prop="ybNo"
min-width="180"
/>
<el-table-column
label="医保标记"
align="center"
prop="ybMatchFlag_enumText"
min-width="150"
/>
<el-table-column
label="医保对码标志"
align="center"
prop="ybMatchFlag_enumText"
min-width="150"
/>
<el-table-column
label="状态"
align="center"
prop="statusEnum_enumText"
min-width="150"
/>
<el-table-column
label="描述"
align="center"
prop="description"
min-width="250"
/>
<el-table-column
label="操作"
align="center"
min-width="120"
class-name="small-padding"
>
<template #default="scope">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
>编辑</el-button
>
</template>
</el-table-column>
</el-table>
</div>
<pagination
=======
<el-table v-loading="loading" :data="diseaseList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="50" align="center" />
<el-table-column label="编码" align="center" key="conditionCode" prop="conditionCode" />
@@ -259,7 +179,6 @@
</el-table-column>
</el-table>
<pagination
>>>>>>> v1.3
v-show="total > 0"
:total="total"
v-model:page="queryParams.pageNo"

View File

@@ -121,15 +121,7 @@
</el-col>
<el-col :span="6">
<el-form-item label="规格" prop="totalVolume">
<<<<<<< HEAD
<el-input
v-model="form.totalVolume"
placeholder=""
clearable
/>
=======
<el-input v-model="form.totalVolume" placeholder="" clearable />
>>>>>>> v1.3
</el-form-item>
</el-col>
<el-col :span="6">
@@ -464,11 +456,7 @@
clearable
filterable
style="width: 240px"
<<<<<<< HEAD
:disabled="form.isEditInfoDisable === 1"
=======
:disabled="form.isEditInfoDisable === 1 || form.isEditInfoDisable === 2"
>>>>>>> v1.3
>
<el-option
v-for="dict in med_chrgitm_type"
@@ -877,25 +865,13 @@ function setValue(row) {
approvalNumber: formatValue(row.approvalNo), // 批准文号
manufacturerText: formatValue(row.manufacturerName), // 生产厂家
basicFlag: formatValue(row.essentialDrugFlag), // 基药标识
<<<<<<< HEAD
// injectFlag: row., // 注射药物
// childrenFlag: row.pediatricUse, // 儿童用药标志
// selfFlag: row., // 自制药标识
// activeFlag: row., // 是否活性
=======
>>>>>>> v1.3
restrictedFlag: formatValue(row.restrictedFlag), // 限制使用
restrictedScope: formatValue(row.restrictedScope), // 限制使用范围
rxFlag: formatValue(row.rxFlag), // 处方标志
chrgitmLv: formatValue(
row.insuranceClass == '甲' ? '1' : row.insuranceClass == '乙' ? '2' : '3'
), // 医保等级
<<<<<<< HEAD
// antibioticFlag: row., // 抗生素
};
=======
};
>>>>>>> v1.3
setFlag(form.value);
}
@@ -912,11 +888,6 @@ function formatValue(str) {
// 显示弹框
function edit() {
<<<<<<< HEAD
// getList();
console.log(props, '22222');
=======
>>>>>>> v1.3
title.value = '编辑药品';
reset();
activeName.value = 'basic';
@@ -973,20 +944,10 @@ function setFlag(data) {
function reset() {
form.value = {
id: undefined,
<<<<<<< HEAD
medicineCode: '',
medicineName: '',
tradeName: '',
spec: '',
manufacturer: '',
rxFlag: '0', // 默认设置为非处方
dose: undefined,
=======
medicationDefId: undefined,
locationId: undefined,
activeFlag: undefined,
doseFrom: undefined,
>>>>>>> v1.3
rateCode: undefined,
approvalNumber: undefined,
name: undefined,
@@ -1032,12 +993,8 @@ function reset() {
thoPartAttributeEnum: undefined,
usageLimit: undefined,
basicFlag: undefined,
<<<<<<< HEAD
chrgitmLv: '3',
=======
rxFlag: undefined,
chrgitmLv: '3', // 默认设置为自费
>>>>>>> v1.3
};
antibioticForm.value = {
antibioticCode: undefined,
@@ -1084,16 +1041,9 @@ function submitForm() {
proxy.$refs['medicationRef'].validate((valid) => {
if (valid) {
<<<<<<< HEAD
// 处理抗生素相关字段
if (form.value.activeFlag == 1) {
form.value.antibioticCode = antibioticForm.value.antibioticCode === undefined ? '3' : antibioticForm.value.antibioticCode;
form.value.restrictedEnum = antibioticForm.value.restrictedEnum === undefined ? '4' : antibioticForm.value.restrictedEnum;
=======
if (form.value.activeFlag == true) {
form.value.antibioticCode = antibioticForm.value.antibioticCode;
form.value.restrictedEnum = antibioticForm.value.restrictedEnum;
>>>>>>> v1.3
form.value.minRateCode = antibioticForm.value.minRateCode;
form.value.maxRateCode = antibioticForm.value.maxRateCode;
form.value.dddUnitCode = antibioticForm.value.dddUnitCode;

View File

@@ -155,11 +155,8 @@
:show-overflow-tooltip="true"
min-width="110"
width="200px"
<<<<<<< HEAD
=======
sortable
:sort-by="(row) => getPinyinFirstLetter(row)"
>>>>>>> v1.3
/>
<el-table-column
label="规格"

View File

@@ -129,9 +129,6 @@ export function getChargeInfo(param) {
method: 'get',
params: param
})
<<<<<<< HEAD
}
=======
}
/**
@@ -154,4 +151,3 @@ export function WxPayResult (data) {
method: 'get',
});
}
>>>>>>> v1.3

View File

@@ -31,43 +31,6 @@
<template v-for="(item, index) in formData.selfPay" :key="index">
<div v-show="item.payEnum != 220500" class="payment-item">
<span>支付方式</span>
<<<<<<< HEAD
<el-select
v-model="item.payEnum"
placeholder="选择支付方式"
style="width: 160px"
@change="clearAmount(index)"
>
<el-option
v-for="payEnum in selfPayMethods"
:key="payEnum.value"
:label="payEnum.label"
:value="payEnum.value"
:disabled="isMethodDisabled(payEnum.value)"
/>
</el-select>
<span>支付金额</span>
<div class="suffix-wrapper">
<el-input-number
v-model="item.amount"
:precision="2"
:min="0"
:max="getMax(index)"
:controls="false"
placeholder="金额"
class="amount-input"
@change="handleAmountChange"
/>
<span class="suffix-text"></span>
</div>
<el-button
type="danger"
circle
:icon="Delete"
@click="removePayment(index)"
v-if="index > 0"
/>
=======
<img
v-if="item.payEnum == 220100 || item.payEnum == 220200"
:src="imgs[item.payEnum == 220100 ? 0 : 1]"
@@ -108,7 +71,6 @@
@click="removePayment(index)"
v-if="index > 0"
/>
>>>>>>> v1.3
</div>
</template>
<div class="add-payment">
@@ -136,8 +98,6 @@
/>
</el-radio-group>
</div>
<<<<<<< HEAD
=======
</div>
<div class="payment-item">
<span>{{ payTypeText }}支付</span>
@@ -149,7 +109,6 @@
/>
<el-button link type="primary" @click="handleWxPay()">扫码支付</el-button>
<el-button link type="primary" @click="getWxPayResult()">查看结果</el-button>
>>>>>>> v1.3
</div>
<div>
<el-table :data="props.details" max-height="200" border>
@@ -194,9 +153,6 @@
</template>
<script setup>
<<<<<<< HEAD
import { savePayment, unprecharge, dispenseMedicalConsumables, getChargeInfo } from './api';
=======
import {
savePayment,
unprecharge,
@@ -205,7 +161,6 @@ import {
WxPayResult,
getChargeInfo,
} from './api';
>>>>>>> v1.3
import { computed, watch, reactive, ref, getCurrentInstance, nextTick } from 'vue';
import { Delete } from '@element-plus/icons-vue';
import { debounce } from 'lodash-es';
@@ -264,13 +219,6 @@ const props = defineProps({
const { proxy } = getCurrentInstance();
<<<<<<< HEAD
const { charge_discount } = proxy.useDict('charge_discount');
const userStore = useUserStore();
const discountRadio = ref(undefined);
const discountAmount = ref(0);
=======
// 单位字典
const { unit_code } = proxy.useDict('unit_code');
@@ -278,7 +226,6 @@ const userStore = useUserStore();
const discountRadio = ref();
const discountAmount = ref(0);
const txtCode = ref('');
>>>>>>> v1.3
const formData = reactive({
totalAmount: 0,
@@ -301,121 +248,6 @@ watch(
const emit = defineEmits(['close']);
let displayAmountTemp = 0;
<<<<<<< HEAD
// 打印小票
function printReceipt(param) {
let total = 0;
props.chargedItems.forEach((item) => {
total += item.totalPrice || 0;
});
// 构造一个新的对象,添加头 "data"
const result = {
data: [
{
...param,
// 基础支付类型
YB_FUND_PAY:
param.detail?.find((t) => t.payEnum === 100000)?.amount.toFixed(2) + ' 元' ?? 0, // 基金支付总额
SELF_PAY: param.detail?.find((t) => t.payEnum === 200000)?.amount.toFixed(2) + ' 元' ?? 0, // 个人负担总金额
OTHER_PAY: param.detail?.find((t) => t.payEnum === 300000)?.amount ?? 0, // 其他(如医院负担金额)
// 基本医保统筹基金支出
YB_TC_FUND_AMOUNT:
param.detail?.find((t) => t.payEnum === 110000)?.amount.toFixed(2) + ' 元' ?? 0, // 基本医保统筹基金支出
YB_BC_FUND_AMOUNT:
param.detail?.find((t) => t.payEnum === 120000)?.amount.toFixed(2) + ' 元' ?? 0, // 补充医疗保险基金支出
YB_JZ_FUND_AMOUNT:
param.detail?.find((t) => t.payEnum === 130000)?.amount.toFixed(2) + ' 元' ?? 0, // 医疗救助基金支出
// YB_OTHER_AMOUNT: param.detail.find((t) => t.payEnum === 140000)?.amount ?? 0, // 其他支出
// 职工基本医疗保险
// YB_TC_ZG_FUND_VALUE: param.detail.find((t) => t.payEnum === 110100)?.amount ?? 0, // 职工基本医疗保险
// YB_TC_JM_FUND_VALUE: param.detail.find((t) => t.payEnum === 110200)?.amount ?? 0, // 居民基本医疗保险(修正原错误注释)
// 补充医疗保险基金支出细分
// YB_BC_JM_DB_VALUE: param.detail.find((t) => t.payEnum === 120100)?.amount ?? 0, // 全体参保人的居民大病保险
// YB_BC_DE_BZ_VALUE: param.detail.find((t) => t.payEnum === 120200)?.amount ?? 0, // 大额医疗费用补助
// YB_BC_ZG_DE_BZ_VALUE: param.detail.find((t) => t.payEnum === 120300)?.amount ?? 0, // 企业职工大额医疗费用补助
// YB_BC_GWY_BZ_VALUE: param.detail.find((t) => t.payEnum === 120400)?.amount ?? 0, // 公务员医疗补助
// 其他支出细分
// OTHER_PAY_DD_FUND_VALUE: param.detail.find((t) => t.payEnum === 300001)?.amount ?? 0, // 兜底基金支出
// OTHER_PAY_YW_SH_FUND_VALUE: param.detail.find((t) => t.payEnum === 300002)?.amount ?? 0, // 意外伤害基金支出
// OTHER_PAY_LX_YL_FUND_VALUE: param.detail.find((t) => t.payEnum === 300003)?.amount ?? 0, // 离休人员医疗保障金支出
// OTHER_PAY_LX_YH_FUND_VALUE: param.detail.find((t) => t.payEnum === 300004)?.amount ?? 0, // 离休人员优惠金支出
// OTHER_PAY_CZ_FUND_VALUE: param.detail.find((t) => t.payEnum === 300005)?.amount ?? 0, // 财政基金支出
// OTHER_PAY_CZ_YZ_FUND_VALUE: param.detail.find((t) => t.payEnum === 300006)?.amount ?? 0, // 财政预支支出
// OTHER_PAY_ZG_DB_FUND_VALUE: param.detail.find((t) => t.payEnum === 300007)?.amount ?? 0, // 职工大病基金支出
// OTHER_PAY_EY_FUND_VALUE: param.detail.find((t) => t.payEnum === 300008)?.amount ?? 0, // 二乙基金支出
// OTHER_PAY_QX_JZ_FUND_VALUE: param.detail.find((t) => t.payEnum === 300009)?.amount ?? 0, // 倾斜救助支出
// OTHER_PAY_YL_JZ_FUND_VALUE: param.detail.find((t) => t.payEnum === 300010)?.amount ?? 0, // 医疗救助再救助基金
// HOSP_PART_AMT: param.detail.find((t) => t.payEnum === 300011)?.amount ?? 0, // 医院负担金额
// 医保结算返回值
FULAMT_OWNPAY_AMT:
param.detail?.find((t) => t.payEnum === 1)?.amount.toFixed(2) + ' 元' ?? 0, // 全自费金额
// OVERLMT_SELFPAY: param.detail.find((t) => t.payEnum === 3)?.amount ?? 0, // 超限价自费费用
// PRESELFPAY_AMT: param.detail.find((t) => t.payEnum === 4)?.amount ?? 0, // 先行自付金额
INSCP_SCP_AMT: param.detail?.find((t) => t.payEnum === 5)?.amount.toFixed(2) + ' 元' ?? 0, // 符合政策范围金额
// ACT_PAY_DEDC: param.detail.find((t) => t.payEnum === 6)?.amount ?? 0, // 实际支付起付线
// POOL_PROP_SELFPAY: param.detail.find((t) => t.payEnum === 7)?.amount ?? 0, // 基本医疗保险统筹基金支付比例
// BALC: param.detail.find((t) => t.payEnum === 8)?.amount ?? 0, // 余额
// 特殊支付方式
SELF_YB_ZH_PAY:
param.detail?.find((t) => t.payEnum === 210000)?.amount.toFixed(2) + ' 元' ?? 0, // 个人医保账户支付
// SELF_YB_ZH_GJ_VALUE: param.detail.find((t) => t.payEnum === 210100)?.amount ?? 0, // 账户共济支付金额
// SELF_CASH_PAY: param.detail.find((t) => t.payEnum === 220000)?.amount ?? 0, // 个人现金支付金额
// SELF_VX_PAY: param.detail.find((t) => t.payEnum === 230000)?.amount ?? 0, // 微信支付金额
// SELF_ALI_PAY: param.detail.find((t) => t.payEnum === 240000)?.amount ?? 0, // 阿里支付金额
// 现金支付细分
// SELF_CASH_VALUE: param.detail.find((t) => t.payEnum === 220400)?.amount ?? 0, // 个人现金支付金额(现金)
// SELF_CASH_VX_VALUE: param.detail.find((t) => t.payEnum === 220100)?.amount ?? 0, // 个人现金支付金额(微信)
// SELF_CASH_ALI_VALUE: param.detail.find((t) => t.payEnum === 220200)?.amount ?? 0, // 个人现金支付金额(支付宝)
// SELF_CASH_UNION_VALUE: param.detail.find((t) => t.payEnum === 220300)?.amount ?? 0, // 个人现金支付金额(银联)
// 基金类型(扩展)
// BIRTH_FUND: param.detail.find((t) => t.payEnum === 510100)?.amount ?? 0, // 生育基金
// RETIREE_MEDICAL: param.detail.find((t) => t.payEnum === 340100)?.amount ?? 0, // 离休人员医疗保障基金
// URBAN_BASIC_MEDICAL: param.detail.find((t) => t.payEnum === 390100)?.amount ?? 0, // 城乡居民基本医疗保险基金
// URBAN_SERIOUS_ILLNESS: param.detail.find((t) => t.payEnum === 390200)?.amount ?? 0, // 城乡居民大病医疗保险基金
// MEDICAL_ASSISTANCE: param.detail.find((t) => t.payEnum === 610100)?.amount ?? 0, // 医疗救助基金
// GOVERNMENT_SUBSIDY: param.detail.find((t) => t.payEnum === 640100)?.amount ?? 0, // 政府兜底基金
// ACCIDENT_INSURANCE: param.detail.find((t) => t.payEnum === 390400)?.amount ?? 0, // 意外伤害基金
// CARE_INSURANCE: param.detail.find((t) => t.payEnum === 620100)?.amount ?? 0, // 照护保险基金
// FINANCIAL_FUND: param.detail.find((t) => t.payEnum === 360100)?.amount ?? 0, // 财政基金
// HOSPITAL_ADVANCE: param.detail.find((t) => t.payEnum === 999900)?.amount ?? 0, // 医院垫付
// SUPPLEMENTARY_INSURANCE: param.detail.find((t) => t.payEnum === 390300)?.amount ?? 0, // 城乡居民大病补充保险基金
// HEALTHCARE_PREPAYMENT: param.detail.find((t) => t.payEnum === 360300)?.amount ?? 0, // 保健预支基金
Mr_QR_Code: param.regNo,
sex: props.patientInfo.genderEnum_enumText,
age: props.patientInfo.age,
personType: '职工医保',
fixmedinsName: param.fixmedinsName + '门诊收费明细',
name: props.patientInfo.patientName, // 姓名
gender: props.patientInfo.genderEnum_enumText, // 性别
age: props.patientInfo.age, // 年龄
encounterBusNo: props.patientInfo.encounterBusNo, // 病例号
currentDate: currentDate.value, // 收费日期
chargedItems: props.chargedItems, // 收费项目
totalAmount: props.totalAmount.toFixed(2) + ' 元', // 应收金额
itemTotalAmount: total.toFixed(2) + ' 元', // 应收金额
displayAmount: displayAmountTemp + ' 元', // 实收金额
returnedAmount: returnedAmount.value + ' 元', // 应找零
userName: userStore.nickName,
},
],
};
const printElements = templateJson;
var hiprintTemplate = new hiprint.PrintTemplate({ template: printElements }); // 定义模板
hiprintTemplate.print2(result.data[0], {
printer: 'xp',
title: '门诊收费结算单',
});
=======
// 获取单位字典数据的方法
const getUnitLabel = (unitCode) => {
@@ -748,12 +580,9 @@ async function printReceipt(param) {
console.error('打印失败:', error);
proxy.$modal.msgError('打印失败: ' + error.message);
}
>>>>>>> v1.3
}
const throttledGetList = debounce(submit, 300);
<<<<<<< HEAD
=======
function handleWxPay() {
wxPay({
txtCode: txtCode.value,
@@ -778,7 +607,6 @@ function getWxPayResult() {
});
}
>>>>>>> v1.3
function handleOpen() {
formData.totalAmount = props.totalAmount;
formData.selfPay[0].amount = props.totalAmount;
@@ -786,11 +614,6 @@ function handleOpen() {
async function submit() {
displayAmountTemp = displayAmount.value;
<<<<<<< HEAD
console.log(parseFloat(displayAmount.value), 'parseFloat(displayAmount.value)');
console.log(formData.totalAmount, 'formData.totalAmount');
=======
>>>>>>> v1.3
let amount = formData.selfPay
.reduce((sum, item) => {
@@ -813,12 +636,8 @@ async function submit() {
.then((res) => {
if (res.code == 200) {
getChargeInfo({ paymentId: props.paymentId }).then((res) => {
<<<<<<< HEAD
printReceipt(res.data);
=======
// 传递完整的选中数据信息到打印方法
printReceipt({ ...res.data, chargedItems: props.chargedItems });
>>>>>>> v1.3
});
formData.selfPay = [{ payEnum: 220100, amount: 0.0, payLevelEnum: 2 }];
emit('close', 'success', res.msg);
@@ -874,19 +693,11 @@ async function print() {
const currentDate = ref(new Date().toLocaleString());
const selfPayMethods = [
<<<<<<< HEAD
{ label: '现金', value: 220400 },
{ label: '微信', value: 220100 },
{ label: '支付宝', value: 220200 },
{ label: '银联', value: 220300 },
{ label: '优惠', value: 220500 },
=======
{ label: '现金', value: 220400, isWebPay: false },
{ label: '微信', value: 220100, isWebPay: true },
{ label: '支付宝', value: 220200, isWebPay: true },
{ label: '银联', value: 220300, isWebPay: true },
{ label: '优惠', value: 220500, isWebPay: false },
>>>>>>> v1.3
];
// 计算剩余可输入金额

View File

@@ -83,20 +83,6 @@
:disabled="buttonDisabled">
自费转医保
</el-button>
<<<<<<< HEAD
<el-button type="primary" @click="studentPayTosStudentSelf()" style="margin-left: 20px"
:disabled="buttonDisabled">
学生医保转学生自费
</el-button>
<el-button type="primary" @click="studentSelfToStudentPay()" style="margin-left: 20px"
:disabled="buttonDisabled">
学生自费转学生医保
</el-button>
<span style="float: right">合计金额{{ totalAmounts ? totalAmounts.toFixed(2) : 0 }}</span>
</div>
<el-table ref="chargeListRef" height="530" :data="chargeList" row-key="id"
@selection-change="handleSelectionChange" v-loading="chargeLoading" :span-method="objectSpanMethod" border>
=======
<el-button
type="primary"
@click="studentPayTosStudentSelf()"
@@ -127,7 +113,6 @@
:span-method="objectSpanMethod"
border
>
>>>>>>> v1.3
<el-table-column type="selection" :selectable="checkSelectable" width="55" />
<el-table-column label="单据号" align="center" prop="busNo" width="180" />
<el-table-column label="收费项目" align="center" prop="itemName" width="200" />
@@ -137,9 +122,6 @@
<el-table-column label="费用性质" align="center" prop="contractName" />
<el-table-column label="收费状态" align="center" prop="statusEnum_enumText" width="150">
<template #default="scope">
<<<<<<< HEAD
<el-tag :type="scope.row.statusEnum === 1 ? 'default' : 'success'" disable-transitions>
=======
<el-tag v-if="scope.row.statusEnum === 1" disable-transitions>
{{ scope.row.statusEnum_enumText }}
</el-tag>
@@ -150,7 +132,6 @@
{{ scope.row.statusEnum_enumText }}
</el-tag>
<el-tag v-else type="warning" disable-transitions>
>>>>>>> v1.3
{{ scope.row.statusEnum_enumText }}
</el-tag>
</template>
@@ -161,11 +142,6 @@
</template>
</el-table-column>
<el-table-column label="收款人" align="center" prop="entererId_dictText" />
<<<<<<< HEAD
<el-table-column label="操作" align="center" fixed="right" header-align="center" class-name="no-hover-column">
<template #default="scope">
<el-button :disabled="!scope.row.paymentId" link type="primary" @click="printCharge(scope.row)">
=======
<el-table-column
label="操作"
align="center"
@@ -180,7 +156,6 @@
type="primary"
@click="printCharge(scope.row)"
>
>>>>>>> v1.3
打印
</el-button>
</template>
@@ -292,10 +267,6 @@ function handleTotalAmount() {
totalAmounts.value = chargeList.value.reduce((accumulator, currentRow) => {
return new Decimal(accumulator).add(currentRow.totalPrice.toFixed(2) || 0);
}, new Decimal(0));
<<<<<<< HEAD
=======
>>>>>>> v1.3
} else {
totalAmounts.value = selectedRows.value.reduce((accumulator, currentRow) => {
return new Decimal(accumulator).add(currentRow.totalPrice.toFixed(2) || 0);
@@ -652,8 +623,6 @@ function objectSpanMethod({ row, column, rowIndex, columnIndex }) {
return [1, 1];
}
<<<<<<< HEAD
=======
// function printCharge(row) {
// // 打印功能实现
// let rows = [];
@@ -667,7 +636,6 @@ function objectSpanMethod({ row, column, rowIndex, columnIndex }) {
// proxy.$refs['chargeDialogRef'].printReceipt(res.data);
// });
// }
>>>>>>> v1.3
function printCharge(row) {
// 打印功能实现
let rows = [];
@@ -678,9 +646,6 @@ function printCharge(row) {
});
chargedItems.value = rows;
getChargeInfo({ paymentId: row.paymentId }).then((res) => {
<<<<<<< HEAD
proxy.$refs['chargeDialogRef'].printReceipt(res.data);
=======
// 设置实收金额
if (res.data && res.data.detail) {
const amountDetail = res.data.detail.find((item) => item.payEnum == 220000);
@@ -712,7 +677,6 @@ function printCharge(row) {
proxy.$refs['chargeDialogRef'].printReceipt(enhancedPrintData);
});
}
>>>>>>> v1.3
});
}
</script>
@@ -724,8 +688,4 @@ function printCharge(row) {
:deep(.el-table__body) tr:hover td.no-hover-column {
background-color: inherit !important;
}
<<<<<<< HEAD
</style>
=======
</style>
>>>>>>> v1.3

View File

@@ -166,16 +166,6 @@ const props = defineProps({
type: Object,
default: undefined,
},
<<<<<<< HEAD
medfee_paymtd_code: {
type: Array,
default: () => [],
},
feeType: {
type: String,
default: '',
}
=======
orgId: {
type: String,
default: '',
@@ -184,7 +174,6 @@ const props = defineProps({
type: String,
default: '',
},
>>>>>>> v1.3
});
const { proxy } = getCurrentInstance();

View File

@@ -228,38 +228,6 @@ export function gerPreInfo(userMaessage) {
return request({
url: '/yb-request/per-info',
method: 'post',
<<<<<<< HEAD
params: userMaessage
})
}
/**
* 根据就诊卡号查询挂号记录
* 注意此接口可能不存在实际使用getOutpatientRegistrationCurrent接口
* 保留此函数以便将来使用目前使用getOutpatientRegistrationCurrent替代
*/
export function getRegistrationByCardNo(query) {
// 如果后端提供了专门的接口,可以取消注释使用
// return request({
// url: '/charge-manage/register/encounter-by-card',
// method: 'get',
// params: query
// })
// 暂时使用现有的接口
return getOutpatientRegistrationCurrent(query);
}
/**
* 补打挂号
*/
export function reprintRegistration(data) {
return request({
url: '/charge-manage/register/reprint',
method: 'post',
data: data
})
}
=======
params: userMaessage,
});
}
@@ -285,4 +253,3 @@ export function WxPayResult(data) {
data: data,
});
}
>>>>>>> v1.3

View File

@@ -10,10 +10,6 @@
<el-input v-model="form.name" clearable :disabled="isViewMode" />
</el-form-item>
</el-col>
<<<<<<< HEAD
<el-col :span="6">
<el-form-item label="民族" prop="nationalityCode" label-width="80px">
=======
<el-col :span="8">
<el-form-item label="性别" prop="genderEnum">
<el-radio-group v-model="form.genderEnum" :disabled="isViewMode">
@@ -66,7 +62,6 @@
</el-col>
<el-col :span="8">
<el-form-item label="民族" prop="nationalityCode">
>>>>>>> v1.3
<el-select v-model="form.nationalityCode" clearable filterable :disabled="isViewMode">
<el-option
v-for="item in nationality_code"
@@ -106,87 +101,10 @@
<!-- 第二行证件类别证件号码*年龄 -->
<el-row :gutter="10">
<el-col :span="8">
<<<<<<< HEAD
<el-form-item label="证件类别" prop="typeCode" label-width="80px">
<el-select
v-model="form.typeCode"
placeholder="就诊卡"
clearable
:disabled="isViewMode"
>
<el-option
v-for="dict in sys_idtype"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="证件号码" prop="idCard" label-width="80px">
<el-input v-model="form.idCard" clearable :disabled="isViewMode" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="年龄" prop="age" label-width="80px">
<el-input
v-model="form.age"
:disabled="isViewMode"
@input="handleAgeInput"
placeholder="请输入龄"
>
<template #suffix></template>
</el-input>
</el-form-item>
</el-col>
</el-row>
<!-- 第三行国籍*联系方式工作单位 -->
<el-row :gutter="10">
<el-col :span="8">
<el-form-item label="国籍" prop="countryCode" label-width="80px">
<el-select v-model="form.countryCode" placeholder="请选择国籍" clearable filterable :disabled="isViewMode">
<el-option
v-for="item in countryCodeList"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="联系方式" prop="phone" label-width="80px">
<el-input v-model="form.phone" clearable :disabled="isViewMode" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="出生日期" prop="birthDate">
<el-date-picker
v-model="form.birthDate"
type="date"
placeholder="请选择出生日期"
format="YYYY年MM月DD日"
:disabled="isViewMode"
value-format="YYYY-MM-DD"
@change="handleBirthDateChange"
/>
</el-form-item>
</el-col>
</el-row>
<!-- 第三行就诊卡号职业邮政编码 -->
<el-row>
<el-col :span="8">
=======
>>>>>>> v1.3
<el-form-item label="就诊卡号" prop="identifierNo">
<el-input v-model="form.identifierNo" clearable :disabled="isViewMode" />
</el-form-item>
</el-col>
<<<<<<< HEAD
=======
<!-- <el-col :span="8">
<el-form-item label="国家编码" prop="countryCode">
<el-input v-model="form.countryCode" clearable :disabled="isViewMode" />
@@ -199,7 +117,6 @@
</el-form-item>
</el-col> -->
<el-row>
>>>>>>> v1.3
<el-col :span="8">
<el-form-item label="职业" prop="prfsEnum">
<el-select v-model="form.prfsEnum" placeholder="职业" clearable :disabled="isViewMode">
@@ -423,11 +340,7 @@
</template>
<script setup name="PatientAddDialog">
<<<<<<< HEAD
import { watch, defineProps } from "vue";
=======
import { watch } from 'vue';
>>>>>>> v1.3
import pcas from 'china-division/dist/pcas-code.json';
import { addPatient, patientlLists, getOutpatientRegistrationList } from './outpatientregistration';
import {
@@ -689,21 +602,9 @@ const validateGuardianInfo = (rule, value, callback) => {
const data = reactive({
isViewMode: false,
form: {
<<<<<<< HEAD
typeCode: '08',
birthDate: undefined,
age: undefined,
genderEnum: '1', // 默认设置为'男'
hukouAddressSelect: undefined,
hukouAddress: undefined,
postalCode: undefined,
companyAddress: undefined,
patientDerived: undefined,
=======
typeCode: '01',
tempFlag: '1',
// genderEnum: 0,
>>>>>>> v1.3
},
rules: {
name: [{ required: true, message: '姓名不能为空', trigger: 'change' },
@@ -720,22 +621,7 @@ const data = reactive({
genderEnum: [{ required: true, message: '请选择性别', trigger: 'change' }],
age: [{ required: true, message: '年龄不能为空', trigger: 'change' }],
phone: [{ required: true, message: '联系方式不能为空', trigger: 'change' }],
<<<<<<< HEAD
identifierNo: [{ required: true, message: '就诊卡号不能为空', trigger: 'change' }],
idCard: [
{ required: false, message: '证件号码不能为空', trigger: 'change' },
{ validator: validateIdCard, trigger: 'blur' },
{ validator: validateUniquePatient, trigger: 'blur' }
],
birthDate: [{ required: false, message: '请选择出生日期', trigger: 'change' }],
// 监护人信息条件验证规则
guardianName: [{ validator: validateGuardianInfo, trigger: 'blur' }],
guardianRelation: [{ validator: validateGuardianInfo, trigger: 'blur' }],
guardianPhone: [{ validator: validateGuardianInfo, trigger: 'blur' }],
guardianIdNo: [{ validator: validateGuardianInfo, trigger: 'blur' }],
=======
idCard: [{ required: true, message: '证件号不能为空', trigger: 'change' }],
>>>>>>> v1.3
},
});
@@ -757,76 +643,6 @@ const props = defineProps({
}
});
<<<<<<< HEAD
// 处理出生日期变化,自动计算年龄
function handleBirthDateChange() {
if (form.value.birthDate) {
const birthDate = new Date(form.value.birthDate);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
// 计算精确年龄
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
form.value.age = age;
}
}
// 处理年龄输入,自动计算出生日期
function handleAgeInput() {
// 提取数字部分
const ageMatch = form.value.age.match(/\d+/);
if (ageMatch) {
const age = parseInt(ageMatch[0]);
// 移除非数字字符,保留数字和可能的单位
form.value.age = age ;
// 计算出生日期
const today = new Date();
const birthYear = today.getFullYear() - age;
const birthMonth = today.getMonth();
const birthDay = today.getDate();
const birthDate = new Date(birthYear, birthMonth, birthDay);
// 格式化为YYYY-MM-DD
const formattedBirthDate = birthDate.toISOString().split('T')[0];
form.value.birthDate = formattedBirthDate;
}
}
watch(
() => form.value.idCard,
(newIdCard) => {
if (newIdCard && newIdCard.length === 18) {
const birthYear = parseInt(newIdCard.substring(6, 10));
const birthMonth = parseInt(newIdCard.substring(10, 12));
const birthDay = parseInt(newIdCard.substring(12, 14));
// 设置出生日期
form.value.birthDate = `${birthYear}-${birthMonth.toString().padStart(2, '0')}-${birthDay.toString().padStart(2, '0')}`;
const today = new Date();
const currentYear = today.getFullYear();
const currentMonth = today.getMonth() + 1;
const currentDay = today.getDate();
let age = currentYear - birthYear;
// 如果当前月份小于出生月份或者月份相同但当前日期小于出生日期则年龄减1
if (currentMonth < birthMonth || (currentMonth === birthMonth && currentDay < birthDay)) {
age--;
}
form.value.age = age;
form.value.age = age ;
}
}
);
=======
// watch(
// () => form.value.idCard,
// (newIdCard) => {
@@ -851,7 +667,6 @@ watch(
// }
// }
// );
>>>>>>> v1.3
/** 查询菜单列表 */
function getList() {
patientlLists().then((response) => {

View File

@@ -11,11 +11,7 @@
<el-text size="large" style="display: block; margin-bottom: 15px">
退费日期{{ currentDate }}
</el-text>
<<<<<<< HEAD
<el-text size="large">费用性质{{ getFeeTypeText }}</el-text>
=======
<el-text size="large">费用性质{{ props.category || '自费' }}</el-text>
>>>>>>> v1.3
<div class="amount-row">
<el-text size="large">应退金额</el-text>
<el-text size="large" type="primary" class="amount">
@@ -160,39 +156,16 @@ const props = defineProps({
type: [],
default: [],
},
<<<<<<< HEAD
medfee_paymtd_code: {
type: Array,
default: () => [],
},
feeType: {
type: String,
default: '',
},
contractName: {
type: String,
default: '', // 新增:接收费用性质名称
},
registerInfo: {
type: Object,
default: () => ({}), // 原挂号记录信息
}
=======
eventType: {
type: String,
default: 1,
},
>>>>>>> v1.3
});
const { proxy } = getCurrentInstance();
const reason = ref('');
<<<<<<< HEAD
const userStore = useUserStore();
=======
const preCancelData = ref([]);
const loading = ref(false);
>>>>>>> v1.3
const formData = reactive({
totalAmount: 0,
@@ -255,29 +228,10 @@ watch(
function submit() {
console.log(props.chargeItemIds);
<<<<<<< HEAD
if (parseFloat(displayAmount.value) < formData.totalAmount) {
proxy.$modal.msgError('请输入正确的金额');
return;
}
// 获取当前时间作为退号操作日期
const returnDate = formatDateStr(new Date(), 'YYYY-MM-DD HH:mm:ss');
// 获取当前用户信息作为操作工号(使用用户管理中的用户账号)
// userStore.name 对应后端的 userName用户账号如 'admin'
const operatorId = userStore.name || null; // 退号操作工号(用户账号)
const operatorName = userStore.nickName || userStore.name || ''; // 退号操作人姓名
// 计算退款总金额
const refundAmount = formData.selfPay.reduce((sum, item) => sum + (Number(item.amount) || 0), 0);
=======
// if (parseFloat(displayAmount.value) < formData.totalAmount) {
// proxy.$modal.msgError('请输入正确的金额');
// return;
// }
>>>>>>> v1.3
cancelRegister({
paymentEnum: 0,
kindEnum: 1,

View File

@@ -43,8 +43,6 @@
</el-popover>
</el-form-item>
</el-col>
<<<<<<< HEAD
=======
<el-col :span="6" style="padding: 0">
<el-button type="primary" icon="Plus" @click="handleAddPatient" style="width: 65px">
新建
@@ -77,7 +75,6 @@
学生卡
</el-button> -->
</el-col>
>>>>>>> v1.3
<el-col :span="5">
<el-form-item label="姓名:" prop="name">
<el-input v-model="form.name" placeholder="姓名" :disabled="true" />
@@ -280,10 +277,6 @@
setchargeItem;
}
"
<<<<<<< HEAD
@clear="handleOrgClear"
=======
>>>>>>> v1.3
clearable
/>
</el-form-item>
@@ -554,100 +547,6 @@
<span>{{ parseTime(scope.row.registerTime) }}</span>
</template>
</el-table-column>
<<<<<<< HEAD
<!-- 退号记录相关列 -->
<el-table-column
v-if="queryType === 'returned'"
label="退号日期/时间"
align="center"
key="returnDate"
prop="returnDate"
width="180"
>
<template #default="scope">
<span>{{ scope.row.returnDate ? parseTime(scope.row.returnDate) : '-' }}</span>
</template>
</el-table-column>
<el-table-column
v-if="queryType === 'returned'"
label="退号原因"
align="center"
key="returnReason"
prop="returnReason"
width="200"
:show-overflow-tooltip="true"
>
<template #default="scope">
<span>{{ scope.row.returnReason || '-' }}</span>
</template>
</el-table-column>
<el-table-column
v-if="queryType === 'returned'"
label="退号操作人"
align="center"
key="operatorName"
prop="operatorName"
width="120"
>
<template #default="scope">
<span>{{ scope.row.operatorName || '-' }}</span>
</template>
</el-table-column>
<el-table-column
v-if="queryType === 'returned'"
label="退号操作工号"
align="center"
key="operatorId"
prop="operatorId"
width="120"
>
<template #default="scope">
<span>{{ scope.row.operatorId || '-' }}</span>
</template>
</el-table-column>
<el-table-column
v-if="queryType === 'returned'"
label="退款金额"
align="center"
key="refundAmount"
prop="refundAmount"
width="120"
>
<template #default="scope">
<span>{{ scope.row.refundAmount ? scope.row.refundAmount.toFixed(2) + ' 元' : '-' }}</span>
</template>
</el-table-column>
<el-table-column
v-if="queryType === 'returned'"
label="退款方式"
align="center"
key="refundMethod"
prop="refundMethod"
width="150"
>
<template #default="scope">
<span>{{ scope.row.refundMethod || '-' }}</span>
</template>
</el-table-column>
<!-- 操作列只在全部和正常挂号标签页显示退号记录标签页不显示 -->
<el-table-column
v-if="queryType !== 'returned'"
label="操作"
align="center"
width="120"
fixed="right"
>
<template #default="scope">
<el-button
link
type="primary"
:disabled="scope.row.statusEnum === 6 || scope.row.statusEnum !== 1"
:title="getReturnTooltip(scope.row)"
@click="handleReturn(scope.row)"
>
退号
</el-button>
=======
<el-table-column label="操作" align="center" key="registerTime" prop="registerTime" do>
<template #default="scope">
<!-- <el-tooltip
@@ -675,7 +574,6 @@
</el-button>
</div>
<!-- </el-tooltip> -->
>>>>>>> v1.3
</template>
</el-table-column>
</el-table>
@@ -725,25 +623,7 @@
:patientInfo="patientInfo"
:paymentId="paymentId"
:chargeItemIds="chargeItemIdList"
<<<<<<< HEAD
:feeType="patientInfo.medfeePaymtdCode || ''"
:contractName="patientInfo.contractName || ''"
:medfee_paymtd_code="medfee_paymtd_code"
:registerInfo="registerInfo"
/>
<ReprintDialog
:open="openReprintDialog"
@close="
(value) => {
if (value == 'success') {
getList();
}
openReprintDialog = false;
}
"
=======
:eventType="eventType"
>>>>>>> v1.3
/>
</div>
</template>
@@ -776,26 +656,11 @@ import ReprintDialog from './components/reprintDialog.vue';
import { handleColor } from '@/utils/his';
import useUserStore from '@/store/modules/user';
import { formatDate, formatDateStr } from '@/utils/index';
<<<<<<< HEAD
import { getConfigKey } from '@/api/system/config';
const patientInfo = ref({});
// 监护人规定年龄配置
const guardianAgeConfig = ref(null);
// 跳转到患者档案管理页面
const goToPatientRecord = () => {
// 使用Vue Router进行路由导航在当前页面打开新的路由层级
router.push('/system/basicmanage/patientmanagement');
};
=======
import { isValidCNPhoneNumber } from '../../../utils/validate';
import { ElMessage } from 'element-plus';
const patientInfo = ref({});
const eventType = ref(0);
>>>>>>> v1.3
const router = useRouter();
const { proxy } = getCurrentInstance();
const { sys_normal_disable, sys_user_sex, med_chrgitm_type,medfee_paymtd_code } = proxy.useDict(
@@ -846,14 +711,8 @@ const patientInfoList = ref(undefined);
// 费用性质
const contractList = ref(undefined);
// const locationOptions = ref(undefined); // 地点树选项
<<<<<<< HEAD
const doctorList = ref(undefined); // 医生选项(过滤后的)
const allDoctorList = ref(undefined); // 所有医生选项(用于过滤)
const healthcareList = ref(undefined); // 挂号项目选项
=======
const doctorList = ref(undefined); // 医生选项
const healthcareList = ref([]); // 挂号项目选项
>>>>>>> v1.3
const orgOptions = ref(undefined); // 科室选项
const readCardLoading = ref(false);
const transformedData = ref({});
@@ -1171,32 +1030,6 @@ function setchargeItem() {
healthcareData.length > 0 ? healthcareData[0].price + healthcareData[0].activityPrice : '';
form.value.definitionId = healthcareData.length > 0 ? healthcareData[0].definitionId : '';
}
<<<<<<< HEAD
}
/** 处理挂号类型变化 */
function handleServiceTypeChange() {
// 先设置费用项信息
setchargeItem();
// 然后根据就诊科室和挂号类型过滤医生
filterDoctorsByHealthcare();
}
/** 处理科室清空 */
function handleOrgClear() {
// 清空科室时,清空相关数据
form.value.orgId = undefined;
form.value.organizationId = undefined;
healthcareList.value = [];
form.value.serviceTypeId = undefined;
form.value.practitionerId = undefined;
form.value.doctorName = '';
// 如果有医生列表,显示所有医生
if (allDoctorList.value) {
doctorList.value = allDoctorList.value;
}
=======
>>>>>>> v1.3
}
/** 查询患者信息 */
function getList() {
@@ -1479,10 +1312,6 @@ function handleAdd() {
transformedData.value = transformFormData(form.value);
console.log(transformedData, 'transformedData门诊挂号');
chargeItemIdList.value = [];
<<<<<<< HEAD
patientInfo.value.patientId = form.value.patientId;
patientInfo.value.medfeePaymtdCode = form.value.contractNo; // 设置费用性质
=======
// patientInfo.value.patientId = form.value.patientId;
patientInfo.value = {
patientId: form.value.patientId,
@@ -1500,7 +1329,6 @@ function handleAdd() {
practitionerName: form.value.doctorName || '',
healthcareName: '', // 可根据实际情况补充
};
>>>>>>> v1.3
proxy.$refs['outpatientRegistrationRef'].validate((valid) => {
if (valid) {
if (!isValidCNPhoneNumber(patientInfo.value.phone)) {
@@ -1518,15 +1346,8 @@ function handleAdd() {
addOutpatientRegistration(transformedData.value)
.then((res) => {
if (res.code == 200) {
<<<<<<< HEAD
console.log('挂号成功,返回数据:', res.data);
// 立即刷新列表,确保挂号信息显示在当日已挂号列表中
getList();
=======
console.log('78989798', 'res', res);
// proxy.$modal.msgSuccess('挂号成功');
>>>>>>> v1.3
chrgBchno.value = res.data.chrgBchno;
registerBusNo.value = res.data.busNo;
totalAmount.value = res.data.psnCashPay;
@@ -1583,56 +1404,15 @@ function handleSearchPatient(value) {
patientSearchKey.value = value;
}
<<<<<<< HEAD
function getReturnTooltip(row) {
if (!row) {
return '';
}
if (row.statusEnum == 6) {
return '已退号';
}
if (row.statusEnum != 1) {
return '该患者医生已接诊,不能退号!';
}
return '';
}
function handleReturn(row) {
if (row.statusEnum != 1) {
proxy.$modal.msgError('该患者医生已接诊,不能退号!');
return;
}
=======
function handleReturn(row, type = '1') {
>>>>>>> v1.3
openRefundDialog.value = true;
patientInfo.value.patientId = row.patientId;
patientInfo.value.encounterId = row.encounterId;
totalAmount.value = row.totalPrice;
chargeItemIdList.value = row.chargeItemIds.split(',');
paymentId.value = row.paymentId;
<<<<<<< HEAD
// 从挂号记录中获取正确的费用性质
patientInfo.value.medfeePaymtdCode = row.contractNo; // 使用挂号记录中的费用性质代码
patientInfo.value.contractName = row.contractName; // 保存费用性质名称用于显示
// 保存完整的原挂号记录信息,用于退号记录
registerInfo.value = {
...row, // 保存完整的挂号记录
patientName: row.patientName,
age: row.age,
genderEnum_enumText: row.genderEnum_enumText,
registerTime: row.registerTime,
totalPrice: row.totalPrice,
encounterId: row.encounterId,
patientId: row.patientId,
};
console.log('退号费用性质:', row.contractNo, row.contractName);
=======
eventType.value = type;
console.log(paymentId.value);
>>>>>>> v1.3
}
function handleReturnRegister() {

View File

@@ -110,11 +110,7 @@
"top": 57,
"height": 13.5,
"width": 145.5,
<<<<<<< HEAD
"title": "机构名称:长春大学医院",
=======
"title": "机构名称:长春市朝阳区中医院",
>>>>>>> v1.3
"coordinateSync": false,
"widthHeightSync": false,
"fontSize": 9,

View File

@@ -357,11 +357,7 @@ async function print() {
...reportValue.value, // 将 reportValue.value 中的所有属性展开到 result 中
nickName: userStore.nickName,
orgName: userStore.orgName,
<<<<<<< HEAD
fixmedinsName: '长春大学医院',
=======
fixmedinsName: '长春市朝阳区中医院医院',
>>>>>>> v1.3
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)

View File

@@ -473,11 +473,7 @@ async function print() {
...reportValue.value, // 将 reportValue.value 中的所有属性展开到 result 中
nickName: userStore.nickName,
orgName: userStore.orgName,
<<<<<<< HEAD
fixmedinsName: userStore.hospitalName,
=======
fixmedinsName: userStore.hospitalName,
>>>>>>> v1.3
createTime: formatDateStr(new Date(), 'YYYY-MM-DD HH:mm:ss'),
scheduler: userStore.nickName,
timeRange: queryTime.value[0] + '~' + queryTime.value[1],

View File

@@ -92,8 +92,6 @@ export function printBloodCode (query) {
params: query,
});
}
<<<<<<< HEAD
=======
/**
@@ -106,4 +104,3 @@ export function getEnPrescriptionInfo(data) {
params: data,
});
}
>>>>>>> v1.3

View File

@@ -33,13 +33,8 @@
"left": 0,
"top": 22.5,
"height": 12,
<<<<<<< HEAD
"width": 88.5,
"title": "长春大学医院",
=======
"width": 420,
"title": "长春市朝阳区中医院",
>>>>>>> v1.3
"coordinateSync": false,
"widthHeightSync": false,
"fontSize": 13.5,

View File

@@ -8,11 +8,7 @@
@close="close"
>
<el-table :data="recordList" highlight-current-row max-height="650" style="width: 100%" border>
<<<<<<< HEAD
<el-table-column prop="occurrenceTime" label="执行时间" align="center" />
=======
<el-table-column prop="recordTime" label="执行时间" align="center" />
>>>>>>> v1.3
<el-table-column prop="statusEnum_enumText" label="执行状态" align="center" />
<el-table-column prop="orgName" label="执行科室" align="center" />
<el-table-column prop="practitionerName" label="执行人" align="center" />

View File

@@ -37,11 +37,7 @@
"top": 16.5,
"height": 22.5,
"width": 120,
<<<<<<< HEAD
"title": "长春大学医院",
=======
"title": "长春市朝阳区中医院医院",
>>>>>>> v1.3
"coordinateSync": false,
"widthHeightSync": false,
"fontFamily": "Microsoft YaHei",

View File

@@ -44,24 +44,16 @@
<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" />
<<<<<<< HEAD
=======
<el-table-column prop="receptionTime" label="挂号时间" align="center" />
>>>>>>> v1.3
</el-table>
<pagination
v-show="total > 0"
:total="total"
v-model:page="queryParams.pageNo"
v-model:limit="queryParams.pageSize"
<<<<<<< HEAD
layout="total, sizes, prev, pager, next"
@pagination="getPatientList"
=======
@pagination="getPatientList"
:pager-count="1"
:layout="'total, prev, pager, next'"
>>>>>>> v1.3
/>
</el-col>
</el-row>
@@ -106,10 +98,7 @@
>
打印处置单
</el-button>
<<<<<<< HEAD
=======
<el-button type="primary" plain @click.stop="getEnPrescription()"> 处方单 </el-button>
>>>>>>> v1.3
</el-col>
<el-col :xs="24" :sm="12" :md="6">
<el-form
@@ -296,28 +285,16 @@
</template>
</el-table-column>
<el-table-column align="center" header-align="center" prop="unitPrice" label="单价">
<<<<<<< HEAD
<template #default="scope">
<span>
{{ scope.unitPrice ? scope.unitPrice.toFixed(2) : '0.00' + ' 元' }}
=======
<template #default="{ row }">
<span>
{{ row.unitPrice ? row.unitPrice.toFixed(2) : '0.00' + ' 元' }}
>>>>>>> v1.3
</span>
</template>
</el-table-column>
<el-table-column align="center" header-align="center" prop="totalPrice" label="总价">
<<<<<<< HEAD
<template #default="scope">
<span>
{{ scope.totalPrice ? scope.totalPrice.toFixed(2) : '0.00' + ' 元' }}
=======
<template #default="{ row }">
<span>
{{ row.totalPrice ? row.totalPrice.toFixed(2) : '0.00' + ' 元' }}
>>>>>>> v1.3
</span>
</template>
</el-table-column>
@@ -358,11 +335,8 @@ import { formatDateStr } from '@/utils';
import { hiprint } from 'vue-plugin-hiprint';
import useUserStore from '@/store/modules/user';
import { getGroupMarkers } from '@/utils/his';
<<<<<<< HEAD
=======
import { simplePrint, PRINT_TEMPLATE } from '@/utils/printUtils.js';
>>>>>>> v1.3
// 患者搜索
const queryParams = ref({
pageNo: 1,
@@ -450,10 +424,6 @@ function handleServiceCategoryChange(value) {
deviceList.value = res.data.records.filter((item) => {
return item.requestTable == 'wor_device_request';
});
<<<<<<< HEAD
=======
>>>>>>> v1.3
activityList.value = res.data.records.filter((item) => {
return (
item.requestTable == 'wor_service_request' ||
@@ -537,8 +507,6 @@ function handleBatchValidate(type) {
};
});
<<<<<<< HEAD
=======
// 批量操作校验
function handleBatchValidate(type) {
let params = [];
@@ -577,7 +545,6 @@ function handleBatchValidate(type) {
};
});
>>>>>>> v1.3
return [...activityList, ...deviceList];
} else if (type === 'cancel') {
let list = [...activitySelectedList.value, ...deviceSelectedList.value];
@@ -742,8 +709,6 @@ function printPrescription() {
}); //开始打印
});
}
<<<<<<< HEAD
=======
// 查看本次就诊处方单
function getEnPrescription() {
getEnPrescriptionInfo({ encounterId: currentPatient.value.encounterId }).then((res) => {
@@ -761,7 +726,6 @@ function getEnPrescription() {
});
}
>>>>>>> v1.3
// 打印处置单
function printDisposal() {
let requestIds = deviceActivityList.value
@@ -869,9 +833,6 @@ function handleCancel(row) {
});
}
// 打印瓶贴
<<<<<<< HEAD
function printBottleLabel() {
=======
// function printBottleLabel() {
// let result = [];
// // 过滤出全部输液药品
@@ -966,7 +927,6 @@ function printBottleLabel() {
// });
// }
async function printBottleLabel() {
>>>>>>> v1.3
let result = [];
// 过滤出全部输液药品
let selectRows = activityListRef.value.getSelectionRows();
@@ -1045,16 +1005,6 @@ async function printBottleLabel() {
infuseData: item,
};
});
<<<<<<< HEAD
const printElements = templateJson;
var hiprintTemplate = new hiprint.PrintTemplate({ template: printElements }); // 定义模板
console.log(result, '打印机列表');
hiprintTemplate.print2(result, {
// printer: 'Xprinter XP-365B',
height: 210,
width: 148,
});
=======
console.log(result, '打印数据');
await simplePrint(PRINT_TEMPLATE.OUTPATIENT_INFUSION, result);
// console.log('打印成功');
@@ -1065,7 +1015,6 @@ async function printBottleLabel() {
// height: 210,
// width: 148,
// });
>>>>>>> v1.3
// 直接打印回调
// 发送任务到打印机成功
// hiprintTemplate.on('printSuccess', function (e) {
@@ -1285,8 +1234,4 @@ function getRecord(row) {
:deep(.el-table__body) tr:hover td.no-hover-column {
background-color: inherit !important;
}
<<<<<<< HEAD
</style>
=======
</style>
>>>>>>> v1.3

View File

@@ -27,11 +27,7 @@
<span>CF0000000001</span>
</div>
<div style="text-align: center">
<<<<<<< HEAD
<h2>长春大学医院</h2>
=======
<h2>长春市朝阳区中医院医院</h2>
>>>>>>> v1.3
</div>
<div style="text-align: center">
<h3>处方单</h3>

View File

@@ -211,28 +211,6 @@ watch(
{ deep: true }
);
<<<<<<< HEAD
getList();
// function getList() {
// queryParams.value.organizationId = props.patientInfo.orgId;
// getAdviceBaseInfo(queryParams.value).then((res) => {
// if (res.data.records.length > 0) {
// adviceBaseList.value = res.data.records.filter((item) => {
// if (item.adviceType == 1 || item.adviceType == 2) {
// return handleQuantity(item) != 0;
// } else {
// return true;
// }
// });
// total.value = res.data.total;
// nextTick(() => {
// currentIndex.value = 0;
// // adviceBaseRef.value.setCurrentRow(adviceBaseList.value[0]);
// });
// }
// });
// }
=======
getList();
function getList() {
queryParams.value.organizationId = props.patientInfo.orgId;
@@ -253,7 +231,6 @@ function getList() {
}
});
}
>>>>>>> v1.3
// 从priceList列表中获取价格
function getPriceFromInventory(row) {
if (row.priceList && row.priceList.length > 0) {

View File

@@ -273,12 +273,7 @@ export function singOut(data) {
url: '/doctor-station/advice/sign-off',
method: 'post',
data: data,
<<<<<<< HEAD
skipErrorMsg: true
})
=======
});
>>>>>>> v1.3
}
/**
* 获取患者本次就诊处方

View File

@@ -269,25 +269,6 @@ function removeDiagnosis(row, index) {
}
function save() {
<<<<<<< HEAD
// 为每个诊断项添加诊断医生和诊断时间
const diagnosisChildList = tcmDiagonsisSaveList.value.map(item => ({
...item,
diagnosisDoctor: props.patientInfo.practitionerName || props.patientInfo.doctorName || props.patientInfo.physicianName || '',
diagnosisTime: new Date().toLocaleString('zh-CN')
}));
saveTcmDiagnosis({
patientId: props.patientInfo.patientId,
encounterId: props.patientInfo.encounterId,
diagnosisChildList: diagnosisChildList,
}).then((res) => {
if (res.code == 200) {
emit('close');
proxy.$modal.msgSuccess('诊断已保存');
}
});
=======
if(props.updateZy.length>0){
updateTcmDiagnosis({
patientId: props.patientInfo.patientId,
@@ -312,7 +293,6 @@ function save() {
});
}
>>>>>>> v1.3
}
function submit() {

View File

@@ -8,10 +8,6 @@
<el-button icon="Search" @click="queryDiagnosisUse" />
</template>
</el-input>
<<<<<<< HEAD
<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">
=======
<el-tree
ref="treeRef"
:data="tree"
@@ -24,22 +20,17 @@
@node-click="handleNodeClick"
max-height="650"
>
>>>>>>> v1.3
<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 != '历史'">
<<<<<<< HEAD
<el-button style="color: #000000" type="text" size="small" @click.stop="addChild(data)">
=======
<el-button
style="color: #000000"
type="text"
size="small"
@click.stop="addChild(data)"
>
>>>>>>> v1.3
<el-icon>
<Plus />
</el-icon>
@@ -48,13 +39,6 @@
<el-popconfirm width="200" :hide-after="10" title="确认删除此常用诊断吗" placement="top-start"
@confirm="deleteChild(data)">
<template #reference>
<<<<<<< HEAD
<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-button
style="color: #000000"
v-if="
@@ -66,7 +50,6 @@
size="small"
@click.stop=""
>
>>>>>>> v1.3
<el-icon>
<Minus />
</el-icon>
@@ -117,11 +100,6 @@
<el-table-column label="诊断名称" align="center" prop="name">
<template #default="scope">
<el-form-item :prop="`diagnosisList.${scope.$index}.name`" :rules="rules.name">
<<<<<<< HEAD
<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"
@@ -134,7 +112,6 @@
:diagnosisSearchkey="diagnosisSearchkey"
@selectDiagnosis="handleSelsectDiagnosis"
/>
>>>>>>> v1.3
<template #reference>
<el-input v-model="scope.row.name" placeholder="请选择诊断" @input="handleChange"
@focus="handleFocus(scope.row, scope.$index)" @blur="handleBlur(scope.row)" />
@@ -143,17 +120,9 @@
</el-form-item>
</template>
</el-table-column>
<<<<<<< HEAD
<el-table-column label="诊断医生" align="center" prop="diagnosisDoctor" width="120" />
<el-table-column label="诊断时间" align="center" prop="diagnosisTime" width="150" />
<el-table-column label="诊断代码" align="center" prop="ybNo" width="180" />
<el-table-column label="诊断类型" align="center" prop="maindiseFlag" width="120">
=======
<el-table-column label="医保码" align="center" prop="ybNo" width="180" />
<el-table-column label="类别" align="center" prop="typeName" width="100" />
<el-table-column label="诊断类型" align="center" prop="maindiseFlag">
>>>>>>> v1.3
<template #default="scope">
<div style="display:flex;flex-direction:column;align-items:center;gap:5px;">
<el-checkbox
@@ -192,11 +161,6 @@
</el-form>
</el-col>
</el-row>
<<<<<<< HEAD
<diagnosisdialog :openDiagnosis="openDiagnosis" @close="closeDiagnosisDialog" :radio="orgOrUser" />
<AddDiagnosisDialog :openAddDiagnosisDialog="openAddDiagnosisDialog" :patientInfo="props.patientInfo"
@close="closeDiagnosisDialog" />
=======
<diagnosisdialog
:openDiagnosis="openDiagnosis"
@close="closeDiagnosisDialog"
@@ -208,7 +172,6 @@
:patientInfo="props.patientInfo"
@close="closeDiagnosisDialog"
/>
>>>>>>> v1.3
</div>
</template>
@@ -287,46 +250,6 @@ function refreshData() {
}
let maxNo = 99;
function getList() {
<<<<<<< HEAD
if (!props.patientInfo || !props.patientInfo.encounterId) {
console.warn('患者就诊信息不完整,无法获取诊断数据');
return;
}
getEncounterDiagnosis(props.patientInfo.encounterId).then((res) => {
if (res.code == 200) {
// 为每个诊断项添加默认的诊断医生和时间(如果不存在)
form.value.diagnosisList = res.data.map(item => ({
...item,
diagnosisDoctor: item.diagnosisDoctor || props.patientInfo.practitionerName || props.patientInfo.doctorName || props.patientInfo.physicianName || userStore.name,
diagnosisTime: item.diagnosisTime || new Date().toLocaleString('zh-CN')
}));
// 获取诊断列表后按排序号排序
form.value.diagnosisList.sort((a, b) => (a.diagSrtNo || 0) - (b.diagSrtNo || 0));
emits('diagnosisSave', false);
}
});
getTcmDiagnosis({ encounterId: props.patientInfo.encounterId }).then((res) => {
if (res.code == 200) {
if (res.data.illness && res.data.illness.length > 0 && res.data.symptom) {
res.data.illness.forEach((item, index) => {
form.value.diagnosisList.push({
name: item.name + '-' + (res.data.symptom[index]?.name || ''),
ybNo: item.ybNo,
medTypeCode: item.medTypeCode,
diagnosisDoctor: props.patientInfo.practitionerName || props.patientInfo.doctorName || props.patientInfo.physicianName || userStore.name,
diagnosisTime: new Date().toLocaleString('zh-CN')
});
});
}
emits('diagnosisSave', false);
}
});
=======
getEncounterDiagnosis(props.patientInfo.encounterId)
.then((res) => {
if (res.code == 200) {
@@ -362,7 +285,6 @@ function getList() {
}
});
});
>>>>>>> v1.3
getTree();
}
@@ -487,22 +409,10 @@ function getTree() {
function handleAddDiagnosis() {
proxy.$refs.formRef.validate((valid) => {
if (valid) {
<<<<<<< HEAD
if (!allowAdd.value) {
proxy.$modal.msgWarning('请先填写病历');
return;
}
// 计算现有最大排序号
const maxSortNo = form.value.diagnosisList.length > 0
? Math.max(...form.value.diagnosisList.map(item => item.diagSrtNo || 0))
: 0;
=======
// if (!allowAdd.value) {
// proxy.$modal.msgWarning('请先填写病历');
// return;
// }
>>>>>>> v1.3
form.value.diagnosisList.push({
showPopover: false,
name: undefined,
@@ -717,14 +627,10 @@ defineExpose({ getList, getDetail, handleSaveDiagnosis });
.el-checkbox.is-bordered.el-checkbox--small {
background-color: #ffffff;
}
<<<<<<< HEAD
=======
.tree-with-scrollbar {
max-height: 650px;
overflow-y: auto;
}
>>>>>>> v1.3
.custom-tree-node {
display: flex;
align-items: center;

View File

@@ -1,25 +1,5 @@
<template>
<div>
<<<<<<< HEAD
<el-scrollbar height="200px">
<el-table
ref="emrTemplateRef"
:data="emrTemplate"
row-key="id"
highlight-current-row
@cell-click="clickRow"
>
<el-table-column label="模板名称" align="center" prop="templateName" />
<!-- <el-table-column label="使用范围" align="center" prop="useScopeCode" /> -->
<el-table-column label="操作" align="center" width="100">
<template #default="scope">
<el-button link type="primary" @click.stop="handelDelete(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
</el-scrollbar>
=======
<el-table
ref="emrTemplateRef"
:data="emrTemplate"
@@ -36,7 +16,6 @@
</template>
</el-table-column>
</el-table>
>>>>>>> v1.3
<pagination
v-show="total > 0"
:total="total"
@@ -67,11 +46,7 @@ const props = defineProps({
required: true,
},
});
<<<<<<< HEAD
getList();
=======
getList();
>>>>>>> v1.3
function getList() {
queryParams.value.useScopeCode = 1;
getEmrTemplateList(queryParams.value).then((res) => {

View File

@@ -276,10 +276,6 @@ function getRowDisabled(row) {
* 新增处方按钮操作
*/
function handleAddPrescription() {
<<<<<<< HEAD
console.log('新增处方按钮操作 - 打开新增处方弹窗');
=======
>>>>>>> v1.3
title.value = '新增处方';
openPrescriptionDialog();
}

View File

@@ -1,13 +1,6 @@
/*
* @Author: sjjh
* @Date: 2025-09-20 17:02:37
<<<<<<< HEAD
* @Description:
*/
import request from '@/utils/request'
// ====== 文书记录
=======
* @Description:
*/
import request from '@/utils/request';
@@ -21,17 +14,11 @@ export function saveOrUpdateRecord(data) {
data,
});
}
>>>>>>> v1.3
// 新增记录
export function addRecord(data) {
return request({
url: '/document/record/addRecord',
method: 'post',
<<<<<<< HEAD
data
})
}
=======
data,
});
}
@@ -69,31 +56,21 @@ export function deleteTemplate(id) {
});
}
>>>>>>> v1.3
// 根据患者ID或就诊ID获取文书记录列表,只针对不需返回患者具体信息的列表,体温单除外,单独处理
export function getRecordByEncounterIdList(params) {
return request({
url: '/document/record/getRecordByEncounterIdList',
method: 'get',
<<<<<<< HEAD
params
})
=======
params,
});
>>>>>>> v1.3
}
// 初始化文书定义
export function init() {
return request({
url: '/document/record/init',
method: 'get',
<<<<<<< HEAD
})
=======
});
>>>>>>> v1.3
}
// ====== 文书模板
@@ -102,40 +79,22 @@ export function addTemplate(data) {
return request({
url: '/document/template/add',
method: 'post',
<<<<<<< HEAD
data
})
=======
data,
});
>>>>>>> v1.3
}
//
export function getListByDefinitionId(definitionId) {
return request({
url: '/document/template/getListByDefinitionId',
method: 'get',
<<<<<<< HEAD
params: {definitionId}
})
=======
params: { definitionId },
});
>>>>>>> v1.3
}
// 更新模板
export function updateTemplate(data) {
return request({
url: '/document/template/update',
method: 'put',
<<<<<<< HEAD
data
})
}
=======
data,
});
}
>>>>>>> v1.3

View File

@@ -7,13 +7,6 @@
</template>
</el-input>
</div>
<<<<<<< HEAD
<el-scrollbar class="emr-history-scrollbar-container" style="width: 100%">
<div v-for="item in historyData" :key="item.id" class="scrollbar-item">
<el-tooltip effect="dark" :content="`${item.name}(${item.recordTime})`" placement="bottom">
<el-text class="w-150px mb-2" truncated @click="handleNodeClick(item)">
{{ item.name }}({{ item.recordTime }})
=======
<el-scrollbar
class="emr-history-scrollbar-container"
style="width: 100%; height: calc(100vh - 300px)"
@@ -37,7 +30,6 @@
>
<Delete />
</el-icon>
>>>>>>> v1.3
</el-text>
</el-tooltip>
</div>
@@ -46,13 +38,8 @@
</template>
<script setup>
<<<<<<< HEAD
import { ref, reactive, defineEmits, unref } from 'vue';
import { getRecordByEncounterIdList } from '../api';
=======
import { ref, reactive, defineEmits, unref, nextTick } from 'vue';
import { getRecordByEncounterIdList, deleteRecord } from '../api';
>>>>>>> v1.3
import { ElTree } from 'element-plus';
import { ElMessageBox, ElMessage, ElLoading } from 'element-plus';
import { patientInfo } from '../../store/patient.js';
@@ -62,13 +49,10 @@ const props = defineProps({
type: String,
default: '',
},
<<<<<<< HEAD
=======
selectedRecordId: {
type: String,
default: '',
},
>>>>>>> v1.3
});
const definitionId = defineModel('definitionId', {
type: String,
@@ -97,20 +81,13 @@ const queryList = async () => {
historyData.value = [];
}
} catch (error) {
<<<<<<< HEAD
// ElMessage.error('获取模板树失败');
=======
// ElMessage.error(' 获取模板树失败 ');
>>>>>>> v1.3
historyData.value = [];
}
};
const handleNodeClick = (data) => {
emits('historyClick', data);
};
<<<<<<< HEAD
const currentSelectTemplate = ref({});
=======
// 删除历史记录
const handleDelete = async (item) => {
try {
@@ -128,7 +105,6 @@ const handleDelete = async (item) => {
}
};
>>>>>>> v1.3
defineExpose({ queryList });
</script>
@@ -152,8 +128,6 @@ defineExpose({ queryList });
& + .scrollbar-item {
margin-top: 8px;
}
<<<<<<< HEAD
=======
transition: all 0.3s ease;
}
.selected-history-item {
@@ -164,7 +138,6 @@ defineExpose({ queryList });
color: #d9d9d9;
cursor: not-allowed;
opacity: 0.6;
>>>>>>> v1.3
}
}
}

View File

@@ -9,19 +9,6 @@
</div> -->
<el-scrollbar class="emr-template-scrollbar-container" style="width: 100%">
<div v-for="item in templateData" :key="item.id" class="scrollbar-item">
<<<<<<< HEAD
<el-tooltip
effect="dark"
:content="`${item.name}`"
placement="bottom"
>
<el-text class="2" truncated @click="handleNodeClick(item)">
<div class="template-item">{{ item.name }}
<el-space>
<el-icon><Edit @click="handleEdit(item)" /></el-icon>
</el-space></div>
=======
<el-tooltip effect="dark" :content="`${item.name}`" placement="bottom">
<el-text class="2" truncated @click="handleNodeClick(item)">
<div class="template-item">
@@ -31,7 +18,6 @@
<el-icon><Delete @click="handleDelete(item)" /></el-icon>
</el-space>
</div>
>>>>>>> v1.3
</el-text>
</el-tooltip>
</div>
@@ -41,19 +27,11 @@
<script setup>
import { ref, reactive, defineEmits, unref } from 'vue';
<<<<<<< HEAD
import { getListByDefinitionId } from '../api';
import { ElTree } from 'element-plus';
import { ElMessageBox, ElMessage, ElLoading } from 'element-plus';
import { patientInfo } from '../../store/patient.js';
const emits = defineEmits(['templateClick','edit']);
=======
import { getListByDefinitionId, deleteTemplate } from '../api';
import { ElTree } from 'element-plus';
import { ElMessageBox, ElMessage, ElLoading } from 'element-plus';
import { patientInfo } from '../../store/patient.js';
const emits = defineEmits(['templateClick', 'edit']);
>>>>>>> v1.3
const props = defineProps({
definitionId: {
type: String,
@@ -73,17 +51,6 @@ const queryParams = ref({
isPage: 0,
});
const templateData = ref([]);
<<<<<<< HEAD
const queryList = async () => {
try {
if ( unref(definitionId)&&unref(definitionId) !== '') {
const res = await getListByDefinitionId(unref(definitionId));
templateData.value = res.data || [];
}else{
templateData.value = [];
}
=======
// 删除模板
const handleDelete = async (item) => {
try {
@@ -102,7 +69,6 @@ const queryList = async () => {
} else {
templateData.value = [];
}
>>>>>>> v1.3
} catch (error) {
ElMessage.error('获取模板失败');
templateData.value = [];
@@ -120,38 +86,6 @@ defineExpose({ queryList });
<style lang="scss" scoped>
.emr-template-container {
<<<<<<< HEAD
height: 100%;
// padding: 8px;
.emr-template-scrollbar-container{
padding: 8px;
height: 100%;
.scrollbar-item {
height: 40px;
line-height: 40px;
border-radius: 4px;
cursor: pointer;
background: var(--el-color-primary-light-9);
& + .scrollbar-item {
margin-top: 8px;
}
.el-text{
width: calc(100% - 0px);
display: flex;
justify-content: space-between;
padding: 0 8px;
}
.template-item{
width: 100%;
display: flex;
justify-content: space-between;
}
}
}
}
=======
height: 100%;
// padding: 8px;
@@ -181,5 +115,4 @@ defineExpose({ queryList });
}
}
}
>>>>>>> v1.3
</style>

View File

@@ -1,11 +1,3 @@
<<<<<<< HEAD
<!--
* @Author: sjjh
* @Date: 2025-09-18 15:41:10
* @Description: 门诊病历组件
-->
=======
>>>>>>> v1.3
<template>
<div class="emr-use-container">
<div
@@ -51,26 +43,13 @@
<!-- <el-button type="primary" @click="newEmr">新建</el-button> -->
<el-button type="primary" @click="saveAsModel">存为模版</el-button>
<el-button @click="refresh">刷新</el-button>
<<<<<<< HEAD
<el-button type="primary" @click="save">保存</el-button>
<!-- <el-button type="primary" @click="print">打印</el-button> -->
=======
<el-button @click="resetForm">重置</el-button>
<el-button type="primary" @click="save">保存</el-button>
<el-button type="primary" @click="print">打印</el-button>
>>>>>>> v1.3
</el-space>
</div>
<div class="operate-main">
<el-scrollbar class="template-tree-scrollbar">
<<<<<<< HEAD
<component
:is="currentComponent"
ref="emrComponentRef"
:patientInfo="props.patientInfo"
@submitOk="handleSubmitOk"
/>
=======
<div v-loading="loading" class="loading-container">
<component
:is="currentComponent"
@@ -79,7 +58,6 @@
@submitOk="handleSubmitOk"
/>
</div>
>>>>>>> v1.3
</el-scrollbar>
</div>
</div>
@@ -92,10 +70,7 @@
@historyClick="handleHistoryClick"
ref="historyRef"
v-model:definitionId="currentSelectTemplate.id"
<<<<<<< HEAD
=======
:selectedRecordId="selectedHistoryRecordId"
>>>>>>> v1.3
/>
</el-tab-pane>
<el-tab-pane label="模版" name="model">
@@ -119,20 +94,6 @@
</div>
</template>
<script setup>
<<<<<<< HEAD
import { getCurrentInstance, nextTick, onBeforeMount, onMounted, reactive, ref } from 'vue';
import { ElMessageBox, ElMessage, ElLoading } from 'element-plus';
import { getTreeList } from '@/views/basicmanage/caseTemplates/api';
import { addRecord, addTemplate } from './api';
import { patientInfo } from '../store/patient.js';
import dayjs from 'dayjs';
// 打印工具
// import { simplePrint, PRINT_TEMPLATE } from '@/utils/printUtils.js';
const { proxy } = getCurrentInstance();
const emits = defineEmits(['emrSaved']);
const props = defineProps({
/** 患者信息 doctorStation 传递信息*/
=======
import { nextTick, onMounted, ref, watch } from 'vue';
import { ElMessage } from 'element-plus';
import { getTreeList } from '@/views/basicmanage/caseTemplates/api';
@@ -146,7 +107,6 @@ const { proxy } = getCurrentInstance();
const emits = defineEmits([]);
const props = defineProps({
/** 患者信息 doctorStation 传递信息*/
>>>>>>> v1.3
patientInfo: {
type: Object,
required: true,
@@ -169,10 +129,7 @@ const queryParams = ref({
useRanges: [1, 2], // 0 暂不使用 1 全院 2 科室 3 个人
organizationId: userStore.orgId,
});
<<<<<<< HEAD
=======
const loading = ref(false); // 数据加载状态
>>>>>>> v1.3
const currentSelectTemplate = ref({
id: '',
@@ -182,10 +139,7 @@ const emrComponentRef = ref(null);
const quicklyactiveName = ref('history');
const leftShow = ref(true);
const rightShow = ref(true);
<<<<<<< HEAD
=======
const templateTree = ref(null);
>>>>>>> v1.3
// 树配置(模板树)
const defaultProps = {
@@ -198,12 +152,9 @@ const queryTemplateTree = async () => {
try {
const res = await getTreeList(queryParams.value);
templateData.value = res.data || [];
<<<<<<< HEAD
=======
// 组件挂载后患者信息变化时会自动调用selectDefaultTemplate
// 这里不再重复调用,避免重复操作
>>>>>>> v1.3
} catch (error) {
// ElMessage.error('获取模板树失败');
templateData.value = [];
@@ -223,9 +174,6 @@ const handleNodeClick = (data, node) => {
};
// currentComponent.value = null;
}
<<<<<<< HEAD
historyRef.value?.queryList();
=======
// 确保组件状态更新后再查询历史记录
nextTick(() => {
@@ -240,7 +188,6 @@ const handleNodeClick = (data, node) => {
}, 100);
});
>>>>>>> v1.3
templateRef.value?.queryList();
};
@@ -300,14 +247,6 @@ const handleSubmitOk = async (data) => {
editForm.value.encounterId = patientInfo.value.encounterId;
editForm.value.patientId = patientInfo.value.patientId;
editForm.value.recordTime = dayjs().format('YYYY-MM-DD HH:mm:ss');
<<<<<<< HEAD
await addRecord(editForm.value);
ElMessage.success('病历保存成功');
historyRef.value?.queryList();
templateRef.value?.queryList();
// 通知父组件病历保存成功
emits('emrSaved', true);
=======
// 提交病历
await saveOrUpdateRecord(editForm.value);
ElMessage.success('保存成功');
@@ -320,18 +259,12 @@ const handleSubmitOk = async (data) => {
setTimeout(() => {
loadLatestMedicalRecord();
}, 100);
>>>>>>> v1.3
} catch (error) {
ElMessage.error('提交失败');
console.log(error);
}
} else if (currentOperate.value === 'addTemplate') {
<<<<<<< HEAD
// 新增或者编辑模板
// editTemplateForm.value.id=
=======
// 新增或修改模板
>>>>>>> v1.3
editTemplateForm.value.name =
currentSelectTemplate.value.name + dayjs().format('YYYY/MM/DD HH:mm');
editTemplateForm.value.contextJson = JSON.stringify(data);
@@ -346,26 +279,12 @@ const refresh = () => {
templateRef.value?.queryList();
};
<<<<<<< HEAD
const deleteEmr = async () => {
try {
// 这里应该添加实际的删除逻辑
ElMessage.success('删除成功!');
} catch (error) {
ElMessage.error('删除失败');
}
};
const save = async () => {
try {
=======
const save = async () => {
try {
if (editForm.value && editForm.value.printCount && editForm.value.printCount > 0) {
ElMessage.warning('该病历已打印,不允许修改');
return;
}
>>>>>>> v1.3
currentOperate.value = 'add';
await emrComponentRef.value?.submit();
} catch (error) {
@@ -373,8 +292,6 @@ const save = async () => {
}
};
<<<<<<< HEAD
=======
// 重置表单数据
const resetForm = async () => {
try {
@@ -419,7 +336,6 @@ const resetForm = async () => {
}
};
>>>>>>> v1.3
const historyRef = ref(null);
const handleHistoryClick = (data) => {
newEmr();
@@ -428,8 +344,6 @@ const handleHistoryClick = (data) => {
emrComponentRef.value?.setFormData(JSON.parse(editForm.value.contentJson));
});
};
<<<<<<< HEAD
=======
// 默认选中门诊病历模板
const selectOutpatientMedicalRecordTemplate = async () => {
@@ -532,17 +446,13 @@ const loadLatestMedicalRecord = async () => {
loading.value = false;
}
};
>>>>>>> v1.3
const templateRef = ref(null);
const handleTemplateClick = (data) => {
newEmr();
editForm.value = data;
<<<<<<< HEAD
=======
editForm.value.id = '';
editForm.value.recordTime = dayjs().format('YYYY-MM-DD HH:mm:ss');
>>>>>>> v1.3
nextTick(() => {
emrComponentRef.value?.setFormData(JSON.parse(editForm.value.contextJson));
});
@@ -555,12 +465,6 @@ const templateEdit = (data) => {
const templateEditVisible = ref(false);
// const templateEditSubmitOk = () => {};
<<<<<<< HEAD
// 打印方法实现
const print = async () => {
try {
// 检查是否有选中的病历模板
=======
// 定义病历模板类型与打印模板的映射关系
const templateToPrintTemplateMap = {
// 手术记录相关模板
@@ -593,46 +497,19 @@ const getPrintTemplateByTemplateName = (templateName) => {
// 打印
const print = async () => {
try {
>>>>>>> v1.3
if (!currentSelectTemplate.value || !currentSelectTemplate.value.id) {
ElMessage.warning('请先选择病历模板');
return;
}
<<<<<<< HEAD
=======
// 检查是否已保存
if (!editForm.value.id || editForm.value.id === '') {
ElMessage.warning('请先保存病历后再进行打印');
return;
}
>>>>>>> v1.3
// 获取当前病历组件的表单数据
const formData = emrComponentRef.value?.formData || {};
<<<<<<< HEAD
// 准备打印数据不依赖子组件的getPrintData方法
// const printData = {
// // 使用当前选中的模板信息
// templateInfo: currentSelectTemplate.value,
// // 添加患者信息
// patientInfo: props.patientInfo,
// // 添加打印时间
// printTime: dayjs().format('YYYY-MM-DD HH:mm:ss'),
// // 添加基本病历信息
// emrInfo: {
// documentName: currentSelectTemplate.value.name || '住院病历',
// documentId: currentSelectTemplate.value.id || '',
// encounterId: props.patientInfo.encounterId || '',
// patientId: props.patientInfo.patientId || '',
// recordTime: dayjs().format('YYYY-MM-DD HH:mm:ss'),
// },
// // 添加病历表单数据(包含红框内的所有字段)
// formData: formData,
// doctorName: userStore.nickName,
// };
=======
// 获取诊断数据
let diagnosisList = [];
let diagnosisText = '';
@@ -659,7 +536,6 @@ const print = async () => {
const selectedPrintTemplate = getPrintTemplateByTemplateName(templateName);
// 打印数据
>>>>>>> v1.3
const printData = {
// 模板信息
templateName: currentSelectTemplate.value.name || '住院病历',
@@ -683,30 +559,16 @@ const print = async () => {
department: props.patientInfo.department || '',
attendingDoctor: props.patientInfo.attendingDoctor || '',
<<<<<<< HEAD
=======
// 诊断信息
diagnosisList: JSON.stringify(diagnosisList),
diagnosisText: diagnosisText,
>>>>>>> v1.3
// 病历信息
documentName: currentSelectTemplate.value.name || '住院病历',
documentId: currentSelectTemplate.value.id || '',
recordTime: dayjs().format('YYYY-MM-DD HH:mm:ss'),
printTime: dayjs().format('YYYY-MM-DD HH:mm:ss'),
<<<<<<< HEAD
// 表单数据 - 需要将嵌套结构展开
...flattenObject(formData),
};
// 执行打印
await simplePrint(PRINT_TEMPLATE.OUTPATIENT_MEDICAL_RECORD, printData);
ElMessage.success('打印成功');
} catch (error) {
console.error('打印失败:', error);
=======
//病历号
busNo: props.patientInfo.busNo || '',
//费用类型
@@ -733,7 +595,6 @@ const print = async () => {
ElMessage.success('打印成功');
} catch (error) {
>>>>>>> v1.3
ElMessage.error('打印失败: ' + (error.message || '未知错误'));
}
};
@@ -767,17 +628,6 @@ const templateEditSubmitOk = () => {
historyRef.value?.queryList();
templateRef.value?.queryList();
};
<<<<<<< HEAD
// onBeforeMount(() => {});
// 刚进页面默认显示门诊病历
const selectDefaultTemplate = () => {
nextTick(() => {
// 查找门诊病历(1.0.0)节点
const findTemplate = (nodes) => {
for (const node of nodes) {
if (node.children && node.children.length > 0) {
const found = findTemplate(node.children);
=======
// 选择默认模板 - 获取门诊病历分类下的第一个模板
const selectDefaultTemplate = () => {
@@ -805,41 +655,14 @@ const selectDefaultTemplate = () => {
// 递归查找子节点
if (node.children && node.children.length > 0) {
const found = findOutpatientRecordCategoryAndFirstTemplate(node.children);
>>>>>>> v1.3
if (found) {
return found;
}
}
<<<<<<< HEAD
// 根据ID查找门诊病历模板
if (node.document && node.document.id === '1963474077201162242') {
return node;
}
=======
>>>>>>> v1.3
}
return null;
};
<<<<<<< HEAD
const defaultTemplate = findTemplate(templateData.value);
if (defaultTemplate) {
// 模拟点击节点
const mockNode = {
isLeaf: true,
};
handleNodeClick(defaultTemplate, mockNode);
}
});
};
onMounted(async () => {
console.log('hospitalizationEmr mounted', userStore);
await queryTemplateTree();
selectDefaultTemplate();
});
defineExpose({ state });
=======
const defaultTemplate = findOutpatientRecordCategoryAndFirstTemplate(templateData.value);
if (defaultTemplate) {
nextTick(() => {
@@ -899,7 +722,6 @@ onMounted(async () => {
});
// defineExpose({ state }); // state未使用
>>>>>>> v1.3
const disNode = () => {
leftShow.value = !leftShow.value;
@@ -1013,14 +835,6 @@ const disNode_R = () => {
}
.operate-main {
<<<<<<< HEAD
height: calc(100vh - 150px);
flex: auto;
}
.operate-main .template-tree-scrollbar {
height: 100%;
overflow-y: auto;
=======
flex: 1;
min-height: 0; /* 允许flex子项高度收缩 */
display: flex;
@@ -1044,7 +858,6 @@ const disNode_R = () => {
.operate-main .template-tree-scrollbar > * {
max-width: 100%;
box-sizing: border-box;
>>>>>>> v1.3
}
}
@@ -1066,13 +879,10 @@ const disNode_R = () => {
transition-duration: 300ms;
}
}
<<<<<<< HEAD
=======
/* 加载状态样式 */
.loading-container {
min-height: 400px;
position: relative;
}
>>>>>>> v1.3
</style>

View File

@@ -19,11 +19,7 @@
<span>{{ item.prescriptionNo }}</span>
</div>
<div style="text-align: center">
<<<<<<< HEAD
<h2>长春大学医院</h2>
=======
<h2>长春市朝阳区中医院医院</h2>
>>>>>>> v1.3
</div>
<div style="text-align: center">
<h3>处方单</h3>

View File

@@ -59,17 +59,6 @@
<el-table-column label="数量" align="center" prop="quantity" />
<el-table-column label="单位" align="center" prop="unitCode_dictText" />
<el-table-column label="收款金额" align="center" prop="totalPrice" />
<<<<<<< HEAD
<el-table-column label="发放状态" align="center">
<template #default="scope">
<el-tag v-if="scope.row.dispenseStatus != 0" type="danger">
{{ scope.row.dispenseStatus_enumText }}
</el-tag>
<el-tag v-else type="default">{{ scope.row.serviceStatus_enumText }}</el-tag>
</template>
</el-table-column>
=======
>>>>>>> v1.3
<el-table-column label="支付状态" align="center" prop="refundStatus_enumText">
<template #default="scope">
<el-tag

View File

@@ -3,11 +3,7 @@
<div
class="prescription-section"
v-for="(prescription, pIndex) in tcmPrescriptionList"
<<<<<<< HEAD
:key="pIndex"
=======
:key="prescription.id"
>>>>>>> v1.3
>
<div class="section-header">
<div class="title first-prescription">
@@ -22,20 +18,6 @@
<plus />
</el-icon>
<el-icon
<<<<<<< HEAD
class="delete-icon"
title="删除处方单"
@click="handleDeletePrescriptionClick(pIndex)"
:class="{ 'disabled-icon': isPrescriptionDeletable(pIndex) !== true }"
style="font-size: 20px !important; margin-left: 10px; color: #f56c6c"
>
<minus />
</el-icon>
</div>
<div class="summary">
<span class="summary-item">药品数: {{ getPrescriptionMedicineCount(pIndex) }}</span>
<span class="summary-item">总价: ¥ {{ getPrescriptionTotalPrice(pIndex) }}</span>
=======
class="add-icon"
title="删除处方"
@click="deletePrescription(prescription)"
@@ -50,7 +32,6 @@
{{ prescription.prescriptionList ? prescription.prescriptionList.length : '0' }}
</span>
<span class="summary-item">总价: ¥ {{ calculatePrescriptionTotal(pIndex) }}</span>
>>>>>>> v1.3
</div>
</div>
<div>
@@ -93,15 +74,8 @@
:value="item.accountId"
/>
</el-select>
<<<<<<< HEAD
<span class="doctor-station"> 配方名称 </span>
<el-input v-model="formulaName" placeholder=" " style="width: 100px" />
<span class="doctor-station"> 用药途径 </span>
<el-select v-model="methodCode" placeholder="费用性质" style="width: 120px">
=======
<span class="doctor-station"> 用法 </span>
<el-select v-model="prescription.methodCode" placeholder="用法" style="width: 120px">
>>>>>>> v1.3
<el-option
v-for="dict in method_code"
:key="dict.value"
@@ -271,23 +245,6 @@
/>
</template>
</el-select>
<<<<<<< HEAD
<span class="doctor-station"> 脚注: </span>
<el-select
v-model="footNote"
filterable
allow-create
default-first-option
style="width: 120px; margin-right: 20px"
placeholder="">
<el-option
v-for="dict in hjerbal_footnotes"
:key="dict.value"
:label="dict.label"
:value="dict.value">
</el-option>
</el-select>
=======
<!-- 单次剂量 -->
<el-form-item
label="特殊煎法"
@@ -305,7 +262,6 @@
</template>
</el-select>
</el-form-item>
>>>>>>> v1.3
</div>
<span class="total-amount">
总金额:{{
@@ -474,13 +430,9 @@ import { calculateQuantityByDays, formatNumber } from '@/utils/his';
import Decimal from 'decimal.js';
import tcmdiagnosisDialog from './tcmdiagnosisDialog';
import { Delete, Minus } from '@element-plus/icons-vue';
<<<<<<< HEAD
=======
import { ElMessage } from 'element-plus';
import printUtils, { PRINT_TEMPLATE } from '@/utils/printUtils';
import { advicePrint } from '@/api/public';
>>>>>>> v1.3
const emit = defineEmits(['selectDiagnosis']);
const total = ref(0);
const queryParams = ref({});
@@ -494,10 +446,6 @@ const encounterId = ref('');
const accountId = ref('');
const encounterDiagnosisId = ref('');
<<<<<<< HEAD
const tcmPrescriptionList = ref([
{
=======
let prescriptionIdCounter = 1;
const generatePrescriptionId = () => {
return `prescription_${Date.now()}_${prescriptionIdCounter++}`;
@@ -506,7 +454,6 @@ const generatePrescriptionId = () => {
const tcmPrescriptionList = ref([
{
id: generatePrescriptionId(),
>>>>>>> v1.3
prescriptionList: [],
conditionDefinitionId: '',
accountId: '',
@@ -526,35 +473,9 @@ const tcmPrescriptionList = ref([
const unitCodeList = ref([]);
const adviceTableRef = ref([]);
const organization = ref([]);
<<<<<<< HEAD
const conditionDefinitionId = ref('');
const diagnosisName = ref('');
const diagnosisInfo = ref({});
const rateCode = ref('');
const footNote = ref('');
const decoctionMethod = ref('');
const chineseHerbsDoseQuantity = ref('');
const dispensePerDuration = ref('');
const formulaName = ref('');
const sufferingFlag = ref(false);
const methodCode = ref('');
const loading = ref(false);
const rowRules = ref({
conditionDefinitionId: [{ required: true, message: '请选择诊断', trigger: 'change' }],
minUnitQuantity: [{ required: true, message: '请输入单次剂量', trigger: 'change' }],
doseQuantity: [{ required: true, message: '请输入单次剂量单位', trigger: 'change' }],
quantity: [{ required: true, message: '请输入数量', trigger: 'change' }],
dispensePerDuration: [{ required: true, message: '请输入用药天数', trigger: 'change' }],
formulaName: [{ required: true, message: '请输入配方名称', trigger: 'change' }],
executeNum: [{ required: true, message: '请输入执行次数', trigger: 'change' }],
rateCode: [{ required: true, message: '请选择频次', trigger: 'change' }],
methodCode: [{ required: true, message: '请选择给药途径', trigger: 'change' }],
orgId: [{ required: true, message: '请选择执行科室', trigger: 'change' }],
=======
const loading = ref(false);
const rowRules = ref({
minUnitQuantity: [{ required: true, message: '请输入单次剂量', trigger: 'change' }],
>>>>>>> v1.3
});
const unitMap = ref({
dose: 'dose',
@@ -584,39 +505,6 @@ const inputRefs = ref({}); // 存储输入框实例
const requiredProps = ref([]); // 存储必填项 prop 顺序
const totalAmount = ref(0);
const tcmDianosis = ref();
<<<<<<< HEAD
const { method_code, unit_code, rate_code, method_of_decocting_medicine,hjerbal_footnotes,distribution_category_code } = proxy.useDict(
'method_code',
'unit_code',
'rate_code',
'method_of_decocting_medicine',
'hjerbal_footnotes',
'distribution_category_code'
);
const adviceTypeList = ref([
{
label: '西药',
value: 1,
},
{
label: '中成药',
value: 2,
},
{
label: '耗材',
value: 3,
},
{
label: '诊疗',
value: 4,
},
{
label: '全部',
value: '',
},
]);
=======
const { method_code, unit_code, rate_code, distribution_category_code, dosage_instruction } =
proxy.useDict(
'method_code',
@@ -626,7 +514,6 @@ const { method_code, unit_code, rate_code, distribution_category_code, dosage_in
'dosage_instruction'
);
>>>>>>> v1.3
onMounted(() => {
document.addEventListener('keydown', escKeyListener);
});
@@ -652,64 +539,6 @@ function getList() {
});
}
<<<<<<< HEAD
function getListInfo(addNewRow) {
// 确保isAdding变量存在
if (typeof isAdding !== 'undefined') {
isAdding.value = false;
}
// 确保有患者信息
if (!props.patientInfo || !props.patientInfo.encounterId) {
console.error('患者信息不完整');
return;
}
getTcmAdviceList({ encounterId: props.patientInfo.encounterId }).then((res) => {
if (res && res.data && Array.isArray(res.data)) {
// 处理返回的数据
if (res.data.length > 0) {
// 如果有数据,清空当前列表并重新添加
tcmPrescriptionList.value = [];
res.data.forEach((item) => {
try {
// 解析contentJson获取完整的医嘱数据
const contentData = item.contentJson ? JSON.parse(item.contentJson) : {};
// 创建一个新的处方对象
const newPrescription = {
...item,
...contentData,
// 确保关键显示字段存在
adviceName: contentData.adviceName || item.adviceName || '',
quantity: contentData.quantity || item.quantity || '',
totalPrice: contentData.totalPrice || item.totalPrice || '',
diagnosisName: contentData.diagnosisName || item.diagnosisName || '',
positionName: contentData.positionName || item.positionName || '',
doseUnitCode_dictText: contentData.doseUnitCode_dictText || item.doseUnitCode_dictText || '',
chineseHerbsDoseQuantity: contentData.chineseHerbsDoseQuantity || item.chineseHerbsDoseQuantity || '',
prescriptionList: [contentData]
};
// 添加到处方列表
tcmPrescriptionList.value.push(newPrescription);
} catch (error) {
console.error('解析医嘱数据失败:', error, '数据项:', item);
}
});
}
// 重新计算总金额
handleTotalAmount();
if (props.activeTab == 'prescription' && addNewRow) {
handleAddMedicine();
}
} else {
console.error('获取医嘱列表失败或数据格式错误:', res);
// 保持当前列表不变,不要清空
=======
async function getListInfo(addNewRow) {
// 重置所有处方的添加状态
tcmPrescriptionList.value.forEach((prescription) => {
@@ -785,28 +614,14 @@ async function getListInfo(addNewRow) {
tcmPrescriptionList.value.accountId = contractList.value[0].accountId;
if (props.activeTab == 'prescription' && addNewRow) {
handleAddMedicine(0);
>>>>>>> v1.3
}
}).catch(error => {
console.error('获取医嘱列表异常:', error);
// 保持当前列表不变,不要清空
});
<<<<<<< HEAD
tcmDiagnosisList.value = getFromDiagnosis(props.patientInfo.encounterId);
getContract({ encounterId: props.patientInfo.encounterId }).then((res) => {
contractList.value = res?.data || [];
}).catch(error => {
console.error('获取合同信息失败:', error);
});
accountId.value = props.patientInfo.accountId || '';
=======
tcmDiagnosisList.value = getFromDiagnosis(props.patientInfo.encounterId);
accountId.value = props.patientInfo.accountId;
>>>>>>> v1.3
}
function getDiagnosisInfo() {
@@ -822,11 +637,7 @@ function getDiagnosisInfo() {
});
});
}
<<<<<<< HEAD
// 默认选择第一个诊断
=======
// 默认选择第一个诊断
>>>>>>> v1.3
if (diagnosisList.value.length > 0) {
const firstDiagnosis = diagnosisList.value[0];
tcmPrescriptionList.value.forEach((prescription) => {
@@ -1156,18 +967,8 @@ function handleDelete(pIndex) {
prescription.expandOrder = [];
prescription.isAdding = false;
adviceQueryParams.value.adviceType = undefined;
<<<<<<< HEAD
// 删除行会出现组号混乱的情况,所以这里重新更新标记
const allPrescriptions = tcmPrescriptionList.value.flatMap(p => p.prescriptionList);
groupMarkers.value = getGroupMarkers(allPrescriptions);
}
=======
}
>>>>>>> v1.3
function handleNumberClick(item, index, pIndex) {
const prescription = tcmPrescriptionList.value[pIndex];
prescription.prescriptionList[index].unitPrice = item.price;
@@ -1247,117 +1048,6 @@ function handleSave(pIndex) {
}
// 单行处方保存
<<<<<<< HEAD
function handleSaveSign(row, index) {
try {
// 直接执行保存逻辑,不再进行表单验证
row.isEdit = false;
isAdding.value = false;
expandOrder.value = [];
// 确保必要的字段有值
if (props.patientInfo) {
row.patientId = props.patientInfo.patientId;
row.encounterId = props.patientInfo.encounterId;
}
row.accountId = accountId.value || '';
row.quantity = row.minUnitQuantity || 1; // 确保数量有值
row.conditionId = conditionId.value || '';
row.conditionDefinitionId = conditionDefinitionId.value || '';
row.encounterDiagnosisId = encounterDiagnosisId.value || '';
row.diagnosisName = diagnosisName.value || '';
// 计算单价
if (row.unitCodeList && row.unitCode) {
const unitItem = row.unitCodeList.find((item) => item.value === row.unitCode);
if (unitItem?.type !== 'unit' && row.unitPrice) {
row.unitPrice = new Decimal(row.unitPrice).div(row.partPercent || 1).toFixed(2);
}
}
// 计算总金额
if (row.minUnitQuantity && row.unitPrice) {
row.totalPrice = new Decimal(row.minUnitQuantity).mul(row.unitPrice).toFixed(2);
}
// 确保显示所需的字段都有值
row.adviceName = row.adviceName || '未命名药品';
row.positionName = row.positionName || '默认药房';
// 创建要保存的数据对象,避免循环引用
const saveData = {
...row,
// 排除可能导致循环引用的复杂对象
unitCodeList: undefined,
stockList: undefined,
contentJson: undefined
};
// 序列化数据用于存储
saveData.contentJson = JSON.stringify(saveData);
// 只保存当前行的数据,而不是整个列表
savePrescription({ adviceSaveList: [saveData] }).then((res) => {
if (res && res.code === 200) {
proxy.$modal.msgSuccess('保存成功');
// 此处错误调用getListInfo导致医嘱信息被覆盖从而不显示。
// getListInfo(true);
nextId.value = 1;
} else {
proxy.$modal.msgError('保存失败,请重试');
console.error('保存失败响应:', res);
}
}).catch(error => {
console.error('保存处方失败:', error);
proxy.$modal.msgError('保存失败,请检查网络或联系管理员');
});
} catch (error) {
console.error('处理保存时出错:', error);
proxy.$modal.msgError('操作异常,请重试');
}
}
function handleSaveBatch() {
// 收集所有需要保存的处方项目
let saveList = [];
// 遍历所有处方
for (const prescription of tcmPrescriptionList.value) {
if (prescription.prescriptionList) {
// 检查处方是否有必填的付数
if (!prescription.chineseHerbsDoseQuantity || prescription.chineseHerbsDoseQuantity == 0) {
proxy.$modal.msgWarning('请输入付数');
return;
}
// 收集该处方下需要保存的项目
const itemsToSave = prescription.prescriptionList
.filter((item) => item.statusEnum == 1)
.map((item, index) => {
return {
...item,
accountId: accountId.value,
conditionId: prescription.conditionId,
encounterDiagnosisId: prescription.encounterDiagnosisId,
conditionDefinitionId: prescription.conditionDefinitionId,
encounterId: props.patientInfo.encounterId,
patientId: props.patientInfo.patientId,
requestId: item.requestId,
groupId: item.groupId ? item.groupId : timestamp.toString(),
chineseHerbsDoseQuantity: prescription.chineseHerbsDoseQuantity,
dbOpType: item.requestId ? '2' : '1',
};
});
// 将项目添加到保存列表
saveList = saveList.concat(itemsToSave);
}
}
// 检查是否有可保存的项目
=======
function handleSaveSign(row, index, pIndex) {
const prescription = tcmPrescriptionList.value[pIndex];
const formRefName = 'formRef' + pIndex + '-' + index;
@@ -1408,15 +1098,10 @@ function handleSaveBatch(pIndex) {
dbOpType: item.requestId ? '2' : '1',
};
});
>>>>>>> v1.3
if (saveList.length == 0) {
proxy.$modal.msgWarning('当前没有可保存医嘱');
return;
}
<<<<<<< HEAD
// 保存处方
=======
if (
prescription.chineseHerbsDoseQuantity == undefined ||
prescription.chineseHerbsDoseQuantity == 0
@@ -1424,22 +1109,11 @@ function handleSaveBatch(pIndex) {
proxy.$modal.msgWarning('请输入付数');
return;
}
>>>>>>> v1.3
saveTcmAdvice({ adviceSaveList: saveList }).then((res) => {
if (res.code === 200) {
proxy.$modal.msgSuccess('保存成功');
getListInfo(true);
<<<<<<< HEAD
// 重置所有处方的nextId
tcmPrescriptionList.value.forEach(prescription => {
if (prescription.nextId) {
prescription.nextId = 1;
}
});
=======
prescription.nextId = 1;
>>>>>>> v1.3
}
});
}
@@ -1607,21 +1281,6 @@ function validateGroups(saveList) {
return true;
}
<<<<<<< HEAD
=======
async function handlePrint(pIndex) {
const prescription = tcmPrescriptionList.value[pIndex];
const selectedRows = prescription.prescriptionList.filter((item) => item.check);
@@ -1683,7 +1342,6 @@ async function handlePrint(pIndex) {
ElMessage.error('中药处方打印失败: ' + error.message);
}
}
>>>>>>> v1.3
defineExpose({ getListInfo, getDiagnosisInfo });
</script>
@@ -1799,29 +1457,4 @@ defineExpose({ getListInfo, getDiagnosisInfo });
.add-icon:hover {
background-color: #ecf5ff;
}
<<<<<<< HEAD
.delete-icon {
cursor: pointer;
border-radius: 50%;
padding: 4px;
transition: all 0.3s ease;
}
.delete-icon:hover {
background-color: #fef0f0;
}
.delete-icon.disabled-icon {
cursor: not-allowed;
color: #c0c4cc !important;
opacity: 0.6;
}
.delete-icon.disabled-icon:hover {
background-color: transparent;
}
</style>
=======
</style>
>>>>>>> v1.3

View File

@@ -15,11 +15,6 @@
<el-button icon="Search" @click="getPatientList" />
</template>
</el-input>
<<<<<<< HEAD
<el-date-picker v-model="registerTime" @change="handleTimeChange" type="daterange"
style="width: 100%; margin-bottom: 10px" :clearable="false" placeholder="挂号时间" format="YYYY-MM-DD"
value-format="YYYY-MM-DD" />
=======
<el-date-picker
v-model="registerTime"
@change="handleTimeChange"
@@ -30,7 +25,6 @@
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
/>
>>>>>>> v1.3
<el-scrollbar height="700px">
<div v-for="(item, index) in patientList" :class="item.active ? 'patient-card actived' : 'patient-card'"
:key="item.id" @click="handleCardClick(item, index)">
@@ -87,14 +81,6 @@
{{
Object.keys(patientInfo).length !== 0
? patientInfo.patientName +
<<<<<<< HEAD
' / ' +
patientInfo.age +
' / ' +
patientInfo.genderEnum_enumText +
' / ' +
patientInfo.contractName
=======
' / ' +
patientInfo.age +
' / ' +
@@ -105,29 +91,16 @@
patientInfo.phone +
'/' +
patientInfo.busNo
>>>>>>> v1.3
: '-'
}}
</el-descriptions-item>
<el-descriptions-item label="挂号时间:" width="300">
{{ Object.keys(patientInfo).length !== 0 ? formatDate(patientInfo.registerTime) : '-' }}
</el-descriptions-item>
<<<<<<< HEAD
<el-descriptions-item label="医生:" width="150">{{
userStore.name
}}</el-descriptions-item>
<el-descriptions-item label="" width="350">
<!-- 初诊 / 复诊 按钮 -->
<el-radio v-model="visitType" label="FIRST" :disabled="visitTypeDisabled">初诊</el-radio>
<el-radio v-model="visitType" label="FOLLOW_UP" :disabled="visitTypeDisabled">复诊</el-radio>
<!-- 原有按钮 -->
=======
<el-descriptions-item label="医生:" width="250">
{{ userStore.nickName }}
</el-descriptions-item>
<el-descriptions-item label="" width="300">
>>>>>>> v1.3
<el-button type="primary" plain @click.stop="handleFinish(patientInfo.encounterId)">
完诊
</el-button>
@@ -140,31 +113,11 @@
<el-button type="primary" plain @click.stop="getEnPrescription(patientInfo.encounterId)">
处方单
</el-button>
<<<<<<< HEAD
<el-button type="primary" plain @click.stop="openDialog = true">
办理住院
</el-button>
<el-button type="primary" plain @click.stop="handleCancelEncounter">
取消接诊
</el-button>
=======
<el-button type="primary" plain @click.stop="onHospitalization"> 办理住院 </el-button>
>>>>>>> v1.3
</el-descriptions-item>
</el-descriptions>
</div>
<div style="padding: 10px">
<<<<<<< HEAD
<el-tabs type="card" style="width: 100%; height: 100%" v-loading="loading" v-model="activeTab"
@tab-change="handleClick(activeTab)">
<el-tab-pane label="病历" name="emr">
<Emr :patientInfo="patientInfo" ref="emrRef" @save="
(value) => {
saveStatus = value;
}
" :visitType="visitType" :firstVisitDate="firstVisitDate" />
</el-tab-pane>
=======
<el-tabs
type="card"
style="width: 100%; height: 100%"
@@ -190,7 +143,6 @@
"
/>
</el-tab-pane> -->
>>>>>>> v1.3
<el-tab-pane label="诊断" name="diagnosis">
<Diagnosis :patientInfo="patientInfo" ref="diagnosisRef" @diagnosisSave="
(value) => {
@@ -199,16 +151,12 @@
" />
</el-tab-pane>
<el-tab-pane label="医嘱" name="prescription">
<<<<<<< HEAD
<prescriptionlist :patientInfo="patientInfo" ref="prescriptionRef" :activeTab="activeTab" />
=======
<prescriptionlist
:patientInfo="patientInfo"
ref="prescriptionRef"
:activeTab="activeTab"
:outpatientEmrSaved="outpatientEmrSaved"
/>
>>>>>>> v1.3
</el-tab-pane>
<el-tab-pane label="中医" name="tcm">
<tcmAdvice :patientInfo="patientInfo" ref="tcmRef" />
@@ -226,14 +174,6 @@
<el-drawer v-model="drawer" title="患者队列" direction="ltr" @open="handleOpen">
<PatientList ref="patientDrawerRef" @toCurrent="handleReceive" />
</el-drawer>
<<<<<<< HEAD
<RefundListDialog :open="openRefundListDialog" :encounterId="currentEncounterId"
@close="openRefundListDialog = false" />
<HospitalizationDialog :open="openDialog" :patientInfo="patientInfo" :encounterId="currentEncounterId"
@close="openDialog = false" />
<PrescriptionInfo :open="openPrescriptionDialog" :precriptionInfo="prescriptionInfo"
@close="openPrescriptionDialog = false" />
=======
<RefundListDialog
:open="openRefundListDialog"
:encounterId="currentEncounterId"
@@ -252,7 +192,6 @@
:precriptionInfo="prescriptionInfo"
@close="openPrescriptionDialog = false"
/>
>>>>>>> v1.3
</div>
</template>
<script setup>
@@ -263,13 +202,8 @@ import {
leaveEncounter,
completeEncounter,
getEnPrescriptionInfo,
<<<<<<< HEAD
cancelEncounter,
getEmrHistoryList
=======
isHospitalization,
getEncounterDiagnosis,
>>>>>>> v1.3
} from './components/api.js';
import prescriptionlist from './components/prescription/prescriptionlist.vue';
import RefundListDialog from './components/prescription/refundListDialog.vue';
@@ -482,67 +416,6 @@ function handleClick(tab) {
// 查看本次就诊处方单从医嘱Tab页获取已开立的处方单信息
function getEnPrescription(encounterId) {
<<<<<<< HEAD
// 检查是否有选中的患者
if (!patientInfo.value || !patientInfo.value.encounterId) {
proxy.$modal.msgWarning('请先选择患者');
return;
}
// 检查是否在医嘱Tab页如果不在则切换到医嘱Tab页
if (activeTab.value !== 'prescription') {
activeTab.value = 'prescription';
// 等待Tab切换完成后再获取数据
nextTick(() => {
// 确保数据已加载
if (prescriptionRef.value) {
// 先刷新数据,确保获取最新的处方单信息
if (prescriptionRef.value.getListInfo) {
prescriptionRef.value.getListInfo(false);
}
// 等待数据加载完成后再获取处方单信息
setTimeout(() => {
if (prescriptionRef.value && prescriptionRef.value.getSignedPrescriptionInfo) {
const signedPrescriptions = prescriptionRef.value.getSignedPrescriptionInfo();
if (signedPrescriptions && signedPrescriptions.length > 0) {
prescriptionInfo.value = signedPrescriptions;
openPrescriptionDialog.value = true;
} else {
proxy.$modal.msgWarning('当前患者没有已签发的处方单');
}
} else {
proxy.$modal.msgWarning('无法获取处方单信息,请稍后重试');
}
}, 300);
} else {
proxy.$modal.msgWarning('无法获取处方单信息,请稍后重试');
}
});
} else {
// 如果已经在医嘱Tab页先刷新数据再获取
if (prescriptionRef.value) {
if (prescriptionRef.value.getListInfo) {
prescriptionRef.value.getListInfo(false);
}
// 等待数据加载完成后再获取处方单信息
setTimeout(() => {
if (prescriptionRef.value && prescriptionRef.value.getSignedPrescriptionInfo) {
const signedPrescriptions = prescriptionRef.value.getSignedPrescriptionInfo();
if (signedPrescriptions && signedPrescriptions.length > 0) {
prescriptionInfo.value = signedPrescriptions;
openPrescriptionDialog.value = true;
} else {
proxy.$modal.msgWarning('当前患者没有已签发的处方单');
}
} else {
proxy.$modal.msgWarning('无法获取处方单信息,请稍后重试');
}
}, 300);
} else {
proxy.$modal.msgWarning('无法获取处方单信息,请稍后重试');
}
}
=======
getEnPrescriptionInfo({ encounterId: encounterId }).then((res) => {
console.log('处方单 res', res);
let dataArr = res.data.records || [];
@@ -556,7 +429,6 @@ function getEnPrescription(encounterId) {
prescriptionInfo.value = res.data.records;
openPrescriptionDialog.value = true;
});
>>>>>>> v1.3
}
function handleRefund(encounterId) {
@@ -575,35 +447,6 @@ function handleCardClick(item, index) {
patient.active = patient.encounterId === item.encounterId;
});
patientInfo.value = item;
<<<<<<< HEAD
// 优先使用数据库中保存的初复诊值
if (item.visitType) {
visitType.value = item.visitType;
// 已完诊的记录禁用修改
visitTypeDisabled.value = item.statusEnum !== 2;
// 如果有初诊日期也从数据库获取
// if (item.firstVisitDate) {
// firstVisitDate.value = item.firstVisitDate;
// }
} else {
// 对于没有初复诊记录的患者,才使用原有的判断逻辑
checkPatientHistory(item);
}
activeTab.value = 'emr';
nextTick(() => {
// 确保所有组件引用都已初始化
if (prescriptionRef.value) prescriptionRef.value.getListInfo();
if (tcmRef.value) tcmRef.value.getListInfo();
if (diagnosisRef.value) diagnosisRef.value.getList();
if (eprescriptionRef.value) eprescriptionRef.value.getList();
if (emrRef.value) {
emrRef.value.getDetail(item.encounterId);
} else {
console.error('emr组件未正确初始化');
proxy.$modal.msgError('病历组件加载失败,请刷新页面重试');
}
=======
// 将患者信息保存到store中供hospitalizationEmr组件使用
updatePatientInfo(item);
activeTab.value = 'hospitalizationEmr';
@@ -613,7 +456,6 @@ function handleCardClick(item, index) {
diagnosisRef.value.getList();
eprescriptionRef.value.getList();
// emrRef.value.getDetail(item.encounterId);
>>>>>>> v1.3
setTimeout(() => {
loading.value = false;
}, 200);
@@ -665,32 +507,6 @@ function handleEmrSaved(isSaved) {
function openDrawer() {
drawer.value = true;
}
<<<<<<< HEAD
function handleCancelEncounter() {
proxy.$modal.confirm('您确定要取消病人本次的就诊记录吗?', '提示信息', {
confirmButtonText: '是(Y)',
cancelButtonText: '否(N)',
type: 'warning'
}).then(() => {
//调用取消接诊API,添加skipGlobalError配置跳过全局错误提示
cancelEncounter(patientInfo.value.encounterId, { skipErrorMsg: true }).then((res) => {
if (res.code == 200) {
proxy.$modal.msgSuccess('取消接诊成功');
patientInfo.value = {};
getPatientList();
}
}).catch((error) => {
proxy.$modal.confirm('该病人本次就诊已经有业务产生,不能取消接诊!', '提示信息', {
confirmButtonText: '是(Y)',
type: 'warning'
});
});
}).catch(() => {
// 用户取消操作
});
}
=======
// 判断是否已经入院登记
const onHospitalization = async () => {
const diagnosisRes = await getEncounterDiagnosis(patientInfo.value.encounterId);
@@ -720,7 +536,6 @@ const onHospitalization = async () => {
});
}
};
>>>>>>> v1.3
</script>
<style lang="scss" scoped>

View File

@@ -15,11 +15,7 @@
"top": 16.5,
"height": 22.5,
"width": 120,
<<<<<<< HEAD
"title": "长春大学医院",
=======
"title": "长春市朝阳区中医院医院",
>>>>>>> v1.3
"coordinateSync": false,
"widthHeightSync": false,
"fontFamily": "Microsoft YaHei",

View File

@@ -1,25 +1,14 @@
import request from '@/utils/request';
// 获取病区下拉选
<<<<<<< HEAD
export function getPractitionerWard (queryParams) {
return request ({
=======
export function getPractitionerWard(queryParams) {
return request({
>>>>>>> v1.3
url: '/app-common/practitioner-ward',
method: 'get',
params: queryParams,
});
}
<<<<<<< HEAD
// 住院汇总发药单左侧
export function getFromSummaryList (queryParams) {
return request ({
url: 'pharmacy-manage/summary-dispense-medicine/from_summary-list',
=======
// 住院汇总发药单左侧,汇总单列表
export function getFromSummaryList(queryParams) {
return request({
@@ -42,20 +31,14 @@ export function getFromSummaryInit(queryParams) {
export function getFromSummaryDetails(queryParams) {
return request({
url: 'nurse-station/medicine-summary/summary-form-detail',
>>>>>>> v1.3
method: 'get',
params: queryParams,
});
}
// 住院汇总发药单右侧
<<<<<<< HEAD
export function getFromDetailList (queryParams) {
return request ({
=======
export function getFromDetailList(queryParams) {
return request({
>>>>>>> v1.3
url: 'pharmacy-manage/summary-dispense-medicine/from-list',
method: 'get',
params: queryParams,
@@ -63,26 +46,16 @@ export function getFromDetailList(queryParams) {
}
// 明细左侧
<<<<<<< HEAD
export function getEncounterList (queryParams) {
return request ({
=======
export function getEncounterList(queryParams) {
return request({
>>>>>>> v1.3
url: '/pharmacy-manage/summary-dispense-medicine/encounter-list',
method: 'get',
params: queryParams,
});
}
//明细 右侧
<<<<<<< HEAD
export function getMedicationSummaryDetail (queryParams) {
return request ({
=======
export function getMedicationSummaryDetail(queryParams) {
return request({
>>>>>>> v1.3
url: '/pharmacy-manage/summary-dispense-medicine/medication_summary-list',
method: 'get',
params: queryParams,
@@ -93,13 +66,8 @@ export function getMedicationSummaryDetail(queryParams) {
/**
* 获取住院患者列表
*/
<<<<<<< HEAD
export function getPatientList (queryParams) {
return request ({
=======
export function getPatientList(queryParams) {
return request({
>>>>>>> v1.3
url: '/nurse-station/advice-process/inpatient',
method: 'get',
params: queryParams,
@@ -109,13 +77,8 @@ export function getPatientList(queryParams) {
/**
* 获取当前登录人管理病区
*/
<<<<<<< HEAD
export function getWardList (queryParams) {
return request ({
=======
export function getWardList(queryParams) {
return request({
>>>>>>> v1.3
url: '/app-common/practitioner-ward',
method: 'get',
params: queryParams,
@@ -125,13 +88,8 @@ export function getWardList(queryParams) {
/**
* 获取当前选中患者全部医嘱
*/
<<<<<<< HEAD
export function getPrescriptionList (queryParams) {
return request ({
=======
export function getPrescriptionList(queryParams) {
return request({
>>>>>>> v1.3
url: '/nurse-station/advice-process/inpatient-advice',
method: 'get',
params: queryParams,
@@ -141,13 +99,8 @@ export function getPrescriptionList(queryParams) {
/**
* 执行医嘱
*/
<<<<<<< HEAD
export function adviceExecute (data) {
return request ({
=======
export function adviceExecute(data) {
return request({
>>>>>>> v1.3
url: '/nurse-station/advice-process/advice-execute',
method: 'post',
data: data,
@@ -157,13 +110,8 @@ export function adviceExecute(data) {
/**
* 取消执行医嘱
*/
<<<<<<< HEAD
export function adviceCancel (data) {
return request ({
=======
export function adviceCancel(data) {
return request({
>>>>>>> v1.3
url: '/nurse-station/advice-process/advice-cancel',
method: 'post',
data: data,
@@ -172,17 +120,10 @@ export function adviceCancel(data) {
/**
* 明细发药
<<<<<<< HEAD
*
*/
export function totalSendDrug (data) {
return request ({
=======
*
*/
export function totalSendDrug(data) {
return request({
>>>>>>> v1.3
url: '/pharmacy-manage/summary-dispense-medicine/summary-dispense-medicine',
method: 'put',
data: data,
@@ -191,20 +132,13 @@ export function totalSendDrug(data) {
/**
* 明细退药
*/
<<<<<<< HEAD
export function totalReturnDrug (data) {
return request ({
=======
export function totalReturnDrug(data) {
return request({
>>>>>>> v1.3
url: '/pharmacy-manage/summary-dispense-medicine/medicine-return',
method: 'put',
data: data,
});
}
<<<<<<< HEAD
=======
// -----------------------------------门诊发药接口------------------------------------------------------------
export function listPatient(query) {
@@ -363,4 +297,3 @@ export function init() {
// method: 'get',
// })
// }
>>>>>>> v1.3

View File

@@ -1,186 +1,4 @@
<template>
<<<<<<< HEAD
<div class="app-container">
<el-row :gutter="20" style="margin-bottom: 20px">
<el-col :span="4" :xs="24">
<el-button
:type="selectType === 'total' ? 'primary' : 'default'"
@click="handleSelectType('total')"
>汇总</el-button
>
<el-button
:type="selectType === 'drug' ? 'primary' : 'default'"
@click="handleSelectType('drug')"
>发药</el-button
>
</el-col>
<!-- <el-col :span="18" :xs="24">
<el-form ref="queryParams" label-width="100px" :model="queryParams" :inline="true">
<el-form-item label="窗口" prop="windowDataText" label-width="120px">
<el-select
v-model="queryParams.windowDataText"
placeholder="请选择"
clearable
filterable
>
<el-option
v-for="item in windowData"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="摆药单" prop="medicationListText" label-width="120px">
<el-select
v-model="queryParams.medicationListText"
placeholder="请选择"
clearable
filterable
>
<el-option
v-for="item in medicationList"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="范围" prop="time" label-width="100px">
<el-radio-group v-model="queryParams.timeRange">
<el-radio v-for="(item, index) in timeRangeList" :key="index" :value="item.value">
{{ item.label }}
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="时间" prop="time" label-width="100px">
<el-date-picker
v-model="dateRange"
type="datetimerange"
range-separator="-"
start-placeholder="开始时间"
end-placeholder="结束时间"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
/>
</el-form-item>
</el-form>
</el-col> -->
</el-row>
<el-row :gutter="20">
<el-col :span="6" class="left-container">
<el-row>
<el-col :span="24">
<el-form
:model="queryParamsPatient"
ref="queryRef"
v-show="showSearch"
label-width="120"
inline="true"
>
<el-form-item label="患者信息" prop="searchKey" label-width="120">
<el-input
v-model="queryParamsPatient.searchKey"
placeholder="请输入姓名/证件号"
clearable
style="width: 240px"
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item
label="发药状态"
prop="statusEnum"
v-if="selectType !== 'drug'"
label-width="120"
>
<el-select
v-model="queryParamsPatient.statusEnum"
placeholder="请选择"
clearable
filterable
style="width: 240px"
@change="handleQuery"
>
<el-option
v-for="item in dispenseStatusOptions"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="就诊日期" prop="startTime">
<el-date-picker
v-model="dateRange"
type="daterange"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="YYYY-MM-DD"
style="width: 240px"
@keyup.enter="handleQuery"
@change="handleQuery"
/>
</el-form-item>
</el-form>
</el-col>
</el-row>
<el-row :gutter="20" style="border-radius: 4px">
<el-col :span="24">
<el-table
:data="patientList"
border
highlight-current-row
style="height: cal(100%-200px); width: 100%"
@row-click="handleCurrentChange"
>
<!-- 汇总状态下显示的字段 -->
<template v-if="selectType === 'total'">
<el-table-column prop="applicantName" label="申请人" align="center" />
<el-table-column prop="sourceLocationName" label="发药药房" align="center" />
<el-table-column prop="statusEnum_enumText" label="状态" align="center" />
<el-table-column prop="applyTime" label="申请日期" align="center">
<template #default="scope">
{{ scope.row.applyTime ? parseTime(scope.row.applyTime, '{y}-{m}-{d}') : '-' }}
</template>
</el-table-column>
</template>
<!-- 明细状态下显示的字段 -->
<template v-else>
<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-column prop="startTime" label="就诊日期" align="center">
<template #default="scope">
{{ scope.row.startTime ? parseTime(scope.row.startTime, '{y}-{m}-{d}') : '-' }}
</template>
</el-table-column>
</template>
</el-table>
</el-col>
<el-col :span="24" style="padding: 10px 12px 12px 12px">
<pagination
v-show="total > 0"
:total="total"
v-model:page="queryParams.pageNo"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</el-col>
</el-row>
</el-col>
<el-col :span="18" :xs="24">
<!-- 根据当前选中的tab显示不同的表格组件 -->
<MedicationTable v-if="selectType === 'total'" :tableData="tableData" :busNo="busNo" />
<DetailMedicationTable
v-else-if="selectType === 'drug'"
:tableData="detailTableData"
:encounterId="encounterId"
@call-medication-summary-detail="callMedicationSummaryDetail"
/>
</el-col>
</el-row>
=======
<div class="app-container" style="padding-top: 0px">
<el-tabs v-model="activeName" @tab-click="handleClick" class="centered-tabs tabs-font">
<el-tab-pane label="发药汇总单" name="summary">
@@ -193,7 +11,6 @@
<ReturnDrug />
</el-tab-pane>
</el-tabs>
>>>>>>> v1.3
</div>
</template>
@@ -201,12 +18,9 @@
import { ref, reactive, onMounted } from 'vue';
import { ElMessage } from 'element-plus';
import MedicationTable from './components/MedicationTable.vue';
<<<<<<< HEAD
=======
import MedicationSummary from './components/MedicationSummary.vue';
import MedicationDetails from './components/MedicationDetails.vue';
import ReturnDrug from './components/ReturnDrug.vue';
>>>>>>> v1.3
import DetailMedicationTable from './components/DetailMedicationTable.vue';
import { getCurrentInstance } from 'vue';
import {
@@ -216,11 +30,7 @@ import {
getFromDetailList,
} from './components/api';
<<<<<<< HEAD
// 响应式数据
=======
const activeName = ref('summary');
>>>>>>> v1.3
const loading = ref(false);
const patientList = ref([]);
const total = ref(0);
@@ -478,8 +288,6 @@ onMounted(() => {
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
padding: 20px;
}
<<<<<<< HEAD
=======
.centered-tabs :deep(.el-tabs__nav-wrap) {
display: flex;
@@ -495,5 +303,4 @@ onMounted(() => {
font-size: 16px !important;
padding: 0 60px !important;
}
>>>>>>> v1.3
</style>

View File

@@ -542,210 +542,6 @@ const sexOptions = gend;
// 入院途径
const admissionOptions = adm_way;
<<<<<<< HEAD
// 表单数据
const formData = reactive({
//组织机构代码
medins_orgcode: '',
//医疗付费方式
//健康卡号
//姓名--患者姓名
patient_name: '',
//性别--患者性别
gend: '',
//出生日期
brdy: '',
//年龄
age: '',
//国籍
ntly: '',
//籍贯
napl: '',
//民族
naty: '',
//身份证号
certNo: '',
//户口地址
resd_addr:'',
//工作单位及地址
empr_addr: '',
//联系人姓名
coner_name: '',
//关系
patn_rlts: '',
//地址
addr: '',
//电话
tel: '',
//第几次住院
patn_ipt_cnt: '',
//住院号 mdtrtsn
ipt_no: '',
//病案号
medcasno: '',
//入院途径
adm_way: '',
//入院时间
adm_time: '',
//入院科室 adm_dept_codg
adm_dept_name: '',
//病房 入院病房
adm_ward: '',
//实际住院天数
act_ipt_days: '',
//主要诊断----不确定
diag_code: '',
//其他诊断
//是否输血
//血型
//Rh
//药物过敏史
//科主任 科主任姓名--deptort_name:
deptort: '',
//主任(副主任)医师
chfdr_name: '',
//主治医师 主诊医师姓名--chfpdr_name
atddr_no: '',
//住院医师 住院医师姓名--ipdr_name
ipdr_code: '',
//责任护士 责任护士姓名--resp_nurs_name
resp_nurs_code: '',
//住院总医师
//实习医师
intn_dr_name: '',
//病案质量 病案质量名称--medcas_qlt_name
medcas_qlt_code: '',
//编码员
codr_name: '',
//质控日期
qltctrl_date: '',
hospital: {
orgCode: '41275054-7',
paymentMethod: '城乡居民基本医疗保险'
},
patient: {
healthCardNo: '',
name: '',
gender: '',
birthDate: '',
age: '',
nationality: '中国',
nativePlace: '',
ethnicity: '汉族',
idCardNo: '',
householdAddress: '',
workUnit: '',
contactName: '',
contactRelation: '',
contactAddress: '',
contactPhone: ''
},
admission: {
times: 1,
hospitalNo: '',
recordNo: '',
channel: '',
admitTime: '',
department: '',
ward: '',
confirmDate: '',
dischargeTime: '',
dischargeDepartment: '',
dischargeWard: '',
hospitalDays: ''
},
diagnosis: {
mainDiagnosis: '',
otherDiagnosis: ''
},
medicalInfo: {
bloodTransfusion: '2',
bloodType: '',
rhType: '',
drugAllergy: '1'
},
doctorInfo: {
departmentDirector: '',
chiefPhysician: '',
attendingPhysician: '',
residentPhysician: '',
chargeNurse: '',
chiefResident: '',
intern: '',
recordQuality: '1',
coder: '',
qualityControlDate: ''
}
=======
// 是否输血
const bloodOption = sys_yes_no;
// 血型
@@ -806,7 +602,6 @@ const rules = ref({
name: [{ required: true, message: '请选择诊断', trigger: 'change' }],
medTypeCode: [{ required: true, message: '请选择诊断类型', trigger: 'change' }],
diagSrtNo: [{ required: true, message: '请输入诊断序号', trigger: 'change' }],
>>>>>>> v1.3
});
</script>

View File

@@ -1,23 +1,11 @@
<template>
<div style="width: 100%" class="medicalSec">
<<<<<<< HEAD
<div style="margin-bottom: 5px;margin-top: 20px;">
<el-button type="primary" @click="addItem" :disabled="false">
新增
</el-button>
=======
<div style="margin-bottom: 5px; margin-top: 20px">
<el-button type="primary" @click="addItem" :disabled="false"> 新增 </el-button>
>>>>>>> v1.3
<el-button type="danger" plain @click="handleDelete" :disabled="false"> 删除 </el-button>
</div>
<div class="tableBox">
<div class="tableBoxInner">
<<<<<<< HEAD
<div :class="{'borderBottom':!tableData_top.length}" class="tableBoxItemHeader">
<div class="item itemIndex">
<div :class="{'itemCheckBox':!isChooseAll,'itemCheckBoxAct':isChooseAll}" @click="chooseAll">
=======
<div
:class="{ borderBottom: !formData.medicalSecond.surgery_tableData.length }"
class="tableBoxItemHeader"
@@ -27,7 +15,6 @@
:class="{ itemCheckBox: !isChooseAll, itemCheckBoxAct: isChooseAll }"
@click="chooseAll"
>
>>>>>>> v1.3
<span v-show="isChooseAll"></span>
</div>
</div>
@@ -35,13 +22,6 @@
<div class="item itemSurgeryLevel">手术级别</div>
<div class="item itemSurgeryName">手术及操作名称</div>
<div class="itemSpec">
<<<<<<< HEAD
<div class="spec" style="width: 100%;border-bottom: 1px solid #ebeef5;">手术及操作医师</div>
<div class="spec">
<div class="specItem">术者</div>
<div class="specItem" style="border-left: 1px solid #ebeef5;">Ⅰ助</div>
<div class="specItem" style="border-left: 1px solid #ebeef5;">Ⅱ助</div>
=======
<div class="spec" style="width: 100%; border-bottom: 1px solid #ebeef5">
手术及操作医师
</div>
@@ -49,7 +29,6 @@
<div class="specItem">术者</div>
<div class="specItem" style="border-left: 1px solid #ebeef5">Ⅰ助</div>
<div class="specItem" style="border-left: 1px solid #ebeef5">Ⅱ助</div>
>>>>>>> v1.3
</div>
</div>
<div class="item itemCutLevel">切口愈合等级</div>
@@ -58,14 +37,6 @@
<div class="item itemTime borderRight">手术时长(H)</div>
</div>
<div
<<<<<<< HEAD
class="tableBoxItem"
:class="{'borderBottom':index+1===tableData_top.length}"
v-for="(item,index) in tableData_top"
:key="index">
<div class="item itemIndex">
<div :class="{'itemCheckBox':!item['isChoose'],'itemCheckBoxAct':item['isChoose']}" @click="checkItem(item)">
=======
class="tableBoxItem"
:class="{ borderBottom: index + 1 === formData.medicalSecond.surgery_tableData.length }"
v-for="(item, index) in formData.medicalSecond.surgery_tableData"
@@ -76,28 +47,11 @@
:class="{ itemCheckBox: !item['isChoose'], itemCheckBoxAct: item['isChoose'] }"
@click="checkItem(item, false)"
>
>>>>>>> v1.3
<span v-show="item['isChoose']"></span>
</div>
</div>
<div class="item itemDate">
<el-date-picker
<<<<<<< HEAD
v-model="item.ctrlDate"
type="date"
value-format="YYYY-MM-DD"
placeholder="手术操作日期"
:default-time="item.ctrlDate"
/>
</div>
<div class="item itemSurgeryLevel">
<el-select v-model="item.surgeryLevel" placeholder="请选择手术级别">
<el-option
v-for="item in item['surgeryLevelArr']"
:key="item.value"
:label="item.title"
:value="item.value"
=======
v-model="item.oprn_oprt_date"
type="date"
value-format="YYYY-MM-DD"
@@ -111,25 +65,10 @@
:key="item.value"
:label="item.label"
:value="item.value"
>>>>>>> v1.3
></el-option>
</el-select>
</div>
<div class="item itemSurgeryName">
<<<<<<< HEAD
<el-input v-model="item.surgeryName"></el-input>
</div>
<div class="itemSpec">
<div class="spec_">
<div class="specItem" style="padding: 10px;">
<el-input v-model="item.surgeryMasterName"></el-input>
</div>
<div class="specItem" style="padding: 10px;border-left: 1px solid #ebeef5;">
<el-input v-model="item.surgeryMasterName_1"></el-input>
</div>
<div class="specItem" style="padding: 10px;border-left: 1px solid #ebeef5;">
<el-input v-model="item.surgeryMasterName_2"></el-input>
=======
<el-input v-model="item.oprn_oprt_name"></el-input>
</div>
<div class="itemSpec">
@@ -142,73 +81,41 @@
</div>
<div class="specItem" style="padding: 10px; border-left: 1px solid #ebeef5">
<el-input v-model="item.asit_name2"></el-input>
>>>>>>> v1.3
</div>
</div>
</div>
<div class="item itemCutLevel">
<<<<<<< HEAD
<el-select v-model="item.cutLevel">
<el-option
v-for="item in item['cutLevelArr']"
:key="item.value"
:label="item.title"
:value="item.value"
=======
<el-select v-model="item.sinc_heal_lv_code">
<el-option
v-for="item in cutLevelOptions"
:key="item.value"
:label="item.label"
:value="item.value"
>>>>>>> v1.3
></el-option>
</el-select>
</div>
<div class="item itemCutLevel">
<<<<<<< HEAD
<el-select v-model="item.anesthesiaType" placeholder="请选择手术级别">
<el-option
v-for="item in operationLevelList"
:key="item.id"
:label="item.name"
:value="item.id"
=======
<el-select v-model="item.anst_mtd_code" placeholder="请选择麻醉方式">
<el-option
v-for="item in anesthesiaTypeOptions"
:key="item.value"
:label="item.label"
:value="item.value"
>>>>>>> v1.3
></el-option>
</el-select>
</div>
<div class="item itemCutLevel">
<<<<<<< HEAD
<el-select v-model="item.anesthesiaLevel" placeholder="请选择手术级别">
<el-option
v-for="item in item.anesthesiaLevelArr"
:key="item.id"
:label="item.name"
:value="item.id"
=======
<el-select v-model="item.anst_lv_code" placeholder="请选择麻醉分级">
<el-option
v-for="item in anesthesiaLevelOptions"
:key="item.value"
:label="item.label"
:value="item.value"
>>>>>>> v1.3
></el-option>
</el-select>
</div>
<div class="item itemTime borderRight">
<<<<<<< HEAD
<el-input v-model="item.surgeryTime"></el-input>
=======
<el-input v-model="item.oprn_con_time"></el-input>
>>>>>>> v1.3
</div>
</div>
</div>
@@ -216,16 +123,6 @@
<div class="form-row">
<div class="form-item">
<label>手术方式:</label>
<<<<<<< HEAD
<el-select v-model="formData['surgeryType']">
<el-option v-for="(item,index) in formData['surgeryTypeArr']" :key="index" :value="item['value']" :label="item['title']"></el-option>
</el-select>
</div>
<div class="form-item">
<label>离院方式:</label>
<el-select v-model="formData['leaveType']">
<el-option v-for="(item,index) in formData['leaveTypeArr']" :key="index" :value="item['value']" :label="item['title']"></el-option>
=======
<el-select v-model="formData.medicalSecond.surgeryType">
<el-option
v-for="item in surgeryTypeOptions"
@@ -244,17 +141,12 @@
:value="item.value"
:label="item.label"
></el-option>
>>>>>>> v1.3
</el-select>
</div>
</div>
<div class="form-row">
<div class="form-item">
<label>是否有出院31天内再住院计划:</label>
<<<<<<< HEAD
<el-select v-model="formData['isPlan']">
<el-option v-for="(item,index) in formData['isPlanArr']" :key="index" :value="item['value']" :label="item['title']"></el-option>
=======
<el-select v-model="formData.medicalSecond.dscg_31days_rinp_flag">
<el-option
v-for="item in isPlanOptions"
@@ -262,46 +154,29 @@
:value="item.value"
:label="item.label"
></el-option>
>>>>>>> v1.3
</el-select>
</div>
<div class="form-item">
<label>目的:</label>
<<<<<<< HEAD
<el-input v-model="formData['purpose']"></el-input>
=======
<el-input
v-model="formData.medicalSecond.dscg_31days_rinp_pup"
placeholder="请填写目的"
></el-input>
>>>>>>> v1.3
</div>
</div>
<div class="form-row">
<div class="form-item">
<label>颅脑损伤患者昏迷时间-入院前:</label>
<<<<<<< HEAD
<el-input type="date" v-model="formData['comaDurationTime_before']" />
</div>
<div class="form-item">
<label>入院后:</label>
<el-input type="date" v-model="formData['comaDurationTime_after']" />
=======
<el-input type="date" v-model="formData.medicalSecond.brn_damg_bfadm_coma_dura" />
</div>
<div class="form-item">
<label>入院后:</label>
<el-input type="date" v-model="formData.medicalSecond.brn_damg_afadm_coma_dura" />
>>>>>>> v1.3
</div>
</div>
<div class="form-row">
<div class="form-item">
<label>肿瘤分期:</label>
<<<<<<< HEAD
<el-select v-model="formData['tumorStaging']">
<el-option v-for="(item,index) in formData['tumorStagingArr']" :key="index" :value="item['value']" :label="item['title']"></el-option>
=======
<el-select v-model="formData.medicalSecond.tumorStaging">
<el-option
v-for="item in tumorStagingOptions"
@@ -309,22 +184,10 @@
:value="item.value"
:label="item.label"
></el-option>
>>>>>>> v1.3
</el-select>
</div>
<div class="form-item" style="flex: 0">
<label>T:</label>
<<<<<<< HEAD
<label class="form-item-specLabel"><div class="specLabelInner" style="width: 80px;margin: 0 8px 0 0;"><el-input v-model="formData['tumor_T']"></el-input></div> </label>
</div>
<div class="form-item" style="flex: 0">
<label>N:</label>
<label class="form-item-specLabel"><div class="specLabelInner" style="width: 80px;margin: 0 8px 0 0;"><el-input v-model="formData['tumor_N']"></el-input></div> </label>
</div>
<div class="form-item" style="flex: 0">
<label>M:</label>
<label class="form-item-specLabel"><div class="specLabelInner" style="width: 80px;margin: 0 8px 0 0;"><el-input v-model="formData['tumor_M']"></el-input></div> </label>
=======
<label class="form-item-specLabel"
><div class="specLabelInner" style="width: 80px; margin: 0 8px 0 0">
<el-input v-model="formData.medicalSecond.tumor_T"></el-input>
@@ -346,17 +209,12 @@
<el-input v-model="formData.medicalSecond.tumor_M"></el-input>
</div>
</label>
>>>>>>> v1.3
</div>
</div>
<div class="form-row">
<div class="form-item">
<label>判断依据:</label>
<<<<<<< HEAD
<el-select v-model="formData['judgmentBase']">
<el-option v-for="(item,index) in formData['judgmentBaseArr']" :key="index" :value="item['value']" :label="item['title']"></el-option>
=======
<el-select v-model="formData.medicalSecond.judgmentBase">
<el-option
v-for="item in judgmentBaseOptions"
@@ -364,14 +222,10 @@
:value="item.value"
:label="item.label"
></el-option>
>>>>>>> v1.3
</el-select>
</div>
<div class="form-item">
<label>分化程度:</label>
<<<<<<< HEAD
<el-input type="date" v-model="formData['degreeDifferentiation']" />
=======
<!-- <el-input type="date" v-model="formData.medicalSecond.bkup_deg" /> -->
<el-select v-model="formData.medicalSecond.bkup_deg_code" placeholder="请选择分化程度">
<el-option
@@ -381,23 +235,12 @@
:value="item.value"
></el-option>
</el-select>
>>>>>>> v1.3
</div>
</div>
<div class="form-row">
<div class="form-item">
<label>临床路径-进入路径</label>
<<<<<<< HEAD
<el-select v-model="formData['enterPath']">
<el-option v-for="(item,index) in formData['enterPathArr']" :key="index" :value="item['value']" :label="item['title']"></el-option>
</el-select>
</div>
<div class="form-item">
<label>变异:</label>
<el-select v-model="formData['mutation']">
<el-option v-for="(item,index) in formData['mutationArr']" :key="index" :value="item['value']" :label="item['title']"></el-option>
=======
<!-- <el-select v-model="formData.medicalSecond.enterPath">
<el-option
v-for="item in enterPathOptions"
@@ -417,21 +260,12 @@
:value="item.value"
:label="item.label"
></el-option>
>>>>>>> v1.3
</el-select>
</div>
</div>
<div class="form-row">
<div class="form-item">
<label>退出路径</label>
<<<<<<< HEAD
<el-select v-model="formData['outPath']">
<el-option v-for="(item,index) in formData['outPathArr']" :key="index" :value="item['value']" :label="item['title']"></el-option>
</el-select>
</div>
<div class="form-item">
</div>
=======
<!-- <el-select v-model="formData.medicalSecond.outPath">
<el-option
v-for="item in outPathOptions"
@@ -443,7 +277,6 @@
<el-input v-model="formData.medicalSecond.outPath" placeholder="请输入"></el-input>
</div>
<div class="form-item"></div>
>>>>>>> v1.3
</div>
<div class="form-row" styLe="margin: 0;">
<div class="form-item" styLe="margin: 0;">
@@ -452,19 +285,6 @@
</div>
<div class="form-row">
<div class="form-item" style="flex: 0">
<<<<<<< HEAD
<label class="form-item-specLabel">特级护理 <div class="specLabelInner"><el-input v-model="formData['nursingLevel_spec']"></el-input></div> 小时</label>
</div>
<div class="form-item" style="flex: 0">
<label class="form-item-specLabel">1级护理 <div class="specLabelInner"><el-input v-model="formData['nursingLevel_1']"></el-input></div> 小时</label>
</div>
<div class="form-item" style="flex: 0">
<label class="form-item-specLabel">2级护理 <div class="specLabelInner"><el-input v-model="formData['nursingLevel_2']"></el-input></div> 小时</label>
</div>
<div class="form-item" style="flex: 0">
<label class="form-item-specLabel">3级护理 <div class="specLabelInner"><el-input v-model="formData['nursingLevel_3']"></el-input></div> 小时</label>
=======
<label class="form-item-specLabel"
>特级护理
<div class="specLabelInner">
@@ -499,16 +319,11 @@
</div>
小时</label
>
>>>>>>> v1.3
</div>
</div>
<div class="form-row">
<div class="form-item">
<label>呼吸机使用:</label>
<<<<<<< HEAD
<el-select v-model="formData['ventilatorUse']">
<el-option v-for="(item,index) in formData['ventilatorUseArr']" :key="index" :value="item['value']" :label="item['title']"></el-option>
=======
<el-select v-model="formData.medicalSecond.use_vent_flag">
<el-option
v-for="item in ventilatorUseOptions"
@@ -516,210 +331,20 @@
:value="item.value"
:label="item.label"
></el-option>
>>>>>>> v1.3
</el-select>
</div>
<div class="form-item">
<label>有创呼吸机使用时间小时:</label>
<<<<<<< HEAD
<el-input v-model="formData['ventilatorUseTime']"></el-input>
=======
<el-input
v-model="formData.medicalSecond.vent_used_dura"
placeholder="请填写有创呼吸机使用时间(小时)"
></el-input>
>>>>>>> v1.3
</div>
</div>
</div>
</template>
<script setup>
<<<<<<< HEAD
import {nextTick, reactive, ref, watch} from 'vue';
import { ElMessage } from 'element-plus'
let chooseData = reactive([])//表格中选中的数据 TODO
const tableData_top = reactive([])
const tableData_sub = ref([
{
},
{
}
])
let isChooseAll = ref(false);
const formData = ref({
surgeryDate: '2025-10-10',
surgeryType: '',
surgeryTypeArr: [
{
title: '择期手术',
value: 1,
},
{
title: '限期手术',
value: 2,
},
{
title: '急诊手术',
value: 3,
}
],
leaveType: '',
leaveTypeArr: [
{
title: '医嘱离院',
value: 1,
},
{
title: '医嘱转院',
value: 2,
},
{
title: '医嘱转社区卫生服务机构',
value: 3,
},
{
title: '非医嘱离院',
value: 4,
},
{
title: '死亡',
value: 5,
},
{
title: '其他',
value: 6,
}
],
isPlan: '',
isPlanArr: [
{
title: '是',
value: 1,
},
{
title: '否',
value: 1,
}
],
purpose: '',
comaDurationTime_before: '',//昏迷时间---入院前
comaDurationTime_after: '',//昏迷时间---入院后
tumorStaging: '',
tumorStagingArr: [
{
title: 'C',
value: 1,
},
{
title: 'P',
value: 2,
}
],
judgmentBase: '',
judgmentBaseArr: [
{
title: '0期',
value: 0,
},
{
title: '1期',
value: 1,
},
{
title: '2期',
value: 2,
},
{
title: '3期',
value: 3,
},
{
title: '4期',
value: 4,
},
{
title: '不详',
value: 5,
}
],
tumor_T: '',
tumor_N: '',
tumor_M: '',
degreeDifferentiation: '',
enterPath: '',
enterPathArr: [
{
title: '是',
value: 1,
},
{
title: '否',
value: 1,
}
],
outPath: '',
outPathArr: [
{
title: '是',
value: 1,
},
{
title: '否',
value: 1,
}
],
mutation: '',
mutationArr: [
{
title: '有',
value: 1,
},
{
title: '无',
value: 1,
}
],
nursingLevel_spec: '',
nursingLevel_1: '',
nursingLevel_2: '',
nursingLevel_3: '',
ventilatorUse: '',
ventilatorUseArr: [
{
title: '未使用',
value: 1,
},
{
title: '无创',
value: 2,
},
{
title: '有创',
value: 3,
},
{
title: '无创+有创',
value: 4,
}
],
ventilatorUseTime: '',
});
const operationLevelList = [
{ name: '一级', id: 1 },
{ name: '二级', id: 2 },
{ name: '三级', id: 3 },
];
=======
import { reactive, ref, watch } from 'vue';
import { ElMessage } from 'element-plus';
import { cloneDeep, forEach } from 'lodash';
@@ -761,7 +386,6 @@ const {
'oprn_patn_type_code',
'bkup_deg_code'
);
>>>>>>> v1.3
// 手术类型
const surgeryTypeOptions = oprn_patn_type_code;
@@ -801,198 +425,6 @@ watch(
const addItem = () => {
let data = {
//手术操作日期 oprn_oprt_date
<<<<<<< HEAD
oprn_date: '',
//手术级别 手术级别名称--oprn_lv_code
oprn_lv_code: '',
//手术及操作名称 oprn_oprt_code
oprn_oprt_name: '',
//手术及操作医师
//术者
oper_name: '',
//Ⅰ助
asit_1_name: '',
//Ⅱ助
asit_name2: '',
//切口愈合等级 sinc_heal_lv_code
sinc_heal_lv: '',
//麻醉方式
anst_way: '',
//麻醉分级 anst_lv_code
anst_lv_name: '',
//手术时长
//手术方式
//离院方式
dscg_way: '',
//是否有出院31天内再住院计划-----不确定
days_rinp_flag_31: '',
//目的
days_rinp_pup_31: '',
//颅脑损伤患者昏迷时间 入院前
brn_damg_bfadm_coma_dura: '',
//颅脑损伤患者昏迷时间 入院后
brn_damg_afadm_coma_dura: '',
//肿瘤分期
//T
//N
//M
//判断依据
//分化程度 bkup_deg_code
bkup_deg: '',
//临床路径-进入路径
//变异
//退出路径
//护理级别
//特级护理
spga_nurscare_days: '',
//1级护理
lv1_nurscare_days: '',
//2级护理
scd_nurscare_days: '',
//3级护理
lv3_nurscare_days: '',
//呼吸机使用 vent_used_days vent_used_h_cnt vent_used_m_cnt
vent_used_dura: '',
//有创呼吸机使用时间
isChoose: false,
ctrlDate: '2025-10-10',
surgeryLevel: '',
surgeryLevelArr: [
{
title: '1级',
value: 1,
},
{
title: '2级',
value: 2,
},
{
title: '3级',
value: 3,
},
{
title: '4级',
value: 4,
}
],
surgeryName: '',
surgeryMasterName: '',
surgeryMasterName_1: '',
surgeryMasterName_2: '',
cutLevel: '',
cutLevelArr: [
{
title: '1/甲',
value: 1,
},
{
title: '2/乙',
value: 2,
}
],
anesthesiaType: '',
anesthesiaTypeArr: [],
anesthesiaEr: '',
anesthesiaLevel: '',
anesthesiaLevelArr: [
{
title: '1',
value: 1,
},
{
title: '2',
value: 2,
},
],
surgeryTime: ''
}
//push
tableData_top.unshift(
data
)
tableData_top.map((d,i) => {
d.currentIndex = i
})
}
const checkItem = (e) => {
chooseData = []
e['isChoose'] = !e['isChoose']
tableData_top.map((d) => {
if (d['isChoose']) {
chooseData.push(d)
}
})
}
const chooseAll = () => {
isChooseAll.value = !isChooseAll.value
if (tableData_top.length) {
tableData_top.map((d) => {
d['isChoose'] = !isChooseAll.value
checkItem(d)
})
}
}
//删除方法
const handleDelete = () => {
if (!tableData_top.length) { return }
let deleteId = []
chooseData.map((d) => {
deleteId.push(d['currentIndex'])
})
for (let i = tableData_top.length - 1; i >= 0; i--) {
if (deleteId.includes(tableData_top[i].currentIndex)) {
tableData_top.splice(i, 1);
}
}
isChooseAll.value = false
msgSuccess('删除成功')
}
const msgSuccess = (msg) => {
ElMessage({
message: msg,
type: 'success',
})
}
=======
oprn_oprt_date: '',
// 手术级别
oprn_lv_code: '',
@@ -1064,7 +496,6 @@ const handleDelete = () => {
isChooseAll.value = false;
msgSuccess('删除成功');
};
>>>>>>> v1.3
const msgSuccess = (msg) => {
ElMessage({
@@ -1076,22 +507,14 @@ const msgSuccess = (msg) => {
<style lang="scss">
.medicalSec {
<<<<<<< HEAD
.el-date-editor.el-input, .el-date-editor.el-input__wrapper {
=======
.el-date-editor.el-input,
.el-date-editor.el-input__wrapper {
>>>>>>> v1.3
width: 100%;
}
.el-table td.el-table__cell div {
width: 100%;
}
}
<<<<<<< HEAD
=======
>>>>>>> v1.3
</style>
<style lang="scss" scoped>
:deep(.el-table__expand-icon) {

View File

@@ -26,14 +26,6 @@
>
<el-table-column type="index" width="80" align="center" label="序号" />
<el-table-column prop="patientName" align="center" label="申请患者" />
<<<<<<< HEAD
<el-table-column prop="genderEnum_enumText" label="性别" align="center" />
<el-table-column label="年龄" align="center">
<template #default="scope">
{{ scope.row.age ? `${scope.row.age}` : '-' }}
</template>
</el-table-column>
=======
<el-table-column prop="genderEnum_enumText" width="80" label="性别" align="center" />
<el-table-column prop="age" width="80" label="年龄" align="center" />
<el-table-column prop="busNo" align="center" label="患者住院号">
@@ -51,7 +43,6 @@
{{ scope.row.admitSourceCode || '-' }}
</template>
</el-table-column>
>>>>>>> v1.3
<el-table-column prop="sourceName" align="center" label="申请来源">
<template #default="scope">
{{ scope.row.sourceName || '-' }}

View File

@@ -1,192 +1,4 @@
<template>
<<<<<<< HEAD
<div class="dashboard-container">
<!-- 顶部导航栏 -->
<header class="header">
<div class="logo">
<span class="logo-text">医院信息管理系统</span>
</div>
<div class="header-right">
<div class="notification-badge">
<i class="header-icon">🔔</i>
<span class="badge">2</span>
</div>
<i class="header-icon"></i>
<div class="user-info">
<span class="user-avatar">👤</span>
<span>用户</span>
</div>
</div>
</header>
<!-- 主体内容 -->
<div class="main-content">
<!-- 左侧导航栏 -->
<nav class="sidebar">
<div class="menu-item active">
<span class="menu-icon">📊</span>
<span>仪表盘</span>
</div>
<div class="menu-item">
<span class="menu-icon">👥</span>
<span>患者管理</span>
</div>
<div class="menu-item">
<span class="menu-icon">💉</span>
<span>预约管理</span>
</div>
<div class="menu-item">
<span class="menu-icon">🏥</span>
<span>门诊管理</span>
</div>
<div class="menu-item">
<span class="menu-icon"></span>
<span>住院管理</span>
</div>
<div class="menu-item">
<span class="menu-icon">💊</span>
<span>药房管理</span>
</div>
<div class="menu-item">
<span class="menu-icon">📋</span>
<span>报表统计</span>
</div>
<div class="menu-item">
<span class="menu-icon"></span>
<span>系统设置</span>
</div>
</nav>
<!-- 主内容区 -->
<div class="content-wrapper">
<div class="awaitingBtn">
<el-button @click="awaitingMedicineBtn">效期预警 <span>{{ total }}</span></el-button>
</div>
<h1 class="section-title">仪表盘</h1>
<!-- 关键指标卡片 -->
<div class="dashboard-grid">
<div class="card">
<div class="card-title">今日预约量</div>
<div class="card-value">126</div>
<div class="card-stats">
<span class="stats-icon"></span>
<span>12% 较昨日</span>
</div>
</div>
<div class="card">
<div class="card-title">门诊量统计</div>
<div class="card-value">342</div>
<div class="card-stats">
<span class="stats-icon"></span>
<span>8% 较上周</span>
</div>
</div>
<div class="card">
<div class="card-title">住院患者数</div>
<div class="card-value">78</div>
<div class="card-stats down">
<span class="stats-icon"></span>
<span>5% 较上周</span>
</div>
</div>
<div class="card">
<div class="card-title">药品库存预警</div>
<div class="card-value">8</div>
<div class="card-stats">
<span class="stats-icon">!</span>
<span>需要立即处理</span>
</div>
</div>
</div>
<!-- 图表展示区 -->
<div class="chart-container">
<canvas id="statsChart"></canvas>
</div>
<!-- 重要通知和待办事项 -->
<div class="bottom-content">
<div class="notification-container">
<div class="notification-title">重要通知</div>
<ul class="notification-list">
<li class="notification-item">系统将于周六凌晨2:00进行维护升级</li>
<li class="notification-item">新的门诊排班系统已上线请尽快熟悉</li>
<li class="notification-item">三季度医疗质量分析报告已发布</li>
</ul>
</div>
<div class="todo-container">
<div class="todo-title">待办事项</div>
<ul class="todo-list">
<li class="todo-item">
<span>未完成预约</span>
<span class="todo-count">12</span>
</li>
<li class="todo-item">
<span>待处理检查结果</span>
<span class="todo-count">7</span>
</li>
<li class="todo-item">
<span>待开处方</span>
<span class="todo-count">3</span>
</li>
</ul>
<button class="btn btn-primary">查看详情</button>
</div>
</div>
<!-- 患者列表 -->
<h2 class="section-title">最近患者</h2>
<div class="table-container">
<table>
<thead>
<tr>
<th>患者姓名</th>
<th>病历号</th>
<th>年龄</th>
<th>最后就诊时间</th>
<th>状态</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<tr>
<td>张明</td>
<td>HN2023001</td>
<td>45</td>
<td>2023-10-20 09:30</td>
<td><span style="color: #67c23a;">已完成</span></td>
<td>
<button class="btn btn-outline">详情</button>
</td>
</tr>
<tr>
<td>李红</td>
<td>HN2023002</td>
<td>32</td>
<td>2023-10-20 10:15</td>
<td><span style="color: #ff9800;">待检查</span></td>
<td>
<button class="btn btn-outline">详情</button>
</td>
</tr>
<tr>
<td>王建军</td>
<td>HN2023003</td>
<td>68</td>
<td>2023-10-19 14:20</td>
<td><span style="color: #d45d79;">住院中</span></td>
<td>
<button class="btn btn-outline">详情</button>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
=======
<div class="container">
<div class="awaitingBtn">
<el-button @click="awaitingMedicineBtn">
@@ -202,143 +14,10 @@
<!-- <div class="logo">
<img src="/src/assets/images/jlau.jpg" />
</div> -->
>>>>>>> v1.3
</div>
</template>
<script setup name="Index">
<<<<<<< HEAD
import { ref, onMounted, onActivated } from 'vue';
import { useRouter } from 'vue-router';
import Chart from 'chart.js/auto';
import {
getExpirationWarning,
} from "./medicationmanagement/statisticalManagement/statisticalManagent";
const router = useRouter();
const total = ref(0);
function awaitingMedicineBtn() {
router.push({ path: '/medicationmanagement/statisticalManagement/earlyWarning' });
}
function getExpirationWarningCount() {
getExpirationWarning({ pageNo: 1, pageSize: 10 }).then((res) => {
total.value = res.data.total || 0;
}).catch((err) => {
console.error('获取效期预警数量失败:', err);
total.value = 0;
});
}
let chartInstance = null;
onActivated(() => {
// getExpirationWarningCount();
})
onMounted(() => {
// getExpirationWarningCount();
const ctx = document.getElementById('statsChart');
if (!ctx) return;
// 销毁已有实例
if (chartInstance) {
chartInstance.destroy();
}
// 模拟数据近7天门诊量与预约量
const labels = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'];
const outpatientData = [310, 335, 305, 345, 370, 270, 210]; // 门诊量(柱状图)
const appointmentData = [100, 120, 110, 130, 140, 90, 70]; // 预约量(折线图)
chartInstance = new Chart(ctx.getContext('2d'), {
type: 'bar',
data: {
labels: labels,
datasets: [
{
label: '门诊量',
data: outpatientData,
backgroundColor: '#91c8e5',
borderColor: '#66a8cc',
borderWidth: 1,
borderRadius: 4,
borderSkipped: false,
},
{
label: '预约量',
data: appointmentData,
type: 'line',
borderColor: '#f56c6c',
backgroundColor: 'rgba(245, 108, 108, 0.1)',
borderWidth: 2,
pointBackgroundColor: '#f56c6c',
pointBorderColor: '#fff',
pointBorderWidth: 2,
pointRadius: 4,
fill: true,
tension: 0.3,
lineTension: 0.3,
}
]
},
options: {
responsive: true,
maintainAspectRatio: false,
plugins: {
legend: {
position: 'top',
labels: {
font: {
size: 12,
weight: 'bold'
}
}
},
tooltip: {
mode: 'index',
intersect: false,
backgroundColor: 'rgba(0, 0, 0, 0.7)',
titleFont: {
size: 13
},
bodyFont: {
size: 12
}
}
},
scales: {
x: {
grid: {
display: false
},
ticks: {
font: {
size: 11
}
}
},
y: {
beginAtZero: true,
max: 400,
stepSize: 50,
grid: {
color: 'rgba(0, 0, 0, 0.05)'
},
ticks: {
font: {
size: 11
}
}
}
}
}
});
});
=======
import { getproductReturnPage } from './medicationmanagement/statisticalManagement/statisticalManagent';
import { useStore } from '@/store/store';
const store = useStore();
@@ -374,7 +53,6 @@ function getExpirationWarningCount() {
}
getExpirationWarningCount();
>>>>>>> v1.3
</script>
<style scoped lang="scss">
@@ -386,151 +64,15 @@ getExpirationWarningCount();
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
padding: 0;
}
<<<<<<< HEAD
.header {
height: 60px;
background-color: white;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 24px;
position: sticky;
top: 0;
z-index: 1000;
}
.logo {
display: flex;
align-items: center;
}
.logo-text {
font-size: 18px;
font-weight: 600;
color: #166773;
}
.header-right {
display: flex;
align-items: center;
gap: 16px;
}
.notification-badge {
position: relative;
cursor: pointer;
}
.header-icon {
font-size: 20px;
cursor: pointer;
padding: 8px;
border-radius: 4px;
transition: background-color 0.3s;
}
.header-icon:hover {
background-color: #f5f7fa;
}
.badge {
position: absolute;
top: 0;
right: 0;
background-color: #ff4d4f;
color: white;
font-size: 12px;
padding: 2px 6px;
border-radius: 10px;
min-width: 16px;
text-align: center;
}
.user-info {
display: flex;
align-items: center;
gap: 8px;
padding: 6px 12px;
border-radius: 4px;
cursor: pointer;
transition: background-color 0.3s;
}
.user-info:hover {
background-color: #f5f7fa;
}
.user-avatar {
font-size: 20px;
}
.main-content {
display: flex;
flex: 1;
overflow: hidden;
}
.sidebar {
width: 200px;
background-color: white;
box-shadow: 2px 0 4px rgba(0, 0, 0, 0.1);
overflow-y: auto;
}
.menu-item {
display: flex;
align-items: center;
padding: 16px 24px;
cursor: pointer;
transition: all 0.3s;
border-left: 3px solid transparent;
}
.menu-item:hover {
background-color: #f0f9ff;
}
.menu-item.active {
background-color: #e6f7ff;
border-left-color: #1890ff;
color: #1890ff;
font-weight: 500;
}
.menu-icon {
margin-right: 12px;
font-size: 18px;
}
.content-wrapper {
flex: 1;
padding: 20px;
overflow-y: auto;
background-color: #f5f7fa;
}
.awaitingBtn {
margin-bottom: 20px;
.el-button{
=======
.awaitingBtn {
.el-button {
>>>>>>> v1.3
border: 1px #166773 solid;
span {
color: red;
margin-left: 5px;
}
}
<<<<<<< HEAD
.el-button:hover{
=======
.el-button:hover {
>>>>>>> v1.3
border: 1px #166773 solid;
color: #166773;
span {
@@ -538,12 +80,9 @@ getExpirationWarningCount();
margin-left: 5px;
}
}
<<<<<<< HEAD
=======
position: absolute;
top: 20px;
left: 20px;
>>>>>>> v1.3
}
.section-title {

View File

@@ -1,9 +1,4 @@
<<<<<<< HEAD
import request from '@/utils/request'
=======
import request from '@/utils/request';
>>>>>>> v1.3
// 申请单相关接口
/**
@@ -58,19 +53,6 @@ export function getNursingOrdersInfos() {
}
/**
<<<<<<< HEAD
* 查询护理医嘱信息
*/
export function getNursingOrdersInfos() {
return request({
url: '/reg-doctorstation/special-advice/nursing-orders',
method: 'get'
})
}
/**
=======
>>>>>>> v1.3
* 保存护理医嘱信息
* @param {Object} data - 护理医嘱数据
* @param {number} data.encounterId - 就诊id
@@ -87,13 +69,8 @@ export function saveNursingOrders(data) {
return request({
url: '/reg-doctorstation/special-advice/nursing-orders',
method: 'post',
<<<<<<< HEAD
data: data
})
=======
data: data,
});
>>>>>>> v1.3
}
/**
@@ -103,13 +80,8 @@ export function getEncounterNursingOrders(params) {
return request({
url: '/reg-doctorstation/special-advice/encounter-nursing-orders',
method: 'get',
<<<<<<< HEAD
params: params
})
=======
params: params,
});
>>>>>>> v1.3
}
/**

View File

@@ -24,16 +24,12 @@
<el-table-column prop="item" label="项目" width="180" align="center" />
<el-table-column prop="currentStatus" label="当前状态" width="260" align="center">
<template #default="scope">
<<<<<<< HEAD
<el-tag :type="getStatusType(scope.row.currentStatus)" size="small" class="status-tag">
=======
<el-tag
v-if="scope.row.currentStatus"
:type="getStatusType(scope.row.currentStatus)"
size="small"
class="status-tag"
>
>>>>>>> v1.3
{{ scope.row.currentStatus }}
</el-tag>
</template>
@@ -148,13 +144,8 @@
</el-table>
<!-- 操作按钮区域 -->
<div class="nursing-status-actions">
<<<<<<< HEAD
<el-button @click="handleCancel" size="small">取消</el-button>
<el-button type="primary" @click="handleConfirm" size="small">确定</el-button>
=======
<el-button @click="handleCancel" size="medium">取消</el-button>
<el-button type="primary" @click="handleConfirm" size="medium">确定</el-button>
>>>>>>> v1.3
</div>
</template>
</div>
@@ -390,10 +381,6 @@ const fetchNursingStatusData = () => {
loading.value = false;
if (res.code === 200 && res.data) {
<<<<<<< HEAD
// 填充各列表数据
nursingLevelList.value = res.data.nursingList || [];
=======
let nursingList = [];
let nursingOrderNameList = ['I级护理', 'II级护理', 'III级护理', '特级护理'];
nursingOrderNameList.forEach((str) => {
@@ -405,7 +392,6 @@ const fetchNursingStatusData = () => {
});
// 填充各列表数据
nursingLevelList.value = nursingList || [];
>>>>>>> v1.3
conditionList.value = res.data.conditionList || [];
dietList.value = res.data.dietList || [];
positionList.value = res.data.positionList || [];

View File

@@ -28,16 +28,12 @@
<span>{{ node.label }}</span>
<span class="tree-node-actions">
<template v-if="node.level === 1 && data.name != '常用' && data.name != '历史'">
<<<<<<< HEAD
<el-button style="color: #000000" type="text" size="small" @click.stop="addChild(data)">
=======
<el-button
style="color: #000000"
type="text"
size="small"
@click.stop="addChild(data)"
>
>>>>>>> v1.3
<el-icon>
<Plus />
</el-icon>
@@ -46,13 +42,6 @@
<el-popconfirm width="200" :hide-after="10" title="确认删除此常用诊断吗" placement="top-start"
@confirm="deleteChild(data)">
<template #reference>
<<<<<<< HEAD
<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-button
style="color: #000000"
v-if="
@@ -64,7 +53,6 @@
size="small"
@click.stop=""
>
>>>>>>> v1.3
<el-icon>
<Minus />
</el-icon>
@@ -197,11 +185,8 @@ import { deleteTcmDiagnosis } from '../../../../doctorstation/components/api.js'
import diagnosisdialog from '../diagnosis/diagnosisdialog.vue';
import AddDiagnosisDialog from './addDiagnosisDialog.vue';
import diagnosislist from '../diagnosis/diagnosislist.vue';
<<<<<<< HEAD
=======
import { patientInfo } from '../../store/patient.js';
import { ElMessage } from 'element-plus';
>>>>>>> v1.3
// const diagnosisList = ref([]);
const allowAdd = ref(false);
const tree = ref([]);
@@ -230,12 +215,8 @@ const rules = ref({
medTypeCode: [{ required: true, message: '请选择诊断类型', trigger: 'change' }],
diagSrtNo: [{ required: true, message: '请输入诊断序号', trigger: 'change' }],
});
<<<<<<< HEAD
const isSaving = ref(false);
=======
const diagnosisNetDatas = ref([]);
>>>>>>> v1.3
watch(
() => form.value.diagnosisList,
() => {
@@ -266,31 +247,6 @@ function getList() {
getEncounterDiagnosis(props.patientInfo.encounterId).then((res) => {
if (res.code == 200) {
<<<<<<< HEAD
// 为每个诊断项添加默认的诊断医生和时间(如果不存在)
const diagnosisList = res.data.map(item => ({
...item,
diagnosisDoctor: item.diagnosisDoctor || props.patientInfo.practitionerName || props.patientInfo.doctorName || props.patientInfo.physicianName || userStore.name,
diagnosisTime: item.diagnosisTime || new Date().toLocaleString('zh-CN')
}));
// 对获取的数据进行排序
diagnosisList.sort((a, b) => {
const aNo = typeof a.diagSrtNo === 'number' ? a.diagSrtNo : 9999;
const bNo = typeof b.diagSrtNo === 'number' ? b.diagSrtNo : 9999;
return aNo - bNo;
});
form.value.diagnosisList = diagnosisList;
emits('diagnosisSave', false);
}
});
getTcmDiagnosis({ encounterId: props.patientInfo.encounterId }).then((res) => {
if (res.code == 200) {
if (res.data.illness && res.data.illness.length > 0 && res.data.symptom) {
const newList = [];
=======
const datas = (res.data || []).map((item) => {
let obj = {
...item,
@@ -311,7 +267,6 @@ function getList() {
if (res.code == 200) {
if (res.data.illness.length > 0) {
diagnosisNetDatas.value = res.data.illness;
>>>>>>> v1.3
res.data.illness.forEach((item, index) => {
newList.push({
name: item.name + '-' + (res.data.symptom[index]?.name || ''),
@@ -488,27 +443,6 @@ function handleDeleteDiagnosis(row, index) {
//中医诊断用-拼接 例如:疳气-表里俱实证
const nameArr = row.name?.split('-') || [];
if (row.conditionId) {
<<<<<<< HEAD
delEncounterDiagnosis(row.conditionId).then(() => {
// 不要立即调用getList(),而是从当前列表中移除
form.value.diagnosisList.splice(index, 1);
// 重新排序剩余的项目
const sortedList = [...form.value.diagnosisList].sort((a, b) => {
const aNo = typeof a.diagSrtNo === 'number' ? a.diagSrtNo : 9999;
const bNo = typeof b.diagSrtNo === 'number' ? b.diagSrtNo : 9999;
return aNo - bNo;
});
// 重新分配连续的序号
sortedList.forEach((item, idx) => {
item.diagSrtNo = idx + 1;
});
// 更新列表
form.value.diagnosisList = sortedList.map(item => ({ ...item }));
getTree();
});
=======
if (nameArr.length > 1) {
deleteTcmDiagnosis(row.syndromeGroupNo).then(() => {
getList();
@@ -520,7 +454,6 @@ function handleDeleteDiagnosis(row, index) {
getTree();
});
}
>>>>>>> v1.3
} else {
console.log('row============>', JSON.stringify(row));
console.log('item============>', index);
@@ -729,7 +662,3 @@ defineExpose({ getList, getDetail, handleSaveDiagnosis });
align-items: center;
}
</style>
<<<<<<< HEAD
=======
>>>>>>> v1.3

View File

@@ -100,17 +100,6 @@ export function transferOrganization(data) {
return request({
url: '/reg-doctorstation/special-advice/transfer-organization-orders',
method: 'post',
<<<<<<< HEAD
data: data
})
}
=======
data: data,
});
}
>>>>>>> v1.3

View File

@@ -56,10 +56,6 @@
</div>
</template>
<script setup>
<<<<<<< HEAD
import { getCurrentInstance, onBeforeMount, onMounted, reactive, ref, computed } from 'vue';
import BloodTransfusion from './bloodTransfusion';
=======
import {
getCurrentInstance,
onBeforeMount,
@@ -70,7 +66,6 @@ import {
nextTick,
} from 'vue';
import BloodTransfusion from './bloodTransfusion.vue';
>>>>>>> v1.3
import { patientInfo } from '../../../store/patient.js';
import Surgery from './surgery.vue';
import LaboratoryTests from './laboratoryTests.vue';

View File

@@ -9,11 +9,7 @@
>
<div style="padding: 0 80px">
<el-form :model="form" :rules="rules" ref="formRef">
<<<<<<< HEAD
<el-form-item label="出院方式">
=======
<el-form-item label="出院方式" prop="outpatientType">
>>>>>>> v1.3
<el-select v-model="form.outpatientType">
<el-option
v-for="(item, index) in dscg_way"
@@ -23,21 +19,13 @@
/>
</el-select>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="出院时间">
=======
<el-form-item label="出院时间" prop="outpatientTime">
>>>>>>> v1.3
<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>
<<<<<<< HEAD
<el-form-item label="出院描述"
=======
<el-form-item label="出院描述" prop="outpatientDescription"
>>>>>>> v1.3
><el-input v-model="form.outpatientDescription" type="textarea" rows="5" />
</el-form-item>
</el-form>
@@ -52,11 +40,6 @@
</template>
<script setup>
<<<<<<< HEAD
const { proxy } = getCurrentInstance();
const { dscg_way } = proxy.useDict('dscg_way');
const dialogVisible = ref(false);
=======
import { toRaw } from 'vue';
import { leaveHospital } from '../../api';
import { dayjs } from 'element-plus';
@@ -85,14 +68,11 @@ const { dscg_way } = proxy.useDict('dscg_way');
const dialogVisible = ref(false);
const formRef = ref(null);
const emit = defineEmits(['success']);
>>>>>>> v1.3
const form = reactive({
outpatientType: [],
outpatientTime: '',
outpatientDescription: '',
});
<<<<<<< HEAD
=======
const rules = {
outpatientType: [{ required: true, message: '请选择出院方式', trigger: 'change' }],
outpatientTime: [{ required: true, message: '请选择出院时间', trigger: 'change' }],
@@ -106,18 +86,11 @@ function getEndTime() {
}
return date.format('YYYY-MM-DD HH:mm:ss');
}
>>>>>>> v1.3
function openDialog() {
dialogVisible.value = true;
}
<<<<<<< HEAD
defineExpose({
openDialog,
});
</script>
=======
const submitApplicationForm = async () => {
if (!formRef.value) return;
try {
@@ -153,4 +126,3 @@ defineExpose({
openDialog,
});
</script>
>>>>>>> v1.3

View File

@@ -65,11 +65,7 @@
<el-radio-button label="1">长期</el-radio-button>
<el-radio-button label="2">临时</el-radio-button>
</el-radio-group>
<<<<<<< HEAD
<el-select v-model="orderClassCode" placeholder="医嘱类型" style="width: 240px">
=======
<el-select v-model="orderClassCode" placeholder="医嘱类型" style="width: 240px" clearable>
>>>>>>> v1.3
<el-option
v-for="item in adviceTypeList"
:key="item.value"
@@ -77,11 +73,6 @@
:value="item.value"
/>
</el-select>
<<<<<<< HEAD
<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-select v-model="orderStatus" placeholder="医嘱状态" style="width: 240px" clearable>
<el-option
v-for="item in statusOption"
@@ -96,518 +87,20 @@
</el-button>
<el-button link type="primary" @click="onNursingStatus">护理状态</el-button>
<el-button link type="primary" @click="refresh()">刷新数据</el-button>
>>>>>>> v1.3
</el-space>
</div>
</div>
<div class="inpatientDoctor-order-table">
<el-table
<<<<<<< HEAD
max-height="650"
ref="prescriptionRef"
:data="prescriptionList"
=======
height="100%"
ref="prescriptionRef"
:data="filterPrescriptionList"
>>>>>>> v1.3
row-key="uniqueKey"
border
@cell-click="clickRow"
@row-dblclick="clickRowDb"
v-loading="loading"
:expand-row-keys="expandOrder"
<<<<<<< HEAD
>
<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"
>
<template v-if="scope.row.adviceType == 1">
<div style="display: flex; align-items: center; margin-bottom: 16px; gap: 16px">
<span class="medicine-title">
{{
scope.row.adviceName +
' ' +
scope.row.volume +
' [' +
Number(scope.row.unitPrice).toFixed(2) +
' 元' +
'/' +
scope.row.unitCode_dictText +
']'
}}
</span>
<!-- <el-form-item prop="conditionDefinitionId">
<el-select
v-model="scope.row.conditionDefinitionId"
style="width: 180px; margin: 0 20px"
placeholder="诊断"
>
<el-option
v-for="item in diagnosisList"
:key="item.conditionId"
:label="item.name"
:value="item.definitionId"
@click="handleDiagnosisChange(item, scope.row)"
/>
</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 +
' ' +
'批次号: ' +
item.lotNumber +
' ' +
' 库存:' +
stockFormat(
scope.row.partPercent,
scope.row.unitCode_dictText,
scope.row.minUnitCode_dictText,
item.quantity
) +
' 单价:' +
item.price.toFixed(2) +
'/' +
item.unitCode_dictText
"
@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)"
@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
<span class="medicine-info"> 皮试{{ scope.row.skinTestFlag_enumText }} </span>
<span class="medicine-info">
注射药品{{ scope.row.injectFlag_enumText }}
</span>
<span class="total-amount">
总金额{{ scope.row.totalPrice ? scope.row.totalPrice + ' 元' : '0.00 元' }}
</span>
</div>
<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>
<!-- 剂量单位 -->
<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"
/>
</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)"
@input="convertDoseValues(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>
</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="
() => {
inputRefs.methodCode.blur();
}
"
@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-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
@keyup.enter.prevent="
() => {
inputRefs.rateCode.blur();
}
"
@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"
/>
</el-select>
</el-form-item>
</div>
</div>
<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="
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)"
@keyup.enter.prevent="handleEnter('quantity', 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)"
>
<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"
/>
</template>
</el-select>
</div>
<el-button type="primary" @click="handleSaveSign(scope.row, scope.$index)">
确定
</el-button>
</div>
</template>
<template v-else-if="scope.row.adviceType == 2">
<div style="display: flex; align-items: center; margin-bottom: 16px; gap: 16px">
<span style="font-size: 16px; font-weight: 600">
{{
scope.row.adviceName +
' ' +
scope.row.volume +
' ' +
scope.row.unitPrice +
' 元/' +
scope.row.unitCode_dictText
}}
</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 +
' ' +
'批次号: ' +
item.lotNumber +
' ' +
' 库存:' +
stockFormat(
scope.row.partPercent,
scope.row.unitCode_dictText,
scope.row.minUnitCode_dictText,
item.quantity
) +
' 单价:' +
item.price.toFixed(2) +
'/' +
item.unitCode_dictText
"
@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"
@keyup.enter.prevent="handleEnter('quantity', 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)"
>
<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;
}
"
/>
</template>
</el-select>
<span class="total-amount">
总金额:{{
scope.row.totalPrice ? scope.row.totalPrice + ' 元' : '0.00 元'
}}
</span>
</div>
<el-button type="primary" @click="handleSaveSign(scope.row, scope.$index)">
确定
</el-button>
</div>
</template>
<template v-else>
<div style="display: flex; align-items: center; margin-bottom: 16px; gap: 16px">
<span style="font-size: 16px; font-weight: 600">
{{ scope.row.adviceName }}
{{
scope.row.unitPrice
? Number(scope.row.unitPrice).toFixed(2) + '/次'
: '-' + '元'
}}
</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"
@keyup.enter.prevent="handleEnter('quantity', 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>
<span class="total-amount">
总金额:{{
scope.row.totalPrice ? scope.row.totalPrice + ' 元' : '0.00 元'
}}
</span>
<span style="font-size: 16px; font-weight: 600">
<!-- 金额: {{ scope.row.priceList[0].price }} -->
</span>
</div>
<el-button type="primary" @click="handleSaveSign(scope.row, scope.$index)">
确定
</el-button>
</div>
</template>
</div>
</el-form>
</template>
</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;
});
}
"
/>
</template>
<template #default="scope">
<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">
<template #default="scope">
<div v-if="groupMarkers[scope.$index] === '┏'">┏</div>
<div v-if="groupMarkers[scope.$index] === '┗'">┗</div>
<div v-if="groupMarkers[scope.$index] === '┃'">┃</div>
<!-- <div v-if="groupMarkers[scope.$index] === 'all'">┏</div> -->
<!-- <div v-if="groupMarkers[scope.$index] === 'all'">┗</div> -->
</template>
</el-table-column>
<el-table-column label="类型" align="center" prop="" width="120">
<template #default="scope">
=======
@select="handleSelectionChange"
>
<el-table-column type="expand" width="1" style="width: 0">
@@ -630,31 +123,20 @@
<el-table-column label="类型" align="center" prop="" width="120">
<template #default="scope">
{{ console.log(scope.row, 1111) }}
>>>>>>> v1.3
<el-radio-group
v-model="scope.row.therapyEnum"
size="small"
v-if="getRowDisabled(scope.row)"
<<<<<<< HEAD
>
<el-radio-button label="长期" value="1" />
<el-radio-button label="临时" value="2" />
=======
@change="(val) => handleTherapyChange(val, scope.row)"
>
<el-radio-button label="1">长期</el-radio-button>
<el-radio-button label="2">临时</el-radio-button>
>>>>>>> v1.3
</el-radio-group>
<span
v-else
:style="scope.row.therapyEnum == '1' ? 'color: #a6745c' : 'color: #3787a5'"
>
<<<<<<< HEAD
{{ scope.row.therapyEnum_enumText }}
=======
{{ scope.row.therapyEnum === '1' ? '长期' : '临时' }}
>>>>>>> v1.3
</span>
</template>
</el-table-column>
@@ -662,11 +144,7 @@
<template #default="scope">
<template v-if="getRowDisabled(scope.row)">
<el-select
<<<<<<< HEAD
style="width: 35%; margin-right: 20px"
=======
style="width: 35%; margin-right: 8px"
>>>>>>> v1.3
v-model="scope.row.adviceType"
:ref="'adviceTypeRef' + scope.$index"
@change="
@@ -676,10 +154,7 @@
adviceQueryParams.adviceType = value;
}
"
<<<<<<< HEAD
=======
clearable
>>>>>>> v1.3
>
<el-option
v-for="item in adviceTypeList"
@@ -710,11 +185,7 @@
<template #reference>
<el-input
:ref="'adviceRef' + scope.$index"
<<<<<<< HEAD
style="width: 50%"
=======
style="width: 62%"
>>>>>>> v1.3
v-model="scope.row.adviceName"
placeholder="请选择项目"
@input="handleChange"
@@ -791,16 +262,6 @@
{{ console.log(scope.row) }}
<span v-if="!scope.row.isEdit && scope.row.adviceType == 1" style="text-align: right">
{{
<<<<<<< HEAD
scope.row.rateCode_dictText
? scope.row.rateCode_dictText +
' ' +
scope.row.dispensePerDuration +
'天' +
' ' +
scope.row.methodCode_dictText
: ''
=======
[
scope.row.rateCode_dictText,
scope.row.dispensePerDuration ? scope.row.dispensePerDuration + '' : '',
@@ -808,7 +269,6 @@
]
.filter(Boolean)
.join(' ')
>>>>>>> v1.3
}}
</span>
</template>
@@ -848,10 +308,6 @@
:diagnosis="diagnosisInfo"
:patientInfo="patientInfo"
@userPrescriptionHistory="handleSaveHistory"
<<<<<<< HEAD
/> -->
<LeaveHospitalDialog ref="leaveHospitalDialogRef" />
=======
/>
<LeaveHospitalDialog
ref="leaveHospitalDialogRef"
@@ -861,7 +317,6 @@
:encounter-diagnosis-id="encounterDiagnosisId"
@success="handleLeaveHospitalSuccess"
/>
>>>>>>> v1.3
<TransferOrganizationDialog ref="transferOrganizationRef" />
</div>
<!-- <el-drawer v-model="openDrawer" size="100%">
@@ -902,12 +357,9 @@ import useUserStore from '@/store/modules/user';
import ApplicationFormBottomBtn from './applicationForm/applicationFormBottomBtn.vue';
import LeaveHospitalDialog from './applicationForm/leaveHospitalDialog.vue';
import TransferOrganizationDialog from './applicationForm/transferOrganizationDialog.vue';
<<<<<<< HEAD
=======
import NursingStatus from '@/views/inpatientDoctor/home/components/applicationShow/nursingStatus.vue';
import OrderForm from './OrderForm.vue';
import { computed, watch } from 'vue';
>>>>>>> v1.3
const emit = defineEmits(['selectDiagnosis']);
const total = ref(0);
const queryParams = ref({});
@@ -1937,18 +1389,6 @@ function handleSingOut() {
// 停嘱
function handleStopAdvice() {
<<<<<<< HEAD
let requestIdList = prescriptionList.value
.filter((item) => {
return item.check;
})
.map((item) => {
return {
requestId: item.requestId,
adviceType: item.adviceType,
};
});
=======
let selectRows = prescriptionRef.value.getSelectionRows();
console.log('selectRows======>', JSON.stringify(selectRows));
if ((selectRows || []).length <= 0) {
@@ -2018,7 +1458,6 @@ function handleStopAdvice() {
adviceType: item.adviceType,
};
});
>>>>>>> v1.3
// if (requestIdList.length == 0) {
// proxy.$modal.msgWarning('仅长期医嘱可停止');
// return;
@@ -2452,25 +1891,9 @@ function sortPrescriptionList() {
}
function handleLeaveHospital() {
<<<<<<< HEAD
proxy.$refs['leaveHospitalDialogRef'].openDialog();
}
function handleTransferOrg() {
proxy.$refs['transferOrganizationRef'].openDialog();
}
// 处理行chexkbox选中
function handleCheckBoxChange(value, index, row) {
// 选中将当前行索引记录下来,取消将当前行索引删除
if (value) {
groupIndexList.value.push(index);
} else {
groupIndexList.value.splice(groupIndexList.value.indexOf(index), 1);
=======
if (!patientInfo.value) {
proxy.$modal.msgWarning('请先选择患者');
return;
>>>>>>> v1.3
}
proxy.$refs['leaveHospitalDialogRef'].openDialog();
}

View File

@@ -5,10 +5,6 @@
-->
<template>
<div class="emr-use-container">
<<<<<<< HEAD
<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>
=======
<div
class="disBtn"
:class="{ disLeftBtnNor: leftShow, disLeftBtnAct: !leftShow }"
@@ -23,7 +19,6 @@
>
<img src="../../../../assets/icons/svg/foldup.svg" />
</div>
>>>>>>> v1.3
<transition name="el-zoom-in-left">
<div class="template-tree-container" v-if="leftShow">
<div class="search-box">
@@ -35,15 +30,6 @@
</div>
<el-scrollbar class="template-tree-scrollbar">
<el-tree
<<<<<<< HEAD
ref="templateTree"
:data="templateData"
:props="defaultProps"
auto-expand-parent
node-key="id"
@node-click="handleNodeClick"
class="template-tree"
=======
ref="templateTree"
:data="templateData"
:props="defaultProps"
@@ -51,7 +37,6 @@
node-key="id"
@node-click="handleNodeClick"
class="template-tree"
>>>>>>> v1.3
></el-tree>
</el-scrollbar>
</div>
@@ -91,31 +76,18 @@
<el-tabs v-model="quicklyactiveName" type="card">
<el-tab-pane label="历史" name="history">
<History
<<<<<<< HEAD
@historyClick="handleHistoryClick"
ref="historyRef"
v-model:definitionId="currentSelectTemplate.id"
=======
@historyClick="handleHistoryClick"
ref="historyRef"
v-model:definitionId="currentSelectTemplate.id"
:selectedRecordId="selectedHistoryRecordId"
>>>>>>> v1.3
/>
</el-tab-pane>
<el-tab-pane label="模版" name="model">
<Template
<<<<<<< HEAD
@templateClick="handleTemplateClick"
ref="templateRef"
v-model:definitionId="currentSelectTemplate.id"
@edit="templateEdit"
=======
@templateClick="handleTemplateClick"
ref="templateRef"
v-model:definitionId="currentSelectTemplate.id"
@edit="templateEdit"
>>>>>>> v1.3
/>
</el-tab-pane>
</el-tabs>
@@ -176,9 +148,6 @@ const emrComponentRef = ref(null);
const quicklyactiveName = ref('history');
const leftShow = ref(true);
const rightShow = ref(true);
<<<<<<< HEAD
=======
watch(patientInfo, () => {
historyRef.value?.queryList();
templateRef.value?.queryList();
@@ -187,7 +156,6 @@ const templateTree = ref(null);
// 当前选中的历史病历ID用于在History组件中高亮显示
const selectedHistoryRecordId = ref('');
>>>>>>> v1.3
// 树配置(模板树)
const defaultProps = {
@@ -790,17 +758,10 @@ defineExpose({ state });
const disNode = () => {
leftShow.value = !leftShow.value;
<<<<<<< HEAD
}
const disNode_R = () => {
rightShow.value = !rightShow.value;
}
=======
};
const disNode_R = () => {
rightShow.value = !rightShow.value;
};
>>>>>>> v1.3
</script>
<style lang="scss" scoped>
.emr-use-container {
@@ -827,11 +788,7 @@ const disNode_R = () => {
height: 60px;
z-index: 1111;
img {
<<<<<<< HEAD
transform: rotate(-90deg) ;
=======
transform: rotate(-90deg);
>>>>>>> v1.3
}
}
.disLeftBtnAct {

View File

@@ -3,18 +3,6 @@
* @Date: 2025-04-07 12:58:22
* @Description:
*/
<<<<<<< HEAD
import PatientList from './components/patientList.vue'
import PatientCard from './components/patientCard/index.vue'
import Advice from './components/order/index.vue'
import Diagnose from './components/diagnosis/diagnosis.vue'
import BloodTtransfusionAapplication from './components/applicationShow/bloodTtransfusionAapplication.vue'
import ExamineApplication from './components/applicationShow/examineApplication.vue'
import SurgeryApplication from './components/applicationShow/surgeryApplication.vue'
import TestApplication from './components/applicationShow/testApplication.vue'
import NursingStatus from './components/applicationShow/nursingStatus.vue'
export { PatientList, PatientCard, Advice,Diagnose, BloodTtransfusionAapplication, ExamineApplication, SurgeryApplication, TestApplication, NursingStatus }
=======
import Advice from './components/order/index.vue';
import Diagnose from './components/diagnosis/diagnosis.vue';
import BloodTtransfusionAapplication from './components/applicationShow/bloodTtransfusionAapplication.vue';
@@ -33,4 +21,3 @@ export {
NursingStatus,
ReportQuery,
};
>>>>>>> v1.3

View File

@@ -15,17 +15,7 @@
<el-tab-pane label="临床医嘱" name="prescription">
<Advice ref="adviceRef" />
</el-tab-pane>
<<<<<<< HEAD
<el-tab-pane label="诊断录入" name="diagnosis">
<Diagnose ref="diagnosisRef" :patientInfo="patientInfo" />
</el-tab-pane>
<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="fourth">Task</el-tab-pane> -->
>>>>>>> v1.3
<el-tab-pane label="检验申请" name="test">
<TestApplication ref="testApplicationRef" />
</el-tab-pane>
@@ -38,18 +28,12 @@
<el-tab-pane label="输血申请" name="blood">
<BloodTtransfusionAapplication ref="bloodTtransfusionAapplicationRef" />
</el-tab-pane>
<<<<<<< HEAD
<el-tab-pane label="护理状态" name="nursing">
<NursingStatus />
</el-tab-pane>
=======
<el-tab-pane label="报告查询" name="report">
<ReportQuery />
</el-tab-pane>
<!-- <el-tab-pane label="护理状态" name="nursing">
<NursingStatus />
</el-tab-pane> -->
>>>>>>> v1.3
</el-tabs>
</el-main>
</el-container>
@@ -57,15 +41,6 @@
</div>
</template>
<script setup>
<<<<<<< HEAD
import { getCurrentInstance, onBeforeMount, onMounted, reactive, ref } from 'vue';
// const { proxy } = getCurrentInstance()
// const emits = defineEmits([])
// const props = defineProps({})
import Emr from './emr/index.vue';
import inPatientBarDoctorFold from '@/components/patientBar/inPatientBarDoctorFold.vue';
=======
>>>>>>> v1.3
import {
getCurrentInstance,
onBeforeMount,
@@ -90,10 +65,7 @@ import {
SurgeryApplication,
TestApplication,
NursingStatus,
<<<<<<< HEAD
=======
ReportQuery,
>>>>>>> v1.3
} from './index.js';
const state = reactive({});
onBeforeMount(() => {});

View File

@@ -1,10 +1,4 @@
<template>
<<<<<<< HEAD
<el-dialog v-model="dialogVisible" title="补费" width="90%" :close-on-click-modal="false">
<!-- 弹窗内容 - 左右布局 -->
<div style="display: flex; gap: 20px; height: 70vh">
<!-- 左侧收费组套列表 - 卡片式布局 -->
=======
<el-dialog v-model="dialogVisible" title="补费" width="80%" :close-on-click-modal="false">
<div style="font-size: 16px; font-weight: bold; margin-bottom: 10px">
患者信息{{
@@ -50,7 +44,6 @@
</div>
<!-- 弹窗内容 - 左右布局 -->
<div style="display: flex; gap: 20px; height: 70vh">
>>>>>>> v1.3
<div
style="
width: 250px;
@@ -60,27 +53,6 @@
flex-direction: column;
"
>
<<<<<<< HEAD
<!-- 搜索框 -->
<div style="padding: 10px; border-bottom: 1px solid #e4e7ed">
<el-input v-model="groupSearchText" placeholder="输入组套名称" clearable />
</div>
<!-- 收费组套列表 - 卡片式布局 -->
<div style="flex: 1; overflow-y: auto; padding: 10px">
<div
v-for="group in chargeGroups"
:key="group.id"
class="group-card"
@click="selectChargeGroup(group)"
>
<div class="group-status">
<span class="status-dot"></span>
{{ getGroupType(group.name) }}
</div>
<div class="group-name">{{ group.name }}</div>
<div class="group-info">
{{ getGroupInfo(group.id) }}
=======
<!-- 诊疗耗材 -->
<div
style="flex: 1; overflow-y: auto; padding: 10px; min-height: 200px"
@@ -112,16 +84,11 @@
<div class="item-name" v-if="item.adviceType === 2">
库存数量
{{ handleQuantity(item) }}
>>>>>>> v1.3
</div>
</div>
<!-- 只显示暂无数据文本 -->
<div
<<<<<<< HEAD
v-if="chargeGroups.length === 0"
=======
v-if="AdviceBaseInfoList.length === 0"
>>>>>>> v1.3
style="text-align: center; color: #909399; padding: 20px"
>
暂无数据
@@ -134,17 +101,6 @@
<!-- 费用项目表格 -->
<el-table :data="feeItemsList" border style="width: 100%; flex: 1">
<el-table-column label="收费项目" prop="itemName" min-width="200">
<<<<<<< HEAD
<template #default="scope">
<el-input
v-model="scope.row.itemName"
placeholder="请输入收费项目"
style="width: 100%"
/>
</template>
</el-table-column>
<el-table-column label="单价" prop="unitPrice" width="100" align="center">
=======
<!-- <template #default="scope">
<el-input
v-model="scope.row.adviceName"
@@ -161,53 +117,23 @@
</el-table-column>
<!-- 单价 - 简化版 -->
<el-table-column label="单价" width="200" align="center">
>>>>>>> v1.3
<template #default="scope">
<el-input-number
v-model="scope.row.unitPrice"
:min="0"
:step="0.01"
<<<<<<< HEAD
precision="2"
style="width: 100px"
@change="calculateTotalAmount"
/>
</template>
</el-table-column>
<el-table-column label="计费数量" prop="quantity" width="100" align="center">
=======
precision="6"
style="width: 150px"
/>
</template>
</el-table-column>
<el-table-column label="计费数量" prop="quantity" width="150" align="center">
>>>>>>> v1.3
<template #default="scope">
<el-input-number
v-model="scope.row.quantity"
:min="1"
:step="1"
style="width: 100px"
<<<<<<< HEAD
@change="calculateTotalAmount"
/>
</template>
</el-table-column>
<el-table-column label="金额" prop="amount" width="100" align="center" />
<el-table-column label="医保类型" prop="insuranceType" width="100" align="center">
<template #default="scope">
<el-input
v-model="scope.row.insuranceType"
placeholder="医保类型"
style="width: 100px"
/>
</template>
</el-table-column>
<el-table-column label="特限符合" prop="special" width="100" align="center">
<template #default="scope">
<el-switch v-model="scope.row.special" />
=======
/>
</template>
</el-table-column>
@@ -283,31 +209,10 @@
<el-button type="text" size="small" @click="feeItemsList.splice(scope.$index, 1)">
删除
</el-button>
>>>>>>> v1.3
</template>
</el-table-column>
</el-table>
<<<<<<< HEAD
<!-- 添加项目按钮 - 移到右侧费用项目表格下方 -->
<div
style="
margin-top: 10px;
padding: 15px;
border: 1px dashed #dcdfe6;
border-radius: 4px;
text-align: center;
cursor: pointer;
color: #409eff;
transition: all 0.3s;
"
@click="addEmptyItem"
>
+ 添加项目
</div>
=======
>>>>>>> v1.3
<!-- 底部信息区域 -->
<div style="margin-top: 20px; display: flex; flex-wrap: wrap; gap: 15px">
<div style="display: flex; align-items: center">
@@ -321,42 +226,7 @@
style="width: 200px"
/>
</div>
<<<<<<< HEAD
<div style="display: flex; align-items: center">
<span style="margin-right: 8px">执行科室</span>
<el-select v-model="selectedDept" placeholder="选择科室" style="width: 150px">
<el-option
v-for="dept in departmentOptions"
:key="dept.value"
:label="dept.label"
:value="dept.value"
/>
</el-select>
</div>
<div style="display: flex; align-items: center">
<span style="margin-right: 8px">开方医生</span>
<el-select v-model="selectedDoctor" placeholder="选择医生" style="width: 150px">
<el-option label="内科医生" value="doctor1" />
<el-option label="外科医生" value="doctor2" />
<el-option label="儿科医生" value="doctor3" />
</el-select>
</div>
<div style="display: flex; align-items: center">
<span style="margin-right: 8px">执行人</span>
<el-select v-model="executor" placeholder="选择执行人" style="width: 150px">
<el-option label="系统管理员" value="admin" />
<el-option label="护士甲" value="nurse1" />
<el-option label="护士乙" value="nurse2" />
</el-select>
</div>
</div>
=======
</div>
>>>>>>> v1.3
<!-- 总金额和操作按钮 -->
<div
style="
@@ -367,11 +237,7 @@
"
>
<div style="font-size: 14px; font-weight: bold; text-align: right">
<<<<<<< HEAD
本次补费总金额<span style="color: #ff4d4f">{{ totalAmount.toFixed(2) }}</span>
=======
本次补费总金额<span style="color: #ff4d4f">{{ totalAmount.toFixed(6) }}</span>
>>>>>>> v1.3
</div>
<div>
<el-button @click="handleCancel">取消</el-button>
@@ -384,11 +250,6 @@
</template>
<script setup>
<<<<<<< HEAD
import { ref, computed, onMounted, watch } from 'vue';
import { ElMessage } from 'element-plus';
import { formatDateStr } from '@/utils/index';
=======
import { ref, computed, onMounted, watch, reactive } from 'vue';
import { ElMessage } from 'element-plus';
import { formatDateStr } from '@/utils/index';
@@ -396,7 +257,6 @@ import { getAdviceBaseInfo, getOrgList, getDiseaseTreatmentInitLoc } from './api
import useUserStore from '@/store/modules/user';
import { get } from 'lodash';
import { lo } from 'element-plus/es/locales.mjs';
>>>>>>> v1.3
// Props定义
const props = defineProps({
@@ -409,13 +269,8 @@ const props = defineProps({
default: () => [],
},
patientInfo: {
<<<<<<< HEAD
type: String,
default: '',
=======
type: Object, // 通常这类信息是对象,这里假设你已经修正了类型
default: () => ({}),
>>>>>>> v1.3
},
});
@@ -427,25 +282,6 @@ const dialogVisible = computed({
get: () => props.visible,
set: (value) => emit('update:visible', value),
});
<<<<<<< HEAD
const searchItemText = ref('');
const selectedItemName = ref('');
const feeTabs = ref('chargeItems');
const feeItemsList = ref([]);
const executeTime = ref('');
const selectedDept = ref('');
const selectedDoctor = ref('');
const executor = ref('');
const departmentOptions = ref([]);
// 收费组套相关数据
const chargeGroups = ref([]);
const groupSearchText = ref('');
// 计算总金额
const totalAmount = computed(() => {
return feeItemsList.value.reduce((sum, item) => {
return sum + (item.unitPrice || 0) * (item.quantity || 0);
=======
const adviceTypeList = ref([
{ label: '耗材', value: 2 },
{ label: '诊疗', value: 3 },
@@ -543,31 +379,11 @@ const totalAmount = computed(() => {
const price = Number(item.unitPrice) || 0;
const quantity = Number(item.quantity) || 0;
return sum + price * quantity;
>>>>>>> v1.3
}, 0);
});
// 初始化
onMounted(() => {
<<<<<<< HEAD
// 加载科室选项
loadDepartmentOptions();
// 加载收费组套数据
loadChargeGroups();
});
// 监听初始数据变化
watch(
() => props.initialData,
(newData) => {
if (newData && newData.length > 0) {
initFeeDialogData(newData);
}
},
{ deep: true }
);
=======
const userStore = useUserStore();
userId.value = userStore.id;
orgId.value = userStore.orgId;
@@ -578,21 +394,13 @@ watch(
getDiseaseInitLoc();
});
>>>>>>> v1.3
// 监听弹窗显示状态
watch(
() => props.visible,
(visible) => {
if (visible) {
<<<<<<< HEAD
// 设置默认执行时间为当前时间
executeTime.value = formatDateStr(new Date(), 'YYYY-MM-DD HH:mm:ss');
} else {
// 弹窗关闭时重置数据
=======
executeTime.value = formatDateStr(new Date(), 'YYYY-MM-DD HH:mm:ss');
} else {
>>>>>>> v1.3
resetData();
}
}
@@ -600,153 +408,6 @@ watch(
// 加载科室选项
function loadDepartmentOptions() {
<<<<<<< HEAD
// 模拟科室数据
departmentOptions.value = [
{ label: '内科', value: 'internal' },
{ label: '外科', value: 'surgery' },
{ label: '儿科', value: 'pediatrics' },
{ label: '妇产科', value: 'obstetrics' },
{ label: '其他科室', value: 'others' },
];
}
// 加载收费组套数据
function loadChargeGroups() {
// 模拟收费组套数据
chargeGroups.value = [
{ id: '1', name: '血常规检查组套' },
{ id: '2', name: '生化检查组套' },
{ id: '3', name: '心电图检查组套' },
{ id: '4', name: 'CT检查组套' },
{ id: '5', name: '输液治疗组套' },
];
}
// 获取组套类型
function getGroupType(name) {
if (name.includes('检查')) return '检查';
if (name.includes('治疗')) return '治疗';
return '常规';
}
// 获取组套信息
function getGroupInfo(id) {
const infoMap = {
1: '检验科/基础检查',
2: '检验科/生化项目',
3: '心电图室/常规检查',
4: '影像科/影像学检查',
5: '内科/治疗项目',
};
return infoMap[id] || '标准收费项目';
}
// 初始化费用数据
function initFeeDialogData(selectedRows) {
// 将选中的项目转换为弹窗中的费用项目格式
feeItemsList.value = selectedRows.map((row) => ({
itemName: row.chargeItem,
unitPrice: row.unitPrice,
quantity: row.quantity,
amount: row.unitPrice * row.quantity,
dept: '内科',
special: false,
insuranceType: '',
}));
}
// 选择收费组套
function selectChargeGroup(group) {
// 模拟根据选中的组套添加对应的费用项目
const groupItems = {
1: [
{
itemName: '红细胞计数',
unitPrice: 15.0,
quantity: 1,
dept: '检验科',
special: false,
insuranceType: '甲类',
},
],
2: [
{
itemName: '肝功能检查',
unitPrice: 80.0,
quantity: 1,
dept: '检验科',
special: false,
insuranceType: '甲类',
},
],
3: [
{
itemName: '心电图检查',
unitPrice: 45.0,
quantity: 1,
dept: '心电图室',
special: false,
insuranceType: '甲类',
},
],
4: [
{
itemName: 'CT扫描',
unitPrice: 300.0,
quantity: 1,
dept: '影像科',
special: false,
insuranceType: '乙类',
},
],
5: [
{
itemName: '静脉输液',
unitPrice: 20.0,
quantity: 1,
dept: '内科',
special: false,
insuranceType: '甲类',
},
],
};
const items = groupItems[group.id] || [];
// 计算金额
items.forEach((item) => {
item.amount = item.unitPrice * item.quantity;
});
// 添加到费用项目列表
feeItemsList.value = [...feeItemsList.value, ...items];
}
// 添加空白项目
function addEmptyItem() {
const newItem = {
itemName: '', // 空白项目名称
unitPrice: 0, // 默认单价为0
quantity: 1, // 默认数量为1
amount: 0, // 默认金额为0
dept: '内科', // 默认科室
special: false, // 默认特限不符合
insuranceType: '', // 空白医保类型
};
// 添加到费用项目列表
feeItemsList.value.push(newItem);
// 显示提示信息
ElMessage.success('已添加空白项目,请填写相关信息');
}
// 计算总金额(当数量变化时调用)
function calculateTotalAmount() {
// 更新每个项目的金额
feeItemsList.value.forEach((item) => {
item.amount = (item.unitPrice || 0) * (item.quantity || 0);
=======
getOrgList().then((res) => {
if (res.data && res.data.records && res.data.records.length > 0) {
departmentOptions.value = res.data.records[0].children || [];
@@ -858,7 +519,6 @@ function selectChange(row) {
quantity: 1,
// positionId: row.positionId === null || row.positionId === undefined ? orgId : row.positionId, // 默认执行科室
selectUnitCode: row.minUnitCode, // 默认选择小单位
>>>>>>> v1.3
});
}
@@ -870,30 +530,6 @@ function handleCancel() {
// 确认操作
function handleConfirm() {
<<<<<<< HEAD
// 构建提交数据
const submitData = {
feeItems: feeItemsList.value,
executeTime: executeTime.value,
department: selectedDept.value,
doctor: selectedDoctor.value,
executor: executor.value,
totalAmount: totalAmount.value,
};
// 发送确认事件
emit('confirm', submitData);
dialogVisible.value = false;
}
// 重置数据
function resetData() {
feeItemsList.value = [];
executeTime.value = '';
selectedDept.value = '';
selectedDoctor.value = '';
executor.value = '';
=======
if (feeItemsList.value.length === 0) {
ElMessage.warning('请至少添加一项费用项目');
return;
@@ -995,7 +631,6 @@ function resetData() {
adviceType.value = '';
searchText.value = '';
executeTime.value = '';
>>>>>>> v1.3
}
</script>
@@ -1003,20 +638,7 @@ function resetData() {
:deep(.el-dialog__body) {
padding: 20px;
}
<<<<<<< HEAD
/* 添加项目按钮样式 */
:deep(
.el-dialog div[style*='flex: 1; display: flex; flex-direction: column'] > div:nth-child(2):hover
) {
background-color: #ecf5ff;
}
/* 收费组套卡片样式 */
.group-card {
=======
.item-card {
>>>>>>> v1.3
background: #ffffff;
border: 1px solid #e4e7ed;
border-radius: 6px;
@@ -1026,22 +648,12 @@ function resetData() {
transition: all 0.3s ease;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
}
<<<<<<< HEAD
.group-card:hover {
=======
.item-card:hover {
>>>>>>> v1.3
border-color: #409eff;
background-color: #ecf5ff;
box-shadow: 0 4px 12px rgba(64, 158, 255, 0.15);
}
<<<<<<< HEAD
.group-status {
=======
.item-status {
>>>>>>> v1.3
display: flex;
align-items: center;
margin-bottom: 8px;
@@ -1049,10 +661,6 @@ function resetData() {
font-weight: 500;
color: #606266;
}
<<<<<<< HEAD
=======
>>>>>>> v1.3
.status-dot {
width: 8px;
height: 8px;
@@ -1060,28 +668,11 @@ function resetData() {
border-radius: 50%;
margin-right: 6px;
}
<<<<<<< HEAD
.group-name {
=======
.item-name {
>>>>>>> v1.3
font-size: 16px;
font-weight: 600;
color: #303133;
margin-bottom: 8px;
word-break: break-word;
}
<<<<<<< HEAD
.group-info {
font-size: 12px;
color: #909399;
border-top: 1px dashed #ebeef5;
padding-top: 8px;
margin-top: 4px;
}
</style>
=======
</style>
>>>>>>> v1.3

View File

@@ -213,11 +213,7 @@
<script setup>
import { ref, onMounted } from 'vue';
import { ElMessage } from 'element-plus';
<<<<<<< HEAD
import { patientInfoList } from '../../medicalOrderExecution/store/patient.js';
=======
import { patientInfoList } from '../../components/store/patient.js';
>>>>>>> v1.3
import { formatDateStr } from '@/utils/index';
// 响应式数据
@@ -453,11 +449,7 @@ function filterFeeList() {
// 查询按钮点击
function handleQuery() {
if (patientInfoList.value.length === 0) {
<<<<<<< HEAD
ElMessage.warning('请先选择患者');
=======
// ElMessage.warning('请先选择患者');
>>>>>>> v1.3
return;
}

View File

@@ -1,8 +1,4 @@
<<<<<<< HEAD
import request from '@/utils/request'
=======
import request from '@/utils/request';
>>>>>>> v1.3
/**
* 获取住院患者列表
@@ -11,13 +7,8 @@ export function getPatientList(queryParams) {
return request({
url: '/nurse-station/advice-process/inpatient',
method: 'get',
<<<<<<< HEAD
params: queryParams
})
=======
params: queryParams,
});
>>>>>>> v1.3
}
/**
@@ -27,12 +18,6 @@ export function getWardList(queryParams) {
return request({
url: '/app-common/practitioner-ward',
method: 'get',
<<<<<<< HEAD
params: queryParams
})
}
=======
params: queryParams,
});
}
@@ -45,7 +30,6 @@ export function getOrgList() {
method: 'get',
});
}
>>>>>>> v1.3
/**
* 获取当前选中患者全部医嘱
*/
@@ -53,13 +37,8 @@ export function getPrescriptionList(queryParams) {
return request({
url: '/nurse-station/advice-process/inpatient-advice',
method: 'get',
<<<<<<< HEAD
params: queryParams
})
=======
params: queryParams,
});
>>>>>>> v1.3
}
/**
@@ -69,13 +48,8 @@ export function adviceExecute(data) {
return request({
url: '/nurse-station/advice-process/advice-execute',
method: 'post',
<<<<<<< HEAD
data: data
})
=======
data: data,
});
>>>>>>> v1.3
}
/**
@@ -85,11 +59,6 @@ export function adviceCancel(data) {
return request({
url: '/nurse-station/advice-process/advice-cancel',
method: 'post',
<<<<<<< HEAD
data: data
})
}
=======
data: data,
});
}
@@ -149,4 +118,3 @@ export function getCostDetail(queryParams) {
params: queryParams,
});
}
>>>>>>> v1.3

View File

@@ -1,9 +1,5 @@
<template>
<<<<<<< HEAD
<div style="height: calc(100vh - 126px)">
=======
<div style="height: calc(100vh - 126px); display: flex; flex-direction: column">
>>>>>>> v1.3
<!-- 操作工具栏 -->
<div
style="
@@ -13,10 +9,7 @@
align-items: center;
justify-content: space-between;
padding: 0 15px;
<<<<<<< HEAD
=======
flex-shrink: 0;
>>>>>>> v1.3
"
>
<div style="display: flex; align-items: center">
@@ -30,11 +23,7 @@
>
<el-tab-pane label="今日" name="today"></el-tab-pane>
<el-tab-pane label="昨日" name="yesterday"></el-tab-pane>
<<<<<<< HEAD
<el-tab-pane label="其他" name="other"></el-tab-pane>
=======
<el-tab-pane label="自定义" name="custom"></el-tab-pane>
>>>>>>> v1.3
</el-tabs>
<!-- 日期选择器 -->
@@ -47,99 +36,15 @@
start-placeholder="开始日期"
end-placeholder="结束日期"
@change="handleDatePickerChange"
<<<<<<< HEAD
style="width: 240px; margin-right: 20px"
/>
<!-- 执行科室选择 -->
<el-select
v-model="execDepartment"
placeholder="请选择执行科室"
clearable
style="width: 150px; margin-right: 20px"
>
<el-option
v-for="dept in departmentOptions"
:key="dept.value"
:label="dept.label"
:value="dept.value"
/>
</el-select>
=======
:disabled="dateRange !== 'custom'"
style="width: 240px; margin-right: 20px"
/>
>>>>>>> v1.3
<!-- 查询按钮 -->
<el-button type="primary" @click="handleQuery">查询</el-button>
</div>
<div style="display: flex; align-items: center">
<<<<<<< HEAD
<!-- 全选开关 -->
<div style="display: flex; align-items: center; margin-right: 20px">
<span style="margin-right: 8px">全选</span>
<el-switch v-model="selectAll" @change="handleSelectAll" />
</div>
<!-- 计费按钮 -->
<el-button type="primary" @click="handleCalculate">计费</el-button>
<!-- 批量划价按钮 -->
<el-button type="primary" plain @click="handleBatchPrice" style="margin-left: 20px"
>批量划价</el-button
>
</div>
</div>
<!-- 费用列表区域 -->
<div
style="padding: 10px; background-color: #eef9fd; height: 100%; overflow-y: auto"
v-loading="loading"
>
<el-table
ref="tableRef"
:data="billingList"
border
style="width: 100%"
:header-cell-style="{ background: '#eef9fd !important' }"
>
<el-table-column type="selection" align="center" width="50" />
<el-table-column label="医嘱内容" prop="orderContent" min-width="200" />
<el-table-column label="应执行日期" prop="executeDate" width="120" align="center" />
<el-table-column label="执行收费项目" prop="chargeItem" min-width="180" />
<el-table-column label="单价" prop="unitPrice" width="100" align="center">
<template #default="scope">
<el-input-number
v-model="scope.row.unitPrice"
:min="0"
:step="0.01"
style="width: 100px"
/>
</template>
</el-table-column>
<el-table-column label="使用数量" prop="quantity" width="100" align="center">
<template #default="scope">
<el-input-number v-model="scope.row.quantity" :min="1" :step="1" style="width: 100px" />
</template>
</el-table-column>
<el-table-column label="操作" width="100" align="center">
<template #default="scope">
<!-- <el-button type="primary" size="small" @click="handlePrice(scope.row)">划价</el-button> -->
<el-button type="primary" size="small" @click="handleDelete(scope.row)">撤销</el-button>
</template>
</el-table-column>
</el-table>
<!-- 无数据提示 -->
<el-empty v-if="!loading && billingList.length === 0" description="暂无数据" />
</div>
<!-- 使用计费弹窗组件 -->
=======
<!-- 新增划价 -->
<el-button type="primary" @click="handAddBilling">新增划价</el-button>
</div>
@@ -346,7 +251,6 @@
</div>
<!-- 计费弹窗 -->
>>>>>>> v1.3
<FeeDialog
v-model:visible="dialogVisible"
:initial-data="selectedFeeItems"
@@ -358,243 +262,6 @@
</template>
<script setup>
<<<<<<< HEAD
import { ref, onMounted } from 'vue';
import { ElMessage } from 'element-plus';
import { patientInfoList } from '../../medicalOrderExecution/store/patient.js';
import { formatDateStr } from '@/utils/index';
import FeeDialog from './FeeDialog.vue';
// 响应式数据
const loading = ref(false);
const billingList = ref([]);
const dateRange = ref('today'); // today, yesterday, other
const dateRangeValue = ref([]);
const execDepartment = ref('');
const selectAll = ref(false);
const departmentOptions = ref([]);
const tableRef = ref(null);
// 计费弹窗相关数据
const dialogVisible = ref(false);
const selectedFeeItems = ref([]);
const currentPatientInfo = ref('');
// 初始化
onMounted(() => {
// 设置默认日期
const today = new Date();
dateRangeValue.value = [formatDateStr(today, 'YYYY-MM-DD'), formatDateStr(today, 'YYYY-MM-DD')];
// 加载科室选项
loadDepartmentOptions();
});
// 加载科室选项
function loadDepartmentOptions() {
// 模拟科室数据
departmentOptions.value = [
{ label: '内科', value: 'internal' },
{ label: '外科', value: 'surgery' },
{ label: '儿科', value: 'pediatrics' },
{ label: '妇产科', value: 'obstetrics' },
{ label: '其他科室', value: 'others' },
];
}
// 处理日期tabs点击
function handleDateTabClick(tab) {
const rangeType = tab.paneName;
const today = new Date();
const yesterday = new Date();
yesterday.setDate(today.getDate() - 1);
switch (rangeType) {
case 'today':
dateRangeValue.value = [
formatDateStr(today, 'YYYY-MM-DD'),
formatDateStr(today, 'YYYY-MM-DD'),
];
break;
case 'yesterday':
dateRangeValue.value = [
formatDateStr(yesterday, 'YYYY-MM-DD'),
formatDateStr(yesterday, 'YYYY-MM-DD'),
];
break;
// other 情况保持用户选择的值
}
}
// 处理日期选择器变化
function handleDatePickerChange() {
if (dateRangeValue.value.length > 0) {
dateRange.value = 'other';
}
}
// 生成模拟数据
function generateMockData() {
const mockData = [
{
orderContent: '血常规检查',
executeDate: dateRangeValue.value[0],
chargeItem: '血液分析',
unitPrice: 35.0,
quantity: 1,
id: '1',
},
{
orderContent: '静脉注射',
executeDate: dateRangeValue.value[0],
chargeItem: '静脉输液',
unitPrice: 20.0,
quantity: 2,
id: '2',
},
{
orderContent: 'CT检查',
executeDate: dateRangeValue.value[0],
chargeItem: '胸部CT平扫',
unitPrice: 320.0,
quantity: 1,
id: '3',
},
{
orderContent: '药物治疗',
executeDate: dateRangeValue.value[0],
chargeItem: '抗生素注射',
unitPrice: 58.5,
quantity: 1,
id: '4',
},
];
// 根据科室筛选模拟数据
if (execDepartment.value) {
// 模拟根据科室筛选
return mockData.filter((_, index) => index % 2 === 0);
}
return mockData;
}
// 查询按钮点击
function handleQuery() {
if (patientInfoList.value.length === 0) {
ElMessage.warning('请先选择患者');
return;
}
loading.value = true;
// 模拟API调用延迟
setTimeout(() => {
// 使用模拟数据
billingList.value = generateMockData();
loading.value = false;
}, 500);
}
// 全选/取消全选
function handleSelectAll(value) {
selectAll.value = value;
if (tableRef.value) {
if (value) {
tableRef.value.toggleAllSelection();
} else {
// 取消全选
tableRef.value.clearSelection();
}
}
}
// 打开计费弹窗
function handleCalculate() {
// 获取选中的数据
const selectedRows = getSelectedRows();
// if (selectedRows.length === 0) {
// ElMessage.warning('请先选择要计费的项目');
// return;
// }
// 设置弹窗初始数据
selectedFeeItems.value = [...selectedRows];
// 设置患者信息
if (patientInfoList.value.length > 0) {
const patient = patientInfoList.value[0];
currentPatientInfo.value = `${patient.patientName || '未知患者'}`;
}
// 显示弹窗
dialogVisible.value = true;
}
// 处理计费弹窗确认
function handleFeeDialogConfirm(data) {
// 模拟计费操作
setTimeout(() => {
ElMessage.success('计费成功');
// 刷新数据
handleQuery();
}, 300);
}
// 处理计费弹窗取消
function handleFeeDialogCancel() {
// 可以在这里添加取消后的处理逻辑
}
// 批量划价
function handleBatchPrice() {
// 获取选中的数据
const selectedRows = getSelectedRows();
if (selectedRows.length === 0) {
ElMessage.warning('请先选择要划价的项目');
return;
}
// 模拟批量划价操作
setTimeout(() => {
ElMessage.success(`批量划价成功,共${selectedRows.length}项`);
// 更新状态,模拟已划价
selectedRows.forEach((row) => {
row.status = 'priced';
});
}, 300);
}
// 单项划价
function handlePrice(row) {
// 模拟单项划价操作
setTimeout(() => {
ElMessage.success('划价成功');
// 更新状态,模拟已划价
row.status = 'priced';
}, 300);
}
function handleDelete(row) {
// 从数据列表中删除当前行
const index = billingList.value.findIndex((item) => item.id === row.id);
if (index !== -1) {
billingList.value.splice(index, 1);
ElMessage.success('撤销成功');
}
}
// 获取选中的行
function getSelectedRows() {
if (tableRef.value) {
return tableRef.value.selection || [];
}
return [];
}
// 暴露方法供父组件调用
defineExpose({
handleQuery,
=======
import { ref, onMounted, computed, nextTick, watch } from 'vue';
import { ElMessage, ElMessageBox } from 'element-plus';
// Element Plus 图标导入
@@ -1065,30 +732,10 @@ onMounted(() => {
// 初始化统计信息
calculateTotalStats.value;
>>>>>>> v1.3
});
</script>
<style scoped>
<<<<<<< HEAD
/* 日期tabs样式 */
.date-tabs .el-tabs__header {
margin-bottom: 0;
}
.date-tabs .el-tabs__content {
display: none;
}
:deep(.el-table__header th) {
background-color: #eef9fd !important;
}
:deep(.el-table__row:hover > td) {
background-color: #eef9fd !important;
}
</style>
=======
/* 基础样式 */
.font-bold {
font-weight: 600;
@@ -1270,4 +917,3 @@ onMounted(() => {
text-overflow: ellipsis;
}
</style>
>>>>>>> v1.3

View File

@@ -170,11 +170,7 @@
<script setup>
import { ref, computed, onMounted } from 'vue';
import { ElMessage } from 'element-plus';
<<<<<<< HEAD
import { patientInfoList } from '../../medicalOrderExecution/store/patient.js';
=======
import { patientInfoList } from '../../components/store/patient.js';
>>>>>>> v1.3
import { getSinglePatient } from '../store/patient.js'; // 导入获取单选患者信息的方法
import { formatDateStr } from '@/utils/index';

View File

@@ -22,11 +22,7 @@
>
<el-tab-pane label="今日" name="today"></el-tab-pane>
<el-tab-pane label="昨日" name="yesterday"></el-tab-pane>
<<<<<<< HEAD
<el-tab-pane label="其他" name="other"></el-tab-pane>
=======
<!-- <el-tab-pane label="其他" name="other"></el-tab-pane> -->
>>>>>>> v1.3
</el-tabs>
<!-- 日期选择器 -->
@@ -44,21 +40,13 @@
<!-- 费用类型选择 -->
<el-select
<<<<<<< HEAD
v-model="feeType"
=======
v-model="formParams.chargeItemEnum"
>>>>>>> v1.3
placeholder="请选择费用类型"
clearable
style="width: 150px; margin-right: 20px"
>
<el-option
<<<<<<< HEAD
v-for="type in feeTypeOptions"
=======
v-for="type in med_chrgitm_type"
>>>>>>> v1.3
:key="type.value"
:label="type.label"
:value="type.value"
@@ -67,35 +55,21 @@
<!-- 执行科室选择 -->
<el-select
<<<<<<< HEAD
v-model="execDepartment"
=======
v-model="formParams.orgId"
>>>>>>> v1.3
placeholder="请选择执行科室"
clearable
style="width: 150px; margin-right: 20px"
>
<el-option
<<<<<<< HEAD
v-for="dept in departmentOptions"
:key="dept.value"
:label="dept.label"
:value="dept.value"
=======
v-for="dept in orgOptions"
:key="dept.id"
:label="dept.name"
:value="dept.id"
>>>>>>> v1.3
/>
</el-select>
<!-- 查询按钮 -->
<<<<<<< HEAD
=======
<el-button type="primary" @click="onReset">重置</el-button>
>>>>>>> v1.3
<el-button type="primary" @click="handleQuery">查询</el-button>
</div>
@@ -104,11 +78,7 @@
<el-button @click="handleExport">导出</el-button>
<!-- 打印按钮 -->
<<<<<<< HEAD
<el-button @click="handlePrint" style="margin-left: 15px">打印</el-button>
=======
<!-- <el-button @click="handlePrint" style="margin-left: 15px">打印</el-button> -->
>>>>>>> v1.3
</div>
</div>
@@ -118,19 +88,6 @@
v-loading="loading"
>
<!-- 费用汇总信息 -->
<<<<<<< HEAD
<div style="background-color: white; padding: 15px; margin-bottom: 10px; border-radius: 4px;">
<div style="display: flex; justify-content: space-between; align-items: center">
<div>
<h3 style="margin: 0; font-weight: normal; color: #303133;">费用汇总</h3>
<p style="margin: 5px 0; color: #606266; font-size: 14px;">费用周期{{ formatDateRange() }}</p>
</div>
<div style="text-align: right;">
<p style="margin: 0; font-size: 18px; font-weight: bold; color: #ff4d4f;">
合计金额¥{{ totalAmount.toFixed(2) }}
</p>
<p style="margin: 5px 0; color: #606266; font-size: 14px;">明细项数{{ feeDetailList.length }}</p>
=======
<div style="background-color: white; padding: 15px; margin-bottom: 10px; border-radius: 4px">
<div style="display: flex; justify-content: space-between; align-items: center">
<div>
@@ -146,7 +103,6 @@
<p style="margin: 5px 0; color: #606266; font-size: 14px">
明细项数{{ feeDetailList.length }}
</p>
>>>>>>> v1.3
</div>
</div>
</div>
@@ -156,28 +112,6 @@
:data="feeDetailList"
border
style="width: 100%"
<<<<<<< HEAD
:header-cell-style="{ background: '#eef9fd !important' }"
@sort-change="handleSortChange"
>
<el-table-column label="项目名称" prop="itemName" min-width="200" />
<el-table-column label="费用类型" prop="feeTypeName" width="120" align="center" />
<el-table-column label="单价" prop="unitPrice" width="100" align="center" sortable />
<el-table-column label="数量" prop="quantity" width="100" align="center" sortable />
<el-table-column label="金额" prop="amount" width="100" align="center" sortable>
<template #default="scope">
<span style="color: #ff4d4f">{{ scope.row.amount.toFixed(2) }}</span>
</template>
</el-table-column>
<el-table-column label="执行科室" prop="execDept" width="120" align="center" />
<el-table-column label="执行人" prop="executor" width="100" align="center" />
<el-table-column label="执行日期" prop="executeDate" width="120" align="center" />
<el-table-column label="医保类型" prop="insuranceType" width="100" align="center">
<template #default="scope">
<el-tag v-if="scope.row.insuranceType" size="small">{{ scope.row.insuranceType }}</el-tag>
</template>
</el-table-column>
=======
max-height="400px"
:header-cell-style="{ background: '#eef9fd !important' }"
@sort-change="handleSortChange"
@@ -211,22 +145,14 @@
<el-table-column label="医保类型" prop="chrgitmLv_enumText" width="100" align="center">
</el-table-column>
>>>>>>> v1.3
<el-table-column label="备注" prop="remark" min-width="150" />
</el-table>
<!-- 分页 -->
<<<<<<< HEAD
<div style="margin-top: 15px; display: flex; justify-content: flex-end;">
<el-pagination
v-model:current-page="currentPage"
v-model:page-size="pageSize"
=======
<div style="margin-top: 15px; display: flex; justify-content: flex-end">
<el-pagination
v-model:current-page="formParams.pageNo"
v-model:page-size="formParams.pageSize"
>>>>>>> v1.3
:page-sizes="[10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
@@ -240,26 +166,6 @@
</div>
<!-- 打印预览弹窗 -->
<<<<<<< HEAD
<el-dialog v-model="printDialogVisible" title="打印预览" width="80%" :close-on-click-modal="false">
<div id="print-content">
<div style="text-align: center; margin-bottom: 20px;">
<h2 style="margin: 0;">费用明细清单</h2>
<p style="margin: 5px 0;">患者姓名{{ patientInfo || '未选择患者' }}</p>
<p style="margin: 5px 0;">费用周期{{ formatDateRange() }}</p>
</div>
<table style="width: 100%; border-collapse: collapse;">
<thead>
<tr style="background-color: #eef9fd;">
<th style="border: 1px solid #e4e7ed; padding: 8px;">项目名称</th>
<th style="border: 1px solid #e4e7ed; padding: 8px;">费用类型</th>
<th style="border: 1px solid #e4e7ed; padding: 8px;">单价</th>
<th style="border: 1px solid #e4e7ed; padding: 8px;">数量</th>
<th style="border: 1px solid #e4e7ed; padding: 8px;">金额</th>
<th style="border: 1px solid #e4e7ed; padding: 8px;">执行科室</th>
<th style="border: 1px solid #e4e7ed; padding: 8px;">执行日期</th>
=======
<el-dialog
v-model="printDialogVisible"
title="打印预览"
@@ -283,26 +189,10 @@
<th style="border: 1px solid #e4e7ed; padding: 8px">金额</th>
<th style="border: 1px solid #e4e7ed; padding: 8px">执行科室</th>
<th style="border: 1px solid #e4e7ed; padding: 8px">执行日期</th>
>>>>>>> v1.3
</tr>
</thead>
<tbody>
<tr v-for="item in feeDetailList" :key="item.id">
<<<<<<< HEAD
<td style="border: 1px solid #e4e7ed; padding: 8px;">{{ item.itemName }}</td>
<td style="border: 1px solid #e4e7ed; padding: 8px;">{{ item.feeTypeName }}</td>
<td style="border: 1px solid #e4e7ed; padding: 8px;">{{ item.unitPrice.toFixed(2) }}</td>
<td style="border: 1px solid #e4e7ed; padding: 8px;">{{ item.quantity }}</td>
<td style="border: 1px solid #e4e7ed; padding: 8px;">{{ item.amount.toFixed(2) }}</td>
<td style="border: 1px solid #e4e7ed; padding: 8px;">{{ item.execDept }}</td>
<td style="border: 1px solid #e4e7ed; padding: 8px;">{{ item.executeDate }}</td>
</tr>
</tbody>
<tfoot>
<tr style="background-color: #f5f7fa;">
<td colspan="4" style="border: 1px solid #e4e7ed; padding: 8px; text-align: right; font-weight: bold;">合计</td>
<td colspan="3" style="border: 1px solid #e4e7ed; padding: 8px; color: #ff4d4f; font-weight: bold;">¥{{ totalAmount.toFixed(2) }}</td>
=======
<td style="border: 1px solid #e4e7ed; padding: 8px">{{ item.itemName }}</td>
<td style="border: 1px solid #e4e7ed; padding: 8px">{{ item.feeTypeName }}</td>
<td style="border: 1px solid #e4e7ed; padding: 8px">
@@ -333,16 +223,10 @@
>
¥{{ totalAmount.toFixed(2) }}
</td>
>>>>>>> v1.3
</tr>
</tfoot>
</table>
</div>
<<<<<<< HEAD
=======
>>>>>>> v1.3
<template #footer>
<el-button @click="printDialogVisible = false">关闭</el-button>
<el-button type="primary" @click="doPrint">打印</el-button>
@@ -352,12 +236,6 @@
</template>
<script setup>
<<<<<<< HEAD
import { ref, computed, onMounted } from 'vue';
import { ElMessage } from 'element-plus';
import { patientInfoList } from '../../medicalOrderExecution/store/patient.js';
import { formatDateStr } from '@/utils/index';
=======
import { ref, computed, onMounted, watch, reactive } from 'vue';
import moment from 'moment';
import { ElMessage } from 'element-plus';
@@ -367,28 +245,17 @@ import { getCostDetail } from './api.js';
import { getOrgList } from '../../../basicmanage/ward/components/api.js';
const { proxy } = getCurrentInstance();
const { med_chrgitm_type } = proxy.useDict('med_chrgitm_type');
>>>>>>> v1.3
// 响应式数据
const loading = ref(false);
const feeDetailList = ref([]);
const dateRange = ref('today'); // today, yesterday, other
const dateRangeValue = ref([]);
<<<<<<< HEAD
const feeType = ref('');
=======
>>>>>>> v1.3
const execDepartment = ref('');
const departmentOptions = ref([]);
const feeTypeOptions = ref([]);
const tableRef = ref(null);
const patientInfo = ref('');
<<<<<<< HEAD
// 分页相关
const currentPage = ref(1);
const pageSize = ref(20);
=======
const orgOptions = ref([]);
const formParams = reactive({
chargeItemEnum: undefined,
@@ -406,7 +273,6 @@ const props = defineProps({
});
// 分页相关
>>>>>>> v1.3
const total = ref(0);
// 打印相关
@@ -415,11 +281,7 @@ const printDialogVisible = ref(false);
// 计算总金额
const totalAmount = computed(() => {
return feeDetailList.value.reduce((sum, item) => {
<<<<<<< HEAD
return sum + (item.amount || 0);
=======
return sum + (item.totalPrice || 0);
>>>>>>> v1.3
}, 0);
});
@@ -428,19 +290,6 @@ onMounted(() => {
// 设置默认日期
const today = new Date();
dateRangeValue.value = [formatDateStr(today, 'YYYY-MM-DD'), formatDateStr(today, 'YYYY-MM-DD')];
<<<<<<< HEAD
// 加载科室选项
loadDepartmentOptions();
// 加载费用类型选项
loadFeeTypeOptions();
// 监听患者选择变化
watchPatientSelection();
});
=======
});
watch(
@@ -481,17 +330,12 @@ const getTableList = async () => {
} catch (error) {}
};
>>>>>>> v1.3
// 监听患者选择变化
function watchPatientSelection() {
// 定期检查患者选择状态变化
setInterval(() => {
if (patientInfoList.value && patientInfoList.value.length > 0) {
<<<<<<< HEAD
const selectedPatient = patientInfoList.value.find(patient => patient.selected === true);
=======
const selectedPatient = patientInfoList.value.find((patient) => patient.selected === true);
>>>>>>> v1.3
if (selectedPatient) {
patientInfo.value = selectedPatient.patientName || '';
} else {
@@ -503,21 +347,6 @@ function watchPatientSelection() {
}, 300);
}
<<<<<<< HEAD
// 加载科室选项
function loadDepartmentOptions() {
// 模拟科室数据
departmentOptions.value = [
{ label: '内科', value: 'internal' },
{ label: '外科', value: 'surgery' },
{ label: '儿科', value: 'pediatrics' },
{ label: '妇产科', value: 'obstetrics' },
{ label: '检验科', value: 'laboratory' },
{ label: '影像科', value: 'imaging' },
{ label: '其他科室', value: 'others' },
];
}
=======
/** 查询科室 */
const getLocationInfo = () => {
getOrgList().then((res) => {
@@ -545,7 +374,6 @@ const onReset = () => {
formParams.recordedTimeETime = dateRangeValue.value[1] + ' ' + '23:59:59';
getTableList();
};
>>>>>>> v1.3
// 加载费用类型选项
function loadFeeTypeOptions() {
@@ -582,26 +410,19 @@ function handleDateTabClick(tab) {
break;
// other 情况保持用户选择的值
}
<<<<<<< HEAD
=======
if (!(dateRangeValue.value == null || dateRangeValue.value == undefined)) {
formParams.recordedTimeSTime = dateRangeValue.value[0] + ' ' + '00:00:00';
formParams.recordedTimeETime = dateRangeValue.value[1] + ' ' + '23:59:59';
}
>>>>>>> v1.3
}
// 处理日期选择器变化
function handleDatePickerChange() {
if (dateRangeValue.value.length > 0) {
<<<<<<< HEAD
dateRange.value = 'other';
=======
// dateRange.value = 'other';
} else {
formParams.recordedTimeSTime = undefined;
formParams.recordedTimeETime = undefined;
>>>>>>> v1.3
}
}
@@ -613,195 +434,15 @@ function formatDateRange() {
return '';
}
<<<<<<< HEAD
// 生成模拟数据
function generateMockData() {
// 费用类型映射
const feeTypeMap = {
'examine': '检查费',
'treatment': '治疗费',
'medicine': '药品费',
'material': '材料费',
'bed': '床位费',
'others': '其他费用'
};
// 科室映射
const deptMap = {
'internal': '内科',
'surgery': '外科',
'pediatrics': '儿科',
'obstetrics': '妇产科',
'laboratory': '检验科',
'imaging': '影像科',
'others': '其他科室'
};
// 项目数据池
const itemPools = {
'examine': ['血常规检查', '尿常规检查', '肝功能检查', '肾功能检查', '胸部CT', '心电图', 'B超'],
'treatment': ['静脉输液', '肌肉注射', '氧气吸入', '导尿', '换药', '雾化吸入'],
'medicine': ['抗生素注射液', '维生素C片', '感冒药', '止痛药', '降压药', '消炎药'],
'material': ['一次性输液器', '注射器', '医用棉花', '纱布', '胶带', '一次性手套'],
'bed': ['普通病房床位', 'ICU床位', '单人病房床位', '双人病房床位'],
'others': ['护理费', '诊疗费', '挂号费', '病历费']
};
// 合并所有项目到allItems数组中修复添加这部分代码
let allItems = [];
Object.keys(itemPools).forEach(type => {
itemPools[type].forEach(item => {
allItems.push({
type: type,
name: item
});
});
});
// 筛选条件
if (feeType.value) {
allItems = allItems.filter(item => item.type === feeType.value);
}
// 生成模拟数据
const mockData = [];
const baseDate = new Date(dateRangeValue.value[0]);
const endDate = new Date(dateRangeValue.value[1]);
const daysDiff = Math.ceil((endDate - baseDate) / (1000 * 60 * 60 * 24)) + 1;
// 执行人池
const executors = ['护士A', '护士B', '医生A', '医生B', '技师A'];
// 生成数据
let id = 1;
for (let day = 0; day < daysDiff; day++) {
const currentDate = new Date(baseDate);
currentDate.setDate(baseDate.getDate() + day);
const dateStr = formatDateStr(currentDate, 'YYYY-MM-DD');
// 每天生成3-8条记录
const recordsCount = Math.floor(Math.random() * 6) + 3;
for (let i = 0; i < recordsCount; i++) {
// 随机选择一个项目
const randomItemIndex = Math.floor(Math.random() * allItems.length);
const selectedItem = allItems[randomItemIndex];
// 随机选择一个科室
const deptKeys = Object.keys(deptMap);
const randomDeptKey = deptKeys[Math.floor(Math.random() * deptKeys.length)];
// 如果有科室筛选且不符合,则跳过
if (execDepartment.value && randomDeptKey !== execDepartment.value) {
continue;
}
// 生成随机单价和数量
const unitPrice = Math.floor(Math.random() * 190) + 10; // 10-200元
const quantity = Math.floor(Math.random() * 3) + 1; // 1-4
// 医保类型
const insuranceTypes = ['', '甲类', '乙类', '丙类'];
const insuranceType = insuranceTypes[Math.floor(Math.random() * insuranceTypes.length)];
mockData.push({
id: `item-${id++}`,
itemName: selectedItem.name,
feeType: selectedItem.type,
feeTypeName: feeTypeMap[selectedItem.type],
unitPrice: unitPrice,
quantity: quantity,
amount: unitPrice * quantity,
execDept: deptMap[randomDeptKey],
executor: executors[Math.floor(Math.random() * executors.length)],
executeDate: dateStr,
insuranceType: insuranceType,
remark: ''
});
}
}
return mockData;
}
// 查询按钮点击
function handleQuery() {
// 添加调试日志,查看患者列表数据结构
console.log('患者列表数据:', patientInfoList.value);
// 更灵活的患者选择检测逻辑
let selectedPatient = null;
if (patientInfoList.value && patientInfoList.value.length > 0) {
// 尝试查找选中状态的患者
selectedPatient = patientInfoList.value.find(patient =>
patient.selected === true ||
patient.checked === true ||
patient.isChecked === true ||
(typeof patient.selected === 'string' && patient.selected === '1')
);
// 如果没有明确选中的患者,就使用列表中的第一个患者
if (!selectedPatient) {
selectedPatient = patientInfoList.value[0];
}
}
// 即使没有明确选中的患者标志,也应该允许查询
if (!selectedPatient) {
ElMessage.warning('请先选择患者');
return;
}
// 更新患者信息显示 - 修复:确保正确获取患者姓名
const patientName = selectedPatient.patientName ||
selectedPatient.name ||
selectedPatient.patientInfo ||
selectedPatient.patient ||
'未命名患者';
patientInfo.value = patientName;
loading.value = true;
// 模拟API调用延迟
setTimeout(() => {
try {
// 使用模拟数据
const allData = generateMockData();
total.value = allData.length;
// 分页处理
const start = (currentPage.value - 1) * pageSize.value;
const end = start + pageSize.value;
feeDetailList.value = allData.slice(start, end);
} catch (error) {
console.error('查询错误:', error);
ElMessage.error('查询失败,请重试');
feeDetailList.value = [];
total.value = 0;
} finally {
loading.value = false;
}
}, 500);
=======
// 查询按钮点击
function handleQuery() {
console.log('params=======>', formParams);
getTableList();
>>>>>>> v1.3
}
// 处理排序变化
function handleSortChange({ prop, order }) {
const sortedData = [...feeDetailList.value];
<<<<<<< HEAD
if (order === 'ascending') {
sortedData.sort((a, b) => (a[prop] > b[prop]) ? 1 : -1);
} else if (order === 'descending') {
sortedData.sort((a, b) => (a[prop] < b[prop]) ? 1 : -1);
}
=======
if (order === 'ascending') {
sortedData.sort((a, b) => (a[prop] > b[prop] ? 1 : -1));
@@ -809,50 +450,28 @@ function handleSortChange({ prop, order }) {
sortedData.sort((a, b) => (a[prop] < b[prop] ? 1 : -1));
}
>>>>>>> v1.3
feeDetailList.value = sortedData;
}
// 处理分页大小变化
function handleSizeChange(newSize) {
<<<<<<< HEAD
pageSize.value = newSize;
currentPage.value = 1;
handleQuery();
=======
formParams.pageSize = newSize;
formParams.pageNo = 1;
getTableList();
>>>>>>> v1.3
}
// 处理当前页变化
function handleCurrentChange(newCurrent) {
<<<<<<< HEAD
currentPage.value = newCurrent;
handleQuery();
}
// 导出
function handleExport() {
=======
formParams.pageNo = newCurrent;
getTableList();
}
// 导出
async function handleExport() {
>>>>>>> v1.3
if (feeDetailList.value.length === 0) {
ElMessage.warning('暂无数据可导出');
return;
}
<<<<<<< HEAD
// 模拟导出操作
ElMessage.success('导出成功');
// 实际项目中这里应该调用导出API或使用Excel库生成文件
=======
try {
// 实际项目中这里应该调用导出API或使用Excel库生成文件
@@ -864,7 +483,6 @@ async function handleExport() {
`dict_${new Date().getTime()}.xlsx`
);
} catch (error) {}
>>>>>>> v1.3
}
// 打印预览
@@ -873,11 +491,6 @@ function handlePrint() {
ElMessage.warning('暂无数据可打印');
return;
}
<<<<<<< HEAD
=======
>>>>>>> v1.3
printDialogVisible.value = true;
}
@@ -886,17 +499,10 @@ function doPrint() {
try {
// 获取要打印的内容
const printContent = document.getElementById('print-content').innerHTML;
<<<<<<< HEAD
// 创建临时窗口
const printWindow = window.open('', '_blank');
=======
// 创建临时窗口
const printWindow = window.open('', '_blank');
>>>>>>> v1.3
// 写入内容
printWindow.document.write(`
<html>
@@ -916,11 +522,6 @@ function doPrint() {
</body>
</html>
`);
<<<<<<< HEAD
=======
>>>>>>> v1.3
// 打印
printWindow.document.close();
printWindow.focus();
@@ -954,8 +555,4 @@ defineExpose({
:deep(.el-table__row:hover > td) {
background-color: #eef9fd !important;
}
<<<<<<< HEAD
</style>
=======
</style>
>>>>>>> v1.3

View File

@@ -23,17 +23,11 @@
<el-tab-pane label="在科" name="first" style="padding: 15px 10px">
<PatientList />
</el-tab-pane>
<<<<<<< HEAD
<el-tab-pane label="转科" name="second" style="padding: 0 10px">
<PatientList />
</el-tab-pane>
=======
<!-- 隐藏tab
<el-tab-pane label="转科" name="second" style="padding: 0 10px">
<PatientList />
</el-tab-pane>
-->
>>>>>>> v1.3
</el-tabs>
</div>
@@ -44,15 +38,11 @@
<el-tab-pane label="划价确费" name="billing">
<BillingList ref="billingRef" />
</el-tab-pane>
<<<<<<< HEAD
<el-tab-pane label="医嘱计费" name="orderBilling">
=======
<el-tab-pane label="费用明细查询" name="expenseDetail">
<!-- <FeeDetailQuery :activeTab="activeTab" ref="feeDetailQueryRef" /> -->
<NewfeeDetailQuery :activeTab="activeTab" ref="feeDetailQueryRef" />
</el-tab-pane>
<!-- <el-tab-pane label="医嘱计费" name="orderBilling">
>>>>>>> v1.3
<OrderBilling ref="orderBillingRef" />
</el-tab-pane>
<el-tab-pane label="费用明细查询" name="expenseDetail">
@@ -61,11 +51,7 @@
<el-tab-pane label="预交金查询" name="depositQuery">
<deposit-query ref="depositQueryRef" />
</el-tab-pane>
<<<<<<< HEAD
<!-- <el-tab-pane label="患者流转日志" name="patientFlow">
=======
<el-tab-pane label="患者流转日志" name="patientFlow">
>>>>>>> v1.3
<div style="padding: 20px; text-align: center; color: #909399">患者流转日志功能区域</div>
</el-tab-pane> -->
</el-tabs>
@@ -76,16 +62,10 @@
<script setup>
import { ref, onMounted, nextTick } from 'vue';
import { ElMessage } from 'element-plus';
<<<<<<< HEAD
import PatientList from '../medicalOrderExecution/components/patientList.vue';
import BillingList from './components/billingList.vue';
import FeeDetailQuery from './components/feeDetailQuery.vue';
=======
import PatientList from '../components/patientList.vue';
import BillingList from './components/billingList.vue';
import FeeDetailQuery from './components/feeDetailQuery.vue';
import NewfeeDetailQuery from './components/newfeeDetailQuery.vue';
>>>>>>> v1.3
import DepositQuery from './components/depositQuery.vue';
import OrderBilling from './components/OrderBilling.vue';
@@ -115,11 +95,7 @@ function handleTabChange() {
// 切换到划价确费标签时,刷新数据
if (activeTab.value === 'billing' && billingRef.value) {
nextTick(() => {
<<<<<<< HEAD
billingRef.value.handleQuery();
=======
// billingRef.value.handleQuery();
>>>>>>> v1.3
});
}
// 切换到医嘱计费标签时,刷新数据

View File

@@ -164,11 +164,7 @@
<script setup>
import { getPrescriptionList, adviceExecute, adviceCancel, medicineSummary } from './api';
<<<<<<< HEAD
import { patientInfoList } from '../store/patient.js';
=======
import { patientInfoList } from '../../components/store/patient.js';
>>>>>>> v1.3
import { formatDate, formatDateStr } from '@/utils/index';
import { ref, getCurrentInstance } from 'vue';
import useUserStore from '@/store/modules/user';
@@ -207,58 +203,6 @@ function handleGetPrescription() {
therapyEnum: therapyEnum.value,
exeStatus: props.exeStatus,
requestStatus: props.requestStatus,
<<<<<<< HEAD
}).then((res) => {
// try {
// 根据encounterId分组
const groupedPrescriptions = res.data.records.reduce((groups, prescription) => {
let times = new Set();
let rate = {};
let checkedRates = {};
// 汇总时间点 默认全部汇总
prescription.dispenseIds = [];
prescription.medicineSummaryParamList.forEach((item) => {
// 已汇总的时间点不需要显示
if (item.dispenseStatus != 8) {
prescription.dispenseIds.push({
dispenseId: item.dispenseId,
receiverId: userStore.id,
});
// 将全部的时间点拆分 把日期去重,页面显示示例 05-15 [01:30 02:30 03:30]
let time = item.dispenseTime.substring(5, 10);
let rateTime = item.dispenseTime.substring(11, 16);
times.add(time);
rate[time] = rate[time] || [];
rate[time].push({ rate: rateTime, dispenseId: item.dispenseId });
checkedRates[time] = checkedRates[time] || [];
checkedRates[time].push(rateTime);
}
});
prescription.times = Array.from(times);
prescription.rate = rate;
prescription.checkedRates = checkedRates;
// 把相同encounterId的医嘱放在同一个数组中
const encounterId = prescription.encounterId;
if (!groups[encounterId]) {
groups[encounterId] = [];
}
if (!activeNames.value.includes(encounterId)) {
activeNames.value.push(encounterId);
}
groups[encounterId].push(prescription);
return groups;
}, {});
// 将分组结果转换为数组形式
prescriptionList.value = Object.values(groupedPrescriptions);
loading.value = false;
// } catch {
// loading.value = false;
// }
});
=======
})
.then((res) => {
// try {
@@ -319,7 +263,6 @@ function handleGetPrescription() {
next({ path: '/' });
});
});
>>>>>>> v1.3
chooseAll.value = false;
} else {
prescriptionList.value = [];
@@ -391,8 +334,4 @@ defineExpose({
font-size: 15px;
font-weight: 500;
}
<<<<<<< HEAD
</style>
=======
</style>
>>>>>>> v1.3

View File

@@ -49,11 +49,7 @@
<script setup>
import { getMedicineSummary, getMedicineSummaryDetail } from './api';
<<<<<<< HEAD
import { patientInfoList } from '../store/patient.js';
=======
import { patientInfoList } from '../../components/store/patient.js';
>>>>>>> v1.3
import { ref, getCurrentInstance } from 'vue';
const medicineSummaryFormList = ref([]);

View File

@@ -6,17 +6,6 @@
height: 40px;
display: flex;
align-items: center;
<<<<<<< HEAD
justify-content: flex-end;
border-bottom: solid 2px #e4e7ed;
"
>
<el-icon
@click="refresh"
class="refresh-icon"
style="cursor: pointer; font-size: 20px; margin-right: 10px"
>
=======
justify-content: space-between;
border-bottom: solid 2px #e4e7ed;
padding: 0 10px;
@@ -26,7 +15,6 @@
<ArrowLeft />
</el-icon> -->
<el-icon @click="refresh" class="refresh-icon" style="cursor: pointer; font-size: 20px">
>>>>>>> v1.3
<Refresh />
</el-icon>
</div>
@@ -34,39 +22,6 @@
<el-tab-pane label="在科" name="first" style="padding: 15px 10px">
<PatientList />
</el-tab-pane>
<<<<<<< HEAD
<el-tab-pane label="转科" name="second" style="padding: 0 10px">
<PatientList />
</el-tab-pane>
</el-tabs>
</div>
<div style="width: 100%">
<div
style="
height: 40px;
display: flex;
align-items: center;
border-bottom: solid 2px #e4e7ed;
padding: 0 15px;
background: linear-gradient(90deg, #f0f8ff, #e6f7ff);
"
>
<div class="nav-button-group">
<el-button
v-for="nav in navigationButtons"
:key="nav.path"
:type="currentRoute.path === nav.path ? 'primary' : 'default'"
size="small"
@click="navigateTo(nav.path)"
class="nav-button"
:class="{ 'active-nav': currentRoute.path === nav.path }"
>
<el-icon v-if="nav.icon"><component :is="nav.icon" /></el-icon>
<span>{{ nav.label }}</span>
</el-button>
</div>
</div>
=======
<!-- 隐藏转科列表
<el-tab-pane label="转科" name="second" style="padding: 0 10px">
<PatientList />
@@ -76,7 +31,6 @@
</div>
<div style="width: 100%">
<!-- <NurseNavBar :navs="navigationButtons" /> -->
>>>>>>> v1.3
<div
style="
height: 50px;
@@ -148,16 +102,6 @@
<script setup>
import { getCurrentInstance, ref } from 'vue';
<<<<<<< HEAD
import { useRoute, useRouter } from 'vue-router';
import PatientList from './components/patientList.vue';
import PrescriptionList from './components/prescriptionList.vue';
import SummaryMedicineList from './components/summaryMedicineList.vue';
const { proxy } = getCurrentInstance();
const router = useRouter();
const currentRoute = useRoute();
=======
import { useRouter } from 'vue-router';
import PatientList from '../components/patientList.vue';
import NurseNavBar from '../components/NurseNavBar.vue';
@@ -167,7 +111,6 @@ import { inpatientNurseNavs } from '../constants/navigation';
const { proxy } = getCurrentInstance();
const router = useRouter();
>>>>>>> v1.3
const activeName = ref('preparation');
const active = ref('first');
@@ -181,53 +124,7 @@ const isDetails = ref('1');
// 存储子组件引用的对象
const prescriptionRefs = ref();
<<<<<<< HEAD
// 导航按钮配置
const navigationButtons = ref([
{
label: '入出转',
path: '/inHospital/statistics/inOut',
icon: 'Document',
},
{
label: '护理记录',
path: '/inHospital/statistics/nursingRecord',
icon: 'MedicineBox',
},
{
label: '三测单',
path: '/inHospital/statistics/tprChart',
icon: 'List',
},
{
label: '医嘱执行',
path: '/inHospital/statistics/medicalOrderExecution',
icon: 'Back',
},
{
label: '医嘱校对',
path: '/inHospital/statistics/medicalOrderProofread',
icon: 'Back',
},
{
label: '汇总发药申请',
path: '/inHospital/statistics/drugDistribution',
icon: 'Back',
},
{
label: '住院记账',
path: '/inHospital/statistics/InpatientBilling',
icon: 'Back',
},
]);
// 页面导航方法
const navigateTo = (path) => {
router.push(path);
};
=======
const navigationButtons = inpatientNurseNavs;
>>>>>>> v1.3
// 定义处方列表tabs配置
const prescriptionTabs = [
@@ -282,13 +179,10 @@ function handleExecute() {
proxy.$refs['prescriptionRefs'].handleMedicineSummary();
}
<<<<<<< HEAD
=======
function handleBack() {
router.back();
}
>>>>>>> v1.3
provide('handleGetPrescription', (value) => {
prescriptionRefs.value.handleGetPrescription();
});
@@ -316,31 +210,4 @@ provide('handleGetPrescription', (value) => {
:deep(.el-tabs__header) {
margin: 0;
}
<<<<<<< HEAD
.nav-button-group {
display: flex;
gap: 10px;
}
.nav-button {
transition: all 0.3s ease;
border-radius: 20px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}
.nav-button:hover {
transform: translateY(-2px);
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15);
}
.nav-button.active-nav {
box-shadow: 0 4px 8px rgba(64, 158, 255, 0.3);
}
.nav-button :deep(.el-icon) {
margin-right: 5px;
}
=======
>>>>>>> v1.3
</style>

View File

@@ -226,12 +226,8 @@
<script setup>
import { getPrescriptionList, adviceExecute, adviceCancel, adviceNoExecute } from './api';
<<<<<<< HEAD
import { patientInfoList } from '../store/patient.js';
=======
import { patientInfoList } from '../../components/store/patient.js';
import { lotNumberMatch } from '@/api/public';
>>>>>>> v1.3
import { formatDate, formatDateStr } from '@/utils/index';
import { ref, getCurrentInstance, nextTick } from 'vue';
@@ -465,27 +461,6 @@ function handleNoExecute() {
});
}
<<<<<<< HEAD
// 不执行
function handleNoExecute() {
let list = getSelectRows();
list = list.map((item) => {
return {
requestId: item.requestId,
encounterId: item.encounterId,
patientId: item.patientId,
adviceTable: item.adviceTable,
executeTimes: item.executeTimes,
};
});
console.log(list, 'list');
adviceNoExecute({ adviceExecuteDetailList: list }).then((res) => {
if (res.code == 200) {
handleGetPrescription();
}
});
}
// 取消执行
function handleCancel() {
let list = getSelectRows();
@@ -500,22 +475,6 @@ function handleCancel() {
})
);
});
=======
// 取消执行
function handleCancel() {
let list = getSelectRows();
let producerIds = [];
list.forEach((item) => {
producerIds.push(
...item.procedureIds.map((value) => {
return {
procedureId: value,
therapyEnum: item.therapyEnum,
};
})
);
});
>>>>>>> v1.3
adviceCancel({ adviceExecuteDetailList: producerIds }).then((res) => {
if (res.code == 200) {
handleGetPrescription();
@@ -564,18 +523,6 @@ function getDateRange(startDate, endDate) {
function handleRateChange(value, date, time, row, rateItem) {
// 拼接当前选中时间
<<<<<<< HEAD
let tiemStr = row.year + '-' + date + ' ' + time + ':00';
let index = row.executeTimes.indexOf(tiemStr);
debugger;
if (value) {
row.executeTimes.push(tiemStr);
row.procedureIds.push(rateItem.producerId);
} else {
row.executeTimes.splice(row.executeTimes.indexOf(tiemStr), 1);
row.procedureIds.splice(row.executeTimes.indexOf(rateItem.producerId), 1);
}
=======
let timeStr = row.year + '-' + date + ' ' + time + ':00';
let timeIndex = row.executeTimes.indexOf(timeStr);
@@ -606,7 +553,6 @@ function handleRateChange(value, date, time, row, rateItem) {
nextTick(() => {
checkAndToggleRowSelection(row);
});
>>>>>>> v1.3
}
function handelSwicthChange(value) {

View File

@@ -65,22 +65,8 @@
</el-form-item>
<el-form-item prop="tenantId">
<span class="descriptions-item-label" style="margin: 0 10px 0 0">连接医保</span>
<<<<<<< HEAD
<el-switch v-model="loginForm.invokeYb" @change="topNavChange" size="large"/>
</el-form-item>
<el-form-item class="login-options">
<el-checkbox v-model="loginForm.rememberMe" class="remember-me">记住我</el-checkbox>
<el-link type="primary" class="forgot-password" @click="handleForgotPassword">忘记密码</el-link>
</el-form-item>
<!-- <el-form-item prop="tenantId"> -->
<!-- <span class="descriptions-item-label" style="margin: 0 10px 0 0">连接医保</span> -->
<!-- <el-switch v-model="loginForm.invokeYb" @change="topNavChange" size="large"/> -->
<!-- </el-form-item> -->
=======
<el-switch v-model="loginForm.invokeYb" @change="topNavChange" size="large" />
</el-form-item>
>>>>>>> v1.3
<!--<el-form-item prop="code" v-if="captchaEnabled">
<el-input
v-model="loginForm.code"
@@ -137,9 +123,6 @@
<span><el-link :underline="false">Cookies</el-link></span>
</div>
<span>
<<<<<<< HEAD
<el-link :underline="false">Copyright © 2025 上海经创贺联信息技术有限公司 All Rights Reserved. </el-link>
=======
<el-link
:underline="false"
href="https://open.tntlinking.com/communityTreaty"
@@ -148,7 +131,6 @@
>Copyright © 2025 湖北天天数链技术有限公司 本系统软件源代码许可来源于
天天开源软件社区版许可协议 https://open.tntlinking.com/communityTreaty
</el-link>
>>>>>>> v1.3
</span>
</div>
</div>

View File

@@ -166,20 +166,12 @@ import {
reject,
init,
getpurchaseInventoryDetail,
<<<<<<< HEAD
getpurchaseInventoryDetailReturn
} from "./components/api";
import { purchaseInventoryApproved as purchaseReturnApproved } from '../returnedPurchase/components/api';
import { useStore } from '@/store/store';
import { formatDate } from '@/utils/index';
=======
getpurchaseInventoryDetailReturn,
} from './components/api';
import { useStore } from '@/store/store';
import { formatDate } from '@/utils/index';
import ChkstockDetailsDialog from '@/views/medicationmanagement/chkstock/components/chkstockDetailsDialog.vue';
import TransferDetailsDialog from '@/views/medicationmanagement/transferManagent/components/transferDetailsDialog.vue';
>>>>>>> v1.3
import useTagsViewStore from '@/store/modules/tagsView';
const router = useRouter();
const route = useRoute();
@@ -257,28 +249,8 @@ function handelApply(row) {
proxy.$modal.msgSuccess('操作成功');
getList();
}
<<<<<<< HEAD
})
}else if(row.typeEnum == 5){ // 采购退货审批通过
console.log("采购退货审批通过typeEnum:", row.typeEnum);
console.log("供应单据号:", row.supplyBusNo);
purchaseReturnApproved(row.supplyBusNo).then((res) => {
console.log("采购退货审批结果:", res);
if (res.code == 200) {
proxy.$modal.msgSuccess("操作成功");
getList();
} else {
proxy.$modal.msgError("操作失败: " + (res.msg || "未知错误"));
}
}).catch((error) => {
console.error("采购退货审批错误:", error);
proxy.$modal.msgError("操作异常: " + error.message);
});
}else{
=======
});
} else {
>>>>>>> v1.3
purchaseInventoryApproved(row.supplyBusNo).then((res) => {
if (res.code == 200) {
proxy.$modal.msgSuccess('操作成功');
@@ -290,30 +262,17 @@ function handelApply(row) {
// 审批,查看
function handelApplys(row, view) {
<<<<<<< HEAD
if (row.typeEnum == 2) {
=======
if (row.typeEnum == 100086) {
>>>>>>> v1.3
//商品调拨
// 跳转到审核页面
router.replace({
path: '/medicationmanagement/transferManagement/transferManagent',
query: { supplyBusNo: row.supplyBusNo, view: view },
});
<<<<<<< HEAD
} else if (row.typeEnum == 8) {
//8 批量
router.replace({
path: '/medicationmanagement/transferManagement/batchTransfer',
query: { supplyBusNo: row.supplyBusNo, view: view },
});
=======
} else if (row.typeEnum == 8 || row.typeEnum == 2) {
//8 批量
isApply.value = true;
proxy.$refs['tranDetailsDialogRef'].open(row.supplyBusNo);
>>>>>>> v1.3
} else if (row.typeEnum == 7) {
//领用出库审批通过
router.replace({
@@ -327,17 +286,9 @@ function handelApplys(row, view) {
query: { supplyBusNo: row.supplyBusNo, view: view },
});
} else if (row.typeEnum == 4) {
<<<<<<< HEAD
//盘点审批
router.replace({
path: '/medicationmanagement/chkstock/chkstockPart',
query: { supplyBusNo: row.supplyBusNo, view: view },
});
=======
isApply.value = true;
//盘点审批
proxy.$refs['detailsDialogRef'].open(row.supplyBusNo);
>>>>>>> v1.3
} else if (row.typeEnum == 10) {
// 批量盘点
router.replace({

View File

@@ -37,11 +37,8 @@
>
</el-col>
</el-row>
<<<<<<< HEAD
=======
<el-button type="primary" plain @click="handleExport" v-if="viewStatus == 'view'">导出</el-button>
>>>>>>> v1.3
<el-form
:model="receiptHeaderForm"
ref="receiptHeaderRef"
@@ -586,11 +583,7 @@
:prop="`purchaseinventoryList.${scope.$index}.manufacturerText`"
:rules="tableRules.manufacturerText"
>
<<<<<<< HEAD
<el-input v-model="scope.row.manufacturer" placeholder="" disabled />
=======
<el-input v-model="scope.row.manufacturerText" placeholder="" disabled />
>>>>>>> v1.3
</el-form-item>
</template>
</el-table-column>
@@ -710,22 +703,12 @@ import {
addBatch, //保存批量盘点
productStocktakingApproved,
reject,
<<<<<<< HEAD
getpharmacyCabinetList
} from "../components/api";
import PopoverList from "@/components/OpenHis/popoverList/index.vue";
import MedicineList from "../components/medicineList.vue";
import TraceNoDialog from '@/components/OpenHis/TraceNoDialog/index.vue'
import { formatDate,formatDateymd } from "@/utils/index";
import { ref } from "vue";
=======
} from '../components/api';
import PopoverList from '@/components/OpenHis/popoverList/index.vue';
import MedicineList from '../components/medicineList.vue';
import TraceNoDialog from '@/components/OpenHis/TraceNoDialog/index.vue';
import { formatDate, formatDateymd } from '@/utils/index';
import { ref } from 'vue';
>>>>>>> v1.3
const router = useRouter();
const route = useRoute();
@@ -1576,11 +1559,7 @@ function getDetailAll() {
// form.purchaseinventoryList[index].statusMaxvalue = false
e.volume = e.totalVolume;
e.name = e.itemName;
<<<<<<< HEAD
e.manufacturer = e.manufacturerText;
=======
e.manufacturerText = e.manufacturerText;
>>>>>>> v1.3
if (e.purposeTypeEnum) {
warehous_type.value.map((item) => {
if (item.value == e.purposeTypeEnum) {
@@ -1710,11 +1689,7 @@ function getDetail(type) {
form.purchaseinventoryList[index].statusMaxvalue = false;
e.volume = e.totalVolume;
e.name = e.itemName;
<<<<<<< HEAD
e.manufacturer = e.manufacturerText;
=======
e.manufacturerText = e.manufacturerText;
>>>>>>> v1.3
if (e.purposeTypeEnum) {
warehous_type.value.map((item) => {
if (item.value == e.purposeTypeEnum) {
@@ -2097,11 +2072,7 @@ function handleReject() {
store.clearCurrentDataPLPDALL();
// 跳转到审核页面
router.replace({
<<<<<<< HEAD
path: '/aaaa/medicationmanagement/billapproval',
=======
path: '/aaaa/billapproval',
>>>>>>> v1.3
query: { type: 'chkstockBatch' },
});
}
@@ -2118,11 +2089,7 @@ function handelApply() {
store.clearCurrentDataPLPDALL();
// 跳转到审核页面
router.replace({
<<<<<<< HEAD
path: '/aaaa/medicationmanagement/billapproval',
=======
path: '/aaaa/billapproval',
>>>>>>> v1.3
query: { type: 'chkstockBatch' },
});
}
@@ -2199,13 +2166,9 @@ function getStockReceiptTypeList() {
console.log('详情页查询下拉树response1111111', response);
// categoryListOptions.value = response.data.categoryListOptions; // 药品类型
<<<<<<< HEAD
profitReasonOptions.value = response.data.profitReasonOptions; // 盈亏原因
=======
profitReasonOptions.value = response.data.profitReasonOptions; // 盈亏原因
// receiptHeaderForm.purposeTypeEnum = warehous_type.value[0].value // 仓库类型默认值
// handleChangePurposeTypeEnum(receiptHeaderForm.purposeTypeEnum)
>>>>>>> v1.3
// cabinetListOptionsBk.value = response.data.purposeTypeListOptions; // 盘点仓库列表(未过滤)
// purposeTypeListOptions.value = cabinetListOptionsBk.value.filter(item => item.formEnum === receiptHeaderForm.purposeTypeEnum) // 盘点仓库列表
@@ -2316,31 +2279,6 @@ function totalQuantityChange(rowData, index, value) {
editBatchTransfer(index);
}
// 切换仓库类型获取药房/药库列表 目的仓库切换
<<<<<<< HEAD
function handleChangePurposeTypeEnum(value,type) {
// 确保value是数字类型
const numValue = Number(value);
// 清空已选择的盘点仓库
if(!route.query.supplyBusNo&&!type){
receiptHeaderForm.purposeLocationId = ''
receiptHeaderForm.purposeLocationId1 = ''
}
// 根据选择的仓库类型调用不同的API获取对应类型的仓库列表
if (numValue === 16 || numValue === 11) {
// 使用统一接口获取药房或药库列表
getpharmacyCabinetList().then((res) => {
// 过滤出符合当前类型的仓库列表
const filteredList = res.data.filter(item => item.formEnum === numValue);
purposeTypeListOptions.value = filteredList;
// 调用getinitValue设置默认仓库和货位
getinitValue();
}).catch((error) => {
console.error('获取仓库列表失败:', error);
purposeTypeListOptions.value = [];
freightListOptions.value = [];
=======
function handleChangePurposeTypeEnum(value, type) {
if (value == 16) {
getPharmacyList().then((res) => {
@@ -2359,7 +2297,6 @@ function handleChangePurposeTypeEnum(value, type) {
receiptHeaderForm.purposeLocationId1 = '';
}
// getinitValue()
>>>>>>> v1.3
});
} else if (numValue === 17) {
// 处理耗材库类型
@@ -2443,8 +2380,6 @@ function handleTraceNo(value, row, index) {
}
getStockReceiptTypeList(); // 详情页查询下拉树结构
getbusNo(); // 单据号取得
<<<<<<< HEAD
=======
// 导出
const exportRequiredParams = ref({
@@ -2461,7 +2396,6 @@ function handleExport() {
`批量盘点单明细_${proxy.formatDateStr(new Date(), 'YYYY-MM-DD')}.xlsx`
);
}
>>>>>>> v1.3
</script>
<style scoped>
.custom-tree-node {

View File

@@ -6,28 +6,6 @@
"paperType": "自定义",
"height": 130,
"width": 210,
<<<<<<< HEAD
"paperHeader": 0,
"paperFooter": 365.6692913385827,
"paperNumberDisabled": true,
"paperNumberContinue": true,
"expandCss": "",
"overPrintOptions": {
"content": "",
"opacity": 0.7,
"type": 1
},
"watermarkOptions": {
"content": "",
"fillStyle": "rgba(184, 184, 184, 0.3)",
"fontSize": "14px",
"rotate": 25,
"width": 200,
"height": 200,
"timestamp": false,
"format": "YYYY-MM-DD HH:mm"
},
=======
"paperHeader": 73.5,
"paperFooter": 337.5,
"paperNumberDisabled": true,
@@ -35,7 +13,6 @@
"expandCss": "",
"overPrintOptions": {},
"watermarkOptions": {},
>>>>>>> v1.3
"panelLayoutOptions": {},
"printElements": [
{
@@ -44,11 +21,7 @@
"top": 12,
"height": 12,
"width": 115.5,
<<<<<<< HEAD
"title": "长春大学医院盘点单",
=======
"title": "长春市朝阳区中医院医院盘点单",
>>>>>>> v1.3
"coordinateSync": false,
"widthHeightSync": false,
"fontSize": 12,
@@ -99,11 +72,7 @@
"top": 33,
"height": 9.75,
"width": 120,
<<<<<<< HEAD
"title": "机构:长春大学医院",
=======
"title": "机构:长春市朝阳区中医院医院",
>>>>>>> v1.3
"coordinateSync": false,
"widthHeightSync": false,
"qrCodeLevel": 0
@@ -149,11 +118,7 @@
"tableQRCodeLevel": 0,
"tableSummaryTitle": true,
"tableSummary": "",
<<<<<<< HEAD
"width": 50.418660151829066,
=======
"width": 59.68821015182906,
>>>>>>> v1.3
"field": "name",
"checked": true,
"columnId": "name",
@@ -168,11 +133,7 @@
"tableQRCodeLevel": 0,
"tableSummaryTitle": true,
"tableSummary": "",
<<<<<<< HEAD
"width": 47.38277249096388,
=======
"width": 46.07372249096389,
>>>>>>> v1.3
"field": "volume",
"checked": true,
"columnId": "volume",
@@ -187,17 +148,10 @@
"tableQRCodeLevel": 0,
"tableSummaryTitle": true,
"tableSummary": "",
<<<<<<< HEAD
"width": 70.82692033621548,
"field": "manufacturer",
"checked": true,
"columnId": "manufacturer",
=======
"width": 62.86642033621548,
"field": "manufacturerText",
"checked": true,
"columnId": "manufacturerText",
>>>>>>> v1.3
"fixed": false,
"rowspan": 1,
"colspan": 1
@@ -313,8 +267,6 @@
"colspan": 1
},
{
<<<<<<< HEAD
=======
"title": "厂家/产地",
"titleSync": false,
"halign": "center",
@@ -330,7 +282,6 @@
"colspan": 1
},
{
>>>>>>> v1.3
"title": "盘前库存",
"titleSync": false,
"align": "center",
@@ -461,31 +412,8 @@
},
{
"options": {
<<<<<<< HEAD
"left": 480,
"top": 130.5,
"height": 12,
"width": 109.5,
"title": "盈亏合计",
"field": "totalAmount",
"coordinateSync": false,
"widthHeightSync": false,
"qrCodeLevel": 0,
"formatter": "function(title,value,options,templateData,target,paperNo){\n return value + ' 元'\n}"
},
"printElementType": {
"title": "文本",
"type": "text"
}
},
{
"options": {
"left": 261.24609375,
"top": 130.74609375,
=======
"left": 456,
"top": 343.5,
>>>>>>> v1.3
"height": 12,
"width": 109.5,
"title": "制单人",
@@ -502,8 +430,4 @@
]
}
]
<<<<<<< HEAD
}
=======
}
>>>>>>> v1.3

View File

@@ -4,114 +4,12 @@ import {parseStrEmpty} from '@/utils/openhis';
// 查询盘点列表
export function getStockTakeList (query) {
return request ({
<<<<<<< HEAD
url: '/nurse-station/orgdevice-stocktake/summary-from',
=======
url: '/nurse-station/org-device-stockTake/summary-from',
>>>>>>> v1.3
method: 'get',
params: query,
});
}
<<<<<<< HEAD
// 盘点编辑页列表
export function getstocktakingDetail (busNo) {
return request ({
url: '/inventory-manage/stocktaking/stocktaking-receipt',
method: 'get',
params: {busNo}, // 确保参数正确传递
});
}
// 添加/编辑入库单据
export function addProductStocktaking (data) {
return request ({
url: '/inventory-manage/stocktaking/product-stocktaking',
method: 'put',
data: data,
});
}
// 查询盘点列表初始化查询区数据
export function getInit () {
return request ({
url: '/inventory-manage/stocktaking/init',
method: 'get',
});
}
// 查询盘点详情初始化查询区数据
export function getDetailInit () {
return request ({
url: '/inventory-manage/stocktaking/detail-init',
method: 'get',
});
}
// 生成批量盘点
export function getStocktakingReceiptBatch () {
return request ({
url: '/inventory-manage/stocktaking/stocktaking-receipt-batch',
method: 'get',
});
}
//保存批量盘点
export function addBatch (data) {
return request ({
url: '/inventory-manage/stocktaking/stocktaking-receipt-addBatch',
method: 'put',
data: data,
});
}
// 删除单据
export function delProductStocktaking (param) {
return request ({
url: '/inventory-manage/stocktaking/product-stocktaking?supplyRequestIds=' +
param,
method: 'delete',
});
}
// 提交审批
export function submitApproval (busNo) {
return request ({
url: '/inventory-manage/stocktaking/submit-approval',
method: 'put',
data: busNo,
});
}
// 撤回审批
export function withdrawApproval (busNo) {
return request ({
url: '/inventory-manage/stocktaking/withdraw-approval',
method: 'put',
data: busNo,
});
}
// 获取药品目录
export function getMedicineList (queryParams) {
return request ({
url: '/app-common/inventory-item',
method: 'get',
params: queryParams,
});
}
// 获取药品目录
export function getCount (queryParams) {
return request ({
url: '/inventory-manage/purchase/inventory-item-info',
method: 'get',
params: queryParams,
});
}
=======
>>>>>>> v1.3
// 获取药房列表
export function getPharmacyList () {
return request ({
@@ -127,13 +25,6 @@ export function getDispensaryList () {
method: 'get',
});
}
<<<<<<< HEAD
export function stocktakingReceiptAuto () {
return request ({
url: '/inventory-manage/stocktaking/stocktaking-receipt-auto',
method: 'get',
=======
// 获取药品目录
export function getMedicineList (queryParams) {
return request ({
@@ -148,6 +39,5 @@ export function saveOrgDeviceSummary (data) {
url: '/nurse-station/org-device-stockTake/org-device-summary',
method: 'put',
data,
>>>>>>> v1.3
});
}

View File

@@ -35,11 +35,7 @@
align="center"
prop="doseUnitCode_dictText"
/> -->
<<<<<<< HEAD
<el-table-column label="生产厂家" align="center" prop="manufacturer" />
=======
<el-table-column label="生产厂家" align="center" prop="manufacturerText" />
>>>>>>> v1.3
<el-table-column
label="编码"
align="center"

View File

@@ -1,10 +1,6 @@
<template>
<div class="app-container">
<<<<<<< HEAD
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch">
=======
<el-form :model="queryParams" ref="queryRef" :inline="true" :rules="rules">
>>>>>>> v1.3
<el-form-item label="项目名称" prop="name">
<el-input
v-model="queryParams.name"
@@ -14,11 +10,7 @@
@keyup.enter="handleQuery"
/>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="仓库类型" prop="purposeTypeEnum">
=======
<el-form-item label="仓库" prop="purposeTypeEnum">
>>>>>>> v1.3
<el-select
v-model="queryParams.purposeTypeEnum"
placeholder="请选择"
@@ -26,10 +18,7 @@
filterable
style="width: 200px"
@change="handleChangePurposeTypeEnum"
<<<<<<< HEAD
=======
@keyup.enter="handleQuery"
>>>>>>> v1.3
>
<el-option
v-for="item in warehous_type"
@@ -39,34 +28,18 @@
/>
</el-select>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="盘点仓库" prop="purposeLocationId">
<el-select
v-model="queryParams.purposeLocationId"
=======
<el-form-item label="盘点仓库" prop="sourceLocationId">
<el-select
v-model="queryParams.sourceLocationId"
>>>>>>> v1.3
placeholder="请选择"
clearable
filterable
style="width: 200px"
<<<<<<< HEAD
@change="handleCabinetChange(receiptHeaderForm.purposeLocationId)"
>
<el-option
v-for="item in [
{ id: 1, name: '仓库1' },
{ id: 2, name: '仓库2' },
]"
=======
:disabled="!queryParams.purposeTypeEnum"
@keyup.enter="handleQuery"
>
<el-option
v-for="item in purposeTypeListOptions"
>>>>>>> v1.3
:key="item.id"
:label="item.name"
:value="item.id"
@@ -81,19 +54,6 @@
filterable
style="width: 200px"
>
<<<<<<< HEAD
<el-option
v-for="item in [
{ id: 1, name: '货位1' },
{ id: 2, name: '货位2' },
]"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
=======
<el-option v-for="item in []" :key="item.id" :label="item.name" :value="item.id" />
</el-select>
</el-form-item>
@@ -108,14 +68,11 @@
format="YYYY-MM-DD"
></el-date-picker>
</el-form-item>
>>>>>>> v1.3
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<<<<<<< HEAD
=======
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
@@ -129,17 +86,13 @@
>
</el-col>
</el-row>
>>>>>>> v1.3
<el-table
v-loading="loading"
:data="dataList"
@selection-change="handleSelectionChange"
height="calc(100vh - 250px)"
>
<<<<<<< HEAD
=======
<el-table-column type="selection" width="55" align="center" fixed></el-table-column>
>>>>>>> v1.3
<el-table-column
label="项目"
align="center"
@@ -149,16 +102,6 @@
fixed
></el-table-column>
<el-table-column label="规格" align="center" prop="totalVolume" />
<<<<<<< HEAD
<el-table-column label="厂家/产地" align="center" prop="manufacturer" show-overflow-tooltip />
<el-table-column label="产品批号" align="center" prop="lotNumber" />
<el-table-column label="单价" align="center" key="unit" prop="unitPrice" />
<el-table-column label="发放数量" align="center" prop="dispenseQuantity" />
<el-table-column label="库存数量" align="center" prop="quantity" />
<el-table-column label="盈亏数量" align="center" prop="itemQuantity">
<template #default="scope">
<el-input v-model="scope.row.itemQuantity" :input-style="{ textAlign: 'center' }" type="number" />
=======
<el-table-column label="厂家/产地" align="center" prop="manufacturerText" show-overflow-tooltip />
<el-table-column label="产品批号" align="center" prop="lotNumber" />
<el-table-column label="单价(元)" align="center" key="unit" prop="unitPrice" />
@@ -188,7 +131,6 @@
<el-table-column label="盈亏数量" align="center" prop="profitLoss">
<template #default="scope">
{{ calcProfitLoss(scope.row) }}
>>>>>>> v1.3
</template>
</el-table-column>
<el-table-column label="单位" align="center" prop="unitCode_dictText" />
@@ -197,14 +139,9 @@
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope">
<el-button
<<<<<<< HEAD
size="mini"
type="text"
=======
size="small"
type="primary"
link
>>>>>>> v1.3
icon="Check"
@click="handleSave(scope.row)"
v-hasPermi="['chkstock:partDeptDevice:edit']"
@@ -216,27 +153,6 @@
</div>
</template>
<script setup>
<<<<<<< HEAD
import { ref, reactive, toRaw, computed, watch, onMounted } from 'vue';
const { proxy } = getCurrentInstance();
import { getStockTakeList } from './components/api.js';
const { warehous_type } = proxy.useDict('warehous_type');
const dataList = ref([]);
const queryParams = reactive({
// pageNo: 1,
// pageSize: 10,
});
const loading = ref(false);
const showSearch = ref(true);
const total = ref(0);
// 获取列表
const getList = () => {
loading.value = true;
getStockTakeList(queryParams.value).then((res) => {
loading.value = false;
dataList.value = res.data;
total.value = res.data.length;
=======
import { ref, reactive, getCurrentInstance, onMounted } from 'vue';
import {
getStockTakeList,
@@ -271,33 +187,12 @@ const getList = () => {
getStockTakeList(params).then((res) => {
loading.value = false;
dataList.value = res.data;
>>>>>>> v1.3
});
};
// 搜索
const handleQuery = () => {
getList();
};
<<<<<<< HEAD
// 重置
const resetQuery = () => {
queryParams.value = {};
handleQuery();
};
// 重置
const reset = () => {};
// 多选
const handleSelectionChange = (selection) => {};
// 保存
const handleSave = (row) => {
console.log(row);
// 校验盈亏数量
if (row.itemQuantity == '' || row.itemQuantity == null) {
proxy.$modal.msgWarning('盈亏数量不能为空');
return;
}
=======
// 重置
const resetQuery = () => {
@@ -367,7 +262,6 @@ const handleSave = (row) => {
}
const payload = buildSummaryPayload(targetRows);
>>>>>>> v1.3
proxy.$modal
.confirm('确定保存吗?', '保存', {
confirmButtonText: '保存',
@@ -375,15 +269,6 @@ const handleSave = (row) => {
type: 'warning',
})
.then(() => {
<<<<<<< HEAD
proxy.$modal.msgSuccess('保存成功');
getList();
})
.catch(() => {});
};
const handleChangePurposeTypeEnum = (val) => {};
const handleCabinetChange = (val) => {};
=======
saveOrgDeviceSummary(payload).then(() => {
proxy.$modal.msgSuccess('保存成功');
getList();
@@ -407,7 +292,6 @@ const handleChangePurposeTypeEnum = (val) => {
getList();
};
>>>>>>> v1.3
onMounted(() => {
getList();
});

View File

@@ -33,11 +33,7 @@
"top": 13.5,
"height": 12,
"width": 75,
<<<<<<< HEAD
"title": "长春大学医院",
=======
"title": "长春市朝阳区中医院医院",
>>>>>>> v1.3
"coordinateSync": false,
"widthHeightSync": false,
"fontSize": 12,
@@ -88,11 +84,7 @@
"top": 33,
"height": 9.75,
"width": 120,
<<<<<<< HEAD
"title": "机构:长春大学医院",
=======
"title": "机构:长春市朝阳区中医院医院",
>>>>>>> v1.3
"coordinateSync": false,
"widthHeightSync": false,
"qrCodeLevel": 0

View File

@@ -39,17 +39,9 @@
>
</el-col>
</el-row>
<<<<<<< HEAD
<el-button type="primary" icon="View" @click="handlePrintPreview">
预览单据
</el-button>
<el-button type="success" plain icon="Printer" @click="handlePrint">
打印单据
=======
<el-button type="primary" plain icon="Printer" @click="handlePrint"> 打印单据 </el-button>
<el-button type="primary" plain @click="handleExport" v-if="viewStatus == 'view'">
导出
>>>>>>> v1.3
</el-button>
<el-form
:model="receiptHeaderForm"
@@ -260,15 +252,7 @@
:prop="`purchaseinventoryList.${scope.$index}.manufacturerText`"
:rules="tableRules.manufacturerText"
>
<<<<<<< HEAD
<el-input
v-model="scope.row.manufacturerText"
placeholder=""
disabled
/>
=======
<el-input v-model="scope.row.manufacturerText" placeholder="" disabled />
>>>>>>> v1.3
</el-form-item>
</template>
</el-table-column>
@@ -792,18 +776,6 @@ const data = reactive({
medicationType: [{ required: true, message: "请选择药品类型", trigger: "change" }],
},
tableRules: {
<<<<<<< HEAD
itemId: [{ required: true, message: "项目不能为空", trigger: "blur" }],
statusEnum_enumText: [{ required: true, message: "规格不能为空", trigger: "blur" }],
unitCode: [{ required: true, message: "计量单位不能为空", trigger: "blur" }],
purposeLocationId: [{ required: true, message: "目的仓库不能为空", trigger: "blur" }],
lotNumber: [{ required: true, message: "产品批号不能为空", trigger: "change" }],
startTime: [{ required: true, message: "开始时间不能为空", trigger: "blur" }],
endTime: [{ required: true, message: "结束时间不能为空", trigger: "blur" }],
price: [{ required: true, message: "单价不能为空", trigger: "blur" }],
invoiceNo: [{ required: true, message: "发票号不能为空", trigger: "blur" }],
totalPrice: [{ required: true, message: "总价不能为空", trigger: "blur" }],
=======
itemId: [{ required: true, message: '项目不能为空', trigger: 'blur' }],
statusEnum_enumText: [{ required: true, message: '规格不能为空', trigger: 'blur' }],
unitCode: [{ required: true, message: '计量单位不能为空', trigger: 'blur' }],
@@ -814,7 +786,6 @@ const data = reactive({
price: [{ required: true, message: '单价不能为空', trigger: 'blur' }],
invoiceNo: [{ required: true, message: '发票号不能为空', trigger: 'blur' }],
totalPrice: [{ required: true, message: '总价不能为空', trigger: 'blur' }],
>>>>>>> v1.3
},
});
@@ -905,26 +876,16 @@ onUnmounted(() => {
function addNewRow() {
// 先校验表头表单
<<<<<<< HEAD
proxy.$refs["receiptHeaderRef"].validate((valid) => {
=======
proxy.$refs['receiptHeaderRef'].validate((valid) => {
>>>>>>> v1.3
if (valid) {
// 检查表格中是否有未保存的行
const unsavedRows = form.purchaseinventoryList.filter((row) => !row.isSave);
if (unsavedRows.length > 0) {
// 校验表格中未保存的行
<<<<<<< HEAD
proxy.$refs["formRef"].validate((tableValid) => {
if (!tableValid) {
proxy.$message.warning("请先完善当前行的必填信息后再添加新行");
=======
proxy.$refs['formRef'].validate((tableValid) => {
if (!tableValid) {
proxy.$message.warning('请先完善当前行的必填信息后再添加新行');
>>>>>>> v1.3
return;
}
@@ -936,39 +897,6 @@ function addNewRow() {
// 检查必填字段
if (!row.itemId || !row.name) {
<<<<<<< HEAD
errors.push("项目");
}
if (!row.volume) {
errors.push("规格");
}
if (!row.unitCode) {
errors.push("计量单位");
}
if (!row.purposeLocationId) {
errors.push("仓库");
}
if (!row.itemQuantity || row.itemQuantity === "" || row.itemQuantity === 0) {
errors.push("采购数量");
}
if (!row.lotNumber) {
errors.push("产品批号");
}
if (!row.startTime) {
errors.push("生产日期");
}
if (!row.endTime) {
errors.push("有效期至");
}
if (!row.price || row.price === "" || row.price === 0) {
errors.push("采购单价");
}
if (!row.invoiceNo || row.invoiceNo === "") {
errors.push("发票号");
}
if (!row.totalPrice || row.totalPrice === "" || row.totalPrice === 0) {
errors.push("合计金额");
=======
errors.push('项目');
}
if (!row.volume) {
@@ -1000,17 +928,12 @@ function addNewRow() {
}
if (!row.totalPrice || row.totalPrice === '' || row.totalPrice === 0) {
errors.push('合计金额');
>>>>>>> v1.3
}
if (errors.length > 0) {
invalidRows.push({
rowIndex: rowIndex + 1,
<<<<<<< HEAD
errors: errors.join("、"),
=======
errors: errors.join('、'),
>>>>>>> v1.3
});
}
});
@@ -1018,40 +941,14 @@ function addNewRow() {
if (invalidRows.length > 0) {
const errorMsg = invalidRows
.map((item) => `${item.rowIndex}行缺少:${item.errors}`)
<<<<<<< HEAD
.join("");
proxy.$message.warning(errorMsg + ",请完善后再添加新行");
=======
.join('');
proxy.$message.warning(errorMsg + ',请完善后再添加新行');
>>>>>>> v1.3
return;
}
// 所有校验通过,允许新增
const newRow = {
rowKey: Date.now(),
<<<<<<< HEAD
id: "",
itemTable: "",
itemQuantity: "",
itemId: "",
unitCode: "",
remake: "",
supplierId: "",
purposeTypeEnum: "",
purposeLocationId: null,
purposeLocationStoreId: null,
practitionerId: "",
traceNo: "",
invoiceNo: "-",
startTime: "",
endTime: "",
price: "",
totalPrice: "",
sellPrice: "",
minSellPrice: "",
=======
id: '',
itemTable: '',
itemQuantity: '',
@@ -1071,7 +968,6 @@ function addNewRow() {
totalPrice: '',
sellPrice: '',
minSellPrice: '',
>>>>>>> v1.3
unitList: {}, // 单位列表
isEditing: true, // 标记当前行是否正在编辑
error: false, // 新增 error 字段
@@ -1084,27 +980,6 @@ function addNewRow() {
// 没有未保存的行,直接新增
const newRow = {
rowKey: Date.now(),
<<<<<<< HEAD
id: "",
itemTable: "",
itemQuantity: "",
itemId: "",
unitCode: "",
remake: "",
supplierId: "",
purposeTypeEnum: "",
purposeLocationId: null,
purposeLocationStoreId: null,
practitionerId: "",
traceNo: "",
invoiceNo: "-",
startTime: "",
endTime: "",
price: "",
totalPrice: "",
sellPrice: "",
minSellPrice: "",
=======
id: '',
itemTable: '',
itemQuantity: '',
@@ -1124,7 +999,6 @@ function addNewRow() {
totalPrice: '',
sellPrice: '',
minSellPrice: '',
>>>>>>> v1.3
unitList: {}, // 单位列表
isEditing: true, // 标记当前行是否正在编辑
error: false, // 新增 error 字段
@@ -1233,15 +1107,6 @@ function selectRow(rowValue, index) {
form.purchaseinventoryList[index].unitCode = rowValue.unitCode;
form.purchaseinventoryList[index].manufacturerText = rowValue.manufacturerText;
form.purchaseinventoryList[index].partPercent = rowValue.partPercent;
<<<<<<< HEAD
form.purchaseinventoryList[index].invoiceNo = "-";
form.purchaseinventoryList[index].price = (rowValue.purchaseAmount || 0).toFixed(2);
price.value = (rowValue.purchaseAmount || 0).toFixed(2);
form.purchaseinventoryList[index].unitList = rowValue.unitList[0];
unitMap.value["unitCode"] = rowValue.unitCode;
unitMap.value["minUnitCode"] = rowValue.minUnitCode;
unitMap.value["currentCode"] = rowValue.unitCode;
=======
form.purchaseinventoryList[index].invoiceNo = '-';
form.purchaseinventoryList[index].price = rowValue.purchaseAmount || 0;
price.value = rowValue.purchaseAmount || 0;
@@ -1249,7 +1114,6 @@ function selectRow(rowValue, index) {
unitMap.value['unitCode'] = rowValue.unitCode;
unitMap.value['minUnitCode'] = rowValue.minUnitCode;
unitMap.value['currentCode'] = rowValue.unitCode;
>>>>>>> v1.3
form.purchaseinventoryList[index].itemQuantity = 0;
form.purchaseinventoryList[index].totalPrice = 0;
}
@@ -1274,17 +1138,9 @@ function handleLocationClick(item, row, index) {
row.unitList.minUnitCode_dictText
) || 0;
<<<<<<< HEAD
form.purchaseinventoryList[index].itemTable = res.data[0].itemTable || "";
form.purchaseinventoryList[index].startTime =
formatDateymd(res.data[0].productionDate) || "";
form.purchaseinventoryList[index].endTime =
formatDateymd(res.data[0].expirationDate) || "";
=======
form.purchaseinventoryList[index].itemTable = res.data[0].itemTable || '';
form.purchaseinventoryList[index].startTime = formatDateymd(res.data[0].productionDate) || '';
form.purchaseinventoryList[index].endTime = formatDateymd(res.data[0].expirationDate) || '';
>>>>>>> v1.3
startTimeOld.value = form.purchaseinventoryList[index].startTime
? form.purchaseinventoryList[index].startTime
: "";
@@ -1510,11 +1366,7 @@ function addPurchaseinventorys(rowList) {
}
function handleTraceNoInput(value, row) {
<<<<<<< HEAD
row.traceNo = value.concat(",");
=======
row.traceNo = value.concat(',');
>>>>>>> v1.3
}
/** 选择条数 */
@@ -1794,16 +1646,6 @@ function formatPrintData() {
),
printDate: new Date().toLocaleString("zh-CN"),
...receiptHeaderForm,
<<<<<<< HEAD
purchaseinventoryList: form.purchaseinventoryList.map((item, index) => ({
...item,
rowNumber: index + 1,
itemQuantity: Number(item.itemQuantity) || 0,
price: Number(item.price).toFixed(2),
totalPrice: Number(item.totalPrice).toFixed(2),
})),
};
=======
purchaseinventoryList: form.purchaseinventoryList,
});
const printElements = templateJson;
@@ -1812,7 +1654,6 @@ function formatPrintData() {
printer: 'EPSON LQ-80KFII',
title: '打印标题',
}); //开始打印
>>>>>>> v1.3
}
function deleteSelectedRows() {
@@ -1854,11 +1695,7 @@ function handleTotalAmount() {
/** 重置操作表单 */
function reset() {
<<<<<<< HEAD
proxy.resetForm("receiptHeaderRef");
=======
proxy.resetForm('receiptHeaderRef');
>>>>>>> v1.3
form.purchaseinventoryList = [];
// 完全重置所有表单字段
Object.assign(receiptHeaderForm, {
@@ -1967,13 +1804,8 @@ function handleReject() {
store.clearCurrentData();
// 跳转到审核页面
router.replace({
<<<<<<< HEAD
path: "/aaaa/medicationmanagement/billapproval",
query: { type: "purchaseDocument" },
=======
path: '/aaaa/billapproval',
query: { type: 'purchaseDocument' },
>>>>>>> v1.3
});
}
});
@@ -1989,13 +1821,8 @@ function handelApply() {
store.clearCurrentData();
// 跳转到审核页面
router.replace({
<<<<<<< HEAD
path: "/aaaa/medicationmanagement/billapproval",
query: { type: "purchaseDocument" },
=======
path: '/aaaa/billapproval',
query: { type: 'purchaseDocument' },
>>>>>>> v1.3
});
}
})

View File

@@ -653,11 +653,7 @@ function handleDelete(row) {
return item.id;
});
}
<<<<<<< HEAD
console.log(ids, 'ids');
=======
const deleteIds = selectedRows.value.map((item) => item.supplierId).join(',');
>>>>>>> v1.3
proxy.$modal
.confirm('是否确认删除以上数据?')
.then(function () {

View File

@@ -1,32 +1,6 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryRef" :inline="true" label-width="100px">
<<<<<<< HEAD
</el-form>
<el-table
v-loading="loading"
:data="basicInformationDetailsList"
@selection-change="handleSelectionChange"
height="calc(100vh - 300px)"
>
<el-table-column type="selection" width="50" align="center" />
<el-table-column
label="序号"
align="center"
key="no"
prop="no"
width="200"
:show-overflow-tooltip="true"
/>
<el-table-column
label="数据上报日期"
align="center"
key="dataReportingDate"
prop="dataReportingDate"
width="200"
:show-overflow-tooltip="true"
>
=======
<el-form-item label="药品类别:" prop="itemTypeCode">
<el-select multiple v-model="queryParams.itemTypeCode" clearable style="width: 200px">
<el-option v-for="category in itemList" :key="category.value" :label="category.label"
@@ -58,68 +32,11 @@
<el-table-column label="序号" align="center" key="no" prop="no" width="200" :show-overflow-tooltip="true" />
<el-table-column label="数据上报日期" align="center" key="dataReportingDate" prop="dataReportingDate" width="200"
:show-overflow-tooltip="true">
>>>>>>> v1.3
<template #default="scope">
<span>{{ parseTime(scope.row.occurrenceTime) }}</span>
</template>
</el-table-column>
<!-- itemTable -->
<<<<<<< HEAD
<el-table-column
label="省级行政区划代码"
align="center"
key="provinceCodes"
prop="provinceCodes"
width="200"
:show-overflow-tooltip="true"
/>
<el-table-column
label="组织机构代码"
align="center"
key="organizationCode"
prop="organizationCode"
width="200"
:show-overflow-tooltip="true"
/>
<el-table-column
label="医疗机构代码"
align="center"
key="medicalCode"
prop="medicalCode"
width="200"
:show-overflow-tooltip="true"
/>
<el-table-column
label="组织机构名称"
align="center"
key="organizationName"
prop="organizationName"
width="200"
:show-overflow-tooltip="true"
/>
<el-table-column
label="年度药品总收入(元)"
align="center"
key="yearMedicineTotalRevenue"
prop="yearMedicineTotalRevenue"
:show-overflow-tooltip="true"
/>
<el-table-column
label="实有床位数"
align="center"
key="actualBedsNo"
prop="actualBedsNo"
:show-overflow-tooltip="true"
/>
</el-table>
<pagination
v-show="total > 0"
:total="total"
v-model:page="queryParams.pageNo"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
=======
<el-table-column label="省级行政区划代码" align="center" key="provinceCodes" prop="provinceCodes" width="200"
:show-overflow-tooltip="true" />
<el-table-column label="组织机构代码" align="center" key="organizationCode" prop="organizationCode" width="200"
@@ -135,19 +52,10 @@
</el-table>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize"
@pagination="getList" />
>>>>>>> v1.3
</div>
</template>
<script setup name="basicInformationDetails">
<<<<<<< HEAD
import {
getReportBasicInformationDetails,
} from './statisticalManagent';
const basicInformationDetailsList = ref([]);
const loading = ref(true);
=======
import { ElMessage } from 'element-plus';
import {
getReportBasicInformationDetails,
@@ -156,7 +64,6 @@ import { onMounted } from 'vue';
const basicInformationDetailsList = ref([]);
const loading = ref(false);
>>>>>>> v1.3
const ids = ref([]);
const single = ref(true);
const multiple = ref(true);
@@ -164,11 +71,7 @@ const total = ref(0);
const approvalTime = ref([]);
const supplierListOptions = ref([]);
const locationIdList = ref([]);
<<<<<<< HEAD
=======
const occurrenceTime = ref([]);
>>>>>>> v1.3
const data = reactive({
form: {},
queryParams: {
@@ -177,19 +80,13 @@ const data = reactive({
searchKey: undefined,
occurrenceTimeSTime: undefined,
occurrenceTimeETime: undefined,
<<<<<<< HEAD
=======
occurrenceTime,
itemTypeCode:[]
>>>>>>> v1.3
},
rules: {},
});
const { queryParams, form, rules } = toRefs(data);
<<<<<<< HEAD
=======
const { proxy } = getCurrentInstance();
const { fin_type_code } = proxy.useDict(
'fin_type_code'
@@ -211,19 +108,10 @@ onMounted(() => {
console.log("fin_type_code:",fin_type_code);
})
>>>>>>> v1.3
function getList() {
loading.value = true;
getReportBasicInformationDetails(queryParams.value).then((res) => {
loading.value = false;
<<<<<<< HEAD
basicInformationDetailsList.value = res.data.records;
total.value = res.data.total;
});
}
getList();
=======
basicInformationDetailsList.value = res.data
});
}
@@ -258,7 +146,6 @@ function handleExport() {
`年度药品总收入_${proxy.formatDateStr(new Date(), 'YYYY-MM-DD')}.xlsx`
);
}
>>>>>>> v1.3
</script>
<style scoped>
.custom-tree-node {

View File

@@ -25,16 +25,6 @@
v-model="queryParams.medCategoryCodes"
placeholder="请选择药品类别"
clearable
<<<<<<< HEAD
style="width: 150px"
@change="handleQuery"
>
<el-option
v-for="categoryCode in item_category_code"
:key="categoryCode.value"
:label="categoryCode.label"
:value="categoryCode.value"
=======
multiple
filterable
style="width: 260px"
@@ -47,7 +37,6 @@
:key="dict.value"
:label="dict.label"
:value="dict.value"
>>>>>>> v1.3
/>
</el-select>
</el-form-item>
@@ -100,11 +89,7 @@
/>
</el-select>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="库存范围:" prop="zeroFlag">
=======
<el-form-item label="库存范围" prop="zeroFlag">
>>>>>>> v1.3
<el-select
v-model="queryParams.zeroFlag"
placeholder="请选择库存范围"
@@ -120,11 +105,7 @@
/>
</el-select>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="仓库药房:" prop="locationId">
=======
<el-form-item label="仓库药房" prop="locationId">
>>>>>>> v1.3
<el-select
v-model="locationId"
placeholder="请选择仓库药房"
@@ -141,11 +122,7 @@
/>
</el-select>
</el-form-item>
<<<<<<< HEAD
<el-form-item label="供应商:" prop="supplierId">
=======
<el-form-item label="供应商" prop="supplierId">
>>>>>>> v1.3
<el-select
v-model="supplierId"
placeholder="请选择供应商"
@@ -162,8 +139,6 @@
/>
</el-select>
</el-form-item>
<<<<<<< HEAD
=======
<el-form-item label="备份日期" prop="backUpDate">
<el-date-picker
v-model="queryParams.backUpDate"
@@ -174,7 +149,6 @@
style="width: 150px"
/>
</el-form-item>
>>>>>>> v1.3
</el-form>
<el-row :gutter="10" class="mb8">
@@ -303,11 +277,7 @@
:show-overflow-tooltip="true"
>
<template #default="scope">
<<<<<<< HEAD
<span>{{ scope.row.purchasePrice?.toFixed(2) + ' 元' }}</span>
=======
<span>{{ scope.row.purchasePrice?.toFixed(3) + ' 元' }}</span>
>>>>>>> v1.3
</template>
</el-table-column>
<el-table-column
@@ -320,11 +290,7 @@
:show-overflow-tooltip="true"
>
<template #default="scope">
<<<<<<< HEAD
<span>{{ scope.row.salePrice?.toFixed(2) + ' 元' }}</span>
=======
<span>{{ scope.row.salePrice?.toFixed(3) + ' 元' }}</span>
>>>>>>> v1.3
</template>
</el-table-column>
<el-table-column
@@ -337,11 +303,7 @@
:show-overflow-tooltip="true"
>
<template #default="scope">
<<<<<<< HEAD
<span>{{ scope.row.totalPurchasePrice?.toFixed(2) + ' 元' }}</span>
=======
<span>{{ scope.row.totalPurchasePrice?.toFixed(3) + ' 元' }}</span>
>>>>>>> v1.3
</template>
</el-table-column>
<el-table-column
@@ -354,11 +316,7 @@
:show-overflow-tooltip="true"
>
<template #default="scope">
<<<<<<< HEAD
<span>{{ scope.row.totalSalePrice?.toFixed(2) + ' 元' }}</span>
=======
<span>{{ scope.row.totalSalePrice?.toFixed(3) + ' 元' }}</span>
>>>>>>> v1.3
</template>
</el-table-column>
<el-table-column
@@ -508,31 +466,18 @@ import {
cancelSupply,
stopSupply,
productPageTotal,
<<<<<<< HEAD
=======
productBackupPageTotal,
getproductReturnBackUpPage,
>>>>>>> v1.3
} from './statisticalManagent';
import traceabilityCodeManagement from './traceabilityCodeManagement.vue';
import { formatDateStr } from '@/utils/index';
import { getSupplierList } from '@/api/public';
import { useStore } from '@/store/store';
<<<<<<< HEAD
=======
import { computed, watch } from 'vue';
>>>>>>> v1.3
const store = useStore();
const { proxy } = getCurrentInstance();
<<<<<<< HEAD
const { item_category_code, inventory_range } = proxy.useDict(
'item_category_code',
'inventory_range'
);
=======
const { item_category_code, inventory_range, device_category_code, med_category_code } =
proxy.useDict(
'item_category_code',
@@ -546,7 +491,6 @@ const medCategoryCodeOptions = computed(() => {
const deviceCategoryCodeOptions = computed(() => {
return [{ value: 'all', label: '全部' }, ...device_category_code.value];
});
>>>>>>> v1.3
const purchaseinventoryList = ref([]);
const visible = ref(false);
const recordInfo = ref({});
@@ -597,9 +541,6 @@ watch(
},
{ immediate: true } // 修正拼写错误
);
<<<<<<< HEAD
=======
watch(
() => queryParams.value.backUpDate,
(newValue, oldValue) => {
@@ -648,7 +589,6 @@ function handleChangeDeviceCategoryCode(value) {
queryParams.value.devCategoryCodes = value || [];
}
}
>>>>>>> v1.3
function getPharmacyCabinetLists() {
getPharmacyCabinetList().then((response) => {
locationIdList.value = response.data;
@@ -660,18 +600,6 @@ function getPharmacyCabinetLists() {
chrgitmLv_enumTextOptions.value = response.data.chrgitmLvOptions;
});
}
<<<<<<< HEAD
/** 查询调拨管理项目列表 */
function getList() {
console.log(store.remainingDays, '1');
loading.value = true;
salePriceTotal.value = 0;
priceTotal.value = 0;
queryParams.value.locationIds = locationId.value.join(',');
queryParams.value.supplierIds = supplierId.value.join(',');
getproductReturnPage(queryParams.value).then((res) => {
=======
/** 查询备份日期库存明细列表 */
function getBackUpList() {
loading.value = true;
@@ -695,7 +623,6 @@ function getBackUpList() {
backUpDate: undefined,
};
getproductReturnBackUpPage(params).then((res) => {
>>>>>>> v1.3
loading.value = false;
purchaseinventoryList.value = res.data.records;
if (purchaseinventoryList.value && purchaseinventoryList.value.length > 0) {
@@ -707,9 +634,6 @@ function getBackUpList() {
}
total.value = res.data.total;
});
<<<<<<< HEAD
productPageTotal(queryParams.value).then((res) => {
=======
productBackupPageTotal(params).then((res) => {
salePriceTotal.value = res.data.purchasePriceStatistics;
priceTotal.value = res.data.salePriceStatistics;
@@ -746,7 +670,6 @@ function getList() {
total.value = res.data.total;
});
productPageTotal(params).then((res) => {
>>>>>>> v1.3
salePriceTotal.value = res.data.purchasePriceStatistics;
priceTotal.value = res.data.salePriceStatistics;
});

View File

@@ -203,15 +203,11 @@
show-summary 每页单独合计-->
<el-table-column type="selection" width="60px" align="center" />
<el-table-column
<<<<<<< HEAD
v-if="inventoryScope == 1 || inventoryScope == 3 || inventoryScope == 5"
=======
v-if="
queryParams.inventoryScope == 1 ||
queryParams.inventoryScope == 3 ||
queryParams.inventoryScope == 5
"
>>>>>>> v1.3
label="发药人"
align="center"
key="practitionerName"
@@ -220,15 +216,11 @@
:show-overflow-tooltip="true"
/>
<el-table-column
<<<<<<< HEAD
v-if="inventoryScope == 1 || inventoryScope == 3 || inventoryScope == 5"
=======
v-if="
queryParams.inventoryScope == 1 ||
queryParams.inventoryScope == 3 ||
queryParams.inventoryScope == 5
"
>>>>>>> v1.3
label="发药单号"
align="center"
key="dispenseNo"
@@ -237,17 +229,12 @@
:show-overflow-tooltip="true"
/>
<el-table-column
<<<<<<< HEAD
v-if="inventoryScope == 2 || inventoryScope == 4 || inventoryScope == 6"
:label="inventoryScope == 2 ? '门诊号' : '住院号'"
=======
v-if="
queryParams.inventoryScope == 2 ||
queryParams.inventoryScope == 4 ||
queryParams.inventoryScope == 6
"
:label="queryParams.inventoryScope == 2 ? '门诊号' : '住院号'"
>>>>>>> v1.3
align="center"
key="outpatientNo"
prop="outpatientNo"
@@ -261,15 +248,11 @@
</template>
</el-table-column> -->
<el-table-column
<<<<<<< HEAD
v-if="inventoryScope == 2 || inventoryScope == 4 || inventoryScope == 6"
=======
v-if="
queryParams.inventoryScope == 2 ||
queryParams.inventoryScope == 4 ||
queryParams.inventoryScope == 6
"
>>>>>>> v1.3
label="处方号"
align="center"
key="prescriptionNo"
@@ -278,15 +261,11 @@
:show-overflow-tooltip="true"
/>
<el-table-column
<<<<<<< HEAD
v-if="inventoryScope == 2 || inventoryScope == 4 || inventoryScope == 6"
=======
v-if="
queryParams.inventoryScope == 2 ||
queryParams.inventoryScope == 4 ||
queryParams.inventoryScope == 6
"
>>>>>>> v1.3
label="病人"
align="center"
key="patientName"
@@ -295,15 +274,11 @@
:show-overflow-tooltip="true"
/>
<el-table-column
<<<<<<< HEAD
v-if="inventoryScope == 2 || inventoryScope == 4 || inventoryScope == 6"
=======
v-if="
queryParams.inventoryScope == 2 ||
queryParams.inventoryScope == 4 ||
queryParams.inventoryScope == 6
"
>>>>>>> v1.3
label="发药人"
align="center"
key="practitionerName"
@@ -312,15 +287,11 @@
:show-overflow-tooltip="true"
/>
<el-table-column
<<<<<<< HEAD
v-if="inventoryScope == 2 || inventoryScope == 4 || inventoryScope == 6"
=======
v-if="
queryParams.inventoryScope == 2 ||
queryParams.inventoryScope == 4 ||
queryParams.inventoryScope == 6
"
>>>>>>> v1.3
label="发药单号"
align="center"
key="dispenseNo"
@@ -337,11 +308,7 @@
:show-overflow-tooltip="true"
/>
<el-table-column
<<<<<<< HEAD
v-if="inventoryScope == 1 || inventoryScope == 3"
=======
v-if="queryParams.inventoryScope == 1 || queryParams.inventoryScope == 3"
>>>>>>> v1.3
label="药品编码"
align="center"
key="busNo"
@@ -359,11 +326,7 @@
:show-overflow-tooltip="true"
/> -->
<el-table-column
<<<<<<< HEAD
v-if="inventoryScope == 1 || inventoryScope == 3"
=======
v-if="queryParams.inventoryScope == 1 || queryParams.inventoryScope == 3"
>>>>>>> v1.3
label="医保编码"
align="center"
key="ybNo"
@@ -541,10 +504,6 @@ const multiple = ref(true);
const total = ref(0);
const occurrenceTime = ref([]);
const practitionerNameOptions = ref([]);
<<<<<<< HEAD
const inventoryScope = ref(1);
=======
>>>>>>> v1.3
const locationIdList = ref([]);
const data = reactive({
@@ -561,11 +520,8 @@ const data = reactive({
// patientName: undefined,
dispenseTimeSTime: undefined,
dispenseTimeETime: undefined,
<<<<<<< HEAD
=======
inventoryScope: 1,
flag: 2,
>>>>>>> v1.3
},
rules: {},
});
@@ -580,16 +536,6 @@ watch(
},
{ immediate: true }
);
<<<<<<< HEAD
watch(
() => inventoryScope.value,
(newVlaue) => {
inventoryScope.value = newVlaue;
},
{ immediate: true }
);
=======
>>>>>>> v1.3
// 监听路由变化
watch(
() => route.query,
@@ -611,11 +557,8 @@ watch(
queryParams.value.dispenseTimeETime = newQuery.occurrenceTimeETime + ' 23:59:59';
}
queryParams.value.flag = 1;
<<<<<<< HEAD
=======
console.log('11111111111111');
>>>>>>> v1.3
// 执行查询
getList();
}
@@ -667,13 +610,9 @@ const arraySpanMethod = ({ row, column, rowIndex, columnIndex }) => {
// 合并一样的列住院号 outpatientNumber属性
if (
columnIndex === 1 &&
<<<<<<< HEAD
(inventoryScope.value == 2 || inventoryScope.value == 4 || inventoryScope.value == 6)
=======
(queryParams.value.inventoryScope == 2 ||
queryParams.value.inventoryScope == 4 ||
queryParams.value.inventoryScope == 6)
>>>>>>> v1.3
) {
if (
rowIndex === 0 ||
@@ -757,18 +696,12 @@ const getSummaries = (param) => {
};
function inventoryChange(val) {
<<<<<<< HEAD
inventoryScope.value = val;
xiaojiTotal.value = [];
purchaseinventoryList.value = [];
=======
xiaojiTotal.value = [];
purchaseinventoryList.value = [];
console.log('val=======>', val);
queryParams.value.flag = val == 1 || val == 2 ? 2 : 1;
console.log('queryParams=======>', JSON.stringify(queryParams));
>>>>>>> v1.3
getList();
}
function getPharmacyCabinetLists() {
@@ -801,196 +734,6 @@ function getPharmacyCabinetLists() {
}
/** 查询调拨管理项目列表 */
function getList(type) {
<<<<<<< HEAD
if (type) {
xiaojiTotal.value = [];
purchaseinventoryList.value = [];
}
loading.value = true;
// let queryParamsValues ={...queryParams.value}
// delete queryParamsValues.inventoryScope
if (inventoryScope.value == 1 || inventoryScope.value == 3 || inventoryScope.value == 5) {
var dispensePrice = 0;
var refundPrice = 0;
getAmbPractitionerDetail(queryParams.value).then((res) => {
purchaseinventoryList.value = res.data.records;
total.value = res.data.total;
loading.value = false;
if (purchaseinventoryList.value.length == 0) {
return;
}
purchaseinventoryList.value.map((k) => {
k.dispensePrice = k.dispensePrice || '0.00';
k.refundPrice = k.refundPrice || '0.00';
k.dispenseQuantity = k.dispenseQuantity
? k.dispenseQuantity + k.unitCode_dictText
: '0.00' + k.unitCode_dictText;
k.refundQuantity = k.refundQuantity
? k.refundQuantity + k.refundUnitCode_dictText
: '0.00' + k.unitCode_dictText;
if (total.value && total.value <= queryParams.value.pageSize) {
dispensePrice += Number(k.dispensePrice);
refundPrice += Number(k.refundPrice);
}
});
// 1页数据
if (total.value && total.value <= queryParams.value.pageSize) {
dispensePrice = dispensePrice ? dispensePrice.toFixed(4) : dispensePrice;
refundPrice = refundPrice ? refundPrice.toFixed(4) : refundPrice;
let pageNoAll = total.value / queryParams.value.pageSize;
if (Math.ceil(pageNoAll) == queryParams.value.pageNo) {
purchaseinventoryList.value.push({
practitionerName: '合计',
dispensePrice: dispensePrice,
refundPrice: refundPrice,
});
}
}
// 带分页数据
if (total.value && total.value > queryParams.value.pageSize) {
let queryParamsValue = {
pageNo: 1,
pageSize: total.value,
};
getAmbPractitionerDetail(queryParamsValue).then((res) => {
purchaseinventoryListAll.value = res.data.records || [];
if (purchaseinventoryListAll.value.length > 0) {
purchaseinventoryListAll.value.map((k) => {
k.dispensePrice = k.dispensePrice || '0.00';
k.refundPrice = k.refundPrice || '0.00';
k.dispenseQuantity = k.dispenseQuantity
? k.dispenseQuantity + k.unitCode_dictText
: '0.00' + k.unitCode_dictText;
k.refundQuantity = k.refundQuantity
? k.refundQuantity + k.refundUnitCode_dictText
: '0.00' + k.unitCode_dictText;
dispensePrice += Number(k.dispensePrice);
refundPrice += Number(k.refundPrice);
});
dispensePrice = dispensePrice ? dispensePrice.toFixed(4) : dispensePrice;
refundPrice = refundPrice ? refundPrice.toFixed(4) : refundPrice;
let pageNoAll = total.value / queryParams.value.pageSize;
if (Math.ceil(pageNoAll) == queryParams.value.pageNo) {
purchaseinventoryList.value.push({
practitionerName: '合计',
dispensePrice: dispensePrice,
refundPrice: refundPrice,
});
}
}
});
}
});
} else if (inventoryScope.value == 2 || inventoryScope.value == 4 || inventoryScope.value == 6) {
var dispensePrice2 = 0;
var refundPrice2 = 0;
getAmbMedicationDetail(queryParams.value).then((res) => {
purchaseinventoryList.value = res.data.records;
total.value = res.data.total;
if (purchaseinventoryList.value.length == 0) {
return;
}
purchaseinventoryList.value.map((k) => {
k.dispensePrice = k.dispensePrice || '0.00';
k.refundPrice = k.refundPrice || '0.00';
k.dispenseQuantity = k.dispenseQuantity
? k.dispenseQuantity + k.unitCode_dictText
: '0.00' + k.unitCode_dictText;
k.refundQuantity = k.refundQuantity
? k.refundQuantity + k.refundUnitCode_dictText
: '0.00' + k.unitCode_dictText;
if (total.value && total.value <= queryParams.value.pageSize) {
dispensePrice2 += Number(k.dispensePrice);
refundPrice2 += Number(k.refundPrice);
}
});
// 1页数据
if (total.value && total.value <= queryParams.value.pageSize) {
dispensePrice2 = dispensePrice2 ? dispensePrice2.toFixed(4) : dispensePrice2;
refundPrice2 = refundPrice2 ? refundPrice2.toFixed(4) : refundPrice2;
let pageNoAll = total.value / queryParams.value.pageSize;
if (Math.ceil(pageNoAll) == queryParams.value.pageNo) {
purchaseinventoryList.value.push({
prescriptionNo: '合计',
dispensePrice: dispensePrice2,
refundPrice: refundPrice2,
});
}
}
loading.value = false;
// 带分页数据
if (total.value && total.value > queryParams.value.pageSize) {
let queryParamsValue = {
pageNo: 1,
pageSize: total.value,
};
getAmbMedicationDetail(queryParamsValue).then((res) => {
purchaseinventoryListAll.value = res.data.records;
if (purchaseinventoryListAll.value.length == 0) {
return;
}
purchaseinventoryListAll.value.map((k, index) => {
k.dispensePrice = k.dispensePrice || '0.00';
k.refundPrice = k.refundPrice || '0.00';
k.dispenseQuantity = k.dispenseQuantity
? k.dispenseQuantity + k.unitCode_dictText
: '0.00' + k.unitCode_dictText;
k.refundQuantity = k.refundQuantity
? k.refundQuantity + k.refundUnitCode_dictText
: '0.00' + k.unitCode_dictText;
dispensePrice2 += Number(k.dispensePrice);
refundPrice2 += Number(k.refundPrice);
//处理每页门诊号相同数据分开不在一页的问题start
for (let m = 1; m < queryParams.value.pageSize && m < index; m++) {
if (
queryParams.value.pageNo > 1 &&
index == queryParams.value.pageSize * (queryParams.value.pageNo - 1) &&
k.outpatientNo == purchaseinventoryListAll.value[index - m]?.outpatientNo
) {
purchaseinventoryList.value.unshift(purchaseinventoryListAll.value[index - m]); // 加
//修改计算的小计缺少加过来的部分
let dispenseNoIndex1 = purchaseinventoryList.value.findIndex(
(o) =>
o.prescriptionNo == '小计' &&
o.outpatientNo == purchaseinventoryListAll.value[index - m].outpatientNo
);
purchaseinventoryList.value[dispenseNoIndex1].dispensePrice =
Number(purchaseinventoryList.value[dispenseNoIndex1].dispensePrice) +
Number(purchaseinventoryListAll.value[index - m].dispensePrice);
purchaseinventoryList.value[dispenseNoIndex1].refundPrice =
Number(purchaseinventoryList.value[dispenseNoIndex1].refundPrice) +
Number(purchaseinventoryListAll.value[index - m].refundPrice);
}
if (
index + m == queryParams.value.pageSize * queryParams.value.pageNo &&
k.outpatientNo == purchaseinventoryListAll.value[index + m]?.outpatientNo
) {
let dispenseNoIndex = purchaseinventoryList.value.findIndex(
(o) => o.dispenseNo == k.dispenseNo
);
purchaseinventoryList.value.splice(dispenseNoIndex, 1); // 减
if (
purchaseinventoryList.value[dispenseNoIndex - 1] &&
purchaseinventoryList.value[dispenseNoIndex - 1].prescriptionNo == '小计'
) {
purchaseinventoryList.value.splice(dispenseNoIndex + 1, 1); // 减掉带小计的
}
}
}
// end
});
dispensePrice2 = dispensePrice2 ? dispensePrice2.toFixed(4) : dispensePrice2;
refundPrice2 = refundPrice2 ? refundPrice2.toFixed(4) : refundPrice2;
let pageNoAll = total.value / queryParams.value.pageSize;
if (Math.ceil(pageNoAll) == queryParams.value.pageNo) {
purchaseinventoryList.value.push({
prescriptionNo: '合计',
dispensePrice: dispensePrice2,
refundPrice: refundPrice2,
});
=======
console.log('query=======>', JSON.stringify(queryParams));
if (type) {
@@ -1072,13 +815,10 @@ function getList(type) {
refundPrice: refundPrice,
});
}
>>>>>>> v1.3
}
});
}
});
<<<<<<< HEAD
=======
} else if (
queryParams.value.inventoryScope == 2 ||
queryParams.value.inventoryScope == 4 ||
@@ -1197,7 +937,6 @@ function getList(type) {
});
}
});
>>>>>>> v1.3
} else {
total.value = 0;
loading.value = false;

View File

@@ -1,9 +1,6 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryRef" :inline="true" label-width="100px">
<<<<<<< HEAD
</el-form>
=======
<el-form-item label="源仓库:" prop="sourceLocationId" label-width="80px">
<el-select
v-model="queryParams.sourceLocationId"
@@ -62,7 +59,6 @@
<el-button type="warning" plain icon="Download" @click="handleExport">导出</el-button>
</el-col>
</el-row>
>>>>>>> v1.3
<el-table
v-loading="loading"
:data="medicationStockOutDetailsList"
@@ -73,13 +69,8 @@
<el-table-column
label="医疗机构代码"
align="center"
<<<<<<< HEAD
key="medicalInstitutionCode"
prop="medicalInstitutionCode"
=======
key="medinsCode"
prop="medinsCode"
>>>>>>> v1.3
width="220"
:show-overflow-tooltip="true"
/>
@@ -87,13 +78,8 @@
<el-table-column
label="组织机构名称"
align="center"
<<<<<<< HEAD
key="organizationName"
prop="organizationName"
=======
key="orgCode"
prop="orgCode"
>>>>>>> v1.3
width="220"
:show-overflow-tooltip="true"
/>
@@ -124,43 +110,24 @@
<el-table-column
label="产品名称"
align="center"
<<<<<<< HEAD
key="lotName"
prop="lotName"
=======
key="productName"
prop="productName"
>>>>>>> v1.3
width="220"
:show-overflow-tooltip="true"
/>
<el-table-column
<<<<<<< HEAD
label="出库数量(最小销售包装单位)"
align="center"
key="quantitySales"
prop="quantitySales"
=======
label="出库数量"
align="center"
key="totalQuantity"
prop="totalQuantity"
>>>>>>> v1.3
:show-overflow-tooltip="true"
width="220"
/>
<el-table-column
<<<<<<< HEAD
label="出库数量(最小制剂单位)"
align="center"
key="quantityPreparation"
prop="quantityPreparation"
=======
label="单位"
align="center"
key="minUnit"
prop="minUnit"
>>>>>>> v1.3
:show-overflow-tooltip="true"
width="220"
/>
@@ -178,20 +145,12 @@
<script setup name="medicationStockOutDetails">
import {
getReportMedicationStockOutDetails,
<<<<<<< HEAD
} from './statisticalManagent';
const medicationStockOutDetailsList = ref([]);
const loading = ref(true);
=======
getPharmacyCabinetList,
} from './statisticalManagent';
import { ElMessage } from 'element-plus';
const { proxy } = getCurrentInstance();
const medicationStockOutDetailsList = ref([]);
const loading = ref(false);
>>>>>>> v1.3
const ids = ref([]);
const single = ref(true);
const multiple = ref(true);
@@ -199,10 +158,7 @@ const total = ref(0);
const approvalTime = ref([]);
const supplierListOptions = ref([]);
const locationIdList = ref([]);
<<<<<<< HEAD
=======
const occurrenceTime = ref([]);
>>>>>>> v1.3
const data = reactive({
form: {},
@@ -210,11 +166,8 @@ const data = reactive({
pageNo: 1,
pageSize: 10,
searchKey: undefined,
<<<<<<< HEAD
=======
sourceLocationId:undefined,
purposeLocationId:undefined,
>>>>>>> v1.3
occurrenceTimeSTime: undefined,
occurrenceTimeETime: undefined,
},
@@ -224,26 +177,17 @@ const data = reactive({
const { queryParams, form, rules } = toRefs(data);
function getList() {
<<<<<<< HEAD
=======
if(queryParams.value.sourceLocationId==null||
queryParams.value.purposeLocationId==null||
queryParams.value.occurrenceTimeSTime==null||
queryParams.value.occurrenceTimeETime==null){
ElMessage.warning("请构建完整的查询条件");
}else{
>>>>>>> v1.3
loading.value = true;
getReportMedicationStockOutDetails(queryParams.value).then((res) => {
loading.value = false;
medicationStockOutDetailsList.value = res.data.records;
total.value = res.data.total;
<<<<<<< HEAD
});
}
getList();
=======
});}
}
function getPharmacyCabinetLists() {
@@ -283,7 +227,6 @@ function handleExport() {
// getList();
getPharmacyCabinetLists();
>>>>>>> v1.3
</script>
<style scoped>
.custom-tree-node {

View File

@@ -1,7 +1,5 @@
<template>
<div class="app-container">
<<<<<<< HEAD
=======
<!-- 搜索区域 -->
<div class="search-form mb-4">
<el-form :model="queryParams" inline @submit.prevent>
@@ -44,7 +42,6 @@
</div>
<!-- 数据表格 -->
>>>>>>> v1.3
<el-table
v-loading="loading"
:data="medicationUsageList"
@@ -64,22 +61,14 @@
align="center"
key="orgName"
prop="orgName"
<<<<<<< HEAD
width="200"
=======
width="200"
>>>>>>> v1.3
:show-overflow-tooltip="true"
/>
<el-table-column
label="国家药品编码(YPID)"
align="center"
key="nationalDrugCode"
<<<<<<< HEAD
prop="ypCode"
=======
prop="nationalDrugCode"
>>>>>>> v1.3
width="200"
:show-overflow-tooltip="true"
/>
@@ -104,11 +93,7 @@
align="center"
key="itemName"
prop="itemName"
<<<<<<< HEAD
width="200"
=======
width="200"
>>>>>>> v1.3
:show-overflow-tooltip="true"
/>
<el-table-column
@@ -130,22 +115,14 @@
<el-table-column
label="销售数量(最小制剂单位)"
align="center"
<<<<<<< HEAD
key="dosageSalesQuantity"
prop="dosageSalesQuantity"
=======
key="unitCode_dictText"
prop="unitCode_dictText"
>>>>>>> v1.3
width="200"
:show-overflow-tooltip="true"
/>
</el-table>
<<<<<<< HEAD
=======
<!-- 分页组件 -->
>>>>>>> v1.3
<pagination
v-show="total > 0"
:total="total"
@@ -157,21 +134,6 @@
</template>
<script setup name="medicationUsageDetails">
<<<<<<< HEAD
import {
getReportMedicationUsage
} from './statisticalManagent';
const medicationUsageList = ref([]);
const loading = ref(true);
const ids = ref([]);
const total = ref(0);
const queryParams = ref({
pageNo: 1,
pageSize: 10,
=======
import { ref, onMounted } from 'vue';
import { getReportMedicationUsage } from './statisticalManagent';
@@ -194,28 +156,12 @@ const queryParams = ref({
searchKey: '', // 搜索关键词
startTime: '', // 开始时间
endTime: '', // 结束时间
>>>>>>> v1.3
});
/** 查询调拨管理项目列表 */
function getList() {
loading.value = true;
getReportMedicationUsage(queryParams.value).then((res) => {
<<<<<<< HEAD
loading.value = false;
medicationUsageList.value = res.data.records;
total.value = res.data.total;
})
}
/** 选择条数 */
function handleSelectionChange(selection) {
ids.value = selection.map((item) => item.id);
single.value = selection.length != 1;
multiple.value = !selection.length;
}
=======
medicationUsageList.value = res.data.records;
total.value = res.data.total;
loading.value = false;
@@ -241,25 +187,10 @@ function resetQuery() {
getList(); // 重置后重新查询
}
>>>>>>> v1.3
// 页面加载时获取数据
onMounted(() => {
getList();
});
<<<<<<< HEAD
</script>
<style scoped>
.custom-tree-node {
display: flex;
align-items: center;
}
.title {
font-weight: bold;
font-size: large;
margin-bottom: 10px;
=======
</script>
<style scoped>
@@ -272,6 +203,5 @@ onMounted(() => {
/* 表格与搜索框间距 */
.mb-4 {
margin-bottom: 16px;
>>>>>>> v1.3
}
</style>

View File

@@ -61,21 +61,6 @@
:value="supplyStatus.id"
/>
</el-select>
<<<<<<< HEAD
</el-form-item>
<!-- 字典item_type -->
<el-form-item label="项目类型:" prop="clinicalType">
<el-select v-model="queryParams.clinicalType" placeholder="" clearable style="width: 150px">
<el-option
v-for="supplyStatus in clinicalTypeOptions"
:key="supplyStatus.value"
:label="supplyStatus.label"
:value="supplyStatus.value"
/>
</el-select>
</el-form-item>
<!-- 医保号门诊号患者姓名项目名项目编码 -->
=======
</el-form-item>
<el-form-item label="项目类型:" prop="clinicalType" label-width="90px">
<el-tree-select
@@ -95,7 +80,6 @@
@clear="handleTreeClear"
/>
</el-form-item>
>>>>>>> v1.3
<el-form-item
label="医保号/门诊号/患者姓名/项目名/项目编码"
prop="searchKey"
@@ -117,14 +101,6 @@
style="margin-left: 20px; margin-right: 0px; margin-bottom: 5px"
>
<el-col :span="1.5">
<<<<<<< HEAD
<!-- v-hasPermi="['system:user:import']" -->
<el-button type="primary" plain icon="Search" @click="handleQuery">查询</el-button>
</el-col>
<el-col :span="1.5">
<!-- v-hasPermi="['system:user:export']" -->
<el-button type="warning" plain icon="CircleClose" @click="handleClear">重置</el-button>
=======
<el-button type="primary" plain icon="Search" @click="handleQuery">查询</el-button>
</el-col>
<el-col :span="1.5">
@@ -132,7 +108,6 @@
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="Download" @click="handleExport">导出</el-button>
>>>>>>> v1.3
</el-col>
</el-row>
@@ -143,14 +118,7 @@
@selection-change="handleSelectionChange"
:span-method="arraySpanMethod"
>
<<<<<<< HEAD
<!-- :span-method="arraySpanMethod" -->
<!-- :summary-method="getSummaries"
show-summary 每页单独合计-->
<el-table-column type="selection" width="50px" align="center" resizable />
=======
<el-table-column type="selection" width="50px" align="center" />
>>>>>>> v1.3
<el-table-column
label="门诊号"
align="center"
@@ -194,10 +162,6 @@
:show-overflow-tooltip="true"
resizable
/>
<<<<<<< HEAD
=======
>>>>>>> v1.3
<el-table-column
label="药品项目"
align="center"
@@ -223,10 +187,6 @@
:show-overflow-tooltip="true"
resizable
/>
<<<<<<< HEAD
=======
>>>>>>> v1.3
<el-table-column
label="开单人"
align="center"
@@ -334,26 +294,13 @@ import {
getReportChargeInit,
} from './statisticalManagent';
import useUserStore from '@/store/modules/user';
<<<<<<< HEAD
=======
import { get } from 'lodash';
>>>>>>> v1.3
import { watch } from 'vue';
const userStore = useUserStore();
const router = useRouter();
const { proxy } = getCurrentInstance();
const totalAmount = ref(0);
<<<<<<< HEAD
// const {
// item_category_code,
// hosp_lv
// } = proxy.useDict(
// "item_category_code",
// "hosp_lv"
// );
=======
>>>>>>> v1.3
const purchaseinventoryListAll = ref([]);
const xiaojiTotal = ref([]);
const rowSpan = ref(1);
@@ -369,9 +316,6 @@ const multiple = ref(true);
const total = ref(0);
const occurrenceTime = ref([]);
const getDepartmentOptions = ref([]);
<<<<<<< HEAD
// const queryParams.value.statisticsType = ref(1)
=======
// 树形结构相关变量
const selectedTypeIds = ref([]); // 选中的节点ID集合
@@ -389,7 +333,6 @@ const { device_category_code, med_category_code, activity_category_code } = prox
'med_category_code',
'activity_category_code'
);
>>>>>>> v1.3
const data = reactive({
form: {},
@@ -398,23 +341,13 @@ const data = reactive({
pageSize: 10,
statisticsType: 1,
searchKey: undefined,
<<<<<<< HEAD
// ybCode: undefined,
// busNo:undefined,
// name: undefined,
=======
>>>>>>> v1.3
departmentId: undefined,
issuerId: undefined,
payeeId: undefined,
clinicalType: undefined,
<<<<<<< HEAD
// clinicalName:undefined,
=======
medicationCategoryCode: undefined,
deviceCategoryCode: undefined,
activityCategoryCode: undefined,
>>>>>>> v1.3
chargeTimeSTime: undefined,
chargeTimeETime: undefined,
},
@@ -426,13 +359,8 @@ const { queryParams, form, rules } = toRefs(data);
// 监听表格数据变化计算合计金额
watch(
() => purchaseinventoryList.value,
<<<<<<< HEAD
(newVlaue) => {
if (newVlaue && newVlaue.length > 0) {
=======
(newValue) => {
if (newValue && newValue.length > 0) {
>>>>>>> v1.3
handleTotalAmount();
}
},
@@ -442,54 +370,6 @@ watch(
// 监听统计类型变化
watch(
() => queryParams.value.statisticsType,
<<<<<<< HEAD
(newVlaue) => {
queryParams.value.statisticsType = newVlaue;
},
{ immediate: true }
);
/**计算合计金额 */
function handleTotalAmount() {
totalAmount.value = purchaseinventoryList.value.reduce((accumulator, currentRow) => {
return accumulator + (Number(currentRow.totalPrice) || 0);
}, 0);
}
function getTotals(row, i) {
let totalPriceSums = Number(purchaseinventoryList.value[i].totalPrice);
// let totalReturnPriceSums = Number(purchaseinventoryList.value[i].refundPrice)
for (let j = 1; i - j >= 0; j++) {
if (purchaseinventoryList.value[i].busNo == purchaseinventoryList.value[i - j].busNo) {
totalPriceSums += Number(purchaseinventoryList.value[i - j].totalPrice);
// totalReturnPriceSums += Number(purchaseinventoryList.value[i-j].refundPrice)
}
}
xiaojiTotal.value.push({
inde: i + 1,
busNo: row.busNo,
genderEnum_enumText: row.genderEnum_enumText,
totalPrice: totalPriceSums.toFixed(4) || 0.0,
});
// var totalPrice2 = 0
// var refundPrice2 = 0
purchaseinventoryList.value.splice(i + 1, 0, {
busNo: row.busNo,
genderEnum_enumText: row.genderEnum_enumText,
departmentName: '小计',
totalPrice: totalPriceSums.toFixed(4) || 0.0,
});
// purchaseinventoryList.value.map(k=>{
// if(k.departmentName!='小计'){
// totalPrice2 += Number(k.totalPrice)
// refundPrice2 += Number(k.refundPrice)
// }
// })
// totalPrice2 = totalPrice2?totalPrice2.toFixed(4):totalPrice2
// refundPrice2 = refundPrice2?refundPrice2.toFixed(4):refundPrice2
// purchaseinventoryList.value.push({departmentName:'合计',totalPrice:totalPrice2,refundPrice:refundPrice2})
}
const arraySpanMethod = ({ row, column, rowIndex, columnIndex }) => {
// 合并一样的列住院号 outpatientNumber属性&&(queryParams.value.statisticsType==1||queryParams.value.statisticsType==4||queryParams.value.statisticsType==6)
=======
(newValue) => {
queryParams.value.statisticsType = newValue;
},
@@ -700,7 +580,6 @@ function getTotals(row, i) {
// 表格合并行方法
const arraySpanMethod = ({ row, column, rowIndex, columnIndex }) => {
>>>>>>> v1.3
if (columnIndex === 1 && purchaseinventoryList.value.length > 0) {
if (
rowIndex === 0 ||
@@ -708,11 +587,7 @@ const arraySpanMethod = ({ row, column, rowIndex, columnIndex }) => {
) {
let rowspan = 1;
let totalPriceSum = 0;
<<<<<<< HEAD
// let totalReturnPriceSum = 0
=======
>>>>>>> v1.3
for (let i = rowIndex + 1; i < purchaseinventoryList.value.length + 1; i++) {
if (purchaseinventoryList.value[i - 1].departmentName != '合计') {
if (
@@ -721,30 +596,17 @@ const arraySpanMethod = ({ row, column, rowIndex, columnIndex }) => {
) {
rowspan++;
totalPriceSum += Number(purchaseinventoryList.value[i].totalPrice);
<<<<<<< HEAD
// totalReturnPriceSum += Number(purchaseinventoryList.value[i].refundPrice)
=======
>>>>>>> v1.3
if (i == purchaseinventoryList.value.length - 1) {
let findIndexTotal = xiaojiTotal.value.findIndex((k) => k.busNo == row.busNo);
if (findIndexTotal < 0) {
getTotals(row, i);
}
<<<<<<< HEAD
} else {
}
} else {
totalPriceSum += Number(row.totalPrice);
// totalReturnPriceSum += Number(row.refundPrice)
let findIndexTotal = xiaojiTotal.value.findIndex((k) => k.busNo == row.busNo);
=======
}
} else {
totalPriceSum += Number(row.totalPrice);
let findIndexTotal = xiaojiTotal.value.findIndex((k) => k.busNo == row.busNo);
>>>>>>> v1.3
if (findIndexTotal < 0) {
xiaojiTotal.value.push({
inde: i,
@@ -752,84 +614,19 @@ const arraySpanMethod = ({ row, column, rowIndex, columnIndex }) => {
busNo: row.busNo,
totalPrice: totalPriceSum,
});
<<<<<<< HEAD
=======
>>>>>>> v1.3
purchaseinventoryList.value.splice(i, 0, {
busNo: row.busNo,
genderEnum_enumText: row.genderEnum_enumText,
departmentName: '小计',
totalPrice: totalPriceSum.toFixed(4) || 0.0,
});
<<<<<<< HEAD
// console.log(purchaseinventoryList.value,"12121")
=======
>>>>>>> v1.3
}
break;
}
}
rowspan++;
}
<<<<<<< HEAD
return { rowspan, colspan: 1 };
} else {
// 非起始行不显示
return { rowspan: 0, colspan: 0 };
}
// }else{ // 姓名列patientName
// if (columnIndex ===2&&purchaseinventoryList.value.length>0) {
// if (rowIndex === 0 || (rowIndex > 0 && row.name !== purchaseinventoryList.value[rowIndex - 1]?.name)) {
// let rowspan = 1;
// for (let i = rowIndex + 1; i < purchaseinventoryList.value.length; i++) {
// if (purchaseinventoryList.value[i].name === row.name) {
// rowspan++;
// } else {
// break;
// }
// }
// return { rowspan:rowspan, colspan: 1 };
// } else {
// return { rowspan: 0, colspan: 0 };
// }
// }
}
};
const getSummaries = (param) => {
const { columns, data } = param;
const sums = [];
columns.forEach((column, index) => {
if (index === 0) {
sums[index] = h('div', { style: { textDecoration: 'underline' } }, ['合计']);
return;
}
const values = data.map(
(item) => item.departmentName != '小计' && Number(item[column.property])
);
if (column.property == 'totalPrice') {
sums[index] = `${values.reduce((prev, curr) => {
const value = Number(curr);
if (!Number.isNaN(value)) {
return (Number(prev) + Number(curr)).toFixed(4) || 0.0;
} else {
return Number(prev);
}
}, 0.0)}`;
} else {
sums[index] = ' ';
}
});
return sums;
};
function inventoryChange(val) {
queryParams.value.statisticsType = val;
xiaojiTotal.value = [];
purchaseinventoryList.value = [];
getList();
}
=======
return { rowspan, colspan: 1 };
} else {
@@ -847,22 +644,12 @@ function inventoryChange(val) {
}
// 初始化数据加载
>>>>>>> v1.3
function getPharmacyCabinetLists() {
getReportChargeInit().then((response) => {
inventoryOptions.value = response.data.statisticsTypeOptions;
queryParams.value.statisticsType = 1;
issuerOptions.value = response.data.issuerOptions;
payeeOptions.value = response.data.payeeOptions;
<<<<<<< HEAD
clinicalTypeOptions.value = response.data.clinicalTypeOptions;
});
getDepartmentList().then((response) => {
getDepartmentOptions.value = response.data; // 科室
});
}
/** 查询调拨管理项目列表 */
=======
clinicalTypeOptions.value = response.data.clinicalTypeOptions || [];
// 确保字典数据加载完成后再构建树形
@@ -877,7 +664,6 @@ function getPharmacyCabinetLists() {
}
// 查询列表数据
>>>>>>> v1.3
function getList(type) {
if (type) {
xiaojiTotal.value = [];
@@ -885,60 +671,6 @@ function getList(type) {
}
loading.value = true;
<<<<<<< HEAD
// purchaseinventoryList.value = [
// {busNo:'M2505070009100304',name:"张三",departmentName:'CF2505070009101361',birthDate:'2025-05-07 16:28',practitionerName:'张三',practitionerName:'王东收费',clinicalName:'依折麦布片',busNo:'yp3065',medicalName:'依折麦布片',ybNo:'XC10AXY097A0010',totalVolume:'10mg*10',salePrice:'63.56',price:'63.56',totalPrice:'63.56',number:'1盒',totalPrice:'63.56',refundQuantity:'0.00盒',refundPrice:'0.00',lotNumber:'Y013201',manufacturerText:'杭州默沙东制药有限公司',supplierName:'旧系统批量'},
// {busNo:'M2505070009100304',name:"张三",departmentName:'CF2505070009101362',birthDate:'2025-05-07 16:28',practitionerName:'张三',practitionerName:'王东收费',clinicalName:'布洛芬缓释胶囊',busNo:'yp3065',medicalName:'布洛芬缓释胶囊',ybNo:'XC10AXY097A0010',totalVolume:'0.3g*24',salePrice:'4.8',price:'4.8',totalPrice:'4.8',number:'1盒',totalPrice:'4.8',refundQuantity:'0.00盒',refundPrice:'0.00',lotNumber:'72240709',manufacturerText:'上海信谊天平药业有限公司',supplierName:'旧系统批量'},
// {busNo:'M2505070009100305',name:"李四",departmentName:'CF2505070009101363',birthDate:'2025-05-07 16:28',practitionerName:'张三',practitionerName:'王东收费',clinicalName:'布洛芬缓释胶囊',busNo:'yp3065',medicalName:'布洛芬缓释胶囊',ybNo:'XC10AXY097A0010',totalVolume:'0.3g*24',salePrice:'4.8',price:'4.8',totalPrice:'4.8',number:'1盒',totalPrice:'4.8',refundQuantity:'0.00盒',refundPrice:'0.00',lotNumber:'72240709',manufacturerText:'上海信谊天平药业有限公司',supplierName:'旧系统批量'},
// {busNo:'M2505070009100305',name:"李四",departmentName:'CF2505070009101364',birthDate:'2025-05-07 16:28',practitionerName:'张三',practitionerName:'王东收费',clinicalName:'依折麦布片',busNo:'yp3065',medicalName:'依折麦布片',ybNo:'XC10AXY097A0010',totalVolume:'10mg*10',salePrice:'63.56',price:'63.56',totalPrice:'63.56',number:'1盒',totalPrice:'63.56',refundQuantity:'0.00盒',refundPrice:'0.00',lotNumber:'Y013201',manufacturerText:'杭州默沙东制药有限公司',supplierName:'旧系统批量'},
// {busNo:'M2505070009100305',name:"李四",departmentName:'CF2505070009101365',birthDate:'2025-05-07 16:28',practitionerName:'张三',practitionerName:'王东收费',clinicalName:'布洛芬缓释胶囊',busNo:'yp3065',medicalName:'布洛芬缓释胶囊',ybNo:'XC10AXY097A0010',totalVolume:'0.3g*24',salePrice:'4.8',price:'4.8',totalPrice:'4.8',number:'1盒',totalPrice:'4.8',refundQuantity:'0.00盒',refundPrice:'0.00',lotNumber:'72240709',manufacturerText:'上海信谊天平药业有限公司',supplierName:'旧系统批量'},
// {busNo:'M2505070009100305',name:"李四",departmentName:'CF2505070009101366',birthDate:'2025-05-07 16:28',practitionerName:'张三',practitionerName:'王东收费',clinicalName:'布洛芬缓释胶囊',busNo:'yp3065',medicalName:'布洛芬缓释胶囊',ybNo:'XC10AXY097A0010',totalVolume:'0.3g*24',salePrice:'4.8',price:'4.8',totalPrice:'4.8',number:'1盒',totalPrice:'4.8',refundQuantity:'0.00盒',refundPrice:'0.00',lotNumber:'72240709',manufacturerText:'上海信谊天平药业有限公司',supplierName:'旧系统批量'},
// {busNo:'M2505070009100306',name:"王五",departmentName:'CF2505070009101367',birthDate:'2025-05-07 16:28',practitionerName:'张三',practitionerName:'王东收费',clinicalName:'依折麦布片',busNo:'yp3065',medicalName:'依折麦布片',ybNo:'XC10AXY097A0010',totalVolume:'10mg*10',salePrice:'63.56',price:'63.56',totalPrice:'63.56',number:'1盒',totalPrice:'63.56',refundQuantity:'0.00盒',refundPrice:'0.00',lotNumber:'Y013201',manufacturerText:'杭州默沙东制药有限公司',supplierName:'旧系统批量'},
// {busNo:'M2505070009100306',name:"王五",departmentName:'CF2505070009101368',birthDate:'2025-05-07 16:28',practitionerName:'张三',practitionerName:'王东收费',clinicalName:'布洛芬缓释胶囊',busNo:'yp3065',medicalName:'布洛芬缓释胶囊',ybNo:'XC10AXY097A0010',totalVolume:'0.3g*24',salePrice:'4.8',price:'4.8',totalPrice:'4.8',number:'1盒',totalPrice:'4.8',refundQuantity:'0.00盒',refundPrice:'0.00',lotNumber:'72240709',manufacturerText:'上海信谊天平药业有限公司',supplierName:'旧系统批量'},
// {busNo:'M2505070009100306',name:"王五",departmentName:'CF2505070009101369',birthDate:'2025-05-07 16:28',practitionerName:'张三',practitionerName:'王东收费',clinicalName:'布洛芬缓释胶囊',busNo:'yp3065',medicalName:'布洛芬缓释胶囊',ybNo:'XC10AXY097A0010',totalVolume:'0.3g*24',salePrice:'4.8',price:'4.8',totalPrice:'4.8',number:'1盒',totalPrice:'4.8',refundQuantity:'0.00盒',refundPrice:'0.00',lotNumber:'72240709',manufacturerText:'上海信谊天平药业有限公司',supplierName:'旧系统批量'},
// {busNo:'M2505070009100307',name:"赵六",departmentName:'CF2505070009101368',birthDate:'2025-05-07 16:28',practitionerName:'张三',practitionerName:'王东收费',clinicalName:'布洛芬缓释胶囊',busNo:'yp3065',medicalName:'布洛芬缓释胶囊',ybNo:'XC10AXY097A0010',totalVolume:'0.3g*24',salePrice:'4.8',price:'4.8',totalPrice:'4.8',number:'1盒',totalPrice:'4.8',refundQuantity:'0.00盒',refundPrice:'0.00',lotNumber:'72240709',manufacturerText:'上海信谊天平药业有限公司',supplierName:'旧系统批量'},
// {busNo:'M2505070009100307',name:"赵六",departmentName:'CF2505070009101369',birthDate:'2025-05-07 16:28',practitionerName:'张三',practitionerName:'王东收费',clinicalName:'布洛芬缓释胶囊',busNo:'yp3065',medicalName:'布洛芬缓释胶囊',ybNo:'XC10AXY097A0010',totalVolume:'0.3g*24',salePrice:'2.8',price:'2.8',totalPrice:'2.8',number:'1盒',totalPrice:'2.8',refundQuantity:'0.00盒',refundPrice:'0.00',lotNumber:'72240709',manufacturerText:'上海信谊天平药业有限公司',supplierName:'旧系统批量'},
// ]
var totalPrice2 = 0;
// var refundPrice2 = 0
// var purchaseinventoryLists = []
// var purchaseinventoryListsArray = []
getReportChargePage(queryParams.value).then((res) => {
console.log('API返回数据:', res.data.records && res.data.records.length > 0 ? res.data.records[0] : {}); // 调试日志
// purchaseinventoryLists = res.data.records||[] //转换数据结构
// if(purchaseinventoryLists.length>0){
// purchaseinventoryLists.map(p=>{
// purchaseinventoryListsArray = [...purchaseinventoryListsArray, ...p.reportPageItemDto]
// // purchaseinventoryList.value.concat(p.reportPageItemDto)
// })
// }
// purchaseinventoryList.value = purchaseinventoryListsArray
purchaseinventoryList.value = res.data.records || [];
total.value = res.data.total;
purchaseinventoryList.value.map((k) => {
k.totalPrice = k.totalPrice ? k.totalPrice.toFixed(4) : '0.0000';
k.price = k.price ? k.price.toFixed(4) : '0.0000';
// k.refundPrice = k.refundPrice || '0.00'
k.number = k.number
? k.number + (k.quantityUnit_dictText ? k.quantityUnit_dictText : '')
: '0.0000' + k.quantityUnit_dictText
? k.quantityUnit_dictText
: '';
// k.refundQuantity = k.refundQuantity?(k.refundQuantity+k.refundUnitCode_dictText):('0.00'+ k.quantityUnit_dictText)
if (total.value && total.value <= queryParams.value.pageSize) {
totalPrice2 += Number(k.totalPrice);
// refundPrice2 += Number(k.refundPrice)
}
});
if (total.value <= res.data.size) {
loading.value = false;
}
// 1页数据
if (total.value && total.value <= queryParams.value.pageSize) {
totalPrice2 = totalPrice2 ? totalPrice2.toFixed(4) : totalPrice2;
// refundPrice2 = refundPrice2?refundPrice2.toFixed(4):refundPrice2
let pageNoAll = total.value / queryParams.value.pageSize;
=======
var totalPrice2 = 0;
// 构建请求参数自动排除undefined/null属性
@@ -997,31 +729,11 @@ function getList(type) {
totalPrice2 = totalPrice2 ? totalPrice2.toFixed(4) : totalPrice2;
let pageNoAll = total.value / queryParams.value.pageSize;
>>>>>>> v1.3
if (Math.ceil(pageNoAll) == queryParams.value.pageNo) {
purchaseinventoryList.value.push({ departmentName: '合计', totalPrice: totalPrice2 });
}
}
<<<<<<< HEAD
// 带分页数据
if (total.value && total.value > queryParams.value.pageSize) {
// var purchaseinventoryListsAll = []
// var purchaseinventoryListsArrayAll = []
let queryParamsValue = { ...queryParams.value };
queryParamsValue.pageSize = total.value;
queryParamsValue.pageNo = 1;
getReportChargePage(queryParamsValue).then((res) => {
// purchaseinventoryListsAll = res.data.records||[]
// if(purchaseinventoryListsAll.length>0){
// purchaseinventoryListsAll.map(p=>{
// purchaseinventoryListsArrayAll = [...purchaseinventoryListsArrayAll, ...p.reportPageItemDto]
// // purchaseinventoryList.value.concat(p.reportPageItemDto)
// })
// }
// purchaseinventoryListAll.value = purchaseinventoryListsArrayAll
purchaseinventoryListAll.value = res.data.records || [];
=======
// 多页数据处理
if (total.value && total.value > queryParams.value.pageSize && !queryParams.value.searchKey) {
let queryParamsValue = { ...queryParams.value };
@@ -1038,26 +750,10 @@ function getList(type) {
getReportChargePage(queryParamsValue).then((res) => {
purchaseinventoryListAll.value = res.data.records || [];
>>>>>>> v1.3
if (purchaseinventoryListAll.value.length > 0) {
purchaseinventoryListAll.value.map((k, index) => {
k.totalPrice = k.totalPrice ? k.totalPrice.toFixed(4) : '0.0000';
k.price = k.price ? k.price.toFixed(4) : '0.0000';
<<<<<<< HEAD
// k.refundPrice = k.refundPrice || '0.00'
k.number = k.number
? k.number + k.quantityUnit_dictText
? k.quantityUnit_dictText
: ''
: '0.0000' + k.quantityUnit_dictText
? k.quantityUnit_dictText
: '';
// k.refundQuantity = k.refundQuantity?(k.refundQuantity+k.refundUnitCode_dictText):('0.00'+ k.quantityUnit_dictText)
totalPrice2 += Number(k.totalPrice);
// refundPrice2 += Number(k.refundPrice)
//处理不同页门诊号相同小计在最后回显问题start
// m<queryParams.value.pageSize&&
=======
k.number = k.number
? k.number + (k.quantityUnit_dictText ? k.quantityUnit_dictText : '')
: '0.0000' + (k.quantityUnit_dictText ? k.quantityUnit_dictText : '');
@@ -1065,44 +761,23 @@ function getList(type) {
totalPrice2 += Number(k.totalPrice);
// 处理跨页门诊号小计
>>>>>>> v1.3
for (let m = 1; m < index; m++) {
if (
queryParams.value.pageNo > 1 &&
index == queryParams.value.pageSize * (queryParams.value.pageNo - 1) &&
k.busNo == purchaseinventoryListAll.value[index - m]?.busNo
) {
<<<<<<< HEAD
// purchaseinventoryList.value.unshift(purchaseinventoryListAll.value[index-m]) // 加
// //修改计算的小计缺少加过来的部分
let dispenseNoIndex1 = purchaseinventoryList.value.findIndex(
(o) =>
o.departmentName == '小计' &&
o.busNo == purchaseinventoryListAll.value[index - m].busNo
=======
let dispenseNoIndex1 = purchaseinventoryList.value.findIndex(
(o) => o.departmentName == '小计' && o.busNo == purchaseinventoryListAll.value[index - m].busNo
>>>>>>> v1.3
);
if (dispenseNoIndex1 > 0) {
purchaseinventoryList.value[dispenseNoIndex1].totalPrice =
<<<<<<< HEAD
Number(purchaseinventoryList.value[dispenseNoIndex1].totalPrice) +
Number(purchaseinventoryListAll.value[index - m].totalPrice);
purchaseinventoryList.value[dispenseNoIndex1].totalPrice = purchaseinventoryList
.value[dispenseNoIndex1].totalPrice
? purchaseinventoryList.value[dispenseNoIndex1].totalPrice.toFixed(4)
: '0.0000';
}
}
=======
(Number(purchaseinventoryList.value[dispenseNoIndex1].totalPrice) +
Number(purchaseinventoryListAll.value[index - m].totalPrice)).toFixed(4) || '0.0000';
}
}
>>>>>>> v1.3
if (
index + m == queryParams.value.pageSize * queryParams.value.pageNo &&
k.busNo == purchaseinventoryListAll.value[index + m]?.busNo
@@ -1111,22 +786,6 @@ function getList(type) {
purchaseinventoryList.value[purchaseinventoryList.value.length - 1]
.departmentName == '小计'
) {
<<<<<<< HEAD
purchaseinventoryList.value.splice(purchaseinventoryList.value.length - 1, 1); // 减掉第二页还有相同门诊号的第一页的小计
}
// let dispenseNoIndex = purchaseinventoryList.value.findIndex(o=>o.paymentId==k.paymentId&&o.chargeId==k.chargeId) //通过唯一主键进行区分
// purchaseinventoryList.value.splice(dispenseNoIndex,1) // 减
// if(purchaseinventoryList.value[dispenseNoIndex-1]&&purchaseinventoryList.value[dispenseNoIndex-1].departmentName=='小计'){
// purchaseinventoryList.value.splice(dispenseNoIndex+1,1) // 减掉带小计的
// }
}
}
// end
});
totalPrice2 = totalPrice2 ? totalPrice2.toFixed(4) : totalPrice2;
// refundPrice2 = refundPrice2?refundPrice2.toFixed(4):refundPrice2
loading.value = false;
=======
purchaseinventoryList.value.splice(purchaseinventoryList.value.length - 1, 1);
}
}
@@ -1136,7 +795,6 @@ function getList(type) {
totalPrice2 = totalPrice2 ? totalPrice2.toFixed(4) : totalPrice2;
loading.value = false;
>>>>>>> v1.3
let pageNoAll = total.value / queryParams.value.pageSize;
if (Math.ceil(pageNoAll) == queryParams.value.pageNo) {
purchaseinventoryList.value.push({ departmentName: '合计', totalPrice: totalPrice2 });
@@ -1147,40 +805,24 @@ function getList(type) {
});
}
<<<<<<< HEAD
/** 搜索按钮操作 */
=======
// 查询按钮点击事件
>>>>>>> v1.3
function handleQuery() {
queryParams.value.chargeTimeSTime =
occurrenceTime.value && occurrenceTime.value.length == 2
? occurrenceTime.value[0] + ' 00:00:00'
: '';
<<<<<<< HEAD
=======
>>>>>>> v1.3
queryParams.value.chargeTimeETime =
occurrenceTime.value && occurrenceTime.value.length == 2
? occurrenceTime.value[1] + ' 23:59:59'
: '';
<<<<<<< HEAD
=======
>>>>>>> v1.3
queryParams.value.pageNo = 1;
getList(1);
}
// 重置按钮点击事件
function handleClear() {
<<<<<<< HEAD
// 清空查询条件
occurrenceTime.value = '';
queryParams.value.chargeTimeSTime = '';
queryParams.value.chargeTimeETime = '';
=======
occurrenceTime.value = [];
queryParams.value.chargeTimeSTime = '';
queryParams.value.chargeTimeETime = '';
@@ -1194,7 +836,6 @@ function handleClear() {
queryParams.value.activityCategoryCode = undefined;
selectedTypeIds.value = [];
>>>>>>> v1.3
proxy.resetForm('queryRef');
getList(1);
}
@@ -1206,28 +847,15 @@ function handleSelectionChange(selection) {
multiple.value = !selection.length;
}
<<<<<<< HEAD
// 初始化日期范围为当前月第一天到今天
=======
// 初始化日期范围为当月
>>>>>>> v1.3
function initDefaultDateRange() {
const now = new Date();
const year = now.getFullYear();
const month = now.getMonth();
<<<<<<< HEAD
// 当前月第一天
const firstDay = new Date(year, month, 1);
// 今天
const today = now;
// 格式化为YYYY-MM-DD格式
=======
const firstDay = new Date(year, month, 1);
const today = now;
>>>>>>> v1.3
const formatDate = (date) => {
const y = date.getFullYear();
const m = String(date.getMonth() + 1).padStart(2, '0');
@@ -1237,16 +865,10 @@ function initDefaultDateRange() {
occurrenceTime.value = [formatDate(firstDay), formatDate(today)];
<<<<<<< HEAD
// 同时设置到queryParams中确保首次加载时传递时间参数
=======
>>>>>>> v1.3
queryParams.value.chargeTimeSTime = occurrenceTime.value[0] + ' 00:00:00';
queryParams.value.chargeTimeETime = occurrenceTime.value[1] + ' 23:59:59';
}
<<<<<<< HEAD
=======
// 导出Excel
function handleExport() {
// 构建导出参数(移除分页参数)
@@ -1268,7 +890,6 @@ function handleExport() {
);
}
>>>>>>> v1.3
// 初始化页面
getPharmacyCabinetLists();
initDefaultDateRange();

View File

@@ -1,7 +1,5 @@
<template>
<div class="app-container">
<<<<<<< HEAD
=======
<el-form :model="queryParams" ref="queryRef" :inline="true" label-width="100px">
<el-form-item label="搜索条件" prop="searchKey">
<el-input
@@ -49,7 +47,6 @@
<el-button type="warning" plain icon="Download" @click="handleExport">导出</el-button>
</el-col>
</el-row>
>>>>>>> v1.3
<el-table
v-loading="loading"
:data="patientDetailsList"
@@ -69,11 +66,7 @@
align="center"
key="medName"
prop="medName"
<<<<<<< HEAD
width="140"
=======
width="140"
>>>>>>> v1.3
:show-overflow-tooltip="true"
/>
<el-table-column
@@ -97,10 +90,6 @@
align="center"
key="doseFormCode_dictText"
prop="doseFormCode_dictText"
<<<<<<< HEAD
width="140px"
=======
>>>>>>> v1.3
:show-overflow-tooltip="true"
/>
<el-table-column
@@ -108,9 +97,6 @@
align="center"
key="totalVolume"
prop="totalVolume"
<<<<<<< HEAD
width="140"
=======
:show-overflow-tooltip="true"
/>
<el-table-column
@@ -118,7 +104,6 @@
align="center"
key="packageUnit_dictText"
prop="packageUnit_dictText"
>>>>>>> v1.3
:show-overflow-tooltip="true"
/>
<el-table-column
@@ -126,10 +111,6 @@
align="center"
key="unitCode_dictText"
prop="unitCode_dictText"
<<<<<<< HEAD
width="160"
=======
>>>>>>> v1.3
:show-overflow-tooltip="true"
/>
<el-table-column
@@ -137,25 +118,14 @@
align="center"
key="isSelected"
prop="isSelected"
<<<<<<< HEAD
width="140"
:show-overflow-tooltip="true"
/>
<el-table-column
=======
:show-overflow-tooltip="true"
/>
<el-table-column
>>>>>>> v1.3
label="生产企业"
align="center"
key="manufacturerText"
prop="manufacturerText"
<<<<<<< HEAD
width="100"
=======
width="240"
>>>>>>> v1.3
:show-overflow-tooltip="true"
/>
<el-table-column
@@ -163,10 +133,6 @@
align="center"
key="price"
prop="price"
<<<<<<< HEAD
width="200"
=======
>>>>>>> v1.3
:show-overflow-tooltip="true"
/>
<el-table-column
@@ -174,11 +140,7 @@
align="center"
key="quantity"
prop="quantity"
<<<<<<< HEAD
width="200"
=======
width="160"
>>>>>>> v1.3
:show-overflow-tooltip="true"
/>
<el-table-column
@@ -186,11 +148,7 @@
align="center"
key="totalPrice"
prop="totalPrice"
<<<<<<< HEAD
width="200"
=======
width="140"
>>>>>>> v1.3
:show-overflow-tooltip="true"
/>
</el-table>
@@ -205,35 +163,16 @@
</template>
<script setup name="patientDetails">
<<<<<<< HEAD
import {
getReportPatientDetails
} from './statisticalManagent';
=======
import { ref, onMounted, getCurrentInstance } from 'vue';
import { getReportPatientDetails } from './statisticalManagent';
// 获取当前实例的proxy
const { proxy } = getCurrentInstance();
>>>>>>> v1.3
const patientDetailsList = ref([]);
const loading = ref(true);
const ids = ref([]);
const total = ref(0);
<<<<<<< HEAD
const queryParams = ref({
pageNo: 1,
pageSize: 10,
searchKey: undefined,
occurrenceTimeSTime: undefined,
occurrenceTimeETime: undefined,
});
/** 查询调拨管理项目列表 */
=======
const single = ref(true);
const multiple = ref(true);
const queryRef = ref();
@@ -253,16 +192,12 @@ const queryParams = ref({
});
/** 查询患者明细列表 */
>>>>>>> v1.3
function getList() {
loading.value = true;
getReportPatientDetails(queryParams.value).then((res) => {
loading.value = false;
patientDetailsList.value = res.data.records;
total.value = res.data.total;
<<<<<<< HEAD
})
=======
}).catch(() => {
loading.value = false;
});
@@ -279,18 +214,11 @@ function handleClear() {
proxy.resetForm('queryRef');
queryParams.value.pageNo = 1;
getList();
>>>>>>> v1.3
}
/** 选择条数 */
function handleSelectionChange(selection) {
ids.value = selection.map((item) => item.id);
<<<<<<< HEAD
single.value = selection.length != 1;
multiple.value = !selection.length;
}
=======
single.value = selection.length !== 1;
multiple.value = !selection.length;
}
@@ -306,18 +234,12 @@ function handleExport() {
);
}
>>>>>>> v1.3
// 页面加载时获取数据
onMounted(() => {
getList();
});
<<<<<<< HEAD
</script>
=======
</script>
>>>>>>> v1.3
<style scoped>
.custom-tree-node {
display: flex;
@@ -329,11 +251,8 @@ onMounted(() => {
font-size: large;
margin-bottom: 10px;
}
<<<<<<< HEAD
=======
.mb8 {
margin-bottom: 8px;
}
>>>>>>> v1.3
</style>

View File

@@ -148,13 +148,8 @@ const queryParams = ref({
pageNo: 1,
pageSize: 10,
searchKey: undefined,
<<<<<<< HEAD
occurrenceTimeSTime: undefined,
occurrenceTimeETime: undefined,
=======
encounterBusNo: undefined,
patientName: undefined,
>>>>>>> v1.3
});
/** 查询调拨管理项目列表 */

View File

@@ -313,20 +313,11 @@ export function ybRequestFileUp(data) {
});
}
export function getExpirationWarning(query) {
<<<<<<< HEAD
// return request({
// url: '/inventory-manage/product/expiration-warning',
// method: 'get',
// params: query
// })
return null;
=======
return request({
url: '/inventory-manage/product/expiration-warning',
method: 'get',
params: query,
});
>>>>>>> v1.3
}
export function getClroptins(query) {
return request({
@@ -401,13 +392,6 @@ export function handOperatedApplyReconcileAccounts(data) {
}
export function productPageTotal(query) {
<<<<<<< HEAD
return request({
url: '/inventory-manage/product/product-statistics',
method: 'get',
params: query
})
=======
return request({
url: '/inventory-manage/product/product-statistics',
method: 'get',
@@ -420,7 +404,6 @@ export function productBackupPageTotal(query) {
method: 'get',
params: query,
});
>>>>>>> v1.3
}
export function getMedDevInfo(query) {
@@ -440,239 +423,123 @@ export function getMedDevAll(query) {
}
export function getReportStocktakingPageAuto(query) {
<<<<<<< HEAD
return request({
url: '/report-manage/stocktaking/report-stocktaking-page-auto',
method: 'get',
params: query
})
=======
return request({
url: '/report-manage/stocktaking/report-stocktaking-page-auto',
method: 'get',
params: query,
});
>>>>>>> v1.3
}
//报表导出
export function exportRecords(params) {
<<<<<<< HEAD
return request({
url: '/pharmacy-manage/medication-details/excel-out',
method: 'get',
params: qparamsuery
})
=======
return request({
url: '/pharmacy-manage/medication-details/excel-out',
method: 'get',
params: qparamsuery,
});
>>>>>>> v1.3
}
//查看单据详情
export function getDocumentDetails(params) {
<<<<<<< HEAD
return request({
url: '/inventory-manage/purchase/inventory-receipt',
method: 'get',
params: params
})
=======
return request({
url: '/inventory-manage/purchase/inventory-receipt',
method: 'get',
params: params,
});
>>>>>>> v1.3
}
//药剂科报表_常规报表:出库明细表(例子)
export function getStockOutDetail(query) {
<<<<<<< HEAD
return request({
url: '/report-manage/report/stock-out-detail-page',
method: 'get',
params: query
})
=======
return request({
url: '/report-manage/report/stock-out-detail-page',
method: 'get',
params: query,
});
>>>>>>> v1.3
}
//查询患者明细主报表--20251106追加
export function getReportPatientMasterDetail(query) {
<<<<<<< HEAD
return request({
url: '/report-manage/report/patient-master-detail',
method: 'get',
params: query
})
=======
return request({
url: '/report-manage/report/patient-master-detail',
method: 'get',
params: query,
});
>>>>>>> v1.3
}
//线下采购占比报表--20251106追加
export function getReportOfflinePurchaseRatio(query) {
<<<<<<< HEAD
return request({
url: '/report-manage/report/offline-purchase-ratio',
method: 'get',
params: query
})
=======
return request({
url: '/report-manage/report/offline-purchase-ratio',
method: 'get',
params: query,
});
>>>>>>> v1.3
}
//药品使用情况报表--20251106追加
export function getReportMedicationUsage(query) {
<<<<<<< HEAD
return request({
url: '/report-manage/report/medication-usage',
method: 'get',
params: query
})
=======
return request({
url: '/report-manage/report/medication-usage',
method: 'get',
params: query,
});
>>>>>>> v1.3
}
//查询患者明细报表--20251106追加
export function getReportPatientDetails(query) {
<<<<<<< HEAD
return request({
url: '/report-manage/report/patient-details',
method: 'get',
params: query
})
=======
return request({
url: '/report-manage/report/patient-details',
method: 'get',
params: query,
});
>>>>>>> v1.3
}
//药剂科报表:药品费用增长率--20251106追加
export function getDrugExpensesGrowthRate(query) {
<<<<<<< HEAD
return request({
url: '/report-manage/report/drug-expenses-growth-rate',
method: 'get',
params: query
})
=======
return request({
url: '/report-manage/report/drug-expenses-growth-rate',
method: 'get',
params: query,
});
>>>>>>> v1.3
}
//药剂科报表:30天回款率--20251106追加
export function getThirtyDayCollectionRate(query) {
<<<<<<< HEAD
return request({
url: '/report-manage/report/thirty-day-collection-rate',
method: 'get',
params: query
})
=======
return request({
url: '/report-manage/report/thirty-day-collection-rate',
method: 'get',
params: query,
});
>>>>>>> v1.3
}
//药剂科报表:基本情况--20251106追加
export function getReportBasicInformationDetails(query) {
<<<<<<< HEAD
return request({
url: '/report-manage/report/basic-information-details',
method: 'get',
params: query
})
=======
return request({
url: '/report-manage/report/basic-information-details',
method: 'get',
params: query,
});
>>>>>>> v1.3
}
//药剂科报表:药品出库情况--20251106追加
export function getReportMedicationStockOutDetails(query) {
<<<<<<< HEAD
return request({
url: '/report-manage/report/medication-stock-out-details',
method: 'get',
params: query
})
=======
return request({
url: '/report-manage/report/medication-stock-out-details',
method: 'get',
params: query,
});
>>>>>>> v1.3
}
//药剂科报表:产品使用情况--20251106追加
export function getReportProductUsageDetails(query) {
<<<<<<< HEAD
return request({
url: '/report-manage/report/product-usage-details',
method: 'get',
params: query
})
=======
return request({
url: '/report-manage/report/product-usage-details',
method: 'get',
params: query,
});
>>>>>>> v1.3
}
//药剂科报表:非中选产品采购量占比--20251106追加
export function getReportNonWinQtyRatio(query) {
<<<<<<< HEAD
return request({
url: '/report-manage/report/non-win-qty-ratio',
method: 'get',
params: query
})
}
=======
return request({
url: '/report-manage/report/non-win-qty-ratio',
method: 'get',
@@ -741,4 +608,3 @@ export function tracePatient(query) {
params: query,
});
}
>>>>>>> v1.3

View File

@@ -169,15 +169,7 @@ import traceabilityPersonInfo from './traceabilityPersonInfo.vue';
const { proxy } = getCurrentInstance();
<<<<<<< HEAD
const {
item_category_code,
} = proxy.useDict(
"item_category_code",
);
=======
const { item_category_code } = proxy.useDict('item_category_code');
>>>>>>> v1.3
const purchaseinventoryList = ref([]);
const loading = ref(true);

View File

@@ -1,11 +1,6 @@
<template>
<div class="app-container" v-loading="pageLoading" loading-text="审批中...">
<<<<<<< HEAD
<el-row :gutter="10" class="mb8" v-if="viewStatus">
=======
<!-- <el-row :gutter="10" class="mb8" v-if="viewStatus">
>>>>>>> v1.3
<el-col :span="1.5">
<el-button v-if="viewStatus != 'view'" plain type="primary" icon="Edit" @click="handelApply"
>审批通过</el-button
@@ -127,10 +122,7 @@
style="width: 150px"
:disabled="data.isEdit"
>
<<<<<<< HEAD
=======
<!-- purchase_type -->
>>>>>>> v1.3
<el-option
v-for="supplier in sourceTypeListOptions"
:key="supplier.id"
@@ -184,10 +176,7 @@
style="width: 150px"
:disabled="data.isEdit"
>
<<<<<<< HEAD
=======
<!-- purchase_type -->
>>>>>>> v1.3
<el-option
v-for="supplier in purposeTypeListOptions"
:key="supplier.id"
@@ -539,12 +528,7 @@ import { formatDate, formatDateymd } from '@/utils/index';
import useUserStore from '@/store/modules/user';
import { useStore } from '@/store/store';
import useTagsViewStore from '@/store/modules/tagsView';
<<<<<<< HEAD
import TraceNoDialog from '@/components/OpenHis/TraceNoDialog/index.vue'
import { nextTick } from 'vue';
=======
import TraceNoDialog from '@/components/OpenHis/TraceNoDialog/index.vue';
>>>>>>> v1.3
const tagsViewStore = useTagsViewStore();
const store = useStore();
const router = useRouter();
@@ -600,16 +584,7 @@ const forms = reactive({
});
const receiptHeaderForm = reactive({
busNo: undefined,
<<<<<<< HEAD
occurrence_time: formatDate(new Date()),
sourceTypeEnum: 16, // 默认药房类型
purposeTypeEnum: 16, // 默认药房类型
sourceLocationId: '',
purposeLocationId: '',
medicationType: '',
=======
occurrenceTime: formatDate(new Date()),
>>>>>>> v1.3
});
const data = reactive({
@@ -654,25 +629,9 @@ const data = reactive({
});
const { queryParams, rules, tableRules } = toRefs(data);
<<<<<<< HEAD
const purposeTypeListOptions = ref([]);
const sourceTypeListOptions = ref([]);
// 立即初始化模拟仓库数据
const mockWarehouses = [
{ id: '1', name: '药房1号' },
{ id: '2', name: '药房2号' },
{ id: '3', name: '药房3号' },
{ id: '4', name: '中心药房' },
{ id: '5', name: '门诊药房' }
];
// 设置模拟数据到仓库列表选项
// 通过onMounted中调用的handleChangeSourceTypeEnum和handleChangePurposeTypeEnum函数动态获取仓库数据
const sourceLocationStoreIdListOptions = ref(undefined);
=======
const purposeTypeListOptions = ref(undefined);
const sourceTypeListOptions = ref(undefined);
const sourceLocationStoreIdListOptions = ref(undefined);
>>>>>>> v1.3
const purposeLocationStoreIdListOptions = ref(undefined);
const categoryListOptions = ref(undefined);
@@ -712,143 +671,6 @@ watch(
{ immediate: true }
);
<<<<<<< HEAD
// 挂载时绑定事件
onMounted(() => {
document.addEventListener("click", handleClickOutside);
// 初始化仓库数据,默认加载药房类型(16)的仓库
handleChangeSourceTypeEnum(receiptHeaderForm.sourceTypeEnum, 1);
handleChangePurposeTypeEnum(receiptHeaderForm.purposeTypeEnum, 1);
});
// 卸载时移除事件
onUnmounted(() => {
document.removeEventListener("click", handleClickOutside);
});
function addNewRow() {
proxy.$refs["receiptHeaderRef"].validate((valid) => {
if (valid) {
if (data.isAdding) {
proxy.$message.warning("请先保存当前行后再新增!");
return;
}
const newRow = {
id: "",
supplyBusNo:"",
occurrence_time:"",
typeEnum_enumText:"",
statusEnum_enumText:"",
sourceLocationId:"", // 源仓库
purposeLocationId:"", //目的仓库
sourceLocationName:"",
purposeLocationName:"",
approverId_dictText:"",
applicantId_dictText:"",
approvalTime:"",
createTime:"",
itemTable: "",
itemQuantity: "",
itemMaxQuantity:"",
itemId: "",
unitCode: "",
remake: "",
supplierId: "",
purposeTypeEnum: "",
purposeLocationId: null,
purposeLocationStoreId: null,
practitionerId: "",
traceNo: "",
invoiceNo: "",
startTime: "",
endTime: "",
price: "",
totalPrice: "",
objQuantity:"",
orgQuantity:"",
// sellPrice: "",
// minSellPrice: "",
// locationInventoryList: [{value:1,label:'药房'},{value:2,label:'仓库'}], // 库房列表
unitList: {}, // 单位列表
isEditing: true, // 标记当前行是否正在编辑
error: false, // 新增 error 字段
isSave: false, // 当前行是否保存
};
form.purchaseinventoryList.push(newRow);
data.isAdding = true; // 设置标志位为 true表示有未保存的
}
});
}
function handleBlur(row, index) {
let hasError = false;
for (let key in row) {
if(!row[key]){
if(key=='itemQuantity'||key=='totalSourceQuantity'||key=='totalPurposeQuantity'||key=='price'||key=='totalPrice'){
row[key] = 0
}else{
row[key] = ''
}
}
}
if(receiptHeaderForm.medicationType){
if(!row.itemTable){
if (receiptHeaderForm.medicationType == 1) {
row.itemTable = "med_medication_definition";
} else {
console.log('Unknown warehouse type:', value);
row.itemTable = "adm_device_definition";
}
}
}
row.sourceLocationId =receiptHeaderForm.sourceLocationId
row.sourceLocationStoreId = receiptHeaderForm.sourceLocationStoreId;
row.purposeLocationId = receiptHeaderForm.purposeLocationId
row.purposeLocationStoreId = receiptHeaderForm.purposeLocationStoreId;
row.busNo = receiptHeaderForm.busNo;
row.applyTime = formatDate(row.applyTime)
row.startTime = formatDateymd(row.startTime)
row.endTime = formatDateymd(row.endTime)
row.occurrence_time = receiptHeaderForm.occurrence_time;
let sourceTypeEnum = warehous_type.value.filter(e=>{return e.label==receiptHeaderForm.sourceTypeEnum})
row.sourceTypeEnum = (sourceTypeEnum&&sourceTypeEnum[0])?sourceTypeEnum[0].value:receiptHeaderForm.sourceTypeEnum
let purposeTypeEnum = warehous_type.value.filter(e=>{return e.label==receiptHeaderForm.purposeTypeEnum})
row.purposeTypeEnum = (purposeTypeEnum&&purposeTypeEnum[0])?purposeTypeEnum[0].value:receiptHeaderForm.purposeTypeEnum
let sourceLocationId = sourceTypeListOptions.value.filter(e=>{return e.name==receiptHeaderForm.sourceLocationId})
row.sourceLocationId = (sourceLocationId&&sourceLocationId[0])?sourceLocationId[0].id:receiptHeaderForm.sourceLocationId
let purposeLocationId = purposeTypeListOptions.value.filter(e=>{return e.name==receiptHeaderForm.purposeLocationId})
row.purposeLocationId = (purposeLocationId&&purposeLocationId[0])?purposeLocationId[0].id:receiptHeaderForm.purposeLocationId
row.applicantId = userStore.id;
}
// 取消行编辑
function cancelEditRow(){
const findIndexId = form.purchaseinventoryList.findIndex(e=>e.id==currentRow.value.id)
form.purchaseinventoryList[findIndexId] = {}
}
// 点击行时记录当前行
function handleRowClick(row) {
// getMedicineList({ itemId: row.itemId,sourceLocationId:row.sourceLocationId,purposeLocationId:row.purposeLocationId }).then((res) => {
// });
currentRow.value = row;
}
// 监听表格外的点击事件
function handleClickOutside(event) {
// if (tableRef.value && !tableRef.value.$el.contains(event.target)) {
// if (currentRow.value) {
// handleSave(currentRow.value);
// currentRow.value = null; // 清空当前行
// }
// }
}
=======
// 监听路由变化
watch(
() => route.query,
@@ -877,7 +699,6 @@ watch(
},
{ immediate: true }
);
>>>>>>> v1.3
function handelApply() {
pageLoading.value = true;
@@ -936,19 +757,6 @@ function handleSubmitApproval() {
}
// 切换仓库类型获取药房/药库列表 目的仓库切换
<<<<<<< HEAD
function handleChangePurposeTypeEnum(value,type) {
console.log('handleChangePurposeTypeEnum called with value:', value, 'type:', type);
receiptHeaderForm.purposeLocationId = '';
if(value === 16){ // 药房类型
getPharmacyList().then(res => {
console.log('getPharmacyList response:', res);
if (res && res.data) {
purposeTypeListOptions.value = res.data;
if(!type && res.data.length > 0) {
receiptHeaderForm.purposeLocationId = res.data[0].id;
}
=======
function handleChangePurposeTypeEnum(value, type) {
if (value == 16) {
getPharmacyList().then((res) => {
@@ -956,28 +764,16 @@ function handleChangePurposeTypeEnum(value, type) {
if (!route.query.supplyBusNo && !type) {
receiptHeaderForm.purposeLocationId = '';
receiptHeaderForm.purposeLocationId1 = '';
>>>>>>> v1.3
}
}).catch(error => {
console.error('Error fetching pharmacy list:', error);
});
<<<<<<< HEAD
} else if(value === 17){ // 药库类型
getDispensaryList().then(res => {
console.log('getDispensaryList response:', res);
if (res && res.data) {
purposeTypeListOptions.value = res.data;
if(!type && res.data.length > 0) {
receiptHeaderForm.purposeLocationId = res.data[0].id;
}
=======
} else if (value == 11) {
getDispensaryList().then((res) => {
purposeTypeListOptions.value = res.data;
if (!route.query.supplyBusNo && !type) {
receiptHeaderForm.purposeLocationId = '';
receiptHeaderForm.purposeLocationId1 = '';
>>>>>>> v1.3
}
}).catch(error => {
console.error('Error fetching dispensary list:', error);
@@ -986,20 +782,6 @@ function handleChangePurposeTypeEnum(value, type) {
purposeTypeListOptions.value = [];
}
}
<<<<<<< HEAD
// 源仓库切换
function handleChangeSourceTypeEnum(value,type) {
console.log('handleChangeSourceTypeEnum called with value:', value, 'type:', type);
receiptHeaderForm.sourceLocationId = '';
if(value === 16){ // 药房类型
getPharmacyList().then(res => {
console.log('getPharmacyList response:', res);
if (res && res.data) {
sourceTypeListOptions.value = res.data;
if(!type && res.data.length > 0) {
receiptHeaderForm.sourceLocationId = res.data[0].id;
}
=======
// 源仓库切换
function handleChangeSourceTypeEnum(value, type) {
if (value == 16) {
@@ -1008,28 +790,16 @@ function handleChangeSourceTypeEnum(value, type) {
if (!route.query.supplyBusNo && !type) {
receiptHeaderForm.sourceLocationId = '';
receiptHeaderForm.sourceLocationId1 = '';
>>>>>>> v1.3
}
}).catch(error => {
console.error('Error fetching pharmacy list:', error);
});
<<<<<<< HEAD
} else if(value === 17){ // 药库类型
getDispensaryList().then(res => {
console.log('getDispensaryList response:', res);
if (res && res.data) {
sourceTypeListOptions.value = res.data;
if(!type && res.data.length > 0) {
receiptHeaderForm.sourceLocationId = res.data[0].id;
}
=======
} else if (value == 11) {
getDispensaryList().then((res) => {
sourceTypeListOptions.value = res.data;
if (!route.query.supplyBusNo && !type) {
receiptHeaderForm.sourceLocationId = '';
receiptHeaderForm.sourceLocationId1 = '';
>>>>>>> v1.3
}
}).catch(error => {
console.error('Error fetching dispensary list:', error);
@@ -1440,52 +1210,6 @@ function getTransferProductTypeList() {
categoryListOptions.value = response.data.categoryListOptions;
});
}
<<<<<<< HEAD
function getBusNoInitList() {
if(route.query.supplyBusNo||(forms.purchaseinventoryList&&forms.purchaseinventoryList[0]&&forms.purchaseinventoryList[0].id)){ // 编辑
store.clearCurrentDataPLDB()
store.clearCurrentDataPLDBAll()
receiptHeaderForm.busNo = route.query.supplyBusNo?route.query.supplyBusNo:receiptHeaderForm.busNo
viewStatus.value = route.query.view
data.isEdit = true;
queryParams.value.busNo = receiptHeaderForm.busNo
getTransferProductDetail(queryParams.value).then((res) => {
form.purchaseinventoryList = res.data.records?res.data.records:res.data
receiptHeaderForm.occurrenceTime = res.data.records[0].occurrenceTime ? formatDate(res.data.records[0].occurrenceTime) : new Date()
total.value = res.data.total
getDetail(1)
getAllBatchList(2)
})
sessionStorage.setItem('busNopl',"")
}else{ //新增
data.isEdit = false;
if(!sessionStorage.getItem('busNopl')){
store.clearCurrentDataPLDB()
store.clearCurrentDataPLDBAll()
getBusNoInit().then((response) => {
receiptHeaderForm.busNo = response.data.busNo;
sessionStorage.setItem('busNopl', receiptHeaderForm.busNo)
})
}else{
receiptHeaderForm.busNo = sessionStorage.getItem('busNopl')
}
}
}
// 初始化函数
function initComponent() {
console.log('initComponent called');
getTransferProductTypeList();
getBusNoInitList();
console.log('组件初始化完成,仓库列表数据已预先设置');
}
// 调用初始化函数
initComponent();
=======
getTransferProductTypeList();
// 导出
@@ -1503,7 +1227,6 @@ function handleExport() {
`批量调拨单据明细记录_${proxy.formatDateStr(new Date(), 'YYYY-MM-DD')}.xlsx`
);
}
>>>>>>> v1.3
</script>
<style scoped>
.custom-tree-node {

View File

@@ -120,15 +120,9 @@
</el-radio-group>
</el-form-item>
</el-col>
<<<<<<< HEAD
<el-col :span="6">
<el-form-item label="" prop="tempFlag">
<el-radio-group v-model="form.tempFlag" :disabled="isViewMode" size="small">
=======
<el-col :span="7">
<el-form-item label="活动标识" prop="activeFlag">
<el-radio-group v-model="form.activeFlag" :disabled="isViewMode">
>>>>>>> v1.3
<el-radio v-for="item in tempFlagList" :key="item.value" :label="item.value">
{{ item.info }}
</el-radio>
@@ -163,29 +157,16 @@
<el-input v-model="form.birthDate" v-show="false" />
</el-form-item>
</el-col>
<<<<<<< HEAD
<el-col :span="6">
=======
<el-col :span="8">
>>>>>>> v1.3
<el-form-item label="年龄" prop="age">
<el-input
v-model="form.age"
:disabled="isViewMode"
@input="(value) => (form.age = value.replace(/[^0-9]/g, ''))"
<<<<<<< HEAD
>
<template #suffix></template>
</el-input>
</el-form-item>
</el-col>
<el-col :span="4">
=======
/>
</el-form-item>
</el-col>
<!-- <el-col :span="6">
>>>>>>> v1.3
<el-form-item label="国家编码" prop="countryCode">
<el-input v-model="form.countryCode" clearable :disabled="isViewMode" />
</el-form-item>
@@ -353,11 +334,7 @@
<script setup name="patientManagement">
import pcas from 'china-division/dist/pcas-code.json';
<<<<<<< HEAD
import { ref, computed, onMounted, toRefs, getCurrentInstance, reactive, watch } from 'vue';
=======
import { ref, computed, nextTick } from 'vue';
>>>>>>> v1.3
import { addPatient, listPatient, updatePatient, lists } from './component/api';
import PatientAddDialog from '@/views/charge/outpatientregistration/components/patientAddDialog';
@@ -481,41 +458,6 @@ const findNodeByCode = (data, code) => {
/** 查询患者列表 */
function getList() {
listPatient(queryParams.value).then((response) => {
<<<<<<< HEAD
// 适配门诊挂号接口返回的数据格式
// 不同的接口可能返回不同格式,这里做一个通用适配
if (response.data && Array.isArray(response.data)) {
// 如果返回的直接是数组
patientList.value = response.data;
total.value = response.data.length;
} else if (response.data && response.data.records) {
// 如果返回的是分页格式
patientList.value = response.data.records;
total.value = response.data.total;
} else if (response.data && response.data.rows) {
// 另一种可能的分页格式
patientList.value = response.data.rows;
total.value = response.data.total;
} else {
// 默认处理
patientList.value = [];
total.value = 0;
}
});
lists().then((response) => {
console.log(response);
// 确保即使响应格式变化也能正常工作
if (response.data) {
occupationtypeList.value = response.data.occupationType || [];
administrativegenderList.value = response.data.sex || [];
bloodtypeaboList.value = response.data.bloodTypeABO || [];
bloodtypearhList.value = response.data.bloodTypeRH || [];
familyrelationshiptypeList.value = response.data.familyRelationshipType || [];
maritalstatusList.value = response.data.maritalStatus || [];
tempFlagList.value = response.data.whetherStatus || [];
idTypeList.value = response.data.identityDocumentType || [];
}
=======
patientList.value = response.data.records;
total.value = response.data.total;
console.log('patientList======>', JSON.stringify(patientList.value));
@@ -530,7 +472,6 @@ function getList() {
maritalstatusList.value = response.data.maritalStatus;
tempFlagList.value = response.data.whetherStatus;
idTypeList.value = response.data.identityDocumentType;
>>>>>>> v1.3
});
}

View File

@@ -33,11 +33,7 @@
"top": 22.5,
"height": 12,
"width": 88.5,
<<<<<<< HEAD
"title": "长春大学医院",
=======
"title": "长春市朝阳区中医院医院",
>>>>>>> v1.3
"coordinateSync": false,
"widthHeightSync": false,
"fontSize": 13.5,
@@ -335,8 +331,4 @@
]
}
]
<<<<<<< HEAD
}
=======
}
>>>>>>> v1.3

View File

@@ -37,11 +37,7 @@
"top": 16.5,
"height": 22.5,
"width": 120,
<<<<<<< HEAD
"title": "长春大学医院",
=======
"title": "长春市朝阳区中医院医院",
>>>>>>> v1.3
"coordinateSync": false,
"widthHeightSync": false,
"fontFamily": "Microsoft YaHei",

View File

@@ -237,21 +237,6 @@
ref="tableRef"
>
<el-table-column type="selection" width="55" align="center" fixed="left" />
<<<<<<< HEAD
<el-table-column
prop="prescriptionNo"
label="处方号"
width="120"
align="center"
/>
<el-table-column prop="itemName" label="项目名称" width="160" align="center" />
<el-table-column
prop="statusEnum_enumText"
label="发药状态"
width="100"
align="center"
>
=======
<el-table-column prop="prescriptionNo" label="处方号" width="120" align="center" />
<el-table-column prop="conditionName" label="诊断" width="120" align="center" />
<el-table-column prop="medTypeCode_dictText" label="处方类型" width="120" align="center" />
@@ -317,7 +302,6 @@
</template>
</el-table-column>
<el-table-column prop="statusEnum_enumText" label="发药状态" width="100" align="center">
>>>>>>> v1.3
<template #default="scope">
<el-tag :type="tagType(scope.row.statusEnum)">
{{ scope.row.statusEnum_enumText }}
@@ -380,22 +364,7 @@
<el-table-column prop="doctorName" label="开单医生" width="100" align="center" />
<!-- <el-table-column prop="dose" label="剂量" width="100" align="center" /> -->
<el-table-column prop="rateCode" label="频次" width="100" align="center" />
<<<<<<< HEAD
<el-table-column
prop="methodCode_dictText"
label="用法"
width="100"
align="center"
/>
<el-table-column
prop="dispensePerDuration"
label="天数"
width="80"
align="center"
/>
=======
<el-table-column prop="methodCode_dictText" label="用法" width="100" align="center" />
>>>>>>> v1.3
<el-table-column
label="操作"
align="center"
@@ -473,13 +442,8 @@
</template>
<script setup name="westernmedicine">
<<<<<<< HEAD
import { ref, computed, onMounted, onBeforeMount } from "vue";
import { ElMessage } from "element-plus";
=======
import { ref, computed, onMounted, onBeforeMount, nextTick } from 'vue';
import { ElMessage } from 'element-plus';
>>>>>>> v1.3
import {
listWesternmedicine,
listPatient,
@@ -492,16 +456,6 @@ import {
deviceDispense,
deviceInvalid,
devicePatientList,
<<<<<<< HEAD
} from "./components/api";
import { advicePrint } from "@/api/public";
import { formatDate, formatDateStr } from "@/utils/index";
import { debounce } from "lodash-es";
import TraceNoDialog from "@/components/OpenHis/TraceNoDialog/index.vue";
// 使用window.hiprint不再从vue-plugin-hiprint导入
import templateJson from "./components/templateJson.json";
import disposalTemplate from "./components/disposalTemplate.json";
=======
medicineMatch,
getDoctorSignature,
} from './components/api';
@@ -515,7 +469,6 @@ import templateJson from '@/components/Print/Pharmacy.json';
import chineseMedicineTemplateJson from '@/components/Print/ChineseMedicinePrescription.json';
import disposalTemplate from './components/disposalTemplate.json';
import { formatInventory } from '../../../utils/his';
>>>>>>> v1.3
const { proxy } = getCurrentInstance();
const showSearch = ref(true);
@@ -550,13 +503,9 @@ const isManualSelection = ref(false);
const couldSave = ref(true);
const groups = ref({});
const openTraceNoDialog = ref(false);
<<<<<<< HEAD
const ypName = ref("");
=======
const loading = ref(false);
const adjustPriceSwitchState = ref(false);
const ypName = ref('');
>>>>>>> v1.3
const medicineTotalPrice = ref(0);
const projectTypeCode = ref("2");
const selectedRow = ref(null);
@@ -619,76 +568,21 @@ function submit(value) {
}
});
}
<<<<<<< HEAD
// 设置默认日期范围为当天
function setDefaultDateRange() {
const today = new Date();
const year = today.getFullYear();
const month = String(today.getMonth() + 1).padStart(2, "0");
const day = String(today.getDate()).padStart(2, "0");
const formattedDate = `${year}-${month}-${day}`;
dateRange.value = [formattedDate, formattedDate];
console.log("222", dateRange.value);
}
function getList() {
console.log("224555552", dateRange.value);
queryParams.value.receptionTimeSTime = dateRange.value[0] + " 00:00:00";
queryParams.value.receptionTimeETime = dateRange.value[1] + " 23:59:59";
console.log("222", queryParams.value);
if (projectTypeCode.value == 2) {
listPatient(queryParams.value).then((response) => {
console.log("Full response1:", response);
=======
function getList() {
queryParams.value.receptionTimeSTime = dateRange.value[0] + ' 00:00:00';
queryParams.value.receptionTimeETime = dateRange.value[1] + ' 23:59:59';
if (projectTypeCode.value == 2) {
listPatient(queryParams.value).then((response) => {
>>>>>>> v1.3
patientList.value = response.data.records;
total.value = response.data.total;
});
} else if (projectTypeCode.value == 3) {
<<<<<<< HEAD
debugger;
devicePatientList(queryParams.value).then((response) => {
console.log("Full response1:", response);
=======
devicePatientList(queryParams.value).then((response) => {
>>>>>>> v1.3
patientList.value = response.data.records;
total.value = response.data.total;
});
} else {
<<<<<<< HEAD
Promise.all([
listPatient(queryParams.value),
devicePatientList(queryParams.value),
]).then(([patientRes, deviceRes]) => {
// 合并两个接口的数据
const patientRecords = patientRes.data.records || [];
const deviceRecords = deviceRes.data.records || [];
const combinedRecords = [...patientRecords, ...deviceRecords];
// 根据 encounterId 去重
const uniqueRecords = combinedRecords.filter(
(item, index, self) =>
index === self.findIndex((record) => record.encounterId === item.encounterId)
);
patientList.value = uniqueRecords;
// 合并总数量(如果需要精确数量,可能需要后端支持)
total.value = uniqueRecords.length;
});
}
listInit().then((response) => {
console.log("Full response2:", response);
departmentList.value = [
{ value: null, label: "全部" },
...response.data.departmentOptions,
];
=======
Promise.all([listPatient(queryParams.value), devicePatientList(queryParams.value)]).then(
([patientRes, deviceRes]) => {
// 合并两个接口的数据
@@ -708,18 +602,12 @@ function getList() {
}
listInit().then((response) => {
departmentList.value = [{ value: null, label: '全部' }, ...response.data.departmentOptions];
>>>>>>> v1.3
backReason.value = response.data.notPerformedReasonOptions;
dispenseStatusOptions.value = response.data.dispenseStatusOptions;
preparerDoctorOptions.value = response.data.preparerDoctorOptions;
preparerDoctor.value = preparerDoctorOptions.value[0].value;
});
}
<<<<<<< HEAD
//打印中西药处方
=======
>>>>>>> v1.3
async function printPrescription() {
const selectedRows = tableRef.value.getSelectionRows();
if (selectedRows.length === 0) {
@@ -739,543 +627,6 @@ async function printPrescription() {
groupedRows[prescriptionNo].push(row);
});
<<<<<<< HEAD
console.log("按处方号分组的结果:", groupedRows);
// 如果您需要将分组后的数据转换为数组形式
const groupedArray = Object.values(groupedRows);
console.log("分组后的数组形式:", groupedArray);
groupedArray.forEach((item, index) => {
const total = item.reduce((sum, item) => {
return sum + (item.totalPrice || 0);
}, 0);
result.push({
...res.data,
medTotalAmount: total,
prescriptionList: item,
});
});
console.log(result, "result");
const printElements = templateJson;
var hiprintTemplate = new hiprint.PrintTemplate({ template: printElements }); // 定义模板
hiprintTemplate.print2(result, {
title: "打印标题",
height: 210,
width: 148,
}); //开始打印
// 直接打印回调
// 发送任务到打印机成功
hiprintTemplate.on("printSuccess", function (e) {
console.log("打印成功");
});
// 发送任务到打印机失败
hiprintTemplate.on("printError", function (e) {
console.log("打印失败");
});
});
}
// 新增打印机相关变量
const printerList = ref([]); // 打印机列表
const selectedPrinter = ref(""); // 选中的打印机
const showPrinterDialog = ref(false); // 显示打印机选择对话框
const previewData = ref(null); // 预览数据
// 抽取获取打印数据的公共函数
// 合并预览和打印功能的主函数
async function previewAndPrint() {
try {
const result = await getPrintData();
if (!result) return;
// 保存预览数据
previewData.value = result;
console.log("直接执行处方打印预览");
// 构建预览HTML保持原有格式
let previewHtml = "";
// 为每个处方生成预览内容
result.forEach((prescription, index) => {
// 确保处方数据存在
if (!prescription) return;
// 从处方获取药品列表,确保是数组
const prescriptionList = Array.isArray(prescription.prescriptionList)
? prescription.prescriptionList
: [];
previewHtml += '<div class="prescription-container">';
previewHtml += "<h3>处方 " + (index + 1) + "</h3>";
previewHtml += '<div class="prescription-info">';
previewHtml +=
"<p><strong>处方号:</strong> " + (prescription.prescriptionNo || "N/A") + "</p>";
previewHtml +=
"<p><strong>患者姓名:</strong> " + (prescription.patientName || "N/A") + "</p>";
previewHtml +=
"<p><strong>性别:</strong> " +
(prescription.genderEnum_enumText || prescription.gender || "N/A") +
"</p>";
previewHtml += "<p><strong>年龄:</strong> " + (prescription.age || "N/A") + "</p>";
previewHtml +=
"<p><strong>开具日期:</strong> " +
(prescription.reqTime ||
prescription.adviceDate ||
prescription.createTime ||
new Date().toLocaleDateString()) +
"</p>";
previewHtml +=
"<p><strong>医生:</strong> " + (prescription.doctorName || "N/A") + "</p>";
// 添加额外的处方信息
if (prescription.encounterNo)
previewHtml += "<p><strong>门诊号:</strong> " + prescription.encounterNo + "</p>";
if (prescription.departmentName)
previewHtml +=
"<p><strong>科室:</strong> " + prescription.departmentName + "</p>";
if (prescription.conditionName)
previewHtml +=
"<p><strong>临床诊断:</strong> " + prescription.conditionName + "</p>";
if (prescription.phone)
previewHtml += "<p><strong>电话:</strong> " + prescription.phone + "</p>";
previewHtml += "</div>";
previewHtml += '<table class="prescription-table">';
previewHtml += "<thead>";
previewHtml += "<tr>";
previewHtml += "<th>药品名称</th>";
previewHtml += "<th>规格</th>";
previewHtml += "<th>单价</th>";
previewHtml += "<th>数量</th>";
previewHtml += "<th>金额</th>";
previewHtml += "<th>费用等级</th>";
previewHtml += "<th>用法用量</th>";
previewHtml += "</tr>";
previewHtml += "</thead>";
previewHtml += "<tbody>";
// 添加药品列表
if (prescriptionList.length > 0) {
prescriptionList.forEach((item) => {
previewHtml += "<tr>";
// 使用映射后的字段名,确保与打印模板一致
previewHtml += "<td>" + (item.medicineName || item.itemName || "N/A") + "</td>";
previewHtml += "<td>" + (item.totalVolume || item.spec || "") + "</td>";
previewHtml += "<td>" + (item.unitPrice || item.price || "0.00") + "</td>";
previewHtml +=
"<td>" +
(item.quantity || "N/A") +
" " +
(item.unitCode_dictText || item.unit || "") +
"</td>";
previewHtml += "<td>" + (item.totalPrice || "0.00") + "</td>";
previewHtml += "<td>" + (item.contractName || "N/A") + "</td>";
// 组合用法用量信息
const usageInfo = [];
if (item.dose && item.doseUnitCode_dictText) {
usageInfo.push(item.dose + item.doseUnitCode_dictText);
}
if (item.methodCode_dictText || item.usage) {
usageInfo.push(item.methodCode_dictText || item.usage);
}
if (item.frequency) {
usageInfo.push(item.frequency);
}
previewHtml += "<td>" + usageInfo.join("<br/>") + "</td>";
previewHtml += "</tr>";
});
} else {
previewHtml +=
'<tr><td colspan="7" style="text-align: center;">暂无药品信息</td></tr>';
}
previewHtml += "</tbody>";
previewHtml += "<tfoot>";
previewHtml += "<tr>";
previewHtml +=
'<td colspan="6" style="text-align: right; font-weight: bold;">总计:</td>';
previewHtml +=
'<td style="font-weight: bold;">' +
(prescription.medTotalAmount || "0.00") +
"</td>";
previewHtml += "</tr>";
previewHtml += "</tfoot>";
previewHtml += "</table>";
previewHtml += '<div class="prescription-footer">';
previewHtml +=
"<p><strong>医疗机构:</strong> " + (prescription.contractName || "N/A") + "</p>";
previewHtml += "</div>";
previewHtml += "</div>";
previewHtml += '<hr class="prescription-separator">';
}); // ✅ 正确的 forEach 结束位置
// ✅ hiprint 打印逻辑移到这里forEach 循环之外)
console.log(result, "result");
const printElements = templateJson;
var hiprintTemplate = new hiprint.PrintTemplate({ template: printElements });
hiprintTemplate.print2(result, {
height: 210,
width: 148,
});
// 打印回调
hiprintTemplate.on("printSuccess", function (e) {
console.log("打印成功");
});
hiprintTemplate.on("printError", function (e) {
console.log("打印失败");
});
// ✅ 创建临时打印容器(不可见)
const printContainer = document.createElement("div");
printContainer.style.position = "fixed";
printContainer.style.left = "-9999px";
printContainer.style.top = "-9999px";
printContainer.style.width = "800px";
// 添加打印样式
const style = document.createElement("style");
style.textContent = `
.print-content {
font-family: Arial, sans-serif;
font-size: 12px;
}
.patient-info-table {
width: 100%;
border-collapse: collapse;
margin-bottom: 15px;
}
.patient-info-table td {
padding: 4px 8px;
border: 1px solid #ddd;
font-size: 12px;
}
.patient-info-table .label {
font-weight: bold;
background-color: #f9f9f9;
}
.medicine-table {
width: 100%;
border-collapse: collapse;
}
.medicine-table th,
.medicine-table td {
border: 1px solid #000;
padding: 8px;
text-align: left;
}
.medicine-table th {
background: #f2f2f2;
font-weight: bold;
}
.page-break {
page-break-after: always;
}
@media print {
body > *:not(#print-container) {
display: none !important;
}
#print-container {
position: static !important;
width: 100% !important;
}
}
`;
document.head.appendChild(style);
printContainer.id = "print-container";
// 构建包含患者信息和药品信息的打印内容
let printHtml = '<div class="print-content">';
result.forEach((prescription, index) => {
if (!prescription) return;
const prescriptionList = Array.isArray(prescription.prescriptionList)
? prescription.prescriptionList
: [];
printHtml += '<div class="prescription-medicines">';
printHtml += "<h4>处方 " + (index + 1) + "</h4>";
// 添加患者信息表格
printHtml += '<table class="patient-info-table">';
printHtml += "<tr>";
printHtml += '<td class="label">姓名:</td>';
printHtml += "<td>" + (prescription.patientName || "-") + "</td>";
printHtml += '<td class="label">性别:</td>';
printHtml +=
"<td>" +
(prescription.genderEnum_enumText || prescription.gender || "-") +
"</td>";
printHtml += '<td class="label">年龄:</td>';
printHtml += "<td>" + (prescription.age || "-") + "</td>";
printHtml += '<td class="label">处方号:</td>';
printHtml += "<td>" + (prescription.prescriptionNo || "-") + "</td>";
printHtml += "</tr>";
printHtml += "<tr>";
printHtml += '<td class="label">门诊号:</td>';
printHtml += "<td>" + (prescription.encounterNo || "-") + "</td>";
printHtml += '<td class="label">开具日期:</td>';
printHtml +=
"<td>" +
(prescription.reqTime ||
prescription.adviceDate ||
prescription.createTime ||
"-") +
"</td>";
printHtml += '<td class="label">医生:</td>';
printHtml += "<td>" + (prescription.doctorName || "-") + "</td>";
printHtml += '<td class="label">科室:</td>';
printHtml += "<td>" + (prescription.departmentName || "-") + "</td>";
printHtml += "</tr>";
printHtml += "<tr>";
printHtml += '<td class="label">临床诊断:</td>';
printHtml += '<td colspan="3">' + (prescription.conditionName || "-") + "</td>";
printHtml += '<td class="label">电话:</td>';
printHtml +=
'<td colspan="3">' +
(prescription.phone || prescription.mobile || prescription.patientPhone || "-") +
"</td>";
printHtml += "</tr>";
printHtml += "</table>";
// 添加药品信息表格
if (prescriptionList.length > 0) {
printHtml += '<table class="medicine-table">';
printHtml += "<thead>";
printHtml += "<tr>";
printHtml += "<th>药品名称</th>";
printHtml += "<th>规格</th>";
printHtml += "<th>单价</th>";
printHtml += "<th>数量</th>";
printHtml += "<th>金额</th>";
printHtml += "<th>用法用量</th>";
printHtml += "</tr>";
printHtml += "</thead>";
printHtml += "<tbody>";
prescriptionList.forEach((item) => {
printHtml += "<tr>";
printHtml += "<td>" + (item.medicineName || item.itemName || "N/A") + "</td>";
printHtml += "<td>" + (item.totalVolume || item.spec || "") + "</td>";
printHtml += "<td>" + (item.unitPrice || item.price || "0.00") + "</td>";
printHtml +=
"<td>" +
(item.quantity || "N/A") +
" " +
(item.unitCode_dictText || item.unit || "") +
"</td>";
printHtml += "<td>" + (item.totalPrice || "0.00") + "</td>";
const usageInfo = [];
if (item.dose && item.doseUnitCode_dictText) {
usageInfo.push(item.dose + item.doseUnitCode_dictText);
}
if (item.methodCode_dictText || item.usage) {
usageInfo.push(item.methodCode_dictText || item.usage);
}
if (item.frequency) {
usageInfo.push(item.frequency);
}
printHtml += "<td>" + usageInfo.join("<br/>") + "</td>";
printHtml += "</tr>";
});
printHtml += "</tbody>";
printHtml += "<tfoot>";
printHtml += "<tr>";
printHtml +=
'<td colspan="4" style="text-align: right; font-weight: bold;">总计:</td>';
printHtml +=
'<td colspan="2" style="font-weight: bold;">' +
(prescription.medTotalAmount || "0.00") +
"</td>";
printHtml += "</tr>";
printHtml += "</tfoot>";
printHtml += "</table>";
} else {
printHtml += "<p>暂无药品信息</p>";
}
// 分页符(最后一个处方除外)
if (index < result.length - 1) {
printHtml += '<div class="page-break"></div>';
}
printHtml += "</div>";
});
printHtml += "</div>";
printContainer.innerHTML = printHtml;
// 添加到文档
document.body.appendChild(printContainer);
// 触发打印预览
window.print();
// 打印完成后移除临时容器和样式
const cleanup = () => {
if (printContainer && document.body.contains(printContainer)) {
document.body.removeChild(printContainer);
}
if (style && document.head.contains(style)) {
document.head.removeChild(style);
}
window.removeEventListener("afterprint", cleanup);
};
// 监听打印完成事件
window.addEventListener("afterprint", cleanup);
// 添加超时清理
setTimeout(() => {
cleanup();
}, 30000);
proxy.$modal.msgSuccess("打印预览已启动");
// 同时处理后台打印逻辑
setTimeout(() => {
handleBackgroundPrint(result);
}, 500);
} catch (error) {
console.error("预览和打印过程出错:", error);
proxy.$modal.msgError("操作失败: " + error.message);
}
}
// 后台打印逻辑,复用原有的打印功能
function handleBackgroundPrint(result) {
try {
// 获取打印机列表
const printers = getPrinterList();
console.log("获取到的打印机列表:", printers);
if (printers.length === 0) {
console.log("未检测到可用打印机,仅提供预览功能");
return;
}
// 设置打印机列表
printerList.value = printers;
// 检查是否有缓存的打印机
const cachedPrinter = getCachedPrinter();
console.log("缓存的打印机:", cachedPrinter);
if (cachedPrinter && printers.some((printer) => printer.name === cachedPrinter)) {
// 如果有缓存的打印机,直接使用
selectedPrinter.value = cachedPrinter;
confirmPrinter(result);
} else {
// 否则不自动显示打印机选择对话框,让用户在预览页面手动选择打印
console.log("无缓存打印机,用户可在预览页面手动打印");
}
} catch (error) {
console.error("后台打印过程出错:", error);
// 不显示错误提示,以免干扰用户在预览页面的操作
}
}
// 使用保存的打印数据执行打印
function confirmPrinter(printData) {
console.log("开始打印,传入数据:", printData);
console.log("window临时数据:", window.currentPrintData);
// 如果没有传入数据尝试从window临时变量获取
let data = printData || window.currentPrintData;
if (!selectedPrinter.value) {
proxy.$modal.msgWarning("请选择打印机");
return;
}
if (!data || !Array.isArray(data) || data.length === 0) {
proxy.$modal.msgError("没有找到有效的打印数据");
showPrinterDialog.value = false;
return;
}
if (!templateJson) {
proxy.$modal.msgError("打印模板加载失败");
showPrinterDialog.value = false;
return;
}
// 确保数据字段映射正确,特别是规格字段
data = data.map((prescription) => {
const mappedPrescription = { ...prescription };
// 确保药品列表字段映射正确
if (Array.isArray(prescription.prescriptionList)) {
mappedPrescription.prescriptionList = prescription.prescriptionList.map((med) => ({
...med,
// 确保规格字段正确映射优先使用totalVolume
totalVolume: med.totalVolume || med.spec || "",
// 确保其他关键字段存在
medicineName: med.medicineName || med.itemName || "",
unitPrice: med.unitPrice || med.price || 0,
unitCode_dictText: med.unitCode_dictText || med.unit || "",
methodCode_dictText: med.methodCode_dictText || med.usage || "",
}));
}
return mappedPrescription;
});
console.log("处理后的打印数据:", data);
console.log("准备执行打印,打印机:", selectedPrinter.value);
// 使用his.js中的savePrinterToCache保存选择
savePrinterToCache(selectedPrinter.value);
try {
// 检查hiprint是否可用
if (!window.hiprint) {
throw new Error("打印插件未正确加载");
}
// 直接使用hiprint执行打印确保功能正常
const hiprintTemplate = new window.hiprint.PrintTemplate({
template: templateJson,
});
const printOptions = {
title: "处方打印",
height: 210,
width: 148,
printer: selectedPrinter.value,
};
// 打印成功回调
hiprintTemplate.on("printSuccess", function (e) {
console.log("打印成功:", e);
proxy.$modal.msgSuccess("打印成功");
showPrinterDialog.value = false;
// 清除临时数据
window.currentPrintData = null;
});
// 打印失败回调
hiprintTemplate.on("printError", function (e) {
console.error("打印失败:", e);
proxy.$modal.msgError("打印失败,请检查打印机连接");
showPrinterDialog.value = false;
window.currentPrintData = null;
});
// 执行打印
console.log("调用hiprint.print2方法");
hiprintTemplate.print2(data, printOptions);
} catch (error) {
console.error("打印执行出错:", error);
proxy.$modal.msgError("打印执行失败: " + error.message);
showPrinterDialog.value = false;
window.currentPrintData = null;
}
=======
// 获取所有唯一的doctorId
const uniqueDoctorIds = [...new Set(selectedRows.map((row) => row.doctorId).filter((id) => id))];
console.log('uniqueDoctorIds:', uniqueDoctorIds);
@@ -1377,7 +728,6 @@ function confirmPrinter(printData) {
});
}
});
>>>>>>> v1.3
}
// 取消打印机选择
@@ -1403,8 +753,6 @@ function handleQuery() {
}
queryParams.value.pageNo = 1;
getList();
<<<<<<< HEAD
=======
}
function formatLotNumberLabel(row, item) {
@@ -1432,7 +780,6 @@ function formatLotNumberLabel(row, item) {
proxy.formatDateStr(item.expirationDate, 'YYYY-MM-DD')
);
}
>>>>>>> v1.3
}
function countGroupRows(data) {
@@ -1448,20 +795,8 @@ function countGroupRows(data) {
return groupCounts;
}
function getRowMarkers(groupCounts, data) {
<<<<<<< HEAD
const markers = new Array(data.length).fill("");
// ✅ 兼容 Map 和普通对象
const entries =
groupCounts instanceof Map
? Array.from(groupCounts.entries())
: Object.entries(groupCounts);
entries.forEach(([prescriptionNo, groupInfo]) => {
=======
const markers = new Array(data.length).fill('');
groupCounts.forEach((groupInfo, prescriptionNo) => {
>>>>>>> v1.3
const { count, indices } = groupInfo;
if (count === 1) {
@@ -1564,11 +899,7 @@ function formatPrice(row, column, cellValue) {
function tagType(statusEnum) {
if (statusEnum == 2 || statusEnum == 2) {
<<<<<<< HEAD
return "default";
=======
return 'primary';
>>>>>>> v1.3
} else if (statusEnum == 4) {
return "success";
} else if (statusEnum == 5 || statusEnum == 6 || statusEnum == 7) {
@@ -1581,10 +912,6 @@ function tagType(statusEnum) {
function handleCurrentChange(row) {
loading.value = true;
currentRow.value = row; // 更新当前选中行的数据
<<<<<<< HEAD
console.log("当前选中行的数据:", currentRow.value);
=======
>>>>>>> v1.3
currentRow.value.statusEnum = undefined;
currentRow.value.dispenseStatus = queryParams.value.statusEnum;
getAdjustPriceSwitchState().then((res) => {
@@ -1643,12 +970,7 @@ function getMedicineList(encounterId) {
loading.value = false;
})
.catch((error) => {
<<<<<<< HEAD
console.error("获取数据失败:", error);
proxy.$modal.msgError("获取数据失败");
=======
proxy.$modal.msgError('获取数据失败');
>>>>>>> v1.3
});
} else if (projectTypeCode.value == 2) {
// 只调用listWesternmedicine接口
@@ -1659,10 +981,6 @@ function getMedicineList(encounterId) {
statusEnum: queryParams.value.statusEnum,
tcmFlag: tcmFlag.value,
}).then((response) => {
<<<<<<< HEAD
console.log("121212", response);
=======
>>>>>>> v1.3
// personInfo.value = response.data.prescriptionPatientInfoDto;
medicineInfoList.value = Array.isArray(response.data.records)
? response.data.records
@@ -1800,20 +1118,6 @@ function submitMedicine(saveList) {
getMedicineList(currentRow.value.encounterId);
})
.catch((error) => {
<<<<<<< HEAD
console.error("发药失败:", error);
proxy.$modal.msgError("发药失败: " + error.message);
});
} else if (projectTypeCode.value == 2) {
prepareMedicion(saveList).then((res) => {
if (res.code == 200) {
updateMedicion(saveList).then((response) => {
proxy.$modal.msgSuccess("发药成功");
getMedicineList(currentRow.value.encounterId);
});
}
});
=======
proxy.$modal.msgError('发药失败: ' + error.message);
});
} else if (projectTypeCode.value == 2) {
@@ -1838,7 +1142,6 @@ function submitMedicine(saveList) {
}
});
}
>>>>>>> v1.3
} else {
deviceDispense(saveList).then((res) => {
if (res.code == 200) {

View File

@@ -1,38 +1,12 @@
<<<<<<< HEAD
import request from '@/utils/request'
=======
import request from '@/utils/request';
>>>>>>> v1.3
// 获取住院信息初期数据列表
export function getInit(query) {
return request({
url: '/inpatient-manage/init',
method: 'get',
<<<<<<< HEAD
params: query
})
}
// 获取住院信息 分页显示
// export function getAdmissionPage(query) {
// return request({
// url: '/inpatient-manage/admission-page',
// method: 'get',
// params: query
// })
// }
// 获取住院信息 分页显示 新
export function getAdmissionPage(query) {
return request({
url: '/inhospital-charge/register/register-info',
method: 'get',
params: query
})
=======
params: query,
});
>>>>>>> v1.3
}
// 住院无档登记
@@ -40,13 +14,8 @@ export function addAdmissionInfo(data) {
return request({
url: '/inpatient-manage/admission-information',
method: 'post',
<<<<<<< HEAD
data: data
})
=======
data: data,
});
>>>>>>> v1.3
}
// 住院登记
@@ -54,13 +23,8 @@ export function admissionInfo(data) {
return request({
url: '/inpatient-manage/admission-information',
method: 'put',
<<<<<<< HEAD
data: data
})
=======
data: data,
});
>>>>>>> v1.3
}
/**
@@ -70,11 +34,7 @@ export function getOrgList() {
return request({
url: '/base-data-manage/organization/organization',
method: 'get',
<<<<<<< HEAD
})
=======
});
>>>>>>> v1.3
}
/**
@@ -83,13 +43,8 @@ export function getOrgList() {
export function wardList() {
return request({
url: '/app-common/ward-list',
<<<<<<< HEAD
method: 'get'
})
=======
method: 'get',
});
>>>>>>> v1.3
}
/**
@@ -99,80 +54,39 @@ export function diagnosisInit() {
return request({
url: '/doctor-station/diagnosis/init',
method: 'get',
<<<<<<< HEAD
})
=======
});
>>>>>>> v1.3
}
// 查询患者相关
export function patientlLists() {
return request({
url: '/patient-manage/information/init',
<<<<<<< HEAD
method: 'get'
})
=======
method: 'get',
});
>>>>>>> v1.3
}
// 查询患者相关
export function doctorList(id) {
return request({
url: '/inpatient-manage/doctor-list?orgId=' + id,
<<<<<<< HEAD
method: 'get'
})
=======
method: 'get',
});
>>>>>>> v1.3
}
// 查询患者相关
export function getPatientInfo(id, statusEnum) {
return request({
url: `/inpatient-manage/admission-one?id=${id}&statusEnum=${statusEnum}`,
<<<<<<< HEAD
method: 'get'
})
}
// 获取患者基础信息
export function getPatientBasicInfo(patientId) {
return request({
url: `/inhospital-charge/register/patient-info?patientId=${patientId}`,
method: 'get'
})
}
// 获取患者入院信息
export function getInHospitalInfo(encounterId) {
return request({
url: `/inhospital-charge/register/in-hospital-info?encounterId=${encounterId}`,
method: 'get'
})
=======
method: 'get',
});
>>>>>>> v1.3
}
// 获取病区床位信息
export function getBedInfo(wardBusNo) {
return request({
url: `/inhospital-charge/register/beds-num?wardBusNo=${wardBusNo}`,
<<<<<<< HEAD
method: 'get'
})
=======
method: 'get',
});
>>>>>>> v1.3
}
// 住院登记
@@ -180,13 +94,8 @@ export function registerInHospital(data) {
return request({
url: '/inhospital-charge/register/by-cashier',
method: 'post',
<<<<<<< HEAD
data: data
})
=======
data: data,
});
>>>>>>> v1.3
}
// 无档登记
@@ -194,26 +103,16 @@ export function noFilesRegister(data) {
return request({
url: '/inhospital-charge/register/no-files',
method: 'post',
<<<<<<< HEAD
data: data
})
=======
data: data,
});
>>>>>>> v1.3
}
// 表单初始化
export function patientFormInit() {
return request({
url: '/patient-manage/information/init',
<<<<<<< HEAD
method: 'get'
})
=======
method: 'get',
});
>>>>>>> v1.3
}
// 合同
@@ -221,11 +120,7 @@ export function getContractList() {
return request({
url: '/app-common/contract-list',
method: 'get',
<<<<<<< HEAD
})
=======
});
>>>>>>> v1.3
}
/**
@@ -235,11 +130,6 @@ export function getDiagnosisDefinitionList(queryParams) {
return request({
url: '/doctor-station/diagnosis/condition-definition-metadata',
method: 'get',
<<<<<<< HEAD
params: queryParams
})
}
=======
params: queryParams,
});
}
@@ -345,4 +235,3 @@ export function gerPreInfo(data) {
}
>>>>>>> v1.3

View File

@@ -1,193 +1,4 @@
<template>
<<<<<<< HEAD
<div class="registerForm-container">
<div class="operate">
<div>住院信息</div>
</div>
<el-form
class="register-from"
:model="submitForm"
style="padding-left: 8px"
ref="registerRef"
label-width="80px"
:rules="rules"
>
<el-row :gutter="8">
<el-col :span="6">
<el-form-item label="住院号:" prop="encounterBusNo">
{{ submitForm.busNo ? submitForm.busNo : '-' }}
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="住院次数:" prop="hospitalizationCount" autocomplete="off">
{{ submitForm.inHospitalCount }}
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="入院科室" prop="inHospitalOrgId">
<el-tree-select
clearable
style="width: 100%"
v-model="submitForm.inHospitalOrgId"
filterable
:data="organization"
:props="{
value: 'id',
label: 'name',
children: 'children',
}"
value-key="id"
check-strictly
:check-strictly-except-leaf="false"
:default-expand-all="true"
placeholder="请选择入院科室"
@change="handleChange"
@node-click="handleNodeClick"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="入院病区" prop="wardLocationId">
<el-select :disabled="props.alreadyEdit" v-model="submitForm.wardLocationId">
<el-option
v-for="item in wardListOptions"
:key="item.id"
:label="item.name"
:value="item.id"
@click="handleWardClick(item)"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="床位数:" prop="bedCount">
{{
submitForm.totalBedsNum ? submitForm.idleBedsNum + '/' + submitForm.totalBedsNum : '-'
}}
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="门诊医生" prop="ambDoctorPractitionerName">
<el-input disabled v-model="submitForm.ambDoctorPractitionerName" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="诊断类别" prop="medTypeCode">
<el-select
v-model="submitForm.medTypeCode"
placeholder="诊断类别"
clearable
filterable
@change="
(value) => {
submitForm.ybClassEnum = value;
}
"
>
<el-option
v-for="item in med_type"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6" v-if="!props.noFile">
<el-form-item label="入院诊断" prop="ambDiagnosisName">
<el-input v-model="submitForm.ambDiagnosisName" disabled />
</el-form-item>
</el-col>
<el-col :span="6" v-else>
<el-form-item label="入院诊断" prop="diagnosisDefinitionId">
<el-select
v-model="submitForm.diagnosisDefinitionId"
placeholder="入院诊断"
clearable
filterable
remote
:remote-method="getDiagnosisInfo"
>
<el-option
v-for="item in diagnosisDefinitionList"
:key="item.id"
:label="item.name"
:value="item.id"
@click="handleDiagnosisChange(item)"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6" v-if="props.noFile">
<el-form-item label="诊断描述" prop="diagnosisDesc">
<el-input v-model="submitForm.diagnosisDesc" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="患者病情">
<el-select v-model="submitForm.priorityEnum">
<el-option
v-for="item in props.initOptions.priorityEnumList"
:key="item.value"
:label="item.info"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="入院类型" prop="admitSourceCode">
<el-select v-model="submitForm.admitSourceCode">
<el-option
v-for="item in admit_source_code"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="入院方式" prop="inWayCode">
<el-select v-model="submitForm.inWayCode">
<el-option
v-for="item in in_way_code"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="费用性质">
<el-select
v-model="submitForm.contractNo"
placeholder="费用性质"
clearable
@change="getValue"
>
<el-option
v-for="item in contractList"
:key="item.busNo"
:label="item.contractName"
:value="item.busNo"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="入院日期" prop="startTime">
<el-date-picker
v-model="submitForm.startTime"
value-format="YYYY-MM-DD HH:mm:ss"
type="date"
placeholder="请选择日期"
/>
</el-form-item>
</el-col>
</el-row>
=======
<div>
<el-form ref="patientRef" :model="form" :rules="rules" label-width="140px" :inline="true">
<el-form-item label="联系人姓名" prop="conerName">
@@ -486,261 +297,10 @@
style="width: 200px"
/>
</el-form-item>
>>>>>>> v1.3
</el-form>
</div>
</template>
<script setup>
<<<<<<< HEAD
import {
getInit,
getOrgList,
wardList,
diagnosisInit,
getBedInfo,
getContractList,
getDiagnosisDefinitionList,
} from './api';
const { proxy } = getCurrentInstance();
const { in_way_code, admit_source_code, med_type } = proxy.useDict(
'in_way_code',
'admit_source_code',
'med_type'
);
import { formatDateStr } from '@/utils';
const emits = defineEmits([]);
const props = defineProps({
patientInfo: {
type: Object,
require: true,
default: () => ({}),
},
inHospitalInfo: {
type: Object,
require: true,
default: () => ({}),
},
initOptions: {
type: Object,
require: true,
default: () => ({}),
},
alreadyEdit: {
type: Boolean,
default: false,
},
noFile: {
type: Boolean,
default: false,
},
});
const organization = ref([]);
const wardListOptions = ref([]);
const contractList = ref([]);
const verificationStatusOptions = ref([]);
const diagnosisDefinitionList = ref([]);
const rules = reactive({
inHospitalOrgId: [
{
required: true,
message: '入院科室未填写',
trigger: ['blur', 'change'],
},
],
wardLocationId: [
{
required: true,
message: '入院病区未填写',
trigger: ['blur', 'change'],
},
],
startTime: [
{
required: true,
message: '入院日期未填写',
trigger: ['blur', 'change'],
},
],
diagnosisDefinitionId: [
{
required: true,
message: '入院诊断未填写',
trigger: ['blur', 'change'],
},
],
diagnosisDesc: [
{
required: true,
message: '诊断描述未填写',
trigger: ['blur', 'change'],
},
],
});
/* 提交表单 */
const submitForm = reactive({
inHospitalOrgId: props.inHospitalInfo.inHospitalOrgId,
ambDoctorPractitionerName: props.inHospitalInfo.ambDoctorPractitionerName,
wardLocationId: props.inHospitalInfo.wardLocationId, // 入院护理组编码
admitSourceCode: '', // 患者入院类型字典PatientSource
inWayCode: '', // 入院方式字典InpWay
startTime: formatDateStr(new Date(), 'YYYY-MM-DD HH:mm:ss'), // 入院日期
priorityEnum: props.inHospitalInfo.priorityEnum, // 患者病情字典PatAdmCondition
ambDiagnosisName: props.inHospitalInfo.ambDiagnosisName,
medTypeCode: '21',
});
/* 科室 病区 */
watch(
() => submitForm.inDocterWorkGroupCode,
(newValue) => {
if (newValue) {
if (newValue == '') {
submitForm.wardLocationId = '';
}
} else {
submitForm.wardLocationId = '';
}
}
);
watch(
() => submitForm.inNurseDeptCode,
(newValue) => {
if (newValue) {
getBedInfo(newValue);
}
}
);
onMounted(() => {
getInitOptions();
setValue();
});
function handleWardClick(item) {
submitForm.wardBusNo = item.busNo;
getBedInfo(submitForm.wardBusNo).then((res) => {
submitForm.totalBedsNum = res.data.totalBedsNum;
submitForm.idleBedsNum = res.data.idleBedsNum;
});
}
function getInitOptions() {
getOrgList().then((res) => {
organization.value = res.data.records;
});
if (!props.noFile) {
wardList().then((res) => {
wardListOptions.value = res.data;
});
}
diagnosisInit().then((res) => {
verificationStatusOptions.value = res.data.verificationStatusOptions;
});
getContractList().then((response) => {
contractList.value = response.data;
setValue();
});
getDiagnosisInfo(undefined);
}
function getDiagnosisInfo(value) {
getDiagnosisDefinitionList({ pageSize: 500, pageNo: 1, searchKey: value }).then((res) => {
diagnosisDefinitionList.value = res.data.records;
});
}
function handleNodeClick(orgInfo) {
wardList({ orgId: orgInfo.id }).then((res) => {
wardListOptions.value = res.data;
});
}
function handleChange(value) {
if (!value) {
wardListOptions.value = [];
submitForm.wardLocationId = undefined;
}
}
function handleDiagnosisChange(item) {
submitForm.diagnosisYbNo = item.ybNo;
submitForm.diagnosisDefinitionId = item.id;
}
function setValue() {
submitForm.encounterId = props.inHospitalInfo?.encounterId;
submitForm.busNo = props.inHospitalInfo?.busNo;
submitForm.contractNo = props.inHospitalInfo?.contractNo;
submitForm.inHospitalCount = props.inHospitalInfo?.inHospitalCount;
submitForm.inHospitalOrgId = props.inHospitalInfo?.inHospitalOrgId;
submitForm.inHospitalOrgName = props.inHospitalInfo?.inHospitalOrgName;
submitForm.wardLocationId = props.inHospitalInfo?.wardLocationId;
submitForm.wardName = props.inHospitalInfo?.wardName;
submitForm.wardBusNo = props.inHospitalInfo?.wardBusNo;
submitForm.totalBedsNum = props.inHospitalInfo?.totalBedsNum;
submitForm.idleBedsNum = props.inHospitalInfo?.idleBedsNum;
submitForm.ambEncounterId = props.inHospitalInfo?.ambEncounterId;
submitForm.ambDoctorPractitionerId = props.inHospitalInfo?.ambDoctorPractitionerId;
submitForm.ambDoctorPractitionerName = props.inHospitalInfo?.ambDoctorPractitionerName;
submitForm.ambDiagnosisName = props.inHospitalInfo?.ambDiagnosisName;
submitForm.priorityEnum = props.inHospitalInfo?.priorityEnum;
submitForm.priorityEnum_enumText = props.inHospitalInfo?.priorityEnum_enumText;
submitForm.admitSourceCode = props.inHospitalInfo?.admitSourceCode;
submitForm.admitSourceCode_dictText = props.inHospitalInfo?.admitSourceCode_dictText;
submitForm.inWayCode = props.inHospitalInfo?.inWayCode;
submitForm.inWayCode_dictText = props.inHospitalInfo?.inWayCode_dictText;
}
const registerRef = ref();
/* 登记 */
const validateData = async (callback) => {
if (!registerRef.value) return false;
registerRef.value.validate((valid) => {
if (valid) {
callback();
return true;
} else {
return false;
}
});
};
const init = () => {
submitForm.inDocterWorkGroupCode = '';
submitForm.wardLocationId = '';
};
defineExpose({ validateData, submitForm, init });
</script>
<style lang="scss" scoped>
.registerForm-container {
margin-top: 16px;
.operate {
background: rgba(37, 109, 149, 0.05);
display: flex;
justify-content: space-between;
align-items: center;
height: 32px;
border-radius: 4px 4px 0px 0px;
padding-left: 16px;
color: var(--hip-color-primary-light);
font-weight: bold;
margin-bottom: 8px;
}
.register-from {
padding: 0 8px;
}
:deep(.el-form-item) {
width: 100%;
margin-right: 0px;
}
}
</style>
=======
import { reactive, ref, watch } from 'vue';
const props = defineProps({
registerForm: {
@@ -888,4 +448,3 @@ const validateData = async (callback) => {
defineExpose({ validateData, submitForm, resetForm });
</script>
>>>>>>> v1.3

View File

@@ -1,36 +1,5 @@
<template>
<div class="app-container">
<<<<<<< HEAD
<el-tabs v-model="activeName" type="card" class="demo-tabs">
<el-tab-pane label="待登记入院" name="first">
<AwaitList v-if="activeName === 'first'" @okList="activeName = 'second'" />
</el-tab-pane>
<el-tab-pane label="已登记入院" name="second">
<AccomplishList v-if="activeName === 'second'" />
</el-tab-pane>
<!-- <el-tab-pane label="在院患者" name="third">
<ExistListt />
</el-tab-pane> -->
</el-tabs>
</div>
</template>
<script setup>
import { getCurrentInstance, onBeforeMount, onMounted, reactive, ref } from 'vue';
import { AwaitList, AccomplishList, ExistList } from './components/index.js';
const { proxy } = getCurrentInstance();
const emits = defineEmits([]);
const props = defineProps({});
const state = reactive({});
defineExpose({ state });
const activeName = ref('first');
</script>
<style lang="scss" scoped>
.sds {
background-color: red;
}
</style>
=======
<el-form :model="queryParams" ref="queryRef" :inline="true" label-width="68px">
<el-form-item label="内容" prop="searchKey">
<el-input
@@ -305,4 +274,3 @@ function resetQuery() {
getList();
</script>
>>>>>>> v1.3