ConfigForms.vue 8.77 KB
<template>
  <div
    id="publicContent"
    :class="activeName == 'index0' && formClass ? formClass : ''"
  >
    <div v-if="formTabs && formTabs.length > 0">
      <el-button
        v-if="!disabled"
        class="draftButton"
        :loading="loading"
        @click="onSubmit(formType)"
        >{{ formType == 1 ? "临时保存" : "返回" }}</el-button
      >
      <el-tabs
        v-model="activeName"
        v-loading="fromLoading"
        type="card"
        :style="{ width: formType == 1 ? '100%' : 'calc(100% - 200px)' }"
        class="publicTab"
        @tab-click="handleTabClick"
      >
        <el-tab-pane
          v-for="(form, index) in formTabs"
          :key="form.id"
          :label="form.label"
          :name="'index' + index"
        >
          <transition mode="out-in" name="fade-transform">
            <div v-show="activeName === 'index' + index">
              <template v-if="form.formId">
                <form-tab
                  ref="formTabs"
                  :patient-id="patientId"
                  :patient-standby-id="patientStandbyId"
                  :newform-record-id="newformRecordId"
                  :form="form"
                  :disabled="disabled"
                  contrast
                  :form-initial="formInitial"
                  :survival-flag="survivalFlag"
                  @setFormJson="setFormJson"
                  @handleConfirm="handleConfirm"
                  @onPrev="onPrev"
                ></form-tab>
              </template>
            </div>
          </transition>
        </el-tab-pane>
      </el-tabs>
    </div>
    <el-empty v-else description="暂无数据"></el-empty>
    <public-dialog
      ref="showDialog"
      @onSubmit="dialogSubmit"
      @onCancel="dialogCancel"
    >
      <!-- 保存草稿 -->
      <template v-if="dialogType == 'draft'" slot="content">
        <div class="title center">已保存至草稿箱!</div>
        <div class="content center">
          <div class="img">
            <img src="~@/assets/img/DataCenter/draft.png" alt />
          </div>
          <div class="showTips">您可以在【草稿箱】页面找到该数据</div>
        </div>
        <div class="btn">
          <el-button type="primary" :loading="loading" @click="continueSubmit"
            >继续添加</el-button
          >
        </div>
      </template>
      <!-- 保存提交 -->
      <template v-if="dialogType == 'submit'" slot="content">
        <div class="title center">提交成功!</div>
        <div class="content center">
          <div class="img">
            <img src="~@/assets/img/DataCenter/submit.png" alt />
          </div>
          <div class="showTips">您可以在【筛查查询】页面查询到该数据</div>
        </div>
        <div class="btn">
          <el-button
            type="primary"
            :loading="loading"
            class="textBtn"
            @click="view"
            >查看</el-button
          >
          <el-button type="primary" :loading="loading" @click="continueSubmit"
            >继续添加</el-button
          >
        </div>
      </template>
    </public-dialog>
  </div>
</template>

<script>
import mixin from "./mixin"
import CustomForm from "@/components/FormComponents/CustomForm/index"
import publicDialog from "../../audit-detail/components/publicDialog.vue"
import { getPatientDetail } from "@/api/patient.js"

