Coder Social home page Coder Social logo

dream2023 / vue-ele-editable Goto Github PK

View Code? Open in Web Editor NEW
38.0 0.0 10.0 7.79 MB

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

License: MIT License

JavaScript 9.11% Vue 89.66% HTML 1.22%
element-ui element-table editable x-editable vue-editable vue-ele-editable

vue-ele-editable's Introduction

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
}

参考链接

vue-ele-editable's People

Contributors

dependabot[bot] avatar dream2023 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

vue-ele-editable's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.