Files
kevisual-noco/src/main.ts
2025-12-12 11:38:05 +08:00

89 lines
2.0 KiB
TypeScript

import { Query } from './api.ts';
import { Meta } from './meta/index.ts';
import { Record } from './record.ts';
import { Upload } from './data/upload.ts';
export type NocoApiOptions = {
table?: string;
token?: string;
baseURL?: string;
};
export class NocoApi {
query: Query;
record: Record;
meta: Meta;
upload: Upload;
constructor(options?: NocoApiOptions) {
const table = options?.table;
const token = options?.token;
const baseURL = options?.baseURL;
this.query = new Query({ baseURL, token });
this.meta = new Meta({ query: this.query });
this.upload = new Upload(this.query);
this.record = new Record({ query: this.query, table, meta: this.meta });
}
get baseURL() {
return this.query.baseURL;
}
set baseURL(url: string) {
this.query.baseURL = url;
}
/**
*
* @param baseId
* @param data
*/
async createExampleTable(baseId: string, data?: ExampleTableData) {
const defaultColumns = [
{
title: 'Id',
uidt: "ID",
pk: true,
pv: true,
},
{
title: '标题',
uidt: 'SingleLineText',
description: '标题列',
},
{
title: '摘要',
uidt: 'LongText',
description: '摘要列',
},
{
title: '标签',
uidt: 'MultiSelect',
description: '标签列',
},
{
title: '描述',
uidt: 'LongText',
description: '描述列',
},
{
title: '链接',
uidt: 'URL',
description: '链接列',
}]
const columns = data?.columns || [];
for (const col of defaultColumns) {
if (!columns.find(c => c.title === col.title)) {
columns.push(col);
}
}
const res = await this.meta.tables.createTable(baseId, {
title: data?.title || '基本表',
description: data?.description || '',
columns: columns
})
return res;
}
}
export type ExampleTableData = {
title?: string;
description?: string;
columns?: any[];
}