<template>
  <BaseContainer>
    <!-- 顶部搜索条件 -->
    <template slot="search-container">
      <el-form :inline="true">
        <!-- 项目类型 -->
        <el-form-item :label="$t('trials:trials-list:form:trialType')">
          <el-select
            v-model="searchData.SponsorId"
            style="width: 150px"
            clearable
          >
            <el-option
              v-for="item in sponsorList"
              :key="item.Id"
              :label="item.SponsorName"
              :value="item.Id"
            />
          </el-select>
        </el-form-item>
        <!-- 研究方案号 -->
        <el-form-item :label="$t('trials:trials-list:table:researchNumber')">
          <el-input
            v-model="searchData.ResearchProgramNo"
            style="width: 100px"
            clearable
          />
        </el-form-item>
        <!-- 试验名称 -->
        <el-form-item :label="$t('trials:trials-list:table:experimentName')">
          <el-input
            v-model="searchData.ExperimentName"
            style="width: 100px"
            clearable
          />
        </el-form-item>

        <!-- Sponsor -->
        <el-form-item :label="$t('trials:trials-list:table:sponsor')">
          <el-input
            v-model="searchData.SponsorName"
            style="width: 100px"
            clearable
          />
        </el-form-item>

        <el-form-item>
          <!-- Search -->
          <el-button type="primary" icon="el-icon-search" @click="handleSearch">
            {{ $t("common:button:search") }}
          </el-button>
          <!-- Reset -->
          <el-button
            type="primary"
            icon="el-icon-refresh-left"
            @click="handleReset"
          >
            {{ $t("common:button:reset") }}
          </el-button>
          <!-- Export -->
          <el-button
            v-hasPermi="['trials:trials-list:export']"
            type="primary"
            icon="el-icon-download"
            :disabled="!(selectArr.length > 0)"
            @click="handleExportTrial"
          >
            {{ $t("common:button:export") }}
          </el-button>
        </el-form-item>
      </el-form>
      <span style="margin-left: auto">
        <!-- New -->
        <el-button
          v-hasPermi="['trials:trials-list:new']"
          icon="el-icon-plus"
          type="primary"
          @click="handleNew"
        >
          {{ $t("common:button:new") }}
        </el-button>
      </span>
    </template>

    <!-- 项目列表 -->
    <template slot="main-container">
      <el-table
        v-adaptive="{ bottomOffset: 60 }"
        v-loading="listLoading"
        :data="list"
        stripe
        height="100"
        @sort-change="handleSortChange"
      >
        <!-- <el-table-column type="selection" align="left" width="45" />
        <el-table-column type="index" width="40" align="left" /> -->
        <el-table-column
          prop="TrialCode"
          :label="$t('trials:trials-list:form:trialType')"
          show-overflow-tooltip
        />
        <el-table-column
          prop="ResearchProgramNo"
          :label="$t('trials:trials-list:table:researchNumber')"
          show-overflow-tooltip
          sortable="custom"
        />

        <el-table-column
          prop="ExperimentName"
          :label="$t('trials:trials-list:table:experimentName')"
          show-overflow-tooltip
          sortable="custom"
        />

        <el-table-column
          prop="Sponsor"
          :label="$t('trials:trials-list:table:sponsor')"
          show-overflow-tooltip
          sortable="custom"
        />
        <!--是否授权-->
        <el-table-column
          prop="Sponsor"
          :label="$t('trials:trials-list:table:isAccredit')"
          show-overflow-tooltip
        />
        <el-table-column
          prop="TrialStatusStr"
          :label="$t('trials:trials-list:table:status')"
          show-overflow-tooltip
          sortable="custom"
        >
          <template slot-scope="scope">
            <el-tag
              v-if="scope.row.TrialStatusStr === 'Initializing'"
              type="info"
              >{{ $fd("TrialStatusEnum", scope.row.TrialStatusStr) }}</el-tag
            >
            <el-tag
              v-if="scope.row.TrialStatusStr === 'Ongoing'"
              type="primary"
              >{{ $fd("TrialStatusEnum", scope.row.TrialStatusStr) }}</el-tag
            >
            <el-tag
              v-if="scope.row.TrialStatusStr === 'Completed'"
              type="warning"
              >{{ $fd("TrialStatusEnum", scope.row.TrialStatusStr) }}</el-tag
            >
            <el-tag
              v-if="scope.row.TrialStatusStr === 'Stopped'"
              type="danger"
              >{{ $fd("TrialStatusEnum", scope.row.TrialStatusStr) }}</el-tag
            >
          </template>
        </el-table-column>
        <el-table-column
          prop="CreateTime"
          :label="$t('trials:trials-list:table:createDate')"
          show-overflow-tooltip
          sortable="custom"
        />
        <!--授权日期-->
        <el-table-column
          prop="CreateTime"
          :label="$t('trials:trials-list:table:dateAuthorized')"
          show-overflow-tooltip
          sortable="custom"
        />
        />
        <!--授权时长-->
        <el-table-column
          prop="CreateTime"
          :label="$t('trials:trials-list:table:durationAuthorized')"
          show-overflow-tooltip
          sortable="custom"
        />
        />
        <!--失效日期-->
        <el-table-column
          prop="CreateTime"
          :label="$t('trials:trials-list:table:dateDisabled')"
          show-overflow-tooltip
          sortable="custom"
        />
        <el-table-column label="" min-width="150" align="left" fixed="right">
          <template slot-scope="scope">
            <!-- 详情 -->
            <el-button
              v-hasPermi="['trials:trials-list:panel']"
              circle
              icon="el-icon-info"
              :disabled="scope.row.IsDeleted"
              :title="$t('trials:trials-list:action:panel')"
              @click="handleDetail(scope.row)"
            />
            <!-- 编辑项目基本信息 -->
            <el-button
              v-hasPermi="['trials:trials-list:edit']"
              circle
              icon="el-icon-edit-outline"
              :disabled="scope.row.IsDeleted"
              :title="$t('trials:trials-list:action:edit')"
              @click="handleEdit(scope.row)"
            />
            <!-- 修改项目状态 -->
            <el-button
              v-hasPermi="['trials:trials-list:status']"
              circle
              icon="el-icon-edit"
              :disabled="scope.row.IsDeleted"
              :title="$t('trials:trials-list:action:status')"
              @click="handleStatus(scope.row)"
            />
            <!-- 废除项目 -->
            <el-button
              v-hasPermi="['trials:trials-list:abolish']"
              circle
              icon="el-icon-delete"
              :disabled="
                scope.row.IsDeleted ||
                scope.row.TrialStatusStr !== 'Initializing'
              "
              :title="$t('trials:trials-list:action:abolition')"
              @click="handleAbandon(scope.row)"
            />
            <!-- 代办详情 -->
            <!-- <el-button
              v-hasPermi="['trials:trials-list:abolish']"
              circle
              icon="el-icon-receiving"
              :disabled="scope.row.TrialStatusStr === 'Initializing'"
              :title="$t('trials:trials-list:action:commission')"
              @click="handleCommission(scope.row)"
            /> -->
          </template>
        </el-table-column>
      </el-table>

      <!-- 分页组件 -->
      <pagination
        class="page"
        :total="total"
        :page.sync="searchData.PageIndex"
        :limit.sync="searchData.PageSize"
        @pagination="getList"
      />
    </template>

    <!-- 新增/编辑项目 -->
    <el-dialog
      v-if="dialogVisible"
      :visible.sync="dialogVisible"
      :title="title"
      :fullscreen="true"
      append-to-body
      custom-class="base-dialog-wrapper"
    >
      <TrialForm
        :trial-id="currentId"
        @getList="getList"
        @closeDialog="closeDialog"
      />
    </el-dialog>

    <!-- 修改项目状态 -->
    <el-dialog
      v-if="statusVisible"
      :visible.sync="statusVisible"
      :close-on-click-modal="false"
      :title="$t('trials:trials-list:dialogTitle:changeStatus')"
      width="700px"
      custom-class="base-dialog-wrapper"
      append-to-body
    >
      <TrialStatusForm
        :data="currentRow"
        @closeDialog="closeStatusDialog"
        @getList="getList"
      />
    </el-dialog>

    <el-dialog
      v-if="doneDialogVisible"
      :visible.sync="doneDialogVisible"
      :title="doneTitle"
      :fullscreen="true"
      append-to-body
      custom-class="base-dialog-wrapper"
    >
      <DoneList
        :trial-id="currentId"
        @getList="getList"
        @closeDialog="doneDialogVisible = false"
      />
    </el-dialog>
  </BaseContainer>
