@xtalpi/agentic-lab-skills 0.0.9 → 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 -593
- package/skills/lab-flow-designer/embedded-template/SKILL.md +103 -88
- package/skills/lab-flow-designer/embedded-template/pools//345/205/245/345/217/243/346/261/240.md +21 -12
- package/skills/lab-flow-designer/embedded-template/pools//345/207/272/345/217/243/346/261/240.md +21 -12
- 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 -99
- package/skills/lab-flow-designer/references/agentic-lab-processer.md +122 -78
- 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 -204
- 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 -208
- 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 -169
- 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 -197
- package/skills/lab-flow-designer/testing/test-processer.mjs +1240 -1075
- 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/src/use/useBitablePage.ts
CHANGED
|
@@ -1,189 +1,189 @@
|
|
|
1
|
-
import { computed, onMounted, ref, watch } from 'vue'
|
|
2
|
-
import type { ComputedRef, Ref } from 'vue'
|
|
3
|
-
import { useQuasar } from 'quasar'
|
|
4
|
-
import type { XnbSuperCellContext } from '@/types/xnb-context'
|
|
5
|
-
import type { OpenerInitResult } from '@/utils/openerInitParams'
|
|
6
|
-
import { fetchOpenerInitPayload } from '@/utils/openerInitParams'
|
|
7
|
-
import { useSuperTableBitableLifecycle } from '@/use/useSuperTableBitableLifecycle'
|
|
8
|
-
|
|
9
|
-
export interface UseBitablePageResult {
|
|
10
|
-
openerInitReady: Ref<boolean>
|
|
11
|
-
openerInitError: Ref<unknown>
|
|
12
|
-
openerErrorText: ComputedRef<string>
|
|
13
|
-
busyRefresh: Ref<boolean>
|
|
14
|
-
busyCheck: Ref<boolean>
|
|
15
|
-
busySubmit: Ref<boolean>
|
|
16
|
-
lastRowCount: Ref<number>
|
|
17
|
-
onRefresh: () => Promise<void>
|
|
18
|
-
onCheck: () => Promise<void>
|
|
19
|
-
onSubmit: () => Promise<void>
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* 超级表格 Cell 页:opener 初始化 + `useSuperTableBitableLifecycle`(刷新 / 检查 / 提交)。
|
|
24
|
-
*/
|
|
25
|
-
export function useBitablePage (getContext: () => XnbSuperCellContext): UseBitablePageResult {
|
|
26
|
-
const $q = useQuasar()
|
|
27
|
-
|
|
28
|
-
function confirmDataMutation (title: string, message: string): Promise<boolean> {
|
|
29
|
-
return new Promise<boolean>((resolve: (v: boolean) => void) => {
|
|
30
|
-
let settled = false
|
|
31
|
-
const finish = (v: boolean): void => {
|
|
32
|
-
if (settled) return
|
|
33
|
-
settled = true
|
|
34
|
-
resolve(v)
|
|
35
|
-
}
|
|
36
|
-
$q.dialog({
|
|
37
|
-
title,
|
|
38
|
-
message,
|
|
39
|
-
persistent: true,
|
|
40
|
-
ok: { label: '确定', color: 'primary', flat: false },
|
|
41
|
-
cancel: { label: '取消', flat: true, color: 'grey-8' }
|
|
42
|
-
})
|
|
43
|
-
.onOk(() => {
|
|
44
|
-
finish(true)
|
|
45
|
-
})
|
|
46
|
-
.onCancel(() => {
|
|
47
|
-
finish(false)
|
|
48
|
-
})
|
|
49
|
-
.onDismiss(() => {
|
|
50
|
-
finish(false)
|
|
51
|
-
})
|
|
52
|
-
})
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
const openerInit = ref<OpenerInitResult | null>(null)
|
|
56
|
-
const openerInitError = ref<unknown>(null)
|
|
57
|
-
const openerInitReady = ref(false)
|
|
58
|
-
|
|
59
|
-
const openerPayload = computed(() => {
|
|
60
|
-
if (openerInit.value?.ok === true) return openerInit.value.payload
|
|
61
|
-
return null
|
|
62
|
-
})
|
|
63
|
-
|
|
64
|
-
const openerErrorText = computed(() => '没有获得有效参数,请关闭页面重试。')
|
|
65
|
-
|
|
66
|
-
const { choreo, lastRowCount, bootstrap, refreshTable, checkRows, submitRows } = useSuperTableBitableLifecycle(
|
|
67
|
-
getContext,
|
|
68
|
-
() => openerPayload.value
|
|
69
|
-
)
|
|
70
|
-
|
|
71
|
-
const busyRefresh = ref(false)
|
|
72
|
-
const busyCheck = ref(false)
|
|
73
|
-
const busySubmit = ref(false)
|
|
74
|
-
|
|
75
|
-
async function runOpenerInit (): Promise<void> {
|
|
76
|
-
const ctx = getContext()
|
|
77
|
-
try {
|
|
78
|
-
openerInit.value = await fetchOpenerInitPayload({
|
|
79
|
-
loadingShow: () => {
|
|
80
|
-
ctx.loadingShow?.()
|
|
81
|
-
},
|
|
82
|
-
loadingHide: () => {
|
|
83
|
-
ctx.loadingHide?.()
|
|
84
|
-
},
|
|
85
|
-
notifyError: (msg: unknown, ...rest: unknown[]) => {
|
|
86
|
-
console.warn('[opener] init error:', msg, ...rest)
|
|
87
|
-
}
|
|
88
|
-
})
|
|
89
|
-
if (openerInit.value && !openerInit.value.ok) {
|
|
90
|
-
console.warn('[opener] init not ok:', openerInit.value.skipped)
|
|
91
|
-
openerInitError.value = new Error(openerInit.value.skipped || 'init-failed')
|
|
92
|
-
}
|
|
93
|
-
} catch (err) {
|
|
94
|
-
console.warn('[opener] init exception:', err)
|
|
95
|
-
openerInitError.value = err
|
|
96
|
-
} finally {
|
|
97
|
-
openerInitReady.value = true
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
let _bootstrapCellKey = ''
|
|
102
|
-
let _bootstrapping = false
|
|
103
|
-
|
|
104
|
-
async function runBootstrapSafe (): Promise<void> {
|
|
105
|
-
if (!choreo.value || _bootstrapping) return
|
|
106
|
-
const key = `${getContext().bookPath}|${getContext().cellUid}`
|
|
107
|
-
if (key === _bootstrapCellKey) return
|
|
108
|
-
_bootstrapping = true
|
|
109
|
-
_bootstrapCellKey = key
|
|
110
|
-
try {
|
|
111
|
-
await bootstrap()
|
|
112
|
-
} catch {
|
|
113
|
-
/* composable 内已 notify */
|
|
114
|
-
} finally {
|
|
115
|
-
_bootstrapping = false
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
async function onRefresh (): Promise<void> {
|
|
120
|
-
const ok = await confirmDataMutation(
|
|
121
|
-
'确认刷新',
|
|
122
|
-
'将重新拉取数据并覆盖当前表格内容,是否继续?'
|
|
123
|
-
)
|
|
124
|
-
if (!ok) return
|
|
125
|
-
busyRefresh.value = true
|
|
126
|
-
try {
|
|
127
|
-
await refreshTable({})
|
|
128
|
-
} finally {
|
|
129
|
-
busyRefresh.value = false
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
async function onCheck (): Promise<void> {
|
|
134
|
-
busyCheck.value = true
|
|
135
|
-
try {
|
|
136
|
-
await checkRows()
|
|
137
|
-
} finally {
|
|
138
|
-
busyCheck.value = false
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
async function onSubmit (): Promise<void> {
|
|
143
|
-
const ok = await confirmDataMutation(
|
|
144
|
-
'确认提交',
|
|
145
|
-
'将把当前表格中的工单提交至服务器(execution/complete),是否继续?'
|
|
146
|
-
)
|
|
147
|
-
if (!ok) return
|
|
148
|
-
busySubmit.value = true
|
|
149
|
-
try {
|
|
150
|
-
await submitRows()
|
|
151
|
-
} finally {
|
|
152
|
-
busySubmit.value = false
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
onMounted(() => {
|
|
157
|
-
runOpenerInit().catch(() => {})
|
|
158
|
-
})
|
|
159
|
-
|
|
160
|
-
watch(
|
|
161
|
-
[openerInitReady, openerPayload, choreo],
|
|
162
|
-
() => {
|
|
163
|
-
if (!openerInitReady.value || !choreo.value) return
|
|
164
|
-
runBootstrapSafe().catch(() => {})
|
|
165
|
-
},
|
|
166
|
-
{ immediate: true }
|
|
167
|
-
)
|
|
168
|
-
|
|
169
|
-
watch(
|
|
170
|
-
() => [getContext().bookPath, getContext().cellUid, getContext().XNBBitable] as const,
|
|
171
|
-
() => {
|
|
172
|
-
if (!openerInitReady.value || !choreo.value) return
|
|
173
|
-
runBootstrapSafe().catch(() => {})
|
|
174
|
-
}
|
|
175
|
-
)
|
|
176
|
-
|
|
177
|
-
return {
|
|
178
|
-
openerInitReady,
|
|
179
|
-
openerInitError,
|
|
180
|
-
openerErrorText,
|
|
181
|
-
busyRefresh,
|
|
182
|
-
busyCheck,
|
|
183
|
-
busySubmit,
|
|
184
|
-
lastRowCount,
|
|
185
|
-
onRefresh,
|
|
186
|
-
onCheck,
|
|
187
|
-
onSubmit
|
|
188
|
-
}
|
|
189
|
-
}
|
|
1
|
+
import { computed, onMounted, ref, watch } from 'vue'
|
|
2
|
+
import type { ComputedRef, Ref } from 'vue'
|
|
3
|
+
import { useQuasar } from 'quasar'
|
|
4
|
+
import type { XnbSuperCellContext } from '@/types/xnb-context'
|
|
5
|
+
import type { OpenerInitResult } from '@/utils/openerInitParams'
|
|
6
|
+
import { fetchOpenerInitPayload } from '@/utils/openerInitParams'
|
|
7
|
+
import { useSuperTableBitableLifecycle } from '@/use/useSuperTableBitableLifecycle'
|
|
8
|
+
|
|
9
|
+
export interface UseBitablePageResult {
|
|
10
|
+
openerInitReady: Ref<boolean>
|
|
11
|
+
openerInitError: Ref<unknown>
|
|
12
|
+
openerErrorText: ComputedRef<string>
|
|
13
|
+
busyRefresh: Ref<boolean>
|
|
14
|
+
busyCheck: Ref<boolean>
|
|
15
|
+
busySubmit: Ref<boolean>
|
|
16
|
+
lastRowCount: Ref<number>
|
|
17
|
+
onRefresh: () => Promise<void>
|
|
18
|
+
onCheck: () => Promise<void>
|
|
19
|
+
onSubmit: () => Promise<void>
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* 超级表格 Cell 页:opener 初始化 + `useSuperTableBitableLifecycle`(刷新 / 检查 / 提交)。
|
|
24
|
+
*/
|
|
25
|
+
export function useBitablePage (getContext: () => XnbSuperCellContext): UseBitablePageResult {
|
|
26
|
+
const $q = useQuasar()
|
|
27
|
+
|
|
28
|
+
function confirmDataMutation (title: string, message: string): Promise<boolean> {
|
|
29
|
+
return new Promise<boolean>((resolve: (v: boolean) => void) => {
|
|
30
|
+
let settled = false
|
|
31
|
+
const finish = (v: boolean): void => {
|
|
32
|
+
if (settled) return
|
|
33
|
+
settled = true
|
|
34
|
+
resolve(v)
|
|
35
|
+
}
|
|
36
|
+
$q.dialog({
|
|
37
|
+
title,
|
|
38
|
+
message,
|
|
39
|
+
persistent: true,
|
|
40
|
+
ok: { label: '确定', color: 'primary', flat: false },
|
|
41
|
+
cancel: { label: '取消', flat: true, color: 'grey-8' }
|
|
42
|
+
})
|
|
43
|
+
.onOk(() => {
|
|
44
|
+
finish(true)
|
|
45
|
+
})
|
|
46
|
+
.onCancel(() => {
|
|
47
|
+
finish(false)
|
|
48
|
+
})
|
|
49
|
+
.onDismiss(() => {
|
|
50
|
+
finish(false)
|
|
51
|
+
})
|
|
52
|
+
})
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const openerInit = ref<OpenerInitResult | null>(null)
|
|
56
|
+
const openerInitError = ref<unknown>(null)
|
|
57
|
+
const openerInitReady = ref(false)
|
|
58
|
+
|
|
59
|
+
const openerPayload = computed(() => {
|
|
60
|
+
if (openerInit.value?.ok === true) return openerInit.value.payload
|
|
61
|
+
return null
|
|
62
|
+
})
|
|
63
|
+
|
|
64
|
+
const openerErrorText = computed(() => '没有获得有效参数,请关闭页面重试。')
|
|
65
|
+
|
|
66
|
+
const { choreo, lastRowCount, bootstrap, refreshTable, checkRows, submitRows } = useSuperTableBitableLifecycle(
|
|
67
|
+
getContext,
|
|
68
|
+
() => openerPayload.value
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
const busyRefresh = ref(false)
|
|
72
|
+
const busyCheck = ref(false)
|
|
73
|
+
const busySubmit = ref(false)
|
|
74
|
+
|
|
75
|
+
async function runOpenerInit (): Promise<void> {
|
|
76
|
+
const ctx = getContext()
|
|
77
|
+
try {
|
|
78
|
+
openerInit.value = await fetchOpenerInitPayload({
|
|
79
|
+
loadingShow: () => {
|
|
80
|
+
ctx.loadingShow?.()
|
|
81
|
+
},
|
|
82
|
+
loadingHide: () => {
|
|
83
|
+
ctx.loadingHide?.()
|
|
84
|
+
},
|
|
85
|
+
notifyError: (msg: unknown, ...rest: unknown[]) => {
|
|
86
|
+
console.warn('[opener] init error:', msg, ...rest)
|
|
87
|
+
}
|
|
88
|
+
})
|
|
89
|
+
if (openerInit.value && !openerInit.value.ok) {
|
|
90
|
+
console.warn('[opener] init not ok:', openerInit.value.skipped)
|
|
91
|
+
openerInitError.value = new Error(openerInit.value.skipped || 'init-failed')
|
|
92
|
+
}
|
|
93
|
+
} catch (err) {
|
|
94
|
+
console.warn('[opener] init exception:', err)
|
|
95
|
+
openerInitError.value = err
|
|
96
|
+
} finally {
|
|
97
|
+
openerInitReady.value = true
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
let _bootstrapCellKey = ''
|
|
102
|
+
let _bootstrapping = false
|
|
103
|
+
|
|
104
|
+
async function runBootstrapSafe (): Promise<void> {
|
|
105
|
+
if (!choreo.value || _bootstrapping) return
|
|
106
|
+
const key = `${getContext().bookPath}|${getContext().cellUid}`
|
|
107
|
+
if (key === _bootstrapCellKey) return
|
|
108
|
+
_bootstrapping = true
|
|
109
|
+
_bootstrapCellKey = key
|
|
110
|
+
try {
|
|
111
|
+
await bootstrap()
|
|
112
|
+
} catch {
|
|
113
|
+
/* composable 内已 notify */
|
|
114
|
+
} finally {
|
|
115
|
+
_bootstrapping = false
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
async function onRefresh (): Promise<void> {
|
|
120
|
+
const ok = await confirmDataMutation(
|
|
121
|
+
'确认刷新',
|
|
122
|
+
'将重新拉取数据并覆盖当前表格内容,是否继续?'
|
|
123
|
+
)
|
|
124
|
+
if (!ok) return
|
|
125
|
+
busyRefresh.value = true
|
|
126
|
+
try {
|
|
127
|
+
await refreshTable({})
|
|
128
|
+
} finally {
|
|
129
|
+
busyRefresh.value = false
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
async function onCheck (): Promise<void> {
|
|
134
|
+
busyCheck.value = true
|
|
135
|
+
try {
|
|
136
|
+
await checkRows()
|
|
137
|
+
} finally {
|
|
138
|
+
busyCheck.value = false
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
async function onSubmit (): Promise<void> {
|
|
143
|
+
const ok = await confirmDataMutation(
|
|
144
|
+
'确认提交',
|
|
145
|
+
'将把当前表格中的工单提交至服务器(execution/complete),是否继续?'
|
|
146
|
+
)
|
|
147
|
+
if (!ok) return
|
|
148
|
+
busySubmit.value = true
|
|
149
|
+
try {
|
|
150
|
+
await submitRows()
|
|
151
|
+
} finally {
|
|
152
|
+
busySubmit.value = false
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
onMounted(() => {
|
|
157
|
+
runOpenerInit().catch(() => {})
|
|
158
|
+
})
|
|
159
|
+
|
|
160
|
+
watch(
|
|
161
|
+
[openerInitReady, openerPayload, choreo],
|
|
162
|
+
() => {
|
|
163
|
+
if (!openerInitReady.value || !choreo.value) return
|
|
164
|
+
runBootstrapSafe().catch(() => {})
|
|
165
|
+
},
|
|
166
|
+
{ immediate: true }
|
|
167
|
+
)
|
|
168
|
+
|
|
169
|
+
watch(
|
|
170
|
+
() => [getContext().bookPath, getContext().cellUid, getContext().XNBBitable] as const,
|
|
171
|
+
() => {
|
|
172
|
+
if (!openerInitReady.value || !choreo.value) return
|
|
173
|
+
runBootstrapSafe().catch(() => {})
|
|
174
|
+
}
|
|
175
|
+
)
|
|
176
|
+
|
|
177
|
+
return {
|
|
178
|
+
openerInitReady,
|
|
179
|
+
openerInitError,
|
|
180
|
+
openerErrorText,
|
|
181
|
+
busyRefresh,
|
|
182
|
+
busyCheck,
|
|
183
|
+
busySubmit,
|
|
184
|
+
lastRowCount,
|
|
185
|
+
onRefresh,
|
|
186
|
+
onCheck,
|
|
187
|
+
onSubmit
|
|
188
|
+
}
|
|
189
|
+
}
|