@gct-paas/render-web 6.0.0-dev.4 → 6.0.0-dev.41

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.
Files changed (58) hide show
  1. package/dist/index.min.css +1 -1
  2. package/dist/loader.esm.min.js +2 -2
  3. package/es/Event/Events.d.ts +3 -12
  4. package/es/Event/modeling-traceability/assets/empty.png.mjs +4 -0
  5. package/es/Event/modeling-traceability/components/expression-condition.vue.d.ts +5 -0
  6. package/es/Event/modeling-traceability/components/expression-condition.vue.mjs +5 -0
  7. package/es/Event/modeling-traceability/components/expression-condition.vue_vue_type_script_setup_true_lang.mjs +22 -0
  8. package/es/Event/modeling-traceability/components/file-cell.vue.d.ts +5 -0
  9. package/es/Event/modeling-traceability/components/file-cell.vue.mjs +7 -0
  10. package/es/Event/modeling-traceability/components/file-cell.vue_vue_type_script_setup_true_lang.mjs +81 -0
  11. package/es/Event/modeling-traceability/components/file-cell.vue_vue_type_style_index_0_scoped_104536e3_lang.css +74 -0
  12. package/es/Event/modeling-traceability/components/image-cell.vue.d.ts +5 -0
  13. package/es/Event/modeling-traceability/components/image-cell.vue.mjs +7 -0
  14. package/es/Event/modeling-traceability/components/image-cell.vue_vue_type_script_setup_true_lang.mjs +83 -0
  15. package/es/Event/modeling-traceability/components/image-cell.vue_vue_type_style_index_0_scoped_1b5cd3ef_lang.css +86 -0
  16. package/es/Event/modeling-traceability/components/serial-rule.vue.d.ts +5 -0
  17. package/es/Event/modeling-traceability/components/serial-rule.vue.mjs +5 -0
  18. package/es/Event/modeling-traceability/components/serial-rule.vue_vue_type_script_setup_true_lang.mjs +47 -0
  19. package/es/Event/modeling-traceability/components/signature-cell.vue.d.ts +5 -0
  20. package/es/Event/modeling-traceability/components/signature-cell.vue.mjs +7 -0
  21. package/es/Event/modeling-traceability/components/signature-cell.vue_vue_type_script_setup_true_lang.mjs +79 -0
  22. package/es/Event/modeling-traceability/components/signature-cell.vue_vue_type_style_index_0_scoped_c9ef9bd9_lang.css +83 -0
  23. package/es/Event/modeling-traceability/components/trace-table.vue.d.ts +7 -0
  24. package/es/Event/modeling-traceability/components/trace-table.vue.mjs +7 -0
  25. package/es/Event/modeling-traceability/components/trace-table.vue_vue_type_script_setup_true_lang.mjs +158 -0
  26. package/es/Event/modeling-traceability/components/trace-table.vue_vue_type_style_index_0_scoped_a3754f9c_lang.css +67 -0
  27. package/es/Event/modeling-traceability/index.d.ts +15 -0
  28. package/es/Event/modeling-traceability/index.mjs +40 -0
  29. package/es/Event/modeling-traceability/modeling-trace-template.vue.mjs +8 -0
  30. package/es/Event/modeling-traceability/modeling-trace-template.vue_vue_type_script_setup_true_lang.mjs +610 -0
  31. package/es/Event/modeling-traceability/modeling-trace-template.vue_vue_type_style_index_0_scoped_3663bfcb_lang.css +176 -0
  32. package/es/Event/modeling-traceability/modeling-trace-template.vue_vue_type_style_index_1_lang.css +20 -0
  33. package/es/components/card-view-render/card-view-render.d.ts +2 -2
  34. package/es/components/card-view-render/card-view-render.mjs +21 -1
  35. package/es/components/field-search-cascader/field-cascader.vue.mjs +2 -2
  36. package/es/components/field-search-cascader/field-cascader.vue_vue_type_script_setup_true_lang.mjs +1 -1
  37. package/es/components/field-search-cascader/{field-cascader.vue_vue_type_style_index_0_scoped_cb5e4d67_lang.css → field-cascader.vue_vue_type_style_index_0_scoped_f8f0cdba_lang.css} +11 -11
  38. package/es/components/form-component/field-label/tag-label.vue_vue_type_script_setup_true_name_TagLabel_lang.mjs +1 -1
  39. package/es/components/layouts/basic-page/basic-page.vue.mjs +1 -1
  40. package/es/hooks/refCardList.d.ts +12 -2
  41. package/es/hooks/refCardList.mjs +69 -6
  42. package/es/index.d.ts +1 -0
  43. package/es/index.mjs +4 -2
  44. package/es/locale/sys/appDesigner.d.ts +5 -0
  45. package/es/locale/sys/appDesigner.mjs +5 -0
  46. package/es/locale/sys/component.d.ts +3 -0
  47. package/es/locale/sys/component.mjs +13 -10
  48. package/es/locale/sys/model.d.ts +2 -0
  49. package/es/locale/sys/model.mjs +2 -0
  50. package/es/locale/sys/pageDesigner.d.ts +3 -0
  51. package/es/locale/sys/pageDesigner.mjs +3 -0
  52. package/es/locale/sys.d.ts +5 -0
  53. package/es/locale/sys.mjs +6 -1
  54. package/es/modules/app-mqtt/app-mqtt.service.d.ts +2 -2
  55. package/es/modules/app-mqtt/app-mqtt.service.mjs +1 -1
  56. package/es/plugins/render-card-field/render-card-field.mjs +20 -1
  57. package/es/setup-app.mjs +6 -0
  58. package/package.json +17 -14
