| | |
| | | v-show="showSearch" |
| | | label-width="90px" |
| | | > |
| | | <el-form-item label="接收医院" prop="hospitalno"> |
| | | <el-form-item label="付款医院" prop="hospitalno"> |
| | | <el-select |
| | | v-model="queryParams.hospitalno" |
| | | placeholder="请选择接收医院" |
| | | placeholder="请选择付款医院" |
| | | clearable |
| | | filterable |
| | | size="small" |
| | |
| | | @keyup.enter.native="handleQuery" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="报告日期"> |
| | | <el-form-item label="捐献日期"> |
| | | <el-date-picker |
| | | v-model="donatetimeRange" |
| | | type="daterange" |
| | |
| | | </el-form> |
| | | |
| | | <el-row :gutter="10" class="mb8"> |
| | | <el-col :span="1.5"> |
| | | <el-button |
| | | type="primary" |
| | | plain |
| | | icon="el-icon-plus" |
| | | size="mini" |
| | | @click="handleAdd" |
| | | >新增</el-button |
| | | > |
| | | </el-col> |
| | | <el-col :span="1.5"> |
| | | <el-button |
| | | type="warning" |
| | | plain |
| | | icon="el-icon-download" |
| | | size="mini" |
| | | :loading="exportLoading" |
| | | @click="handleExport" |
| | | >导出</el-button |
| | | > |
| | | </el-col> |
| | | <right-toolbar |
| | | :showSearch.sync="showSearch" |
| | | @queryTable="getList" |
| | | ></right-toolbar> |
| | | </el-row> |
| | | |
| | | <el-table v-loading="loading" border :data="organfeeList"> |
| | | <el-table |
| | | v-loading="loading" |
| | | border |
| | | :data="organfeeList" |
| | | highlight-current-row |
| | | @current-change="handleCurrentChange" |
| | | > |
| | | <el-table-column type="index" label="序号" width="55" align="center" /> |
| | | <el-table-column |
| | | prop="donatetime" |
| | | label="报告日期" |
| | | label="捐献日期" |
| | | width="120" |
| | | align="center" |
| | | > |
| | |
| | | <span>{{ parseTime(scope.row.donatetime, "{y}-{m}-{d}") }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column |
| | | prop="donorname" |
| | | label="捐献者" |
| | |
| | | align="center" |
| | | /> |
| | | <el-table-column |
| | | prop="payOrganName" |
| | | label="付款器官名称" |
| | | width="140" |
| | | align="center" |
| | | show-overflow-tooltip |
| | | /> |
| | | <el-table-column |
| | | prop="caseno" |
| | | label="器官分配编号" |
| | | align="center" |
| | | show-overflow-tooltip |
| | | /> |
| | | <el-table-column prop="name" label="受体姓氏" width="120" align="center" /> |
| | | <el-table-column label="移植日期" width="120" align="center"> |
| | | <template slot-scope="scope"> |
| | | <span>{{ parseTime(scope.row.receiveTime, "{y}-{m}-{d}") }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column label="器官状态" width="120" align="center"> |
| | | <template slot-scope="scope"> |
| | | <span>{{ selectOrganState(scope.row.organState) }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="hospitalname" |
| | | label="付款医院" |
| | | width="200" |
| | | align="center" |
| | | /> |
| | | <el-table-column |
| | | prop="organcharge" |
| | | label="应收金额" |
| | | width="120" |
| | | align="center" |
| | | /> |
| | | <el-table-column label="付款状态" width="100" align="center"> |
| | | <template slot-scope="scope"> |
| | | <span>{{ payStatus(scope.row) }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="amount" |
| | | label="实收金额" |
| | | width="120" |
| | | align="center" |
| | | /> |
| | | <el-table-column label="未付金额" width="160" align="center"> |
| | | <template slot-scope="scope"> |
| | | <span>{{ formatReceivableDiff(scope.row) }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column label="收款日期" width="120" align="center"> |
| | | <template slot-scope="scope"> |
| | | <span>{{ parseTime(scope.row.organtime, "{y}-{m}-{d}") }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="organchargedesc" |
| | | label="备注" |
| | |
| | | <el-dialog |
| | | title="修改器官信息" |
| | | :visible.sync="editOpen" |
| | | width="500px" |
| | | width="760px" |
| | | append-to-body |
| | | :close-on-click-modal="false" |
| | | > |
| | | <el-form ref="editForm" :model="editForm" label-width="90px"> |
| | | <el-form-item label="器官状态" prop="organState"> |
| | | <el-select |
| | | v-model="editForm.organState" |
| | | placeholder="请选择器官状态" |
| | | style="width: 100%" |
| | | > |
| | | <el-option |
| | | v-for="item in organStateList" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="备注" prop="organchargedesc"> |
| | | <el-input |
| | | v-model="editForm.organchargedesc" |
| | | type="textarea" |
| | | :rows="3" |
| | | maxlength="200" |
| | | show-word-limit |
| | | placeholder="请输入备注" |
| | | /> |
| | | </el-form-item> |
| | | <el-form ref="editForm" :model="editForm" label-width="110px"> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="付款医院" prop="hospitalno"> |
| | | <el-select |
| | | v-model="editForm.hospitalno" |
| | | placeholder="请选择付款医院" |
| | | clearable |
| | | filterable |
| | | style="width: 100%" |
| | | @change="handleEditHospitalChange" |
| | | > |
| | | <el-option |
| | | v-for="item in organizationList" |
| | | :key="item.organizationid" |
| | | :label="item.organizationname" |
| | | :value="String(item.organizationid)" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="付款器官名称" prop="payOrganName"> |
| | | <el-input |
| | | v-model="editForm.payOrganName" |
| | | maxlength="100" |
| | | placeholder="请输入付款器官名称" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="器官分配编号" prop="caseno"> |
| | | <el-input |
| | | v-model="editForm.caseno" |
| | | maxlength="50" |
| | | placeholder="请输入器官分配编号" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="器官状态" prop="organState"> |
| | | <el-select |
| | | v-model="editForm.organState" |
| | | placeholder="请选择器官状态" |
| | | style="width: 100%" |
| | | > |
| | | <el-option |
| | | v-for="item in organStateList" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="备注" prop="organchargedesc"> |
| | | <el-input |
| | | v-model="editForm.organchargedesc" |
| | | type="textarea" |
| | | :rows="3" |
| | | maxlength="200" |
| | | show-word-limit |
| | | placeholder="请输入备注" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="editOpen = false">取 消</el-button> |
| | | <el-button type="primary" :loading="editLoading" @click="submitEdit" |
| | | >确 定</el-button |
| | | > |
| | | </span> |
| | | </el-dialog> |
| | | |
| | | <!-- 新增器官费用 --> |
| | | <el-dialog |
| | | title="新增器官费用" |
| | | :visible.sync="addOpen" |
| | | width="820px" |
| | | append-to-body |
| | | :close-on-click-modal="false" |
| | | > |
| | | <el-form |
| | | ref="addForm" |
| | | :model="addForm" |
| | | :rules="addRules" |
| | | label-width="110px" |
| | | > |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="捐献者" prop="donorname"> |
| | | <el-input |
| | | v-model="addForm.donorname" |
| | | maxlength="50" |
| | | placeholder="请输入捐献者" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="付款医院" prop="hospitalno"> |
| | | <el-select |
| | | v-model="addForm.hospitalno" |
| | | placeholder="请选择付款医院" |
| | | clearable |
| | | filterable |
| | | style="width: 100%" |
| | | @change="handleAddHospitalChange" |
| | | > |
| | | <el-option |
| | | v-for="item in organizationList" |
| | | :key="item.organizationid" |
| | | :label="item.organizationname" |
| | | :value="String(item.organizationid)" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="器官名称" prop="organname"> |
| | | <el-input |
| | | v-model="addForm.organname" |
| | | maxlength="50" |
| | | placeholder="请输入器官名称" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="付款器官名称" prop="payOrganName"> |
| | | <el-input |
| | | v-model="addForm.payOrganName" |
| | | maxlength="100" |
| | | placeholder="请输入付款器官名称" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="器官分配编号" prop="caseno"> |
| | | <el-input |
| | | v-model="addForm.caseno" |
| | | maxlength="50" |
| | | placeholder="请输入器官分配编号" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="受体姓氏" prop="name"> |
| | | <el-input |
| | | v-model="addForm.name" |
| | | maxlength="50" |
| | | placeholder="请输入受体姓氏" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="器官状态" prop="organState"> |
| | | <el-select |
| | | v-model="addForm.organState" |
| | | placeholder="请选择器官状态" |
| | | style="width: 100%" |
| | | > |
| | | <el-option |
| | | v-for="item in organStateList" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="收款日期" prop="organtime"> |
| | | <el-date-picker |
| | | v-model="addForm.organtime" |
| | | type="date" |
| | | value-format="yyyy-MM-dd" |
| | | placeholder="请选择收款日期" |
| | | style="width: 100%" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="应收金额" prop="organcharge"> |
| | | <el-input-number |
| | | v-model="addForm.organcharge" |
| | | :min="0" |
| | | :precision="2" |
| | | :controls="false" |
| | | placeholder="请输入应收金额" |
| | | style="width: 100%" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="实收金额" prop="amount"> |
| | | <el-input-number |
| | | v-model="addForm.amount" |
| | | :min="0" |
| | | :precision="2" |
| | | :controls="false" |
| | | placeholder="请输入实收金额" |
| | | style="width: 100%" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="备注" prop="organchargedesc"> |
| | | <el-input |
| | | v-model="addForm.organchargedesc" |
| | | type="textarea" |
| | | :rows="3" |
| | | maxlength="200" |
| | | show-word-limit |
| | | placeholder="请输入备注" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="addOpen = false">取 消</el-button> |
| | | <el-button type="primary" :loading="addLoading" @click="submitAdd" |
| | | >确 定</el-button |
| | | > |
| | | </span> |
| | |
| | | <script> |
| | | import { |
| | | listDonorchargeorgan, |
| | | updateDonorchargeorgan |
| | | addDonorchargeorgan, |
| | | updateDonorchargeorgan, |
| | | exportOrganfee |
| | | } from "@/api/project/donorcharge"; |
| | | import { listOrganization } from "@/api/project/organization"; |
| | | |
| | | /** 新增器官费用的空表单 */ |
| | | function emptyAddForm() { |
| | | return { |
| | | donorname: null, |
| | | hospitalno: null, |
| | | hospitalname: null, |
| | | organname: null, |
| | | payOrganName: null, |
| | | caseno: null, |
| | | name: null, |
| | | organState: null, |
| | | organcharge: null, |
| | | amount: null, |
| | | organtime: null, |
| | | organchargedesc: null |
| | | }; |
| | | } |
| | | |
| | | export default { |
| | | name: "Organfee", |
| | |
| | | return { |
| | | // 遮罩层 |
| | | loading: false, |
| | | // 导出遮罩层 |
| | | exportLoading: false, |
| | | // 显示搜索条件 |
| | | showSearch: true, |
| | | // 总条数 |
| | | total: 0, |
| | | // 器官费用列表 |
| | | organfeeList: [], |
| | | // 表格当前选中行 |
| | | currentRow: null, |
| | | // 接收医院(机构)下拉数据 |
| | | organizationList: [], |
| | | // 报告日期区间 |
| | |
| | | // 器官状态(对应 service_donorchargeorgan.organ_state) |
| | | organStateList: [ |
| | | { value: "1", label: "移植" }, |
| | | { value: "2", label: "失功" }, |
| | | { value: "2", label: "弃用" }, |
| | | { value: "3", label: "库存" }, |
| | | { value: "4", label: "已移植" }, |
| | | { value: "5", label: "弃用" }, |
| | | { value: "6", label: "直系免除" }, |
| | | { value: "7", label: "不良事件" } |
| | | { value: "4", label: "失功" }, |
| | | { value: "5", label: "直系免除" }, |
| | | { value: "6", label: "不良事件" }, |
| | | { value: "7", label: "科研" } |
| | | ], |
| | | // 修改弹窗 |
| | | editOpen: false, |
| | | editLoading: false, |
| | | editForm: { |
| | | id: null, |
| | | hospitalno: null, |
| | | hospitalname: null, |
| | | payOrganName: null, |
| | | caseno: null, |
| | | organState: null, |
| | | organchargedesc: null |
| | | }, |
| | | // 新增弹窗 |
| | | addOpen: false, |
| | | addLoading: false, |
| | | addForm: emptyAddForm(), |
| | | addRules: { |
| | | donorname: [ |
| | | { required: true, message: "请输入捐献者", trigger: "blur" } |
| | | ], |
| | | organname: [ |
| | | { required: true, message: "请输入器官名称", trigger: "blur" } |
| | | ], |
| | | organcharge: [ |
| | | { required: true, message: "请输入应收金额", trigger: "blur" } |
| | | ] |
| | | }, |
| | | // 查询参数 |
| | | queryParams: { |
| | |
| | | this.loading = false; |
| | | }); |
| | | }, |
| | | /** 导出按钮操作 */ |
| | | handleExport() { |
| | | const queryParams = this.queryParams; |
| | | this.$modal |
| | | .confirm("是否确认导出器官费用数据?") |
| | | .then(() => { |
| | | this.exportLoading = true; |
| | | return exportOrganfee(queryParams); |
| | | }) |
| | | .then(response => { |
| | | this.$download.name(response.msg); |
| | | }) |
| | | .catch(() => {}) |
| | | .finally(() => { |
| | | this.exportLoading = false; |
| | | }); |
| | | }, |
| | | /** 应收金额-实收金额的差额(保留两位小数),应收金额为空时返回 null */ |
| | | receivableDiff(row) { |
| | | if ( |
| | | row.organcharge === null || |
| | | row.organcharge === undefined || |
| | | row.organcharge === "" |
| | | ) { |
| | | return null; |
| | | } |
| | | const receivable = Number(row.organcharge); |
| | | if (isNaN(receivable)) { |
| | | return null; |
| | | } |
| | | const received = Number(row.amount); |
| | | const diff = receivable - (isNaN(received) ? 0 : received); |
| | | return Math.round(diff * 100) / 100; |
| | | }, |
| | | /** 差额展示文本,固定两位小数 */ |
| | | formatReceivableDiff(row) { |
| | | const diff = this.receivableDiff(row); |
| | | return diff === null ? "" : diff.toFixed(2); |
| | | }, |
| | | /** 差额为 0 为已付,其它为未付 */ |
| | | payStatus(row) { |
| | | const diff = this.receivableDiff(row); |
| | | if (diff === null) { |
| | | return ""; |
| | | } |
| | | return diff === 0 ? "已付" : "未付"; |
| | | }, |
| | | /** 是否未收费:organ_charge_state 为 0 或为空 */ |
| | | isUncharged(row) { |
| | | const state = row.organChargeState; |
| | |
| | | }) |
| | | .catch(() => {}); |
| | | }, |
| | | /** 打开修改弹窗(器官状态、备注) */ |
| | | /** 表格当前行变化 */ |
| | | handleCurrentChange(row) { |
| | | this.currentRow = row; |
| | | }, |
| | | /** 新增按钮操作:以当前选中的一行为模板,复制除 id 外的字段 */ |
| | | handleAdd() { |
| | | const row = this.currentRow; |
| | | if (!row) { |
| | | this.$modal.msgWarning("请先选中一行数据"); |
| | | return; |
| | | } |
| | | this.addForm = { |
| | | donorname: row.donorname || null, |
| | | hospitalno: |
| | | row.hospitalno === null || row.hospitalno === undefined |
| | | ? null |
| | | : String(row.hospitalno), |
| | | hospitalname: row.hospitalname || null, |
| | | organname: row.organname || null, |
| | | payOrganName: row.payOrganName || null, |
| | | caseno: row.caseno || null, |
| | | name: row.name || null, |
| | | organState: |
| | | row.organState === null || row.organState === undefined |
| | | ? null |
| | | : String(row.organState), |
| | | organcharge: |
| | | row.organcharge === null || row.organcharge === undefined |
| | | ? null |
| | | : row.organcharge, |
| | | amount: |
| | | row.amount === null || row.amount === undefined ? null : row.amount, |
| | | organtime: row.organtime || null, |
| | | organchargedesc: row.organchargedesc || null |
| | | }; |
| | | this.addOpen = true; |
| | | this.$nextTick(() => { |
| | | this.$refs.addForm && this.$refs.addForm.clearValidate(); |
| | | }); |
| | | }, |
| | | /** 付款医院选择后同步医院名称 */ |
| | | handleAddHospitalChange(value) { |
| | | const org = this.organizationList.find( |
| | | item => String(item.organizationid) === String(value) |
| | | ); |
| | | this.addForm.hospitalname = org ? org.organizationname : null; |
| | | }, |
| | | /** 修改弹窗:付款医院选择后同步医院名称 */ |
| | | handleEditHospitalChange(value) { |
| | | const org = this.organizationList.find( |
| | | item => String(item.organizationid) === String(value) |
| | | ); |
| | | this.editForm.hospitalname = org ? org.organizationname : null; |
| | | }, |
| | | /** 提交新增 */ |
| | | submitAdd() { |
| | | this.$refs.addForm.validate(valid => { |
| | | if (!valid) { |
| | | return; |
| | | } |
| | | this.addLoading = true; |
| | | addDonorchargeorgan(this.addForm) |
| | | .then(() => { |
| | | this.$modal.msgSuccess("新增成功"); |
| | | this.addOpen = false; |
| | | this.getList(); |
| | | }) |
| | | .finally(() => { |
| | | this.addLoading = false; |
| | | }); |
| | | }); |
| | | }, |
| | | /** 打开修改弹窗(付款医院、付款器官名称、器官状态、备注) */ |
| | | handleEdit(row) { |
| | | this.editForm = { |
| | | id: row.id, |
| | | hospitalno: |
| | | row.hospitalno === null || row.hospitalno === undefined |
| | | ? null |
| | | : String(row.hospitalno), |
| | | hospitalname: row.hospitalname || null, |
| | | payOrganName: row.payOrganName || "", |
| | | caseno: row.caseno || "", |
| | | organState: |
| | | row.organState === null || row.organState === undefined |
| | | ? null |