import { VantComponent } from '../common/component';
import { isDef } from '../common/utils';
import { pickerProps } from '../picker/shared';
const currentYear = new Date().getFullYear();
function isValidDate(date) {
return isDef(date) && !isNaN(new Date(date).getTime());
}
function range(num, min, max) {
return Math.min(Math.max(num, min), max);
}
function padZero(val) {
return `00${val}`.slice(-2);
}
function times(n, iteratee) {
let index = -1;
const result = Array(n < 0 ? 0 : n);
while (++index < n) {
result[index] = iteratee(index);
}
return result;
}
function getTrueValue(formattedValue) {
if (!formattedValue)
return;
while (isNaN(parseInt(formattedValue, 10))) {
formattedValue = formattedValue.slice(1);
}
return parseInt(formattedValue, 10);
}
function getMonthEndDay(year, month) {
return 32 - new Date(year, month - 1, 32).getDate();
}
const defaultFormatter = (_, value) => value;
VantComponent({
classes: ['active-class', 'toolbar-class', 'column-class'],
props: Object.assign({}, pickerProps, { formatter: {
type: Function,
value: defaultFormatter
}, value: null, type: {
type: String,
value: 'datetime'
}, showToolbar: {
type: Boolean,
value: true
}, minDate: {
type: Number,
value: new Date(currentYear - 10, 0, 1).getTime()
}, maxDate: {
type: Number,
value: new Date(currentYear + 10, 11, 31).getTime()
}, minHour: {
type: Number,
value: 0
}, maxHour: {
type: Number,
value: 23
}, minMinute: {
type: Number,
value: 0
}, maxMinute: {
type: Number,
value: 59
} }),
data: {
innerValue: Date.now(),
columns: []
},
watch: {
value: 'updateValue',
type: 'updateValue',
minDate: 'updateValue',
maxDate: 'updateValue',
minHour: 'updateValue',
maxHour: 'updateValue',
minMinute: 'updateValue',
maxMinute: 'updateValue'
},
methods: {
updateValue() {
const { data } = this;
const val = this.correctValue(this.data.value);
const isEqual = val === data.innerValue;
if (!isEqual) {
this.updateColumnValue(val).then(() => {
this.$emit('input', val);
});
}
else {
this.updateColumns();
}
},
getPicker() {
if (this.picker == null) {
this.picker = this.selectComponent('.van-datetime-picker');
const { picker } = this;
const { setColumnValues } = picker;
picker.setColumnValues = (...args) => setColumnValues.apply(picker, [...args, false]);
}
return this.picker;
},
updateColumns() {
const { formatter = defaultFormatter } = this.data;
const results = this.getRanges().map(({ type, range }) => {
const values = times(range[1] - range[0] + 1, index => {
let value = range[0] + index;
value = type === 'year' ? `${value}` : padZero(value);
return formatter(type, value);
});
return { values };
});
return this.set({ columns: results });
},
getRanges() {
const { data } = this;
if (data.type === 'time') {
return [
{
type: 'hour',
range: [data.minHour, data.maxHour]
},
{
type: 'minute',
range: [data.minMinute, data.maxMinute]
}
];
}
const { maxYear, maxDate, maxMonth, maxHour, maxMinute } = this.getBoundary('max', data.innerValue);
const { minYear, minDate, minMonth, minHour, minMinute } = this.getBoundary('min', data.innerValue);
const result = [
{
type: 'year',
range: [minYear, maxYear]
},
{
type: 'month',
range: [minMonth, maxMonth]
},
{
type: 'day',
range: [minDate, maxDate]
},
{
type: 'hour',
range: [minHour, maxHour]
},
{
type: 'minute',
range: [minMinute, maxMinute]
}
];
if (data.type === 'date')
result.splice(3, 2);
if (data.type === 'year-month')
result.splice(2, 3);
return result;
},
correctValue(value) {
const { data } = this;
// validate value
const isDateType = data.type !== 'time';
if (isDateType && !isValidDate(value)) {
value = data.minDate;
}
else if (!isDateType && !value) {
const { minHour } = data;
value = `${padZero(minHour)}:00`;
}
// time type
if (!isDateType) {
let [hour, minute] = value.split(':');
hour = padZero(range(hour, data.minHour, data.maxHour));
minute = padZero(range(minute, data.minMinute, data.maxMinute));
return `${hour}:${minute}`;
}
// date type
value = Math.max(value, data.minDate);
value = Math.min(value, data.maxDate);
return value;
},
getBoundary(type, innerValue) {
const value = new Date(innerValue);
const boundary = new Date(this.data[`${type}Date`]);
const year = boundary.getFullYear();
let month = 1;
let date = 1;
let hour = 0;
let minute = 0;
if (type === 'max') {
month = 12;
date = getMonthEndDay(value.getFullYear(), value.getMonth() + 1);
hour = 23;
minute = 59;
}
if (value.getFullYear() === year) {
month = boundary.getMonth() + 1;
if (value.getMonth() + 1 === month) {
date = boundary.getDate();
if (value.getDate() === date) {
hour = boundary.getHours();
if (value.getHours() === hour) {
minute = boundary.getMinutes();
}
}
}
}
return {
[`${type}Year`]: year,
[`${type}Month`]: month,
[`${type}Date`]: date,
[`${type}Hour`]: hour,
[`${type}Minute`]: minute
};
},
onCancel() {
this.$emit('cancel');
},
onConfirm() {
this.$emit('confirm', this.data.innerValue);
},
onChange() {
const { data } = this;
let value;
const picker = this.getPicker();
if (data.type === 'time') {
const indexes = picker.getIndexes();
value = `${indexes[0] + data.minHour}:${indexes[1] + data.minMinute}`;
}
else {
const values = picker.getValues();
const year = getTrueValue(values[0]);
const month = getTrueValue(values[1]);
const maxDate = getMonthEndDay(year, month);
let date = getTrueValue(values[2])
没有合适的资源?快使用搜索试试~ 我知道了~
基于微信小程序的校园兼职系统源码.zip
共385个文件
js:84个
wxss:71个
ts:70个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 119 浏览量
2024-10-11
09:46:46
上传
评论
收藏 1.77MB ZIP 举报
温馨提示
基于微信小程序的校园兼职系统源码.zip,个人经导师指导并认可通过的高分设计项目,评审分98分。主要针对计算机相关专业的正在做毕业设计大作业的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业。 基于微信小程序的校园兼职系统源码.zip,个人经导师指导并认可通过的高分设计项目,评审分98分。主要针对计算机相关专业的正在做毕业设计大作业的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业。基于微信小程序的校园兼职系统源码.zip,个人经导师指导并认可通过的高分设计项目,评审分98分。主要针对计算机相关专业的正在做毕业设计大作业的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业。基于微信小程序的校园兼职系统源码.zip,个人经导师指导并认可通过的高分设计项目,评审分98分。主要针对计算机相关专业的正在做毕业设计大作业的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业。基于微信小程序的校园兼职系统源码.zip,个人经导师指导并认可通过的高分设计项目,评审分98分。主要针对计算机相关专业的正在做毕业设计大作业的学生
资源推荐
资源详情
资源评论
收起资源包目录
基于微信小程序的校园兼职系统源码.zip (385个子文件)
.gitignore 145B
jobimg2.jpg 567KB
user_bg.jpg 395KB
banner-2.jpg 187KB
banner-3.jpg 163KB
banner-1.jpg 110KB
authPage_bg.jpg 62KB
jobimg1.jpg 24KB
default.jpg 3KB
index.js 10KB
index.js 10KB
index.js 7KB
index.js 6KB
addPublish.js 5KB
index.js 5KB
index.js 4KB
searchPage.js 4KB
transition.js 4KB
myStore.js 4KB
index.js 3KB
index.js 3KB
index.js 3KB
myPublish.js 3KB
index.js 3KB
jobDetail.js 3KB
user.js 3KB
index.js 3KB
index.js 2KB
index.js 2KB
authPage.js 2KB
index.js 2KB
feedback.js 2KB
index.js 2KB
index.js 2KB
toast.js 2KB
dialog.js 2KB
index.js 2KB
index.js 2KB
index.js 1KB
component.js 1KB
index.js 1KB
index.js 1KB
behavior.js 1KB
index.js 1KB
canIuse.js 1KB
index.js 1KB
index.js 1KB
safe-area.js 1KB
request.js 1KB
index.js 1KB
app.js 1KB
index.js 1KB
index.js 1KB
index.js 1KB
index.js 999B
index.js 925B
index.js 907B
index.js 903B
index.js 890B
touch.js 889B
index.js 877B
index.js 838B
index.js 824B
notify.js 770B
index.js 738B
index.js 726B
basic.js 676B
index.js 676B
open-type.js 674B
utils.js 619B
index.js 599B
props.js 597B
index.js 554B
index.js 548B
index.js 542B
index.js 486B
util.js 472B
index.js 470B
button.js 442B
shared.js 388B
index.js 382B
index.js 375B
link.js 364B
index.js 336B
index.js 334B
logs.js 261B
index.js 239B
index.js 194B
index.js 146B
index.js 140B
color.js 123B
weapp.js 0B
index.js 0B
app.json 1KB
project.config.json 981B
package-lock.json 370B
package.json 263B
index.json 207B
sitemap.json 191B
index.json 158B
共 385 条
- 1
- 2
- 3
- 4
资源评论
程序员张小妍
- 粉丝: 1w+
- 资源: 3255
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 鼎微R16中控升级包R16-4.5.10-20170221及强制升级方法
- 鼎微R16中控升级包公版UI 2015及强制升级方法,救砖包
- 基于CSS与JavaScript的积分系统设计源码
- 生物化学作业_1_生物化学作业资料.pdf
- 基于libgdx引擎的Java开发连连看游戏设计源码
- 基于MobileNetV3的SSD目标检测算法PyTorch实现设计源码
- 基于Java JDK的全面框架设计源码学习项目
- 基于Python黑魔法原理的Python编程技巧设计源码
- 基于Python的EducationCRM管理系统前端设计源码
- 基于Django4.0+Python3.10的在线学习系统Scss设计源码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功