@@ -0,0 +1,176 @@
1
+ @charset "UTF-8";
2
+ /* stylelint-disable scss/no-global-function-names */
3
+ /* bem('block', 'element', 'modifier') => 'ibiz-block__element--modifier' */
4
+ /**
5
+ * 定义 Block 块
6
+ * @param {String} $block - Block 块名称
7
+ * @example
8
+ * @include b('button') {
9
+ * padding: 10px;
10
+ * }
11
+ */
12
+ /**
13
+ * 定义 Element 元素
14
+ * @param {String|List} $element - Element 元素名称,支持单个或多个
15
+ * @example
16
+ * @include b('button') {
17
+ * @include e('text') {
18
+ * color: #000;
19
+ * }
20
+ * }
21
+ * // 或传入多个元素
22
+ * @include b('button') {
23
+ * @include e(('text', 'icon')) {
24
+ * margin: 5px;
25
+ * }
26
+ * }
27
+ */
28
+ /**
29
+ * 定义 Modifier 修饰符
30
+ * @param {String|List} $modifier - Modifier 修饰符名称,支持单个或多个
31
+ * @example
32
+ * @include b('button') {
33
+ * @include m('primary') {
34
+ * background: blue;
35
+ * }
36
+ * }
37
+ * // 或传入多个修饰符
38
+ * @include b('button') {
39
+ * @include m(('primary', 'large')) {
40
+ * background: blue;
41
+ * font-size: 16px;
42
+ * }
43
+ * }
44
+ */
45
+ /**
46
+ * 定义状态选择器
47
+ * @param {String} $state - 状态名称
48
+ * @example
49
+ * @include b('button') {
50
+ * @include when('disabled') {
51
+ * opacity: 0.5;
52
+ * }
53
+ * }
54
+ */
55
+ /**
56
+ * 深色主题样式
57
+ * @param {String} $block - Block 块名称
58
+ * @example
59
+ * @include dark('button') {
60
+ * background: #333;
61
+ * color: #fff;
62
+ * }
63
+ */
64
+ /* stylelint-disable scss/no-global-function-names */
65
+ [data-v-3663bfcb] .ant-table-expanded-row .ant-table-bordered > .ant-table-container {
66
+ border-right: none !important;
67
+ }
68
+ [data-v-3663bfcb] .ant-table-tbody .ant-table-row-level-1 td {
69
+ border-bottom: none !important;
70
+ }
71
+ .gct-modeling-trace__color-blue[data-v-3663bfcb] {
72
+ color: #3168ec;
73
+ }
74
+ [data-v-3663bfcb] .ant-table-thead
75
+ > tr
76
+ > th:not(:last-child):not(.ant-table-selection-column):not(
77
+ .ant-table-row-expand-icon-cell
78
+ ):not([colspan])::before {
79
+ width: 1px;
80
+ }
81
+ [data-v-3663bfcb] .image-list-box .ant-image {
82
+ box-sizing: content-box;
83
+ margin-right: 4px;
84
+ border: 1px dashed #d9d9d9;
85
+ border-radius: 2px;
86
+ }
87
+ [data-v-3663bfcb] .image-list-box .ant-image .ant-image-img {
88
+ vertical-align: top;
89
+ }
90
+ [data-v-3663bfcb] .image-list-box .ant-image .ant-image-img,[data-v-3663bfcb] .image-list-box .ant-image .ant-image-mask {
91
+ visibility: visible;
92
+ border-radius: 2px;
93
+ }
94
+ .gct-modeling-trace__scroll-container[data-v-3663bfcb],
95
+ .gct-modeling-trace__empty[data-v-3663bfcb] {
96
+ position: relative;
97
+ min-height: 400px;
98
+ }
99
+ .gct-modeling-trace__scroll-container[data-v-3663bfcb] {
100
+ margin-top: -23px;
101
+ padding-bottom: 40px;
102
+ }
103
+ .gct-modeling-trace__pagination[data-v-3663bfcb] {
104
+ position: absolute;
105
+ z-index: 100;
106
+ right: 20px;
107
+ bottom: 53px;
108
+ width: calc(100% - 40px);
109
+ padding: 12px 0;
110
+ background: #fff;
111
+ }
112
+ .gct-modeling-trace__item-header[data-v-3663bfcb] {
113
+ display: flex;
114
+ position: relative;
115
+ padding: 16px;
116
+ padding-left: 28px;
117
+ color: var(--ant-primary-color);
118
+ }
119
+ .gct-modeling-trace__expanded-icon[data-v-3663bfcb] {
120
+ position: absolute;
121
+ top: 20px;
122
+ left: 8px;
123
+ }
124
+ .gct-modeling-trace--expanded[data-v-3663bfcb] {
125
+ border-radius: 4px;
126
+ background: #f7f8fa;
127
+ }
128
+ .gct-modeling-trace__expanded-border[data-v-3663bfcb] {
129
+ margin-bottom: 4px;
130
+ border: 1px solid var(--ant-primary-color);
131
+ border-radius: 4px;
132
+ }
133
+ .gct-modeling-trace__item-header.gct-modeling-trace__sticky-header[data-v-3663bfcb] {
134
+ position: sticky;
135
+ z-index: 100;
136
+ top: -24px;
137
+ right: 0;
138
+ left: 0;
139
+ }
140
+ .gct-modeling-trace__title[data-v-3663bfcb] {
141
+ margin: 20px 0 12px 16px;
142
+ color: #1e222b;
143
+ font-size: 16px;
144
+ font-weight: 500;
145
+ }
146
+ .gct-modeling-trace__title[data-v-3663bfcb]::before {
147
+ content: " ";
148
+ display: inline-block;
149
+ width: 3px;
150
+ height: 16px;
151
+ margin-right: 10px;
152
+ background-color: var(--ant-primary-color);
153
+ vertical-align: middle;
154
+ }
155
+ .gct-modeling-trace__sub-title[data-v-3663bfcb] {
156
+ margin: 20px 0 12px;
157
+ }
158
+ [data-v-3663bfcb] .ant-descriptions-row > td {
159
+ padding-bottom: 0;
160
+ }
161
+ [data-v-3663bfcb] .ant-descriptions-item-content {
162
+ display: inline-block;
163
+ width: 100%;
164
+ overflow: hidden;
165
+ text-overflow: ellipsis;
166
+ white-space: nowrap;
167
+ }
168
+ .gct-modeling-trace__wrap[data-v-3663bfcb] {
169
+ white-space: wrap;
170
+ }
171
+ .gct-modeling-trace__close[data-v-3663bfcb] {
172
+ color: rgba(0, 0, 0, 0.4509803922);
173
+ }
174
+ .gct-modeling-trace__close[data-v-3663bfcb]:hover {
175
+ color: rgba(0, 0, 0, 0.7490196078);
176
+ }
@@ -0,0 +1,20 @@
1
+ .gct-modeling-trace .ant-modal-body {
2
+ width: 100%;
3
+ max-height: calc(88vh - 150px);
4
+ overflow-y: auto;
5
+ }
6
+ .gct-modeling-trace__trace-table .ant-table-row .ant-table-cell:nth-child(1),
7
+ .gct-modeling-trace__trace-table .ant-table-row .ant-table-cell:nth-child(2),
8
+ .gct-modeling-trace__trace-table .ant-table-row .ant-table-cell:nth-child(3),
9
+ .gct-modeling-trace__trace-table .ant-table-row .ant-table-cell:nth-child(4),
10
+ .gct-modeling-trace__trace-table .ant-table-row .ant-table-cell:nth-child(5) {
11
+ border-right: 1px solid #f0f0f0;
12
+ }
13
+ .gct-modeling-trace__trace-table .ant-table-row .ant-table-cell:nth-last-child(1),
14
+ .gct-modeling-trace__trace-table .ant-table-row .ant-table-cell:nth-last-child(2),
15
+ .gct-modeling-trace__trace-table .ant-table-row .ant-table-cell:nth-last-child(3) {
16
+ border-right: none;
17
+ }
18
+ .gct-modeling-trace__trace-table .ant-table-row.ant-table-row-level-1 {
19
+ display: none;
20
+ }
@@ -9,7 +9,7 @@ export declare const CardViewRender: import('vue').DefineComponent<import('vue')
9
9
  required: true;
