export type SheetId = string; export type FieldId = string; export type RecordId = string; export type ViewId = string; export declare enum SharingStatus { Enabled = "Enabled", Disabled = "Disabled" } export declare enum PermissionScope { BASE = "base", SHEET = "sheet", VIEW = "view", FIELD = "field", RECORD = "record", CELL = "cell" } export declare enum PermissionType { /** 可编辑权限 */ EDIT = "edit", /** 可管理权限 */ MANAGE = "manage", /** 可读权限 */ READ = "read", /** 可创建权限 */ CREATE = "create", /** 可更新权限 */ UPDATE = "update", /** 可删除权限 */ DELETE = "delete", /** 可复制权限 */ COPY = "copy", /** 可分组权限 */ GROUP = "group", /** 可排序权限 */ SORT = "sort", /** 可筛选权限 */ FILTER = "filter", /** 可填色权限 */ FILL_COLOR = "fillColor" } interface IBasePermission { /** 权限范围 */ scope: PermissionScope.BASE; /** 权限类型 */ permissionType: PermissionType.EDIT | PermissionType.MANAGE; } interface ISheetPermission { /** 权限范围 */ scope: PermissionScope.SHEET; /** 权限类型 */ permissionType: PermissionType.READ | PermissionType.CREATE | PermissionType.UPDATE | PermissionType.DELETE; params: { /** 需要查询权限的数据表ID */ sheetId: SheetId; }; } export type IGetPermission = IBasePermission | ISheetPermission; export interface Selection { /** 当前多维表的ID */ baseId: string; /** 当前选中区域所属数据表ID,未选中数据表时返回null */ sheetId: SheetId | null; /** 当前选中区域所属视图ID,未选中视图时返回null */ viewId: string | null; /** 当前选中区域起始单元格所属字段ID,未选中单元格时返回null */ fieldId: FieldId | null; /** 当前选中区域起始单元格所属记录ID,未选中单元格时返回null */ recordId: RecordId | null; /** * 当前选中表区域的范围 */ selectedArea: { /** * 当前选中区域所属字段ID */ fieldIds: FieldId[] | null; /** * 当前选中区域内记录ID列表,在大数据表下如果选中了整列,不会返回所有的记录ID列表,可通过selectedAllRows是否为true判断是否选中了整列 */ recordIds: RecordId[] | null; /** 是否选中当前视图下所有记录 */ selectedAllRows: boolean; } | null; } export interface SheetToUpdate { /** 需要更新的表格名称 */ name?: string; /** 需要更新的数据表描述 */ desc?: string; } export type FieldType = 'text' | 'number' | 'singleSelect' | 'multipleSelect' | 'date' | 'group' | 'checkbox' | 'user' | 'unidirectionalLink' | 'bidirectionalLink' | 'attachment' | 'department' | 'url' | 'creator' | 'lastModifier' | 'createdTime' | 'lastModifiedTime' | 'rating' | 'progress' | 'currency' | 'telephone' | 'email' | 'idCard' | 'barcode' | 'primaryDoc' | 'formula' | 'lookup' | 'filterUp' | 'object' | 'geolocation' | 'richText'; export declare enum NUMERICAL_FORMAT { /** 整数 */ INT = "INT", /** 保留1位小数 */ FLOAT_1 = "FLOAT_1", /** 保留2位小数 */ FLOAT_2 = "FLOAT_2", /** 保留3位小数 */ FLOAT_3 = "FLOAT_3", /** 保留4位小数 */ FLOAT_4 = "FLOAT_4", /** 保留5位小数 */ FLOAT_5 = "FLOAT_5", /** 保留6位小数 */ FLOAT_6 = "FLOAT_6", /** 保留7位小数 */ FLOAT_7 = "FLOAT_7", /** 保留8位小数 */ FLOAT_8 = "FLOAT_8", /** 保留9位小数 */ FLOAT_9 = "FLOAT_9", /** 千分位 */ THOUSAND = "THOUSAND", /** 千分位(小数点) */ THOUSAND_FLOAT = "THOUSAND_FLOAT", /** 百分比 */ PERCENT = "PERCENT", /** 百分比(小数点) */ PERCENT_FLOAT = "PERCENT_FLOAT" } export type NumericalFormatter = `${NUMERICAL_FORMAT}`; export declare enum DATE_FORMAT { FORMAT1 = "YYYY-MM-DD", FORMAT2 = "YYYY-MM-DD HH:mm", FORMAT3 = "YYYY/MM/DD", FORMAT4 = "YYYY/MM/DD HH:mm", FORMAT5 = "YYYY\u5E74MM\u6708", FORMAT6 = "MM\u6708DD\u65E5", FORMAT7 = "YYYY\u5E74MM\u6708DD\u65E5" } export type DateFormatter = `${DATE_FORMAT}`; export declare enum PROGRESS_FORMAT { /** 数值,整数 */ NUMBER = "NUMBER", /** 数值,保留1位小数位 */ NUMBER_FLOAT_1 = "NUMBER_FLOAT_1", /** 数值,保留2位小数位 */ NUMBER_FLOAT_2 = "NUMBER_FLOAT_2", /** 数值,保留3位小数位 */ NUMBER_FLOAT_3 = "NUMBER_FLOAT_3", /** 百分比,整数 */ PERCENT = "PERCENT", /** 百分比,保留1位小数位 */ PERCENT_FLOAT_1 = "PERCENT_FLOAT_1", /** 百分比,保留2位小数位 */ PERCENT_FLOAT_2 = "PERCENT_FLOAT_2", /** 百分比,保留3位小数位 */ PERCENT_FLOAT_3 = "PERCENT_FLOAT_3" } export type ProgressFormatter = `${PROGRESS_FORMAT}`; export interface SelectOption { /** 选项ID,由系统默认生成,创建选项时无需传入此项 */ id?: string; /** 选项名 */ name: string; } export declare enum RATING_ICON_TYPE { STAR = "star", NPS = "nps", HEART = "heart", LIKE = "like", FIRE = "fire", EMOJI = "emoji", LIGHTING = "lighting", FLOWER = "flower" } export type RatingIconType = `${RATING_ICON_TYPE}`; export declare enum CURRENCY_TYPE { /** 人民币 */ CNY = "CNY", /** 港元 */ HKD = "HKD", /** 美元 */ USD = "USD", /** 欧元 */ EUR = "EUR", /** 英镑 */ GBP = "GBP", /** 澳门元 */ MOP = "MOP", /** 越南盾 */ VND = "VND", /** 日元 */ JPY = "JPY", /** 韩元 */ KRW = "KRW", /** 阿联酋迪拉姆 */ AED = "AED", /** 澳元 */ AUD = "AUD", /** 巴西雷亚尔 */ BRL = "BRL", /** 加拿大元 */ CAD = "CAD", /** 瑞士法郎 */ CHF = "CHF", /** 印度卢比 */ INR = "INR", /** 印尼盾 */ IDR = "IDR", /** 墨西哥比索 */ MXN = "MXN", /** 马来西亚令吉 */ MYR = "MYR", /** 菲律宾比索 */ PHP = "PHP", /** 波兰兹罗提 */ PLN = "PLN", /** 俄罗斯卢布 */ RUB = "RUB", /** 新加坡元 */ SGD = "SGD", /** 泰国铢 */ THB = "THB", /** 土耳其里拉 */ TRY = "TRY", /** 新台币 */ TWD = "TWD" } export type CurrencyType = `${CURRENCY_TYPE}`; export interface FieldProperty { /** * 字段格式[数字/时间/进度/货币字段可配置] */ formatter?: NUMERICAL_FORMAT | DATE_FORMAT | PROGRESS_FORMAT; /** * 选项配置[单选/多选字段可配置] */ choices?: SelectOption[]; /** * 要关联的数据表Id[单向关联/双向关联字段可配置] */ linkedSheetId?: SheetId; /** * 双向关联的字段Id[由系统自动生成] */ linkedFieldId?: FieldId; /** * 是否可多选[人员/群组/部门/单向关联/双向关联字段可配置] */ multiple?: boolean; /** * 最小值[进度、评分字段可配置,评分字段下仅支持配置0或1的整数] */ min?: number; /** * 最大值[进度、评分字段可配置,评分字段下仅支持配置2~5的整数] */ max?: number; /** * 是否可自定义进度条值[进度字段可配置] */ customizeRange?: boolean; /** * 评分图标[评分字段可配置] */ icon?: RATING_ICON_TYPE; /** * 货币币种[货币字段可配置] */ currencyType?: CURRENCY_TYPE; /** * 公式字段配置 */ formula?: string; } export interface FieldToInsert { /** 字段名称 */ name: string; /** 字段类型 */ type: FieldType; /** 字段属性 */ property?: FieldProperty; /** 字段描述 */ desc?: string; /** 位置参考字段 */ referFieldId?: FieldId; /** 在参考字段的前还是后 */ insertAfterRefer?: boolean; } export interface FieldToUpdate { /** 字段名称 */ name?: string; /** 字段类型 */ type?: FieldType; /** 字段属性 */ property?: FieldProperty; /** 字段描述 */ desc?: string; } export interface FieldToUpdateWithoutType { /** 字段ID(可选), 不存在时则根据字段名称查找指定字段 */ id?: FieldId; /** 字段名称(可选),当不传入字段ID时将根据名称查询需要更新的字段,当传入字段ID时将把当前名称设置给ID对应的字段 */ name?: string; /** 字段属性(可选) */ property?: FieldProperty; /** 字段描述(可选) */ desc?: string; } export interface GetFieldValuesOptions { /** 要加载的recordId */ recordIds?: RecordId[]; /** 分片加载数据量 */ pageSize?: number; /** 游标 */ cursor?: string; /** (可选)视图ID */ viewId?: ViewId; } export interface PagedFieldValues { /** 字段值列表 */ fieldValues: Array<{ /** 行记录ID */ recordId: string; /** 字段值 */ value: Cell | null; }>; /** 是否还有其他字段值尚未加载 */ hasMore: boolean; /** 下一次分页加载的游标 */ cursor?: string; /** 总字段数 */ total?: number; /** 单元格值列表 */ cellValues?: Array | null>; } export interface ISelectFieldOption { /** 选项ID */ id: string; /** 选项名称 */ name: string; /** 选项颜色(可选) */ color?: string; } export interface IOptionConfig { /** 选项名称 */ name?: string; } export type ViewType = 'Grid' | 'Kanban' | 'Gallery' | 'Gatt' | 'Calendar' | 'Form'; export interface ViewToInsert { /** 视图名称 */ name: string; /** 视图类型 */ type: ViewType; /** 视图描述 */ desc?: string; } export interface ViewToUpdate { /** 视图名称 */ name?: string; /** 视图描述 */ desc?: string; } /** * 填色规则类型 */ export declare enum FillColorType { /** 单元格填色 */ Cell = "cell", /** 行填色 */ Row = "row", /** 列填色 */ Column = "column", /** 行头填色 */ PreRow = "preRow" } /** * 填色颜色代码类型 * 对应系统预定义的颜色索引,如 '0', '1', '2' 等 */ export type FillColorCode = string; /** * 填色规则信息 */ export interface IFillColorRule { /** 规则ID,用于唯一标识规则 */ id: string; /** 填色类型 */ type: FillColorType; /** 应用填色的字段ID */ fieldId: FieldId; /** 填色配置 */ format: { /** 颜色代码,对应系统预定义的颜色索引(如 '0', '1', '2' 等) */ color: FillColorCode; }; /** 筛选条件(列填色时为空) */ condition?: FilterInfoCondition; } /** * 填色规则列表信息 */ export interface IFillColorInfo { /** 填色规则列表 */ rules: IFillColorRule[]; } /** * 新增填色规则参数 */ export interface IAddFillColorRuleParams { /** 填色类型 */ type: FillColorType; /** 应用填色的字段ID */ fieldId: FieldId; /** 填色配R置 */ format: { /** 颜色代码,对应系统预定义的颜色索引(如 '0', '1', '2' 等) */ color: FillColorCode; }; /** 筛选条件(列填色时可选) */ condition?: FilterInfoCondition; } /** * 更新填色规则参数 */ export interface IUpdateFillColorRuleParams { /** 规则ID */ ruleId: string; /** 填色类型(可选) */ type?: FillColorType; /** 应用填色的字段ID(可选) */ fieldId?: FieldId; /** 填色配置(可选) */ format?: { /** 颜色代码,对应系统预定义的颜色索引(如 '0', '1', '2' 等) */ color?: FillColorCode; }; /** 筛选条件(可选) */ condition?: FilterInfoCondition; } export declare enum FilterDuration { /** 今天 */ Today = "Today", /** 明天 */ Tomorrow = "Tomorrow", /** 昨天 */ Yesterday = "Yesterday", /** 过去7天 */ TheLastWeek = "TheLastWeek", /** 未来7天 */ TheNextWeek = "TheNextWeek", /** 过去30天 */ TheLastMonth = "TheLastMonth", /** 未来30天 */ TheNextMonth = "TheNextMonth", /** 本周 */ CurrentWeek = "CurrentWeek", /** 上周 */ LastWeek = "LastWeek", /** 本月 */ CurrentMonth = "CurrentMonth", /** 上个月 */ LastMonth = "LastMonth" } export declare enum FilterConjunction { And = "and", Or = "or" } export declare enum FilterOperator { /** 等于 */ Is = "equal", /** 不等于 */ IsNot = "notEqual", /** 包含 */ Contains = "contain", /** 不包含 */ DoesNotContain = "notContain", /** 为空 */ IsEmpty = "empty", /** 不为空 */ IsNotEmpty = "notEmpty", /** 大于 */ IsGreater = "greater", /** 大于或等于 */ IsGreaterEqual = "greaterEqual", /** 小于 */ IsLess = "less", /** 小于或等于 */ IsLessEqual = "lessEqual" } type IFilterDateTimeValue = number | FilterDuration | null; type IFilterConditionValue = null | boolean | number | string | string[] | IFilterDateTimeValue; interface IFilterCondition { fieldId: FieldId; operator: FilterOperator; value: IFilterConditionValue; conditionId: string; } export interface IFilterInfo { conjunction: FilterConjunction; conditions: IFilterCondition[]; } interface IFilterBaseCondition { fieldId: FieldId; conditionId?: string; } export interface IFilterAttachmentCondition extends IFilterBaseCondition { fieldType?: 'Attachment'; value?: null; operator: FilterOperator.IsEmpty | FilterOperator.IsNotEmpty; } export interface IFilterCheckboxCondition extends IFilterBaseCondition { value: boolean; operator: FilterOperator.Is; fieldType?: 'Checkbox'; } export interface IFilterAutoNumberCondition extends IFilterBaseCondition { value: number; operator: FilterOperator.Is | FilterOperator.IsNot | FilterOperator.IsGreater | FilterOperator.IsGreaterEqual | FilterOperator.IsLess | FilterOperator.IsLessEqual | FilterOperator.IsEmpty | FilterOperator.IsNotEmpty; fieldType?: 'AutoNumber'; } export interface IFilterDateTimeCondition extends IFilterBaseCondition { value: IFilterDateTimeValue; /** IsGreater:晚于; isLess:早于 */ operator: FilterOperator.Is | FilterOperator.IsGreater | FilterOperator.IsLess | FilterOperator.IsEmpty | FilterOperator.IsNotEmpty; fieldType?: 'DateTime'; } export interface IFilterCreatedTimeCondition extends IFilterBaseCondition { value: IFilterDateTimeValue; /** IsGreater:晚于; isLess:早于 */ operator: FilterOperator.Is | FilterOperator.IsGreater | FilterOperator.IsLess | FilterOperator.IsEmpty | FilterOperator.IsNotEmpty; fieldType?: 'CreatedTime'; } export interface IFilterModifiedTimeCondition extends IFilterBaseCondition { value: IFilterDateTimeValue; /** IsGreater:晚于; isLess:早于 */ operator: FilterOperator.Is | FilterOperator.IsGreater | FilterOperator.IsLess | FilterOperator.IsEmpty | FilterOperator.IsNotEmpty; fieldType?: 'ModifiedTime'; } export interface IFilterMultipleSelectCondition extends IFilterBaseCondition { value: string | string[]; operator: FilterOperator.Is | FilterOperator.IsNot | FilterOperator.Contains | FilterOperator.DoesNotContain | FilterOperator.IsEmpty | FilterOperator.IsNotEmpty; fieldType?: 'MultipleSelect'; } export interface IFilterSingleSelectCondition extends IFilterBaseCondition { value: string | string[]; operator: FilterOperator.Is | FilterOperator.IsNot | FilterOperator.Contains | FilterOperator.DoesNotContain | FilterOperator.IsEmpty | FilterOperator.IsNotEmpty; fieldType?: 'SingleSelect'; } export interface IFilterPhoneCondition extends IFilterBaseCondition { value: string | null; operator: FilterOperator.Is | FilterOperator.IsNot | FilterOperator.Contains | FilterOperator.DoesNotContain | FilterOperator.IsEmpty | FilterOperator.IsNotEmpty; fieldType?: 'Phone'; } export interface IFilterTextCondition extends IFilterBaseCondition { value: string | null; operator: FilterOperator.Is | FilterOperator.IsNot | FilterOperator.Contains | FilterOperator.DoesNotContain | FilterOperator.IsEmpty | FilterOperator.IsNotEmpty; fieldType?: 'Text'; } export interface IFilterNumberCondition extends IFilterBaseCondition { value: number | null; operator: FilterOperator.Is | FilterOperator.IsNot | FilterOperator.IsGreater | FilterOperator.IsGreaterEqual | FilterOperator.IsLess | FilterOperator.IsLessEqual | FilterOperator.IsEmpty | FilterOperator.IsNotEmpty; fieldType?: 'Number'; } export interface IFilterUrlCondition extends IFilterBaseCondition { value: string | null; operator: FilterOperator.Is | FilterOperator.IsNot | FilterOperator.Contains | FilterOperator.DoesNotContain | FilterOperator.IsEmpty | FilterOperator.IsNotEmpty; fieldType?: 'Url'; } export interface IFilterCurrencyCondition extends IFilterBaseCondition { value: number | null; operator: FilterOperator.Is | FilterOperator.IsNot | FilterOperator.IsGreater | FilterOperator.IsGreaterEqual | FilterOperator.IsLess | FilterOperator.IsLessEqual | FilterOperator.IsEmpty | FilterOperator.IsNotEmpty; fieldType?: 'Currency'; } export interface IFilterBarcodeCondition extends IFilterBaseCondition { value: string | null; operator: FilterOperator.Is | FilterOperator.IsNot | FilterOperator.Contains | FilterOperator.DoesNotContain | FilterOperator.IsEmpty | FilterOperator.IsNotEmpty; fieldType?: 'Barcode'; } export interface IFilterProgressCondition extends IFilterBaseCondition { value: number | null; operator: FilterOperator.Is | FilterOperator.IsNot | FilterOperator.IsGreater | FilterOperator.IsGreaterEqual | FilterOperator.IsLess | FilterOperator.IsLessEqual | FilterOperator.IsEmpty | FilterOperator.IsNotEmpty; fieldType?: 'Progress'; } export interface IFilterEmailCondition extends IFilterBaseCondition { value: string | null; operator: FilterOperator.Is | FilterOperator.IsNot | FilterOperator.Contains | FilterOperator.DoesNotContain | FilterOperator.IsEmpty | FilterOperator.IsNotEmpty; fieldType?: 'Email'; } export interface IFilterRatingCondition extends IFilterBaseCondition { value: number | null; operator: FilterOperator.Is | FilterOperator.IsNot | FilterOperator.IsGreater | FilterOperator.IsGreaterEqual | FilterOperator.IsLess | FilterOperator.IsLessEqual | FilterOperator.IsEmpty | FilterOperator.IsNotEmpty; fieldType?: 'Rating'; } export type FilterInfoCondition = IFilterAttachmentCondition | IFilterCheckboxCondition | IFilterAutoNumberCondition | IFilterDateTimeCondition | IFilterCreatedTimeCondition | IFilterModifiedTimeCondition | IFilterMultipleSelectCondition | IFilterSingleSelectCondition | IFilterPhoneCondition | IFilterTextCondition | IFilterNumberCondition | IFilterUrlCondition | IFilterCurrencyCondition | IFilterBarcodeCondition | IFilterProgressCondition | IFilterEmailCondition | IFilterRatingCondition; export type IAddFilterConditionParams = FilterInfoCondition | FilterInfoCondition[]; export type IUpdateFilterConditionParams = FilterInfoCondition | FilterInfoCondition[]; export type FieldWidths = Record; export interface IGridViewMeta { id: string; name: string; type: 'Grid'; property: { hierarchyConfig: { fieldId: FieldId | undefined; }; filterInfo: IFilterInfo | null; }; } export interface RecordToInsert { /** * 字段值,key为fieldId,value为对应的值。 */ fields: { [fieldId: FieldId]: NonNullable; }; } export interface GetRecordsOptions { /** (可选)指定要加载的记录ID列表 */ recordIds?: RecordId[]; /** (可选)指定要加载的字段ID列表 */ fieldIds?: FieldId[]; /** (可选)指定每次分页加载记录量(默认为100条) */ pageSize?: number; /** (可选)用于分页的游标,当从头开始查询时可不传此项 */ cursor?: string; /** (可选)指定要加载记录的视图来源 */ viewId?: ViewId; } export interface GetRecordsResult { hasMore: boolean; cursor?: string; total: number; records: SheetRecord[]; } export interface RecordToUpdate { id: RecordId; /** * 字段值,key为fieldId,value为对应的值。 */ fields: { [fieldId: FieldId]: Cell | null; }; } export interface UserCellValue { /** 用户userId */ userId?: string; /** 用户unionId */ unionId?: string; /** 员工工号 */ jobNumber?: string; /** 外部联系人ID */ extContactUserId?: string; /** 用户名 */ name?: string; } export type UsersCellValue = UserCellValue[]; export interface LinkValue { /** 链接文本 */ text?: string; /** 链接地址 */ link: string; } export interface SingleSelectValue { /** 选项ID */ id: string; /** 选项名 */ name: string; } export type MultipleSelectValue = SingleSelectValue[]; export type AttachmentValue = Array<{ /** 文件MIME 类型 */ type: string; /** 文件名 */ filename: string; /** 附件URL */ url: string; /** 文件大小(字节) */ size?: number; /** 文件资源ID(可选) */ resourceId?: string; /** 是否是钉钉文档链接 */ isLink?: boolean; }>; export interface IOpenFile { /** 文件名 */ name: string; /** 文件类型 */ type: string; /** 文件大小(字节) */ size: number; /** 文件内容,可以是base64字符串或ArrayBuffer */ content: string | ArrayBuffer; } export interface IHostApiSelectRecordIdListOptions { /** 数据表ID */ sheetId: string; /** 视图ID */ viewId?: string; /** 初始选中的记录ID列表 */ selectedRecordIds?: string[]; /** 是否允许多选 */ allowMultiSelect?: boolean; } export interface IHostApiSelectRecordIdListResult { /** 选中的记录ID列表 */ recordIds: string[]; } export type DateCellValue = number; export interface AssociationsValue { /** 关联的记录ID列表 */ linkedRecordIds: string[]; } export interface GroupCellValue { /** 群会话ID */ openConversationId: string; /** 群会话名称 */ name?: string; } export type GroupsCellValue = GroupCellValue[]; export interface DepartmentCellValue { /** 部门ID */ deptId: string; /** 部门名称 */ name?: string; } export type PhoneValue = string; export interface GeoLocationValue { /** address */ address: string; /** 简短地址 */ name: string; /** 完整地址 */ fullAddress: string; /** 经纬度 */ location: [number, number]; } export interface RichTextValue { /** markdown格式的富文本 */ markdown: string; } type CellValue = string | boolean | number | SingleSelectValue | MultipleSelectValue | PhoneValue | UsersCellValue | AssociationsValue | AttachmentValue | DepartmentCellValue[] | DateCellValue | RichTextValue | LinkValue | GroupsCellValue | UserCellValue | GeoLocationValue | null; export type FormulaValue = CellValue | CellValue[]; export interface Base { /** 提供页面的UI交互能力 */ ui: UI; /** * getPermission * 查询当前用户的权限 * * @param {IGetPermission} params 多维表权限类型 * @returns {Promise} 是否拥有此权限 */ getPermissionAsync: (params: IGetPermission) => Promise; /** * getSelection * 获取当前多维表激活区域的信息 * * @returns {Selection} 数据表激活区域的信息 */ getSelection: () => Selection; /** * getActiveSheet * 获取当前选中的数据表对象 * * @returns {Sheet | null} 数据表对象,若当前未选中任何数据表,则返回null */ getActiveSheet: () => Sheet | null; /** * getSheet * 根据数据表ID或数据表名称获取指定数据表 * * @param {string} idOrName 数据表ID或数据表名称 * @returns {Sheet | null} 数据表对象,若当前未找到符合条件的数据表,则返回null */ getSheet: (idOrName: string) => Sheet | null; /** * getSheets * 获取当前用户可见的所有数据表 * * @returns {Sheet[]} 当前用户可见的所有数据表对象 */ getSheets: () => Sheet[]; /** * insertSheet * 插入一张数据表 * * @param {string} name 数据表名称 * @param {FieldToInsert} fields 数据表携带的字段配置,不传时会携带默认空数据表模版的字段(标题/单选/人员/日期/附件) * @returns {Sheet} 插入的数据表对象 */ insertSheet: (name: string, fields?: FieldToInsert[]) => Sheet; /** * updateSheet * 根据数据表ID更新指定数据表 * * @param {string} id 指定数据表ID * @param {SheetToUpdate} sheet 需要更新的数据表配置 * @returns {Sheet} 更新的数据表对象 */ updateSheet: (id: string, sheet: SheetToUpdate) => Sheet; /** * deleteSheet * 根据数据表ID或数据表名称删除指定数据表 * * @param {string} idOrName 数据表ID或数据表名称 * @returns {Base} Base对象本身 */ deleteSheet: (idOrName: string) => Base; /** * getDentryUuid * 获取文档的DentryUuid * * @returns {string} 文档的DentryUuid */ getDentryUuid: () => string; /** * isFieldOfType * 判断字段是否为指定字段类型 * * @param {Field} field 需要判断的字段 * @param {FieldType} type 字段类型 * @returns {boolean} 是否是指定字段类型 */ isFieldOfType: (field: Field, type: T) => field is Field; } export interface Sheet { /** * getId * 获取当前数据表ID * * @returns {string} 数据表ID */ getId: () => string; /** * getName * 获取当前数据表名称 * * @returns {string} 数据表名称 */ getName: () => string; /** * setName * 设置当前数据表名称 * * @param {string} name 数据表名称 * @returns {Sheet} Sheet对象本身 */ setName: (name: string) => Sheet; /** * getDesc * 获取数据表描述 * * @returns {string | undefined} 数据表描述文案,没有描述时默认返回undefined */ getDesc: () => string | undefined; /** * setDesc * 设置当前数据表描述 * * @param {string} desc 数据表描述文案 * @returns {Sheet} Sheet对象本身 */ setDesc: (desc: string) => Sheet; /** * isFieldExist * 判断当前数据表中指定ID的字段是否存在 * * @param {FieldId} fieldId 字段ID * @returns {boolean} 是否存在 */ isFieldExist: (fieldId: FieldId) => boolean; /** * getFields * 获取当前数据表中所有字段列表 * * @returns {Field[]} 字段列表 */ getFields: () => Field[]; /** * getFieldsByType * 获取当前数据表中所有指定类型的字段列表 * * @param {T = FieldType} type 指定字段类型 * @returns {Array>} 指定类型的字段列表 */ getFieldsByType: (type: T) => Array>; /** * getField * 根据字段ID或字段名称获取指定字段 * * @param {string} idOrName 字段ID或字段名称 * @returns {Field | null} 字段对象,若当前未找到符合条件的数据表,则返回null */ getField: (idOrName: string) => T | null; /** * insertField * 插入字段 * * @param {Field} fieldConfig 字段配置 * @returns {Field} 插入的字段对象 */ insertField: (fieldConfig: FieldToInsert) => Field; /** * updateField * 根据字段ID或字段名称更新指定字段配置。如果要修改字段类型,请调用「updateFieldAsync」 * * @param {FieldToUpdateWithoutType} field 字段配置 * @returns {FieldInterface} 更新的字段对象 */ updateField: (field: FieldToUpdateWithoutType) => Field; /** * updateFieldAsync * 根据字段ID更新指定字段配置 * * @param {string} id 字段ID * @param {FieldToUpdate} fieldConfig 字段配置 * @returns {Field} 更新的字段对象 */ updateFieldAsync: (id: string, fieldConfig: FieldToUpdate) => Promise; /** * deleteField * 根据字段ID或字段名称删除指定字段 * * @param idOrName 字段ID或字段名称 * @returns {Sheet} Sheet对象本身 */ deleteField: (idOrName: string) => Sheet; /** * getViews * 获取当前数据表的所有视图列表 * * @returns {View[]} 视图列表 */ getViews: () => View[]; /** * getViewById * 根据视图ID或视图名称获取指定视图 * * @param {string} idOrName 指定视图的ID或名称 * @returns {View} 指定的视图对象,未找到视图时返回null */ getView: (idOrName: string) => View | null; /** * getActiveView * 获取当前数据表激活的视图 * * @returns {View} 激活的视图,未选中当前数据表时返回null */ getActiveView: () => View | null; /** * insertView * 插入视图 * * @param {ViewToInsert} view 视图配置 * @returns {View} 插入的视图对象 */ insertView: (view: ViewToInsert) => View; /** * updateView * 根据视图ID更新指定视图 * * @param {string} id 视图ID * @param {ViewToUpdate} view 视图配置 * @returns {View} 更新的视图对象 */ updateView: (id: string, view: ViewToUpdate) => View; /** * deleteView * 根据视图ID或视图名称删除指定视图 * * @param {string} idOrName 视图ID或视图名称 * @returns {Sheet} Sheet对象本身 */ deleteView: (idOrName: string) => Sheet; /** * 分片加载数据表记录 * @return {GetRecordsResult} 分片加载结果 */ getRecordsAsync: (options: GetRecordsOptions) => Promise; /** * getRecordAsync * 获取指定ID的行记录 * * @param {RecordId} recordId 指定的行记录ID * @returns {Promise} 指定ID的行记录,未找到记录时返回null */ getRecordAsync: (recordId: RecordId) => Promise; /** * 插入新行记录 * @param {RecordToInsert[]} records 需要插入的记录列表 * @return {Promise} 插入的行记录列表 */ insertRecordsAsync: (records: RecordToInsert[]) => Promise; /** * updateRecordsAsync * 批量更新行记录(一次最多更新100条记录) * * @param {RecordToUpdate[]} records 要更新的行记录内容列表 * @returns {Promise} 更新的行数据对象列表 */ updateRecordsAsync: (records: RecordToUpdate[]) => Promise; /** * deleteRecordsAsync * 批量删除行记录 * * @param {RecordId[]} recordIds 指定的行记录ID或ID列表 */ deleteRecordsAsync: (recordIds: RecordId | RecordId[]) => Promise; } export interface Field { /** * isPrimary * 是否是主键字段 * * @returns {boolean} 是否是主键字段 */ isPrimary: () => boolean; /** * isValid * 检查当前字段对象是否有效 * * @returns 是否有效 */ isValid: () => boolean; /** * getType * 获取当前字段类型 * * @returns {T extends FieldType} 字段类型 */ getType: () => T; /** * getSheetId * 获取当前字段所属的数据表ID * * @returns {SheetId} 数据表ID */ getSheetId: () => SheetId; /** * getId * 获取当前字段ID * * @returns {FieldId} 字段ID */ getId: () => FieldId; /** * getName * 获取字段名称 * * @returns {string} 字段名称 */ getName: () => string; /** * setName * 设置字段名称 * 【注意】● 不能修改从其他数据源同步的字段名称 ● 字段名称在同一数据表中必须唯一 ● 需要有字段更新权限 * * @param {string} name 新的字段名称 * @returns {Field} 字段对象本身,支持链式调用 */ setName: (name: string) => Field; /** * getProperty * 获取字段配置属性 * * @returns {FieldProperty | undefined} 字段属性 */ getProperty: () => FieldProperty | undefined; /** * setPropertyAsync * 设置字段配置属性 * * @param {FieldProperty} property 字段属性 * @returns {Field} 字段对象本身,支持链式调用 */ setPropertyAsync: (property: FieldProperty) => Promise>; /** * @deprecated 当前API已废弃,请使用getFieldValuesAsync * getFieldValues * 获取整列字段值 * * @param {string} viewId 可选项,支持传入某个视图ID,根据视图获取字段值 * @returns {Promise>} 字段值 */ getFieldValues: (viewId?: string) => Promise | null>>; /** * getFieldValuesAsync * 分页获取整列字段值 * * @param {GetFieldValuesOptions} options 可选项,分页获取参数 * @returns {Promise | null>} 分页获取结果 */ getFieldValuesAsync: (options?: GetFieldValuesOptions) => Promise | null>; } export interface TextField extends Field<'text'> { /** * getValueAsync * 获取指定记录在该文本字段的值 * * @param {RecordId} recordId 行记录ID * @returns {string | null} 文本值,当字段值为空时返回null */ getValueAsync: (recordId: RecordId) => Promise; /** * setValueAsync * 设置指定记录在该文本字段的值 * * @param {RecordId} recordId 行记录ID * @param {string} text 要设置的文本值 * @returns {Promise} 是否设置成功 */ setValueAsync: (recordId: RecordId, text: string) => Promise; } export interface NumberField extends Field<'number'> { /** * getValueAsync * 获取指定行记录在该数字字段的值 * * @param {RecordId} recordId 行记录ID * @returns {number | null} 数字值,当字段值为空时返回null */ getValueAsync: (recordId: RecordId) => Promise; /** * setValueAsync * 设置指定行记录在该数字字段的值 * * @param {RecordId} recordId 行记录ID * @param {number} num 要设置的数字值 * @returns {Promise} 是否设置成功 */ setValueAsync: (recordId: RecordId, num: number) => Promise; /** * setFormatter * 设置数字字段的格式 * * @param {NumericalFormatter} formatter 数字格式类型 * @returns {string} 字段ID */ setFormatter: (formatter: NumericalFormatter) => string; /** * getFormatter * 获取数字字段的格式 * * @returns {NumericalFormatter} 数字格式类型 */ getFormatter: () => NumericalFormatter; } export interface SingleSelectField extends Field<'singleSelect'> { /** * addOption * 新增字段选项 * * @param {string} name 选项名 * @param {number} color 选项颜色 * @returns {string} 字段ID */ addOption: (name: string, color?: number) => string; /** * addOptions * 批量新增字段选项 * * @param {Array<{ name: string; color?: number }>} optionList 选项列表 * @returns {string} 字段ID */ addOptions: (optionList: Array<{ name: string; color?: number; }>) => string; /** * getOptions * 获取字段选项列表 * * @returns {ISelectFieldOption} 选项列表 */ getOptions: () => ISelectFieldOption[]; /** * deleteOptionAsync * 删除指定选项 * * @param {string} idOrName 选项ID或选项名称 * @returns {Promise} 字段ID */ deleteOptionAsync: (idOrName: string) => Promise; /** * setOptionAsync * 更新选项配置 * * @param {string} nameOrId 要更新的选项名或选项ID * @param {IOptionConfig} config 更新后的选项配置 * @returns {Promise} 字段ID */ setOptionAsync: (nameOrId: string, config: IOptionConfig) => Promise; /** * getValueAsync * 获取指定行记录单选字段的值 * * @param {RecordId} recordId 行记录ID * @returns {SingleSelectValue} 选项ID,当字段值为空时返回null */ getValueAsync: (recordId: RecordId) => Promise; /** * setValueAsync * 设置指定行记录单选字段的值 * * @param {RecordId} recordId 行记录ID * @param {string} optionId 要设置的选项ID * @returns {Promise} 是否设置成功 */ setValueAsync: (recordId: RecordId, optionId: string) => Promise; } export interface MultipleSelectField extends Field<'multipleSelect'> { /** * addOption * 新增字段选项 * * @param {string} name 选项名 * @param {number} color 选项颜色 * @returns {IFieldInfo} 字段ID */ addOption: (name: string, color?: number) => string; /** * addOptions * 批量新增字段选项 * * @param {Array<{ name: string; color?: number }>} optionList 选项列表 * @returns {IFieldInfo} 字段ID */ addOptions: (optionList: Array<{ name: string; color?: number; }>) => string; /** * getOptions * 获取字段选项列表 * * @returns {ISelectFieldOption} 选项列表 */ getOptions: () => ISelectFieldOption[]; /** * deleteOptionAsync * 删除指定选项 * * @param {string} idOrName 选项ID或选项名称 * @returns {Promise} 字段ID */ deleteOptionAsync: (idOrName: string) => Promise; /** * setOptionAsync * 更新选项配置 * * @param {string} nameOrId 要更新的选项名或选项ID * @param {IOptionConfig} config 更新后的选项配置 * @returns {Promise} 字段ID */ setOptionAsync: (nameOrId: string, config: IOptionConfig) => Promise; /** * getValueAsync * 获取指定行记录多选字段的值 * * @param {RecordId} recordId 行记录ID * @returns {MultipleSelectValue} 选中的选项数组,包含id和name属性,如果未选择则返回null */ getValueAsync: (recordId: RecordId) => Promise; /** * setValueAsync * 设置指定行记录多选字段的值 * * @param {RecordId} recordId 行记录ID * @param {string | string[]} optionId 要设置的选项ID数组 * @returns {Promise} 是否设置成功 */ setValueAsync: (recordId: RecordId, optionId: string | string[]) => Promise; } export interface UrlField extends Field<'url'> { /** * getValueAsync * 获取指定行记录该链接字段的值 * * @param {RecordId} recordId 行记录ID * @returns {string | null} URL对象,包含text(显示文本)和link(链接地址)属性,如果记录不存在或值为空则返回null */ getValueAsync: (recordId: RecordId) => Promise; /** * setValueAsync * 设置指定行记录该链接字段的值 * * @param {RecordId} recordId 行记录ID * @param {LinkValue | string} url URL值,可以是字符串(直接作为链接地址)或包含link和可选text属性的对象 * @returns {Promise} 是否设置成功 */ setValueAsync: (recordId: RecordId, url: LinkValue | string) => Promise; } export interface DateField extends Field<'date'> { /** * getValueAsync * 获取指定行记录的字段值 * * @param {RecordId} recordId 行记录ID * @returns {DateCellValue | null} 以毫秒为单位的 Unix 时间戳, 当字段值为空时返回null */ getValueAsync: (recordId: RecordId) => Promise; /** * setValueAsync * 设置指定行记录字段值 * * @param {RecordId} recordId 行记录ID * @param {DateCellValue} timestamp 以毫秒为单位的 Unix 时间戳 * @returns {Promise} 是否设置成功 */ setValueAsync: (recordId: RecordId, timestamp: DateCellValue) => Promise; /** * getDateFormat * 获取字段的时间格式 * * @returns {DateFormatter} 时间字段格式 */ getDateFormat: () => DateFormatter; /** * setDateFormat * 设置字段的时间格式 * * @param {DateFormatter} format 时间字段格式 * @returns {string} 当前字段ID */ setDateFormat: (format: DateFormatter) => string; } export interface CurrencyField extends Field<'currency'> { /** * getValueAsync * 获取指定行记录的货币字段值 * * @param {RecordId} recordId 行记录ID * @returns {number | null} 货币值,当字段值为空时返回null */ getValueAsync: (recordId: RecordId) => Promise; /** * setValueAsync * 设置指定行记录的货币字段值 * * @param {RecordId} recordId 行记录ID * @param {number | string} num 货币值 * @returns {Promise} 是否设置成功 */ setValueAsync: (recordId: RecordId, num: number | string) => Promise; /** * setDecimalDigits * 设置货币精度 * * @param {number} decimalDigits 货币精度 * @returns {string} recordId 行记录ID */ setDecimalDigits: (decimalDigits: number) => string; /** * getDecimalDigits * 获取货币精度 * * @returns {number} 货币精度 */ getDecimalDigits: () => number; /** * setCurrencyType * 设置币种 * * @param {CurrencyType} currencyType 币种 * @returns {string} recordId 行记录ID */ setCurrencyType: (currencyType: CurrencyType) => string; /** * getCurrencyType * 获取币种 * * @returns {CurrencyType} 币种 */ getCurrencyType: () => CurrencyType; } export interface AttachmentField extends Field<'attachment'> { /** * getValueAsync * 获取指定行记录的字段值 * * @param {RecordId} recordId 行记录ID * @returns {AttachmentValue[] | null} 附件值,当字段值为空时返回null */ getValueAsync: (recordId: RecordId) => Promise; /** * setValueAsync * 设置指定行记录的字段值 * * @param {RecordId} recordId 行记录ID * @param {ISerializedFile | ISerializedFile[]} attachment 附件值 * @returns {string} recordId 行记录ID */ setValueAsync: (recordId: RecordId, attachment: IOpenFile | IOpenFile[] | AttachmentValue | AttachmentValue[]) => Promise; /** * getAttachmentUrls * 获取指定记录在该附件字段中所有附件的URL列表 * * @param {RecordId} recordId 行记录ID * @returns {string[]} 附件URL数组 */ getAttachmentUrls: (recordId: RecordId) => Promise; /** * getAttachmentDetails * 获取指定记录在该附件字段中所有附件的详细信息(下载 URL、类型、文件名) * * @param {RecordId} recordId 行记录ID * @returns {Promise>} 附件详细信息列表 */ getAttachmentDetails: (recordId: RecordId) => Promise>; } export interface BarcodeField extends Field<'barcode'> { /** * getValueAsync * 获取指定行记录该条码字段的值 * * @param {RecordId} recordId 行记录ID * @returns {string | null} 条码值,当字段值为空时返回null */ getValueAsync: (recordId: RecordId) => Promise; /** * setValueAsync * 设置指定行记录该条码字段的值 * * @param {RecordId} recordId 行记录ID * @param {string} text 条码值 * @returns {Promise} 是否设置成功 */ setValueAsync: (recordId: RecordId, text: string) => Promise; } export interface CheckboxField extends Field<'checkbox'> { /** * getValueAsync * 获取指定行记录该复选框字段的值 * * @param {RecordId} recordId 行记录ID * @returns {boolean | null} 复选框值,当字段值为空时返回null */ getValueAsync: (recordId: RecordId) => Promise; /** * setValueAsync * 设置指定行记录该复选框字段的值 * * @param {RecordId} recordId 行记录ID * @param {boolean} val 复选框值 * @returns {Promise} 是否设置成功 */ setValueAsync: (recordId: RecordId, val: boolean) => Promise; } export interface CreatedTimeField extends Field<'createdTime'> { /** * getValueAsync * 获取指定行记录该创建时间字段的值 * * @param {RecordId} recordId 行记录ID * @returns {Date | null} 创建时间值,当字段值为空时返回null */ getValueAsync: (recordId: RecordId) => Promise; /** * getDateFormat * 获取创建时间字段的日期格式 * * @returns {DateFormatter} 日期格式 */ getDateFormat: () => DateFormatter; /** * setDateFormat * 设置创建时间字段的日期格式 * * @param {DateFormatter} format 日期格式 * @returns {string} 字段ID */ setDateFormat: (format: DateFormatter) => string; } export interface LastModifiedTimeField extends Field<'lastModifiedTime'> { /** * getValueAsync * 获取指定行记录该更新时间字段的值 * * @param {RecordId} recordId 行记录ID * @returns {Date | null} 更新时间值,当字段值为空时返回null */ getValueAsync: (recordId: RecordId) => Promise; /** * getDateFormat * 获取更新时间字段的日期格式 * * @returns {DateFormatter} 日期格式 */ getDateFormat: () => DateFormatter; /** * setDateFormat * 设置更新时间字段的日期格式 * * @param {DateFormatter} format 日期格式 * @returns {string} 字段ID */ setDateFormat: (format: DateFormatter) => string; } export interface PhoneField extends Field<'telephone'> { /** * getValueAsync * 获取指定行记录该电话字段的值 * * @param {RecordId} recordId 行记录ID * @returns {string | null} 电话值,当字段值为空时返回null */ getValueAsync: (recordId: RecordId) => Promise; /** * setValueAsync * 设置指定行记录该电话字段的值 * * @param {RecordId} recordId 行记录ID * @param {string} val 电话值,请确保电话号码为合法号码,否则更新数据将失败 * @returns {Promise} 是否设置成功 */ setValueAsync: (recordId: RecordId, val: string) => Promise; } export interface EmailField extends Field<'email'> { /** * getValueAsync * 获取指定行记录该邮箱字段的值 * * @param {RecordId} recordId 行记录ID * @returns {string | null} 邮箱值,当字段值为空时返回null */ getValueAsync: (recordId: RecordId) => Promise; /** * setValueAsync * 设置指定行记录该邮箱字段的值 * * @param {RecordId} recordId 行记录ID * @param {string} text 邮箱值,请确保邮箱地址为合法邮箱,否则更新数据将失败。 * @returns {Promise} 是否设置成功 */ setValueAsync: (recordId: RecordId, text: string) => Promise; } export interface ProgressField extends Field<'progress'> { /** * getValueAsync * 获取指定行记录该进度字段的值 * * @param {RecordId} recordId 行记录ID * @returns {number | null} 进度值,当字段值为空时返回null */ getValueAsync: (recordId: RecordId) => Promise; /** * setValueAsync * 设置指定行记录下该进度字段的值 * * @param {RecordId} recordId 行记录ID * @param {number} val 进度值 * @returns {Promise} 是否设置成功 */ setValueAsync: (recordId: RecordId, val: number) => Promise; /** * getMin * 获取进度字段的最小值 * * @returns {number} 最小值 */ getMin: () => number; /** * setMin * 设置进度字段的最小值 * * @param {number} val 最小值 * @returns {string} 字段ID */ setMin: (val: number) => string; /** * getMax * 获取进度字段的最大值 * * @returns {number} 最大值 */ getMax: () => number; /** * setMax * 设置进度字段的最大值 * * @param {number} val 最大值 * @returns {string} 字段ID */ setMax: (val: number) => string; /** * getFormatter * 获取进度字段的格式 * * @returns {ProgressFormatter} 进度字段格式 */ getFormatter: () => ProgressFormatter; /** * setFormatter * 设置进度字段的格式 * * @param {ProgressFormatter} formatter 进度字段格式 * @returns {string} 字段ID */ setFormatter: (val: ProgressFormatter) => string; } export interface PrimaryDocField extends Field<'primaryDoc'> { /** * getValueAsync * 获取指定行记录主键文档字段的值 * * @param {RecordId} recordId 行记录ID * @returns {string | null} 文本值,当字段值为空时返回null */ getValueAsync: (recordId: RecordId) => Promise; /** * setValueAsync * 设置指定行记录主键文档字段的值 * * @param {RecordId} recordId 行记录ID * @param {string} text 要设置的文本值 * @returns {Promise} 是否设置成功 */ setValueAsync: (recordId: RecordId, text: string) => Promise; } export interface UnidirectionalLinkField extends Field<'unidirectionalLink'> { /** * getValueAsync * 获取指定行记录该单向关联字段的值 * * @param {RecordId} recordId 行记录ID * @returns {Promise} 关联值对象,如果未设置关联则返回null */ getValueAsync: (recordId: RecordId) => Promise; /** * setValueAsync * 设置指定行记录该单向关联字段的值 * * @param {RecordId} recordId 行记录ID * @param {AssociationsValue} value 关联值对象 * @returns {Promise} 是否设置成功 */ setValueAsync: (recordId: RecordId, value: AssociationsValue) => Promise; /** * setLinkedSheetId * 设置单向关联字段关联的目标数据表ID * * @param {SheetId} linkedSheetId 目标数据表ID * @returns {string} 字段ID */ setLinkedSheetId: (sheetId: SheetId) => string; /** * getLinkedSheetId * 获取单向关联字段关联的目标数据表ID * * @returns {string} 目标数据表ID */ getLinkedSheetId: () => string; /** * setMultiple * 设置是否允许多选 * * @param {boolean} multiple 是否允许多选 * @returns {string} 字段ID */ setMultiple: (multiple: boolean) => string; /** * getMultiple * 获取是否允许多选 * * @returns {boolean} 是否允许多选 */ getMultiple: () => boolean; } export interface BidirectionalLinkField extends Field<'bidirectionalLink'> { /** * getValueAsync * 获取指定行记录该双向关联字段的值 * * @param {RecordId} recordId 行记录ID * @returns {Promise} 关联值对象,如果未设置关联则返回null */ getValueAsync: (recordId: RecordId) => Promise; /** * setValueAsync * 设置指定行记录该双向关联字段的值 * * @param {RecordId} recordId 行记录ID * @param {AssociationsValue} value 关联值对象 * @returns {Promise} 是否设置成功 */ setValueAsync: (recordId: RecordId, value: AssociationsValue) => Promise; /** * setLinkedSheetId * 设置双向关联字段关联的表ID * * @param {SheetId} linkedSheetId 目标数据表ID * @returns {string} 字段ID */ setLinkedSheetId: (linkedSheetId: SheetId) => string; /** * getLinkedSheetId * 获取双向关联字段关联的表ID * * @returns {string} 目标数据表ID */ getLinkedSheetId: () => string; /** * setMultiple * 设置双向关联字段是否允许关联多行数据 * * @param {boolean} multiple 是否允许关联多行数据,true表示可以关联多条记录,false表示只能关联一条记录 * @returns {string} 字段ID */ setMultiple: (multiple: boolean) => string; /** * getMultiple * 获取双向关联字段是否允许关联多行数据 * * @returns {boolean} 是否允许关联多行数据,true表示可以关联多条记录,false表示只能关联一条记录 */ getMultiple: () => boolean; } export interface FormulaField extends Field<'formula'> { /** * getValueAsync * 获取指定行记录该公式字段的计算结果值 * * @param {RecordId} recordId 行记录ID * @returns {Promise} 公式计算结果,可能是单个值或数组,如果没有关联数据则返回null */ getValueAsync: (recordId: RecordId) => Promise; /** * setFormula * 设置公式字段表达式,详情请参考公式字段的官方介绍 * * @param {string} formula 公式字符串 * @returns {string} 字段ID */ setFormula: (formula: string) => string; } export interface LookupField extends Field<'lookup'> { /** * getValueAsync * 获取指定行记录关联引用字段的值 * * @param {RecordId} recordId 行记录ID * @returns {Promise} 查找到的关联字段值,可能是单个值或数组,如果没有关联数据则返回null */ getValueAsync: (recordId: RecordId) => Promise; } export interface FilterUpField extends Field<'filterUp'> { /** * getValueAsync * 获取指定行记录关联查找字段的值 * * @param {RecordId} recordId 行记录ID * @returns {Promise} 可能是单个值或数组,如果没有关联数据则返回null */ getValueAsync: (recordId: RecordId) => Promise; } export interface GeoLocationField extends Field<'geolocation'> { /** * getValueAsync * 获取指定行记录该地理位置字段的值 * * @param {RecordId} recordId 行记录ID * @returns {Promise} 查找到的值,如果没有关联数据则返回null。 */ getValueAsync: (recordId: RecordId) => Promise; } export interface RichTextField extends Field<'richText'> { /** * getValueAsync * 获取指定行记录该富文本字段的值 * * @param {RecordId} recordId 行记录ID * @returns {Promise} 富文本值,包含markdown格式的富文本,当字段值为空时返回null */ getValueAsync: (recordId: RecordId) => Promise; } export interface UserField extends Field<'user'> { /** * getValueAsync * 获取指定行记录该用户字段的值 * * @param {RecordId} recordId 行记录ID * @returns {Promise} 选中的人员,返回用户名和用户unionId */ getValueAsync: (recordId: RecordId) => Promise; /** * setValueAsync * 设置指定行记录该用户字段的值 * * @param {RecordId} recordId 行记录ID * @param {UsersCellValue} value 人员值,支持传入用户的userId或unionId * @returns {Promise} 是否设置成功 */ setValueAsync: (recordId: RecordId, value: UsersCellValue[number] | UsersCellValue) => Promise; } export interface GroupField extends Field<'group'> { /** * getValueAsync * 获取指定行记录该群组字段的值 * * @param {RecordId} recordId 行记录ID * @returns {Promise} 选中的群组,返回群名和群ID */ getValueAsync: (recordId: RecordId) => Promise; /** * setValueAsync * 设置指定行记录群组字段的值 * * @param {RecordId} recordId 行记录ID * @param {GroupsCellValue} value 群组值,支持传入openConversationId * @returns {Promise} 是否设置成功 */ setValueAsync: (recordId: RecordId, value: GroupsCellValue[number] | GroupsCellValue) => Promise; } export interface DepartmentField extends Field<'department'> { /** * getValueAsync * 获取指定行记录该部门字段的值 * * @param {RecordId} recordId 行记录ID * @returns {Promise} 选中的部门,返回部门名和部门ID */ getValueAsync: (recordId: RecordId) => Promise; /** * setValueAsync * 设置指定行记录部门字段的值 * * @param {RecordId} recordId 行记录ID * @param {DepartmentCellValue} value 部门值,支持传入部门ID * @returns {Promise} 是否设置成功 */ setValueAsync: (recordId: RecordId, value: DepartmentCellValue | DepartmentCellValue[]) => Promise; } export interface RatingField extends Field<'rating'> { /** * getValueAsync * 获取指定行记录该评分字段的值 * * @param {RecordId} recordId 行记录ID * @returns {number | null} 评分值,当字段值为空时返回null */ getValueAsync: (recordId: RecordId) => Promise; /** * setValueAsync * 设置指定行记录该评分字段的值 * * @param {RecordId} recordId 行记录ID * @param {number} val 评分值,必须为最小值到最大值之间的整数 * @returns {Promise} 是否设置成功 */ setValueAsync: (recordId: RecordId, val: number) => Promise; /** * getMin * 获取评分字段的最小值 * * @returns {number} 最小值 */ getMin: () => number; /** * getMax * 获取评分字段的最大值 * * @returns {number} 最大值 */ getMax: () => number; /** * setMin * 设置评分字段的最小值 * * @param {number} val 最小值,支持设置为0或1 * @returns {string} 字段ID */ setMin: (val: number) => string; /** * setMax * 设置评分字段的最大值 * * @param {number} val 最大值,支持设置为2~10直接的整数。 * @returns {string} 字段ID */ setMax: (val: number) => string; /** * setIcon * 设置评分字段的图标类型 * * @param {RatingIconType} icon 图标类型 * @returns {string} 字段ID */ setIcon: (icon: RatingIconType) => string; /** * getIcon * 获取评分字段的图标类型 * * @returns {RatingIconType} 图标类型 */ getIcon: () => RatingIconType; } export interface View { /** * getId * 获取视图ID * * @returns {string} 视图ID */ getId: () => string; /** * getName * 获取视图名称 * * @returns {string} 视图名称 */ getName: () => string; /** * getType * 获取视图类型 * * @returns {ViewType | undefined} 视图类型,当检测到不支持插件调用的视图类型时返回undefined */ getType: () => ViewType | undefined; /** * getSheetId * 获取视图所属的数据表ID * * @returns {SheetId} 数据表ID */ getSheetId: () => SheetId; /** * asGridView * 将当前视图转换为表格视图对象 * * @returns {GridView | null} 如果当前视图是表格视图则返回GridView对象,否则返回null */ asGridView: () => GridView | null; } export interface GridView { /** 当前视图所属的数据表ID */ sheetId: SheetId; /** * getName * 获取视图名称 * * @returns {string} 视图名称 */ getName: () => string; /** * getType * 获取视图类型 * * @returns {'Grid'} 视图类型,总是返回 'Grid' */ getType: () => 'Grid'; /** * getMeta * 获取视图元数据 * * @returns {IGridViewMeta} 视图元数据 */ getMeta: () => IGridViewMeta; /** * getVisibleFieldIdList * 获取视图下可见字段的 ID 列表 * * @returns {FieldId[]} 可见字段ID列表 */ getVisibleFieldIdList: () => FieldId[]; /** * showField * 显示字段 * * @param {FieldId | FieldId[]} fieldId 要显示的字段ID,可以是单个字段ID或字段ID数组 * @returns {boolean} 是否操作成功 */ showField: (fieldId: FieldId | FieldId[]) => boolean; /** * hideField * 隐藏字段 * * @param {FieldId | FieldId[]} fieldId 要隐藏的字段ID,可以是单个字段ID或字段ID数组 * @returns {boolean} 是否操作成功 */ hideField: (fieldId: FieldId | FieldId[]) => boolean; /** * getFieldWidth * 获取字段宽度 * * @param {FieldId} fieldId 字段ID * @returns {number} 字段宽度(像素) */ getFieldWidth: (fieldId: FieldId) => number; /** * getFieldWidths * 获取所有字段的宽度 * * @returns {FieldWidths} 字段名到宽度的映射对象 */ getFieldWidths: () => FieldWidths; /** * setFieldWidth * 设置字段宽度 * * @param {FieldId} fieldId 字段ID * @param {number} width 字段宽度(像素),必须在最小宽度和最大宽度之间(最大宽度限制已去除) * @returns {boolean} 是否操作成功 */ setFieldWidth: (fieldId: FieldId, width: number) => boolean; /** * setFieldWidths * 设置所有字段的宽度 * * @param {FieldWidths} fieldWidths 字段名到宽度的映射对象 * @returns {ViewInterface} 自身视图对象 */ setFieldWidths: (fieldWidths: FieldWidths) => GridView; /** * getVisibleRecordIdListAsync * 获取视图下可见记录的 ID 列表 * * @returns {Promise} 可见记录ID数组 */ getVisibleRecordIdListAsync: () => Promise; /** * getFilterInfo * 获取视图的筛选信息 * * @returns {IFilterInfo | null} 筛选信息对象,如果没有筛选条件则返回null */ getFilterInfo: () => IFilterInfo | null; /** * applySetting * 将设置的分组/筛选/排序等视图配置提交,同步给其他用户 * 这个方法会提交所有临时视图的修改(包括筛选、排序、分组等) */ applySetting: () => void; /** * addFilterConditionAsync * 新增筛选条件 * 注意:调用该 API 时,修改会保存到临时视图中,需要调用 applySetting() 来保存到服务器 * * @param {FilterInfoCondition | FilterInfoCondition[]} param 筛选条件参数,可以是单个条件或条件数组 * @returns {Promise} 是否操作成功 */ addFilterConditionAsync: (param: IAddFilterConditionParams) => Promise; /** * deleteFilterConditionAsync * 删除筛选条件 * 注意:调用该 API 时,修改会保存到临时视图中,需要调用 applySetting() 来保存到服务器 * * @param {string} conditionId 筛选条件ID(格式:fieldId_index) * @returns {Promise} 是否操作成功 */ deleteFilterConditionAsync: (conditionId: string) => Promise; /** * updateFilterConditionAsync * 更新筛选条件 * 注意:调用该 API 时,修改会保存到临时视图中,需要调用 applySetting() 来保存到服务器 * * @param {IUpdateFilterConditionParams} param 筛选条件参数,可以是单个条件或条件数组 * @returns {Promise} 是否操作成功 */ updateFilterConditionAsync: (param: IUpdateFilterConditionParams) => Promise; /** * setFilterConjunction * 设置筛选条件之间的关系 * 注意:调用该 API 时,修改会保存到临时视图中,需要调用 applySetting() 来保存到服务器 * * @param {FilterConjunction} conjunction 筛选条件之间的关系 * @returns {boolean} 是否操作成功 */ setFilterConjunction: (conjunction: FilterConjunction) => boolean; /** * getFillColorInfo * 获取当前的填色规则信息 * * @returns {IFillColorInfo | null} 填色规则信息对象,如果没有填色规则则返回 null */ getFillColorInfo: () => IFillColorInfo | null; /** * addFillColorRuleAsync * 新增填色规则 * 注意:调用该 API 时,修改会保存到临时视图中,需要调用 applySetting() 来保存到服务器 * * @param {IAddFillColorRuleParams} param 填色规则参数 * @returns {Promise} 是否操作成功 */ addFillColorRuleAsync: (params: IAddFillColorRuleParams) => Promise; /** * deleteFillColorRuleAsync * 删除填色规则 * 注意:调用该 API 时,修改会保存到临时视图中,需要调用 applySetting() 来保存到服务器 * * @param {string} ruleId 填色规则ID * @returns {Promise} 是否操作成功 */ deleteFillColorRuleAsync: (ruleId: string) => Promise; /** * updateFillColorRuleAsync * 更新填色规则 * 注意:调用该 API 时,修改会保存到临时视图中,需要调用 applySetting() 来保存到服务器 * * @param {IUpdateFillColorRuleParams} param 填色规则参数 * @returns {Promise} 是否操作成功 */ updateFillColorRuleAsync: (params: IUpdateFillColorRuleParams) => Promise; } export interface SheetRecord { /** * getSheetId * 获取记录所在的数据表id * * @returns {SheetId} 记录所在数据表的ID */ getSheetId: () => SheetId; /** * 获取记录id * getId * * @returns {RecordId} 记录ID */ getId: () => RecordId; /** * getLastModifiedTime * 获取记录最后更新时间 * * @returns {number} 最后更新时间(毫秒级UNIX时间戳) */ getLastModifiedTime: () => number; /** * getCreatedTime * 获取记录创建时间 * * @returns {number} 创建时间(毫秒级UNIX时间戳) */ getCreatedTime: () => number; /** * getCellValue * 获取指定字段的单元格值 * * @param {string} fieldIdOrName 指定字段ID或字段名称 * @returns {Cell | null} 返回指定单元格值 */ getCellValue: (fieldIdOrName: string) => Cell | null; /** * getCellValues * 获取所有字段的单元格值 * * @param {IGetCellValuesOptions} options 是否使用字段ID作为返回对象的键,默认为false(使用字段名称) * @returns {Record} 字段名称/ID到字段值的映射 */ getCellValues: () => Record; /** * getCreatedBy * 获取记录创建者信息 * * @returns {UserCellValue | null} 创建者信息,如果无创建者则返回null */ getCreatedBy: () => UserCellValue | null; /** * getLastModifiedBy * 获取记录最后更新者信息 * * @returns {UserCellValue | null} 最后修改者用户信息,如果信息不可用则返回null */ getLastModifiedBy: () => UserCellValue | null; } interface CellMapBase { text: string; number: number; singleSelect: SingleSelectValue; multipleSelect: MultipleSelectValue; url: LinkValue; attachment: AttachmentValue; currency: number; date: DateCellValue; unidirectionalLink: AssociationsValue; bidirectionalLink: AssociationsValue; group: GroupsCellValue; checkbox: boolean; user: UsersCellValue; department: DepartmentCellValue[]; creator: UserCellValue; lastModifier: UserCellValue; createdTime: DateCellValue; lastModifiedTime: DateCellValue; rating: number; progress: number; telephone: PhoneValue; email: string; idCard: string; barcode: string; formula: FormulaValue; lookup: FormulaValue; filterUp: FormulaValue; geolocation: GeoLocationValue; richText: RichTextValue; } type CellMap = { [K in FieldType]: K extends keyof CellMapBase ? CellMapBase[K] : null; }; export type Cell = CellMap[T]; export declare enum ToastType { /** 成功 */ SUCCESS = "success", /** 失败 */ ERROR = "error", /** 警告 */ WARNING = "warning", /** 提示 */ INFO = "info" } export declare enum HighlightType { /** 错误 */ ERROR = "error", /** 警告 */ WARNING = "warning", /** 提示 */ INFO = "info" } export interface ToastOptions { /** toast提示类型 */ type: ToastType; /** toast内容 */ message: string; /** 是否提供手动关闭消息按钮,(当消息常驻时固定为true) */ closeable?: boolean; /** 手动关闭消息的回调 */ onClose?: () => void; /** 消息显示持续时间。默认为short模式持续 3s, 选择long或存在行动点时持续时间为 5s,选择always时常驻在页面中。 */ keepAlive?: 'always' | 'short' | 'long'; } export interface Position { sheetId: string; viewId?: string; fieldId?: string; recordId?: string; } export interface HighlightOptions { /** 高亮类型 */ type: HighlightType; /** 高亮内容 */ message: string; /** 高亮位置 */ positions: Position[]; } export interface UI { /** * toast * 显示一个消息提示 * * @param {ToastOptions} toastOptions 消息提示配置 * @returns {Promise<{ success: boolean }>} 消息提示结果 */ toast: (toastOptions: ToastOptions) => Promise<{ success: boolean; }>; /** * getSelection * 获取当前多维表激活区域信息 * * @returns {Position} 当前多维表激活区域信息 */ getSelection: () => Position; /** * setSelection * 设置当前多维表激活区域信息 * * @param {Position} position 当前多维表激活区域信息 * @returns {Position} 当前多维表激活区域信息 */ setSelection: (position: Position) => Promise; /** * highlightSelection * 高亮指定表格区域(仅用于提示,高亮信息不会存入文档,刷新后高亮消失) * * @param {HighlightOptions} highlightOptions 高亮当前多维表激活区域信息 * @returns {Promise} 高亮结果 */ highlightSelection: (highlightOptions: HighlightOptions) => Promise; } export {};