papitable

package
v0.0.7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 7, 2026 License: MIT Imports: 21 Imported by: 0

Documentation

Index

Constants

View Source
const (
	CELL_VALUE_KEY_TYPE_FIELD_TITLE = "name" // apitable 使用 name 作为字段键
	CELL_VALUE_KEY_TYPE_FIELD_ID    = "id"   // apitable 使用 id 作为字段键
)
View Source
const DefaultConfigGroup = "APITable"

Variables

View Source
var LastEditFromMarker_LTBL = &LastEditFromMarker{
	keyToTimeMap: make(map[string]time.Time)}

local table

View Source
var LastEditFromMarker_MTBL = &LastEditFromMarker{
	keyToTimeMap: make(map[string]time.Time)}

multi table

View Source
var LastEditFrom_LTBL string = "LTBL"
View Source
var LastEditFrom_MTBL string = "MTBL"
View Source
var LastEditFrom_TEMP string = "TEMP"

Functions

func InitAPITable

func InitAPITable(token string, baseUrl string) (err error)

func InitAPITableByConfig

func InitAPITableByConfig() error

--------------------------------------------------

func NewAttachmentValue

func NewAttachmentValue(name, token string) map[string]any

Attachment (文件/附件) 字段

func NewNumValue

func NewNumValue(value float64) float64

func NewOneWayLinkValue

func NewOneWayLinkValue(recordIds []string) []string

-------------------------------------------------- OneWayLink(单向关联)字段值处理 ([]string)nil 表示空值

func NewTextValue

func NewTextValue(text string) string

--------------------------------------------------

func NewTimeValue

func NewTimeValue(t time.Time) float64

--------------------------------------------------

func ParseFormulaValue

func ParseFormulaValue(value any) (string, error)

-------------------------------------------------- Formula(智能公式)字段值处理,不能直接写入值,只能读取计算结果,类型由列配置的valueType决定 NewFormulaCol直接写入了string类型,所以这里直接解析成string

func ParseMagicLookUpValue

func ParseMagicLookUpValue(value any) (any, error)

-------------------------------------------------- MagicLookUp(神奇引用)字段值处理,不能直接写入值,只能读取计算结果,类型由列配置的RollupFunction决定

func ParseNumValue

func ParseNumValue(value any) (float64, error)

func ParseOneWayLinkValue

func ParseOneWayLinkValue(value any) ([]string, error)

func ParseTextValue

func ParseTextValue(value any) (string, error)

func ParseTimeValue

func ParseTimeValue(value any) (time.Time, error)

Types

type AddField

type AddField struct {
	Type     FieldType      `json:"type"`
	Name     string         `json:"name"`
	Property map[string]any `json:"property"`
}

func NewAttachmentCol added in v0.0.6

func NewAttachmentCol(colName string) *AddField

-------------------------------------------------- Attachment (文件/附件) 字段

func NewFormulaCol added in v0.0.6

func NewFormulaCol(colName string, expression string) *AddField

-------------------------------------------------- Formula(智能公式)字段,暂时只处理string类型

func NewMagicLookUpCol added in v0.0.6

func NewMagicLookUpCol(colName string, config *MagicLookUpConfig) *AddField

func NewMultiSelectCol added in v0.0.6

func NewMultiSelectCol(colName string, options []*SelectFieldOption) *AddField

func NewOneWayLinkCol added in v0.0.6

func NewOneWayLinkCol(colName string,
	foreignDatasheetId string,
	multiSelect bool) *AddField

-------------------------------------------------- OneWayLink(单向关联)字段

func NewSimpleMagicLookUpCol added in v0.0.6

func NewSimpleMagicLookUpCol(colName string, relatedLinkFieldId string, targetFieldId string) *AddField

NewSimpleMagicLookUpCol 创建简单的神奇引用字段(不带筛选和排序)

func NewSimpleNumCol

func NewSimpleNumCol(colName string) *AddField

--------------------------------------------------

func NewSimpleTimeCol

func NewSimpleTimeCol(colName string) *AddField

--------------------------------------------------

func NewSimpleUserCol

func NewSimpleUserCol(colName string, isMultiple bool) *AddField

