<template>
  <div>
    <template>
      <el-button
        style="position:fixed;right:25px;z-index:999"
        :loading="loading"
        size="small"
        icon="el-icon-printer"
        @click="printThisPage"
        type="primary"
      >打印
      </el-button
      >
    </template>

    <div class='dialysisPage' style="padding-top:40px;">
      <printOne :list="list" :patient="patient" :order="order" :admin="admin"></printOne>
    </div>
  </div>
</template>

<script>
  import { getHisOrderDetailCollect } from '@/api/his/his'
  import { uParseTime } from '@/utils/tools'
  import printOne from './allListTemplate/printOne'

  export default {
    name: 'allListPrint',
    components: {
      printOne
    },
    props: {
      paramsObj: Object
    },
    data() {
      return {
        list: [],
        patient: {},
        order: {},
        admin: {}
      }
    },

    created() {
      this.getInfo(this.paramsObj.id)

    },
    methods: {
      getTimes(time) {
        return uParseTime(time, '{y}-{m}-{d} {h}:{i}')
      }, getInfo(order_id) {
        let params = {
          id: order_id
        }
        getHisOrderDetailCollect(params).then(response => {
          if (response.data.state == 0) {
            this.$message.error(response.data.msg)
            return false
          } else {
            this.order = response.data.data.order
            this.patient = response.data.data.patient
            this.admin = response.data.data.admin_info
            var order_info = response.data.data.order_info

            //获取所有项目类型进行去重
            let med_chrgitm_types = []
            for (let i = 0; i < order_info.length; i++) {
              med_chrgitm_types.push(order_info[i].med_chrgitm_type)
            }
            const obj = {}
            med_chrgitm_types = med_chrgitm_types.reduce((cur, next) => {
              obj[next] ? '' : obj[next] = true && cur.push(next)
              return cur
            }, []) // 设置cur默认类型为数组，并且初始值为空的数组

            let tempOrderInfo = []

            for (let i = 0; i < med_chrgitm_types.length; i++) {
              let obj = {
                total: 0,
                details: []
              }
              let tempDetails = []
              for (let b = 0; b < order_info.length; b++) {
                if (med_chrgitm_types[i] == order_info[b].med_chrgitm_type) {
                  tempDetails.push(order_info[b])
                }
              }

              obj.details = this.setNewData(tempDetails)
              obj.total = this.getTotal(obj.details)

              obj.details.push({
                total: obj.total,
                is_total: 1,
              })
              this.list =  this.list.concat(obj.details)
            }




          }
        })
      }, getTotal:function(items){
        let total = 0
        for(let i = 0; i < items.length; i++){
          total = Number(total) + Number((parseFloat(items[i].count) * parseFloat(items[i].price)).toFixed(2))
        }
        return total.toFixed(2)
      },setNewData(details) {
        let drug_ids = []
        let project_ids = []

        for (let i = 0; i < details.length; i++) {
          if (details[i].advice && details[i].advice.id > 0 && details[i].advice.prescription && details[i].advice.prescription.type == 1) { //药品
            let obj = {
              id: details[i].advice.drug_id,
              price: details[i].advice.price
            }
            drug_ids.push(obj)
          } else if (details[i].project && details[i].project.id > 0 && details[i].project.prescription && details[i].project.prescription.type == 2) { //项目
            let obj = {
              id: details[i].project.project_id,
              price: details[i].project.price

            }
            project_ids.push(obj)

          }

        }
        //
        // console.log('old ids')
        // console.log(drug_ids)
        // console.log(project_ids)
        // console.log('old ids')

        let new_drug_ids = this.unique(drug_ids)
        let new_project_ids = this.unique(project_ids)
        let list = []

        console.log('ids')
        console.log(new_drug_ids)
        console.log(new_project_ids)
        console.log('ids')

        if (new_drug_ids.length > 0 && new_project_ids.length == 0) {
          for (let i = 0; i < new_drug_ids.length; i++) {
            let obj = {}
            let count = 0
            for (let a = 0; a < details.length; a++) {
              if (new_drug_ids[i].id == details[a].advice.drug_id && new_drug_ids[i].price == details[a].advice.price) {
                obj['name'] = details[a].advice.advice_name
                obj['spec'] = details[a].advice.drug.drug_spec
                obj['unit'] = details[a].advice.drug.max_unit

                obj['med_chrgitm_type'] = this.getType(details[a].med_chrgitm_type)
                obj['price'] = parseFloat(details[a].pric)
                obj['is_total'] = 2
                count = count + details[a].cnt
              }
            }
            obj['count'] = count
            list.push(obj)
          }
        }

        if (new_drug_ids.length == 0 && new_project_ids.length > 0) {
          for (let i = 0; i < new_project_ids.length; i++) {
            let obj = {}
            let count = 0
            for (let a = 0; a < details.length; a++) {
              if (new_project_ids[i].id == details[a].project.project_id && new_project_ids[i].price == details[a].project.price) {
               if( details[a].project.type == 2){
                 obj['name'] = details[a].project.project.project_name
               }else if(details[a].project.type == 3){
                 obj['name'] = details[a].project.good_info.good_name
               }
                obj['unit'] = details[a].project.unit

                obj['spec'] = '1'
                obj['med_chrgitm_type'] = this.getType(details[a].med_chrgitm_type)
                obj['price'] = parseFloat(details[a].pric)
                obj['is_total'] = 2

                count = count + details[a].cnt
              }
            }
            obj['count'] = count
            list.push(obj)
          }
        }

        return list

      }, unique(array) {
        // res用来存储结果
        var res = []
        for (var i = 0, arrayLen = array.length; i < arrayLen; i++) {
          for (var j = 0, resLen = res.length; j < resLen; j++) {
            if (array[i].id === res[j].id && array[i].price === res[j].price) {
              break
            }
          }
          // 如果array[i]是唯一的，那么执行完循环，j等于resLen
          if (j === resLen) {
            res.push(array[i])
          }
        }
        return res
      },

      getType(med_chrgitm_type) {
        switch (med_chrgitm_type) {
          case '01':
            return '床位费'
            break
          case '02':
            return '诊察费'

            break
          case '03':
            return '检查费'

            break
          case '04':
            return '化验费'
            break
          case '05':
            return '治疗费'

            break
          case '06':
            return '手术费'

            break
          case '07':
            return '护理费'

            break
          case '08':
            return '材料费'

            break
          case '09':
            return '西药费'

            break
          case '10':
            return '中药饮片费'

            break
          case '11':
            return '中成药费'

            break
          case '12':
            return '一般诊疗费'

            break
          case '13':
            return '挂号费'

            break
          case '14':
            return '其他费'

            break

        }

      },
      printThisPage() {

        const style =
          '@media print {.allListTitle{font-size: 24px;text-align: center;font-weight: bold;margin-bottom: 10px;}.allListInfo{display: flex;font-size: 16px;justify-content: space-between;margin: 10px 0;} .allListTable{width: 100%;text-align: center;border-collapse: collapse;line-height: 40px;font-size: 14px;border-color: #000;text-align:left;}.allListTable tr td {padding: 0 5px;}.tableBottom{font-size: 16px;display: flex;margin-top: 20px;}.tableBottomOne{margin-right: 40px;}}'
        printJS({
          printable: 'allList-print',
          type: 'html',
          style: style,
          scanStyles: false
        })

        // if (this.org_template_info.template_id == 1) {
        //   printJS({
        //     printable: "dialysis-print-box",
        //     type: "html",
        //     style: style,
        //     scanStyles: false
        //   });
        // }
      }
    }

  }
