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

admin-base-frame

v1.0.29

Published

基于Vue、Element_UI的后台管理基础框架,提供后台管理常用组件、指令、方法等

Downloads

11

Readme

admin-base-frame

基于 Vue、Element_UI 的后台管理基础框架,提供后台管理常用组件、指令、方法等

Installation

Using npm:

  $ npm install --save admin-base-frame

Using yarn:

  $ yarn add admin-base-frame

Quick Start

import AdminBaseFrame from 'admin-base-frame'
/*
 * @param {String} el Vue 的挂载元素
 * @param {element} App[required] 根组件
 * @param {Object} routeOptions[required] vue-router options[mode, beforeEach...]; routeMap: {constantRoutes: 固定路由 routes: 第一层路由 routes_2: 第二层 以此类推(层级高的页面显示在前)}
 * @param {Object} storeMap new Vuex.Store(params) 中的params
 * @param {Object} vueArg  Vue 的其他参数
 * @param {String} title  标题
 * @param {String} iconFamily 自己引入的iconfont的名称
 * @param {Object} loginPageConf 登录页的配置
 */
AdminBaseFrame.init({
  el: '#app',
  App,
  routeOptions: {
    beforeEach,
    afterEach,
    routeMap: {
      routes
    }
  },
  storeMap: store,
  vueArg: {},
  title: 'xx系统',
  iconFamily: 'iconfont',
  loginPageConf: {
    title: '登录'
  }
})

暴露的属性

  window.ADMIN_BASE_FRAME = {
    version // 版本号
    store // vuex store 实例
    createRouter // 创建路由 params:{ roles = [] }
    resetRouter // 重置路由
    setUserInfo // 用于设置导航栏的头像 params: { name, avatar }
    setLastVisitedView // 设置最后访问的页面 params: path
  }

监听事件

// event: login | logout
// params: 参数
this.$root.eventHub.$on('adminBaseFrameEvent', (event, params) => {
  // do something
})

组件

dialog

// html
;`
    <ab-dialog>
      // body element
    </ab-dialog>
  `
// props
title: String // 标题
width: String // 宽度 default: 50%
customClass: String // 自定义类名
showClose: Boolean // 是否显示关闭按钮 default: true
closeOnClickModal: Boolean // 是否可以通过点击modal关闭Dialog default: false
center: Boolean // 是否对头部和底部采用居中布局 default: true
// on event
openCallback() // Dialog 打开的回调
closeCallback() // Dialog 关闭的回调
closeedCallback() // Dialog 关闭动画结束的回调
cancel() // Dialog点击取消的回调
confirm() // Dialog点击确认的回调

filter

  // html
  `
    <ab-filter />
  `
  // props
  // 自定义类名
  className: String
  /**
   * @Array { object }
   * @desc 搜索栏列表
   * @property { string } label 显示文本
   * @property { string } key form-item绑定的字段
   * @property { string } value form-item绑定字段的默认值
   * @property { string } type form-item类型 input || select || time || date
   * @property { string } event 事件名
   * @property { string } placeholder placeholder
   * @property { [object] } options select element options
   * @property { string } dateType el-date-picker type
   */
  filterList: {
    type: Array,
    default() {
      return []
    }
  }
  // default btn list: ['btn_search', 'btn_reset', 'btn_export']
  defaultBtn: {
    type: Array,
    default() {
      return []
    }
  }
  /**
   * @Array { object }
   * @desc 搜索栏按钮列表
   * @property { string } label 显示文本
   * @property { string } icon icon
   * @property { string } elType 类型
   * @property { string } event 事件名
   * @property { [string] } reqField 当事件触发时希望得到的数据
   * @property { [object] } dropdownMenu el-dropdown-menu {label, event}
   */
  filterBtnList: {
    type: Array,
    default() {
      return []
    }
  }
  // label width
  labelWidth: {
    type: String,
    default: '80px'
  }
  // 是否显示switch btn
  showSwitch: {
    type: Boolean,
    default: true
  }
  // 是否左右布局
  isFlexRow: Boolean
  // on event
  // event: ['自定义事件']事件名  searchQuery: 搜索条件
  handleFilterBodyEvent(event, searchQuery)
  handleFilterBtnClick(event, searchQuery)

