sinake
5 天以前 df97bab9fcb3e6044ad736cd7483498f61f0feb4
src/views/project/unitCost/organfee/index.vue
@@ -8,33 +8,39 @@
      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="请选择付款医院"
          v-model="hospitalFilter"
          placeholder="请选择回款医院"
          clearable
          filterable
          size="small"
          style="width: 200px"
          @change="handleHospitalFilterChange"
        >
         <el-option label="未填写回款医院" value="__EMPTY__" />
          <el-option
            v-for="item in organizationList"
            :key="item.organizationid"
            :label="item.organizationname"
            :value="item.organizationid"
            :value="String(item.organizationid)"
          />
        </el-select>
      </el-form-item>
      <el-form-item label="捐献者" prop="donorname">
        <el-input
          v-model="queryParams.donorname"
          placeholder="请输入捐献者姓名"
      </el-form-item>
      <el-form-item label="回款状态" prop="payStatus">
        <el-select
          v-model="queryParams.payStatus"
          placeholder="请选择回款状态"
          clearable
          size="small"
          @keyup.enter.native="handleQuery"
        />
          style="width: 140px"
        >
          <el-option label="已付" value="已付" />
          <el-option label="未付" value="未付" />
        </el-select>
      </el-form-item>
      <el-form-item label="报告日期">
      <el-form-item label="捐献日期">
        <el-date-picker
          v-model="donatetimeRange"
          type="daterange"
@@ -46,6 +52,31 @@
          size="small"
          @change="handleDonatetimeChange"
        />
      </el-form-item>
      <el-form-item label="捐献者" prop="donorname">
        <el-input
          v-model="queryParams.donorname"
          placeholder="请输入捐献者姓名"
          clearable
          size="small"
          @keyup.enter.native="handleQuery"
        />
      </el-form-item>
      <el-form-item label="利用状态" prop="organState">
        <el-select
          v-model="queryParams.organState"
          placeholder="请选择器官状态"
          clearable
          size="small"
          style="width: 160px"
        >
          <el-option
            v-for="item in organStateList"
            :key="item.value"
            :label="item.label"
            :value="item.value"
          />
        </el-select>
      </el-form-item>
      <el-form-item>
        <el-button
@@ -62,17 +93,44 @@
    </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"
      >
@@ -80,12 +138,7 @@
          <span>{{ parseTime(scope.row.donatetime, "{y}-{m}-{d}") }}</span>
        </template>
      </el-table-column>
       <el-table-column
        prop="hospitalname"
        label="付款医院"
        width="200"
        align="center"
      />
      <el-table-column
        prop="donorname"
        label="捐献者"
@@ -98,34 +151,59 @@
        width="120"
        align="center"
      />
      <el-table-column
        prop="caseno"
        label="器官分配编号"
        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">
      />
      <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="name" label="受体" width="120" align="center" />
      <el-table-column
        prop="payOrganName"
        label="器官名称-结算"
        width="140"
        align="center"
        show-overflow-tooltip
      />
      <el-table-column
        prop="organchargedesc"
@@ -135,7 +213,7 @@
      />
      <el-table-column
        label="操作"
        width="160"
        width="210"
        align="center"
        fixed="right"
      >
@@ -144,7 +222,6 @@
            type="text"
            icon="el-icon-edit"
            @click="handleEdit(scope.row)"
            v-hasPermi="['project:donorchargeorgan:edit']"
            >修改</el-button
          >
          <el-button
@@ -152,8 +229,13 @@
            type="text"
            icon="el-icon-check"
            @click="handleCharge(scope.row)"
            v-hasPermi="['project:donorchargeorgan:edit']"
            >已收费</el-button
          >
          <el-button
            type="text"
            icon="el-icon-delete"
            @click="handleDelete(scope.row)"
            >删除</el-button
          >
        </template>
      </el-table-column>
@@ -169,41 +251,280 @@
    <!-- 修改器官状态、备注 -->
    <el-dialog
      title="修改器官信息"
      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="name">
              <el-input
                v-model="editForm.name"
                maxlength="50"
                placeholder="请输入受体"
              />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="应收金额" prop="organcharge">
              <el-input-number
                v-model="editForm.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="editForm.amount"
                :min="0"
                :precision="2"
                :controls="false"
                placeholder="请输入实收金额"
                style="width: 100%"
              />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="收款日期" prop="organtime">
              <el-date-picker
                v-model="editForm.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="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>
