<template>
  <div class="box">
    <div style="position: relative;">
      <div class="middlebox">
        <div class="contenttitle">
          客户报表 /
          <span class="contenttitleBold"
            >组合项目具体结果明细统计</span
          >
        </div>
      </div>
      <div :style="'display: block;'">
        <div style="background-color: #fff; padding: 15px; border-radius: 8px;display: flex;flex-wrap: wrap;    margin-bottom: 10px;height:35px;margin-top: 7px;">
          <div class="query">
            <span>体检单位：</span>
            <el-input
              placeholder="请选择体检单位"
              v-model="patientRegister.query.cusOrgOCX"
              style="width: 240px"
              size="small"
              disabled
            >
              <el-button
                slot="append"
                icon="el-icon-search"
                @click="report.dialogCusOrgOCX = true"
                style="font-size: 20px"
              ></el-button>
            </el-input>
          </div>
          <div class="query">
            <span>组合项目：</span>
            <el-input
              placeholder="请选择组合项目"
              v-model="patientRegister.query.asbitemOCX"
              style="width: 240px"
              size="small"
              disabled
            >
              <el-button
                slot="append"
                icon="el-icon-search"
                @click="report.dialogAsbitemOCX = true"
                style="font-size: 20px"
              ></el-button>
            </el-input>
          </div>
          <div class="query">
            <span>检查状态：</span>
            <el-select
              v-model="patientRegister.query.checkCompleteFlag"
              placeholder="请选择"
              clearable
              style="width: 80px"
              size="small"
            >
              <el-option
                v-for="item in dict.checkCompleteFlag"
                :key="item.id"
                :label="item.displayName"
                :value="item.id"
              >
              </el-option>
            </el-select>
          </div>
          <div class="query">
            <el-button @click="btnQuery" size="small" class="commonbutton">查询</el-button>
          </div>
          <div class="query">
            <el-button @click="handleExport" size="small" class="commonbutton">导出excel</el-button>
          </div>
          <div class="query">
            <el-button @click="onPrint" size="small" class="commonbutton">打印</el-button>
          </div>
        </div>
        <div  style="background-color: #fff; padding: 15px; border-radius: 8px;">
          <div ref="imageDom">
            <el-table
            :data="dataList"
            border
            style="width: 100%"
            :height="flag
                  ?window.pageHeight < 600 ? 415 : window.pageHeight - 185-20:''"
            row-key="id"
            highlight-current-row
            ref="dataList"
            :row-class-name="tableRowClassName"
            id="table"
            show-summary
            :summary-method="summarizeRegisterCount"
            :cell-style="tableRowClassNames"
            :header-cell-class-name="addClass" 
          >
            <el-table-column prop="patientName" label="姓名"></el-table-column>
            <el-table-column prop="sexName" label="性别"></el-table-column>
            <el-table-column prop="age" label="年龄"></el-table-column>
            <el-table-column
              prop="medicalTimes"
              label="体检次数"
            ></el-table-column>
            <el-table-column
              v-for="(item, index) in columnData"
              :key="index"
              :prop="item.prop"
              :label="item.lable"
              align="left"
            >
            </el-table-column>
          </el-table>
          </div>
                  </div>
      </div>
    </div>
    <!--通用选单位、体检次数、分组的控件-->
    <el-dialog
      title="体检单位选择"
      :visible.sync="report.dialogCusOrgOCX"
      :close-on-click-modal="false"
      width="880px"
      height="600px"
    >
      <CusOrgOCX :initDateType="'creationTime'" :useCustomerOrg="true" />
    </el-dialog>
    <!--通用选组合项目的控件-->
    <el-dialog
      title="组合项目选择"
      :visible.sync="report.dialogAsbitemOCX"
      :close-on-click-modal="false"
      width="700px"
      height="600px"
    >
      <AsbitemOCX />
    </el-dialog>
  </div>