form

  // html
  `
    <ab-form />
  `
  // props
  // 自定义类名
  className: String
  // label宽度
  labelWidth: {
    type: String,
    default: '120px'
  }
  // 验证规则
  formRules: {
    type: Object,
    default() {
      return {}
    }
  }
  /**
   * @Array { object }
   * @desc 表格字段配置
   * @property { string } type el-form-item type 使用对应的控件
   * @property { string } label el-form-item label 表单item对应的文本
   * @property { string } key el-form-item prop 表单item对应的字段
   * @property { any } value el-form-item prop 表单item对应的字段的值
   * @property { string } className el-form-item class
   * @property { string } placeholder placeholder
   * @property { function } props 返回需要使用的字段数据 el-select\el-radio > {options, value: item联动需要强制设置的值, ...arg}
   * @property { function } ifRender 返回Boolean true: 显示 false: 隐藏
   * @property { object } elProp element ui 组件的其他属性
   * @property { object } style style
   */
  fieldList: Array
  // on event
  // event: ['submit', '自定义事件']  data: form data
  handleEvent(event, data)

page-table

  // html
  <ab-page-table />
  // props
  // 自定义类名
  className: {
    type: String,
    default: ''
  }
  // 刷新: 在父组件通过设置 refresh = Math.random() 达到刷新目的
  refresh: Number
  // 获取数据的接口
  apiFn: Function
  // 表格数据所在字段
  resFieldListStr: {
    type: String,
    default: 'data'
  }
  // 数据总数所在字段
  resFieldTotalStr: {
    type: String,
    default: 'data'
  }
  // 是否显示序号
  showTabIndex: {
    type: Boolean,
    default: false
  }
  // 是否有选择框
  hasCheckBox: {
    type: Boolean,
    default: true
  }
  // 选中列表
  checkedList: {
    type: Array,
    default: () => {
      return []
    }
  }
  // 重置当前页
  initCurpage: {
    type: Number,
    default: 1
  }
  // 查询条件
  query: {
    type: Object,
    default: () => {
      return {}
    }
  }
  /**
   * @Array { object }
   * @desc 表格字段配置
   * @property { string } label 表头text
   * @property { string } value 对应列的字段
   * @property { string } width width
   * @property { string } minWidth minWidth
   * @property { string } fixed fixed
   * @property { Boolean } hidden 是否隐藏
   * @property { Boolean | 'custom' } sortable 是否可排序
   * @property { String } tagType el-tag type
   * @property { Function } format 格式化显示内容
   */
  fieldList: {
    type: Array,
    default: () => {
      return []
    }
  }
  /**
   * @prop { object }
   * @desc 操作栏配置
   * @property { string } label 显示文本
   * @property { string } fixed fixed position
   * @property { string } width width
   * @property { [object] } btnList 按钮列表 {label, type, icon, event: event_name, show: Boolean}
   */
  handle: {
    type: Object,
    default() {
      return {}
    }
  }
  // 列表数据
  tableData: {
    type: Array,
    default: () => {
      return []
    }
  }
  // filter label width
  filterLabelWidth: {
    type: String,
    default: '80px'
  }
  /**
   * @Array { object }
   * @desc 搜索栏列表
   * @property { string } label 显示文本
   * @property { string } key form-item绑定的字段
   * @property { string } value form-item绑定字段的默认值
   * @property { string } type form-item类型 input || select || time || date
   * @property { string } event 事件名
   * @property { string } placeholder placeholder
   * @property { [object] } options select element options
   * @property { string } dateType el-date-picker type
   */
  filterList: Array
  /**
   * @Array { object }
   * @desc 搜索栏按钮列表
   * @property { string } label 显示文本
   * @property { string } icon icon
   * @property { string } elType 类型
   * @property { string } event 事件名
   * @property { [string] } reqField 当事件触发时希望得到的数据
   * @property { [object] } dropdownMenu el-dropdown-menu
   */
  filterBtnList: {
    type: Array,
    default() {
      return []
    }
  }
  // filter default btn list: ['btn_search', 'btn_reset', 'btn_export']
  defaultFilterBtn: {
    type: Array,
    default() {
      return []
    }
  }
  // 是否显示 filter switch btn
  showFilterSwitch: {
    type: Boolean,
    default: true
  }
  // 是否左右布局
  filterIsFlexRow: Boolean
  // 是否可拖拽
  canDrop: {
    type: Boolean,
    default: false,
  }
  // table title
  tableTitle: String
  // on event
  /*
   * event: ['btn_search', 'btn_export_cur', 'btn_export_all' ,'使用者自定义事件']
   * data: 希望得到的数据
   */
  handleFilterBtnClick(event, data)
  /*
   * filter body event: input 回车触发的事件等
   * event: 使用者自定义事件
   * data: query
   */
  handleFilterBodyEvent(event, data)
  // 表格内部按钮的点击事件(使用者自定义的事件)派发 event: ['tableCheckRows', 'tableSortChange', '使用者自定义事件']  data: data
  handleTableEvent(event, data)