</template>
<script>
import {
  abandonTrial,
  ifTrialCanOngoing,
  getTrialToBeDoneList,
} from "@/api/trials";
import store from "@/store";
import { mapGetters } from "vuex";
import Excel from "exceljs";
import BaseContainer from "@/components/BaseContainer";
import Pagination from "@/components/Pagination";
import TrialForm from "./components/TrialForm";
import TrialStatusForm from "./components/TrialStatusForm";
import DoneList from "./components/DoneList";
const searchDataDefault = () => {
  return {
    Code: "",
    CriterionIds: [],
    SponsorId: "",
    ReviewTypeIds: [],
    CROId: "",
    Expedited: "",
    Indication: "",
    Phase: "",
    ModalityIds: [],
    BeginDate: "",
    EndDate: "",
    AttendedReviewerType: "",
    ResearchProgramNo: "",
    ExperimentName: "",
    PageIndex: 1,
    PageSize: 20,
    Asc: false,
    SortField: "",
    SponsorName: "",
  };
};
export default {
  name: "Trials",
  components: {
    Pagination,
    BaseContainer,
    TrialForm,
    TrialStatusForm,
    DoneList,
  },
  dicts: ["ReadingStandard", "ReviewType", "ReadingType"],
  data() {
    return {
      userTypeEnumInt: zzSessionStorage.getItem("userTypeEnumInt") * 1,
      doneDialogVisible: false,
      doneTitle: null,
      selectArr: [],
      searchData: searchDataDefault(),
      list: [],
      listLoading: false,
      total: 0,
      dialogVisible: false,
      title: "",
      currentId: "",
      statusVisible: false,
      currentRow: {},
      currentUser: zzSessionStorage.getItem("userName"),
      phaseOptions: [
        { value: "I" },
        { value: "II" },
        { value: "III" },
        { value: "IV" },
      ],
      expeditedOption: this.$d.TrialExpeditedState,
      beginPickerOption: {
        disabledDate: (time) => {
          if (this.searchData.EndDate) {
            return time.getTime() > new Date(this.searchData.EndDate).getTime();
          } else {
            return time.getTime() > Date.now();
          }
        },
      },
      endpickerOption: {
        disabledDate: (time) => {
          if (this.searchData.BeginDate) {
            return (
              time.getTime() > Date.now() ||
              time.getTime() <= new Date(this.searchData.BeginDate).getTime()
            );
          } else {
            return time.getTime() > Date.now();
          }
        },
      },
    };
  },
  computed: {
    ...mapGetters(["sponsorList", "croList"]),
  },
  created() {
    this.initPage();
  },
  methods: {
    initPage() {
      this.getList();
      store.dispatch("global/getSponsorList");
      store.dispatch("global/getCROList");
    },
    // 获取项目列表信息
    getList() {
      this.listLoading = true;
      getTrialToBeDoneList(this.searchData)
        .then((res) => {
          this.list = res.Result.CurrentPageData;
          this.total = res.Result.TotalCount;
          this.listLoading = false;
        })
        .catch(() => {
          this.listLoading = false;
        });
    },

    // 查询
    handleSearch() {
      this.searchData.PageIndex = 1;
      this.getList();
    },
    // 重置
    handleReset() {
      this.searchData = searchDataDefault();
      this.getList();
    },
    // 新增项目
    handleNew() {
      // this.$router.push({ name: 'CreateTrial' })
      this.title = this.$t("trials:trials-list:dialogTitle:new");
      this.currentId = "";
      this.dialogVisible = true;
    },
    // 编辑项目
    handleEdit(row) {
      this.title = this.$t("trials:trials-list:dialogTitle:edit");
      this.currentId = row.Id;
      this.dialogVisible = true;
    },
    handleCommission(row) {
      this.doneTitle = this.$t("trials:trials-list:dialogTitle:doneTitle");
      this.currentId = row.Id;
      this.doneDialogVisible = true;
    },
    closeDialog() {
      this.dialogVisible = false;
    },
    // 状态
    handleStatus(row) {
      if (row.TrialStatusStr === "Initializing") {
        this.listLoading = true;
        ifTrialCanOngoing(row.Id)
          .then((res) => {
            this.listLoading = false;
            if (res.Result) {
              this.currentRow = { ...row };
              this.statusVisible = true;
            } else {
              this.$confirm(res.ErrorMessage, {
                type: "warning",
                showCancelButton: false,
                callback: (action) => {},
              });
            }
          })
          .catch(() => {
            this.listLoading = false;
          });
      } else {
        this.currentRow = { ...row };
        this.statusVisible = true;
      }
    },
    closeStatusDialog() {
      this.statusVisible = false;
    },
    // 废除
    handleAbandon(row) {
      this.$confirm(this.$t("trials:trials-list:message:abolition"), {
        type: "warning",
        distinguishCancelAndClose: true,
      })
        .then(() => {
          this.currentRow = { ...row };
          this.abandonTrial();
        })
        .catch(() => {});
    },
    // 废除项目
    abandonTrial() {
      this.listLoading = true;
      abandonTrial(this.currentRow.Id, true)
        .then((res) => {
          this.listLoading = false;
          if (res.IsSuccess) {
            this.getList();
            this.$message.success(
              this.$t("trials:trials-list:message:abolitionSuccessfully")
            );
          }
        })
        .catch(() => {
          this.listLoading = false;
        });
    },
    // panel
    handleDetail(row) {
      this.$router.push({
        path: `/trials/trials-panel?trialId=${row.Id}&trialCode=${row.TrialCode}&researchProgramNo=${row.ResearchProgramNo}`,
      });
    },
    // 获取已勾选行数据
    handleSelectChange(val) {
      const arr = [];
      for (let index = 0; index < val.length; index++) {
        arr.push(val[index]);
      }
      this.selectArr = arr;
    },
    // 排序
    handleSortChange(column) {
      if (column.order === "ascending") {
        this.searchData.Asc = true;
      } else {
        this.searchData.Asc = false;
      }
      if (column.prop === "Criterion") {
        this.searchData.SortField = "CriterionId";
      } else {
        this.searchData.SortField = column.prop;
      }
      this.searchData.PageIndex = 1;
      this.getList();
    },
    // 导出Excel表格
    handleExportTrial() {
      this.selectArr.forEach((element, index) => {
        // element.ExpeditedStr = element.Expedited === 0 ? 'No' : element.Expedited === 1 ? '24H' : '48H'
        // element.ModalityListStr = element.ModalityList.join(', ')
        // element.CreateTimeStr = element.CreateTime
        // element.Criterion = element.CriterionList.join(', ')
        element.Deleted = element.IsDeleted ? "Yes" : "No";
        element.Index = index + 1;
      });
      var workbook = new Excel.Workbook();
      var sheet = workbook.addWorksheet("Trials");

      sheet.properties.defaultRowHeight = 22;
      // sheet.columns = [
      //   { key: 'Index', width: 5 },
      //   { key: 'Code', width: 15 },
      //   { key: 'ExpeditedStr', width: 13 },
      //   { key: 'TrialStatusStr', width: 10 },
      //   { key: 'Indication', width: 25 },
      //   { key: 'Phase', width: 10 },
      //   { key: 'ReviewType', width: 20 },
      //   { key: 'Criterion', width: 15 },
      //   { key: 'ModalityListStr', width: 30 },
      //   { key: 'CRO', width: 10 },
      //   { key: 'Sponsor', width: 20 },
      //   { key: 'CreateTimeStr', width: 18 }
      // ]
      sheet.columns = [
        { key: "Index", width: 5 },
        { key: "TrialCode", width: 25 },
        { key: "ExperimentName", width: 25 },
        { key: "ResearchProgramNo", width: 25 },
        { key: "Sponsor", width: 25 },
        { key: "Deleted", width: 10 },
        { key: "CreateTime", width: 25 },
      ];

      // 处理标题
      sheet.mergeCells("A1", "G2");
      sheet.getCell("A1").value = "Trials";
      sheet.getCell("A1").alignment = {
        vertical: "middle",
        horizontal: "center",
      };
      sheet.getCell("A1").font = {
        name: "SimSun",
        family: 4,
        size: 13,
        bold: true,
      };
      sheet.mergeCells("A3", "G3");
      var now = new Date();
      sheet.getCell("A3").value = now.toLocaleDateString();
      sheet.getCell("A3").alignment = {
        vertical: "middle",
        horizontal: "right",
      };

      sheet.getRow(4).values = [
        "NO.",
        "Trial ID",
        "试验名称",
        "研究方案号",
        "申办方",
        "是否废除",
        "Date Created",
      ];
      sheet.getRow(4).font = {
        name: "SimSun",
        family: 4,
        size: 11,
        bold: true,
      };
      sheet.getRow(4).alignment = { vertical: "middle", horizontal: "left" };

      sheet.addRows(this.selectArr);

      sheet.eachRow((row, number) => {
        if (number > 3) {
          row.eachCell((cell, rowNumber) => {
            cell.alignment = { vertical: "center", horizontal: "left" };
            cell.border = {
              top: { style: "thin" },
              left: { style: "thin" },
              bottom: { style: "thin" },
              right: { style: "thin" },
            };
          });
        }
      });

      workbook.xlsx
        .writeBuffer({
          base64: true,
        })
        .then(function (xls64) {
          var data = new Blob([xls64], {
            type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
          });

          if ("msSaveOrOpenBlob" in navigator) {
            // ie使用的下载方式
            window.navigator.msSaveOrOpenBlob(data, "Trials" + ".xlsx");
          } else {
            var a = document.createElement("a");

            var url = URL.createObjectURL(data);
            a.href = url;
            a.download = "Trials" + ".xlsx";
            document.body.appendChild(a);
            a.click();
            setTimeout(function () {
              document.body.removeChild(a);
              window.URL.revokeObjectURL(url);
            }, 0);
          }
        });
    },
  },
};
</script>
