@gct-paas/design 0.1.6-dev.26 → 0.1.6-dev.28
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/loader.esm.min.js +2 -2
- package/es/components/mobile-container/mobile-container.d.ts +2 -2
- package/es/hooks/design-view/components/useUserOccupy.mjs +16 -7
- package/es/hooks/design-view/designer/useDesignPreview.mjs +5 -1
- package/es/hooks/design-view/layout/useToolkit.mjs +7 -0
- package/es/hooks/design-view/page/usePage.mjs +4 -0
- package/es/hooks/design-view/useDesigner.mjs +2 -0
- package/es/hooks/design-view/widget/useSelectedWidget.mjs +55 -28
- package/es/schema/field/index.mjs +17 -3
- package/package.json +9 -9
|
@@ -9,7 +9,7 @@ export declare const MobileContainer: import('vue').DefineComponent<import('vue'
|
|
|
9
9
|
};
|
|
10
10
|
title: {
|
|
11
11
|
type: StringConstructor;
|
|
12
|
-
default: () =>
|
|
12
|
+
default: () => string | undefined;
|
|
13
13
|
};
|
|
14
14
|
}>, {
|
|
15
15
|
ns: import('@gct-paas/core').Namespace;
|
|
@@ -25,7 +25,7 @@ export declare const MobileContainer: import('vue').DefineComponent<import('vue'
|
|
|
25
25
|
};
|
|
26
26
|
title: {
|
|
27
27
|
type: StringConstructor;
|
|
28
|
-
default: () =>
|
|
28
|
+
default: () => string | undefined;
|
|
29
29
|
};
|
|
30
30
|
}>> & Readonly<{}>, {
|
|
31
31
|
headerBgColor: boolean;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { PageTypeEnum } from "../../../constant/page-designer.mjs";
|
|
2
2
|
import { OCCUPY_MQTT_KEY } from "../../../constant/index.mjs";
|
|
3
|
+
import { pageInfo } from "../design-state.mjs";
|
|
3
4
|
import { throttle } from "lodash-es";
|
|
4
5
|
import { ScriptTypeEnum, t } from "@gct-paas/core";
|
|
5
6
|
import { computed, createVNode, ref } from "vue";
|
|
@@ -28,8 +29,15 @@ function _useUserOccupy() {
|
|
|
28
29
|
});
|
|
29
30
|
const unlockAvailable = computed(() => {
|
|
30
31
|
const { userId, username } = _gct.store.userInfo;
|
|
31
|
-
|
|
32
|
+
const lockUserId = lockInfo.value.id;
|
|
33
|
+
if (!lockUserId) return false;
|
|
34
|
+
return String(lockUserId) === String(userId) || username === "admin";
|
|
32
35
|
});
|
|
36
|
+
function applyLockInfo(data) {
|
|
37
|
+
lockInfo.value = data;
|
|
38
|
+
pageInfo.value.lockUserId = data.id || "";
|
|
39
|
+
pageInfo.value.lockUserName = data.name || "";
|
|
40
|
+
}
|
|
33
41
|
/** 查询占用定时器 */
|
|
34
42
|
let occupyTimer = null;
|
|
35
43
|
/** 节流 wait 是否已按真实 cacheNum 初始化 */
|
|
@@ -122,7 +130,7 @@ function _useUserOccupy() {
|
|
|
122
130
|
await _loadOccupyInfo();
|
|
123
131
|
}
|
|
124
132
|
function setLockInfo(data) {
|
|
125
|
-
|
|
133
|
+
applyLockInfo(data);
|
|
126
134
|
}
|
|
127
135
|
/**
|
|
128
136
|
* 锁定
|
|
@@ -138,10 +146,10 @@ function _useUserOccupy() {
|
|
|
138
146
|
async onOk() {
|
|
139
147
|
await _api.apaas.designerLock.postLockPage(params);
|
|
140
148
|
_gct.message.success(t("sys.operationSuccess"));
|
|
141
|
-
|
|
142
|
-
id: _gct.store.userInfo.userId,
|
|
149
|
+
applyLockInfo({
|
|
150
|
+
id: String(_gct.store.userInfo.userId),
|
|
143
151
|
name: _gct.store.userInfo.fullname
|
|
144
|
-
};
|
|
152
|
+
});
|
|
145
153
|
}
|
|
146
154
|
});
|
|
147
155
|
}
|
|
@@ -149,12 +157,13 @@ function _useUserOccupy() {
|
|
|
149
157
|
* 解锁
|
|
150
158
|
*/
|
|
151
159
|
async function unlock() {
|
|
160
|
+
if (!unlockAvailable.value) return;
|
|
152
161
|
await _api.apaas.designerLock.postUnLockPage(params);
|
|
153
162
|
_gct.message.success(t("sys.operationSuccess"));
|
|
154
|
-
|
|
163
|
+
applyLockInfo({
|
|
155
164
|
id: "",
|
|
156
165
|
name: ""
|
|
157
|
-
};
|
|
166
|
+
});
|
|
158
167
|
}
|
|
159
168
|
return {
|
|
160
169
|
initOccupy,
|
|
@@ -34,7 +34,11 @@ function useDesignPreview() {
|
|
|
34
34
|
bid: _gct.store.context.bid,
|
|
35
35
|
env: env || _gct.env.getEnv()
|
|
36
36
|
};
|
|
37
|
-
|
|
37
|
+
let hasUrl = `/PagePreview/${pid}`;
|
|
38
|
+
if (_gct.store.context.scene === "txn") {
|
|
39
|
+
matrixParams.scene = "txn";
|
|
40
|
+
hasUrl = `/TxnPagePreview/${pid}`;
|
|
41
|
+
}
|
|
38
42
|
if (platform.value === Platform.MOBILE) openWindow(buildPreviewUrl(mobileUrl, hasUrl, matrixParams), {
|
|
39
43
|
noopener: false,
|
|
40
44
|
noreferrer: false,
|
|
@@ -108,6 +108,12 @@ var instance = class ComponentUtils {
|
|
|
108
108
|
FormComponents.LeftRightColumns,
|
|
109
109
|
FormComponents.Tabs
|
|
110
110
|
],
|
|
111
|
+
[CategoryTypeEnum.BUTTON]: [
|
|
112
|
+
FormComponents.CustomButton,
|
|
113
|
+
FormComponents.SubmitButton,
|
|
114
|
+
FormComponents.RefreshButton,
|
|
115
|
+
FormComponents.ResetButton
|
|
116
|
+
],
|
|
111
117
|
[CategoryTypeEnum.DATA]: [FormComponents.DataTable, FormComponents.Descriptions]
|
|
112
118
|
}
|
|
113
119
|
};
|
|
@@ -129,6 +135,7 @@ var instance = class ComponentUtils {
|
|
|
129
135
|
if (this.groupType === ComponentUtils.TxnPageGroup) return [
|
|
130
136
|
CategoryTypeEnum.FORM,
|
|
131
137
|
CategoryTypeEnum.LAYOUT,
|
|
138
|
+
CategoryTypeEnum.BUTTON,
|
|
132
139
|
CategoryTypeEnum.DATA
|
|
133
140
|
];
|
|
134
141
|
return [
|
|
@@ -208,6 +208,9 @@ async function loadTxnPageInfo(app) {
|
|
|
208
208
|
initToolkitWidgets();
|
|
209
209
|
loadPageDesignHistoryList();
|
|
210
210
|
pagePermissions.value = await _api.apaas.permission.getList({ relationId: _gct.store.context.pid }) || [];
|
|
211
|
+
if (!pid.startsWith("___new___")) initLockState();
|
|
212
|
+
pageJson.pageConfig.unitType = "%";
|
|
213
|
+
pageJson.pageConfig.pageWidth = 80;
|
|
211
214
|
savePageJsonSnapshot();
|
|
212
215
|
}
|
|
213
216
|
/**
|
|
@@ -238,6 +241,7 @@ async function toggleTxnPageInfo(mode) {
|
|
|
238
241
|
* 初始化界面占用信息
|
|
239
242
|
*/
|
|
240
243
|
function initLockState() {
|
|
244
|
+
if (_gct.store.context.scene === "txn") return;
|
|
241
245
|
initOccupy({
|
|
242
246
|
id: _gct.store.context.pid || "",
|
|
243
247
|
type: (platform.value === Platform.WEB ? PageTypeEnum.WEB : platform.value === Platform.PAD ? PageTypeEnum.PAD : PageTypeEnum.MOBILE).toString()
|
|
@@ -52,6 +52,8 @@ function useDesigner() {
|
|
|
52
52
|
initMethodMap(pageJson.js).then((map) => {
|
|
53
53
|
methodMap.value = map;
|
|
54
54
|
});
|
|
55
|
+
if (!pageJson.pageConfig.unitType) pageJson.pageConfig.unitType = "%";
|
|
56
|
+
if (!pageJson.pageConfig.pageWidth) pageJson.pageConfig.pageWidth = 80;
|
|
55
57
|
cache.emitCache();
|
|
56
58
|
}
|
|
57
59
|
/** 检查是否可以拖拽进入的方法,比如某些组件不能拖到某些组件内 */
|
|
@@ -126,22 +126,31 @@ function useSelectedWidget() {
|
|
|
126
126
|
});
|
|
127
127
|
/**被选择的组件/弹框拥有的所有事件 */
|
|
128
128
|
const selectedAllEvents = computed(() => {
|
|
129
|
-
const { type } = selectedRef.value;
|
|
129
|
+
const { type, materialType } = selectedRef.value;
|
|
130
130
|
const widgetEvents = widgetInfo.value.events;
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
if (
|
|
134
|
-
|
|
135
|
-
|
|
131
|
+
let defaultEvents = [];
|
|
132
|
+
if (widgetEvents[type] && isArray(widgetEvents[type])) defaultEvents = widgetEvents[type];
|
|
133
|
+
if (defaultEvents.length === 0) {
|
|
134
|
+
const provider = designRegister.value.getProvider(type);
|
|
135
|
+
if (!provider) {
|
|
136
|
+
console.warn(`selectedAllEvents 未找到组件 ${type} 的设计器项配置信息,请确保该组件已正确注册`);
|
|
137
|
+
return [];
|
|
138
|
+
}
|
|
139
|
+
defaultEvents = provider.events || [];
|
|
136
140
|
}
|
|
137
|
-
if (selectedRef.value.props.fieldReadonly) return
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
+
if (selectedRef.value.props.fieldReadonly) return defaultEvents.filter((event) => event.name === "onClick");
|
|
142
|
+
if (materialType) {
|
|
143
|
+
const overrideEvents = FieldEditorOverrideRegistry.get(materialType)?.events;
|
|
144
|
+
if (overrideEvents) {
|
|
145
|
+
const items = overrideEvents(selectedRef.value, defaultEvents);
|
|
146
|
+
if (items) return items;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return defaultEvents;
|
|
141
150
|
});
|
|
142
151
|
/**被选择的组件/弹框拥有的所有属性编辑器的描述集合 */
|
|
143
152
|
const selectedAllPropEditors = computed(() => {
|
|
144
|
-
const { type } = selectedRef.value;
|
|
153
|
+
const { type, materialType } = selectedRef.value;
|
|
145
154
|
const widgetPropsEditors = widgetInfo.value.propEditors;
|
|
146
155
|
let preCompInfo;
|
|
147
156
|
if (has(selectedRef.value, "preLocation")) {
|
|
@@ -150,28 +159,46 @@ function useSelectedWidget() {
|
|
|
150
159
|
return widget.id === get(selectedRef.value, "preLocation");
|
|
151
160
|
});
|
|
152
161
|
}
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
if (
|
|
156
|
-
|
|
157
|
-
|
|
162
|
+
let defaultPropEditors = [];
|
|
163
|
+
if (widgetPropsEditors[type] && isArray(widgetPropsEditors[type])) defaultPropEditors = widgetPropsEditors[type];
|
|
164
|
+
if (defaultPropEditors.length === 0) {
|
|
165
|
+
const provider = designRegister.value.getProvider(type);
|
|
166
|
+
if (!provider) {
|
|
167
|
+
console.warn(`selectedAllPropEditors 未找到组件 ${type} 的设计器项配置信息,请确保该组件已正确注册`);
|
|
168
|
+
return [];
|
|
169
|
+
}
|
|
170
|
+
defaultPropEditors = provider.propEditors || [];
|
|
171
|
+
}
|
|
172
|
+
if (materialType) {
|
|
173
|
+
const overridePropEditor = FieldEditorOverrideRegistry.get(materialType)?.propEditor;
|
|
174
|
+
if (overridePropEditor) {
|
|
175
|
+
const items = overridePropEditor(selectedRef.value, defaultPropEditors, preCompInfo);
|
|
176
|
+
if (items) return items;
|
|
177
|
+
}
|
|
158
178
|
}
|
|
159
|
-
|
|
160
|
-
const defaultPropEditors = provider.propEditors || [];
|
|
161
|
-
return overridePropEditor?.(selectedRef.value, defaultPropEditors, preCompInfo) || defaultPropEditors;
|
|
179
|
+
return defaultPropEditors;
|
|
162
180
|
});
|
|
163
181
|
/**被选择的组件/弹框拥有的所有样式编辑器的描述集合 */
|
|
164
182
|
const selectedAllStyleEditors = computed(() => {
|
|
165
|
-
const { type } = selectedRef.value;
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
if (
|
|
169
|
-
|
|
170
|
-
|
|
183
|
+
const { type, materialType } = selectedRef.value;
|
|
184
|
+
let defaultStyleEditors = [];
|
|
185
|
+
if (widgetInfo.value.styleEditors[type] && isArray(widgetInfo.value.styleEditors[type])) defaultStyleEditors = widgetInfo.value.styleEditors[type];
|
|
186
|
+
if (defaultStyleEditors.length === 0) {
|
|
187
|
+
const provider = designRegister.value.getProvider(type);
|
|
188
|
+
if (!provider) {
|
|
189
|
+
console.warn(`selectedAllStyleEditors 未找到组件 ${type} 的设计器项配置信息,请确保该组件已正确注册`);
|
|
190
|
+
return [];
|
|
191
|
+
}
|
|
192
|
+
defaultStyleEditors = provider.styleEditors || [];
|
|
193
|
+
}
|
|
194
|
+
if (materialType) {
|
|
195
|
+
const overrideStyleEditor = FieldEditorOverrideRegistry.get(materialType)?.styleEditor;
|
|
196
|
+
if (overrideStyleEditor) {
|
|
197
|
+
const items = overrideStyleEditor(selectedRef.value, defaultStyleEditors);
|
|
198
|
+
if (items) return items;
|
|
199
|
+
}
|
|
171
200
|
}
|
|
172
|
-
|
|
173
|
-
const defaultStyleEditors = provider.styleEditors || [];
|
|
174
|
-
return overrideStyleEditor?.(selectedRef.value, defaultStyleEditors) || defaultStyleEditors;
|
|
201
|
+
return defaultStyleEditors;
|
|
175
202
|
});
|
|
176
203
|
/**被选择的组件所有设计相关配置信息集合 */
|
|
177
204
|
const selectedAllDesingerConfig = computed(() => {
|
|
@@ -29,18 +29,27 @@ function setupOverride() {
|
|
|
29
29
|
console.debug("正在注册字段编辑器覆写配置");
|
|
30
30
|
FieldEditorOverrideRegistry.register(MaterialEnum.MaterialTableField, {
|
|
31
31
|
propEditor: (selectedRef, defaultList) => {
|
|
32
|
+
if (selectedRef.isField !== true) return;
|
|
32
33
|
return FieldOverrideUtil.tableVTablePropEditor(selectedRef, defaultList);
|
|
33
34
|
},
|
|
34
|
-
styleEditor: (
|
|
35
|
+
styleEditor: (selectedRef, _defaultWidget) => {
|
|
36
|
+
if (selectedRef.isField !== true) return;
|
|
37
|
+
return runStyleEditor();
|
|
38
|
+
}
|
|
35
39
|
});
|
|
36
40
|
FieldEditorOverrideRegistry.register(MaterialEnum.MaterialEmbedTableField, {
|
|
37
41
|
propEditor: (selectedRef, defaultList) => {
|
|
42
|
+
if (selectedRef.isField !== true) return;
|
|
38
43
|
return FieldOverrideUtil.tableVTablePropEditor(selectedRef, defaultList);
|
|
39
44
|
},
|
|
40
|
-
styleEditor: (
|
|
45
|
+
styleEditor: (selectedRef, _defaultWidget) => {
|
|
46
|
+
if (selectedRef.isField !== true) return;
|
|
47
|
+
return runStyleEditor();
|
|
48
|
+
}
|
|
41
49
|
});
|
|
42
50
|
FieldEditorOverrideRegistry.register(MaterialEnum.MaterialSubTableField, {
|
|
43
51
|
propEditor: (selectedRef, defaultList, preCompInfo) => {
|
|
52
|
+
if (selectedRef.isField !== true) return;
|
|
44
53
|
if (preCompInfo && preCompInfo.props?.editMode === SUB_TABLE_EDIT_MODE.MODAL) return FieldOverrideUtil.runTableSelectPropEditor(selectedRef, "subTable2Field");
|
|
45
54
|
const { platform } = selectedRef;
|
|
46
55
|
if (platform === Platform.PAD) {
|
|
@@ -50,14 +59,19 @@ function setupOverride() {
|
|
|
50
59
|
if (platform === Platform.WEB) return webRunPropEditor(defaultList);
|
|
51
60
|
},
|
|
52
61
|
styleEditor: (selectedRef, _defaultWidget) => {
|
|
62
|
+
if (selectedRef.isField !== true) return;
|
|
53
63
|
return selectedRef.platform === Platform.WEB ? runStyleEditor() : mobileRunSubTableStyleEditor();
|
|
54
64
|
}
|
|
55
65
|
});
|
|
56
66
|
FieldEditorOverrideRegistry.register(MaterialEnum.MaterialTableSelectField, {
|
|
57
67
|
propEditor: (selectedRef, _defaultList) => {
|
|
68
|
+
if (selectedRef.isField !== true) return;
|
|
58
69
|
return FieldOverrideUtil.runTableSelectPropEditor(selectedRef);
|
|
59
70
|
},
|
|
60
|
-
styleEditor: (
|
|
71
|
+
styleEditor: (selectedRef, _defaultWidget) => {
|
|
72
|
+
if (selectedRef.isField !== true) return;
|
|
73
|
+
return runStyleEditor();
|
|
74
|
+
}
|
|
61
75
|
});
|
|
62
76
|
}
|
|
63
77
|
setupOverride();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gct-paas/design",
|
|
3
|
-
"version": "0.1.6-dev.
|
|
3
|
+
"version": "0.1.6-dev.28",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "paas 平台设计界面底包",
|
|
6
6
|
"loader": "dist/loader.esm.min.js",
|
|
@@ -51,10 +51,10 @@
|
|
|
51
51
|
"react-dnd-html5-backend": "^16.0.1",
|
|
52
52
|
"vue": "^3.5.30",
|
|
53
53
|
"vue3-dnd": "^2.1.0",
|
|
54
|
-
"@gct-paas/core": "0.1.6-dev.
|
|
55
|
-
"@gct-paas/core-web": "0.1.6-dev.
|
|
56
|
-
"@gct-paas/schema": "0.1.6-dev.
|
|
57
|
-
"@gct-paas/scss": "0.1.6-dev.
|
|
54
|
+
"@gct-paas/core": "0.1.6-dev.28",
|
|
55
|
+
"@gct-paas/core-web": "0.1.6-dev.28",
|
|
56
|
+
"@gct-paas/schema": "0.1.6-dev.28",
|
|
57
|
+
"@gct-paas/scss": "0.1.6-dev.28"
|
|
58
58
|
},
|
|
59
59
|
"devDependencies": {
|
|
60
60
|
"@types/babel__core": "^7.20.5",
|
|
@@ -64,10 +64,10 @@
|
|
|
64
64
|
"peerDependencies": {
|
|
65
65
|
"@gct-paas/api": "^0.1.6-dev.14",
|
|
66
66
|
"vue": ">=3",
|
|
67
|
-
"@gct-paas/core": "0.1.6-dev.
|
|
68
|
-
"@gct-paas/core-web": "0.1.6-dev.
|
|
69
|
-
"@gct-paas/schema": "0.1.6-dev.
|
|
70
|
-
"@gct-paas/scss": "0.1.6-dev.
|
|
67
|
+
"@gct-paas/core": "0.1.6-dev.28",
|
|
68
|
+
"@gct-paas/core-web": "0.1.6-dev.28",
|
|
69
|
+
"@gct-paas/schema": "0.1.6-dev.28",
|
|
70
|
+
"@gct-paas/scss": "0.1.6-dev.28"
|
|
71
71
|
},
|
|
72
72
|
"scripts": {
|
|
73
73
|
"dev": "cross-env NODE_ENV=development vite build --watch --config vite.dev.config.ts",
|