folder-tree

  // html
  `
    <ab-folder-tree />
  `
  // props
  // 自定义类名
    className: String,
    // 树
    dataTree: {
      type: Array,
      default() {
        return []
      }
    },
    // 是否显示过滤栏
    showFilterBar: {
      type: Boolean,
      default: false
    },
    // el-tree filter-node-method
    filterNode: {
      type: Function,
      default() {
        return (value, data) => {
          if (!value) return true
          return data.label.indexOf(value) !== -1
        }
      }
    },
    // 默认展开所有
    defaultExpandAll: {
      type: Boolean,
      default: false
    },
    // 是否每次只打开一个同级树节点
    accordion: {
      type: Boolean,
      default: false
    },
    // 是否懒加载子节点
    lazy: {
      type: Boolean,
      default: false
    },
    // 获取数据的接口
    apiFn: Function,
    // 根节点 如果是函数请返回数组
    rootNode: {
      type: [Array, Function],
      default() {
        return [{ label: '/', id: 0, children: [] }]
      }
    },
    // 页码对应的字段和初始值
    pnConf: {
      type: Object,
      default() {
        return {
          key: 'pn',
          value: 1
        }
      }
    },
    // page size 对应的字段和初始值
    psConf: {
      type: Object,
      default() {
        return {
          key: 'ps',
          value: 10
        }
      }
    },
    // 懒加载节点的请求参数字段
    queryField: {
      type: Array,
      default() {
        return []
      }
    }
    // on event
    /*
    * event: ['appendNode', 'removeNode', 'refreshNode', 'nodeClick', '使用者自定义事件']
    * data: node data
    * callback: function
    */
    handleEvent(event, data, callback)

upload

  // html
  `
    <ab-upload />
  `
  // props
  // 自定义类名
  className: String
  // 上传的地址
  url: {
    type: String,
    default: ''
  }
  // 是否支持上传多个
  multiple: {
    type: Boolean,
    default: true
  }
  // 显示上传的内容
  fileData: {
    type: Array
  }
  // 是否自动上传
  autoUpload: {
    type: Boolean,
    default: true
  }
  // 上传参数
  uploadData: {
    type: Object,
    default() {
      return {}
    }
  }
  // 上传的文件类型
  uploadType: {
    type: String,
    default: 'image'
  }
  drag: Boolean,
  // 上传的文件个数
  uploadNums: {
    type: Number,
    default: -1
  }
  // 文件类型
  listType: {
    type: String,
    default: 'text'
  }
  // el-upload slot trigger text
  slotTriggerText: {
    type: String,
    default: '点击上传'
  }
  // el-upload slot tip text
  slotTip: String
  displayMod: {
    type: String,
    default: 'btn' // btn: 按钮 drag: 拖拽 plus: 加号
  }
  // on event
  /*
   * event: ['uploadTypeError', 'uploadProgress', 'uploadSuccess', 'uploadFail']
   * data: data
   */
  handleEvent(event, data)

