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

@pfan/tq-customform

v1.0.16

Published

```js npm i @pfan/tq-customform

Downloads

5

Readme

安装使用

npm i @pfan/tq-customform

//mian.js  或者单个vue文件中
//注意:项目中需使用iview  本组件是基于iview 开发
import TqCustomform from '@pfan/tq-customform'
import '@pfan/tq-customform/dist/tq-customform.css'
Vue.use(TqCustomform)

使用

主表单

<!-- 新增   defaultValue 默认值 不传  status 状态 新增 可不传 -->
<form-generator ref="form" />
<!-- 未使用   defaultValue 默认值   status 状态 notUse  -->
<form-generator  ref="form"   :defaultValue="json1"   status="notUse"   /> 
<!-- 停用   defaultValue 默认值   status 状态 stop  -->
<form-generator ref="form" :defaultValue="json1" status="stop" />

子表单

<!-- 子表单  初始值 defaultValue父表单数据 用于生成左侧-->
<sub-form ref="form" :defaultValue="json" />
<!-- 子表单  修改 defaultValue父表单数据 用于生成左侧  subDefaultValue子表单数据   --->
<sub-form :defaultValue="json" :subDefaultValue="subJson" /> 

获取json 字符串

 getJson() {
    const json = this.$refs.form.getJson()
    // todo ...
    ... 
  },

组件中数据格式

{
  config: { // 表单总体样式类控制
    labelPosition: 'right', // 表单对齐方式   left/左对齐   right/右对齐   top/顶部对齐
    labelWidth: 95, // 标签宽度
    gutter: 10, // 栅格间隔
    size: 'default', // 表单尺寸   large/大   default/中(默认)   small/小
    labelColon: false // 是否添加添加冒号
  },
  schema: [{
    name: 'populationType', // 后端随机生成
    title: {
      content: '人员类型', // 标题内容
      hide: true, // 是否隐藏标题
      icon: {
        show: true, // 是否展示
        iconPosition: 'left', // 位置   文字前面left   文字后面 right
        iconType: 'icon', // 图片类型  iview  icon  img 三种
        iconName: 'help', // iview icon 或 img 的标识
        tips: '我是提示内容,我是提示内容,我是提示内容' // 提示内容
      }
    },
    type: 'String', // 字段类型,待定
    layout: 12, // 布局比例
    defaultValue: '', // 默认值
    required: true, // 是否必填显示
    // 组件的属性 可根据多个组件添加 多个
    form: { // 示例 根据具体的组件定义
      type: 'Select', 
      filterable: true,
      multiple: true,
      placeholder: '请输入英文名字', // 占位提示
      options: {
        type: 'static', // static静态数据;remote远程数据;localstorage内存数据
        remote: '/ddd/xxxx/thodName',
        localstorage: 'properties.populationType',
        staticList: [{
          label: '展示1',
          value: 'key1'
        }, {
          label: '展示2',
          value: 'key2'
        }]
      }
    },
    search: { // 搜索展示及配置
      show: true, // 是否作为搜索条件
      sort: 1, // 排序 在搜索展示里面的顺序
      layout: 6, // 搜索时占据布局 宽度 6/24
      label: '搜索叫的名字', // 默认使用 schema.description
      type: 'simple' // simple基础型;between范围型;
    },
    table: { // 列表展示及配置
        show: true, // 是否在列表展示,若为true,显示下方配置
        label: '宣传日期', // 列头显示文字,默认使用 schema.description
      //  key:'activityDate', //对应列内容的字段名 
        width: 150, // 列宽 在table 展示顺序排序使用
        fixed:'left', //列是否固定在左侧或者右侧,可选值为 left 左侧和 right 右侧
        ellipsis:'true', //开启后,文本将不换行,超出部分显示为省略号
        sortable:'true', //对应列是否可以排序
        sort: 1, // 排序 在列表展示里面的顺序
        //先提供render入口方便开发人员设置简单的个性化配置,如不同条件下的颜色/性别等
        render:'', //自定义渲染列,传入三个参数 row、column 和 index,分别指当前单元格数据,当前列数据,当前是第几行.代码块形式传入 
     },
    isImport:{// 是否可导入
      show:true,
    }
    validateRules: [ // 校验规则
      {
          "pattern":"/^[a-zA-Z\\u4e00-\\u9fa5]+$/",//正则
          "trigger":[ //触发方式
              "change"
          ],
          "type":"compose",//类型  required/必填类正则  regular/固定类正则  compose/组合类正则    custom/自定义正则
          "check":[ // 组合类正则时 用来控制 组合类选项的
              "letter",
              "chinese"
          ],
          "range":[ // 组合类正则时 用来控制 方位的
              0,
              999999
          ],
          "message":"输入格式不正确"
      }
      { // 普通正则
       "type":"custom",
       "pattern":"/^[a-zA-Z\\u4e00-\\u9fa5]+$/",//正则
        "message":"输入格式不正确"
        "trigger":[ //触发方式
          "change","blur"
        ],
      }
    ],
    // 控制 可见 和 disabled 状态
    // insert/新增  update/修改  view/查看
    controller: {
      disabled: {
        update: false,
        view: true
      },
      visible: {
        update: true,
        view: true
      }
    }
  }]
  //行容器相关  用于将行容器组件 提取出来
  rows:[]
}

行容器 注意事项

  • 行容器 无法嵌套 2层 (即 行容器中无法再次拖入行容器)
  • 导出数据 和导入数据时 需要进行数据处理 (处理行容器)

{"config":{"labelPosition":"left","labelWidth":90,"gutter":20,"size":"default","labelColon":false},"schema":[{"id":1633751801737,"type":"string","name":"","defaultValue":null,"layout":24,"required":false,"title":{"content":"标题1","hide":false,"icon":{"show":false,"iconPosition":"left","iconType":"icon","iconName":"","tips":""}},"form":{"type":"Select","options":{"type":"static","remote":"","localstorage":"","static":[{"label":"展示1","value":"key1"},{"label":"展示2","value":"key2"}]}},"validateRules":[],"search":{"show":false,"sort":1,"layout":6,"label":"","type":"simple"},"table":{"show":false,"label":"","width":150,"fixed":"","ellipsis":false,"sortable":false,"sort":1,"render":""},"controller":{"disabled":{"insert":false,"update":false,"view":true},"visible":{"insert":true,"update":true,"view":true}}},{"id":1633751801734,"type":"any","name":"","defaultValue":null,"layout":24,"required":false,"title":{"content":"行容器","hide":false,"icon":{"show":false,"iconPosition":"left","iconType":"icon","iconName":"","tips":""}},"form":{"type":"Row"},"validateRules":[],"search":{"show":false,"sort":1,"layout":6,"label":"","type":"simple"},"table":{"show":false,"label":"","width":150,"fixed":"","ellipsis":false,"sortable":false,"sort":1,"render":""},"controller":{"disabled":{"insert":false,"update":false,"view":true},"visible":{"insert":true,"update":true,"view":true}},"schema":[{"id":1633751801735,"type":"string","name":"","defaultValue":null,"layout":24,"required":false,"title":{"content":"标题21","hide":false,"icon":{"show":false,"iconPosition":"left","iconType":"icon","iconName":"","tips":""}},"form":{"type":"Input"},"validateRules":[],"search":{"show":false,"sort":1,"layout":6,"label":"","type":"simple"},"table":{"show":false,"label":"","width":150,"fixed":"","ellipsis":false,"sortable":false,"sort":1,"render":""},"controller":{"disabled":{"insert":false,"update":false,"view":true},"visible":{"insert":true,"update":true,"view":true}}},{"id":1633751801736,"type":"string","name":"","defaultValue":null,"layout":24,"required":false,"title":{"content":"标题22","hide":false,"icon":{"show":false,"iconPosition":"left","iconType":"icon","iconName":"","tips":""}},"form":{"type":"Input"},"validateRules":[],"search":{"show":false,"sort":1,"layout":6,"label":"","type":"simple"},"table":{"show":false,"label":"","width":150,"fixed":"","ellipsis":false,"sortable":false,"sort":1,"render":""},"controller":{"disabled":{"insert":false,"update":false,"view":true},"visible":{"insert":true,"update":true,"view":true}}}]},{"id":1633751801738,"type":"string","name":"","defaultValue":null,"layout":24,"required":false,"title":{"content":"标题3","hide":false,"icon":{"show":false,"iconPosition":"left","iconType":"icon","iconName":"","tips":""}},"form":{"type":"Input"},"validateRules":[],"search":{"show":false,"sort":1,"layout":6,"label":"","type":"simple"},"table":{"show":false,"label":"","width":150,"fixed":"","ellipsis":false,"sortable":false,"sort":1,"render":""},"controller":{"disabled":{"insert":false,"update":false,"view":true},"visible":{"insert":true,"update":true,"view":true}}}]}

{"config":{"labelPosition":"left","labelWidth":90,"gutter":20,"size":"default","labelColon":false},"schema":[{"id":1633751801737,"type":"string","name":"","defaultValue":null,"layout":24,"required":false,"title":{"content":"标题1","hide":false,"icon":{"show":false,"iconPosition":"left","iconType":"icon","iconName":"","tips":""}},"form":{"type":"Select","options":{"type":"static","remote":"","localstorage":"","static":[{"label":"展示1","value":"key1"},{"label":"展示2","value":"key2"}]}},"validateRules":[],"search":{"show":false,"sort":1,"layout":6,"label":"","type":"simple"},"table":{"show":false,"label":"","width":150,"fixed":"","ellipsis":false,"sortable":false,"sort":1,"render":""},"controller":{"disabled":{"insert":false,"update":false,"view":true},"visible":{"insert":true,"update":true,"view":true}}},{"id":1633751801735,"type":"string","name":"","defaultValue":null,"layout":24,"required":false,"title":{"content":"标题21","hide":false,"icon":{"show":false,"iconPosition":"left","iconType":"icon","iconName":"","tips":""}},"form":{"type":"Input"},"validateRules":[],"search":{"show":false,"sort":1,"layout":6,"label":"","type":"simple"},"table":{"show":false,"label":"","width":150,"fixed":"","ellipsis":false,"sortable":false,"sort":1,"render":""},"controller":{"disabled":{"insert":false,"update":false,"view":true},"visible":{"insert":true,"update":true,"view":true}}},{"id":1633751801736,"type":"string","name":"","defaultValue":null,"layout":24,"required":false,"title":{"content":"标题22","hide":false,"icon":{"show":false,"iconPosition":"left","iconType":"icon","iconName":"","tips":""}},"form":{"type":"Input"},"validateRules":[],"search":{"show":false,"sort":1,"layout":6,"label":"","type":"simple"},"table":{"show":false,"label":"","width":150,"fixed":"","ellipsis":false,"sortable":false,"sort":1,"render":""},"controller":{"disabled":{"insert":false,"update":false,"view":true},"visible":{"insert":true,"update":true,"view":true}}},{"id":1633751801738,"type":"string","name":"","defaultValue":null,"layout":24,"required":false,"title":{"content":"标题3","hide":false,"icon":{"show":false,"iconPosition":"left","iconType":"icon","iconName":"","tips":""}},"form":{"type":"Input"},"validateRules":[],"search":{"show":false,"sort":1,"layout":6,"label":"","type":"simple"},"table":{"show":false,"label":"","width":150,"fixed":"","ellipsis":false,"sortable":false,"sort":1,"render":""},"controller":{"disabled":{"insert":false,"update":false,"view":true},"visible":{"insert":true,"update":true,"view":true}}}],"rows":[{"id":1633751801734,"type":"any","name":"","defaultValue":null,"layout":24,"required":false,"title":{"content":"行容器","hide":false,"icon":{"show":false,"iconPosition":"left","iconType":"icon","iconName":"","tips":""}},"form":{"type":"Row"},"validateRules":[],"search":{"show":false,"sort":1,"layout":6,"label":"","type":"simple"},"table":{"show":false,"label":"","width":150,"fixed":"","ellipsis":false,"sortable":false,"sort":1,"render":""},"controller":{"disabled":{"insert":false,"update":false,"view":true},"visible":{"insert":true,"update":true,"view":true}},"ids":[1633751801735,1633751801736]}]}

20211009 开会改动问题

增加可导入字段 isImport

{
  ...
  schema: [{
    ...
    // import 关键字 怕后端有影响  使用isImport 字段    
    isImport:{ //便于后续扩展  使用对象
      show:true,
      }
    }
  ]
}

static 字段变更

{
  ...
  schema: [{
    ...
   form:{
     ...
    options: {
      type: 'static', //注意这里的类型 static不变    static静态数据;remote远程数据;localstorage内存数据
      remote: '/ddd/xxxx/thodName',
      localstorage: 'properties.populationType',
      staticList: [{// static--> staticList
        label: '展示1',
        value: 'key1'
      }, {
        label: '展示2',
        value: 'key2'
      }]
    }
   }
  }
]

关于 正则

预定义正则分类

必填类正则
固定类正则

  • 手机
  • 电话
  • 手机+电话
  • 身份证
  • 邮箱 组合类正则
    自定义正则

预定义正则

const RULES = [
  { type: 'required', name: '必填', pattern: '/[\\S]+/', message: '请输入必填项' },
  { type: 'mobile', name: '手机号', pattern: '/^1[3456789]\\d{9}$/', message: '请输入手机号' },
  { type: 'phone', name: '固定电话', pattern: '/^0\\d{2,3}-\\d{7,8}$/', message: '请输入固定电话' },
  { type: 'contact', name: '联系方式(手机+固定电话)', pattern: '/(^1[3456789]\\d{9}$)|(/^0\\d{2,3}-\\d{7,8}$)/', message: '请输入联系方式' },
  { type: 'number', name: '正整数', pattern: '/^\\d+$/', message: '请输入正整数' },
  { type: 'email', name: '邮箱', pattern: '/^([A-Za-z0-9_-.])+@([A-Za-z0-9_-.])+.([A-Za-z]{2,4})$/', message: '请输入邮箱' },
  { type: 'idCard', name: '身份证', pattern: '/(^\\d{15}$)|(^\\d{17}([0-9]|X|x)$)/', message: '请输入身份证号' },
]

预定义组合类正则 子项

const COMPOSES = [
  { type: 'number', name: '数字', pattern: '0-9' },
  { type: 'letter', name: '字母', pattern: 'a-zA-Z' },
  { type: 'underline', name: '下划线', pattern: '_' },
  { type: 'reduce', name: '减号', pattern: '-' },
  { type: 'chinese', name: '中文', pattern: '\\u4e00-\\u9fa5' },
  { type: 'range', name: '范围', pattern: '{0,999999}' },
]

正则子项 数据格式

{
    "pattern":"/^[a-zA-Z\\u4e00-\\u9fa5]+$/",//正则
    "trigger":[ //触发方式
        "change"
    ],
    "type":"compose",//类型  required/必填类正则  regular/固定类正则  compose/组合类正则    custom/自定义正则
    "check":[ // 组合类正则时 用来控制 组合类选项的
        "letter",
        "chinese"
    ],
    "range":[ // 组合类正则时 用来控制 方位的
        0,
        999999
    ],
    "id":1634001301454 //生成时间戳 id 
}

1027 修改正则规则

const RULES = [
  { type: 'required', name: '必填', pattern: '/[\\S]+/', message: '请输入必填项' },
  { type: 'mobile', name: '手机号', pattern: '/^1[3456789]\\d{9}$/', message: '请输入手机号' },
  { type: 'phone', name: '固定电话', pattern: '/^0\\d{2,3}-\\d{7,8}$/', message: '请输入固定电话' },
  { type: 'contact', name: '联系方式(手机+固定电话)', pattern: '/(^1[3456789]\\d{9}$)|(/^0\\d{2,3}-\\d{7,8}$)/', message: '请输入联系方式' },
  { type: 'email', name: '邮箱', pattern: '/^([A-Za-z0-9_-.])+@([A-Za-z0-9_-.])+.([A-Za-z]{2,4})$/', message: '请输入邮箱' },
  { type: 'idCard', name: '身份证', pattern: '/(^\\d{15}$)|(^\\d{17}([0-9]|X|x)$)/', message: '请输入身份证号' },
  { type: 'number', name: '数字', pattern: '/^\\d+$/', message: '请输入数字' },
  { type: 'chinese', name: '中文', pattern: '/^[\\u4e00-\\u9fa5]+$/', message: '请输入中文' },
  { type: 'chineseenglish', name: '中英文', pattern: '/^[a-zA-z\\u4e00-\\u9fa5]+$/', message: '请输入中英文' },
  { type: 'min', name: '最小字符长度', pattern: '/^[\\s\\S]{6,}$/', message: '最少输入6个字符长度' },
  { type: 'max', name: '最大字符长度', pattern: '/^[\\s\\S]{0,99}$/', message: '最大输入99个字符长度' },
]

类型

[
  {
    value: 'required',
    label: '必填项校验',
  },
  {
    value: 'textformat',
    label: '文本格式校验',
    children: [
      {
        value: 'mobile',
        label: '手机号',
      },
      {
        value: 'phone',
        label: '固定电话',
      },
      {
        value: 'contact',
        label: '联系方式(手机+固定电话)',
      }, {
        value: 'number',
        label: '正整数',
      }, {
        value: 'email',
        label: '邮箱',
      }, {
        value: 'idCard',
        label: '身份证',
      },
    ],
  },
  {
    value: 'texttype',
    label: '文本类型校验',
    children: [
      {
        value: 'number',
        label: '数字',
      },
      {
        value: 'chinese',
        label: '中文',
      },
      {
        value: 'chineseenglish',
        label: '中英文',
      },
    ],
  },
  {
    value: 'lengthrange',
    label: '长度范围校验',
    children: [
      {
        value: 'min',
        label: '最小字符长度',
      },
      {
        value: 'max',
        label: '最大字符长度',
      },
    ],
  },
  {
    value: 'custom',
    label: '正则表达式校验',
  },
]