clickgo 3.1.2-dev11 → 3.1.3-dev12
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/dist/app/demo/app.js +0 -73
- package/dist/app/demo/config.json +109 -0
- package/dist/app/demo/form/control/button/button.js +12 -11
- package/dist/app/demo/form/control/button/button.xml +6 -6
- package/dist/app/demo/form/control/check/check.js +14 -10
- package/dist/app/demo/form/control/file/file.js +15 -13
- package/dist/app/demo/form/control/{overflow/overflow.css → flow/flow.css} +0 -0
- package/dist/app/demo/form/control/flow/flow.js +64 -0
- package/dist/app/demo/form/control/{overflow/overflow.scss → flow/flow.scss} +0 -0
- package/dist/app/demo/form/control/flow/flow.xml +101 -0
- package/dist/app/demo/form/control/form/form.js +1 -1
- package/dist/app/demo/form/control/form/form.xml +3 -3
- package/dist/app/demo/form/control/img/img.xml +2 -2
- package/dist/app/demo/form/control/list/list.js +95 -75
- package/dist/app/demo/form/control/list/list.xml +15 -11
- package/dist/app/demo/form/control/marquee/marquee.js +12 -10
- package/dist/app/demo/form/control/menu/menu.js +10 -6
- package/dist/app/demo/form/control/monaco/monaco.js +50 -60
- package/dist/app/demo/form/control/monaco/monaco.xml +6 -5
- package/dist/app/demo/form/control/property/property.js +131 -127
- package/dist/app/demo/form/control/radio/radio.js +9 -5
- package/dist/app/demo/form/control/scroll/scroll.js +16 -12
- package/dist/app/demo/form/control/scroll/scroll.xml +10 -10
- package/dist/app/demo/form/control/select/select.js +132 -71
- package/dist/app/demo/form/control/select/select.xml +69 -67
- package/dist/app/demo/form/control/tab/tab.js +21 -20
- package/dist/app/demo/form/control/tab/tab.xml +2 -2
- package/dist/app/demo/form/control/text/text.js +53 -45
- package/dist/app/demo/form/control/text/text.xml +3 -3
- package/dist/app/demo/form/control/{greatview/greatview.css → vflow/vflow.css} +0 -0
- package/dist/app/demo/form/control/vflow/vflow.js +79 -0
- package/dist/app/demo/form/control/{greatview/greatview.scss → vflow/vflow.scss} +0 -0
- package/dist/app/demo/form/control/{greatview/greatview.xml → vflow/vflow.xml} +25 -25
- package/dist/app/demo/form/event/form/form.js +58 -56
- package/dist/app/demo/form/event/form/form.xml +3 -3
- package/dist/app/demo/form/event/screen/screen.js +30 -28
- package/dist/app/demo/form/event/screen/screen.xml +2 -2
- package/dist/app/demo/form/event/task/task.js +31 -31
- package/dist/app/demo/form/event/task/task.xml +3 -3
- package/dist/app/demo/form/main.js +161 -5
- package/dist/app/demo/form/main.xml +36 -35
- package/dist/app/demo/form/method/aform/aform.xml +3 -2
- package/dist/app/demo/form/method/core/core.js +11 -8
- package/dist/app/demo/form/method/core/core.xml +2 -1
- package/dist/app/demo/form/method/dom/dom.js +91 -99
- package/dist/app/demo/form/method/dom/dom.xml +6 -7
- package/dist/app/demo/form/method/form/form.js +8 -8
- package/dist/app/demo/form/method/form/form.xml +4 -4
- package/dist/app/demo/form/method/fs/fs.js +34 -33
- package/dist/app/demo/form/method/fs/fs.xml +1 -1
- package/dist/app/demo/form/method/fs/text.js +12 -12
- package/dist/app/demo/form/method/native/native.js +50 -0
- package/dist/app/demo/form/method/native/native.xml +12 -0
- package/dist/app/demo/form/method/system/system.js +50 -0
- package/dist/app/demo/form/method/system/system.xml +11 -0
- package/dist/app/demo/form/method/task/task.js +59 -61
- package/dist/app/demo/form/method/task/task.xml +4 -6
- package/dist/app/demo/form/method/theme/theme.js +14 -14
- package/dist/app/demo/form/method/tool/tool.js +29 -28
- package/dist/app/demo/form/method/tool/tool.xml +3 -3
- package/dist/app/demo/form/method/zip/zip.js +46 -41
- package/dist/app/demo/form/method/zip/zip.xml +1 -1
- package/dist/app/task/app.js +0 -25
- package/dist/app/task/config.json +29 -0
- package/dist/app/task/form/bar/bar.js +1 -1
- package/dist/app/task/form/bar/bar.xml +1 -1
- package/dist/clickgo.js +1 -1
- package/dist/clickgo.ts +1 -1
- package/dist/control/common.cgc +0 -0
- package/dist/control/form.cgc +0 -0
- package/dist/control/monaco.cgc +0 -0
- package/dist/control/property.cgc +0 -0
- package/dist/control/task.cgc +0 -0
- package/dist/global.css +1 -1
- package/dist/index.js +3 -3
- package/dist/index.ts +3 -3
- package/dist/lib/control.js +70 -104
- package/dist/lib/control.ts +97 -123
- package/dist/lib/core.js +108 -252
- package/dist/lib/core.ts +122 -268
- package/dist/lib/dom.js +564 -483
- package/dist/lib/dom.ts +703 -546
- package/dist/lib/form.js +146 -138
- package/dist/lib/form.ts +108 -86
- package/dist/lib/fs.js +1 -1
- package/dist/lib/fs.ts +1 -1
- package/dist/lib/native.js +135 -8
- package/dist/lib/native.ts +175 -11
- package/dist/lib/task.js +294 -158
- package/dist/lib/task.ts +326 -172
- package/dist/lib/tool.js +48 -1
- package/dist/lib/tool.ts +61 -0
- package/dist/lib/zip.ts +2 -0
- package/dist/theme/familiar.cgt +0 -0
- package/package.json +1 -1
- package/types/index.d.ts +23 -24
- package/dist/app/demo/form/control/greatview/greatview.js +0 -92
- package/dist/app/demo/form/control/overflow/overflow.js +0 -70
- package/dist/app/demo/form/control/overflow/overflow.xml +0 -98
- package/dist/app/demo/form/control/view/view.css +0 -1
- package/dist/app/demo/form/control/view/view.js +0 -73
- package/dist/app/demo/form/control/view/view.scss +0 -18
- package/dist/app/demo/form/control/view/view.xml +0 -94
package/dist/lib/control.ts
CHANGED
|
@@ -162,6 +162,45 @@ export abstract class AbstractControl {
|
|
|
162
162
|
/** --- 组件参数,由用户定义重写 --- */
|
|
163
163
|
public readonly props = {};
|
|
164
164
|
|
|
165
|
+
/** --- 组件的子插槽 --- */
|
|
166
|
+
public readonly slots: Record<string, any> = {};
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* --- 获取 props 中的 boolean 类型的值 ----
|
|
170
|
+
*/
|
|
171
|
+
public get propBoolean() {
|
|
172
|
+
return (name: keyof this['props']): boolean => {
|
|
173
|
+
return tool.getBoolean((this.props as any)[name]);
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* --- 获取 props 中的 number 类型的值 ----
|
|
179
|
+
*/
|
|
180
|
+
public get propNumber() {
|
|
181
|
+
return (name: keyof this['props']): number => {
|
|
182
|
+
return tool.getNumber((this.props as any)[name]);
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* --- 获取 props 中的 int 类型的值 ----
|
|
188
|
+
*/
|
|
189
|
+
public get propInt() {
|
|
190
|
+
return (name: keyof this['props']): number => {
|
|
191
|
+
return Math.round(this.propNumber(name));
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* --- 获取 props 中的 array 类型的值 ----
|
|
197
|
+
*/
|
|
198
|
+
public get propArray() {
|
|
199
|
+
return (name: keyof this['props']): any[] => {
|
|
200
|
+
return tool.getArray((this.props as any)[name]);
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
|
|
165
204
|
/** --- 获取当前的 HTML DOM --- */
|
|
166
205
|
public get element(): HTMLElement {
|
|
167
206
|
return (this as any).$el;
|
|
@@ -176,36 +215,10 @@ export abstract class AbstractControl {
|
|
|
176
215
|
(this as any).$emit(name, ...v);
|
|
177
216
|
}
|
|
178
217
|
|
|
179
|
-
/**
|
|
180
|
-
* --- 获取目前现存的所有子 slots ---
|
|
181
|
-
*/
|
|
182
|
-
public get slots(): (name?: string) => types.IVNode[] {
|
|
183
|
-
return (name: string = 'default'): types.IVNode[] => {
|
|
184
|
-
const d = (this as any).$slots[name];
|
|
185
|
-
if (!d) {
|
|
186
|
-
return [];
|
|
187
|
-
}
|
|
188
|
-
const slots = [];
|
|
189
|
-
const list = d();
|
|
190
|
-
for (const item of list) {
|
|
191
|
-
if (typeof item.type === 'symbol') {
|
|
192
|
-
// --- 动态的 slot,例如 v-for 产生的 slot ---
|
|
193
|
-
for (const item2 of item.children) {
|
|
194
|
-
slots.push(item2);
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
else {
|
|
198
|
-
slots.push(item);
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
return slots;
|
|
202
|
-
};
|
|
203
|
-
}
|
|
204
|
-
|
|
205
218
|
/**
|
|
206
219
|
* --- 获取上层控件 ---
|
|
207
220
|
*/
|
|
208
|
-
public get parent(): AbstractControl {
|
|
221
|
+
public get parent(): AbstractControl & form.AbstractForm {
|
|
209
222
|
return (this as any).$parent;
|
|
210
223
|
}
|
|
211
224
|
|
|
@@ -274,107 +287,65 @@ export async function read(blob: Blob): Promise<false | types.TControlPackage> {
|
|
|
274
287
|
}
|
|
275
288
|
/** --- 要返回的 control pkg 对象 --- */
|
|
276
289
|
const controlPkg: types.TControlPackage = {};
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
const
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
const
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
290
|
+
|
|
291
|
+
// --- 读取包 ---
|
|
292
|
+
const list = z.readDir('/');
|
|
293
|
+
for (const sub of list) {
|
|
294
|
+
if (sub.isFile) {
|
|
295
|
+
continue;
|
|
296
|
+
}
|
|
297
|
+
const configContent = await z.getContent('/' + sub.name + '/config.json');
|
|
298
|
+
if (!configContent) {
|
|
299
|
+
continue;
|
|
300
|
+
}
|
|
301
|
+
// --- 读取本条控件内容 ---
|
|
302
|
+
const config: types.IControlConfig = JSON.parse(configContent);
|
|
303
|
+
controlPkg[config.name] = {
|
|
304
|
+
'type': 'control',
|
|
305
|
+
'config': config,
|
|
306
|
+
'files': {}
|
|
291
307
|
};
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
308
|
+
// --- 读取控件包文件 ---
|
|
309
|
+
const list = z.readDir('/' + sub.name + '/', {
|
|
310
|
+
'hasChildren': true
|
|
311
|
+
});
|
|
312
|
+
for (const file of list) {
|
|
313
|
+
const pre = file.path.slice(config.name.length + 1);
|
|
314
|
+
const mime = tool.getMimeByPath(file.name);
|
|
315
|
+
if (['txt', 'json', 'js', 'css', 'xml', 'html'].includes(mime.ext)) {
|
|
316
|
+
const fab = await z.getContent(file.path + file.name, 'string');
|
|
317
|
+
if (!fab) {
|
|
318
|
+
continue;
|
|
319
|
+
}
|
|
320
|
+
controlPkg[config.name].files[pre + file.name] = fab.replace(/^\ufeff/, '');
|
|
296
321
|
}
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
322
|
+
else {
|
|
323
|
+
const fab = await z.getContent(file.path + file.name, 'arraybuffer');
|
|
324
|
+
if (!fab) {
|
|
325
|
+
continue;
|
|
301
326
|
}
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
// --- 开始读取文件 ---
|
|
305
|
-
const files: Record<string, Blob | string> = {};
|
|
306
|
-
/** --- 配置文件中的文件数量总数 --- */
|
|
307
|
-
const filesLength = Object.keys(config.files).length;
|
|
308
|
-
/** --- 已处理的文件数 --- */
|
|
309
|
-
let fileLoadedLength = 0;
|
|
310
|
-
// --- 开始加载子控件中的文件 ---
|
|
311
|
-
await new Promise<void>(function(resolve) {
|
|
312
|
-
/** --- 一个文件加载完后就执行一次 --- */
|
|
313
|
-
const loadedCb = function(): void {
|
|
314
|
-
++fileLoadedLength;
|
|
315
|
-
if (fileLoadedLength < filesLength) {
|
|
316
|
-
return;
|
|
317
|
-
}
|
|
318
|
-
// --- 加载完毕 ---
|
|
319
|
-
resolve();
|
|
320
|
-
};
|
|
321
|
-
for (const file of config.files) {
|
|
322
|
-
const mime = tool.getMimeByPath(file);
|
|
323
|
-
if (['txt', 'json', 'js', 'css', 'xml', 'html'].includes(mime.ext)) {
|
|
324
|
-
z.getContent('/' + control.name + file, 'string').then(function(fab) {
|
|
325
|
-
if (!fab) {
|
|
326
|
-
loadedCb();
|
|
327
|
-
return;
|
|
328
|
-
}
|
|
329
|
-
// --- 去除 BOM ---
|
|
330
|
-
files[file] = fab.replace(/^\ufeff/, '');
|
|
331
|
-
loadedCb();
|
|
332
|
-
}).catch(function() {
|
|
333
|
-
loadedCb();
|
|
334
|
-
});
|
|
335
|
-
}
|
|
336
|
-
else {
|
|
337
|
-
z.getContent('/' + control.name + file, 'arraybuffer').then(function(fab) {
|
|
338
|
-
if (!fab) {
|
|
339
|
-
loadedCb();
|
|
340
|
-
return;
|
|
341
|
-
}
|
|
342
|
-
files[file] = new Blob([fab], {
|
|
343
|
-
'type': mime.mime
|
|
344
|
-
});
|
|
345
|
-
loadedCb();
|
|
346
|
-
}).catch(function() {
|
|
347
|
-
loadedCb();
|
|
348
|
-
});
|
|
349
|
-
}
|
|
350
|
-
}
|
|
327
|
+
controlPkg[config.name].files[pre + file.name] = new Blob([fab], {
|
|
328
|
+
'type': mime.mime
|
|
351
329
|
});
|
|
352
|
-
|
|
353
|
-
'type': 'control',
|
|
354
|
-
'config': config,
|
|
355
|
-
'files': files
|
|
356
|
-
};
|
|
357
|
-
controlCb();
|
|
358
|
-
}).catch(function() {
|
|
359
|
-
controlCb();
|
|
360
|
-
});
|
|
330
|
+
}
|
|
361
331
|
}
|
|
362
|
-
}
|
|
332
|
+
}
|
|
363
333
|
return controlPkg;
|
|
364
334
|
}
|
|
365
335
|
|
|
366
336
|
/**
|
|
367
|
-
* --- 任务创建过程中,需要对 control
|
|
337
|
+
* --- 任务创建过程中,需要对 control 进行先行初始化,并将样式表插入到实际的任务 DOM 中 ---
|
|
368
338
|
* @param taskId 要处理的任务 ID
|
|
369
339
|
*/
|
|
370
340
|
export async function init(
|
|
371
|
-
taskId: number
|
|
372
|
-
|
|
341
|
+
taskId: number,
|
|
342
|
+
invoke: Record<string, any>
|
|
343
|
+
): Promise<number> {
|
|
373
344
|
const t = task.list[taskId];
|
|
374
345
|
if (!t) {
|
|
375
|
-
return
|
|
346
|
+
return -1;
|
|
376
347
|
}
|
|
377
|
-
for (let path of t.config.controls) {
|
|
348
|
+
for (let path of t.app.config.controls) {
|
|
378
349
|
if (!path.endsWith('.cgc')) {
|
|
379
350
|
path += '.cgc';
|
|
380
351
|
}
|
|
@@ -409,7 +380,7 @@ export async function init(
|
|
|
409
380
|
t.controls[name].layout = item.files[item.config.layout + '.html'] as string;
|
|
410
381
|
if (t.controls[name].layout === undefined) {
|
|
411
382
|
// --- 控件没有 layout 那肯定不能用 ---
|
|
412
|
-
return
|
|
383
|
+
return -2;
|
|
413
384
|
}
|
|
414
385
|
// --- 给 layout 增加 data-cg-control-xxx ---
|
|
415
386
|
t.controls[name].layout = t.controls[name].layout.replace(/^(<[a-zA-Z0-9-]+)( |>)/, '$1 data-cg-control-' + name + '$2');
|
|
@@ -440,6 +411,10 @@ export async function init(
|
|
|
440
411
|
}
|
|
441
412
|
// --- 给 event 增加包裹 ---
|
|
442
413
|
t.controls[name].layout = tool.eventsAttrWrap(t.controls[name].layout);
|
|
414
|
+
// --- 给 teleport 做处理 ---
|
|
415
|
+
if (t.controls[name].layout.includes('<teleport')) {
|
|
416
|
+
t.controls[name].layout = tool.teleportGlue(t.controls[name].layout, '{{{formId}}}');
|
|
417
|
+
}
|
|
443
418
|
// --- 检测是否有 js ---
|
|
444
419
|
let cls: any;
|
|
445
420
|
if (item.files[item.config.code + '.js']) {
|
|
@@ -448,7 +423,7 @@ export async function init(
|
|
|
448
423
|
try {
|
|
449
424
|
expo = loader.require(item.config.code, item.files, {
|
|
450
425
|
'dir': '/',
|
|
451
|
-
'invoke':
|
|
426
|
+
'invoke': invoke,
|
|
452
427
|
'preprocess': function(code: string, path: string): string {
|
|
453
428
|
// --- 屏蔽 eval 函数 ---
|
|
454
429
|
const exec = /eval\W/.exec(code);
|
|
@@ -473,12 +448,12 @@ export async function init(
|
|
|
473
448
|
}
|
|
474
449
|
catch (e: any) {
|
|
475
450
|
core.trigger('error', taskId, 0, e, e.message + '(-4)');
|
|
476
|
-
return
|
|
451
|
+
return -3;
|
|
477
452
|
}
|
|
478
453
|
if (!expo?.default) {
|
|
479
454
|
const msg = '"default" not found on "' + item.config.code + '" of "' + name + '" control.';
|
|
480
455
|
core.trigger('error', taskId, 0, new Error(msg), msg);
|
|
481
|
-
return
|
|
456
|
+
return -4;
|
|
482
457
|
}
|
|
483
458
|
cls = new expo.default();
|
|
484
459
|
}
|
|
@@ -501,6 +476,7 @@ export async function init(
|
|
|
501
476
|
const cdata = Object.entries(cls);
|
|
502
477
|
for (const item of cdata) {
|
|
503
478
|
if (item[0] === 'access') {
|
|
479
|
+
// --- access 属性不放在 data 当中 ---
|
|
504
480
|
t.controls[name].access = item[1] as any;
|
|
505
481
|
continue;
|
|
506
482
|
}
|
|
@@ -543,13 +519,11 @@ export async function init(
|
|
|
543
519
|
'content': 'Control failed to load.\nTask id: ' + t.id.toString() + '\nPath: ' + path,
|
|
544
520
|
'type': 'danger'
|
|
545
521
|
});
|
|
546
|
-
return
|
|
522
|
+
return -5;
|
|
547
523
|
}
|
|
548
524
|
}
|
|
549
525
|
}
|
|
550
|
-
|
|
551
|
-
delete t.invoke;
|
|
552
|
-
return true;
|
|
526
|
+
return 1;
|
|
553
527
|
}
|
|
554
528
|
|
|
555
529
|
/**
|
|
@@ -597,9 +571,8 @@ export function buildComponents(
|
|
|
597
571
|
});
|
|
598
572
|
}
|
|
599
573
|
};
|
|
600
|
-
// --- 为什么要用 ?.(), 因为有些控件是没有 js 文件的,没有 Control 类继承 ---
|
|
601
574
|
components['cg-' + name] = {
|
|
602
|
-
'template': control.layout,
|
|
575
|
+
'template': control.layout.replace(/{{{formId}}}/g, formId.toString()),
|
|
603
576
|
'props': control.props,
|
|
604
577
|
|
|
605
578
|
'data': function() {
|
|
@@ -615,6 +588,7 @@ export function buildComponents(
|
|
|
615
588
|
beforeCreate: control.methods.onBeforeCreate,
|
|
616
589
|
created: function() {
|
|
617
590
|
this.props = this.$props;
|
|
591
|
+
this.slots = this.$slots;
|
|
618
592
|
this.access = tool.clone(control.access);
|
|
619
593
|
this.onCreated();
|
|
620
594
|
},
|