<template>
  <div>
    <el-skeleton v-if="isEmpty" animated />
    <custom-form
      v-if="!isEmpty"
      class="mb-20"
      v-loading="pageLoading"
      ref="form"
      :options="widgetFormPreview"
      :form-edit="formEdit"
    ></custom-form>
  </div>
</template>
<script>
import { getPatientDetail, getFollowDetail } from "@/api/patient.js"
import { getFormDetail } from "@/api/field"
import CustomForm from "@/components/FormComponents/CustomForm/index"

export default {
  name: "MyCustomForm",
  components: { CustomForm },
  props: {
    formType: String,
    form: {},
    patientId: {},
    followId: {},
    followId: {},
  },
  data() {
    return {
      widgetFormPreview: {},
      loading: false,
      formLoading: false,
      formEdit: {},
      formRecordId: null,
    }
  },
  computed: {
    isEmpty() {
      return !(Object.keys(this.widgetFormPreview) || this.widgetFormPreview)
        .length
    },
    getTabFollowId() {
      return this.tabFollowId()
    },
    pageLoading() {
      return this.loading || this.formLoading
    },
  },
  watch: {
    followId: {
      handler() {
        this.getFollowDetail()
      },
      immediate: true,
    },
  },
  created() {
    this.initData()
    this.initForm()
  },

  methods: {
    initData() {
      this.getPatientDetail()
    },
    initForm() {
      this.formLoading = true
      getFormDetail(this.form.formId)
        .then((res) => {
          if (res.code === 1 && res.data) {
            const formJson = res.data.formJson
            this.$emit("setFormJson", formJson)
            const obj = eval("(" + formJson + ")")
            obj.disabled = true
            obj.closeBtn = true
            obj.detail = true
            this.widgetFormPreview = obj
          }
        })
        .finally(() => {
          this.formLoading = false
        })
    },
    getFollowDetail() {
      // 随访数据查询
      if (!this.followId) return
      this.$nextTick(() => {
        this.$refs.form && this.$refs.form.resetForm()
      })
      this.loading = true
      getFollowDetail({
        followId: this.followId,
        formId: this.form.formId,
      })
        .then((res) => {
          this.formatData(res)
        })
        .finally(() => {
          this.loading = false
        })
    },
    getPatientDetail() {
      // 筛查数据查询
      this.$nextTick(() => {
        this.$refs.form && this.$refs.form.resetForm()
      })
      if (!this.patientId || this.formType === "2") return
      this.loading = true
      getPatientDetail({
        patientId: this.patientId,
        formId: this.form.formId,
      })
        .then((res) => {
          this.formatData(res)
        })
        .finally(() => {
          this.loading = false
        })
    },
    formatData(res, cache) {
      const d = res.data || {}
      const form = d.data || {}
      for (const key in form) {
        Object.prototype.toString.call(form[key]) == "[object Number]"
          ? (form[key] = String(form[key]))
          : ""
      }
      this.formEdit = form
    },
  },
}
</script>
