This commit is contained in:
2026-01-24 09:19:13 +08:00
parent 6a07605b39
commit 45d020e5ed
25 changed files with 3760 additions and 4 deletions
@@ -95,15 +95,13 @@ layout("/layouts/platform.html"){
<script nonce="${cspNonce!}">
<!--#include("../common/payRecord.js"){}#-->
const vue = new Vue({
new Vue({
el: '#app',
store,
dicts: ["AIDFUND_MEMBER_USER_TYPE"],
mixins: [initTableMixins],
data() {
return {
bizId: GetQueryString("bizId"),
taskId: GetQueryString("taskId"),
formRules: {
mobile: [{required: true, message: "必填", trigger: ["blur", "change"]}],
idCard: [{required: true, message: "必填", trigger: ["blur", "change"]}],
@@ -0,0 +1,579 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
.cost .el-form-item {
margin-bottom: 0 !important;
}
</style>
<div id="app" v-cloak>
<custom-card>
<snaker-start slot="header" label="医疗补助申请" define_key="YLBB">
<template slot="header-right-label">
<el-link type="primary" @click="tipsDialog=true" class="mr10">查看补助标准</el-link>
</template>
</snaker-start>
<el-form :model="formData" :rules="formRules" label-suffix=""
ref="formRef" class="flow-task-form">
<table-tool label="申请基础信息"></table-tool>
<el-descriptions :column="3" border>
<template>
<el-descriptions-item label="申请人姓名"
v-if="$auth.hasRole('SYSADMIN') || $auth.hasRole('SCHOOL_UNION_ADMIN')|| $auth.hasRole('RETIREMENT_WORKPLACE')">
<el-form-item prop="userId" label="申请人姓名">
<el-select
style="width: 100%"
v-model="formData.userId"
filterable
:clearable="false"
remote
reserve-keyword
placeholder="请输入姓名或工号查询"
:remote-method="createRemoteMethod"
@change="userChange">
<el-option
v-for="item in userOptions"
:key="item.id"
:label="item.username+''+item.loginname+''"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="申请人姓名" v-else>{{formData.userName}}</el-descriptions-item>
</template>
<el-descriptions-item label="性别">
<el-form-item label="性别">
<el-input readonly v-model="formData.sex"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="年龄">
<el-form-item label="年龄">
<el-input readonly v-model="formData.age"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="所在单位">
<el-form-item label="所在单位">
<el-input readonly v-model="formData.unitName"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="身份证号">
<el-form-item label="身份证号" prop="idCard">
<el-input clearable v-model="formData.idCard" placeholder="请输入身份证号"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="累计补助金额">
<el-form-item label="累计补助金额" prop="medicalSubsidyMoney">
<el-input readonly v-model="formData.medicalSubsidyMoney"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="申请次数">
<el-form-item label="申请次数">
<el-input readonly v-model="formData.applyNum"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="家庭住址" :span="2">
<el-form-item label="家庭住址" prop="homeAddress">
<el-input placeholder="请填写家庭住址" v-model="formData.homeAddress"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="联系电话">
<el-form-item label="联系电话" prop="mobile">
<el-input placeholder="请填写联系电话" v-model="formData.mobile"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="上年总收入">
<el-form-item label="上年总收入" prop="familyIncome">
<el-input-number :min="0" placeholder="请填写上年总收入"
v-model="formData.familyIncome"></el-input-number>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="报销类型">
<el-form-item label="报销类型" prop="subsidyType">
<el-radio-group v-model="formData.subsidyType">
<el-radio-button :label="i" v-for="i in subsidyTypeList" :key="i">
{{i}}
</el-radio-button>
</el-radio-group>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="疾病种类" :span="3">
<el-form-item label="疾病种类" prop="diseaseId">
<el-select clearable placeholder="请选择疾病种类"
v-model="formData.diseaseId" filterable @change="diseaseIdChange">
<el-option
:key="i.id"
:label="i.diseaseName"
:value="i.id"
v-for="i in diseaseList">
</el-option>
</el-select>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="备注" :span="3">
<el-form-item label="备注" prop="note">
<el-input clearable maxlength="100" placeholder="请输入具体病情说明,不要超过100字"
rows="3" type="textarea" v-model="formData.note">
</el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="附件" :span="3">
<el-form-item label="附件" prop="files">
<file-upload :value.sync="formData.files"
upload_mode="drag"
:upload_number="50"
:upload_size="1024 * 1024 * 20"
upload_result_category="array"
complete_result></file-upload>
</el-form-item>
</el-descriptions-item>
</el-descriptions>
<table-tool label="住院记录"></table-tool>
<el-table :data="formData.costList" border show-summary class="cost">
<el-table-column label="序号" type="index" width="50px" fixed></el-table-column>
<el-table-column label="住院时间段" width="300">
<template v-slot="{row,$index}">
<el-form-item label-width="0"
label="住院时间段"
:prop="'costList.'+$index+'.visitTime'"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<el-date-picker
style="width: 100%"
format="yyyy-MM-dd"
placeholder="选择住院时间段"
type="daterange"
v-model="row.visitTime"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="yyyy-MM-dd">
</el-date-picker>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="住院医院" width="200">
<template v-slot="{row,$index}">
<el-form-item label-width="0"
label="住院医院"
:prop="'costList.'+$index+'.visitHospital'"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<el-input placeholder="住院医院" v-model="row.visitHospital"></el-input>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="住院医疗费总额(不含门诊)" width="180" prop="hospitalSumMoney">
<template v-slot="{row}">
<el-input-number placeholder="住院医疗费总额(不含门诊)"
:min="0"
controls-position="right" style="width: 100%"
v-model="row.hospitalSumMoney"></el-input-number>
</template>
</el-table-column>
<el-table-column label="实际报销金额" width="180" prop="reimbursementMoney">
<template v-slot="{row}">
<el-input-number placeholder="实际报销金额"
:min="0"
controls-position="right" style="width: 100%"
v-model="row.reimbursementMoney"></el-input-number>
</template>
</el-table-column>
<el-table-column label="(住院医疗)允许报销范围内个人承担部分金额"
width="180" prop="singleBearMoney">
<template v-slot="{row}">
<el-input-number :min="0" placeholder="个人承担部分金额"
controls-position="right" style="width: 100%"
v-model="row.singleBearMoney"></el-input-number>
</template>
</el-table-column>
<el-table-column label="(住院医疗)自费部分金额" width="180" prop="personExpenseMoney">
<template v-slot="{row}">
<el-input-number placeholder="自费部分金额"
:min="0"
controls-position="right"
disabled style="width: 100%"
v-model="row.personExpenseMoney = calcPersonExpenseMoney(row)"></el-input-number>
</template>
</el-table-column>
<el-table-column label="重病门诊自费金额" width="180" prop="outpatientServiceMoney">
<template v-slot="{row}">
<el-input-number placeholder="门诊费"
:min="0"
:disabled="!formData.isMajorDiseases"
controls-position="right" style="width: 100%"
v-model="row.outpatientServiceMoney"></el-input-number>
</template>
</el-table-column>
<el-table-column label="非住院肾衰竭治疗、靶向药" width="180" prop="bxyMoney">
<template v-slot="{row}">
<el-input-number placeholder="靶向药"
:min="0"
:disabled="!formData.isMajorDiseases"
controls-position="right" style="width: 100%"
v-model="row.bxyMoney"></el-input-number>
</template>
</el-table-column>
<el-table-column label="操作" width="100px" fixed="right">
<template slot="header" slot-scope="scope">
<el-button type="primary" @click="formData.costList.push({
hospitalSumMoney:0,
reimbursementMoney:0,
singleBearMoney:0,
outpatientServiceMoney:0,
bxyMoney:0,
})" size="mini">增加
</el-button>
</template>
<template v-slot="scope">
<el-button @click="formData.costList.splice(scope.$index,1)" icon="el-icon-delete" size="mini"
type="danger">
</el-button>
</template>
</el-table-column>
</el-table>
</el-form>
<template slot="footer">
<el-button type="primary" plain @click="onSave" :loading="formLoading">保存</el-button>
<el-button type="primary" @click="onSubmit" v-if="!taskId" :loading="formLoading">提交</el-button>
<el-button type="primary" @click="onFinishTask" v-else :loading="formLoading">提交</el-button>
</template>
</custom-card>
<el-dialog :visible.sync="tipsDialog" title="申请补助须知" top="50px" width="60%">
<p>
1.享受公费医疗的互助基金会员患本办法所列疾病,住院治疗期间发生的医疗费经校医院审核并报销后,个人承担费用(不含国家规定应该由个人支付的费用)年度累计超过
5000 元者,可申请并获得补助。
</p>
<p>
2.参加社会医疗保险的互助基金会员患本办法所列疾病,住院治疗期间发生的医疗费经社会医疗保险机构报销后,并经校医院审核,个人承担费用(不含国家规定应该由个人支付的费用)年度累计超过
5000 元者,可申请并获得补助。
</p>
<p>
3.互助基金会员患不属于本办法所列重大疾病目录中费用支出较大的疾病,经住院治疗、且经公费医疗或社会医疗保险报销后,单次住院个人承担费用(不含国家规定应该由个人支付的费用)超过
10000
元(年度不累计)者,也可申请并获得补助。
</p>
<ul class="list-group" style="max-height: 450px;overflow-y: scroll">
<li class="list-group-item" v-for="i in diseaseList">{{i.diseaseName}}</li>
</ul>
<el-row class="mt25" justify="center" type="flex">
<el-button @click="tipsDialog=false" type="primary">我已知晓</el-button>
</el-row>
</el-dialog>
</div>
<script nonce="${cspNonce!}">
new Vue({
el: '#app',
store,
mixins: [initTableMixins],
data() {
return {
tipsDialog: false,
diseaseList: [],
userOptions: [],
subsidyTypeList: ['公费医疗', '社会保险'],
formRules: {
userId: [{required: true, message: '请选择用户', trigger: 'blur'}],
homeAddress: [{required: true, message: '请填写家庭住址', trigger: 'blur'}],
familyIncome: [{required: true, message: '请填写上年总收入', trigger: 'blur'}],
subsidyType: [{required: true, message: '请选择报销类型', trigger: 'blur'}],
diseaseId: [{required: true, message: '请选择疾病种类', trigger: 'blur'}],
mobile: [{required: true, message: '请输入联系电话', trigger: 'blur'}],
files: [{required: true, message: '请上传附件', trigger: 'blur'}],
},
formData: {
costList: []
},
bizId: GetQueryString("bizId"),
taskId: GetQueryString("taskId"),
medicalSetting: {}
}
},
methods: {
getMedicalSetting() {
this.$axios.post("/platform/medicalMutualAid/medical/basicSetting/getSetting").then(res => {
if (res.code === 0) {
this.medicalSetting = res.data
}
})
},
// 获取累计补助金额
getMedicalSubsidyMoney(userId) {
this.$axios.post(loc() + "/getMedicalSubsidyMoney", {userId}).then(res => {
if (res.code === 0) {
if (res.data.medicalSubsidyMoney !== null) {
this.$set(this.formData, 'medicalSubsidyMoney', res.data.medicalSubsidyMoney + this.medicalSetting.loveMoney)
} else {
this.$set(this.formData, 'medicalSubsidyMoney', 0)
}
}
})
},
// 获取补助申请次数
getMedicalApplyNum(userId) {
this.$axios.post(loc() + "/getMedicalApplyNum", {userId}).then(res => {
if (res.code === 0) {
this.$set(this.formData, 'applyNum', res.data)
}
})
},
diseaseIdChange(val) {
const disease = this.diseaseList.find(i => i.id === val)
if (disease) {
this.$set(this.formData, 'isMajorDiseases', disease.isMajorDiseases)
} else {
this.$set(this.formData, 'isMajorDiseases', false)
}
},
// 计算每个表格中的自费部分金额
calcPersonExpenseMoney(row) {
// fix 2025-11-16 个人自费金额 计算需要减去靶向药
// const mz = isNaN(row.outpatientServiceMoney) ? 0 : row.outpatientServiceMoney
// const personExpenseMoney = (this.formData.majorDisease ? (mz + row.hospitalSumMoney) : row.hospitalSumMoney) - row.reimbursementMoney - row.singleBearMoney - row.bxyMoney
//自费部分金额=住院医疗费总额(不含门诊)-实际报销金额-个人承担部分金额 zhf 2025-11-17
const personExpenseMoney = row.hospitalSumMoney - row.reimbursementMoney - row.singleBearMoney
return isNaN(personExpenseMoney) ? 0 : personExpenseMoney < 0 ? 0 : personExpenseMoney.toFixed(2)
},
async userChange(val) {
const user = this.userOptions.find(u => u.id === val)
this.$set(this.formData, 'sex', user.sex)
if (user.birthday) {
this.$set(this.formData, 'age', this.$moment().diff(user.birthday, 'years'))
}
this.$set(this.formData, 'unitName', user.unitName)
this.$set(this.formData, 'idCard', user.idCard)
this.$set(this.formData, 'homeAddress', user.homeAddress)
this.$set(this.formData, 'mobile', user.mobile)
this.$set(this.formData, 'userId', user.id)
this.getMedicalSubsidyMoney(this.formData.userId)
this.getMedicalApplyNum(this.formData.userId)
this.getIsAfootMedicalApply(this.formData.userId, null)
},
onSave() {
this.$confirm("保存后可在我的补助申请页面继续填写然后提交,是否保存?", '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.formLoading = true
//判断每个住院记录中是否有开始时间和结束时间
this.formData.costList.forEach(cost => {
if (cost.visitTime && cost.visitTime.length > 0) {
cost.visitStartTime = cost.visitTime[0]
cost.visitEndTime = cost.visitTime[1]
}
})
this.$axios.post("/platform/medicalMutualAid/medical/apply/save", {data: JSON.stringify(this.formData)}).then(res => {
if (res.code === 0) {
this.$message.success("保存成功")
commonUtil.pjaxPush("/platform/medicalMutualAid/medical/mine")
}
}).finally(() => {
this.formLoading = false
})
})
},
onSubmit() {
this.$refs.formRef.validate((valid) => {
if (valid) {
if (this.formData.costList.length === 0) {
this.$message.error("请添加住院记录!")
return
}
if (!this.validateIsMajorDiseases()){
this.$alert('您的个人承担部分金额达不到补助标准,无法申请!', '提示', {
confirmButtonText: '确定',
callback: action => {
}
});
return;
}
this.$confirm("您确定要提交吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
this.$axios.post("/platform/medicalMutualAid/medical/apply/submit", {
data: JSON.stringify(this.formData)
}).then(res => {
if (res.code === 0) {
this.$message.success(res.msg)
commonUtil.pjaxPush("/platform/medicalMutualAid/medical/mine")
}
})
})
}
})
},
onFinishTask() {
this.$refs.formRef.validate((valid) => {
if (valid) {
if (this.formData.costList.length === 0) {
this.$message.error("请添加住院记录!")
return
}
if (!this.validateIsMajorDiseases()){
this.$alert('您的个人承担部分金额达不到补助标准,无法申请!', '提示', {
confirmButtonText: '确定',
callback: action => {
}
});
return;
}
this.$confirm("您确定要提交吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
this.$axios.post("/platform/medicalMutualAid/medical/apply/submitAgain", {
data: JSON.stringify(this.formData),
taskId: GetQueryString("taskId")
}).then(res => {
if (res.code === 0) {
this.$message.success(res.msg)
commonUtil.pjaxPush("/platform/medicalMutualAid/medical/mine")
}
})
})
}
})
},
// 判断个人承担部分金额有没有达到标准,true不能申请,false可以申请
validateIsMajorDiseases() {
let flag = true
if (this.formData.isMajorDiseases) {
const singleBearMoneyList = this.formData.costList.map(cost => cost.singleBearMoney)
const allSingleBearMoney = singleBearMoneyList.reduce((a, b) => {
return parseFloat(a) + parseFloat(b)
})
if (this.formData.subsidyType === '公费医疗' && allSingleBearMoney < this.medicalSetting.publicYearInDiseaseMoney) {
flag = false
} else if (this.formData.subsidyType === '社会保险' && allSingleBearMoney < this.medicalSetting.socialYearInDiseaseMoney) {
flag = false
}
if (this.formData.applyNum === 1) {
flag = true
}
} else {
if (this.formData.costList.some(v => v.singleBearMoney < this.medicalSetting.ordinaryOnceNotInDiseaseMoney)) {
flag = false
}
}
return flag
},
async createRemoteMethod(keyword) {
const resp = await this.$axios.post(loc() + "/getSubsidyUser", {keyword})
if (resp.code === 0) {
this.userOptions = resp.data;
}
},
getDiseaseList() {
this.$axios.post("/platform/medicalMutualAid/medical/apply/getDiseaseList").then(res => {
if (res.code === 0) {
this.diseaseList = res.data;
}
})
},
async init() {
this.getMedicalSetting()
if (this.bizId) {
this.getIsAfootMedicalApply(this.$store.state.user.id, this.bizId)
this.$axios.post("/platform/medicalMutualAid/medical/mine/info", {id: this.bizId}).then((res) => {
if (res.code === 0) {
res.data.costList.forEach(cost => {
if (cost.visitStartTime) {
cost.visitTime = [cost.visitStartTime, cost.visitEndTime]
}
})
this.createRemoteMethod(res.data.userId)
this.formData = res.data
this.diseaseIdChange(res.data.diseaseId)
}
})
} else {
await this.createRemoteMethod(this.$store.state.user.id)
this.$set(this.formData, 'sex', this.$store.state.user.sex)
if (this.$store.state.user.birthday) {
this.$set(this.formData, 'age', this.$moment().diff(this.$store.state.user.birthday, 'years'))
}
this.$set(this.formData, 'unitName', this.$store.state.user.unit.name)
this.$set(this.formData, 'idCard', this.$store.state.user.idCard)
this.$set(this.formData, 'homeAddress', this.$store.state.user.homeAddress)
this.$set(this.formData, 'mobile', this.$store.state.user.mobile)
this.$set(this.formData, 'userId', this.$store.state.user.id)
this.getMedicalSubsidyMoney(this.formData.userId)
this.getMedicalApplyNum(this.formData.userId)
this.getIsAfootMedicalApply(this.$store.state.user.id, null)
}
},
// 查询是否有进行中的申请
getIsAfootMedicalApply(userId, id) {
this.$axios.post("/platform/medicalMutualAid/medical/apply/getIsAfootMedicalApply", {
userId,
id
}).then(res => {
if (res.code === 0) {
}
}).catch(e => {
this.$alert(e.msg, '温馨提示', {
confirmButtonText: '确定',
callback: action => {
commonUtil.pjaxPush("/platform/medicalMutualAid/medical/mine")
}
});
})
}
},
created() {
this.getDiseaseList()
this.init()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,134 @@
<!--#
layout("/layouts/platform.html"){
#-->
<div id="app" v-cloak>
<div style="max-width: 900px; margin: 0 auto;">
<custom-card>
<el-form :model="formData" label-suffix="" ref="formRef" label-width="250px">
<el-form-item label="公费医疗年度补助标准(重疾)" prop="publicYearInDiseaseMoney">
<el-input-number :max="100000" :min="0" style="width: 100%"
v-model="formData.publicYearInDiseaseMoney"></el-input-number>
</el-form-item>
<el-form-item label="社保年度补助标准(重疾)" prop="socialYearInDiseaseMoney">
<el-input-number :max="100000" :min="0" style="width: 100%"
v-model="formData.socialYearInDiseaseMoney"></el-input-number>
</el-form-item>
<el-form-item label="单次补助标准(普疾)" prop="ordinaryOnceNotInDiseaseMoney">
<el-input-number :max="100000" :min="0" style="width: 100%"
v-model="formData.ordinaryOnceNotInDiseaseMoney"></el-input-number>
</el-form-item>
<el-form-item label="爱心互助基金补助标准" prop="loveMoney">
<el-input-number :max="100000" :min="0" style="width: 100%"
v-model="formData.loveMoney"></el-input-number>
</el-form-item>
<el-form-item label="补助比例" prop="subsidyRatio">
<el-input-number :max="100000" :min="0" style="width: 100%"
v-model="formData.subsidyRatio"></el-input-number>
</el-form-item>
<el-form-item label="每年补助限额(重疾)" prop="maxYearInDiseaseMoney">
<el-input-number :max="100000" :min="0" style="width: 100%"
v-model="formData.maxYearInDiseaseMoney"></el-input-number>
</el-form-item>
<el-form-item label="每年补助限额(普疾)" prop="maxYearNotInDiseaseMoney">
<el-input-number :max="100000" :min="0" style="width: 100%"
v-model="formData.maxYearNotInDiseaseMoney"></el-input-number>
</el-form-item>
<el-form-item label="共计补助限额" prop="previousYearMaxMoney">
<el-input-number :max="500000" :min="0" style="width: 100%"
v-model="formData.previousYearMaxMoney"></el-input-number>
</el-form-item>
<el-form-item label="超过共计补助限额后每年限额" prop="beyondMaxQuotaMoney">
<el-input-number :max="100000" :min="0" style="width: 100%"
v-model="formData.beyondMaxQuotaMoney"></el-input-number>
</el-form-item>
<el-form-item label="十年未申请首次补助比例增加" prop="tenYearNeverAddSubsidyRatio">
<el-input-number :max="100" :min="0" style="width: 100%"
v-model="formData.tenYearNeverAddSubsidyRatio"></el-input-number>
</el-form-item>
<el-form-item label="十五年未补助首次申请比例增加" prop="fifteenYearNeverAddSubsidyRatio">
<el-input-number :max="100" :min="0" style="width: 100%"
v-model="formData.fifteenYearNeverAddSubsidyRatio"></el-input-number>
</el-form-item>
</el-form>
<template slot="footer">
<el-button type="primary" @click="doSubmit">确定</el-button>
</template>
</custom-card>
</div>
</div>
<script nonce="${cspNonce!}">
new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {}
},
methods: {
doSubmit() {
this.$refs.formRef.validate(valid => {
if (valid) {
this.$axios.post(loc() + "/doSubmit", this.formData).then(res => {
if (res.code === 0) {
this.$message.success("保存成功")
this.initData()
}
})
}
})
},
initData() {
this.$axios.post(loc() + "/getSetting").then(res => {
if (res.code === 0) {
if (res.data == null) {
this.formData = {
publicYearInDiseaseMoney: 0,
socialYearInDiseaseMoney: 0,
ordinaryOnceNotInDiseaseMoney: 0,
loveMoney: 0,
subsidyRatio: 0,
maxYearInDiseaseMoney: 0,
maxYearNotInDiseaseMoney: 0,
previousYearMaxMoney: 0,
}
} else {
this.formData = res.data
}
}
})
}
},
created() {
this.initData()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,129 @@
const MEDICAL_INFO = {
template: /*language=HTML*/
`
<div>
<div class="process-title">
申请信息
<el-link type="primary" @click="openChart">点击查看流程图</el-link>
</div>
<el-descriptions :column="3" border>
<el-descriptions-item label="申请人姓名">{{ viewData.userName }}{{viewData.loginName}}
</el-descriptions-item>
<el-descriptions-item label="性别">{{ viewData.sex }}</el-descriptions-item>
<el-descriptions-item label="年龄">{{ viewData.age }}</el-descriptions-item>
<el-descriptions-item label="联系电话">{{ viewData.mobile }}</el-descriptions-item>
<el-descriptions-item label="身份证号">{{ viewData.idCard }}</el-descriptions-item>
<el-descriptions-item label="累计补助金额">{{ viewData.medicalSubsidyMoney }}</el-descriptions-item>
<el-descriptions-item label="起扣时间">{{ viewData.aidFundDeductTime }}</el-descriptions-item>
<el-descriptions-item label="所在单位">{{ viewData.unitName }}</el-descriptions-item>
<el-descriptions-item label="所在工会">{{ viewData.unionName }}</el-descriptions-item>
<el-descriptions-item label="疾病种类">{{ viewData.diseaseName }}</el-descriptions-item>
<el-descriptions-item label="重大疾病(次数)">
<span :class="[viewData.isMajorDiseases?'text-danger':'text-info']">
<i class="fa fa-circle ml5"></i>
{{viewData.isMajorDiseases?'是':'否'}}{{viewData.applyNum}}
</span>
</el-descriptions-item>
<el-descriptions-item></el-descriptions-item>
<el-descriptions-item label="备注" :span="3">
<div style="white-space: pre-line">{{viewData.note}}</div>
</el-descriptions-item>
<el-descriptions-item label="住院记录" :span="3">
<el-table :data="viewData.costList" border show-summary>
<el-table-column label="序号" type="index" width="50px" fixed></el-table-column>
<el-table-column label="住院时间段" width="200">
<template v-slot="{row}">
{{row.visitStartTime}}至{{row.visitEndTime}}
</template>
</el-table-column>
<el-table-column label="住院医院" prop="visitHospital" width="250"></el-table-column>
<el-table-column label="住院医疗费总额(不含门诊)" prop="hospitalSumMoney"></el-table-column>
<el-table-column label="实际报销金额" prop="reimbursementMoney"></el-table-column>
<el-table-column label="(住院医疗)允许报销范围内个人承担部分金额"
prop="singleBearMoney"></el-table-column>
<el-table-column label="(住院医疗)自费部分金额" prop="personExpenseMoney"></el-table-column>
<el-table-column label="重病门诊自费金额" prop="outpatientServiceMoney"></el-table-column>
<el-table-column label="非住院肾衰竭治疗、靶向药" prop="bxyMoney"></el-table-column>
</el-table>
</el-descriptions-item>
<el-descriptions-item label="附件" :span="3">
<file-preview :files="viewData.files" complete_result></file-preview>
</el-descriptions-item>
</el-descriptions>
<template v-for="task in doneTasks">
<div class="mt10">
<div class="process-title">{{ task.displayName }}</div>
<el-descriptions border class="flow-task-form" :column="3" :key="task.id"
v-if="task.ext.isFirstTaskNode">
<el-descriptions-item label="申请用户">{{ task.ext.initiatorName
}}({{task.ext.initiatorAccount}})
</el-descriptions-item>
<el-descriptions-item label="申请时间">{{ task.finishTime }}</el-descriptions-item>
<el-descriptions-item label="办理结果">
<dict-tag :options="dict.type.PROCESS_TASK_SUBMIT_TYPE"
:value="task.ext.submitType"></dict-tag>
</el-descriptions-item>
</el-descriptions>
<el-descriptions border class="flow-task-form" :column="3" :key="task.id" v-else>
<el-descriptions-item label="办理用户">{{ task.taskFormData.userName
}}({{task.taskFormData.loginName}})
</el-descriptions-item>
<el-descriptions-item label="办理时间">{{ task.finishTime }}</el-descriptions-item>
<el-descriptions-item label="办理结果">
<dict-tag :options="dict.type.PROCESS_TASK_SUBMIT_TYPE"
:value="task.ext.submitType"></dict-tag>
</el-descriptions-item>
<el-descriptions-item label="详细疾病名称" v-if="task.taskFormData.diseaseDetailName" :span="3">{{
task.taskFormData.diseaseDetailName }}
</el-descriptions-item>
<el-descriptions-item label="办理意见" v-if="!task.ext.isFirstTaskNode":span="3">{{
task.taskFormData.opinion }}
</el-descriptions-item>
</el-descriptions>
</div>
</template>
<slot></slot>
<snaker-chart ref="snakerChartRef"></snaker-chart>
</div>
`,
dicts: ["PROCESS_TASK_SUBMIT_TYPE"],
data() {
return {
visible: false,
viewData: {},
doneTasks: [],
row: null
}
},
methods: {
onOpen(row) {
this.row = row
this.visible = true
this.getInfo()
this.getDoneTasks()
},
getInfo() {
this.$axios.post('/platform/medicalMutualAid/medical/mine/info', {id: this.row.id}).then((res) => {
if (res.code === 0) {
this.viewData = res.data
}
})
},
// 获取已办任务审批记录
getDoneTasks() {
this.$axios.post("/flow/common/doneTasks", {bizId: this.row.id}).then((res) => {
if (res.code === 0) {
this.doneTasks = res.data
}
})
},
// 查看流程图
openChart() {
this.$refs.snakerChartRef.onOpenFull(this.row.instanceProcessDefineId, this.row.instanceId)
}
}
}
@@ -0,0 +1,111 @@
const MEDICAL_TABLE = {
template: /*language=HTML*/
`
<div>
<el-table :data="localTableData" :size="tableSize" @sort-change="pageOrder"
ref="table" row-key="id" style="width: 100%"
:summary-method="getSummaries" :show-summary="showSummary">
<el-table-column type="index" width="50px" label="序号" :index="indexMethod"
fixed="left"></el-table-column>
<el-table-column
:label="column.label"
:prop="column.prop"
:key="column.prop"
:width="column.width"
:fixed="column.fixed"
:sortable="column.sortable"
show-overflow-tooltip
sortable
v-for="column in tableColumns"
>
<template v-if="column.prop==='isMajorDiseases'" v-slot="{row}">
<span :class="[row.isMajorDiseases?'text-danger':'text-info']">
<i class="fa fa-circle ml5"></i>
{{row.isMajorDiseases?'是':'否'}}{{row.applyNum}}
</span>
</template>
<template v-slot="{ row }" v-else-if="column.prop === 'instanceState'">
<enum-tag :value="row.instanceState" name="ProcessInstanceStateEnum" label_key="message"
size="small"></enum-tag>
</template>
<template v-slot="{ row }" v-else-if="column.prop === 'curTaskName'">
{{row.curTaskName?row.curTaskName:row.taskName}}
</template>
</el-table-column>
<slot name="operation"></slot>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</div>
`,
props: {
localTableData: {
type: Array,
default: []
},
showSummary: {
type: Boolean,
default: false
},
localPageForm:{
type: Object,
default: () => {
return {}
}
}
},
mixins: [initTableMixins],
data() {
return {
tableColumns: [
{prop: 'loginname', label: '工号', fixed: "left"},
{prop: 'username', label: '姓名', fixed: "left"},
{prop: 'unionName', label: '所属工会', width: "180"},
{prop: 'unitName', label: '所属单位', width: "180"},
{prop: 'diseaseName', label: '疾病种类', width: "180"},
{prop: 'isMajorDiseases', label: '重大疾病(次数)', width: "100"},
{prop: 'applyNum', label: '申请总次数'},
{prop: 'applyTime', label: '申请时间', width: "180"},
{prop: 'hospitalSumMoney$', label: '住院医疗总额(不含门诊)', width: "120"},
{prop: 'reimbursementMoney$', label: '实际报销总额', width: "120"},
{prop: 'singleBearMoney$', label: '(住院医疗)允许报销范围内个人承担部分总额', width: "120"},
{prop: 'personExpenseMoney$', label: '(住院医疗)自费部分总额', width: "120"},
{prop: 'outpatientServiceMoney$', label: '重病门诊自费金额', width: "120"},
{prop: 'bxyMoney$', label: '非住院肾衰竭治疗、靶向药金额', width: "120"},
{prop: 'totalMoney', label: '合计金额', width: "120"},
{prop: 'curTaskName', label: '当前节点', width: "120"},
{prop: 'instanceState', label: '流程状态'},
],
}
},
methods: {
getSummaries(param) {
const {columns, data} = param
const sums = []
columns.forEach((column, index) => {
const sumColumn = ['hospitalSumMoney$', 'reimbursementMoney$', 'singleBearMoney$', 'personExpenseMoney$', 'subsidyMoney', 'loveSubsidyMoney', 'outpatientServiceMoney$', 'totalMoney']
if (sumColumn.includes(column.property)) {
const values = data.map(i => Number(i[column.property]))
if (values && values.length > 0) {
const everyColumnSum = values.reduce((a, b) => a + b)
sums[index] = isNaN(everyColumnSum) ? 0 : everyColumnSum.toFixed(2)
}
}
})
sums[0] = '合计'
return sums
},
},
created() {
this.$emit('ready')
},
watch: {
"localPageForm": {
handler(val) {
this.pageForm = {...this.pageForm, ...val}
},
deep: true
},
}
}
@@ -0,0 +1,121 @@
<!--#
layout("/layouts/platform.html"){
#-->
<div id="app">
<guava ref="guava">
<el-card shadow="never">
<search @search="doSearch">
<search-item label="疾病种类">
<el-input placeholder="请输入疾病种类" clearable v-model="pageForm.searchKeyword"
@keyup.enter.native="doSearch">
</el-input>
</search-item>
</search>
</el-card>
<el-card shadow="never">
<table-tool label="疾病种类">
<el-button @click="openAdd" size="small" type="primary">
新增疾病种类
</el-button>
</table-tool>
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder"
ref="table" row-key="id" style="width: 100%" v-loading="tableLoading">
<el-table-column label="编号" prop="diseaseCode"></el-table-column>
<el-table-column label="疾病种类" prop="diseaseName"></el-table-column>
<el-table-column label="是否重大疾病" prop="isMajorDiseases">
<template v-slot="{row}">
<el-tag v-if="row.isMajorDiseases" type="danger"></el-tag>
<el-tag v-else></el-tag>
</template>
</el-table-column>
<el-table-column label="操作">
<template slot-scope="{row}">
<el-button @click="openEdit(row)" size="mini" type="primary">编辑</el-button>
<el-button @click="doDelete(row.id)" size="mini" type="danger">删除</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
</guava>
<el-dialog :visible.sync="dialogVisible" title="新增" width="50%">
<el-form :model="formData" :rules="rules" label-width="120px" ref="form">
<el-form-item label="疾病名称" prop="diseaseName">
<el-input maxlength="50" v-model="formData.diseaseName"></el-input>
</el-form-item>
<el-form-item label="编号" prop="diseaseCode">
<el-input max="128" v-model.number="formData.diseaseCode"></el-input>
</el-form-item>
<el-form-item label="是否重大疾病" prop="isMajorDiseases">
<el-radio-group v-model="formData.isMajorDiseases" size="small">
<el-radio :label="true" border></el-radio>
<el-radio :label="false" border></el-radio>
</el-radio-group>
</el-form-item>
</el-form>
<el-row justify="end" type="flex">
<el-button @click="dialogVisible=false">取消</el-button>
<el-button @click="doSubmit" class="ml10" type="primary">确定</el-button>
</el-row>
</el-dialog>
</div>
<script nonce="${cspNonce!}">
new Vue({
el: "#app",
mixins: [initTableMixins],
data() {
return {
dialogVisible: false,
rules: {
diseaseName: [{required: true, message: '请输入疾病名称', trigger: ['change', 'blur']}],
diseaseCode: [{required: true, message: '请输入疾病编号', trigger: ['change', 'blur']}]
},
}
},
methods: {
doDelete(id) {
this.$confirm('您确定要删除吗, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.$axios.post(loc() + "/doDelete", {id: id}).then(resp => {
if (resp.code === 0) {
this.pageData()
}
})
})
},
openEdit(row) {
this.formData = clone(row)
this.dialogVisible = true
},
doSubmit() {
this.$refs.form.validate(valid => {
if (valid) {
this.$axios.post(loc() + "/doSubmit", this.formData).then(resp => {
if (resp.code === 0) {
this.dialogVisible = false
this.pageData()
}
})
}
})
},
openAdd() {
this.formData = {isMajorDiseases: true}
this.dialogVisible = true
}
},
async created() {
this.pageData()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,340 @@
<!--#
layout("/layouts/platform.html"){
#-->
<div id="app">
<guava ref="guava">
<el-card shadow="never">
<search @search="doSearch">
<search-item label="年度">
<el-date-picker
v-model="pageForm.year"
type="year"
value-format="yyyy"
placeholder="请选择年度"
style="width: 100%"
@change="doSearch"
></el-date-picker>
</search-item>
<search-item label="姓名/工号">
<el-input placeholder="请输入姓名或工号" clearable v-model="pageForm.searchKeyword"
@keyup.enter.native="doSearch">
</el-input>
</search-item>
<search-item label="疾病种类">
<el-select clearable placeholder="请选择疾病种类"
v-model="pageForm.diseaseId" filterable>
<el-option
:key="i.id"
:label="i.diseaseName"
:value="i.id"
v-for="i in diseaseList">
</el-option>
</el-select>
</search-item>
<search-item label="所属工会">
<el-select v-model="pageForm.unionId" clearable filterable placeholder="请选择院级工会"
@change="getUnitList()">
<el-option v-for="item in unionList" :key="item.id" :label="item.name"
:value="item.id"></el-option>
</el-select>
</search-item>
<search-item label="所属单位">
<el-select v-model="pageForm.unitId" clearable filterable placeholder="请选择单位">
<el-option v-for="item in unitList" :key="item.id" :label="item.name"
:value="item.id"></el-option>
</el-select>
</search-item>
</search>
</el-card>
<el-card shadow="never">
<table-tool label="申请列表">
<el-radio-group v-model="pageForm.approval" size="small" @change="doSearch">
<el-radio-button :label="true">已审核</el-radio-button>
<el-radio-button :label="false">未审核</el-radio-button>
</el-radio-group>
</table-tool>
<medical-table ref="table" :local-table-data="tableData" v-loading="tableLoading"
:local-page-form="pageForm" @ready="doSearch">
<template slot="operation">
<el-table-column label="操作" fixed="right" width="200">
<template slot-scope="{row}">
<el-button @click="onView(row)" size="mini" type="primary">查看</el-button>
<el-button v-if="row.taskState === 10" @click="onAudit(row)" size="mini" type="primary">
审核
</el-button>
<el-button v-if="row.canRevoke" @click="onRevoke(row)" size="mini" type="danger">撤回
</el-button>
</template>
</el-table-column>
</template>
</medical-table>
</el-card>
<template #edit>
<medical-info ref="medicalInfoRef">
<div v-if="showApprovalForm">
<div class="process-title">
{{formData.taskName}}
</div>
<el-form :model="formData" ref="formRef" :rules="formRules" label-width="150px" label-suffix=""
>
<el-table :data="costList" border show-summary class="cost">
<el-table-column label="序号" type="index" width="50px" fixed></el-table-column>
<el-table-column label="住院时间段" width="200">
<template v-slot="{row}">
{{row.visitStartTime}}至{{row.visitEndTime}}
</template>
</el-table-column>
<el-table-column label="住院医院" prop="visitHospital" width="250"></el-table-column>
<el-table-column label="住院医疗费总额(不含门诊)" width="180" prop="hospitalSumMoney">
<template v-slot="{row}">
<el-input-number placeholder="住院医疗费总额(不含门诊)"
:min="0"
controls-position="right" style="width: 100%"
@change="tableChangeMoney"
v-model="row.hospitalSumMoney"></el-input-number>
</template>
</el-table-column>
<el-table-column label="实际报销金额" width="180" prop="reimbursementMoney">
<template v-slot="{row}">
<el-input-number placeholder="实际报销金额"
:min="0"
controls-position="right" style="width: 100%"
@change="tableChangeMoney"
v-model="row.reimbursementMoney"></el-input-number>
</template>
</el-table-column>
<el-table-column label="(住院医疗)允许报销范围内个人承担部分金额"
width="180" prop="singleBearMoney">
<template v-slot="{row}">
<el-input-number :min="0" placeholder="个人承担部分金额"
controls-position="right" style="width: 100%"
@change="tableChangeMoney"
v-model="row.singleBearMoney"></el-input-number>
</template>
</el-table-column>
<el-table-column label="(住院医疗)自费部分金额" width="180"
prop="personExpenseMoney"></el-table-column>
<el-table-column label="重病门诊自费金额" width="180" prop="outpatientServiceMoney">
<template v-slot="{row}">
<el-input-number placeholder="门诊费"
:min="0"
:disabled="!formData.tf_isMajorDiseases"
controls-position="right" style="width: 100%"
@change="tableChangeMoney"
v-model="row.outpatientServiceMoney"></el-input-number>
</template>
</el-table-column>
<el-table-column label="非住院肾衰竭治疗、靶向药" width="180" prop="bxyMoney">
<template v-slot="{row}">
<el-input-number placeholder="靶向药"
:min="0"
:disabled="!formData.tf_isMajorDiseases"
controls-position="right" style="width: 100%"
@change="tableChangeMoney"
v-model="row.bxyMoney"></el-input-number>
</template>
</el-table-column>
</el-table>
<div class="mt10">
<el-form-item label="疾病种类" prop="tf_diseaseId"
:rules="[{required:true,message:'请选择疾病种类',trigger:['change','blur']}]">
<el-select placeholder="请选择疾病种类" style="width: 50%"
v-model="formData.tf_diseaseId" filterable @change="diseaseIdChange">
<el-option
:key="i.id"
:label="i.diseaseName"
:value="i.id"
v-for="i in diseaseList">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="预测补助金额(元)" prop="tf_forecastSubsidyMoney">
<span slot="label">
预测补助金额(元)
<el-tooltip class="item" effect="dark"
content="计算公式:((住院医疗)允许报销范围内个人承担部分金额+(住院医疗)自费部分金额+重病门诊自费金额+非住院肾衰竭治疗、靶向药金额)* 补助比例"
placement="top-start">
<i class="el-icon-question"></i>
</el-tooltip>
</span>
<el-input-number v-model="formData.tf_forecastSubsidyMoney"
style="width: 50%"></el-input-number>
<el-button @click="calcMoney(formData.id)" type="primary">重新计算金额</el-button>
</el-form-item>
<el-form-item label="爱心基金(元)" prop="tf_loveSubsidyMoney">
<el-input-number :max="medicalSetting.loveMoney" :min="0" style="width: 50%"
v-model="formData.tf_loveSubsidyMoney"></el-input-number>
</el-form-item>
<el-form-item label="审批意见" prop="tf_opinion"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<user-opinion-textarea v-model="formData.tf_opinion"></user-opinion-textarea>
</el-form-item>
</div>
</el-form>
<el-row type="flex" justify="end">
<el-button @click="$refs.guava.index()" size="small">取消</el-button>
<el-button @click="handleTaskAction(6)" size="small" type="info">退回到发起人</el-button>
<el-button @click="handleTaskAction(2)" size="small" type="danger">拒绝申请</el-button>
<el-button @click="handleTaskAction(1)" size="small" type="primary">同意申请</el-button>
</el-row>
</div>
</medical-info>
</template>
</guava>
</div>
<script nonce="${cspNonce!}">
<!--#include('../common/medicalTable.js'){}#-->
<!--#include('../common/medicalInfo.js'){}#-->
new Vue({
el: "#app",
store,
mixins: [initTableMixins],
data() {
return {
costList: [],
unionList: [],
unitList: [],
diseaseList: [],
showApprovalForm: false,
pageForm: {
approval: false,
year: new Date().getFullYear() + "",
},
medicalSetting: {}
}
},
components: {
"medical-table": MEDICAL_TABLE,
"medical-info": MEDICAL_INFO
},
methods: {
// 修改表格里面的金额并修改数据库里的数据
tableChangeMoney() {
this.costList.forEach(cost => {
const personExpenseMoney = cost.hospitalSumMoney - cost.reimbursementMoney - cost.singleBearMoney
cost.personExpenseMoney = isNaN(personExpenseMoney) ? 0 : personExpenseMoney < 0 ? 0 : personExpenseMoney.toFixed(2)
})
console.log(this.costList)
this.$axios.post("/platform/medicalMutualAid/medical/foundationAudit/updateCost", {
data: JSON.stringify(this.costList)
}).then(res => {
if (res.code === 0) {
}
})
},
// 重新计算预测补助金额
calcMoney() {
},
diseaseIdChange(val) {
const disease = this.diseaseList.find(i => i.id === val)
this.$set(this.formData, "tf_diseaseName", disease.diseaseName)
this.$set(this.formData, "tf_isMajorDiseases", disease.isMajorDiseases)
},
onView(row) {
this.$refs.guava.edit(() => {
this.showApprovalForm = false
this.$refs.medicalInfoRef.onOpen(row)
})
},
onAudit(row) {
this.$refs.guava.edit(() => {
this.showApprovalForm = true
const disease = this.diseaseList.find(i => i.id === row.diseaseId)
this.formData = {
id: row.id,
tf_diseaseId: row.diseaseId,
tf_oldDiseaseId: row.diseaseId,
tf_oldDiseaseName: disease.diseaseName,
processTaskId: row.taskId,
taskName: row.curTaskName
}
this.diseaseIdChange(row.diseaseId)
this.$refs.medicalInfoRef.onOpen(row)
})
setTimeout(() => {
this.costList = this.$refs.medicalInfoRef.viewData.costList
}, 500)
},
handleTaskAction(val) {
this.$refs.formRef.validate((valid) => {
if (valid) {
this.$confirm("您确定要提交吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
this.$axios.post("/platform/medicalMutualAid/medical/foundationAudit/executeTask", {
data: JSON.stringify({
...this.formData,
submitType: val
})
}).then((res) => {
if (res.code === 0) {
this.$refs.guava.index()
this.$message.success(res.msg)
this.doSearch()
}
})
})
}
})
},
onRevoke(row) {
this.$confirm("您确定要撤回吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "info"
}).then(() => {
this.$axios.post("/flow/common/revokeTask", {taskId: row.taskId}).then((res) => {
if (res.code === 0) {
this.$message.success(res.msg)
this.doSearch()
}
})
})
},
getDiseaseList() {
this.$axios.post("/platform/medicalMutualAid/medical/apply/getDiseaseList").then(res => {
if (res.code === 0) {
this.diseaseList = res.data;
}
})
},
async getUnitList() {
this.unitList = await this.$businessTool.listUnit(this.pageForm.unionId)
},
getMedicalSetting() {
this.$axios.post("/platform/medicalMutualAid/medical/basicSetting/getSetting").then(res => {
if (res.code === 0) {
this.medicalSetting = res.data
}
})
},
},
async created() {
this.getMedicalSetting()
this.getDiseaseList()
this.unionList = await this.$businessTool.listUnion()
this.unitList = await this.$businessTool.listUnit()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,139 @@
<!--#
layout("/layouts/platform.html"){
#-->
<div id="app">
<guava ref="guava">
<el-card shadow="never">
<search @search="doSearch">
<search-item label="年度">
<el-date-picker
v-model="pageForm.year"
type="year"
value-format="yyyy"
placeholder="请选择年度"
style="width: 100%"
@change="doSearch"
></el-date-picker>
</search-item>
<search-item label="姓名/工号">
<el-input placeholder="请输入姓名或工号" clearable v-model="pageForm.searchKeyword"
@keyup.enter.native="doSearch">
</el-input>
</search-item>
<search-item label="疾病种类">
<el-select clearable placeholder="请选择疾病种类"
v-model="pageForm.diseaseId" filterable>
<el-option
:key="i.id"
:label="i.diseaseName"
:value="i.id"
v-for="i in diseaseList">
</el-option>
</el-select>
</search-item>
</search>
</el-card>
<el-card shadow="never">
<table-tool label="我的申请">
</table-tool>
<medical-table ref="table" :local-table-data="tableData"
:show-summary='true' v-loading="tableLoading"
:local-page-form="pageForm" @ready="doSearch">
<template slot="operation">
<el-table-column label="操作" fixed="right" width="300">
<template slot-scope="{row}">
<el-button @click="onView(row)" size="mini" type="primary">查看</el-button>
<el-button v-if="row.taskKey === 'startTask' || !row.instanceId" @click="onEdit(row)"
size="mini" type="primary">编辑
</el-button>
<el-button v-if="row.canRevoke" size="mini" type="danger" @click="onRevoke(row)">撤回
</el-button>
<el-button v-if="row.taskKey === 'startTask' || !row.instanceId" @click="onDelete(row.id)"
size="mini" type="danger">
删除
</el-button>
</template>
</el-table-column>
</template>
</medical-table>
</el-card>
<template #view>
<medical-info ref="medicalInfoRef"></medical-info>
</template>
</guava>
</div>
<script nonce="${cspNonce!}">
<!--#include('../common/medicalTable.js'){}#-->
<!--#include('../common/medicalInfo.js'){}#-->
new Vue({
el: "#app",
store,
mixins: [initTableMixins],
data() {
return {
diseaseList: []
}
},
components: {
"medical-table": MEDICAL_TABLE,
"medical-info": MEDICAL_INFO
},
methods: {
onView(row) {
this.$refs.guava.view(()=>{
this.$refs.medicalInfoRef.onOpen(row)
})
},
onEdit(row) {
commonUtil.pjaxPush('/platform/medicalMutualAid/medical/apply?taskId=' + (row.startTaskId || '') + "&bizId=" + row.id)
},
onRevoke(row) {
this.$confirm("您确定要撤回吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
this.$axios.post("/flow/common/revokeTask", { taskId: row.startTaskId }).then((res) => {
if (res.code === 0) {
this.$message.success(res.msg)
this.pageData()
}
})
})
},
onDelete(id) {
this.$confirm("您确定要删除吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
this.$axios.post("/platform/medicalMutualAid/medical/mine/delete", { id }).then((res) => {
if (res.code === 0) {
this.$message.success(res.msg)
this.pageData()
}
})
})
},
getDiseaseList() {
this.$axios.post("/platform/medicalMutualAid/medical/apply/getDiseaseList").then(res => {
if (res.code === 0) {
this.diseaseList = res.data;
}
})
},
},
created() {
this.getDiseaseList()
this.pageData()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,231 @@
<!--#
layout("/layouts/platform.html"){
#-->
<div id="app">
<guava ref="guava">
<el-card shadow="never">
<search @search="doSearch">
<search-item label="年度">
<el-date-picker
v-model="pageForm.year"
type="year"
value-format="yyyy"
placeholder="请选择年度"
style="width: 100%"
@change="doSearch"
></el-date-picker>
</search-item>
<search-item label="姓名/工号">
<el-input placeholder="请输入姓名或工号" clearable v-model="pageForm.searchKeyword"
@keyup.enter.native="doSearch">
</el-input>
</search-item>
<search-item label="疾病种类">
<el-select clearable placeholder="请选择疾病种类"
v-model="pageForm.diseaseId" filterable>
<el-option
:key="i.id"
:label="i.diseaseName"
:value="i.id"
v-for="i in diseaseList">
</el-option>
</el-select>
</search-item>
<search-item label="所属工会">
<el-select v-model="pageForm.unionId" clearable filterable placeholder="请选择院级工会"
@change="getUnitList()">
<el-option v-for="item in unionList" :key="item.id" :label="item.name"
:value="item.id"></el-option>
</el-select>
</search-item>
<search-item label="所属单位">
<el-select v-model="pageForm.unitId" clearable filterable placeholder="请选择单位">
<el-option v-for="item in unitList" :key="item.id" :label="item.name"
:value="item.id"></el-option>
</el-select>
</search-item>
</search>
</el-card>
<el-card shadow="never">
<table-tool label="申请列表">
<el-radio-group v-model="pageForm.approval" size="small" @change="doSearch">
<el-radio-button :label="true">已审核</el-radio-button>
<el-radio-button :label="false">未审核</el-radio-button>
</el-radio-group>
</table-tool>
<medical-table ref="table" :local-table-data="tableData" v-loading="tableLoading"
:local-page-form="pageForm" @ready="doSearch">
<template slot="operation">
<el-table-column label="操作" fixed="right" width="200">
<template slot-scope="{row}">
<el-button @click="onView(row)" size="mini" type="primary">查看</el-button>
<el-button v-if="row.taskState === 10" @click="onAudit(row)" size="mini" type="primary">
审核
</el-button>
<el-button v-if="row.canRevoke" @click="onRevoke(row)" size="mini" type="danger">撤回
</el-button>
</template>
</el-table-column>
</template>
</medical-table>
</el-card>
<template #edit>
<medical-info ref="medicalInfoRef">
<div v-if="showApprovalForm">
<div class="process-title">
{{formData.taskName}}
</div>
<el-form :model="formData" ref="formRef" :rules="formRules" label-width="0" label-suffix=""
class="flow-task-form">
<el-form-item label="疾病种类" prop="tf_diseaseId"
:rules="[{required:true,message:'请选择疾病种类',trigger:['change','blur']}]">
疾病种类:
<el-select placeholder="请选择疾病种类"
v-model="formData.tf_diseaseId" filterable @change="diseaseIdChange">
<el-option
:key="i.id"
:label="i.diseaseName"
:value="i.id"
v-for="i in diseaseList">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="详细疾病名称" prop="tf_diseaseDetailName"
:rules="[{required:true,message:'请填写详细疾病名称',trigger:['change','blur']}]">
详细疾病名称:
<el-input maxlength="100" v-model="formData.tf_diseaseDetailName"
placeholder="请填写详细疾病名称"></el-input>
</el-form-item>
<el-form-item label="审批意见" prop="tf_opinion"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<user-opinion-textarea v-model="formData.tf_opinion"></user-opinion-textarea>
</el-form-item>
</el-form>
<el-row type="flex" justify="end">
<el-button @click="$refs.guava.index()" size="small">取消</el-button>
<el-button @click="handleTaskAction(6)" size="small" type="info">退回到发起人</el-button>
<el-button @click="handleTaskAction(2)" size="small" type="danger">拒绝申请</el-button>
<el-button @click="handleTaskAction(1)" size="small" type="primary">同意申请</el-button>
</el-row>
</div>
</medical-info>
</template>
</guava>
</div>
<script nonce="${cspNonce!}">
<!--#include('../common/medicalTable.js'){}#-->
<!--#include('../common/medicalInfo.js'){}#-->
new Vue({
el: "#app",
store,
mixins: [initTableMixins],
data() {
return {
unionList: [],
unitList: [],
diseaseList: [],
showApprovalForm: false,
pageForm: {
approval: false,
year: new Date().getFullYear() + "",
},
}
},
components: {
"medical-table": MEDICAL_TABLE,
"medical-info": MEDICAL_INFO
},
methods: {
diseaseIdChange(val){
const disease= this.diseaseList.find(i => i.id === val)
this.$set(this.formData, "tf_diseaseName", disease.diseaseName)
},
onView(row) {
this.$refs.guava.edit(() => {
this.showApprovalForm = false
this.$refs.medicalInfoRef.onOpen(row)
})
},
onAudit(row) {
this.$refs.guava.edit(() => {
this.showApprovalForm = true
const disease= this.diseaseList.find(i => i.id === row.diseaseId)
this.formData = {
id: row.id,
tf_diseaseId: row.diseaseId,
tf_oldDiseaseId: row.diseaseId,
tf_oldDiseaseName: disease.diseaseName,
processTaskId: row.taskId,
taskName: row.curTaskName
}
this.diseaseIdChange(row.diseaseId)
this.$refs.medicalInfoRef.onOpen(row)
})
},
handleTaskAction(val) {
this.$refs.formRef.validate((valid) => {
if (valid) {
this.$confirm("您确定要提交吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
this.$axios.post("/platform/medicalMutualAid/medical/schoolHospitalAudit/executeTask", {
data: JSON.stringify({
...this.formData,
submitType: val
})
}).then((res) => {
if (res.code === 0) {
this.$refs.guava.index()
this.$message.success(res.msg)
this.doSearch()
}
})
})
}
})
},
onRevoke(row) {
this.$confirm("您确定要撤回吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "info"
}).then(() => {
this.$axios.post("/flow/common/revokeTask", {taskId: row.taskId}).then((res) => {
if (res.code === 0) {
this.$message.success(res.msg)
this.doSearch()
}
})
})
},
getDiseaseList() {
this.$axios.post("/platform/medicalMutualAid/medical/apply/getDiseaseList").then(res => {
if (res.code === 0) {
this.diseaseList = res.data;
}
})
},
async getUnitList() {
this.unitList = await this.$businessTool.listUnit(this.pageForm.unionId)
}
},
async created() {
this.getDiseaseList()
this.unionList = await this.$businessTool.listUnion()
this.unitList = await this.$businessTool.listUnit()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,182 @@
<!--#
layout("/layouts/platform.html"){
#-->
<div id="app">
<guava ref="guava">
<el-card shadow="never">
<search @search="doSearch">
<search-item label="年度">
<el-date-picker
v-model="pageForm.year"
type="year"
value-format="yyyy"
placeholder="请选择年度"
style="width: 100%"
@change="doSearch"
></el-date-picker>
</search-item>
<search-item label="姓名/工号">
<el-input placeholder="请输入姓名或工号" clearable v-model="pageForm.searchKeyword"
@keyup.enter.native="doSearch">
</el-input>
</search-item>
<search-item label="疾病种类">
<el-select clearable placeholder="请选择疾病种类"
v-model="pageForm.diseaseId" filterable>
<el-option
:key="i.id"
:label="i.diseaseName"
:value="i.id"
v-for="i in diseaseList">
</el-option>
</el-select>
</search-item>
</search>
</el-card>
<el-card shadow="never">
<table-tool label="申请列表">
<el-radio-group v-model="pageForm.approval" size="small" @change="doSearch">
<el-radio-button :label="true">已审核</el-radio-button>
<el-radio-button :label="false">未审核</el-radio-button>
</el-radio-group>
</table-tool>
<medical-table ref="table" :local-table-data="tableData" v-loading="tableLoading"
:local-page-form="pageForm" @ready="doSearch">
<template slot="operation">
<el-table-column label="操作" fixed="right" width="200">
<template slot-scope="{row}">
<el-button @click="onView(row)" size="mini" type="primary">查看</el-button>
<el-button v-if="row.taskState === 10" @click="onAudit(row)" size="mini" type="primary">
审核
</el-button>
<el-button v-if="row.canRevoke" @click="onRevoke(row)" size="mini" type="danger">撤回
</el-button>
</template>
</el-table-column>
</template>
</medical-table>
</el-card>
<template #edit>
<medical-info ref="medicalInfoRef">
<div v-if="showApprovalForm">
<div class="process-title">
{{formData.taskName}}
</div>
<el-form :model="formData" ref="formRef" :rules="formRules" label-width="0" label-suffix=""
class="flow-task-form">
<el-form-item label="审批意见" prop="tf_opinion"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<user-opinion-textarea v-model="formData.tf_opinion"></user-opinion-textarea>
</el-form-item>
</el-form>
<el-row type="flex" justify="end">
<el-button @click="$refs.guava.index()" size="small">取消</el-button>
<el-button @click="handleTaskAction(6)" size="small" type="info">退回到发起人</el-button>
<el-button @click="handleTaskAction(2)" size="small" type="danger">拒绝申请</el-button>
<el-button @click="handleTaskAction(1)" size="small" type="primary">同意申请</el-button>
</el-row>
</div>
</medical-info>
</template>
</guava>
</div>
<script nonce="${cspNonce!}">
<!--#include('../common/medicalTable.js'){}#-->
<!--#include('../common/medicalInfo.js'){}#-->
new Vue({
el: "#app",
store,
mixins: [initTableMixins],
data() {
return {
diseaseList: [],
showApprovalForm: false,
pageForm: {
approval: false,
year: new Date().getFullYear() + "",
},
}
},
components: {
"medical-table": MEDICAL_TABLE,
"medical-info": MEDICAL_INFO
},
methods: {
onView(row) {
this.$refs.guava.edit(() => {
this.showApprovalForm = false
this.$refs.medicalInfoRef.onOpen(row)
})
},
onAudit(row) {
this.$refs.guava.edit(() => {
this.showApprovalForm = true
this.formData = {
processTaskId: row.taskId,
taskName: row.curTaskName
}
this.$refs.medicalInfoRef.onOpen(row)
})
},
handleTaskAction(val) {
this.$refs.formRef.validate((valid) => {
if (valid) {
this.$confirm("您确定要提交吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
this.$axios.post("/flow/common/executeTask", {
data: JSON.stringify({
...this.formData,
submitType: val
})
}).then((res) => {
if (res.code === 0) {
this.$refs.guava.index()
this.$message.success(res.msg)
this.doSearch()
}
})
})
}
})
},
onRevoke(row) {
this.$confirm("您确定要撤回吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "info"
}).then(() => {
this.$axios.post("/flow/common/revokeTask", {taskId: row.taskId}).then((res) => {
if (res.code === 0) {
this.$message.success(res.msg)
this.doSearch()
}
})
})
},
getDiseaseList() {
this.$axios.post("/platform/medicalMutualAid/medical/apply/getDiseaseList").then(res => {
if (res.code === 0) {
this.diseaseList = res.data;
}
})
},
},
created() {
this.getDiseaseList()
}
})
</script>
<!--#
}
#-->