npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

sczts-form-generator

v0.2.4

Published

一款基于 element-ui 的表单设计器

Downloads

4

Readme

简介

快速开始

  1. 安装
npm i sczts-form-generator
  1. main.js 中全局引用
import Vue from 'vue'
import formGenerator, { fgWidgets } from 'sczts-form-generator'

// ...
Vue.use(formGenerator, {
  widgets: fgWidgets
});

组件说明

1. 表单编辑器

如何使用

<template>
  <div>
    <fg-editor v-model="forms" :defaultForms="defaultForms"></fg-editor>
  </div>
</template>

<script>
export default {
  data(){
    return {
      forms: [],
      defaultForms: [
        {

        }
      ]
    }
  }
}
</script>

属性

属性名 | 说明 | 参数 -- | -- | -- defaultForms | 默认表单配置 | Array showTable | 是否展示列表显示配置 | Boolean

2. 表单生成器

如何使用

<template>
  <div>
    <fg-render
        v-model="form_data"
        :forms="config.forms"
        :labelWidth="config.labelWidth"
        :displayType="config.displayType"
    ></fg-render>
  </div>
</template>

<script>
export default {
  data(){
    return {
        config: {
            forms: [],
            labelWidth: 120,
            displayType: 'top'
        },
        form_data:{}
    }
  }
}
</script>

属性

属性名 | 说明 | 参数 -- | -- | -- gutter | 分栏间隔 | Number displayType | label 展示位置 | String labelWidth | label 展示宽度 | Number size | 表单控件大小 | String forms | 表单配置 | Array value | 表单数据 | Object

如何扩展自定义表单控件?

  • /src/components/form_generator_extends 为扩展控件目录
  • /src/components/form_generator_extends/widgets.js 为 widgets 配置文件
  • /src/components/form_generator_extends/widgets 为控件目录
  • /src/components/form_generator_extends/widgets/[widget_name]/input.vue 为控件实现代码
  • /src/components/form_generator_extends/widgets/[widget_name]/attrbute.vue 为控件自定义属性配置
  1. 编写 widgets 配置文件 /src/components/form_generator_extends/widgets.js
export default [{
  name: "扩展组件",
  widgets: [
    {
      type: "upload",
      name: "附件",
      attributes: {
        title: "附件",      // 默认属性 展示标题
        description: "",    // 默认属性 说明文字
        placeholder: "",    // 默认属性 占位符
        required: false,    // 默认属性 是否必填
        multiple: true,     // 默认属性 是否可多选
        accept: [],         // 自定义属性 上传格式
        // ...
      },
      ui: {
        width: 24
      }
    }
  ]
}]
  1. 编写自定义上传控件 /src/components/form_generator_extends/widgets/upload/input.vue
<template>
  <el-upload
    :action="upload_url"
    :data="uploadData"
    :multiple="item.attributes.multiple"
    :accept="acceptType"
    controls-position="right"
    :on-remove="handleRemove"
    :on-success="handleSuccess"
    :before-upload="beforeUpload"
    :file-list="fileList"
  >
    <el-button size="small" type="primary">点击上传</el-button>
  </el-upload>
</template>

<script>
import vModel from "sczts-form-generator/src/vModel";
import { getUploadToken } from "@/api/common";
import { Arr, Cache } from "sczts-helpers";

export default {
  extends: vModel,
  data() {
    return {
      upload_url: "http://up-z2.qiniup.com",
      uploadData: {
        token: "",
      },
      fileList: [],
    };
  },
  created() {
    this.item.value = [];
  },
  computed: {
    acceptType() {
      let accept = this.item.attributes.accept;
      return accept.length > 0 ? accept.join(",") : "*";
    },
  },
  methods: {
    // 上传前 从接口获取token值,并缓存3500秒,在回调中设置token值
    beforeUpload() {
      return Cache.rememberPromise("upload_token", 3500, () =>
        getUploadToken()
      ).then((res) => {
        this.uploadData.token = res.data.data.token;
      });
    },
    handleSuccess(response, file) {
      this.item.value.push({
        url: response.file,
        name: response.name,
      });
    },
    handleRemove(file, fileList) {
      this.item.value = fileList.map((file) => {
        return {
          url: file.response.file,
          name: file.response.name,
        };
      });
    },
  },
};
</script>
  1. 上传控件属性配置[可选] /src/components/form_generator_extends/widgets/upload/attribure.vue
<template>
  <div>
    <el-form-item label="文件类型">
      <el-select
        v-model="item.accept"
        multiple
        filterable
        allow-create
        default-first-option
        placeholder="默认为所有类型"
      >
        <el-option
          v-for="item in options"
          :key="item.value"
          :label="item.label"
          :value="item.value"
        >
        </el-option>
      </el-select>
    </el-form-item>
  </div>
</template>

<script>
import vModel from "sczts-form-generator/src/vModel";
export default {
  extends: vModel,
  data() {
    return {
      options: [
        {
          label: ".jpg",
          value: ".jpg",
        },
        {
          label: ".png",
          value: ".png",
        },
        {
          label: ".doc",
          value: ".doc",
        },
        {
          label: ".xls",
          value: ".xls",
        },
        {
          label: ".pdf",
          value: ".pdf",
        },
      ],
    };
  },
};
</script>
  1. main.js 中全局引用时注入自定义配置
import Vue from 'vue'
import formGenerator, { fgWidgets } from 'sczts-form-generator'
import fgExtends from "@/components/form_generator_extends/widgets.js"
// ...
Vue.use(formGenerator, {
  widgets: {
    ...fgWidgets,
    ...fgExtends
  },
  // 注入扩展组件目录
  extend: require.context('@/components/form_generator_extends/widgets', true, /\.(vue|js)$/),
});