初始化万家商超用户端仓库

This commit is contained in:
wangxiaowei
2025-04-30 14:04:34 +08:00
commit 022c640d89
425 changed files with 160005 additions and 0 deletions

183
common/mixin/calendar.js Normal file
View File

@ -0,0 +1,183 @@
export default {
data() {
return {
calendar: [], //日历数组
currentDate: [], //当前日期
time:'',//选中日期
start_time:'',//开始日期
end_time:'',//结束日期
}
},
onLoad() {
let currentDate = this.currentime();
this.currentDate = currentDate;
let currentYear = currentDate[0];
let currentMonth = currentDate[1] > 9 ? currentDate[1] : '0'+currentDate[1];
let currentDay = currentDate[2] > 9 ? currentDate[2] : '0'+currentDate[2];
// 足迹01页面日期筛选默认值
this.time = `${currentYear}-${currentMonth}-${currentDay}`;
// 足迹02页面日期筛选赋值 默认三个月
// 开始时间
if(currentDate[1] > 4){
let prevMonth = currentDate[1]-3 > 9 ? currentDate[1]-3 : '0'+(currentDate[1]-3) ;
let prevDay = currentDate[2] > 9 ? currentDate[2] : '0'+currentDate[2];
this.start_time = `${currentDate[0]}-${prevMonth}-${prevDay}`;
}else{
let prevYear = currentDate[0]-1;
let prevMonth = currentDate[1]-3 + 12 > 9 ? currentDate[1]-3 + 12 : '0'+(currentDate[1]-3 + 12) ;
let prevDay = currentDate[2] > 9 ? currentDate[2] : '0'+currentDate[2];
this.start_time = `${prevYear}-${prevMonth}-${prevDay}`;
}
// 结束时间
this.end_time = `${currentYear}-${currentMonth}-${currentDay}`;
// 日历赋值
this.calendar = this.getCalendar(currentDate[0], currentDate[1]);
},
methods: {
/**
* @description 获取当前时间函数
*/
currentime() {
var date = new Date();
var y = Number(date.getFullYear());
var m = Number(date.getMonth() + 1);
var d = Number(date.getDate());
return [y, m, d];
},
/**
* @author 邓东方
* @description 获取日历
* @param {String,Number} y 年
* @param {String,Number} m 月
* @param {String,Number} currentDay 当前日 传入了显示 当前日 active == true
*/
getCalendar(y, m) {
// 求解cy年cm月cd日是星期几,parseInt代表取整 d=1是去每个月第一天
var cc = parseInt(y / 100); //c
var cy = y - cc * 100; //y
var cm = m; //m
var cd = 1; //d
// 某年的1、2月要看作上一年的13、14月来计算比如2003年1月1日要看作2002年的13月1日来计算
if (m == 1 || m == 2) {
cc = parseInt((y - 1) / 100);
cy = y - 1 - cc * 100;
cm = 12 + m;
}
//w=y+[y/4]+[c/4]-2c+[26(m+1/10]+d-1
// var csum = y + [y / 4] + [c / 4] - 2c+[26(m + 1/10]+d-1;
var csum = cy + parseInt(cy / 4) + parseInt(cc / 4) - 2 * cc + parseInt(26 * (cm + 1) / 10) + cd - 1;
// 注意使用蔡勒公式时出现负数情况 fd 每月第一天星期几
if (csum < 0) {
var fd = parseInt((csum % 7 + 7) % 7);
} else {
var fd = parseInt(csum % 7);
}
// 上个月天数
var cond1 = y % 4 == 0; //条件1年份必须要能被4整除
var cond2 = y % 100 != 0; //条件2年份不能是整百数
var cond3 = y % 400 == 0; //条件3年份是400的倍数
//当条件1和条件2同时成立时就肯定是闰年所以条件1和条件2之间为“与”的关系。
//如果条件1和条件2不能同时成立但如果条件3能成立则仍然是闰年。所以条件3与前2项为“或”的关系。
//所以得出判断闰年的表达式:
var cond = cond1 && cond2 || cond3;
//判断当月有多少天
var allDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][m - 1];
if (cond && m == 2) {
allDays = 29;
}
//上个月是不是去年
let prevYear = y;
let prevMonth = m - 1;
if (m == 1) {
prevYear = y - 1;
prevMonth = 12;
}
let _prevMonth = prevMonth>9?prevMonth:'0'+prevMonth;
let _m = m>9?m:'0'+m;
//判断上个月天数
var prevDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][prevMonth - 1];
var arr = [];
//这里塞入上个月末尾日期
//day 日 active 是否选择 isNot 是不是这个月 formData 日期格式 isBg 是否加背景色(日期段筛选时使用)
for (let i = 1; i <= fd; i++) {
let prevDay = prevDays - fd + i;
let _prevDay = prevDay>9?prevDay:'0'+prevDay;
arr.push({
'day': prevDay,
'active': false,
'isNot': true,
'formData': prevYear + '-' + _prevMonth + '-' + _prevDay
})
}
//这里塞入正常这个月的日期
for (let i = 1; i <= allDays; i++) {
let _i = i>9?i:'0'+i;
arr.push({
'day': i,
'active': false,
'isNot': false,
'formData': y + '-' + _m + '-' + _i
})
}
//下个月是不是下一年
let nextYear = y;
let nextMonth = m + 1;
if (m == 12) {
nextYear = y + 1;
nextMonth = 1;
}
let _nextMonth = nextMonth>9?nextMonth:'0'+nextMonth;
//判断数组最后一排剩余几个位置塞入下个月日期
let takedie = arr.length % 7;
if (7 - takedie > 0 && 7 - takedie < 7) {
for (let i = 1; i <= 7 - takedie; i++) {
let _i = i>9?i:'0'+i;
arr.push({
'day': i,
'active': false,
'isNot': true,
'formData': nextYear + '-' + _nextMonth + '-' + _i
})
}
}
// 处理数组钩子
if(this.handleCalendarFn){
arr = this.handleCalendarFn(arr);
}
return arr;
},
/**
* @description 上月
*/
prevMonth() {
let currentDate = this.currentDate;
if (currentDate[1] - 1 == 0) {
currentDate = [currentDate[0] - 1, 12];
} else {
currentDate = [currentDate[0], currentDate[1] - 1];
}
this.currentDate = currentDate;
this.calendar = this.getCalendar(currentDate[0], currentDate[1]);
},
/**
* @description 下月
*/
nextMonth() {
let currentDate = this.currentDate;
if (currentDate[1] == 12) {
currentDate = [Number(currentDate[0]) + 1, 1];
} else {
currentDate = [Number(currentDate[0]), Number(currentDate[1]) + 1];
}
this.currentDate = currentDate;
this.calendar = this.getCalendar(currentDate[0], currentDate[1]);
}
}
}