-------------------------------------------------- 成员类型,因为用户列表API调不通,所以暂时用不上

func NewSingleSelectCol added in v0.0.6

func NewSingleSelectCol(colName string, options []*SelectFieldOption) *AddField

func NewTextCol

func NewTextCol(colName string) *AddField

func NewTwoWayLinkCol added in v0.0.6

func NewTwoWayLinkCol(colName string,
	foreignDatasheetId, brotherFieldId string,
	multiSelect bool) *AddField

-------------------------------------------------- OneTwoLink(双向关联)字段

type AddRecord

type AddRecord struct {
	Values map[string]any `json:"fields"`
}

-------------------------------------------------- 添加记录结构

type ApiTableEvent added in v0.0.6

type ApiTableEvent struct {
	DatasheetId string `json:"datasheetId,omitempty"` // 表格ID
	RecordId    string `json:"recordId,omitempty"`    // 记录ID
	Event       string `json:"event,omitempty"`       // 事件类型,insert/update/delete
}

type AttachmentValue added in v0.0.6

type AttachmentValue struct {
	ID       string `json:"id,omitempty"`
	Name     string `json:"name,omitempty"`
	Token    string `json:"token,omitempty"`
	MimeType string `json:"mimeType,omitempty"`
	Size     int64  `json:"size,omitempty"`
	Url      string `json:"url,omitempty"`
	Width    int    `json:"width,omitempty"`
	Height   int    `json:"height,omitempty"`
}

AttachmentValue 是解析后附件的结构体表示

func ParseAttachmentValue

func ParseAttachmentValue(value any) ([]AttachmentValue, error)

ParseAttachmentValue 将单元格中的附件值解析为 []AttachmentValue

type BaseDataProvider added in v0.0.6

type BaseDataProvider struct {
	Ctx context.Context

	// 该字段需要初始化设置好,mtbl事件处理中用于过滤属于当前表的事件
	DatasheetID string
	// 初始化总是nil,由 SyncHelper 根据mtbl事件自动加载
	Doc *MultiTableDoc

	TableConfig *TableConfig
	DAO         MtblDAO
	// contains filtered or unexported fields
}

func (*BaseDataProvider) BindProvider added in v0.0.7

func (h *BaseDataProvider) BindProvider(provider DataProvider) *BaseDataProvider

BindProvider 用于将BaseDataProvider绑定到外层DataProvider实现。 子类嵌入BaseDataProvider时,初始化后调用:base.BindProvider(subClass)

func (*BaseDataProvider) CreateOrUpdateLocalRecord added in v0.0.6

func (h *BaseDataProvider) CreateOrUpdateLocalRecord(
	localRecord any, mtblRecord *CommonRecord,
) (newRecord any, stop bool, err error)

impl DataProvider

func (*BaseDataProvider) GetColList added in v0.0.6

func (h *BaseDataProvider) GetColList() []*AddField

impl DataProvider

func (*BaseDataProvider) GetFirstCol added in v0.0.6

func (h *BaseDataProvider) GetFirstCol() *AddField

impl DataProvider

func (*BaseDataProvider) GetLastEditFrom added in v0.0.6

func (h *BaseDataProvider) GetLastEditFrom(record any) string

impl DataProvider

func (*BaseDataProvider) GetLocalRecordByMtbl added in v0.0.6

func (h *BaseDataProvider) GetLocalRecordByMtbl(mtblRecord *CommonRecord) (any, error)

impl DataProvider

func (*BaseDataProvider) GetPrimaryCol added in v0.0.6

func (h *BaseDataProvider) GetPrimaryCol() *FieldConfig

impl DataProvider

func (*BaseDataProvider) GetPrimaryVal added in v0.0.6

func (h *BaseDataProvider) GetPrimaryVal(record any) string

impl DataProvider

func (*BaseDataProvider) GetSyncData added in v0.0.6

func (h *BaseDataProvider) GetSyncData() ([]*AddRecord, error)

impl DataProvider

func (*BaseDataProvider) GetTableName added in v0.0.6

func (h *BaseDataProvider) GetTableName() string

impl DataProvider