@@ -214,9 +535,31 @@
<script>
import {
  listDonorchargeorgan,
  updateDonorchargeorgan
  addDonorchargeorgan,
  updateDonorchargeorgan,
  delDonorchargeorgan,
  exportOrganfee
} from "@/api/project/donorcharge";
import { listOrganization } from "@/api/project/organization";
/** 新增器官费用的空表单 */
function emptyAddForm() {
  return {
    infoid: null,
    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",
@@ -224,12 +567,16 @@
    return {
      // 遮罩层
      loading: false,
      // 导出遮罩层
      exportLoading: false,
      // 显示搜索条件
      showSearch: true,
      // 总条数
      total: 0,
      // 器官费用列表
      organfeeList: [],
      // 表格当前选中行
      currentRow: null,
      // 接收医院(机构)下拉数据
      organizationList: [],
      // 报告日期区间
@@ -241,22 +588,51 @@
        { value: "3", label: "库存" },
        { value: "4", label: "失功" },
        { value: "5", label: "直系免除" },
        { value: "6", label: "不良事件" }
        { value: "6", label: "不良事件" },
        { value: "7", label: "科研" }
      ],
      // 修改弹窗
      editOpen: false,
      editLoading: false,
      editForm: {
        id: null,
        hospitalno: null,
        hospitalname: null,
        payOrganName: null,
        caseno: null,
        name: null,
        organcharge: null,
        amount: null,
        organState: null,
        organchargedesc: null
        organchargedesc: null,
        organtime: 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" }
        ]
      },
      // 查询参数
      // 回款医院筛选(__EMPTY__ 表示未填写)
      hospitalFilter: null,
      queryParams: {
        pageNum: 1,
        pageSize: 10,
        hospitalno: null,
        hospitalnoIsNull: false,
        donorname: null,
        organState: null,
        payStatus: null,
        paymentid: null,
        // false:走 queryListBypaymentidIsNull,即未收齐费用的器官
        paymentidIsNotNull: false,
@@ -283,6 +659,53 @@
          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;
@@ -306,15 +729,118 @@
        })
        .catch(() => {});
    },
    /** 打开修改弹窗(器官状态、备注) */
    handleEdit(row) {
      this.editForm = {
        id: row.id,
    /** 删除按钮操作 */
    handleDelete(row) {
      this.$modal
        .confirm('是否确认删除器官费用编号为"' + row.id + '"的数据项?')
        .then(() => delDonorchargeorgan(row.id))
        .then(() => {
          this.$modal.msgSuccess("删除成功");
          if (this.currentRow && this.currentRow.id === row.id) {
            this.currentRow = null;
          }
          this.getList();
        })
        .catch(() => {});
    },
    /** 表格当前行变化 */
    handleCurrentChange(row) {
      this.currentRow = row;
    },
    /** 新增按钮操作:以当前选中的一行为模板,复制除 id 外的字段 */
    handleAdd() {
      const row = this.currentRow;
      if (!row) {
        this.$modal.msgWarning("请先选中一行数据");
        return;
      }
      this.addForm = {
        infoid:
          row.infoid === null || row.infoid === undefined ? null : row.infoid,
        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),
        organchargedesc: row.organchargedesc || ""
        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 || "",
        name: row.name || "",
        organcharge:
          row.organcharge === null || row.organcharge === undefined
            ? null
            : row.organcharge,
        amount:
          row.amount === null || row.amount === undefined ? null : row.amount,
        organState:
          row.organState === null || row.organState === undefined
            ? null
            : String(row.organState),
        organchargedesc: row.organchargedesc || "",
        organtime: row.organtime
      };
      this.editOpen = true;
    },
@@ -353,13 +879,28 @@
    /** 重置按钮操作 */
    resetQuery() {
      this.donatetimeRange = [];
      this.hospitalFilter = null;
      this.queryParams.hospitalnoIsNull = false;
      this.queryParams.hospitalno = null;
      this.queryParams.donorname = null;
      this.queryParams.organState = null;
      this.queryParams.payStatus = null;
      this.queryParams.starttime = null;
      this.queryParams.endtime = null;
      this.queryParams.pageNum = 1;
      this.getList();
    },
    /** 回款医院筛选:__EMPTY__ 表示只查未填写回款医院的数据 */
    handleHospitalFilterChange(value) {
      if (value === "__EMPTY__") {
        this.queryParams.hospitalno = null;
        this.queryParams.hospitalnoIsNull = true;
      } else {
        this.queryParams.hospitalno = value;
        this.queryParams.hospitalnoIsNull = false;
      }
      this.queryParams.pageNum = 1;
    },
    /** 报告日期区间 -> 查询参数,未选择时传 null,避免后端拼出 donatetime >= '' */
    handleDonatetimeChange(val) {
      if (val && val.length === 2) {