<template>
  <div class="box">
    <div style="position: relative">
      <div class="middlebox">
        <div class="contenttitle">
          基础资料 /
          <span class="contenttitleBold">危急值</span>
        </div>
        <div class="seachinput">
          <el-select
            v-model="department"
            placeholder="请选择危急值"
            filterable
            :filter-method="remoteMethodes"
            default-first-option
            @change="quckDepartments"
            clearable
            size="small"
          >
            <el-option
              v-for="item in quckDepartment"
              :key="item.id"
              :label="item.displayName"
              :value="item.id"
            >
            </el-option>
          </el-select>
        </div>
      </div>
      <div style="display: flex; margin-top: 7px">
        <div
          :style="
            'width: 208px;overflow: scroll;height:' +
            (window.pageHeight < 600 ? 480 : window.pageHeight - 100) +
            'px;background-color: #fff; border-radius: 8px'
          "
        >
          <div style="margin-top: 10px">
            <el-tree
              :data="criticalFollowValueTypeId"
              :props="treeprops"
              @node-click="treeclick"
              node-key="criticalFollowValueTypeId"
              ref="itemType"
              highlight-current
              auto-expand-parent
            >
              <span class="custom-tree-node" slot-scope="{ node, data }">
                <div>
                  <span class="treeicons">
                    <!-- <i
                        class="el-icon-document-remove"
                        v-if="data.parentId == null"
                      ></i> -->
                    <img
                      style="width: 20px; height: 20px; vertical-align: sub"
                      src="@/assets/images/order.png"
                      v-if="!data.parentId"
                    />
                  </span>
                  <span :class="!data.parentId ? 'maxtitle' : 'mintitle'">{{
                    node.label
                  }}</span>
                </div>
              </span>
            </el-tree>
          </div>
        </div>
        <div style="display: block">
          <div style="margin-left: 15px; display: flex">
            <div :style="'width:' +
              (window.pageWidth - 200 - 110 - 50 - 14) +
              'px;padding: 15px;background-color: #fff;border-radius: 8px;'
              ">
              <div>
                <el-table
                  :data="tableData"
                  :height="
                    window.pageHeight < 600 ? 450 : window.pageHeight - 130
                  "
                  row-key="id"
                  class="el-table__body-wrapper tbody"
                  @row-click="rowclick"
                  highlight-current-row
                  ref="tableData"
                >
                  <el-table-column prop="id" label="编号" width="300">
                  </el-table-column>
                  <el-table-column prop="displayName" label="名称" width="">
                  </el-table-column>
                  <el-table-column
                    prop="criticalFollowValueTypeId"
                    label="危急值类别"
                    width=""
                  >
                    <template slot-scope="scope">
                      <div>
                        {{
                          getTreeName(
                            criticalFollowValueTypeId,
                            scope.row.criticalFollowValueTypeId
                          )
                        }}
                      </div>
                    </template>
                  </el-table-column>
                  <el-table-column
                    prop="criticalFollowValueFlag"
                    label="危急随访值标志"
                    width="120"
                  >
                    <template slot-scope="scope">
                      <div>
                        {{
                          dddw(
                            criticalFollowValueFlag,
                            "id",
                            scope.row.criticalFollowValueFlag,
                            "displayName"
                          )
                        }}
                      </div>
                    </template>
                  </el-table-column>
                  <el-table-column prop="creatorName" label="创建者" width="">
                  </el-table-column>
                  <el-table-column
                    prop="creationTime"
                    label="创建时间"
                    width="200"
                  >
                    <template slot-scope="scope">
                      {{ scope.row.creationTime | dateFormat }}
                    </template>
                  </el-table-column>
                  <el-table-column
                    prop="lastModifierName"
                    label="修改者"
                    width=""
                  >
                  </el-table-column>
                  <el-table-column
                    prop="lastModificationTime"
                    label="修改时间"
                    width="200"
                  >
                    <template slot-scope="scope">
                      {{ scope.row.lastModificationTime | dateFormat }}
                    </template>
                  </el-table-column>
                  <el-table-column label="操作" align="center">
                    <template>
                      <el-tag
                        class="move"
                        style="
                          cursor: move;
                          background-color: rgb(245, 245, 245);
                          border: none;
                        "
                        draggable="true"
                      >
                        <i
                          class="el-icon-d-caret"
                          style="
                            width: 1rem;
                            height: 1rem;
                            color: rgb(113, 113, 113);
                          "
                        ></i>
                      </el-tag>
                    </template>
                  </el-table-column>
                </el-table>
              </div>
            </div>
                          <!-- 按钮区域 -->
              <div style="margin-left: 10px">
                <el-button type="" @click="add" class="commonbutton"
                  >新增</el-button
                >
                <div style="margin-top: 10px">
                  <el-button type="" @click="editpopup" class="commonbutton"
                    >编辑</el-button
                  >
                </div>
                <div style="margin-top: 10px">
                  <el-button type="" @click="delsrts" class="deleteButton"
                    >删除</el-button
                  >
                </div>
                <div style="margin-top: 10px">
                  <el-button type="" @click="topping" class="commonbutton"
                    >置顶</el-button
                  >
                </div>
                <div style="margin-top: 10px">
                  <el-button type="" @click="toppings" class="commonbutton"
                    >置底</el-button
                  >
                </div>
                <div style="margin-top: 10px">
                  <el-button
                    type=""
                    :disabled="isshow"
                    @click="assertion"
                    class="commonbutton"
                    >排序</el-button
                  >
                </div>
                <div style="margin-top: 10px">
                  <el-button
                    type=""
                    :disabled="isshow"
                    @click="cancellation"
                    class="commonbutton"
                    >取消</el-button
                  >
                </div>
              </div>
          </div>
        </div>
      </div>
    </div>
    <!-- 新增或者编辑弹框 -->
    <el-dialog
      :title="title == 1 ? '新增' : '编辑'"
      :visible.sync="dialogVisible"
      width="75%"
      :close-on-click-modal="false"
    >
      <el-form ref="form" :model="form" label-width="110px">
        <el-row>
          <el-col :span="9">
            <el-form-item label="编号">
              <el-input
                v-model="form.id"
                style="width: 90%"
                disabled
                size="small"
              ></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="7">
            <el-form-item label="名称">
              <el-input
                ref="refinput"
                v-model="form.displayName"
                style="width: 80%"
                size="small"
              ></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="危急值类别" prop="criticalFollowValueTypeId">
              <el-cascader
                v-model="form.criticalFollowValueTypeId"
                :options="criticalFollowValueTypeId"
                popper-class="example"
                ref="criticalFollowValueTypeId"
                @change="onchange"
                :props="{
                  value: 'criticalFollowValueTypeId',
                  label: 'displayName',
                  children: 'treeChildren',
                  checkStrictly: true,
                  expandTrigger: 'hover',
                }"
                size="small"
              ></el-cascader>
              <!-- <el-select
                v-model="form.itemTypeId"
                placeholder="请选择"
                style="width: 100%"
              >
                <el-option
                  v-for="item in itemTypeId"
                  :key="item.id"
                  :label="item.displayName"
                  :value="item.id"
                >
                </el-option>
              </el-select> -->
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="8">
            <el-form-item label="危急随访值标志">
              <el-select
                v-model="form.criticalFollowValueFlag"
                placeholder="危急随访值标志"
                size="small"
              >
                <el-option
                  v-for="item in criticalFollowValueFlag"
                  :key="item.id"
                  :label="item.displayName"
                  :value="item.id"
                ></el-option>
              </el-select>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-divider></el-divider>
          <el-col :span="4" style="margin-left: 15px">
            <el-form-item label="创建者">
              <el-input
                v-model="form.creatorName"
                disabled
                size="small"
              ></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="创建时间">
              <el-input
                :value="form.creationTime | dateFormat"
                disabled
                style="width: 95%"
                size="small"
              ></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="4">
            <el-form-item label="修改者">
              <el-input
                v-model="form.lastModifierName"
                disabled
                size="small"
              ></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="修改时间">
              <el-input
                :value="form.lastModificationTime | dateFormat"
                disabled
                style="width: 95%"
                size="small"
              ></el-input>
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>
      <span slot="footer" class="dialog-footer">
        <el-button @click="dialogVisible = false" class="difference"
          >取 消</el-button
        >
        <el-button type="primary" @click="addoredit" class="commonbutton"
          >确 定</el-button
        >
      </span>
    </el-dialog>
  </div>
