<template>
  <div>
    <crumbs title="调用记录" style="min-width: 1200px" class="knowledgeTitle">
      <el-form :inline="true" :rules="rulesForm" class="demo-form-inline">
        <el-form-item label="患者标识：" prop="patientId">
          <el-input
            size="mini"
            v-model="filter.patientId"
            placeholder="输入规则名称"
            clearable
          ></el-input>
        </el-form-item>
        <el-form-item label="服务名称：" prop="sceneName">
          <el-input
            size="mini"
            v-model="filter.sceneName"
            placeholder="输入规则名称"
            clearable
          ></el-input>
        </el-form-item>
        <el-form-item label="接收时间: ">
          &nbsp;&nbsp;
          <el-date-picker
            v-model="recepDate"
            type="datetimerange"
            align="right"
            size="small"
            start-placeholder="开始日期"
            end-placeholder="结束日期"
            style="width: 240px"
            :default-time="['12:00:00', '08:00:00']"
            format="yyyy-MM-dd HH:mm:ss"
            value-format="yyyy-MM-dd HH:mm:ss"
          >
          </el-date-picker>
        </el-form-item>
        <el-form-item label="响应时间: "
          >&nbsp;&nbsp;
          <el-date-picker
            v-model="resDate"
            type="datetimerange"
            align="right"
            size="small"
            start-placeholder="开始日期"
            end-placeholder="结束日期"
            style="width: 240px"
            :default-time="['12:00:00', '08:00:00']"
            format="yyyy-MM-dd HH:mm:ss"
            value-format="yyyy-MM-dd HH:mm:ss"
          >
          </el-date-picker>
        </el-form-item>
        <!-- <el-form-item label="状态：">
          <el-select
            v-model="filter.successFlag"
            clearable
            placeholder="请选择"
            size="mini"
          >
            <el-option
              v-for="item in stateSelect"
              :key="item.successFlag"
              :label="item.name"
              :value="item.successFlag"
            ></el-option>
          </el-select>
        </el-form-item> -->
        <!-- <el-form-item label="院区：" prop="subHospitalName">
          <el-input
            size="mini"
            v-model="filter.subHospitalName"
            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" :rules="rulesForm" :inline="true">
        <el-form-item label="状态：">
          <el-select
            v-model="filter.successFlag"
            clearable
            placeholder="请选择"
            size="mini"
          >
            <el-option
              v-for="item in stateSelect"
              :key="item.successFlag"
              :label="item.name"
              :value="item.successFlag"
            ></el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="院区：">
          <el-input
            size="mini"
            v-model="filter.subHospitalName"
            placeholder="输入规则名称"
            clearable
          ></el-input>
        </el-form-item>
        <el-form-item>
          <el-button size="mini" @click="filterDatas">检索</el-button>
        </el-form-item>
      </el-form>
    </crumbs>
    <div class="contents knowledgeContents">
      <el-table :data="list" border style="width: 100%">
        <!-- <el-table-column type="index" :index="indexMethod" label="编号" width="60"></el-table-column> -->
        <el-table-column label="患者标识" align="center" width="200">
          <template slot-scope="scope">
            <!--<el-tooltip
              v-if="scope.row.parDescription.length>8"
              class="item"
              effect="dark"
              :content="scope.row.parDescription"
              placement="top"
            >
              <span>{{scope.row.parDescription.slice(0,8)+'...'}}</span>
            </el-tooltip>-->
            <span>{{ scope.row.patientId === null? '-' : scope.row.patientId }}</span>
          </template>
        </el-table-column>
        <el-table-column label="服务名" align="center">
          <template slot-scope="scope">{{ scope.row.sceneName }}</template>
        </el-table-column>
        <el-table-column prop="parConceptName" label="请求内容" align="center" width="100">
          <template slot-scope="scope">
            <el-button
              type="text"
              size="small"
              @click="reqData(scope.row)"
              >详情</el-button
            >
            <!--<el-tooltip
              v-if="scope.row.parConceptName.length>8"
              class="item"
              effect="dark"
              :content="scope.row.parConceptName"
              placement="top"
            >
              <span>{{scope.row.parConceptName.slice(0,8)+'...'}}</span>
            </el-tooltip>-->
            <!-- <span>{{scope.row.parConceptName}}</span> -->
          </template>
        </el-table-column>
        <el-table-column prop="parLibTypeName" label="响应内容" align="center" width="100">
          <template slot-scope="scope">
            <el-button
              type="text"
              size="small"
              @click="respData(scope.row)"
              >详情</el-button
            >
          </template>
        </el-table-column>
        <el-table-column
          prop="gmtReq"
          label="接收时间"
          align="center"
        ></el-table-column>
        <el-table-column
          prop="gmtResp"
          label="响应时间"
          align="center"
        ></el-table-column>
        <!-- <el-table-column prop="modifierName" label="操作人">
          <template slot-scope="scope">
            <el-tooltip
              v-if="scope.row.modifierName&&scope.row.modifierName.length>8"
              class="item"
              effect="dark"
              :content="scope.row.modifierName"
              placement="top"
            >
              <span>{{(scope.row.modifierName||'').slice(0,8)+'...'}}</span>
            </el-tooltip>
            <span
              v-if="scope.row.modifierName&&scope.row.modifierName.length<9"
            >{{scope.row.modifierName}}</span>
          </template>
        </el-table-column> -->
        <el-table-column
          prop="execTime"
          label="耗时（ms）"
          align="center"
          width="100"
        ></el-table-column>
        <el-table-column label="状态" width="100" fixed="right" align="center">
          <template slot-scope="scope">
            <el-button
              type="text"
              size="small"
              @click="editData(scope.row.parId)"
              align="center"
              :style="scope.row.successFlag === 1? 'color: #48c5d7;' : 'color:#ff0000'"
            >
              {{ scope.row.successFlag === 1 ? "成功" : "失败" }}
            </el-button>
          </template>
        </el-table-column>
      </el-table>
      <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>
      <!-- 请求弹出框 -->
      <el-dialog
        title="请求日志信息"
        :visible.sync="reqVisible"
        width="450px"
        height="280px"
        >
        <div>{{params}}</div>
      </el-dialog>

      <!-- 响应内容弹出框 -->
      <el-dialog
        title="响应日志信息"
        :visible.sync="respVisible"
        width="450px"
        height="280px"
        >
        <div>{{result}}</div>
      </el-dialog>
    </div>
  </div>
