<template>
  <div class="app-container">
    <el-row :gutter="10" class="mb8">
      <el-form
        :model="queryParams"
        ref="queryRef"
        :inline="true"
        label-width="85px"
      >
        <el-form-item label="结算经办机构：" prop="setlOptins" label-width="110px">
          <el-input
            v-model="queryParams.setlOptins"
            placeholder="请输入结算经办机构"
            clearable
            style="width: 150px"
            @keyup.enter="handleQuery"
          />
        </el-form-item>
        <el-form-item label="结算日期：">
          <el-date-picker
            v-model="occurrenceTime"
            value-format="YYYY-MM-DD"
            type="daterange"
            range-separator="-"
            start-placeholder="开始日期"
            end-placeholder="结束日期"
            style="width: 300px"
          ></el-date-picker>
        </el-form-item>
        <el-form-item label="清算类型：" prop="clrType">
          <el-select
            v-model="queryParams.clrType"
            placeholder="请选择清算类型"
            clearable
            style="width: 150px"
          >
            <el-option
              v-for="categoryCode in clrTypeOptions"
              :key="categoryCode.value"
              :label="categoryCode.label"
              :value="categoryCode.value"
            />
          </el-select>
        </el-form-item>
        <!-- <el-form-item label="医院：" prop="orgId"  label-width="70px">
          <el-input
            v-model="queryParams.orgId"
            placeholder="请输入医院id"
            clearable
            style="width: 150px"
            @keyup.enter="handleQuery"
          />
        </el-form-item> -->
        <el-form-item label="文件查询号：" prop="fileQuryNo" label-width="100px">
          <el-input
            v-model="queryParams.fileQuryNo"
            placeholder="请输入文件查询号"
            clearable
            style="width: 150px"
            @keyup.enter="handleQuery"
          />
        </el-form-item>
        <!-- <el-form-item label="本地文件路径：" prop="filePath" label-width="110px">
          <el-input
            v-model="queryParams.filePath"
            placeholder="请输入本地文件路径"
            clearable
            style="width: 566px"
            @keyup.enter="handleQuery"
          />
        </el-form-item> -->
        <el-form-item>
          <el-upload
            multiple
            :action="uploadFileUrl"
            :before-upload="handleBeforeUpload"
            :file-list="fileList"
            limit=1
            :on-error="handleUploadError"
            :on-exceed="handleExceed"
            :on-success="handleUploadSuccess"
            :show-file-list="false"
            :headers="headers"
            class="upload-file-uploader"
            ref="fileUpload"
          >
          <el-button
            type="primary"
            plain
            icon="Edit"
          
            >上传文件</el-button
            >
          </el-upload>
          <div class="el-upload__tip" v-if="showTip">
            请上传
            <template v-if="fileSize"> 大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b> </template>
            <template v-if="fileType"> 格式为 <b style="color: #f56c6c">{{ fileType.join("/") }}</b> </template>
            的文件
          </div>
        </el-form-item>
      </el-form>
    <!-- <el-row :gutter="10" class="mb8"> -->
      <!-- <el-col :span="1.5"> -->
        <!-- v-hasPermi="['system:user:import']" -->
        <el-button
          type="primary"
          plain
          icon="Edit"
          @click="handleQuery"
          >统计</el-button
        >
        <el-button
          type="primary"
          plain
          icon="Edit"
          @click="handleExport"
          >生成txt文件</el-button
        >
      <!-- </el-col> -->
      <!-- <el-col :span="1.5"> -->
        <!-- v-hasPermi="['system:user:export']" -->
        <el-button
          type="primary"
          plain
          icon="Edit"
          @click="handleReconciliation"
          >开始明细对账</el-button
        >
        <el-button
          type="primary"
          plain
          icon="Edit"
          :disabled="ids.length == 0"
          @click="handleApplyForLiquidation"
          >申请清算</el-button
        >
      <!-- </el-col> -->
    </el-row>
    <div style="margin-bottom:5px">结算笔数：{{counts}}（其中 总费用：{{totalPrice1?totalPrice1.toFixed(2):0}}元， 基金支付金额：{{totalPrice2?totalPrice2.toFixed(2):0}}元， 账户支付金额：{{totalPrice3?totalPrice3.toFixed(2):0}}元，现金支付金额：{{totalPrice4?totalPrice4.toFixed(2):0}}元）</div>
    <el-table
      v-loading="loading"
      :data="purchaseinventoryList"
      @selection-change="handleSelectionChange"
      @row-click="handleRowClick"
    >
      <el-table-column type="selection" width="50" align="center" />
      <el-table-column
        label="个人编码"
        align="center"
        key="psnNo"
        prop="psnNo"
        width="190"
        :show-overflow-tooltip="true"
      />
      <el-table-column
        label="患者姓名"
        align="center"
        key="patientName"
        prop="patientName"
        width="100"
        :show-overflow-tooltip="true"
      />
      <el-table-column
        label="就诊ID"
        align="center"
        key="mdtrtId"
        prop="mdtrtId"
        width="270"
        :show-overflow-tooltip="true"
      />
      <el-table-column
        label="结算ID"
        align="center"
        key="setlId"
        prop="setlId"
        width="270"
        :show-overflow-tooltip="true"
      />
       <!-- <el-table-column
        label="姓名"
        align="center"
        key="locationName"
        prop="locationName"
         width="140"
        :show-overflow-tooltip="true"
      />
      <el-table-column
        label="医保结算日期"
        align="center"
        key="productionDate"
        prop="productionDate"
        width="160"
        :show-overflow-tooltip="true"
      >
        <template #default="scope">
          <span>{{ parseTime(scope.row.productionDate) }}</span>
        </template>
      </el-table-column> -->
      <el-table-column
        label="总费用"
        align="center"
        key="medfeeSumamt"
        prop="medfeeSumamt"
        :show-overflow-tooltip="true"
      />
      <el-table-column
        label="基金支付金额"
        align="center"
        key="fundPaySumamt"
        prop="fundPaySumamt"
        :show-overflow-tooltip="true"
      />
      <el-table-column
        label="个人账户金额"
        align="center"
        key="acctPay"
        prop="acctPay"
        :show-overflow-tooltip="true"
      />
      <!-- <el-table-column
        label="现金支付金额"
        align="center"
        key="unitCode_dictText"
        prop="unitCode_dictText"
        :show-overflow-tooltip="true"
      /> -->
      <!-- <el-table-column
        label="共计支付金额"
        align="center"
        key="quantity"
        prop="quantity"
        :show-overflow-tooltip="true"
      /> -->
      <el-table-column
        label="结算时间"
        align="center"
        key="setlTime"
        prop="setlTime"
      
        :show-overflow-tooltip="true"
      >
        <template #default="scope">
          <span>{{ parseTime(scope.row.setlTime) }}</span>
        </template>
      </el-table-column>
      <el-table-column
        label="是否退费"
        align="center"
        key="refdSetlFlag"
        prop="refdSetlFlag"
        :show-overflow-tooltip="true"
      >
        <template #default="scope">
          <span>{{ scope.row.refdSetlFlag==1?'退费':'' }}</span>
        </template>
       </el-table-column>
       <!-- <el-table-column
        label="报销类型"
        align="center"
        key="minUnitCode_dictText"
        prop="minUnitCode_dictText"
        :show-overflow-tooltip="true"
      />
       <el-table-column
        label="身份证"
        align="center"
        key="minUnitCode_dictText"
        prop="minUnitCode_dictText"
        :show-overflow-tooltip="true"
      />
       <el-table-column
        label="收据编号"
        align="center"
        key="busNo"
        prop="busNo"
        :show-overflow-tooltip="true"
      /> -->
    </el-table>
    <el-form :inline="true" label-width="90px" style="width: 100%; margin-top: 30px">
      <el-form-item label="上传结果：" style="width: 100%">
        <el-input
          v-model="reconciliationDetail"
          :autosize="{ minRows: 4, maxRows: 10 }"
          type="textarea"
          disabled
          placeholder=""
        />
      </el-form-item>
    </el-form>
    <!-- <pagination
      v-show="total > 0"
      :total="total"
      v-model:page="queryParams.pageNo"
      v-model:limit="queryParams.pageSize"
      @pagination="getList"
    /> -->
    <!-- v-if="purchaseinventoryReturnList&&purchaseinventoryReturnList.length>0" -->
    <!-- <el-table
     v-if="purchaseinventoryList.length>0"
      style="height:190px;margin-top:32px;"
      v-loading="loadingReturn"
      :data="purchaseinventoryReturnList"
      @selection-change="handleSelectionChangeReturn"
    >
     <el-table-column type="selection" width="50" align="center" />
      <el-table-column
        label="人员ID"
        align="center"
        key="busNo"
        prop="busNo"
         width="140"
        :show-overflow-tooltip="true"
      />
      <el-table-column
        label="就诊ID"
        align="center"
        key="medicineName"
        prop="medicineName"
         width="140"
        :show-overflow-tooltip="true"
      />
      <el-table-column
        label="结算ID"
        align="center"
        key="locationName"
        prop="locationName"
         width="140"
        :show-overflow-tooltip="true"
      />
      <el-table-column
        label="对账结果"
        align="center"
        key="locationName"
        prop="locationName"
         width="140"
        :show-overflow-tooltip="true"
      />
      <el-table-column
        label="备注"
        align="center"
        key="locationName"
        prop="locationName"
         width="140"
        :show-overflow-tooltip="true"
      />
      <el-table-column
        label="总费用"
        align="center"
        key="manufacturerText"
        prop="manufacturerText"
        width="180px"
        :show-overflow-tooltip="true"
      />
      <el-table-column
        label="医疗费总额"
        align="center"
        key="lotNumber"
        prop="lotNumber"
        width="120px"
        :show-overflow-tooltip="true"
      />
      <el-table-column
        label="基金支付总额"
        align="center"
        key="quantityUnit"
        prop="quantityUnit"
         width="140px"
        :show-overflow-tooltip="true"
      />
      <el-table-column
        label="个人账户支付总额"
        align="center"
        key="unitCode_dictText"
        prop="unitCode_dictText"
        :show-overflow-tooltip="true"
      />
      <el-table-column
        label="发送方报文ID"
        align="center"
        key="quantity"
        prop="quantity"
        :show-overflow-tooltip="true"
      />
       <el-table-column
        label="退费结算标志"
        align="center"
        key="minUnitCode_dictText"
        prop="minUnitCode_dictText"
        :show-overflow-tooltip="true"
      />
    </el-table> -->
  </div>
