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

vant-plus

v1.2.5

Published

H5移动端的公共组件

Downloads

9

Readme

vant-plus

针对移动端增加的公共组件库和自定义指令,有些组件是基于vant的增强功能组件

安装

npm install vant-plus -S

引入VantPlus

完整引入

import Vue from 'vue'
import VantPlus from 'vant-plus'
import 'vant-plus/lib/vant-plus.css'
Vue.use(VantPlus)

new Vue({
  el: '#app',
  render: h => h(App)
})

按需引入

  import {
        Line,//下滑线自定义指令
        FieldTip,//输入框提示上移自定义指令
        VlpButton,//防抖按钮
        VlpCalendar,//日历
        VlpSearch,//增加防抖,节流功能,通过接口自动搜索组件
        VlpList,//下拉刷新,上拉加载,通过接口自动列表组件
        VlpDetail//key:value显示方式组件
  } from 'vant-plus'
  
  Vue.use(Line)
  Vue.use(FieldTip)
  Vue.use(VlpButton)
  Vue.use(VlpCalendar)
  Vue.use(VlpSearch)
  Vue.use(VlpList)
  Vue.use(VlpDetail)

组件使用说明

搜索组件:vlp-search

1、引入指令

import {VlpSearch} from 'vant-plus'

2、局部注册

components: {
    VlpSearch
  }

3、全局注册

Vue.use(VlpSearch)

4、属性

| 参数 | 说明 | 类型 | 是否必填| 默认值| |------|------------|------------|----------|----| | value | 绑定数据 | | true | | | alias | 查询数据时的参数名 | String| false | value | | showCancelButton | 是否显示取消 | Boolean | false | true| | placeholder | placeholder | String | false | | | searchText | 不显示取消时的按钮label | String | false | '搜索'| | tipInterface | 查询接口 | Function | false | | | params | 查询接口需要的其他参数 | Object | false | | | displayVisible | 是否显示 | Boolean | false | false| | historyList | 历史记录 | Array | false | [] | autoShowHistory | 是否默认显示历史记录 | Boolean | false | false | autoHidden | 是否自动隐藏该搜索框 | Boolean | false | true

5、事件

| 事件名 | 说明 | 参数 | |------|------------|------------| | search | 查询 | value |

6、使用示例

 <vlp-search
   class="search-class"
   v-model="searchValue"
   :tipInterface="searchListInterface"
   placeholder="搜索名称"
  :historyList="historyList"
  :autoHidden="false"
  :displayVisible = "true"
  :autoShowHistory="true"
  @search="searchFun"
  @cancel="cancel"
  @deleteHistory="deleteHistory">
   </vlp-search>
import {  VlpSearch } from 'vant-plus'
export default {
  components: {
    VlpSearch
  },
  data() {
    return {
      searchListInterface: searchList,
      searchValue: '',
      visible: false,
      historyList: ['中国', '阿斯利康大家发生的'],
    }
  },
  methods: {
   searchFun(v) {
      this.parameter = { name: v }
      console.log('searchFun', v)
    },
    cancel() {
      this.$router.go(-1)
    },
    deleteHistory() {
      this.historyList = []
    }
  }
}

列表组件:vlp-list

支持下拉刷新,上拉加载,传入接口可以自动查询,list子项中留有插槽,可以设置自定义cart显示list中的内容. 不可自动加载数据时外部参数没有内容将不查询

1、引入指令

import {VlpList} from 'vant-plus'

2、局部注册

components: {
    VlpList
  }

3、全局注册

Vue.use(VlpList)

4、属性

