Vue封装预约日期插件和发布到npm上

插件代码

<template><div class="subscribe-time" v-show="setting.display"><div class="subscribe-content"><div class="subscribe-date" v-if="setting.dateBlock == true"><div class="subscribe-date-scroll"><div class="subscribe-date-list" @tap="selectDate(index,'dateList')" :class="item.is_active == true ? 'subscribe-date-list-active' : ''" v-for="(item,index) in dateList">{{item.date}}</div></div></div><div class="subscribe-scroll" :class="setting.dateBlock == false ? 'subscribe-time-list-width' : ''"><div class="subscribe-time"><div class="subscribe-time-list" @tap="selectDate(index,'timeList')" :class="item.is_active == true ? 'subscribe-time-list-active' : ''" v-for="(item,index) in timeList">{{item.date}}</div></div></div><div class="subscribe-cancel" @click="elementDisplay">取消</div></div><div class="mast" @click="elementDisplay"></div></div>
</template><script>
import BScroll from 'better-scroll'
export default {name: 'SubscribeTime',data () {return {timeList:[],dateList:[],reduce:"-",colon:":",space:" ",selectTime:{}}},props:{setting:{},    },methods: {elementDisplay: function () {this.setting['display'] = false;},getTimeList: function () {// let nowYMD = this.getYearMonthDate();// let nowTime = this.timestampToTime();// let YMD = this.timestampToTime(this.getTimestamp());// 算出选择了那个日期for(let i = 0; i < this.dateList.length; i++){if(this.dateList[i]['is_active']){var activeIndex = i;}}if(this.timeList.length > 0){this.timeList = [];}// 日期let startTime = this.getYearMonthDate() + this.space + this.setting.startTime;let endTime= this.getYearMonthDate() + this.space + this.setting.endTime;let nowTime = this.getYearMonthDate() + this.space + this.timestampToTime();// 日期时间戳let startTimestamp = Math.round(new Date((this.getYearMonthDate() + this.space + this.setting.startTime).replace(/-/g,"/")) / 1000);let endTimestamp=  Math.round(new Date((this.getYearMonthDate() + this.space + this.setting.endTime).replace(/-/g,"/")) / 1000);let nowTimestamp = this.getTimestamp();// 判断结束时间是否小于开始时间,那样就是第二天了if(endTimestamp < startTimestamp){endTimestamp = Math.round(new Date((this.getYearMonthDate(1) + this.space + this.setting.endTime).replace(/-/g,"/")) / 1000);}// 判断当前日期是否大于开始时间if(nowTimestamp > startTimestamp){// 获取到加完20分钟后的时间戳,判断是否大于当前结束时间var lastNumber = this.timestampToTime().substring(4);// 需要添加的分钟var moreTime = 10 - parseInt(lastNumber);// 添加后的时间戳var addTime = this.getTimestamp() + 60 * moreTime;}else{// 获取到加完20分钟后的时间戳,判断是否大于当前结束时间var lastNumber = startTime.substring(4);// 需要添加的分钟var moreTime = 10 - parseInt(lastNumber);// 添加后的时间戳var addTime = startTimestamp + 60 * moreTime;}let argument = {startTime: startTime,endTime: endTime,nowTime: nowTime,startTimestamp: startTimestamp,endTimestamp: endTimestamp,nowTimestamp: nowTimestamp,addTime: addTime,moreTime: moreTime,activeIndex: activeIndex}if(this.dateList[0]['is_active']){this.timeAlgorithm(argument);}else{this.timeAlgorithm(argument);}this.$nextTick(() => {let timeScroll = new BScroll('.subscribe-scroll',{scrollY: true,tap:"selectDate,elementDisplay"});})},timeAlgorithm: function (params) {let restrainTime1 = params['addTime'] + 60 * this.setting.interval;let restrainTime2 = params['endTimestamp'] - 60 * this.setting.interval;// 判断是不是大于最后的可以接单的时间if(restrainTime1 < restrainTime2){params['addTime'] = params['addTime'] + 60 * this.setting.interval;// 算出选择了那个日期的时间戳和日期params['setAddTime'] = params['addTime'] + (60 * this.setting.interval) + (24 * 60 * 60 * params['activeIndex']) - 60 * this.setting.interval;// 一开始第一个高亮let is_active = (this.setting.defaultTime &&  this.timeList.length == 0) ? true : false;// 把获取到的时间push进去this.timeList.push({is_active:is_active,date:this.timestampToTime(params['addTime'],true),picker:this.timestampToTime(params['setAddTime']),timestamp:params['setAddTime']});// console.log(this.timestampToTime(params['addTime']));this.timeAlgorithm(params);}},getTimestamp: function (){// 获取当前时间戳let date = new Date();let year = date.getFullYear() + this.reduce + this.addZero(date.getMonth() + 1) + this.reduce + this.addZero(date.getDate());let currentdate = this.addZero(date.getHours()) + this.colon + this.addZero(date.getMinutes());let timestamp = Math.round(new Date((year + this.space +currentdate).replace(/-/g,"/")) / 1000);return timestamp;},timestampToTime: function (timestamp,bool) {// 获取当前时分或日期 格式: 15:30 或 2018-06-08 15:30let date = '';if(timestamp){date = new Date(timestamp * 1000);}else{date = new Date();}let year = date.getFullYear() + this.reduce + this.addZero(date.getMonth() + 1) + this.reduce + this.addZero(date.getDate());let currentdate = this.addZero(date.getHours()) + this.colon + this.addZero(date.getMinutes());// 返回时分或返回年月日if(timestamp && !bool){return year + this.space + currentdate;}else{return currentdate;}     },getYearMonthDate: function (number) {// 获取年月日let date = new Date();if(number){// 设置多少天的日期date.setTime(date.getTime() + (24 * 60 * 60 * 1000) * number);}      let year = date.getFullYear() + this.reduce + this.addZero(date.getMonth() + 1) + this.reduce + this.addZero(date.getDate());return year;},getDateList: function (len) {if(this.dateList.length > 0){this.dateList = [];}for(let i = 0; i < len; i++){let date = new Date();date.setTime(date.getTime() + (24 * 60 * 60 * 1000) * i);let currentdate = this.addZero(date.getMonth() + 1) + this.reduce + this.addZero(date.getDate());this.dateList.push({is_active: i == 0 ? true : false,date:currentdate});}this.$nextTick(() => {if(this.setting.dateBlock){let dateScroll = new BScroll('.subscribe-date',{scrollY: true,tap:"selectDate,elementDisplay"});}       })},addZero: function (time) {if (time <= 9) {time = "0" + time;}return time;},selectDate: function (index,name) {for(let i = 0; i < this[name].length; i++){this.$set(this[name][i], 'is_active', false);}this.$set(this[name][index], 'is_active', true);if(name == 'dateList'){this.getTimeList();console.dir(this.timeList);}else if(name == 'timeList'){// this.$emit('confirmEvent',this[name][index]);this.selectTime = this[name][index];this.$emit("update:selectTime", this.selectTime);this.elementDisplay();}console.dir(this.dateList);},defaultTime: function () {if(this.setting.defaultTime){// 防止返回的时候,默认选择第一个,下单完成清除掉if(sessionStorage.date){this.selectTime = {date:sessionStorage.date,picker:sessionStorage.picker};this.$emit("update:selectTime", this.selectTime);}else{console.dir(this.selectTime);this.selectTime = this.timeList[0];this.$emit("update:selectTime", this.selectTime);}        }}  },mounted: function () {this.getDateList(this.setting.dateLength);this.getTimeList();this.defaultTime();},computed: {},watch: {setting: {  handler(newValue, oldValue) {if(newValue.display){this.getDateList(this.setting.dateLength);this.getTimeList();// 默认选中if(this.selectTime.date != ''){for(let i = 0; i < this.timeList.length; i++){if(this.selectTime.date == this.timeList[i]['date']){this.$set(this['timeList'][i], 'is_active', true);}else{this.$set(this['timeList'][i], 'is_active', false);}}}console.dir(this.selectTime);}               },  deep: true  } },components: {}
}
</script>
<style scoped>
/*.table-scroll{overflow: hidden;height: 100%;
}
.table-scroll .table-list{width: 100%;padding-bottom: 10px;
}*/.subscribe-content{height: 250px;width: 100%;background: #fff;position: absolute;left: 0;bottom: 0;z-index: 1003;
}
.subscribe-content .subscribe-date{width: 35%;height: 210px;background: #e7e7e7;overflow: hidden;/*overflow: scroll;*/
}
.subscribe-content .subscribe-scroll{width: 65%;height: 210px;
}
.subscribe-date{/*float: left;*/overflow: scroll;position: absolute;top: 0;left: 0;
}
.subscribe-scroll{position: absolute;top: 0;left: 35%;overflow: hidden;
}
/*.subscribe-content:after{content: "";width: 0;height: 0;display: block;visibility: hidden;clear: both;
}*/
/*日期*/
.subscribe-date-list{height: 42px;line-height: 42px;border-bottom: 1px solid #fff;font-size: 14px;text-align: center;color: #333;
}
.subscribe-date-list:last-child{border-bottom: none;
}
.subscribe-date-list-active{background: #fff;color: #ff6600;
}
/*时间*/
.subscribe-time{}
.subscribe-time-list{width: 100%;height: 35px;line-height: 35px;padding-left: 20px;font-size: 14px;color: #666;
}
.subscribe-time-list-active{color: #ff6600;
}
/*取消按钮*/
.subscribe-content .subscribe-cancel{width: 100%;height: 39px;line-height: 40px;border-top: 1px solid #ccc;text-align: center;font-size: 14px;position: absolute;left: 0;bottom: 0;z-index: 1003;
}
/*遮罩层*/
.mast{position: absolute;left: 0;bottom: 0;width: 100%;height: 100%;opacity: 0.3;/*background: rgba(0, 0, 0.3);*/background: #000;z-index:1002;
}
.subscribe-content .subscribe-time-list-width{width: 100%!important;left:0;padding: 0;text-align: center;
}
.subscribe-time-list-width .subscribe-time{width: 100%;
}
.subscribe-time-list-width .subscribe-time-list{padding-left: 0px;
}
</style>

父组件引用

<template><SubscribeTime @confirmEvent="confirmEvent" :setting="setting" :selectTime.sync="selectTime" ></SubscribeTime>
</template><script>
import SubscribeTime from '../SubscribeTime/SubscribeTime'
export default {name: 'Subscribe',data () {return {//配置的对象setting:{dateLength:7,//显示多少天startTime:'08:00',//开始时间endTime:'23:30',//结束时间interval: 20,//步长,预约的时间间隔display:true,//设置这个组件是显示还是隐藏defaultTime:true,//是否设置默认时间dateBlock:true//右侧日期是否显示},//选择日期后,子组件返回的对象selectTime:{is_active:'',//不用管date:'',//18:00 时分picker:'',//2018-16-17 12:00 日期timestamp:''//156224456时间戳}  }},methods: {},components: {SubscribeTime}
}
</script>
项目结构

这里写图片描述

index.js代码
import vueSubscribe from './vue-subscribe.vue'
const subscribe = { install (Vue, options) { Vue.component(vueSubscribe.name, vueSubscribe);}
}
export default subscribeif (typeof window !== 'undefined' && window.Vue) { window.Vue.use(subscribe);
}
vue-subscribe的代码就是一开始插件的代码
webpack.config.js进行一下修改
module.exports = {entry:'./src/lib/index.js',output: {path: path.resolve(__dirname, './dist'),publicPath: '/dist/',// filename: 'build.js' // 打包后输出的文件名 filename: 'vue-subscribe.js', // 我们可不想打包后叫build.js 多low啊 起一个与项目相对应的 library: 'VueSubscribe', // library指定的就是你使用require时的模块名,这里便是require("PayKeyboard") libraryTarget: 'umd', //libraryTarget会生成不同umd的代码,可以只是commonjs标准的,也可以是指amd标准的,也可以只是通过script标签引入的。 umdNamedDefine: true // 会对 UMD 的构建过程中的 AMD 模块进行命名。否则就使用匿名的 define。//此处省略无关代码n行…. }
修改package.json文件
"private": false,//默认是true的改为false
"license": "MIT",
"main": "dist/vue-subscribe.js",
"repository": {"type": "git","url": "https://github.com/Sun-Traget/vue-subscribe"
}
到此所有准备工作完成
npm run build //打包
//在dist中生成vue-subscribe.js、vue-subscribe.js.map文件
发布到npm 中

先注册一个npm账号,需要认证邮箱,否则不能发布npm包,注册成功后,打开命令行执行以下命令:

npm login //会让你输入你的npm账号、密码、邮箱
//然后进入到项目里面去
npm publish //发布npm 包,这个时候就已经发布到npm上了
github代码地址
https://github.com/Sun-Traget/vue-subscribe

参考地址:http://www.imooc.com/article/19691
顺便推荐一篇vscode插件:https://blog.csdn.net/crper/article/details/80960269

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/517055.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VS Code Element 提示 VSCode-Element-Helper 插件

文章目录1. 安装插件2. 效果图1. 安装插件 2. 效果图

9张图总结一下阿里云的2019

9月25日云栖大会&#xff0c;阿里云智能总裁张建锋展示了阿里巴巴第一颗自研芯片——含光800&#xff0c;打破了两项世界纪录&#xff0c;性能和能效比均为第一&#xff0c;是全球最强的AI推理芯片。 张建锋说&#xff1a;“在全球芯片领域&#xff0c;阿里巴巴是一个新人&…

坦白讲!做 Java 工程师,挺好!

很多想要入行编程圈的人问到我该学哪一种语言&#xff0c;我都毫不犹豫的说Java。首先我们先看个排行榜&#xff0c;来自权威开发语言排行榜TIOBE的数据&#xff08;截止到2020年4月&#xff09;&#xff0c;可以看到Java语言依然在语言排行榜霸占第一的位置&#xff01;看到这…

达摩院2020十大科技趋势发布:科技浪潮新十年序幕开启

2020年第一个工作日&#xff0c;“达摩院2020十大科技趋势”发布。这是继2019年之后&#xff0c;阿里巴巴达摩院第二次预测年度科技趋势。 回望2019年的科技领域&#xff0c;静水流深之下仍有暗潮涌动。AI芯片崛起、智能城市诞生、5G催生全新应用场景……达摩院去年预测的科技…

VS Code Rainbow Fart 小姐姐语音提示插件

文章目录1. 安装插件2. 启用Rainbow Fart3. 效果图1. 安装插件 Rainbow Fart2. 启用Rainbow Fart ctrl shirt p输入Rainbow Fart回车&#xff08;Enter&#xff09; 打开open 3. 效果图

日志服务(SLS)集成 Spark 流计算实战

前言 日志服务作为一站式的日志的采集与分析平台&#xff0c;提供了各种用户场景的日志采集能力&#xff0c;通过日志服务提供的各种与与SDK&#xff0c;采集客户端&#xff08;Logtail&#xff09;&#xff0c;Producer&#xff0c;用户可以非常容易的把各种数据源中的数据采…

再见了,Python!!

结合我最近这些年的Python学习、开发经验&#xff0c;发现90%的人在学Python时都会遇到下面这些问题&#xff1a;1.想学Python&#xff0c;但没什么经验根本不知道从何学起&#xff0c;而且应用方向太多了根本不知道该选择什么方向...2.基础入门看似简单&#xff0c;但是进阶实…

上去很美的 Serverless 在中国落地的怎么样了?

说起当前最火的技术&#xff0c;不得不提的一个概念就是 Serverless。2019 年几乎所有人都在说 Serverless&#xff0c;实际落地 Serverless 的有多少&#xff1f;Serverless 作为一种新型的互联网架构&#xff0c;直接或间接推动了云计算的发展&#xff0c;从 AWS Lambda 到阿…

Knative 驾驭篇:带你 '纵横驰骋' Knative 自动扩缩容实现

Knative 中提供了自动扩缩容灵活的实现机制&#xff0c;本文从 三横两纵 的维度带你深入了解 KPA 自动扩缩容的实现机制。让你轻松驾驭 Knative 自动扩缩容。 注&#xff1a;本文基于最新 Knative v0.11.0 版本代码解读 KPA 实现流程图 在 Knative 中&#xff0c;创建一个 Rev…

MongoDB 计划从“Data Sprawl”中逃脱

原文作者 | Adrian Bridgwater译者 |天道酬勤&#xff0c;责编 |晋兆雨头图 | CSDN 付费下载自视觉中国提供特定技术子集的软件供应商&#xff0c;喜欢用尽可能广泛的标签来提升自己&#xff0c;这是一种传达平台宽度和能力的方式。我们知道MongoDB以开源根数据库而闻名&#x…

FastMock

文章目录官网文档官网 官网&#xff1a;https://www.fastmock.site/#/ 文档 https://marvengong.gitee.io/fastmock/#/

关于在nw里使用require('printer')和nw.require('printer')报错的问题

公司项目为了兼容xp所以使用nw.js&#xff08;0.14.7-sdk&#xff09;&#xff0c;用到了printer模块&#xff08;第三方的c打印模块&#xff09;&#xff0c;在引入该模块的时候&#xff0c;使用了require导致一直报cannot find modul “.”&#xff0c;后来改用nw.require&am…

小蜜团队万字长文 | 讲透对话管理模型最新研究进展

对话管理模型背景 从人工智能研究的初期开始&#xff0c;人们就致力于开发高度智能化的人机对话系统。艾伦图灵&#xff08;Alan Turing&#xff09;在1950年提出图灵测试[1]&#xff0c;认为如果人类无法区分和他对话交谈的是机器还是人类&#xff0c;那么就可以说机器通过了…

mockjs

文章目录官网文档地址示例官网 &#xff1a;http://mockjs.com/ 文档地址 https://github.com/nuysoft/Mock/wiki/Getting-Started 示例 http://mockjs.com/examples.html

炸裂!谷歌这波操作,预警了什么?

我们都知道谷歌爸爸收购了Cask Data一家公司。长期以来&#xff0c;谷歌致力于推动围绕 GoogleCloud 的企业业务&#xff0c;但在这方面一直被亚马逊和微软吊打&#xff0c;这次的收购正是为了弥补自身的短板。被收购的 Cask Data 是一家专门提供基于Hadoop的大型数据分析服务解…

美团点评基于 Flink 的实时数仓平台实践

一、美团点评实时计算演进 美团点评实时计算演进历程 在 2016 年&#xff0c;美团点评就已经基于 Storm 实时计算引擎实现了初步的平台化。2017 年初&#xff0c;我们引入了 Spark Streaming 用于特定场景的支持&#xff0c;主要是在数据同步场景方面的尝试。在 2017 年底&am…

koa-generator 快速生成 koa2 服务的脚手架工具

文章目录1. 全局安装脚手架工具2. 执行生成3. 安装依赖4. 启动服务5. 默认的访问地址通常我们可以借助于脚手架&#xff0c;快速创建一个Koa2项目&#xff0c;当然也可以自己从头搭建&#xff1b;脚手架会帮我们提前搭好基本的架子 1. 全局安装脚手架工具 cnpm install -g koa…

轻松搭建基于 SpringBoot + Vue 的 Web 商城应用

首先介绍下在本文出现的几个比较重要的概念&#xff1a; 函数计算&#xff08;Function Compute&#xff09;: 函数计算是一个事件驱动的服务&#xff0c;通过函数计算&#xff0c;用户无需管理服务器等运行情况&#xff0c;只需编写代码并上传。函数计算准备计算资源&#xff…

股市中的Santa Claus Rally (圣诞节行情)

圣诞节行情 Santa Claus Rally Santa Claus Rally 是指 12 月 25 日圣诞节前后股市的持续上涨这样一个现象。《股票交易员年鉴》的创始人 Yale Hirsch 于 1972 年创造了这个定义&#xff0c;他将当年最后五个交易日和次年前两个交易日的时间范围定义为反弹日期。 根据 CFRA Re…

没想到!!Unicode 字符还能这样玩?

来源 | 程序通事责编 |晋兆雨头图 | CSDN 付费下载自视觉中国上周的时候&#xff0c;朋友圈的直升飞机不知道为什么就火了&#xff0c;很多朋友开着各种花式飞机带着起飞。图片来自网络还没来得及了解咋回事来着&#xff0c;这个直升飞机就????到的微博热搜。图片来自网络后…