<template>
  <div class="app-container">
    <el-form
      :model="queryParams"
      ref="queryRef"
      :inline="true"
      v-show="showSearch"
      label-width="90px"
    >
      <el-form-item label="查询日期：">
        <el-date-picker
          v-model="queryTime"
          type="daterange"
          start-placeholder="开始日期"
          end-placeholder="结束日期"
          style="width: 300px; margin-right: 20px"
          @change="getValue"
          value-format="YYYY-MM-DD"
        />
      </el-form-item>
      <el-form-item label="费用性质：">
        <el-select
          v-model="contractNo"
          placeholder="费用性质"
          clearable
          @change="getValue"
          style="width: 150px; margin-right: 30px"
        >
          <el-option
            v-for="item in contractList"
            :key="item.busNo"
            :label="item.contractName"
            :value="item.busNo"
          />
        </el-select>
      </el-form-item>
      <el-form-item label="经办人：">
        <el-select
          v-model="entererId"
          placeholder="经办人"
          clearable
          filterable
          @change="
            (value) => {
              if (!value) {
                curUserInfo = {};
              }
              getValue();
            }
          "
          style="width: 150px; margin-right: 30px"
        >
          <el-option
            v-for="item in userList"
            :key="item.practitionerId"
            :label="item.nickName"
            :value="item.practitionerId"
            @click="
              () => {
                curUserInfo = item;
              }
            "
          />
        </el-select>
      </el-form-item>

      <el-button type="primary" plain icon="Search" @click="getValue">查询</el-button>
      <el-button type="primary" plain icon="Printer" @click="print">打印</el-button>
    </el-form>
    <div v-loading="loading" style="width: 1300px">
      <div style="text-align: center">
        <h2>门诊收费日结单</h2>
      </div>
      <el-row
        :gutter="5"
        outpatientNo="mb8"
        style="
          margin: 20px 0;
          display: flex;
          align-items: center;
          justify-content: flex-start;
          padding: 0 20px;
        "
      >
        <el-col :span="4">
          <span class="label">经办人姓名：</span>
          <span class="value"> {{ curUserInfo.nickName ? curUserInfo.nickName : '全部' }}</span>
        </el-col>
        <el-col :span="4">
          <span class="label">科室：</span>
          <span class="value">{{ curUserInfo.orgId_dictText }}</span>
        </el-col>
        <el-col :span="5">
          <span class="label">机构：</span>
          <span class="value">{{ userStore.hospitalName }}</span>
        </el-col>
        <el-col :span="7">
          <span class="label">时间：</span>
          <span class="value"> {{ queryTime[0] + '~' + queryTime[1] }} </span>
        </el-col>
      </el-row>
      <div class="divider"></div>
      <el-row
        :gutter="10"
        outpatientNo="mb8"
        style="
          margin: 20px 0;
          display: flex;
          align-items: center;
          justify-content: flex-start;
          padding: 0 20px;
        "
      >
        <el-col
          v-for="(item, index) in fin_type_code"
          :span="5"
          :key="index"
          style="margin-bottom: 15px"
        >
          <span class="label">{{ item.label + '：' }}</span>
          <span class="value">{{ formatValue(reportValue[item.value]) }}</span>
        </el-col>
      </el-row>
      <div class="divider"></div>
      <el-row
        :gutter="10"
        outpatientNo="mb8"
        style="
          margin: 20px 0;
          display: flex;
          align-items: center;
          justify-content: flex-start;
          padding: 0 20px;
        "
      >
        <el-col :span="5">
          <span class="label">总收入：</span>
          <span class="value">{{ formatValue(reportValue.SUM) }}</span>
        </el-col>
        <!-- <el-col :span="5">
          <span class="label">实际现金收入：</span>
          <span class="value">
            {{
              formatValue(
                (reportValue['0000cash'] || 0) +
                  (reportValue['220100cash'] || 0) +
                  (reportValue['229900cash'] || 0)
              )
            }}
          </span>
        </el-col> -->
        <!-- <el-col :span="5">
          <span class="label">现金：</span>
          <span class="value">{{ formatValue(reportValue.rmbCashSum) }}</span>
        </el-col> -->
        <el-col :span="5">
          <span class="label">微信：</span>
          <span class="value">{{ formatValue(reportValue.vxCashSum) }}</span>
        </el-col>
        <el-col :span="5">
          <span class="label">支付宝：</span>
          <span class="value">{{ formatValue(reportValue.aliCashSum) }}</span>
        </el-col>
        <el-col :span="5">
          <span class="label">网银：</span>
          <span class="value">{{ formatValue(reportValue.peisCnt) }}</span>
        </el-col>
      </el-row>
      <!-- <el-row
        :gutter="10"
        outpatientNo="mb8"
        style="
          margin: 20px 0;
          display: flex;
          align-items: center;
          justify-content: flex-start;
          padding: 0 20px;
        "
      >
        <el-col :span="5">
          <span class="label">统筹支付：</span>
          <span class="value">{{ formatValue(reportValue.tcSum) }}</span>
        </el-col>
        <el-col :span="5">
          <span class="label">账户支付：</span>
          <span class="value">{{ formatValue(reportValue.zhSum) }}</span>
        </el-col>
        <el-col :span="5">
          <span class="label">基金支付总额：</span>
          <span class="value">{{ formatValue(reportValue.fundSum) }}</span>
        </el-col>
      </el-row> -->
      <el-row
        :gutter="10"
        outpatientNo="mb8"
        style="
          margin: 20px 0;
          display: flex;
          align-items: center;
          justify-content: flex-start;
          padding: 0 20px;
        "
      >
        <el-col :span="5">
          <span class="label">自费现金总额：</span>
          <span class="value">{{ formatValue(reportValue['0000cash']) }}</span>
        </el-col>
        <!-- <el-col :span="5">
          <span class="label">医保现金总额：</span>
          <span class="value">{{ formatValue(reportValue.ybCashSum) }}</span>
        </el-col> -->
        <el-col :span="5">
          <span class="label">自费人次：</span>
          <span class="value">
            {{ reportValue['0000reg'] ? reportValue['0000reg'] + ' 人' : '0 人' }}
          </span>
        </el-col>
        <el-col :span="5">
          <span class="label">省医保人次：</span>
          <span class="value">
            {{ reportValue['229900reg'] ? reportValue['229900reg'] + ' 人' : '0 人' }}
          </span>
        </el-col>
        <el-col :span="5">
          <span class="label">市医保人次：</span>
          <span class="value">
            {{ reportValue['220100reg'] ? reportValue['220100reg'] + ' 人' : '0 人' }}
          </span>
        </el-col>
        <!-- <el-col :span="5">
          <span class="label">医保人次：</span>
          <span class="value">{{ reportValue.ybReg + ' 人' }}</span>
        </el-col> -->
      </el-row>
      <el-row
        :gutter="10"
        outpatientNo="mb8"
        style="
          margin: 20px 0;
          display: flex;
          align-items: center;
          justify-content: flex-start;
          padding: 0 20px;
        "
      >
        <el-col :span="5">
          <span class="label">省医保现金：</span>
          <span class="value">{{ formatValue(reportValue['229900cash']) }}</span>
        </el-col>
        <el-col :span="5">
          <span class="label">省医保统筹：</span>
          <span class="value">{{ formatValue(reportValue['229900tcSum']) }}</span>
        </el-col>
        <el-col :span="5">
          <span class="label">省医保账户：</span>
          <span class="value">{{ formatValue(reportValue['229900zhSum']) }}</span>
        </el-col>
        <el-col :span="5">
          <span class="label">省医保基金：</span>
          <span class="value">{{ formatValue(reportValue['229900fundSum']) }}</span>
        </el-col>
      </el-row>
      <el-row
        :gutter="10"
        outpatientNo="mb8"
        style="
          margin: 20px 0;
          display: flex;
          align-items: center;
          justify-content: flex-start;
          padding: 0 20px;
        "
      >
        <el-col :span="5">
          <span class="label">市医保现金：</span>
          <span class="value">{{ formatValue(reportValue['220100cash']) }}</span>
        </el-col>
        <el-col :span="5">
          <span class="label">市医保统筹：</span>
          <span class="value">{{ formatValue(reportValue['220100tcSum']) }}</span>
        </el-col>
        <el-col :span="5">
          <span class="label">市医保账户：</span>
          <span class="value">{{ formatValue(reportValue['220100zhSum']) }}</span>
        </el-col>
        <el-col :span="5">
          <span class="label">市医保基金：</span>
          <span class="value">{{ formatValue(reportValue['220100fundSum']) }}</span>
        </el-col>
      </el-row>
      <el-row
        :gutter="10"
        outpatientNo="mb8"
        style="
          margin: 20px 0;
          display: flex;
          align-items: center;
          justify-content: flex-start;
          padding: 0 20px;
        "
      >
        <el-col :span="5">
          <span class="label">省医保总额：</span>
          <span class="value">{{
            formatValue((reportValue['229900fundSum'] || 0) + (reportValue['229900zhSum'] || 0))
          }}</span>
        </el-col>
        <el-col :span="5">
          <span class="label">市医保总额：</span>
          <span class="value">{{
            formatValue((reportValue['220100fundSum'] || 0) + (reportValue['220100zhSum'] || 0))
          }}</span>
        </el-col>
      </el-row>
      <el-row
        :gutter="10"
        outpatientNo="mb8"
        style="
          margin: 20px 0;
          display: flex;
          align-items: center;
          justify-content: flex-start;
          padding: 0 20px;
        "
      >
        <el-col :span="5">
          <span class="label">现金收入总额：</span>
          <span class="value">
            {{
              formatValue(
                (reportValue['220100cash'] || 0) +
                  (reportValue['229900cash'] || 0) +
                  (reportValue['0000cash'] || 0)
              )
            }}
          </span>
        </el-col>
        <el-col :span="5">
          <span class="label">体检人次：</span>
          <span class="value">
            {{ getPhysicalExaminationCount() }}
          </span>
        </el-col>
      </el-row>
    </div>
  </div>
