<template>
  <el-container>
    <el-header height="50px">
      <el-tag effect="dark" size="medium">患者姓名: {{ patient.name }}</el-tag>
      <el-tag effect="dark" size="medium">住院号: {{ patient.inpatientNo }}</el-tag>
      <el-tag effect="dark" size="medium">床号: {{ patient.bedNo }}</el-tag>
      <el-tag effect="dark" size="medium">住院次数: {{ patient.admissTimes }}</el-tag>
      <el-tag effect="dark" size="medium">性别: {{ cptSex(patient.sex) }}</el-tag>
      住院号：
      <el-input v-model="inpatientNo" style="width: 100px" clearable placeholder="住院号"></el-input>
      <el-button type="primary" icon="el-icon-search" @click="chaXunHuanZheXinXi">查询患者信息</el-button>
      <el-button type="danger" style="margin-left: 20px" icon="el-icon-close" @click="guanBiDialog">关闭</el-button>
      <el-button type="warning" style="margin-left: 20px" @click="chaoZuoZhiNan = true">操作指南</el-button>
    </el-header>
    <el-container>
      <el-main>
        <el-dialog v-model="chaoZuoZhiNan" title="操作指南">
          <el-collapse v-model="activeName" accordion>
            <el-collapse-item title="一、搜索" name="1">
              <div>1、搜索费用：项目名称一栏，可以根据编码、名称 、拼音首字母缩写查找（推荐使用编码查询这样会快一些，可选）</div>
              <div>2、录入日期：项目的录入时间范围（可选）， 日期排序-降序从大到小排序，升序-从小到大排序</div>
              <div>3、费用类型：你需要查找的费用是，项目还是药品（请不要选择项目后一直搜索药品，这样是找不到的 ヽ(ー_ー)ノ）</div>
              <div>4、录入类型：该费用是怎么产生，护士录入，医嘱，医技</div>
              <div>
                5、费用状态：未退-代表该费用没有被退，已退-代表费用是退费数据，被退-代表那些正的被退了
                <span style="color: red">（该条件只对在本系统中有效,如果无效请点击退费匹配 (退费匹配就在本页面的关闭旁边)，或选择全部）</span><br/>
              </div>
              <div>6、点击查询即可查询费用（如提示没有数据，请检查搜索的条件）</div>
            </el-collapse-item>
            <el-collapse-item title=" 二、退费" name="2"> 1、选中表格中的多选按钮（小框框），然后点击退费即可，请仔细检查</el-collapse-item>
            <el-collapse-item title=" 三、撤销退费" name="3">
              <div>1、如果退费退错了，可以点击费用后面的撤销按钮，前提是该费用没有被上传到医保，如果已经上传了且你一定要把这一条费用完全删除，那请先要医保科撤销上传。</div>
              <div>2、如果需要撤销退费的权限，请向信息科，提供工号，该权限只能提供给护士长。</div>
            </el-collapse-item>
            <el-collapse-item title="  四、录入模板" name="4">
              <div>1、模板：进入系统会查询出您所在科室的模板（如果没有看见模板，请在个人中心中查看你的科室，如果不对请人资进行调整）</div>
              <div>2、取模板：点击模板的名字后，出现一个小表格，然后点击小表格中的多选按钮，你所选择的费用会显示在录入信息的表格中（无法重复添加）</div>
              <div>3、存模板：请在录入信息中添加你需要存的费用信息，然后点击存模板，会弹出一个对话框，输入名称，点击保存即可</div>
              <div>4、修改：取一个一模一样名称的模板，即可修改，前提是这个模板是你创建的。</div>
              <div>5、删除：点击模板名称后面的删除。</div>
            </el-collapse-item>
            <el-collapse-item title="五、录入费用" name="5">
              <div>1、请选择需要录入的费用（如果模板中没有，请点击新增，然后进行搜索，可根据 名称、编码、首字母缩写 搜索，然后在下拉框中点击对应的费用）</div>
              <div>2、确认这些费用后点击保存即可</div>
              <div>
                3、修改执行科室，如果有费用需要录入到，别的科室可以点击表格中的执行科室修改，也可以一键修改，就在新增右边，在下拉框（这个可以根据中文来搜索）
                选择对应的科室后点击修改执行科室。
              </div>
            </el-collapse-item>
          </el-collapse>
        </el-dialog>
        <el-tabs v-model="xmlrTabs">
          <el-tab-pane label="已录入项目" name="ylrxm">
            项目名称：
            <el-select
                v-model="patient.chargeCode"
                remote
                filterable
                clearable
                @blur="patient.chargeCode = $event.target.value.trim()"
                :remote-method="remoteMethodChargeCode"
            >
              <el-option v-for="item in chargeCodeNameData" :key="item.code" :label="item.name" :value="item.code">
                <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
                <el-divider direction="vertical"></el-divider>
                <span>{{ item.name }}</span>
              </el-option>
            </el-select>
            录入日期：
            <el-date-picker
                type="daterange"
                v-model="dateRange"
                placeholder="选择日期"
                style="width: 280px"
                range-separator="至"
                start-placeholder="开始日期"
                end-placeholder="结束日期"
                :shortcuts="shortcuts"
            ></el-date-picker>
            <el-button
                @click="riQiPaiXu === 'DESC' ? (riQiPaiXu = 'ASC') : (riQiPaiXu = 'DESC')"
                type="success"
                :icon="riQiPaiXu === 'DESC' ? 'el-icon-caret-bottom' : 'el-icon-caret-top'"
            >{{ riQiPaiXu === 'DESC' ? '日期降序' : '日期升序' }}
            </el-button
            >
            <el-select style="width: 70px" v-model="feiYongLeiXingCode">
              <el-option v-for="item in feiYongLeiXing" :key="item.code" :label="item.name" :value="item.code">
                <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
                <el-divider direction="vertical"></el-divider>
                <span>{{ item.name }}</span>
              </el-option>
            </el-select>
            <el-select v-model="patient.orderNo" style="width: 70px">
              <el-option v-for="item in yiZhuTuiFeiLeiXing" :key="item.code" :label="item.name" :value="item.code">
                <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
                <el-divider direction="vertical"></el-divider>
                <span>{{ item.name }}</span>
              </el-option>
            </el-select>
            <el-select v-model="patient.tuiFeiFlag" style="width: 70px">
              <el-option v-for="item in tuiFeiLeiXin" :key="item.code" :label="item.name" :value="item.code">
                <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
                <el-divider direction="vertical"></el-divider>
                <span>{{ item.name }}</span>
              </el-option>
            </el-select>
            <el-button type="primary" @click="queryFeiYong" icon="el-icon-search">查询</el-button>
            <el-button type="danger" @click="xiangMuTuiFeiClick" icon="el-icon-delete-solid">退费</el-button>
            <el-table :height="tableHeight" @selection-change="handleSelectionChange" :data="cptTableDataHuanZheFeiYong"
                      stripe highlight-current-row class="eltable">
              <el-table-column type="selection" style="width: 100px"></el-table-column>
              <el-table-column label="流水号" prop="detailSn" width="70px"></el-table-column>
              <el-table-column label="医嘱号" prop="orderNo" width="70px"></el-table-column>
              <el-table-column prop="chargeDate" label="录入日期" width="70px"></el-table-column>
              <el-table-column prop="chargeCodeMx" label="项目编码"></el-table-column>
              <el-table-column prop="chargeName" label="项目名称"></el-table-column>
              <el-table-column prop="drugname" label="药品名称" v-if="feiYongLeiXingCode === 1"></el-table-column>
              <el-table-column prop="execDept" label="执行科室"></el-table-column>
              <el-table-column prop="deptCode" label="申请科室"></el-table-column>
              <el-table-column prop="chargeFee" label="金额"></el-table-column>
              <el-table-column label="数量" prop="chargeAmount"></el-table-column>
              <el-table-column label="状态" prop="chargeStatus">
                <template #default="scope">
                  {{ costState(scope.row.chargeStatus) }}
                </template>
              </el-table-column>
              <el-table-column label="录入人" prop="opName"></el-table-column>
              <el-table-column label="账单码" prop="billItemName"></el-table-column>
              <el-table-column label="是否退费" prop="tuiFeiFlag">
                <template #default="scope">
                  <span v-if="scope.row.oriDetailSn === -1" style="color: red">已退费 <br/> </span>
                  <span v-if="scope.row.oriDetailSn > 0"
                  ><span style="color: #e6a23c">退费数据</span> <br/>
                    <span style="color: teal">
                      原流水号为 <br/>
                      【 {{ scope.row.oriDetailSn }} 】
                    </span>
                  </span>
                </template>
              </el-table-column>
              <el-table-column label="撤销退费" v-if="quanXian.indexOf(1) > -1 || quanXian.indexOf(35) > -1">
                <template #default="scope">
                  <el-popconfirm
                      confirm-button-text="确认"
                      cancel-button-text="取消"
                      icon="el-icon-info"
                      iconColor="red"
                      title="是否删除该数据"
                      v-if="scope.row.oriDetailSn != -1 && scope.row.transFlagYb === '0' && (quanXian.indexOf(1) > -1 || quanXian.indexOf(35) > -1)"
                      @confirm="cheXiaoTuiFeiClick(scope.$index, scope.row)"
                  >
                    <template #reference>
                      <el-button type="danger">撤销</el-button>
                    </template>
                  </el-popconfirm>
                </template>
              </el-table-column>
            </el-table>
            <el-pagination
                @size-change="handleSizeChange"
                @current-change="handleCurrentChange"
                :current-page="patient.currentPage"
                :page-sizes="[20, 30, 40, 50]"
                :page-size="patient.pageSize"
                layout="total, sizes, prev, pager, next, jumper"
                :total="total"
                style="margin-top: 5px"
            ></el-pagination>
          </el-tab-pane>
          <!-- 项目录入 -->
          <el-tab-pane label="项目录入" name="xmlr" v-if="panDuanSFTongGuoBingShiJinRu">
            <el-row>
              <el-col :span="3">
                <HuoQuMuBan @selectionFeiYong="xuanZeXiangMuTable"></HuoQuMuBan>
              </el-col>
              <el-col :span="20" :offset="1">
                <el-row>
                  <el-col :span="24" style="margin-top: 10px">
                    <el-button type="warning" icon="el-icon-star-off" @click="baoCunMuBanDialog = true">存模板</el-button>
                    <el-button type="primary" @click="shangChuanXiangMu" icon="el-icon-upload">保存</el-button>
                    <el-button type="success" icon="el-icon-plus" @click="xinZhengXiangMuDialog = true">新增</el-button>
                    <el-select style="width: 180px; margin: 0px 10px 0px 10px" v-model="zhiXingKeShi" filterable>
                      <el-option v-for="item in deptData" :key="item.code" :label="item.name" :value="item.code">
                        <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
                        <el-divider direction="vertical"></el-divider>
                        <span>{{ item.name }}</span></el-option
                      >
                    </el-select>
                    <el-button type="warning" icon="el-icon-edit" @click="xieGaiZhiXingKeShi">修改执行科室</el-button>
                  </el-col>
                  <el-col :span="24">
                    <!-- 这个下面查看录入的项目 -->
                    <el-table :data="muBanNeiRongData" :height="tableHeight - 27" class="eltable"
                              style="margin-top: 10px" stripe highlight-current-row>
                      <el-table-column label="录入信息">
                        <el-table-column label="录入时间">
                          <template #default>
                            {{ getDatetime(new Date()) }}
                          </template>
                        </el-table-column>
                        <el-table-column label="项目编码" prop="chargeCodeMx"></el-table-column>
                        <el-table-column label="名称" prop="chargeName"></el-table-column>
                        <el-table-column label="执行科室" prop="deptCode">
                          <template #default="scope">
                            <el-select style="width: 90%" v-model="scope.row.deptCode" filterable>
                              <el-option v-for="item in deptData" :key="item.code" :label="item.name"
                                         :value="item.code">
                                <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
                                <el-divider direction="vertical"></el-divider>
                                <span>{{ item.name }}</span></el-option
                              >
                            </el-select>
                          </template>
                        </el-table-column>
                        <el-table-column label="单价" prop="chargeAmount"></el-table-column>
                        <el-table-column label="数量" prop="amount" width="130">
                          <template #default="scope">
                            <!--precision 限制输入的精度 0 就是不带任何一位小数点  -->
                            <el-input-number v-model="scope.row.amount" style="width: 120px" :min="0"
                                             :precision="1"></el-input-number>
                          </template>
                        </el-table-column>
                      </el-table-column>
                      <el-table-column label="金额">
                        <template #default="scope">
                          {{ (scope.row.chargeAmount * scope.row.amount).toFixed(2) }}
                        </template>
                      </el-table-column>
                      <el-table-column label="账单码" prop="billItemName"></el-table-column>
                      <el-table-column label="操作">
                        <template #default="scope">
                          <el-button type="danger" @click="shanChuXiangMuClick(scope.$index)">删除</el-button>
                        </template>
                      </el-table-column>
                    </el-table>
                    <el-tag> 项目总价：{{ xiangMuZongJia }}</el-tag>
                  </el-col>
                </el-row>
              </el-col>
            </el-row>
          </el-tab-pane>
        </el-tabs>
        <el-dialog title="新增项目" v-model="xinZhengXiangMuDialog" :width="1500">
          <el-row>
            <el-col :span="24">
              搜索：
              <el-select v-model="chargePyCode" remote filterable clearable @change="getDanGeXiangMu"
                         default-first-option :remote-method="rmChargePyCode">
                <el-option
                    v-for="item in xiangMuData.slice((danGeXiangMuCurrentPage - 1) * 20, danGeXiangMuCurrentPage * 20)"
                    :key="item.chargeCode"
                    :label="item.chargeName"
                    :value="item.chargeCode"
                >
                  <span style="color: #8492a6; font-size: 12px">{{ item.chargeCode }}</span>
                  <el-divider direction="vertical"></el-divider>
                  <span> {{ item.chargeName }}</span>
                  <el-divider direction="vertical"></el-divider>
                  <span style="color: red"> {{ item.ybComment }}</span>
                  <el-divider direction="vertical"></el-divider>
                  <span style="color: #e6a23c"> {{ item.chargeAmount }} 元</span>
                </el-option>
                <el-pagination
                    @current-change="danGeXiangMuCurrentChange"
                    :current-page="danGeXiangMuCurrentPage"
                    :page-size="20"
                    layout=" prev, pager, next,total"
                    :total="xiangMuData.length"
                    style="margin-top: 5px"
                    :pager-count="5"
                    small
                ></el-pagination>
              </el-select>
              <el-button type="success" @click="danGeXiangMuBaoCun">保存</el-button>
            </el-col>
            <el-col :span="24">
              <el-table :data="danGeLuRuXiangMu" class="eltable">
                <el-table-column label="项目代码" prop="chargeCodeMx"></el-table-column>
                <el-table-column label="项目名称" prop="chargeName"></el-table-column>
                <el-table-column label="规格" prop="spec"></el-table-column>
                <el-table-column label="执行科室" prop="deptCode">
                  <template #default="scope">
                    <el-select style="width: 90%" v-model="scope.row.deptCode" filterable>
                      <el-option v-for="item in deptData" :key="item.code" :label="item.name" :value="item.code">
                        <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
                        <el-divider direction="vertical"></el-divider>
                        <span>{{ item.name }}</span></el-option
                      >
                    </el-select>
                  </template>
                </el-table-column
                >
                <el-table-column label="单价" prop="chargeAmount"></el-table-column>
                <el-table-column label="数量" prop="amount">
                  <template #default="scope">
                    <el-input-number v-model="scope.row.amount" :min="1" :precision="1"></el-input-number>
                  </template>
                </el-table-column>
                <el-table-column label="金额">
                  <template #default="scope">
                    {{ (scope.row.chargeAmount * scope.row.amount).toFixed(2) }}
                  </template>
                </el-table-column>
                <el-table-column label="账单码" prop="billItemName"></el-table-column>
              </el-table>
            </el-col>
          </el-row>
        </el-dialog>
        <el-dialog title="保存模板" v-model="baoCunMuBanDialog">
          <el-row>
            <el-col :span="24"> 模板名称：
              <el-input v-model="cunMuBanPojo.name" maxlength="15" @blur="zhuanPinYin" show-word-limit></el-input>
            </el-col>
            <el-col :span="12"> 拼音码：
              <el-input v-model="cunMuBanPojo.pyCode" maxlength="8" show-word-limit></el-input>
            </el-col>
            <el-col :span="12"> 五笔码：
              <el-input v-model="cunMuBanPojo.dcode" maxlength="8" show-word-limit></el-input>
            </el-col>
            <el-col :span="12"> 创建科室：
              <el-input v-model="cunMuBanPojo.dept" disabled></el-input>
            </el-col>
            <el-col :span="12">
              <el-button style="margin-top: 10px" icon="el-icon-upload" type="primary" @click="baoCunMuBan">保存
              </el-button>
            </el-col>
          </el-row>
        </el-dialog>
      </el-main>
    </el-container>
  </el-container>
