<template>
    <div>
        <crumbs title="诊断依据数据维护" style="min-width: 980px">
            <el-form :inline="true" class="demo-form-inline">
                <el-form-item label="诊断名称：">
                    <el-input size="mini" v-model="filter.disName" placeholder="诊断名称" clearable></el-input>
                </el-form-item>
                 <el-form-item label="操作人：">
                    <el-input size="mini" v-model="filter.modifier" placeholder="操作人" clearable></el-input>
                </el-form-item>
                <el-form-item label="校验数据：">
                    <el-select size="mini" v-model="filter.hasQuestion" placeholder="标签类型" clearable>
                        <el-option v-for="item in dataTypeList" :label="item.name" :value="item.key" :key="item.key"></el-option>
                    </el-select>
                </el-form-item>
                <el-form-item>
                    <el-button size="mini" @click="filterDatas">确认</el-button>
                     <el-button size="mini" @click="verifyAllData" >校验全部数据</el-button>
                    <el-button size="mini" type="warning" @click="addDiagBase">添加诊断依据</el-button>
                </el-form-item>
            </el-form>
        </crumbs>
        <div class="contents">
            <el-table
                :data="list"
                border
                style="width: 100%">
                <el-table-column
                    :resizable = "false"
                    type="index"
                    :index = 'indexMethod'
                    label="编号"
                    width="60">
                </el-table-column>
                <el-table-column
                    :resizable = "false"
                    prop="gmtModified"
                    label="操作时间"
                    width="180">
                </el-table-column>
                <el-table-column
                    :resizable = "false"
                    prop="disName"
                    label="诊断名称">
                </el-table-column>
                <el-table-column
                    :resizable = "false"
                    label="校验数据">
                    <template slot-scope="scope" >
                        <span :class="scope.row.hasQuestion == '0' ? '': scope.row.hasQuestion == '1'? 'hsaQuestion' :scope.row.hasQuestion == '2'?'hasTemp':''">
                            {{scope.row.hasQuestion == "0" ? "无问题词" : scope.row.hasQuestion == "1"? "有问题词":scope.row.hasQuestion == "2"?"暂存数据":""}}
                        </span>
                    </template>
                </el-table-column>
                <el-table-column
                    :resizable = "false"
                    prop="neoUpdate"
                    label="最后更新图谱时间">
                </el-table-column>
                <el-table-column
                    :resizable = "false"
                    prop="modifier"
                    label="操作人">
                </el-table-column>
                <el-table-column
                    :resizable = "false"
                    prop="operate"
                    label="操作">
                    <template slot-scope="scope">
                        <el-button  @click="modifyDiagBase(scope.row, 'modify')" type="text" size="small">修改</el-button>
                        <span style="margin:0 3px;">|</span>
                        <el-button  @click="modifyDiagBase(scope.row,'copy')" 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">
            <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>
    </div>
</template>

<script>
import api from '@api/diagBase.js';
import apis from '@api/icss.js';
import config from '@api/config.js';