| 参数 | 说明 | 类型 | 是否必填| 默认值| |------|------------|------------|----------|----| | interfaceFun | 接口 | Function | true | | | columns | 对应列 | Array| true | | | pageSize | 每页条数 | Number | false | 10 | | parameter | 接口其他参数 | Object | false | | | finishedText | 完成提示 | String | false | | | errorText | 失败提示 | String | false | | | loadingText | 加载中提示 | String | false | | | offset | 滚动条与底部距离小于 offset 时触发load事件 | Number | false | 5| | direction | 滚动触发加载的方向,可选值为up | String | false | 'down' | | refreshDisabled | 禁用刷新 | Boolean | false | false | | pullingText | 下拉过程文案 | String | false | | | autoLoad | 自动加载 | Boolean | false | false | | load | 触发list重新加载数据(true:重新加载,false:不重新加载) | Boolean | false | false |

  • interfaceFun接口返回的数据格式 { code:0//返回码 msg:''//返回的信息 result:{//返回的结果 pageNum:1,//当前页 total:10,//总条数 list:[],//列表数据 pages:1//共几页 } }
  • 搜索时,建议设置:autoLoad=false

5、插槽slot

| 参数 | 说明 | |------|------------|------------|----------|----| | list | 通过接口查询返回的结果 |

6、使用示例

 <vlp-list
  :interface-fun="searchList"
  :columns = "columns"
  :parameter = "parameter"
  >
   <template v-slot="list">
      <Card v-for="(item,index) in list" :key="index" :card-data="item" :label-columns='columns'>
      </Card>
    </template>
  </vlp-list>
import {  VlpList } from 'vant-plus'
import LabelColumns from 'columns'
import Card from '../components/card'
export default {
  components: {
    VlpList,
    Card
  },
  data() {
    return {
      searchListInterface: searchList,
      searchValue: '',
      visible: false,
      columns:LabelColumns,
      parameter:{id:1}
    }
  },
  methods: {
    searchFun(v) {
      console.log('searchFun...', v)
    }
  }
}

7、对应字段格式

| 参数 | 说明 | 类型 | 是否必填| 默认值| |------|------------|------------|----------|----| | name | 对应返回数据的字段名称 | String | false | | | alias | 生成新对象的别名 | String| false | | | className | 样式名称 | String | false | | | list | 存在list数据显示成详细,alias为list | Array | false | | | callback | 回调函数 | Function | false | | | tip | 提示 | Array | false | |

//columns.js
// card
const cardLabel = [
  { name: 'actiontype', alias: 'tip', className: 'tip1' },
  { name: 'name', alias: 'title' ,tip:[`<span style='color:red'>tip</span>`]},
  { name: 'type', alias: 'subtitle', className: 'subtitle1' },
  { alias: 'list',
    list: [
      { label: '单号', name: 'actiontype' },
      { label: '日期', name: 'date' }
    ]
  },
  { alias: 'buttons',
    list: [
      { label: '去预约',
        callback: function(params){
          this.$router.push({ path: '/HelloWorld', params: params})
        }
      },
      { label: '重新派单',
        callback: function(params) {
          this.$router.push({ path: '/HelloWorld', params: params})
        }
      }
    ] }
]

export default {
  cardLabel
}

export {
  cardLabel
}
//interface.js

export function ListObj(params) {
  console.log('searchListObj', params)
  return new Promise(resolve => {
    resolve({
      code: 0,
      msg: 'success',
      result: {
        pageNum: 1,
        pageSize: 10,
        pages: 1,
        total: 5,
        list: [
          {
            actiontype: '任务1',
            name: '安徽牛肉拉面',
            type: '微辣',
            danhao: 'SS2019091100001',
            date: 1572331173000

          },
          {
            actiontype: '维护2',
            name: '大盘鸡鸡蛋面',
            type: '不辣',
            danhao: 'SS2018091100001',
            date: 1572331100000

          },
          {
            actiontype: '任务3',
            name: '大盘鸡鸡蛋面3',
            type: '不辣',
            danhao: 'SS2019091100001',
            date: 1572331173000

          },
          {
            actiontype: '维护4',
            name: '大盘鸡鸡蛋面4',
            type: '微辣',
            danhao: 'SS2018091100001',
            date: 1572331100000

          },
          {
            actiontype: '任务5',
            name: '大盘鸡鸡蛋面5',
            type: '不辣',
            danhao: 'SS2019091100001',
            date: 1572331173000

          },
        ]
      }
    })
  });
}

搜索组件:vlp-detail

1、引入指令

import {VlpDetail} from 'vant-plus'

2、局部注册

components: {
    VlpDetail
  }

3、全局注册

Vue.use(VlpDetail)

4、属性

| 参数 | 说明 | 类型 | 是否必填| 默认值| |------|------------|------------|----------|----| | data | 显示数据 | Array | true | |

5、数据格式

[ {label:'姓名',name:'name',value:'',tip:['tip']}//若存在tip增加tip的html内容 ]

6、使用示例

<vlp-detail :data="data"></vlp-detail>

import {  VlpDetail } from 'vant-plus'
export default {
 name: 'VlpCard',
 components: {
   Detail
 },
 data(){
   return {
     data:[
       {label:'姓名',name:'name',value:'姓名',tip:['<span style="color:red">tip</span>']},
       {label:'性别',name:'sex',value:'性别',tip:['<span style="color:red">tip1</span>']}
     ]
   }
 }
}

处理对应字段方法handleListInfo

| 参数 | 说明 | 类型 | 是否必填| 默认值| |------|------------|------------|----------|----| | LabelArray | 模板数据结构 | Array | true | | | DTO | 后端返回数据 | Object| true | |

处理方法

  import {handleListInfo,VlpDetail} from 'vant-plus'
  import LabelColumns from 'cloumns.js'
  const cardData = {
            actiontype: '安装任务1',
            name: '北京房朝阳区一店1',
            type: '药店',
            danhao: 'SS2019091100001',
            date: 1572331173000

          }
  export default {
  components: {
    VlpDetail
  },
  data() {
    return {
      data: {}
    }
  },
  beforeMount() {
    this.data = handleListInfo(LabelColumns, cardData)
    // console.log('beforeMount cardData...', this.data)
  }

}
  handleListInfo(cardLabel,DTO)

防抖按钮:vlp-button

1、引入指令

import {VlpButton} from 'vant-plus'

2、局部注册

components: {
    VlpButton
  }

3、全局注册

Vue.use(VlpButton)

4、属性

| 参数 | 说明 | 类型 | 是否必填| 默认值| |------|------------|------------|----------|----| | type | 类型,可选值为 primary info warning danger | String | false | 'default' | | size | 尺寸,可选值为 large small mini | String| false | 'normal' | | text | 按钮文字 | String | false | | | color | 按钮颜色,支持传入linear-gradient渐变色 | String| false | | | icon | 左侧图标名称或图片链接 | String | false | | | tag | HTML 标签 | String| false | |

5、事件

| 参数 | 说明 | 类型 | |------|------------|------------|----------|----| | click | 点击 |

6、插槽

| 参数 | 说明 | 类型 | |------|------------|------------|----------|----| | slot | 按钮直接的内容 |

7、使用示例

<vlp-button @click="click">查询</vlp-button>
import {  VlpButton } from 'vant-plus'
export default {
  components: {
    VlpButton
  },
  methods: {
    click() {
      console.log('click...')
    }
  }
}

日历组件:vlp-calendar

1、引入指令

import {VlpCalendar} from 'vant-plus'

2、局部注册

components: {
    VlpCalendar
  }

3、全局注册

Vue.use(VlpCalendar)

4、属性

| 参数 | 说明 | 类型 | 是否必填| 默认值| |------|------------|------------|----------|----| | agoDayHide | 某个日期以前的不允许点击 时间戳10位 | String | false | | | isWeek | 是否显示周几 | Boolean | true | propWord | 可传入内容 (周、星期) | String | '周' | isShowBtn | 左上角是否显示'回今天'按钮 | Boolean| false | false | | todayBack | 可传入按钮显示值,只有isShowBtn为true时支持| String| false|'回今天' | isShowCalendar | 控制日历的显示和隐藏 | Boolean | false | false | | operatorDate | 入口,可以自定义某个日期,只支持一个日期,格式为'2019-11-24' | String| false | '' | | markDateMore | 如果需要某月的几天被标注,传当月的日期数组。如["2018/2/2","2018/2/6"]被会标注(相同的标记) | Array | false | | | markDate | arr=['2018/4/1','2018/4/3'] 标记4月1日和4月3日 简单标记 | Array| false | |

5、事件

| 参数 | 说明 | 类型 | |------|------------|------------|----------|----| | choseDay | 选中某天调用的方法,返回选中的日期 YY-MM-DD | | isToday | 切换月份的时候,如果切到当前月份,调用这个方法,返回当前月今天 | | changeMonth | 切换月份调用的方法,返回切换到某月的日期 YY-MM-DD |

6、使用示例

<vlp-calendar
    ref="Calendar"
    @choseDay="clickDay"
    @isToday="clickToday"
    @changeMonth="changeDate"
    :agoDayHide="limitDate"
    :isShowBtn="isShowBtn"
    :isShowCalendar="isShowCalendar"
    :operatorDate = "operatorDate"
    :markDateMore="markDate"
    :todayBack="按钮内容"
    :isWeek="false"
    />
import {  VlpCalendar } from 'vant-plus'
export default {
  components: {
    VlpCalendar
  },
  // 时间转10位时间戳
  created() {
    this.limitDate = Math.round((new Date().getTime() - (24 * 60 * 60 * 1000)) / 1000).toString()
  },
  methods: {
    // 调接口获取有待办事项的数据   下期再加mark1
    // getQuery() {
    //   this.markDate = [{ date: '2019/11/01', className: 'mark1' }, { date: '2019/10/29', className: 'mark1' }]
    // },
    clickToday(v) {
      this.todayDate = v
    },
    clickDay(v) {
      if (v.calendarDate !== this.todayDate) {
        this.isShowBtn = true
      } else {
        this.isShowBtn = false
      }
      this.chDate = v.calendarDate
    },
    changeDate(v) {

    }
  }
}

步骤组件:vlp-steps

1、引入指令

import {VlpSteps} from 'vant-plus'

2、局部注册

components: {
    VlpSteps
  }

3、全局注册

Vue.use(VlpSteps)

4、属性

| 参数 | 说明 | 类型 | 是否必填| 默认值| |------|------------|------------|----------|----| | data | 显示数据 | Object | true | | | end | 是否最后一个节点 | Boolean | false | false |

5、data属性说明

| 参数 | 说明 | 类型 | 是否必填| 默认值| |------|------------|------------|----------|----| | title | 主标题 | String | true | | | status | 当前状态(wait,pass,warning),也可以自定义style样式来设置状态样式 | String | false | wait | | icon | 图标名称 | String | false | 'warning'默认使用vant-icon中的名字 | | style | 设置样式 | Object | false | |

  • style中可以设置line和icon的样式如:
  style: {
      icon: {
        color: '#F77200',
        fontSize:'18px'
      },
      line: {
        background:'#23C2B7'
      }
  }

6、使用示例

   <vlp-steps :data="item" :end="data.length===(index+1)" v-for="(item,index) in data" :key="index">
     <div class="title">{{item.title}} <span style="color:#23C2B7">{{item.title | filterTitle}}</span></div>
     <div class="detail" v-for="(d,index) in item.list" :key="index">{{d}}</div>
   </vlp-steps>

import {  VlpSteps } from 'vant-plus'
export default {
 name: 'VlpSteps',
 components: {
   VlpSteps
 },
  data() {
   return {
     data: [{
       title: '标题1',
       status: 'warning',
       style: {
         icon: {
           color: '#F77200',
           fontSize: '18px'
         },
         line: {
           background: '#23C2B7'
         }
       },
       list: [
         '告警',
         '2019-03-12 22:12'
       ]
     },
     {
       title: '标题2',
       status: 'pass',
       icon: 'checked',
       style: {
         icon: {
           color: '#23C2B7'
         }
       },
       list: [
         '审核通过',
         '2019-03-15 22:12'
       ]
     },
     {
       title: '标题3',
       checked: 'wait',
       icon: 'warning',
       list: [
         '等待审核',
         '二级审核通过',
         '2019-03-19 22:12'
       ]
     }
     ]
   }
 },
 filters: {
   filterTitle: function(v) {
     return v === '标题1' ? '副标题' : ''
   }
 }
}
}

步骤组件:vlp-touch

上下滑动触发加载

1、引入指令

import {VlpTouch} from 'vant-plus'

2、局部注册

components: {
    VlpTouch
  }

3、全局注册

Vue.use(VlpTouch)

4、属性

| 参数 | 说明 | 类型 | 是否必填| 默认值| |------|------------|------------|----------|----| | target | 用于判断是否触及顶部或底部的目标对象 | Element | true | | | loading | 是否加载中false:未加载,true:加载中 | Boolean | false | false | | finished | 是否加载完成:true为加载完成,将不再触发加载 | Boolean | false | false | | error | 是否出错 | Boolean | false | false | | pullDirection | 滑动方向up:向上滑动,down:向下滑动 | String | false | 'up' | | defaultText | 默认提示文字 | String | false | '上拉加载更多' | | loadingText | 加载中提示文字 | String | false | '加载中....' | | finishedText | 加载完成提示文字 | String | false | '已加载完成' | | errorText | 加载完成提示文字 | String | false | '加载失败,请点击重新加载' |

5、事件

| 参数 | 说明 | 类型 | 是否必填| 默认值| |------|------------|------------|----------|----| | load | 上拉加载或点击报错时候的信息时触发 | function | | |

6、使用示例

    <vlp-touch
     :target="target"
     :loading="loading"
     :finished="finished"
     :error="error"
     pullDirection="up"
     @load="load">
   <div
        id="aa"
        style="width:100%;height:500px;overflow:auto">
           <span v-for="(item,index) in data" :key = index>{{item}}<br/>></span>
        </div>
 </vlp-touch>

import {  VlpTouch } from 'vant-plus'
export default {
 components: {
   VlpTouch
 },
 data() {
   return {
     target: {},
     data: [],
     loading: false,
     count: 0,
     finished: false,
     error: false
   }
 },
 created() {
   this.data = Array(50).fill('内容')
 },
 mounted() {
   this.target = document.getElementById('aa')
 },
 methods: {
   load() {
     this.loading = true
     setTimeout(() => {
       console.log('加载。。')
       this.loading = false
       if (this.count === 3) this.error = true
       this.count++
       if (this.count === 4) this.finished = true
     }, 1000)
   }
 }
}