jk-assembler

A Vue.js element-ui assembler and components
919
Install
npm install jk-assembler
Latest Version:1.2.9
Vue:2
License:MIT
Last Updated:Dec 27, 2020
Links: npm
Maintainer: daqiang5252

jk-assembler

集成组件系统 集成组件是提供了一个快速集成表格和操作项,可以快速完成一个管理系统的表格

快速使用

  • 全局引用注册
    import JKAssembler from 'jk-assembler'
    Vue.use(JKAssembler)
    
  • 按需引用
    # developing
    

集成组件

组件名称 组件描述 组件使用方式
JkAssembler 集成表单 查看
JkAssemblerFilter 集成表单-搜索组件 查看
JkAssemblerTable 集成表单-表格组件 查看
JkAssemblerForm 集成表单-表单组件 查看
JkAssemblerFormPanel 集成表单-表单组件(弹窗模式) 查看
JkAssemblerPagination 集成表单-分页组件 查看

JkAssembler

属性值
属性名称 属性描述 类型 默认值 版本支持
config 集成注册器的设置项 Function 1.0.0
config 属性
属性名称 属性描述 类型 默认值 版本支持
__searchList 检索方法 Function 1.0.0
filter 检索配置 Object 1.0.0
table 表格配置 Object 1.0.0
form 表单配置 Object 1.0.0

示例代码


function baseAssemblerConfig(Vue) {
  return {
    __searchList: (queryParams = {}) => {
      return TableApi.getList(queryParams)
    },
    filter: {
      ...
    },
    table: {
      ...
    },
    form: {
      ...
    }
  }
}

JkAssemblerFilter

属性值
属性名称 属性描述 类型 默认值 版本支持
realTimeRemoteSearch 是否开启实时搜索 Boolean false 1.0.0
showSearchButton 显示搜索按钮 Boolean, Function false 1.0.0
filterDefault 自定义检索条件 Object {} 1.0.0
filterOptions 检索条件 Array [] 1.0.0
custemFilterButn 自定义按钮 Array [] 1.0.0

示例代码

// 搜索栏配置项
filter: {
  // 是否开启实时搜索
  realTimeRemoteSearch: false,  // default false

  // 显示搜索按钮
  showSearchButton: true,  // default true

  // 是否显示添加按钮, boolean function 如果是function则会执行此方法
  showAddButton: true,  // default false

  // 自定义检索条件
  filterDefault: {
    key: 'value'
  },

  // 检索条件
  filterOptions: [
    {
      label: '测试',
      prop: 'name', // 绑定key
      is: 'el-input', // 声明使用组件
      // 绑定属性
      props: {
        placeholder: '请输入'
      }
    },
    {
      prop: 'status',
      is: 'select-opt',
      props: {
        option: [
          { key: 'UNLOCKED', name: '已解锁' },
          { key: 'LOCKED', name: '未解锁' }
        ],
        optionValue: 'key',
        optionLabel: 'name',
        placeholder: '解锁状态'
      }
    }
  ],
  // 自定义按钮
  custemFilterButn: [
    {
      name: '导出客户',
      props: {
        type: 'success',
        icon: 'el-icon-download'
      },
      event: async() => {
        console.log('custom butn click')
      }
    },
    ...
  ]
}

JkAssemblerTable

属性值
属性名称 属性描述 类型 默认值 版本支持
data 绑定的数据 Array [] 1.0.0
tableProps 表格中可以bind的所有值 Object {} 1.0.0
tableEvents 表格中可以bind的所有Table Events Object {} 1.0.0
tableColumns 表格列表项声明 Array [] 1.0.0
rowOperateList 表格操作项 -- 按钮组 Array [] 1.0.0

示例代码