histogram

  // html
  `
    <ab-chart-histogram />
  `
  // props
  // 要显示的数据 {rows: [{}], columns: []}
    data: {
      type: Object,
      default() {
        return {}
      }
    }
    /**
     * 自定义设置
     * dimension: array 维度: 默认columns第一项为维度
     * metrics: array 指标: 默认columns第二项起为指标
     * yAxisType: array 左右坐标轴数据类型: 可选值: KMB, normal, percent
     * yAxisName: array 左右坐标轴标题
     * axisSite: object 指标所在的轴: 默认不在right轴的指标都在left轴
     * digit: number 设置数据类型为percent时保留的位数: 默认为2
     * scale: array 是否是脱离 0 值比例: 默认为[false, false],表示左右两个轴都不会脱离0值比例。设置成 true 后坐标刻度不会强制包含零刻度
     * min: array 左右坐标轴最小值
     * max: array 左右坐标轴最大值
     * labelMap: object 设置指标的别名,同时作用于提示框和图例
     * legendName: object 设置图表上方图例的别名
     * label: object 设置图形上的文本标签
     * itemStyle: object 图形样式
     * showLine: array 展示为折线图的指标
     * xAxisType: string 横轴的类型: 可选值'category','value',默认为'category'
     * opacity: number 透明度
     * stack: object 堆叠选项
     */
    settings: {
      type: Object,
      default() {
        return {}
      }
    }
    // 背景对象
    theme: Object
    // 背景名
    themeName: String
    // echarts.init 是的initOptions
    initOptions: {
      type: Object,
      default() {
        return {}
      }
    }
    // echarts的option格式,可覆盖data、settings的属性
    option: {
      type: Object,
      default() {
        return {}
      }
    }

line

// html
;`
    <ab-chart-line />
  `
// props 同histogram

circle-counter

  // html
  `
    <ab-circle-counter />
  `
  // props
  // 元素的width、height
  size: {
    type: String,
    default: '100%'
  },
  // 进度值颜色
  activeCountColor: {
    type: String,
    default: '#333'
  },
  // 进度值fontsize
  activeCountFontSize: {
    type: String,
    default: '40px'
  },
  // 文本
  label: {
    type: String,
    default: ''
  },
  // 文本fontsize
  labelFontSize: {
    type: String,
    default: '32px'
  },
  // 最大值
  dashCount: {
    type: Number,
    default: 100
  },
  // 实际值
  activeCount: {
    type: Number,
    default: 10
  },
  // 圆边占半径百分比
  strokeWidth: {
    type: Number,
    default: 5
  },
  // 激活的圆边占半径百分比
  activeWidth: {
    type: Number,
    default: 5
  },
  // 圆弧颜色
  stroke: {
    type: String,
    default: '#333'
  },
  // 激活的圆弧颜色
  activeStroke: {
    type: String,
    default: '#e58346'
  },
  // 虚线间距占宽度的比例
  dashSpacing: {
    type: Number,
    default: 1 / 4
  },
  // 旋转角度
  rotate: {
    type: Number,
    default: -90
  },
  // 顺时针、逆时针
  reverse: {
    type: Boolean,
    default: false
  }

directive

v - focus // 自动聚焦
v - interval - click // 一定事件间隔内(默认1s)频繁点击 只触发一次
v - waves // 点击按钮水波纹效果

utils

this.ab_func = {
  hasClass,
  addClass,
  removeClass,
  mixin, // 混合对象
  parseTime, // 格式化时间 (Object|string|number, 'y-m-d h:i:s')
  formatTime, // (stringn|number) 根据现在时间返回对应文案(刚刚、x分钟前...)
  safe, // 数据安全访问 (object|Array[原始数据], string[要返回的数据,用'.'连接,数组用'.+数字表示'], *[如果数据有误,返回的值,选填])
  exportJsonToExcel // 导出表格数据 ({ allColumns = [{label: '表头文案', value: '对应的字段'}], tableData, excelName })
}

common style

  $n: 5 10 20 30 ...
  pd-t$n: padding-top: $npx
  pd-l$n: padding-left: $npx
  pd-r$n: padding-right: $npx
  pd-b$n: padding-bottom: $npx
  pd-x$n: padding: 0 $npx
  pd-y$n: padding: $npx 0
  pd-f$n: padding: $npx

  mg-t$n: margin-top: $npx
  mg-l$n: margin-left: $npx
  mg-r$n: margin-right: $npx
  mg-b$n: margin-bottom: $npx
  mg-x$n: margin: 0 $npx
  mg-y$n: margin: $npx 0
  mg-f$n: margin: $npx

  $d: 12-40
  fs-$d: font-size: $dpx