index.vue 1.84 KB
<template>
  <AMISRenderer
    v-if="!loading"
    :env="env"
    :schema="schemaContent"
    :context="context"
    :locals="{ ...locals, userInfo }"
    :props="props"
  />
</template>
<script>
  import AMISRenderer from './AMISRenderer.vue'
  import copy from 'copy-to-clipboard'
  import { fetcher, getAmisTemplate } from '@/api/amis'
  import getValue from 'lodash/get'
  import { mapState } from 'vuex'
  export default {
    components: {
      AMISRenderer,
    },
    props: {
      alias: {
        type: String,
        default: '',
      },
      schema: {
        // 配置的页面数据
        type: Object,
        default: () => ({}),
      },
      locals: {
        type: Object,
        default: () => ({}),
      },
      props: {
        type: Object,
        default: () => ({}),
      },
      context: {
        type: Object,
        default: () => ({}),
      },
    },
    data() {
      return {
        env: {},
        mySchema: {},
        loading: false,
      }
    },
    computed: {
      ...mapState('user', ['userInfo']),
      schemaContent() {
        if (this.alias) {
          return this.mySchema
        }
        return this.schema
      },
    },
    created() {
      this.getEnv()
      this.requestData()
    },
    methods: {
      requestData() {
        if (this.alias) {
          // 有传别名就请求服务器获取amis页面内容
          this.loading = true
          getAmisTemplate(this.alias)
            .then((res) => {
              this.mySchema = JSON.parse(
                getValue(res, 'rows[0].wamisformtemplateftemplatecontent', '{}')
              )
            })
            .finally(() => {
              this.loading = false
            })
        }
      },
      getEnv() {
        const isCancel = () => {}
        this.env = { isCancel, fetcher, copy, theme: 'cxd' }
      },
    },
  }
</script>