</template>

<script setup name="dayEnd">
import { getAllUser, getContractList, getClincReport, testWithAxios } from './component/api';
import useUserStore from '@/store/modules/user';
import { formatDate, formatDateStr } from '@/utils/index';
import Decimal from 'decimal.js';
import { hiprint } from 'vue-plugin-hiprint';
import templateJson from './component/template.json';

const userStore = useUserStore();

const { proxy } = getCurrentInstance();

const purchaseinventoryList = ref([]);
const userList = ref([]);
const loading = ref(true);
const showSearch = ref(true);
const total = ref(0);
const entererId = ref(undefined);
const contractList = ref(undefined);
const reportValue = ref({});
const curUserInfo = ref({});
const { fin_type_code } = proxy.useDict('fin_type_code');
const queryTime = ref([
  formatDateStr(new Date(), 'YYYY-MM-DD'),
  formatDateStr(new Date(), 'YYYY-MM-DD'),
]);
const contractNo = ref('0000');

const data = reactive({
  queryParams: {
    form: {},
    pageNo: 1,
    pageSize: 10,
    searchKey: undefined,
    purposeLocationId: undefined,
    sourceLocationId: undefined,
    supplierId: undefined,
    approvalTimeSTime: undefined,
    approvalTimeETime: undefined,
  },
  rules: {},
});

