<template>
  <div>
    <crumbs title="检验关联维护" style="min-width: 1060px" class="knowledgeTitle">
      <el-form :inline="true" class="demo-form-inline">
        <el-form-item class="selectMedicine" label="标准术语状态：">
          <el-select size="mini" v-model="filter.status" placeholder="请选择" clearable>
            <el-option
              v-for="item in statusList"
              :label="item.name"
              :value="item.id"
              :key="item.id"
            ></el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="匹配状态：" class="selectMedicine">
          <el-select size="mini" v-model="filter.match" placeholder="请选择" clearable>
            <el-option v-for="item in matchList" :label="item.name" :value="item.id" :key="item.id"></el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="检验套餐：">
          <el-input size="mini" v-model="filter.hisName" placeholder="请输入" clearable></el-input>
        </el-form-item>
        <el-form-item label="检验细项：">
          <el-input size="mini" v-model="filter.hisDetailName" placeholder="请输入" clearable></el-input>
        </el-form-item>
        <el-form-item label="标准检验项：">
          <el-input size="mini" v-model="filter.uniqueName" placeholder="请输入" clearable></el-input>
        </el-form-item>
        <el-form-item>
          <el-button size="mini" @click="filterDatas">检索</el-button>
        </el-form-item>
      </el-form>
      <el-form class="secLine" :inline="true">
        <el-form-item>
          <el-button type="text" class="downTemplate" @click="exportModule">导入模板下载</el-button>
          <input type="file" name="uploadfile " id="upFile" @change="uploadFile($event)" />
          <!-- accept=".csv, application/vnd.ms-excel, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" -->
          <el-button size="mini" @click="handleMatchData">预匹配</el-button>
          <el-button size="mini" @click="importPage" style="margin:0 10px">{{uploadInfo}}</el-button>
          <input type="file" name="uploadfile " id="upFileMatch" @change="uploadFileMatch($event)" />
          <el-button size="mini" @click="exportData">导出</el-button>
        </el-form-item>
        <el-form-item>
          <el-button size="mini" type="warning" @click="addRelation">添加关联</el-button>
        </el-form-item>
      </el-form>
    </crumbs>
    <div class="contents knowledgeContents">
      <el-table :data="list" border style="width: 100%">
        <el-table-column :resizable="false" type="index" :index="indexMethod" label="编号" width="80"></el-table-column>
        <el-table-column :resizable="false" prop="gmtModified" label="操作时间" width="180"></el-table-column>
        <el-table-column :resizable="false" prop="hisName" label="检验套餐" show-overflow-tooltip></el-table-column>
        <el-table-column :resizable="false" prop="hisDetailName" label="检验细项" show-overflow-tooltip></el-table-column>
        <el-table-column :resizable="false" prop="uniqueName" label="标准检验项" show-overflow-tooltip></el-table-column>
        <el-table-column :resizable="false" prop="operate" label="标准术语状态">
          <template slot-scope="scope">
            <span
              v-if="scope.row.uniqueName && scope.row.uniqueName!=''"
            >{{scope.row.status == 0?'禁用':'启用'}}</span>
          </template>
        </el-table-column>
        <el-table-column :resizable="false" prop="operate" label="匹配状态">
          <template slot-scope="scope">
            <span>{{scope.row.isMatch == 0?'未匹配':'已匹配'}}</span>
          </template>
        </el-table-column>
        <el-table-column :resizable="false" prop="operate" label="操作">
          <template slot-scope="scope">
            <el-button @click="modifyRelation(scope.row)" type="text" size="small">修改</el-button>
            <span style="margin:0 3px;">|</span>
            <el-button
              @click="showDelDialog(scope.row.id)"
              class="delete"
              type="text"
              size="small"
            >删除</el-button>
          </template>
        </el-table-column>
      </el-table>
      <div class="pagination pagepage">
        <el-pagination
          :current-page.sync="currentPage"
          @current-change="currentChange"
          background
          :page-size="pageSize"
          :page-sizes="pageSizeArr"
          @size-change="handleSizeChange"
          :layout="pageLayout"
          :total="total"
        ></el-pagination>
      </div>
    </div>

    <LtModal
      v-if="modalVisiable"
      @func="getMsgFormSon"
      :meal="'检验套餐'"
      :detail="'检验细项'"
      :standard="'检验标准术语'"
      :tip="'检验关联'"
      :type="1"
      :data="data"
    ></LtModal>
  </div>