func (*BaseDataProvider) HandleMtblEvent added in v0.0.6

func (h *BaseDataProvider) HandleMtblEvent() error

func (*BaseDataProvider) L2M added in v0.0.6

func (h *BaseDataProvider) L2M(record any, oldMtblRecord *CommonRecord) map[string]any

impl DataProvider

func (*BaseDataProvider) M2L added in v0.0.6

func (h *BaseDataProvider) M2L(mtblRecord *CommonRecord, localRecord any) any

impl DataProvider

func (*BaseDataProvider) SetDoc added in v0.0.6

func (h *BaseDataProvider) SetDoc(doc *MultiTableDoc)

-------------------------------------------------- impl DataProvider

func (*BaseDataProvider) UpdateLastEditToLTBL added in v0.0.6

func (h *BaseDataProvider) UpdateLastEditToLTBL(localId string, lastEditFrom string) error

impl DataProvider

func (*BaseDataProvider) WithLogger added in v0.0.6

func (h *BaseDataProvider) WithLogger(logger *plogger.PLogWarper) *BaseDataProvider

type CellOption

type CellOption string

--------------------------------------------------

func NewOptionValue

func NewOptionValue(option *SelectFieldOption) *CellOption

func NewOptionValueByStr added in v0.0.6

func NewOptionValueByStr(str string) *CellOption

func ParseMultiOptionValue added in v0.0.7

func ParseMultiOptionValue(value any) ([]*CellOption, error)

func ParseSingleOptionValue

func ParseSingleOptionValue(value any) (*CellOption, error)

func (*CellOption) GetKey

func (opt *CellOption) GetKey() string

type CellUserValue

type CellUserValue struct {
	// Id     string `json:"id"`               // 组织单元的ID
	UserId string `json:"id"`               // 组织单元的ID
	Type   int32  `json:"type"`             // 组织单元的类型,1是小组,3是成员
	Name   string `json:"name"`             // 小组或成员的名称
	Avatar string `json:"avatar,omitempty"` // 头像URL,只读,不可写入
}

-------------------------------------------------- 成员类型单元格值,因为用户列表API调不通,所以暂时用不上

func NewUserValue

func NewUserValue(userIds ...string) []CellUserValue

func ParseUserValue

func ParseUserValue(value any) ([]CellUserValue, error)

type CommonRecord

type CommonRecord struct {
	RecordId  string         `json:"recordId"`
	Fields    map[string]any `json:"fields"`
	CreatedAt int64          `json:"createdAt"`
	UpdatedAt int64          `json:"updatedAt"`
}

--------------------------------------------------

type DataProvider added in v0.0.6

type DataProvider interface {
	// 如果内部创建新的表,传递到外部存储
	SetDoc(doc *MultiTableDoc)

	// --------------------------------------------------
	// 表配置
	GetTableName() string    // GetTableName 获取表名
	GetFirstCol() *AddField  // GetFirstCol 获取主键列定义
	GetColList() []*AddField // GetColList 获取所有列定义

	// --------------------------------------------------
	// 本地主键,用于在MTBL中定位本地记录
	GetPrimaryCol() *FieldConfig
	GetPrimaryVal(localRecord any) string

	// GetLastEditFrom 获取最后修改来源
	GetLastEditFrom(localRecord any) string
	// UpdateLastEditFromToLTBL 更新本地记录的 LastEditFrom 字段
	UpdateLastEditToLTBL(localId, lastEditFrom string) error

	// --------------------------------------------------
	GetSyncData() ([]*AddRecord, error) // 获取全量同步的数据,用于SyncHelper.InitMTBL

	// GetLocalRecordByMtbl 根据MTBL记录获取本地记录,隐含了M2LTBL的反向映射逻辑
	// 返回error将中断处理,可以返回[nil,nil]继续处理mtbl新增数据,而ltbl不存在的情况
	GetLocalRecordByMtbl(mtblRecord *CommonRecord) (localRecord any, err error)

	// CreateOrUpdateLocalRecord 应用本地更新(写入DB)
	// localRecord: 旧的本地记录,可能是nil,一般意味着需要创建新本地记录
	// mtblRecord: 原始MTBL记录
	// 返回:
	//  newRecord: 创建或更新后的新数据
	// 	stop用于中断SyncHelper后续对MTBL的处理,
	// 		用户通过MTBL操作,但只是作为一个入口,触发后端复杂逻辑
	// 		而这个数据其实不需要维护,甚至被删除了,则SyncHelper.UpdateToLTBL不再需要继续处理
	CreateOrUpdateLocalRecord(localRecord any, mtblRecord *CommonRecord,
	) (newRecord any, stop bool, err error)

	// L2M 将本地记录转换为APITable记录
	// 先赋值oldRecord,再用localRecord覆盖
	L2M(localRecord any, mtblRecord *CommonRecord) map[string]any

	// M2L 将MTBL记录转换为本地记录结构
	// 如果localRecord不为nil,则直接用mtblRecord覆盖到localRecord
	M2L(mtblRecord *CommonRecord, localRecord any) any
}