function tableConfig() {
  return {
    // 绑定的数据
    data: [],

    // 表格中可以bind的所有值
    tableProps: {},

    // 表格中可以bind的所有Table Events
    tableEvents: {
      'sort-change': ({ column, prop, order }) => {
        if (order === 'ascending') {
          order = 'asc'
        } else if (order === 'descending') {
          order = 'desc'
        }
        const orderObj = { sort: null }
        if (order) {
          orderObj.sort = `${prop},${order}`
        }
        Vue.__setFilterListQuery(orderObj)
      },
    },

    // 表格列表项声明
    tableColumns: [
      
      // 展示选择按钮
      { type: 'selection' },

      // 展示序号
      { type: 'index' },

      // 展示为一个可展开的按钮,展开内容为prop绑定的值
      { type: 'expand', prop: 'title' },

      // 展示为一个可展开的按钮,展开内容为自定义render
      { 
        type: 'expand',
        prop: 'title',  // 绑定属性值
        render: (h,, { value, record, index }) => <div>{value}</div>
      },

      // 普通的 table-item
      {
        prop: 'id', 
        label: '编号'
      },

      // 开启sortable, 需配合table-event使用
      {
        prop: 'title',
        label: '直播标题',
        sortable: 'custom' 
      },

      // 使用全局组件
      {
        prop: 'image',
        label: '二维码',
        component: {
          is: 'table-column-images' 
        }
      },

      // 使用一个完整并且带配置的组件
      {
        prop: 'status',
        label: '上架状态',
        // 设置表单项为一个组件,组件需要全局注册,并且使用双向绑定
        component: {
          is: 'table-column-status',
          props: {
            'inactive-value': 'OFFLINE',
            'active-value': 'ONLINE'
          },
          events: function(row) {
            return {
              change: async(val) => {
                console.log(val)
              }
            }
          }
        }
      },

      // 使用自定义render
      {
        prop: 'startDate',
        label: '有效期',
        render: (h, { value, record }) =>
          <span>{ parseTime(record.startDate) } —— { parseTime(record.endDate) }</span>
      },
      {
        prop: 'status',
        label: '状态',
        sortable: 'custom',
        render: (h, { value, record }) => {
          if (value === 'ONLINE') return <el-tag type='success'>使用中</el-tag>
          return <el-tag>已失效</el-tag>
        }
      }
    ],


    // 表格操作项 -- 按钮组
    rowOperateList: [
      {
        key: 'edit', // 使用编辑key
        name: '编辑', // 按钮文字
        props: {
          icon: 'el-icon-edit-outline',
          type: 'success',
          plain: true
        }
      },
      {
        props: {
          icon: 'el-icon-document-delete',
          type: 'danger',
          plain: true
        },
        event: async(record, index, rows) => {
          // console.log('record, index, rows: ', record, index, rows)
          await Vue.$confirm('你确定要删除吗', '温馨提示', { type: 'warning' })
          const { code } = await TableApi.del(record.id)
          if (code === 200) {
            Vue.refresh()
            Vue.$message.success('删除成功!')
          }
        }
      }
    ]
  }
}

JkAssemblerForm

属性值
属性名称 属性描述 类型 默认值 版本支持
fields 表单项 Array [] 1.0.0
formProps 表单绑定属性值 Object {} 1.0.0
tableEveformEventsnts 表单绑定事件 Object {} 1.0.0
submit 点击确定-回调事件 Function ()=>{} 1.0.0
cancel 点击确定-回调事件 Function ()=>{} 1.0.0
事件
事件名称 事件描述 回调参数 版本支持
submit 点击确定-回调事件 formProps 1.0.0
cancel 点击确定-回调事件 1.0.0

示例代码

// form configs
form: {
  // 表单项
  fields: [
    {
      prop: 'title',
      rules: [{ required: true, message: '必填项' }],
      // form-item props
      attributes: {
        label: '标题'
      },
      // form-item使用的组件
      component: {
        is: 'el-input',
        props: {
          placeholder: '请输入'
        },
        events: {}
      }
    },
    {
      prop: 'image',
      rules: [{ required: true, message: '必填项' }],
      attributes: {
        label: '封面图'
      },
      component: {
        is: 'upload-image',
        props: {},
        events: {}
      }
    }
  ],

  // 表单绑定属性值
  formProps: {},

  // 表单绑定事件
  formEvents: {},

  // 点击确定-回调事件
  submit: async(row) => {
    console.log('form submit event: ', row)
  },

  // 点击取消-回调事件
  cancel: (row) => {
    console.log('form cancel event')
  }
}

JkAssemblerFormPanel

属性值
属性名称 属性描述 类型 默认值 版本支持
data/v-model 显示弹窗 Boolean [] 1.0.0
formModel 表单绑定的model值 Object {} 1.0.0
config 表单配置项 Object {} 1.0.0

示例代码

<jk-form-panel
  v-model="show"
  :formModel="formModel"
  :config="form"
  />

{
  formModel: {},
  show: false,
  form: {
    ...
  }
}

JkAssemblerPagination

属性值
属性名称 属性描述 类型 默认值 版本支持
value/v-model 分页属性 Object {currentPage: 1,pageSize: 10} 1.0.0
totalCount 总页数 Number 0 1.0.0
事件
事件名称 事件描述 回调参数 版本支持
pageSizeChange 页数size改变 true 1.0.0
currentPageChange 当前页码改变 false 1.0.0

示例代码

<jk-assembler-pagination
  v-model="pageOptions"
  :totalCount="totalCount"
  @pageSizeChange="search"
  @currentPageChange="search"
  />

使用permission

组件提供了一个permission的实现模型 avatar

如何使用

集成组件使用

组件注册器或者注册器中 filter table form 组件的props.PermissionRole 属性中添加用户拥有的权限数组