</template>

<script>
import api from '@api/icss.js';
import config from '@api/config.js';
import utils from '@api/utils.js';
import LtModal from '@components/common/LtModal';
export default {
  name: 'Lis', //化验大小项和公表维护
  data: function() {
    return {
      list: [],
      matchList: [
        { id: '', name: '全部' },
        { id: 1, name: '已匹配' },
        { id: 0, name: '未匹配' },
        { id: 2, name: '多项匹配' }
      ],
      statusList: [
        { id: '', name: '全部' },
        { id: 1, name: '启用' },
        { id: 0, name: '禁用' }
      ],
      searched: false,
      filter: {
        hisName: '', // 检验套餐
        hisDetailName: '', //检验细项
        uniqueName: '', //标准检验项
        match: '',
        status: ''
      },
      currentPage: 1,
      pageSize: config.pageSize,
      pageSizeArr: config.pageSizeArr,
      pageLayout: config.pageLayout,
      total: 0,
      uploadInfo: '导入',
      modalVisiable: false,
      data: {}
    };
  },
  components: {
    LtModal
  },
  created() {
    const param = this.$route.params;
    if (param.currentPage) {
      this.inCurrentPage = param.currentPage;
    }
    if (param.filter) {
      this.filter = param.filter;
    }
    //返回时避免参数未赋值就获取列表
    setTimeout(() => {
      // that.clearFilter();
      this.getDataList();
    });
  },
  watch: {
    filter: {
      handler: function() {
        this.searched = false;
      },
      deep: true
    }
  },

  methods: {
    handleMatchData() {
      let inp = document.getElementById('upFileMatch');
      inp.click();
    },
    // 导入数据
    uploadFileMatch(e) {
      let fileInfo = e.target.files[0];
      let extend = fileInfo.name.substring(fileInfo.name.lastIndexOf('.') + 1);
      if (extend != 'xls' && extend != 'xlsx') {
        this.$message({ message: '请根据模板进行导入', type: 'error' });
        return;
      }
      e.preventDefault();
      let formData = new FormData();
      formData.append('file', fileInfo);
      formData.append('type', 1);
      const header = {
        headers: {
          'Content-Type': 'multipart/form-data'
        }
      };
      const loading = this.$loading({
        lock: true,
        text: '预匹配中...',
        spinner: 'el-icon-loading',
        background: 'rgba(0, 0, 0, 0.7)'
      });
      api.dataDiseaseVerify(formData, header).then(res => {
        if (res.data.code === '00020007' || res.data.code === '00020004') {
          loading.close();
          this.$alert(`${res.data.msg}`, '提示', {
            confirmButtonText: '确定',
            type: 'warning'
          })
            .then(() => {})
            .catch(() => {});
        } else {
          api.precDiseaseDataMatch(formData, header).then(res => {
            setTimeout(() => {
              loading.close();
            }, 800);
            if (res.status === 200) {
              utils.downloadExportedData(
                res.data,
                '检验关联数据（预匹配）.xls'
              );
            }
          });
        }
      });

      let inp = document.getElementById('upFileMatch');
      inp.value = '';
    },
    handleSizeChange(val) {
      this.pageSize = val;
      this.currentPage = utils.getCurrentPage(
        this.currentPage,
        this.total,
        this.pageSize
      );
      this.getDataList();
    },

    // 获取列表数据
    getDataList(isTurnPage) {
      const params = this.getFilterItems(isTurnPage);
      this.searched = true;
      const loading = this.$loading({
        lock: true,
        text: 'Loading',
        spinner: 'el-icon-loading',
        background: 'rgba(0, 0, 0, 0.7)'
      });
      api.getLisPage(params).then(res => {
        loading.close();
        if (res.data.code === '0') {
          this.list = res.data.data && res.data.data.records;
        }
        this.total = res.data.data && res.data.data.total;
        if (this.inCurrentPage !== undefined) {
          this.currentPage = this.inCurrentPage;
          this.inCurrentPage = undefined;
        }
      });
    },

    // 处理列表请求数据参数
    getFilterItems(isTurnPage) {
      //翻页时筛选条件没点确定则清空
      if (isTurnPage && !this.searched) {
        this.clearFilter();
      }
      const param = {
        current: this.inCurrentPage || this.currentPage,
        size: this.pageSize,
        hisName: this.filter.hisName.trim(),
        uniqueName: this.filter.uniqueName.trim(),
        uniqueCode: '',
        hisDetailName: this.filter.hisDetailName.trim(),
        type: 1,
        isMatch: this.filter.match,
        status: this.filter.status
      };
      return param;
    },

    filterDatas() {
      this.currentPage = 1;
      this.getDataList();
    },
    addRelation() {
      const pam = this.searched
        ? {
            currentPage: this.currentPage,
            pageSize: this.pageSize,
            filter: this.filter
          }
        : { currentPage: this.currentPage, pageSize: this.pageSize };
      this.data = {};
      this.showModal();
      // this.$router.push({ name: 'AddLis', params: pam });
    },
    // 修改诊断关联-跳转至编辑页面
    modifyRelation(row) {
      const item = Object.assign({}, row);
      const pam = this.searched
        ? {
            currentPage: this.currentPage,
            pageSize: this.pageSize,
            filter: this.filter
          }
        : { currentPage: this.currentPage, pageSize: this.pageSize };
      this.data = item;
      this.showModal();
      // this.$router.push({
      //   name: 'AddLis',
      //   params: Object.assign(pam, { isEdit: true, data: item })
      // });
    },
    currentChange(next) {
      this.currentPage = next;
      this.getDataList(true);
      // if (this.cacheData[next]) {       //如果已请求过该页数据，则使用缓存不重复请求
      //     this.list = this.cacheData[next];
      // } else {
      //     this.getDataList();
      // }
    },
    // 清空搜索参数
    clearFilter() {
      this.filter = {
        hisName: '',
        uniqueName: '',
        hisDetailName: ''
      };
    },

    indexMethod(index) {
      return (this.currentPage - 1) * this.pageSize + index + 1;
    },
    getTagType(val) {
      return val;
    },
    warning(msg, type) {
      this.$message({
        showClose: true,
        message: msg,
        type: type || 'warning'
      });
    },
    showConfirmDialog(msg, resolve) {
      this.$confirm(msg, '提示', {
        confirmButtonText: '删除',
        cancelButtonText: '取消',
        cancelButtonClass: 'cancelBtn',
        confirmButtonClass: 'confirmC',
        type: 'warning'
      })
        .then(() => {
          resolve();
        })
        .catch(() => {});
    },
    // 删除关联
    showDelDialog(id) {
      this.showConfirmDialog('是否删除该关联？', () => {
        api
          .deleteLisRecord({ id: id })
          .then(res => {
            if (res.data.code == '0') {
              if (!this.searched) {
                //未点确认时清空搜索条件
                this.clearFilter();
              }
              if (this.list.length == 1) {
                //当前在最后一页且只有一条数据时，删除后跳到前一页
                this.currentPage =
                  this.currentPage === 1 ? 1 : this.currentPage - 1;
              }
              this.getDataList();
              this.warning(res.data.msg || '操作成功', 'success');
            } else {
              this.warning(res.data.msg);
            }
          })
          .catch(error => {
            if (error.code === '900010001') {
              return false;
            }
            this.warning(error);
          });
      });
    },

    // 导出数据
    exportData() {
      this.$confirm('确定要导出全部检验关联数据吗？', '', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        cancelButtonClass: 'leftbtn',
        customClass: 'exportBox6',
        title: '提示',
        type: 'warning'
        // beforeClose: (action, instance, done) => {
        //   if (action === 'confirm') {
        //     // instance.confirmButtonLoading = true;
        //     instance.confirmButtonText = '导出中...';
        //     api.exportLisRecord().then(res => {
        //       if (res.status === 200) {
        //         setTimeout(() => {
        //           utils.downloadExportedData(res.data, '检验数据.xls');
        //           done();
        //         }, 1500);
        //       }
        //     });
        //   } else {
        //     done();
        //   }
        // }
      })
        .then(() => {
          api
            .exportLisRecord({
              type: 1,
              isMatch: this.filter.match
            })
            .then(res => {
              if (res.status === 200) {
                this.$message({ message: '导出成功', type: 'success' });
                utils.downloadExportedData(res.data, '检验数据.xls');
              }
            });
        })
        .catch(() => {
          // this.$message({ message: '导出失败', type: 'waring' });
        });
    },
    // 导入模板
    exportModule() {
      api.exportLisModule({ type: 1 }).then(res => {
        if (res.status === 200) {
          setTimeout(() => {
            utils.downloadExportedData(res.data, '检验导入模板.xls');
          }, 1500);
        }
      });
    },

    // 点击导入
    importPage() {
      let inp = document.getElementById('upFile');
      inp.click();
    },
    // 导入数据
    uploadFile(e) {
      let fileInfo = e.target.files[0];
      let extend = fileInfo.name.substring(fileInfo.name.lastIndexOf('.') + 1);
      if (extend != 'xls' && extend != 'xlsx') {
        this.$message({ message: '请根据模板进行导入', type: 'error' });
        return;
      }
      e.preventDefault();
      let formData = new FormData();
      formData.append('file', fileInfo);
      formData.append('type', 1);
      formData.append('uesrId', localStorage.getItem('uesrId'));
      formData.append(
        'hospitalId',
        JSON.parse(localStorage.getItem('hospitalLoginDTO')).id
      );
      const header = {
        headers: {
          'Content-Type': 'multipart/form-data'
        }
      };
      this.importLisRecord(formData, header);
      // this.uploadInfo = '导入中...';
      // api.importExcelDataVerify(formData, header).then(res => {
      //   if (res.data.code === '00020001') {
      //     this.$confirm(`${res.data.msg}`, '提示', {
      //       confirmButtonText: '确定',
      //       cancelButtonText: '取消',
      //       type: 'warning'
      //     })
      //       .then(() => {
      //         this.importLisRecord(formData, header)
      //       })
      //       .catch(() => {
      //         setTimeout(() => {
      //           this.uploadInfo = '导入';
      //         }, 300);
      //       });
      //   } else if (res.data.data === true) {
      //     this.importLisRecord(formData, header)
      //   }else {
      //     this.$alert(`${res.data.msg}`, '提示', {
      //       confirmButtonText: '确定',
      //       // cancelButtonText: '取消',
      //       // cancelButtonClass: 'cancelSure',
      //       // confirmButtonClass: 'sure',
      //       // customClass: 'exportConfirm',
      //       type: 'warning'
      //     })
      //       .then(() => {})
      //       .catch(() => {});

      //     setTimeout(() => {
      //       this.uploadInfo = '导入';
      //     }, 300);
      //   }
      // });
      //解决上传相同文件不触发change
      let inp = document.getElementById('upFile');
      inp.value = '';
    },
    importLisRecord(formData, header) {
      let that = this;
      api
        .importLisRecord(formData, header)
        .then(res => {
          if (res.headers['content-disposition']) {
            this.downloadUrl(res);
            this.getDataList();
          } else {
            let r = new FileReader();
            r.onload = function() {
              if (this.result) {
                const code = JSON.parse(this.result);
                if (code.code === '00020004' || code.code === '00020007') {
                  that
                    .$alert(`${code.msg}`, '提示', {
                      confirmButtonText: '确定',
                      // cancelButtonText: '取消',
                      // cancelButtonClass: 'cancelSure',
                      // confirmButtonClass: 'sure',
                      // customClass: 'exportConfirm',
                      type: 'warning'
                    })
                    .then(() => {})
                    .catch(() => {});
                }
              } else {
                that.$alert(`导入成功`, '提示', {
                  confirmButtonText: '确定',
                  // cancelButtonText: '取消',
                  // cancelButtonClass: 'cancelSure',
                  // confirmButtonClass: 'sure',
                  // customClass: 'exportConfirm',
                  type: 'success'
                });
                that.getDataList();
              }
            };
            r.readAsText(res.data);
          }

          // if (res.data.code === '00000001') {
          //   this.$alert(`医院术语字符数超出最大数量，请修改后再试`, '提示', {
          //     confirmButtonText: '确定',
          //     // cancelButtonText: '取消',
          //     // cancelButtonClass: 'cancelSure',
          //     // confirmButtonClass: 'sure',
          //     // customClass: 'exportConfirm',
          //     type: 'warning'
          //   })
          //     .then(() => {})
          //     .catch(() => {});
          //   this.getDataList(); // 重新获取列表
          //   setTimeout(() => {
          //     this.uploadInfo = '导入';
          //   }, 300);
          // } else if (res.data.data === true && res.status === 200) {
          //   this.$alert(`导入成功`, '提示', {
          //     confirmButtonText: '确定',
          //     // cancelButtonText: '取消',
          //     // cancelButtonClass: 'cancelSure',
          //     // confirmButtonClass: 'sure',
          //     // customClass: 'exportConfirm',
          //     type: 'success'
          //   })
          //     .then(() => {})
          //     .catch(() => {});
          //   this.getDataList(); // 重新获取列表
          //   setTimeout(() => {
          //     this.uploadInfo = '导入';
          //   }, 300);
          // } else {
          //   this.$alert(`${res.data.msg}`, '提示', {
          //     confirmButtonText: '确定',
          //     // cancelButtonText: '取消',
          //     // cancelButtonClass: 'cancelSure',
          //     // confirmButtonClass: 'sure',
          //     // customClass: 'exportConfirm',
          //     type: 'warning'
          //   })
          //     .then(() => {})
          //     .catch(() => {});

          //   setTimeout(() => {
          //     this.uploadInfo = '导入';
          //   }, 300);
          // }
        })
        .catch(error => {
          console.log(error);

          // this.$message({ message: '导出失败', type: 'waring' });
        });
    },
    downloadUrl(res) {
      var disposition = res.headers['content-disposition'];
      var fileName = decodeURI(
        disposition.split('filename=')[1].split(';filename*=')[0]
      );
      let blob = new Blob([res.data], { type: 'application/.xls' }); //.xls是我和后台约定好的文件格式
      let link = document.createElement('a');
      link.href = window.URL.createObjectURL(blob);
      link.download = fileName;
      link.click();
      link.remove();
    },
    /********新增编辑弹窗**********/
    showModal() {
      this.modalVisiable = true;
    },
    getMsgFormSon(data) {
      if (data == 'close') {
        this.modalVisiable = false;
      } else {
        this.modalVisiable = false;
        this.getDataList();
      }
    }
  }
};
</script>


<style lang="less" scoped>
@import '../../../less/admin.less';
/deep/ .container.knowledgeTitle {
  height: 80px;
}
/deep/ .contents.knowledgeContents {
  padding: 104px 20px 0;
}
/deep/ .secLine.el-form {
  float: right;
  display: block;
  position: relative;
  top: -5px;
}
.delete {
  color: red;
}
#upFileMatch {
  display: none;
}
.delete:hover {
  color: red;
}
.pagination {
  min-width: 1010px;
}
.downTemplate {
  margin-right: 8px;
  span {
    color: #02a7f0;
  }
}
#upFile {
  display: none !important;
}
.el-message-box {
  /deep/.cancelBtn {
    background-color: #d7d7d7;
    border-color: transparent;
  }
  /deep/.confirmC {
    background-color: #ff545b !important;
    border-color: transparent !important;
  }
}
.exportBox6 {
  /deep/ .el-message-box__btns {
    margin-top: 20px;
  }
  /deep/ .el-message-box__message {
    // text-align: center;
  }
  /deep/.leftbtn {
    background-color: #d7d7d7;
    border-color: transparent !important;
  }
  /deep/ .el-message-box__header {
    border-bottom: 1px solid #dcdfe6;
  }
}
</style>