export default {
  name: "ConfigForms",
  components: { publicDialog },
  mixins: [mixin],
  props: {
    disabled: Boolean,
    formType: String,
    patientId: String,
    formClass: String,
  },
  data() {
    return {
      // showIndex:false,
      // survivalFlag:false
      dialogType: "",
      loading: false,
      formInitial: {}, // 第四步的数据
    }
  },
  computed: {
    survivalFlag() {
      if (this.activeName == "index0" && this.formClass) {
        return true
      } else {
        return false
      }
    },
    showIndex() {
      if (this.activeName == "index0" && this.formClass) {
        return false
      } else {
        return true
      }
    },
  },
  watch: {
    activeName(val) {
      console.log(this.formId)
      if (val == "index3") {
        // 第四步风险评估
        this.$nextTick(() => {
          getPatientDetail({
            formId: this.formId, // 每个大表单的id
            patientId: this.patientId || this.patientStandbyId,
            // formRecordId: this.newformRecordId,
          })
            .then((res) => {
              const data = res.data.data
              this.formInitial = data
            })
            .finally(() => {
              this.loading = false
            })
          this.$nextTick(() => {
            console.log("走了")
            //!
            // this.formInitial = {
            //   risk_rank: "中危",
            //   risk_score: "5分",
            //   screening_advise: "立刻住院",
            // }
          })
        })
      } else if (val == "index1") {
        // 第二步问卷调查
        this.$nextTick(() => {
          let { birthday } = JSON.parse(sessionStorage.getItem("index1Data"))
          let date = new Date(String(birthday).replace(/-/g, "/"))
          let d = new Date()
          let age =
            d.getFullYear() -
            date.getFullYear() -
            (d.getMonth() < date.getMonth() ||
            (d.getMonth() == date.getMonth() && d.getDate() < date.getDate())
              ? 1
              : 0)
          //!
          this.formInitial = {
            birthday,
            age,
          }
        })
      } else {
        this.formInitial = false
      }
    },
  },
  created() {
    // 字典formType 1 筛查表单
    // console.log('回显2',this.formEdit)
    this.getCurrentFormByType(this.formType)
  },
  methods: {
    handleConfirm(data, done, cb) {
      this.addPatient(data, done, cb)
      this.$emit("addMethods", {
        activeName: this.activeName,
        form: data.data,
      })
    },
    onPrev(done) {
      this.prevTab(done)
    },
    onSubmit(type) {
      this.loading = true
      if (type == 1) {
        // 临时保存草稿
        this.dialogType = "draft"
        this.$refs.showDialog.dialogVisible = true

        this.loading = false
      } else {
        // 返回
        this.$router.back()
      }
    },
    dialogSubmit() {},
    dialogCancel() {},
    continueSubmit() {},
  },
  provide() {
    return {
      configForms: this,
    }
  },
}
</script>

<style lang="scss" scoped>
#publicContent {
  padding: 32px 24px;
  position: relative;
  .draftButton {
    position: absolute;
    top: 46px;
    right: 40px;
    z-index: 999;
    border-radius: 4px;
    border: 1px solid #4e68ff;
    color: #4e68ff;
  }
  .content {
    img {
      width: 248px;
      height: 180px;
    }
  }
}
::v-deep .el-dialog__body {
  .title {
    font-size: 22px;
    font-family: AlibabaPuHuiTiM;
    color: rgba(0, 0, 0, 0.8);
    margin-bottom: 20px;
  }
  .showTips {
    font-size: 16px;
    font-family: AlibabaPuHuiTiR;
    color: rgba(0, 0, 0, 0.8);
    margin-bottom: 20px;
  }
  .btn {
    .el-button {
      width: 100px;
      height: 32px;
    }
  }
}
.publicTab {
  // width: calc(100%);
  margin-top: 10px;
}
::v-deep {
  .el-tabs--card > .el-tabs__header {
    width: calc(100% - 100px);
    border-bottom: none;
  }
  .el-tabs--card > .el-tabs__header .el-tabs__nav {
    border: none;
  }
  .el-tabs--card > .el-tabs__header .el-tabs__item {
    min-width: 116px;
    text-align: center;
    background: #f0f1fa;
    font-size: 14px;
    border: none;
  }
  .el-tabs--card > .el-tabs__header .el-tabs__item.is-active {
    background: #4e68ff;
    color: #fff;
  }
}
.my-form {
  overflow-x: scroll;
}
.follow-form {
  .publicTab {
    margin-bottom: 10px;
    ::v-deep {
      .el-collapse-item__header {
        border-width: 1px 0px 0px;
      }
      .row24 {
        border-top: 1px solid #cccccc;
      }
      .custom-form-item {
        border-width: 1px 0px 0px;
      }
      .el-collapse-item {
        margin-bottom: 20px;
        border-radius: 4px;
        overflow: hidden;
        border: 1px solid #cccccc;
      }
      .el-collapse-item__wrap {
        border: none;
        .el-collapse {
          margin: 10px 10px 20px;
        }
      }
      // .row24.el-col-lg-12:nth-child(2n) {
      //   border-width: 0px 0px 0px 1px;
      // }
      .el-form-item {
        .el-form-item__label {
          text-align: left;
          background: #fafafa;
          font-size: 14px;
          color: #333333;
          border-right: 1px solid #cccccc;
          // width: 100px !important;
          white-space: nowrap;
          padding: 18px 10px;
          margin-right: 20px;
          text-align: center;
        }
      }
      .el-form-item {
        padding: 0px;
      }
    }
  }
}
.textBtn {
  width: 100px;
  height: 32px;
  background: #ffffff;
  border: 1px solid #4e68ff;
  color: #4e68ff;
}
</style>