@gct-paas/design 6.0.0-dev.2 → 6.0.0-dev.20

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.
@@ -138,8 +138,9 @@ function _useUserOccupy() {
138
138
  async function lock() {
139
139
  if (occupyInfo.value.occupyId) return;
140
140
  if (lockInfo.value.id) return;
141
+ const sthText = i18nKeyMap[params.type] || "sys.page";
141
142
  Modal.confirm({
142
- title: t("sys.sureToLockSth", { sth: t(i18nKeyMap[params.type]) }),
143
+ title: t("sys.sureToLockSth", { sth: t(sthText) }),
143
144
  icon: createVNode(ExclamationCircleOutlined),
144
145
  okText: t("sys.ok"),
145
146
  cancelText: t("sys.cancel"),
@@ -70,7 +70,8 @@ function useDesignHistory() {
70
70
  }
71
71
  });
72
72
  const { save } = useDesignSave();
73
- await save(false);
73
+ const scene = _gct.store.context.scene;
74
+ await save(false, true, scene);
74
75
  loadPageDesignHistoryList();
75
76
  }
76
77
  }
@@ -26,16 +26,20 @@ function deepFindPlugins(widgets) {
26
26
  return items;
27
27
  }
28
28
  function getDefaultTxnDetailPageJson() {
29
- return {
30
- newDesigner: true,
31
- style: {
32
- paddingAll: "",
33
- paddingTop: "",
34
- paddingRight: "16",
35
- paddingBottom: "16",
36
- paddingLeft: "16"
37
- }
29
+ const _json = cloneDeep(defaultPageJson);
30
+ _json.style = {
31
+ paddingAll: "",
32
+ paddingTop: "",
33
+ paddingRight: "16",
34
+ paddingBottom: "16",
35
+ paddingLeft: "16"
36
+ };
37
+ _json.pageConfig = {
38
+ title: "",
39
+ i18n: {},
40
+ hasFooter: false
38
41
  };
42
+ return _json;
39
43
  }
40
44
  function useDesignSave() {
41
45
  const { cancelOccupy } = useUserOccupy();
@@ -144,15 +148,29 @@ function useDesignSave() {
144
148
  return plugins;
145
149
  }
146
150
  /**
151
+ * 事务页专用兜底:老数据或默认 JSON 可能缺 widgets/modals/pageConfig 等字段,
152
+ * 只在事务保存路径补齐,避免影响页面设计、详情卡片等其他入口
153
+ */
154
+ function normalizeTxnPageJson(json) {
155
+ json.widgets = json.widgets ?? [];
156
+ json.modals = json.modals ?? [];
157
+ if (!json.pageConfig) json.pageConfig = {
158
+ title: "",
159
+ i18n: {},
160
+ hasFooter: false
161
+ };
162
+ return json;
163
+ }
164
+ /**
147
165
  * 根据 txnPageMode 解析创建页 / 详情页两份 pageJson
148
166
  */
149
167
  function resolveTxnPageJsonPair() {
150
168
  if (pageInfo.value.txnPageMode === "create") return {
151
169
  createPageJson: pageJson,
152
- detailPageJson: pageInfo.value.detailDesignerJson ? JSON.parse(pageInfo.value.detailDesignerJson) : getDefaultTxnDetailPageJson()
170
+ detailPageJson: pageInfo.value.detailDesignerJson ? normalizeTxnPageJson(JSON.parse(pageInfo.value.detailDesignerJson)) : getDefaultTxnDetailPageJson()
153
171
  };
154
172
  return {
155
- createPageJson: pageInfo.value._designerJson ? JSON.parse(pageInfo.value._designerJson) : cloneDeep(defaultPageJson),
173
+ createPageJson: pageInfo.value._designerJson ? normalizeTxnPageJson(JSON.parse(pageInfo.value._designerJson)) : cloneDeep(defaultPageJson),
156
174
  detailPageJson: pageJson
157
175
  };
158
176
  }
@@ -269,7 +287,7 @@ function useDesignSave() {
269
287
  key: pageInfo.value.key
270
288
  });
271
289
  savePageJsonSnapshot(pageInfo.value.txnPageMode === "create" ? _designerJson : _detailDesignerJson);
272
- if (showSuccess) _gct.message.success(flag ? "sys.saveSuccess" : "sys.recoverSuccess");
290
+ if (showSuccess) _gct.message.success(flag ? t("sys.saveSuccess") : t("sys.recoverSuccess"));
273
291
  cancelOccupy();
274
292
  noMore.value = false;
275
293
  pageNo.value = 1;
@@ -289,12 +307,14 @@ function useDesignSave() {
289
307
  pageInfo.value._designerJson = JSON.stringify(_designerJson);
290
308
  await _api.apaas.detailPage.putUpdateDesignerJsonId({ id: pageId }, {
291
309
  designerJson: JSON.stringify(_designerJson),
292
- runtimeJson: JSON.stringify(runtimeJson),
310
+ description: pageInfo.value.description,
293
311
  key: pageInfo.value.key,
294
312
  name: pageInfo.value.name,
295
- description: pageInfo.value.description
313
+ logId: (pageDesignHistoryList.value[0] ?? {}).id,
314
+ runtimeJson: JSON.stringify(runtimeJson)
296
315
  });
297
- if (showSuccess) _gct.message.success(flag ? "sys.saveSuccess" : "sys.recoverSuccess");
316
+ savePageJsonSnapshot();
317
+ if (showSuccess) _gct.message.success(flag ? t("sys.saveSuccess") : t("sys.recoverSuccess"));
298
318
  cancelOccupy();
299
319
  noMore.value = false;
300
320
  pageNo.value = 1;
@@ -6,9 +6,9 @@ export declare function useGlobal(): {
6
6
  updateInfo: (id: string, data: AppGlobalSettingsRequest) => Promise<void>;
7
7
  addInfo: (data: AppGlobalSettingsRequest) => Promise<void>;
8
8
  deleteInfo: (ids: string) => Promise<void>;
9
- queryGModal: (fullInfo?: boolean) => Promise<void>;
10
- queryGVar: (fullInfo?: boolean) => Promise<void>;
11
- queryGEvent: (fullInfo?: boolean) => Promise<void>;
9
+ queryGModal: (fullInfo?: boolean, configObj?: Record<string, string>) => Promise<void>;
10
+ queryGVar: (fullInfo?: boolean, configObj?: Record<string, string>) => Promise<void>;
11
+ queryGEvent: (fullInfo?: boolean, configObj?: Record<string, string>) => Promise<void>;
12
12
  gVar: import('vue').Ref<{
13
13
  id: string;
14
14
  key: string;
@@ -8,11 +8,16 @@ var gModal = ref([]);
8
8
  /**全局事件 */
9
9
  var gEvent = ref([]);
10
10
  function useGlobal() {
11
- async function queryGModal(fullInfo = false) {
12
- gModal.value = (await _api.apaas.appGlobalSettings.getList({
11
+ async function queryGModal(fullInfo = false, configObj) {
12
+ let queryObj = {
13
13
  type: GLOBAL_TYPE.MODAL,
14
14
  fullInfo
15
- }))?.map((modal) => {
15
+ };
16
+ if (configObj) queryObj = {
17
+ ...queryObj,
18
+ ...configObj
19
+ };
20
+ gModal.value = (await _api.apaas.appGlobalSettings.getList(queryObj))?.map((modal) => {
16
21
  return {
17
22
  id: modal.id,
18
23
  name: modal.name,
@@ -21,11 +26,16 @@ function useGlobal() {
21
26
  };
22
27
  }) || [];
23
28
  }
24
- async function queryGVar(fullInfo = true) {
25
- gVar.value = (await _api.apaas.appGlobalSettings.getList({
29
+ async function queryGVar(fullInfo = true, configObj) {
30
+ let queryObj = {
26
31
  type: GLOBAL_TYPE.VAR,
27
32
  fullInfo
28
- }))?.map((variable) => {
33
+ };
34
+ if (configObj) queryObj = {
35
+ ...queryObj,
36
+ ...configObj
37
+ };
38
+ gVar.value = (await _api.apaas.appGlobalSettings.getList(queryObj))?.map((variable) => {
29
39
  return {
30
40
  id: variable.id,
31
41
  key: variable.key,
@@ -33,11 +43,16 @@ function useGlobal() {
33
43
  };
34
44
  }) || [];
35
45
  }
36
- async function queryGEvent(fullInfo = false) {
37
- gEvent.value = (await _api.apaas.appGlobalSettings.getList({
46
+ async function queryGEvent(fullInfo = false, configObj) {
47
+ let queryObj = {
38
48
  type: GLOBAL_TYPE.EVENT,
39
49
  fullInfo
40
- }))?.map((event) => {
50
+ };
51
+ if (configObj) queryObj = {
52
+ ...queryObj,
53
+ ...configObj
54
+ };
55
+ gEvent.value = (await _api.apaas.appGlobalSettings.getList(queryObj))?.map((event) => {
41
56
  return {
42
57
  id: event.id,
43
58
  key: event.key,
@@ -156,14 +156,13 @@ var instance = class ComponentUtils {
156
156
  if (this.groupType === ComponentUtils.TxnPageGroup) return [
157
157
  CategoryTypeEnum.FORM,
158
158
  CategoryTypeEnum.LAYOUT,
159
- CategoryTypeEnum.BUTTON,
160
- CategoryTypeEnum.DATA
159
+ CategoryTypeEnum.DATA,
160
+ CategoryTypeEnum.BUTTON
161
161
  ];
162
162
  if (this.groupType === ComponentUtils.DetailPageGroup) return [
163
163
  CategoryTypeEnum.FORM,
164
164
  CategoryTypeEnum.LAYOUT,
165
- CategoryTypeEnum.DATA,
166
- CategoryTypeEnum.KIT
165
+ CategoryTypeEnum.DATA
167
166
  ];
168
167
  return [
169
168
  CategoryTypeEnum.FORM,
@@ -54,7 +54,7 @@ export declare function toggleTxnPageInfo(mode: 'create' | 'detail'): Promise<vo
54
54
  /**
55
55
  * 初始化界面占用信息
56
56
  */
57
- declare function initLockState(): void;
57
+ declare function initLockState(type?: string): void;
58
58
  /**
59
59
  * 更新页面锁定状态
60
60
  * @param {boolean} value
@@ -208,8 +208,8 @@ async function loadTxnPageInfo(app) {
208
208
  loadPageDesignHistoryList();
209
209
  pagePermissions.value = await _api.apaas.permission.getList({ relationId: _gct.store.context.pid }) || [];
210
210
  if (!pid.startsWith("___new___")) initLockState();
211
- pageJson.pageConfig.unitType = "%";
212
- pageJson.pageConfig.pageWidth = 80;
211
+ pageJson.pageConfig.unitType = pageJson.pageConfig.unitType || "%";
212
+ pageJson.pageConfig.pageWidth = pageJson.pageConfig.pageWidth || 80;
213
213
  savePageJsonSnapshot();
214
214
  }
215
215
  /**
@@ -279,10 +279,10 @@ async function loadDetailPageInfo(app) {
279
279
  initToolkitWidgets();
280
280
  loadPageDesignHistoryList();
281
281
  pagePermissions.value = await _api.apaas.permission.getList({ relationId: _gct.store.context.pid }) || [];
282
- if (!pid.startsWith("___new___")) initLockState();
283
- pageJson.pageConfig.title = pageJson.pageConfig.title || "详情";
284
- pageJson.pageConfig.unitType = "%";
285
- pageJson.pageConfig.pageWidth = 80;
282
+ if (!pid.startsWith("___new___")) initLockState("detail_page");
283
+ pageJson.pageConfig.title = pageJson.pageConfig.title || t("sys.detail");
284
+ pageJson.pageConfig.unitType = pageJson.pageConfig.unitType || "%";
285
+ pageJson.pageConfig.pageWidth = pageJson.pageConfig.pageWidth || 80;
286
286
  savePageJsonSnapshot();
287
287
  }
288
288
  /**
@@ -312,13 +312,15 @@ async function toggleTxnPageInfo(mode) {
312
312
  /**
313
313
  * 初始化界面占用信息
314
314
  */
315
- function initLockState() {
316
- if (_gct.store.context.scene === ContextSceneEnum.TXN || _gct.store.context.scene === ContextSceneEnum.DETAIL) return;
315
+ function initLockState(type) {
316
+ if (_gct.store.context.scene === ContextSceneEnum.TXN) return;
317
317
  const { setLockInfo, initOccupy, loadOccupyInfo } = useUserOccupy();
318
- initOccupy({
318
+ const initData = {
319
319
  id: _gct.store.context.pid || "",
320
320
  type: (platform.value === Platform.WEB ? PageTypeEnum.WEB : platform.value === Platform.PAD ? PageTypeEnum.PAD : PageTypeEnum.MOBILE).toString()
321
- });
321
+ };
322
+ if (type) initData.type = type;
323
+ initOccupy(initData);
322
324
  loadOccupyInfo();
323
325
  setLockInfo({
324
326
  id: pageInfo.value?.lockUserId,
@@ -1096,7 +1096,6 @@ export declare function useDesigner(): {
1096
1096
  handleAddDrag: (newIndex: number, childrenList: LowCodeWidget.BasicSchema[], scope: SCOPE, formID?: string) => void;
1097
1097
  setPageJson: (json: PageJson, hasFooter?: boolean) => Promise<void>;
1098
1098
  setTxnPageJson: (json: PageJson, hasFooter?: boolean) => Promise<void>;
1099
- setDetailPageJson: (json: PageJson, hasFooter?: boolean) => Promise<void>;
1100
1099
  save: (flag?: boolean, showSuccess?: boolean, scene?: string) => Promise<boolean>;
1101
1100
  savePageJsonSnapshot: (json?: PageJson) => void;
1102
1101
  emitCache: () => void;
@@ -56,16 +56,6 @@ function useDesigner() {
56
56
  if (!pageJson.pageConfig.pageWidth) pageJson.pageConfig.pageWidth = 80;
57
57
  cache.emitCache();
58
58
  }
59
- async function setDetailPageJson(json, hasFooter = false) {
60
- pageJson.pageConfig.hasFooter = hasFooter || platform.value === Platform.MOBILE || platform.value === Platform.PAD;
61
- Object.assign(pageJson, defaultPageJson, json);
62
- initMethodMap(pageJson.js).then((map) => {
63
- methodMap.value = map;
64
- });
65
- if (!pageJson.pageConfig.unitType) pageJson.pageConfig.unitType = "%";
66
- if (!pageJson.pageConfig.pageWidth) pageJson.pageConfig.pageWidth = 80;
67
- cache.emitCache();
68
- }
69
59
  /** 检查是否可以拖拽进入的方法,比如某些组件不能拖到某些组件内 */
70
60
  function checkWidgetMove() {
71
61
  return true;
@@ -87,7 +77,6 @@ function useDesigner() {
87
77
  handleAddDrag,
88
78
  setPageJson,
89
79
  setTxnPageJson,
90
- setDetailPageJson,
91
80
  save: saveHook.save,
92
81
  savePageJsonSnapshot: saveHook.savePageJsonSnapshot,
93
82
  emitCache: cache.emitCache,
@@ -55,8 +55,8 @@ function useWidget(props) {
55
55
  });
56
56
  const widgetdesigner = designRegister.value.getProvider(widget.type)?.designerConfig || {};
57
57
  const hideMaskValue = computed(() => {
58
- if (typeof widgetdesigner[widget.type]?.hideMask === "function") return widgetdesigner[widget.type].hideMask(widget);
59
- return widgetdesigner[widget.type]?.hideMask;
58
+ if (typeof widgetdesigner.hideMask === "function") return widgetdesigner.hideMask(widget);
59
+ return widgetdesigner.hideMask;
60
60
  });
61
61
  return {
62
62
  isWidgetSelected,
@@ -118,7 +118,7 @@ var explainEditor = [{
118
118
  formItemStyle: { marginBottom: "12px" },
119
119
  group: PropGroup.FIELD_CONFIG,
120
120
  hidden: (widget) => {
121
- if (_gct.store.context.scene === ContextSceneEnum.DETAIL) return true;
121
+ if (widget.props.hiddenInDetail) return true;
122
122
  if (widget.props.bindFieldKey || widget.props.fieldReadonly) return true;
123
123
  if ((widget.materialType === MaterialEnum.MaterialFormField || widget.materialType === MaterialEnum.MaterialSubTableModalField) && widget.platform === Platform.PAD) return true;
124
124
  return widget.platform !== Platform.WEB && widget.platform !== Platform.PAD;
@@ -162,8 +162,8 @@ var validatorEditor = [{
162
162
  label: "sys.pageDesigner.closeValidator",
163
163
  group: PropGroup.FIELD_CONFIG,
164
164
  formField: true,
165
- hidden() {
166
- return _gct.store.context.scene === ContextSceneEnum.DETAIL;
165
+ hidden(widget) {
166
+ return widget.props.hiddenInDetail;
167
167
  }
168
168
  }];
169
169
  /** 下拉列表、单选、多选公共config */
@@ -1,5 +1,5 @@
1
1
  import { hiddenButtonProps } from "./button-props-func.mjs";
2
- import { ASSIGNMENTSTRATEGY_ENUM, ContextSceneEnum, Dependency_ENUM, FIELD_TYPE, FormComponents, MaterialEnum, Platform, PropGroup } from "@gct-paas/core";
2
+ import { ASSIGNMENTSTRATEGY_ENUM, Dependency_ENUM, FIELD_TYPE, FormComponents, MaterialEnum, Platform, PropGroup } from "@gct-paas/core";
3
3
  import { padVTableSupportEditFieldTypes } from "@gct-paas/schema";
4
4
  //#region src/schema/common-config/display-editor-config.ts
5
5
  var displayProps = {
@@ -66,7 +66,7 @@ var displayEditor = [
66
66
  label: "sys.pageDesigner.deviceConnectivity",
67
67
  group: PropGroup.FIELD_CONFIG,
68
68
  hidden: (widget) => {
69
- return widget.platform !== Platform.WEB || ![MaterialEnum.MaterialFormField].includes(widget.materialType) || !deviceFields.includes(widget.props.fieldType) || widget.props.fieldReadonly || _gct.store.context.scene === ContextSceneEnum.DETAIL;
69
+ return widget.platform !== Platform.WEB || ![MaterialEnum.MaterialFormField].includes(widget.materialType) || !deviceFields.includes(widget.props.fieldType) || widget.props.fieldReadonly || widget.props.hiddenInDetail;
70
70
  }
71
71
  }
72
72
  ];
@@ -1,7 +1,7 @@
1
1
  import { __exportAll } from "../../_virtual/_rolldown/runtime.mjs";
2
2
  import { widget as widget$1 } from "./modal-body.mjs";
3
3
  import { widget as widget$2 } from "./modal-footer.mjs";
4
- import { BuiltinType, Platform, PropGroup, StyleGroup, buildShortUUID } from "@gct-paas/core";
4
+ import { BuiltinType, ContextSceneEnum, Platform, PropGroup, StyleGroup } from "@gct-paas/core";
5
5
  //#region src/schema/modal/modal.ts
6
6
  var modal_exports = /* @__PURE__ */ __exportAll({
7
7
  beforeCreate: () => beforeCreate,
@@ -145,7 +145,7 @@ var propEditorList = [
145
145
  label: "sys.pageDesigner.operateButton",
146
146
  group: PropGroup.BUTTON,
147
147
  hidden: (widget) => {
148
- return widget.props.isSubTableModal;
148
+ return widget.props.isSubTableModal || _gct.store.context.scene === ContextSceneEnum.DETAIL;
149
149
  }
150
150
  }
151
151
  ];
@@ -166,8 +166,7 @@ var eventList = [{
166
166
  }];
167
167
  var runCallback = () => {};
168
168
  var beforeCreate = (widget) => {
169
- widget.children[0].id = buildShortUUID(widget.children[0].type);
170
- widget.children[1].id = buildShortUUID(widget.children[1].type);
169
+ if (_gct.store.context.scene === ContextSceneEnum.DETAIL) widget.props.hasFooter = false;
171
170
  };
172
171
  var designerConfig = { basicProps: {
173
172
  key_label: "弹窗",
package/es/setup-app.mjs CHANGED
@@ -4,7 +4,13 @@ import "./utils/index.mjs";
4
4
  import { registerDesignLocale } from "./locale/auto-register.mjs";
5
5
  import { HttpUtil } from "@gct-paas/api";
6
6
  //#region src/setup-app.ts
7
+ var designSetupAppKey = Symbol.for("@gct-paas/design/setupApp");
7
8
  async function designSetupApp(_app) {
9
+ if (Reflect.get(window, designSetupAppKey)) {
10
+ console.error("@gct-paas/design designSetupApp 已执行,请勿重复调用。");
11
+ return;
12
+ }
13
+ Reflect.set(window, designSetupAppKey, true);
8
14
  registerDesignLocale();
9
15
  onWidgetInfoInit();
10
16
  HttpUtil.use(designInterceptors);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gct-paas/design",
3
- "version": "6.0.0-dev.2",
3
+ "version": "6.0.0-dev.20",
4
4
  "type": "module",
5
5
  "description": "paas 平台设计界面底包",
6
6
  "loader": "dist/loader.esm.min.js",
@@ -34,7 +34,7 @@
34
34
  "@ant-design/icons-vue": "^7.0.1",
35
35
  "@babel/core": "^7.29.0",
36
36
  "@babel/standalone": "^7.29.2",
37
- "@gct-paas/api": "^6.0.0-dev.2",
37
+ "@gct-paas/api": "^6.0.0-dev.8",
38
38
  "@jsplumb/browser-ui": "^6.2.10",
39
39
  "@vueuse/core": "^14.1.0",
40
40
  "ant-design-vue": "npm:@gct-paas/ant-design-vue@3.2.21",
@@ -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-web": "6.0.0-dev.2",
55
- "@gct-paas/core": "6.0.0-dev.2",
56
- "@gct-paas/schema": "6.0.0-dev.2",
57
- "@gct-paas/scss": "6.0.0-dev.2"
54
+ "@gct-paas/scss": "6.0.0-dev.20",
55
+ "@gct-paas/schema": "6.0.0-dev.20",
56
+ "@gct-paas/core": "6.0.0-dev.20",
57
+ "@gct-paas/core-web": "6.0.0-dev.20"
58
58
  },
59
59
  "devDependencies": {
60
60
  "@types/babel__core": "^7.20.5",
@@ -62,12 +62,12 @@
62
62
  "@types/estraverse": "^5.1.7"
63
63
  },
64
64
  "peerDependencies": {
65
- "@gct-paas/api": "^6.0.0-dev.2",
65
+ "@gct-paas/api": "^6.0.0-dev.8",
66
66
  "vue": ">=3",
67
- "@gct-paas/core": "6.0.0-dev.2",
68
- "@gct-paas/core-web": "6.0.0-dev.2",
69
- "@gct-paas/scss": "6.0.0-dev.2",
70
- "@gct-paas/schema": "6.0.0-dev.2"
67
+ "@gct-paas/core": "6.0.0-dev.20",
68
+ "@gct-paas/schema": "6.0.0-dev.20",
69
+ "@gct-paas/core-web": "6.0.0-dev.20",
70
+ "@gct-paas/scss": "6.0.0-dev.20"
71
71
  },
72
72
  "scripts": {
73
73
  "dev": "cross-env NODE_ENV=development vite build --watch --config vite.dev.config.ts",