SyncHelper只封装同步策略和MTBL的大部分操作 而本地数据操作,以及数据转换等等都是DataProvider接口提供的

type Field

type Field struct {
	Id       string         `json:"id"`
	Name     string         `json:"name"`
	Type     FieldType      `json:"type"`
	Desc     string         `json:"desc,omitempty"`
	Property map[string]any `json:"property"`
}

type FieldConfig added in v0.0.6

type FieldConfig struct {
	Col     *AddField
	DOField string
}

type FieldType

type FieldType string

-------------------------------------------------- 字段类型 -------------------------------------------------- 字段类型常量

const (
	// FIELD_TYPE_SINGLE_TEXT FieldType = "SingleText" //单行文本
	// FIELD_TYPE_TEXT               FieldType = "Text"             //多行文本
	FIELD_TYPE_TEXT FieldType = "SingleText" // 用一个就好了,文档有两个类型

	FIELD_TYPE_SINGLE_SELECT      FieldType = "SingleSelect"     //单选
	FIELD_TYPE_MULTI_SELECT       FieldType = "MultiSelect"      //多选
	FIELD_TYPE_NUMBER             FieldType = "Number"           //数字
	FIELD_TYPE_CURRENCY           FieldType = "Currency"         //货币
	FIELD_TYPE_PERCENT            FieldType = "Percent"          //百分比
	FIELD_TYPE_DATE_TIME          FieldType = "DateTime"         //日期
	FIELD_TYPE_ATTACHMENT         FieldType = "Attachment"       //附件
	FIELD_TYPE_MEMBER             FieldType = "Member"           //成员
	FIELD_TYPE_CHECKBOX           FieldType = "Checkbox"         //勾选
	FIELD_TYPE_RATING             FieldType = "Rating"           //评分
	FIELD_TYPE_URL                FieldType = "URL"              //网址
	FIELD_TYPE_PHONE              FieldType = "Phone"            //电话
	FIELD_TYPE_EMAIL              FieldType = "Email"            //邮箱
	FIELD_TYPE_WORK_DOC           FieldType = "WorkDoc"          //轻文档
	FIELD_TYPE_ONE_WAY_LINK       FieldType = "OneWayLink"       //单向关联
	FIELD_TYPE_TWO_WAY_LINK       FieldType = "TwoWayLink"       //双向关联
	FIELD_TYPE_MAGIC_LOOKUP       FieldType = "MagicLookUp"      //神奇引用
	FIELD_TYPE_FORMULA            FieldType = "Formula"          //智能公式
	FIELD_TYPE_AUTO_NUMBER        FieldType = "AutoNumber"       //自增数字
	FIELD_TYPE_CREATED_TIME       FieldType = "CreatedTime"      //创建时间
	FIELD_TYPE_LAST_MODIFIED_TIME FieldType = "LastModifiedTime" //修改时间
	FIELD_TYPE_CREATED_BY         FieldType = "CreatedBy"        //创建人
	FIELD_TYPE_LAST_MODIFIED_BY   FieldType = "LastModifiedBy"   //更新人
	FIELD_TYPE_BUTTON             FieldType = "Button"           //按钮
)

type GetRecordRequest

