跳到主要内容

日历

日历是一个用于展示和管理时间相关数据的视图组件,基于Ant Design Calendar实现日程安排、事件管理和时间规划功能。它负责数据源绑定、日程创建编辑和交互事件处理,支持拖拽操作、自定义渲染和多种视图模式。

日历元素分层结构为Meta(components.Meta) → Type(components.Calendar) → 实例,开发者可通过JitAI的可视化开发工具快捷地创建日历实例元素。

当然,开发者也可以创建自己的Type元素,或者在自己的App中改写JitAi官方提供的components.CalendarType元素,以实现自己的封装。

快速开始

基础配置示例

基础日历配置
{
"name": "calendar1",
"title": "项目日历",
"fullName": "components.Calendar",
"config": {
"requireElements": [
{
"title": "项目数据模型",
"type": "models.Meta",
"name": "models.ProjectModel",
"filter": "",
"orderBy": ""
}
],
"startTime": ["startDate"],
"endTime": ["endDate"],
"title": ["projectName"],
"scheduleType": ["status"],
"createSchedule": true,
"dragSchedule": true,
"defaultRender": true
}
}

配置属性说明

属性名类型默认值说明示例
requireElementsArray[]关联数据模型配置见上方示例
startTimeArray[]开始时间字段映射["startDate"]
endTimeArray[]结束时间字段映射["endDate"]
titleArray[]标题字段映射["projectName"]
scheduleTypeArray[]日程类型字段映射["status"]
toolbarBtnArray[]工具栏按钮配置[]
columnBtnArray[]列按钮配置[]
createScheduleBooleantrue是否允许创建日程true
dragScheduleBooleantrue是否允许拖拽日程true
defaultRenderBooleantrue是否使用默认渲染true

变量

activeRow

当前选中的行数据,包含用户点击或操作的日程信息。

activeRow使用示例
// 获取当前选中行的数据
const currentRow = calendar1.activeRow;
console.log(currentRow.getValue());

// 监听行数据变化
calendar1.activeRow.subscribeEvent('change', (data) => {
console.log('选中行数据变化:', data);
});

方法

call

刷新日历数据,重新从数据源加载并更新显示。

使用示例

刷新日历数据
// 刷新日历
await calendar1.call();

// 在事件处理中使用
async function handleDataUpdate() {
await calendar1.call();
console.log('日历数据已刷新');
}

publishEvent

发送组件事件,用于组件间通信。

参数详解

参数名类型必填说明示例
nameString事件名称"clickRow"
exObject附加数据{customData: "value"}

返回值

Promise<void> - 异步操作完成

使用示例

发送组件事件
// 发送自定义事件
await calendar1.publishEvent('customEvent', {
message: '自定义数据',
timestamp: new Date()
});

subscribeEvent

订阅组件事件,监听特定事件的触发。

参数详解

参数名类型必填说明示例
nameString事件名称"clickRow"
evtCbFunction回调函数(data) => {...}
unSubscribeExistBoolean是否取消已存在订阅true

返回值

String - 事件处理器ID

使用示例

订阅组件事件
// 订阅行点击事件
const handlerId = calendar1.subscribeEvent('clickRow', (data) => {
console.log('用户点击了行:', data);
});

// 订阅日程创建事件
calendar1.subscribeEvent('afterCreateSchedule', async (data) => {
console.log('新建日程:', data);
// 执行后续处理逻辑
});

unSubscribeEvent

取消事件订阅。

参数详解

参数名类型必填说明示例
idString事件处理器ID"handler123"

使用示例

取消事件订阅
// 取消特定事件订阅
calendar1.unSubscribeEvent(handlerId);

setConfig

设置组件配置,动态更新组件行为。

参数详解

参数名类型必填说明示例
nextObject新配置对象{createSchedule: false}
cleanBoolean是否完全替换配置false

使用示例

动态配置组件
// 禁用日程创建功能
calendar1.setConfig({
createSchedule: false,
dragSchedule: false
});

// 更新数据源配置
calendar1.setConfig({
requireElements: [{
title: "新数据模型",
type: "models.Meta",
name: "models.NewModel"
}]
});

destroy

销毁组件实例,清理资源和事件监听器。

使用示例

销毁组件
// 组件销毁
calendar1.destroy();

runCode

执行自定义代码片段,在页面上下文中运行。

参数详解

参数名类型必填说明示例
codeString要执行的代码字符串"self.activeRow.getValue()"

返回值

Any - 代码执行结果

使用示例

执行自定义代码
// 执行代码获取数据
const result = calendar1.runCode('self.activeRow.getValue()');
console.log(result);

getPermConfig

获取当前组件的权限配置。

返回值

Record<string, any> | undefined - 权限配置对象

使用示例

获取权限配置
// 获取组件权限配置
const permConfig = calendar1.getPermConfig();
if (permConfig) {
console.log('组件权限:', permConfig);
}

属性

基础属性

属性名类型说明示例值
nameString组件名称,用于标识组件实例"calendar1"
titleString组件标题,显示在界面上的名称"项目日历"
typeString组件类型标识"components.Calendar"
fullNameString组件的完整名称标识"components.Calendar"
showTitleBoolean是否显示组件标题true
compTypeEnum组件类型枚举值组件类型枚举值
访问基础属性示例
// 获取组件基本信息
console.log('组件名称: ' + calendar1.name + ', 标题: ' + calendar1.title);
console.log('类型: ' + calendar1.type + ', 是否显示标题: ' + calendar1.showTitle);

config

组件配置对象,包含所有配置参数。

访问组件配置
const config = calendar1.config;
console.log(config.createSchedule); // true
console.log(config.startTime); // ["startDate"]

// 动态检查配置
if (config.dragSchedule) {
console.log('支持拖拽功能');
}

app

关联的应用实例,提供应用级别的功能。

使用应用实例
const app = calendar1.app;
// 获取应用元素
const userModel = await app.getElement('models.UserModel');

page

关联的页面实例,提供页面级别的功能。

使用页面实例
const page = calendar1.page;
// 访问页面其他组件
const otherComponent = page.getComponent('otherComponentName');

事件

clickRow

行点击事件,当用户点击日历中的某一行时触发。

事件数据:activeRow - 当前点击的行数据

处理行点击事件
calendar1.subscribeEvent('clickRow', (data) => {
console.log('点击的行数据:', data.activeRow);
// 处理行点击逻辑
});

afterCreateSchedule

新建日程后事件,当用户创建新日程后触发。

事件数据:activeRow - 新创建的日程数据

处理日程创建事件
calendar1.subscribeEvent('afterCreateSchedule', (data) => {
console.log('新建的日程:', data.activeRow);
// 发送通知或更新相关数据
});

afterDragSchedule

拖拽日程后事件,当用户拖拽移动日程后触发。

事件数据:activeRow - 拖拽后的日程数据

处理日程拖拽事件
calendar1.subscribeEvent('afterDragSchedule', (data) => {
console.log('拖拽后的日程:', data.activeRow);
// 保存新的时间安排
});