</template>

<script setup name="reconciliationDetails">
import {
  reconcileDetailList,
  reconcileDetailTxt,
  reconcileGeneral,
  getPharmacyCabinetList,
  ybRequestFileUp,
  applyFinancialClearing
} from "./statisticalManagent";
import { getToken } from "@/utils/auth";
import { formatDate } from '@/utils/index';
const { proxy } = getCurrentInstance();
const purchaseinventoryList = ref([]);
const loading = ref(false);
const ids = ref([]);
const single = ref(true);
const multiple = ref(true);
const total = ref(0);
const reconciliationDetail = ref("")
const occurrenceTime = ref([formatDate(new Date()),formatDate(new Date())]);
const clrTypeOptions = ref([]);
const filePath = ref("")
const purchaseinventoryReturnList = ref([])
const loadingReturn = ref(false)
const selectedRow = ref([])
const counts = ref(0)
const totalPrice1 = ref(0)
const totalPrice2 = ref(0)
const totalPrice3 = ref(0)
const totalPrice4 = ref(0)

const fileSize = ref(10)
const uploadList = ref([]);
const baseUrl = import.meta.env.VITE_APP_BASE_API;
const uploadFileUrl = ref(import.meta.env.VITE_APP_BASE_API + "/yb-request/file-up"); // 上传文件服务器地址
const headers = ref({ Authorization: "Bearer " + getToken() });
const fileList = ref([]);
const fileType = ref(["zip","txt"]);
const data = reactive({
  form: {},
  queryParams: {
    // pageNo: 1,
    // pageSize: 10,
    setlOptins: '229900', 
    filePath: undefined, 
    orgId:undefined,
    clrType: undefined,
    fileQuryNo: undefined, 
    stmtBegnDate:undefined,
    stmtEndDate:undefined,
  },
  rules: {},
});