</template>

<script>
import api from "@api/knowledgeLib.js";
import config from "@api/config.js";
import utils from "@api/utils.js";

export default {
  name: "ZskRuleManager",
  data: function () {
    return {
      list: [],
      value2: "",
      stateSelect: [
        { successFlag: "", name: "全部" },
        { successFlag: 1, name: "成功" },
        { successFlag: 0, name: "失败" },
      ],
      ruleTypeList: [],
      searched: false,
      filter: {
        successFlag: "",
        patientId: "",
        sceneName: "",
        subHospitalName: '' // 院区
      },
      cacheData: {},
      currentPage: 1,
      pageSize: config.pageSize,
      pageSizeArr: config.pageSizeArr,
      pageLayout: config.pageLayout,
      total: 0,
      titleWidth: "970px", //头部最小宽度
      recepDate: '', // 接收日期
      resDate: '', // 响应日期
      reqVisible: false,
      respVisible: false,
      params: '',
      result: ''
    };
  },
  created() {
    let that = this;
    //返回时避免参数未赋值就获取列表
    setTimeout(function () {
      that.getDataList();
    });
  },
  watch: {
    filter: {
      handler: function () {
        this.searched = false;
      },
      deep: true,
    },
  },
  // beforeRouteEnter(to, from, next) {
  //     next(vm => {
  //         //const pm = to.param;
  //         Object.assign(vm, to.params);
  //         vm.inCurrentPage=to.params.currentPage;
  //     })
  // },
  methods: {
    // 请求内容展示
    reqData(row){
      console.log('请求内容：', row);
      this.reqVisible = true
      this.params = row.params
      console.log('请求内容：', this.params);
    },

    // 响应内容展示
    respData(row){
      console.log("响应内容：", row);
      this.respVisible = true
      this.result = row.result
    },

    statusTrans(type) {
      const obj = this.ruleTypeList.find((it) => it.type === type);
      return obj && obj.name;
    },
    handleSizeChange(val) {
      this.pageSize = val;
      this.currentPage = utils.getCurrentPage(
        this.currentPage,
        this.total,
        this.pageSize
      );
      this.getDataList();
    },
    filterDatas() {
      this.currentPage = 1;
      this.getDataList(1);
    },

    getDataList(flag, 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
        .getCallRecord(params)
        .then((res) => {
          loading.close();
          if (res.data.code == "0") {
            const data = res.data.data;
            for (let j = 0; j < data.records.length; j++) {
              data.records[j].successFlag == "1" ? "成功" : "失败";
            }
            this.list = data.records;
            console.log("调用接口数据：", this.list);
            if (!flag) {
              //搜索时不缓存
              this.cacheData[params.current] = data.records;
            } else {
              this.cacheData = {};
            }
            this.total = data.total;
            if (this.inCurrentPage !== undefined) {
              this.currentPage = this.inCurrentPage;
              this.inCurrentPage = undefined;
            }
          } else {
            this.warning(res.data.msg || "获取列表数据失败");
          }
        })
        .catch((error) => {
          loading.close();
          console.log(error);
        });
    },
    getFilterItems(isTurnPage) {
      //翻页时筛选条件没点确定则清空
      if (isTurnPage && !this.searched) {
        this.clearFilter();
      }
      const param = {
        current: this.inCurrentPage || this.currentPage,
        size: this.pageSize,
        patientId: this.filter.patientId, // 患者标识
        sceneName: this.filter.sceneName, // 服务名
        successFlag: this.filter.successFlag,
        startGmtReq: this.recepDate ? this.recepDate[0] : null,
        endGmtReq: this.recepDate ? this.recepDate[1] : null,
        startGmtResp: this.resDate ? this.resDate[0] : null,
        endGmtResp: this.resDate ? this.resDate[1] : null,
        subHospitalName: this.filter.subHospitalName.trim()
      };
      return param;
    },
    indexMethod(index) {
      return (this.currentPage - 1) * this.pageSize + index + 1;
    },
    currentChange(next) {
      this.currentPage = next;
      /*if (this.cacheData[next]) {       //如果已请求过该页数据，则使用缓存不重复请求
                  this.list = this.cacheData[next];
                } else {*/
      this.getDataList(1, true);
      //}
    },
    warning(msg, type) {
      this.$message({
        showClose: true,
        message: msg,
        type: type || "warning",
      });
    },
    showConfirmDialog(msg, resolve) {
      this.$alert(msg, "提示", {
        confirmButtonText: "确定",
        type: "warning",
      })
        .then(() => {
          resolve();
        })
        .catch(() => {});
    },
    showDelDialog(row, isDelete) {
      const params = {
        id: row.parId,
      };
      const txt = row.parStatus === 0 ? "重新启用" : "禁用";
      const warningTxt = isDelete
        ? "是否删除该规则？可能对现有系统造成影响"
        : "是否" + txt + "该条数据？";
      const handleFn = isDelete
        ? api.deleteRule
        : row.parStatus === 0
        ? api.saveRuleApply
        : api.deleteRuleApply;
      this.showConfirmDialog(warningTxt, () => {
        handleFn(params)
          .then((res) => {
            if (res.data.code == "0") {
              if (!this.searched) {
                //未点确认时清空搜索条件
                this.clearFilter();
              }
              if (isDelete) {
                //恢复成功后跳转到筛选条件的首页
                this.currentPage = 1;
              } else {
                if (this.filter.parStatus !== "" && this.list.length === 1) {
                  //有启用状态筛选条件且当前页只有最后一条数据删除时，删除成功后跳转到前一页
                  this.currentPage =
                    this.currentPage === 1 ? 1 : this.currentPage - 1;
                }
              }
              this.warning(res.data.msg || "操作成功", "success");
              this.getDataList();
            } else {
              this.warning(res.data.msg);
            }
          })
          .catch((error) => {
            this.warning(error);
          });
      });
    },
    clearFilter() {
      this.filter = {
        successFlag: "",
        patientId: "",
        sceneName: "",
        subHospitalName: "",
        recepDate: "",
        resDate: ""
      };
    },
    update() {
      const loading = this.$loading({
        lock: true,
        text: "Loading",
        spinner: "el-icon-loading",
        background: "rgba(0, 0, 0, 0.7)",
      });
      api
        .zskUpdateAll()
        .then((res) => {
          loading.close();
          if (res.data.code == "0") {
            this.warning("更新成功", "success");
            this.getDataList();
          } else {
            this.warning(res.data.msg || "更新失败，请重试");
          }
        })
        .catch((error) => {
          loading.close();
          this.warning("更新失败，请重试");
        });
    },
  },
};
</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;
}
.review {
  color: #22ccc8;
}
.el-table .cell {
  overflow: hidden;
  white-space: nowrap;
}
#upFile {
  display: none !important;
}
.unvailable {
  color: #fe7d3d;
  &:hover {
    color: #f19061;
  }
}

.demo-form-inline {
  .el-input--mini {
    /deep/.el-input__inner {
      width: 100%;
    }
  }
}

.el-date-editor {
  .el-input {
    width: 150px !important;
  }
}

.secLine.el-form {
  position: relative;
  top: -10px;
  color: #ff0000;
}

</style>