Merge branch 'main' of ssh://git.jizhiweb.cn:2222/clinic-v2/web

This commit is contained in:
LiJianZhao 2025-05-19 17:01:16 +08:00
commit 227e750349
2 changed files with 203 additions and 127 deletions

View File

@ -1,64 +1,62 @@
<template> <template>
<Mask :is-show="show" :height="600" :width="400" @close="close" title="手动对账"> <Mask :is-show="show" :height="600" :width="400" @close="close" title="手动对账">
<div class="form"> <div class="form">
<el-form :model="formData" label-width="130" :rules="rules" ref="formRef"> <el-form :model="formData" label-width="130" :rules="rules" ref="formRef">
<el-form-item label="对账日期" prop="date"> <el-form-item label="对账日期" prop="date">
<el-date-picker <el-date-picker
v-model="selectDate" v-model="selectDate"
type="daterange" type="daterange"
@change="changeDate" @change="changeDate"
range-separator="-" range-separator="-"
start-placeholder="开始日期" start-placeholder="开始日期"
end-placeholder="结束日期" end-placeholder="结束日期"
style="height: 100%" style="height: 100%"
/> />
</el-form-item> </el-form-item>
<el-form-item label="清算类别" prop="reconciliationType"> <el-form-item label="清算类别" prop="reconciliationType">
<el-select v-model="formData.reconciliationType" placeholder="请选择"> <el-select v-model="formData.reconciliationType" placeholder="请选择">
<el-option <el-option
v-for="item in clrTypeOptions" v-for="item in clrTypeOptions"
:key="item.key" :key="item.key"
:label="item.value" :label="item.value"
:value="item.key" :value="item.key"
> >
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="险种类型" prop="insuranceType"> <el-form-item label="险种类型" prop="insuranceType">
<el-select v-model="formData.insuranceType" placeholder="请选择"> <el-select v-model="formData.insuranceType" placeholder="请选择">
<el-option <el-option
v-for="item in insutypesOptions" v-for="item in insutypesOptions"
:key="item.key" :key="item.key"
:label="item.value" :label="item.value"
:value="item.key" :value="item.key"
> >
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="经办机构" prop="handlingInstitution"> <el-form-item label="经办机构" prop="handlingInstitution">
<el-input v-model="formData.handlingInstitution"></el-input> <el-input v-model="formData.handlingInstitution"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="医疗费用总额" prop="totalMedicalCost"> <el-form-item label="医疗费用总额" prop="totalMedicalCost">
<el-input v-model.number="formData.totalMedicalCost" type="number"></el-input> <el-input v-model.number="formData.totalMedicalCost" type="number"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="基金支付总额" prop="totalFundPayment"> <el-form-item label="基金支付总额" prop="totalFundPayment">
<el-input v-model.number="formData.totalFundPayment" type="number"></el-input> <el-input v-model.number="formData.totalFundPayment" type="number"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="个账支付总额" prop="totalPersonalAccountPayment"> <el-form-item label="个账支付总额" prop="totalPersonalAccountPayment">
<el-input v-model.number="formData.totalPersonalAccountPayment" type="number"></el-input> <el-input v-model.number="formData.totalPersonalAccountPayment" type="number"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="结算笔数" prop="settlementCount"> <el-form-item label="结算笔数" prop="settlementCount">
<el-input v-model.number="formData.settlementCount" type="number"></el-input> <el-input v-model.number="formData.settlementCount" type="number"></el-input>
</el-form-item> </el-form-item>
<el-form-item > <el-form-item>
<el-button type="primary" @click="submitForm">对账</el-button> <el-button type="primary" @click="submitForm">对账</el-button>
<el-button @click="close">取消</el-button> <el-button @click="close">取消</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
</Mask> </Mask>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
@ -67,43 +65,27 @@ import {reactive, ref} from "vue";
import {post} from "@/utils/request.ts"; import {post} from "@/utils/request.ts";
import {ElMessage} from "element-plus"; import {ElMessage} from "element-plus";
import {formatDateArray, getEndOfDay} from "@/utils/dateUtils.ts"; import {formatDateArray, getEndOfDay} from "@/utils/dateUtils.ts";
const clrTypeOptions = [ import clrType from "@/assets/config/directory/clrType.json"
{key: "99959", value: "医疗费用清算"}, import insutypes from "@/assets/config/directory/insutypes.json"
{key: "41", value: "药店购药"},
{key: "99952", value: "异地医疗费用清算"}, interface ClrType {
{key: "9914", value: "签约服务费"}, [key: string]: string;
{key: "99939", value: "门诊统筹清算"} }
]
const insutypesOptions = [ const clrTypeOptions = Object.entries(clrType as ClrType).map(([key, value]) => ({
{ key: "310", value: "职工基本医疗保险" }, key: key,
{ key: "31003", value: "医疗保险个人账户(用人单位)" }, value: value
{ key: "312", value: "农民工住院医疗" }, }))
{ key: "320", value: "公务员医疗补助" }, interface Insutypes {
{ key: "321", value: "公务员医疗补助(市直统发)" }, [key: string]: string;
{ key: "323", value: "公务员医疗补助(市直非统发)" }, }
{ key: "330", value: "大额医疗费用补助" },
{ key: "331", value: "二次补助" }, const insutypesOptions = Object.entries(insutypes as Insutypes).map(([key, value]) => ({
{ key: "340", value: "离休人员医疗保障" }, key: key,
{ key: "350", value: "一至六级残废军人医疗补助" }, value: value
{ key: "360", value: "老红军医疗保障" }, }))
{ key: "370", value: "企业补充医疗保险" }, const init = (data: any) => {
{ key: "380", value: "新型农村合作医疗" }, formData.value = data;
{ key: "390", value: "城乡居民基本医疗保险" },
{ key: "391", value: "城镇居民基本医疗保险" },
{ key: "392", value: "城乡居民大病医疗保险" },
{ key: "399", value: "其他特殊人员医疗保障" },
{ key: "39901", value: "劳模医疗保障" },
{ key: "39902", value: "补充百分之10医疗" },
{ key: "39903", value: "城乡居民补充医疗保险" },
{ key: "39904", value: "建国前老工人医疗保险" },
{ key: "39905", value: "二乙医疗保险" },
{ key: "39906", value: "意外伤害医疗保险" },
{ key: "410", value: "长期照护保险" },
{ key: "510", value: "生育保险" },
{ key: "520", value: "公务员生育" }
]
const init = (data:any) => {
formData.value= data;
selectDate.value = formatDateArray([data.beginTime, data.endTime]); selectDate.value = formatDateArray([data.beginTime, data.endTime]);
show.value = true; show.value = true;
}; };
@ -121,7 +103,7 @@ const changeDate = (val: any) => {
const selectDate = ref<any>([]) const selectDate = ref<any>([])
const submitForm = () => { const submitForm = () => {
// el-form ref="formRef" // el-form ref="formRef"
formRef.value.validate((valid:any) => { formRef.value.validate((valid: any) => {
if (valid) { if (valid) {
accountRecordDo() accountRecordDo()
} else { } else {
@ -135,7 +117,7 @@ const accountRecordDo = () => {
let data = {...formData.value}; let data = {...formData.value};
post("social/reconciliation/totalDo", {data: data}).then((res: any) => { post("social/reconciliation/totalDo", {data: data}).then((res: any) => {
let msg = res.stmtinfo.stmt_rslt_dscr; let msg = res.stmtinfo.stmt_rslt_dscr;
if (res.stmtinfo.stmt_rslt == 0){ if (res.stmtinfo.stmt_rslt == 0) {
msg = "对平" msg = "对平"
} }
ElMessage.success({ ElMessage.success({
@ -144,36 +126,36 @@ const accountRecordDo = () => {
}); });
}) })
} }
const formRef =ref(); const formRef = ref();
const rules = reactive({ const rules = reactive({
// date el-date-picker prop // date el-date-picker prop
date: [ date: [
{ validator: validateDate, trigger: 'change' } {validator: validateDate, trigger: 'change'}
], ],
reconciliationType: [ reconciliationType: [
{ required: true, message: '清算类别不能为空', trigger: 'change' } {required: true, message: '清算类别不能为空', trigger: 'change'}
], ],
insuranceType: [ insuranceType: [
{ required: true, message: '险种类型不能为空', trigger: 'change' } {required: true, message: '险种类型不能为空', trigger: 'change'}
], ],
handlingInstitution: [ handlingInstitution: [
{ required: true, message: '经办机构不能为空', trigger: 'blur' } {required: true, message: '经办机构不能为空', trigger: 'blur'}
], ],
totalMedicalCost: [ totalMedicalCost: [
{ required: true, message: '医疗费用总额不能为空', trigger: 'blur' }, {required: true, message: '医疗费用总额不能为空', trigger: 'blur'},
{ type: 'number', message: '必须为数字', trigger: 'blur' } {type: 'number', message: '必须为数字', trigger: 'blur'}
], ],
totalFundPayment: [ totalFundPayment: [
{ required: true, message: '基金支付总额不能为空', trigger: 'blur' }, {required: true, message: '基金支付总额不能为空', trigger: 'blur'},
{ type: 'number', message: '必须为数字', trigger: 'blur' } {type: 'number', message: '必须为数字', trigger: 'blur'}
], ],
totalPersonalAccountPayment: [ totalPersonalAccountPayment: [
{ required: true, message: '个账支付总额不能为空', trigger: 'blur' }, {required: true, message: '个账支付总额不能为空', trigger: 'blur'},
{ type: 'number', message: '必须为数字', trigger: 'blur' } {type: 'number', message: '必须为数字', trigger: 'blur'}
], ],
settlementCount: [ settlementCount: [
{ required: true, message: '结算笔数不能为空', trigger: 'blur' }, {required: true, message: '结算笔数不能为空', trigger: 'blur'},
{ type: 'number', message: '必须为数字', trigger: 'blur' } {type: 'number', message: '必须为数字', trigger: 'blur'}
] ]
}); });
@ -187,7 +169,7 @@ function validateDate(rule: any, value: any, callback: any) {
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
.form{ .form {
padding: 20px; padding: 20px;
} }

View File

@ -1,18 +1,76 @@
<template> <template>
<div class="container-wrapper"> <div class="container-wrapper">
<!-- <div class="search">--> <div class="search">
<!-- <el-form :inline="true" >--> <div class="left">
<!-- </el-form>--> <el-form :inline="true" :model="searchModel">
<!-- </div>--> <!-- <el-form-item>-->
<!-- <el-date-picker-->
<!-- v-model="selectedDate"-->
<!-- type="daterange"-->
<!-- range-separator="-"-->
<!-- @change="handleDateChange"-->
<!-- start-placeholder="开始时间"-->
<!-- end-placeholder="结束时间"-->
<!-- />-->
<!-- </el-form-item>-->
<el-form-item>
<el-select
v-model="searchModel.reconciliationType"
placeholder="清算类别"
>
<el-option
v-for="item in clrTypeOptions"
:key="item"
:label="item.value"
:value="item.key"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-select
v-model="searchModel.insuranceType"
placeholder="险种类型"
>
<el-option
v-for="item in insutypesOptions"
:key="item"
:label="item.value"
:value="item.key"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-input
v-model="searchModel.handlingInstitution"
placeholder="经办机构"
style="width: 200px"
>
</el-input>
</el-form-item>
</el-form>
</div>
<div class="right">
<div class="default-btn" @click="resetSearch">
<span class="iconfont icon-RectangleCopy1"></span>
重置
</div>
<div class="default-btn" @click="getList" style="margin-left: 24px">
<span class="iconfont icon-RectangleCopy"></span>
搜索
</div>
</div>
</div>
<el-table :data="list" style="width: 100%;flex: 1;min-height: 0"> <el-table :data="list" style="width: 100%;flex: 1;min-height: 0">
<el-table-column label="清算类别" prop="reconciliationType"> <el-table-column label="清算类别" prop="reconciliationType">
<template #default="scope"> <template #default="scope">
{{getKey(clrType, scope.row.reconciliationType)}} {{ getKey(clrType, scope.row.reconciliationType) }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="险种类型" prop="insuranceType"> <el-table-column label="险种类型" prop="insuranceType">
<template #default="scope"> <template #default="scope">
{{getKey(insutypes, scope.row.insuranceType)}} {{ getKey(insutypes, scope.row.insuranceType) }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="经办机构" prop="handlingInstitution"></el-table-column> <el-table-column label="经办机构" prop="handlingInstitution"></el-table-column>
@ -32,7 +90,8 @@
</el-table-column> </el-table-column>
<el-table-column label="详细信息" prop="resultDesc" width="200" show-overflow-tooltip></el-table-column> <el-table-column label="详细信息" prop="resultDesc" width="200" show-overflow-tooltip></el-table-column>
</el-table> </el-table>
<el-pagination background layout="prev, pager, next" v-model:current-page="pageNum" v-model:page-size="pageSize" @change="changePageNumHandler" :total="total"/> <el-pagination background layout="prev, pager, next" v-model:current-page="pageNum" v-model:page-size="pageSize"
@change="changePageNumHandler" :total="total"/>
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
@ -45,8 +104,25 @@ import {getKey} from "@/utils/discrotyUtil.ts";
const pageSize = ref(20); const pageSize = ref(20);
const pageNum = ref(1); const pageNum = ref(1);
const total = ref(0); const total = ref(0);
interface ClrType {
[key: string]: string;
}
const clrTypeOptions = Object.entries(clrType as ClrType).map(([key, value]) => ({
key: key,
value: value
}))
interface Insutypes {
[key: string]: string;
}
const insutypesOptions = Object.entries(insutypes as Insutypes).map(([key, value]) => ({
key: key,
value: value
}))
interface queryParams { interface queryParams {
pageNum: number; pageNum: number;
pageSize: number; pageSize: number;
@ -57,24 +133,26 @@ interface queryParams {
handlingInstitution?: string; handlingInstitution?: string;
} }
const changePageNumHandler = (pageNum: number) => { const changePageNumHandler = (pageNum: number) => {
getList() getList()
}; };
interface TypeMapping { interface TypeMapping {
[key: number]: string; [key: number]: string;
} }
const list = ref<any>(); const list = ref<any>();
const getList = () => { const getList = () => {
const query: queryParams = { const query: queryParams = {
pageNum: pageNum.value, pageNum: pageNum.value,
pageSize: pageSize.value, pageSize: pageSize.value,
...searchModel.value
} }
post("social/reconciliation/pageHistory",{query:query}).then( post("social/reconciliation/pageHistory", {query: query}).then(
(res:any) => { (res: any) => {
list.value = res.list; list.value = res.list;
total.value = res.total_count; total.value = res.total_count;
} }
) )
} }
@ -83,9 +161,16 @@ onMounted(() => {
getList() getList()
}) })
//
const searchModel = ref<any>({});
const resetSearch= () => {
searchModel.value = {}
getList()
}
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
.container-wrapper { .container-wrapper {
width: 100%;
height: 100%; height: 100%;
padding: 24px; padding: 24px;
border-radius: 8px; border-radius: 8px;
@ -93,8 +178,17 @@ onMounted(() => {
flex-direction: column; flex-direction: column;
.search { .search {
height: 42px; width: 100%;
margin-bottom: 24px; display: flex;
justify-content: space-between;
} }
} }
:deep(.el-select__wrapper){
width: 150px;
height: 42px;
}
:deep(.el-input__wrapper){
width: 150px;
height: 42px;
}
</style> </style>