const { queryParams, form, rules } = toRefs(data);

watch(
  () => purchaseinventoryList.value,
  (newVlaue) => {
    if(newVlaue&&newVlaue.length>0){
      handleTotalAmount()
    }
  },
  { immediate: true }
)
function handleBeforeUpload(file) {
  // 校检文件类型
  if (fileType.value.length) {
    const fileName = file.name.split('.');
    const fileExt = fileName[fileName.length - 1];
    const isTypeOk = fileType.value.indexOf(fileExt) >= 0;
    if (!isTypeOk) {
      proxy.$modal.msgError(`文件格式不正确, 请上传${fileType.value.join("/")}格式文件!`);
      return false;
    }
  }
  // 校检文件大小
  if (fileSize.value) {
    const isLt = file.size / 1024 / 1024 < fileSize.value;
    if (!isLt) {
      proxy.$modal.msgError(`上传文件大小不能超过10MB!`);
      return false;
    }
  }
  const formData = new FormData()
  formData.append('file', file)
  formData.append('filename', file.name)
  ybRequestFileUp(formData).then((res) => {
    if(res.code==200){
      proxy.$modal.msgSuccess("上传成功")
    }
    
  })
  // proxy.$modal.loading("正在上传文件，请稍候...");
  number.value++;
  return true;
}