const { queryParams } = toRefs(data);

getValue();
function getValue() {
  console.log(fin_type_code.value);

  loading.value = true;
  getClincReport({
    contractNo: contractNo.value,
    startTime: queryTime.value[0] + ' 00:00:00',
    endTime: queryTime.value[1] + ' 23:59:59',
    entererId: entererId.value,
  }).then((res) => {
    loading.value = false;
    reportValue.value = res.data;
    let list = processObjectWithFinType(reportValue.value);
    console.log(list);
  });
}

getContract();
function getContract() {
  getContractList().then((response) => {
    contractList.value = response.data;
  });
  getAllUser({ pageSize: 100 }).then((res) => {
    userList.value = res.data.records.filter((item) => item.userName != 'admin');
  });
}

function getPhysicalExaminationCount() {
  if (reportValue.value['9999']) {
    return reportValue.value['9999'] / 105 + ' 人';
  } else {
    return '0 人';
  }
}

function processObjectWithFinType(obj) {
  return Object.keys(obj).map((key) => {
    const matchedItem = fin_type_code.value.find((item) => item.value === key);
    if (matchedItem) {
      return {
        label: matchedItem ? matchedItem.label : key,
        value: obj[key],
      };
    }
  });
}

/** 打印门诊日结 */
async function print() {
  // const selectedRows = proxy.$refs['tableRef'].getSelectionRows();
  console.log(reportValue.value, '==reportValue.value==');
  const result = {
    data: [
      {
        ...reportValue.value, // 将 reportValue.value 中的所有属性展开到 result 中
        nickName: userStore.nickName,
        orgName: userStore.orgName,
        fixmedinsName:  userStore.hospitalName,
        createTime: formatDateStr(new Date(), 'YYYY-MM-DD HH:mm:ss'),
        scheduler: userStore.nickName,
        timeRange: queryTime.value[0] + '~' + queryTime.value[1],
        zfAmount: new Decimal(reportValue.value.zhSum || 0).add(reportValue.value.fundSum || 0),
        feeAmount: new Decimal(reportValue.value.DIAGNOSTIC_FEE || 0)
          .add(reportValue.value.CHECK_FEE || 0)
          .add(reportValue.value.DIAGNOSTIC_TEST_FEE || 0)
          .add(reportValue.value.MEDICAL_EXPENSE_FEE || 0)
          .add(reportValue.value.WEST_MEDICINE || 0)
          .add(reportValue.value.CHINESE_MEDICINE_SLICES_FEE || 0)
          .add(reportValue.value.CHINESE_MEDICINE_FEE || 0)
          .add(reportValue.value.GENERAL_CONSULTATION_FEE || 0)
          .add(reportValue.value.REGISTRATION_FEE || 0)
          .add(reportValue.value.OTHER_FEE || 0)
          .add(reportValue.value.SANITARY_MATERIALS_FEE || 0),
        provinceYbTotal:
          (reportValue.value['229900zhSum'] || 0) + (reportValue.value['229900fundSum'] || 0),
        municipalYbTotal:
          (reportValue.value['220100zhSum'] || 0) + (reportValue.value['220100fundSum'] || 0),
        totalCash:
          (reportValue.value['220100cash'] || 0) +
          (reportValue.value['229900cash'] || 0) +
          (reportValue.value['0000cash'] || 0),
        physicalExaminationCount: getPhysicalExaminationCount(),
      },
    ],
  };
  console.log(result, '==result.data==');

  const printElements = templateJson;
  var hiprintTemplate = new hiprint.PrintTemplate({ template: printElements }); // 定义模板
  const printerList = hiprintTemplate.getPrinterList();
  console.log(hiprintTemplate, '打印机列表');
  hiprintTemplate.print2(result.data[0], {
    title: '打印标题',
  });
  // 将对象转换为 JSON 字符串
  // let jsonString = JSON.stringify(result, null, 2);
  // console.log(jsonString, 'jsonstring');
  // await CefSharp.BindObjectAsync('boundAsync');
  // await boundAsync
  //   .printReport(getPrintFileName(contractNo.value), jsonString)
  //   .then((response) => {
  //     //返回结果是jsonString，可判断其调用是否成功
  //     console.log(response, 'response');
  //     var res = JSON.parse(response);
  //     if (!res.IsSuccess) {
  //       proxy.$modal.msgError('调用打印插件失败:' + res.ErrorMessage);
  //     }
  //   })
  //   .catch((error) => {
  //     proxy.$modal.msgError('调用打印插件失败:' + error);
  //   });
}

function getPrintFileName(value) {
  switch (value) {
    case '0000':
      return '门诊日结单(按登录角色查询)自费.grf';
    case '229900': // 省医保
      return '门诊日结单(按登录角色查询)省医保.grf';
    case '220100': // 市医保
      return '门诊日结单(按登录角色查询)市医保.grf';
  }
}

function formatValue(value) {
  return value == null || value == undefined || value == NaN ? '0.00 元' : value.toFixed(2) + ' 元';
}
</script>
<style scoped>
.custom-tree-node {
  display: flex;
  align-items: center;
}

.title {
  font-weight: bold;
  font-size: large;
  margin-bottom: 10px;
}
.label {
  display: inline-block;
  width: 120px !important;
}
.value {
  float: right;
}
.el-col {
  margin-right: 50px;
}
.divider {
  height: 3px;
  background-color: #000;
  margin: 20px 0;
}
</style>