fix: #568 (codex)

This commit is contained in:
2026-05-24 14:45:15 +08:00
parent e439cf46cf
commit 72b0040921
16 changed files with 2434 additions and 153 deletions

View File

@@ -5,26 +5,26 @@
ref="queryRef"
:inline="true"
v-show="showSearch"
label-width="90px"
label-width="80px"
>
<el-form-item label="查询日期">
<el-form-item label="查询日期">
<el-date-picker
v-model="queryTime"
type="daterange"
start-placeholder="开始日期"
end-placeholder="结束日期"
style="width: 300px; margin-right: 20px"
style="width: 280px"
@change="getValue"
value-format="YYYY-MM-DD"
/>
</el-form-item>
<el-form-item label="费用性质">
<el-form-item label="费用性质">
<el-select
v-model="contractNo"
placeholder="费用性质"
clearable
@change="getValue"
style="width: 150px; margin-right: 30px"
style="width: 160px"
>
<el-option
v-for="item in contractList"
@@ -33,140 +33,80 @@
:value="item.busNo"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" plain icon="Search" @click="getValue">查询</el-button>
<el-button type="primary" plain icon="Printer" @click="print">打印</el-button>
</el-form-item>
</el-form>
<div v-loading="loading" class="day-end-container">
<div style="text-align: center">
<el-card v-loading="loading" class="report-card" shadow="never">
<div class="report-header">
<h2 class="report-title">门诊收费日结单</h2>
</div>
<el-row :gutter="5" class="data-row">
<el-col :span="4">
<span class="label">经办人姓名</span>
<span class="value">{{ userStore.nickName || '-' }}</span>
</el-col>
<el-col :span="4">
<span class="label">科室</span>
<span class="value">{{ userStore.orgName || '-' }}</span>
</el-col>
<el-col :span="7">
<span class="label">时间</span>
<span class="value">{{ queryTime && queryTime.length === 2 ? queryTime[0] + '~' + queryTime[1] : '-' }}</span>
</el-col>
</el-row>
<div class="divider"></div>
<el-row :gutter="10" class="data-row">
<el-col :span="5">
<span class="label">总收入</span>
<span class="value">{{ formatValue(reportValue.cashSum) }}</span>
</el-col>
<el-col :span="5">
<span class="label">现金</span>
<span class="value">{{ formatValue(reportValue.rmbCashSum) }}</span>
</el-col>
<el-col :span="5">
<span class="label">微信</span>
<span class="value">{{ formatValue(reportValue.vxCashSum) }}</span>
</el-col>
<el-col :span="5">
<span class="label">支付宝</span>
<span class="value">{{ formatValue(reportValue.aliCashSum) }}</span>
</el-col>
</el-row>
<div class="divider"></div>
<el-row :gutter="10" class="data-row">
<el-col :span="5">
<span class="label">统筹支付</span>
<span class="value">{{ formatValue(reportValue.tcSum) }}</span>
</el-col>
<el-col :span="5">
<span class="label">账户支付</span>
<span class="value">{{ formatValue(reportValue.zhSum) }}</span>
</el-col>
<el-col :span="5">
<span class="label">基金支付总额</span>
<span class="value">{{ formatValue(reportValue.fundSum) }}</span>
</el-col>
</el-row>
<div class="divider"></div>
<el-row :gutter="10" class="data-row">
<el-col :span="5">
<span class="label">诊查费</span>
<span class="value">{{ formatValue(reportValue.DIAGNOSTIC_FEE) }}</span>
</el-col>
<el-col :span="5">
<span class="label">检查费</span>
<span class="value">{{ formatValue(reportValue.CHECK_FEE) }}</span>
</el-col>
<el-col :span="5">
<span class="label">化验费</span>
<span class="value">{{ formatValue(reportValue.DIAGNOSTIC_TEST_FEE) }}</span>
</el-col>
<el-col :span="5">
<span class="label">治疗费</span>
<span class="value">{{ formatValue(reportValue.MEDICAL_EXPENSE_FEE) }}</span>
</el-col>
</el-row>
<el-row :gutter="10" class="data-row">
<el-col :span="5">
<span class="label">西药费</span>
<span class="value">{{ formatValue(reportValue.WEST_MEDICINE) }}</span>
</el-col>
<el-col :span="5">
<span class="label">中药饮片费</span>
<span class="value">{{ formatValue(reportValue.CHINESE_MEDICINE_SLICES_FEE) }}</span>
</el-col>
<el-col :span="5">
<span class="label">中成药费</span>
<span class="value">{{ formatValue(reportValue.CHINESE_MEDICINE_FEE) }}</span>
</el-col>
<el-col :span="5">
<span class="label">卫生材料费</span>
<span class="value">{{ formatValue(reportValue.SANITARY_MATERIALS_FEE) }}</span>
</el-col>
</el-row>
<el-row :gutter="10" class="data-row">
<el-col :span="5">
<span class="label">诊疗费</span>
<span class="value">{{ formatValue(reportValue.GENERAL_CONSULTATION_FEE) }}</span>
</el-col>
<el-col :span="5">
<span class="label">挂号费</span>
<span class="value">{{ formatValue(reportValue.REGISTRATION_FEE) }}</span>
</el-col>
<el-col :span="5">
<span class="label">其他费用</span>
<span class="value">{{ formatValue(reportValue.OTHER_FEE) }}</span>
</el-col>
</el-row>
</div>
<el-descriptions :column="4" border class="info-section" size="small">
<el-descriptions-item label="经办人姓名">{{ userStore.nickName || '-' }}</el-descriptions-item>
<el-descriptions-item label="科室">{{ userStore.orgName || '-' }}</el-descriptions-item>
<el-descriptions-item label="时间" :span="2">
{{ queryTime && queryTime.length === 2 ? queryTime[0] + ' ~ ' + queryTime[1] : '-' }}
</el-descriptions-item>
</el-descriptions>
<div class="section-title">收入汇总</div>
<el-descriptions :column="4" border class="data-section" size="small">
<el-descriptions-item label="总收入">{{ formatValue(reportValue.cashSum) }}</el-descriptions-item>
<el-descriptions-item label="现金">{{ formatValue(reportValue.rmbCashSum) }}</el-descriptions-item>
<el-descriptions-item label="微信">{{ formatValue(reportValue.vxCashSum) }}</el-descriptions-item>
<el-descriptions-item label="支付宝">{{ formatValue(reportValue.aliCashSum) }}</el-descriptions-item>
</el-descriptions>
<div class="section-title">医保支付</div>
<el-descriptions :column="4" border class="data-section" size="small">
<el-descriptions-item label="统筹支付">{{ formatValue(reportValue.tcSum) }}</el-descriptions-item>
<el-descriptions-item label="账户支付">{{ formatValue(reportValue.zhSum) }}</el-descriptions-item>
<el-descriptions-item label="基金支付总额">{{ formatValue(reportValue.fundSum) }}</el-descriptions-item>
<el-descriptions-item label="医保统筹+账户">{{ formatValue(Number(reportValue.zhSum || 0) + Number(reportValue.fundSum || 0)) }}</el-descriptions-item>
</el-descriptions>
<div class="section-title">费用明细</div>
<el-descriptions :column="4" border class="data-section" size="small">
<el-descriptions-item label="诊查费">{{ formatValue(reportValue.DIAGNOSTIC_FEE) }}</el-descriptions-item>
<el-descriptions-item label="检查费">{{ formatValue(reportValue.CHECK_FEE) }}</el-descriptions-item>
<el-descriptions-item label="化验费">{{ formatValue(reportValue.DIAGNOSTIC_TEST_FEE) }}</el-descriptions-item>
<el-descriptions-item label="治疗费">{{ formatValue(reportValue.MEDICAL_EXPENSE_FEE) }}</el-descriptions-item>
<el-descriptions-item label="西药费">{{ formatValue(reportValue.WEST_MEDICINE) }}</el-descriptions-item>
<el-descriptions-item label="中药饮片费">{{ formatValue(reportValue.CHINESE_MEDICINE_SLICES_FEE) }}</el-descriptions-item>
<el-descriptions-item label="中成药费">{{ formatValue(reportValue.CHINESE_MEDICINE_FEE) }}</el-descriptions-item>
<el-descriptions-item label="卫生材料费">{{ formatValue(reportValue.SANITARY_MATERIALS_FEE) }}</el-descriptions-item>
<el-descriptions-item label="普通挂号费">{{ formatValue(reportValue.GENERAL_CONSULTATION_FEE) }}</el-descriptions-item>
<el-descriptions-item label="其他费用">{{ formatValue(reportValue.OTHER_FEE) }}</el-descriptions-item>
<el-descriptions-item label="退费金额">{{ formatValue(reportValue.returnFee) }}</el-descriptions-item>
<el-descriptions-item label="费用总额">{{ formatValue(Number(reportValue.DIAGNOSTIC_FEE || 0) + Number(reportValue.CHECK_FEE || 0) + Number(reportValue.DIAGNOSTIC_TEST_FEE || 0) + Number(reportValue.MEDICAL_EXPENSE_FEE || 0) + Number(reportValue.WEST_MEDICINE || 0) + Number(reportValue.CHINESE_MEDICINE_SLICES_FEE || 0) + Number(reportValue.CHINESE_MEDICINE_FEE || 0) + Number(reportValue.GENERAL_CONSULTATION_FEE || 0) + Number(reportValue.REGISTRATION_FEE || 0) + Number(reportValue.OTHER_FEE || 0) + Number(reportValue.SANITARY_MATERIALS_FEE || 0)) }}</el-descriptions-item>
</el-descriptions>
</el-card>
</div>
</template>
<script setup name="dayEnd">
import {getContractList, getRreportReturnIssue, getTotal} from './component/api';
import { formatDateStr } from '@/utils/openhis';
import { getRreportReturnIssue, getTotal, getContractList } from './component/api';
import useUserStore from '@/store/modules/user';
import {formatDateStr} from '@/utils/index';
import Decimal from 'decimal.js';
const { proxy } = getCurrentInstance();
const userStore = useUserStore();
const router = useRouter();
const { proxy } = getCurrentInstance();
const purchaseinventoryRef = ref(null);
const purchaseinventoryList = ref([]);
const open = ref(false);
const loading = ref(true);
const reportValue = ref({});
const total = ref(0);
const loading = ref(false);
const showSearch = ref(true);
const ids = ref([]);
const single = ref(true);
const multiple = ref(true);
const total = ref(0);
const title = ref('');
const contractList = ref(undefined);
const reportValue = ref({});
const occurrenceTime = ref([]);
const contractList = ref([]);
const queryTime = ref([
formatDateStr(new Date(), 'YYYY-MM-DD'),
formatDateStr(new Date(), 'YYYY-MM-DD'),
@@ -316,50 +256,37 @@ getList();
getPharmacyCabinetLists();
</script>
<style scoped>
.day-end-container {
width: 1300px;
margin: 0 auto;
background: #fff;
border-radius: 4px;
padding: 10px 20px 20px;
.report-card {
margin-top: 16px;
}
.report-header {
text-align: center;
padding: 12px 0 16px;
}
.report-title {
font-size: 20px;
font-size: 18px;
font-weight: 600;
margin: 10px 0 15px;
margin: 0;
color: #303133;
}
.data-row {
display: flex;
align-items: center;
justify-content: flex-start;
margin: 15px 0;
padding: 0 10px;
.section-title {
font-size: 14px;
font-weight: 600;
color: #409eff;
padding: 12px 0 8px;
margin: 16px 0 8px;
border-left: 3px solid #409eff;
padding-left: 8px;
}
.label {
display: inline-block;
width: 120px;
text-align: right;
color: #606266;
font-weight: 500;
flex-shrink: 0;
.info-section {
margin-bottom: 8px;
}
.value {
float: right;
color: #303133;
}
.divider {
height: 2px;
background: linear-gradient(to right, #dcdfe6, #e4e7ed, #dcdfe6);
margin: 10px 0;
}
.el-col {
margin-right: 30px;
.data-section {
margin-bottom: 0;
}
</style>

View File

@@ -0,0 +1,352 @@
<template>
<div class="app-container">
<el-form
:model="queryParams"
ref="queryRef"
:inline="true"
v-show="showSearch"
label-width="90px"
>
<el-form-item label="查询日期:">
<el-date-picker
v-model="queryTime"
type="daterange"
start-placeholder="开始日期"
end-placeholder="结束日期"
style="width: 300px; margin-right: 20px"
@change="getValue"
value-format="YYYY-MM-DD"
/>
</el-form-item>
<el-form-item label="费用性质:">
<el-select
v-model="contractNo"
placeholder="费用性质"
clearable
@change="getValue"
style="width: 150px; margin-right: 30px"
>
<el-option
v-for="item in contractList"
:key="item.busNo"
:label="item.contractName"
:value="item.busNo"
/>
</el-select>
<el-button type="primary" plain icon="Search" @click="getValue">查询</el-button>
<el-button type="primary" plain icon="Printer" @click="print">打印</el-button>
</el-form-item>
</el-form>
<div v-loading="loading" style="width: 1300px">
<div style="text-align: center">
<h2>门诊收费日结单</h2>
</div>
<el-row
:gutter="5"
style="margin: 20px 0; display: flex; align-items: center; justify-content: flex-start; padding: 0 20px"
>
<el-col :span="4">
<span class="label">经办人姓名</span>
<span class="value">{{ userStore.nickName }}</span>
</el-col>
<el-col :span="4">
<span class="label">科室</span>
<span class="value">{{ userStore.orgName }}</span>
</el-col>
<el-col :span="7">
<span class="label">时间</span>
<span class="value">{{ queryTime[0] + '~' + queryTime[1] }}</span>
</el-col>
</el-row>
<div class="divider"></div>
<el-row
:gutter="10"
style="margin: 20px 0; display: flex; align-items: center; justify-content: flex-start; padding: 0 20px"
>
<el-col :span="5">
<span class="label">总收入</span>
<span class="value">{{ formatValue(reportValue.cashSum) }}</span>
</el-col>
<el-col :span="5">
<span class="label">现金</span>
<span class="value">{{ formatValue(reportValue.rmbCashSum) }}</span>
</el-col>
<el-col :span="5">
<span class="label">微信</span>
<span class="value">{{ formatValue(reportValue.vxCashSum) }}</span>
</el-col>
<el-col :span="5">
<span class="label">支付宝</span>
<span class="value">{{ formatValue(reportValue.aliCashSum) }}</span>
</el-col>
</el-row>
<div class="divider"></div>
<el-row
:gutter="10"
style="margin: 20px 0; display: flex; align-items: center; justify-content: flex-start; padding: 0 20px"
>
<el-col :span="5">
<span class="label">统筹支付</span>
<span class="value">{{ formatValue(reportValue.tcSum) }}</span>
</el-col>
<el-col :span="5">
<span class="label">账户支付</span>
<span class="value">{{ formatValue(reportValue.zhSum) }}</span>
</el-col>
<el-col :span="5">
<span class="label">基金支付总额</span>
<span class="value">{{ formatValue(reportValue.fundSum) }}</span>
</el-col>
</el-row>
<div class="divider"></div>
<el-row
:gutter="10"
style="margin: 20px 0; display: flex; align-items: center; justify-content: flex-start; padding: 0 20px"
>
<el-col :span="5">
<span class="label">诊查费</span>
<span class="value">{{ formatValue(reportValue.DIAGNOSTIC_FEE) }}</span>
</el-col>
<el-col :span="5">
<span class="label">检查费</span>
<span class="value">{{ formatValue(reportValue.CHECK_FEE) }}</span>
</el-col>
<el-col :span="5">
<span class="label">化验费</span>
<span class="value">{{ formatValue(reportValue.DIAGNOSTIC_TEST_FEE) }}</span>
</el-col>
<el-col :span="5">
<span class="label">治疗费</span>
<span class="value">{{ formatValue(reportValue.MEDICAL_EXPENSE_FEE) }}</span>
</el-col>
</el-row>
<el-row
:gutter="10"
style="margin: 20px 0; display: flex; align-items: center; justify-content: flex-start; padding: 0 20px"
>
<el-col :span="5">
<span class="label">西药费</span>
<span class="value">{{ formatValue(reportValue.WEST_MEDICINE) }}</span>
</el-col>
<el-col :span="5">
<span class="label">中药饮片费</span>
<span class="value">{{ formatValue(reportValue.CHINESE_MEDICINE_SLICES_FEE) }}</span>
</el-col>
<el-col :span="5">
<span class="label">中成药费</span>
<span class="value">{{ formatValue(reportValue.CHINESE_MEDICINE_FEE) }}</span>
</el-col>
<el-col :span="5">
<span class="label">卫生材料费</span>
<span class="value">{{ formatValue(reportValue.SANITARY_MATERIALS_FEE) }}</span>
</el-col>
</el-row>
<el-row
:gutter="10"
style="margin: 20px 0; display: flex; align-items: center; justify-content: flex-start; padding: 0 20px"
>
<el-col :span="5">
<span class="label">诊疗费</span>
<span class="value">{{ formatValue(reportValue.GENERAL_CONSULTATION_FEE) }}</span>
</el-col>
<el-col :span="5">
<span class="label">挂号费</span>
<span class="value">{{ formatValue(reportValue.REGISTRATION_FEE) }}</span>
</el-col>
<el-col :span="5">
<span class="label">其他费用</span>
<span class="value">{{ formatValue(reportValue.OTHER_FEE) }}</span>
</el-col>
</el-row>
</div>
</div>
</template>
<script setup name="dayEnd">
import {getContractList, getRreportReturnIssue, getTotal} from './component/api';
import useUserStore from '@/store/modules/user';
import {formatDateStr} from '@/utils/index';
import Decimal from 'decimal.js';
const userStore = useUserStore();
const router = useRouter();
const { proxy } = getCurrentInstance();
const purchaseinventoryRef = ref(null);
const purchaseinventoryList = ref([]);
const open = ref(false);
const loading = ref(true);
const showSearch = ref(true);
const ids = ref([]);
const single = ref(true);
const multiple = ref(true);
const total = ref(0);
const title = ref('');
const contractList = ref(undefined);
const reportValue = ref({});
const queryTime = ref([
formatDateStr(new Date(), 'YYYY-MM-DD'),
formatDateStr(new Date(), 'YYYY-MM-DD'),
]);
const contractNo = ref('0000');
const data = reactive({
queryParams: {
form: {},
pageNo: 1,
pageSize: 10,
searchKey: undefined,
purposeLocationId: undefined,
sourceLocationId: undefined,
supplierId: undefined,
approvalTimeSTime: undefined,
approvalTimeETime: undefined,
},
rules: {},
});
const { queryParams, form, rules } = toRefs(data);
getValue();
function getValue() {
loading.value = true;
getTotal({
contractNo: contractNo.value,
startTime: queryTime.value[0] + ' 00:00:00',
endTime: queryTime.value[1] + ' 23:59:59',
entererId: userStore.practitionerId,
}).then((res) => {
loading.value = false;
reportValue.value = res.data;
});
}
getContract();
function getContract() {
getContractList().then((response) => {
contractList.value = response.data;
});
}
function getPharmacyCabinetLists() {
}
/** 查询调拨管理项目列表 */
function getList() {
loading.value = true;
getRreportReturnIssue(queryParams.value).then((res) => {
loading.value = false;
purchaseinventoryList.value = res.data.records;
total.value = res.data.total;
});
}
/** 搜索按钮操作 */
function handleQuery() {
queryParams.value.approvalTimeSTime =
occurrenceTime.value && occurrenceTime.value.length == 2
? occurrenceTime.value[0] + ' 00:00:00'
: '';
queryParams.value.approvalTimeETime =
occurrenceTime.value && occurrenceTime.value.length == 2
? occurrenceTime.value[1] + ' 23:59:59'
: '';
queryParams.value.pageNo = 1;
getList();
}
/** 清空条件按钮操作 */
function handleClear() {
queryParams.value.approvalTimeSTime = '';
queryParams.value.approvalTimeETime = '';
occurrenceTime.value = '';
proxy.resetForm('queryRef');
getList();
}
/** 选择条数 */
function handleSelectionChange(selection) {
ids.value = selection.map((item) => item.id);
single.value = selection.length != 1;
multiple.value = !selection.length;
}
/** 打印门诊日结 */
async function print() {
console.log(reportValue.value, '==reportValue.value==');
const result = {
data: [
{
...reportValue.value,
nickName: userStore.nickName,
orgName: userStore.orgName,
fixmedinsName: userStore.hospitalName,
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)
.add(reportValue.value.CHECK_FEE || 0)
.add(reportValue.value.DIAGNOSTIC_TEST_FEE || 0)
.add(reportValue.value.MEDICAL_EXPENSE_FEE || 0)
.add(reportValue.value.WEST_MEDICINE || 0)
.add(reportValue.value.CHINESE_MEDICINE_SLICES_FEE || 0)
.add(reportValue.value.CHINESE_MEDICINE_FEE || 0)
.add(reportValue.value.GENERAL_CONSULTATION_FEE || 0)
.add(reportValue.value.REGISTRATION_FEE || 0)
.add(reportValue.value.OTHER_FEE || 0)
.add(reportValue.value.SANITARY_MATERIALS_FEE || 0),
},
],
};
console.log(result, '==result.data==');
let jsonString = JSON.stringify(result, null, 2);
console.log(jsonString, 'jsonstring');
await CefSharp.BindObjectAsync('boundAsync');
await boundAsync
.printReport(getPrintFileName(contractNo.value), jsonString)
.then((response) => {
console.log(response, 'response');
var res = JSON.parse(response);
if (!res.IsSuccess) {
proxy.$modal.msgError('调用打印插件失败:' + res.ErrorMessage);
}
})
.catch((error) => {
proxy.$modal.msgError('调用打印插件失败:' + error);
});
}
function getPrintFileName(value) {
switch (value) {
case '0000':
return '门诊日结单(按登录角色查询)自费.grf';
case '229900':
return '门诊日结单(按登录角色查询)省医保.grf';
case '220100':
return '门诊日结单(按登录角色查询)市医保.grf';
}
}
function formatValue(value) {
return value == null || value == undefined ? '0.00 元' : value.toFixed(2) + ' 元';
}
getList();
getPharmacyCabinetLists();
</script>
<style scoped>
.label {
display: inline-block;
width: 120px !important;
}
.value {
float: right;
}
.el-col {
margin-right: 50px;
}
.divider {
height: 3px;
background-color: #000;
margin: 20px 0;
}
</style>