<template>
  <el-dialog
    title="导入"
    :visible.sync="dialogVisible"
    width="90%"
    :before-close="handleClose"
    :close-on-click-modal='false'
    @open='open'
    :append-to-body='true'
  >
    <iframe
      name="zi"
      :src='pageSrc'
      style="width:100%;height:500px;padding-top:10px"
      sandbox="allow-same-origin allow-scripts allow-forms allow-top-navigation allow-popups"
    ></iframe>
  </el-dialog>
</template>
<script>
export default {
  name: 'hsDialogIframe',
  props: {
    value: {
      type: Boolean,
      default: false
    },
    src: {
      type: String,
      default: ''
    },
    entityConfig: {},
    currentImportItem: {},
    entityManger: {}
  },
  watch: {
    value(val) {
      this.dialogVisible = val
    },
    dialogVisible(val) {
      this.$emit('input', val)
    }
  },
  data() {
    return {
      dialogVisiblePage: false,
      pageSrc: '',
      dialogVisible: false
    }
  },
  beforeDestroy() {
    window.removeEventListener('message', this.listenerMessageFun, false)
  },
  mounted() {
    window.addEventListener(
      'message',
      this.listenerMessageFun,
      false
    )
  },
  methods: {
    listenerMessageFun(event) {
      const data_ = event.data
      const { innerType, data, main, close } = data_
      if (close) {
        this.$emit('closeDialog')
      } else {
        if (innerType) {
          switch (innerType) {
            case 'dataImport':
            case 'dataImportHdrDtl':
              this.dataImport(data, this.entityConfig, main)
              break
            case 'selectPlugin':
              this.selectPlugin(data)
              break
          }
        }
      }
    },
    // 参照弹出选择
    selectPlugin(data) {
      this.$emit('linkBtnUiBack', data)
    },
    // 单一列表的数据导入
    async dataImport(data, config, main) {
      if (!config) return
      const type = this.entityManger.type // 实体类型
      const restful_appcode = this.entityManger.config.restful_appcode
      if (type === 'mainDtl') { // 详情的导入
        this.dtlImport(data, config, main)
      } else { // 列表上的导入
        const ids = data.reduce((prve, curr) => {
          prve.push(curr.id)
          return prve
        }, [])
        const { table_name } = config
        const { import_name, saveParms, _parms } = this.currentImportItem
        const url_table_name = this.currentImportItem.table_name || table_name
        let queryParms = saveParms || {}
        if (_parms) {
          queryParms = Object.assign({}, saveParms, _parms)
        }
        const data_ = {
          ids: ids.join(),
          data,
          main,
          type: 'import'
        }
        const parms_ = {
          appCode: restful_appcode,
          table_name: url_table_name,
          import_name: import_name,
          queryParms: queryParms
        }
        this.$API.importDataIframe(data_, parms_).then(res => {
          this.$message.success('导入成功!')
          this.$emit('importSuccess')
        })
      }
    },
    // 详情中的导入
    async dtlImport(data, config, main) {
      if (!config) return
      const mainEntity = this.entityManger.mainEntity
      const config_ = mainEntity.config
      const restful_appcode = mainEntity.restful_appcode
      const primaryKey = config_.primaryKey
      const mainData = mainEntity.data
      if (mainData) {
        const iUpdateStatus = mainData.iUpdateStatus
        if (iUpdateStatus === 1) {
          await mainEntity.save(true)
        }
        const ids = data.reduce((prve, curr) => {
          prve.push(curr.id)
          return prve
        }, [])
        const { table_name } = config
        const { import_name, saveParms, _parms } = this.currentImportItem
        const url_table_name = this.currentImportItem.table_name || table_name
        let queryParms = saveParms || {}
        if (_parms) {
          queryParms = Object.assign({}, saveParms, _parms)
        }
        const data_ = {
          ids: ids.join(),
          data,
          main,
          type: 'import'
        }
        queryParms.bill_id = mainData[primaryKey]
        const parms_ = {
          appCode: restful_appcode,
          table_name: url_table_name,
          import_name: import_name,
          queryParms: queryParms
        }
        this.$API.importDataIframe(data_, parms_).then(res => {
          this.$message.success('导入成功!')
          this.handleClose()
          this.$emit('importSuccess', {
            bill_id: mainData[primaryKey]
          })
        })
      }
    },
    open() {
      this.pageSrc = this.src
    },
    handleClose() {
      this.dialogVisible = false
    }
  }
}
</script>
