<template>
  <div>
    <div style="display: flex;justify-content: space-between;margin-bottom:10px;">
      <div>
        <el-select size="small" v-model="item_type" placeholder="请选择"
                   style="width:150px;margin-left:10px;" @change="changeItem">
          <el-option
              label="全部"
              value="0">
          </el-option>
          <el-option
              v-for="(item,index) in items"
              :key="index"
              :label="item.name"
              :value="item.id">
          </el-option>
        </el-select>

        <el-input
            size="small"
            style="width: 150px"
            v-model="keywords"
            class="filter-item"
        />
        <el-button
            size="small"
            style="margin: 0 10px"
            class="filter-item"
            type="primary"
            @click="searchAction"
        >搜索
        </el-button>
        <el-date-picker
            v-model="chargeDate"
            type="daterange"
            value-format="yyyy-MM-dd"
            range-separator="至"
            start-placeholder="开始日期"
            @change="changeDate"
            end-placeholder="结束日期">
        </el-date-picker>
      </div>
      <div>
      </div>
    </div>
    <el-table :data="list" border :row-style="{ color: '#303133' }" ref="table"
              :header-cell-style="{backgroundColor: 'rgb(245, 247, 250)',color: '#606266'}"
              show-summary
              max-height="600"
              v-loading="detail_loading"
              highlight-current-row>
      <el-table-column type="index" label="序号" width="60px" align="center">
           <template slot-scope="scope">{{scope.row.index}}</template>
      </el-table-column>
      <el-table-column align="center" prop="name" label="处方日期">
        <template slot-scope="scope">
          {{getTime(scope.row.record_date)}}
        </template>
      </el-table-column>
      <el-table-column align="center" prop="name" label="费用分类">
        <template slot-scope="scope">
          {{ scope.row.med_chrgitm_type }}
        </template>
      </el-table-column>
      <el-table-column align="center" prop="name" label="项目名称">
        <template slot-scope="scope">
          <span>{{scope.row.name}}</span>
        </template>
      </el-table-column>
      <el-table-column align="center" prop="name" label="规格型号">
        <template slot-scope="scope">
          {{ scope.row.spec }}
        </template>
      </el-table-column>
      <el-table-column align="center" prop="name" label="数量">
        <template slot-scope="scope">
          {{ scope.row.count }}{{ scope.row.unit }}
        </template>
      </el-table-column>
      <el-table-column align="center" prop="name" label="单价">
        <template slot-scope="scope">
          {{scope.row.price}}
        </template>
      </el-table-column>
      <el-table-column align="center" prop="name" label="金额">
        <template slot-scope="scope">
          {{ (scope.row.price * scope.row.count).toFixed(2) }}
        </template>
      </el-table-column>
      <el-table-column align="center" prop="name" label="医保类别">
        <template slot-scope="scope"></template>
      </el-table-column>

    </el-table>
  </div>
</template>


