1.2.1 • Published 3 months ago

fan-next-time-select v1.2.1

Weekly downloads
-
License
ISC
Repository
-
Last release
3 months ago

次日时间选择器

show me bug...

源码地址:gitee

组件地址:npm

版本更新 1.2.1

  • 新增 API:rangeFlag 是否验证范围选择器
  • 新增 API:addStep 添加时较上一组新增多少分钟
  • 新增 方法:formatPickerValue 格式化次日时间选择器的值
  • 修改 多个方法逻辑
  • 修改 示例
  • 可单独引入 FanNextTimeSelectItem 组件
  • bug 修复 项目打包后运行报错的问题

版本更新 1.1.3

  • 删除 API:rangeList 时间选择器列表
  • 删除 API:strict 严格模式
  • 新增 API:range 是否显示范围选择器
  • 新增 API:btnDisable 是否禁止显示+-按钮
  • 新增 API:disable 是否禁用选择器
  • 删除 $util 中需要用到的的方法:examineRange 校验次日时间选择器范围是否合法。
  • 修改 $util 中需要用到的的方法:examine 校验次日时间选择器是否合法。
  • 修改 示例

说明

  • 本组件适用于使用了:vue2.x 和 element-ui 的家伙们。
  • 本组件使用了 element-ui 部分组件:Message、Scrollbar、clickoutside 等
  • 示例使用了 Dialog、Button 等

安装

// npm安装
npm i fan-next-time-select

如何使用

// main.js

import FanNextTimeSelectVue from "fan-next-time-select";
import util from "fan-next-time-select/util/index";
import "fan-next-time-select/css/index.css";

Vue.use(FanNextTimeSelectVue);
Vue.prototype.$util = util;

示例

<template>
	<div class="index-contaienr">
		<hr />
		<h3>时间段</h3>
		<fan-next-time-select
			id="fan"
			startText="上班时间"
			endText="下班时间"
			:list="list"
			:rangeFlag="true"
			:maxLength="3"
			@setFanNextTimeSelectList="getFanNextTimeSelectList" />

		<div
			v-for="(item, i) in list"
			:key="i">
			<div>
				时段{{ i + 1 }}: 上班时间范围:{{
					$util.fanDecode(item.startRange[0].startValue).text
				}}——{{
					$util.fanDecode(item.startRange[0].endValue).text
				}},下班时间范围:{{
					$util.fanDecode(item.endRange[0].startValue).text
				}}——{{ $util.fanDecode(item.endRange[0].endValue).text }}
			</div>
		</div>

		<el-button
			type="info"
			@click="showDialog"
			>设置打卡时间范围</el-button
		>

		<el-button
			type="primary"
			@click="submit"
			>提交表单</el-button
		>

		<el-dialog
			title="设置打卡时间范围"
			v-if="dialogFormVisible"
			:visible.sync="dialogFormVisible">
			<fan-next-time-select
				startText="上班时间"
				endText="下班时间"
				:range="true"
				:list="listCopy"
				:btnDisable="true"
				:disable="true"
				:maxLength="3"
				@setFanNextTimeSelectList="getFanNextTimeSelectListCopy" />
			<div
				slot="footer"
				class="dialog-footer">
				<el-button @click="dialogFormVisible = false">取 消</el-button>
				<el-button
					type="primary"
					@click="dialogSubmit"
					>确 定</el-button
				>
			</div>
		</el-dialog>
		<hr />
		<h3>单个时间</h3>
		<FanNextTimeSelectItem
			:item="myItem"
			@setItem="getItem" />
		<hr />
	</div>
</template>

<script>
export default {
	data() {
		return {
			// 时间选择器内容数组
			list: [
				{
					// 开始时间与后端交互的值
					startValue: 9 * 60,
					// 结束时间与后端交互的值
					endValue: 18 * 60,
					// 开始时间最小值、最大值
					startRange: [{ startValue: 9 * 60 - 30, endValue: 9 * 60 + 30 - 1 }],
					// 结束时间最小值、最大值
					endRange: [{ startValue: 18 * 60 - 30, endValue: 18 * 60 + 30 - 1 }],
				},
			],
			// 用来设置打卡时间范围
			listCopy: [],
			// 用来判断组件是否合法
			listFlag: false,
			// 是否显示dialog
			dialogFormVisible: false,

			// 单个时间用到的内容=========================================================================================
			myItem: {
				// 开始时间与后端交互的值
				startValue: 9 * 60,
				// 结束时间与后端交互的值
				endValue: 18 * 60,
			},
		};
	},
	methods: {
		/**
		 * 获取次日时间选择器返回的值
		 * @param {array} value 次日时间选择器返回的值
		 */
		getFanNextTimeSelectList(value) {
			// 赋值
			value.pickers.forEach((item, i) => {
				this.$set(this.list, i, item);
			});
			this.listFlag = value.flag;
		},

		/**
		 * 获取次日时间选择器返回的值--复制版
		 * @param {array} value 次日时间选择器返回的值
		 */
		getFanNextTimeSelectListCopy(value) {
			// 赋值
			value.pickers.forEach((item, i) => {
				this.$set(this.listCopy, i, item);
			});
			this.listFlag = value.flag;
		},

		/**
		 * 显示dialog
		 */
		showDialog() {
			// 赋值
			this.listCopy = this.$util.deepCopy(this.list);

			// 打开dialog
			this.dialogFormVisible = true;
		},

		/**
		 * 提交打卡范围
		 */
		dialogSubmit() {
			// 验证
			if (!this.listFlag)
				return this.$message.error("时间选择器有误不允许提交哦");

			// 赋值
			this.listCopy.forEach((item, i) => {
				this.$set(this.list, i, item);
			});

			// 关闭dialog
			this.dialogFormVisible = false;
		},

		/**
		 * 提交表单
		 */
		submit() {
			// 验证
			if (!this.listFlag)
				return this.$message.error("当前时间选择器有误,不能提交");

			let data = this.$util.formatPickerValue(this.list); // 最终用到的值
			console.log("最终用到的值:", data);

			this.$message.success("提交成功");
		},

		// 单个选择器用到的方法==================================================================================

		/**
		 * 单个选择器返回的值
		 * @param {array} value
		 */
		getItem(value) {
			// 赋值
			this.myItem = value;
			// 获取最终值
			let myValue = this.$util.formatPickerValue(this.myItem, true);
			console.log("最终分钟值:", myValue);
		},
	},
};
</script>