type GetRecordRequest struct {
	PageSize        int        `json:"pageSize,omitempty"`
	MaxRecords      int        `json:"maxRecords,omitempty"`
	PageNum         int        `json:"pageNum,omitempty"`
	Sort            []SortRule `json:"sort,omitempty"`
	RecordIds       []string   `json:"recordIds,omitempty"`
	ViewId          string     `json:"viewId,omitempty"`
	Fields          []string   `json:"fields,omitempty"`
	FilterByFormula string     `json:"filterByFormula,omitempty"`
	CellFormat      string     `json:"cellFormat,omitempty"`
	FieldKey        string     `json:"fieldKey,omitempty"`
}

查询记录请求结构

type GetTeamListResponse

type GetTeamListResponse struct {
	Success bool   `json:"success"`
	Code    int    `json:"code"`
	Message string `json:"message"`
	Data    struct {
		PageNum  int     `json:"pageNum"`
		PageSize int     `json:"pageSize"`
		Total    int     `json:"total"`
		Teams    []*Team `json:"teams"`
	} `json:"data"`
}

GetTeamListResponse 获取小组列表响应

type GetTeamMembersResponse

type GetTeamMembersResponse struct {
	Success bool   `json:"success"`
	Code    int    `json:"code"`
	Message string `json:"message"`
	Data    struct {
		PageNum  int     `json:"pageNum"`
		PageSize int     `json:"pageSize"`
		Total    int     `json:"total"`
		Members  []*User `json:"members"`
	} `json:"data"`
}

GetTeamMembersResponse 获取小组成员响应

type GetUserResponse

type GetUserResponse struct {
	Success bool   `json:"success"`
	Code    int    `json:"code"`
	Message string `json:"message"`
	Data    User   `json:"data"`
}

GetUserResponse 获取单个用户响应

type LastEditFromMarker added in v0.0.6

type LastEditFromMarker struct {
	// contains filtered or unexported fields
}

func (*LastEditFromMarker) CleanTimeoutRecord added in v0.0.6

func (m *LastEditFromMarker) CleanTimeoutRecord()

func (*LastEditFromMarker) Set added in v0.0.6

func (m *LastEditFromMarker) Set(key string)

func (*LastEditFromMarker) SkipAndClean added in v0.0.6

func (m *LastEditFromMarker) SkipAndClean(key string, updateTime time.Time) bool

type MagicLookUpConfig added in v0.0.6

type MagicLookUpConfig struct {
	RelatedLinkFieldId string                 // 引用的当前表的关联字段 ID(注意这是本表)
	TargetFieldId      string                 // 关联表中查询的字段 ID(注意这是关联的表)
	RollupFunction     string                 // 汇总函数,如 "VALUES", "AVERAGE", "COUNT" 等
	EnableFilterSort   bool                   // 是否开启筛选和排序
	SortInfo           *MagicLookUpSortInfo   // 排序设置
	FilterInfo         *MagicLookUpFilterInfo // 筛选设置
	LookUpLimit        string                 // 限制展示的记录数量 "ALL" 或 "FIRST"
}

-------------------------------------------------- MagicLookUp(神奇引用)字段

type MagicLookUpFilterCondition added in v0.0.6

type MagicLookUpFilterCondition struct {
	FieldId   string        `json:"fieldId"`   // 筛选字段的字段ID
	FieldType string        `json:"fieldType"` // 筛选字段的字段类型
	Operator  string        `json:"operator"`  // 筛选条件的运算符
	Value     []interface{} `json:"value"`     // 筛选条件的基准值
}

type MagicLookUpFilterInfo added in v0.0.6

type MagicLookUpFilterInfo struct {
	Conjunction string                       `json:"conjunction"` // "and" 或 "or"
	Conditions  []MagicLookUpFilterCondition `json:"conditions"`
}

type MagicLookUpSortInfo added in v0.0.6

type MagicLookUpSortInfo struct {
	Rules []MagicLookUpSortRule `json:"rules"`
}

type MagicLookUpSortRule added in v0.0.6

type MagicLookUpSortRule struct {
	FieldId string `json:"fieldId"` // 用于排序的字段ID
	Desc    bool   `json:"desc"`    // 是否按降序排序
}