</template>
<script>
import moment from "moment";
import { mapState, mapActions } from "vuex";
import { getapi, postapi, putapi, deletapi } from "@/api/api";
import {
  dddw,
  objCopy,
  arrayReduce,
  arrayExistObj,
  tcdate,
} from "@/utlis/proFunc";
import CusOrgOCX from "../../components/report/CusOrgOCX.vue";
import AsbitemOCX from "../../components/report/AsbitemOCX.vue";
import { exportToExcel } from "../../utlis/Export2Excel";
import html2canvas from "html2canvas";
import printJs from "print-js";
export default {
  components: {
    CusOrgOCX,
    AsbitemOCX,
  },
  data() {
    return {
      dataList: [], //列表数据
      columnData: [],
      flag: true,
      category: [],
    };
  },

  created() {
    this.dictInit();
  },

  //挂载完成
  mounted() {
    // this.btnQuery();
  },

  computed: {
    ...mapState(["window", "dict", "patientRegister", "report"]),
  },

  methods: {
    moment,
    dddw,
    //数据初始化
    dictInit() {
      //性别
      //   getapi("/api/app/sex").then((res) => {
      //     if (res.code == 1) {
      //       this.dict.sex = res.data;
      //     }
      //   });

      //体检中心
      getapi("/api/app/organization-units/organization-unit-by-is-peis").then(
        (res) => {
          if (res.code == 1) {
            this.dict.organization = res.data;
          }
        }
      );

      //体检单位树
      getapi("/api/app/customerorg/getbycodeall").then((res) => {
        if (res.code == 1) {
          this.patientRegister.customerOrgTreeAll = res.data;
          tcdate(this.patientRegister.customerOrgTreeAll);
        }
      });

      //   //体检类别
      getapi("/api/app/medical-type/in-filter").then((res) => {
        if (res.code == 1) {
          this.dict.medicalType = res.data;
        }
      });

      //   //人员类别
      //   getapi("/api/app/personnel-type/in-filter").then((res) => {
      //     if (res.code == 1) {
      //       this.dict.personnelType = res.data.items;
      //     }
      //   });

      //   //婚姻状况
      //   getapi("/api/app/marital-statuses").then((res) => {
      //     if (res.code == 1) {
      //       this.dict.maritalStatus = res.data.items;
      //     }
      //   });

      //   //性激素期
      //   getapi("/api/app/sex-hormone-term/in-filter").then((res) => {
      //     if (res.code == 1) {
      //       this.dict.sexHormoneTerm = res.data.items;
      //     }
      //   });

      //   //民族
      //   getapi("/api/app/nation/in-filter").then((res) => {
      //     if (res.code == 1) {
      //       this.dict.nation = res.data.items;
      //     }
      //   });

      //   //籍惯 ，出生地
      //   getapi("/api/app/birth-place/in-filter").then((res) => {
      //     if (res.code == 1) {
      //       this.dict.birthPlace = res.data.items;
      //     }
      //   });

      //   //套餐
      //   postapi("/api/app/medicalpackage/GetBasicList", {}).then(
      //     (res) => {
      //       if (res.code == 1) {
      //         this.dict.medicalPackage = res.data;
      //       }
      //     }
      //   );

      //   //分组，所有分组，不限单位，不限次数
      //   getapi("/api/app/customer-org-group").then((res) => {
      //     if (res.code == 1) {
      //       this.dict.customerOrgGroupAll = res.data.items;
      //     }
      //   });

      //   //支付方式
      //   getapi("/api/app/pay-mode").then((res) => {
      //     if (res.code == 1) {
      //       this.dict.payMode = res.data;
      //     }
      //   });

      //   //体检类别 树结构
      getapi("/api/app/item-type/by-code-all").then((res) => {
        if (res.code == 1) {
          this.dict.itemTypeTree = res.data;
          tcdate(this.dict.itemTypeTree);
        }
      });

      //   postapi("/api/app/asbitem/getasbitemlist", {}).then((res) => {
      //     if (res.code == 1) {
      //       this.dict.asbItemAll = res.data;
      //     }
      //   });

    },

    tableRowClassName({ row, rowIndex }) {
      switch (row.completeFlag) {
        case "0":
          return "danger";
        case "2":
          return "info";
        default:
          return "";
      }
    },
    onPrint() {
      this.flag = false;
      this.$nextTick(() => {
        let width =this.$refs.imageDom.style.width;
        let cloneDom = this.$refs.imageDom.cloneNode(true);
        let imageDom = this.$refs.imageDom;
        cloneDom.style.position = "absolute";
        cloneDom.style.top = "0px";
        cloneDom.style.zIndex = "-1";
        cloneDom.style.width = width;
        imageDom.appendChild(cloneDom);

        html2canvas(cloneDom).then((canvas) => {
          // 转成图片，生成图片地址
          const url = canvas.toDataURL("image/png");
          printJs({
            printable: url,
            type: "image",
            documentTitle: "", // 标题
           style: `@media print { @page {size: auto; margin: 0 0 0 0; } body{margin:0 5px}canvas{page-break-after: always;page-break-inside: avoid;
page-break-after: avoid;
page-break-before: avoid;}}`, // 去除页眉页脚
          });
        });
        cloneDom.style.display = "none";
        this.flag = true;
      });
    },
    handleExport() {
      exportToExcel("#table", "组合项目结果明细", false);
    },
    tableRowClassNames({ row, column, rowIndex, columnIndex }) {
        if(column.label.length>2){
           let columnLabel= column.label.slice(-2)
           if(columnLabel=="小结"){
            return { backgroundColor: "#F5F7FA" };
           }
        }
    },
    addClass({ row, column, rowIndex, columnIndex }){
         if(column.label.length>2){
           let columnLabel= column.label.slice(-2)
           if(columnLabel=="小结"){
            return "backcolor";
           }
        }
    },
   summarizeRegisterCount(param) {
      const { columns, data } = param;
      const sums = [];
      columns.forEach((column, index) => {
        if (index === 0) {
          sums[index] = "合计";
          return;
        }

        if (index === 1) {
          sums[index] = "共" + data.length + "人";
        } else {
          sums[index] = "";
        }
      });

      return sums;
    },
    //查询
    btnQuery() {
      let body = {},
        customerOrgs = [],
        asbitemIds = [];

      if (this.report.dataCusOrgOCX.length > 0) {
        this.report.dataCusOrgOCX.forEach((e) => {
          let rd = {
            startDate: moment(e.startDate).format("yyyy-MM-DD"),
            endDate: moment(e.endDate).format("yyyy-MM-DD"),
            dateType:
              e.dateType == "summaryDate"
                ? "3"
                : e.dateType == "medicalStartDate"
                ? "2"
                : "1",
          };

          if (e.customerOrgId) {
            rd.customerOrgId = e.customerOrgId;
            if (e.customerOrgId == this.dict.personOrgId) {
              rd.customerOrgRegisterId = null;
              rd.customerOrgGroupId = [];
            } else {
              rd.customerOrgRegisterId = e.customerOrgRegister.id;
              rd.customerOrgGroupId = e.customerOrgGroupIds;
            }
          }
          customerOrgs.push(rd);
        });
      }

      if (this.report.dataAsbitemOCX.length > 0) {
        this.report.dataAsbitemOCX.forEach((e) => {
          asbitemIds.push(e.id);
        });
      }

      body.customerOrgs = customerOrgs;
      body.asbitemId = asbitemIds;

      if (this.patientRegister.query.checkCompleteFlag)
        body.completeFlag = this.patientRegister.query.checkCompleteFlag;

      //console.log('/api/app/peisreport/getpatientregisterreport',body)
      postapi("/api/customerreport/getasbitemspecificresultreport", body).then(
        (res) => {
          if (res.code != -1) {
            let bodys = res.data;
            let that = this;
            let template = {
              prop: "",
              lable: "",
            };
            that.columnData = [];
            that.category = [];
            for (let i = 0; i < bodys.length; i++) {
              for (let k = 0; k < bodys[i].registerChecks.length; k++) {
                that.category.push(bodys[i].registerChecks[k].checkName);
              }
            }
            that.category = Array.from(new Set(that.category));
            for (let m = 0; m < that.category.length; m++) {
              for (let i = 0; i < bodys.length; i++) {
                for (let k = 0; k < bodys[i].registerChecks.length; k++) {
                                        this.$set(
                  bodys[i],
                //   bodys[i].registerChecks[k].registerCheckId +
                    bodys[i].registerChecks[k].checkName +
                    "小结",
                  bodys[i].registerChecks[k].registerCheckSummarys
                );
                  if (bodys[i].registerChecks[k].checkName == that.category[m]) {
                    for (let j = 0;j < bodys[i].registerChecks[k].registerCheckItems.length;j++) {
                      let templatess = JSON.parse(JSON.stringify(template));
                      templatess.prop =
                        // bodys[i].registerChecks[k].registerCheckId +
                        bodys[i].registerChecks[k].checkName +
                        bodys[i].registerChecks[k].registerCheckItems[j]
                          .itemName;
                      templatess.lable =
                        // bodys[i].registerChecks[k].checkName +
                        // "/" +
                        bodys[i].registerChecks[k].registerCheckItems[j]
                          .itemName;
                      that.columnData.push(templatess);
                      this.$set(
                        bodys[i],
                        // bodys[i].registerChecks[k].registerCheckId +
                        bodys[i].registerChecks[k].checkName +
                          bodys[i].registerChecks[k].registerCheckItems[j]
                            .itemName,
                        bodys[i].registerChecks[k].registerCheckItems[j].result
                      )
                    }
                  }
                }
              }
              let templates = JSON.parse(JSON.stringify(template));
              templates.prop =that.category[m] +"小结";
              templates.lable = that.category[m] + "小结";
              that.columnData.push(templates);
            }

            this.$nextTick(() => {
              this.$refs.dataList.doLayout();
            });
            let map = new Map();
            let qc = this.columnData.filter(
              (key) => !map.has(key.prop) && map.set(key.prop, 1)
            );
            // qc.sort(function (a, b) {
            //     return a.lable < b.lable ? -1 : 1; //根据名称属性进行排序
            // })

            this.columnData = qc;
            this.dataList = bodys;
          }
        }
      );
    },
  },

  //监听事件
  watch: {
    //触发查询事件
    // "patientRegister.query.times"(newVal, oldVal) {
    //   if (newVal != oldVal) {
    //     //alert('触发查询事件')
    //     this.query();
    //   }
    // },
  },
};
</script>
<style scoped>
@import "../../assets/css/global_button.css";
@import "../../assets/css/global_dialog.css";
@import "../../assets/css/global_table.css";
@import "../../assets/css/global_form.css";
@import "../../assets/css/global_input.css";
@import "../../assets/css/global.css";
.query{
    margin-right: 10px;
    display: flex;
    justify-content: center;
    align-items: center;
    font-size: 14px;
    color: #232748;
    font-size: 400;
    font-family: "NotoSansSC-Regular";
}
.box {
  display: flex;
  flex-direction: column;
}
::v-deep .el-table__header-wrapper th.backcolor {
  background-color: #F5F7FA;
}
::v-deep .el-input__inner {
  /*text-align: center;*/
  padding-left: 5px;
  padding-right: 15px;
}

::v-deep .el-input__icon {
  width: 15px;
  /* 输入框下拉箭头或清除图标 默认 25 */
}

::v-deep .el-input-group__append {
  padding: 0 5px;
  /* 控件默认 0 20px;*/
}

::v-deep .el-icon-search:before {
  color: #00F;
}
.query:last-child{
  margin-right: 0;
}
</style>