export default {
    name: 'diagBase',
    data: function() {
        return {
            list: [],
            dataTypeList: [],
            searched: false,
            filter: {
                disName: '', //诊断名称
                modifier: '', //操作人
                hasQuestion: '', //有无问题词
            },
            currentPage: 1,
          pageSize: config.pageSize,
          pageSizeArr:config.pageSizeArr,
          pageLayout:config.pageLayout,
            total: 0,
            modifier: '',
        }
    },
    created() {
      
        this.$nextTick(()=>{
          this.getDropList()
          this.getDataList()
          const userLoginDTO= JSON.parse(localStorage.getItem('userLoginDTO'))
          this.modifier = userLoginDTO && userLoginDTO.linkman
        }) 
       
    },
  watch: {
    'filter': {
      handler: function () {
        this.searched = false;
      },
      deep: true
    }
  },
  beforeRouteEnter(to, from, next) {
    next(vm => {
      Object.assign(vm, to.params);
    })
  },
    methods: {
      handleSizeChange(val){
        this.pageSize = val;
        this.getDataList();
      },
        getDropList() {
          return apis.getKnowledgeEnums().then((res) =>{
              if(res.data.code === '0') {
                  this.dataTypeList = res.data.data.hasQuestionEnum
              }
                 
          })
        },
        getDataList(isTurnPage) {
            const param = this.getFilterItems(isTurnPage);
            setTimeout(()=>{
              this.searched = true;
            },0)
            api.diagBasePage(param).then((res) => {
                this.list = res.data.data.records
                this.total = res.data.data.total;
            })
        },
        filterDatas() {
            this.currentPage = 1;
            this.getDataList();
        },
        addDiagBase() {
          const pam = this.searched ? {
            currentPage: this.currentPage,
            pageSize:this.pageSize,
            filter: this.filter
          } : {currentPage: this.currentPage,
            pageSize:this.pageSize};
          this.$router.push({name: 'AddDiagBase', params: pam});
        },
        verifyAllData() {
          const loading = this.$loading({
            lock: true,
            text: 'Loading',
            spinner: 'el-icon-loading',
            background: 'rgba(0, 0, 0, 0.7)'
          });
          api.diagBaseVerifyAllData({}).then((res) => {
            loading.close();
            const {code,data,msg} = res.data;
            if(code === '0') {
              this.warning('校验完成','success')
              this.currentPage = 1;
               this.pageSize = 10,
               this.filter.disName = '',
               this.filter.modifier = '', //操作人
               this.filter.hasQuestion = ''

              this.getDataList()
            } else {
                this.warning(msg)
            }
          })
        },
        modifyDiagBase(row, type) {
            api.diagBaseGetDetail({id:row.id}).then((res)=>{
                const {code,data,msg} = res.data;
                if(code=='0'){
                    const item = Object.assign({},row,data);
                    const pam = this.searched ? {
                      currentPage: this.currentPage,
                      pageSize:this.pageSize,
                      filter: this.filter
                    } : {currentPage: this.currentPage,
                      pageSize:this.pageSize};
                    if(type == 'modify') {
                      this.$router.push({
                        name: 'AddDiagBase',
                        params: Object.assign(pam, {isEdit: true, data: item})
                      });
                    } else if( type == 'copy') {
                      this.$router.push({
                        name: 'AddDiagBase',
                        params: Object.assign(pam, {isCopy: true, data: item})
                      });
                    } else {
                        return
                    }
                }else{
                    this.$message({
                    message: msg,
                    type: 'warning'
                    });
                }
            });
        },
        currentChange(next) {
            this.currentPage = next;
            this.getDataList(true);
            // if (this.cacheData[next]) {       //如果已请求过该页数据，则使用缓存不重复请求
            //     this.list = this.cacheData[next];
            // } else {
            //     this.getDataList();
            // }
        },
        getFilterItems(isTurnPage) {
            if(isTurnPage&&!this.searched){
              this.clearFilter();
            };
            const param = {
                current: this.currentPage,
                size: this.pageSize,
                disName: this.filter.disName.trim(),
                modifier: this.filter.modifier, //操作人
                hasQuestion: this.filter.hasQuestion, //有无问题词
            };
            return param;
        },
        indexMethod(index) {
            return ((this.currentPage - 1) * this.pageSize) + index + 1;
        },
        warning(msg,type){
          this.$message({
            showClose: true,
            message:msg,
            type:type||'warning'
          })
        },
       clearFilter(){
          this.filter={
            disName: '', //诊断名称
            modifier: '', //操作人
            hasQuestion: '', //有无问题词
          };
        },
        showConfirmDialog(msg,resolve){
          this.$alert(msg, '提示', {
            confirmButtonText: '确定',
            type: 'warning'
          }).then(() => {
            resolve();
          }).catch(() => {});
        },
        showDelDialog(id){
          this.showConfirmDialog('是否删除该诊断依据？',()=>{
            api.diagBaseDelete({id:id,modifier:this.modifier,isDeleted:'Y',remark:''}).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)=>{
              this.warning(error);
            })
          });
        }
    }
}
</script>


<style lang="less">
    @import "../../less/admin.less";
    .el-form--inline .el-form-item__content {
      vertical-align: text-bottom;
    }
    .delete{
       color: red;
    }
    .delete:hover {
        color: red;
    } 
    .pagination {
        min-width: 1010px;
    }
    .hsaQuestion {
        color: red;
    }
    .hasTemp{
      color: blue;
    }
</style>