@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.
@@ -9,7 +9,7 @@ export declare const MobileContainer: import('vue').DefineComponent<import('vue'
9
9
  };
10
10
  title: {
11
11
  type: StringConstructor;
12
- default: () => any;
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: () => any;
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
- return lockInfo.value.id === userId || username === "admin";
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
- lockInfo.value = data;
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
- lockInfo.value = {
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
- lockInfo.value = {
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
- const hasUrl = `/PagePreview/${pid}`;
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
- if (widgetEvents[type] && isArray(widgetEvents[type])) return widgetEvents[type];
132
- const provider = designRegister.value.getProvider(type);
133
- if (!provider) {
134
- console.warn(`selectedAllEvents 未找到组件 ${type} 的设计器项配置信息,请确保该组件已正确注册`);
135
- return [];
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 (provider.events || []).filter((event) => event.name === "onClick");
138
- const overrideEvents = FieldEditorOverrideRegistry.get(type)?.events;
139
- const defaultEvents = provider.events || [];
140
- return overrideEvents?.(selectedRef.value, defaultEvents) || defaultEvents;
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
- if (widgetPropsEditors[type] && isArray(widgetPropsEditors[type])) return widgetPropsEditors[type];
154
- const provider = designRegister.value.getProvider(type);
155
- if (!provider) {
156
- console.warn(`selectedAllPropEditors 未找到组件 ${type} 的设计器项配置信息,请确保该组件已正确注册`);
157
- return [];
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
- const overridePropEditor = FieldEditorOverrideRegistry.get(type)?.propEditor;
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
- if (widgetInfo.value.styleEditors[type] && isArray(widgetInfo.value.styleEditors[type])) return widgetInfo.value.styleEditors[type];
167
- const provider = designRegister.value.getProvider(type);
168
- if (!provider) {
169
- console.warn(`selectedAllStyleEditors 未找到组件 ${type} 的设计器项配置信息,请确保该组件已正确注册`);
170
- return [];
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
- const overrideStyleEditor = FieldEditorOverrideRegistry.get(type)?.styleEditor;
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: (_selectedRef, _defaultWidget) => runStyleEditor()
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: (_selectedRef, _defaultWidget) => runStyleEditor()
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: (_selectedRef, _defaultWidget) => runStyleEditor()
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.26",
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.26",
55
- "@gct-paas/core-web": "0.1.6-dev.26",
56
- "@gct-paas/schema": "0.1.6-dev.26",
57
- "@gct-paas/scss": "0.1.6-dev.26"
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.26",
68
- "@gct-paas/core-web": "0.1.6-dev.26",
69
- "@gct-paas/schema": "0.1.6-dev.26",
70
- "@gct-paas/scss": "0.1.6-dev.26"
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",