<jk-assembler :config="config" :PermissionRole="['a1','a2']"/>
在项目中使用 v-permission 指令

需要使用 window.PermissionRole告知用户的权限信息

<el-button v-permission="['a2']">点击测试第二组件</el-button>

import { permission } from 'jk-assembler'
Vue.use(permission)

window.PermissionRole = ['a1', 'a2']

使用内置全局组件

全局组件

jkColumnImages

提供给表格中的图片项

属性值
属性名称 属性描述 类型 默认值 版本支持
value/v-model 图片数组 [String, Array] ()=>[] 1.0.1
dataKey 数组中图片key String 1.0.1

示例代码

// 在集成注册器使用
table: {
  ...
  tableColumns: [
    {
      prop: 'image',
      label: 'jk-column-images',
      component: {
        is: 'jk-column-images'
      }
    }
  ],
  ...
}

// 在页面中使用
<jk-column-images v-model="imageList"/>

JkColumnStatus

该组件提供了一个表格项中的上下架和修改状态的switch

属性值
属性名称 属性描述 类型 默认值 版本支持
value/v-model 绑定的状态值 [Boolean, String, Number] false 1.0.2
activeValue switch 打开时的值 [Boolean, String, Number] true 1.0.2
inactiveValue switch 关闭时的值 [Boolean, String, Number] false 1.0.2
disabled 是否禁用 Boolean false 1.0.2
props 其他属性值 Object {} 1.0.2
事件
事件名称 事件描述 回调参数 版本支持
change 开关值改变 value 1.0.2

示例代码

// 在集成注册器使用
table: {
  ...
  tableColumns: [
    {
      prop: 'status',
      label: '上架状态',
      component: {
        is: 'jk-column-status',
        props: {
          'inactive-value': 'OFFLINE',
          'active-value': 'ONLINE'
        },
        events: function(row) {
          return {
            change: async(val) => {
              console.log(val)
            }
          }
        }
      }
    },
  ],
  ...
}

JkColumnSort

这个组件是提供表格中一个改变sort的按钮组

属性值
属性名称 属性描述 类型 默认值 版本支持
value/v-model 图片 [String, Array] 1.0.2
scope table-column属性 Object 1.0.2
scope.index table-column的index Number 1.0.2
scope.record table-column的row值 Object 1.0.2
scope.rows table的data数组值 Array 1.0.2
事件
事件名称 事件描述 回调参数 版本支持
up 点击向上按钮 两项的id {id1,id2} 1.0.0
down 点击向下按钮 两项的id {id1,id2} 1.0.0

示例代码

// 在集成注册器使用
table: {
  ...
  tableColumns: [
    {
      prop: 'id',
      label: '排序值',
      component: {
        is: 'table-column-sort',
        events: (row) => {
          return {
            up: async(val) => {
              // console.log('val: ', val)
              await TableApi.sequence(val)
              await Vue.refresh()
            },
            down: async(val) => {
              // console.log('val: ', val)
              await TableApi.sequence(val)
              await Vue.refresh()
            }
          }
        }

      }
    }
  ],
  ...
}

JkFormSelect

这个组件是提供一个选择器组件,用在集成表单和filter中

属性值
属性名称 属性描述 类型 默认值 版本支持
value/v-model 绑定的属性值 [String, Number] '' 1.0.2
option 选择项数组 [Function, Array, Promise] [] 1.0.2
optionValue 选择项的结果 [String, Number, Object] [] 1.0.2
optionLabel 选择项的展示文本 String 1.0.2
optionDefaultItem 默认选项,需和option数组项一样,默认插入头部 [String, Object] 1.0.2
disabled 是否禁用 Boolean false 1.0.2
事件
事件名称 事件描述 回调参数 版本支持
change 选择值改变 optionValue 1.0.2

示例代码

// 集成组件使用
filter: {
  {
    prop: 'status',
    is: 'jk-form-select',
    props: {
      option: [
        { key: 'UNLOCKED', name: '已解锁' },
        { key: 'LOCKED', name: '未解锁' }
      ],
      optionValue: 'key',
      optionLabel: 'name',
      placeholder: '解锁状态'
    }
  }
}

// 使用请求
async function getCourseCategories() {
  const { data } = await CourseCategories.getList()
  return data
}
{
  prop: 'categoryId',
  is: 'jk-form-select',
  props: {
    option: getCourseCategories(),
    optionValue: 'id',
    optionLabel: 'name',
    placeholder: '选择分类'
  }
},

// 在页面中使用
<el-form-item label="区域" prop="regionId">
  <jk-form-select
    v-model="addForm.regionId"
    :option="regionsOpt"
    optionValue="id"
    optionLabel="name"
  ></jk-form-select>
</el-form-item>

JkFormCheckbox

这个组件是提供一个checkbox组件,用在集成表单页中

