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>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long