</script>

<style>
  .dialysis-print-order {
    width: 960px;
    margin: 0 auto;
  }

  .dialysis-print-order .order-yy-name {
    margin: auto;
    text-align: center;
    font-size: 20px;
    letter-spacing: 5px;
  }

  .dialysis-print-order .order-title {
    margin: auto;
    font-weight: 600;
    text-align: center;
    font-size: 22px;
    padding: 10px;
  }

  .dialysis-print-order .table-box {
    width: 100%;
    line-height: 23px;
    font-size: 14px;
  }

  .dialysis-print-order .print-table {
    width: 100%;
    text-align: center;
    border-collapse: collapse;
    line-height: 40px;
    font-size: 14px;
    border-color: #000;
  }

  .dialysis-print-order .print-table-no {
    width: 100%;
    text-align: center;
    border-collapse: collapse;
    font-size: 14px;
  }

  .dialysis-print-order .under-line {
    border-bottom: 1px solid #999;
    width: 95%;
    text-align: center;
    margin-left: 2px;
  }

  .dialysis-print-order .title-box {
    text-align: center;
    font-size: 16px;
  }

  .dialysis-print-order .radio-lebel-box {
    font-weight: 400;
    cursor: pointer;
  }

  .dialysis-print-order .radio-no {
    opacity: 0;
    outline: none;
    position: absolute;
    margin: 0;
    width: 0;
    height: 0;
    z-index: -1;
  }

  .dialysis-print-order .radio-inner {
    white-space: nowrap;
    cursor: pointer;
    outline: none;
    display: inline-block;
    line-height: 1;
    position: relative;
    vertical-align: middle;
  }

  .dialysis-print-order .radio-fang {
    display: inline-block;
    position: relative;
    border: 1px solid #000;
    box-sizing: border-box;
    width: 14px;
    height: 14px;
    background-color: #fff;
    z-index: 1;
    transition: border-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46),
    background-color 0.25s cubic-bezier(0.71, -0.46, 0.29, 1.46);
  }

  .dialysis-print-order .is-checked-radio::after {
    content: "√";
    font-size: 15px;
  }

  .dialysis-print-order .print-table-no tr td {
    padding: 8px 5px;
    line-height: 25px;
  }

  .dialysis-print-order .print-table tr td {
    padding: 1px 1px;
    /*line-height: 25px;*/
  }

  .es-img {
    height: 30px;
  }

  .advice-name {
    text-align: left;
  }

  .advice-children {
    display: flex;
  }

  .title-box-pro {
    border: 0 #fff;
    line-height: 25px;
    height: 25px;
    text-align: left;
    padding-left: 10px !important;
  }

  .title-box-pro-tr {
    border: 0 #fff;
  }

  .text-align-left {
    text-align: left !important;
    padding-left: 10px !important;
    font-size: 14px !important;
    line-height: 25px;
  }

  .print-table-tr-new td {
    line-height: 20px !important;
  }

  .border-top-solid {
    border: solid 1px #000;
  }

  .print-template-two tr {
    line-height: 30px;
  }

  .table-box1 {
    border: 1px solid #000;
    width: 100%;
    line-height: 30px;
    font-size: 14px;
    border-collapse: collapse;
  }

  .table-box1 tr {
    border-bottom: 1px solid #000;
  }
</style>

<style lang="scss">

  .newContainer {

  .dialysisPage::-webkit-scrollbar {
    height: 15px;
  }

  .el-date-editor {

  .el-input__inner {
    padding-right: 0px;
  }

  }
  .el-table td, .el-table th {
    text-align: center;
  }

  }
  .newContainer::-webkit-scrollbar {
    height: 15px !important;
  }
</style>