// 文件个数超出
function handleExceed() {
  proxy.$modal.msgError(`上传文件数量不能超过 1 个!`);
}

// 上传失败
function handleUploadError(err) {
  proxy.$modal.msgError("上传文件失败");
}

// 上传成功回调
function handleUploadSuccess(res, file) {
  if (res.code === 200) {
    console.log(res,file,"file")
    uploadList.value.push({ name: res.fileName, url: res.fileName });
    uploadedSuccessfully();
  } else {
    number.value--;
    proxy.$modal.closeLoading();
    proxy.$modal.msgError(res.msg);
    proxy.$refs.fileUpload.handleRemove(file);
    uploadedSuccessfully();
  }
}
// function submitFileForm() {
//   proxy.$refs['fileUpload'].submit();
// }
// 上传结束处理
function uploadedSuccessfully() {
  if (number.value > 0 && uploadList.value.length === number.value) {
    fileList.value = fileList.value.filter(f => f.url !== undefined).concat(uploadList.value);
    uploadList.value = [];
    number.value = 0;
    // proxy.$refs['fileUpload'].submit();
    emit("update:modelValue", listToString(fileList.value));
    proxy.$modal.closeLoading();
  }
}
// 删除文件
function handleDelete(index) {
  fileList.value.splice(index, 1);
  emit("update:modelValue", listToString(fileList.value));
}

// 获取文件名称
function getFileName(name) {
  // 如果是url那么取最后的名字 如果不是直接返回
  if (name.lastIndexOf("/") > -1) {
    return name.slice(name.lastIndexOf("/") + 1);
  } else {
    return name;
  }
}

// 对象转成指定字符串分隔
function listToString(list, separator) {
  let strs = "";
  separator = separator || ",";
  for (let i in list) {
    if (list[i].url) {
      strs += list[i].url + separator;
    }
  }
  return strs != '' ? strs.substr(0, strs.length - 1) : '';
}
/**计算合计金额 */
function handleTotalAmount() {
  counts.value = purchaseinventoryList.value.length
  totalPrice1.value = purchaseinventoryList.value.reduce(
    (accumulator, currentRow) => {
      return (accumulator + (Number(currentRow.medfeeSumamt) || 0))
    },
    0
  );
  totalPrice2.value = purchaseinventoryList.value.reduce(
    (accumulator, currentRow) => {
      return (accumulator + (Number(currentRow.fundPaySumamt) || 0))
    },
    0
  );
  totalPrice3.value = purchaseinventoryList.value.reduce(
    (accumulator, currentRow) => {
      return (accumulator + (Number(currentRow.acctPay) || 0))
    },
    0
  );
  // 现金支付金额
  // totalPrice4.value = purchaseinventoryList.value.reduce(
  //   (accumulator, currentRow) => {
  //     return (accumulator + (Number(currentRow.profitAmount) || 0))
  //   },
  //   0
  // );
}
function getPharmacyCabinetLists() {
  clrTypeOptions.value = [
    { value: 11, label: '门诊' },
    { value: 21, label: '住院' },
  ];
}
function handleSelectionChangeReturn(selection) {
  idsReturn.value = selection.map((item) => item.id);
  singleReturn.value = selection.length != 1;
  multipleReturn.value = !selection.length;
}

function getList() {
  reconcileDetailList(queryParams.value).then((res) => {
    // console.log(res,"res----------------")
    // loading.value = false;
    // purchaseinventoryList.value = [{psnNo:"123",mdtrtId:"121",setlId:"1213",medfeeSumamt:"122",fundPaySumamt:"12",acctPay:"4.72",insutype:"410",clrType: 11,contractNo:"229900"},{psnNo:"123",mdtrtId:"121",setlId:"1213",medfeeSumamt:"122",fundPaySumamt:"12",acctPay:"7.43",insutype:"410",clrType: 11,contractNo:"229900"},{psnNo:"123",mdtrtId:"121",setlId:"1213",medfeeSumamt:"122",fundPaySumamt:"12",acctPay:"1",insutype:"410",clrType: 11,contractNo:"229900"},{psnNo:"123",mdtrtId:"121",setlId:"1213",medfeeSumamt:"122",fundPaySumamt:"12",acctPay:"-1",insutype:"410",clrType: 11,contractNo:"229900"}]
   purchaseinventoryList.value = res.data.record ? res.data.record : res.data;
    total.value = res.data.total;
  });
}

