index.vue 2.9 KB
<template>
  <div>
    <formCreate :rule="ruleInfo" :option="formoption" v-model="fApi" />
  </div>
</template>

<script>
import Editor from "@/components/CKeditor";
import upFile from "@/components/upfile";
import formCreate, { maker } from "@form-create/element-ui";
import { getToken } from "@/utils/auth";
formCreate.component("Editor", Editor);
formCreate.component("upFile", upFile);
export default {
  name: "CF",
  components: {
    Editor,
    upFile,
    formCreate: formCreate.$form(),
  },
  props: {
    formoption: {
      type: Object,
      default: function () {
        return {
          form: {
            labelWidth: "80px",
          },
          submitBtn: {
            show: false,
          },
        };
      },
    },
    rule: {
      type: Array,
      default: function () {
        return [];
      },
    },
  },
  data() {
    return {
      fApi: {},
    };
  },
  methods: {
    setEditContent(inject, v) {
      this.fApi.setValue(inject.inject, v);
    },
    setUpFielList(inject, v) {
      this.fApi.setValue(inject.inject, v);
    },
  },
  mounted() {
    this.$nextTick(() => {
      this.fApi.on("editorPrefix-setEditContent", this.setEditContent);
      this.fApi.on("upFilePrefix-setUpFielList", this.setUpFielList);
    });
  },
  computed: {
    ruleInfo() {
      let rule = [];
      this.rule.forEach((value) => {
        let item = Object.assign({}, value);
        //如果是富文本编辑器,添加绑定内容事件
        if (item.type == "Editor") {
          item.emit = [{ name: "setEditContent", inject: item.field }];
          item.emitPrefix = "editorPrefix";
        }else if(item.type=="upFile"){
          //上传附件
          item.props.action = this.apiUrl + item.props.action;
          item.emit = [{ name: "setUpFielList", inject: item.field }];
          item.emitPrefix = "upFilePrefix";
        } else if (item.type == "upload") {
          //如果是上传图片组件
          //上传请求地址
          item.props.action = this.apiUrl + item.props.action;
          //上传请求的token
          item.props.data = {
            token: getToken(),
          };
          if (item.uploadType == "image") {
            item.props.beforeUpload = function (file) {
              if (file.type.substring(0, 5) != "image") {
                this.msgError("只能上传图片文件");
                return false;
              }
              return true;
            };
          }

          //上传成功处理
          item.props.onSuccess = function (res, file,fileList) {
            if (res.code !== 0) {
              fileList.splice(fileList.findIndex(item => item.uid === file.id), 1)
              this.msgError(res.msg);
              return;
            } else {
              file.url = this.apiUrl + "/" + res.data.fileInfo.fileUrl;
            }
          };
        }
        rule.push(item);
      });
      return rule;
    },
  },
};
</script>