first commit
This commit is contained in:
34
.gitignore
vendored
Normal file
34
.gitignore
vendored
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
# dependencies (bun install)
|
||||||
|
node_modules
|
||||||
|
|
||||||
|
# output
|
||||||
|
out
|
||||||
|
dist
|
||||||
|
*.tgz
|
||||||
|
|
||||||
|
# code coverage
|
||||||
|
coverage
|
||||||
|
*.lcov
|
||||||
|
|
||||||
|
# logs
|
||||||
|
logs
|
||||||
|
_.log
|
||||||
|
report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json
|
||||||
|
|
||||||
|
# dotenv environment variable files
|
||||||
|
.env
|
||||||
|
.env.development.local
|
||||||
|
.env.test.local
|
||||||
|
.env.production.local
|
||||||
|
.env.local
|
||||||
|
|
||||||
|
# caches
|
||||||
|
.eslintcache
|
||||||
|
.cache
|
||||||
|
*.tsbuildinfo
|
||||||
|
|
||||||
|
# IntelliJ based IDEs
|
||||||
|
.idea
|
||||||
|
|
||||||
|
# Finder (MacOS) folder config
|
||||||
|
.DS_Store
|
||||||
15
README.md
Normal file
15
README.md
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
# datax-config
|
||||||
|
|
||||||
|
To install dependencies:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bun install
|
||||||
|
```
|
||||||
|
|
||||||
|
To run:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bun run index.ts
|
||||||
|
```
|
||||||
|
|
||||||
|
This project was created using `bun init` in bun v1.2.17. [Bun](https://bun.sh) is a fast all-in-one JavaScript runtime.
|
||||||
29
bun.lock
Normal file
29
bun.lock
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"lockfileVersion": 1,
|
||||||
|
"workspaces": {
|
||||||
|
"": {
|
||||||
|
"name": "datax-config",
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/bun": "latest",
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"typescript": "^5",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"packages": {
|
||||||
|
"@types/bun": ["@types/bun@1.2.18", "", { "dependencies": { "bun-types": "1.2.18" } }, "sha512-Xf6RaWVheyemaThV0kUfaAUvCNokFr+bH8Jxp+tTZfx7dAPA8z9ePnP9S9+Vspzuxxx9JRAXhnyccRj3GyCMdQ=="],
|
||||||
|
|
||||||
|
"@types/node": ["@types/node@24.0.10", "", { "dependencies": { "undici-types": "~7.8.0" } }, "sha512-ENHwaH+JIRTDIEEbDK6QSQntAYGtbvdDXnMXnZaZ6k13Du1dPMmprkEHIL7ok2Wl2aZevetwTAb5S+7yIF+enA=="],
|
||||||
|
|
||||||
|
"@types/react": ["@types/react@19.1.8", "", { "dependencies": { "csstype": "^3.0.2" } }, "sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g=="],
|
||||||
|
|
||||||
|
"bun-types": ["bun-types@1.2.18", "", { "dependencies": { "@types/node": "*" }, "peerDependencies": { "@types/react": "^19" } }, "sha512-04+Eha5NP7Z0A9YgDAzMk5PHR16ZuLVa83b26kH5+cp1qZW4F6FmAURngE7INf4tKOvCE69vYvDEwoNl1tGiWw=="],
|
||||||
|
|
||||||
|
"csstype": ["csstype@3.1.3", "", {}, "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="],
|
||||||
|
|
||||||
|
"typescript": ["typescript@5.8.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ=="],
|
||||||
|
|
||||||
|
"undici-types": ["undici-types@7.8.0", "", {}, "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw=="],
|
||||||
|
}
|
||||||
|
}
|
||||||
12
package.json
Normal file
12
package.json
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"name": "datax-config",
|
||||||
|
"module": "index.ts",
|
||||||
|
"type": "module",
|
||||||
|
"private": true,
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/bun": "latest"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"typescript": "^5"
|
||||||
|
}
|
||||||
|
}
|
||||||
127
src/datax-config.ts
Normal file
127
src/datax-config.ts
Normal file
@@ -0,0 +1,127 @@
|
|||||||
|
// 大屏设计时的配置
|
||||||
|
interface ScreenDesignTimeConfig {
|
||||||
|
// 大屏样式
|
||||||
|
style: {
|
||||||
|
width: number;
|
||||||
|
height: number;
|
||||||
|
background: string;
|
||||||
|
stretchMode: string; // 拉伸模式
|
||||||
|
};
|
||||||
|
// 组件配置
|
||||||
|
// 可以支持组件包含子组件
|
||||||
|
// 当type不是group且children非空时表示该组件有子组件
|
||||||
|
components: Array<{
|
||||||
|
id: string; // 组件id(唯一)
|
||||||
|
type: string | "group"; // 组件类型(区别于分组)
|
||||||
|
name: string; // 组件名称(可由用户定义)
|
||||||
|
parentId?: string; // 组件分组id(如果存在)
|
||||||
|
zIndex?: number; // 组件在分组中的层级
|
||||||
|
collapsed?: boolean; // 分组特有属性(当type为"group"时使用)
|
||||||
|
children: ScreenDesignTimeConfig["components"];
|
||||||
|
// 组件在画布上的布局和样式
|
||||||
|
style: {
|
||||||
|
left: number; // 组件在画布上的X轴距离
|
||||||
|
top: number; // 组件在画布上的Y轴距离
|
||||||
|
width: number; // 组件宽度
|
||||||
|
height: number; // 组件高度
|
||||||
|
rotate: number; // 组件旋转角度
|
||||||
|
visibility: string; // 组件可见性
|
||||||
|
opacity: number; // 组件透明度
|
||||||
|
pointerEvents: string; // 事件穿透
|
||||||
|
allowDrag: boolean; // 允许拖动
|
||||||
|
allowDrop: boolean; // 允许放置
|
||||||
|
};
|
||||||
|
props: {
|
||||||
|
[name: string]: any;
|
||||||
|
};
|
||||||
|
data: any; // 组件数据
|
||||||
|
dataSource: {
|
||||||
|
variableNames: Array<string>; // 关联的全局变量名称
|
||||||
|
type: "static" | "api" | "variable";
|
||||||
|
// 数据源配置
|
||||||
|
config: {
|
||||||
|
value?: any;
|
||||||
|
url?: string;
|
||||||
|
method?: "GET" | "POST";
|
||||||
|
headers?: Record<string, any>;
|
||||||
|
query?: Record<string, any>;
|
||||||
|
body?: Record<string, any>;
|
||||||
|
};
|
||||||
|
cors: boolean; // 服务器代理请求
|
||||||
|
filterIds: Array<string>;
|
||||||
|
};
|
||||||
|
// 组件交互
|
||||||
|
interaction: {
|
||||||
|
// 下游交互事件
|
||||||
|
events: Array<{
|
||||||
|
id: string;
|
||||||
|
name: string;
|
||||||
|
// 判断条件
|
||||||
|
conditions: Array<{
|
||||||
|
// 每个判断条件可以由一系列过滤器组合而成
|
||||||
|
filterIds: Array<string>;
|
||||||
|
// 交互动作
|
||||||
|
// 在配置事件动作时,先选择交互对象,再选择交互动作
|
||||||
|
// 交互对象允许多选,多选后,交互动作的范围收缩到所选交互对象共有的动作
|
||||||
|
// 如何判断一个动作是否为指定的多个交互对象所共有?动作名称与动作参数都相同
|
||||||
|
// 为什么要添加beforeAction字段?计划支持分组向内部组件分派数据,
|
||||||
|
// 即组件允许实现一个名为【更新数据】的动作(区别于【请求数据】),
|
||||||
|
// 该动作接收参数并将其直接赋值给组件数据,为了规范数据,在设计时需要在动作执行前做一些预处理
|
||||||
|
actions: {
|
||||||
|
components: Array<{
|
||||||
|
id: string; // 下游交互组件ID
|
||||||
|
name: string;
|
||||||
|
filtersReturn: any; // 与判断条件的返回值相对应
|
||||||
|
beforeAction: Array<string>; // 交互前动作(过滤器ID)
|
||||||
|
actionName: string; // 交互动作名称
|
||||||
|
params: any; // 交互动作参数
|
||||||
|
}>;
|
||||||
|
variables: Array<{
|
||||||
|
id: string;
|
||||||
|
name: string;
|
||||||
|
beforeAction: Array<string>; // 交互前动作(过滤器ID)
|
||||||
|
actionName: string; // 交互动作名称
|
||||||
|
params: any; // 交互动作参数
|
||||||
|
}>;
|
||||||
|
};
|
||||||
|
}>;
|
||||||
|
}>;
|
||||||
|
};
|
||||||
|
}>;
|
||||||
|
// 全局变量
|
||||||
|
// 如果一个全局变量的数据源是静态数据源,则只通过组件的事件去更新变量
|
||||||
|
// 如果一个全局变量的数据源是API,则尽量不要由组件事件去更新这个变量
|
||||||
|
variables: Array<{
|
||||||
|
id: string;
|
||||||
|
name: string;
|
||||||
|
description?: string;
|
||||||
|
data: any;
|
||||||
|
dataSource: {
|
||||||
|
type: "static" | "api";
|
||||||
|
// 数据源配置
|
||||||
|
config: {
|
||||||
|
value?: any;
|
||||||
|
url?: string;
|
||||||
|
method?: "GET" | "POST";
|
||||||
|
headers?: Record<string, any>;
|
||||||
|
query?: Record<string, any>;
|
||||||
|
body?: Record<string, any>;
|
||||||
|
};
|
||||||
|
cors: boolean;
|
||||||
|
filterIds: Array<string>;
|
||||||
|
};
|
||||||
|
}>;
|
||||||
|
// 过滤器
|
||||||
|
filters: Array<{
|
||||||
|
id: string;
|
||||||
|
name: string;
|
||||||
|
payload: string; // (data: any, variables: any) => Promise<any>
|
||||||
|
}>;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 组件的分类:
|
||||||
|
// 1. 数据组件:大屏中的组件
|
||||||
|
// 2. 控制组件:大屏中的悬浮组件,可拖拽,贴边时可隐藏,比如一个控制面版用于操作摄像机/录像机等设备
|
||||||
|
// 3. 反馈组件:弹窗(全局,带遮罩)
|
||||||
|
|
||||||
|
interface ScreenRuntimeConfig {}
|
||||||
1
src/index.ts
Normal file
1
src/index.ts
Normal file
@@ -0,0 +1 @@
|
|||||||
|
console.log("Hello via Bun!");
|
||||||
29
tsconfig.json
Normal file
29
tsconfig.json
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
// Environment setup & latest features
|
||||||
|
"lib": ["ESNext"],
|
||||||
|
"target": "ESNext",
|
||||||
|
"module": "Preserve",
|
||||||
|
"moduleDetection": "force",
|
||||||
|
"jsx": "react-jsx",
|
||||||
|
"allowJs": true,
|
||||||
|
|
||||||
|
// Bundler mode
|
||||||
|
"moduleResolution": "bundler",
|
||||||
|
"allowImportingTsExtensions": true,
|
||||||
|
"verbatimModuleSyntax": true,
|
||||||
|
"noEmit": true,
|
||||||
|
|
||||||
|
// Best practices
|
||||||
|
"strict": true,
|
||||||
|
"skipLibCheck": true,
|
||||||
|
"noFallthroughCasesInSwitch": true,
|
||||||
|
"noUncheckedIndexedAccess": true,
|
||||||
|
"noImplicitOverride": true,
|
||||||
|
|
||||||
|
// Some stricter flags (disabled by default)
|
||||||
|
"noUnusedLocals": false,
|
||||||
|
"noUnusedParameters": false,
|
||||||
|
"noPropertyAccessFromIndexSignature": false
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user