/** 搜索按钮操作 */
function handleQuery() {
  queryParams.value.stmtBegnDate =
    occurrenceTime.value && occurrenceTime.value.length == 2
      ? occurrenceTime.value[0] + " 00:00:00"
      : "";
  queryParams.value.stmtEndDate =
    occurrenceTime.value && occurrenceTime.value.length == 2
      ? occurrenceTime.value[1] + " 23:59:59"
      : "";
  // queryParams.value.pageNo = 1;
  getList();
}

/** 按钮操作 */
function handleReconciliation() {
  // 调用接口返回值
  if(selectedRow.value.length==0){
    proxy.$message.error('请选择一行数据开始明细对账');
    return
  }
  loading.value = true;
  let queryParamsss = {
    settlementIdList:ids.value,
    filePath:queryParams.value.filePath?queryParams.value.filePath:"", 
    fileQuryNo:queryParams.value.fileQuryNo?queryParams.value.fileQuryNo:"", 
    setlOptins:queryParams.value.setlOptins?queryParams.value.setlOptins:"", 
    clrType:queryParams.value.clrType?queryParams.value.clrType:""
  }
  reconcileGeneral(queryParamsss).then((res) => {
    console.log(res.data, 'res----------------');
    loading.value = false;
  });
}
function handleApplyForLiquidation () {
  if (isAllSelected()) {
    let params = {}
    params.clrType = queryParams.value.clrType?queryParams.value.clrType:""
    params.clrOptins = queryParams.value.setlOptins?queryParams.value.setlOptins:""
    params.stmtBegnDate = occurrenceTime.value[0]
    params.stmtEndDate = occurrenceTime.value[1]
    params.settlementIdList = ids.value
    applyFinancialClearing(params).then((res) => {
      console.log(res.data,'res----------------');
      loading.value = false;
    });
  } else {
    proxy.$message.warning('当前未全选');
  }
}
function isAllSelected() {
  return selectedRow.value.length === purchaseinventoryList.value.length;
}
function handleExport(){
  if(selectedRow.value.length==0){
    proxy.$message.error('请选择一行数据进行生成txt文件');
    return
  }
  loading.value = true;
  reconcileDetailTxt({settlementIdList:ids.value}).then((res) => {
    console.log(res.data,'res----------------');
    let fileName = Date.now()+'.txt'; // 默认文件名
    // 2. 创建Blob对象
    const blob = new Blob([res], { type: 'application/octet-stream;charset=utf-8' });
    // 3. 创建临时下载链接
    const link = document.createElement('a');
    const url = window.URL.createObjectURL(blob);
    link.href = url;
    link.download = fileName; // 设置下载文件名
     // 4. 触发下载
    document.body.appendChild(link);
    link.click();
    // 5. 清理资源
    document.body.removeChild(link);
    window.URL.revokeObjectURL(url);
    loading.value = false;
    if(res.data){
      queryParams.value.filePath = res.data.split("生成txt文件成功，文件路径：")?res.data.split("生成txt文件成功，文件路径：")[1]:""
    }
  });
}

/** 选择条数  */
function handleSelectionChange(selection) {
  selectedRow.value = selection
  console.log(selectedRow.value,"selectedRow.value")
  ids.value = selection.map((item) => item.setlId);
  single.value = selection.length != 1;
  multiple.value = !selection.length;
}
//点击列表当前行
function handleRowClick(row) {
  // editRowTK.value = row
  console.log(row,"row")
  // if(row.returnStatus==1){
  //   loadingReturn.value = true
  //   generatedReturnDetail(row.supplyBusNo).then((response) => {
  //     purchaseinventoryReturnList.value = response.data
  //     purchaseinventoryReturnList.value.map(k=>{
  //       // k.returnStatus_text =  k.returnStatus==1?'已退库':''
  //       k.originalSupplyBusNo = k.originalSupplyBusNo?k.originalSupplyBusNo:row.supplyBusNo
  //     }) 
    
  //   })
  //   loadingReturn.value = false
  // }
}


getList();
getPharmacyCabinetLists()
</script>
<style scoped>
.custom-tree-node {
  display: flex;
  align-items: center;
}

.title {
  font-weight: bold;
  font-size: large;
  margin-bottom: 10px;
}
</style>