type MtblDAO added in v0.0.6

type MtblDAO interface {
	Add(ctx context.Context, do any) error
	UpdateByID(ctx context.Context, do any) error

	GetAll(ctx context.Context) ([]any, error)
	GetByID(ctx context.Context, id int32) (any, error)

	// 删除只能依靠mtblRecordId,因为回调中mtbl已经没有这个数据,无法二次查询到LocalId了
	DeleteByID(ctx context.Context, id int32) error
	UpdateMtblInfo(_ctx context.Context, localId string, lastEditFrom string) error
}

定义常规DAO应该提供的CURD方法

type MultiTableDoc

type MultiTableDoc struct {
	SpaceId     string `json:"spaceId"`     // 空间ID
	DatasheetId string `json:"datasheetId"` // 数据表ID
	// contains filtered or unexported fields
}

func CreateMultiTable

func CreateMultiTable(spaceId, tblName string, keyCol *AddField) (doc *MultiTableDoc, err error)

APITable 首列不能隐藏/删除/拖拽等等操作,所以需要指定业务的主键列名

func NewMultiTableDoc

func NewMultiTableDoc(spaceId, datasheetId string) *MultiTableDoc

func (*MultiTableDoc) AddCol

func (doc *MultiTableDoc) AddCol(fields []*AddField) (ret []*Field, err error)

-------------------------------------------------- 添加指定类型的字段

func (*MultiTableDoc) AddRow

func (doc *MultiTableDoc) AddRow(rows []*AddRecord) (records []*CommonRecord, err error)

-------------------------------------------------- 增加记录

func (*MultiTableDoc) DelAllRows

func (doc *MultiTableDoc) DelAllRows() error

-------------------------------------------------- 清空记录

func (*MultiTableDoc) DelCol

func (doc *MultiTableDoc) DelCol(fieldIds []string) error

删除字段

func (*MultiTableDoc) DelRow

func (doc *MultiTableDoc) DelRow(recordIds []string) error

-------------------------------------------------- 删除记录

func (*MultiTableDoc) DisableFieldPermission added in v0.0.6

func (doc *MultiTableDoc) DisableFieldPermission(fieldId string) error

DisableFieldPermission disables field-level permission for a field.

func (*MultiTableDoc) EditRow

func (doc *MultiTableDoc) EditRow(rows []*UpdateRecord) error

--------------------------------------------------

func (*MultiTableDoc) EnableFieldPermission added in v0.0.6

func (doc *MultiTableDoc) EnableFieldPermission(fieldId string, includeExtend bool) error

EnableFieldPermission enables field-level permission for a field. includeExtend true will include extended permissions if supported by API.

func (*MultiTableDoc) GetCols

func (doc *MultiTableDoc) GetCols() ([]*Field, error)

-------------------------------------------------- 查询字段

func (*MultiTableDoc) GetRow

func (doc *MultiTableDoc) GetRow(req *GetRecordRequest) (*getRecordResponse, error)

-------------------------------------------------- 创建记录

func (*MultiTableDoc) SetColList

func (doc *MultiTableDoc) SetColList(myColList []*AddField, deleteExcept bool) (isEdited bool, err error)

设置多维表格文档的列列表: 如果该列已存在,则不修改。如需修改列,为了确保程序不会误删数据,应该手动删除列,再通过该方法重建。 如果该列不存在,则添加列。 如果deleteExcept为true,则删除除myColList之外的所有列。

func (*MultiTableDoc) UpdateFieldPermissionRole added in v0.0.6

func (doc *MultiTableDoc) UpdateFieldPermissionRole(fieldId string, unitIds []string, role Role) error

func (*MultiTableDoc) UploadAttachment added in v0.0.6

func (doc *MultiTableDoc) UploadAttachment(filePath string) (*uploadAttachmentResponse, error)

UploadAttachment 上传单个文件到 datasheet,返回服务器返回的数据(包含 token)

func (*MultiTableDoc) UploadAttachmentWithPresignedUrl added in v0.0.6

func (doc *MultiTableDoc) UploadAttachmentWithPresignedUrl(
	fileName, contentType string, fileSize int64, fileReader io.Reader,
) (*uploadAttachmentResponse, error)

