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

vue-ele-editable

v1.0.3

Published

高效、简单、强大的 element-ui 行内编辑组件

Downloads

57

Readme

vue-ele-editable | 高效、简单、强大的 element-ui 行内编辑组件

MIT Licence npm download

介绍

vue-ele-editable 是一个高效、简单、强大的 element-ui 行内编辑组件, 引用组件后, 仅通过数据就可以完成行内编辑功能, 具体特点如下:

  • 支持多种内置组件: input、select、radio、checkbox、textarea、date、time、datetime、text、url、status、switch、image、upload-image、time-text、date-text、datetime-text、color、number
  • 支持 Popover 和 Inline 两种模式
  • 支持数据校检、自定义属性、自定义显示数据、自定义发送数据
  • 足够简单, 仅需要 1 行 html 代码和数据即可

为了帮助您更好的了解和使用, star 数超过 100 的话, 有视频源码讲解, 希望能给个 star😘😘😘

效果图

示例

在线示例

https://codepen.io/dream2023/pen/dBNNbP

安装

npm install vue-ele-editable --save

使用

import EleEditable from 'vue-ele-editable'
Vue.use(EleEditable)

// 在引入 EleEditable 时,可以传入一个全局配置对象
// key 是组件名, value 是组件的属性, 例如:
Vue.use(EleEditable, {
  // 所有 image 类型的组件都会有 lazy: true 的属性
  image: {
    lazy: true
  },
  // 所有的 number 类型的组件都会有 step: 10 的属性
  number: {
    step: 10
  },
  ...
})

Props

参数总览

props: {
  // 类型
  type: {
    type: String,
    default: 'text'
  },
  // 字段
  field: {
    type: String,
    required: true
  },
  // 是否为行内
  inline: {
    type: Boolean,
    default: false
  },
  // 标题
  title: String,
  // 字段值
  value: [String, Number, Boolean, Array, Date],
  // 默认值
  defaultValue: {
    type: [String, Number, Boolean, Array, Date],
    default: null
  },
  // 自定义组件是否需要包裹
  isNoWrapper: {
    type: Boolean,
    default: false
  },
  // 选项
  options: {
    type: Array,
    default () {
      return []
    }
  },
  // 请求地址
  requestFn: Function,
  // 校检规则
  rules: [Array, Object],
  // 其他附带数据
  customData: Object,
  // 自定义属性
  customAttrs: Object,
  // 格式化显示数据
  displayFormatter: Function,
  // 对请求数据格式化
  valueFormatter: Function,
  // 值空时显示的文本
  emptyText: {
    type: String,
    default: '空'
  }
}

参数讲解

type:

type 用于指定渲染组件, 目前支持的内置组件有:

| 类型 | 含义 | 属性参考 | | ------------- | ---------------------------------------------------- | ---------------------------------------------------------------------------------------- | | text | 静态文本 | | | image | 单个图片/多张图片 | vue-ele-gallery | | upload-image | 上传图片 | vue-ele-upload-image | | input | 可编辑的单行文本 | element-ui input | | textarea | 可编辑的多行文本 | element-ui input | | select | 下拉框 | element-ui select | | number | 可编辑数字 | element-ui input-number | | radio | 单选 | element-ui radio | | checkbox | 多选 | element-ui checkbox | | datetime | 可编辑的日期时间 (可接受时间戳, 字符串, Date 类型值) | element-ui datetime-picker | | datetime-text | 不可编辑的日期时间 (接受值同上) | | | date | 可编辑的日期 (接受值同上) | element-ui date-picker | | date-text | 不可编辑的日期 (接受值同上) | | | time | 可编辑的时间 (接受值同上) | element-ui time-picker | | time-text | 不可编辑的时间 (接受值同上) | | | status | 状态 | element-ui tag | | switch | 开关 | element-ui switch | | url | 链接 | | | color | 颜色 | element-ui color-picker |

