# IE-plus 项目 ## 项目简介 这是一个基于 uni-app 的学习应用项目,使用 Vite 作为构建工具。 ## 最近修改 ### 日历组件全面升级 - 新增多项功能 **修改时间**: 2024年 **修改内容**: 为 uni-calendar 组件新增了多项实用功能,提升组件的灵活性和可定制性 #### 新增功能 ##### 1. 周日位置控制 - **参数**: `sundayFirst` (Boolean, 默认: false) - **功能**: 控制周日显示在第一列还是最后一列 - **用法**: ```vue ``` ##### 2. 显示模式控制 - **参数**: `displayMode` (String, 默认: 'month') - **可选值**: 'month' | 'week' - **功能**: 控制按月显示还是按周显示 - **特点**: 按周显示时,其他周的日期会显示但置灰,只有指定周正常显示 - **方法**: - `preWeek()`: 切换到上一周 - `nextWeek()`: 切换到下一周 - `setWeekNumber(weekNumber)`: 设置指定周数 - **事件**: `change-week`: 周数变化时触发 - **用法**: ```vue ``` ##### 3. 今天高亮控制 - **参数**: `highlightToday` (Boolean, 默认: true) - **功能**: 控制是否高亮今天,影响"回到今日"按钮显示和今天日期样式 - **用法**: ```vue ``` ##### 4. 工具栏显示控制 - **参数**: `showToolbar` (Boolean, 默认: true) - **功能**: 控制是否显示顶部的月份切换工具栏 - **用法**: ```vue ``` ##### 5. 自定义日期样式插槽 - **插槽**: `calendar-item` - **功能**: 允许外部自定义每个日期项的显示样式 - **特点**: 可以完全自定义整个日期项,包含更多参数 - **用法**: ```vue ``` #### 数据属性说明 每个日期项(weeks)包含以下属性: - `fullDate`: 完整日期字符串 (如: "2024-01-15") - `year`: 年份 - `month`: 月份 - `date`: 日期数字 - `isDay`: 是否为今天 - `disable`: 是否禁用 - `isCurrentMonth`: **是否为当前月份** (true: 本月, false: 上月/下月) - `isWeekModeDisabled`: 按周模式下的置灰标识 - `beforeMultiple`: 多选开始标识 - `afterMultiple`: 多选结束标识 - `multiple`: 多选中间标识 - `lunar`: 农历信息 - `extraInfo`: 额外信息(打点数据) #### 修改文件 1. `src/uni_modules/uni-calendar/components/uni-calendar/uni-calendar.vue` - 新增5个props参数 - 添加计算属性 `filteredWeeks` 处理按周显示 - 修改模板支持条件渲染和插槽 - 优化星期标题显示逻辑 2. `src/uni_modules/uni-calendar/components/uni-calendar/util.js` - 新增 `sundayFirst` 参数支持 - 修改 `_getWeek` 方法支持周日位置控制 - 优化日期计算逻辑 3. `src/uni_modules/uni-calendar/components/uni-calendar/uni-calendar-item.vue` - 新增 `highlightToday` 参数支持 - 添加插槽支持自定义日期样式 - 优化今天高亮显示逻辑 #### 完整参数列表 ```vue display-mode="month" :week-number="1" :highlight-today="true" :show-toolbar="true" :insert="true" :lunar="false" :range="false" :selected="[]" :start-date="" :end-date="" :show-month="true" :clear-date="true" :readonly="false" > ``` #### 日期范围API Calendar 工具类提供两个实用的日期范围获取方法: ##### 1. 获取本月日期范围 ```javascript import Calendar from './util.js' const calendar = new Calendar() const monthRange = calendar.getCurrentMonthRange('2024-10-15') // 返回: {startDate: '2024-10-01', endDate: '2024-10-31', totalDays: 31, totalWeeks: 5} ``` ##### 2. 获取指定周日期范围 ```javascript // 获取当前日期所在的周 const currentWeek = calendar.getCurrentWeekRange('2024-10-15') // 返回: {startDate: '2024-10-13', endDate: '2024-10-19', totalDays: 7, currentWeek: 3, totalWeeks: 5} // 获取指定周数 const week2 = calendar.getCurrentWeekRange('2024-10-15', 2) // 返回: {startDate: '2024-10-06', endDate: '2024-10-12', totalDays: 7, currentWeek: 2, totalWeeks: 5} ``` **参数说明:** - `date`: 日期字符串,可选,默认为当前日期 - `weekNumber`: 周数,从1开始,可选,不传时自动计算指定日期所在的周 **返回值说明:** - `startDate`: 开始日期 - `endDate`: 结束日期 - `totalDays`: 总天数 - `totalWeeks`: 总周数(实际包含本月日期的周数) - `currentWeek`: 当前周数(仅周范围方法) #### 技术细节 - 使用 Vue 3 的 Composition API 和插槽系统 - 通过计算属性实现按周显示的数据过滤 - 使用条件渲染控制工具栏和今天高亮显示 - 支持完全自定义的日期样式渲染 - 提供完整的周切换API,支持跨月份切换 - 智能处理边界情况(第一周/最后一周的跨月切换) - 提供实用的日期范围获取API,支持外部调用 #### 影响范围 - 所有使用 uni-calendar 组件的页面都可以使用新功能 - 向后兼容,现有代码无需修改 - 新功能为可选参数,默认行为保持不变 ## 项目结构 ``` src/ ├── uni_modules/ # uni-app 模块 │ └── uni-calendar/ # 日历组件 ├── pagesStudy/ # 学习相关页面 ├── components/ # 公共组件 └── ... ``` ## 开发说明 - 使用 Vue 3 + TypeScript - 构建工具:Vite - UI框架:uni-app - 样式:SCSS + Tailwind CSS ## 注意事项 - 修改日历组件后,请确保所有使用该组件的页面都能正常显示 - 如果需要在其他项目中复用此修改,请同时复制两个文件的修改内容