Niubility! finally works! 因为官方文档提供的上传附件,只能multipart/form-data类型 但是这样上传后图片无法展示缩略图,那就无法使用相册视图了 所以我尝试扒apitable网页的上传逻辑,使用 presigned URL 上传,成功了! 这代码虽然有点臭,配合AI一点点调试出来的,暂时也没有封装的必要 相关源码位置:(git tag v1.13.0-beta.1) packages/room-server/src/fusion/vos/attachment.vo.ts packages/room-server/src/fusion/fusion.api.controller.ts backend-server/application/src/main/java/com/apitable/asset/controller/AssetCallbackController.java

type Role added in v0.0.6

type Role string
const (
	RoleAdministrator Role = "administrator"
	RoleManager       Role = "manager"   // 页面出错
	RoleEditor        Role = "editor"    // 不可编辑列配置,可以修改单元格
	RoleReader        Role = "reader"    // 不可编辑列配置,可以修改单元格
	RoleNone          Role = "none"      // 页面出错
	RoleMember        Role = "member"    // 页面出错
	RoleGuest         Role = "guest"     // 页面出错
	RoleForeigner     Role = "foreigner" // 页面出错
)

type SelectFieldOption

type SelectFieldOption struct {
	Id string `json:"id,omitempty"`
	// Name  string                  `json:"name"`
	Text string `json:"name"`
	// Color *SelectFieldOptionColor `json:"color,omitempty"` // 文档有问题,这里只需要string
	Style SelectFieldOptionColor `json:"color,omitempty"`
}

type SelectFieldOptionColor

type SelectFieldOptionColor string
var (
	ColorRed    SelectFieldOptionColor = "red_4"
	ColorOrange SelectFieldOptionColor = "tangerine_4"
	ColorYellow SelectFieldOptionColor = "yellow_4"
	ColorBlue   SelectFieldOptionColor = "blue_4"
	ColorGreen  SelectFieldOptionColor = "green_4"
	ColorPurple SelectFieldOptionColor = "deepPurple_4"
	ColorGray   SelectFieldOptionColor = "blue_0"
	ColorPink   SelectFieldOptionColor = "pink_4"
)

预定义的颜色选项

type SelectFieldOptionHandler added in v0.0.6

type SelectFieldOptionHandler struct {
	// contains filtered or unexported fields
}

func (*SelectFieldOptionHandler) GetCellOptionById_I added in v0.0.6

func (h *SelectFieldOptionHandler) GetCellOptionById_I(id int32) *CellOption

func (*SelectFieldOptionHandler) GetCellOptionById_S added in v0.0.6

func (h *SelectFieldOptionHandler) GetCellOptionById_S(id string) *CellOption

func (*SelectFieldOptionHandler) GetCellOptionByText added in v0.0.6

func (h *SelectFieldOptionHandler) GetCellOptionByText(text string) *CellOption

func (*SelectFieldOptionHandler) GetOptionByText added in v0.0.6

func (h *SelectFieldOptionHandler) GetOptionByText(text string) *SelectFieldOption

func (*SelectFieldOptionHandler) GetOptionList added in v0.0.6

func (h *SelectFieldOptionHandler) GetOptionList() []*SelectFieldOption

func (*SelectFieldOptionHandler) RegOptionI added in v0.0.6

func (h *SelectFieldOptionHandler) RegOptionI(id int32, text string, style SelectFieldOptionColor)

func (*SelectFieldOptionHandler) RegOptionS added in v0.0.6

func (h *SelectFieldOptionHandler) RegOptionS(id, text string, style SelectFieldOptionColor)

func (*SelectFieldOptionHandler) Reset added in v0.0.6

func (h *SelectFieldOptionHandler) Reset()

type SortRule

type SortRule struct {
	Field string `json:"field"`
	Order string `json:"order"` // "asc" 或 "desc"
}

-------------------------------------------------- 排序规则

func NewSortRule

func NewSortRule(fieldName string, desc bool) SortRule

type SyncHelper added in v0.0.6

type SyncHelper struct {
	// contains filtered or unexported fields
}