</template>
<script>
import { rowDrop, assertions } from "@/components/publicjs/public";
import Sortable from "sortablejs";
import { getapi, postapi, putapi } from "@/api/api";
import { mapState } from "vuex";
import { dddw } from "../../utlis/proFunc";
import {
  physicallist,
  medicalconclusionlist,
  addconclusion,
  quersmedicalid,
  updateconlus,
  bottomtops,
  conlusiondraganddrop,
  tijiandetid,
  diagnosticediting,
  xiugaijielun,
  conclusionacquisition,
} from "../../request/systemapi";
import { criticalFollowValueType } from "@/request/commonapi";
export default {
  data() {
    return {
      isshow: true,
      dialogVisible: false,
      form: {
        displayName: "",
        criticalFollowValueTypeId: "",
        criticalFollowValueFlag: "",
      },
      Selectacategory: [],
      Selectvalue: "",
      selars: "",
      value: "",
      criticalFollowValueTypeId: [],
      criticalFollowValueFlag: [
        {
          id: "0",
          displayName: "危急值",
        },
        {
          id: "1",
          displayName: "随访值",
        },
      ],
      title: 1,
      pages: {
        TypeId: "",
        SkipCount: 0,
        MaxResultCount: 100,
        Sorting: "displayOrder desc",
      },
      page: {
        Filter: "",
        SkipCount: 0,
        MaxResultCount: 100,
        Sorting: "displayOrder desc",
      },
      tableData: [],
      initTableData: [],
      item: {},
      curRow: {},
      treeprops: {
        label: "displayName",
        value: "id",
        children: "treeChildren",
      },
      criticalFollowTypeId:"",
      department:"",
      quckDepartment:""
    };
  },
  created() {
    this.getlist();
  },
  computed: {
    ...mapState(["window"]),
  },
  mounted() {
    this.rowDrop();
    this.typeid();
  },

  methods: {
    dddw,
    treeclick(data) {
      if(data){
        this.criticalFollowTypeId = data.criticalFollowValueTypeId;
      }
      postapi("/api/app/CriticalFollowValue/GetList",{
        criticalFollowValueTypeId:this.criticalFollowTypeId
      }).then((res) => {
        if (res.code != -1) {
          this.tableData = res.data;
        }
      });
    },
    remoteMethodes(keyWords) {
      if (keyWords) {
        this.quckDepartment = [];
        this.initTableData.forEach((item) => {
          if (
            item.displayName.toLowerCase().indexOf(keyWords.toLowerCase()) >
            -1 
            // ||
            // item.simpleCode.toLowerCase().indexOf(keyWords.toLowerCase()) > -1
            // || item.shortName.toLowerCase().indexOf(keyWords.toLowerCase()) > - 1
          ) {
            this.quckDepartment.push(item);
          }
        });
      } else {
        this.quckDepartment = deepCopy(this.initTableData);
      }
    },
    quckDepartments(e) {
      if (e) {
        let currentKey = "";
        this.quckDepartment.forEach((item) => {
          if (e == item.id) {
            currentKey = item.criticalFollowValueTypeId;
            this.initItemTypeId = item.criticalFollowValueTypeId;
          }
        });
        this.$refs["itemType"].setCurrentKey(currentKey);
        let selected = this.$refs["itemType"].getCurrentNode();
        if (
          this.$refs["itemType"].getNode(selected) &&
          this.$refs["itemType"].getNode(selected).parent
        ) {
          this.expandParents(this.$refs["itemType"].getNode(selected).parent);
        }
        postapi("/api/app/CriticalFollowValue/GetList",{
        criticalFollowValueTypeId:currentKey
      }).then((res) => {
          if (res.code != -1) {
            this.tableData = res.data;
            this.tableData.forEach((item, index) => {
              if (e == item.id) {
                this.$refs["tableData"].setCurrentRow(item);
                this.rowclick(item);
                this.tableScrollToRow(this.$refs.tableData, index);
                this.searchup(item, index)
              }
            });
          }
        });
      } else {
        this.remoteMethodes();
      }
    },
    tableScrollToRow(tableElement, rowIndex) {
      let theTableRows = tableElement.bodyWrapper.querySelectorAll(
        ".el-table__body tbody .el-table__row"
      );
      let scrollTop = 0;
      for (let i = 0; i < theTableRows.length; i++) {
        if (i === rowIndex) {
          break;
        }
        scrollTop += theTableRows[i].offsetHeight;
      }
      tableElement.bodyWrapper.scrollTop = scrollTop;
    },
    searchup(data, index) {
      this.$nextTick(() => {
        if (index == 0) {
          index = 1
        }
        const targetTop = this.$refs["tableData"].$el.querySelectorAll('.el-table__body tr')[index - 1].getBoundingClientRect().top
        const containerTop = this.$refs["tableData"].$el.querySelector('.el-table__body').getBoundingClientRect().top
        const scrollParent = this.$refs["tableData"].$el.querySelector('.el-table__body-wrapper')
        scrollParent.scrollTop = targetTop - containerTop
      })
    },
    expandParents(node) {
      node.expanded = true;
      if (node.parent) {
        this.expandParents(node.parent);
      }
    },
    getTreeName(list, id) {
      for (let i = 0; i < list.length; i++) {
        if (list[i].criticalFollowValueTypeId === id) {
          return list[i].displayName;
        } else if (list[i].treeChildren && list[i].treeChildren.length > 0) {
          let res = this.getTreeName(list[i].treeChildren, id);
          if (res) {
            return res;
          }
        }
      }
    },
    typeid() {
      criticalFollowValueType().then((res) => {
        if (res.code != -1) {
          this.criticalFollowValueTypeId = res.data;
          this.criticalFollowValueTypeId = this.formatData(
            this.criticalFollowValueTypeId
          );
          console.log(this.criticalFollowValueTypeId);
        }
      });
    },
    formatData(dataList) {
      for (let i = 0; i < dataList.length; i++) {
        if (dataList[i].treeChildren.length < 1) {
          dataList[i].treeChildren = undefined;
        } else {
          this.formatData(dataList[i].treeChildren);
        }
      }
      return dataList;
    },
    onchange(v) {
      if (v.length > 1) {
        this.form.criticalFollowValueTypeId =
          this.form.criticalFollowValueTypeId.slice(-1)[0];
      } else {
        this.form.criticalFollowValueTypeId =
          this.form.criticalFollowValueTypeId[0];
      }
      this.$refs.criticalFollowValueTypeId.toggleDropDownVisible();
    },
    //删除
    delsrts() {
      this.form = { ...this.curRow };
      if (this.form.id == undefined) {
        this.$message.warning("请选择删除的数据");
      } else {
        this.$confirm("是否确认删除,是否继续?", "提示", {
          confirmButtonText: "确定",
          cancelButtonText: "取消",
          type: "warning",
          cancelButtonClass: "difference",
          confirmButtonClass: "commonbutton",
        })
          .then(() => {
            postapi("/api/app/CriticalFollowValue/Delete", {
              criticalFollowValueId: this.form.id,
            }).then((res) => {
              if (res.code != -1) {
                //this.$message.success('删除成功')
                this.treeclick();
                this.curRow = this.$options.data().curRow;
              }
            });
          })
          .catch(() => {});
      }
    },
    //取消排序
    cancellation() {
      this.$message.info("取消操作");
      this.isshow = true;
      this.treeclick();
    },

    assertiona() {
      assertions(this.tableData, this.initTableData);
    },
    //确定拖拽
    assertion() {
      const result = [];
      this.tableData.forEach((item, index) => {
        // index 从0开始的， displayOrder从大到小排
        // const currentDisplayOrder = this.tableData.length -1
        // const currentDisplayOrder = this.initTableData[index].displayOrder;
        // if (item.displayOrder != currentDisplayOrder) {
        // 如果它的displayOrder和它当前所在的位置不同代表挪动过位置
        // result.push({ id: item.id, displayOrder: currentDisplayOrder });
        // }
        result.push({ id: item.id, displayOrder: index + 1 });
      });
      postapi("/api/app/CriticalFollowValue/UpdateSortMany", {
        itemList: result,
      }).then((res) => {
        if (res.code != -1) {
          this.isshow = true;
          this.treeclick();
          //this.$message.success('操作成功')
        }
      });
    },
    //初始化
    rowDrop() {
      this.$nextTick(() => {
        const tbody = document.querySelector(".el-table__body-wrapper tbody");
        const _this = this;
        Sortable.create(tbody, {
          handle: ".move",
          animation: 300,
          onChoose({ oldIndex }) {
            _this.$refs["tableData"].setCurrentRow(_this.tableData[oldIndex]);
            _this.rowclick(_this.tableData[oldIndex], false);
          },
          onEnd({ newIndex, oldIndex }) {
            _this.isshow = false;
            const currRow = _this.tableData.splice(oldIndex, 1)[0];
            _this.tableData.splice(newIndex, 0, currRow);
            _this.tableData.map((item, index) => {
              if (index == newIndex && index == oldIndex) {
                // console.log(item, "新数据");
              } else if (index == oldIndex) {
              } else if (index == newIndex) {
              }
            });
          },
        });
      });
    },
    //置低
    toppings() {
      this.form = { ...this.curRow };
      if (this.form.id == undefined) {
        this.$message.error("请点击选择操作的数据");
      } else {
        postapi("/api/app/CriticalFollowValue/UpdateManySort", {
          criticalFollowValueId: this.form.id,
          sortType: 2,
        }).then((res) => {
          if (res.code != -1) {
            this.treeclick();
            //this.$message.success('操作成功')
          }
        });
      }
    },
    //置顶
    topping() {
      this.form = { ...this.curRow };
      if (this.form.id == undefined) {
        this.$message.error("请点击选择操作的数据");
      } else {
        postapi("/api/app/CriticalFollowValue/UpdateManySort", {
          criticalFollowValueId: this.form.id,
          sortType: 1,
        }).then((res) => {
          if (res.code != -1) {
            this.treeclick();
            //this.$message.success('操作成功')
          }
        });
      }
    },
    //编辑弹框
    editpopup() {
      this.form = { ...this.curRow };
      if (this.form.id == undefined) {
        this.$message.warning("请点击选择操作的数据");
      } else {
        this.dialogVisible = true;
        this.title = 2;
        if (this.$refs.form !== undefined) {
          this.$refs.form.resetFields();
        }
        this.$nextTick(() => {
          this.$refs.refinput.focus();
        });
      }
    },
    //点击列表通过id查询
    rowclick(row) {
      this.curRow = { ...row };
      // quersmedicalid(row.id).then((res) => {
      //   if(res.code!=-1){
      //     this.curRow = { ...res.data };
      //   }
      // });
    },
    //确定新增或者编辑
    addoredit() {
      if (this.form.displayName == "") {
        this.$message.warning("请输入名称");
      } else if (this.form.criticalFollowValueTypeId == "") {
        this.$message.warning("请选择危急值类别");
      } else if (this.form.criticalFollowValueFlag == "") {
        this.$message.warning("危急随访值标志");
      } else {
        if (this.title == 1) {
          postapi("/api/app/CriticalFollowValue/Create", {
            displayName: this.form.displayName,
            criticalFollowValueTypeId: this.form.criticalFollowValueTypeId,
            criticalFollowValueFlag: this.form.criticalFollowValueFlag,
          }).then((res) => {
            if (res.code != -1) {
              this.treeclick();
              this.dialogVisible = false;
              //this.$message.success('新增成功')
            }
          });
        } else if (this.title == 2) {
          //diagnosticediting updateconlus
          postapi("/api/app/CriticalFollowValue/Update", {
            criticalFollowValueId: this.form.id,
            displayName: this.form.displayName,
            criticalFollowValueTypeId: this.form.criticalFollowValueTypeId,
            criticalFollowValueFlag: this.form.criticalFollowValueFlag,
          }).then((res) => {
            if (res.code != -1) {
              this.treeclick();
              this.dialogVisible = false;
              //this.$message.success('修改成功')
            }
          });
        }
      }
    },
    //新增弹框
    add() {
      if (this.criticalFollowTypeId == undefined || this.criticalFollowTypeId == "") {
        this.$message.warning("请选择危急类别");
      } else {
      this.title = 1;
      this.dialogVisible = true;
      if (this.$refs.form !== undefined) {
        this.$refs.form.resetFields();
      }
      this.form = this.$options.data().form;
      this.form.criticalFollowValueTypeId = this.criticalFollowTypeId;
      this.$nextTick(() => {
        this.$refs.refinput.focus();
      });
      }
    },
    getlist() {
      // conclusionacquisition(this.pages).then((res) => {
      //   console.log(res);
      //   this.initTableData = [...res.data.items];
      //   this.tableData = res.data.items;
      // });

      this.getlistM();
    },
    getlistM(rowsid) {
      postapi("/api/app/CriticalFollowValue/GetList").then((res) => {
        if (res.code != -1) {
          this.initTableData = [...res.data];
          this.quckDepartment = res.data;
        }
      });
    },
  },
};
</script>
<style scoped>
@import "../../assets/css/global_button.css";
@import "../../assets/css/global_dialog.css";
@import "../../assets/css/global_table.css";
@import "../../assets/css/global_form.css";
@import "../../assets/css/global_input.css";
@import "../../assets/css/global.css";
.box {
  display: flex;
  flex-direction: column;
}
:deep .el-form-item {
  margin-bottom: 14px;
}
/* el-dialog的头部样式 */
:deep .el-dialog__header {
  padding: 11px 20px 11px;
}
/* el-dialog的主体样式 */
:deep .el-dialog__body {
  padding: 0px 20px 0px;
}
/* el-divider样式 */
:deep .el-divider--horizontal {
  margin: 0px 0 12px;
}
/* el-dialog的底部样式 */
:deep .el-dialog__footer {
  padding: 0px 20px 14px;
}
.seachinput {
  width: 250px;
  margin-right: 110px;
}
:deep .seachinput .el-select {
  width: 100%;
}
</style>