<script>
import BreadCrumb from '@/xt_pages/components/bread-crumb'
import { getGatherDetailList } from '@/api/his/his_tools'
import { uParseTime } from '@/utils/tools'
const moment = require('moment')
export default {
  components: {
    BreadCrumb

  },
  props: {
    patient_id: {
      type: Number,
      default: 0
    }
  },

  data() {

    return {
      detail_loading: false,
      tempArr: [],
      pos: 0,
      search_input: '',

      sameRowArr: [],
      keywords: '',
      tableData: [],
      tableList:[],
      chargeDate: [moment(new Date()).add('year', 0).format('YYYY-MM-DD'), moment(new Date()).add('year', 0).format('YYYY-MM-DD')],
      item_type: '0',
      items: [
        { id: 1, name: '药品' },
        { id: 3, name: '耗材' },
        { id: 2, name: '项目' }

      ],
      list:[],
    }
  },
  methods: {
    searchAction(){


    },
    changeDate() {
      this.getSummaryDetailList()
    },
    changeItem() {
      this.getSummaryDetailList()
    },
    getGatherDetailList() {
      let start_time = this.chargeDate[0]
      let end_time = this.chargeDate[1]
      let params = {
        patient_id:this.patient_id,
        start_time: start_time,
        end_time: end_time,
        type: this.item_type,
        keyword: this.keywords
      }
     getGatherDetailList(params).then(response=>{
          if (response.data.state == 0) {
            this.$message.error(response.data.msg)
            return false
          } else {
            this.order = response.data.data.order
            this.order['bedCostTotal'] = response.data.data.bedCostTotal
            this.order['operationCostTotal'] = response.data.data.operationCostTotal
            this.order['otherCostTotal'] = response.data.data.otherCostTotal
            this.order['materialCostTotal'] = response.data.data.materialCostTotal
            this.order['westernMedicineCostTotal'] = response.data.data.westernMedicineCostTotal
            this.order['chineseTraditionalMedicineCostTotal'] = response.data.data.chineseTraditionalMedicineCostTotal
            this.order['checkCostTotal'] = response.data.data.checkCostTotal
            this.order['zhenChaCostTotal'] = response.data.data.zhenChaCostTotal
            this.order['laboratoryCostTotal'] = response.data.data.laboratoryCostTotal
            this.order['treatCostTotal'] = response.data.data.treatCostTotal
            this.patient = response.data.data.patient
            this.admin = response.data.data.admin_info
            this.his_hospital = response.data.data.his_hospital
            var order_info = response.data.data.order_info

            if(this.$store.getters.xt_user.org_id == 10215 || this.$store.getters.xt_user.org_id == 0){
              //获取所有项目类型进行去重
              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: [],
                  is_total:0,
                }
                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)
               
                this.list =  this.list.concat(obj.details)
                for(let i=0;i<this.list.length;i++){
                  this.list[i].index = i
                }
              }
              let newobj = {}
              newobj['total'] = this.order.medfee_sumamt
              newobj['is_total'] = 1
              
              this.list.push(newobj)
            }else{
              console.log("hh2332322323232332232332",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])
                  }
                }
                console.log("tempdetail2323323232322332233223",tempDetails)
                obj.details = this.setNewData(tempDetails)

                obj.total = this.getTotal(obj.details)
                obj.details.push({
                  total: obj.total,
                  is_total: 1,
                })
                console.log("obj3232232332323223",obj.details)
                this.list =  this.list.concat(obj.details)
                for(let i=0;i<this.list.length;i++){
                  this.list[i].index = i+1
                }
                console.log("list32233223233332232323232323",this.list)
             }
          }
        }
     })
    },
    getAdviceName(id){
      var drug_name = ""
      for(let i= 0;i<this.tableData.length;i++){
         if(id == this.tableData[i].advice_id){
           drug_name = this.tableData[i].advice.advice_name
         }
      }
      return drug_name
    },
    getProjectName(id){
     var project_name = ""
     for(let i=0;i<this.tableData.length;i++){
       if(id == this.tableData[i].project_id){
         project_name = this.tableData[i].project.project.project_name
       }
     }
     return project_name
    },
    setNewData(details) {
      console.log("detail233223233223",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,
              record_date:details[i].advice.advice_date
            }
            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,
              record_date:details[i].advice.record_date
            }
            project_ids.push(obj)

          }

        }
   
        let new_drug_ids = this.unique(drug_ids)
        let new_project_ids = this.unique(project_ids)
        let list = []
        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.dose +   details[a].advice.drug.dose_unit+"*" +  details[a].advice.drug.min_number +   details[a].advice.drug.min_unit+"/"+ details[a].advice.drug.max_unit
                obj['unit'] = details[a].advice.drug.min_unit
                obj['medicine_insurance_kind'] = this.getMedicineInsuranceType(details[a].chrgitm_lv)
                obj['med_chrgitm_type'] = this.getType(details[a].med_chrgitm_type)
                obj['price'] = parseFloat(details[a].pric)
                obj['is_total'] = 2
                obj['record_date'] = details[a].advice.record_date
                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
                 obj['spec'] = ''
                 obj['unit'] = details[a].project.project.unit


               }else if(details[a].project.type == 3){
                 obj['name'] = details[a].project.good_info.good_name
                 obj['spec'] = ''
                 obj['unit'] = details[a].project.good_info.packing_unit

               }
                obj['medicine_insurance_kind'] = this.getMedicineInsuranceType(details[a].chrgitm_lv)
                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
      }, 
    
      getMedicineInsuranceType(type) {
        switch (type) {
          case "01":
            return '甲类'
            break
          case "02":
            return '乙类'

            break
          case "03":
            return '自费'
            break

        }

      },
       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

        }
      },
      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
      },
      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)
      },
      getTimes(time) {
       return uParseTime(time, '{y}-{m}-{d}')
     },
  },
  created() {
    this.getGatherDetailList()

  }
}
</script>