10
10
  };
11
11
  fetch: {
12
- type: PropType<() => Promise<IObject>>;
12
+ type: PropType<(foreignFields?: string[]) => Promise<IObject>>;
13
13
  };
14
14
  preview: {
15
15
  type: BooleanConstructor;
@@ -25,7 +25,7 @@ export declare const CardViewRender: import('vue').DefineComponent<import('vue')
25
25
  required: true;
26
26
  };
27
27
  fetch: {
28
- type: PropType<() => Promise<IObject>>;
28
+ type: PropType<(foreignFields?: string[]) => Promise<IObject>>;
29
29
  };
30
30
  preview: {
31
31
  type: BooleanConstructor;
@@ -4,6 +4,23 @@ import { computed, createVNode, defineComponent, nextTick, ref } from "vue";
4
4
  import { gctMemoizeAsync, useNamespace } from "@gct-paas/core";
5
5
  //#region src/components/card-view-render/card-view-render.tsx
6
6
  var loadModelAsync = gctMemoizeAsync(_api.apaas.commonInfoCard.getGetById);
7
+ /** 从卡片节点提取关联模型钻取字段,参考 useDependency foreignFields: path.* */
8
+ function getCardForeignFields(nodes = {}) {
9
+ const foreignFields = /* @__PURE__ */ new Set();
10
+ Object.values(nodes).forEach((node) => {
11
+ const chain = node?.data?.fieldCodeChain;
12
+ if (!chain) return;
13
+ let fieldLink;
14
+ if (typeof chain === "string") try {
15
+ fieldLink = JSON.parse(chain)?.fieldLink;
16
+ } catch {
17
+ return;
18
+ }
19
+ else fieldLink = chain.fieldLink;
20
+ if (fieldLink?.length) foreignFields.add(`${fieldLink.join(".")}.*`);
21
+ });
22
+ return Array.from(foreignFields);
23
+ }
7
24
  var CardViewRender = /* @__PURE__ */ defineComponent({
8
25
  name: "CardViewRender",
9
26
  props: {
@@ -45,7 +62,10 @@ var CardViewRender = /* @__PURE__ */ defineComponent({
45
62
  try {
46
63
  isLoading.value = true;
47
64
  await loadModel();
48
- if (props.preview !== true && props.fetch) data.value = await props.fetch() || {};
65
+ if (props.preview !== true && props.fetch) {
66
+ const foreignFields = getCardForeignFields(json.value?.nodes);
67
+ data.value = await props.fetch(foreignFields) || {};
68
+ }
49
69
  } catch (error) {
50
70
  console.error(error);
51
71
  } finally {
@@ -1,8 +1,8 @@
1
1
  import _plugin_vue_export_helper_default from "../../_virtual/_plugin-vue_export-helper.mjs";
2
2
  import field_cascader_vue_vue_type_script_setup_true_lang_default from "./field-cascader.vue_vue_type_script_setup_true_lang.mjs";
3
- import './field-cascader.vue_vue_type_style_index_1_lang.css';import './field-cascader.vue_vue_type_style_index_0_scoped_cb5e4d67_lang.css';/* empty css */
3
+ import './field-cascader.vue_vue_type_style_index_1_lang.css';import './field-cascader.vue_vue_type_style_index_0_scoped_f8f0cdba_lang.css';/* empty css */
4
4
  /* empty css */
5
5
  //#region src/components/field-search-cascader/field-cascader.vue
6
- var field_cascader_default = /* @__PURE__ */ _plugin_vue_export_helper_default(field_cascader_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-cb5e4d67"]]);
6
+ var field_cascader_default = /* @__PURE__ */ _plugin_vue_export_helper_default(field_cascader_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-f8f0cdba"]]);
7
7
  //#endregion
8
8
  export { field_cascader_default as default };
@@ -201,7 +201,7 @@ var field_cascader_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */
201
201
  };
202
202
  const getOptions = async (value) => {
203
203
  let list = [];
204
- if (value.bindInfo && ![FIELD_TYPE.ENUM, FIELD_TYPE.ENUM_MULTI].includes(value.fieldType)) {
204
+ if (value.bindInfo && showTypes.includes(value.fieldType)) {
205
205
  const options = optionsMap.get(value.id);
206
206
  if (options?.length) list = cloneDeep(options);
207
207
  else {
@@ -1,32 +1,32 @@
1
- .field-search-cascader-wrap[data-v-cb5e4d67] {
1
+ .field-search-cascader-wrap[data-v-f8f0cdba] {
2
2
  position: relative;
3
3
  }
4
- .field-search-cascader-wrap[data-v-cb5e4d67] .field-search-cascader-input:hover.clear-icon .anticon.ant-input-clear-icon-hidden {
4
+ .field-search-cascader-wrap[data-v-f8f0cdba] .field-search-cascader-input:hover.clear-icon .anticon.ant-input-clear-icon-hidden {
5
5
  visibility: visible !important;
6
6
  }
7
- .field-cascader-pop-content[data-v-cb5e4d67] {
7
+ .field-cascader-pop-content[data-v-f8f0cdba] {
8
8
  margin-top: 4px;
9
9
  z-index: 1011;
10
10
  background: #fff;
11
11
  box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);
12
12
  }
13
- .field-cascader-pop-content .field-cascader-item-box[data-v-cb5e4d67] {
13
+ .field-cascader-pop-content .field-cascader-item-box[data-v-f8f0cdba] {
14
14
  border-right: 1px solid #e0e3ea;
15
15
  width: 150px;
16
16
  }
17
- .field-cascader-pop-content .field-cascader-item-box[data-v-cb5e4d67]:last-child {
17
+ .field-cascader-pop-content .field-cascader-item-box[data-v-f8f0cdba]:last-child {
18
18
  border-right: 0;
19
19
  }
20
- .field-cascader-pop-content .field-cascader-list-box[data-v-cb5e4d67] {
20
+ .field-cascader-pop-content .field-cascader-list-box[data-v-f8f0cdba] {
21
21
  margin-top: 4px;
22
22
  height: 100%;
23
23
  max-height: 200px;
24
24
  overflow-y: auto;
25
25
  }
26
- .field-cascader-pop-content .field-cascader-list-box .search-name[data-v-cb5e4d67] {
26
+ .field-cascader-pop-content .field-cascader-list-box .search-name[data-v-f8f0cdba] {
27
27
  color: var(--ant-primary-color) !important;
28
28
  }
29
- .field-cascader-pop-content .field-cascader-item[data-v-cb5e4d67] {
29
+ .field-cascader-pop-content .field-cascader-item[data-v-f8f0cdba] {
30
30
  cursor: pointer;
31
31
  line-height: 24px;
32
32
  margin-bottom: 4px;
@@ -38,15 +38,15 @@
38
38
  text-overflow: ellipsis;
39
39
  white-space: nowrap;
40
40
  }
41
- .field-cascader-pop-content .field-cascader-item .right-icon[data-v-cb5e4d67] {
41
+ .field-cascader-pop-content .field-cascader-item .right-icon[data-v-f8f0cdba] {
42
42
  position: absolute;
43
43
  right: 0;
44
44
  top: 6px;
45
45
  font-size: 12px;
46
46
  }
47
- .field-cascader-pop-content .field-cascader-item[data-v-cb5e4d67]:hover {
47
+ .field-cascader-pop-content .field-cascader-item[data-v-f8f0cdba]:hover {
48
48
  background: #f5f5f5;
49
49
  }
50
- .field-cascader-pop-content .field-cascader-item-selected[data-v-cb5e4d67] {
50
+ .field-cascader-pop-content .field-cascader-item-selected[data-v-f8f0cdba] {
51
51
  background: #e6eeff !important;
52
52
  }
@@ -4,8 +4,8 @@ import { schemaToStyle } from "@gct-paas/render";
4
4
  import { Fragment, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, h, inject, normalizeStyle, openBlock, renderList, toDisplayString, toRef, unref, withCtx, withModifiers } from "vue";
5
5
  import { FIELD_TYPE, transformUrl } from "@gct-paas/core";
6
6
  import { Avatar } from "ant-design-vue";
7
- import { isString } from "lodash-es";
8
7
  import { IconNext } from "@gct-paas/core-components";
8
+ import { isString } from "lodash-es";
9
9
  //#region src/components/form-component/field-label/tag-label.vue?vue&type=script&setup=true&name=TagLabel&lang.ts
10
10
  var _hoisted_1 = { class: "select-text" };
11
11
  var _hoisted_2 = { class: "select-text" };
@@ -1,6 +1,6 @@
1
+ import _plugin_vue_export_helper_default from "../../../_virtual/_plugin-vue_export-helper.mjs";
1
2
  import basic_page_vue_vue_type_script_setup_true_name_basic_page_lang_default from "./basic-page.vue_vue_type_script_setup_true_name_basic-page_lang.mjs";
2
3
  import './basic-page.vue_vue_type_style_index_0_scoped_23453a1b_lang.css';/* empty css */
3
- import _plugin_vue_export_helper_default from "../../../_virtual/_plugin-vue_export-helper.mjs";
4
4
  //#region src/components/layouts/basic-page/basic-page.vue
5
5
  var basic_page_default = /* @__PURE__ */ _plugin_vue_export_helper_default(basic_page_vue_vue_type_script_setup_true_name_basic_page_lang_default, [["__scopeId", "data-v-23453a1b"]]);
6
6
  //#endregion
@@ -1,4 +1,4 @@
1
- import { FIELD_TYPE } from '@gct-paas/core';
1
+ import { FIELD_TYPE, IFieldCodeChain } from '@gct-paas/core';
2
2
  import { Select } from '@gct-paas/schema';
3
3
  export declare function useRefCardData(props: {
4
4
  widget: Select;
@@ -17,7 +17,17 @@ export declare function useGetRefCard(): {
17
17
  modelKey: any;
18
18
  refCardId: any;
19
19
  };
20
+ /**
21
+ * 从卡片设计节点中提取关联模型钻取字段
22
+ * 参考 useDependency / getRefInfoId 中 foreignFields 用法:关联路径 + '.*'
23
+ */
24
+ export declare function getCardForeignFields(nodes?: IObject): string[];
25
+ /**
26
+ * 根据卡片字段取值路径读取关联模型字段值
27
+ * fieldCodeChain.fieldLink + key => __FOREIGN__['link.key']
28
+ */
29
+ export declare function getCardFieldValue(data?: IObject, fieldKey?: string, fieldCodeChain?: IFieldCodeChain | string | null): any;
20
30
  export declare function getDataByModelType({ fieldType, modelKey }: {
21
31
  fieldType: FIELD_TYPE;
22
32
  modelKey: string;
23
- }, id: string): Promise<IObject | import('@gct-paas/render').RowData>;
33
+ }, id: string, foreignFields?: string[]): Promise<IObject>;
@@ -29,7 +29,62 @@ function useGetRefCard() {
29
29
  refCardId
30
30
  };
31
31
  }
32
- async function getDataByModelType({ fieldType, modelKey }, id) {
32
+ /**
33
+ * 从卡片设计节点中提取关联模型钻取字段
34
+ * 参考 useDependency / getRefInfoId 中 foreignFields 用法:关联路径 + '.*'
35
+ */
36
+ function getCardForeignFields(nodes = {}) {
37
+ const foreignFields = /* @__PURE__ */ new Set();
38
+ Object.values(nodes).forEach((node) => {
39
+ const fieldLink = parseFieldCodeChain(node?.data?.fieldCodeChain)?.fieldLink;
40
+ if (!fieldLink?.length) return;
41
+ foreignFields.add(`${fieldLink.join(".")}.*`);
42
+ });
43
+ return Array.from(foreignFields);
44
+ }
45
+ function parseFieldCodeChain(fieldCodeChain) {
46
+ if (!fieldCodeChain) return;
47
+ if (typeof fieldCodeChain === "string") try {
48
+ return JSON.parse(fieldCodeChain);
49
+ } catch {
50
+ return;
51
+ }
52
+ return fieldCodeChain;
53
+ }
54
+ /** 翻译关联字段(__FOREIGN__ 中为 path.key 扁平结构) */
55
+ function transformForeignToDict(foreign = {}, dict = {}) {
56
+ return Object.keys(foreign).reduce((total, curr) => {
57
+ const value = foreign[curr];
58
+ if (value && typeof value === "object" && !Array.isArray(value)) {
59
+ total[curr] = transformForeignToDict(value, dict);
60
+ return total;
61
+ }
62
+ const leafKey = curr.includes(".") ? curr.split(".").pop() : curr;
63
+ const map = dict[curr] ?? dict[leafKey];
64
+ try {
65
+ total[curr] = value ? String(value).split(",").map((k) => map?.[k] ?? k).join(",") : value;
66
+ } catch {
67
+ total[curr] = value;
68
+ }
69
+ return total;
70
+ }, {});
71
+ }
72
+ /**
73
+ * 根据卡片字段取值路径读取关联模型字段值
74
+ * fieldCodeChain.fieldLink + key => __FOREIGN__['link.key']
75
+ */
76
+ function getCardFieldValue(data = {}, fieldKey, fieldCodeChain) {
77
+ if (!fieldKey) return "";
78
+ const chain = parseFieldCodeChain(fieldCodeChain);
79
+ if (chain?.fieldLink?.length) {
80
+ const path = [...chain.fieldLink, fieldKey].join(".");
81
+ return data?.__FOREIGN__?.[path] ?? data?.[path] ?? "";
82
+ }
83
+ return data?.[fieldKey] ?? "";
84
+ }
85
+ async function getDataByModelType({ fieldType, modelKey }, id, foreignFields = []) {
86
+ const fields = foreignFields?.length ? foreignFields : [];
87
+ console.log("getDataByModelType", foreignFields, fields);
33
88
  if (fieldType === FIELD_TYPE.RDO_REF) {
34
89
  const { data = {}, dict = {} } = await _api.apaas.modelComprehensive.postBizServiceModelCategoryModelKeyBsKey({
35
90
  modelKey,
@@ -38,8 +93,8 @@ async function getDataByModelType({ fieldType, modelKey }, id) {
38
93
  }, {
39
94
  includeDeleted: 1,
40
95
  refId: id
41
- }, { foreignFields: [] });
42
- return transformDataToDict(data, dict);
96
+ }, { foreignFields: fields });
97
+ return transformCardData(data, dict);
43
98
  } else {
44
99
  const { data = {}, dict = {} } = await _api.apaas.modelComprehensive.postBizServiceModelCategoryModelKeyBsKey({
45
100
  modelKey,
@@ -47,10 +102,18 @@ async function getDataByModelType({ fieldType, modelKey }, id) {
47
102
  modelCategory: EntityModelCategoryEnum.ENTITY
48
103
  }, { includeDeleted: 1 }, {
49
104
  query: { "id_.eq": id },
50
- foreignFields: []
105
+ foreignFields: fields
51
106
  });
52
- return transformDataToDict(data, dict);
107
+ return transformCardData(data, dict);
53
108
  }
54
109
  }
110
+ function transformCardData(data = {}, dict = {}) {
111
+ const foreign = data.__FOREIGN__;
112
+ const mainData = { ...data };
113
+ delete mainData.__FOREIGN__;
114
+ const result = transformDataToDict(mainData, dict);
115
+ if (foreign) result.__FOREIGN__ = transformForeignToDict(foreign, dict);
116
+ return result;
117
+ }
55
118
  //#endregion
56
- export { getDataByModelType, useGetRefCard, useRefCardData };
119
+ export { getCardFieldValue, getCardForeignFields, getDataByModelType, useGetRefCard, useRefCardData };
package/es/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export { setupPageEvent, usePageEvent, type ContextPcType, type EventsPC, } from './Event/Events';
2
+ export { modelingTraceability, ModelingTraceTemplate, type ModelingTraceabilityOptions, } from './Event/modeling-traceability';
2
3
  export * from './modules/app-mqtt';
3
4
  export * from './components/index';
4
5
  export * from './hooks';
package/es/index.mjs CHANGED
@@ -1,4 +1,6 @@
1
1
  import { setupPageEvent, usePageEvent } from "./Event/Events.mjs";
2
+ import modeling_trace_template_default from "./Event/modeling-traceability/modeling-trace-template.vue.mjs";
3
+ import { modelingTraceability } from "./Event/modeling-traceability/index.mjs";
2
4
  import { AppMqttService } from "./modules/app-mqtt/app-mqtt.service.mjs";
3
5
  import "./modules/app-mqtt/index.mjs";
4
6
  import basic_page_default from "./components/layouts/basic-page/basic-page.vue.mjs";
@@ -9,7 +11,7 @@ import tag_label_default from "./components/form-component/field-label/tag-label
9
11
  import selectTag_default from "./components/form-component/field-label/selectTag.vue.mjs";
10
12
  import { CardViewRender } from "./components/card-view-render/card-view-render.mjs";
11
13
  import ref_card_label_render_default from "./components/form-component/field-label/ref-card-label-render.vue.mjs";
12
- import { getDataByModelType, useGetRefCard, useRefCardData } from "./hooks/refCardList.mjs";
14
+ import { getCardFieldValue, getCardForeignFields, getDataByModelType, useGetRefCard, useRefCardData } from "./hooks/refCardList.mjs";
13
15
  import { useQuickNext, useSearchEvent } from "./hooks/useQuickSearch.mjs";
14
16
  import "./hooks/index.mjs";
15
17
  import field_readonly_default from "./components/form-component/field-readonly.vue.mjs";
@@ -29,4 +31,4 @@ function run() {
29
31
  console.log("Hello World!");
30
32
  }
31
33
  //#endregion
32
- export { AppMqttService, base_vxe_table_default as BaseVxeTable, basic_page_default as BasicPage, basic_page_render_default as BasicPageRender, CardViewRender, collapse_detail_default as CollapseDetail, FieldCheckbox_default as FieldCheckbox, FieldRadio_default as FieldRadio, field_cascader_default as FieldSearchCascader, FieldSelect_default as FieldSelect, multi_field_display_default as MultiFieldDisplay, rich_editor_default as RichEditor, tag_span_default as Tag, XlsxParser, field_readonly_default as fieldReadonly, getDataByModelType, ref_card_label_render_default as refCardLabelRender, renderWebSetupApp, run, selectTag_default as selectTag, setupPageEvent, tag_label_default as taglabel, useGetRefCard, usePageEvent, useQuickNext, useRefCardData, useSearchEvent };
34
+ export { AppMqttService, base_vxe_table_default as BaseVxeTable, basic_page_default as BasicPage, basic_page_render_default as BasicPageRender, CardViewRender, collapse_detail_default as CollapseDetail, FieldCheckbox_default as FieldCheckbox, FieldRadio_default as FieldRadio, field_cascader_default as FieldSearchCascader, FieldSelect_default as FieldSelect, modeling_trace_template_default as ModelingTraceTemplate, multi_field_display_default as MultiFieldDisplay, rich_editor_default as RichEditor, tag_span_default as Tag, XlsxParser, field_readonly_default as fieldReadonly, getCardFieldValue, getCardForeignFields, getDataByModelType, modelingTraceability, ref_card_label_render_default as refCardLabelRender, renderWebSetupApp, run, selectTag_default as selectTag, setupPageEvent, tag_label_default as taglabel, useGetRefCard, usePageEvent, useQuickNext, useRefCardData, useSearchEvent };
@@ -1,6 +1,11 @@
1
1
  declare const _default: {
2
2
  appLogoImage: string;
3
3
  basicInformation: string;
4
+ systemTriggered: string;
5
+ userBehavior: string;
6
+ modelTrace: string;
7
+ operationType: string;
8
+ detailData: string;
4
9
  approval: {
5
10
  button: {
6
11
  PartialSubmit: string;
@@ -4,6 +4,11 @@ var appDesigner_exports = /* @__PURE__ */ __exportAll({ default: () => appDesign
4
4
  var appDesigner_default = {
5
5
  appLogoImage: "图片",
6
6
  basicInformation: "基本信息",
7
+ systemTriggered: "系统触发",
8
+ userBehavior: "用户行为",
9
+ modelTrace: "建模追溯",
10
+ operationType: "操作类型",
11
+ detailData: "详细数据",
7
12
  approval: { button: { PartialSubmit: "部分提交" } },
8
13
  template: "模板"
9
14
  };
@@ -1,4 +1,7 @@
1
1
  declare const _default: {
2
+ table: {
3
+ total: string;
4
+ };
2
5
  dataConnection: {
3
6
  modelField: {
4
7
  integer: string;
@@ -1,15 +1,18 @@
1
1
  import { __exportAll } from "../../_virtual/_rolldown/runtime.mjs";
2
2
  //#region src/locale/sys/component.ts
3
3
  var component_exports = /* @__PURE__ */ __exportAll({ default: () => component_default });
4
- var component_default = { dataConnection: { modelField: {
5
- integer: "整数",
6
- long: "长整数",
7
- double: "小数",
8
- decimal: "精度小数",
9
- boolean: "布尔",
10
- date: "日期",
11
- user: "人员关联",
12
- org: "部门关联"
13
- } } };
4
+ var component_default = {
5
+ table: { total: "共 {total} 条" },
6
+ dataConnection: { modelField: {
7
+ integer: "整数",
8
+ long: "长整数",
9
+ double: "小数",
10
+ decimal: "精度小数",
11
+ boolean: "布尔",
12
+ date: "日期",
13
+ user: "人员关联",
14
+ org: "部门关联"
15
+ } }
16
+ };
14
17
  //#endregion
15
18
  export { component_exports };
@@ -1,4 +1,6 @@
1
1
  declare const _default: {
2
+ data: string;
3
+ fieldName: string;
2
4
  uniqueOrNot: string;
3
5
  option: string;
4
6
  related_lot_no: string;
@@ -2,6 +2,8 @@ import { __exportAll } from "../../_virtual/_rolldown/runtime.mjs";
2
2
  //#region src/locale/sys/model.ts
3
3
  var model_exports = /* @__PURE__ */ __exportAll({ default: () => model_default });
4
4
  var model_default = {
5
+ data: "数据",
6
+ fieldName: "字段名称",
5
7
  uniqueOrNot: "是否唯一",
6
8
  option: "枚举单选",
7
9
  related_lot_no: "关联批次",
@@ -1,5 +1,8 @@
1
1
  declare const _default: {
2
2
  searchField: string;
3
+ oldData: string;
4
+ newData: string;
5
+ more: string;
3
6
  dataLinkage: {
4
7
  rootSelectPlaceholder2: string;
5
8
  };
@@ -3,6 +3,9 @@ import { __exportAll } from "../../_virtual/_rolldown/runtime.mjs";
3
3
  var pageDesigner_exports = /* @__PURE__ */ __exportAll({ default: () => pageDesigner_default });
4
4
  var pageDesigner_default = {
5
5
  searchField: "搜索字段",
6
+ oldData: "旧数据",
7
+ newData: "新数据",
8
+ more: "更多",
6
9
  dataLinkage: { rootSelectPlaceholder2: "请选择模型字段" }
7
10
  };
8
11
  //#endregion
@@ -6,5 +6,10 @@ declare const _default: {
6
6
  signatureImage: string;
7
7
  true: string;
8
8
  checkBarcodeFieldTip: string;
9
+ index: string;
10
+ operation: string;
11
+ loadingText: string;
12
+ cancelOpenness: string;
13
+ traceDetail: string;
9
14
  };
10
15
  export default _default;
package/es/locale/sys.mjs CHANGED
@@ -8,7 +8,12 @@ var sys_default = {
8
8
  tableColumnDate: "时间",
9
9
  signatureImage: "签名",
10
10
  true: "是",
11
- checkBarcodeFieldTip: "请关联实体模型后再配置变量类型的条码内容"
11
+ checkBarcodeFieldTip: "请关联实体模型后再配置变量类型的条码内容",
12
+ index: "序号",
13
+ operation: "操作",
14
+ loadingText: "加载中...",
15
+ cancelOpenness: "关闭",
16
+ traceDetail: "追溯详情"
12
17
  };
13
18
  //#endregion
14
19
  export { sys_exports };
@@ -35,12 +35,12 @@ export declare class AppMqttService extends SystemMqttService {
35
35
  protected static subs(): void;
36
36
  protected static subKickOut(): MqttCancelSub;
37
37
  /**
38
- * 订阅系统级 MQTT 消息
38
+ * 订阅应用级 MQTT 消息
39
39
  *
40
40
  * @static
41
41
  * @param {string} topic
42
42
  */
43
- protected static subscribeApp<T = IObject>(topic: string, callback: MqttSubCallback<T>): MqttCancelSub;
43
+ static subscribeApp<T = IObject>(topic: string, callback: MqttSubCallback<T>): MqttCancelSub;
44
44
  /**
45
45
  * 订阅在线人数变化
46
46
  *
@@ -62,7 +62,7 @@ var AppMqttService = class extends SystemMqttService {
62
62
  });
63
63
  }
64
64
  /**
65
- * 订阅系统级 MQTT 消息
65
+ * 订阅应用级 MQTT 消息
66
66
  *
67
67
  * @static
68
68
  * @param {string} topic