属性值
属性名称 属性描述 类型 默认值 版本支持
value/v-model 绑定的属性值 [String, Number] '' 1.0.2
option 选择项数组 [Function, Array, Promise] [] 1.0.2
optionValue 选择项的结果 [String, Number, Object] [] 1.0.2
optionLabel 选择项的展示文本 String 1.0.2
事件
事件名称 事件描述 回调参数 版本支持
change 选择值改变 optionValue 1.0.2

示例代码

// 集成组件使用
async function getCourseCategories() {
  const { data } = await CourseCategories.getOnlineList()
  return data
}
{
  prop: 'categories',
  rules: [{ required: true, message: '请至少选择一项' }],
  attributes: {
    label: '适用范围'
  },
  component: {
    is: 'jk-form-checkbox',
    props: {
      option: getCourseCategories(),
      optionValue: 'id',
      optionLabel: 'name'
    }
  }
}

JkFormUploadImage

这个组件是提供一个单图片上传组件

属性值
属性名称 属性描述 类型 默认值 版本支持
image/v-model 绑定的属性值 String '' 1.0.2
request 图片上传Request Function 1.0.2
事件
事件名称 事件描述 回调参数 版本支持
success 图片长传成功 url 1.0.2

示例代码

<jk-form-upload-image
  v-model="image"
  :request="request"
  @success="setUpload"/>

function uploadFile(file) {
  const formdata = new FormData()
  formdata.append('files', file)
  return new Promise((resolve, reject) => {
    request({
      url: `/files`,
      headers: {
        'Content-Type': 'multipart/form-data;charset=UTF-8'
      },
      method: 'post',
      data: formdata
    }).then(res => {
      console.log('uploadFile: ', res)
      resolve(res.data[0].url)
    }).catch(err => {
      reject(err)
    })
  })
}

export default {
  data() {
    return {
      image: '',
      request: uploadFile
    }
  },
  methods: {
    setUpload(url) {
      // this.image = url
    }
  }
}

JkFormUploadVideo

这个组件是提供一个单媒体(视频,音频)上传组件

属性值
属性名称 属性描述 类型 默认值 版本支持
video/v-model 绑定的属性值 String '' 1.0.2
butnText 按钮名称 String '上传' 1.0.2
times 媒体事件 [String, Number] '' 1.0.2
request 图片上传Request Function 1.0.2
事件
事件名称 事件描述 回调参数 版本支持
success 长传成功 url 1.0.2

示例代码

<jk-form-upload-video
  v-model="image"
  :time="time"
  :request="request"
  @success="setUpload"/>

function uploadFile(file) {
  const formdata = new FormData()
  formdata.append('files', file)
  return new Promise((resolve, reject) => {
    request({
      url: `/files`,
      headers: {
        'Content-Type': 'multipart/form-data;charset=UTF-8'
      },
      method: 'post',
      data: formdata
    }).then(res => {
      console.log('uploadFile: ', res)
      resolve(res.data[0].url)
    }).catch(err => {
      reject(err)
    })
  })
}

export default {
  components: { Upload },
  data() {
    return {
      video: '',
      time: '',
      request: uploadFile
    }
  },
  methods: {
    setUpload(url) {
      // this.image = url
    }
  }
}

JkPreviewImage

这个组件是提供一个函数调用组件,用来预览图片

属性值
属性名称 属性描述 类型 默认值 版本支持
imgList 图片 [String, Array] ()=>[] 1.0.1
index 第几个图片 Number 0 1.0.1

示例代码

<el-button @click="showPrev">点击测试预览图片</el-button>

const imgList = []
const img = 'https://img10.360buyimg.com/n12/jfs/t23431/303/1885264711/153012/fe4ae9b8/5b6be240N82f3fc92.jpg'
const index = 1
showPrev() {
  this.$previewImage(img)
  this.$previewImage(imgList)
  this.$previewImage(imgList, index)
}

Build Setup

# install dependencies
npm install

# serve with hot reload at localhost:8080
npm run dev

# build for production with minification
npm run build

# publish npm
npm publish

Related Packages

vue

The progressive JavaScript framework for building modern web UI.

468,054,189 54,906
vue
eslint-plugin-vue

Official ESLint plugin for Vue.js

266,364,830 4,591
@vueuse/shared
260,835,866 22,398
@vitejs/plugin-vue

The official plugin for Vue SFC support in Vite.

257,315,514 686
@vueuse/core

Collection of essential Vue Composition Utilities

256,285,643 22,398

Version History

Version Released Vue License
1.2.9 ^2.5.11 MIT
1.2.8 ^2.5.11 MIT
1.2.7 ^2.5.11 MIT
1.2.6 ^2.5.11 MIT
1.2.5 ^2.5.11 MIT