# workCalendar **Repository Path**: zhikuany/work-calendar ## Basic Information - **Project Name**: workCalendar - **Description**: uniapp 小程序 h5日历插件 - **Primary Language**: JavaScript - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-09-11 - **Last Updated**: 2025-09-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Work-calendar #### 介绍 基于uni-calendar做的定制化开发,主要功能为工作日历展示和提报组件 ​ 1.支持周计划日报状态展示且可配置 ​ 2.支持农历展示配置,回到当日,月份切换 ​ 3.日历,周报,日报等点击事件封装 ​ 4.支持休假展示 #### 使用说明 1.下载插件到工程中,并在业务代码中引入 ``` import Calendar from '@/components/calendar-zhikuany/calendar.vue' ``` 2.布局中引入插件,并配置所需要的展示信息 ``` /** * Calendar 日历 * @property {String} date 自定义当前时间,默认为今天 * @property {String} text.size 文字大小 * @property {String} text.color 文字颜色 * @property {Boolean} lunar 显示农历 * @property {Boolean} showPlan 展示周计划 * @property {Boolean} showDay 展示日报 * @property {String} startDate 日期选择范围-开始日期 * @property {String} endDate 日期选择范围-结束日期 * @property {Boolean} range 范围选择 * @property {Boolean} showMonth 是否选择月份为背景 * @property {Boolean} needState 周计划日报是否需要审核 * @event {Function} change 日期改变, * @event {Function} monthSwitch 切换月份时触发 */ ``` 3.设置本月周报日报假期数据 ``` /** * 设置数据 */ const setDate = (year : number, month : number) => { // 获取当月第一天和最后一天 // const firstDay = new Date(year, month, 1); // const lastDay = new Date(year, month + 1, 0); // 下个月第0天 = 本月最后一天 uni.showLoading({ title: '' }) //仿照调用接口 设置工作日历数据 setTimeout(() => { uni.hideLoading() //测试周报和日报数据 为 9月12号 date.value = '2025-09-12' calendar.value.setPlanList(planList) }, 1000) } ``` 4.核心数据设置逻辑 ``` /** * 获取每周数据 * @param {Object} dateData */ _getWeek(dateData) { const { year, month } = this.getDate(dateData) let firstDay = new Date(year, month - 1, 1).getDay() // 调整为周一作为第一天(0=周一,6=周日) let adjustedFirstDay = firstDay === 0 ? 6 : firstDay - 1; let currentDay = new Date(year, month, 0).getDate() let dates = { lastMonthDays: this._getLastMonthDays(adjustedFirstDay, this.getDate(dateData)), // 上个月末尾几天 currentMonthDys: this._currentMonthDys(currentDay, this.getDate(dateData)), // 本月天数 nextMonthDays: [], // 下个月开始几天 weeks: [] } let canlender = [] const surplus = 42 - (dates.lastMonthDays.length + dates.currentMonthDys.length) dates.nextMonthDays = this._getNextMonthDays(surplus, this.getDate(dateData)) canlender = canlender.concat(dates.lastMonthDays, dates.currentMonthDys, dates.nextMonthDays) this.canlender = canlender let weekTemp = {} let weekplan = {} //每周的周计划 // 拼接数组 上个月开始几天 + 本月天数+ 下个月开始几天 for (let i = 0; i < canlender.length; i++) { //获取本周的周计划数据 if (i % 7 === 0) { //本周开始日期 const weekBeginDate = canlender[i].fullDate // console.log('开始',weekBeginDate) //获取计划状态 weekplan = {} for (let i = 0; i < this.planList.length; i++) { if (this.planList[i]) { const item = this.planList[i] // console.log(item.monday) if (item.beginDate == weekBeginDate) { weekplan = item // console.log('weekplan', weekplan) break } } } let weekDataState = 0 //周计划状态K if (this.needSate) { weekDataState = weekplan.dataState //周计划 状态 } else { weekDataState = this.isEmpty(weekplan.dataState) ? weekplan.dataState : 1 //状态不用审核 } weekTemp[parseInt(i / 7)] = { weeks: new Array(7), planCode: weekplan.planCode, planId: weekplan.planId, dataState: weekDataState, attachIds: weekplan.attachIds, // fileUrl: weekplan.fileUrl, weekWorkPlan: weekplan.weekWorkPlan, workSummary: weekplan.workSummary, coordinateHelp: weekplan.coordinateHelp, } } //每天的计划状态 var dayPlan = {} switch (i % 7) { case 0: //周一 if (this.needSate) { dayPlan.dayStatus = weekplan.mondayStatus } else { dayPlan.dayStatus = this.isEmptyWithZero(weekplan.mondayStatus) ? weekplan.mondayStatus : 2 } dayPlan.isHoliday = weekplan.mondayIsHoliday break; case 1: if (this.needSate) { dayPlan.dayStatus = weekplan.tuesdayStatus } else { dayPlan.dayStatus = this.isEmptyWithZero(weekplan.tuesdayStatus) ? weekplan.tuesdayStatus : 2 } dayPlan.isHoliday = weekplan.tuesdayIsHoliday break; case 2: if (this.needSate) { dayPlan.dayStatus = weekplan.wednesdayStatus } else { dayPlan.dayStatus = this.isEmptyWithZero(weekplan.wednesdayStatus) ? weekplan .wednesdayStatus : 2 } dayPlan.isHoliday = weekplan.wednesdayIsHoliday break; case 3: if (this.needSate) { dayPlan.dayStatus = weekplan.thursdayStatus } else { dayPlan.dayStatus = this.isEmptyWithZero(weekplan.thursdayStatus) ? weekplan .thursdayStatus : 2 } dayPlan.isHoliday = weekplan.thursdayIsHoliday break; case 4: if (this.needSate) { dayPlan.dayStatus = weekplan.fridayStatus } else { dayPlan.dayStatus = this.isEmptyWithZero(weekplan.fridayStatus) ? weekplan.fridayStatus : 2 } dayPlan.isHoliday = weekplan.fridayIsHoliday break; case 5: if (this.needSate) { dayPlan.dayStatus = weekplan.saturdayStatus } else { dayPlan.dayStatus = this.isEmptyWithZero(weekplan.saturdayStatus) ? weekplan .saturdayStatus : 2 } dayPlan.isHoliday = weekplan.saturdayIsHoliday break; case 6: if (this.needSate) { dayPlan.dayStatus = weekplan.sundayStatus } else { dayPlan.dayStatus = this.isEmptyWithZero(weekplan.sundayStatus) ? weekplan.sundayStatus : 2 } dayPlan.isHoliday = weekplan.sundayIsHoliday break; } // console.log('swich',dayPlan) weekTemp[parseInt(i / 7)].weeks[i % 7] = { ...canlender[i], ...dayPlan } } this.weeks = weekTemp // console.log(this.weeks) } ``` ### 完整示例 ``` ``` #### 周计划日报数据示例 ​ 含用户信息 ,周计划信息和状态,日报信息和状态,是否休假 ``` const planList = [{ //计划编码和id "planId": 58, "planCode": "1015297758478274563", //本周开始 截止时间 "beginDate": "2025-09-08", "endDate": "2025-09-14", "planPeriod": "2025-09-08~2025-09-14", //用户信息 "userCode": "1009761934881456147", "username": "员工001", "departCode": "951784785749401608", "departName": "xxx总公司", //周一到周日状态信息 "monday": "2025-09-08", "mondayStatus": 0, "tuesday": "2025-09-09", "tuesdayStatus": 1, "wednesday": "2025-09-10", "wednesdayStatus": 1, "thursday": "2025-09-11", "thursdayStatus": 0, "friday": "2025-09-12", "fridayStatus": 0, "saturday": "2025-09-13", "saturdayStatus": 0, "sunday": "2025-09-14", "sundayStatus": 0, // "weekWorkPlan": "工作计划", "workSummary": '跟最后工作总结', "coordinateHelp": "需要协调需帮助", //附件列表 字符串 逗号分隔 "attachIds": "", //创建更新时间 "gmtCreate": "2025-09-03 08:27:25", "gmtModified": "2025-09-03 08:27:25", //周计划状态 "dataState": 0, //是否请假 周一到周五 "mondayIsHoliday": null, "tuesdayIsHoliday": 1, "wednesdayIsHoliday": 0, "thursdayIsHoliday": null, "fridayIsHoliday": null, "saturdayIsHoliday": null, "sundayIsHoliday": null }] ```