type不是以上任何一个类型时, 就会按照传递的名字渲染, 可以进行自定义扩展组件, 具体参考 自定义扩展示例 rate, 自定义扩展示例 slider, 具体表现形式, 请看在线示例

isNoWrapper:

isNoWrapper用于自定义组件是否需要包裹, 举例, input 是包裹组件, switch 就是不包裹组件, 内置组件的包裹与否无法改变, 只能改变自定义组件, 例如上面的 rate 组件就是不包裹, slider组件就是包裹组件

customAttrs:

customAttrs 自定义组件属性, 例如将 input 变为密码框:

{
  type: 'input',
  // 属性参考 element-ui input组件
  customAttrs: {
    'show-password': true
  }
}

field:

field 用于发送请求, 作为数据的 key, 例如:

{
  value: 'zhang'
  field: 'name'
}

// 最终发送的数据为:
{
  name: 'zhang'
}

inline:

inline 用于指定是采用 popover 还是 inline 的模式, 默认为 popover

title:

title 用于弹窗的标题

value:

value 值, 可用 v-model 绑定

defaultValue:

defaultValuevalue 不存在时, 代替 value, 例如:

{
  value: '',
  field: 'name',
  defaultValue: '匿名'
}

// 最终显示到屏幕上为: 匿名

displayFormatter:

displayFormatter 用于对值显示的进一步处理, 例如:

// 伪代码
{
  value: 10,
  displayFormatter: function (value) {
    return `${value} 岁`
  }
}

// 最终显示到屏幕上为: 10 岁

emptyText:

emptyText 用于当无数据时, 显示的字符串, 例如:

{
  field: 'mobile',
  // 当 value, defaultValue 和 displayFormatter都返回空时, 才起作用
  value: '',
  defaultValue: '',
  displayFormatter: null,
  emptyText: '无手机可用'
}

// 最终显示到屏幕上为: 无手机可用

options:

options 用于 checkbox、radio、select、status 组件的选项, 支持对象数组和字符串数组:

// 对象数组形式 (text 用于展示, 实际值是 value)
options: [{ text: '男', value: 'male' }, { text: '女', value: 'female' }]

// 字符串数组 (相当于 [{ text: '男', value: '男' }, { text: '女', value: '女' }])
options: ['男', '女']

requestFn:

requestFn 请求函数, 此函数无论如何最终要返回一个 Promise 示例, 用于判断请求的状态和结果

有两种情况, 一种是你需要对原请求的响应结果进行处理, 可以套一层 Promise:

// 伪代码
async function requestFn(data) {
  return new Promise((resolve, reject) => {
    try {
      const res = await axios.post('/post', data)
      // 对res做各种处理
      ...
      resolve()
    } catch(e) {
      reject(e)
    }
  })
}

另一个种是不需要处理, 可以直接返回一个Promise对象

async function requestFn(data) {
  return axios.post('/post', data)
}

rules:

rules 用于校检, 校检规则同 element-ui 的 form 一样, 都是使用的 async-validator, 支持数组和对象两种形式, 例如:

// 对象
rules: {
  required: true,
  message: '名称不能为空'
}

// 数组
rules: [
  { type: 'number', message: '年龄必须填写数字' },
  { required: true, message: '年龄必填填写' }
]

customData:

customData 用于携带额外数据, 例如:

// 伪代码

// props的值
{
  field: 'name',
  value: 'zhangchaojie',
  customData: {
    id: 10,
    status: 1
  }
}

// 最终发送的数据为:
{
  name: 'zhangchaojie',
  id: 10,
  status: 1
}

valueFormatter:

valueFormatter 用于对请求数据的进一步处理, 例如:

// 伪代码

// props 值
field: 'age',
value: 10,
customData: { id: 1 },
valueFormatter: function (value) {
  return value + 1
}

// 最终发送的值为:
{
  age: 11,
  id: 1
}

参考链接