<style lang="less">
.index-contaienr {
	width: 100%;
	height: 100vh;
	background-color: #fff;
}
</style>

FanNextTimeSelect 中的 API

API描述是否必填默认值范围类型
list父组件传递的数组。详情见下方 list 数组中每个对象的字段与值。-Array
rangeFlag是否验证范围选择器。组。truetrue/falseBoolean
addStep添加时较上一组新增多少分钟1*600-2880(48*60)Number
startText开始时间的标题。''-String
endText结束时间的标题。''-String
maxLength时间选择器组的最大数量。为 1 时不可添加或删除。10-100Number
step步进值,每个时间选择器之间相差值,为 0 时可相等。10-2880(48*60)Number
stepMax第一组选择器的开始时间与最后一组选择器的结束时间相差最大值。1440(24*60)0-2880(48*60)Number
range是否显示范围选择器。falsetrue/falseBoolean
btnDisable是否禁止显示'+'、'-'按钮器。falsetrue/falseBoolean
disable是否禁用选择器器。falsetrue/falseBoolean
width设置选择器宽度,单位 px。100100-500Number
titleSize设置标题的字号大小,单位 px。142-100Number
titleColor设置标题颜色。#333333-String
borderColor设置边框颜色。#ccd4e0-String
bgColor设置选择器背景颜色。#fafbfc-String
color设置选择器文字颜色。#333333-String

list 数组中每个对象的字段与值

字段名详情默认值类型范围
startValue与后端交互的开始时间值(以分钟计算)。9*60Number0-2880(48*60)
endValue与后端交互的结束时间值(以分钟计算)。18*60Number0-2880(48*60)
startRangestartValue 的最大、最小值范围{startValue:0,endValue:2880(48*60)}Array对象内字段:0-2880(48*60)
endRangeendValue 的最大、最小值范围{startValue:0,endValue:2880(48*60)}Array对象内字段:0-2880(48*60)

FanNextTimeSelect 中的 Events

事件名详情类型
setFanNextTimeSelectList参数返回最新的{pickers:数组或对象,flag:值是否合法}Function

FanNextTimeSelectItem 中的 API

API描述是否必填默认值范围类型
item父组件传递的对象。{startValue,endValue}0-2880(48*60){Number}
title标题。''-String
disable是否禁用本组件。falsetrue/falseBoolean
width宽度。100100-500Number
titleSize标题字号。142-100Number
titleColor标题颜色。#333-String
borderColor边框颜色。#ccd4e0-String
bgColor背景颜色。#fafbfc-String
color文字颜色。#33333-String
end是否为下班的控件。(不要动它。。)00/1Number
only是否单独使用。(不要动它。。)truetrue/falseBoolean

FanNextTimeSelectItem 中的 Events

事件名详情类型
setItem参数返回最新的 {pickers:数组或对象,flag:值是否合法},或者 item 对象。Function

$util 中需要用到的的方法

方法名详情参数
formatPickerValue格式化次日时间选择器的值。参 1:要格式化的数组或对象,参 2:是否单组件模式。为 true 时(参 1 应为对象)。
fanCode将小时和分钟编码获得与后端交互的值。参 1:小时,参 2:分钟。
fanDecode解码后端交互的值获得小时和分钟。参 1:与后端交互的值。

bug 反馈与合作 weChat:

1.2.1

3 months ago

1.2.0

3 months ago

1.1.3

6 months ago

1.1.1

6 months ago

1.1.0

6 months ago

1.0.6

6 months ago

1.0.5

6 months ago

1.0.4

6 months ago

1.0.3

6 months ago

1.0.1

6 months ago

1.0.0

6 months ago