This commit is contained in:
2025-12-12 11:50:30 +08:00
parent c4ae0bef19
commit 63ae48a592
12 changed files with 324 additions and 6 deletions

21
auto/callback/index.ts Normal file
View File

@@ -0,0 +1,21 @@
export type BaseNocoItem<T = {}> = {
Id: number,
CreatedAt: string
UpdatedAt: string
} & T;
export type NocoWehookPayload<NocoItem = {}> = {
/** 请求id */
id: string;
type: "records.after.trigger";
/**
* 多维表base id
**/
base_id: string;
version: "v3",
data: {
table_id: string;
table_name: string;
rows: BaseNocoItem<NocoItem>[];
}
}

136
auto/common/base-table.ts Normal file
View File

@@ -0,0 +1,136 @@
import { CreateColumnData } from "../../src/index.ts"
export const columns: CreateColumnData[] = [
{
title: 'Id',
uidt: "ID",
pk: true,
pv: true,
},
{
title: '标题',
uidt: 'SingleLineText',
description: '简单的标题, 最简单的介绍',
},
{
title: '标签',
uidt: 'MultiSelect',
description: '标签分类,对每一条数据的标签定义,快速分类和筛选',
},
{
title: '总结',
uidt: 'LongText',
description: '概览性总结',
},
{
title: '描述',
uidt: 'LongText',
description: '长文本描述',
},
{
title: '数据',
uidt: 'JSON',
description: '扩列数据,存储更多的自定义信息',
},
{
title: '链接',
uidt: 'URL',
description: '快速跳转链接,默认为空,比如我这里是一个人生日程的链接,在外部打开',
},
{
title: '类型',
uidt: 'SingleSelect',
description: '任务类型:备忘和其他,如果是备忘,只做记录,如果是其他的,属于任务管理,到达对应的时间,进行任务提醒,归档是自己不再查询。',
cdf: '备忘',
colOptions: {
// 每日,每周,每月,每年,一次性,备忘,归档,智能
options: [
{
title: '每日',
},
{
title: '每周',
},
{
title: '每月',
},
{
title: '每年',
},
{
title: '每年农历',
},
{
title: '备忘',
},
{
title: '归档',
},
{
title: '智能',
},
]
},
},
{
title: '启动时间',
description: '任务启动的时间点, 下次启动的时间点。到达当天,显示当天的任务,然后如果执行了,如果是循环周期任务,更新下次启动时间。',
uidt: 'DateTime',
},
{
title: '任务',
uidt: 'MultiSelect',
description: '任务状态,如果是任务,需要判断运行还是非运行中',
cdf: '非任务',
colOptions: {
// 非任务, 运行中,已停止,个人计划,已完成
options: [
{
title: '非任务',
},
{
title: '运行中',
},
{
title: '已停止',
},
{
title: '个人计划',
},
{
title: '已完成',
},
{
title: 'AI自动化'
}
]
},
},
{
title: '任务结果',
description: '任务结果描述, 执行后回馈',
uidt: 'LongText'
},
{
title: '提示词',
uidt: 'LongText',
description: '和AI交互时候简单的实时提示词',
}]
export type ColumnItem<T = {}> = {
'Id': number,
'CreatedAt': string,
'UpdatedAt': string,
"标题": string,
"标签"?: string,
"总结"?: string,
"描述"?: string,
"数据"?: string,
"链接"?: string,
"类型"?: string,
"启动时间"?: string,
"任务"?: "非任务" | "运行中" | "已停止" | "个人计划" | "已完成" | "AI自动化",
"任务结果"?: string,
"提示词"?: string,
} & T;

99
auto/common/core.ts Normal file
View File

@@ -0,0 +1,99 @@
import { NocoApi } from "@kevisual/noco";
import { columns } from "../common/base-table.ts";
import { ColumnItem } from "./base-table.ts";
type ReponseData<T = {}> = {
code: number,
message?: string,
data?: T
}
export type CoreOptions<T = {}> = {
nocoApi: NocoApi,
baseId?: string
} & T
export class Core {
nocoApi: NocoApi;
#baseId?: string;
key = 'core';
title = '默认表';
description = '默认表描述';
#tableId?: string;
constructor(opts: {
nocoApi: NocoApi,
baseId?: string,
tableId?: string
}) {
this.nocoApi = opts.nocoApi;
this.baseId = opts.baseId;
this.tableId = opts.tableId;
}
get tableId() {
return this.#tableId;
}
set tableId(id: string | undefined) {
this.#tableId = id;
if (this.nocoApi.record && id) {
this.nocoApi.record.table = id;
}
}
get baseId() {
return this.#baseId;
}
set baseId(id: string | undefined) {
this.#baseId = id;
}
async createTable(opts?: { columns?: any[], title?: string, description?: string, baseId?: string }): Promise<ReponseData<{ id: string, title: string }>> {
const baseId = opts?.baseId ?? this.baseId!;
const title = opts?.title ?? this.title;
const description = opts?.description ?? this.description;
const _columns = opts?.columns ?? columns;
let tableId = '';
const res = await this.nocoApi.meta.tables.createTable(baseId, {
title,
description,
columns: _columns,
})
let code = 200;
if (res.code !== 200) {
const res = await this.nocoApi.meta.tables.list(baseId);
const list = res.data?.list || [];
const existTable = list.find(t => t.title === title);
if (existTable) {
tableId = existTable.id;
} else {
return {
code: res.code,
message: `创建表失败,且未找到同名表`,
}
}
} else {
tableId = res?.data?.id;
}
this.tableId = tableId;
if (this.nocoApi.record) {
this.nocoApi.record.table = tableId;
}
return {
code,
data: {
id: tableId,
title,
}
};
}
getItem(id: number): Promise<ReponseData<ColumnItem>> {
return this.nocoApi.record.read(id);
}
getList(params: any): Promise<ReponseData<{ list: ColumnItem[] }>> {
return this.nocoApi.record.list({
...params,
});
}
updateItem(data: Partial<ColumnItem>) {
return this.nocoApi.record.update(data);
}
createItem(data: Partial<ColumnItem>) {
return this.nocoApi.record.create(data);
}
}

2
auto/common/index.ts Normal file
View File

@@ -0,0 +1,2 @@
export * from "./core.ts";
export * from "./base-table.ts";

7
auto/control/index.ts Normal file
View File

@@ -0,0 +1,7 @@
import { Core } from "../common/index.ts";
export class Control extends Core {
key = 'control';
title = '控制中枢'
description = '管理和控制系统的运行'
}

19
auto/index.ts Normal file
View File

@@ -0,0 +1,19 @@
import { NocoApi } from "../src/index.ts";
import { ColumnItem, columns, } from "./common/base-table.ts";
import { Life } from "./life/index.ts";
import { Control } from "./control/index.ts";
import { Core } from "./common/core.ts";
import { NocoWehookPayload } from "./callback/index.ts";
export {
NocoApi,
columns,
Control,
Life,
Core,
}
export type {
NocoWehookPayload,
ColumnItem
}

7
auto/life/index.ts Normal file
View File

@@ -0,0 +1,7 @@
import { Core } from "../common/index.ts";
export class Life extends Core {
key = 'life';
title = '人生备忘录'
description = '记录和管理你的人生大事小事'
}