</template>

<script>
import {computed, onMounted, ref, watch} from 'vue'
import store from '@/store'
import {cptSex} from '@/utils/computed'
import {shortcuts} from '@/data/shortcuts'
import {
  getChargeCode,
  getHuanZheFeiYong,
  getMuBan,
  getMuBanXinXi,
  xiangMuTuiFei,
  queryDanGeXiangMu,
  xiangMuFeiYongShangChuan,
  shangChuanMuBan,
  shanChuMuBan,
  getDept,
  getPyCode,
  cheXiaoTuiFei,
} from '../../api/yibao/xiang-mu-lu-ru'
import {ElMessage, ElMessageBox} from 'element-plus'
import {costState} from '@/utils/computed'
import {getDatetime} from '@/utils/date'
import {clone} from '@/utils/clone'
import {getPatientInfo} from '@/api/yibao/patient'
import {yiZhuTuiFeiLeiXing, feiYongLeiXing, tuiFeiLeiXin} from '@/data/index'
import HuoQuMuBan from '@/components/med-tec-mod/HuoQuMuBan.vue'
import {getDateRangeFormatDate} from '@/utils/date'
import {baseinfo} from '@/data/inpatient'

export default {
  components: {HuoQuMuBan},
  props: {
    init: {
      type: Number,
      default: -1,
    },
  },
  setup(props, ctx) {
    const windowSize = store.state.app.windowSize
    const tableHeight = windowSize.h - 170
    const chaoZuoZhiNan = ref(true)

    // 默认选中已录入项目
    const xmlrTabs = ref('ylrxm')
    const inpatientNo = ref('')
    const zhiXingKeShi = ref('')
    const dateRange = ref(shortcuts[2].value)
    // DESC 降 ASC 升
    const riQiPaiXu = ref('DESC')

    const quanXian = store.state.user.info.roles
    const activeName = ref('1')

    const feiYongLeiXingCode = ref(0)

    /**
     * 录入费用 表格
     */
    const tableDataHuanZheFeiYong = ref([])

    // 项目录入模板数据
    const muBanData = ref([])
    // 获取全部科室
    const deptData = ref([])

    // 患者信息
    const patient = ref({})
    /**
     * 监听 xmlrTabs 如果变化了 就加载 模板数据 如果模板数据已经存在了就不加载
     */
    watch(xmlrTabs, (newProps, oldProps) => {
      if (muBanData.value.length === 0) {
        getMuBan(store.state.user.info.deptCode).then((res) => {
          muBanData.value = res
        })
        getDept().then((res) => {
          deptData.value = res
        })
      }
      // 在这里只是获取科室的姓名
      setTimeout(() => {
        deptData.value.forEach((item) => {
          if (item.code === store.state.user.info.deptCode) {
            cunMuBanPojo.value.dept = item.name
          }
        })
      }, 100)
    })

    /**
     * 判断这个操作员是否可以退费
     */
    const panDuanSFTongGuoBingShiJinRu = ref(false)

    // 弹框 输入住院号
    const jinRuPanDuanSFXieDaiHuanZheXinXi = () => {
      ElMessageBox.prompt('请输入患者住院号', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        inputPattern: /\S/,
        inputErrorMessage: '患者住院号不能为空 (∩•̀ω•́)⊃-*⋆',
        type: 'warning',
      })
          .then(({value}) => {
            inpatientNo.value = value
            chaXunHuanZheXinXi()
          })
          .catch(() => {
            guanBiDialog()
          })
    }

    /**
     * 这个是 用户没有选择患者 就进来执行的
     */
    const chaXunHuanZheXinXi = () => {
      getPatientInfo(inpatientNo.value)
          .then((res) => {
            patient.value = res
            patient.value.currentPage = 1
            patient.value.pageSize = 40
            patient.value.total = 0
            patient.value.orderNo = 0
            patient.value.deptCode = store.state.user.info.deptCode
            queryFeiYong()
            if (patient.value.ward === store.state.user.info.deptCode) {
              panDuanSFTongGuoBingShiJinRu.value = true
            } else {
              xmlrTabs.value = 'ylrxm'
              panDuanSFTongGuoBingShiJinRu.value = false
            }
          })
          .catch(() => {
            patient.value = {}
            jinRuPanDuanSFXieDaiHuanZheXinXi()
          })
    }

    const total = ref(0)
    /**
     * 查询
     */
    const queryFeiYong = () => {
      let dateR = getDateRangeFormatDate(dateRange.value)
      patient.value.startTime = dateR.startTime
      patient.value.endTime = dateR.endTime
      patient.value.riQiPaiXu = riQiPaiXu.value
      patient.value.feiYongLeiXingCode = feiYongLeiXingCode.value
      patient.value.currentPage = 1
      patient.value.total = 0
      getHuanZheFeiYong(patient.value)
          .then((res) => {
            tableDataHuanZheFeiYong.value = res
            cptTableDataHuanZheFeiYong.value = res.records
            total.value = res.total
            if (patient.value.admissWard === store.state.user.info.deptCode) {
              panDuanSFTongGuoBingShiJinRu.value = true
            }
          })
          .catch(() => {
            tableDataHuanZheFeiYong.value = []
            cptTableDataHuanZheFeiYong.value = []
            patient.value.total = 0
          })
    }

    const handleQueryFeiYong = () => {
      let dateR = getDateRangeFormatDate(dateRange.value)
      patient.value.startTime = dateR.startTime
      patient.value.endTime = dateR.endTime
      patient.value.riQiPaiXu = riQiPaiXu.value
      patient.value.feiYongLeiXingCode = feiYongLeiXingCode.value
      patient.value.total = total.value
      getHuanZheFeiYong(patient.value)
          .then((res) => {
            tableDataHuanZheFeiYong.value = res
            cptTableDataHuanZheFeiYong.value = res.records
            if (patient.value.admissWard === store.state.user.info.deptCode) {
              panDuanSFTongGuoBingShiJinRu.value = true
            }
          })
          .catch(() => {
            tableDataHuanZheFeiYong.value = []
            cptTableDataHuanZheFeiYong.value = []
            patient.value.total = 0
          })
    }

    /**
     * 分页
     */
    const handleSizeChange = (val) => {
      patient.value.pageSize = val
      handleQueryFeiYong()
    }

    const handleCurrentChange = (val) => {
      patient.value.currentPage = val
      handleQueryFeiYong()
    }
    /**
     * 获取项目名称
     */
    const chargeCodeNameData = ref([])

    /**
     * 远程搜索
     */
    const remoteMethodChargeCode = (val) => {
      if (val.length >= 2) {
        getChargeCode(val).then((res) => {
          chargeCodeNameData.value = res
        })
      }
    }
    /**
     * 获取多选框的值
     */
    const handleSelectionChange = (val) => {
      patient.value.list = val
    }

    /** */
    const cptTableDataHuanZheFeiYong = ref([])

    /**
     *  项目退费
     */
    const xiangMuTuiFeiClick = () => {
      if (typeof patient.value.list !== 'undefined') {
        let chargeFee = 0
        let chargeAmount = 0
        for (let i = 0; i < patient.value.list.length; i++) {
          chargeAmount += patient.value.list[i].chargeAmount
          chargeFee += patient.value.list[i].chargeFee
        }
        if (patient.value.list.length > 0) {
          ElMessageBox.confirm(
              `退费数量为：<span style='color:red'>【${chargeAmount}】</span> ，总价格为：<span style='color:#E6A23C'>【${chargeFee.toFixed(2)}】</span>`,
              '请认真核对',
              {
                confirmButtonText: '确定',
                cancelButtonText: '取消',
                type: 'warning',
                dangerouslyUseHTMLString: true,
              }
          )
              .then(() => {
                xiangMuTuiFei(patient.value).then((res) => {
                  queryFeiYong()
                })
              })
              .catch(() => {
              })
        } else {
          ElMessage.warning({
            message: '请先选择退费数据',
            showClose: true,
          })
        }
      } else {
        ElMessage.warning({
          message: '请先选择退费数据',
          showClose: true,
        })
      }
    }

    const cheXiaoTuiFeiClick = (index, row) => {
      cheXiaoTuiFei(row.inpatientNo, row.admissTimes, row.ledgerSn, row.detailSn).then(() => {
      })
    }

    //////////////////////////////////// 以上全部是 已录入项目 //////////////////////////////////////////////////////////////////////////////

    /**
     * 点击获取模板信息
     */
    const muBanXiangQing = ref([])
    const getMuBanXinXiClick = (row) => {
      getMuBanXinXi(row.name, row.opIdCode).then((res) => {
        muBanXiangQing.value = res
      })
    }

    /**
     * 获取项目模板详情的数据
     */
    const muBanNeiRongData = ref([])
    // 保存 code 不要重复添加
    let muBanCode = []
    const xuanZeXiangMuTable = (param) => {
      let val = param.val
      for (let i = 0; i < val.length; i++) {
        let code = val[i].chargeCodeMx
        if (muBanCode.indexOf(code) === -1) {
          muBanCode.push(code)
          val[i].deptCode = patient.value.zkWard
          muBanNeiRongData.value.push(val[i])
        }
      }
    }

    const muBanCurrentPage = ref(1)
    const muBanPageSize = ref(10)

    const muBanHandleCurrentChange = (val) => {
      muBanCurrentPage.value = val
    }

    /**
     * 删除项目
     */
    const shanChuXiangMuClick = (index) => {
      muBanNeiRongData.value.splice(index, 1)
      muBanCode.splice(index, 1)
    }
    /**
     * 获取项目的总价
     */
    const xiangMuZongJia = computed(() => {
      let sum = 0
      for (let i = 0; i < muBanNeiRongData.value.length; i++) {
        sum += muBanNeiRongData.value[i].chargeAmount * muBanNeiRongData.value[i].amount
      }
      return sum.toFixed(2)
    })

    //以下全部是  新增项目 对话框功能

    /**
     * 新增项目
     */
    const xinZhengXiangMuDialog = ref(false)

    // 项目拼音的code
    const chargePyCode = ref('')
    // 项目数据
    const xiangMuData = ref([])

    /**
     * 远程搜索
     */
    const rmChargePyCode = (val) => {
      if (val.length >= 2) {
        queryDanGeXiangMu(val, 0).then((res) => {
          xiangMuData.value = res
        })
      }
    }
    const danGeXiangMuCurrentPage = ref(1)

    const danGeXiangMuCurrentChange = (val) => {
      danGeXiangMuCurrentPage.value = val
    }
    /**
     * 用来获取新增对画框中选择的项目
     */
    const danGeLuRuXiangMu = ref([])

    const getDanGeXiangMu = () => {
      xiangMuData.value.filter((item) => {
        if (item.chargeCode === chargePyCode.value) {
          item.deptCode = patient.value.zkWard
          danGeLuRuXiangMu.value.push(item)
        }
      })
    }

    /**
     * 单个项目保存
     */
    const danGeXiangMuBaoCun = () => {
      for (let i = 0; i < muBanNeiRongData.value.length; i++) {
        if (muBanNeiRongData.value[i].chargeCodeMx === danGeLuRuXiangMu.value[0].chargeCodeMx) {
          ElMessage.error({
            message: '已存在相同项目请勿重复添加',
            showClose: true,
          })
          return
        }
      }
      muBanCode.push(clone(danGeLuRuXiangMu.value[0].chargeCodeMx))
      muBanNeiRongData.value.push(clone(danGeLuRuXiangMu.value[0]))
      danGeLuRuXiangMu.value = []
      chargePyCode.value = ''
    }
    //以上全部是  新增项目 对话框功能

    // 下面就是上传 项目
    const shangChuanXiangMu = () => {
      if (muBanNeiRongData.value.length === 0) {
        ElMessage.error({
          message: '请先选择需要上传的费用',
          showClose: true,
        })
        return
      }
      for (let i = 0; i < muBanNeiRongData.value.length; i++) {
        if (muBanNeiRongData.value[i].deptCode === '') {
          ElMessage.error({
            message: '【' + muBanNeiRongData.value[i].chargeName + '】的执行科室为空',
            showClose: true,
          })
          return
        }
      }
      let shangChuanFeiYong = {
        inpatientNo: patient.value.inpatientNo,
        admissTimes: patient.value.admissTimes,
        ledgerSn: patient.value.ledgerSn,
        dept: patient.value.admissDept,
        zySerialNo: patient.value.zySerialNo,
        ward: patient.value.zkWard,
        referPhysician: patient.value.referPhysician,
        list: muBanNeiRongData.value,
        orderNo: 0,
      }
      // 在此处上传
      ElMessageBox.confirm('共上传【' + muBanNeiRongData.value.length + '】条', '请认真核对', {
        cancelButtonText: '取消',
        confirmButtonText: '确定',
      })
          .then(() => {
            xiangMuFeiYongShangChuan(shangChuanFeiYong).then(() => {
              muBanNeiRongData.value = []
              muBanCode = []
            })
          })
          .catch(() => {
          })
    }

    // 上面就是上传 项目

    // 下面就是保存的模板信息
    const cunMuBanPojo = ref({
      pyCode: '',
      dcode: '',
      name: '',
      paiXu: '',
      dept: '',
      deptCode: store.state.user.info.deptCode,
      list: [],
    })

    const baoCunMuBanDialog = ref(false)
    const baoCunMuBan = () => {
      if (muBanNeiRongData.value.length === 0) {
        ElMessage.error({
          message: '请先选择项目',
          showClose: true,
        })
        return
      }
      if (cunMuBanPojo.value.name === '' || cunMuBanPojo.value.pyCode === '' || cunMuBanPojo.value.dcode === '') {
        ElMessage.error({
          message: '模板名称，拼音码，五笔码不能为空',
          showClose: true,
        })
        return
      }
      cunMuBanPojo.value.list = clone(muBanNeiRongData.value)
      // 开始上传
      shangChuanMuBan(cunMuBanPojo.value).then(() => {
        cunMuBanPojo.value = {}
      })
    }

    // 获取到保存模板的拼音码和五笔码
    const zhuanPinYin = () => {
      getPyCode(cunMuBanPojo.value.name).then((res) => {
        cunMuBanPojo.value.pyCode = res.pyCode
        cunMuBanPojo.value.dcode = res.wbCode
      })
    }

    // 上面就是保存的模板信息

    /** 关闭 对话框 */
    const guanBiDialog = () => {
      ctx.emit('close-xmlr')
    }

    watch(
        () => props.init,
        () => {
          if (!baseinfo().inpatientNo) {
            jinRuPanDuanSFXieDaiHuanZheXinXi()
          } else {
            patient.value = clone(baseinfo())
            patient.value.currentPage = 1
            patient.value.pageSize = 40
            patient.value.tuiFeiFlag = 0
            patient.value.total = 0
            patient.value.orderNo = 0
            patient.value.deptCode = store.state.user.info.deptCode
            zhiXingKeShi.value = patient.value.zkWard
            panDuanSFTongGuoBingShiJinRu.value = true
            queryFeiYong()
          }
        }
    )

    onMounted(() => {
      if (!baseinfo().inpatientNo) {
        patient.value.currentPage = 1
        patient.value.pageSize = 40
        patient.value.total = 0
        patient.value.tuiFeiFlag = 0
        patient.value.orderNo = 0
        patient.value.deptCode = store.state.user.info.deptCode
        zhiXingKeShi.value = patient.value.zkWard
        jinRuPanDuanSFXieDaiHuanZheXinXi()
      } else {
        patient.value = clone(baseinfo())
        patient.value.currentPage = 1
        patient.value.pageSize = 40
        patient.value.total = 0
        patient.value.tuiFeiFlag = 0
        patient.value.orderNo = 0
        patient.value.deptCode = store.state.user.info.deptCode
        panDuanSFTongGuoBingShiJinRu.value = true
        zhiXingKeShi.value = patient.value.zkWard
        queryFeiYong()
      }
    })

    const shanChuMuBanClick = (index, data) => {
      if (data.opIdCode !== store.state.user.info.code) {
        ElMessageBox.confirm('该模板非本人创建是否强制删除', '提示', {
          type: 'warning',
        })
            .then(() => {
              shanChuMuBan(data.name, data.opIdCode).then((res) => {
                muBanData.value.splice(index, 1)
              })
            })
            .catch(() => {
            })
      } else {
        shanChuMuBan(data.name, data.opIdCode).then((res) => {
          muBanData.value.splice(index, 1)
        })
      }
    }

    const xieGaiZhiXingKeShi = () => {
      for (let i = 0; i < muBanNeiRongData.value.length; i++) {
        muBanNeiRongData.value[i].deptCode = zhiXingKeShi.value
      }
    }

    return {
      patient,
      cptSex,
      xmlrTabs,
      tableHeight,
      tableDataHuanZheFeiYong,
      handleSizeChange,
      handleCurrentChange,
      chargeCodeNameData,
      remoteMethodChargeCode,
      handleSelectionChange,
      xiangMuTuiFeiClick,
      costState,
      muBanData,
      getMuBanXinXiClick,
      muBanXiangQing,
      xuanZeXiangMuTable,
      muBanNeiRongData,
      getDatetime,
      shanChuXiangMuClick,
      deptData,
      xinZhengXiangMuDialog,
      chargePyCode,
      rmChargePyCode,
      xiangMuData,
      xiangMuZongJia,
      danGeLuRuXiangMu,
      getDanGeXiangMu,
      danGeXiangMuBaoCun,
      shangChuanXiangMu,
      baoCunMuBan,
      baoCunMuBanDialog,
      cunMuBanPojo,
      zhuanPinYin,
      muBanCurrentPage,
      muBanPageSize,
      muBanHandleCurrentChange,
      cptTableDataHuanZheFeiYong,
      guanBiDialog,
      danGeXiangMuCurrentPage,
      danGeXiangMuCurrentChange,
      inpatientNo,
      chaXunHuanZheXinXi,
      panDuanSFTongGuoBingShiJinRu,
      queryFeiYong,
      shanChuMuBanClick,
      yiZhuTuiFeiLeiXing,
      zhiXingKeShi,
      xieGaiZhiXingKeShi,
      dateRange,
      shortcuts,
      riQiPaiXu,
      feiYongLeiXingCode,
      feiYongLeiXing,
      tuiFeiLeiXin,
      total,
      cheXiaoTuiFeiClick,
      quanXian,
      chaoZuoZhiNan,
      activeName,
    }
  },
}
</script>

<style></style>