--------------------------------------------------

func NewSyncHelper added in v0.0.6

func NewSyncHelper(data DataProvider, doc *MultiTableDoc) *SyncHelper

func (*SyncHelper) DeleteMTBL added in v0.0.6

func (s *SyncHelper) DeleteMTBL(localId string, deleteTime time.Time) error

func (*SyncHelper) InitMTBL added in v0.0.6

func (s *SyncHelper) InitMTBL(spaceId, datasheetId string) (string, error)

InitMTBL 初始化多维表格 spaceId: 空间ID datasheetId: 表格ID,如果为空则创建新表 return: 最终的表格ID,错误信息

func (*SyncHelper) SetInit added in v0.0.6

func (s *SyncHelper) SetInit(init bool) *SyncHelper

init 的意义是,创建表格,全量写入数据时,MTBL的自动化还没有建立 所以双向同步的逻辑有点不一样,主要体现在 LastEditFrom 字段将被设置为LTBL,而不是TEMP

func (*SyncHelper) UpdateToLTBL added in v0.0.6

func (s *SyncHelper) UpdateToLTBL(mtblRecord *CommonRecord) error

func (*SyncHelper) UpdateToMTBL added in v0.0.6

func (s *SyncHelper) UpdateToMTBL(
	localRecord any,
	updateTime time.Time,
) (err error)

从外部传入record,让业务代码复用record的获取逻辑

func (*SyncHelper) WithLogger added in v0.0.6

func (s *SyncHelper) WithLogger(logger *plogger.PLogWarper) *SyncHelper

type TableConfig added in v0.0.6

type TableConfig struct {
	TableName  string
	FirstCol   *AddField    // 多维表格的第一列,无法隐藏无法移动
	PrimaryCol *FieldConfig // 对应本地唯一标识字段,一般是主键字段
	ColList    []*FieldConfig
	NewDO      func() any
}

type Team

type Team struct {
	UnitId       string `json:"unitId"`
	Name         string `json:"name"`
	Sequence     int    `json:"sequence"`
	ParentUnitId string `json:"parentUnitId"`
	Roles        []struct {
		UnitId   string `json:"unitId"`
		Name     string `json:"name"`
		Sequence int    `json:"sequence"`
	} `json:"roles"`
}

Team 表示小组信息

type UpdateRecord

type UpdateRecord struct {
	RecordId string         `json:"recordId"`
	Fields   map[string]any `json:"fields"`
}

-------------------------------------------------- api req/resp结构 --------------------------------------------------

type UpdateRecordRequest

type UpdateRecordRequest struct {
	Records  []*UpdateRecord `json:"records"`
	FieldKey string          `json:"fieldKey,omitempty"` // "name" or "id", default "name"
}

type UpdateRecordResponse

type UpdateRecordResponse struct {
	Success bool   `json:"success"`
	Code    int    `json:"code"`
	Message string `json:"message"`
	Data    struct {
		Records []CommonRecord `json:"records"`
	} `json:"data"`
}

type User

type User struct {
	UnitId string `json:"unitId"`
	Name   string `json:"name"`
	Email  string `json:"email"`
	Mobile struct {
		Number   string `json:"number"`
		AreaCode string `json:"areaCode"`
	} `json:"mobile"`
	Avatar string `json:"avatar"`
	Status int    `json:"status"` // 0:未加入空间站, 1:已加入空间站
	Type   string `json:"type"`   // PrimaryAdmin, SubAdmin, Member
	Teams  []struct {
		UnitId       string `json:"unitId"`
		Name         string `json:"name"`
		Sequence     int    `json:"sequence"`
		ParentUnitId string `json:"parentUnitId"`
	} `json:"teams"`
	Roles []struct {
		UnitId   string `json:"unitId"`
		Name     string `json:"name"`
		Sequence int    `json:"sequence"`
	} `json:"roles"`
}

User 表示成员信息

func GetUser

func GetUser(spaceId, unitId string) (*User, error)

GetUser 根据unitId获取单个用户信息

func GetUserList

func GetUserList(spaceId string) ([]*User, error)

GetUserList 递归获取所有成员

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL