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/form.ts
CHANGED
|
@@ -23,6 +23,9 @@ import * as control from './control';
|
|
|
23
23
|
import * as fs from './fs';
|
|
24
24
|
import * as native from './native';
|
|
25
25
|
|
|
26
|
+
/** --- 当前有焦点的窗体 id --- */
|
|
27
|
+
let focusId: number | null = null;
|
|
28
|
+
|
|
26
29
|
/** --- form 相关信息 --- */
|
|
27
30
|
const info: {
|
|
28
31
|
/** --- 最后一个窗体 id --- */
|
|
@@ -76,7 +79,7 @@ const info: {
|
|
|
76
79
|
};
|
|
77
80
|
|
|
78
81
|
/** --- 窗体的抽象类 --- */
|
|
79
|
-
export class AbstractForm {
|
|
82
|
+
export abstract class AbstractForm {
|
|
80
83
|
|
|
81
84
|
/**
|
|
82
85
|
* --- 创建窗体工厂函数 ---
|
|
@@ -84,7 +87,7 @@ export class AbstractForm {
|
|
|
84
87
|
* @param layout 是否使用此参数替换 layout 值
|
|
85
88
|
*/
|
|
86
89
|
public static async create(data?: Record<string, any>, layout?: string): Promise<AbstractForm | number> {
|
|
87
|
-
const frm = new this();
|
|
90
|
+
const frm: AbstractForm = new (this as any)();
|
|
88
91
|
/** --- 要挂载的 vue 参数 --- */
|
|
89
92
|
const code: types.IFormCreateCode = {
|
|
90
93
|
'data': {},
|
|
@@ -121,6 +124,11 @@ export class AbstractForm {
|
|
|
121
124
|
/** --- class 对象类的属性列表 --- */
|
|
122
125
|
const cdata = Object.entries(frm);
|
|
123
126
|
for (const item of cdata) {
|
|
127
|
+
if (item[0] === 'access') {
|
|
128
|
+
// --- access 属性不放在 data 当中 ---
|
|
129
|
+
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
124
132
|
code.data![item[0]] = item[1];
|
|
125
133
|
}
|
|
126
134
|
if (!layout) {
|
|
@@ -229,7 +237,7 @@ export class AbstractForm {
|
|
|
229
237
|
}
|
|
230
238
|
|
|
231
239
|
/** --- layout 中 :class 的转义 --- */
|
|
232
|
-
public classPrepend(): (cla: any) => string {
|
|
240
|
+
public get classPrepend(): (cla: any) => string {
|
|
233
241
|
return (cla: any): string => {
|
|
234
242
|
if (typeof cla !== 'string') {
|
|
235
243
|
return cla;
|
|
@@ -239,15 +247,18 @@ export class AbstractForm {
|
|
|
239
247
|
};
|
|
240
248
|
}
|
|
241
249
|
|
|
250
|
+
/** --- 当前窗体是否和 native 的实体窗体大小、状态同步 --- */
|
|
251
|
+
public isNativeSync: boolean = false;
|
|
252
|
+
|
|
242
253
|
/**
|
|
243
254
|
* --- 监视变动 ---
|
|
244
255
|
* @param name 监视的属性
|
|
245
256
|
* @param cb 回调
|
|
246
257
|
* @param opt 参数
|
|
247
258
|
*/
|
|
248
|
-
public watch<T extends this, TK extends keyof T>(
|
|
249
|
-
name: TK,
|
|
250
|
-
cb: (val: T[TK], old: T[TK]) => void | Promise<void>,
|
|
259
|
+
public watch<T extends this, TK extends keyof T, TR>(
|
|
260
|
+
name: TK | (() => TR),
|
|
261
|
+
cb: (val: T[TK] & TR, old: T[TK] & TR) => void | Promise<void>,
|
|
251
262
|
opt: {
|
|
252
263
|
'immediate'?: boolean;
|
|
253
264
|
'deep'?: boolean;
|
|
@@ -392,6 +403,13 @@ export class AbstractForm {
|
|
|
392
403
|
v.$refs.form.$data.isShow = false;
|
|
393
404
|
}
|
|
394
405
|
|
|
406
|
+
/**
|
|
407
|
+
* --- 关闭当前窗体 ---
|
|
408
|
+
*/
|
|
409
|
+
public close(): void {
|
|
410
|
+
close(this.formId);
|
|
411
|
+
}
|
|
412
|
+
|
|
395
413
|
/**
|
|
396
414
|
* --- dialog mask 窗体返回值,在 close 之后会进行传导 ---
|
|
397
415
|
*/
|
|
@@ -411,6 +429,7 @@ export class AbstractForm {
|
|
|
411
429
|
return;
|
|
412
430
|
}
|
|
413
431
|
|
|
432
|
+
public onMounted(obj: Record<string, any>): void | Promise<void>;
|
|
414
433
|
public onMounted(): void | Promise<void> {
|
|
415
434
|
return;
|
|
416
435
|
}
|
|
@@ -547,7 +566,8 @@ const popInfo: {
|
|
|
547
566
|
|
|
548
567
|
export let simpleSystemTaskRoot: types.IVue;
|
|
549
568
|
export let launcherRoot: types.IVue;
|
|
550
|
-
|
|
569
|
+
|
|
570
|
+
export const elements: {
|
|
551
571
|
'wrap': HTMLDivElement;
|
|
552
572
|
'list': HTMLDivElement;
|
|
553
573
|
'popList': HTMLDivElement;
|
|
@@ -576,20 +596,7 @@ const elements: {
|
|
|
576
596
|
/** --- clickgo 所有的 div wrap --- */
|
|
577
597
|
this.wrap.id = 'cg-wrap';
|
|
578
598
|
document.getElementsByTagName('body')[0].appendChild(this.wrap);
|
|
579
|
-
|
|
580
|
-
// --- 只有沉浸式模式(Windows 下非 frame 的 native)才会绑定这个事件 ---
|
|
581
|
-
this.wrap.addEventListener('mouseenter', function() {
|
|
582
|
-
native.invoke('cg-mouse-ignore', native.getToken(), false);
|
|
583
|
-
});
|
|
584
|
-
this.wrap.addEventListener('mouseleave', function() {
|
|
585
|
-
native.invoke('cg-mouse-ignore', native.getToken(), true);
|
|
586
|
-
});
|
|
587
|
-
}
|
|
588
|
-
|
|
589
|
-
/** --- form list 的 div --- */
|
|
590
|
-
this.list.id = 'cg-form-list';
|
|
591
|
-
this.wrap.appendChild(this.list);
|
|
592
|
-
this.list.addEventListener('touchmove', function(e): void {
|
|
599
|
+
this.wrap.addEventListener('touchmove', function(e): void {
|
|
593
600
|
// --- 防止拖动时整个网页跟着动 ---
|
|
594
601
|
if (e.cancelable) {
|
|
595
602
|
e.preventDefault();
|
|
@@ -598,28 +605,32 @@ const elements: {
|
|
|
598
605
|
}, {
|
|
599
606
|
'passive': false
|
|
600
607
|
});
|
|
601
|
-
this.
|
|
602
|
-
// --- 防止不小心前进后退,或上下缓动滚动(Mac
|
|
608
|
+
this.wrap.addEventListener('wheel', function(e): void {
|
|
609
|
+
// --- 防止不小心前进后退,或上下缓动滚动(Mac、触摸板) ---
|
|
603
610
|
e.preventDefault();
|
|
604
611
|
}, {
|
|
605
612
|
'passive': false
|
|
606
613
|
});
|
|
607
|
-
this.
|
|
614
|
+
this.wrap.addEventListener('contextmenu', function(e): void {
|
|
608
615
|
e.preventDefault();
|
|
609
616
|
});
|
|
617
|
+
if (clickgo.isImmersion()) {
|
|
618
|
+
// --- 只有沉浸式模式(Windows 下非 frame 的 native)才会绑定这个事件 ---
|
|
619
|
+
this.wrap.addEventListener('mouseenter', function() {
|
|
620
|
+
native.invoke('cg-mouse-ignore', native.getToken(), false);
|
|
621
|
+
});
|
|
622
|
+
this.wrap.addEventListener('mouseleave', function() {
|
|
623
|
+
native.invoke('cg-mouse-ignore', native.getToken(), true);
|
|
624
|
+
});
|
|
625
|
+
}
|
|
626
|
+
|
|
627
|
+
/** --- form list 的 div --- */
|
|
628
|
+
this.list.id = 'cg-form-list';
|
|
629
|
+
this.wrap.appendChild(this.list);
|
|
610
630
|
|
|
611
631
|
/** --- pop list 的 div --- */
|
|
612
632
|
this.popList.id = 'cg-pop-list';
|
|
613
|
-
this.popList.addEventListener('contextmenu', function(e): void {
|
|
614
|
-
e.preventDefault();
|
|
615
|
-
});
|
|
616
633
|
this.wrap.appendChild(this.popList);
|
|
617
|
-
this.popList.addEventListener('touchmove', function(e): void {
|
|
618
|
-
// --- 防止拖动时整个网页跟着动 ---
|
|
619
|
-
e.preventDefault();
|
|
620
|
-
}, {
|
|
621
|
-
'passive': false
|
|
622
|
-
});
|
|
623
634
|
|
|
624
635
|
// --- 从鼠标指针处从小到大缩放然后淡化的圆圈动画特效对象 ---=
|
|
625
636
|
this.circular.id = 'cg-circular';
|
|
@@ -642,29 +653,11 @@ const elements: {
|
|
|
642
653
|
|
|
643
654
|
// --- 添加 cg-system 的 dom ---
|
|
644
655
|
this.system.id = 'cg-system';
|
|
645
|
-
this.system.addEventListener('contextmenu', function(e): void {
|
|
646
|
-
e.preventDefault();
|
|
647
|
-
});
|
|
648
656
|
this.wrap.appendChild(this.system);
|
|
649
|
-
this.system.addEventListener('touchmove', function(e): void {
|
|
650
|
-
// --- 防止拖动时整个网页跟着动 ---
|
|
651
|
-
e.preventDefault();
|
|
652
|
-
}, {
|
|
653
|
-
'passive': false
|
|
654
|
-
});
|
|
655
657
|
|
|
656
658
|
// --- 添加 cg-simpletask 的 dom ---
|
|
657
659
|
this.simpleSystemtask.id = 'cg-simpletask';
|
|
658
|
-
this.simpleSystemtask.addEventListener('contextmenu', function(e): void {
|
|
659
|
-
e.preventDefault();
|
|
660
|
-
});
|
|
661
660
|
this.wrap.appendChild(this.simpleSystemtask);
|
|
662
|
-
this.simpleSystemtask.addEventListener('touchmove', function(e): void {
|
|
663
|
-
// --- 防止拖动时整个网页跟着动 ---
|
|
664
|
-
e.preventDefault();
|
|
665
|
-
}, {
|
|
666
|
-
'passive': false
|
|
667
|
-
});
|
|
668
661
|
const simpletaskApp = clickgo.vue.createApp({
|
|
669
662
|
'template': '<div v-for="(item, formId) of forms" class="cg-simpletask-item" @click="click(parseInt(formId))"><div v-if="item.icon" class="cg-simpletask-icon" :style="{\'background-image\': \'url(\' + item.icon + \')\'}"></div><div>{{item.title}}</div></div>',
|
|
670
663
|
'data': function() {
|
|
@@ -705,23 +698,14 @@ const elements: {
|
|
|
705
698
|
|
|
706
699
|
// --- cg-launcher ---
|
|
707
700
|
this.launcher.id = 'cg-launcher';
|
|
708
|
-
this.launcher.addEventListener('contextmenu', function(e): void {
|
|
709
|
-
e.preventDefault();
|
|
710
|
-
});
|
|
711
701
|
this.wrap.appendChild(this.launcher);
|
|
712
|
-
this.launcher.addEventListener('touchmove', function(e): void {
|
|
713
|
-
// --- 防止拖动时整个网页跟着动 ---
|
|
714
|
-
e.preventDefault();
|
|
715
|
-
}, {
|
|
716
|
-
'passive': false
|
|
717
|
-
});
|
|
718
702
|
// --- Vue 挂载在这里 ---
|
|
719
703
|
const waiting = function(): void {
|
|
720
704
|
// --- 必须在这里执行,要不然 computed 无法更新,因为 core 还没加载进来 ---
|
|
721
705
|
if (!core.config) {
|
|
722
706
|
setTimeout(function() {
|
|
723
707
|
waiting();
|
|
724
|
-
},
|
|
708
|
+
}, 150);
|
|
725
709
|
return;
|
|
726
710
|
}
|
|
727
711
|
const launcherApp = clickgo.vue.createApp({
|
|
@@ -1088,6 +1072,13 @@ export function getList(taskId: number): Record<string, types.IFormInfo> {
|
|
|
1088
1072
|
return list;
|
|
1089
1073
|
}
|
|
1090
1074
|
|
|
1075
|
+
/**
|
|
1076
|
+
* --- 获取当前有焦点的窗体 form id ---
|
|
1077
|
+
*/
|
|
1078
|
+
export function getFocus(): number | null {
|
|
1079
|
+
return focusId;
|
|
1080
|
+
}
|
|
1081
|
+
|
|
1091
1082
|
/**
|
|
1092
1083
|
* --- 改变 form 的焦点 class ---
|
|
1093
1084
|
* @param formId 变更后的 form id
|
|
@@ -1101,31 +1092,25 @@ export function changeFocus(formId: number = 0): void {
|
|
|
1101
1092
|
});
|
|
1102
1093
|
return;
|
|
1103
1094
|
}
|
|
1104
|
-
const
|
|
1105
|
-
if (
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
const dataFormIdNumber = parseInt(dataFormId);
|
|
1109
|
-
if (dataFormIdNumber === formId) {
|
|
1110
|
-
return;
|
|
1111
|
-
}
|
|
1112
|
-
else {
|
|
1113
|
-
const taskId = parseInt(focusElement.getAttribute('data-task-id') ?? '0');
|
|
1114
|
-
const t = task.list[taskId];
|
|
1115
|
-
t.forms[dataFormIdNumber].vapp._container.removeAttribute('data-form-focus');
|
|
1116
|
-
t.forms[dataFormIdNumber].vroot._formFocus = false;
|
|
1117
|
-
// --- 触发 formBlurred 事件 ---
|
|
1118
|
-
core.trigger('formBlurred', taskId, dataFormIdNumber);
|
|
1119
|
-
}
|
|
1095
|
+
const dataFormId = getFocus();
|
|
1096
|
+
if (dataFormId) {
|
|
1097
|
+
if (dataFormId === formId) {
|
|
1098
|
+
return;
|
|
1120
1099
|
}
|
|
1121
1100
|
else {
|
|
1122
|
-
|
|
1101
|
+
const t = task.list[task.getFocus()!];
|
|
1102
|
+
t.forms[dataFormId].vapp._container.removeAttribute('data-form-focus');
|
|
1103
|
+
t.forms[dataFormId].vroot._formFocus = false;
|
|
1104
|
+
// --- 触发 formBlurred 事件 ---
|
|
1105
|
+
core.trigger('formBlurred', t.id, dataFormId);
|
|
1123
1106
|
}
|
|
1124
1107
|
}
|
|
1108
|
+
focusId = null;
|
|
1109
|
+
task.setFocus();
|
|
1125
1110
|
if (formId === 0) {
|
|
1126
1111
|
return;
|
|
1127
1112
|
}
|
|
1128
|
-
const el =
|
|
1113
|
+
const el = elements.list.querySelector(`.cg-form-wrap[data-form-id='${formId}']`);
|
|
1129
1114
|
if (!el) {
|
|
1130
1115
|
return;
|
|
1131
1116
|
}
|
|
@@ -1153,6 +1138,8 @@ export function changeFocus(formId: number = 0): void {
|
|
|
1153
1138
|
// --- 开启 focus ---
|
|
1154
1139
|
t.forms[dialogFormId].vapp._container.dataset.formFocus = '';
|
|
1155
1140
|
t.forms[dialogFormId].vroot._formFocus = true;
|
|
1141
|
+
focusId = dialogFormId;
|
|
1142
|
+
task.setFocus(t.id);
|
|
1156
1143
|
// --- 触发 formFocused 事件 ---
|
|
1157
1144
|
core.trigger('formFocused', taskId, dialogFormId);
|
|
1158
1145
|
// --- 判断点击的窗体是不是就是 dialog mask 窗体本身 ---
|
|
@@ -1172,6 +1159,8 @@ export function changeFocus(formId: number = 0): void {
|
|
|
1172
1159
|
// --- 正常开启 focus ---
|
|
1173
1160
|
t.forms[formId].vapp._container.dataset.formFocus = '';
|
|
1174
1161
|
t.forms[formId].vroot._formFocus = true;
|
|
1162
|
+
focusId = formId;
|
|
1163
|
+
task.setFocus(t.id);
|
|
1175
1164
|
// --- 触发 formFocused 事件 ---
|
|
1176
1165
|
core.trigger('formFocused', taskId, formId);
|
|
1177
1166
|
}
|
|
@@ -1851,6 +1840,7 @@ export function remove(formId: number): boolean {
|
|
|
1851
1840
|
}
|
|
1852
1841
|
task.list[taskId].forms[formId].vapp.unmount();
|
|
1853
1842
|
task.list[taskId].forms[formId].vapp._container.remove();
|
|
1843
|
+
elements.popList.querySelector('[data-form-id="' + formId.toString() + '"]')?.remove();
|
|
1854
1844
|
if (io > -1) {
|
|
1855
1845
|
// --- 如果是 dialog 则要执行回调 ---
|
|
1856
1846
|
task.list[taskId].forms[formId].vroot.cgDialogCallback();
|
|
@@ -1860,6 +1850,9 @@ export function remove(formId: number): boolean {
|
|
|
1860
1850
|
dom.removeStyle(taskId, 'form', formId);
|
|
1861
1851
|
// --- 触发 formRemoved 事件 ---
|
|
1862
1852
|
core.trigger('formRemoved', taskId, formId, title, icon);
|
|
1853
|
+
dom.clearWatchStyle(formId);
|
|
1854
|
+
dom.clearWatchProperty(formId);
|
|
1855
|
+
native.clear(formId, taskId);
|
|
1863
1856
|
// --- 检测是否已经没有窗体了,如果没有了的话就要结束任务了 ---
|
|
1864
1857
|
if (Object.keys(task.list[taskId].forms).length === 0) {
|
|
1865
1858
|
task.end(taskId);
|
|
@@ -1912,6 +1905,7 @@ export async function create(opt: types.IFormCreateOptions): Promise<number> {
|
|
|
1912
1905
|
}
|
|
1913
1906
|
// --- 准备相关变量 ---
|
|
1914
1907
|
let data: Record<string, any> = {};
|
|
1908
|
+
let access: Record<string, any> = {};
|
|
1915
1909
|
let methods: Record<string, any> | undefined = undefined;
|
|
1916
1910
|
let computed: Record<string, any> = {};
|
|
1917
1911
|
let beforeCreate: (() => void) | undefined = undefined;
|
|
@@ -1924,6 +1918,7 @@ export async function create(opt: types.IFormCreateOptions): Promise<number> {
|
|
|
1924
1918
|
let unmounted: (() => void) | undefined = undefined;
|
|
1925
1919
|
if (opt.code) {
|
|
1926
1920
|
data = opt.code.data ?? {};
|
|
1921
|
+
access = opt.code.access ?? {};
|
|
1927
1922
|
methods = opt.code.methods;
|
|
1928
1923
|
computed = opt.code.computed ?? {};
|
|
1929
1924
|
beforeCreate = opt.code.beforeCreate;
|
|
@@ -1965,8 +1960,13 @@ export async function create(opt: types.IFormCreateOptions): Promise<number> {
|
|
|
1965
1960
|
layout = layout.replace(/@(touchstart|touchmove|wheel)=/g, '@$1.passive=');
|
|
1966
1961
|
layout = layout.replace(/@(touchstart|touchmove|wheel)\.not=/g, '@$1=');
|
|
1967
1962
|
*/
|
|
1963
|
+
// --- 给 teleport 做处理 ---
|
|
1964
|
+
if (layout.includes('<teleport')) {
|
|
1965
|
+
layout = tool.teleportGlue(layout, formId);
|
|
1966
|
+
}
|
|
1968
1967
|
// --- 插入 HTML 到 Element ---
|
|
1969
1968
|
elements.list.insertAdjacentHTML('beforeend', `<div class="cg-form-wrap" data-form-id="${formId.toString()}" data-task-id="${opt.taskId.toString()}"></div>`);
|
|
1969
|
+
elements.popList.insertAdjacentHTML('beforeend', `<div data-form-id="${formId.toString()}" data-task-id="${opt.taskId.toString()}"></div>`);
|
|
1970
1970
|
// --- 获取刚才的 form wrap element 对象 ---
|
|
1971
1971
|
const el: HTMLElement = elements.list.children.item(elements.list.children.length - 1) as HTMLElement;
|
|
1972
1972
|
// --- 创建窗体对象 ---
|
|
@@ -2039,6 +2039,10 @@ export async function create(opt: types.IFormCreateOptions): Promise<number> {
|
|
|
2039
2039
|
return;
|
|
2040
2040
|
}
|
|
2041
2041
|
};
|
|
2042
|
+
// --- 判断是否要与 native 实体窗体大小同步 ---
|
|
2043
|
+
if (clickgo.isNative() && (formId === 1) && !clickgo.isImmersion() && !clickgo.hasFrame()) {
|
|
2044
|
+
data.isNativeSync = true;
|
|
2045
|
+
}
|
|
2042
2046
|
// --- 挂载 style ---
|
|
2043
2047
|
if (style) {
|
|
2044
2048
|
// --- 窗体的 style ---
|
|
@@ -2058,7 +2062,10 @@ export async function create(opt: types.IFormCreateOptions): Promise<number> {
|
|
|
2058
2062
|
'computed': computed,
|
|
2059
2063
|
|
|
2060
2064
|
'beforeCreate': beforeCreate,
|
|
2061
|
-
'created':
|
|
2065
|
+
'created': function(this: types.IVue) {
|
|
2066
|
+
this.access = tool.clone(access);
|
|
2067
|
+
created?.call(this);
|
|
2068
|
+
},
|
|
2062
2069
|
'beforeMount': beforeMount,
|
|
2063
2070
|
'mounted': async function(this: types.IVue) {
|
|
2064
2071
|
await this.$nextTick();
|
|
@@ -2122,20 +2129,35 @@ export async function create(opt: types.IFormCreateOptions): Promise<number> {
|
|
|
2122
2129
|
await mounted.call(rtn.vroot, opt.data);
|
|
2123
2130
|
}
|
|
2124
2131
|
catch (err: any) {
|
|
2132
|
+
// --- 窗体创建失败,做垃圾回收 ---
|
|
2125
2133
|
core.trigger('error', rtn.vroot.taskId, rtn.vroot.formId, err, 'Create form mounted error.');
|
|
2126
|
-
t.forms[formId] = undefined as any;
|
|
2127
2134
|
delete t.forms[formId];
|
|
2128
|
-
|
|
2135
|
+
try {
|
|
2136
|
+
rtn.vapp.unmount();
|
|
2137
|
+
}
|
|
2138
|
+
catch (err: any) {
|
|
2139
|
+
const msg = `Message: ${err.message}\nTask id: ${opt.taskId}\nForm id: ${formId}\nFunction: form.create, unmount.`;
|
|
2140
|
+
notify({
|
|
2141
|
+
'title': 'Form Unmount Error',
|
|
2142
|
+
'content': msg,
|
|
2143
|
+
'type': 'danger'
|
|
2144
|
+
});
|
|
2145
|
+
console.log('Form Unmount Error', msg, err);
|
|
2146
|
+
}
|
|
2129
2147
|
rtn.vapp._container.remove();
|
|
2148
|
+
elements.popList.querySelector('[data-form-id="' + rtn.vroot.formId + '"]')?.remove();
|
|
2149
|
+
dom.clearWatchStyle(rtn.vroot.formId);
|
|
2150
|
+
dom.clearWatchProperty(rtn.vroot.formId);
|
|
2151
|
+
native.clear(formId, t.id);
|
|
2152
|
+
// --- 移除 style ---
|
|
2130
2153
|
dom.removeStyle(rtn.vroot.taskId, 'form', rtn.vroot.formId);
|
|
2131
2154
|
return -8;
|
|
2132
2155
|
}
|
|
2133
2156
|
}
|
|
2134
2157
|
// --- 触发 formCreated 事件 ---
|
|
2135
2158
|
core.trigger('formCreated', opt.taskId, formId, rtn.vroot.$refs.form.title, rtn.vroot.$refs.form.iconDataUrl);
|
|
2136
|
-
// ---
|
|
2137
|
-
if (
|
|
2138
|
-
rtn.vroot.$refs.form.isNativeSync = true;
|
|
2159
|
+
// --- 同步的窗体先进行同步一下 ---
|
|
2160
|
+
if (rtn.vroot.isNativeSync) {
|
|
2139
2161
|
native.invoke('cg-set-size', native.getToken(), rtn.vroot.$refs.form.$el.offsetWidth, rtn.vroot.$refs.form.$el.offsetHeight);
|
|
2140
2162
|
window.addEventListener('resize', function(): void {
|
|
2141
2163
|
rtn.vroot.$refs.form.setPropData('width', window.innerWidth);
|
|
@@ -2192,7 +2214,7 @@ export function dialog(opt: string | types.IFormDialogOptions): Promise<string>
|
|
|
2192
2214
|
}
|
|
2193
2215
|
}
|
|
2194
2216
|
};
|
|
2195
|
-
cls.create(undefined, `<form title="${nopt.title ?? 'dialog'}" min="false" max="false" resize="false" height="0" border="${nopt.title ? 'normal' : 'plain'}" direction="v"><dialog :buttons="buttons" @select="select"${nopt.direction ? ` direction="${nopt.direction}"` : ''}>${nopt.content}</dialog></form>`).then((frm) => {
|
|
2217
|
+
cls.create(undefined, `<form title="${nopt.title ?? 'dialog'}" min="false" max="false" resize="false" height="0" width="0" border="${nopt.title ? 'normal' : 'plain'}" direction="v"><dialog :buttons="buttons" @select="select"${nopt.direction ? ` direction="${nopt.direction}"` : ''}>${nopt.content}</dialog></form>`).then((frm) => {
|
|
2196
2218
|
if (typeof frm === 'number') {
|
|
2197
2219
|
resolve('');
|
|
2198
2220
|
return;
|
package/dist/lib/fs.js
CHANGED
|
@@ -11,7 +11,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.copyFile = exports.copyFolder = exports.readDir = exports.rename = exports.chmod = exports.rmdirDeep = exports.rmdir = exports.mkdir = exports.isFile = exports.isDir = exports.stats = exports.unlink = exports.symlink = exports.readLink = exports.putContent = exports.getContent = void 0;
|
|
13
13
|
const tool = require("./tool");
|
|
14
|
-
const clickgoFiles = ['/app/', '/app/demo/', '/app/demo/app.js', '/app/demo/form/', '/app/demo/form/control/', '/app/demo/form/control/block/', '/app/demo/form/control/block/block.css', '/app/demo/form/control/block/block.xml', '/app/demo/form/control/button/', '/app/demo/form/control/button/button.css', '/app/demo/form/control/button/button.js', '/app/demo/form/control/button/button.xml', '/app/demo/form/control/check/', '/app/demo/form/control/check/check.js', '/app/demo/form/control/check/check.xml', '/app/demo/form/control/dialog/', '/app/demo/form/control/dialog/dialog.js', '/app/demo/form/control/dialog/dialog.xml', '/app/demo/form/control/file/', '/app/demo/form/control/file/file.js', '/app/demo/form/control/file/file.xml', '/app/demo/form/control/
|
|
14
|
+
const clickgoFiles = ['/app/', '/app/demo/', '/app/demo/app.js', '/app/demo/config.json', '/app/demo/form/', '/app/demo/form/control/', '/app/demo/form/control/block/', '/app/demo/form/control/block/block.css', '/app/demo/form/control/block/block.xml', '/app/demo/form/control/button/', '/app/demo/form/control/button/button.css', '/app/demo/form/control/button/button.js', '/app/demo/form/control/button/button.xml', '/app/demo/form/control/check/', '/app/demo/form/control/check/check.js', '/app/demo/form/control/check/check.xml', '/app/demo/form/control/dialog/', '/app/demo/form/control/dialog/dialog.js', '/app/demo/form/control/dialog/dialog.xml', '/app/demo/form/control/file/', '/app/demo/form/control/file/file.js', '/app/demo/form/control/file/file.xml', '/app/demo/form/control/flow/', '/app/demo/form/control/flow/flow.css', '/app/demo/form/control/flow/flow.js', '/app/demo/form/control/flow/flow.xml', '/app/demo/form/control/form/', '/app/demo/form/control/form/form.css', '/app/demo/form/control/form/form.js', '/app/demo/form/control/form/form.xml', '/app/demo/form/control/img/', '/app/demo/form/control/img/img.xml', '/app/demo/form/control/label/', '/app/demo/form/control/label/label.xml', '/app/demo/form/control/list/', '/app/demo/form/control/list/list.css', '/app/demo/form/control/list/list.js', '/app/demo/form/control/list/list.xml', '/app/demo/form/control/loading/', '/app/demo/form/control/loading/loading.xml', '/app/demo/form/control/marquee/', '/app/demo/form/control/marquee/marquee.js', '/app/demo/form/control/marquee/marquee.xml', '/app/demo/form/control/menu/', '/app/demo/form/control/menu/menu.js', '/app/demo/form/control/menu/menu.xml', '/app/demo/form/control/monaco/', '/app/demo/form/control/monaco/monaco.js', '/app/demo/form/control/monaco/monaco.xml', '/app/demo/form/control/property/', '/app/demo/form/control/property/property.js', '/app/demo/form/control/property/property.xml', '/app/demo/form/control/radio/', '/app/demo/form/control/radio/radio.js', '/app/demo/form/control/radio/radio.xml', '/app/demo/form/control/scroll/', '/app/demo/form/control/scroll/scroll.js', '/app/demo/form/control/scroll/scroll.xml', '/app/demo/form/control/select/', '/app/demo/form/control/select/select.js', '/app/demo/form/control/select/select.xml', '/app/demo/form/control/tab/', '/app/demo/form/control/tab/tab.js', '/app/demo/form/control/tab/tab.xml', '/app/demo/form/control/text/', '/app/demo/form/control/text/text.js', '/app/demo/form/control/text/text.xml', '/app/demo/form/control/vflow/', '/app/demo/form/control/vflow/vflow.css', '/app/demo/form/control/vflow/vflow.js', '/app/demo/form/control/vflow/vflow.xml', '/app/demo/form/event/', '/app/demo/form/event/form/', '/app/demo/form/event/form/form.css', '/app/demo/form/event/form/form.js', '/app/demo/form/event/form/form.xml', '/app/demo/form/event/screen/', '/app/demo/form/event/screen/screen.js', '/app/demo/form/event/screen/screen.xml', '/app/demo/form/event/task/', '/app/demo/form/event/task/task.js', '/app/demo/form/event/task/task.xml', '/app/demo/form/main.css', '/app/demo/form/main.js', '/app/demo/form/main.xml', '/app/demo/form/method/', '/app/demo/form/method/aform/', '/app/demo/form/method/aform/aform.js', '/app/demo/form/method/aform/aform.xml', '/app/demo/form/method/aform/test.xml', '/app/demo/form/method/core/', '/app/demo/form/method/core/core.js', '/app/demo/form/method/core/core.xml', '/app/demo/form/method/dom/', '/app/demo/form/method/dom/dom.css', '/app/demo/form/method/dom/dom.js', '/app/demo/form/method/dom/dom.xml', '/app/demo/form/method/form/', '/app/demo/form/method/form/form.css', '/app/demo/form/method/form/form.js', '/app/demo/form/method/form/form.xml', '/app/demo/form/method/fs/', '/app/demo/form/method/fs/fs.js', '/app/demo/form/method/fs/fs.xml', '/app/demo/form/method/fs/text.js', '/app/demo/form/method/fs/text.xml', '/app/demo/form/method/native/', '/app/demo/form/method/native/native.js', '/app/demo/form/method/native/native.xml', '/app/demo/form/method/system/', '/app/demo/form/method/system/system.js', '/app/demo/form/method/system/system.xml', '/app/demo/form/method/task/', '/app/demo/form/method/task/locale1.json', '/app/demo/form/method/task/locale2.json', '/app/demo/form/method/task/task.js', '/app/demo/form/method/task/task.xml', '/app/demo/form/method/theme/', '/app/demo/form/method/theme/theme.js', '/app/demo/form/method/theme/theme.xml', '/app/demo/form/method/tool/', '/app/demo/form/method/tool/tool.js', '/app/demo/form/method/tool/tool.xml', '/app/demo/form/method/zip/', '/app/demo/form/method/zip/zip.js', '/app/demo/form/method/zip/zip.xml', '/app/demo/global.css', '/app/demo/res/', '/app/demo/res/icon.svg', '/app/demo/res/img.jpg', '/app/demo/res/r-1.svg', '/app/demo/res/r-2.svg', '/app/demo/res/sql.svg', '/app/demo/res/txt.svg', '/app/demo/res/zip.svg', '/app/task/', '/app/task/app.js', '/app/task/config.json', '/app/task/form/', '/app/task/form/bar/', '/app/task/form/bar/bar.js', '/app/task/form/bar/bar.xml', '/app/task/form/desktop/', '/app/task/form/desktop/desktop.xml', '/app/task/locale/', '/app/task/locale/en.json', '/app/task/locale/ja.json', '/app/task/locale/sc.json', '/app/task/locale/tc.json', '/clickgo.js', '/clickgo.ts', '/control/', '/control/common.cgc', '/control/form.cgc', '/control/monaco.cgc', '/control/property.cgc', '/control/task.cgc', '/global.css', '/icon.png', '/index.js', '/index.ts', '/lib/', '/lib/control.js', '/lib/control.ts', '/lib/core.js', '/lib/core.ts', '/lib/dom.js', '/lib/dom.ts', '/lib/form.js', '/lib/form.ts', '/lib/fs.js', '/lib/fs.ts', '/lib/native.js', '/lib/native.ts', '/lib/task.js', '/lib/task.ts', '/lib/theme.js', '/lib/theme.ts', '/lib/tool.js', '/lib/tool.ts', '/lib/zip.js', '/lib/zip.ts', '/theme/', '/theme/familiar.cgt'];
|
|
15
15
|
function getContent(path, options) {
|
|
16
16
|
return __awaiter(this, void 0, void 0, function* () {
|
|
17
17
|
path = tool.urlResolve('/', path);
|
package/dist/lib/fs.ts
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
import * as types from '../../types';
|
|
9
9
|
import * as tool from './tool';
|
|
10
10
|
|
|
11
|
-
const clickgoFiles = ['/app/', '/app/demo/', '/app/demo/app.js', '/app/demo/form/', '/app/demo/form/control/', '/app/demo/form/control/block/', '/app/demo/form/control/block/block.css', '/app/demo/form/control/block/block.xml', '/app/demo/form/control/button/', '/app/demo/form/control/button/button.css', '/app/demo/form/control/button/button.js', '/app/demo/form/control/button/button.xml', '/app/demo/form/control/check/', '/app/demo/form/control/check/check.js', '/app/demo/form/control/check/check.xml', '/app/demo/form/control/dialog/', '/app/demo/form/control/dialog/dialog.js', '/app/demo/form/control/dialog/dialog.xml', '/app/demo/form/control/file/', '/app/demo/form/control/file/file.js', '/app/demo/form/control/file/file.xml', '/app/demo/form/control/
|
|
11
|
+
const clickgoFiles = ['/app/', '/app/demo/', '/app/demo/app.js', '/app/demo/config.json', '/app/demo/form/', '/app/demo/form/control/', '/app/demo/form/control/block/', '/app/demo/form/control/block/block.css', '/app/demo/form/control/block/block.xml', '/app/demo/form/control/button/', '/app/demo/form/control/button/button.css', '/app/demo/form/control/button/button.js', '/app/demo/form/control/button/button.xml', '/app/demo/form/control/check/', '/app/demo/form/control/check/check.js', '/app/demo/form/control/check/check.xml', '/app/demo/form/control/dialog/', '/app/demo/form/control/dialog/dialog.js', '/app/demo/form/control/dialog/dialog.xml', '/app/demo/form/control/file/', '/app/demo/form/control/file/file.js', '/app/demo/form/control/file/file.xml', '/app/demo/form/control/flow/', '/app/demo/form/control/flow/flow.css', '/app/demo/form/control/flow/flow.js', '/app/demo/form/control/flow/flow.xml', '/app/demo/form/control/form/', '/app/demo/form/control/form/form.css', '/app/demo/form/control/form/form.js', '/app/demo/form/control/form/form.xml', '/app/demo/form/control/img/', '/app/demo/form/control/img/img.xml', '/app/demo/form/control/label/', '/app/demo/form/control/label/label.xml', '/app/demo/form/control/list/', '/app/demo/form/control/list/list.css', '/app/demo/form/control/list/list.js', '/app/demo/form/control/list/list.xml', '/app/demo/form/control/loading/', '/app/demo/form/control/loading/loading.xml', '/app/demo/form/control/marquee/', '/app/demo/form/control/marquee/marquee.js', '/app/demo/form/control/marquee/marquee.xml', '/app/demo/form/control/menu/', '/app/demo/form/control/menu/menu.js', '/app/demo/form/control/menu/menu.xml', '/app/demo/form/control/monaco/', '/app/demo/form/control/monaco/monaco.js', '/app/demo/form/control/monaco/monaco.xml', '/app/demo/form/control/property/', '/app/demo/form/control/property/property.js', '/app/demo/form/control/property/property.xml', '/app/demo/form/control/radio/', '/app/demo/form/control/radio/radio.js', '/app/demo/form/control/radio/radio.xml', '/app/demo/form/control/scroll/', '/app/demo/form/control/scroll/scroll.js', '/app/demo/form/control/scroll/scroll.xml', '/app/demo/form/control/select/', '/app/demo/form/control/select/select.js', '/app/demo/form/control/select/select.xml', '/app/demo/form/control/tab/', '/app/demo/form/control/tab/tab.js', '/app/demo/form/control/tab/tab.xml', '/app/demo/form/control/text/', '/app/demo/form/control/text/text.js', '/app/demo/form/control/text/text.xml', '/app/demo/form/control/vflow/', '/app/demo/form/control/vflow/vflow.css', '/app/demo/form/control/vflow/vflow.js', '/app/demo/form/control/vflow/vflow.xml', '/app/demo/form/event/', '/app/demo/form/event/form/', '/app/demo/form/event/form/form.css', '/app/demo/form/event/form/form.js', '/app/demo/form/event/form/form.xml', '/app/demo/form/event/screen/', '/app/demo/form/event/screen/screen.js', '/app/demo/form/event/screen/screen.xml', '/app/demo/form/event/task/', '/app/demo/form/event/task/task.js', '/app/demo/form/event/task/task.xml', '/app/demo/form/main.css', '/app/demo/form/main.js', '/app/demo/form/main.xml', '/app/demo/form/method/', '/app/demo/form/method/aform/', '/app/demo/form/method/aform/aform.js', '/app/demo/form/method/aform/aform.xml', '/app/demo/form/method/aform/test.xml', '/app/demo/form/method/core/', '/app/demo/form/method/core/core.js', '/app/demo/form/method/core/core.xml', '/app/demo/form/method/dom/', '/app/demo/form/method/dom/dom.css', '/app/demo/form/method/dom/dom.js', '/app/demo/form/method/dom/dom.xml', '/app/demo/form/method/form/', '/app/demo/form/method/form/form.css', '/app/demo/form/method/form/form.js', '/app/demo/form/method/form/form.xml', '/app/demo/form/method/fs/', '/app/demo/form/method/fs/fs.js', '/app/demo/form/method/fs/fs.xml', '/app/demo/form/method/fs/text.js', '/app/demo/form/method/fs/text.xml', '/app/demo/form/method/native/', '/app/demo/form/method/native/native.js', '/app/demo/form/method/native/native.xml', '/app/demo/form/method/system/', '/app/demo/form/method/system/system.js', '/app/demo/form/method/system/system.xml', '/app/demo/form/method/task/', '/app/demo/form/method/task/locale1.json', '/app/demo/form/method/task/locale2.json', '/app/demo/form/method/task/task.js', '/app/demo/form/method/task/task.xml', '/app/demo/form/method/theme/', '/app/demo/form/method/theme/theme.js', '/app/demo/form/method/theme/theme.xml', '/app/demo/form/method/tool/', '/app/demo/form/method/tool/tool.js', '/app/demo/form/method/tool/tool.xml', '/app/demo/form/method/zip/', '/app/demo/form/method/zip/zip.js', '/app/demo/form/method/zip/zip.xml', '/app/demo/global.css', '/app/demo/res/', '/app/demo/res/icon.svg', '/app/demo/res/img.jpg', '/app/demo/res/r-1.svg', '/app/demo/res/r-2.svg', '/app/demo/res/sql.svg', '/app/demo/res/txt.svg', '/app/demo/res/zip.svg', '/app/task/', '/app/task/app.js', '/app/task/config.json', '/app/task/form/', '/app/task/form/bar/', '/app/task/form/bar/bar.js', '/app/task/form/bar/bar.xml', '/app/task/form/desktop/', '/app/task/form/desktop/desktop.xml', '/app/task/locale/', '/app/task/locale/en.json', '/app/task/locale/ja.json', '/app/task/locale/sc.json', '/app/task/locale/tc.json', '/clickgo.js', '/clickgo.ts', '/control/', '/control/common.cgc', '/control/form.cgc', '/control/monaco.cgc', '/control/property.cgc', '/control/task.cgc', '/global.css', '/icon.png', '/index.js', '/index.ts', '/lib/', '/lib/control.js', '/lib/control.ts', '/lib/core.js', '/lib/core.ts', '/lib/dom.js', '/lib/dom.ts', '/lib/form.js', '/lib/form.ts', '/lib/fs.js', '/lib/fs.ts', '/lib/native.js', '/lib/native.ts', '/lib/task.js', '/lib/task.ts', '/lib/theme.js', '/lib/theme.ts', '/lib/tool.js', '/lib/tool.ts', '/lib/zip.js', '/lib/zip.ts', '/theme/', '/theme/familiar.cgt'];
|
|
12
12
|
|
|
13
13
|
export async function getContent(path: string, options?: {
|
|
14
14
|
'start'?: number;
|