@xtalpi/agentic-lab-skills 0.0.10 → 0.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/package.json +14 -14
- package/skills/lab-flow-designer/SKILL.md +612 -612
- package/skills/lab-flow-designer/embedded-template/SKILL.md +103 -103
- package/skills/lab-flow-designer/embedded-template/pools//345/205/245/345/217/243/346/261/240.md +21 -21
- package/skills/lab-flow-designer/embedded-template/pools//345/207/272/345/217/243/346/261/240.md +21 -21
- package/skills/lab-flow-designer/embedded-template/scripts//347/244/272/344/276/213/346/225/260/346/215/256/344/270/216/346/240/241/351/252/214/351/227/250/346/216/247.js +142 -142
- package/skills/lab-flow-designer/embedded-template/valves//347/244/272/344/276/213/346/225/260/346/215/256/344/270/216/346/240/241/351/252/214/351/227/250/346/216/247.md +114 -114
- package/skills/lab-flow-designer/references/agentic-lab-processer.md +122 -122
- package/skills/lab-flow-designer/references/agentic-lab-sdk.md +534 -361
- package/skills/lab-flow-designer/references/rhea-api/README.md +7 -7
- package/skills/lab-flow-designer/references/rhea-api/execute_process_batch.md +58 -58
- package/skills/lab-flow-designer/references/skill-package-layout.md +268 -268
- package/skills/lab-flow-designer/references//344/270/232/345/212/241/346/265/201/347/250/213/346/226/207/346/241/243/346/240/207/345/207/206.md +216 -216
- package/skills/lab-flow-designer/templates//344/270/232/345/212/241/346/265/201/347/250/213/346/226/207/346/241/243/346/250/241/346/235/277.md +192 -192
- package/skills/lab-flow-designer/templates//344/270/232/345/212/241/346/265/201/347/250/213/346/226/207/346/241/243/347/244/272/344/276/213.md +207 -207
- package/skills/lab-flow-designer/testing/test-processer.mjs +1240 -1240
- package/skills/lab-nocobase-flow-generator/SKILL.md +164 -164
- package/skills/lab-nocobase-flow-generator/examples/setting/350/241/250/350/216/267/345/217/226/345/244/226/351/203/250/346/234/215/345/212/241.js +70 -70
- package/skills/lab-nocobase-flow-generator/examples//346/237/245/350/257/242/345/214/226/345/255/246/345/223/201/344/277/241/346/201/257.js +30 -30
- package/skills/lab-nocobase-flow-generator/references/doc-standard.md +84 -84
- package/skills/lab-nocobase-flow-generator/references/runtime-api.md +224 -224
- package/skills/lab-nocobase-flow-generator/templates//350/204/232/346/234/254/351/200/273/350/276/221/346/226/207/346/241/243/346/250/241/346/235/277.md +121 -121
- package/skills/lab-nocobase-flow-generator/templates//350/204/232/346/234/254/351/200/273/350/276/221/346/226/207/346/241/243/347/244/272/344/276/213.md +67 -67
- package/skills/lab-orbit-component-builder/SKILL.md +353 -353
- package/skills/lab-orbit-component-builder/examples/xnb-component-template/.env.local.example +27 -27
- package/skills/lab-orbit-component-builder/examples/xnb-component-template/.eslintignore +7 -7
- package/skills/lab-orbit-component-builder/examples/xnb-component-template/.eslintrc.cjs +88 -88
- package/skills/lab-orbit-component-builder/examples/xnb-component-template/.nvmrc +1 -1
- package/skills/lab-orbit-component-builder/examples/xnb-component-template/AgenticAppAPI.md +268 -268
- package/skills/lab-orbit-component-builder/examples/xnb-component-template/Jenkinsfile +106 -106
- package/skills/lab-orbit-component-builder/examples/xnb-component-template/OrbitAPI.md +453 -453
- package/skills/lab-orbit-component-builder/examples/xnb-component-template/README.md +176 -176
- package/skills/lab-orbit-component-builder/examples/xnb-component-template/dev/public/index.html +12 -12
- package/skills/lab-orbit-component-builder/examples/xnb-component-template/dev/src/App.vue +151 -151
- package/skills/lab-orbit-component-builder/examples/xnb-component-template/dev/src/components/DevOpenerLauncher.vue +143 -143
- package/skills/lab-orbit-component-builder/examples/xnb-component-template/dev/src/global.d.ts +77 -77
- package/skills/lab-orbit-component-builder/examples/xnb-component-template/dev/src/main.ts +308 -308
- package/skills/lab-orbit-component-builder/examples/xnb-component-template/dev/src/mockXNBBitable.ts +119 -119
- package/skills/lab-orbit-component-builder/examples/xnb-component-template/dev/src/shims-vue.d.ts +6 -6
- package/skills/lab-orbit-component-builder/examples/xnb-component-template/dev/src/utils/devOpenerHost.ts +75 -75
- package/skills/lab-orbit-component-builder/examples/xnb-component-template/index.html +13 -13
- package/skills/lab-orbit-component-builder/examples/xnb-component-template/package.json +60 -60
- package/skills/lab-orbit-component-builder/examples/xnb-component-template/src/api/agenticlabTickets.ts +110 -110
- package/skills/lab-orbit-component-builder/examples/xnb-component-template/src/entries/bitable.ts +4 -4
- package/skills/lab-orbit-component-builder/examples/xnb-component-template/src/entries/custom-page.ts +4 -4
- package/skills/lab-orbit-component-builder/examples/xnb-component-template/src/index.ts +1 -1
- package/skills/lab-orbit-component-builder/examples/xnb-component-template/src/styles/orbit-quasar-host.scss +19 -19
- package/skills/lab-orbit-component-builder/examples/xnb-component-template/src/types/context.ts +15 -15
- package/skills/lab-orbit-component-builder/examples/xnb-component-template/src/types/xnb-context.ts +70 -70
- package/skills/lab-orbit-component-builder/examples/xnb-component-template/src/use/useBitablePage.ts +189 -189
- package/skills/lab-orbit-component-builder/examples/xnb-component-template/src/use/useSuperCellDemo.ts +257 -257
- package/skills/lab-orbit-component-builder/examples/xnb-component-template/src/use/useSuperTableBitableLifecycle.ts +555 -555
- package/skills/lab-orbit-component-builder/examples/xnb-component-template/src/utils/openerInitParams.ts +158 -158
- package/skills/lab-orbit-component-builder/examples/xnb-component-template/src/utils/openerTicketIds.ts +32 -32
- package/skills/lab-orbit-component-builder/examples/xnb-component-template/src/utils/orbitHttpClient.ts +110 -110
- package/skills/lab-orbit-component-builder/examples/xnb-component-template/src/utils/request.ts +92 -92
- package/skills/lab-orbit-component-builder/examples/xnb-component-template/src/views/bitable.vue +67 -67
- package/skills/lab-orbit-component-builder/examples/xnb-component-template/src/views/custom-page.vue +140 -140
- package/skills/lab-orbit-component-builder/examples/xnb-component-template/tsconfig.json +45 -45
- package/skills/lab-orbit-component-builder/examples/xnb-component-template/vite.config.ts +170 -170
- package/skills/lab-orbit-component-builder/examples/xnb-component-template/vite.dev.config.ts +58 -58
- package/skills/lab-orbit-component-builder/references/flow-document-human-ui.md +65 -65
- package/skills/lab-orbit-component-builder/references/orbit-vue-conventions.md +133 -133
- package/skills/lab-orbit-component-builder/references/pool-schema-to-columns.md +67 -67
- package/skills/lab-orbit-component-builder/references/vue-template-checklist.md +179 -179
- package/skills/lab-orbit-component-builder/references/xnb-context-vue-props.md +49 -49
- package/skills/lab-orbit-component-builder/references/xnbitable-vue-parity.md +32 -32
package/skills/lab-orbit-component-builder/examples/xnb-component-template/dev/src/mockXNBBitable.ts
CHANGED
|
@@ -1,119 +1,119 @@
|
|
|
1
|
-
import type { DemoBitableSheet, XNBBitableChoreo } from '../../src/types/xnb-context'
|
|
2
|
-
|
|
3
|
-
/** 与 `useSuperTableBitableLifecycle` 中 listSub.index 对齐,便于 dev 命中子表 */
|
|
4
|
-
const DEV_DEFAULT_INDEX = 'sheet-demo'
|
|
5
|
-
const DEV_DEFAULT_NAME = '演示'
|
|
6
|
-
|
|
7
|
-
type BitableItem = { id: string; fields: Record<string, string>; visible?: boolean }
|
|
8
|
-
|
|
9
|
-
type MainBitable = {
|
|
10
|
-
index: string
|
|
11
|
-
name: string
|
|
12
|
-
row: number
|
|
13
|
-
items: BitableItem[]
|
|
14
|
-
data_columns: Array<Record<string, unknown>>
|
|
15
|
-
config: Record<string, unknown>
|
|
16
|
-
xnb_show_sheetbar?: boolean
|
|
17
|
-
xnb_hide_statisticbar?: boolean
|
|
18
|
-
xnb_hide_toolbar?: boolean
|
|
19
|
-
xnb_hide_formulaBar?: boolean
|
|
20
|
-
xnb_excel_with_bg?: boolean
|
|
21
|
-
xnb_height?: string
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Dev 专用:模拟宿主注入的 XNBBitable,便于 `bitable` 视图演练
|
|
26
|
-
* `new XNBBitable({ bookPath, cellUid })` 与 `getSubCell` / `getAllSubBitable` / `addColumns` 等调用链。
|
|
27
|
-
* 真机行为以 Orbit / 业务实现为准。
|
|
28
|
-
*/
|
|
29
|
-
export class DevXNBBitable implements XNBBitableChoreo {
|
|
30
|
-
bookPath: string
|
|
31
|
-
cellUid: string
|
|
32
|
-
|
|
33
|
-
private readonly main: MainBitable
|
|
34
|
-
|
|
35
|
-
constructor (opts: { bookPath: string; cellUid: string }) {
|
|
36
|
-
this.bookPath = opts.bookPath
|
|
37
|
-
this.cellUid = opts.cellUid
|
|
38
|
-
this.main = {
|
|
39
|
-
index: DEV_DEFAULT_INDEX,
|
|
40
|
-
name: DEV_DEFAULT_NAME,
|
|
41
|
-
row: 200,
|
|
42
|
-
items: [],
|
|
43
|
-
data_columns: [],
|
|
44
|
-
config: {}
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
async getSubCell (): Promise<string | null> {
|
|
49
|
-
return `mock-subcell::${this.cellUid}`
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
async getAllSubBitable (refresh?: boolean): Promise<DemoBitableSheet[]> {
|
|
53
|
-
if (refresh === true) {
|
|
54
|
-
/* dev mock 不区分 refresh;与真机签名对齐 */
|
|
55
|
-
}
|
|
56
|
-
return [this.main]
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
async getSubBitable (refresh?: boolean): Promise<DemoBitableSheet> {
|
|
60
|
-
if (refresh === true) {
|
|
61
|
-
/* dev mock 不区分 refresh;与真机签名对齐 */
|
|
62
|
-
}
|
|
63
|
-
return this.main
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
async addColumns (bitable: Record<string, unknown>, cols: unknown[], extra: unknown[]): Promise<void> {
|
|
67
|
-
if (Array.isArray(extra) && extra.length > 0) {
|
|
68
|
-
/* 第三参占位;真机可能传列元数据 */
|
|
69
|
-
}
|
|
70
|
-
const list = Array.isArray(cols) ? cols : []
|
|
71
|
-
const prev = Array.isArray(bitable.data_columns)
|
|
72
|
-
? (bitable.data_columns as Array<Record<string, unknown>>)
|
|
73
|
-
: []
|
|
74
|
-
const offset = prev.length
|
|
75
|
-
bitable.data_columns = [
|
|
76
|
-
...prev,
|
|
77
|
-
...list.map((col: unknown, i: number) => ({
|
|
78
|
-
...(typeof col === 'object' && col !== null ? (col as Record<string, unknown>) : {}),
|
|
79
|
-
c: offset + i
|
|
80
|
-
}))
|
|
81
|
-
]
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
async createSubBitable (bitables: unknown[], sheetName: string): Promise<string> {
|
|
85
|
-
console.log('[DevXNBBitable] createSubBitable', sheetName, bitables)
|
|
86
|
-
const first = bitables[0] as Partial<MainBitable> | undefined
|
|
87
|
-
if (first != null) {
|
|
88
|
-
if (typeof first.index === 'string') this.main.index = first.index
|
|
89
|
-
if (typeof first.name === 'string') this.main.name = first.name
|
|
90
|
-
if (typeof first.row === 'number') this.main.row = first.row
|
|
91
|
-
if (Array.isArray(first.items)) this.main.items = [...first.items] as BitableItem[]
|
|
92
|
-
if (Array.isArray(first.data_columns)) {
|
|
93
|
-
this.main.data_columns = [...first.data_columns] as MainBitable['data_columns']
|
|
94
|
-
}
|
|
95
|
-
if (first.config != null && typeof first.config === 'object' && !Array.isArray(first.config)) {
|
|
96
|
-
this.main.config = { ...(first.config as Record<string, unknown>) }
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
return `mock-created-${sheetName}`
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
async updateSubBitable (bitables: unknown[], _opts?: Record<string, unknown>): Promise<void> {
|
|
103
|
-
const first = bitables[0] as Partial<MainBitable> | undefined
|
|
104
|
-
if (first == null) return
|
|
105
|
-
if (first !== this.main) {
|
|
106
|
-
if (Array.isArray(first.items)) this.main.items = [...first.items] as BitableItem[]
|
|
107
|
-
if (Array.isArray(first.data_columns)) {
|
|
108
|
-
this.main.data_columns = [...first.data_columns]
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
console.log('[DevXNBBitable] updateSubBitable', bitables, _opts)
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
async delay (ms: number): Promise<void> {
|
|
115
|
-
await new Promise<void>((resolve: () => void) => {
|
|
116
|
-
setTimeout(resolve, ms)
|
|
117
|
-
})
|
|
118
|
-
}
|
|
119
|
-
}
|
|
1
|
+
import type { DemoBitableSheet, XNBBitableChoreo } from '../../src/types/xnb-context'
|
|
2
|
+
|
|
3
|
+
/** 与 `useSuperTableBitableLifecycle` 中 listSub.index 对齐,便于 dev 命中子表 */
|
|
4
|
+
const DEV_DEFAULT_INDEX = 'sheet-demo'
|
|
5
|
+
const DEV_DEFAULT_NAME = '演示'
|
|
6
|
+
|
|
7
|
+
type BitableItem = { id: string; fields: Record<string, string>; visible?: boolean }
|
|
8
|
+
|
|
9
|
+
type MainBitable = {
|
|
10
|
+
index: string
|
|
11
|
+
name: string
|
|
12
|
+
row: number
|
|
13
|
+
items: BitableItem[]
|
|
14
|
+
data_columns: Array<Record<string, unknown>>
|
|
15
|
+
config: Record<string, unknown>
|
|
16
|
+
xnb_show_sheetbar?: boolean
|
|
17
|
+
xnb_hide_statisticbar?: boolean
|
|
18
|
+
xnb_hide_toolbar?: boolean
|
|
19
|
+
xnb_hide_formulaBar?: boolean
|
|
20
|
+
xnb_excel_with_bg?: boolean
|
|
21
|
+
xnb_height?: string
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Dev 专用:模拟宿主注入的 XNBBitable,便于 `bitable` 视图演练
|
|
26
|
+
* `new XNBBitable({ bookPath, cellUid })` 与 `getSubCell` / `getAllSubBitable` / `addColumns` 等调用链。
|
|
27
|
+
* 真机行为以 Orbit / 业务实现为准。
|
|
28
|
+
*/
|
|
29
|
+
export class DevXNBBitable implements XNBBitableChoreo {
|
|
30
|
+
bookPath: string
|
|
31
|
+
cellUid: string
|
|
32
|
+
|
|
33
|
+
private readonly main: MainBitable
|
|
34
|
+
|
|
35
|
+
constructor (opts: { bookPath: string; cellUid: string }) {
|
|
36
|
+
this.bookPath = opts.bookPath
|
|
37
|
+
this.cellUid = opts.cellUid
|
|
38
|
+
this.main = {
|
|
39
|
+
index: DEV_DEFAULT_INDEX,
|
|
40
|
+
name: DEV_DEFAULT_NAME,
|
|
41
|
+
row: 200,
|
|
42
|
+
items: [],
|
|
43
|
+
data_columns: [],
|
|
44
|
+
config: {}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
async getSubCell (): Promise<string | null> {
|
|
49
|
+
return `mock-subcell::${this.cellUid}`
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
async getAllSubBitable (refresh?: boolean): Promise<DemoBitableSheet[]> {
|
|
53
|
+
if (refresh === true) {
|
|
54
|
+
/* dev mock 不区分 refresh;与真机签名对齐 */
|
|
55
|
+
}
|
|
56
|
+
return [this.main]
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
async getSubBitable (refresh?: boolean): Promise<DemoBitableSheet> {
|
|
60
|
+
if (refresh === true) {
|
|
61
|
+
/* dev mock 不区分 refresh;与真机签名对齐 */
|
|
62
|
+
}
|
|
63
|
+
return this.main
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
async addColumns (bitable: Record<string, unknown>, cols: unknown[], extra: unknown[]): Promise<void> {
|
|
67
|
+
if (Array.isArray(extra) && extra.length > 0) {
|
|
68
|
+
/* 第三参占位;真机可能传列元数据 */
|
|
69
|
+
}
|
|
70
|
+
const list = Array.isArray(cols) ? cols : []
|
|
71
|
+
const prev = Array.isArray(bitable.data_columns)
|
|
72
|
+
? (bitable.data_columns as Array<Record<string, unknown>>)
|
|
73
|
+
: []
|
|
74
|
+
const offset = prev.length
|
|
75
|
+
bitable.data_columns = [
|
|
76
|
+
...prev,
|
|
77
|
+
...list.map((col: unknown, i: number) => ({
|
|
78
|
+
...(typeof col === 'object' && col !== null ? (col as Record<string, unknown>) : {}),
|
|
79
|
+
c: offset + i
|
|
80
|
+
}))
|
|
81
|
+
]
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
async createSubBitable (bitables: unknown[], sheetName: string): Promise<string> {
|
|
85
|
+
console.log('[DevXNBBitable] createSubBitable', sheetName, bitables)
|
|
86
|
+
const first = bitables[0] as Partial<MainBitable> | undefined
|
|
87
|
+
if (first != null) {
|
|
88
|
+
if (typeof first.index === 'string') this.main.index = first.index
|
|
89
|
+
if (typeof first.name === 'string') this.main.name = first.name
|
|
90
|
+
if (typeof first.row === 'number') this.main.row = first.row
|
|
91
|
+
if (Array.isArray(first.items)) this.main.items = [...first.items] as BitableItem[]
|
|
92
|
+
if (Array.isArray(first.data_columns)) {
|
|
93
|
+
this.main.data_columns = [...first.data_columns] as MainBitable['data_columns']
|
|
94
|
+
}
|
|
95
|
+
if (first.config != null && typeof first.config === 'object' && !Array.isArray(first.config)) {
|
|
96
|
+
this.main.config = { ...(first.config as Record<string, unknown>) }
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return `mock-created-${sheetName}`
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
async updateSubBitable (bitables: unknown[], _opts?: Record<string, unknown>): Promise<void> {
|
|
103
|
+
const first = bitables[0] as Partial<MainBitable> | undefined
|
|
104
|
+
if (first == null) return
|
|
105
|
+
if (first !== this.main) {
|
|
106
|
+
if (Array.isArray(first.items)) this.main.items = [...first.items] as BitableItem[]
|
|
107
|
+
if (Array.isArray(first.data_columns)) {
|
|
108
|
+
this.main.data_columns = [...first.data_columns]
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
console.log('[DevXNBBitable] updateSubBitable', bitables, _opts)
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
async delay (ms: number): Promise<void> {
|
|
115
|
+
await new Promise<void>((resolve: () => void) => {
|
|
116
|
+
setTimeout(resolve, ms)
|
|
117
|
+
})
|
|
118
|
+
}
|
|
119
|
+
}
|
package/skills/lab-orbit-component-builder/examples/xnb-component-template/dev/src/shims-vue.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
/* eslint-disable */
|
|
2
|
-
declare module '*.vue' {
|
|
3
|
-
import type { DefineComponent } from 'vue'
|
|
4
|
-
const component: DefineComponent<{}, {}, any>
|
|
5
|
-
export default component
|
|
6
|
-
}
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
declare module '*.vue' {
|
|
3
|
+
import type { DefineComponent } from 'vue'
|
|
4
|
+
const component: DefineComponent<{}, {}, any>
|
|
5
|
+
export default component
|
|
6
|
+
}
|
|
@@ -1,75 +1,75 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Dev 联调:当前页作为 opener 宿主,子页带 `?trace=` 调用 `fetchOpenerInitPayload`。
|
|
3
|
-
* 回包格式与流程页一致:`get-data-response` + 平铺 `ticket_ids` / `valve_id`。
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { OPENER_MSG_GET_DATA_RESPONSE } from '@/utils/openerInitParams'
|
|
7
|
-
|
|
8
|
-
export const DEV_OPENER_CHILD_QUERY = 'devOpenerChild'
|
|
9
|
-
|
|
10
|
-
export function isDevOpenerChildPage (): boolean {
|
|
11
|
-
const params = new URLSearchParams(window.location.search)
|
|
12
|
-
return (
|
|
13
|
-
params.get(DEV_OPENER_CHILD_QUERY) === '1'
|
|
14
|
-
&& window.opener != null
|
|
15
|
-
&& !window.opener.closed
|
|
16
|
-
)
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export function createDevOpenerTrace (): string {
|
|
20
|
-
return `dev-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export interface DevOpenerHostHandle {
|
|
24
|
-
dispose: () => void
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
function flatFieldsFromPayload (payload: unknown): Record<string, unknown> {
|
|
28
|
-
if (payload == null || typeof payload !== 'object') return {}
|
|
29
|
-
const p = payload as Record<string, unknown>
|
|
30
|
-
const out: Record<string, unknown> = {}
|
|
31
|
-
if ('ticket_ids' in p) out.ticket_ids = p.ticket_ids
|
|
32
|
-
if ('valve_id' in p) out.valve_id = p.valve_id
|
|
33
|
-
return out
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* 监听子页 `{ msg: 'get-data', trace }`,回 `{ msg: 'get-data-response', trace, ticket_ids, valve_id }`。
|
|
38
|
-
*/
|
|
39
|
-
export function installDevOpenerHost (getPayload: () => unknown): DevOpenerHostHandle {
|
|
40
|
-
const onMessage = (e: MessageEvent): void => {
|
|
41
|
-
if (e.source == null || e.source === window) return
|
|
42
|
-
const d = e.data as Record<string, unknown> | null
|
|
43
|
-
if (d == null || typeof d !== 'object') return
|
|
44
|
-
if (d.msg !== 'get-data') return
|
|
45
|
-
const { trace } = d
|
|
46
|
-
if (typeof trace !== 'string' || trace === '') return
|
|
47
|
-
|
|
48
|
-
const flat = flatFieldsFromPayload(getPayload())
|
|
49
|
-
const child = e.source as Window
|
|
50
|
-
window.setTimeout(() => {
|
|
51
|
-
child.postMessage(
|
|
52
|
-
{ msg: OPENER_MSG_GET_DATA_RESPONSE, trace, ...flat },
|
|
53
|
-
'*'
|
|
54
|
-
)
|
|
55
|
-
console.log('[devOpenerHost] 已回包 get-data-response', { trace, ...flat })
|
|
56
|
-
}, 0)
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
window.addEventListener('message', onMessage)
|
|
60
|
-
return {
|
|
61
|
-
dispose: (): void => {
|
|
62
|
-
window.removeEventListener('message', onMessage)
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* 打开子页(同源),URL 携带 `trace` 与 `devOpenerChild=1`。
|
|
69
|
-
*/
|
|
70
|
-
export function openDevOpenerChild (trace: string): Window | null {
|
|
71
|
-
const url = new URL(window.location.href)
|
|
72
|
-
url.searchParams.set('trace', trace)
|
|
73
|
-
url.searchParams.set(DEV_OPENER_CHILD_QUERY, '1')
|
|
74
|
-
return window.open(url.toString(), `dev-opener-${trace}`)
|
|
75
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Dev 联调:当前页作为 opener 宿主,子页带 `?trace=` 调用 `fetchOpenerInitPayload`。
|
|
3
|
+
* 回包格式与流程页一致:`get-data-response` + 平铺 `ticket_ids` / `valve_id`。
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { OPENER_MSG_GET_DATA_RESPONSE } from '@/utils/openerInitParams'
|
|
7
|
+
|
|
8
|
+
export const DEV_OPENER_CHILD_QUERY = 'devOpenerChild'
|
|
9
|
+
|
|
10
|
+
export function isDevOpenerChildPage (): boolean {
|
|
11
|
+
const params = new URLSearchParams(window.location.search)
|
|
12
|
+
return (
|
|
13
|
+
params.get(DEV_OPENER_CHILD_QUERY) === '1'
|
|
14
|
+
&& window.opener != null
|
|
15
|
+
&& !window.opener.closed
|
|
16
|
+
)
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function createDevOpenerTrace (): string {
|
|
20
|
+
return `dev-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface DevOpenerHostHandle {
|
|
24
|
+
dispose: () => void
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function flatFieldsFromPayload (payload: unknown): Record<string, unknown> {
|
|
28
|
+
if (payload == null || typeof payload !== 'object') return {}
|
|
29
|
+
const p = payload as Record<string, unknown>
|
|
30
|
+
const out: Record<string, unknown> = {}
|
|
31
|
+
if ('ticket_ids' in p) out.ticket_ids = p.ticket_ids
|
|
32
|
+
if ('valve_id' in p) out.valve_id = p.valve_id
|
|
33
|
+
return out
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* 监听子页 `{ msg: 'get-data', trace }`,回 `{ msg: 'get-data-response', trace, ticket_ids, valve_id }`。
|
|
38
|
+
*/
|
|
39
|
+
export function installDevOpenerHost (getPayload: () => unknown): DevOpenerHostHandle {
|
|
40
|
+
const onMessage = (e: MessageEvent): void => {
|
|
41
|
+
if (e.source == null || e.source === window) return
|
|
42
|
+
const d = e.data as Record<string, unknown> | null
|
|
43
|
+
if (d == null || typeof d !== 'object') return
|
|
44
|
+
if (d.msg !== 'get-data') return
|
|
45
|
+
const { trace } = d
|
|
46
|
+
if (typeof trace !== 'string' || trace === '') return
|
|
47
|
+
|
|
48
|
+
const flat = flatFieldsFromPayload(getPayload())
|
|
49
|
+
const child = e.source as Window
|
|
50
|
+
window.setTimeout(() => {
|
|
51
|
+
child.postMessage(
|
|
52
|
+
{ msg: OPENER_MSG_GET_DATA_RESPONSE, trace, ...flat },
|
|
53
|
+
'*'
|
|
54
|
+
)
|
|
55
|
+
console.log('[devOpenerHost] 已回包 get-data-response', { trace, ...flat })
|
|
56
|
+
}, 0)
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
window.addEventListener('message', onMessage)
|
|
60
|
+
return {
|
|
61
|
+
dispose: (): void => {
|
|
62
|
+
window.removeEventListener('message', onMessage)
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* 打开子页(同源),URL 携带 `trace` 与 `devOpenerChild=1`。
|
|
69
|
+
*/
|
|
70
|
+
export function openDevOpenerChild (trace: string): Window | null {
|
|
71
|
+
const url = new URL(window.location.href)
|
|
72
|
+
url.searchParams.set('trace', trace)
|
|
73
|
+
url.searchParams.set(DEV_OPENER_CHILD_QUERY, '1')
|
|
74
|
+
return window.open(url.toString(), `dev-opener-${trace}`)
|
|
75
|
+
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="utf-8">
|
|
5
|
-
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
6
|
-
<meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=no">
|
|
7
|
-
<title>Xnb Component Dev</title>
|
|
8
|
-
</head>
|
|
9
|
-
<body>
|
|
10
|
-
<div id="app"></div>
|
|
11
|
-
<script type="module" src="/dev/src/main.ts"></script>
|
|
12
|
-
</body>
|
|
13
|
-
</html>
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
6
|
+
<meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=no">
|
|
7
|
+
<title>Xnb Component Dev</title>
|
|
8
|
+
</head>
|
|
9
|
+
<body>
|
|
10
|
+
<div id="app"></div>
|
|
11
|
+
<script type="module" src="/dev/src/main.ts"></script>
|
|
12
|
+
</body>
|
|
13
|
+
</html>
|
|
@@ -1,60 +1,60 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "xnbOrbitComponent",
|
|
3
|
-
"version": "0.2.0",
|
|
4
|
-
"author": "yansen.lei",
|
|
5
|
-
"main": "./dist/DemoOrbitBitable.umd.js",
|
|
6
|
-
"type": "module",
|
|
7
|
-
"engines": {
|
|
8
|
-
"node": ">=22"
|
|
9
|
-
},
|
|
10
|
-
"scripts": {
|
|
11
|
-
"dev": "vite --config vite.dev.config.ts",
|
|
12
|
-
"dev:bitable": "VITE_COMPONENT_ID=bitable vite --config vite.dev.config.ts",
|
|
13
|
-
"dev:custom-page": "VITE_COMPONENT_ID=custom-page vite --config vite.dev.config.ts",
|
|
14
|
-
"build": "vite build --mode func",
|
|
15
|
-
"build:bitable": "VITE_COMPONENT_ID=bitable vite build --mode func",
|
|
16
|
-
"build:custom-page": "VITE_COMPONENT_ID=custom-page vite build --mode func",
|
|
17
|
-
"build:all": "npm run build:bitable && npm run build:custom-page",
|
|
18
|
-
"build:es": "vite build",
|
|
19
|
-
"lint": "eslint --ext .js,.ts,.tsx,.vue src",
|
|
20
|
-
"lint:fix": "eslint --fix --ext .js,.ts,.tsx,.vue src",
|
|
21
|
-
"typecheck": "vue-tsc --noEmit"
|
|
22
|
-
},
|
|
23
|
-
"dependencies": {
|
|
24
|
-
"@vueuse/core": "^10.2.1"
|
|
25
|
-
},
|
|
26
|
-
"devDependencies": {
|
|
27
|
-
"dayjs": "^1.11.7",
|
|
28
|
-
"@quasar/extras": "^1.14.1",
|
|
29
|
-
"@quasar/vite-plugin": "1.6.0",
|
|
30
|
-
"@typescript-eslint/eslint-plugin": "^7.0.0",
|
|
31
|
-
"@typescript-eslint/parser": "^7.0.0",
|
|
32
|
-
"@vitejs/plugin-vue": "^5.0.0",
|
|
33
|
-
"@vue/compiler-sfc": "3.2.29",
|
|
34
|
-
"@xtalpi/webb-api": "0.1.0",
|
|
35
|
-
"axios": "^1.7.0",
|
|
36
|
-
"eslint": "^8.57.0",
|
|
37
|
-
"eslint-plugin-vue": "^9.28.0",
|
|
38
|
-
"lodash": "^4.17.21",
|
|
39
|
-
"quasar": "2.12.7",
|
|
40
|
-
"rollup-plugin-external-globals": "^0.13.0",
|
|
41
|
-
"sass": "~1.77.6",
|
|
42
|
-
"typescript": "~5.5.0",
|
|
43
|
-
"vue-tsc": "^2.0.0",
|
|
44
|
-
"vite": "^5.4.0",
|
|
45
|
-
"vite-plugin-compression": "^0.5.1",
|
|
46
|
-
"vite-plugin-css-injected-by-js": "^3.5.2",
|
|
47
|
-
"vue": "3.2.29"
|
|
48
|
-
},
|
|
49
|
-
"webb": {
|
|
50
|
-
"name": "DemoOrbitVueLib",
|
|
51
|
-
"type": "element",
|
|
52
|
-
"exports": [
|
|
53
|
-
{
|
|
54
|
-
"name": "View",
|
|
55
|
-
"category": "view"
|
|
56
|
-
}
|
|
57
|
-
],
|
|
58
|
-
"dependencies": {}
|
|
59
|
-
}
|
|
60
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "xnbOrbitComponent",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"author": "yansen.lei",
|
|
5
|
+
"main": "./dist/DemoOrbitBitable.umd.js",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"engines": {
|
|
8
|
+
"node": ">=22"
|
|
9
|
+
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"dev": "vite --config vite.dev.config.ts",
|
|
12
|
+
"dev:bitable": "VITE_COMPONENT_ID=bitable vite --config vite.dev.config.ts",
|
|
13
|
+
"dev:custom-page": "VITE_COMPONENT_ID=custom-page vite --config vite.dev.config.ts",
|
|
14
|
+
"build": "vite build --mode func",
|
|
15
|
+
"build:bitable": "VITE_COMPONENT_ID=bitable vite build --mode func",
|
|
16
|
+
"build:custom-page": "VITE_COMPONENT_ID=custom-page vite build --mode func",
|
|
17
|
+
"build:all": "npm run build:bitable && npm run build:custom-page",
|
|
18
|
+
"build:es": "vite build",
|
|
19
|
+
"lint": "eslint --ext .js,.ts,.tsx,.vue src",
|
|
20
|
+
"lint:fix": "eslint --fix --ext .js,.ts,.tsx,.vue src",
|
|
21
|
+
"typecheck": "vue-tsc --noEmit"
|
|
22
|
+
},
|
|
23
|
+
"dependencies": {
|
|
24
|
+
"@vueuse/core": "^10.2.1"
|
|
25
|
+
},
|
|
26
|
+
"devDependencies": {
|
|
27
|
+
"dayjs": "^1.11.7",
|
|
28
|
+
"@quasar/extras": "^1.14.1",
|
|
29
|
+
"@quasar/vite-plugin": "1.6.0",
|
|
30
|
+
"@typescript-eslint/eslint-plugin": "^7.0.0",
|
|
31
|
+
"@typescript-eslint/parser": "^7.0.0",
|
|
32
|
+
"@vitejs/plugin-vue": "^5.0.0",
|
|
33
|
+
"@vue/compiler-sfc": "3.2.29",
|
|
34
|
+
"@xtalpi/webb-api": "0.1.0",
|
|
35
|
+
"axios": "^1.7.0",
|
|
36
|
+
"eslint": "^8.57.0",
|
|
37
|
+
"eslint-plugin-vue": "^9.28.0",
|
|
38
|
+
"lodash": "^4.17.21",
|
|
39
|
+
"quasar": "2.12.7",
|
|
40
|
+
"rollup-plugin-external-globals": "^0.13.0",
|
|
41
|
+
"sass": "~1.77.6",
|
|
42
|
+
"typescript": "~5.5.0",
|
|
43
|
+
"vue-tsc": "^2.0.0",
|
|
44
|
+
"vite": "^5.4.0",
|
|
45
|
+
"vite-plugin-compression": "^0.5.1",
|
|
46
|
+
"vite-plugin-css-injected-by-js": "^3.5.2",
|
|
47
|
+
"vue": "3.2.29"
|
|
48
|
+
},
|
|
49
|
+
"webb": {
|
|
50
|
+
"name": "DemoOrbitVueLib",
|
|
51
|
+
"type": "element",
|
|
52
|
+
"exports": [
|
|
53
|
+
{
|
|
54
|
+
"name": "View",
|
|
55
|
+
"category": "view"
|
|
56
|
+
}
|
|
57
|
+
],
|
|
58
|
+
"dependencies": {}
|
|
59
|
+
}
|
|
60
|
+
}
|